From 650ad87f35f4405a2ca8270d2b2835daa442e5f1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:53:21 -0700 Subject: Initial commit --- .gitignore | 23 +++++++++++++++++++++++ README.md | 4 ++++ 2 files changed, 27 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..4d40434d64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Object files +*.o +*.ko +*.obj +*.elf + +# Libraries +*.lib +*.a + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex diff --git a/README.md b/README.md new file mode 100644 index 0000000000..93aecf88da --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +stmd +==== + +a spec for "standard markdown," with matching C and javascript implementations -- cgit 0.0.5-2-1-g0f52 From 870e63be7360b5a0097a27656048e853bc720464 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 21 Jul 2014 22:29:16 -0700 Subject: Initial commit --- .gitignore | 10 + LICENSE | 30 + Makefile | 62 + README.md | 41 +- TODO | 5 + alternative-html-blocks.txt | 247 + data/CaseFolding-3.2.0.txt | 912 +++ js/LICENSE | 30 + js/bench.js | 35 + js/markdown | 15 + js/stmd.js | 1540 +++++ js/test.js | 79 + license.bstrlib.txt | 29 + license.uthash.txt | 21 + mkcasefold.pl | 21 + oldtests/Blockquotes/Indents.html | 12 + oldtests/Blockquotes/Indents.markdown | 5 + oldtests/Blockquotes/Nesting.html | 32 + oldtests/Blockquotes/Nesting.markdown | 22 + oldtests/Blockquotes/Separation.html | 39 + oldtests/Blockquotes/Separation.markdown | 29 + oldtests/Code/BlankLines.html | 33 + oldtests/Code/BlankLines.markdown | 28 + oldtests/Code/BlankLinesAtEnd.html | 14 + oldtests/Code/BlankLinesAtEnd.markdown | 14 + oldtests/Code/FenceMatching.html | 8 + oldtests/Code/FenceMatching.markdown | 10 + oldtests/Code/FencedCodeBlocks.html | 24 + oldtests/Code/FencedCodeBlocks.markdown | 35 + oldtests/Code/IndentedCodeBlocks.html | 22 + oldtests/Code/IndentedCodeBlocks.markdown | 22 + oldtests/Code/IndentedFences.html | 20 + oldtests/Code/IndentedFences.markdown | 26 + oldtests/Code/IndentedInLists.html | 22 + oldtests/Code/IndentedInLists.markdown | 17 + oldtests/Code/Inline.html | 13 + oldtests/Code/Inline.markdown | 13 + oldtests/Code/ListBreakAfter.html | 30 + oldtests/Code/ListBreakAfter.markdown | 26 + oldtests/Code/WhiteLines.html | 7 + oldtests/Code/WhiteLines.markdown | 9 + oldtests/Emphasis/Escapes.html | 1 + oldtests/Emphasis/Escapes.markdown | 1 + oldtests/Emphasis/NestedEmphAndStrong.html | 66 + oldtests/Emphasis/NestedEmphAndStrong.markdown | 69 + oldtests/Emphasis/Pathological.html | 24 + oldtests/Emphasis/Pathological.markdown | 26 + oldtests/Emphasis/Punctuation.html | 10 + oldtests/Emphasis/Punctuation.markdown | 19 + oldtests/HTML/Blocks.html | 18 + oldtests/HTML/Blocks.markdown | 26 + oldtests/HTML/Inline.html | 8 + oldtests/HTML/Inline.markdown | 8 + oldtests/HTML/UppercaseTags.html | 4 + oldtests/HTML/UppercaseTags.markdown | 5 + oldtests/Headers/ATX.html | 14 + oldtests/Headers/ATX.markdown | 20 + oldtests/Headers/Setext.html | 9 + oldtests/Headers/Setext.markdown | 17 + oldtests/Links/AngleBrackets.html | 3 + oldtests/Links/AngleBrackets.markdown | 7 + oldtests/Links/AutoLinks.html | 7 + oldtests/Links/AutoLinks.markdown | 7 + oldtests/Links/BackticksInLinks.html | 1 + oldtests/Links/BackticksInLinks.markdown | 1 + oldtests/Links/CaseInsensitiveReferences.html | 1 + oldtests/Links/CaseInsensitiveReferences.markdown | 3 + oldtests/Links/Entities.html | 2 + oldtests/Links/Entities.markdown | 3 + oldtests/Links/InlineLinks.html | 10 + oldtests/Links/InlineLinks.markdown | 9 + oldtests/Links/ParensInURLs.html | 6 + oldtests/Links/ParensInURLs.markdown | 14 + oldtests/Links/ReferenceLinks.html | 7 + oldtests/Links/ReferenceLinks.markdown | 10 + oldtests/Lists/CodeBlocksInLists.html | 14 + oldtests/Lists/CodeBlocksInLists.markdown | 18 + oldtests/Lists/ConsecutiveLists.html | 20 + oldtests/Lists/ConsecutiveLists.markdown | 10 + oldtests/Lists/EmptyListItem.html | 10 + oldtests/Lists/EmptyListItem.markdown | 7 + oldtests/Lists/InBlockquote.html | 22 + oldtests/Lists/InBlockquote.markdown | 12 + oldtests/Lists/Indents.html | 22 + oldtests/Lists/Indents.markdown | 17 + oldtests/Lists/ListsAndHRs.html | 7 + oldtests/Lists/ListsAndHRs.markdown | 3 + oldtests/Lists/ListsAndSetextHeaders.html | 6 + oldtests/Lists/ListsAndSetextHeaders.markdown | 4 + oldtests/Lists/MultipleBlankLines.html | 56 + oldtests/Lists/MultipleBlankLines.markdown | 37 + oldtests/Lists/Start.html | 11 + oldtests/Lists/Start.markdown | 7 + oldtests/Lists/Sublists.html | 49 + oldtests/Lists/Sublists.markdown | 24 + oldtests/Lists/TightAndLoose.html | 49 + oldtests/Lists/TightAndLoose.markdown | 45 + oldtests/Lists/TightLooseBlockquote.html | 32 + oldtests/Lists/TightLooseBlockquote.markdown | 25 + oldtests/Lists/TightLooseMore.html | 7 + oldtests/Lists/TightLooseMore.markdown | 4 + oldtests/Lists/TwoBlankLinesEndList.html | 21 + oldtests/Lists/TwoBlankLinesEndList.markdown | 20 + oldtests/Makefile | 55 + oldtests/Misc/BackslashEscapes.html | 14 + oldtests/Misc/BackslashEscapes.markdown | 19 + oldtests/Misc/Laziness.html | 22 + oldtests/Misc/Laziness.markdown | 14 + oldtests/Misc/LineBreaks.html | 11 + oldtests/Misc/LineBreaks.markdown | 18 + oldtests/Misc/Transitions.html | 26 + oldtests/Misc/Transitions.markdown | 20 + oldtests/Original/Amps_and_angle_encoding.html | 9 + oldtests/Original/Amps_and_angle_encoding.markdown | 21 + oldtests/Original/Auto_links.html | 13 + oldtests/Original/Auto_links.markdown | 13 + oldtests/Original/Backslash_escapes.html | 75 + oldtests/Original/Backslash_escapes.markdown | 120 + .../Original/Blockquotes_with_code_blocks.html | 12 + .../Original/Blockquotes_with_code_blocks.markdown | 11 + oldtests/Original/Code_Blocks.html | 12 + oldtests/Original/Code_Blocks.markdown | 14 + oldtests/Original/Code_Spans.html | 3 + oldtests/Original/Code_Spans.markdown | 5 + oldtests/Original/Horizontal_rules.html | 39 + oldtests/Original/Horizontal_rules.markdown | 67 + oldtests/Original/Images.html | 11 + oldtests/Original/Images.markdown | 26 + oldtests/Original/Inline_HTML_Advanced.html | 23 + oldtests/Original/Inline_HTML_Advanced.markdown | 30 + oldtests/Original/Inline_HTML_Simple.html | 45 + oldtests/Original/Inline_HTML_Simple.markdown | 69 + oldtests/Original/Inline_HTML_comments.html | 8 + oldtests/Original/Inline_HTML_comments.markdown | 13 + oldtests/Original/Links_inline_style.html | 12 + oldtests/Original/Links_inline_style.markdown | 24 + oldtests/Original/Links_reference_style.html | 28 + oldtests/Original/Links_reference_style.markdown | 71 + oldtests/Original/Links_shortcut_references.html | 6 + .../Original/Links_shortcut_references.markdown | 20 + oldtests/Original/Literal_quotes_in_titles.html | 2 + .../Original/Literal_quotes_in_titles.markdown | 7 + .../Original/Markdown_Documentation_Basics.html | 242 + .../Markdown_Documentation_Basics.markdown | 306 + .../Original/Markdown_Documentation_Syntax.html | 708 +++ .../Markdown_Documentation_Syntax.markdown | 888 +++ oldtests/Original/Nested_blockquotes.html | 7 + oldtests/Original/Nested_blockquotes.markdown | 5 + oldtests/Original/Ordered_and_unordered_lists.html | 112 + .../Original/Ordered_and_unordered_lists.markdown | 131 + oldtests/Original/README | 15 + oldtests/Original/Strong_and_em_together.html | 4 + oldtests/Original/Strong_and_em_together.markdown | 7 + oldtests/Original/Tabs.html | 19 + oldtests/Original/Tabs.markdown | 21 + oldtests/Original/Tidyness.html | 8 + oldtests/Original/Tidyness.markdown | 5 + oldtests/Tabs/TabConversionUnicode.html | 1 + oldtests/Tabs/TabConversionUnicode.markdown | 1 + runtests.pl | 159 + spec.txt | 6044 ++++++++++++++++++++ spec2js.js | 17 + spec2md.pl | 36 + specfilter.hs | 37 + src/blocks.c | 747 +++ src/bstrlib.c | 2979 ++++++++++ src/bstrlib.h | 304 + src/case_fold_switch.c | 2637 +++++++++ src/casefold.c | 2699 +++++++++ src/debug.h | 36 + src/detab.c | 48 + src/getopt.c | 199 + src/html.c | 276 + src/inlines.c | 998 ++++ src/main.c | 102 + src/print.c | 168 + src/scanners.h | 15 + src/scanners.re | 238 + src/stmd.h | 121 + src/utf8.c | 106 + src/utf8.h | 6 + src/uthash.h | 948 +++ template.html | 66 + template.tex | 229 + 184 files changed, 27304 insertions(+), 3 deletions(-) create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 TODO create mode 100644 alternative-html-blocks.txt create mode 100644 data/CaseFolding-3.2.0.txt create mode 100644 js/LICENSE create mode 100644 js/bench.js create mode 100755 js/markdown create mode 100755 js/stmd.js create mode 100755 js/test.js create mode 100644 license.bstrlib.txt create mode 100644 license.uthash.txt create mode 100644 mkcasefold.pl create mode 100644 oldtests/Blockquotes/Indents.html create mode 100644 oldtests/Blockquotes/Indents.markdown create mode 100644 oldtests/Blockquotes/Nesting.html create mode 100644 oldtests/Blockquotes/Nesting.markdown create mode 100644 oldtests/Blockquotes/Separation.html create mode 100644 oldtests/Blockquotes/Separation.markdown create mode 100644 oldtests/Code/BlankLines.html create mode 100644 oldtests/Code/BlankLines.markdown create mode 100644 oldtests/Code/BlankLinesAtEnd.html create mode 100644 oldtests/Code/BlankLinesAtEnd.markdown create mode 100644 oldtests/Code/FenceMatching.html create mode 100644 oldtests/Code/FenceMatching.markdown create mode 100644 oldtests/Code/FencedCodeBlocks.html create mode 100644 oldtests/Code/FencedCodeBlocks.markdown create mode 100644 oldtests/Code/IndentedCodeBlocks.html create mode 100644 oldtests/Code/IndentedCodeBlocks.markdown create mode 100644 oldtests/Code/IndentedFences.html create mode 100644 oldtests/Code/IndentedFences.markdown create mode 100644 oldtests/Code/IndentedInLists.html create mode 100644 oldtests/Code/IndentedInLists.markdown create mode 100644 oldtests/Code/Inline.html create mode 100644 oldtests/Code/Inline.markdown create mode 100644 oldtests/Code/ListBreakAfter.html create mode 100644 oldtests/Code/ListBreakAfter.markdown create mode 100644 oldtests/Code/WhiteLines.html create mode 100644 oldtests/Code/WhiteLines.markdown create mode 100644 oldtests/Emphasis/Escapes.html create mode 100644 oldtests/Emphasis/Escapes.markdown create mode 100644 oldtests/Emphasis/NestedEmphAndStrong.html create mode 100644 oldtests/Emphasis/NestedEmphAndStrong.markdown create mode 100644 oldtests/Emphasis/Pathological.html create mode 100644 oldtests/Emphasis/Pathological.markdown create mode 100644 oldtests/Emphasis/Punctuation.html create mode 100644 oldtests/Emphasis/Punctuation.markdown create mode 100644 oldtests/HTML/Blocks.html create mode 100644 oldtests/HTML/Blocks.markdown create mode 100644 oldtests/HTML/Inline.html create mode 100644 oldtests/HTML/Inline.markdown create mode 100644 oldtests/HTML/UppercaseTags.html create mode 100644 oldtests/HTML/UppercaseTags.markdown create mode 100644 oldtests/Headers/ATX.html create mode 100644 oldtests/Headers/ATX.markdown create mode 100644 oldtests/Headers/Setext.html create mode 100644 oldtests/Headers/Setext.markdown create mode 100644 oldtests/Links/AngleBrackets.html create mode 100644 oldtests/Links/AngleBrackets.markdown create mode 100644 oldtests/Links/AutoLinks.html create mode 100644 oldtests/Links/AutoLinks.markdown create mode 100644 oldtests/Links/BackticksInLinks.html create mode 100644 oldtests/Links/BackticksInLinks.markdown create mode 100644 oldtests/Links/CaseInsensitiveReferences.html create mode 100644 oldtests/Links/CaseInsensitiveReferences.markdown create mode 100644 oldtests/Links/Entities.html create mode 100644 oldtests/Links/Entities.markdown create mode 100644 oldtests/Links/InlineLinks.html create mode 100644 oldtests/Links/InlineLinks.markdown create mode 100644 oldtests/Links/ParensInURLs.html create mode 100644 oldtests/Links/ParensInURLs.markdown create mode 100644 oldtests/Links/ReferenceLinks.html create mode 100644 oldtests/Links/ReferenceLinks.markdown create mode 100644 oldtests/Lists/CodeBlocksInLists.html create mode 100644 oldtests/Lists/CodeBlocksInLists.markdown create mode 100644 oldtests/Lists/ConsecutiveLists.html create mode 100644 oldtests/Lists/ConsecutiveLists.markdown create mode 100644 oldtests/Lists/EmptyListItem.html create mode 100644 oldtests/Lists/EmptyListItem.markdown create mode 100644 oldtests/Lists/InBlockquote.html create mode 100644 oldtests/Lists/InBlockquote.markdown create mode 100644 oldtests/Lists/Indents.html create mode 100644 oldtests/Lists/Indents.markdown create mode 100644 oldtests/Lists/ListsAndHRs.html create mode 100644 oldtests/Lists/ListsAndHRs.markdown create mode 100644 oldtests/Lists/ListsAndSetextHeaders.html create mode 100644 oldtests/Lists/ListsAndSetextHeaders.markdown create mode 100644 oldtests/Lists/MultipleBlankLines.html create mode 100644 oldtests/Lists/MultipleBlankLines.markdown create mode 100644 oldtests/Lists/Start.html create mode 100644 oldtests/Lists/Start.markdown create mode 100644 oldtests/Lists/Sublists.html create mode 100644 oldtests/Lists/Sublists.markdown create mode 100644 oldtests/Lists/TightAndLoose.html create mode 100644 oldtests/Lists/TightAndLoose.markdown create mode 100644 oldtests/Lists/TightLooseBlockquote.html create mode 100644 oldtests/Lists/TightLooseBlockquote.markdown create mode 100644 oldtests/Lists/TightLooseMore.html create mode 100644 oldtests/Lists/TightLooseMore.markdown create mode 100644 oldtests/Lists/TwoBlankLinesEndList.html create mode 100644 oldtests/Lists/TwoBlankLinesEndList.markdown create mode 100644 oldtests/Makefile create mode 100644 oldtests/Misc/BackslashEscapes.html create mode 100644 oldtests/Misc/BackslashEscapes.markdown create mode 100644 oldtests/Misc/Laziness.html create mode 100644 oldtests/Misc/Laziness.markdown create mode 100644 oldtests/Misc/LineBreaks.html create mode 100644 oldtests/Misc/LineBreaks.markdown create mode 100644 oldtests/Misc/Transitions.html create mode 100644 oldtests/Misc/Transitions.markdown create mode 100644 oldtests/Original/Amps_and_angle_encoding.html create mode 100644 oldtests/Original/Amps_and_angle_encoding.markdown create mode 100644 oldtests/Original/Auto_links.html create mode 100644 oldtests/Original/Auto_links.markdown create mode 100644 oldtests/Original/Backslash_escapes.html create mode 100644 oldtests/Original/Backslash_escapes.markdown create mode 100644 oldtests/Original/Blockquotes_with_code_blocks.html create mode 100644 oldtests/Original/Blockquotes_with_code_blocks.markdown create mode 100644 oldtests/Original/Code_Blocks.html create mode 100644 oldtests/Original/Code_Blocks.markdown create mode 100644 oldtests/Original/Code_Spans.html create mode 100644 oldtests/Original/Code_Spans.markdown create mode 100644 oldtests/Original/Horizontal_rules.html create mode 100644 oldtests/Original/Horizontal_rules.markdown create mode 100644 oldtests/Original/Images.html create mode 100644 oldtests/Original/Images.markdown create mode 100644 oldtests/Original/Inline_HTML_Advanced.html create mode 100644 oldtests/Original/Inline_HTML_Advanced.markdown create mode 100644 oldtests/Original/Inline_HTML_Simple.html create mode 100644 oldtests/Original/Inline_HTML_Simple.markdown create mode 100644 oldtests/Original/Inline_HTML_comments.html create mode 100644 oldtests/Original/Inline_HTML_comments.markdown create mode 100644 oldtests/Original/Links_inline_style.html create mode 100644 oldtests/Original/Links_inline_style.markdown create mode 100644 oldtests/Original/Links_reference_style.html create mode 100644 oldtests/Original/Links_reference_style.markdown create mode 100644 oldtests/Original/Links_shortcut_references.html create mode 100644 oldtests/Original/Links_shortcut_references.markdown create mode 100644 oldtests/Original/Literal_quotes_in_titles.html create mode 100644 oldtests/Original/Literal_quotes_in_titles.markdown create mode 100644 oldtests/Original/Markdown_Documentation_Basics.html create mode 100644 oldtests/Original/Markdown_Documentation_Basics.markdown create mode 100644 oldtests/Original/Markdown_Documentation_Syntax.html create mode 100644 oldtests/Original/Markdown_Documentation_Syntax.markdown create mode 100644 oldtests/Original/Nested_blockquotes.html create mode 100644 oldtests/Original/Nested_blockquotes.markdown create mode 100644 oldtests/Original/Ordered_and_unordered_lists.html create mode 100644 oldtests/Original/Ordered_and_unordered_lists.markdown create mode 100644 oldtests/Original/README create mode 100644 oldtests/Original/Strong_and_em_together.html create mode 100644 oldtests/Original/Strong_and_em_together.markdown create mode 100644 oldtests/Original/Tabs.html create mode 100644 oldtests/Original/Tabs.markdown create mode 100644 oldtests/Original/Tidyness.html create mode 100644 oldtests/Original/Tidyness.markdown create mode 100644 oldtests/Tabs/TabConversionUnicode.html create mode 100644 oldtests/Tabs/TabConversionUnicode.markdown create mode 100644 runtests.pl create mode 100644 spec.txt create mode 100755 spec2js.js create mode 100644 spec2md.pl create mode 100755 specfilter.hs create mode 100644 src/blocks.c create mode 100644 src/bstrlib.c create mode 100644 src/bstrlib.h create mode 100644 src/case_fold_switch.c create mode 100644 src/casefold.c create mode 100644 src/debug.h create mode 100644 src/detab.c create mode 100644 src/getopt.c create mode 100644 src/html.c create mode 100644 src/inlines.c create mode 100644 src/main.c create mode 100644 src/print.c create mode 100644 src/scanners.h create mode 100644 src/scanners.re create mode 100644 src/stmd.h create mode 100644 src/utf8.c create mode 100644 src/utf8.h create mode 100644 src/uthash.h create mode 100644 template.html create mode 100644 template.tex diff --git a/.gitignore b/.gitignore index 4d40434d64..9cfb3a6d3d 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,13 @@ *.i*86 *.x86_64 *.hex + +*~ +*.bak +*.diff +*# +scanners.c +*.zip +bstrlib.txt +stmd.dSYM/* +stmd diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..bb8c36f58d --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2014, John MacFarlane + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of John MacFarlane nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..98d0c450e4 --- /dev/null +++ b/Makefile @@ -0,0 +1,62 @@ +CFLAGS=-g -O3 -Wall -Wextra -std=c99 -Isrc $(OPTFLAGS) +LDFLAGS=-g -O3 -Wall -Werror +SRCDIR=src +DATADIR=data + +PROG=./stmd + +.PHONY: all oldtests test spec benchjs testjs +all: $(SRCDIR)/case_fold_switch.c $(PROG) + +spec: test spec.html + +spec.md: spec.txt + perl spec2md.pl < $< > $@ + +spec.html: spec.md template.html + pandoc --no-highlight --number-sections --template template.html -s --toc -S $< > $@ # | perl -pe 's/␣/ <\/span>/g' > $@ + +spec.pdf: spec.md template.tex specfilter.hs + pandoc -s $< --template template.tex \ + --filter ./specfilter.hs -o $@ --latex-engine=xelatex --toc \ + --number-sections -V documentclass=report -V tocdepth=2 \ + -V classoption=twosides + +oldtests: + make -C oldtests --quiet clean all + +test: spec.txt + perl runtests.pl $(PROG) $< + +testjs: spec.txt + node js/test.js +# perl runtests.pl js/markdown $< + +benchjs: + node js/bench.js + +$(PROG): $(SRCDIR)/main.c $(SRCDIR)/inlines.o $(SRCDIR)/blocks.o $(SRCDIR)/detab.o $(SRCDIR)/bstrlib.o $(SRCDIR)/scanners.o $(SRCDIR)/print.o $(SRCDIR)/html.o $(SRCDIR)/utf8.o + $(CC) $(LDFLAGS) -o $@ $^ + +$(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re + re2c --case-insensitive -bis $< > $@ + +$(SRCDIR)/case_fold_switch.c: $(DATADIR)/CaseFolding-3.2.0.txt + perl mkcasefold.pl < $< > $@ + +.PHONY: leakcheck clean fuzztest dingus + +dingus: + cd js && echo "Starting dingus server at http://localhost:9000" && python -m SimpleHTTPServer 9000 + +leakcheck: $(PROG) + cat oldtests/*/*.markdown | valgrind --leak-check=full --dsymutil=yes $(PROG) + +fuzztest: + for i in `seq 1 10`; do \ + time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done + +clean: + -rm test $(SRCDIR)/*.o $(SRCDIR)/scanners.c + -rm -r *.dSYM + -rm spec.md fuzz.txt spec.html diff --git a/README.md b/README.md index 93aecf88da..1f7c7a5466 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,39 @@ -stmd -==== +Standard markdown +================= + +Standard markdown is a specification of markdown syntax, together +with implementations (`stmd`) in C and javascript. + +The C implementation provides both a library and a standalone program +that converts markdown to HTML. It is written in standard C99 and has +no library dependencies. (However, if you check it out from the +repository, you'll need `re2c` to generate `scanners.c` from +`scanners.re`. This is only a build dependency for developers, since +`scanners.c` can be provided in a released source tarball.) + +The javascript implementation is a single javascript file +that can be linked to an HTML page. A standalone version (using +`node.js`) is also provided (`js/markdown`), and there is a +"dingus" for playing with it interactively. (`make dingus` will start +this.) + +The spec contains over 400 embedded examples which serve as +conformance tests. To run the tests for `stmd`, do `make test`. +To run them for another markdown program, say `myprog`, +do `make test PROG=myprog`. To run the tests for `stmd.js`, +do `make testjs`. + +The source of the spec is `spec.txt`. This is basically a markdown +file, with code examples written in a shorthand form: + + . + markdown source + . + expected HTML output + . + +To build an HTML version of the spec, do `make spec.html`. +To build a PDF version, do `make spec.pdf`. Both these commands +require that pandoc is installed, and creating a PDF requires +a latex installation. -a spec for "standard markdown," with matching C and javascript implementations diff --git a/TODO b/TODO new file mode 100644 index 0000000000..f9369e16ff --- /dev/null +++ b/TODO @@ -0,0 +1,5 @@ +- add library function to convert a string +- add README/library documentation +- add man page for prog and library +- document/clean up code + diff --git a/alternative-html-blocks.txt b/alternative-html-blocks.txt new file mode 100644 index 0000000000..3ba0d15614 --- /dev/null +++ b/alternative-html-blocks.txt @@ -0,0 +1,247 @@ +# Appendix B: An alternate spec for HTML blocks {-} + +(The following spec departs less from original markdown than the +one described above, but is also less flexible.) + +An [HTML block](#html-block) begins +with an [open tag](#open-tag), [HTML comment](#html-comment), +[processing instruction](#processing-instruction), +[declaration](#declaration), or [CDATA section](#cdata-section). +This opening element may optionally be preceded by 1-3 spaces, +and must not be followed on a line by anything other than white space. + +If the opening tag is self-closing, or if it is an [HTML +comment](#html-comment), [processing +instruction](#processing-instruction), [declaration](#declaration), or +[CDATA section](#cdata-section), then the [HTML block](#html-block) +contains just that tag. + +If it is an [open tag](#open-tag), then the [HTML block](#html-block) +continues until a matching closing tag is found, or until the end +of the document. Note that the matching closing tag is not necessarily +the first closing tag of the same type that is encountered, since +that tag may close a later open tag of the same type. Open and closing +tags must be balanced. + +The contents of the HTML block are interpreted as raw HTML, and will not +be escaped in HTML output. + +Some simple examples: + +. + + + + +
+ hi +
+ +okay. +. + + + + +
+ hi +
+

okay.

+. + + +. +
+ +
+ +

fooö

+ +
+ +
+. +
+ +
+ +

fooö

+ +
+ +
+. + +A self-closing tag: + +. +
+. +
+. + +Here we have an unclosed tag, and the block continues to the end of +the document: + +. +
+
+foo +
+ +*bar* +. +
+
+foo +
+ +*bar* +. + +A comment: + +. + +. + +. + +A processing instruction: + +. + +. + +. + +CDATA: + +. + +. + +. + +The opening tag can be indented 1-3 spaces, but not 4: + +. + + +. + +
<!-- foo -->
+
+. + +The opening tag must be on a line (or lines) by itself: + +. +
+foo +
+. +

foo

+. + +. +bar +. +

bar

+. + +The opening tag need not be an HTML block tag or even an HTML tag: + +. +
+foo + +. + +foo + +. + +. + +bar + +. + +bar + +. + +So, note the difference: + +. + +bar + + +bar +. + +bar + +

bar

+. + +This rule differs from John Gruber's original markdown syntax +specification, which says: + +> The only restrictions are that block-level HTML elements — +> e.g. `
`, ``, `
`, `

`, etc. — must be separated from +> surrounding content by blank lines, and the start and end tags of the +> block should not be indented with tabs or spaces. + +In some ways Gruber's rule is more restrictive than the one given +here: + +- It requires that an HTML block be preceded and followed by a blank line. +- It does not allow the start tag to be indented. +- It does not allow the end tag to be indented. +- It does not require that the open tag be an HTML block-level tag. + +Indeed, most markdown implementations, including some of Gruber's +own perl implementations, do not impose these restrictions. + +However, unlike Gruber's rule, this one requires that the open +tag be on a line by itself. It also differs from most markdown +implementations in how it handles the case where there is no matching +closing tag (a case not mentioned in Gruber's rule). In such a case, +the rule stated above includes the whole rest of the document in the +HTML block. + diff --git a/data/CaseFolding-3.2.0.txt b/data/CaseFolding-3.2.0.txt new file mode 100644 index 0000000000..104a8237b5 --- /dev/null +++ b/data/CaseFolding-3.2.0.txt @@ -0,0 +1,912 @@ +# CaseFolding-3.2.0.txt +# Date: 2002-03-22,20:54:33 GMT [MD] +# +# Case Folding Properties +# +# This file is a supplement to the UnicodeData file. +# It provides a case folding mapping generated from the Unicode Character Database. +# If all characters are mapped according to the full mapping below, then +# case differences (according to UnicodeData.txt and SpecialCasing.txt) +# are eliminated. +# +# The data supports both implementations that require simple case foldings +# (where string lengths don't change), and implementations that allow full case folding +# (where string lengths may grow). Note that where they can be supported, the +# full case foldings are superior: for example, they allow "MASSE" and "Mae" to match. +# +# NOTE: case folding does not preserve normalization formats! +# +# For information on case folding, see +# UTR #21 Case Mappings, at http://www.unicode.org/unicode/reports/tr21/ +# +# ================================================================================ +# Format +# ================================================================================ +# The entries in this file are in the following machine-readable format: +# +# ; ; ; # +# +# The status field is: +# C: common case folding, common mappings shared by both simple and full mappings. +# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. +# S: simple case folding, mappings to single characters where different from F. +# T: special case for uppercase I and dotted uppercase I +# - For non-Turkic languages, this mapping is normally not used. +# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. +# +# Usage: +# A. To do a simple case folding, use the mappings with status C + S. +# B. To do a full case folding, use the mappings with status C + F. +# +# The mappings with status T can be used or omitted depending on the desired case-folding +# behavior. (The default option is to exclude them.) +# +# ================================================================= + +0041; C; 0061; # LATIN CAPITAL LETTER A +0042; C; 0062; # LATIN CAPITAL LETTER B +0043; C; 0063; # LATIN CAPITAL LETTER C +0044; C; 0064; # LATIN CAPITAL LETTER D +0045; C; 0065; # LATIN CAPITAL LETTER E +0046; C; 0066; # LATIN CAPITAL LETTER F +0047; C; 0067; # LATIN CAPITAL LETTER G +0048; C; 0068; # LATIN CAPITAL LETTER H +0049; C; 0069; # LATIN CAPITAL LETTER I +0049; T; 0131; # LATIN CAPITAL LETTER I +004A; C; 006A; # LATIN CAPITAL LETTER J +004B; C; 006B; # LATIN CAPITAL LETTER K +004C; C; 006C; # LATIN CAPITAL LETTER L +004D; C; 006D; # LATIN CAPITAL LETTER M +004E; C; 006E; # LATIN CAPITAL LETTER N +004F; C; 006F; # LATIN CAPITAL LETTER O +0050; C; 0070; # LATIN CAPITAL LETTER P +0051; C; 0071; # LATIN CAPITAL LETTER Q +0052; C; 0072; # LATIN CAPITAL LETTER R +0053; C; 0073; # LATIN CAPITAL LETTER S +0054; C; 0074; # LATIN CAPITAL LETTER T +0055; C; 0075; # LATIN CAPITAL LETTER U +0056; C; 0076; # LATIN CAPITAL LETTER V +0057; C; 0077; # LATIN CAPITAL LETTER W +0058; C; 0078; # LATIN CAPITAL LETTER X +0059; C; 0079; # LATIN CAPITAL LETTER Y +005A; C; 007A; # LATIN CAPITAL LETTER Z +00B5; C; 03BC; # MICRO SIGN +00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE +00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE +00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE +00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6; C; 00E6; # LATIN CAPITAL LETTER AE +00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA +00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE +00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE +00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS +00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE +00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE +00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS +00D0; C; 00F0; # LATIN CAPITAL LETTER ETH +00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE +00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE +00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE +00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE +00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS +00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE +00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE +00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE +00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE +00DE; C; 00FE; # LATIN CAPITAL LETTER THORN +00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S +0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON +0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE +0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK +0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE +0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE +010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON +010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON +0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE +0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON +0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE +0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE +0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK +011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON +011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE +0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE +0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA +0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE +0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE +012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON +012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE +012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK +0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0132; C; 0133; # LATIN CAPITAL LIGATURE IJ +0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA +0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE +013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA +013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON +013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE +0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE +0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA +0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON +0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A; C; 014B; # LATIN CAPITAL LETTER ENG +014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON +014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE +0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152; C; 0153; # LATIN CAPITAL LIGATURE OE +0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE +0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA +0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON +015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE +015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA +0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON +0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA +0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON +0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE +0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE +016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON +016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE +016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE +0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK +0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS +0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE +017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON +017F; C; 0073; # LATIN SMALL LETTER LONG S +0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK +0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR +0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX +0186; C; 0254; # LATIN CAPITAL LETTER OPEN O +0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK +0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D +018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK +018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR +018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E +018F; C; 0259; # LATIN CAPITAL LETTER SCHWA +0190; C; 025B; # LATIN CAPITAL LETTER OPEN E +0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK +0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK +0194; C; 0263; # LATIN CAPITAL LETTER GAMMA +0196; C; 0269; # LATIN CAPITAL LETTER IOTA +0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE +0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK +019C; C; 026F; # LATIN CAPITAL LETTER TURNED M +019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK +019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN +01A2; C; 01A3; # LATIN CAPITAL LETTER OI +01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK +01A6; C; 0280; # LATIN LETTER YR +01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO +01A9; C; 0283; # LATIN CAPITAL LETTER ESH +01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK +01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN +01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON +01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK +01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK +01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE +01B7; C; 0292; # LATIN CAPITAL LETTER EZH +01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED +01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE +01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON +01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C7; C; 01C9; # LATIN CAPITAL LETTER LJ +01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CA; C; 01CC; # LATIN CAPITAL LETTER NJ +01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON +01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON +01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON +01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON +01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON +01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE +01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON +01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON +01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK +01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON +01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON +01F1; C; 01F3; # LATIN CAPITAL LETTER DZ +01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE +01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR +01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN +01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE +01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE +01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW +021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW +021C; C; 021D; # LATIN CAPITAL LETTER YOGH +021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON +0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222; C; 0223; # LATIN CAPITAL LETTER OU +0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK +0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE +0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA +022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE +0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON +0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI +0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS +0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS +0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS +038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS +038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS +038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS +038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS +0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA +0392; C; 03B2; # GREEK CAPITAL LETTER BETA +0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA +0394; C; 03B4; # GREEK CAPITAL LETTER DELTA +0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON +0396; C; 03B6; # GREEK CAPITAL LETTER ZETA +0397; C; 03B7; # GREEK CAPITAL LETTER ETA +0398; C; 03B8; # GREEK CAPITAL LETTER THETA +0399; C; 03B9; # GREEK CAPITAL LETTER IOTA +039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA +039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA +039C; C; 03BC; # GREEK CAPITAL LETTER MU +039D; C; 03BD; # GREEK CAPITAL LETTER NU +039E; C; 03BE; # GREEK CAPITAL LETTER XI +039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON +03A0; C; 03C0; # GREEK CAPITAL LETTER PI +03A1; C; 03C1; # GREEK CAPITAL LETTER RHO +03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA +03A4; C; 03C4; # GREEK CAPITAL LETTER TAU +03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON +03A6; C; 03C6; # GREEK CAPITAL LETTER PHI +03A7; C; 03C7; # GREEK CAPITAL LETTER CHI +03A8; C; 03C8; # GREEK CAPITAL LETTER PSI +03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA +03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA +03D0; C; 03B2; # GREEK BETA SYMBOL +03D1; C; 03B8; # GREEK THETA SYMBOL +03D5; C; 03C6; # GREEK PHI SYMBOL +03D6; C; 03C0; # GREEK PI SYMBOL +03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA +03DA; C; 03DB; # GREEK LETTER STIGMA +03DC; C; 03DD; # GREEK LETTER DIGAMMA +03DE; C; 03DF; # GREEK LETTER KOPPA +03E0; C; 03E1; # GREEK LETTER SAMPI +03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI +03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI +03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI +03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI +03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA +03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA +03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI +03F0; C; 03BA; # GREEK KAPPA SYMBOL +03F1; C; 03C1; # GREEK RHO SYMBOL +03F2; C; 03C3; # GREEK LUNATE SIGMA SYMBOL +03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL +03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL +0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401; C; 0451; # CYRILLIC CAPITAL LETTER IO +0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE +0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE +0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE +0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407; C; 0457; # CYRILLIC CAPITAL LETTER YI +0408; C; 0458; # CYRILLIC CAPITAL LETTER JE +0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE +040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE +040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE +040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE +040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE +040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U +040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE +0410; C; 0430; # CYRILLIC CAPITAL LETTER A +0411; C; 0431; # CYRILLIC CAPITAL LETTER BE +0412; C; 0432; # CYRILLIC CAPITAL LETTER VE +0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE +0414; C; 0434; # CYRILLIC CAPITAL LETTER DE +0415; C; 0435; # CYRILLIC CAPITAL LETTER IE +0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE +0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE +0418; C; 0438; # CYRILLIC CAPITAL LETTER I +0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I +041A; C; 043A; # CYRILLIC CAPITAL LETTER KA +041B; C; 043B; # CYRILLIC CAPITAL LETTER EL +041C; C; 043C; # CYRILLIC CAPITAL LETTER EM +041D; C; 043D; # CYRILLIC CAPITAL LETTER EN +041E; C; 043E; # CYRILLIC CAPITAL LETTER O +041F; C; 043F; # CYRILLIC CAPITAL LETTER PE +0420; C; 0440; # CYRILLIC CAPITAL LETTER ER +0421; C; 0441; # CYRILLIC CAPITAL LETTER ES +0422; C; 0442; # CYRILLIC CAPITAL LETTER TE +0423; C; 0443; # CYRILLIC CAPITAL LETTER U +0424; C; 0444; # CYRILLIC CAPITAL LETTER EF +0425; C; 0445; # CYRILLIC CAPITAL LETTER HA +0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE +0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE +0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA +0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA +042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN +042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU +042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN +042D; C; 044D; # CYRILLIC CAPITAL LETTER E +042E; C; 044E; # CYRILLIC CAPITAL LETTER YU +042F; C; 044F; # CYRILLIC CAPITAL LETTER YA +0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA +0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT +0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E +0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS +0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS +046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI +0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI +0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA +0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA +0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478; C; 0479; # CYRILLIC CAPITAL LETTER UK +047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA +047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E; C; 047F; # CYRILLIC CAPITAL LETTER OT +0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA +048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK +0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA +04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE +04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U +04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE +04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA +04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE +04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE +04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA +04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON +04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O +04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON +04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE +0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE +0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE +0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE +0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE +050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE +050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE +050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE +0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB +0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN +0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM +0534; C; 0564; # ARMENIAN CAPITAL LETTER DA +0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH +0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA +0537; C; 0567; # ARMENIAN CAPITAL LETTER EH +0538; C; 0568; # ARMENIAN CAPITAL LETTER ET +0539; C; 0569; # ARMENIAN CAPITAL LETTER TO +053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE +053B; C; 056B; # ARMENIAN CAPITAL LETTER INI +053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN +053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH +053E; C; 056E; # ARMENIAN CAPITAL LETTER CA +053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN +0540; C; 0570; # ARMENIAN CAPITAL LETTER HO +0541; C; 0571; # ARMENIAN CAPITAL LETTER JA +0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD +0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH +0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN +0545; C; 0575; # ARMENIAN CAPITAL LETTER YI +0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW +0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA +0548; C; 0578; # ARMENIAN CAPITAL LETTER VO +0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA +054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH +054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH +054C; C; 057C; # ARMENIAN CAPITAL LETTER RA +054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH +054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW +054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN +0550; C; 0580; # ARMENIAN CAPITAL LETTER REH +0551; C; 0581; # ARMENIAN CAPITAL LETTER CO +0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN +0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR +0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH +0555; C; 0585; # ARMENIAN CAPITAL LETTER OH +0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH +0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN +1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW +1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW +1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW +1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW +1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA +1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON +1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW +1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS +1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA +1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE +1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW +1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW +1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW +1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE +1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW +1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW +1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE +1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW +1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW +1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW +1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE +1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW +1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE +1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE +1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS +1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW +1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW +1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS +1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE +1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE +1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE +1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE +1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE +1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI +1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA +1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI +1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI +1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE; C; 03B9; # GREEK PROSGEGRAMMENI +1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA +1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA +1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI +1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA +1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI +1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI +1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA +1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126; C; 03C9; # OHM SIGN +212A; C; 006B; # KELVIN SIGN +212B; C; 00E5; # ANGSTROM SIGN +2160; C; 2170; # ROMAN NUMERAL ONE +2161; C; 2171; # ROMAN NUMERAL TWO +2162; C; 2172; # ROMAN NUMERAL THREE +2163; C; 2173; # ROMAN NUMERAL FOUR +2164; C; 2174; # ROMAN NUMERAL FIVE +2165; C; 2175; # ROMAN NUMERAL SIX +2166; C; 2176; # ROMAN NUMERAL SEVEN +2167; C; 2177; # ROMAN NUMERAL EIGHT +2168; C; 2178; # ROMAN NUMERAL NINE +2169; C; 2179; # ROMAN NUMERAL TEN +216A; C; 217A; # ROMAN NUMERAL ELEVEN +216B; C; 217B; # ROMAN NUMERAL TWELVE +216C; C; 217C; # ROMAN NUMERAL FIFTY +216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED +216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED +216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND +24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A +24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B +24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C +24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D +24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E +24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F +24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G +24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H +24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I +24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J +24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K +24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L +24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M +24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N +24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O +24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P +24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q +24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R +24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S +24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T +24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U +24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V +24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W +24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X +24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y +24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z +FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF +FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI +FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL +FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI +FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL +FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T +FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST +FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW +FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH +FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI +FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW +FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH +FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A +FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B +FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C +FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D +FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E +FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F +FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G +FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H +FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I +FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J +FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K +FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L +FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M +FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N +FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O +FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P +FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q +FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R +FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S +FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T +FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U +FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V +FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W +FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X +FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z +10400; C; 10428; # DESERET CAPITAL LETTER LONG I +10401; C; 10429; # DESERET CAPITAL LETTER LONG E +10402; C; 1042A; # DESERET CAPITAL LETTER LONG A +10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH +10404; C; 1042C; # DESERET CAPITAL LETTER LONG O +10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO +10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I +10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E +10408; C; 10430; # DESERET CAPITAL LETTER SHORT A +10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH +1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O +1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO +1040C; C; 10434; # DESERET CAPITAL LETTER AY +1040D; C; 10435; # DESERET CAPITAL LETTER OW +1040E; C; 10436; # DESERET CAPITAL LETTER WU +1040F; C; 10437; # DESERET CAPITAL LETTER YEE +10410; C; 10438; # DESERET CAPITAL LETTER H +10411; C; 10439; # DESERET CAPITAL LETTER PEE +10412; C; 1043A; # DESERET CAPITAL LETTER BEE +10413; C; 1043B; # DESERET CAPITAL LETTER TEE +10414; C; 1043C; # DESERET CAPITAL LETTER DEE +10415; C; 1043D; # DESERET CAPITAL LETTER CHEE +10416; C; 1043E; # DESERET CAPITAL LETTER JEE +10417; C; 1043F; # DESERET CAPITAL LETTER KAY +10418; C; 10440; # DESERET CAPITAL LETTER GAY +10419; C; 10441; # DESERET CAPITAL LETTER EF +1041A; C; 10442; # DESERET CAPITAL LETTER VEE +1041B; C; 10443; # DESERET CAPITAL LETTER ETH +1041C; C; 10444; # DESERET CAPITAL LETTER THEE +1041D; C; 10445; # DESERET CAPITAL LETTER ES +1041E; C; 10446; # DESERET CAPITAL LETTER ZEE +1041F; C; 10447; # DESERET CAPITAL LETTER ESH +10420; C; 10448; # DESERET CAPITAL LETTER ZHEE +10421; C; 10449; # DESERET CAPITAL LETTER ER +10422; C; 1044A; # DESERET CAPITAL LETTER EL +10423; C; 1044B; # DESERET CAPITAL LETTER EM +10424; C; 1044C; # DESERET CAPITAL LETTER EN +10425; C; 1044D; # DESERET CAPITAL LETTER ENG diff --git a/js/LICENSE b/js/LICENSE new file mode 100644 index 0000000000..bb8c36f58d --- /dev/null +++ b/js/LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2014, John MacFarlane + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of John MacFarlane nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/js/bench.js b/js/bench.js new file mode 100644 index 0000000000..3c486b11a2 --- /dev/null +++ b/js/bench.js @@ -0,0 +1,35 @@ +var Benchmark = require('benchmark').Benchmark; +var suite = new Benchmark.Suite; +var fs = require('fs'); +var sm = require('./stmd'); +// https://github.com/coreyti/showdown +var showdown = require('../../showdown/src/showdown'); +// https://github.com/chjj/marked +var marked = require('../../marked/marked.min.js'); + +var benchfile = process.argv[2] || 'oldtests/Original/Markdown_Documentation_Syntax.markdown'; + +var contents = fs.readFileSync(benchfile, 'utf8'); + +// var converter = new showdown.converter(); + +suite.add('stmd markdown->html', function() { + var doc = new sm.DocParser().parse(contents); + var renderer = new sm.HtmlRenderer(); + renderer.renderBlock(doc); +}) + +.add('showdown.js markdown->html', function() { + var converter = new showdown.converter(); + converter.makeHtml(contents); +}) + +.add('marked.js markdown->html', function() { + marked(contents); +}) + +.on('cycle', function(event) { + console.log(String(event.target)); +}) +.run(); + diff --git a/js/markdown b/js/markdown new file mode 100755 index 0000000000..05a372a0a9 --- /dev/null +++ b/js/markdown @@ -0,0 +1,15 @@ +#!/usr/bin/env node +var fs = require('fs'); +var util = require('util'); +var stmd = require('./stmd'); + +file = process.argv[2] || '/dev/stdin'; + +fs.readFile(file, 'utf8', function(err, data) { + if (err) { + return console.log(err); + } + var parser = new stmd.DocParser(); + var renderer = new stmd.HtmlRenderer(); + console.log(renderer.render(parser.parse(data))); +}); diff --git a/js/stmd.js b/js/stmd.js new file mode 100755 index 0000000000..399d58d8d0 --- /dev/null +++ b/js/stmd.js @@ -0,0 +1,1540 @@ +// stmd.js - "standard markdown" in javascript +// Copyright (C) 2014 John MacFarlane +// License: BSD3. + +// Basic usage: +// +// var stmd = require('stmd'); +// var parser = new stmd.DocParser(); +// var renderer = new stmd.HtmlRenderer(); +// console.log(renderer.render(parser.parse('Hello *world*'))); + +(function(exports) { + +// Some regexps used in inline parser: + +var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]'; +var ESCAPED_CHAR = '\\\\' + ESCAPABLE; +var IN_DOUBLE_QUOTES = '"(' + ESCAPED_CHAR + '|[^"\\x00])*"'; +var IN_SINGLE_QUOTES = '\'(' + ESCAPED_CHAR + '|[^\'\\x00])*\''; +var IN_PARENS = '\\((' + ESCAPED_CHAR + '|[^)\\x00])*\\)'; +var REG_CHAR = '[^\\\\()\\x00-\\x20]'; +var IN_PARENS_NOSP = '\\((' + REG_CHAR + '|' + ESCAPED_CHAR + ')*\\)'; +var TAGNAME = '[A-Za-z][A-Za-z0-9]*'; +var BLOCKTAGNAME = '(?:article|header|aside|hgroup|blockquote|hr|body|li|br|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)'; +var ATTRIBUTENAME = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; +var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+"; +var SINGLEQUOTEDVALUE = "'[^']*'"; +var DOUBLEQUOTEDVALUE = '"[^"]*"'; +var ATTRIBUTEVALUE = "(?:" + UNQUOTEDVALUE + "|" + SINGLEQUOTEDVALUE + "|" + DOUBLEQUOTEDVALUE + ")"; +var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")"; +var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)"; +var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>"; +var CLOSETAG = "]"; +var OPENBLOCKTAG = "<" + BLOCKTAGNAME + ATTRIBUTE + "*" + "\\s*/?>"; +var CLOSEBLOCKTAG = "]"; +var HTMLCOMMENT = ""; +var PROCESSINGINSTRUCTION = "[<][?].*?[?][>]"; +var DECLARATION = "]*>"; +var CDATA = "])*\\]\\]>"; +var HTMLTAG = "(?:" + OPENTAG + "|" + CLOSETAG + "|" + HTMLCOMMENT + "|" + + PROCESSINGINSTRUCTION + "|" + DECLARATION + "|" + CDATA + ")"; +var HTMLBLOCKOPEN = "<(?:" + BLOCKTAGNAME + "[\\s/>]" + "|" + + "/" + BLOCKTAGNAME + "[\\s>]" + "|" + "[?!])"; + +var reHtmlTag = new RegExp('^' + HTMLTAG, 'i'); + +var reHtmlBlockOpen = new RegExp('^' + HTMLBLOCKOPEN, 'i'); + +var reLinkTitle = new RegExp( + '^(?:"(' + ESCAPED_CHAR + '|[^"\\x00])*"' + + '|' + + '\'(' + ESCAPED_CHAR + '|[^\'\\x00])*\'' + + '|' + + '\\((' + ESCAPED_CHAR + '|[^)\\x00])*\\))'); + +var reLinkDestinationBraces = new RegExp( + '[<](?:[^<>\\n\\\\\\x00]' + '|' + ESCAPED_CHAR + '|' + '\\\\)*[>]'); + +var reLinkDestination = new RegExp( + '(?:' + REG_CHAR + '+|' + ESCAPED_CHAR + '|' + IN_PARENS_NOSP + ')*'); + +var reEscapable = new RegExp(ESCAPABLE); + +var reAllEscapedChar = new RegExp('\\\\(' + ESCAPABLE + ')', 'g'); + +var reEscapedChar = new RegExp('^\\\\(' + ESCAPABLE + ')'); + +var reAllTab = /\t/g; + +var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; + +// Matches a character with a special meaning in markdown, +// or a string of non-special characters. +var reMain = /[\n`\[\]\\!<&*_]|[^\n`\[\]\\!<&*_]+/m; + +// UTILITY FUNCTIONS + +// Replace backslash escapes with literal characters. +var unescape = function(s) { + return s.replace(reAllEscapedChar, '$1'); +}; + +// Returns true if string contains only space characters. +var isBlank = function(s) { + return /^\s*$/.test(s); +}; + +// Normalize reference label: collapse internal whitespace +// to single space, remove leading/trailing whitespace, case fold. +var normalizeReference = function(s) { + return s.trim() + .replace(/\s+/,' ') + .toUpperCase(); +}; + +// Attempt to match a regex in string s at offset offset. +// Return index of match or null. +var matchAt = function(re, s, offset) { + var res = s.slice(offset).match(re); + if (res) { + return offset + res.index; + } else { + return null; + } +}; + +// Convert tabs to spaces on each line using a 4-space tab stop. +var detabLine = function(text) { + if (text.indexOf('\t') == -1) { + return text; + } else { + var lastStop = 0; + return text.replace(reAllTab, function(match, offset) { + var result = ' '.slice((offset - lastStop) % 4); + lastStop = offset + 1; + return result; + }); + } +}; + +// INLINE PARSER + +// These are methods of an InlineParser object, defined below. +// An InlineParser keeps track of a subject (a string to be +// parsed) and a position in that subject. + +// If re matches at current position in the subject, advance +// position in subject and return the match; otherwise return null. +var match = function(re) { + var match = re.exec(this.subject.slice(this.pos)); + if (match) { + this.pos += match.index + match[0].length; + return match[0]; + } else { + return null; + } +}; + +// Returns the character at the current subject position, or null if +// there are no more characters. +var peek = function() { + return this.subject[this.pos] || null; +}; + +// Parse zero or more space characters, including at most one newline +var spnl = function() { + this.match(/^ *(?:\n *)?/); + return 1; +}; + +// All of the parsers below try to match something at the current position +// in the subject. If they succeed in matching anything, they +// push an inline element onto the 'inlines' list. They return the +// number of characters parsed (possibly 0). + +// Attempt to parse backticks, adding either a backtick code span or a +// literal sequence of backticks to the 'inlines' list. +var parseBackticks = function(inlines) { + var startpos = this.pos; + var ticks = this.match(/^`+/); + if (!ticks) { + return 0; + } + var afterOpenTicks = this.pos; + var foundCode = false; + var match; + while (!foundCode && (match = this.match(/`+/m))) { + if (match == ticks) { + inlines.push({ t: 'Code', c: this.subject.slice(afterOpenTicks, + this.pos - ticks.length) + .replace(/[ \n]+/g,' ') + .trim() }); + return (this.pos - startpos); + } + } + // If we got here, we didn't match a closing backtick sequence. + inlines.push({ t: 'Str', c: ticks }); + this.pos = afterOpenTicks; + return (this.pos - startpos); +}; + +// Parse a backslash-escaped special character, adding either the escaped +// character, a hard line break (if the backslash is followed by a newline), +// or a literal backslash to the 'inlines' list. +var parseEscaped = function(inlines) { + var subj = this.subject, + pos = this.pos; + if (subj[pos] === '\\') { + if (subj[pos + 1] === '\n') { + inlines.push({ t: 'Hardbreak' }); + this.pos = this.pos + 2; + return 2; + } else if (reEscapable.test(subj[pos + 1])) { + inlines.push({ t: 'Str', c: subj[pos + 1] }); + this.pos = this.pos + 2; + return 2; + } else { + this.pos++; + inlines.push({t: 'Str', c: '\\'}); + return 1; + } + } else { + return 0; + } +}; + +// Attempt to parse an autolink (URL or email in pointy brackets). +var parseAutolink = function(inlines) { + var m; + var dest; + if ((m = this.match(/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/))) { // email autolink + dest = m.slice(1,-1); + inlines.push({ t: 'Link', label: [{ t: 'Str', c: dest }], + destination: 'mailto:' + dest }); + return m.length; + } else if ((m = this.match(/^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i))) { + dest = m.slice(1,-1); + inlines.push({ t: 'Link', label: [{ t: 'Str', c: dest }], + destination: dest }); + return m.length; + } else { + return 0; + } +}; + +// Attempt to parse a raw HTML tag. +var parseHtmlTag = function(inlines) { + var m = this.match(reHtmlTag); + if (m) { + inlines.push({ t: 'Html', c: m }); + return m.length; + } else { + return 0; + } +}; + +// Scan a sequence of characters == c, and return information about +// the number of delimiters and whether they are positioned such that +// they can open and/or close emphasis or strong emphasis. A utility +// function for strong/emph parsing. +var scanDelims = function(c) { + var numdelims = 0; + var first_close_delims = 0; + var char_before, char_after; + var startpos = this.pos; + + char_before = this.pos === 0 ? '\n' : + this.subject[this.pos - 1]; + + while (this.peek() === c) { + numdelims++; + this.pos++; + } + + char_after = this.peek() || '\n'; + + var can_open = numdelims > 0 && numdelims <= 3 && !(/\s/.test(char_after)); + var can_close = numdelims > 0 && numdelims <= 3 && !(/\s/.test(char_before)); + if (c === '_') { + can_open = can_open && !((/[a-z0-9]/i).test(char_before)); + can_close = can_close && !((/[a-z0-9]/i).test(char_after)); + } + this.pos = startpos; + return { numdelims: numdelims, + can_open: can_open, + can_close: can_close }; +}; + +// Attempt to parse emphasis or strong emphasis in an efficient way, +// with no backtracking. +var parseEmphasis = function(inlines) { + var startpos = this.pos; + var c ; + var first_close = 0; + var nxt = this.peek(); + if (nxt == '*' || nxt == '_') { + c = nxt; + } else { + return 0; + } + + var numdelims; + var delimpos; + + // Get opening delimiters. + res = this.scanDelims(c); + numdelims = res.numdelims; + this.pos += numdelims; + // We provisionally add a literal string. If we match appropriate + // closing delimiters, we'll change this to Strong or Emph. + inlines.push({t: 'Str', + c: this.subject.substr(this.pos - numdelims, numdelims)}); + // Record the position of this opening delimiter: + delimpos = inlines.length - 1; + + if (!res.can_open || numdelims === 0) { + return 0; + } + + var first_close_delims = 0; + + switch (numdelims) { + case 1: // we started with * or _ + while (true) { + res = this.scanDelims(c); + if (res.numdelims >= 1 && res.can_close) { + this.pos += 1; + // Convert the inline at delimpos, currently a string with the delim, + // into an Emph whose contents are the succeeding inlines + inlines[delimpos].t = 'Emph'; + inlines[delimpos].c = inlines.slice(delimpos + 1); + inlines.splice(delimpos + 1); + break; + } else { + if (this.parseInline(inlines) === 0) { + break; + } + } + } + return (this.pos - startpos); + + case 2: // We started with ** or __ + while (true) { + res = this.scanDelims(c); + if (res.numdelims >= 2 && res.can_close) { + this.pos += 2; + inlines[delimpos].t = 'Strong'; + inlines[delimpos].c = inlines.slice(delimpos + 1); + inlines.splice(delimpos + 1); + break; + } else { + if (this.parseInline(inlines) === 0) { + break; + } + } + } + return (this.pos - startpos); + + case 3: // We started with *** or ___ + while (true) { + res = this.scanDelims(c); + if (res.numdelims >= 1 && res.numdelims <= 3 && res.can_close && + res.numdelims != first_close_delims) { + if (res.numdelims === 3) { + // If we opened with ***, then we interpret *** as * followed by ** + // giving us + res.numdelims = 1; + } + this.pos += res.numdelims; + + if (first_close > 0) { // if we've already passed the first closer: + inlines[delimpos].t = first_close_delims === 1 ? 'Strong' : 'Emph'; + inlines[delimpos].c = [ + { t: first_close_delims === 1 ? 'Emph' : 'Strong', + c: inlines.slice(delimpos + 1, first_close)} + ].concat(inlines.slice(first_close + 1)); + inlines.splice(delimpos + 1); + break; + } else { // this is the first closer; for now, add literal string; + // we'll change this when he hit the second closer + inlines.push({t: 'Str', + c: this.subject.slice(this.pos - res.numdelims, + this.pos) }); + first_close = inlines.length - 1; + first_close_delims = res.numdelims; + } + } else { // parse another inline element, til we hit the end + if (this.parseInline(inlines) === 0) { + break; + } + } + } + return (this.pos - startpos); + + default: + return result; + } + + return 0; +}; + +// Attempt to parse link title (sans quotes), returning the string +// or null if no match. +var parseLinkTitle = function() { + title = this.match(reLinkTitle); + if (title) { + // chop off quotes from title and unescape: + return unescape(title.substr(1, title.length - 2)); + } else { + return null; + } +}; + +// Attempt to parse link destination, returning the string or +// null if no match. +var parseLinkDestination = function() { + var res = this.match(reLinkDestinationBraces); + if (res) { // chop off surrounding <..>: + return unescape(res.substr(1, res.length - 2)); + } else { + res = this.match(reLinkDestination); + if (res !== null) { + return unescape(res); + } else { + return null; + } + } +}; + +// Attempt to parse a link label, returning number of characters parsed. +var parseLinkLabel = function() { + if (this.peek() != '[') { + return 0; + } + var startpos = this.pos; + var nest_level = 0; + if (this.label_nest_level > 0) { + // If we've already checked to the end of this subject + // for a label, even with a different starting [, we + // know we won't find one here and we can just return. + // This avoids lots of backtracking. + // Note: nest level 1 would be: [foo [bar] + // nest level 2 would be: [foo [bar [baz] + this.label_nest_level--; + return 0; + } + this.pos++; // advance past [ + var c; + while ((c = this.peek()) && (c != ']' || nest_level > 0)) { + switch (c) { + case '`': + this.parseBackticks([]); + break; + case '<': + this.parseAutolink([]) || this.parseHtmlTag([]) || this.parseString([]); + break; + case '[': // nested [] + nest_level++; + this.pos++; + break; + case ']': // nested [] + nest_level--; + this.pos++; + break; + case '\\': + this.parseEscaped([]); + break; + default: + this.parseString([]); + } + } + if (c === ']') { + this.label_nest_level = 0; + this.pos++; // advance past ] + return this.pos - startpos; + } else { + if (!c) { + this.label_nest_level = nest_level; + } + this.pos = startpos; + return 0; + } +}; + +// Parse raw link label, including surrounding [], and return +// inline contents. (Note: this is not a method of InlineParser.) +var parseRawLabel = function(s) { + // note: parse without a refmap; we don't want links to resolve + // in nested brackets! + return new InlineParser().parse(s.substr(1, s.length - 2), {}); +}; + +// Attempt to parse a link. If successful, add the link to +// inlines. +var parseLink = function(inlines) { + var startpos = this.pos; + var reflabel; + var n; + var dest; + var title; + + n = this.parseLinkLabel(); + if (n === 0) { + return 0; + } + var afterlabel = this.pos; + var rawlabel = this.subject.substr(startpos, n); + + // if we got this far, we've parsed a label. + // Try to parse an explicit link: [label](url "title") + if (this.peek() == '(') { + this.pos++; + if (this.spnl() && + ((dest = this.parseLinkDestination()) !== null) && + this.spnl() && + // make sure there's a space before the title: + (/^\s/.test(this.subject[this.pos - 1]) && + (title = this.parseLinkTitle() || '') || true) && + this.spnl() && + this.match(/^\)/)) { + inlines.push({ t: 'Link', + destination: dest, + title: title, + label: parseRawLabel(rawlabel) }); + return this.pos - startpos; + } else { + this.pos = startpos; + return 0; + } + } + // If we're here, it wasn't an explicit link. Try to parse a reference link. + // first, see if there's another label + var savepos = this.pos; + this.spnl(); + var beforelabel = this.pos; + n = this.parseLinkLabel(); + if (n == 2) { + // empty second label + reflabel = rawlabel; + } else if (n > 0) { + reflabel = this.subject.slice(beforelabel, beforelabel + n); + } else { + this.pos = savepos; + reflabel = rawlabel; + } + // lookup rawlabel in refmap + var link = this.refmap[normalizeReference(reflabel)]; + if (link) { + inlines.push({t: 'Link', + destination: link.destination, + title: link.title, + label: parseRawLabel(rawlabel) }); + return this.pos - startpos; + } else { + this.pos = startpos; + return 0; + } + // Nothing worked, rewind: + this.pos = startpos; + return 0; +}; + +// Attempt to parse an entity, adding to inlines if successful. +var parseEntity = function(inlines) { + var m; + if ((m = this.match(/^&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});/i))) { + inlines.push({ t: 'Entity', c: m }); + return m.length; + } else { + return 0; + } +}; + +// Parse a run of ordinary characters, or a single character with +// a special meaning in markdown, as a plain string, adding to inlines. +var parseString = function(inlines) { + var m; + if ((m = this.match(reMain))) { + inlines.push({ t: 'Str', c: m }); + return m.length; + } else { + return 0; + } +}; + +// Parse a newline. If it was preceded by two spaces, return a hard +// line break; otherwise a soft line break. +var parseNewline = function(inlines) { + if (this.peek() == '\n') { + this.pos++; + var last = inlines[inlines.length - 1]; + if (last && last.t == 'Str' && last.c.slice(-2) == ' ') { + last.c = last.c.replace(/ *$/,''); + inlines.push({ t: 'Hardbreak' }); + } else { + if (last && last.t == 'Str' && last.c.slice(-1) == ' ') { + last.c = last.c.slice(0, -1); + } + inlines.push({ t: 'Softbreak' }); + } + return 1; + } else { + return 0; + } +}; + +// Attempt to parse an image. If the opening '!' is not followed +// by a link, add a literal '!' to inlines. +var parseImage = function(inlines) { + if (this.match(/^!/)) { + var n = this.parseLink(inlines); + if (n === 0) { + inlines.push({ t: 'Str', c: '!' }); + return 1; + } else if (inlines[inlines.length - 1] && + inlines[inlines.length - 1].t == 'Link') { + inlines[inlines.length - 1].t = 'Image'; + return n+1; + } else { + throw "Shouldn't happen"; + } + } else { + return 0; + } +}; + +// Attempt to parse a link reference, modifying refmap. +var parseReference = function(s, refmap) { + this.subject = s; + this.pos = 0; + var rawlabel; + var dest; + var title; + var matchChars; + var startpos = this.pos; + var match; + + // label: + matchChars = this.parseLinkLabel(); + if (matchChars === 0) { + return 0; + } else { + rawlabel = this.subject.substr(0, matchChars); + } + + // colon: + if (this.peek() === ':') { + this.pos++; + } else { + this.pos = startpos; + return 0; + } + + // link url + this.spnl(); + + dest = this.parseLinkDestination(); + if (dest === null || dest.length === 0) { + this.pos = startpos; + return 0; + } + + var beforetitle = this.pos; + this.spnl(); + title = this.parseLinkTitle(); + if (title === null) { + title = ''; + // rewind before spaces + this.pos = beforetitle; + } + + // make sure we're at line end: + if (this.match(/^ *(?:\n|$)/) === null) { + this.pos = startpos; + return 0; + } + + var normlabel = normalizeReference(rawlabel); + + if (!refmap[normlabel]) { + refmap[normlabel] = { destination: dest, title: title }; + } + return this.pos - startpos; +}; + +// Parse the next inline element in subject, advancing subject position +// and adding the result to 'inlines'. +var parseInline = function(inlines) { + var c = this.peek(); + var res; + switch(c) { + case '\n': + res = this.parseNewline(inlines); + break; + case '\\': + res = this.parseEscaped(inlines); + break; + case '`': + res = this.parseBackticks(inlines); + break; + case '*': + case '_': + res = this.parseEmphasis(inlines); + break; + case '[': + res = this.parseLink(inlines); + break; + case '!': + res = this.parseImage(inlines); + break; + case '<': + res = this.parseAutolink(inlines) || + this.parseHtmlTag(inlines); + break; + case '&': + res = this.parseEntity(inlines); + break; + default: + } + return res || this.parseString(inlines); +}; + +// Parse s as a list of inlines, using refmap to resolve references. +var parseInlines = function(s, refmap) { + this.subject = s; + this.pos = 0; + this.refmap = refmap || {}; + var inlines = []; + while (this.parseInline(inlines)) ; + return inlines; +}; + +// The InlineParser object. +function InlineParser(){ + return { + subject: '', + label_nest_level: 0, // used by parseLinkLabel method + pos: 0, + refmap: {}, + match: match, + peek: peek, + spnl: spnl, + parseBackticks: parseBackticks, + parseEscaped: parseEscaped, + parseAutolink: parseAutolink, + parseHtmlTag: parseHtmlTag, + scanDelims: scanDelims, + parseEmphasis: parseEmphasis, + parseLinkTitle: parseLinkTitle, + parseLinkDestination: parseLinkDestination, + parseLinkLabel: parseLinkLabel, + parseLink: parseLink, + parseEntity: parseEntity, + parseString: parseString, + parseNewline: parseNewline, + parseImage: parseImage, + parseReference: parseReference, + parseInline: parseInline, + parse: parseInlines, + }; +} + +// DOC PARSER + +// These are methods of a DocParser object, defined below. + +var makeBlock = function(tag, start_line, start_column) { + return { t: tag, + open: true, + last_line_blank: false, + start_line: start_line, + start_column: start_column, + end_line: start_line, + children: [], + parent: null, + // string_content is formed by concatenating strings, in finalize: + string_content: "", + strings: [], + inline_content: [], + }; +}; + +// Returns true if parent block can contain child block. +var canContain = function(parent_type, child_type) { + return ( parent_type == 'Document' || + parent_type == 'BlockQuote' || + parent_type == 'ListItem' || + (parent_type == 'List' && child_type == 'ListItem') ); +}; + +// Returns true if block type can accept lines of text. +var acceptsLines = function(block_type) { + return ( block_type == 'Paragraph' || + block_type == 'IndentedCode' || + block_type == 'FencedCode' ); +}; + +// Returns true if block ends with a blank line, descending if needed +// into lists and sublists. +var endsWithBlankLine = function(block) { + if (block.last_line_blank) { + return true; + } + if ((block.t == 'List' || block.t == 'ListItem') && block.children.length > 0) { + return endsWithBlankLine(block.children[block.children.length - 1]); + } else { + return false; + } +}; + +// Break out of all containing lists, resetting the tip of the +// document to the parent of the highest list, and finalizing +// all the lists. (This is used to implement the "two blank lines +// break of of all lists" feature.) +var breakOutOfLists = function(block, line_number) { + var b = block; + var last_list = null; + do { + if (b.t === 'List') { + last_list = b; + } + b = b.parent; + } while (b); + + if (last_list) { + while (block != last_list) { + this.finalize(block, line_number); + block = block.parent; + } + this.finalize(last_list, line_number); + this.tip = last_list.parent; + } +}; + +// Add a line to the block at the tip. We assume the tip +// can accept lines -- that check should be done before calling this. +var addLine = function(ln, offset) { + var s = ln.slice(offset); + if (!(this.tip.open)) { + throw({ msg: "Attempted to add line (" + ln + ") to closed container." }); + } + this.tip.strings.push(s); +}; + +// Add block of type tag as a child of the tip. If the tip can't +// accept children, close and finalize it and try its parent, +// and so on til we find a block that can accept children. +var addChild = function(tag, line_number, offset) { + while (!canContain(this.tip.t, tag)) { + this.finalize(this.tip, line_number); + } + + var column_number = offset + 1; // offset 0 = column 1 + var newBlock = makeBlock(tag, line_number, column_number); + this.tip.children.push(newBlock); + newBlock.parent = this.tip; + this.tip = newBlock; + return newBlock; +}; + +// Parse a list marker and return data on the marker (type, +// start, delimiter, bullet character, padding) or null. +var parseListMarker = function(ln, offset) { + var rest = ln.slice(offset); + var match; + var spaces_after_marker; + var data = {}; + if (rest.match(reHrule)) { + return null; + } + if ((match = rest.match(/^[*+-]( +|$)/))) { + spaces_after_marker = match[1].length; + data.type = 'Bullet'; + data.bullet_char = match[0][0]; + + } else if ((match = rest.match(/^(\d+)([.)])( +|$)/))) { + spaces_after_marker = match[3].length; + data.type = 'Ordered'; + data.start = parseInt(match[1]); + data.delimiter = match[2]; + } else { + return null; + } + blank_item = match[0].length === rest.length; + if (spaces_after_marker >= 5 || + spaces_after_marker < 1 || + blank_item) { + data.padding = match[0].length - spaces_after_marker + 1; + } else { + data.padding = match[0].length; + } + return data; +}; + +// Returns true if the two list items are of the same type, +// with the same delimiter and bullet character. This is used +// in agglomerating list items into lists. +var listsMatch = function(list_data, item_data) { + return (list_data.type === item_data.type && + list_data.delimiter === item_data.delimiter && + list_data.bullet_char === item_data.bullet_char); +}; + +// Analyze a line of text and update the document appropriately. +// We parse markdown text by calling this on each line of input, +// then finalizing the document. +var incorporateLine = function(ln, line_number) { + + var all_matched = true; + var last_child; + var first_nonspace; + var offset = 0; + var match; + var data; + var blank; + var indent; + var last_matched_container; + var i; + var CODE_INDENT = 4; + + var container = this.doc; + var oldtip = this.tip; + + // Convert tabs to spaces: + ln = detabLine(ln); + + // For each containing block, try to parse the associated line start. + // Bail out on failure: container will point to the last matching block. + // Set all_matched to false if not all containers match. + while (container.children.length > 0) { + last_child = container.children[container.children.length - 1]; + if (!last_child.open) { + break; + } + container = last_child; + + match = matchAt(/[^ ]/, ln, offset); + if (match === null) { + first_nonspace = ln.length; + blank = true; + } else { + first_nonspace = match; + blank = false; + } + indent = first_nonspace - offset; + + switch (container.t) { + case 'BlockQuote': + matched = indent <= 3 && ln[first_nonspace] === '>'; + if (matched) { + offset = first_nonspace + 1; + if (ln[offset] === ' ') { + offset++; + } + } else { + all_matched = false; + } + break; + + case 'ListItem': + if (indent >= container.list_data.marker_offset + + container.list_data.padding) { + offset += container.list_data.marker_offset + + container.list_data.padding; + } else if (blank) { + offset = first_nonspace; + } else { + all_matched = false; + } + break; + + case 'IndentedCode': + if (indent >= CODE_INDENT) { + offset += CODE_INDENT; + } else if (blank) { + offset = first_nonspace; + } else { + all_matched = false; + } + break; + + case 'ATXHeader': + case 'SetextHeader': + case 'HorizontalRule': + // a header can never container > 1 line, so fail to match: + all_matched = false; + break; + + case 'FencedCode': + // skip optional spaces of fence offset + i = container.fence_offset; + while (i > 0 && ln[offset] === ' ') { + offset++; + i--; + } + break; + + case 'HtmlBlock': + if (blank) { + all_matched = false; + } + break; + + case 'Paragraph': + if (blank) { + container.last_line_blank = true; + all_matched = false; + } + break; + + default: + } + + if (!all_matched) { + container = container.parent; // back up to last matching block + break; + } + } + + last_matched_container = container; + + // This function is used to finalize and close any unmatched + // blocks. We aren't ready to do this now, because we might + // have a lazy paragraph continuation, in which case we don't + // want to close unmatched blocks. So we store this closure for + // use later, when we have more information. + var closeUnmatchedBlocks = function(mythis) { + // finalize any blocks not matched + while (!already_done && oldtip != last_matched_container) { + mythis.finalize(oldtip, line_number); + oldtip = oldtip.parent; + } + var already_done = true; + }; + + // Check to see if we've hit 2nd blank line; if so break out of list: + if (blank && container.last_line_blank) { + this.breakOutOfLists(container, line_number); + } + + // Unless last matched container is a code block, try new container starts, + // adding children to the last matched container: + while (container.t != 'FencedCode' && + container.t != 'IndentedCode' && + container.t != 'HtmlBlock' && + // this is a little performance optimization: + matchAt(/^[ #`~*+_=<>0-9-]/,ln,offset) !== null) { + + match = matchAt(/[^ ]/, ln, offset); + if (match === null) { + first_nonspace = ln.length; + blank = true; + } else { + first_nonspace = match; + blank = false; + } + indent = first_nonspace - offset; + + if (indent >= CODE_INDENT) { + // indented code + if (this.tip.t != 'Paragraph' && !blank) { + offset += CODE_INDENT; + closeUnmatchedBlocks(this); + container = this.addChild('IndentedCode', line_number, offset); + } else { // indent > 4 in a lazy paragraph continuation + break; + } + + } else if (ln[first_nonspace] === '>') { + // blockquote + offset = first_nonspace + 1; + // optional following space + if (ln[offset] === ' ') { + offset++; + } + closeUnmatchedBlocks(this); + container = this.addChild('BlockQuote', line_number, offset); + + } else if ((match = ln.slice(first_nonspace).match(/^#{1,6}(?: +|$)/))) { + // ATX header + offset = first_nonspace + match[0].length; + closeUnmatchedBlocks(this); + container = this.addChild('ATXHeader', line_number, first_nonspace); + container.level = match[0].trim().length; // number of #s + // remove trailing ###s: + container.strings = + [ln.slice(offset).replace(/(?:(\\#) *#+| *#+) *$/,'$1')]; + break; + + } else if ((match = ln.slice(first_nonspace).match(/^`{3,}(?!.*`)|^~{3,}(?!.*~)/))) { + // fenced code block + var fence_length = match[0].length; + closeUnmatchedBlocks(this); + container = this.addChild('FencedCode', line_number, first_nonspace); + container.fence_length = fence_length; + container.fence_char = match[0][0]; + container.fence_offset = first_nonspace - offset; + offset = first_nonspace + fence_length; + break; + + } else if (matchAt(reHtmlBlockOpen, ln, first_nonspace) !== null) { + // html block + closeUnmatchedBlocks(this); + container = this.addChild('HtmlBlock', line_number, first_nonspace); + // note, we don't adjust offset because the tag is part of the text + break; + + } else if (container.t == 'Paragraph' && + container.strings.length === 1 && + ((match = ln.slice(first_nonspace).match(/^(?:=+|-+) *$/)))) { + // setext header line + closeUnmatchedBlocks(this); + container.t = 'SetextHeader'; // convert Paragraph to SetextHeader + container.level = match[0][0] === '=' ? 1 : 2; + offset = ln.length; + + } else if (matchAt(reHrule, ln, first_nonspace) !== null) { + // hrule + closeUnmatchedBlocks(this); + container = this.addChild('HorizontalRule', line_number, first_nonspace); + offset = ln.length - 1; + break; + + } else if ((data = parseListMarker(ln, first_nonspace))) { + // list item + closeUnmatchedBlocks(this); + data.marker_offset = indent; + offset = first_nonspace + data.padding; + + // add the list if needed + if (container.t !== 'List' || + !(listsMatch(container.list_data, data))) { + container = this.addChild('List', line_number, first_nonspace); + container.list_data = data; + } + + // add the list item + container = this.addChild('ListItem', line_number, first_nonspace); + container.list_data = data; + + } else { + break; + + } + + if (acceptsLines(container.t)) { + // if it's a line container, it can't contain other containers + break; + } + } + + // What remains at the offset is a text line. Add the text to the + // appropriate container. + + match = matchAt(/[^ ]/, ln, offset); + if (match === null) { + first_nonspace = ln.length; + blank = true; + } else { + first_nonspace = match; + blank = false; + } + indent = first_nonspace - offset; + + // First check for a lazy paragraph continuation: + if (this.tip !== last_matched_container && + !blank && + this.tip.t == 'Paragraph' && + this.tip.strings.length > 0) { + // lazy paragraph continuation + + this.last_line_blank = false; + this.addLine(ln, offset); + + } else { // not a lazy continuation + + // finalize any blocks not matched + closeUnmatchedBlocks(this); + + // Block quote lines are never blank as they start with > + // and we don't count blanks in fenced code for purposes of tight/loose + // lists or breaking out of lists. We also don't set last_line_blank + // on an empty list item. + container.last_line_blank = blank && + !(container.t == 'BlockQuote' || + container.t == 'FencedCode' || + (container.t == 'ListItem' && + container.children.length === 0 && + container.start_line == line_number)); + + var cont = container; + while (cont.parent) { + cont.parent.last_line_blank = false; + cont = cont.parent; + } + + switch (container.t) { + case 'IndentedCode': + case 'HtmlBlock': + this.addLine(ln, offset); + break; + + case 'FencedCode': + // check for closing code fence: + match = (indent <= 3 && + ln[first_nonspace] == container.fence_char && + ln.slice(first_nonspace).match(/^(?:`{3,}|~{3,})(?= *$)/)); + if (match && match[0].length >= container.fence_length) { + // don't add closing fence to container; instead, close it: + this.finalize(container, line_number); + } else { + this.addLine(ln, offset); + } + break; + + case 'ATXHeader': + case 'SetextHeader': + case 'HorizontalRule': + // nothing to do; we already added the contents. + break; + + default: + if (acceptsLines(container.t)) { + this.addLine(ln, first_nonspace); + } else if (blank) { + // do nothing + } else if (container.t != 'HorizontalRule' && + container.t != 'SetextHeader') { + // create paragraph container for line + container = this.addChild('Paragraph', line_number, first_nonspace); + this.addLine(ln, first_nonspace); + } else { + console.log("Line " + line_number.toString() + + " with container type " + container.t + + " did not match any condition."); + + } + } + } +}; + +// Finalize a block. Close it and do any necessary postprocessing, +// e.g. creating string_content from strings, setting the 'tight' +// or 'loose' status of a list, and parsing the beginnings +// of paragraphs for reference definitions. Reset the tip to the +// parent of the closed block. +var finalize = function(block, line_number) { + var pos; + // don't do anything if the block is already closed + if (!block.open) { + return 0; + } + block.open = false; + if (line_number > block.start_line) { + block.end_line = line_number - 1; + } else { + block_end_line = line_number; + } + + switch (block.t) { + case 'Paragraph': + block.string_content = block.strings.join('\n').replace(/^ */m,''); + + // try parsing the beginning as link reference definitions: + while (block.string_content[0] === '[' && + (pos = this.inlineParser.parseReference(block.string_content, + this.refmap))) { + block.string_content = block.string_content.slice(pos); + if (isBlank(block.string_content)) { + block.t = 'ReferenceDef'; + break; + } + } + break; + + case 'ATXHeader': + case 'SetextHeader': + case 'HtmlBlock': + block.string_content = block.strings.join('\n'); + break; + + case 'IndentedCode': + block.string_content = block.strings.join('\n').replace(/(\n *)*$/,'\n'); + break; + + case 'FencedCode': + // first line becomes info string + block.info = unescape(block.strings[0].trim()); + if (block.strings.length == 1) { + block.string_content = ''; + } else { + block.string_content = block.strings.slice(1).join('\n') + '\n'; + } + break; + + case 'List': + block.tight = true; // tight by default + + var numitems = block.children.length; + var i = 0; + while (i < numitems) { + var item = block.children[i]; + // check for non-final list item ending with blank line: + var last_item = i == numitems - 1; + if (endsWithBlankLine(item) && !last_item) { + block.tight = false; + break; + } + // recurse into children of list item, to see if there are + // spaces between any of them: + var numsubitems = item.children.length; + var j = 0; + while (j < numsubitems) { + var subitem = item.children[j]; + var last_subitem = j == numsubitems - 1; + if (endsWithBlankLine(subitem) && !(last_item && last_subitem)) { + block.tight = false; + break; + } + j++; + } + i++; + } + break; + + default: + break; + } + + this.tip = block.parent || this.top; +}; + +// Walk through a block & children recursively, parsing string content +// into inline content where appropriate. +var processInlines = function(block) { + switch(block.t) { + case 'Paragraph': + case 'SetextHeader': + case 'ATXHeader': + block.inline_content = + this.inlineParser.parse(block.string_content.trim(), this.refmap); + block.string_content = ""; + break; + default: + break; + } + + if (block.children) { + for (var i = 0; i < block.children.length; i++) { + this.processInlines(block.children[i]); + } + } + +}; + +// The main parsing function. Returns a parsed document AST. +var parse = function(input) { + this.doc = makeBlock('Document', 1, 1); + this.tip = this.doc; + this.refmap = {}; + var lines = input.replace(/\n$/,'').split(/\r\n|\n|\r/); + var len = lines.length; + for (var i = 0; i < len; i++) { + this.incorporateLine(lines[i], i+1); + } + while (this.tip) { + this.finalize(this.tip, len - 1); + } + this.processInlines(this.doc); + return this.doc; +}; + + +// The DocParser object. +function DocParser(){ + return { + doc: makeBlock('Document', 1, 1), + tip: this.doc, + refmap: {}, + inlineParser: new InlineParser(), + breakOutOfLists: breakOutOfLists, + addLine: addLine, + addChild: addChild, + incorporateLine: incorporateLine, + finalize: finalize, + processInlines: processInlines, + parse: parse, + }; +} + +// HTML RENDERER + +// Helper function to produce content in a pair of HTML tags. +var inTags = function(tag, attribs, contents, selfclosing) { + var result = '<' + tag; + if (attribs) { + var i = 0; + var attrib; + while ((attrib = attribs[i]) !== undefined) { + result = result.concat(' ', attrib[0], '="', attrib[1], '"'); + i++; + } + } + if (contents) { + result = result.concat('>', contents, ''); + } else if (selfclosing) { + result = result + ' />'; + } else { + result = result.concat('>'); + } + return result; +}; + +// Render an inline element as HTML. +var renderInline = function(inline) { + var attrs; + switch (inline.t) { + case 'Str': + return this.escape(inline.c); + case 'Softbreak': + return this.softbreak; + case 'Hardbreak': + return inTags('br',[],"",true) + '\n'; + case 'Emph': + return inTags('em', [], this.renderInlines(inline.c)); + case 'Strong': + return inTags('strong', [], this.renderInlines(inline.c)); + case 'Html': + return inline.c; + case 'Entity': + return inline.c; + case 'Link': + attrs = [['href', this.escape(inline.destination, true)]]; + if (inline.title) { + attrs.push(['title', this.escape(inline.title, true)]); + } + return inTags('a', attrs, this.renderInlines(inline.label)); + case 'Image': + attrs = [['src', this.escape(inline.destination, true)], + ['alt', this.escape(this.renderInlines(inline.label))]]; + if (inline.title) { + attrs.push(['title', this.escape(inline.title, true)]); + } + return inTags('img', attrs, "", true); + case 'Code': + return inTags('code', [], this.escape(inline.c)); + default: + console.log("Uknown inline type " + inline.t); + return ""; + } +}; + +// Render a list of inlines. +var renderInlines = function(inlines) { + var result = ''; + for (var i=0; i < inlines.length; i++) { + result = result + this.renderInline(inlines[i]); + } + return result; +}; + +// Render a single block element. +var renderBlock = function(block, in_tight_list) { + var tag; + var attr; + var info_words; + switch (block.t) { + case 'Document': + var whole_doc = this.renderBlocks(block.children); + return (whole_doc === '' ? '' : whole_doc + '\n'); + case 'Paragraph': + if (in_tight_list) { + return this.renderInlines(block.inline_content); + } else { + return inTags('p', [], this.renderInlines(block.inline_content)); + } + break; + case 'BlockQuote': + var filling = this.renderBlocks(block.children); + return inTags('blockquote', [], filling === '' ? this.innersep : + this.innersep + this.renderBlocks(block.children) + this.innersep); + case 'ListItem': + return inTags('li', [], this.renderBlocks(block.children, in_tight_list).trim()); + case 'List': + tag = block.list_data.type == 'Bullet' ? 'ul' : 'ol'; + attr = (!block.list_data.start || block.list_data.start == 1) ? + [] : [['start', block.list_data.start.toString()]]; + return inTags(tag, attr, this.innersep + + this.renderBlocks(block.children, block.tight) + + this.innersep); + case 'ATXHeader': + case 'SetextHeader': + tag = 'h' + block.level; + return inTags(tag, [], this.renderInlines(block.inline_content)); + case 'IndentedCode': + return inTags('pre', [], + inTags('code', [], this.escape(block.string_content))); + case 'FencedCode': + info_words = block.info.split(/ +/); + attr = info_words.length === 0 || info_words[0].length === 0 ? + [] : [['class',this.escape(info_words[0],true)]]; + return inTags('pre', attr, + inTags('code', [], this.escape(block.string_content))); + case 'HtmlBlock': + return block.string_content; + case 'ReferenceDef': + return ""; + case 'HorizontalRule': + return inTags('hr',[],"",true); + default: + console.log("Uknown block type " + block.t); + return ""; + } +}; + +// Render a list of block elements, separated by this.blocksep. +var renderBlocks = function(blocks, in_tight_list) { + var result = []; + for (var i=0; i < blocks.length; i++) { + if (blocks[i].t !== 'ReferenceDef') { + result.push(this.renderBlock(blocks[i], in_tight_list)); + } + } + return result.join(this.blocksep); +}; + +// The HtmlRenderer object. +function HtmlRenderer(){ + return { + // default options: + blocksep: '\n', // space between blocks + innersep: '\n', // space between block container tag and contents + softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML + // set to "
" to make them hard breaks + // set to " " if you want to ignore line wrapping in source + escape: function(s, preserve_entities) { + if (preserve_entities) { + return s.replace(/[&](?![#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)/gi,'&') + .replace(/[<]/g,'<') + .replace(/[>]/g,'>') + .replace(/["]/g,'"'); + } else { + return s.replace(/[&]/g,'&') + .replace(/[<]/g,'<') + .replace(/[>]/g,'>') + .replace(/["]/g,'"'); + } + }, + renderInline: renderInline, + renderInlines: renderInlines, + renderBlock: renderBlock, + renderBlocks: renderBlocks, + render: renderBlock + }; +} + +exports.DocParser = DocParser; +exports.HtmlRenderer = HtmlRenderer; + +})(typeof exports === 'undefined' ? this.stmd = {} : exports); diff --git a/js/test.js b/js/test.js new file mode 100755 index 0000000000..c1ea5b6acc --- /dev/null +++ b/js/test.js @@ -0,0 +1,79 @@ +#!/usr/bin/env node + +var fs = require('fs'); +var util = require('util'); +var stmd = require('./stmd'); +var ansi = require('ansi') +var cursor = ansi(process.stdout); + +var writer = new stmd.HtmlRenderer(); +var reader = new stmd.DocParser(); + +var passed = 0; +var failed = 0; + +var showSpaces = function(s) { + var t = s; + return t.replace(/\t/g,'→') + .replace(/ /g,'␣'); +} + +fs.readFile('spec.txt', 'utf8', function(err, data) { + if (err) { + return console.log(err); + } + var examples = []; + var current_section = ""; + var example_number = 0; + tests = data.replace(/^(.|[\n])*/m,''); + tests.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/gm, + function(_,x,y,z,w){ + if (z) { + current_section = z; + } else { + example_number++; + examples.push({markdown: x, + html: y, + section: current_section, + number: example_number}); + } + }); + + current_section = ""; + + console.time("Elapsed time"); + + for (i = 0; i < examples.length; i++) { + var example = examples[i]; + if (example.section != current_section) { + if (current_section !== '') { + cursor.write('\n'); + } + current_section = example.section; + cursor.reset().write(current_section).reset().write(' '); + } + var actual = writer.renderBlock(reader.parse(example.markdown.replace(/→/g, '\t'))); + if (actual == example.html) { + passed++; + cursor.green().write('✓').reset(); + } else { + failed++; + cursor.write('\n'); + + cursor.red().write('✘ Example ' + example.number + '\n'); + cursor.cyan(); + cursor.write('=== markdown ===============\n'); + cursor.write(showSpaces(example.markdown)); + cursor.write('=== expected ===============\n'); + cursor.write(showSpaces(example.html)); + cursor.write('=== got ====================\n'); + cursor.write(showSpaces(actual)); + cursor.reset(); + } + } + cursor.write('\n' + passed.toString() + ' tests passed, ' + + failed.toString() + ' failed.\n'); + + console.timeEnd("Elapsed time"); +}); + diff --git a/license.bstrlib.txt b/license.bstrlib.txt new file mode 100644 index 0000000000..cf78a984cc --- /dev/null +++ b/license.bstrlib.txt @@ -0,0 +1,29 @@ +Copyright (c) 2002-2008 Paul Hsieh +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of bstrlib nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/license.uthash.txt b/license.uthash.txt new file mode 100644 index 0000000000..ad8e16a098 --- /dev/null +++ b/license.uthash.txt @@ -0,0 +1,21 @@ +Copyright (c) 2005-2013, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/mkcasefold.pl b/mkcasefold.pl new file mode 100644 index 0000000000..4c0863431b --- /dev/null +++ b/mkcasefold.pl @@ -0,0 +1,21 @@ +print(" switch (c) {\n"); +my $lastchar = ""; +while () { + if (/^[A-F0-9]/ and / [CF]; /) { + my ($char, $type, $subst) = m/([A-F0-9]+); ([CF]); ([^;]+)/; + if ($char eq $lastchar) { + break; + } + my @subst = $subst =~ m/(\w+)/g; + printf(" case 0x%s:\n", $char); + foreach (@subst) { + printf(" bufpush(0x%s);\n", $_); + } + printf(" break;\n"); + $lastchar = $char; + } +} +printf(" default:\n"); +printf(" bufpush(c);\n"); +print(" }\n"); + diff --git a/oldtests/Blockquotes/Indents.html b/oldtests/Blockquotes/Indents.html new file mode 100644 index 0000000000..fd98ee8f24 --- /dev/null +++ b/oldtests/Blockquotes/Indents.html @@ -0,0 +1,12 @@ +

+

one +blockquote

+
+
+
+
+

triply nested +triply nested

+
+
+
diff --git a/oldtests/Blockquotes/Indents.markdown b/oldtests/Blockquotes/Indents.markdown new file mode 100644 index 0000000000..f9342ff9e5 --- /dev/null +++ b/oldtests/Blockquotes/Indents.markdown @@ -0,0 +1,5 @@ +> one + > blockquote + +>>> triply nested + > > > triply nested diff --git a/oldtests/Blockquotes/Nesting.html b/oldtests/Blockquotes/Nesting.html new file mode 100644 index 0000000000..f40e999832 --- /dev/null +++ b/oldtests/Blockquotes/Nesting.html @@ -0,0 +1,32 @@ +

These are all equivalent:

+
+
+

nested +blockquote

+
+
+
+
+

nested +blockquote

+
+
+
+
+

nested +blockquote

+
+
+
+
+

nested +blockquote

+
+
+

This is not:

+
+

nested

+
+

blockquote

+
+
diff --git a/oldtests/Blockquotes/Nesting.markdown b/oldtests/Blockquotes/Nesting.markdown new file mode 100644 index 0000000000..3d67843e7d --- /dev/null +++ b/oldtests/Blockquotes/Nesting.markdown @@ -0,0 +1,22 @@ +These are all equivalent: + +> > nested +> > blockquote + + +>> nested +>> blockquote + + +> > nested +blockquote + + +> > nested +> blockquote + + +This is not: + +> nested +> > blockquote diff --git a/oldtests/Blockquotes/Separation.html b/oldtests/Blockquotes/Separation.html new file mode 100644 index 0000000000..910d545929 --- /dev/null +++ b/oldtests/Blockquotes/Separation.html @@ -0,0 +1,39 @@ +

One blockquote, two paragraphs:

+
+

one

+

two

+
+

Two blockquotes:

+
+

one

+
+
+

two

+
+

Nested blockquote, two paragraphs:

+
+
+

one

+

two

+
+
+

Nested blockquote, two blockquotes:

+
+
+

one

+
+
+

two

+
+
+

Two nested blockquotes:

+
+
+

one

+
+
+
+
+

two

+
+
diff --git a/oldtests/Blockquotes/Separation.markdown b/oldtests/Blockquotes/Separation.markdown new file mode 100644 index 0000000000..823d865513 --- /dev/null +++ b/oldtests/Blockquotes/Separation.markdown @@ -0,0 +1,29 @@ +One blockquote, two paragraphs: + +> one +> +> two + +Two blockquotes: + +> one + +> two + +Nested blockquote, two paragraphs: + +> > one +> > +> > two + +Nested blockquote, two blockquotes: + +> > one +> +> > two + +Two nested blockquotes: + +> > one + +> > two diff --git a/oldtests/Code/BlankLines.html b/oldtests/Code/BlankLines.html new file mode 100644 index 0000000000..ae0abf74e1 --- /dev/null +++ b/oldtests/Code/BlankLines.html @@ -0,0 +1,33 @@ +
foo
+
+
+
+bar
+
+
+
foo
+
+
+
+bar
+
+
+
foo
+
+    
+
+bar
+
+
    +
  1. One

    +
    CodeA
    +
    +CodeB
    +
  2. +
  3. Two

    +
    CodeA
    +
  4. +
+
    +
  1. One
  2. +
diff --git a/oldtests/Code/BlankLines.markdown b/oldtests/Code/BlankLines.markdown new file mode 100644 index 0000000000..b0d5a0ce99 --- /dev/null +++ b/oldtests/Code/BlankLines.markdown @@ -0,0 +1,28 @@ + foo + + + + bar +> foo +> +> +> +> bar + foo + + + + bar + +1. One + + CodeA + + CodeB + +2. Two + + CodeA + + +1. One diff --git a/oldtests/Code/BlankLinesAtEnd.html b/oldtests/Code/BlankLinesAtEnd.html new file mode 100644 index 0000000000..ac803d98c7 --- /dev/null +++ b/oldtests/Code/BlankLinesAtEnd.html @@ -0,0 +1,14 @@ +
    +
  • List

    +
    code
    +
  • +
+
    +
  • one
  • +
  • two
  • +
+
    +
  • one +not code

  • +
  • two

  • +
diff --git a/oldtests/Code/BlankLinesAtEnd.markdown b/oldtests/Code/BlankLinesAtEnd.markdown new file mode 100644 index 0000000000..55879ae83f --- /dev/null +++ b/oldtests/Code/BlankLinesAtEnd.markdown @@ -0,0 +1,14 @@ +* List + + code + + + * one + * two + + + +* one + not code + +* two diff --git a/oldtests/Code/FenceMatching.html b/oldtests/Code/FenceMatching.html new file mode 100644 index 0000000000..4c7468e4a0 --- /dev/null +++ b/oldtests/Code/FenceMatching.html @@ -0,0 +1,8 @@ +
```
+
+

+`````
+
+````
+
+
diff --git a/oldtests/Code/FenceMatching.markdown b/oldtests/Code/FenceMatching.markdown new file mode 100644 index 0000000000..d86169a25f --- /dev/null +++ b/oldtests/Code/FenceMatching.markdown @@ -0,0 +1,10 @@ +````abc +``` +```` +``````blah + +````` + +```` + +``````````` diff --git a/oldtests/Code/FencedCodeBlocks.html b/oldtests/Code/FencedCodeBlocks.html new file mode 100644 index 0000000000..4813d72c65 --- /dev/null +++ b/oldtests/Code/FencedCodeBlocks.html @@ -0,0 +1,24 @@ +

This is a fenced code block:

+
pairs :: [(Int,Char)]
+pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']]
+
+

Here is one with tildes:

+
pairs :: [(Int,Char)]
+pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']]
+
+

More metadata:

+
pairs :: [(Int,Char)]
+pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']]
+
+

More backticks:

+
pairs :: [(Int,Char)]
+pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']]
+
+backticks :: String
+backticks = "`````"
+
+

Without an end:

+
code with
+no end
+
+
diff --git a/oldtests/Code/FencedCodeBlocks.markdown b/oldtests/Code/FencedCodeBlocks.markdown new file mode 100644 index 0000000000..6ccc6bee8c --- /dev/null +++ b/oldtests/Code/FencedCodeBlocks.markdown @@ -0,0 +1,35 @@ +This is a fenced code block: +```haskell +pairs :: [(Int,Char)] +pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']] +``` +Here is one with tildes: + +~~~ haskell +pairs :: [(Int,Char)] +pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']] +~~~ + +More metadata: + +```haskell numberLines start=50 +pairs :: [(Int,Char)] +pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']] +``` + +More backticks: + +```````` haskell +pairs :: [(Int,Char)] +pairs = [(x,y) | x <- [0..10], y <- ['a'..'z']] + +backticks :: String +backticks = "`````" +````````````` + +Without an end: + +``` +code with +no end + diff --git a/oldtests/Code/IndentedCodeBlocks.html b/oldtests/Code/IndentedCodeBlocks.html new file mode 100644 index 0000000000..0b9b7e708a --- /dev/null +++ b/oldtests/Code/IndentedCodeBlocks.html @@ -0,0 +1,22 @@ +

Indented code with two space indent in first and last line:

+
  two spaces *hello*
+{ more }
+
+  and
+
+

Indented code requires a leading/trailing blank line: +quick-command --option "$*"

+

Indented code does not require a trailing blank line:

+
code
+
+

and not code.

+

Code in blockquote:

+
+
code
+
+
+

Code in list:

+
    +
  1. code
    +
  2. +
diff --git a/oldtests/Code/IndentedCodeBlocks.markdown b/oldtests/Code/IndentedCodeBlocks.markdown new file mode 100644 index 0000000000..2a99db0923 --- /dev/null +++ b/oldtests/Code/IndentedCodeBlocks.markdown @@ -0,0 +1,22 @@ +Indented code with two space indent in first and last line: + + two spaces *hello* + { more } + + and + +Indented code requires a leading/trailing blank line: + quick-command --option "$*" + +Indented code does not require a trailing blank line: + + code +and not code. + +Code in blockquote: + +> code + +Code in list: + +1. code diff --git a/oldtests/Code/IndentedFences.html b/oldtests/Code/IndentedFences.html new file mode 100644 index 0000000000..66e76dae74 --- /dev/null +++ b/oldtests/Code/IndentedFences.html @@ -0,0 +1,20 @@ +
a
+
+
z
+
+
a
+a
+a
+ a
+
+
    +
  • foo

    +
         Hello
    +
    +World
    +
  • +
+
+
a
+
+
diff --git a/oldtests/Code/IndentedFences.markdown b/oldtests/Code/IndentedFences.markdown new file mode 100644 index 0000000000..098545f50b --- /dev/null +++ b/oldtests/Code/IndentedFences.markdown @@ -0,0 +1,26 @@ + ``` + a + ``` + + ``` +z +``` + + ``` +a + a + a + a + ``` + +* foo + + ``` + Hello + + World + ``` + +> ``` +>a +>``` diff --git a/oldtests/Code/IndentedInLists.html b/oldtests/Code/IndentedInLists.html new file mode 100644 index 0000000000..76ed424e00 --- /dev/null +++ b/oldtests/Code/IndentedInLists.html @@ -0,0 +1,22 @@ +
    +
  • code starts here
    +
  • +
+
    +
  1. foo

    +
    code starts here
    +
  2. +
  3. foo

    +
    code starts here
    +
  4. +
+
    +
  • foo

    +
    code starts here
    +
    +
      +
    • foo

      +
      code starts here
      +
    • +
  • +
diff --git a/oldtests/Code/IndentedInLists.markdown b/oldtests/Code/IndentedInLists.markdown new file mode 100644 index 0000000000..54e1af1f8a --- /dev/null +++ b/oldtests/Code/IndentedInLists.markdown @@ -0,0 +1,17 @@ +- code starts here + +1. foo + + code starts here + +2. foo + + code starts here + +- foo + + code starts here + + - foo + + code starts here diff --git a/oldtests/Code/Inline.html b/oldtests/Code/Inline.html new file mode 100644 index 0000000000..9c52790ece --- /dev/null +++ b/oldtests/Code/Inline.html @@ -0,0 +1,13 @@ +

All of these are equivalent:

+
    +
  • *hi*
  • +
  • *hi*
  • +
  • *hi*
  • +
  • *hi*
  • +
  • *hi*
  • +
+

Backticks in code spans:

+
    +
  • ``code``
  • +
  • ``code``
  • +
diff --git a/oldtests/Code/Inline.markdown b/oldtests/Code/Inline.markdown new file mode 100644 index 0000000000..38e5b0c7f3 --- /dev/null +++ b/oldtests/Code/Inline.markdown @@ -0,0 +1,13 @@ +All of these are equivalent: + +- `*hi*` +- ` *hi* ` +- ``*hi* `` +- ````*hi*```` +- `*hi* + ` + +Backticks in code spans: + +- ``` ``code`` ``` +- ` ``code`` ` diff --git a/oldtests/Code/ListBreakAfter.html b/oldtests/Code/ListBreakAfter.html new file mode 100644 index 0000000000..29d6d5ec40 --- /dev/null +++ b/oldtests/Code/ListBreakAfter.html @@ -0,0 +1,30 @@ +
    +
  • foo

    +
      +
    • bar

      +
      code1
      +code2
      +
      +

      code?

    • +
  • +
  • foo

    +
      +
    • bar

      +
      code1
      +code2
      +
    • +
  • +
+
code?
+
+
    +
  • foo +
      +
    • bar

      +
      code1
      +code2
      +
    • +
  • +
+
code?
+
diff --git a/oldtests/Code/ListBreakAfter.markdown b/oldtests/Code/ListBreakAfter.markdown new file mode 100644 index 0000000000..4fa79f1a98 --- /dev/null +++ b/oldtests/Code/ListBreakAfter.markdown @@ -0,0 +1,26 @@ +* foo + * bar + + code1 + code2 + + code? + +* foo + * bar + + code1 + code2 + + + code? + +* foo + * bar + + code1 + code2 + + + + code? diff --git a/oldtests/Code/WhiteLines.html b/oldtests/Code/WhiteLines.html new file mode 100644 index 0000000000..7fa137fb58 --- /dev/null +++ b/oldtests/Code/WhiteLines.html @@ -0,0 +1,7 @@ +
ABC
+  
+ 
+
+DEF
+
+

GHI

diff --git a/oldtests/Code/WhiteLines.markdown b/oldtests/Code/WhiteLines.markdown new file mode 100644 index 0000000000..ea17af7c1b --- /dev/null +++ b/oldtests/Code/WhiteLines.markdown @@ -0,0 +1,9 @@ + ABC + + + + DEF + + + +GHI diff --git a/oldtests/Emphasis/Escapes.html b/oldtests/Emphasis/Escapes.html new file mode 100644 index 0000000000..17c9e2df82 --- /dev/null +++ b/oldtests/Emphasis/Escapes.html @@ -0,0 +1 @@ +

hi* there

diff --git a/oldtests/Emphasis/Escapes.markdown b/oldtests/Emphasis/Escapes.markdown new file mode 100644 index 0000000000..4f146983a8 --- /dev/null +++ b/oldtests/Emphasis/Escapes.markdown @@ -0,0 +1 @@ +*hi\* there* \ No newline at end of file diff --git a/oldtests/Emphasis/NestedEmphAndStrong.html b/oldtests/Emphasis/NestedEmphAndStrong.html new file mode 100644 index 0000000000..b41b527f4f --- /dev/null +++ b/oldtests/Emphasis/NestedEmphAndStrong.html @@ -0,0 +1,66 @@ +
    +
  1. test test
  2. +
  3. test test
  4. +
  5. test test
  6. +
  7. test test
  8. +
  9. test test
  10. +
  11. test test
  12. +
  13. test test
  14. +
  15. test test
  16. +
  17. test test
  18. +
  19. test test
  20. +
  21. test test
  22. +
  23. test test
  24. +
  25. test test
  26. +
  27. test test
  28. +
  29. test test
  30. +
  31. test test
  32. +
+

Incorrect nesting:

+
    +
  1. *test test* test
  2. +
  3. _test test_ test
  4. +
  5. **test test* test*
  6. +
  7. __test␣test_␣test_
  8. +
  9. test test test
  10. +
  11. test test test
  12. +
  13. test test test
  14. +
  15. test test test
  16. +
+

No emphasis:

+
    +
  1. test* test *test
  2. +
  3. test** test **test
  4. +
  5. test_ test _test
  6. +
  7. test__ test __test
  8. +
+

Middle-word emphasis (asterisks):

+
    +
  1. ab
  2. +
  3. ab
  4. +
  5. abc
  6. +
  7. ab
  8. +
  9. ab
  10. +
  11. abc
  12. +
+

Middle-word emphasis (underscore):

+
    +
  1. _a_b
  2. +
  3. a_b_
  4. +
  5. a_b_c
  6. +
  7. __a__b
  8. +
  9. a__b__
  10. +
  11. a__b__c
  12. +
  13. my_precious_file.txt
  14. +
+

Tricky Cases:

+
    +
  1. E**. Test TestTestTest
  2. +
  3. E**. Test Test Test Test
  4. +
+

Overlong emphasis:

+

Name: ____________
+Organization: ____
+Region/Country: __

+

_____Cut here_____

+

____Cut here____

diff --git a/oldtests/Emphasis/NestedEmphAndStrong.markdown b/oldtests/Emphasis/NestedEmphAndStrong.markdown new file mode 100644 index 0000000000..ec7da25584 --- /dev/null +++ b/oldtests/Emphasis/NestedEmphAndStrong.markdown @@ -0,0 +1,69 @@ +1. ***test test*** +2. ___test test___ +3. *test **test*** +4. **test *test*** +5. ***test* test** +6. ***test** test* +7. ***test* test** +8. **test *test*** +9. *test **test*** +10. _test __test___ +11. __test _test___ +12. ___test_ test__ +13. ___test__ test_ +14. ___test_ test__ +15. __test _test___ +16. _test __test___ + +Incorrect nesting: + +1. *test **test* test** +2. _test __test_ test__ +3. **test *test** test* +4. __test _test__ test_ +5. *test *test* test* +6. _test _test_ test_ +7. **test **test** test** +8. __test __test__ test__ + +No emphasis: + +1. test* test *test +2. test** test **test +3. test_ test _test +4. test__ test __test + +Middle-word emphasis (asterisks): + +1. *a*b +2. a*b* +3. a*b*c +4. **a**b +5. a**b** +6. a**b**c + +Middle-word emphasis (underscore): + +1. _a_b +2. a_b_ +3. a_b_c +4. __a__b +5. a__b__ +6. a__b__c +7. my_precious_file.txt + +Tricky Cases: + +1. E**. **Test** TestTestTest +2. E**. **Test** Test Test Test + +Overlong emphasis: + +Name: ____________ +Organization: ____ +Region/Country: __ + +_____Cut here_____ + +____Cut here____ + diff --git a/oldtests/Emphasis/Pathological.html b/oldtests/Emphasis/Pathological.html new file mode 100644 index 0000000000..37eb9fafc5 --- /dev/null +++ b/oldtests/Emphasis/Pathological.html @@ -0,0 +1,24 @@ +

This input can take a long time to parse in some implementations.

+

*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +aaaaa

+

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa**

diff --git a/oldtests/Emphasis/Pathological.markdown b/oldtests/Emphasis/Pathological.markdown new file mode 100644 index 0000000000..5deb95e507 --- /dev/null +++ b/oldtests/Emphasis/Pathological.markdown @@ -0,0 +1,26 @@ +This input can take a long time to parse in some implementations. + +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +*a +aaaaa + +*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**a*a** diff --git a/oldtests/Emphasis/Punctuation.html b/oldtests/Emphasis/Punctuation.html new file mode 100644 index 0000000000..6061b816e8 --- /dev/null +++ b/oldtests/Emphasis/Punctuation.html @@ -0,0 +1,10 @@ +

Here is a _ that is cool.

+

Foo.

+

Foo.

+

Foo.

+

Foo.

+

Foo.

+

Foo.

+

Foo. Foo? Foo! Foo: Foo; (Foo)

+

Foo. Foo? Foo! Foo: Foo; (Foo)

+

Foo. Foo? Foo! Foo: Foo; (Foo)

diff --git a/oldtests/Emphasis/Punctuation.markdown b/oldtests/Emphasis/Punctuation.markdown new file mode 100644 index 0000000000..e3f23b8768 --- /dev/null +++ b/oldtests/Emphasis/Punctuation.markdown @@ -0,0 +1,19 @@ +Here is a _ that is _cool_. + +_Foo._ + +__Foo.__ + +___Foo.___ + +_Foo_. + +__Foo__. + +___Foo___. + +_Foo_. _Foo_? _Foo_! _Foo_: _Foo_; (_Foo_) + +__Foo__. __Foo__? __Foo__! __Foo__: __Foo__; (__Foo__) + +___Foo___. ___Foo___? ___Foo___! ___Foo___: ___Foo___; (___Foo___) diff --git a/oldtests/HTML/Blocks.html b/oldtests/HTML/Blocks.html new file mode 100644 index 0000000000..dc80335860 --- /dev/null +++ b/oldtests/HTML/Blocks.html @@ -0,0 +1,18 @@ +
+
+ *raw html* +
+
+
+
+

this is markdown

+
+
+ + +
+* raw html with trailing space +
diff --git a/oldtests/HTML/Blocks.markdown b/oldtests/HTML/Blocks.markdown new file mode 100644 index 0000000000..a83fa66794 --- /dev/null +++ b/oldtests/HTML/Blocks.markdown @@ -0,0 +1,26 @@ +
+
+ *raw html* +
+
+ +
+
+ +*this is markdown* + +
+
+ + + + + +
+* raw html with trailing space +
diff --git a/oldtests/HTML/Inline.html b/oldtests/HTML/Inline.html new file mode 100644 index 0000000000..94d40ac401 --- /dev/null +++ b/oldtests/HTML/Inline.html @@ -0,0 +1,8 @@ +

hi +hi + +Hello there. +A line
break. +

diff --git a/oldtests/HTML/Inline.markdown b/oldtests/HTML/Inline.markdown new file mode 100644 index 0000000000..2259421e6b --- /dev/null +++ b/oldtests/HTML/Inline.markdown @@ -0,0 +1,8 @@ +hi +`hi` + +Hello there. +A line
break. + diff --git a/oldtests/HTML/UppercaseTags.html b/oldtests/HTML/UppercaseTags.html new file mode 100644 index 0000000000..8d2d828f5d --- /dev/null +++ b/oldtests/HTML/UppercaseTags.html @@ -0,0 +1,4 @@ +
+this is a block +
+

Here is some inline html.

diff --git a/oldtests/HTML/UppercaseTags.markdown b/oldtests/HTML/UppercaseTags.markdown new file mode 100644 index 0000000000..b476ffb655 --- /dev/null +++ b/oldtests/HTML/UppercaseTags.markdown @@ -0,0 +1,5 @@ +
+this is a block +
+ +Here is some inline html. \ No newline at end of file diff --git a/oldtests/Headers/ATX.html b/oldtests/Headers/ATX.html new file mode 100644 index 0000000000..f375b98d85 --- /dev/null +++ b/oldtests/Headers/ATX.html @@ -0,0 +1,14 @@ +

One

+

Two

+

Three

+

Four

+
Five
+
Six
+

####### Seven

+

Three with

+

Spacing doesn't matter

+

Escaped final #

+

## Not a header

+

#5 not a header

+

+

(empty header)

diff --git a/oldtests/Headers/ATX.markdown b/oldtests/Headers/ATX.markdown new file mode 100644 index 0000000000..f687aa5e1d --- /dev/null +++ b/oldtests/Headers/ATX.markdown @@ -0,0 +1,20 @@ +# One +## Two +### Three +#### Four +##### Five + +###### Six + +####### Seven + +### Three with ### +## Spacing doesn't matter ## +## Escaped final \## + +\## Not a header + +#5 not a header + +## +(empty header) diff --git a/oldtests/Headers/Setext.html b/oldtests/Headers/Setext.html new file mode 100644 index 0000000000..787fb02cba --- /dev/null +++ b/oldtests/Headers/Setext.html @@ -0,0 +1,9 @@ +

Level one

+

Two

+

In a paragraph

+

Level two

+

more text

+

====== +no empty headers

+

not a header

+
diff --git a/oldtests/Headers/Setext.markdown b/oldtests/Headers/Setext.markdown new file mode 100644 index 0000000000..da0c7e2661 --- /dev/null +++ b/oldtests/Headers/Setext.markdown @@ -0,0 +1,17 @@ +Level one +========= + +Two +--- + +In a paragraph + +Level two +--------- +more text + +====== +no empty headers + +not a header +------------ ----- diff --git a/oldtests/Links/AngleBrackets.html b/oldtests/Links/AngleBrackets.html new file mode 100644 index 0000000000..21ac00d0a6 --- /dev/null +++ b/oldtests/Links/AngleBrackets.html @@ -0,0 +1,3 @@ +

silly URL with angle brackets.

+

link.

+

link.

diff --git a/oldtests/Links/AngleBrackets.markdown b/oldtests/Links/AngleBrackets.markdown new file mode 100644 index 0000000000..c2e06ff9bf --- /dev/null +++ b/oldtests/Links/AngleBrackets.markdown @@ -0,0 +1,7 @@ +[silly URL with angle brackets](). + +[link]( "title"). + +[link][]. + +[link]: "title" diff --git a/oldtests/Links/AutoLinks.html b/oldtests/Links/AutoLinks.html new file mode 100644 index 0000000000..092353f64a --- /dev/null +++ b/oldtests/Links/AutoLinks.html @@ -0,0 +1,7 @@ +

http://google.com?query=blah&time=15 +someone.else@somedomain.com +ftp://old.ftp.server.edu +git://some.git.repo/project.git + +<http://not.an autolink> +<relative/not/autolink>

diff --git a/oldtests/Links/AutoLinks.markdown b/oldtests/Links/AutoLinks.markdown new file mode 100644 index 0000000000..bf95b8de2b --- /dev/null +++ b/oldtests/Links/AutoLinks.markdown @@ -0,0 +1,7 @@ + + + + + + + diff --git a/oldtests/Links/BackticksInLinks.html b/oldtests/Links/BackticksInLinks.html new file mode 100644 index 0000000000..ff7038395f --- /dev/null +++ b/oldtests/Links/BackticksInLinks.html @@ -0,0 +1 @@ +

the right bracket character (])

diff --git a/oldtests/Links/BackticksInLinks.markdown b/oldtests/Links/BackticksInLinks.markdown new file mode 100644 index 0000000000..539fd52e31 --- /dev/null +++ b/oldtests/Links/BackticksInLinks.markdown @@ -0,0 +1 @@ +[the right bracket character (`]`)](/url) diff --git a/oldtests/Links/CaseInsensitiveReferences.html b/oldtests/Links/CaseInsensitiveReferences.html new file mode 100644 index 0000000000..afe45571be --- /dev/null +++ b/oldtests/Links/CaseInsensitiveReferences.html @@ -0,0 +1 @@ +

Толпой is a Russian word.

diff --git a/oldtests/Links/CaseInsensitiveReferences.markdown b/oldtests/Links/CaseInsensitiveReferences.markdown new file mode 100644 index 0000000000..f9653b9de5 --- /dev/null +++ b/oldtests/Links/CaseInsensitiveReferences.markdown @@ -0,0 +1,3 @@ +[Толпой] is a Russian word. + +[ТОЛПОЙ]: /url diff --git a/oldtests/Links/Entities.html b/oldtests/Links/Entities.html new file mode 100644 index 0000000000..252dadb5f5 --- /dev/null +++ b/oldtests/Links/Entities.html @@ -0,0 +1,2 @@ +

http://göögle.com

+

hi

diff --git a/oldtests/Links/Entities.markdown b/oldtests/Links/Entities.markdown new file mode 100644 index 0000000000..d81ee3618c --- /dev/null +++ b/oldtests/Links/Entities.markdown @@ -0,0 +1,3 @@ + + +[hi](/url "göögle & yahoo") diff --git a/oldtests/Links/InlineLinks.html b/oldtests/Links/InlineLinks.html new file mode 100644 index 0000000000..ae33f33fd6 --- /dev/null +++ b/oldtests/Links/InlineLinks.html @@ -0,0 +1,10 @@ +
    +
  1. link
  2. +
  3. link
  4. +
  5. link
  6. +
  7. link with +linebreak.
  8. +
  9. link
  10. +
  11. [not a link] (/url)
  12. +
diff --git a/oldtests/Links/InlineLinks.markdown b/oldtests/Links/InlineLinks.markdown new file mode 100644 index 0000000000..a822c4dbbe --- /dev/null +++ b/oldtests/Links/InlineLinks.markdown @@ -0,0 +1,9 @@ +1. [link](/url) +2. [link](/url "title") +3. [link](/url + "title") +4. [link *with +linebreak*](
"title +with linebreak"). +5. [link](/url(withparens) 'and single quoted title') +6. [not a link] (/url) diff --git a/oldtests/Links/ParensInURLs.html b/oldtests/Links/ParensInURLs.html new file mode 100644 index 0000000000..9cd6de7dd1 --- /dev/null +++ b/oldtests/Links/ParensInURLs.html @@ -0,0 +1,6 @@ +

Inline link 1 with parens.

+

Inline link 2 with parens.

+

Inline link 3 with non-escaped parens.

+

Inline link 4 with non-escaped parens.

+

Reference link 1 with parens.

+

Reference link 2 with parens.

diff --git a/oldtests/Links/ParensInURLs.markdown b/oldtests/Links/ParensInURLs.markdown new file mode 100644 index 0000000000..bb7be4fb83 --- /dev/null +++ b/oldtests/Links/ParensInURLs.markdown @@ -0,0 +1,14 @@ +[Inline link 1 with parens](/url\(test\) "title"). + +[Inline link 2 with parens]( "title"). + +[Inline link 3 with non-escaped parens](/url(test) "title"). + +[Inline link 4 with non-escaped parens]( "title"). + +[Reference link 1 with parens][1]. + +[Reference link 2 with parens][2]. + + [1]: /url(test) "title" + [2]: "title" diff --git a/oldtests/Links/ReferenceLinks.html b/oldtests/Links/ReferenceLinks.html new file mode 100644 index 0000000000..397cdb286c --- /dev/null +++ b/oldtests/Links/ReferenceLinks.html @@ -0,0 +1,7 @@ +
    +
  1. Link references can be defined anywhere.

  2. +
+
+

another one

+
diff --git a/oldtests/Links/ReferenceLinks.markdown b/oldtests/Links/ReferenceLinks.markdown new file mode 100644 index 0000000000..ebcf5a9684 --- /dev/null +++ b/oldtests/Links/ReferenceLinks.markdown @@ -0,0 +1,10 @@ +1. [Link references] can be defined anywhere. + + [Link references]: /url + (even in a list item) + +> [another] one +> +> [another]: +> /foo "can break +> lines" diff --git a/oldtests/Lists/CodeBlocksInLists.html b/oldtests/Lists/CodeBlocksInLists.html new file mode 100644 index 0000000000..fcd3e2a82d --- /dev/null +++ b/oldtests/Lists/CodeBlocksInLists.html @@ -0,0 +1,14 @@ +
    +
  1. list item +code

  2. +
  3. list item

    +
    code
    +
  4. +
  5. code
    +
  6. +
  7. code
    +
  8. +
  9. code
    +code
    +
  10. +
diff --git a/oldtests/Lists/CodeBlocksInLists.markdown b/oldtests/Lists/CodeBlocksInLists.markdown new file mode 100644 index 0000000000..7730808534 --- /dev/null +++ b/oldtests/Lists/CodeBlocksInLists.markdown @@ -0,0 +1,18 @@ +1. list item + code + +2. list item + ~~~ + code + ~~~ + +3. ~~~ + code + ~~~ + +4. ~~~ + code + ~~~ + +5. code + code diff --git a/oldtests/Lists/ConsecutiveLists.html b/oldtests/Lists/ConsecutiveLists.html new file mode 100644 index 0000000000..f8f90989fa --- /dev/null +++ b/oldtests/Lists/ConsecutiveLists.html @@ -0,0 +1,20 @@ +
    +
  • one
  • +
  • one
  • +
+
    +
  • two
  • +
  • two
  • +
+
    +
  • three
  • +
  • three
  • +
+
    +
  1. four
  2. +
  3. four
  4. +
+
    +
  1. five
  2. +
  3. five
  4. +
diff --git a/oldtests/Lists/ConsecutiveLists.markdown b/oldtests/Lists/ConsecutiveLists.markdown new file mode 100644 index 0000000000..c4faa54a46 --- /dev/null +++ b/oldtests/Lists/ConsecutiveLists.markdown @@ -0,0 +1,10 @@ +* one +* one ++ two ++ two +- three +- three +1. four +1. four +1) five +1) five diff --git a/oldtests/Lists/EmptyListItem.html b/oldtests/Lists/EmptyListItem.html new file mode 100644 index 0000000000..2c23fe1121 --- /dev/null +++ b/oldtests/Lists/EmptyListItem.html @@ -0,0 +1,10 @@ +
    +
  • one
  • +
  • +
  • three
  • +
+
    +
  1. one
  2. +
  3. +
  4. three
  5. +
diff --git a/oldtests/Lists/EmptyListItem.markdown b/oldtests/Lists/EmptyListItem.markdown new file mode 100644 index 0000000000..d30cbc3369 --- /dev/null +++ b/oldtests/Lists/EmptyListItem.markdown @@ -0,0 +1,7 @@ +- one +- +- three + +1. one +2. +3. three diff --git a/oldtests/Lists/InBlockquote.html b/oldtests/Lists/InBlockquote.html new file mode 100644 index 0000000000..da233e886e --- /dev/null +++ b/oldtests/Lists/InBlockquote.html @@ -0,0 +1,22 @@ +
+
    +
  • tight
  • +
  • tight
  • +
+
+
+
    +
  • loose

  • +
  • loose

  • +
+
+
+
    +
  • one-item list
  • +
+
+
+
    +
  • one-item list
  • +
+
diff --git a/oldtests/Lists/InBlockquote.markdown b/oldtests/Lists/InBlockquote.markdown new file mode 100644 index 0000000000..511563bc3c --- /dev/null +++ b/oldtests/Lists/InBlockquote.markdown @@ -0,0 +1,12 @@ +> - tight +> - tight + + +> - loose +> +> - loose + + +> - one-item list + +> - one-item list diff --git a/oldtests/Lists/Indents.html b/oldtests/Lists/Indents.html new file mode 100644 index 0000000000..a11a5a62b3 --- /dev/null +++ b/oldtests/Lists/Indents.html @@ -0,0 +1,22 @@ +
+
    +
  • foo

    +

    bar

  • +
+
+
    +
  • one
  • +
  • two
  • +
+
    +
  • one
  • +
  • two
  • +
  • three
  • +
+
    +
  • one +
      +
    • two
    • +
  • +
  • three
  • +
diff --git a/oldtests/Lists/Indents.markdown b/oldtests/Lists/Indents.markdown new file mode 100644 index 0000000000..293d112af2 --- /dev/null +++ b/oldtests/Lists/Indents.markdown @@ -0,0 +1,17 @@ + > * foo +> +> bar + + + - one + - two + + +- one + - two +- three + + +- one + - two +- three diff --git a/oldtests/Lists/ListsAndHRs.html b/oldtests/Lists/ListsAndHRs.html new file mode 100644 index 0000000000..40826f7e5c --- /dev/null +++ b/oldtests/Lists/ListsAndHRs.html @@ -0,0 +1,7 @@ +
    +
  • item 1 +
      +
    • item 2
    • +
  • +
+
diff --git a/oldtests/Lists/ListsAndHRs.markdown b/oldtests/Lists/ListsAndHRs.markdown new file mode 100644 index 0000000000..19c07e7761 --- /dev/null +++ b/oldtests/Lists/ListsAndHRs.markdown @@ -0,0 +1,3 @@ +* item 1 + * item 2 +* * * * * diff --git a/oldtests/Lists/ListsAndSetextHeaders.html b/oldtests/Lists/ListsAndSetextHeaders.html new file mode 100644 index 0000000000..c6af9ebae5 --- /dev/null +++ b/oldtests/Lists/ListsAndSetextHeaders.html @@ -0,0 +1,6 @@ +
    +
  1. item
  2. +
  3. item +Not header
  4. +
+
diff --git a/oldtests/Lists/ListsAndSetextHeaders.markdown b/oldtests/Lists/ListsAndSetextHeaders.markdown new file mode 100644 index 0000000000..acfa655188 --- /dev/null +++ b/oldtests/Lists/ListsAndSetextHeaders.markdown @@ -0,0 +1,4 @@ +1. item +2. item +Not header +---------- diff --git a/oldtests/Lists/MultipleBlankLines.html b/oldtests/Lists/MultipleBlankLines.html new file mode 100644 index 0000000000..d894db15a0 --- /dev/null +++ b/oldtests/Lists/MultipleBlankLines.html @@ -0,0 +1,56 @@ +
    +
  1. First Item

    +
      +
    • one

      +
        +
      • two
      • +
    • +
    • one

      +
        +
      • two
      • +
    • +
  2. +
  3. Second Item

    +
      +
    • one +
        +
      • two
      • +
    • +
  4. +
+
    +
  • one +
      +
    • two
    • +
  • +
+
    +
  1. Third Item

    +
      +
    • one +
        +
      • two
      • +
    • +
  2. +
+
    +
  • one +
      +
    • two
    • +
  • +
+
    +
  1. Fourth Item

    +
      +
    • one +
        +
      • two
      • +
    • +
  2. +
+
    +
  • one +
      +
    • two
    • +
  • +
diff --git a/oldtests/Lists/MultipleBlankLines.markdown b/oldtests/Lists/MultipleBlankLines.markdown new file mode 100644 index 0000000000..e24a4f2634 --- /dev/null +++ b/oldtests/Lists/MultipleBlankLines.markdown @@ -0,0 +1,37 @@ +1. First Item + + * one + * two + + * one + * two + +1. Second Item + + * one + * two + + + * one + * two + +1. Third Item + + * one + * two + + + + * one + * two + +1. Fourth Item + + * one + * two + + + + + * one + * two diff --git a/oldtests/Lists/Start.html b/oldtests/Lists/Start.html new file mode 100644 index 0000000000..46e0550ca5 --- /dev/null +++ b/oldtests/Lists/Start.html @@ -0,0 +1,11 @@ +
    +
  1. this list starts with 4.
  2. +
  3. and continues
  4. +
  5. the continuation number is irrelevant.
  6. +
+
    +
  1. a space odyssey
  2. +
+
    +
  1. standard lists get no start attribute
  2. +
diff --git a/oldtests/Lists/Start.markdown b/oldtests/Lists/Start.markdown new file mode 100644 index 0000000000..175226ffad --- /dev/null +++ b/oldtests/Lists/Start.markdown @@ -0,0 +1,7 @@ +4. this list starts with 4. +5. and continues +1. the continuation number is irrelevant. + +2001) a space odyssey + +1. standard lists get no start attribute diff --git a/oldtests/Lists/Sublists.html b/oldtests/Lists/Sublists.html new file mode 100644 index 0000000000..af629158a4 --- /dev/null +++ b/oldtests/Lists/Sublists.html @@ -0,0 +1,49 @@ +

Four levels:

+
    +
  • one +
      +
    • two +
        +
      • three +
          +
        • four
        • +
      • +
    • +
  • +
+
    +
  1. one +
      +
    1. two +
        +
      1. three +
          +
        1. four
        2. +
      2. +
    2. +
  2. +
+
    +
  1. one +
      +
    • two +
        +
      1. three +
          +
        • four
        • +
      2. +
    • +
  2. +
+
    +
  • one +
      +
    • two +
        +
      1. three +
          +
        1. four
        2. +
      2. +
    • +
  • +
diff --git a/oldtests/Lists/Sublists.markdown b/oldtests/Lists/Sublists.markdown new file mode 100644 index 0000000000..9eced9e811 --- /dev/null +++ b/oldtests/Lists/Sublists.markdown @@ -0,0 +1,24 @@ +Four levels: + +- one + - two + - three + - four + + +1. one + 1. two + 1. three + 1. four + + +1) one + - two + 1) three + - four + + +- one + - two + 1. three + 1) four diff --git a/oldtests/Lists/TightAndLoose.html b/oldtests/Lists/TightAndLoose.html new file mode 100644 index 0000000000..7792ebb1ef --- /dev/null +++ b/oldtests/Lists/TightAndLoose.html @@ -0,0 +1,49 @@ +
    +
  1. tight
  2. +
+
    +
  • tight
  • +
  • list
  • +
+
    +
  • loose

  • +
  • list

  • +
+
    +
  1. tight
  2. +
  3. list
  4. +
+
    +
  1. loose

  2. +
  3. list

  4. +
+
    +
  1. loose

    +
      +
    • sublist
    • +
  2. +
+
    +
  1. tight +
      +
    • sublist
    • +
  2. +
+
    +
  • tight +
    +

    blockquote +and

    +
    +
    code
    +
  • +
  • tight
  • +
+
    +
  • tight +
      +
    • with loose

    • +
    • sublist

    • +
  • +
  • tight
  • +
diff --git a/oldtests/Lists/TightAndLoose.markdown b/oldtests/Lists/TightAndLoose.markdown new file mode 100644 index 0000000000..263a34c888 --- /dev/null +++ b/oldtests/Lists/TightAndLoose.markdown @@ -0,0 +1,45 @@ +1. tight + + +- tight +- list + + +- loose + +- list + + +1. tight +2. list + + +1. loose + +2. list + + +1. loose + + - sublist + + + +1. tight + - sublist + + +- tight + > blockquote + and + ``` + code + ``` +- tight + + +- tight + - with loose + + - sublist +- tight diff --git a/oldtests/Lists/TightLooseBlockquote.html b/oldtests/Lists/TightLooseBlockquote.html new file mode 100644 index 0000000000..7e78214c88 --- /dev/null +++ b/oldtests/Lists/TightLooseBlockquote.html @@ -0,0 +1,32 @@ +
    +
  • tight I +
    +

    bq

    +
  • +
  • tight I
  • +
+
    +
  • tight II +
    +

    bq

    +
    +foo
  • +
  • tight II
  • +
+
    +
  1. Blank lines in bq don't break list +
    +

    bq

    +
  2. +
  3. Should say (2) in output
  4. +
+
    +
  • Blank lines in bq don't break LI +
      +
    • item A +
      +

      bq

      +
    • +
    • item B
    • +
  • +
diff --git a/oldtests/Lists/TightLooseBlockquote.markdown b/oldtests/Lists/TightLooseBlockquote.markdown new file mode 100644 index 0000000000..08200cce00 --- /dev/null +++ b/oldtests/Lists/TightLooseBlockquote.markdown @@ -0,0 +1,25 @@ +* tight I + > bq + > +* tight I + + +* tight II + > bq + > + foo +* tight II + +1. Blank lines in bq don't break list + > bq + > + > +1. Should say (2) in output + +* Blank lines in bq don't break LI + * item A + > bq + > + > + * item B + \ No newline at end of file diff --git a/oldtests/Lists/TightLooseMore.html b/oldtests/Lists/TightLooseMore.html new file mode 100644 index 0000000000..f26f457711 --- /dev/null +++ b/oldtests/Lists/TightLooseMore.html @@ -0,0 +1,7 @@ +
    +
  • foo

    +
      +
    • bar
    • +
    +

    blah

  • +
diff --git a/oldtests/Lists/TightLooseMore.markdown b/oldtests/Lists/TightLooseMore.markdown new file mode 100644 index 0000000000..7ace63fcca --- /dev/null +++ b/oldtests/Lists/TightLooseMore.markdown @@ -0,0 +1,4 @@ +* foo + * bar + + blah \ No newline at end of file diff --git a/oldtests/Lists/TwoBlankLinesEndList.html b/oldtests/Lists/TwoBlankLinesEndList.html new file mode 100644 index 0000000000..629add1c29 --- /dev/null +++ b/oldtests/Lists/TwoBlankLinesEndList.html @@ -0,0 +1,21 @@ +
    +
  1. one

  2. +
  3. two

  4. +
+
    +
  1. new list
  2. +
+
+
    +
  • one

  • +
  • two

  • +
+
    +
  • new list
  • +
+
+
    +
  1. one
  2. +
+
code
+
diff --git a/oldtests/Lists/TwoBlankLinesEndList.markdown b/oldtests/Lists/TwoBlankLinesEndList.markdown new file mode 100644 index 0000000000..2984a190de --- /dev/null +++ b/oldtests/Lists/TwoBlankLinesEndList.markdown @@ -0,0 +1,20 @@ +1. one + +2. two + + +1. new list + + +> - one +> +> - two +> +> +> - new list + + +1. one + + + code diff --git a/oldtests/Makefile b/oldtests/Makefile new file mode 100644 index 0000000000..c8a30bd253 --- /dev/null +++ b/oldtests/Makefile @@ -0,0 +1,55 @@ +SHELL=/bin/bash +TESTDIR ?= * +PATT ?= . +TESTS=$(shell ls $(TESTDIR)/*.markdown | grep $(PATT)) +DIFFS=$(patsubst %.markdown,%.diff,$(TESTS)) +PROG ?= ../stmd +FILTER ?= perl -pe 's/ /␣/g' +TIDYCMD ?= tidy -asxhtml -utf8 --show-body-only yes --show-warnings no -quiet +DETAILS ?= 1 + +# Check to see if echo supports -e option to allow backslash escapes +ifeq ($(shell echo -e),-e) +ECHO=echo +else +ECHO=echo -e +endif + +all: $(DIFFS) + PASS=0;TESTS=0; \ + for f in $(DIFFS); do \ + let TESTS=TESTS+1; \ + [ -s $$f ] || let PASS=PASS+1; \ + done; \ + $(ECHO) "\033[1m$$PASS of $$TESTS tests passed.\033[0m"; \ + if [ $$TESTS -eq $$PASS ]; then exit 0; else exit 1; fi + +%.actual.html: %.markdown +ifeq ($(TIDY),1) + -cat $< | $(PROG) | $(TIDYCMD) > $@ +else + -cat $< | $(PROG) > $@ +endif + +%.expected.html: %.html +ifeq ($(TIDY),1) + -$(TIDYCMD) $< > $@ +else + cp $< $@ +endif + +%.diff: %.expected.html %.actual.html + diff --unified=1 <(cat $(word 1,$^) | $(FILTER)) <(cat $(word 2,$^) | $(FILTER)) > $@ ; \ + if [ -s $@ ]; then \ + $(ECHO) "\033[1;31m✘ $(patsubst %.diff,%,$@)\033[0m"; \ + if [ $(DETAILS) == "1" ]; then \ + $(ECHO) "\033[0;36m" ; cat $@; $(ECHO) "\033[0m"; \ + fi \ + else \ + $(ECHO) "\033[1;32m✓ $(patsubst %.diff,%,$@)\033[0m"; \ + fi + +.PHONY: all clean + +clean: + -@rm */*.{diff,actual.html,expected.html} diff --git a/oldtests/Misc/BackslashEscapes.html b/oldtests/Misc/BackslashEscapes.html new file mode 100644 index 0000000000..3eb2aed9f5 --- /dev/null +++ b/oldtests/Misc/BackslashEscapes.html @@ -0,0 +1,14 @@ +

*not emphasized* +\emphasis +**not bold** +<br/> not a tag +[link](/foo) not a link +link +`not code`

+

1. not a list item

+

* not a list.

+

# Not a header

+

[foo]: /url "not a reference"

+

$ ^ ; can be escaped. +\a \b \T cannot. +unicode letters and symbols cannot: \π \‥.

diff --git a/oldtests/Misc/BackslashEscapes.markdown b/oldtests/Misc/BackslashEscapes.markdown new file mode 100644 index 0000000000..23496dcf68 --- /dev/null +++ b/oldtests/Misc/BackslashEscapes.markdown @@ -0,0 +1,19 @@ +\*not emphasized* +\\*emphasis* +\*\*not bold** +\
not a tag +\[link](/foo) not a link +[link](/foo\) "title\"") +\`not code` + +1\. not a list item + +\* not a list. + +\# Not a header + +\[foo]: /url "not a reference" + +\$ \^ \; can be escaped. +\a \b \T cannot. +unicode letters and symbols cannot: \π \‥. diff --git a/oldtests/Misc/Laziness.html b/oldtests/Misc/Laziness.html new file mode 100644 index 0000000000..e130eb5646 --- /dev/null +++ b/oldtests/Misc/Laziness.html @@ -0,0 +1,22 @@ +
+
    +
  1. one +two
  2. +
+
+

Laziness only affects paragraph continuations:

+
+
code
+
+
+
not same code block
+
+
    +
  1. hello
  2. +
+
+
+
+
+

code

+
diff --git a/oldtests/Misc/Laziness.markdown b/oldtests/Misc/Laziness.markdown new file mode 100644 index 0000000000..2c32870a99 --- /dev/null +++ b/oldtests/Misc/Laziness.markdown @@ -0,0 +1,14 @@ +> 1. one +> two + +Laziness only affects paragraph continuations: + +> code + not same code block + +1. hello +----- + +> ``` +code +``` diff --git a/oldtests/Misc/LineBreaks.html b/oldtests/Misc/LineBreaks.html new file mode 100644 index 0000000000..2d85e85576 --- /dev/null +++ b/oldtests/Misc/LineBreaks.html @@ -0,0 +1,11 @@ +

Two spaces
+break a line. Or more than two
+and spaces in the following line are absorbed.

+

You can also break lines with
+a backslash.

+

Two spaces at the end of a paragraph are +not a line break.

+

A backslash at the end of a paragraph is +not a line break.\

+

Similarly with setext headers

+

And with backslashes\

diff --git a/oldtests/Misc/LineBreaks.markdown b/oldtests/Misc/LineBreaks.markdown new file mode 100644 index 0000000000..3632dcbb68 --- /dev/null +++ b/oldtests/Misc/LineBreaks.markdown @@ -0,0 +1,18 @@ +Two spaces +break a line. Or more than two + and spaces in the following line are absorbed. + +You can also break lines with\ +a backslash. + +Two spaces at the end of a paragraph are +not a line break. + +A backslash at the end of a paragraph is +not a line break.\ + +Similarly with setext headers +------------------------------- + +And with backslashes\ +--------------------- diff --git a/oldtests/Misc/Transitions.html b/oldtests/Misc/Transitions.html new file mode 100644 index 0000000000..fceff9f161 --- /dev/null +++ b/oldtests/Misc/Transitions.html @@ -0,0 +1,26 @@ +
+

blockquote

+
+

blockquote

+
+
+
    +
  1. list
  2. +
  3. list +
      +
    • sublist
    • +
  4. +
+
+

paragraph

+

header

+

header

+
code
+
+
code
+
+
+
+# not a header +
+
diff --git a/oldtests/Misc/Transitions.markdown b/oldtests/Misc/Transitions.markdown new file mode 100644 index 0000000000..5f3a9d35b5 --- /dev/null +++ b/oldtests/Misc/Transitions.markdown @@ -0,0 +1,20 @@ +> blockquote +> > blockquote +1. list +2. list + - sublist +* * * * * +paragraph + +header +------ +### header + code +``` +code +``` +
+
+# not a header +
+
diff --git a/oldtests/Original/Amps_and_angle_encoding.html b/oldtests/Original/Amps_and_angle_encoding.html new file mode 100644 index 0000000000..fc1b2c3304 --- /dev/null +++ b/oldtests/Original/Amps_and_angle_encoding.html @@ -0,0 +1,9 @@ +

AT&T has an ampersand in their name.

+

AT&T is another way to write it.

+

This & that.

+

4 < 5.

+

6 > 5.

+

Here's a link with an ampersand in the URL.

+

Here's a link with an amersand in the link text: AT&T.

+

Here's an inline link.

+

Here's an inline link.

diff --git a/oldtests/Original/Amps_and_angle_encoding.markdown b/oldtests/Original/Amps_and_angle_encoding.markdown new file mode 100644 index 0000000000..0e9527f931 --- /dev/null +++ b/oldtests/Original/Amps_and_angle_encoding.markdown @@ -0,0 +1,21 @@ +AT&T has an ampersand in their name. + +AT&T is another way to write it. + +This & that. + +4 < 5. + +6 > 5. + +Here's a [link] [1] with an ampersand in the URL. + +Here's a link with an amersand in the link text: [AT&T] [2]. + +Here's an inline [link](/script?foo=1&bar=2). + +Here's an inline [link](). + + +[1]: http://example.com/?foo=1&bar=2 +[2]: http://att.com/ "AT&T" \ No newline at end of file diff --git a/oldtests/Original/Auto_links.html b/oldtests/Original/Auto_links.html new file mode 100644 index 0000000000..f517fe62ac --- /dev/null +++ b/oldtests/Original/Auto_links.html @@ -0,0 +1,13 @@ +

Link: http://example.com/.

+

With an ampersand: http://example.com/?foo=1&bar=2

+ +
+

Blockquoted: http://example.com/

+
+

Auto-links should not occur here: <http://example.com/>

+
or here: <http://example.com/>
+
diff --git a/oldtests/Original/Auto_links.markdown b/oldtests/Original/Auto_links.markdown new file mode 100644 index 0000000000..abbc48869d --- /dev/null +++ b/oldtests/Original/Auto_links.markdown @@ -0,0 +1,13 @@ +Link: . + +With an ampersand: + +* In a list? +* +* It should. + +> Blockquoted: + +Auto-links should not occur here: `` + + or here: \ No newline at end of file diff --git a/oldtests/Original/Backslash_escapes.html b/oldtests/Original/Backslash_escapes.html new file mode 100644 index 0000000000..9a833795a5 --- /dev/null +++ b/oldtests/Original/Backslash_escapes.html @@ -0,0 +1,75 @@ +

These should all get escaped:

+

Backslash: \

+

Backtick: `

+

Asterisk: *

+

Underscore: _

+

Left brace: {

+

Right brace: }

+

Left bracket: [

+

Right bracket: ]

+

Left paren: (

+

Right paren: )

+

Greater-than: >

+

Hash: #

+

Period: .

+

Bang: !

+

Plus: +

+

Minus: -

+

These should not, because they occur within a code block:

+
Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+
+

Nor should these, which occur in code spans:

+

Backslash: \\

+

Backtick: \`

+

Asterisk: \*

+

Underscore: \_

+

Left brace: \{

+

Right brace: \}

+

Left bracket: \[

+

Right bracket: \]

+

Left paren: \(

+

Right paren: \)

+

Greater-than: \>

+

Hash: \#

+

Period: \.

+

Bang: \!

+

Plus: \+

+

Minus: \-

+

These should get escaped, even though they're matching pairs for +other Markdown constructs:

+

*asterisks*

+

_underscores_

+

`backticks`

+

This is a code span with a literal backslash-backtick sequence: \`

+

This is a tag with unescaped backticks bar.

+

This is a tag with backslashes bar.

diff --git a/oldtests/Original/Backslash_escapes.markdown b/oldtests/Original/Backslash_escapes.markdown new file mode 100644 index 0000000000..5b014cb33d --- /dev/null +++ b/oldtests/Original/Backslash_escapes.markdown @@ -0,0 +1,120 @@ +These should all get escaped: + +Backslash: \\ + +Backtick: \` + +Asterisk: \* + +Underscore: \_ + +Left brace: \{ + +Right brace: \} + +Left bracket: \[ + +Right bracket: \] + +Left paren: \( + +Right paren: \) + +Greater-than: \> + +Hash: \# + +Period: \. + +Bang: \! + +Plus: \+ + +Minus: \- + + + +These should not, because they occur within a code block: + + Backslash: \\ + + Backtick: \` + + Asterisk: \* + + Underscore: \_ + + Left brace: \{ + + Right brace: \} + + Left bracket: \[ + + Right bracket: \] + + Left paren: \( + + Right paren: \) + + Greater-than: \> + + Hash: \# + + Period: \. + + Bang: \! + + Plus: \+ + + Minus: \- + + +Nor should these, which occur in code spans: + +Backslash: `\\` + +Backtick: `` \` `` + +Asterisk: `\*` + +Underscore: `\_` + +Left brace: `\{` + +Right brace: `\}` + +Left bracket: `\[` + +Right bracket: `\]` + +Left paren: `\(` + +Right paren: `\)` + +Greater-than: `\>` + +Hash: `\#` + +Period: `\.` + +Bang: `\!` + +Plus: `\+` + +Minus: `\-` + + +These should get escaped, even though they're matching pairs for +other Markdown constructs: + +\*asterisks\* + +\_underscores\_ + +\`backticks\` + +This is a code span with a literal backslash-backtick sequence: `` \` `` + +This is a tag with unescaped backticks bar. + +This is a tag with backslashes bar. diff --git a/oldtests/Original/Blockquotes_with_code_blocks.html b/oldtests/Original/Blockquotes_with_code_blocks.html new file mode 100644 index 0000000000..fd1cb1b285 --- /dev/null +++ b/oldtests/Original/Blockquotes_with_code_blocks.html @@ -0,0 +1,12 @@ +
+

Example:

+
sub status {
+    print "working";
+}
+
+

Or:

+
sub status {
+    return "working";
+}
+
+
diff --git a/oldtests/Original/Blockquotes_with_code_blocks.markdown b/oldtests/Original/Blockquotes_with_code_blocks.markdown new file mode 100644 index 0000000000..c31d171049 --- /dev/null +++ b/oldtests/Original/Blockquotes_with_code_blocks.markdown @@ -0,0 +1,11 @@ +> Example: +> +> sub status { +> print "working"; +> } +> +> Or: +> +> sub status { +> return "working"; +> } diff --git a/oldtests/Original/Code_Blocks.html b/oldtests/Original/Code_Blocks.html new file mode 100644 index 0000000000..7d89615cc6 --- /dev/null +++ b/oldtests/Original/Code_Blocks.html @@ -0,0 +1,12 @@ +
code block on the first line
+
+

Regular text.

+
code block indented by spaces
+
+

Regular text.

+
the lines in this block  
+all contain trailing spaces  
+
+

Regular Text.

+
code block on the last line
+
diff --git a/oldtests/Original/Code_Blocks.markdown b/oldtests/Original/Code_Blocks.markdown new file mode 100644 index 0000000000..b54b09285a --- /dev/null +++ b/oldtests/Original/Code_Blocks.markdown @@ -0,0 +1,14 @@ + code block on the first line + +Regular text. + + code block indented by spaces + +Regular text. + + the lines in this block + all contain trailing spaces + +Regular Text. + + code block on the last line \ No newline at end of file diff --git a/oldtests/Original/Code_Spans.html b/oldtests/Original/Code_Spans.html new file mode 100644 index 0000000000..27acea16a9 --- /dev/null +++ b/oldtests/Original/Code_Spans.html @@ -0,0 +1,3 @@ +

<test a=" content of attribute ">

+

Fix for backticks within HTML tag: like this

+

Here's how you put `backticks` in a code span.

diff --git a/oldtests/Original/Code_Spans.markdown b/oldtests/Original/Code_Spans.markdown new file mode 100644 index 0000000000..5c229c7ad3 --- /dev/null +++ b/oldtests/Original/Code_Spans.markdown @@ -0,0 +1,5 @@ +`` + +Fix for backticks within HTML tag: like this + +Here's how you put `` `backticks` `` in a code span. \ No newline at end of file diff --git a/oldtests/Original/Horizontal_rules.html b/oldtests/Original/Horizontal_rules.html new file mode 100644 index 0000000000..a89efdbb25 --- /dev/null +++ b/oldtests/Original/Horizontal_rules.html @@ -0,0 +1,39 @@ +

Dashes:

+
+
+
+
+
---
+
+
+
+
+
+
- - -
+
+

Asterisks:

+
+
+
+
+
***
+
+
+
+
+
+
* * *
+
+

Underscores:

+
+
+
+
+
___
+
+
+
+
+
+
_ _ _
+
diff --git a/oldtests/Original/Horizontal_rules.markdown b/oldtests/Original/Horizontal_rules.markdown new file mode 100644 index 0000000000..1594bda27b --- /dev/null +++ b/oldtests/Original/Horizontal_rules.markdown @@ -0,0 +1,67 @@ +Dashes: + +--- + + --- + + --- + + --- + + --- + +- - - + + - - - + + - - - + + - - - + + - - - + + +Asterisks: + +*** + + *** + + *** + + *** + + *** + +* * * + + * * * + + * * * + + * * * + + * * * + + +Underscores: + +___ + + ___ + + ___ + + ___ + + ___ + +_ _ _ + + _ _ _ + + _ _ _ + + _ _ _ + + _ _ _ diff --git a/oldtests/Original/Images.html b/oldtests/Original/Images.html new file mode 100644 index 0000000000..bd5a7e0e3b --- /dev/null +++ b/oldtests/Original/Images.html @@ -0,0 +1,11 @@ +

Alt text

+

Alt text

+

Inline within a paragraph: alt text.

+

alt text

+

alt text

+

alt text

+

alt text.

+

Empty

+

this is a stupid URL

+

alt text

+

alt text

diff --git a/oldtests/Original/Images.markdown b/oldtests/Original/Images.markdown new file mode 100644 index 0000000000..5707590915 --- /dev/null +++ b/oldtests/Original/Images.markdown @@ -0,0 +1,26 @@ +![Alt text](/path/to/img.jpg) + +![Alt text](/path/to/img.jpg "Optional title") + +Inline within a paragraph: [alt text](/url/). + +![alt text](/url/ "title preceded by two spaces") + +![alt text](/url/ "title has spaces afterward" ) + +![alt text]() + +![alt text]( "with a title"). + +![Empty]() + +![this is a stupid URL](http://example.com/(parens).jpg) + + +![alt text][foo] + + [foo]: /url/ + +![alt text][bar] + + [bar]: /url/ "Title here" \ No newline at end of file diff --git a/oldtests/Original/Inline_HTML_Advanced.html b/oldtests/Original/Inline_HTML_Advanced.html new file mode 100644 index 0000000000..631c135138 --- /dev/null +++ b/oldtests/Original/Inline_HTML_Advanced.html @@ -0,0 +1,23 @@ +

Simple block on one line:

+
foo
+

And nested without indentation:

+
+
+
+foo +
+
+
+
bar
+
+

And with attributes:

+
+
+
+
+

This was broken in 1.0.2b7:

+
+
+foo +
+
diff --git a/oldtests/Original/Inline_HTML_Advanced.markdown b/oldtests/Original/Inline_HTML_Advanced.markdown new file mode 100644 index 0000000000..3633f813f8 --- /dev/null +++ b/oldtests/Original/Inline_HTML_Advanced.markdown @@ -0,0 +1,30 @@ +Simple block on one line: + +
foo
+ +And nested without indentation: + +
+
+
+foo +
+
+
+
bar
+
+ +And with attributes: + +
+
+
+
+ +This was broken in 1.0.2b7: + +
+
+foo +
+
diff --git a/oldtests/Original/Inline_HTML_Simple.html b/oldtests/Original/Inline_HTML_Simple.html new file mode 100644 index 0000000000..923a18cf33 --- /dev/null +++ b/oldtests/Original/Inline_HTML_Simple.html @@ -0,0 +1,45 @@ +

Here's a simple block:

+
+ foo +
+

This should be a code block, though:

+
<div>
+    foo
+</div>
+
+

As should this:

+
<div>foo</div>
+
+

Now, nested:

+
+
+
+ foo +
+
+
+

This should just be an HTML comment:

+ +

Multiline:

+ +

Code block:

+
<!-- Comment -->
+
+

Just plain comment, with trailing spaces on the line:

+ +

Code:

+
<hr />
+
+

Hr's:

+
+
+
+
+
+
+
+
+
diff --git a/oldtests/Original/Inline_HTML_Simple.markdown b/oldtests/Original/Inline_HTML_Simple.markdown new file mode 100644 index 0000000000..14aa2dc272 --- /dev/null +++ b/oldtests/Original/Inline_HTML_Simple.markdown @@ -0,0 +1,69 @@ +Here's a simple block: + +
+ foo +
+ +This should be a code block, though: + +
+ foo +
+ +As should this: + +
foo
+ +Now, nested: + +
+
+
+ foo +
+
+
+ +This should just be an HTML comment: + + + +Multiline: + + + +Code block: + + + +Just plain comment, with trailing spaces on the line: + + + +Code: + +
+ +Hr's: + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/oldtests/Original/Inline_HTML_comments.html b/oldtests/Original/Inline_HTML_comments.html new file mode 100644 index 0000000000..ebc4818488 --- /dev/null +++ b/oldtests/Original/Inline_HTML_comments.html @@ -0,0 +1,8 @@ +

Paragraph one.

+ + +

Paragraph two.

+ +

The end.

diff --git a/oldtests/Original/Inline_HTML_comments.markdown b/oldtests/Original/Inline_HTML_comments.markdown new file mode 100644 index 0000000000..41d830d038 --- /dev/null +++ b/oldtests/Original/Inline_HTML_comments.markdown @@ -0,0 +1,13 @@ +Paragraph one. + + + + + +Paragraph two. + + + +The end. diff --git a/oldtests/Original/Links_inline_style.html b/oldtests/Original/Links_inline_style.html new file mode 100644 index 0000000000..feb463757d --- /dev/null +++ b/oldtests/Original/Links_inline_style.html @@ -0,0 +1,12 @@ +

Just a URL.

+

URL and title.

+

URL and title.

+

URL and title.

+

URL and title.

+

URL wrapped in angle brackets.

+

URL w/ angle brackets + title.

+

Empty.

+

With parens in the URL

+

(With outer parens and parens in url)

+

With parens in the URL

+

(With outer parens and parens in url)

diff --git a/oldtests/Original/Links_inline_style.markdown b/oldtests/Original/Links_inline_style.markdown new file mode 100644 index 0000000000..aba9658351 --- /dev/null +++ b/oldtests/Original/Links_inline_style.markdown @@ -0,0 +1,24 @@ +Just a [URL](/url/). + +[URL and title](/url/ "title"). + +[URL and title](/url/ "title preceded by two spaces"). + +[URL and title](/url/ "title preceded by a tab"). + +[URL and title](/url/ "title has spaces afterward" ). + +[URL wrapped in angle brackets](). + +[URL w/ angle brackets + title]( "Here's the title"). + +[Empty](). + +[With parens in the URL](http://en.wikipedia.org/wiki/WIMP_(computing)) + +(With outer parens and [parens in url](/foo(bar))) + + +[With parens in the URL](/foo(bar) "and a title") + +(With outer parens and [parens in url](/foo(bar) "and a title")) diff --git a/oldtests/Original/Links_reference_style.html b/oldtests/Original/Links_reference_style.html new file mode 100644 index 0000000000..6d78b96f31 --- /dev/null +++ b/oldtests/Original/Links_reference_style.html @@ -0,0 +1,28 @@ +

Foo bar.

+

Foo bar.

+

Foo bar.

+

With embedded [brackets].

+

Indented once.

+

Indented twice.

+

Indented thrice.

+

Indented [four][] times.

+
[four]: /url
+
+
+

this should work

+

So should this.

+

And this.

+

And this.

+

And this.

+

But not [that] [].

+

Nor [that][].

+

Nor [that].

+

[Something in brackets like this should work]

+

[Same with this.]

+

In this case, this points to something else.

+

Backslashing should suppress [this] and [this].

+
+

Here's one where the link +breaks across lines.

+

Here's another where the link +breaks across lines, but with a line-ending space.

diff --git a/oldtests/Original/Links_reference_style.markdown b/oldtests/Original/Links_reference_style.markdown new file mode 100644 index 0000000000..341ec88e3d --- /dev/null +++ b/oldtests/Original/Links_reference_style.markdown @@ -0,0 +1,71 @@ +Foo [bar] [1]. + +Foo [bar][1]. + +Foo [bar] +[1]. + +[1]: /url/ "Title" + + +With [embedded [brackets]] [b]. + + +Indented [once][]. + +Indented [twice][]. + +Indented [thrice][]. + +Indented [four][] times. + + [once]: /url + + [twice]: /url + + [thrice]: /url + + [four]: /url + + +[b]: /url/ + +* * * + +[this] [this] should work + +So should [this][this]. + +And [this] []. + +And [this][]. + +And [this]. + +But not [that] []. + +Nor [that][]. + +Nor [that]. + +[Something in brackets like [this][] should work] + +[Same with [this].] + +In this case, [this](/somethingelse/) points to something else. + +Backslashing should suppress \[this] and [this\]. + +[this]: foo + + +* * * + +Here's one where the [link +breaks] across lines. + +Here's another where the [link +breaks] across lines, but with a line-ending space. + + +[link breaks]: /url/ diff --git a/oldtests/Original/Links_shortcut_references.html b/oldtests/Original/Links_shortcut_references.html new file mode 100644 index 0000000000..8163ade538 --- /dev/null +++ b/oldtests/Original/Links_shortcut_references.html @@ -0,0 +1,6 @@ +

This is the simple case.

+

This one has a line +break.

+

This one has a line +break with a line-ending space.

+

this and the other

diff --git a/oldtests/Original/Links_shortcut_references.markdown b/oldtests/Original/Links_shortcut_references.markdown new file mode 100644 index 0000000000..8c44c98fee --- /dev/null +++ b/oldtests/Original/Links_shortcut_references.markdown @@ -0,0 +1,20 @@ +This is the [simple case]. + +[simple case]: /simple + + + +This one has a [line +break]. + +This one has a [line +break] with a line-ending space. + +[line break]: /foo + + +[this] [that] and the [other] + +[this]: /this +[that]: /that +[other]: /other diff --git a/oldtests/Original/Literal_quotes_in_titles.html b/oldtests/Original/Literal_quotes_in_titles.html new file mode 100644 index 0000000000..62e8641296 --- /dev/null +++ b/oldtests/Original/Literal_quotes_in_titles.html @@ -0,0 +1,2 @@ +

Foo bar.

+

Foo bar.

diff --git a/oldtests/Original/Literal_quotes_in_titles.markdown b/oldtests/Original/Literal_quotes_in_titles.markdown new file mode 100644 index 0000000000..29d0e4235b --- /dev/null +++ b/oldtests/Original/Literal_quotes_in_titles.markdown @@ -0,0 +1,7 @@ +Foo [bar][]. + +Foo [bar](/url/ "Title with "quotes" inside"). + + + [bar]: /url/ "Title with "quotes" inside" + diff --git a/oldtests/Original/Markdown_Documentation_Basics.html b/oldtests/Original/Markdown_Documentation_Basics.html new file mode 100644 index 0000000000..0dee67f4fe --- /dev/null +++ b/oldtests/Original/Markdown_Documentation_Basics.html @@ -0,0 +1,242 @@ +

Markdown: Basics

+ +

Getting the Gist of Markdown's Formatting Syntax

+

This page offers a brief overview of what it's like to use Markdown. +The syntax page provides complete, detailed documentation for +every feature, but Markdown should be very easy to pick up simply by +looking at a few examples of it in action. The examples on this page +are written in a before/after style, showing example syntax and the +HTML output produced by Markdown.

+

It's also helpful to simply try Markdown out; the Dingus is a +web application that allows you type your own Markdown-formatted text +and translate it to XHTML.

+

Note: This document is itself written using Markdown; you +can see the source for it by adding '.text' to the URL.

+

Paragraphs, Headers, Blockquotes

+

A paragraph is simply one or more consecutive lines of text, separated +by one or more blank lines. (A blank line is any line that looks like a +blank line -- a line containing nothing spaces or tabs is considered +blank.) Normal paragraphs should not be intended with spaces or tabs.

+

Markdown offers two styles of headers: Setext and atx. +Setext-style headers for <h1> and <h2> are created by +"underlining" with equal signs (=) and hyphens (-), respectively. +To create an atx-style header, you put 1-6 hash marks (#) at the +beginning of the line -- the number of hashes equals the resulting +HTML header level.

+

Blockquotes are indicated using email-style '>' angle brackets.

+

Markdown:

+
A First Level Header
+====================
+
+A Second Level Header
+---------------------
+
+Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.
+
+The quick brown fox jumped over the lazy
+dog's back.
+
+### Header 3
+
+> This is a blockquote.
+>
+> This is the second paragraph in the blockquote.
+>
+> ## This is an H2 in a blockquote
+
+

Output:

+
<h1>A First Level Header</h1>
+
+<h2>A Second Level Header</h2>
+
+<p>Now is the time for all good men to come to
+the aid of their country. This is just a
+regular paragraph.</p>
+
+<p>The quick brown fox jumped over the lazy
+dog's back.</p>
+
+<h3>Header 3</h3>
+
+<blockquote>
+    <p>This is a blockquote.</p>
+
+    <p>This is the second paragraph in the blockquote.</p>
+
+    <h2>This is an H2 in a blockquote</h2>
+</blockquote>
+
+

Phrase Emphasis

+

Markdown uses asterisks and underscores to indicate spans of emphasis.

+

Markdown:

+
Some of these words *are emphasized*.
+Some of these words _are emphasized also_.
+
+Use two asterisks for **strong emphasis**.
+Or, if you prefer, __use two underscores instead__.
+
+

Output:

+
<p>Some of these words <em>are emphasized</em>.
+Some of these words <em>are emphasized also</em>.</p>
+
+<p>Use two asterisks for <strong>strong emphasis</strong>.
+Or, if you prefer, <strong>use two underscores instead</strong>.</p>
+
+

Lists

+

Unordered (bulleted) lists use asterisks, pluses, and hyphens (*, ++, and -) as list markers. These three markers are +interchangable; this:

+
*   Candy.
+*   Gum.
+*   Booze.
+
+

this:

+
+   Candy.
++   Gum.
++   Booze.
+
+

and this:

+
-   Candy.
+-   Gum.
+-   Booze.
+
+

all produce the same output:

+
<ul>
+<li>Candy.</li>
+<li>Gum.</li>
+<li>Booze.</li>
+</ul>
+
+

Ordered (numbered) lists use regular numbers, followed by periods, as +list markers:

+
1.  Red
+2.  Green
+3.  Blue
+
+

Output:

+
<ol>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ol>
+
+

If you put blank lines between items, you'll get <p> tags for the +list item text. You can create multi-paragraph list items by indenting +the paragraphs by 4 spaces or 1 tab:

+
*   A list item.
+
+    With multiple paragraphs.
+
+*   Another item in the list.
+
+

Output:

+
<ul>
+<li><p>A list item.</p>
+<p>With multiple paragraphs.</p></li>
+<li><p>Another item in the list.</p></li>
+</ul>
+
+

Links

+

Markdown supports two styles for creating links: inline and +reference. With both styles, you use square brackets to delimit the +text you want to turn into a link.

+

Inline-style links use parentheses immediately after the link text. +For example:

+
This is an [example link](http://example.com/).
+
+

Output:

+
<p>This is an <a href="http://example.com/">
+example link</a>.</p>
+
+

Optionally, you may include a title attribute in the parentheses:

+
This is an [example link](http://example.com/ "With a Title").
+
+

Output:

+
<p>This is an <a href="http://example.com/" title="With a Title">
+example link</a>.</p>
+
+

Reference-style links allow you to refer to your links by names, which +you define elsewhere in your document:

+
I get 10 times more traffic from [Google][1] than from
+[Yahoo][2] or [MSN][3].
+
+[1]: http://google.com/        "Google"
+[2]: http://search.yahoo.com/  "Yahoo Search"
+[3]: http://search.msn.com/    "MSN Search"
+
+

Output:

+
<p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from <a href="http://search.yahoo.com/"
+title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
+title="MSN Search">MSN</a>.</p>
+
+

The title attribute is optional. Link names may contain letters, +numbers and spaces, but are not case sensitive:

+
I start my morning with a cup of coffee and
+[The New York Times][NY Times].
+
+[ny times]: http://www.nytimes.com/
+
+

Output:

+
<p>I start my morning with a cup of coffee and
+<a href="http://www.nytimes.com/">The New York Times</a>.</p>
+
+

Images

+

Image syntax is very much like link syntax.

+

Inline (titles are optional):

+
![alt text](/path/to/img.jpg "Title")
+
+

Reference-style:

+
![alt text][id]
+
+[id]: /path/to/img.jpg "Title"
+
+

Both of the above examples produce the same output:

+
<img src="/path/to/img.jpg" alt="alt text" title="Title" />
+
+

Code

+

In a regular paragraph, you can create code span by wrapping text in +backtick quotes. Any ampersands (&) and angle brackets (< or +>) will automatically be translated into HTML entities. This makes +it easy to use Markdown to write about HTML example code:

+
I strongly recommend against using any `<blink>` tags.
+
+I wish SmartyPants used named entities like `&mdash;`
+instead of decimal-encoded entites like `&#8212;`.
+
+

Output:

+
<p>I strongly recommend against using any
+<code>&lt;blink&gt;</code> tags.</p>
+
+<p>I wish SmartyPants used named entities like
+<code>&amp;mdash;</code> instead of decimal-encoded
+entites like <code>&amp;#8212;</code>.</p>
+
+

To specify an entire block of pre-formatted code, indent every line of +the block by 4 spaces or 1 tab. Just like with code spans, &, <, +and > characters will be escaped automatically.

+

Markdown:

+
If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:
+
+    <blockquote>
+        <p>For example.</p>
+    </blockquote>
+
+

Output:

+
<p>If you want your page to validate under XHTML 1.0 Strict,
+you've got to put paragraph tags in your blockquotes:</p>
+
+<pre><code>&lt;blockquote&gt;
+    &lt;p&gt;For example.&lt;/p&gt;
+&lt;/blockquote&gt;
+</code></pre>
+
diff --git a/oldtests/Original/Markdown_Documentation_Basics.markdown b/oldtests/Original/Markdown_Documentation_Basics.markdown new file mode 100644 index 0000000000..24eba65c5b --- /dev/null +++ b/oldtests/Original/Markdown_Documentation_Basics.markdown @@ -0,0 +1,306 @@ +Markdown: Basics +================ + + + + +Getting the Gist of Markdown's Formatting Syntax +------------------------------------------------ + +This page offers a brief overview of what it's like to use Markdown. +The [syntax page] [s] provides complete, detailed documentation for +every feature, but Markdown should be very easy to pick up simply by +looking at a few examples of it in action. The examples on this page +are written in a before/after style, showing example syntax and the +HTML output produced by Markdown. + +It's also helpful to simply try Markdown out; the [Dingus] [d] is a +web application that allows you type your own Markdown-formatted text +and translate it to XHTML. + +**Note:** This document is itself written using Markdown; you +can [see the source for it by adding '.text' to the URL] [src]. + + [s]: /projects/markdown/syntax "Markdown Syntax" + [d]: /projects/markdown/dingus "Markdown Dingus" + [src]: /projects/markdown/basics.text + + +## Paragraphs, Headers, Blockquotes ## + +A paragraph is simply one or more consecutive lines of text, separated +by one or more blank lines. (A blank line is any line that looks like a +blank line -- a line containing nothing spaces or tabs is considered +blank.) Normal paragraphs should not be intended with spaces or tabs. + +Markdown offers two styles of headers: *Setext* and *atx*. +Setext-style headers for `

` and `

` are created by +"underlining" with equal signs (`=`) and hyphens (`-`), respectively. +To create an atx-style header, you put 1-6 hash marks (`#`) at the +beginning of the line -- the number of hashes equals the resulting +HTML header level. + +Blockquotes are indicated using email-style '`>`' angle brackets. + +Markdown: + + A First Level Header + ==================== + + A Second Level Header + --------------------- + + Now is the time for all good men to come to + the aid of their country. This is just a + regular paragraph. + + The quick brown fox jumped over the lazy + dog's back. + + ### Header 3 + + > This is a blockquote. + > + > This is the second paragraph in the blockquote. + > + > ## This is an H2 in a blockquote + + +Output: + +

A First Level Header

+ +

A Second Level Header

+ +

Now is the time for all good men to come to + the aid of their country. This is just a + regular paragraph.

+ +

The quick brown fox jumped over the lazy + dog's back.

+ +

Header 3

+ +
+

This is a blockquote.

+ +

This is the second paragraph in the blockquote.

+ +

This is an H2 in a blockquote

+
+ + + +### Phrase Emphasis ### + +Markdown uses asterisks and underscores to indicate spans of emphasis. + +Markdown: + + Some of these words *are emphasized*. + Some of these words _are emphasized also_. + + Use two asterisks for **strong emphasis**. + Or, if you prefer, __use two underscores instead__. + +Output: + +

Some of these words are emphasized. + Some of these words are emphasized also.

+ +

Use two asterisks for strong emphasis. + Or, if you prefer, use two underscores instead.

+ + + +## Lists ## + +Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`, +`+`, and `-`) as list markers. These three markers are +interchangable; this: + + * Candy. + * Gum. + * Booze. + +this: + + + Candy. + + Gum. + + Booze. + +and this: + + - Candy. + - Gum. + - Booze. + +all produce the same output: + +
    +
  • Candy.
  • +
  • Gum.
  • +
  • Booze.
  • +
+ +Ordered (numbered) lists use regular numbers, followed by periods, as +list markers: + + 1. Red + 2. Green + 3. Blue + +Output: + +
    +
  1. Red
  2. +
  3. Green
  4. +
  5. Blue
  6. +
+ +If you put blank lines between items, you'll get `

` tags for the +list item text. You can create multi-paragraph list items by indenting +the paragraphs by 4 spaces or 1 tab: + + * A list item. + + With multiple paragraphs. + + * Another item in the list. + +Output: + +

    +
  • A list item.

    +

    With multiple paragraphs.

  • +
  • Another item in the list.

  • +
+ + + +### Links ### + +Markdown supports two styles for creating links: *inline* and +*reference*. With both styles, you use square brackets to delimit the +text you want to turn into a link. + +Inline-style links use parentheses immediately after the link text. +For example: + + This is an [example link](http://example.com/). + +Output: + +

This is an + example link.

+ +Optionally, you may include a title attribute in the parentheses: + + This is an [example link](http://example.com/ "With a Title"). + +Output: + +

This is an + example link.

+ +Reference-style links allow you to refer to your links by names, which +you define elsewhere in your document: + + I get 10 times more traffic from [Google][1] than from + [Yahoo][2] or [MSN][3]. + + [1]: http://google.com/ "Google" + [2]: http://search.yahoo.com/ "Yahoo Search" + [3]: http://search.msn.com/ "MSN Search" + +Output: + +

I get 10 times more traffic from Google than from Yahoo or MSN.

+ +The title attribute is optional. Link names may contain letters, +numbers and spaces, but are *not* case sensitive: + + I start my morning with a cup of coffee and + [The New York Times][NY Times]. + + [ny times]: http://www.nytimes.com/ + +Output: + +

I start my morning with a cup of coffee and + The New York Times.

+ + +### Images ### + +Image syntax is very much like link syntax. + +Inline (titles are optional): + + ![alt text](/path/to/img.jpg "Title") + +Reference-style: + + ![alt text][id] + + [id]: /path/to/img.jpg "Title" + +Both of the above examples produce the same output: + + alt text + + + +### Code ### + +In a regular paragraph, you can create code span by wrapping text in +backtick quotes. Any ampersands (`&`) and angle brackets (`<` or +`>`) will automatically be translated into HTML entities. This makes +it easy to use Markdown to write about HTML example code: + + I strongly recommend against using any `` tags. + + I wish SmartyPants used named entities like `—` + instead of decimal-encoded entites like `—`. + +Output: + +

I strongly recommend against using any + <blink> tags.

+ +

I wish SmartyPants used named entities like + &mdash; instead of decimal-encoded + entites like &#8212;.

+ + +To specify an entire block of pre-formatted code, indent every line of +the block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`, +and `>` characters will be escaped automatically. + +Markdown: + + If you want your page to validate under XHTML 1.0 Strict, + you've got to put paragraph tags in your blockquotes: + +
+

For example.

+
+ +Output: + +

If you want your page to validate under XHTML 1.0 Strict, + you've got to put paragraph tags in your blockquotes:

+ +
<blockquote>
+        <p>For example.</p>
+    </blockquote>
+    
diff --git a/oldtests/Original/Markdown_Documentation_Syntax.html b/oldtests/Original/Markdown_Documentation_Syntax.html new file mode 100644 index 0000000000..f379dcf8ba --- /dev/null +++ b/oldtests/Original/Markdown_Documentation_Syntax.html @@ -0,0 +1,708 @@ +

Markdown: Syntax

+ + +

Note: This document is itself written using Markdown; you +can see the source for it by adding '.text' to the URL.

+
+

Overview

+

Philosophy

+

Markdown is intended to be as easy-to-read and easy-to-write as is feasible.

+

Readability, however, is emphasized above all else. A Markdown-formatted +document should be publishable as-is, as plain text, without looking +like it's been marked up with tags or formatting instructions. While +Markdown's syntax has been influenced by several existing text-to-HTML +filters -- including Setext, atx, Textile, reStructuredText, +Grutatext, and EtText -- the single biggest source of +inspiration for Markdown's syntax is the format of plain text email.

+

To this end, Markdown's syntax is comprised entirely of punctuation +characters, which punctuation characters have been carefully chosen so +as to look like what they mean. E.g., asterisks around a word actually +look like *emphasis*. Markdown lists look like, well, lists. Even +blockquotes look like quoted passages of text, assuming you've ever +used email.

+

Inline HTML

+

Markdown's syntax is intended for one purpose: to be used as a +format for writing for the web.

+

Markdown is not a replacement for HTML, or even close to it. Its +syntax is very small, corresponding only to a very small subset of +HTML tags. The idea is not to create a syntax that makes it easier +to insert HTML tags. In my opinion, HTML tags are already easy to +insert. The idea for Markdown is to make it easy to read, write, and +edit prose. HTML is a publishing format; Markdown is a writing +format. Thus, Markdown's formatting syntax only addresses issues that +can be conveyed in plain text.

+

For any markup that is not covered by Markdown's syntax, you simply +use HTML itself. There's no need to preface it or delimit it to +indicate that you're switching from Markdown to HTML; you just use +the tags.

+

The only restrictions are that block-level HTML elements -- e.g. <div>, +<table>, <pre>, <p>, etc. -- must be separated from surrounding +content by blank lines, and the start and end tags of the block should +not be indented with tabs or spaces. Markdown is smart enough not +to add extra (unwanted) <p> tags around HTML block-level tags.

+

For example, to add an HTML table to a Markdown article:

+
This is a regular paragraph.
+
+<table>
+    <tr>
+        <td>Foo</td>
+    </tr>
+</table>
+
+This is another regular paragraph.
+
+

Note that Markdown formatting syntax is not processed within block-level +HTML tags. E.g., you can't use Markdown-style *emphasis* inside an +HTML block.

+

Span-level HTML tags -- e.g. <span>, <cite>, or <del> -- can be +used anywhere in a Markdown paragraph, list item, or header. If you +want, you can even use HTML tags instead of Markdown formatting; e.g. if +you'd prefer to use HTML <a> or <img> tags instead of Markdown's +link or image syntax, go right ahead.

+

Unlike block-level HTML tags, Markdown syntax is processed within +span-level tags.

+

Automatic Escaping for Special Characters

+

In HTML, there are two characters that demand special treatment: < +and &. Left angle brackets are used to start tags; ampersands are +used to denote HTML entities. If you want to use them as literal +characters, you must escape them as entities, e.g. &lt;, and +&amp;.

+

Ampersands in particular are bedeviling for web writers. If you want to +write about 'AT&T', you need to write 'AT&amp;T'. You even need to +escape ampersands within URLs. Thus, if you want to link to:

+
http://images.google.com/images?num=30&q=larry+bird
+
+

you need to encode the URL as:

+
http://images.google.com/images?num=30&amp;q=larry+bird
+
+

in your anchor tag href attribute. Needless to say, this is easy to +forget, and is probably the single most common source of HTML validation +errors in otherwise well-marked-up web sites.

+

Markdown allows you to use these characters naturally, taking care of +all the necessary escaping for you. If you use an ampersand as part of +an HTML entity, it remains unchanged; otherwise it will be translated +into &amp;.

+

So, if you want to include a copyright symbol in your article, you can write:

+
&copy;
+
+

and Markdown will leave it alone. But if you write:

+
AT&T
+
+

Markdown will translate it to:

+
AT&amp;T
+
+

Similarly, because Markdown supports inline HTML, if you use +angle brackets as delimiters for HTML tags, Markdown will treat them as +such. But if you write:

+
4 < 5
+
+

Markdown will translate it to:

+
4 &lt; 5
+
+

However, inside Markdown code spans and blocks, angle brackets and +ampersands are always encoded automatically. This makes it easy to use +Markdown to write about HTML code. (As opposed to raw HTML, which is a +terrible format for writing about HTML syntax, because every single < +and & in your example code needs to be escaped.)

+
+

Block Elements

+

Paragraphs and Line Breaks

+

A paragraph is simply one or more consecutive lines of text, separated +by one or more blank lines. (A blank line is any line that looks like a +blank line -- a line containing nothing but spaces or tabs is considered +blank.) Normal paragraphs should not be intended with spaces or tabs.

+

The implication of the "one or more consecutive lines of text" rule is +that Markdown supports "hard-wrapped" text paragraphs. This differs +significantly from most other text-to-HTML formatters (including Movable +Type's "Convert Line Breaks" option) which translate every line break +character in a paragraph into a <br /> tag.

+

When you do want to insert a <br /> break tag using Markdown, you +end a line with two or more spaces, then type return.

+

Yes, this takes a tad more effort to create a <br />, but a simplistic +"every line break is a <br />" rule wouldn't work for Markdown. +Markdown's email-style blockquoting and multi-paragraph list items +work best -- and look better -- when you format them with hard breaks.

+ +

Markdown supports two styles of headers, Setext and atx.

+

Setext-style headers are "underlined" using equal signs (for first-level +headers) and dashes (for second-level headers). For example:

+
This is an H1
+=============
+
+This is an H2
+-------------
+
+

Any number of underlining ='s or -'s will work.

+

Atx-style headers use 1-6 hash characters at the start of the line, +corresponding to header levels 1-6. For example:

+
# This is an H1
+
+## This is an H2
+
+###### This is an H6
+
+

Optionally, you may "close" atx-style headers. This is purely +cosmetic -- you can use this if you think it looks better. The +closing hashes don't even need to match the number of hashes +used to open the header. (The number of opening hashes +determines the header level.) :

+
# This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+
+

Blockquotes

+

Markdown uses email-style > characters for blockquoting. If you're +familiar with quoting passages of text in an email message, then you +know how to create a blockquote in Markdown. It looks best if you hard +wrap the text and put a > before every line:

+
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+> 
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+
+

Markdown allows you to be lazy and only put the > before the first +line of a hard-wrapped paragraph:

+
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+
+

Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by +adding additional levels of >:

+
> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+

Blockquotes can contain other Markdown elements, including headers, lists, +and code blocks:

+
> ## This is a header.
+> 
+> 1.   This is the first list item.
+> 2.   This is the second list item.
+> 
+> Here's some example code:
+> 
+>     return shell_exec("echo $input | $markdown_script");
+
+

Any decent text editor should make email-style quoting easy. For +example, with BBEdit, you can make a selection and choose Increase +Quote Level from the Text menu.

+

Lists

+

Markdown supports ordered (numbered) and unordered (bulleted) lists.

+

Unordered lists use asterisks, pluses, and hyphens -- interchangably +-- as list markers:

+
*   Red
+*   Green
+*   Blue
+
+

is equivalent to:

+
+   Red
++   Green
++   Blue
+
+

and:

+
-   Red
+-   Green
+-   Blue
+
+

Ordered lists use numbers followed by periods:

+
1.  Bird
+2.  McHale
+3.  Parish
+
+

It's important to note that the actual numbers you use to mark the +list have no effect on the HTML output Markdown produces. The HTML +Markdown produces from the above list is:

+
<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+
+

If you instead wrote the list in Markdown like this:

+
1.  Bird
+1.  McHale
+1.  Parish
+
+

or even:

+
3. Bird
+1. McHale
+8. Parish
+
+

you'd get the exact same HTML output. The point is, if you want to, +you can use ordinal numbers in your ordered Markdown lists, so that +the numbers in your source match the numbers in your published HTML. +But if you want to be lazy, you don't have to.

+

If you do use lazy list numbering, however, you should still start the +list with the number 1. At some point in the future, Markdown may support +starting ordered lists at an arbitrary number.

+

List markers typically start at the left margin, but may be indented by +up to three spaces. List markers must be followed by one or more spaces +or a tab.

+

To make lists look nice, you can wrap items with hanging indents:

+
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+    viverra nec, fringilla in, laoreet vitae, risus.
+*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+    Suspendisse id sem consectetuer libero luctus adipiscing.
+
+

But if you want to be lazy, you don't have to:

+
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+
+

If list items are separated by blank lines, Markdown will wrap the +items in <p> tags in the HTML output. For example, this input:

+
*   Bird
+*   Magic
+
+

will turn into:

+
<ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+
+

But this:

+
*   Bird
+
+*   Magic
+
+

will turn into:

+
<ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+
+

List items may consist of multiple paragraphs. Each subsequent +paragraph in a list item must be intended by either 4 spaces +or one tab:

+
1.  This is a list item with two paragraphs. Lorem ipsum dolor
+    sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+    mi posuere lectus.
+
+    Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+    sit amet velit.
+
+2.  Suspendisse id sem consectetuer libero luctus adipiscing.
+
+

It looks nice if you indent every line of the subsequent +paragraphs, but here again, Markdown will allow you to be +lazy:

+
*   This is a list item with two paragraphs.
+
+    This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+*   Another item in the same list.
+
+

To put a blockquote within a list item, the blockquote's > +delimiters need to be indented:

+
*   A list item with a blockquote:
+
+    > This is a blockquote
+    > inside a list item.
+
+

To put a code block within a list item, the code block needs +to be indented twice -- 8 spaces or two tabs:

+
*   A list item with a code block:
+
+        <code goes here>
+
+

It's worth noting that it's possible to trigger an ordered list by +accident, by writing something like this:

+
1986. What a great season.
+
+

In other words, a number-period-space sequence at the beginning of a +line. To avoid this, you can backslash-escape the period:

+
1986\. What a great season.
+
+

Code Blocks

+

Pre-formatted code blocks are used for writing about programming or +markup source code. Rather than forming normal paragraphs, the lines +of a code block are interpreted literally. Markdown wraps a code block +in both <pre> and <code> tags.

+

To produce a code block in Markdown, simply indent every line of the +block by at least 4 spaces or 1 tab. For example, given this input:

+
This is a normal paragraph:
+
+    This is a code block.
+
+

Markdown will generate:

+
<p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+
+

One level of indentation -- 4 spaces or 1 tab -- is removed from each +line of the code block. For example, this:

+
Here is an example of AppleScript:
+
+    tell application "Foo"
+        beep
+    end tell
+
+

will turn into:

+
<p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+    beep
+end tell
+</code></pre>
+
+

A code block continues until it reaches a line that is not indented +(or the end of the article).

+

Within a code block, ampersands (&) and angle brackets (< and >) +are automatically converted into HTML entities. This makes it very +easy to include example HTML source code using Markdown -- just paste +it and indent it, and Markdown will handle the hassle of encoding the +ampersands and angle brackets. For example, this:

+
    <div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+
+

will turn into:

+
<pre><code>&lt;div class="footer"&gt;
+    &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+
+

Regular Markdown syntax is not processed within code blocks. E.g., +asterisks are just literal asterisks within a code block. This means +it's also easy to use Markdown to write about Markdown's own syntax.

+

Horizontal Rules

+

You can produce a horizontal rule tag (<hr />) by placing three or +more hyphens, asterisks, or underscores on a line by themselves. If you +wish, you may use spaces between the hyphens or asterisks. Each of the +following lines will produce a horizontal rule:

+
* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+
+_ _ _
+
+
+

Span Elements

+ +

Markdown supports two style of links: inline and reference.

+

In both styles, the link text is delimited by [square brackets].

+

To create an inline link, use a set of regular parentheses immediately +after the link text's closing square bracket. Inside the parentheses, +put the URL where you want the link to point, along with an optional +title for the link, surrounded in quotes. For example:

+
This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+
+

Will produce:

+
<p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+
+

If you're referring to a local resource on the same server, you can +use relative paths:

+
See my [About](/about/) page for details.
+
+

Reference-style links use a second set of square brackets, inside +which you place a label of your choosing to identify the link:

+
This is [an example][id] reference-style link.
+
+

You can optionally use a space to separate the sets of brackets:

+
This is [an example] [id] reference-style link.
+
+

Then, anywhere in the document, you define your link label like this, +on a line by itself:

+
[id]: http://example.com/  "Optional Title Here"
+
+

That is:

+
    +
  • Square brackets containing the link identifier (optionally +indented from the left margin using up to three spaces);
  • +
  • followed by a colon;
  • +
  • followed by one or more spaces (or tabs);
  • +
  • followed by the URL for the link;
  • +
  • optionally followed by a title attribute for the link, enclosed +in double or single quotes.
  • +
+

The link URL may, optionally, be surrounded by angle brackets:

+
[id]: <http://example.com/>  "Optional Title Here"
+
+

You can put the title attribute on the next line and use extra spaces +or tabs for padding, which tends to look better with longer URLs:

+
[id]: http://example.com/longish/path/to/resource/here
+    "Optional Title Here"
+
+

Link definitions are only used for creating links during Markdown +processing, and are stripped from your document in the HTML output.

+

Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are not case sensitive. E.g. these two links:

+
[link text][a]
+[link text][A]
+
+

are equivalent.

+

The implicit link name shortcut allows you to omit the name of the +link, in which case the link text itself is used as the name. +Just use an empty set of square brackets -- e.g., to link the word +"Google" to the google.com web site, you could simply write:

+
[Google][]
+
+

And then define the link:

+
[Google]: http://google.com/
+
+

Because link names may contain spaces, this shortcut even works for +multiple words in the link text:

+
Visit [Daring Fireball][] for more information.
+
+

And then define the link:

+
[Daring Fireball]: http://daringfireball.net/
+
+

Link definitions can be placed anywhere in your Markdown document. I +tend to put them immediately after each paragraph in which they're +used, but if you want, you can put them all at the end of your +document, sort of like footnotes.

+

Here's an example of reference links in action:

+
I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+  [1]: http://google.com/        "Google"
+  [2]: http://search.yahoo.com/  "Yahoo Search"
+  [3]: http://search.msn.com/    "MSN Search"
+
+

Using the implicit link name shortcut, you could instead write:

+
I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+  [google]: http://google.com/        "Google"
+  [yahoo]:  http://search.yahoo.com/  "Yahoo Search"
+  [msn]:    http://search.msn.com/    "MSN Search"
+
+

Both of the above examples will produce the following HTML output:

+
<p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+
+

For comparison, here is the same paragraph written using +Markdown's inline link style:

+
I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+
+

The point of reference-style links is not that they're easier to +write. The point is that with reference-style links, your document +source is vastly more readable. Compare the above examples: using +reference-style links, the paragraph itself is only 81 characters +long; with inline-style links, it's 176 characters; and as raw HTML, +it's 234 characters. In the raw HTML, there's more markup than there +is text.

+

With Markdown's reference-style links, a source document much more +closely resembles the final output, as rendered in a browser. By +allowing you to move the markup-related metadata out of the paragraph, +you can add links without interrupting the narrative flow of your +prose.

+

Emphasis

+

Markdown treats asterisks (*) and underscores (_) as indicators of +emphasis. Text wrapped with one * or _ will be wrapped with an +HTML <em> tag; double *'s or _'s will be wrapped with an HTML +<strong> tag. E.g., this input:

+
*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+
+

will produce:

+
<em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+
+

You can use whichever style you prefer; the lone restriction is that +the same character must be used to open and close an emphasis span.

+

Emphasis can be used in the middle of a word:

+
un*fucking*believable
+
+

But if you surround an * or _ with spaces, it'll be treated as a +literal asterisk or underscore.

+

To produce a literal asterisk or underscore at a position where it +would otherwise be used as an emphasis delimiter, you can backslash +escape it:

+
\*this text is surrounded by literal asterisks\*
+
+

Code

+

To indicate a span of code, wrap it with backtick quotes (`). +Unlike a pre-formatted code block, a code span indicates code within a +normal paragraph. For example:

+
Use the `printf()` function.
+
+

will produce:

+
<p>Use the <code>printf()</code> function.</p>
+
+

To include a literal backtick character within a code span, you can use +multiple backticks as the opening and closing delimiters:

+
``There is a literal backtick (`) here.``
+
+

which will produce this:

+
<p><code>There is a literal backtick (`) here.</code></p>
+
+

The backtick delimiters surrounding a code span may include spaces -- +one after the opening, one before the closing. This allows you to place +literal backtick characters at the beginning or end of a code span:

+
A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+
+

will produce:

+
<p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+
+

With a code span, ampersands and angle brackets are encoded as HTML +entities automatically, which makes it easy to include example HTML +tags. Markdown will turn this:

+
Please don't use any `<blink>` tags.
+
+

into:

+
<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+
+

You can write this:

+
`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+
+

to produce:

+
<p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+
+

Images

+

Admittedly, it's fairly difficult to devise a "natural" syntax for +placing images into a plain text document format.

+

Markdown uses an image syntax that is intended to resemble the syntax +for links, allowing for two styles: inline and reference.

+

Inline image syntax looks like this:

+
![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+
+

That is:

+
    +
  • An exclamation mark: !;
  • +
  • followed by a set of square brackets, containing the alt +attribute text for the image;
  • +
  • followed by a set of parentheses, containing the URL or path to +the image, and an optional title attribute enclosed in double +or single quotes.
  • +
+

Reference-style image syntax looks like this:

+
![Alt text][id]
+
+

Where "id" is the name of a defined image reference. Image references +are defined using syntax identical to link references:

+
[id]: url/to/image  "Optional title attribute"
+
+

As of this writing, Markdown has no syntax for specifying the +dimensions of an image; if this is important to you, you can simply +use regular HTML <img> tags.

+
+

Miscellaneous

+ +

Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:

+
<http://example.com/>
+
+

Markdown will turn this into:

+
<a href="http://example.com/">http://example.com/</a>
+
+

Automatic links for email addresses work similarly, except that +Markdown will also perform a bit of randomized decimal and hex +entity-encoding to help obscure your address from address-harvesting +spambots. For example, Markdown will turn this:

+
<address@example.com>
+
+

into something like this:

+
<a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+
+

which will render in a browser as a clickable link to "address@example.com".

+

(This sort of entity-encoding trick will indeed fool many, if not +most, address-harvesting bots, but it definitely won't fool all of +them. It's better than nothing, but an address published in this way +will probably eventually start receiving spam.)

+

Backslash Escapes

+

Markdown allows you to use backslash escapes to generate literal +characters which would otherwise have special meaning in Markdown's +formatting syntax. For example, if you wanted to surround a word with +literal asterisks (instead of an HTML <em> tag), you can backslashes +before the asterisks, like this:

+
\*literal asterisks\*
+
+

Markdown provides backslash escapes for the following characters:

+
\   backslash
+`   backtick
+*   asterisk
+_   underscore
+{}  curly braces
+[]  square brackets
+()  parentheses
+#   hash mark
++   plus sign
+-   minus sign (hyphen)
+.   dot
+!   exclamation mark
+
diff --git a/oldtests/Original/Markdown_Documentation_Syntax.markdown b/oldtests/Original/Markdown_Documentation_Syntax.markdown new file mode 100644 index 0000000000..57360a16c8 --- /dev/null +++ b/oldtests/Original/Markdown_Documentation_Syntax.markdown @@ -0,0 +1,888 @@ +Markdown: Syntax +================ + + + + +* [Overview](#overview) + * [Philosophy](#philosophy) + * [Inline HTML](#html) + * [Automatic Escaping for Special Characters](#autoescape) +* [Block Elements](#block) + * [Paragraphs and Line Breaks](#p) + * [Headers](#header) + * [Blockquotes](#blockquote) + * [Lists](#list) + * [Code Blocks](#precode) + * [Horizontal Rules](#hr) +* [Span Elements](#span) + * [Links](#link) + * [Emphasis](#em) + * [Code](#code) + * [Images](#img) +* [Miscellaneous](#misc) + * [Backslash Escapes](#backslash) + * [Automatic Links](#autolink) + + +**Note:** This document is itself written using Markdown; you +can [see the source for it by adding '.text' to the URL][src]. + + [src]: /projects/markdown/syntax.text + +* * * + +

Overview

+ +

Philosophy

+ +Markdown is intended to be as easy-to-read and easy-to-write as is feasible. + +Readability, however, is emphasized above all else. A Markdown-formatted +document should be publishable as-is, as plain text, without looking +like it's been marked up with tags or formatting instructions. While +Markdown's syntax has been influenced by several existing text-to-HTML +filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4], +[Grutatext] [5], and [EtText] [6] -- the single biggest source of +inspiration for Markdown's syntax is the format of plain text email. + + [1]: http://docutils.sourceforge.net/mirror/setext.html + [2]: http://www.aaronsw.com/2002/atx/ + [3]: http://textism.com/tools/textile/ + [4]: http://docutils.sourceforge.net/rst.html + [5]: http://www.triptico.com/software/grutatxt.html + [6]: http://ettext.taint.org/doc/ + +To this end, Markdown's syntax is comprised entirely of punctuation +characters, which punctuation characters have been carefully chosen so +as to look like what they mean. E.g., asterisks around a word actually +look like \*emphasis\*. Markdown lists look like, well, lists. Even +blockquotes look like quoted passages of text, assuming you've ever +used email. + + + +

Inline HTML

+ +Markdown's syntax is intended for one purpose: to be used as a +format for *writing* for the web. + +Markdown is not a replacement for HTML, or even close to it. Its +syntax is very small, corresponding only to a very small subset of +HTML tags. The idea is *not* to create a syntax that makes it easier +to insert HTML tags. In my opinion, HTML tags are already easy to +insert. The idea for Markdown is to make it easy to read, write, and +edit prose. HTML is a *publishing* format; Markdown is a *writing* +format. Thus, Markdown's formatting syntax only addresses issues that +can be conveyed in plain text. + +For any markup that is not covered by Markdown's syntax, you simply +use HTML itself. There's no need to preface it or delimit it to +indicate that you're switching from Markdown to HTML; you just use +the tags. + +The only restrictions are that block-level HTML elements -- e.g. `
`, +`
`, `
`, `

`, etc. -- must be separated from surrounding +content by blank lines, and the start and end tags of the block should +not be indented with tabs or spaces. Markdown is smart enough not +to add extra (unwanted) `

` tags around HTML block-level tags. + +For example, to add an HTML table to a Markdown article: + + This is a regular paragraph. + +

+ + + +
Foo
+ + This is another regular paragraph. + +Note that Markdown formatting syntax is not processed within block-level +HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an +HTML block. + +Span-level HTML tags -- e.g. ``, ``, or `` -- can be +used anywhere in a Markdown paragraph, list item, or header. If you +want, you can even use HTML tags instead of Markdown formatting; e.g. if +you'd prefer to use HTML `` or `` tags instead of Markdown's +link or image syntax, go right ahead. + +Unlike block-level HTML tags, Markdown syntax *is* processed within +span-level tags. + + +

Automatic Escaping for Special Characters

+ +In HTML, there are two characters that demand special treatment: `<` +and `&`. Left angle brackets are used to start tags; ampersands are +used to denote HTML entities. If you want to use them as literal +characters, you must escape them as entities, e.g. `<`, and +`&`. + +Ampersands in particular are bedeviling for web writers. If you want to +write about 'AT&T', you need to write '`AT&T`'. You even need to +escape ampersands within URLs. Thus, if you want to link to: + + http://images.google.com/images?num=30&q=larry+bird + +you need to encode the URL as: + + http://images.google.com/images?num=30&q=larry+bird + +in your anchor tag `href` attribute. Needless to say, this is easy to +forget, and is probably the single most common source of HTML validation +errors in otherwise well-marked-up web sites. + +Markdown allows you to use these characters naturally, taking care of +all the necessary escaping for you. If you use an ampersand as part of +an HTML entity, it remains unchanged; otherwise it will be translated +into `&`. + +So, if you want to include a copyright symbol in your article, you can write: + + © + +and Markdown will leave it alone. But if you write: + + AT&T + +Markdown will translate it to: + + AT&T + +Similarly, because Markdown supports [inline HTML](#html), if you use +angle brackets as delimiters for HTML tags, Markdown will treat them as +such. But if you write: + + 4 < 5 + +Markdown will translate it to: + + 4 < 5 + +However, inside Markdown code spans and blocks, angle brackets and +ampersands are *always* encoded automatically. This makes it easy to use +Markdown to write about HTML code. (As opposed to raw HTML, which is a +terrible format for writing about HTML syntax, because every single `<` +and `&` in your example code needs to be escaped.) + + +* * * + + +

Block Elements

+ + +

Paragraphs and Line Breaks

+ +A paragraph is simply one or more consecutive lines of text, separated +by one or more blank lines. (A blank line is any line that looks like a +blank line -- a line containing nothing but spaces or tabs is considered +blank.) Normal paragraphs should not be intended with spaces or tabs. + +The implication of the "one or more consecutive lines of text" rule is +that Markdown supports "hard-wrapped" text paragraphs. This differs +significantly from most other text-to-HTML formatters (including Movable +Type's "Convert Line Breaks" option) which translate every line break +character in a paragraph into a `
` tag. + +When you *do* want to insert a `
` break tag using Markdown, you +end a line with two or more spaces, then type return. + +Yes, this takes a tad more effort to create a `
`, but a simplistic +"every line break is a `
`" rule wouldn't work for Markdown. +Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l] +work best -- and look better -- when you format them with hard breaks. + + [bq]: #blockquote + [l]: #list + + + + + +Markdown supports two styles of headers, [Setext] [1] and [atx] [2]. + +Setext-style headers are "underlined" using equal signs (for first-level +headers) and dashes (for second-level headers). For example: + + This is an H1 + ============= + + This is an H2 + ------------- + +Any number of underlining `=`'s or `-`'s will work. + +Atx-style headers use 1-6 hash characters at the start of the line, +corresponding to header levels 1-6. For example: + + # This is an H1 + + ## This is an H2 + + ###### This is an H6 + +Optionally, you may "close" atx-style headers. This is purely +cosmetic -- you can use this if you think it looks better. The +closing hashes don't even need to match the number of hashes +used to open the header. (The number of opening hashes +determines the header level.) : + + # This is an H1 # + + ## This is an H2 ## + + ### This is an H3 ###### + + +

Blockquotes

+ +Markdown uses email-style `>` characters for blockquoting. If you're +familiar with quoting passages of text in an email message, then you +know how to create a blockquote in Markdown. It looks best if you hard +wrap the text and put a `>` before every line: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + > + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + > id sem consectetuer libero luctus adipiscing. + +Markdown allows you to be lazy and only put the `>` before the first +line of a hard-wrapped paragraph: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + id sem consectetuer libero luctus adipiscing. + +Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by +adding additional levels of `>`: + + > This is the first level of quoting. + > + > > This is nested blockquote. + > + > Back to the first level. + +Blockquotes can contain other Markdown elements, including headers, lists, +and code blocks: + + > ## This is a header. + > + > 1. This is the first list item. + > 2. This is the second list item. + > + > Here's some example code: + > + > return shell_exec("echo $input | $markdown_script"); + +Any decent text editor should make email-style quoting easy. For +example, with BBEdit, you can make a selection and choose Increase +Quote Level from the Text menu. + + +

Lists

+ +Markdown supports ordered (numbered) and unordered (bulleted) lists. + +Unordered lists use asterisks, pluses, and hyphens -- interchangably +-- as list markers: + + * Red + * Green + * Blue + +is equivalent to: + + + Red + + Green + + Blue + +and: + + - Red + - Green + - Blue + +Ordered lists use numbers followed by periods: + + 1. Bird + 2. McHale + 3. Parish + +It's important to note that the actual numbers you use to mark the +list have no effect on the HTML output Markdown produces. The HTML +Markdown produces from the above list is: + +
    +
  1. Bird
  2. +
  3. McHale
  4. +
  5. Parish
  6. +
+ +If you instead wrote the list in Markdown like this: + + 1. Bird + 1. McHale + 1. Parish + +or even: + + 3. Bird + 1. McHale + 8. Parish + +you'd get the exact same HTML output. The point is, if you want to, +you can use ordinal numbers in your ordered Markdown lists, so that +the numbers in your source match the numbers in your published HTML. +But if you want to be lazy, you don't have to. + +If you do use lazy list numbering, however, you should still start the +list with the number 1. At some point in the future, Markdown may support +starting ordered lists at an arbitrary number. + +List markers typically start at the left margin, but may be indented by +up to three spaces. List markers must be followed by one or more spaces +or a tab. + +To make lists look nice, you can wrap items with hanging indents: + + * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. + Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, + viverra nec, fringilla in, laoreet vitae, risus. + * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. + Suspendisse id sem consectetuer libero luctus adipiscing. + +But if you want to be lazy, you don't have to: + + * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. + Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, + viverra nec, fringilla in, laoreet vitae, risus. + * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. + Suspendisse id sem consectetuer libero luctus adipiscing. + +If list items are separated by blank lines, Markdown will wrap the +items in `

` tags in the HTML output. For example, this input: + + * Bird + * Magic + +will turn into: + +

    +
  • Bird
  • +
  • Magic
  • +
+ +But this: + + * Bird + + * Magic + +will turn into: + +
    +
  • Bird

  • +
  • Magic

  • +
+ +List items may consist of multiple paragraphs. Each subsequent +paragraph in a list item must be intended by either 4 spaces +or one tab: + + 1. This is a list item with two paragraphs. Lorem ipsum dolor + sit amet, consectetuer adipiscing elit. Aliquam hendrerit + mi posuere lectus. + + Vestibulum enim wisi, viverra nec, fringilla in, laoreet + vitae, risus. Donec sit amet nisl. Aliquam semper ipsum + sit amet velit. + + 2. Suspendisse id sem consectetuer libero luctus adipiscing. + +It looks nice if you indent every line of the subsequent +paragraphs, but here again, Markdown will allow you to be +lazy: + + * This is a list item with two paragraphs. + + This is the second paragraph in the list item. You're + only required to indent the first line. Lorem ipsum dolor + sit amet, consectetuer adipiscing elit. + + * Another item in the same list. + +To put a blockquote within a list item, the blockquote's `>` +delimiters need to be indented: + + * A list item with a blockquote: + + > This is a blockquote + > inside a list item. + +To put a code block within a list item, the code block needs +to be indented *twice* -- 8 spaces or two tabs: + + * A list item with a code block: + + + + +It's worth noting that it's possible to trigger an ordered list by +accident, by writing something like this: + + 1986. What a great season. + +In other words, a *number-period-space* sequence at the beginning of a +line. To avoid this, you can backslash-escape the period: + + 1986\. What a great season. + + + +

Code Blocks

+ +Pre-formatted code blocks are used for writing about programming or +markup source code. Rather than forming normal paragraphs, the lines +of a code block are interpreted literally. Markdown wraps a code block +in both `
` and `` tags.
+
+To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:
+
+    This is a normal paragraph:
+
+        This is a code block.
+
+Markdown will generate:
+
+    

This is a normal paragraph:

+ +
This is a code block.
+    
+ +One level of indentation -- 4 spaces or 1 tab -- is removed from each +line of the code block. For example, this: + + Here is an example of AppleScript: + + tell application "Foo" + beep + end tell + +will turn into: + +

Here is an example of AppleScript:

+ +
tell application "Foo"
+        beep
+    end tell
+    
+ +A code block continues until it reaches a line that is not indented +(or the end of the article). + +Within a code block, ampersands (`&`) and angle brackets (`<` and `>`) +are automatically converted into HTML entities. This makes it very +easy to include example HTML source code using Markdown -- just paste +it and indent it, and Markdown will handle the hassle of encoding the +ampersands and angle brackets. For example, this: + + + +will turn into: + +
<div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+    
+ +Regular Markdown syntax is not processed within code blocks. E.g., +asterisks are just literal asterisks within a code block. This means +it's also easy to use Markdown to write about Markdown's own syntax. + + + +

Horizontal Rules

+ +You can produce a horizontal rule tag (`
`) by placing three or +more hyphens, asterisks, or underscores on a line by themselves. If you +wish, you may use spaces between the hyphens or asterisks. Each of the +following lines will produce a horizontal rule: + + * * * + + *** + + ***** + + - - - + + --------------------------------------- + + _ _ _ + + +* * * + +

Span Elements

+ + + +Markdown supports two style of links: *inline* and *reference*. + +In both styles, the link text is delimited by [square brackets]. + +To create an inline link, use a set of regular parentheses immediately +after the link text's closing square bracket. Inside the parentheses, +put the URL where you want the link to point, along with an *optional* +title for the link, surrounded in quotes. For example: + + This is [an example](http://example.com/ "Title") inline link. + + [This link](http://example.net/) has no title attribute. + +Will produce: + +

This is + an example inline link.

+ +

This link has no + title attribute.

+ +If you're referring to a local resource on the same server, you can +use relative paths: + + See my [About](/about/) page for details. + +Reference-style links use a second set of square brackets, inside +which you place a label of your choosing to identify the link: + + This is [an example][id] reference-style link. + +You can optionally use a space to separate the sets of brackets: + + This is [an example] [id] reference-style link. + +Then, anywhere in the document, you define your link label like this, +on a line by itself: + + [id]: http://example.com/ "Optional Title Here" + +That is: + +* Square brackets containing the link identifier (optionally + indented from the left margin using up to three spaces); +* followed by a colon; +* followed by one or more spaces (or tabs); +* followed by the URL for the link; +* optionally followed by a title attribute for the link, enclosed + in double or single quotes. + +The link URL may, optionally, be surrounded by angle brackets: + + [id]: "Optional Title Here" + +You can put the title attribute on the next line and use extra spaces +or tabs for padding, which tends to look better with longer URLs: + + [id]: http://example.com/longish/path/to/resource/here + "Optional Title Here" + +Link definitions are only used for creating links during Markdown +processing, and are stripped from your document in the HTML output. + +Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links: + + [link text][a] + [link text][A] + +are equivalent. + +The *implicit link name* shortcut allows you to omit the name of the +link, in which case the link text itself is used as the name. +Just use an empty set of square brackets -- e.g., to link the word +"Google" to the google.com web site, you could simply write: + + [Google][] + +And then define the link: + + [Google]: http://google.com/ + +Because link names may contain spaces, this shortcut even works for +multiple words in the link text: + + Visit [Daring Fireball][] for more information. + +And then define the link: + + [Daring Fireball]: http://daringfireball.net/ + +Link definitions can be placed anywhere in your Markdown document. I +tend to put them immediately after each paragraph in which they're +used, but if you want, you can put them all at the end of your +document, sort of like footnotes. + +Here's an example of reference links in action: + + I get 10 times more traffic from [Google] [1] than from + [Yahoo] [2] or [MSN] [3]. + + [1]: http://google.com/ "Google" + [2]: http://search.yahoo.com/ "Yahoo Search" + [3]: http://search.msn.com/ "MSN Search" + +Using the implicit link name shortcut, you could instead write: + + I get 10 times more traffic from [Google][] than from + [Yahoo][] or [MSN][]. + + [google]: http://google.com/ "Google" + [yahoo]: http://search.yahoo.com/ "Yahoo Search" + [msn]: http://search.msn.com/ "MSN Search" + +Both of the above examples will produce the following HTML output: + +

I get 10 times more traffic from Google than from + Yahoo + or MSN.

+ +For comparison, here is the same paragraph written using +Markdown's inline link style: + + I get 10 times more traffic from [Google](http://google.com/ "Google") + than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or + [MSN](http://search.msn.com/ "MSN Search"). + +The point of reference-style links is not that they're easier to +write. The point is that with reference-style links, your document +source is vastly more readable. Compare the above examples: using +reference-style links, the paragraph itself is only 81 characters +long; with inline-style links, it's 176 characters; and as raw HTML, +it's 234 characters. In the raw HTML, there's more markup than there +is text. + +With Markdown's reference-style links, a source document much more +closely resembles the final output, as rendered in a browser. By +allowing you to move the markup-related metadata out of the paragraph, +you can add links without interrupting the narrative flow of your +prose. + + +

Emphasis

+ +Markdown treats asterisks (`*`) and underscores (`_`) as indicators of +emphasis. Text wrapped with one `*` or `_` will be wrapped with an +HTML `` tag; double `*`'s or `_`'s will be wrapped with an HTML +`` tag. E.g., this input: + + *single asterisks* + + _single underscores_ + + **double asterisks** + + __double underscores__ + +will produce: + + single asterisks + + single underscores + + double asterisks + + double underscores + +You can use whichever style you prefer; the lone restriction is that +the same character must be used to open and close an emphasis span. + +Emphasis can be used in the middle of a word: + + un*fucking*believable + +But if you surround an `*` or `_` with spaces, it'll be treated as a +literal asterisk or underscore. + +To produce a literal asterisk or underscore at a position where it +would otherwise be used as an emphasis delimiter, you can backslash +escape it: + + \*this text is surrounded by literal asterisks\* + + + +

Code

+ +To indicate a span of code, wrap it with backtick quotes (`` ` ``). +Unlike a pre-formatted code block, a code span indicates code within a +normal paragraph. For example: + + Use the `printf()` function. + +will produce: + +

Use the printf() function.

+ +To include a literal backtick character within a code span, you can use +multiple backticks as the opening and closing delimiters: + + ``There is a literal backtick (`) here.`` + +which will produce this: + +

There is a literal backtick (`) here.

+ +The backtick delimiters surrounding a code span may include spaces -- +one after the opening, one before the closing. This allows you to place +literal backtick characters at the beginning or end of a code span: + + A single backtick in a code span: `` ` `` + + A backtick-delimited string in a code span: `` `foo` `` + +will produce: + +

A single backtick in a code span: `

+ +

A backtick-delimited string in a code span: `foo`

+ +With a code span, ampersands and angle brackets are encoded as HTML +entities automatically, which makes it easy to include example HTML +tags. Markdown will turn this: + + Please don't use any `` tags. + +into: + +

Please don't use any <blink> tags.

+ +You can write this: + + `—` is the decimal-encoded equivalent of `—`. + +to produce: + +

&#8212; is the decimal-encoded + equivalent of &mdash;.

+ + + +

Images

+ +Admittedly, it's fairly difficult to devise a "natural" syntax for +placing images into a plain text document format. + +Markdown uses an image syntax that is intended to resemble the syntax +for links, allowing for two styles: *inline* and *reference*. + +Inline image syntax looks like this: + + ![Alt text](/path/to/img.jpg) + + ![Alt text](/path/to/img.jpg "Optional title") + +That is: + +* An exclamation mark: `!`; +* followed by a set of square brackets, containing the `alt` + attribute text for the image; +* followed by a set of parentheses, containing the URL or path to + the image, and an optional `title` attribute enclosed in double + or single quotes. + +Reference-style image syntax looks like this: + + ![Alt text][id] + +Where "id" is the name of a defined image reference. Image references +are defined using syntax identical to link references: + + [id]: url/to/image "Optional title attribute" + +As of this writing, Markdown has no syntax for specifying the +dimensions of an image; if this is important to you, you can simply +use regular HTML `` tags. + + +* * * + + +

Miscellaneous

+ + + +Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this: + + + +Markdown will turn this into: + + http://example.com/ + +Automatic links for email addresses work similarly, except that +Markdown will also perform a bit of randomized decimal and hex +entity-encoding to help obscure your address from address-harvesting +spambots. For example, Markdown will turn this: + + + +into something like this: + + address@exa + mple.com + +which will render in a browser as a clickable link to "address@example.com". + +(This sort of entity-encoding trick will indeed fool many, if not +most, address-harvesting bots, but it definitely won't fool all of +them. It's better than nothing, but an address published in this way +will probably eventually start receiving spam.) + + + +

Backslash Escapes

+ +Markdown allows you to use backslash escapes to generate literal +characters which would otherwise have special meaning in Markdown's +formatting syntax. For example, if you wanted to surround a word with +literal asterisks (instead of an HTML `` tag), you can backslashes +before the asterisks, like this: + + \*literal asterisks\* + +Markdown provides backslash escapes for the following characters: + + \ backslash + ` backtick + * asterisk + _ underscore + {} curly braces + [] square brackets + () parentheses + # hash mark + + plus sign + - minus sign (hyphen) + . dot + ! exclamation mark + diff --git a/oldtests/Original/Nested_blockquotes.html b/oldtests/Original/Nested_blockquotes.html new file mode 100644 index 0000000000..02efc59541 --- /dev/null +++ b/oldtests/Original/Nested_blockquotes.html @@ -0,0 +1,7 @@ +
+

foo

+
+

bar

+
+

foo

+
diff --git a/oldtests/Original/Nested_blockquotes.markdown b/oldtests/Original/Nested_blockquotes.markdown new file mode 100644 index 0000000000..ed3c624ffb --- /dev/null +++ b/oldtests/Original/Nested_blockquotes.markdown @@ -0,0 +1,5 @@ +> foo +> +> > bar +> +> foo diff --git a/oldtests/Original/Ordered_and_unordered_lists.html b/oldtests/Original/Ordered_and_unordered_lists.html new file mode 100644 index 0000000000..78d752e9a6 --- /dev/null +++ b/oldtests/Original/Ordered_and_unordered_lists.html @@ -0,0 +1,112 @@ +

Unordered

+

Asterisks tight:

+
    +
  • asterisk 1
  • +
  • asterisk 2
  • +
  • asterisk 3
  • +
+

Asterisks loose:

+
    +
  • asterisk 1

  • +
  • asterisk 2

  • +
  • asterisk 3

  • +
+
+

Pluses tight:

+
    +
  • Plus 1
  • +
  • Plus 2
  • +
  • Plus 3
  • +
+

Pluses loose:

+
    +
  • Plus 1

  • +
  • Plus 2

  • +
  • Plus 3

  • +
+
+

Minuses tight:

+
    +
  • Minus 1
  • +
  • Minus 2
  • +
  • Minus 3
  • +
+

Minuses loose:

+
    +
  • Minus 1

  • +
  • Minus 2

  • +
  • Minus 3

  • +
+

Ordered

+

Tight:

+
    +
  1. First
  2. +
  3. Second
  4. +
  5. Third
  6. +
+

and:

+
    +
  1. One
  2. +
  3. Two
  4. +
  5. Three
  6. +
+

Loose using tabs:

+
    +
  1. First

  2. +
  3. Second

  4. +
  5. Third

  6. +
+

and using spaces:

+
    +
  1. One

  2. +
  3. Two

  4. +
  5. Three

  6. +
+

Multiple paragraphs:

+
    +
  1. Item 1, graf one.

    +

    Item 2. graf two. The quick brown fox jumped over the lazy dog's +back.

  2. +
  3. Item 2.

  4. +
  5. Item 3.

  6. +
+

Nested

+
    +
  • Tab +
      +
    • Tab +
        +
      • Tab
      • +
    • +
  • +
+

Here's another:

+
    +
  1. First
  2. +
  3. Second: +
      +
    • Fee
    • +
    • Fie
    • +
    • Foe
    • +
  4. +
  5. Third
  6. +
+

Same thing but with paragraphs:

+
    +
  1. First

  2. +
  3. Second:

    +
      +
    • Fee
    • +
    • Fie
    • +
    • Foe
    • +
  4. +
  5. Third

  6. +
+

This was an error in Markdown 1.0.1:

+
    +
  • this

    +
      +
    • sub
    • +
    +

    that

  • +
diff --git a/oldtests/Original/Ordered_and_unordered_lists.markdown b/oldtests/Original/Ordered_and_unordered_lists.markdown new file mode 100644 index 0000000000..7f3b49777f --- /dev/null +++ b/oldtests/Original/Ordered_and_unordered_lists.markdown @@ -0,0 +1,131 @@ +## Unordered + +Asterisks tight: + +* asterisk 1 +* asterisk 2 +* asterisk 3 + + +Asterisks loose: + +* asterisk 1 + +* asterisk 2 + +* asterisk 3 + +* * * + +Pluses tight: + ++ Plus 1 ++ Plus 2 ++ Plus 3 + + +Pluses loose: + ++ Plus 1 + ++ Plus 2 + ++ Plus 3 + +* * * + + +Minuses tight: + +- Minus 1 +- Minus 2 +- Minus 3 + + +Minuses loose: + +- Minus 1 + +- Minus 2 + +- Minus 3 + + +## Ordered + +Tight: + +1. First +2. Second +3. Third + +and: + +1. One +2. Two +3. Three + + +Loose using tabs: + +1. First + +2. Second + +3. Third + +and using spaces: + +1. One + +2. Two + +3. Three + +Multiple paragraphs: + +1. Item 1, graf one. + + Item 2. graf two. The quick brown fox jumped over the lazy dog's + back. + +2. Item 2. + +3. Item 3. + + + +## Nested + +* Tab + * Tab + * Tab + +Here's another: + +1. First +2. Second: + * Fee + * Fie + * Foe +3. Third + +Same thing but with paragraphs: + +1. First + +2. Second: + * Fee + * Fie + * Foe + +3. Third + + +This was an error in Markdown 1.0.1: + +* this + + * sub + + that diff --git a/oldtests/Original/README b/oldtests/Original/README new file mode 100644 index 0000000000..5143258bb9 --- /dev/null +++ b/oldtests/Original/README @@ -0,0 +1,15 @@ +These are from John Gruber's original markdown test suite, via +Michel Fortin's mdtest. + +The html files have been modified slightly in ways that do not affect the +semantics. For example, entities are used for quotes in text, and +blank lines are omitted between block-level tags. + +Trailing blank spaces are removed from lines in raw HTML blocks. + +The one (insignificant) semantic change is switching the order +of emph and strong tags in the output for ***strong and emph***. + +We have removed Hard-wrapped_paragraphs_with_list-like_lines tests, +because the new implementation no longer requires a blank line +before a list. diff --git a/oldtests/Original/Strong_and_em_together.html b/oldtests/Original/Strong_and_em_together.html new file mode 100644 index 0000000000..2629594835 --- /dev/null +++ b/oldtests/Original/Strong_and_em_together.html @@ -0,0 +1,4 @@ +

This is strong and em.

+

So is this word.

+

This is strong and em.

+

So is this word.

diff --git a/oldtests/Original/Strong_and_em_together.markdown b/oldtests/Original/Strong_and_em_together.markdown new file mode 100644 index 0000000000..95ee690dbe --- /dev/null +++ b/oldtests/Original/Strong_and_em_together.markdown @@ -0,0 +1,7 @@ +***This is strong and em.*** + +So is ***this*** word. + +___This is strong and em.___ + +So is ___this___ word. diff --git a/oldtests/Original/Tabs.html b/oldtests/Original/Tabs.html new file mode 100644 index 0000000000..5389bdf755 --- /dev/null +++ b/oldtests/Original/Tabs.html @@ -0,0 +1,19 @@ +
    +
  • this is a list item +indented with tabs

  • +
  • this is a list item +indented with spaces

  • +
+

Code:

+
this code block is indented by one tab
+
+

And:

+
    this code block is indented by two tabs
+
+

And:

+
+   this is an example list item
+    indented with tabs
+
++   this is an example list item
+    indented with spaces
+
diff --git a/oldtests/Original/Tabs.markdown b/oldtests/Original/Tabs.markdown new file mode 100644 index 0000000000..589d1136e1 --- /dev/null +++ b/oldtests/Original/Tabs.markdown @@ -0,0 +1,21 @@ ++ this is a list item + indented with tabs + ++ this is a list item + indented with spaces + +Code: + + this code block is indented by one tab + +And: + + this code block is indented by two tabs + +And: + + + this is an example list item + indented with tabs + + + this is an example list item + indented with spaces diff --git a/oldtests/Original/Tidyness.html b/oldtests/Original/Tidyness.html new file mode 100644 index 0000000000..f2a8ce70f5 --- /dev/null +++ b/oldtests/Original/Tidyness.html @@ -0,0 +1,8 @@ +
+

A list within a blockquote:

+
    +
  • asterisk 1
  • +
  • asterisk 2
  • +
  • asterisk 3
  • +
+
diff --git a/oldtests/Original/Tidyness.markdown b/oldtests/Original/Tidyness.markdown new file mode 100644 index 0000000000..5f18b8da21 --- /dev/null +++ b/oldtests/Original/Tidyness.markdown @@ -0,0 +1,5 @@ +> A list within a blockquote: +> +> * asterisk 1 +> * asterisk 2 +> * asterisk 3 diff --git a/oldtests/Tabs/TabConversionUnicode.html b/oldtests/Tabs/TabConversionUnicode.html new file mode 100644 index 0000000000..f596f6a0fd --- /dev/null +++ b/oldtests/Tabs/TabConversionUnicode.html @@ -0,0 +1 @@ +

То лпой is a Russian word with a tab inside.

diff --git a/oldtests/Tabs/TabConversionUnicode.markdown b/oldtests/Tabs/TabConversionUnicode.markdown new file mode 100644 index 0000000000..0bd7b52929 --- /dev/null +++ b/oldtests/Tabs/TabConversionUnicode.markdown @@ -0,0 +1 @@ +`То лпой` is a Russian word with a tab inside. diff --git a/runtests.pl b/runtests.pl new file mode 100644 index 0000000000..5facbe6505 --- /dev/null +++ b/runtests.pl @@ -0,0 +1,159 @@ +#!/usr/bin/env perl +use warnings; +use strict; +use Term::ANSIColor; +use IO::Handle; +use IPC::Open2; + +my $usage="runtests.pl PROGRAM SPEC\nSet ANSI_COLORS_DISABLED=1 if you redirect to a file.\nSet PATT='...' to restrict tests to sections matching a regex.\n"; + +my $PROG=$ARGV[0]; +my $SPEC=$ARGV[1]; +my $PATT=$ENV{'PATT'}; + +if (!(defined $PROG && defined $SPEC)) { + print STDERR $usage; + exit 1; +} + +my $passed = 0; +my $failed = 0; +my $skipped = 0; + +# Markdown implementations vary on insignificant whitespace. +# Some leave blanks between block elements, others don't. +# This function tries to normalize the output so it can be +# compared with our test. tidy takes two arguments: the +# string containing the actual output, and a pathname of the +# file to which the tidied output is to be saved. +sub tidy +{ + my $inpre = 0; + my $out = ""; + my $outfh; + open($outfh, '>', \$out); + for (split /^/, $_[0]) { + if (/
 in tag
+      s/  *\/>/\/>/;
+      # skip blank line
+      if (/^$/) {
+        next;
+      }
+      print $outfh $_;
+    }
+  }
+  close $outfh;
+  return $out;
+}
+
+sub dotest
+{
+  my $markdown = $_[0];
+  my $html = $_[1];
+  my $testname = $_[2];
+  my $actual = "";
+  # We use → to indicate tab and ␣ space in the spec
+  $markdown =~ s/→/\t/g;s/␣/ /g;
+  $html =~ s/→/\t/g;s/␣/ /g;
+  open2(my $out, my $in, $PROG);
+  print $in $markdown;
+  close $in;
+  flush $out;
+  $actual = do { local $/; <$out>; };
+  close $out;
+  $html   = &tidy($html);
+  $actual = &tidy($actual);
+  $actual =~ s/\'/'/;
+  if ($actual eq $html) {
+    print colored("✓", "green");
+    return 1;
+  } else {
+    print colored("\n✘ $testname", "red");
+    print "\n";
+    print color "cyan";
+    print "=== markdown ===============\n";
+    print $markdown;
+    print "=== expected ===============\n";
+    print $html;
+    print "=== got ====================\n";
+    print $actual;
+    print color "black";
+    return 0;
+  }
+}
+
+my $stage = 0;
+my $markdown = "";
+my $html = "";
+my $example = 0;
+my $linenum = 0;
+my $exampleline = 0;
+my @secnums = ();
+my $secheading;
+
+open(SPEC, "< $SPEC");
+while () {
+  $linenum++;
+  if (/^\.$/) {
+      $stage = ($stage + 1) % 3;
+      if ($stage == 1) {
+          $exampleline = $linenum;
+      }
+      if ($stage == 0) {
+          $example++;
+          if (!$PATT || $secheading =~ /$PATT/) {
+            if (&dotest($markdown, $html,
+                        "Example $example (line $exampleline)")) {
+                $passed++;
+            } else {
+                $failed++;
+            }
+          } else {
+            $skipped++;
+          }
+          $markdown = "";
+          $html = "";
+      }
+  } elsif ($stage == 0 && $_ =~ /^/) {
+      last;
+  } elsif ($stage == 0 && $_ =~ /^(#+) +(.*)/) {
+      my $seclevel = length($1);
+      $secheading = $2;
+      if ($#secnums == $seclevel - 1) {
+          $secnums[$#secnums]++;
+      } elsif ($#secnums > $seclevel - 1) {
+          @secnums = @secnums[0..($seclevel - 1)];
+          $secnums[$#secnums]++;
+      } else {
+          while ($#secnums < $seclevel - 1) {
+              push(@secnums, 1);
+          }
+      }
+      if (!$PATT || $secheading =~ /$PATT/) {
+        print ("\n", join(".", @secnums) . " " . $secheading, "  ");
+      }
+  } elsif ($stage == 1) {
+      $markdown .= $_;
+  } elsif ($stage == 2) {
+      $html .= $_;
+  }
+}
+
+print "\n";
+print STDERR colored("$passed tests passed, $failed failed, $skipped skipped.", "bold");
+print STDERR "\n";
+exit $failed;
diff --git a/spec.txt b/spec.txt
new file mode 100644
index 0000000000..96721e6e34
--- /dev/null
+++ b/spec.txt
@@ -0,0 +1,6044 @@
+---
+title: Standard Markdown Spec
+author:
+- John MacFarlane
+version: 1
+date: 2014-07-21
+...
+
+# Introduction
+
+## What is markdown?
+
+Markdown is a plain text format for writing structured documents,
+based on conventions used for indicating formatting in email and
+usenet posts.  It was developed in 2004 by John Gruber, who wrote
+the first markdown-to-HTML converter in perl, and it soon became
+widely used in websites.  By 2014 there were dozens of
+implementations in many languages.  Some of them extended basic
+markdown syntax with conventions for footnotes, definition lists,
+tables, and other constructs, and some allowed output not just in
+HTML but in LaTeX and many other formats.
+
+## Why is a spec needed?
+
+John Gruber's [canonical description of markdown's
+syntax](http://daringfireball.net/projects/markdown/syntax)
+does not specify the syntax unambiguously.  Here are some examples of
+questions it does not answer:
+
+1.  How much indentation is needed for a sublist?  The spec says that
+    continuation paragraphs need to be indented four spaces, but is
+    not fully explicit about sublists.  It is natural to think that
+    they, too, must be indented four spaces, but `Markdown.pl` does
+    not require that.  This is hardly a "corner case," and divergences
+    between implementations on this issue often lead to surprises for
+    users in real documents. (See [this comment by John
+    Gruber](http://article.gmane.org/gmane.text.markdown.general/1997).)
+
+2.  Is a blank line needed before a block quote or header?
+    Most implementations do not require the blank line.  However,
+    this can lead to unexpected results in hard-wrapped text, and
+    also to ambiguities in parsing (note that some implementations
+    put the header inside the blockquote, while others do not).
+    (John Gruber has also spoken [in favor of requiring the blank
+    lines](http://article.gmane.org/gmane.text.markdown.general/2146).)
+
+3.  What is the exact rule for determining when list items get
+    wrapped in `

` tags? Can a list be partially "loose" and partially + "tight"? What should we do with a list like this? + + ``` markdown + 1. one + + 2. two + 3. three + ``` + + Or this? + + ``` markdown + 1. one + + - a + + - b + 2. two + ``` + + (There are some relevant comments by John Gruber + [here](http://article.gmane.org/gmane.text.markdown.general/2554).) + +4. When list markers change from bullets to numbers, should we have + two lists or one? + + ``` markdown + 1. fee + 2. fie + - foe + - fum + ``` + +5. What are the precedence rules for the markers of inline structure? + For example, is the following a valid link, or does the code span + take precedence ? + + ``` markdown + [foo `](bar)` + ``` + +6. What are the precedence rules for markers of emphasis and strong + emphasis? For example, how should the following be parsed? + + ``` markdown + *foo *bar** baz* + ``` + +7. Can list items include headers? + + ``` markdown + - # Heading + ``` + +8. Can link references be defined inside block quotes or list items? + + ``` markdown + > Blockquote [foo]. + > + > [foo]: /url + ``` + +In the absence of a spec, early implementers consulted `Markdown.pl` +to resolve these ambiguities. But `Markdown.pl` was quite buggy, and +gave manifestly bad results in many cases, so it was not a +satisfactory replacement for a spec. + +Because there is no unambiguous spec, implementations have diverged +considerably. As a result, users are often surprised to find that +a document that renders one way on one system (say, a github wiki) +renders differently on another (say, converting to docbook using +pandoc). To make matters worse, because nothing in markdown counts +as a "syntax error," the divergence often isn't discovered right away. + +## About this document + +This document attempts to specify markdown syntax unambiguously. +It contains many examples with side-by-side markdown and +HTML. These are intended to double as conformance tests. An +accompanying script `runtests.pl` can be used to run the tests +against any markdown program: + + perl runtests.pl PROGRAM spec.html + +Since this document describes how markdown is to be parsed into +an abstract syntax tree, it would have made sense to use an abstract +representation of the syntax tree instead of HTML. But HTML is capable +of representing the structural distinctions we need to make, and the +choice of HTML for the tests makes it possible to run the tests against +an implementation without writing an abstract syntax tree renderer. + +This document is generated from a text file, `spec.txt`, written +in markdown with a small extension for the side-by-side tests. +The script `spec2md.pl` can be used to turn `spec.txt` into pandoc +markdown, which can then be converted into other formats. + +In the examples, the `→` character is used to represent tabs. + +# Preprocessing + +A [line](#line) +is a sequence of one or more characters followed by a line +ending (CR, LF, or CRLF, depending on the platform) or by the end of +file. + +This spec does not specify an encoding; it thinks of lines as composed +of characters rather than bytes. A conforming parser may be limited +to a certain encoding. + +Tabs in lines are expanded to spaces, with a tab stop of 4 characters: + +. +foo→baz→→bim +. +

foo baz bim

+. + +. +οὐ→χρῆν +. +

οὐ χρῆν

+. + +Line endings are replaced by newline characters (LF). + +A line containing only spaces (after tab expansion) followed by +a line ending is called a [blank line](#blank-line).
+ +# Blocks and inlines + +We can think of a document as a sequence of [blocks](#block)---structural elements like paragraphs, block quotations, +lists, headers, rules, and code blocks. Blocks can contain other +blocks, or they can contain [inline](#inline) content: +words, spaces, links, emphasized text, images, and inline code. + +## Precedence + +Indicators of block structure always take precedence over indicators +of inline structure. So, for example, the following is a list with +two items, not a list with one item containing a code span: + +. +- `one +- two` +. +
    +
  • `one
  • +
  • two`
  • +
+. + +This means that parsing can proceed in two steps: first, the block +structure of the document can be discerned; second, text lines inside +paragraphs, headers, and other block constructs can be parsed for inline +structure. The second step requires information about link reference +definitions that will be available only at the end of the first +step. Note that the first step requires processing lines in sequence, +but the second can be parallelized, since the inline parsing of +one block element does not affect the inline parsing of any other. + +## Container blocks and leaf blocks + +We can divide blocks into two types: +[container blocks](#container-block),
+which can contain other blocks, and [leaf blocks](#leaf-block), + which cannot. + +# Leaf blocks + +This section describes the different kinds of leaf block that make up a +markdown document. + +## Horizontal rules + +A line consisting of 0-3 spaces of indentation, followed by a sequence +of three or more matching `-`, `_`, or `*` characters, each followed +optionally any number of spaces, forms a [horizontal +rule](#horizontal-rule). + +. +*** +--- +___ +. +
+
+
+. + +Wrong characters: + +. ++++ +. +

+++

+. + +. +=== +. +

===

+. + +Not enough characters: + +. +-- +** +__ +. +

-- +** +__

+. + +One to three spaces indent are allowed: + +. + *** + *** + *** +. +
+
+
+. + +Four spaces is too many: + +. + *** +. +
***
+
+. + +. +Foo + *** +. +

Foo +***

+. + +More than three characters may be used: + +. +_____________________________________ +. +
+. + +Spaces are allowed between the characters: + +. + - - - +. +
+. + +. + ** * ** * ** * ** +. +
+. + +. +- - - - +. +
+. + +Spaces are allowed at the end: + +. +- - - - +. +
+. + +However, no other characters may occur at the end or the +beginning: + +. +_ _ _ _ a + +a------ +. +

_ _ _ _ a

+

a------

+. + +It is required that all of the non-space characters be the same. +So, this is not a horizontal rule: + +. + *-* +. +

-

+. + +Horizontal rules do not need blank lines before or after: + +. +- foo +*** +- bar +. +
    +
  • foo
  • +
+
+
    +
  • bar
  • +
+. + +Horizontal rules can interrupt a paragraph: + +. +Foo +*** +bar +. +

Foo

+
+

bar

+. + +Note, however, that this is a setext header, not a paragraph followed +by a horizontal rule: + +. +Foo +--- +bar +. +

Foo

+

bar

+. + +When both a horizontal rule and a list item are possible +interpretations of a line, the horizontal rule is preferred: + +. +* Foo +* * * +* Bar +. +
    +
  • Foo
  • +
+
+
    +
  • Bar
  • +
+. + +If you want a horizontal rule in a list item, use a different bullet: + +. +- Foo +- * * * +. +
    +
  • Foo
  • +

  • +
+. + +## ATX headers + +An [ATX header](#atx-header)
+consists of a string of characters, parsed as inline content, between an +opening sequence of 1--6 unescaped `#` characters and an optional +closing sequence of any number of `#` characters. The opening sequence +of `#` characters cannot be followed directly by a nonspace character. +The closing `#` characters may be followed by spaces only. The opening +`#` character may be indented 0-3 spaces. The raw contents of the +header are stripped of leading and trailing spaces before being parsed +as inline content. The header level is equal to the number of `#` +characters in the opening sequence. + +Simple headers: + +. +# foo +## foo +### foo +#### foo +##### foo +###### foo +. +

foo

+

foo

+

foo

+

foo

+
foo
+
foo
+. + +More than six `#` characters is not a header: + +. +####### foo +. +

####### foo

+. + +A space is required between the `#` characters and the header's +contents. Note that many implementations currently do not require +the space. However, the space was required by the [original ATX +implementation](http://www.aaronsw.com/2002/atx/atx.py), and it helps +prevent things like the following from being parsed as headers: + +. +#5 bolt +. +

#5 bolt

+. + +This is not a header, because the first `#` is escaped: + +. +\## foo +. +

## foo

+. + +Contents are parsed as inlines: + +. +# foo *bar* \*baz\* +. +

foo bar *baz*

+. + +Leading and trailing blanks are ignored in parsing inline content: + +. +# foo +. +

foo

+. + +One to three spaces indentation are allowed: + +. + ### foo + ## foo + # foo +. +

foo

+

foo

+

foo

+. + +Four spaces are too much: + +. + # foo +. +
# foo
+
+. + +. +foo + # bar +. +

foo +# bar

+. + +A closing sequence of `#` characters is optional: + +. +## foo ## + ### bar ### +. +

foo

+

bar

+. + +It need not be the same length as the opening sequence: + +. +# foo ################################## +##### foo ## +. +

foo

+
foo
+. + +Spaces are allowed after the closing sequence: + +. +### foo ### +. +

foo

+. + +A sequence of `#` characters with a nonspace character following it +is not a closing sequence, but counts as part of the contents of the +header: + +. +### foo ### b +. +

foo ### b

+. + +Backslash-escaped `#` characters do not count as part +of the closing sequence: + +. +### foo \### +## foo \#\## +. +

foo #

+

foo ##

+. + +ATX headers need not be separated from surrounding content by blank +lines, and they can interrupt paragraphs: + +. +**** +## foo +**** +. +
+

foo

+
+. + +. +Foo bar +# baz +Bar foo +. +

Foo bar

+

baz

+

Bar foo

+. + +ATX headers can be empty: + +. +## +# +### ### +. +

+

+

+. + +## Setext headers + +A [setext header](#setext-header)
+consists of a line of text, containing at least one nonspace character, +with no more than 3 spaces indentation, followed by a [setext header +underline](#setext-header-underline). A [setext header +underline](#setext-header-underline) +is a sequence of `=` characters or a sequence of `-` characters, with no +more than 3 spaces indentation and any number of leading or trailing +spaces. The header is a level 1 header if `=` characters are used, and +a level 2 header if `-` characters are used. The contents of the header +are the result of parsing the first line as markdown inline content. + +In general, a setext header need not be preceded or followed by a +blank line. However, it cannot interrupt a paragraph, so when a +setext header comes after a paragraph, a blank line is needed between +them. + +Simple examples: + +. +Foo *bar* +========= + +Foo *bar* +--------- +. +

Foo bar

+

Foo bar

+. + +The underlining can be any length: + +. +Foo +------------------------- + +Foo += +. +

Foo

+

Foo

+. + +The header content can be indented up to three spaces, and need +not line up with the underlining: + +. + Foo +--- + + Foo +----- + + Foo + === +. +

Foo

+

Foo

+

Foo

+. + +Four spaces indent is too much: + +. + Foo + --- + + Foo +--- +. +
Foo
+---
+
+Foo
+
+
+. + +The setext header underline can be indented up to three spaces, and +may have trailing spaces: + +. +Foo + ---- +. +

Foo

+. + +Four spaces is too much: + +. +Foo + --- +. +

Foo +---

+. + +The setext header underline cannot contain internal spaces: + +. +Foo += = + +Foo +--- - +. +

Foo += =

+

Foo

+
+. + +Trailing spaces in the content line do not cause a line break: + +. +Foo +----- +. +

Foo

+. + +Nor does a backslash at the end: + +. +Foo\ +---- +. +

Foo\

+. + +Since indicators of block structure take precedence over +indicators of inline structure, the following are setext headers: + +. +`Foo +---- +` + +
+. +

`Foo

+

`

+

<a title="a lot

+

of dashes"/>

+. + +The setext header underline cannot be a lazy line: + +. +> Foo +--- +. +
+

Foo

+
+
+. + +A setext header cannot interrupt a paragraph: + +. +Foo +Bar +--- + +Foo +Bar +=== +. +

Foo +Bar

+
+

Foo +Bar +===

+. + +But in general a blank line is not required before or after: + +. +--- +Foo +--- +Bar +--- +Baz +. +
+

Foo

+

Bar

+

Baz

+. + +Setext headers cannot be empty: + +. + +==== +. +

====

+. + + +## Indented code blocks + +An [indented code block](#indented-code-block) +
is composed of one or more +[indented chunks](#indented-chunk) separated by blank lines. +An [indented chunk](#indented-chunk) +is a sequence of non-blank lines, each indented four or more +spaces. An indented code block cannot interrupt a paragraph, so +if it occurs before or after a paragraph, there must be an +intervening blank line. The contents of the code block are +the literal contents of the lines, including trailing newlines, +minus four spaces of indentation. An indented code block has no +attributes. + +. + a simple + indented code block +. +
a simple
+  indented code block
+
+. + +The contents are literal text, and do not get parsed as markdown: + +. +
+ *hi* + + - one +. +
<a/>
+*hi*
+
+- one
+
+. + +Here we have three chunks separated by blank lines: + +. + chunk1 + + chunk2 + + + + chunk3 +. +
chunk1
+
+chunk2
+
+
+
+chunk3
+
+. + +Any initial spaces beyond four will be included in the content, even +in interior blank lines: + +. + chunk1 + + chunk2 +. +
chunk1
+  
+  chunk2
+
+. + +An indented code code block cannot interrupt a paragraph. (This +allows hanging indents and the like.) + +. +Foo + bar + +. +

Foo +bar

+. + +However, any non-blank line with fewer than four leading spaces ends +the code block immediately. So a paragraph may occur immediately +after indented code: + +. + foo +bar +. +
foo
+
+

bar

+. + +And indented code can occur immediately before and after other kinds of +blocks: + +. +# Header + foo +Header +------ + foo +---- +. +

Header

+
foo
+
+

Header

+
foo
+
+
+. + +The first line can be indented more than four spaces: + +. + foo + bar +. +
    foo
+bar
+
+. + +Blank lines preceding or following an indented code block +are not included in it: + +. + + + foo + + +. +
foo
+
+. + +Trailing spaces are included in the code block's content: + +. + foo +. +
foo  
+
+. + + +## Fenced code blocks + +A [code fence](#code-fence)
is a sequence +of at least three consecutive backtick characters (`` ` ``) or +tildes (`~`). (Tildes and backticks cannot be mixed.). +A [fenced code block](#fenced-code-block) +begins with a code fence, indented no more than three spaces. + +The line with the opening code fence may optionally contain some text +following the code fence; this is trimmed of leading and trailing +spaces and called the [info string](#info-string). The [info string] may not contain any backtick +characters. (The reason for this restriction is that otherwise +some inline code would be incorrectly interpreted as the +beginning of a fenced code block.) + +The content of the code block consists of all subsequent lines, until +a closing [code fence](#code-fence) of the same type as the code block +began with (backticks or tildes), and with at least as many backticks +or tildes as the opening code fence. If the leading code fence is +indented N spaces, then up to N spaces of indentation are removed from +each line of the content (if present). (If a content line is not +indented, it is preserved unchanged. If it is indented less than N +spaces, all of the indentation is removed.) + +The closing code fence may be indented up to three spaces, and may be +followed only by spaces, which are ignored. If the end of the +document is reached and no closing code fence has been found, the code +block contains all of the lines after the opening code fence. +(An alternative spec would require backtracking in the event +that a closing code fence is not found. But this makes parsing much +less efficient, and there seems to be no real down side to the +behavior described here.) + +A fenced code block may interrupt a paragraph, and does not require +a blank line either before or after. + +The content of a code fence is treated as literal text, not parsed +as inlines. The first word of the info string is typically used to +specify the language of the code sample, and rendered in the `class` +attribute of the `pre` tag. However, this spec does not mandate any +particular treatment of the info string. + +Here is a simple example with backticks: + +. +``` +< + > +``` +. +
<
+ >
+
+. + +With tildes: + +. +~~~ +< + > +~~~ +. +
<
+ >
+
+. + +The closing code fence must use the same character as the opening +fence: + +. +``` +aaa +~~~ +``` +. +
aaa
+~~~
+
+. + +. +~~~ +aaa +``` +~~~ +. +
aaa
+```
+
+. + +The closing code fence must be at least as long as the opening fence: + +. +```` +aaa +``` +`````` +. +
aaa
+```
+
+. + +. +~~~~ +aaa +~~~ +~~~~ +. +
aaa
+~~~
+
+. + +Unclosed code blocks are closed by the end of the document: + +. +``` +. +
+. + +. +````` + +``` +aaa +. +

+```
+aaa
+
+. + +A code block can have all empty lines as its content: + +. +``` + + +``` +. +

+  
+
+. + +A code block can be empty: + +. +``` +``` +. +
+. + +Fences can be indented. If the opening fence is indented, +content lines will have equivalent opening indentation removed, +if present: + +. + ``` + aaa +aaa +``` +. +
aaa
+aaa
+
+. + +. + ``` +aaa + aaa +aaa + ``` +. +
aaa
+aaa
+aaa
+
+. + +. + ``` + aaa + aaa + aaa + ``` +. +
aaa
+ aaa
+aaa
+
+. + +Four spaces indentation produces an indented code block: + +. + ``` + aaa + ``` +. +
```
+aaa
+```
+
+. + +Code fences (opening and closing) cannot contain internal spaces: + +. +``` ``` +aaa +. +

+aaa

+. + +. +~~~~~~ +aaa +~~~ ~~ +. +
aaa
+~~~ ~~
+
+. + +Fenced code blocks can interrupt paragraphs, and can be followed +directly by paragraphs, without a blank line between: + +. +foo +``` +bar +``` +baz +. +

foo

+
bar
+
+

baz

+. + +Other blocks can also occur before and after fenced code blocks +without an intervening blank line: + +. +foo +--- +~~~ +bar +~~~ +# baz +. +

foo

+
bar
+
+

baz

+. + +An [info string](#info-string) can be provided after the opening code fence. +Opening and closing spaces will be stripped, and the first word +is used here to populate the `class` attribute of the enclosing +`pre` tag. + +. +```ruby +def foo(x) + return 3 +end +``` +. +
def foo(x)
+  return 3
+end
+
+. + +. +~~~~ ruby startline=3 $%@#$ +def foo(x) + return 3 +end +~~~~~~~ +. +
def foo(x)
+  return 3
+end
+
+. + +. +````; +```` +. +
+. + +Info strings for backtick code blocks cannot contain backticks: + +. +``` aa ``` +foo +. +

aa +foo

+. + +Closing code fences cannot have info strings: + +. +``` +``` aaa +``` +. +
``` aaa
+
+. + + +## HTML blocks + +An [HTML block tag](#html-block-tag)
is +an [open tag](#open-tag) or [closing tag](#closing-tag) whose tag +name is one of the following (case-insensitive): +`article`, `header`, `aside`, `hgroup`, `blockquote`, `hr`, `body`, +`li`, `br`, `map`, `button`, `object`, `canvas`, `ol`, `caption`, +`output`, `col`, `p`, `colgroup`, `pre`, `dd`, `progress`, `div`, +`section`, `dl`, `table`, `td`, `dt`, `tbody`, `embed`, `textarea`, +`fieldset`, `tfoot`, `figcaption`, `th`, `figure`, `thead`, `footer`, +`footer`, `tr`, `form`, `ul`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, +`video`, `script`, `style`. + +An [HTML block](#html-block) begins with an +[HTML block tag](#html-block-tag), [HTML comment](#html-comment), +[processing instruction](#processing-instruction), +[declaration](#declaration), or [CDATA section](#cdata-section). +It ends when a [blank line](#blank-line) or the end of the +input is encountered. The initial line may be indented up to three +spaces, and subsequent lines may have any indentation. The contents +of the HTML block are interpreted as raw HTML, and will not be escaped +in HTML output. + +Some simple examples: + +. + + + + +
+ hi +
+ +okay. +. + + + + +
+ hi +
+

okay.

+. + +. +
+ *hello* + +. +
+ *hello* + +. + +Here we have two code blocks with a markdown paragraph between them: + +. +
+ +*Markdown* + +
+. +
+

Markdown

+
+. + +In the following example, what looks like a markdown code block +is actually part of the HTML block, which continues until a blank +line or the end of the document is reached: + +. +
+``` c +int x = 33; +``` +. +
+``` c +int x = 33; +``` +. + +A comment: + +. + +. + +. + +A processing instruction: + +. + +. + +. + +CDATA: + +. + +. + +. + +The opening tag can be indented 1-3 spaces, but not 4: + +. + + + +. + +
<!-- foo -->
+
+. + +An HTML block can interrupt a paragraph, and need not be preceded +by a blank line. + +. +Foo +
+bar +
+. +

Foo

+
+bar +
+. + +However, a following blank line is always needed, except at the end of +a document: + +. +
+bar +
+*foo* +. +
+bar +
+*foo* +. + +An incomplete HTML block tag may also start an HTML block: + +. +
The only restrictions are that block-level HTML elements — +> e.g. `
`, ``, `
`, `

`, etc. — must be separated from +> surrounding content by blank lines, and the start and end tags of the +> block should not be indented with tabs or spaces. + +In some ways Gruber's rule is more restrictive than the one given +here: + +- It requires that an HTML block be preceded by a blank line. +- It does not allow the start tag to be indented. +- It requires a matching end tag, which it also does not allow to + be indented. + +Indeed, most markdown implementations, including some of Gruber's +own perl implementations, do not impose these restrictions. + +There is one respect, however, in which Gruber's rule is more liberal +than the one given here, since it allows blank lines to occur inside +an HTML block. There are two reasons for disallowing them here. +First, it removes the need to parse balanced tags, which is +expensive and can require backtracking from the end of the document +if no matching end tag is found. Second, it provides a very simple +and flexible way of including markdown content inside HTML tags: +simply separate the markdown from the HTML using blank lines: + +. +

+ +*Emphasized* text. + +
+. +
+

Emphasized text.

+
+. + +Compare: + +. +
+*Emphasized* text. +
+. +
+*Emphasized* text. +
+. + +Some markdown implementations have adopted a convention of +interpreting content inside tags as text if the open tag has +the attribute `markdown=1`. The rule given above seems a simpler and +more elegant way of achieving the same expressive power, which is also +much simpler to parse. + +The main potential drawback is that one can no longer paste HTML +blocks into markdown documents with 100% reliability. However, +*in most cases* this will work fine, because the blank lines in +HTML are usually followed by HTML block tags. For example: + +. +
+ + + + + + + +
+Hi +
+. + + + + +
+Hi +
+. + +Moreover, blank lines are usually not necessary and can be +deleted. The exception is inside `
` tags; here, one can
+replace the blank lines with `
` entities.
+
+So there is no important loss of expressive power with the new rule.
+
+## Link reference definitions
+
+A [link reference definition](#link-reference-definition)
+ consists of a [link
+label](#link-label), indented up to three spaces, followed
+by a colon (`:`), optional blank space (including up to one
+newline), a [link destination](#link-destination), optional
+blank space (including up to one newline), and an optional [link
+title](#link-title), which if it is present must be separated
+from the [link destination](#link-destination) by whitespace.
+No further non-space characters may occur on the line.
+
+A [link reference-definition](#link-reference-definition)
+does not correspond to a structural element of a document.  Instead, it
+defines a label which can be used in [reference links](#reference-link)
+and reference-style [images](#image) elsewhere in the document.  [Link
+references] can be defined either before or after the links that use
+them.
+
+.
+[foo]: /url "title"
+
+[foo]
+.
+

foo

+. + +. + [foo]: + /url + 'the title' + +[foo] +. +

foo

+. + +. +[Foo*bar\]]:my_(url) 'title (with parens)' + +[Foo*bar\]] +. +

Foo*bar]

+. + +. +[Foo bar]: + +'title' + +[Foo bar] +. +

Foo bar

+. + +The title may be omitted: + +. +[foo]: +/url + +[foo] +. +

foo

+. + +The link destination may not be omitted: + +. +[foo]: + +[foo] +. +

[foo]:

+

[foo]

+. + +A link can come before its corresponding definition: + +. +[foo] + +[foo]: url +. +

foo

+. + +If there are several matching definitions, the first one takes +precedence: + +. +[foo] + +[foo]: first +[foo]: second +. +

foo

+. + +As noted in the section on [Links], matching of labels is +case-insensitive (see [matches](#matches)). + +. +[FOO]: /url + +[Foo] +. +

Foo

+. + +. +[ΑΓΩ]: /φου + +[αγω] +. +

αγω

+. + +Here is a link reference definition with no corresponding link. +It contributes nothing to the document. + +. +[foo]: /url +. +. + +This is not a link reference definition, because there are +non-space characters after the title: + +. +[foo]: /url "title" ok +. +

[foo]: /url "title" ok

+. + +This is not a link reference definition, because it is indented +four spaces: + +. + [foo]: /url "title" + +[foo] +. +
[foo]: /url "title"
+
+

[foo]

+. + +This is not a link reference definition, because it occurs inside +a code block: + +. +``` +[foo]: /url +``` + +[foo] +. +
[foo]: /url
+
+

[foo]

+. + +A [link reference definition](#link-reference-definition) cannot +interrupt a paragraph. + +. +Foo +[bar]: /baz + +[bar] +. +

Foo +[bar]: /baz

+

[bar]

+. + +However, it can directly follow other block elements, such as headers +and horizontal rules, and it need not be followed by a blank line. + +. +# [Foo] +[foo]: /url +> bar +. +

Foo

+
+

bar

+
+. + +Several [link references](#link-reference) can occur one after another, +without intervening blank lines. + +. +[foo]: /foo-url "foo" +[bar]: /bar-url + "bar" +[baz]: /baz-url + +[foo], +[bar], +[baz] +. +

foo, +bar, +baz

+. + +[Link reference definitions](#link-reference-definition) can occur +inside block containers, like lists and block quotations. They +affect the entire document, not just the container in which they +are defined: + +. +[foo] + +> [foo]: /url +. +

foo

+
+
+. + + +## Paragraphs + +A sequence of non-blank lines that cannot be interpreted as other +kinds of blocks forms a [paragraph](#paragraph) . +The contents of the paragraph are the result of parsing the +paragraph's raw content as inlines. The paragraph's raw content +is formed by concatenating the lines and removing initial and final +spaces. + +A simple example with two paragraphs: + +. +aaa + +bbb +. +

aaa

+

bbb

+. + +Paragraphs can contain multiple lines, but no blank lines: + +. +aaa +bbb + +ccc +ddd +. +

aaa +bbb

+

ccc +ddd

+. + +Multiple blank lines between paragraph have no effect: + +. +aaa + + +bbb +. +

aaa

+

bbb

+. + +Leading spaces are skipped: + +. + aaa + bbb +. +

aaa +bbb

+. + +Lines after the first may be indented any amount, since indented +code blocks cannot interrupt paragraphs. + +. +aaa + bbb + ccc +. +

aaa +bbb +ccc

+. + +However, the first line may be indented at most three spaces, +or an indented code block will be triggered: + +. + aaa +bbb +. +

aaa +bbb

+. + +. + aaa +bbb +. +
aaa
+
+

bbb

+. + +Final spaces are stripped before inline parsing, so a paragraph +that ends with two or more spaces will not end with a hard line +break: + +. +aaa +bbb +. +

aaa
+bbb

+. + +## Blank lines + +[Blank lines](#blank-line) between block-level elements are ignored, +except for the role they play in determining whether a [list](#list) +is [tight](#tight) or [loose](#loose). + +Blank lines at the beginning and end of the document are also ignored. + +. + + +aaa + + +# aaa + + +. +

aaa

+

aaa

+. + + +# Container blocks + +A [container block](#container-block) is a block that has other +blocks as its contents. There are two basic kinds of container blocks: +[block quotes](#block-quote) and [list items](#list-item). +[Lists](#list) are meta-containers for [list items](#list-item). + +We define the syntax for container blocks recursively. The general +form of the definition is: + +> If X is a sequence of blocks, then the result of +> transforming X in such-and-such a way is a container of type Y +> with these blocks as its content. + +So, we explain what counts as a block quote or list item by +explaining how these can be *generated* from their contents. +This should suffice to define the syntax, although it does not +give a recipe for *parsing* these constructions. (A recipe is +provided below in the section entitled [A parsing strategy].) + +## Block quotes + +A [block quote marker](#block-quote-marker)
+consists of 0-3 spaces of initial indent, plus (a) the character `>` together +with a following space, or (b) a single character `>` not followed by a space. + +The following rules define [block quotes](#block-quote): + + +1. **Basic case.** If a string of lines *Ls* constitute a sequence + of blocks *Bs*, then the result of appending a [block quote marker] + to the beginning of each line in *Ls* is a [block quote](#block-quote) + containing *Bs*. + +2. **Laziness.** If a string of lines *Ls* constitute a [block + quote](#block-quote) with contents *Bs*, then the result of deleting + the initial [block quote marker](#block-quote-marker) from one or + more lines in which the next non-space character after the [block + quote marker](#block-quote-marker) is [paragraph continuation + text](#paragraph-continuation-text) is a block quote with *Bs* as + its content. [Paragraph continuation + text](#paragraph-continuation-text) is text that will be parsed as + part of the content of a paragraph, but does not occur at the + beginning of the paragraph. + +3. **Consecutiveness.** A document cannot contain two [block + quotes](#block-quote) in a row unless there is a [blank + line](#blank-line) between them. + +Nothing else counts as a [block quote](#block-quote). + +Here is a simple example: + +. +> # Foo +> bar +> baz +. +
+

Foo

+

bar +baz

+
+. + +The spaces after the `>` characters can be omitted: + +. +># Foo +>bar +> baz +. +
+

Foo

+

bar +baz

+
+. + +The `>` characters can be indented 1-3 spaces: + +. + > # Foo + > bar + > baz +. +
+

Foo

+

bar +baz

+
+. + +Four spaces gives us a code block: + +. + > # Foo + > bar + > baz +. +
> # Foo
+> bar
+> baz
+
+. + +The Laziness clause allows us to omit the `>` before a +paragraph continuation line: + +. +> # Foo +> bar +baz +. +
+

Foo

+

bar +baz

+
+. + +A block quote can contain some lazy and some non-lazy +continuation lines: + +. +> bar +baz +> foo +. +
+

bar +baz +foo

+
+. + +Laziness only applies to lines that are continuations of +paragraphs. Lines containing characters or indentation that indicate +block structure cannot be lazy. + +. +> foo +--- +. +
+

foo

+
+
+. + +. +> - foo +- bar +. +
+
    +
  • foo
  • +
+
+
    +
  • bar
  • +
+. + +. +> foo + bar +. +
+
foo
+
+
+
bar
+
+. + +. +> ``` +foo +``` +. +
+
+
+

foo

+
+. + +A block quote can be empty: + +. +> +. +
+
+. + +. +> +> +> +. +
+
+. + +A block quote can have initial or final blank lines: + +. +> +> foo +> +. +
+

foo

+
+. + +A blank line always separates block quotes: + +. +> foo + +> bar +. +
+

foo

+
+
+

bar

+
+. + +(Most current markdown implementations, including John Gruber's +original `Markdown.pl`, will parse this eample as a single block quote +with two paragraphs. But it seems better to allow the author to decide +whether two block quotes or one are wanted.) + +Consecutiveness means that if we put these block quotes together, +we get a single block quote: + +. +> foo +> bar +. +
+

foo +bar

+
+. + +To get a block quote with two paragraphs, use: + +. +> foo +> +> bar +. +
+

foo

+

bar

+
+. + +Block quotes can interrupt paragraphs: + +. +foo +> bar +. +

foo

+
+

bar

+
+. + +In general, blank lines are not needed before or after block +quotes: + +. +> aaa +*** +> bbb +. +
+

aaa

+
+
+
+

bbb

+
+. + +However, because of laziness, a blank line is needed between +a block quote and a following paragraph: + +. +> bar +baz +. +
+

bar +baz

+
+. + +. +> bar + +baz +. +
+

bar

+
+

baz

+. + +. +> bar +> +baz +. +
+

bar

+
+

baz

+. + +It is a consequence of the Laziness rule that any number +of initial `>`s may be omitted on a continuation line of a +nested block quote: + +. +> > > foo +bar +. +
+
+
+

foo +bar

+
+
+
+. + +. +>>> foo +> bar +>>baz +. +
+
+
+

foo +bar +baz

+
+
+
+. + +When including an indented code block in a block quote, +remember that the [block quote marker](#block-quote-marker) includes +both the `>` and a following space. So *five spaces* are needed after +the `>`: + +. +> code + +> not code +. +
+
code
+
+
+
+

not code

+
+. + + +## List items + +A [list marker](#list-marker)
is a +[bullet list marker](#bullet-list-marker) or an [ordered list +marker](#ordered-list-marker). + +A [bullet list marker](#bullet-list-marker) +is a `-`, `+`, or `*` character. + +An [ordered list marker](#ordered-list-marker) +is a sequence of one of more digits (`0-9`), followed by either a +`.` character or a `)` character. + +The following rules define [list items](#list-item): + +1. **Basic case.** If a sequence of lines *Ls* constitute a sequence of + blocks *Bs* starting with a non-space character and not separated + from each other by more than one blank line, and *M* is a list + marker *M* of width *W* followed by 0 < *N* < 5 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 + (bullet or ordered) is determined by the type of its list marker. + If the list item is ordered, then it is also assigned a start + number, based on the ordered list marker. + +For example, let *Ls* be the lines + +. +A paragraph +with two lines. + + indented code + +> A block quote. +. +

A paragraph +with two lines.

+
indented code
+
+
+

A block quote.

+
+. + +And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says +that the following is an ordered list item with start number 1, +and the same contents as *Ls*: + +. +1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
    +
  1. A paragraph +with two lines.

    +
    indented code
    +
    +
    +

    A block quote.

    +
  2. +
+. + +The most important thing to notice is that the position of +the text after the list marker determines how much indentation +is needed in subsequent blocks in the list item. If the list +marker takes up two spaces, and there are three spaces between +the list marker and the next nonspace character, then blocks +must be indented five spaces in order to fall under the list +item. + +Here are some examples showing how far content must be indented to be +put under the list item: + +. +- one + + two +. +
    +
  • one
  • +
+

two

+. + +. +- one + + two +. +
    +
  • one

    +

    two

  • +
+. + +. + - one + + two +. +
    +
  • one
  • +
+
 two
+
+. + +. + - one + + two +. +
    +
  • one

    +

    two

  • +
+. + +It is tempting to think of this in terms of columns: the continuation +blocks must be indented at least to the column of the first nonspace +character after the list marker. However, that is not quite right. +The spaces after the list marker determine how much relative indentation +is needed. Which column this indentation reaches will depend on +how the list item is embedded in other constructions, as show by +this example: + +. + > > 1. one +>> +>> two +. +
+
+
    +
  1. one

    +

    two

  2. +
+
+
+. + +Here `two` occurs in the same column as the list marker `1.`, +but is actually contained in the list item, because there is +sufficent indentation after the last containing blockquote marker. + +The converse is also possible. In the following example, the word `two` +occurs far to the right of the initial text of the list item, `one`, but +it is not considered part of the list item, because it is not indented +far enough past the blockquote marker: + +. +>>- one +>> + > > two +. +
+
+
    +
  • one
  • +
+

two

+
+
+. + +A list item may not contain blocks that are separated by more than +one blank line. Thus, two blank lines will end a list: + +. +- foo + + bar + +- foo + + + bar +. +
    +
  • foo

    +

    bar

  • +
  • foo

  • +
+

bar

+. + +A list item may contain any kind of block: + +. +1. foo + + ``` + bar + ``` + + baz + + > bam +. +
    +
  1. foo

    +
    bar
    +
    +

    baz

    +
    +

    bam

    +
  2. +
+. + +2. **Item starting with indented code.** If a sequence of lines *Ls* + constitute a sequence of blocks *Bs* starting with an indented code + block and not separated from each other by more than one blank line, + and *M* is a list marker *M* of width *W* followed by + one space, then the result of prepending *M* and the following + space to the first line of *Ls*, and indenting subsequent lines of + *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. + If a line is empty, then it need not be indented. The type of the + list item (bullet or ordered) is determined by the type of its list + marker. If the list item is ordered, then it is also assigned a + start number, based on the ordered list marker. + +An indented code block will have to be indented four spaces beyond +the edge of the region where text will be included in the list item. +In the following case that is 6 spaces: + +. +- foo + + bar +. +
    +
  • foo

    +
    bar
    +
  • +
+. + +And in this case it is 11 spaces: + +. + 10. foo + + bar +. +
    +
  1. foo

    +
    bar
    +
  2. +
+. + +If the *first* block in the list item is an indented code block, +then by rule #2, the contents must be indented *one* space after the +list marker: + +. + indented code + +paragraph + + more code +. +
indented code
+
+

paragraph

+
more code
+
+. + +. +1. indented code + + paragraph + + more code +. +
    +
  1. indented code
    +
    +

    paragraph

    +
    more code
    +
  2. +
+. + +Note that an additional space indent is interpreted as space +inside the code block: + +. +1. indented code + + paragraph + + more code +. +
    +
  1.  indented code
    +
    +

    paragraph

    +
    more code
    +
  2. +
+. + +Note that rules #1 and #2 only apply to two cases: (a) cases +in which the lines to be included in a list item begin with a nonspace +character, and (b) cases in which they begin with an indented code +block. In a case like the following, where the first block begins with +a three-space indent, the rules do not allow us to form a list item by +indenting the whole thing and prepending a list marker: + +. + foo + +bar +. +

foo

+

bar

+. + +. +- foo + + bar +. +
    +
  • foo
  • +
+

bar

+. + +This is not a significant restriction, because when a block begins +with 1-3 spaces indent, the indentation can always be removed without +a change in interpretation, allowing rule #1 to be applied. So, in +the above case: + +. +- foo + + bar +. +
    +
  • foo

    +

    bar

  • +
+. + + +3. **Indentation.** If a sequence of lines *Ls* constitutes a list item + according to rule #1 or #2, then the result of indenting each line + of *L* by 1-3 spaces (the same for each line) also constitutes a + list item with the same contents and attributes. If a line is + empty, then it need not be indented. + +Indented one space: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
    +
  1. A paragraph +with two lines.

    +
    indented code
    +
    +
    +

    A block quote.

    +
  2. +
+. + +Indented two spaces: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
    +
  1. A paragraph +with two lines.

    +
    indented code
    +
    +
    +

    A block quote.

    +
  2. +
+. + +Indented three spaces: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
    +
  1. A paragraph +with two lines.

    +
    indented code
    +
    +
    +

    A block quote.

    +
  2. +
+. + +Four spaces indent gives a code block: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
1.  A paragraph
+    with two lines.
+
+        indented code
+
+    > A block quote.
+
+. + + +4. **Laziness.** If a string of lines *Ls* constitute a [list + item](#list-item) with contents *Bs*, then the result of deleting + some or all of the indentation from one or more lines in which the + next non-space character after the [list marker](#list--marker) is + [paragraph continuation text](#paragraph-continuation-text) is a + list item with the same contents and attributes. + +Here is an example with lazy continuation lines: + +. + 1. A paragraph +with two lines. + + indented code + + > A block quote. +. +
    +
  1. A paragraph +with two lines.

    +
    indented code
    +
    +
    +

    A block quote.

    +
  2. +
+. + +Indentation can be partially deleted: + +. + 1. A paragraph + with two lines. +. +
    +
  1. A paragraph +with two lines.
  2. +
+. + +These examples show how laziness can work in nested structures: + +. +> 1. > Blockquote +continued here. +. +
+
    +
  1. +

    Blockquote +continued here.

    +
  2. +
+
+. + +. +> 1. > Blockquote +> continued here. +. +
+
    +
  1. +

    Blockquote +continued here.

    +
  2. +
+
+. + + +5. **That's all.** Nothing that is not counted as a list item by rules + #1--4 counts as a [list item](#block-quote). + +The rules for sublists follow from the general rules above. A sublist +must be indented the same number of spaces a paragraph would need to be +in order to be included in the list item. + +So, in this case we need two spaces indent: + +. +- foo + - bar + - baz +. +
    +
  • foo +
      +
    • bar +
        +
      • baz
      • +
    • +
  • +
+. + +One is not enough: + +. +- foo + - bar + - baz +. +
    +
  • foo
  • +
  • bar
  • +
  • baz
  • +
+. + +Here we need four, because the list marker is wider: + +. +10) foo + - bar +. +
    +
  1. foo +
      +
    • bar
    • +
  2. +
+. + +Three is not enough: + +. +10) foo + - bar +. +
    +
  1. foo
  2. +
+
    +
  • bar
  • +
+. + +A list may be the first block in a list item: + +. +- - foo +. +
    +
    • +
    • foo
    • +
  • +
+. + +. +1. - 2. foo +. +
    +
    • +
      1. +
      2. foo
      3. +
    • +
  1. +
+. + +A list item may be empty: + +. +- foo +- +- bar +. +
    +
  • foo
  • +
  • +
  • bar
  • +
+. + +. +- +. +
    +
  • +
+. + +### Motivation + +John Gruber's markdown spec says the following about list items: + +1. "List markers typically start at the left margin, but may be indented + by up to three spaces. List markers must be followed by one or more + spaces or a tab." + +2. "To make lists look nice, you can wrap items with hanging indents.... + But if you don't want to, you don't have to." + +3. "List items may consist of multiple paragraphs. Each subsequent + paragraph in a list item must be indented by either 4 spaces or one + tab." + +4. "It looks nice if you indent every line of the subsequent paragraphs, + but here again, Markdown will allow you to be lazy." + +5. "To put a blockquote within a list item, the blockquote's `>` + delimiters need to be indented." + +6. "To put a code block within a list item, the code block needs to be + indented twice — 8 spaces or two tabs." + +These rules specify that a paragraph under a list item must be indented +four spaces (presumably, from the left margin, rather than the start of +the list marker, but this is not said), and that code under a list item +must be indented eight spaces instead of the usual four. They also say +that a block quote must be indented, but not by how much; however, the +example given has four spaces indentation. Although nothing is said +about other kinds of block-level content, it is certainly reasonable to +infer that *all* block elements under a list item, including other +lists, must be indented four spaces. This principle has been called the +*four-space rule*. + +The four-space rule is clear and principled, and if the reference +implementation `Markdown.pl` had followed it, it probably would have +become the standard. However, `Markdown.pl` allowed paragraphs and +sublists to start with only two spaces indentation, at least on the +outer level. Worse, its behavior was inconsistent: a sublist of an +outer-level list needed two spaces indentation, but a sublist of this +sublist needed three spaces. It is not surprising, then, that different +implementations of markdown have developed very different rules for +determining what comes under a list item. (Pandoc and python-markdown, +for example, stuck with Gruber's syntax description and the four-space +rule, while discount, redcarpet, marked, PHP markdown, and others +followed `Markdown.pl`'s behavior more closely.) + +Unfortunately, given the divergences between implementations, there +is no way to give a spec for list items that will be guaranteed not +to break any existing documents. However, the spec given here should +correctly handle lists formatted with either the four-space rule or +the more forgiving `Markdown.pl` behavior, provided they are laid out +in a way that is natural for a human to read. + +The strategy here is to let the width and indentation of the list marker +determine the indentation necessary for blocks to fall under the list +item, rather than having a fixed and arbitrary number. The writer can +think of the body of the list item as a unit which gets indented to the +right enough to fit the list marker (and any indentation on the list +marker). (The laziness rule, #4, then allows continuation lines to be +unindented if needed.) + +This rule is superior, we claim, to any rule requiring a fixed level of +indentation from the margin. The four-space rule is clear but +unnatural. It is quite unintuitive that + +``` markdown +- foo + + bar + + - baz +``` + +should be parsed as two lists with an intervening paragraph, + +``` html +
    +
  • foo
  • +
+

bar

+
    +
  • baz
  • +
+``` + +as the four-space rule demands, rather than a single list, + +``` html +
    +
  • foo

    +

    bar>

  • +
  • baz

  • +
+``` + +The choice of four spaces is arbitrary. It can be learned, but it is +not likely to be guessed, and it trips up beginners regularly. + +Would it help to adopt a two-space rule? The problem is that such +a rule, together with the rule allowing 1--3 spaces indentation of the +initial list marker, allows text that is indented *less than* the +original list marker to be included in the list item. For example, +`Markdown.pl` parses + +``` markdown + - one + + two +``` + +as a single list item, with `two` a continuation paragraph: + +``` html +
    +
  • one

    +

    two

  • +
+``` + +and similarly + +``` markdown +> - one +> +> two +``` + +as + +``` html +
+
    +
  • one

    +

    two

  • +
+
+``` + +This is extremely unintuitive. + +Rather than requiring a fixed indent from the margin, we could require +a fixed indent (say, two spaces, or even one space) from the list marker (which +may itself be indented). This proposal would remove the last anomaly +discussed. Unlike the spec presented above, it would count the following +as a list item with a subparagraph, even though the paragraph `bar` +is not indented as far as the first paragraph `foo`: + +``` markdown + 10. foo + + bar +``` + +Arguably this text does read like a list item with `bar` as a subparagraph, +which may count in favor of the proposal. However, on this proposal indented +code would have to be indented six spaces after the list marker. And this +would break a lot of existing markdown, which has the pattern: + +``` markdown +1. foo + + indented code +``` + +where the code is indented eight spaces. The spec above, by contrast, will +parse this text as expected, since the code block's indentation is measured +from the beginning of `foo`. + +The one case that needs special treatment is a list item that *starts* +with indented code. How much indentation is required in that case, since +we don't have a "first paragraph" to measure from? Rule #2 simply stipulates +that in such cases, we require one space indentation from the list marker +(and then the normal four spaces for the indented code). This will match the +four-space rule in cases where the list marker plus its initial indentation +takes four spaces (a common case), but diverge in other cases. + +## Lists + +A [list](#list)
is a sequence of one or more +list items [of the same type](#of-the-same-type). The list items +may be separated by single [blank lines](#blank-line), but two +blank lines end all containing lists. + +Two list items are [of the same type](#of-the-same-type) + if they begin with a [list +marker](#list-marker) of the same type. Two list markers are of the +same type if (a) they are bullet list markers using the same character +(`-`, `+`, or `*`) or (b) they are ordered list numbers with the same +delimiter (either `.` or `)`). + +A list is an [ordered list](#ordered-list) +if its constituent list items begin with +[ordered list markers](#ordered-list-marker), and a [bullet +list](#bullet-list) if its constituent list +items begin with [bullet list markers](#bullet-list-marker). + +The [start number](#start-number) +of an [ordered list](#ordered-list) is determined by the list number of +its initial list item. The numbers of subsequent list items are +disregarded. + +A list is [loose](#loose) if it any of its constituent list items are +separated by blank lines, or if any of its constituent list items +directly contain two block-level elements with a blank line between +them. Otherwise a list is [tight](#tight). (The difference in HTML output +is that paragraphs in a loose with are wrapped in `

` tags, while +paragraphs in a tight list are not.) + +Changing the bullet or ordered list delimiter starts a new list: + +. +- foo +- bar ++ baz +. +

    +
  • foo
  • +
  • bar
  • +
+
    +
  • baz
  • +
+. + +. +1. foo +2. bar +3) baz +. +
    +
  1. foo
  2. +
  3. bar
  4. +
+
    +
  1. baz
  2. +
+. + +There can be blank lines between items, but two blank lines end +a list: + +. +- foo + +- bar + + +- baz +. +
    +
  • foo

  • +
  • bar

  • +
+
    +
  • baz
  • +
+. + +As illustrated above in the section on [list items](#list-item), +two blank lines between blocks *within* a list item will also end a +list: + +. +- foo + + + bar +- baz +. +
    +
  • foo
  • +
+

bar

+
    +
  • baz
  • +
+. + +Indeed, two blank lines will end *all* containing lists: + +. +- foo + - bar + - baz + + + bim +. +
    +
  • foo +
      +
    • bar +
        +
      • baz
      • +
    • +
  • +
+
  bim
+
+. + +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: + +. +- foo +- bar + + +- baz +- bim +. +
    +
  • foo
  • +
  • bar
  • +
+
    +
  • baz
  • +
  • bim
  • +
+. + +. +- foo + + notcode + +- foo + + + code +. +
    +
  • foo

    +

    notcode

  • +
  • foo

  • +
+
code
+
+. + +List items need not be indented to the same level. The following +list items will be treated as items at the same list level, +since none is indented enough to belong to the previous list +item: + +. +- a + - b + - c + - d + - e + - f +- g +. +
    +
  • a
  • +
  • b
  • +
  • c
  • +
  • d
  • +
  • e
  • +
  • f
  • +
  • g
  • +
+. + +This is a loose list, because there is a blank line between +two of the list items: + +. +- a +- b + +- c +. +
    +
  • a

  • +
  • b

  • +
  • c

  • +
+. + +So is this, with a empty second item: + +. +* a +* + +* c +. +
    +
  • a

  • +
  • +
  • c

  • +
+. + +These are loose lists, even though there is no space between the items, +because one of the items directly contains two block-level elements +with a blank line between them: + +. +- a +- b + + c +- d +. +
    +
  • a

  • +
  • b

    +

    c

  • +
  • d

  • +
+. + +. +- a +- b + + [ref]: /url +- d +. +
    +
  • a

  • +
  • b

  • +
  • d

  • +
+. + +This is a tight list, because the blank lines are in a code block: + +. +- a +- ``` + b + + + ``` +- c +. +
    +
  • a
  • +
  • b
    +
    +
    +
  • +
  • c
  • +
+. + +This is a tight list, because the blank line is between two +paragraphs of a sublist. So the inner list is loose while +the other list is tight: + +. +- a + - b + + c +- d +. +
    +
  • a +
      +
    • b

      +

      c

    • +
  • +
  • d
  • +
+. + +This is a tight list, because the blank line is inside the +block quote: + +. +* a + > b + > +* c +. +
    +
  • a +
    +

    b

    +
  • +
  • c
  • +
+. + +This list is tight, because the consecutive block elements +are not separated by blank lines: + +. +- a + > b + ``` + c + ``` +- d +. +
    +
  • a +
    +

    b

    +
    +
    c
    +
  • +
  • d
  • +
+. + +A single-paragraph list is tight: + +. +- a +. +
    +
  • a
  • +
+. + +. +- a + - b +. +
    +
  • a +
      +
    • b
    • +
  • +
+. + +Here the outer list is loose, the inner list tight: + +. +* foo + * bar + + baz +. +
    +
  • foo

    +
      +
    • bar
    • +
    +

    baz

  • +
+. + +. +- a + - b + - c + +- d + - e + - f +. +
    +
  • a

    +
      +
    • b
    • +
    • c
    • +
  • +
  • d

    +
      +
    • e
    • +
    • f
    • +
  • +
+. + +# Inlines + +Inlines are parsed sequentially from the beginning of the character +stream to the end (left to right, in left-to-right languages). +Thus, for example, in + +. +`hi`lo` +. +

hilo`

+. + +`hi` is parsed as code, leaving the backtick at the end as a literal +backtick. + +## Backslash escapes + +Any ASCII punctuation character may be backslash-escaped: + +. +\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~ +. +

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

+. + +Backslashes before other characters are treated as literal +backslashes: + +. +\→\A\a\ \3\φ\« +. +

\ \A\a\ \3\φ\«

+. + +Escaped characters are treated as regular characters and do +not have their usual markdown meanings: + +. +\*not emphasized* +\
not a tag +\[not a link](/foo) +\`not code` +1\. not a list +\* not a list +\# not a header +\[foo]: /url "not a reference" +. +

*not emphasized* +<br/> not a tag +[not a link](/foo) +`not code` +1. not a list +* not a list +# not a header +[foo]: /url "not a reference"

+. + +If a backslash is itself escaped, the following character is not: + +. +\\*emphasis* +. +

\emphasis

+. + +A backslash at the end of the line is a hard line break: + +. +foo\ +bar +. +

foo
+bar

+. + +Backslash escapes do not work in code blocks, code spans, autolinks, or +raw HTML: + +. +`` \[\` `` +. +

\[\`

+. + +. + \[\] +. +
\[\]
+
+. + +. +~~~ +\[\] +~~~ +. +
\[\]
+
+. + +. + +. +

http://google.com?find=\*

+. + +. + +. +

+. + +But they work in all other contexts, including URLs and link titles, +link references, and info strings in [fenced code +blocks](#fenced-code-block): + +. +[foo](/bar\* "ti\*tle") +. +

foo

+. + +. +[foo] + +[foo]: /bar\* "ti\*tle" +. +

foo

+. + +. +``` foo\+bar +foo +``` +. +
foo
+
+. + + +## Entities + +Entities are parsed as entities, not as literal text, in all contexts +except code spans and code blocks. Three kinds of entities are recognized. + +[Named entities](#name-entities) consist of `&` ++ a string of 2-32 alphanumerics beginning with a letter + `;`. + +. +  & © Æ Ď ¾ ℋ ⅆ ∲ +. +

  & © Æ Ď ¾ ℋ ⅆ ∲

+. + +[Decimal entities](#decimal-entities)
+consist of `&` + a string of 1--8 arabic digits + `;`. + +. + # Ӓ Ϡ � +. +

 # Ӓ Ϡ �

+. + +[Hexadecimal entities](#hexadecimal-entities)
+consist of `&` + either `X` or `x` + a string of 1-8 hexadecimal digits ++ `;`. + +. + " ആ ಫ +. +

 " ആ ಫ

+. + +Here are some nonentities: + +. +  &x; &#; &#x; � &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?; +. +

&nbsp &x; &#; &#x; &#123456789; &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?;

+. + +Although HTML5 does accept some entities without a trailing semicolon +(such as `©`), these are not recognized as entities here: + +. +© +. +

&copy

+. + +On the other hand, many strings that are not on the list of HTML5 +named entities are recognized as entities here: + +. +&MadeUpEntity; +. +

&MadeUpEntity;

+. + +Entities are recognized in any any context besides code spans or +code blocks, including raw HTML, URLs, [link titles](#link-title), and +[fenced code block](#fenced-code-block) info strings: + +. +
+. +

+. + +. +[foo](/föö "föö") +. +

foo

+. + +. +[foo] + +[foo]: /föö "föö" +. +

foo

+. + +. +``` föö +foo +``` +. +
foo
+
+. + +Entities are treated as literal text in code spans and code blocks: + +. +`föö` +. +

f&ouml;&ouml;

+. + +. + föfö +. +
f&ouml;f&ouml;
+
+. + +## Code span + +A [backtick string](#backtick-string) +is a string of one or more backtick characters (`` ` ``) that is neither +preceded nor followed by a backtick. + +A code span begins with a backtick string and ends with a backtick +string of equal length. The contents of the code span are the +characters between the two backtick strings, with leading and trailing +spaces and newlines removed, and consecutive spaces and newlines +collapsed to single spaces. + +This is a simple code span: + +. +`foo` +. +

foo

+. + +Here two backticks are used, because the code contains a backtick. +This example also illustrates stripping of leading and trailing spaces: + +. +`` foo ` bar `` +. +

foo ` bar

+. + +This example shows the motivation for stripping leading and trailing +spaces: + +. +` `` ` +. +

``

+. + +Newlines are treated like spaces: + +. +`` +foo +`` +. +

foo

+. + +Interior spaces and newlines are collapsed into single spaces, just +as they would be by a browser: + +. +`foo bar + baz` +. +

foo bar baz

+. + +Q: Why not just leave the spaces, since browsers will collapse them +anyway? A: Because we might be targeting a non-HTML format, and we +shouldn't rely on HTML-specific rendering assumptions. + +(Existing implementations differ in their treatment of internal +spaces and newlines. Some, including `Markdown.pl` and +`showdown`, convert an internal newline into a `
` tag. +But this makes things difficult for those who like to hard-wrap +their paragraphs, since a line break in the midst of a code +span will cause an unintended line break in the output. Others +just leave internal spaces as they are, which is fine if only +HTML is being targeted.) + +. +`foo `` bar` +. +

foo `` bar

+. + +Note that backslash escapes do not work in code spans. All backslashes +are treated literally: + +. +`foo\`bar` +. +

foo\bar`

+. + +Backslash escapes are never needed, because one can always choose a +string of *n* backtick characters as delimiters, where the code does +not contain any strings of exactly *n* backtick characters. + +Code span backticks have higher precedence than any other inline +constructs except HTML tags and autolinks. Thus, for example, this is +not parsed as emphasized text, since the second `*` is part of a code +span: + +. +*foo`*` +. +

*foo*

+. + +And this is not parsed as a link: + +. +[not a `link](/foo`) +. +

[not a link](/foo)

+. + +But this is a link: + +. +` +. +

http://foo.bar.`baz`

+. + +And this is an HTML tag: + +. +` +. +

`

+. + +When a backtick string is not closed by a matching backtick string, +we just have literal backticks: + +. +```foo`` +. +

```foo``

+. + +. +`foo +. +

`foo

+. + +## Emphasis and strong emphasis + +John Gruber's original [markdown syntax +description](http://daringfireball.net/projects/markdown/syntax#em) says: + +> Markdown treats asterisks (`*`) and underscores (`_`) as indicators of +> emphasis. Text wrapped with one `*` or `_` will be wrapped with an HTML +> `` tag; double `*`'s or `_`'s will be wrapped with an HTML `` +> tag. + +This is enough for most users, but these rules leave much undecided, +especially when it comes to nested emphasis. The original +`Markdown.pl` test suite makes it clear that triple `***` and +`___` delimiters can be used for strong emphasis, and most +implementations have also allowed the following patterns: + +``` markdown +***strong emph*** +***strong** in emph* +***emph* in strong** +**in strong *emph*** +*in emph **strong*** +``` + +The following patterns are less widely supported, but the intent +is clear and they are useful (especially in contexts like bibliography +entries): + +``` markdown +*emph *with emph* in it* +**strong **with strong** in it** +``` + +Many implementations have also restricted intraword emphasis to +the `*` forms, to avoid unwanted emphasis in words containing +internal underscores. (It is best practice to put these in code +spans, but users often do not.) + +``` markdown +internal emphasis: foo*bar*baz +no emphasis: foo_bar_baz +``` + +The following rules capture all of these patterns, while allowing +for efficient parsing strategies that do not backtrack: + +1. A single `*` character [can open emphasis](#can-open-emphasis) +
iff + + (a) it is not part of a sequence of four or more unescaped `*`s, + (b) it is not followed by whitespace, and + (c) either it is not followed by a `*` character or it is + followed immediately by strong emphasis. + +2. A single `_` character [can open emphasis](#can-open-emphasis) iff + + (a) it is not part of a sequence of four or more unescaped `_`s, + (b) it is not followed by whitespace, + (c) is is not preceded by an ASCII alphanumeric character, and + (d) either it is not followed by a `_` character or it is + followed immediately by strong emphasis. + +3. A single `*` character [can close emphasis](#can-close-emphasis) + iff + + (a) it is not part of a sequence of four or more unescaped `*`s, and + (b) it is not preceded by whitespace. + +4. A single `_` character [can close emphasis](#can-close-emphasis) iff + + (a) it is not part of a sequence of four or more unescaped `_`s, + (b) it is not preceded by whitespace, and + (c) it is not followed by an ASCII alphanumeric character. + +5. A double `**` [can open strong emphasis](#can-open-strong-emphasis) + iff + + (a) it is not part of a sequence of four or more unescaped `*`s, + (b) it is not followed by whitespace, and + (c) either it is not followed by a `*` character or it is + followed immediately by emphasis. + +6. A double `__` [can open strong emphasis](#can-open-strong-emphasis) + iff + + (a) it is not part of a sequence of four or more unescaped `_`s, + (b) it is not followed by whitespace, and + (c) it is not preceded by an ASCII alphanumeric character, and + (d) either it is not followed by a `_` character or it is + followed immediately by emphasis. + +7. A double `**` [can close strong emphasis](#can-close-strong-emphasis) + iff + + (a) it is not part of a sequence of four or more unescaped `*`s, and + (b) it is not preceded by whitespace. + +8. A double `__` [can close strong emphasis](#can-close-strong-emphasis) + iff + + (a) it is not part of a sequence of four or more unescaped `_`s, + (b) it is not preceded by whitespace, and + (c) it is not followed by an ASCII alphanumeric character. + +9. Emphasis begins with a delimiter that [can open + emphasis](#can-open-emphasis) and includes inlines parsed + sequentially until a delimiter that [can close + emphasis](#can-close-emphasis), and that uses the same + character (`_` or `*`) as the opening delimiter, is reached. + +10. Strong emphasis begins with a delimiter that [can open strong + emphasis](#can-open-strong-emphasis) and includes inlines parsed + sequentially until a delimiter that [can close strong + emphasis](#can-close-strong-emphasis), and that uses the + same character (`_` or `*`) as the opening delimiter, is reached. + +These rules can be illustrated through a series of examples. + +Simple emphasis: + +. +*foo bar* +. +

foo bar

+. + +. +_foo bar_ +. +

foo bar

+. + +Simple strong emphasis: + +. +**foo bar** +. +

foo bar

+. + +. +__foo bar__ +. +

foo bar

+. + +Emphasis can continue over line breaks: + +. +*foo +bar* +. +

foo +bar

+. + +. +_foo +bar_ +. +

foo +bar

+. + +. +**foo +bar** +. +

foo +bar

+. + +. +__foo +bar__ +. +

foo +bar

+. + +Emphasis can contain other inline constructs: + +. +*foo [bar](/url)* +. +

foo bar

+. + +. +_foo [bar](/url)_ +. +

foo bar

+. + +. +**foo [bar](/url)** +. +

foo bar

+. + +. +__foo [bar](/url)__ +. +

foo bar

+. + +Symbols contained in other inline constructs will not +close emphasis: + +. +*foo [bar*](/url) +. +

*foo bar*

+. + +. +_foo [bar_](/url) +. +

_foo bar_

+. + +. +** +. +

**

+. + +. +__ +. +

__

+. + +. +*a `*`* +. +

a *

+. + +. +_a `_`_ +. +

a _

+. + +. +**a +. +

**ahttp://foo.bar?q=**

+. + +. +__a +. +

__ahttp://foo.bar?q=__

+. + +This is not emphasis, because the opening delimiter is +followed by white space: + +. +and * foo bar* +. +

and * foo bar*

+. + +. +_ foo bar_ +. +

_ foo bar_

+. + +. +and ** foo bar** +. +

and ** foo bar**

+. + +. +__ foo bar__ +. +

__ foo bar__

+. + +This is not emphasis, because the closing delimiter is +preceded by white space: + +. +and *foo bar * +. +

and *foo bar *

+. + +. +and _foo bar _ +. +

and _foo bar _

+. + +. +and **foo bar ** +. +

and **foo bar **

+. + +. +and __foo bar __ +. +

and __foo bar __

+. + +The rules imply that a sequence of four or more unescaped `*` or +`_` characters will always be parsed as a literal string: + +. +****hi**** +. +

****hi****

+. + +. +_____hi_____ +. +

_____hi_____

+. + +. +Sign here: _________ +. +

Sign here: _________

+. + +The rules also imply that there can be no empty emphasis or strong +emphasis: + +. +** is not an empty emphasis +. +

** is not an empty emphasis

+. + +. +**** is not an empty strong emphasis +. +

**** is not an empty strong emphasis

+. + +To include `*` or `_` in emphasized sections, use backslash escapes +or code spans: + +. +*here is a \** +. +

here is a *

+. + +. +__this is a double underscore (`__`)__ +. +

this is a double underscore (__)

+. + +`*` delimiters allow intra-word emphasis; `_` delimiters do not: + +. +foo*bar*baz +. +

foobarbaz

+. + +. +foo_bar_baz +. +

foo_bar_baz

+. + +. +foo__bar__baz +. +

foo__bar__baz

+. + +. +_foo_bar_baz_ +. +

foo_bar_baz

+. + +. +11*15*32 +. +

111532

+. + +. +11_15_32 +. +

11_15_32

+. + +Internal underscores will be ignored in underscore-delimited +emphasis: + +. +_foo_bar_baz_ +. +

foo_bar_baz

+. + +. +__foo__bar__baz__ +. +

foo__bar__baz

+. + +The rules are sufficient for the following nesting patterns: + +. +***foo bar*** +. +

foo bar

+. + +. +___foo bar___ +. +

foo bar

+. + +. +***foo** bar* +. +

foo bar

+. + +. +___foo__ bar_ +. +

foo bar

+. + +. +***foo* bar** +. +

foo bar

+. + +. +___foo_ bar__ +. +

foo bar

+. + +. +*foo **bar*** +. +

foo bar

+. + +. +_foo __bar___ +. +

foo bar

+. + +. +**foo *bar*** +. +

foo bar

+. + +. +__foo _bar___ +. +

foo bar

+. + +. +*foo **bar*** +. +

foo bar

+. + +. +_foo __bar___ +. +

foo bar

+. + +. +*foo *bar* baz* +. +

foo bar baz

+. + +. +_foo _bar_ baz_ +. +

foo bar baz

+. + +. +**foo **bar** baz** +. +

foo bar baz

+. + +. +__foo __bar__ baz__ +. +

foo bar baz

+. + +. +*foo **bar** baz* +. +

foo bar baz

+. + +. +_foo __bar__ baz_ +. +

foo bar baz

+. + +. +**foo *bar* baz** +. +

foo bar baz

+. + +. +__foo _bar_ baz__ +. +

foo bar baz

+. + +Note that you cannot nest emphasis directly inside emphasis +using the same delimeter, or strong emphasis directly inside +strong emphasis: + +. +**foo** +. +

foo

+. + +. +****foo**** +. +

****foo****

+. + +For these nestings, you need to switch delimiters: + +. +*_foo_* +. +

foo

+. + +. +**__foo__** +. +

foo

+. + +Note that a `*` followed by a `*` can close emphasis, and +a `**` followed by a `*` can close strong emphasis (and +similarly for `_` and `__`): + +. +*foo** +. +

foo*

+. + +. +*foo *bar** +. +

foo bar

+. + +. +**foo*** +. +

foo*

+. + +The following contains no strong emphasis, because the opening +delimiter is closed by the first `*` before `bar`: + +. +*foo**bar*** +. +

foobar**

+. + +However, a string of four or more `****` can never close emphasis: + +. +*foo**** +. +

*foo****

+. + +Note that there are some asymmetries here: + +. +*foo** + +**foo* +. +

foo*

+

**foo*

+. + +. +*foo *bar** + +**foo* bar* +. +

foo bar

+

**foo* bar*

+. + +More cases with mismatched delimiters: + +. +**foo* bar* +. +

**foo* bar*

+. + +. +*bar*** +. +

bar**

+. + +. +***foo* +. +

***foo*

+. + +. +**bar*** +. +

bar*

+. + +. +***foo** +. +

***foo**

+. + +. +***foo *bar* +. +

***foo bar

+. + +## Links + +A link contains a [link label](#link-label) (the visible text), +a [destination](#destination) (the URI that is the link destination), +and optionally a [link title](#link-title). There are two basic kinds +of links in markdown. In [inline links](#inline-links) the destination +and title are given immediately after the lable. In [reference +links](#reference-links) the destination and title are defined elsewhere +in the document. + +A [link label](#link-label) consists of + +- an opening `[`, followed by +- zero or more backtick code spans, autolinks, HTML tags, link labels, + backslash-escaped ASCII punctuation characters, or non-`]` characters, + followed by +- a closing `]`. + +These rules are motivated by the following intuitive ideas: + +- A link label is a container for inline elements. +- The square brackets bind more tightly than emphasis markers, + but less tightly than `<>` or `` ` ``. +- Link labels may contain material in matching square brackets. + +A [link destination](#link-destination) +consists of either + +- a sequence of zero or more characters between an opening `<` and a + closing `>` that contains no line breaks or unescaped `<` or `>` + characters, or + +- a nonempty sequence of characters that does not include + ASCII space or control characters, and includes parentheses + only if (a) they are backslash-escaped or (b) they are part of + a balanced pair of unescaped parentheses that is not itself + inside a balanced pair of unescaped paretheses. + +A [link title](#link-title) consists of either + +- a sequence of zero or more characters between straight double-quote + characters (`"`), including a `"` character only if it is + backslash-escaped, or + +- a sequence of zero or more characters between straight single-quote + characters (`'`), including a `'` character only if it is + backslash-escaped, or + +- a sequence of zero or more characters between matching parentheses + (`(...)`), including a `)` character only if it is backslash-escaped. + +An [inline link](#inline-link) +consists of a [link label](#link-label) followed immediately +by a left parenthesis `(`, optional whitespace, +an optional [link destination](#link-destination), +an optional [link title](#link-title) separated from the link +destination by whitespace, optional whitespace, and a right +parenthesis `)`. The link's text consists of the label (excluding +the enclosing square brackets) parsed as inlines. The link's +URI consists of the link destination, excluding enclosing `<...>` if +present, with backslash-escapes in effect as described above. The +link's title consists of the link title, excluding its enclosing +delimiters, with backslash-escapes in effect as described above. + +Here is a simple inline link: + +. +[link](/uri "title") +. +

link

+. + +The title may be omitted: + +. +[link](/uri) +. +

link

+. + +Both the title and the destination may be omitted: + +. +[link]() +. +

link

+. + +. +[link](<>) +. +

link

+. + + +If the destination contains spaces, it must be enclosed in pointy +braces: + +. +[link](/my uri) +. +

[link](/my uri)

+. + +. +[link](
) +. +

link

+. + +The destination cannot contain line breaks, even with pointy braces: + +. +[link](foo +bar) +. +

[link](foo +bar)

+. + +One level of balanced parentheses is allowed without escaping: + +. +[link]((foo)and(bar)) +. +

link

+. + +However, if you have parentheses within parentheses, you need to escape +or use the `<...>` form: + +. +[link](foo(and(bar))) +. +

[link](foo(and(bar)))

+. + +. +[link](foo(and\(bar\))) +. +

link

+. + +. +[link]() +. +

link

+. + +Parentheses and other symbols can also be escaped, as usual +in markdown: + +. +[link](foo\)\:) +. +

link

+. + +URL-escaping and entities should be left alone inside the destination: + +. +[link](foo%20bä) +. +

link

+. + +Note that, because titles can often be parsed as destinations, +if you try to omit the destination and keep the title, you'll +get unexpected results: + +. +[link]("title") +. +

link

+. + +Titles may be in single quotes, double quotes, or parentheses: + +. +[link](/url "title") +[link](/url 'title') +[link](/url (title)) +. +

link +link +link

+. + +Backslash escapes and entities may be used in titles: + +. +[link](/url "title \""") +. +

link

+. + +Nested balanced quotes are not allowed without escaping: + +. +[link](/url "title "and" title") +. +

[link](/url "title "and" title")

+. + +But it is easy to work around this by using a different quote type: + +. +[link](/url 'title "and" title') +. +

link

+. + +(Note: `Markdown.pl` did allow double quotes inside a double-quoted +title, and its test suite included a test demonstrating this. +But it is hard to see a good rationale for the extra complexity this +brings, since there are already many ways---backslash escaping, +entities, or using a different quote type for the enclosing title---to +write titles containing double quotes. `Markdown.pl`'s handling of +titles has a number of other strange features. For example, it allows +single-quoted titles in inline links, but not reference links. And, in +reference links but not inline links, it allows a title to begin with +`"` and end with `)`. `Markdown.pl` 1.0.1 even allows titles with no closing +quotation mark, though 1.0.2b8 does not. It seems preferable to adopt +a simple, rational rule that works the same way in inline links and +link reference definitions.) + +Whitespace is allowed around the destination and title: + +. +[link]( /uri + "title" ) +. +

link

+. + +But it is not allowed between the link label and the +following parenthesis: + +. +[link] (/uri) +. +

[link] (/uri)

+. + +Note that this is not a link, because the closing `]` occurs in +an HTML tag: + +. +[foo +. +

[foo

+. + + +There are three kinds of [reference links](#reference-link): + + +A [full reference link](#full-reference-link) +consists of a [link label](#link-label), optional whitespace, and +another [link label](#link-label) that [matches](#matches) a +[reference link definition](#reference-link-definition) elsewhere in the +document. + +One label [matches](#matches) +another just in case their normalized forms are equal. To normalize a +label, perform the *unicode case fold* and collapse consecutive internal +whitespace to a single space. If there are multiple matching reference +link definitions, the one that comes first in the document is used. (It +is desirable in such cases to emit a warning.) + +The contents of the first link label are parsed as inlines, which are +used as the link's text. The link's URI and title are provided by the +matching reference link definition. + +Here is a simple example: + +. +[foo][bar] + +[bar]: /url "title" +. +

foo

+. + +The first label can contain inline content: + +. +[*foo\!*][bar] + +[bar]: /url "title" +. +

foo!

+. + +Matching is case-insensitive: + +. +[foo][BaR] + +[bar]: /url "title" +. +

foo

+. + +Unicode case fold is used: + +. +[Толпой][Толпой] is a Russian word. + +[ТОЛПОЙ]: /url +. +

Толпой is a Russian word.

+. + +Consecutive internal whitespace is treated as one space for +purposes of determining matching: + +. +[Foo + bar]: /url + +[Baz][Foo bar] +. +

Baz

+. + +There can be whitespace between the two labels: + +. +[foo] [bar] + +[bar]: /url "title" +. +

foo

+. + +. +[foo] +[bar] + +[bar]: /url "title" +. +

foo

+. + +When there are multiple matching reference link definitions, +the first is used: + +. +[foo]: /url1 + +[foo]: /url2 + +[bar][foo] +. +

bar

+. + +Note that matching is performed on normalized strings, not parsed +inline content. So the following does not match, even though the +labels define equivalent inline content: + +. +[bar][foo\!] + +[foo!]: /url +. +

[bar][foo!]

+. + +A [collapsed reference link](#collapsed-reference-link) + consists of a [link +label](#link-label) that [matches](#matches) a [reference link +definition](#reference-link-definition) elsewhere in the +document, optional whitespace, and the string `[]`. The contents of the +first link label are parsed as inlines, which are used as the link's +text. The link's URI and title are provided by the matching reference +link definition. Thus, `[foo][]` is equivalent to `[foo][foo]`. + +. +[foo][] + +[foo]: /url "title" +. +

foo

+. + +. +[*foo* bar][] + +[*foo* bar]: /url "title" +. +

foo bar

+. + +The link labels are case-insensitive: + +. +[Foo][] + +[foo]: /url "title" +. +

Foo

+. + + +As with full reference links, whitespace is allowed +between the two sets of brackets: + +. +[foo] +[] + +[foo]: /url "title" +. +

foo

+. + +A [shortcut reference link](#shortcut-reference-link) + consists of a [link +label](#link-label) that [matches](#matches) a [reference link +definition](#reference-link-definition) elsewhere in the +document and is not followed by `[]` or a link label. +The contents of the first link label are parsed as inlines, +which are used as the link's text. the link's URI and title +are provided by the matching reference link definition. +Thus, `[foo]` is equivalent to `[foo][]`. + +. +[foo] + +[foo]: /url "title" +. +

foo

+. + +. +[*foo* bar] + +[*foo* bar]: /url "title" +. +

foo bar

+. + +. +[[*foo* bar]] + +[*foo* bar]: /url "title" +. +

[foo bar]

+. + +The link labels are case-insensitive: + +. +[Foo] + +[foo]: /url "title" +. +

Foo

+. + +If you just want bracketed text, you can backslash-escape the +opening bracket to avoid links: + +. +\[foo] + +[foo]: /url "title" +. +

[foo]

+. + +Note that this is a link, because link labels bind more tightly +than emphasis: + +. +[foo*]: /url + +*[foo*] +. +

*foo*

+. + +However, this is not, because link labels bind tight less +tightly than code backticks: + +. +[foo`]: /url + +[foo`]` +. +

[foo]

+. + +Link labels can contain matched square brackets: + +. +[[[foo]]] + +[[[foo]]]: /url +. +

[[foo]]

+. + +. +[[[foo]]] + +[[[foo]]]: /url1 +[foo]: /url2 +. +

[[foo]]

+. + +For non-matching brackets, use backslash escapes: + +. +[\[foo] + +[\[foo]: /url +. +

[foo

+. + +Full references take precedence over shortcut references: + +. +[foo][bar] + +[foo]: /url1 +[bar]: /url2 +. +

foo

+. + +In the following case `[bar][baz]` is parsed as a reference, +`[foo]` as normal text: + +. +[foo][bar][baz] + +[baz]: /url +. +

[foo]bar

+. + +Here, though, `[foo][bar]` is parsed as a reference, since +`[bar]` is defined: + +. +[foo][bar][baz] + +[baz]: /url1 +[bar]: /url2 +. +

foobaz

+. + +Here `[foo]` is not parsed as a shortcut reference, because it +is followed by a link label (even though `[bar]` is not defined): + +. +[foo][bar][baz] + +[baz]: /url1 +[foo]: /url2 +. +

[foo]bar

+. + + +## Images + +An (unescaped) exclamation mark (`!`) followed by a reference or +inline link will be parsed as an image. The link label will be +used as the image's alt text, and the link title, if any, will +be used as the image's title. + +. +![foo](/url "title") +. +

foo

+. + +. +![foo *bar*] + +[foo *bar*]: train.jpg "train & tracks" +. +

foo <em>bar</em>

+. + +. +![foo *bar*][] + +[foo *bar*]: train.jpg "train & tracks" +. +

foo <em>bar</em>

+. + +. +![foo *bar*][foobar] + +[FOOBAR]: train.jpg "train & tracks" +. +

foo <em>bar</em>

+. + +. +![foo](train.jpg) +. +

foo

+. + +. +My ![foo bar](/path/to/train.jpg "title" ) +. +

My foo bar

+. + +. +![foo]() +. +

foo

+. + +. +![](/url) +. +

+. + +Reference-style: + +. +![foo] [bar] + +[bar]: /url +. +

foo

+. + +. +![foo] [bar] + +[BAR]: /url +. +

foo

+. + +Collapsed: + +. +![foo][] + +[foo]: /url "title" +. +

foo

+. + +. +![*foo* bar][] + +[*foo* bar]: /url "title" +. +

<em>foo</em> bar

+. + +The labels are case-insensitive: + +. +![Foo][] + +[foo]: /url "title" +. +

Foo

+. + +As with full reference links, whitespace is allowed +between the two sets of brackets: + +. +![foo] +[] + +[foo]: /url "title" +. +

foo

+. + +Shortcut: + +. +![foo] + +[foo]: /url "title" +. +

foo

+. + +. +![*foo* bar] + +[*foo* bar]: /url "title" +. +

<em>foo</em> bar

+. + +. +![[foo]] + +[[foo]]: /url "title" +. +

[foo]

+. + +The link labels are case-insensitive: + +. +![Foo] + +[foo]: /url "title" +. +

Foo

+. + +If you just want bracketed text, you can backslash-escape the +opening `!` and `[`: + +. +\!\[foo] + +[foo]: /url "title" +. +

![foo]

+. + +If you want a link after a literal `!`, backslash-escape the +`!`: + +. +\![foo] + +[foo]: /url "title" +. +

!foo

+. + +## Autolinks + +Autolinks are absolute URIs and email addresses inside `<` and `>`. +They are parsed as links, with the URL or email address as the link +label. + +A [URI autolink](#uri-autolink) +consists of `<`, followed by an [absolute +URI](#absolute-uri) not containing `<`, followed by `>`. It is parsed +as a link to the URI, with the URI as the link's label. + +An [absolute URI](#absolute-uri), +for these purposes, consists of a [scheme](#scheme) followed by a colon (`:`) +followed by zero or more characters other than ASCII whitespace and +control characters, `<`, and `>`. If the URI includes these characters, +you must use percent-encoding (e.g. `%20` for a space). + +The following [schemes](#scheme) +are recognized (case-insensitive): +`coap`, `doi`, `javascript`, `aaa`, `aaas`, `about`, `acap`, `cap`, +`cid`, `crid`, `data`, `dav`, `dict`, `dns`, `file`, `ftp`, `geo`, `go`, +`gopher`, `h323`, `http`, `https`, `iax`, `icap`, `im`, `imap`, `info`, +`ipp`, `iris`, `iris.beep`, `iris.xpc`, `iris.xpcs`, `iris.lwz`, `ldap`, +`mailto`, `mid`, `msrp`, `msrps`, `mtqp`, `mupdate`, `news`, `nfs`, +`ni`, `nih`, `nntp`, `opaquelocktoken`, `pop`, `pres`, `rtsp`, +`service`, `session`, `shttp`, `sieve`, `sip`, `sips`, `sms`, `snmp`,` +soap.beep`, `soap.beeps`, `tag`, `tel`, `telnet`, `tftp`, `thismessage`, +`tn3270`, `tip`, `tv`, `urn`, `vemmi`, `ws`, `wss`, `xcon`, +`xcon-userid`, `xmlrpc.beep`, `xmlrpc.beeps`, `xmpp`, `z39.50r`, +`z39.50s`, `adiumxtra`, `afp`, `afs`, `aim`, `apt`,` attachment`, `aw`, +`beshare`, `bitcoin`, `bolo`, `callto`, `chrome`,` chrome-extension`, +`com-eventbrite-attendee`, `content`, `cvs`,` dlna-playsingle`, +`dlna-playcontainer`, `dtn`, `dvb`, `ed2k`, `facetime`, `feed`, +`finger`, `fish`, `gg`, `git`, `gizmoproject`, `gtalk`, `hcp`, `icon`, +`ipn`, `irc`, `irc6`, `ircs`, `itms`, `jar`, `jms`, `keyparc`, `lastfm`, +`ldaps`, `magnet`, `maps`, `market`,` message`, `mms`, `ms-help`, +`msnim`, `mumble`, `mvn`, `notes`, `oid`, `palm`, `paparazzi`, +`platform`, `proxy`, `psyc`, `query`, `res`, `resource`, `rmi`, `rsync`, +`rtmp`, `secondlife`, `sftp`, `sgn`, `skype`, `smb`, `soldat`, +`spotify`, `ssh`, `steam`, `svn`, `teamspeak`, `things`, `udp`, +`unreal`, `ut2004`, `ventrilo`, `view-source`, `webcal`, `wtai`, +`wyciwyg`, `xfire`, `xri`, `ymsgr`. + +Here are some valid autolinks: + +. + +. +

http://foo.bar.baz

+. + +. + +. +

http://foo.bar.baz?q=hello&id=22&boolean

+. + +. + +. +

irc://foo.bar:2233/baz

+. + +Uppercase is also fine: + +. + +. +

MAILTO:FOO@BAR.BAZ

+. + +Spaces are not allowed in autolinks: + +. + +. +

<http://foo.bar/baz bim>

+. + +An [email autolink](#email-autolink) +consists of `<`, followed by an [email address](#email-address), +followed by `>`. The link's label is the email address, +and the URL is `mailto:` followed by the email address. + +An [email address](#email-address), +for these purposes, is anything that matches +the [non-normative regex from the HTML5 +spec](http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29): + + /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? + (?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ + +Examples of email autolinks: + +. + +. +

foo@bar.baz.com

+. + +. + +. +

foo+special@Bar.baz-bar0.com

+. + +These are not autolinks: + +. +<> +. +

<>

+. + +. + +. +

<heck://bing.bong>

+. + +. +< http://foo.bar > +. +

< http://foo.bar >

+. + +. + +. +

<foo.bar.baz>

+. + +. + +. +

<localhost:5001/foo>

+. + +## Raw HTML + +Text between `<` and `>` that looks like an HTML tag is parsed as a +raw HTML tag and will be rendered in HTML without escaping. +Tag and attribute names are not limited to current HTML tags, +so custom tags (and even, say, DocBook tags) may be used. + +Here is the grammar for tags: + +A [tag name](#tag-name) consists of an ASCII letter +followed by zero or more ASCII letters or digits. + +An [attribute](#attribute) consists of whitespace, +an **attribute name**, and an optional **attribute value +specification**. + +An [attribute name](#attribute-name) +consists of an ASCII letter, `_`, or `:`, followed by zero or more ASCII +letters, digits, `_`, `.`, `:`, or `-`. (Note: This is the XML +specification restricted to ASCII. HTML5 is laxer.) + +An [attribute value specification](#attribute-value-specification) + consists of optional whitespace, +a `=` character, optional whitespace, and an [attribute +value](#attribute-value). + +An [attribute value](#attribute-value) +consists of an [unquoted attribute value](#unquoted-attribute-value), +a [single-quoted attribute value](#single-quoted-attribute-value), +or a [double-quoted attribute value](#double-quoted-attribute-value). + +An [unquoted attribute value](#unquoted-attribute-value) + is a nonempty string of characters not +including spaces, `"`, `'`, `=`, `<`, `>`, or `` ` ``. + +A [single-quoted attribute value](#single-quoted-attribute-value) + consists of `'`, zero or more +characters not including `'`, and a final `'`. + +A [double-quoted attribute value](#double-quoted-attribute-value) + consists of `"`, zero or more +characters not including `"`, and a final `"`. + +An [open tag](#open-tag) consists of a `<` character, +a [tag name](#tag-name), zero or more [attributes](#attribute), +optional whitespace, an optional `/` character, and a `>` character. + +A [closing tag](#closing-tag) consists of the +string ``. + +An [HTML comment](#html-comment) consists of the +string ``. + +A [processing instruction](#processing-instruction) + consists of the string ``, and the string +`?>`. + +A [declaration](#declaration) consists of the +string ``, and +the character `>`. + +A [CDATA section](#cdata-section) consists of +the string ``, and the string `]]>`. + +An [HTML tag](#html-tag) consists of an [open +tag](#open-tag), a [closing tag](#closing-tag), an [HTML +comment](#html-comment), a [processing +instruction](#processing-instruction), an [element type +declaration](#element-type-declaration), or a [CDATA +section](#cdata-section). + +Here are some simple open tags: + +. + +. +

+. + +Empty elements: + +. + +. +

+. + +Whitespace is allowed: + +. + +. +

+. + +With attributes: + +. + +. +

+. + +Illegal tag names, not parsed as HTML: + +. +<33> <__> +. +

<33> <__>

+. + +Illegal attribute names: + +. +
+. +

<a h*#ref="hi">

+. + +Illegal attribute values: + +. +
+. +

</a href="foo">

+. + +Comments: + +. +foo +. +

foo

+. + +. +foo +. +

foo <!-- not a comment -- two hyphens -->

+. + +Processing instructions: + +. +foo +. +

foo

+. + +Declarations: + +. +foo +. +

foo

+. + +CDATA sections: + +. +foo &<]]> +. +

foo &<]]>

+. + +Entities are preserved in HTML attributes: + +. +
+. +

+. + +Backslash escapes do not work in HTML attributes: + +. + +. +

+. + +. + +. +

<a href=""">

+. + +## Hard line breaks + +A line break (not in a code span or HTML tag) that is preceded +by two or more spaces is parsed as a linebreak (rendered +in HTML as a `
` tag): + +. +foo +baz +. +

foo
+baz

+. + +For a more visible alternative, a backslash before the newline may be +used instead of two spaces: + +. +foo\ +baz +. +

foo
+baz

+. + +More than two spaces can be used: + +. +foo +baz +. +

foo
+baz

+. + +Leading spaces at the beginning of the next line are ignored: + +. +foo + bar +. +

foo
+bar

+. + +. +foo\ + bar +. +

foo
+bar

+. + +Line breaks can occur inside emphasis, links, and other constructs +that allow inline content: + +. +*foo +bar* +. +

foo
+bar

+. + +. +*foo\ +bar* +. +

foo
+bar

+. + +Line breaks do not occur inside code spans + +. +`code +span` +. +

code span

+. + +. +`code\ +span` +. +

code\ span

+. + +or HTML tags: + +. +
+. +

+. + +. + +. +

+. + +## Soft line breaks + +A regular line break (not in a code span or HTML tag) that is not +preceded by two or more spaces is parsed as a softbreak. (A +softbreak may be rendered in HTML either as a newline or as a space. +The result will be the same in browsers. In the examples here, a +newline will be used.) + +. +foo +baz +. +

foo +baz

+. + +Spaces at the end of the line and beginning of the next line are +removed: + +. +foo + baz +. +

foo +baz

+. + +A conforming parser may render a soft line break in HTML either as a +line break or as a space. + +A renderer may also provide an option to render soft line breaks +as hard line breaks. + +## Strings + +Any characters not given an interpretation by the above rules will +be parsed as string content. + +. +hello $.;'there +. +

hello $.;'there

+. + +. +Foo χρῆν +. +

Foo χρῆν

+. + +Internal spaces are preserved verbatim: + +. +Multiple spaces +. +

Multiple spaces

+. + + + +# Appendix A: A parsing strategy {-} + +## Overview {-} + +Parsing has two phases: + +1. In the first phase, lines of input are consumed and the block +structure of the document---its division into paragraphs, block quotes, +list items, and so on---is constructed. Text is assigned to these +blocks but not parsed. Reference link definitions are parsed and a +map of links is constructed. + +2. In the second phase, the raw text contents of paragraphs and headers +are parsed into sequences of markdown inline elements (strings, +code spans, links, emphasis, and so on), using the map of link +references constructed in phase 1. + +## The document tree {-} + +At each point in processing, the document is represented as a tree of +**blocks**. The root of the tree is a `document` block. The `document` +may have any number of other blocks as **children**. These children +may, in turn, have other blocks a children. The last child of a block +is normally considered **open**, meaning that subsequent lines of input +can alter its contents. (Blocks that are not open are **closed**.) +Here, for example, is a possible document tree, with the open blocks +marked by arrows: + +``` tree +-> document + -> block_quote + paragraph + "Lorem ipsum dolor\nsit amet." + -> list (type=bullet tight=true bullet_char=-) + list_item + paragraph + "Qui *quodsi iracundia*" + -> list_item + -> paragraph + "aliquando id" +``` + +## How source lines alter the document tree {-} + +Each line that is processed has an effect on this tree. The line is +analyzed and, depending on its contents, the document may be altered +in one or more of the following ways: + +1. One or more open blocks may be closed. +2. One or more new blocks may be created as children of the + last open block. +3. Text may be added to the last (deepest) open block remaining + on the tree. + +Once a line has been incorporated into the tree in this way, +it can be discarded, so input can be read in a stream. + +We can see how this works by considering how the tree above is +generated by four lines of markdown: + +``` markdown +> Lorem ipsum dolor +sit amet. +> - Qui *quodsi iracundia* +> - aliquando id +``` + +At the outset, our document model is just + +``` tree +-> document +``` + +The first line of our text, + +``` markdown +> Lorem ipsum dolor +``` + +causes a `block_quote` block to be created as a child of our +open `document` block, and a `paragraph` block as a child of +the `block_quote`. Then the text is added to the last open +block, the `paragraph`: + +``` tree +-> document + -> block_quote + -> paragraph + "Lorem ipsum dolor" +``` + +The next line, + +``` markdown +sit amet. +``` + +is a "lazy continuation" of the open `paragraph`, so it gets added +to the paragraph's text: + +``` tree +-> document + -> block_quote + -> paragraph + "Lorem ipsum dolor\nsit amet." +``` + +The third line, + +``` markdown +> - Qui *quodsi iracundia* +``` + +causes the `paragraph` block to be closed, and a new `list` block +opened as a child of the `block_quote`. A `list_item` is also +added as a child of the `list`, and a `paragraph` as a chid of +the `list_item`. The text is then added to the `paragraph`: + +``` tree +-> document + -> block_quote + paragraph + "Lorem ipsum dolor\nsit amet." + -> list (type=bullet tight=true bullet_char=-) + -> list_item + -> paragraph + "Qui *quodsi iracundia*" +``` + +The fourth line, + +``` markdown +> - aliquando id +``` + +causes the `list_item` (and its child the `paragraph`) to be closed, +and a new `list_item` opened up as child of the `list`. A `paragraph` +is added as a child of the new `list_item`, to contain the text. +We thus obtain the final tree: + +``` tree +-> document + -> block_quote + paragraph + "Lorem ipsum dolor\nsit amet." + -> list (type=bullet tight=true bullet_char=-) + list_item + paragraph + "Qui *quodsi iracundia*" + -> list_item + -> paragraph + "aliquando id" +``` + +## From block structure to the final document {-} + +Once all of the input has been parsed, all open blocks are closed. + +We then "walk the tree," visiting every node, and parse raw +string contents of paragraphs and headers as inlines. At this +point we have seen all the link reference definitions, so we can +resolve reference links as we go. + +``` tree +document + block_quote + paragraph + str "Lorem ipsum dolor" + softbreak + str "sit amet." + list (type=bullet tight=true bullet_char=-) + list_item + paragraph + str "Qui " + emph + str "quodsi iracundia" + list_item + paragraph + str "aliquando id" +``` + +Notice how the newline in the first paragraph has been parsed as +a `softbreak`, and the asterisks in the first list item have become +an `emph`. + +The document can be rendered as HTML, or in any other format, given +an appropriate renderer. + + diff --git a/spec2js.js b/spec2js.js new file mode 100755 index 0000000000..6bf366f97f --- /dev/null +++ b/spec2js.js @@ -0,0 +1,17 @@ +#!/usr/bin/env node + +var fs = require('fs'); +var util = require('util'); + +fs.readFile('spec.txt', 'utf8', function(err, data) { + if (err) { + return console.log(err); + } + var examples = []; + data.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$/gm, + function(_,x,y){ + examples.push({markdown: x, html: y}); + }); + console.log(util.inspect(examples, { depth: null })); + console.warn(examples.length + ' examples'); +}); diff --git a/spec2md.pl b/spec2md.pl new file mode 100644 index 0000000000..1b4f26ecad --- /dev/null +++ b/spec2md.pl @@ -0,0 +1,36 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +my $stage = 0; +my $example = 0; +my @match; +my $section = ""; + +while () { + if (/^\.$/) { + if ($stage == 0) { + $example++; + print "\n
\n"; + print "
Example $example
\n\n"; + print "````````````````````````````````````````````````````````` markdown\n"; + } elsif ($stage == 1) { + print "`````````````````````````````````````````````````````````\n\n"; + print "````````````````````````````````````````````````````````` html\n"; + } elsif ($stage == 2) { + print "`````````````````````````````````````````````````````````\n\n"; + print "
\n\n"; + } else { + die "Encountered unknown stage $stage"; + } + $stage = ($stage + 1) % 3; + } else { + if ($stage == 0 && (@match = ($_ =~ /^#{1,6} *(.*)/))) { + $section = $match[0]; + } + if ($stage != 0) { + # $_ =~ s/ /␣/g; + } + print $_; + } +} diff --git a/specfilter.hs b/specfilter.hs new file mode 100755 index 0000000000..67c8fa5ba8 --- /dev/null +++ b/specfilter.hs @@ -0,0 +1,37 @@ +#!/usr/bin/env runhaskell + +import Text.Pandoc.JSON +import Text.Pandoc.Walk + +main = toJSONFilter go + where go :: Pandoc -> Pandoc + go = walk exampleDivs . walk anchors + +exampleDivs :: Block -> Block +exampleDivs (Div (ident, ["example"], kvs) + [ d@(Div (_,["examplenum"],_) _), + c1@(CodeBlock (_,["markdown"],_) _), + c2@(CodeBlock (_,["html"],_) _) + ]) = Div (ident, ["example"], kvs) + [ rawtex "\\begin{minipage}[t]{\\textwidth}\n{\\scriptsize " + , d + , rawtex "\\vspace{-1em}}" + , rawtex "\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.85}\n" + , addBreaks c1 + , rawtex "\\end{minipage}\n\\hfill\n\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.95}\n" + , addBreaks c2 + , rawtex "\\end{minipage}\n\\end{minipage}" + ] + where rawtex = RawBlock (Format "latex") + addBreaks (CodeBlock attrs code) = CodeBlock attrs $ addBreaks' code + addBreaks' code = + if length code > 49 + then take 49 code ++ ('\n':addBreaks' (drop 49 code)) + else code +exampleDivs x = x + +anchors :: Inline -> Inline +anchors (RawInline (Format "html") ('<':'a':' ':'i':'d':'=':'"':xs)) = + RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}") + where lab = takeWhile (/='"') xs +anchors x = x diff --git a/src/blocks.c b/src/blocks.c new file mode 100644 index 0000000000..27762310bf --- /dev/null +++ b/src/blocks.c @@ -0,0 +1,747 @@ +#include +#include +#include +#include +#include "bstrlib.h" +#include "stmd.h" +#include "uthash.h" +#include "debug.h" +#include "scanners.h" + +static block* make_block(int tag, int start_line, int start_column) +{ + block* e; + e = (block*) malloc(sizeof(block)); + e->tag = tag; + e->open = true; + e->last_line_blank = false; + e->start_line = start_line; + e->start_column = start_column; + e->end_line = start_line; + e->children = NULL; + e->last_child = NULL; + e->parent = NULL; + e->top = NULL; + e->attributes.refmap = NULL; + e->string_content = bfromcstr(""); + e->inline_content = NULL; + e->next = NULL; + e->prev = NULL; + return e; +} + +// Create a root document block. +extern block* make_document() +{ + block * e = make_block(document, 1, 1); + reference * map = NULL; + reference ** refmap; + refmap = (reference**) malloc(sizeof(reference*)); + *refmap = map; + e->attributes.refmap = refmap; + e->top = e; + return e; +} + +// Returns true if line has only space characters, else false. +bool is_blank(bstring s, int offset) +{ + char c; + while ((c = bchar(s, offset))) { + if (c == '\n') { + return true; + } else if (c == ' ') { + offset++; + } else { + return false; + } + } + return true; +} + +static inline bool can_contain(int parent_type, int child_type) +{ + return ( parent_type == document || + parent_type == block_quote || + parent_type == list_item || + (parent_type == list && child_type == list_item) ); +} + +static inline bool accepts_lines(int block_type) +{ + return (block_type == paragraph || + block_type == atx_header || + block_type == indented_code || + block_type == fenced_code); +} + +static int add_line(block* block, bstring ln, int offset) +{ + bstring s = bmidstr(ln, offset, blength(ln) - offset); + check(block->open, "attempted to add line (%s) to closed container (%d)", + ln->data, block->tag); + check(bformata(block->string_content, "%s", s->data) == 0, + "could not append line to string_content"); + bdestroy(s); + return 0; + error: + return -1; +} + +static int remove_trailing_blank_lines(bstring ln) +{ + bstring tofind = bfromcstr(" \t\r\n"); + int pos; + // find last nonspace: + pos = bninchrr(ln, blength(ln) - 1, tofind); + if (pos == BSTR_ERR) { // all spaces + bassigncstr(ln, ""); + } else { + // find next newline after it + pos = bstrchrp(ln, '\n', pos); + if (pos != BSTR_ERR) { + check(bdelete(ln, pos, blength(ln) - pos) != BSTR_ERR, + "failed to delete trailing blank lines"); + } + } + bdestroy(tofind); + return 0; + error: + return -1; +} + +// Check to see if a block ends with a blank line, descending +// if needed into lists and sublists. +static bool ends_with_blank_line(block* block) +{ + if (block->last_line_blank) { + return true; + } + if ((block->tag == list || block->tag == list_item) && block->last_child) { + return ends_with_blank_line(block->last_child); + } else { + return false; + } +} + +// Break out of all containing lists +static int break_out_of_lists(block ** bptr, int line_number) +{ + block * container = *bptr; + block * b = container->top; + // find first containing list: + while (b && b->tag != list) { + b = b->last_child; + } + if (b) { + while (container && container != b) { + finalize(container, line_number); + container = container->parent; + } + finalize(b, line_number); + *bptr = b->parent; + } + return 0; +} + + +extern int finalize(block* b, int line_number) +{ + int firstlinelen; + int pos; + block* item; + block* subitem; + + check(b != NULL, "finalize called on null block"); + if (!b->open) { + return 0; // don't do anything if the block is already closed + } + b->open = false; + if (line_number > b->start_line) { + b->end_line = line_number - 1; + } else { + b->end_line = line_number; + } + + switch (b->tag) { + + case paragraph: + pos = 0; + while (bchar(b->string_content, 0) == '[' && + (pos = parse_reference(b->string_content, + b->top->attributes.refmap))) { + bdelete(b->string_content, 0, pos); + } + if (is_blank(b->string_content, 0)) { + b->tag = reference_def; + } + break; + + case indented_code: + remove_trailing_blank_lines(b->string_content); + bformata(b->string_content, "\n"); + break; + + case fenced_code: + // first line of contents becomes info + firstlinelen = bstrchr(b->string_content, '\n'); + b->attributes.fenced_code_data.info = + bmidstr(b->string_content, 0, firstlinelen); + bdelete(b->string_content, 0, firstlinelen + 1); // +1 for \n + btrimws(b->attributes.fenced_code_data.info); + unescape(b->attributes.fenced_code_data.info); + break; + + case list: // determine tight/loose status + b->attributes.list_data.tight = true; // tight by default + item = b->children; + + while (item) { + // check for non-final non-empty list item ending with blank line: + if (item->last_line_blank && item->next) { + b->attributes.list_data.tight = false; + break; + } + // recurse into children of list item, to see if there are + // spaces between them: + subitem = item->children; + while (subitem) { + if (ends_with_blank_line(subitem) && + (item->next || subitem->next)) { + b->attributes.list_data.tight = false; + break; + } + subitem = subitem->next; + } + if (!(b->attributes.list_data.tight)) { + break; + } + item = item->next; + } + + break; + + default: + break; + } + + return 0; + error: + return -1; +} + +// Add a block as child of another. Return pointer to child. +extern block* add_child(block* parent, + int block_type, int start_line, int start_column) +{ + // if 'parent' isn't the kind of block that can accept this child, + // then back up til we hit a block that can. + while (!can_contain(parent->tag, block_type)) { + finalize(parent, start_line); + parent = parent->parent; + } + + check(parent != NULL, "parent container cannot accept children"); + + block* child = make_block(block_type, start_line, start_column); + child->parent = parent; + child->top = parent->top; + + if (parent->last_child) { + parent->last_child->next = child; + child->prev = parent->last_child; + } else { + parent->children = child; + child->prev = NULL; + } + parent->last_child = child; + return child; + error: + return NULL; +} + +// Free a block list and any children. +extern void free_blocks(block* e) +{ + block * next; + while (e != NULL) { + next = e->next; + free_inlines(e->inline_content); + bdestroy(e->string_content); + if (e->tag == fenced_code) { + bdestroy(e->attributes.fenced_code_data.info); + } else if (e->tag == document) { + free_reference_map(e->attributes.refmap); + } + free_blocks(e->children); + free(e); + e = next; + } +} + +// Walk through block and all children, recursively, parsing +// string content into inline content where appropriate. +int process_inlines(block* cur, reference** refmap) +{ + switch (cur->tag) { + + case paragraph: + case atx_header: + case setext_header: + check(cur->string_content != NULL, "string_content is NULL"); + cur->inline_content = parse_inlines(cur->string_content, refmap); + bdestroy(cur->string_content); + cur->string_content = NULL; + break; + + default: + break; + } + + block * child = cur->children; + while (child != NULL) { + process_inlines(child, refmap); + child = child->next; + } + + return 0; + error: + return -1; +} + +// Attempts to parse a list item marker (bullet or enumerated). +// On success, returns length of the marker, and populates +// data with the details. On failure, returns 0. +static int parse_list_marker(bstring ln, int pos, + struct ListData ** dataptr) +{ + char c; + int startpos; + int start = 1; + struct ListData * data; + + startpos = pos; + c = bchar(ln, pos); + + if ((c == '*' || c == '-' || c == '+') && !scan_hrule(ln, pos)) { + pos++; + if (!isspace(bchar(ln, pos))) { + return 0; + } + data = malloc(sizeof(struct ListData)); + data->marker_offset = 0; // will be adjusted later + data->list_type = bullet; + data->bullet_char = c; + data->start = 1; + data->delimiter = period; + data->tight = false; + + } else if (isdigit(c)) { + + pos++; + while (isdigit(bchar(ln, pos))) { + pos++; + } + + if (!sscanf((char *) ln->data + startpos, "%d", &start)) { + log_err("sscanf failed"); + return 0; + } + + c = bchar(ln, pos); + if (c == '.' || c == ')') { + pos++; + if (!isspace(bchar(ln, pos))) { + return 0; + } + data = malloc(sizeof(struct ListData)); + data->marker_offset = 0; // will be adjusted later + data->list_type = ordered; + data->bullet_char = 0; + data->start = start; + data->delimiter = (c == '.' ? period : parens); + data->tight = false; + } else { + return 0; + } + + } else { + return 0; + } + + *dataptr = data; + return (pos - startpos); +} + +// Return 1 if list item belongs in list, else 0. +static int lists_match(struct ListData list_data, + struct ListData item_data) +{ + return (list_data.list_type == item_data.list_type && + list_data.delimiter == item_data.delimiter && + // list_data.marker_offset == item_data.marker_offset && + list_data.bullet_char == item_data.bullet_char); +} + +// Process one line at a time, modifying a block. +// Returns 0 if successful. curptr is changed to point to +// the currently open block. +extern int incorporate_line(bstring ln, int line_number, block** curptr) +{ + block* last_matched_container; + int offset = 0; + int matched = 0; + int lev = 0; + int i; + struct ListData * data = NULL; + bool all_matched = true; + block* container; + block* cur = *curptr; + bool blank = false; + int first_nonspace; + int indent; + + // detab input line + check(bdetab(ln, 1) != BSTR_ERR, + "invalid UTF-8 sequence in line %d\n", line_number); + + // container starts at the document root. + container = cur->top; + + // for each containing block, try to parse the associated line start. + // bail out on failure: container will point to the last matching block. + + while (container->last_child && container->last_child->open) { + container = container->last_child; + + first_nonspace = offset; + while (bchar(ln, first_nonspace) == ' ') { + first_nonspace++; + } + + indent = first_nonspace - offset; + blank = bchar(ln, first_nonspace) == '\n'; + + if (container->tag == block_quote) { + + matched = indent <= 3 && bchar(ln, first_nonspace) == '>'; + if (matched) { + offset = first_nonspace + 1; + if (bchar(ln, offset) == ' ') { + offset++; + } + } else { + all_matched = false; + } + + } else if (container->tag == list_item) { + + if (indent >= container->attributes.list_data.marker_offset + + container->attributes.list_data.padding) { + offset += container->attributes.list_data.marker_offset + + container->attributes.list_data.padding; + } else if (blank) { + offset = first_nonspace; + } else { + all_matched = false; + } + + } else if (container->tag == indented_code) { + + if (indent >= CODE_INDENT) { + offset += CODE_INDENT; + } else if (blank) { + offset = first_nonspace; + } else { + all_matched = false; + } + + } else if (container->tag == atx_header || + container->tag == setext_header) { + + // a header can never contain more than one line + all_matched = false; + + } else if (container->tag == fenced_code) { + + // skip optional spaces of fence offset + i = container->attributes.fenced_code_data.fence_offset; + while (i > 0 && bchar(ln, offset) == ' ') { + offset++; + i--; + } + + } else if (container->tag == html_block) { + + if (blank) { + all_matched = false; + } + + } else if (container->tag == paragraph) { + + if (blank) { + container->last_line_blank =true; + all_matched = false; + } + + } + + if (!all_matched) { + container = container->parent; // back up to last matching block + break; + } + } + + last_matched_container = container; + + // check to see if we've hit 2nd blank line, break out of list: + if (blank && container->last_line_blank) { + break_out_of_lists(&container, line_number); + } + + // unless last matched container is code block, try new container starts: + while (container->tag != fenced_code && container->tag != indented_code && + container->tag != html_block) { + + first_nonspace = offset; + while (bchar(ln, first_nonspace) == ' ') { + first_nonspace++; + } + + indent = first_nonspace - offset; + blank = bchar(ln, first_nonspace) == '\n'; + + if (indent >= CODE_INDENT) { + + if (cur->tag != paragraph && !blank) { + offset += CODE_INDENT; + container = add_child(container, indented_code, line_number, offset + 1); + } else { // indent > 4 in lazy line + break; + } + + } else if (bchar(ln, first_nonspace) == '>') { + + offset = first_nonspace + 1; + // optional following character + if (bchar(ln, offset) == ' ') { + offset++; + } + container = add_child(container, block_quote, line_number, offset + 1); + + } else if ((matched = scan_atx_header_start(ln, first_nonspace))) { + + offset = first_nonspace + matched; + container = add_child(container, atx_header, line_number, offset + 1); + int hashpos = bstrchrp(ln, '#', first_nonspace); + check(hashpos != BSTR_ERR, "no # found in atx header start"); + int level = 0; + while (bchar(ln, hashpos) == '#') { + level++; + hashpos++; + } + container->attributes.header_level = level; + + } else if ((matched = scan_open_code_fence(ln, first_nonspace))) { + + container = add_child(container, fenced_code, line_number, + first_nonspace + 1); + container->attributes.fenced_code_data.fence_char = bchar(ln, + first_nonspace); + container->attributes.fenced_code_data.fence_length = matched; + container->attributes.fenced_code_data.fence_offset = + first_nonspace - offset; + offset = first_nonspace + matched; + + } else if ((matched = scan_html_block_tag(ln, first_nonspace))) { + + container = add_child(container, html_block, line_number, + first_nonspace + 1); + // note, we don't adjust offset because the tag is part of the text + + } else if (container->tag == paragraph && + (lev = scan_setext_header_line(ln, first_nonspace)) && + // check that there is only one line in the paragraph: + bstrrchrp(container->string_content, '\n', + blength(container->string_content) - 2) == BSTR_ERR) { + + container->tag = setext_header; + container->attributes.header_level = lev; + offset = blength(ln) - 1; + + } else if (!(container->tag == paragraph && !all_matched) && + (matched = scan_hrule(ln, first_nonspace))) { + + // it's only now that we know the line is not part of a setext header: + container = add_child(container, hrule, line_number, first_nonspace + 1); + finalize(container, line_number); + container = container->parent; + offset = blength(ln) - 1; + + } else if ((matched = parse_list_marker(ln, first_nonspace, &data))) { + + // compute padding: + offset = first_nonspace + matched; + i = 0; + while (i <= 5 && bchar(ln, offset + i) == ' ') { + i++; + } + // i = number of spaces after marker, up to 5 + if (i >= 5 || i < 1 || bchar(ln, offset) == '\n') { + data->padding = matched + 1; + if (i > 0) { + offset += 1; + } + } else { + data->padding = matched + i; + offset += i; + } + + // check container; if it's a list, see if this list item + // can continue the list; otherwise, create a list container. + + data->marker_offset = indent; + + if (container->tag != list || + !lists_match(container->attributes.list_data, *data)) { + container = add_child(container, list, line_number, + first_nonspace + 1); + container->attributes.list_data = *data; + } + + // add the list item + container = add_child(container, list_item, line_number, + first_nonspace + 1); + container->attributes.list_data = *data; + free(data); + + } else { + break; + } + + if (accepts_lines(container->tag)) { + // if it's a line container, it can't contain other containers + break; + } + } + + // what remains at offset is a text line. add the text to the + // appropriate container. + + first_nonspace = offset; + while (bchar(ln, first_nonspace) == ' ') { + first_nonspace++; + } + + indent = first_nonspace - offset; + blank = bchar(ln, first_nonspace) == '\n'; + + // block quote lines are never blank as they start with > + // and we don't count blanks in fenced code for purposes of tight/loose + // lists or breaking out of lists. we also don't set last_line_blank + // on an empty list item. + container->last_line_blank = (blank && + container->tag != block_quote && + container->tag != fenced_code && + !(container->tag == list_item && + container->children == NULL && + container->start_line == line_number)); + + block *cont = container; + while (cont->parent) { + cont->parent->last_line_blank = false; + cont = cont->parent; + } + + if (cur != last_matched_container && + container == last_matched_container && + !blank && + cur->tag == paragraph && + blength(cur->string_content) > 0) { + + check(add_line(cur, ln, offset) == 0, "could not add line"); + + } else { // not a lazy continuation + + // finalize any blocks that were not matched and set cur to container: + while (cur != last_matched_container) { + + finalize(cur, line_number); + cur = cur->parent; + check(cur != NULL, "cur is NULL, last_matched_container->tag = %d", + last_matched_container->tag); + + } + + if (container->tag == indented_code) { + + check(add_line(container, ln, offset) == 0, "could not add line"); + + } else if (container->tag == fenced_code) { + + matched = (indent <= 3 + && bchar(ln, first_nonspace) == container->attributes.fenced_code_data.fence_char) + && scan_close_code_fence(ln, first_nonspace, + container->attributes.fenced_code_data.fence_length); + if (matched) { + // if closing fence, don't add line to container; instead, close it: + finalize(container, line_number); + container = container->parent; // back up to parent + } else { + check(add_line(container, ln, offset) == 0, "could not add line"); + } + + } else if (container->tag == html_block) { + + check(add_line(container, ln, offset) == 0, "could not add line"); + + } else if (blank) { + + // ??? do nothing + + } else if (container->tag == atx_header) { + + // chop off trailing ###s...use a scanner? + brtrimws(ln); + int p = blength(ln) - 1; + int numhashes = 0; + // if string ends in #s, remove these: + while (bchar(ln, p) == '#') { + p--; + numhashes++; + } + if (bchar(ln, p) == '\\') { + // the last # was escaped, so we include it. + p++; + numhashes--; + } + check(bdelete(ln, p + 1, numhashes) != BSTR_ERR, + "could not delete final hashes"); + check(add_line(container, ln, first_nonspace) == 0, "could not add line"); + finalize(container, line_number); + container = container->parent; + + } else if (accepts_lines(container->tag)) { + + check(add_line(container, ln, first_nonspace) == 0, "could not add line"); + + } else if (container->tag != hrule && container->tag != setext_header) { + + // create paragraph container for line + container = add_child(container, paragraph, line_number, first_nonspace + 1); + check(add_line(container, ln, first_nonspace) == 0, "could not add line"); + + } else { + + log_warn("Line %d with container type %d did not match any condition:\n\"%s\"", + line_number, container->tag, ln->data); + + } + *curptr = container; + } + + return 0; + error: + return -1; +} + diff --git a/src/bstrlib.c b/src/bstrlib.c new file mode 100644 index 0000000000..1b19dbecd0 --- /dev/null +++ b/src/bstrlib.c @@ -0,0 +1,2979 @@ +/* + * This source file is part of the bstring string library. This code was + * written by Paul Hsieh in 2002-2010, and is covered by either the 3-clause + * BSD open source license or GPL v2.0. Refer to the accompanying documentation + * for details on usage and license. + */ + +/* + * bstrlib.c + * + * This file is the core module for implementing the bstring functions. + */ + +#if defined (_MSC_VER) +/* These warnings from MSVC++ are totally pointless. */ +# define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include +#include +#include +#include +#include +#include "bstrlib.h" + +/* Optionally include a mechanism for debugging memory */ + +#if defined(MEMORY_DEBUG) || defined(BSTRLIB_MEMORY_DEBUG) +#include "memdbg.h" +#endif + +#ifndef bstr__alloc +#define bstr__alloc(x) malloc (x) +#endif + +#ifndef bstr__free +#define bstr__free(p) free (p) +#endif + +#ifndef bstr__realloc +#define bstr__realloc(p,x) realloc ((p), (x)) +#endif + +#ifndef bstr__memcpy +#define bstr__memcpy(d,s,l) memcpy ((d), (s), (l)) +#endif + +#ifndef bstr__memmove +#define bstr__memmove(d,s,l) memmove ((d), (s), (l)) +#endif + +#ifndef bstr__memset +#define bstr__memset(d,c,l) memset ((d), (c), (l)) +#endif + +#ifndef bstr__memcmp +#define bstr__memcmp(d,c,l) memcmp ((d), (c), (l)) +#endif + +#ifndef bstr__memchr +#define bstr__memchr(s,c,l) memchr ((s), (c), (l)) +#endif + +/* Just a length safe wrapper for memmove. */ + +#define bBlockCopy(D,S,L) { if ((L) > 0) bstr__memmove ((D),(S),(L)); } + +/* Compute the snapped size for a given requested size. By snapping to powers + of 2 like this, repeated reallocations are avoided. */ +static int snapUpSize (int i) { + if (i < 8) { + i = 8; + } else { + unsigned int j; + j = (unsigned int) i; + + j |= (j >> 1); + j |= (j >> 2); + j |= (j >> 4); + j |= (j >> 8); /* Ok, since int >= 16 bits */ +#if (UINT_MAX != 0xffff) + j |= (j >> 16); /* For 32 bit int systems */ +#if (UINT_MAX > 0xffffffffUL) + j |= (j >> 32); /* For 64 bit int systems */ +#endif +#endif + /* Least power of two greater than i */ + j++; + if ((int) j >= i) i = (int) j; + } + return i; +} + +/* int balloc (bstring b, int len) + * + * Increase the size of the memory backing the bstring b to at least len. + */ +int balloc (bstring b, int olen) { + int len; + if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen <= 0 || + b->mlen < b->slen || olen <= 0) { + return BSTR_ERR; + } + + if (olen >= b->mlen) { + unsigned char * x; + + if ((len = snapUpSize (olen)) <= b->mlen) return BSTR_OK; + + /* Assume probability of a non-moving realloc is 0.125 */ + if (7 * b->mlen < 8 * b->slen) { + + /* If slen is close to mlen in size then use realloc to reduce + the memory defragmentation */ + + reallocStrategy:; + + x = (unsigned char *) bstr__realloc (b->data, (size_t) len); + if (x == NULL) { + + /* Since we failed, try allocating the tighest possible + allocation */ + + if (NULL == (x = (unsigned char *) bstr__realloc (b->data, (size_t) (len = olen)))) { + return BSTR_ERR; + } + } + } else { + + /* If slen is not close to mlen then avoid the penalty of copying + the extra bytes that are allocated, but not considered part of + the string */ + + if (NULL == (x = (unsigned char *) bstr__alloc ((size_t) len))) { + + /* Perhaps there is no available memory for the two + allocations to be in memory at once */ + + goto reallocStrategy; + + } else { + if (b->slen) bstr__memcpy ((char *) x, (char *) b->data, (size_t) b->slen); + bstr__free (b->data); + } + } + b->data = x; + b->mlen = len; + b->data[b->slen] = (unsigned char) '\0'; + } + + return BSTR_OK; +} + +/* int ballocmin (bstring b, int len) + * + * Set the size of the memory backing the bstring b to len or b->slen+1, + * whichever is larger. Note that repeated use of this function can degrade + * performance. + */ +int ballocmin (bstring b, int len) { + unsigned char * s; + + if (b == NULL || b->data == NULL || (b->slen+1) < 0 || b->mlen <= 0 || + b->mlen < b->slen || len <= 0) { + return BSTR_ERR; + } + + if (len < b->slen + 1) len = b->slen + 1; + + if (len != b->mlen) { + s = (unsigned char *) bstr__realloc (b->data, (size_t) len); + if (NULL == s) return BSTR_ERR; + s[b->slen] = (unsigned char) '\0'; + b->data = s; + b->mlen = len; + } + + return BSTR_OK; +} + +/* bstring bfromcstr (const char * str) + * + * Create a bstring which contains the contents of the '\0' terminated char * + * buffer str. + */ +bstring bfromcstr (const char * str) { +bstring b; +int i; +size_t j; + + if (str == NULL) return NULL; + j = (strlen) (str); + i = snapUpSize ((int) (j + (2 - (j != 0)))); + if (i <= (int) j) return NULL; + + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (NULL == b) return NULL; + b->slen = (int) j; + if (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) { + bstr__free (b); + return NULL; + } + + bstr__memcpy (b->data, str, j+1); + return b; +} + +/* bstring bfromcstralloc (int mlen, const char * str) + * + * Create a bstring which contains the contents of the '\0' terminated char * + * buffer str. The memory buffer backing the string is at least len + * characters in length. + */ +bstring bfromcstralloc (int mlen, const char * str) { +bstring b; +int i; +size_t j; + + if (str == NULL) return NULL; + j = (strlen) (str); + i = snapUpSize ((int) (j + (2 - (j != 0)))); + if (i <= (int) j) return NULL; + + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b == NULL) return NULL; + b->slen = (int) j; + if (i < mlen) i = mlen; + + if (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) { + bstr__free (b); + return NULL; + } + + bstr__memcpy (b->data, str, j+1); + return b; +} + +/* bstring blk2bstr (const void * blk, int len) + * + * Create a bstring which contains the content of the block blk of length + * len. + */ +bstring blk2bstr (const void * blk, int len) { +bstring b; +int i; + + if (blk == NULL || len < 0) return NULL; + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b == NULL) return NULL; + b->slen = len; + + i = len + (2 - (len != 0)); + i = snapUpSize (i); + + b->mlen = i; + + b->data = (unsigned char *) bstr__alloc ((size_t) b->mlen); + if (b->data == NULL) { + bstr__free (b); + return NULL; + } + + if (len > 0) bstr__memcpy (b->data, blk, (size_t) len); + b->data[len] = (unsigned char) '\0'; + + return b; +} + +/* char * bstr2cstr (const_bstring s, char z) + * + * Create a '\0' terminated char * buffer which is equal to the contents of + * the bstring s, except that any contained '\0' characters are converted + * to the character in z. This returned value should be freed with a + * bcstrfree () call, by the calling application. + */ +char * bstr2cstr (const_bstring b, char z) { +int i, l; +char * r; + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + l = b->slen; + r = (char *) bstr__alloc ((size_t) (l + 1)); + if (r == NULL) return r; + + for (i=0; i < l; i ++) { + r[i] = (char) ((b->data[i] == '\0') ? z : (char) (b->data[i])); + } + + r[l] = (unsigned char) '\0'; + + return r; +} + +/* int bcstrfree (char * s) + * + * Frees a C-string generated by bstr2cstr (). This is normally unnecessary + * since it just wraps a call to bstr__free (), however, if bstr__alloc () + * and bstr__free () have been redefined as a macros within the bstrlib + * module (via defining them in memdbg.h after defining + * BSTRLIB_MEMORY_DEBUG) with some difference in behaviour from the std + * library functions, then this allows a correct way of freeing the memory + * that allows higher level code to be independent from these macro + * redefinitions. + */ +int bcstrfree (char * s) { + if (s) { + bstr__free (s); + return BSTR_OK; + } + return BSTR_ERR; +} + +/* int bconcat (bstring b0, const_bstring b1) + * + * Concatenate the bstring b1 to the bstring b0. + */ +int bconcat (bstring b0, const_bstring b1) { +int len, d; +bstring aux = (bstring) b1; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL) return BSTR_ERR; + + d = b0->slen; + len = b1->slen; + if ((d | (b0->mlen - d) | len | (d + len)) < 0) return BSTR_ERR; + + if (b0->mlen <= d + len + 1) { + ptrdiff_t pd = b1->data - b0->data; + if (0 <= pd && pd < b0->mlen) { + if (NULL == (aux = bstrcpy (b1))) return BSTR_ERR; + } + if (balloc (b0, d + len + 1) != BSTR_OK) { + if (aux != b1) bdestroy (aux); + return BSTR_ERR; + } + } + + bBlockCopy (&b0->data[d], &aux->data[0], (size_t) len); + b0->data[d + len] = (unsigned char) '\0'; + b0->slen = d + len; + if (aux != b1) bdestroy (aux); + return BSTR_OK; +} + +/* int bconchar (bstring b, char c) +/ * + * Concatenate the single character c to the bstring b. + */ +int bconchar (bstring b, char c) { +int d; + + if (b == NULL) return BSTR_ERR; + d = b->slen; + if ((d | (b->mlen - d)) < 0 || balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; + b->data[d] = (unsigned char) c; + b->data[d + 1] = (unsigned char) '\0'; + b->slen++; + return BSTR_OK; +} + +/* int bcatcstr (bstring b, const char * s) + * + * Concatenate a char * string to a bstring. + */ +int bcatcstr (bstring b, const char * s) { +char * d; +int i, l; + + if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen + || b->mlen <= 0 || s == NULL) return BSTR_ERR; + + /* Optimistically concatenate directly */ + l = b->mlen - b->slen; + d = (char *) &b->data[b->slen]; + for (i=0; i < l; i++) { + if ((*d++ = *s++) == '\0') { + b->slen += i; + return BSTR_OK; + } + } + b->slen += i; + + /* Need to explicitely resize and concatenate tail */ + return bcatblk (b, (const void *) s, (int) strlen (s)); +} + +/* int bcatblk (bstring b, const void * s, int len) + * + * Concatenate a fixed length buffer to a bstring. + */ +int bcatblk (bstring b, const void * s, int len) { +int nl; + + if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen + || b->mlen <= 0 || s == NULL || len < 0) return BSTR_ERR; + + if (0 > (nl = b->slen + len)) return BSTR_ERR; /* Overflow? */ + if (b->mlen <= nl && 0 > balloc (b, nl + 1)) return BSTR_ERR; + + bBlockCopy (&b->data[b->slen], s, (size_t) len); + b->slen = nl; + b->data[nl] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* bstring bstrcpy (const_bstring b) + * + * Create a copy of the bstring b. + */ +bstring bstrcpy (const_bstring b) { +bstring b0; +int i,j; + + /* Attempted to copy an invalid string? */ + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + + b0 = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b0 == NULL) { + /* Unable to allocate memory for string header */ + return NULL; + } + + i = b->slen; + j = snapUpSize (i + 1); + + b0->data = (unsigned char *) bstr__alloc (j); + if (b0->data == NULL) { + j = i + 1; + b0->data = (unsigned char *) bstr__alloc (j); + if (b0->data == NULL) { + /* Unable to allocate memory for string data */ + bstr__free (b0); + return NULL; + } + } + + b0->mlen = j; + b0->slen = i; + + if (i) bstr__memcpy ((char *) b0->data, (char *) b->data, i); + b0->data[b0->slen] = (unsigned char) '\0'; + + return b0; +} + +/* int bassign (bstring a, const_bstring b) + * + * Overwrite the string a with the contents of string b. + */ +int bassign (bstring a, const_bstring b) { + if (b == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + if (b->slen != 0) { + if (balloc (a, b->slen) != BSTR_OK) return BSTR_ERR; + bstr__memmove (a->data, b->data, b->slen); + } else { + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0) + return BSTR_ERR; + } + a->data[b->slen] = (unsigned char) '\0'; + a->slen = b->slen; + return BSTR_OK; +} + +/* int bassignmidstr (bstring a, const_bstring b, int left, int len) + * + * Overwrite the string a with the middle of contents of string b + * starting from position left and running for a length len. left and + * len are clamped to the ends of b as with the function bmidstr. + */ +int bassignmidstr (bstring a, const_bstring b, int left, int len) { + if (b == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + + if (left < 0) { + len += left; + left = 0; + } + + if (len > b->slen - left) len = b->slen - left; + + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0) + return BSTR_ERR; + + if (len > 0) { + if (balloc (a, len) != BSTR_OK) return BSTR_ERR; + bstr__memmove (a->data, b->data + left, len); + a->slen = len; + } else { + a->slen = 0; + } + a->data[a->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bassigncstr (bstring a, const char * str) + * + * Overwrite the string a with the contents of char * string str. Note that + * the bstring a must be a well defined and writable bstring. If an error + * occurs BSTR_ERR is returned however a may be partially overwritten. + */ +int bassigncstr (bstring a, const char * str) { +int i; +size_t len; + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0 || NULL == str) + return BSTR_ERR; + + for (i=0; i < a->mlen; i++) { + if ('\0' == (a->data[i] = str[i])) { + a->slen = i; + return BSTR_OK; + } + } + + a->slen = i; + len = strlen (str + i); + if (len > INT_MAX || i + len + 1 > INT_MAX || + 0 > balloc (a, (int) (i + len + 1))) return BSTR_ERR; + bBlockCopy (a->data + i, str + i, (size_t) len + 1); + a->slen += (int) len; + return BSTR_OK; +} + +/* int bassignblk (bstring a, const void * s, int len) + * + * Overwrite the string a with the contents of the block (s, len). Note that + * the bstring a must be a well defined and writable bstring. If an error + * occurs BSTR_ERR is returned and a is not overwritten. + */ +int bassignblk (bstring a, const void * s, int len) { + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0 || NULL == s || len + 1 < 1) + return BSTR_ERR; + if (len + 1 > a->mlen && 0 > balloc (a, len + 1)) return BSTR_ERR; + bBlockCopy (a->data, s, (size_t) len); + a->data[len] = (unsigned char) '\0'; + a->slen = len; + return BSTR_OK; +} + +/* int btrunc (bstring b, int n) + * + * Truncate the bstring to at most n characters. + */ +int btrunc (bstring b, int n) { + if (n < 0 || b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + if (b->slen > n) { + b->slen = n; + b->data[n] = (unsigned char) '\0'; + } + return BSTR_OK; +} + +#define upcase(c) (toupper ((unsigned char) c)) +#define downcase(c) (tolower ((unsigned char) c)) +#define wspace(c) (isspace ((unsigned char) c)) + +/* int btoupper (bstring b) + * + * Convert contents of bstring to upper case. + */ +int btoupper (bstring b) { +int i, len; + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + for (i=0, len = b->slen; i < len; i++) { + b->data[i] = (unsigned char) upcase (b->data[i]); + } + return BSTR_OK; +} + +/* int btolower (bstring b) + * + * Convert contents of bstring to lower case. + */ +int btolower (bstring b) { +int i, len; + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + for (i=0, len = b->slen; i < len; i++) { + b->data[i] = (unsigned char) downcase (b->data[i]); + } + return BSTR_OK; +} + +/* int bstricmp (const_bstring b0, const_bstring b1) + * + * Compare two strings without differentiating between case. The return + * value is the difference of the values of the characters where the two + * strings first differ after lower case transformation, otherwise 0 is + * returned indicating that the strings are equal. If the lengths are + * different, then a difference from 0 is given, but if the first extra + * character is '\0', then it is taken to be the value UCHAR_MAX+1. + */ +int bstricmp (const_bstring b0, const_bstring b1) { +int i, v, n; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0) return SHRT_MIN; + if ((n = b0->slen) > b1->slen) n = b1->slen; + else if (b0->slen == b1->slen && b0->data == b1->data) return BSTR_OK; + + for (i = 0; i < n; i ++) { + v = (char) downcase (b0->data[i]) + - (char) downcase (b1->data[i]); + if (0 != v) return v; + } + + if (b0->slen > n) { + v = (char) downcase (b0->data[n]); + if (v) return v; + return UCHAR_MAX + 1; + } + if (b1->slen > n) { + v = - (char) downcase (b1->data[n]); + if (v) return v; + return - (int) (UCHAR_MAX + 1); + } + return BSTR_OK; +} + +/* int bstrnicmp (const_bstring b0, const_bstring b1, int n) + * + * Compare two strings without differentiating between case for at most n + * characters. If the position where the two strings first differ is + * before the nth position, the return value is the difference of the values + * of the characters, otherwise 0 is returned. If the lengths are different + * and less than n characters, then a difference from 0 is given, but if the + * first extra character is '\0', then it is taken to be the value + * UCHAR_MAX+1. + */ +int bstrnicmp (const_bstring b0, const_bstring b1, int n) { +int i, v, m; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0 || n < 0) return SHRT_MIN; + m = n; + if (m > b0->slen) m = b0->slen; + if (m > b1->slen) m = b1->slen; + + if (b0->data != b1->data) { + for (i = 0; i < m; i ++) { + v = (char) downcase (b0->data[i]); + v -= (char) downcase (b1->data[i]); + if (v != 0) return b0->data[i] - b1->data[i]; + } + } + + if (n == m || b0->slen == b1->slen) return BSTR_OK; + + if (b0->slen > m) { + v = (char) downcase (b0->data[m]); + if (v) return v; + return UCHAR_MAX + 1; + } + + v = - (char) downcase (b1->data[m]); + if (v) return v; + return - (int) (UCHAR_MAX + 1); +} + +/* int biseqcaseless (const_bstring b0, const_bstring b1) + * + * Compare two strings for equality without differentiating between case. + * If the strings differ other than in case, 0 is returned, if the strings + * are the same, 1 is returned, if there is an error, -1 is returned. If + * the length of the strings are different, this function is O(1). '\0' + * termination characters are not treated in any special way. + */ +int biseqcaseless (const_bstring b0, const_bstring b1) { +int i, n; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0) return BSTR_ERR; + if (b0->slen != b1->slen) return BSTR_OK; + if (b0->data == b1->data || b0->slen == 0) return 1; + for (i=0, n=b0->slen; i < n; i++) { + if (b0->data[i] != b1->data[i]) { + unsigned char c = (unsigned char) downcase (b0->data[i]); + if (c != (unsigned char) downcase (b1->data[i])) return 0; + } + } + return 1; +} + +/* int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len) + * + * Compare beginning of string b0 with a block of memory of length len + * without differentiating between case for equality. If the beginning of b0 + * differs from the memory block other than in case (or if b0 is too short), + * 0 is returned, if the strings are the same, 1 is returned, if there is an + * error, -1 is returned. '\0' characters are not treated in any special + * way. + */ +int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len) { +int i; + + if (bdata (b0) == NULL || b0->slen < 0 || NULL == blk || len < 0) + return BSTR_ERR; + if (b0->slen < len) return BSTR_OK; + if (b0->data == (const unsigned char *) blk || len == 0) return 1; + + for (i = 0; i < len; i ++) { + if (b0->data[i] != ((const unsigned char *) blk)[i]) { + if (downcase (b0->data[i]) != + downcase (((const unsigned char *) blk)[i])) return 0; + } + } + return 1; +} + +/* + * int bltrimws (bstring b) + * + * Delete whitespace contiguous from the left end of the string. + */ +int bltrimws (bstring b) { +int i, len; + + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + + for (len = b->slen, i = 0; i < len; i++) { + if (!wspace (b->data[i])) { + return bdelete (b, 0, i); + } + } + + b->data[0] = (unsigned char) '\0'; + b->slen = 0; + return BSTR_OK; +} + +/* + * int brtrimws (bstring b) + * + * Delete whitespace contiguous from the right end of the string. + */ +int brtrimws (bstring b) { +int i; + + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + + for (i = b->slen - 1; i >= 0; i--) { + if (!wspace (b->data[i])) { + if (b->mlen > i) b->data[i+1] = (unsigned char) '\0'; + b->slen = i + 1; + return BSTR_OK; + } + } + + b->data[0] = (unsigned char) '\0'; + b->slen = 0; + return BSTR_OK; +} + +/* + * int btrimws (bstring b) + * + * Delete whitespace contiguous from both ends of the string. + */ +int btrimws (bstring b) { +int i, j; + + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + + for (i = b->slen - 1; i >= 0; i--) { + if (!wspace (b->data[i])) { + if (b->mlen > i) b->data[i+1] = (unsigned char) '\0'; + b->slen = i + 1; + for (j = 0; wspace (b->data[j]); j++) {} + return bdelete (b, 0, j); + } + } + + b->data[0] = (unsigned char) '\0'; + b->slen = 0; + return BSTR_OK; +} + +/* int biseq (const_bstring b0, const_bstring b1) + * + * Compare the string b0 and b1. If the strings differ, 0 is returned, if + * the strings are the same, 1 is returned, if there is an error, -1 is + * returned. If the length of the strings are different, this function is + * O(1). '\0' termination characters are not treated in any special way. + */ +int biseq (const_bstring b0, const_bstring b1) { + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return BSTR_ERR; + if (b0->slen != b1->slen) return BSTR_OK; + if (b0->data == b1->data || b0->slen == 0) return 1; + return !bstr__memcmp (b0->data, b1->data, b0->slen); +} + +/* int bisstemeqblk (const_bstring b0, const void * blk, int len) + * + * Compare beginning of string b0 with a block of memory of length len for + * equality. If the beginning of b0 differs from the memory block (or if b0 + * is too short), 0 is returned, if the strings are the same, 1 is returned, + * if there is an error, -1 is returned. '\0' characters are not treated in + * any special way. + */ +int bisstemeqblk (const_bstring b0, const void * blk, int len) { +int i; + + if (bdata (b0) == NULL || b0->slen < 0 || NULL == blk || len < 0) + return BSTR_ERR; + if (b0->slen < len) return BSTR_OK; + if (b0->data == (const unsigned char *) blk || len == 0) return 1; + + for (i = 0; i < len; i ++) { + if (b0->data[i] != ((const unsigned char *) blk)[i]) return BSTR_OK; + } + return 1; +} + +/* int biseqcstr (const_bstring b, const char *s) + * + * Compare the bstring b and char * string s. The C string s must be '\0' + * terminated at exactly the length of the bstring b, and the contents + * between the two must be identical with the bstring b with no '\0' + * characters for the two contents to be considered equal. This is + * equivalent to the condition that their current contents will be always be + * equal when comparing them in the same format after converting one or the + * other. If the strings are equal 1 is returned, if they are unequal 0 is + * returned and if there is a detectable error BSTR_ERR is returned. + */ +int biseqcstr (const_bstring b, const char * s) { +int i; + if (b == NULL || s == NULL || b->data == NULL || b->slen < 0) return BSTR_ERR; + for (i=0; i < b->slen; i++) { + if (s[i] == '\0' || b->data[i] != (unsigned char) s[i]) return BSTR_OK; + } + return s[i] == '\0'; +} + +/* int biseqcstrcaseless (const_bstring b, const char *s) + * + * Compare the bstring b and char * string s. The C string s must be '\0' + * terminated at exactly the length of the bstring b, and the contents + * between the two must be identical except for case with the bstring b with + * no '\0' characters for the two contents to be considered equal. This is + * equivalent to the condition that their current contents will be always be + * equal ignoring case when comparing them in the same format after + * converting one or the other. If the strings are equal, except for case, + * 1 is returned, if they are unequal regardless of case 0 is returned and + * if there is a detectable error BSTR_ERR is returned. + */ +int biseqcstrcaseless (const_bstring b, const char * s) { +int i; + if (b == NULL || s == NULL || b->data == NULL || b->slen < 0) return BSTR_ERR; + for (i=0; i < b->slen; i++) { + if (s[i] == '\0' || + (b->data[i] != (unsigned char) s[i] && + downcase (b->data[i]) != (unsigned char) downcase (s[i]))) + return BSTR_OK; + } + return s[i] == '\0'; +} + +/* int bstrcmp (const_bstring b0, const_bstring b1) + * + * Compare the string b0 and b1. If there is an error, SHRT_MIN is returned, + * otherwise a value less than or greater than zero, indicating that the + * string pointed to by b0 is lexicographically less than or greater than + * the string pointed to by b1 is returned. If the the string lengths are + * unequal but the characters up until the length of the shorter are equal + * then a value less than, or greater than zero, indicating that the string + * pointed to by b0 is shorter or longer than the string pointed to by b1 is + * returned. 0 is returned if and only if the two strings are the same. If + * the length of the strings are different, this function is O(n). Like its + * standard C library counter part strcmp, the comparison does not proceed + * past any '\0' termination characters encountered. + */ +int bstrcmp (const_bstring b0, const_bstring b1) { +int i, v, n; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return SHRT_MIN; + n = b0->slen; if (n > b1->slen) n = b1->slen; + if (b0->slen == b1->slen && (b0->data == b1->data || b0->slen == 0)) + return BSTR_OK; + + for (i = 0; i < n; i ++) { + v = ((char) b0->data[i]) - ((char) b1->data[i]); + if (v != 0) return v; + if (b0->data[i] == (unsigned char) '\0') return BSTR_OK; + } + + if (b0->slen > n) return 1; + if (b1->slen > n) return -1; + return BSTR_OK; +} + +/* int bstrncmp (const_bstring b0, const_bstring b1, int n) + * + * Compare the string b0 and b1 for at most n characters. If there is an + * error, SHRT_MIN is returned, otherwise a value is returned as if b0 and + * b1 were first truncated to at most n characters then bstrcmp was called + * with these new strings are paremeters. If the length of the strings are + * different, this function is O(n). Like its standard C library counter + * part strcmp, the comparison does not proceed past any '\0' termination + * characters encountered. + */ +int bstrncmp (const_bstring b0, const_bstring b1, int n) { +int i, v, m; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return SHRT_MIN; + m = n; + if (m > b0->slen) m = b0->slen; + if (m > b1->slen) m = b1->slen; + + if (b0->data != b1->data) { + for (i = 0; i < m; i ++) { + v = ((char) b0->data[i]) - ((char) b1->data[i]); + if (v != 0) return v; + if (b0->data[i] == (unsigned char) '\0') return BSTR_OK; + } + } + + if (n == m || b0->slen == b1->slen) return BSTR_OK; + + if (b0->slen > m) return 1; + return -1; +} + +/* bstring bmidstr (const_bstring b, int left, int len) + * + * Create a bstring which is the substring of b starting from position left + * and running for a length len (clamped by the end of the bstring b.) If + * b is detectably invalid, then NULL is returned. The section described + * by (left, len) is clamped to the boundaries of b. + */ +bstring bmidstr (const_bstring b, int left, int len) { + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + + if (left < 0) { + len += left; + left = 0; + } + + if (len > b->slen - left) len = b->slen - left; + + if (len <= 0) return bfromcstr (""); + return blk2bstr (b->data + left, len); +} + +/* int bdelete (bstring b, int pos, int len) + * + * Removes characters from pos to pos+len-1 inclusive and shifts the tail of + * the bstring starting from pos+len to pos. len must be positive for this + * call to have any effect. The section of the string described by (pos, + * len) is clamped to boundaries of the bstring b. + */ +int bdelete (bstring b, int pos, int len) { + /* Clamp to left side of bstring */ + if (pos < 0) { + len += pos; + pos = 0; + } + + if (len < 0 || b == NULL || b->data == NULL || b->slen < 0 || + b->mlen < b->slen || b->mlen <= 0) + return BSTR_ERR; + if (len > 0 && pos < b->slen) { + if (pos + len >= b->slen) { + b->slen = pos; + } else { + bBlockCopy ((char *) (b->data + pos), + (char *) (b->data + pos + len), + b->slen - (pos+len)); + b->slen -= len; + } + b->data[b->slen] = (unsigned char) '\0'; + } + return BSTR_OK; +} + +/* int bdestroy (bstring b) + * + * Free up the bstring. Note that if b is detectably invalid or not writable + * then no action is performed and BSTR_ERR is returned. Like a freed memory + * allocation, dereferences, writes or any other action on b after it has + * been bdestroyed is undefined. + */ +int bdestroy (bstring b) { + if (b == NULL || b->slen < 0 || b->mlen <= 0 || b->mlen < b->slen || + b->data == NULL) + return BSTR_ERR; + + bstr__free (b->data); + + /* In case there is any stale usage, there is one more chance to + notice this error. */ + + b->slen = -1; + b->mlen = -__LINE__; + b->data = NULL; + + bstr__free (b); + return BSTR_OK; +} + +/* int binstr (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * forward. If it is found then return with the first position where it is + * found, otherwise return BSTR_ERR. Note that this is just a brute force + * string searcher that does not attempt clever things like the Boyer-Moore + * search algorithm. Because of this there are many degenerate cases where + * this can take much longer than it needs to. + */ +int binstr (const_bstring b1, int pos, const_bstring b2) { +int j, ii, ll, lf; +unsigned char * d0; +unsigned char c0; +register unsigned char * d1; +register unsigned char c1; +register int i; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos) return (b2->slen == 0)?pos:BSTR_ERR; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + /* No space to find such a string? */ + if ((lf = b1->slen - b2->slen + 1) <= pos) return BSTR_ERR; + + /* An obvious alias case */ + if (b1->data == b2->data && pos == 0) return 0; + + i = pos; + + d0 = b2->data; + d1 = b1->data; + ll = b2->slen; + + /* Peel off the b2->slen == 1 case */ + c0 = d0[0]; + if (1 == ll) { + for (;i < lf; i++) if (c0 == d1[i]) return i; + return BSTR_ERR; + } + + c1 = c0; + j = 0; + lf = b1->slen - 1; + + ii = -1; + if (i < lf) do { + /* Unrolled current character test */ + if (c1 != d1[i]) { + if (c1 != d1[1+i]) { + i += 2; + continue; + } + i++; + } + + /* Take note if this is the start of a potential match */ + if (0 == j) ii = i; + + /* Shift the test character down by one */ + j++; + i++; + + /* If this isn't past the last character continue */ + if (j < ll) { + c1 = d0[j]; + continue; + } + + N0:; + + /* If no characters mismatched, then we matched */ + if (i == ii+j) return ii; + + /* Shift back to the beginning */ + i -= j; + j = 0; + c1 = c0; + } while (i < lf); + + /* Deal with last case if unrolling caused a misalignment */ + if (i == lf && ll == j+1 && c1 == d1[i]) goto N0; + + return BSTR_ERR; +} + +/* int binstrr (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * backward. If it is found then return with the first position where it is + * found, otherwise return BSTR_ERR. Note that this is just a brute force + * string searcher that does not attempt clever things like the Boyer-Moore + * search algorithm. Because of this there are many degenerate cases where + * this can take much longer than it needs to. + */ +int binstrr (const_bstring b1, int pos, const_bstring b2) { +int j, i, l; +unsigned char * d0, * d1; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos && b2->slen == 0) return pos; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + /* Obvious alias case */ + if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) return 0; + + i = pos; + if ((l = b1->slen - b2->slen) < 0) return BSTR_ERR; + + /* If no space to find such a string then snap back */ + if (l + 1 <= i) i = l; + j = 0; + + d0 = b2->data; + d1 = b1->data; + l = b2->slen; + + for (;;) { + if (d0[j] == d1[i + j]) { + j ++; + if (j >= l) return i; + } else { + i --; + if (i < 0) break; + j=0; + } + } + + return BSTR_ERR; +} + +/* int binstrcaseless (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * forward but without regard to case. If it is found then return with the + * first position where it is found, otherwise return BSTR_ERR. Note that + * this is just a brute force string searcher that does not attempt clever + * things like the Boyer-Moore search algorithm. Because of this there are + * many degenerate cases where this can take much longer than it needs to. + */ +int binstrcaseless (const_bstring b1, int pos, const_bstring b2) { +int j, i, l, ll; +unsigned char * d0, * d1; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos) return (b2->slen == 0)?pos:BSTR_ERR; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + l = b1->slen - b2->slen + 1; + + /* No space to find such a string? */ + if (l <= pos) return BSTR_ERR; + + /* An obvious alias case */ + if (b1->data == b2->data && pos == 0) return BSTR_OK; + + i = pos; + j = 0; + + d0 = b2->data; + d1 = b1->data; + ll = b2->slen; + + for (;;) { + if (d0[j] == d1[i + j] || downcase (d0[j]) == downcase (d1[i + j])) { + j ++; + if (j >= ll) return i; + } else { + i ++; + if (i >= l) break; + j=0; + } + } + + return BSTR_ERR; +} + +/* int binstrrcaseless (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * backward but without regard to case. If it is found then return with the + * first position where it is found, otherwise return BSTR_ERR. Note that + * this is just a brute force string searcher that does not attempt clever + * things like the Boyer-Moore search algorithm. Because of this there are + * many degenerate cases where this can take much longer than it needs to. + */ +int binstrrcaseless (const_bstring b1, int pos, const_bstring b2) { +int j, i, l; +unsigned char * d0, * d1; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos && b2->slen == 0) return pos; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + /* Obvious alias case */ + if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) return BSTR_OK; + + i = pos; + if ((l = b1->slen - b2->slen) < 0) return BSTR_ERR; + + /* If no space to find such a string then snap back */ + if (l + 1 <= i) i = l; + j = 0; + + d0 = b2->data; + d1 = b1->data; + l = b2->slen; + + for (;;) { + if (d0[j] == d1[i + j] || downcase (d0[j]) == downcase (d1[i + j])) { + j ++; + if (j >= l) return i; + } else { + i --; + if (i < 0) break; + j=0; + } + } + + return BSTR_ERR; +} + + +/* int bstrchrp (const_bstring b, int c, int pos) + * + * Search for the character c in b forwards from the position pos + * (inclusive). + */ +int bstrchrp (const_bstring b, int c, int pos) { +unsigned char * p; + + if (b == NULL || b->data == NULL || b->slen <= pos || pos < 0) return BSTR_ERR; + p = (unsigned char *) bstr__memchr ((b->data + pos), (unsigned char) c, (b->slen - pos)); + if (p) return (int) (p - b->data); + return BSTR_ERR; +} + +/* int bstrrchrp (const_bstring b, int c, int pos) + * + * Search for the character c in b backwards from the position pos in string + * (inclusive). + */ +int bstrrchrp (const_bstring b, int c, int pos) { +int i; + + if (b == NULL || b->data == NULL || b->slen <= pos || pos < 0) return BSTR_ERR; + for (i=pos; i >= 0; i--) { + if (b->data[i] == (unsigned char) c) return i; + } + return BSTR_ERR; +} + +#if !defined (BSTRLIB_AGGRESSIVE_MEMORY_FOR_SPEED_TRADEOFF) +#define LONG_LOG_BITS_QTY (3) +#define LONG_BITS_QTY (1 << LONG_LOG_BITS_QTY) +#define LONG_TYPE unsigned char + +#define CFCLEN ((1 << CHAR_BIT) / LONG_BITS_QTY) +struct charField { LONG_TYPE content[CFCLEN]; }; +#define testInCharField(cf,c) ((cf)->content[(c) >> LONG_LOG_BITS_QTY] & (((long)1) << ((c) & (LONG_BITS_QTY-1)))) +#define setInCharField(cf,idx) { \ + unsigned int c = (unsigned int) (idx); \ + (cf)->content[c >> LONG_LOG_BITS_QTY] |= (LONG_TYPE) (1ul << (c & (LONG_BITS_QTY-1))); \ +} + +#else + +#define CFCLEN (1 << CHAR_BIT) +struct charField { unsigned char content[CFCLEN]; }; +#define testInCharField(cf,c) ((cf)->content[(unsigned char) (c)]) +#define setInCharField(cf,idx) (cf)->content[(unsigned int) (idx)] = ~0 + +#endif + +/* Convert a bstring to charField */ +static int buildCharField (struct charField * cf, const_bstring b) { +int i; + if (b == NULL || b->data == NULL || b->slen <= 0) return BSTR_ERR; + memset ((void *) cf->content, 0, sizeof (struct charField)); + for (i=0; i < b->slen; i++) { + setInCharField (cf, b->data[i]); + } + return BSTR_OK; +} + +static void invertCharField (struct charField * cf) { +int i; + for (i=0; i < CFCLEN; i++) cf->content[i] = ~cf->content[i]; +} + +/* Inner engine for binchr */ +static int binchrCF (const unsigned char * data, int len, int pos, const struct charField * cf) { +int i; + for (i=pos; i < len; i++) { + unsigned char c = (unsigned char) data[i]; + if (testInCharField (cf, c)) return i; + } + return BSTR_ERR; +} + +/* int binchr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the first position in b0 starting from pos or after, in which + * one of the characters in b1 is found and return it. If such a position + * does not exist in b0, then BSTR_ERR is returned. + */ +int binchr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen <= pos) return BSTR_ERR; + if (1 == b1->slen) return bstrchrp (b0, b1->data[0], pos); + if (0 > buildCharField (&chrs, b1)) return BSTR_ERR; + return binchrCF (b0->data, b0->slen, pos, &chrs); +} + +/* Inner engine for binchrr */ +static int binchrrCF (const unsigned char * data, int pos, const struct charField * cf) { +int i; + for (i=pos; i >= 0; i--) { + unsigned int c = (unsigned int) data[i]; + if (testInCharField (cf, c)) return i; + } + return BSTR_ERR; +} + +/* int binchrr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the last position in b0 no greater than pos, in which one of + * the characters in b1 is found and return it. If such a position does not + * exist in b0, then BSTR_ERR is returned. + */ +int binchrr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || b1 == NULL || + b0->slen < pos) return BSTR_ERR; + if (pos == b0->slen) pos--; + if (1 == b1->slen) return bstrrchrp (b0, b1->data[0], pos); + if (0 > buildCharField (&chrs, b1)) return BSTR_ERR; + return binchrrCF (b0->data, pos, &chrs); +} + +/* int bninchr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the first position in b0 starting from pos or after, in which + * none of the characters in b1 is found and return it. If such a position + * does not exist in b0, then BSTR_ERR is returned. + */ +int bninchr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen <= pos) return BSTR_ERR; + if (buildCharField (&chrs, b1) < 0) return BSTR_ERR; + invertCharField (&chrs); + return binchrCF (b0->data, b0->slen, pos, &chrs); +} + +/* int bninchrr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the last position in b0 no greater than pos, in which none of + * the characters in b1 is found and return it. If such a position does not + * exist in b0, then BSTR_ERR is returned. + */ +int bninchrr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen < pos) return BSTR_ERR; + if (pos == b0->slen) pos--; + if (buildCharField (&chrs, b1) < 0) return BSTR_ERR; + invertCharField (&chrs); + return binchrrCF (b0->data, pos, &chrs); +} + +/* int bsetstr (bstring b0, int pos, bstring b1, unsigned char fill) + * + * Overwrite the string b0 starting at position pos with the string b1. If + * the position pos is past the end of b0, then the character "fill" is + * appended as necessary to make up the gap between the end of b0 and pos. + * If b1 is NULL, it behaves as if it were a 0-length string. + */ +int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill) { +int d, newlen; +ptrdiff_t pd; +bstring aux = (bstring) b1; + + if (pos < 0 || b0 == NULL || b0->slen < 0 || NULL == b0->data || + b0->mlen < b0->slen || b0->mlen <= 0) return BSTR_ERR; + if (b1 != NULL && (b1->slen < 0 || b1->data == NULL)) return BSTR_ERR; + + d = pos; + + /* Aliasing case */ + if (NULL != aux) { + if ((pd = (ptrdiff_t) (b1->data - b0->data)) >= 0 && pd < (ptrdiff_t) b0->mlen) { + if (NULL == (aux = bstrcpy (b1))) return BSTR_ERR; + } + d += aux->slen; + } + + /* Increase memory size if necessary */ + if (balloc (b0, d + 1) != BSTR_OK) { + if (aux != b1) bdestroy (aux); + return BSTR_ERR; + } + + newlen = b0->slen; + + /* Fill in "fill" character as necessary */ + if (pos > newlen) { + bstr__memset (b0->data + b0->slen, (int) fill, (size_t) (pos - b0->slen)); + newlen = pos; + } + + /* Copy b1 to position pos in b0. */ + if (aux != NULL) { + bBlockCopy ((char *) (b0->data + pos), (char *) aux->data, aux->slen); + if (aux != b1) bdestroy (aux); + } + + /* Indicate the potentially increased size of b0 */ + if (d > newlen) newlen = d; + + b0->slen = newlen; + b0->data[newlen] = (unsigned char) '\0'; + + return BSTR_OK; +} + +/* int binsert (bstring b1, int pos, bstring b2, unsigned char fill) + * + * Inserts the string b2 into b1 at position pos. If the position pos is + * past the end of b1, then the character "fill" is appended as necessary to + * make up the gap between the end of b1 and pos. Unlike bsetstr, binsert + * does not allow b2 to be NULL. + */ +int binsert (bstring b1, int pos, const_bstring b2, unsigned char fill) { +int d, l; +ptrdiff_t pd; +bstring aux = (bstring) b2; + + if (pos < 0 || b1 == NULL || b2 == NULL || b1->slen < 0 || + b2->slen < 0 || b1->mlen < b1->slen || b1->mlen <= 0) return BSTR_ERR; + + /* Aliasing case */ + if ((pd = (ptrdiff_t) (b2->data - b1->data)) >= 0 && pd < (ptrdiff_t) b1->mlen) { + if (NULL == (aux = bstrcpy (b2))) return BSTR_ERR; + } + + /* Compute the two possible end pointers */ + d = b1->slen + aux->slen; + l = pos + aux->slen; + if ((d|l) < 0) return BSTR_ERR; + + if (l > d) { + /* Inserting past the end of the string */ + if (balloc (b1, l + 1) != BSTR_OK) { + if (aux != b2) bdestroy (aux); + return BSTR_ERR; + } + bstr__memset (b1->data + b1->slen, (int) fill, (size_t) (pos - b1->slen)); + b1->slen = l; + } else { + /* Inserting in the middle of the string */ + if (balloc (b1, d + 1) != BSTR_OK) { + if (aux != b2) bdestroy (aux); + return BSTR_ERR; + } + bBlockCopy (b1->data + l, b1->data + pos, d - l); + b1->slen = d; + } + bBlockCopy (b1->data + pos, aux->data, aux->slen); + b1->data[b1->slen] = (unsigned char) '\0'; + if (aux != b2) bdestroy (aux); + return BSTR_OK; +} + +/* int breplace (bstring b1, int pos, int len, bstring b2, + * unsigned char fill) + * + * Replace a section of a string from pos for a length len with the string b2. + * fill is used is pos > b1->slen. + */ +int breplace (bstring b1, int pos, int len, const_bstring b2, + unsigned char fill) { +int pl, ret; +ptrdiff_t pd; +bstring aux = (bstring) b2; + + if (pos < 0 || len < 0 || (pl = pos + len) < 0 || b1 == NULL || + b2 == NULL || b1->data == NULL || b2->data == NULL || + b1->slen < 0 || b2->slen < 0 || b1->mlen < b1->slen || + b1->mlen <= 0) return BSTR_ERR; + + /* Straddles the end? */ + if (pl >= b1->slen) { + if ((ret = bsetstr (b1, pos, b2, fill)) < 0) return ret; + if (pos + b2->slen < b1->slen) { + b1->slen = pos + b2->slen; + b1->data[b1->slen] = (unsigned char) '\0'; + } + return ret; + } + + /* Aliasing case */ + if ((pd = (ptrdiff_t) (b2->data - b1->data)) >= 0 && pd < (ptrdiff_t) b1->slen) { + if (NULL == (aux = bstrcpy (b2))) return BSTR_ERR; + } + + if (aux->slen > len) { + if (balloc (b1, b1->slen + aux->slen - len) != BSTR_OK) { + if (aux != b2) bdestroy (aux); + return BSTR_ERR; + } + } + + if (aux->slen != len) bstr__memmove (b1->data + pos + aux->slen, b1->data + pos + len, b1->slen - (pos + len)); + bstr__memcpy (b1->data + pos, aux->data, aux->slen); + b1->slen += aux->slen - len; + b1->data[b1->slen] = (unsigned char) '\0'; + if (aux != b2) bdestroy (aux); + return BSTR_OK; +} + +/* + * findreplaceengine is used to implement bfindreplace and + * bfindreplacecaseless. It works by breaking the three cases of + * expansion, reduction and replacement, and solving each of these + * in the most efficient way possible. + */ + +typedef int (*instr_fnptr) (const_bstring s1, int pos, const_bstring s2); + +#define INITIAL_STATIC_FIND_INDEX_COUNT 32 + +static int findreplaceengine (bstring b, const_bstring find, const_bstring repl, int pos, instr_fnptr instr) { +int i, ret, slen, mlen, delta, acc; +int * d; +int static_d[INITIAL_STATIC_FIND_INDEX_COUNT+1]; /* This +1 is unnecessary, but it shuts up LINT. */ +ptrdiff_t pd; +bstring auxf = (bstring) find; +bstring auxr = (bstring) repl; + + if (b == NULL || b->data == NULL || find == NULL || + find->data == NULL || repl == NULL || repl->data == NULL || + pos < 0 || find->slen <= 0 || b->mlen < 0 || b->slen > b->mlen || + b->mlen <= 0 || b->slen < 0 || repl->slen < 0) return BSTR_ERR; + if (pos > b->slen - find->slen) return BSTR_OK; + + /* Alias with find string */ + pd = (ptrdiff_t) (find->data - b->data); + if ((ptrdiff_t) (pos - find->slen) < pd && pd < (ptrdiff_t) b->slen) { + if (NULL == (auxf = bstrcpy (find))) return BSTR_ERR; + } + + /* Alias with repl string */ + pd = (ptrdiff_t) (repl->data - b->data); + if ((ptrdiff_t) (pos - repl->slen) < pd && pd < (ptrdiff_t) b->slen) { + if (NULL == (auxr = bstrcpy (repl))) { + if (auxf != find) bdestroy (auxf); + return BSTR_ERR; + } + } + + delta = auxf->slen - auxr->slen; + + /* in-place replacement since find and replace strings are of equal + length */ + if (delta == 0) { + while ((pos = instr (b, pos, auxf)) >= 0) { + bstr__memcpy (b->data + pos, auxr->data, auxr->slen); + pos += auxf->slen; + } + if (auxf != find) bdestroy (auxf); + if (auxr != repl) bdestroy (auxr); + return BSTR_OK; + } + + /* shrinking replacement since auxf->slen > auxr->slen */ + if (delta > 0) { + acc = 0; + + while ((i = instr (b, pos, auxf)) >= 0) { + if (acc && i > pos) + bstr__memmove (b->data + pos - acc, b->data + pos, i - pos); + if (auxr->slen) + bstr__memcpy (b->data + i - acc, auxr->data, auxr->slen); + acc += delta; + pos = i + auxf->slen; + } + + if (acc) { + i = b->slen; + if (i > pos) + bstr__memmove (b->data + pos - acc, b->data + pos, i - pos); + b->slen -= acc; + b->data[b->slen] = (unsigned char) '\0'; + } + + if (auxf != find) bdestroy (auxf); + if (auxr != repl) bdestroy (auxr); + return BSTR_OK; + } + + /* expanding replacement since find->slen < repl->slen. Its a lot + more complicated. This works by first finding all the matches and + storing them to a growable array, then doing at most one resize of + the destination bstring and then performing the direct memory transfers + of the string segment pieces to form the final result. The growable + array of matches uses a deferred doubling reallocing strategy. What + this means is that it starts as a reasonably fixed sized auto array in + the hopes that many if not most cases will never need to grow this + array. But it switches as soon as the bounds of the array will be + exceeded. An extra find result is always appended to this array that + corresponds to the end of the destination string, so slen is checked + against mlen - 1 rather than mlen before resizing. + */ + + mlen = INITIAL_STATIC_FIND_INDEX_COUNT; + d = (int *) static_d; /* Avoid malloc for trivial/initial cases */ + acc = slen = 0; + + while ((pos = instr (b, pos, auxf)) >= 0) { + if (slen >= mlen - 1) { + int sl, *t; + + mlen += mlen; + sl = sizeof (int *) * mlen; + if (static_d == d) d = NULL; /* static_d cannot be realloced */ + if (mlen <= 0 || sl < mlen || NULL == (t = (int *) bstr__realloc (d, sl))) { + ret = BSTR_ERR; + goto done; + } + if (NULL == d) bstr__memcpy (t, static_d, sizeof (static_d)); + d = t; + } + d[slen] = pos; + slen++; + acc -= delta; + pos += auxf->slen; + if (pos < 0 || acc < 0) { + ret = BSTR_ERR; + goto done; + } + } + + /* slen <= INITIAL_STATIC_INDEX_COUNT-1 or mlen-1 here. */ + d[slen] = b->slen; + + if (BSTR_OK == (ret = balloc (b, b->slen + acc + 1))) { + b->slen += acc; + for (i = slen-1; i >= 0; i--) { + int s, l; + s = d[i] + auxf->slen; + l = d[i+1] - s; /* d[slen] may be accessed here. */ + if (l) { + bstr__memmove (b->data + s + acc, b->data + s, l); + } + if (auxr->slen) { + bstr__memmove (b->data + s + acc - auxr->slen, + auxr->data, auxr->slen); + } + acc += delta; + } + b->data[b->slen] = (unsigned char) '\0'; + } + + done:; + if (static_d == d) d = NULL; + bstr__free (d); + if (auxf != find) bdestroy (auxf); + if (auxr != repl) bdestroy (auxr); + return ret; +} + +/* int bfindreplace (bstring b, const_bstring find, const_bstring repl, + * int pos) + * + * Replace all occurrences of a find string with a replace string after a + * given point in a bstring. + */ +int bfindreplace (bstring b, const_bstring find, const_bstring repl, int pos) { + return findreplaceengine (b, find, repl, pos, binstr); +} + +/* int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, + * int pos) + * + * Replace all occurrences of a find string, ignoring case, with a replace + * string after a given point in a bstring. + */ +int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, int pos) { + return findreplaceengine (b, find, repl, pos, binstrcaseless); +} + +/* int binsertch (bstring b, int pos, int len, unsigned char fill) + * + * Inserts the character fill repeatedly into b at position pos for a + * length len. If the position pos is past the end of b, then the + * character "fill" is appended as necessary to make up the gap between the + * end of b and the position pos + len. + */ +int binsertch (bstring b, int pos, int len, unsigned char fill) { +int d, l, i; + + if (pos < 0 || b == NULL || b->slen < 0 || b->mlen < b->slen || + b->mlen <= 0 || len < 0) return BSTR_ERR; + + /* Compute the two possible end pointers */ + d = b->slen + len; + l = pos + len; + if ((d|l) < 0) return BSTR_ERR; + + if (l > d) { + /* Inserting past the end of the string */ + if (balloc (b, l + 1) != BSTR_OK) return BSTR_ERR; + pos = b->slen; + b->slen = l; + } else { + /* Inserting in the middle of the string */ + if (balloc (b, d + 1) != BSTR_OK) return BSTR_ERR; + for (i = d - 1; i >= l; i--) { + b->data[i] = b->data[i - len]; + } + b->slen = d; + } + + for (i=pos; i < l; i++) b->data[i] = fill; + b->data[b->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bpattern (bstring b, int len) + * + * Replicate the bstring, b in place, end to end repeatedly until it + * surpasses len characters, then chop the result to exactly len characters. + * This function operates in-place. The function will return with BSTR_ERR + * if b is NULL or of length 0, otherwise BSTR_OK is returned. + */ +int bpattern (bstring b, int len) { +int i, d; + + d = blength (b); + if (d <= 0 || len < 0 || balloc (b, len + 1) != BSTR_OK) return BSTR_ERR; + if (len > 0) { + if (d == 1) return bsetstr (b, len, NULL, b->data[0]); + for (i = d; i < len; i++) b->data[i] = b->data[i - d]; + } + b->data[len] = (unsigned char) '\0'; + b->slen = len; + return BSTR_OK; +} + +#define BS_BUFF_SZ (1024) + +/* int breada (bstring b, bNread readPtr, void * parm) + * + * Use a finite buffer fread-like function readPtr to concatenate to the + * bstring b the entire contents of file-like source data in a roughly + * efficient way. + */ +int breada (bstring b, bNread readPtr, void * parm) { +int i, l, n; + + if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || + b->mlen <= 0 || readPtr == NULL) return BSTR_ERR; + + i = b->slen; + for (n=i+16; ; n += ((n < BS_BUFF_SZ) ? n : BS_BUFF_SZ)) { + if (BSTR_OK != balloc (b, n + 1)) return BSTR_ERR; + l = (int) readPtr ((void *) (b->data + i), 1, n - i, parm); + i += l; + b->slen = i; + if (i < n) break; + } + + b->data[i] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* bstring bread (bNread readPtr, void * parm) + * + * Use a finite buffer fread-like function readPtr to create a bstring + * filled with the entire contents of file-like source data in a roughly + * efficient way. + */ +bstring bread (bNread readPtr, void * parm) { +bstring buff; + + if (0 > breada (buff = bfromcstr (""), readPtr, parm)) { + bdestroy (buff); + return NULL; + } + return buff; +} + +/* int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to + * obtain a sequence of characters which are concatenated to the end of the + * bstring b. The stream read is terminated by the passed in terminator + * parameter. + * + * If getcPtr returns with a negative number, or the terminator character + * (which is appended) is read, then the stream reading is halted and the + * function returns with a partial result in b. If there is an empty partial + * result, 1 is returned. If no characters are read, or there is some other + * detectable error, BSTR_ERR is returned. + */ +int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator) { +int c, d, e; + + if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || + b->mlen <= 0 || getcPtr == NULL) return BSTR_ERR; + d = 0; + e = b->mlen - 2; + + while ((c = getcPtr (parm)) >= 0) { + if (d > e) { + b->slen = d; + if (balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; + e = b->mlen - 2; + } + b->data[d] = (unsigned char) c; + d++; + if (c == terminator) break; + } + + b->data[d] = (unsigned char) '\0'; + b->slen = d; + + return d == 0 && c < 0; +} + +/* int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to + * obtain a sequence of characters which are concatenated to the end of the + * bstring b. The stream read is terminated by the passed in terminator + * parameter. + * + * If getcPtr returns with a negative number, or the terminator character + * (which is appended) is read, then the stream reading is halted and the + * function returns with a partial result concatentated to b. If there is + * an empty partial result, 1 is returned. If no characters are read, or + * there is some other detectable error, BSTR_ERR is returned. + */ +int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator) { +int c, d, e; + + if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || + b->mlen <= 0 || getcPtr == NULL) return BSTR_ERR; + d = b->slen; + e = b->mlen - 2; + + while ((c = getcPtr (parm)) >= 0) { + if (d > e) { + b->slen = d; + if (balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; + e = b->mlen - 2; + } + b->data[d] = (unsigned char) c; + d++; + if (c == terminator) break; + } + + b->data[d] = (unsigned char) '\0'; + b->slen = d; + + return d == 0 && c < 0; +} + +/* bstring bgets (bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to + * obtain a sequence of characters which are concatenated into a bstring. + * The stream read is terminated by the passed in terminator function. + * + * If getcPtr returns with a negative number, or the terminator character + * (which is appended) is read, then the stream reading is halted and the + * result obtained thus far is returned. If no characters are read, or + * there is some other detectable error, NULL is returned. + */ +bstring bgets (bNgetc getcPtr, void * parm, char terminator) { +bstring buff; + + if (0 > bgetsa (buff = bfromcstr (""), getcPtr, parm, terminator) || 0 >= buff->slen) { + bdestroy (buff); + buff = NULL; + } + return buff; +} + +struct bStream { + bstring buff; /* Buffer for over-reads */ + void * parm; /* The stream handle for core stream */ + bNread readFnPtr; /* fread compatible fnptr for core stream */ + int isEOF; /* track file's EOF state */ + int maxBuffSz; +}; + +/* struct bStream * bsopen (bNread readPtr, void * parm) + * + * Wrap a given open stream (described by a fread compatible function + * pointer and stream handle) into an open bStream suitable for the bstring + * library streaming functions. + */ +struct bStream * bsopen (bNread readPtr, void * parm) { +struct bStream * s; + + if (readPtr == NULL) return NULL; + s = (struct bStream *) bstr__alloc (sizeof (struct bStream)); + if (s == NULL) return NULL; + s->parm = parm; + s->buff = bfromcstr (""); + s->readFnPtr = readPtr; + s->maxBuffSz = BS_BUFF_SZ; + s->isEOF = 0; + return s; +} + +/* int bsbufflength (struct bStream * s, int sz) + * + * Set the length of the buffer used by the bStream. If sz is zero, the + * length is not set. This function returns with the previous length. + */ +int bsbufflength (struct bStream * s, int sz) { +int oldSz; + if (s == NULL || sz < 0) return BSTR_ERR; + oldSz = s->maxBuffSz; + if (sz > 0) s->maxBuffSz = sz; + return oldSz; +} + +int bseof (const struct bStream * s) { + if (s == NULL || s->readFnPtr == NULL) return BSTR_ERR; + return s->isEOF && (s->buff->slen == 0); +} + +/* void * bsclose (struct bStream * s) + * + * Close the bStream, and return the handle to the stream that was originally + * used to open the given stream. + */ +void * bsclose (struct bStream * s) { +void * parm; + if (s == NULL) return NULL; + s->readFnPtr = NULL; + if (s->buff) bdestroy (s->buff); + s->buff = NULL; + parm = s->parm; + s->parm = NULL; + s->isEOF = 1; + bstr__free (s); + return parm; +} + +/* int bsreadlna (bstring r, struct bStream * s, char terminator) + * + * Read a bstring terminated by the terminator character or the end of the + * stream from the bStream (s) and return it into the parameter r. This + * function may read additional characters from the core stream that are not + * returned, but will be retained for subsequent read operations. + */ +int bsreadlna (bstring r, struct bStream * s, char terminator) { +int i, l, ret, rlo; +char * b; +struct tagbstring x; + + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 || + r->slen < 0 || r->mlen < r->slen) return BSTR_ERR; + l = s->buff->slen; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) s->buff->data; + x.data = (unsigned char *) b; + + /* First check if the current buffer holds the terminator */ + b[l] = terminator; /* Set sentinel */ + for (i=0; b[i] != terminator; i++) ; + if (i < l) { + x.slen = i + 1; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, i + 1); + return BSTR_OK; + } + + rlo = r->slen; + + /* If not then just concatenate the entire buffer to the output */ + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) return BSTR_ERR; + + /* Perform direct in-place reads into the destination to allow for + the minimum of data-copies */ + for (;;) { + if (BSTR_OK != balloc (r, r->slen + s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) (r->data + r->slen); + l = (int) s->readFnPtr (b, 1, s->maxBuffSz, s->parm); + if (l <= 0) { + r->data[r->slen] = (unsigned char) '\0'; + s->buff->slen = 0; + s->isEOF = 1; + /* If nothing was read return with an error message */ + return BSTR_ERR & -(r->slen == rlo); + } + b[l] = terminator; /* Set sentinel */ + for (i=0; b[i] != terminator; i++) ; + if (i < l) break; + r->slen += l; + } + + /* Terminator found, push over-read back to buffer */ + i++; + r->slen += i; + s->buff->slen = l - i; + bstr__memcpy (s->buff->data, b + i, l - i); + r->data[r->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bsreadlnsa (bstring r, struct bStream * s, bstring term) + * + * Read a bstring terminated by any character in the term string or the end + * of the stream from the bStream (s) and return it into the parameter r. + * This function may read additional characters from the core stream that + * are not returned, but will be retained for subsequent read operations. + */ +int bsreadlnsa (bstring r, struct bStream * s, const_bstring term) { +int i, l, ret, rlo; +unsigned char * b; +struct tagbstring x; +struct charField cf; + + if (s == NULL || s->buff == NULL || r == NULL || term == NULL || + term->data == NULL || r->mlen <= 0 || r->slen < 0 || + r->mlen < r->slen) return BSTR_ERR; + if (term->slen == 1) return bsreadlna (r, s, term->data[0]); + if (term->slen < 1 || buildCharField (&cf, term)) return BSTR_ERR; + + l = s->buff->slen; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (unsigned char *) s->buff->data; + x.data = b; + + /* First check if the current buffer holds the terminator */ + b[l] = term->data[0]; /* Set sentinel */ + for (i=0; !testInCharField (&cf, b[i]); i++) ; + if (i < l) { + x.slen = i + 1; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, i + 1); + return BSTR_OK; + } + + rlo = r->slen; + + /* If not then just concatenate the entire buffer to the output */ + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) return BSTR_ERR; + + /* Perform direct in-place reads into the destination to allow for + the minimum of data-copies */ + for (;;) { + if (BSTR_OK != balloc (r, r->slen + s->maxBuffSz + 1)) return BSTR_ERR; + b = (unsigned char *) (r->data + r->slen); + l = (int) s->readFnPtr (b, 1, s->maxBuffSz, s->parm); + if (l <= 0) { + r->data[r->slen] = (unsigned char) '\0'; + s->buff->slen = 0; + s->isEOF = 1; + /* If nothing was read return with an error message */ + return BSTR_ERR & -(r->slen == rlo); + } + + b[l] = term->data[0]; /* Set sentinel */ + for (i=0; !testInCharField (&cf, b[i]); i++) ; + if (i < l) break; + r->slen += l; + } + + /* Terminator found, push over-read back to buffer */ + i++; + r->slen += i; + s->buff->slen = l - i; + bstr__memcpy (s->buff->data, b + i, l - i); + r->data[r->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bsreada (bstring r, struct bStream * s, int n) + * + * Read a bstring of length n (or, if it is fewer, as many bytes as is + * remaining) from the bStream. This function may read additional + * characters from the core stream that are not returned, but will be + * retained for subsequent read operations. This function will not read + * additional characters from the core stream beyond virtual stream pointer. + */ +int bsreada (bstring r, struct bStream * s, int n) { +int l, ret, orslen; +char * b; +struct tagbstring x; + + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 + || r->slen < 0 || r->mlen < r->slen || n <= 0) return BSTR_ERR; + + n += r->slen; + if (n <= 0) return BSTR_ERR; + + l = s->buff->slen; + + orslen = r->slen; + + if (0 == l) { + if (s->isEOF) return BSTR_ERR; + if (r->mlen > n) { + l = (int) s->readFnPtr (r->data + r->slen, 1, n - r->slen, s->parm); + if (0 >= l || l > n - r->slen) { + s->isEOF = 1; + return BSTR_ERR; + } + r->slen += l; + r->data[r->slen] = (unsigned char) '\0'; + return 0; + } + } + + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) s->buff->data; + x.data = (unsigned char *) b; + + do { + if (l + r->slen >= n) { + x.slen = n - r->slen; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, x.slen); + return BSTR_ERR & -(r->slen == orslen); + } + + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) break; + + l = n - r->slen; + if (l > s->maxBuffSz) l = s->maxBuffSz; + + l = (int) s->readFnPtr (b, 1, l, s->parm); + + } while (l > 0); + if (l < 0) l = 0; + if (l == 0) s->isEOF = 1; + s->buff->slen = l; + return BSTR_ERR & -(r->slen == orslen); +} + +/* int bsreadln (bstring r, struct bStream * s, char terminator) + * + * Read a bstring terminated by the terminator character or the end of the + * stream from the bStream (s) and return it into the parameter r. This + * function may read additional characters from the core stream that are not + * returned, but will be retained for subsequent read operations. + */ +int bsreadln (bstring r, struct bStream * s, char terminator) { + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0) + return BSTR_ERR; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + r->slen = 0; + return bsreadlna (r, s, terminator); +} + +/* int bsreadlns (bstring r, struct bStream * s, bstring term) + * + * Read a bstring terminated by any character in the term string or the end + * of the stream from the bStream (s) and return it into the parameter r. + * This function may read additional characters from the core stream that + * are not returned, but will be retained for subsequent read operations. + */ +int bsreadlns (bstring r, struct bStream * s, const_bstring term) { + if (s == NULL || s->buff == NULL || r == NULL || term == NULL + || term->data == NULL || r->mlen <= 0) return BSTR_ERR; + if (term->slen == 1) return bsreadln (r, s, term->data[0]); + if (term->slen < 1) return BSTR_ERR; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + r->slen = 0; + return bsreadlnsa (r, s, term); +} + +/* int bsread (bstring r, struct bStream * s, int n) + * + * Read a bstring of length n (or, if it is fewer, as many bytes as is + * remaining) from the bStream. This function may read additional + * characters from the core stream that are not returned, but will be + * retained for subsequent read operations. This function will not read + * additional characters from the core stream beyond virtual stream pointer. + */ +int bsread (bstring r, struct bStream * s, int n) { + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 + || n <= 0) return BSTR_ERR; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + r->slen = 0; + return bsreada (r, s, n); +} + +/* int bsunread (struct bStream * s, const_bstring b) + * + * Insert a bstring into the bStream at the current position. These + * characters will be read prior to those that actually come from the core + * stream. + */ +int bsunread (struct bStream * s, const_bstring b) { + if (s == NULL || s->buff == NULL) return BSTR_ERR; + return binsert (s->buff, 0, b, (unsigned char) '?'); +} + +/* int bspeek (bstring r, const struct bStream * s) + * + * Return the currently buffered characters from the bStream that will be + * read prior to reads from the core stream. + */ +int bspeek (bstring r, const struct bStream * s) { + if (s == NULL || s->buff == NULL) return BSTR_ERR; + return bassign (r, s->buff); +} + +/* bstring bjoin (const struct bstrList * bl, const_bstring sep); + * + * Join the entries of a bstrList into one bstring by sequentially + * concatenating them with the sep string in between. If there is an error + * NULL is returned, otherwise a bstring with the correct result is returned. + */ +bstring bjoin (const struct bstrList * bl, const_bstring sep) { +bstring b; +int i, c, v; + + if (bl == NULL || bl->qty < 0) return NULL; + if (sep != NULL && (sep->slen < 0 || sep->data == NULL)) return NULL; + + for (i = 0, c = 1; i < bl->qty; i++) { + v = bl->entry[i]->slen; + if (v < 0) return NULL; /* Invalid input */ + c += v; + if (c < 0) return NULL; /* Wrap around ?? */ + } + + if (sep != NULL) c += (bl->qty - 1) * sep->slen; + + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (NULL == b) return NULL; /* Out of memory */ + b->data = (unsigned char *) bstr__alloc (c); + if (b->data == NULL) { + bstr__free (b); + return NULL; + } + + b->mlen = c; + b->slen = c-1; + + for (i = 0, c = 0; i < bl->qty; i++) { + if (i > 0 && sep != NULL) { + bstr__memcpy (b->data + c, sep->data, sep->slen); + c += sep->slen; + } + v = bl->entry[i]->slen; + bstr__memcpy (b->data + c, bl->entry[i]->data, v); + c += v; + } + b->data[c] = (unsigned char) '\0'; + return b; +} + +#define BSSSC_BUFF_LEN (256) + +/* int bssplitscb (struct bStream * s, const_bstring splitStr, + * int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) + * + * Iterate the set of disjoint sequential substrings read from a stream + * divided by any of the characters in splitStr. An empty splitStr causes + * the whole stream to be iterated once. + * + * Note: At the point of calling the cb function, the bStream pointer is + * pointed exactly at the position right after having read the split + * character. The cb function can act on the stream by causing the bStream + * pointer to move, and bssplitscb will continue by starting the next split + * at the position of the pointer after the return from cb. + * + * However, if the cb causes the bStream s to be destroyed then the cb must + * return with a negative value, otherwise bssplitscb will continue in an + * undefined manner. + */ +int bssplitscb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) { +struct charField chrs; +bstring buff; +int i, p, ret; + + if (cb == NULL || s == NULL || s->readFnPtr == NULL + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + + if (NULL == (buff = bfromcstr (""))) return BSTR_ERR; + + if (splitStr->slen == 0) { + while (bsreada (buff, s, BSSSC_BUFF_LEN) >= 0) ; + if ((ret = cb (parm, 0, buff)) > 0) + ret = 0; + } else { + buildCharField (&chrs, splitStr); + ret = p = i = 0; + for (;;) { + if (i >= buff->slen) { + bsreada (buff, s, BSSSC_BUFF_LEN); + if (i >= buff->slen) { + if (0 < (ret = cb (parm, p, buff))) ret = 0; + break; + } + } + if (testInCharField (&chrs, buff->data[i])) { + struct tagbstring t; + unsigned char c; + + blk2tbstr (t, buff->data + i + 1, buff->slen - (i + 1)); + if ((ret = bsunread (s, &t)) < 0) break; + buff->slen = i; + c = buff->data[i]; + buff->data[i] = (unsigned char) '\0'; + if ((ret = cb (parm, p, buff)) < 0) break; + buff->data[i] = c; + buff->slen = 0; + p += i + 1; + i = -1; + } + i++; + } + } + + bdestroy (buff); + return ret; +} + +/* int bssplitstrcb (struct bStream * s, const_bstring splitStr, + * int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) + * + * Iterate the set of disjoint sequential substrings read from a stream + * divided by the entire substring splitStr. An empty splitStr causes + * each character of the stream to be iterated. + * + * Note: At the point of calling the cb function, the bStream pointer is + * pointed exactly at the position right after having read the split + * character. The cb function can act on the stream by causing the bStream + * pointer to move, and bssplitscb will continue by starting the next split + * at the position of the pointer after the return from cb. + * + * However, if the cb causes the bStream s to be destroyed then the cb must + * return with a negative value, otherwise bssplitscb will continue in an + * undefined manner. + */ +int bssplitstrcb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) { +bstring buff; +int i, p, ret; + + if (cb == NULL || s == NULL || s->readFnPtr == NULL + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + + if (splitStr->slen == 1) return bssplitscb (s, splitStr, cb, parm); + + if (NULL == (buff = bfromcstr (""))) return BSTR_ERR; + + if (splitStr->slen == 0) { + for (i=0; bsreada (buff, s, BSSSC_BUFF_LEN) >= 0; i++) { + if ((ret = cb (parm, 0, buff)) < 0) { + bdestroy (buff); + return ret; + } + buff->slen = 0; + } + return BSTR_OK; + } else { + ret = p = i = 0; + for (i=p=0;;) { + if ((ret = binstr (buff, 0, splitStr)) >= 0) { + struct tagbstring t; + blk2tbstr (t, buff->data, ret); + i = ret + splitStr->slen; + if ((ret = cb (parm, p, &t)) < 0) break; + p += i; + bdelete (buff, 0, i); + } else { + bsreada (buff, s, BSSSC_BUFF_LEN); + if (bseof (s)) { + if ((ret = cb (parm, p, buff)) > 0) ret = 0; + break; + } + } + } + } + + bdestroy (buff); + return ret; +} + +/* int bstrListCreate (void) + * + * Create a bstrList. + */ +struct bstrList * bstrListCreate (void) { +struct bstrList * sl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (sl) { + sl->entry = (bstring *) bstr__alloc (1*sizeof (bstring)); + if (!sl->entry) { + bstr__free (sl); + sl = NULL; + } else { + sl->qty = 0; + sl->mlen = 1; + } + } + return sl; +} + +/* int bstrListDestroy (struct bstrList * sl) + * + * Destroy a bstrList that has been created by bsplit, bsplits or bstrListCreate. + */ +int bstrListDestroy (struct bstrList * sl) { +int i; + if (sl == NULL || sl->qty < 0) return BSTR_ERR; + for (i=0; i < sl->qty; i++) { + if (sl->entry[i]) { + bdestroy (sl->entry[i]); + sl->entry[i] = NULL; + } + } + sl->qty = -1; + sl->mlen = -1; + bstr__free (sl->entry); + sl->entry = NULL; + bstr__free (sl); + return BSTR_OK; +} + +/* int bstrListAlloc (struct bstrList * sl, int msz) + * + * Ensure that there is memory for at least msz number of entries for the + * list. + */ +int bstrListAlloc (struct bstrList * sl, int msz) { +bstring * l; +int smsz; +size_t nsz; + if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || sl->qty > sl->mlen) return BSTR_ERR; + if (sl->mlen >= msz) return BSTR_OK; + smsz = snapUpSize (msz); + nsz = ((size_t) smsz) * sizeof (bstring); + if (nsz < (size_t) smsz) return BSTR_ERR; + l = (bstring *) bstr__realloc (sl->entry, nsz); + if (!l) { + smsz = msz; + nsz = ((size_t) smsz) * sizeof (bstring); + l = (bstring *) bstr__realloc (sl->entry, nsz); + if (!l) return BSTR_ERR; + } + sl->mlen = smsz; + sl->entry = l; + return BSTR_OK; +} + +/* int bstrListAllocMin (struct bstrList * sl, int msz) + * + * Try to allocate the minimum amount of memory for the list to include at + * least msz entries or sl->qty whichever is greater. + */ +int bstrListAllocMin (struct bstrList * sl, int msz) { +bstring * l; +size_t nsz; + if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || sl->qty > sl->mlen) return BSTR_ERR; + if (msz < sl->qty) msz = sl->qty; + if (sl->mlen == msz) return BSTR_OK; + nsz = ((size_t) msz) * sizeof (bstring); + if (nsz < (size_t) msz) return BSTR_ERR; + l = (bstring *) bstr__realloc (sl->entry, nsz); + if (!l) return BSTR_ERR; + sl->mlen = msz; + sl->entry = l; + return BSTR_OK; +} + +/* int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by the + * character in splitChar. + * + * Note: Non-destructive modification of str from within the cb function + * while performing this split is not undefined. bsplitcb behaves in + * sequential lock step with calls to cb. I.e., after returning from a cb + * that return a non-negative integer, bsplitcb continues from the position + * 1 character after the last detected split character and it will halt + * immediately if the length of str falls below this point. However, if the + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitcb will continue in an undefined manner. + */ +int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { +int i, p, ret; + + if (cb == NULL || str == NULL || pos < 0 || pos > str->slen) + return BSTR_ERR; + + p = pos; + do { + for (i=p; i < str->slen; i++) { + if (str->data[i] == splitChar) break; + } + if ((ret = cb (parm, p, i - p)) < 0) return ret; + p = i + 1; + } while (p <= str->slen); + return BSTR_OK; +} + +/* int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by any + * of the characters in splitStr. An empty splitStr causes the whole str to + * be iterated once. + * + * Note: Non-destructive modification of str from within the cb function + * while performing this split is not undefined. bsplitscb behaves in + * sequential lock step with calls to cb. I.e., after returning from a cb + * that return a non-negative integer, bsplitscb continues from the position + * 1 character after the last detected split character and it will halt + * immediately if the length of str falls below this point. However, if the + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitscb will continue in an undefined manner. + */ +int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { +struct charField chrs; +int i, p, ret; + + if (cb == NULL || str == NULL || pos < 0 || pos > str->slen + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + if (splitStr->slen == 0) { + if ((ret = cb (parm, 0, str->slen)) > 0) ret = 0; + return ret; + } + + if (splitStr->slen == 1) + return bsplitcb (str, splitStr->data[0], pos, cb, parm); + + buildCharField (&chrs, splitStr); + + p = pos; + do { + for (i=p; i < str->slen; i++) { + if (testInCharField (&chrs, str->data[i])) break; + } + if ((ret = cb (parm, p, i - p)) < 0) return ret; + p = i + 1; + } while (p <= str->slen); + return BSTR_OK; +} + +/* int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by the + * substring splitStr. An empty splitStr causes the whole str to be + * iterated once. + * + * Note: Non-destructive modification of str from within the cb function + * while performing this split is not undefined. bsplitstrcb behaves in + * sequential lock step with calls to cb. I.e., after returning from a cb + * that return a non-negative integer, bsplitscb continues from the position + * 1 character after the last detected split character and it will halt + * immediately if the length of str falls below this point. However, if the + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitscb will continue in an undefined manner. + */ +int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { +int i, p, ret; + + if (cb == NULL || str == NULL || pos < 0 || pos > str->slen + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + + if (0 == splitStr->slen) { + for (i=pos; i < str->slen; i++) { + if ((ret = cb (parm, i, 1)) < 0) return ret; + } + return BSTR_OK; + } + + if (splitStr->slen == 1) + return bsplitcb (str, splitStr->data[0], pos, cb, parm); + + for (i=p=pos; i <= str->slen - splitStr->slen; i++) { + if (0 == bstr__memcmp (splitStr->data, str->data + i, splitStr->slen)) { + if ((ret = cb (parm, p, i - p)) < 0) return ret; + i += splitStr->slen; + p = i; + } + } + if ((ret = cb (parm, p, str->slen - p)) < 0) return ret; + return BSTR_OK; +} + +struct genBstrList { + bstring b; + struct bstrList * bl; +}; + +static int bscb (void * parm, int ofs, int len) { +struct genBstrList * g = (struct genBstrList *) parm; + if (g->bl->qty >= g->bl->mlen) { + int mlen = g->bl->mlen * 2; + bstring * tbl; + + while (g->bl->qty >= mlen) { + if (mlen < g->bl->mlen) return BSTR_ERR; + mlen += mlen; + } + + tbl = (bstring *) bstr__realloc (g->bl->entry, sizeof (bstring) * mlen); + if (tbl == NULL) return BSTR_ERR; + + g->bl->entry = tbl; + g->bl->mlen = mlen; + } + + g->bl->entry[g->bl->qty] = bmidstr (g->b, ofs, len); + g->bl->qty++; + return BSTR_OK; +} + +/* struct bstrList * bsplit (const_bstring str, unsigned char splitChar) + * + * Create an array of sequential substrings from str divided by the character + * splitChar. + */ +struct bstrList * bsplit (const_bstring str, unsigned char splitChar) { +struct genBstrList g; + + if (str == NULL || str->data == NULL || str->slen < 0) return NULL; + + g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; + g.bl->mlen = 4; + g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); + if (NULL == g.bl->entry) { + bstr__free (g.bl); + return NULL; + } + + g.b = (bstring) str; + g.bl->qty = 0; + if (bsplitcb (str, splitChar, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; + } + return g.bl; +} + +/* struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr) + * + * Create an array of sequential substrings from str divided by the entire + * substring splitStr. + */ +struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr) { +struct genBstrList g; + + if (str == NULL || str->data == NULL || str->slen < 0) return NULL; + + g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; + g.bl->mlen = 4; + g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); + if (NULL == g.bl->entry) { + bstr__free (g.bl); + return NULL; + } + + g.b = (bstring) str; + g.bl->qty = 0; + if (bsplitstrcb (str, splitStr, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; + } + return g.bl; +} + +/* struct bstrList * bsplits (const_bstring str, bstring splitStr) + * + * Create an array of sequential substrings from str divided by any of the + * characters in splitStr. An empty splitStr causes a single entry bstrList + * containing a copy of str to be returned. + */ +struct bstrList * bsplits (const_bstring str, const_bstring splitStr) { +struct genBstrList g; + + if ( str == NULL || str->slen < 0 || str->data == NULL || + splitStr == NULL || splitStr->slen < 0 || splitStr->data == NULL) + return NULL; + + g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; + g.bl->mlen = 4; + g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); + if (NULL == g.bl->entry) { + bstr__free (g.bl); + return NULL; + } + g.b = (bstring) str; + g.bl->qty = 0; + + if (bsplitscb (str, splitStr, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; + } + return g.bl; +} + +#if defined (__TURBOC__) && !defined (__BORLANDC__) +# ifndef BSTRLIB_NOVSNP +# define BSTRLIB_NOVSNP +# endif +#endif + +/* Give WATCOM C/C++, MSVC some latitude for their non-support of vsnprintf */ +#if defined(__WATCOMC__) || defined(_MSC_VER) +#define exvsnprintf(r,b,n,f,a) {r = _vsnprintf (b,n,f,a);} +#else +#ifdef BSTRLIB_NOVSNP +/* This is just a hack. If you are using a system without a vsnprintf, it is + not recommended that bformat be used at all. */ +#define exvsnprintf(r,b,n,f,a) {vsprintf (b,f,a); r = -1;} +#define START_VSNBUFF (256) +#else + +#if defined(__GNUC__) && !defined(__APPLE__) +/* Something is making gcc complain about this prototype not being here, so + I've just gone ahead and put it in. */ +extern int vsnprintf (char *buf, size_t count, const char *format, va_list arg); +#endif + +#define exvsnprintf(r,b,n,f,a) {r = vsnprintf (b,n,f,a);} +#endif +#endif + +#if !defined (BSTRLIB_NOVSNP) + +#ifndef START_VSNBUFF +#define START_VSNBUFF (16) +#endif + +/* On IRIX vsnprintf returns n-1 when the operation would overflow the target + buffer, WATCOM and MSVC both return -1, while C99 requires that the + returned value be exactly what the length would be if the buffer would be + large enough. This leads to the idea that if the return value is larger + than n, then changing n to the return value will reduce the number of + iterations required. */ + +/* int bformata (bstring b, const char * fmt, ...) + * + * After the first parameter, it takes the same parameters as printf (), but + * rather than outputting results to stdio, it appends the results to + * a bstring which contains what would have been output. Note that if there + * is an early generation of a '\0' character, the bstring will be truncated + * to this end point. + */ +int bformata (bstring b, const char * fmt, ...) { +va_list arglist; +bstring buff; +int n, r; + + if (b == NULL || fmt == NULL || b->data == NULL || b->mlen <= 0 + || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; + + /* Since the length is not determinable beforehand, a search is + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + + if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) { + n = 1; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) return BSTR_ERR; + } + + for (;;) { + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + + buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; + + if (BSTR_OK != balloc (buff, n + 2)) { + bdestroy (buff); + return BSTR_ERR; + } + } + + r = bconcat (b, buff); + bdestroy (buff); + return r; +} + +/* int bassignformat (bstring b, const char * fmt, ...) + * + * After the first parameter, it takes the same parameters as printf (), but + * rather than outputting results to stdio, it outputs the results to + * the bstring parameter b. Note that if there is an early generation of a + * '\0' character, the bstring will be truncated to this end point. + */ +int bassignformat (bstring b, const char * fmt, ...) { +va_list arglist; +bstring buff; +int n, r; + + if (b == NULL || fmt == NULL || b->data == NULL || b->mlen <= 0 + || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; + + /* Since the length is not determinable beforehand, a search is + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + + if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) { + n = 1; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) return BSTR_ERR; + } + + for (;;) { + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + + buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; + + if (BSTR_OK != balloc (buff, n + 2)) { + bdestroy (buff); + return BSTR_ERR; + } + } + + r = bassign (b, buff); + bdestroy (buff); + return r; +} + +/* bstring bformat (const char * fmt, ...) + * + * Takes the same parameters as printf (), but rather than outputting results + * to stdio, it forms a bstring which contains what would have been output. + * Note that if there is an early generation of a '\0' character, the + * bstring will be truncated to this end point. + */ +bstring bformat (const char * fmt, ...) { +va_list arglist; +bstring buff; +int n, r; + + if (fmt == NULL) return NULL; + + /* Since the length is not determinable beforehand, a search is + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + + if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) { + n = 1; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) return NULL; + } + + for (;;) { + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + + buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; + + if (BSTR_OK != balloc (buff, n + 2)) { + bdestroy (buff); + return NULL; + } + } + + return buff; +} + +/* int bvcformata (bstring b, int count, const char * fmt, va_list arglist) + * + * The bvcformata function formats data under control of the format control + * string fmt and attempts to append the result to b. The fmt parameter is + * the same as that of the printf function. The variable argument list is + * replaced with arglist, which has been initialized by the va_start macro. + * The size of the appended output is upper bounded by count. If the + * required output exceeds count, the string b is not augmented with any + * contents and a value below BSTR_ERR is returned. If a value below -count + * is returned then it is recommended that the negative of this value be + * used as an update to the count in a subsequent pass. On other errors, + * such as running out of memory, parameter errors or numeric wrap around + * BSTR_ERR is returned. BSTR_OK is returned when the output is successfully + * generated and appended to b. + * + * Note: There is no sanity checking of arglist, and this function is + * destructive of the contents of b from the b->slen point onward. If there + * is an early generation of a '\0' character, the bstring will be truncated + * to this end point. + */ +int bvcformata (bstring b, int count, const char * fmt, va_list arg) { +int n, r, l; + + if (b == NULL || fmt == NULL || count <= 0 || b->data == NULL + || b->mlen <= 0 || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; + + if (count > (n = b->slen + count) + 2) return BSTR_ERR; + if (BSTR_OK != balloc (b, n + 2)) return BSTR_ERR; + + exvsnprintf (r, (char *) b->data + b->slen, count + 2, fmt, arg); + + /* Did the operation complete successfully within bounds? */ + for (l = b->slen; l <= n; l++) { + if ('\0' == b->data[l]) { + b->slen = l; + return BSTR_OK; + } + } + + /* Abort, since the buffer was not large enough. The return value + tries to help set what the retry length should be. */ + + b->data[b->slen] = '\0'; + if (r > count + 1) { /* Does r specify a particular target length? */ + n = r; + } else { + n = count + count; /* If not, just double the size of count */ + if (count > n) n = INT_MAX; + } + n = -n; + + if (n > BSTR_ERR-1) n = BSTR_ERR-1; + return n; +} + +#endif diff --git a/src/bstrlib.h b/src/bstrlib.h new file mode 100644 index 0000000000..c8fa694495 --- /dev/null +++ b/src/bstrlib.h @@ -0,0 +1,304 @@ +/* + * This source file is part of the bstring string library. This code was + * written by Paul Hsieh in 2002-2010, and is covered by either the 3-clause + * BSD open source license or GPL v2.0. Refer to the accompanying documentation + * for details on usage and license. + */ + +/* + * bstrlib.h + * + * This file is the header file for the core module for implementing the + * bstring functions. + */ + +#ifndef BSTRLIB_INCLUDE +#define BSTRLIB_INCLUDE + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#if !defined (BSTRLIB_VSNP_OK) && !defined (BSTRLIB_NOVSNP) +# if defined (__TURBOC__) && !defined (__BORLANDC__) +# define BSTRLIB_NOVSNP +# endif +#endif + +#define BSTR_ERR (-1) +#define BSTR_OK (0) +#define BSTR_BS_BUFF_LENGTH_GET (0) + +typedef struct tagbstring * bstring; +typedef const struct tagbstring * const_bstring; + +/* Copy functions */ +#define cstr2bstr bfromcstr +extern bstring bfromcstr (const char * str); +extern bstring bfromcstralloc (int mlen, const char * str); +extern bstring blk2bstr (const void * blk, int len); +extern char * bstr2cstr (const_bstring s, char z); +extern int bcstrfree (char * s); +extern bstring bstrcpy (const_bstring b1); +extern int bassign (bstring a, const_bstring b); +extern int bassignmidstr (bstring a, const_bstring b, int left, int len); +extern int bassigncstr (bstring a, const char * str); +extern int bassignblk (bstring a, const void * s, int len); + +/* Destroy function */ +extern int bdestroy (bstring b); + +/* Space allocation hinting functions */ +extern int balloc (bstring s, int len); +extern int ballocmin (bstring b, int len); + +/* Substring extraction */ +extern bstring bmidstr (const_bstring b, int left, int len); + +/* Various standard manipulations */ +extern int bconcat (bstring b0, const_bstring b1); +extern int bconchar (bstring b0, char c); +extern int bcatcstr (bstring b, const char * s); +extern int bcatblk (bstring b, const void * s, int len); +extern int binsert (bstring s1, int pos, const_bstring s2, unsigned char fill); +extern int binsertch (bstring s1, int pos, int len, unsigned char fill); +extern int breplace (bstring b1, int pos, int len, const_bstring b2, unsigned char fill); +extern int bdelete (bstring s1, int pos, int len); +extern int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill); +extern int btrunc (bstring b, int n); + +/* Scan/search functions */ +extern int bstricmp (const_bstring b0, const_bstring b1); +extern int bstrnicmp (const_bstring b0, const_bstring b1, int n); +extern int biseqcaseless (const_bstring b0, const_bstring b1); +extern int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len); +extern int biseq (const_bstring b0, const_bstring b1); +extern int bisstemeqblk (const_bstring b0, const void * blk, int len); +extern int biseqcstr (const_bstring b, const char * s); +extern int biseqcstrcaseless (const_bstring b, const char * s); +extern int bstrcmp (const_bstring b0, const_bstring b1); +extern int bstrncmp (const_bstring b0, const_bstring b1, int n); +extern int binstr (const_bstring s1, int pos, const_bstring s2); +extern int binstrr (const_bstring s1, int pos, const_bstring s2); +extern int binstrcaseless (const_bstring s1, int pos, const_bstring s2); +extern int binstrrcaseless (const_bstring s1, int pos, const_bstring s2); +extern int bstrchrp (const_bstring b, int c, int pos); +extern int bstrrchrp (const_bstring b, int c, int pos); +#define bstrchr(b,c) bstrchrp ((b), (c), 0) +#define bstrrchr(b,c) bstrrchrp ((b), (c), blength(b)-1) +extern int binchr (const_bstring b0, int pos, const_bstring b1); +extern int binchrr (const_bstring b0, int pos, const_bstring b1); +extern int bninchr (const_bstring b0, int pos, const_bstring b1); +extern int bninchrr (const_bstring b0, int pos, const_bstring b1); +extern int bfindreplace (bstring b, const_bstring find, const_bstring repl, int pos); +extern int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, int pos); + +/* List of string container functions */ +struct bstrList { + int qty, mlen; + bstring * entry; +}; +extern struct bstrList * bstrListCreate (void); +extern int bstrListDestroy (struct bstrList * sl); +extern int bstrListAlloc (struct bstrList * sl, int msz); +extern int bstrListAllocMin (struct bstrList * sl, int msz); + +/* String split and join functions */ +extern struct bstrList * bsplit (const_bstring str, unsigned char splitChar); +extern struct bstrList * bsplits (const_bstring str, const_bstring splitStr); +extern struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr); +extern bstring bjoin (const struct bstrList * bl, const_bstring sep); +extern int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); +extern int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); +extern int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); + +/* Miscellaneous functions */ +extern int bpattern (bstring b, int len); +extern int btoupper (bstring b); +extern int btolower (bstring b); +extern int bltrimws (bstring b); +extern int brtrimws (bstring b); +extern int btrimws (bstring b); + +/* <*>printf format functions */ +#if !defined (BSTRLIB_NOVSNP) +extern bstring bformat (const char * fmt, ...); +extern int bformata (bstring b, const char * fmt, ...); +extern int bassignformat (bstring b, const char * fmt, ...); +extern int bvcformata (bstring b, int count, const char * fmt, va_list arglist); + +#define bvformata(ret, b, fmt, lastarg) { \ +bstring bstrtmp_b = (b); \ +const char * bstrtmp_fmt = (fmt); \ +int bstrtmp_r = BSTR_ERR, bstrtmp_sz = 16; \ + for (;;) { \ + va_list bstrtmp_arglist; \ + va_start (bstrtmp_arglist, lastarg); \ + bstrtmp_r = bvcformata (bstrtmp_b, bstrtmp_sz, bstrtmp_fmt, bstrtmp_arglist); \ + va_end (bstrtmp_arglist); \ + if (bstrtmp_r >= 0) { /* Everything went ok */ \ + bstrtmp_r = BSTR_OK; \ + break; \ + } else if (-bstrtmp_r <= bstrtmp_sz) { /* A real error? */ \ + bstrtmp_r = BSTR_ERR; \ + break; \ + } \ + bstrtmp_sz = -bstrtmp_r; /* Doubled or target size */ \ + } \ + ret = bstrtmp_r; \ +} + +#endif + +typedef int (*bNgetc) (void *parm); +typedef size_t (* bNread) (void *buff, size_t elsize, size_t nelem, void *parm); + +/* Input functions */ +extern bstring bgets (bNgetc getcPtr, void * parm, char terminator); +extern bstring bread (bNread readPtr, void * parm); +extern int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator); +extern int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator); +extern int breada (bstring b, bNread readPtr, void * parm); + +/* Stream functions */ +extern struct bStream * bsopen (bNread readPtr, void * parm); +extern void * bsclose (struct bStream * s); +extern int bsbufflength (struct bStream * s, int sz); +extern int bsreadln (bstring b, struct bStream * s, char terminator); +extern int bsreadlns (bstring r, struct bStream * s, const_bstring term); +extern int bsread (bstring b, struct bStream * s, int n); +extern int bsreadlna (bstring b, struct bStream * s, char terminator); +extern int bsreadlnsa (bstring r, struct bStream * s, const_bstring term); +extern int bsreada (bstring b, struct bStream * s, int n); +extern int bsunread (struct bStream * s, const_bstring b); +extern int bspeek (bstring r, const struct bStream * s); +extern int bssplitscb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); +extern int bssplitstrcb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); +extern int bseof (const struct bStream * s); + +struct tagbstring { + int mlen; + int slen; + unsigned char * data; +}; + +/* Accessor macros */ +#define blengthe(b, e) (((b) == (void *)0 || (b)->slen < 0) ? (int)(e) : ((b)->slen)) +#define blength(b) (blengthe ((b), 0)) +#define bdataofse(b, o, e) (((b) == (void *)0 || (b)->data == (void*)0) ? (char *)(e) : ((char *)(b)->data) + (o)) +#define bdataofs(b, o) (bdataofse ((b), (o), (void *)0)) +#define bdatae(b, e) (bdataofse (b, 0, e)) +#define bdata(b) (bdataofs (b, 0)) +#define bchare(b, p, e) ((((unsigned)(p)) < (unsigned)blength(b)) ? ((b)->data[(p)]) : (e)) +#define bchar(b, p) bchare ((b), (p), '\0') + +/* Static constant string initialization macro */ +#define bsStaticMlen(q,m) {(m), (int) sizeof(q)-1, (unsigned char *) ("" q "")} +#if defined(_MSC_VER) +/* There are many versions of MSVC which emit __LINE__ as a non-constant. */ +# define bsStatic(q) bsStaticMlen(q,-32) +#endif +#ifndef bsStatic +# define bsStatic(q) bsStaticMlen(q,-__LINE__) +#endif + +/* Static constant block parameter pair */ +#define bsStaticBlkParms(q) ((void *)("" q "")), ((int) sizeof(q)-1) + +/* Reference building macros */ +#define cstr2tbstr btfromcstr +#define btfromcstr(t,s) { \ + (t).data = (unsigned char *) (s); \ + (t).slen = ((t).data) ? ((int) (strlen) ((char *)(t).data)) : 0; \ + (t).mlen = -1; \ +} +#define blk2tbstr(t,s,l) { \ + (t).data = (unsigned char *) (s); \ + (t).slen = l; \ + (t).mlen = -1; \ +} +#define btfromblk(t,s,l) blk2tbstr(t,s,l) +#define bmid2tbstr(t,b,p,l) { \ + const_bstring bstrtmp_s = (b); \ + if (bstrtmp_s && bstrtmp_s->data && bstrtmp_s->slen >= 0) { \ + int bstrtmp_left = (p); \ + int bstrtmp_len = (l); \ + if (bstrtmp_left < 0) { \ + bstrtmp_len += bstrtmp_left; \ + bstrtmp_left = 0; \ + } \ + if (bstrtmp_len > bstrtmp_s->slen - bstrtmp_left) \ + bstrtmp_len = bstrtmp_s->slen - bstrtmp_left; \ + if (bstrtmp_len <= 0) { \ + (t).data = (unsigned char *)""; \ + (t).slen = 0; \ + } else { \ + (t).data = bstrtmp_s->data + bstrtmp_left; \ + (t).slen = bstrtmp_len; \ + } \ + } else { \ + (t).data = (unsigned char *)""; \ + (t).slen = 0; \ + } \ + (t).mlen = -__LINE__; \ +} +#define btfromblkltrimws(t,s,l) { \ + int bstrtmp_idx = 0, bstrtmp_len = (l); \ + unsigned char * bstrtmp_s = (s); \ + if (bstrtmp_s && bstrtmp_len >= 0) { \ + for (; bstrtmp_idx < bstrtmp_len; bstrtmp_idx++) { \ + if (!isspace (bstrtmp_s[bstrtmp_idx])) break; \ + } \ + } \ + (t).data = bstrtmp_s + bstrtmp_idx; \ + (t).slen = bstrtmp_len - bstrtmp_idx; \ + (t).mlen = -__LINE__; \ +} +#define btfromblkrtrimws(t,s,l) { \ + int bstrtmp_len = (l) - 1; \ + unsigned char * bstrtmp_s = (s); \ + if (bstrtmp_s && bstrtmp_len >= 0) { \ + for (; bstrtmp_len >= 0; bstrtmp_len--) { \ + if (!isspace (bstrtmp_s[bstrtmp_len])) break; \ + } \ + } \ + (t).data = bstrtmp_s; \ + (t).slen = bstrtmp_len + 1; \ + (t).mlen = -__LINE__; \ +} +#define btfromblktrimws(t,s,l) { \ + int bstrtmp_idx = 0, bstrtmp_len = (l) - 1; \ + unsigned char * bstrtmp_s = (s); \ + if (bstrtmp_s && bstrtmp_len >= 0) { \ + for (; bstrtmp_idx <= bstrtmp_len; bstrtmp_idx++) { \ + if (!isspace (bstrtmp_s[bstrtmp_idx])) break; \ + } \ + for (; bstrtmp_len >= bstrtmp_idx; bstrtmp_len--) { \ + if (!isspace (bstrtmp_s[bstrtmp_len])) break; \ + } \ + } \ + (t).data = bstrtmp_s + bstrtmp_idx; \ + (t).slen = bstrtmp_len + 1 - bstrtmp_idx; \ + (t).mlen = -__LINE__; \ +} + +/* Write protection macros */ +#define bwriteprotect(t) { if ((t).mlen >= 0) (t).mlen = -1; } +#define bwriteallow(t) { if ((t).mlen == -1) (t).mlen = (t).slen + ((t).slen == 0); } +#define biswriteprotected(t) ((t).mlen <= 0) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/case_fold_switch.c b/src/case_fold_switch.c new file mode 100644 index 0000000000..70fdd755fd --- /dev/null +++ b/src/case_fold_switch.c @@ -0,0 +1,2637 @@ + switch (c) { + case 0x0041: + bufpush(0x0061); + break; + case 0x0042: + bufpush(0x0062); + break; + case 0x0043: + bufpush(0x0063); + break; + case 0x0044: + bufpush(0x0064); + break; + case 0x0045: + bufpush(0x0065); + break; + case 0x0046: + bufpush(0x0066); + break; + case 0x0047: + bufpush(0x0067); + break; + case 0x0048: + bufpush(0x0068); + break; + case 0x0049: + bufpush(0x0069); + break; + case 0x004A: + bufpush(0x006A); + break; + case 0x004B: + bufpush(0x006B); + break; + case 0x004C: + bufpush(0x006C); + break; + case 0x004D: + bufpush(0x006D); + break; + case 0x004E: + bufpush(0x006E); + break; + case 0x004F: + bufpush(0x006F); + break; + case 0x0050: + bufpush(0x0070); + break; + case 0x0051: + bufpush(0x0071); + break; + case 0x0052: + bufpush(0x0072); + break; + case 0x0053: + bufpush(0x0073); + break; + case 0x0054: + bufpush(0x0074); + break; + case 0x0055: + bufpush(0x0075); + break; + case 0x0056: + bufpush(0x0076); + break; + case 0x0057: + bufpush(0x0077); + break; + case 0x0058: + bufpush(0x0078); + break; + case 0x0059: + bufpush(0x0079); + break; + case 0x005A: + bufpush(0x007A); + break; + case 0x00B5: + bufpush(0x03BC); + break; + case 0x00C0: + bufpush(0x00E0); + break; + case 0x00C1: + bufpush(0x00E1); + break; + case 0x00C2: + bufpush(0x00E2); + break; + case 0x00C3: + bufpush(0x00E3); + break; + case 0x00C4: + bufpush(0x00E4); + break; + case 0x00C5: + bufpush(0x00E5); + break; + case 0x00C6: + bufpush(0x00E6); + break; + case 0x00C7: + bufpush(0x00E7); + break; + case 0x00C8: + bufpush(0x00E8); + break; + case 0x00C9: + bufpush(0x00E9); + break; + case 0x00CA: + bufpush(0x00EA); + break; + case 0x00CB: + bufpush(0x00EB); + break; + case 0x00CC: + bufpush(0x00EC); + break; + case 0x00CD: + bufpush(0x00ED); + break; + case 0x00CE: + bufpush(0x00EE); + break; + case 0x00CF: + bufpush(0x00EF); + break; + case 0x00D0: + bufpush(0x00F0); + break; + case 0x00D1: + bufpush(0x00F1); + break; + case 0x00D2: + bufpush(0x00F2); + break; + case 0x00D3: + bufpush(0x00F3); + break; + case 0x00D4: + bufpush(0x00F4); + break; + case 0x00D5: + bufpush(0x00F5); + break; + case 0x00D6: + bufpush(0x00F6); + break; + case 0x00D8: + bufpush(0x00F8); + break; + case 0x00D9: + bufpush(0x00F9); + break; + case 0x00DA: + bufpush(0x00FA); + break; + case 0x00DB: + bufpush(0x00FB); + break; + case 0x00DC: + bufpush(0x00FC); + break; + case 0x00DD: + bufpush(0x00FD); + break; + case 0x00DE: + bufpush(0x00FE); + break; + case 0x00DF: + bufpush(0x0073); + bufpush(0x0073); + break; + case 0x0100: + bufpush(0x0101); + break; + case 0x0102: + bufpush(0x0103); + break; + case 0x0104: + bufpush(0x0105); + break; + case 0x0106: + bufpush(0x0107); + break; + case 0x0108: + bufpush(0x0109); + break; + case 0x010A: + bufpush(0x010B); + break; + case 0x010C: + bufpush(0x010D); + break; + case 0x010E: + bufpush(0x010F); + break; + case 0x0110: + bufpush(0x0111); + break; + case 0x0112: + bufpush(0x0113); + break; + case 0x0114: + bufpush(0x0115); + break; + case 0x0116: + bufpush(0x0117); + break; + case 0x0118: + bufpush(0x0119); + break; + case 0x011A: + bufpush(0x011B); + break; + case 0x011C: + bufpush(0x011D); + break; + case 0x011E: + bufpush(0x011F); + break; + case 0x0120: + bufpush(0x0121); + break; + case 0x0122: + bufpush(0x0123); + break; + case 0x0124: + bufpush(0x0125); + break; + case 0x0126: + bufpush(0x0127); + break; + case 0x0128: + bufpush(0x0129); + break; + case 0x012A: + bufpush(0x012B); + break; + case 0x012C: + bufpush(0x012D); + break; + case 0x012E: + bufpush(0x012F); + break; + case 0x0130: + bufpush(0x0069); + bufpush(0x0307); + break; + case 0x0132: + bufpush(0x0133); + break; + case 0x0134: + bufpush(0x0135); + break; + case 0x0136: + bufpush(0x0137); + break; + case 0x0139: + bufpush(0x013A); + break; + case 0x013B: + bufpush(0x013C); + break; + case 0x013D: + bufpush(0x013E); + break; + case 0x013F: + bufpush(0x0140); + break; + case 0x0141: + bufpush(0x0142); + break; + case 0x0143: + bufpush(0x0144); + break; + case 0x0145: + bufpush(0x0146); + break; + case 0x0147: + bufpush(0x0148); + break; + case 0x0149: + bufpush(0x02BC); + bufpush(0x006E); + break; + case 0x014A: + bufpush(0x014B); + break; + case 0x014C: + bufpush(0x014D); + break; + case 0x014E: + bufpush(0x014F); + break; + case 0x0150: + bufpush(0x0151); + break; + case 0x0152: + bufpush(0x0153); + break; + case 0x0154: + bufpush(0x0155); + break; + case 0x0156: + bufpush(0x0157); + break; + case 0x0158: + bufpush(0x0159); + break; + case 0x015A: + bufpush(0x015B); + break; + case 0x015C: + bufpush(0x015D); + break; + case 0x015E: + bufpush(0x015F); + break; + case 0x0160: + bufpush(0x0161); + break; + case 0x0162: + bufpush(0x0163); + break; + case 0x0164: + bufpush(0x0165); + break; + case 0x0166: + bufpush(0x0167); + break; + case 0x0168: + bufpush(0x0169); + break; + case 0x016A: + bufpush(0x016B); + break; + case 0x016C: + bufpush(0x016D); + break; + case 0x016E: + bufpush(0x016F); + break; + case 0x0170: + bufpush(0x0171); + break; + case 0x0172: + bufpush(0x0173); + break; + case 0x0174: + bufpush(0x0175); + break; + case 0x0176: + bufpush(0x0177); + break; + case 0x0178: + bufpush(0x00FF); + break; + case 0x0179: + bufpush(0x017A); + break; + case 0x017B: + bufpush(0x017C); + break; + case 0x017D: + bufpush(0x017E); + break; + case 0x017F: + bufpush(0x0073); + break; + case 0x0181: + bufpush(0x0253); + break; + case 0x0182: + bufpush(0x0183); + break; + case 0x0184: + bufpush(0x0185); + break; + case 0x0186: + bufpush(0x0254); + break; + case 0x0187: + bufpush(0x0188); + break; + case 0x0189: + bufpush(0x0256); + break; + case 0x018A: + bufpush(0x0257); + break; + case 0x018B: + bufpush(0x018C); + break; + case 0x018E: + bufpush(0x01DD); + break; + case 0x018F: + bufpush(0x0259); + break; + case 0x0190: + bufpush(0x025B); + break; + case 0x0191: + bufpush(0x0192); + break; + case 0x0193: + bufpush(0x0260); + break; + case 0x0194: + bufpush(0x0263); + break; + case 0x0196: + bufpush(0x0269); + break; + case 0x0197: + bufpush(0x0268); + break; + case 0x0198: + bufpush(0x0199); + break; + case 0x019C: + bufpush(0x026F); + break; + case 0x019D: + bufpush(0x0272); + break; + case 0x019F: + bufpush(0x0275); + break; + case 0x01A0: + bufpush(0x01A1); + break; + case 0x01A2: + bufpush(0x01A3); + break; + case 0x01A4: + bufpush(0x01A5); + break; + case 0x01A6: + bufpush(0x0280); + break; + case 0x01A7: + bufpush(0x01A8); + break; + case 0x01A9: + bufpush(0x0283); + break; + case 0x01AC: + bufpush(0x01AD); + break; + case 0x01AE: + bufpush(0x0288); + break; + case 0x01AF: + bufpush(0x01B0); + break; + case 0x01B1: + bufpush(0x028A); + break; + case 0x01B2: + bufpush(0x028B); + break; + case 0x01B3: + bufpush(0x01B4); + break; + case 0x01B5: + bufpush(0x01B6); + break; + case 0x01B7: + bufpush(0x0292); + break; + case 0x01B8: + bufpush(0x01B9); + break; + case 0x01BC: + bufpush(0x01BD); + break; + case 0x01C4: + bufpush(0x01C6); + break; + case 0x01C5: + bufpush(0x01C6); + break; + case 0x01C7: + bufpush(0x01C9); + break; + case 0x01C8: + bufpush(0x01C9); + break; + case 0x01CA: + bufpush(0x01CC); + break; + case 0x01CB: + bufpush(0x01CC); + break; + case 0x01CD: + bufpush(0x01CE); + break; + case 0x01CF: + bufpush(0x01D0); + break; + case 0x01D1: + bufpush(0x01D2); + break; + case 0x01D3: + bufpush(0x01D4); + break; + case 0x01D5: + bufpush(0x01D6); + break; + case 0x01D7: + bufpush(0x01D8); + break; + case 0x01D9: + bufpush(0x01DA); + break; + case 0x01DB: + bufpush(0x01DC); + break; + case 0x01DE: + bufpush(0x01DF); + break; + case 0x01E0: + bufpush(0x01E1); + break; + case 0x01E2: + bufpush(0x01E3); + break; + case 0x01E4: + bufpush(0x01E5); + break; + case 0x01E6: + bufpush(0x01E7); + break; + case 0x01E8: + bufpush(0x01E9); + break; + case 0x01EA: + bufpush(0x01EB); + break; + case 0x01EC: + bufpush(0x01ED); + break; + case 0x01EE: + bufpush(0x01EF); + break; + case 0x01F0: + bufpush(0x006A); + bufpush(0x030C); + break; + case 0x01F1: + bufpush(0x01F3); + break; + case 0x01F2: + bufpush(0x01F3); + break; + case 0x01F4: + bufpush(0x01F5); + break; + case 0x01F6: + bufpush(0x0195); + break; + case 0x01F7: + bufpush(0x01BF); + break; + case 0x01F8: + bufpush(0x01F9); + break; + case 0x01FA: + bufpush(0x01FB); + break; + case 0x01FC: + bufpush(0x01FD); + break; + case 0x01FE: + bufpush(0x01FF); + break; + case 0x0200: + bufpush(0x0201); + break; + case 0x0202: + bufpush(0x0203); + break; + case 0x0204: + bufpush(0x0205); + break; + case 0x0206: + bufpush(0x0207); + break; + case 0x0208: + bufpush(0x0209); + break; + case 0x020A: + bufpush(0x020B); + break; + case 0x020C: + bufpush(0x020D); + break; + case 0x020E: + bufpush(0x020F); + break; + case 0x0210: + bufpush(0x0211); + break; + case 0x0212: + bufpush(0x0213); + break; + case 0x0214: + bufpush(0x0215); + break; + case 0x0216: + bufpush(0x0217); + break; + case 0x0218: + bufpush(0x0219); + break; + case 0x021A: + bufpush(0x021B); + break; + case 0x021C: + bufpush(0x021D); + break; + case 0x021E: + bufpush(0x021F); + break; + case 0x0220: + bufpush(0x019E); + break; + case 0x0222: + bufpush(0x0223); + break; + case 0x0224: + bufpush(0x0225); + break; + case 0x0226: + bufpush(0x0227); + break; + case 0x0228: + bufpush(0x0229); + break; + case 0x022A: + bufpush(0x022B); + break; + case 0x022C: + bufpush(0x022D); + break; + case 0x022E: + bufpush(0x022F); + break; + case 0x0230: + bufpush(0x0231); + break; + case 0x0232: + bufpush(0x0233); + break; + case 0x0345: + bufpush(0x03B9); + break; + case 0x0386: + bufpush(0x03AC); + break; + case 0x0388: + bufpush(0x03AD); + break; + case 0x0389: + bufpush(0x03AE); + break; + case 0x038A: + bufpush(0x03AF); + break; + case 0x038C: + bufpush(0x03CC); + break; + case 0x038E: + bufpush(0x03CD); + break; + case 0x038F: + bufpush(0x03CE); + break; + case 0x0390: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x0391: + bufpush(0x03B1); + break; + case 0x0392: + bufpush(0x03B2); + break; + case 0x0393: + bufpush(0x03B3); + break; + case 0x0394: + bufpush(0x03B4); + break; + case 0x0395: + bufpush(0x03B5); + break; + case 0x0396: + bufpush(0x03B6); + break; + case 0x0397: + bufpush(0x03B7); + break; + case 0x0398: + bufpush(0x03B8); + break; + case 0x0399: + bufpush(0x03B9); + break; + case 0x039A: + bufpush(0x03BA); + break; + case 0x039B: + bufpush(0x03BB); + break; + case 0x039C: + bufpush(0x03BC); + break; + case 0x039D: + bufpush(0x03BD); + break; + case 0x039E: + bufpush(0x03BE); + break; + case 0x039F: + bufpush(0x03BF); + break; + case 0x03A0: + bufpush(0x03C0); + break; + case 0x03A1: + bufpush(0x03C1); + break; + case 0x03A3: + bufpush(0x03C3); + break; + case 0x03A4: + bufpush(0x03C4); + break; + case 0x03A5: + bufpush(0x03C5); + break; + case 0x03A6: + bufpush(0x03C6); + break; + case 0x03A7: + bufpush(0x03C7); + break; + case 0x03A8: + bufpush(0x03C8); + break; + case 0x03A9: + bufpush(0x03C9); + break; + case 0x03AA: + bufpush(0x03CA); + break; + case 0x03AB: + bufpush(0x03CB); + break; + case 0x03B0: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x03C2: + bufpush(0x03C3); + break; + case 0x03D0: + bufpush(0x03B2); + break; + case 0x03D1: + bufpush(0x03B8); + break; + case 0x03D5: + bufpush(0x03C6); + break; + case 0x03D6: + bufpush(0x03C0); + break; + case 0x03D8: + bufpush(0x03D9); + break; + case 0x03DA: + bufpush(0x03DB); + break; + case 0x03DC: + bufpush(0x03DD); + break; + case 0x03DE: + bufpush(0x03DF); + break; + case 0x03E0: + bufpush(0x03E1); + break; + case 0x03E2: + bufpush(0x03E3); + break; + case 0x03E4: + bufpush(0x03E5); + break; + case 0x03E6: + bufpush(0x03E7); + break; + case 0x03E8: + bufpush(0x03E9); + break; + case 0x03EA: + bufpush(0x03EB); + break; + case 0x03EC: + bufpush(0x03ED); + break; + case 0x03EE: + bufpush(0x03EF); + break; + case 0x03F0: + bufpush(0x03BA); + break; + case 0x03F1: + bufpush(0x03C1); + break; + case 0x03F2: + bufpush(0x03C3); + break; + case 0x03F4: + bufpush(0x03B8); + break; + case 0x03F5: + bufpush(0x03B5); + break; + case 0x0400: + bufpush(0x0450); + break; + case 0x0401: + bufpush(0x0451); + break; + case 0x0402: + bufpush(0x0452); + break; + case 0x0403: + bufpush(0x0453); + break; + case 0x0404: + bufpush(0x0454); + break; + case 0x0405: + bufpush(0x0455); + break; + case 0x0406: + bufpush(0x0456); + break; + case 0x0407: + bufpush(0x0457); + break; + case 0x0408: + bufpush(0x0458); + break; + case 0x0409: + bufpush(0x0459); + break; + case 0x040A: + bufpush(0x045A); + break; + case 0x040B: + bufpush(0x045B); + break; + case 0x040C: + bufpush(0x045C); + break; + case 0x040D: + bufpush(0x045D); + break; + case 0x040E: + bufpush(0x045E); + break; + case 0x040F: + bufpush(0x045F); + break; + case 0x0410: + bufpush(0x0430); + break; + case 0x0411: + bufpush(0x0431); + break; + case 0x0412: + bufpush(0x0432); + break; + case 0x0413: + bufpush(0x0433); + break; + case 0x0414: + bufpush(0x0434); + break; + case 0x0415: + bufpush(0x0435); + break; + case 0x0416: + bufpush(0x0436); + break; + case 0x0417: + bufpush(0x0437); + break; + case 0x0418: + bufpush(0x0438); + break; + case 0x0419: + bufpush(0x0439); + break; + case 0x041A: + bufpush(0x043A); + break; + case 0x041B: + bufpush(0x043B); + break; + case 0x041C: + bufpush(0x043C); + break; + case 0x041D: + bufpush(0x043D); + break; + case 0x041E: + bufpush(0x043E); + break; + case 0x041F: + bufpush(0x043F); + break; + case 0x0420: + bufpush(0x0440); + break; + case 0x0421: + bufpush(0x0441); + break; + case 0x0422: + bufpush(0x0442); + break; + case 0x0423: + bufpush(0x0443); + break; + case 0x0424: + bufpush(0x0444); + break; + case 0x0425: + bufpush(0x0445); + break; + case 0x0426: + bufpush(0x0446); + break; + case 0x0427: + bufpush(0x0447); + break; + case 0x0428: + bufpush(0x0448); + break; + case 0x0429: + bufpush(0x0449); + break; + case 0x042A: + bufpush(0x044A); + break; + case 0x042B: + bufpush(0x044B); + break; + case 0x042C: + bufpush(0x044C); + break; + case 0x042D: + bufpush(0x044D); + break; + case 0x042E: + bufpush(0x044E); + break; + case 0x042F: + bufpush(0x044F); + break; + case 0x0460: + bufpush(0x0461); + break; + case 0x0462: + bufpush(0x0463); + break; + case 0x0464: + bufpush(0x0465); + break; + case 0x0466: + bufpush(0x0467); + break; + case 0x0468: + bufpush(0x0469); + break; + case 0x046A: + bufpush(0x046B); + break; + case 0x046C: + bufpush(0x046D); + break; + case 0x046E: + bufpush(0x046F); + break; + case 0x0470: + bufpush(0x0471); + break; + case 0x0472: + bufpush(0x0473); + break; + case 0x0474: + bufpush(0x0475); + break; + case 0x0476: + bufpush(0x0477); + break; + case 0x0478: + bufpush(0x0479); + break; + case 0x047A: + bufpush(0x047B); + break; + case 0x047C: + bufpush(0x047D); + break; + case 0x047E: + bufpush(0x047F); + break; + case 0x0480: + bufpush(0x0481); + break; + case 0x048A: + bufpush(0x048B); + break; + case 0x048C: + bufpush(0x048D); + break; + case 0x048E: + bufpush(0x048F); + break; + case 0x0490: + bufpush(0x0491); + break; + case 0x0492: + bufpush(0x0493); + break; + case 0x0494: + bufpush(0x0495); + break; + case 0x0496: + bufpush(0x0497); + break; + case 0x0498: + bufpush(0x0499); + break; + case 0x049A: + bufpush(0x049B); + break; + case 0x049C: + bufpush(0x049D); + break; + case 0x049E: + bufpush(0x049F); + break; + case 0x04A0: + bufpush(0x04A1); + break; + case 0x04A2: + bufpush(0x04A3); + break; + case 0x04A4: + bufpush(0x04A5); + break; + case 0x04A6: + bufpush(0x04A7); + break; + case 0x04A8: + bufpush(0x04A9); + break; + case 0x04AA: + bufpush(0x04AB); + break; + case 0x04AC: + bufpush(0x04AD); + break; + case 0x04AE: + bufpush(0x04AF); + break; + case 0x04B0: + bufpush(0x04B1); + break; + case 0x04B2: + bufpush(0x04B3); + break; + case 0x04B4: + bufpush(0x04B5); + break; + case 0x04B6: + bufpush(0x04B7); + break; + case 0x04B8: + bufpush(0x04B9); + break; + case 0x04BA: + bufpush(0x04BB); + break; + case 0x04BC: + bufpush(0x04BD); + break; + case 0x04BE: + bufpush(0x04BF); + break; + case 0x04C1: + bufpush(0x04C2); + break; + case 0x04C3: + bufpush(0x04C4); + break; + case 0x04C5: + bufpush(0x04C6); + break; + case 0x04C7: + bufpush(0x04C8); + break; + case 0x04C9: + bufpush(0x04CA); + break; + case 0x04CB: + bufpush(0x04CC); + break; + case 0x04CD: + bufpush(0x04CE); + break; + case 0x04D0: + bufpush(0x04D1); + break; + case 0x04D2: + bufpush(0x04D3); + break; + case 0x04D4: + bufpush(0x04D5); + break; + case 0x04D6: + bufpush(0x04D7); + break; + case 0x04D8: + bufpush(0x04D9); + break; + case 0x04DA: + bufpush(0x04DB); + break; + case 0x04DC: + bufpush(0x04DD); + break; + case 0x04DE: + bufpush(0x04DF); + break; + case 0x04E0: + bufpush(0x04E1); + break; + case 0x04E2: + bufpush(0x04E3); + break; + case 0x04E4: + bufpush(0x04E5); + break; + case 0x04E6: + bufpush(0x04E7); + break; + case 0x04E8: + bufpush(0x04E9); + break; + case 0x04EA: + bufpush(0x04EB); + break; + case 0x04EC: + bufpush(0x04ED); + break; + case 0x04EE: + bufpush(0x04EF); + break; + case 0x04F0: + bufpush(0x04F1); + break; + case 0x04F2: + bufpush(0x04F3); + break; + case 0x04F4: + bufpush(0x04F5); + break; + case 0x04F8: + bufpush(0x04F9); + break; + case 0x0500: + bufpush(0x0501); + break; + case 0x0502: + bufpush(0x0503); + break; + case 0x0504: + bufpush(0x0505); + break; + case 0x0506: + bufpush(0x0507); + break; + case 0x0508: + bufpush(0x0509); + break; + case 0x050A: + bufpush(0x050B); + break; + case 0x050C: + bufpush(0x050D); + break; + case 0x050E: + bufpush(0x050F); + break; + case 0x0531: + bufpush(0x0561); + break; + case 0x0532: + bufpush(0x0562); + break; + case 0x0533: + bufpush(0x0563); + break; + case 0x0534: + bufpush(0x0564); + break; + case 0x0535: + bufpush(0x0565); + break; + case 0x0536: + bufpush(0x0566); + break; + case 0x0537: + bufpush(0x0567); + break; + case 0x0538: + bufpush(0x0568); + break; + case 0x0539: + bufpush(0x0569); + break; + case 0x053A: + bufpush(0x056A); + break; + case 0x053B: + bufpush(0x056B); + break; + case 0x053C: + bufpush(0x056C); + break; + case 0x053D: + bufpush(0x056D); + break; + case 0x053E: + bufpush(0x056E); + break; + case 0x053F: + bufpush(0x056F); + break; + case 0x0540: + bufpush(0x0570); + break; + case 0x0541: + bufpush(0x0571); + break; + case 0x0542: + bufpush(0x0572); + break; + case 0x0543: + bufpush(0x0573); + break; + case 0x0544: + bufpush(0x0574); + break; + case 0x0545: + bufpush(0x0575); + break; + case 0x0546: + bufpush(0x0576); + break; + case 0x0547: + bufpush(0x0577); + break; + case 0x0548: + bufpush(0x0578); + break; + case 0x0549: + bufpush(0x0579); + break; + case 0x054A: + bufpush(0x057A); + break; + case 0x054B: + bufpush(0x057B); + break; + case 0x054C: + bufpush(0x057C); + break; + case 0x054D: + bufpush(0x057D); + break; + case 0x054E: + bufpush(0x057E); + break; + case 0x054F: + bufpush(0x057F); + break; + case 0x0550: + bufpush(0x0580); + break; + case 0x0551: + bufpush(0x0581); + break; + case 0x0552: + bufpush(0x0582); + break; + case 0x0553: + bufpush(0x0583); + break; + case 0x0554: + bufpush(0x0584); + break; + case 0x0555: + bufpush(0x0585); + break; + case 0x0556: + bufpush(0x0586); + break; + case 0x0587: + bufpush(0x0565); + bufpush(0x0582); + break; + case 0x1E00: + bufpush(0x1E01); + break; + case 0x1E02: + bufpush(0x1E03); + break; + case 0x1E04: + bufpush(0x1E05); + break; + case 0x1E06: + bufpush(0x1E07); + break; + case 0x1E08: + bufpush(0x1E09); + break; + case 0x1E0A: + bufpush(0x1E0B); + break; + case 0x1E0C: + bufpush(0x1E0D); + break; + case 0x1E0E: + bufpush(0x1E0F); + break; + case 0x1E10: + bufpush(0x1E11); + break; + case 0x1E12: + bufpush(0x1E13); + break; + case 0x1E14: + bufpush(0x1E15); + break; + case 0x1E16: + bufpush(0x1E17); + break; + case 0x1E18: + bufpush(0x1E19); + break; + case 0x1E1A: + bufpush(0x1E1B); + break; + case 0x1E1C: + bufpush(0x1E1D); + break; + case 0x1E1E: + bufpush(0x1E1F); + break; + case 0x1E20: + bufpush(0x1E21); + break; + case 0x1E22: + bufpush(0x1E23); + break; + case 0x1E24: + bufpush(0x1E25); + break; + case 0x1E26: + bufpush(0x1E27); + break; + case 0x1E28: + bufpush(0x1E29); + break; + case 0x1E2A: + bufpush(0x1E2B); + break; + case 0x1E2C: + bufpush(0x1E2D); + break; + case 0x1E2E: + bufpush(0x1E2F); + break; + case 0x1E30: + bufpush(0x1E31); + break; + case 0x1E32: + bufpush(0x1E33); + break; + case 0x1E34: + bufpush(0x1E35); + break; + case 0x1E36: + bufpush(0x1E37); + break; + case 0x1E38: + bufpush(0x1E39); + break; + case 0x1E3A: + bufpush(0x1E3B); + break; + case 0x1E3C: + bufpush(0x1E3D); + break; + case 0x1E3E: + bufpush(0x1E3F); + break; + case 0x1E40: + bufpush(0x1E41); + break; + case 0x1E42: + bufpush(0x1E43); + break; + case 0x1E44: + bufpush(0x1E45); + break; + case 0x1E46: + bufpush(0x1E47); + break; + case 0x1E48: + bufpush(0x1E49); + break; + case 0x1E4A: + bufpush(0x1E4B); + break; + case 0x1E4C: + bufpush(0x1E4D); + break; + case 0x1E4E: + bufpush(0x1E4F); + break; + case 0x1E50: + bufpush(0x1E51); + break; + case 0x1E52: + bufpush(0x1E53); + break; + case 0x1E54: + bufpush(0x1E55); + break; + case 0x1E56: + bufpush(0x1E57); + break; + case 0x1E58: + bufpush(0x1E59); + break; + case 0x1E5A: + bufpush(0x1E5B); + break; + case 0x1E5C: + bufpush(0x1E5D); + break; + case 0x1E5E: + bufpush(0x1E5F); + break; + case 0x1E60: + bufpush(0x1E61); + break; + case 0x1E62: + bufpush(0x1E63); + break; + case 0x1E64: + bufpush(0x1E65); + break; + case 0x1E66: + bufpush(0x1E67); + break; + case 0x1E68: + bufpush(0x1E69); + break; + case 0x1E6A: + bufpush(0x1E6B); + break; + case 0x1E6C: + bufpush(0x1E6D); + break; + case 0x1E6E: + bufpush(0x1E6F); + break; + case 0x1E70: + bufpush(0x1E71); + break; + case 0x1E72: + bufpush(0x1E73); + break; + case 0x1E74: + bufpush(0x1E75); + break; + case 0x1E76: + bufpush(0x1E77); + break; + case 0x1E78: + bufpush(0x1E79); + break; + case 0x1E7A: + bufpush(0x1E7B); + break; + case 0x1E7C: + bufpush(0x1E7D); + break; + case 0x1E7E: + bufpush(0x1E7F); + break; + case 0x1E80: + bufpush(0x1E81); + break; + case 0x1E82: + bufpush(0x1E83); + break; + case 0x1E84: + bufpush(0x1E85); + break; + case 0x1E86: + bufpush(0x1E87); + break; + case 0x1E88: + bufpush(0x1E89); + break; + case 0x1E8A: + bufpush(0x1E8B); + break; + case 0x1E8C: + bufpush(0x1E8D); + break; + case 0x1E8E: + bufpush(0x1E8F); + break; + case 0x1E90: + bufpush(0x1E91); + break; + case 0x1E92: + bufpush(0x1E93); + break; + case 0x1E94: + bufpush(0x1E95); + break; + case 0x1E96: + bufpush(0x0068); + bufpush(0x0331); + break; + case 0x1E97: + bufpush(0x0074); + bufpush(0x0308); + break; + case 0x1E98: + bufpush(0x0077); + bufpush(0x030A); + break; + case 0x1E99: + bufpush(0x0079); + bufpush(0x030A); + break; + case 0x1E9A: + bufpush(0x0061); + bufpush(0x02BE); + break; + case 0x1E9B: + bufpush(0x1E61); + break; + case 0x1EA0: + bufpush(0x1EA1); + break; + case 0x1EA2: + bufpush(0x1EA3); + break; + case 0x1EA4: + bufpush(0x1EA5); + break; + case 0x1EA6: + bufpush(0x1EA7); + break; + case 0x1EA8: + bufpush(0x1EA9); + break; + case 0x1EAA: + bufpush(0x1EAB); + break; + case 0x1EAC: + bufpush(0x1EAD); + break; + case 0x1EAE: + bufpush(0x1EAF); + break; + case 0x1EB0: + bufpush(0x1EB1); + break; + case 0x1EB2: + bufpush(0x1EB3); + break; + case 0x1EB4: + bufpush(0x1EB5); + break; + case 0x1EB6: + bufpush(0x1EB7); + break; + case 0x1EB8: + bufpush(0x1EB9); + break; + case 0x1EBA: + bufpush(0x1EBB); + break; + case 0x1EBC: + bufpush(0x1EBD); + break; + case 0x1EBE: + bufpush(0x1EBF); + break; + case 0x1EC0: + bufpush(0x1EC1); + break; + case 0x1EC2: + bufpush(0x1EC3); + break; + case 0x1EC4: + bufpush(0x1EC5); + break; + case 0x1EC6: + bufpush(0x1EC7); + break; + case 0x1EC8: + bufpush(0x1EC9); + break; + case 0x1ECA: + bufpush(0x1ECB); + break; + case 0x1ECC: + bufpush(0x1ECD); + break; + case 0x1ECE: + bufpush(0x1ECF); + break; + case 0x1ED0: + bufpush(0x1ED1); + break; + case 0x1ED2: + bufpush(0x1ED3); + break; + case 0x1ED4: + bufpush(0x1ED5); + break; + case 0x1ED6: + bufpush(0x1ED7); + break; + case 0x1ED8: + bufpush(0x1ED9); + break; + case 0x1EDA: + bufpush(0x1EDB); + break; + case 0x1EDC: + bufpush(0x1EDD); + break; + case 0x1EDE: + bufpush(0x1EDF); + break; + case 0x1EE0: + bufpush(0x1EE1); + break; + case 0x1EE2: + bufpush(0x1EE3); + break; + case 0x1EE4: + bufpush(0x1EE5); + break; + case 0x1EE6: + bufpush(0x1EE7); + break; + case 0x1EE8: + bufpush(0x1EE9); + break; + case 0x1EEA: + bufpush(0x1EEB); + break; + case 0x1EEC: + bufpush(0x1EED); + break; + case 0x1EEE: + bufpush(0x1EEF); + break; + case 0x1EF0: + bufpush(0x1EF1); + break; + case 0x1EF2: + bufpush(0x1EF3); + break; + case 0x1EF4: + bufpush(0x1EF5); + break; + case 0x1EF6: + bufpush(0x1EF7); + break; + case 0x1EF8: + bufpush(0x1EF9); + break; + case 0x1F08: + bufpush(0x1F00); + break; + case 0x1F09: + bufpush(0x1F01); + break; + case 0x1F0A: + bufpush(0x1F02); + break; + case 0x1F0B: + bufpush(0x1F03); + break; + case 0x1F0C: + bufpush(0x1F04); + break; + case 0x1F0D: + bufpush(0x1F05); + break; + case 0x1F0E: + bufpush(0x1F06); + break; + case 0x1F0F: + bufpush(0x1F07); + break; + case 0x1F18: + bufpush(0x1F10); + break; + case 0x1F19: + bufpush(0x1F11); + break; + case 0x1F1A: + bufpush(0x1F12); + break; + case 0x1F1B: + bufpush(0x1F13); + break; + case 0x1F1C: + bufpush(0x1F14); + break; + case 0x1F1D: + bufpush(0x1F15); + break; + case 0x1F28: + bufpush(0x1F20); + break; + case 0x1F29: + bufpush(0x1F21); + break; + case 0x1F2A: + bufpush(0x1F22); + break; + case 0x1F2B: + bufpush(0x1F23); + break; + case 0x1F2C: + bufpush(0x1F24); + break; + case 0x1F2D: + bufpush(0x1F25); + break; + case 0x1F2E: + bufpush(0x1F26); + break; + case 0x1F2F: + bufpush(0x1F27); + break; + case 0x1F38: + bufpush(0x1F30); + break; + case 0x1F39: + bufpush(0x1F31); + break; + case 0x1F3A: + bufpush(0x1F32); + break; + case 0x1F3B: + bufpush(0x1F33); + break; + case 0x1F3C: + bufpush(0x1F34); + break; + case 0x1F3D: + bufpush(0x1F35); + break; + case 0x1F3E: + bufpush(0x1F36); + break; + case 0x1F3F: + bufpush(0x1F37); + break; + case 0x1F48: + bufpush(0x1F40); + break; + case 0x1F49: + bufpush(0x1F41); + break; + case 0x1F4A: + bufpush(0x1F42); + break; + case 0x1F4B: + bufpush(0x1F43); + break; + case 0x1F4C: + bufpush(0x1F44); + break; + case 0x1F4D: + bufpush(0x1F45); + break; + case 0x1F50: + bufpush(0x03C5); + bufpush(0x0313); + break; + case 0x1F52: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0300); + break; + case 0x1F54: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0301); + break; + case 0x1F56: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0342); + break; + case 0x1F59: + bufpush(0x1F51); + break; + case 0x1F5B: + bufpush(0x1F53); + break; + case 0x1F5D: + bufpush(0x1F55); + break; + case 0x1F5F: + bufpush(0x1F57); + break; + case 0x1F68: + bufpush(0x1F60); + break; + case 0x1F69: + bufpush(0x1F61); + break; + case 0x1F6A: + bufpush(0x1F62); + break; + case 0x1F6B: + bufpush(0x1F63); + break; + case 0x1F6C: + bufpush(0x1F64); + break; + case 0x1F6D: + bufpush(0x1F65); + break; + case 0x1F6E: + bufpush(0x1F66); + break; + case 0x1F6F: + bufpush(0x1F67); + break; + case 0x1F80: + bufpush(0x1F00); + bufpush(0x03B9); + break; + case 0x1F81: + bufpush(0x1F01); + bufpush(0x03B9); + break; + case 0x1F82: + bufpush(0x1F02); + bufpush(0x03B9); + break; + case 0x1F83: + bufpush(0x1F03); + bufpush(0x03B9); + break; + case 0x1F84: + bufpush(0x1F04); + bufpush(0x03B9); + break; + case 0x1F85: + bufpush(0x1F05); + bufpush(0x03B9); + break; + case 0x1F86: + bufpush(0x1F06); + bufpush(0x03B9); + break; + case 0x1F87: + bufpush(0x1F07); + bufpush(0x03B9); + break; + case 0x1F88: + bufpush(0x1F00); + bufpush(0x03B9); + break; + case 0x1F89: + bufpush(0x1F01); + bufpush(0x03B9); + break; + case 0x1F8A: + bufpush(0x1F02); + bufpush(0x03B9); + break; + case 0x1F8B: + bufpush(0x1F03); + bufpush(0x03B9); + break; + case 0x1F8C: + bufpush(0x1F04); + bufpush(0x03B9); + break; + case 0x1F8D: + bufpush(0x1F05); + bufpush(0x03B9); + break; + case 0x1F8E: + bufpush(0x1F06); + bufpush(0x03B9); + break; + case 0x1F8F: + bufpush(0x1F07); + bufpush(0x03B9); + break; + case 0x1F90: + bufpush(0x1F20); + bufpush(0x03B9); + break; + case 0x1F91: + bufpush(0x1F21); + bufpush(0x03B9); + break; + case 0x1F92: + bufpush(0x1F22); + bufpush(0x03B9); + break; + case 0x1F93: + bufpush(0x1F23); + bufpush(0x03B9); + break; + case 0x1F94: + bufpush(0x1F24); + bufpush(0x03B9); + break; + case 0x1F95: + bufpush(0x1F25); + bufpush(0x03B9); + break; + case 0x1F96: + bufpush(0x1F26); + bufpush(0x03B9); + break; + case 0x1F97: + bufpush(0x1F27); + bufpush(0x03B9); + break; + case 0x1F98: + bufpush(0x1F20); + bufpush(0x03B9); + break; + case 0x1F99: + bufpush(0x1F21); + bufpush(0x03B9); + break; + case 0x1F9A: + bufpush(0x1F22); + bufpush(0x03B9); + break; + case 0x1F9B: + bufpush(0x1F23); + bufpush(0x03B9); + break; + case 0x1F9C: + bufpush(0x1F24); + bufpush(0x03B9); + break; + case 0x1F9D: + bufpush(0x1F25); + bufpush(0x03B9); + break; + case 0x1F9E: + bufpush(0x1F26); + bufpush(0x03B9); + break; + case 0x1F9F: + bufpush(0x1F27); + bufpush(0x03B9); + break; + case 0x1FA0: + bufpush(0x1F60); + bufpush(0x03B9); + break; + case 0x1FA1: + bufpush(0x1F61); + bufpush(0x03B9); + break; + case 0x1FA2: + bufpush(0x1F62); + bufpush(0x03B9); + break; + case 0x1FA3: + bufpush(0x1F63); + bufpush(0x03B9); + break; + case 0x1FA4: + bufpush(0x1F64); + bufpush(0x03B9); + break; + case 0x1FA5: + bufpush(0x1F65); + bufpush(0x03B9); + break; + case 0x1FA6: + bufpush(0x1F66); + bufpush(0x03B9); + break; + case 0x1FA7: + bufpush(0x1F67); + bufpush(0x03B9); + break; + case 0x1FA8: + bufpush(0x1F60); + bufpush(0x03B9); + break; + case 0x1FA9: + bufpush(0x1F61); + bufpush(0x03B9); + break; + case 0x1FAA: + bufpush(0x1F62); + bufpush(0x03B9); + break; + case 0x1FAB: + bufpush(0x1F63); + bufpush(0x03B9); + break; + case 0x1FAC: + bufpush(0x1F64); + bufpush(0x03B9); + break; + case 0x1FAD: + bufpush(0x1F65); + bufpush(0x03B9); + break; + case 0x1FAE: + bufpush(0x1F66); + bufpush(0x03B9); + break; + case 0x1FAF: + bufpush(0x1F67); + bufpush(0x03B9); + break; + case 0x1FB2: + bufpush(0x1F70); + bufpush(0x03B9); + break; + case 0x1FB3: + bufpush(0x03B1); + bufpush(0x03B9); + break; + case 0x1FB4: + bufpush(0x03AC); + bufpush(0x03B9); + break; + case 0x1FB6: + bufpush(0x03B1); + bufpush(0x0342); + break; + case 0x1FB7: + bufpush(0x03B1); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FB8: + bufpush(0x1FB0); + break; + case 0x1FB9: + bufpush(0x1FB1); + break; + case 0x1FBA: + bufpush(0x1F70); + break; + case 0x1FBB: + bufpush(0x1F71); + break; + case 0x1FBC: + bufpush(0x03B1); + bufpush(0x03B9); + break; + case 0x1FBE: + bufpush(0x03B9); + break; + case 0x1FC2: + bufpush(0x1F74); + bufpush(0x03B9); + break; + case 0x1FC3: + bufpush(0x03B7); + bufpush(0x03B9); + break; + case 0x1FC4: + bufpush(0x03AE); + bufpush(0x03B9); + break; + case 0x1FC6: + bufpush(0x03B7); + bufpush(0x0342); + break; + case 0x1FC7: + bufpush(0x03B7); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FC8: + bufpush(0x1F72); + break; + case 0x1FC9: + bufpush(0x1F73); + break; + case 0x1FCA: + bufpush(0x1F74); + break; + case 0x1FCB: + bufpush(0x1F75); + break; + case 0x1FCC: + bufpush(0x03B7); + bufpush(0x03B9); + break; + case 0x1FD2: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0300); + break; + case 0x1FD3: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x1FD6: + bufpush(0x03B9); + bufpush(0x0342); + break; + case 0x1FD7: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0342); + break; + case 0x1FD8: + bufpush(0x1FD0); + break; + case 0x1FD9: + bufpush(0x1FD1); + break; + case 0x1FDA: + bufpush(0x1F76); + break; + case 0x1FDB: + bufpush(0x1F77); + break; + case 0x1FE2: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0300); + break; + case 0x1FE3: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x1FE4: + bufpush(0x03C1); + bufpush(0x0313); + break; + case 0x1FE6: + bufpush(0x03C5); + bufpush(0x0342); + break; + case 0x1FE7: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0342); + break; + case 0x1FE8: + bufpush(0x1FE0); + break; + case 0x1FE9: + bufpush(0x1FE1); + break; + case 0x1FEA: + bufpush(0x1F7A); + break; + case 0x1FEB: + bufpush(0x1F7B); + break; + case 0x1FEC: + bufpush(0x1FE5); + break; + case 0x1FF2: + bufpush(0x1F7C); + bufpush(0x03B9); + break; + case 0x1FF3: + bufpush(0x03C9); + bufpush(0x03B9); + break; + case 0x1FF4: + bufpush(0x03CE); + bufpush(0x03B9); + break; + case 0x1FF6: + bufpush(0x03C9); + bufpush(0x0342); + break; + case 0x1FF7: + bufpush(0x03C9); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FF8: + bufpush(0x1F78); + break; + case 0x1FF9: + bufpush(0x1F79); + break; + case 0x1FFA: + bufpush(0x1F7C); + break; + case 0x1FFB: + bufpush(0x1F7D); + break; + case 0x1FFC: + bufpush(0x03C9); + bufpush(0x03B9); + break; + case 0x2126: + bufpush(0x03C9); + break; + case 0x212A: + bufpush(0x006B); + break; + case 0x212B: + bufpush(0x00E5); + break; + case 0x2160: + bufpush(0x2170); + break; + case 0x2161: + bufpush(0x2171); + break; + case 0x2162: + bufpush(0x2172); + break; + case 0x2163: + bufpush(0x2173); + break; + case 0x2164: + bufpush(0x2174); + break; + case 0x2165: + bufpush(0x2175); + break; + case 0x2166: + bufpush(0x2176); + break; + case 0x2167: + bufpush(0x2177); + break; + case 0x2168: + bufpush(0x2178); + break; + case 0x2169: + bufpush(0x2179); + break; + case 0x216A: + bufpush(0x217A); + break; + case 0x216B: + bufpush(0x217B); + break; + case 0x216C: + bufpush(0x217C); + break; + case 0x216D: + bufpush(0x217D); + break; + case 0x216E: + bufpush(0x217E); + break; + case 0x216F: + bufpush(0x217F); + break; + case 0x24B6: + bufpush(0x24D0); + break; + case 0x24B7: + bufpush(0x24D1); + break; + case 0x24B8: + bufpush(0x24D2); + break; + case 0x24B9: + bufpush(0x24D3); + break; + case 0x24BA: + bufpush(0x24D4); + break; + case 0x24BB: + bufpush(0x24D5); + break; + case 0x24BC: + bufpush(0x24D6); + break; + case 0x24BD: + bufpush(0x24D7); + break; + case 0x24BE: + bufpush(0x24D8); + break; + case 0x24BF: + bufpush(0x24D9); + break; + case 0x24C0: + bufpush(0x24DA); + break; + case 0x24C1: + bufpush(0x24DB); + break; + case 0x24C2: + bufpush(0x24DC); + break; + case 0x24C3: + bufpush(0x24DD); + break; + case 0x24C4: + bufpush(0x24DE); + break; + case 0x24C5: + bufpush(0x24DF); + break; + case 0x24C6: + bufpush(0x24E0); + break; + case 0x24C7: + bufpush(0x24E1); + break; + case 0x24C8: + bufpush(0x24E2); + break; + case 0x24C9: + bufpush(0x24E3); + break; + case 0x24CA: + bufpush(0x24E4); + break; + case 0x24CB: + bufpush(0x24E5); + break; + case 0x24CC: + bufpush(0x24E6); + break; + case 0x24CD: + bufpush(0x24E7); + break; + case 0x24CE: + bufpush(0x24E8); + break; + case 0x24CF: + bufpush(0x24E9); + break; + case 0xFB00: + bufpush(0x0066); + bufpush(0x0066); + break; + case 0xFB01: + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB02: + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB03: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB04: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB05: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB06: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB13: + bufpush(0x0574); + bufpush(0x0576); + break; + case 0xFB14: + bufpush(0x0574); + bufpush(0x0565); + break; + case 0xFB15: + bufpush(0x0574); + bufpush(0x056B); + break; + case 0xFB16: + bufpush(0x057E); + bufpush(0x0576); + break; + case 0xFB17: + bufpush(0x0574); + bufpush(0x056D); + break; + case 0xFF21: + bufpush(0xFF41); + break; + case 0xFF22: + bufpush(0xFF42); + break; + case 0xFF23: + bufpush(0xFF43); + break; + case 0xFF24: + bufpush(0xFF44); + break; + case 0xFF25: + bufpush(0xFF45); + break; + case 0xFF26: + bufpush(0xFF46); + break; + case 0xFF27: + bufpush(0xFF47); + break; + case 0xFF28: + bufpush(0xFF48); + break; + case 0xFF29: + bufpush(0xFF49); + break; + case 0xFF2A: + bufpush(0xFF4A); + break; + case 0xFF2B: + bufpush(0xFF4B); + break; + case 0xFF2C: + bufpush(0xFF4C); + break; + case 0xFF2D: + bufpush(0xFF4D); + break; + case 0xFF2E: + bufpush(0xFF4E); + break; + case 0xFF2F: + bufpush(0xFF4F); + break; + case 0xFF30: + bufpush(0xFF50); + break; + case 0xFF31: + bufpush(0xFF51); + break; + case 0xFF32: + bufpush(0xFF52); + break; + case 0xFF33: + bufpush(0xFF53); + break; + case 0xFF34: + bufpush(0xFF54); + break; + case 0xFF35: + bufpush(0xFF55); + break; + case 0xFF36: + bufpush(0xFF56); + break; + case 0xFF37: + bufpush(0xFF57); + break; + case 0xFF38: + bufpush(0xFF58); + break; + case 0xFF39: + bufpush(0xFF59); + break; + case 0xFF3A: + bufpush(0xFF5A); + break; + case 0x10400: + bufpush(0x10428); + break; + case 0x10401: + bufpush(0x10429); + break; + case 0x10402: + bufpush(0x1042A); + break; + case 0x10403: + bufpush(0x1042B); + break; + case 0x10404: + bufpush(0x1042C); + break; + case 0x10405: + bufpush(0x1042D); + break; + case 0x10406: + bufpush(0x1042E); + break; + case 0x10407: + bufpush(0x1042F); + break; + case 0x10408: + bufpush(0x10430); + break; + case 0x10409: + bufpush(0x10431); + break; + case 0x1040A: + bufpush(0x10432); + break; + case 0x1040B: + bufpush(0x10433); + break; + case 0x1040C: + bufpush(0x10434); + break; + case 0x1040D: + bufpush(0x10435); + break; + case 0x1040E: + bufpush(0x10436); + break; + case 0x1040F: + bufpush(0x10437); + break; + case 0x10410: + bufpush(0x10438); + break; + case 0x10411: + bufpush(0x10439); + break; + case 0x10412: + bufpush(0x1043A); + break; + case 0x10413: + bufpush(0x1043B); + break; + case 0x10414: + bufpush(0x1043C); + break; + case 0x10415: + bufpush(0x1043D); + break; + case 0x10416: + bufpush(0x1043E); + break; + case 0x10417: + bufpush(0x1043F); + break; + case 0x10418: + bufpush(0x10440); + break; + case 0x10419: + bufpush(0x10441); + break; + case 0x1041A: + bufpush(0x10442); + break; + case 0x1041B: + bufpush(0x10443); + break; + case 0x1041C: + bufpush(0x10444); + break; + case 0x1041D: + bufpush(0x10445); + break; + case 0x1041E: + bufpush(0x10446); + break; + case 0x1041F: + bufpush(0x10447); + break; + case 0x10420: + bufpush(0x10448); + break; + case 0x10421: + bufpush(0x10449); + break; + case 0x10422: + bufpush(0x1044A); + break; + case 0x10423: + bufpush(0x1044B); + break; + case 0x10424: + bufpush(0x1044C); + break; + case 0x10425: + bufpush(0x1044D); + break; + default: + bufpush(c); + } diff --git a/src/casefold.c b/src/casefold.c new file mode 100644 index 0000000000..33f18aa004 --- /dev/null +++ b/src/casefold.c @@ -0,0 +1,2699 @@ +#include +#include + + + switch c { + case 0x0041: + bufpush(0x0061); + break; + case 0x0042: + bufpush(0x0062); + break; + case 0x0043: + bufpush(0x0063); + break; + case 0x0044: + bufpush(0x0064); + break; + case 0x0045: + bufpush(0x0065); + break; + case 0x0046: + bufpush(0x0066); + break; + case 0x0047: + bufpush(0x0067); + break; + case 0x0048: + bufpush(0x0068); + break; + case 0x0049: + bufpush(0x0069); + break; + case 0x0049: + bufpush(0x0131); + break; + case 0x004A: + bufpush(0x006A); + break; + case 0x004B: + bufpush(0x006B); + break; + case 0x004C: + bufpush(0x006C); + break; + case 0x004D: + bufpush(0x006D); + break; + case 0x004E: + bufpush(0x006E); + break; + case 0x004F: + bufpush(0x006F); + break; + case 0x0050: + bufpush(0x0070); + break; + case 0x0051: + bufpush(0x0071); + break; + case 0x0052: + bufpush(0x0072); + break; + case 0x0053: + bufpush(0x0073); + break; + case 0x0054: + bufpush(0x0074); + break; + case 0x0055: + bufpush(0x0075); + break; + case 0x0056: + bufpush(0x0076); + break; + case 0x0057: + bufpush(0x0077); + break; + case 0x0058: + bufpush(0x0078); + break; + case 0x0059: + bufpush(0x0079); + break; + case 0x005A: + bufpush(0x007A); + break; + case 0x00B5: + bufpush(0x03BC); + break; + case 0x00C0: + bufpush(0x00E0); + break; + case 0x00C1: + bufpush(0x00E1); + break; + case 0x00C2: + bufpush(0x00E2); + break; + case 0x00C3: + bufpush(0x00E3); + break; + case 0x00C4: + bufpush(0x00E4); + break; + case 0x00C5: + bufpush(0x00E5); + break; + case 0x00C6: + bufpush(0x00E6); + break; + case 0x00C7: + bufpush(0x00E7); + break; + case 0x00C8: + bufpush(0x00E8); + break; + case 0x00C9: + bufpush(0x00E9); + break; + case 0x00CA: + bufpush(0x00EA); + break; + case 0x00CB: + bufpush(0x00EB); + break; + case 0x00CC: + bufpush(0x00EC); + break; + case 0x00CD: + bufpush(0x00ED); + break; + case 0x00CE: + bufpush(0x00EE); + break; + case 0x00CF: + bufpush(0x00EF); + break; + case 0x00D0: + bufpush(0x00F0); + break; + case 0x00D1: + bufpush(0x00F1); + break; + case 0x00D2: + bufpush(0x00F2); + break; + case 0x00D3: + bufpush(0x00F3); + break; + case 0x00D4: + bufpush(0x00F4); + break; + case 0x00D5: + bufpush(0x00F5); + break; + case 0x00D6: + bufpush(0x00F6); + break; + case 0x00D8: + bufpush(0x00F8); + break; + case 0x00D9: + bufpush(0x00F9); + break; + case 0x00DA: + bufpush(0x00FA); + break; + case 0x00DB: + bufpush(0x00FB); + break; + case 0x00DC: + bufpush(0x00FC); + break; + case 0x00DD: + bufpush(0x00FD); + break; + case 0x00DE: + bufpush(0x00FE); + break; + case 0x00DF: + bufpush(0x0073); + bufpush(0x0073); + break; + case 0x0100: + bufpush(0x0101); + break; + case 0x0102: + bufpush(0x0103); + break; + case 0x0104: + bufpush(0x0105); + break; + case 0x0106: + bufpush(0x0107); + break; + case 0x0108: + bufpush(0x0109); + break; + case 0x010A: + bufpush(0x010B); + break; + case 0x010C: + bufpush(0x010D); + break; + case 0x010E: + bufpush(0x010F); + break; + case 0x0110: + bufpush(0x0111); + break; + case 0x0112: + bufpush(0x0113); + break; + case 0x0114: + bufpush(0x0115); + break; + case 0x0116: + bufpush(0x0117); + break; + case 0x0118: + bufpush(0x0119); + break; + case 0x011A: + bufpush(0x011B); + break; + case 0x011C: + bufpush(0x011D); + break; + case 0x011E: + bufpush(0x011F); + break; + case 0x0120: + bufpush(0x0121); + break; + case 0x0122: + bufpush(0x0123); + break; + case 0x0124: + bufpush(0x0125); + break; + case 0x0126: + bufpush(0x0127); + break; + case 0x0128: + bufpush(0x0129); + break; + case 0x012A: + bufpush(0x012B); + break; + case 0x012C: + bufpush(0x012D); + break; + case 0x012E: + bufpush(0x012F); + break; + case 0x0130: + bufpush(0x0069); + bufpush(0x0307); + break; + case 0x0130: + bufpush(0x0069); + break; + case 0x0132: + bufpush(0x0133); + break; + case 0x0134: + bufpush(0x0135); + break; + case 0x0136: + bufpush(0x0137); + break; + case 0x0139: + bufpush(0x013A); + break; + case 0x013B: + bufpush(0x013C); + break; + case 0x013D: + bufpush(0x013E); + break; + case 0x013F: + bufpush(0x0140); + break; + case 0x0141: + bufpush(0x0142); + break; + case 0x0143: + bufpush(0x0144); + break; + case 0x0145: + bufpush(0x0146); + break; + case 0x0147: + bufpush(0x0148); + break; + case 0x0149: + bufpush(0x02BC); + bufpush(0x006E); + break; + case 0x014A: + bufpush(0x014B); + break; + case 0x014C: + bufpush(0x014D); + break; + case 0x014E: + bufpush(0x014F); + break; + case 0x0150: + bufpush(0x0151); + break; + case 0x0152: + bufpush(0x0153); + break; + case 0x0154: + bufpush(0x0155); + break; + case 0x0156: + bufpush(0x0157); + break; + case 0x0158: + bufpush(0x0159); + break; + case 0x015A: + bufpush(0x015B); + break; + case 0x015C: + bufpush(0x015D); + break; + case 0x015E: + bufpush(0x015F); + break; + case 0x0160: + bufpush(0x0161); + break; + case 0x0162: + bufpush(0x0163); + break; + case 0x0164: + bufpush(0x0165); + break; + case 0x0166: + bufpush(0x0167); + break; + case 0x0168: + bufpush(0x0169); + break; + case 0x016A: + bufpush(0x016B); + break; + case 0x016C: + bufpush(0x016D); + break; + case 0x016E: + bufpush(0x016F); + break; + case 0x0170: + bufpush(0x0171); + break; + case 0x0172: + bufpush(0x0173); + break; + case 0x0174: + bufpush(0x0175); + break; + case 0x0176: + bufpush(0x0177); + break; + case 0x0178: + bufpush(0x00FF); + break; + case 0x0179: + bufpush(0x017A); + break; + case 0x017B: + bufpush(0x017C); + break; + case 0x017D: + bufpush(0x017E); + break; + case 0x017F: + bufpush(0x0073); + break; + case 0x0181: + bufpush(0x0253); + break; + case 0x0182: + bufpush(0x0183); + break; + case 0x0184: + bufpush(0x0185); + break; + case 0x0186: + bufpush(0x0254); + break; + case 0x0187: + bufpush(0x0188); + break; + case 0x0189: + bufpush(0x0256); + break; + case 0x018A: + bufpush(0x0257); + break; + case 0x018B: + bufpush(0x018C); + break; + case 0x018E: + bufpush(0x01DD); + break; + case 0x018F: + bufpush(0x0259); + break; + case 0x0190: + bufpush(0x025B); + break; + case 0x0191: + bufpush(0x0192); + break; + case 0x0193: + bufpush(0x0260); + break; + case 0x0194: + bufpush(0x0263); + break; + case 0x0196: + bufpush(0x0269); + break; + case 0x0197: + bufpush(0x0268); + break; + case 0x0198: + bufpush(0x0199); + break; + case 0x019C: + bufpush(0x026F); + break; + case 0x019D: + bufpush(0x0272); + break; + case 0x019F: + bufpush(0x0275); + break; + case 0x01A0: + bufpush(0x01A1); + break; + case 0x01A2: + bufpush(0x01A3); + break; + case 0x01A4: + bufpush(0x01A5); + break; + case 0x01A6: + bufpush(0x0280); + break; + case 0x01A7: + bufpush(0x01A8); + break; + case 0x01A9: + bufpush(0x0283); + break; + case 0x01AC: + bufpush(0x01AD); + break; + case 0x01AE: + bufpush(0x0288); + break; + case 0x01AF: + bufpush(0x01B0); + break; + case 0x01B1: + bufpush(0x028A); + break; + case 0x01B2: + bufpush(0x028B); + break; + case 0x01B3: + bufpush(0x01B4); + break; + case 0x01B5: + bufpush(0x01B6); + break; + case 0x01B7: + bufpush(0x0292); + break; + case 0x01B8: + bufpush(0x01B9); + break; + case 0x01BC: + bufpush(0x01BD); + break; + case 0x01C4: + bufpush(0x01C6); + break; + case 0x01C5: + bufpush(0x01C6); + break; + case 0x01C7: + bufpush(0x01C9); + break; + case 0x01C8: + bufpush(0x01C9); + break; + case 0x01CA: + bufpush(0x01CC); + break; + case 0x01CB: + bufpush(0x01CC); + break; + case 0x01CD: + bufpush(0x01CE); + break; + case 0x01CF: + bufpush(0x01D0); + break; + case 0x01D1: + bufpush(0x01D2); + break; + case 0x01D3: + bufpush(0x01D4); + break; + case 0x01D5: + bufpush(0x01D6); + break; + case 0x01D7: + bufpush(0x01D8); + break; + case 0x01D9: + bufpush(0x01DA); + break; + case 0x01DB: + bufpush(0x01DC); + break; + case 0x01DE: + bufpush(0x01DF); + break; + case 0x01E0: + bufpush(0x01E1); + break; + case 0x01E2: + bufpush(0x01E3); + break; + case 0x01E4: + bufpush(0x01E5); + break; + case 0x01E6: + bufpush(0x01E7); + break; + case 0x01E8: + bufpush(0x01E9); + break; + case 0x01EA: + bufpush(0x01EB); + break; + case 0x01EC: + bufpush(0x01ED); + break; + case 0x01EE: + bufpush(0x01EF); + break; + case 0x01F0: + bufpush(0x006A); + bufpush(0x030C); + break; + case 0x01F1: + bufpush(0x01F3); + break; + case 0x01F2: + bufpush(0x01F3); + break; + case 0x01F4: + bufpush(0x01F5); + break; + case 0x01F6: + bufpush(0x0195); + break; + case 0x01F7: + bufpush(0x01BF); + break; + case 0x01F8: + bufpush(0x01F9); + break; + case 0x01FA: + bufpush(0x01FB); + break; + case 0x01FC: + bufpush(0x01FD); + break; + case 0x01FE: + bufpush(0x01FF); + break; + case 0x0200: + bufpush(0x0201); + break; + case 0x0202: + bufpush(0x0203); + break; + case 0x0204: + bufpush(0x0205); + break; + case 0x0206: + bufpush(0x0207); + break; + case 0x0208: + bufpush(0x0209); + break; + case 0x020A: + bufpush(0x020B); + break; + case 0x020C: + bufpush(0x020D); + break; + case 0x020E: + bufpush(0x020F); + break; + case 0x0210: + bufpush(0x0211); + break; + case 0x0212: + bufpush(0x0213); + break; + case 0x0214: + bufpush(0x0215); + break; + case 0x0216: + bufpush(0x0217); + break; + case 0x0218: + bufpush(0x0219); + break; + case 0x021A: + bufpush(0x021B); + break; + case 0x021C: + bufpush(0x021D); + break; + case 0x021E: + bufpush(0x021F); + break; + case 0x0220: + bufpush(0x019E); + break; + case 0x0222: + bufpush(0x0223); + break; + case 0x0224: + bufpush(0x0225); + break; + case 0x0226: + bufpush(0x0227); + break; + case 0x0228: + bufpush(0x0229); + break; + case 0x022A: + bufpush(0x022B); + break; + case 0x022C: + bufpush(0x022D); + break; + case 0x022E: + bufpush(0x022F); + break; + case 0x0230: + bufpush(0x0231); + break; + case 0x0232: + bufpush(0x0233); + break; + case 0x0345: + bufpush(0x03B9); + break; + case 0x0386: + bufpush(0x03AC); + break; + case 0x0388: + bufpush(0x03AD); + break; + case 0x0389: + bufpush(0x03AE); + break; + case 0x038A: + bufpush(0x03AF); + break; + case 0x038C: + bufpush(0x03CC); + break; + case 0x038E: + bufpush(0x03CD); + break; + case 0x038F: + bufpush(0x03CE); + break; + case 0x0390: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x0391: + bufpush(0x03B1); + break; + case 0x0392: + bufpush(0x03B2); + break; + case 0x0393: + bufpush(0x03B3); + break; + case 0x0394: + bufpush(0x03B4); + break; + case 0x0395: + bufpush(0x03B5); + break; + case 0x0396: + bufpush(0x03B6); + break; + case 0x0397: + bufpush(0x03B7); + break; + case 0x0398: + bufpush(0x03B8); + break; + case 0x0399: + bufpush(0x03B9); + break; + case 0x039A: + bufpush(0x03BA); + break; + case 0x039B: + bufpush(0x03BB); + break; + case 0x039C: + bufpush(0x03BC); + break; + case 0x039D: + bufpush(0x03BD); + break; + case 0x039E: + bufpush(0x03BE); + break; + case 0x039F: + bufpush(0x03BF); + break; + case 0x03A0: + bufpush(0x03C0); + break; + case 0x03A1: + bufpush(0x03C1); + break; + case 0x03A3: + bufpush(0x03C3); + break; + case 0x03A4: + bufpush(0x03C4); + break; + case 0x03A5: + bufpush(0x03C5); + break; + case 0x03A6: + bufpush(0x03C6); + break; + case 0x03A7: + bufpush(0x03C7); + break; + case 0x03A8: + bufpush(0x03C8); + break; + case 0x03A9: + bufpush(0x03C9); + break; + case 0x03AA: + bufpush(0x03CA); + break; + case 0x03AB: + bufpush(0x03CB); + break; + case 0x03B0: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x03C2: + bufpush(0x03C3); + break; + case 0x03D0: + bufpush(0x03B2); + break; + case 0x03D1: + bufpush(0x03B8); + break; + case 0x03D5: + bufpush(0x03C6); + break; + case 0x03D6: + bufpush(0x03C0); + break; + case 0x03D8: + bufpush(0x03D9); + break; + case 0x03DA: + bufpush(0x03DB); + break; + case 0x03DC: + bufpush(0x03DD); + break; + case 0x03DE: + bufpush(0x03DF); + break; + case 0x03E0: + bufpush(0x03E1); + break; + case 0x03E2: + bufpush(0x03E3); + break; + case 0x03E4: + bufpush(0x03E5); + break; + case 0x03E6: + bufpush(0x03E7); + break; + case 0x03E8: + bufpush(0x03E9); + break; + case 0x03EA: + bufpush(0x03EB); + break; + case 0x03EC: + bufpush(0x03ED); + break; + case 0x03EE: + bufpush(0x03EF); + break; + case 0x03F0: + bufpush(0x03BA); + break; + case 0x03F1: + bufpush(0x03C1); + break; + case 0x03F2: + bufpush(0x03C3); + break; + case 0x03F4: + bufpush(0x03B8); + break; + case 0x03F5: + bufpush(0x03B5); + break; + case 0x0400: + bufpush(0x0450); + break; + case 0x0401: + bufpush(0x0451); + break; + case 0x0402: + bufpush(0x0452); + break; + case 0x0403: + bufpush(0x0453); + break; + case 0x0404: + bufpush(0x0454); + break; + case 0x0405: + bufpush(0x0455); + break; + case 0x0406: + bufpush(0x0456); + break; + case 0x0407: + bufpush(0x0457); + break; + case 0x0408: + bufpush(0x0458); + break; + case 0x0409: + bufpush(0x0459); + break; + case 0x040A: + bufpush(0x045A); + break; + case 0x040B: + bufpush(0x045B); + break; + case 0x040C: + bufpush(0x045C); + break; + case 0x040D: + bufpush(0x045D); + break; + case 0x040E: + bufpush(0x045E); + break; + case 0x040F: + bufpush(0x045F); + break; + case 0x0410: + bufpush(0x0430); + break; + case 0x0411: + bufpush(0x0431); + break; + case 0x0412: + bufpush(0x0432); + break; + case 0x0413: + bufpush(0x0433); + break; + case 0x0414: + bufpush(0x0434); + break; + case 0x0415: + bufpush(0x0435); + break; + case 0x0416: + bufpush(0x0436); + break; + case 0x0417: + bufpush(0x0437); + break; + case 0x0418: + bufpush(0x0438); + break; + case 0x0419: + bufpush(0x0439); + break; + case 0x041A: + bufpush(0x043A); + break; + case 0x041B: + bufpush(0x043B); + break; + case 0x041C: + bufpush(0x043C); + break; + case 0x041D: + bufpush(0x043D); + break; + case 0x041E: + bufpush(0x043E); + break; + case 0x041F: + bufpush(0x043F); + break; + case 0x0420: + bufpush(0x0440); + break; + case 0x0421: + bufpush(0x0441); + break; + case 0x0422: + bufpush(0x0442); + break; + case 0x0423: + bufpush(0x0443); + break; + case 0x0424: + bufpush(0x0444); + break; + case 0x0425: + bufpush(0x0445); + break; + case 0x0426: + bufpush(0x0446); + break; + case 0x0427: + bufpush(0x0447); + break; + case 0x0428: + bufpush(0x0448); + break; + case 0x0429: + bufpush(0x0449); + break; + case 0x042A: + bufpush(0x044A); + break; + case 0x042B: + bufpush(0x044B); + break; + case 0x042C: + bufpush(0x044C); + break; + case 0x042D: + bufpush(0x044D); + break; + case 0x042E: + bufpush(0x044E); + break; + case 0x042F: + bufpush(0x044F); + break; + case 0x0460: + bufpush(0x0461); + break; + case 0x0462: + bufpush(0x0463); + break; + case 0x0464: + bufpush(0x0465); + break; + case 0x0466: + bufpush(0x0467); + break; + case 0x0468: + bufpush(0x0469); + break; + case 0x046A: + bufpush(0x046B); + break; + case 0x046C: + bufpush(0x046D); + break; + case 0x046E: + bufpush(0x046F); + break; + case 0x0470: + bufpush(0x0471); + break; + case 0x0472: + bufpush(0x0473); + break; + case 0x0474: + bufpush(0x0475); + break; + case 0x0476: + bufpush(0x0477); + break; + case 0x0478: + bufpush(0x0479); + break; + case 0x047A: + bufpush(0x047B); + break; + case 0x047C: + bufpush(0x047D); + break; + case 0x047E: + bufpush(0x047F); + break; + case 0x0480: + bufpush(0x0481); + break; + case 0x048A: + bufpush(0x048B); + break; + case 0x048C: + bufpush(0x048D); + break; + case 0x048E: + bufpush(0x048F); + break; + case 0x0490: + bufpush(0x0491); + break; + case 0x0492: + bufpush(0x0493); + break; + case 0x0494: + bufpush(0x0495); + break; + case 0x0496: + bufpush(0x0497); + break; + case 0x0498: + bufpush(0x0499); + break; + case 0x049A: + bufpush(0x049B); + break; + case 0x049C: + bufpush(0x049D); + break; + case 0x049E: + bufpush(0x049F); + break; + case 0x04A0: + bufpush(0x04A1); + break; + case 0x04A2: + bufpush(0x04A3); + break; + case 0x04A4: + bufpush(0x04A5); + break; + case 0x04A6: + bufpush(0x04A7); + break; + case 0x04A8: + bufpush(0x04A9); + break; + case 0x04AA: + bufpush(0x04AB); + break; + case 0x04AC: + bufpush(0x04AD); + break; + case 0x04AE: + bufpush(0x04AF); + break; + case 0x04B0: + bufpush(0x04B1); + break; + case 0x04B2: + bufpush(0x04B3); + break; + case 0x04B4: + bufpush(0x04B5); + break; + case 0x04B6: + bufpush(0x04B7); + break; + case 0x04B8: + bufpush(0x04B9); + break; + case 0x04BA: + bufpush(0x04BB); + break; + case 0x04BC: + bufpush(0x04BD); + break; + case 0x04BE: + bufpush(0x04BF); + break; + case 0x04C1: + bufpush(0x04C2); + break; + case 0x04C3: + bufpush(0x04C4); + break; + case 0x04C5: + bufpush(0x04C6); + break; + case 0x04C7: + bufpush(0x04C8); + break; + case 0x04C9: + bufpush(0x04CA); + break; + case 0x04CB: + bufpush(0x04CC); + break; + case 0x04CD: + bufpush(0x04CE); + break; + case 0x04D0: + bufpush(0x04D1); + break; + case 0x04D2: + bufpush(0x04D3); + break; + case 0x04D4: + bufpush(0x04D5); + break; + case 0x04D6: + bufpush(0x04D7); + break; + case 0x04D8: + bufpush(0x04D9); + break; + case 0x04DA: + bufpush(0x04DB); + break; + case 0x04DC: + bufpush(0x04DD); + break; + case 0x04DE: + bufpush(0x04DF); + break; + case 0x04E0: + bufpush(0x04E1); + break; + case 0x04E2: + bufpush(0x04E3); + break; + case 0x04E4: + bufpush(0x04E5); + break; + case 0x04E6: + bufpush(0x04E7); + break; + case 0x04E8: + bufpush(0x04E9); + break; + case 0x04EA: + bufpush(0x04EB); + break; + case 0x04EC: + bufpush(0x04ED); + break; + case 0x04EE: + bufpush(0x04EF); + break; + case 0x04F0: + bufpush(0x04F1); + break; + case 0x04F2: + bufpush(0x04F3); + break; + case 0x04F4: + bufpush(0x04F5); + break; + case 0x04F8: + bufpush(0x04F9); + break; + case 0x0500: + bufpush(0x0501); + break; + case 0x0502: + bufpush(0x0503); + break; + case 0x0504: + bufpush(0x0505); + break; + case 0x0506: + bufpush(0x0507); + break; + case 0x0508: + bufpush(0x0509); + break; + case 0x050A: + bufpush(0x050B); + break; + case 0x050C: + bufpush(0x050D); + break; + case 0x050E: + bufpush(0x050F); + break; + case 0x0531: + bufpush(0x0561); + break; + case 0x0532: + bufpush(0x0562); + break; + case 0x0533: + bufpush(0x0563); + break; + case 0x0534: + bufpush(0x0564); + break; + case 0x0535: + bufpush(0x0565); + break; + case 0x0536: + bufpush(0x0566); + break; + case 0x0537: + bufpush(0x0567); + break; + case 0x0538: + bufpush(0x0568); + break; + case 0x0539: + bufpush(0x0569); + break; + case 0x053A: + bufpush(0x056A); + break; + case 0x053B: + bufpush(0x056B); + break; + case 0x053C: + bufpush(0x056C); + break; + case 0x053D: + bufpush(0x056D); + break; + case 0x053E: + bufpush(0x056E); + break; + case 0x053F: + bufpush(0x056F); + break; + case 0x0540: + bufpush(0x0570); + break; + case 0x0541: + bufpush(0x0571); + break; + case 0x0542: + bufpush(0x0572); + break; + case 0x0543: + bufpush(0x0573); + break; + case 0x0544: + bufpush(0x0574); + break; + case 0x0545: + bufpush(0x0575); + break; + case 0x0546: + bufpush(0x0576); + break; + case 0x0547: + bufpush(0x0577); + break; + case 0x0548: + bufpush(0x0578); + break; + case 0x0549: + bufpush(0x0579); + break; + case 0x054A: + bufpush(0x057A); + break; + case 0x054B: + bufpush(0x057B); + break; + case 0x054C: + bufpush(0x057C); + break; + case 0x054D: + bufpush(0x057D); + break; + case 0x054E: + bufpush(0x057E); + break; + case 0x054F: + bufpush(0x057F); + break; + case 0x0550: + bufpush(0x0580); + break; + case 0x0551: + bufpush(0x0581); + break; + case 0x0552: + bufpush(0x0582); + break; + case 0x0553: + bufpush(0x0583); + break; + case 0x0554: + bufpush(0x0584); + break; + case 0x0555: + bufpush(0x0585); + break; + case 0x0556: + bufpush(0x0586); + break; + case 0x0587: + bufpush(0x0565); + bufpush(0x0582); + break; + case 0x1E00: + bufpush(0x1E01); + break; + case 0x1E02: + bufpush(0x1E03); + break; + case 0x1E04: + bufpush(0x1E05); + break; + case 0x1E06: + bufpush(0x1E07); + break; + case 0x1E08: + bufpush(0x1E09); + break; + case 0x1E0A: + bufpush(0x1E0B); + break; + case 0x1E0C: + bufpush(0x1E0D); + break; + case 0x1E0E: + bufpush(0x1E0F); + break; + case 0x1E10: + bufpush(0x1E11); + break; + case 0x1E12: + bufpush(0x1E13); + break; + case 0x1E14: + bufpush(0x1E15); + break; + case 0x1E16: + bufpush(0x1E17); + break; + case 0x1E18: + bufpush(0x1E19); + break; + case 0x1E1A: + bufpush(0x1E1B); + break; + case 0x1E1C: + bufpush(0x1E1D); + break; + case 0x1E1E: + bufpush(0x1E1F); + break; + case 0x1E20: + bufpush(0x1E21); + break; + case 0x1E22: + bufpush(0x1E23); + break; + case 0x1E24: + bufpush(0x1E25); + break; + case 0x1E26: + bufpush(0x1E27); + break; + case 0x1E28: + bufpush(0x1E29); + break; + case 0x1E2A: + bufpush(0x1E2B); + break; + case 0x1E2C: + bufpush(0x1E2D); + break; + case 0x1E2E: + bufpush(0x1E2F); + break; + case 0x1E30: + bufpush(0x1E31); + break; + case 0x1E32: + bufpush(0x1E33); + break; + case 0x1E34: + bufpush(0x1E35); + break; + case 0x1E36: + bufpush(0x1E37); + break; + case 0x1E38: + bufpush(0x1E39); + break; + case 0x1E3A: + bufpush(0x1E3B); + break; + case 0x1E3C: + bufpush(0x1E3D); + break; + case 0x1E3E: + bufpush(0x1E3F); + break; + case 0x1E40: + bufpush(0x1E41); + break; + case 0x1E42: + bufpush(0x1E43); + break; + case 0x1E44: + bufpush(0x1E45); + break; + case 0x1E46: + bufpush(0x1E47); + break; + case 0x1E48: + bufpush(0x1E49); + break; + case 0x1E4A: + bufpush(0x1E4B); + break; + case 0x1E4C: + bufpush(0x1E4D); + break; + case 0x1E4E: + bufpush(0x1E4F); + break; + case 0x1E50: + bufpush(0x1E51); + break; + case 0x1E52: + bufpush(0x1E53); + break; + case 0x1E54: + bufpush(0x1E55); + break; + case 0x1E56: + bufpush(0x1E57); + break; + case 0x1E58: + bufpush(0x1E59); + break; + case 0x1E5A: + bufpush(0x1E5B); + break; + case 0x1E5C: + bufpush(0x1E5D); + break; + case 0x1E5E: + bufpush(0x1E5F); + break; + case 0x1E60: + bufpush(0x1E61); + break; + case 0x1E62: + bufpush(0x1E63); + break; + case 0x1E64: + bufpush(0x1E65); + break; + case 0x1E66: + bufpush(0x1E67); + break; + case 0x1E68: + bufpush(0x1E69); + break; + case 0x1E6A: + bufpush(0x1E6B); + break; + case 0x1E6C: + bufpush(0x1E6D); + break; + case 0x1E6E: + bufpush(0x1E6F); + break; + case 0x1E70: + bufpush(0x1E71); + break; + case 0x1E72: + bufpush(0x1E73); + break; + case 0x1E74: + bufpush(0x1E75); + break; + case 0x1E76: + bufpush(0x1E77); + break; + case 0x1E78: + bufpush(0x1E79); + break; + case 0x1E7A: + bufpush(0x1E7B); + break; + case 0x1E7C: + bufpush(0x1E7D); + break; + case 0x1E7E: + bufpush(0x1E7F); + break; + case 0x1E80: + bufpush(0x1E81); + break; + case 0x1E82: + bufpush(0x1E83); + break; + case 0x1E84: + bufpush(0x1E85); + break; + case 0x1E86: + bufpush(0x1E87); + break; + case 0x1E88: + bufpush(0x1E89); + break; + case 0x1E8A: + bufpush(0x1E8B); + break; + case 0x1E8C: + bufpush(0x1E8D); + break; + case 0x1E8E: + bufpush(0x1E8F); + break; + case 0x1E90: + bufpush(0x1E91); + break; + case 0x1E92: + bufpush(0x1E93); + break; + case 0x1E94: + bufpush(0x1E95); + break; + case 0x1E96: + bufpush(0x0068); + bufpush(0x0331); + break; + case 0x1E97: + bufpush(0x0074); + bufpush(0x0308); + break; + case 0x1E98: + bufpush(0x0077); + bufpush(0x030A); + break; + case 0x1E99: + bufpush(0x0079); + bufpush(0x030A); + break; + case 0x1E9A: + bufpush(0x0061); + bufpush(0x02BE); + break; + case 0x1E9B: + bufpush(0x1E61); + break; + case 0x1EA0: + bufpush(0x1EA1); + break; + case 0x1EA2: + bufpush(0x1EA3); + break; + case 0x1EA4: + bufpush(0x1EA5); + break; + case 0x1EA6: + bufpush(0x1EA7); + break; + case 0x1EA8: + bufpush(0x1EA9); + break; + case 0x1EAA: + bufpush(0x1EAB); + break; + case 0x1EAC: + bufpush(0x1EAD); + break; + case 0x1EAE: + bufpush(0x1EAF); + break; + case 0x1EB0: + bufpush(0x1EB1); + break; + case 0x1EB2: + bufpush(0x1EB3); + break; + case 0x1EB4: + bufpush(0x1EB5); + break; + case 0x1EB6: + bufpush(0x1EB7); + break; + case 0x1EB8: + bufpush(0x1EB9); + break; + case 0x1EBA: + bufpush(0x1EBB); + break; + case 0x1EBC: + bufpush(0x1EBD); + break; + case 0x1EBE: + bufpush(0x1EBF); + break; + case 0x1EC0: + bufpush(0x1EC1); + break; + case 0x1EC2: + bufpush(0x1EC3); + break; + case 0x1EC4: + bufpush(0x1EC5); + break; + case 0x1EC6: + bufpush(0x1EC7); + break; + case 0x1EC8: + bufpush(0x1EC9); + break; + case 0x1ECA: + bufpush(0x1ECB); + break; + case 0x1ECC: + bufpush(0x1ECD); + break; + case 0x1ECE: + bufpush(0x1ECF); + break; + case 0x1ED0: + bufpush(0x1ED1); + break; + case 0x1ED2: + bufpush(0x1ED3); + break; + case 0x1ED4: + bufpush(0x1ED5); + break; + case 0x1ED6: + bufpush(0x1ED7); + break; + case 0x1ED8: + bufpush(0x1ED9); + break; + case 0x1EDA: + bufpush(0x1EDB); + break; + case 0x1EDC: + bufpush(0x1EDD); + break; + case 0x1EDE: + bufpush(0x1EDF); + break; + case 0x1EE0: + bufpush(0x1EE1); + break; + case 0x1EE2: + bufpush(0x1EE3); + break; + case 0x1EE4: + bufpush(0x1EE5); + break; + case 0x1EE6: + bufpush(0x1EE7); + break; + case 0x1EE8: + bufpush(0x1EE9); + break; + case 0x1EEA: + bufpush(0x1EEB); + break; + case 0x1EEC: + bufpush(0x1EED); + break; + case 0x1EEE: + bufpush(0x1EEF); + break; + case 0x1EF0: + bufpush(0x1EF1); + break; + case 0x1EF2: + bufpush(0x1EF3); + break; + case 0x1EF4: + bufpush(0x1EF5); + break; + case 0x1EF6: + bufpush(0x1EF7); + break; + case 0x1EF8: + bufpush(0x1EF9); + break; + case 0x1F08: + bufpush(0x1F00); + break; + case 0x1F09: + bufpush(0x1F01); + break; + case 0x1F0A: + bufpush(0x1F02); + break; + case 0x1F0B: + bufpush(0x1F03); + break; + case 0x1F0C: + bufpush(0x1F04); + break; + case 0x1F0D: + bufpush(0x1F05); + break; + case 0x1F0E: + bufpush(0x1F06); + break; + case 0x1F0F: + bufpush(0x1F07); + break; + case 0x1F18: + bufpush(0x1F10); + break; + case 0x1F19: + bufpush(0x1F11); + break; + case 0x1F1A: + bufpush(0x1F12); + break; + case 0x1F1B: + bufpush(0x1F13); + break; + case 0x1F1C: + bufpush(0x1F14); + break; + case 0x1F1D: + bufpush(0x1F15); + break; + case 0x1F28: + bufpush(0x1F20); + break; + case 0x1F29: + bufpush(0x1F21); + break; + case 0x1F2A: + bufpush(0x1F22); + break; + case 0x1F2B: + bufpush(0x1F23); + break; + case 0x1F2C: + bufpush(0x1F24); + break; + case 0x1F2D: + bufpush(0x1F25); + break; + case 0x1F2E: + bufpush(0x1F26); + break; + case 0x1F2F: + bufpush(0x1F27); + break; + case 0x1F38: + bufpush(0x1F30); + break; + case 0x1F39: + bufpush(0x1F31); + break; + case 0x1F3A: + bufpush(0x1F32); + break; + case 0x1F3B: + bufpush(0x1F33); + break; + case 0x1F3C: + bufpush(0x1F34); + break; + case 0x1F3D: + bufpush(0x1F35); + break; + case 0x1F3E: + bufpush(0x1F36); + break; + case 0x1F3F: + bufpush(0x1F37); + break; + case 0x1F48: + bufpush(0x1F40); + break; + case 0x1F49: + bufpush(0x1F41); + break; + case 0x1F4A: + bufpush(0x1F42); + break; + case 0x1F4B: + bufpush(0x1F43); + break; + case 0x1F4C: + bufpush(0x1F44); + break; + case 0x1F4D: + bufpush(0x1F45); + break; + case 0x1F50: + bufpush(0x03C5); + bufpush(0x0313); + break; + case 0x1F52: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0300); + break; + case 0x1F54: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0301); + break; + case 0x1F56: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0342); + break; + case 0x1F59: + bufpush(0x1F51); + break; + case 0x1F5B: + bufpush(0x1F53); + break; + case 0x1F5D: + bufpush(0x1F55); + break; + case 0x1F5F: + bufpush(0x1F57); + break; + case 0x1F68: + bufpush(0x1F60); + break; + case 0x1F69: + bufpush(0x1F61); + break; + case 0x1F6A: + bufpush(0x1F62); + break; + case 0x1F6B: + bufpush(0x1F63); + break; + case 0x1F6C: + bufpush(0x1F64); + break; + case 0x1F6D: + bufpush(0x1F65); + break; + case 0x1F6E: + bufpush(0x1F66); + break; + case 0x1F6F: + bufpush(0x1F67); + break; + case 0x1F80: + bufpush(0x1F00); + bufpush(0x03B9); + break; + case 0x1F81: + bufpush(0x1F01); + bufpush(0x03B9); + break; + case 0x1F82: + bufpush(0x1F02); + bufpush(0x03B9); + break; + case 0x1F83: + bufpush(0x1F03); + bufpush(0x03B9); + break; + case 0x1F84: + bufpush(0x1F04); + bufpush(0x03B9); + break; + case 0x1F85: + bufpush(0x1F05); + bufpush(0x03B9); + break; + case 0x1F86: + bufpush(0x1F06); + bufpush(0x03B9); + break; + case 0x1F87: + bufpush(0x1F07); + bufpush(0x03B9); + break; + case 0x1F88: + bufpush(0x1F00); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F89: + bufpush(0x1F01); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F8A: + bufpush(0x1F02); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F8B: + bufpush(0x1F03); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F8C: + bufpush(0x1F04); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F8D: + bufpush(0x1F05); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F8E: + bufpush(0x1F06); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F8F: + bufpush(0x1F07); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F90: + bufpush(0x1F20); + bufpush(0x03B9); + break; + case 0x1F91: + bufpush(0x1F21); + bufpush(0x03B9); + break; + case 0x1F92: + bufpush(0x1F22); + bufpush(0x03B9); + break; + case 0x1F93: + bufpush(0x1F23); + bufpush(0x03B9); + break; + case 0x1F94: + bufpush(0x1F24); + bufpush(0x03B9); + break; + case 0x1F95: + bufpush(0x1F25); + bufpush(0x03B9); + break; + case 0x1F96: + bufpush(0x1F26); + bufpush(0x03B9); + break; + case 0x1F97: + bufpush(0x1F27); + bufpush(0x03B9); + break; + case 0x1F98: + bufpush(0x1F20); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F99: + bufpush(0x1F21); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F9A: + bufpush(0x1F22); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F9B: + bufpush(0x1F23); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F9C: + bufpush(0x1F24); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F9D: + bufpush(0x1F25); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F9E: + bufpush(0x1F26); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1F9F: + bufpush(0x1F27); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FA0: + bufpush(0x1F60); + bufpush(0x03B9); + break; + case 0x1FA1: + bufpush(0x1F61); + bufpush(0x03B9); + break; + case 0x1FA2: + bufpush(0x1F62); + bufpush(0x03B9); + break; + case 0x1FA3: + bufpush(0x1F63); + bufpush(0x03B9); + break; + case 0x1FA4: + bufpush(0x1F64); + bufpush(0x03B9); + break; + case 0x1FA5: + bufpush(0x1F65); + bufpush(0x03B9); + break; + case 0x1FA6: + bufpush(0x1F66); + bufpush(0x03B9); + break; + case 0x1FA7: + bufpush(0x1F67); + bufpush(0x03B9); + break; + case 0x1FA8: + bufpush(0x1F60); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FA9: + bufpush(0x1F61); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FAA: + bufpush(0x1F62); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FAB: + bufpush(0x1F63); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FAC: + bufpush(0x1F64); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FAD: + bufpush(0x1F65); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FAE: + bufpush(0x1F66); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FAF: + bufpush(0x1F67); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FB2: + bufpush(0x1F70); + bufpush(0x03B9); + break; + case 0x1FB3: + bufpush(0x03B1); + bufpush(0x03B9); + break; + case 0x1FB4: + bufpush(0x03AC); + bufpush(0x03B9); + break; + case 0x1FB6: + bufpush(0x03B1); + bufpush(0x0342); + break; + case 0x1FB7: + bufpush(0x03B1); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FB8: + bufpush(0x1FB0); + break; + case 0x1FB9: + bufpush(0x1FB1); + break; + case 0x1FBA: + bufpush(0x1F70); + break; + case 0x1FBB: + bufpush(0x1F71); + break; + case 0x1FBC: + bufpush(0x03B1); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FBE: + bufpush(0x03B9); + break; + case 0x1FC2: + bufpush(0x1F74); + bufpush(0x03B9); + break; + case 0x1FC3: + bufpush(0x03B7); + bufpush(0x03B9); + break; + case 0x1FC4: + bufpush(0x03AE); + bufpush(0x03B9); + break; + case 0x1FC6: + bufpush(0x03B7); + bufpush(0x0342); + break; + case 0x1FC7: + bufpush(0x03B7); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FC8: + bufpush(0x1F72); + break; + case 0x1FC9: + bufpush(0x1F73); + break; + case 0x1FCA: + bufpush(0x1F74); + break; + case 0x1FCB: + bufpush(0x1F75); + break; + case 0x1FCC: + bufpush(0x03B7); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x1FD2: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0300); + break; + case 0x1FD3: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x1FD6: + bufpush(0x03B9); + bufpush(0x0342); + break; + case 0x1FD7: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0342); + break; + case 0x1FD8: + bufpush(0x1FD0); + break; + case 0x1FD9: + bufpush(0x1FD1); + break; + case 0x1FDA: + bufpush(0x1F76); + break; + case 0x1FDB: + bufpush(0x1F77); + break; + case 0x1FE2: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0300); + break; + case 0x1FE3: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x1FE4: + bufpush(0x03C1); + bufpush(0x0313); + break; + case 0x1FE6: + bufpush(0x03C5); + bufpush(0x0342); + break; + case 0x1FE7: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0342); + break; + case 0x1FE8: + bufpush(0x1FE0); + break; + case 0x1FE9: + bufpush(0x1FE1); + break; + case 0x1FEA: + bufpush(0x1F7A); + break; + case 0x1FEB: + bufpush(0x1F7B); + break; + case 0x1FEC: + bufpush(0x1FE5); + break; + case 0x1FF2: + bufpush(0x1F7C); + bufpush(0x03B9); + break; + case 0x1FF3: + bufpush(0x03C9); + bufpush(0x03B9); + break; + case 0x1FF4: + bufpush(0x03CE); + bufpush(0x03B9); + break; + case 0x1FF6: + bufpush(0x03C9); + bufpush(0x0342); + break; + case 0x1FF7: + bufpush(0x03C9); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FF8: + bufpush(0x1F78); + break; + case 0x1FF9: + bufpush(0x1F79); + break; + case 0x1FFA: + bufpush(0x1F7C); + break; + case 0x1FFB: + bufpush(0x1F7D); + break; + case 0x1FFC: + bufpush(0x03C9); + bufpush(0x03B9); + break; + case 0x: + break; + case 0x2126: + bufpush(0x03C9); + break; + case 0x212A: + bufpush(0x006B); + break; + case 0x212B: + bufpush(0x00E5); + break; + case 0x2160: + bufpush(0x2170); + break; + case 0x2161: + bufpush(0x2171); + break; + case 0x2162: + bufpush(0x2172); + break; + case 0x2163: + bufpush(0x2173); + break; + case 0x2164: + bufpush(0x2174); + break; + case 0x2165: + bufpush(0x2175); + break; + case 0x2166: + bufpush(0x2176); + break; + case 0x2167: + bufpush(0x2177); + break; + case 0x2168: + bufpush(0x2178); + break; + case 0x2169: + bufpush(0x2179); + break; + case 0x216A: + bufpush(0x217A); + break; + case 0x216B: + bufpush(0x217B); + break; + case 0x216C: + bufpush(0x217C); + break; + case 0x216D: + bufpush(0x217D); + break; + case 0x216E: + bufpush(0x217E); + break; + case 0x216F: + bufpush(0x217F); + break; + case 0x24B6: + bufpush(0x24D0); + break; + case 0x24B7: + bufpush(0x24D1); + break; + case 0x24B8: + bufpush(0x24D2); + break; + case 0x24B9: + bufpush(0x24D3); + break; + case 0x24BA: + bufpush(0x24D4); + break; + case 0x24BB: + bufpush(0x24D5); + break; + case 0x24BC: + bufpush(0x24D6); + break; + case 0x24BD: + bufpush(0x24D7); + break; + case 0x24BE: + bufpush(0x24D8); + break; + case 0x24BF: + bufpush(0x24D9); + break; + case 0x24C0: + bufpush(0x24DA); + break; + case 0x24C1: + bufpush(0x24DB); + break; + case 0x24C2: + bufpush(0x24DC); + break; + case 0x24C3: + bufpush(0x24DD); + break; + case 0x24C4: + bufpush(0x24DE); + break; + case 0x24C5: + bufpush(0x24DF); + break; + case 0x24C6: + bufpush(0x24E0); + break; + case 0x24C7: + bufpush(0x24E1); + break; + case 0x24C8: + bufpush(0x24E2); + break; + case 0x24C9: + bufpush(0x24E3); + break; + case 0x24CA: + bufpush(0x24E4); + break; + case 0x24CB: + bufpush(0x24E5); + break; + case 0x24CC: + bufpush(0x24E6); + break; + case 0x24CD: + bufpush(0x24E7); + break; + case 0x24CE: + bufpush(0x24E8); + break; + case 0x24CF: + bufpush(0x24E9); + break; + case 0xFB00: + bufpush(0x0066); + bufpush(0x0066); + break; + case 0xFB01: + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB02: + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB03: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB04: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB05: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB06: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB13: + bufpush(0x0574); + bufpush(0x0576); + break; + case 0xFB14: + bufpush(0x0574); + bufpush(0x0565); + break; + case 0xFB15: + bufpush(0x0574); + bufpush(0x056B); + break; + case 0xFB16: + bufpush(0x057E); + bufpush(0x0576); + break; + case 0xFB17: + bufpush(0x0574); + bufpush(0x056D); + break; + case 0xFF21: + bufpush(0xFF41); + break; + case 0xFF22: + bufpush(0xFF42); + break; + case 0xFF23: + bufpush(0xFF43); + break; + case 0xFF24: + bufpush(0xFF44); + break; + case 0xFF25: + bufpush(0xFF45); + break; + case 0xFF26: + bufpush(0xFF46); + break; + case 0xFF27: + bufpush(0xFF47); + break; + case 0xFF28: + bufpush(0xFF48); + break; + case 0xFF29: + bufpush(0xFF49); + break; + case 0xFF2A: + bufpush(0xFF4A); + break; + case 0xFF2B: + bufpush(0xFF4B); + break; + case 0xFF2C: + bufpush(0xFF4C); + break; + case 0xFF2D: + bufpush(0xFF4D); + break; + case 0xFF2E: + bufpush(0xFF4E); + break; + case 0xFF2F: + bufpush(0xFF4F); + break; + case 0xFF30: + bufpush(0xFF50); + break; + case 0xFF31: + bufpush(0xFF51); + break; + case 0xFF32: + bufpush(0xFF52); + break; + case 0xFF33: + bufpush(0xFF53); + break; + case 0xFF34: + bufpush(0xFF54); + break; + case 0xFF35: + bufpush(0xFF55); + break; + case 0xFF36: + bufpush(0xFF56); + break; + case 0xFF37: + bufpush(0xFF57); + break; + case 0xFF38: + bufpush(0xFF58); + break; + case 0xFF39: + bufpush(0xFF59); + break; + case 0xFF3A: + bufpush(0xFF5A); + break; + case 0x10400: + bufpush(0x10428); + break; + case 0x10401: + bufpush(0x10429); + break; + case 0x10402: + bufpush(0x1042A); + break; + case 0x10403: + bufpush(0x1042B); + break; + case 0x10404: + bufpush(0x1042C); + break; + case 0x10405: + bufpush(0x1042D); + break; + case 0x10406: + bufpush(0x1042E); + break; + case 0x10407: + bufpush(0x1042F); + break; + case 0x10408: + bufpush(0x10430); + break; + case 0x10409: + bufpush(0x10431); + break; + case 0x1040A: + bufpush(0x10432); + break; + case 0x1040B: + bufpush(0x10433); + break; + case 0x1040C: + bufpush(0x10434); + break; + case 0x1040D: + bufpush(0x10435); + break; + case 0x1040E: + bufpush(0x10436); + break; + case 0x1040F: + bufpush(0x10437); + break; + case 0x10410: + bufpush(0x10438); + break; + case 0x10411: + bufpush(0x10439); + break; + case 0x10412: + bufpush(0x1043A); + break; + case 0x10413: + bufpush(0x1043B); + break; + case 0x10414: + bufpush(0x1043C); + break; + case 0x10415: + bufpush(0x1043D); + break; + case 0x10416: + bufpush(0x1043E); + break; + case 0x10417: + bufpush(0x1043F); + break; + case 0x10418: + bufpush(0x10440); + break; + case 0x10419: + bufpush(0x10441); + break; + case 0x1041A: + bufpush(0x10442); + break; + case 0x1041B: + bufpush(0x10443); + break; + case 0x1041C: + bufpush(0x10444); + break; + case 0x1041D: + bufpush(0x10445); + break; + case 0x1041E: + bufpush(0x10446); + break; + case 0x1041F: + bufpush(0x10447); + break; + case 0x10420: + bufpush(0x10448); + break; + case 0x10421: + bufpush(0x10449); + break; + case 0x10422: + bufpush(0x1044A); + break; + case 0x10423: + bufpush(0x1044B); + break; + case 0x10424: + bufpush(0x1044C); + break; + case 0x10425: + bufpush(0x1044D); + break; + } diff --git a/src/debug.h b/src/debug.h new file mode 100644 index 0000000000..af1d01745b --- /dev/null +++ b/src/debug.h @@ -0,0 +1,36 @@ +#ifndef __debug_h__ +#define __debug_h__ +#include +#include +#include + +#ifdef NDEBUG +#define debug(M, ...) +#else +#define debug(M, ...) \ + fprintf(stderr, "DEBUG %s:%d: " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) +#endif + +#define clean_errno() (errno == 0 ? "None" : strerror(errno)) + +#define log_err(M, ...) \ + fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, \ + clean_errno(), ##__VA_ARGS__) + +#define log_warn(M, ...) \ + fprintf(stderr, "[WARN] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, \ + clean_errno(), ##__VA_ARGS__) + +#define log_info(M, ...) fprintf(stderr, "[INFO] (%s:%d) " M "\n", __FILE__, \ + __LINE__, ##__VA_ARGS__) + +#define check(A, M, ...) \ + if(!(A)) { log_err(M, ##__VA_ARGS__); errno=0; goto error; } + +#define sentinel(M, ...) \ + { log_err(M, ##__VA_ARGS__); errno=0; goto error; } + +#define check_debug(A, M, ...) \ + if(!(A)) { debug(M, ##__VA_ARGS__); errno=0; goto error; } + +#endif diff --git a/src/detab.c b/src/detab.c new file mode 100644 index 0000000000..e03fcf7833 --- /dev/null +++ b/src/detab.c @@ -0,0 +1,48 @@ +#include "bstrlib.h" + +// UTF-8 aware detab: assumes s has no newlines, or only a final newline. +// Return 0 on success, BSTR_ERR if invalid UTF-8. +extern int bdetab(bstring s, int utf8) +{ + unsigned char c; + int pos = 0; // a count of characters + int byte = 0; // a count of bytes + int high_chars_to_skip = 0; + int numspaces = 0; + while ((c = bchar(s, byte))) { + if (utf8 && high_chars_to_skip > 0) { + if (c >= 0x80) { + high_chars_to_skip--; + byte++; + } else { + return BSTR_ERR; // invalid utf-8 + } + } else if (c == '\t') { + bdelete(s, byte, 1); // delete tab character + numspaces = 4 - (pos % 4); + binsertch(s, byte, numspaces, ' '); + byte += numspaces; + pos += numspaces; + } else if (c <= 0x80 || !utf8) { + byte++; + pos++; + } else { // multibyte utf8 sequences + if (c >> 1 == 0176) { + high_chars_to_skip = 5; + } else if (c >> 2 == 076) { + high_chars_to_skip = 4; + } else if (c >> 3 == 036) { + high_chars_to_skip = 3; + } else if (c >> 4 == 016) { + high_chars_to_skip = 2; + } else if (c >> 5 == 06) { + high_chars_to_skip = 1; + } else { + return BSTR_ERR; // invalid utf-8 + } + pos++; + byte++; + } + } + return 0; +} diff --git a/src/getopt.c b/src/getopt.c new file mode 100644 index 0000000000..321dd9f9b3 --- /dev/null +++ b/src/getopt.c @@ -0,0 +1,199 @@ +/* $Id: getopt.c 4022 2008-03-31 06:11:07Z rra $ + * + * Replacement implementation of getopt. + * + * This is a replacement implementation for getopt based on the my_getopt + * distribution by Benjamin Sittler. Only the getopt interface is included, + * since remctl doesn't use GNU long options, and the code has been rearranged + * and reworked somewhat to fit with the remctl coding style. + * + * Copyright 1997, 2000, 2001, 2002 Benjamin Sittler + * Copyright 2008 Russ Allbery + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include + +/* + * If we're running the test suite, rename getopt and the global variables to + * avoid conflicts with the system version. + */ +#if TESTING +# define getopt test_getopt +int test_getopt(int, char **, const char *); +# define optind test_optind +# define opterr test_opterr +# define optopt test_optopt +# define optarg test_optarg +#endif + +/* Initialize global interface variables. */ +int optind = 1; +int opterr = 1; +int optopt = 0; +char *optarg = NULL; + +/* + * This is the plain old UNIX getopt, with GNU-style extensions. If you're + * porting some piece of UNIX software, this is all you need. It supports + * GNU-style permutation and optional arguments, but does not support the GNU + * -W extension. + * + * This function is not re-entrant or thread-safe, has static variables, and + * generally isn't a great interface, but normally you only call it once. + */ +int +getopt(int argc, char *argv[], const char *optstring) +{ + const char *p; + size_t offset = 0; + char mode = '\0'; + int colon_mode = 0; + int option = -1; + + /* Holds the current position in the parameter being parsed. */ + static int charind = 0; + + /* + * By default, getopt permutes argv as it scans and leaves all non-options + * at the end. This can be changed with the first character of optstring + * or the environment variable POSIXLY_CORRECT. With a first character of + * '+' or when POSIXLY_CORRECT is set, option processing stops at the + * first non-option. If the first character is '-', each non-option argv + * element is handled as if it were the argument of an option with + * character code 1. mode holds this character. + * + * After the optional leading '+' and '-', optstring may contain ':'. If + * present, missing arguments return ':' instead of '?'. colon_mode holds + * this setting. + */ + if (getenv("POSIXLY_CORRECT") != NULL) { + mode = '+'; + colon_mode = '+'; + } else { + if (optstring[offset] == '+' || optstring[offset] == '-') { + mode = optstring[offset]; + offset++; + } + if (optstring[offset] == ':') { + colon_mode = 1; + offset++; + } + } + + /* + * charind holds where we left off. If it's set, we were in the middle + * of an argv element; if not, we pick up with the next element of + * optind. + */ + optarg = NULL; + if (charind == 0) { + if (optind >= argc) + option = -1; + else if (strcmp(argv[optind], "--") == 0) { + optind++; + option = -1; + } else if (argv[optind][0] != '-' || argv[optind][1] == '\0') { + char *tmp; + int i, j, k, end; + + if (mode == '+') + option = -1; + else if (mode == '-') { + optarg = argv[optind]; + optind++; + option = 1; + } else { + for (i = optind + 1, j = optind; i < argc; i++) + if ((argv[i][0] == '-') && (argv[i][1] != '\0')) { + optind = i; + option = getopt(argc, argv, optstring); + while (i > j) { + --i; + tmp = argv[i]; + end = (charind == 0) ? optind - 1 : optind; + for (k = i; k + 1 <= end; k++) { + argv[k] = argv[k + 1]; + } + argv[end] = tmp; + --optind; + } + break; + } + if (i == argc) + option = -1; + } + return option; + } else { + charind = 1; + } + } + if (charind != 0) { + optopt = argv[optind][charind]; + for (p = optstring + offset; *p != '\0'; p++) + if (optopt == *p) { + p++; + if (*p == ':') { + if (argv[optind][charind + 1] != '\0') { + optarg = &argv[optind][charind + 1]; + optind++; + charind = 0; + } else { + p++; + if (*p != ':') { + charind = 0; + optind++; + if (optind >= argc) { + if (opterr) + fprintf(stderr, "%s: option requires" + " an argument -- %c\n", argv[0], + optopt); + option = colon_mode ? ':' : '?'; + goto done; + } else { + optarg = argv[optind]; + optind++; + } + } + } + } + option = optopt; + } + if (option == -1) { + if (opterr) + fprintf(stderr, "%s: illegal option -- %c\n", argv[0], optopt); + option = '?'; + } + } + +done: + if (charind != 0) { + charind++; + if (argv[optind][charind] == '\0') { + optind++; + charind = 0; + } + } + if (optind > argc) + optind = argc; + return option; +} diff --git a/src/html.c b/src/html.c new file mode 100644 index 0000000000..56d5dbb49e --- /dev/null +++ b/src/html.c @@ -0,0 +1,276 @@ +#include +#include +#include +#include "bstrlib.h" +#include "stmd.h" +#include "debug.h" +#include "scanners.h" + +// Functions to convert block and inline lists to HTML strings. + +// Escape special characters in HTML. More efficient than +// three calls to bfindreplace. If preserve_entities is set, +// existing entities are left alone. +static bstring escape_html(bstring inp, bool preserve_entities) +{ + int pos = 0; + int match; + char c; + bstring escapable = blk2bstr("&<>\"", 4); + bstring ent; + bstring s = bstrcpy(inp); + while ((pos = binchr(s, pos, escapable)) != BSTR_ERR) { + c = bchar(s,pos); + switch (c) { + case '<': + bdelete(s, pos, 1); + ent = blk2bstr("<", 4); + binsert(s, pos, ent, ' '); + bdestroy(ent); + pos += 4; + break; + case '>': + bdelete(s, pos, 1); + ent = blk2bstr(">", 4); + binsert(s, pos, ent, ' '); + bdestroy(ent); + pos += 4; + break; + case '&': + if (preserve_entities && (match = scan_entity(s, pos))) { + pos += match; + } else { + bdelete(s, pos, 1); + ent = blk2bstr("&", 5); + binsert(s, pos, ent, ' '); + bdestroy(ent); + pos += 5; + } + break; + case '"': + bdelete(s, pos, 1); + ent = blk2bstr(""", 6); + binsert(s, pos, ent, ' '); + bdestroy(ent); + pos += 6; + break; + default: + bdelete(s, pos, 1); + log_err("unexpected character %02x", c); + } + } + bdestroy(escapable); + return s; +} + +static inline void cr(bstring buffer) +{ + int c = bchar(buffer, blength(buffer) - 1); + if (c != '\n' && c) { + bconchar(buffer, '\n'); + } +} + +// Convert a block list to HTML. Returns 0 on success, and sets result. +extern int blocks_to_html(block* b, bstring* result, bool tight) +{ + bstring contents = NULL; + bstring escaped, escaped2; + struct bstrList * info_words; + struct ListData * data; + bstring mbstart; + bstring html = blk2bstr("", 0); + + while(b != NULL) { + switch(b->tag) { + case document: + check(blocks_to_html(b->children, &contents, false) == 0, + "error converting blocks to html"); + bformata(html, "%s", contents->data); + bdestroy(contents); + break; + case paragraph: + check(inlines_to_html(b->inline_content, &contents) == 0, + "error converting inlines to html"); + if (tight) { + bformata(html, "%s", contents->data); + } else { + cr(html); + bformata(html, "

%s

", contents->data); + cr(html); + } + bdestroy(contents); + break; + case block_quote: + check(blocks_to_html(b->children, &contents, false) == 0, + "error converting blocks to html"); + cr(html); + bformata(html, "
\n%s
", contents->data); + cr(html); + bdestroy(contents); + break; + case list_item: + check(blocks_to_html(b->children, &contents, tight) == 0, + "error converting blocks to html"); + brtrimws(contents); + cr(html); + bformata(html, "
  • %s
  • ", contents->data); + cr(html); + bdestroy(contents); + break; + case list: + // make sure a list starts at the beginning of the line: + cr(html); + data = &(b->attributes.list_data); + check(blocks_to_html(b->children, &contents, data->tight) == 0, + "error converting blocks to html"); + mbstart = bformat(" start=\"%d\"", data->start); + bformata(html, "<%s%s>\n%s", + data->list_type == bullet ? "ul" : "ol", + data->start == 1 ? "" : (char*) mbstart->data, + contents->data, + data->list_type == bullet ? "ul" : "ol"); + cr(html); + bdestroy(contents); + bdestroy(mbstart); + break; + case atx_header: + case setext_header: + check(inlines_to_html(b->inline_content, &contents) == 0, + "error converting inlines to html"); + cr(html); + bformata(html, "%s", + b->attributes.header_level, + contents->data, + b->attributes.header_level); + cr(html); + bdestroy(contents); + break; + case indented_code: + escaped = escape_html(b->string_content, false); + cr(html); + bformata(html, "
    %s
    ", escaped->data); + cr(html); + bdestroy(escaped); + break; + case fenced_code: + escaped = escape_html(b->string_content, false); + cr(html); + bformata(html, "attributes.fenced_code_data.info) > 0) { + escaped2 = escape_html(b->attributes.fenced_code_data.info, true); + info_words = bsplit(escaped2, ' '); + bformata(html, " class=\"%s\"", info_words->entry[0]->data); + bdestroy(escaped2); + bstrListDestroy(info_words); + } + bformata(html, ">%s
    ", escaped->data); + cr(html); + bdestroy(escaped); + break; + case html_block: + bformata(html, "%s", b->string_content->data); + break; + case hrule: + bformata(html, "
    "); + cr(html); + break; + case reference_def: + break; + default: + log_warn("block type %d not implemented\n", b->tag); + break; + } + b = b->next; + } + *result = html; + return 0; + error: + return -1; +} + +// Convert an inline list to HTML. Returns 0 on success, and sets result. +extern int inlines_to_html(inl* ils, bstring* result) +{ + bstring contents = NULL; + bstring html = blk2bstr("", 0); + bstring mbtitle, escaped, escaped2; + + while(ils != NULL) { + switch(ils->tag) { + case str: + escaped = escape_html(ils->content.literal, false); + bformata(html, "%s", escaped->data); + bdestroy(escaped); + break; + case linebreak: + bformata(html, "
    \n"); + break; + case softbreak: + bformata(html, "\n"); + break; + case code: + escaped = escape_html(ils->content.literal, false); + bformata(html, "%s", escaped->data); + bdestroy(escaped); + break; + case raw_html: + case entity: + bformata(html, "%s", ils->content.literal->data); + break; + case link: + check(inlines_to_html(ils->content.inlines, &contents) == 0, + "error converting inlines to html"); + if (blength(ils->content.linkable.title) > 0) { + escaped = escape_html(ils->content.linkable.title, true); + mbtitle = bformat(" title=\"%s\"", escaped->data); + bdestroy(escaped); + } else { + mbtitle = blk2bstr("",0); + } + escaped = escape_html(ils->content.linkable.url, true); + bformata(html, "
    %s", + escaped->data, + mbtitle->data, + contents->data); + bdestroy(escaped); + bdestroy(mbtitle); + bdestroy(contents); + break; + case image: + check(inlines_to_html(ils->content.inlines, &contents) == 0, + "error converting inlines to html"); + escaped = escape_html(ils->content.linkable.url, true); + escaped2 = escape_html(contents, false); + bdestroy(contents); + bformata(html, "\"%s\"",data, escaped2->data); + bdestroy(escaped); + bdestroy(escaped2); + if (blength(ils->content.linkable.title) > 0) { + escaped = escape_html(ils->content.linkable.title, true); + bformata(html, " title=\"%s\"", escaped->data); + bdestroy(escaped); + } + bformata(html, " />"); + break; + case strong: + check(inlines_to_html(ils->content.inlines, &contents) == 0, + "error converting inlines to html"); + bformata(html, "%s", contents->data); + bdestroy(contents); + break; + case emph: + check(inlines_to_html(ils->content.inlines, &contents) == 0, + "error converting inlines to html"); + bformata(html, "%s", contents->data); + bdestroy(contents); + break; + } + ils = ils->next; + } + *result = html; + return 0; + error: + return -1; +} diff --git a/src/inlines.c b/src/inlines.c new file mode 100644 index 0000000000..9e35178738 --- /dev/null +++ b/src/inlines.c @@ -0,0 +1,998 @@ +#include +#include +#include +#include +#include "bstrlib.h" +#include "stmd.h" +#include "uthash.h" +#include "debug.h" +#include "scanners.h" +#include "utf8.h" + +extern void free_reference(reference *ref) { + bdestroy(ref->label); + bdestroy(ref->url); + bdestroy(ref->title); + free(ref); +} + +extern void free_reference_map(reference **refmap) { + /* free the hash table contents */ + reference *s; + reference *tmp; + if (refmap != NULL) { + HASH_ITER(hh, *refmap, s, tmp) { + HASH_DEL(*refmap, s); + free_reference(s); + } + free(refmap); + } +} + +// normalize reference: collapse internal whitespace to single space, +// remove leading/trailing whitespace, case fold +static bstring normalize_reference(bstring s) +{ + bstring normalized = case_fold(s); + int pos = 0; + int startpos; + char c; + while ((c = bchar(normalized, pos))) { + if (isspace(c)) { + startpos = pos; + // skip til next non-space + pos++; + while (isspace(bchar(s, pos))) { + pos++; + } + bdelete(normalized, startpos, pos - startpos); + binsertch(normalized, startpos, 1, ' '); + pos = startpos + 1; + } + pos++; + } + btrimws(normalized); + return normalized; +} + +// Returns reference if refmap contains a reference with matching +// label, otherwise NULL. +extern reference* lookup_reference(reference** refmap, bstring lab) +{ + reference * ref = NULL; + bstring label = normalize_reference(lab); + if (refmap != NULL) { + HASH_FIND_STR(*refmap, (char*) label->data, ref); + } + bdestroy(label); + return ref; +} + +extern reference* make_reference(bstring label, bstring url, bstring title) +{ + reference * ref; + ref = malloc(sizeof(reference)); + ref->label = normalize_reference(label); + ref->url = bstrcpy(url); + ref->title = bstrcpy(title); + return ref; +} + +extern void add_reference(reference** refmap, reference* ref) +{ + reference * t = NULL; + HASH_FIND(hh, *refmap, (char*) ref->label->data, + (unsigned) blength(ref->label), t); + if (t == NULL) { + HASH_ADD_KEYPTR(hh, *refmap, (char*) ref->label->data, + (unsigned) blength(ref->label), ref); + } else { + free_reference(ref); // we free this now since it won't be in the refmap + } +} + +// Create an inline with a linkable string value. +inline static inl* make_linkable(int t, inl* label, bstring url, bstring title) +{ + inl* e = (inl*) malloc(sizeof(inl)); + e->tag = t; + e->content.linkable.label = label; + e->content.linkable.url = url; + e->content.linkable.title = title; + e->next = NULL; + return e; +} + +inline static inl* make_inlines(int t, inl* contents) +{ + inl* e = (inl*) malloc(sizeof(inl)); + e->tag = t; + e->content.inlines = contents; + e->next = NULL; + return e; +} + +// Create an inline with a literal string value. +inline static inl* make_literal(int t, bstring s) +{ + inl* e = (inl*) malloc(sizeof(inl)); + e->tag = t; + e->content.literal = s; + e->next = NULL; + return e; +} + +// Create an inline with no value. +inline static inl* make_simple(int t) +{ + inl* e = (inl*) malloc(sizeof(inl)); + e->tag = t; + e->next = NULL; + return e; +} + +// Macros for creating various kinds of inlines. +#define make_str(s) make_literal(str, s) +#define make_code(s) make_literal(code, s) +#define make_raw_html(s) make_literal(raw_html, s) +#define make_entity(s) make_literal(entity, s) +#define make_linebreak() make_simple(linebreak) +#define make_softbreak() make_simple(softbreak) +#define make_link(label, url, title) make_linkable(link, label, url, title) +#define make_image(alt, url, title) make_linkable(image, alt, url, title) +#define make_emph(contents) make_inlines(emph, contents) +#define make_strong(contents) make_inlines(strong, contents) + +// Free an inline list. +extern void free_inlines(inl* e) +{ + inl * next; + while (e != NULL) { + switch (e->tag){ + case str: + case raw_html: + case code: + case entity: + bdestroy(e->content.literal); + break; + case linebreak: + case softbreak: + break; + case link: + case image: + bdestroy(e->content.linkable.url); + bdestroy(e->content.linkable.title); + free_inlines(e->content.linkable.label); + break; + case emph: + case strong: + free_inlines(e->content.inlines); + break; + default: + break; + } + next = e->next; + free(e); + e = next; + } +} + +// Append inline list b to the end of inline list a. +// Return pointer to head of new list. +inline static inl* append_inlines(inl* a, inl* b) +{ + if (a == NULL) { // NULL acts like an empty list + return b; + } + inl* cur = a; + while (cur->next) { + cur = cur->next; + } + cur->next = b; + return a; +} + +// Make a 'subject' from an input string. +static subject* make_subject(bstring s, reference** refmap) +{ + subject* e = (subject*) malloc(sizeof(subject)); + // remove final whitespace + brtrimws(s); + e->buffer = s; + e->pos = 0; + e->label_nestlevel = 0; + e->reference_map = refmap; + return e; +} + +inline static int isbacktick(int c) +{ + return (c == '`'); +} + +// Return the next character in the subject, without advancing. +// Return 0 if at the end of the subject. +#define peek_char(subj) bchar(subj->buffer, subj->pos) + +// Return true if there are more characters in the subject. +inline static int is_eof(subject* subj) +{ + return (subj->pos >= blength(subj->buffer)); +} + +// Advance the subject. Doesn't check for eof. +#define advance(subj) subj->pos += 1 + +// Take characters while a predicate holds, and return a string. +inline static bstring take_while(subject* subj, int (*f)(int)) +{ + unsigned char c; + int startpos = subj->pos; + int len = 0; + while ((c = peek_char(subj)) && (*f)(c)) { + advance(subj); + len++; + } + return bmidstr(subj->buffer, startpos, len); +} + +// Take one character and return a string, or NULL if eof. +inline static bstring take_one(subject* subj) +{ + int startpos = subj->pos; + if (is_eof(subj)){ + return NULL; + } else { + advance(subj); + return bmidstr(subj->buffer, startpos, 1); + } +} + +// Try to process a backtick code span that began with a +// span of ticks of length openticklength length (already +// parsed). Return 0 if you don't find matching closing +// backticks, otherwise return the position in the subject +// after the closing backticks. +static int scan_to_closing_backticks(subject* subj, int openticklength) +{ + // read non backticks + char c; + while ((c = peek_char(subj)) && c != '`') { + advance(subj); + } + if (is_eof(subj)) { + return 0; // did not find closing ticks, return 0 + } + int numticks = 0; + while (peek_char(subj) == '`') { + advance(subj); + numticks++; + } + if (numticks != openticklength){ + return(scan_to_closing_backticks(subj, openticklength)); + } + return (subj->pos); +} + +// Destructively modify bstring, collapsing consecutive +// space and newline characters into a single space. +static int normalize_whitespace(bstring s) +{ + bool last_char_was_space = false; + int pos = 0; + char c; + while ((c = bchar(s, pos))) { + switch (c) { + case ' ': + if (last_char_was_space) { + bdelete(s, pos, 1); + } else { + pos++; + } + last_char_was_space = true; + break; + case '\n': + if (last_char_was_space) { + bdelete(s, pos, 1); + } else { + bdelete(s, pos, 1); + binsertch(s, pos, 1, ' '); + pos++; + } + last_char_was_space = true; + break; + default: + pos++; + last_char_was_space = false; + } + } + return 0; +} + +// Parse backtick code section or raw backticks, return an inline. +// Assumes that the subject has a backtick at the current position. +static inl* handle_backticks(subject *subj) +{ + bstring openticks = take_while(subj, isbacktick); + bstring result; + int ticklength = blength(openticks); + int startpos = subj->pos; + int endpos = scan_to_closing_backticks(subj, ticklength); + if (endpos == 0) { // not found + subj->pos = startpos; // rewind + return make_str(openticks); + } else { + bdestroy(openticks); + result = bmidstr(subj->buffer, startpos, endpos - startpos - ticklength); + btrimws(result); + normalize_whitespace(result); + return make_code(result); + } +} + +// Scan ***, **, or * and return number scanned, or 0. +// Don't advance position. +static int scan_delims(subject* subj, char c, bool * can_open, bool * can_close) +{ + int numdelims = 0; + char char_before, char_after; + int startpos = subj->pos; + + char_before = subj->pos == 0 ? '\n' : bchar(subj->buffer, subj->pos - 1); + while (peek_char(subj) == c) { + numdelims++; + advance(subj); + } + char_after = peek_char(subj); + *can_open = numdelims > 0 && numdelims <= 3 && !isspace(char_after); + *can_close = numdelims > 0 && numdelims <= 3 && !isspace(char_before); + if (c == '_') { + *can_open = *can_open && !isalnum(char_before); + *can_close = *can_close && !isalnum(char_after); + } + subj->pos = startpos; + return numdelims; +} + +// Parse strong/emph or a fallback. +// Assumes the subject has '_' or '*' at the current position. +static inl* handle_strong_emph(subject* subj, char c) +{ + bool can_open, can_close; + inl * result = NULL; + inl ** last = malloc(sizeof(inl *)); + inl * new; + inl * il; + inl * first_head = NULL; + inl * first_close = NULL; + int first_close_delims = 0; + int numdelims; + + *last = NULL; + + numdelims = scan_delims(subj, c, &can_open, &can_close); + subj->pos += numdelims; + + new = make_str(bmidstr(subj->buffer, subj->pos - numdelims, numdelims)); + *last = new; + first_head = new; + result = new; + + if (!can_open || numdelims == 0) { + goto done; + } + + switch (numdelims) { + case 1: + while (true) { + numdelims = scan_delims(subj, c, &can_open, &can_close); + if (numdelims >= 1 && can_close) { + subj->pos += 1; + first_head->tag = emph; + bdestroy(first_head->content.literal); + first_head->content.inlines = first_head->next; + first_head->next = NULL; + goto done; + } else { + if (!parse_inline(subj, last)) { + goto done; + } + } + } + break; + case 2: + while (true) { + numdelims = scan_delims(subj, c, &can_open, &can_close); + if (numdelims >= 2 && can_close) { + subj->pos += 2; + first_head->tag = strong; + bdestroy(first_head->content.literal); + first_head->content.inlines = first_head->next; + first_head->next = NULL; + goto done; + } else { + if (!parse_inline(subj, last)) { + goto done; + } + } + } + break; + case 3: + while (true) { + numdelims = scan_delims(subj, c, &can_open, &can_close); + if (can_close && numdelims >= 1 && numdelims <= 3 && + numdelims != first_close_delims) { + new = make_str(bmidstr(subj->buffer, subj->pos, numdelims)); + append_inlines(*last, new); + *last = new; + if (numdelims == 3) { + numdelims = 1; + } + subj->pos += numdelims; + if (first_close) { + first_head->tag = first_close_delims == 1 ? strong : emph; + bdestroy(first_head->content.literal); + first_head->content.inlines = + make_inlines(first_close_delims == 1 ? emph : strong, + first_head->next); + + il = first_head->next; + while (il->next && il->next != first_close) { + il = il->next; + } + il->next = NULL; + + first_head->content.inlines->next = first_close->next; + + il = first_head->content.inlines; + while (il->next && il->next != *last) { + il = il->next; + } + il->next = NULL; + free_inlines(*last); + + first_close->next = NULL; + free_inlines(first_close); + first_head->next = NULL; + goto done; + } else { + first_close = *last; + first_close_delims = numdelims; + } + } else { + if (!parse_inline(subj, last)) { + goto done; + } + } + } + break; + default: + goto done; + } + + done: + free(last); + return result; +} + +// Parse backslash-escape or just a backslash, returning an inline. +static inl* handle_backslash(subject *subj) +{ + advance(subj); + unsigned char nextchar = peek_char(subj); + if (ispunct(nextchar)) { // only ascii symbols and newline can be escaped + advance(subj); + return make_str(bformat("%c", nextchar)); + } else if (nextchar == '\n') { + advance(subj); + return make_linebreak(); + } else { + return make_str(bfromcstr("\\")); + } +} + +// Parse an entity or a regular "&" string. +// Assumes the subject has an '&' character at the current position. +static inl* handle_entity(subject* subj) +{ + int match; + inl * result; + match = scan_entity(subj->buffer, subj->pos); + if (match) { + result = make_entity(bmidstr(subj->buffer, subj->pos, match)); + subj->pos += match; + } else { + advance(subj); + result = make_str(bfromcstr("&")); + } + return result; +} + +// Like make_str, but parses entities. +// Returns an inline sequence consisting of str and entity elements. +static inl * make_str_with_entities(bstring s) +{ + inl * result = NULL; + inl * new; + int searchpos; + char c; + subject * subj = make_subject(s, NULL); + + while ((c = peek_char(subj))) { + switch (c) { + case '&': + new = handle_entity(subj); + break; + default: + searchpos = bstrchrp(subj->buffer, '&', subj->pos); + if (searchpos == BSTR_ERR) { + searchpos = blength(subj->buffer); + } + new = make_str(bmidstr(subj->buffer, subj->pos, searchpos - subj->pos)); + subj->pos = searchpos; + } + result = append_inlines(result, new); + } + free(subj); + return result; +} + +// Destructively unescape a string: remove backslashes before punctuation chars. +extern int unescape(bstring url) +{ + // remove backslashes before punctuation chars: + int searchpos = 0; + while ((searchpos = bstrchrp(url, '\\', searchpos)) != BSTR_ERR) { + if (ispunct(bchar(url, searchpos + 1))) { + bdelete(url, searchpos, 1); + } else { + searchpos++; + } + } + return 0; +} + +// Clean a URL: remove surrounding whitespace and surrounding <>, +// and remove \ that escape punctuation. +static int clean_url(bstring url) +{ + // remove surrounding <> if any: + int urllength = blength(url); + btrimws(url); + if (bchar(url, 0) == '<' && bchar(url, urllength - 1) == '>') { + bdelete(url, 0, 1); + bdelete(url, urllength - 2, 1); + } + unescape(url); + return 0; +} + +// Clean a title: remove surrounding quotes and remove \ that escape punctuation. +static int clean_title(bstring title) +{ + // remove surrounding quotes if any: + int titlelength = blength(title); + if ((bchar(title, 0) == '\'' && bchar(title, titlelength - 1) == '\'') || + (bchar(title, 0) == '(' && bchar(title, titlelength - 1) == ')') || + (bchar(title, 0) == '"' && bchar(title, titlelength - 1) == '"')) { + bdelete(title, 0, 1); + bdelete(title, titlelength - 2, 1); + } + unescape(title); + return 0; +} + +// Parse an autolink or HTML tag. +// Assumes the subject has a '<' character at the current position. +static inl* handle_pointy_brace(subject* subj) +{ + int matchlen = 0; + bstring contents; + inl* result; + + advance(subj); // advance past first < + // first try to match a URL autolink + matchlen = scan_autolink_uri(subj->buffer, subj->pos); + if (matchlen > 0) { + contents = bmidstr(subj->buffer, subj->pos, matchlen - 1); + subj->pos += matchlen; + result = make_link(make_str_with_entities(contents), + bstrcpy(contents), bfromcstr("")); + bdestroy(contents); + return result; + } + // next try to match an email autolink + matchlen = scan_autolink_email(subj->buffer, subj->pos); + if (matchlen > 0) { + contents = bmidstr(subj->buffer, subj->pos, matchlen - 1); + subj->pos += matchlen; + result = make_link(make_str_with_entities(contents), + bformat("mailto:%s", contents->data), + bfromcstr("")); + bdestroy(contents); + return result; + } + // finally, try to match an html tag + matchlen = scan_html_tag(subj->buffer, subj->pos); + if (matchlen > 0) { + contents = bmidstr(subj->buffer, subj->pos, matchlen); + binsertch(contents, 0, 1, '<'); + subj->pos += matchlen; + return make_raw_html(contents); + } else {// if nothing matches, just return the opening <: + return make_str(bfromcstr("<")); + } +} + +// Parse a link label. Returns 1 if successful. +// Unless raw_label is null, it is set to point to the raw contents of the []. +// Assumes the subject has a '[' character at the current position. +// Returns 0 and does not advance if no matching ] is found. +// Note the precedence: code backticks have precedence over label bracket +// markers, which have precedence over *, _, and other inline formatting +// markers. So, 2 below contains a link while 1 does not: +// 1. [a link `with a ](/url)` character +// 2. [a link *with emphasized ](/url) text* +static int link_label(subject* subj, bstring* raw_label) +{ + int nestlevel = 0; + inl* tmp = NULL; + bstring raw; + int startpos = subj->pos; + if (subj->label_nestlevel) { + // if we've already checked to the end of the subject + // for a label, even with a different starting [, we + // know we won't find one here and we can just return. + // Note: nestlevel 1 would be: [foo [bar] + // nestlevel 2 would be: [foo [bar [baz] + subj->label_nestlevel--; + return 0; + } + advance(subj); // advance past [ + char c; + while ((c = peek_char(subj)) && (c != ']' || nestlevel > 0)) { + switch (c) { + case '`': + tmp = handle_backticks(subj); + free_inlines(tmp); + break; + case '<': + tmp = handle_pointy_brace(subj); + free_inlines(tmp); + break; + case '[': // nested [] + nestlevel++; + advance(subj); + break; + case ']': // nested [] + nestlevel--; + advance(subj); + break; + case '\\': + advance(subj); + if (ispunct(peek_char(subj))) { + advance(subj); + } + break; + default: + advance(subj); + } + } + if (c == ']') { + if (raw_label != NULL) { + raw = bmidstr(subj->buffer, startpos + 1, subj->pos - (startpos + 1)); + *raw_label = raw; + } + subj->label_nestlevel = 0; + advance(subj); // advance past ] + return 1; + } else { + if (c == 0) { + subj->label_nestlevel = nestlevel; + } + subj->pos = startpos; // rewind + return 0; + } +} + +// Parse a link or the link portion of an image, or return a fallback. +static inl* handle_left_bracket(subject* subj) +{ + inl* lab = NULL; + inl* result = NULL; + reference* ref; + int n; + int sps; + int found_label; + int endlabel, starturl, endurl, starttitle, endtitle, endall; + bstring url, title, rawlabel, reflabel; + bstring rawlabel2 = NULL; + found_label = link_label(subj, &rawlabel); + endlabel = subj->pos; + if (found_label) { + if (peek_char(subj) == '(' && + ((sps = scan_spacechars(subj->buffer, subj->pos + 1)) > -1) && + ((n = scan_link_url(subj->buffer, subj->pos + 1 + sps)) > -1)) { + // try to parse an explicit link: + starturl = subj->pos + 1 + sps; // after ( + endurl = starturl + n; + starttitle = endurl + scan_spacechars(subj->buffer, endurl); + // ensure there are spaces btw url and title + endtitle = (starttitle == endurl) ? starttitle : + starttitle + scan_link_title(subj->buffer, starttitle); + endall = endtitle + scan_spacechars(subj->buffer, endtitle); + if (bchar(subj->buffer, endall) == ')') { + subj->pos = endall + 1; + url = bmidstr(subj->buffer, starturl, endurl - starturl); + clean_url(url); + title = bmidstr(subj->buffer, starttitle, endtitle - starttitle); + clean_title(title); + lab = parse_inlines(rawlabel, NULL); + bdestroy(rawlabel); + return make_link(lab, url, title); + } else { + // if we get here, we matched a label but didn't get further: + subj->pos = endlabel; + lab = parse_inlines(rawlabel, subj->reference_map); + bdestroy(rawlabel); + result = append_inlines(make_str(bfromcstr("[")), + append_inlines(lab, + make_str(bfromcstr("]")))); + return result; + } + } else { + // Check for reference link. + // First, see if there's another label: + subj->pos = subj->pos + scan_spacechars(subj->buffer, endlabel); + reflabel = rawlabel; + // if followed by a nonempty link label, we change reflabel to it: + if (peek_char(subj) == '[' && + link_label(subj, &rawlabel2)) { + if (blength(rawlabel2) > 0) { + reflabel = rawlabel2; + } + } else { + subj->pos = endlabel; + } + // lookup rawlabel in subject->reference_map: + ref = lookup_reference(subj->reference_map, reflabel); + if (ref != NULL) { // found + lab = parse_inlines(rawlabel, NULL); + result = make_link(lab, bstrcpy(ref->url), bstrcpy(ref->title)); + } else { + subj->pos = endlabel; + lab = parse_inlines(rawlabel, subj->reference_map); + result = append_inlines(make_str(bfromcstr("[")), + append_inlines(lab, make_str(bfromcstr("]")))); + } + bdestroy(rawlabel); + bdestroy(rawlabel2); + return result; + } + } + // If we fall through to here, it means we didn't match a link: + advance(subj); // advance past [ + return make_str(bfromcstr("[")); +} + +// Parse a hard or soft linebreak, returning an inline. +// Assumes the subject has a newline at the current position. +static inl* handle_newline(subject *subj) +{ + int nlpos = subj->pos; + // skip over newline + advance(subj); + // skip spaces at beginning of line + while (peek_char(subj) == ' ') { + advance(subj); + } + if (nlpos > 1 && + bchar(subj->buffer, nlpos - 1) == ' ' && + bchar(subj->buffer, nlpos - 2) == ' ') { + return make_linebreak(); + } else { + return make_softbreak(); + } +} + +inline static int not_eof(subject* subj) +{ + return !is_eof(subj); +} + +// Parse inlines while a predicate is satisfied. Return inlines. +extern inl* parse_inlines_while(subject* subj, int (*f)(subject*)) +{ + inl* result = NULL; + inl** last = &result; + while ((*f)(subj) && parse_inline(subj, last)) { + } + return result; +} + +// Parse an inline, advancing subject, and add it to last element. +// Adjust tail to point to new last element of list. +// Return 0 if no inline can be parsed, 1 otherwise. +extern int parse_inline(subject* subj, inl ** last) +{ + inl* new = NULL; + bstring contents; + bstring special_chars; + unsigned char c; + int endpos; + c = peek_char(subj); + if (c == 0) { + return 0; + } + switch(c){ + case '\n': + new = handle_newline(subj); + break; + case '`': + new = handle_backticks(subj); + break; + case '\\': + new = handle_backslash(subj); + break; + case '&': + new = handle_entity(subj); + break; + case '<': + new = handle_pointy_brace(subj); + break; + case '_': + if (subj->pos > 0 && (isalnum(bchar(subj->buffer, subj->pos - 1)) || + bchar(subj->buffer, subj->pos - 1) == '_')) { + new = make_str(take_one(subj)); + } else { + new = handle_strong_emph(subj, '_'); + } + break; + case '*': + new = handle_strong_emph(subj, '*'); + break; + case '[': + new = handle_left_bracket(subj); + break; + case '!': + advance(subj); + if (peek_char(subj) == '[') { + new = handle_left_bracket(subj); + if (new != NULL && new->tag == link) { + new->tag = image; + } else { + new = append_inlines(make_str(bfromcstr("!")), new); + } + } else { + new = make_str(bfromcstr("!")); + } + break; + default: + // we read until we hit a special character + special_chars = bfromcstr("\n\\`&_*[]buffer, subj->pos, special_chars); + bdestroy(special_chars); + if (endpos == subj->pos) { + // current char is special: read a 1-character str + contents = take_one(subj); + } else if (endpos == BSTR_ERR) { + // special char not found, take whole rest of buffer: + endpos = subj->buffer->slen; + contents = bmidstr(subj->buffer, subj->pos, endpos - subj->pos); + subj->pos = endpos; + } else { + // take buffer from subj->pos to endpos to str. + contents = bmidstr(subj->buffer, subj->pos, endpos - subj->pos); + subj->pos = endpos; + // if we're at a newline, strip trailing spaces. + if (peek_char(subj) == '\n') { + brtrimws(contents); + } + } + new = make_str(contents); + } + if (*last == NULL) { + *last = new; + } else { + append_inlines(*last, new); + } + return 1; +} + +extern inl* parse_inlines(bstring input, reference** refmap) +{ + subject * subj = make_subject(input, refmap); + inl * result = parse_inlines_while(subj, not_eof); + free(subj); + return result; +} + +// Parse zero or more space characters, including at most one newline. +void spnl(subject* subj) +{ + bool seen_newline = false; + while (peek_char(subj) == ' ' || + (!seen_newline && + (seen_newline = peek_char(subj) == '\n'))) { + advance(subj); + } +} + +// Parse reference. Assumes string begins with '[' character. +// Modify refmap if a reference is encountered. +// Return 0 if no reference found, otherwise position of subject +// after reference is parsed. +extern int parse_reference(bstring input, reference** refmap) +{ + subject * subj = make_subject(input, NULL); + bstring lab = NULL; + bstring url = NULL; + bstring title = NULL; + int matchlen = 0; + int beforetitle; + reference * new = NULL; + int newpos; + + // parse label: + if (!link_label(subj, &lab)) { + free(subj); + return 0; + } + // colon: + if (peek_char(subj) == ':') { + advance(subj); + } else { + free(subj); + bdestroy(lab); + return 0; + } + // parse link url: + spnl(subj); + matchlen = scan_link_url(subj->buffer, subj->pos); + if (matchlen) { + url = bmidstr(subj->buffer, subj->pos, matchlen); + clean_url(url); + subj->pos += matchlen; + } else { + free(subj); + bdestroy(lab); + bdestroy(url); + return 0; + } + // parse optional link_title + beforetitle = subj->pos; + spnl(subj); + matchlen = scan_link_title(subj->buffer, subj->pos); + if (matchlen) { + title = bmidstr(subj->buffer, subj->pos, matchlen); + clean_title(title); + subj->pos += matchlen; + } else { + subj->pos = beforetitle; + title = bfromcstr(""); + } + // parse final spaces and newline: + while (peek_char(subj) == ' ') { + advance(subj); + } + if (peek_char(subj) == '\n') { + advance(subj); + } else if (peek_char(subj) != 0) { + free(subj); + bdestroy(lab); + bdestroy(url); + bdestroy(title); + return 0; + } + // insert reference into refmap + new = make_reference(lab, url, title); + add_reference(refmap, new); + + newpos = subj->pos; + free(subj); + bdestroy(lab); + bdestroy(url); + bdestroy(title); + return newpos; +} + diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000000..40a63bc861 --- /dev/null +++ b/src/main.c @@ -0,0 +1,102 @@ +#include +#include +#include "bstrlib.h" +#include "stmd.h" +#include "debug.h" + +void print_usage() +{ + printf("Usage: stmd [FILE*]\n"); + printf("Options: --help, -h Print usage information\n"); + printf(" --ast Print AST instead of HTML\n"); + printf(" --version Print version\n"); +} + +int main(int argc, char *argv[]) { + int i; + bool ast = false; + int g = 0; + int numfps = 0; + int files[argc]; + + for (i=1; i < argc; i++) { + if (strcmp(argv[i], "--version") == 0) { + printf("stmd %s", VERSION); + printf(" - standard markdown converter (c) 2014 John MacFarlane\n"); + exit(0); + } else if ((strcmp(argv[i], "--help") == 0) || + (strcmp(argv[i], "-h") == 0)) { + print_usage(); + exit(0); + } else if (strcmp(argv[i], "--ast") == 0) { + ast = true; + } else if (*argv[i] == '-') { + print_usage(); + exit(1); + } else { // treat as file argument + files[g] = i; + g++; + } + } + + numfps = g; + bstring s = NULL; + bstring html; + g = 0; + block * cur = make_document(); + int linenum = 1; + extern int errno; + FILE * fp = NULL; + + if (numfps == 0) { + // read from stdin + while ((s = bgets((bNgetc) fgetc, stdin, '\n'))) { + check(incorporate_line(s, linenum, &cur) == 0, + "error incorporating line %d", linenum); + bdestroy(s); + linenum++; + } + } else { + // iterate over input file pointers + for (g=0; g < numfps; g++) { + + fp = fopen(argv[files[g]], "r"); + if (fp == NULL) { + fprintf(stderr, "Error opening file %s: %s\n", + argv[files[g]], strerror(errno)); + exit(1); + } + + struct bStream *stream = bsopen((bNread)fread, fp); + if (stream == NULL) { + printf("Error opening stream\n"); + } + while (bsreadln(s, stream, '\n') != BSTR_ERR) { + check(incorporate_line(s, linenum, &cur) == 0, + "error incorporating line %d of %s", linenum, argv[files[g]]); + linenum++; + } + bsclose(stream); + } + } + + while (cur != cur->top) { + finalize(cur, linenum); + cur = cur->parent; + } + check(cur == cur->top, "problems finalizing open containers"); + finalize(cur, linenum); + process_inlines(cur, cur->attributes.refmap); + if (ast) { + print_blocks(cur, 0); + } else { + check(blocks_to_html(cur, &html, false) == 0, "could not format as HTML"); + printf("%s", html->data); + bdestroy(html); + } + free_blocks(cur); + return 0; +error: + return -1; +} + diff --git a/src/print.c b/src/print.c new file mode 100644 index 0000000000..a9248706ad --- /dev/null +++ b/src/print.c @@ -0,0 +1,168 @@ +#include +#include +#include "bstrlib.h" +#include "stmd.h" +#include "debug.h" + +static bstring format_str(bstring s) +{ + int pos = 0; + int len = blength(s); + bstring result = bfromcstr(""); + char c; + bformata(result, "\""); + while (pos < len) { + c = bchar(s, pos); + switch (c) { + case '\n': + bformata(result, "\\n"); + break; + case '"': + bformata(result, "\\\""); + break; + case '\\': + bformata(result, "\\\\"); + break; + default: + bformata(result, "%c", c); + } + pos++; + } + bformata(result, "\""); + return result; +} + +// Functions to pretty-print inline and block lists, for debugging. +// Prettyprint an inline list, for debugging. +extern void print_blocks(block* b, int indent) +{ + struct ListData * data; + while(b != NULL) { + // printf("%3d %3d %3d| ", b->start_line, b->start_column, b->end_line); + for (int i=0; i < indent; i++) { + putchar(' '); + } + switch(b->tag) { + case document: + printf("document\n"); + print_blocks(b->children, indent + 2); + break; + case block_quote: + printf("block_quote\n"); + print_blocks(b->children, indent + 2); + break; + case list_item: + data = &(b->attributes.list_data); + printf("list_item\n"); + print_blocks(b->children, indent + 2); + break; + case list: + data = &(b->attributes.list_data); + if (data->list_type == ordered) { + printf("list (type=ordered tight=%s start=%d delim=%s)\n", + (data->tight ? "true" : "false"), + data->start, + (data->delimiter == parens ? "parens" : "period")); + } else { + printf("list (type=bullet tight=%s bullet_char=%c)\n", + (data->tight ? "true" : "false"), + data->bullet_char); + } + print_blocks(b->children, indent + 2); + break; + case atx_header: + printf("atx_header (level=%d)\n", b->attributes.header_level); + print_inlines(b->inline_content, indent + 2); + break; + case setext_header: + printf("setext_header (level=%d)\n", b->attributes.header_level); + print_inlines(b->inline_content, indent + 2); + break; + case paragraph: + printf("paragraph\n"); + print_inlines(b->inline_content, indent + 2); + break; + case hrule: + printf("hrule\n"); + break; + case indented_code: + printf("indented_code %s\n", format_str(b->string_content)->data); + break; + case fenced_code: + printf("fenced_code length=%d info=%s %s\n", + b->attributes.fenced_code_data.fence_length, + format_str(b->attributes.fenced_code_data.info)->data, + format_str(b->string_content)->data); + break; + case html_block: + printf("html_block %s\n", format_str(b->string_content)->data); + break; + case reference_def: + printf("reference_def\n"); + break; + default: + log_warn("block type %d not implemented\n", b->tag); + break; + } + b = b->next; + } +} + +// Prettyprint an inline list, for debugging. +extern void print_inlines(inl* ils, int indent) +{ + while(ils != NULL) { + /* + // we add 11 extra spaces for the line/column info + for (int i=0; i < 11; i++) { + putchar(' '); + } + putchar('|'); + putchar(' '); + */ + for (int i=0; i < indent; i++) { + putchar(' '); + } + switch(ils->tag) { + case str: + printf("str %s\n", format_str(ils->content.literal)->data); + break; + case linebreak: + printf("linebreak\n"); + break; + case softbreak: + printf("softbreak\n"); + break; + case code: + printf("code %s\n", format_str(ils->content.literal)->data); + break; + case raw_html: + printf("html %s\n", format_str(ils->content.literal)->data); + break; + case entity: + printf("entity %s\n", format_str(ils->content.literal)->data); + break; + case link: + printf("link url=%s title=%s\n", + format_str(ils->content.linkable.url)->data, + format_str(ils->content.linkable.title)->data); + print_inlines(ils->content.linkable.label, indent + 2); + break; + case image: + printf("image url=%s title=%s\n", + format_str(ils->content.linkable.url)->data, + format_str(ils->content.linkable.title)->data); + print_inlines(ils->content.linkable.label, indent + 2); + break; + case strong: + printf("strong\n"); + print_inlines(ils->content.linkable.label, indent + 2); + break; + case emph: + printf("emph\n"); + print_inlines(ils->content.linkable.label, indent + 2); + break; + } + ils = ils->next; + } +} diff --git a/src/scanners.h b/src/scanners.h new file mode 100644 index 0000000000..71e0520535 --- /dev/null +++ b/src/scanners.h @@ -0,0 +1,15 @@ +#include "bstrlib.h" + +int scan_autolink_uri(bstring s, int pos); +int scan_autolink_email(bstring s, int pos); +int scan_html_tag(bstring s, int pos); +int scan_html_block_tag(bstring s, int pos); +int scan_link_url(bstring s, int pos); +int scan_link_title(bstring s, int pos); +int scan_spacechars(bstring s, int pos); +int scan_atx_header_start(bstring s, int pos); +int scan_setext_header_line(bstring s, int pos); +int scan_hrule(bstring s, int pos); +int scan_open_code_fence(bstring s, int pos); +int scan_close_code_fence(bstring s, int pos, int len); +int scan_entity(bstring s, int pos); diff --git a/src/scanners.re b/src/scanners.re new file mode 100644 index 0000000000..f90238d6b9 --- /dev/null +++ b/src/scanners.re @@ -0,0 +1,238 @@ +#include "bstrlib.h" + +/*!re2c + re2c:define:YYCTYPE = "unsigned char"; + re2c:define:YYCURSOR = p; + re2c:define:YYMARKER = marker; + re2c:define:YYCTXMARKER = marker; + re2c:yyfill:enable = 0; + + wordchar = [^\x00-\x20]; + + spacechar = [ \t\n]; + + reg_char = [^\\()\x00-\x20]; + + escaped_char = [\\][!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-]; + + tagname = [A-Za-z][A-Za-z0-9]*; + + blocktagname = 'article'|'header'|'aside'|'hgroup'|'blockquote'|'hr'|'body'|'li'|'br'|'map'|'button'|'object'|'canvas'|'ol'|'caption'|'output'|'col'|'p'|'colgroup'|'pre'|'dd'|'progress'|'div'|'section'|'dl'|'table'|'td'|'dt'|'tbody'|'embed'|'textarea'|'fieldset'|'tfoot'|'figcaption'|'th'|'figure'|'thead'|'footer'|'footer'|'tr'|'form'|'ul'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'video'|'script'|'style'; + + attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; + + unquotedvalue = [^\"'=<>`\x00]+; + singlequotedvalue = ['][^'\x00]*[']; + doublequotedvalue = [\"][^\"\x00]*[\"]; + + attributevalue = unquotedvalue | singlequotedvalue | doublequotedvalue; + + attributevaluespec = spacechar* [=] spacechar* attributevalue; + + attribute = spacechar+ attributename attributevaluespec?; + + opentag = tagname attribute* spacechar* [/]? [>]; + closetag = [/] tagname spacechar* [>]; + + htmlcomment = "!--" ([^-\x00]+ | [-][^-\x00]+)* "-->"; + + processinginstruction = "?" ([^?>\x00]+ | [?][^>\x00])* "?>"; + + declaration = "!" [A-Z]+ spacechar+ [^>\x00]* ">"; + + cdata = "![CDATA[" ([^\]\x00]+ | "]" [^\]\x00] | "]]" [^>\x00])* "]]>"; + + htmltag = opentag | closetag | htmlcomment | processinginstruction | + declaration | cdata; + + in_parens_nosp = [(] (reg_char|escaped_char)* [)]; + + in_double_quotes = ["] (escaped_char|[^"\x00])* ["]; + in_single_quotes = ['] (escaped_char|[^'\x00])* [']; + in_parens = [(] (escaped_char|[^)\x00])* [)]; + + scheme = 'coap'|'doi'|'javascript'|'aaa'|'aaas'|'about'|'acap'|'cap'|'cid'|'crid'|'data'|'dav'|'dict'|'dns'|'file'|'ftp'|'geo'|'go'|'gopher'|'h323'|'http'|'https'|'iax'|'icap'|'im'|'imap'|'info'|'ipp'|'iris'|'iris.beep'|'iris.xpc'|'iris.xpcs'|'iris.lwz'|'ldap'|'mailto'|'mid'|'msrp'|'msrps'|'mtqp'|'mupdate'|'news'|'nfs'|'ni'|'nih'|'nntp'|'opaquelocktoken'|'pop'|'pres'|'rtsp'|'service'|'session'|'shttp'|'sieve'|'sip'|'sips'|'sms'|'snmp'|'soap.beep'|'soap.beeps'|'tag'|'tel'|'telnet'|'tftp'|'thismessage'|'tn3270'|'tip'|'tv'|'urn'|'vemmi'|'ws'|'wss'|'xcon'|'xcon-userid'|'xmlrpc.beep'|'xmlrpc.beeps'|'xmpp'|'z39.50r'|'z39.50s'|'adiumxtra'|'afp'|'afs'|'aim'|'apt'|'attachment'|'aw'|'beshare'|'bitcoin'|'bolo'|'callto'|'chrome'|'chrome-extension'|'com-eventbrite-attendee'|'content'|'cvs'|'dlna-playsingle'|'dlna-playcontainer'|'dtn'|'dvb'|'ed2k'|'facetime'|'feed'|'finger'|'fish'|'gg'|'git'|'gizmoproject'|'gtalk'|'hcp'|'icon'|'ipn'|'irc'|'irc6'|'ircs'|'itms'|'jar'|'jms'|'keyparc'|'lastfm'|'ldaps'|'magnet'|'maps'|'market'|'message'|'mms'|'ms-help'|'msnim'|'mumble'|'mvn'|'notes'|'oid'|'palm'|'paparazzi'|'platform'|'proxy'|'psyc'|'query'|'res'|'resource'|'rmi'|'rsync'|'rtmp'|'secondlife'|'sftp'|'sgn'|'skype'|'smb'|'soldat'|'spotify'|'ssh'|'steam'|'svn'|'teamspeak'|'things'|'udp'|'unreal'|'ut2004'|'ventrilo'|'view-source'|'webcal'|'wtai'|'wyciwyg'|'xfire'|'xri'|'ymsgr'; +*/ + +// Try to match URI autolink after first <, returning number of chars matched. +extern int scan_autolink_uri(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + scheme [:]([^\x00-\x20<>\\]|escaped_char)*[>] { return (p - start); } + .? { return 0; } +*/ +} + +// Try to match email autolink after first <, returning num of chars matched. +extern int scan_autolink_email(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+ + [@] + [a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? + ([.][a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)* + [>] { return (p - start); } + .? { return 0; } +*/ +} + +// Try to match an HTML tag after first <, returning num of chars matched. +extern int scan_html_tag(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + htmltag { return (p - start); } + .? { return 0; } +*/ +} + +// Try to match an HTML block tag including first <, +// returning num of chars matched. +extern int scan_html_block_tag(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [<] [/] blocktagname (spacechar | [>]) { return (p - start); } + [<] blocktagname (spacechar | [/>]) { return (p - start); } + [<] [!?] { return (p - start); } + .? { return 0; } +*/ +} + +// Try to match a URL in a link or reference, return number of chars matched. +// This may optionally be contained in <..>; otherwise +// whitespace and unbalanced right parentheses aren't allowed. +// Newlines aren't ever allowed. +extern int scan_link_url(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [ \n]* [<] ([^<>\n\\\x00] | escaped_char | [\\])* [>] { return (p - start); } + [ \n]* (reg_char+ | escaped_char | in_parens_nosp)* { return (p - start); } + .? { return 0; } +*/ +} + +// Try to match a link title (in single quotes, in double quotes, or +// in parentheses), returning number of chars matched. Allow one +// level of internal nesting (quotes within quotes). +extern int scan_link_title(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + ["] (escaped_char|[^"\x00])* ["] { return (p - start); } + ['] (escaped_char|[^'\x00])* ['] { return (p - start); } + [(] (escaped_char|[^)\x00])* [)] { return (p - start); } + .? { return 0; } +*/ +} + +// Match space characters, including newlines. +extern int scan_spacechars(bstring s, int pos) +{ + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [ \t\n]* { return (p - start); } + . { return 0; } +*/ +} + +// Match ATX header start. +extern int scan_atx_header_start(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [#]{1,6} ([ ]+|[\n]) { return (p - start); } + .? { return 0; } +*/ +} + +// Match sexext header line. Return 1 for level-1 header, +// 2 for level-2, 0 for no match. +extern int scan_setext_header_line(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); +/*!re2c + [=]+ [ ]* [\n] { return 1; } + [-]+ [ ]* [\n] { return 2; } + .? { return 0; } +*/ +} + +// Scan a horizontal rule line: "...three or more hyphens, asterisks, +// or underscores on a line by themselves. If you wish, you may use +// spaces between the hyphens or asterisks." +extern int scan_hrule(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + ([*][ ]*){3,} [ \t]* [\n] { return (p - start); } + ([_][ ]*){3,} [ \t]* [\n] { return (p - start); } + ([-][ ]*){3,} [ \t]* [\n] { return (p - start); } + .? { return 0; } +*/ +} + +// Scan an opening code fence. +extern int scan_open_code_fence(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [`]{3,} / [^`\n\x00]*[\n] { return (p - start); } + [~]{3,} / [^~\n\x00]*[\n] { return (p - start); } + .? { return 0; } +*/ +} + +// Scan a closing code fence with length at least len. +extern int scan_close_code_fence(bstring s, int pos, int len) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + ([`]{3,} | [~]{3,}) / spacechar* [\n] + { if (p - start > len) { + return (p - start); + } else { + return 0; + } } + .? { return 0; } +*/ +} + +// Scans an entity. +// Returns number of chars matched. +extern int scan_entity(bstring s, int pos) +{ + unsigned char * marker = NULL; + unsigned char * p = &(s->data[pos]); + unsigned char * start = p; +/*!re2c + [&] ([#] ([Xx][A-Fa-f0-9]{1,8}|[0-9]{1,8}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;] + { return (p - start); } + .? { return 0; } +*/ +} diff --git a/src/stmd.h b/src/stmd.h new file mode 100644 index 0000000000..5e34399cfe --- /dev/null +++ b/src/stmd.h @@ -0,0 +1,121 @@ +#include +#include "bstrlib.h" +#include "uthash.h" + +#define VERSION "0.1" +#define CODE_INDENT 4 + +typedef struct Inline { + enum { str, softbreak, linebreak, code, raw_html, entity, + emph, strong, link, image } tag; + union { + bstring literal; + struct Inline* inlines; + struct { struct Inline* label; + bstring url; + bstring title; + } linkable; + } content; + struct Inline* next; +} inl; + +typedef struct Reference { + bstring label; + bstring url; + bstring title; + UT_hash_handle hh; // used by uthash +} reference; + +typedef struct Subject { + bstring buffer; + int pos; + reference** reference_map; + int label_nestlevel; +} subject; + +// Types for blocks + +struct ListData { + enum { bullet, + ordered } list_type; + int marker_offset; + int padding; + int start; + enum { period, + parens } delimiter; + unsigned char bullet_char; + bool tight; +}; + +struct FencedCodeData { + int fence_length; + int fence_offset; + char fence_char; + bstring info; +}; + +typedef struct Block { + enum { document, + block_quote, + list, + list_item, + fenced_code, + indented_code, + html_block, + paragraph, + atx_header, + setext_header, + hrule, + reference_def + } tag; + int start_line; + int start_column; + int end_line; + bool open; + bool last_line_blank; + struct Block* children; + struct Block* last_child; + struct Block* parent; + struct Block* top; + bstring string_content; + inl* inline_content; + union { + struct ListData list_data; + struct FencedCodeData fenced_code_data; + int header_level; + reference** refmap; + } attributes; + struct Block * next; + struct Block * prev; +} block; + +int parse_inline(subject* subj, inl ** last); +inl* parse_inlines(bstring input, reference** refmap); +inl* parse_inlines_while(subject* subj, int (*f)(subject*)); +void free_inlines(inl* e); +int parse_reference(bstring input, reference** refmap); +void free_reference(reference *ref); +void free_reference_map(reference **refmap); +reference* make_reference(bstring label, bstring url, bstring title); +reference* lookup_reference(reference** refmap, bstring label); +void add_reference(reference** refmap, reference* ref); +int unescape(bstring s); + +extern block* make_document(); +extern block* add_child(block* parent, + int block_type, int start_line, int start_column); +void free_blocks(block* e); + +// FOR NOW: +int process_inlines(block* cur, reference** refmap); +int incorporate_line(bstring ln, int line_number, block** curptr); +int finalize(block* b, int line_number); + +void print_inlines(inl* ils, int indent); +void print_blocks(block* blk, int indent); + +int blocks_to_html(block* b, bstring* result, bool tight); +int inlines_to_html(inl* b, bstring* result); + +int bdetab(bstring s, int utf8); + diff --git a/src/utf8.c b/src/utf8.c new file mode 100644 index 0000000000..4bb3b35ae3 --- /dev/null +++ b/src/utf8.c @@ -0,0 +1,106 @@ +#include +#include "bstrlib.h" +#include "debug.h" + +#define advance(s) \ + s++; \ + check(*s >> 6 == 0x02, "UTF-8 decode error on byte %x", *s); + +// Reads a unicode code point from a UTF8-encoded string, and +// puts it in the pointer n. If something illegal +// is encountered, 0xFFFD is emitted. +// Returns a pointer to next position in string, or NULL if no +// more characters remain. +extern unsigned char * from_utf8(unsigned char * s, unsigned int *n) +{ + int x = 0; + + if (*s == 0) { + return NULL; + } else if (*s < 0x80) { + x = *s; + } else if (*s >> 5 == 0x06) { + x = *s & 0x1F; + advance(s); + x = (x << 6) + (*s & 0x3F); + } else if (*s >> 4 == 0x0E) { + x = *s & 0x0F; + advance(s); + x = (x << 6) + (*s & 0x3F); + advance(s); + x = (x << 6) + (*s & 0x3F); + } else if (*s >> 3 == 0x1E) { + x = *s & 0x07; + advance(s); + x = (x << 6) + (*s & 0x3F); + advance(s); + x = (x << 6) + (*s & 0x3F); + advance(s); + x = (x << 6) + (*s & 0x3F); + } else if (*s >> 2 == 0x3E) { + x = *s & 0x03; + advance(s); + x = (x << 6) + (*s & 0x3F); + advance(s); + x = (x << 6) + (*s & 0x3F); + advance(s); + x = (x << 6) + (*s & 0x3F); + advance(s); + x = (x << 6) + (*s & 0x3F); + } else { + log_err("UTF-8 decode error on byte %x", *s); + goto error; + } + *n = x; + s++; + return s; + error: + *n = 0xFFFD; + return s; +} + +// Converts the unicode code point c to UTF-8, +// putting the result in dest. Returns 0 on success, -1 on error. +extern int to_utf8(unsigned int c, bstring dest) +{ + if (c < 0x80) { + bconchar(dest, c); + } else if (c < 0x800) { + bconchar(dest, 192 + c/64); + bconchar(dest, 128 + c%64); + } else if (c - 0xd800u < 0x800) { + goto error; + } else if (c < 0x10000) { + bconchar(dest, 224 + c / 4096); + bconchar(dest, 128 + c /64%64); + bconchar(dest, 128 + c%64); + } else if (c < 0x110000) { + bconchar(dest, 240 + c/262144); + bconchar(dest, 128 + c/4096%64); + bconchar(dest, 128 + c/64%64); + bconchar(dest, 128 + c%64); + } else { + goto error; + } + return 0; +error: + return -1; +} + +#define bufpush(x) \ + check(to_utf8(x, buf) == 0, "UTF-8 encode error on code point %04x", x) + +// Returns the case-folded version of the source string, or NULL on error. +extern bstring case_fold(bstring source) +{ + unsigned char * s = source->data; + unsigned int c = 0; + bstring buf = bfromcstr(""); + while ((s = from_utf8(s, &c))) { +#include "case_fold_switch.c" + } + return buf; +error: + return NULL; +} + diff --git a/src/utf8.h b/src/utf8.h new file mode 100644 index 0000000000..fe59a90903 --- /dev/null +++ b/src/utf8.h @@ -0,0 +1,6 @@ +#include +#include "bstrlib.h" + +extern unsigned char * from_utf8(unsigned char * s, unsigned int *n); +extern int to_utf8(unsigned int c, bstring dest); +extern bstring case_fold(bstring source); diff --git a/src/uthash.h b/src/uthash.h new file mode 100644 index 0000000000..b9bc7e93cc --- /dev/null +++ b/src/uthash.h @@ -0,0 +1,948 @@ +/* +Copyright (c) 2003-2013, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef UTHASH_H +#define UTHASH_H + +#include /* memcmp,strlen */ +#include /* ptrdiff_t */ +#include /* exit() */ + +/* These macros use decltype or the earlier __typeof GNU extension. + As decltype is only available in newer compilers (VS2010 or gcc 4.3+ + when compiling c++ source) this code uses whatever method is needed + or, for VS2008 where neither is available, uses casting workarounds. */ +#ifdef _MSC_VER /* MS compiler */ +#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ +#define DECLTYPE(x) (decltype(x)) +#else /* VS2008 or older (or VS2010 in C mode) */ +#define NO_DECLTYPE +#define DECLTYPE(x) +#endif +#else /* GNU, Sun and other compilers */ +#define DECLTYPE(x) (__typeof(x)) +#endif + +#ifdef NO_DECLTYPE +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + char **_da_dst = (char**)(&(dst)); \ + *_da_dst = (char*)(src); \ +} while(0) +#else +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + (dst) = DECLTYPE(dst)(src); \ +} while(0) +#endif + +/* a number of the hash function use uint32_t which isn't defined on win32 */ +#ifdef _MSC_VER +typedef unsigned int uint32_t; +typedef unsigned char uint8_t; +#else +#include /* uint32_t */ +#endif + +#define UTHASH_VERSION 1.9.8 + +#ifndef uthash_fatal +#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ +#endif +#ifndef uthash_malloc +#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ +#endif +#ifndef uthash_free +#define uthash_free(ptr,sz) free(ptr) /* free fcn */ +#endif + +#ifndef uthash_noexpand_fyi +#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ +#endif +#ifndef uthash_expand_fyi +#define uthash_expand_fyi(tbl) /* can be defined to log expands */ +#endif + +/* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */ +#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */ + +/* calculate the element whose hash handle address is hhe */ +#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) + +#define HASH_FIND(hh,head,keyptr,keylen,out) \ +do { \ + unsigned _hf_bkt,_hf_hashv; \ + out=NULL; \ + if (head) { \ + HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \ + if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \ + HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \ + keyptr,keylen,out); \ + } \ + } \ +} while (0) + +#ifdef HASH_BLOOM +#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM) +#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0) +#define HASH_BLOOM_MAKE(tbl) \ +do { \ + (tbl)->bloom_nbits = HASH_BLOOM; \ + (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ + if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ + memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ + (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ +} while (0) + +#define HASH_BLOOM_FREE(tbl) \ +do { \ + uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ +} while (0) + +#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8))) +#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8))) + +#define HASH_BLOOM_ADD(tbl,hashv) \ + HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) + +#define HASH_BLOOM_TEST(tbl,hashv) \ + HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) + +#else +#define HASH_BLOOM_MAKE(tbl) +#define HASH_BLOOM_FREE(tbl) +#define HASH_BLOOM_ADD(tbl,hashv) +#define HASH_BLOOM_TEST(tbl,hashv) (1) +#define HASH_BLOOM_BYTELEN 0 +#endif + +#define HASH_MAKE_TABLE(hh,head) \ +do { \ + (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ + sizeof(UT_hash_table)); \ + if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ + memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ + (head)->hh.tbl->tail = &((head)->hh); \ + (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ + (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ + (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ + (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ + memset((head)->hh.tbl->buckets, 0, \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_MAKE((head)->hh.tbl); \ + (head)->hh.tbl->signature = HASH_SIGNATURE; \ +} while(0) + +#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ + HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add) + +#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ +do { \ + replaced=NULL; \ + HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \ + if (replaced!=NULL) { \ + HASH_DELETE(hh,head,replaced); \ + }; \ + HASH_ADD(hh,head,fieldname,keylen_in,add); \ +} while(0) + +#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ +do { \ + unsigned _ha_bkt; \ + (add)->hh.next = NULL; \ + (add)->hh.key = (char*)(keyptr); \ + (add)->hh.keylen = (unsigned)(keylen_in); \ + if (!(head)) { \ + head = (add); \ + (head)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh,head); \ + } else { \ + (head)->hh.tbl->tail->next = (add); \ + (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ + (head)->hh.tbl->tail = &((add)->hh); \ + } \ + (head)->hh.tbl->num_items++; \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \ + (add)->hh.hashv, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \ + HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \ + HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \ + HASH_FSCK(hh,head); \ +} while(0) + +#define HASH_TO_BKT( hashv, num_bkts, bkt ) \ +do { \ + bkt = ((hashv) & ((num_bkts) - 1)); \ +} while(0) + +/* delete "delptr" from the hash table. + * "the usual" patch-up process for the app-order doubly-linked-list. + * The use of _hd_hh_del below deserves special explanation. + * These used to be expressed using (delptr) but that led to a bug + * if someone used the same symbol for the head and deletee, like + * HASH_DELETE(hh,users,users); + * We want that to work, but by changing the head (users) below + * we were forfeiting our ability to further refer to the deletee (users) + * in the patch-up process. Solution: use scratch space to + * copy the deletee pointer, then the latter references are via that + * scratch pointer rather than through the repointed (users) symbol. + */ +#define HASH_DELETE(hh,head,delptr) \ +do { \ + unsigned _hd_bkt; \ + struct UT_hash_handle *_hd_hh_del; \ + if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + head = NULL; \ + } else { \ + _hd_hh_del = &((delptr)->hh); \ + if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ + (head)->hh.tbl->tail = \ + (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ + (head)->hh.tbl->hho); \ + } \ + if ((delptr)->hh.prev) { \ + ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ + (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ + } else { \ + DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ + } \ + if (_hd_hh_del->next) { \ + ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \ + (head)->hh.tbl->hho))->prev = \ + _hd_hh_del->prev; \ + } \ + HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ + (head)->hh.tbl->num_items--; \ + } \ + HASH_FSCK(hh,head); \ +} while (0) + + +/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ +#define HASH_FIND_STR(head,findstr,out) \ + HASH_FIND(hh,head,findstr,strlen(findstr),out) +#define HASH_ADD_STR(head,strfield,add) \ + HASH_ADD(hh,head,strfield,strlen(add->strfield),add) +#define HASH_REPLACE_STR(head,strfield,add,replaced) \ + HASH_REPLACE(hh,head,strfield,strlen(add->strfield),add,replaced) +#define HASH_FIND_INT(head,findint,out) \ + HASH_FIND(hh,head,findint,sizeof(int),out) +#define HASH_ADD_INT(head,intfield,add) \ + HASH_ADD(hh,head,intfield,sizeof(int),add) +#define HASH_REPLACE_INT(head,intfield,add,replaced) \ + HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced) +#define HASH_FIND_PTR(head,findptr,out) \ + HASH_FIND(hh,head,findptr,sizeof(void *),out) +#define HASH_ADD_PTR(head,ptrfield,add) \ + HASH_ADD(hh,head,ptrfield,sizeof(void *),add) +#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \ + HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced) +#define HASH_DEL(head,delptr) \ + HASH_DELETE(hh,head,delptr) + +/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. + * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. + */ +#ifdef HASH_DEBUG +#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) +#define HASH_FSCK(hh,head) \ +do { \ + unsigned _bkt_i; \ + unsigned _count, _bkt_count; \ + char *_prev; \ + struct UT_hash_handle *_thh; \ + if (head) { \ + _count = 0; \ + for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ + _bkt_count = 0; \ + _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ + _prev = NULL; \ + while (_thh) { \ + if (_prev != (char*)(_thh->hh_prev)) { \ + HASH_OOPS("invalid hh_prev %p, actual %p\n", \ + _thh->hh_prev, _prev ); \ + } \ + _bkt_count++; \ + _prev = (char*)(_thh); \ + _thh = _thh->hh_next; \ + } \ + _count += _bkt_count; \ + if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ + HASH_OOPS("invalid bucket count %d, actual %d\n", \ + (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ + } \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("invalid hh item count %d, actual %d\n", \ + (head)->hh.tbl->num_items, _count ); \ + } \ + /* traverse hh in app order; check next/prev integrity, count */ \ + _count = 0; \ + _prev = NULL; \ + _thh = &(head)->hh; \ + while (_thh) { \ + _count++; \ + if (_prev !=(char*)(_thh->prev)) { \ + HASH_OOPS("invalid prev %p, actual %p\n", \ + _thh->prev, _prev ); \ + } \ + _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ + _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ + (head)->hh.tbl->hho) : NULL ); \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("invalid app item count %d, actual %d\n", \ + (head)->hh.tbl->num_items, _count ); \ + } \ + } \ +} while (0) +#else +#define HASH_FSCK(hh,head) +#endif + +/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to + * the descriptor to which this macro is defined for tuning the hash function. + * The app can #include to get the prototype for write(2). */ +#ifdef HASH_EMIT_KEYS +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ +do { \ + unsigned _klen = fieldlen; \ + write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ + write(HASH_EMIT_KEYS, keyptr, fieldlen); \ +} while (0) +#else +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) +#endif + +/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ +#ifdef HASH_FUNCTION +#define HASH_FCN HASH_FUNCTION +#else +#define HASH_FCN HASH_JEN +#endif + +/* The Bernstein hash function, used in Perl prior to v5.6 */ +#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _hb_keylen=keylen; \ + char *_hb_key=(char*)(key); \ + (hashv) = 0; \ + while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \ + bkt = (hashv) & (num_bkts-1); \ +} while (0) + + +/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at + * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ +#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _sx_i; \ + char *_hs_key=(char*)(key); \ + hashv = 0; \ + for(_sx_i=0; _sx_i < keylen; _sx_i++) \ + hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ + bkt = hashv & (num_bkts-1); \ +} while (0) + +#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _fn_i; \ + char *_hf_key=(char*)(key); \ + hashv = 2166136261UL; \ + for(_fn_i=0; _fn_i < keylen; _fn_i++) \ + hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _ho_i; \ + char *_ho_key=(char*)(key); \ + hashv = 0; \ + for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ + hashv += _ho_key[_ho_i]; \ + hashv += (hashv << 10); \ + hashv ^= (hashv >> 6); \ + } \ + hashv += (hashv << 3); \ + hashv ^= (hashv >> 11); \ + hashv += (hashv << 15); \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#define HASH_JEN_MIX(a,b,c) \ +do { \ + a -= b; a -= c; a ^= ( c >> 13 ); \ + b -= c; b -= a; b ^= ( a << 8 ); \ + c -= a; c -= b; c ^= ( b >> 13 ); \ + a -= b; a -= c; a ^= ( c >> 12 ); \ + b -= c; b -= a; b ^= ( a << 16 ); \ + c -= a; c -= b; c ^= ( b >> 5 ); \ + a -= b; a -= c; a ^= ( c >> 3 ); \ + b -= c; b -= a; b ^= ( a << 10 ); \ + c -= a; c -= b; c ^= ( b >> 15 ); \ +} while (0) + +#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _hj_i,_hj_j,_hj_k; \ + unsigned char *_hj_key=(unsigned char*)(key); \ + hashv = 0xfeedbeef; \ + _hj_i = _hj_j = 0x9e3779b9; \ + _hj_k = (unsigned)(keylen); \ + while (_hj_k >= 12) { \ + _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ + + ( (unsigned)_hj_key[2] << 16 ) \ + + ( (unsigned)_hj_key[3] << 24 ) ); \ + _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ + + ( (unsigned)_hj_key[6] << 16 ) \ + + ( (unsigned)_hj_key[7] << 24 ) ); \ + hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ + + ( (unsigned)_hj_key[10] << 16 ) \ + + ( (unsigned)_hj_key[11] << 24 ) ); \ + \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + \ + _hj_key += 12; \ + _hj_k -= 12; \ + } \ + hashv += keylen; \ + switch ( _hj_k ) { \ + case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \ + case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \ + case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \ + case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \ + case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \ + case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \ + case 5: _hj_j += _hj_key[4]; \ + case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \ + case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \ + case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \ + case 1: _hj_i += _hj_key[0]; \ + } \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +/* The Paul Hsieh hash function */ +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +#define get16bits(d) (*((const uint16_t *) (d))) +#endif + +#if !defined (get16bits) +#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif +#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned char *_sfh_key=(unsigned char*)(key); \ + uint32_t _sfh_tmp, _sfh_len = keylen; \ + \ + int _sfh_rem = _sfh_len & 3; \ + _sfh_len >>= 2; \ + hashv = 0xcafebabe; \ + \ + /* Main loop */ \ + for (;_sfh_len > 0; _sfh_len--) { \ + hashv += get16bits (_sfh_key); \ + _sfh_tmp = (uint32_t)(get16bits (_sfh_key+2)) << 11 ^ hashv; \ + hashv = (hashv << 16) ^ _sfh_tmp; \ + _sfh_key += 2*sizeof (uint16_t); \ + hashv += hashv >> 11; \ + } \ + \ + /* Handle end cases */ \ + switch (_sfh_rem) { \ + case 3: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 16; \ + hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18); \ + hashv += hashv >> 11; \ + break; \ + case 2: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 11; \ + hashv += hashv >> 17; \ + break; \ + case 1: hashv += *_sfh_key; \ + hashv ^= hashv << 10; \ + hashv += hashv >> 1; \ + } \ + \ + /* Force "avalanching" of final 127 bits */ \ + hashv ^= hashv << 3; \ + hashv += hashv >> 5; \ + hashv ^= hashv << 4; \ + hashv += hashv >> 17; \ + hashv ^= hashv << 25; \ + hashv += hashv >> 6; \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#ifdef HASH_USING_NO_STRICT_ALIASING +/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. + * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. + * MurmurHash uses the faster approach only on CPU's where we know it's safe. + * + * Note the preprocessor built-in defines can be emitted using: + * + * gcc -m64 -dM -E - < /dev/null (on gcc) + * cc -## a.c (where a.c is a simple test file) (Sun Studio) + */ +#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) +#define MUR_GETBLOCK(p,i) p[i] +#else /* non intel */ +#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0) +#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1) +#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2) +#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3) +#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) +#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) +#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) +#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) +#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) +#else /* assume little endian non-intel */ +#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) +#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) +#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) +#endif +#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ + (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ + (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ + MUR_ONE_THREE(p)))) +#endif +#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) +#define MUR_FMIX(_h) \ +do { \ + _h ^= _h >> 16; \ + _h *= 0x85ebca6b; \ + _h ^= _h >> 13; \ + _h *= 0xc2b2ae35l; \ + _h ^= _h >> 16; \ +} while(0) + +#define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \ +do { \ + const uint8_t *_mur_data = (const uint8_t*)(key); \ + const int _mur_nblocks = (keylen) / 4; \ + uint32_t _mur_h1 = 0xf88D5353; \ + uint32_t _mur_c1 = 0xcc9e2d51; \ + uint32_t _mur_c2 = 0x1b873593; \ + uint32_t _mur_k1 = 0; \ + const uint8_t *_mur_tail; \ + const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \ + int _mur_i; \ + for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \ + _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ + _mur_k1 *= _mur_c1; \ + _mur_k1 = MUR_ROTL32(_mur_k1,15); \ + _mur_k1 *= _mur_c2; \ + \ + _mur_h1 ^= _mur_k1; \ + _mur_h1 = MUR_ROTL32(_mur_h1,13); \ + _mur_h1 = _mur_h1*5+0xe6546b64; \ + } \ + _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \ + _mur_k1=0; \ + switch((keylen) & 3) { \ + case 3: _mur_k1 ^= _mur_tail[2] << 16; \ + case 2: _mur_k1 ^= _mur_tail[1] << 8; \ + case 1: _mur_k1 ^= _mur_tail[0]; \ + _mur_k1 *= _mur_c1; \ + _mur_k1 = MUR_ROTL32(_mur_k1,15); \ + _mur_k1 *= _mur_c2; \ + _mur_h1 ^= _mur_k1; \ + } \ + _mur_h1 ^= (keylen); \ + MUR_FMIX(_mur_h1); \ + hashv = _mur_h1; \ + bkt = hashv & (num_bkts-1); \ +} while(0) +#endif /* HASH_USING_NO_STRICT_ALIASING */ + +/* key comparison function; return 0 if keys equal */ +#define HASH_KEYCMP(a,b,len) memcmp(a,b,len) + +/* iterate over items in a known bucket to find desired item */ +#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \ +do { \ + if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \ + else out=NULL; \ + while (out) { \ + if ((out)->hh.keylen == keylen_in) { \ + if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \ + } \ + if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \ + else out = NULL; \ + } \ +} while(0) + +/* add an item to a bucket */ +#define HASH_ADD_TO_BKT(head,addhh) \ +do { \ + head.count++; \ + (addhh)->hh_next = head.hh_head; \ + (addhh)->hh_prev = NULL; \ + if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \ + (head).hh_head=addhh; \ + if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \ + && (addhh)->tbl->noexpand != 1) { \ + HASH_EXPAND_BUCKETS((addhh)->tbl); \ + } \ +} while(0) + +/* remove an item from a given bucket */ +#define HASH_DEL_IN_BKT(hh,head,hh_del) \ + (head).count--; \ + if ((head).hh_head == hh_del) { \ + (head).hh_head = hh_del->hh_next; \ + } \ + if (hh_del->hh_prev) { \ + hh_del->hh_prev->hh_next = hh_del->hh_next; \ + } \ + if (hh_del->hh_next) { \ + hh_del->hh_next->hh_prev = hh_del->hh_prev; \ + } + +/* Bucket expansion has the effect of doubling the number of buckets + * and redistributing the items into the new buckets. Ideally the + * items will distribute more or less evenly into the new buckets + * (the extent to which this is true is a measure of the quality of + * the hash function as it applies to the key domain). + * + * With the items distributed into more buckets, the chain length + * (item count) in each bucket is reduced. Thus by expanding buckets + * the hash keeps a bound on the chain length. This bounded chain + * length is the essence of how a hash provides constant time lookup. + * + * The calculation of tbl->ideal_chain_maxlen below deserves some + * explanation. First, keep in mind that we're calculating the ideal + * maximum chain length based on the *new* (doubled) bucket count. + * In fractions this is just n/b (n=number of items,b=new num buckets). + * Since the ideal chain length is an integer, we want to calculate + * ceil(n/b). We don't depend on floating point arithmetic in this + * hash, so to calculate ceil(n/b) with integers we could write + * + * ceil(n/b) = (n/b) + ((n%b)?1:0) + * + * and in fact a previous version of this hash did just that. + * But now we have improved things a bit by recognizing that b is + * always a power of two. We keep its base 2 log handy (call it lb), + * so now we can write this with a bit shift and logical AND: + * + * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) + * + */ +#define HASH_EXPAND_BUCKETS(tbl) \ +do { \ + unsigned _he_bkt; \ + unsigned _he_bkt_i; \ + struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ + UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ + _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ + 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ + memset(_he_new_buckets, 0, \ + 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + tbl->ideal_chain_maxlen = \ + (tbl->num_items >> (tbl->log2_num_buckets+1)) + \ + ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \ + tbl->nonideal_items = 0; \ + for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ + { \ + _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ + while (_he_thh) { \ + _he_hh_nxt = _he_thh->hh_next; \ + HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \ + _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ + if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ + tbl->nonideal_items++; \ + _he_newbkt->expand_mult = _he_newbkt->count / \ + tbl->ideal_chain_maxlen; \ + } \ + _he_thh->hh_prev = NULL; \ + _he_thh->hh_next = _he_newbkt->hh_head; \ + if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \ + _he_thh; \ + _he_newbkt->hh_head = _he_thh; \ + _he_thh = _he_hh_nxt; \ + } \ + } \ + uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ + tbl->num_buckets *= 2; \ + tbl->log2_num_buckets++; \ + tbl->buckets = _he_new_buckets; \ + tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ + (tbl->ineff_expands+1) : 0; \ + if (tbl->ineff_expands > 1) { \ + tbl->noexpand=1; \ + uthash_noexpand_fyi(tbl); \ + } \ + uthash_expand_fyi(tbl); \ +} while(0) + + +/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ +/* Note that HASH_SORT assumes the hash handle name to be hh. + * HASH_SRT was added to allow the hash handle name to be passed in. */ +#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) +#define HASH_SRT(hh,head,cmpfcn) \ +do { \ + unsigned _hs_i; \ + unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ + struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ + if (head) { \ + _hs_insize = 1; \ + _hs_looping = 1; \ + _hs_list = &((head)->hh); \ + while (_hs_looping) { \ + _hs_p = _hs_list; \ + _hs_list = NULL; \ + _hs_tail = NULL; \ + _hs_nmerges = 0; \ + while (_hs_p) { \ + _hs_nmerges++; \ + _hs_q = _hs_p; \ + _hs_psize = 0; \ + for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ + _hs_psize++; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + if (! (_hs_q) ) break; \ + } \ + _hs_qsize = _hs_insize; \ + while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \ + if (_hs_psize == 0) { \ + _hs_e = _hs_q; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_qsize--; \ + } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \ + _hs_e = _hs_p; \ + if (_hs_p){ \ + _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ + ((void*)((char*)(_hs_p->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + } \ + _hs_psize--; \ + } else if (( \ + cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ + ) <= 0) { \ + _hs_e = _hs_p; \ + if (_hs_p){ \ + _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ + ((void*)((char*)(_hs_p->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + } \ + _hs_psize--; \ + } else { \ + _hs_e = _hs_q; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_qsize--; \ + } \ + if ( _hs_tail ) { \ + _hs_tail->next = ((_hs_e) ? \ + ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ + } else { \ + _hs_list = _hs_e; \ + } \ + if (_hs_e) { \ + _hs_e->prev = ((_hs_tail) ? \ + ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ + } \ + _hs_tail = _hs_e; \ + } \ + _hs_p = _hs_q; \ + } \ + if (_hs_tail){ \ + _hs_tail->next = NULL; \ + } \ + if ( _hs_nmerges <= 1 ) { \ + _hs_looping=0; \ + (head)->hh.tbl->tail = _hs_tail; \ + DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ + } \ + _hs_insize *= 2; \ + } \ + HASH_FSCK(hh,head); \ + } \ +} while (0) + +/* This function selects items from one hash into another hash. + * The end result is that the selected items have dual presence + * in both hashes. There is no copy of the items made; rather + * they are added into the new hash through a secondary hash + * hash handle that must be present in the structure. */ +#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ +do { \ + unsigned _src_bkt, _dst_bkt; \ + void *_last_elt=NULL, *_elt; \ + UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ + ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ + if (src) { \ + for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ + for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ + _src_hh; \ + _src_hh = _src_hh->hh_next) { \ + _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ + if (cond(_elt)) { \ + _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ + _dst_hh->key = _src_hh->key; \ + _dst_hh->keylen = _src_hh->keylen; \ + _dst_hh->hashv = _src_hh->hashv; \ + _dst_hh->prev = _last_elt; \ + _dst_hh->next = NULL; \ + if (_last_elt_hh) { _last_elt_hh->next = _elt; } \ + if (!dst) { \ + DECLTYPE_ASSIGN(dst,_elt); \ + HASH_MAKE_TABLE(hh_dst,dst); \ + } else { \ + _dst_hh->tbl = (dst)->hh_dst.tbl; \ + } \ + HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ + HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ + (dst)->hh_dst.tbl->num_items++; \ + _last_elt = _elt; \ + _last_elt_hh = _dst_hh; \ + } \ + } \ + } \ + } \ + HASH_FSCK(hh_dst,dst); \ +} while (0) + +#define HASH_CLEAR(hh,head) \ +do { \ + if (head) { \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head)=NULL; \ + } \ +} while(0) + +#define HASH_OVERHEAD(hh,head) \ + (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \ + ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \ + (sizeof(UT_hash_table)) + \ + (HASH_BLOOM_BYTELEN))) + +#ifdef NO_DECLTYPE +#define HASH_ITER(hh,head,el,tmp) \ +for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \ + el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) +#else +#define HASH_ITER(hh,head,el,tmp) \ +for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \ + el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL)) +#endif + +/* obtain a count of items in the hash */ +#define HASH_COUNT(head) HASH_CNT(hh,head) +#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0) + +typedef struct UT_hash_bucket { + struct UT_hash_handle *hh_head; + unsigned count; + + /* expand_mult is normally set to 0. In this situation, the max chain length + * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If + * the bucket's chain exceeds this length, bucket expansion is triggered). + * However, setting expand_mult to a non-zero value delays bucket expansion + * (that would be triggered by additions to this particular bucket) + * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. + * (The multiplier is simply expand_mult+1). The whole idea of this + * multiplier is to reduce bucket expansions, since they are expensive, in + * situations where we know that a particular bucket tends to be overused. + * It is better to let its chain length grow to a longer yet-still-bounded + * value, than to do an O(n) bucket expansion too often. + */ + unsigned expand_mult; + +} UT_hash_bucket; + +/* random signature used only to find hash tables in external analysis */ +#define HASH_SIGNATURE 0xa0111fe1 +#define HASH_BLOOM_SIGNATURE 0xb12220f2 + +typedef struct UT_hash_table { + UT_hash_bucket *buckets; + unsigned num_buckets, log2_num_buckets; + unsigned num_items; + struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ + ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ + + /* in an ideal situation (all buckets used equally), no bucket would have + * more than ceil(#items/#buckets) items. that's the ideal chain length. */ + unsigned ideal_chain_maxlen; + + /* nonideal_items is the number of items in the hash whose chain position + * exceeds the ideal chain maxlen. these items pay the penalty for an uneven + * hash distribution; reaching them in a chain traversal takes >ideal steps */ + unsigned nonideal_items; + + /* ineffective expands occur when a bucket doubling was performed, but + * afterward, more than half the items in the hash had nonideal chain + * positions. If this happens on two consecutive expansions we inhibit any + * further expansion, as it's not helping; this happens when the hash + * function isn't a good fit for the key domain. When expansion is inhibited + * the hash will still work, albeit no longer in constant time. */ + unsigned ineff_expands, noexpand; + + uint32_t signature; /* used only to find hash tables in external analysis */ +#ifdef HASH_BLOOM + uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ + uint8_t *bloom_bv; + char bloom_nbits; +#endif + +} UT_hash_table; + +typedef struct UT_hash_handle { + struct UT_hash_table *tbl; + void *prev; /* prev element in app order */ + void *next; /* next element in app order */ + struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ + struct UT_hash_handle *hh_next; /* next hh in bucket order */ + void *key; /* ptr to enclosing struct's key */ + unsigned keylen; /* enclosing struct's key len */ + unsigned hashv; /* result of hash-fcn(key) */ +} UT_hash_handle; + +#endif /* UTHASH_H */ diff --git a/template.html b/template.html new file mode 100644 index 0000000000..2286c6892d --- /dev/null +++ b/template.html @@ -0,0 +1,66 @@ + + + + +$title$ + + + +

    $title$

    +
    Version $version$ ($date$)
    +
    +$for(author)$$author$$sep$; $endfor$ +
    +
    +$toc$ +
    +$body$ + + diff --git a/template.tex b/template.tex new file mode 100644 index 0000000000..d083b7234a --- /dev/null +++ b/template.tex @@ -0,0 +1,229 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} +$if(fontfamily)$ +\usepackage{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex + \ifxetex + \usepackage{mathspec} + \usepackage{xltxtra,xunicode} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} + \newcommand{\euro}{€} +$if(mainfont)$ + \setmainfont{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi]{$monofont$} +$endif$ +$if(mathfont)$ + \setmathfont(Digits,Latin,Greek){$mathfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{\usepackage{microtype}}{} +\usepackage[margin=1in]{geometry} +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage{biblatex} +$if(biblio-files)$ +\bibliography{$biblio-files$} +$endif$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +\usepackage{fancyvrb} +\usepackage{color,framed} +\newcommand{\VerbBar}{|} +\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\small} +% Add ',fontsize=\small' for more characters per line +\definecolor{shadecolor}{gray}{1} +\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}} +\newcommand{\NormalTok}[1]{{#1}} +\let\KeywordTok\NormalTok +\let\DataTypeTok\NormalTok +\let\DecValTok\NormalTok +\let\BaseNTok\NormalTok +\let\FloatTok\NormalTok +\let\CharTok\NormalTok +\let\StringTok\NormalTok +\let\CommentTok\NormalTok +\let\OtherTok\NormalTok +\let\AlertTok\NormalTok +\let\FunctionTok\NormalTok +\let\RegionMarkerTok\NormalTok +\let\ErrorTok\NormalTok +%\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} +%\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} +%\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +%\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +%\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +%\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +%\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +%\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} +%\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} +%\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} +%\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} +%\newcommand{\RegionMarkerTok}[1]{{#1}} +%\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +\ifxetex + \usepackage[setpagesize=false, % page size defined by xetex + unicode=false, % unicode breaks when used with xetex + xetex]{hyperref} +\else + \usepackage[unicode=true]{hyperref} +\fi +\hypersetup{breaklinks=true, + bookmarks=true, + pdfauthor={$author-meta$}, + pdftitle={$title-meta$}, + colorlinks=true, + citecolor=$if(citecolor)$$citecolor$$else$blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, + linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, + pdfborder={0 0 0}} +\urlstyle{same} % don't use monospace font for urls +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +\setlength{\emergencystretch}{3em} % prevent overfull lines +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(lang)$ +\ifxetex + \usepackage{polyglossia} + \setmainlanguage{$mainlang$} +\else + \usepackage[$lang$]{babel} +\fi +$endif$ + +\usepackage{titlesec} +\titleformat{\chapter}[hang]{\Huge\bfseries}{\thechapter\ }{0pt}{\Huge\bfseries} + +\usepackage{fancyhdr} +\pagestyle{fancy} +\pagenumbering{arabic} +\lhead{\itshape $title$} +\chead{} +\rhead{\itshape{\nouppercase{\rightmark}}} +\lfoot{v$version$ ($date$)} +\cfoot{} +\rfoot{\thepage} + +$if(title)$ +\title{$title$$if(subtitle)$\\\vspace{0.5em}{\large $subtitle$}$endif$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +\date{$date$} +$for(header-includes)$ +$header-includes$ +$endfor$ + +\begin{document} +$if(title)$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +\hypersetup{linkcolor=black} +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$body$ + +$if(natbib)$ +$if(biblio-files)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$biblio-files$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} -- cgit 0.0.5-2-1-g0f52 From 4051f2ec7d86ff2de1dc5f1015e9c569048aa1c0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 21 Jul 2014 22:35:07 -0700 Subject: Added ansi so we don't need to install anything to run testjs. --- js/ansi/ansi.js | 405 ++++++++++++++++++++++++++++++++++++++++++++++++++++ js/ansi/newlines.js | 71 +++++++++ js/test.js | 2 +- 3 files changed, 477 insertions(+), 1 deletion(-) create mode 100644 js/ansi/ansi.js create mode 100644 js/ansi/newlines.js diff --git a/js/ansi/ansi.js b/js/ansi/ansi.js new file mode 100644 index 0000000000..52fc8ec8be --- /dev/null +++ b/js/ansi/ansi.js @@ -0,0 +1,405 @@ + +/** + * References: + * + * - http://en.wikipedia.org/wiki/ANSI_escape_code + * - http://www.termsys.demon.co.uk/vtansi.htm + * + */ + +/** + * Module dependencies. + */ + +var emitNewlineEvents = require('./newlines') + , prefix = '\x1b[' // For all escape codes + , suffix = 'm' // Only for color codes + +/** + * The ANSI escape sequences. + */ + +var codes = { + up: 'A' + , down: 'B' + , forward: 'C' + , back: 'D' + , nextLine: 'E' + , previousLine: 'F' + , horizontalAbsolute: 'G' + , eraseData: 'J' + , eraseLine: 'K' + , scrollUp: 'S' + , scrollDown: 'T' + , savePosition: 's' + , restorePosition: 'u' + , queryPosition: '6n' + , hide: '?25l' + , show: '?25h' +} + +/** + * Rendering ANSI codes. + */ + +var styles = { + bold: 1 + , italic: 3 + , underline: 4 + , inverse: 7 +} + +/** + * The negating ANSI code for the rendering modes. + */ + +var reset = { + bold: 22 + , italic: 23 + , underline: 24 + , inverse: 27 +} + +/** + * The standard, styleable ANSI colors. + */ + +var colors = { + white: 37 + , black: 30 + , blue: 34 + , cyan: 36 + , green: 32 + , magenta: 35 + , red: 31 + , yellow: 33 + , grey: 90 + , brightBlack: 90 + , brightRed: 91 + , brightGreen: 92 + , brightYellow: 93 + , brightBlue: 94 + , brightMagenta: 95 + , brightCyan: 96 + , brightWhite: 97 +} + + +/** + * Creates a Cursor instance based off the given `writable stream` instance. + */ + +function ansi (stream, options) { + if (stream._ansicursor) { + return stream._ansicursor + } else { + return stream._ansicursor = new Cursor(stream, options) + } +} +module.exports = exports = ansi + +/** + * The `Cursor` class. + */ + +function Cursor (stream, options) { + if (!(this instanceof Cursor)) { + return new Cursor(stream, options) + } + if (typeof stream != 'object' || typeof stream.write != 'function') { + throw new Error('a valid Stream instance must be passed in') + } + + // the stream to use + this.stream = stream + + // when 'enabled' is false then all the functions are no-ops except for write() + this.enabled = options && options.enabled + if (typeof this.enabled === 'undefined') { + this.enabled = stream.isTTY + } + this.enabled = !!this.enabled + + // then `buffering` is true, then `write()` calls are buffered in + // memory until `flush()` is invoked + this.buffering = !!(options && options.buffering) + this._buffer = [] + + // controls the foreground and background colors + this.fg = this.foreground = new Colorer(this, 0) + this.bg = this.background = new Colorer(this, 10) + + // defaults + this.Bold = false + this.Italic = false + this.Underline = false + this.Inverse = false + + // keep track of the number of "newlines" that get encountered + this.newlines = 0 + emitNewlineEvents(stream) + stream.on('newline', function () { + this.newlines++ + }.bind(this)) +} +exports.Cursor = Cursor + +/** + * Helper function that calls `write()` on the underlying Stream. + * Returns `this` instead of the write() return value to keep + * the chaining going. + */ + +Cursor.prototype.write = function (data) { + if (this.buffering) { + this._buffer.push(arguments) + } else { + this.stream.write.apply(this.stream, arguments) + } + return this +} + +/** + * Buffer `write()` calls into memory. + * + * @api public + */ + +Cursor.prototype.buffer = function () { + this.buffering = true + return this +} + +/** + * Write out the in-memory buffer. + * + * @api public + */ + +Cursor.prototype.flush = function () { + this.buffering = false + var str = this._buffer.map(function (args) { + if (args.length != 1) throw new Error('unexpected args length! ' + args.length); + return args[0]; + }).join(''); + this._buffer.splice(0); // empty + this.write(str); + return this +} + + +/** + * The `Colorer` class manages both the background and foreground colors. + */ + +function Colorer (cursor, base) { + this.current = null + this.cursor = cursor + this.base = base +} +exports.Colorer = Colorer + +/** + * Write an ANSI color code, ensuring that the same code doesn't get rewritten. + */ + +Colorer.prototype._setColorCode = function setColorCode (code) { + var c = String(code) + if (this.current === c) return + this.cursor.enabled && this.cursor.write(prefix + c + suffix) + this.current = c + return this +} + + +/** + * Set up the positional ANSI codes. + */ + +Object.keys(codes).forEach(function (name) { + var code = String(codes[name]) + Cursor.prototype[name] = function () { + var c = code + if (arguments.length > 0) { + c = toArray(arguments).map(Math.round).join(';') + code + } + this.enabled && this.write(prefix + c) + return this + } +}) + +/** + * Set up the functions for the rendering ANSI codes. + */ + +Object.keys(styles).forEach(function (style) { + var name = style[0].toUpperCase() + style.substring(1) + , c = styles[style] + , r = reset[style] + + Cursor.prototype[style] = function () { + if (this[name]) return + this.enabled && this.write(prefix + c + suffix) + this[name] = true + return this + } + + Cursor.prototype['reset' + name] = function () { + if (!this[name]) return + this.enabled && this.write(prefix + r + suffix) + this[name] = false + return this + } +}) + +/** + * Setup the functions for the standard colors. + */ + +Object.keys(colors).forEach(function (color) { + var code = colors[color] + + Colorer.prototype[color] = function () { + this._setColorCode(this.base + code) + return this.cursor + } + + Cursor.prototype[color] = function () { + return this.foreground[color]() + } +}) + +/** + * Makes a beep sound! + */ + +Cursor.prototype.beep = function () { + this.enabled && this.write('\x07') + return this +} + +/** + * Moves cursor to specific position + */ + +Cursor.prototype.goto = function (x, y) { + x = x | 0 + y = y | 0 + this.enabled && this.write(prefix + y + ';' + x + 'H') + return this +} + +/** + * Resets the color. + */ + +Colorer.prototype.reset = function () { + this._setColorCode(this.base + 39) + return this.cursor +} + +/** + * Resets all ANSI formatting on the stream. + */ + +Cursor.prototype.reset = function () { + this.enabled && this.write(prefix + '0' + suffix) + this.Bold = false + this.Italic = false + this.Underline = false + this.Inverse = false + this.foreground.current = null + this.background.current = null + return this +} + +/** + * Sets the foreground color with the given RGB values. + * The closest match out of the 216 colors is picked. + */ + +Colorer.prototype.rgb = function (r, g, b) { + var base = this.base + 38 + , code = rgb(r, g, b) + this._setColorCode(base + ';5;' + code) + return this.cursor +} + +/** + * Same as `cursor.fg.rgb(r, g, b)`. + */ + +Cursor.prototype.rgb = function (r, g, b) { + return this.foreground.rgb(r, g, b) +} + +/** + * Accepts CSS color codes for use with ANSI escape codes. + * For example: `#FF000` would be bright red. + */ + +Colorer.prototype.hex = function (color) { + return this.rgb.apply(this, hex(color)) +} + +/** + * Same as `cursor.fg.hex(color)`. + */ + +Cursor.prototype.hex = function (color) { + return this.foreground.hex(color) +} + + +// UTIL FUNCTIONS // + +/** + * Translates a 255 RGB value to a 0-5 ANSI RGV value, + * then returns the single ANSI color code to use. + */ + +function rgb (r, g, b) { + var red = r / 255 * 5 + , green = g / 255 * 5 + , blue = b / 255 * 5 + return rgb5(red, green, blue) +} + +/** + * Turns rgb 0-5 values into a single ANSI color code to use. + */ + +function rgb5 (r, g, b) { + var red = Math.round(r) + , green = Math.round(g) + , blue = Math.round(b) + return 16 + (red*36) + (green*6) + blue +} + +/** + * Accepts a hex CSS color code string (# is optional) and + * translates it into an Array of 3 RGB 0-255 values, which + * can then be used with rgb(). + */ + +function hex (color) { + var c = color[0] === '#' ? color.substring(1) : color + , r = c.substring(0, 2) + , g = c.substring(2, 4) + , b = c.substring(4, 6) + return [parseInt(r, 16), parseInt(g, 16), parseInt(b, 16)] +} + +/** + * Turns an array-like object into a real array. + */ + +function toArray (a) { + var i = 0 + , l = a.length + , rtn = [] + for (; i 0) { + var len = data.length + , i = 0 + // now try to calculate any deltas + if (typeof data == 'string') { + for (; i Date: Mon, 21 Jul 2014 23:02:04 -0700 Subject: Added dingus as js/index.html. --- js/index.html | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 js/index.html diff --git a/js/index.html b/js/index.html new file mode 100644 index 0000000000..7ba5a86bb5 --- /dev/null +++ b/js/index.html @@ -0,0 +1,110 @@ + + + + + stmd.js demo + + + + + + + + +
    +
    +
    +

    stmd.js dingus

    +
    +
    + +
    +
    +

    Parsed in milliseconds.
    + Rendered in milliseconds.

    +
    +
    +
    +
    + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + + -- cgit 0.0.5-2-1-g0f52 From a098f6ac517b8fbe64b286c46f831cd1794acaf1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 22 Jul 2014 10:41:28 -0700 Subject: Added more motivating examples. --- spec.txt | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/spec.txt b/spec.txt index 96721e6e34..b688ef748f 100644 --- a/spec.txt +++ b/spec.txt @@ -44,7 +44,16 @@ questions it does not answer: (John Gruber has also spoken [in favor of requiring the blank lines](http://article.gmane.org/gmane.text.markdown.general/2146).) -3. What is the exact rule for determining when list items get +3. Is a blank line needed before an indented code block? + (`Markdown.pl` requires it, but this is not mentioned in the + documentation, and some implementations do not require it.) + + ``` markdown + paragraph + code? + ``` + +4. What is the exact rule for determining when list items get wrapped in `

      ` tags? Can a list be partially "loose" and partially "tight"? What should we do with a list like this? @@ -59,7 +68,6 @@ questions it does not answer: ``` markdown 1. one - - a - b @@ -69,8 +77,26 @@ questions it does not answer: (There are some relevant comments by John Gruber [here](http://article.gmane.org/gmane.text.markdown.general/2554).) -4. When list markers change from bullets to numbers, should we have - two lists or one? +5. Can list markers be indented? Can ordered list markers be right-aligned? + + ``` markdown + 8. item 1 + 9. item 2 + 10. item 2a + ``` + +6. Is this one list with a horizontal rule in its second item, + or two lists separated by a horizontal rule? + + ``` markdown + * a + * * * * * + * b + ``` + +7. When list markers change from numbers to bullets, do we have + two lists or one? (The markdown syntax description suggests two, + but the perl scripts and many other implementations produce one.) ``` markdown 1. fee @@ -79,28 +105,37 @@ questions it does not answer: - fum ``` -5. What are the precedence rules for the markers of inline structure? +8. What are the precedence rules for the markers of inline structure? For example, is the following a valid link, or does the code span take precedence ? ``` markdown - [foo `](bar)` + [a backtick (`)](/url) and [another backtick (`)](/url). ``` -6. What are the precedence rules for markers of emphasis and strong +9. What are the precedence rules for markers of emphasis and strong emphasis? For example, how should the following be parsed? ``` markdown - *foo *bar** baz* + *foo *bar* baz* + ``` + +10. What are the precedence rules between block-level and inline-level + structure? For example, how should the following be parsed? + + ``` markdown + - `a long code span can contain a hyphen like this + - and it can screw things up` ``` -7. Can list items include headers? +11. Can list items include headers? (`Markdown.pl` does not allow this, + but headers can occur in blockquotes.) ``` markdown - # Heading ``` -8. Can link references be defined inside block quotes or list items? +12. Can link references be defined inside block quotes or list items? ``` markdown > Blockquote [foo]. @@ -108,6 +143,16 @@ questions it does not answer: > [foo]: /url ``` +13. If there are multiple definitions for the same reference, which takes + precedence? + + ``` markdown + [foo]: /url1 + [foo]: /url2 + + [foo][] + ``` + In the absence of a spec, early implementers consulted `Markdown.pl` to resolve these ambiguities. But `Markdown.pl` was quite buggy, and gave manifestly bad results in many cases, so it was not a -- cgit 0.0.5-2-1-g0f52 From fa54bd814328faaf8116ec244c52c4eac0d512c0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 22 Jul 2014 10:41:34 -0700 Subject: Added upload to makefile. --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 98d0c450e4..7a77e8ed73 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re $(SRCDIR)/case_fold_switch.c: $(DATADIR)/CaseFolding-3.2.0.txt perl mkcasefold.pl < $< > $@ -.PHONY: leakcheck clean fuzztest dingus +.PHONY: leakcheck clean fuzztest dingus upload dingus: cd js && echo "Starting dingus server at http://localhost:9000" && python -m SimpleHTTPServer 9000 @@ -56,6 +56,9 @@ fuzztest: for i in `seq 1 10`; do \ time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done +upload: spec.html spec.pdf + scp spec.html spec.pdf js/stmd.js js/index.html website:html/markdown/ + clean: -rm test $(SRCDIR)/*.o $(SRCDIR)/scanners.c -rm -r *.dSYM -- cgit 0.0.5-2-1-g0f52 From 84bad7440033ced38f8dfba1f839a6966fc88a5e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:26:20 -0700 Subject: main.c: Fixed reading of files specified on command line. --- src/main.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index 40a63bc861..fa334b3365 100644 --- a/src/main.c +++ b/src/main.c @@ -67,16 +67,13 @@ int main(int argc, char *argv[]) { exit(1); } - struct bStream *stream = bsopen((bNread)fread, fp); - if (stream == NULL) { - printf("Error opening stream\n"); - } - while (bsreadln(s, stream, '\n') != BSTR_ERR) { + while ((s = bgets((bNgetc) fgetc, fp, '\n'))) { check(incorporate_line(s, linenum, &cur) == 0, - "error incorporating line %d of %s", linenum, argv[files[g]]); + "error incorporating line %d", linenum); + bdestroy(s); linenum++; } - bsclose(stream); + fclose(fp); } } -- cgit 0.0.5-2-1-g0f52 From 5cff19421421948a32382b7c046841eb7a62c992 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:28:18 -0700 Subject: Fleshed out README. --- README.md | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 1f7c7a5466..f5099e466c 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,37 @@ Standard markdown ================= -Standard markdown is a specification of markdown syntax, together -with implementations (`stmd`) in C and javascript. +Standard markdown is a specification of markdown syntax, together with +implementations (`stmd`) in C and javascript. + +The implementations +------------------- The C implementation provides both a library and a standalone program -that converts markdown to HTML. It is written in standard C99 and has -no library dependencies. (However, if you check it out from the +`stmd` that converts markdown to HTML. It is written in standard C99 +and has no library dependencies. (However, if you check it out from the repository, you'll need `re2c` to generate `scanners.c` from `scanners.re`. This is only a build dependency for developers, since `scanners.c` can be provided in a released source tarball.) -The javascript implementation is a single javascript file -that can be linked to an HTML page. A standalone version (using -`node.js`) is also provided (`js/markdown`), and there is a -"dingus" for playing with it interactively. (`make dingus` will start + Usage: stmd [FILE*] + Options: --help, -h Print usage information + --ast Print AST instead of HTML + --version Print version + +The javascript implementation is a single javascript file, with +no dependencies, that can be linked to in an HTML page. A standalone +version (using `node.js`) is also provided (`js/markdown`), and there is +a "dingus" for playing with it interactively. (`make dingus` will start this.) -The spec contains over 400 embedded examples which serve as -conformance tests. To run the tests for `stmd`, do `make test`. -To run them for another markdown program, say `myprog`, -do `make test PROG=myprog`. To run the tests for `stmd.js`, -do `make testjs`. +The spec contains over 400 embedded examples which serve as conformance +tests. To run the tests for `stmd`, do `make test`. To run them for +another markdown program, say `myprog`, do `make test PROG=myprog`. To +run the tests for `stmd.js`, do `make testjs`. + +The spec +-------- The source of the spec is `spec.txt`. This is basically a markdown file, with code examples written in a shorthand form: @@ -32,8 +42,51 @@ file, with code examples written in a shorthand form: expected HTML output . -To build an HTML version of the spec, do `make spec.html`. -To build a PDF version, do `make spec.pdf`. Both these commands -require that pandoc is installed, and creating a PDF requires -a latex installation. +To build an HTML version of the spec, do `make spec.html`. To build a +PDF version, do `make spec.pdf`. Both these commands require that +pandoc is installed, and creating a PDF requires a latex installation. + +The spec is written from the point of view of the human writer, not +the computer reader. It is not an algorithm---an English translation of +a computer program---but a declarative description of what counts as a block +quote, a code block, and each of the other structural elements that can +make up a markdown document. + +Because John Gruber's [canonical syntax +description](http://daringfireball.net/projects/markdown/syntax) leaves +many aspects of the syntax undetermined, writing a precise spec requires +making a large number of decisions, many of them somewhat arbitrary. +In making them, I have appealed to existing conventions and +considerations of simplicity, readability, expressive power, and +consistency. I have tried to ensure that "normal" documents in the many +incompatible existing implementations of markdown will render, as far as +possible, as their authors intended. And I have tried to make the rules +for different elements work together harmoniously. In places where +different decisions could have been made (for example, the rules +governing list indentation), I have explained the rationale for +my choices. In a few cases, I have departed slightly from the canonical +syntax description, in ways that I think further the goals of markdown +as stated in that description. + +For the most part, I have limited myself to the basic elements +described in Gruber's canonical syntax description, eschewing extensions +like footnotes and definition lists. It is important to get the core +right before considering such things. However, I have included a visible +syntax for line breaks and fenced code blocks. + +In all of this, I have been guided by eight years experience writing +markdown implementations in several languages, including the first +markdown parser not based on regular expression substitutions +([pandoc](http://github.com/jgm/pandoc) and the first markdown parsers +based on PEG grammars +([peg-markdown](http://github.com/jgm/peg-markdown), +[lunamark](http://github.com/jgm/lunamark). Maintaining these projects +and responding to years of user feedback have given me a good sense of +the complexities involved in parsing markdown, and of the various design +decisions that can be made. I have also explored differences between +markdown implementations extensively using [babelmark +2](http://johnmacfarlane.net/babelmark2/). In the early phases of +working out the spec, I benefited greatly from collaboration with David +Greenspan, and from feedback from several industrial users of markdown, +including Jeff Atwood, Vincent Marti, and Neil Williams. -- cgit 0.0.5-2-1-g0f52 From b15d2b81c2ce3f6b29f790541abeabe36f433562 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:31:15 -0700 Subject: Makefile: Added README.html target. --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 7a77e8ed73..09f62c2bcc 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,9 @@ PROG=./stmd .PHONY: all oldtests test spec benchjs testjs all: $(SRCDIR)/case_fold_switch.c $(PROG) +README.html: README.md + pandoc -S -s -t html5 -o $@ $< + spec: test spec.html spec.md: spec.txt -- cgit 0.0.5-2-1-g0f52 From b44b188894a057e78459a3af4c4e75c1862d23a0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:34:55 -0700 Subject: Added man page for stmd. --- man/Makefile | 7 +++++++ man/man1/stmd.1 | 32 ++++++++++++++++++++++++++++++++ man/stmd.1.md | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 man/Makefile create mode 100644 man/man1/stmd.1 create mode 100644 man/stmd.1.md diff --git a/man/Makefile b/man/Makefile new file mode 100644 index 0000000000..98528c3751 --- /dev/null +++ b/man/Makefile @@ -0,0 +1,7 @@ +ALL=man1/stmd.1 + +.PHONY: all + +all: $(ALL) +man1/%.1: %.1.md + pandoc $< -o $@ -s -t man diff --git a/man/man1/stmd.1 b/man/man1/stmd.1 new file mode 100644 index 0000000000..913d5a7c15 --- /dev/null +++ b/man/man1/stmd.1 @@ -0,0 +1,32 @@ +.TH "stmd" "1" "August 12, 2014" "stmd manual" "" +.SH NAME +.PP +stmd \- convert markdown formatted text to HTML +.SH SYNOPSIS +.PP +stmd [\f[I]options\f[]] [file*] +.SH DESCRIPTION +.PP +\f[C]stmd\f[] acts as a pipe, reading from stdin or from the specified +files and writing to stdout. +It converts markdown formatted plain text to HTML, using the conventions +described in the standard markdown spec. +.SH OPTIONS +.TP +.B \f[C]\-\-ast\f[] +Print an abstract syntax tree instead of HTML. +.RS +.RE +.TP +.B \f[C]\-\-help\f[] +Print usage information. +.RS +.RE +.TP +.B \f[C]\-\-version\f[] +Print version. +.RS +.RE +.SH AUTHORS +.PP +John MacFarlane diff --git a/man/stmd.1.md b/man/stmd.1.md new file mode 100644 index 0000000000..6e38afcb27 --- /dev/null +++ b/man/stmd.1.md @@ -0,0 +1,36 @@ +--- +title: stmd +section: 1 +footer: stmd manual +date: August 12, 2014 +... + +# NAME + +stmd - convert markdown formatted text to HTML + +# SYNOPSIS + +stmd [*options*] [file\*] + +# DESCRIPTION + +`stmd` acts as a pipe, reading from stdin or from the specified +files and writing to stdout. It converts markdown formatted plain +text to HTML, using the conventions described in the standard +markdown spec. + +# OPTIONS + +`--ast` +: Print an abstract syntax tree instead of HTML. + +`--help` +: Print usage information. + +`--version` +: Print version. + +# AUTHORS + +John MacFarlane -- cgit 0.0.5-2-1-g0f52 From fb34178a06c0d10063270681d2a4125449fbc16a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:35:20 -0700 Subject: Removed TODO. --- TODO | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 TODO diff --git a/TODO b/TODO deleted file mode 100644 index f9369e16ff..0000000000 --- a/TODO +++ /dev/null @@ -1,5 +0,0 @@ -- add library function to convert a string -- add README/library documentation -- add man page for prog and library -- document/clean up code - -- cgit 0.0.5-2-1-g0f52 From d612fe464bfc7f298a790d2e2f4101f23244042d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:41:26 -0700 Subject: README changes presupposing gh-pages site. --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f5099e466c..16ba35c77b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ Standard markdown ================= -Standard markdown is a specification of markdown syntax, together with -implementations (`stmd`) in C and javascript. +Standard markdown is a [specification of markdown syntax][the spec], +together with implementations (`stmd`) in C and javascript. The implementations ------------------- @@ -25,15 +25,19 @@ version (using `node.js`) is also provided (`js/markdown`), and there is a "dingus" for playing with it interactively. (`make dingus` will start this.) -The spec contains over 400 embedded examples which serve as conformance +[Try it now!](http://jgm.github.io/stmd/js/) + +[The spec] contains over 400 embedded examples which serve as conformance tests. To run the tests for `stmd`, do `make test`. To run them for another markdown program, say `myprog`, do `make test PROG=myprog`. To run the tests for `stmd.js`, do `make testjs`. +[The spec]: http://jgm.github.io/stmd/spec.html + The spec -------- -The source of the spec is `spec.txt`. This is basically a markdown +The source of [the spec] is `spec.txt`. This is basically a markdown file, with code examples written in a shorthand form: . -- cgit 0.0.5-2-1-g0f52 From 60f4a5368d506c51c8976f78ca93c68737198060 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:47:37 -0700 Subject: Typo fixes. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 16ba35c77b..5253eb6969 100644 --- a/README.md +++ b/README.md @@ -81,10 +81,10 @@ syntax for line breaks and fenced code blocks. In all of this, I have been guided by eight years experience writing markdown implementations in several languages, including the first markdown parser not based on regular expression substitutions -([pandoc](http://github.com/jgm/pandoc) and the first markdown parsers +([pandoc](http://github.com/jgm/pandoc)) and the first markdown parsers based on PEG grammars ([peg-markdown](http://github.com/jgm/peg-markdown), -[lunamark](http://github.com/jgm/lunamark). Maintaining these projects +[lunamark](http://github.com/jgm/lunamark)). Maintaining these projects and responding to years of user feedback have given me a good sense of the complexities involved in parsing markdown, and of the various design decisions that can be made. I have also explored differences between -- cgit 0.0.5-2-1-g0f52 From 0b817259d80d4c340ddba4c83386de9c164d87df Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 22:51:42 -0700 Subject: Note on the license. --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 5253eb6969..f53f5a7a95 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Standard markdown ================= Standard markdown is a [specification of markdown syntax][the spec], -together with implementations (`stmd`) in C and javascript. +together with BSD3-licensed implementations (`stmd`) in C and javascript. The implementations ------------------- @@ -93,4 +93,3 @@ markdown implementations extensively using [babelmark working out the spec, I benefited greatly from collaboration with David Greenspan, and from feedback from several industrial users of markdown, including Jeff Atwood, Vincent Marti, and Neil Williams. - -- cgit 0.0.5-2-1-g0f52 From eb14dda8e8ffc755b0837e0bc2bb9c62281287d7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 23:11:18 -0700 Subject: Use template for HTML version of README. --- Makefile | 2 +- template.html | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 09f62c2bcc..4a86e44019 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ PROG=./stmd all: $(SRCDIR)/case_fold_switch.c $(PROG) README.html: README.md - pandoc -S -s -t html5 -o $@ $< + pandoc --template template.html -S -s -t html5 -o $@ $< spec: test spec.html diff --git a/template.html b/template.html index 2286c6892d..5416a073b0 100644 --- a/template.html +++ b/template.html @@ -53,8 +53,12 @@ a.footnoteRef > sup { +$if(title)$

      $title$

      +$endif$ +$if(version)$
      Version $version$ ($date$)
      +$endif$
      $for(author)$$author$$sep$; $endfor$
      -- cgit 0.0.5-2-1-g0f52 From 630d363d59a1ace243fea779013fac74d170e15b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 23:13:33 -0700 Subject: Link for re2c in readme --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f53f5a7a95..889cc4e594 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,10 @@ The implementations The C implementation provides both a library and a standalone program `stmd` that converts markdown to HTML. It is written in standard C99 and has no library dependencies. (However, if you check it out from the -repository, you'll need `re2c` to generate `scanners.c` from -`scanners.re`. This is only a build dependency for developers, since -`scanners.c` can be provided in a released source tarball.) +repository, you'll need [`re2c`](http://re2c.org) to generate +`scanners.c` from `scanners.re`. This is only a build dependency for +developers, since `scanners.c` can be provided in a released source +tarball.) Usage: stmd [FILE*] Options: --help, -h Print usage information -- cgit 0.0.5-2-1-g0f52 From 471d331ba58271bdbf067c99a5f1504361af7ff6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Aug 2014 23:30:42 -0700 Subject: Color scheme tweak in spec. --- template.html | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/template.html b/template.html index 5416a073b0..fb7fbe4f79 100644 --- a/template.html +++ b/template.html @@ -4,8 +4,14 @@ $title$ @@ -76,27 +77,21 @@ $(document).ready(function() {
      -
      -

      commonmark.js dingus

      -
      -
      - -
      -
      -

      Parsed in ms.
      - Rendered in ms.

      -
      +

      commonmark.js dingus

      +
      Parsed in + ms. Rendered in ms.
        +
        @@ -107,7 +102,6 @@ $(document).ready(function() {
        -
        -- cgit 0.0.5-2-1-g0f52 From 6d52558b4c684ec621605a744b676c41eb77bc52 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Oct 2014 19:15:38 -0700 Subject: Added Makefile.old. --- Makefile.old | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Makefile.old diff --git a/Makefile.old b/Makefile.old new file mode 100644 index 0000000000..51dcb44a92 --- /dev/null +++ b/Makefile.old @@ -0,0 +1,91 @@ +CFLAGS?=-g -O3 -Wall -Wextra -std=c99 -Isrc -Wno-missing-field-initializers $(OPTFLAGS) +LDFLAGS?=-g -O3 -Wall -Werror +SRCDIR?=src +DATADIR?=data +BENCHINP?=narrative.md +PROG?=./cmark +JSMODULES=$(wildcard js/lib/*.js) + +.PHONY: all test spec benchjs testjs +all: $(SRCDIR)/case_fold_switch.inc $(PROG) + +README.html: README.md template.html + pandoc --template template.html -S -s -t html5 -o $@ $< + +spec: test spec.html + +spec.md: spec.txt + perl spec2md.pl < $< > $@ + +spec.html: spec.md template.html + pandoc --no-highlight --number-sections --template template.html -s --toc -S $< > $@ # | perl -pe 's/␣/ <\/span>/g' > $@ + +narrative.html: narrative.md template.html + pandoc --template template.html -s -S $< -o $@ + +spec.pdf: spec.md template.tex specfilter.hs + pandoc -s $< --template template.tex \ + --filter ./specfilter.hs -o $@ --latex-engine=xelatex --toc \ + --number-sections -V documentclass=report -V tocdepth=2 \ + -V classoption=twosides + +test: spec.txt + perl runtests.pl $< $(PROG) + +js/commonmark.js: js/lib/index.js ${JSMODULES} + browserify --standalone commonmark $< -o $@ + +testjs: spec.txt + node js/test.js + +jshint: + jshint ${JSMODULES} + +benchjs: + node js/bench.js ${BENCHINP} + +HTML_OBJ=$(SRCDIR)/html/html.o $(SRCDIR)/html/houdini_href_e.o $(SRCDIR)/html/houdini_html_e.o $(SRCDIR)/html/houdini_html_u.o + +CMARK_OBJ=$(SRCDIR)/inlines.o $(SRCDIR)/buffer.o $(SRCDIR)/blocks.o $(SRCDIR)/scanners.c $(SRCDIR)/print.o $(SRCDIR)/utf8.o $(SRCDIR)/references.c + +$(PROG): $(SRCDIR)/html/html_unescape.h $(SRCDIR)/case_fold_switch.inc $(HTML_OBJ) $(CMARK_OBJ) $(SRCDIR)/main.c + $(CC) $(LDFLAGS) -o $@ $(HTML_OBJ) $(CMARK_OBJ) $(SRCDIR)/main.c + +$(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re + re2c --case-insensitive -bis $< > $@ || (rm $@ && false) + +$(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt + perl mkcasefold.pl < $< > $@ + +$(SRCDIR)/html/html_unescape.h: $(SRCDIR)/html/html_unescape.gperf + gperf -I -t -N find_entity -H hash_entity -K entity -C -l --null-strings -m5 $< > $@ + +.PHONY: leakcheck clean fuzztest dingus upload jshint test testjs benchjs + +dingus: js/commonmark.js + cd js && echo "Starting dingus server at http://localhost:9000" && python -m SimpleHTTPServer 9000 + +leakcheck: $(PROG) + cat leakcheck.md | valgrind --leak-check=full --dsymutil=yes $(PROG) + +operf: $(PROG) + operf $(PROG) <$(BENCHINP) >/dev/null + +fuzztest: + for i in `seq 1 10`; do \ + time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done + +update-site: spec.html narrative.html js/commonmark.js + cp spec.html _site/ + cp narrative.html _site/index.html + cp js/index.html _site/js/ + cp js/commonmark.js _site/js/ + cp js/LICENSE _site/js/ + (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, narrative, js" ; git push; cd ..) + +clean: + -rm -f test $(SRCDIR)/*.o $(SRCDIR)/scanners.c $(SRCDIR)/html/*.o + -rm js/commonmark.js + -rm -rf *.dSYM + -rm -f README.html + -rm -f spec.md fuzz.txt spec.html -- cgit 0.0.5-2-1-g0f52 From d8a5baa9aef8761f8ebe8218da88234e308d709f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Oct 2014 21:55:15 -0700 Subject: Removed obsolete src/getopt.c; modified CMake build accordingly. --- src/CMakeLists.txt | 26 +++---- src/cmark.h | 1 + src/getopt.c | 200 ----------------------------------------------------- 3 files changed, 15 insertions(+), 212 deletions(-) delete mode 100644 src/getopt.c diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 100bf285da..225817895e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,23 +3,25 @@ set(PROGRAM_cmark_SOURCES blocks.c inlines.c main.c debug.h - getopt.c print.c scanners.h scanners.c scanners.re cmark.h - utf8.h utf8.c - buffer.h buffer.c - references.h references.c - html/html.c - html/html_unescape.h - html/html_unescape.gperf - html/houdini.h - html/houdini_href_e.c - html/houdini_html_e.c - html/houdini_html_u.c -) + utf8.h + utf8.c + buffer.h + buffer.c + references.h + references.c + html/html.c + html/html_unescape.h + html/html_unescape.gperf + html/houdini.h + html/houdini_href_e.c + html/houdini_html_e.c + html/houdini_html_u.c + ) include_directories(. html) diff --git a/src/cmark.h b/src/cmark.h index ff2f9a250d..e09aeb3dc3 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -3,6 +3,7 @@ #include #include +#include "config.h" #include "buffer.h" #include "chunk.h" #include "references.h" diff --git a/src/getopt.c b/src/getopt.c deleted file mode 100644 index c0aa182fdc..0000000000 --- a/src/getopt.c +++ /dev/null @@ -1,200 +0,0 @@ -/* $Id: getopt.c 4022 2008-03-31 06:11:07Z rra $ - * - * Replacement implementation of getopt. - * - * This is a replacement implementation for getopt based on the my_getopt - * distribution by Benjamin Sittler. Only the getopt interface is included, - * since remctl doesn't use GNU long options, and the code has been rearranged - * and reworked somewhat to fit with the remctl coding style. - * - * Copyright 1997, 2000, 2001, 2002 Benjamin Sittler - * Copyright 2008 Russ Allbery - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include - -#include -#include -#include -/* - * If we're running the test suite, rename getopt and the global variables to - * avoid conflicts with the system version. - */ -#if TESTING -# define getopt test_getopt -int test_getopt(int, char **, const char *); -# define optind test_optind -# define opterr test_opterr -# define optopt test_optopt -# define optarg test_optarg -#endif - -/* Initialize global interface variables. */ -int optind = 1; -int opterr = 1; -int optopt = 0; -char *optarg = NULL; - -/* - * This is the plain old UNIX getopt, with GNU-style extensions. If you're - * porting some piece of UNIX software, this is all you need. It supports - * GNU-style permutation and optional arguments, but does not support the GNU - * -W extension. - * - * This function is not re-entrant or thread-safe, has static variables, and - * generally isn't a great interface, but normally you only call it once. - */ -int -getopt(int argc, char *argv[], const char *optstring) -{ - const char *p; - size_t offset = 0; - char mode = '\0'; - int colon_mode = 0; - int option = -1; - - /* Holds the current position in the parameter being parsed. */ - static int charind = 0; - - /* - * By default, getopt permutes argv as it scans and leaves all non-options - * at the end. This can be changed with the first character of optstring - * or the environment variable POSIXLY_CORRECT. With a first character of - * '+' or when POSIXLY_CORRECT is set, option processing stops at the - * first non-option. If the first character is '-', each non-option argv - * element is handled as if it were the argument of an option with - * character code 1. mode holds this character. - * - * After the optional leading '+' and '-', optstring may contain ':'. If - * present, missing arguments return ':' instead of '?'. colon_mode holds - * this setting. - */ - if (getenv("POSIXLY_CORRECT") != NULL) { - mode = '+'; - colon_mode = '+'; - } else { - if (optstring[offset] == '+' || optstring[offset] == '-') { - mode = optstring[offset]; - offset++; - } - if (optstring[offset] == ':') { - colon_mode = 1; - offset++; - } - } - - /* - * charind holds where we left off. If it's set, we were in the middle - * of an argv element; if not, we pick up with the next element of - * optind. - */ - optarg = NULL; - if (charind == 0) { - if (optind >= argc) - option = -1; - else if (strcmp(argv[optind], "--") == 0) { - optind++; - option = -1; - } else if (argv[optind][0] != '-' || argv[optind][1] == '\0') { - char *tmp; - int i, j, k, end; - - if (mode == '+') - option = -1; - else if (mode == '-') { - optarg = argv[optind]; - optind++; - option = 1; - } else { - for (i = optind + 1, j = optind; i < argc; i++) - if ((argv[i][0] == '-') && (argv[i][1] != '\0')) { - optind = i; - option = getopt(argc, argv, optstring); - while (i > j) { - --i; - tmp = argv[i]; - end = (charind == 0) ? optind - 1 : optind; - for (k = i; k + 1 <= end; k++) { - argv[k] = argv[k + 1]; - } - argv[end] = tmp; - --optind; - } - break; - } - if (i == argc) - option = -1; - } - return option; - } else { - charind = 1; - } - } - if (charind != 0) { - optopt = argv[optind][charind]; - for (p = optstring + offset; *p != '\0'; p++) - if (optopt == *p) { - p++; - if (*p == ':') { - if (argv[optind][charind + 1] != '\0') { - optarg = &argv[optind][charind + 1]; - optind++; - charind = 0; - } else { - p++; - if (*p != ':') { - charind = 0; - optind++; - if (optind >= argc) { - if (opterr) - fprintf(stderr, "%s: option requires" - " an argument -- %c\n", argv[0], - optopt); - option = colon_mode ? ':' : '?'; - goto done; - } else { - optarg = argv[optind]; - optind++; - } - } - } - } - option = optopt; - } - if (option == -1) { - if (opterr) - fprintf(stderr, "%s: illegal option -- %c\n", argv[0], optopt); - option = '?'; - } - } - -done: - if (charind != 0) { - charind++; - if (argv[optind][charind] == '\0') { - optind++; - charind = 0; - } - } - if (optind > argc) - optind = argc; - return option; -} -- cgit 0.0.5-2-1-g0f52 From 98460f8916aaa9bf50b8a3a1500a843b1b24150a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Oct 2014 21:59:20 -0700 Subject: config.h unnecessary for now. --- CMakeLists.txt | 4 ++-- src/cmark.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 609834d3ce..61aae94e5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,8 +55,8 @@ else(MSVC) endif(MSVC) # create config.h -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake - ${CMAKE_CURRENT_BINARY_DIR}/config.h) +# configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake +# ${CMAKE_CURRENT_BINARY_DIR}/config.h) # set include directories get_filename_component(CONFIG_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/config.h PATH) diff --git a/src/cmark.h b/src/cmark.h index e09aeb3dc3..ff2f9a250d 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -3,7 +3,6 @@ #include #include -#include "config.h" #include "buffer.h" #include "chunk.h" #include "references.h" -- cgit 0.0.5-2-1-g0f52 From 995050a54053b32b9a34892f3b86c127d5aad5b9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Oct 2014 22:47:31 -0700 Subject: CMakeLists tweaks. Use compiler optimizations, -Wall, -Werror. --- CMakeLists.txt | 252 ++++++++++++++++++++++++++++------------------------- src/CMakeLists.txt | 10 +-- 2 files changed, 137 insertions(+), 125 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 61aae94e5d..59c2f0ac9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,119 +1,133 @@ -project(cmark) -cmake_minimum_required(VERSION 2.8) - -set(PROJECT_NAME "cmark") - -set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 0) -set(PROJECT_VERSION_PATCH 1) -set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) - -include (CheckIncludeFile) -CHECK_INCLUDE_FILE (stdbool.h HAVE_STDBOOL_H) - -#option(${PROJECT_NAME}_WITH_DOCS "generate Documentation" OFF) -#option(${PROJECT_NAME}_WITH_TESTS "enable testing" ON) -option(CMAKE_SUPPRESS_REGENERATION "suppress rules to re-run cmake on changes (warning: no dependency checks!)?" OFF) -if (MSVC) - set(RE2C ${CMAKE_CURRENT_SOURCE_DIR}/re2c) -else(MSVC) - set(RE2C re2c) -endif(MSVC) - -if (MSVC) - option(PROJECT_LINK_MSVC_MT "link with /MT instead of /MD (use msvc runtime dlls versus static linked)" ON) - # see http://msdn.microsoft.com/en-us/library/2kzt1wy3%28VS.71%29.aspx - if (PROJECT_LINK_MSVC_MT) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - endif (PROJECT_LINK_MSVC_MT) - - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4") - - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS UNICODE) - set(CMAKE_FIND_LIBRARY_PREFIXES "") - set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib") - set(CMAKE_STATIC_LIBRARY_PREFIX "lib") - set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") - set(CMAKE_SHARED_LIBRARY_PREFIX "") # lib - set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") # .so - set(CMAKE_IMPORT_LIBRARY_PREFIX "") - set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib") - set(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe - set(CMAKE_LINK_LIBRARY_SUFFIX ".lib") - set(CMAKE_DL_LIBS "") - set(CMAKE_DEBUG_POSTFIX "d") - add_definitions(-DUNICODE -D_UNICODE) -else(MSVC) - list(APPEND CMAKE_CXX_FLAGS "-Wall -Wunused-variable -Wno-long-long") - #-pedantic - list(APPEND CMAKE_C_FLAGS "-Wall -Wunused-variable -Wno-long-long") -endif(MSVC) - -# create config.h -# configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake -# ${CMAKE_CURRENT_BINARY_DIR}/config.h) - -# set include directories -get_filename_component(CONFIG_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/config.h PATH) -include_directories(include ${CONFIG_INCLUDE}) - -install(DIRECTORY include DESTINATION . - COMPONENT devel - FILES_MATCHING PATTERN "*.h" - PATTERN .svn EXCLUDE - ) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.h - DESTINATION include/${PROJECT_NAME} - COMPONENT devel) - -add_subdirectory(src) - -include(InstallRequiredSystemLibraries) - -set(CPACK_GENERATOR TGZ ZIP) -if(WIN32 AND NOT CYGWIN) - set(CPACK_GENERATOR NSIS ${CPACK_GENERATOR}) -endif(WIN32 AND NOT CYGWIN) -if(APPLE) - set(CPACK_GENERATOR DragNDrop ${CPACK_GENERATOR}) -endif(APPLE) -if (UNIX AND NOT APPLE AND NOT WIN32) - set(CPACK_GENERATOR DEB ${CPACK_GENERATOR}) -endif (UNIX AND NOT APPLE AND NOT WIN32) - -set(CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-src-${PROJECT_VERSION}) -set(CPACK_SOURCE_GENERATOR TGZ ZIP) -set(CPACK_PACKAGE_CONTACT http://talk.commonmark.org/) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_NAME}) -set(CPACK_PACKAGE_VENDOR "${PROJECT_NAME} Development Team") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") -set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") -set(CPACK_SOURCE_IGNORE_FILES "/docs/html;/autom4te.cache;/build/;/win32/;/.svn/;~$;${CPACK_SOURCE_IGNORE_FILES}") - -if(WIN32 AND NOT UNIX) - set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}\\\\${PROJECT_VERSION}") - # There is a bug in NSI that does not handle full unix paths properly. Make - # sure there is at least one set of four (4) backlashes. - # set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") - set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\${PROJECT_NAME}.exe") - set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} ${PROJECT_NAME}") - set(CPACK_NSIS_HELP_LINK "http://commonmark.org/") - set(CPACK_NSIS_URL_INFO_ABOUT "http://commonmark.org/") - set(CPACK_NSIS_CONTACT "http://talk.commonmark.org/") - set(CPACK_NSIS_MODIFY_PATH ON) - set(CPACK_NSIS_MENU_LINKS "doc/html/index.html;Documentation") -else(WIN32 AND NOT UNIX) - set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}/${PROJECT_VERSION}") - set(CPACK_STRIP_FILES "bin/${PROJECT_NAME}") - set(CPACK_SOURCE_STRIP_FILES "") -endif(WIN32 AND NOT UNIX) -set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME};${PROJECT_NAME}) -include(CPack) +project(cmark) +cmake_minimum_required(VERSION 2.8) + +set(PROJECT_NAME "cmark") + +set(PROJECT_VERSION_MAJOR 0) +set(PROJECT_VERSION_MINOR 0) +set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) + +include (CheckIncludeFile) +CHECK_INCLUDE_FILE (stdbool.h HAVE_STDBOOL_H) + +set(CMAKE_BUILD_TYPE Release) + +if(MSVC) + # Force to always compile with W4 + if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") + endif() +elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + # Update if necessary + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") +endif() + +#option(${PROJECT_NAME}_WITH_DOCS "generate Documentation" OFF) +#option(${PROJECT_NAME}_WITH_TESTS "enable testing" ON) +option(CMAKE_SUPPRESS_REGENERATION "suppress rules to re-run cmake on changes (warning: no dependency checks!)?" OFF) +if (MSVC) + set(RE2C ${CMAKE_CURRENT_SOURCE_DIR}/re2c) +else(MSVC) + set(RE2C re2c) +endif(MSVC) + +if (MSVC) + option(PROJECT_LINK_MSVC_MT "link with /MT instead of /MD (use msvc runtime dlls versus static linked)" ON) + # see http://msdn.microsoft.com/en-us/library/2kzt1wy3%28VS.71%29.aspx + if (PROJECT_LINK_MSVC_MT) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") + endif (PROJECT_LINK_MSVC_MT) + + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4") + + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS UNICODE) + set(CMAKE_FIND_LIBRARY_PREFIXES "") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib") + set(CMAKE_STATIC_LIBRARY_PREFIX "lib") + set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") + set(CMAKE_SHARED_LIBRARY_PREFIX "") # lib + set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") # .so + set(CMAKE_IMPORT_LIBRARY_PREFIX "") + set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib") + set(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe + set(CMAKE_LINK_LIBRARY_SUFFIX ".lib") + set(CMAKE_DL_LIBS "") + set(CMAKE_DEBUG_POSTFIX "d") + add_definitions(-DUNICODE -D_UNICODE) +else(MSVC) + list(APPEND CMAKE_CXX_FLAGS "-Wall -Wunused-variable -Wno-long-long") + #-pedantic + list(APPEND CMAKE_C_FLAGS "-Wall -Wunused-variable -Wno-long-long") +endif(MSVC) + +# create config.h +# configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake +# ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +# set include directories +get_filename_component(CONFIG_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/config.h PATH) +include_directories(include ${CONFIG_INCLUDE}) + +install(DIRECTORY include DESTINATION . + COMPONENT devel + FILES_MATCHING PATTERN "*.h" + PATTERN .svn EXCLUDE + ) +# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.h +# DESTINATION include/${PROJECT_NAME} +# COMPONENT devel) + +add_subdirectory(src) + +include(InstallRequiredSystemLibraries) + +set(CPACK_GENERATOR TGZ ZIP) +if(WIN32 AND NOT CYGWIN) + set(CPACK_GENERATOR NSIS ${CPACK_GENERATOR}) +endif(WIN32 AND NOT CYGWIN) +if(APPLE) + set(CPACK_GENERATOR DragNDrop ${CPACK_GENERATOR}) +endif(APPLE) +if (UNIX AND NOT APPLE AND NOT WIN32) + set(CPACK_GENERATOR DEB ${CPACK_GENERATOR}) +endif (UNIX AND NOT APPLE AND NOT WIN32) + +set(CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-src-${PROJECT_VERSION}) +set(CPACK_SOURCE_GENERATOR TGZ ZIP) +set(CPACK_PACKAGE_CONTACT http://talk.commonmark.org/) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_NAME}) +set(CPACK_PACKAGE_VENDOR "${PROJECT_NAME} Development Team") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") +set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +set(CPACK_SOURCE_IGNORE_FILES "/docs/html;/autom4te.cache;/build/;/win32/;/.svn/;~$;${CPACK_SOURCE_IGNORE_FILES}") + +if(WIN32 AND NOT UNIX) + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}\\\\${PROJECT_VERSION}") + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backlashes. + # set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") + set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\${PROJECT_NAME}.exe") + set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} ${PROJECT_NAME}") + set(CPACK_NSIS_HELP_LINK "http://commonmark.org/") + set(CPACK_NSIS_URL_INFO_ABOUT "http://commonmark.org/") + set(CPACK_NSIS_CONTACT "http://talk.commonmark.org/") + set(CPACK_NSIS_MODIFY_PATH ON) + set(CPACK_NSIS_MENU_LINKS "doc/html/index.html;Documentation") +else(WIN32 AND NOT UNIX) + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}/${PROJECT_VERSION}") + set(CPACK_STRIP_FILES "bin/${PROJECT_NAME}") + set(CPACK_SOURCE_STRIP_FILES "") +endif(WIN32 AND NOT UNIX) +set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME};${PROJECT_NAME}) +include(CPack) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 225817895e..aa6ec3db0e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -36,17 +36,15 @@ else(MSVC) COMMAND ${RE2C} --case-insensitive -b -i ${CMAKE_CURRENT_SOURCE_DIR}/scanners.re >${CMAKE_CURRENT_SOURCE_DIR}/scanners.c) endif(MSVC) -add_executable(${PROGRAM_cmark} +add_executable(${PROGRAM_cmark} ${PROGRAM_cmark_SOURCES}) if (MSVC) -set_property(TARGET ${PROGRAM_cmark} - APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO) +set_property(TARGET ${PROGRAM_cmark} + APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO) # if sometimes libs are needed ... #target_link_libraries(${PROGRAM_chronolog}) endif(MSVC) install(TARGETS ${PROGRAM_cmark} -RUNTIME DESTINATION bin +RUNTIME DESTINATION bin BUNDLE DESTINATION /Applications) - - -- cgit 0.0.5-2-1-g0f52 From b14ece9e725175f98011dda8749d046d25b2f2bb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Oct 2014 22:58:27 -0700 Subject: Added man/CMakeLists.txt to install man pages. --- CMakeLists.txt | 1 + man/CMakeLists.txt | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 man/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 59c2f0ac9e..36d2e67223 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,6 +86,7 @@ install(DIRECTORY include DESTINATION . # COMPONENT devel) add_subdirectory(src) +add_subdirectory(man) include(InstallRequiredSystemLibraries) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 0000000000..6b4b56f33e --- /dev/null +++ b/man/CMakeLists.txt @@ -0,0 +1,3 @@ +if(UNIX) + INSTALL(FILES man1/cmark.1 DESTINATION share/man/man1) +endif(UNIX) -- cgit 0.0.5-2-1-g0f52 From 15422f68253bd5d877f0b308b1bf6caec6e0eb79 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 00:26:38 -0700 Subject: Tweaked the closing fence section added in last commit. --- spec.txt | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/spec.txt b/spec.txt index c226866bdc..e5953bd208 100644 --- a/spec.txt +++ b/spec.txt @@ -1288,45 +1288,41 @@ aaa
        . -Closing fences may be indented by 0-3 spaces: +Four spaces indentation produces an indented code block: . -``` -code -``` -. -
        code
        -
        -. - + ``` + aaa + ``` . +
        ```
        +aaa
         ```
        -code
        - ```
        -.
        -
        code
         
        . +Closing fences may be indented by 0-3 spaces, and their indentation +need not match that of the opening fence: + . ``` -code +aaa ``` . -
        code
        +
        aaa
         
        . . -``` -code ``` +aaa + ``` . -
        code
        +
        aaa
         
        . -But not by 4: +This is not a closing fence, because it is indented 4 spaces: . ``` @@ -1338,18 +1334,6 @@ aaa
        . -Four spaces indentation produces an indented code block: - -. - ``` - aaa - ``` -. -
        ```
        -aaa
        -```
        -
        -. Code fences (opening and closing) cannot contain internal spaces: -- cgit 0.0.5-2-1-g0f52 From c3f9a7caecbf5239f29b6fd1a7edf47df4fc6d21 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 11:57:43 -0700 Subject: Add EMPHASIS_STACK_LIMIT. If we get more than 1000 deep in potential emphasis/strong emphasis openers, we refuse to add more to the stack. This prevents the sort of stack overflow we previously got with python -c 'print "*a **a " * 100000; print " a** a*" * 100000' | ./cmark Partially addresses #166. --- src/cmark.h | 1 + src/inlines.c | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cmark.h b/src/cmark.h index ff2f9a250d..5e508e4ecc 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -9,6 +9,7 @@ #define VERSION "0.1" #define CODE_INDENT 4 +#define EMPHASIS_STACK_LIMIT 1000 struct node_inl { enum { diff --git a/src/inlines.c b/src/inlines.c index 7a7f08a380..928a3ac33f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -23,6 +23,7 @@ typedef struct Subject { int label_nestlevel; reference_map *refmap; inline_stack *emphasis_openers; + int number_of_emphasis_openers; } subject; static node_inl *parse_chunk_inlines(chunk *chunk, reference_map *refmap); @@ -177,6 +178,7 @@ static void subject_from_buf(subject *e, strbuf *buffer, reference_map *refmap) e->label_nestlevel = 0; e->refmap = refmap; e->emphasis_openers = NULL; + e->number_of_emphasis_openers = 0; chunk_rtrim(&e->input); } @@ -190,6 +192,7 @@ static void subject_from_chunk(subject *e, chunk *chunk, reference_map *refmap) e->label_nestlevel = 0; e->refmap = refmap; e->emphasis_openers = NULL; + e->number_of_emphasis_openers = 0; chunk_rtrim(&e->input); } @@ -309,6 +312,7 @@ static void free_openers(subject* subj, inline_stack* istack) while (subj->emphasis_openers != istack) { tempstack = subj->emphasis_openers; subj->emphasis_openers = subj->emphasis_openers->previous; + subj->number_of_emphasis_openers--; free(tempstack); } } @@ -389,7 +393,7 @@ static node_inl* handle_strong_emph(subject* subj, unsigned char c, node_inl **l cannotClose: inl_text = make_str(chunk_dup(&subj->input, subj->pos - numdelims, numdelims)); - if (can_open) + if (can_open && subj->number_of_emphasis_openers < EMPHASIS_STACK_LIMIT) { istack = (inline_stack*)malloc(sizeof(inline_stack)); if (istack == NULL) { @@ -400,6 +404,7 @@ cannotClose: istack->first_inline = inl_text; istack->previous = subj->emphasis_openers; subj->emphasis_openers = istack; + subj->number_of_emphasis_openers++; } return inl_text; -- cgit 0.0.5-2-1-g0f52 From 9918827edd3dd6630f7417f1efca673bae55e6dd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 12:02:43 -0700 Subject: Moved TODO item to tracker --- TODO | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 TODO diff --git a/TODO b/TODO deleted file mode 100644 index fb82e4c286..0000000000 --- a/TODO +++ /dev/null @@ -1,4 +0,0 @@ -- should space be required before the closing ### in an ATX header? - http://talk.commonmark.org/t/atx-header-closing-space-confusion/333 - perhaps so - symmetrically with beginning, and for equally good reasons - -- cgit 0.0.5-2-1-g0f52 From e618715636a3bd60930bea34d214b3aaf8e9e766 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 12:37:59 -0700 Subject: Require space before closing # sequence in ATX header. Closes #169. --- js/lib/blocks.js | 2 +- spec.txt | 24 ++++++++++++++++-------- src/blocks.c | 12 ++++++------ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 109661f10a..175cc2abd1 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -366,7 +366,7 @@ var incorporateLine = function(ln, line_number) { container.level = match[0].trim().length; // number of #s // remove trailing ###s: container.strings = - [ln.slice(offset).replace(/(?:(\\#) *#*| *#+) *$/,'$1')]; + [ln.slice(offset).replace(/^ *#+ *$/, '').replace(/ +#+ *$/,'')]; break; } else if ((match = ln.slice(first_nonspace).match(/^`{3,}(?!.*`)|^~{3,}(?!.*~)/))) { diff --git a/spec.txt b/spec.txt index e5953bd208..5070b3b3ff 100644 --- a/spec.txt +++ b/spec.txt @@ -479,11 +479,11 @@ consists of a string of characters, parsed as inline content, between an opening sequence of 1--6 unescaped `#` characters and an optional closing sequence of any number of `#` characters. The opening sequence of `#` characters cannot be followed directly by a nonspace character. -The closing `#` characters may be followed by spaces only. The opening -`#` character may be indented 0-3 spaces. The raw contents of the -header are stripped of leading and trailing spaces before being parsed -as inline content. The header level is equal to the number of `#` -characters in the opening sequence. +The optional closing sequence of `#`s must be preceded by a space and may be +followed by spaces only. The opening `#` character may be indented 0-3 +spaces. The raw contents of the header are stripped of leading and +trailing spaces before being parsed as inline content. The header level +is equal to the number of `#` characters in the opening sequence. Simple headers: @@ -614,16 +614,24 @@ header:

        foo ### b

        . +The closing sequence must be preceded by a space: + +. +# foo# +. +

        foo#

        +. + Backslash-escaped `#` characters do not count as part of the closing sequence: . ### foo \### -## foo \#\## +## foo #\## # foo \# . -

        foo #

        -

        foo ##

        +

        foo ###

        +

        foo ###

        foo #

        . diff --git a/src/blocks.c b/src/blocks.c index ae106d2580..7613c82642 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -432,15 +432,15 @@ static void chop_trailing_hashtags(chunk *ch) chunk_rtrim(ch); orig_n = n = ch->len - 1; - // if string ends in #s, remove these: + // if string ends in space followed by #s, remove these: while (n >= 0 && peek_at(ch, n) == '#') n--; - // the last # was escaped, so we include it. - if (n != orig_n && n >= 0 && peek_at(ch, n) == '\\') - n++; - - ch->len = n + 1; + // Check for a be a space before the final #s: + if (n != orig_n && n >= 0 && peek_at(ch, n) == ' ') { + ch->len = n; + chunk_rtrim(ch); + } } // Process one line at a time, modifying a node_block. -- cgit 0.0.5-2-1-g0f52 From 652ac3088bd40df5a2db9a14c0f50d9c17ffd221 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 13:27:38 -0700 Subject: Removed narrative.md, moved its content to README.md. --- Makefile | 11 ++--- README.md | 79 +++++++++++++++++++++++++++++++++ narrative.md | 140 ----------------------------------------------------------- 3 files changed, 83 insertions(+), 147 deletions(-) delete mode 100644 narrative.md diff --git a/Makefile b/Makefile index e545794de3..9ca8eb2430 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CFLAGS?=-g -O3 -Wall -Wextra -std=c99 -Isrc -Wno-missing-field-initializers -fPI LDFLAGS?=-g -O3 -Wall -Werror SRCDIR?=src DATADIR?=data -BENCHINP?=narrative.md +BENCHINP?=README.md PROG?=./cmark JSMODULES=$(wildcard js/lib/*.js) PREFIX?=/usr/local @@ -22,9 +22,6 @@ spec.md: spec.txt spec.html: spec.md template.html pandoc --no-highlight --number-sections --template template.html -s --toc -S $< > $@ # | perl -pe 's/␣/ <\/span>/g' > $@ -narrative.html: narrative.md template.html - pandoc --template template.html -s -S $< -o $@ - spec.pdf: spec.md template.tex specfilter.hs pandoc -s $< --template template.tex \ --filter ./specfilter.hs -o $@ --latex-engine=xelatex --toc \ @@ -90,13 +87,13 @@ fuzztest: for i in `seq 1 10`; do \ time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done -update-site: spec.html narrative.html js/commonmark.js +update-site: spec.html js/commonmark.js cp spec.html _site/ - cp narrative.html _site/index.html + echo "TODO" > _site/index.html cp js/index.html _site/js/ cp js/commonmark.js _site/js/ cp js/LICENSE _site/js/ - (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, narrative, js" ; git push; cd ..) + (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, js" ; git push; cd ..) clean: -rm -f test $(SRCDIR)/*.o $(SRCDIR)/scanners.c $(SRCDIR)/html/*.o libcmark.so diff --git a/README.md b/README.md index 358f63fe3c..a59c461d30 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,75 @@ like footnotes and definition lists. It is important to get the core right before considering such things. However, I have included a visible syntax for line breaks and fenced code blocks. +There are only a few places where this spec says things that contradict +the canonical syntax description: + +- It [allows all punctuation symbols to be + backslash-escaped](http://jgm.github.io/stmd/spec.html#backslash-escapes), + not just the symbols with special meanings in Markdown. I found + that it was just too hard to remember which symbols could be + escaped. + +- It introduces an [alternative syntax for hard line + breaks](http://jgm.github.io/stmd/spec.html#hard-line-breaks), a + backslash at the end of the line, supplementing the + two-spaces-at-the-end-of-line rule. This is motivated by persistent + complaints about the “invisible” nature of the two-space rule. + +- Link syntax has been made a bit more predictable (in a + backwards-compatible way). For example, `Markdown.pl` allows single + quotes around a title in inline links, but not in reference links. + This kind of difference is really hard for users to remember, so the + spec [allows single quotes in both + contexts](http://jgm.github.io/stmd/spec.html#links). + +- The rule for HTML blocks differs, though in most real cases it + shouldn't make a difference. (See + [here](http://jgm.github.io/stmd/spec.html#html-blocks) for + details.) The spec's proposal makes it easy to include Markdown + inside HTML block-level tags, if you want to, but also allows you to + exclude this. It is also makes parsing much easier, avoiding + expensive backtracking. + +- It does not collapse adjacent bird-track blocks into a single + blockquote: + + > this is two + + > blockquotes + + > this is a single + > + > blockquote with two paragraphs + +- Rules for content in lists differ in a few respects, though (as with + HTML blocks), most lists in existing documents should render as + intended. There is some discussion of the choice points and + differences [here](http://jgm.github.io/stmd/spec.html#motivation). + I think that the spec's proposal does better than any existing + implementation in rendering lists the way a human writer or reader + would intuitively understand them. (I could give numerous examples + of perfectly natural looking lists that nearly every existing + implementation flubs up.) + +- The spec stipulates that two blank lines break out of all list + contexts. This is an attempt to deal with issues that often come up + when someone wants to have two adjacent lists, or a list followed by + an indented code block. + +- Changing bullet characters, or changing from bullets to numbers or + vice versa, starts a new list. I think that is almost always going + to be the writer's intent. + +- The number that begins an ordered list item may be followed by + either `.` or `)`. Changing the delimiter style starts a new + list. + +- The start number of an ordered list is significant. + +- [Fenced code blocks](http://jgm.github.io/stmd/spec.html#fenced-code-blocks) are supported, delimited by either + backticks (` ``` `) or tildes (` ~~~ `). + In all of this, I have been guided by eight years experience writing Markdown implementations in several languages, including the first Markdown parser not based on regular expression substitutions @@ -113,3 +182,13 @@ Markdown implementations extensively using [babelmark working out the spec, I benefited greatly from collaboration with David Greenspan, and from feedback from several industrial users of Markdown, including Jeff Atwood, Vincent Marti, and Neil Williams. + +Contributing +------------ + +There is a [forum for discussing +CommonMark](http://talk.commonmark.org); you should use it instead of +github issues for questions and possibly open-ended discussions. +Use the [github issue tracker](http://github.com/jgm/stmd/issues) +only for simple, clear, actionable issues. + diff --git a/narrative.md b/narrative.md deleted file mode 100644 index 7390662f66..0000000000 --- a/narrative.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: CommonMark -... - -CommonMark is a [specification of Markdown -syntax](http://jgm.github.io/stmd/spec.html), together with -BSD3-licensed implementations in C and JavaScript. The source -for the spec and the two implementations can be found in [this -repository](http://github.com/jgm/stmd). - -The C implementation provides both a library and a standalone program -`cmark` that converts Markdown to HTML. It is written in standard C99 -and has no library dependencies. - -The JavaScript implementation is a single JavaScript file, with no -dependencies. [Try it now!](http://jgm.github.io/stmd/js/) - -[The spec](http://jgm.github.io/stmd/spec.html) contains over 400 -embedded examples which serve as conformance tests. (The source contains -a perl script that will run the tests against any Markdown program.) - -The spec is written from the point of view of the human writer, not the -computer reader. It is not an algorithm—an English translation of a -computer program—but a declarative description of what counts as a block -quote, a code block, and each of the other structural elements that can -make up a Markdown document. For the most part, the spec limits itself -to the basic elements described in John Gruber’s [canonical syntax -description](http://daringfireball.net/projects/markdown/syntax), -eschewing extensions like footnotes and definition lists. It is -important to get the core right before considering such things. - -Because Gruber’s syntax description leaves many aspects of the syntax -undetermined, writing a precise spec requires making a large number of -decisions, many of them somewhat arbitrary. In making them, I have -appealed to existing conventions and considerations of simplicity, -readability, expressive power, and consistency. I have tried to ensure -that “normal” documents in the many incompatible existing -implementations of Markdown will render, as far as possible, as their -authors intended. And I have tried to make the rules for different -elements work together harmoniously. In places where different decisions -could have been made (for example, the rules governing list -indentation), I have explained the rationale for my choices. In a few -cases, I have departed slightly from the canonical syntax description, -in ways that I think further the goals of Markdown as stated in that -description. - -There are only a few places where this spec says things that contradict -the canonical syntax description: - -- It [allows all punctuation symbols to be - backslash-escaped](http://jgm.github.io/stmd/spec.html#backslash-escapes), - not just the symbols with special meanings in Markdown. I found - that it was just too hard to remember which symbols could be - escaped. - -- It introduces an [alternative syntax for hard line - breaks](http://jgm.github.io/stmd/spec.html#hard-line-breaks), a - backslash at the end of the line, supplementing the - two-spaces-at-the-end-of-line rule. This is motivated by persistent - complaints about the “invisible” nature of the two-space rule. - -- Link syntax has been made a bit more predictable (in a - backwards-compatible way). For example, `Markdown.pl` allows single - quotes around a title in inline links, but not in reference links. - This kind of difference is really hard for users to remember, so the - spec [allows single quotes in both - contexts](http://jgm.github.io/stmd/spec.html#links). - -- The rule for HTML blocks differs, though in most real cases it - shouldn't make a difference. (See - [here](http://jgm.github.io/stmd/spec.html#html-blocks) for - details.) The spec's proposal makes it easy to include Markdown - inside HTML block-level tags, if you want to, but also allows you to - exclude this. It is also makes parsing much easier, avoiding - expensive backtracking. - -- It does not collapse adjacent bird-track blocks into a single - blockquote: - - > this is two - - > blockquotes - - > this is a single - > - > blockquote with two paragraphs - -- Rules for content in lists differ in a few respects, though (as with - HTML blocks), most lists in existing documents should render as - intended. There is some discussion of the choice points and - differences [here](http://jgm.github.io/stmd/spec.html#motivation). - I think that the spec's proposal does better than any existing - implementation in rendering lists the way a human writer or reader - would intuitively understand them. (I could give numerous examples - of perfectly natural looking lists that nearly every existing - implementation flubs up.) - -- The spec stipulates that two blank lines break out of all list - contexts. This is an attempt to deal with issues that often come up - when someone wants to have two adjacent lists, or a list followed by - an indented code block. - -- Changing bullet characters, or changing from bullets to numbers or - vice versa, starts a new list. I think that is almost always going - to be the writer's intent. - -- The number that begins an ordered list item may be followed by - either `.` or `)`. Changing the delimiter style starts a new - list. - -- The start number of an ordered list is significant. - -- [Fenced code blocks](http://jgm.github.io/stmd/spec.html#fenced-code-blocks) are supported, delimited by either - backticks (` ``` `) or tildes (` ~~~ `). - -In all of this, I have been guided by eight years experience writing -Markdown implementations in several languages, including the first -Markdown parser not based on regular expression substitutions -([pandoc](http://github.com/jgm/pandoc)) and the first Markdown parsers -based on PEG grammars -([peg-markdown](http://github.com/jgm/peg-markdown), -[lunamark](http://github.com/jgm/lunamark)). Maintaining these projects -and responding to years of user feedback have given me a good sense of -the complexities involved in parsing Markdown, and of the various design -decisions that can be made. I have also explored differences between -Markdown implementations extensively using [babelmark -2](http://johnmacfarlane.net/babelmark2/). In the early phases of -working out the spec, I benefited greatly from collaboration with David -Greenspan, and from extensive discussions with a group of industrial -users of Markdown, including Jeff Atwood, Vincent Marti, and Neil -Williams. - -### Contributing - -There is a [forum for discussing -CommonMark](http://talk.commonmark.org); you should use it instead of -github issues for questions and possibly open-ended discussions. -Use the [github issue tracker](http://github.com/jgm/stmd/issues) -only for simple, clear, actionable issues. - -- cgit 0.0.5-2-1-g0f52 From d248d95dd066fd4e508bca96b9c35db3aeda259c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 14:14:55 -0700 Subject: Put multiple versions of spec on website. --- Makefile | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 9ca8eb2430..363772cf43 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,8 @@ BENCHINP?=README.md PROG?=./cmark JSMODULES=$(wildcard js/lib/*.js) PREFIX?=/usr/local +SPEC=spec.txt +SPECVERSION=$(shell grep version: $(SPEC) | sed -e 's/version: *//') .PHONY: all spec leakcheck clean fuzztest dingus upload jshint test testjs benchjs @@ -16,7 +18,7 @@ README.html: README.md template.html spec: test spec.html -spec.md: spec.txt +spec.md: $(SPEC) perl spec2md.pl < $< > $@ spec.html: spec.md template.html @@ -28,13 +30,13 @@ spec.pdf: spec.md template.tex specfilter.hs --number-sections -V documentclass=report -V tocdepth=2 \ -V classoption=twosides -test: spec.txt +test: $(SPEC) perl runtests.pl $< $(PROG) js/commonmark.js: js/lib/index.js ${JSMODULES} browserify --standalone commonmark $< -o $@ -testjs: spec.txt +testjs: $(SPEC) node js/test.js jshint: @@ -87,16 +89,27 @@ fuzztest: for i in `seq 1 10`; do \ time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done -update-site: spec.html js/commonmark.js - cp spec.html _site/ - echo "TODO" > _site/index.html +index.md: _site/$(SPECVERSION)/index.html + echo "" > $@ + for vers in $(shell cd _site; ls -d -t 0.*) ; do \ + echo "- [Version $$vers](/$$vers/)" >> $@ ; done + +_site/index.html: index.md + pandoc --template template.html -S -s -t html5 -o $@ $< + +_site/$(SPECVERSION)/index.html: spec.html + mkdir -p _site/$(SPECVERSION) + cp $< $@ + cd _site; git add $(SPECVERSION)/index.html; git commit -a -m "Added version $(SPECVERSION) of spec"; cd .. + +update-site: spec.html js/commonmark.js _site/index.html _site/$(SPECVERSION)/index.html cp js/index.html _site/js/ cp js/commonmark.js _site/js/ cp js/LICENSE _site/js/ (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, js" ; git push; cd ..) clean: - -rm -f test $(SRCDIR)/*.o $(SRCDIR)/scanners.c $(SRCDIR)/html/*.o libcmark.so + -rm -f test $(SRCDIR)/*.o $(SRCDIR)/scanners.c $(SRCDIR)/html/*.o libcmark.so index.md -rm js/commonmark.js -rm -rf *.dSYM -rm -f README.html -- cgit 0.0.5-2-1-g0f52 From c5a0fdf28119c60baf755ce9de676c0d7b98740a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 14:17:35 -0700 Subject: Add title to list of versions at spec. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 363772cf43..2c293d1c22 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,7 @@ fuzztest: time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done index.md: _site/$(SPECVERSION)/index.html - echo "" > $@ + echo "% CommonMark Spec\n" > $@ for vers in $(shell cd _site; ls -d -t 0.*) ; do \ echo "- [Version $$vers](/$$vers/)" >> $@ ; done -- cgit 0.0.5-2-1-g0f52 From ee570cab6af160bd50262f81f0e1f17e988b6e45 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 18:02:24 -0700 Subject: spec2md.pl: Make Example numbers into links. --- spec2md.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec2md.pl b/spec2md.pl index 1b4f26ecad..142609537d 100644 --- a/spec2md.pl +++ b/spec2md.pl @@ -12,7 +12,7 @@ while () { if ($stage == 0) { $example++; print "\n
        \n"; - print "
        Example $example
        \n\n"; + print "\n\n"; print "````````````````````````````````````````````````````````` markdown\n"; } elsif ($stage == 1) { print "`````````````````````````````````````````````````````````\n\n"; -- cgit 0.0.5-2-1-g0f52 From 76df41816c4e57a6c8ada845a2ead90d4d3b5b97 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 18:52:10 -0700 Subject: Have index.html on web page redirect to latest version. --- Makefile | 14 ++++++-------- spec.redirect.in | 11 +++++++++++ 2 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 spec.redirect.in diff --git a/Makefile b/Makefile index 2c293d1c22..c2899ea5b4 100644 --- a/Makefile +++ b/Makefile @@ -89,27 +89,25 @@ fuzztest: for i in `seq 1 10`; do \ time cat /dev/urandom | head -c 100000 | iconv -f latin1 -t utf-8 | $(PROG) >/dev/null; done -index.md: _site/$(SPECVERSION)/index.html - echo "% CommonMark Spec\n" > $@ - for vers in $(shell cd _site; ls -d -t 0.*) ; do \ - echo "- [Version $$vers](/$$vers/)" >> $@ ; done +_site/spec.html: spec.redirect.in + perl -pe 's/VERSION/$(SPECVERSION)/g' $< > $@ -_site/index.html: index.md - pandoc --template template.html -S -s -t html5 -o $@ $< +_site/index.html: _site/spec.html + cp $< $@ _site/$(SPECVERSION)/index.html: spec.html mkdir -p _site/$(SPECVERSION) cp $< $@ cd _site; git add $(SPECVERSION)/index.html; git commit -a -m "Added version $(SPECVERSION) of spec"; cd .. -update-site: spec.html js/commonmark.js _site/index.html _site/$(SPECVERSION)/index.html +update-site: spec.html js/commonmark.js _site/index.html _site/$(SPECVERSION)/index.html _site/spec.html cp js/index.html _site/js/ cp js/commonmark.js _site/js/ cp js/LICENSE _site/js/ (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, js" ; git push; cd ..) clean: - -rm -f test $(SRCDIR)/*.o $(SRCDIR)/scanners.c $(SRCDIR)/html/*.o libcmark.so index.md + -rm -f test $(SRCDIR)/*.o $(SRCDIR)/scanners.c $(SRCDIR)/html/*.o libcmark.so -rm js/commonmark.js -rm -rf *.dSYM -rm -f README.html diff --git a/spec.redirect.in b/spec.redirect.in new file mode 100644 index 0000000000..1727497825 --- /dev/null +++ b/spec.redirect.in @@ -0,0 +1,11 @@ + + + + CommonMark Spec + + + +

        The most recent version of the CommonMark Spec can be found +at http://spec.commonmark.org/VERSION/.

        + + -- cgit 0.0.5-2-1-g0f52 From f22281f2d15a786d512269ddd546b5b4c0462f4c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 20:50:01 -0700 Subject: Added clear and permalink to dingus. Serve dingus from dingus.html. Add redirect page as index.html. --- js/dingus.html | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ js/index.html | 118 +++++--------------------------------------------- 2 files changed, 145 insertions(+), 107 deletions(-) create mode 100644 js/dingus.html diff --git a/js/dingus.html b/js/dingus.html new file mode 100644 index 0000000000..ecaeb33848 --- /dev/null +++ b/js/dingus.html @@ -0,0 +1,134 @@ + + + + + commonmark.js demo + + + + + + + + +
        +
        +

        commonmark.js dingus

        +
        +
        +
        +
        Parsed in + ms. Rendered in ms.
        +

        clear 

        + +
          +
          +
          + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + + diff --git a/js/index.html b/js/index.html index 6f462a9da5..3f6c904fe1 100644 --- a/js/index.html +++ b/js/index.html @@ -1,108 +1,12 @@ - - - - - commonmark.js demo - - - - - - - - -
          -
          -

          commonmark.js dingus

          -
          -
          -
          -
          Parsed in - ms. Rendered in ms.
          - -
            -
            -
            - -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            - + + + + CommonMark dingus + + + +

            The most recent version of the CommonMark dingus can be found +at /dingus.html/.

            + -- cgit 0.0.5-2-1-g0f52 From 695b5f3705fbdb42dd7422e4dc88f25e895d1406 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 21:17:10 -0700 Subject: Dingus improvements; moved to top level. --- Makefile | 4 +- dingus.html | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ js/dingus.html | 134 -------------------------------------------------------- 3 files changed, 137 insertions(+), 136 deletions(-) create mode 100644 dingus.html delete mode 100644 js/dingus.html diff --git a/Makefile b/Makefile index c2899ea5b4..b1a950b3fb 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ install: libcmark.so $(cmark_HDR) $(HTML_HDR) install $(HTML_HDR) $(PREFIX)/include/cmark/html/ dingus: js/commonmark.js - cd js && echo "Starting dingus server at http://localhost:9000" && python -m SimpleHTTPServer 9000 + echo "Starting dingus server at http://localhost:9000" && python -m SimpleHTTPServer 9000 leakcheck: $(PROG) cat leakcheck.md | valgrind --leak-check=full --dsymutil=yes $(PROG) @@ -101,7 +101,7 @@ _site/$(SPECVERSION)/index.html: spec.html cd _site; git add $(SPECVERSION)/index.html; git commit -a -m "Added version $(SPECVERSION) of spec"; cd .. update-site: spec.html js/commonmark.js _site/index.html _site/$(SPECVERSION)/index.html _site/spec.html - cp js/index.html _site/js/ + cp dingus.html _site/ cp js/commonmark.js _site/js/ cp js/LICENSE _site/js/ (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, js" ; git push; cd ..) diff --git a/dingus.html b/dingus.html new file mode 100644 index 0000000000..8c35fe5d5b --- /dev/null +++ b/dingus.html @@ -0,0 +1,135 @@ + + + + + commonmark.js demo + + + + + + + + +
            +
            +

            commonmark.js dingus

            +
            +
            +
            +
            Parsed in + ms. Rendered in ms.
            +

            clear 

            + +
              +
              +
              + +
              +
              +
              +
              +
              +
              +
              +
              +
              +
              +
              +
              + + diff --git a/js/dingus.html b/js/dingus.html deleted file mode 100644 index ecaeb33848..0000000000 --- a/js/dingus.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - commonmark.js demo - - - - - - - - -
              -
              -

              commonmark.js dingus

              -
              -
              -
              -
              Parsed in - ms. Rendered in ms.
              -

              clear 

              - -
                -
                -
                - -
                -
                -
                -
                -
                -
                -
                -
                -
                -
                -
                -
                - - -- cgit 0.0.5-2-1-g0f52 From 9d8dba5acd00edec29e385ac859bc28c9991dae9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Oct 2014 21:42:22 -0700 Subject: Added (interact) links to spec, to open examples in dingus. --- spec2md.pl | 2 +- template.html | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spec2md.pl b/spec2md.pl index 142609537d..f93aad81fe 100644 --- a/spec2md.pl +++ b/spec2md.pl @@ -12,7 +12,7 @@ while () { if ($stage == 0) { $example++; print "\n
                \n"; - print "\n\n"; + print "\n\n"; print "````````````````````````````````````````````````````````` markdown\n"; } elsif ($stage == 1) { print "`````````````````````````````````````````````````````````\n\n"; diff --git a/template.html b/template.html index 0eaf2999ee..b17d28510a 100644 --- a/template.html +++ b/template.html @@ -47,6 +47,7 @@ pre.html span.space:after { border: 1px solid #666; } div.examplenum { font-size: 82%; text-align: left; } +a.dingus { color: red; } a.footnoteRef > sup:before { content: "["; } @@ -58,6 +59,20 @@ a.footnoteRef > sup { font-size: 100%; } + + $if(title)$ -- cgit 0.0.5-2-1-g0f52 From 6c3ed4e899bfba4dddd763045fcec2375341e4fc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Oct 2014 08:48:19 -0700 Subject: dingus: Show HTML tab if query has text. This should be a safer default; if someone sends you dangerous HTML, you'll see it immediately. --- dingus.html | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dingus.html b/dingus.html index 8c35fe5d5b..7c3a7c7f9c 100644 --- a/dingus.html +++ b/dingus.html @@ -20,7 +20,7 @@ function getQueryVariable(variable) var pair = vars[i].split("="); if(pair[0] == variable){return decodeURIComponent(pair[1]);} } - return(''); + return null; } @@ -64,7 +64,12 @@ $(document).ready(function() { render(); }, 0); // ms delay }; - $("#text").val(getQueryVariable("text")); + var initial_text = getQueryVariable("text"); + if (initial_text) { + $("#text").val(initial_text); + // show HTML tab if text is from query + $('#result-tabs a[href="#result"]').tab('show'); + } parseAndRender(); $("#clear-text-box").click(function(e) { $("#text").val(''); @@ -114,7 +119,7 @@ $(document).ready(function() {
                  -
                  . -## Code span +## Code spans A [backtick string](@backtick-string) is a string of one or more backtick characters (`` ` ``) that is neither @@ -6495,9 +6495,9 @@ If you want a link after a literal `!`, backslash-escape the ## Autolinks -[Autolinks](@autolink) are absolute URIs and email addresses inside `<` and `>`. -They are parsed as links, with the URL or email address as the link -label. +[Autolink](@autolink)s are absolute URIs and email addresses inside +`<` and `>`. They are parsed as links, with the URL or email address +as the link label. A [URI autolink](@uri-autolink) consists of `<`, followed by an [absolute URI] not containing `<`, followed by `>`. It is parsed as -- cgit 0.0.5-2-1-g0f52 From ace1b42818ebdbee46ca0153fb0b49e1494321e0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 4 Jan 2015 23:16:39 -0800 Subject: Fixed spec.pdf target. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 02a845d59e..0457728467 100644 --- a/Makefile +++ b/Makefile @@ -178,7 +178,7 @@ dingus: js/commonmark.js ### Spec ### spec.md: $(SPEC) - python3 makespec.py $< markdown > $@ + python3 makespec.py markdown > $@ spec: spec.html @anchors=`perl -ne '@matches = / id="([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \ -- cgit 0.0.5-2-1-g0f52 From 2590e3b4448798db88f650a4fbc37cec3b741a4a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 4 Jan 2015 23:28:52 -0800 Subject: Moved spec.html error checks into makespec.py. --- Makefile | 8 -------- makespec.py | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 0457728467..7c53359202 100644 --- a/Makefile +++ b/Makefile @@ -180,14 +180,6 @@ dingus: js/commonmark.js spec.md: $(SPEC) python3 makespec.py markdown > $@ -spec: spec.html - @anchors=`perl -ne '@matches = / id="([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \ - links=`perl -ne '@matches = / href="#([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \ - for link in $$links; do \ - [[ $$anchors =~ $$link ]] || \ - echo "Link to missing anchor #$$link"; \ - done - spec.html: spec.txt template.html ${PROG} python3 makespec.py html > $@ diff --git a/makespec.py b/makespec.py index 23616366cf..762d62d72b 100644 --- a/makespec.py +++ b/makespec.py @@ -129,6 +129,28 @@ elif specformat == "html": if retcode == 0: result = re.sub(r'␣', ' ', result) sys.stdout.write(template.substitute(metadata, body=result)) + + # check for errors: + idents = [] + for ident in re.findall(r'id="([^"]*)"', result): + if ident in idents: + sys.stderr.write("WARNING: duplicate identifier '" + ident + + "'\n") + else: + idents.append(ident) + for href in re.findall(r'href="#([^"]*)"', result): + if not (href in idents): + sys.stderr.write("WARNING: internal link with no anchor '" + + href + "'\n") + reftexts = [] + for ref in refs: + ref = re.sub('].*',']',ref).upper() + if ref in reftexts: + sys.stderr.write("WARNING: duplicate reference link '" + + ref + "'\n") + else: + reftexts.append(ref) + else: sys.stderr.write("Error converting markdown version of spec:\n") sys.stderr.write(err) -- cgit 0.0.5-2-1-g0f52 From 1619a0771dad8d40662bfbc335162696931e6b9b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 4 Jan 2015 23:33:00 -0800 Subject: Strip {-} off unnumbered sections in HTML version of spec. --- makespec.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/makespec.py b/makespec.py index 762d62d72b..fece148879 100644 --- a/makespec.py +++ b/makespec.py @@ -83,6 +83,8 @@ with open('spec.txt', 'r', encoding='utf-8') as spec: level = len(match.group(1)) if re.search(r'{-}$', section): section = re.sub(r' *{-} *$', '', section) + if specformat == 'html': + ln = re.sub(r' *{-} *$', '', ln) number = '' else: if lastlevel == level: -- cgit 0.0.5-2-1-g0f52 From 1f9fb63cb654b985e0d237444827078c8a621fdd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 4 Jan 2015 23:34:38 -0800 Subject: Removed pandoc from travis build deps. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b96f79b758..07c11f5171 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ before_install: # we need a more recent cmake than travis provides (at least 2.8.9): - echo "yes" | sudo add-apt-repository ppa:kalakris/cmake - sudo apt-get update -qq - - sudo apt-get install -qq cmake python3 pandoc valgrind + - sudo apt-get install -qq cmake python3 valgrind script: - make testtarball - PROG=`ls cmark-*.*/build/src/cmark` make leakcheck -- cgit 0.0.5-2-1-g0f52 From 456f3f30c42c492357883dfe71c7ca96a36696ea Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 00:20:03 -0800 Subject: makespec.py: put ids on headers, not separate anchor. --- makespec.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/makespec.py b/makespec.py index fece148879..9b5d523f6b 100644 --- a/makespec.py +++ b/makespec.py @@ -130,6 +130,8 @@ elif specformat == "html": [retcode, result, err] = pipe_through_prog(prog, toc + mdtext) if retcode == 0: result = re.sub(r'␣', ' ', result) + result = re.sub(r'<\/a> ', + "", result) sys.stdout.write(template.substitute(metadata, body=result)) # check for errors: -- cgit 0.0.5-2-1-g0f52 From 60d2011b15a4c41a855f87ef72b4f6dec8e6db11 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 00:22:51 -0800 Subject: makespec.py: put pluralizing s inside link for better visuals. --- makespec.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/makespec.py b/makespec.py index 9b5d523f6b..84663f29da 100644 --- a/makespec.py +++ b/makespec.py @@ -132,6 +132,8 @@ elif specformat == "html": result = re.sub(r'␣', ' ', result) result = re.sub(r'<\/a> ', "", result) + # put plural s inside links for better visuals: + result = re.sub(r'<\/a>s', "s", result) sys.stdout.write(template.substitute(metadata, body=result)) # check for errors: -- cgit 0.0.5-2-1-g0f52 From c864bc1221b4531012b2c172a26279f720258b78 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 00:31:53 -0800 Subject: Fixed a number of links in spec. --- spec.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/spec.txt b/spec.txt index 1c88888abf..6a38cd7176 100644 --- a/spec.txt +++ b/spec.txt @@ -478,7 +478,7 @@ bar If a line of dashes that meets the above conditions for being a horizontal rule could also be interpreted as the underline of a [setext header], the interpretation as a -[setext-header] takes precedence. Thus, for example, +[setext header] takes precedence. Thus, for example, this is a setext header, not a paragraph followed by a horizontal rule: . @@ -736,7 +736,7 @@ A [setext header underline](@setext-header-underline) is a sequence of `=` characters or a sequence of `-` characters, with no more than 3 spaces indentation and any number of trailing spaces. If a line containing a single `-` can be interpreted as an -empty [list item]s, it should be interpreted this way +empty [list items], it should be interpreted this way and not as a [setext header underline]. The header is a level 1 header if `=` characters are used in the @@ -1002,7 +1002,7 @@ use backslash escapes: ## Indented code blocks An [indented code block](@indented-code-block) is composed of one or more -[indented chunks] separated by blank lines. +[indented chunk]s separated by blank lines. An [indented chunk](@indented-chunk) is a sequence of non-blank lines, each indented four or more spaces. The contents of the code block are the literal contents of the lines, including trailing @@ -1814,7 +1814,7 @@ No further [non-space character]s may occur on the line. A [link reference-definition] does not correspond to a structural element of a document. Instead, it defines a label which can be used in [reference link]s -and reference-style [image]s elsewhere in the document. [Link +and reference-style [images] elsewhere in the document. [Link reference definitions] can come either before or after the links that use them. @@ -1989,7 +1989,7 @@ and horizontal rules, and it need not be followed by a blank line. . -Several [link references definition]s +Several [link reference definition]s can occur one after another, without intervening blank lines. . @@ -2174,15 +2174,15 @@ A [block quote marker](@block-quote-marker) consists of 0-3 spaces of initial indent, plus (a) the character `>` together with a following space, or (b) a single character `>` not followed by a space. -The following rules define [block quote]s: +The following rules define [block quotes]: 1. **Basic case.** If a string of lines *Ls* constitute a sequence of blocks *Bs*, then the result of prepending a [block quote marker] to the beginning of each line in *Ls* - is a [block quote] containing *Bs*. + is a [block quote](#block-quotes) containing *Bs*. 2. **Laziness.** If a string of lines *Ls* constitute a [block - quote] with contents *Bs*, then the result of deleting + quote](#block-quotes) with contents *Bs*, then the result of deleting the initial [block quote marker] from one or more lines in which the next [non-space character] after the [block quote marker] is [paragraph continuation @@ -2194,7 +2194,7 @@ The following rules define [block quote]s: 3. **Consecutiveness.** A document cannot contain two [block quotes] in a row unless there is a [blank line] between them. -Nothing else counts as a [block quote]. +Nothing else counts as a [block quote](#block-quotes). Here is a simple example: @@ -2539,7 +2539,7 @@ An [ordered list marker](@ordered-list-marker) is a sequence of one of more digits (`0-9`), followed by either a `.` character or a `)` character. -The following rules define [list item]s: +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-space character] and not separated @@ -3094,13 +3094,13 @@ Four spaces indent gives a code block: 5. **Laziness.** If a string of lines *Ls* constitute a [list - item] with contents *Bs*, then the result of deleting + item](#list-items) with contents *Bs*, then the result of deleting some or all of the indentation from one or more lines in which the next [non-space character] after the indentation is [paragraph continuation text] is a list item with the same contents and attributes. The unindented lines are called - [lazy continuation lines](@lazy-continuation-line). + [lazy continuation line](@lazy-continuation-line)s. Here is an example with [lazy continuation line]s: @@ -3173,7 +3173,7 @@ continued here.

                  6. **That's all.** Nothing that is not counted as a list item by rules - #1--5 counts as a [list item]. + #1--5 counts as a [list item](#list-items). The rules for sublists follow from the general rules above. A sublist must be indented the same number of spaces a paragraph would need to be @@ -5853,7 +5853,7 @@ and autolinks over link grouping:

                  [foohttp://example.com?search=](uri)

                  . -There are three kinds of [reference links](@reference-link): +There are three kinds of [reference link](@reference-link)s: [full](#full-reference-link), [collapsed](#collapsed-reference-link), and [shortcut](#shortcut-reference-link). -- cgit 0.0.5-2-1-g0f52 From 4e230226d1ffa3916fb7ae52a6b93fdf929ee850 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 12:27:45 -0800 Subject: Updated LICENSE, renamed to COPYING. This update clarifies the provenance and license of buffer.h, buffer.c, chunk.h, utf8.h, utf8.c. @vmg certifies by merging this PR that the license and copyright information are accurate. --- COPYING | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 70 ------------------------------------ Makefile | 2 +- 3 files changed, 122 insertions(+), 71 deletions(-) create mode 100644 COPYING delete mode 100644 LICENSE diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000..8a63e5b3ec --- /dev/null +++ b/COPYING @@ -0,0 +1,121 @@ +Copyright (c) 2014, John MacFarlane + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of John MacFarlane nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c, +html_unescape.gperf, html_unescape.h + +derive from https://github.com/vmg/houdini (with some modifications) + +Copyright (C) 2012 Vicent Martí + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +buffer.h, buffer.c, chunk.h, utf8.h, utf8.c + +are derived from code (C) 2012 Github, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The polyfill for String.fromCodePoint included in commonmark.js is +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + +The normalization code in runtests.py was derived from the +markdowntest project, Copyright 2013 Karl Dubost: + +The MIT License (MIT) + +Copyright (c) 2013 Karl Dubost + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/LICENSE b/LICENSE deleted file mode 100644 index c8377be601..0000000000 --- a/LICENSE +++ /dev/null @@ -1,70 +0,0 @@ -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of John MacFarlane nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -The polyfill for String.fromCodePoint included in commonmark.js is -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/Makefile b/Makefile index 7c53359202..8be2d7a004 100644 --- a/Makefile +++ b/Makefile @@ -65,7 +65,7 @@ archive: spec.html $(BUILDDIR) man/man1/cmark.1 man/make_man_page.py cp CMakeLists.txt $(PKGDIR); \ perl -ne '$$p++ if /^### JavaScript/; print if (!$$p)' Makefile > $(PKGDIR)/Makefile; \ cp -a Makefile.nmake nmake.bat $(PKGDIR); \ - cp -a README.md LICENSE spec.txt $(PKGDIR)/; \ + cp -a README.md COPYING spec.txt $(PKGDIR)/; \ tar czf $(TARBALL) $(PKGDIR); \ zip -q -r $(ZIPARCHIVE) $(PKGDIR); \ rm -rf $(PKGDIR) ; \ -- cgit 0.0.5-2-1-g0f52 From 9a5c98fe0d6de2a1a940bc8b3209ba0c4fadf7c4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 16:45:23 -0800 Subject: Added 'make astyle' to reformat code consistently. --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7c53359202..0da8449b15 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ PROG?=$(BUILDDIR)/src/cmark BENCHINP?=README.md JSMODULES=$(wildcard js/lib/*.js) -.PHONY: all spec leakcheck clean fuzztest dingus upload jshint test testjs benchjs update-site upload-site check npm debug mingw archive tarball ziparchive testarchive testtarball testziparchive testlib bench apidoc +.PHONY: all spec leakcheck clean fuzztest dingus upload jshint test testjs benchjs update-site upload-site check npm debug mingw archive tarball ziparchive testarchive testtarball testziparchive testlib bench astyle all: $(PROG) @echo "Binaries can be found in $(BUILDDIR)/src" @@ -142,6 +142,10 @@ bench: $(BENCHFILE) done \ } 2>&1 | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py' +astyle: + astyle --style=linux -t -p -r 'src/*.c' --exclude=scanners.c + astyle --style=linux -t -p -r 'src/*.h' --exclude=html_unescape.h + operf: $(PROG) operf $(PROG) <$(BENCHINP) >/dev/null -- cgit 0.0.5-2-1-g0f52 From 1b6afb7654d29eced20de720d7b5d37fb861bad3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 16:45:38 -0800 Subject: Reformatted code consistently with astyle. --- src/blocks.c | 233 +++++++++++++++--------------- src/buffer.c | 14 +- src/buffer.h | 2 +- src/cmark.h | 46 +++--- src/cmark_ctype.c | 35 ++--- src/houdini_href_e.c | 8 +- src/houdini_html_e.c | 14 +- src/html.c | 36 +++-- src/inlines.c | 144 +++++++++---------- src/main.c | 16 +-- src/man.c | 14 +- src/node.c | 185 ++++++++++++++---------- src/references.c | 2 +- src/utf8.c | 396 +++++++++++++++++++++++++-------------------------- src/xml.c | 34 ++--- 15 files changed, 605 insertions(+), 574 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 6a89312d56..315ddff859 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -20,11 +20,11 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, - bool eof); + bool eof); static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - size_t bytes); + size_t bytes); static cmark_node* make_block(cmark_node_type tag, int start_line, int start_column) { @@ -88,13 +88,13 @@ static bool is_blank(cmark_strbuf *s, int offset) { while (offset < s->size) { switch (s->ptr[offset]) { - case '\n': - return true; - case ' ': - offset++; - break; - default: - return false; + case '\n': + return true; + case ' ': + offset++; + break; + default: + return false; } } @@ -104,16 +104,16 @@ static bool is_blank(cmark_strbuf *s, int offset) static inline bool can_contain(cmark_node_type parent_type, cmark_node_type child_type) { return ( parent_type == NODE_DOCUMENT || - parent_type == NODE_BLOCK_QUOTE || - parent_type == NODE_ITEM || - (parent_type == NODE_LIST && child_type == NODE_ITEM) ); + parent_type == NODE_BLOCK_QUOTE || + parent_type == NODE_ITEM || + (parent_type == NODE_LIST && child_type == NODE_ITEM) ); } static inline bool accepts_lines(cmark_node_type block_type) { return (block_type == NODE_PARAGRAPH || - block_type == NODE_HEADER || - block_type == NODE_CODE_BLOCK); + block_type == NODE_HEADER || + block_type == NODE_CODE_BLOCK); } static void add_line(cmark_node* cmark_node, cmark_chunk *ch, int offset) @@ -199,96 +199,96 @@ finalize(cmark_parser *parser, cmark_node* b) b->end_line = parser->line_number; b->end_column = parser->last_line_length; } else if (b->type == NODE_DOCUMENT || - (b->type == NODE_CODE_BLOCK && b->as.code.fenced) || - (b->type == NODE_HEADER && b->as.header.setext)) { + (b->type == NODE_CODE_BLOCK && b->as.code.fenced) || + (b->type == NODE_HEADER && b->as.header.setext)) { b->end_line = parser->line_number; b->end_column = parser->curline->size - - (parser->curline->ptr[parser->curline->size - 1] == '\n' ? - 1 : 0); + (parser->curline->ptr[parser->curline->size - 1] == '\n' ? + 1 : 0); } else { b->end_line = parser->line_number - 1; b->end_column = parser->last_line_length; } switch (b->type) { - case NODE_PARAGRAPH: - while (cmark_strbuf_at(&b->string_content, 0) == '[' && - (pos = cmark_parse_reference_inline(&b->string_content, parser->refmap))) { + case NODE_PARAGRAPH: + while (cmark_strbuf_at(&b->string_content, 0) == '[' && + (pos = cmark_parse_reference_inline(&b->string_content, parser->refmap))) { - cmark_strbuf_drop(&b->string_content, pos); - } - if (is_blank(&b->string_content, 0)) { - // remove blank node (former reference def) - cmark_node_free(b); - } - break; + cmark_strbuf_drop(&b->string_content, pos); + } + if (is_blank(&b->string_content, 0)) { + // remove blank node (former reference def) + cmark_node_free(b); + } + break; - case NODE_CODE_BLOCK: - if (!b->as.code.fenced) { // indented code - remove_trailing_blank_lines(&b->string_content); - cmark_strbuf_putc(&b->string_content, '\n'); - } else { + case NODE_CODE_BLOCK: + if (!b->as.code.fenced) { // indented code + remove_trailing_blank_lines(&b->string_content); + cmark_strbuf_putc(&b->string_content, '\n'); + } else { - // first line of contents becomes info - firstlinelen = cmark_strbuf_strchr(&b->string_content, '\n', 0); + // first line of contents becomes info + firstlinelen = cmark_strbuf_strchr(&b->string_content, '\n', 0); - cmark_strbuf tmp = GH_BUF_INIT; - houdini_unescape_html_f( - &tmp, - b->string_content.ptr, - firstlinelen - ); - cmark_strbuf_trim(&tmp); - cmark_strbuf_unescape(&tmp); - b->as.code.info = cmark_chunk_buf_detach(&tmp); + cmark_strbuf tmp = GH_BUF_INIT; + houdini_unescape_html_f( + &tmp, + b->string_content.ptr, + firstlinelen + ); + cmark_strbuf_trim(&tmp); + cmark_strbuf_unescape(&tmp); + b->as.code.info = cmark_chunk_buf_detach(&tmp); - cmark_strbuf_drop(&b->string_content, firstlinelen + 1); - } - b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); - break; + cmark_strbuf_drop(&b->string_content, firstlinelen + 1); + } + b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); + break; - case NODE_HTML: - b->as.literal = cmark_chunk_buf_detach(&b->string_content); - break; + case NODE_HTML: + b->as.literal = cmark_chunk_buf_detach(&b->string_content); + break; - case NODE_LIST: // determine tight/loose status - b->as.list.tight = true; // tight by default - item = b->first_child; + case NODE_LIST: // determine tight/loose status + b->as.list.tight = true; // tight by default + item = b->first_child; - while (item) { - // check for non-final non-empty list item ending with blank line: - if (item->last_line_blank && item->next) { + while (item) { + // check for non-final non-empty list item ending with blank line: + if (item->last_line_blank && item->next) { + b->as.list.tight = false; + break; + } + // recurse into children of list item, to see if there are + // spaces between them: + subitem = item->first_child; + while (subitem) { + if (ends_with_blank_line(subitem) && + (item->next || subitem->next)) { b->as.list.tight = false; break; } - // recurse into children of list item, to see if there are - // spaces between them: - subitem = item->first_child; - while (subitem) { - if (ends_with_blank_line(subitem) && - (item->next || subitem->next)) { - b->as.list.tight = false; - break; - } - subitem = subitem->next; - } - if (!(b->as.list.tight)) { - break; - } - item = item->next; + subitem = subitem->next; } + if (!(b->as.list.tight)) { + break; + } + item = item->next; + } - break; + break; - default: - break; + default: + break; } return parent; } // Add a cmark_node as child of another. Return pointer to child. static cmark_node* add_child(cmark_parser *parser, cmark_node* parent, - cmark_node_type block_type, int start_column) + cmark_node_type block_type, int start_column) { assert(parent); @@ -403,9 +403,9 @@ static int parse_list_marker(cmark_chunk *input, int pos, cmark_list **dataptr) static int lists_match(cmark_list *list_data, cmark_list *item_data) { return (list_data->list_type == item_data->list_type && - list_data->delimiter == item_data->delimiter && - // list_data->marker_offset == item_data.marker_offset && - list_data->bullet_char == item_data->bullet_char); + list_data->delimiter == item_data->delimiter && + // list_data->marker_offset == item_data.marker_offset && + list_data->bullet_char == item_data->bullet_char); } static cmark_node *finalize_document(cmark_parser *parser) @@ -460,23 +460,21 @@ cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, - bool eof) + bool eof) { const unsigned char *end = buffer + len; while (buffer < end) { const unsigned char *eol - = (const unsigned char *)memchr(buffer, '\n', - end - buffer); + = (const unsigned char *)memchr(buffer, '\n', + end - buffer); size_t line_len; if (eol) { line_len = eol + 1 - buffer; - } - else if (eof) { + } else if (eof) { line_len = end - buffer; - } - else { + } else { cmark_strbuf_put(parser->linebuf, buffer, end - buffer); break; } @@ -484,10 +482,9 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, if (parser->linebuf->size > 0) { cmark_strbuf_put(parser->linebuf, buffer, line_len); S_process_line(parser, parser->linebuf->ptr, - parser->linebuf->size); + parser->linebuf->size); cmark_strbuf_clear(parser->linebuf); - } - else { + } else { S_process_line(parser, buffer, line_len); } @@ -572,9 +569,9 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } else if (container->type == NODE_ITEM) { if (indent >= container->as.list.marker_offset + - container->as.list.padding) { + container->as.list.padding) { offset += container->as.list.marker_offset + - container->as.list.padding; + container->as.list.padding; } else if (blank) { offset = first_nonspace; } else { @@ -639,7 +636,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // unless last matched container is code cmark_node, try new container starts: while (container->type != NODE_CODE_BLOCK && - container->type != NODE_HTML) { + container->type != NODE_HTML) { first_nonspace = offset; while (peek_at(&input, first_nonspace) == ' ') @@ -700,10 +697,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // note, we don't adjust offset because the tag is part of the text } else if (container->type == NODE_PARAGRAPH && - (lev = scan_setext_header_line(&input, first_nonspace)) && - // check that there is only one line in the paragraph: - cmark_strbuf_strrchr(&container->string_content, '\n', - cmark_strbuf_len(&container->string_content) - 2) < 0) { + (lev = scan_setext_header_line(&input, first_nonspace)) && + // check that there is only one line in the paragraph: + cmark_strbuf_strrchr(&container->string_content, '\n', + cmark_strbuf_len(&container->string_content) - 2) < 0) { container->type = NODE_HEADER; container->as.header.level = lev; @@ -711,7 +708,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) offset = input.len - 1; } else if (!(container->type == NODE_PARAGRAPH && !all_matched) && - (matched = scan_hrule(&input, first_nonspace))) { + (matched = scan_hrule(&input, first_nonspace))) { // it's only now that we know the line is not part of a setext header: container = add_child(parser, container, NODE_HRULE, first_nonspace + 1); @@ -743,16 +740,16 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) data->marker_offset = indent; if (container->type != NODE_LIST || - !lists_match(&container->as.list, data)) { + !lists_match(&container->as.list, data)) { container = add_child(parser, container, NODE_LIST, - first_nonspace + 1); + first_nonspace + 1); memcpy(&container->as.list, data, sizeof(*data)); } // add the list item container = add_child(parser, container, NODE_ITEM, - first_nonspace + 1); + first_nonspace + 1); /* TODO: static */ memcpy(&container->as.list, data, sizeof(*data)); free(data); @@ -781,13 +778,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // lists or breaking out of lists. we also don't set last_line_blank // on an empty list item. container->last_line_blank = (blank && - container->type != NODE_BLOCK_QUOTE && - container->type != NODE_HEADER && - !(container->type == NODE_CODE_BLOCK && - container->as.code.fenced) && - !(container->type == NODE_ITEM && - container->first_child == NULL && - container->start_line == parser->line_number)); + container->type != NODE_BLOCK_QUOTE && + container->type != NODE_HEADER && + !(container->type == NODE_CODE_BLOCK && + container->as.code.fenced) && + !(container->type == NODE_ITEM && + container->first_child == NULL && + container->start_line == parser->line_number)); cmark_node *cont = container; while (cont->parent) { @@ -796,10 +793,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } if (cur != last_matched_container && - container == last_matched_container && - !blank && - cur->type == NODE_PARAGRAPH && - cmark_strbuf_len(&cur->string_content) > 0) { + container == last_matched_container && + !blank && + cur->type == NODE_PARAGRAPH && + cmark_strbuf_len(&cur->string_content) > 0) { add_line(cur, &input, offset); @@ -817,11 +814,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) add_line(container, &input, offset); } else if (container->type == NODE_CODE_BLOCK && - container->as.code.fenced) { + container->as.code.fenced) { matched = 0; if (indent <= 3 && - peek_at(&input, first_nonspace) == container->as.code.fence_char) { + peek_at(&input, first_nonspace) == container->as.code.fence_char) { int fence_len = scan_close_code_fence(&input, first_nonspace); if (fence_len > container->as.code.fence_length) matched = 1; @@ -853,7 +850,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) add_line(container, &input, first_nonspace); } else if (container->type != NODE_HRULE && - container->type != NODE_HEADER) { + container->type != NODE_HEADER) { // create paragraph container for line container = add_child(parser, container, NODE_PARAGRAPH, first_nonspace + 1); @@ -866,9 +863,9 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) parser->current = container; } parser->last_line_length = parser->curline->size - - (parser->curline->ptr[parser->curline->size - 1] == '\n' ? - 1 : 0); -; + (parser->curline->ptr[parser->curline->size - 1] == '\n' ? + 1 : 0); + ; cmark_strbuf_clear(parser->curline); } @@ -877,7 +874,7 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { if (parser->linebuf->size) { S_process_line(parser, parser->linebuf->ptr, - parser->linebuf->size); + parser->linebuf->size); cmark_strbuf_clear(parser->linebuf); } diff --git a/src/buffer.c b/src/buffer.c index 87d817bf66..0df65617fa 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -130,8 +130,8 @@ int cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len) int cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { return cmark_strbuf_set(buf, - (const unsigned char *)string, - string ? strlen(string) : 0); + (const unsigned char *)string, + string ? strlen(string) : 0); } int cmark_strbuf_putc(cmark_strbuf *buf, int c) @@ -171,10 +171,10 @@ int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) va_copy(args, ap); len = vsnprintf( - (char *)buf->ptr + buf->size, - buf->asize - buf->size, - format, args - ); + (char *)buf->ptr + buf->size, + buf->asize - buf->size, + format, args + ); va_end(args); @@ -265,7 +265,7 @@ int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) { int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size)); return (result != 0) ? result : - (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; + (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; } int cmark_strbuf_strchr(const cmark_strbuf *buf, int c, int pos) diff --git a/src/buffer.h b/src/buffer.h index 875cf8c448..fb9f91067e 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -93,7 +93,7 @@ int cmark_strbuf_putc(cmark_strbuf *buf, int c); int cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len); int cmark_strbuf_puts(cmark_strbuf *buf, const char *string); int cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) - CMARK_ATTRIBUTE((format (printf, 2, 3))); +CMARK_ATTRIBUTE((format (printf, 2, 3))); int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap); void cmark_strbuf_clear(cmark_strbuf *buf); diff --git a/src/cmark.h b/src/cmark.h index da81de6092..2051a04acf 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -447,29 +447,29 @@ char *cmark_render_man(cmark_node *root, long options); */ #ifndef CMARK_NO_SHORT_NAMES - #define NODE_DOCUMENT CMARK_NODE_DOCUMENT - #define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE - #define NODE_LIST CMARK_NODE_LIST - #define NODE_ITEM CMARK_NODE_ITEM - #define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK - #define NODE_HTML CMARK_NODE_HTML - #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH - #define NODE_HEADER CMARK_NODE_HEADER - #define NODE_HRULE CMARK_NODE_HRULE - #define NODE_TEXT CMARK_NODE_TEXT - #define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK - #define NODE_LINEBREAK CMARK_NODE_LINEBREAK - #define NODE_CODE CMARK_NODE_CODE - #define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML - #define NODE_EMPH CMARK_NODE_EMPH - #define NODE_STRONG CMARK_NODE_STRONG - #define NODE_LINK CMARK_NODE_LINK - #define NODE_IMAGE CMARK_NODE_IMAGE - #define NODE_LINK_LABEL CMARK_NODE_LINK_LABEL - #define BULLET_LIST CMARK_BULLET_LIST - #define ORDERED_LIST CMARK_ORDERED_LIST - #define PERIOD_DELIM CMARK_PERIOD_DELIM - #define PAREN_DELIM CMARK_PAREN_DELIM +#define NODE_DOCUMENT CMARK_NODE_DOCUMENT +#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE +#define NODE_LIST CMARK_NODE_LIST +#define NODE_ITEM CMARK_NODE_ITEM +#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK +#define NODE_HTML CMARK_NODE_HTML +#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH +#define NODE_HEADER CMARK_NODE_HEADER +#define NODE_HRULE CMARK_NODE_HRULE +#define NODE_TEXT CMARK_NODE_TEXT +#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK +#define NODE_LINEBREAK CMARK_NODE_LINEBREAK +#define NODE_CODE CMARK_NODE_CODE +#define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML +#define NODE_EMPH CMARK_NODE_EMPH +#define NODE_STRONG CMARK_NODE_STRONG +#define NODE_LINK CMARK_NODE_LINK +#define NODE_IMAGE CMARK_NODE_IMAGE +#define NODE_LINK_LABEL CMARK_NODE_LINK_LABEL +#define BULLET_LIST CMARK_BULLET_LIST +#define ORDERED_LIST CMARK_ORDERED_LIST +#define PERIOD_DELIM CMARK_PERIOD_DELIM +#define PAREN_DELIM CMARK_PAREN_DELIM #endif #ifdef __cplusplus diff --git a/src/cmark_ctype.c b/src/cmark_ctype.c index a3871a89b0..5de8199c28 100644 --- a/src/cmark_ctype.c +++ b/src/cmark_ctype.c @@ -5,23 +5,24 @@ /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other */ static const int8_t cmark_ctype_class[256] = { -/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ -/* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, -/* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, -/* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, -/* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, -/* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, + /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, + /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, + /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; /** * Returns 1 if c is a "whitespace" character as defined by the spec. diff --git a/src/houdini_href_e.c b/src/houdini_href_e.c index c8949d4f74..7527780bdc 100644 --- a/src/houdini_href_e.c +++ b/src/houdini_href_e.c @@ -83,10 +83,10 @@ houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, size_t size) cmark_strbuf_puts(ob, "'"); break; - /* the space can be escaped to %20 or a plus - * sign. we're going with the generic escape - * for now. the plus thing is more commonly seen - * when building GET strings */ + /* the space can be escaped to %20 or a plus + * sign. we're going with the generic escape + * for now. the plus thing is more commonly seen + * when building GET strings */ #if 0 case ' ': cmark_strbuf_putc(ob, '+'); diff --git a/src/houdini_html_e.c b/src/houdini_html_e.c index 4e523f538c..1a4c3e113c 100644 --- a/src/houdini_html_e.c +++ b/src/houdini_html_e.c @@ -35,13 +35,13 @@ static const char HTML_ESCAPE_TABLE[] = { }; static const char *HTML_ESCAPES[] = { - "", - """, - "&", - "'", - "/", - "<", - ">" + "", + """, + "&", + "'", + "/", + "<", + ">" }; int diff --git a/src/html.c b/src/html.c index bb04458fb2..abc3e8371d 100644 --- a/src/html.c +++ b/src/html.c @@ -39,19 +39,20 @@ struct render_state { }; static void -S_render_sourcepos(cmark_node *node, cmark_strbuf *html, long options) { +S_render_sourcepos(cmark_node *node, cmark_strbuf *html, long options) +{ if (CMARK_OPT_SOURCEPOS & options) { cmark_strbuf_printf(html, " data-sourcepos=\"%d:%d-%d:%d\"", - cmark_node_get_start_line(node), - cmark_node_get_start_column(node), - cmark_node_get_end_line(node), - cmark_node_get_end_column(node)); + cmark_node_get_start_line(node), + cmark_node_get_start_column(node), + cmark_node_get_end_line(node), + cmark_node_get_end_column(node)); } } static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, long options) + struct render_state *state, long options) { cmark_node *parent; cmark_node *grandparent; @@ -72,7 +73,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE: case CMARK_NODE_INLINE_HTML: escape_html(html, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); break; case CMARK_NODE_LINEBREAK: @@ -112,23 +113,21 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(html, "\n"); - } - else if (start == 1) { + } else if (start == 1) { cmark_strbuf_puts(html, "\n"); - } - else { + } else { cmark_strbuf_printf(html, - "
                    \n"); } } else { cmark_strbuf_puts(html, - list_type == CMARK_BULLET_LIST ? - "\n" : "
                  \n"); + list_type == CMARK_BULLET_LIST ? + "\n" : "\n"); } break; } @@ -165,8 +164,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(html, ""); - } - else { + } else { int first_tag = 0; while (first_tag < node->as.code.info.len && node->as.code.info.data[first_tag] != ' ') { @@ -181,7 +179,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } escape_html(html, node->as.code.literal.data, - node->as.code.literal.len); + node->as.code.literal.len); cmark_strbuf_puts(html, "
                  \n"); break; @@ -220,7 +218,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: escape_html(html, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); break; case CMARK_NODE_LINEBREAK: diff --git a/src/inlines.c b/src/inlines.c index 6bed1326fb..2487f63ede 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -47,7 +47,7 @@ S_insert_emph(subject *subj, delimiter *opener, delimiter *closer); static int parse_inline(subject* subj, cmark_node * parent); static void subject_from_buf(subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap); + cmark_reference_map *refmap); static int subject_find_special_char(subject *subj); static unsigned char *cmark_clean_autolink(cmark_chunk *url, int is_email) @@ -72,11 +72,11 @@ static inline cmark_node *make_link(cmark_node *label, unsigned char *url, unsig if(e != NULL) { e->type = CMARK_NODE_LINK; e->first_child = label; - e->last_child = label; + e->last_child = label; e->as.link.url = url; e->as.link.title = title; e->next = NULL; - label->parent = e; + label->parent = e; } return e; } @@ -94,14 +94,14 @@ static inline cmark_node* make_literal(cmark_node_type t, cmark_chunk s) e->type = t; e->as.literal = s; e->next = NULL; - e->prev = NULL; - e->parent = NULL; - e->first_child = NULL; - e->last_child = NULL; - // These fields aren't used for inlines: - e->start_line = 0; - e->start_column = 0; - e->end_line = 0; + e->prev = NULL; + e->parent = NULL; + e->first_child = NULL; + e->last_child = NULL; + // These fields aren't used for inlines: + e->start_line = 0; + e->start_column = 0; + e->end_line = 0; } return e; } @@ -113,14 +113,14 @@ static inline cmark_node* make_simple(cmark_node_type t) if(e != NULL) { e->type = t; e->next = NULL; - e->prev = NULL; - e->parent = NULL; - e->first_child = NULL; - e->last_child = NULL; - // These fields aren't used for inlines: - e->start_line = 0; - e->start_column = 0; - e->end_line = 0; + e->prev = NULL; + e->parent = NULL; + e->first_child = NULL; + e->last_child = NULL; + // These fields aren't used for inlines: + e->start_line = 0; + e->start_column = 0; + e->end_line = 0; } return e; } @@ -141,7 +141,7 @@ static unsigned char *bufdup(const unsigned char *buf) } static void subject_from_buf(subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap) + cmark_reference_map *refmap) { e->input.data = buffer->ptr; e->input.len = buffer->size; @@ -212,7 +212,7 @@ static int scan_to_closing_backticks(subject* subj, int openticklength) advance(subj); numticks++; } - if (numticks != openticklength){ + if (numticks != openticklength) { return(scan_to_closing_backticks(subj, openticklength)); } return (subj->pos); @@ -261,7 +261,7 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) before_char_pos -= 1; } len = utf8proc_iterate(subj->input.data + before_char_pos, - subj->pos - before_char_pos, &before_char); + subj->pos - before_char_pos, &before_char); if (len == -1) { before_char = 10; } @@ -273,23 +273,23 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) } len = utf8proc_iterate(subj->input.data + subj->pos, - subj->input.len - subj->pos, &after_char); + subj->input.len - subj->pos, &after_char); if (len == -1) { after_char = 10; } *can_open = numdelims > 0 && !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); + !(utf8proc_is_punctuation(after_char) && + !utf8proc_is_space(before_char) && + !utf8proc_is_punctuation(before_char)); *can_close = numdelims > 0 && !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && - !utf8proc_is_punctuation(after_char)); + !(utf8proc_is_punctuation(before_char) && + !utf8proc_is_space(after_char) && + !utf8proc_is_punctuation(after_char)); if (c == '_') { *can_open = *can_open && !(before_char < 128 && - cmark_isalnum((char)before_char)); + cmark_isalnum((char)before_char)); *can_close = *can_close && !(before_char < 128 && - cmark_isalnum((char)after_char)); + cmark_isalnum((char)after_char)); } return numdelims; } @@ -326,10 +326,10 @@ static void remove_delimiter(subject *subj, delimiter *delim) } static void push_delimiter(subject *subj, unsigned char c, bool can_open, - bool can_close, cmark_node *inl_text) + bool can_close, cmark_node *inl_text) { delimiter *delim = - (delimiter*)malloc(sizeof(delimiter)); + (delimiter*)malloc(sizeof(delimiter)); if (delim == NULL) { return; } @@ -418,7 +418,7 @@ S_insert_emph(subject *subj, delimiter *opener, delimiter *closer) // calculate the actual number of characters used from this closer if (closer_num_chars < 3 || opener_num_chars < 3) { use_delims = closer_num_chars <= opener_num_chars ? - closer_num_chars : opener_num_chars; + closer_num_chars : opener_num_chars; } else { // closer and opener both have >= 3 characters use_delims = closer_num_chars % 2 == 0 ? 2 : 1; } @@ -448,8 +448,7 @@ S_insert_emph(subject *subj, delimiter *opener, delimiter *closer) emph->type = use_delims == 1 ? NODE_EMPH : NODE_STRONG; // remove opener from list remove_delimiter(subj, opener); - } - else { + } else { // create new emph or strong, and splice it in to our inlines // between the opener and closer emph = use_delims == 1 ? make_emph() : make_strong(); @@ -510,9 +509,9 @@ static cmark_node* handle_entity(subject* subj) advance(subj); len = houdini_unescape_ent(&ent, - subj->input.data + subj->pos, - subj->input.len - subj->pos - ); + subj->input.data + subj->pos, + subj->input.len - subj->pos + ); if (len == 0) return make_str(cmark_chunk_literal("&")); @@ -557,26 +556,26 @@ unsigned char *cmark_clean_url(cmark_chunk *url) unsigned char *cmark_clean_title(cmark_chunk *title) { - cmark_strbuf buf = GH_BUF_INIT; - unsigned char first, last; - - if (title->len == 0) - return NULL; - - first = title->data[0]; - last = title->data[title->len - 1]; - - // remove surrounding quotes if any: - if ((first == '\'' && last == '\'') || - (first == '(' && last == ')') || - (first == '"' && last == '"')) { - houdini_unescape_html_f(&buf, title->data + 1, title->len - 2); - } else { - houdini_unescape_html_f(&buf, title->data, title->len); - } - - cmark_strbuf_unescape(&buf); - return cmark_strbuf_detach(&buf); + cmark_strbuf buf = GH_BUF_INIT; + unsigned char first, last; + + if (title->len == 0) + return NULL; + + first = title->data[0]; + last = title->data[title->len - 1]; + + // remove surrounding quotes if any: + if ((first == '\'' && last == '\'') || + (first == '(' && last == ')') || + (first == '"' && last == '"')) { + houdini_unescape_html_f(&buf, title->data + 1, title->len - 2); + } else { + houdini_unescape_html_f(&buf, title->data, title->len); + } + + cmark_strbuf_unescape(&buf); + return cmark_strbuf_detach(&buf); } // Parse an autolink or HTML tag. @@ -595,9 +594,9 @@ static cmark_node* handle_pointy_brace(subject* subj) subj->pos += matchlen; return make_autolink( - make_str_with_entities(&contents), - contents, 0 - ); + make_str_with_entities(&contents), + contents, 0 + ); } // next try to match an email autolink @@ -607,9 +606,9 @@ static cmark_node* handle_pointy_brace(subject* subj) subj->pos += matchlen; return make_autolink( - make_str_with_entities(&contents), - contents, 1 - ); + make_str_with_entities(&contents), + contents, 1 + ); } // finally, try to match an html tag @@ -664,7 +663,7 @@ static int link_label(subject* subj, cmark_chunk *raw_label) return 1; } - noMatch: +noMatch: subj->pos = startpos; // rewind return 0; @@ -727,7 +726,7 @@ static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent) // ensure there are spaces btw url and title endtitle = (starttitle == endurl) ? starttitle : - starttitle + scan_link_title(&subj->input, starttitle); + starttitle + scan_link_title(&subj->input, starttitle); endall = endtitle + scan_spacechars(&subj->input, endtitle); @@ -755,7 +754,7 @@ static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent) if (!found_label || raw_label.len == 0) { cmark_chunk_free(&raw_label); raw_label = cmark_chunk_dup(&subj->input, opener->position, - initial_pos - opener->position - 1); + initial_pos - opener->position - 1); } if (!found_label) { @@ -803,7 +802,7 @@ match: // process_emphasis will remove this delimiter and all later ones. // Now, if we have a link, we also want to deactivate earlier link - // delimiters. (This code can be removed if we decide to allow links + // delimiters. (This code can be removed if we decide to allow links // inside links.) if (!is_image) { opener = subj->last_delim; @@ -861,7 +860,8 @@ static int subject_find_special_char(subject *subj) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; int n = subj->pos + 1; @@ -886,7 +886,7 @@ static int parse_inline(subject* subj, cmark_node * parent) if (c == 0) { return 0; } - switch(c){ + switch(c) { case '\n': new_inl = handle_newline(subj); break; @@ -960,7 +960,7 @@ static void spnl(subject* subj) bool seen_newline = false; while (peek_char(subj) == ' ' || (!seen_newline && - (seen_newline = peek_char(subj) == '\n'))) { + (seen_newline = peek_char(subj) == '\n'))) { advance(subj); } } diff --git a/src/main.c b/src/main.c index e849b823c8..eaef246855 100644 --- a/src/main.c +++ b/src/main.c @@ -8,8 +8,8 @@ #include "bench.h" #if defined(_WIN32) && !defined(__CYGWIN__) - #include - #include +#include +#include #endif typedef enum { @@ -31,7 +31,7 @@ void print_usage() } static void print_document(cmark_node *document, writer_format writer, - long options) + long options) { char *result; switch (writer) { @@ -80,11 +80,11 @@ int main(int argc, char *argv[]) } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; } else if ((strcmp(argv[i], "--help") == 0) || - (strcmp(argv[i], "-h") == 0)) { + (strcmp(argv[i], "-h") == 0)) { print_usage(); exit(0); } else if ((strcmp(argv[i], "-t") == 0) || - (strcmp(argv[i], "--to") == 0)) { + (strcmp(argv[i], "--to") == 0)) { i += 1; if (i < argc) { if (strcmp(argv[i], "man") == 0) { @@ -95,12 +95,12 @@ int main(int argc, char *argv[]) writer = FORMAT_XML; } else { fprintf(stderr, - "Unknown format %s\n", argv[i]); + "Unknown format %s\n", argv[i]); exit(1); } } else { fprintf(stderr, "No argument provided for %s\n", - argv[i - 1]); + argv[i - 1]); exit(1); } } else if (*argv[i] == '-') { @@ -115,7 +115,7 @@ int main(int argc, char *argv[]) FILE *fp = fopen(argv[files[i]], "r"); if (fp == NULL) { fprintf(stderr, "Error opening file %s: %s\n", - argv[files[i]], strerror(errno)); + argv[files[i]], strerror(errno)); exit(1); } diff --git a/src/man.c b/src/man.c index 176081fce5..2c8a3a5c50 100644 --- a/src/man.c +++ b/src/man.c @@ -44,7 +44,7 @@ struct render_state { static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state) + struct render_state *state) { cmark_node *tmp; cmark_strbuf *man = state->man; @@ -60,7 +60,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: case CMARK_NODE_CODE: escape_man(man, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); break; case CMARK_NODE_LINEBREAK: @@ -119,8 +119,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { cr(man); cmark_strbuf_puts(man, - cmark_node_get_header_level(node) == 1 ? - ".SH" : ".SS"); + cmark_node_get_header_level(node) == 1 ? + ".SH" : ".SS"); cr(man); } else { cr(man); @@ -131,7 +131,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cr(man); cmark_strbuf_puts(man, ".IP\n.nf\n\\f[C]\n"); escape_man(man, node->as.code.literal.data, - node->as.code.literal.len); + node->as.code.literal.len); cr(man); cmark_strbuf_puts(man, "\\f[]\n.fi"); cr(man); @@ -164,7 +164,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: escape_man(man, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); break; case CMARK_NODE_LINEBREAK: @@ -204,7 +204,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LINK: if (!entering) { cmark_strbuf_printf(man, " (%s)", - cmark_node_get_url(node)); + cmark_node_get_url(node)); } break; diff --git a/src/node.c b/src/node.c index 199dd38821..3785a27280 100644 --- a/src/node.c +++ b/src/node.c @@ -8,7 +8,8 @@ static void S_node_unlink(cmark_node *node); cmark_node* -cmark_node_new(cmark_node_type type) { +cmark_node_new(cmark_node_type type) +{ cmark_node *node = (cmark_node *)calloc(1, sizeof(*node)); node->type = type; @@ -39,7 +40,7 @@ void S_free_nodes(cmark_node *e) cmark_node *next; while (e != NULL) { cmark_strbuf_free(&e->string_content); - switch (e->type){ + switch (e->type) { case NODE_CODE_BLOCK: cmark_chunk_free(&e->as.code.info); cmark_chunk_free(&e->as.code.literal); @@ -70,7 +71,8 @@ void S_free_nodes(cmark_node *e) } void -cmark_node_free(cmark_node *node) { +cmark_node_free(cmark_node *node) +{ S_node_unlink(node); node->next = NULL; S_free_nodes(node); @@ -94,25 +96,44 @@ cmark_node_get_type_string(cmark_node *node) } switch (node->type) { - case CMARK_NODE_NONE: return "none"; - case CMARK_NODE_DOCUMENT: return "document"; - case CMARK_NODE_BLOCK_QUOTE: return "block_quote"; - case CMARK_NODE_LIST: return "list"; - case CMARK_NODE_ITEM: return "item"; - case CMARK_NODE_CODE_BLOCK: return "code_block"; - case CMARK_NODE_HTML: return "html"; - case CMARK_NODE_PARAGRAPH: return "paragraph"; - case CMARK_NODE_HEADER: return "header"; - case CMARK_NODE_HRULE: return "hrule"; - case CMARK_NODE_TEXT: return "text"; - case CMARK_NODE_SOFTBREAK: return "softbreak"; - case CMARK_NODE_LINEBREAK: return "linebreak"; - case CMARK_NODE_CODE: return "code"; - case CMARK_NODE_INLINE_HTML: return "inline_html"; - case CMARK_NODE_EMPH: return "emph"; - case CMARK_NODE_STRONG: return "strong"; - case CMARK_NODE_LINK: return "link"; - case CMARK_NODE_IMAGE: return "image"; + case CMARK_NODE_NONE: + return "none"; + case CMARK_NODE_DOCUMENT: + return "document"; + case CMARK_NODE_BLOCK_QUOTE: + return "block_quote"; + case CMARK_NODE_LIST: + return "list"; + case CMARK_NODE_ITEM: + return "item"; + case CMARK_NODE_CODE_BLOCK: + return "code_block"; + case CMARK_NODE_HTML: + return "html"; + case CMARK_NODE_PARAGRAPH: + return "paragraph"; + case CMARK_NODE_HEADER: + return "header"; + case CMARK_NODE_HRULE: + return "hrule"; + case CMARK_NODE_TEXT: + return "text"; + case CMARK_NODE_SOFTBREAK: + return "softbreak"; + case CMARK_NODE_LINEBREAK: + return "linebreak"; + case CMARK_NODE_CODE: + return "code"; + case CMARK_NODE_INLINE_HTML: + return "inline_html"; + case CMARK_NODE_EMPH: + return "emph"; + case CMARK_NODE_STRONG: + return "strong"; + case CMARK_NODE_LINK: + return "link"; + case CMARK_NODE_IMAGE: + return "image"; } return ""; @@ -169,7 +190,8 @@ cmark_node_last_child(cmark_node *node) } static char* -S_strdup(const char *str) { +S_strdup(const char *str) +{ size_t size = strlen(str) + 1; char *dup = (char *)malloc(size); memcpy(dup, str, size); @@ -177,7 +199,8 @@ S_strdup(const char *str) { } const char* -cmark_node_get_literal(cmark_node *node) { +cmark_node_get_literal(cmark_node *node) +{ if (node == NULL) { return NULL; } @@ -200,7 +223,8 @@ cmark_node_get_literal(cmark_node *node) { } int -cmark_node_set_literal(cmark_node *node, const char *content) { +cmark_node_set_literal(cmark_node *node, const char *content) +{ if (node == NULL) { return 0; } @@ -225,7 +249,8 @@ cmark_node_set_literal(cmark_node *node, const char *content) { } int -cmark_node_get_header_level(cmark_node *node) { +cmark_node_get_header_level(cmark_node *node) +{ if (node == NULL) { return 0; } @@ -242,7 +267,8 @@ cmark_node_get_header_level(cmark_node *node) { } int -cmark_node_set_header_level(cmark_node *node, int level) { +cmark_node_set_header_level(cmark_node *node, int level) +{ if (node == NULL || level < 1 || level > 6) { return 0; } @@ -260,21 +286,22 @@ cmark_node_set_header_level(cmark_node *node, int level) { } cmark_list_type -cmark_node_get_list_type(cmark_node *node) { +cmark_node_get_list_type(cmark_node *node) +{ if (node == NULL) { return CMARK_NO_LIST; } if (node->type == CMARK_NODE_LIST) { return node->as.list.list_type; - } - else { + } else { return CMARK_NO_LIST; } } int -cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { +cmark_node_set_list_type(cmark_node *node, cmark_list_type type) +{ if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) { return 0; } @@ -286,28 +313,28 @@ cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { if (node->type == CMARK_NODE_LIST) { node->as.list.list_type = type; return 1; - } - else { + } else { return 0; } } cmark_delim_type -cmark_node_get_list_delim(cmark_node *node) { +cmark_node_get_list_delim(cmark_node *node) +{ if (node == NULL) { return CMARK_NO_DELIM; } if (node->type == CMARK_NODE_LIST) { return node->as.list.delimiter; - } - else { + } else { return CMARK_NO_DELIM; } } int -cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) { +cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) +{ if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) { return 0; } @@ -319,28 +346,28 @@ cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) { if (node->type == CMARK_NODE_LIST) { node->as.list.delimiter = delim; return 1; - } - else { + } else { return 0; } } int -cmark_node_get_list_start(cmark_node *node) { +cmark_node_get_list_start(cmark_node *node) +{ if (node == NULL) { return 0; } if (node->type == CMARK_NODE_LIST) { return node->as.list.start; - } - else { + } else { return 0; } } int -cmark_node_set_list_start(cmark_node *node, int start) { +cmark_node_set_list_start(cmark_node *node, int start) +{ if (node == NULL || start < 0) { return 0; } @@ -348,28 +375,28 @@ cmark_node_set_list_start(cmark_node *node, int start) { if (node->type == CMARK_NODE_LIST) { node->as.list.start = start; return 1; - } - else { + } else { return 0; } } int -cmark_node_get_list_tight(cmark_node *node) { +cmark_node_get_list_tight(cmark_node *node) +{ if (node == NULL) { return 0; } if (node->type == CMARK_NODE_LIST) { return node->as.list.tight; - } - else { + } else { return 0; } } int -cmark_node_set_list_tight(cmark_node *node, int tight) { +cmark_node_set_list_tight(cmark_node *node, int tight) +{ if (node == NULL) { return 0; } @@ -377,28 +404,28 @@ cmark_node_set_list_tight(cmark_node *node, int tight) { if (node->type == CMARK_NODE_LIST) { node->as.list.tight = tight; return 1; - } - else { + } else { return 0; } } const char* -cmark_node_get_fence_info(cmark_node *node) { +cmark_node_get_fence_info(cmark_node *node) +{ if (node == NULL) { return NULL; } if (node->type == NODE_CODE_BLOCK) { return cmark_chunk_to_cstr(&node->as.code.info); - } - else { + } else { return NULL; } } int -cmark_node_set_fence_info(cmark_node *node, const char *info) { +cmark_node_set_fence_info(cmark_node *node, const char *info) +{ if (node == NULL) { return 0; } @@ -406,14 +433,14 @@ cmark_node_set_fence_info(cmark_node *node, const char *info) { if (node->type == NODE_CODE_BLOCK) { cmark_chunk_set_cstr(&node->as.code.info, info); return 1; - } - else { + } else { return 0; } } const char* -cmark_node_get_url(cmark_node *node) { +cmark_node_get_url(cmark_node *node) +{ if (node == NULL) { return NULL; } @@ -430,7 +457,8 @@ cmark_node_get_url(cmark_node *node) { } int -cmark_node_set_url(cmark_node *node, const char *url) { +cmark_node_set_url(cmark_node *node, const char *url) +{ if (node == NULL) { return 0; } @@ -449,7 +477,8 @@ cmark_node_set_url(cmark_node *node, const char *url) { } const char* -cmark_node_get_title(cmark_node *node) { +cmark_node_get_title(cmark_node *node) +{ if (node == NULL) { return NULL; } @@ -466,7 +495,8 @@ cmark_node_get_title(cmark_node *node) { } int -cmark_node_set_title(cmark_node *node, const char *title) { +cmark_node_set_title(cmark_node *node, const char *title) +{ if (node == NULL) { return 0; } @@ -485,7 +515,8 @@ cmark_node_set_title(cmark_node *node, const char *title) { } int -cmark_node_get_start_line(cmark_node *node) { +cmark_node_get_start_line(cmark_node *node) +{ if (node == NULL) { return 0; } @@ -493,7 +524,8 @@ cmark_node_get_start_line(cmark_node *node) { } int -cmark_node_get_start_column(cmark_node *node) { +cmark_node_get_start_column(cmark_node *node) +{ if (node == NULL) { return 0; } @@ -501,7 +533,8 @@ cmark_node_get_start_column(cmark_node *node) { } int -cmark_node_get_end_line(cmark_node *node) { +cmark_node_get_end_line(cmark_node *node) +{ if (node == NULL) { return 0; } @@ -509,7 +542,8 @@ cmark_node_get_end_line(cmark_node *node) { } int -cmark_node_get_end_column(cmark_node *node) { +cmark_node_get_end_column(cmark_node *node) +{ if (node == NULL) { return 0; } @@ -517,7 +551,8 @@ cmark_node_get_end_column(cmark_node *node) { } static inline bool -S_is_block(cmark_node *node) { +S_is_block(cmark_node *node) +{ if (node == NULL) { return false; } @@ -526,7 +561,8 @@ S_is_block(cmark_node *node) { } static inline bool -S_is_inline(cmark_node *node) { +S_is_inline(cmark_node *node) +{ if (node == NULL) { return false; } @@ -609,7 +645,8 @@ S_node_unlink(cmark_node *node) } void -cmark_node_unlink(cmark_node *node) { +cmark_node_unlink(cmark_node *node) +{ S_node_unlink(node); node->next = NULL; @@ -706,8 +743,7 @@ cmark_node_prepend_child(cmark_node *node, cmark_node *child) if (old_first_child) { old_first_child->prev = child; - } - else { + } else { // Also set last_child if node previously had no children. node->last_child = child; } @@ -733,8 +769,7 @@ cmark_node_append_child(cmark_node *node, cmark_node *child) if (old_last_child) { old_last_child->next = child; - } - else { + } else { // Also set first_child if node previously had no children. node->first_child = child; } @@ -749,8 +784,8 @@ S_print_error(FILE *out, cmark_node *node, const char *elem) return; } fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem, - cmark_node_get_type_string(node), node->start_line, - node->start_column); + cmark_node_get_type_string(node), node->start_line, + node->start_column); } int @@ -780,7 +815,7 @@ cmark_node_check(cmark_node *node, FILE *out) continue; } - next_sibling: +next_sibling: if (cur == node) { break; } diff --git a/src/references.c b/src/references.c index c9051f096a..37bf4cbdbe 100644 --- a/src/references.c +++ b/src/references.c @@ -74,7 +74,7 @@ static void add_reference(cmark_reference_map *map, cmark_reference* ref) } void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, cmark_chunk *url, - cmark_chunk *title) + cmark_chunk *title) { cmark_reference *ref; unsigned char *reflabel = normalize_reference(label); diff --git a/src/utf8.c b/src/utf8.c index ffb050de36..d77c5d1388 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -21,7 +21,8 @@ static const int8_t utf8proc_utf8class[256] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 }; + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 +}; static void encode_unknown(cmark_strbuf *buf) { @@ -82,8 +83,7 @@ static int utf8proc_valid(const uint8_t *str, int str_len) // Overlong return -length; } - } - else if (str[0] == 0xED) { + } else if (str[0] == 0xED) { if (str[1] >= 0xA0) { // Surrogate return -length; @@ -97,8 +97,7 @@ static int utf8proc_valid(const uint8_t *str, int str_len) // Overlong return -length; } - } - else if (str[0] >= 0xF4) { + } else if (str[0] >= 0xF4) { if (str[0] > 0xF4 || str[1] >= 0x90) { // Above 0x10FFFF return -length; @@ -121,7 +120,8 @@ void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, size_t size) while (i < size && line[i] != '\t' && line[i] != '\0' && line[i] < 0x80) { - i++; tab++; + i++; + tab++; } if (i > org) @@ -171,13 +171,13 @@ int utf8proc_iterate(const uint8_t *str, int str_len, int32_t *dst) break; case 3: uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) - + (str[2] & 0x3F); + + (str[2] & 0x3F); if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) || (uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1; break; case 4: uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) - + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); + + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); if (uc < 0x10000 || uc >= 0x110000) uc = -1; break; } @@ -254,200 +254,200 @@ void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, int len) int utf8proc_is_space(int32_t uc) { return (uc == 9 || - uc == 10 || - uc == 12 || - uc == 13 || - uc == 32 || - uc == 160 || - uc == 5760 || - (uc >= 8192 && uc <= 8202) || - uc == 8239 || - uc == 8287 || - uc == 12288); + uc == 10 || + uc == 12 || + uc == 13 || + uc == 32 || + uc == 160 || + uc == 5760 || + (uc >= 8192 && uc <= 8202) || + uc == 8239 || + uc == 8287 || + uc == 12288); } // matches anything in the P[cdefios] classes. int utf8proc_is_punctuation(int32_t uc) { return ((uc < 128 && cmark_ispunct((char)uc)) || - uc == 161 || - uc == 167 || - uc == 171 || - uc == 182 || - uc == 183 || - uc == 187 || - uc == 191 || - uc == 894 || - uc == 903 || - (uc >= 1370 && uc <= 1375) || - uc == 1417 || - uc == 1418 || - uc == 1470 || - uc == 1472 || - uc == 1475 || - uc == 1478 || - uc == 1523 || - uc == 1524 || - uc == 1545 || - uc == 1546 || - uc == 1548 || - uc == 1549 || - uc == 1563 || - uc == 1566 || - uc == 1567 || - (uc >= 1642 && uc <= 1645) || - uc == 1748 || - (uc >= 1792 && uc <= 1805) || - (uc >= 2039 && uc <= 2041) || - (uc >= 2096 && uc <= 2110) || - uc == 2142 || - uc == 2404 || - uc == 2405 || - uc == 2416 || - uc == 2800 || - uc == 3572 || - uc == 3663 || - uc == 3674 || - uc == 3675 || - (uc >= 3844 && uc <= 3858) || - uc == 3860 || - (uc >= 3898 && uc <= 3901) || - uc == 3973 || - (uc >= 4048 && uc <= 4052) || - uc == 4057 || - uc == 4058 || - (uc >= 4170 && uc <= 4175) || - uc == 4347 || - (uc >= 4960 && uc <= 4968) || - uc == 5120 || - uc == 5741 || - uc == 5742 || - uc == 5787 || - uc == 5788 || - (uc >= 5867 && uc <= 5869) || - uc == 5941 || - uc == 5942 || - (uc >= 6100 && uc <= 6102) || - (uc >= 6104 && uc <= 6106) || - (uc >= 6144 && uc <= 6154) || - uc == 6468 || - uc == 6469 || - uc == 6686 || - uc == 6687 || - (uc >= 6816 && uc <= 6822) || - (uc >= 6824 && uc <= 6829) || - (uc >= 7002 && uc <= 7008) || - (uc >= 7164 && uc <= 7167) || - (uc >= 7227 && uc <= 7231) || - uc == 7294 || - uc == 7295 || - (uc >= 7360 && uc <= 7367) || - uc == 7379 || - (uc >= 8208 && uc <= 8231) || - (uc >= 8240 && uc <= 8259) || - (uc >= 8261 && uc <= 8273) || - (uc >= 8275 && uc <= 8286) || - uc == 8317 || - uc == 8318 || - uc == 8333 || - uc == 8334 || - (uc >= 8968 && uc <= 8971) || - uc == 9001 || - uc == 9002 || - (uc >= 10088 && uc <= 10101) || - uc == 10181 || - uc == 10182 || - (uc >= 10214 && uc <= 10223) || - (uc >= 10627 && uc <= 10648) || - (uc >= 10712 && uc <= 10715) || - uc == 10748 || - uc == 10749 || - (uc >= 11513 && uc <= 11516) || - uc == 11518 || - uc == 11519 || - uc == 11632 || - (uc >= 11776 && uc <= 11822) || - (uc >= 11824 && uc <= 11842) || - (uc >= 12289 && uc <= 12291) || - (uc >= 12296 && uc <= 12305) || - (uc >= 12308 && uc <= 12319) || - uc == 12336 || - uc == 12349 || - uc == 12448 || - uc == 12539 || - uc == 42238 || - uc == 42239 || - (uc >= 42509 && uc <= 42511) || - uc == 42611 || - uc == 42622 || - (uc >= 42738 && uc <= 42743) || - (uc >= 43124 && uc <= 43127) || - uc == 43214 || - uc == 43215 || - (uc >= 43256 && uc <= 43258) || - uc == 43310 || - uc == 43311 || - uc == 43359 || - (uc >= 43457 && uc <= 43469) || - uc == 43486 || - uc == 43487 || - (uc >= 43612 && uc <= 43615) || - uc == 43742 || - uc == 43743 || - uc == 43760 || - uc == 43761 || - uc == 44011 || - uc == 64830 || - uc == 64831 || - (uc >= 65040 && uc <= 65049) || - (uc >= 65072 && uc <= 65106) || - (uc >= 65108 && uc <= 65121) || - uc == 65123 || - uc == 65128 || - uc == 65130 || - uc == 65131 || - (uc >= 65281 && uc <= 65283) || - (uc >= 65285 && uc <= 65290) || - (uc >= 65292 && uc <= 65295) || - uc == 65306 || - uc == 65307 || - uc == 65311 || - uc == 65312 || - (uc >= 65339 && uc <= 65341) || - uc == 65343 || - uc == 65371 || - uc == 65373 || - (uc >= 65375 && uc <= 65381) || - (uc >= 65792 && uc <= 65794) || - uc == 66463 || - uc == 66512 || - uc == 66927 || - uc == 67671 || - uc == 67871 || - uc == 67903 || - (uc >= 68176 && uc <= 68184) || - uc == 68223 || - (uc >= 68336 && uc <= 68342) || - (uc >= 68409 && uc <= 68415) || - (uc >= 68505 && uc <= 68508) || - (uc >= 69703 && uc <= 69709) || - uc == 69819 || - uc == 69820 || - (uc >= 69822 && uc <= 69825) || - (uc >= 69952 && uc <= 69955) || - uc == 70004 || - uc == 70005 || - (uc >= 70085 && uc <= 70088) || - uc == 70093 || - (uc >= 70200 && uc <= 70205) || - uc == 70854 || - (uc >= 71105 && uc <= 71113) || - (uc >= 71233 && uc <= 71235) || - (uc >= 74864 && uc <= 74868) || - uc == 92782 || - uc == 92783 || - uc == 92917 || - (uc >= 92983 && uc <= 92987) || - uc == 92996 || - uc == 113823); + uc == 161 || + uc == 167 || + uc == 171 || + uc == 182 || + uc == 183 || + uc == 187 || + uc == 191 || + uc == 894 || + uc == 903 || + (uc >= 1370 && uc <= 1375) || + uc == 1417 || + uc == 1418 || + uc == 1470 || + uc == 1472 || + uc == 1475 || + uc == 1478 || + uc == 1523 || + uc == 1524 || + uc == 1545 || + uc == 1546 || + uc == 1548 || + uc == 1549 || + uc == 1563 || + uc == 1566 || + uc == 1567 || + (uc >= 1642 && uc <= 1645) || + uc == 1748 || + (uc >= 1792 && uc <= 1805) || + (uc >= 2039 && uc <= 2041) || + (uc >= 2096 && uc <= 2110) || + uc == 2142 || + uc == 2404 || + uc == 2405 || + uc == 2416 || + uc == 2800 || + uc == 3572 || + uc == 3663 || + uc == 3674 || + uc == 3675 || + (uc >= 3844 && uc <= 3858) || + uc == 3860 || + (uc >= 3898 && uc <= 3901) || + uc == 3973 || + (uc >= 4048 && uc <= 4052) || + uc == 4057 || + uc == 4058 || + (uc >= 4170 && uc <= 4175) || + uc == 4347 || + (uc >= 4960 && uc <= 4968) || + uc == 5120 || + uc == 5741 || + uc == 5742 || + uc == 5787 || + uc == 5788 || + (uc >= 5867 && uc <= 5869) || + uc == 5941 || + uc == 5942 || + (uc >= 6100 && uc <= 6102) || + (uc >= 6104 && uc <= 6106) || + (uc >= 6144 && uc <= 6154) || + uc == 6468 || + uc == 6469 || + uc == 6686 || + uc == 6687 || + (uc >= 6816 && uc <= 6822) || + (uc >= 6824 && uc <= 6829) || + (uc >= 7002 && uc <= 7008) || + (uc >= 7164 && uc <= 7167) || + (uc >= 7227 && uc <= 7231) || + uc == 7294 || + uc == 7295 || + (uc >= 7360 && uc <= 7367) || + uc == 7379 || + (uc >= 8208 && uc <= 8231) || + (uc >= 8240 && uc <= 8259) || + (uc >= 8261 && uc <= 8273) || + (uc >= 8275 && uc <= 8286) || + uc == 8317 || + uc == 8318 || + uc == 8333 || + uc == 8334 || + (uc >= 8968 && uc <= 8971) || + uc == 9001 || + uc == 9002 || + (uc >= 10088 && uc <= 10101) || + uc == 10181 || + uc == 10182 || + (uc >= 10214 && uc <= 10223) || + (uc >= 10627 && uc <= 10648) || + (uc >= 10712 && uc <= 10715) || + uc == 10748 || + uc == 10749 || + (uc >= 11513 && uc <= 11516) || + uc == 11518 || + uc == 11519 || + uc == 11632 || + (uc >= 11776 && uc <= 11822) || + (uc >= 11824 && uc <= 11842) || + (uc >= 12289 && uc <= 12291) || + (uc >= 12296 && uc <= 12305) || + (uc >= 12308 && uc <= 12319) || + uc == 12336 || + uc == 12349 || + uc == 12448 || + uc == 12539 || + uc == 42238 || + uc == 42239 || + (uc >= 42509 && uc <= 42511) || + uc == 42611 || + uc == 42622 || + (uc >= 42738 && uc <= 42743) || + (uc >= 43124 && uc <= 43127) || + uc == 43214 || + uc == 43215 || + (uc >= 43256 && uc <= 43258) || + uc == 43310 || + uc == 43311 || + uc == 43359 || + (uc >= 43457 && uc <= 43469) || + uc == 43486 || + uc == 43487 || + (uc >= 43612 && uc <= 43615) || + uc == 43742 || + uc == 43743 || + uc == 43760 || + uc == 43761 || + uc == 44011 || + uc == 64830 || + uc == 64831 || + (uc >= 65040 && uc <= 65049) || + (uc >= 65072 && uc <= 65106) || + (uc >= 65108 && uc <= 65121) || + uc == 65123 || + uc == 65128 || + uc == 65130 || + uc == 65131 || + (uc >= 65281 && uc <= 65283) || + (uc >= 65285 && uc <= 65290) || + (uc >= 65292 && uc <= 65295) || + uc == 65306 || + uc == 65307 || + uc == 65311 || + uc == 65312 || + (uc >= 65339 && uc <= 65341) || + uc == 65343 || + uc == 65371 || + uc == 65373 || + (uc >= 65375 && uc <= 65381) || + (uc >= 65792 && uc <= 65794) || + uc == 66463 || + uc == 66512 || + uc == 66927 || + uc == 67671 || + uc == 67871 || + uc == 67903 || + (uc >= 68176 && uc <= 68184) || + uc == 68223 || + (uc >= 68336 && uc <= 68342) || + (uc >= 68409 && uc <= 68415) || + (uc >= 68505 && uc <= 68508) || + (uc >= 69703 && uc <= 69709) || + uc == 69819 || + uc == 69820 || + (uc >= 69822 && uc <= 69825) || + (uc >= 69952 && uc <= 69955) || + uc == 70004 || + uc == 70005 || + (uc >= 70085 && uc <= 70088) || + uc == 70093 || + (uc >= 70200 && uc <= 70205) || + uc == 70854 || + (uc >= 71105 && uc <= 71113) || + (uc >= 71233 && uc <= 71235) || + (uc >= 74864 && uc <= 74868) || + uc == 92782 || + uc == 92783 || + uc == 92917 || + (uc >= 92983 && uc <= 92987) || + uc == 92996 || + uc == 113823); } diff --git a/src/xml.c b/src/xml.c index 1577f89703..2ae900c0b4 100644 --- a/src/xml.c +++ b/src/xml.c @@ -36,7 +36,7 @@ static inline void indent(struct render_state *state) static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, long options) + struct render_state *state, long options) { cmark_strbuf *xml = state->xml; bool literal = false; @@ -46,14 +46,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { indent(state); cmark_strbuf_printf(xml, "<%s", - cmark_node_get_type_string(node)); + cmark_node_get_type_string(node)); if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { cmark_strbuf_printf(xml, " sourcepos=\"%d:%d-%d:%d\"", - node->start_line, - node->start_column, - node->end_line, - node->end_column); + node->start_line, + node->start_column, + node->end_line, + node->end_column); } literal = false; @@ -65,25 +65,25 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_INLINE_HTML: cmark_strbuf_puts(xml, ">"); escape_xml(xml, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); cmark_strbuf_puts(xml, "as.code.info.len > 0) { cmark_strbuf_puts(xml, " info=\""); escape_xml(xml, node->as.code.info.data, - node->as.code.info.len); + node->as.code.info.len); cmark_strbuf_putc(xml, '"'); } cmark_strbuf_puts(xml, ">"); escape_xml(xml, node->as.code.literal.data, - node->as.code.literal.len); + node->as.code.literal.len); cmark_strbuf_puts(xml, "first_child) { - state->indent -= 2; - indent(state); - cmark_strbuf_printf(xml, "\n", - cmark_node_get_type_string(node)); + state->indent -= 2; + indent(state); + cmark_strbuf_printf(xml, "\n", + cmark_node_get_type_string(node)); } return 1; @@ -126,9 +126,9 @@ char *cmark_render_xml(cmark_node *root, long options) cmark_iter *iter = cmark_iter_new(root); cmark_strbuf_puts(state.xml, - "\n"); + "\n"); cmark_strbuf_puts(state.xml, - "\n"); + "\n"); while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); S_render_node(cur, ev_type, &state, options); -- cgit 0.0.5-2-1-g0f52 From 9abc1336da9730fb6ddb766aca193f1923d3a02f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 21:01:15 -0800 Subject: Clarified precedence of code spans, HTML tags, autolinks. Closes #259. --- spec.txt | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/spec.txt b/spec.txt index 6a38cd7176..d43900c393 100644 --- a/spec.txt +++ b/spec.txt @@ -4376,15 +4376,16 @@ And this is not parsed as a link:

                  [not a link](/foo)

                  . -But this is a link: +Code spans, HTML tags, and autolinks have the same precedence. +Thus, this is code: . -` +`` . -

                  http://foo.bar.`baz`

                  +

                  <a href="">`

                  . -And this is an HTML tag: +But this is an HTML tag: . ` @@ -4392,6 +4393,22 @@ And this is an HTML tag:

                  `

                  . +And this is code: + +. +`` +. +

                  <http://foo.bar.baz>`

                  +. + +But this is an autolink: + +. +` +. +

                  http://foo.bar.`baz`

                  +. + When a backtick string is not closed by a matching backtick string, we just have literal backticks: -- cgit 0.0.5-2-1-g0f52 From 77e148eb0733a161d895fe09e21664ea22b284a7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 21:06:12 -0800 Subject: Talk of "info string" rather than "attributes" for code blocks. Closes #262. --- spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.txt b/spec.txt index d43900c393..810eec3902 100644 --- a/spec.txt +++ b/spec.txt @@ -1007,7 +1007,7 @@ An [indented chunk](@indented-chunk) is a sequence of non-blank lines, each indented four or more spaces. The contents of the code block are the literal contents of the lines, including trailing [line ending]s, minus four spaces of indentation. -An indented code block has no attributes. +An indented code block has no [info string]. An indented code block cannot interrupt a paragraph, so there must be a blank line between a paragraph and a following indented code block. -- cgit 0.0.5-2-1-g0f52 From 245bb51f4cbaab6f161dbeba3f07fe90932fd8ff Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 21:24:52 -0800 Subject: Clarify that final newline is removed from paragraph content. Closes #176. --- spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.txt b/spec.txt index 810eec3902..734ad48f9f 100644 --- a/spec.txt +++ b/spec.txt @@ -2030,7 +2030,7 @@ kinds of blocks forms a [paragraph](@paragraph). The contents of the paragraph are the result of parsing the paragraph's raw content as inlines. The paragraph's raw content is formed by concatenating the lines and removing initial and final -spaces. +[whitespace]. A simple example with two paragraphs: -- cgit 0.0.5-2-1-g0f52 From b1bbd90481512f1a43c17893598e4d96a817c536 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Jan 2015 21:29:54 -0800 Subject: Clarify that brackets in general don't take precedence over emph. Closes #258. --- spec.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec.txt b/spec.txt index 734ad48f9f..df2104e803 100644 --- a/spec.txt +++ b/spec.txt @@ -5849,6 +5849,15 @@ emphasis grouping:

                  foo *bar

                  . +Note that brackets that *aren't* part of links do not take +precedence: + +. +*foo [bar* baz] +. +

                  foo [bar baz]

                  +. + These cases illustrate the precedence of HTML tags, code spans, and autolinks over link grouping: -- cgit 0.0.5-2-1-g0f52 From 2e4b099db85614f694423d507062fcc9c3f49e64 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 6 Jan 2015 10:22:52 -0800 Subject: Updated COPYING to include copyright for utf8proc. --- COPYING | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/COPYING b/COPYING index 8a63e5b3ec..d430fcc93a 100644 --- a/COPYING +++ b/COPYING @@ -82,6 +82,30 @@ SOFTWARE. ----- +utf8.c and utf8.c contain tables from utf8proc +(), +(C) 2009 Public Software Group e. V., Berlin, Germany. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +----- + The polyfill for String.fromCodePoint included in commonmark.js is Copyright Mathias Bynens -- cgit 0.0.5-2-1-g0f52 From f11415d36a2d0b288db811a66b0f9f077c6ca123 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 6 Jan 2015 10:57:21 -0800 Subject: COPYING: record that utf8.* derived from utf8proc. --- COPYING | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/COPYING b/COPYING index d430fcc93a..4bd949681b 100644 --- a/COPYING +++ b/COPYING @@ -58,7 +58,7 @@ SOFTWARE. ----- -buffer.h, buffer.c, chunk.h, utf8.h, utf8.c +buffer.h, buffer.c, chunk.h are derived from code (C) 2012 Github, Inc. @@ -82,7 +82,9 @@ SOFTWARE. ----- -utf8.c and utf8.c contain tables from utf8proc +utf8.c and utf8.c + +are derived from utf8proc (), (C) 2009 Public Software Group e. V., Berlin, Germany. -- cgit 0.0.5-2-1-g0f52 From d9e82a738ea3883870191d7c9b9b0b6c81964923 Mon Sep 17 00:00:00 2001 From: Zhiming Wang Date: Tue, 6 Jan 2015 22:23:31 -0800 Subject: Fixed typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0372225655..cf7b33c959 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ on FreeBSD: mkdir build cd build cmake .. # optionally: -DCMAKE_INSTALL_PREFIX=path - make # executable will be create as build/src/cmake + make # executable will be created as build/src/cmark make test make install -- cgit 0.0.5-2-1-g0f52 From 52c591d75433b16cf32f4fae319ccb60b20f6ae7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 7 Jan 2015 11:17:24 -0800 Subject: cmark: Add function & option to normalize text nodes. So, instead of Hi & lo we get Hi&lo * Added exported `cmark_consolidate_text_nodes` function. * Added `CMARK_OPT_NORMALIZE` to options. * Added optional normalization in XML writer. * Added `--normalize` option to command-line program. * Updated man page. --- man/man1/cmark.1 | 9 +++++++++ src/cmark.h | 9 +++++++++ src/iterator.c | 31 +++++++++++++++++++++++++++++++ src/main.c | 3 +++ src/xml.c | 5 +++++ 5 files changed, 57 insertions(+) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 2d5af779d9..c425b8cae3 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -23,6 +23,15 @@ concatenated before parsing. \-\-to, \-t \f[I]FORMAT\f[] Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]ast\f[]). .TP 12n +\-\-sourcepos +Include source position attribute. +.TP 12n +\-\-hardbreaks +Treat newlines as hard line breaks. +.TP 12n +\-\-normalize +Consolidate adjacent text nodes. +.TP 12n \-\-help Print usage information. .TP 12n diff --git a/src/cmark.h b/src/cmark.h index 2051a04acf..45bc338701 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -356,6 +356,11 @@ cmark_node_prepend_child(cmark_node *node, cmark_node *child); CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child); +/** Consolidates adjacent text nodes. + */ +CMARK_EXPORT void +cmark_consolidate_text_nodes(cmark_node *root); + /** * ## Parsing * @@ -441,6 +446,10 @@ char *cmark_render_man(cmark_node *root, long options); */ #define CMARK_OPT_HARDBREAKS 2 +/** Normalize tree by consolidating adjacent text nodes. + */ +#define CMARK_OPT_NORMALIZE 4 + /** # AUTHORS * * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. diff --git a/src/iterator.c b/src/iterator.c index 6ebc9af79b..b0ac9d2697 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -84,3 +84,34 @@ cmark_iter_get_node(cmark_iter *iter) return cur; } + + +void cmark_consolidate_text_nodes(cmark_node *root) +{ + cmark_iter *iter = cmark_iter_new(root); + cmark_strbuf buf = GH_BUF_INIT; + cmark_event_type ev_type; + cmark_node *cur, *tmp, *next; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (ev_type == CMARK_EVENT_ENTER && + cur->type == CMARK_NODE_TEXT && + cur->next && + cur->next->type == CMARK_NODE_TEXT) { + cmark_strbuf_clear(&buf); + cmark_strbuf_puts(&buf, cmark_node_get_literal(cur)); + tmp = cur->next; + while (tmp && tmp->type == CMARK_NODE_TEXT) { + cmark_iter_get_node(iter); // advance pointer + cmark_strbuf_puts(&buf, cmark_node_get_literal(tmp)); + next = tmp->next; + cmark_node_free(tmp); + tmp = next; + } + cmark_node_set_literal(cur, (char *)cmark_strbuf_detach(&buf)); + } + } + + cmark_iter_free(iter); +} diff --git a/src/main.c b/src/main.c index eaef246855..5855868928 100644 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,7 @@ void print_usage() printf(" --to, -t FORMAT Specify output format (html, xml, man)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); + printf(" --normalize Consolidate adjacent text nodes\n"); printf(" --help, -h Print usage information\n"); printf(" --version Print version\n"); } @@ -79,6 +80,8 @@ int main(int argc, char *argv[]) options |= CMARK_OPT_SOURCEPOS; } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; + } else if (strcmp(argv[i], "--normalize") == 0) { + options |= CMARK_OPT_NORMALIZE; } else if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { print_usage(); diff --git a/src/xml.c b/src/xml.c index 2ae900c0b4..93a6eda8ec 100644 --- a/src/xml.c +++ b/src/xml.c @@ -123,6 +123,11 @@ char *cmark_render_xml(cmark_node *root, long options) cmark_event_type ev_type; cmark_node *cur; struct render_state state = { &xml, 0 }; + + if (options & CMARK_OPT_NORMALIZE) { + cmark_consolidate_text_nodes(root); + } + cmark_iter *iter = cmark_iter_new(root); cmark_strbuf_puts(state.xml, -- cgit 0.0.5-2-1-g0f52 From ea17d4a1aac6d82d294a733068ffc6f65329797a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 7 Jan 2015 11:25:14 -0800 Subject: Fixed 'make alltest.md'. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d026bfaa20..b1235eae50 100644 --- a/Makefile +++ b/Makefile @@ -113,7 +113,7 @@ testziparchive: $(ZIPARCHIVE) mkdir build && cd build && cmake .. && make && ctest -V $(ALLTESTS): spec.txt - 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]).encode("utf-8"))' > $@ + 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) cat $< | valgrind --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) >/dev/null -- cgit 0.0.5-2-1-g0f52 From d18ac1f99637cf3cc4381d34e35a196c5526027a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 7 Jan 2015 17:39:48 -0800 Subject: js: Changed 'label' in Link, Image to 'children'. This matches the C impl. Also removed an unused property. --- js/lib/html-renderer.js | 4 ++-- js/lib/inlines.js | 9 +++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/js/lib/html-renderer.js b/js/lib/html-renderer.js index ed1962412d..236852b749 100644 --- a/js/lib/html-renderer.js +++ b/js/lib/html-renderer.js @@ -40,10 +40,10 @@ var renderInline = function(inline) { if (inline.title) { attrs.push(['title', this.escape(inline.title, true)]); } - return inTags('a', attrs, this.renderInlines(inline.label)); + return inTags('a', attrs, this.renderInlines(inline.children)); case 'Image': attrs = [['src', this.escape(inline.destination, true)], - ['alt', this.renderInlines(inline.label). + ['alt', this.renderInlines(inline.children). replace(/\<[^>]*alt="([^"]*)"[^>]*\>/g, '$1'). replace(/\<[^>]*\>/g, '')]]; if (inline.title) { diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 4180f3015f..1921e60b73 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -179,14 +179,14 @@ var parseAutolink = function(inlines) { dest = m.slice(1, -1); inlines.push( {t: 'Link', - label: [{ t: 'Text', c: dest }], + children: [{ t: 'Text', c: dest }], destination: 'mailto:' + encodeURI(unescape(dest)) }); return true; } else if ((m = this.match(/^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i))) { dest = m.slice(1, -1); inlines.push({ t: 'Link', - label: [{ t: 'Text', c: dest }], + children: [{ t: 'Text', c: dest }], destination: encodeURI(unescape(dest)) }); return true; } else { @@ -621,7 +621,7 @@ var parseCloseBracket = function(inlines) { inlines.push({t: is_image ? 'Image' : 'Link', destination: dest, title: title, - label: link_text}); + children: link_text}); return true; } else { // no match @@ -676,7 +676,6 @@ var parseNewline = function(inlines) { var parseReference = function(s, refmap) { this.subject = s; this.pos = 0; - this.label_nest_level = 0; var rawlabel; var dest; var title; @@ -801,7 +800,6 @@ function InlineParser(){ "use strict"; return { subject: '', - label_nest_level: 0, // used by parseLinkLabel method delimiters: null, // used by parseEmphasis method pos: 0, refmap: {}, @@ -833,4 +831,3 @@ function InlineParser(){ } module.exports = InlineParser; - -- cgit 0.0.5-2-1-g0f52 From 22083ee5776508fa06a2d373f8a578256a5c63e3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 7 Jan 2015 17:41:15 -0800 Subject: js: Use children rather than 'c' for Emph and Strong contents. Now we use 'children' uniformly, in both inlines and blocks, for child nodes. --- js/lib/html-renderer.js | 4 ++-- js/lib/inlines.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/js/lib/html-renderer.js b/js/lib/html-renderer.js index 236852b749..372eda0abe 100644 --- a/js/lib/html-renderer.js +++ b/js/lib/html-renderer.js @@ -30,9 +30,9 @@ var renderInline = function(inline) { case 'Hardbreak': return inTags('br', [], "", true) + '\n'; case 'Emph': - return inTags('em', [], this.renderInlines(inline.c)); + return inTags('em', [], this.renderInlines(inline.children)); case 'Strong': - return inTags('strong', [], this.renderInlines(inline.c)); + return inTags('strong', [], this.renderInlines(inline.children)); case 'Html': return inline.c; case 'Link': diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 1921e60b73..ef7a00f183 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -248,11 +248,11 @@ var scanDelims = function(cc) { }; var Emph = function(ils) { - return {t: 'Emph', c: ils}; + return {t: 'Emph', children: ils}; }; var Strong = function(ils) { - return {t: 'Strong', c: ils}; + return {t: 'Strong', children: ils}; }; var Str = function(s) { -- cgit 0.0.5-2-1-g0f52 From 8713ff912aaf13926d799d7cbd61e5cf014ddb7e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 7 Jan 2015 17:51:42 -0800 Subject: js: Use children instead of inline_content for Paragraph. --- js/lib/blocks.js | 8 ++++---- js/lib/html-renderer.js | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 7518fef1c4..786c09962c 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -59,7 +59,7 @@ var makeBlock = function(tag, start_line, start_column) { // string_content is formed by concatenating strings, in finalize: string_content: "", strings: [], - inline_content: [] + children: [] }; }; @@ -629,11 +629,11 @@ var processInlines = function(block) { switch(block.t) { case 'Paragraph': - newblock.inline_content = + newblock.children = this.inlineParser.parse(block.string_content.trim(), this.refmap); break; case 'Header': - newblock.inline_content = + newblock.children = this.inlineParser.parse(block.string_content.trim(), this.refmap); newblock.level = block.level; break; @@ -652,7 +652,7 @@ var processInlines = function(block) { break; } - if (block.children) { + if (block.children && !newblock.children) { var newchildren = []; for (var i = 0; i < block.children.length; i++) { newchildren.push(this.processInlines(block.children[i])); diff --git a/js/lib/html-renderer.js b/js/lib/html-renderer.js index 372eda0abe..f6efe32bea 100644 --- a/js/lib/html-renderer.js +++ b/js/lib/html-renderer.js @@ -78,9 +78,9 @@ var renderBlock = function(block, in_tight_list) { return (whole_doc === '' ? '' : whole_doc + '\n'); case 'Paragraph': if (in_tight_list) { - return this.renderInlines(block.inline_content); + return this.renderInlines(block.children); } else { - return inTags('p', [], this.renderInlines(block.inline_content)); + return inTags('p', [], this.renderInlines(block.children)); } break; case 'BlockQuote': @@ -105,7 +105,7 @@ var renderBlock = function(block, in_tight_list) { this.innersep); case 'Header': tag = 'h' + block.level; - return inTags(tag, [], this.renderInlines(block.inline_content)); + return inTags(tag, [], this.renderInlines(block.children)); case 'CodeBlock': info_words = block.info ? block.info.split(/ +/) : []; attr = (info_words.length === 0 || info_words[0].length === 0) ? -- cgit 0.0.5-2-1-g0f52 From 363c25c0a5584c0f936aaa9481b2130e29afa291 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 8 Jan 2015 10:29:09 -0800 Subject: Added `cmark_iter_reset` and a note about handling destructive updates. --- src/cmark.h | 14 ++++++++++++++ src/iterator.c | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/src/cmark.h b/src/cmark.h index 45bc338701..84a15c867b 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -163,6 +163,11 @@ cmark_node_last_child(cmark_node *node); * * cmark_iter_free(iter); * } + * + * Note that if you delete the current node, its first child, or its + * next sibling, the iterator may point to a nonexistent note. + * Use 'cmark_iter_reset' to set its pointer to the next node that + * should be traversed. */ /** Creates a new iterator starting at 'root'. @@ -177,6 +182,15 @@ CMARK_EXPORT void cmark_iter_free(cmark_iter *iter); +/** Resets the iterator so that the current node is 'current' and + the event type is 'event_type'. Use this to resume after destructively + modifying the tree structure. + */ +CMARK_EXPORT +void +cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type); + /** Returns the event type (`CMARK_EVENT_ENTER`, `CMARK_EVENT_EXIT`, * or `CMARK_EVENT_DONE`) for the next node. */ diff --git a/src/iterator.c b/src/iterator.c index b0ac9d2697..2c152462e6 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -48,6 +48,14 @@ int S_is_leaf(cmark_node *node) } } +void +cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type) +{ + iter->event_type = event_type; + iter->current = current; +} + cmark_node* cmark_iter_get_node(cmark_iter *iter) { -- cgit 0.0.5-2-1-g0f52 From 996a96c1972697e320a958c0d6bf43e677398f01 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 09:26:35 -0800 Subject: xml writer: add list attributes. --- src/xml.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/xml.c b/src/xml.c index 93a6eda8ec..ae85018a28 100644 --- a/src/xml.c +++ b/src/xml.c @@ -40,7 +40,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, { cmark_strbuf *xml = state->xml; bool literal = false; - + cmark_delim_type delim; bool entering = (ev_type == CMARK_EVENT_ENTER); if (entering) { @@ -71,6 +71,31 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_node_get_type_string(node)); literal = true; break; + case CMARK_NODE_LIST: + switch (cmark_node_get_list_type(node)) { + case CMARK_ORDERED_LIST: + cmark_strbuf_puts(xml, " type=\"ordered\""); + cmark_strbuf_printf(xml, " start=\"%d\"", + cmark_node_get_list_start(node)); + delim = cmark_node_get_list_delim(node); + if (delim == CMARK_PAREN_DELIM) { + cmark_strbuf_puts(xml, + " delim=\"paren\""); + } else if (delim == CMARK_PERIOD_DELIM) { + cmark_strbuf_puts(xml, + " delim=\"period\""); + } + break; + case CMARK_BULLET_LIST: + cmark_strbuf_puts(xml, " type=\"bullet\""); + break; + default: + break; + } + cmark_strbuf_printf(xml, " tight=\"%s\"", + (cmark_node_get_list_tight(node) ? + "true" : "false")); + break; case CMARK_NODE_CODE_BLOCK: if (node->as.code.info.len > 0) { cmark_strbuf_puts(xml, " info=\""); -- cgit 0.0.5-2-1-g0f52 From 6b8f1433347557076140afb35ef4d9f036a658f9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 09:49:39 -0800 Subject: js/bench.js: use npm, added markdown-it. --- js/bench.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/js/bench.js b/js/bench.js index f23eb1a7f7..77f5025473 100644 --- a/js/bench.js +++ b/js/bench.js @@ -2,10 +2,12 @@ var Benchmark = require('benchmark').Benchmark; var suite = new Benchmark.Suite(); var fs = require('fs'); var sm = require('./lib/index.js'); -// https://github.com/coreyti/showdown -var showdown = require('../../showdown/src/showdown'); -// https://github.com/chjj/marked -var marked = require('../../marked/marked.min.js'); +// npm install showdown +var showdown = require('showdown'); +// npm install marked +var marked = require('marked'); +// npm install markdown-it +var markdownit = require('markdown-it')('commonmark'); var benchfile = process.argv[2]; @@ -29,6 +31,11 @@ suite.add('commonmark.js markdown->html', function() { marked(contents); }) +.add('markdown-it markdown->html', function() { + "use strict"; + markdownit.render(contents); +}) + .on('cycle', function(event) { "use strict"; console.log(String(event.target)); -- cgit 0.0.5-2-1-g0f52 From e564e0af5c2f7b9732e89707655068e507579a89 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 8 Jan 2015 10:21:30 -0800 Subject: Use linked list instead of arrays for AST. Use the same doubly linked node structure that cmark uses. The primary advantages of this change are (a) simplified code, especially in the renderers, and (b) elimination of the need for recursion, so we can render deeply-nested structures without a stack overflow. A node walker has also been added, for easy AST traversal. * Added js/lib/node.js for nodes. Includes a node walker. * All modules updated to use node structures. * Regularized position information into pos property. * Performance is slightly worse than before, but only marginally, and no doubt there are more optimizations that can be done. --- js/bench.js | 2 +- js/bin/commonmark | 2 +- js/lib/blocks.js | 127 +++++++------------- js/lib/html-renderer.js | 311 +++++++++++++++++++++++++++++------------------- js/lib/index.js | 1 + js/lib/inlines.js | 257 +++++++++++++++++++-------------------- js/lib/node.js | 195 ++++++++++++++++++++++++++++++ js/test.js | 2 +- 8 files changed, 555 insertions(+), 342 deletions(-) create mode 100644 js/lib/node.js diff --git a/js/bench.js b/js/bench.js index 77f5025473..a5e0d91e94 100644 --- a/js/bench.js +++ b/js/bench.js @@ -17,7 +17,7 @@ suite.add('commonmark.js markdown->html', function() { "use strict"; var doc = new sm.DocParser().parse(contents); var renderer = new sm.HtmlRenderer(); - renderer.renderBlock(doc); + renderer.render(doc); }) .add('showdown.js markdown->html', function() { diff --git a/js/bin/commonmark b/js/bin/commonmark index 3c222f8664..ac53e6e8c9 100755 --- a/js/bin/commonmark +++ b/js/bin/commonmark @@ -14,7 +14,7 @@ var files = []; if (process.argv[2] === '--ast') { files = process.argv.slice(3); renderer = { render: function(x) { - return util.inspect(x, null, Infinity) + '\n'; + return util.inspect(x.toAST(), null, Infinity, true) + '\n'; } }; } else { files = process.argv.slice(2); diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 786c09962c..cc2263a74a 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -1,3 +1,5 @@ +Node = require('./node'); + var C_GREATERTHAN = 62; var C_SPACE = 32; var C_OPEN_BRACKET = 91; @@ -48,19 +50,14 @@ var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; // These are methods of a DocParser object, defined below. var makeBlock = function(tag, start_line, start_column) { - return { t: tag, - open: true, - last_line_blank: false, - start_line: start_line, - start_column: start_column, - end_line: start_line, - children: [], - parent: null, - // string_content is formed by concatenating strings, in finalize: - string_content: "", - strings: [], - children: [] - }; + var b = new Node(tag); + b.pos.start = [start_line, start_column]; + b.pos.end = []; // assigned in finalization step + b.open = true; + b.last_line_blank = false; + b.string_content = ""; + b.strings = []; + return b; }; // Returns true if parent block can contain child block. @@ -81,14 +78,17 @@ var acceptsLines = function(block_type) { // Returns true if block ends with a blank line, descending if needed // into lists and sublists. var endsWithBlankLine = function(block) { - if (block.last_line_blank) { + while (block) { + if (block.last_line_blank) { return true; + } + if (block.t === 'List' || block.t === 'ListItem') { + block = block.lastChild; + } else { + break; + } } - if ((block.t === 'List' || block.t === 'ListItem') && block.children.length > 0) { - return endsWithBlankLine(block.children[block.children.length - 1]); - } else { - return false; - } + return false; }; // Break out of all containing lists, resetting the tip of the @@ -135,8 +135,7 @@ var addChild = function(tag, line_number, offset) { var column_number = offset + 1; // offset 0 = column 1 var newBlock = makeBlock(tag, line_number, column_number); - this.tip.children.push(newBlock); - newBlock.parent = this.tip; + this.tip.appendChild(newBlock); this.tip = newBlock; return newBlock; }; @@ -190,7 +189,6 @@ var listsMatch = function(list_data, item_data) { var incorporateLine = function(ln, line_number) { var all_matched = true; - var last_child; var first_nonspace; var offset = 0; var match; @@ -210,12 +208,11 @@ var incorporateLine = function(ln, line_number) { // For each containing block, try to parse the associated line start. // Bail out on failure: container will point to the last matching block. // Set all_matched to false if not all containers match. - while (container.children.length > 0) { - last_child = container.children[container.children.length - 1]; - if (!last_child.open) { + while (container.lastChild) { + if (!container.lastChild.open) { break; } - container = last_child; + container = container.lastChild; match = matchAt(/[^ ]/, ln, offset); if (match === -1) { @@ -472,8 +469,8 @@ var incorporateLine = function(ln, line_number) { container.t === 'Header' || container.t === 'FencedCode' || (container.t === 'ListItem' && - container.children.length === 0 && - container.start_line === line_number)); + !container.firstChild && + container.pos.start[0] === line_number)); var cont = container; while (cont.parent) { @@ -537,10 +534,10 @@ var finalize = function(block, line_number) { return 0; } block.open = false; - if (line_number > block.start_line) { - block.end_line = line_number - 1; + if (line_number > block.pos.start[0]) { + block.pos.end = [line_number - 1]; // TODO end column } else { - block.end_line = line_number; + block.pos.end = [line_number]; } switch (block.t) { @@ -584,30 +581,24 @@ var finalize = function(block, line_number) { case 'List': block.tight = true; // tight by default - var numitems = block.children.length; - var i = 0; - while (i < numitems) { - var item = block.children[i]; + var item = block.firstChild; + while (item) { // check for non-final list item ending with blank line: - var last_item = i === numitems - 1; - if (endsWithBlankLine(item) && !last_item) { + if (endsWithBlankLine(item) && item.next) { block.tight = false; break; } // recurse into children of list item, to see if there are // spaces between any of them: - var numsubitems = item.children.length; - var j = 0; - while (j < numsubitems) { - var subitem = item.children[j]; - var last_subitem = j === numsubitems - 1; - if (endsWithBlankLine(subitem) && !(last_item && last_subitem)) { + var subitem = item.firstChild; + while (subitem) { + if (endsWithBlankLine(subitem) && (item.next || subitem.next)) { block.tight = false; break; } - j++; + subitem = subitem.next; } - i++; + item = item.next; } break; @@ -621,45 +612,14 @@ var finalize = function(block, line_number) { // Walk through a block & children recursively, parsing string content // into inline content where appropriate. Returns new object. var processInlines = function(block) { - var newblock = {}; - newblock.t = block.t; - newblock.start_line = block.start_line; - newblock.start_column = block.start_column; - newblock.end_line = block.end_line; - - switch(block.t) { - case 'Paragraph': - newblock.children = - this.inlineParser.parse(block.string_content.trim(), this.refmap); - break; - case 'Header': - newblock.children = - this.inlineParser.parse(block.string_content.trim(), this.refmap); - newblock.level = block.level; - break; - case 'List': - newblock.list_data = block.list_data; - newblock.tight = block.tight; - break; - case 'CodeBlock': - newblock.string_content = block.string_content; - newblock.info = block.info; - break; - case 'HtmlBlock': - newblock.string_content = block.string_content; - break; - default: - break; - } - - if (block.children && !newblock.children) { - var newchildren = []; - for (var i = 0; i < block.children.length; i++) { - newchildren.push(this.processInlines(block.children[i])); + var node, event; + var walker = block.walker(); + while (event = walker.next()) { + node = event.node; + if (!event.entering && (node.t == 'Paragraph' || node.t == 'Header')) { + this.inlineParser.parse(node, this.refmap); } - newblock.children = newchildren; } - return newblock; }; // The main parsing function. Returns a parsed document AST. @@ -675,7 +635,8 @@ var parse = function(input) { while (this.tip) { this.finalize(this.tip, len - 1); } - return this.processInlines(this.doc); + this.processInlines(this.doc); + return this.doc; }; diff --git a/js/lib/html-renderer.js b/js/lib/html-renderer.js index f6efe32bea..e7953cf8ed 100644 --- a/js/lib/html-renderer.js +++ b/js/lib/html-renderer.js @@ -1,6 +1,6 @@ -// Helper function to produce content in a pair of HTML tags. -var inTags = function(tag, attribs, contents, selfclosing) { - var result = '<' + tag; +// Helper function to produce an HTML tag. +var tag = function(name, attribs, selfclosing) { + var result = '<' + name; if (attribs) { var i = 0; var attrib; @@ -9,132 +9,207 @@ var inTags = function(tag, attribs, contents, selfclosing) { i++; } } - if (contents) { - result = result.concat('>', contents, ''); - } else if (selfclosing) { - result = result + ' />'; - } else { - result = result.concat('>'); - } - return result; -}; - -// Render an inline element as HTML. -var renderInline = function(inline) { - var attrs; - switch (inline.t) { - case 'Text': - return this.escape(inline.c); - case 'Softbreak': - return this.softbreak; - case 'Hardbreak': - return inTags('br', [], "", true) + '\n'; - case 'Emph': - return inTags('em', [], this.renderInlines(inline.children)); - case 'Strong': - return inTags('strong', [], this.renderInlines(inline.children)); - case 'Html': - return inline.c; - case 'Link': - attrs = [['href', this.escape(inline.destination, true)]]; - if (inline.title) { - attrs.push(['title', this.escape(inline.title, true)]); - } - return inTags('a', attrs, this.renderInlines(inline.children)); - case 'Image': - attrs = [['src', this.escape(inline.destination, true)], - ['alt', this.renderInlines(inline.children). - replace(/\<[^>]*alt="([^"]*)"[^>]*\>/g, '$1'). - replace(/\<[^>]*\>/g, '')]]; - if (inline.title) { - attrs.push(['title', this.escape(inline.title, true)]); - } - return inTags('img', attrs, "", true); - case 'Code': - return inTags('code', [], this.escape(inline.c)); - default: - console.log("Unknown inline type " + inline.t); - return ""; - } -}; + if (selfclosing) + result += ' /'; -// Render a list of inlines. -var renderInlines = function(inlines) { - var result = ''; - for (var i = 0; i < inlines.length; i++) { - result = result + this.renderInline(inlines[i]); - } + result += '>'; return result; }; -// Render a single block element. -var renderBlock = function(block, in_tight_list) { - var tag; - var attr; +var renderNodes = function(block) { + + var attrs; var info_words; - switch (block.t) { - case 'Document': - var whole_doc = this.renderBlocks(block.children); - return (whole_doc === '' ? '' : whole_doc + '\n'); - case 'Paragraph': - if (in_tight_list) { - return this.renderInlines(block.children); + var tagname; + var walker = block.walker(); + var event, node, entering; + var buffer = []; + var disableTags = 0; + var grandparent; + var out = function(s) { + if (disableTags > 0) { + buffer.push(s.replace(/\<[^>]*\>/g, '')); } else { - return inTags('p', [], this.renderInlines(block.children)); - } - break; - case 'BlockQuote': - var filling = this.renderBlocks(block.children); - return inTags('blockquote', [], filling === '' ? this.innersep : - this.innersep + filling + this.innersep); - case 'ListItem': - var contents = this.renderBlocks(block.children, in_tight_list); - if (/^[<]/.test(contents)) { - contents = '\n' + contents; + buffer.push(s); } - if (/[>]$/.test(contents)) { - contents = contents + '\n'; + } + var esc = this.escape; + var cr = function() { + if (buffer.length > 0 && buffer[buffer.length - 1] !== '\n') { + out('\n'); } - return inTags('li', [], contents, false).trim(); - case 'List': - tag = block.list_data.type === 'Bullet' ? 'ul' : 'ol'; - attr = (!block.list_data.start || block.list_data.start === 1) ? - [] : [['start', block.list_data.start.toString()]]; - return inTags(tag, attr, this.innersep + - this.renderBlocks(block.children, block.tight) + - this.innersep); - case 'Header': - tag = 'h' + block.level; - return inTags(tag, [], this.renderInlines(block.children)); - case 'CodeBlock': - info_words = block.info ? block.info.split(/ +/) : []; - attr = (info_words.length === 0 || info_words[0].length === 0) ? - [] : [['class', 'language-' + this.escape(info_words[0], true)]]; - return inTags('pre', [], - inTags('code', attr, this.escape(block.string_content))); - case 'HtmlBlock': - return block.string_content; - case 'ReferenceDef': - return ""; - case 'HorizontalRule': - return inTags('hr', [], "", true); - default: - console.log("Unknown block type " + block.t); - return ""; } -}; -// Render a list of block elements, separated by this.blocksep. -var renderBlocks = function(blocks, in_tight_list) { - var result = []; - for (var i = 0; i < blocks.length; i++) { - if (blocks[i].t !== 'ReferenceDef') { - result.push(this.renderBlock(blocks[i], in_tight_list)); + while (event = walker.next()) { + entering = event.entering; + node = event.node; + + switch (node.t) { + case 'Text': + out(esc(node.c)); + break; + + case 'Softbreak': + out(this.softbreak); + break; + + case 'Hardbreak': + out(tag('br', [], true)); + cr(); + break; + + case 'Emph': + out(tag(entering ? 'em' : '/em')); + break; + + case 'Strong': + out(tag(entering ? 'strong' : '/strong')); + break; + + case 'Emph': + out(tag(entering ? 'strong' : '/strong')); + break; + + case 'Html': + out(node.c); + break; + + case 'Link': + if (entering) { + attrs = [['href', esc(node.destination, true)]]; + if (node.title) { + attrs.push(['title', esc(node.title, true)]); + } + out(tag('a', attrs)); + } else { + out(tag('/a')); + } + break; + + case 'Image': + if (entering) { + if (disableTags == 0) { + out('');
+                }
+                disableTags += 1;
+            } else {
+                disableTags -= 1;
+                if (disableTags == 0) {
+                    if (node.title) {
+                        out(''); + } + } + break; + + case 'Code': + out(tag('code') + esc(node.c) + tag('/code')); + break; + + case 'Document': + break; + + case 'Paragraph': + grandparent = node.parent.parent; + if (grandparent !== null && + grandparent.t === 'List') { + if (grandparent.tight) + break; + } + if (entering) { + cr(); + out(tag('p')); + } else { + out(tag('/p')); + cr(); + } + break; + + case 'BlockQuote': + if (entering) { + cr(); + out(tag('blockquote')); + cr(); + } else { + cr(); + out(tag('/blockquote')); + cr(); + } + break; + + case 'ListItem': + if (entering) { + out(tag('li')); + } else { + out(tag('/li')); + cr(); + } + break; + + case 'List': + tagname = node.list_data.type === 'Bullet' ? 'ul' : 'ol'; + if (entering) { + attr = (!node.list_data.start || node.list_data.start === 1) ? + [] : [['start', node.list_data.start.toString()]]; + cr(); + out(tag(tagname, attr)); + cr(); + } else { + cr(); + out(tag('/' + tagname)); + cr(); + } + break; + + case 'Header': + tagname = 'h' + node.level; + if (entering) { + cr(); + out(tag(tagname)); + } else { + out(tag('/' + tagname)); + cr(); + } + break; + + case 'CodeBlock': + info_words = node.info ? node.info.split(/ +/) : []; + attr = (info_words.length === 0 || info_words[0].length === 0) + ? [] : [['class', 'language-' + esc(info_words[0], true)]]; + cr(); + out(tag('pre') + tag('code', attr)); + out(this.escape(node.string_content)); + out(tag('/code') + tag('/pre')); + cr(); + break; + + case 'HtmlBlock': + cr(); + out(node.string_content); + cr(); + break; + + case 'HorizontalRule': + cr(); + out(tag('hr', [], true)); + cr(); + break; + + + case 'ReferenceDef': + break; + + default: + console.log("Unknown node type " + node.t); } + } - return result.join(this.blocksep); + return buffer.join(''); }; + // The HtmlRenderer object. function HtmlRenderer(){ return { @@ -157,11 +232,7 @@ function HtmlRenderer(){ .replace(/["]/g, '"'); } }, - renderInline: renderInline, - renderInlines: renderInlines, - renderBlock: renderBlock, - renderBlocks: renderBlocks, - render: renderBlock + render: renderNodes }; } diff --git a/js/lib/index.js b/js/lib/index.js index 4e04532513..b2388ce5ff 100755 --- a/js/lib/index.js +++ b/js/lib/index.js @@ -17,6 +17,7 @@ var renderAST = function(tree) { return util.inspect(tree, {depth: null}); }; +module.exports.Node = require('./node'); module.exports.DocParser = require('./blocks'); module.exports.HtmlRenderer = require('./html-renderer'); module.exports.ASTRenderer = renderAST; diff --git a/js/lib/inlines.js b/js/lib/inlines.js index ef7a00f183..23b2b1e605 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -85,6 +85,12 @@ var normalizeReference = function(s) { .toUpperCase(); }; +var text = function(s) { + var node = new Node('Text'); + node.c = s; + return node; +} + // INLINE PARSER // These are methods of an InlineParser object, defined below. @@ -123,9 +129,9 @@ var spnl = function() { // in the subject. If they succeed in matching anything, they // return the inline matched, advancing the subject. -// Attempt to parse backticks, returning either a backtick code span or a +// Attempt to parse backticks, adding either a backtick code span or a // literal sequence of backticks. -var parseBackticks = function(inlines) { +var parseBackticks = function(block) { var ticks = this.match(/^`+/); if (!ticks) { return 0; @@ -133,37 +139,42 @@ var parseBackticks = function(inlines) { var afterOpenTicks = this.pos; var foundCode = false; var matched; + var node; while (!foundCode && (matched = this.match(/`+/m))) { if (matched === ticks) { - inlines.push({ t: 'Code', c: this.subject.slice(afterOpenTicks, - this.pos - ticks.length) - .replace(/[ \n]+/g, ' ') - .trim() }); + node = new Node('Code'); + node.c = this.subject.slice(afterOpenTicks, + this.pos - ticks.length) + .replace(/[ \n]+/g, ' ') + .trim(); + block.appendChild(node); return true; } } // If we got here, we didn't match a closing backtick sequence. this.pos = afterOpenTicks; - inlines.push({ t: 'Text', c: ticks }); + block.appendChild(text(ticks)); return true; }; // Parse a backslash-escaped special character, adding either the escaped // character, a hard line break (if the backslash is followed by a newline), -// or a literal backslash to the 'inlines' list. -var parseBackslash = function(inlines) { +// or a literal backslash to the block's children. +var parseBackslash = function(block) { var subj = this.subject, pos = this.pos; + var node; if (subj.charCodeAt(pos) === C_BACKSLASH) { if (subj.charAt(pos + 1) === '\n') { this.pos = this.pos + 2; - inlines.push({ t: 'Hardbreak' }); + node = new Node('Hardbreak'); + block.appendChild(node); } else if (reEscapable.test(subj.charAt(pos + 1))) { this.pos = this.pos + 2; - inlines.push({ t: 'Text', c: subj.charAt(pos + 1) }); + block.appendChild(text(subj.charAt(pos + 1))); } else { this.pos++; - inlines.push({t: 'Text', c: '\\'}); + block.appendChild(text('\\')); } return true; } else { @@ -172,22 +183,23 @@ var parseBackslash = function(inlines) { }; // Attempt to parse an autolink (URL or email in pointy brackets). -var parseAutolink = function(inlines) { +var parseAutolink = function(block) { var m; var dest; + var node; if ((m = this.match(/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/))) { // email autolink dest = m.slice(1, -1); - inlines.push( - {t: 'Link', - children: [{ t: 'Text', c: dest }], - destination: 'mailto:' + encodeURI(unescape(dest)) }); + node = new Node('Link'); + node.destination = 'mailto:' + encodeURI(unescape(dest)); + node.appendChild(text(dest)); + block.appendChild(node); return true; } else if ((m = this.match(/^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i))) { dest = m.slice(1, -1); - inlines.push({ - t: 'Link', - children: [{ t: 'Text', c: dest }], - destination: encodeURI(unescape(dest)) }); + node = new Node('Link'); + node.destination = encodeURI(unescape(dest)); + node.appendChild(text(dest)); + block.appendChild(node); return true; } else { return false; @@ -195,10 +207,13 @@ var parseAutolink = function(inlines) { }; // Attempt to parse a raw HTML tag. -var parseHtmlTag = function(inlines) { +var parseHtmlTag = function(block) { var m = this.match(reHtmlTag); + var node; if (m) { - inlines.push({ t: 'Html', c: m }); + node = new Node('Html'); + node.c = m; + block.appendChild(node); return true; } else { return false; @@ -247,20 +262,8 @@ var scanDelims = function(cc) { can_close: can_close }; }; -var Emph = function(ils) { - return {t: 'Emph', children: ils}; -}; - -var Strong = function(ils) { - return {t: 'Strong', children: ils}; -}; - -var Str = function(s) { - return {t: 'Text', c: s}; -}; - // Attempt to parse emphasis or strong emphasis. -var parseEmphasis = function(cc, inlines) { +var parseEmphasis = function(cc, block) { var res = this.scanDelims(cc); var numdelims = res.numdelims; @@ -271,12 +274,13 @@ var parseEmphasis = function(cc, inlines) { } this.pos += numdelims; - inlines.push(Str(this.subject.slice(startpos, this.pos))); + var node = text(this.subject.slice(startpos, this.pos)); + block.appendChild(node); // Add entry to stack for this opener this.delimiters = { cc: cc, numdelims: numdelims, - pos: inlines.length - 1, + node: node, previous: this.delimiters, next: null, can_open: res.can_open, @@ -302,28 +306,14 @@ var removeDelimiter = function(delim) { } }; -var removeGaps = function(inlines) { - // remove gaps from inlines - var i, j; - j = 0; - for (i = 0 ; i < inlines.length; i++) { - if (inlines[i] !== null) { - inlines[j] = inlines[i]; - j++; - } - } - inlines.splice(j); -}; - -var processEmphasis = function(inlines, stack_bottom) { +var processEmphasis = function(block, stack_bottom) { "use strict"; var opener, closer; var opener_inl, closer_inl; var nextstack, tempstack; var use_delims; var contents; - var emph; - var i; + var tmp, next; // find first closer above stack_bottom: closer = this.delimiters; @@ -350,8 +340,8 @@ var processEmphasis = function(inlines, stack_bottom) { use_delims = closer.numdelims % 2 === 0 ? 2 : 1; } - opener_inl = inlines[opener.pos]; - closer_inl = inlines[closer.pos]; + opener_inl = opener.node; + closer_inl = closer.node; // remove used delimiters from stack elts and inlines opener.numdelims -= use_delims; @@ -360,17 +350,18 @@ var processEmphasis = function(inlines, stack_bottom) { closer_inl.c = closer_inl.c.slice(0, closer_inl.c.length - use_delims); // build contents for new emph element - contents = inlines.slice(opener.pos + 1, closer.pos); - removeGaps(contents); - - emph = use_delims === 1 ? Emph(contents) : Strong(contents); - - // insert into list of inlines - inlines[opener.pos + 1] = emph; - for (i = opener.pos + 2; i < closer.pos; i++) { - inlines[i] = null; + var emph = new Node(use_delims === 1 ? 'Emph' : 'Strong'); + + tmp = opener_inl.next; + while (tmp && tmp !== closer_inl) { + next = tmp.next; + tmp.unlink(); + emph.appendChild(tmp); + tmp = next; } + opener_inl.insertAfter(emph); + // remove elts btw opener and closer in delimiters stack tempstack = closer.previous; while (tempstack !== null && tempstack !== opener) { @@ -381,18 +372,17 @@ var processEmphasis = function(inlines, stack_bottom) { // if opener has 0 delims, remove it and the inline if (opener.numdelims === 0) { - inlines[opener.pos] = null; + opener_inl.unlink(); this.removeDelimiter(opener); } if (closer.numdelims === 0) { - inlines[closer.pos] = null; + closer_inl.unlink(); tempstack = closer.next; this.removeDelimiter(closer); closer = tempstack; } - } else { closer = closer.next; } @@ -403,8 +393,6 @@ var processEmphasis = function(inlines, stack_bottom) { } - removeGaps(inlines); - // remove all delimiters while (this.delimiters !== stack_bottom) { this.removeDelimiter(this.delimiters); @@ -445,18 +433,19 @@ var parseLinkLabel = function() { return m === null ? 0 : m.length; }; -// Add open bracket to delimiter stack and add a Str to inlines. -var parseOpenBracket = function(inlines) { +// Add open bracket to delimiter stack and add a text node to block's children. +var parseOpenBracket = function(block) { var startpos = this.pos; this.pos += 1; - inlines.push(Str("[")); + var node = text('['); + block.appendChild(node); // Add entry to stack for this opener this.delimiters = { cc: C_OPEN_BRACKET, numdelims: 1, - pos: inlines.length - 1, + node: node, previous: this.delimiters, next: null, can_open: true, @@ -472,19 +461,21 @@ var parseOpenBracket = function(inlines) { }; // IF next character is [, and ! delimiter to delimiter stack and -// add a Str to inlines. Otherwise just add a Str. -var parseBang = function(inlines) { +// add a text node to block's children. Otherwise just add a text node. +var parseBang = function(block) { var startpos = this.pos; this.pos += 1; if (this.peek() === C_OPEN_BRACKET) { this.pos += 1; - inlines.push(Str("![")); + + var node = text('!['); + block.appendChild(node); // Add entry to stack for this opener this.delimiters = { cc: C_BANG, numdelims: 1, - pos: inlines.length - 1, + node: node, previous: this.delimiters, next: null, can_open: true, @@ -495,22 +486,21 @@ var parseBang = function(inlines) { this.delimiters.previous.next = this.delimiters; } } else { - inlines.push(Str("!")); + block.appendChild(text('!')); } return true; }; // Try to match close bracket against an opening in the delimiter // stack. Add either a link or image, or a plain [ character, -// to the inlines stack. If there is a matching delimiter, +// to block's children. If there is a matching delimiter, // remove it from the delimiter stack. -var parseCloseBracket = function(inlines) { +var parseCloseBracket = function(block) { var startpos; var is_image; var dest; var title; var matched = false; - var link_text; var i; var reflabel; var opener; @@ -530,13 +520,13 @@ var parseCloseBracket = function(inlines) { if (opener === null) { // no matched opener, just return a literal - inlines.push(Str("]")); + block.appendChild(text(']')); return true; } if (!opener.active) { // no matched opener, just return a literal - inlines.push(Str("]")); + block.appendChild(text(']')); // take opener off emphasis stack this.removeDelimiter(opener); return true; @@ -544,15 +534,6 @@ var parseCloseBracket = function(inlines) { // If we got here, open is a potential opener is_image = opener.cc === C_BANG; - // instead of copying a slice, we null out the - // parts of inlines that don't correspond to link_text; - // later, we'll collapse them. This is awkward, and could - // be simplified if we made inlines a linked list rather than - // an array: - link_text = inlines.slice(0); - for (i = 0; i < opener.pos + 1; i++) { - link_text[i] = null; - } // Check to see if we have a link/image @@ -597,13 +578,22 @@ var parseCloseBracket = function(inlines) { } if (matched) { - this.processEmphasis(link_text, opener.previous); - - // remove the part of inlines that became link_text. - // see note above on why we need to do this instead of splice: - for (i = opener.pos; i < inlines.length; i++) { - inlines[i] = null; + var node = new Node(is_image ? 'Image' : 'Link'); + node.destination = dest; + node.title = title; + + var tmp, next; + tmp = opener.node.next; + while (tmp) { + next = tmp.next; + tmp.unlink(); + node.appendChild(tmp); + tmp = next; } + block.appendChild(node); + this.processEmphasis(node, opener.previous); + + opener.node.unlink(); // processEmphasis will remove this and later delimiters. // Now, for a link, we also deactivate earlier link openers. @@ -618,27 +608,23 @@ var parseCloseBracket = function(inlines) { } } - inlines.push({t: is_image ? 'Image' : 'Link', - destination: dest, - title: title, - children: link_text}); return true; } else { // no match this.removeDelimiter(opener); // remove this opener from stack this.pos = startpos; - inlines.push(Str("]")); + block.appendChild(text(']')); return true; } }; // Attempt to parse an entity, return Entity object if successful. -var parseEntity = function(inlines) { +var parseEntity = function(block) { var m; if ((m = this.match(reEntityHere))) { - inlines.push({ t: 'Text', c: entityToChar(m) }); + block.appendChild(text(entityToChar(m))); return true; } else { return false; @@ -646,11 +632,11 @@ var parseEntity = function(inlines) { }; // Parse a run of ordinary characters, or a single character with -// a special meaning in markdown, as a plain string, adding to inlines. -var parseString = function(inlines) { +// a special meaning in markdown, as a plain string. +var parseString = function(block) { var m; if ((m = this.match(reMain))) { - inlines.push({ t: 'Text', c: m }); + block.appendChild(text(m)); return true; } else { return false; @@ -659,17 +645,15 @@ var parseString = function(inlines) { // Parse a newline. If it was preceded by two spaces, return a hard // line break; otherwise a soft line break. -var parseNewline = function(inlines) { +var parseNewline = function(block) { var m = this.match(/^ *\n/); if (m) { - if (m.length > 2) { - inlines.push({ t: 'Hardbreak' }); - } else if (m.length > 0) { - inlines.push({ t: 'Softbreak' }); - } + var node = new Node(m.length > 2 ? 'Hardbreak' : 'Softbreak'); + block.appendChild(node); return true; + } else { + return false; } - return false; }; // Attempt to parse a link reference, modifying refmap. @@ -731,9 +715,9 @@ var parseReference = function(s, refmap) { }; // Parse the next inline element in subject, advancing subject position. -// On success, add the result to the inlines list, and return true. +// On success, add the result to block's children and return true. // On failure, return false. -var parseInline = function(inlines) { +var parseInline = function(block) { "use strict"; var c = this.peek(); if (c === -1) { @@ -743,56 +727,57 @@ var parseInline = function(inlines) { switch(c) { case C_NEWLINE: case C_SPACE: - res = this.parseNewline(inlines); + res = this.parseNewline(block); break; case C_BACKSLASH: - res = this.parseBackslash(inlines); + res = this.parseBackslash(block); break; case C_BACKTICK: - res = this.parseBackticks(inlines); + res = this.parseBackticks(block); break; case C_ASTERISK: case C_UNDERSCORE: - res = this.parseEmphasis(c, inlines); + res = this.parseEmphasis(c, block); break; case C_OPEN_BRACKET: - res = this.parseOpenBracket(inlines); + res = this.parseOpenBracket(block); break; case C_BANG: - res = this.parseBang(inlines); + res = this.parseBang(block); break; case C_CLOSE_BRACKET: - res = this.parseCloseBracket(inlines); + res = this.parseCloseBracket(block); break; case C_LESSTHAN: - res = this.parseAutolink(inlines) || this.parseHtmlTag(inlines); + res = this.parseAutolink(block) || this.parseHtmlTag(block); break; case C_AMPERSAND: - res = this.parseEntity(inlines); + res = this.parseEntity(block); break; default: - res = this.parseString(inlines); + res = this.parseString(block); break; } if (!res) { this.pos += 1; - inlines.push({t: 'Text', c: fromCodePoint(c)}); + var textnode = new Node('Text'); + textnode.c = fromCodePoint(c); + block.appendChild(textnode); } return true; }; -// Parse s as a list of inlines, using refmap to resolve references. -var parseInlines = function(s, refmap) { - this.subject = s; +// Parse string_content in block into inline children, +// using refmap to resolve references. +var parseInlines = function(block, refmap) { + this.subject = block.string_content.trim(); this.pos = 0; this.refmap = refmap || {}; this.delimiters = null; - var inlines = []; - while (this.parseInline(inlines)) { + while (this.parseInline(block)) { } - this.processEmphasis(inlines, null); - return inlines; + this.processEmphasis(block, null); }; // The InlineParser object. diff --git a/js/lib/node.js b/js/lib/node.js new file mode 100644 index 0000000000..f96d65ce83 --- /dev/null +++ b/js/lib/node.js @@ -0,0 +1,195 @@ +util = require('util'); + +function isContainer(node) { + var t = node.t; + return (t == 'Document' || + t == 'BlockQuote' || + t == 'List' || + t == 'ListItem' || + t == 'Paragraph' || + t == 'Header' || + t == 'Emph' || + t == 'Strong' || + t == 'Link' || + t == 'Image'); +} + +function NodeWalker(root) { + this.current = root; + this.root = root; + this.entering = true; +} + +NodeWalker.prototype.resumeAt = function(node, entering) { + this.current = node; + this.entering = (entering === true); +}; + +NodeWalker.prototype.next = function(){ + var cur = this.current; + var entering = this.entering; + + if (!cur) + return null; + + var container = isContainer(cur); + + if (entering && container) { + if (cur.firstChild) { + this.current = cur.firstChild; + this.entering = true; + } else { + // stay on node but exit + this.entering = false; + } + + } else if (!entering && cur == this.root) { + // don't move past root + this.current = null; + + } else if (cur.next) { + this.current = cur.next; + this.entering = true; + + } else { + this.current = cur.parent; + this.entering = false; + } + + return {entering: entering, node: cur}; +}; + +function Node(nodeType) { + this.t = nodeType; + this.parent = null; + this.firstChild = null; + this.lastChild = null; + this.prev = null; + this.next = null; + this.pos = {}; +} + +Node.prototype.isContainer = function() { + return isContainer(this); +}; + +Node.prototype.appendChild = function(child) { + child.unlink(); + child.parent = this; + if (this.lastChild) { + this.lastChild.next = child; + child.prev = this.lastChild; + this.lastChild = child; + } else { + this.firstChild = child; + this.lastChild = child; + } +}; + +Node.prototype.prependChild = function(child) { + child.unlink(); + child.parent = this; + if (this.firstChild) { + this.firstChild.prev = child; + child.next = this.firstChild; + this.firstChild = child; + } else { + this.firstChild = child; + this.lastChild = child; + } +}; + +Node.prototype.unlink = function() { + if (this.prev) { + this.prev.next = this.next; + } else if (this.parent) { + this.parent.firstChild = this.next; + } + if (this.next) { + this.next.prev = this.prev; + } else if (this.parent) { + this.parent.lastChild = this.prev; + } + this.parent = null; + this.next = null; + this.prev = null; +}; + +Node.prototype.insertAfter = function(sibling) { + sibling.unlink(); + sibling.next = this.next; + if (sibling.next) { + sibling.next.prev = sibling; + } + sibling.prev = this; + this.next = sibling; + sibling.parent = this.parent; + if (!sibling.next) { + sibling.parent.lastChild = sibling; + } +}; + +Node.prototype.insertBefore = function(sibling) { + sibling.unlink(); + sibling.prev = this.prev; + if (sibling.prev) { + sibling.prev.next = sibling; + } + sibling.next = this; + this.prev = sibling; + sibling.parent = this.parent; + if (!sibling.prev) { + sibling.parent.firstChild = sibling; + } +}; + +Node.prototype.walker = function() { + var walker = new NodeWalker(this); + return walker; +}; + +Node.prototype.toAST = function() { + var children; + var cur; + var result = { t: this.t }; + + var propsToShow = ['t', 'c', 'list_data', 'string_content', + 'pos', 'start_column', 'end_column', + 'tight', 'info']; + + for (var i = 0; i < propsToShow.length; i++) { + var prop = propsToShow[i]; + if (this[prop] !== undefined) { + result[prop] = this[prop]; + } + } + + if (isContainer(this)) { + children = []; + if (this.firstChild) { + cur = this.firstChild; + while (cur) { + // TODO avoid recursion here... + children.push(cur.toAST()); + cur = cur.next; + } + result.children = children; + } + } + return result; + +}; + +module.exports = Node; + + +/* Example of use of walker: + + var walker = w.walker(); + var event; + + while (event = walker.next()) { + console.log(event.entering, event.node.t); + } + +*/ diff --git a/js/test.js b/js/test.js index 73ec450979..6cb7c986bb 100755 --- a/js/test.js +++ b/js/test.js @@ -56,7 +56,7 @@ fs.readFile('spec.txt', 'utf8', function(err, data) { current_section = example.section; cursor.reset().write(current_section).reset().write(' '); } - var actual = writer.renderBlock(reader.parse(example.markdown.replace(/→/g, '\t'))); + var actual = writer.render(reader.parse(example.markdown.replace(/→/g, '\t'))); if (actual === example.html) { passed++; cursor.green().write('✓').reset(); -- cgit 0.0.5-2-1-g0f52 From d90bcbedb0b6dd20d41b42eba2f2cd5e0acf8aee Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 10:49:43 -0800 Subject: Minor code reformatting. --- src/cmark.h | 2 +- src/iterator.c | 2 +- src/xml.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index 84a15c867b..72650c9320 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -189,7 +189,7 @@ cmark_iter_free(cmark_iter *iter); CMARK_EXPORT void cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type); + cmark_event_type event_type); /** Returns the event type (`CMARK_EVENT_ENTER`, `CMARK_EVENT_EXIT`, * or `CMARK_EVENT_DONE`) for the next node. diff --git a/src/iterator.c b/src/iterator.c index 2c152462e6..a3ae4158d8 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -50,7 +50,7 @@ int S_is_leaf(cmark_node *node) void cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type) + cmark_event_type event_type) { iter->event_type = event_type; iter->current = current; diff --git a/src/xml.c b/src/xml.c index ae85018a28..66899970ec 100644 --- a/src/xml.c +++ b/src/xml.c @@ -76,14 +76,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_ORDERED_LIST: cmark_strbuf_puts(xml, " type=\"ordered\""); cmark_strbuf_printf(xml, " start=\"%d\"", - cmark_node_get_list_start(node)); + cmark_node_get_list_start(node)); delim = cmark_node_get_list_delim(node); if (delim == CMARK_PAREN_DELIM) { cmark_strbuf_puts(xml, - " delim=\"paren\""); + " delim=\"paren\""); } else if (delim == CMARK_PERIOD_DELIM) { cmark_strbuf_puts(xml, - " delim=\"period\""); + " delim=\"period\""); } break; case CMARK_BULLET_LIST: @@ -93,8 +93,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; } cmark_strbuf_printf(xml, " tight=\"%s\"", - (cmark_node_get_list_tight(node) ? - "true" : "false")); + (cmark_node_get_list_tight(node) ? + "true" : "false")); break; case CMARK_NODE_CODE_BLOCK: if (node->as.code.info.len > 0) { -- cgit 0.0.5-2-1-g0f52 From d2eb8460e8409f8c419f816312c3362e45367913 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 11:01:30 -0800 Subject: JS linter cleanups. --- js/lib/node.js | 271 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 136 insertions(+), 135 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index f96d65ce83..f88dff5d00 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -1,182 +1,183 @@ -util = require('util'); +"use strict"; function isContainer(node) { - var t = node.t; - return (t == 'Document' || - t == 'BlockQuote' || - t == 'List' || - t == 'ListItem' || - t == 'Paragraph' || - t == 'Header' || - t == 'Emph' || - t == 'Strong' || - t == 'Link' || - t == 'Image'); + var t = node.t; + return (t === 'Document' || + t === 'BlockQuote' || + t === 'List' || + t === 'ListItem' || + t === 'Paragraph' || + t === 'Header' || + t === 'Emph' || + t === 'Strong' || + t === 'Link' || + t === 'Image'); } function NodeWalker(root) { - this.current = root; - this.root = root; - this.entering = true; + this.current = root; + this.root = root; + this.entering = true; } NodeWalker.prototype.resumeAt = function(node, entering) { - this.current = node; - this.entering = (entering === true); + this.current = node; + this.entering = (entering === true); }; NodeWalker.prototype.next = function(){ - var cur = this.current; - var entering = this.entering; + var cur = this.current; + var entering = this.entering; - if (!cur) - return null; + if (!cur) { + return null; + } - var container = isContainer(cur); + var container = isContainer(cur); - if (entering && container) { - if (cur.firstChild) { - this.current = cur.firstChild; - this.entering = true; - } else { - // stay on node but exit - this.entering = false; - } + if (entering && container) { + if (cur.firstChild) { + this.current = cur.firstChild; + this.entering = true; + } else { + // stay on node but exit + this.entering = false; + } - } else if (!entering && cur == this.root) { - // don't move past root - this.current = null; + } else if (!entering && cur === this.root) { + // don't move past root + this.current = null; - } else if (cur.next) { - this.current = cur.next; - this.entering = true; + } else if (cur.next) { + this.current = cur.next; + this.entering = true; - } else { - this.current = cur.parent; - this.entering = false; - } + } else { + this.current = cur.parent; + this.entering = false; + } - return {entering: entering, node: cur}; + return {entering: entering, node: cur}; }; function Node(nodeType) { - this.t = nodeType; - this.parent = null; - this.firstChild = null; - this.lastChild = null; - this.prev = null; - this.next = null; - this.pos = {}; + this.t = nodeType; + this.parent = null; + this.firstChild = null; + this.lastChild = null; + this.prev = null; + this.next = null; + this.pos = {}; } Node.prototype.isContainer = function() { - return isContainer(this); + return isContainer(this); }; Node.prototype.appendChild = function(child) { - child.unlink(); - child.parent = this; - if (this.lastChild) { - this.lastChild.next = child; - child.prev = this.lastChild; - this.lastChild = child; - } else { - this.firstChild = child; - this.lastChild = child; - } + child.unlink(); + child.parent = this; + if (this.lastChild) { + this.lastChild.next = child; + child.prev = this.lastChild; + this.lastChild = child; + } else { + this.firstChild = child; + this.lastChild = child; + } }; Node.prototype.prependChild = function(child) { - child.unlink(); - child.parent = this; - if (this.firstChild) { - this.firstChild.prev = child; - child.next = this.firstChild; - this.firstChild = child; - } else { - this.firstChild = child; - this.lastChild = child; - } + child.unlink(); + child.parent = this; + if (this.firstChild) { + this.firstChild.prev = child; + child.next = this.firstChild; + this.firstChild = child; + } else { + this.firstChild = child; + this.lastChild = child; + } }; Node.prototype.unlink = function() { - if (this.prev) { - this.prev.next = this.next; - } else if (this.parent) { - this.parent.firstChild = this.next; - } - if (this.next) { - this.next.prev = this.prev; - } else if (this.parent) { - this.parent.lastChild = this.prev; - } - this.parent = null; - this.next = null; - this.prev = null; + if (this.prev) { + this.prev.next = this.next; + } else if (this.parent) { + this.parent.firstChild = this.next; + } + if (this.next) { + this.next.prev = this.prev; + } else if (this.parent) { + this.parent.lastChild = this.prev; + } + this.parent = null; + this.next = null; + this.prev = null; }; Node.prototype.insertAfter = function(sibling) { - sibling.unlink(); - sibling.next = this.next; - if (sibling.next) { - sibling.next.prev = sibling; - } - sibling.prev = this; - this.next = sibling; - sibling.parent = this.parent; - if (!sibling.next) { - sibling.parent.lastChild = sibling; - } + sibling.unlink(); + sibling.next = this.next; + if (sibling.next) { + sibling.next.prev = sibling; + } + sibling.prev = this; + this.next = sibling; + sibling.parent = this.parent; + if (!sibling.next) { + sibling.parent.lastChild = sibling; + } }; Node.prototype.insertBefore = function(sibling) { - sibling.unlink(); - sibling.prev = this.prev; - if (sibling.prev) { - sibling.prev.next = sibling; - } - sibling.next = this; - this.prev = sibling; - sibling.parent = this.parent; - if (!sibling.prev) { - sibling.parent.firstChild = sibling; - } + sibling.unlink(); + sibling.prev = this.prev; + if (sibling.prev) { + sibling.prev.next = sibling; + } + sibling.next = this; + this.prev = sibling; + sibling.parent = this.parent; + if (!sibling.prev) { + sibling.parent.firstChild = sibling; + } }; Node.prototype.walker = function() { - var walker = new NodeWalker(this); - return walker; + var walker = new NodeWalker(this); + return walker; }; Node.prototype.toAST = function() { - var children; - var cur; - var result = { t: this.t }; - - var propsToShow = ['t', 'c', 'list_data', 'string_content', - 'pos', 'start_column', 'end_column', - 'tight', 'info']; - - for (var i = 0; i < propsToShow.length; i++) { - var prop = propsToShow[i]; - if (this[prop] !== undefined) { - result[prop] = this[prop]; - } - } - - if (isContainer(this)) { - children = []; - if (this.firstChild) { - cur = this.firstChild; - while (cur) { - // TODO avoid recursion here... - children.push(cur.toAST()); - cur = cur.next; - } - result.children = children; + var children; + var cur; + var result = { t: this.t }; + + var propsToShow = ['t', 'c', 'list_data', 'string_content', + 'pos', 'start_column', 'end_column', + 'tight', 'info']; + + for (var i = 0; i < propsToShow.length; i++) { + var prop = propsToShow[i]; + if (this[prop] !== undefined) { + result[prop] = this[prop]; + } + } + + if (isContainer(this)) { + children = []; + if (this.firstChild) { + cur = this.firstChild; + while (cur) { + // TODO avoid recursion here... + children.push(cur.toAST()); + cur = cur.next; + } + result.children = children; + } } - } - return result; + return result; }; @@ -189,7 +190,7 @@ module.exports = Node; var event; while (event = walker.next()) { - console.log(event.entering, event.node.t); + console.log(event.entering, event.node.t); } -*/ + */ -- cgit 0.0.5-2-1-g0f52 From 1777d308f050cc4fddd1f835e483eaf17071241f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 11:02:10 -0800 Subject: Rename js/lib/html-renderer.js -> js/lib/html.js. --- js/lib/html-renderer.js | 239 ------------------------------------------------ js/lib/html.js | 239 ++++++++++++++++++++++++++++++++++++++++++++++++ js/lib/index.js | 2 +- 3 files changed, 240 insertions(+), 240 deletions(-) delete mode 100644 js/lib/html-renderer.js create mode 100644 js/lib/html.js diff --git a/js/lib/html-renderer.js b/js/lib/html-renderer.js deleted file mode 100644 index e7953cf8ed..0000000000 --- a/js/lib/html-renderer.js +++ /dev/null @@ -1,239 +0,0 @@ -// Helper function to produce an HTML tag. -var tag = function(name, attribs, selfclosing) { - var result = '<' + name; - if (attribs) { - var i = 0; - var attrib; - while ((attrib = attribs[i]) !== undefined) { - result = result.concat(' ', attrib[0], '="', attrib[1], '"'); - i++; - } - } - if (selfclosing) - result += ' /'; - - result += '>'; - return result; -}; - -var renderNodes = function(block) { - - var attrs; - var info_words; - var tagname; - var walker = block.walker(); - var event, node, entering; - var buffer = []; - var disableTags = 0; - var grandparent; - var out = function(s) { - if (disableTags > 0) { - buffer.push(s.replace(/\<[^>]*\>/g, '')); - } else { - buffer.push(s); - } - } - var esc = this.escape; - var cr = function() { - if (buffer.length > 0 && buffer[buffer.length - 1] !== '\n') { - out('\n'); - } - } - - while (event = walker.next()) { - entering = event.entering; - node = event.node; - - switch (node.t) { - case 'Text': - out(esc(node.c)); - break; - - case 'Softbreak': - out(this.softbreak); - break; - - case 'Hardbreak': - out(tag('br', [], true)); - cr(); - break; - - case 'Emph': - out(tag(entering ? 'em' : '/em')); - break; - - case 'Strong': - out(tag(entering ? 'strong' : '/strong')); - break; - - case 'Emph': - out(tag(entering ? 'strong' : '/strong')); - break; - - case 'Html': - out(node.c); - break; - - case 'Link': - if (entering) { - attrs = [['href', esc(node.destination, true)]]; - if (node.title) { - attrs.push(['title', esc(node.title, true)]); - } - out(tag('a', attrs)); - } else { - out(tag('/a')); - } - break; - - case 'Image': - if (entering) { - if (disableTags == 0) { - out('');
-                }
-                disableTags += 1;
-            } else {
-                disableTags -= 1;
-                if (disableTags == 0) {
-                    if (node.title) {
-                        out(''); - } - } - break; - - case 'Code': - out(tag('code') + esc(node.c) + tag('/code')); - break; - - case 'Document': - break; - - case 'Paragraph': - grandparent = node.parent.parent; - if (grandparent !== null && - grandparent.t === 'List') { - if (grandparent.tight) - break; - } - if (entering) { - cr(); - out(tag('p')); - } else { - out(tag('/p')); - cr(); - } - break; - - case 'BlockQuote': - if (entering) { - cr(); - out(tag('blockquote')); - cr(); - } else { - cr(); - out(tag('/blockquote')); - cr(); - } - break; - - case 'ListItem': - if (entering) { - out(tag('li')); - } else { - out(tag('/li')); - cr(); - } - break; - - case 'List': - tagname = node.list_data.type === 'Bullet' ? 'ul' : 'ol'; - if (entering) { - attr = (!node.list_data.start || node.list_data.start === 1) ? - [] : [['start', node.list_data.start.toString()]]; - cr(); - out(tag(tagname, attr)); - cr(); - } else { - cr(); - out(tag('/' + tagname)); - cr(); - } - break; - - case 'Header': - tagname = 'h' + node.level; - if (entering) { - cr(); - out(tag(tagname)); - } else { - out(tag('/' + tagname)); - cr(); - } - break; - - case 'CodeBlock': - info_words = node.info ? node.info.split(/ +/) : []; - attr = (info_words.length === 0 || info_words[0].length === 0) - ? [] : [['class', 'language-' + esc(info_words[0], true)]]; - cr(); - out(tag('pre') + tag('code', attr)); - out(this.escape(node.string_content)); - out(tag('/code') + tag('/pre')); - cr(); - break; - - case 'HtmlBlock': - cr(); - out(node.string_content); - cr(); - break; - - case 'HorizontalRule': - cr(); - out(tag('hr', [], true)); - cr(); - break; - - - case 'ReferenceDef': - break; - - default: - console.log("Unknown node type " + node.t); - } - - } - return buffer.join(''); -}; - - -// The HtmlRenderer object. -function HtmlRenderer(){ - return { - // default options: - blocksep: '\n', // space between blocks - innersep: '\n', // space between block container tag and contents - softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML - // set to "
                  " to make them hard breaks - // set to " " if you want to ignore line wrapping in source - escape: function(s, preserve_entities) { - if (preserve_entities) { - return s.replace(/[&](?![#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)/gi, '&') - .replace(/[<]/g, '<') - .replace(/[>]/g, '>') - .replace(/["]/g, '"'); - } else { - return s.replace(/[&]/g,'&') - .replace(/[<]/g, '<') - .replace(/[>]/g, '>') - .replace(/["]/g, '"'); - } - }, - render: renderNodes - }; -} - -module.exports = HtmlRenderer; diff --git a/js/lib/html.js b/js/lib/html.js new file mode 100644 index 0000000000..e7953cf8ed --- /dev/null +++ b/js/lib/html.js @@ -0,0 +1,239 @@ +// Helper function to produce an HTML tag. +var tag = function(name, attribs, selfclosing) { + var result = '<' + name; + if (attribs) { + var i = 0; + var attrib; + while ((attrib = attribs[i]) !== undefined) { + result = result.concat(' ', attrib[0], '="', attrib[1], '"'); + i++; + } + } + if (selfclosing) + result += ' /'; + + result += '>'; + return result; +}; + +var renderNodes = function(block) { + + var attrs; + var info_words; + var tagname; + var walker = block.walker(); + var event, node, entering; + var buffer = []; + var disableTags = 0; + var grandparent; + var out = function(s) { + if (disableTags > 0) { + buffer.push(s.replace(/\<[^>]*\>/g, '')); + } else { + buffer.push(s); + } + } + var esc = this.escape; + var cr = function() { + if (buffer.length > 0 && buffer[buffer.length - 1] !== '\n') { + out('\n'); + } + } + + while (event = walker.next()) { + entering = event.entering; + node = event.node; + + switch (node.t) { + case 'Text': + out(esc(node.c)); + break; + + case 'Softbreak': + out(this.softbreak); + break; + + case 'Hardbreak': + out(tag('br', [], true)); + cr(); + break; + + case 'Emph': + out(tag(entering ? 'em' : '/em')); + break; + + case 'Strong': + out(tag(entering ? 'strong' : '/strong')); + break; + + case 'Emph': + out(tag(entering ? 'strong' : '/strong')); + break; + + case 'Html': + out(node.c); + break; + + case 'Link': + if (entering) { + attrs = [['href', esc(node.destination, true)]]; + if (node.title) { + attrs.push(['title', esc(node.title, true)]); + } + out(tag('a', attrs)); + } else { + out(tag('/a')); + } + break; + + case 'Image': + if (entering) { + if (disableTags == 0) { + out('');
+                }
+                disableTags += 1;
+            } else {
+                disableTags -= 1;
+                if (disableTags == 0) {
+                    if (node.title) {
+                        out(''); + } + } + break; + + case 'Code': + out(tag('code') + esc(node.c) + tag('/code')); + break; + + case 'Document': + break; + + case 'Paragraph': + grandparent = node.parent.parent; + if (grandparent !== null && + grandparent.t === 'List') { + if (grandparent.tight) + break; + } + if (entering) { + cr(); + out(tag('p')); + } else { + out(tag('/p')); + cr(); + } + break; + + case 'BlockQuote': + if (entering) { + cr(); + out(tag('blockquote')); + cr(); + } else { + cr(); + out(tag('/blockquote')); + cr(); + } + break; + + case 'ListItem': + if (entering) { + out(tag('li')); + } else { + out(tag('/li')); + cr(); + } + break; + + case 'List': + tagname = node.list_data.type === 'Bullet' ? 'ul' : 'ol'; + if (entering) { + attr = (!node.list_data.start || node.list_data.start === 1) ? + [] : [['start', node.list_data.start.toString()]]; + cr(); + out(tag(tagname, attr)); + cr(); + } else { + cr(); + out(tag('/' + tagname)); + cr(); + } + break; + + case 'Header': + tagname = 'h' + node.level; + if (entering) { + cr(); + out(tag(tagname)); + } else { + out(tag('/' + tagname)); + cr(); + } + break; + + case 'CodeBlock': + info_words = node.info ? node.info.split(/ +/) : []; + attr = (info_words.length === 0 || info_words[0].length === 0) + ? [] : [['class', 'language-' + esc(info_words[0], true)]]; + cr(); + out(tag('pre') + tag('code', attr)); + out(this.escape(node.string_content)); + out(tag('/code') + tag('/pre')); + cr(); + break; + + case 'HtmlBlock': + cr(); + out(node.string_content); + cr(); + break; + + case 'HorizontalRule': + cr(); + out(tag('hr', [], true)); + cr(); + break; + + + case 'ReferenceDef': + break; + + default: + console.log("Unknown node type " + node.t); + } + + } + return buffer.join(''); +}; + + +// The HtmlRenderer object. +function HtmlRenderer(){ + return { + // default options: + blocksep: '\n', // space between blocks + innersep: '\n', // space between block container tag and contents + softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML + // set to "
                  " to make them hard breaks + // set to " " if you want to ignore line wrapping in source + escape: function(s, preserve_entities) { + if (preserve_entities) { + return s.replace(/[&](?![#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)/gi, '&') + .replace(/[<]/g, '<') + .replace(/[>]/g, '>') + .replace(/["]/g, '"'); + } else { + return s.replace(/[&]/g,'&') + .replace(/[<]/g, '<') + .replace(/[>]/g, '>') + .replace(/["]/g, '"'); + } + }, + render: renderNodes + }; +} + +module.exports = HtmlRenderer; diff --git a/js/lib/index.js b/js/lib/index.js index b2388ce5ff..3ded1df476 100755 --- a/js/lib/index.js +++ b/js/lib/index.js @@ -19,5 +19,5 @@ var renderAST = function(tree) { module.exports.Node = require('./node'); module.exports.DocParser = require('./blocks'); -module.exports.HtmlRenderer = require('./html-renderer'); +module.exports.HtmlRenderer = require('./html'); module.exports.ASTRenderer = renderAST; -- cgit 0.0.5-2-1-g0f52 From e68459f9557cb70b8df9eafea60de19aa2552537 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 11:06:06 -0800 Subject: JS linter improvements. (Note: this is helping performance. We have regained everything we lost with the last major change, and more.) --- js/lib/html.js | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/js/lib/html.js b/js/lib/html.js index e7953cf8ed..045ab54697 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -1,3 +1,5 @@ +"use strict"; + // Helper function to produce an HTML tag. var tag = function(name, attribs, selfclosing) { var result = '<' + name; @@ -9,8 +11,9 @@ var tag = function(name, attribs, selfclosing) { i++; } } - if (selfclosing) + if (selfclosing) { result += ' /'; + } result += '>'; return result; @@ -28,19 +31,19 @@ var renderNodes = function(block) { var grandparent; var out = function(s) { if (disableTags > 0) { - buffer.push(s.replace(/\<[^>]*\>/g, '')); + buffer.push(s.replace(/\<[^>]*\>/g, '')); } else { buffer.push(s); } - } + }; var esc = this.escape; var cr = function() { if (buffer.length > 0 && buffer[buffer.length - 1] !== '\n') { out('\n'); } - } + }; - while (event = walker.next()) { + while ((event = walker.next())) { entering = event.entering; node = event.node; @@ -88,14 +91,14 @@ var renderNodes = function(block) { case 'Image': if (entering) { - if (disableTags == 0) { + if (disableTags === 0) { out('');
                 }
                 disableTags += 1;
             } else {
                 disableTags -= 1;
-                if (disableTags == 0) {
+                if (disableTags === 0) {
                     if (node.title) {
                         out(']/g, '>') .replace(/["]/g, '"'); -- cgit 0.0.5-2-1-g0f52 From 98ad06a6d1ff2bbba75110dbe46e5c28cae966dd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 11:15:25 -0800 Subject: More JS linter fixes. --- js/lib/blocks.js | 58 ++++++++++++++++++++++++++++++++++++------------------- js/lib/inlines.js | 32 +++++++++++++++++++++++++++--- 2 files changed, 67 insertions(+), 23 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index cc2263a74a..1e20d29a2c 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -1,4 +1,4 @@ -Node = require('./node'); +var Node = require('./node'); var C_GREATERTHAN = 62; var C_SPACE = 32; @@ -9,11 +9,13 @@ var unescapeString = new InlineParser().unescapeString; // Returns true if string contains only space characters. var isBlank = function(s) { + "use strict"; return /^\s*$/.test(s); }; // Convert tabs to spaces on each line using a 4-space tab stop. var detabLine = function(text) { + "use strict"; if (text.indexOf('\t') === -1) { return text; } else { @@ -29,6 +31,7 @@ var detabLine = function(text) { // Attempt to match a regex in string s at offset offset. // Return index of match or -1. var matchAt = function(re, s, offset) { + "use strict"; var res = s.slice(offset).match(re); if (res) { return offset + res.index; @@ -50,18 +53,20 @@ var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; // These are methods of a DocParser object, defined below. var makeBlock = function(tag, start_line, start_column) { - var b = new Node(tag); - b.pos.start = [start_line, start_column]; - b.pos.end = []; // assigned in finalization step - b.open = true; - b.last_line_blank = false; - b.string_content = ""; - b.strings = []; - return b; + "use strict"; + var b = new Node(tag); + b.pos.start = [start_line, start_column]; + b.pos.end = []; // assigned in finalization step + b.open = true; + b.last_line_blank = false; + b.string_content = ""; + b.strings = []; + return b; }; // Returns true if parent block can contain child block. var canContain = function(parent_type, child_type) { + "use strict"; return ( parent_type === 'Document' || parent_type === 'BlockQuote' || parent_type === 'ListItem' || @@ -70,6 +75,7 @@ var canContain = function(parent_type, child_type) { // Returns true if block type can accept lines of text. var acceptsLines = function(block_type) { + "use strict"; return ( block_type === 'Paragraph' || block_type === 'IndentedCode' || block_type === 'FencedCode' ); @@ -78,15 +84,16 @@ var acceptsLines = function(block_type) { // Returns true if block ends with a blank line, descending if needed // into lists and sublists. var endsWithBlankLine = function(block) { + "use strict"; while (block) { - if (block.last_line_blank) { - return true; - } - if (block.t === 'List' || block.t === 'ListItem') { - block = block.lastChild; - } else { - break; - } + if (block.last_line_blank) { + return true; + } + if (block.t === 'List' || block.t === 'ListItem') { + block = block.lastChild; + } else { + break; + } } return false; }; @@ -96,6 +103,7 @@ var endsWithBlankLine = function(block) { // all the lists. (This is used to implement the "two blank lines // break of of all lists" feature.) var breakOutOfLists = function(block, line_number) { + "use strict"; var b = block; var last_list = null; do { @@ -118,6 +126,7 @@ var breakOutOfLists = function(block, line_number) { // Add a line to the block at the tip. We assume the tip // can accept lines -- that check should be done before calling this. var addLine = function(ln, offset) { + "use strict"; var s = ln.slice(offset); if (!(this.tip.open)) { throw { msg: "Attempted to add line (" + ln + ") to closed container." }; @@ -129,6 +138,7 @@ var addLine = function(ln, offset) { // accept children, close and finalize it and try its parent, // and so on til we find a block that can accept children. var addChild = function(tag, line_number, offset) { + "use strict"; while (!canContain(this.tip.t, tag)) { this.finalize(this.tip, line_number); } @@ -143,6 +153,7 @@ var addChild = function(tag, line_number, offset) { // Parse a list marker and return data on the marker (type, // start, delimiter, bullet character, padding) or null. var parseListMarker = function(ln, offset) { + "use strict"; var rest = ln.slice(offset); var match; var spaces_after_marker; @@ -178,6 +189,7 @@ var parseListMarker = function(ln, offset) { // with the same delimiter and bullet character. This is used // in agglomerating list items into lists. var listsMatch = function(list_data, item_data) { + "use strict"; return (list_data.type === item_data.type && list_data.delimiter === item_data.delimiter && list_data.bullet_char === item_data.bullet_char); @@ -187,6 +199,7 @@ var listsMatch = function(list_data, item_data) { // We parse markdown text by calling this on each line of input, // then finalizing the document. var incorporateLine = function(ln, line_number) { + "use strict"; var all_matched = true; var first_nonspace; @@ -528,6 +541,7 @@ var incorporateLine = function(ln, line_number) { // of paragraphs for reference definitions. Reset the tip to the // parent of the closed block. var finalize = function(block, line_number) { + "use strict"; var pos; // don't do anything if the block is already closed if (!block.open) { @@ -612,18 +626,21 @@ var finalize = function(block, line_number) { // Walk through a block & children recursively, parsing string content // into inline content where appropriate. Returns new object. var processInlines = function(block) { + "use strict"; var node, event; var walker = block.walker(); - while (event = walker.next()) { + while ((event = walker.next())) { node = event.node; - if (!event.entering && (node.t == 'Paragraph' || node.t == 'Header')) { - this.inlineParser.parse(node, this.refmap); + if (!event.entering && (node.t === 'Paragraph' || + node.t === 'Header')) { + this.inlineParser.parse(node, this.refmap); } } }; // The main parsing function. Returns a parsed document AST. var parse = function(input) { + "use strict"; this.doc = makeBlock('Document', 1, 1); this.tip = this.doc; this.refmap = {}; @@ -642,6 +659,7 @@ var parse = function(input) { // The DocParser object. function DocParser(){ + "use strict"; return { doc: makeBlock('Document', 1, 1), tip: this.doc, diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 23b2b1e605..5cec93bac9 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -1,3 +1,5 @@ +var Node = require('./node'); + var fromCodePoint = require('./from-code-point.js'); var entityToChar = require('./html5-entities.js').entityToChar; @@ -73,6 +75,7 @@ var reMain = /^(?:[_*`\n]+|[\[\]\\!<&*_]|(?: *[^\n `\[\]\\!<&*_]+)+|[ \n]+)/m; // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { + "use strict"; return s.replace(reAllEscapedChar, '$1') .replace(reEntity, entityToChar); }; @@ -80,16 +83,18 @@ var unescapeString = function(s) { // Normalize reference label: collapse internal whitespace // to single space, remove leading/trailing whitespace, case fold. var normalizeReference = function(s) { + "use strict"; return s.trim() .replace(/\s+/, ' ') .toUpperCase(); }; var text = function(s) { + "use strict"; var node = new Node('Text'); node.c = s; return node; -} +}; // INLINE PARSER @@ -100,6 +105,7 @@ var text = function(s) { // If re matches at current position in the subject, advance // position in subject and return the match; otherwise return null. var match = function(re) { + "use strict"; var m = re.exec(this.subject.slice(this.pos)); if (m) { this.pos += m.index + m[0].length; @@ -112,6 +118,7 @@ var match = function(re) { // Returns the code for the character at the current subject position, or -1 // there are no more characters. var peek = function() { + "use strict"; if (this.pos < this.subject.length) { return this.subject.charCodeAt(this.pos); } else { @@ -121,6 +128,7 @@ var peek = function() { // Parse zero or more space characters, including at most one newline var spnl = function() { + "use strict"; this.match(/^ *(?:\n *)?/); return 1; }; @@ -132,6 +140,7 @@ var spnl = function() { // Attempt to parse backticks, adding either a backtick code span or a // literal sequence of backticks. var parseBackticks = function(block) { + "use strict"; var ticks = this.match(/^`+/); if (!ticks) { return 0; @@ -161,6 +170,7 @@ var parseBackticks = function(block) { // character, a hard line break (if the backslash is followed by a newline), // or a literal backslash to the block's children. var parseBackslash = function(block) { + "use strict"; var subj = this.subject, pos = this.pos; var node; @@ -184,6 +194,7 @@ var parseBackslash = function(block) { // Attempt to parse an autolink (URL or email in pointy brackets). var parseAutolink = function(block) { + "use strict"; var m; var dest; var node; @@ -208,6 +219,7 @@ var parseAutolink = function(block) { // Attempt to parse a raw HTML tag. var parseHtmlTag = function(block) { + "use strict"; var m = this.match(reHtmlTag); var node; if (m) { @@ -225,6 +237,7 @@ var parseHtmlTag = function(block) { // they can open and/or close emphasis or strong emphasis. A utility // function for strong/emph parsing. var scanDelims = function(cc) { + "use strict"; var numdelims = 0; var char_before, char_after, cc_after; var startpos = this.pos; @@ -264,6 +277,7 @@ var scanDelims = function(cc) { // Attempt to parse emphasis or strong emphasis. var parseEmphasis = function(cc, block) { + "use strict"; var res = this.scanDelims(cc); var numdelims = res.numdelims; @@ -295,6 +309,7 @@ var parseEmphasis = function(cc, block) { }; var removeDelimiter = function(delim) { + "use strict"; if (delim.previous !== null) { delim.previous.next = delim.next; } @@ -312,7 +327,6 @@ var processEmphasis = function(block, stack_bottom) { var opener_inl, closer_inl; var nextstack, tempstack; var use_delims; - var contents; var tmp, next; // find first closer above stack_bottom: @@ -402,6 +416,7 @@ var processEmphasis = function(block, stack_bottom) { // Attempt to parse link title (sans quotes), returning the string // or null if no match. var parseLinkTitle = function() { + "use strict"; var title = this.match(reLinkTitle); if (title) { // chop off quotes from title and unescape: @@ -414,6 +429,7 @@ var parseLinkTitle = function() { // Attempt to parse link destination, returning the string or // null if no match. var parseLinkDestination = function() { + "use strict"; var res = this.match(reLinkDestinationBraces); if (res) { // chop off surrounding <..>: return encodeURI(unescape(unescapeString(res.substr(1, res.length - 2)))); @@ -429,12 +445,14 @@ var parseLinkDestination = function() { // Attempt to parse a link label, returning number of characters parsed. var parseLinkLabel = function() { + "use strict"; var m = this.match(/^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/); return m === null ? 0 : m.length; }; // Add open bracket to delimiter stack and add a text node to block's children. var parseOpenBracket = function(block) { + "use strict"; var startpos = this.pos; this.pos += 1; @@ -463,6 +481,7 @@ var parseOpenBracket = function(block) { // IF next character is [, and ! delimiter to delimiter stack and // add a text node to block's children. Otherwise just add a text node. var parseBang = function(block) { + "use strict"; var startpos = this.pos; this.pos += 1; @@ -496,12 +515,13 @@ var parseBang = function(block) { // to block's children. If there is a matching delimiter, // remove it from the delimiter stack. var parseCloseBracket = function(block) { + "use strict"; + var startpos; var is_image; var dest; var title; var matched = false; - var i; var reflabel; var opener; @@ -622,6 +642,8 @@ var parseCloseBracket = function(block) { // Attempt to parse an entity, return Entity object if successful. var parseEntity = function(block) { + "use strict"; + var m; if ((m = this.match(reEntityHere))) { block.appendChild(text(entityToChar(m))); @@ -634,6 +656,7 @@ var parseEntity = function(block) { // Parse a run of ordinary characters, or a single character with // a special meaning in markdown, as a plain string. var parseString = function(block) { + "use strict"; var m; if ((m = this.match(reMain))) { block.appendChild(text(m)); @@ -646,6 +669,7 @@ var parseString = function(block) { // Parse a newline. If it was preceded by two spaces, return a hard // line break; otherwise a soft line break. var parseNewline = function(block) { + "use strict"; var m = this.match(/^ *\n/); if (m) { var node = new Node(m.length > 2 ? 'Hardbreak' : 'Softbreak'); @@ -658,6 +682,7 @@ var parseNewline = function(block) { // Attempt to parse a link reference, modifying refmap. var parseReference = function(s, refmap) { + "use strict"; this.subject = s; this.pos = 0; var rawlabel; @@ -771,6 +796,7 @@ var parseInline = function(block) { // Parse string_content in block into inline children, // using refmap to resolve references. var parseInlines = function(block, refmap) { + "use strict"; this.subject = block.string_content.trim(); this.pos = 0; this.refmap = refmap || {}; -- cgit 0.0.5-2-1-g0f52 From 4b52529eb964fd1e949ae60e2da70ac3a0db6a9c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 11:18:38 -0800 Subject: JS: replace NUL characters with U+FFFD, as per spec. --- js/lib/blocks.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 1e20d29a2c..8f4776c7b3 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -16,6 +16,10 @@ var isBlank = function(s) { // Convert tabs to spaces on each line using a 4-space tab stop. var detabLine = function(text) { "use strict"; + if (text.indexOf('\0') !== -1) { + // replace NUL for security + text = text.replace(/\0/g, '\uFFFD'); + } if (text.indexOf('\t') === -1) { return text; } else { -- cgit 0.0.5-2-1-g0f52 From 1446dc2c02a73abeeafbb431fea2cabda444a1cb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 12:45:37 -0800 Subject: Removed makeBlock. Use new Node directly. Initialize more fields. --- js/lib/blocks.js | 18 +++--------------- js/lib/node.js | 8 ++++++-- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 8f4776c7b3..aa09b23e7e 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -56,18 +56,6 @@ var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; // These are methods of a DocParser object, defined below. -var makeBlock = function(tag, start_line, start_column) { - "use strict"; - var b = new Node(tag); - b.pos.start = [start_line, start_column]; - b.pos.end = []; // assigned in finalization step - b.open = true; - b.last_line_blank = false; - b.string_content = ""; - b.strings = []; - return b; -}; - // Returns true if parent block can contain child block. var canContain = function(parent_type, child_type) { "use strict"; @@ -148,7 +136,7 @@ var addChild = function(tag, line_number, offset) { } var column_number = offset + 1; // offset 0 = column 1 - var newBlock = makeBlock(tag, line_number, column_number); + var newBlock = new Node(tag, { start: [line_number, column_number], end: [] }); this.tip.appendChild(newBlock); this.tip = newBlock; return newBlock; @@ -645,7 +633,7 @@ var processInlines = function(block) { // The main parsing function. Returns a parsed document AST. var parse = function(input) { "use strict"; - this.doc = makeBlock('Document', 1, 1); + this.doc = new Node('Document', { start: [1, 1], end: [] }); this.tip = this.doc; this.refmap = {}; var lines = input.replace(/\n$/, '').split(/\r\n|\n|\r/); @@ -665,7 +653,7 @@ var parse = function(input) { function DocParser(){ "use strict"; return { - doc: makeBlock('Document', 1, 1), + doc: new Node('Document', { start: [1, 1], end: [] }), tip: this.doc, refmap: {}, inlineParser: new InlineParser(), diff --git a/js/lib/node.js b/js/lib/node.js index f88dff5d00..befa93f207 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -60,14 +60,18 @@ NodeWalker.prototype.next = function(){ return {entering: entering, node: cur}; }; -function Node(nodeType) { +function Node(nodeType, pos) { this.t = nodeType; this.parent = null; this.firstChild = null; this.lastChild = null; this.prev = null; this.next = null; - this.pos = {}; + this.pos = pos || {}; + this.last_line_blank = false; + this.open = true; + this.strings = []; + this.string_content = ""; } Node.prototype.isContainer = function() { -- cgit 0.0.5-2-1-g0f52 From 0fa08a7f89aa199b9cbd7214cdfd890d209e2214 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 12:49:07 -0800 Subject: Initialize more fields in Node. This helps with performance. --- js/lib/node.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index befa93f207..7e236d02dc 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -72,6 +72,10 @@ function Node(nodeType, pos) { this.open = true; this.strings = []; this.string_content = ""; + this.c = undefined; + this.list_data = undefined; + this.tight = undefined; + this.info = undefined; } Node.prototype.isContainer = function() { @@ -159,8 +163,7 @@ Node.prototype.toAST = function() { var result = { t: this.t }; var propsToShow = ['t', 'c', 'list_data', 'string_content', - 'pos', 'start_column', 'end_column', - 'tight', 'info']; + 'pos', 'tight', 'info']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From f738ede352ecb5f1128d2c74c36f7d20f9a1d08b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 12:51:32 -0800 Subject: Initialize more fields in Node. Better performance. --- js/lib/node.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/lib/node.js b/js/lib/node.js index 7e236d02dc..81bda0582c 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -76,6 +76,8 @@ function Node(nodeType, pos) { this.list_data = undefined; this.tight = undefined; this.info = undefined; + this.destination = undefined; + this.title = undefined; } Node.prototype.isContainer = function() { -- cgit 0.0.5-2-1-g0f52 From eb6a4c5c5387dde76b9c9cef8260b5b70835e2cf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 12:56:03 -0800 Subject: Initialize more properties of Node. Even better performance! --- js/lib/node.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/js/lib/node.js b/js/lib/node.js index 81bda0582c..5f82eca25c 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -78,6 +78,10 @@ function Node(nodeType, pos) { this.info = undefined; this.destination = undefined; this.title = undefined; + this.fence_char = undefined; + this.fence_length = undefined; + this.fence_offset = undefined; + this.level = undefined; } Node.prototype.isContainer = function() { @@ -165,7 +169,7 @@ Node.prototype.toAST = function() { var result = { t: this.t }; var propsToShow = ['t', 'c', 'list_data', 'string_content', - 'pos', 'tight', 'info']; + 'pos', 'tight', 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From 0d9c230a46f1bf79d4be81cb42cfaebc6f5b5ced Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 13:26:58 -0800 Subject: Made `tight` a property of `list_data`. --- js/lib/blocks.js | 13 +++++++++---- js/lib/html.js | 2 +- js/lib/node.js | 3 +-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index aa09b23e7e..29c84120a1 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -149,7 +149,12 @@ var parseListMarker = function(ln, offset) { var rest = ln.slice(offset); var match; var spaces_after_marker; - var data = {}; + var data = { type: undefined, + tight: true, + bullet_char: undefined, + start: undefined, + delimiter: undefined, + padding: undefined }; if (rest.match(reHrule)) { return null; } @@ -585,13 +590,13 @@ var finalize = function(block, line_number) { break; case 'List': - block.tight = true; // tight by default + block.list_data.tight = true; // tight by default var item = block.firstChild; while (item) { // check for non-final list item ending with blank line: if (endsWithBlankLine(item) && item.next) { - block.tight = false; + block.list_data.tight = false; break; } // recurse into children of list item, to see if there are @@ -599,7 +604,7 @@ var finalize = function(block, line_number) { var subitem = item.firstChild; while (subitem) { if (endsWithBlankLine(subitem) && (item.next || subitem.next)) { - block.tight = false; + block.list_data.tight = false; break; } subitem = subitem.next; diff --git a/js/lib/html.js b/js/lib/html.js index 045ab54697..3c1ed4c668 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -118,7 +118,7 @@ var renderNodes = function(block) { grandparent = node.parent.parent; if (grandparent !== null && grandparent.t === 'List') { - if (grandparent.tight) { + if (grandparent.list_data.tight) { break; } } diff --git a/js/lib/node.js b/js/lib/node.js index 5f82eca25c..5e5d5b0090 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -74,7 +74,6 @@ function Node(nodeType, pos) { this.string_content = ""; this.c = undefined; this.list_data = undefined; - this.tight = undefined; this.info = undefined; this.destination = undefined; this.title = undefined; @@ -169,7 +168,7 @@ Node.prototype.toAST = function() { var result = { t: this.t }; var propsToShow = ['t', 'c', 'list_data', 'string_content', - 'pos', 'tight', 'info', 'level']; + 'pos', 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From 9d005eab33db7b31edca49982398c666ccc27567 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 14:15:59 -0800 Subject: Don't initialize strings, string_content to defined value. --- js/lib/blocks.js | 13 +++++++++++-- js/lib/node.js | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 29c84120a1..f99aef1296 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -137,6 +137,8 @@ var addChild = function(tag, line_number, offset) { var column_number = offset + 1; // offset 0 = column 1 var newBlock = new Node(tag, { start: [line_number, column_number], end: [] }); + newBlock.strings = []; + newBlock.string_content = ""; this.tip.appendChild(newBlock); this.tip = newBlock; return newBlock; @@ -635,10 +637,17 @@ var processInlines = function(block) { } }; +var Document = function() { + var doc = new Node('Document', { start: [1, 1], end: [] }); + doc.string_content = ""; + doc.strings = []; + return doc; +}; + // The main parsing function. Returns a parsed document AST. var parse = function(input) { "use strict"; - this.doc = new Node('Document', { start: [1, 1], end: [] }); + this.doc = Document(); this.tip = this.doc; this.refmap = {}; var lines = input.replace(/\n$/, '').split(/\r\n|\n|\r/); @@ -658,7 +667,7 @@ var parse = function(input) { function DocParser(){ "use strict"; return { - doc: new Node('Document', { start: [1, 1], end: [] }), + doc: Document(), tip: this.doc, refmap: {}, inlineParser: new InlineParser(), diff --git a/js/lib/node.js b/js/lib/node.js index 5e5d5b0090..c160cc54b9 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -70,8 +70,8 @@ function Node(nodeType, pos) { this.pos = pos || {}; this.last_line_blank = false; this.open = true; - this.strings = []; - this.string_content = ""; + this.strings = undefined; + this.string_content = undefined; this.c = undefined; this.list_data = undefined; this.info = undefined; -- cgit 0.0.5-2-1-g0f52 From 3c68dcac2d30616904840c52d359653ba1f746b4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 14:30:49 -0800 Subject: Simplified reMain, with AST manipulation for 2-space hardbreak. Small performance improvement. --- js/lib/inlines.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 5cec93bac9..ff3ffde2f9 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -71,7 +71,7 @@ var reEntity = new RegExp(ENTITY, 'gi'); // Matches a character with a special meaning in markdown, // or a string of non-special characters. Note: we match // clumps of _ or * or `, because they need to be handled in groups. -var reMain = /^(?:[_*`\n]+|[\[\]\\!<&*_]|(?: *[^\n `\[\]\\!<&*_]+)+|[ \n]+)/m; +var reMain = /^(?:[_*`\n]+|[\[\]\\!<&*_]|[^\n`\[\]\\!<&*_]+)/m; // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { @@ -670,10 +670,19 @@ var parseString = function(block) { // line break; otherwise a soft line break. var parseNewline = function(block) { "use strict"; - var m = this.match(/^ *\n/); + var m = this.match(/^\n/); if (m) { - var node = new Node(m.length > 2 ? 'Hardbreak' : 'Softbreak'); - block.appendChild(node); + // check previous node for trailing spaces + var lastc = block.lastChild; + if (lastc && lastc.t === 'Text') { + var sps = / *$/.exec(lastc.c)[0].length; + if (sps > 0) { + lastc.c = lastc.c.replace(/ *$/,''); + } + block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); + } else { + block.appendChild(new Node('Softbreak')); + } return true; } else { return false; -- cgit 0.0.5-2-1-g0f52 From 765eedf8944757426ec53ae6edf829f3ca0d003a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 14:42:36 -0800 Subject: Simplified reMain for more performance gains. --- js/lib/inlines.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index ff3ffde2f9..553be53fa3 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -71,7 +71,7 @@ var reEntity = new RegExp(ENTITY, 'gi'); // Matches a character with a special meaning in markdown, // or a string of non-special characters. Note: we match // clumps of _ or * or `, because they need to be handled in groups. -var reMain = /^(?:[_*`\n]+|[\[\]\\!<&*_]|[^\n`\[\]\\!<&*_]+)/m; +var reMain = /^[^\n`\[\]\\!<&*_]+/m; // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { @@ -760,7 +760,6 @@ var parseInline = function(block) { var res; switch(c) { case C_NEWLINE: - case C_SPACE: res = this.parseNewline(block); break; case C_BACKSLASH: -- cgit 0.0.5-2-1-g0f52 From 68521f95431622806279e32a8c015121f7ce1c47 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 15:00:28 -0800 Subject: Comment fix. --- js/lib/inlines.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 553be53fa3..70247cde81 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -68,9 +68,7 @@ var reEntityHere = new RegExp('^' + ENTITY, 'i'); var reEntity = new RegExp(ENTITY, 'gi'); -// Matches a character with a special meaning in markdown, -// or a string of non-special characters. Note: we match -// clumps of _ or * or `, because they need to be handled in groups. +// Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; // Replace entities and backslash escapes with literal characters. -- cgit 0.0.5-2-1-g0f52 From bdf6f4fe614e1065b74622e7f359d998be5e491e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 15:00:35 -0800 Subject: Updated benchmarks.md. --- benchmarks.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/benchmarks.md b/benchmarks.md index 8c69362b37..f6324d7134 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -10,7 +10,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | lunamark | 6.295 | 31.5 | | cheapskate | 5.760 | 28.8 | | peg-markdown | 5.450 | 27.3 | -| **commonmark.js** | 2.675 | 13.4 | +| **commonmark.js** | 2.500 | 12.5 | | marked | 1.855 | 9.3 | | discount | 1.705 | 8.5 | | **cmark** | 0.280 | 1.4 | @@ -31,3 +31,14 @@ not penalized by startup time.) A median of ten runs is taken. The process is reniced to a high priority so that the system doesn't interrupt runs. +## JavaScript libraries + +Here are some JavaScript benchmarks using `node.js`. +They can be run using `make benchjs`: + +|Implementation | ops/sec | +|-------------------|-------------| +| showdown.js | 173 ±1.43% | +| **commonmark.js** | 371 ±1.20% | +| marked.js | 554 ±0.48% | +| markdown-it | 694 ±0.97% | -- cgit 0.0.5-2-1-g0f52 From 4d49f2befc95241abf8f5d7ef07ffd1ef4c23bfb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 15:36:53 -0800 Subject: Rewrote HTML escaping for big performance gain. --- benchmarks.md | 8 ++++---- js/lib/html.js | 24 ++++++++++++++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index f6324d7134..bc0925fbd8 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -38,7 +38,7 @@ They can be run using `make benchjs`: |Implementation | ops/sec | |-------------------|-------------| -| showdown.js | 173 ±1.43% | -| **commonmark.js** | 371 ±1.20% | -| marked.js | 554 ±0.48% | -| markdown-it | 694 ±0.97% | +| showdown.js | 169 ±1.72% | +| **commonmark.js** | 420 ±0.88% | +| marked.js | 548 ±0.66% | +| markdown-it | 690 ±1.00% | diff --git a/js/lib/html.js b/js/lib/html.js index 3c1ed4c668..1f1b0ba78b 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -213,6 +213,20 @@ var renderNodes = function(block) { return buffer.join(''); }; +var sub = function(s) { + if (s === '&') { + return '&'; + } else if (s === '<') { + return '<'; + } else if (s === '>') { + return '>'; + } else if (s === '"') { + return '"'; + } else { + return s; + } +}; + // The HtmlRenderer object. function HtmlRenderer(){ @@ -225,15 +239,9 @@ function HtmlRenderer(){ // set to " " if you want to ignore line wrapping in source escape: function(s, preserve_entities) { if (preserve_entities) { - return s.replace(/[&](?![#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)/gi, '&') - .replace(/[<]/g, '<') - .replace(/[>]/g, '>') - .replace(/["]/g, '"'); + return s.replace(/[&](?:[#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)|[&<>"]/gi, sub); } else { - return s.replace(/[&]/g, '&') - .replace(/[<]/g, '<') - .replace(/[>]/g, '>') - .replace(/["]/g, '"'); + return s.replace(/[&<>"]/g, sub); } }, render: renderNodes -- cgit 0.0.5-2-1-g0f52 From b7b5340c844f4016a1089053924dd8f92118d21f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 15:38:22 -0800 Subject: Updated benchmarks. --- benchmarks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks.md b/benchmarks.md index bc0925fbd8..1dedc87b97 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -10,7 +10,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | lunamark | 6.295 | 31.5 | | cheapskate | 5.760 | 28.8 | | peg-markdown | 5.450 | 27.3 | -| **commonmark.js** | 2.500 | 12.5 | +| **commonmark.js** | 2.345 | 11.7 | | marked | 1.855 | 9.3 | | discount | 1.705 | 8.5 | | **cmark** | 0.280 | 1.4 | -- cgit 0.0.5-2-1-g0f52 From 675c2640755ecf3fa7978e16d61261f64fd75e65 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 17:27:44 -0800 Subject: JS: use c rather than string_content property for code blocks, html. string_content is just for the raw string content that will be parsed as inlines, not for the 'real' content of the block element. --- js/lib/blocks.js | 15 +++++++++------ js/lib/html.js | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index f99aef1296..7972b095ab 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -138,7 +138,7 @@ var addChild = function(tag, line_number, offset) { var column_number = offset + 1; // offset 0 = column 1 var newBlock = new Node(tag, { start: [line_number, column_number], end: [] }); newBlock.strings = []; - newBlock.string_content = ""; + newBlock.string_content = undefined; this.tip.appendChild(newBlock); this.tip = newBlock; return newBlock; @@ -571,12 +571,15 @@ var finalize = function(block, line_number) { break; case 'Header': - case 'HtmlBlock': block.string_content = block.strings.join('\n'); break; + case 'HtmlBlock': + block.c = block.strings.join('\n'); + break; + case 'IndentedCode': - block.string_content = block.strings.join('\n').replace(/(\n *)*$/, '\n'); + block.c = block.strings.join('\n').replace(/(\n *)*$/, '\n'); block.t = 'CodeBlock'; break; @@ -584,9 +587,9 @@ var finalize = function(block, line_number) { // first line becomes info string block.info = unescapeString(block.strings[0].trim()); if (block.strings.length === 1) { - block.string_content = ''; + block.c = ''; } else { - block.string_content = block.strings.slice(1).join('\n') + '\n'; + block.c = block.strings.slice(1).join('\n') + '\n'; } block.t = 'CodeBlock'; break; @@ -639,7 +642,7 @@ var processInlines = function(block) { var Document = function() { var doc = new Node('Document', { start: [1, 1], end: [] }); - doc.string_content = ""; + doc.string_content = undefined; doc.strings = []; return doc; }; diff --git a/js/lib/html.js b/js/lib/html.js index 1f1b0ba78b..57f87e52c3 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -184,14 +184,14 @@ var renderNodes = function(block) { ? [] : [['class', 'language-' + esc(info_words[0], true)]]; cr(); out(tag('pre') + tag('code', attrs)); - out(this.escape(node.string_content)); + out(this.escape(node.c)); out(tag('/code') + tag('/pre')); cr(); break; case 'HtmlBlock': cr(); - out(node.string_content); + out(node.c); cr(); break; -- cgit 0.0.5-2-1-g0f52 From 9bf2a0b1bcaff8f6c00d68cf40a99e4adebcb99b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 17:29:09 -0800 Subject: Don't include string_content in output of toAST(). --- js/lib/node.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index c160cc54b9..da33b9e739 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -167,8 +167,7 @@ Node.prototype.toAST = function() { var cur; var result = { t: this.t }; - var propsToShow = ['t', 'c', 'list_data', 'string_content', - 'pos', 'info', 'level']; + var propsToShow = ['t', 'c', 'list_data', 'pos', 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From 031a126b86c82fab47b5d87e34da31a7657a55d1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 17:40:24 -0800 Subject: JS: Improved end lines. Closes #276. --- js/lib/blocks.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 7972b095ab..fd51a4b043 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -132,7 +132,7 @@ var addLine = function(ln, offset) { var addChild = function(tag, line_number, offset) { "use strict"; while (!canContain(this.tip.t, tag)) { - this.finalize(this.tip, line_number); + this.finalize(this.tip, line_number - 1); } var column_number = offset + 1; // offset 0 = column 1 @@ -322,7 +322,7 @@ var incorporateLine = function(ln, line_number) { var already_done = false; // finalize any blocks not matched while (!already_done && oldtip !== last_matched_container) { - mythis.finalize(oldtip, line_number); + mythis.finalize(oldtip, line_number - 1); oldtip = oldtip.parent; } already_done = true; @@ -547,11 +547,7 @@ var finalize = function(block, line_number) { return 0; } block.open = false; - if (line_number > block.pos.start[0]) { - block.pos.end = [line_number - 1]; // TODO end column - } else { - block.pos.end = [line_number]; - } + block.pos.end = [line_number]; // TODO end column switch (block.t) { case 'Paragraph': @@ -659,7 +655,7 @@ var parse = function(input) { this.incorporateLine(lines[i], i + 1); } while (this.tip) { - this.finalize(this.tip, len - 1); + this.finalize(this.tip, len); } this.processInlines(this.doc); return this.doc; -- cgit 0.0.5-2-1-g0f52 From 340ecdac6e34b37588a0f85e2576ff621d6818d9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 18:37:03 -0800 Subject: Added end column position to pos for blocks. --- js/lib/blocks.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index fd51a4b043..f6e8f87eed 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -136,7 +136,8 @@ var addChild = function(tag, line_number, offset) { } var column_number = offset + 1; // offset 0 = column 1 - var newBlock = new Node(tag, { start: [line_number, column_number], end: [] }); + var newBlock = new Node(tag, { start: [line_number, column_number], + end: [0, 0] }); newBlock.strings = []; newBlock.string_content = undefined; this.tip.appendChild(newBlock); @@ -532,6 +533,7 @@ var incorporateLine = function(ln, line_number) { } } } + this.lastLineLength = ln.length - 1; // -1 for newline }; // Finalize a block. Close it and do any necessary postprocessing, @@ -547,7 +549,7 @@ var finalize = function(block, line_number) { return 0; } block.open = false; - block.pos.end = [line_number]; // TODO end column + block.pos.end = [line_number, this.lastLineLength + 1]; switch (block.t) { case 'Paragraph': @@ -637,7 +639,7 @@ var processInlines = function(block) { }; var Document = function() { - var doc = new Node('Document', { start: [1, 1], end: [] }); + var doc = new Node('Document', { start: [1, 1], end: [0, 0] }); doc.string_content = undefined; doc.strings = []; return doc; @@ -669,6 +671,7 @@ function DocParser(){ doc: Document(), tip: this.doc, refmap: {}, + lastLineLength: 0, inlineParser: new InlineParser(), breakOutOfLists: breakOutOfLists, addLine: addLine, -- cgit 0.0.5-2-1-g0f52 From 05c60132f4ba80f5d62d99e7d0be27715ade06e5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 18:41:28 -0800 Subject: Replaced 'pos' with 'sourceloc', making it an array. This is a more compact representation. --- js/lib/blocks.js | 9 ++++----- js/lib/node.js | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index f6e8f87eed..63eca24995 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -136,8 +136,7 @@ var addChild = function(tag, line_number, offset) { } var column_number = offset + 1; // offset 0 = column 1 - var newBlock = new Node(tag, { start: [line_number, column_number], - end: [0, 0] }); + var newBlock = new Node(tag, [[line_number, column_number], [0, 0]]); newBlock.strings = []; newBlock.string_content = undefined; this.tip.appendChild(newBlock); @@ -483,7 +482,7 @@ var incorporateLine = function(ln, line_number) { container.t === 'FencedCode' || (container.t === 'ListItem' && !container.firstChild && - container.pos.start[0] === line_number)); + container.sourceloc[0][0] === line_number)); var cont = container; while (cont.parent) { @@ -549,7 +548,7 @@ var finalize = function(block, line_number) { return 0; } block.open = false; - block.pos.end = [line_number, this.lastLineLength + 1]; + block.sourceloc[1] = [line_number, this.lastLineLength + 1]; switch (block.t) { case 'Paragraph': @@ -639,7 +638,7 @@ var processInlines = function(block) { }; var Document = function() { - var doc = new Node('Document', { start: [1, 1], end: [0, 0] }); + var doc = new Node('Document', [[1, 1], [0, 0]]); doc.string_content = undefined; doc.strings = []; return doc; diff --git a/js/lib/node.js b/js/lib/node.js index da33b9e739..dfc77ab405 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -60,14 +60,14 @@ NodeWalker.prototype.next = function(){ return {entering: entering, node: cur}; }; -function Node(nodeType, pos) { +function Node(nodeType, sourceloc) { this.t = nodeType; this.parent = null; this.firstChild = null; this.lastChild = null; this.prev = null; this.next = null; - this.pos = pos || {}; + this.sourceloc = sourceloc; this.last_line_blank = false; this.open = true; this.strings = undefined; @@ -167,7 +167,7 @@ Node.prototype.toAST = function() { var cur; var result = { t: this.t }; - var propsToShow = ['t', 'c', 'list_data', 'pos', 'info', 'level']; + var propsToShow = ['t', 'c', 'list_data', 'sourceloc', 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From 7bfb5dd6915fd455e93086fc2b546802bdd77027 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 18:45:58 -0800 Subject: JS: sourceloc -> sourcepos for confirmity with cmark. --- js/lib/blocks.js | 4 ++-- js/lib/node.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 63eca24995..a83bccf50f 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -482,7 +482,7 @@ var incorporateLine = function(ln, line_number) { container.t === 'FencedCode' || (container.t === 'ListItem' && !container.firstChild && - container.sourceloc[0][0] === line_number)); + container.sourcepos[0][0] === line_number)); var cont = container; while (cont.parent) { @@ -548,7 +548,7 @@ var finalize = function(block, line_number) { return 0; } block.open = false; - block.sourceloc[1] = [line_number, this.lastLineLength + 1]; + block.sourcepos[1] = [line_number, this.lastLineLength + 1]; switch (block.t) { case 'Paragraph': diff --git a/js/lib/node.js b/js/lib/node.js index dfc77ab405..102003c28b 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -60,14 +60,14 @@ NodeWalker.prototype.next = function(){ return {entering: entering, node: cur}; }; -function Node(nodeType, sourceloc) { +function Node(nodeType, sourcepos) { this.t = nodeType; this.parent = null; this.firstChild = null; this.lastChild = null; this.prev = null; this.next = null; - this.sourceloc = sourceloc; + this.sourcepos = sourcepos; this.last_line_blank = false; this.open = true; this.strings = undefined; @@ -167,7 +167,7 @@ Node.prototype.toAST = function() { var cur; var result = { t: this.t }; - var propsToShow = ['t', 'c', 'list_data', 'sourceloc', 'info', 'level']; + var propsToShow = ['t', 'c', 'list_data', 'sourcepos', 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From a1bc760fef3ae9e98f039fa50f31fc2d5eb877a2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 19:10:24 -0800 Subject: Added options to render, implemented sourcepos option. This adds data-sourcepos attributes on block-level tags in the HTML output. Also added `--sourcepos` command-line option to `js/bin/commonmark`. --- js/bin/commonmark | 27 +++++++++++++++++---------- js/lib/html.js | 42 ++++++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/js/bin/commonmark b/js/bin/commonmark index ac53e6e8c9..72ad34493e 100755 --- a/js/bin/commonmark +++ b/js/bin/commonmark @@ -6,19 +6,26 @@ var util = require('util'); var commonmark = require('../lib/index.js'); var parser = new commonmark.DocParser(); -var renderer; +var renderer = new commonmark.HtmlRenderer(); var inps = []; var file; var files = []; +var options = { sourcepos: false, }; -if (process.argv[2] === '--ast') { - files = process.argv.slice(3); - renderer = { render: function(x) { - return util.inspect(x.toAST(), null, Infinity, true) + '\n'; - } }; -} else { - files = process.argv.slice(2); - renderer = new commonmark.HtmlRenderer(); +for (var i = 2; i < process.argv.length; i++) { + var arg = process.argv[i]; + if (arg == '--ast') { + renderer = { render: function(x) { + return util.inspect(x.toAST(), null, Infinity, true) + '\n'; + } }; + } else if (arg == '--sourcepos') { + options.sourcepos = true; + } else if (/^--/.test(arg)) { + process.stderr.write('Unknown option ' + arg + '\n'); + process.exit(1); + } else { + files.push(arg); + } } if (files.length === 0) { @@ -30,4 +37,4 @@ for (var i = 0; i < files.length; i++) { inps.push(fs.readFileSync(file, 'utf8')); } -process.stdout.write(renderer.render(parser.parse(inps.join('\n')))); +process.stdout.write(renderer.render(parser.parse(inps.join('\n')), options)); diff --git a/js/lib/html.js b/js/lib/html.js index 57f87e52c3..ca5b477bd7 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -1,12 +1,12 @@ "use strict"; // Helper function to produce an HTML tag. -var tag = function(name, attribs, selfclosing) { +var tag = function(name, attrs, selfclosing) { var result = '<' + name; - if (attribs) { + if (attrs && attrs.length > 0) { var i = 0; var attrib; - while ((attrib = attribs[i]) !== undefined) { + while ((attrib = attrs[i]) !== undefined) { result = result.concat(' ', attrib[0], '="', attrib[1], '"'); i++; } @@ -19,7 +19,7 @@ var tag = function(name, attribs, selfclosing) { return result; }; -var renderNodes = function(block) { +var renderNodes = function(block, options) { var attrs; var info_words; @@ -43,10 +43,22 @@ var renderNodes = function(block) { } }; + options = options || {}; + while ((event = walker.next())) { entering = event.entering; node = event.node; + attrs = []; + if (options.sourcepos) { + var pos = node.sourcepos; + if (pos) { + attrs.push(['data-sourcepos', String(pos[0][0]) + ':' + + String(pos[0][1]) + '-' + String(pos[1][0]) + ':' + + String(pos[1][1])]); + } + } + switch (node.t) { case 'Text': out(esc(node.c)); @@ -79,7 +91,7 @@ var renderNodes = function(block) { case 'Link': if (entering) { - attrs = [['href', esc(node.destination, true)]]; + attrs.push(['href', esc(node.destination, true)]); if (node.title) { attrs.push(['title', esc(node.title, true)]); } @@ -124,7 +136,7 @@ var renderNodes = function(block) { } if (entering) { cr(); - out(tag('p')); + out(tag('p', attrs)); } else { out(tag('/p')); cr(); @@ -134,7 +146,7 @@ var renderNodes = function(block) { case 'BlockQuote': if (entering) { cr(); - out(tag('blockquote')); + out(tag('blockquote', attrs)); cr(); } else { cr(); @@ -145,7 +157,7 @@ var renderNodes = function(block) { case 'ListItem': if (entering) { - out(tag('li')); + out(tag('li', attrs)); } else { out(tag('/li')); cr(); @@ -155,8 +167,9 @@ var renderNodes = function(block) { case 'List': tagname = node.list_data.type === 'Bullet' ? 'ul' : 'ol'; if (entering) { - attrs = (!node.list_data.start || node.list_data.start === 1) ? - [] : [['start', node.list_data.start.toString()]]; + if (node.list_data.start && node.list_data.start > 1) { + attrs.push(['start', node.list_data.start.toString()]); + } cr(); out(tag(tagname, attrs)); cr(); @@ -171,7 +184,7 @@ var renderNodes = function(block) { tagname = 'h' + node.level; if (entering) { cr(); - out(tag(tagname)); + out(tag(tagname, attrs)); } else { out(tag('/' + tagname)); cr(); @@ -180,8 +193,9 @@ var renderNodes = function(block) { case 'CodeBlock': info_words = node.info ? node.info.split(/ +/) : []; - attrs = (info_words.length === 0 || info_words[0].length === 0) - ? [] : [['class', 'language-' + esc(info_words[0], true)]]; + if (info_words.length > 0 && info_words[0].length > 0) { + attrs.push(['class', 'language-' + esc(info_words[0], true)]); + } cr(); out(tag('pre') + tag('code', attrs)); out(this.escape(node.c)); @@ -197,7 +211,7 @@ var renderNodes = function(block) { case 'HorizontalRule': cr(); - out(tag('hr', [], true)); + out(tag('hr', attrs, true)); cr(); break; -- cgit 0.0.5-2-1-g0f52 From 8c7ca2e30044925bcf611ddc816580d6746c7101 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 19:15:07 -0800 Subject: JS: Renamed 'c' property to 'literal' to match libcmark. --- js/lib/blocks.js | 8 ++++---- js/lib/html.js | 10 +++++----- js/lib/inlines.js | 20 ++++++++++++-------- js/lib/node.js | 5 +++-- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index a83bccf50f..f948e8b97e 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -572,11 +572,11 @@ var finalize = function(block, line_number) { break; case 'HtmlBlock': - block.c = block.strings.join('\n'); + block.literal = block.strings.join('\n'); break; case 'IndentedCode': - block.c = block.strings.join('\n').replace(/(\n *)*$/, '\n'); + block.literal = block.strings.join('\n').replace(/(\n *)*$/, '\n'); block.t = 'CodeBlock'; break; @@ -584,9 +584,9 @@ var finalize = function(block, line_number) { // first line becomes info string block.info = unescapeString(block.strings[0].trim()); if (block.strings.length === 1) { - block.c = ''; + block.literal = ''; } else { - block.c = block.strings.slice(1).join('\n') + '\n'; + block.literal = block.strings.slice(1).join('\n') + '\n'; } block.t = 'CodeBlock'; break; diff --git a/js/lib/html.js b/js/lib/html.js index ca5b477bd7..ce9b8361cb 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -61,7 +61,7 @@ var renderNodes = function(block, options) { switch (node.t) { case 'Text': - out(esc(node.c)); + out(esc(node.literal)); break; case 'Softbreak': @@ -86,7 +86,7 @@ var renderNodes = function(block, options) { break; case 'Html': - out(node.c); + out(node.literal); break; case 'Link': @@ -120,7 +120,7 @@ var renderNodes = function(block, options) { break; case 'Code': - out(tag('code') + esc(node.c) + tag('/code')); + out(tag('code') + esc(node.literal) + tag('/code')); break; case 'Document': @@ -198,14 +198,14 @@ var renderNodes = function(block, options) { } cr(); out(tag('pre') + tag('code', attrs)); - out(this.escape(node.c)); + out(this.escape(node.literal)); out(tag('/code') + tag('/pre')); cr(); break; case 'HtmlBlock': cr(); - out(node.c); + out(node.literal); cr(); break; diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 70247cde81..adeac6c163 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -90,7 +90,7 @@ var normalizeReference = function(s) { var text = function(s) { "use strict"; var node = new Node('Text'); - node.c = s; + node.literal = s; return node; }; @@ -150,7 +150,7 @@ var parseBackticks = function(block) { while (!foundCode && (matched = this.match(/`+/m))) { if (matched === ticks) { node = new Node('Code'); - node.c = this.subject.slice(afterOpenTicks, + node.literal = this.subject.slice(afterOpenTicks, this.pos - ticks.length) .replace(/[ \n]+/g, ' ') .trim(); @@ -222,7 +222,7 @@ var parseHtmlTag = function(block) { var node; if (m) { node = new Node('Html'); - node.c = m; + node.literal = m; block.appendChild(node); return true; } else { @@ -358,8 +358,12 @@ var processEmphasis = function(block, stack_bottom) { // remove used delimiters from stack elts and inlines opener.numdelims -= use_delims; closer.numdelims -= use_delims; - opener_inl.c = opener_inl.c.slice(0, opener_inl.c.length - use_delims); - closer_inl.c = closer_inl.c.slice(0, closer_inl.c.length - use_delims); + opener_inl.literal = + opener_inl.literal.slice(0, + opener_inl.literal.length - use_delims); + closer_inl.literal = + closer_inl.literal.slice(0, + closer_inl.literal.length - use_delims); // build contents for new emph element var emph = new Node(use_delims === 1 ? 'Emph' : 'Strong'); @@ -673,9 +677,9 @@ var parseNewline = function(block) { // check previous node for trailing spaces var lastc = block.lastChild; if (lastc && lastc.t === 'Text') { - var sps = / *$/.exec(lastc.c)[0].length; + var sps = / *$/.exec(lastc.literal)[0].length; if (sps > 0) { - lastc.c = lastc.c.replace(/ *$/,''); + lastc.literal = lastc.literal.replace(/ *$/,''); } block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); } else { @@ -792,7 +796,7 @@ var parseInline = function(block) { if (!res) { this.pos += 1; var textnode = new Node('Text'); - textnode.c = fromCodePoint(c); + textnode.literal = fromCodePoint(c); block.appendChild(textnode); } diff --git a/js/lib/node.js b/js/lib/node.js index 102003c28b..e57a2814a1 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -72,7 +72,7 @@ function Node(nodeType, sourcepos) { this.open = true; this.strings = undefined; this.string_content = undefined; - this.c = undefined; + this.literal = undefined; this.list_data = undefined; this.info = undefined; this.destination = undefined; @@ -167,7 +167,8 @@ Node.prototype.toAST = function() { var cur; var result = { t: this.t }; - var propsToShow = ['t', 'c', 'list_data', 'sourcepos', 'info', 'level']; + var propsToShow = ['t', 'literal', 'list_data', 'sourcepos', + 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; -- cgit 0.0.5-2-1-g0f52 From 1a034acee13576bc252ef1ca3f91d0d35ba9a85e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 19:20:42 -0800 Subject: Updated renderAST in lib. --- js/lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/lib/index.js b/js/lib/index.js index 3ded1df476..f1023c1fc5 100755 --- a/js/lib/index.js +++ b/js/lib/index.js @@ -14,7 +14,7 @@ var util = require('util'); var renderAST = function(tree) { - return util.inspect(tree, {depth: null}); + return util.inspect(tree.toAST(), {depth: null}); }; module.exports.Node = require('./node'); -- cgit 0.0.5-2-1-g0f52 From 65059ef600773928a6c9b9c96657a541a6286650 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 19:20:49 -0800 Subject: Updated dingus. --- Makefile | 2 +- dingus.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b1235eae50..1a7b98db83 100644 --- a/Makefile +++ b/Makefile @@ -177,7 +177,7 @@ npm: cd js; npm publish dingus: js/commonmark.js - echo "Starting dingus server at http://localhost:9000" && python -m SimpleHTTPServer 9000 + echo "Starting dingus server at http://localhost:9000/dingus.html" && python -m SimpleHTTPServer 9000 ### Spec ### diff --git a/dingus.html b/dingus.html index 40664d21d3..6b379eb87e 100644 --- a/dingus.html +++ b/dingus.html @@ -52,7 +52,7 @@ $(document).ready(function() { return; } var startTime = new Date().getTime(); - var result = writer.renderBlock(parsed); + var result = writer.render(parsed); var endTime = new Date().getTime(); var renderTime = endTime - startTime; $("#preview").html(result); -- cgit 0.0.5-2-1-g0f52 From 85dc5b4171bfd71b0737aed7039deb5cc750a405 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 19:49:51 -0800 Subject: Non-recursive version of toAST(). Closes #272. --- js/lib/node.js | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index e57a2814a1..6c15761283 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -162,34 +162,47 @@ Node.prototype.walker = function() { return walker; }; -Node.prototype.toAST = function() { - var children; - var cur; - var result = { t: this.t }; - +var toASTNode = function(node) { + var result = {}; var propsToShow = ['t', 'literal', 'list_data', 'sourcepos', 'info', 'level']; for (var i = 0; i < propsToShow.length; i++) { var prop = propsToShow[i]; - if (this[prop] !== undefined) { - result[prop] = this[prop]; + if (node[prop] !== undefined) { + result[prop] = node[prop]; } } + return result; +}; - if (isContainer(this)) { - children = []; - if (this.firstChild) { - cur = this.firstChild; - while (cur) { - // TODO avoid recursion here... - children.push(cur.toAST()); - cur = cur.next; +Node.prototype.toAST = function() { + var childrenStack = []; + var walker = this.walker(); + var event; + while ((event = walker.next())) { + var node = event.node; + var entering = event.entering; + var container = node.isContainer(); + var astnode; + + if (container) { + if (entering) { + childrenStack.push([]); + } else { + astnode = toASTNode(node); + astnode.children = childrenStack.pop(); + if (childrenStack.length > 0) { + childrenStack[childrenStack.length - 1].push(astnode); + } } - result.children = children; + } else { + astnode = toASTNode(node); + childrenStack[childrenStack.length - 1].push(astnode); } } - return result; + + return astnode; }; -- cgit 0.0.5-2-1-g0f52 From 054fea748f5b6aae9043925abf9b66991cd51887 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 19:55:29 -0800 Subject: Put limit on AST display as string. (AST itself has no nesting limits. BUt this prevents a crash due to recursion in util.inspect.) See #272. --- js/bin/commonmark | 2 +- js/lib/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/js/bin/commonmark b/js/bin/commonmark index 72ad34493e..4fcb09d177 100755 --- a/js/bin/commonmark +++ b/js/bin/commonmark @@ -16,7 +16,7 @@ for (var i = 2; i < process.argv.length; i++) { var arg = process.argv[i]; if (arg == '--ast') { renderer = { render: function(x) { - return util.inspect(x.toAST(), null, Infinity, true) + '\n'; + return util.inspect(x.toAST(), null, 20, true) + '\n'; } }; } else if (arg == '--sourcepos') { options.sourcepos = true; diff --git a/js/lib/index.js b/js/lib/index.js index f1023c1fc5..8b26946e5c 100755 --- a/js/lib/index.js +++ b/js/lib/index.js @@ -14,7 +14,7 @@ var util = require('util'); var renderAST = function(tree) { - return util.inspect(tree.toAST(), {depth: null}); + return util.inspect(tree.toAST(), {depth: 20}); }; module.exports.Node = require('./node'); -- cgit 0.0.5-2-1-g0f52 From 6f345edbcfbf2770ccdfb70c2a157eaf0e2930dd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 21:38:41 -0800 Subject: Improved newline parsing efficiency. Don't check for `\n` when we know we have one. Gobble spaces after line break. --- js/lib/blocks.js | 3 +-- js/lib/inlines.js | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index f948e8b97e..f965fd73b6 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -552,8 +552,7 @@ var finalize = function(block, line_number) { switch (block.t) { case 'Paragraph': - block.string_content = block.strings.join('\n').replace(/^ {2,}/m, ''); - // delete block.strings; + block.string_content = block.strings.join('\n'); // try parsing the beginning as link reference definitions: while (block.string_content.charCodeAt(0) === C_OPEN_BRACKET && diff --git a/js/lib/inlines.js b/js/lib/inlines.js index adeac6c163..f27a7e7d74 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -672,23 +672,20 @@ var parseString = function(block) { // line break; otherwise a soft line break. var parseNewline = function(block) { "use strict"; - var m = this.match(/^\n/); - if (m) { - // check previous node for trailing spaces - var lastc = block.lastChild; - if (lastc && lastc.t === 'Text') { - var sps = / *$/.exec(lastc.literal)[0].length; - if (sps > 0) { - lastc.literal = lastc.literal.replace(/ *$/,''); - } - block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); - } else { - block.appendChild(new Node('Softbreak')); + this.pos += 1; // assume we're at a \n + // check previous node for trailing spaces + var lastc = block.lastChild; + if (lastc && lastc.t === 'Text') { + var sps = / *$/.exec(lastc.literal)[0].length; + if (sps > 0) { + lastc.literal = lastc.literal.replace(/ *$/,''); } - return true; + block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); } else { - return false; + block.appendChild(new Node('Softbreak')); } + this.match(/^ */); // gobble leading spaces in next line + return true; }; // Attempt to parse a link reference, modifying refmap. -- cgit 0.0.5-2-1-g0f52 From 0e8c3fc0f2878ad45023dc53d1fbbc53b82b94d2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 21:46:06 -0800 Subject: Improved unescapeString performance. --- js/lib/inlines.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index f27a7e7d74..405c6c985d 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -68,14 +68,23 @@ var reEntityHere = new RegExp('^' + ENTITY, 'i'); var reEntity = new RegExp(ENTITY, 'gi'); +var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi'); + // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; +var unescapeChar = function(s) { + if (s[0] === '\\') { + return s[1]; + } else { + return entityToChar(s); + } +}; + // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { "use strict"; - return s.replace(reAllEscapedChar, '$1') - .replace(reEntity, entityToChar); + return s.replace(reEntityOrEscapedChar, unescapeChar); }; // Normalize reference label: collapse internal whitespace -- cgit 0.0.5-2-1-g0f52 From d77b868584c988483fdb7892ccc5af09c6d99f1c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 21:52:47 -0800 Subject: JS linter improvements. --- js/bin/commonmark | 15 +++++++-------- js/lib/blocks.js | 3 ++- js/lib/index.js | 2 +- js/lib/inlines.js | 8 ++------ 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/js/bin/commonmark b/js/bin/commonmark index 4fcb09d177..f0c427c819 100755 --- a/js/bin/commonmark +++ b/js/bin/commonmark @@ -10,15 +10,14 @@ var renderer = new commonmark.HtmlRenderer(); var inps = []; var file; var files = []; -var options = { sourcepos: false, }; +var options = { sourcepos: false }; +var i; -for (var i = 2; i < process.argv.length; i++) { +for (i = 2; i < process.argv.length; i++) { var arg = process.argv[i]; - if (arg == '--ast') { - renderer = { render: function(x) { - return util.inspect(x.toAST(), null, 20, true) + '\n'; - } }; - } else if (arg == '--sourcepos') { + if (arg === '--ast') { + renderer = { render: commonmark.ASTRenderer }; + } else if (arg === '--sourcepos') { options.sourcepos = true; } else if (/^--/.test(arg)) { process.stderr.write('Unknown option ' + arg + '\n'); @@ -32,7 +31,7 @@ if (files.length === 0) { files = ['/dev/stdin']; } -for (var i = 0; i < files.length; i++) { +for (i = 0; i < files.length; i++) { file = files[i]; inps.push(fs.readFileSync(file, 'utf8')); } diff --git a/js/lib/blocks.js b/js/lib/blocks.js index f965fd73b6..2939afefe1 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -16,7 +16,7 @@ var isBlank = function(s) { // Convert tabs to spaces on each line using a 4-space tab stop. var detabLine = function(text) { "use strict"; - if (text.indexOf('\0') !== -1) { + if (text.indexOf('\u0000') !== -1) { // replace NUL for security text = text.replace(/\0/g, '\uFFFD'); } @@ -637,6 +637,7 @@ var processInlines = function(block) { }; var Document = function() { + "use strict"; var doc = new Node('Document', [[1, 1], [0, 0]]); doc.string_content = undefined; doc.strings = []; diff --git a/js/lib/index.js b/js/lib/index.js index 8b26946e5c..d0532c67c5 100755 --- a/js/lib/index.js +++ b/js/lib/index.js @@ -14,7 +14,7 @@ var util = require('util'); var renderAST = function(tree) { - return util.inspect(tree.toAST(), {depth: 20}); + return util.inspect(tree.toAST(), {depth: 20}) + '\n'; }; module.exports.Node = require('./node'); diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 405c6c985d..0b40dfddee 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -6,7 +6,6 @@ var entityToChar = require('./html5-entities.js').entityToChar; // Constants for character codes: var C_NEWLINE = 10; -var C_SPACE = 32; var C_ASTERISK = 42; var C_UNDERSCORE = 95; var C_BACKTICK = 96; @@ -62,18 +61,15 @@ var reLinkDestination = new RegExp( var reEscapable = new RegExp(ESCAPABLE); -var reAllEscapedChar = new RegExp('\\\\(' + ESCAPABLE + ')', 'g'); - var reEntityHere = new RegExp('^' + ENTITY, 'i'); -var reEntity = new RegExp(ENTITY, 'gi'); - var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi'); // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; var unescapeChar = function(s) { + "use strict"; if (s[0] === '\\') { return s[1]; } else { @@ -687,7 +683,7 @@ var parseNewline = function(block) { if (lastc && lastc.t === 'Text') { var sps = / *$/.exec(lastc.literal)[0].length; if (sps > 0) { - lastc.literal = lastc.literal.replace(/ *$/,''); + lastc.literal = lastc.literal.replace(/ *$/, ''); } block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); } else { -- cgit 0.0.5-2-1-g0f52 From ec48b49edb041b8a42d3f35c8738f869cec9dc49 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 22:02:51 -0800 Subject: Updated benchmarks. --- benchmarks.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 1dedc87b97..7e2167db36 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -10,7 +10,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | lunamark | 6.295 | 31.5 | | cheapskate | 5.760 | 28.8 | | peg-markdown | 5.450 | 27.3 | -| **commonmark.js** | 2.345 | 11.7 | +| **commonmark.js** | 2.335 | 11.6 | | marked | 1.855 | 9.3 | | discount | 1.705 | 8.5 | | **cmark** | 0.280 | 1.4 | @@ -38,7 +38,7 @@ They can be run using `make benchjs`: |Implementation | ops/sec | |-------------------|-------------| -| showdown.js | 169 ±1.72% | -| **commonmark.js** | 420 ±0.88% | -| marked.js | 548 ±0.66% | -| markdown-it | 690 ±1.00% | +| showdown.js | 173 ±1.45% | +| **commonmark.js** | 443 ±0.81% | +| marked.js | 531 ±0.69% | +| markdown-it | 684 ±1.15% | -- cgit 0.0.5-2-1-g0f52 From 977a9dd1cd0e5574799211d697b0889431fc0876 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 22:23:02 -0800 Subject: Small optimization. --- js/lib/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/lib/node.js b/js/lib/node.js index 6c15761283..89172d70cb 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -167,7 +167,7 @@ var toASTNode = function(node) { var propsToShow = ['t', 'literal', 'list_data', 'sourcepos', 'info', 'level']; - for (var i = 0; i < propsToShow.length; i++) { + for (var i = 0, len = propsToShow.length; i < len; i++) { var prop = propsToShow[i]; if (node[prop] !== undefined) { result[prop] = node[prop]; -- cgit 0.0.5-2-1-g0f52 From 1f5e01bbacb790f8e1159d91d430e7bc023ffc98 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 22:30:49 -0800 Subject: Use a switch instead of if-then-else. --- js/lib/html.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/js/lib/html.js b/js/lib/html.js index ce9b8361cb..26c677b3a0 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -228,15 +228,16 @@ var renderNodes = function(block, options) { }; var sub = function(s) { - if (s === '&') { + switch (s) { + case '&': return '&'; - } else if (s === '<') { + case '<': return '<'; - } else if (s === '>') { + case '>': return '>'; - } else if (s === '"') { + case '"': return '"'; - } else { + default: return s; } }; -- cgit 0.0.5-2-1-g0f52 From 711a42275a4f13cfafa771aeffa6771e0a904e91 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 22:32:32 -0800 Subject: Removed a redundant condition. --- js/lib/node.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index 89172d70cb..84fb122d9f 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -44,10 +44,6 @@ NodeWalker.prototype.next = function(){ this.entering = false; } - } else if (!entering && cur === this.root) { - // don't move past root - this.current = null; - } else if (cur.next) { this.current = cur.next; this.entering = true; -- cgit 0.0.5-2-1-g0f52 From 1640365a8ba0c414e03922796dd5a0ed0e600bda Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 22:36:25 -0800 Subject: Removed redundant condition. --- js/lib/blocks.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 2939afefe1..c6e5d75e80 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -519,16 +519,10 @@ var incorporateLine = function(ln, line_number) { this.addLine(ln, first_nonspace); } else if (blank) { break; - } else if (container.t !== 'HorizontalRule' && - container.t !== 'Header') { + } else { // create paragraph container for line container = this.addChild('Paragraph', line_number, first_nonspace); this.addLine(ln, first_nonspace); - } else { - console.log("Line " + line_number.toString() + - " with container type " + container.t + - " did not match any condition."); - } } } -- cgit 0.0.5-2-1-g0f52 From 589d607197bb21648ca8bb564b822560676e8edf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 23:08:34 -0800 Subject: Put backtick regexes in variables. --- js/lib/inlines.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 0b40dfddee..2c4fd13f2c 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -65,6 +65,10 @@ var reEntityHere = new RegExp('^' + ENTITY, 'i'); var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi'); +var reTicks = new RegExp('`+'); + +var reTicksHere = new RegExp('^`+'); + // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; @@ -144,7 +148,7 @@ var spnl = function() { // literal sequence of backticks. var parseBackticks = function(block) { "use strict"; - var ticks = this.match(/^`+/); + var ticks = this.match(reTicksHere); if (!ticks) { return 0; } @@ -152,7 +156,7 @@ var parseBackticks = function(block) { var foundCode = false; var matched; var node; - while (!foundCode && (matched = this.match(/`+/m))) { + while (!foundCode && (matched = this.match(reTicks))) { if (matched === ticks) { node = new Node('Code'); node.literal = this.subject.slice(afterOpenTicks, @@ -757,11 +761,11 @@ var parseReference = function(s, refmap) { // On failure, return false. var parseInline = function(block) { "use strict"; + var res; var c = this.peek(); if (c === -1) { return false; } - var res; switch(c) { case C_NEWLINE: res = this.parseNewline(block); -- cgit 0.0.5-2-1-g0f52 From ee502421b239bc1c8e74d0578d9615a641b5cc81 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Jan 2015 23:13:47 -0800 Subject: Moved more regexes into variables. --- js/lib/inlines.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 2c4fd13f2c..72c4448c65 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -69,6 +69,12 @@ var reTicks = new RegExp('`+'); var reTicksHere = new RegExp('^`+'); +var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/; + +var reAutolink = /^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i; + +var reSpnl = /^ *(?:\n *)?/; + // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; @@ -136,7 +142,7 @@ var peek = function() { // Parse zero or more space characters, including at most one newline var spnl = function() { "use strict"; - this.match(/^ *(?:\n *)?/); + this.match(reSpnl); return 1; }; @@ -205,14 +211,14 @@ var parseAutolink = function(block) { var m; var dest; var node; - if ((m = this.match(/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/))) { // email autolink + if ((m = this.match(reEmailAutolink))) { dest = m.slice(1, -1); node = new Node('Link'); node.destination = 'mailto:' + encodeURI(unescape(dest)); node.appendChild(text(dest)); block.appendChild(node); return true; - } else if ((m = this.match(/^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i))) { + } else if ((m = this.match(reAutolink))) { dest = m.slice(1, -1); node = new Node('Link'); node.destination = encodeURI(unescape(dest)); -- cgit 0.0.5-2-1-g0f52 From d548d56d604193e4eebb4ab81c347887763b7d69 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 10 Jan 2015 16:10:22 +0100 Subject: Optimize S_is_leaf --- src/iterator.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/iterator.c b/src/iterator.c index a3ae4158d8..0354eff979 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -5,6 +5,16 @@ #include "cmark.h" #include "iterator.h" +static const int S_leaf_mask = + (1 << CMARK_NODE_HTML) | + (1 << CMARK_NODE_HRULE) | + (1 << CMARK_NODE_CODE_BLOCK) | + (1 << CMARK_NODE_TEXT) | + (1 << CMARK_NODE_SOFTBREAK) | + (1 << CMARK_NODE_LINEBREAK) | + (1 << CMARK_NODE_CODE) | + (1 << CMARK_NODE_INLINE_HTML); + cmark_iter* cmark_iter_new(cmark_node *root) { @@ -31,21 +41,10 @@ cmark_iter_next(cmark_iter *iter) return iter->event_type; } -int S_is_leaf(cmark_node *node) +static bool +S_is_leaf(cmark_node *node) { - switch (cmark_node_get_type(node)) { - case CMARK_NODE_HTML: - case CMARK_NODE_HRULE: - case CMARK_NODE_CODE_BLOCK: - case CMARK_NODE_TEXT: - case CMARK_NODE_SOFTBREAK: - case CMARK_NODE_LINEBREAK: - case CMARK_NODE_CODE: - case CMARK_NODE_INLINE_HTML: - return 1; - default: - return 0; - } + return (1 << node->type) & S_leaf_mask; } void -- cgit 0.0.5-2-1-g0f52 From 64ee8123152b4c2696bacbe6ad3a274c933a2835 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 08:37:31 -0800 Subject: Regex optimizations in blocks.js. --- js/lib/blocks.js | 55 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index c6e5d75e80..afc5ea9438 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -10,7 +10,7 @@ var unescapeString = new InlineParser().unescapeString; // Returns true if string contains only space characters. var isBlank = function(s) { "use strict"; - return /^\s*$/.test(s); + return !(reNonSpace.test(s)); }; // Convert tabs to spaces on each line using a 4-space tab stop. @@ -51,6 +51,34 @@ var reHtmlBlockOpen = new RegExp('^' + HTMLBLOCKOPEN, 'i'); var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; +var reMaybeSpecial = /^[ #`~*+_=<>0-9-]/; + +var reNonSpace = /[^ \t\n]/; + +var reBulletListMarker = /^[*+-]( +|$)/; + +var reOrderedListMarker = /^(\d+)([.)])( +|$)/; + +var reATXHeaderMarker = /^#{1,6}(?: +|$)/; + +var reCodeFence = /^`{3,}(?!.*`)|^~{3,}(?!.*~)/; + +var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/; + +var reSetextHeaderLine = /^(?:=+|-+) *$/; + +var reFinalNewlines = /(?:\n *)+$/; + +var reLineEnding = /\r\n|\n|\r/; + +// destructively trip final blank lines in an array of strings +var stripFinalBlankLines = function(lns) { + var i = lns.length - 1; + while (!reNonSpace.test(lns[i])) { + lns.pop(); + i--; + } +}; // DOC PARSER @@ -160,12 +188,12 @@ var parseListMarker = function(ln, offset) { if (rest.match(reHrule)) { return null; } - if ((match = rest.match(/^[*+-]( +|$)/))) { + if ((match = rest.match(reBulletListMarker))) { spaces_after_marker = match[1].length; data.type = 'Bullet'; data.bullet_char = match[0][0]; - } else if ((match = rest.match(/^(\d+)([.)])( +|$)/))) { + } else if ((match = rest.match(reOrderedListMarker))) { spaces_after_marker = match[3].length; data.type = 'Ordered'; data.start = parseInt(match[1]); @@ -226,7 +254,7 @@ var incorporateLine = function(ln, line_number) { } container = container.lastChild; - match = matchAt(/[^ ]/, ln, offset); + match = matchAt(reNonSpace, ln, offset); if (match === -1) { first_nonspace = ln.length; blank = true; @@ -339,9 +367,9 @@ var incorporateLine = function(ln, line_number) { container.t !== 'IndentedCode' && container.t !== 'HtmlBlock' && // this is a little performance optimization: - matchAt(/^[ #`~*+_=<>0-9-]/, ln, offset) !== -1) { + matchAt(reMaybeSpecial, ln, offset) !== -1) { - match = matchAt(/[^ ]/, ln, offset); + match = matchAt(reNonSpace, ln, offset); if (match === -1) { first_nonspace = ln.length; blank = true; @@ -371,7 +399,7 @@ var incorporateLine = function(ln, line_number) { closeUnmatchedBlocks(this); container = this.addChild('BlockQuote', line_number, offset); - } else if ((match = ln.slice(first_nonspace).match(/^#{1,6}(?: +|$)/))) { + } else if ((match = ln.slice(first_nonspace).match(reATXHeaderMarker))) { // ATX header offset = first_nonspace + match[0].length; closeUnmatchedBlocks(this); @@ -382,7 +410,7 @@ var incorporateLine = function(ln, line_number) { [ln.slice(offset).replace(/^ *#+ *$/, '').replace(/ +#+ *$/, '')]; break; - } else if ((match = ln.slice(first_nonspace).match(/^`{3,}(?!.*`)|^~{3,}(?!.*~)/))) { + } else if ((match = ln.slice(first_nonspace).match(reCodeFence))) { // fenced code block var fence_length = match[0].length; closeUnmatchedBlocks(this); @@ -402,7 +430,7 @@ var incorporateLine = function(ln, line_number) { } else if (container.t === 'Paragraph' && container.strings.length === 1 && - ((match = ln.slice(first_nonspace).match(/^(?:=+|-+) *$/)))) { + ((match = ln.slice(first_nonspace).match(reSetextHeaderLine)))) { // setext header line closeUnmatchedBlocks(this); container.t = 'Header'; // convert Paragraph to SetextHeader @@ -447,7 +475,7 @@ var incorporateLine = function(ln, line_number) { // What remains at the offset is a text line. Add the text to the // appropriate container. - match = matchAt(/[^ ]/, ln, offset); + match = matchAt(reNonSpace, ln, offset); if (match === -1) { first_nonspace = ln.length; blank = true; @@ -500,7 +528,7 @@ var incorporateLine = function(ln, line_number) { // check for closing code fence: match = (indent <= 3 && ln.charAt(first_nonspace) === container.fence_char && - ln.slice(first_nonspace).match(/^(?:`{3,}|~{3,})(?= *$)/)); + ln.slice(first_nonspace).match(reClosingCodeFence)); if (match && match[0].length >= container.fence_length) { // don't add closing fence to container; instead, close it: this.finalize(container, line_number); @@ -569,7 +597,8 @@ var finalize = function(block, line_number) { break; case 'IndentedCode': - block.literal = block.strings.join('\n').replace(/(\n *)*$/, '\n'); + stripFinalBlankLines(block.strings); + block.literal = block.strings.join('\n') + '\n'; block.t = 'CodeBlock'; break; @@ -644,7 +673,7 @@ var parse = function(input) { this.doc = Document(); this.tip = this.doc; this.refmap = {}; - var lines = input.replace(/\n$/, '').split(/\r\n|\n|\r/); + var lines = input.replace(/\n$/, '').split(reLineEnding); var len = lines.length; for (var i = 0; i < len; i++) { this.incorporateLine(lines[i], i + 1); -- cgit 0.0.5-2-1-g0f52 From 009c3847f004fda437dd5376a9452973b1cb913e Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 10 Jan 2015 16:10:35 +0100 Subject: Rework iterators * Advance to the next node when calling 'cmark_iter_next', not when calling 'cmark_iter_get_node'. * Add 'cmark_iter_get_event_type' accessor. * Allow deletion of nodes after an 'EXIT' event, or an 'ENTER' event for leaf nodes. --- api_test/main.c | 41 ++++++++++++++++++++++++ src/cmark.h | 7 +++++ src/iterator.c | 98 +++++++++++++++++++++++++++++++++------------------------ src/iterator.h | 10 ++++-- 4 files changed, 112 insertions(+), 44 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index d2e41d399f..af40a9f980 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -319,6 +319,46 @@ iterator(test_batch_runner *runner) { cmark_node_free(doc); } +static void +iterator_delete(test_batch_runner *runner) { + static const char md[] = + "a *b* c\n" + "\n" + "* item1\n" + "* item2\n" + "\n" + "a `b` c\n" + "\n" + "* item1\n" + "* item2\n"; + cmark_node *doc = cmark_parse_document(md, sizeof(md) - 1); + cmark_iter *iter = cmark_iter_new(doc); + cmark_event_type ev_type; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cmark_node *node = cmark_iter_get_node(iter); + // Delete list, emph, and code nodes. + if ((ev_type == CMARK_EVENT_EXIT && + node->type == CMARK_NODE_LIST) || + (ev_type == CMARK_EVENT_EXIT && + node->type == CMARK_NODE_EMPH) || + (ev_type == CMARK_EVENT_ENTER && + node->type == CMARK_NODE_CODE)) { + cmark_node_free(node); + } + } + + char *html = cmark_render_html(doc, CMARK_OPT_DEFAULT); + static const char expected[] = + "

                  a c

                  \n" + "

                  a c

                  \n"; + STR_EQ(runner, html, expected, "iterate and delete nodes"); + + free(html); + cmark_iter_free(iter); + cmark_node_free(doc); +} + static void create_tree(test_batch_runner *runner) { @@ -630,6 +670,7 @@ int main() { accessors(runner); node_check(runner); iterator(runner); + iterator_delete(runner); create_tree(runner); hierarchy(runner); parser(runner); diff --git a/src/cmark.h b/src/cmark.h index 72650c9320..b153124b58 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -83,6 +83,7 @@ typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; typedef enum { + CMARK_EVENT_NONE, CMARK_EVENT_DONE, CMARK_EVENT_ENTER, CMARK_EVENT_EXIT @@ -204,6 +205,12 @@ CMARK_EXPORT cmark_node* cmark_iter_get_node(cmark_iter *iter); +/** Returns the current event type. + */ +CMARK_EXPORT +cmark_event_type +cmark_iter_get_event_type(cmark_iter *iter); + /** * ## Accessors */ diff --git a/src/iterator.c b/src/iterator.c index 0354eff979..7f90cc7910 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -1,3 +1,4 @@ +#include #include #include "config.h" @@ -18,15 +19,19 @@ static const int S_leaf_mask = cmark_iter* cmark_iter_new(cmark_node *root) { + if (root == NULL) { + return NULL; + } cmark_iter *iter = (cmark_iter*)malloc(sizeof(cmark_iter)); if (iter == NULL) { return NULL; - } else { - iter->root = root; - iter->current = root; - iter->event_type = CMARK_EVENT_ENTER; - return iter; } + iter->root = root; + iter->cur.ev_type = CMARK_EVENT_NONE; + iter->cur.node = NULL; + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = root; + return iter; } void @@ -35,61 +40,72 @@ cmark_iter_free(cmark_iter *iter) free(iter); } -cmark_event_type -cmark_iter_next(cmark_iter *iter) -{ - return iter->event_type; -} - static bool S_is_leaf(cmark_node *node) { return (1 << node->type) & S_leaf_mask; } -void -cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type) +cmark_event_type +cmark_iter_next(cmark_iter *iter) { - iter->event_type = event_type; - iter->current = current; -} + cmark_event_type ev_type = iter->next.ev_type; + cmark_node *node = iter->next.node; -cmark_node* -cmark_iter_get_node(cmark_iter *iter) -{ - /* we'll return current */ - cmark_node *cur = iter->current; + iter->cur.ev_type = ev_type; + iter->cur.node = node; - if (cur == NULL || iter->event_type == CMARK_EVENT_DONE) { - return NULL; + if (ev_type == CMARK_EVENT_DONE) { + return ev_type; } /* roll forward to next item, setting both fields */ - if (iter->event_type == CMARK_EVENT_ENTER && !S_is_leaf(cur)) { - if (cur->first_child == NULL) { + if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) { + if (node->first_child == NULL) { /* stay on this node but exit */ - iter->event_type = CMARK_EVENT_EXIT; + iter->next.ev_type = CMARK_EVENT_EXIT; } else { - iter->current = cur->first_child; - iter->event_type = CMARK_EVENT_ENTER; + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = node->first_child; } - } else if (cur == iter->root) { + } else if (node == iter->root) { /* don't move past root */ - iter->event_type = CMARK_EVENT_DONE; - iter->current = NULL; - } else if (cur->next) { - iter->event_type = CMARK_EVENT_ENTER; - iter->current = cur->next; - } else if (cur->parent) { - iter->event_type = CMARK_EVENT_EXIT; - iter->current = cur->parent; + iter->next.ev_type = CMARK_EVENT_DONE; + iter->next.node = NULL; + } else if (node->next) { + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = node->next; + } else if (node->parent) { + iter->next.ev_type = CMARK_EVENT_EXIT; + iter->next.node = node->parent; } else { - iter->event_type = CMARK_EVENT_DONE; - iter->current = NULL; + assert(false); + iter->next.ev_type = CMARK_EVENT_DONE; + iter->next.node = NULL; } - return cur; + return ev_type; +} + +void +cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type) +{ + iter->next.ev_type = event_type; + iter->next.node = current; + cmark_iter_next(iter); +} + +cmark_node* +cmark_iter_get_node(cmark_iter *iter) +{ + return iter->cur.node; +} + +cmark_event_type +cmark_iter_get_event_type(cmark_iter *iter) +{ + return iter->cur.ev_type; } diff --git a/src/iterator.h b/src/iterator.h index bf53112d08..027b10bd9a 100644 --- a/src/iterator.h +++ b/src/iterator.h @@ -6,12 +6,16 @@ extern "C" { #endif #include "cmark.h" -#include "node.h" + +typedef struct { + cmark_event_type ev_type; + cmark_node *node; +} cmark_iter_state; struct cmark_iter { - cmark_node *current; cmark_node *root; - cmark_event_type event_type; + cmark_iter_state cur; + cmark_iter_state next; }; #ifdef __cplusplus -- cgit 0.0.5-2-1-g0f52 From fdfbe19d21822d30778a54a808b414dd280a8de6 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 10 Jan 2015 17:25:53 +0100 Subject: Update iterator documentation --- src/cmark.h | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index b153124b58..04ca6d7286 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -165,13 +165,24 @@ cmark_node_last_child(cmark_node *node); * cmark_iter_free(iter); * } * - * Note that if you delete the current node, its first child, or its - * next sibling, the iterator may point to a nonexistent note. - * Use 'cmark_iter_reset' to set its pointer to the next node that - * should be traversed. + * Iterators will never return `EXIT` events for leaf nodes, which are nodes + * of type: + * + * * CMARK_NODE_HTML + * * CMARK_NODE_HRULE + * * CMARK_NODE_CODE_BLOCK + * * CMARK_NODE_TEXT + * * CMARK_NODE_SOFTBREAK + * * CMARK_NODE_LINEBREAK + * * CMARK_NODE_CODE + * * CMARK_NODE_INLINE_HTML + * + * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for + * leaf nodes. */ -/** Creates a new iterator starting at 'root'. +/** Creates a new iterator starting at 'root'. The current node and event + * type are undefined until `cmark_iter_next` is called for the first time. */ CMARK_EXPORT cmark_iter* @@ -183,23 +194,14 @@ CMARK_EXPORT void cmark_iter_free(cmark_iter *iter); -/** Resets the iterator so that the current node is 'current' and - the event type is 'event_type'. Use this to resume after destructively - modifying the tree structure. - */ -CMARK_EXPORT -void -cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type); - -/** Returns the event type (`CMARK_EVENT_ENTER`, `CMARK_EVENT_EXIT`, - * or `CMARK_EVENT_DONE`) for the next node. +/** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`, + * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`). */ CMARK_EXPORT cmark_event_type cmark_iter_next(cmark_iter *iter); -/** Returns the next node in the sequence described above. +/** Returns the current node. */ CMARK_EXPORT cmark_node* @@ -211,6 +213,15 @@ CMARK_EXPORT cmark_event_type cmark_iter_get_event_type(cmark_iter *iter); +/** Resets the iterator so that the current node is 'current' and + * the event type is 'event_type'. The new current node must be a + * descendant of the root node or the root node itself. + */ +CMARK_EXPORT +void +cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type); + /** * ## Accessors */ -- cgit 0.0.5-2-1-g0f52 From 54c40bbc4bd09bce30ff6a45e9a9fcb08073a3c1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 10:06:21 -0800 Subject: Regex optimizations in inlines.js. --- js/lib/inlines.js | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 72c4448c65..4370df7a98 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -75,6 +75,18 @@ var reAutolink = /^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data var reSpnl = /^ *(?:\n *)?/; +var reWhitespaceChar = /^\s/; + +var reWhitespace = /\s+/g; + +var reFinalSpace = / *$/; + +var reInitialSpace = /^ */; + +var reAsciiAlnum = /[a-z0-9]/i; + +var reLinkLabel = /^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/; + // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; @@ -167,8 +179,7 @@ var parseBackticks = function(block) { node = new Node('Code'); node.literal = this.subject.slice(afterOpenTicks, this.pos - ticks.length) - .replace(/[ \n]+/g, ' ') - .trim(); + .trim().replace(reWhitespace, ' '); block.appendChild(node); return true; } @@ -270,17 +281,17 @@ var scanDelims = function(cc) { char_after = fromCodePoint(cc_after); } - var can_open = numdelims > 0 && !(/\s/.test(char_after)) && + var can_open = numdelims > 0 && !(reWhitespaceChar.test(char_after)) && !(rePunctuation.test(char_after) && !(/\s/.test(char_before)) && !(rePunctuation.test(char_before))); - var can_close = numdelims > 0 && !(/\s/.test(char_before)) && + var can_close = numdelims > 0 && !(reWhitespaceChar.test(char_before)) && !(rePunctuation.test(char_before) && - !(/\s/.test(char_after)) && + !(reWhitespaceChar.test(char_after)) && !(rePunctuation.test(char_after))); if (cc === C_UNDERSCORE) { - can_open = can_open && !((/[a-z0-9]/i).test(char_before)); - can_close = can_close && !((/[a-z0-9]/i).test(char_after)); + can_open = can_open && !((reAsciiAlnum).test(char_before)); + can_close = can_close && !((reAsciiAlnum).test(char_after)); } this.pos = startpos; return { numdelims: numdelims, @@ -463,7 +474,7 @@ var parseLinkDestination = function() { // Attempt to parse a link label, returning number of characters parsed. var parseLinkLabel = function() { "use strict"; - var m = this.match(/^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/); + var m = this.match(reLinkLabel); return m === null ? 0 : m.length; }; @@ -581,10 +592,11 @@ var parseCloseBracket = function(block) { ((dest = this.parseLinkDestination()) !== null) && this.spnl() && // make sure there's a space before the title: - (/^\s/.test(this.subject.charAt(this.pos - 1)) && + (reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) && (title = this.parseLinkTitle() || '') || true) && this.spnl() && - this.match(/^\)/)) { + this.subject.charAt(this.pos) === ')') { + this.pos += 1; matched = true; } } else { @@ -691,15 +703,15 @@ var parseNewline = function(block) { // check previous node for trailing spaces var lastc = block.lastChild; if (lastc && lastc.t === 'Text') { - var sps = / *$/.exec(lastc.literal)[0].length; + var sps = reFinalSpace.exec(lastc.literal)[0].length; if (sps > 0) { - lastc.literal = lastc.literal.replace(/ *$/, ''); + lastc.literal = lastc.literal.replace(reFinalSpace, ''); } block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); } else { block.appendChild(new Node('Softbreak')); } - this.match(/^ */); // gobble leading spaces in next line + this.match(reInitialSpace); // gobble leading spaces in next line return true; }; @@ -748,6 +760,7 @@ var parseReference = function(s, refmap) { this.pos = beforetitle; } + // FIXME // make sure we're at line end: if (this.match(/^ *(?:\n|$)/) === null) { this.pos = startpos; -- cgit 0.0.5-2-1-g0f52 From 24c277e407fd328171602e397f48cbd76e135120 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 10:23:55 -0800 Subject: Removed unnec. comment. --- js/lib/inlines.js | 1 - 1 file changed, 1 deletion(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 4370df7a98..0dc5e3ca1e 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -760,7 +760,6 @@ var parseReference = function(s, refmap) { this.pos = beforetitle; } - // FIXME // make sure we're at line end: if (this.match(/^ *(?:\n|$)/) === null) { this.pos = startpos; -- cgit 0.0.5-2-1-g0f52 From 22a8989123519263e2285b1dd71497ddf4469d53 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 10:27:00 -0800 Subject: Made NodeWalker a regular function returning an object. --- js/lib/node.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index 84fb122d9f..837f5969e9 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -14,18 +14,12 @@ function isContainer(node) { t === 'Image'); } -function NodeWalker(root) { - this.current = root; - this.root = root; - this.entering = true; -} - -NodeWalker.prototype.resumeAt = function(node, entering) { +var resumeAt = function(node, entering) { this.current = node; this.entering = (entering === true); }; -NodeWalker.prototype.next = function(){ +var next = function(){ var cur = this.current; var entering = this.entering; @@ -56,6 +50,14 @@ NodeWalker.prototype.next = function(){ return {entering: entering, node: cur}; }; +var NodeWalker = function(root) { + return { current: root, + root: root, + entering: true, + next: next, + resumeAt: resumeAt }; +} + function Node(nodeType, sourcepos) { this.t = nodeType; this.parent = null; @@ -154,7 +156,7 @@ Node.prototype.insertBefore = function(sibling) { }; Node.prototype.walker = function() { - var walker = new NodeWalker(this); + var walker = NodeWalker(this); return walker; }; -- cgit 0.0.5-2-1-g0f52 From 94bcebbe205bcb82378b0d63bd217c4b375e5b15 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 10:28:30 -0800 Subject: Made Node a local variable. --- js/lib/node.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index 837f5969e9..9dc7c3f3de 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -56,9 +56,9 @@ var NodeWalker = function(root) { entering: true, next: next, resumeAt: resumeAt }; -} +}; -function Node(nodeType, sourcepos) { +var Node = function(nodeType, sourcepos) { this.t = nodeType; this.parent = null; this.firstChild = null; @@ -79,7 +79,7 @@ function Node(nodeType, sourcepos) { this.fence_length = undefined; this.fence_offset = undefined; this.level = undefined; -} +}; Node.prototype.isContainer = function() { return isContainer(this); -- cgit 0.0.5-2-1-g0f52 From 732bb492959c4d1008c7f8bf5b26d9c45c3f6a95 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 10:28:54 -0800 Subject: Removed unused import. --- js/bin/commonmark | 1 - 1 file changed, 1 deletion(-) diff --git a/js/bin/commonmark b/js/bin/commonmark index f0c427c819..22ebd62506 100755 --- a/js/bin/commonmark +++ b/js/bin/commonmark @@ -2,7 +2,6 @@ "use strict"; var fs = require('fs'); -var util = require('util'); var commonmark = require('../lib/index.js'); var parser = new commonmark.DocParser(); -- cgit 0.0.5-2-1-g0f52 From 74f88deac274a3138af13daa76e265cfb93fd509 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 10:31:41 -0800 Subject: Reordered some definitions, so regex is defined before being used. --- js/lib/blocks.js | 56 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index afc5ea9438..a7b75aac72 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -5,8 +5,36 @@ var C_SPACE = 32; var C_OPEN_BRACKET = 91; var InlineParser = require('./inlines'); + var unescapeString = new InlineParser().unescapeString; +var BLOCKTAGNAME = '(?:article|header|aside|hgroup|iframe|blockquote|hr|body|li|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)'; + +var HTMLBLOCKOPEN = "<(?:" + BLOCKTAGNAME + "[\\s/>]" + "|" + + "/" + BLOCKTAGNAME + "[\\s>]" + "|" + "[?!])"; + +var reHtmlBlockOpen = new RegExp('^' + HTMLBLOCKOPEN, 'i'); + +var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; + +var reMaybeSpecial = /^[ #`~*+_=<>0-9-]/; + +var reNonSpace = /[^ \t\n]/; + +var reBulletListMarker = /^[*+-]( +|$)/; + +var reOrderedListMarker = /^(\d+)([.)])( +|$)/; + +var reATXHeaderMarker = /^#{1,6}(?: +|$)/; + +var reCodeFence = /^`{3,}(?!.*`)|^~{3,}(?!.*~)/; + +var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/; + +var reSetextHeaderLine = /^(?:=+|-+) *$/; + +var reLineEnding = /\r\n|\n|\r/; + // Returns true if string contains only space characters. var isBlank = function(s) { "use strict"; @@ -44,35 +72,9 @@ var matchAt = function(re, s, offset) { } }; -var BLOCKTAGNAME = '(?:article|header|aside|hgroup|iframe|blockquote|hr|body|li|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)'; -var HTMLBLOCKOPEN = "<(?:" + BLOCKTAGNAME + "[\\s/>]" + "|" + - "/" + BLOCKTAGNAME + "[\\s>]" + "|" + "[?!])"; -var reHtmlBlockOpen = new RegExp('^' + HTMLBLOCKOPEN, 'i'); - -var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; - -var reMaybeSpecial = /^[ #`~*+_=<>0-9-]/; - -var reNonSpace = /[^ \t\n]/; - -var reBulletListMarker = /^[*+-]( +|$)/; - -var reOrderedListMarker = /^(\d+)([.)])( +|$)/; - -var reATXHeaderMarker = /^#{1,6}(?: +|$)/; - -var reCodeFence = /^`{3,}(?!.*`)|^~{3,}(?!.*~)/; - -var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/; - -var reSetextHeaderLine = /^(?:=+|-+) *$/; - -var reFinalNewlines = /(?:\n *)+$/; - -var reLineEnding = /\r\n|\n|\r/; - // destructively trip final blank lines in an array of strings var stripFinalBlankLines = function(lns) { + "use strict"; var i = lns.length - 1; while (!reNonSpace.test(lns[i])) { lns.pop(); -- cgit 0.0.5-2-1-g0f52 From 200ef0233777cbe0d2deefc3365d4f563d31828c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 14:34:04 -0800 Subject: Don't use array buffer in HTML rendering. Use straight string `+=` instead. This is supposedly faster in browsers other than IE 7. --- js/lib/html.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/lib/html.js b/js/lib/html.js index 26c677b3a0..5cf3def38b 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -26,19 +26,19 @@ var renderNodes = function(block, options) { var tagname; var walker = block.walker(); var event, node, entering; - var buffer = []; + var buffer = ""; var disableTags = 0; var grandparent; var out = function(s) { if (disableTags > 0) { - buffer.push(s.replace(/\<[^>]*\>/g, '')); + buffer += s.replace(/\<[^>]*\>/g, ''); } else { - buffer.push(s); + buffer += s; } }; var esc = this.escape; var cr = function() { - if (buffer.length > 0 && buffer[buffer.length - 1] !== '\n') { + if (buffer.length > 0 && buffer.charAt[buffer.length - 1] !== '\n') { out('\n'); } }; @@ -224,7 +224,7 @@ var renderNodes = function(block, options) { } } - return buffer.join(''); + return buffer; }; var sub = function(s) { -- cgit 0.0.5-2-1-g0f52 From b6f684b615507fda3340f78f797056beb803f5cb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 14:59:48 -0800 Subject: More HTML rendering efficiency improvements. --- js/lib/html.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/js/lib/html.js b/js/lib/html.js index 5cf3def38b..37ee903c26 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -27,6 +27,7 @@ var renderNodes = function(block, options) { var walker = block.walker(); var event, node, entering; var buffer = ""; + var lastOut = "\n"; var disableTags = 0; var grandparent; var out = function(s) { @@ -35,11 +36,13 @@ var renderNodes = function(block, options) { } else { buffer += s; } + lastOut = s; }; var esc = this.escape; var cr = function() { - if (buffer.length > 0 && buffer.charAt[buffer.length - 1] !== '\n') { - out('\n'); + if (lastOut !== '\n') { + buffer += '\n'; + lastOut = '\n'; } }; -- cgit 0.0.5-2-1-g0f52 From 3d6fa8afd83d4eba90f817139812801676740af8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:03:07 -0800 Subject: Updated benchmarks. --- benchmarks.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 7e2167db36..506e44401e 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -10,7 +10,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | lunamark | 6.295 | 31.5 | | cheapskate | 5.760 | 28.8 | | peg-markdown | 5.450 | 27.3 | -| **commonmark.js** | 2.335 | 11.6 | +| **commonmark.js** | 2.310 | 11.5 | | marked | 1.855 | 9.3 | | discount | 1.705 | 8.5 | | **cmark** | 0.280 | 1.4 | @@ -38,7 +38,8 @@ They can be run using `make benchjs`: |Implementation | ops/sec | |-------------------|-------------| -| showdown.js | 173 ±1.45% | -| **commonmark.js** | 443 ±0.81% | -| marked.js | 531 ±0.69% | -| markdown-it | 684 ±1.15% | +| showdown.js | 170 ±1.68% | +| **commonmark.js** | 474 ±1.04% | +| marked.js | 545 ±0.53% | +| markdown-it | 689 ±0.84% | + -- cgit 0.0.5-2-1-g0f52 From f1768054bcdbb2f439e5851e12d0cfd7819adc50 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:12:26 -0800 Subject: HTML renderer: Test for characters that need escaping before substituting. --- js/lib/html.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/js/lib/html.js b/js/lib/html.js index 37ee903c26..12a8db9d44 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -201,7 +201,7 @@ var renderNodes = function(block, options) { } cr(); out(tag('pre') + tag('code', attrs)); - out(this.escape(node.literal)); + out(esc(node.literal)); out(tag('/code') + tag('/pre')); cr(); break; @@ -230,7 +230,7 @@ var renderNodes = function(block, options) { return buffer; }; -var sub = function(s) { +var replaceUnsafeChar = function(s) { switch (s) { case '&': return '&'; @@ -245,6 +245,7 @@ var sub = function(s) { } }; +var reNeedsEscaping = /[&<>"]/; // The HtmlRenderer object. function HtmlRenderer(){ @@ -256,10 +257,14 @@ function HtmlRenderer(){ // set to "
                  " to make them hard breaks // set to " " if you want to ignore line wrapping in source escape: function(s, preserve_entities) { - if (preserve_entities) { - return s.replace(/[&](?:[#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)|[&<>"]/gi, sub); + if (reNeedsEscaping.test(s)) { + if (preserve_entities) { + return s.replace(/[&](?:[#](x[a-f0-9]{1,8}|[0-9]{1,8});|[a-z][a-z0-9]{1,31};)|[&<>"]/gi, replaceUnsafeChar); + } else { + return s.replace(/[&<>"]/g, replaceUnsafeChar); + } } else { - return s.replace(/[&<>"]/g, sub); + return s; } }, render: renderNodes -- cgit 0.0.5-2-1-g0f52 From d400cb6ea87d6002c3cc5821ce47c5e75479dcd5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:16:30 -0800 Subject: Updated benchmarks. --- benchmarks.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 506e44401e..c80ba8a842 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -10,7 +10,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | lunamark | 6.295 | 31.5 | | cheapskate | 5.760 | 28.8 | | peg-markdown | 5.450 | 27.3 | -| **commonmark.js** | 2.310 | 11.5 | +| **commonmark.js** | 2.280 | 11.4 | | marked | 1.855 | 9.3 | | discount | 1.705 | 8.5 | | **cmark** | 0.280 | 1.4 | @@ -38,8 +38,8 @@ They can be run using `make benchjs`: |Implementation | ops/sec | |-------------------|-------------| -| showdown.js | 170 ±1.68% | -| **commonmark.js** | 474 ±1.04% | -| marked.js | 545 ±0.53% | -| markdown-it | 689 ±0.84% | +| showdown.js | 170 ±1.80% | +| **commonmark.js** | 490 ±0.80% | +| marked.js | 545 ±0.50% | +| markdown-it | 690 ±0.95% | -- cgit 0.0.5-2-1-g0f52 From 9ff768886050b8a62cba180d9c2d575c0fe82364 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:21:57 -0800 Subject: Small performance optimization in dealing with final newline. --- js/lib/blocks.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index a7b75aac72..e2b4033266 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -1,6 +1,7 @@ var Node = require('./node'); var C_GREATERTHAN = 62; +var C_NEWLINE = 10; var C_SPACE = 32; var C_OPEN_BRACKET = 91; @@ -675,8 +676,12 @@ var parse = function(input) { this.doc = Document(); this.tip = this.doc; this.refmap = {}; - var lines = input.replace(/\n$/, '').split(reLineEnding); + var lines = input.split(reLineEnding); var len = lines.length; + if (input.charCodeAt(input.length - 1) === C_NEWLINE) { + // ignore last blank line created by final newline + len -= 1; + } for (var i = 0; i < len; i++) { this.incorporateLine(lines[i], i + 1); } -- cgit 0.0.5-2-1-g0f52 From ec18344cf02a03c0c3a2254c72b7efc2d378d71a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:27:32 -0800 Subject: Another "test before replace" optimization. --- js/lib/inlines.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 0dc5e3ca1e..4d49861ce0 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -65,6 +65,8 @@ var reEntityHere = new RegExp('^' + ENTITY, 'i'); var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi'); +var reBackslashOrAmp = /[\\&]/; + var reTicks = new RegExp('`+'); var reTicksHere = new RegExp('^`+'); @@ -102,7 +104,11 @@ var unescapeChar = function(s) { // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { "use strict"; - return s.replace(reEntityOrEscapedChar, unescapeChar); + if (reBackslashOrAmp.test(s)) { + return s.replace(reEntityOrEscapedChar, unescapeChar); + } else { + return s; + } }; // Normalize reference label: collapse internal whitespace -- cgit 0.0.5-2-1-g0f52 From c772cd9c1b55f46306260977835f8d315275ee94 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:29:19 -0800 Subject: Put another regex in a variable. --- js/lib/html.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/js/lib/html.js b/js/lib/html.js index 12a8db9d44..928964e9b2 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -19,6 +19,8 @@ var tag = function(name, attrs, selfclosing) { return result; }; +var reHtmlTag = /\<[^>]*\>/; + var renderNodes = function(block, options) { var attrs; @@ -32,7 +34,7 @@ var renderNodes = function(block, options) { var grandparent; var out = function(s) { if (disableTags > 0) { - buffer += s.replace(/\<[^>]*\>/g, ''); + buffer += s.replace(reHtmlTag, ''); } else { buffer += s; } -- cgit 0.0.5-2-1-g0f52 From 94cd37405040b27ab20c2f373c08e61170365ff3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:30:57 -0800 Subject: HTML renderer: throw error on unknown tag type. This indicates a programming error. --- js/lib/html.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/lib/html.js b/js/lib/html.js index 928964e9b2..08daa9573f 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -225,7 +225,7 @@ var renderNodes = function(block, options) { break; default: - console.log("Unknown node type " + node.t); + throw("Unknown node type " + node.t); } } -- cgit 0.0.5-2-1-g0f52 From a6b67959d4dbe1161ac38684258ac409ed4ead01 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 15:47:02 -0800 Subject: html.js: removed blocksep and innersep, no longer used. --- js/lib/html.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/js/lib/html.js b/js/lib/html.js index 08daa9573f..9cb1676afb 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -253,8 +253,6 @@ var reNeedsEscaping = /[&<>"]/; function HtmlRenderer(){ return { // default options: - blocksep: '\n', // space between blocks - innersep: '\n', // space between block container tag and contents softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML // set to "
                  " to make them hard breaks // set to " " if you want to ignore line wrapping in source -- cgit 0.0.5-2-1-g0f52 From 0f3d82b846fb70835a059542405e849a59fa2e0a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 16:03:28 -0800 Subject: Removed an unnecessary variable from cloneUnmatchedBlocks. --- js/lib/blocks.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index e2b4033266..05de246925 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -350,13 +350,11 @@ var incorporateLine = function(ln, line_number) { // want to close unmatched blocks. So we store this closure for // use later, when we have more information. var closeUnmatchedBlocks = function(mythis) { - var already_done = false; // finalize any blocks not matched - while (!already_done && oldtip !== last_matched_container) { + while (oldtip !== last_matched_container) { mythis.finalize(oldtip, line_number - 1); oldtip = oldtip.parent; } - already_done = true; }; // Check to see if we've hit 2nd blank line; if so break out of list: -- cgit 0.0.5-2-1-g0f52 From 2fe4743a1303ca5dcba4018519a044e9de8e11db Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Jan 2015 17:17:09 -0800 Subject: Made 'options' a parameter of the renderer constructors... as opposed to the 'render' function. Added a 'colors' parameter for the ast renderer. --- dingus.html | 3 ++- js/bin/commonmark | 17 +++++++++++++---- js/lib/html.js | 7 ++++--- js/lib/index.js | 14 +++++++++----- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/dingus.html b/dingus.html index 6b379eb87e..ee1622fd40 100644 --- a/dingus.html +++ b/dingus.html @@ -10,6 +10,7 @@ - - - - - - - -
                  -
                  -
                  -

                  commonmark.js dingus

                  -
                  -
                  -
                  -
                  -

                  clear 

                  - -
                    -
                    Parsed in - ms. Rendered in ms.
                    -
                    -
                    - -
                    -
                    -
                    -
                    -
                    -
                    -
                    -
                    -
                    -
                    -
                    -
                    - - diff --git a/js/dingus.html b/js/dingus.html new file mode 100644 index 0000000000..f56775581e --- /dev/null +++ b/js/dingus.html @@ -0,0 +1,175 @@ + + + + + commonmark.js demo + + + + + + + + +
                    +
                    +
                    +

                    commonmark.js dingus

                    +
                    +
                    +
                    +
                    +

                    clear 

                    + +
                      +
                      Parsed in + ms. Rendered in ms.
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + -- cgit 0.0.5-2-1-g0f52 From 292b0bdad1aa79483a7498e72028bbff8134cebb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 20:28:17 -0800 Subject: Moved python, rb, lua wrappers to wrappers subdirectory. --- README.md | 7 +- wrapper.lua | 201 --------------------------------------------------- wrapper.py | 23 ------ wrapper.rb | 15 ---- wrapper3.py | 25 ------- wrappers/wrapper.lua | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++ wrappers/wrapper.py | 23 ++++++ wrappers/wrapper.rb | 15 ++++ wrappers/wrapper3.py | 25 +++++++ 9 files changed, 267 insertions(+), 268 deletions(-) delete mode 100755 wrapper.lua delete mode 100755 wrapper.py delete mode 100755 wrapper.rb delete mode 100755 wrapper3.py create mode 100755 wrappers/wrapper.lua create mode 100755 wrappers/wrapper.py create mode 100755 wrappers/wrapper.rb create mode 100755 wrappers/wrapper3.py diff --git a/README.md b/README.md index cf7b33c959..597d5b068b 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,7 @@ written in standard C99 and has no library dependencies. The parser is very fast (see [benchmarks](benchmarks.md)). It is easy to use `libcmark` in python, lua, ruby, and other dynamic -languages: see `wrapper.py`, `wrapper.lua`, and `wrapper.rb` in the -repository for simple examples. +languages: see the `wrappers/` subdirectory for some simple examples. The JavaScript implementation is a single JavaScript file, with no dependencies, that can be linked to in an HTML page. Here @@ -30,8 +29,8 @@ var parsed = reader.parse("Hello *world*"); var result = writer.render(parsed); ``` -A node package is also available; it includes a command-line tool called -`commonmark`. +A node package is also available (`npm install commonmark`). It includes +a command-line tool called `commonmark`. **A note on security:** Neither implementation attempts to sanitize link attributes or diff --git a/wrapper.lua b/wrapper.lua deleted file mode 100755 index 11c5183280..0000000000 --- a/wrapper.lua +++ /dev/null @@ -1,201 +0,0 @@ -#!/usr/bin/env luajit - -local ffi = require("ffi") - -cmark = ffi.load("libcmark") - -ffi.cdef[[ - - char *cmark_markdown_to_html(const char *text, int len); - typedef enum { - /* Block */ - CMARK_NODE_DOCUMENT, - CMARK_NODE_BLOCK_QUOTE, - CMARK_NODE_LIST, - CMARK_NODE_LIST_ITEM, - CMARK_NODE_CODE_BLOCK, - CMARK_NODE_HTML, - CMARK_NODE_PARAGRAPH, - CMARK_NODE_HEADER, - CMARK_NODE_HRULE, - CMARK_NODE_REFERENCE_DEF, - - CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, - CMARK_NODE_LAST_BLOCK = CMARK_NODE_REFERENCE_DEF, - - /* Inline */ - CMARK_NODE_TEXT, - CMARK_NODE_SOFTBREAK, - CMARK_NODE_LINEBREAK, - CMARK_NODE_INLINE_CODE, - CMARK_NODE_INLINE_HTML, - CMARK_NODE_EMPH, - CMARK_NODE_STRONG, - CMARK_NODE_LINK, - CMARK_NODE_IMAGE, - - CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, - CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, - } cmark_node_type; - - typedef enum { - CMARK_NO_LIST, - CMARK_BULLET_LIST, - CMARK_ORDERED_LIST - } cmark_list_type; - - typedef enum { - CMARK_PERIOD_DELIM, - CMARK_PAREN_DELIM - } cmark_delim_type; - - typedef struct cmark_node cmark_node; - typedef struct cmark_parser cmark_parser; - - cmark_node* cmark_node_new(cmark_node_type type); - - void - cmark_node_free(cmark_node *node); - - cmark_node* cmark_node_next(cmark_node *node); - - cmark_node* cmark_node_previous(cmark_node *node); - - cmark_node* cmark_node_parent(cmark_node *node); - - cmark_node* cmark_node_first_child(cmark_node *node); - - cmark_node* cmark_node_last_child(cmark_node *node); - - cmark_node_type cmark_node_get_type(cmark_node *node); - - const char* cmark_node_get_string_content(cmark_node *node); - - int cmark_node_set_string_content(cmark_node *node, const char *content); - - int cmark_node_get_header_level(cmark_node *node); - - int cmark_node_set_header_level(cmark_node *node, int level); - - cmark_list_type cmark_node_get_list_type(cmark_node *node); - - int cmark_node_set_list_type(cmark_node *node, cmark_list_type type); - - int cmark_node_get_list_start(cmark_node *node); - - int cmark_node_set_list_start(cmark_node *node, int start); - - int cmark_node_get_list_tight(cmark_node *node); - - int cmark_node_set_list_tight(cmark_node *node, int tight); - - const char* cmark_node_get_fence_info(cmark_node *node); - - int cmark_node_set_fence_info(cmark_node *node, const char *info); - - const char* cmark_node_get_url(cmark_node *node); - - int cmark_node_set_url(cmark_node *node, const char *url); - - const char* cmark_node_get_title(cmark_node *node); - - int cmark_node_set_title(cmark_node *node, const char *title); - - int cmark_node_get_start_line(cmark_node *node); - - int cmark_node_get_start_column(cmark_node *node); - - int cmark_node_get_end_line(cmark_node *node); - - void cmark_node_unlink(cmark_node *node); - - int cmark_node_insert_before(cmark_node *node, cmark_node *sibling); - - int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); - - int cmark_node_prepend_child(cmark_node *node, cmark_node *child); - - int cmark_node_append_child(cmark_node *node, cmark_node *child); - - cmark_parser *cmark_parser_new(); - - void cmark_parser_free(cmark_parser *parser); - - cmark_node *cmark_parser_finish(cmark_parser *parser); - - void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); - - cmark_node *cmark_parse_document(const char *buffer, size_t len); - - char *cmark_render_ast(cmark_node *root); - - char *cmark_render_html(cmark_node *root); - - ]] - -local inp = io.read("*all") -local doc = cmark.cmark_parse_document(inp, string.len(inp)) - -local cur = doc -local next -local child - -local walk = function(action) - level = 0 - while cur ~= nil do - action(cur, level) - child = cmark.cmark_node_first_child(cur) - if child == nil then - next = cmark.cmark_node_next(cur) - while next == nil do - cur = cmark.cmark_node_parent(cur) - level = level - 1 - if cur == nil then - break - else - next = cmark.cmark_node_next(cur) - end - end - cur = next - else - level = level + 1 - cur = child - end - end -end - -local type_table = { - 'BLOCK_QUOTE', - 'LIST', - 'LIST_ITEM', - 'CODE_BLOCK', - 'HTML', - 'PARAGRAPH', - 'HEADER', - 'HRULE', - 'REFERENCE_DEF', - 'TEXT', - 'SOFTBREAK', - 'LINEBREAK', - 'INLINE_CODE', - 'INLINE_HTML', - 'EMPH', - 'STRONG', - 'LINK', - 'IMAGE', -} -type_table[0] = 'DOCUMENT' - -local function print_type(node, level) - local t = tonumber(cmark.cmark_node_get_type(node)) - io.write(string.rep(' ', level) .. type_table[t]) - if t == cmark.CMARK_NODE_TEXT then - io.write(' ' .. ffi.string(cmark.cmark_node_get_string_content(node))) - end - io.write('\n') -end - -walk(print_type) - --- local html = ffi.string(cmark.cmark_render_html(doc)) --- print(html) diff --git a/wrapper.py b/wrapper.py deleted file mode 100755 index 52cbfc75aa..0000000000 --- a/wrapper.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python - -# Example for using the shared library from python - -from ctypes import CDLL, c_char_p, c_long -import sys -import platform - -sysname = platform.system() - -if sysname == 'Darwin': - cmark = CDLL("build/src/libcmark.dylib") -else: - cmark = CDLL("build/src/libcmark.so") - -markdown = cmark.cmark_markdown_to_html -markdown.restype = c_char_p -markdown.argtypes = [c_char_p, c_long] - -def md2html(text): - return markdown(text, len(text)) - -sys.stdout.write(md2html(sys.stdin.read())) diff --git a/wrapper.rb b/wrapper.rb deleted file mode 100755 index 59a9b87560..0000000000 --- a/wrapper.rb +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env ruby -require 'ffi' - -module CMark - extend FFI::Library - ffi_lib ['libcmark', 'cmark'] - attach_function :cmark_markdown_to_html, [:string, :int], :string -end - -def markdown_to_html(s) - len = s.bytesize - CMark::cmark_markdown_to_html(s, len) -end - -STDOUT.write(markdown_to_html(ARGF.read())) diff --git a/wrapper3.py b/wrapper3.py deleted file mode 100755 index 7a777fa1ed..0000000000 --- a/wrapper3.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python3 - -# Example for using the shared library from python - -from ctypes import CDLL, c_char_p, c_long -import sys -import platform - -sysname = platform.system() - -if sysname == 'Darwin': - cmark = CDLL("build/src/libcmark.dylib") -else: - cmark = CDLL("build/src/libcmark.so") - -markdown = cmark.cmark_markdown_to_html -markdown.restype = c_char_p -markdown.argtypes = [c_char_p, c_long] - -def md2html(text): - textbytes = text.encode('utf-8') - textlen = len(textbytes) - return markdown(textbytes, textlen).decode('utf-8') - -sys.stdout.write(md2html(sys.stdin.read())) diff --git a/wrappers/wrapper.lua b/wrappers/wrapper.lua new file mode 100755 index 0000000000..11c5183280 --- /dev/null +++ b/wrappers/wrapper.lua @@ -0,0 +1,201 @@ +#!/usr/bin/env luajit + +local ffi = require("ffi") + +cmark = ffi.load("libcmark") + +ffi.cdef[[ + + char *cmark_markdown_to_html(const char *text, int len); + typedef enum { + /* Block */ + CMARK_NODE_DOCUMENT, + CMARK_NODE_BLOCK_QUOTE, + CMARK_NODE_LIST, + CMARK_NODE_LIST_ITEM, + CMARK_NODE_CODE_BLOCK, + CMARK_NODE_HTML, + CMARK_NODE_PARAGRAPH, + CMARK_NODE_HEADER, + CMARK_NODE_HRULE, + CMARK_NODE_REFERENCE_DEF, + + CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_REFERENCE_DEF, + + /* Inline */ + CMARK_NODE_TEXT, + CMARK_NODE_SOFTBREAK, + CMARK_NODE_LINEBREAK, + CMARK_NODE_INLINE_CODE, + CMARK_NODE_INLINE_HTML, + CMARK_NODE_EMPH, + CMARK_NODE_STRONG, + CMARK_NODE_LINK, + CMARK_NODE_IMAGE, + + CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, + CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, + } cmark_node_type; + + typedef enum { + CMARK_NO_LIST, + CMARK_BULLET_LIST, + CMARK_ORDERED_LIST + } cmark_list_type; + + typedef enum { + CMARK_PERIOD_DELIM, + CMARK_PAREN_DELIM + } cmark_delim_type; + + typedef struct cmark_node cmark_node; + typedef struct cmark_parser cmark_parser; + + cmark_node* cmark_node_new(cmark_node_type type); + + void + cmark_node_free(cmark_node *node); + + cmark_node* cmark_node_next(cmark_node *node); + + cmark_node* cmark_node_previous(cmark_node *node); + + cmark_node* cmark_node_parent(cmark_node *node); + + cmark_node* cmark_node_first_child(cmark_node *node); + + cmark_node* cmark_node_last_child(cmark_node *node); + + cmark_node_type cmark_node_get_type(cmark_node *node); + + const char* cmark_node_get_string_content(cmark_node *node); + + int cmark_node_set_string_content(cmark_node *node, const char *content); + + int cmark_node_get_header_level(cmark_node *node); + + int cmark_node_set_header_level(cmark_node *node, int level); + + cmark_list_type cmark_node_get_list_type(cmark_node *node); + + int cmark_node_set_list_type(cmark_node *node, cmark_list_type type); + + int cmark_node_get_list_start(cmark_node *node); + + int cmark_node_set_list_start(cmark_node *node, int start); + + int cmark_node_get_list_tight(cmark_node *node); + + int cmark_node_set_list_tight(cmark_node *node, int tight); + + const char* cmark_node_get_fence_info(cmark_node *node); + + int cmark_node_set_fence_info(cmark_node *node, const char *info); + + const char* cmark_node_get_url(cmark_node *node); + + int cmark_node_set_url(cmark_node *node, const char *url); + + const char* cmark_node_get_title(cmark_node *node); + + int cmark_node_set_title(cmark_node *node, const char *title); + + int cmark_node_get_start_line(cmark_node *node); + + int cmark_node_get_start_column(cmark_node *node); + + int cmark_node_get_end_line(cmark_node *node); + + void cmark_node_unlink(cmark_node *node); + + int cmark_node_insert_before(cmark_node *node, cmark_node *sibling); + + int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); + + int cmark_node_prepend_child(cmark_node *node, cmark_node *child); + + int cmark_node_append_child(cmark_node *node, cmark_node *child); + + cmark_parser *cmark_parser_new(); + + void cmark_parser_free(cmark_parser *parser); + + cmark_node *cmark_parser_finish(cmark_parser *parser); + + void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); + + cmark_node *cmark_parse_document(const char *buffer, size_t len); + + char *cmark_render_ast(cmark_node *root); + + char *cmark_render_html(cmark_node *root); + + ]] + +local inp = io.read("*all") +local doc = cmark.cmark_parse_document(inp, string.len(inp)) + +local cur = doc +local next +local child + +local walk = function(action) + level = 0 + while cur ~= nil do + action(cur, level) + child = cmark.cmark_node_first_child(cur) + if child == nil then + next = cmark.cmark_node_next(cur) + while next == nil do + cur = cmark.cmark_node_parent(cur) + level = level - 1 + if cur == nil then + break + else + next = cmark.cmark_node_next(cur) + end + end + cur = next + else + level = level + 1 + cur = child + end + end +end + +local type_table = { + 'BLOCK_QUOTE', + 'LIST', + 'LIST_ITEM', + 'CODE_BLOCK', + 'HTML', + 'PARAGRAPH', + 'HEADER', + 'HRULE', + 'REFERENCE_DEF', + 'TEXT', + 'SOFTBREAK', + 'LINEBREAK', + 'INLINE_CODE', + 'INLINE_HTML', + 'EMPH', + 'STRONG', + 'LINK', + 'IMAGE', +} +type_table[0] = 'DOCUMENT' + +local function print_type(node, level) + local t = tonumber(cmark.cmark_node_get_type(node)) + io.write(string.rep(' ', level) .. type_table[t]) + if t == cmark.CMARK_NODE_TEXT then + io.write(' ' .. ffi.string(cmark.cmark_node_get_string_content(node))) + end + io.write('\n') +end + +walk(print_type) + +-- local html = ffi.string(cmark.cmark_render_html(doc)) +-- print(html) diff --git a/wrappers/wrapper.py b/wrappers/wrapper.py new file mode 100755 index 0000000000..52cbfc75aa --- /dev/null +++ b/wrappers/wrapper.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +# Example for using the shared library from python + +from ctypes import CDLL, c_char_p, c_long +import sys +import platform + +sysname = platform.system() + +if sysname == 'Darwin': + cmark = CDLL("build/src/libcmark.dylib") +else: + cmark = CDLL("build/src/libcmark.so") + +markdown = cmark.cmark_markdown_to_html +markdown.restype = c_char_p +markdown.argtypes = [c_char_p, c_long] + +def md2html(text): + return markdown(text, len(text)) + +sys.stdout.write(md2html(sys.stdin.read())) diff --git a/wrappers/wrapper.rb b/wrappers/wrapper.rb new file mode 100755 index 0000000000..59a9b87560 --- /dev/null +++ b/wrappers/wrapper.rb @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby +require 'ffi' + +module CMark + extend FFI::Library + ffi_lib ['libcmark', 'cmark'] + attach_function :cmark_markdown_to_html, [:string, :int], :string +end + +def markdown_to_html(s) + len = s.bytesize + CMark::cmark_markdown_to_html(s, len) +end + +STDOUT.write(markdown_to_html(ARGF.read())) diff --git a/wrappers/wrapper3.py b/wrappers/wrapper3.py new file mode 100755 index 0000000000..7a777fa1ed --- /dev/null +++ b/wrappers/wrapper3.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 + +# Example for using the shared library from python + +from ctypes import CDLL, c_char_p, c_long +import sys +import platform + +sysname = platform.system() + +if sysname == 'Darwin': + cmark = CDLL("build/src/libcmark.dylib") +else: + cmark = CDLL("build/src/libcmark.so") + +markdown = cmark.cmark_markdown_to_html +markdown.restype = c_char_p +markdown.argtypes = [c_char_p, c_long] + +def md2html(text): + textbytes = text.encode('utf-8') + textlen = len(textbytes) + return markdown(textbytes, textlen).decode('utf-8') + +sys.stdout.write(md2html(sys.stdin.read())) -- cgit 0.0.5-2-1-g0f52 From cf32b93b72453c4b280fd0863c5c231054dfc263 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 20:31:53 -0800 Subject: Moved eslint.json to js/ subdir. --- Makefile | 2 +- eslint.json | 18 ------------------ js/eslint.json | 18 ++++++++++++++++++ 3 files changed, 19 insertions(+), 19 deletions(-) delete mode 100644 eslint.json create mode 100644 js/eslint.json diff --git a/Makefile b/Makefile index 14ed1d1a56..88f72ed143 100644 --- a/Makefile +++ b/Makefile @@ -142,7 +142,7 @@ jshint: jshint ${JSMODULES} lint: - eslint -c eslint.json ${JSMODULES} js/bin/commonmark js/test.js js/bench.js + eslint -c js/eslint.json ${JSMODULES} js/bin/commonmark js/test.js js/bench.js benchjs: sudo renice 99 $$$$; node js/bench.js ${BENCHINP} diff --git a/eslint.json b/eslint.json deleted file mode 100644 index b3af4fe4ed..0000000000 --- a/eslint.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "env": { - "browser": false, - "node": true, - }, - "rules": { - "camelcase": false, - "quotes": false, - "no-process-exit": false, - "no-empty": false, - "new-caps": { - "newIsCap": true, - "capIsNew": true, - "newIsCapExceptions": [], - "capIsNewExceptions": [] - } - } -} diff --git a/js/eslint.json b/js/eslint.json new file mode 100644 index 0000000000..b3af4fe4ed --- /dev/null +++ b/js/eslint.json @@ -0,0 +1,18 @@ +{ + "env": { + "browser": false, + "node": true, + }, + "rules": { + "camelcase": false, + "quotes": false, + "no-process-exit": false, + "no-empty": false, + "new-caps": { + "newIsCap": true, + "capIsNew": true, + "newIsCapExceptions": [], + "capIsNewExceptions": [] + } + } +} -- cgit 0.0.5-2-1-g0f52 From 6740322cc41a4f65c1dba81bb4dfe9b8621dc430 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 20:34:47 -0800 Subject: Moved mkcasefold.pl to tools/. --- Makefile | 2 +- mkcasefold.pl | 22 ---------------------- tools/mkcasefold.pl | 22 ++++++++++++++++++++++ 3 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 mkcasefold.pl create mode 100644 tools/mkcasefold.pl diff --git a/Makefile b/Makefile index 88f72ed143..700416930d 100644 --- a/Makefile +++ b/Makefile @@ -71,7 +71,7 @@ $(SRCDIR)/html_unescape.h: $(SRCDIR)/html_unescape.gperf # We include case_fold_switch.inc in the repository, so this shouldn't # normally need to be generated. $(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt - perl mkcasefold.pl < $< > $@ + perl tools/mkcasefold.pl < $< > $@ # We include scanners.c in the repository, so this shouldn't # normally need to be generated. diff --git a/mkcasefold.pl b/mkcasefold.pl deleted file mode 100644 index 740ce77a60..0000000000 --- a/mkcasefold.pl +++ /dev/null @@ -1,22 +0,0 @@ -binmode STDOUT; -print(" switch (c) {\n"); -my $lastchar = ""; -while () { - if (/^[A-F0-9]/ and / [CF]; /) { - my ($char, $type, $subst) = m/([A-F0-9]+); ([CF]); ([^;]+)/; - if ($char eq $lastchar) { - break; - } - my @subst = $subst =~ m/(\w+)/g; - printf(" case 0x%s:\n", $char); - foreach (@subst) { - printf(" bufpush(0x%s);\n", $_); - } - printf(" break;\n"); - $lastchar = $char; - } -} -printf(" default:\n"); -printf(" bufpush(c);\n"); -print(" }\n"); - diff --git a/tools/mkcasefold.pl b/tools/mkcasefold.pl new file mode 100644 index 0000000000..740ce77a60 --- /dev/null +++ b/tools/mkcasefold.pl @@ -0,0 +1,22 @@ +binmode STDOUT; +print(" switch (c) {\n"); +my $lastchar = ""; +while () { + if (/^[A-F0-9]/ and / [CF]; /) { + my ($char, $type, $subst) = m/([A-F0-9]+); ([CF]); ([^;]+)/; + if ($char eq $lastchar) { + break; + } + my @subst = $subst =~ m/(\w+)/g; + printf(" case 0x%s:\n", $char); + foreach (@subst) { + printf(" bufpush(0x%s);\n", $_); + } + printf(" break;\n"); + $lastchar = $char; + } +} +printf(" default:\n"); +printf(" bufpush(c);\n"); +print(" }\n"); + -- cgit 0.0.5-2-1-g0f52 From fed6a57f30ecdbcf4805b1900dd0f164856c1163 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 20:36:22 -0800 Subject: Moved templates, makespec.py, and specfilter.hs -> tools/. --- Makefile | 12 +-- makespec.py | 165 ------------------------------------- specfilter.hs | 36 --------- template.html | 110 ------------------------- template.tex | 229 ---------------------------------------------------- tools/specfilter.hs | 36 +++++++++ 6 files changed, 42 insertions(+), 546 deletions(-) delete mode 100644 makespec.py delete mode 100755 specfilter.hs delete mode 100644 template.html delete mode 100644 template.tex create mode 100755 tools/specfilter.hs diff --git a/Makefile b/Makefile index 700416930d..aade38793f 100644 --- a/Makefile +++ b/Makefile @@ -156,14 +156,14 @@ dingus: js/commonmark.js ### Spec ### spec.md: $(SPEC) - python3 makespec.py markdown > $@ + python3 tools/makespec.py markdown > $@ -spec.html: spec.txt template.html ${PROG} - python3 makespec.py html > $@ +spec.html: spec.txt tools/template.html ${PROG} + python3 tools/makespec.py html > $@ -spec.pdf: spec.md template.tex specfilter.hs - pandoc -s $< --template template.tex \ - --filter ./specfilter.hs -o $@ --latex-engine=xelatex --toc \ +spec.pdf: spec.md tools/template.tex tools/specfilter.hs + pandoc -s $< --template tools/template.tex \ + --filter tools/specfilter.hs -o $@ --latex-engine=xelatex --toc \ --number-sections -V documentclass=report -V tocdepth=2 \ -V classoption=twosides diff --git a/makespec.py b/makespec.py deleted file mode 100644 index 84663f29da..0000000000 --- a/makespec.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env python3 -import re -import sys -from subprocess import * -from string import Template - -if len(sys.argv) == 2: - specformat = sys.argv[1] - if not (specformat in ["html", "markdown"]): - sys.stderr.write("Format must be html or markdown\n") - exit(1) -else: - sys.stderr.write("Usage: makespec.py [html|markdown]\n") - exit(1) - -def toIdentifier(s): - return re.sub(r'\s+', '-', re.sub(r'\W+', ' ', s.strip().lower())) - -def parseYaml(yaml): - metadata = {} - def parseField(match): - key = match.group(1) - val = match.group(2).strip() - if re.match(r'^\'', val): - val = val[1:len(val) - 1] - metadata[key] = val - fieldre = re.compile('^(\w+):(.*)$', re.MULTILINE) - re.sub(fieldre, parseField, yaml) - return metadata - -def pipe_through_prog(prog, text): - p1 = Popen(prog.split(), stdout=PIPE, stdin=PIPE, stderr=PIPE) - [result, err] = p1.communicate(input=text.encode('utf-8')) - return [p1.returncode, result.decode('utf-8'), err] - -def replaceAnchor(match): - refs.append("[{0}]: #{1}".format(match.group(1), match.group(2))) - if specformat == "html": - return '{0}'.format(match.group(1), match.group(2)) - else: - return match.group(0) - -stage = 0 -example = 0 -section = "" -sections = [] -mdlines = [] -refs = [] -lastnum = [] -finishedMeta = False -yamllines = [] - -with open('spec.txt', 'r', encoding='utf-8') as spec: - for ln in spec: - if not finishedMeta: - yamllines.append(ln) - if re.match(r'^\.\.\.$', ln): - finishedMeta = True - elif re.match(r'^\.$', ln): - if stage == 0: - example += 1 - mdlines.append("\n
                      \n".format(example, section)) - mdlines.append("\n\n".format(example)) - mdlines.append("````````````````````````````````````````````````````````` markdown\n") - stage = 1 - elif stage == 1: - mdlines.append("`````````````````````````````````````````````````````````\n\n") - mdlines.append("````````````````````````````````````````````````````````` html\n") - stage = 2 - elif stage == 2: - mdlines.append("`````````````````````````````````````````````````````````\n\n") - mdlines.append("
                      \n") - stage = 0 - else: - sys.stderr.out("Encountered unknown stage {0}\n".format(stage)) - sys.exit(1) - else: - if stage == 0: - match = re.match(r'^(#{1,6}) *(.*)', ln) - if match: - section = match.group(2) - lastlevel = len(lastnum) - level = len(match.group(1)) - if re.search(r'{-}$', section): - section = re.sub(r' *{-} *$', '', section) - if specformat == 'html': - ln = re.sub(r' *{-} *$', '', ln) - number = '' - else: - if lastlevel == level: - lastnum[level - 1] = lastnum[level - 1] + 1 - elif lastlevel < level: - while len(lastnum) < level: - lastnum.append(1) - else: # lastlevel > level - lastnum = lastnum[0:level] - lastnum[level - 1] = lastnum[level - 1] + 1 - number = '.'.join([str(x) for x in lastnum]) - ident = toIdentifier(section) - ln = re.sub(r' ', ' ' + number + ' ', ln, count=1) - sections.append(dict(level=level, - contents=section, - ident=ident, - number=number)) - refs.append("[{0}]: #{1}".format(section, ident)) - ln = re.sub(r'# +', '# '.format(ident), - ln, count=1) - else: - ln = re.sub(r'\[([^]]*)\]\(@([^)]*)\)', replaceAnchor, ln) - else: - ln = re.sub(r' ', '␣', ln) - mdlines.append(ln) - -mdtext = ''.join(mdlines) + '\n\n' + '\n'.join(refs) + '\n' -yaml = ''.join(yamllines) -metadata = parseYaml(yaml) - -if specformat == "markdown": - sys.stdout.write(yaml + '\n\n' + mdtext) -elif specformat == "html": - with open("template.html", "r", encoding="utf-8") as templatefile: - template = Template(templatefile.read()) - toclines = [] - for section in sections: - indent = ' ' * (section['level'] - 1) - toclines.append(indent + '* [' + section['number'] + ' ' + - section['contents'] + '](#' + section['ident'] + ')') - toc = '
                      \n\n' + '\n'.join(toclines) + '\n\n
                      \n\n' - prog = "build/src/cmark" - [retcode, result, err] = pipe_through_prog(prog, toc + mdtext) - if retcode == 0: - result = re.sub(r'␣', ' ', result) - result = re.sub(r'<\/a> ', - "", result) - # put plural s inside links for better visuals: - result = re.sub(r'<\/a>s', "s", result) - sys.stdout.write(template.substitute(metadata, body=result)) - - # check for errors: - idents = [] - for ident in re.findall(r'id="([^"]*)"', result): - if ident in idents: - sys.stderr.write("WARNING: duplicate identifier '" + ident + - "'\n") - else: - idents.append(ident) - for href in re.findall(r'href="#([^"]*)"', result): - if not (href in idents): - sys.stderr.write("WARNING: internal link with no anchor '" + - href + "'\n") - reftexts = [] - for ref in refs: - ref = re.sub('].*',']',ref).upper() - if ref in reftexts: - sys.stderr.write("WARNING: duplicate reference link '" + - ref + "'\n") - else: - reftexts.append(ref) - - else: - sys.stderr.write("Error converting markdown version of spec:\n") - sys.stderr.write(err) - exit(1) - -exit(0) diff --git a/specfilter.hs b/specfilter.hs deleted file mode 100755 index 7a7676b486..0000000000 --- a/specfilter.hs +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env runhaskell - -import Text.Pandoc.JSON -import Text.Pandoc.Generic - -main = toJSONFilter go - where go :: Pandoc -> Pandoc - go = bottomUp exampleDivs . bottomUp (concatMap anchors) - -exampleDivs :: Block -> Block -exampleDivs (Div (ident, ["example"], kvs) - [ d@(Div (_,["examplenum"],_) _), - c1@(CodeBlock (_,["markdown"],_) _), - c2@(CodeBlock (_,["html"],_) _) - ]) = Div (ident, ["example"], kvs) - [ rawtex "\\begin{minipage}[t]{\\textwidth}\n{\\scriptsize " - , d - , rawtex "\\vspace{-1em}}" - , rawtex "\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.85}\n" - , addBreaks c1 - , rawtex "\\end{minipage}\n\\hfill\n\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.95}\n" - , addBreaks c2 - , rawtex "\\end{minipage}\n\\end{minipage}" - ] - where rawtex = RawBlock (Format "latex") - addBreaks (CodeBlock attrs code) = CodeBlock attrs $ addBreaks' code - addBreaks' code = - if length code > 49 - then take 49 code ++ ('\n':addBreaks' (drop 49 code)) - else code -exampleDivs x = x - -anchors :: Inline -> [Inline] -anchors (Link text ('@':lab,_)) = - [RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}"), Strong text] -anchors x = [x] diff --git a/template.html b/template.html deleted file mode 100644 index a5cc081b81..0000000000 --- a/template.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - -${title} - - - - - -

                      ${title}

                      -
                      Version ${version} (${date})
                      -
                      - ${author} -
                      - -
                      -${body} - - diff --git a/template.tex b/template.tex deleted file mode 100644 index d083b7234a..0000000000 --- a/template.tex +++ /dev/null @@ -1,229 +0,0 @@ -\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} -$if(fontfamily)$ -\usepackage{$fontfamily$} -$else$ -\usepackage{lmodern} -$endif$ -$if(linestretch)$ -\usepackage{setspace} -\setstretch{$linestretch$} -$endif$ -\usepackage{amssymb,amsmath} -\usepackage{ifxetex,ifluatex} -\usepackage{fixltx2e} % provides \textsubscript -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - \usepackage[T1]{fontenc} - \usepackage[utf8]{inputenc} -$if(euro)$ - \usepackage{eurosym} -$endif$ -\else % if luatex or xelatex - \ifxetex - \usepackage{mathspec} - \usepackage{xltxtra,xunicode} - \else - \usepackage{fontspec} - \fi - \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} - \newcommand{\euro}{€} -$if(mainfont)$ - \setmainfont{$mainfont$} -$endif$ -$if(sansfont)$ - \setsansfont{$sansfont$} -$endif$ -$if(monofont)$ - \setmonofont[Mapping=tex-ansi]{$monofont$} -$endif$ -$if(mathfont)$ - \setmathfont(Digits,Latin,Greek){$mathfont$} -$endif$ -\fi -% use upquote if available, for straight quotes in verbatim environments -\IfFileExists{upquote.sty}{\usepackage{upquote}}{} -% use microtype if available -\IfFileExists{microtype.sty}{\usepackage{microtype}}{} -\usepackage[margin=1in]{geometry} -$if(natbib)$ -\usepackage{natbib} -\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} -$endif$ -$if(biblatex)$ -\usepackage{biblatex} -$if(biblio-files)$ -\bibliography{$biblio-files$} -$endif$ -$endif$ -$if(listings)$ -\usepackage{listings} -$endif$ -$if(lhs)$ -\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} -$endif$ -\usepackage{fancyvrb} -\usepackage{color,framed} -\newcommand{\VerbBar}{|} -\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} -\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\small} -% Add ',fontsize=\small' for more characters per line -\definecolor{shadecolor}{gray}{1} -\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}} -\newcommand{\NormalTok}[1]{{#1}} -\let\KeywordTok\NormalTok -\let\DataTypeTok\NormalTok -\let\DecValTok\NormalTok -\let\BaseNTok\NormalTok -\let\FloatTok\NormalTok -\let\CharTok\NormalTok -\let\StringTok\NormalTok -\let\CommentTok\NormalTok -\let\OtherTok\NormalTok -\let\AlertTok\NormalTok -\let\FunctionTok\NormalTok -\let\RegionMarkerTok\NormalTok -\let\ErrorTok\NormalTok -%\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} -%\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} -%\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} -%\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} -%\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} -%\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} -%\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} -%\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} -%\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} -%\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} -%\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} -%\newcommand{\RegionMarkerTok}[1]{{#1}} -%\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} -$if(verbatim-in-note)$ -\usepackage{fancyvrb} -$endif$ -$if(tables)$ -\usepackage{longtable,booktabs} -$endif$ -$if(graphics)$ -\usepackage{graphicx} -\makeatletter -\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} -\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} -\makeatother -% Scale images if necessary, so that they will not overflow the page -% margins by default, and it is still possible to overwrite the defaults -% using explicit options in \includegraphics[width, height, ...]{} -\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} -$endif$ -\ifxetex - \usepackage[setpagesize=false, % page size defined by xetex - unicode=false, % unicode breaks when used with xetex - xetex]{hyperref} -\else - \usepackage[unicode=true]{hyperref} -\fi -\hypersetup{breaklinks=true, - bookmarks=true, - pdfauthor={$author-meta$}, - pdftitle={$title-meta$}, - colorlinks=true, - citecolor=$if(citecolor)$$citecolor$$else$blue$endif$, - urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, - linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, - pdfborder={0 0 0}} -\urlstyle{same} % don't use monospace font for urls -$if(links-as-notes)$ -% Make links footnotes instead of hotlinks: -\renewcommand{\href}[2]{#2\footnote{\url{#1}}} -$endif$ -$if(strikeout)$ -\usepackage[normalem]{ulem} -% avoid problems with \sout in headers with hyperref: -\pdfstringdefDisableCommands{\renewcommand{\sout}{}} -$endif$ -\setlength{\parindent}{0pt} -\setlength{\parskip}{6pt plus 2pt minus 1pt} -\setlength{\emergencystretch}{3em} % prevent overfull lines -$if(numbersections)$ -\setcounter{secnumdepth}{5} -$else$ -\setcounter{secnumdepth}{0} -$endif$ -$if(verbatim-in-note)$ -\VerbatimFootnotes % allows verbatim text in footnotes -$endif$ -$if(lang)$ -\ifxetex - \usepackage{polyglossia} - \setmainlanguage{$mainlang$} -\else - \usepackage[$lang$]{babel} -\fi -$endif$ - -\usepackage{titlesec} -\titleformat{\chapter}[hang]{\Huge\bfseries}{\thechapter\ }{0pt}{\Huge\bfseries} - -\usepackage{fancyhdr} -\pagestyle{fancy} -\pagenumbering{arabic} -\lhead{\itshape $title$} -\chead{} -\rhead{\itshape{\nouppercase{\rightmark}}} -\lfoot{v$version$ ($date$)} -\cfoot{} -\rfoot{\thepage} - -$if(title)$ -\title{$title$$if(subtitle)$\\\vspace{0.5em}{\large $subtitle$}$endif$} -$endif$ -$if(author)$ -\author{$for(author)$$author$$sep$ \and $endfor$} -$endif$ -\date{$date$} -$for(header-includes)$ -$header-includes$ -$endfor$ - -\begin{document} -$if(title)$ -\maketitle -$endif$ -$if(abstract)$ -\begin{abstract} -$abstract$ -\end{abstract} -$endif$ - -$for(include-before)$ -$include-before$ - -$endfor$ -$if(toc)$ -{ -\hypersetup{linkcolor=black} -\setcounter{tocdepth}{$toc-depth$} -\tableofcontents -} -$endif$ -$body$ - -$if(natbib)$ -$if(biblio-files)$ -$if(biblio-title)$ -$if(book-class)$ -\renewcommand\bibname{$biblio-title$} -$else$ -\renewcommand\refname{$biblio-title$} -$endif$ -$endif$ -\bibliography{$biblio-files$} - -$endif$ -$endif$ -$if(biblatex)$ -\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ - -$endif$ -$for(include-after)$ -$include-after$ - -$endfor$ -\end{document} diff --git a/tools/specfilter.hs b/tools/specfilter.hs new file mode 100755 index 0000000000..7a7676b486 --- /dev/null +++ b/tools/specfilter.hs @@ -0,0 +1,36 @@ +#!/usr/bin/env runhaskell + +import Text.Pandoc.JSON +import Text.Pandoc.Generic + +main = toJSONFilter go + where go :: Pandoc -> Pandoc + go = bottomUp exampleDivs . bottomUp (concatMap anchors) + +exampleDivs :: Block -> Block +exampleDivs (Div (ident, ["example"], kvs) + [ d@(Div (_,["examplenum"],_) _), + c1@(CodeBlock (_,["markdown"],_) _), + c2@(CodeBlock (_,["html"],_) _) + ]) = Div (ident, ["example"], kvs) + [ rawtex "\\begin{minipage}[t]{\\textwidth}\n{\\scriptsize " + , d + , rawtex "\\vspace{-1em}}" + , rawtex "\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.85}\n" + , addBreaks c1 + , rawtex "\\end{minipage}\n\\hfill\n\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.95}\n" + , addBreaks c2 + , rawtex "\\end{minipage}\n\\end{minipage}" + ] + where rawtex = RawBlock (Format "latex") + addBreaks (CodeBlock attrs code) = CodeBlock attrs $ addBreaks' code + addBreaks' code = + if length code > 49 + then take 49 code ++ ('\n':addBreaks' (drop 49 code)) + else code +exampleDivs x = x + +anchors :: Inline -> [Inline] +anchors (Link text ('@':lab,_)) = + [RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}"), Strong text] +anchors x = [x] -- cgit 0.0.5-2-1-g0f52 From 92ace5f0d4ddf3f5f1d612bb0e5f0f3ade4b5adf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 20:43:55 -0800 Subject: Moved spec2js.js to tools/. --- spec2js.js | 17 ----------------- tools/spec2js.js | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100755 spec2js.js create mode 100755 tools/spec2js.js diff --git a/spec2js.js b/spec2js.js deleted file mode 100755 index 6bf366f97f..0000000000 --- a/spec2js.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -var fs = require('fs'); -var util = require('util'); - -fs.readFile('spec.txt', 'utf8', function(err, data) { - if (err) { - return console.log(err); - } - var examples = []; - data.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$/gm, - function(_,x,y){ - examples.push({markdown: x, html: y}); - }); - console.log(util.inspect(examples, { depth: null })); - console.warn(examples.length + ' examples'); -}); diff --git a/tools/spec2js.js b/tools/spec2js.js new file mode 100755 index 0000000000..6bf366f97f --- /dev/null +++ b/tools/spec2js.js @@ -0,0 +1,17 @@ +#!/usr/bin/env node + +var fs = require('fs'); +var util = require('util'); + +fs.readFile('spec.txt', 'utf8', function(err, data) { + if (err) { + return console.log(err); + } + var examples = []; + data.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$/gm, + function(_,x,y){ + examples.push({markdown: x, html: y}); + }); + console.log(util.inspect(examples, { depth: null })); + console.warn(examples.length + ' examples'); +}); -- cgit 0.0.5-2-1-g0f52 From 64ed30ef85a6968509392224a6849907f554f174 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:00:24 -0800 Subject: Some astyle reformatting. --- src/iterator.c | 16 ++++++++-------- src/xml.c | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/iterator.c b/src/iterator.c index 7f90cc7910..4daec2de4b 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -7,14 +7,14 @@ #include "iterator.h" static const int S_leaf_mask = - (1 << CMARK_NODE_HTML) | - (1 << CMARK_NODE_HRULE) | - (1 << CMARK_NODE_CODE_BLOCK) | - (1 << CMARK_NODE_TEXT) | - (1 << CMARK_NODE_SOFTBREAK) | - (1 << CMARK_NODE_LINEBREAK) | - (1 << CMARK_NODE_CODE) | - (1 << CMARK_NODE_INLINE_HTML); + (1 << CMARK_NODE_HTML) | + (1 << CMARK_NODE_HRULE) | + (1 << CMARK_NODE_CODE_BLOCK) | + (1 << CMARK_NODE_TEXT) | + (1 << CMARK_NODE_SOFTBREAK) | + (1 << CMARK_NODE_LINEBREAK) | + (1 << CMARK_NODE_CODE) | + (1 << CMARK_NODE_INLINE_HTML); cmark_iter* cmark_iter_new(cmark_node *root) diff --git a/src/xml.c b/src/xml.c index 46fc84006e..f630aba164 100644 --- a/src/xml.c +++ b/src/xml.c @@ -98,7 +98,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_HEADER: cmark_strbuf_printf(xml, " level=\"%d\"", - node->as.header.level); + node->as.header.level); break; case CMARK_NODE_CODE_BLOCK: if (node->as.code.info.len > 0) { -- cgit 0.0.5-2-1-g0f52 From de451d06eeb9c1e66352e9e9ad367a95b1cd1d1f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:02:38 -0800 Subject: Cleaned up Makefile. --- Makefile | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Makefile b/Makefile index aade38793f..a50581fc39 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,6 @@ SPEC=spec.txt SITE=_site SPECVERSION=$(shell perl -ne 'print $$1 if /^version: *([0-9.]+)/' $(SPEC)) PKGDIR?=cmark-$(SPECVERSION) -TARBALL?=cmark-$(SPECVERSION).tar.gz -ZIPARCHIVE?=cmark-$(SPECVERSION).zip FUZZCHARS?=2000000 # for fuzztest BENCHDIR=bench BENCHFILE=$(BENCHDIR)/benchinput.md @@ -60,7 +58,7 @@ archive: git archive --prefix=$(RELEASE)/ -o $(RELEASE).zip HEAD clean: - rm -rf $(BUILDDIR) $(MINGW_BUILDDIR) $(MINGW_INSTALLDIR) $(TARBALL) $(ZIPARCHIVE) $(PKGDIR) + rm -rf $(BUILDDIR) $(MINGW_BUILDDIR) $(MINGW_INSTALLDIR) $(PKGDIR) # We include html_unescape.h in the repository, so this shouldn't # normally need to be generated. @@ -81,10 +79,6 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re test: $(SPEC) $(BUILDDIR) make -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) -$(TARBALL): archive - -$(ZIPARCHIVE): archive - $(ALLTESTS): spec.txt 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]))' > $@ -- cgit 0.0.5-2-1-g0f52 From 47d27c2763599af741e2c4fa30cea15fe2990d29 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:09:17 -0800 Subject: Improved README. --- README.md | 72 +++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 597d5b068b..20f6411a09 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,7 @@ It is easy to use `libcmark` in python, lua, ruby, and other dynamic languages: see the `wrappers/` subdirectory for some simple examples. The JavaScript implementation is a single JavaScript file, with -no dependencies, that can be linked to in an HTML page. Here -is a simple usage example: +no dependencies, that can be linked into an HTML page. ``` javascript var reader = new commonmark.DocParser(); @@ -29,9 +28,6 @@ var parsed = reader.parse("Hello *world*"); var result = writer.render(parsed); ``` -A node package is also available (`npm install commonmark`). It includes -a command-line tool called `commonmark`. - **A note on security:** Neither implementation attempts to sanitize link attributes or raw HTML. If you use these libraries in applications that accept @@ -74,21 +70,26 @@ Or, to create Xcode project files on OSX: make install The GNU Makefile also provides a few other targets for developers. +To run a benchmark: + + make bench + To run a "fuzz test" against ten long randomly generated inputs: make fuzztest -To run a test for memory leaks using valgrind: +To run a test for memory leaks using `valgrind`: make leakcheck +To reformat source code using `astyle`: + + make astyle + To make a release tarball and zip archive: make archive -To test the archives: - - make testarchive Compiling for Windows --------------------- @@ -111,20 +112,29 @@ The JavaScript library can be installed through `npm`: npm install commonmark -To build the JavaScript library as a single standalone file: +This includes a command-line converter called `commonmark`. - browserify --standalone commonmark js/lib/index.js -o js/commonmark.js - -Or fetch a pre-built copy from +If you want to use it in a client application, you can fetch +a pre-built copy of `commonmark.js` from . +Or, to build it (this requires `browserify`): + + make js/commonmark.js + To run tests for the JavaScript library: make testjs -or +To run benchmarks against some other JavaScript converters: + + npm install showdown marked markdown-it + make benchjs + +To start an interactive dingus that you can use to try out +the library: - node js/test.js + make dingus The spec -------- @@ -132,12 +142,12 @@ The spec [The spec] contains over 500 embedded examples which serve as conformance tests. To run the tests using an executable `$PROG`: - python test/spec_tests.py --program $PROG + python3 test/spec_tests.py --program $PROG If you want to extract the raw test data from the spec without actually running the tests, you can do: - python test/spec_tests.py --dump-tests + python3 test/spec_tests.py --dump-tests and you'll get all the tests in JSON format. @@ -153,8 +163,9 @@ file, with code examples written in a shorthand form: . To build an HTML version of the spec, do `make spec.html`. To build a -PDF version, do `make spec.pdf`. Both these commands require that -[pandoc] is installed, and creating a PDF requires a latex installation. +PDF version, do `make spec.pdf`. (Creating a PDF requires [pandoc] +and a LaTeX installation. Creating the HTML version requires only +`libcmark` and `python3`.) The spec is written from the point of view of the human writer, not the computer reader. It is not an algorithm---an English translation of @@ -190,15 +201,13 @@ Differences from original Markdown There are only a few places where this spec says things that contradict the canonical syntax description: -- It [allows all punctuation symbols to be - backslash-escaped](http://spec.commonmark.org/0.13/#backslash-escapes), +- It allows all punctuation symbols to be backslash-escaped, not just the symbols with special meanings in Markdown. We found that it was just too hard to remember which symbols could be escaped. -- It introduces an [alternative syntax for hard line - breaks](http://spec.commonmark.org/0.13/#hard-line-breaks), a - backslash at the end of the line, supplementing the +- It introduces an alternative syntax for hard line + breaks, a backslash at the end of the line, supplementing the two-spaces-at-the-end-of-line rule. This is motivated by persistent complaints about the “invisible” nature of the two-space rule. @@ -206,13 +215,11 @@ the canonical syntax description: backwards-compatible way). For example, `Markdown.pl` allows single quotes around a title in inline links, but not in reference links. This kind of difference is really hard for users to remember, so the - spec [allows single quotes in both - contexts](http://spec.commonmark.org/0.13/#links). + spec allows single quotes in both contexts. - The rule for HTML blocks differs, though in most real cases it - shouldn't make a difference. (See - [here](http://spec.commonmark.org/0.13/#html-blocks) for - details.) The spec's proposal makes it easy to include Markdown + shouldn't make a difference. (See the section on HTML Blocks + for details.) The spec's proposal makes it easy to include Markdown inside HTML block-level tags, if you want to, but also allows you to exclude this. It is also makes parsing much easier, avoiding expensive backtracking. @@ -231,7 +238,7 @@ the canonical syntax description: - Rules for content in lists differ in a few respects, though (as with HTML blocks), most lists in existing documents should render as intended. There is some discussion of the choice points and - differences [here](http://spec.commonmark.org/0.13/#motivation). + differences in the subsection of List Items entitled Motivation. We think that the spec's proposal does better than any existing implementation in rendering lists the way a human writer or reader would intuitively understand them. (We could give numerous examples @@ -253,7 +260,7 @@ the canonical syntax description: - The start number of an ordered list is significant. -- [Fenced code blocks](http://spec.commonmark.org/0.13/#fenced-code-blocks) are supported, delimited by either +- Fenced code blocks are supported, delimited by either backticks (```` ``` ```` or tildes (` ~~~ `). Contributing @@ -289,7 +296,8 @@ optimized the C implementation for performance, increasing its speed tenfold. Kārlis Gaņģis helped work out a better parsing algorithm for links and emphasis, eliminating several worst-case performance issues. Nick Wellnhofer contributed many improvements, including -most of the C library's API and its test harness. +most of the C library's API and its test harness. Vitaly Puzrin +has offered much good advice about the JavaScript implementation. [cmake]: http://www.cmake.org/download/ [pandoc]: http://johnmacfarlane.net/pandoc/ -- cgit 0.0.5-2-1-g0f52 From 2d992249c84220b36fa61985667c836a95bf118a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:12:05 -0800 Subject: Fixed travis (I hope). --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fb2d83e13d..8f1d4d51ae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ before_install: sudo apt-get install -qq cmake python3 valgrind elif [ ${TRAVIS_OS_NAME:-'linux'} = 'osx' ] then - # We test on OSX without python3, to make sure that works + echo 'Building without python3, to make sure that works.' fi script: - make -- cgit 0.0.5-2-1-g0f52 From 82e9791b9ec8ada62f3718d95c0a89dbcfeb64a7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:16:33 -0800 Subject: Revert "Moved dingus to js directory." This reverts commit 5ddf8743f02132f07aad4bb27e0b84c530a706d7. --- Makefile | 2 +- dingus.html | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ js/dingus.html | 175 --------------------------------------------------------- 3 files changed, 176 insertions(+), 176 deletions(-) create mode 100644 dingus.html delete mode 100644 js/dingus.html diff --git a/Makefile b/Makefile index a50581fc39..93fa3532df 100644 --- a/Makefile +++ b/Makefile @@ -145,7 +145,7 @@ npm: cd js; npm publish dingus: js/commonmark.js - cd js && echo "Starting dingus server at http://localhost:9000/dingus.html" && python -m SimpleHTTPServer 9000 + echo "Starting dingus server at http://localhost:9000/dingus.html" && python -m SimpleHTTPServer 9000 ### Spec ### diff --git a/dingus.html b/dingus.html new file mode 100644 index 0000000000..0cac16dc7f --- /dev/null +++ b/dingus.html @@ -0,0 +1,175 @@ + + + + + commonmark.js demo + + + + + + + + +
                      +
                      +
                      +

                      commonmark.js dingus

                      +
                      +
                      +
                      +
                      +

                      clear 

                      + +
                        +
                        Parsed in + ms. Rendered in ms.
                        +
                        +
                        + +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        + + diff --git a/js/dingus.html b/js/dingus.html deleted file mode 100644 index f56775581e..0000000000 --- a/js/dingus.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - commonmark.js demo - - - - - - - - -
                        -
                        -
                        -

                        commonmark.js dingus

                        -
                        -
                        -
                        -
                        -

                        clear 

                        - -
                          -
                          Parsed in - ms. Rendered in ms.
                          -
                          -
                          - -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          - - -- cgit 0.0.5-2-1-g0f52 From 53040da862b8f50f4f1af36b6c5e0a675640b052 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:18:17 -0800 Subject: Fixed typo in travis script. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8f1d4d51ae..2c4671b52e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ script: - make - make test - | - if [ $(TRAVIS_ON_NAME:-'linux'} = 'linux' ] + if [ ${TRAVIS_ON_NAME:-'linux'} = 'linux' ] then PROG=`ls cmark-*.*/build/src/cmark` make leakcheck fi -- cgit 0.0.5-2-1-g0f52 From ae09da9e66e73821183c1bdb4991f92c24b05545 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:29:02 -0800 Subject: More travis fixes. --- .travis.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2c4671b52e..b0c01007fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,13 +15,11 @@ before_install: sudo apt-get install -qq cmake python3 valgrind elif [ ${TRAVIS_OS_NAME:-'linux'} = 'osx' ] then - echo 'Building without python3, to make sure that works.' + brew update + brew install valgrind + # Building without python3, to make sure that works. fi script: - make - make test - - | - if [ ${TRAVIS_ON_NAME:-'linux'} = 'linux' ] - then - PROG=`ls cmark-*.*/build/src/cmark` make leakcheck - fi + - make leakcheck -- cgit 0.0.5-2-1-g0f52 From 8e0f25192e6ece5c77fb69d8f4032761f85a566f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 21:34:22 -0800 Subject: Another try at .travis.yml. --- .travis.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index b0c01007fc..4ef377db6c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,11 +15,13 @@ before_install: sudo apt-get install -qq cmake python3 valgrind elif [ ${TRAVIS_OS_NAME:-'linux'} = 'osx' ] then - brew update - brew install valgrind - # Building without python3, to make sure that works. + echo "Building without python3, to make sure that works." fi script: - make - make test - - make leakcheck + - | + if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] + then + make leakcheck + fi -- cgit 0.0.5-2-1-g0f52 From d39cd29b8763c248b416bcae15586132be00c686 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 22:50:00 -0800 Subject: Made closeUnmatchedBlocks a method of DocParser... instead of a closure. Performance increase and code simplification. --- js/lib/blocks.js | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 5b01358067..9055377126 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -215,6 +215,15 @@ var listsMatch = function(list_data, item_data) { list_data.bullet_char === item_data.bullet_char); }; +// Finalize and close any unmatched blocks. +var closeUnmatchedBlocks = function() { + // finalize any blocks not matched + while (this.oldtip !== this.last_matched_container) { + this.finalize(this.oldtip, this.line_number - 1); + this.oldtip = this.oldtip.parent; + } +}; + // Analyze a line of text and update the document appropriately. // We parse markdown text by calling this on each line of input, // then finalizing the document. @@ -226,12 +235,11 @@ var incorporateLine = function(ln, line_number) { var data; var blank; var indent; - var last_matched_container; var i; var CODE_INDENT = 4; var container = this.doc; - var oldtip = this.tip; + this.oldtip = this.tip; // replace NUL characters for security if (ln.indexOf('\u0000') !== -1) { @@ -335,20 +343,7 @@ var incorporateLine = function(ln, line_number) { } } - last_matched_container = container; - - // This function is used to finalize and close any unmatched - // blocks. We aren't ready to do this now, because we might - // have a lazy paragraph continuation, in which case we don't - // want to close unmatched blocks. So we store this closure for - // use later, when we have more information. - var closeUnmatchedBlocks = function(mythis) { - // finalize any blocks not matched - while (oldtip !== last_matched_container) { - mythis.finalize(oldtip, line_number - 1); - oldtip = oldtip.parent; - } - }; + this.last_matched_container = container; // Check to see if we've hit 2nd blank line; if so break out of list: if (blank && container.last_line_blank) { @@ -377,7 +372,7 @@ var incorporateLine = function(ln, line_number) { // indented code if (this.tip.t !== 'Paragraph' && !blank) { offset += CODE_INDENT; - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container = this.addChild('IndentedCode', line_number, offset); } else { // indent > 4 in a lazy paragraph continuation break; @@ -390,13 +385,13 @@ var incorporateLine = function(ln, line_number) { if (ln.charCodeAt(offset) === C_SPACE) { offset++; } - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container = this.addChild('BlockQuote', line_number, offset); } else if ((match = ln.slice(first_nonspace).match(reATXHeaderMarker))) { // ATX header offset = first_nonspace + match[0].length; - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container = this.addChild('Header', line_number, first_nonspace); container.level = match[0].trim().length; // number of #s // remove trailing ###s: @@ -407,7 +402,7 @@ var incorporateLine = function(ln, line_number) { } else if ((match = ln.slice(first_nonspace).match(reCodeFence))) { // fenced code block var fence_length = match[0].length; - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container = this.addChild('FencedCode', line_number, first_nonspace); container.fence_length = fence_length; container.fence_char = match[0][0]; @@ -417,7 +412,7 @@ var incorporateLine = function(ln, line_number) { } else if (matchAt(reHtmlBlockOpen, ln, first_nonspace) !== -1) { // html block - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container = this.addChild('HtmlBlock', line_number, first_nonspace); // note, we don't adjust offset because the tag is part of the text break; @@ -426,21 +421,21 @@ var incorporateLine = function(ln, line_number) { container.strings.length === 1 && ((match = ln.slice(first_nonspace).match(reSetextHeaderLine)))) { // setext header line - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container.t = 'Header'; // convert Paragraph to SetextHeader container.level = match[0][0] === '=' ? 1 : 2; offset = ln.length; } else if (matchAt(reHrule, ln, first_nonspace) !== -1) { // hrule - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); container = this.addChild('HorizontalRule', line_number, first_nonspace); offset = ln.length - 1; break; } else if ((data = parseListMarker(ln, first_nonspace))) { // list item - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); data.marker_offset = indent; offset = first_nonspace + data.padding; @@ -480,7 +475,7 @@ var incorporateLine = function(ln, line_number) { indent = first_nonspace - offset; // First check for a lazy paragraph continuation: - if (this.tip !== last_matched_container && + if (this.tip !== this.last_matched_container && !blank && this.tip.t === 'Paragraph' && this.tip.strings.length > 0) { @@ -492,7 +487,7 @@ var incorporateLine = function(ln, line_number) { } else { // not a lazy continuation // finalize any blocks not matched - closeUnmatchedBlocks(this); + this.closeUnmatchedBlocks(); // Block quote lines are never blank as they start with > // and we don't count blanks in fenced code for purposes of tight/loose @@ -691,6 +686,8 @@ function DocParser(options){ return { doc: new Document(), tip: this.doc, + oldtip: this.doc, + last_matched_container: this.doc, refmap: {}, lastLineLength: 0, inlineParser: new InlineParser(), @@ -700,6 +697,7 @@ function DocParser(options){ incorporateLine: incorporateLine, finalize: finalize, processInlines: processInlines, + closeUnmatchedBlocks: closeUnmatchedBlocks, parse: parse, options: options || {} }; -- cgit 0.0.5-2-1-g0f52 From 243db9a55878b4be1829a448ef9a0bd14d3a42da Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Jan 2015 22:55:30 -0800 Subject: Updated benchmarks. --- benchmarks.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 8d0087e934..8b9e13088c 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -11,7 +11,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | cheapskate | 8.24 | | peg-markdown | 5.45 | | parsedown | 5.06 | -| **commonmark.js** | 2.26 | +| **commonmark.js** | 2.22 | | marked | 1.93 | | discount | 1.86 | | **cmark** | 0.37 | @@ -28,7 +28,7 @@ Markdown sources of all the localizations of the first edition of time is the *difference* between the time to run the program with the benchmark input and the time to run it with no input. (This procedure ensures that implementations in dynamic languages are -not penalized by startup time.) A median of ten runs is taken. The +not penalized by startup time.) Amedian of ten runs is taken. The process is reniced to a high priority so that the system doesn't interrupt runs. @@ -41,8 +41,8 @@ setting the `BENCHINP` environment variable. Implementation | Ops/sec ----------------|------------------- -commonmark.js | 485 ops/sec ±1.04% -showdown.js | 170 ops/sec ±2.06% -marked.js | 552 ops/sec ±0.43% -markdown-it | 700 ops/sec ±1.05% +commonmark.js | 516 ops/sec ±0.92% +showdown.js | 169 ops/sec ±1.44% +marked.js | 544 ops/sec ±0.76% +markdown-it | 746 ops/sec ±0.68% -- cgit 0.0.5-2-1-g0f52 From 2b96c7559ff9dd6542810cc09f7676fa2ff9ef2b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 08:10:53 -0800 Subject: Fixed typo in spec. Closes #283. --- spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.txt b/spec.txt index 8a759d356d..25e0cc014d 100644 --- a/spec.txt +++ b/spec.txt @@ -4670,7 +4670,7 @@ _foo bar_

                          foo bar

                          . -This is not emphasis, because the opening `*` is followed by +This is not emphasis, because the opening `_` is followed by whitespace: . -- cgit 0.0.5-2-1-g0f52 From 3b2e2cc28b26651c29ca92fb1fd80dcbf012169a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 10:39:15 -0800 Subject: Added lineNumber proper to DocParser. Removed lineNumber param from addChild and some other methods. --- js/lib/blocks.js | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 9055377126..c67b585604 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -120,7 +120,7 @@ var endsWithBlankLine = function(block) { // document to the parent of the highest list, and finalizing // all the lists. (This is used to implement the "two blank lines // break of of all lists" feature.) -var breakOutOfLists = function(block, line_number) { +var breakOutOfLists = function(block) { var b = block; var last_list = null; do { @@ -132,10 +132,10 @@ var breakOutOfLists = function(block, line_number) { if (last_list) { while (block !== last_list) { - this.finalize(block, line_number); + this.finalize(block, this.lineNumber); block = block.parent; } - this.finalize(last_list, line_number); + this.finalize(last_list, this.lineNumber); this.tip = last_list.parent; } }; @@ -153,13 +153,13 @@ var addLine = function(ln, offset) { // Add block of type tag as a child of the tip. If the tip can't // accept children, close and finalize it and try its parent, // and so on til we find a block that can accept children. -var addChild = function(tag, line_number, offset) { +var addChild = function(tag, offset) { while (!canContain(this.tip.t, tag)) { - this.finalize(this.tip, line_number - 1); + this.finalize(this.tip, this.lineNumber - 1); } var column_number = offset + 1; // offset 0 = column 1 - var newBlock = new Node(tag, [[line_number, column_number], [0, 0]]); + var newBlock = new Node(tag, [[this.lineNumber, column_number], [0, 0]]); newBlock.strings = []; newBlock.string_content = undefined; this.tip.appendChild(newBlock); @@ -219,7 +219,7 @@ var listsMatch = function(list_data, item_data) { var closeUnmatchedBlocks = function() { // finalize any blocks not matched while (this.oldtip !== this.last_matched_container) { - this.finalize(this.oldtip, this.line_number - 1); + this.finalize(this.oldtip, this.lineNumber - 1); this.oldtip = this.oldtip.parent; } }; @@ -227,7 +227,7 @@ var closeUnmatchedBlocks = function() { // Analyze a line of text and update the document appropriately. // We parse markdown text by calling this on each line of input, // then finalizing the document. -var incorporateLine = function(ln, line_number) { +var incorporateLine = function(ln) { var all_matched = true; var first_nonspace; var offset = 0; @@ -347,7 +347,7 @@ var incorporateLine = function(ln, line_number) { // Check to see if we've hit 2nd blank line; if so break out of list: if (blank && container.last_line_blank) { - this.breakOutOfLists(container, line_number); + this.breakOutOfLists(container); } // Unless last matched container is a code block, try new container starts, @@ -373,7 +373,7 @@ var incorporateLine = function(ln, line_number) { if (this.tip.t !== 'Paragraph' && !blank) { offset += CODE_INDENT; this.closeUnmatchedBlocks(); - container = this.addChild('IndentedCode', line_number, offset); + container = this.addChild('IndentedCode', offset); } else { // indent > 4 in a lazy paragraph continuation break; } @@ -386,13 +386,13 @@ var incorporateLine = function(ln, line_number) { offset++; } this.closeUnmatchedBlocks(); - container = this.addChild('BlockQuote', line_number, offset); + container = this.addChild('BlockQuote', offset); } else if ((match = ln.slice(first_nonspace).match(reATXHeaderMarker))) { // ATX header offset = first_nonspace + match[0].length; this.closeUnmatchedBlocks(); - container = this.addChild('Header', line_number, first_nonspace); + container = this.addChild('Header', first_nonspace); container.level = match[0].trim().length; // number of #s // remove trailing ###s: container.strings = @@ -403,7 +403,7 @@ var incorporateLine = function(ln, line_number) { // fenced code block var fence_length = match[0].length; this.closeUnmatchedBlocks(); - container = this.addChild('FencedCode', line_number, first_nonspace); + container = this.addChild('FencedCode', first_nonspace); container.fence_length = fence_length; container.fence_char = match[0][0]; container.fence_offset = first_nonspace - offset; @@ -413,7 +413,7 @@ var incorporateLine = function(ln, line_number) { } else if (matchAt(reHtmlBlockOpen, ln, first_nonspace) !== -1) { // html block this.closeUnmatchedBlocks(); - container = this.addChild('HtmlBlock', line_number, first_nonspace); + container = this.addChild('HtmlBlock', first_nonspace); // note, we don't adjust offset because the tag is part of the text break; @@ -429,7 +429,7 @@ var incorporateLine = function(ln, line_number) { } else if (matchAt(reHrule, ln, first_nonspace) !== -1) { // hrule this.closeUnmatchedBlocks(); - container = this.addChild('HorizontalRule', line_number, first_nonspace); + container = this.addChild('HorizontalRule', first_nonspace); offset = ln.length - 1; break; @@ -442,12 +442,12 @@ var incorporateLine = function(ln, line_number) { // add the list if needed if (container.t !== 'List' || !(listsMatch(container.list_data, data))) { - container = this.addChild('List', line_number, first_nonspace); + container = this.addChild('List', first_nonspace); container.list_data = data; } // add the list item - container = this.addChild('Item', line_number, first_nonspace); + container = this.addChild('Item', first_nonspace); container.list_data = data; } else { @@ -499,7 +499,7 @@ var incorporateLine = function(ln, line_number) { container.t === 'FencedCode' || (container.t === 'Item' && !container.firstChild && - container.sourcepos[0][0] === line_number)); + container.sourcepos[0][0] === this.lineNumber)); var cont = container; while (cont.parent) { @@ -520,7 +520,7 @@ var incorporateLine = function(ln, line_number) { ln.slice(first_nonspace).match(reClosingCodeFence)); if (match && match[0].length >= container.fence_length) { // don't add closing fence to container; instead, close it: - this.finalize(container, line_number); + this.finalize(container, this.lineNumber); } else { this.addLine(ln, offset); } @@ -538,7 +538,7 @@ var incorporateLine = function(ln, line_number) { break; } else { // create paragraph container for line - container = this.addChild('Paragraph', line_number, first_nonspace); + container = this.addChild('Paragraph', this.lineNumber, first_nonspace); this.addLine(ln, first_nonspace); } } @@ -551,14 +551,14 @@ var incorporateLine = function(ln, line_number) { // or 'loose' status of a list, and parsing the beginnings // of paragraphs for reference definitions. Reset the tip to the // parent of the closed block. -var finalize = function(block, line_number) { +var finalize = function(block, lineNumber) { var pos; // don't do anything if the block is already closed if (!block.open) { return 0; } block.open = false; - block.sourcepos[1] = [line_number, this.lastLineLength + 1]; + block.sourcepos[1] = [lineNumber, this.lastLineLength + 1]; switch (block.t) { case 'Paragraph': @@ -668,7 +668,8 @@ var parse = function(input) { if (this.options.time) { console.timeEnd("preparing input"); } if (this.options.time) { console.time("block parsing"); } for (var i = 0; i < len; i++) { - this.incorporateLine(lines[i], i + 1); + this.lineNumber += 1; + this.incorporateLine(lines[i]); } while (this.tip) { this.finalize(this.tip, len); @@ -687,6 +688,7 @@ function DocParser(options){ doc: new Document(), tip: this.doc, oldtip: this.doc, + lineNumber: 0, last_matched_container: this.doc, refmap: {}, lastLineLength: 0, -- cgit 0.0.5-2-1-g0f52 From 298889ff1729e2c3b43ec1ecf2ada877a5ac0229 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 10:42:55 -0800 Subject: Fixed start column for blockquotes. --- js/lib/blocks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index c67b585604..c2293dff9d 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -386,7 +386,7 @@ var incorporateLine = function(ln) { offset++; } this.closeUnmatchedBlocks(); - container = this.addChild('BlockQuote', offset); + container = this.addChild('BlockQuote', first_nonspace); } else if ((match = ln.slice(first_nonspace).match(reATXHeaderMarker))) { // ATX header -- cgit 0.0.5-2-1-g0f52 From 959d326e880693ddde5ecabb5f642ee3440b4a92 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 10:59:12 -0800 Subject: Ensure that closeUnmatchedBlocks is not called unnecessarily. --- js/lib/blocks.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index c2293dff9d..bb3d0001ff 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -215,13 +215,14 @@ var listsMatch = function(list_data, item_data) { list_data.bullet_char === item_data.bullet_char); }; -// Finalize and close any unmatched blocks. +// Finalize and close any unmatched blocks. Returns true. var closeUnmatchedBlocks = function() { // finalize any blocks not matched while (this.oldtip !== this.last_matched_container) { this.finalize(this.oldtip, this.lineNumber - 1); this.oldtip = this.oldtip.parent; } + return true; }; // Analyze a line of text and update the document appropriately. @@ -237,6 +238,7 @@ var incorporateLine = function(ln) { var indent; var i; var CODE_INDENT = 4; + var allClosed; var container = this.doc; this.oldtip = this.tip; @@ -343,6 +345,7 @@ var incorporateLine = function(ln) { } } + allClosed = (container === this.oldtip); this.last_matched_container = container; // Check to see if we've hit 2nd blank line; if so break out of list: @@ -372,7 +375,8 @@ var incorporateLine = function(ln) { // indented code if (this.tip.t !== 'Paragraph' && !blank) { offset += CODE_INDENT; - this.closeUnmatchedBlocks(); + allClosed = allClosed || + this.closeUnmatchedBlocks(); container = this.addChild('IndentedCode', offset); } else { // indent > 4 in a lazy paragraph continuation break; @@ -385,13 +389,13 @@ var incorporateLine = function(ln) { if (ln.charCodeAt(offset) === C_SPACE) { offset++; } - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('BlockQuote', first_nonspace); } else if ((match = ln.slice(first_nonspace).match(reATXHeaderMarker))) { // ATX header offset = first_nonspace + match[0].length; - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('Header', first_nonspace); container.level = match[0].trim().length; // number of #s // remove trailing ###s: @@ -402,7 +406,7 @@ var incorporateLine = function(ln) { } else if ((match = ln.slice(first_nonspace).match(reCodeFence))) { // fenced code block var fence_length = match[0].length; - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('FencedCode', first_nonspace); container.fence_length = fence_length; container.fence_char = match[0][0]; @@ -412,7 +416,7 @@ var incorporateLine = function(ln) { } else if (matchAt(reHtmlBlockOpen, ln, first_nonspace) !== -1) { // html block - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('HtmlBlock', first_nonspace); // note, we don't adjust offset because the tag is part of the text break; @@ -421,21 +425,21 @@ var incorporateLine = function(ln) { container.strings.length === 1 && ((match = ln.slice(first_nonspace).match(reSetextHeaderLine)))) { // setext header line - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); container.t = 'Header'; // convert Paragraph to SetextHeader container.level = match[0][0] === '=' ? 1 : 2; offset = ln.length; } else if (matchAt(reHrule, ln, first_nonspace) !== -1) { // hrule - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('HorizontalRule', first_nonspace); offset = ln.length - 1; break; } else if ((data = parseListMarker(ln, first_nonspace))) { // list item - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); data.marker_offset = indent; offset = first_nonspace + data.padding; @@ -487,7 +491,7 @@ var incorporateLine = function(ln) { } else { // not a lazy continuation // finalize any blocks not matched - this.closeUnmatchedBlocks(); + allClosed = allClosed || this.closeUnmatchedBlocks(); // Block quote lines are never blank as they start with > // and we don't count blanks in fenced code for purposes of tight/loose -- cgit 0.0.5-2-1-g0f52 From 539b3c05cb0c4025f512c0c17cdf974909f5df02 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 11:11:18 -0800 Subject: last_matched_container -> lastMatchedContainer. --- js/lib/blocks.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index bb3d0001ff..e7f37a71af 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -218,7 +218,7 @@ var listsMatch = function(list_data, item_data) { // Finalize and close any unmatched blocks. Returns true. var closeUnmatchedBlocks = function() { // finalize any blocks not matched - while (this.oldtip !== this.last_matched_container) { + while (this.oldtip !== this.lastMatchedContainer) { this.finalize(this.oldtip, this.lineNumber - 1); this.oldtip = this.oldtip.parent; } @@ -346,7 +346,7 @@ var incorporateLine = function(ln) { } allClosed = (container === this.oldtip); - this.last_matched_container = container; + this.lastMatchedContainer = container; // Check to see if we've hit 2nd blank line; if so break out of list: if (blank && container.last_line_blank) { @@ -479,7 +479,7 @@ var incorporateLine = function(ln) { indent = first_nonspace - offset; // First check for a lazy paragraph continuation: - if (this.tip !== this.last_matched_container && + if (this.tip !== this.lastMatchedContainer && !blank && this.tip.t === 'Paragraph' && this.tip.strings.length > 0) { @@ -693,7 +693,7 @@ function DocParser(options){ tip: this.doc, oldtip: this.doc, lineNumber: 0, - last_matched_container: this.doc, + lastMatchedContainer: this.doc, refmap: {}, lastLineLength: 0, inlineParser: new InlineParser(), -- cgit 0.0.5-2-1-g0f52 From 95a60358a55014401ff16531ced05deb407bb66a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 20:38:58 -0800 Subject: Assign marker_offset to list data at initialization. --- js/lib/blocks.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index e7f37a71af..a9e7f53c1f 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -169,7 +169,7 @@ var addChild = function(tag, offset) { // Parse a list marker and return data on the marker (type, // start, delimiter, bullet character, padding) or null. -var parseListMarker = function(ln, offset) { +var parseListMarker = function(ln, offset, indent) { var rest = ln.slice(offset); var match; var spaces_after_marker; @@ -178,7 +178,8 @@ var parseListMarker = function(ln, offset) { bullet_char: undefined, start: undefined, delimiter: undefined, - padding: undefined }; + padding: undefined, + marker_offset: indent }; if (rest.match(reHrule)) { return null; } @@ -437,10 +438,9 @@ var incorporateLine = function(ln) { offset = ln.length - 1; break; - } else if ((data = parseListMarker(ln, first_nonspace))) { + } else if ((data = parseListMarker(ln, first_nonspace, indent))) { // list item allClosed = allClosed || this.closeUnmatchedBlocks(); - data.marker_offset = indent; offset = first_nonspace + data.padding; // add the list if needed -- cgit 0.0.5-2-1-g0f52 From 0a1e9eed8cce46278232ed886b130493b5ad0767 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 22:01:21 -0800 Subject: Simplified some of the new-block-start logic. --- js/lib/blocks.js | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index a9e7f53c1f..86064b53fc 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -366,6 +366,7 @@ var incorporateLine = function(ln) { if (match === -1) { first_nonspace = ln.length; blank = true; + break; } else { first_nonspace = match; blank = false; @@ -379,13 +380,17 @@ var incorporateLine = function(ln) { allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('IndentedCode', offset); - } else { // indent > 4 in a lazy paragraph continuation - break; } + break; + } + + offset = first_nonspace; - } else if (ln.charCodeAt(first_nonspace) === C_GREATERTHAN) { + var cc = ln.charCodeAt(offset); + + if (cc === C_GREATERTHAN) { // blockquote - offset = first_nonspace + 1; + offset += 1; // optional following space if (ln.charCodeAt(offset) === C_SPACE) { offset++; @@ -393,9 +398,9 @@ var incorporateLine = function(ln) { allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('BlockQuote', first_nonspace); - } else if ((match = ln.slice(first_nonspace).match(reATXHeaderMarker))) { + } else if ((match = ln.slice(offset).match(reATXHeaderMarker))) { // ATX header - offset = first_nonspace + match[0].length; + offset += match[0].length; allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('Header', first_nonspace); container.level = match[0].trim().length; // number of #s @@ -404,44 +409,45 @@ var incorporateLine = function(ln) { [ln.slice(offset).replace(/^ *#+ *$/, '').replace(/ +#+ *$/, '')]; break; - } else if ((match = ln.slice(first_nonspace).match(reCodeFence))) { + } else if ((match = ln.slice(offset).match(reCodeFence))) { // fenced code block var fence_length = match[0].length; allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('FencedCode', first_nonspace); container.fence_length = fence_length; container.fence_char = match[0][0]; - container.fence_offset = first_nonspace - offset; - offset = first_nonspace + fence_length; + container.fence_offset = indent; + offset += fence_length; break; - } else if (matchAt(reHtmlBlockOpen, ln, first_nonspace) !== -1) { + } else if (matchAt(reHtmlBlockOpen, ln, offset) !== -1) { // html block allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('HtmlBlock', first_nonspace); - // note, we don't adjust offset because the tag is part of the text + container = this.addChild('HtmlBlock', offset); + offset -= indent; // back up so spaces are part of block break; } else if (container.t === 'Paragraph' && container.strings.length === 1 && - ((match = ln.slice(first_nonspace).match(reSetextHeaderLine)))) { + ((match = ln.slice(offset).match(reSetextHeaderLine)))) { // setext header line allClosed = allClosed || this.closeUnmatchedBlocks(); container.t = 'Header'; // convert Paragraph to SetextHeader container.level = match[0][0] === '=' ? 1 : 2; offset = ln.length; + break; - } else if (matchAt(reHrule, ln, first_nonspace) !== -1) { + } else if (matchAt(reHrule, ln, offset) !== -1) { // hrule allClosed = allClosed || this.closeUnmatchedBlocks(); container = this.addChild('HorizontalRule', first_nonspace); offset = ln.length - 1; break; - } else if ((data = parseListMarker(ln, first_nonspace, indent))) { + } else if ((data = parseListMarker(ln, offset, indent))) { // list item allClosed = allClosed || this.closeUnmatchedBlocks(); - offset = first_nonspace + data.padding; + offset += data.padding; // add the list if needed if (container.t !== 'List' || @@ -459,10 +465,6 @@ var incorporateLine = function(ln) { } - if (acceptsLines(container.t)) { - // if it's a line container, it can't contain other containers - break; - } } // What remains at the offset is a text line. Add the text to the -- cgit 0.0.5-2-1-g0f52 From 53d6785139fb9f4642d4bc3d48918fbf6f33621d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 22:15:54 -0800 Subject: Updated benchmarks. --- benchmarks.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 8b9e13088c..c7aee00181 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -11,7 +11,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | cheapskate | 8.24 | | peg-markdown | 5.45 | | parsedown | 5.06 | -| **commonmark.js** | 2.22 | +| **commonmark.js** | 2.15 | | marked | 1.93 | | discount | 1.86 | | **cmark** | 0.37 | @@ -40,9 +40,9 @@ the CommonMark `README.md` file, but can be configured by setting the `BENCHINP` environment variable. Implementation | Ops/sec -----------------|------------------- -commonmark.js | 516 ops/sec ±0.92% -showdown.js | 169 ops/sec ±1.44% -marked.js | 544 ops/sec ±0.76% -markdown-it | 746 ops/sec ±0.68% +----------------|--------- +commonmark.js | 525 +showdown.js | 169 +marked.js | 545 +markdown-it | 750 -- cgit 0.0.5-2-1-g0f52 From daf49a0089b9f5e342d3f6ee077d7e284eeb5c1c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 22:43:21 -0800 Subject: blocks.js - avoid an implicit boolean cast. --- js/lib/blocks.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 86064b53fc..d53a82f295 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -65,10 +65,10 @@ var detabLine = function(text) { // Return index of match or -1. var matchAt = function(re, s, offset) { var res = s.slice(offset).match(re); - if (res) { - return offset + res.index; - } else { + if (res === null) { return -1; + } else { + return offset + res.index; } }; -- cgit 0.0.5-2-1-g0f52 From 9fbc6267a4f6cd87c92fa6f57f437aacbac4fb72 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 22:51:51 -0800 Subject: Initialize fields in objects to null rather than undefined. Big speed boost. --- js/lib/blocks.js | 14 +++++++------- js/lib/node.js | 22 +++++++++++----------- js/lib/xml.js | 10 +++++----- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index d53a82f295..cb4bd5fb76 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -161,7 +161,7 @@ var addChild = function(tag, offset) { var column_number = offset + 1; // offset 0 = column 1 var newBlock = new Node(tag, [[this.lineNumber, column_number], [0, 0]]); newBlock.strings = []; - newBlock.string_content = undefined; + newBlock.string_content = null; this.tip.appendChild(newBlock); this.tip = newBlock; return newBlock; @@ -173,12 +173,12 @@ var parseListMarker = function(ln, offset, indent) { var rest = ln.slice(offset); var match; var spaces_after_marker; - var data = { type: undefined, + var data = { type: null, tight: true, - bullet_char: undefined, - start: undefined, - delimiter: undefined, - padding: undefined, + bullet_char: null, + start: null, + delimiter: null, + padding: null, marker_offset: indent }; if (rest.match(reHrule)) { return null; @@ -654,7 +654,7 @@ var processInlines = function(block) { var Document = function() { var doc = new Node('Document', [[1, 1], [0, 0]]); - doc.string_content = undefined; + doc.string_content = null; doc.strings = []; return doc; }; diff --git a/js/lib/node.js b/js/lib/node.js index e58c7c7ebd..c90c3e991f 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -72,17 +72,17 @@ var Node = function(nodeType, sourcepos) { this.sourcepos = sourcepos; this.last_line_blank = false; this.open = true; - this.strings = undefined; - this.string_content = undefined; - this.literal = undefined; - this.list_data = undefined; - this.info = undefined; - this.destination = undefined; - this.title = undefined; - this.fence_char = undefined; - this.fence_length = undefined; - this.fence_offset = undefined; - this.level = undefined; + this.strings = null; + this.string_content = null; + this.literal = null; + this.list_data = null; + this.info = null; + this.destination = null; + this.title = null; + this.fence_char = null; + this.fence_length = null; + this.fence_offset = null; + this.level = null; }; Node.prototype.isContainer = function() { diff --git a/js/lib/xml.js b/js/lib/xml.js index e867fdcccd..ada61f7511 100644 --- a/js/lib/xml.js +++ b/js/lib/xml.js @@ -91,16 +91,16 @@ var renderNodes = function(block) { switch (nodetype) { case 'List': var data = node.list_data; - if (data.type !== undefined) { + if (data.type !== null) { attrs.push(['type', data.type.toLowerCase()]); } - if (data.start !== undefined) { + if (data.start !== null) { attrs.push(['start', String(data.start)]); } - if (data.tight !== undefined) { + if (data.tight !== null) { attrs.push(['tight', (data.tight ? 'true' : 'false')]); } - if (data.delimiter !== undefined) { + if (data.delimiter !== null) { var delimword = ''; if (data.delimiter === '.') { delimword = 'period'; @@ -128,7 +128,7 @@ var renderNodes = function(block) { } if (options.sourcepos) { var pos = node.sourcepos; - if (pos !== undefined) { + if (pos) { attrs.push(['data-sourcepos', String(pos[0][0]) + ':' + String(pos[0][1]) + '-' + String(pos[1][0]) + ':' + String(pos[1][1])]); -- cgit 0.0.5-2-1-g0f52 From 9b2687b151c78bdaa8553fcc3130bacb7d25f582 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 23:00:44 -0800 Subject: Updated benchmarks. --- benchmarks.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index c7aee00181..b9f41999eb 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -11,7 +11,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | cheapskate | 8.24 | | peg-markdown | 5.45 | | parsedown | 5.06 | -| **commonmark.js** | 2.15 | +| **commonmark.js** | 2.09 | | marked | 1.93 | | discount | 1.86 | | **cmark** | 0.37 | @@ -41,8 +41,7 @@ setting the `BENCHINP` environment variable. Implementation | Ops/sec ----------------|--------- -commonmark.js | 525 -showdown.js | 169 -marked.js | 545 -markdown-it | 750 - +commonmark.js | 557 +showdown.js | 167 +marked.js | 548 +markdown-it | 739 -- cgit 0.0.5-2-1-g0f52 From 71907d33e4b23eb6248a8ec664e0c04a12723630 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Jan 2015 23:14:28 -0800 Subject: Removed an implicit cast in node.js 'next'. --- js/lib/node.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index c90c3e991f..9fc71c75ee 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -27,7 +27,7 @@ var next = function(){ var cur = this.current; var entering = this.entering; - if (!cur) { + if (cur === null) { return null; } @@ -42,13 +42,13 @@ var next = function(){ this.entering = false; } - } else if (cur.next) { - this.current = cur.next; - this.entering = true; - - } else { + } else if (cur.next === null) { this.current = cur.parent; this.entering = false; + + } else { + this.current = cur.next; + this.entering = true; } return {entering: entering, node: cur}; -- cgit 0.0.5-2-1-g0f52 From ad7c7f17b70edcb19e5ffbfc2d852f854d8a661b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 08:08:48 -0800 Subject: Removed defective Example 449. Closes #284. --- spec.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/spec.txt b/spec.txt index 25e0cc014d..2ff906d04f 100644 --- a/spec.txt +++ b/spec.txt @@ -6258,16 +6258,6 @@ following closing bracket:

                          *foo*

                          . -This is a link too, for the same reason: - -. -[foo`]: /url - -[foo`]` -. -

                          [foo]

                          -. - Full references take precedence over shortcut references: . -- cgit 0.0.5-2-1-g0f52 From 96f924c37c2bc0136c6bea06dd1df611870fd0ac Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 08:09:38 -0800 Subject: Inserted space (typo). See #284. --- spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.txt b/spec.txt index 2ff906d04f..85aaa37c4a 100644 --- a/spec.txt +++ b/spec.txt @@ -5401,7 +5401,7 @@ _*foo*_

                          foo

                          . -However, strong emphasis within strong emphasisis possible without +However, strong emphasis within strong emphasis is possible without switching delimiters: . -- cgit 0.0.5-2-1-g0f52 From 45a2e3a387909a73857f00612225aebda1d1f5b1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 11:08:45 -0800 Subject: Rewrote beginning of Entities section. Clarified that only entities that are not in code blocks or code spans are decoded. --- spec.txt | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/spec.txt b/spec.txt index 85aaa37c4a..db67b89643 100644 --- a/spec.txt +++ b/spec.txt @@ -4145,13 +4145,12 @@ foo ## Entities With the goal of making this standard as HTML-agnostic as possible, all -valid HTML entities in any context are recognized as such and -converted into unicode characters before they are stored in the AST. - -This allows implementations that target HTML output to trivially escape -the entities when generating HTML, and simplifies the job of -implementations targetting other languages, as these will only need to -handle the unicode chars and need not be HTML-entity aware. +valid HTML entities (except in code blocks and code spans) +are recognized as such and converted into unicode characters before +they are stored in the AST. This means that renderers to formats other +than HTML need not be HTML-entity aware. HTML renderers may either escape +unicode characters as entities or leave them as they are. (However, +`"`, `&`, `<`, and `>` must always be rendered as entities.) [Named entities](@name-entities) consist of `&` + any of the valid HTML5 entity names + `;`. The @@ -4159,11 +4158,6 @@ handle the unicode chars and need not be HTML-entity aware. is used as an authoritative source of the valid entity names and their corresponding codepoints. -Conforming implementations that target HTML don't need to generate -entities for all the valid named entities that exist, with the exception -of `"` (`"`), `&` (`&`), `<` (`<`) and `>` (`>`), which -always need to be written as entities for security reasons. - .   & © Æ Ď ¾ ℋ ⅆ ∲ . -- cgit 0.0.5-2-1-g0f52 From d042b7cf47390039fe9d04c9e41cc272263a25db Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 21:36:03 -0800 Subject: Added (still commented-out) pathological tests to test.js. --- js/test.js | 188 +++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 126 insertions(+), 62 deletions(-) diff --git a/js/test.js b/js/test.js index 32d9f2cfdc..49a5a68fa6 100755 --- a/js/test.js +++ b/js/test.js @@ -11,6 +11,21 @@ var escSeq = function(s) { return this; }; }; + +var repeat = function(pattern, count) { + if (count < 1) { + return ''; + } + var result = ''; + while (count > 1) { + if (count & 1) { + result += pattern; + } + count >>= 1, pattern += pattern; + } + return result + pattern; +}; + var cursor = { write: function (s) { process.stdout.write(s); @@ -25,74 +40,123 @@ var cursor = { var writer = new commonmark.HtmlRenderer(); var reader = new commonmark.DocParser(); -var passed = 0; -var failed = 0; +var results = { + passed: 0, + failed: 0 +}; var showSpaces = function(s) { - var t = s; - return t.replace(/\t/g, '→') - .replace(/ /g, '␣'); + var t = s; + return t.replace(/\t/g, '→') + .replace(/ /g, '␣'); }; -fs.readFile('spec.txt', 'utf8', function(err, data) { - if (err) { - return console.log(err); - } - var i; - var examples = []; - var current_section = ""; - var example_number = 0; - var tests = data - .replace(/\r\n?/g, "\n") // Normalize newlines for platform independence - .replace(/^(.|[\n])*/m, ''); - - tests.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/gm, - function(_, markdownSubmatch, htmlSubmatch, sectionSubmatch){ - if (sectionSubmatch) { - current_section = sectionSubmatch; - } else { - example_number++; - examples.push({markdown: markdownSubmatch, - html: htmlSubmatch, - section: current_section, - number: example_number}); - } - }); - - current_section = ""; - - console.time("Elapsed time"); - - for (i = 0; i < examples.length; i++) { - var example = examples[i]; - if (example.section !== current_section) { - if (current_section !== '') { +var pathologicalTest = function(testcase, results) { + cursor.write(testcase.name + ' '); + console.time(' elapsed time'); + var actual = writer.render(reader.parse(testcase.input)); + if (actual === testcase.expected) { + cursor.green().write('✓\n').reset(); + results.passed += 1; + } else { + cursor.red().write('✘\n'); + cursor.cyan(); + cursor.write('=== markdown ===============\n'); + cursor.write(showSpaces(testcase.input)); + cursor.write('=== expected ===============\n'); + cursor.write(showSpaces(testcase.expected)); + cursor.write('=== got ====================\n'); + cursor.write(showSpaces(actual)); cursor.write('\n'); - } - current_section = example.section; - cursor.reset().write(current_section).reset().write(' '); + cursor.reset(); + results.failed += 1; } - var actual = writer.render(reader.parse(example.markdown.replace(/→/g, '\t'))); - if (actual === example.html) { - passed++; - cursor.green().write('✓').reset(); - } else { - failed++; - cursor.write('\n'); - - cursor.red().write('✘ Example ' + example.number + '\n'); - cursor.cyan(); - cursor.write('=== markdown ===============\n'); - cursor.write(showSpaces(example.markdown)); - cursor.write('=== expected ===============\n'); - cursor.write(showSpaces(example.html)); - cursor.write('=== got ====================\n'); - cursor.write(showSpaces(actual)); - cursor.reset(); + console.timeEnd(' elapsed time'); +}; + +fs.readFile('spec.txt', 'utf8', function(err, data) { + if (err) { + return console.log(err); + } + var i; + var examples = []; + var current_section = ""; + var example_number = 0; + var tests = data + .replace(/\r\n?/g, "\n") // Normalize newlines for platform independence + .replace(/^(.|[\n])*/m, ''); + + tests.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/gm, + function(_, markdownSubmatch, htmlSubmatch, sectionSubmatch){ + if (sectionSubmatch) { + current_section = sectionSubmatch; + } else { + example_number++; + examples.push({markdown: markdownSubmatch, + html: htmlSubmatch, + section: current_section, + number: example_number}); + } + }); + + current_section = ""; + + cursor.write('Spec tests:\n\n'); + console.time("Elapsed time"); + + for (i = 0; i < examples.length; i++) { + var example = examples[i]; + if (example.section !== current_section) { + if (current_section !== '') { + cursor.write('\n'); + } + current_section = example.section; + cursor.reset().write(current_section).reset().write(' '); + } + var actual = writer.render(reader.parse(example.markdown.replace(/→/g, '\t'))); + if (actual === example.html) { + results.passed++; + cursor.green().write('✓').reset(); + } else { + results.failed++; + cursor.write('\n'); + + cursor.red().write('✘ Example ' + example.number + '\n'); + cursor.cyan(); + cursor.write('=== markdown ===============\n'); + cursor.write(showSpaces(example.markdown)); + cursor.write('=== expected ===============\n'); + cursor.write(showSpaces(example.html)); + cursor.write('=== got ====================\n'); + cursor.write(showSpaces(actual)); + cursor.reset(); + } } - } - cursor.write('\n' + passed.toString() + ' tests passed, ' + - failed.toString() + ' failed.\n'); + cursor.write('\n'); + console.timeEnd("Elapsed time"); +/* + // pathological cases + cursor.write('\nPathological cases:\n'); - console.timeEnd("Elapsed time"); + var cases = [ + { name: 'U+0000 in input', + input: 'abc\u0000xyz\u0000\n', + expected: '

                          abc\ufffdxyz\ufffd

                          \n' }, + { name: 'nested strong emph 10000 deep', + input: repeat('*a **a ', 10000) + 'b' + repeat(' a** a*', 10000), + expected: '

                          ' + repeat('a a ', 10000) + 'b' + + repeat(' a a', 10000) + '

                          \n' }, + { name: 'nested brackets 10000 deep', + input: repeat('[', 10000) + 'a' + repeat(']', 10000), + expected: '

                          ' + repeat('[', 10000) + 'a' + repeat(']', 10000) + + '

                          \n' }, + ]; + + for (var i = 0; i < cases.length; i++) { + pathologicalTest(cases[i], results); + } + cursor.write('\n'); +*/ + cursor.write('\n' + results.passed.toString() + ' tests passed, ' + + results.failed.toString() + ' failed.\n'); }); -- cgit 0.0.5-2-1-g0f52 From 151903307c6d0545d0e747174519eda70b846ce1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 21:45:49 -0800 Subject: Added pathological tests to test.js. The nested brackets test reveals some issue there. --- js/test.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/js/test.js b/js/test.js index 49a5a68fa6..b231b21c70 100755 --- a/js/test.js +++ b/js/test.js @@ -134,7 +134,7 @@ fs.readFile('spec.txt', 'utf8', function(err, data) { } cursor.write('\n'); console.timeEnd("Elapsed time"); -/* + // pathological cases cursor.write('\nPathological cases:\n'); @@ -150,13 +150,17 @@ fs.readFile('spec.txt', 'utf8', function(err, data) { input: repeat('[', 10000) + 'a' + repeat(']', 10000), expected: '

                          ' + repeat('[', 10000) + 'a' + repeat(']', 10000) + '

                          \n' }, + { name: 'nested block quote 10000 deep', + input: repeat('> ', 10000) + 'a\n', + expected: repeat('
                          \n', 10000) + '

                          a

                          \n' + + repeat('
                          \n', 10000) } ]; for (var i = 0; i < cases.length; i++) { pathologicalTest(cases[i], results); } cursor.write('\n'); -*/ - cursor.write('\n' + results.passed.toString() + ' tests passed, ' + + + cursor.write(results.passed.toString() + ' tests passed, ' + results.failed.toString() + ' failed.\n'); }); -- cgit 0.0.5-2-1-g0f52 From 39537f3f2a5969f607f5efc8b77668248adf38f3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 21:53:55 -0800 Subject: Fixed minor linter issues. --- js/test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/test.js b/js/test.js index b231b21c70..3f1b6ff54d 100755 --- a/js/test.js +++ b/js/test.js @@ -21,7 +21,8 @@ var repeat = function(pattern, count) { if (count & 1) { result += pattern; } - count >>= 1, pattern += pattern; + count >>= 1; + pattern += pattern; } return result + pattern; }; @@ -156,7 +157,7 @@ fs.readFile('spec.txt', 'utf8', function(err, data) { repeat('\n', 10000) } ]; - for (var i = 0; i < cases.length; i++) { + for (i = 0; i < cases.length; i++) { pathologicalTest(cases[i], results); } cursor.write('\n'); -- cgit 0.0.5-2-1-g0f52 From 16d7d3df1cbf0880416d2eaa610d72bb06f5da56 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 22:10:33 -0800 Subject: Slightly more efficient test for lazy continuation. --- js/lib/blocks.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index cb4bd5fb76..590852af28 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -481,8 +481,7 @@ var incorporateLine = function(ln) { indent = first_nonspace - offset; // First check for a lazy paragraph continuation: - if (this.tip !== this.lastMatchedContainer && - !blank && + if (!allClosed && !blank && this.tip.t === 'Paragraph' && this.tip.strings.length > 0) { // lazy paragraph continuation -- cgit 0.0.5-2-1-g0f52 From 91da031d281cdee23e90d1edb214a5ed51a0cb72 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 22:35:27 -0800 Subject: Updated changelog. --- changelog.spec.txt | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/changelog.spec.txt b/changelog.spec.txt index f1477bb35a..1926fa70b3 100644 --- a/changelog.spec.txt +++ b/changelog.spec.txt @@ -1,3 +1,35 @@ +[0.16] + + * Rewrote beginning of Entities section, clarifying that only + entities not in code blocks or spans are decoded. + * Removed defective Example 449 (#284). + * Fixed typo (#283). + * Added intended two-space hard-breaks in Examples 521, 523. + * Clarified that brackets in general don't take precedence over emph + (#258). + * Clarified that final newline is removed from paragraph content + (#176). + * Talk of "info string" rather than "attributes" for code blocks + (#262). + * Clarified precedence of code spans, HTML tags, autolinks (#259). + * Fixed a number of internal links and duplicate references in the spec. + * Linkify "info string" in spec. + * Use shortcut reference links when possible in spec.txt. + * cmark itself is now used to build spec.html, rather than pandoc. + * Use shortcut reference links when possible in spec.txt. This + relies on the new `spec2md.py` behavior of creating references + for all internal anchors. + * Moved some examples from block to inline HTML section. + * Added examples of non-comments (#264). + * Changed rule for comments to conform to HTML5 spec. + * Made clear that any sequence of characters is a valid document + (#266). + * Changed wording: "is preferred" -> "takes precedence." + * Regularized spelling of "non-space character" and added links + (#260). + * Use four spaces rather than five to show "four spaces is too much" + (#261). + [0.15] * Fixed some typos with "left-" and "right-flanking" delimiters in the -- cgit 0.0.5-2-1-g0f52 From c4bd8dcb41cfa4b5444caec9304b0abcc07fec35 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 22:35:38 -0800 Subject: Bump spec version to 0.16. --- spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec.txt b/spec.txt index db67b89643..42a0aca9d0 100644 --- a/spec.txt +++ b/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.15 -date: 2014-12-31 +version: 0.16 +date: 2015-01-14 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 539abb59e890834636dfe57ebb499f4eb5cc4e8d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Jan 2015 22:59:06 -0800 Subject: Added changelog.c.txt and js/changelog.js.txt. --- changelog.c.txt | 17 +++++++++++++++++ js/changelog.js.txt | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 changelog.c.txt create mode 100644 js/changelog.js.txt diff --git a/changelog.c.txt b/changelog.c.txt new file mode 100644 index 0000000000..03917b1db1 --- /dev/null +++ b/changelog.c.txt @@ -0,0 +1,17 @@ +[0.16] + + * Added xml renderer (XML representation of the CommonMark AST, + which is described in `CommonMark.dtd`). + * Reduced size of gperf entity table (Nick Wellnhofer). + * Reworked iterators to allow deletion of nodes during iteration + (Nick Wellnhofer). + * Optimized `S_is_leaf`. + * Added `cmark_iter_reset` to iterator API. + * Added `cmark_consolidate_text_nodes` to API to combine adjacent + text nodes. + * Added `CMARK_OPT_NORMALIZE` to options (this combines adjacent + text nodes). + * Added `--normalize` option to command-line program. + * Improved regex for HTML comments in inline parsing. + * Python is no longer required for a basic build from the + repository. diff --git a/js/changelog.js.txt b/js/changelog.js.txt new file mode 100644 index 0000000000..e9297840d6 --- /dev/null +++ b/js/changelog.js.txt @@ -0,0 +1,38 @@ +[0.16] + + * Improved regex for HTML comments (#263). + * Fixed CDATA regex (#267). + * Use linked list instead of arrays in AST: the same doubly linked + node structure as cmark uses. This simplifies some code and + eliminates the need for recursive algorithms, so we can render + deeply-nested structures without stack overflows. + * Use `children` instead of `label` (in Image and Link), + `inline_content` (in Paragraph), and `c` (in Emph and Strong). + * Renamed the `c` property to `literal` to match `libcmark`. + * Use `literal` rather than `string_content` property for code + blocks, HTML. `string_content` is reserved for raw string + content that has yet to be parsed as inlines. + * Improved end lines (#276). + * Added a node walker, for easy AST traversal (see `node.js`). + * Regularized position information into a `sourcepos` property. + Added end column information. + * Renamed `html-renderer.js` to `html.js`. + * Replace NUL characters with U+FFFD, as per spec. + * Optimized code, resulting in significant performance gains. + (We've gone from being twice as fast as showdown.js to being + three times as fast, on par with marked.) + * Made `tight` a property of `list_data` rather than `Node`. + * Added options to renderer, parser objections. + * Added a `--sourcepos` command line option to `js/bin/commonmark`. + * HTML renderer now throws an error on unknown tag type (which + indicates a programming error). + * Removed `ansi.js` code from the source tree. The test suite now + uses its own mini ansi colors implementation. + * Added `--time` option to `js/bin/commonmark`. + * Added an XML renderer (XML representation of the AST, matching + `Commonmark.dtd`). + * Changed `url` property to `destination` to match `cmark` and spec. + * Added `js/common.js` to hold some common code, like string + unescaping and URI normalization. + * Use `decodeURI` instead of `unescape`. + * Added some "pathological" test cases to test suite. -- cgit 0.0.5-2-1-g0f52 From c637f8d6d57aa197d57579dc8f87023be635e8ad Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 07:28:17 -0800 Subject: Bump package.json version to 0.16.0. --- js/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/package.json b/js/package.json index 6040f51ce7..97228b2e3a 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "commonmark", "description": "a strongly specified, highly compatible variant of Markdown", - "version": "0.15.0", + "version": "0.16.0", "homepage": "http://commonmark.org", "keywords": [ "markdown", -- cgit 0.0.5-2-1-g0f52 From 013294b384ab6dec0320f4c2ce6aa7a810b1630a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 09:34:01 -0800 Subject: Added normalize-reference.js. This does a proper unicode case fold instead of just using toUpperCase. It is also faster, partly because we can do one pass for space and case normalization. Modified from the NPM package fold-case; proper credit given in source and COPYING. --- COPYING | 26 ++++++++++++++++++++++++++ js/lib/inlines.js | 10 ++-------- js/lib/normalize-reference.js | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 js/lib/normalize-reference.js diff --git a/COPYING b/COPYING index 4bd949681b..0bb344572f 100644 --- a/COPYING +++ b/COPYING @@ -108,6 +108,32 @@ DEALINGS IN THE SOFTWARE. ----- +normalize-reference.js is a slightly modified version of +https://github.com/dmoscrop/fold-case: + +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + The polyfill for String.fromCodePoint included in commonmark.js is Copyright Mathias Bynens diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 46e4644540..8bd70c2248 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -2,6 +2,8 @@ var Node = require('./node'); var common = require('./common'); +var normalizeReference = require('./normalize-reference'); + var normalizeURI = common.normalizeURI; var unescapeString = common.unescapeString; var fromCodePoint = require('./from-code-point.js'); @@ -92,14 +94,6 @@ var reLinkLabel = /^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/; // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_]+/m; -// Normalize reference label: collapse internal whitespace -// to single space, remove leading/trailing whitespace, case fold. -var normalizeReference = function(s) { - return s.trim() - .replace(/\s+/, ' ') - .toUpperCase(); -}; - var text = function(s) { var node = new Node('Text'); node.literal = s; diff --git a/js/lib/normalize-reference.js b/js/lib/normalize-reference.js new file mode 100644 index 0000000000..8ecc07cb47 --- /dev/null +++ b/js/lib/normalize-reference.js @@ -0,0 +1,40 @@ +/* The bulk of this code derives from https://github.com/dmoscrop/fold-case +But in addition to case-folding, we also normalize whitespace. + +fold-case is Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +var regex = /[ \t\r\n]+|[A-Z\xB5\xC0-\xD6\xD8-\xDF\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u0149\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u017F\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C5\u01C7\u01C8\u01CA\u01CB\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F0-\u01F2\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0345\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03AB\u03B0\u03C2\u03CF-\u03D1\u03D5\u03D6\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F0\u03F1\u03F4\u03F5\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u0587\u10A0-\u10C5\u10C7\u10CD\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E96-\u1E9B\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F50\u1F52\u1F54\u1F56\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1F80-\u1FAF\u1FB2-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD2\u1FD3\u1FD6-\u1FDB\u1FE2-\u1FE4\u1FE6-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u2132\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0\uA7B1\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A]|\uD801[\uDC00-\uDC27]|\uD806[\uDCA0-\uDCBF]/g; + +var map = {'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g','H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n','O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u','V':'v','W':'w','X':'x','Y':'y','Z':'z','\xB5':'\u03BC','\xC0':'\xE0','\xC1':'\xE1','\xC2':'\xE2','\xC3':'\xE3','\xC4':'\xE4','\xC5':'\xE5','\xC6':'\xE6','\xC7':'\xE7','\xC8':'\xE8','\xC9':'\xE9','\xCA':'\xEA','\xCB':'\xEB','\xCC':'\xEC','\xCD':'\xED','\xCE':'\xEE','\xCF':'\xEF','\xD0':'\xF0','\xD1':'\xF1','\xD2':'\xF2','\xD3':'\xF3','\xD4':'\xF4','\xD5':'\xF5','\xD6':'\xF6','\xD8':'\xF8','\xD9':'\xF9','\xDA':'\xFA','\xDB':'\xFB','\xDC':'\xFC','\xDD':'\xFD','\xDE':'\xFE','\u0100':'\u0101','\u0102':'\u0103','\u0104':'\u0105','\u0106':'\u0107','\u0108':'\u0109','\u010A':'\u010B','\u010C':'\u010D','\u010E':'\u010F','\u0110':'\u0111','\u0112':'\u0113','\u0114':'\u0115','\u0116':'\u0117','\u0118':'\u0119','\u011A':'\u011B','\u011C':'\u011D','\u011E':'\u011F','\u0120':'\u0121','\u0122':'\u0123','\u0124':'\u0125','\u0126':'\u0127','\u0128':'\u0129','\u012A':'\u012B','\u012C':'\u012D','\u012E':'\u012F','\u0132':'\u0133','\u0134':'\u0135','\u0136':'\u0137','\u0139':'\u013A','\u013B':'\u013C','\u013D':'\u013E','\u013F':'\u0140','\u0141':'\u0142','\u0143':'\u0144','\u0145':'\u0146','\u0147':'\u0148','\u014A':'\u014B','\u014C':'\u014D','\u014E':'\u014F','\u0150':'\u0151','\u0152':'\u0153','\u0154':'\u0155','\u0156':'\u0157','\u0158':'\u0159','\u015A':'\u015B','\u015C':'\u015D','\u015E':'\u015F','\u0160':'\u0161','\u0162':'\u0163','\u0164':'\u0165','\u0166':'\u0167','\u0168':'\u0169','\u016A':'\u016B','\u016C':'\u016D','\u016E':'\u016F','\u0170':'\u0171','\u0172':'\u0173','\u0174':'\u0175','\u0176':'\u0177','\u0178':'\xFF','\u0179':'\u017A','\u017B':'\u017C','\u017D':'\u017E','\u017F':'s','\u0181':'\u0253','\u0182':'\u0183','\u0184':'\u0185','\u0186':'\u0254','\u0187':'\u0188','\u0189':'\u0256','\u018A':'\u0257','\u018B':'\u018C','\u018E':'\u01DD','\u018F':'\u0259','\u0190':'\u025B','\u0191':'\u0192','\u0193':'\u0260','\u0194':'\u0263','\u0196':'\u0269','\u0197':'\u0268','\u0198':'\u0199','\u019C':'\u026F','\u019D':'\u0272','\u019F':'\u0275','\u01A0':'\u01A1','\u01A2':'\u01A3','\u01A4':'\u01A5','\u01A6':'\u0280','\u01A7':'\u01A8','\u01A9':'\u0283','\u01AC':'\u01AD','\u01AE':'\u0288','\u01AF':'\u01B0','\u01B1':'\u028A','\u01B2':'\u028B','\u01B3':'\u01B4','\u01B5':'\u01B6','\u01B7':'\u0292','\u01B8':'\u01B9','\u01BC':'\u01BD','\u01C4':'\u01C6','\u01C5':'\u01C6','\u01C7':'\u01C9','\u01C8':'\u01C9','\u01CA':'\u01CC','\u01CB':'\u01CC','\u01CD':'\u01CE','\u01CF':'\u01D0','\u01D1':'\u01D2','\u01D3':'\u01D4','\u01D5':'\u01D6','\u01D7':'\u01D8','\u01D9':'\u01DA','\u01DB':'\u01DC','\u01DE':'\u01DF','\u01E0':'\u01E1','\u01E2':'\u01E3','\u01E4':'\u01E5','\u01E6':'\u01E7','\u01E8':'\u01E9','\u01EA':'\u01EB','\u01EC':'\u01ED','\u01EE':'\u01EF','\u01F1':'\u01F3','\u01F2':'\u01F3','\u01F4':'\u01F5','\u01F6':'\u0195','\u01F7':'\u01BF','\u01F8':'\u01F9','\u01FA':'\u01FB','\u01FC':'\u01FD','\u01FE':'\u01FF','\u0200':'\u0201','\u0202':'\u0203','\u0204':'\u0205','\u0206':'\u0207','\u0208':'\u0209','\u020A':'\u020B','\u020C':'\u020D','\u020E':'\u020F','\u0210':'\u0211','\u0212':'\u0213','\u0214':'\u0215','\u0216':'\u0217','\u0218':'\u0219','\u021A':'\u021B','\u021C':'\u021D','\u021E':'\u021F','\u0220':'\u019E','\u0222':'\u0223','\u0224':'\u0225','\u0226':'\u0227','\u0228':'\u0229','\u022A':'\u022B','\u022C':'\u022D','\u022E':'\u022F','\u0230':'\u0231','\u0232':'\u0233','\u023A':'\u2C65','\u023B':'\u023C','\u023D':'\u019A','\u023E':'\u2C66','\u0241':'\u0242','\u0243':'\u0180','\u0244':'\u0289','\u0245':'\u028C','\u0246':'\u0247','\u0248':'\u0249','\u024A':'\u024B','\u024C':'\u024D','\u024E':'\u024F','\u0345':'\u03B9','\u0370':'\u0371','\u0372':'\u0373','\u0376':'\u0377','\u037F':'\u03F3','\u0386':'\u03AC','\u0388':'\u03AD','\u0389':'\u03AE','\u038A':'\u03AF','\u038C':'\u03CC','\u038E':'\u03CD','\u038F':'\u03CE','\u0391':'\u03B1','\u0392':'\u03B2','\u0393':'\u03B3','\u0394':'\u03B4','\u0395':'\u03B5','\u0396':'\u03B6','\u0397':'\u03B7','\u0398':'\u03B8','\u0399':'\u03B9','\u039A':'\u03BA','\u039B':'\u03BB','\u039C':'\u03BC','\u039D':'\u03BD','\u039E':'\u03BE','\u039F':'\u03BF','\u03A0':'\u03C0','\u03A1':'\u03C1','\u03A3':'\u03C3','\u03A4':'\u03C4','\u03A5':'\u03C5','\u03A6':'\u03C6','\u03A7':'\u03C7','\u03A8':'\u03C8','\u03A9':'\u03C9','\u03AA':'\u03CA','\u03AB':'\u03CB','\u03C2':'\u03C3','\u03CF':'\u03D7','\u03D0':'\u03B2','\u03D1':'\u03B8','\u03D5':'\u03C6','\u03D6':'\u03C0','\u03D8':'\u03D9','\u03DA':'\u03DB','\u03DC':'\u03DD','\u03DE':'\u03DF','\u03E0':'\u03E1','\u03E2':'\u03E3','\u03E4':'\u03E5','\u03E6':'\u03E7','\u03E8':'\u03E9','\u03EA':'\u03EB','\u03EC':'\u03ED','\u03EE':'\u03EF','\u03F0':'\u03BA','\u03F1':'\u03C1','\u03F4':'\u03B8','\u03F5':'\u03B5','\u03F7':'\u03F8','\u03F9':'\u03F2','\u03FA':'\u03FB','\u03FD':'\u037B','\u03FE':'\u037C','\u03FF':'\u037D','\u0400':'\u0450','\u0401':'\u0451','\u0402':'\u0452','\u0403':'\u0453','\u0404':'\u0454','\u0405':'\u0455','\u0406':'\u0456','\u0407':'\u0457','\u0408':'\u0458','\u0409':'\u0459','\u040A':'\u045A','\u040B':'\u045B','\u040C':'\u045C','\u040D':'\u045D','\u040E':'\u045E','\u040F':'\u045F','\u0410':'\u0430','\u0411':'\u0431','\u0412':'\u0432','\u0413':'\u0433','\u0414':'\u0434','\u0415':'\u0435','\u0416':'\u0436','\u0417':'\u0437','\u0418':'\u0438','\u0419':'\u0439','\u041A':'\u043A','\u041B':'\u043B','\u041C':'\u043C','\u041D':'\u043D','\u041E':'\u043E','\u041F':'\u043F','\u0420':'\u0440','\u0421':'\u0441','\u0422':'\u0442','\u0423':'\u0443','\u0424':'\u0444','\u0425':'\u0445','\u0426':'\u0446','\u0427':'\u0447','\u0428':'\u0448','\u0429':'\u0449','\u042A':'\u044A','\u042B':'\u044B','\u042C':'\u044C','\u042D':'\u044D','\u042E':'\u044E','\u042F':'\u044F','\u0460':'\u0461','\u0462':'\u0463','\u0464':'\u0465','\u0466':'\u0467','\u0468':'\u0469','\u046A':'\u046B','\u046C':'\u046D','\u046E':'\u046F','\u0470':'\u0471','\u0472':'\u0473','\u0474':'\u0475','\u0476':'\u0477','\u0478':'\u0479','\u047A':'\u047B','\u047C':'\u047D','\u047E':'\u047F','\u0480':'\u0481','\u048A':'\u048B','\u048C':'\u048D','\u048E':'\u048F','\u0490':'\u0491','\u0492':'\u0493','\u0494':'\u0495','\u0496':'\u0497','\u0498':'\u0499','\u049A':'\u049B','\u049C':'\u049D','\u049E':'\u049F','\u04A0':'\u04A1','\u04A2':'\u04A3','\u04A4':'\u04A5','\u04A6':'\u04A7','\u04A8':'\u04A9','\u04AA':'\u04AB','\u04AC':'\u04AD','\u04AE':'\u04AF','\u04B0':'\u04B1','\u04B2':'\u04B3','\u04B4':'\u04B5','\u04B6':'\u04B7','\u04B8':'\u04B9','\u04BA':'\u04BB','\u04BC':'\u04BD','\u04BE':'\u04BF','\u04C0':'\u04CF','\u04C1':'\u04C2','\u04C3':'\u04C4','\u04C5':'\u04C6','\u04C7':'\u04C8','\u04C9':'\u04CA','\u04CB':'\u04CC','\u04CD':'\u04CE','\u04D0':'\u04D1','\u04D2':'\u04D3','\u04D4':'\u04D5','\u04D6':'\u04D7','\u04D8':'\u04D9','\u04DA':'\u04DB','\u04DC':'\u04DD','\u04DE':'\u04DF','\u04E0':'\u04E1','\u04E2':'\u04E3','\u04E4':'\u04E5','\u04E6':'\u04E7','\u04E8':'\u04E9','\u04EA':'\u04EB','\u04EC':'\u04ED','\u04EE':'\u04EF','\u04F0':'\u04F1','\u04F2':'\u04F3','\u04F4':'\u04F5','\u04F6':'\u04F7','\u04F8':'\u04F9','\u04FA':'\u04FB','\u04FC':'\u04FD','\u04FE':'\u04FF','\u0500':'\u0501','\u0502':'\u0503','\u0504':'\u0505','\u0506':'\u0507','\u0508':'\u0509','\u050A':'\u050B','\u050C':'\u050D','\u050E':'\u050F','\u0510':'\u0511','\u0512':'\u0513','\u0514':'\u0515','\u0516':'\u0517','\u0518':'\u0519','\u051A':'\u051B','\u051C':'\u051D','\u051E':'\u051F','\u0520':'\u0521','\u0522':'\u0523','\u0524':'\u0525','\u0526':'\u0527','\u0528':'\u0529','\u052A':'\u052B','\u052C':'\u052D','\u052E':'\u052F','\u0531':'\u0561','\u0532':'\u0562','\u0533':'\u0563','\u0534':'\u0564','\u0535':'\u0565','\u0536':'\u0566','\u0537':'\u0567','\u0538':'\u0568','\u0539':'\u0569','\u053A':'\u056A','\u053B':'\u056B','\u053C':'\u056C','\u053D':'\u056D','\u053E':'\u056E','\u053F':'\u056F','\u0540':'\u0570','\u0541':'\u0571','\u0542':'\u0572','\u0543':'\u0573','\u0544':'\u0574','\u0545':'\u0575','\u0546':'\u0576','\u0547':'\u0577','\u0548':'\u0578','\u0549':'\u0579','\u054A':'\u057A','\u054B':'\u057B','\u054C':'\u057C','\u054D':'\u057D','\u054E':'\u057E','\u054F':'\u057F','\u0550':'\u0580','\u0551':'\u0581','\u0552':'\u0582','\u0553':'\u0583','\u0554':'\u0584','\u0555':'\u0585','\u0556':'\u0586','\u10A0':'\u2D00','\u10A1':'\u2D01','\u10A2':'\u2D02','\u10A3':'\u2D03','\u10A4':'\u2D04','\u10A5':'\u2D05','\u10A6':'\u2D06','\u10A7':'\u2D07','\u10A8':'\u2D08','\u10A9':'\u2D09','\u10AA':'\u2D0A','\u10AB':'\u2D0B','\u10AC':'\u2D0C','\u10AD':'\u2D0D','\u10AE':'\u2D0E','\u10AF':'\u2D0F','\u10B0':'\u2D10','\u10B1':'\u2D11','\u10B2':'\u2D12','\u10B3':'\u2D13','\u10B4':'\u2D14','\u10B5':'\u2D15','\u10B6':'\u2D16','\u10B7':'\u2D17','\u10B8':'\u2D18','\u10B9':'\u2D19','\u10BA':'\u2D1A','\u10BB':'\u2D1B','\u10BC':'\u2D1C','\u10BD':'\u2D1D','\u10BE':'\u2D1E','\u10BF':'\u2D1F','\u10C0':'\u2D20','\u10C1':'\u2D21','\u10C2':'\u2D22','\u10C3':'\u2D23','\u10C4':'\u2D24','\u10C5':'\u2D25','\u10C7':'\u2D27','\u10CD':'\u2D2D','\u1E00':'\u1E01','\u1E02':'\u1E03','\u1E04':'\u1E05','\u1E06':'\u1E07','\u1E08':'\u1E09','\u1E0A':'\u1E0B','\u1E0C':'\u1E0D','\u1E0E':'\u1E0F','\u1E10':'\u1E11','\u1E12':'\u1E13','\u1E14':'\u1E15','\u1E16':'\u1E17','\u1E18':'\u1E19','\u1E1A':'\u1E1B','\u1E1C':'\u1E1D','\u1E1E':'\u1E1F','\u1E20':'\u1E21','\u1E22':'\u1E23','\u1E24':'\u1E25','\u1E26':'\u1E27','\u1E28':'\u1E29','\u1E2A':'\u1E2B','\u1E2C':'\u1E2D','\u1E2E':'\u1E2F','\u1E30':'\u1E31','\u1E32':'\u1E33','\u1E34':'\u1E35','\u1E36':'\u1E37','\u1E38':'\u1E39','\u1E3A':'\u1E3B','\u1E3C':'\u1E3D','\u1E3E':'\u1E3F','\u1E40':'\u1E41','\u1E42':'\u1E43','\u1E44':'\u1E45','\u1E46':'\u1E47','\u1E48':'\u1E49','\u1E4A':'\u1E4B','\u1E4C':'\u1E4D','\u1E4E':'\u1E4F','\u1E50':'\u1E51','\u1E52':'\u1E53','\u1E54':'\u1E55','\u1E56':'\u1E57','\u1E58':'\u1E59','\u1E5A':'\u1E5B','\u1E5C':'\u1E5D','\u1E5E':'\u1E5F','\u1E60':'\u1E61','\u1E62':'\u1E63','\u1E64':'\u1E65','\u1E66':'\u1E67','\u1E68':'\u1E69','\u1E6A':'\u1E6B','\u1E6C':'\u1E6D','\u1E6E':'\u1E6F','\u1E70':'\u1E71','\u1E72':'\u1E73','\u1E74':'\u1E75','\u1E76':'\u1E77','\u1E78':'\u1E79','\u1E7A':'\u1E7B','\u1E7C':'\u1E7D','\u1E7E':'\u1E7F','\u1E80':'\u1E81','\u1E82':'\u1E83','\u1E84':'\u1E85','\u1E86':'\u1E87','\u1E88':'\u1E89','\u1E8A':'\u1E8B','\u1E8C':'\u1E8D','\u1E8E':'\u1E8F','\u1E90':'\u1E91','\u1E92':'\u1E93','\u1E94':'\u1E95','\u1E9B':'\u1E61','\u1EA0':'\u1EA1','\u1EA2':'\u1EA3','\u1EA4':'\u1EA5','\u1EA6':'\u1EA7','\u1EA8':'\u1EA9','\u1EAA':'\u1EAB','\u1EAC':'\u1EAD','\u1EAE':'\u1EAF','\u1EB0':'\u1EB1','\u1EB2':'\u1EB3','\u1EB4':'\u1EB5','\u1EB6':'\u1EB7','\u1EB8':'\u1EB9','\u1EBA':'\u1EBB','\u1EBC':'\u1EBD','\u1EBE':'\u1EBF','\u1EC0':'\u1EC1','\u1EC2':'\u1EC3','\u1EC4':'\u1EC5','\u1EC6':'\u1EC7','\u1EC8':'\u1EC9','\u1ECA':'\u1ECB','\u1ECC':'\u1ECD','\u1ECE':'\u1ECF','\u1ED0':'\u1ED1','\u1ED2':'\u1ED3','\u1ED4':'\u1ED5','\u1ED6':'\u1ED7','\u1ED8':'\u1ED9','\u1EDA':'\u1EDB','\u1EDC':'\u1EDD','\u1EDE':'\u1EDF','\u1EE0':'\u1EE1','\u1EE2':'\u1EE3','\u1EE4':'\u1EE5','\u1EE6':'\u1EE7','\u1EE8':'\u1EE9','\u1EEA':'\u1EEB','\u1EEC':'\u1EED','\u1EEE':'\u1EEF','\u1EF0':'\u1EF1','\u1EF2':'\u1EF3','\u1EF4':'\u1EF5','\u1EF6':'\u1EF7','\u1EF8':'\u1EF9','\u1EFA':'\u1EFB','\u1EFC':'\u1EFD','\u1EFE':'\u1EFF','\u1F08':'\u1F00','\u1F09':'\u1F01','\u1F0A':'\u1F02','\u1F0B':'\u1F03','\u1F0C':'\u1F04','\u1F0D':'\u1F05','\u1F0E':'\u1F06','\u1F0F':'\u1F07','\u1F18':'\u1F10','\u1F19':'\u1F11','\u1F1A':'\u1F12','\u1F1B':'\u1F13','\u1F1C':'\u1F14','\u1F1D':'\u1F15','\u1F28':'\u1F20','\u1F29':'\u1F21','\u1F2A':'\u1F22','\u1F2B':'\u1F23','\u1F2C':'\u1F24','\u1F2D':'\u1F25','\u1F2E':'\u1F26','\u1F2F':'\u1F27','\u1F38':'\u1F30','\u1F39':'\u1F31','\u1F3A':'\u1F32','\u1F3B':'\u1F33','\u1F3C':'\u1F34','\u1F3D':'\u1F35','\u1F3E':'\u1F36','\u1F3F':'\u1F37','\u1F48':'\u1F40','\u1F49':'\u1F41','\u1F4A':'\u1F42','\u1F4B':'\u1F43','\u1F4C':'\u1F44','\u1F4D':'\u1F45','\u1F59':'\u1F51','\u1F5B':'\u1F53','\u1F5D':'\u1F55','\u1F5F':'\u1F57','\u1F68':'\u1F60','\u1F69':'\u1F61','\u1F6A':'\u1F62','\u1F6B':'\u1F63','\u1F6C':'\u1F64','\u1F6D':'\u1F65','\u1F6E':'\u1F66','\u1F6F':'\u1F67','\u1FB8':'\u1FB0','\u1FB9':'\u1FB1','\u1FBA':'\u1F70','\u1FBB':'\u1F71','\u1FBE':'\u03B9','\u1FC8':'\u1F72','\u1FC9':'\u1F73','\u1FCA':'\u1F74','\u1FCB':'\u1F75','\u1FD8':'\u1FD0','\u1FD9':'\u1FD1','\u1FDA':'\u1F76','\u1FDB':'\u1F77','\u1FE8':'\u1FE0','\u1FE9':'\u1FE1','\u1FEA':'\u1F7A','\u1FEB':'\u1F7B','\u1FEC':'\u1FE5','\u1FF8':'\u1F78','\u1FF9':'\u1F79','\u1FFA':'\u1F7C','\u1FFB':'\u1F7D','\u2126':'\u03C9','\u212A':'k','\u212B':'\xE5','\u2132':'\u214E','\u2160':'\u2170','\u2161':'\u2171','\u2162':'\u2172','\u2163':'\u2173','\u2164':'\u2174','\u2165':'\u2175','\u2166':'\u2176','\u2167':'\u2177','\u2168':'\u2178','\u2169':'\u2179','\u216A':'\u217A','\u216B':'\u217B','\u216C':'\u217C','\u216D':'\u217D','\u216E':'\u217E','\u216F':'\u217F','\u2183':'\u2184','\u24B6':'\u24D0','\u24B7':'\u24D1','\u24B8':'\u24D2','\u24B9':'\u24D3','\u24BA':'\u24D4','\u24BB':'\u24D5','\u24BC':'\u24D6','\u24BD':'\u24D7','\u24BE':'\u24D8','\u24BF':'\u24D9','\u24C0':'\u24DA','\u24C1':'\u24DB','\u24C2':'\u24DC','\u24C3':'\u24DD','\u24C4':'\u24DE','\u24C5':'\u24DF','\u24C6':'\u24E0','\u24C7':'\u24E1','\u24C8':'\u24E2','\u24C9':'\u24E3','\u24CA':'\u24E4','\u24CB':'\u24E5','\u24CC':'\u24E6','\u24CD':'\u24E7','\u24CE':'\u24E8','\u24CF':'\u24E9','\u2C00':'\u2C30','\u2C01':'\u2C31','\u2C02':'\u2C32','\u2C03':'\u2C33','\u2C04':'\u2C34','\u2C05':'\u2C35','\u2C06':'\u2C36','\u2C07':'\u2C37','\u2C08':'\u2C38','\u2C09':'\u2C39','\u2C0A':'\u2C3A','\u2C0B':'\u2C3B','\u2C0C':'\u2C3C','\u2C0D':'\u2C3D','\u2C0E':'\u2C3E','\u2C0F':'\u2C3F','\u2C10':'\u2C40','\u2C11':'\u2C41','\u2C12':'\u2C42','\u2C13':'\u2C43','\u2C14':'\u2C44','\u2C15':'\u2C45','\u2C16':'\u2C46','\u2C17':'\u2C47','\u2C18':'\u2C48','\u2C19':'\u2C49','\u2C1A':'\u2C4A','\u2C1B':'\u2C4B','\u2C1C':'\u2C4C','\u2C1D':'\u2C4D','\u2C1E':'\u2C4E','\u2C1F':'\u2C4F','\u2C20':'\u2C50','\u2C21':'\u2C51','\u2C22':'\u2C52','\u2C23':'\u2C53','\u2C24':'\u2C54','\u2C25':'\u2C55','\u2C26':'\u2C56','\u2C27':'\u2C57','\u2C28':'\u2C58','\u2C29':'\u2C59','\u2C2A':'\u2C5A','\u2C2B':'\u2C5B','\u2C2C':'\u2C5C','\u2C2D':'\u2C5D','\u2C2E':'\u2C5E','\u2C60':'\u2C61','\u2C62':'\u026B','\u2C63':'\u1D7D','\u2C64':'\u027D','\u2C67':'\u2C68','\u2C69':'\u2C6A','\u2C6B':'\u2C6C','\u2C6D':'\u0251','\u2C6E':'\u0271','\u2C6F':'\u0250','\u2C70':'\u0252','\u2C72':'\u2C73','\u2C75':'\u2C76','\u2C7E':'\u023F','\u2C7F':'\u0240','\u2C80':'\u2C81','\u2C82':'\u2C83','\u2C84':'\u2C85','\u2C86':'\u2C87','\u2C88':'\u2C89','\u2C8A':'\u2C8B','\u2C8C':'\u2C8D','\u2C8E':'\u2C8F','\u2C90':'\u2C91','\u2C92':'\u2C93','\u2C94':'\u2C95','\u2C96':'\u2C97','\u2C98':'\u2C99','\u2C9A':'\u2C9B','\u2C9C':'\u2C9D','\u2C9E':'\u2C9F','\u2CA0':'\u2CA1','\u2CA2':'\u2CA3','\u2CA4':'\u2CA5','\u2CA6':'\u2CA7','\u2CA8':'\u2CA9','\u2CAA':'\u2CAB','\u2CAC':'\u2CAD','\u2CAE':'\u2CAF','\u2CB0':'\u2CB1','\u2CB2':'\u2CB3','\u2CB4':'\u2CB5','\u2CB6':'\u2CB7','\u2CB8':'\u2CB9','\u2CBA':'\u2CBB','\u2CBC':'\u2CBD','\u2CBE':'\u2CBF','\u2CC0':'\u2CC1','\u2CC2':'\u2CC3','\u2CC4':'\u2CC5','\u2CC6':'\u2CC7','\u2CC8':'\u2CC9','\u2CCA':'\u2CCB','\u2CCC':'\u2CCD','\u2CCE':'\u2CCF','\u2CD0':'\u2CD1','\u2CD2':'\u2CD3','\u2CD4':'\u2CD5','\u2CD6':'\u2CD7','\u2CD8':'\u2CD9','\u2CDA':'\u2CDB','\u2CDC':'\u2CDD','\u2CDE':'\u2CDF','\u2CE0':'\u2CE1','\u2CE2':'\u2CE3','\u2CEB':'\u2CEC','\u2CED':'\u2CEE','\u2CF2':'\u2CF3','\uA640':'\uA641','\uA642':'\uA643','\uA644':'\uA645','\uA646':'\uA647','\uA648':'\uA649','\uA64A':'\uA64B','\uA64C':'\uA64D','\uA64E':'\uA64F','\uA650':'\uA651','\uA652':'\uA653','\uA654':'\uA655','\uA656':'\uA657','\uA658':'\uA659','\uA65A':'\uA65B','\uA65C':'\uA65D','\uA65E':'\uA65F','\uA660':'\uA661','\uA662':'\uA663','\uA664':'\uA665','\uA666':'\uA667','\uA668':'\uA669','\uA66A':'\uA66B','\uA66C':'\uA66D','\uA680':'\uA681','\uA682':'\uA683','\uA684':'\uA685','\uA686':'\uA687','\uA688':'\uA689','\uA68A':'\uA68B','\uA68C':'\uA68D','\uA68E':'\uA68F','\uA690':'\uA691','\uA692':'\uA693','\uA694':'\uA695','\uA696':'\uA697','\uA698':'\uA699','\uA69A':'\uA69B','\uA722':'\uA723','\uA724':'\uA725','\uA726':'\uA727','\uA728':'\uA729','\uA72A':'\uA72B','\uA72C':'\uA72D','\uA72E':'\uA72F','\uA732':'\uA733','\uA734':'\uA735','\uA736':'\uA737','\uA738':'\uA739','\uA73A':'\uA73B','\uA73C':'\uA73D','\uA73E':'\uA73F','\uA740':'\uA741','\uA742':'\uA743','\uA744':'\uA745','\uA746':'\uA747','\uA748':'\uA749','\uA74A':'\uA74B','\uA74C':'\uA74D','\uA74E':'\uA74F','\uA750':'\uA751','\uA752':'\uA753','\uA754':'\uA755','\uA756':'\uA757','\uA758':'\uA759','\uA75A':'\uA75B','\uA75C':'\uA75D','\uA75E':'\uA75F','\uA760':'\uA761','\uA762':'\uA763','\uA764':'\uA765','\uA766':'\uA767','\uA768':'\uA769','\uA76A':'\uA76B','\uA76C':'\uA76D','\uA76E':'\uA76F','\uA779':'\uA77A','\uA77B':'\uA77C','\uA77D':'\u1D79','\uA77E':'\uA77F','\uA780':'\uA781','\uA782':'\uA783','\uA784':'\uA785','\uA786':'\uA787','\uA78B':'\uA78C','\uA78D':'\u0265','\uA790':'\uA791','\uA792':'\uA793','\uA796':'\uA797','\uA798':'\uA799','\uA79A':'\uA79B','\uA79C':'\uA79D','\uA79E':'\uA79F','\uA7A0':'\uA7A1','\uA7A2':'\uA7A3','\uA7A4':'\uA7A5','\uA7A6':'\uA7A7','\uA7A8':'\uA7A9','\uA7AA':'\u0266','\uA7AB':'\u025C','\uA7AC':'\u0261','\uA7AD':'\u026C','\uA7B0':'\u029E','\uA7B1':'\u0287','\uFF21':'\uFF41','\uFF22':'\uFF42','\uFF23':'\uFF43','\uFF24':'\uFF44','\uFF25':'\uFF45','\uFF26':'\uFF46','\uFF27':'\uFF47','\uFF28':'\uFF48','\uFF29':'\uFF49','\uFF2A':'\uFF4A','\uFF2B':'\uFF4B','\uFF2C':'\uFF4C','\uFF2D':'\uFF4D','\uFF2E':'\uFF4E','\uFF2F':'\uFF4F','\uFF30':'\uFF50','\uFF31':'\uFF51','\uFF32':'\uFF52','\uFF33':'\uFF53','\uFF34':'\uFF54','\uFF35':'\uFF55','\uFF36':'\uFF56','\uFF37':'\uFF57','\uFF38':'\uFF58','\uFF39':'\uFF59','\uFF3A':'\uFF5A','\uD801\uDC00':'\uD801\uDC28','\uD801\uDC01':'\uD801\uDC29','\uD801\uDC02':'\uD801\uDC2A','\uD801\uDC03':'\uD801\uDC2B','\uD801\uDC04':'\uD801\uDC2C','\uD801\uDC05':'\uD801\uDC2D','\uD801\uDC06':'\uD801\uDC2E','\uD801\uDC07':'\uD801\uDC2F','\uD801\uDC08':'\uD801\uDC30','\uD801\uDC09':'\uD801\uDC31','\uD801\uDC0A':'\uD801\uDC32','\uD801\uDC0B':'\uD801\uDC33','\uD801\uDC0C':'\uD801\uDC34','\uD801\uDC0D':'\uD801\uDC35','\uD801\uDC0E':'\uD801\uDC36','\uD801\uDC0F':'\uD801\uDC37','\uD801\uDC10':'\uD801\uDC38','\uD801\uDC11':'\uD801\uDC39','\uD801\uDC12':'\uD801\uDC3A','\uD801\uDC13':'\uD801\uDC3B','\uD801\uDC14':'\uD801\uDC3C','\uD801\uDC15':'\uD801\uDC3D','\uD801\uDC16':'\uD801\uDC3E','\uD801\uDC17':'\uD801\uDC3F','\uD801\uDC18':'\uD801\uDC40','\uD801\uDC19':'\uD801\uDC41','\uD801\uDC1A':'\uD801\uDC42','\uD801\uDC1B':'\uD801\uDC43','\uD801\uDC1C':'\uD801\uDC44','\uD801\uDC1D':'\uD801\uDC45','\uD801\uDC1E':'\uD801\uDC46','\uD801\uDC1F':'\uD801\uDC47','\uD801\uDC20':'\uD801\uDC48','\uD801\uDC21':'\uD801\uDC49','\uD801\uDC22':'\uD801\uDC4A','\uD801\uDC23':'\uD801\uDC4B','\uD801\uDC24':'\uD801\uDC4C','\uD801\uDC25':'\uD801\uDC4D','\uD801\uDC26':'\uD801\uDC4E','\uD801\uDC27':'\uD801\uDC4F','\uD806\uDCA0':'\uD806\uDCC0','\uD806\uDCA1':'\uD806\uDCC1','\uD806\uDCA2':'\uD806\uDCC2','\uD806\uDCA3':'\uD806\uDCC3','\uD806\uDCA4':'\uD806\uDCC4','\uD806\uDCA5':'\uD806\uDCC5','\uD806\uDCA6':'\uD806\uDCC6','\uD806\uDCA7':'\uD806\uDCC7','\uD806\uDCA8':'\uD806\uDCC8','\uD806\uDCA9':'\uD806\uDCC9','\uD806\uDCAA':'\uD806\uDCCA','\uD806\uDCAB':'\uD806\uDCCB','\uD806\uDCAC':'\uD806\uDCCC','\uD806\uDCAD':'\uD806\uDCCD','\uD806\uDCAE':'\uD806\uDCCE','\uD806\uDCAF':'\uD806\uDCCF','\uD806\uDCB0':'\uD806\uDCD0','\uD806\uDCB1':'\uD806\uDCD1','\uD806\uDCB2':'\uD806\uDCD2','\uD806\uDCB3':'\uD806\uDCD3','\uD806\uDCB4':'\uD806\uDCD4','\uD806\uDCB5':'\uD806\uDCD5','\uD806\uDCB6':'\uD806\uDCD6','\uD806\uDCB7':'\uD806\uDCD7','\uD806\uDCB8':'\uD806\uDCD8','\uD806\uDCB9':'\uD806\uDCD9','\uD806\uDCBA':'\uD806\uDCDA','\uD806\uDCBB':'\uD806\uDCDB','\uD806\uDCBC':'\uD806\uDCDC','\uD806\uDCBD':'\uD806\uDCDD','\uD806\uDCBE':'\uD806\uDCDE','\uD806\uDCBF':'\uD806\uDCDF','\xDF':'ss','\u0130':'i\u0307','\u0149':'\u02BCn','\u01F0':'j\u030C','\u0390':'\u03B9\u0308\u0301','\u03B0':'\u03C5\u0308\u0301','\u0587':'\u0565\u0582','\u1E96':'h\u0331','\u1E97':'t\u0308','\u1E98':'w\u030A','\u1E99':'y\u030A','\u1E9A':'a\u02BE','\u1E9E':'ss','\u1F50':'\u03C5\u0313','\u1F52':'\u03C5\u0313\u0300','\u1F54':'\u03C5\u0313\u0301','\u1F56':'\u03C5\u0313\u0342','\u1F80':'\u1F00\u03B9','\u1F81':'\u1F01\u03B9','\u1F82':'\u1F02\u03B9','\u1F83':'\u1F03\u03B9','\u1F84':'\u1F04\u03B9','\u1F85':'\u1F05\u03B9','\u1F86':'\u1F06\u03B9','\u1F87':'\u1F07\u03B9','\u1F88':'\u1F00\u03B9','\u1F89':'\u1F01\u03B9','\u1F8A':'\u1F02\u03B9','\u1F8B':'\u1F03\u03B9','\u1F8C':'\u1F04\u03B9','\u1F8D':'\u1F05\u03B9','\u1F8E':'\u1F06\u03B9','\u1F8F':'\u1F07\u03B9','\u1F90':'\u1F20\u03B9','\u1F91':'\u1F21\u03B9','\u1F92':'\u1F22\u03B9','\u1F93':'\u1F23\u03B9','\u1F94':'\u1F24\u03B9','\u1F95':'\u1F25\u03B9','\u1F96':'\u1F26\u03B9','\u1F97':'\u1F27\u03B9','\u1F98':'\u1F20\u03B9','\u1F99':'\u1F21\u03B9','\u1F9A':'\u1F22\u03B9','\u1F9B':'\u1F23\u03B9','\u1F9C':'\u1F24\u03B9','\u1F9D':'\u1F25\u03B9','\u1F9E':'\u1F26\u03B9','\u1F9F':'\u1F27\u03B9','\u1FA0':'\u1F60\u03B9','\u1FA1':'\u1F61\u03B9','\u1FA2':'\u1F62\u03B9','\u1FA3':'\u1F63\u03B9','\u1FA4':'\u1F64\u03B9','\u1FA5':'\u1F65\u03B9','\u1FA6':'\u1F66\u03B9','\u1FA7':'\u1F67\u03B9','\u1FA8':'\u1F60\u03B9','\u1FA9':'\u1F61\u03B9','\u1FAA':'\u1F62\u03B9','\u1FAB':'\u1F63\u03B9','\u1FAC':'\u1F64\u03B9','\u1FAD':'\u1F65\u03B9','\u1FAE':'\u1F66\u03B9','\u1FAF':'\u1F67\u03B9','\u1FB2':'\u1F70\u03B9','\u1FB3':'\u03B1\u03B9','\u1FB4':'\u03AC\u03B9','\u1FB6':'\u03B1\u0342','\u1FB7':'\u03B1\u0342\u03B9','\u1FBC':'\u03B1\u03B9','\u1FC2':'\u1F74\u03B9','\u1FC3':'\u03B7\u03B9','\u1FC4':'\u03AE\u03B9','\u1FC6':'\u03B7\u0342','\u1FC7':'\u03B7\u0342\u03B9','\u1FCC':'\u03B7\u03B9','\u1FD2':'\u03B9\u0308\u0300','\u1FD3':'\u03B9\u0308\u0301','\u1FD6':'\u03B9\u0342','\u1FD7':'\u03B9\u0308\u0342','\u1FE2':'\u03C5\u0308\u0300','\u1FE3':'\u03C5\u0308\u0301','\u1FE4':'\u03C1\u0313','\u1FE6':'\u03C5\u0342','\u1FE7':'\u03C5\u0308\u0342','\u1FF2':'\u1F7C\u03B9','\u1FF3':'\u03C9\u03B9','\u1FF4':'\u03CE\u03B9','\u1FF6':'\u03C9\u0342','\u1FF7':'\u03C9\u0342\u03B9','\u1FFC':'\u03C9\u03B9','\uFB00':'ff','\uFB01':'fi','\uFB02':'fl','\uFB03':'ffi','\uFB04':'ffl','\uFB05':'st','\uFB06':'st','\uFB13':'\u0574\u0576','\uFB14':'\u0574\u0565','\uFB15':'\u0574\u056B','\uFB16':'\u057E\u0576','\uFB17':'\u0574\u056D'}; + +var reWhite = /^[ \t\r\n]/; + +// Normalize reference label: collapse internal whitespace +// to single space, remove leading/trailing whitespace, case fold. +module.exports = function(string) { + return string.trim().replace(regex, function($0) { + // Note: there is no need to check `hasOwnProperty($0)` here. + // If character not found in lookup table, it must be whitespace. + return map[$0] || ' '; + }); +}; -- cgit 0.0.5-2-1-g0f52 From 95cc23a396a29d58f8af29f5d03f5f31f494938f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 10:17:32 -0800 Subject: Updated benchmarks. --- benchmarks.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index b9f41999eb..9ee375e901 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -41,7 +41,7 @@ setting the `BENCHINP` environment variable. Implementation | Ops/sec ----------------|--------- -commonmark.js | 557 -showdown.js | 167 -marked.js | 548 -markdown-it | 739 +commonmark.js | 569 +showdown.js | 168 +marked.js | 553 +markdown-it | 736 -- cgit 0.0.5-2-1-g0f52 From a7b27f8ee13f54979d71d961457fc187c9626387 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 11:20:44 -0800 Subject: Removed artificial distinction btw FencedCode, IndentedCode in blocks.js. --- js/lib/blocks.js | 100 +++++++++++++++++++++++++++---------------------------- js/lib/node.js | 2 +- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 590852af28..511acb4226 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -96,8 +96,7 @@ var canContain = function(parent_type, child_type) { // Returns true if block type can accept lines of text. var acceptsLines = function(block_type) { return ( block_type === 'Paragraph' || - block_type === 'IndentedCode' || - block_type === 'FencedCode' ); + block_type === 'CodeBlock' ); }; // Returns true if block ends with a blank line, descending if needed @@ -295,16 +294,6 @@ var incorporateLine = function(ln) { } break; - case 'IndentedCode': - if (indent >= CODE_INDENT) { - offset += CODE_INDENT; - } else if (blank) { - offset = first_nonspace; - } else { - all_matched = false; - } - break; - case 'Header': case 'HorizontalRule': // a header can never container > 1 line, so fail to match: @@ -314,12 +303,22 @@ var incorporateLine = function(ln) { } break; - case 'FencedCode': - // skip optional spaces of fence offset - i = container.fence_offset; - while (i > 0 && ln.charCodeAt(offset) === C_SPACE) { - offset++; - i--; + case 'CodeBlock': + if (container.fence_length > 0) { // fenced + // skip optional spaces of fence offset + i = container.fence_offset; + while (i > 0 && ln.charCodeAt(offset) === C_SPACE) { + offset++; + i--; + } + } else { // indented + if (indent >= CODE_INDENT) { + offset += CODE_INDENT; + } else if (blank) { + offset = first_nonspace; + } else { + all_matched = false; + } } break; @@ -356,8 +355,7 @@ var incorporateLine = function(ln) { // Unless last matched container is a code block, try new container starts, // adding children to the last matched container: - while (container.t !== 'FencedCode' && - container.t !== 'IndentedCode' && + while (container.t !== 'CodeBlock' && container.t !== 'HtmlBlock' && // this is a little performance optimization: matchAt(reMaybeSpecial, ln, offset) !== -1) { @@ -379,7 +377,7 @@ var incorporateLine = function(ln) { offset += CODE_INDENT; allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('IndentedCode', offset); + container = this.addChild('CodeBlock', offset); } break; } @@ -413,7 +411,7 @@ var incorporateLine = function(ln) { // fenced code block var fence_length = match[0].length; allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('FencedCode', first_nonspace); + container = this.addChild('CodeBlock', first_nonspace); container.fence_length = fence_length; container.fence_char = match[0][0]; container.fence_offset = indent; @@ -498,11 +496,12 @@ var incorporateLine = function(ln) { // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. We also don't set last_line_blank // on an empty list item. + var t = container.t; container.last_line_blank = blank && - !(container.t === 'BlockQuote' || - container.t === 'Header' || - container.t === 'FencedCode' || - (container.t === 'Item' && + !(t === 'BlockQuote' || + t === 'Header' || + (t === 'CodeBlock' && container.fence_length > 0) || + (t === 'Item' && !container.firstChild && container.sourcepos[0][0] === this.lineNumber)); @@ -513,20 +512,23 @@ var incorporateLine = function(ln) { } switch (container.t) { - case 'IndentedCode': case 'HtmlBlock': this.addLine(ln, offset); break; - case 'FencedCode': - // check for closing code fence: - match = (indent <= 3 && - ln.charAt(first_nonspace) === container.fence_char && - ln.slice(first_nonspace).match(reClosingCodeFence)); - if (match && match[0].length >= container.fence_length) { - // don't add closing fence to container; instead, close it: - this.finalize(container, this.lineNumber); - } else { + case 'CodeBlock': + if (container.fence_length > 0) { // fenced + // check for closing code fence: + match = (indent <= 3 && + ln.charAt(first_nonspace) === container.fence_char && + ln.slice(first_nonspace).match(reClosingCodeFence)); + if (match && match[0].length >= container.fence_length) { + // don't add closing fence to container; instead, close it: + this.finalize(container, this.lineNumber); + } else { + this.addLine(ln, offset); + } + } else { // indented this.addLine(ln, offset); } break; @@ -589,21 +591,19 @@ var finalize = function(block, lineNumber) { block.literal = block.strings.join('\n'); break; - case 'IndentedCode': - stripFinalBlankLines(block.strings); - block.literal = block.strings.join('\n') + '\n'; - block.t = 'CodeBlock'; - break; - - case 'FencedCode': - // first line becomes info string - block.info = unescapeString(block.strings[0].trim()); - if (block.strings.length === 1) { - block.literal = ''; - } else { - block.literal = block.strings.slice(1).join('\n') + '\n'; + case 'CodeBlock': + if (block.fence_length > 0) { // fenced + // first line becomes info string + block.info = unescapeString(block.strings[0].trim()); + if (block.strings.length === 1) { + block.literal = ''; + } else { + block.literal = block.strings.slice(1).join('\n') + '\n'; + } + } else { // indented + stripFinalBlankLines(block.strings); + block.literal = block.strings.join('\n') + '\n'; } - block.t = 'CodeBlock'; break; case 'List': diff --git a/js/lib/node.js b/js/lib/node.js index 9fc71c75ee..0c5bceec4c 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -80,7 +80,7 @@ var Node = function(nodeType, sourcepos) { this.destination = null; this.title = null; this.fence_char = null; - this.fence_length = null; + this.fence_length = 0; this.fence_offset = null; this.level = null; }; -- cgit 0.0.5-2-1-g0f52 From 8f2f40679dc21e9d878aaed45fe9dc9d404073d0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 11:29:08 -0800 Subject: Added getType(), setType() to node.js. Use these instead of direct property access. This is the first step in a general move towards an API like the one libcmark has. This will allow us to have a stable API that is independent of details of the AST. --- js/lib/blocks.js | 39 ++++++++++++++++++++------------------- js/lib/html.js | 6 +++--- js/lib/inlines.js | 2 +- js/lib/node.js | 8 ++++++++ js/lib/xml.js | 2 +- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 511acb4226..617d60d7fe 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -106,7 +106,8 @@ var endsWithBlankLine = function(block) { if (block.last_line_blank) { return true; } - if (block.t === 'List' || block.t === 'Item') { + var t = block.getType(); + if (t === 'List' || t === 'Item') { block = block.lastChild; } else { break; @@ -123,7 +124,7 @@ var breakOutOfLists = function(block) { var b = block; var last_list = null; do { - if (b.t === 'List') { + if (b.getType() === 'List') { last_list = b; } b = b.parent; @@ -153,7 +154,7 @@ var addLine = function(ln, offset) { // accept children, close and finalize it and try its parent, // and so on til we find a block that can accept children. var addChild = function(tag, offset) { - while (!canContain(this.tip.t, tag)) { + while (!canContain(this.tip.getType(), tag)) { this.finalize(this.tip, this.lineNumber - 1); } @@ -270,7 +271,7 @@ var incorporateLine = function(ln) { } indent = first_nonspace - offset; - switch (container.t) { + switch (container.getType()) { case 'BlockQuote': if (indent <= 3 && ln.charCodeAt(first_nonspace) === C_GREATERTHAN) { offset = first_nonspace + 1; @@ -355,8 +356,8 @@ var incorporateLine = function(ln) { // Unless last matched container is a code block, try new container starts, // adding children to the last matched container: - while (container.t !== 'CodeBlock' && - container.t !== 'HtmlBlock' && + var t = container.getType(); + while (t !== 'CodeBlock' && t !== 'HtmlBlock' && // this is a little performance optimization: matchAt(reMaybeSpecial, ln, offset) !== -1) { @@ -373,7 +374,7 @@ var incorporateLine = function(ln) { if (indent >= CODE_INDENT) { // indented code - if (this.tip.t !== 'Paragraph' && !blank) { + if (this.tip.getType() !== 'Paragraph' && !blank) { offset += CODE_INDENT; allClosed = allClosed || this.closeUnmatchedBlocks(); @@ -425,12 +426,12 @@ var incorporateLine = function(ln) { offset -= indent; // back up so spaces are part of block break; - } else if (container.t === 'Paragraph' && + } else if (container.getType() === 'Paragraph' && container.strings.length === 1 && ((match = ln.slice(offset).match(reSetextHeaderLine)))) { // setext header line allClosed = allClosed || this.closeUnmatchedBlocks(); - container.t = 'Header'; // convert Paragraph to SetextHeader + container.setType('Header'); // convert Paragraph to SetextHeader container.level = match[0][0] === '=' ? 1 : 2; offset = ln.length; break; @@ -448,7 +449,7 @@ var incorporateLine = function(ln) { offset += data.padding; // add the list if needed - if (container.t !== 'List' || + if (container.getType() !== 'List' || !(listsMatch(container.list_data, data))) { container = this.addChild('List', first_nonspace); container.list_data = data; @@ -480,7 +481,7 @@ var incorporateLine = function(ln) { // First check for a lazy paragraph continuation: if (!allClosed && !blank && - this.tip.t === 'Paragraph' && + this.tip.getType() === 'Paragraph' && this.tip.strings.length > 0) { // lazy paragraph continuation @@ -496,7 +497,7 @@ var incorporateLine = function(ln) { // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. We also don't set last_line_blank // on an empty list item. - var t = container.t; + var t = container.getType(); container.last_line_blank = blank && !(t === 'BlockQuote' || t === 'Header' || @@ -511,7 +512,7 @@ var incorporateLine = function(ln) { cont = cont.parent; } - switch (container.t) { + switch (container.getType()) { case 'HtmlBlock': this.addLine(ln, offset); break; @@ -539,7 +540,7 @@ var incorporateLine = function(ln) { break; default: - if (acceptsLines(container.t)) { + if (acceptsLines(container.getType())) { this.addLine(ln, first_nonspace); } else if (blank) { break; @@ -567,7 +568,7 @@ var finalize = function(block, lineNumber) { block.open = false; block.sourcepos[1] = [lineNumber, this.lastLineLength + 1]; - switch (block.t) { + switch (block.getType()) { case 'Paragraph': block.string_content = block.strings.join('\n'); @@ -577,7 +578,7 @@ var finalize = function(block, lineNumber) { this.refmap))) { block.string_content = block.string_content.slice(pos); if (isBlank(block.string_content)) { - block.t = 'ReferenceDef'; + block.setType('ReferenceDef'); break; } } @@ -640,12 +641,12 @@ var finalize = function(block, lineNumber) { // Walk through a block & children recursively, parsing string content // into inline content where appropriate. Returns new object. var processInlines = function(block) { - var node, event; + var node, event, t; var walker = block.walker(); while ((event = walker.next())) { node = event.node; - if (!event.entering && (node.t === 'Paragraph' || - node.t === 'Header')) { + t = node.getType(); + if (!event.entering && (t === 'Paragraph' || t === 'Header')) { this.inlineParser.parse(node, this.refmap); } } diff --git a/js/lib/html.js b/js/lib/html.js index e361fe1837..8e096ddb0f 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -68,7 +68,7 @@ var renderNodes = function(block) { } } - switch (node.t) { + switch (node.getType()) { case 'Text': out(esc(node.literal)); break; @@ -134,7 +134,7 @@ var renderNodes = function(block) { case 'Paragraph': grandparent = node.parent.parent; if (grandparent !== null && - grandparent.t === 'List') { + grandparent.getType() === 'List') { if (grandparent.list_data.tight) { break; } @@ -225,7 +225,7 @@ var renderNodes = function(block) { break; default: - throw "Unknown node type " + node.t; + throw "Unknown node type " + node.getType(); } } diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 8bd70c2248..cfe085f807 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -658,7 +658,7 @@ var parseNewline = function(block) { this.pos += 1; // assume we're at a \n // check previous node for trailing spaces var lastc = block.lastChild; - if (lastc && lastc.t === 'Text') { + if (lastc && lastc.getType() === 'Text') { var sps = reFinalSpace.exec(lastc.literal)[0].length; if (sps > 0) { lastc.literal = lastc.literal.replace(reFinalSpace, ''); diff --git a/js/lib/node.js b/js/lib/node.js index 0c5bceec4c..12bb89e185 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -89,6 +89,14 @@ Node.prototype.isContainer = function() { return isContainer(this); }; +Node.prototype.getType = function() { + return this.t; +} + +Node.prototype.setType = function(newtype) { + this.t = newtype; +} + Node.prototype.appendChild = function(child) { child.unlink(); child.parent = this; diff --git a/js/lib/xml.js b/js/lib/xml.js index ada61f7511..4932e31a56 100644 --- a/js/lib/xml.js +++ b/js/lib/xml.js @@ -72,7 +72,7 @@ var renderNodes = function(block) { while ((event = walker.next())) { entering = event.entering; node = event.node; - nodetype = node.t; + nodetype = node.getType(); if (nodetype === 'ReferenceDef') { continue; -- cgit 0.0.5-2-1-g0f52 From 25a2ec46c0958f06fb93a12e0ca26e8b61acaa2a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 12:35:33 -0800 Subject: Removed vestigial ReferenceDef node type. --- js/lib/blocks.js | 8 +++++--- js/lib/html.js | 4 ---- js/lib/xml.js | 4 ---- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 617d60d7fe..d8c25a1188 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -220,8 +220,9 @@ var listsMatch = function(list_data, item_data) { var closeUnmatchedBlocks = function() { // finalize any blocks not matched while (this.oldtip !== this.lastMatchedContainer) { + var parent = this.oldtip.parent; this.finalize(this.oldtip, this.lineNumber - 1); - this.oldtip = this.oldtip.parent; + this.oldtip = parent; } return true; }; @@ -561,6 +562,7 @@ var incorporateLine = function(ln) { // parent of the closed block. var finalize = function(block, lineNumber) { var pos; + var above = block.parent || this.top; // don't do anything if the block is already closed if (!block.open) { return 0; @@ -578,7 +580,7 @@ var finalize = function(block, lineNumber) { this.refmap))) { block.string_content = block.string_content.slice(pos); if (isBlank(block.string_content)) { - block.setType('ReferenceDef'); + block.unlink(); break; } } @@ -635,7 +637,7 @@ var finalize = function(block, lineNumber) { break; } - this.tip = block.parent || this.top; + this.tip = above; }; // Walk through a block & children recursively, parsing string content diff --git a/js/lib/html.js b/js/lib/html.js index 8e096ddb0f..fd0aaf1d13 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -220,10 +220,6 @@ var renderNodes = function(block) { cr(); break; - - case 'ReferenceDef': - break; - default: throw "Unknown node type " + node.getType(); } diff --git a/js/lib/xml.js b/js/lib/xml.js index 4932e31a56..8e4b68900b 100644 --- a/js/lib/xml.js +++ b/js/lib/xml.js @@ -74,10 +74,6 @@ var renderNodes = function(block) { node = event.node; nodetype = node.getType(); - if (nodetype === 'ReferenceDef') { - continue; - } - container = node.isContainer(); selfClosing = nodetype === 'HorizontalRule' || nodetype === 'Hardbreak' || nodetype === 'Softbreak' || nodetype === 'Image'; -- cgit 0.0.5-2-1-g0f52 From affb864c1030098a9d3706f42614f085b144abd2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 12:42:26 -0800 Subject: normalize-reference.js: disable eslint spacing warnings. --- js/lib/normalize-reference.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/lib/normalize-reference.js b/js/lib/normalize-reference.js index 8ecc07cb47..ee4d13e4a8 100644 --- a/js/lib/normalize-reference.js +++ b/js/lib/normalize-reference.js @@ -23,6 +23,8 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*eslint-disable key-spacing, comma-spacing */ + var regex = /[ \t\r\n]+|[A-Z\xB5\xC0-\xD6\xD8-\xDF\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u0149\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u017F\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C5\u01C7\u01C8\u01CA\u01CB\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F0-\u01F2\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0345\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03AB\u03B0\u03C2\u03CF-\u03D1\u03D5\u03D6\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F0\u03F1\u03F4\u03F5\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u0587\u10A0-\u10C5\u10C7\u10CD\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E96-\u1E9B\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F50\u1F52\u1F54\u1F56\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1F80-\u1FAF\u1FB2-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD2\u1FD3\u1FD6-\u1FDB\u1FE2-\u1FE4\u1FE6-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u2132\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0\uA7B1\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A]|\uD801[\uDC00-\uDC27]|\uD806[\uDCA0-\uDCBF]/g; var map = {'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g','H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n','O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u','V':'v','W':'w','X':'x','Y':'y','Z':'z','\xB5':'\u03BC','\xC0':'\xE0','\xC1':'\xE1','\xC2':'\xE2','\xC3':'\xE3','\xC4':'\xE4','\xC5':'\xE5','\xC6':'\xE6','\xC7':'\xE7','\xC8':'\xE8','\xC9':'\xE9','\xCA':'\xEA','\xCB':'\xEB','\xCC':'\xEC','\xCD':'\xED','\xCE':'\xEE','\xCF':'\xEF','\xD0':'\xF0','\xD1':'\xF1','\xD2':'\xF2','\xD3':'\xF3','\xD4':'\xF4','\xD5':'\xF5','\xD6':'\xF6','\xD8':'\xF8','\xD9':'\xF9','\xDA':'\xFA','\xDB':'\xFB','\xDC':'\xFC','\xDD':'\xFD','\xDE':'\xFE','\u0100':'\u0101','\u0102':'\u0103','\u0104':'\u0105','\u0106':'\u0107','\u0108':'\u0109','\u010A':'\u010B','\u010C':'\u010D','\u010E':'\u010F','\u0110':'\u0111','\u0112':'\u0113','\u0114':'\u0115','\u0116':'\u0117','\u0118':'\u0119','\u011A':'\u011B','\u011C':'\u011D','\u011E':'\u011F','\u0120':'\u0121','\u0122':'\u0123','\u0124':'\u0125','\u0126':'\u0127','\u0128':'\u0129','\u012A':'\u012B','\u012C':'\u012D','\u012E':'\u012F','\u0132':'\u0133','\u0134':'\u0135','\u0136':'\u0137','\u0139':'\u013A','\u013B':'\u013C','\u013D':'\u013E','\u013F':'\u0140','\u0141':'\u0142','\u0143':'\u0144','\u0145':'\u0146','\u0147':'\u0148','\u014A':'\u014B','\u014C':'\u014D','\u014E':'\u014F','\u0150':'\u0151','\u0152':'\u0153','\u0154':'\u0155','\u0156':'\u0157','\u0158':'\u0159','\u015A':'\u015B','\u015C':'\u015D','\u015E':'\u015F','\u0160':'\u0161','\u0162':'\u0163','\u0164':'\u0165','\u0166':'\u0167','\u0168':'\u0169','\u016A':'\u016B','\u016C':'\u016D','\u016E':'\u016F','\u0170':'\u0171','\u0172':'\u0173','\u0174':'\u0175','\u0176':'\u0177','\u0178':'\xFF','\u0179':'\u017A','\u017B':'\u017C','\u017D':'\u017E','\u017F':'s','\u0181':'\u0253','\u0182':'\u0183','\u0184':'\u0185','\u0186':'\u0254','\u0187':'\u0188','\u0189':'\u0256','\u018A':'\u0257','\u018B':'\u018C','\u018E':'\u01DD','\u018F':'\u0259','\u0190':'\u025B','\u0191':'\u0192','\u0193':'\u0260','\u0194':'\u0263','\u0196':'\u0269','\u0197':'\u0268','\u0198':'\u0199','\u019C':'\u026F','\u019D':'\u0272','\u019F':'\u0275','\u01A0':'\u01A1','\u01A2':'\u01A3','\u01A4':'\u01A5','\u01A6':'\u0280','\u01A7':'\u01A8','\u01A9':'\u0283','\u01AC':'\u01AD','\u01AE':'\u0288','\u01AF':'\u01B0','\u01B1':'\u028A','\u01B2':'\u028B','\u01B3':'\u01B4','\u01B5':'\u01B6','\u01B7':'\u0292','\u01B8':'\u01B9','\u01BC':'\u01BD','\u01C4':'\u01C6','\u01C5':'\u01C6','\u01C7':'\u01C9','\u01C8':'\u01C9','\u01CA':'\u01CC','\u01CB':'\u01CC','\u01CD':'\u01CE','\u01CF':'\u01D0','\u01D1':'\u01D2','\u01D3':'\u01D4','\u01D5':'\u01D6','\u01D7':'\u01D8','\u01D9':'\u01DA','\u01DB':'\u01DC','\u01DE':'\u01DF','\u01E0':'\u01E1','\u01E2':'\u01E3','\u01E4':'\u01E5','\u01E6':'\u01E7','\u01E8':'\u01E9','\u01EA':'\u01EB','\u01EC':'\u01ED','\u01EE':'\u01EF','\u01F1':'\u01F3','\u01F2':'\u01F3','\u01F4':'\u01F5','\u01F6':'\u0195','\u01F7':'\u01BF','\u01F8':'\u01F9','\u01FA':'\u01FB','\u01FC':'\u01FD','\u01FE':'\u01FF','\u0200':'\u0201','\u0202':'\u0203','\u0204':'\u0205','\u0206':'\u0207','\u0208':'\u0209','\u020A':'\u020B','\u020C':'\u020D','\u020E':'\u020F','\u0210':'\u0211','\u0212':'\u0213','\u0214':'\u0215','\u0216':'\u0217','\u0218':'\u0219','\u021A':'\u021B','\u021C':'\u021D','\u021E':'\u021F','\u0220':'\u019E','\u0222':'\u0223','\u0224':'\u0225','\u0226':'\u0227','\u0228':'\u0229','\u022A':'\u022B','\u022C':'\u022D','\u022E':'\u022F','\u0230':'\u0231','\u0232':'\u0233','\u023A':'\u2C65','\u023B':'\u023C','\u023D':'\u019A','\u023E':'\u2C66','\u0241':'\u0242','\u0243':'\u0180','\u0244':'\u0289','\u0245':'\u028C','\u0246':'\u0247','\u0248':'\u0249','\u024A':'\u024B','\u024C':'\u024D','\u024E':'\u024F','\u0345':'\u03B9','\u0370':'\u0371','\u0372':'\u0373','\u0376':'\u0377','\u037F':'\u03F3','\u0386':'\u03AC','\u0388':'\u03AD','\u0389':'\u03AE','\u038A':'\u03AF','\u038C':'\u03CC','\u038E':'\u03CD','\u038F':'\u03CE','\u0391':'\u03B1','\u0392':'\u03B2','\u0393':'\u03B3','\u0394':'\u03B4','\u0395':'\u03B5','\u0396':'\u03B6','\u0397':'\u03B7','\u0398':'\u03B8','\u0399':'\u03B9','\u039A':'\u03BA','\u039B':'\u03BB','\u039C':'\u03BC','\u039D':'\u03BD','\u039E':'\u03BE','\u039F':'\u03BF','\u03A0':'\u03C0','\u03A1':'\u03C1','\u03A3':'\u03C3','\u03A4':'\u03C4','\u03A5':'\u03C5','\u03A6':'\u03C6','\u03A7':'\u03C7','\u03A8':'\u03C8','\u03A9':'\u03C9','\u03AA':'\u03CA','\u03AB':'\u03CB','\u03C2':'\u03C3','\u03CF':'\u03D7','\u03D0':'\u03B2','\u03D1':'\u03B8','\u03D5':'\u03C6','\u03D6':'\u03C0','\u03D8':'\u03D9','\u03DA':'\u03DB','\u03DC':'\u03DD','\u03DE':'\u03DF','\u03E0':'\u03E1','\u03E2':'\u03E3','\u03E4':'\u03E5','\u03E6':'\u03E7','\u03E8':'\u03E9','\u03EA':'\u03EB','\u03EC':'\u03ED','\u03EE':'\u03EF','\u03F0':'\u03BA','\u03F1':'\u03C1','\u03F4':'\u03B8','\u03F5':'\u03B5','\u03F7':'\u03F8','\u03F9':'\u03F2','\u03FA':'\u03FB','\u03FD':'\u037B','\u03FE':'\u037C','\u03FF':'\u037D','\u0400':'\u0450','\u0401':'\u0451','\u0402':'\u0452','\u0403':'\u0453','\u0404':'\u0454','\u0405':'\u0455','\u0406':'\u0456','\u0407':'\u0457','\u0408':'\u0458','\u0409':'\u0459','\u040A':'\u045A','\u040B':'\u045B','\u040C':'\u045C','\u040D':'\u045D','\u040E':'\u045E','\u040F':'\u045F','\u0410':'\u0430','\u0411':'\u0431','\u0412':'\u0432','\u0413':'\u0433','\u0414':'\u0434','\u0415':'\u0435','\u0416':'\u0436','\u0417':'\u0437','\u0418':'\u0438','\u0419':'\u0439','\u041A':'\u043A','\u041B':'\u043B','\u041C':'\u043C','\u041D':'\u043D','\u041E':'\u043E','\u041F':'\u043F','\u0420':'\u0440','\u0421':'\u0441','\u0422':'\u0442','\u0423':'\u0443','\u0424':'\u0444','\u0425':'\u0445','\u0426':'\u0446','\u0427':'\u0447','\u0428':'\u0448','\u0429':'\u0449','\u042A':'\u044A','\u042B':'\u044B','\u042C':'\u044C','\u042D':'\u044D','\u042E':'\u044E','\u042F':'\u044F','\u0460':'\u0461','\u0462':'\u0463','\u0464':'\u0465','\u0466':'\u0467','\u0468':'\u0469','\u046A':'\u046B','\u046C':'\u046D','\u046E':'\u046F','\u0470':'\u0471','\u0472':'\u0473','\u0474':'\u0475','\u0476':'\u0477','\u0478':'\u0479','\u047A':'\u047B','\u047C':'\u047D','\u047E':'\u047F','\u0480':'\u0481','\u048A':'\u048B','\u048C':'\u048D','\u048E':'\u048F','\u0490':'\u0491','\u0492':'\u0493','\u0494':'\u0495','\u0496':'\u0497','\u0498':'\u0499','\u049A':'\u049B','\u049C':'\u049D','\u049E':'\u049F','\u04A0':'\u04A1','\u04A2':'\u04A3','\u04A4':'\u04A5','\u04A6':'\u04A7','\u04A8':'\u04A9','\u04AA':'\u04AB','\u04AC':'\u04AD','\u04AE':'\u04AF','\u04B0':'\u04B1','\u04B2':'\u04B3','\u04B4':'\u04B5','\u04B6':'\u04B7','\u04B8':'\u04B9','\u04BA':'\u04BB','\u04BC':'\u04BD','\u04BE':'\u04BF','\u04C0':'\u04CF','\u04C1':'\u04C2','\u04C3':'\u04C4','\u04C5':'\u04C6','\u04C7':'\u04C8','\u04C9':'\u04CA','\u04CB':'\u04CC','\u04CD':'\u04CE','\u04D0':'\u04D1','\u04D2':'\u04D3','\u04D4':'\u04D5','\u04D6':'\u04D7','\u04D8':'\u04D9','\u04DA':'\u04DB','\u04DC':'\u04DD','\u04DE':'\u04DF','\u04E0':'\u04E1','\u04E2':'\u04E3','\u04E4':'\u04E5','\u04E6':'\u04E7','\u04E8':'\u04E9','\u04EA':'\u04EB','\u04EC':'\u04ED','\u04EE':'\u04EF','\u04F0':'\u04F1','\u04F2':'\u04F3','\u04F4':'\u04F5','\u04F6':'\u04F7','\u04F8':'\u04F9','\u04FA':'\u04FB','\u04FC':'\u04FD','\u04FE':'\u04FF','\u0500':'\u0501','\u0502':'\u0503','\u0504':'\u0505','\u0506':'\u0507','\u0508':'\u0509','\u050A':'\u050B','\u050C':'\u050D','\u050E':'\u050F','\u0510':'\u0511','\u0512':'\u0513','\u0514':'\u0515','\u0516':'\u0517','\u0518':'\u0519','\u051A':'\u051B','\u051C':'\u051D','\u051E':'\u051F','\u0520':'\u0521','\u0522':'\u0523','\u0524':'\u0525','\u0526':'\u0527','\u0528':'\u0529','\u052A':'\u052B','\u052C':'\u052D','\u052E':'\u052F','\u0531':'\u0561','\u0532':'\u0562','\u0533':'\u0563','\u0534':'\u0564','\u0535':'\u0565','\u0536':'\u0566','\u0537':'\u0567','\u0538':'\u0568','\u0539':'\u0569','\u053A':'\u056A','\u053B':'\u056B','\u053C':'\u056C','\u053D':'\u056D','\u053E':'\u056E','\u053F':'\u056F','\u0540':'\u0570','\u0541':'\u0571','\u0542':'\u0572','\u0543':'\u0573','\u0544':'\u0574','\u0545':'\u0575','\u0546':'\u0576','\u0547':'\u0577','\u0548':'\u0578','\u0549':'\u0579','\u054A':'\u057A','\u054B':'\u057B','\u054C':'\u057C','\u054D':'\u057D','\u054E':'\u057E','\u054F':'\u057F','\u0550':'\u0580','\u0551':'\u0581','\u0552':'\u0582','\u0553':'\u0583','\u0554':'\u0584','\u0555':'\u0585','\u0556':'\u0586','\u10A0':'\u2D00','\u10A1':'\u2D01','\u10A2':'\u2D02','\u10A3':'\u2D03','\u10A4':'\u2D04','\u10A5':'\u2D05','\u10A6':'\u2D06','\u10A7':'\u2D07','\u10A8':'\u2D08','\u10A9':'\u2D09','\u10AA':'\u2D0A','\u10AB':'\u2D0B','\u10AC':'\u2D0C','\u10AD':'\u2D0D','\u10AE':'\u2D0E','\u10AF':'\u2D0F','\u10B0':'\u2D10','\u10B1':'\u2D11','\u10B2':'\u2D12','\u10B3':'\u2D13','\u10B4':'\u2D14','\u10B5':'\u2D15','\u10B6':'\u2D16','\u10B7':'\u2D17','\u10B8':'\u2D18','\u10B9':'\u2D19','\u10BA':'\u2D1A','\u10BB':'\u2D1B','\u10BC':'\u2D1C','\u10BD':'\u2D1D','\u10BE':'\u2D1E','\u10BF':'\u2D1F','\u10C0':'\u2D20','\u10C1':'\u2D21','\u10C2':'\u2D22','\u10C3':'\u2D23','\u10C4':'\u2D24','\u10C5':'\u2D25','\u10C7':'\u2D27','\u10CD':'\u2D2D','\u1E00':'\u1E01','\u1E02':'\u1E03','\u1E04':'\u1E05','\u1E06':'\u1E07','\u1E08':'\u1E09','\u1E0A':'\u1E0B','\u1E0C':'\u1E0D','\u1E0E':'\u1E0F','\u1E10':'\u1E11','\u1E12':'\u1E13','\u1E14':'\u1E15','\u1E16':'\u1E17','\u1E18':'\u1E19','\u1E1A':'\u1E1B','\u1E1C':'\u1E1D','\u1E1E':'\u1E1F','\u1E20':'\u1E21','\u1E22':'\u1E23','\u1E24':'\u1E25','\u1E26':'\u1E27','\u1E28':'\u1E29','\u1E2A':'\u1E2B','\u1E2C':'\u1E2D','\u1E2E':'\u1E2F','\u1E30':'\u1E31','\u1E32':'\u1E33','\u1E34':'\u1E35','\u1E36':'\u1E37','\u1E38':'\u1E39','\u1E3A':'\u1E3B','\u1E3C':'\u1E3D','\u1E3E':'\u1E3F','\u1E40':'\u1E41','\u1E42':'\u1E43','\u1E44':'\u1E45','\u1E46':'\u1E47','\u1E48':'\u1E49','\u1E4A':'\u1E4B','\u1E4C':'\u1E4D','\u1E4E':'\u1E4F','\u1E50':'\u1E51','\u1E52':'\u1E53','\u1E54':'\u1E55','\u1E56':'\u1E57','\u1E58':'\u1E59','\u1E5A':'\u1E5B','\u1E5C':'\u1E5D','\u1E5E':'\u1E5F','\u1E60':'\u1E61','\u1E62':'\u1E63','\u1E64':'\u1E65','\u1E66':'\u1E67','\u1E68':'\u1E69','\u1E6A':'\u1E6B','\u1E6C':'\u1E6D','\u1E6E':'\u1E6F','\u1E70':'\u1E71','\u1E72':'\u1E73','\u1E74':'\u1E75','\u1E76':'\u1E77','\u1E78':'\u1E79','\u1E7A':'\u1E7B','\u1E7C':'\u1E7D','\u1E7E':'\u1E7F','\u1E80':'\u1E81','\u1E82':'\u1E83','\u1E84':'\u1E85','\u1E86':'\u1E87','\u1E88':'\u1E89','\u1E8A':'\u1E8B','\u1E8C':'\u1E8D','\u1E8E':'\u1E8F','\u1E90':'\u1E91','\u1E92':'\u1E93','\u1E94':'\u1E95','\u1E9B':'\u1E61','\u1EA0':'\u1EA1','\u1EA2':'\u1EA3','\u1EA4':'\u1EA5','\u1EA6':'\u1EA7','\u1EA8':'\u1EA9','\u1EAA':'\u1EAB','\u1EAC':'\u1EAD','\u1EAE':'\u1EAF','\u1EB0':'\u1EB1','\u1EB2':'\u1EB3','\u1EB4':'\u1EB5','\u1EB6':'\u1EB7','\u1EB8':'\u1EB9','\u1EBA':'\u1EBB','\u1EBC':'\u1EBD','\u1EBE':'\u1EBF','\u1EC0':'\u1EC1','\u1EC2':'\u1EC3','\u1EC4':'\u1EC5','\u1EC6':'\u1EC7','\u1EC8':'\u1EC9','\u1ECA':'\u1ECB','\u1ECC':'\u1ECD','\u1ECE':'\u1ECF','\u1ED0':'\u1ED1','\u1ED2':'\u1ED3','\u1ED4':'\u1ED5','\u1ED6':'\u1ED7','\u1ED8':'\u1ED9','\u1EDA':'\u1EDB','\u1EDC':'\u1EDD','\u1EDE':'\u1EDF','\u1EE0':'\u1EE1','\u1EE2':'\u1EE3','\u1EE4':'\u1EE5','\u1EE6':'\u1EE7','\u1EE8':'\u1EE9','\u1EEA':'\u1EEB','\u1EEC':'\u1EED','\u1EEE':'\u1EEF','\u1EF0':'\u1EF1','\u1EF2':'\u1EF3','\u1EF4':'\u1EF5','\u1EF6':'\u1EF7','\u1EF8':'\u1EF9','\u1EFA':'\u1EFB','\u1EFC':'\u1EFD','\u1EFE':'\u1EFF','\u1F08':'\u1F00','\u1F09':'\u1F01','\u1F0A':'\u1F02','\u1F0B':'\u1F03','\u1F0C':'\u1F04','\u1F0D':'\u1F05','\u1F0E':'\u1F06','\u1F0F':'\u1F07','\u1F18':'\u1F10','\u1F19':'\u1F11','\u1F1A':'\u1F12','\u1F1B':'\u1F13','\u1F1C':'\u1F14','\u1F1D':'\u1F15','\u1F28':'\u1F20','\u1F29':'\u1F21','\u1F2A':'\u1F22','\u1F2B':'\u1F23','\u1F2C':'\u1F24','\u1F2D':'\u1F25','\u1F2E':'\u1F26','\u1F2F':'\u1F27','\u1F38':'\u1F30','\u1F39':'\u1F31','\u1F3A':'\u1F32','\u1F3B':'\u1F33','\u1F3C':'\u1F34','\u1F3D':'\u1F35','\u1F3E':'\u1F36','\u1F3F':'\u1F37','\u1F48':'\u1F40','\u1F49':'\u1F41','\u1F4A':'\u1F42','\u1F4B':'\u1F43','\u1F4C':'\u1F44','\u1F4D':'\u1F45','\u1F59':'\u1F51','\u1F5B':'\u1F53','\u1F5D':'\u1F55','\u1F5F':'\u1F57','\u1F68':'\u1F60','\u1F69':'\u1F61','\u1F6A':'\u1F62','\u1F6B':'\u1F63','\u1F6C':'\u1F64','\u1F6D':'\u1F65','\u1F6E':'\u1F66','\u1F6F':'\u1F67','\u1FB8':'\u1FB0','\u1FB9':'\u1FB1','\u1FBA':'\u1F70','\u1FBB':'\u1F71','\u1FBE':'\u03B9','\u1FC8':'\u1F72','\u1FC9':'\u1F73','\u1FCA':'\u1F74','\u1FCB':'\u1F75','\u1FD8':'\u1FD0','\u1FD9':'\u1FD1','\u1FDA':'\u1F76','\u1FDB':'\u1F77','\u1FE8':'\u1FE0','\u1FE9':'\u1FE1','\u1FEA':'\u1F7A','\u1FEB':'\u1F7B','\u1FEC':'\u1FE5','\u1FF8':'\u1F78','\u1FF9':'\u1F79','\u1FFA':'\u1F7C','\u1FFB':'\u1F7D','\u2126':'\u03C9','\u212A':'k','\u212B':'\xE5','\u2132':'\u214E','\u2160':'\u2170','\u2161':'\u2171','\u2162':'\u2172','\u2163':'\u2173','\u2164':'\u2174','\u2165':'\u2175','\u2166':'\u2176','\u2167':'\u2177','\u2168':'\u2178','\u2169':'\u2179','\u216A':'\u217A','\u216B':'\u217B','\u216C':'\u217C','\u216D':'\u217D','\u216E':'\u217E','\u216F':'\u217F','\u2183':'\u2184','\u24B6':'\u24D0','\u24B7':'\u24D1','\u24B8':'\u24D2','\u24B9':'\u24D3','\u24BA':'\u24D4','\u24BB':'\u24D5','\u24BC':'\u24D6','\u24BD':'\u24D7','\u24BE':'\u24D8','\u24BF':'\u24D9','\u24C0':'\u24DA','\u24C1':'\u24DB','\u24C2':'\u24DC','\u24C3':'\u24DD','\u24C4':'\u24DE','\u24C5':'\u24DF','\u24C6':'\u24E0','\u24C7':'\u24E1','\u24C8':'\u24E2','\u24C9':'\u24E3','\u24CA':'\u24E4','\u24CB':'\u24E5','\u24CC':'\u24E6','\u24CD':'\u24E7','\u24CE':'\u24E8','\u24CF':'\u24E9','\u2C00':'\u2C30','\u2C01':'\u2C31','\u2C02':'\u2C32','\u2C03':'\u2C33','\u2C04':'\u2C34','\u2C05':'\u2C35','\u2C06':'\u2C36','\u2C07':'\u2C37','\u2C08':'\u2C38','\u2C09':'\u2C39','\u2C0A':'\u2C3A','\u2C0B':'\u2C3B','\u2C0C':'\u2C3C','\u2C0D':'\u2C3D','\u2C0E':'\u2C3E','\u2C0F':'\u2C3F','\u2C10':'\u2C40','\u2C11':'\u2C41','\u2C12':'\u2C42','\u2C13':'\u2C43','\u2C14':'\u2C44','\u2C15':'\u2C45','\u2C16':'\u2C46','\u2C17':'\u2C47','\u2C18':'\u2C48','\u2C19':'\u2C49','\u2C1A':'\u2C4A','\u2C1B':'\u2C4B','\u2C1C':'\u2C4C','\u2C1D':'\u2C4D','\u2C1E':'\u2C4E','\u2C1F':'\u2C4F','\u2C20':'\u2C50','\u2C21':'\u2C51','\u2C22':'\u2C52','\u2C23':'\u2C53','\u2C24':'\u2C54','\u2C25':'\u2C55','\u2C26':'\u2C56','\u2C27':'\u2C57','\u2C28':'\u2C58','\u2C29':'\u2C59','\u2C2A':'\u2C5A','\u2C2B':'\u2C5B','\u2C2C':'\u2C5C','\u2C2D':'\u2C5D','\u2C2E':'\u2C5E','\u2C60':'\u2C61','\u2C62':'\u026B','\u2C63':'\u1D7D','\u2C64':'\u027D','\u2C67':'\u2C68','\u2C69':'\u2C6A','\u2C6B':'\u2C6C','\u2C6D':'\u0251','\u2C6E':'\u0271','\u2C6F':'\u0250','\u2C70':'\u0252','\u2C72':'\u2C73','\u2C75':'\u2C76','\u2C7E':'\u023F','\u2C7F':'\u0240','\u2C80':'\u2C81','\u2C82':'\u2C83','\u2C84':'\u2C85','\u2C86':'\u2C87','\u2C88':'\u2C89','\u2C8A':'\u2C8B','\u2C8C':'\u2C8D','\u2C8E':'\u2C8F','\u2C90':'\u2C91','\u2C92':'\u2C93','\u2C94':'\u2C95','\u2C96':'\u2C97','\u2C98':'\u2C99','\u2C9A':'\u2C9B','\u2C9C':'\u2C9D','\u2C9E':'\u2C9F','\u2CA0':'\u2CA1','\u2CA2':'\u2CA3','\u2CA4':'\u2CA5','\u2CA6':'\u2CA7','\u2CA8':'\u2CA9','\u2CAA':'\u2CAB','\u2CAC':'\u2CAD','\u2CAE':'\u2CAF','\u2CB0':'\u2CB1','\u2CB2':'\u2CB3','\u2CB4':'\u2CB5','\u2CB6':'\u2CB7','\u2CB8':'\u2CB9','\u2CBA':'\u2CBB','\u2CBC':'\u2CBD','\u2CBE':'\u2CBF','\u2CC0':'\u2CC1','\u2CC2':'\u2CC3','\u2CC4':'\u2CC5','\u2CC6':'\u2CC7','\u2CC8':'\u2CC9','\u2CCA':'\u2CCB','\u2CCC':'\u2CCD','\u2CCE':'\u2CCF','\u2CD0':'\u2CD1','\u2CD2':'\u2CD3','\u2CD4':'\u2CD5','\u2CD6':'\u2CD7','\u2CD8':'\u2CD9','\u2CDA':'\u2CDB','\u2CDC':'\u2CDD','\u2CDE':'\u2CDF','\u2CE0':'\u2CE1','\u2CE2':'\u2CE3','\u2CEB':'\u2CEC','\u2CED':'\u2CEE','\u2CF2':'\u2CF3','\uA640':'\uA641','\uA642':'\uA643','\uA644':'\uA645','\uA646':'\uA647','\uA648':'\uA649','\uA64A':'\uA64B','\uA64C':'\uA64D','\uA64E':'\uA64F','\uA650':'\uA651','\uA652':'\uA653','\uA654':'\uA655','\uA656':'\uA657','\uA658':'\uA659','\uA65A':'\uA65B','\uA65C':'\uA65D','\uA65E':'\uA65F','\uA660':'\uA661','\uA662':'\uA663','\uA664':'\uA665','\uA666':'\uA667','\uA668':'\uA669','\uA66A':'\uA66B','\uA66C':'\uA66D','\uA680':'\uA681','\uA682':'\uA683','\uA684':'\uA685','\uA686':'\uA687','\uA688':'\uA689','\uA68A':'\uA68B','\uA68C':'\uA68D','\uA68E':'\uA68F','\uA690':'\uA691','\uA692':'\uA693','\uA694':'\uA695','\uA696':'\uA697','\uA698':'\uA699','\uA69A':'\uA69B','\uA722':'\uA723','\uA724':'\uA725','\uA726':'\uA727','\uA728':'\uA729','\uA72A':'\uA72B','\uA72C':'\uA72D','\uA72E':'\uA72F','\uA732':'\uA733','\uA734':'\uA735','\uA736':'\uA737','\uA738':'\uA739','\uA73A':'\uA73B','\uA73C':'\uA73D','\uA73E':'\uA73F','\uA740':'\uA741','\uA742':'\uA743','\uA744':'\uA745','\uA746':'\uA747','\uA748':'\uA749','\uA74A':'\uA74B','\uA74C':'\uA74D','\uA74E':'\uA74F','\uA750':'\uA751','\uA752':'\uA753','\uA754':'\uA755','\uA756':'\uA757','\uA758':'\uA759','\uA75A':'\uA75B','\uA75C':'\uA75D','\uA75E':'\uA75F','\uA760':'\uA761','\uA762':'\uA763','\uA764':'\uA765','\uA766':'\uA767','\uA768':'\uA769','\uA76A':'\uA76B','\uA76C':'\uA76D','\uA76E':'\uA76F','\uA779':'\uA77A','\uA77B':'\uA77C','\uA77D':'\u1D79','\uA77E':'\uA77F','\uA780':'\uA781','\uA782':'\uA783','\uA784':'\uA785','\uA786':'\uA787','\uA78B':'\uA78C','\uA78D':'\u0265','\uA790':'\uA791','\uA792':'\uA793','\uA796':'\uA797','\uA798':'\uA799','\uA79A':'\uA79B','\uA79C':'\uA79D','\uA79E':'\uA79F','\uA7A0':'\uA7A1','\uA7A2':'\uA7A3','\uA7A4':'\uA7A5','\uA7A6':'\uA7A7','\uA7A8':'\uA7A9','\uA7AA':'\u0266','\uA7AB':'\u025C','\uA7AC':'\u0261','\uA7AD':'\u026C','\uA7B0':'\u029E','\uA7B1':'\u0287','\uFF21':'\uFF41','\uFF22':'\uFF42','\uFF23':'\uFF43','\uFF24':'\uFF44','\uFF25':'\uFF45','\uFF26':'\uFF46','\uFF27':'\uFF47','\uFF28':'\uFF48','\uFF29':'\uFF49','\uFF2A':'\uFF4A','\uFF2B':'\uFF4B','\uFF2C':'\uFF4C','\uFF2D':'\uFF4D','\uFF2E':'\uFF4E','\uFF2F':'\uFF4F','\uFF30':'\uFF50','\uFF31':'\uFF51','\uFF32':'\uFF52','\uFF33':'\uFF53','\uFF34':'\uFF54','\uFF35':'\uFF55','\uFF36':'\uFF56','\uFF37':'\uFF57','\uFF38':'\uFF58','\uFF39':'\uFF59','\uFF3A':'\uFF5A','\uD801\uDC00':'\uD801\uDC28','\uD801\uDC01':'\uD801\uDC29','\uD801\uDC02':'\uD801\uDC2A','\uD801\uDC03':'\uD801\uDC2B','\uD801\uDC04':'\uD801\uDC2C','\uD801\uDC05':'\uD801\uDC2D','\uD801\uDC06':'\uD801\uDC2E','\uD801\uDC07':'\uD801\uDC2F','\uD801\uDC08':'\uD801\uDC30','\uD801\uDC09':'\uD801\uDC31','\uD801\uDC0A':'\uD801\uDC32','\uD801\uDC0B':'\uD801\uDC33','\uD801\uDC0C':'\uD801\uDC34','\uD801\uDC0D':'\uD801\uDC35','\uD801\uDC0E':'\uD801\uDC36','\uD801\uDC0F':'\uD801\uDC37','\uD801\uDC10':'\uD801\uDC38','\uD801\uDC11':'\uD801\uDC39','\uD801\uDC12':'\uD801\uDC3A','\uD801\uDC13':'\uD801\uDC3B','\uD801\uDC14':'\uD801\uDC3C','\uD801\uDC15':'\uD801\uDC3D','\uD801\uDC16':'\uD801\uDC3E','\uD801\uDC17':'\uD801\uDC3F','\uD801\uDC18':'\uD801\uDC40','\uD801\uDC19':'\uD801\uDC41','\uD801\uDC1A':'\uD801\uDC42','\uD801\uDC1B':'\uD801\uDC43','\uD801\uDC1C':'\uD801\uDC44','\uD801\uDC1D':'\uD801\uDC45','\uD801\uDC1E':'\uD801\uDC46','\uD801\uDC1F':'\uD801\uDC47','\uD801\uDC20':'\uD801\uDC48','\uD801\uDC21':'\uD801\uDC49','\uD801\uDC22':'\uD801\uDC4A','\uD801\uDC23':'\uD801\uDC4B','\uD801\uDC24':'\uD801\uDC4C','\uD801\uDC25':'\uD801\uDC4D','\uD801\uDC26':'\uD801\uDC4E','\uD801\uDC27':'\uD801\uDC4F','\uD806\uDCA0':'\uD806\uDCC0','\uD806\uDCA1':'\uD806\uDCC1','\uD806\uDCA2':'\uD806\uDCC2','\uD806\uDCA3':'\uD806\uDCC3','\uD806\uDCA4':'\uD806\uDCC4','\uD806\uDCA5':'\uD806\uDCC5','\uD806\uDCA6':'\uD806\uDCC6','\uD806\uDCA7':'\uD806\uDCC7','\uD806\uDCA8':'\uD806\uDCC8','\uD806\uDCA9':'\uD806\uDCC9','\uD806\uDCAA':'\uD806\uDCCA','\uD806\uDCAB':'\uD806\uDCCB','\uD806\uDCAC':'\uD806\uDCCC','\uD806\uDCAD':'\uD806\uDCCD','\uD806\uDCAE':'\uD806\uDCCE','\uD806\uDCAF':'\uD806\uDCCF','\uD806\uDCB0':'\uD806\uDCD0','\uD806\uDCB1':'\uD806\uDCD1','\uD806\uDCB2':'\uD806\uDCD2','\uD806\uDCB3':'\uD806\uDCD3','\uD806\uDCB4':'\uD806\uDCD4','\uD806\uDCB5':'\uD806\uDCD5','\uD806\uDCB6':'\uD806\uDCD6','\uD806\uDCB7':'\uD806\uDCD7','\uD806\uDCB8':'\uD806\uDCD8','\uD806\uDCB9':'\uD806\uDCD9','\uD806\uDCBA':'\uD806\uDCDA','\uD806\uDCBB':'\uD806\uDCDB','\uD806\uDCBC':'\uD806\uDCDC','\uD806\uDCBD':'\uD806\uDCDD','\uD806\uDCBE':'\uD806\uDCDE','\uD806\uDCBF':'\uD806\uDCDF','\xDF':'ss','\u0130':'i\u0307','\u0149':'\u02BCn','\u01F0':'j\u030C','\u0390':'\u03B9\u0308\u0301','\u03B0':'\u03C5\u0308\u0301','\u0587':'\u0565\u0582','\u1E96':'h\u0331','\u1E97':'t\u0308','\u1E98':'w\u030A','\u1E99':'y\u030A','\u1E9A':'a\u02BE','\u1E9E':'ss','\u1F50':'\u03C5\u0313','\u1F52':'\u03C5\u0313\u0300','\u1F54':'\u03C5\u0313\u0301','\u1F56':'\u03C5\u0313\u0342','\u1F80':'\u1F00\u03B9','\u1F81':'\u1F01\u03B9','\u1F82':'\u1F02\u03B9','\u1F83':'\u1F03\u03B9','\u1F84':'\u1F04\u03B9','\u1F85':'\u1F05\u03B9','\u1F86':'\u1F06\u03B9','\u1F87':'\u1F07\u03B9','\u1F88':'\u1F00\u03B9','\u1F89':'\u1F01\u03B9','\u1F8A':'\u1F02\u03B9','\u1F8B':'\u1F03\u03B9','\u1F8C':'\u1F04\u03B9','\u1F8D':'\u1F05\u03B9','\u1F8E':'\u1F06\u03B9','\u1F8F':'\u1F07\u03B9','\u1F90':'\u1F20\u03B9','\u1F91':'\u1F21\u03B9','\u1F92':'\u1F22\u03B9','\u1F93':'\u1F23\u03B9','\u1F94':'\u1F24\u03B9','\u1F95':'\u1F25\u03B9','\u1F96':'\u1F26\u03B9','\u1F97':'\u1F27\u03B9','\u1F98':'\u1F20\u03B9','\u1F99':'\u1F21\u03B9','\u1F9A':'\u1F22\u03B9','\u1F9B':'\u1F23\u03B9','\u1F9C':'\u1F24\u03B9','\u1F9D':'\u1F25\u03B9','\u1F9E':'\u1F26\u03B9','\u1F9F':'\u1F27\u03B9','\u1FA0':'\u1F60\u03B9','\u1FA1':'\u1F61\u03B9','\u1FA2':'\u1F62\u03B9','\u1FA3':'\u1F63\u03B9','\u1FA4':'\u1F64\u03B9','\u1FA5':'\u1F65\u03B9','\u1FA6':'\u1F66\u03B9','\u1FA7':'\u1F67\u03B9','\u1FA8':'\u1F60\u03B9','\u1FA9':'\u1F61\u03B9','\u1FAA':'\u1F62\u03B9','\u1FAB':'\u1F63\u03B9','\u1FAC':'\u1F64\u03B9','\u1FAD':'\u1F65\u03B9','\u1FAE':'\u1F66\u03B9','\u1FAF':'\u1F67\u03B9','\u1FB2':'\u1F70\u03B9','\u1FB3':'\u03B1\u03B9','\u1FB4':'\u03AC\u03B9','\u1FB6':'\u03B1\u0342','\u1FB7':'\u03B1\u0342\u03B9','\u1FBC':'\u03B1\u03B9','\u1FC2':'\u1F74\u03B9','\u1FC3':'\u03B7\u03B9','\u1FC4':'\u03AE\u03B9','\u1FC6':'\u03B7\u0342','\u1FC7':'\u03B7\u0342\u03B9','\u1FCC':'\u03B7\u03B9','\u1FD2':'\u03B9\u0308\u0300','\u1FD3':'\u03B9\u0308\u0301','\u1FD6':'\u03B9\u0342','\u1FD7':'\u03B9\u0308\u0342','\u1FE2':'\u03C5\u0308\u0300','\u1FE3':'\u03C5\u0308\u0301','\u1FE4':'\u03C1\u0313','\u1FE6':'\u03C5\u0342','\u1FE7':'\u03C5\u0308\u0342','\u1FF2':'\u1F7C\u03B9','\u1FF3':'\u03C9\u03B9','\u1FF4':'\u03CE\u03B9','\u1FF6':'\u03C9\u0342','\u1FF7':'\u03C9\u0342\u03B9','\u1FFC':'\u03C9\u03B9','\uFB00':'ff','\uFB01':'fi','\uFB02':'fl','\uFB03':'ffi','\uFB04':'ffl','\uFB05':'st','\uFB06':'st','\uFB13':'\u0574\u0576','\uFB14':'\u0574\u0565','\uFB15':'\u0574\u056B','\uFB16':'\u057E\u0576','\uFB17':'\u0574\u056D'}; -- cgit 0.0.5-2-1-g0f52 From dd6cbb11259b739eb4766728ea444a874e7be449 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 12:43:43 -0800 Subject: eslint fixes. --- js/lib/normalize-reference.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/lib/normalize-reference.js b/js/lib/normalize-reference.js index ee4d13e4a8..61f6aa6b46 100644 --- a/js/lib/normalize-reference.js +++ b/js/lib/normalize-reference.js @@ -1,3 +1,5 @@ +"use strict"; + /* The bulk of this code derives from https://github.com/dmoscrop/fold-case But in addition to case-folding, we also normalize whitespace. @@ -29,8 +31,6 @@ var regex = /[ \t\r\n]+|[A-Z\xB5\xC0-\xD6\xD8-\xDF\u0100\u0102\u0104\u0106\u0108 var map = {'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g','H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n','O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u','V':'v','W':'w','X':'x','Y':'y','Z':'z','\xB5':'\u03BC','\xC0':'\xE0','\xC1':'\xE1','\xC2':'\xE2','\xC3':'\xE3','\xC4':'\xE4','\xC5':'\xE5','\xC6':'\xE6','\xC7':'\xE7','\xC8':'\xE8','\xC9':'\xE9','\xCA':'\xEA','\xCB':'\xEB','\xCC':'\xEC','\xCD':'\xED','\xCE':'\xEE','\xCF':'\xEF','\xD0':'\xF0','\xD1':'\xF1','\xD2':'\xF2','\xD3':'\xF3','\xD4':'\xF4','\xD5':'\xF5','\xD6':'\xF6','\xD8':'\xF8','\xD9':'\xF9','\xDA':'\xFA','\xDB':'\xFB','\xDC':'\xFC','\xDD':'\xFD','\xDE':'\xFE','\u0100':'\u0101','\u0102':'\u0103','\u0104':'\u0105','\u0106':'\u0107','\u0108':'\u0109','\u010A':'\u010B','\u010C':'\u010D','\u010E':'\u010F','\u0110':'\u0111','\u0112':'\u0113','\u0114':'\u0115','\u0116':'\u0117','\u0118':'\u0119','\u011A':'\u011B','\u011C':'\u011D','\u011E':'\u011F','\u0120':'\u0121','\u0122':'\u0123','\u0124':'\u0125','\u0126':'\u0127','\u0128':'\u0129','\u012A':'\u012B','\u012C':'\u012D','\u012E':'\u012F','\u0132':'\u0133','\u0134':'\u0135','\u0136':'\u0137','\u0139':'\u013A','\u013B':'\u013C','\u013D':'\u013E','\u013F':'\u0140','\u0141':'\u0142','\u0143':'\u0144','\u0145':'\u0146','\u0147':'\u0148','\u014A':'\u014B','\u014C':'\u014D','\u014E':'\u014F','\u0150':'\u0151','\u0152':'\u0153','\u0154':'\u0155','\u0156':'\u0157','\u0158':'\u0159','\u015A':'\u015B','\u015C':'\u015D','\u015E':'\u015F','\u0160':'\u0161','\u0162':'\u0163','\u0164':'\u0165','\u0166':'\u0167','\u0168':'\u0169','\u016A':'\u016B','\u016C':'\u016D','\u016E':'\u016F','\u0170':'\u0171','\u0172':'\u0173','\u0174':'\u0175','\u0176':'\u0177','\u0178':'\xFF','\u0179':'\u017A','\u017B':'\u017C','\u017D':'\u017E','\u017F':'s','\u0181':'\u0253','\u0182':'\u0183','\u0184':'\u0185','\u0186':'\u0254','\u0187':'\u0188','\u0189':'\u0256','\u018A':'\u0257','\u018B':'\u018C','\u018E':'\u01DD','\u018F':'\u0259','\u0190':'\u025B','\u0191':'\u0192','\u0193':'\u0260','\u0194':'\u0263','\u0196':'\u0269','\u0197':'\u0268','\u0198':'\u0199','\u019C':'\u026F','\u019D':'\u0272','\u019F':'\u0275','\u01A0':'\u01A1','\u01A2':'\u01A3','\u01A4':'\u01A5','\u01A6':'\u0280','\u01A7':'\u01A8','\u01A9':'\u0283','\u01AC':'\u01AD','\u01AE':'\u0288','\u01AF':'\u01B0','\u01B1':'\u028A','\u01B2':'\u028B','\u01B3':'\u01B4','\u01B5':'\u01B6','\u01B7':'\u0292','\u01B8':'\u01B9','\u01BC':'\u01BD','\u01C4':'\u01C6','\u01C5':'\u01C6','\u01C7':'\u01C9','\u01C8':'\u01C9','\u01CA':'\u01CC','\u01CB':'\u01CC','\u01CD':'\u01CE','\u01CF':'\u01D0','\u01D1':'\u01D2','\u01D3':'\u01D4','\u01D5':'\u01D6','\u01D7':'\u01D8','\u01D9':'\u01DA','\u01DB':'\u01DC','\u01DE':'\u01DF','\u01E0':'\u01E1','\u01E2':'\u01E3','\u01E4':'\u01E5','\u01E6':'\u01E7','\u01E8':'\u01E9','\u01EA':'\u01EB','\u01EC':'\u01ED','\u01EE':'\u01EF','\u01F1':'\u01F3','\u01F2':'\u01F3','\u01F4':'\u01F5','\u01F6':'\u0195','\u01F7':'\u01BF','\u01F8':'\u01F9','\u01FA':'\u01FB','\u01FC':'\u01FD','\u01FE':'\u01FF','\u0200':'\u0201','\u0202':'\u0203','\u0204':'\u0205','\u0206':'\u0207','\u0208':'\u0209','\u020A':'\u020B','\u020C':'\u020D','\u020E':'\u020F','\u0210':'\u0211','\u0212':'\u0213','\u0214':'\u0215','\u0216':'\u0217','\u0218':'\u0219','\u021A':'\u021B','\u021C':'\u021D','\u021E':'\u021F','\u0220':'\u019E','\u0222':'\u0223','\u0224':'\u0225','\u0226':'\u0227','\u0228':'\u0229','\u022A':'\u022B','\u022C':'\u022D','\u022E':'\u022F','\u0230':'\u0231','\u0232':'\u0233','\u023A':'\u2C65','\u023B':'\u023C','\u023D':'\u019A','\u023E':'\u2C66','\u0241':'\u0242','\u0243':'\u0180','\u0244':'\u0289','\u0245':'\u028C','\u0246':'\u0247','\u0248':'\u0249','\u024A':'\u024B','\u024C':'\u024D','\u024E':'\u024F','\u0345':'\u03B9','\u0370':'\u0371','\u0372':'\u0373','\u0376':'\u0377','\u037F':'\u03F3','\u0386':'\u03AC','\u0388':'\u03AD','\u0389':'\u03AE','\u038A':'\u03AF','\u038C':'\u03CC','\u038E':'\u03CD','\u038F':'\u03CE','\u0391':'\u03B1','\u0392':'\u03B2','\u0393':'\u03B3','\u0394':'\u03B4','\u0395':'\u03B5','\u0396':'\u03B6','\u0397':'\u03B7','\u0398':'\u03B8','\u0399':'\u03B9','\u039A':'\u03BA','\u039B':'\u03BB','\u039C':'\u03BC','\u039D':'\u03BD','\u039E':'\u03BE','\u039F':'\u03BF','\u03A0':'\u03C0','\u03A1':'\u03C1','\u03A3':'\u03C3','\u03A4':'\u03C4','\u03A5':'\u03C5','\u03A6':'\u03C6','\u03A7':'\u03C7','\u03A8':'\u03C8','\u03A9':'\u03C9','\u03AA':'\u03CA','\u03AB':'\u03CB','\u03C2':'\u03C3','\u03CF':'\u03D7','\u03D0':'\u03B2','\u03D1':'\u03B8','\u03D5':'\u03C6','\u03D6':'\u03C0','\u03D8':'\u03D9','\u03DA':'\u03DB','\u03DC':'\u03DD','\u03DE':'\u03DF','\u03E0':'\u03E1','\u03E2':'\u03E3','\u03E4':'\u03E5','\u03E6':'\u03E7','\u03E8':'\u03E9','\u03EA':'\u03EB','\u03EC':'\u03ED','\u03EE':'\u03EF','\u03F0':'\u03BA','\u03F1':'\u03C1','\u03F4':'\u03B8','\u03F5':'\u03B5','\u03F7':'\u03F8','\u03F9':'\u03F2','\u03FA':'\u03FB','\u03FD':'\u037B','\u03FE':'\u037C','\u03FF':'\u037D','\u0400':'\u0450','\u0401':'\u0451','\u0402':'\u0452','\u0403':'\u0453','\u0404':'\u0454','\u0405':'\u0455','\u0406':'\u0456','\u0407':'\u0457','\u0408':'\u0458','\u0409':'\u0459','\u040A':'\u045A','\u040B':'\u045B','\u040C':'\u045C','\u040D':'\u045D','\u040E':'\u045E','\u040F':'\u045F','\u0410':'\u0430','\u0411':'\u0431','\u0412':'\u0432','\u0413':'\u0433','\u0414':'\u0434','\u0415':'\u0435','\u0416':'\u0436','\u0417':'\u0437','\u0418':'\u0438','\u0419':'\u0439','\u041A':'\u043A','\u041B':'\u043B','\u041C':'\u043C','\u041D':'\u043D','\u041E':'\u043E','\u041F':'\u043F','\u0420':'\u0440','\u0421':'\u0441','\u0422':'\u0442','\u0423':'\u0443','\u0424':'\u0444','\u0425':'\u0445','\u0426':'\u0446','\u0427':'\u0447','\u0428':'\u0448','\u0429':'\u0449','\u042A':'\u044A','\u042B':'\u044B','\u042C':'\u044C','\u042D':'\u044D','\u042E':'\u044E','\u042F':'\u044F','\u0460':'\u0461','\u0462':'\u0463','\u0464':'\u0465','\u0466':'\u0467','\u0468':'\u0469','\u046A':'\u046B','\u046C':'\u046D','\u046E':'\u046F','\u0470':'\u0471','\u0472':'\u0473','\u0474':'\u0475','\u0476':'\u0477','\u0478':'\u0479','\u047A':'\u047B','\u047C':'\u047D','\u047E':'\u047F','\u0480':'\u0481','\u048A':'\u048B','\u048C':'\u048D','\u048E':'\u048F','\u0490':'\u0491','\u0492':'\u0493','\u0494':'\u0495','\u0496':'\u0497','\u0498':'\u0499','\u049A':'\u049B','\u049C':'\u049D','\u049E':'\u049F','\u04A0':'\u04A1','\u04A2':'\u04A3','\u04A4':'\u04A5','\u04A6':'\u04A7','\u04A8':'\u04A9','\u04AA':'\u04AB','\u04AC':'\u04AD','\u04AE':'\u04AF','\u04B0':'\u04B1','\u04B2':'\u04B3','\u04B4':'\u04B5','\u04B6':'\u04B7','\u04B8':'\u04B9','\u04BA':'\u04BB','\u04BC':'\u04BD','\u04BE':'\u04BF','\u04C0':'\u04CF','\u04C1':'\u04C2','\u04C3':'\u04C4','\u04C5':'\u04C6','\u04C7':'\u04C8','\u04C9':'\u04CA','\u04CB':'\u04CC','\u04CD':'\u04CE','\u04D0':'\u04D1','\u04D2':'\u04D3','\u04D4':'\u04D5','\u04D6':'\u04D7','\u04D8':'\u04D9','\u04DA':'\u04DB','\u04DC':'\u04DD','\u04DE':'\u04DF','\u04E0':'\u04E1','\u04E2':'\u04E3','\u04E4':'\u04E5','\u04E6':'\u04E7','\u04E8':'\u04E9','\u04EA':'\u04EB','\u04EC':'\u04ED','\u04EE':'\u04EF','\u04F0':'\u04F1','\u04F2':'\u04F3','\u04F4':'\u04F5','\u04F6':'\u04F7','\u04F8':'\u04F9','\u04FA':'\u04FB','\u04FC':'\u04FD','\u04FE':'\u04FF','\u0500':'\u0501','\u0502':'\u0503','\u0504':'\u0505','\u0506':'\u0507','\u0508':'\u0509','\u050A':'\u050B','\u050C':'\u050D','\u050E':'\u050F','\u0510':'\u0511','\u0512':'\u0513','\u0514':'\u0515','\u0516':'\u0517','\u0518':'\u0519','\u051A':'\u051B','\u051C':'\u051D','\u051E':'\u051F','\u0520':'\u0521','\u0522':'\u0523','\u0524':'\u0525','\u0526':'\u0527','\u0528':'\u0529','\u052A':'\u052B','\u052C':'\u052D','\u052E':'\u052F','\u0531':'\u0561','\u0532':'\u0562','\u0533':'\u0563','\u0534':'\u0564','\u0535':'\u0565','\u0536':'\u0566','\u0537':'\u0567','\u0538':'\u0568','\u0539':'\u0569','\u053A':'\u056A','\u053B':'\u056B','\u053C':'\u056C','\u053D':'\u056D','\u053E':'\u056E','\u053F':'\u056F','\u0540':'\u0570','\u0541':'\u0571','\u0542':'\u0572','\u0543':'\u0573','\u0544':'\u0574','\u0545':'\u0575','\u0546':'\u0576','\u0547':'\u0577','\u0548':'\u0578','\u0549':'\u0579','\u054A':'\u057A','\u054B':'\u057B','\u054C':'\u057C','\u054D':'\u057D','\u054E':'\u057E','\u054F':'\u057F','\u0550':'\u0580','\u0551':'\u0581','\u0552':'\u0582','\u0553':'\u0583','\u0554':'\u0584','\u0555':'\u0585','\u0556':'\u0586','\u10A0':'\u2D00','\u10A1':'\u2D01','\u10A2':'\u2D02','\u10A3':'\u2D03','\u10A4':'\u2D04','\u10A5':'\u2D05','\u10A6':'\u2D06','\u10A7':'\u2D07','\u10A8':'\u2D08','\u10A9':'\u2D09','\u10AA':'\u2D0A','\u10AB':'\u2D0B','\u10AC':'\u2D0C','\u10AD':'\u2D0D','\u10AE':'\u2D0E','\u10AF':'\u2D0F','\u10B0':'\u2D10','\u10B1':'\u2D11','\u10B2':'\u2D12','\u10B3':'\u2D13','\u10B4':'\u2D14','\u10B5':'\u2D15','\u10B6':'\u2D16','\u10B7':'\u2D17','\u10B8':'\u2D18','\u10B9':'\u2D19','\u10BA':'\u2D1A','\u10BB':'\u2D1B','\u10BC':'\u2D1C','\u10BD':'\u2D1D','\u10BE':'\u2D1E','\u10BF':'\u2D1F','\u10C0':'\u2D20','\u10C1':'\u2D21','\u10C2':'\u2D22','\u10C3':'\u2D23','\u10C4':'\u2D24','\u10C5':'\u2D25','\u10C7':'\u2D27','\u10CD':'\u2D2D','\u1E00':'\u1E01','\u1E02':'\u1E03','\u1E04':'\u1E05','\u1E06':'\u1E07','\u1E08':'\u1E09','\u1E0A':'\u1E0B','\u1E0C':'\u1E0D','\u1E0E':'\u1E0F','\u1E10':'\u1E11','\u1E12':'\u1E13','\u1E14':'\u1E15','\u1E16':'\u1E17','\u1E18':'\u1E19','\u1E1A':'\u1E1B','\u1E1C':'\u1E1D','\u1E1E':'\u1E1F','\u1E20':'\u1E21','\u1E22':'\u1E23','\u1E24':'\u1E25','\u1E26':'\u1E27','\u1E28':'\u1E29','\u1E2A':'\u1E2B','\u1E2C':'\u1E2D','\u1E2E':'\u1E2F','\u1E30':'\u1E31','\u1E32':'\u1E33','\u1E34':'\u1E35','\u1E36':'\u1E37','\u1E38':'\u1E39','\u1E3A':'\u1E3B','\u1E3C':'\u1E3D','\u1E3E':'\u1E3F','\u1E40':'\u1E41','\u1E42':'\u1E43','\u1E44':'\u1E45','\u1E46':'\u1E47','\u1E48':'\u1E49','\u1E4A':'\u1E4B','\u1E4C':'\u1E4D','\u1E4E':'\u1E4F','\u1E50':'\u1E51','\u1E52':'\u1E53','\u1E54':'\u1E55','\u1E56':'\u1E57','\u1E58':'\u1E59','\u1E5A':'\u1E5B','\u1E5C':'\u1E5D','\u1E5E':'\u1E5F','\u1E60':'\u1E61','\u1E62':'\u1E63','\u1E64':'\u1E65','\u1E66':'\u1E67','\u1E68':'\u1E69','\u1E6A':'\u1E6B','\u1E6C':'\u1E6D','\u1E6E':'\u1E6F','\u1E70':'\u1E71','\u1E72':'\u1E73','\u1E74':'\u1E75','\u1E76':'\u1E77','\u1E78':'\u1E79','\u1E7A':'\u1E7B','\u1E7C':'\u1E7D','\u1E7E':'\u1E7F','\u1E80':'\u1E81','\u1E82':'\u1E83','\u1E84':'\u1E85','\u1E86':'\u1E87','\u1E88':'\u1E89','\u1E8A':'\u1E8B','\u1E8C':'\u1E8D','\u1E8E':'\u1E8F','\u1E90':'\u1E91','\u1E92':'\u1E93','\u1E94':'\u1E95','\u1E9B':'\u1E61','\u1EA0':'\u1EA1','\u1EA2':'\u1EA3','\u1EA4':'\u1EA5','\u1EA6':'\u1EA7','\u1EA8':'\u1EA9','\u1EAA':'\u1EAB','\u1EAC':'\u1EAD','\u1EAE':'\u1EAF','\u1EB0':'\u1EB1','\u1EB2':'\u1EB3','\u1EB4':'\u1EB5','\u1EB6':'\u1EB7','\u1EB8':'\u1EB9','\u1EBA':'\u1EBB','\u1EBC':'\u1EBD','\u1EBE':'\u1EBF','\u1EC0':'\u1EC1','\u1EC2':'\u1EC3','\u1EC4':'\u1EC5','\u1EC6':'\u1EC7','\u1EC8':'\u1EC9','\u1ECA':'\u1ECB','\u1ECC':'\u1ECD','\u1ECE':'\u1ECF','\u1ED0':'\u1ED1','\u1ED2':'\u1ED3','\u1ED4':'\u1ED5','\u1ED6':'\u1ED7','\u1ED8':'\u1ED9','\u1EDA':'\u1EDB','\u1EDC':'\u1EDD','\u1EDE':'\u1EDF','\u1EE0':'\u1EE1','\u1EE2':'\u1EE3','\u1EE4':'\u1EE5','\u1EE6':'\u1EE7','\u1EE8':'\u1EE9','\u1EEA':'\u1EEB','\u1EEC':'\u1EED','\u1EEE':'\u1EEF','\u1EF0':'\u1EF1','\u1EF2':'\u1EF3','\u1EF4':'\u1EF5','\u1EF6':'\u1EF7','\u1EF8':'\u1EF9','\u1EFA':'\u1EFB','\u1EFC':'\u1EFD','\u1EFE':'\u1EFF','\u1F08':'\u1F00','\u1F09':'\u1F01','\u1F0A':'\u1F02','\u1F0B':'\u1F03','\u1F0C':'\u1F04','\u1F0D':'\u1F05','\u1F0E':'\u1F06','\u1F0F':'\u1F07','\u1F18':'\u1F10','\u1F19':'\u1F11','\u1F1A':'\u1F12','\u1F1B':'\u1F13','\u1F1C':'\u1F14','\u1F1D':'\u1F15','\u1F28':'\u1F20','\u1F29':'\u1F21','\u1F2A':'\u1F22','\u1F2B':'\u1F23','\u1F2C':'\u1F24','\u1F2D':'\u1F25','\u1F2E':'\u1F26','\u1F2F':'\u1F27','\u1F38':'\u1F30','\u1F39':'\u1F31','\u1F3A':'\u1F32','\u1F3B':'\u1F33','\u1F3C':'\u1F34','\u1F3D':'\u1F35','\u1F3E':'\u1F36','\u1F3F':'\u1F37','\u1F48':'\u1F40','\u1F49':'\u1F41','\u1F4A':'\u1F42','\u1F4B':'\u1F43','\u1F4C':'\u1F44','\u1F4D':'\u1F45','\u1F59':'\u1F51','\u1F5B':'\u1F53','\u1F5D':'\u1F55','\u1F5F':'\u1F57','\u1F68':'\u1F60','\u1F69':'\u1F61','\u1F6A':'\u1F62','\u1F6B':'\u1F63','\u1F6C':'\u1F64','\u1F6D':'\u1F65','\u1F6E':'\u1F66','\u1F6F':'\u1F67','\u1FB8':'\u1FB0','\u1FB9':'\u1FB1','\u1FBA':'\u1F70','\u1FBB':'\u1F71','\u1FBE':'\u03B9','\u1FC8':'\u1F72','\u1FC9':'\u1F73','\u1FCA':'\u1F74','\u1FCB':'\u1F75','\u1FD8':'\u1FD0','\u1FD9':'\u1FD1','\u1FDA':'\u1F76','\u1FDB':'\u1F77','\u1FE8':'\u1FE0','\u1FE9':'\u1FE1','\u1FEA':'\u1F7A','\u1FEB':'\u1F7B','\u1FEC':'\u1FE5','\u1FF8':'\u1F78','\u1FF9':'\u1F79','\u1FFA':'\u1F7C','\u1FFB':'\u1F7D','\u2126':'\u03C9','\u212A':'k','\u212B':'\xE5','\u2132':'\u214E','\u2160':'\u2170','\u2161':'\u2171','\u2162':'\u2172','\u2163':'\u2173','\u2164':'\u2174','\u2165':'\u2175','\u2166':'\u2176','\u2167':'\u2177','\u2168':'\u2178','\u2169':'\u2179','\u216A':'\u217A','\u216B':'\u217B','\u216C':'\u217C','\u216D':'\u217D','\u216E':'\u217E','\u216F':'\u217F','\u2183':'\u2184','\u24B6':'\u24D0','\u24B7':'\u24D1','\u24B8':'\u24D2','\u24B9':'\u24D3','\u24BA':'\u24D4','\u24BB':'\u24D5','\u24BC':'\u24D6','\u24BD':'\u24D7','\u24BE':'\u24D8','\u24BF':'\u24D9','\u24C0':'\u24DA','\u24C1':'\u24DB','\u24C2':'\u24DC','\u24C3':'\u24DD','\u24C4':'\u24DE','\u24C5':'\u24DF','\u24C6':'\u24E0','\u24C7':'\u24E1','\u24C8':'\u24E2','\u24C9':'\u24E3','\u24CA':'\u24E4','\u24CB':'\u24E5','\u24CC':'\u24E6','\u24CD':'\u24E7','\u24CE':'\u24E8','\u24CF':'\u24E9','\u2C00':'\u2C30','\u2C01':'\u2C31','\u2C02':'\u2C32','\u2C03':'\u2C33','\u2C04':'\u2C34','\u2C05':'\u2C35','\u2C06':'\u2C36','\u2C07':'\u2C37','\u2C08':'\u2C38','\u2C09':'\u2C39','\u2C0A':'\u2C3A','\u2C0B':'\u2C3B','\u2C0C':'\u2C3C','\u2C0D':'\u2C3D','\u2C0E':'\u2C3E','\u2C0F':'\u2C3F','\u2C10':'\u2C40','\u2C11':'\u2C41','\u2C12':'\u2C42','\u2C13':'\u2C43','\u2C14':'\u2C44','\u2C15':'\u2C45','\u2C16':'\u2C46','\u2C17':'\u2C47','\u2C18':'\u2C48','\u2C19':'\u2C49','\u2C1A':'\u2C4A','\u2C1B':'\u2C4B','\u2C1C':'\u2C4C','\u2C1D':'\u2C4D','\u2C1E':'\u2C4E','\u2C1F':'\u2C4F','\u2C20':'\u2C50','\u2C21':'\u2C51','\u2C22':'\u2C52','\u2C23':'\u2C53','\u2C24':'\u2C54','\u2C25':'\u2C55','\u2C26':'\u2C56','\u2C27':'\u2C57','\u2C28':'\u2C58','\u2C29':'\u2C59','\u2C2A':'\u2C5A','\u2C2B':'\u2C5B','\u2C2C':'\u2C5C','\u2C2D':'\u2C5D','\u2C2E':'\u2C5E','\u2C60':'\u2C61','\u2C62':'\u026B','\u2C63':'\u1D7D','\u2C64':'\u027D','\u2C67':'\u2C68','\u2C69':'\u2C6A','\u2C6B':'\u2C6C','\u2C6D':'\u0251','\u2C6E':'\u0271','\u2C6F':'\u0250','\u2C70':'\u0252','\u2C72':'\u2C73','\u2C75':'\u2C76','\u2C7E':'\u023F','\u2C7F':'\u0240','\u2C80':'\u2C81','\u2C82':'\u2C83','\u2C84':'\u2C85','\u2C86':'\u2C87','\u2C88':'\u2C89','\u2C8A':'\u2C8B','\u2C8C':'\u2C8D','\u2C8E':'\u2C8F','\u2C90':'\u2C91','\u2C92':'\u2C93','\u2C94':'\u2C95','\u2C96':'\u2C97','\u2C98':'\u2C99','\u2C9A':'\u2C9B','\u2C9C':'\u2C9D','\u2C9E':'\u2C9F','\u2CA0':'\u2CA1','\u2CA2':'\u2CA3','\u2CA4':'\u2CA5','\u2CA6':'\u2CA7','\u2CA8':'\u2CA9','\u2CAA':'\u2CAB','\u2CAC':'\u2CAD','\u2CAE':'\u2CAF','\u2CB0':'\u2CB1','\u2CB2':'\u2CB3','\u2CB4':'\u2CB5','\u2CB6':'\u2CB7','\u2CB8':'\u2CB9','\u2CBA':'\u2CBB','\u2CBC':'\u2CBD','\u2CBE':'\u2CBF','\u2CC0':'\u2CC1','\u2CC2':'\u2CC3','\u2CC4':'\u2CC5','\u2CC6':'\u2CC7','\u2CC8':'\u2CC9','\u2CCA':'\u2CCB','\u2CCC':'\u2CCD','\u2CCE':'\u2CCF','\u2CD0':'\u2CD1','\u2CD2':'\u2CD3','\u2CD4':'\u2CD5','\u2CD6':'\u2CD7','\u2CD8':'\u2CD9','\u2CDA':'\u2CDB','\u2CDC':'\u2CDD','\u2CDE':'\u2CDF','\u2CE0':'\u2CE1','\u2CE2':'\u2CE3','\u2CEB':'\u2CEC','\u2CED':'\u2CEE','\u2CF2':'\u2CF3','\uA640':'\uA641','\uA642':'\uA643','\uA644':'\uA645','\uA646':'\uA647','\uA648':'\uA649','\uA64A':'\uA64B','\uA64C':'\uA64D','\uA64E':'\uA64F','\uA650':'\uA651','\uA652':'\uA653','\uA654':'\uA655','\uA656':'\uA657','\uA658':'\uA659','\uA65A':'\uA65B','\uA65C':'\uA65D','\uA65E':'\uA65F','\uA660':'\uA661','\uA662':'\uA663','\uA664':'\uA665','\uA666':'\uA667','\uA668':'\uA669','\uA66A':'\uA66B','\uA66C':'\uA66D','\uA680':'\uA681','\uA682':'\uA683','\uA684':'\uA685','\uA686':'\uA687','\uA688':'\uA689','\uA68A':'\uA68B','\uA68C':'\uA68D','\uA68E':'\uA68F','\uA690':'\uA691','\uA692':'\uA693','\uA694':'\uA695','\uA696':'\uA697','\uA698':'\uA699','\uA69A':'\uA69B','\uA722':'\uA723','\uA724':'\uA725','\uA726':'\uA727','\uA728':'\uA729','\uA72A':'\uA72B','\uA72C':'\uA72D','\uA72E':'\uA72F','\uA732':'\uA733','\uA734':'\uA735','\uA736':'\uA737','\uA738':'\uA739','\uA73A':'\uA73B','\uA73C':'\uA73D','\uA73E':'\uA73F','\uA740':'\uA741','\uA742':'\uA743','\uA744':'\uA745','\uA746':'\uA747','\uA748':'\uA749','\uA74A':'\uA74B','\uA74C':'\uA74D','\uA74E':'\uA74F','\uA750':'\uA751','\uA752':'\uA753','\uA754':'\uA755','\uA756':'\uA757','\uA758':'\uA759','\uA75A':'\uA75B','\uA75C':'\uA75D','\uA75E':'\uA75F','\uA760':'\uA761','\uA762':'\uA763','\uA764':'\uA765','\uA766':'\uA767','\uA768':'\uA769','\uA76A':'\uA76B','\uA76C':'\uA76D','\uA76E':'\uA76F','\uA779':'\uA77A','\uA77B':'\uA77C','\uA77D':'\u1D79','\uA77E':'\uA77F','\uA780':'\uA781','\uA782':'\uA783','\uA784':'\uA785','\uA786':'\uA787','\uA78B':'\uA78C','\uA78D':'\u0265','\uA790':'\uA791','\uA792':'\uA793','\uA796':'\uA797','\uA798':'\uA799','\uA79A':'\uA79B','\uA79C':'\uA79D','\uA79E':'\uA79F','\uA7A0':'\uA7A1','\uA7A2':'\uA7A3','\uA7A4':'\uA7A5','\uA7A6':'\uA7A7','\uA7A8':'\uA7A9','\uA7AA':'\u0266','\uA7AB':'\u025C','\uA7AC':'\u0261','\uA7AD':'\u026C','\uA7B0':'\u029E','\uA7B1':'\u0287','\uFF21':'\uFF41','\uFF22':'\uFF42','\uFF23':'\uFF43','\uFF24':'\uFF44','\uFF25':'\uFF45','\uFF26':'\uFF46','\uFF27':'\uFF47','\uFF28':'\uFF48','\uFF29':'\uFF49','\uFF2A':'\uFF4A','\uFF2B':'\uFF4B','\uFF2C':'\uFF4C','\uFF2D':'\uFF4D','\uFF2E':'\uFF4E','\uFF2F':'\uFF4F','\uFF30':'\uFF50','\uFF31':'\uFF51','\uFF32':'\uFF52','\uFF33':'\uFF53','\uFF34':'\uFF54','\uFF35':'\uFF55','\uFF36':'\uFF56','\uFF37':'\uFF57','\uFF38':'\uFF58','\uFF39':'\uFF59','\uFF3A':'\uFF5A','\uD801\uDC00':'\uD801\uDC28','\uD801\uDC01':'\uD801\uDC29','\uD801\uDC02':'\uD801\uDC2A','\uD801\uDC03':'\uD801\uDC2B','\uD801\uDC04':'\uD801\uDC2C','\uD801\uDC05':'\uD801\uDC2D','\uD801\uDC06':'\uD801\uDC2E','\uD801\uDC07':'\uD801\uDC2F','\uD801\uDC08':'\uD801\uDC30','\uD801\uDC09':'\uD801\uDC31','\uD801\uDC0A':'\uD801\uDC32','\uD801\uDC0B':'\uD801\uDC33','\uD801\uDC0C':'\uD801\uDC34','\uD801\uDC0D':'\uD801\uDC35','\uD801\uDC0E':'\uD801\uDC36','\uD801\uDC0F':'\uD801\uDC37','\uD801\uDC10':'\uD801\uDC38','\uD801\uDC11':'\uD801\uDC39','\uD801\uDC12':'\uD801\uDC3A','\uD801\uDC13':'\uD801\uDC3B','\uD801\uDC14':'\uD801\uDC3C','\uD801\uDC15':'\uD801\uDC3D','\uD801\uDC16':'\uD801\uDC3E','\uD801\uDC17':'\uD801\uDC3F','\uD801\uDC18':'\uD801\uDC40','\uD801\uDC19':'\uD801\uDC41','\uD801\uDC1A':'\uD801\uDC42','\uD801\uDC1B':'\uD801\uDC43','\uD801\uDC1C':'\uD801\uDC44','\uD801\uDC1D':'\uD801\uDC45','\uD801\uDC1E':'\uD801\uDC46','\uD801\uDC1F':'\uD801\uDC47','\uD801\uDC20':'\uD801\uDC48','\uD801\uDC21':'\uD801\uDC49','\uD801\uDC22':'\uD801\uDC4A','\uD801\uDC23':'\uD801\uDC4B','\uD801\uDC24':'\uD801\uDC4C','\uD801\uDC25':'\uD801\uDC4D','\uD801\uDC26':'\uD801\uDC4E','\uD801\uDC27':'\uD801\uDC4F','\uD806\uDCA0':'\uD806\uDCC0','\uD806\uDCA1':'\uD806\uDCC1','\uD806\uDCA2':'\uD806\uDCC2','\uD806\uDCA3':'\uD806\uDCC3','\uD806\uDCA4':'\uD806\uDCC4','\uD806\uDCA5':'\uD806\uDCC5','\uD806\uDCA6':'\uD806\uDCC6','\uD806\uDCA7':'\uD806\uDCC7','\uD806\uDCA8':'\uD806\uDCC8','\uD806\uDCA9':'\uD806\uDCC9','\uD806\uDCAA':'\uD806\uDCCA','\uD806\uDCAB':'\uD806\uDCCB','\uD806\uDCAC':'\uD806\uDCCC','\uD806\uDCAD':'\uD806\uDCCD','\uD806\uDCAE':'\uD806\uDCCE','\uD806\uDCAF':'\uD806\uDCCF','\uD806\uDCB0':'\uD806\uDCD0','\uD806\uDCB1':'\uD806\uDCD1','\uD806\uDCB2':'\uD806\uDCD2','\uD806\uDCB3':'\uD806\uDCD3','\uD806\uDCB4':'\uD806\uDCD4','\uD806\uDCB5':'\uD806\uDCD5','\uD806\uDCB6':'\uD806\uDCD6','\uD806\uDCB7':'\uD806\uDCD7','\uD806\uDCB8':'\uD806\uDCD8','\uD806\uDCB9':'\uD806\uDCD9','\uD806\uDCBA':'\uD806\uDCDA','\uD806\uDCBB':'\uD806\uDCDB','\uD806\uDCBC':'\uD806\uDCDC','\uD806\uDCBD':'\uD806\uDCDD','\uD806\uDCBE':'\uD806\uDCDE','\uD806\uDCBF':'\uD806\uDCDF','\xDF':'ss','\u0130':'i\u0307','\u0149':'\u02BCn','\u01F0':'j\u030C','\u0390':'\u03B9\u0308\u0301','\u03B0':'\u03C5\u0308\u0301','\u0587':'\u0565\u0582','\u1E96':'h\u0331','\u1E97':'t\u0308','\u1E98':'w\u030A','\u1E99':'y\u030A','\u1E9A':'a\u02BE','\u1E9E':'ss','\u1F50':'\u03C5\u0313','\u1F52':'\u03C5\u0313\u0300','\u1F54':'\u03C5\u0313\u0301','\u1F56':'\u03C5\u0313\u0342','\u1F80':'\u1F00\u03B9','\u1F81':'\u1F01\u03B9','\u1F82':'\u1F02\u03B9','\u1F83':'\u1F03\u03B9','\u1F84':'\u1F04\u03B9','\u1F85':'\u1F05\u03B9','\u1F86':'\u1F06\u03B9','\u1F87':'\u1F07\u03B9','\u1F88':'\u1F00\u03B9','\u1F89':'\u1F01\u03B9','\u1F8A':'\u1F02\u03B9','\u1F8B':'\u1F03\u03B9','\u1F8C':'\u1F04\u03B9','\u1F8D':'\u1F05\u03B9','\u1F8E':'\u1F06\u03B9','\u1F8F':'\u1F07\u03B9','\u1F90':'\u1F20\u03B9','\u1F91':'\u1F21\u03B9','\u1F92':'\u1F22\u03B9','\u1F93':'\u1F23\u03B9','\u1F94':'\u1F24\u03B9','\u1F95':'\u1F25\u03B9','\u1F96':'\u1F26\u03B9','\u1F97':'\u1F27\u03B9','\u1F98':'\u1F20\u03B9','\u1F99':'\u1F21\u03B9','\u1F9A':'\u1F22\u03B9','\u1F9B':'\u1F23\u03B9','\u1F9C':'\u1F24\u03B9','\u1F9D':'\u1F25\u03B9','\u1F9E':'\u1F26\u03B9','\u1F9F':'\u1F27\u03B9','\u1FA0':'\u1F60\u03B9','\u1FA1':'\u1F61\u03B9','\u1FA2':'\u1F62\u03B9','\u1FA3':'\u1F63\u03B9','\u1FA4':'\u1F64\u03B9','\u1FA5':'\u1F65\u03B9','\u1FA6':'\u1F66\u03B9','\u1FA7':'\u1F67\u03B9','\u1FA8':'\u1F60\u03B9','\u1FA9':'\u1F61\u03B9','\u1FAA':'\u1F62\u03B9','\u1FAB':'\u1F63\u03B9','\u1FAC':'\u1F64\u03B9','\u1FAD':'\u1F65\u03B9','\u1FAE':'\u1F66\u03B9','\u1FAF':'\u1F67\u03B9','\u1FB2':'\u1F70\u03B9','\u1FB3':'\u03B1\u03B9','\u1FB4':'\u03AC\u03B9','\u1FB6':'\u03B1\u0342','\u1FB7':'\u03B1\u0342\u03B9','\u1FBC':'\u03B1\u03B9','\u1FC2':'\u1F74\u03B9','\u1FC3':'\u03B7\u03B9','\u1FC4':'\u03AE\u03B9','\u1FC6':'\u03B7\u0342','\u1FC7':'\u03B7\u0342\u03B9','\u1FCC':'\u03B7\u03B9','\u1FD2':'\u03B9\u0308\u0300','\u1FD3':'\u03B9\u0308\u0301','\u1FD6':'\u03B9\u0342','\u1FD7':'\u03B9\u0308\u0342','\u1FE2':'\u03C5\u0308\u0300','\u1FE3':'\u03C5\u0308\u0301','\u1FE4':'\u03C1\u0313','\u1FE6':'\u03C5\u0342','\u1FE7':'\u03C5\u0308\u0342','\u1FF2':'\u1F7C\u03B9','\u1FF3':'\u03C9\u03B9','\u1FF4':'\u03CE\u03B9','\u1FF6':'\u03C9\u0342','\u1FF7':'\u03C9\u0342\u03B9','\u1FFC':'\u03C9\u03B9','\uFB00':'ff','\uFB01':'fi','\uFB02':'fl','\uFB03':'ffi','\uFB04':'ffl','\uFB05':'st','\uFB06':'st','\uFB13':'\u0574\u0576','\uFB14':'\u0574\u0565','\uFB15':'\u0574\u056B','\uFB16':'\u057E\u0576','\uFB17':'\u0574\u056D'}; -var reWhite = /^[ \t\r\n]/; - // Normalize reference label: collapse internal whitespace // to single space, remove leading/trailing whitespace, case fold. module.exports = function(string) { -- cgit 0.0.5-2-1-g0f52 From 666c2be2ffdf865644fec34ac13e1ebd2e4d9fc8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 12:44:26 -0800 Subject: eslint fix. --- js/test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/test.js b/js/test.js index 3f1b6ff54d..bcde0aa4d1 100755 --- a/js/test.js +++ b/js/test.js @@ -52,13 +52,13 @@ var showSpaces = function(s) { .replace(/ /g, '␣'); }; -var pathologicalTest = function(testcase, results) { +var pathologicalTest = function(testcase, res) { cursor.write(testcase.name + ' '); console.time(' elapsed time'); var actual = writer.render(reader.parse(testcase.input)); if (actual === testcase.expected) { cursor.green().write('✓\n').reset(); - results.passed += 1; + res.passed += 1; } else { cursor.red().write('✘\n'); cursor.cyan(); @@ -70,7 +70,7 @@ var pathologicalTest = function(testcase, results) { cursor.write(showSpaces(actual)); cursor.write('\n'); cursor.reset(); - results.failed += 1; + res.failed += 1; } console.timeEnd(' elapsed time'); }; -- cgit 0.0.5-2-1-g0f52 From e44eb21a558f6b80c0c038602baf77223709f1d9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 12:47:04 -0800 Subject: Removed setType(), replaced getType() with type(). --- js/lib/blocks.js | 37 +++++++++++++++++++++---------------- js/lib/html.js | 6 +++--- js/lib/inlines.js | 2 +- js/lib/node.js | 8 ++------ js/lib/xml.js | 2 +- 5 files changed, 28 insertions(+), 27 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index d8c25a1188..0224f74c3b 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -106,7 +106,7 @@ var endsWithBlankLine = function(block) { if (block.last_line_blank) { return true; } - var t = block.getType(); + var t = block.type(); if (t === 'List' || t === 'Item') { block = block.lastChild; } else { @@ -124,7 +124,7 @@ var breakOutOfLists = function(block) { var b = block; var last_list = null; do { - if (b.getType() === 'List') { + if (b.type() === 'List') { last_list = b; } b = b.parent; @@ -154,7 +154,7 @@ var addLine = function(ln, offset) { // accept children, close and finalize it and try its parent, // and so on til we find a block that can accept children. var addChild = function(tag, offset) { - while (!canContain(this.tip.getType(), tag)) { + while (!canContain(this.tip.type(), tag)) { this.finalize(this.tip, this.lineNumber - 1); } @@ -272,7 +272,7 @@ var incorporateLine = function(ln) { } indent = first_nonspace - offset; - switch (container.getType()) { + switch (container.type()) { case 'BlockQuote': if (indent <= 3 && ln.charCodeAt(first_nonspace) === C_GREATERTHAN) { offset = first_nonspace + 1; @@ -357,7 +357,7 @@ var incorporateLine = function(ln) { // Unless last matched container is a code block, try new container starts, // adding children to the last matched container: - var t = container.getType(); + var t = container.type(); while (t !== 'CodeBlock' && t !== 'HtmlBlock' && // this is a little performance optimization: matchAt(reMaybeSpecial, ln, offset) !== -1) { @@ -375,7 +375,7 @@ var incorporateLine = function(ln) { if (indent >= CODE_INDENT) { // indented code - if (this.tip.getType() !== 'Paragraph' && !blank) { + if (this.tip.type() !== 'Paragraph' && !blank) { offset += CODE_INDENT; allClosed = allClosed || this.closeUnmatchedBlocks(); @@ -427,13 +427,18 @@ var incorporateLine = function(ln) { offset -= indent; // back up so spaces are part of block break; - } else if (container.getType() === 'Paragraph' && + } else if (t === 'Paragraph' && container.strings.length === 1 && ((match = ln.slice(offset).match(reSetextHeaderLine)))) { // setext header line allClosed = allClosed || this.closeUnmatchedBlocks(); - container.setType('Header'); // convert Paragraph to SetextHeader - container.level = match[0][0] === '=' ? 1 : 2; + var header = new Node('Header', container.sourcepos); + header.level = match[0][0] === '=' ? 1 : 2; + header.strings = container.strings; + container.insertAfter(header); + container.unlink(); + container = header; + this.tip = header; offset = ln.length; break; @@ -450,7 +455,7 @@ var incorporateLine = function(ln) { offset += data.padding; // add the list if needed - if (container.getType() !== 'List' || + if (t !== 'List' || !(listsMatch(container.list_data, data))) { container = this.addChild('List', first_nonspace); container.list_data = data; @@ -482,7 +487,7 @@ var incorporateLine = function(ln) { // First check for a lazy paragraph continuation: if (!allClosed && !blank && - this.tip.getType() === 'Paragraph' && + this.tip.type() === 'Paragraph' && this.tip.strings.length > 0) { // lazy paragraph continuation @@ -493,12 +498,12 @@ var incorporateLine = function(ln) { // finalize any blocks not matched allClosed = allClosed || this.closeUnmatchedBlocks(); + t = container.type(); // Block quote lines are never blank as they start with > // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. We also don't set last_line_blank // on an empty list item. - var t = container.getType(); container.last_line_blank = blank && !(t === 'BlockQuote' || t === 'Header' || @@ -513,7 +518,7 @@ var incorporateLine = function(ln) { cont = cont.parent; } - switch (container.getType()) { + switch (t) { case 'HtmlBlock': this.addLine(ln, offset); break; @@ -541,7 +546,7 @@ var incorporateLine = function(ln) { break; default: - if (acceptsLines(container.getType())) { + if (acceptsLines(t)) { this.addLine(ln, first_nonspace); } else if (blank) { break; @@ -570,7 +575,7 @@ var finalize = function(block, lineNumber) { block.open = false; block.sourcepos[1] = [lineNumber, this.lastLineLength + 1]; - switch (block.getType()) { + switch (block.type()) { case 'Paragraph': block.string_content = block.strings.join('\n'); @@ -647,7 +652,7 @@ var processInlines = function(block) { var walker = block.walker(); while ((event = walker.next())) { node = event.node; - t = node.getType(); + t = node.type(); if (!event.entering && (t === 'Paragraph' || t === 'Header')) { this.inlineParser.parse(node, this.refmap); } diff --git a/js/lib/html.js b/js/lib/html.js index fd0aaf1d13..e39b4ac8e8 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -68,7 +68,7 @@ var renderNodes = function(block) { } } - switch (node.getType()) { + switch (node.type()) { case 'Text': out(esc(node.literal)); break; @@ -134,7 +134,7 @@ var renderNodes = function(block) { case 'Paragraph': grandparent = node.parent.parent; if (grandparent !== null && - grandparent.getType() === 'List') { + grandparent.type() === 'List') { if (grandparent.list_data.tight) { break; } @@ -221,7 +221,7 @@ var renderNodes = function(block) { break; default: - throw "Unknown node type " + node.getType(); + throw "Unknown node type " + node.type(); } } diff --git a/js/lib/inlines.js b/js/lib/inlines.js index cfe085f807..f12e29723e 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -658,7 +658,7 @@ var parseNewline = function(block) { this.pos += 1; // assume we're at a \n // check previous node for trailing spaces var lastc = block.lastChild; - if (lastc && lastc.getType() === 'Text') { + if (lastc && lastc.type() === 'Text') { var sps = reFinalSpace.exec(lastc.literal)[0].length; if (sps > 0) { lastc.literal = lastc.literal.replace(reFinalSpace, ''); diff --git a/js/lib/node.js b/js/lib/node.js index 12bb89e185..65f381401d 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -89,13 +89,9 @@ Node.prototype.isContainer = function() { return isContainer(this); }; -Node.prototype.getType = function() { +Node.prototype.type = function() { return this.t; -} - -Node.prototype.setType = function(newtype) { - this.t = newtype; -} +}; Node.prototype.appendChild = function(child) { child.unlink(); diff --git a/js/lib/xml.js b/js/lib/xml.js index 8e4b68900b..64422c97dd 100644 --- a/js/lib/xml.js +++ b/js/lib/xml.js @@ -72,7 +72,7 @@ var renderNodes = function(block) { while ((event = walker.next())) { entering = event.entering; node = event.node; - nodetype = node.getType(); + nodetype = node.type(); container = node.isContainer(); selfClosing = nodetype === 'HorizontalRule' || nodetype === 'Hardbreak' || -- cgit 0.0.5-2-1-g0f52 From 2ecc11ea86b1d220f8d089a1680307a35437f6ef Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 13:07:31 -0800 Subject: Renamed .t to ._type to mark it as "hidden." --- js/lib/node.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index 65f381401d..9b77e2ffce 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -1,7 +1,7 @@ "use strict"; function isContainer(node) { - switch (node.t) { + switch (node._type) { case 'Document': case 'BlockQuote': case 'List': @@ -63,7 +63,7 @@ var NodeWalker = function(root) { }; var Node = function(nodeType, sourcepos) { - this.t = nodeType; + this._type = nodeType; this.parent = null; this.firstChild = null; this.lastChild = null; @@ -90,7 +90,7 @@ Node.prototype.isContainer = function() { }; Node.prototype.type = function() { - return this.t; + return this._type; }; Node.prototype.appendChild = function(child) { @@ -221,7 +221,7 @@ module.exports = Node; var event; while (event = walker.next()) { - console.log(event.entering, event.node.t); + console.log(event.entering, event.node.type()); } */ -- cgit 0.0.5-2-1-g0f52 From 8e51ff90c5d6fb2b8c4cec54a77cfd45f7eb8e8f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 13:24:59 -0800 Subject: Removed Node.toObject(). --- js/lib/node.js | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/js/lib/node.js b/js/lib/node.js index 9b77e2ffce..8e424a213d 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -168,50 +168,6 @@ Node.prototype.walker = function() { return walker; }; -var nodeToObject = function(node) { - var result = {}; - var propsToShow = ['t', 'literal', 'list_data', 'sourcepos', - 'info', 'level', 'title', 'destination']; - - for (var i = 0, len = propsToShow.length; i < len; i++) { - var prop = propsToShow[i]; - if (node[prop] !== undefined) { - result[prop] = node[prop]; - } - } - return result; -}; - -Node.prototype.toObject = function() { - var childrenStack = []; - var walker = this.walker(); - var event; - while ((event = walker.next())) { - var node = event.node; - var entering = event.entering; - var container = node.isContainer(); - var astnode; - - if (container) { - if (entering) { - childrenStack.push([]); - } else { - astnode = nodeToObject(node); - astnode.children = childrenStack.pop(); - if (childrenStack.length > 0) { - childrenStack[childrenStack.length - 1].push(astnode); - } - } - } else { - astnode = nodeToObject(node); - childrenStack[childrenStack.length - 1].push(astnode); - } - } - - return astnode; - -}; - module.exports = Node; -- cgit 0.0.5-2-1-g0f52 From 604c15c301a634a7c237e2336296d2d86d771fcf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 14:17:27 -0800 Subject: Rename sourcepos -> _sourcepos, added sourcepos() accessor. --- js/lib/blocks.js | 6 +++--- js/lib/html.js | 2 +- js/lib/node.js | 6 +++++- js/lib/xml.js | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 0224f74c3b..d5ad49eb69 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -432,7 +432,7 @@ var incorporateLine = function(ln) { ((match = ln.slice(offset).match(reSetextHeaderLine)))) { // setext header line allClosed = allClosed || this.closeUnmatchedBlocks(); - var header = new Node('Header', container.sourcepos); + var header = new Node('Header', container.sourcepos()); header.level = match[0][0] === '=' ? 1 : 2; header.strings = container.strings; container.insertAfter(header); @@ -510,7 +510,7 @@ var incorporateLine = function(ln) { (t === 'CodeBlock' && container.fence_length > 0) || (t === 'Item' && !container.firstChild && - container.sourcepos[0][0] === this.lineNumber)); + container.sourcepos()[0][0] === this.lineNumber)); var cont = container; while (cont.parent) { @@ -573,7 +573,7 @@ var finalize = function(block, lineNumber) { return 0; } block.open = false; - block.sourcepos[1] = [lineNumber, this.lastLineLength + 1]; + block.sourcepos()[1] = [lineNumber, this.lastLineLength + 1]; switch (block.type()) { case 'Paragraph': diff --git a/js/lib/html.js b/js/lib/html.js index e39b4ac8e8..608193d40a 100644 --- a/js/lib/html.js +++ b/js/lib/html.js @@ -60,7 +60,7 @@ var renderNodes = function(block) { attrs = []; if (options.sourcepos) { - var pos = node.sourcepos; + var pos = node.sourcepos(); if (pos) { attrs.push(['data-sourcepos', String(pos[0][0]) + ':' + String(pos[0][1]) + '-' + String(pos[1][0]) + ':' + diff --git a/js/lib/node.js b/js/lib/node.js index 8e424a213d..3041f154c3 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -69,7 +69,7 @@ var Node = function(nodeType, sourcepos) { this.lastChild = null; this.prev = null; this.next = null; - this.sourcepos = sourcepos; + this._sourcepos = sourcepos; this.last_line_blank = false; this.open = true; this.strings = null; @@ -93,6 +93,10 @@ Node.prototype.type = function() { return this._type; }; +Node.prototype.sourcepos = function() { + return this._sourcepos; +}; + Node.prototype.appendChild = function(child) { child.unlink(); child.parent = this; diff --git a/js/lib/xml.js b/js/lib/xml.js index 64422c97dd..d7f732cdd7 100644 --- a/js/lib/xml.js +++ b/js/lib/xml.js @@ -123,7 +123,7 @@ var renderNodes = function(block) { break; } if (options.sourcepos) { - var pos = node.sourcepos; + var pos = node.sourcepos(); if (pos) { attrs.push(['data-sourcepos', String(pos[0][0]) + ':' + String(pos[0][1]) + '-' + String(pos[1][0]) + ':' + -- cgit 0.0.5-2-1-g0f52 From 75007b20b4071ad4c6f7168b98c3218739693769 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 16:08:03 -0800 Subject: Re-added tools/{makespec.py, template.html, template.tex}. These were inadvertently dropped in the commit that described them as being moved to tools/. --- tools/makespec.py | 165 +++++++++++++++++++++++++++++++++++++ tools/mkcasefold.pl | 0 tools/template.html | 110 +++++++++++++++++++++++++ tools/template.tex | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 504 insertions(+) create mode 100755 tools/makespec.py mode change 100644 => 100755 tools/mkcasefold.pl create mode 100644 tools/template.html create mode 100644 tools/template.tex diff --git a/tools/makespec.py b/tools/makespec.py new file mode 100755 index 0000000000..84663f29da --- /dev/null +++ b/tools/makespec.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 +import re +import sys +from subprocess import * +from string import Template + +if len(sys.argv) == 2: + specformat = sys.argv[1] + if not (specformat in ["html", "markdown"]): + sys.stderr.write("Format must be html or markdown\n") + exit(1) +else: + sys.stderr.write("Usage: makespec.py [html|markdown]\n") + exit(1) + +def toIdentifier(s): + return re.sub(r'\s+', '-', re.sub(r'\W+', ' ', s.strip().lower())) + +def parseYaml(yaml): + metadata = {} + def parseField(match): + key = match.group(1) + val = match.group(2).strip() + if re.match(r'^\'', val): + val = val[1:len(val) - 1] + metadata[key] = val + fieldre = re.compile('^(\w+):(.*)$', re.MULTILINE) + re.sub(fieldre, parseField, yaml) + return metadata + +def pipe_through_prog(prog, text): + p1 = Popen(prog.split(), stdout=PIPE, stdin=PIPE, stderr=PIPE) + [result, err] = p1.communicate(input=text.encode('utf-8')) + return [p1.returncode, result.decode('utf-8'), err] + +def replaceAnchor(match): + refs.append("[{0}]: #{1}".format(match.group(1), match.group(2))) + if specformat == "html": + return '{0}'.format(match.group(1), match.group(2)) + else: + return match.group(0) + +stage = 0 +example = 0 +section = "" +sections = [] +mdlines = [] +refs = [] +lastnum = [] +finishedMeta = False +yamllines = [] + +with open('spec.txt', 'r', encoding='utf-8') as spec: + for ln in spec: + if not finishedMeta: + yamllines.append(ln) + if re.match(r'^\.\.\.$', ln): + finishedMeta = True + elif re.match(r'^\.$', ln): + if stage == 0: + example += 1 + mdlines.append("\n
                          \n".format(example, section)) + mdlines.append("\n\n".format(example)) + mdlines.append("````````````````````````````````````````````````````````` markdown\n") + stage = 1 + elif stage == 1: + mdlines.append("`````````````````````````````````````````````````````````\n\n") + mdlines.append("````````````````````````````````````````````````````````` html\n") + stage = 2 + elif stage == 2: + mdlines.append("`````````````````````````````````````````````````````````\n\n") + mdlines.append("
                          \n") + stage = 0 + else: + sys.stderr.out("Encountered unknown stage {0}\n".format(stage)) + sys.exit(1) + else: + if stage == 0: + match = re.match(r'^(#{1,6}) *(.*)', ln) + if match: + section = match.group(2) + lastlevel = len(lastnum) + level = len(match.group(1)) + if re.search(r'{-}$', section): + section = re.sub(r' *{-} *$', '', section) + if specformat == 'html': + ln = re.sub(r' *{-} *$', '', ln) + number = '' + else: + if lastlevel == level: + lastnum[level - 1] = lastnum[level - 1] + 1 + elif lastlevel < level: + while len(lastnum) < level: + lastnum.append(1) + else: # lastlevel > level + lastnum = lastnum[0:level] + lastnum[level - 1] = lastnum[level - 1] + 1 + number = '.'.join([str(x) for x in lastnum]) + ident = toIdentifier(section) + ln = re.sub(r' ', ' ' + number + ' ', ln, count=1) + sections.append(dict(level=level, + contents=section, + ident=ident, + number=number)) + refs.append("[{0}]: #{1}".format(section, ident)) + ln = re.sub(r'# +', '# '.format(ident), + ln, count=1) + else: + ln = re.sub(r'\[([^]]*)\]\(@([^)]*)\)', replaceAnchor, ln) + else: + ln = re.sub(r' ', '␣', ln) + mdlines.append(ln) + +mdtext = ''.join(mdlines) + '\n\n' + '\n'.join(refs) + '\n' +yaml = ''.join(yamllines) +metadata = parseYaml(yaml) + +if specformat == "markdown": + sys.stdout.write(yaml + '\n\n' + mdtext) +elif specformat == "html": + with open("template.html", "r", encoding="utf-8") as templatefile: + template = Template(templatefile.read()) + toclines = [] + for section in sections: + indent = ' ' * (section['level'] - 1) + toclines.append(indent + '* [' + section['number'] + ' ' + + section['contents'] + '](#' + section['ident'] + ')') + toc = '
                          \n\n' + '\n'.join(toclines) + '\n\n
                          \n\n' + prog = "build/src/cmark" + [retcode, result, err] = pipe_through_prog(prog, toc + mdtext) + if retcode == 0: + result = re.sub(r'␣', ' ', result) + result = re.sub(r'<\/a> ', + "", result) + # put plural s inside links for better visuals: + result = re.sub(r'<\/a>s', "s", result) + sys.stdout.write(template.substitute(metadata, body=result)) + + # check for errors: + idents = [] + for ident in re.findall(r'id="([^"]*)"', result): + if ident in idents: + sys.stderr.write("WARNING: duplicate identifier '" + ident + + "'\n") + else: + idents.append(ident) + for href in re.findall(r'href="#([^"]*)"', result): + if not (href in idents): + sys.stderr.write("WARNING: internal link with no anchor '" + + href + "'\n") + reftexts = [] + for ref in refs: + ref = re.sub('].*',']',ref).upper() + if ref in reftexts: + sys.stderr.write("WARNING: duplicate reference link '" + + ref + "'\n") + else: + reftexts.append(ref) + + else: + sys.stderr.write("Error converting markdown version of spec:\n") + sys.stderr.write(err) + exit(1) + +exit(0) diff --git a/tools/mkcasefold.pl b/tools/mkcasefold.pl old mode 100644 new mode 100755 diff --git a/tools/template.html b/tools/template.html new file mode 100644 index 0000000000..a5cc081b81 --- /dev/null +++ b/tools/template.html @@ -0,0 +1,110 @@ + + + + +${title} + + + + + +

                          ${title}

                          +
                          Version ${version} (${date})
                          +
                          + ${author} +
                          + +
                          +${body} + + diff --git a/tools/template.tex b/tools/template.tex new file mode 100644 index 0000000000..d083b7234a --- /dev/null +++ b/tools/template.tex @@ -0,0 +1,229 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} +$if(fontfamily)$ +\usepackage{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex + \ifxetex + \usepackage{mathspec} + \usepackage{xltxtra,xunicode} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} + \newcommand{\euro}{€} +$if(mainfont)$ + \setmainfont{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi]{$monofont$} +$endif$ +$if(mathfont)$ + \setmathfont(Digits,Latin,Greek){$mathfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{\usepackage{microtype}}{} +\usepackage[margin=1in]{geometry} +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage{biblatex} +$if(biblio-files)$ +\bibliography{$biblio-files$} +$endif$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +\usepackage{fancyvrb} +\usepackage{color,framed} +\newcommand{\VerbBar}{|} +\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\small} +% Add ',fontsize=\small' for more characters per line +\definecolor{shadecolor}{gray}{1} +\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}} +\newcommand{\NormalTok}[1]{{#1}} +\let\KeywordTok\NormalTok +\let\DataTypeTok\NormalTok +\let\DecValTok\NormalTok +\let\BaseNTok\NormalTok +\let\FloatTok\NormalTok +\let\CharTok\NormalTok +\let\StringTok\NormalTok +\let\CommentTok\NormalTok +\let\OtherTok\NormalTok +\let\AlertTok\NormalTok +\let\FunctionTok\NormalTok +\let\RegionMarkerTok\NormalTok +\let\ErrorTok\NormalTok +%\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} +%\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} +%\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +%\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +%\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +%\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +%\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +%\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} +%\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} +%\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} +%\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} +%\newcommand{\RegionMarkerTok}[1]{{#1}} +%\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +\ifxetex + \usepackage[setpagesize=false, % page size defined by xetex + unicode=false, % unicode breaks when used with xetex + xetex]{hyperref} +\else + \usepackage[unicode=true]{hyperref} +\fi +\hypersetup{breaklinks=true, + bookmarks=true, + pdfauthor={$author-meta$}, + pdftitle={$title-meta$}, + colorlinks=true, + citecolor=$if(citecolor)$$citecolor$$else$blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, + linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, + pdfborder={0 0 0}} +\urlstyle{same} % don't use monospace font for urls +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +\setlength{\emergencystretch}{3em} % prevent overfull lines +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(lang)$ +\ifxetex + \usepackage{polyglossia} + \setmainlanguage{$mainlang$} +\else + \usepackage[$lang$]{babel} +\fi +$endif$ + +\usepackage{titlesec} +\titleformat{\chapter}[hang]{\Huge\bfseries}{\thechapter\ }{0pt}{\Huge\bfseries} + +\usepackage{fancyhdr} +\pagestyle{fancy} +\pagenumbering{arabic} +\lhead{\itshape $title$} +\chead{} +\rhead{\itshape{\nouppercase{\rightmark}}} +\lfoot{v$version$ ($date$)} +\cfoot{} +\rfoot{\thepage} + +$if(title)$ +\title{$title$$if(subtitle)$\\\vspace{0.5em}{\large $subtitle$}$endif$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +\date{$date$} +$for(header-includes)$ +$header-includes$ +$endfor$ + +\begin{document} +$if(title)$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +\hypersetup{linkcolor=black} +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$body$ + +$if(natbib)$ +$if(biblio-files)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$biblio-files$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} -- cgit 0.0.5-2-1-g0f52 From c74b87f9bbdf8a147b892bd0ac48dbd01a0297cf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Jan 2015 16:09:58 -0800 Subject: Fixed (interact) link in template.html. This broke when we switched from pandoc to cmark for the spec, because the class on code changed from 'markdown' to 'language-markdown'. --- tools/template.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/template.html b/tools/template.html index a5cc081b81..10bbdb53b2 100644 --- a/tools/template.html +++ b/tools/template.html @@ -71,13 +71,13 @@ a.footnoteRef > sup { - - - - - - - -
                          -
                          -
                          -

                          commonmark.js dingus

                          -
                          -
                          -
                          -
                          -

                          clear 

                          - -
                            -
                            Parsed in - ms. Rendered in ms.
                            -
                            -
                            - -
                            -
                            -
                            -
                            -
                            -
                            -
                            -
                            -
                            -
                            -
                            -
                            - - diff --git a/js/.npmignore b/js/.npmignore deleted file mode 100644 index d73e230f8f..0000000000 --- a/js/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -commonmark.js -*.tgz -index.html diff --git a/js/LICENSE b/js/LICENSE deleted file mode 100644 index bb8c36f58d..0000000000 --- a/js/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of John MacFarlane nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/js/README.md b/js/README.md deleted file mode 100644 index c80ea9ea96..0000000000 --- a/js/README.md +++ /dev/null @@ -1,132 +0,0 @@ -CommonMark -========== - -CommonMark is a rationalized version of Markdown syntax, -with a [spec][the spec] and BSD3-licensed reference -implementations in C and JavaScript. - - [the spec]: http://spec.commonmark.org - -For more information, see . - -To play with this library without installing it, see -the live dingus at . - -Installing ----------- - -You can install the library using `npm`: - - npm install commonmark - -This package includes the commonmark library and a -command-line executable, `commonmark`. - -For client-side use, you can do `make browserify` to produce -a standalone JavaScript file `js/dist/commonmark.js`, -suitable for linking into a web page, or just fetch -. - -To run tests for the JavaScript library: - - make testjs - -To run benchmarks against some other JavaScript converters: - - npm install showdown marked markdown-it - make benchjs - -To start an interactive dingus that you can use to try out -the library: - - make dingus - -Usage ------ - -Instead of converting Markdown directly to HTML, as most converters -do, `commonmark.js` parses Markdown to an AST (abstract syntax tree), -and then renders this AST as HTML. This opens up the possibility of -manipulating the AST between parsing and rendering. For example, one -could transform emphasis into ALL CAPS. - -Here's a basic usage example: - - var reader = new commonmark.Parser(); - var writer = new commonmark.HtmlRenderer(); - var parsed = reader.parse("Hello *world*"); // parsed is a 'Node' tree - // transform parsed if you like... - var result = writer.render(parsed); // result is a string - - diff --git a/js/bench.js b/js/bench.js deleted file mode 100644 index 3493dbb688..0000000000 --- a/js/bench.js +++ /dev/null @@ -1,43 +0,0 @@ -var Benchmark = require('benchmark').Benchmark; -var suite = new Benchmark.Suite(); -var fs = require('fs'); -var commonmark = require('./lib/index.js'); -// npm install showdown -var Showdown = require('showdown').converter; -// npm install marked -var marked = require('marked'); -// npm install markdown-it -var markdownit = require('markdown-it')('commonmark'); - -var benchfile = process.argv[2]; - -var contents = fs.readFileSync(benchfile, 'utf8'); - -suite.add('commonmark.js markdown->html', function() { - "use strict"; - var doc = new commonmark.Parser().parse(contents); - var renderer = new commonmark.HtmlRenderer(); - renderer.render(doc); -}) - -.add('showdown.js markdown->html', function() { - "use strict"; - var converter = new Showdown(); - converter.makeHtml(contents); -}) - -.add('marked.js markdown->html', function() { - "use strict"; - marked(contents); -}) - -.add('markdown-it markdown->html', function() { - "use strict"; - markdownit.render(contents); -}) - -.on('cycle', function(event) { - "use strict"; - console.log(String(event.target)); -}) -.run(); diff --git a/js/bin/commonmark b/js/bin/commonmark deleted file mode 100755 index 629cd501cf..0000000000 --- a/js/bin/commonmark +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env node -"use strict"; - -var util = require('util'); -var fs = require('fs'); -var commonmark = require('../lib/index.js'); - -var inps = []; -var file; -var files = []; -var options = { sourcepos: false, time: false }; -var format = 'html'; -var i; - -for (i = 2; i < process.argv.length; i++) { - var arg = process.argv[i]; - if (arg === '--ast') { - format = 'ast'; - } else if (arg === '--xml') { - format = 'xml'; - } else if (arg === '--time') { - options.time = true; - } else if (arg === '--sourcepos') { - options.sourcepos = true; - } else if (/^--/.test(arg)) { - process.stderr.write('Unknown option ' + arg + '\n'); - process.exit(1); - } else { - files.push(arg); - } -} - -var parser = new commonmark.Parser(options); -var renderer; - -if (format === 'html') { - renderer = new commonmark.HtmlRenderer(options); -} else if (format === 'xml') { - renderer = new commonmark.XmlRenderer(options); -} else if (format === 'ast') { - renderer = { render: function(node) { - return util.inspect(node, null, 20, true) + '\n'; - }, - options: {} }; -} - -if (files.length === 0) { - files = ['/dev/stdin']; -} - -for (i = 0; i < files.length; i++) { - file = files[i]; - inps.push(fs.readFileSync(file, 'utf8')); -} - -var inp = inps.join('\n'); -var doc = parser.parse(inp); - -var rendered = renderer.render(doc); - -if (!options.time) { process.stdout.write(rendered); } diff --git a/js/changelog.js.txt b/js/changelog.js.txt deleted file mode 100644 index e9297840d6..0000000000 --- a/js/changelog.js.txt +++ /dev/null @@ -1,38 +0,0 @@ -[0.16] - - * Improved regex for HTML comments (#263). - * Fixed CDATA regex (#267). - * Use linked list instead of arrays in AST: the same doubly linked - node structure as cmark uses. This simplifies some code and - eliminates the need for recursive algorithms, so we can render - deeply-nested structures without stack overflows. - * Use `children` instead of `label` (in Image and Link), - `inline_content` (in Paragraph), and `c` (in Emph and Strong). - * Renamed the `c` property to `literal` to match `libcmark`. - * Use `literal` rather than `string_content` property for code - blocks, HTML. `string_content` is reserved for raw string - content that has yet to be parsed as inlines. - * Improved end lines (#276). - * Added a node walker, for easy AST traversal (see `node.js`). - * Regularized position information into a `sourcepos` property. - Added end column information. - * Renamed `html-renderer.js` to `html.js`. - * Replace NUL characters with U+FFFD, as per spec. - * Optimized code, resulting in significant performance gains. - (We've gone from being twice as fast as showdown.js to being - three times as fast, on par with marked.) - * Made `tight` a property of `list_data` rather than `Node`. - * Added options to renderer, parser objections. - * Added a `--sourcepos` command line option to `js/bin/commonmark`. - * HTML renderer now throws an error on unknown tag type (which - indicates a programming error). - * Removed `ansi.js` code from the source tree. The test suite now - uses its own mini ansi colors implementation. - * Added `--time` option to `js/bin/commonmark`. - * Added an XML renderer (XML representation of the AST, matching - `Commonmark.dtd`). - * Changed `url` property to `destination` to match `cmark` and spec. - * Added `js/common.js` to hold some common code, like string - unescaping and URI normalization. - * Use `decodeURI` instead of `unescape`. - * Added some "pathological" test cases to test suite. diff --git a/js/eslint.json b/js/eslint.json deleted file mode 100644 index 42ba06f962..0000000000 --- a/js/eslint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "env": { - "browser": false, - "node": true, - }, - "rules": { - "no-constant-condition": false, - "no-underscore-dangle": false, - "camelcase": false, - "quotes": false, - "no-process-exit": false, - "no-empty": false, - "new-caps": { - "newIsCap": true, - "capIsNew": true, - "newIsCapExceptions": [], - "capIsNewExceptions": [] - } - } -} diff --git a/js/index.html b/js/index.html deleted file mode 100644 index 3f6c904fe1..0000000000 --- a/js/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - CommonMark dingus - - - -

                            The most recent version of the CommonMark dingus can be found -at /dingus.html/.

                            - - diff --git a/js/lib/blocks.js b/js/lib/blocks.js deleted file mode 100644 index 4b36ac6ec7..0000000000 --- a/js/lib/blocks.js +++ /dev/null @@ -1,748 +0,0 @@ -"use strict"; - -var Node = require('./node'); -var unescapeString = require('./common').unescapeString; - -var C_GREATERTHAN = 62; -var C_NEWLINE = 10; -var C_SPACE = 32; -var C_OPEN_BRACKET = 91; - -var CODE_INDENT = 4; - -var InlineParser = require('./inlines'); - -var BLOCKTAGNAME = '(?:article|header|aside|hgroup|iframe|blockquote|hr|body|li|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)'; - -var HTMLBLOCKOPEN = "<(?:" + BLOCKTAGNAME + "[\\s/>]" + "|" + - "/" + BLOCKTAGNAME + "[\\s>]" + "|" + "[?!])"; - -var reHtmlBlockOpen = new RegExp('^' + HTMLBLOCKOPEN, 'i'); - -var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/; - -var reMaybeSpecial = /^[#`~*+_=<>0-9-]/; - -var reNonSpace = /[^ \t\n]/; - -var reBulletListMarker = /^[*+-]( +|$)/; - -var reOrderedListMarker = /^(\d+)([.)])( +|$)/; - -var reATXHeaderMarker = /^#{1,6}(?: +|$)/; - -var reCodeFence = /^`{3,}(?!.*`)|^~{3,}(?!.*~)/; - -var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/; - -var reSetextHeaderLine = /^(?:=+|-+) *$/; - -var reLineEnding = /\r\n|\n|\r/; - -// Returns true if string contains only space characters. -var isBlank = function(s) { - return !(reNonSpace.test(s)); -}; - -var tabSpaces = [' ', ' ', ' ', ' ']; - -// Convert tabs to spaces on each line using a 4-space tab stop. -var detabLine = function(text) { - var start = 0; - var offset; - var lastStop = 0; - - while ((offset = text.indexOf('\t', start)) !== -1) { - var numspaces = (offset - lastStop) % 4; - var spaces = tabSpaces[numspaces]; - text = text.slice(0, offset) + spaces + text.slice(offset + 1); - lastStop = offset + numspaces; - start = lastStop; - } - - return text; -}; - -// Attempt to match a regex in string s at offset offset. -// Return index of match or -1. -var matchAt = function(re, s, offset) { - var res = s.slice(offset).match(re); - if (res === null) { - return -1; - } else { - return offset + res.index; - } -}; - -// destructively trip final blank lines in an array of strings -var stripFinalBlankLines = function(lns) { - var i = lns.length - 1; - while (!reNonSpace.test(lns[i])) { - lns.pop(); - i--; - } -}; - -// DOC PARSER - -// These are methods of a Parser object, defined below. - -// Returns true if parent block can contain child block. -var canContain = function(parent_type, child_type) { - return ( parent_type === 'Document' || - parent_type === 'BlockQuote' || - parent_type === 'Item' || - (parent_type === 'List' && child_type === 'Item') ); -}; - -// Returns true if block type can accept lines of text. -var acceptsLines = function(block_type) { - return ( block_type === 'Paragraph' || - block_type === 'CodeBlock' ); -}; - -// Returns true if block ends with a blank line, descending if needed -// into lists and sublists. -var endsWithBlankLine = function(block) { - while (block) { - if (block._lastLineBlank) { - return true; - } - var t = block.type; - if (t === 'List' || t === 'Item') { - block = block._lastChild; - } else { - break; - } - } - return false; -}; - -// Break out of all containing lists, resetting the tip of the -// document to the parent of the highest list, and finalizing -// all the lists. (This is used to implement the "two blank lines -// break of of all lists" feature.) -var breakOutOfLists = function(block) { - var b = block; - var last_list = null; - do { - if (b.type === 'List') { - last_list = b; - } - b = b._parent; - } while (b); - - if (last_list) { - while (block !== last_list) { - this.finalize(block, this.lineNumber); - block = block._parent; - } - this.finalize(last_list, this.lineNumber); - this.tip = last_list._parent; - } -}; - -// Add a line to the block at the tip. We assume the tip -// can accept lines -- that check should be done before calling this. -var addLine = function(ln) { - this.tip._strings.push(ln.slice(this.offset)); -}; - -// Add block of type tag as a child of the tip. If the tip can't -// accept children, close and finalize it and try its parent, -// and so on til we find a block that can accept children. -var addChild = function(tag, offset) { - while (!canContain(this.tip.type, tag)) { - this.finalize(this.tip, this.lineNumber - 1); - } - - var column_number = offset + 1; // offset 0 = column 1 - var newBlock = new Node(tag, [[this.lineNumber, column_number], [0, 0]]); - newBlock._strings = []; - newBlock._string_content = null; - this.tip.appendChild(newBlock); - this.tip = newBlock; - return newBlock; -}; - -// Parse a list marker and return data on the marker (type, -// start, delimiter, bullet character, padding) or null. -var parseListMarker = function(ln, offset, indent) { - var rest = ln.slice(offset); - var match; - var spaces_after_marker; - var data = { type: null, - tight: true, // lists are tight by default - bulletChar: null, - start: null, - delimiter: null, - padding: null, - markerOffset: indent }; - if (rest.match(reHrule)) { - return null; - } - if ((match = rest.match(reBulletListMarker))) { - spaces_after_marker = match[1].length; - data.type = 'Bullet'; - data.bulletChar = match[0][0]; - - } else if ((match = rest.match(reOrderedListMarker))) { - spaces_after_marker = match[3].length; - data.type = 'Ordered'; - data.start = parseInt(match[1]); - data.delimiter = match[2]; - } else { - return null; - } - var blank_item = match[0].length === rest.length; - if (spaces_after_marker >= 5 || - spaces_after_marker < 1 || - blank_item) { - data.padding = match[0].length - spaces_after_marker + 1; - } else { - data.padding = match[0].length; - } - return data; -}; - -// Returns true if the two list items are of the same type, -// with the same delimiter and bullet character. This is used -// in agglomerating list items into lists. -var listsMatch = function(list_data, item_data) { - return (list_data.type === item_data.type && - list_data.delimiter === item_data.delimiter && - list_data.bulletChar === item_data.bulletChar); -}; - -// Finalize and close any unmatched blocks. Returns true. -var closeUnmatchedBlocks = function() { - // finalize any blocks not matched - while (this.oldtip !== this.lastMatchedContainer) { - var parent = this.oldtip._parent; - this.finalize(this.oldtip, this.lineNumber - 1); - this.oldtip = parent; - } - return true; -}; - -// 'finalize' is run when the block is closed. -// 'continue' is run to check whether the block is continuing -// at a certain line and offset (e.g. whether a block quote -// contains a `>`. It returns 0 for matched, 1 for not matched, -// and 2 for "we've dealt with this line completely, go to next." -var blocks = { - Document: { - continue: function(parser, container, next_nonspace) { - return 0; - }, - finalize: function(parser, block) { - return; - } - }, - List: { - continue: function(parser, container, next_nonspace) { - return 0; - }, - finalize: function(parser, block) { - var item = block._firstChild; - while (item) { - // check for non-final list item ending with blank line: - if (endsWithBlankLine(item) && item._next) { - block._listData.tight = false; - break; - } - // recurse into children of list item, to see if there are - // spaces between any of them: - var subitem = item._firstChild; - while (subitem) { - if (endsWithBlankLine(subitem) && - (item._next || subitem._next)) { - block._listData.tight = false; - break; - } - subitem = subitem._next; - } - item = item._next; - } - } - }, - BlockQuote: { - continue: function(parser, container, next_nonspace) { - var ln = parser.currentLine; - if (next_nonspace - parser.offset <= 3 && - ln.charCodeAt(next_nonspace) === C_GREATERTHAN) { - parser.offset = next_nonspace + 1; - if (ln.charCodeAt(parser.offset) === C_SPACE) { - parser.offset++; - } - } else { - return 1; - } - return 0; - }, - finalize: function(parser, block) { - return; - } - }, - Item: { - continue: function(parser, container, next_nonspace) { - if (next_nonspace === parser.currentLine.length) { // blank - parser.offset = next_nonspace; - } else if (next_nonspace - parser.offset >= - container._listData.markerOffset + - container._listData.padding) { - parser.offset += container._listData.markerOffset + - container._listData.padding; - } else { - return 1; - } - return 0; - }, - finalize: function(parser, block) { - return; - } - }, - Header: { - continue: function(parser, container, next_nonspace) { - // a header can never container > 1 line, so fail to match: - return 1; - }, - finalize: function(parser, block) { - block._string_content = block._strings.join('\n'); - } - }, - HorizontalRule: { - continue: function(parser, container, next_nonspace) { - // an hrule can never container > 1 line, so fail to match: - return 1; - }, - finalize: function(parser, block) { - return; - } - }, - CodeBlock: { - continue: function(parser, container, next_nonspace) { - var ln = parser.currentLine; - var indent = next_nonspace - parser.offset; - if (container._isFenced) { // fenced - var match = (indent <= 3 && - ln.charAt(next_nonspace) === container._fenceChar && - ln.slice(next_nonspace).match(reClosingCodeFence)); - if (match && match[0].length >= container._fenceLength) { - // closing fence - we're at end of line, so we can return - parser.finalize(container, parser.lineNumber); - return 2; - } else { - // skip optional spaces of fence offset - var i = container._fenceOffset; - while (i > 0 && ln.charCodeAt(parser.offset) === C_SPACE) { - parser.offset++; - i--; - } - } - } else { // indented - if (indent >= CODE_INDENT) { - parser.offset += CODE_INDENT; - } else if (next_nonspace === ln.length) { // blank - parser.offset = next_nonspace; - } else { - return 1; - } - } - return 0; - }, - finalize: function(parser, block) { - if (block._isFenced) { // fenced - // first line becomes info string - block.info = unescapeString(block._strings[0].trim()); - if (block._strings.length === 1) { - block._literal = ''; - } else { - block._literal = block._strings.slice(1).join('\n') + '\n'; - } - } else { // indented - stripFinalBlankLines(block._strings); - block._literal = block._strings.join('\n') + '\n'; - } - } - }, - HtmlBlock: { - continue: function(parser, container, next_nonspace) { - return (next_nonspace === parser.currentLine.length ? 1 : 0); - }, - finalize: function(parser, block) { - block._literal = block._strings.join('\n'); - } - }, - Paragraph: { - continue: function(parser, container, next_nonspace) { - return (next_nonspace === parser.currentLine.length ? 1 : 0); - }, - finalize: function(parser, block) { - var pos; - block._string_content = block._strings.join('\n'); - - // try parsing the beginning as link reference definitions: - while (block._string_content.charCodeAt(0) === C_OPEN_BRACKET && - (pos = - parser.inlineParser.parseReference(block._string_content, - parser.refmap))) { - block._string_content = block._string_content.slice(pos); - if (isBlank(block._string_content)) { - block.unlink(); - break; - } - } - } - } -}; - -// Analyze a line of text and update the document appropriately. -// We parse markdown text by calling this on each line of input, -// then finalizing the document. -var incorporateLine = function(ln) { - var all_matched = true; - var next_nonspace; - var match; - var data; - var blank; - var indent; - var allClosed; - - var container = this.doc; - this.oldtip = this.tip; - this.offset = 0; - this.lineNumber += 1; - - // replace NUL characters for security - if (ln.indexOf('\u0000') !== -1) { - ln = ln.replace(/\0/g, '\uFFFD'); - } - - // Convert tabs to spaces: - ln = detabLine(ln); - this.currentLine = ln; - - // For each containing block, try to parse the associated line start. - // Bail out on failure: container will point to the last matching block. - // Set all_matched to false if not all containers match. - var lastChild; - while ((lastChild = container._lastChild) && lastChild._open) { - container = lastChild; - - match = matchAt(reNonSpace, ln, this.offset); - if (match === -1) { - next_nonspace = ln.length; - } else { - next_nonspace = match; - } - - switch (this.blocks[container.type].continue(this, container, next_nonspace)) { - case 0: // we've matched, keep going - break; - case 1: // we've failed to match a block - all_matched = false; - break; - case 2: // we've hit end of line for fenced code close and can return - this.lastLineLength = ln.length - 1; // -1 for newline - return; - default: - throw 'continue returned illegal value, must be 0, 1, or 2'; - } - if (!all_matched) { - container = container._parent; // back up to last matching block - break; - } - } - - blank = next_nonspace === ln.length; - - allClosed = (container === this.oldtip); - this.lastMatchedContainer = container; - - // Check to see if we've hit 2nd blank line; if so break out of list: - if (blank && container._lastLineBlank) { - this.breakOutOfLists(container); - } - - // Unless last matched container is a code block, try new container starts, - // adding children to the last matched container: - while (true) { - var t = container.type; - - match = matchAt(reNonSpace, ln, this.offset); - if (match === -1) { - next_nonspace = ln.length; - blank = true; - break; - } else { - next_nonspace = match; - blank = false; - } - indent = next_nonspace - this.offset; - - if (t === 'CodeBlock' || t === 'HtmlBlock') { - break; - } - - if (indent >= CODE_INDENT) { - // indented code - if (this.tip.type !== 'Paragraph' && !blank) { - this.offset += CODE_INDENT; - allClosed = allClosed || - this.closeUnmatchedBlocks(); - container = this.addChild('CodeBlock', this.offset); - } - break; - } - - // this is a little performance optimization: - if (matchAt(reMaybeSpecial, ln, next_nonspace) === -1) { - break; - } - - this.offset = next_nonspace; - - var cc = ln.charCodeAt(this.offset); - - if (cc === C_GREATERTHAN) { - // blockquote - this.offset += 1; - // optional following space - if (ln.charCodeAt(this.offset) === C_SPACE) { - this.offset++; - } - allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('BlockQuote', next_nonspace); - - } else if ((match = ln.slice(this.offset).match(reATXHeaderMarker))) { - // ATX header - this.offset += match[0].length; - allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('Header', next_nonspace); - container.level = match[0].trim().length; // number of #s - // remove trailing ###s: - container._strings = - [ln.slice(this.offset).replace(/^ *#+ *$/, '').replace(/ +#+ *$/, '')]; - break; - - } else if ((match = ln.slice(this.offset).match(reCodeFence))) { - // fenced code block - var fenceLength = match[0].length; - allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('CodeBlock', next_nonspace); - container._isFenced = true; - container._fenceLength = fenceLength; - container._fenceChar = match[0][0]; - container._fenceOffset = indent; - this.offset += fenceLength; - - } else if (matchAt(reHtmlBlockOpen, ln, this.offset) !== -1) { - // html block - allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('HtmlBlock', this.offset); - this.offset -= indent; // back up so spaces are part of block - break; - - } else if (t === 'Paragraph' && - container._strings.length === 1 && - ((match = ln.slice(this.offset).match(reSetextHeaderLine)))) { - // setext header line - allClosed = allClosed || this.closeUnmatchedBlocks(); - var header = new Node('Header', container.sourcepos); - header.level = match[0][0] === '=' ? 1 : 2; - header._strings = container._strings; - container.insertAfter(header); - container.unlink(); - container = header; - this.tip = header; - this.offset = ln.length; - break; - - } else if (matchAt(reHrule, ln, this.offset) !== -1) { - // hrule - allClosed = allClosed || this.closeUnmatchedBlocks(); - container = this.addChild('HorizontalRule', next_nonspace); - this.offset = ln.length - 1; - break; - - } else if ((data = parseListMarker(ln, this.offset, indent))) { - // list item - allClosed = allClosed || this.closeUnmatchedBlocks(); - this.offset += data.padding; - - // add the list if needed - if (t !== 'List' || - !(listsMatch(container._listData, data))) { - container = this.addChild('List', next_nonspace); - container._listData = data; - } - - // add the list item - container = this.addChild('Item', next_nonspace); - container._listData = data; - - } else { - break; - - } - - } - - // What remains at the offset is a text line. Add the text to the - // appropriate container. - - // First check for a lazy paragraph continuation: - if (!allClosed && !blank && - this.tip.type === 'Paragraph' && - this.tip._strings.length > 0) { - // lazy paragraph continuation - - this.addLine(ln); - - } else { // not a lazy continuation - - // finalize any blocks not matched - allClosed = allClosed || this.closeUnmatchedBlocks(); - if (blank && container.lastChild) { - container.lastChild._lastLineBlank = true; - } - - t = container.type; - - // Block quote lines are never blank as they start with > - // and we don't count blanks in fenced code for purposes of tight/loose - // lists or breaking out of lists. We also don't set _lastLineBlank - // on an empty list item, or if we just closed a fenced block. - var lastLineBlank = blank && - !(t === 'BlockQuote' || - (t === 'CodeBlock' && container._isFenced) || - (t === 'Item' && - !container._firstChild && - container.sourcepos[0][0] === this.lineNumber)); - - // propagate lastLineBlank up through parents: - var cont = container; - while (cont) { - cont._lastLineBlank = lastLineBlank; - cont = cont._parent; - } - - switch (t) { - case 'HtmlBlock': - case 'CodeBlock': - this.addLine(ln); - break; - - case 'Header': - case 'HorizontalRule': - // nothing to do; we already added the contents. - break; - - default: - this.offset = next_nonspace; - if (acceptsLines(t)) { - this.addLine(ln); - } else if (blank) { - break; - } else { - // create paragraph container for line - container = this.addChild('Paragraph', this.offset); - this.addLine(ln); - } - } - } - this.lastLineLength = ln.length - 1; // -1 for newline -}; - -// Finalize a block. Close it and do any necessary postprocessing, -// e.g. creating string_content from strings, setting the 'tight' -// or 'loose' status of a list, and parsing the beginnings -// of paragraphs for reference definitions. Reset the tip to the -// parent of the closed block. -var finalize = function(block, lineNumber) { - var above = block._parent || this.top; - block._open = false; - block.sourcepos[1] = [lineNumber, this.lastLineLength + 1]; - - this.blocks[block.type].finalize(this, block); - - this.tip = above; -}; - -// Walk through a block & children recursively, parsing string content -// into inline content where appropriate. Returns new object. -var processInlines = function(block) { - var node, event, t; - var walker = block.walker(); - while ((event = walker.next())) { - node = event.node; - t = node.type; - if (!event.entering && (t === 'Paragraph' || t === 'Header')) { - this.inlineParser.parse(node, this.refmap); - } - } -}; - -var Document = function() { - var doc = new Node('Document', [[1, 1], [0, 0]]); - doc._string_content = null; - doc._strings = []; - return doc; -}; - -// The main parsing function. Returns a parsed document AST. -var parse = function(input) { - this.doc = new Document(); - this.tip = this.doc; - this.refmap = {}; - if (this.options.time) { console.time("preparing input"); } - var lines = input.split(reLineEnding); - var len = lines.length; - if (input.charCodeAt(input.length - 1) === C_NEWLINE) { - // ignore last blank line created by final newline - len -= 1; - } - if (this.options.time) { console.timeEnd("preparing input"); } - if (this.options.time) { console.time("block parsing"); } - for (var i = 0; i < len; i++) { - this.incorporateLine(lines[i]); - } - while (this.tip) { - this.finalize(this.tip, len); - } - if (this.options.time) { console.timeEnd("block parsing"); } - if (this.options.time) { console.time("inline parsing"); } - this.processInlines(this.doc); - if (this.options.time) { console.timeEnd("inline parsing"); } - return this.doc; -}; - - -// The Parser object. -function Parser(options){ - return { - doc: new Document(), - blocks: blocks, - tip: this.doc, - oldtip: this.doc, - currentLine: "", - lineNumber: 0, - offset: 0, - lastMatchedContainer: this.doc, - refmap: {}, - lastLineLength: 0, - inlineParser: new InlineParser(), - breakOutOfLists: breakOutOfLists, - addLine: addLine, - addChild: addChild, - incorporateLine: incorporateLine, - finalize: finalize, - processInlines: processInlines, - closeUnmatchedBlocks: closeUnmatchedBlocks, - parse: parse, - options: options || {} - }; -} - -module.exports = Parser; diff --git a/js/lib/common.js b/js/lib/common.js deleted file mode 100644 index c365e534ab..0000000000 --- a/js/lib/common.js +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; - -var entityToChar = require('./html5-entities.js').entityToChar; - -var ENTITY = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});"; - -var reBackslashOrAmp = /[\\&]/; - -var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]'; - -var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi'); - -var XMLSPECIAL = '[&<>"]'; - -var reXmlSpecial = new RegExp(XMLSPECIAL, 'g'); - -var reXmlSpecialOrEntity = new RegExp(ENTITY + '|' + XMLSPECIAL, 'gi'); - -var unescapeChar = function(s) { - if (s[0] === '\\') { - return s[1]; - } else { - return entityToChar(s); - } -}; - -// Replace entities and backslash escapes with literal characters. -var unescapeString = function(s) { - if (reBackslashOrAmp.test(s)) { - return s.replace(reEntityOrEscapedChar, unescapeChar); - } else { - return s; - } -}; - -var normalizeURI = function(uri) { - try { - return encodeURI(decodeURI(uri)); - } - catch(err) { - return uri; - } -}; - -var replaceUnsafeChar = function(s) { - switch (s) { - case '&': - return '&'; - case '<': - return '<'; - case '>': - return '>'; - case '"': - return '"'; - default: - return s; - } -}; - -var escapeXml = function(s, preserve_entities) { - if (reXmlSpecial.test(s)) { - if (preserve_entities) { - return s.replace(reXmlSpecialOrEntity, replaceUnsafeChar); - } else { - return s.replace(reXmlSpecial, replaceUnsafeChar); - } - } else { - return s; - } -}; - -module.exports = { unescapeString: unescapeString, - normalizeURI: normalizeURI, - escapeXml: escapeXml - }; diff --git a/js/lib/from-code-point.js b/js/lib/from-code-point.js deleted file mode 100644 index a0557b3a1e..0000000000 --- a/js/lib/from-code-point.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - -// derived from https://github.com/mathiasbynens/String.fromCodePoint -/*! http://mths.be/fromcodepoint v0.2.1 by @mathias */ -if (String.fromCodePoint) { - module.exports = function (_) { - try { - return String.fromCodePoint(_); - } catch (e) { - if (e instanceof RangeError) { - return String.fromCharCode(0xFFFD); - } - throw e; - } - }; - -} else { - - var stringFromCharCode = String.fromCharCode; - var floor = Math.floor; - var fromCodePoint = function() { - var MAX_SIZE = 0x4000; - var codeUnits = []; - var highSurrogate; - var lowSurrogate; - var index = -1; - var length = arguments.length; - if (!length) { - return ''; - } - var result = ''; - while (++index < length) { - var codePoint = Number(arguments[index]); - if ( - !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` - codePoint < 0 || // not a valid Unicode code point - codePoint > 0x10FFFF || // not a valid Unicode code point - floor(codePoint) !== codePoint // not an integer - ) { - return String.fromCharCode(0xFFFD); - } - if (codePoint <= 0xFFFF) { // BMP code point - codeUnits.push(codePoint); - } else { // Astral code point; split in surrogate halves - // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - codePoint -= 0x10000; - highSurrogate = (codePoint >> 10) + 0xD800; - lowSurrogate = (codePoint % 0x400) + 0xDC00; - codeUnits.push(highSurrogate, lowSurrogate); - } - if (index + 1 === length || codeUnits.length > MAX_SIZE) { - result += stringFromCharCode.apply(null, codeUnits); - codeUnits.length = 0; - } - } - return result; - }; - module.exports = fromCodePoint; -} diff --git a/js/lib/html.js b/js/lib/html.js deleted file mode 100644 index 74a854c60e..0000000000 --- a/js/lib/html.js +++ /dev/null @@ -1,246 +0,0 @@ -"use strict"; - -var escapeXml = require('./common').escapeXml; - -// Helper function to produce an HTML tag. -var tag = function(name, attrs, selfclosing) { - var result = '<' + name; - if (attrs && attrs.length > 0) { - var i = 0; - var attrib; - while ((attrib = attrs[i]) !== undefined) { - result += ' ' + attrib[0] + '="' + attrib[1] + '"'; - i++; - } - } - if (selfclosing) { - result += ' /'; - } - - result += '>'; - return result; -}; - -var reHtmlTag = /\<[^>]*\>/; - -var renderNodes = function(block) { - - var attrs; - var info_words; - var tagname; - var walker = block.walker(); - var event, node, entering; - var buffer = ""; - var lastOut = "\n"; - var disableTags = 0; - var grandparent; - var out = function(s) { - if (disableTags > 0) { - buffer += s.replace(reHtmlTag, ''); - } else { - buffer += s; - } - lastOut = s; - }; - var esc = this.escape; - var cr = function() { - if (lastOut !== '\n') { - buffer += '\n'; - lastOut = '\n'; - } - }; - - var options = this.options; - - if (options.time) { console.time("rendering"); } - - while ((event = walker.next())) { - entering = event.entering; - node = event.node; - - attrs = []; - if (options.sourcepos) { - var pos = node.sourcepos; - if (pos) { - attrs.push(['data-sourcepos', String(pos[0][0]) + ':' + - String(pos[0][1]) + '-' + String(pos[1][0]) + ':' + - String(pos[1][1])]); - } - } - - switch (node.type) { - case 'Text': - out(esc(node.literal, false)); - break; - - case 'Softbreak': - out(this.softbreak); - break; - - case 'Hardbreak': - out(tag('br', [], true)); - cr(); - break; - - case 'Emph': - out(tag(entering ? 'em' : '/em')); - break; - - case 'Strong': - out(tag(entering ? 'strong' : '/strong')); - break; - - case 'Html': - out(node.literal); - break; - - case 'Link': - if (entering) { - attrs.push(['href', esc(node.destination, true)]); - if (node.title) { - attrs.push(['title', esc(node.title, true)]); - } - out(tag('a', attrs)); - } else { - out(tag('/a')); - } - break; - - case 'Image': - if (entering) { - if (disableTags === 0) { - out('');
-                }
-                disableTags += 1;
-            } else {
-                disableTags -= 1;
-                if (disableTags === 0) {
-                    if (node.title) {
-                        out(''); - } - } - break; - - case 'Code': - out(tag('code') + esc(node.literal, false) + tag('/code')); - break; - - case 'Document': - break; - - case 'Paragraph': - grandparent = node.parent.parent; - if (grandparent !== null && - grandparent.type === 'List') { - if (grandparent.listTight) { - break; - } - } - if (entering) { - cr(); - out(tag('p', attrs)); - } else { - out(tag('/p')); - cr(); - } - break; - - case 'BlockQuote': - if (entering) { - cr(); - out(tag('blockquote', attrs)); - cr(); - } else { - cr(); - out(tag('/blockquote')); - cr(); - } - break; - - case 'Item': - if (entering) { - out(tag('li', attrs)); - } else { - out(tag('/li')); - cr(); - } - break; - - case 'List': - tagname = node.listType === 'Bullet' ? 'ul' : 'ol'; - if (entering) { - var start = node.listStart; - if (start && start > 1) { - attrs.push(['start', start.toString()]); - } - cr(); - out(tag(tagname, attrs)); - cr(); - } else { - cr(); - out(tag('/' + tagname)); - cr(); - } - break; - - case 'Header': - tagname = 'h' + node.level; - if (entering) { - cr(); - out(tag(tagname, attrs)); - } else { - out(tag('/' + tagname)); - cr(); - } - break; - - case 'CodeBlock': - info_words = node.info ? node.info.split(/ +/) : []; - if (info_words.length > 0 && info_words[0].length > 0) { - attrs.push(['class', 'language-' + esc(info_words[0], true)]); - } - cr(); - out(tag('pre') + tag('code', attrs)); - out(esc(node.literal, false)); - out(tag('/code') + tag('/pre')); - cr(); - break; - - case 'HtmlBlock': - cr(); - out(node.literal); - cr(); - break; - - case 'HorizontalRule': - cr(); - out(tag('hr', attrs, true)); - cr(); - break; - - default: - throw "Unknown node type " + node.type; - } - - } - if (options.time) { console.timeEnd("rendering"); } - return buffer; -}; - -// The HtmlRenderer object. -function HtmlRenderer(options){ - return { - // default options: - softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML - // set to "
                            " to make them hard breaks - // set to " " if you want to ignore line wrapping in source - escape: escapeXml, - options: options || {}, - render: renderNodes - }; -} - -module.exports = HtmlRenderer; diff --git a/js/lib/html5-entities.js b/js/lib/html5-entities.js deleted file mode 100644 index 71e9fe6619..0000000000 --- a/js/lib/html5-entities.js +++ /dev/null @@ -1,2154 +0,0 @@ -"use strict"; - -var fromCodePoint = require('./from-code-point'); - -var entities = { - AAacute: 193, - aacute: 225, - Abreve: 258, - abreve: 259, - ac: 8766, - acd: 8767, - acE: 8766, - Acirc: 194, - acirc: 226, - acute: 180, - Acy: 1040, - acy: 1072, - AElig: 198, - aelig: 230, - af: 8289, - Afr: 55349, - afr: 55349, - Agrave: 192, - agrave: 224, - alefsym: 8501, - aleph: 8501, - Alpha: 913, - alpha: 945, - Amacr: 256, - amacr: 257, - amalg: 10815, - amp: 38, - AMP: 38, - andand: 10837, - And: 10835, - and: 8743, - andd: 10844, - andslope: 10840, - andv: 10842, - ang: 8736, - ange: 10660, - angle: 8736, - angmsdaa: 10664, - angmsdab: 10665, - angmsdac: 10666, - angmsdad: 10667, - angmsdae: 10668, - angmsdaf: 10669, - angmsdag: 10670, - angmsdah: 10671, - angmsd: 8737, - angrt: 8735, - angrtvb: 8894, - angrtvbd: 10653, - angsph: 8738, - angst: 197, - angzarr: 9084, - Aogon: 260, - aogon: 261, - Aopf: 55349, - aopf: 55349, - apacir: 10863, - ap: 8776, - apE: 10864, - ape: 8778, - apid: 8779, - apos: 39, - ApplyFunction: 8289, - approx: 8776, - approxeq: 8778, - Aring: 197, - aring: 229, - Ascr: 55349, - ascr: 55349, - Assign: 8788, - ast: 42, - asymp: 8776, - asympeq: 8781, - Atilde: 195, - atilde: 227, - Auml: 196, - auml: 228, - awconint: 8755, - awint: 10769, - backcong: 8780, - backepsilon: 1014, - backprime: 8245, - backsim: 8765, - backsimeq: 8909, - Backslash: 8726, - Barv: 10983, - barvee: 8893, - barwed: 8965, - Barwed: 8966, - barwedge: 8965, - bbrk: 9141, - bbrktbrk: 9142, - bcong: 8780, - Bcy: 1041, - bcy: 1073, - bdquo: 8222, - becaus: 8757, - because: 8757, - Because: 8757, - bemptyv: 10672, - bepsi: 1014, - bernou: 8492, - Bernoullis: 8492, - Beta: 914, - beta: 946, - beth: 8502, - between: 8812, - Bfr: 55349, - bfr: 55349, - bigcap: 8898, - bigcirc: 9711, - bigcup: 8899, - bigodot: 10752, - bigoplus: 10753, - bigotimes: 10754, - bigsqcup: 10758, - bigstar: 9733, - bigtriangledown: 9661, - bigtriangleup: 9651, - biguplus: 10756, - bigvee: 8897, - bigwedge: 8896, - bkarow: 10509, - blacklozenge: 10731, - blacksquare: 9642, - blacktriangle: 9652, - blacktriangledown: 9662, - blacktriangleleft: 9666, - blacktriangleright: 9656, - blank: 9251, - blk12: 9618, - blk14: 9617, - blk34: 9619, - block: 9608, - bne: 61, - bnequiv: 8801, - bNot: 10989, - bnot: 8976, - Bopf: 55349, - bopf: 55349, - bot: 8869, - bottom: 8869, - bowtie: 8904, - boxbox: 10697, - boxdl: 9488, - boxdL: 9557, - boxDl: 9558, - boxDL: 9559, - boxdr: 9484, - boxdR: 9554, - boxDr: 9555, - boxDR: 9556, - boxh: 9472, - boxH: 9552, - boxhd: 9516, - boxHd: 9572, - boxhD: 9573, - boxHD: 9574, - boxhu: 9524, - boxHu: 9575, - boxhU: 9576, - boxHU: 9577, - boxminus: 8863, - boxplus: 8862, - boxtimes: 8864, - boxul: 9496, - boxuL: 9563, - boxUl: 9564, - boxUL: 9565, - boxur: 9492, - boxuR: 9560, - boxUr: 9561, - boxUR: 9562, - boxv: 9474, - boxV: 9553, - boxvh: 9532, - boxvH: 9578, - boxVh: 9579, - boxVH: 9580, - boxvl: 9508, - boxvL: 9569, - boxVl: 9570, - boxVL: 9571, - boxvr: 9500, - boxvR: 9566, - boxVr: 9567, - boxVR: 9568, - bprime: 8245, - breve: 728, - Breve: 728, - brvbar: 166, - bscr: 55349, - Bscr: 8492, - bsemi: 8271, - bsim: 8765, - bsime: 8909, - bsolb: 10693, - bsol: 92, - bsolhsub: 10184, - bull: 8226, - bullet: 8226, - bump: 8782, - bumpE: 10926, - bumpe: 8783, - Bumpeq: 8782, - bumpeq: 8783, - Cacute: 262, - cacute: 263, - capand: 10820, - capbrcup: 10825, - capcap: 10827, - cap: 8745, - Cap: 8914, - capcup: 10823, - capdot: 10816, - CapitalDifferentialD: 8517, - caps: 8745, - caret: 8257, - caron: 711, - Cayleys: 8493, - ccaps: 10829, - Ccaron: 268, - ccaron: 269, - Ccedil: 199, - ccedil: 231, - Ccirc: 264, - ccirc: 265, - Cconint: 8752, - ccups: 10828, - ccupssm: 10832, - Cdot: 266, - cdot: 267, - cedil: 184, - Cedilla: 184, - cemptyv: 10674, - cent: 162, - centerdot: 183, - CenterDot: 183, - cfr: 55349, - Cfr: 8493, - CHcy: 1063, - chcy: 1095, - check: 10003, - checkmark: 10003, - Chi: 935, - chi: 967, - circ: 710, - circeq: 8791, - circlearrowleft: 8634, - circlearrowright: 8635, - circledast: 8859, - circledcirc: 8858, - circleddash: 8861, - CircleDot: 8857, - circledR: 174, - circledS: 9416, - CircleMinus: 8854, - CirclePlus: 8853, - CircleTimes: 8855, - cir: 9675, - cirE: 10691, - cire: 8791, - cirfnint: 10768, - cirmid: 10991, - cirscir: 10690, - ClockwiseContourIntegral: 8754, - CloseCurlyDoubleQuote: 8221, - CloseCurlyQuote: 8217, - clubs: 9827, - clubsuit: 9827, - colon: 58, - Colon: 8759, - Colone: 10868, - colone: 8788, - coloneq: 8788, - comma: 44, - commat: 64, - comp: 8705, - compfn: 8728, - complement: 8705, - complexes: 8450, - cong: 8773, - congdot: 10861, - Congruent: 8801, - conint: 8750, - Conint: 8751, - ContourIntegral: 8750, - copf: 55349, - Copf: 8450, - coprod: 8720, - Coproduct: 8720, - copy: 169, - COPY: 169, - copysr: 8471, - CounterClockwiseContourIntegral: 8755, - crarr: 8629, - cross: 10007, - Cross: 10799, - Cscr: 55349, - cscr: 55349, - csub: 10959, - csube: 10961, - csup: 10960, - csupe: 10962, - ctdot: 8943, - cudarrl: 10552, - cudarrr: 10549, - cuepr: 8926, - cuesc: 8927, - cularr: 8630, - cularrp: 10557, - cupbrcap: 10824, - cupcap: 10822, - CupCap: 8781, - cup: 8746, - Cup: 8915, - cupcup: 10826, - cupdot: 8845, - cupor: 10821, - cups: 8746, - curarr: 8631, - curarrm: 10556, - curlyeqprec: 8926, - curlyeqsucc: 8927, - curlyvee: 8910, - curlywedge: 8911, - curren: 164, - curvearrowleft: 8630, - curvearrowright: 8631, - cuvee: 8910, - cuwed: 8911, - cwconint: 8754, - cwint: 8753, - cylcty: 9005, - dagger: 8224, - Dagger: 8225, - daleth: 8504, - darr: 8595, - Darr: 8609, - dArr: 8659, - dash: 8208, - Dashv: 10980, - dashv: 8867, - dbkarow: 10511, - dblac: 733, - Dcaron: 270, - dcaron: 271, - Dcy: 1044, - dcy: 1076, - ddagger: 8225, - ddarr: 8650, - DD: 8517, - dd: 8518, - DDotrahd: 10513, - ddotseq: 10871, - deg: 176, - Del: 8711, - Delta: 916, - delta: 948, - demptyv: 10673, - dfisht: 10623, - Dfr: 55349, - dfr: 55349, - dHar: 10597, - dharl: 8643, - dharr: 8642, - DiacriticalAcute: 180, - DiacriticalDot: 729, - DiacriticalDoubleAcute: 733, - DiacriticalGrave: 96, - DiacriticalTilde: 732, - diam: 8900, - diamond: 8900, - Diamond: 8900, - diamondsuit: 9830, - diams: 9830, - die: 168, - DifferentialD: 8518, - digamma: 989, - disin: 8946, - div: 247, - divide: 247, - divideontimes: 8903, - divonx: 8903, - DJcy: 1026, - djcy: 1106, - dlcorn: 8990, - dlcrop: 8973, - dollar: 36, - Dopf: 55349, - dopf: 55349, - Dot: 168, - dot: 729, - DotDot: 8412, - doteq: 8784, - doteqdot: 8785, - DotEqual: 8784, - dotminus: 8760, - dotplus: 8724, - dotsquare: 8865, - doublebarwedge: 8966, - DoubleContourIntegral: 8751, - DoubleDot: 168, - DoubleDownArrow: 8659, - DoubleLeftArrow: 8656, - DoubleLeftRightArrow: 8660, - DoubleLeftTee: 10980, - DoubleLongLeftArrow: 10232, - DoubleLongLeftRightArrow: 10234, - DoubleLongRightArrow: 10233, - DoubleRightArrow: 8658, - DoubleRightTee: 8872, - DoubleUpArrow: 8657, - DoubleUpDownArrow: 8661, - DoubleVerticalBar: 8741, - DownArrowBar: 10515, - downarrow: 8595, - DownArrow: 8595, - Downarrow: 8659, - DownArrowUpArrow: 8693, - DownBreve: 785, - downdownarrows: 8650, - downharpoonleft: 8643, - downharpoonright: 8642, - DownLeftRightVector: 10576, - DownLeftTeeVector: 10590, - DownLeftVectorBar: 10582, - DownLeftVector: 8637, - DownRightTeeVector: 10591, - DownRightVectorBar: 10583, - DownRightVector: 8641, - DownTeeArrow: 8615, - DownTee: 8868, - drbkarow: 10512, - drcorn: 8991, - drcrop: 8972, - Dscr: 55349, - dscr: 55349, - DScy: 1029, - dscy: 1109, - dsol: 10742, - Dstrok: 272, - dstrok: 273, - dtdot: 8945, - dtri: 9663, - dtrif: 9662, - duarr: 8693, - duhar: 10607, - dwangle: 10662, - DZcy: 1039, - dzcy: 1119, - dzigrarr: 10239, - Eacute: 201, - eacute: 233, - easter: 10862, - Ecaron: 282, - ecaron: 283, - Ecirc: 202, - ecirc: 234, - ecir: 8790, - ecolon: 8789, - Ecy: 1069, - ecy: 1101, - eDDot: 10871, - Edot: 278, - edot: 279, - eDot: 8785, - ee: 8519, - efDot: 8786, - Efr: 55349, - efr: 55349, - eg: 10906, - Egrave: 200, - egrave: 232, - egs: 10902, - egsdot: 10904, - el: 10905, - Element: 8712, - elinters: 9191, - ell: 8467, - els: 10901, - elsdot: 10903, - Emacr: 274, - emacr: 275, - empty: 8709, - emptyset: 8709, - EmptySmallSquare: 9723, - emptyv: 8709, - EmptyVerySmallSquare: 9643, - emsp13: 8196, - emsp14: 8197, - emsp: 8195, - ENG: 330, - eng: 331, - ensp: 8194, - Eogon: 280, - eogon: 281, - Eopf: 55349, - eopf: 55349, - epar: 8917, - eparsl: 10723, - eplus: 10865, - epsi: 949, - Epsilon: 917, - epsilon: 949, - epsiv: 1013, - eqcirc: 8790, - eqcolon: 8789, - eqsim: 8770, - eqslantgtr: 10902, - eqslantless: 10901, - Equal: 10869, - equals: 61, - EqualTilde: 8770, - equest: 8799, - Equilibrium: 8652, - equiv: 8801, - equivDD: 10872, - eqvparsl: 10725, - erarr: 10609, - erDot: 8787, - escr: 8495, - Escr: 8496, - esdot: 8784, - Esim: 10867, - esim: 8770, - Eta: 919, - eta: 951, - ETH: 208, - eth: 240, - Euml: 203, - euml: 235, - euro: 8364, - excl: 33, - exist: 8707, - Exists: 8707, - expectation: 8496, - exponentiale: 8519, - ExponentialE: 8519, - fallingdotseq: 8786, - Fcy: 1060, - fcy: 1092, - female: 9792, - ffilig: 64259, - fflig: 64256, - ffllig: 64260, - Ffr: 55349, - ffr: 55349, - filig: 64257, - FilledSmallSquare: 9724, - FilledVerySmallSquare: 9642, - fjlig: 102, - flat: 9837, - fllig: 64258, - fltns: 9649, - fnof: 402, - Fopf: 55349, - fopf: 55349, - forall: 8704, - ForAll: 8704, - fork: 8916, - forkv: 10969, - Fouriertrf: 8497, - fpartint: 10765, - frac12: 189, - frac13: 8531, - frac14: 188, - frac15: 8533, - frac16: 8537, - frac18: 8539, - frac23: 8532, - frac25: 8534, - frac34: 190, - frac35: 8535, - frac38: 8540, - frac45: 8536, - frac56: 8538, - frac58: 8541, - frac78: 8542, - frasl: 8260, - frown: 8994, - fscr: 55349, - Fscr: 8497, - gacute: 501, - Gamma: 915, - gamma: 947, - Gammad: 988, - gammad: 989, - gap: 10886, - Gbreve: 286, - gbreve: 287, - Gcedil: 290, - Gcirc: 284, - gcirc: 285, - Gcy: 1043, - gcy: 1075, - Gdot: 288, - gdot: 289, - ge: 8805, - gE: 8807, - gEl: 10892, - gel: 8923, - geq: 8805, - geqq: 8807, - geqslant: 10878, - gescc: 10921, - ges: 10878, - gesdot: 10880, - gesdoto: 10882, - gesdotol: 10884, - gesl: 8923, - gesles: 10900, - Gfr: 55349, - gfr: 55349, - gg: 8811, - Gg: 8921, - ggg: 8921, - gimel: 8503, - GJcy: 1027, - gjcy: 1107, - gla: 10917, - gl: 8823, - glE: 10898, - glj: 10916, - gnap: 10890, - gnapprox: 10890, - gne: 10888, - gnE: 8809, - gneq: 10888, - gneqq: 8809, - gnsim: 8935, - Gopf: 55349, - gopf: 55349, - grave: 96, - GreaterEqual: 8805, - GreaterEqualLess: 8923, - GreaterFullEqual: 8807, - GreaterGreater: 10914, - GreaterLess: 8823, - GreaterSlantEqual: 10878, - GreaterTilde: 8819, - Gscr: 55349, - gscr: 8458, - gsim: 8819, - gsime: 10894, - gsiml: 10896, - gtcc: 10919, - gtcir: 10874, - gt: 62, - GT: 62, - Gt: 8811, - gtdot: 8919, - gtlPar: 10645, - gtquest: 10876, - gtrapprox: 10886, - gtrarr: 10616, - gtrdot: 8919, - gtreqless: 8923, - gtreqqless: 10892, - gtrless: 8823, - gtrsim: 8819, - gvertneqq: 8809, - gvnE: 8809, - Hacek: 711, - hairsp: 8202, - half: 189, - hamilt: 8459, - HARDcy: 1066, - hardcy: 1098, - harrcir: 10568, - harr: 8596, - hArr: 8660, - harrw: 8621, - Hat: 94, - hbar: 8463, - Hcirc: 292, - hcirc: 293, - hearts: 9829, - heartsuit: 9829, - hellip: 8230, - hercon: 8889, - hfr: 55349, - Hfr: 8460, - HilbertSpace: 8459, - hksearow: 10533, - hkswarow: 10534, - hoarr: 8703, - homtht: 8763, - hookleftarrow: 8617, - hookrightarrow: 8618, - hopf: 55349, - Hopf: 8461, - horbar: 8213, - HorizontalLine: 9472, - hscr: 55349, - Hscr: 8459, - hslash: 8463, - Hstrok: 294, - hstrok: 295, - HumpDownHump: 8782, - HumpEqual: 8783, - hybull: 8259, - hyphen: 8208, - Iacute: 205, - iacute: 237, - ic: 8291, - Icirc: 206, - icirc: 238, - Icy: 1048, - icy: 1080, - Idot: 304, - IEcy: 1045, - iecy: 1077, - iexcl: 161, - iff: 8660, - ifr: 55349, - Ifr: 8465, - Igrave: 204, - igrave: 236, - ii: 8520, - iiiint: 10764, - iiint: 8749, - iinfin: 10716, - iiota: 8489, - IJlig: 306, - ijlig: 307, - Imacr: 298, - imacr: 299, - image: 8465, - ImaginaryI: 8520, - imagline: 8464, - imagpart: 8465, - imath: 305, - Im: 8465, - imof: 8887, - imped: 437, - Implies: 8658, - incare: 8453, - 'in': 8712, - infin: 8734, - infintie: 10717, - inodot: 305, - intcal: 8890, - int: 8747, - Int: 8748, - integers: 8484, - Integral: 8747, - intercal: 8890, - Intersection: 8898, - intlarhk: 10775, - intprod: 10812, - InvisibleComma: 8291, - InvisibleTimes: 8290, - IOcy: 1025, - iocy: 1105, - Iogon: 302, - iogon: 303, - Iopf: 55349, - iopf: 55349, - Iota: 921, - iota: 953, - iprod: 10812, - iquest: 191, - iscr: 55349, - Iscr: 8464, - isin: 8712, - isindot: 8949, - isinE: 8953, - isins: 8948, - isinsv: 8947, - isinv: 8712, - it: 8290, - Itilde: 296, - itilde: 297, - Iukcy: 1030, - iukcy: 1110, - Iuml: 207, - iuml: 239, - Jcirc: 308, - jcirc: 309, - Jcy: 1049, - jcy: 1081, - Jfr: 55349, - jfr: 55349, - jmath: 567, - Jopf: 55349, - jopf: 55349, - Jscr: 55349, - jscr: 55349, - Jsercy: 1032, - jsercy: 1112, - Jukcy: 1028, - jukcy: 1108, - Kappa: 922, - kappa: 954, - kappav: 1008, - Kcedil: 310, - kcedil: 311, - Kcy: 1050, - kcy: 1082, - Kfr: 55349, - kfr: 55349, - kgreen: 312, - KHcy: 1061, - khcy: 1093, - KJcy: 1036, - kjcy: 1116, - Kopf: 55349, - kopf: 55349, - Kscr: 55349, - kscr: 55349, - lAarr: 8666, - Lacute: 313, - lacute: 314, - laemptyv: 10676, - lagran: 8466, - Lambda: 923, - lambda: 955, - lang: 10216, - Lang: 10218, - langd: 10641, - langle: 10216, - lap: 10885, - Laplacetrf: 8466, - laquo: 171, - larrb: 8676, - larrbfs: 10527, - larr: 8592, - Larr: 8606, - lArr: 8656, - larrfs: 10525, - larrhk: 8617, - larrlp: 8619, - larrpl: 10553, - larrsim: 10611, - larrtl: 8610, - latail: 10521, - lAtail: 10523, - lat: 10923, - late: 10925, - lates: 10925, - lbarr: 10508, - lBarr: 10510, - lbbrk: 10098, - lbrace: 123, - lbrack: 91, - lbrke: 10635, - lbrksld: 10639, - lbrkslu: 10637, - Lcaron: 317, - lcaron: 318, - Lcedil: 315, - lcedil: 316, - lceil: 8968, - lcub: 123, - Lcy: 1051, - lcy: 1083, - ldca: 10550, - ldquo: 8220, - ldquor: 8222, - ldrdhar: 10599, - ldrushar: 10571, - ldsh: 8626, - le: 8804, - lE: 8806, - LeftAngleBracket: 10216, - LeftArrowBar: 8676, - leftarrow: 8592, - LeftArrow: 8592, - Leftarrow: 8656, - LeftArrowRightArrow: 8646, - leftarrowtail: 8610, - LeftCeiling: 8968, - LeftDoubleBracket: 10214, - LeftDownTeeVector: 10593, - LeftDownVectorBar: 10585, - LeftDownVector: 8643, - LeftFloor: 8970, - leftharpoondown: 8637, - leftharpoonup: 8636, - leftleftarrows: 8647, - leftrightarrow: 8596, - LeftRightArrow: 8596, - Leftrightarrow: 8660, - leftrightarrows: 8646, - leftrightharpoons: 8651, - leftrightsquigarrow: 8621, - LeftRightVector: 10574, - LeftTeeArrow: 8612, - LeftTee: 8867, - LeftTeeVector: 10586, - leftthreetimes: 8907, - LeftTriangleBar: 10703, - LeftTriangle: 8882, - LeftTriangleEqual: 8884, - LeftUpDownVector: 10577, - LeftUpTeeVector: 10592, - LeftUpVectorBar: 10584, - LeftUpVector: 8639, - LeftVectorBar: 10578, - LeftVector: 8636, - lEg: 10891, - leg: 8922, - leq: 8804, - leqq: 8806, - leqslant: 10877, - lescc: 10920, - les: 10877, - lesdot: 10879, - lesdoto: 10881, - lesdotor: 10883, - lesg: 8922, - lesges: 10899, - lessapprox: 10885, - lessdot: 8918, - lesseqgtr: 8922, - lesseqqgtr: 10891, - LessEqualGreater: 8922, - LessFullEqual: 8806, - LessGreater: 8822, - lessgtr: 8822, - LessLess: 10913, - lesssim: 8818, - LessSlantEqual: 10877, - LessTilde: 8818, - lfisht: 10620, - lfloor: 8970, - Lfr: 55349, - lfr: 55349, - lg: 8822, - lgE: 10897, - lHar: 10594, - lhard: 8637, - lharu: 8636, - lharul: 10602, - lhblk: 9604, - LJcy: 1033, - ljcy: 1113, - llarr: 8647, - ll: 8810, - Ll: 8920, - llcorner: 8990, - Lleftarrow: 8666, - llhard: 10603, - lltri: 9722, - Lmidot: 319, - lmidot: 320, - lmoustache: 9136, - lmoust: 9136, - lnap: 10889, - lnapprox: 10889, - lne: 10887, - lnE: 8808, - lneq: 10887, - lneqq: 8808, - lnsim: 8934, - loang: 10220, - loarr: 8701, - lobrk: 10214, - longleftarrow: 10229, - LongLeftArrow: 10229, - Longleftarrow: 10232, - longleftrightarrow: 10231, - LongLeftRightArrow: 10231, - Longleftrightarrow: 10234, - longmapsto: 10236, - longrightarrow: 10230, - LongRightArrow: 10230, - Longrightarrow: 10233, - looparrowleft: 8619, - looparrowright: 8620, - lopar: 10629, - Lopf: 55349, - lopf: 55349, - loplus: 10797, - lotimes: 10804, - lowast: 8727, - lowbar: 95, - LowerLeftArrow: 8601, - LowerRightArrow: 8600, - loz: 9674, - lozenge: 9674, - lozf: 10731, - lpar: 40, - lparlt: 10643, - lrarr: 8646, - lrcorner: 8991, - lrhar: 8651, - lrhard: 10605, - lrm: 8206, - lrtri: 8895, - lsaquo: 8249, - lscr: 55349, - Lscr: 8466, - lsh: 8624, - Lsh: 8624, - lsim: 8818, - lsime: 10893, - lsimg: 10895, - lsqb: 91, - lsquo: 8216, - lsquor: 8218, - Lstrok: 321, - lstrok: 322, - ltcc: 10918, - ltcir: 10873, - lt: 60, - LT: 60, - Lt: 8810, - ltdot: 8918, - lthree: 8907, - ltimes: 8905, - ltlarr: 10614, - ltquest: 10875, - ltri: 9667, - ltrie: 8884, - ltrif: 9666, - ltrPar: 10646, - lurdshar: 10570, - luruhar: 10598, - lvertneqq: 8808, - lvnE: 8808, - macr: 175, - male: 9794, - malt: 10016, - maltese: 10016, - Map: 10501, - map: 8614, - mapsto: 8614, - mapstodown: 8615, - mapstoleft: 8612, - mapstoup: 8613, - marker: 9646, - mcomma: 10793, - Mcy: 1052, - mcy: 1084, - mdash: 8212, - mDDot: 8762, - measuredangle: 8737, - MediumSpace: 8287, - Mellintrf: 8499, - Mfr: 55349, - mfr: 55349, - mho: 8487, - micro: 181, - midast: 42, - midcir: 10992, - mid: 8739, - middot: 183, - minusb: 8863, - minus: 8722, - minusd: 8760, - minusdu: 10794, - MinusPlus: 8723, - mlcp: 10971, - mldr: 8230, - mnplus: 8723, - models: 8871, - Mopf: 55349, - mopf: 55349, - mp: 8723, - mscr: 55349, - Mscr: 8499, - mstpos: 8766, - Mu: 924, - mu: 956, - multimap: 8888, - mumap: 8888, - nabla: 8711, - Nacute: 323, - nacute: 324, - nang: 8736, - nap: 8777, - napE: 10864, - napid: 8779, - napos: 329, - napprox: 8777, - natural: 9838, - naturals: 8469, - natur: 9838, - nbsp: 160, - nbump: 8782, - nbumpe: 8783, - ncap: 10819, - Ncaron: 327, - ncaron: 328, - Ncedil: 325, - ncedil: 326, - ncong: 8775, - ncongdot: 10861, - ncup: 10818, - Ncy: 1053, - ncy: 1085, - ndash: 8211, - nearhk: 10532, - nearr: 8599, - neArr: 8663, - nearrow: 8599, - ne: 8800, - nedot: 8784, - NegativeMediumSpace: 8203, - NegativeThickSpace: 8203, - NegativeThinSpace: 8203, - NegativeVeryThinSpace: 8203, - nequiv: 8802, - nesear: 10536, - nesim: 8770, - NestedGreaterGreater: 8811, - NestedLessLess: 8810, - NewLine: 10, - nexist: 8708, - nexists: 8708, - Nfr: 55349, - nfr: 55349, - ngE: 8807, - nge: 8817, - ngeq: 8817, - ngeqq: 8807, - ngeqslant: 10878, - nges: 10878, - nGg: 8921, - ngsim: 8821, - nGt: 8811, - ngt: 8815, - ngtr: 8815, - nGtv: 8811, - nharr: 8622, - nhArr: 8654, - nhpar: 10994, - ni: 8715, - nis: 8956, - nisd: 8954, - niv: 8715, - NJcy: 1034, - njcy: 1114, - nlarr: 8602, - nlArr: 8653, - nldr: 8229, - nlE: 8806, - nle: 8816, - nleftarrow: 8602, - nLeftarrow: 8653, - nleftrightarrow: 8622, - nLeftrightarrow: 8654, - nleq: 8816, - nleqq: 8806, - nleqslant: 10877, - nles: 10877, - nless: 8814, - nLl: 8920, - nlsim: 8820, - nLt: 8810, - nlt: 8814, - nltri: 8938, - nltrie: 8940, - nLtv: 8810, - nmid: 8740, - NoBreak: 8288, - NonBreakingSpace: 160, - nopf: 55349, - Nopf: 8469, - Not: 10988, - not: 172, - NotCongruent: 8802, - NotCupCap: 8813, - NotDoubleVerticalBar: 8742, - NotElement: 8713, - NotEqual: 8800, - NotEqualTilde: 8770, - NotExists: 8708, - NotGreater: 8815, - NotGreaterEqual: 8817, - NotGreaterFullEqual: 8807, - NotGreaterGreater: 8811, - NotGreaterLess: 8825, - NotGreaterSlantEqual: 10878, - NotGreaterTilde: 8821, - NotHumpDownHump: 8782, - NotHumpEqual: 8783, - notin: 8713, - notindot: 8949, - notinE: 8953, - notinva: 8713, - notinvb: 8951, - notinvc: 8950, - NotLeftTriangleBar: 10703, - NotLeftTriangle: 8938, - NotLeftTriangleEqual: 8940, - NotLess: 8814, - NotLessEqual: 8816, - NotLessGreater: 8824, - NotLessLess: 8810, - NotLessSlantEqual: 10877, - NotLessTilde: 8820, - NotNestedGreaterGreater: 10914, - NotNestedLessLess: 10913, - notni: 8716, - notniva: 8716, - notnivb: 8958, - notnivc: 8957, - NotPrecedes: 8832, - NotPrecedesEqual: 10927, - NotPrecedesSlantEqual: 8928, - NotReverseElement: 8716, - NotRightTriangleBar: 10704, - NotRightTriangle: 8939, - NotRightTriangleEqual: 8941, - NotSquareSubset: 8847, - NotSquareSubsetEqual: 8930, - NotSquareSuperset: 8848, - NotSquareSupersetEqual: 8931, - NotSubset: 8834, - NotSubsetEqual: 8840, - NotSucceeds: 8833, - NotSucceedsEqual: 10928, - NotSucceedsSlantEqual: 8929, - NotSucceedsTilde: 8831, - NotSuperset: 8835, - NotSupersetEqual: 8841, - NotTilde: 8769, - NotTildeEqual: 8772, - NotTildeFullEqual: 8775, - NotTildeTilde: 8777, - NotVerticalBar: 8740, - nparallel: 8742, - npar: 8742, - nparsl: 11005, - npart: 8706, - npolint: 10772, - npr: 8832, - nprcue: 8928, - nprec: 8832, - npreceq: 10927, - npre: 10927, - nrarrc: 10547, - nrarr: 8603, - nrArr: 8655, - nrarrw: 8605, - nrightarrow: 8603, - nRightarrow: 8655, - nrtri: 8939, - nrtrie: 8941, - nsc: 8833, - nsccue: 8929, - nsce: 10928, - Nscr: 55349, - nscr: 55349, - nshortmid: 8740, - nshortparallel: 8742, - nsim: 8769, - nsime: 8772, - nsimeq: 8772, - nsmid: 8740, - nspar: 8742, - nsqsube: 8930, - nsqsupe: 8931, - nsub: 8836, - nsubE: 10949, - nsube: 8840, - nsubset: 8834, - nsubseteq: 8840, - nsubseteqq: 10949, - nsucc: 8833, - nsucceq: 10928, - nsup: 8837, - nsupE: 10950, - nsupe: 8841, - nsupset: 8835, - nsupseteq: 8841, - nsupseteqq: 10950, - ntgl: 8825, - Ntilde: 209, - ntilde: 241, - ntlg: 8824, - ntriangleleft: 8938, - ntrianglelefteq: 8940, - ntriangleright: 8939, - ntrianglerighteq: 8941, - Nu: 925, - nu: 957, - num: 35, - numero: 8470, - numsp: 8199, - nvap: 8781, - nvdash: 8876, - nvDash: 8877, - nVdash: 8878, - nVDash: 8879, - nvge: 8805, - nvgt: 62, - nvHarr: 10500, - nvinfin: 10718, - nvlArr: 10498, - nvle: 8804, - nvlt: 62, - nvltrie: 8884, - nvrArr: 10499, - nvrtrie: 8885, - nvsim: 8764, - nwarhk: 10531, - nwarr: 8598, - nwArr: 8662, - nwarrow: 8598, - nwnear: 10535, - Oacute: 211, - oacute: 243, - oast: 8859, - Ocirc: 212, - ocirc: 244, - ocir: 8858, - Ocy: 1054, - ocy: 1086, - odash: 8861, - Odblac: 336, - odblac: 337, - odiv: 10808, - odot: 8857, - odsold: 10684, - OElig: 338, - oelig: 339, - ofcir: 10687, - Ofr: 55349, - ofr: 55349, - ogon: 731, - Ograve: 210, - ograve: 242, - ogt: 10689, - ohbar: 10677, - ohm: 937, - oint: 8750, - olarr: 8634, - olcir: 10686, - olcross: 10683, - oline: 8254, - olt: 10688, - Omacr: 332, - omacr: 333, - Omega: 937, - omega: 969, - Omicron: 927, - omicron: 959, - omid: 10678, - ominus: 8854, - Oopf: 55349, - oopf: 55349, - opar: 10679, - OpenCurlyDoubleQuote: 8220, - OpenCurlyQuote: 8216, - operp: 10681, - oplus: 8853, - orarr: 8635, - Or: 10836, - or: 8744, - ord: 10845, - order: 8500, - orderof: 8500, - ordf: 170, - ordm: 186, - origof: 8886, - oror: 10838, - orslope: 10839, - orv: 10843, - oS: 9416, - Oscr: 55349, - oscr: 8500, - Oslash: 216, - oslash: 248, - osol: 8856, - Otilde: 213, - otilde: 245, - otimesas: 10806, - Otimes: 10807, - otimes: 8855, - Ouml: 214, - ouml: 246, - ovbar: 9021, - OverBar: 8254, - OverBrace: 9182, - OverBracket: 9140, - OverParenthesis: 9180, - para: 182, - parallel: 8741, - par: 8741, - parsim: 10995, - parsl: 11005, - part: 8706, - PartialD: 8706, - Pcy: 1055, - pcy: 1087, - percnt: 37, - period: 46, - permil: 8240, - perp: 8869, - pertenk: 8241, - Pfr: 55349, - pfr: 55349, - Phi: 934, - phi: 966, - phiv: 981, - phmmat: 8499, - phone: 9742, - Pi: 928, - pi: 960, - pitchfork: 8916, - piv: 982, - planck: 8463, - planckh: 8462, - plankv: 8463, - plusacir: 10787, - plusb: 8862, - pluscir: 10786, - plus: 43, - plusdo: 8724, - plusdu: 10789, - pluse: 10866, - PlusMinus: 177, - plusmn: 177, - plussim: 10790, - plustwo: 10791, - pm: 177, - Poincareplane: 8460, - pointint: 10773, - popf: 55349, - Popf: 8473, - pound: 163, - prap: 10935, - Pr: 10939, - pr: 8826, - prcue: 8828, - precapprox: 10935, - prec: 8826, - preccurlyeq: 8828, - Precedes: 8826, - PrecedesEqual: 10927, - PrecedesSlantEqual: 8828, - PrecedesTilde: 8830, - preceq: 10927, - precnapprox: 10937, - precneqq: 10933, - precnsim: 8936, - pre: 10927, - prE: 10931, - precsim: 8830, - prime: 8242, - Prime: 8243, - primes: 8473, - prnap: 10937, - prnE: 10933, - prnsim: 8936, - prod: 8719, - Product: 8719, - profalar: 9006, - profline: 8978, - profsurf: 8979, - prop: 8733, - Proportional: 8733, - Proportion: 8759, - propto: 8733, - prsim: 8830, - prurel: 8880, - Pscr: 55349, - pscr: 55349, - Psi: 936, - psi: 968, - puncsp: 8200, - Qfr: 55349, - qfr: 55349, - qint: 10764, - qopf: 55349, - Qopf: 8474, - qprime: 8279, - Qscr: 55349, - qscr: 55349, - quaternions: 8461, - quatint: 10774, - quest: 63, - questeq: 8799, - quot: 34, - QUOT: 34, - rAarr: 8667, - race: 8765, - Racute: 340, - racute: 341, - radic: 8730, - raemptyv: 10675, - rang: 10217, - Rang: 10219, - rangd: 10642, - range: 10661, - rangle: 10217, - raquo: 187, - rarrap: 10613, - rarrb: 8677, - rarrbfs: 10528, - rarrc: 10547, - rarr: 8594, - Rarr: 8608, - rArr: 8658, - rarrfs: 10526, - rarrhk: 8618, - rarrlp: 8620, - rarrpl: 10565, - rarrsim: 10612, - Rarrtl: 10518, - rarrtl: 8611, - rarrw: 8605, - ratail: 10522, - rAtail: 10524, - ratio: 8758, - rationals: 8474, - rbarr: 10509, - rBarr: 10511, - RBarr: 10512, - rbbrk: 10099, - rbrace: 125, - rbrack: 93, - rbrke: 10636, - rbrksld: 10638, - rbrkslu: 10640, - Rcaron: 344, - rcaron: 345, - Rcedil: 342, - rcedil: 343, - rceil: 8969, - rcub: 125, - Rcy: 1056, - rcy: 1088, - rdca: 10551, - rdldhar: 10601, - rdquo: 8221, - rdquor: 8221, - rdsh: 8627, - real: 8476, - realine: 8475, - realpart: 8476, - reals: 8477, - Re: 8476, - rect: 9645, - reg: 174, - REG: 174, - ReverseElement: 8715, - ReverseEquilibrium: 8651, - ReverseUpEquilibrium: 10607, - rfisht: 10621, - rfloor: 8971, - rfr: 55349, - Rfr: 8476, - rHar: 10596, - rhard: 8641, - rharu: 8640, - rharul: 10604, - Rho: 929, - rho: 961, - rhov: 1009, - RightAngleBracket: 10217, - RightArrowBar: 8677, - rightarrow: 8594, - RightArrow: 8594, - Rightarrow: 8658, - RightArrowLeftArrow: 8644, - rightarrowtail: 8611, - RightCeiling: 8969, - RightDoubleBracket: 10215, - RightDownTeeVector: 10589, - RightDownVectorBar: 10581, - RightDownVector: 8642, - RightFloor: 8971, - rightharpoondown: 8641, - rightharpoonup: 8640, - rightleftarrows: 8644, - rightleftharpoons: 8652, - rightrightarrows: 8649, - rightsquigarrow: 8605, - RightTeeArrow: 8614, - RightTee: 8866, - RightTeeVector: 10587, - rightthreetimes: 8908, - RightTriangleBar: 10704, - RightTriangle: 8883, - RightTriangleEqual: 8885, - RightUpDownVector: 10575, - RightUpTeeVector: 10588, - RightUpVectorBar: 10580, - RightUpVector: 8638, - RightVectorBar: 10579, - RightVector: 8640, - ring: 730, - risingdotseq: 8787, - rlarr: 8644, - rlhar: 8652, - rlm: 8207, - rmoustache: 9137, - rmoust: 9137, - rnmid: 10990, - roang: 10221, - roarr: 8702, - robrk: 10215, - ropar: 10630, - ropf: 55349, - Ropf: 8477, - roplus: 10798, - rotimes: 10805, - RoundImplies: 10608, - rpar: 41, - rpargt: 10644, - rppolint: 10770, - rrarr: 8649, - Rrightarrow: 8667, - rsaquo: 8250, - rscr: 55349, - Rscr: 8475, - rsh: 8625, - Rsh: 8625, - rsqb: 93, - rsquo: 8217, - rsquor: 8217, - rthree: 8908, - rtimes: 8906, - rtri: 9657, - rtrie: 8885, - rtrif: 9656, - rtriltri: 10702, - RuleDelayed: 10740, - ruluhar: 10600, - rx: 8478, - Sacute: 346, - sacute: 347, - sbquo: 8218, - scap: 10936, - Scaron: 352, - scaron: 353, - Sc: 10940, - sc: 8827, - sccue: 8829, - sce: 10928, - scE: 10932, - Scedil: 350, - scedil: 351, - Scirc: 348, - scirc: 349, - scnap: 10938, - scnE: 10934, - scnsim: 8937, - scpolint: 10771, - scsim: 8831, - Scy: 1057, - scy: 1089, - sdotb: 8865, - sdot: 8901, - sdote: 10854, - searhk: 10533, - searr: 8600, - seArr: 8664, - searrow: 8600, - sect: 167, - semi: 59, - seswar: 10537, - setminus: 8726, - setmn: 8726, - sext: 10038, - Sfr: 55349, - sfr: 55349, - sfrown: 8994, - sharp: 9839, - SHCHcy: 1065, - shchcy: 1097, - SHcy: 1064, - shcy: 1096, - ShortDownArrow: 8595, - ShortLeftArrow: 8592, - shortmid: 8739, - shortparallel: 8741, - ShortRightArrow: 8594, - ShortUpArrow: 8593, - shy: 173, - Sigma: 931, - sigma: 963, - sigmaf: 962, - sigmav: 962, - sim: 8764, - simdot: 10858, - sime: 8771, - simeq: 8771, - simg: 10910, - simgE: 10912, - siml: 10909, - simlE: 10911, - simne: 8774, - simplus: 10788, - simrarr: 10610, - slarr: 8592, - SmallCircle: 8728, - smallsetminus: 8726, - smashp: 10803, - smeparsl: 10724, - smid: 8739, - smile: 8995, - smt: 10922, - smte: 10924, - smtes: 10924, - SOFTcy: 1068, - softcy: 1100, - solbar: 9023, - solb: 10692, - sol: 47, - Sopf: 55349, - sopf: 55349, - spades: 9824, - spadesuit: 9824, - spar: 8741, - sqcap: 8851, - sqcaps: 8851, - sqcup: 8852, - sqcups: 8852, - Sqrt: 8730, - sqsub: 8847, - sqsube: 8849, - sqsubset: 8847, - sqsubseteq: 8849, - sqsup: 8848, - sqsupe: 8850, - sqsupset: 8848, - sqsupseteq: 8850, - square: 9633, - Square: 9633, - SquareIntersection: 8851, - SquareSubset: 8847, - SquareSubsetEqual: 8849, - SquareSuperset: 8848, - SquareSupersetEqual: 8850, - SquareUnion: 8852, - squarf: 9642, - squ: 9633, - squf: 9642, - srarr: 8594, - Sscr: 55349, - sscr: 55349, - ssetmn: 8726, - ssmile: 8995, - sstarf: 8902, - Star: 8902, - star: 9734, - starf: 9733, - straightepsilon: 1013, - straightphi: 981, - strns: 175, - sub: 8834, - Sub: 8912, - subdot: 10941, - subE: 10949, - sube: 8838, - subedot: 10947, - submult: 10945, - subnE: 10955, - subne: 8842, - subplus: 10943, - subrarr: 10617, - subset: 8834, - Subset: 8912, - subseteq: 8838, - subseteqq: 10949, - SubsetEqual: 8838, - subsetneq: 8842, - subsetneqq: 10955, - subsim: 10951, - subsub: 10965, - subsup: 10963, - succapprox: 10936, - succ: 8827, - succcurlyeq: 8829, - Succeeds: 8827, - SucceedsEqual: 10928, - SucceedsSlantEqual: 8829, - SucceedsTilde: 8831, - succeq: 10928, - succnapprox: 10938, - succneqq: 10934, - succnsim: 8937, - succsim: 8831, - SuchThat: 8715, - sum: 8721, - Sum: 8721, - sung: 9834, - sup1: 185, - sup2: 178, - sup3: 179, - sup: 8835, - Sup: 8913, - supdot: 10942, - supdsub: 10968, - supE: 10950, - supe: 8839, - supedot: 10948, - Superset: 8835, - SupersetEqual: 8839, - suphsol: 10185, - suphsub: 10967, - suplarr: 10619, - supmult: 10946, - supnE: 10956, - supne: 8843, - supplus: 10944, - supset: 8835, - Supset: 8913, - supseteq: 8839, - supseteqq: 10950, - supsetneq: 8843, - supsetneqq: 10956, - supsim: 10952, - supsub: 10964, - supsup: 10966, - swarhk: 10534, - swarr: 8601, - swArr: 8665, - swarrow: 8601, - swnwar: 10538, - szlig: 223, - Tab: NaN, - target: 8982, - Tau: 932, - tau: 964, - tbrk: 9140, - Tcaron: 356, - tcaron: 357, - Tcedil: 354, - tcedil: 355, - Tcy: 1058, - tcy: 1090, - tdot: 8411, - telrec: 8981, - Tfr: 55349, - tfr: 55349, - there4: 8756, - therefore: 8756, - Therefore: 8756, - Theta: 920, - theta: 952, - thetasym: 977, - thetav: 977, - thickapprox: 8776, - thicksim: 8764, - ThickSpace: 8287, - ThinSpace: 8201, - thinsp: 8201, - thkap: 8776, - thksim: 8764, - THORN: 222, - thorn: 254, - tilde: 732, - Tilde: 8764, - TildeEqual: 8771, - TildeFullEqual: 8773, - TildeTilde: 8776, - timesbar: 10801, - timesb: 8864, - times: 215, - timesd: 10800, - tint: 8749, - toea: 10536, - topbot: 9014, - topcir: 10993, - top: 8868, - Topf: 55349, - topf: 55349, - topfork: 10970, - tosa: 10537, - tprime: 8244, - trade: 8482, - TRADE: 8482, - triangle: 9653, - triangledown: 9663, - triangleleft: 9667, - trianglelefteq: 8884, - triangleq: 8796, - triangleright: 9657, - trianglerighteq: 8885, - tridot: 9708, - trie: 8796, - triminus: 10810, - TripleDot: 8411, - triplus: 10809, - trisb: 10701, - tritime: 10811, - trpezium: 9186, - Tscr: 55349, - tscr: 55349, - TScy: 1062, - tscy: 1094, - TSHcy: 1035, - tshcy: 1115, - Tstrok: 358, - tstrok: 359, - twixt: 8812, - twoheadleftarrow: 8606, - twoheadrightarrow: 8608, - Uacute: 218, - uacute: 250, - uarr: 8593, - Uarr: 8607, - uArr: 8657, - Uarrocir: 10569, - Ubrcy: 1038, - ubrcy: 1118, - Ubreve: 364, - ubreve: 365, - Ucirc: 219, - ucirc: 251, - Ucy: 1059, - ucy: 1091, - udarr: 8645, - Udblac: 368, - udblac: 369, - udhar: 10606, - ufisht: 10622, - Ufr: 55349, - ufr: 55349, - Ugrave: 217, - ugrave: 249, - uHar: 10595, - uharl: 8639, - uharr: 8638, - uhblk: 9600, - ulcorn: 8988, - ulcorner: 8988, - ulcrop: 8975, - ultri: 9720, - Umacr: 362, - umacr: 363, - uml: 168, - UnderBar: 95, - UnderBrace: 9183, - UnderBracket: 9141, - UnderParenthesis: 9181, - Union: 8899, - UnionPlus: 8846, - Uogon: 370, - uogon: 371, - Uopf: 55349, - uopf: 55349, - UpArrowBar: 10514, - uparrow: 8593, - UpArrow: 8593, - Uparrow: 8657, - UpArrowDownArrow: 8645, - updownarrow: 8597, - UpDownArrow: 8597, - Updownarrow: 8661, - UpEquilibrium: 10606, - upharpoonleft: 8639, - upharpoonright: 8638, - uplus: 8846, - UpperLeftArrow: 8598, - UpperRightArrow: 8599, - upsi: 965, - Upsi: 978, - upsih: 978, - Upsilon: 933, - upsilon: 965, - UpTeeArrow: 8613, - UpTee: 8869, - upuparrows: 8648, - urcorn: 8989, - urcorner: 8989, - urcrop: 8974, - Uring: 366, - uring: 367, - urtri: 9721, - Uscr: 55349, - uscr: 55349, - utdot: 8944, - Utilde: 360, - utilde: 361, - utri: 9653, - utrif: 9652, - uuarr: 8648, - Uuml: 220, - uuml: 252, - uwangle: 10663, - vangrt: 10652, - varepsilon: 1013, - varkappa: 1008, - varnothing: 8709, - varphi: 981, - varpi: 982, - varpropto: 8733, - varr: 8597, - vArr: 8661, - varrho: 1009, - varsigma: 962, - varsubsetneq: 8842, - varsubsetneqq: 10955, - varsupsetneq: 8843, - varsupsetneqq: 10956, - vartheta: 977, - vartriangleleft: 8882, - vartriangleright: 8883, - vBar: 10984, - Vbar: 10987, - vBarv: 10985, - Vcy: 1042, - vcy: 1074, - vdash: 8866, - vDash: 8872, - Vdash: 8873, - VDash: 8875, - Vdashl: 10982, - veebar: 8891, - vee: 8744, - Vee: 8897, - veeeq: 8794, - vellip: 8942, - verbar: 124, - Verbar: 8214, - vert: 124, - Vert: 8214, - VerticalBar: 8739, - VerticalLine: 124, - VerticalSeparator: 10072, - VerticalTilde: 8768, - VeryThinSpace: 8202, - Vfr: 55349, - vfr: 55349, - vltri: 8882, - vnsub: 8834, - vnsup: 8835, - Vopf: 55349, - vopf: 55349, - vprop: 8733, - vrtri: 8883, - Vscr: 55349, - vscr: 55349, - vsubnE: 10955, - vsubne: 8842, - vsupnE: 10956, - vsupne: 8843, - Vvdash: 8874, - vzigzag: 10650, - Wcirc: 372, - wcirc: 373, - wedbar: 10847, - wedge: 8743, - Wedge: 8896, - wedgeq: 8793, - weierp: 8472, - Wfr: 55349, - wfr: 55349, - Wopf: 55349, - wopf: 55349, - wp: 8472, - wr: 8768, - wreath: 8768, - Wscr: 55349, - wscr: 55349, - xcap: 8898, - xcirc: 9711, - xcup: 8899, - xdtri: 9661, - Xfr: 55349, - xfr: 55349, - xharr: 10231, - xhArr: 10234, - Xi: 926, - xi: 958, - xlarr: 10229, - xlArr: 10232, - xmap: 10236, - xnis: 8955, - xodot: 10752, - Xopf: 55349, - xopf: 55349, - xoplus: 10753, - xotime: 10754, - xrarr: 10230, - xrArr: 10233, - Xscr: 55349, - xscr: 55349, - xsqcup: 10758, - xuplus: 10756, - xutri: 9651, - xvee: 8897, - xwedge: 8896, - Yacute: 221, - yacute: 253, - YAcy: 1071, - yacy: 1103, - Ycirc: 374, - ycirc: 375, - Ycy: 1067, - ycy: 1099, - yen: 165, - Yfr: 55349, - yfr: 55349, - YIcy: 1031, - yicy: 1111, - Yopf: 55349, - yopf: 55349, - Yscr: 55349, - yscr: 55349, - YUcy: 1070, - yucy: 1102, - yuml: 255, - Yuml: 376, - Zacute: 377, - zacute: 378, - Zcaron: 381, - zcaron: 382, - Zcy: 1047, - zcy: 1079, - Zdot: 379, - zdot: 380, - zeetrf: 8488, - ZeroWidthSpace: 8203, - Zeta: 918, - zeta: 950, - zfr: 55349, - Zfr: 8488, - ZHcy: 1046, - zhcy: 1078, - zigrarr: 8669, - zopf: 55349, - Zopf: 8484, - Zscr: 55349, - zscr: 55349, - zwj: 8205, - zwnj: 8204 }; - -var entityToChar = function(m) { - var isNumeric = /^&#/.test(m); - var isHex = /^&#[Xx]/.test(m); - var uchar; - var ucode; - if (isNumeric) { - var num; - if (isHex) { - num = parseInt(m.slice(3, -1), 16); - } else { - num = parseInt(m.slice(2, -1), 10); - } - uchar = fromCodePoint(num); - } else { - ucode = entities[m.slice(1, -1)]; - if (ucode) { - uchar = fromCodePoint(entities[m.slice(1, -1)]); - } - } - return (uchar || m); -}; - -module.exports.entityToChar = entityToChar; diff --git a/js/lib/index.js b/js/lib/index.js deleted file mode 100755 index 86eea716d8..0000000000 --- a/js/lib/index.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -// commonmark.js - CommomMark in JavaScript -// Copyright (C) 2014 John MacFarlane -// License: BSD3. - -// Basic usage: -// -// var commonmark = require('commonmark'); -// var parser = new commonmark.Parser(); -// var renderer = new commonmark.HtmlRenderer(); -// console.log(renderer.render(parser.parse('Hello *world*'))); - -module.exports.Node = require('./node'); -module.exports.Parser = require('./blocks'); -module.exports.HtmlRenderer = require('./html'); -module.exports.XmlRenderer = require('./xml'); diff --git a/js/lib/inlines.js b/js/lib/inlines.js deleted file mode 100644 index 236fd5ff36..0000000000 --- a/js/lib/inlines.js +++ /dev/null @@ -1,833 +0,0 @@ -"use strict"; - -var Node = require('./node'); -var common = require('./common'); -var normalizeReference = require('./normalize-reference'); - -var normalizeURI = common.normalizeURI; -var unescapeString = common.unescapeString; -var fromCodePoint = require('./from-code-point.js'); -var entityToChar = require('./html5-entities.js').entityToChar; - -// Constants for character codes: - -var C_NEWLINE = 10; -var C_ASTERISK = 42; -var C_UNDERSCORE = 95; -var C_BACKTICK = 96; -var C_OPEN_BRACKET = 91; -var C_CLOSE_BRACKET = 93; -var C_LESSTHAN = 60; -var C_BANG = 33; -var C_BACKSLASH = 92; -var C_AMPERSAND = 38; -var C_OPEN_PAREN = 40; -var C_COLON = 58; - -// Some regexps used in inline parser: - -var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]'; -var ESCAPED_CHAR = '\\\\' + ESCAPABLE; -var REG_CHAR = '[^\\\\()\\x00-\\x20]'; -var IN_PARENS_NOSP = '\\((' + REG_CHAR + '|' + ESCAPED_CHAR + ')*\\)'; -var TAGNAME = '[A-Za-z][A-Za-z0-9]*'; -var ATTRIBUTENAME = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; -var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+"; -var SINGLEQUOTEDVALUE = "'[^']*'"; -var DOUBLEQUOTEDVALUE = '"[^"]*"'; -var ATTRIBUTEVALUE = "(?:" + UNQUOTEDVALUE + "|" + SINGLEQUOTEDVALUE + "|" + DOUBLEQUOTEDVALUE + ")"; -var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")"; -var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)"; -var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>"; -var CLOSETAG = "]"; -var HTMLCOMMENT = "|"; -var PROCESSINGINSTRUCTION = "[<][?].*?[?][>]"; -var DECLARATION = "]*>"; -var CDATA = ""; -var HTMLTAG = "(?:" + OPENTAG + "|" + CLOSETAG + "|" + HTMLCOMMENT + "|" + - PROCESSINGINSTRUCTION + "|" + DECLARATION + "|" + CDATA + ")"; -var ENTITY = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});"; - -var rePunctuation = new RegExp(/^[\u2000-\u206F\u2E00-\u2E7F\\'!"#\$%&\(\)\*\+,\-\.\/:;<=>\?@\[\]\^_`\{\|\}~]/); - -var reHtmlTag = new RegExp('^' + HTMLTAG, 'i'); - -var reLinkTitle = new RegExp( - '^(?:"(' + ESCAPED_CHAR + '|[^"\\x00])*"' + - '|' + - '\'(' + ESCAPED_CHAR + '|[^\'\\x00])*\'' + - '|' + - '\\((' + ESCAPED_CHAR + '|[^)\\x00])*\\))'); - -var reLinkDestinationBraces = new RegExp( - '^(?:[<](?:[^<>\\n\\\\\\x00]' + '|' + ESCAPED_CHAR + '|' + '\\\\)*[>])'); - -var reLinkDestination = new RegExp( - '^(?:' + REG_CHAR + '+|' + ESCAPED_CHAR + '|' + IN_PARENS_NOSP + ')*'); - -var reEscapable = new RegExp(ESCAPABLE); - -var reEntityHere = new RegExp('^' + ENTITY, 'i'); - -var reTicks = new RegExp('`+'); - -var reTicksHere = new RegExp('^`+'); - -var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/; - -var reAutolink = /^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i; - -var reSpnl = /^ *(?:\n *)?/; - -var reWhitespaceChar = /^\s/; - -var reWhitespace = /\s+/g; - -var reFinalSpace = / *$/; - -var reInitialSpace = /^ */; - -var reLinkLabel = /^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/; - -// Matches a string of non-special characters. -var reMain = /^[^\n`\[\]\\!<&*_]+/m; - -var text = function(s) { - var node = new Node('Text'); - node._literal = s; - return node; -}; - -// INLINE PARSER - -// These are methods of an InlineParser object, defined below. -// An InlineParser keeps track of a subject (a string to be -// parsed) and a position in that subject. - -// If re matches at current position in the subject, advance -// position in subject and return the match; otherwise return null. -var match = function(re) { - var m = re.exec(this.subject.slice(this.pos)); - if (m) { - this.pos += m.index + m[0].length; - return m[0]; - } else { - return null; - } -}; - -// Returns the code for the character at the current subject position, or -1 -// there are no more characters. -var peek = function() { - if (this.pos < this.subject.length) { - return this.subject.charCodeAt(this.pos); - } else { - return -1; - } -}; - -// Parse zero or more space characters, including at most one newline -var spnl = function() { - this.match(reSpnl); - return 1; -}; - -// All of the parsers below try to match something at the current position -// in the subject. If they succeed in matching anything, they -// return the inline matched, advancing the subject. - -// Attempt to parse backticks, adding either a backtick code span or a -// literal sequence of backticks. -var parseBackticks = function(block) { - var ticks = this.match(reTicksHere); - if (!ticks) { - return 0; - } - var afterOpenTicks = this.pos; - var foundCode = false; - var matched; - var node; - while (!foundCode && (matched = this.match(reTicks))) { - if (matched === ticks) { - node = new Node('Code'); - node._literal = this.subject.slice(afterOpenTicks, - this.pos - ticks.length) - .trim().replace(reWhitespace, ' '); - block.appendChild(node); - return true; - } - } - // If we got here, we didn't match a closing backtick sequence. - this.pos = afterOpenTicks; - block.appendChild(text(ticks)); - return true; -}; - -// Parse a backslash-escaped special character, adding either the escaped -// character, a hard line break (if the backslash is followed by a newline), -// or a literal backslash to the block's children. -var parseBackslash = function(block) { - var subj = this.subject, - pos = this.pos; - var node; - if (subj.charCodeAt(pos) === C_BACKSLASH) { - if (subj.charAt(pos + 1) === '\n') { - this.pos = this.pos + 2; - node = new Node('Hardbreak'); - block.appendChild(node); - } else if (reEscapable.test(subj.charAt(pos + 1))) { - this.pos = this.pos + 2; - block.appendChild(text(subj.charAt(pos + 1))); - } else { - this.pos++; - block.appendChild(text('\\')); - } - return true; - } else { - return false; - } -}; - -// Attempt to parse an autolink (URL or email in pointy brackets). -var parseAutolink = function(block) { - var m; - var dest; - var node; - if ((m = this.match(reEmailAutolink))) { - dest = m.slice(1, -1); - node = new Node('Link'); - node._destination = normalizeURI('mailto:' + dest); - node._title = ''; - node.appendChild(text(dest)); - block.appendChild(node); - return true; - } else if ((m = this.match(reAutolink))) { - dest = m.slice(1, -1); - node = new Node('Link'); - node._destination = normalizeURI(dest); - node._title = ''; - node.appendChild(text(dest)); - block.appendChild(node); - return true; - } else { - return false; - } -}; - -// Attempt to parse a raw HTML tag. -var parseHtmlTag = function(block) { - var m = this.match(reHtmlTag); - var node; - if (m) { - node = new Node('Html'); - node._literal = m; - block.appendChild(node); - return true; - } else { - return false; - } -}; - -// Scan a sequence of characters with code cc, and return information about -// the number of delimiters and whether they are positioned such that -// they can open and/or close emphasis or strong emphasis. A utility -// function for strong/emph parsing. -var scanDelims = function(cc) { - var numdelims = 0; - var char_before, char_after, cc_after; - var startpos = this.pos; - var left_flanking, right_flanking, can_open, can_close; - - char_before = this.pos === 0 ? '\n' : - this.subject.charAt(this.pos - 1); - - while (this.peek() === cc) { - numdelims++; - this.pos++; - } - - cc_after = this.peek(); - if (cc_after === -1) { - char_after = '\n'; - } else { - char_after = fromCodePoint(cc_after); - } - - left_flanking = numdelims > 0 && - !(reWhitespaceChar.test(char_after)) && - !(rePunctuation.test(char_after) && - !(/\s/.test(char_before)) && - !(rePunctuation.test(char_before))); - right_flanking = numdelims > 0 && - !(reWhitespaceChar.test(char_before)) && - !(rePunctuation.test(char_before) && - !(reWhitespaceChar.test(char_after)) && - !(rePunctuation.test(char_after))); - if (cc === C_UNDERSCORE) { - can_open = left_flanking && !right_flanking; - can_close = right_flanking && !left_flanking; - } else { - can_open = left_flanking; - can_close = right_flanking; - } - this.pos = startpos; - return { numdelims: numdelims, - can_open: can_open, - can_close: can_close }; -}; - -// Attempt to parse emphasis or strong emphasis. -var parseEmphasis = function(cc, block) { - var res = this.scanDelims(cc); - var numdelims = res.numdelims; - var startpos = this.pos; - - if (numdelims === 0) { - return false; - } - - this.pos += numdelims; - var node = text(this.subject.slice(startpos, this.pos)); - block.appendChild(node); - - // Add entry to stack for this opener - this.delimiters = { cc: cc, - numdelims: numdelims, - node: node, - previous: this.delimiters, - next: null, - can_open: res.can_open, - can_close: res.can_close, - active: true }; - if (this.delimiters.previous !== null) { - this.delimiters.previous.next = this.delimiters; - } - - return true; - -}; - -var removeDelimiter = function(delim) { - if (delim.previous !== null) { - delim.previous.next = delim.next; - } - if (delim.next === null) { - // top of stack - this.delimiters = delim.previous; - } else { - delim.next.previous = delim.previous; - } -}; - -var processEmphasis = function(block, stack_bottom) { - var opener, closer; - var opener_inl, closer_inl; - var nextstack, tempstack; - var use_delims; - var tmp, next; - - // find first closer above stack_bottom: - closer = this.delimiters; - while (closer !== null && closer.previous !== stack_bottom) { - closer = closer.previous; - } - // move forward, looking for closers, and handling each - while (closer !== null) { - if (closer.can_close && (closer.cc === C_UNDERSCORE || closer.cc === C_ASTERISK)) { - // found emphasis closer. now look back for first matching opener: - opener = closer.previous; - while (opener !== null && opener !== stack_bottom) { - if (opener.cc === closer.cc && opener.can_open) { - break; - } - opener = opener.previous; - } - if (opener !== null && opener !== stack_bottom) { - // calculate actual number of delimiters used from this closer - if (closer.numdelims < 3 || opener.numdelims < 3) { - use_delims = closer.numdelims <= opener.numdelims ? - closer.numdelims : opener.numdelims; - } else { - use_delims = closer.numdelims % 2 === 0 ? 2 : 1; - } - - opener_inl = opener.node; - closer_inl = closer.node; - - // remove used delimiters from stack elts and inlines - opener.numdelims -= use_delims; - closer.numdelims -= use_delims; - opener_inl._literal = - opener_inl._literal.slice(0, - opener_inl._literal.length - use_delims); - closer_inl._literal = - closer_inl._literal.slice(0, - closer_inl._literal.length - use_delims); - - // build contents for new emph element - var emph = new Node(use_delims === 1 ? 'Emph' : 'Strong'); - - tmp = opener_inl._next; - while (tmp && tmp !== closer_inl) { - next = tmp._next; - tmp.unlink(); - emph.appendChild(tmp); - tmp = next; - } - - opener_inl.insertAfter(emph); - - // remove elts btw opener and closer in delimiters stack - tempstack = closer.previous; - while (tempstack !== null && tempstack !== opener) { - nextstack = tempstack.previous; - this.removeDelimiter(tempstack); - tempstack = nextstack; - } - - // if opener has 0 delims, remove it and the inline - if (opener.numdelims === 0) { - opener_inl.unlink(); - this.removeDelimiter(opener); - } - - if (closer.numdelims === 0) { - closer_inl.unlink(); - tempstack = closer.next; - this.removeDelimiter(closer); - closer = tempstack; - } - - } else { - closer = closer.next; - } - - } else { - closer = closer.next; - } - - } - - // remove all delimiters - while (this.delimiters !== stack_bottom) { - this.removeDelimiter(this.delimiters); - } -}; - -// Attempt to parse link title (sans quotes), returning the string -// or null if no match. -var parseLinkTitle = function() { - var title = this.match(reLinkTitle); - if (title) { - // chop off quotes from title and unescape: - return unescapeString(title.substr(1, title.length - 2)); - } else { - return null; - } -}; - -// Attempt to parse link destination, returning the string or -// null if no match. -var parseLinkDestination = function() { - var res = this.match(reLinkDestinationBraces); - if (res) { // chop off surrounding <..>: - return normalizeURI(unescapeString(res.substr(1, res.length - 2))); - } else { - res = this.match(reLinkDestination); - if (res !== null) { - return normalizeURI(unescapeString(res)); - } else { - return null; - } - } -}; - -// Attempt to parse a link label, returning number of characters parsed. -var parseLinkLabel = function() { - var m = this.match(reLinkLabel); - return m === null ? 0 : m.length; -}; - -// Add open bracket to delimiter stack and add a text node to block's children. -var parseOpenBracket = function(block) { - var startpos = this.pos; - this.pos += 1; - - var node = text('['); - block.appendChild(node); - - // Add entry to stack for this opener - this.delimiters = { cc: C_OPEN_BRACKET, - numdelims: 1, - node: node, - previous: this.delimiters, - next: null, - can_open: true, - can_close: false, - index: startpos, - active: true }; - if (this.delimiters.previous !== null) { - this.delimiters.previous.next = this.delimiters; - } - - return true; - -}; - -// IF next character is [, and ! delimiter to delimiter stack and -// add a text node to block's children. Otherwise just add a text node. -var parseBang = function(block) { - var startpos = this.pos; - this.pos += 1; - if (this.peek() === C_OPEN_BRACKET) { - this.pos += 1; - - var node = text('!['); - block.appendChild(node); - - // Add entry to stack for this opener - this.delimiters = { cc: C_BANG, - numdelims: 1, - node: node, - previous: this.delimiters, - next: null, - can_open: true, - can_close: false, - index: startpos + 1, - active: true }; - if (this.delimiters.previous !== null) { - this.delimiters.previous.next = this.delimiters; - } - } else { - block.appendChild(text('!')); - } - return true; -}; - -// Try to match close bracket against an opening in the delimiter -// stack. Add either a link or image, or a plain [ character, -// to block's children. If there is a matching delimiter, -// remove it from the delimiter stack. -var parseCloseBracket = function(block) { - var startpos; - var is_image; - var dest; - var title; - var matched = false; - var reflabel; - var opener; - - this.pos += 1; - startpos = this.pos; - - // look through stack of delimiters for a [ or ![ - opener = this.delimiters; - - while (opener !== null) { - if (opener.cc === C_OPEN_BRACKET || opener.cc === C_BANG) { - break; - } - opener = opener.previous; - } - - if (opener === null) { - // no matched opener, just return a literal - block.appendChild(text(']')); - return true; - } - - if (!opener.active) { - // no matched opener, just return a literal - block.appendChild(text(']')); - // take opener off emphasis stack - this.removeDelimiter(opener); - return true; - } - - // If we got here, open is a potential opener - is_image = opener.cc === C_BANG; - - // Check to see if we have a link/image - - // Inline link? - if (this.peek() === C_OPEN_PAREN) { - this.pos++; - if (this.spnl() && - ((dest = this.parseLinkDestination()) !== null) && - this.spnl() && - // make sure there's a space before the title: - (reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) && - (title = this.parseLinkTitle()) || true) && - this.spnl() && - this.subject.charAt(this.pos) === ')') { - this.pos += 1; - matched = true; - } - } else { - - // Next, see if there's a link label - var savepos = this.pos; - this.spnl(); - var beforelabel = this.pos; - var n = this.parseLinkLabel(); - if (n === 0 || n === 2) { - // empty or missing second label - reflabel = this.subject.slice(opener.index, startpos); - } else { - reflabel = this.subject.slice(beforelabel, beforelabel + n); - } - if (n === 0) { - // If shortcut reference link, rewind before spaces we skipped. - this.pos = savepos; - } - - // lookup rawlabel in refmap - var link = this.refmap[normalizeReference(reflabel)]; - if (link) { - dest = link.destination; - title = link.title; - matched = true; - } - } - - if (matched) { - var node = new Node(is_image ? 'Image' : 'Link'); - node._destination = dest; - node._title = title || ''; - - var tmp, next; - tmp = opener.node._next; - while (tmp) { - next = tmp._next; - tmp.unlink(); - node.appendChild(tmp); - tmp = next; - } - block.appendChild(node); - this.processEmphasis(node, opener.previous); - - opener.node.unlink(); - - // processEmphasis will remove this and later delimiters. - // Now, for a link, we also deactivate earlier link openers. - // (no links in links) - if (!is_image) { - opener = this.delimiters; - while (opener !== null) { - if (opener.cc === C_OPEN_BRACKET) { - opener.active = false; // deactivate this opener - } - opener = opener.previous; - } - } - - return true; - - } else { // no match - - this.removeDelimiter(opener); // remove this opener from stack - this.pos = startpos; - block.appendChild(text(']')); - return true; - } - -}; - -// Attempt to parse an entity, return Entity object if successful. -var parseEntity = function(block) { - var m; - if ((m = this.match(reEntityHere))) { - block.appendChild(text(entityToChar(m))); - return true; - } else { - return false; - } -}; - -// Parse a run of ordinary characters, or a single character with -// a special meaning in markdown, as a plain string. -var parseString = function(block) { - var m; - if ((m = this.match(reMain))) { - block.appendChild(text(m)); - return true; - } else { - return false; - } -}; - -// Parse a newline. If it was preceded by two spaces, return a hard -// line break; otherwise a soft line break. -var parseNewline = function(block) { - this.pos += 1; // assume we're at a \n - // check previous node for trailing spaces - var lastc = block._lastChild; - if (lastc && lastc.type === 'Text') { - var sps = reFinalSpace.exec(lastc._literal)[0].length; - if (sps > 0) { - lastc._literal = lastc._literal.replace(reFinalSpace, ''); - } - block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); - } else { - block.appendChild(new Node('Softbreak')); - } - this.match(reInitialSpace); // gobble leading spaces in next line - return true; -}; - -// Attempt to parse a link reference, modifying refmap. -var parseReference = function(s, refmap) { - this.subject = s; - this.pos = 0; - var rawlabel; - var dest; - var title; - var matchChars; - var startpos = this.pos; - - // label: - matchChars = this.parseLinkLabel(); - if (matchChars === 0) { - return 0; - } else { - rawlabel = this.subject.substr(0, matchChars); - } - - // colon: - if (this.peek() === C_COLON) { - this.pos++; - } else { - this.pos = startpos; - return 0; - } - - // link url - this.spnl(); - - dest = this.parseLinkDestination(); - if (dest === null || dest.length === 0) { - this.pos = startpos; - return 0; - } - - var beforetitle = this.pos; - this.spnl(); - title = this.parseLinkTitle(); - if (title === null) { - title = ''; - // rewind before spaces - this.pos = beforetitle; - } - - // make sure we're at line end: - if (this.match(/^ *(?:\n|$)/) === null) { - this.pos = startpos; - return 0; - } - - var normlabel = normalizeReference(rawlabel); - - if (!refmap[normlabel]) { - refmap[normlabel] = { destination: dest, title: title }; - } - return this.pos - startpos; -}; - -// Parse the next inline element in subject, advancing subject position. -// On success, add the result to block's children and return true. -// On failure, return false. -var parseInline = function(block) { - var res = false; - var c = this.peek(); - if (c === -1) { - return false; - } - switch(c) { - case C_NEWLINE: - res = this.parseNewline(block); - break; - case C_BACKSLASH: - res = this.parseBackslash(block); - break; - case C_BACKTICK: - res = this.parseBackticks(block); - break; - case C_ASTERISK: - case C_UNDERSCORE: - res = this.parseEmphasis(c, block); - break; - case C_OPEN_BRACKET: - res = this.parseOpenBracket(block); - break; - case C_BANG: - res = this.parseBang(block); - break; - case C_CLOSE_BRACKET: - res = this.parseCloseBracket(block); - break; - case C_LESSTHAN: - res = this.parseAutolink(block) || this.parseHtmlTag(block); - break; - case C_AMPERSAND: - res = this.parseEntity(block); - break; - default: - res = this.parseString(block); - break; - } - if (!res) { - this.pos += 1; - var textnode = new Node('Text'); - textnode._literal = fromCodePoint(c); - block.appendChild(textnode); - } - - return true; -}; - -// Parse string content in block into inline children, -// using refmap to resolve references. -var parseInlines = function(block, refmap) { - this.subject = block._string_content.trim(); - this.pos = 0; - this.refmap = refmap || {}; - this.delimiters = null; - while (this.parseInline(block)) { - } - this.processEmphasis(block, null); -}; - -// The InlineParser object. -function InlineParser(){ - return { - subject: '', - delimiters: null, // used by parseEmphasis method - pos: 0, - refmap: {}, - match: match, - peek: peek, - spnl: spnl, - parseBackticks: parseBackticks, - parseBackslash: parseBackslash, - parseAutolink: parseAutolink, - parseHtmlTag: parseHtmlTag, - scanDelims: scanDelims, - parseEmphasis: parseEmphasis, - parseLinkTitle: parseLinkTitle, - parseLinkDestination: parseLinkDestination, - parseLinkLabel: parseLinkLabel, - parseOpenBracket: parseOpenBracket, - parseCloseBracket: parseCloseBracket, - parseBang: parseBang, - parseEntity: parseEntity, - parseString: parseString, - parseNewline: parseNewline, - parseReference: parseReference, - parseInline: parseInline, - processEmphasis: processEmphasis, - removeDelimiter: removeDelimiter, - parse: parseInlines - }; -} - -module.exports = InlineParser; diff --git a/js/lib/node.js b/js/lib/node.js deleted file mode 100644 index 4615689354..0000000000 --- a/js/lib/node.js +++ /dev/null @@ -1,255 +0,0 @@ -"use strict"; - -function isContainer(node) { - switch (node._type) { - case 'Document': - case 'BlockQuote': - case 'List': - case 'Item': - case 'Paragraph': - case 'Header': - case 'Emph': - case 'Strong': - case 'Link': - case 'Image': - return true; - default: - return false; - } -} - -var resumeAt = function(node, entering) { - this.current = node; - this.entering = (entering === true); -}; - -var next = function(){ - var cur = this.current; - var entering = this.entering; - - if (cur === null) { - return null; - } - - var container = isContainer(cur); - - if (entering && container) { - if (cur._firstChild) { - this.current = cur._firstChild; - this.entering = true; - } else { - // stay on node but exit - this.entering = false; - } - - } else if (cur._next === null) { - this.current = cur._parent; - this.entering = false; - - } else { - this.current = cur._next; - this.entering = true; - } - - return {entering: entering, node: cur}; -}; - -var NodeWalker = function(root) { - return { current: root, - root: root, - entering: true, - next: next, - resumeAt: resumeAt }; -}; - -var Node = function(nodeType, sourcepos) { - this._type = nodeType; - this._parent = null; - this._firstChild = null; - this._lastChild = null; - this._prev = null; - this._next = null; - this._sourcepos = sourcepos; - this._lastLineBlank = false; - this._open = true; - this._strings = null; - this._string_content = null; - this._literal = null; - this._listData = null; - this._info = null; - this._destination = null; - this._title = null; - this._isFenced = false; - this._fenceChar = null; - this._fenceLength = 0; - this._fenceOffset = null; - this._level = null; -}; - -var proto = Node.prototype; - -Node.prototype.isContainer = function() { - return isContainer(this); -}; - -Object.defineProperty(proto, 'type', { - get: function() { return this._type; } -}); - -Object.defineProperty(proto, 'firstChild', { - get: function() { return this._firstChild; } -}); - -Object.defineProperty(proto, 'lastChild', { - get: function() { return this._lastChild; } -}); - -Object.defineProperty(proto, 'next', { - get: function() { return this._next; } -}); - -Object.defineProperty(proto, 'prev', { - get: function() { return this._prev; } -}); - -Object.defineProperty(proto, 'parent', { - get: function() { return this._parent; } -}); - -Object.defineProperty(proto, 'sourcepos', { - get: function() { return this._sourcepos; } -}); - -Object.defineProperty(proto, 'literal', { - get: function() { return this._literal; }, - set: function(s) { this._literal = s; } -}); - -Object.defineProperty(proto, 'destination', { - get: function() { return this._destination; }, - set: function(s) { this._destination = s; } -}); - -Object.defineProperty(proto, 'title', { - get: function() { return this._title; }, - set: function(s) { this._title = s; } -}); - -Object.defineProperty(proto, 'info', { - get: function() { return this._info; }, - set: function(s) { this._info = s; } -}); - -Object.defineProperty(proto, 'level', { - get: function() { return this._level; }, - set: function(s) { this._level = s; } -}); - -Object.defineProperty(proto, 'listType', { - get: function() { return this._listData.type; }, - set: function(t) { this._listData.type = t; } -}); - -Object.defineProperty(proto, 'listTight', { - get: function() { return this._listData.tight; }, - set: function(t) { this._listData.tight = t; } -}); - -Object.defineProperty(proto, 'listStart', { - get: function() { return this._listData.start; }, - set: function(n) { this._listData.start = n; } -}); - -Object.defineProperty(proto, 'listDelimiter', { - get: function() { return this._listData.delimiter; }, - set: function(delim) { this._listData.delimiter = delim; } -}); - -Node.prototype.appendChild = function(child) { - child.unlink(); - child._parent = this; - if (this._lastChild) { - this._lastChild._next = child; - child._prev = this._lastChild; - this._lastChild = child; - } else { - this._firstChild = child; - this._lastChild = child; - } -}; - -Node.prototype.prependChild = function(child) { - child.unlink(); - child._parent = this; - if (this._firstChild) { - this._firstChild._prev = child; - child._next = this._firstChild; - this._firstChild = child; - } else { - this._firstChild = child; - this._lastChild = child; - } -}; - -Node.prototype.unlink = function() { - if (this._prev) { - this._prev._next = this._next; - } else if (this._parent) { - this._parent._firstChild = this._next; - } - if (this._next) { - this._next._prev = this._prev; - } else if (this._parent) { - this._parent._lastChild = this._prev; - } - this._parent = null; - this._next = null; - this._prev = null; -}; - -Node.prototype.insertAfter = function(sibling) { - sibling.unlink(); - sibling._next = this._next; - if (sibling._next) { - sibling._next._prev = sibling; - } - sibling._prev = this; - this._next = sibling; - sibling._parent = this._parent; - if (!sibling._next) { - sibling._parent._lastChild = sibling; - } -}; - -Node.prototype.insertBefore = function(sibling) { - sibling.unlink(); - sibling._prev = this._prev; - if (sibling._prev) { - sibling._prev._next = sibling; - } - sibling._next = this; - this._prev = sibling; - sibling._parent = this._parent; - if (!sibling._prev) { - sibling._parent._firstChild = sibling; - } -}; - -Node.prototype.walker = function() { - var walker = new NodeWalker(this); - return walker; -}; - -module.exports = Node; - - -/* Example of use of walker: - - var walker = w.walker(); - var event; - - while (event = walker.next()) { - console.log(event.entering, event.node.type()); - } - - */ diff --git a/js/lib/normalize-reference.js b/js/lib/normalize-reference.js deleted file mode 100644 index 61f6aa6b46..0000000000 --- a/js/lib/normalize-reference.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; - -/* The bulk of this code derives from https://github.com/dmoscrop/fold-case -But in addition to case-folding, we also normalize whitespace. - -fold-case is Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -/*eslint-disable key-spacing, comma-spacing */ - -var regex = /[ \t\r\n]+|[A-Z\xB5\xC0-\xD6\xD8-\xDF\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u0149\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u017F\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C5\u01C7\u01C8\u01CA\u01CB\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F0-\u01F2\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0345\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03AB\u03B0\u03C2\u03CF-\u03D1\u03D5\u03D6\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F0\u03F1\u03F4\u03F5\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u0587\u10A0-\u10C5\u10C7\u10CD\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E96-\u1E9B\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F50\u1F52\u1F54\u1F56\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1F80-\u1FAF\u1FB2-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD2\u1FD3\u1FD6-\u1FDB\u1FE2-\u1FE4\u1FE6-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u2132\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0\uA7B1\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A]|\uD801[\uDC00-\uDC27]|\uD806[\uDCA0-\uDCBF]/g; - -var map = {'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g','H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n','O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u','V':'v','W':'w','X':'x','Y':'y','Z':'z','\xB5':'\u03BC','\xC0':'\xE0','\xC1':'\xE1','\xC2':'\xE2','\xC3':'\xE3','\xC4':'\xE4','\xC5':'\xE5','\xC6':'\xE6','\xC7':'\xE7','\xC8':'\xE8','\xC9':'\xE9','\xCA':'\xEA','\xCB':'\xEB','\xCC':'\xEC','\xCD':'\xED','\xCE':'\xEE','\xCF':'\xEF','\xD0':'\xF0','\xD1':'\xF1','\xD2':'\xF2','\xD3':'\xF3','\xD4':'\xF4','\xD5':'\xF5','\xD6':'\xF6','\xD8':'\xF8','\xD9':'\xF9','\xDA':'\xFA','\xDB':'\xFB','\xDC':'\xFC','\xDD':'\xFD','\xDE':'\xFE','\u0100':'\u0101','\u0102':'\u0103','\u0104':'\u0105','\u0106':'\u0107','\u0108':'\u0109','\u010A':'\u010B','\u010C':'\u010D','\u010E':'\u010F','\u0110':'\u0111','\u0112':'\u0113','\u0114':'\u0115','\u0116':'\u0117','\u0118':'\u0119','\u011A':'\u011B','\u011C':'\u011D','\u011E':'\u011F','\u0120':'\u0121','\u0122':'\u0123','\u0124':'\u0125','\u0126':'\u0127','\u0128':'\u0129','\u012A':'\u012B','\u012C':'\u012D','\u012E':'\u012F','\u0132':'\u0133','\u0134':'\u0135','\u0136':'\u0137','\u0139':'\u013A','\u013B':'\u013C','\u013D':'\u013E','\u013F':'\u0140','\u0141':'\u0142','\u0143':'\u0144','\u0145':'\u0146','\u0147':'\u0148','\u014A':'\u014B','\u014C':'\u014D','\u014E':'\u014F','\u0150':'\u0151','\u0152':'\u0153','\u0154':'\u0155','\u0156':'\u0157','\u0158':'\u0159','\u015A':'\u015B','\u015C':'\u015D','\u015E':'\u015F','\u0160':'\u0161','\u0162':'\u0163','\u0164':'\u0165','\u0166':'\u0167','\u0168':'\u0169','\u016A':'\u016B','\u016C':'\u016D','\u016E':'\u016F','\u0170':'\u0171','\u0172':'\u0173','\u0174':'\u0175','\u0176':'\u0177','\u0178':'\xFF','\u0179':'\u017A','\u017B':'\u017C','\u017D':'\u017E','\u017F':'s','\u0181':'\u0253','\u0182':'\u0183','\u0184':'\u0185','\u0186':'\u0254','\u0187':'\u0188','\u0189':'\u0256','\u018A':'\u0257','\u018B':'\u018C','\u018E':'\u01DD','\u018F':'\u0259','\u0190':'\u025B','\u0191':'\u0192','\u0193':'\u0260','\u0194':'\u0263','\u0196':'\u0269','\u0197':'\u0268','\u0198':'\u0199','\u019C':'\u026F','\u019D':'\u0272','\u019F':'\u0275','\u01A0':'\u01A1','\u01A2':'\u01A3','\u01A4':'\u01A5','\u01A6':'\u0280','\u01A7':'\u01A8','\u01A9':'\u0283','\u01AC':'\u01AD','\u01AE':'\u0288','\u01AF':'\u01B0','\u01B1':'\u028A','\u01B2':'\u028B','\u01B3':'\u01B4','\u01B5':'\u01B6','\u01B7':'\u0292','\u01B8':'\u01B9','\u01BC':'\u01BD','\u01C4':'\u01C6','\u01C5':'\u01C6','\u01C7':'\u01C9','\u01C8':'\u01C9','\u01CA':'\u01CC','\u01CB':'\u01CC','\u01CD':'\u01CE','\u01CF':'\u01D0','\u01D1':'\u01D2','\u01D3':'\u01D4','\u01D5':'\u01D6','\u01D7':'\u01D8','\u01D9':'\u01DA','\u01DB':'\u01DC','\u01DE':'\u01DF','\u01E0':'\u01E1','\u01E2':'\u01E3','\u01E4':'\u01E5','\u01E6':'\u01E7','\u01E8':'\u01E9','\u01EA':'\u01EB','\u01EC':'\u01ED','\u01EE':'\u01EF','\u01F1':'\u01F3','\u01F2':'\u01F3','\u01F4':'\u01F5','\u01F6':'\u0195','\u01F7':'\u01BF','\u01F8':'\u01F9','\u01FA':'\u01FB','\u01FC':'\u01FD','\u01FE':'\u01FF','\u0200':'\u0201','\u0202':'\u0203','\u0204':'\u0205','\u0206':'\u0207','\u0208':'\u0209','\u020A':'\u020B','\u020C':'\u020D','\u020E':'\u020F','\u0210':'\u0211','\u0212':'\u0213','\u0214':'\u0215','\u0216':'\u0217','\u0218':'\u0219','\u021A':'\u021B','\u021C':'\u021D','\u021E':'\u021F','\u0220':'\u019E','\u0222':'\u0223','\u0224':'\u0225','\u0226':'\u0227','\u0228':'\u0229','\u022A':'\u022B','\u022C':'\u022D','\u022E':'\u022F','\u0230':'\u0231','\u0232':'\u0233','\u023A':'\u2C65','\u023B':'\u023C','\u023D':'\u019A','\u023E':'\u2C66','\u0241':'\u0242','\u0243':'\u0180','\u0244':'\u0289','\u0245':'\u028C','\u0246':'\u0247','\u0248':'\u0249','\u024A':'\u024B','\u024C':'\u024D','\u024E':'\u024F','\u0345':'\u03B9','\u0370':'\u0371','\u0372':'\u0373','\u0376':'\u0377','\u037F':'\u03F3','\u0386':'\u03AC','\u0388':'\u03AD','\u0389':'\u03AE','\u038A':'\u03AF','\u038C':'\u03CC','\u038E':'\u03CD','\u038F':'\u03CE','\u0391':'\u03B1','\u0392':'\u03B2','\u0393':'\u03B3','\u0394':'\u03B4','\u0395':'\u03B5','\u0396':'\u03B6','\u0397':'\u03B7','\u0398':'\u03B8','\u0399':'\u03B9','\u039A':'\u03BA','\u039B':'\u03BB','\u039C':'\u03BC','\u039D':'\u03BD','\u039E':'\u03BE','\u039F':'\u03BF','\u03A0':'\u03C0','\u03A1':'\u03C1','\u03A3':'\u03C3','\u03A4':'\u03C4','\u03A5':'\u03C5','\u03A6':'\u03C6','\u03A7':'\u03C7','\u03A8':'\u03C8','\u03A9':'\u03C9','\u03AA':'\u03CA','\u03AB':'\u03CB','\u03C2':'\u03C3','\u03CF':'\u03D7','\u03D0':'\u03B2','\u03D1':'\u03B8','\u03D5':'\u03C6','\u03D6':'\u03C0','\u03D8':'\u03D9','\u03DA':'\u03DB','\u03DC':'\u03DD','\u03DE':'\u03DF','\u03E0':'\u03E1','\u03E2':'\u03E3','\u03E4':'\u03E5','\u03E6':'\u03E7','\u03E8':'\u03E9','\u03EA':'\u03EB','\u03EC':'\u03ED','\u03EE':'\u03EF','\u03F0':'\u03BA','\u03F1':'\u03C1','\u03F4':'\u03B8','\u03F5':'\u03B5','\u03F7':'\u03F8','\u03F9':'\u03F2','\u03FA':'\u03FB','\u03FD':'\u037B','\u03FE':'\u037C','\u03FF':'\u037D','\u0400':'\u0450','\u0401':'\u0451','\u0402':'\u0452','\u0403':'\u0453','\u0404':'\u0454','\u0405':'\u0455','\u0406':'\u0456','\u0407':'\u0457','\u0408':'\u0458','\u0409':'\u0459','\u040A':'\u045A','\u040B':'\u045B','\u040C':'\u045C','\u040D':'\u045D','\u040E':'\u045E','\u040F':'\u045F','\u0410':'\u0430','\u0411':'\u0431','\u0412':'\u0432','\u0413':'\u0433','\u0414':'\u0434','\u0415':'\u0435','\u0416':'\u0436','\u0417':'\u0437','\u0418':'\u0438','\u0419':'\u0439','\u041A':'\u043A','\u041B':'\u043B','\u041C':'\u043C','\u041D':'\u043D','\u041E':'\u043E','\u041F':'\u043F','\u0420':'\u0440','\u0421':'\u0441','\u0422':'\u0442','\u0423':'\u0443','\u0424':'\u0444','\u0425':'\u0445','\u0426':'\u0446','\u0427':'\u0447','\u0428':'\u0448','\u0429':'\u0449','\u042A':'\u044A','\u042B':'\u044B','\u042C':'\u044C','\u042D':'\u044D','\u042E':'\u044E','\u042F':'\u044F','\u0460':'\u0461','\u0462':'\u0463','\u0464':'\u0465','\u0466':'\u0467','\u0468':'\u0469','\u046A':'\u046B','\u046C':'\u046D','\u046E':'\u046F','\u0470':'\u0471','\u0472':'\u0473','\u0474':'\u0475','\u0476':'\u0477','\u0478':'\u0479','\u047A':'\u047B','\u047C':'\u047D','\u047E':'\u047F','\u0480':'\u0481','\u048A':'\u048B','\u048C':'\u048D','\u048E':'\u048F','\u0490':'\u0491','\u0492':'\u0493','\u0494':'\u0495','\u0496':'\u0497','\u0498':'\u0499','\u049A':'\u049B','\u049C':'\u049D','\u049E':'\u049F','\u04A0':'\u04A1','\u04A2':'\u04A3','\u04A4':'\u04A5','\u04A6':'\u04A7','\u04A8':'\u04A9','\u04AA':'\u04AB','\u04AC':'\u04AD','\u04AE':'\u04AF','\u04B0':'\u04B1','\u04B2':'\u04B3','\u04B4':'\u04B5','\u04B6':'\u04B7','\u04B8':'\u04B9','\u04BA':'\u04BB','\u04BC':'\u04BD','\u04BE':'\u04BF','\u04C0':'\u04CF','\u04C1':'\u04C2','\u04C3':'\u04C4','\u04C5':'\u04C6','\u04C7':'\u04C8','\u04C9':'\u04CA','\u04CB':'\u04CC','\u04CD':'\u04CE','\u04D0':'\u04D1','\u04D2':'\u04D3','\u04D4':'\u04D5','\u04D6':'\u04D7','\u04D8':'\u04D9','\u04DA':'\u04DB','\u04DC':'\u04DD','\u04DE':'\u04DF','\u04E0':'\u04E1','\u04E2':'\u04E3','\u04E4':'\u04E5','\u04E6':'\u04E7','\u04E8':'\u04E9','\u04EA':'\u04EB','\u04EC':'\u04ED','\u04EE':'\u04EF','\u04F0':'\u04F1','\u04F2':'\u04F3','\u04F4':'\u04F5','\u04F6':'\u04F7','\u04F8':'\u04F9','\u04FA':'\u04FB','\u04FC':'\u04FD','\u04FE':'\u04FF','\u0500':'\u0501','\u0502':'\u0503','\u0504':'\u0505','\u0506':'\u0507','\u0508':'\u0509','\u050A':'\u050B','\u050C':'\u050D','\u050E':'\u050F','\u0510':'\u0511','\u0512':'\u0513','\u0514':'\u0515','\u0516':'\u0517','\u0518':'\u0519','\u051A':'\u051B','\u051C':'\u051D','\u051E':'\u051F','\u0520':'\u0521','\u0522':'\u0523','\u0524':'\u0525','\u0526':'\u0527','\u0528':'\u0529','\u052A':'\u052B','\u052C':'\u052D','\u052E':'\u052F','\u0531':'\u0561','\u0532':'\u0562','\u0533':'\u0563','\u0534':'\u0564','\u0535':'\u0565','\u0536':'\u0566','\u0537':'\u0567','\u0538':'\u0568','\u0539':'\u0569','\u053A':'\u056A','\u053B':'\u056B','\u053C':'\u056C','\u053D':'\u056D','\u053E':'\u056E','\u053F':'\u056F','\u0540':'\u0570','\u0541':'\u0571','\u0542':'\u0572','\u0543':'\u0573','\u0544':'\u0574','\u0545':'\u0575','\u0546':'\u0576','\u0547':'\u0577','\u0548':'\u0578','\u0549':'\u0579','\u054A':'\u057A','\u054B':'\u057B','\u054C':'\u057C','\u054D':'\u057D','\u054E':'\u057E','\u054F':'\u057F','\u0550':'\u0580','\u0551':'\u0581','\u0552':'\u0582','\u0553':'\u0583','\u0554':'\u0584','\u0555':'\u0585','\u0556':'\u0586','\u10A0':'\u2D00','\u10A1':'\u2D01','\u10A2':'\u2D02','\u10A3':'\u2D03','\u10A4':'\u2D04','\u10A5':'\u2D05','\u10A6':'\u2D06','\u10A7':'\u2D07','\u10A8':'\u2D08','\u10A9':'\u2D09','\u10AA':'\u2D0A','\u10AB':'\u2D0B','\u10AC':'\u2D0C','\u10AD':'\u2D0D','\u10AE':'\u2D0E','\u10AF':'\u2D0F','\u10B0':'\u2D10','\u10B1':'\u2D11','\u10B2':'\u2D12','\u10B3':'\u2D13','\u10B4':'\u2D14','\u10B5':'\u2D15','\u10B6':'\u2D16','\u10B7':'\u2D17','\u10B8':'\u2D18','\u10B9':'\u2D19','\u10BA':'\u2D1A','\u10BB':'\u2D1B','\u10BC':'\u2D1C','\u10BD':'\u2D1D','\u10BE':'\u2D1E','\u10BF':'\u2D1F','\u10C0':'\u2D20','\u10C1':'\u2D21','\u10C2':'\u2D22','\u10C3':'\u2D23','\u10C4':'\u2D24','\u10C5':'\u2D25','\u10C7':'\u2D27','\u10CD':'\u2D2D','\u1E00':'\u1E01','\u1E02':'\u1E03','\u1E04':'\u1E05','\u1E06':'\u1E07','\u1E08':'\u1E09','\u1E0A':'\u1E0B','\u1E0C':'\u1E0D','\u1E0E':'\u1E0F','\u1E10':'\u1E11','\u1E12':'\u1E13','\u1E14':'\u1E15','\u1E16':'\u1E17','\u1E18':'\u1E19','\u1E1A':'\u1E1B','\u1E1C':'\u1E1D','\u1E1E':'\u1E1F','\u1E20':'\u1E21','\u1E22':'\u1E23','\u1E24':'\u1E25','\u1E26':'\u1E27','\u1E28':'\u1E29','\u1E2A':'\u1E2B','\u1E2C':'\u1E2D','\u1E2E':'\u1E2F','\u1E30':'\u1E31','\u1E32':'\u1E33','\u1E34':'\u1E35','\u1E36':'\u1E37','\u1E38':'\u1E39','\u1E3A':'\u1E3B','\u1E3C':'\u1E3D','\u1E3E':'\u1E3F','\u1E40':'\u1E41','\u1E42':'\u1E43','\u1E44':'\u1E45','\u1E46':'\u1E47','\u1E48':'\u1E49','\u1E4A':'\u1E4B','\u1E4C':'\u1E4D','\u1E4E':'\u1E4F','\u1E50':'\u1E51','\u1E52':'\u1E53','\u1E54':'\u1E55','\u1E56':'\u1E57','\u1E58':'\u1E59','\u1E5A':'\u1E5B','\u1E5C':'\u1E5D','\u1E5E':'\u1E5F','\u1E60':'\u1E61','\u1E62':'\u1E63','\u1E64':'\u1E65','\u1E66':'\u1E67','\u1E68':'\u1E69','\u1E6A':'\u1E6B','\u1E6C':'\u1E6D','\u1E6E':'\u1E6F','\u1E70':'\u1E71','\u1E72':'\u1E73','\u1E74':'\u1E75','\u1E76':'\u1E77','\u1E78':'\u1E79','\u1E7A':'\u1E7B','\u1E7C':'\u1E7D','\u1E7E':'\u1E7F','\u1E80':'\u1E81','\u1E82':'\u1E83','\u1E84':'\u1E85','\u1E86':'\u1E87','\u1E88':'\u1E89','\u1E8A':'\u1E8B','\u1E8C':'\u1E8D','\u1E8E':'\u1E8F','\u1E90':'\u1E91','\u1E92':'\u1E93','\u1E94':'\u1E95','\u1E9B':'\u1E61','\u1EA0':'\u1EA1','\u1EA2':'\u1EA3','\u1EA4':'\u1EA5','\u1EA6':'\u1EA7','\u1EA8':'\u1EA9','\u1EAA':'\u1EAB','\u1EAC':'\u1EAD','\u1EAE':'\u1EAF','\u1EB0':'\u1EB1','\u1EB2':'\u1EB3','\u1EB4':'\u1EB5','\u1EB6':'\u1EB7','\u1EB8':'\u1EB9','\u1EBA':'\u1EBB','\u1EBC':'\u1EBD','\u1EBE':'\u1EBF','\u1EC0':'\u1EC1','\u1EC2':'\u1EC3','\u1EC4':'\u1EC5','\u1EC6':'\u1EC7','\u1EC8':'\u1EC9','\u1ECA':'\u1ECB','\u1ECC':'\u1ECD','\u1ECE':'\u1ECF','\u1ED0':'\u1ED1','\u1ED2':'\u1ED3','\u1ED4':'\u1ED5','\u1ED6':'\u1ED7','\u1ED8':'\u1ED9','\u1EDA':'\u1EDB','\u1EDC':'\u1EDD','\u1EDE':'\u1EDF','\u1EE0':'\u1EE1','\u1EE2':'\u1EE3','\u1EE4':'\u1EE5','\u1EE6':'\u1EE7','\u1EE8':'\u1EE9','\u1EEA':'\u1EEB','\u1EEC':'\u1EED','\u1EEE':'\u1EEF','\u1EF0':'\u1EF1','\u1EF2':'\u1EF3','\u1EF4':'\u1EF5','\u1EF6':'\u1EF7','\u1EF8':'\u1EF9','\u1EFA':'\u1EFB','\u1EFC':'\u1EFD','\u1EFE':'\u1EFF','\u1F08':'\u1F00','\u1F09':'\u1F01','\u1F0A':'\u1F02','\u1F0B':'\u1F03','\u1F0C':'\u1F04','\u1F0D':'\u1F05','\u1F0E':'\u1F06','\u1F0F':'\u1F07','\u1F18':'\u1F10','\u1F19':'\u1F11','\u1F1A':'\u1F12','\u1F1B':'\u1F13','\u1F1C':'\u1F14','\u1F1D':'\u1F15','\u1F28':'\u1F20','\u1F29':'\u1F21','\u1F2A':'\u1F22','\u1F2B':'\u1F23','\u1F2C':'\u1F24','\u1F2D':'\u1F25','\u1F2E':'\u1F26','\u1F2F':'\u1F27','\u1F38':'\u1F30','\u1F39':'\u1F31','\u1F3A':'\u1F32','\u1F3B':'\u1F33','\u1F3C':'\u1F34','\u1F3D':'\u1F35','\u1F3E':'\u1F36','\u1F3F':'\u1F37','\u1F48':'\u1F40','\u1F49':'\u1F41','\u1F4A':'\u1F42','\u1F4B':'\u1F43','\u1F4C':'\u1F44','\u1F4D':'\u1F45','\u1F59':'\u1F51','\u1F5B':'\u1F53','\u1F5D':'\u1F55','\u1F5F':'\u1F57','\u1F68':'\u1F60','\u1F69':'\u1F61','\u1F6A':'\u1F62','\u1F6B':'\u1F63','\u1F6C':'\u1F64','\u1F6D':'\u1F65','\u1F6E':'\u1F66','\u1F6F':'\u1F67','\u1FB8':'\u1FB0','\u1FB9':'\u1FB1','\u1FBA':'\u1F70','\u1FBB':'\u1F71','\u1FBE':'\u03B9','\u1FC8':'\u1F72','\u1FC9':'\u1F73','\u1FCA':'\u1F74','\u1FCB':'\u1F75','\u1FD8':'\u1FD0','\u1FD9':'\u1FD1','\u1FDA':'\u1F76','\u1FDB':'\u1F77','\u1FE8':'\u1FE0','\u1FE9':'\u1FE1','\u1FEA':'\u1F7A','\u1FEB':'\u1F7B','\u1FEC':'\u1FE5','\u1FF8':'\u1F78','\u1FF9':'\u1F79','\u1FFA':'\u1F7C','\u1FFB':'\u1F7D','\u2126':'\u03C9','\u212A':'k','\u212B':'\xE5','\u2132':'\u214E','\u2160':'\u2170','\u2161':'\u2171','\u2162':'\u2172','\u2163':'\u2173','\u2164':'\u2174','\u2165':'\u2175','\u2166':'\u2176','\u2167':'\u2177','\u2168':'\u2178','\u2169':'\u2179','\u216A':'\u217A','\u216B':'\u217B','\u216C':'\u217C','\u216D':'\u217D','\u216E':'\u217E','\u216F':'\u217F','\u2183':'\u2184','\u24B6':'\u24D0','\u24B7':'\u24D1','\u24B8':'\u24D2','\u24B9':'\u24D3','\u24BA':'\u24D4','\u24BB':'\u24D5','\u24BC':'\u24D6','\u24BD':'\u24D7','\u24BE':'\u24D8','\u24BF':'\u24D9','\u24C0':'\u24DA','\u24C1':'\u24DB','\u24C2':'\u24DC','\u24C3':'\u24DD','\u24C4':'\u24DE','\u24C5':'\u24DF','\u24C6':'\u24E0','\u24C7':'\u24E1','\u24C8':'\u24E2','\u24C9':'\u24E3','\u24CA':'\u24E4','\u24CB':'\u24E5','\u24CC':'\u24E6','\u24CD':'\u24E7','\u24CE':'\u24E8','\u24CF':'\u24E9','\u2C00':'\u2C30','\u2C01':'\u2C31','\u2C02':'\u2C32','\u2C03':'\u2C33','\u2C04':'\u2C34','\u2C05':'\u2C35','\u2C06':'\u2C36','\u2C07':'\u2C37','\u2C08':'\u2C38','\u2C09':'\u2C39','\u2C0A':'\u2C3A','\u2C0B':'\u2C3B','\u2C0C':'\u2C3C','\u2C0D':'\u2C3D','\u2C0E':'\u2C3E','\u2C0F':'\u2C3F','\u2C10':'\u2C40','\u2C11':'\u2C41','\u2C12':'\u2C42','\u2C13':'\u2C43','\u2C14':'\u2C44','\u2C15':'\u2C45','\u2C16':'\u2C46','\u2C17':'\u2C47','\u2C18':'\u2C48','\u2C19':'\u2C49','\u2C1A':'\u2C4A','\u2C1B':'\u2C4B','\u2C1C':'\u2C4C','\u2C1D':'\u2C4D','\u2C1E':'\u2C4E','\u2C1F':'\u2C4F','\u2C20':'\u2C50','\u2C21':'\u2C51','\u2C22':'\u2C52','\u2C23':'\u2C53','\u2C24':'\u2C54','\u2C25':'\u2C55','\u2C26':'\u2C56','\u2C27':'\u2C57','\u2C28':'\u2C58','\u2C29':'\u2C59','\u2C2A':'\u2C5A','\u2C2B':'\u2C5B','\u2C2C':'\u2C5C','\u2C2D':'\u2C5D','\u2C2E':'\u2C5E','\u2C60':'\u2C61','\u2C62':'\u026B','\u2C63':'\u1D7D','\u2C64':'\u027D','\u2C67':'\u2C68','\u2C69':'\u2C6A','\u2C6B':'\u2C6C','\u2C6D':'\u0251','\u2C6E':'\u0271','\u2C6F':'\u0250','\u2C70':'\u0252','\u2C72':'\u2C73','\u2C75':'\u2C76','\u2C7E':'\u023F','\u2C7F':'\u0240','\u2C80':'\u2C81','\u2C82':'\u2C83','\u2C84':'\u2C85','\u2C86':'\u2C87','\u2C88':'\u2C89','\u2C8A':'\u2C8B','\u2C8C':'\u2C8D','\u2C8E':'\u2C8F','\u2C90':'\u2C91','\u2C92':'\u2C93','\u2C94':'\u2C95','\u2C96':'\u2C97','\u2C98':'\u2C99','\u2C9A':'\u2C9B','\u2C9C':'\u2C9D','\u2C9E':'\u2C9F','\u2CA0':'\u2CA1','\u2CA2':'\u2CA3','\u2CA4':'\u2CA5','\u2CA6':'\u2CA7','\u2CA8':'\u2CA9','\u2CAA':'\u2CAB','\u2CAC':'\u2CAD','\u2CAE':'\u2CAF','\u2CB0':'\u2CB1','\u2CB2':'\u2CB3','\u2CB4':'\u2CB5','\u2CB6':'\u2CB7','\u2CB8':'\u2CB9','\u2CBA':'\u2CBB','\u2CBC':'\u2CBD','\u2CBE':'\u2CBF','\u2CC0':'\u2CC1','\u2CC2':'\u2CC3','\u2CC4':'\u2CC5','\u2CC6':'\u2CC7','\u2CC8':'\u2CC9','\u2CCA':'\u2CCB','\u2CCC':'\u2CCD','\u2CCE':'\u2CCF','\u2CD0':'\u2CD1','\u2CD2':'\u2CD3','\u2CD4':'\u2CD5','\u2CD6':'\u2CD7','\u2CD8':'\u2CD9','\u2CDA':'\u2CDB','\u2CDC':'\u2CDD','\u2CDE':'\u2CDF','\u2CE0':'\u2CE1','\u2CE2':'\u2CE3','\u2CEB':'\u2CEC','\u2CED':'\u2CEE','\u2CF2':'\u2CF3','\uA640':'\uA641','\uA642':'\uA643','\uA644':'\uA645','\uA646':'\uA647','\uA648':'\uA649','\uA64A':'\uA64B','\uA64C':'\uA64D','\uA64E':'\uA64F','\uA650':'\uA651','\uA652':'\uA653','\uA654':'\uA655','\uA656':'\uA657','\uA658':'\uA659','\uA65A':'\uA65B','\uA65C':'\uA65D','\uA65E':'\uA65F','\uA660':'\uA661','\uA662':'\uA663','\uA664':'\uA665','\uA666':'\uA667','\uA668':'\uA669','\uA66A':'\uA66B','\uA66C':'\uA66D','\uA680':'\uA681','\uA682':'\uA683','\uA684':'\uA685','\uA686':'\uA687','\uA688':'\uA689','\uA68A':'\uA68B','\uA68C':'\uA68D','\uA68E':'\uA68F','\uA690':'\uA691','\uA692':'\uA693','\uA694':'\uA695','\uA696':'\uA697','\uA698':'\uA699','\uA69A':'\uA69B','\uA722':'\uA723','\uA724':'\uA725','\uA726':'\uA727','\uA728':'\uA729','\uA72A':'\uA72B','\uA72C':'\uA72D','\uA72E':'\uA72F','\uA732':'\uA733','\uA734':'\uA735','\uA736':'\uA737','\uA738':'\uA739','\uA73A':'\uA73B','\uA73C':'\uA73D','\uA73E':'\uA73F','\uA740':'\uA741','\uA742':'\uA743','\uA744':'\uA745','\uA746':'\uA747','\uA748':'\uA749','\uA74A':'\uA74B','\uA74C':'\uA74D','\uA74E':'\uA74F','\uA750':'\uA751','\uA752':'\uA753','\uA754':'\uA755','\uA756':'\uA757','\uA758':'\uA759','\uA75A':'\uA75B','\uA75C':'\uA75D','\uA75E':'\uA75F','\uA760':'\uA761','\uA762':'\uA763','\uA764':'\uA765','\uA766':'\uA767','\uA768':'\uA769','\uA76A':'\uA76B','\uA76C':'\uA76D','\uA76E':'\uA76F','\uA779':'\uA77A','\uA77B':'\uA77C','\uA77D':'\u1D79','\uA77E':'\uA77F','\uA780':'\uA781','\uA782':'\uA783','\uA784':'\uA785','\uA786':'\uA787','\uA78B':'\uA78C','\uA78D':'\u0265','\uA790':'\uA791','\uA792':'\uA793','\uA796':'\uA797','\uA798':'\uA799','\uA79A':'\uA79B','\uA79C':'\uA79D','\uA79E':'\uA79F','\uA7A0':'\uA7A1','\uA7A2':'\uA7A3','\uA7A4':'\uA7A5','\uA7A6':'\uA7A7','\uA7A8':'\uA7A9','\uA7AA':'\u0266','\uA7AB':'\u025C','\uA7AC':'\u0261','\uA7AD':'\u026C','\uA7B0':'\u029E','\uA7B1':'\u0287','\uFF21':'\uFF41','\uFF22':'\uFF42','\uFF23':'\uFF43','\uFF24':'\uFF44','\uFF25':'\uFF45','\uFF26':'\uFF46','\uFF27':'\uFF47','\uFF28':'\uFF48','\uFF29':'\uFF49','\uFF2A':'\uFF4A','\uFF2B':'\uFF4B','\uFF2C':'\uFF4C','\uFF2D':'\uFF4D','\uFF2E':'\uFF4E','\uFF2F':'\uFF4F','\uFF30':'\uFF50','\uFF31':'\uFF51','\uFF32':'\uFF52','\uFF33':'\uFF53','\uFF34':'\uFF54','\uFF35':'\uFF55','\uFF36':'\uFF56','\uFF37':'\uFF57','\uFF38':'\uFF58','\uFF39':'\uFF59','\uFF3A':'\uFF5A','\uD801\uDC00':'\uD801\uDC28','\uD801\uDC01':'\uD801\uDC29','\uD801\uDC02':'\uD801\uDC2A','\uD801\uDC03':'\uD801\uDC2B','\uD801\uDC04':'\uD801\uDC2C','\uD801\uDC05':'\uD801\uDC2D','\uD801\uDC06':'\uD801\uDC2E','\uD801\uDC07':'\uD801\uDC2F','\uD801\uDC08':'\uD801\uDC30','\uD801\uDC09':'\uD801\uDC31','\uD801\uDC0A':'\uD801\uDC32','\uD801\uDC0B':'\uD801\uDC33','\uD801\uDC0C':'\uD801\uDC34','\uD801\uDC0D':'\uD801\uDC35','\uD801\uDC0E':'\uD801\uDC36','\uD801\uDC0F':'\uD801\uDC37','\uD801\uDC10':'\uD801\uDC38','\uD801\uDC11':'\uD801\uDC39','\uD801\uDC12':'\uD801\uDC3A','\uD801\uDC13':'\uD801\uDC3B','\uD801\uDC14':'\uD801\uDC3C','\uD801\uDC15':'\uD801\uDC3D','\uD801\uDC16':'\uD801\uDC3E','\uD801\uDC17':'\uD801\uDC3F','\uD801\uDC18':'\uD801\uDC40','\uD801\uDC19':'\uD801\uDC41','\uD801\uDC1A':'\uD801\uDC42','\uD801\uDC1B':'\uD801\uDC43','\uD801\uDC1C':'\uD801\uDC44','\uD801\uDC1D':'\uD801\uDC45','\uD801\uDC1E':'\uD801\uDC46','\uD801\uDC1F':'\uD801\uDC47','\uD801\uDC20':'\uD801\uDC48','\uD801\uDC21':'\uD801\uDC49','\uD801\uDC22':'\uD801\uDC4A','\uD801\uDC23':'\uD801\uDC4B','\uD801\uDC24':'\uD801\uDC4C','\uD801\uDC25':'\uD801\uDC4D','\uD801\uDC26':'\uD801\uDC4E','\uD801\uDC27':'\uD801\uDC4F','\uD806\uDCA0':'\uD806\uDCC0','\uD806\uDCA1':'\uD806\uDCC1','\uD806\uDCA2':'\uD806\uDCC2','\uD806\uDCA3':'\uD806\uDCC3','\uD806\uDCA4':'\uD806\uDCC4','\uD806\uDCA5':'\uD806\uDCC5','\uD806\uDCA6':'\uD806\uDCC6','\uD806\uDCA7':'\uD806\uDCC7','\uD806\uDCA8':'\uD806\uDCC8','\uD806\uDCA9':'\uD806\uDCC9','\uD806\uDCAA':'\uD806\uDCCA','\uD806\uDCAB':'\uD806\uDCCB','\uD806\uDCAC':'\uD806\uDCCC','\uD806\uDCAD':'\uD806\uDCCD','\uD806\uDCAE':'\uD806\uDCCE','\uD806\uDCAF':'\uD806\uDCCF','\uD806\uDCB0':'\uD806\uDCD0','\uD806\uDCB1':'\uD806\uDCD1','\uD806\uDCB2':'\uD806\uDCD2','\uD806\uDCB3':'\uD806\uDCD3','\uD806\uDCB4':'\uD806\uDCD4','\uD806\uDCB5':'\uD806\uDCD5','\uD806\uDCB6':'\uD806\uDCD6','\uD806\uDCB7':'\uD806\uDCD7','\uD806\uDCB8':'\uD806\uDCD8','\uD806\uDCB9':'\uD806\uDCD9','\uD806\uDCBA':'\uD806\uDCDA','\uD806\uDCBB':'\uD806\uDCDB','\uD806\uDCBC':'\uD806\uDCDC','\uD806\uDCBD':'\uD806\uDCDD','\uD806\uDCBE':'\uD806\uDCDE','\uD806\uDCBF':'\uD806\uDCDF','\xDF':'ss','\u0130':'i\u0307','\u0149':'\u02BCn','\u01F0':'j\u030C','\u0390':'\u03B9\u0308\u0301','\u03B0':'\u03C5\u0308\u0301','\u0587':'\u0565\u0582','\u1E96':'h\u0331','\u1E97':'t\u0308','\u1E98':'w\u030A','\u1E99':'y\u030A','\u1E9A':'a\u02BE','\u1E9E':'ss','\u1F50':'\u03C5\u0313','\u1F52':'\u03C5\u0313\u0300','\u1F54':'\u03C5\u0313\u0301','\u1F56':'\u03C5\u0313\u0342','\u1F80':'\u1F00\u03B9','\u1F81':'\u1F01\u03B9','\u1F82':'\u1F02\u03B9','\u1F83':'\u1F03\u03B9','\u1F84':'\u1F04\u03B9','\u1F85':'\u1F05\u03B9','\u1F86':'\u1F06\u03B9','\u1F87':'\u1F07\u03B9','\u1F88':'\u1F00\u03B9','\u1F89':'\u1F01\u03B9','\u1F8A':'\u1F02\u03B9','\u1F8B':'\u1F03\u03B9','\u1F8C':'\u1F04\u03B9','\u1F8D':'\u1F05\u03B9','\u1F8E':'\u1F06\u03B9','\u1F8F':'\u1F07\u03B9','\u1F90':'\u1F20\u03B9','\u1F91':'\u1F21\u03B9','\u1F92':'\u1F22\u03B9','\u1F93':'\u1F23\u03B9','\u1F94':'\u1F24\u03B9','\u1F95':'\u1F25\u03B9','\u1F96':'\u1F26\u03B9','\u1F97':'\u1F27\u03B9','\u1F98':'\u1F20\u03B9','\u1F99':'\u1F21\u03B9','\u1F9A':'\u1F22\u03B9','\u1F9B':'\u1F23\u03B9','\u1F9C':'\u1F24\u03B9','\u1F9D':'\u1F25\u03B9','\u1F9E':'\u1F26\u03B9','\u1F9F':'\u1F27\u03B9','\u1FA0':'\u1F60\u03B9','\u1FA1':'\u1F61\u03B9','\u1FA2':'\u1F62\u03B9','\u1FA3':'\u1F63\u03B9','\u1FA4':'\u1F64\u03B9','\u1FA5':'\u1F65\u03B9','\u1FA6':'\u1F66\u03B9','\u1FA7':'\u1F67\u03B9','\u1FA8':'\u1F60\u03B9','\u1FA9':'\u1F61\u03B9','\u1FAA':'\u1F62\u03B9','\u1FAB':'\u1F63\u03B9','\u1FAC':'\u1F64\u03B9','\u1FAD':'\u1F65\u03B9','\u1FAE':'\u1F66\u03B9','\u1FAF':'\u1F67\u03B9','\u1FB2':'\u1F70\u03B9','\u1FB3':'\u03B1\u03B9','\u1FB4':'\u03AC\u03B9','\u1FB6':'\u03B1\u0342','\u1FB7':'\u03B1\u0342\u03B9','\u1FBC':'\u03B1\u03B9','\u1FC2':'\u1F74\u03B9','\u1FC3':'\u03B7\u03B9','\u1FC4':'\u03AE\u03B9','\u1FC6':'\u03B7\u0342','\u1FC7':'\u03B7\u0342\u03B9','\u1FCC':'\u03B7\u03B9','\u1FD2':'\u03B9\u0308\u0300','\u1FD3':'\u03B9\u0308\u0301','\u1FD6':'\u03B9\u0342','\u1FD7':'\u03B9\u0308\u0342','\u1FE2':'\u03C5\u0308\u0300','\u1FE3':'\u03C5\u0308\u0301','\u1FE4':'\u03C1\u0313','\u1FE6':'\u03C5\u0342','\u1FE7':'\u03C5\u0308\u0342','\u1FF2':'\u1F7C\u03B9','\u1FF3':'\u03C9\u03B9','\u1FF4':'\u03CE\u03B9','\u1FF6':'\u03C9\u0342','\u1FF7':'\u03C9\u0342\u03B9','\u1FFC':'\u03C9\u03B9','\uFB00':'ff','\uFB01':'fi','\uFB02':'fl','\uFB03':'ffi','\uFB04':'ffl','\uFB05':'st','\uFB06':'st','\uFB13':'\u0574\u0576','\uFB14':'\u0574\u0565','\uFB15':'\u0574\u056B','\uFB16':'\u057E\u0576','\uFB17':'\u0574\u056D'}; - -// Normalize reference label: collapse internal whitespace -// to single space, remove leading/trailing whitespace, case fold. -module.exports = function(string) { - return string.trim().replace(regex, function($0) { - // Note: there is no need to check `hasOwnProperty($0)` here. - // If character not found in lookup table, it must be whitespace. - return map[$0] || ' '; - }); -}; diff --git a/js/lib/xml.js b/js/lib/xml.js deleted file mode 100644 index d2d95e823f..0000000000 --- a/js/lib/xml.js +++ /dev/null @@ -1,171 +0,0 @@ -"use strict"; - -var escapeXml = require('./common').escapeXml; - -// Helper function to produce an XML tag. -var tag = function(name, attrs, selfclosing) { - var result = '<' + name; - if (attrs && attrs.length > 0) { - var i = 0; - var attrib; - while ((attrib = attrs[i]) !== undefined) { - result += ' ' + attrib[0] + '="' + attrib[1] + '"'; - i++; - } - } - if (selfclosing) { - result += ' /'; - } - - result += '>'; - return result; -}; - -var reXMLTag = /\<[^>]*\>/; - -var toTagName = function(s) { - return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase(); -}; - -var renderNodes = function(block) { - - var attrs; - var tagname; - var walker = block.walker(); - var event, node, entering; - var buffer = ""; - var lastOut = "\n"; - var disableTags = 0; - var indentLevel = 0; - var indent = ' '; - var unescapedContents; - var container; - var selfClosing; - var nodetype; - - var out = function(s) { - if (disableTags > 0) { - buffer += s.replace(reXMLTag, ''); - } else { - buffer += s; - } - lastOut = s; - }; - var esc = this.escape; - var cr = function() { - if (lastOut !== '\n') { - buffer += '\n'; - lastOut = '\n'; - for (var i = indentLevel; i--;) { - buffer += indent; - } - } - }; - - var options = this.options; - - if (options.time) { console.time("rendering"); } - - buffer += '\n'; - buffer += '\n'; - - while ((event = walker.next())) { - entering = event.entering; - node = event.node; - nodetype = node.type; - - container = node.isContainer(); - selfClosing = nodetype === 'HorizontalRule' || nodetype === 'Hardbreak' || - nodetype === 'Softbreak' || nodetype === 'Image'; - unescapedContents = nodetype === 'Html' || nodetype === 'HtmlInline'; - tagname = toTagName(nodetype); - - if (entering) { - - attrs = []; - - switch (nodetype) { - case 'List': - if (node.listType !== null) { - attrs.push(['type', node.listType.toLowerCase()]); - } - if (node.listStart !== null) { - attrs.push(['start', String(node.listStart)]); - } - if (node.listTight !== null) { - attrs.push(['tight', (node.listTight ? 'true' : 'false')]); - } - var delim = node.listDelimiter; - if (delim !== null) { - var delimword = ''; - if (delim === '.') { - delimword = 'period'; - } else { - delimword = 'paren'; - } - attrs.push(['delimiter', delimword]); - } - break; - case 'CodeBlock': - if (node.info) { - attrs.push(['info', node.info]); - } - break; - case 'Header': - attrs.push(['level', String(node.level)]); - break; - case 'Link': - case 'Image': - attrs.push(['destination', node.destination]); - attrs.push(['title', node.title]); - break; - default: - break; - } - if (options.sourcepos) { - var pos = node.sourcepos; - if (pos) { - attrs.push(['data-sourcepos', String(pos[0][0]) + ':' + - String(pos[0][1]) + '-' + String(pos[1][0]) + ':' + - String(pos[1][1])]); - } - } - - cr(); - out(tag(tagname, attrs, selfClosing)); - if (container) { - indentLevel += 1; - } else if (!container && !selfClosing) { - var lit = node.literal; - if (lit) { - out(unescapedContents ? lit : esc(lit)); - } - out(tag('/' + tagname)); - } - } else { - indentLevel -= 1; - cr(); - out(tag('/' + tagname)); - } - - - } - if (options.time) { console.timeEnd("rendering"); } - buffer += '\n'; - return buffer; -}; - -// The XmlRenderer object. -function XmlRenderer(options){ - return { - // default options: - softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML - // set to "
                            " to make them hard breaks - // set to " " if you want to ignore line wrapping in source - escape: escapeXml, - options: options || {}, - render: renderNodes - }; -} - -module.exports = XmlRenderer; diff --git a/js/package.json b/js/package.json deleted file mode 100644 index 97228b2e3a..0000000000 --- a/js/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ "name": "commonmark", - "description": "a strongly specified, highly compatible variant of Markdown", - "version": "0.16.0", - "homepage": "http://commonmark.org", - "keywords": - [ "markdown", - "commonmark", - "md", - "stmd" ], - "repository": - { "type": "git", - "url": "https://github.com/jgm/CommonMark.git" }, - "author": "John MacFarlane", - "bugs": { "url": "https://github.com/jgm/CommonMark/issues" }, - "license": "BSD-3-Clause", - "main": "./lib/index.js", - "bin": { "commonmark": "./bin/commonmark" }, - "scripts": { "test": "node ./test.js" }, - "directories": { - "lib": "./lib" - }, - "engines": { - "node": "*" - } -} diff --git a/js/test.js b/js/test.js deleted file mode 100755 index 4da964dc6a..0000000000 --- a/js/test.js +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env node -"use strict"; - -var fs = require('fs'); -var commonmark = require('./lib/index.js'); - -// Home made mini-version of the npm ansi module: -var escSeq = function(s) { - return function (){ - process.stdout.write('\u001b' + s); - return this; - }; -}; - -var repeat = function(pattern, count) { - if (count < 1) { - return ''; - } - var result = ''; - while (count > 1) { - if (count & 1) { - result += pattern; - } - count >>= 1; - pattern += pattern; - } - return result + pattern; -}; - -var cursor = { - write: function (s) { - process.stdout.write(s); - return this; - }, - green: escSeq('[0;32m'), - red: escSeq('[0;31m'), - cyan: escSeq('[0;36m'), - reset: escSeq('[0m') -}; - -var writer = new commonmark.HtmlRenderer(); -var reader = new commonmark.Parser(); - -var results = { - passed: 0, - failed: 0 -}; - -var showSpaces = function(s) { - var t = s; - return t.replace(/\t/g, '→') - .replace(/ /g, '␣'); -}; - -var pathologicalTest = function(testcase, res) { - cursor.write(testcase.name + ' '); - console.time(' elapsed time'); - var actual = writer.render(reader.parse(testcase.input)); - if (actual === testcase.expected) { - cursor.green().write('✓\n').reset(); - res.passed += 1; - } else { - cursor.red().write('✘\n'); - cursor.cyan(); - cursor.write('=== markdown ===============\n'); - cursor.write(showSpaces(testcase.input)); - cursor.write('=== expected ===============\n'); - cursor.write(showSpaces(testcase.expected)); - cursor.write('=== got ====================\n'); - cursor.write(showSpaces(actual)); - cursor.write('\n'); - cursor.reset(); - res.failed += 1; - } - console.timeEnd(' elapsed time'); -}; - -fs.readFile('spec.txt', 'utf8', function(err, data) { - if (err) { - return console.log(err); - } - var i; - var examples = []; - var current_section = ""; - var example_number = 0; - var tests = data - .replace(/\r\n?/g, "\n") // Normalize newlines for platform independence - .replace(/^(.|[\n])*/m, ''); - - tests.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/gm, - function(_, markdownSubmatch, htmlSubmatch, sectionSubmatch){ - if (sectionSubmatch) { - current_section = sectionSubmatch; - } else { - example_number++; - examples.push({markdown: markdownSubmatch, - html: htmlSubmatch, - section: current_section, - number: example_number}); - } - }); - - current_section = ""; - - cursor.write('Spec tests:\n\n'); - console.time("Elapsed time"); - - for (i = 0; i < examples.length; i++) { - var example = examples[i]; - if (example.section !== current_section) { - if (current_section !== '') { - cursor.write('\n'); - } - current_section = example.section; - cursor.reset().write(current_section).reset().write(' '); - } - var actual = writer.render(reader.parse(example.markdown.replace(/→/g, '\t'))); - if (actual === example.html) { - results.passed++; - cursor.green().write('✓').reset(); - } else { - results.failed++; - cursor.write('\n'); - - cursor.red().write('✘ Example ' + example.number + '\n'); - cursor.cyan(); - cursor.write('=== markdown ===============\n'); - cursor.write(showSpaces(example.markdown)); - cursor.write('=== expected ===============\n'); - cursor.write(showSpaces(example.html)); - cursor.write('=== got ====================\n'); - cursor.write(showSpaces(actual)); - cursor.reset(); - } - } - cursor.write('\n'); - console.timeEnd("Elapsed time"); - - // pathological cases - cursor.write('\nPathological cases:\n'); - - var cases = [ - { name: 'U+0000 in input', - input: 'abc\u0000xyz\u0000\n', - expected: '

                            abc\ufffdxyz\ufffd

                            \n' }, - { name: 'nested strong emph 10000 deep', - input: repeat('*a **a ', 10000) + 'b' + repeat(' a** a*', 10000), - expected: '

                            ' + repeat('a a ', 10000) + 'b' + - repeat(' a a', 10000) + '

                            \n' }, - { name: 'nested brackets 10000 deep', - input: repeat('[', 10000) + 'a' + repeat(']', 10000), - expected: '

                            ' + repeat('[', 10000) + 'a' + repeat(']', 10000) + - '

                            \n' }, - { name: 'nested block quote 10000 deep', - input: repeat('> ', 10000) + 'a\n', - expected: repeat('
                            \n', 10000) + '

                            a

                            \n' + - repeat('
                            \n', 10000) } - ]; - - for (i = 0; i < cases.length; i++) { - pathologicalTest(cases[i], results); - } - cursor.write('\n'); - - cursor.write(results.passed.toString() + ' tests passed, ' + - results.failed.toString() + ' failed.\n'); -}); diff --git a/tools/detailed_benchmarks.sh b/tools/detailed_benchmarks.sh deleted file mode 100755 index 8bc76b45aa..0000000000 --- a/tools/detailed_benchmarks.sh +++ /dev/null @@ -1,2 +0,0 @@ -sudo echo "" -for x in samples/*.md; do make benchjs BENCHINP=$x; done | awk -f tools/format_benchmarks.awk diff --git a/tools/format_benchmarks.awk b/tools/format_benchmarks.awk deleted file mode 100644 index 88dd7a3036..0000000000 --- a/tools/format_benchmarks.awk +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh env awk -BEGIN { - CONVFMT="%2.1f"; - print "| Sample |showdown |commonmark|marked |markdown-it|" - print "|------------------------|---------:|---------:|---------:|----------:|" -} -{ - if (/samples\//) { - sub(/samples\//, ""); - printf "|%-24s|", $7; - } else if (/^showdown/) { - sub(/,/, ""); - showdown = $4; - } else if (/^commonmark/) { - sub(/,/, ""); - commonmark = $4; - } else if (/^marked/) { - sub(/,/, ""); - marked = $4; - } else if (/^markdown-it/) { - sub(/,/, ""); - markdownit = $4; - printf "%10s|%10s|%10s|%11s|\n", - (showdown / showdown), - (commonmark / showdown), - (marked / showdown), - (markdownit / showdown); - markdownit = ""; - showdown = ""; - marked = ""; - commonmark = ""; - } else { - next; - } -} -- cgit 0.0.5-2-1-g0f52 From bb777ce120ea26ece018e16e92b013a933b2dbb0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 12:07:05 -0800 Subject: Makefile: replaced PROG with CMARK and PROG. PROG is overridable, CMARK is not. Slight adjustment to #297. --- Makefile | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 59d55a964f..536638ee73 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,8 @@ BENCHDIR=bench BENCHFILE=$(BENCHDIR)/benchinput.md ALLTESTS=alltests.md NUMRUNS?=10 -PROG=$(BUILDDIR)/src/cmark +CMARK=$(BUILDDIR)/src/cmark +PROG?=$(CMARK) BENCHINP?=README.md JSMODULES=$(wildcard js/lib/*.js) VERSION?=$(SPECVERSION) @@ -24,7 +25,7 @@ INSTALL_PREFIX?=/usr/local all: cmake_build man/man3/cmark.3 -$(PROG): cmake_build +$(CMARK): cmake_build cmake_build: $(BUILDDIR) @make -j2 -C $(BUILDDIR) @@ -54,7 +55,7 @@ mingw: cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain-mingw32.cmake -DCMAKE_INSTALL_PREFIX=$(MINGW_INSTALLDIR) ;\ make && make install -man/man3/cmark.3: src/cmark.h | $(PROG) +man/man3/cmark.3: src/cmark.h | $(CMARK) python3 man/make_man_page.py $< > $@ \ archive: @@ -118,8 +119,8 @@ astyle: astyle --style=linux -t -p -r 'src/*.c' --exclude=scanners.c astyle --style=linux -t -p -r 'src/*.h' --exclude=html_unescape.h -operf: $(PROG) - operf $(PROG) <$(BENCHINP) >/dev/null +operf: $(CMARK) + operf $< < $(BENCHINP) > /dev/null distclean: clean -rm -f js/dist/commonmark.js @@ -160,7 +161,7 @@ dingus: js/dist/commonmark.js spec.md: $(SPEC) python3 tools/makespec.py markdown > $@ -spec.html: spec.txt tools/template.html ${PROG} +spec.html: spec.txt tools/template.html ${CMARK} python3 tools/makespec.py html > $@ spec.pdf: spec.md tools/template.tex tools/specfilter.hs -- cgit 0.0.5-2-1-g0f52 From 86039e2db099bbf2b56318c7ecacc62e07b7d6a2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 12:24:54 -0800 Subject: Makefile: Removed JS related stuff. --- Makefile | 35 +++-------------------------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index 536638ee73..a946f981a3 100644 --- a/Makefile +++ b/Makefile @@ -16,12 +16,11 @@ NUMRUNS?=10 CMARK=$(BUILDDIR)/src/cmark PROG?=$(CMARK) BENCHINP?=README.md -JSMODULES=$(wildcard js/lib/*.js) VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload jshint test testjs benchjs update-site upload-site npm debug mingw archive tarball ziparchive testtarball testziparchive testlib bench astyle +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug mingw archive tarball ziparchive testtarball testziparchive testlib bench astyle all: cmake_build man/man3/cmark.3 @@ -123,39 +122,11 @@ operf: $(CMARK) operf $< < $(BENCHINP) > /dev/null distclean: clean - -rm -f js/dist/commonmark.js -rm -rf *.dSYM -rm -f README.html -rm -f spec.md fuzz.txt spec.html -rm -rf $(BENCHFILE) $(ALLTESTS) progit -### JavaScript ### - -js/dist/commonmark.js: js/lib/index.js ${JSMODULES} - browserify --standalone commonmark $< -o $@ - -# 'npm install -g uglify-js' for the uglifyjs tool: -js/dist/commonmark.min.js: js/dist/commonmark.js - uglifyjs $< --compress keep_fargs=true,pure_getters=true --preamble "/* commonmark $(VERSION) https://github.com/jgm/CommonMark @license BSD3 */" > $@ - -testjs: $(SPEC) - node js/test.js - -jshint: - jshint ${JSMODULES} - -lint: - eslint -c js/eslint.json ${JSMODULES} js/bin/commonmark js/test.js js/bench.js - -benchjs: - sudo renice 99 $$$$; node js/bench.js ${BENCHINP} - -npm: - cd js; npm publish - -dingus: js/dist/commonmark.js - echo "Starting dingus server at http://localhost:9000/dingus.html" && python -m SimpleHTTPServer 9000 - ### Spec ### spec.md: $(SPEC) @@ -172,8 +143,8 @@ spec.pdf: spec.md tools/template.tex tools/specfilter.hs ### Website ### -update-site: spec js/dist/commonmark.js +update-site: spec make -C $(SITE) update -upload-site: spec js/dist/commonmark.js +upload-site: spec make -C $(SITE) upload -- cgit 0.0.5-2-1-g0f52 From f1f08ef096c4afae74e71f0db053c7ef3bcc4632 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 12:27:40 -0800 Subject: Removed some old targets from .PHONY. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a946f981a3..47ff11150c 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug mingw archive tarball ziparchive testtarball testziparchive testlib bench astyle +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug mingw archive bench astyle all: cmake_build man/man3/cmark.3 -- cgit 0.0.5-2-1-g0f52 From a96212d2e7dcc693c0511f5a83ec2c97830bb237 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 12:50:02 -0800 Subject: Removed JS specific stuff from .editorconfig. --- .editorconfig | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.editorconfig b/.editorconfig index ab11d40edb..915ad661f1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,11 +7,6 @@ end_of_line = lf charset = utf-8 insert_final_newline = true -[*.js] -trim_trailing_whitespace = true -indent_style = space -indent_size = 2 - [*.{c,h}] trim_trailing_whitespace = true indent_style = tab -- cgit 0.0.5-2-1-g0f52 From 4a822d089d45ae495a1e0763dcdc018e8035d3cf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 20:30:46 -0800 Subject: Removed obsolete PACKAGEDIR in Makefile. --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 47ff11150c..62b0023433 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,6 @@ MINGW_INSTALLDIR?=windows SPEC=spec.txt SITE=_site SPECVERSION=$(shell perl -ne 'print $$1 if /^version: *([0-9.]+)/' $(SPEC)) -PKGDIR?=cmark-$(SPECVERSION) FUZZCHARS?=2000000 # for fuzztest BENCHDIR=bench BENCHFILE=$(BENCHDIR)/benchinput.md @@ -62,7 +61,7 @@ archive: git archive --prefix=$(RELEASE)/ -o $(RELEASE).zip HEAD clean: - rm -rf $(BUILDDIR) $(MINGW_BUILDDIR) $(MINGW_INSTALLDIR) $(PKGDIR) + rm -rf $(BUILDDIR) $(MINGW_BUILDDIR) $(MINGW_INSTALLDIR) # We include html_unescape.h in the repository, so this shouldn't # normally need to be generated. -- cgit 0.0.5-2-1-g0f52 From 86c4b10ddd510240c383ef8874ded2ba1b407e88 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 20:35:47 -0800 Subject: Bump spec version to 0.17, updated changelog for spec. --- changelog.spec.txt | 15 +++++++++++++++ spec.txt | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/changelog.spec.txt b/changelog.spec.txt index 1926fa70b3..445edbb303 100644 --- a/changelog.spec.txt +++ b/changelog.spec.txt @@ -1,3 +1,18 @@ +[0.17] + + * Improved rule limiting intraword `_` for emphasis and strong emphasis. + To prevent intra-word emphasis, we used to check to see if + the delimiter was followed/preceded by an ASCII alphanumeric. + We now do something more elegant: whereas an opening `*` must + be left-flanking, an opening `_` must be left-flanking *and + not right-flanking*. And so on for the other cases. + All the original tests passed except some tests with Russian + text with internal `_`, which formerly created emphasis but no + longer do with the new rule. These tests have been adjusted. + A few new test cases have been added to illustrate the rule. + * Added example with link break inside pointy braces (no link) (#295). + * Added spec example: loose list with blank line after fenced code (#285). + [0.16] * Rewrote beginning of Entities section, clarifying that only diff --git a/spec.txt b/spec.txt index f4dd7221a6..e75481045f 100644 --- a/spec.txt +++ b/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.16 -date: 2015-01-14 +version: 0.17 +date: 2015-01-24 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 75609bfa7ca68527357e1787ec8ffbd7e04a6dc0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 20:36:13 -0800 Subject: Updated version in CMakeLists.txt. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 61f1a9039f..00c5d8fb4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 16) +set(PROJECT_VERSION_MINOR 17) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From b0918a56a878237b7f069fe2499877eb0246c8f3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 20:54:00 -0800 Subject: Updated changelog.c.txt. --- changelog.c.txt | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/changelog.c.txt b/changelog.c.txt index 03917b1db1..50f1c7d1a8 100644 --- a/changelog.c.txt +++ b/changelog.c.txt @@ -1,3 +1,35 @@ +[0.17] + + * Stripped out all JavaScript related code and documentation, moving + it to a separate repository (). + * Improved Makefile targets, so that `cmake` is run again only when + necessary (Nick Wellnhofer). + * Added `INSTALL_PREFIX` to the Makefile, allowing installation to a + location other than `/usr/local` without invoking `cmake` + manually (Nick Wellnhofer). + * `make test` now guarantees that the project will + be rebuilt before tests are run (Nick Wellnhofer). + * Prohibited overriding of some Makefile variables (Nick Wellnhofer). + * Provide version number and string, both as macros + (`CMARK_VERSION`, `CMARK_VERSION_STRING`) and as symbols + (`cmark_version`, `cmark_version_string`) (Nick Wellnhofer). All of + these come from `cmark_version.h`, which is constructed from a + template `cmark_version.h.in` and data in `CMakeLists.txt`. + * Avoid calling `free` on null pointer. + * Added an accessor for an iterator's root node (`cmark_iter_get_root`). + * Added user data field for nodes (Nick Wellnhofer). This is + intended mainly for use in bindings for dynamic languages, where + it could store a pointer to a target language object (#287). But + it can be used for anything. + * Man renderer: properly escape multiline strings. + * Added assertion to raise error if finalize is called on a closed block. + * Implemented the new spec rule for emphasis and strong emphasis with `_`. + * Moved the check for fence-close with the other checks for end-of-block. + * Fixed a bug with loose list detection with items containings + fenced code blocks (#285). + * Removed recursive algorithm in `ends_with_blank_line` (#286). + * Minor code reformatting: renamed parameters. + [0.16] * Added xml renderer (XML representation of the CommonMark AST, -- cgit 0.0.5-2-1-g0f52 From 5ef31853d5161d4b5a2dfc0df94e6eaaeb3215d0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 20:56:43 -0800 Subject: Added note on documentation in man pages. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 17252423fb..8af9a48c57 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ The implementations The C implementation provides both a shared library (`libcmark`) and a standalone program `cmark` that converts CommonMark to HTML. It is written in standard C99 and has no library dependencies. The parser is -very fast (see [benchmarks](benchmarks.md)). +very fast (see [benchmarks](benchmarks.md)). For documentation, see +the man pages in the `man` directory. It is easy to use `libcmark` in python, lua, ruby, and other dynamic languages: see the `wrappers/` subdirectory for some simple examples. -- cgit 0.0.5-2-1-g0f52 From e7232e399a66ea97ce2ed9303c71ec03245cc172 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:09:28 -0800 Subject: Renamed changelog.c.txt -> changelog.txt. Deleted changelog.spec.txt. --- changelog.c.txt | 49 --------------------------- changelog.spec.txt | 99 ------------------------------------------------------ changelog.txt | 49 +++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 148 deletions(-) delete mode 100644 changelog.c.txt delete mode 100644 changelog.spec.txt create mode 100644 changelog.txt diff --git a/changelog.c.txt b/changelog.c.txt deleted file mode 100644 index 50f1c7d1a8..0000000000 --- a/changelog.c.txt +++ /dev/null @@ -1,49 +0,0 @@ -[0.17] - - * Stripped out all JavaScript related code and documentation, moving - it to a separate repository (). - * Improved Makefile targets, so that `cmake` is run again only when - necessary (Nick Wellnhofer). - * Added `INSTALL_PREFIX` to the Makefile, allowing installation to a - location other than `/usr/local` without invoking `cmake` - manually (Nick Wellnhofer). - * `make test` now guarantees that the project will - be rebuilt before tests are run (Nick Wellnhofer). - * Prohibited overriding of some Makefile variables (Nick Wellnhofer). - * Provide version number and string, both as macros - (`CMARK_VERSION`, `CMARK_VERSION_STRING`) and as symbols - (`cmark_version`, `cmark_version_string`) (Nick Wellnhofer). All of - these come from `cmark_version.h`, which is constructed from a - template `cmark_version.h.in` and data in `CMakeLists.txt`. - * Avoid calling `free` on null pointer. - * Added an accessor for an iterator's root node (`cmark_iter_get_root`). - * Added user data field for nodes (Nick Wellnhofer). This is - intended mainly for use in bindings for dynamic languages, where - it could store a pointer to a target language object (#287). But - it can be used for anything. - * Man renderer: properly escape multiline strings. - * Added assertion to raise error if finalize is called on a closed block. - * Implemented the new spec rule for emphasis and strong emphasis with `_`. - * Moved the check for fence-close with the other checks for end-of-block. - * Fixed a bug with loose list detection with items containings - fenced code blocks (#285). - * Removed recursive algorithm in `ends_with_blank_line` (#286). - * Minor code reformatting: renamed parameters. - -[0.16] - - * Added xml renderer (XML representation of the CommonMark AST, - which is described in `CommonMark.dtd`). - * Reduced size of gperf entity table (Nick Wellnhofer). - * Reworked iterators to allow deletion of nodes during iteration - (Nick Wellnhofer). - * Optimized `S_is_leaf`. - * Added `cmark_iter_reset` to iterator API. - * Added `cmark_consolidate_text_nodes` to API to combine adjacent - text nodes. - * Added `CMARK_OPT_NORMALIZE` to options (this combines adjacent - text nodes). - * Added `--normalize` option to command-line program. - * Improved regex for HTML comments in inline parsing. - * Python is no longer required for a basic build from the - repository. diff --git a/changelog.spec.txt b/changelog.spec.txt deleted file mode 100644 index 445edbb303..0000000000 --- a/changelog.spec.txt +++ /dev/null @@ -1,99 +0,0 @@ -[0.17] - - * Improved rule limiting intraword `_` for emphasis and strong emphasis. - To prevent intra-word emphasis, we used to check to see if - the delimiter was followed/preceded by an ASCII alphanumeric. - We now do something more elegant: whereas an opening `*` must - be left-flanking, an opening `_` must be left-flanking *and - not right-flanking*. And so on for the other cases. - All the original tests passed except some tests with Russian - text with internal `_`, which formerly created emphasis but no - longer do with the new rule. These tests have been adjusted. - A few new test cases have been added to illustrate the rule. - * Added example with link break inside pointy braces (no link) (#295). - * Added spec example: loose list with blank line after fenced code (#285). - -[0.16] - - * Rewrote beginning of Entities section, clarifying that only - entities not in code blocks or spans are decoded. - * Removed defective Example 449 (#284). - * Fixed typo (#283). - * Added intended two-space hard-breaks in Examples 521, 523. - * Clarified that brackets in general don't take precedence over emph - (#258). - * Clarified that final newline is removed from paragraph content - (#176). - * Talk of "info string" rather than "attributes" for code blocks - (#262). - * Clarified precedence of code spans, HTML tags, autolinks (#259). - * Fixed a number of internal links and duplicate references in the spec. - * Linkify "info string" in spec. - * Use shortcut reference links when possible in spec.txt. - * cmark itself is now used to build spec.html, rather than pandoc. - * Use shortcut reference links when possible in spec.txt. This - relies on the new `spec2md.py` behavior of creating references - for all internal anchors. - * Moved some examples from block to inline HTML section. - * Added examples of non-comments (#264). - * Changed rule for comments to conform to HTML5 spec. - * Made clear that any sequence of characters is a valid document - (#266). - * Changed wording: "is preferred" -> "takes precedence." - * Regularized spelling of "non-space character" and added links - (#260). - * Use four spaces rather than five to show "four spaces is too much" - (#261). - -[0.15] - - * Fixed some typos with "left-" and "right-flanking" delimiters in the - section on emphasis and strong emphasis (#257). - -[0.14] - - * Clarified indented code blocks. Previously the spec said, wrongly, - that a blank line was needed between a paragraph and a following - code block. It is only needed between a code block and a following - paragraph (due to lazy continuations). (Thanks to textnut.) - * Added definitions of whitespace, unicode whitespace, punctuation, - ASCII punctuation (#108). - * Improved rules for emphasis and strong emphasis. This improves - parsing of emphasis around punctuation. For background see - . The basic idea of the change - is that if the delimiter is part of a delimiter clump that has - punctuation to the left and a normal character (non-space, - non-punctuation) to the right, it can only be an opener. If it has - punctuation to the right and a normal character (non-space, - non-punctuation) to the left, it can only be a closer. This handles - cases like - - **Gomphocarpus (*Gomphocarpus physocarpus*, syn. *Asclepias - physocarpa*)** - - and - - **foo "*bar*" foo** - - better than before. - * Added test case for link-in-link-in-image (#252). - * Fixed broken internal references. - * Added another example of an unclarity in the canonical Markdown - syntax description. - * Reworded the principle of uniformity to be more general; it applies - to all container blocks, not just list items. - * Added a rule for empty list items (#242). - * Clarified precedence of empty list items over setext header lines - (#95). - * Added an example with two blank lines in fenced code in a sublist (#180). - * Added an explicit CC-BY-SA license to the spec (#55). - -[0.13] - - * Updated path of test program. - * Use terminology "plain textual content" instead of "string." - * Added condition that conforming parsers strip or replace NULL characters. - * Changed Example 196 to reflect the spec's rules. It should not be a loose - list as it has no blank lines. - * Adjusted semantically insignificant formatting of HTML output. - * Added example to spec of shortcut link with following space (#214). diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000000..50f1c7d1a8 --- /dev/null +++ b/changelog.txt @@ -0,0 +1,49 @@ +[0.17] + + * Stripped out all JavaScript related code and documentation, moving + it to a separate repository (). + * Improved Makefile targets, so that `cmake` is run again only when + necessary (Nick Wellnhofer). + * Added `INSTALL_PREFIX` to the Makefile, allowing installation to a + location other than `/usr/local` without invoking `cmake` + manually (Nick Wellnhofer). + * `make test` now guarantees that the project will + be rebuilt before tests are run (Nick Wellnhofer). + * Prohibited overriding of some Makefile variables (Nick Wellnhofer). + * Provide version number and string, both as macros + (`CMARK_VERSION`, `CMARK_VERSION_STRING`) and as symbols + (`cmark_version`, `cmark_version_string`) (Nick Wellnhofer). All of + these come from `cmark_version.h`, which is constructed from a + template `cmark_version.h.in` and data in `CMakeLists.txt`. + * Avoid calling `free` on null pointer. + * Added an accessor for an iterator's root node (`cmark_iter_get_root`). + * Added user data field for nodes (Nick Wellnhofer). This is + intended mainly for use in bindings for dynamic languages, where + it could store a pointer to a target language object (#287). But + it can be used for anything. + * Man renderer: properly escape multiline strings. + * Added assertion to raise error if finalize is called on a closed block. + * Implemented the new spec rule for emphasis and strong emphasis with `_`. + * Moved the check for fence-close with the other checks for end-of-block. + * Fixed a bug with loose list detection with items containings + fenced code blocks (#285). + * Removed recursive algorithm in `ends_with_blank_line` (#286). + * Minor code reformatting: renamed parameters. + +[0.16] + + * Added xml renderer (XML representation of the CommonMark AST, + which is described in `CommonMark.dtd`). + * Reduced size of gperf entity table (Nick Wellnhofer). + * Reworked iterators to allow deletion of nodes during iteration + (Nick Wellnhofer). + * Optimized `S_is_leaf`. + * Added `cmark_iter_reset` to iterator API. + * Added `cmark_consolidate_text_nodes` to API to combine adjacent + text nodes. + * Added `CMARK_OPT_NORMALIZE` to options (this combines adjacent + text nodes). + * Added `--normalize` option to command-line program. + * Improved regex for HTML comments in inline parsing. + * Python is no longer required for a basic build from the + repository. -- cgit 0.0.5-2-1-g0f52 From be19ec302584732eca18de162a7eaf5d8649379e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:10:11 -0800 Subject: Removed spec-specific files (DTD, spec generation tools). --- CommonMark.dtd | 72 ------------- alternative-html-blocks.txt | 247 -------------------------------------------- tools/makespec.py | 165 ----------------------------- tools/spec2js.js | 17 --- tools/specfilter.hs | 36 ------- tools/template.html | 110 -------------------- tools/template.tex | 229 ---------------------------------------- 7 files changed, 876 deletions(-) delete mode 100644 CommonMark.dtd delete mode 100644 alternative-html-blocks.txt delete mode 100755 tools/makespec.py delete mode 100755 tools/spec2js.js delete mode 100755 tools/specfilter.hs delete mode 100644 tools/template.html delete mode 100644 tools/template.tex diff --git a/CommonMark.dtd b/CommonMark.dtd deleted file mode 100644 index 27de97aa75..0000000000 --- a/CommonMark.dtd +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/alternative-html-blocks.txt b/alternative-html-blocks.txt deleted file mode 100644 index 3ba0d15614..0000000000 --- a/alternative-html-blocks.txt +++ /dev/null @@ -1,247 +0,0 @@ -# Appendix B: An alternate spec for HTML blocks {-} - -(The following spec departs less from original markdown than the -one described above, but is also less flexible.) - -An [HTML block](#html-block) begins -with an [open tag](#open-tag), [HTML comment](#html-comment), -[processing instruction](#processing-instruction), -[declaration](#declaration), or [CDATA section](#cdata-section). -This opening element may optionally be preceded by 1-3 spaces, -and must not be followed on a line by anything other than white space. - -If the opening tag is self-closing, or if it is an [HTML -comment](#html-comment), [processing -instruction](#processing-instruction), [declaration](#declaration), or -[CDATA section](#cdata-section), then the [HTML block](#html-block) -contains just that tag. - -If it is an [open tag](#open-tag), then the [HTML block](#html-block) -continues until a matching closing tag is found, or until the end -of the document. Note that the matching closing tag is not necessarily -the first closing tag of the same type that is encountered, since -that tag may close a later open tag of the same type. Open and closing -tags must be balanced. - -The contents of the HTML block are interpreted as raw HTML, and will not -be escaped in HTML output. - -Some simple examples: - -. - - - - -
                            - hi -
                            - -okay. -. - - - - -
                            - hi -
                            -

                            okay.

                            -. - - -. -
                            - -
                            - -

                            fooö

                            - -
                            - -
                            -. -
                            - -
                            - -

                            fooö

                            - -
                            - -
                            -. - -A self-closing tag: - -. -
                            -. -
                            -. - -Here we have an unclosed tag, and the block continues to the end of -the document: - -. -
                            -
                            -foo -
                            - -*bar* -. -
                            -
                            -foo -
                            - -*bar* -. - -A comment: - -. - -. - -. - -A processing instruction: - -. - -. - -. - -CDATA: - -. - -. - -. - -The opening tag can be indented 1-3 spaces, but not 4: - -. - - -. - -
                            <!-- foo -->
                            -
                            -. - -The opening tag must be on a line (or lines) by itself: - -. -
                            -foo -
                            -. -

                            foo

                            -. - -. -bar -. -

                            bar

                            -. - -The opening tag need not be an HTML block tag or even an HTML tag: - -. -
                            -foo - -. - -foo - -. - -. - -bar - -. - -bar - -. - -So, note the difference: - -. - -bar - - -bar -. - -bar - -

                            bar

                            -. - -This rule differs from John Gruber's original markdown syntax -specification, which says: - -> The only restrictions are that block-level HTML elements — -> e.g. `
                            `, ``, `
                            `, `

                            `, etc. — must be separated from -> surrounding content by blank lines, and the start and end tags of the -> block should not be indented with tabs or spaces. - -In some ways Gruber's rule is more restrictive than the one given -here: - -- It requires that an HTML block be preceded and followed by a blank line. -- It does not allow the start tag to be indented. -- It does not allow the end tag to be indented. -- It does not require that the open tag be an HTML block-level tag. - -Indeed, most markdown implementations, including some of Gruber's -own perl implementations, do not impose these restrictions. - -However, unlike Gruber's rule, this one requires that the open -tag be on a line by itself. It also differs from most markdown -implementations in how it handles the case where there is no matching -closing tag (a case not mentioned in Gruber's rule). In such a case, -the rule stated above includes the whole rest of the document in the -HTML block. - diff --git a/tools/makespec.py b/tools/makespec.py deleted file mode 100755 index b031208bda..0000000000 --- a/tools/makespec.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env python3 -import re -import sys -from subprocess import * -from string import Template - -if len(sys.argv) == 2: - specformat = sys.argv[1] - if not (specformat in ["html", "markdown"]): - sys.stderr.write("Format must be html or markdown\n") - exit(1) -else: - sys.stderr.write("Usage: makespec.py [html|markdown]\n") - exit(1) - -def toIdentifier(s): - return re.sub(r'\s+', '-', re.sub(r'\W+', ' ', s.strip().lower())) - -def parseYaml(yaml): - metadata = {} - def parseField(match): - key = match.group(1) - val = match.group(2).strip() - if re.match(r'^\'', val): - val = val[1:len(val) - 1] - metadata[key] = val - fieldre = re.compile('^(\w+):(.*)$', re.MULTILINE) - re.sub(fieldre, parseField, yaml) - return metadata - -def pipe_through_prog(prog, text): - p1 = Popen(prog.split(), stdout=PIPE, stdin=PIPE, stderr=PIPE) - [result, err] = p1.communicate(input=text.encode('utf-8')) - return [p1.returncode, result.decode('utf-8'), err] - -def replaceAnchor(match): - refs.append("[{0}]: #{1}".format(match.group(1), match.group(2))) - if specformat == "html": - return '{0}'.format(match.group(1), match.group(2)) - else: - return match.group(0) - -stage = 0 -example = 0 -section = "" -sections = [] -mdlines = [] -refs = [] -lastnum = [] -finishedMeta = False -yamllines = [] - -with open('spec.txt', 'r', encoding='utf-8') as spec: - for ln in spec: - if not finishedMeta: - yamllines.append(ln) - if re.match(r'^\.\.\.$', ln): - finishedMeta = True - elif re.match(r'^\.$', ln): - if stage == 0: - example += 1 - mdlines.append("\n

                            \n".format(example, section)) - mdlines.append("\n\n".format(example)) - mdlines.append("````````````````````````````````````````````````````````` markdown\n") - stage = 1 - elif stage == 1: - mdlines.append("`````````````````````````````````````````````````````````\n\n") - mdlines.append("````````````````````````````````````````````````````````` html\n") - stage = 2 - elif stage == 2: - mdlines.append("`````````````````````````````````````````````````````````\n\n") - mdlines.append("
                            \n") - stage = 0 - else: - sys.stderr.out("Encountered unknown stage {0}\n".format(stage)) - sys.exit(1) - else: - if stage == 0: - match = re.match(r'^(#{1,6}) *(.*)', ln) - if match: - section = match.group(2) - lastlevel = len(lastnum) - level = len(match.group(1)) - if re.search(r'{-}$', section): - section = re.sub(r' *{-} *$', '', section) - if specformat == 'html': - ln = re.sub(r' *{-} *$', '', ln) - number = '' - else: - if lastlevel == level: - lastnum[level - 1] = lastnum[level - 1] + 1 - elif lastlevel < level: - while len(lastnum) < level: - lastnum.append(1) - else: # lastlevel > level - lastnum = lastnum[0:level] - lastnum[level - 1] = lastnum[level - 1] + 1 - number = '.'.join([str(x) for x in lastnum]) - ident = toIdentifier(section) - ln = re.sub(r' ', ' ' + number + ' ', ln, count=1) - sections.append(dict(level=level, - contents=section, - ident=ident, - number=number)) - refs.append("[{0}]: #{1}".format(section, ident)) - ln = re.sub(r'# +', '# '.format(ident), - ln, count=1) - else: - ln = re.sub(r'\[([^]]*)\]\(@([^)]*)\)', replaceAnchor, ln) - else: - ln = re.sub(r' ', '␣', ln) - mdlines.append(ln) - -mdtext = ''.join(mdlines) + '\n\n' + '\n'.join(refs) + '\n' -yaml = ''.join(yamllines) -metadata = parseYaml(yaml) - -if specformat == "markdown": - sys.stdout.write(yaml + '\n\n' + mdtext) -elif specformat == "html": - with open("tools/template.html", "r", encoding="utf-8") as templatefile: - template = Template(templatefile.read()) - toclines = [] - for section in sections: - indent = ' ' * (section['level'] - 1) - toclines.append(indent + '* [' + section['number'] + ' ' + - section['contents'] + '](#' + section['ident'] + ')') - toc = '
                            \n\n' + '\n'.join(toclines) + '\n\n
                            \n\n' - prog = "build/src/cmark" - [retcode, result, err] = pipe_through_prog(prog, toc + mdtext) - if retcode == 0: - result = re.sub(r'␣', ' ', result) - result = re.sub(r'<\/a> ', - "", result) - # put plural s inside links for better visuals: - result = re.sub(r'<\/a>s', "s", result) - sys.stdout.write(template.substitute(metadata, body=result)) - - # check for errors: - idents = [] - for ident in re.findall(r'id="([^"]*)"', result): - if ident in idents: - sys.stderr.write("WARNING: duplicate identifier '" + ident + - "'\n") - else: - idents.append(ident) - for href in re.findall(r'href="#([^"]*)"', result): - if not (href in idents): - sys.stderr.write("WARNING: internal link with no anchor '" + - href + "'\n") - reftexts = [] - for ref in refs: - ref = re.sub('].*',']',ref).upper() - if ref in reftexts: - sys.stderr.write("WARNING: duplicate reference link '" + - ref + "'\n") - else: - reftexts.append(ref) - - else: - sys.stderr.write("Error converting markdown version of spec:\n") - sys.stderr.write(err) - exit(1) - -exit(0) diff --git a/tools/spec2js.js b/tools/spec2js.js deleted file mode 100755 index 6bf366f97f..0000000000 --- a/tools/spec2js.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -var fs = require('fs'); -var util = require('util'); - -fs.readFile('spec.txt', 'utf8', function(err, data) { - if (err) { - return console.log(err); - } - var examples = []; - data.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$/gm, - function(_,x,y){ - examples.push({markdown: x, html: y}); - }); - console.log(util.inspect(examples, { depth: null })); - console.warn(examples.length + ' examples'); -}); diff --git a/tools/specfilter.hs b/tools/specfilter.hs deleted file mode 100755 index 7a7676b486..0000000000 --- a/tools/specfilter.hs +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env runhaskell - -import Text.Pandoc.JSON -import Text.Pandoc.Generic - -main = toJSONFilter go - where go :: Pandoc -> Pandoc - go = bottomUp exampleDivs . bottomUp (concatMap anchors) - -exampleDivs :: Block -> Block -exampleDivs (Div (ident, ["example"], kvs) - [ d@(Div (_,["examplenum"],_) _), - c1@(CodeBlock (_,["markdown"],_) _), - c2@(CodeBlock (_,["html"],_) _) - ]) = Div (ident, ["example"], kvs) - [ rawtex "\\begin{minipage}[t]{\\textwidth}\n{\\scriptsize " - , d - , rawtex "\\vspace{-1em}}" - , rawtex "\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.85}\n" - , addBreaks c1 - , rawtex "\\end{minipage}\n\\hfill\n\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.95}\n" - , addBreaks c2 - , rawtex "\\end{minipage}\n\\end{minipage}" - ] - where rawtex = RawBlock (Format "latex") - addBreaks (CodeBlock attrs code) = CodeBlock attrs $ addBreaks' code - addBreaks' code = - if length code > 49 - then take 49 code ++ ('\n':addBreaks' (drop 49 code)) - else code -exampleDivs x = x - -anchors :: Inline -> [Inline] -anchors (Link text ('@':lab,_)) = - [RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}"), Strong text] -anchors x = [x] diff --git a/tools/template.html b/tools/template.html deleted file mode 100644 index 10bbdb53b2..0000000000 --- a/tools/template.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - -${title} - - - - - -

                            ${title}

                            -
                            Version ${version} (${date})
                            -
                            - ${author} -
                            - -
                            -${body} - - diff --git a/tools/template.tex b/tools/template.tex deleted file mode 100644 index d083b7234a..0000000000 --- a/tools/template.tex +++ /dev/null @@ -1,229 +0,0 @@ -\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} -$if(fontfamily)$ -\usepackage{$fontfamily$} -$else$ -\usepackage{lmodern} -$endif$ -$if(linestretch)$ -\usepackage{setspace} -\setstretch{$linestretch$} -$endif$ -\usepackage{amssymb,amsmath} -\usepackage{ifxetex,ifluatex} -\usepackage{fixltx2e} % provides \textsubscript -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - \usepackage[T1]{fontenc} - \usepackage[utf8]{inputenc} -$if(euro)$ - \usepackage{eurosym} -$endif$ -\else % if luatex or xelatex - \ifxetex - \usepackage{mathspec} - \usepackage{xltxtra,xunicode} - \else - \usepackage{fontspec} - \fi - \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} - \newcommand{\euro}{€} -$if(mainfont)$ - \setmainfont{$mainfont$} -$endif$ -$if(sansfont)$ - \setsansfont{$sansfont$} -$endif$ -$if(monofont)$ - \setmonofont[Mapping=tex-ansi]{$monofont$} -$endif$ -$if(mathfont)$ - \setmathfont(Digits,Latin,Greek){$mathfont$} -$endif$ -\fi -% use upquote if available, for straight quotes in verbatim environments -\IfFileExists{upquote.sty}{\usepackage{upquote}}{} -% use microtype if available -\IfFileExists{microtype.sty}{\usepackage{microtype}}{} -\usepackage[margin=1in]{geometry} -$if(natbib)$ -\usepackage{natbib} -\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} -$endif$ -$if(biblatex)$ -\usepackage{biblatex} -$if(biblio-files)$ -\bibliography{$biblio-files$} -$endif$ -$endif$ -$if(listings)$ -\usepackage{listings} -$endif$ -$if(lhs)$ -\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} -$endif$ -\usepackage{fancyvrb} -\usepackage{color,framed} -\newcommand{\VerbBar}{|} -\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} -\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\small} -% Add ',fontsize=\small' for more characters per line -\definecolor{shadecolor}{gray}{1} -\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}} -\newcommand{\NormalTok}[1]{{#1}} -\let\KeywordTok\NormalTok -\let\DataTypeTok\NormalTok -\let\DecValTok\NormalTok -\let\BaseNTok\NormalTok -\let\FloatTok\NormalTok -\let\CharTok\NormalTok -\let\StringTok\NormalTok -\let\CommentTok\NormalTok -\let\OtherTok\NormalTok -\let\AlertTok\NormalTok -\let\FunctionTok\NormalTok -\let\RegionMarkerTok\NormalTok -\let\ErrorTok\NormalTok -%\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} -%\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} -%\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} -%\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} -%\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} -%\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} -%\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} -%\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} -%\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} -%\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} -%\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} -%\newcommand{\RegionMarkerTok}[1]{{#1}} -%\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} -$if(verbatim-in-note)$ -\usepackage{fancyvrb} -$endif$ -$if(tables)$ -\usepackage{longtable,booktabs} -$endif$ -$if(graphics)$ -\usepackage{graphicx} -\makeatletter -\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} -\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} -\makeatother -% Scale images if necessary, so that they will not overflow the page -% margins by default, and it is still possible to overwrite the defaults -% using explicit options in \includegraphics[width, height, ...]{} -\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} -$endif$ -\ifxetex - \usepackage[setpagesize=false, % page size defined by xetex - unicode=false, % unicode breaks when used with xetex - xetex]{hyperref} -\else - \usepackage[unicode=true]{hyperref} -\fi -\hypersetup{breaklinks=true, - bookmarks=true, - pdfauthor={$author-meta$}, - pdftitle={$title-meta$}, - colorlinks=true, - citecolor=$if(citecolor)$$citecolor$$else$blue$endif$, - urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, - linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, - pdfborder={0 0 0}} -\urlstyle{same} % don't use monospace font for urls -$if(links-as-notes)$ -% Make links footnotes instead of hotlinks: -\renewcommand{\href}[2]{#2\footnote{\url{#1}}} -$endif$ -$if(strikeout)$ -\usepackage[normalem]{ulem} -% avoid problems with \sout in headers with hyperref: -\pdfstringdefDisableCommands{\renewcommand{\sout}{}} -$endif$ -\setlength{\parindent}{0pt} -\setlength{\parskip}{6pt plus 2pt minus 1pt} -\setlength{\emergencystretch}{3em} % prevent overfull lines -$if(numbersections)$ -\setcounter{secnumdepth}{5} -$else$ -\setcounter{secnumdepth}{0} -$endif$ -$if(verbatim-in-note)$ -\VerbatimFootnotes % allows verbatim text in footnotes -$endif$ -$if(lang)$ -\ifxetex - \usepackage{polyglossia} - \setmainlanguage{$mainlang$} -\else - \usepackage[$lang$]{babel} -\fi -$endif$ - -\usepackage{titlesec} -\titleformat{\chapter}[hang]{\Huge\bfseries}{\thechapter\ }{0pt}{\Huge\bfseries} - -\usepackage{fancyhdr} -\pagestyle{fancy} -\pagenumbering{arabic} -\lhead{\itshape $title$} -\chead{} -\rhead{\itshape{\nouppercase{\rightmark}}} -\lfoot{v$version$ ($date$)} -\cfoot{} -\rfoot{\thepage} - -$if(title)$ -\title{$title$$if(subtitle)$\\\vspace{0.5em}{\large $subtitle$}$endif$} -$endif$ -$if(author)$ -\author{$for(author)$$author$$sep$ \and $endfor$} -$endif$ -\date{$date$} -$for(header-includes)$ -$header-includes$ -$endfor$ - -\begin{document} -$if(title)$ -\maketitle -$endif$ -$if(abstract)$ -\begin{abstract} -$abstract$ -\end{abstract} -$endif$ - -$for(include-before)$ -$include-before$ - -$endfor$ -$if(toc)$ -{ -\hypersetup{linkcolor=black} -\setcounter{tocdepth}{$toc-depth$} -\tableofcontents -} -$endif$ -$body$ - -$if(natbib)$ -$if(biblio-files)$ -$if(biblio-title)$ -$if(book-class)$ -\renewcommand\bibname{$biblio-title$} -$else$ -\renewcommand\refname{$biblio-title$} -$endif$ -$endif$ -\bibliography{$biblio-files$} - -$endif$ -$endif$ -$if(biblatex)$ -\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ - -$endif$ -$for(include-after)$ -$include-after$ - -$endfor$ -\end{document} -- cgit 0.0.5-2-1-g0f52 From 1caeda5b537c5cd30f4fc2bf078a00265473894c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:13:50 -0800 Subject: Moved spec.txt to test/ directory. --- Makefile | 4 +- spec.txt | 7321 --------------------------------------------------- test/CMakeLists.txt | 4 +- test/spec.txt | 7321 +++++++++++++++++++++++++++++++++++++++++++++++++++ test/spec_tests.py | 2 +- 5 files changed, 7326 insertions(+), 7326 deletions(-) delete mode 100644 spec.txt create mode 100644 test/spec.txt diff --git a/Makefile b/Makefile index 62b0023433..f7a9335385 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ BUILDDIR?=build GENERATOR?=Unix Makefiles MINGW_BUILDDIR?=build-mingw MINGW_INSTALLDIR?=windows -SPEC=spec.txt +SPEC=test/spec.txt SITE=_site SPECVERSION=$(shell perl -ne 'print $$1 if /^version: *([0-9.]+)/' $(SPEC)) FUZZCHARS?=2000000 # for fuzztest @@ -82,7 +82,7 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re test: $(SPEC) cmake_build make -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) -$(ALLTESTS): spec.txt +$(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) diff --git a/spec.txt b/spec.txt deleted file mode 100644 index e75481045f..0000000000 --- a/spec.txt +++ /dev/null @@ -1,7321 +0,0 @@ ---- -title: CommonMark Spec -author: John MacFarlane -version: 0.17 -date: 2015-01-24 -license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' -... - -# Introduction - -## What is Markdown? - -Markdown is a plain text format for writing structured documents, -based on conventions used for indicating formatting in email and -usenet posts. It was developed in 2004 by John Gruber, who wrote -the first Markdown-to-HTML converter in perl, and it soon became -widely used in websites. By 2014 there were dozens of -implementations in many languages. Some of them extended basic -Markdown syntax with conventions for footnotes, definition lists, -tables, and other constructs, and some allowed output not just in -HTML but in LaTeX and many other formats. - -## Why is a spec needed? - -John Gruber's [canonical description of Markdown's -syntax](http://daringfireball.net/projects/markdown/syntax) -does not specify the syntax unambiguously. Here are some examples of -questions it does not answer: - -1. How much indentation is needed for a sublist? The spec says that - continuation paragraphs need to be indented four spaces, but is - not fully explicit about sublists. It is natural to think that - they, too, must be indented four spaces, but `Markdown.pl` does - not require that. This is hardly a "corner case," and divergences - between implementations on this issue often lead to surprises for - users in real documents. (See [this comment by John - Gruber](http://article.gmane.org/gmane.text.markdown.general/1997).) - -2. Is a blank line needed before a block quote or header? - Most implementations do not require the blank line. However, - this can lead to unexpected results in hard-wrapped text, and - also to ambiguities in parsing (note that some implementations - put the header inside the blockquote, while others do not). - (John Gruber has also spoken [in favor of requiring the blank - lines](http://article.gmane.org/gmane.text.markdown.general/2146).) - -3. Is a blank line needed before an indented code block? - (`Markdown.pl` requires it, but this is not mentioned in the - documentation, and some implementations do not require it.) - - ``` markdown - paragraph - code? - ``` - -4. What is the exact rule for determining when list items get - wrapped in `

                            ` tags? Can a list be partially "loose" and partially - "tight"? What should we do with a list like this? - - ``` markdown - 1. one - - 2. two - 3. three - ``` - - Or this? - - ``` markdown - 1. one - - a - - - b - 2. two - ``` - - (There are some relevant comments by John Gruber - [here](http://article.gmane.org/gmane.text.markdown.general/2554).) - -5. Can list markers be indented? Can ordered list markers be right-aligned? - - ``` markdown - 8. item 1 - 9. item 2 - 10. item 2a - ``` - -6. Is this one list with a horizontal rule in its second item, - or two lists separated by a horizontal rule? - - ``` markdown - * a - * * * * * - * b - ``` - -7. When list markers change from numbers to bullets, do we have - two lists or one? (The Markdown syntax description suggests two, - but the perl scripts and many other implementations produce one.) - - ``` markdown - 1. fee - 2. fie - - foe - - fum - ``` - -8. What are the precedence rules for the markers of inline structure? - For example, is the following a valid link, or does the code span - take precedence ? - - ``` markdown - [a backtick (`)](/url) and [another backtick (`)](/url). - ``` - -9. What are the precedence rules for markers of emphasis and strong - emphasis? For example, how should the following be parsed? - - ``` markdown - *foo *bar* baz* - ``` - -10. What are the precedence rules between block-level and inline-level - structure? For example, how should the following be parsed? - - ``` markdown - - `a long code span can contain a hyphen like this - - and it can screw things up` - ``` - -11. Can list items include section headers? (`Markdown.pl` does not - allow this, but does allow blockquotes to include headers.) - - ``` markdown - - # Heading - ``` - -12. Can list items be empty? - - ``` markdown - * a - * - * b - ``` - -13. Can link references be defined inside block quotes or list items? - - ``` markdown - > Blockquote [foo]. - > - > [foo]: /url - ``` - -14. If there are multiple definitions for the same reference, which takes - precedence? - - ``` markdown - [foo]: /url1 - [foo]: /url2 - - [foo][] - ``` - -In the absence of a spec, early implementers consulted `Markdown.pl` -to resolve these ambiguities. But `Markdown.pl` was quite buggy, and -gave manifestly bad results in many cases, so it was not a -satisfactory replacement for a spec. - -Because there is no unambiguous spec, implementations have diverged -considerably. As a result, users are often surprised to find that -a document that renders one way on one system (say, a github wiki) -renders differently on another (say, converting to docbook using -pandoc). To make matters worse, because nothing in Markdown counts -as a "syntax error," the divergence often isn't discovered right away. - -## About this document - -This document attempts to specify Markdown syntax unambiguously. -It contains many examples with side-by-side Markdown and -HTML. These are intended to double as conformance tests. An -accompanying script `spec_tests.py` can be used to run the tests -against any Markdown program: - - python test/spec_tests.py --spec spec.txt --program PROGRAM - -Since this document describes how Markdown is to be parsed into -an abstract syntax tree, it would have made sense to use an abstract -representation of the syntax tree instead of HTML. But HTML is capable -of representing the structural distinctions we need to make, and the -choice of HTML for the tests makes it possible to run the tests against -an implementation without writing an abstract syntax tree renderer. - -This document is generated from a text file, `spec.txt`, written -in Markdown with a small extension for the side-by-side tests. -The script `spec2md.pl` can be used to turn `spec.txt` into pandoc -Markdown, which can then be converted into other formats. - -In the examples, the `→` character is used to represent tabs. - -# Preliminaries - -## Characters and lines - -Any sequence of [character]s is a valid CommonMark -document. - -A [character](@character) is a unicode code point. -This spec does not specify an encoding; it thinks of lines as composed -of characters rather than bytes. A conforming parser may be limited -to a certain encoding. - -A [line](@line) is a sequence of zero or more [character]s -followed by a [line ending] or by the end of file. - -A [line ending](@line-ending) is, depending on the platform, a -newline (`U+000A`), carriage return (`U+000D`), or -carriage return + newline. - -For security reasons, a conforming parser must strip or replace the -Unicode character `U+0000`. - -A line containing no characters, or a line containing only spaces -(`U+0020`) or tabs (`U+0009`), is called a [blank line](@blank-line). - -The following definitions of character classes will be used in this spec: - -A [whitespace character](@whitespace-character) is a space -(`U+0020`), tab (`U+0009`), carriage return (`U+000D`), or -newline (`U+000A`). - -[Whitespace](@whitespace) is a sequence of one or more [whitespace -character]s. - -A [unicode whitespace character](@unicode-whitespace-character) is -any code point in the unicode `Zs` class, or a tab (`U+0009`), -carriage return (`U+000D`), newline (`U+000A`), or form feed -(`U+000C`). - -[Unicode whitespace](@unicode-whitespace) is a sequence of one -or more [unicode whitespace character]s. - -A [non-space character](@non-space-character) is anything but `U+0020`. - -An [ASCII punctuation character](@ascii-punctuation-character) -is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, -`*`, `+`, `,`, `-`, `.`, `/`, `:`, `;`, `<`, `=`, `>`, `?`, `@`, -`[`, `\`, `]`, `^`, `_`, `` ` ``, `{`, `|`, `}`, or `~`. - -A [punctuation character](@punctuation-character) is an [ASCII -punctuation character] or anything in -the unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. - -## Tab expansion - -Tabs in lines are expanded to spaces, with a tab stop of 4 characters: - -. -→foo→baz→→bim -. -

                            foo baz     bim
                            -
                            -. - -. - a→a - ὐ→a -. -
                            a   a
                            -ὐ   a
                            -
                            -. - -# Blocks and inlines - -We can think of a document as a sequence of -[blocks](@block)---structural -elements like paragraphs, block quotations, -lists, headers, rules, and code blocks. Blocks can contain other -blocks, or they can contain [inline](@inline) content: -words, spaces, links, emphasized text, images, and inline code. - -## Precedence - -Indicators of block structure always take precedence over indicators -of inline structure. So, for example, the following is a list with -two items, not a list with one item containing a code span: - -. -- `one -- two` -. -
                              -
                            • `one
                            • -
                            • two`
                            • -
                            -. - -This means that parsing can proceed in two steps: first, the block -structure of the document can be discerned; second, text lines inside -paragraphs, headers, and other block constructs can be parsed for inline -structure. The second step requires information about link reference -definitions that will be available only at the end of the first -step. Note that the first step requires processing lines in sequence, -but the second can be parallelized, since the inline parsing of -one block element does not affect the inline parsing of any other. - -## Container blocks and leaf blocks - -We can divide blocks into two types: -[container block](@container-block)s, -which can contain other blocks, and [leaf block](@leaf-block)s, -which cannot. - -# Leaf blocks - -This section describes the different kinds of leaf block that make up a -Markdown document. - -## Horizontal rules - -A line consisting of 0-3 spaces of indentation, followed by a sequence -of three or more matching `-`, `_`, or `*` characters, each followed -optionally by any number of spaces, forms a -[horizontal rule](@horizontal-rule). - -. -*** ---- -___ -. -
                            -
                            -
                            -. - -Wrong characters: - -. -+++ -. -

                            +++

                            -. - -. -=== -. -

                            ===

                            -. - -Not enough characters: - -. --- -** -__ -. -

                            -- -** -__

                            -. - -One to three spaces indent are allowed: - -. - *** - *** - *** -. -
                            -
                            -
                            -. - -Four spaces is too many: - -. - *** -. -
                            ***
                            -
                            -. - -. -Foo - *** -. -

                            Foo -***

                            -. - -More than three characters may be used: - -. -_____________________________________ -. -
                            -. - -Spaces are allowed between the characters: - -. - - - - -. -
                            -. - -. - ** * ** * ** * ** -. -
                            -. - -. -- - - - -. -
                            -. - -Spaces are allowed at the end: - -. -- - - - -. -
                            -. - -However, no other characters may occur in the line: - -. -_ _ _ _ a - -a------ - ----a--- -. -

                            _ _ _ _ a

                            -

                            a------

                            -

                            ---a---

                            -. - -It is required that all of the [non-space character]s be the same. -So, this is not a horizontal rule: - -. - *-* -. -

                            -

                            -. - -Horizontal rules do not need blank lines before or after: - -. -- foo -*** -- bar -. -
                              -
                            • foo
                            • -
                            -
                            -
                              -
                            • bar
                            • -
                            -. - -Horizontal rules can interrupt a paragraph: - -. -Foo -*** -bar -. -

                            Foo

                            -
                            -

                            bar

                            -. - -If a line of dashes that meets the above conditions for being a -horizontal rule could also be interpreted as the underline of a [setext -header], the interpretation as a -[setext header] takes precedence. Thus, for example, -this is a setext header, not a paragraph followed by a horizontal rule: - -. -Foo ---- -bar -. -

                            Foo

                            -

                            bar

                            -. - -When both a horizontal rule and a list item are possible -interpretations of a line, the horizontal rule takes precedence: - -. -* Foo -* * * -* Bar -. -
                              -
                            • Foo
                            • -
                            -
                            -
                              -
                            • Bar
                            • -
                            -. - -If you want a horizontal rule in a list item, use a different bullet: - -. -- Foo -- * * * -. -
                              -
                            • Foo
                            • -
                            • -
                              -
                            • -
                            -. - -## ATX headers - -An [ATX header](@atx-header) -consists of a string of characters, parsed as inline content, between an -opening sequence of 1--6 unescaped `#` characters and an optional -closing sequence of any number of `#` characters. The opening sequence -of `#` characters cannot be followed directly by a -[non-space character]. -The optional closing sequence of `#`s must be preceded by a space and may be -followed by spaces only. The opening `#` character may be indented 0-3 -spaces. The raw contents of the header are stripped of leading and -trailing spaces before being parsed as inline content. The header level -is equal to the number of `#` characters in the opening sequence. - -Simple headers: - -. -# foo -## foo -### foo -#### foo -##### foo -###### foo -. -

                            foo

                            -

                            foo

                            -

                            foo

                            -

                            foo

                            -
                            foo
                            -
                            foo
                            -. - -More than six `#` characters is not a header: - -. -####### foo -. -

                            ####### foo

                            -. - -A space is required between the `#` characters and the header's -contents. Note that many implementations currently do not require -the space. However, the space was required by the [original ATX -implementation](http://www.aaronsw.com/2002/atx/atx.py), and it helps -prevent things like the following from being parsed as headers: - -. -#5 bolt -. -

                            #5 bolt

                            -. - -This is not a header, because the first `#` is escaped: - -. -\## foo -. -

                            ## foo

                            -. - -Contents are parsed as inlines: - -. -# foo *bar* \*baz\* -. -

                            foo bar *baz*

                            -. - -Leading and trailing blanks are ignored in parsing inline content: - -. -# foo -. -

                            foo

                            -. - -One to three spaces indentation are allowed: - -. - ### foo - ## foo - # foo -. -

                            foo

                            -

                            foo

                            -

                            foo

                            -. - -Four spaces are too much: - -. - # foo -. -
                            # foo
                            -
                            -. - -. -foo - # bar -. -

                            foo -# bar

                            -. - -A closing sequence of `#` characters is optional: - -. -## foo ## - ### bar ### -. -

                            foo

                            -

                            bar

                            -. - -It need not be the same length as the opening sequence: - -. -# foo ################################## -##### foo ## -. -

                            foo

                            -
                            foo
                            -. - -Spaces are allowed after the closing sequence: - -. -### foo ### -. -

                            foo

                            -. - -A sequence of `#` characters with a -[non-space character] following it -is not a closing sequence, but counts as part of the contents of the -header: - -. -### foo ### b -. -

                            foo ### b

                            -. - -The closing sequence must be preceded by a space: - -. -# foo# -. -

                            foo#

                            -. - -Backslash-escaped `#` characters do not count as part -of the closing sequence: - -. -### foo \### -## foo #\## -# foo \# -. -

                            foo ###

                            -

                            foo ###

                            -

                            foo #

                            -. - -ATX headers need not be separated from surrounding content by blank -lines, and they can interrupt paragraphs: - -. -**** -## foo -**** -. -
                            -

                            foo

                            -
                            -. - -. -Foo bar -# baz -Bar foo -. -

                            Foo bar

                            -

                            baz

                            -

                            Bar foo

                            -. - -ATX headers can be empty: - -. -## -# -### ### -. -

                            -

                            -

                            -. - -## Setext headers - -A [setext header](@setext-header) -consists of a line of text, containing at least one -[non-space character], -with no more than 3 spaces indentation, followed by a [setext header -underline]. The line of text must be -one that, were it not followed by the setext header underline, -would be interpreted as part of a paragraph: it cannot be a code -block, header, blockquote, horizontal rule, or list. - -A [setext header underline](@setext-header-underline) is a sequence of -`=` characters or a sequence of `-` characters, with no more than 3 -spaces indentation and any number of trailing spaces. If a line -containing a single `-` can be interpreted as an -empty [list items], it should be interpreted this way -and not as a [setext header underline]. - -The header is a level 1 header if `=` characters are used in the -[setext header underline], and a level 2 -header if `-` characters are used. The contents of the header are the -result of parsing the first line as Markdown inline content. - -In general, a setext header need not be preceded or followed by a -blank line. However, it cannot interrupt a paragraph, so when a -setext header comes after a paragraph, a blank line is needed between -them. - -Simple examples: - -. -Foo *bar* -========= - -Foo *bar* ---------- -. -

                            Foo bar

                            -

                            Foo bar

                            -. - -The underlining can be any length: - -. -Foo -------------------------- - -Foo -= -. -

                            Foo

                            -

                            Foo

                            -. - -The header content can be indented up to three spaces, and need -not line up with the underlining: - -. - Foo ---- - - Foo ------ - - Foo - === -. -

                            Foo

                            -

                            Foo

                            -

                            Foo

                            -. - -Four spaces indent is too much: - -. - Foo - --- - - Foo ---- -. -
                            Foo
                            ----
                            -
                            -Foo
                            -
                            -
                            -. - -The setext header underline can be indented up to three spaces, and -may have trailing spaces: - -. -Foo - ---- -. -

                            Foo

                            -. - -Four spaces is too much: - -. -Foo - --- -. -

                            Foo ----

                            -. - -The setext header underline cannot contain internal spaces: - -. -Foo -= = - -Foo ---- - -. -

                            Foo -= =

                            -

                            Foo

                            -
                            -. - -Trailing spaces in the content line do not cause a line break: - -. -Foo ------ -. -

                            Foo

                            -. - -Nor does a backslash at the end: - -. -Foo\ ----- -. -

                            Foo\

                            -. - -Since indicators of block structure take precedence over -indicators of inline structure, the following are setext headers: - -. -`Foo ----- -` - - -. -

                            `Foo

                            -

                            `

                            -

                            <a title="a lot

                            -

                            of dashes"/>

                            -. - -The setext header underline cannot be a [lazy continuation -line] in a list item or block quote: - -. -> Foo ---- -. -
                            -

                            Foo

                            -
                            -
                            -. - -. -- Foo ---- -. -
                              -
                            • Foo
                            • -
                            -
                            -. - -A setext header cannot interrupt a paragraph: - -. -Foo -Bar ---- - -Foo -Bar -=== -. -

                            Foo -Bar

                            -
                            -

                            Foo -Bar -===

                            -. - -But in general a blank line is not required before or after: - -. ---- -Foo ---- -Bar ---- -Baz -. -
                            -

                            Foo

                            -

                            Bar

                            -

                            Baz

                            -. - -Setext headers cannot be empty: - -. - -==== -. -

                            ====

                            -. - -Setext header text lines must not be interpretable as block -constructs other than paragraphs. So, the line of dashes -in these examples gets interpreted as a horizontal rule: - -. ---- ---- -. -
                            -
                            -. - -. -- foo ------ -. -
                              -
                            • foo
                            • -
                            -
                            -. - -. - foo ---- -. -
                            foo
                            -
                            -
                            -. - -. -> foo ------ -. -
                            -

                            foo

                            -
                            -
                            -. - -If you want a header with `> foo` as its literal text, you can -use backslash escapes: - -. -\> foo ------- -. -

                            > foo

                            -. - -## Indented code blocks - -An [indented code block](@indented-code-block) is composed of one or more -[indented chunk]s separated by blank lines. -An [indented chunk](@indented-chunk) is a sequence of non-blank lines, -each indented four or more spaces. The contents of the code block are -the literal contents of the lines, including trailing -[line ending]s, minus four spaces of indentation. -An indented code block has no [info string]. - -An indented code block cannot interrupt a paragraph, so there must be -a blank line between a paragraph and a following indented code block. -(A blank line is not needed, however, between a code block and a following -paragraph.) - -. - a simple - indented code block -. -
                            a simple
                            -  indented code block
                            -
                            -. - -The contents are literal text, and do not get parsed as Markdown: - -. -
                            - *hi* - - - one -. -
                            <a/>
                            -*hi*
                            -
                            -- one
                            -
                            -. - -Here we have three chunks separated by blank lines: - -. - chunk1 - - chunk2 - - - - chunk3 -. -
                            chunk1
                            -
                            -chunk2
                            -
                            -
                            -
                            -chunk3
                            -
                            -. - -Any initial spaces beyond four will be included in the content, even -in interior blank lines: - -. - chunk1 - - chunk2 -. -
                            chunk1
                            -  
                            -  chunk2
                            -
                            -. - -An indented code block cannot interrupt a paragraph. (This -allows hanging indents and the like.) - -. -Foo - bar - -. -

                            Foo -bar

                            -. - -However, any non-blank line with fewer than four leading spaces ends -the code block immediately. So a paragraph may occur immediately -after indented code: - -. - foo -bar -. -
                            foo
                            -
                            -

                            bar

                            -. - -And indented code can occur immediately before and after other kinds of -blocks: - -. -# Header - foo -Header ------- - foo ----- -. -

                            Header

                            -
                            foo
                            -
                            -

                            Header

                            -
                            foo
                            -
                            -
                            -. - -The first line can be indented more than four spaces: - -. - foo - bar -. -
                                foo
                            -bar
                            -
                            -. - -Blank lines preceding or following an indented code block -are not included in it: - -. - - - foo - - -. -
                            foo
                            -
                            -. - -Trailing spaces are included in the code block's content: - -. - foo -. -
                            foo  
                            -
                            -. - - -## Fenced code blocks - -A [code fence](@code-fence) is a sequence -of at least three consecutive backtick characters (`` ` ``) or -tildes (`~`). (Tildes and backticks cannot be mixed.) -A [fenced code block](@fenced-code-block) -begins with a code fence, indented no more than three spaces. - -The line with the opening code fence may optionally contain some text -following the code fence; this is trimmed of leading and trailing -spaces and called the [info string](@info-string). -The [info string] may not contain any backtick -characters. (The reason for this restriction is that otherwise -some inline code would be incorrectly interpreted as the -beginning of a fenced code block.) - -The content of the code block consists of all subsequent lines, until -a closing [code fence] of the same type as the code block -began with (backticks or tildes), and with at least as many backticks -or tildes as the opening code fence. If the leading code fence is -indented N spaces, then up to N spaces of indentation are removed from -each line of the content (if present). (If a content line is not -indented, it is preserved unchanged. If it is indented less than N -spaces, all of the indentation is removed.) - -The closing code fence may be indented up to three spaces, and may be -followed only by spaces, which are ignored. If the end of the -containing block (or document) is reached and no closing code fence -has been found, the code block contains all of the lines after the -opening code fence until the end of the containing block (or -document). (An alternative spec would require backtracking in the -event that a closing code fence is not found. But this makes parsing -much less efficient, and there seems to be no real down side to the -behavior described here.) - -A fenced code block may interrupt a paragraph, and does not require -a blank line either before or after. - -The content of a code fence is treated as literal text, not parsed -as inlines. The first word of the [info string] is typically used to -specify the language of the code sample, and rendered in the `class` -attribute of the `code` tag. However, this spec does not mandate any -particular treatment of the [info string]. - -Here is a simple example with backticks: - -. -``` -< - > -``` -. -
                            <
                            - >
                            -
                            -. - -With tildes: - -. -~~~ -< - > -~~~ -. -
                            <
                            - >
                            -
                            -. - -The closing code fence must use the same character as the opening -fence: - -. -``` -aaa -~~~ -``` -. -
                            aaa
                            -~~~
                            -
                            -. - -. -~~~ -aaa -``` -~~~ -. -
                            aaa
                            -```
                            -
                            -. - -The closing code fence must be at least as long as the opening fence: - -. -```` -aaa -``` -`````` -. -
                            aaa
                            -```
                            -
                            -. - -. -~~~~ -aaa -~~~ -~~~~ -. -
                            aaa
                            -~~~
                            -
                            -. - -Unclosed code blocks are closed by the end of the document: - -. -``` -. -
                            -. - -. -````` - -``` -aaa -. -
                            
                            -```
                            -aaa
                            -
                            -. - -A code block can have all empty lines as its content: - -. -``` - - -``` -. -
                            
                            -  
                            -
                            -. - -A code block can be empty: - -. -``` -``` -. -
                            -. - -Fences can be indented. If the opening fence is indented, -content lines will have equivalent opening indentation removed, -if present: - -. - ``` - aaa -aaa -``` -. -
                            aaa
                            -aaa
                            -
                            -. - -. - ``` -aaa - aaa -aaa - ``` -. -
                            aaa
                            -aaa
                            -aaa
                            -
                            -. - -. - ``` - aaa - aaa - aaa - ``` -. -
                            aaa
                            - aaa
                            -aaa
                            -
                            -. - -Four spaces indentation produces an indented code block: - -. - ``` - aaa - ``` -. -
                            ```
                            -aaa
                            -```
                            -
                            -. - -Closing fences may be indented by 0-3 spaces, and their indentation -need not match that of the opening fence: - -. -``` -aaa - ``` -. -
                            aaa
                            -
                            -. - -. - ``` -aaa - ``` -. -
                            aaa
                            -
                            -. - -This is not a closing fence, because it is indented 4 spaces: - -. -``` -aaa - ``` -. -
                            aaa
                            -    ```
                            -
                            -. - - -Code fences (opening and closing) cannot contain internal spaces: - -. -``` ``` -aaa -. -

                            -aaa

                            -. - -. -~~~~~~ -aaa -~~~ ~~ -. -
                            aaa
                            -~~~ ~~
                            -
                            -. - -Fenced code blocks can interrupt paragraphs, and can be followed -directly by paragraphs, without a blank line between: - -. -foo -``` -bar -``` -baz -. -

                            foo

                            -
                            bar
                            -
                            -

                            baz

                            -. - -Other blocks can also occur before and after fenced code blocks -without an intervening blank line: - -. -foo ---- -~~~ -bar -~~~ -# baz -. -

                            foo

                            -
                            bar
                            -
                            -

                            baz

                            -. - -An [info string] can be provided after the opening code fence. -Opening and closing spaces will be stripped, and the first word, prefixed -with `language-`, is used as the value for the `class` attribute of the -`code` element within the enclosing `pre` element. - -. -```ruby -def foo(x) - return 3 -end -``` -. -
                            def foo(x)
                            -  return 3
                            -end
                            -
                            -. - -. -~~~~ ruby startline=3 $%@#$ -def foo(x) - return 3 -end -~~~~~~~ -. -
                            def foo(x)
                            -  return 3
                            -end
                            -
                            -. - -. -````; -```` -. -
                            -. - -[Info string]s for backtick code blocks cannot contain backticks: - -. -``` aa ``` -foo -. -

                            aa -foo

                            -. - -Closing code fences cannot have [info string]s: - -. -``` -``` aaa -``` -. -
                            ``` aaa
                            -
                            -. - - -## HTML blocks - -An [HTML block tag](@html-block-tag) is -an [open tag] or [closing tag] whose tag -name is one of the following (case-insensitive): -`article`, `header`, `aside`, `hgroup`, `blockquote`, `hr`, `iframe`, -`body`, `li`, `map`, `button`, `object`, `canvas`, `ol`, `caption`, -`output`, `col`, `p`, `colgroup`, `pre`, `dd`, `progress`, `div`, -`section`, `dl`, `table`, `td`, `dt`, `tbody`, `embed`, `textarea`, -`fieldset`, `tfoot`, `figcaption`, `th`, `figure`, `thead`, `footer`, -`tr`, `form`, `ul`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `video`, -`script`, `style`. - -An [HTML block](@html-block) begins with an -[HTML block tag], [HTML comment], [processing instruction], -[declaration], or [CDATA section]. -It ends when a [blank line] or the end of the -input is encountered. The initial line may be indented up to three -spaces, and subsequent lines may have any indentation. The contents -of the HTML block are interpreted as raw HTML, and will not be escaped -in HTML output. - -Some simple examples: - -. -
                            - - - -
                            - hi -
                            - -okay. -. - - - - -
                            - hi -
                            -

                            okay.

                            -. - -. -
                            - *hello* - -. -
                            - *hello* - -. - -Here we have two HTML blocks with a Markdown paragraph between them: - -. -
                            - -*Markdown* - -
                            -. -
                            -

                            Markdown

                            -
                            -. - -In the following example, what looks like a Markdown code block -is actually part of the HTML block, which continues until a blank -line or the end of the document is reached: - -. -
                            -``` c -int x = 33; -``` -. -
                            -``` c -int x = 33; -``` -. - -A comment: - -. - -. - -. - -A processing instruction: - -. -'; -?> -. -'; -?> -. - -CDATA: - -. - -. - -. - -The opening tag can be indented 1-3 spaces, but not 4: - -. - - - -. - -
                            <!-- foo -->
                            -
                            -. - -An HTML block can interrupt a paragraph, and need not be preceded -by a blank line. - -. -Foo -
                            -bar -
                            -. -

                            Foo

                            -
                            -bar -
                            -. - -However, a following blank line is always needed, except at the end of -a document: - -. -
                            -bar -
                            -*foo* -. -
                            -bar -
                            -*foo* -. - -An incomplete HTML block tag may also start an HTML block: - -. -
                            The only restrictions are that block-level HTML elements — -> e.g. `
                            `, ``, `
                            `, `

                            `, etc. — must be separated from -> surrounding content by blank lines, and the start and end tags of the -> block should not be indented with tabs or spaces. - -In some ways Gruber's rule is more restrictive than the one given -here: - -- It requires that an HTML block be preceded by a blank line. -- It does not allow the start tag to be indented. -- It requires a matching end tag, which it also does not allow to - be indented. - -Indeed, most Markdown implementations, including some of Gruber's -own perl implementations, do not impose these restrictions. - -There is one respect, however, in which Gruber's rule is more liberal -than the one given here, since it allows blank lines to occur inside -an HTML block. There are two reasons for disallowing them here. -First, it removes the need to parse balanced tags, which is -expensive and can require backtracking from the end of the document -if no matching end tag is found. Second, it provides a very simple -and flexible way of including Markdown content inside HTML tags: -simply separate the Markdown from the HTML using blank lines: - -. -

                            - -*Emphasized* text. - -
                            -. -
                            -

                            Emphasized text.

                            -
                            -. - -Compare: - -. -
                            -*Emphasized* text. -
                            -. -
                            -*Emphasized* text. -
                            -. - -Some Markdown implementations have adopted a convention of -interpreting content inside tags as text if the open tag has -the attribute `markdown=1`. The rule given above seems a simpler and -more elegant way of achieving the same expressive power, which is also -much simpler to parse. - -The main potential drawback is that one can no longer paste HTML -blocks into Markdown documents with 100% reliability. However, -*in most cases* this will work fine, because the blank lines in -HTML are usually followed by HTML block tags. For example: - -. -
                            - - - - - - - -
                            -Hi -
                            -. - - - - -
                            -Hi -
                            -. - -Moreover, blank lines are usually not necessary and can be -deleted. The exception is inside `
                            ` tags; here, one can
                            -replace the blank lines with `
                            ` entities.
                            -
                            -So there is no important loss of expressive power with the new rule.
                            -
                            -## Link reference definitions
                            -
                            -A [link reference definition](@link-reference-definition)
                            -consists of a [link label], indented up to three spaces, followed
                            -by a colon (`:`), optional [whitespace] (including up to one
                            -[line ending]), a [link destination],
                            -optional [whitespace] (including up to one
                            -[line ending]), and an optional [link
                            -title], which if it is present must be separated
                            -from the [link destination] by [whitespace].
                            -No further [non-space character]s may occur on the line.
                            -
                            -A [link reference-definition]
                            -does not correspond to a structural element of a document.  Instead, it
                            -defines a label which can be used in [reference link]s
                            -and reference-style [images] elsewhere in the document.  [Link
                            -reference definitions] can come either before or after the links that use
                            -them.
                            -
                            -.
                            -[foo]: /url "title"
                            -
                            -[foo]
                            -.
                            -

                            foo

                            -. - -. - [foo]: - /url - 'the title' - -[foo] -. -

                            foo

                            -. - -. -[Foo*bar\]]:my_(url) 'title (with parens)' - -[Foo*bar\]] -. -

                            Foo*bar]

                            -. - -. -[Foo bar]: - -'title' - -[Foo bar] -. -

                            Foo bar

                            -. - -The title may be omitted: - -. -[foo]: -/url - -[foo] -. -

                            foo

                            -. - -The link destination may not be omitted: - -. -[foo]: - -[foo] -. -

                            [foo]:

                            -

                            [foo]

                            -. - -A link can come before its corresponding definition: - -. -[foo] - -[foo]: url -. -

                            foo

                            -. - -If there are several matching definitions, the first one takes -precedence: - -. -[foo] - -[foo]: first -[foo]: second -. -

                            foo

                            -. - -As noted in the section on [Links], matching of labels is -case-insensitive (see [matches]). - -. -[FOO]: /url - -[Foo] -. -

                            Foo

                            -. - -. -[ΑΓΩ]: /φου - -[αγω] -. -

                            αγω

                            -. - -Here is a link reference definition with no corresponding link. -It contributes nothing to the document. - -. -[foo]: /url -. -. - -This is not a link reference definition, because there are -[non-space character]s after the title: - -. -[foo]: /url "title" ok -. -

                            [foo]: /url "title" ok

                            -. - -This is not a link reference definition, because it is indented -four spaces: - -. - [foo]: /url "title" - -[foo] -. -
                            [foo]: /url "title"
                            -
                            -

                            [foo]

                            -. - -This is not a link reference definition, because it occurs inside -a code block: - -. -``` -[foo]: /url -``` - -[foo] -. -
                            [foo]: /url
                            -
                            -

                            [foo]

                            -. - -A [link reference definition] cannot interrupt a paragraph. - -. -Foo -[bar]: /baz - -[bar] -. -

                            Foo -[bar]: /baz

                            -

                            [bar]

                            -. - -However, it can directly follow other block elements, such as headers -and horizontal rules, and it need not be followed by a blank line. - -. -# [Foo] -[foo]: /url -> bar -. -

                            Foo

                            -
                            -

                            bar

                            -
                            -. - -Several [link reference definition]s -can occur one after another, without intervening blank lines. - -. -[foo]: /foo-url "foo" -[bar]: /bar-url - "bar" -[baz]: /baz-url - -[foo], -[bar], -[baz] -. -

                            foo, -bar, -baz

                            -. - -[Link reference definition]s can occur -inside block containers, like lists and block quotations. They -affect the entire document, not just the container in which they -are defined: - -. -[foo] - -> [foo]: /url -. -

                            foo

                            -
                            -
                            -. - - -## Paragraphs - -A sequence of non-blank lines that cannot be interpreted as other -kinds of blocks forms a [paragraph](@paragraph). -The contents of the paragraph are the result of parsing the -paragraph's raw content as inlines. The paragraph's raw content -is formed by concatenating the lines and removing initial and final -[whitespace]. - -A simple example with two paragraphs: - -. -aaa - -bbb -. -

                            aaa

                            -

                            bbb

                            -. - -Paragraphs can contain multiple lines, but no blank lines: - -. -aaa -bbb - -ccc -ddd -. -

                            aaa -bbb

                            -

                            ccc -ddd

                            -. - -Multiple blank lines between paragraph have no effect: - -. -aaa - - -bbb -. -

                            aaa

                            -

                            bbb

                            -. - -Leading spaces are skipped: - -. - aaa - bbb -. -

                            aaa -bbb

                            -. - -Lines after the first may be indented any amount, since indented -code blocks cannot interrupt paragraphs. - -. -aaa - bbb - ccc -. -

                            aaa -bbb -ccc

                            -. - -However, the first line may be indented at most three spaces, -or an indented code block will be triggered: - -. - aaa -bbb -. -

                            aaa -bbb

                            -. - -. - aaa -bbb -. -
                            aaa
                            -
                            -

                            bbb

                            -. - -Final spaces are stripped before inline parsing, so a paragraph -that ends with two or more spaces will not end with a [hard line -break]: - -. -aaa -bbb -. -

                            aaa
                            -bbb

                            -. - -## Blank lines - -[Blank line]s between block-level elements are ignored, -except for the role they play in determining whether a [list] -is [tight] or [loose]. - -Blank lines at the beginning and end of the document are also ignored. - -. - - -aaa - - -# aaa - - -. -

                            aaa

                            -

                            aaa

                            -. - - -# Container blocks - -A [container block] is a block that has other -blocks as its contents. There are two basic kinds of container blocks: -[block quotes] and [list items]. -[Lists] are meta-containers for [list items]. - -We define the syntax for container blocks recursively. The general -form of the definition is: - -> If X is a sequence of blocks, then the result of -> transforming X in such-and-such a way is a container of type Y -> with these blocks as its content. - -So, we explain what counts as a block quote or list item by explaining -how these can be *generated* from their contents. This should suffice -to define the syntax, although it does not give a recipe for *parsing* -these constructions. (A recipe is provided below in the section entitled -[A parsing strategy](#appendix-a-a-parsing-strategy).) - -## Block quotes - -A [block quote marker](@block-quote-marker) -consists of 0-3 spaces of initial indent, plus (a) the character `>` together -with a following space, or (b) a single character `>` not followed by a space. - -The following rules define [block quotes]: - -1. **Basic case.** If a string of lines *Ls* constitute a sequence - of blocks *Bs*, then the result of prepending a [block quote - marker] to the beginning of each line in *Ls* - is a [block quote](#block-quotes) containing *Bs*. - -2. **Laziness.** If a string of lines *Ls* constitute a [block - quote](#block-quotes) with contents *Bs*, then the result of deleting - the initial [block quote marker] from one or - more lines in which the next [non-space character] after the [block - quote marker] is [paragraph continuation - text] is a block quote with *Bs* as its content. - [Paragraph continuation text](@paragraph-continuation-text) is text - that will be parsed as part of the content of a paragraph, but does - not occur at the beginning of the paragraph. - -3. **Consecutiveness.** A document cannot contain two [block - quotes] in a row unless there is a [blank line] between them. - -Nothing else counts as a [block quote](#block-quotes). - -Here is a simple example: - -. -> # Foo -> bar -> baz -. -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            -. - -The spaces after the `>` characters can be omitted: - -. -># Foo ->bar -> baz -. -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            -. - -The `>` characters can be indented 1-3 spaces: - -. - > # Foo - > bar - > baz -. -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            -. - -Four spaces gives us a code block: - -. - > # Foo - > bar - > baz -. -
                            > # Foo
                            -> bar
                            -> baz
                            -
                            -. - -The Laziness clause allows us to omit the `>` before a -paragraph continuation line: - -. -> # Foo -> bar -baz -. -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            -. - -A block quote can contain some lazy and some non-lazy -continuation lines: - -. -> bar -baz -> foo -. -
                            -

                            bar -baz -foo

                            -
                            -. - -Laziness only applies to lines that are continuations of -paragraphs. Lines containing characters or indentation that indicate -block structure cannot be lazy. - -. -> foo ---- -. -
                            -

                            foo

                            -
                            -
                            -. - -. -> - foo -- bar -. -
                            -
                              -
                            • foo
                            • -
                            -
                            -
                              -
                            • bar
                            • -
                            -. - -. -> foo - bar -. -
                            -
                            foo
                            -
                            -
                            -
                            bar
                            -
                            -. - -. -> ``` -foo -``` -. -
                            -
                            -
                            -

                            foo

                            -
                            -. - -A block quote can be empty: - -. -> -. -
                            -
                            -. - -. -> -> -> -. -
                            -
                            -. - -A block quote can have initial or final blank lines: - -. -> -> foo -> -. -
                            -

                            foo

                            -
                            -. - -A blank line always separates block quotes: - -. -> foo - -> bar -. -
                            -

                            foo

                            -
                            -
                            -

                            bar

                            -
                            -. - -(Most current Markdown implementations, including John Gruber's -original `Markdown.pl`, will parse this example as a single block quote -with two paragraphs. But it seems better to allow the author to decide -whether two block quotes or one are wanted.) - -Consecutiveness means that if we put these block quotes together, -we get a single block quote: - -. -> foo -> bar -. -
                            -

                            foo -bar

                            -
                            -. - -To get a block quote with two paragraphs, use: - -. -> foo -> -> bar -. -
                            -

                            foo

                            -

                            bar

                            -
                            -. - -Block quotes can interrupt paragraphs: - -. -foo -> bar -. -

                            foo

                            -
                            -

                            bar

                            -
                            -. - -In general, blank lines are not needed before or after block -quotes: - -. -> aaa -*** -> bbb -. -
                            -

                            aaa

                            -
                            -
                            -
                            -

                            bbb

                            -
                            -. - -However, because of laziness, a blank line is needed between -a block quote and a following paragraph: - -. -> bar -baz -. -
                            -

                            bar -baz

                            -
                            -. - -. -> bar - -baz -. -
                            -

                            bar

                            -
                            -

                            baz

                            -. - -. -> bar -> -baz -. -
                            -

                            bar

                            -
                            -

                            baz

                            -. - -It is a consequence of the Laziness rule that any number -of initial `>`s may be omitted on a continuation line of a -nested block quote: - -. -> > > foo -bar -. -
                            -
                            -
                            -

                            foo -bar

                            -
                            -
                            -
                            -. - -. ->>> foo -> bar ->>baz -. -
                            -
                            -
                            -

                            foo -bar -baz

                            -
                            -
                            -
                            -. - -When including an indented code block in a block quote, -remember that the [block quote marker] includes -both the `>` and a following space. So *five spaces* are needed after -the `>`: - -. -> code - -> not code -. -
                            -
                            code
                            -
                            -
                            -
                            -

                            not code

                            -
                            -. - - -## List items - -A [list marker](@list-marker) is a -[bullet list marker] or an [ordered list marker]. - -A [bullet list marker](@bullet-list-marker) -is a `-`, `+`, or `*` character. - -An [ordered list marker](@ordered-list-marker) -is a sequence of one of more digits (`0-9`), followed by either a -`.` character or a `)` character. - -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-space character] and not separated - from each other by more than one blank line, and *M* is a list - marker *M* of width *W* followed by 0 < *N* < 5 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 - (bullet or ordered) is determined by the type of its list marker. - If the list item is ordered, then it is also assigned a start - number, based on the ordered list marker. - -For example, let *Ls* be the lines - -. -A paragraph -with two lines. - - indented code - -> A block quote. -. -

                            A paragraph -with two lines.

                            -
                            indented code
                            -
                            -
                            -

                            A block quote.

                            -
                            -. - -And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says -that the following is an ordered list item with start number 1, -and the same contents as *Ls*: - -. -1. A paragraph - with two lines. - - indented code - - > A block quote. -. -
                              -
                            1. -

                              A paragraph -with two lines.

                              -
                              indented code
                              -
                              -
                              -

                              A block quote.

                              -
                              -
                            2. -
                            -. - -The most important thing to notice is that the position of -the text after the list marker determines how much indentation -is needed in subsequent blocks in the list item. If the list -marker takes up two spaces, and there are three spaces between -the list marker and the next [non-space character], then blocks -must be indented five spaces in order to fall under the list -item. - -Here are some examples showing how far content must be indented to be -put under the list item: - -. -- one - - two -. -
                              -
                            • one
                            • -
                            -

                            two

                            -. - -. -- one - - two -. -
                              -
                            • -

                              one

                              -

                              two

                              -
                            • -
                            -. - -. - - one - - two -. -
                              -
                            • one
                            • -
                            -
                             two
                            -
                            -. - -. - - one - - two -. -
                              -
                            • -

                              one

                              -

                              two

                              -
                            • -
                            -. - -It is tempting to think of this in terms of columns: the continuation -blocks must be indented at least to the column of the first -[non-space character] after the list marker. However, that is not quite right. -The spaces after the list marker determine how much relative indentation -is needed. Which column this indentation reaches will depend on -how the list item is embedded in other constructions, as shown by -this example: - -. - > > 1. one ->> ->> two -. -
                            -
                            -
                              -
                            1. -

                              one

                              -

                              two

                              -
                            2. -
                            -
                            -
                            -. - -Here `two` occurs in the same column as the list marker `1.`, -but is actually contained in the list item, because there is -sufficent indentation after the last containing blockquote marker. - -The converse is also possible. In the following example, the word `two` -occurs far to the right of the initial text of the list item, `one`, but -it is not considered part of the list item, because it is not indented -far enough past the blockquote marker: - -. ->>- one ->> - > > two -. -
                            -
                            -
                              -
                            • one
                            • -
                            -

                            two

                            -
                            -
                            -. - -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]. - -. -- foo - - bar - -- foo - - - bar - -- ``` - foo - - - bar - ``` - -- baz - - + ``` - foo - - - bar - ``` -. -
                              -
                            • -

                              foo

                              -

                              bar

                              -
                            • -
                            • -

                              foo

                              -
                            • -
                            -

                            bar

                            -
                              -
                            • -
                              foo
                              -
                              -
                              -bar
                              -
                              -
                            • -
                            • -

                              baz

                              -
                                -
                              • -
                                foo
                                -
                                -
                                -bar
                                -
                                -
                              • -
                              -
                            • -
                            -. - -A list item may contain any kind of block: - -. -1. foo - - ``` - bar - ``` - - baz - - > bam -. -
                              -
                            1. -

                              foo

                              -
                              bar
                              -
                              -

                              baz

                              -
                              -

                              bam

                              -
                              -
                            2. -
                            -. - -2. **Item starting with indented code.** If a sequence of lines *Ls* - constitute a sequence of blocks *Bs* starting with an indented code - block and not separated from each other by more than one blank line, - and *M* is a list marker *M* of width *W* followed by - one space, then the result of prepending *M* and the following - space to the first line of *Ls*, and indenting subsequent lines of - *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. - If a line is empty, then it need not be indented. The type of the - list item (bullet or ordered) is determined by the type of its list - marker. If the list item is ordered, then it is also assigned a - start number, based on the ordered list marker. - -An indented code block will have to be indented four spaces beyond -the edge of the region where text will be included in the list item. -In the following case that is 6 spaces: - -. -- foo - - bar -. -
                              -
                            • -

                              foo

                              -
                              bar
                              -
                              -
                            • -
                            -. - -And in this case it is 11 spaces: - -. - 10. foo - - bar -. -
                              -
                            1. -

                              foo

                              -
                              bar
                              -
                              -
                            2. -
                            -. - -If the *first* block in the list item is an indented code block, -then by rule #2, the contents must be indented *one* space after the -list marker: - -. - indented code - -paragraph - - more code -. -
                            indented code
                            -
                            -

                            paragraph

                            -
                            more code
                            -
                            -. - -. -1. indented code - - paragraph - - more code -. -
                              -
                            1. -
                              indented code
                              -
                              -

                              paragraph

                              -
                              more code
                              -
                              -
                            2. -
                            -. - -Note that an additional space indent is interpreted as space -inside the code block: - -. -1. indented code - - paragraph - - more code -. -
                              -
                            1. -
                               indented code
                              -
                              -

                              paragraph

                              -
                              more code
                              -
                              -
                            2. -
                            -. - -Note that rules #1 and #2 only apply to two cases: (a) cases -in which the lines to be included in a list item begin with a -[non-space character], and (b) cases in which -they begin with an indented code -block. In a case like the following, where the first block begins with -a three-space indent, the rules do not allow us to form a list item by -indenting the whole thing and prepending a list marker: - -. - foo - -bar -. -

                            foo

                            -

                            bar

                            -. - -. -- foo - - bar -. -
                              -
                            • foo
                            • -
                            -

                            bar

                            -. - -This is not a significant restriction, because when a block begins -with 1-3 spaces indent, the indentation can always be removed without -a change in interpretation, allowing rule #1 to be applied. So, in -the above case: - -. -- foo - - bar -. -
                              -
                            • -

                              foo

                              -

                              bar

                              -
                            • -
                            -. - -3. **Empty list item.** A [list marker] followed by a -line containing only [whitespace] is a list item with no contents. - -Here is an empty bullet list item: - -. -- foo -- -- bar -. -
                              -
                            • foo
                            • -
                            • -
                            • bar
                            • -
                            -. - -It does not matter whether there are spaces following the [list marker]: - -. -- foo -- -- bar -. -
                              -
                            • foo
                            • -
                            • -
                            • bar
                            • -
                            -. - -Here is an empty ordered list item: - -. -1. foo -2. -3. bar -. -
                              -
                            1. foo
                            2. -
                            3. -
                            4. bar
                            5. -
                            -. - -A list may start or end with an empty list item: - -. -* -. -
                              -
                            • -
                            -. - -4. **Indentation.** If a sequence of lines *Ls* constitutes a list item - according to rule #1, #2, or #3, then the result of indenting each line - of *L* by 1-3 spaces (the same for each line) also constitutes a - list item with the same contents and attributes. If a line is - empty, then it need not be indented. - -Indented one space: - -. - 1. A paragraph - with two lines. - - indented code - - > A block quote. -. -
                              -
                            1. -

                              A paragraph -with two lines.

                              -
                              indented code
                              -
                              -
                              -

                              A block quote.

                              -
                              -
                            2. -
                            -. - -Indented two spaces: - -. - 1. A paragraph - with two lines. - - indented code - - > A block quote. -. -
                              -
                            1. -

                              A paragraph -with two lines.

                              -
                              indented code
                              -
                              -
                              -

                              A block quote.

                              -
                              -
                            2. -
                            -. - -Indented three spaces: - -. - 1. A paragraph - with two lines. - - indented code - - > A block quote. -. -
                              -
                            1. -

                              A paragraph -with two lines.

                              -
                              indented code
                              -
                              -
                              -

                              A block quote.

                              -
                              -
                            2. -
                            -. - -Four spaces indent gives a code block: - -. - 1. A paragraph - with two lines. - - indented code - - > A block quote. -. -
                            1.  A paragraph
                            -    with two lines.
                            -
                            -        indented code
                            -
                            -    > A block quote.
                            -
                            -. - - -5. **Laziness.** If a string of lines *Ls* constitute a [list - item](#list-items) with contents *Bs*, then the result of deleting - some or all of the indentation from one or more lines in which the - next [non-space character] after the indentation is - [paragraph continuation text] is a - list item with the same contents and attributes. The unindented - lines are called - [lazy continuation line](@lazy-continuation-line)s. - -Here is an example with [lazy continuation line]s: - -. - 1. A paragraph -with two lines. - - indented code - - > A block quote. -. -
                              -
                            1. -

                              A paragraph -with two lines.

                              -
                              indented code
                              -
                              -
                              -

                              A block quote.

                              -
                              -
                            2. -
                            -. - -Indentation can be partially deleted: - -. - 1. A paragraph - with two lines. -. -
                              -
                            1. A paragraph -with two lines.
                            2. -
                            -. - -These examples show how laziness can work in nested structures: - -. -> 1. > Blockquote -continued here. -. -
                            -
                              -
                            1. -
                              -

                              Blockquote -continued here.

                              -
                              -
                            2. -
                            -
                            -. - -. -> 1. > Blockquote -> continued here. -. -
                            -
                              -
                            1. -
                              -

                              Blockquote -continued here.

                              -
                              -
                            2. -
                            -
                            -. - - -6. **That's all.** Nothing that is not counted as a list item by rules - #1--5 counts as a [list item](#list-items). - -The rules for sublists follow from the general rules above. A sublist -must be indented the same number of spaces a paragraph would need to be -in order to be included in the list item. - -So, in this case we need two spaces indent: - -. -- foo - - bar - - baz -. -
                              -
                            • foo -
                                -
                              • bar -
                                  -
                                • baz
                                • -
                                -
                              • -
                              -
                            • -
                            -. - -One is not enough: - -. -- foo - - bar - - baz -. -
                              -
                            • foo
                            • -
                            • bar
                            • -
                            • baz
                            • -
                            -. - -Here we need four, because the list marker is wider: - -. -10) foo - - bar -. -
                              -
                            1. foo -
                                -
                              • bar
                              • -
                              -
                            2. -
                            -. - -Three is not enough: - -. -10) foo - - bar -. -
                              -
                            1. foo
                            2. -
                            -
                              -
                            • bar
                            • -
                            -. - -A list may be the first block in a list item: - -. -- - foo -. -
                              -
                            • -
                                -
                              • foo
                              • -
                              -
                            • -
                            -. - -. -1. - 2. foo -. -
                              -
                            1. -
                                -
                              • -
                                  -
                                1. foo
                                2. -
                                -
                              • -
                              -
                            2. -
                            -. - -A list item can contain a header: - -. -- # Foo -- Bar - --- - baz -. -
                              -
                            • -

                              Foo

                              -
                            • -
                            • -

                              Bar

                              -baz
                            • -
                            -. - -### Motivation - -John Gruber's Markdown spec says the following about list items: - -1. "List markers typically start at the left margin, but may be indented - by up to three spaces. List markers must be followed by one or more - spaces or a tab." - -2. "To make lists look nice, you can wrap items with hanging indents.... - But if you don't want to, you don't have to." - -3. "List items may consist of multiple paragraphs. Each subsequent - paragraph in a list item must be indented by either 4 spaces or one - tab." - -4. "It looks nice if you indent every line of the subsequent paragraphs, - but here again, Markdown will allow you to be lazy." - -5. "To put a blockquote within a list item, the blockquote's `>` - delimiters need to be indented." - -6. "To put a code block within a list item, the code block needs to be - indented twice — 8 spaces or two tabs." - -These rules specify that a paragraph under a list item must be indented -four spaces (presumably, from the left margin, rather than the start of -the list marker, but this is not said), and that code under a list item -must be indented eight spaces instead of the usual four. They also say -that a block quote must be indented, but not by how much; however, the -example given has four spaces indentation. Although nothing is said -about other kinds of block-level content, it is certainly reasonable to -infer that *all* block elements under a list item, including other -lists, must be indented four spaces. This principle has been called the -*four-space rule*. - -The four-space rule is clear and principled, and if the reference -implementation `Markdown.pl` had followed it, it probably would have -become the standard. However, `Markdown.pl` allowed paragraphs and -sublists to start with only two spaces indentation, at least on the -outer level. Worse, its behavior was inconsistent: a sublist of an -outer-level list needed two spaces indentation, but a sublist of this -sublist needed three spaces. It is not surprising, then, that different -implementations of Markdown have developed very different rules for -determining what comes under a list item. (Pandoc and python-Markdown, -for example, stuck with Gruber's syntax description and the four-space -rule, while discount, redcarpet, marked, PHP Markdown, and others -followed `Markdown.pl`'s behavior more closely.) - -Unfortunately, given the divergences between implementations, there -is no way to give a spec for list items that will be guaranteed not -to break any existing documents. However, the spec given here should -correctly handle lists formatted with either the four-space rule or -the more forgiving `Markdown.pl` behavior, provided they are laid out -in a way that is natural for a human to read. - -The strategy here is to let the width and indentation of the list marker -determine the indentation necessary for blocks to fall under the list -item, rather than having a fixed and arbitrary number. The writer can -think of the body of the list item as a unit which gets indented to the -right enough to fit the list marker (and any indentation on the list -marker). (The laziness rule, #5, then allows continuation lines to be -unindented if needed.) - -This rule is superior, we claim, to any rule requiring a fixed level of -indentation from the margin. The four-space rule is clear but -unnatural. It is quite unintuitive that - -``` markdown -- foo - - bar - - - baz -``` - -should be parsed as two lists with an intervening paragraph, - -``` html -
                              -
                            • foo
                            • -
                            -

                            bar

                            -
                              -
                            • baz
                            • -
                            -``` - -as the four-space rule demands, rather than a single list, - -``` html -
                              -
                            • -

                              foo

                              -

                              bar

                              -
                                -
                              • baz
                              • -
                              -
                            • -
                            -``` - -The choice of four spaces is arbitrary. It can be learned, but it is -not likely to be guessed, and it trips up beginners regularly. - -Would it help to adopt a two-space rule? The problem is that such -a rule, together with the rule allowing 1--3 spaces indentation of the -initial list marker, allows text that is indented *less than* the -original list marker to be included in the list item. For example, -`Markdown.pl` parses - -``` markdown - - one - - two -``` - -as a single list item, with `two` a continuation paragraph: - -``` html -
                              -
                            • -

                              one

                              -

                              two

                              -
                            • -
                            -``` - -and similarly - -``` markdown -> - one -> -> two -``` - -as - -``` html -
                            -
                              -
                            • -

                              one

                              -

                              two

                              -
                            • -
                            -
                            -``` - -This is extremely unintuitive. - -Rather than requiring a fixed indent from the margin, we could require -a fixed indent (say, two spaces, or even one space) from the list marker (which -may itself be indented). This proposal would remove the last anomaly -discussed. Unlike the spec presented above, it would count the following -as a list item with a subparagraph, even though the paragraph `bar` -is not indented as far as the first paragraph `foo`: - -``` markdown - 10. foo - - bar -``` - -Arguably this text does read like a list item with `bar` as a subparagraph, -which may count in favor of the proposal. However, on this proposal indented -code would have to be indented six spaces after the list marker. And this -would break a lot of existing Markdown, which has the pattern: - -``` markdown -1. foo - - indented code -``` - -where the code is indented eight spaces. The spec above, by contrast, will -parse this text as expected, since the code block's indentation is measured -from the beginning of `foo`. - -The one case that needs special treatment is a list item that *starts* -with indented code. How much indentation is required in that case, since -we don't have a "first paragraph" to measure from? Rule #2 simply stipulates -that in such cases, we require one space indentation from the list marker -(and then the normal four spaces for the indented code). This will match the -four-space rule in cases where the list marker plus its initial indentation -takes four spaces (a common case), but diverge in other cases. - -## Lists - -A [list](@list) is a sequence of one or more -list items [of the same type]. The list items -may be separated by single [blank lines], but two -blank lines end all containing lists. - -Two list items are [of the same type](@of-the-same-type) -if they begin with a [list marker] of the same type. -Two list markers are of the -same type if (a) they are bullet list markers using the same character -(`-`, `+`, or `*`) or (b) they are ordered list numbers with the same -delimiter (either `.` or `)`). - -A list is an [ordered list](@ordered-list) -if its constituent list items begin with -[ordered list marker]s, and a -[bullet list](@bullet-list) if its constituent list -items begin with [bullet list marker]s. - -The [start number](@start-number) -of an [ordered list] is determined by the list number of -its initial list item. The numbers of subsequent list items are -disregarded. - -A list is [loose](@loose) if it any of its constituent -list items are separated by blank lines, or if any of its constituent -list items directly contain two block-level elements with a blank line -between them. Otherwise a list is [tight](@tight). -(The difference in HTML output is that paragraphs in a loose list are -wrapped in `

                            ` tags, while paragraphs in a tight list are not.) - -Changing the bullet or ordered list delimiter starts a new list: - -. -- foo -- bar -+ baz -. -

                              -
                            • foo
                            • -
                            • bar
                            • -
                            -
                              -
                            • baz
                            • -
                            -. - -. -1. foo -2. bar -3) baz -. -
                              -
                            1. foo
                            2. -
                            3. bar
                            4. -
                            -
                              -
                            1. baz
                            2. -
                            -. - -In CommonMark, a list can interrupt a paragraph. That is, -no blank line is needed to separate a paragraph from a following -list: - -. -Foo -- bar -- baz -. -

                            Foo

                            -
                              -
                            • bar
                            • -
                            • baz
                            • -
                            -. - -`Markdown.pl` does not allow this, through fear of triggering a list -via a numeral in a hard-wrapped line: - -. -The number of windows in my house is -14. The number of doors is 6. -. -

                            The number of windows in my house is

                            -
                              -
                            1. The number of doors is 6.
                            2. -
                            -. - -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: - - I need to buy - - new shoes - - a coat - - a plane ticket - -Second, we are attracted to a - -> [principle of uniformity](@principle-of-uniformity): -> if a chunk of text has a certain -> meaning, it will continue to have the same meaning when put into a -> container block (such as a list item or blockquote). - -(Indeed, the spec for [list items] and [block quotes] presupposes -this principle.) This principle implies that if - - * I need to buy - - new shoes - - a coat - - a plane ticket - -is a list item containing a paragraph followed by a nested sublist, -as all Markdown implementations agree it is (though the paragraph -may be rendered without `

                            ` tags, since the list is "tight"), -then - - I need to buy - - new shoes - - a coat - - a plane ticket - -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: - -1. Require blank lines before *all* lists and blockquotes, - including lists that occur as sublists inside other list items. - -2. Require blank lines in none of these places. - -[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. - -There can be blank lines between items, but two blank lines end -a list: - -. -- foo - -- bar - - -- baz -. -

                              -
                            • -

                              foo

                              -
                            • -
                            • -

                              bar

                              -
                            • -
                            -
                              -
                            • baz
                            • -
                            -. - -As illustrated above in the section on [list items], -two blank lines between blocks *within* a list item will also end a -list: - -. -- foo - - - bar -- baz -. -
                              -
                            • foo
                            • -
                            -

                            bar

                            -
                              -
                            • baz
                            • -
                            -. - -Indeed, two blank lines will end *all* containing lists: - -. -- foo - - bar - - baz - - - bim -. -
                              -
                            • foo -
                                -
                              • bar -
                                  -
                                • baz
                                • -
                                -
                              • -
                              -
                            • -
                            -
                              bim
                            -
                            -. - -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: - -. -- foo -- bar - - -- baz -- bim -. -
                              -
                            • foo
                            • -
                            • bar
                            • -
                            -
                              -
                            • baz
                            • -
                            • bim
                            • -
                            -. - -. -- foo - - notcode - -- foo - - - code -. -
                              -
                            • -

                              foo

                              -

                              notcode

                              -
                            • -
                            • -

                              foo

                              -
                            • -
                            -
                            code
                            -
                            -. - -List items need not be indented to the same level. The following -list items will be treated as items at the same list level, -since none is indented enough to belong to the previous list -item: - -. -- a - - b - - c - - d - - e - - f -- g -. -
                              -
                            • a
                            • -
                            • b
                            • -
                            • c
                            • -
                            • d
                            • -
                            • e
                            • -
                            • f
                            • -
                            • g
                            • -
                            -. - -This is a loose list, because there is a blank line between -two of the list items: - -. -- a -- b - -- c -. -
                              -
                            • -

                              a

                              -
                            • -
                            • -

                              b

                              -
                            • -
                            • -

                              c

                              -
                            • -
                            -. - -So is this, with a empty second item: - -. -* a -* - -* c -. -
                              -
                            • -

                              a

                              -
                            • -
                            • -
                            • -

                              c

                              -
                            • -
                            -. - -These are loose lists, even though there is no space between the items, -because one of the items directly contains two block-level elements -with a blank line between them: - -. -- a -- b - - c -- d -. -
                              -
                            • -

                              a

                              -
                            • -
                            • -

                              b

                              -

                              c

                              -
                            • -
                            • -

                              d

                              -
                            • -
                            -. - -. -- a -- b - - [ref]: /url -- d -. -
                              -
                            • -

                              a

                              -
                            • -
                            • -

                              b

                              -
                            • -
                            • -

                              d

                              -
                            • -
                            -. - -This is a tight list, because the blank lines are in a code block: - -. -- a -- ``` - b - - - ``` -- c -. -
                              -
                            • a
                            • -
                            • -
                              b
                              -
                              -
                              -
                              -
                            • -
                            • c
                            • -
                            -. - -This is a tight list, because the blank line is between two -paragraphs of a sublist. So the sublist is loose while -the outer list is tight: - -. -- a - - b - - c -- d -. -
                              -
                            • a -
                                -
                              • -

                                b

                                -

                                c

                                -
                              • -
                              -
                            • -
                            • d
                            • -
                            -. - -This is a tight list, because the blank line is inside the -block quote: - -. -* a - > b - > -* c -. -
                              -
                            • a -
                              -

                              b

                              -
                              -
                            • -
                            • c
                            • -
                            -. - -This list is tight, because the consecutive block elements -are not separated by blank lines: - -. -- a - > b - ``` - c - ``` -- d -. -
                              -
                            • a -
                              -

                              b

                              -
                              -
                              c
                              -
                              -
                            • -
                            • d
                            • -
                            -. - -A single-paragraph list is tight: - -. -- a -. -
                              -
                            • a
                            • -
                            -. - -. -- a - - b -. -
                              -
                            • a -
                                -
                              • b
                              • -
                              -
                            • -
                            -. - -This list is loose, because of the blank line between the -two block elements in the list item: - -. -1. ``` - foo - ``` - - bar -. -
                              -
                            1. -
                              foo
                              -
                              -

                              bar

                              -
                            2. -
                            -. - -Here the outer list is loose, the inner list tight: - -. -* foo - * bar - - baz -. -
                              -
                            • -

                              foo

                              -
                                -
                              • bar
                              • -
                              -

                              baz

                              -
                            • -
                            -. - -. -- a - - b - - c - -- d - - e - - f -. -
                              -
                            • -

                              a

                              -
                                -
                              • b
                              • -
                              • c
                              • -
                              -
                            • -
                            • -

                              d

                              -
                                -
                              • e
                              • -
                              • f
                              • -
                              -
                            • -
                            -. - -# Inlines - -Inlines are parsed sequentially from the beginning of the character -stream to the end (left to right, in left-to-right languages). -Thus, for example, in - -. -`hi`lo` -. -

                            hilo`

                            -. - -`hi` is parsed as code, leaving the backtick at the end as a literal -backtick. - -## Backslash escapes - -Any ASCII punctuation character may be backslash-escaped: - -. -\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~ -. -

                            !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

                            -. - -Backslashes before other characters are treated as literal -backslashes: - -. -\→\A\a\ \3\φ\« -. -

                            \ \A\a\ \3\φ\«

                            -. - -Escaped characters are treated as regular characters and do -not have their usual Markdown meanings: - -. -\*not emphasized* -\
                            not a tag -\[not a link](/foo) -\`not code` -1\. not a list -\* not a list -\# not a header -\[foo]: /url "not a reference" -. -

                            *not emphasized* -<br/> not a tag -[not a link](/foo) -`not code` -1. not a list -* not a list -# not a header -[foo]: /url "not a reference"

                            -. - -If a backslash is itself escaped, the following character is not: - -. -\\*emphasis* -. -

                            \emphasis

                            -. - -A backslash at the end of the line is a [hard line break]: - -. -foo\ -bar -. -

                            foo
                            -bar

                            -. - -Backslash escapes do not work in code blocks, code spans, autolinks, or -raw HTML: - -. -`` \[\` `` -. -

                            \[\`

                            -. - -. - \[\] -. -
                            \[\]
                            -
                            -. - -. -~~~ -\[\] -~~~ -. -
                            \[\]
                            -
                            -. - -. - -. -

                            http://example.com?find=\*

                            -. - -. - -. -

                            -. - -But they work in all other contexts, including URLs and link titles, -link references, and [info string]s in [fenced code block]s: - -. -[foo](/bar\* "ti\*tle") -. -

                            foo

                            -. - -. -[foo] - -[foo]: /bar\* "ti\*tle" -. -

                            foo

                            -. - -. -``` foo\+bar -foo -``` -. -
                            foo
                            -
                            -. - - -## Entities - -With the goal of making this standard as HTML-agnostic as possible, all -valid HTML entities (except in code blocks and code spans) -are recognized as such and converted into unicode characters before -they are stored in the AST. This means that renderers to formats other -than HTML need not be HTML-entity aware. HTML renderers may either escape -unicode characters as entities or leave them as they are. (However, -`"`, `&`, `<`, and `>` must always be rendered as entities.) - -[Named entities](@name-entities) consist of `&` -+ any of the valid HTML5 entity names + `;`. The -[following document](https://html.spec.whatwg.org/multipage/entities.json) -is used as an authoritative source of the valid entity names and their -corresponding codepoints. - -. -  & © Æ Ď ¾ ℋ ⅆ ∲ -. -

                              & © Æ Ď ¾ ℋ ⅆ ∲

                            -. - -[Decimal entities](@decimal-entities) -consist of `&#` + a string of 1--8 arabic digits + `;`. Again, these -entities need to be recognised and tranformed into their corresponding -UTF8 codepoints. Invalid Unicode codepoints will be written as the -"unknown codepoint" character (`0xFFFD`) - -. -# Ӓ Ϡ � -. -

                            # Ӓ Ϡ �

                            -. - -[Hexadecimal entities](@hexadecimal-entities) -consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits -+ `;`. They will also be parsed and turned into their corresponding UTF8 values in the AST. - -. -" ആ ಫ -. -

                            " ആ ಫ

                            -. - -Here are some nonentities: - -. -  &x; &#; &#x; &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?; -. -

                            &nbsp &x; &#; &#x; &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?;

                            -. - -Although HTML5 does accept some entities without a trailing semicolon -(such as `©`), these are not recognized as entities here, because it -makes the grammar too ambiguous: - -. -© -. -

                            &copy

                            -. - -Strings that are not on the list of HTML5 named entities are not -recognized as entities either: - -. -&MadeUpEntity; -. -

                            &MadeUpEntity;

                            -. - -Entities are recognized in any context besides code spans or -code blocks, including raw HTML, URLs, [link title]s, and -[fenced code block] [info string]s: - -. - -. -

                            -. - -. -[foo](/föö "föö") -. -

                            foo

                            -. - -. -[foo] - -[foo]: /föö "föö" -. -

                            foo

                            -. - -. -``` föö -foo -``` -. -
                            foo
                            -
                            -. - -Entities are treated as literal text in code spans and code blocks: - -. -`föö` -. -

                            f&ouml;&ouml;

                            -. - -. - föfö -. -
                            f&ouml;f&ouml;
                            -
                            -. - -## Code spans - -A [backtick string](@backtick-string) -is a string of one or more backtick characters (`` ` ``) that is neither -preceded nor followed by a backtick. - -A [code span](@code-span) begins with a backtick string and ends with -a backtick string of equal length. The contents of the code span are -the characters between the two backtick strings, with leading and -trailing spaces and [line ending]s removed, and -[whitespace] collapsed to single spaces. - -This is a simple code span: - -. -`foo` -. -

                            foo

                            -. - -Here two backticks are used, because the code contains a backtick. -This example also illustrates stripping of leading and trailing spaces: - -. -`` foo ` bar `` -. -

                            foo ` bar

                            -. - -This example shows the motivation for stripping leading and trailing -spaces: - -. -` `` ` -. -

                            ``

                            -. - -[Line ending]s are treated like spaces: - -. -`` -foo -`` -. -

                            foo

                            -. - -Interior spaces and [line ending]s are collapsed into -single spaces, just as they would be by a browser: - -. -`foo bar - baz` -. -

                            foo bar baz

                            -. - -Q: Why not just leave the spaces, since browsers will collapse them -anyway? A: Because we might be targeting a non-HTML format, and we -shouldn't rely on HTML-specific rendering assumptions. - -(Existing implementations differ in their treatment of internal -spaces and [line ending]s. Some, including `Markdown.pl` and -`showdown`, convert an internal [line ending] into a -`
                            ` tag. But this makes things difficult for those who like to -hard-wrap their paragraphs, since a line break in the midst of a code -span will cause an unintended line break in the output. Others just -leave internal spaces as they are, which is fine if only HTML is being -targeted.) - -. -`foo `` bar` -. -

                            foo `` bar

                            -. - -Note that backslash escapes do not work in code spans. All backslashes -are treated literally: - -. -`foo\`bar` -. -

                            foo\bar`

                            -. - -Backslash escapes are never needed, because one can always choose a -string of *n* backtick characters as delimiters, where the code does -not contain any strings of exactly *n* backtick characters. - -Code span backticks have higher precedence than any other inline -constructs except HTML tags and autolinks. Thus, for example, this is -not parsed as emphasized text, since the second `*` is part of a code -span: - -. -*foo`*` -. -

                            *foo*

                            -. - -And this is not parsed as a link: - -. -[not a `link](/foo`) -. -

                            [not a link](/foo)

                            -. - -Code spans, HTML tags, and autolinks have the same precedence. -Thus, this is code: - -. -`` -. -

                            <a href="">`

                            -. - -But this is an HTML tag: - -. -
                            ` -. -

                            `

                            -. - -And this is code: - -. -`` -. -

                            <http://foo.bar.baz>`

                            -. - -But this is an autolink: - -. -` -. -

                            http://foo.bar.`baz`

                            -. - -When a backtick string is not closed by a matching backtick string, -we just have literal backticks: - -. -```foo`` -. -

                            ```foo``

                            -. - -. -`foo -. -

                            `foo

                            -. - -## Emphasis and strong emphasis - -John Gruber's original [Markdown syntax -description](http://daringfireball.net/projects/markdown/syntax#em) says: - -> Markdown treats asterisks (`*`) and underscores (`_`) as indicators of -> emphasis. Text wrapped with one `*` or `_` will be wrapped with an HTML -> `` tag; double `*`'s or `_`'s will be wrapped with an HTML `` -> tag. - -This is enough for most users, but these rules leave much undecided, -especially when it comes to nested emphasis. The original -`Markdown.pl` test suite makes it clear that triple `***` and -`___` delimiters can be used for strong emphasis, and most -implementations have also allowed the following patterns: - -``` markdown -***strong emph*** -***strong** in emph* -***emph* in strong** -**in strong *emph*** -*in emph **strong*** -``` - -The following patterns are less widely supported, but the intent -is clear and they are useful (especially in contexts like bibliography -entries): - -``` markdown -*emph *with emph* in it* -**strong **with strong** in it** -``` - -Many implementations have also restricted intraword emphasis to -the `*` forms, to avoid unwanted emphasis in words containing -internal underscores. (It is best practice to put these in code -spans, but users often do not.) - -``` markdown -internal emphasis: foo*bar*baz -no emphasis: foo_bar_baz -``` - -The rules given below capture all of these patterns, while allowing -for efficient parsing strategies that do not backtrack. - -First, some definitions. A [delimiter run](@delimiter-run) is either -a sequence of one or more `*` characters that is not preceded or -followed by a `*` character, or a sequence of one or more `_` -characters that is not preceded or followed by a `_` character. - -A [left-flanking delimiter run](@left-flanking-delimiter-run) is -a [delimiter run] that is (a) not followed by [unicode whitespace], -and (b) either not followed by a [punctuation character], or -preceded by [unicode whitespace] or a [punctuation character]. - -A [right-flanking delimiter run](@right-flanking-delimiter-run) is -a [delimiter run] that is (a) not preceded by [unicode whitespace], -and (b) either not preceded by a [punctuation character], or -followed by [unicode whitespace] or a [punctuation character]. - -Here are some examples of delimiter runs. - - - left-flanking but not right-flanking: - - ``` - ***abc - _abc - **"abc" - _"abc" - ``` - - - right-flanking but not left-flanking: - - ``` - abc*** - abc_ - "abc"** - _"abc" - ``` - - - Both right and right-flanking: - - ``` - abc***def - "abc"_"def" - ``` - - - Neither right nor right-flanking: - - ``` - abc *** def - a _ b - ``` - -(The idea of distinguishing left-flanking and right-flanking -delimiter runs based on the character before and the character -after comes from Roopesh Chander's -[vfmd](http://www.vfmd.org/vfmd-spec/specification/#procedure-for-identifying-emphasis-tags). -vfmd uses the terminology "emphasis indicator string" instead of "delimiter -run," and its rules for distinguishing left- and right-flanking runs -are a bit more complex than the ones given here.) - -The following rules define emphasis and strong emphasis: - -1. A single `*` character [can open emphasis](@can-open-emphasis) - iff it is part of a [left-flanking delimiter run]. - -2. A single `_` character [can open emphasis] iff - it is part of a [left-flanking delimiter run] - and not part of a [right-flanking delimiter run]. - -3. A single `*` character [can close emphasis](@can-close-emphasis) - iff it is part of a [right-flanking delimiter run]. - -4. A single `_` character [can close emphasis] - iff it is part of a [right-flanking delimiter run] - and not part of a [left-flanking delimiter run]. - -5. A double `**` [can open strong emphasis](@can-open-strong-emphasis) - iff it is part of a [left-flanking delimiter run]. - -6. A double `__` [can open strong emphasis] - iff it is part of a [left-flanking delimiter run] - and not part of a [right-flanking delimiter run]. - -7. A double `**` [can close strong emphasis](@can-close-strong-emphasis) - iff it is part of a [right-flanking delimiter run]. - -8. A double `__` [can close strong emphasis] - iff it is part of a [right-flanking delimiter run] - and not part of a [left-flanking delimiter run]. - -9. Emphasis begins with a delimiter that [can open emphasis] and ends - with a delimiter that [can close emphasis], and that uses the same - character (`_` or `*`) as the opening delimiter. There must - be a nonempty sequence of inlines between the open delimiter - and the closing delimiter; these form the contents of the emphasis - inline. - -10. Strong emphasis begins with a delimiter that - [can open strong emphasis] and ends with a delimiter that - [can close strong emphasis], and that uses the same character - (`_` or `*`) as the opening delimiter. - There must be a nonempty sequence of inlines between the open - delimiter and the closing delimiter; these form the contents of - the strong emphasis inline. - -11. A literal `*` character cannot occur at the beginning or end of - `*`-delimited emphasis or `**`-delimited strong emphasis, unless it - is backslash-escaped. - -12. A literal `_` character cannot occur at the beginning or end of - `_`-delimited emphasis or `__`-delimited strong emphasis, unless it - is backslash-escaped. - -Where rules 1--12 above are compatible with multiple parsings, -the following principles resolve ambiguity: - -13. The number of nestings should be minimized. Thus, for example, - an interpretation `...` is always preferred to - `...`. - -14. An interpretation `...` is always - preferred to `..`. - -15. When two potential emphasis or strong emphasis spans overlap, - so that the second begins before the first ends and ends after - the first ends, the first takes precedence. Thus, for example, - `*foo _bar* baz_` is parsed as `foo _bar baz_` rather - than `*foo bar* baz`. For the same reason, - `**foo*bar**` is parsed as `foobar*` - rather than `foo*bar`. - -16. When there are two potential emphasis or strong emphasis spans - with the same closing delimiter, the shorter one (the one that - opens later) takes precedence. Thus, for example, - `**foo **bar baz**` is parsed as `**foo bar baz` - rather than `foo **bar baz`. - -17. Inline code spans, links, images, and HTML tags group more tightly - than emphasis. So, when there is a choice between an interpretation - that contains one of these elements and one that does not, the - former always wins. Thus, for example, `*[foo*](bar)` is - parsed as `*foo*` rather than as - `[foo](bar)`. - -These rules can be illustrated through a series of examples. - -Rule 1: - -. -*foo bar* -. -

                            foo bar

                            -. - -This is not emphasis, because the opening `*` is followed by -whitespace, and hence not part of a [left-flanking delimiter run]: - -. -a * foo bar* -. -

                            a * foo bar*

                            -. - -This is not emphasis, because the opening `*` is preceded -by an alphanumeric and followed by punctuation, and hence -not part of a [left-flanking delimiter run]: - -. -a*"foo"* -. -

                            a*"foo"*

                            -. - -Unicode nonbreaking spaces count as whitespace, too: - -. -* a * -. -

                            * a *

                            -. - -Intraword emphasis with `*` is permitted: - -. -foo*bar* -. -

                            foobar

                            -. - -. -5*6*78 -. -

                            5678

                            -. - -Rule 2: - -. -_foo bar_ -. -

                            foo bar

                            -. - -This is not emphasis, because the opening `_` is followed by -whitespace: - -. -_ foo bar_ -. -

                            _ foo bar_

                            -. - -This is not emphasis, because the opening `_` is preceded -by an alphanumeric and followed by punctuation: - -. -a_"foo"_ -. -

                            a_"foo"_

                            -. - -Emphasis with `_` is not allowed inside words: - -. -foo_bar_ -. -

                            foo_bar_

                            -. - -. -5_6_78 -. -

                            5_6_78

                            -. - -. -пристаням_стремятся_ -. -

                            пристаням_стремятся_

                            -. - -Here `_` does not generate emphasis, because the first delimiter run -is right-flanking and the second left-flanking: - -. -aa_"bb"_cc -. -

                            aa_"bb"_cc

                            -. - -Here there is no emphasis, because the delimiter runs are -both left- and right-flanking: - -. -"aa"_"bb"_"cc" -. -

                            "aa"_"bb"_"cc"

                            -. - -Rule 3: - -This is not emphasis, because the closing delimiter does -not match the opening delimiter: - -. -_foo* -. -

                            _foo*

                            -. - -This is not emphasis, because the closing `*` is preceded by -whitespace: - -. -*foo bar * -. -

                            *foo bar *

                            -. - -This is not emphasis, because the second `*` is -preceded by punctuation and followed by an alphanumeric -(hence it is not part of a [right-flanking delimiter run]: - -. -*(*foo) -. -

                            *(*foo)

                            -. - -The point of this restriction is more easily appreciated -with this example: - -. -*(*foo*)* -. -

                            (foo)

                            -. - -Intraword emphasis with `*` is allowed: - -. -*foo*bar -. -

                            foobar

                            -. - - -Rule 4: - -This is not emphasis, because the closing `_` is preceded by -whitespace: - -. -_foo bar _ -. -

                            _foo bar _

                            -. - -This is not emphasis, because the second `_` is -preceded by punctuation and followed by an alphanumeric: - -. -_(_foo) -. -

                            _(_foo)

                            -. - -This is emphasis within emphasis: - -. -_(_foo_)_ -. -

                            (foo)

                            -. - -Intraword emphasis is disallowed for `_`: - -. -_foo_bar -. -

                            _foo_bar

                            -. - -. -_пристаням_стремятся -. -

                            _пристаням_стремятся

                            -. - -. -_foo_bar_baz_ -. -

                            foo_bar_baz

                            -. - -Rule 5: - -. -**foo bar** -. -

                            foo bar

                            -. - -This is not strong emphasis, because the opening delimiter is -followed by whitespace: - -. -** foo bar** -. -

                            ** foo bar**

                            -. - -This is not strong emphasis, because the opening `**` is preceded -by an alphanumeric and followed by punctuation, and hence -not part of a [left-flanking delimiter run]: - -. -a**"foo"** -. -

                            a**"foo"**

                            -. - -Intraword strong emphasis with `**` is permitted: - -. -foo**bar** -. -

                            foobar

                            -. - -Rule 6: - -. -__foo bar__ -. -

                            foo bar

                            -. - -This is not strong emphasis, because the opening delimiter is -followed by whitespace: - -. -__ foo bar__ -. -

                            __ foo bar__

                            -. - -This is not strong emphasis, because the opening `__` is preceded -by an alphanumeric and followed by punctuation: - -. -a__"foo"__ -. -

                            a__"foo"__

                            -. - -Intraword strong emphasis is forbidden with `__`: - -. -foo__bar__ -. -

                            foo__bar__

                            -. - -. -5__6__78 -. -

                            5__6__78

                            -. - -. -пристаням__стремятся__ -. -

                            пристаням__стремятся__

                            -. - -. -__foo, __bar__, baz__ -. -

                            foo, bar, baz

                            -. - -Rule 7: - -This is not strong emphasis, because the closing delimiter is preceded -by whitespace: - -. -**foo bar ** -. -

                            **foo bar **

                            -. - -(Nor can it be interpreted as an emphasized `*foo bar *`, because of -Rule 11.) - -This is not strong emphasis, because the second `**` is -preceded by punctuation and followed by an alphanumeric: - -. -**(**foo) -. -

                            **(**foo)

                            -. - -The point of this restriction is more easily appreciated -with these examples: - -. -*(**foo**)* -. -

                            (foo)

                            -. - -. -**Gomphocarpus (*Gomphocarpus physocarpus*, syn. -*Asclepias physocarpa*)** -. -

                            Gomphocarpus (Gomphocarpus physocarpus, syn. -Asclepias physocarpa)

                            -. - -. -**foo "*bar*" foo** -. -

                            foo "bar" foo

                            -. - -Intraword emphasis: - -. -**foo**bar -. -

                            foobar

                            -. - -Rule 8: - -This is not strong emphasis, because the closing delimiter is -preceded by whitespace: - -. -__foo bar __ -. -

                            __foo bar __

                            -. - -This is not strong emphasis, because the second `__` is -preceded by punctuation and followed by an alphanumeric: - -. -__(__foo) -. -

                            __(__foo)

                            -. - -The point of this restriction is more easily appreciated -with this example: - -. -_(__foo__)_ -. -

                            (foo)

                            -. - -Intraword strong emphasis is forbidden with `__`: - -. -__foo__bar -. -

                            __foo__bar

                            -. - -. -__пристаням__стремятся -. -

                            __пристаням__стремятся

                            -. - -. -__foo__bar__baz__ -. -

                            foo__bar__baz

                            -. - -Rule 9: - -Any nonempty sequence of inline elements can be the contents of an -emphasized span. - -. -*foo [bar](/url)* -. -

                            foo bar

                            -. - -. -*foo -bar* -. -

                            foo -bar

                            -. - -In particular, emphasis and strong emphasis can be nested -inside emphasis: - -. -_foo __bar__ baz_ -. -

                            foo bar baz

                            -. - -. -_foo _bar_ baz_ -. -

                            foo bar baz

                            -. - -. -__foo_ bar_ -. -

                            foo bar

                            -. - -. -*foo *bar** -. -

                            foo bar

                            -. - -. -*foo **bar** baz* -. -

                            foo bar baz

                            -. - -But note: - -. -*foo**bar**baz* -. -

                            foobarbaz

                            -. - -The difference is that in the preceding case, the internal delimiters -[can close emphasis], while in the cases with spaces, they cannot. - -. -***foo** bar* -. -

                            foo bar

                            -. - -. -*foo **bar*** -. -

                            foo bar

                            -. - -Note, however, that in the following case we get no strong -emphasis, because the opening delimiter is closed by the first -`*` before `bar`: - -. -*foo**bar*** -. -

                            foobar**

                            -. - - -Indefinite levels of nesting are possible: - -. -*foo **bar *baz* bim** bop* -. -

                            foo bar baz bim bop

                            -. - -. -*foo [*bar*](/url)* -. -

                            foo bar

                            -. - -There can be no empty emphasis or strong emphasis: - -. -** is not an empty emphasis -. -

                            ** is not an empty emphasis

                            -. - -. -**** is not an empty strong emphasis -. -

                            **** is not an empty strong emphasis

                            -. - - -Rule 10: - -Any nonempty sequence of inline elements can be the contents of an -strongly emphasized span. - -. -**foo [bar](/url)** -. -

                            foo bar

                            -. - -. -**foo -bar** -. -

                            foo -bar

                            -. - -In particular, emphasis and strong emphasis can be nested -inside strong emphasis: - -. -__foo _bar_ baz__ -. -

                            foo bar baz

                            -. - -. -__foo __bar__ baz__ -. -

                            foo bar baz

                            -. - -. -____foo__ bar__ -. -

                            foo bar

                            -. - -. -**foo **bar**** -. -

                            foo bar

                            -. - -. -**foo *bar* baz** -. -

                            foo bar baz

                            -. - -But note: - -. -**foo*bar*baz** -. -

                            foobarbaz**

                            -. - -The difference is that in the preceding case, the internal delimiters -[can close emphasis], while in the cases with spaces, they cannot. - -. -***foo* bar** -. -

                            foo bar

                            -. - -. -**foo *bar*** -. -

                            foo bar

                            -. - -Indefinite levels of nesting are possible: - -. -**foo *bar **baz** -bim* bop** -. -

                            foo bar baz -bim bop

                            -. - -. -**foo [*bar*](/url)** -. -

                            foo bar

                            -. - -There can be no empty emphasis or strong emphasis: - -. -__ is not an empty emphasis -. -

                            __ is not an empty emphasis

                            -. - -. -____ is not an empty strong emphasis -. -

                            ____ is not an empty strong emphasis

                            -. - - -Rule 11: - -. -foo *** -. -

                            foo ***

                            -. - -. -foo *\** -. -

                            foo *

                            -. - -. -foo *_* -. -

                            foo _

                            -. - -. -foo ***** -. -

                            foo *****

                            -. - -. -foo **\*** -. -

                            foo *

                            -. - -. -foo **_** -. -

                            foo _

                            -. - -Note that when delimiters do not match evenly, Rule 11 determines -that the excess literal `*` characters will appear outside of the -emphasis, rather than inside it: - -. -**foo* -. -

                            *foo

                            -. - -. -*foo** -. -

                            foo*

                            -. - -. -***foo** -. -

                            *foo

                            -. - -. -****foo* -. -

                            ***foo

                            -. - -. -**foo*** -. -

                            foo*

                            -. - -. -*foo**** -. -

                            foo***

                            -. - - -Rule 12: - -. -foo ___ -. -

                            foo ___

                            -. - -. -foo _\__ -. -

                            foo _

                            -. - -. -foo _*_ -. -

                            foo *

                            -. - -. -foo _____ -. -

                            foo _____

                            -. - -. -foo __\___ -. -

                            foo _

                            -. - -. -foo __*__ -. -

                            foo *

                            -. - -. -__foo_ -. -

                            _foo

                            -. - -Note that when delimiters do not match evenly, Rule 12 determines -that the excess literal `_` characters will appear outside of the -emphasis, rather than inside it: - -. -_foo__ -. -

                            foo_

                            -. - -. -___foo__ -. -

                            _foo

                            -. - -. -____foo_ -. -

                            ___foo

                            -. - -. -__foo___ -. -

                            foo_

                            -. - -. -_foo____ -. -

                            foo___

                            -. - -Rule 13 implies that if you want emphasis nested directly inside -emphasis, you must use different delimiters: - -. -**foo** -. -

                            foo

                            -. - -. -*_foo_* -. -

                            foo

                            -. - -. -__foo__ -. -

                            foo

                            -. - -. -_*foo*_ -. -

                            foo

                            -. - -However, strong emphasis within strong emphasis is possible without -switching delimiters: - -. -****foo**** -. -

                            foo

                            -. - -. -____foo____ -. -

                            foo

                            -. - - -Rule 13 can be applied to arbitrarily long sequences of -delimiters: - -. -******foo****** -. -

                            foo

                            -. - -Rule 14: - -. -***foo*** -. -

                            foo

                            -. - -. -_____foo_____ -. -

                            foo

                            -. - -Rule 15: - -. -*foo _bar* baz_ -. -

                            foo _bar baz_

                            -. - -. -**foo*bar** -. -

                            foobar*

                            -. - - -Rule 16: - -. -**foo **bar baz** -. -

                            **foo bar baz

                            -. - -. -*foo *bar baz* -. -

                            *foo bar baz

                            -. - -Rule 17: - -. -*[bar*](/url) -. -

                            *bar*

                            -. - -. -_foo [bar_](/url) -. -

                            _foo bar_

                            -. - -. -* -. -

                            *

                            -. - -. -** -. -

                            **

                            -. - -. -__ -. -

                            __

                            -. - -. -*a `*`* -. -

                            a *

                            -. - -. -_a `_`_ -. -

                            a _

                            -. - -. -**a -. -

                            **ahttp://foo.bar?q=**

                            -. - -. -__a -. -

                            __ahttp://foo.bar?q=__

                            -. - - -## Links - -A link contains [link text] (the visible text), a [link destination] -(the URI that is the link destination), and optionally a [link title]. -There are two basic kinds of links in Markdown. In [inline link]s the -destination and title are given immediately after the link text. In -[reference link]s the destination and title are defined elsewhere in -the document. - -A [link text](@link-text) consists of a sequence of zero or more -inline elements enclosed by square brackets (`[` and `]`). The -following rules apply: - -- Links may not contain other links, at any level of nesting. - -- Brackets are allowed in the [link text] only if (a) they - are backslash-escaped or (b) they appear as a matched pair of brackets, - with an open bracket `[`, a sequence of zero or more inlines, and - a close bracket `]`. - -- Backtick [code span]s, [autolink]s, and raw [HTML tag]s bind more tightly - than the brackets in link text. Thus, for example, - `` [foo`]` `` could not be a link text, since the second `]` - is part of a code span. - -- The brackets in link text bind more tightly than markers for - [emphasis and strong emphasis]. Thus, for example, `*[foo*](url)` is a link. - -A [link destination](@link-destination) consists of either - -- a sequence of zero or more characters between an opening `<` and a - closing `>` that contains no line breaks or unescaped `<` or `>` - characters, or - -- a nonempty sequence of characters that does not include - ASCII space or control characters, and includes parentheses - only if (a) they are backslash-escaped or (b) they are part of - a balanced pair of unescaped parentheses that is not itself - inside a balanced pair of unescaped paretheses. - -A [link title](@link-title) consists of either - -- a sequence of zero or more characters between straight double-quote - characters (`"`), including a `"` character only if it is - backslash-escaped, or - -- a sequence of zero or more characters between straight single-quote - characters (`'`), including a `'` character only if it is - backslash-escaped, or - -- a sequence of zero or more characters between matching parentheses - (`(...)`), including a `)` character only if it is backslash-escaped. - -An [inline link](@inline-link) consists of a [link text] followed immediately -by a left parenthesis `(`, optional [whitespace], an optional -[link destination], an optional [link title] separated from the link -destination by [whitespace], optional [whitespace], and a right -parenthesis `)`. The link's text consists of the inlines contained -in the [link text] (excluding the enclosing square brackets). -The link's URI consists of the link destination, excluding enclosing -`<...>` if present, with backslash-escapes in effect as described -above. The link's title consists of the link title, excluding its -enclosing delimiters, with backslash-escapes in effect as described -above. - -Here is a simple inline link: - -. -[link](/uri "title") -. -

                            link

                            -. - -The title may be omitted: - -. -[link](/uri) -. -

                            link

                            -. - -Both the title and the destination may be omitted: - -. -[link]() -. -

                            link

                            -. - -. -[link](<>) -. -

                            link

                            -. - -If the destination contains spaces, it must be enclosed in pointy -braces: - -. -[link](/my uri) -. -

                            [link](/my uri)

                            -. - -. -[link](
                            ) -. -

                            link

                            -. - -The destination cannot contain line breaks, even with pointy braces: - -. -[link](foo -bar) -. -

                            [link](foo -bar)

                            -. - -. -[link]() -. -

                            [link]()

                            -. - -One level of balanced parentheses is allowed without escaping: - -. -[link]((foo)and(bar)) -. -

                            link

                            -. - -However, if you have parentheses within parentheses, you need to escape -or use the `<...>` form: - -. -[link](foo(and(bar))) -. -

                            [link](foo(and(bar)))

                            -. - -. -[link](foo(and\(bar\))) -. -

                            link

                            -. - -. -[link]() -. -

                            link

                            -. - -Parentheses and other symbols can also be escaped, as usual -in Markdown: - -. -[link](foo\)\:) -. -

                            link

                            -. - -URL-escaping should be left alone inside the destination, as all -URL-escaped characters are also valid URL characters. HTML entities in -the destination will be parsed into their UTF-8 codepoints, as usual, and -optionally URL-escaped when written as HTML. - -. -[link](foo%20bä) -. -

                            link

                            -. - -Note that, because titles can often be parsed as destinations, -if you try to omit the destination and keep the title, you'll -get unexpected results: - -. -[link]("title") -. -

                            link

                            -. - -Titles may be in single quotes, double quotes, or parentheses: - -. -[link](/url "title") -[link](/url 'title') -[link](/url (title)) -. -

                            link -link -link

                            -. - -Backslash escapes and entities may be used in titles: - -. -[link](/url "title \""") -. -

                            link

                            -. - -Nested balanced quotes are not allowed without escaping: - -. -[link](/url "title "and" title") -. -

                            [link](/url "title "and" title")

                            -. - -But it is easy to work around this by using a different quote type: - -. -[link](/url 'title "and" title') -. -

                            link

                            -. - -(Note: `Markdown.pl` did allow double quotes inside a double-quoted -title, and its test suite included a test demonstrating this. -But it is hard to see a good rationale for the extra complexity this -brings, since there are already many ways---backslash escaping, -entities, or using a different quote type for the enclosing title---to -write titles containing double quotes. `Markdown.pl`'s handling of -titles has a number of other strange features. For example, it allows -single-quoted titles in inline links, but not reference links. And, in -reference links but not inline links, it allows a title to begin with -`"` and end with `)`. `Markdown.pl` 1.0.1 even allows titles with no closing -quotation mark, though 1.0.2b8 does not. It seems preferable to adopt -a simple, rational rule that works the same way in inline links and -link reference definitions.) - -[Whitespace] is allowed around the destination and title: - -. -[link]( /uri - "title" ) -. -

                            link

                            -. - -But it is not allowed between the link text and the -following parenthesis: - -. -[link] (/uri) -. -

                            [link] (/uri)

                            -. - -The link text may contain balanced brackets, but not unbalanced ones, -unless they are escaped: - -. -[link [foo [bar]]](/uri) -. -

                            link [foo [bar]]

                            -. - -. -[link] bar](/uri) -. -

                            [link] bar](/uri)

                            -. - -. -[link [bar](/uri) -. -

                            [link bar

                            -. - -. -[link \[bar](/uri) -. -

                            link [bar

                            -. - -The link text may contain inline content: - -. -[link *foo **bar** `#`*](/uri) -. -

                            link foo bar #

                            -. - -. -[![moon](moon.jpg)](/uri) -. -

                            moon

                            -. - -However, links may not contain other links, at any level of nesting. - -. -[foo [bar](/uri)](/uri) -. -

                            [foo bar](/uri)

                            -. - -. -[foo *[bar [baz](/uri)](/uri)*](/uri) -. -

                            [foo [bar baz](/uri)](/uri)

                            -. - -. -![[[foo](uri1)](uri2)](uri3) -. -

                            [foo](uri2)

                            -. - -These cases illustrate the precedence of link text grouping over -emphasis grouping: - -. -*[foo*](/uri) -. -

                            *foo*

                            -. - -. -[foo *bar](baz*) -. -

                            foo *bar

                            -. - -Note that brackets that *aren't* part of links do not take -precedence: - -. -*foo [bar* baz] -. -

                            foo [bar baz]

                            -. - -These cases illustrate the precedence of HTML tags, code spans, -and autolinks over link grouping: - -. -[foo -. -

                            [foo

                            -. - -. -[foo`](/uri)` -. -

                            [foo](/uri)

                            -. - -. -[foo -. -

                            [foohttp://example.com?search=](uri)

                            -. - -There are three kinds of [reference link](@reference-link)s: -[full](#full-reference-link), [collapsed](#collapsed-reference-link), -and [shortcut](#shortcut-reference-link). - -A [full reference link](@full-reference-link) -consists of a [link text], optional [whitespace], and a [link label] -that [matches] a [link reference definition] elsewhere in the document. - -A [link label](@link-label) begins with a left bracket (`[`) and ends -with the first right bracket (`]`) that is not backslash-escaped. -Unescaped square bracket characters are not allowed in -[link label]s. A link label can have at most 999 -characters inside the square brackets. - -One label [matches](@matches) -another just in case their normalized forms are equal. To normalize a -label, perform the *unicode case fold* and collapse consecutive internal -[whitespace] to a single space. If there are multiple -matching reference link definitions, the one that comes first in the -document is used. (It is desirable in such cases to emit a warning.) - -The contents of the first link label are parsed as inlines, which are -used as the link's text. The link's URI and title are provided by the -matching [link reference definition]. - -Here is a simple example: - -. -[foo][bar] - -[bar]: /url "title" -. -

                            foo

                            -. - -The rules for the [link text] are the same as with -[inline link]s. Thus: - -The link text may contain balanced brackets, but not unbalanced ones, -unless they are escaped: - -. -[link [foo [bar]]][ref] - -[ref]: /uri -. -

                            link [foo [bar]]

                            -. - -. -[link \[bar][ref] - -[ref]: /uri -. -

                            link [bar

                            -. - -The link text may contain inline content: - -. -[link *foo **bar** `#`*][ref] - -[ref]: /uri -. -

                            link foo bar #

                            -. - -. -[![moon](moon.jpg)][ref] - -[ref]: /uri -. -

                            moon

                            -. - -However, links may not contain other links, at any level of nesting. - -. -[foo [bar](/uri)][ref] - -[ref]: /uri -. -

                            [foo bar]ref

                            -. - -. -[foo *bar [baz][ref]*][ref] - -[ref]: /uri -. -

                            [foo bar baz]ref

                            -. - -(In the examples above, we have two [shortcut reference link]s -instead of one [full reference link].) - -The following cases illustrate the precedence of link text grouping over -emphasis grouping: - -. -*[foo*][ref] - -[ref]: /uri -. -

                            *foo*

                            -. - -. -[foo *bar][ref] - -[ref]: /uri -. -

                            foo *bar

                            -. - -These cases illustrate the precedence of HTML tags, code spans, -and autolinks over link grouping: - -. -[foo - -[ref]: /uri -. -

                            [foo

                            -. - -. -[foo`][ref]` - -[ref]: /uri -. -

                            [foo][ref]

                            -. - -. -[foo - -[ref]: /uri -. -

                            [foohttp://example.com?search=][ref]

                            -. - -Matching is case-insensitive: - -. -[foo][BaR] - -[bar]: /url "title" -. -

                            foo

                            -. - -Unicode case fold is used: - -. -[Толпой][Толпой] is a Russian word. - -[ТОЛПОЙ]: /url -. -

                            Толпой is a Russian word.

                            -. - -Consecutive internal [whitespace] is treated as one space for -purposes of determining matching: - -. -[Foo - bar]: /url - -[Baz][Foo bar] -. -

                            Baz

                            -. - -There can be [whitespace] between the [link text] and the [link label]: - -. -[foo] [bar] - -[bar]: /url "title" -. -

                            foo

                            -. - -. -[foo] -[bar] - -[bar]: /url "title" -. -

                            foo

                            -. - -When there are multiple matching [link reference definition]s, -the first is used: - -. -[foo]: /url1 - -[foo]: /url2 - -[bar][foo] -. -

                            bar

                            -. - -Note that matching is performed on normalized strings, not parsed -inline content. So the following does not match, even though the -labels define equivalent inline content: - -. -[bar][foo\!] - -[foo!]: /url -. -

                            [bar][foo!]

                            -. - -[Link label]s cannot contain brackets, unless they are -backslash-escaped: - -. -[foo][ref[] - -[ref[]: /uri -. -

                            [foo][ref[]

                            -

                            [ref[]: /uri

                            -. - -. -[foo][ref[bar]] - -[ref[bar]]: /uri -. -

                            [foo][ref[bar]]

                            -

                            [ref[bar]]: /uri

                            -. - -. -[[[foo]]] - -[[[foo]]]: /url -. -

                            [[[foo]]]

                            -

                            [[[foo]]]: /url

                            -. - -. -[foo][ref\[] - -[ref\[]: /uri -. -

                            foo

                            -. - -A [collapsed reference link](@collapsed-reference-link) -consists of a [link label] that [matches] a -[link reference definition] elsewhere in the -document, optional [whitespace], and the string `[]`. -The contents of the first link label are parsed as inlines, -which are used as the link's text. The link's URI and title are -provided by the matching reference link definition. Thus, -`[foo][]` is equivalent to `[foo][foo]`. - -. -[foo][] - -[foo]: /url "title" -. -

                            foo

                            -. - -. -[*foo* bar][] - -[*foo* bar]: /url "title" -. -

                            foo bar

                            -. - -The link labels are case-insensitive: - -. -[Foo][] - -[foo]: /url "title" -. -

                            Foo

                            -. - - -As with full reference links, [whitespace] is allowed -between the two sets of brackets: - -. -[foo] -[] - -[foo]: /url "title" -. -

                            foo

                            -. - -A [shortcut reference link](@shortcut-reference-link) -consists of a [link label] that [matches] a -[link reference definition] elsewhere in the -document and is not followed by `[]` or a link label. -The contents of the first link label are parsed as inlines, -which are used as the link's text. the link's URI and title -are provided by the matching link reference definition. -Thus, `[foo]` is equivalent to `[foo][]`. - -. -[foo] - -[foo]: /url "title" -. -

                            foo

                            -. - -. -[*foo* bar] - -[*foo* bar]: /url "title" -. -

                            foo bar

                            -. - -. -[[*foo* bar]] - -[*foo* bar]: /url "title" -. -

                            [foo bar]

                            -. - -The link labels are case-insensitive: - -. -[Foo] - -[foo]: /url "title" -. -

                            Foo

                            -. - -A space after the link text should be preserved: - -. -[foo] bar - -[foo]: /url -. -

                            foo bar

                            -. - -If you just want bracketed text, you can backslash-escape the -opening bracket to avoid links: - -. -\[foo] - -[foo]: /url "title" -. -

                            [foo]

                            -. - -Note that this is a link, because a link label ends with the first -following closing bracket: - -. -[foo*]: /url - -*[foo*] -. -

                            *foo*

                            -. - -Full references take precedence over shortcut references: - -. -[foo][bar] - -[foo]: /url1 -[bar]: /url2 -. -

                            foo

                            -. - -In the following case `[bar][baz]` is parsed as a reference, -`[foo]` as normal text: - -. -[foo][bar][baz] - -[baz]: /url -. -

                            [foo]bar

                            -. - -Here, though, `[foo][bar]` is parsed as a reference, since -`[bar]` is defined: - -. -[foo][bar][baz] - -[baz]: /url1 -[bar]: /url2 -. -

                            foobaz

                            -. - -Here `[foo]` is not parsed as a shortcut reference, because it -is followed by a link label (even though `[bar]` is not defined): - -. -[foo][bar][baz] - -[baz]: /url1 -[foo]: /url2 -. -

                            [foo]bar

                            -. - - -## Images - -Syntax for images is like the syntax for links, with one -difference. Instead of [link text], we have an -[image description](@image-description). The rules for this are the -same as for [link text], except that (a) an -image description starts with `![` rather than `[`, and -(b) an image description may contain links. -An image description has inline elements -as its contents. When an image is rendered to HTML, -this is standardly used as the image's `alt` attribute. - -. -![foo](/url "title") -. -

                            foo

                            -. - -. -![foo *bar*] - -[foo *bar*]: train.jpg "train & tracks" -. -

                            foo bar

                            -. - -. -![foo ![bar](/url)](/url2) -. -

                            foo bar

                            -. - -. -![foo [bar](/url)](/url2) -. -

                            foo bar

                            -. - -Though this spec is concerned with parsing, not rendering, it is -recommended that in rendering to HTML, only the plain string content -of the [image description] be used. Note that in -the above example, the alt attribute's value is `foo bar`, not `foo -[bar](/url)` or `foo bar`. Only the plain string -content is rendered, without formatting. - -. -![foo *bar*][] - -[foo *bar*]: train.jpg "train & tracks" -. -

                            foo bar

                            -. - -. -![foo *bar*][foobar] - -[FOOBAR]: train.jpg "train & tracks" -. -

                            foo bar

                            -. - -. -![foo](train.jpg) -. -

                            foo

                            -. - -. -My ![foo bar](/path/to/train.jpg "title" ) -. -

                            My foo bar

                            -. - -. -![foo]() -. -

                            foo

                            -. - -. -![](/url) -. -

                            -. - -Reference-style: - -. -![foo] [bar] - -[bar]: /url -. -

                            foo

                            -. - -. -![foo] [bar] - -[BAR]: /url -. -

                            foo

                            -. - -Collapsed: - -. -![foo][] - -[foo]: /url "title" -. -

                            foo

                            -. - -. -![*foo* bar][] - -[*foo* bar]: /url "title" -. -

                            foo bar

                            -. - -The labels are case-insensitive: - -. -![Foo][] - -[foo]: /url "title" -. -

                            Foo

                            -. - -As with full reference links, [whitespace] is allowed -between the two sets of brackets: - -. -![foo] -[] - -[foo]: /url "title" -. -

                            foo

                            -. - -Shortcut: - -. -![foo] - -[foo]: /url "title" -. -

                            foo

                            -. - -. -![*foo* bar] - -[*foo* bar]: /url "title" -. -

                            foo bar

                            -. - -Note that link labels cannot contain unescaped brackets: - -. -![[foo]] - -[[foo]]: /url "title" -. -

                            ![[foo]]

                            -

                            [[foo]]: /url "title"

                            -. - -The link labels are case-insensitive: - -. -![Foo] - -[foo]: /url "title" -. -

                            Foo

                            -. - -If you just want bracketed text, you can backslash-escape the -opening `!` and `[`: - -. -\!\[foo] - -[foo]: /url "title" -. -

                            ![foo]

                            -. - -If you want a link after a literal `!`, backslash-escape the -`!`: - -. -\![foo] - -[foo]: /url "title" -. -

                            !foo

                            -. - -## Autolinks - -[Autolink](@autolink)s are absolute URIs and email addresses inside -`<` and `>`. They are parsed as links, with the URL or email address -as the link label. - -A [URI autolink](@uri-autolink) consists of `<`, followed by an -[absolute URI] not containing `<`, followed by `>`. It is parsed as -a link to the URI, with the URI as the link's label. - -An [absolute URI](@absolute-uri), -for these purposes, consists of a [scheme] followed by a colon (`:`) -followed by zero or more characters other than ASCII -[whitespace] and control characters, `<`, and `>`. If -the URI includes these characters, you must use percent-encoding -(e.g. `%20` for a space). - -The following [schemes](@scheme) -are recognized (case-insensitive): -`coap`, `doi`, `javascript`, `aaa`, `aaas`, `about`, `acap`, `cap`, -`cid`, `crid`, `data`, `dav`, `dict`, `dns`, `file`, `ftp`, `geo`, `go`, -`gopher`, `h323`, `http`, `https`, `iax`, `icap`, `im`, `imap`, `info`, -`ipp`, `iris`, `iris.beep`, `iris.xpc`, `iris.xpcs`, `iris.lwz`, `ldap`, -`mailto`, `mid`, `msrp`, `msrps`, `mtqp`, `mupdate`, `news`, `nfs`, -`ni`, `nih`, `nntp`, `opaquelocktoken`, `pop`, `pres`, `rtsp`, -`service`, `session`, `shttp`, `sieve`, `sip`, `sips`, `sms`, `snmp`,` -soap.beep`, `soap.beeps`, `tag`, `tel`, `telnet`, `tftp`, `thismessage`, -`tn3270`, `tip`, `tv`, `urn`, `vemmi`, `ws`, `wss`, `xcon`, -`xcon-userid`, `xmlrpc.beep`, `xmlrpc.beeps`, `xmpp`, `z39.50r`, -`z39.50s`, `adiumxtra`, `afp`, `afs`, `aim`, `apt`,` attachment`, `aw`, -`beshare`, `bitcoin`, `bolo`, `callto`, `chrome`,` chrome-extension`, -`com-eventbrite-attendee`, `content`, `cvs`,` dlna-playsingle`, -`dlna-playcontainer`, `dtn`, `dvb`, `ed2k`, `facetime`, `feed`, -`finger`, `fish`, `gg`, `git`, `gizmoproject`, `gtalk`, `hcp`, `icon`, -`ipn`, `irc`, `irc6`, `ircs`, `itms`, `jar`, `jms`, `keyparc`, `lastfm`, -`ldaps`, `magnet`, `maps`, `market`,` message`, `mms`, `ms-help`, -`msnim`, `mumble`, `mvn`, `notes`, `oid`, `palm`, `paparazzi`, -`platform`, `proxy`, `psyc`, `query`, `res`, `resource`, `rmi`, `rsync`, -`rtmp`, `secondlife`, `sftp`, `sgn`, `skype`, `smb`, `soldat`, -`spotify`, `ssh`, `steam`, `svn`, `teamspeak`, `things`, `udp`, -`unreal`, `ut2004`, `ventrilo`, `view-source`, `webcal`, `wtai`, -`wyciwyg`, `xfire`, `xri`, `ymsgr`. - -Here are some valid autolinks: - -. - -. -

                            http://foo.bar.baz

                            -. - -. - -. -

                            http://foo.bar.baz?q=hello&id=22&boolean

                            -. - -. - -. -

                            irc://foo.bar:2233/baz

                            -. - -Uppercase is also fine: - -. - -. -

                            MAILTO:FOO@BAR.BAZ

                            -. - -Spaces are not allowed in autolinks: - -. - -. -

                            <http://foo.bar/baz bim>

                            -. - -An [email autolink](@email-autolink) -consists of `<`, followed by an [email address], -followed by `>`. The link's label is the email address, -and the URL is `mailto:` followed by the email address. - -An [email address](@email-address), -for these purposes, is anything that matches -the [non-normative regex from the HTML5 -spec](https://html.spec.whatwg.org/multipage/forms.html#e-mail-state-(type=email)): - - /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? - (?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ - -Examples of email autolinks: - -. - -. -

                            foo@bar.example.com

                            -. - -. - -. -

                            foo+special@Bar.baz-bar0.com

                            -. - -These are not autolinks: - -. -<> -. -

                            <>

                            -. - -. - -. -

                            <heck://bing.bong>

                            -. - -. -< http://foo.bar > -. -

                            < http://foo.bar >

                            -. - -. - -. -

                            <foo.bar.baz>

                            -. - -. - -. -

                            <localhost:5001/foo>

                            -. - -. -http://example.com -. -

                            http://example.com

                            -. - -. -foo@bar.example.com -. -

                            foo@bar.example.com

                            -. - -## Raw HTML - -Text between `<` and `>` that looks like an HTML tag is parsed as a -raw HTML tag and will be rendered in HTML without escaping. -Tag and attribute names are not limited to current HTML tags, -so custom tags (and even, say, DocBook tags) may be used. - -Here is the grammar for tags: - -A [tag name](@tag-name) consists of an ASCII letter -followed by zero or more ASCII letters or digits. - -An [attribute](@attribute) consists of [whitespace], -an [attribute name], and an optional -[attribute value specification]. - -An [attribute name](@attribute-name) -consists of an ASCII letter, `_`, or `:`, followed by zero or more ASCII -letters, digits, `_`, `.`, `:`, or `-`. (Note: This is the XML -specification restricted to ASCII. HTML5 is laxer.) - -An [attribute value specification](@attribute-value-specification) -consists of optional [whitespace], -a `=` character, optional [whitespace], and an [attribute -value]. - -An [attribute value](@attribute-value) -consists of an [unquoted attribute value], -a [single-quoted attribute value], or a [double-quoted attribute value]. - -An [unquoted attribute value](@unquoted-attribute-value) -is a nonempty string of characters not -including spaces, `"`, `'`, `=`, `<`, `>`, or `` ` ``. - -A [single-quoted attribute value](@single-quoted-attribute-value) -consists of `'`, zero or more -characters not including `'`, and a final `'`. - -A [double-quoted attribute value](@double-quoted-attribute-value) -consists of `"`, zero or more -characters not including `"`, and a final `"`. - -An [open tag](@open-tag) consists of a `<` character, a [tag name], -zero or more [attributes], optional [whitespace], an optional `/` -character, and a `>` character. - -A [closing tag](@closing-tag) consists of the string ``. - -An [HTML comment](@html-comment) consists of ``, -where *text* does not start with `>` or `->`, does not end with `-`, -and does not contain `--`. (See the -[HTML5 spec](http://www.w3.org/TR/html5/syntax.html#comments).) - -A [processing instruction](@processing-instruction) -consists of the string ``, and the string -`?>`. - -A [declaration](@declaration) consists of the -string ``, and the character `>`. - -A [CDATA section](@cdata-section) consists of -the string ``, and the string `]]>`. - -An [HTML tag](@html-tag) consists of an [open tag], a [closing tag], -an [HTML comment], a [processing instruction], a [declaration], -or a [CDATA section]. - -Here are some simple open tags: - -. - -. -

                            -. - -Empty elements: - -. - -. -

                            -. - -[Whitespace] is allowed: - -. - -. -

                            -. - -With attributes: - -. - -. -

                            -. - -Illegal tag names, not parsed as HTML: - -. -<33> <__> -. -

                            <33> <__>

                            -. - -Illegal attribute names: - -. -
                            -. -

                            <a h*#ref="hi">

                            -. - -Illegal attribute values: - -. -
                            -. -

                            </a href="foo">

                            -. - -Comments: - -. -foo -. -

                            foo

                            -. - -. -foo -. -

                            foo <!-- not a comment -- two hyphens -->

                            -. - -Not comments: - -. -foo foo --> - -foo -. -

                            foo <!--> foo -->

                            -

                            foo <!-- foo--->

                            -. - -Processing instructions: - -. -foo -. -

                            foo

                            -. - -Declarations: - -. -foo -. -

                            foo

                            -. - -CDATA sections: - -. -foo &<]]> -. -

                            foo &<]]>

                            -. - -Entities are preserved in HTML attributes: - -. -
                            -. -

                            -. - -Backslash escapes do not work in HTML attributes: - -. - -. -

                            -. - -. - -. -

                            <a href=""">

                            -. - -## Hard line breaks - -A line break (not in a code span or HTML tag) that is preceded -by two or more spaces and does not occur at the end of a block -is parsed as a [hard line break](@hard-line-break) (rendered -in HTML as a `
                            ` tag): - -. -foo -baz -. -

                            foo
                            -baz

                            -. - -For a more visible alternative, a backslash before the -[line ending] may be used instead of two spaces: - -. -foo\ -baz -. -

                            foo
                            -baz

                            -. - -More than two spaces can be used: - -. -foo -baz -. -

                            foo
                            -baz

                            -. - -Leading spaces at the beginning of the next line are ignored: - -. -foo - bar -. -

                            foo
                            -bar

                            -. - -. -foo\ - bar -. -

                            foo
                            -bar

                            -. - -Line breaks can occur inside emphasis, links, and other constructs -that allow inline content: - -. -*foo -bar* -. -

                            foo
                            -bar

                            -. - -. -*foo\ -bar* -. -

                            foo
                            -bar

                            -. - -Line breaks do not occur inside code spans - -. -`code -span` -. -

                            code span

                            -. - -. -`code\ -span` -. -

                            code\ span

                            -. - -or HTML tags: - -. -
                            -. -

                            -. - -. - -. -

                            -. - -Hard line breaks are for separating inline content within a block. -Neither syntax for hard line breaks works at the end of a paragraph or -other block element: - -. -foo\ -. -

                            foo\

                            -. - -. -foo -. -

                            foo

                            -. - -. -### foo\ -. -

                            foo\

                            -. - -. -### foo -. -

                            foo

                            -. - -## Soft line breaks - -A regular line break (not in a code span or HTML tag) that is not -preceded by two or more spaces is parsed 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.) - -. -foo -baz -. -

                            foo -baz

                            -. - -Spaces at the end of the line and beginning of the next line are -removed: - -. -foo - baz -. -

                            foo -baz

                            -. - -A conforming parser may render a soft line break in HTML either as a -line break or as a space. - -A renderer may also provide an option to render soft line breaks -as hard line breaks. - -## Textual content - -Any characters not given an interpretation by the above rules will -be parsed as plain textual content. - -. -hello $.;'there -. -

                            hello $.;'there

                            -. - -. -Foo χρῆν -. -

                            Foo χρῆν

                            -. - -Internal spaces are preserved verbatim: - -. -Multiple spaces -. -

                            Multiple spaces

                            -. - - - -# Appendix A: A parsing strategy {-} - -## Overview {-} - -Parsing has two phases: - -1. In the first phase, lines of input are consumed and the block -structure of the document---its division into paragraphs, block quotes, -list items, and so on---is constructed. Text is assigned to these -blocks but not parsed. Link reference definitions are parsed and a -map of links is constructed. - -2. In the second phase, the raw text contents of paragraphs and headers -are parsed into sequences of Markdown inline elements (strings, -code spans, links, emphasis, and so on), using the map of link -references constructed in phase 1. - -## The document tree {-} - -At each point in processing, the document is represented as a tree of -**blocks**. The root of the tree is a `document` block. The `document` -may have any number of other blocks as **children**. These children -may, in turn, have other blocks as children. The last child of a block -is normally considered **open**, meaning that subsequent lines of input -can alter its contents. (Blocks that are not open are **closed**.) -Here, for example, is a possible document tree, with the open blocks -marked by arrows: - -``` tree --> document - -> block_quote - paragraph - "Lorem ipsum dolor\nsit amet." - -> list (type=bullet tight=true bullet_char=-) - list_item - paragraph - "Qui *quodsi iracundia*" - -> list_item - -> paragraph - "aliquando id" -``` - -## How source lines alter the document tree {-} - -Each line that is processed has an effect on this tree. The line is -analyzed and, depending on its contents, the document may be altered -in one or more of the following ways: - -1. One or more open blocks may be closed. -2. One or more new blocks may be created as children of the - last open block. -3. Text may be added to the last (deepest) open block remaining - on the tree. - -Once a line has been incorporated into the tree in this way, -it can be discarded, so input can be read in a stream. - -We can see how this works by considering how the tree above is -generated by four lines of Markdown: - -``` markdown -> Lorem ipsum dolor -sit amet. -> - Qui *quodsi iracundia* -> - aliquando id -``` - -At the outset, our document model is just - -``` tree --> document -``` - -The first line of our text, - -``` markdown -> Lorem ipsum dolor -``` - -causes a `block_quote` block to be created as a child of our -open `document` block, and a `paragraph` block as a child of -the `block_quote`. Then the text is added to the last open -block, the `paragraph`: - -``` tree --> document - -> block_quote - -> paragraph - "Lorem ipsum dolor" -``` - -The next line, - -``` markdown -sit amet. -``` - -is a "lazy continuation" of the open `paragraph`, so it gets added -to the paragraph's text: - -``` tree --> document - -> block_quote - -> paragraph - "Lorem ipsum dolor\nsit amet." -``` - -The third line, - -``` markdown -> - Qui *quodsi iracundia* -``` - -causes the `paragraph` block to be closed, and a new `list` block -opened as a child of the `block_quote`. A `list_item` is also -added as a child of the `list`, and a `paragraph` as a child of -the `list_item`. The text is then added to the new `paragraph`: - -``` tree --> document - -> block_quote - paragraph - "Lorem ipsum dolor\nsit amet." - -> list (type=bullet tight=true bullet_char=-) - -> list_item - -> paragraph - "Qui *quodsi iracundia*" -``` - -The fourth line, - -``` markdown -> - aliquando id -``` - -causes the `list_item` (and its child the `paragraph`) to be closed, -and a new `list_item` opened up as child of the `list`. A `paragraph` -is added as a child of the new `list_item`, to contain the text. -We thus obtain the final tree: - -``` tree --> document - -> block_quote - paragraph - "Lorem ipsum dolor\nsit amet." - -> list (type=bullet tight=true bullet_char=-) - list_item - paragraph - "Qui *quodsi iracundia*" - -> list_item - -> paragraph - "aliquando id" -``` - -## From block structure to the final document {-} - -Once all of the input has been parsed, all open blocks are closed. - -We then "walk the tree," visiting every node, and parse raw -string contents of paragraphs and headers as inlines. At this -point we have seen all the link reference definitions, so we can -resolve reference links as we go. - -``` tree -document - block_quote - paragraph - str "Lorem ipsum dolor" - softbreak - str "sit amet." - list (type=bullet tight=true bullet_char=-) - list_item - paragraph - str "Qui " - emph - str "quodsi iracundia" - list_item - paragraph - str "aliquando id" -``` - -Notice how the [line ending] in the first paragraph has -been parsed as a `softbreak`, and the asterisks in the first list item -have become an `emph`. - -The document can be rendered as HTML, or in any other format, given -an appropriate renderer. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 11a27c64cf..0fba1b3cb2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,7 +27,7 @@ IF (PYTHONINTERP_FOUND) add_test(spectest_library ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" - "${CMAKE_SOURCE_DIR}/spec.txt" "--library-dir" "${CMAKE_BINARY_DIR}/src" + "${CMAKE_SOURCE_DIR}/test/spec.txt" "--library-dir" "${CMAKE_BINARY_DIR}/src" ) add_test(pathological_tests_library @@ -36,7 +36,7 @@ IF (PYTHONINTERP_FOUND) ) add_test(spectest_executable - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_SOURCE_DIR}/spec.txt" "--program" "${CMAKE_BINARY_DIR}/src/cmark" + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_SOURCE_DIR}/test/spec.txt" "--program" "${CMAKE_BINARY_DIR}/src/cmark" ) ELSE(PYTHONINTERP_FOUND) diff --git a/test/spec.txt b/test/spec.txt new file mode 100644 index 0000000000..e75481045f --- /dev/null +++ b/test/spec.txt @@ -0,0 +1,7321 @@ +--- +title: CommonMark Spec +author: John MacFarlane +version: 0.17 +date: 2015-01-24 +license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' +... + +# Introduction + +## What is Markdown? + +Markdown is a plain text format for writing structured documents, +based on conventions used for indicating formatting in email and +usenet posts. It was developed in 2004 by John Gruber, who wrote +the first Markdown-to-HTML converter in perl, and it soon became +widely used in websites. By 2014 there were dozens of +implementations in many languages. Some of them extended basic +Markdown syntax with conventions for footnotes, definition lists, +tables, and other constructs, and some allowed output not just in +HTML but in LaTeX and many other formats. + +## Why is a spec needed? + +John Gruber's [canonical description of Markdown's +syntax](http://daringfireball.net/projects/markdown/syntax) +does not specify the syntax unambiguously. Here are some examples of +questions it does not answer: + +1. How much indentation is needed for a sublist? The spec says that + continuation paragraphs need to be indented four spaces, but is + not fully explicit about sublists. It is natural to think that + they, too, must be indented four spaces, but `Markdown.pl` does + not require that. This is hardly a "corner case," and divergences + between implementations on this issue often lead to surprises for + users in real documents. (See [this comment by John + Gruber](http://article.gmane.org/gmane.text.markdown.general/1997).) + +2. Is a blank line needed before a block quote or header? + Most implementations do not require the blank line. However, + this can lead to unexpected results in hard-wrapped text, and + also to ambiguities in parsing (note that some implementations + put the header inside the blockquote, while others do not). + (John Gruber has also spoken [in favor of requiring the blank + lines](http://article.gmane.org/gmane.text.markdown.general/2146).) + +3. Is a blank line needed before an indented code block? + (`Markdown.pl` requires it, but this is not mentioned in the + documentation, and some implementations do not require it.) + + ``` markdown + paragraph + code? + ``` + +4. What is the exact rule for determining when list items get + wrapped in `

                            ` tags? Can a list be partially "loose" and partially + "tight"? What should we do with a list like this? + + ``` markdown + 1. one + + 2. two + 3. three + ``` + + Or this? + + ``` markdown + 1. one + - a + + - b + 2. two + ``` + + (There are some relevant comments by John Gruber + [here](http://article.gmane.org/gmane.text.markdown.general/2554).) + +5. Can list markers be indented? Can ordered list markers be right-aligned? + + ``` markdown + 8. item 1 + 9. item 2 + 10. item 2a + ``` + +6. Is this one list with a horizontal rule in its second item, + or two lists separated by a horizontal rule? + + ``` markdown + * a + * * * * * + * b + ``` + +7. When list markers change from numbers to bullets, do we have + two lists or one? (The Markdown syntax description suggests two, + but the perl scripts and many other implementations produce one.) + + ``` markdown + 1. fee + 2. fie + - foe + - fum + ``` + +8. What are the precedence rules for the markers of inline structure? + For example, is the following a valid link, or does the code span + take precedence ? + + ``` markdown + [a backtick (`)](/url) and [another backtick (`)](/url). + ``` + +9. What are the precedence rules for markers of emphasis and strong + emphasis? For example, how should the following be parsed? + + ``` markdown + *foo *bar* baz* + ``` + +10. What are the precedence rules between block-level and inline-level + structure? For example, how should the following be parsed? + + ``` markdown + - `a long code span can contain a hyphen like this + - and it can screw things up` + ``` + +11. Can list items include section headers? (`Markdown.pl` does not + allow this, but does allow blockquotes to include headers.) + + ``` markdown + - # Heading + ``` + +12. Can list items be empty? + + ``` markdown + * a + * + * b + ``` + +13. Can link references be defined inside block quotes or list items? + + ``` markdown + > Blockquote [foo]. + > + > [foo]: /url + ``` + +14. If there are multiple definitions for the same reference, which takes + precedence? + + ``` markdown + [foo]: /url1 + [foo]: /url2 + + [foo][] + ``` + +In the absence of a spec, early implementers consulted `Markdown.pl` +to resolve these ambiguities. But `Markdown.pl` was quite buggy, and +gave manifestly bad results in many cases, so it was not a +satisfactory replacement for a spec. + +Because there is no unambiguous spec, implementations have diverged +considerably. As a result, users are often surprised to find that +a document that renders one way on one system (say, a github wiki) +renders differently on another (say, converting to docbook using +pandoc). To make matters worse, because nothing in Markdown counts +as a "syntax error," the divergence often isn't discovered right away. + +## About this document + +This document attempts to specify Markdown syntax unambiguously. +It contains many examples with side-by-side Markdown and +HTML. These are intended to double as conformance tests. An +accompanying script `spec_tests.py` can be used to run the tests +against any Markdown program: + + python test/spec_tests.py --spec spec.txt --program PROGRAM + +Since this document describes how Markdown is to be parsed into +an abstract syntax tree, it would have made sense to use an abstract +representation of the syntax tree instead of HTML. But HTML is capable +of representing the structural distinctions we need to make, and the +choice of HTML for the tests makes it possible to run the tests against +an implementation without writing an abstract syntax tree renderer. + +This document is generated from a text file, `spec.txt`, written +in Markdown with a small extension for the side-by-side tests. +The script `spec2md.pl` can be used to turn `spec.txt` into pandoc +Markdown, which can then be converted into other formats. + +In the examples, the `→` character is used to represent tabs. + +# Preliminaries + +## Characters and lines + +Any sequence of [character]s is a valid CommonMark +document. + +A [character](@character) is a unicode code point. +This spec does not specify an encoding; it thinks of lines as composed +of characters rather than bytes. A conforming parser may be limited +to a certain encoding. + +A [line](@line) is a sequence of zero or more [character]s +followed by a [line ending] or by the end of file. + +A [line ending](@line-ending) is, depending on the platform, a +newline (`U+000A`), carriage return (`U+000D`), or +carriage return + newline. + +For security reasons, a conforming parser must strip or replace the +Unicode character `U+0000`. + +A line containing no characters, or a line containing only spaces +(`U+0020`) or tabs (`U+0009`), is called a [blank line](@blank-line). + +The following definitions of character classes will be used in this spec: + +A [whitespace character](@whitespace-character) is a space +(`U+0020`), tab (`U+0009`), carriage return (`U+000D`), or +newline (`U+000A`). + +[Whitespace](@whitespace) is a sequence of one or more [whitespace +character]s. + +A [unicode whitespace character](@unicode-whitespace-character) is +any code point in the unicode `Zs` class, or a tab (`U+0009`), +carriage return (`U+000D`), newline (`U+000A`), or form feed +(`U+000C`). + +[Unicode whitespace](@unicode-whitespace) is a sequence of one +or more [unicode whitespace character]s. + +A [non-space character](@non-space-character) is anything but `U+0020`. + +An [ASCII punctuation character](@ascii-punctuation-character) +is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, +`*`, `+`, `,`, `-`, `.`, `/`, `:`, `;`, `<`, `=`, `>`, `?`, `@`, +`[`, `\`, `]`, `^`, `_`, `` ` ``, `{`, `|`, `}`, or `~`. + +A [punctuation character](@punctuation-character) is an [ASCII +punctuation character] or anything in +the unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. + +## Tab expansion + +Tabs in lines are expanded to spaces, with a tab stop of 4 characters: + +. +→foo→baz→→bim +. +

                            foo baz     bim
                            +
                            +. + +. + a→a + ὐ→a +. +
                            a   a
                            +ὐ   a
                            +
                            +. + +# Blocks and inlines + +We can think of a document as a sequence of +[blocks](@block)---structural +elements like paragraphs, block quotations, +lists, headers, rules, and code blocks. Blocks can contain other +blocks, or they can contain [inline](@inline) content: +words, spaces, links, emphasized text, images, and inline code. + +## Precedence + +Indicators of block structure always take precedence over indicators +of inline structure. So, for example, the following is a list with +two items, not a list with one item containing a code span: + +. +- `one +- two` +. +
                              +
                            • `one
                            • +
                            • two`
                            • +
                            +. + +This means that parsing can proceed in two steps: first, the block +structure of the document can be discerned; second, text lines inside +paragraphs, headers, and other block constructs can be parsed for inline +structure. The second step requires information about link reference +definitions that will be available only at the end of the first +step. Note that the first step requires processing lines in sequence, +but the second can be parallelized, since the inline parsing of +one block element does not affect the inline parsing of any other. + +## Container blocks and leaf blocks + +We can divide blocks into two types: +[container block](@container-block)s, +which can contain other blocks, and [leaf block](@leaf-block)s, +which cannot. + +# Leaf blocks + +This section describes the different kinds of leaf block that make up a +Markdown document. + +## Horizontal rules + +A line consisting of 0-3 spaces of indentation, followed by a sequence +of three or more matching `-`, `_`, or `*` characters, each followed +optionally by any number of spaces, forms a +[horizontal rule](@horizontal-rule). + +. +*** +--- +___ +. +
                            +
                            +
                            +. + +Wrong characters: + +. ++++ +. +

                            +++

                            +. + +. +=== +. +

                            ===

                            +. + +Not enough characters: + +. +-- +** +__ +. +

                            -- +** +__

                            +. + +One to three spaces indent are allowed: + +. + *** + *** + *** +. +
                            +
                            +
                            +. + +Four spaces is too many: + +. + *** +. +
                            ***
                            +
                            +. + +. +Foo + *** +. +

                            Foo +***

                            +. + +More than three characters may be used: + +. +_____________________________________ +. +
                            +. + +Spaces are allowed between the characters: + +. + - - - +. +
                            +. + +. + ** * ** * ** * ** +. +
                            +. + +. +- - - - +. +
                            +. + +Spaces are allowed at the end: + +. +- - - - +. +
                            +. + +However, no other characters may occur in the line: + +. +_ _ _ _ a + +a------ + +---a--- +. +

                            _ _ _ _ a

                            +

                            a------

                            +

                            ---a---

                            +. + +It is required that all of the [non-space character]s be the same. +So, this is not a horizontal rule: + +. + *-* +. +

                            -

                            +. + +Horizontal rules do not need blank lines before or after: + +. +- foo +*** +- bar +. +
                              +
                            • foo
                            • +
                            +
                            +
                              +
                            • bar
                            • +
                            +. + +Horizontal rules can interrupt a paragraph: + +. +Foo +*** +bar +. +

                            Foo

                            +
                            +

                            bar

                            +. + +If a line of dashes that meets the above conditions for being a +horizontal rule could also be interpreted as the underline of a [setext +header], the interpretation as a +[setext header] takes precedence. Thus, for example, +this is a setext header, not a paragraph followed by a horizontal rule: + +. +Foo +--- +bar +. +

                            Foo

                            +

                            bar

                            +. + +When both a horizontal rule and a list item are possible +interpretations of a line, the horizontal rule takes precedence: + +. +* Foo +* * * +* Bar +. +
                              +
                            • Foo
                            • +
                            +
                            +
                              +
                            • Bar
                            • +
                            +. + +If you want a horizontal rule in a list item, use a different bullet: + +. +- Foo +- * * * +. +
                              +
                            • Foo
                            • +
                            • +
                              +
                            • +
                            +. + +## ATX headers + +An [ATX header](@atx-header) +consists of a string of characters, parsed as inline content, between an +opening sequence of 1--6 unescaped `#` characters and an optional +closing sequence of any number of `#` characters. The opening sequence +of `#` characters cannot be followed directly by a +[non-space character]. +The optional closing sequence of `#`s must be preceded by a space and may be +followed by spaces only. The opening `#` character may be indented 0-3 +spaces. The raw contents of the header are stripped of leading and +trailing spaces before being parsed as inline content. The header level +is equal to the number of `#` characters in the opening sequence. + +Simple headers: + +. +# foo +## foo +### foo +#### foo +##### foo +###### foo +. +

                            foo

                            +

                            foo

                            +

                            foo

                            +

                            foo

                            +
                            foo
                            +
                            foo
                            +. + +More than six `#` characters is not a header: + +. +####### foo +. +

                            ####### foo

                            +. + +A space is required between the `#` characters and the header's +contents. Note that many implementations currently do not require +the space. However, the space was required by the [original ATX +implementation](http://www.aaronsw.com/2002/atx/atx.py), and it helps +prevent things like the following from being parsed as headers: + +. +#5 bolt +. +

                            #5 bolt

                            +. + +This is not a header, because the first `#` is escaped: + +. +\## foo +. +

                            ## foo

                            +. + +Contents are parsed as inlines: + +. +# foo *bar* \*baz\* +. +

                            foo bar *baz*

                            +. + +Leading and trailing blanks are ignored in parsing inline content: + +. +# foo +. +

                            foo

                            +. + +One to three spaces indentation are allowed: + +. + ### foo + ## foo + # foo +. +

                            foo

                            +

                            foo

                            +

                            foo

                            +. + +Four spaces are too much: + +. + # foo +. +
                            # foo
                            +
                            +. + +. +foo + # bar +. +

                            foo +# bar

                            +. + +A closing sequence of `#` characters is optional: + +. +## foo ## + ### bar ### +. +

                            foo

                            +

                            bar

                            +. + +It need not be the same length as the opening sequence: + +. +# foo ################################## +##### foo ## +. +

                            foo

                            +
                            foo
                            +. + +Spaces are allowed after the closing sequence: + +. +### foo ### +. +

                            foo

                            +. + +A sequence of `#` characters with a +[non-space character] following it +is not a closing sequence, but counts as part of the contents of the +header: + +. +### foo ### b +. +

                            foo ### b

                            +. + +The closing sequence must be preceded by a space: + +. +# foo# +. +

                            foo#

                            +. + +Backslash-escaped `#` characters do not count as part +of the closing sequence: + +. +### foo \### +## foo #\## +# foo \# +. +

                            foo ###

                            +

                            foo ###

                            +

                            foo #

                            +. + +ATX headers need not be separated from surrounding content by blank +lines, and they can interrupt paragraphs: + +. +**** +## foo +**** +. +
                            +

                            foo

                            +
                            +. + +. +Foo bar +# baz +Bar foo +. +

                            Foo bar

                            +

                            baz

                            +

                            Bar foo

                            +. + +ATX headers can be empty: + +. +## +# +### ### +. +

                            +

                            +

                            +. + +## Setext headers + +A [setext header](@setext-header) +consists of a line of text, containing at least one +[non-space character], +with no more than 3 spaces indentation, followed by a [setext header +underline]. The line of text must be +one that, were it not followed by the setext header underline, +would be interpreted as part of a paragraph: it cannot be a code +block, header, blockquote, horizontal rule, or list. + +A [setext header underline](@setext-header-underline) is a sequence of +`=` characters or a sequence of `-` characters, with no more than 3 +spaces indentation and any number of trailing spaces. If a line +containing a single `-` can be interpreted as an +empty [list items], it should be interpreted this way +and not as a [setext header underline]. + +The header is a level 1 header if `=` characters are used in the +[setext header underline], and a level 2 +header if `-` characters are used. The contents of the header are the +result of parsing the first line as Markdown inline content. + +In general, a setext header need not be preceded or followed by a +blank line. However, it cannot interrupt a paragraph, so when a +setext header comes after a paragraph, a blank line is needed between +them. + +Simple examples: + +. +Foo *bar* +========= + +Foo *bar* +--------- +. +

                            Foo bar

                            +

                            Foo bar

                            +. + +The underlining can be any length: + +. +Foo +------------------------- + +Foo += +. +

                            Foo

                            +

                            Foo

                            +. + +The header content can be indented up to three spaces, and need +not line up with the underlining: + +. + Foo +--- + + Foo +----- + + Foo + === +. +

                            Foo

                            +

                            Foo

                            +

                            Foo

                            +. + +Four spaces indent is too much: + +. + Foo + --- + + Foo +--- +. +
                            Foo
                            +---
                            +
                            +Foo
                            +
                            +
                            +. + +The setext header underline can be indented up to three spaces, and +may have trailing spaces: + +. +Foo + ---- +. +

                            Foo

                            +. + +Four spaces is too much: + +. +Foo + --- +. +

                            Foo +---

                            +. + +The setext header underline cannot contain internal spaces: + +. +Foo += = + +Foo +--- - +. +

                            Foo += =

                            +

                            Foo

                            +
                            +. + +Trailing spaces in the content line do not cause a line break: + +. +Foo +----- +. +

                            Foo

                            +. + +Nor does a backslash at the end: + +. +Foo\ +---- +. +

                            Foo\

                            +. + +Since indicators of block structure take precedence over +indicators of inline structure, the following are setext headers: + +. +`Foo +---- +` + +
                            +. +

                            `Foo

                            +

                            `

                            +

                            <a title="a lot

                            +

                            of dashes"/>

                            +. + +The setext header underline cannot be a [lazy continuation +line] in a list item or block quote: + +. +> Foo +--- +. +
                            +

                            Foo

                            +
                            +
                            +. + +. +- Foo +--- +. +
                              +
                            • Foo
                            • +
                            +
                            +. + +A setext header cannot interrupt a paragraph: + +. +Foo +Bar +--- + +Foo +Bar +=== +. +

                            Foo +Bar

                            +
                            +

                            Foo +Bar +===

                            +. + +But in general a blank line is not required before or after: + +. +--- +Foo +--- +Bar +--- +Baz +. +
                            +

                            Foo

                            +

                            Bar

                            +

                            Baz

                            +. + +Setext headers cannot be empty: + +. + +==== +. +

                            ====

                            +. + +Setext header text lines must not be interpretable as block +constructs other than paragraphs. So, the line of dashes +in these examples gets interpreted as a horizontal rule: + +. +--- +--- +. +
                            +
                            +. + +. +- foo +----- +. +
                              +
                            • foo
                            • +
                            +
                            +. + +. + foo +--- +. +
                            foo
                            +
                            +
                            +. + +. +> foo +----- +. +
                            +

                            foo

                            +
                            +
                            +. + +If you want a header with `> foo` as its literal text, you can +use backslash escapes: + +. +\> foo +------ +. +

                            > foo

                            +. + +## Indented code blocks + +An [indented code block](@indented-code-block) is composed of one or more +[indented chunk]s separated by blank lines. +An [indented chunk](@indented-chunk) is a sequence of non-blank lines, +each indented four or more spaces. The contents of the code block are +the literal contents of the lines, including trailing +[line ending]s, minus four spaces of indentation. +An indented code block has no [info string]. + +An indented code block cannot interrupt a paragraph, so there must be +a blank line between a paragraph and a following indented code block. +(A blank line is not needed, however, between a code block and a following +paragraph.) + +. + a simple + indented code block +. +
                            a simple
                            +  indented code block
                            +
                            +. + +The contents are literal text, and do not get parsed as Markdown: + +. +
                            + *hi* + + - one +. +
                            <a/>
                            +*hi*
                            +
                            +- one
                            +
                            +. + +Here we have three chunks separated by blank lines: + +. + chunk1 + + chunk2 + + + + chunk3 +. +
                            chunk1
                            +
                            +chunk2
                            +
                            +
                            +
                            +chunk3
                            +
                            +. + +Any initial spaces beyond four will be included in the content, even +in interior blank lines: + +. + chunk1 + + chunk2 +. +
                            chunk1
                            +  
                            +  chunk2
                            +
                            +. + +An indented code block cannot interrupt a paragraph. (This +allows hanging indents and the like.) + +. +Foo + bar + +. +

                            Foo +bar

                            +. + +However, any non-blank line with fewer than four leading spaces ends +the code block immediately. So a paragraph may occur immediately +after indented code: + +. + foo +bar +. +
                            foo
                            +
                            +

                            bar

                            +. + +And indented code can occur immediately before and after other kinds of +blocks: + +. +# Header + foo +Header +------ + foo +---- +. +

                            Header

                            +
                            foo
                            +
                            +

                            Header

                            +
                            foo
                            +
                            +
                            +. + +The first line can be indented more than four spaces: + +. + foo + bar +. +
                                foo
                            +bar
                            +
                            +. + +Blank lines preceding or following an indented code block +are not included in it: + +. + + + foo + + +. +
                            foo
                            +
                            +. + +Trailing spaces are included in the code block's content: + +. + foo +. +
                            foo  
                            +
                            +. + + +## Fenced code blocks + +A [code fence](@code-fence) is a sequence +of at least three consecutive backtick characters (`` ` ``) or +tildes (`~`). (Tildes and backticks cannot be mixed.) +A [fenced code block](@fenced-code-block) +begins with a code fence, indented no more than three spaces. + +The line with the opening code fence may optionally contain some text +following the code fence; this is trimmed of leading and trailing +spaces and called the [info string](@info-string). +The [info string] may not contain any backtick +characters. (The reason for this restriction is that otherwise +some inline code would be incorrectly interpreted as the +beginning of a fenced code block.) + +The content of the code block consists of all subsequent lines, until +a closing [code fence] of the same type as the code block +began with (backticks or tildes), and with at least as many backticks +or tildes as the opening code fence. If the leading code fence is +indented N spaces, then up to N spaces of indentation are removed from +each line of the content (if present). (If a content line is not +indented, it is preserved unchanged. If it is indented less than N +spaces, all of the indentation is removed.) + +The closing code fence may be indented up to three spaces, and may be +followed only by spaces, which are ignored. If the end of the +containing block (or document) is reached and no closing code fence +has been found, the code block contains all of the lines after the +opening code fence until the end of the containing block (or +document). (An alternative spec would require backtracking in the +event that a closing code fence is not found. But this makes parsing +much less efficient, and there seems to be no real down side to the +behavior described here.) + +A fenced code block may interrupt a paragraph, and does not require +a blank line either before or after. + +The content of a code fence is treated as literal text, not parsed +as inlines. The first word of the [info string] is typically used to +specify the language of the code sample, and rendered in the `class` +attribute of the `code` tag. However, this spec does not mandate any +particular treatment of the [info string]. + +Here is a simple example with backticks: + +. +``` +< + > +``` +. +
                            <
                            + >
                            +
                            +. + +With tildes: + +. +~~~ +< + > +~~~ +. +
                            <
                            + >
                            +
                            +. + +The closing code fence must use the same character as the opening +fence: + +. +``` +aaa +~~~ +``` +. +
                            aaa
                            +~~~
                            +
                            +. + +. +~~~ +aaa +``` +~~~ +. +
                            aaa
                            +```
                            +
                            +. + +The closing code fence must be at least as long as the opening fence: + +. +```` +aaa +``` +`````` +. +
                            aaa
                            +```
                            +
                            +. + +. +~~~~ +aaa +~~~ +~~~~ +. +
                            aaa
                            +~~~
                            +
                            +. + +Unclosed code blocks are closed by the end of the document: + +. +``` +. +
                            +. + +. +````` + +``` +aaa +. +
                            
                            +```
                            +aaa
                            +
                            +. + +A code block can have all empty lines as its content: + +. +``` + + +``` +. +
                            
                            +  
                            +
                            +. + +A code block can be empty: + +. +``` +``` +. +
                            +. + +Fences can be indented. If the opening fence is indented, +content lines will have equivalent opening indentation removed, +if present: + +. + ``` + aaa +aaa +``` +. +
                            aaa
                            +aaa
                            +
                            +. + +. + ``` +aaa + aaa +aaa + ``` +. +
                            aaa
                            +aaa
                            +aaa
                            +
                            +. + +. + ``` + aaa + aaa + aaa + ``` +. +
                            aaa
                            + aaa
                            +aaa
                            +
                            +. + +Four spaces indentation produces an indented code block: + +. + ``` + aaa + ``` +. +
                            ```
                            +aaa
                            +```
                            +
                            +. + +Closing fences may be indented by 0-3 spaces, and their indentation +need not match that of the opening fence: + +. +``` +aaa + ``` +. +
                            aaa
                            +
                            +. + +. + ``` +aaa + ``` +. +
                            aaa
                            +
                            +. + +This is not a closing fence, because it is indented 4 spaces: + +. +``` +aaa + ``` +. +
                            aaa
                            +    ```
                            +
                            +. + + +Code fences (opening and closing) cannot contain internal spaces: + +. +``` ``` +aaa +. +

                            +aaa

                            +. + +. +~~~~~~ +aaa +~~~ ~~ +. +
                            aaa
                            +~~~ ~~
                            +
                            +. + +Fenced code blocks can interrupt paragraphs, and can be followed +directly by paragraphs, without a blank line between: + +. +foo +``` +bar +``` +baz +. +

                            foo

                            +
                            bar
                            +
                            +

                            baz

                            +. + +Other blocks can also occur before and after fenced code blocks +without an intervening blank line: + +. +foo +--- +~~~ +bar +~~~ +# baz +. +

                            foo

                            +
                            bar
                            +
                            +

                            baz

                            +. + +An [info string] can be provided after the opening code fence. +Opening and closing spaces will be stripped, and the first word, prefixed +with `language-`, is used as the value for the `class` attribute of the +`code` element within the enclosing `pre` element. + +. +```ruby +def foo(x) + return 3 +end +``` +. +
                            def foo(x)
                            +  return 3
                            +end
                            +
                            +. + +. +~~~~ ruby startline=3 $%@#$ +def foo(x) + return 3 +end +~~~~~~~ +. +
                            def foo(x)
                            +  return 3
                            +end
                            +
                            +. + +. +````; +```` +. +
                            +. + +[Info string]s for backtick code blocks cannot contain backticks: + +. +``` aa ``` +foo +. +

                            aa +foo

                            +. + +Closing code fences cannot have [info string]s: + +. +``` +``` aaa +``` +. +
                            ``` aaa
                            +
                            +. + + +## HTML blocks + +An [HTML block tag](@html-block-tag) is +an [open tag] or [closing tag] whose tag +name is one of the following (case-insensitive): +`article`, `header`, `aside`, `hgroup`, `blockquote`, `hr`, `iframe`, +`body`, `li`, `map`, `button`, `object`, `canvas`, `ol`, `caption`, +`output`, `col`, `p`, `colgroup`, `pre`, `dd`, `progress`, `div`, +`section`, `dl`, `table`, `td`, `dt`, `tbody`, `embed`, `textarea`, +`fieldset`, `tfoot`, `figcaption`, `th`, `figure`, `thead`, `footer`, +`tr`, `form`, `ul`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `video`, +`script`, `style`. + +An [HTML block](@html-block) begins with an +[HTML block tag], [HTML comment], [processing instruction], +[declaration], or [CDATA section]. +It ends when a [blank line] or the end of the +input is encountered. The initial line may be indented up to three +spaces, and subsequent lines may have any indentation. The contents +of the HTML block are interpreted as raw HTML, and will not be escaped +in HTML output. + +Some simple examples: + +. + + + + +
                            + hi +
                            + +okay. +. + + + + +
                            + hi +
                            +

                            okay.

                            +. + +. +
                            + *hello* + +. +
                            + *hello* + +. + +Here we have two HTML blocks with a Markdown paragraph between them: + +. +
                            + +*Markdown* + +
                            +. +
                            +

                            Markdown

                            +
                            +. + +In the following example, what looks like a Markdown code block +is actually part of the HTML block, which continues until a blank +line or the end of the document is reached: + +. +
                            +``` c +int x = 33; +``` +. +
                            +``` c +int x = 33; +``` +. + +A comment: + +. + +. + +. + +A processing instruction: + +. +'; +?> +. +'; +?> +. + +CDATA: + +. + +. + +. + +The opening tag can be indented 1-3 spaces, but not 4: + +. + + + +. + +
                            <!-- foo -->
                            +
                            +. + +An HTML block can interrupt a paragraph, and need not be preceded +by a blank line. + +. +Foo +
                            +bar +
                            +. +

                            Foo

                            +
                            +bar +
                            +. + +However, a following blank line is always needed, except at the end of +a document: + +. +
                            +bar +
                            +*foo* +. +
                            +bar +
                            +*foo* +. + +An incomplete HTML block tag may also start an HTML block: + +. +
                            The only restrictions are that block-level HTML elements — +> e.g. `
                            `, ``, `
                            `, `

                            `, etc. — must be separated from +> surrounding content by blank lines, and the start and end tags of the +> block should not be indented with tabs or spaces. + +In some ways Gruber's rule is more restrictive than the one given +here: + +- It requires that an HTML block be preceded by a blank line. +- It does not allow the start tag to be indented. +- It requires a matching end tag, which it also does not allow to + be indented. + +Indeed, most Markdown implementations, including some of Gruber's +own perl implementations, do not impose these restrictions. + +There is one respect, however, in which Gruber's rule is more liberal +than the one given here, since it allows blank lines to occur inside +an HTML block. There are two reasons for disallowing them here. +First, it removes the need to parse balanced tags, which is +expensive and can require backtracking from the end of the document +if no matching end tag is found. Second, it provides a very simple +and flexible way of including Markdown content inside HTML tags: +simply separate the Markdown from the HTML using blank lines: + +. +

                            + +*Emphasized* text. + +
                            +. +
                            +

                            Emphasized text.

                            +
                            +. + +Compare: + +. +
                            +*Emphasized* text. +
                            +. +
                            +*Emphasized* text. +
                            +. + +Some Markdown implementations have adopted a convention of +interpreting content inside tags as text if the open tag has +the attribute `markdown=1`. The rule given above seems a simpler and +more elegant way of achieving the same expressive power, which is also +much simpler to parse. + +The main potential drawback is that one can no longer paste HTML +blocks into Markdown documents with 100% reliability. However, +*in most cases* this will work fine, because the blank lines in +HTML are usually followed by HTML block tags. For example: + +. +
                            + + + + + + + +
                            +Hi +
                            +. + + + + +
                            +Hi +
                            +. + +Moreover, blank lines are usually not necessary and can be +deleted. The exception is inside `
                            ` tags; here, one can
                            +replace the blank lines with `
                            ` entities.
                            +
                            +So there is no important loss of expressive power with the new rule.
                            +
                            +## Link reference definitions
                            +
                            +A [link reference definition](@link-reference-definition)
                            +consists of a [link label], indented up to three spaces, followed
                            +by a colon (`:`), optional [whitespace] (including up to one
                            +[line ending]), a [link destination],
                            +optional [whitespace] (including up to one
                            +[line ending]), and an optional [link
                            +title], which if it is present must be separated
                            +from the [link destination] by [whitespace].
                            +No further [non-space character]s may occur on the line.
                            +
                            +A [link reference-definition]
                            +does not correspond to a structural element of a document.  Instead, it
                            +defines a label which can be used in [reference link]s
                            +and reference-style [images] elsewhere in the document.  [Link
                            +reference definitions] can come either before or after the links that use
                            +them.
                            +
                            +.
                            +[foo]: /url "title"
                            +
                            +[foo]
                            +.
                            +

                            foo

                            +. + +. + [foo]: + /url + 'the title' + +[foo] +. +

                            foo

                            +. + +. +[Foo*bar\]]:my_(url) 'title (with parens)' + +[Foo*bar\]] +. +

                            Foo*bar]

                            +. + +. +[Foo bar]: + +'title' + +[Foo bar] +. +

                            Foo bar

                            +. + +The title may be omitted: + +. +[foo]: +/url + +[foo] +. +

                            foo

                            +. + +The link destination may not be omitted: + +. +[foo]: + +[foo] +. +

                            [foo]:

                            +

                            [foo]

                            +. + +A link can come before its corresponding definition: + +. +[foo] + +[foo]: url +. +

                            foo

                            +. + +If there are several matching definitions, the first one takes +precedence: + +. +[foo] + +[foo]: first +[foo]: second +. +

                            foo

                            +. + +As noted in the section on [Links], matching of labels is +case-insensitive (see [matches]). + +. +[FOO]: /url + +[Foo] +. +

                            Foo

                            +. + +. +[ΑΓΩ]: /φου + +[αγω] +. +

                            αγω

                            +. + +Here is a link reference definition with no corresponding link. +It contributes nothing to the document. + +. +[foo]: /url +. +. + +This is not a link reference definition, because there are +[non-space character]s after the title: + +. +[foo]: /url "title" ok +. +

                            [foo]: /url "title" ok

                            +. + +This is not a link reference definition, because it is indented +four spaces: + +. + [foo]: /url "title" + +[foo] +. +
                            [foo]: /url "title"
                            +
                            +

                            [foo]

                            +. + +This is not a link reference definition, because it occurs inside +a code block: + +. +``` +[foo]: /url +``` + +[foo] +. +
                            [foo]: /url
                            +
                            +

                            [foo]

                            +. + +A [link reference definition] cannot interrupt a paragraph. + +. +Foo +[bar]: /baz + +[bar] +. +

                            Foo +[bar]: /baz

                            +

                            [bar]

                            +. + +However, it can directly follow other block elements, such as headers +and horizontal rules, and it need not be followed by a blank line. + +. +# [Foo] +[foo]: /url +> bar +. +

                            Foo

                            +
                            +

                            bar

                            +
                            +. + +Several [link reference definition]s +can occur one after another, without intervening blank lines. + +. +[foo]: /foo-url "foo" +[bar]: /bar-url + "bar" +[baz]: /baz-url + +[foo], +[bar], +[baz] +. +

                            foo, +bar, +baz

                            +. + +[Link reference definition]s can occur +inside block containers, like lists and block quotations. They +affect the entire document, not just the container in which they +are defined: + +. +[foo] + +> [foo]: /url +. +

                            foo

                            +
                            +
                            +. + + +## Paragraphs + +A sequence of non-blank lines that cannot be interpreted as other +kinds of blocks forms a [paragraph](@paragraph). +The contents of the paragraph are the result of parsing the +paragraph's raw content as inlines. The paragraph's raw content +is formed by concatenating the lines and removing initial and final +[whitespace]. + +A simple example with two paragraphs: + +. +aaa + +bbb +. +

                            aaa

                            +

                            bbb

                            +. + +Paragraphs can contain multiple lines, but no blank lines: + +. +aaa +bbb + +ccc +ddd +. +

                            aaa +bbb

                            +

                            ccc +ddd

                            +. + +Multiple blank lines between paragraph have no effect: + +. +aaa + + +bbb +. +

                            aaa

                            +

                            bbb

                            +. + +Leading spaces are skipped: + +. + aaa + bbb +. +

                            aaa +bbb

                            +. + +Lines after the first may be indented any amount, since indented +code blocks cannot interrupt paragraphs. + +. +aaa + bbb + ccc +. +

                            aaa +bbb +ccc

                            +. + +However, the first line may be indented at most three spaces, +or an indented code block will be triggered: + +. + aaa +bbb +. +

                            aaa +bbb

                            +. + +. + aaa +bbb +. +
                            aaa
                            +
                            +

                            bbb

                            +. + +Final spaces are stripped before inline parsing, so a paragraph +that ends with two or more spaces will not end with a [hard line +break]: + +. +aaa +bbb +. +

                            aaa
                            +bbb

                            +. + +## Blank lines + +[Blank line]s between block-level elements are ignored, +except for the role they play in determining whether a [list] +is [tight] or [loose]. + +Blank lines at the beginning and end of the document are also ignored. + +. + + +aaa + + +# aaa + + +. +

                            aaa

                            +

                            aaa

                            +. + + +# Container blocks + +A [container block] is a block that has other +blocks as its contents. There are two basic kinds of container blocks: +[block quotes] and [list items]. +[Lists] are meta-containers for [list items]. + +We define the syntax for container blocks recursively. The general +form of the definition is: + +> If X is a sequence of blocks, then the result of +> transforming X in such-and-such a way is a container of type Y +> with these blocks as its content. + +So, we explain what counts as a block quote or list item by explaining +how these can be *generated* from their contents. This should suffice +to define the syntax, although it does not give a recipe for *parsing* +these constructions. (A recipe is provided below in the section entitled +[A parsing strategy](#appendix-a-a-parsing-strategy).) + +## Block quotes + +A [block quote marker](@block-quote-marker) +consists of 0-3 spaces of initial indent, plus (a) the character `>` together +with a following space, or (b) a single character `>` not followed by a space. + +The following rules define [block quotes]: + +1. **Basic case.** If a string of lines *Ls* constitute a sequence + of blocks *Bs*, then the result of prepending a [block quote + marker] to the beginning of each line in *Ls* + is a [block quote](#block-quotes) containing *Bs*. + +2. **Laziness.** If a string of lines *Ls* constitute a [block + quote](#block-quotes) with contents *Bs*, then the result of deleting + the initial [block quote marker] from one or + more lines in which the next [non-space character] after the [block + quote marker] is [paragraph continuation + text] is a block quote with *Bs* as its content. + [Paragraph continuation text](@paragraph-continuation-text) is text + that will be parsed as part of the content of a paragraph, but does + not occur at the beginning of the paragraph. + +3. **Consecutiveness.** A document cannot contain two [block + quotes] in a row unless there is a [blank line] between them. + +Nothing else counts as a [block quote](#block-quotes). + +Here is a simple example: + +. +> # Foo +> bar +> baz +. +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            +. + +The spaces after the `>` characters can be omitted: + +. +># Foo +>bar +> baz +. +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            +. + +The `>` characters can be indented 1-3 spaces: + +. + > # Foo + > bar + > baz +. +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            +. + +Four spaces gives us a code block: + +. + > # Foo + > bar + > baz +. +
                            > # Foo
                            +> bar
                            +> baz
                            +
                            +. + +The Laziness clause allows us to omit the `>` before a +paragraph continuation line: + +. +> # Foo +> bar +baz +. +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            +. + +A block quote can contain some lazy and some non-lazy +continuation lines: + +. +> bar +baz +> foo +. +
                            +

                            bar +baz +foo

                            +
                            +. + +Laziness only applies to lines that are continuations of +paragraphs. Lines containing characters or indentation that indicate +block structure cannot be lazy. + +. +> foo +--- +. +
                            +

                            foo

                            +
                            +
                            +. + +. +> - foo +- bar +. +
                            +
                              +
                            • foo
                            • +
                            +
                            +
                              +
                            • bar
                            • +
                            +. + +. +> foo + bar +. +
                            +
                            foo
                            +
                            +
                            +
                            bar
                            +
                            +. + +. +> ``` +foo +``` +. +
                            +
                            +
                            +

                            foo

                            +
                            +. + +A block quote can be empty: + +. +> +. +
                            +
                            +. + +. +> +> +> +. +
                            +
                            +. + +A block quote can have initial or final blank lines: + +. +> +> foo +> +. +
                            +

                            foo

                            +
                            +. + +A blank line always separates block quotes: + +. +> foo + +> bar +. +
                            +

                            foo

                            +
                            +
                            +

                            bar

                            +
                            +. + +(Most current Markdown implementations, including John Gruber's +original `Markdown.pl`, will parse this example as a single block quote +with two paragraphs. But it seems better to allow the author to decide +whether two block quotes or one are wanted.) + +Consecutiveness means that if we put these block quotes together, +we get a single block quote: + +. +> foo +> bar +. +
                            +

                            foo +bar

                            +
                            +. + +To get a block quote with two paragraphs, use: + +. +> foo +> +> bar +. +
                            +

                            foo

                            +

                            bar

                            +
                            +. + +Block quotes can interrupt paragraphs: + +. +foo +> bar +. +

                            foo

                            +
                            +

                            bar

                            +
                            +. + +In general, blank lines are not needed before or after block +quotes: + +. +> aaa +*** +> bbb +. +
                            +

                            aaa

                            +
                            +
                            +
                            +

                            bbb

                            +
                            +. + +However, because of laziness, a blank line is needed between +a block quote and a following paragraph: + +. +> bar +baz +. +
                            +

                            bar +baz

                            +
                            +. + +. +> bar + +baz +. +
                            +

                            bar

                            +
                            +

                            baz

                            +. + +. +> bar +> +baz +. +
                            +

                            bar

                            +
                            +

                            baz

                            +. + +It is a consequence of the Laziness rule that any number +of initial `>`s may be omitted on a continuation line of a +nested block quote: + +. +> > > foo +bar +. +
                            +
                            +
                            +

                            foo +bar

                            +
                            +
                            +
                            +. + +. +>>> foo +> bar +>>baz +. +
                            +
                            +
                            +

                            foo +bar +baz

                            +
                            +
                            +
                            +. + +When including an indented code block in a block quote, +remember that the [block quote marker] includes +both the `>` and a following space. So *five spaces* are needed after +the `>`: + +. +> code + +> not code +. +
                            +
                            code
                            +
                            +
                            +
                            +

                            not code

                            +
                            +. + + +## List items + +A [list marker](@list-marker) is a +[bullet list marker] or an [ordered list marker]. + +A [bullet list marker](@bullet-list-marker) +is a `-`, `+`, or `*` character. + +An [ordered list marker](@ordered-list-marker) +is a sequence of one of more digits (`0-9`), followed by either a +`.` character or a `)` character. + +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-space character] and not separated + from each other by more than one blank line, and *M* is a list + marker *M* of width *W* followed by 0 < *N* < 5 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 + (bullet or ordered) is determined by the type of its list marker. + If the list item is ordered, then it is also assigned a start + number, based on the ordered list marker. + +For example, let *Ls* be the lines + +. +A paragraph +with two lines. + + indented code + +> A block quote. +. +

                            A paragraph +with two lines.

                            +
                            indented code
                            +
                            +
                            +

                            A block quote.

                            +
                            +. + +And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says +that the following is an ordered list item with start number 1, +and the same contents as *Ls*: + +. +1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                              +
                            1. +

                              A paragraph +with two lines.

                              +
                              indented code
                              +
                              +
                              +

                              A block quote.

                              +
                              +
                            2. +
                            +. + +The most important thing to notice is that the position of +the text after the list marker determines how much indentation +is needed in subsequent blocks in the list item. If the list +marker takes up two spaces, and there are three spaces between +the list marker and the next [non-space character], then blocks +must be indented five spaces in order to fall under the list +item. + +Here are some examples showing how far content must be indented to be +put under the list item: + +. +- one + + two +. +
                              +
                            • one
                            • +
                            +

                            two

                            +. + +. +- one + + two +. +
                              +
                            • +

                              one

                              +

                              two

                              +
                            • +
                            +. + +. + - one + + two +. +
                              +
                            • one
                            • +
                            +
                             two
                            +
                            +. + +. + - one + + two +. +
                              +
                            • +

                              one

                              +

                              two

                              +
                            • +
                            +. + +It is tempting to think of this in terms of columns: the continuation +blocks must be indented at least to the column of the first +[non-space character] after the list marker. However, that is not quite right. +The spaces after the list marker determine how much relative indentation +is needed. Which column this indentation reaches will depend on +how the list item is embedded in other constructions, as shown by +this example: + +. + > > 1. one +>> +>> two +. +
                            +
                            +
                              +
                            1. +

                              one

                              +

                              two

                              +
                            2. +
                            +
                            +
                            +. + +Here `two` occurs in the same column as the list marker `1.`, +but is actually contained in the list item, because there is +sufficent indentation after the last containing blockquote marker. + +The converse is also possible. In the following example, the word `two` +occurs far to the right of the initial text of the list item, `one`, but +it is not considered part of the list item, because it is not indented +far enough past the blockquote marker: + +. +>>- one +>> + > > two +. +
                            +
                            +
                              +
                            • one
                            • +
                            +

                            two

                            +
                            +
                            +. + +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]. + +. +- foo + + bar + +- foo + + + bar + +- ``` + foo + + + bar + ``` + +- baz + + + ``` + foo + + + bar + ``` +. +
                              +
                            • +

                              foo

                              +

                              bar

                              +
                            • +
                            • +

                              foo

                              +
                            • +
                            +

                            bar

                            +
                              +
                            • +
                              foo
                              +
                              +
                              +bar
                              +
                              +
                            • +
                            • +

                              baz

                              +
                                +
                              • +
                                foo
                                +
                                +
                                +bar
                                +
                                +
                              • +
                              +
                            • +
                            +. + +A list item may contain any kind of block: + +. +1. foo + + ``` + bar + ``` + + baz + + > bam +. +
                              +
                            1. +

                              foo

                              +
                              bar
                              +
                              +

                              baz

                              +
                              +

                              bam

                              +
                              +
                            2. +
                            +. + +2. **Item starting with indented code.** If a sequence of lines *Ls* + constitute a sequence of blocks *Bs* starting with an indented code + block and not separated from each other by more than one blank line, + and *M* is a list marker *M* of width *W* followed by + one space, then the result of prepending *M* and the following + space to the first line of *Ls*, and indenting subsequent lines of + *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. + If a line is empty, then it need not be indented. The type of the + list item (bullet or ordered) is determined by the type of its list + marker. If the list item is ordered, then it is also assigned a + start number, based on the ordered list marker. + +An indented code block will have to be indented four spaces beyond +the edge of the region where text will be included in the list item. +In the following case that is 6 spaces: + +. +- foo + + bar +. +
                              +
                            • +

                              foo

                              +
                              bar
                              +
                              +
                            • +
                            +. + +And in this case it is 11 spaces: + +. + 10. foo + + bar +. +
                              +
                            1. +

                              foo

                              +
                              bar
                              +
                              +
                            2. +
                            +. + +If the *first* block in the list item is an indented code block, +then by rule #2, the contents must be indented *one* space after the +list marker: + +. + indented code + +paragraph + + more code +. +
                            indented code
                            +
                            +

                            paragraph

                            +
                            more code
                            +
                            +. + +. +1. indented code + + paragraph + + more code +. +
                              +
                            1. +
                              indented code
                              +
                              +

                              paragraph

                              +
                              more code
                              +
                              +
                            2. +
                            +. + +Note that an additional space indent is interpreted as space +inside the code block: + +. +1. indented code + + paragraph + + more code +. +
                              +
                            1. +
                               indented code
                              +
                              +

                              paragraph

                              +
                              more code
                              +
                              +
                            2. +
                            +. + +Note that rules #1 and #2 only apply to two cases: (a) cases +in which the lines to be included in a list item begin with a +[non-space character], and (b) cases in which +they begin with an indented code +block. In a case like the following, where the first block begins with +a three-space indent, the rules do not allow us to form a list item by +indenting the whole thing and prepending a list marker: + +. + foo + +bar +. +

                            foo

                            +

                            bar

                            +. + +. +- foo + + bar +. +
                              +
                            • foo
                            • +
                            +

                            bar

                            +. + +This is not a significant restriction, because when a block begins +with 1-3 spaces indent, the indentation can always be removed without +a change in interpretation, allowing rule #1 to be applied. So, in +the above case: + +. +- foo + + bar +. +
                              +
                            • +

                              foo

                              +

                              bar

                              +
                            • +
                            +. + +3. **Empty list item.** A [list marker] followed by a +line containing only [whitespace] is a list item with no contents. + +Here is an empty bullet list item: + +. +- foo +- +- bar +. +
                              +
                            • foo
                            • +
                            • +
                            • bar
                            • +
                            +. + +It does not matter whether there are spaces following the [list marker]: + +. +- foo +- +- bar +. +
                              +
                            • foo
                            • +
                            • +
                            • bar
                            • +
                            +. + +Here is an empty ordered list item: + +. +1. foo +2. +3. bar +. +
                              +
                            1. foo
                            2. +
                            3. +
                            4. bar
                            5. +
                            +. + +A list may start or end with an empty list item: + +. +* +. +
                              +
                            • +
                            +. + +4. **Indentation.** If a sequence of lines *Ls* constitutes a list item + according to rule #1, #2, or #3, then the result of indenting each line + of *L* by 1-3 spaces (the same for each line) also constitutes a + list item with the same contents and attributes. If a line is + empty, then it need not be indented. + +Indented one space: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                              +
                            1. +

                              A paragraph +with two lines.

                              +
                              indented code
                              +
                              +
                              +

                              A block quote.

                              +
                              +
                            2. +
                            +. + +Indented two spaces: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                              +
                            1. +

                              A paragraph +with two lines.

                              +
                              indented code
                              +
                              +
                              +

                              A block quote.

                              +
                              +
                            2. +
                            +. + +Indented three spaces: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                              +
                            1. +

                              A paragraph +with two lines.

                              +
                              indented code
                              +
                              +
                              +

                              A block quote.

                              +
                              +
                            2. +
                            +. + +Four spaces indent gives a code block: + +. + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                            1.  A paragraph
                            +    with two lines.
                            +
                            +        indented code
                            +
                            +    > A block quote.
                            +
                            +. + + +5. **Laziness.** If a string of lines *Ls* constitute a [list + item](#list-items) with contents *Bs*, then the result of deleting + some or all of the indentation from one or more lines in which the + next [non-space character] after the indentation is + [paragraph continuation text] is a + list item with the same contents and attributes. The unindented + lines are called + [lazy continuation line](@lazy-continuation-line)s. + +Here is an example with [lazy continuation line]s: + +. + 1. A paragraph +with two lines. + + indented code + + > A block quote. +. +
                              +
                            1. +

                              A paragraph +with two lines.

                              +
                              indented code
                              +
                              +
                              +

                              A block quote.

                              +
                              +
                            2. +
                            +. + +Indentation can be partially deleted: + +. + 1. A paragraph + with two lines. +. +
                              +
                            1. A paragraph +with two lines.
                            2. +
                            +. + +These examples show how laziness can work in nested structures: + +. +> 1. > Blockquote +continued here. +. +
                            +
                              +
                            1. +
                              +

                              Blockquote +continued here.

                              +
                              +
                            2. +
                            +
                            +. + +. +> 1. > Blockquote +> continued here. +. +
                            +
                              +
                            1. +
                              +

                              Blockquote +continued here.

                              +
                              +
                            2. +
                            +
                            +. + + +6. **That's all.** Nothing that is not counted as a list item by rules + #1--5 counts as a [list item](#list-items). + +The rules for sublists follow from the general rules above. A sublist +must be indented the same number of spaces a paragraph would need to be +in order to be included in the list item. + +So, in this case we need two spaces indent: + +. +- foo + - bar + - baz +. +
                              +
                            • foo +
                                +
                              • bar +
                                  +
                                • baz
                                • +
                                +
                              • +
                              +
                            • +
                            +. + +One is not enough: + +. +- foo + - bar + - baz +. +
                              +
                            • foo
                            • +
                            • bar
                            • +
                            • baz
                            • +
                            +. + +Here we need four, because the list marker is wider: + +. +10) foo + - bar +. +
                              +
                            1. foo +
                                +
                              • bar
                              • +
                              +
                            2. +
                            +. + +Three is not enough: + +. +10) foo + - bar +. +
                              +
                            1. foo
                            2. +
                            +
                              +
                            • bar
                            • +
                            +. + +A list may be the first block in a list item: + +. +- - foo +. +
                              +
                            • +
                                +
                              • foo
                              • +
                              +
                            • +
                            +. + +. +1. - 2. foo +. +
                              +
                            1. +
                                +
                              • +
                                  +
                                1. foo
                                2. +
                                +
                              • +
                              +
                            2. +
                            +. + +A list item can contain a header: + +. +- # Foo +- Bar + --- + baz +. +
                              +
                            • +

                              Foo

                              +
                            • +
                            • +

                              Bar

                              +baz
                            • +
                            +. + +### Motivation + +John Gruber's Markdown spec says the following about list items: + +1. "List markers typically start at the left margin, but may be indented + by up to three spaces. List markers must be followed by one or more + spaces or a tab." + +2. "To make lists look nice, you can wrap items with hanging indents.... + But if you don't want to, you don't have to." + +3. "List items may consist of multiple paragraphs. Each subsequent + paragraph in a list item must be indented by either 4 spaces or one + tab." + +4. "It looks nice if you indent every line of the subsequent paragraphs, + but here again, Markdown will allow you to be lazy." + +5. "To put a blockquote within a list item, the blockquote's `>` + delimiters need to be indented." + +6. "To put a code block within a list item, the code block needs to be + indented twice — 8 spaces or two tabs." + +These rules specify that a paragraph under a list item must be indented +four spaces (presumably, from the left margin, rather than the start of +the list marker, but this is not said), and that code under a list item +must be indented eight spaces instead of the usual four. They also say +that a block quote must be indented, but not by how much; however, the +example given has four spaces indentation. Although nothing is said +about other kinds of block-level content, it is certainly reasonable to +infer that *all* block elements under a list item, including other +lists, must be indented four spaces. This principle has been called the +*four-space rule*. + +The four-space rule is clear and principled, and if the reference +implementation `Markdown.pl` had followed it, it probably would have +become the standard. However, `Markdown.pl` allowed paragraphs and +sublists to start with only two spaces indentation, at least on the +outer level. Worse, its behavior was inconsistent: a sublist of an +outer-level list needed two spaces indentation, but a sublist of this +sublist needed three spaces. It is not surprising, then, that different +implementations of Markdown have developed very different rules for +determining what comes under a list item. (Pandoc and python-Markdown, +for example, stuck with Gruber's syntax description and the four-space +rule, while discount, redcarpet, marked, PHP Markdown, and others +followed `Markdown.pl`'s behavior more closely.) + +Unfortunately, given the divergences between implementations, there +is no way to give a spec for list items that will be guaranteed not +to break any existing documents. However, the spec given here should +correctly handle lists formatted with either the four-space rule or +the more forgiving `Markdown.pl` behavior, provided they are laid out +in a way that is natural for a human to read. + +The strategy here is to let the width and indentation of the list marker +determine the indentation necessary for blocks to fall under the list +item, rather than having a fixed and arbitrary number. The writer can +think of the body of the list item as a unit which gets indented to the +right enough to fit the list marker (and any indentation on the list +marker). (The laziness rule, #5, then allows continuation lines to be +unindented if needed.) + +This rule is superior, we claim, to any rule requiring a fixed level of +indentation from the margin. The four-space rule is clear but +unnatural. It is quite unintuitive that + +``` markdown +- foo + + bar + + - baz +``` + +should be parsed as two lists with an intervening paragraph, + +``` html +
                              +
                            • foo
                            • +
                            +

                            bar

                            +
                              +
                            • baz
                            • +
                            +``` + +as the four-space rule demands, rather than a single list, + +``` html +
                              +
                            • +

                              foo

                              +

                              bar

                              +
                                +
                              • baz
                              • +
                              +
                            • +
                            +``` + +The choice of four spaces is arbitrary. It can be learned, but it is +not likely to be guessed, and it trips up beginners regularly. + +Would it help to adopt a two-space rule? The problem is that such +a rule, together with the rule allowing 1--3 spaces indentation of the +initial list marker, allows text that is indented *less than* the +original list marker to be included in the list item. For example, +`Markdown.pl` parses + +``` markdown + - one + + two +``` + +as a single list item, with `two` a continuation paragraph: + +``` html +
                              +
                            • +

                              one

                              +

                              two

                              +
                            • +
                            +``` + +and similarly + +``` markdown +> - one +> +> two +``` + +as + +``` html +
                            +
                              +
                            • +

                              one

                              +

                              two

                              +
                            • +
                            +
                            +``` + +This is extremely unintuitive. + +Rather than requiring a fixed indent from the margin, we could require +a fixed indent (say, two spaces, or even one space) from the list marker (which +may itself be indented). This proposal would remove the last anomaly +discussed. Unlike the spec presented above, it would count the following +as a list item with a subparagraph, even though the paragraph `bar` +is not indented as far as the first paragraph `foo`: + +``` markdown + 10. foo + + bar +``` + +Arguably this text does read like a list item with `bar` as a subparagraph, +which may count in favor of the proposal. However, on this proposal indented +code would have to be indented six spaces after the list marker. And this +would break a lot of existing Markdown, which has the pattern: + +``` markdown +1. foo + + indented code +``` + +where the code is indented eight spaces. The spec above, by contrast, will +parse this text as expected, since the code block's indentation is measured +from the beginning of `foo`. + +The one case that needs special treatment is a list item that *starts* +with indented code. How much indentation is required in that case, since +we don't have a "first paragraph" to measure from? Rule #2 simply stipulates +that in such cases, we require one space indentation from the list marker +(and then the normal four spaces for the indented code). This will match the +four-space rule in cases where the list marker plus its initial indentation +takes four spaces (a common case), but diverge in other cases. + +## Lists + +A [list](@list) is a sequence of one or more +list items [of the same type]. The list items +may be separated by single [blank lines], but two +blank lines end all containing lists. + +Two list items are [of the same type](@of-the-same-type) +if they begin with a [list marker] of the same type. +Two list markers are of the +same type if (a) they are bullet list markers using the same character +(`-`, `+`, or `*`) or (b) they are ordered list numbers with the same +delimiter (either `.` or `)`). + +A list is an [ordered list](@ordered-list) +if its constituent list items begin with +[ordered list marker]s, and a +[bullet list](@bullet-list) if its constituent list +items begin with [bullet list marker]s. + +The [start number](@start-number) +of an [ordered list] is determined by the list number of +its initial list item. The numbers of subsequent list items are +disregarded. + +A list is [loose](@loose) if it any of its constituent +list items are separated by blank lines, or if any of its constituent +list items directly contain two block-level elements with a blank line +between them. Otherwise a list is [tight](@tight). +(The difference in HTML output is that paragraphs in a loose list are +wrapped in `

                            ` tags, while paragraphs in a tight list are not.) + +Changing the bullet or ordered list delimiter starts a new list: + +. +- foo +- bar ++ baz +. +

                              +
                            • foo
                            • +
                            • bar
                            • +
                            +
                              +
                            • baz
                            • +
                            +. + +. +1. foo +2. bar +3) baz +. +
                              +
                            1. foo
                            2. +
                            3. bar
                            4. +
                            +
                              +
                            1. baz
                            2. +
                            +. + +In CommonMark, a list can interrupt a paragraph. That is, +no blank line is needed to separate a paragraph from a following +list: + +. +Foo +- bar +- baz +. +

                            Foo

                            +
                              +
                            • bar
                            • +
                            • baz
                            • +
                            +. + +`Markdown.pl` does not allow this, through fear of triggering a list +via a numeral in a hard-wrapped line: + +. +The number of windows in my house is +14. The number of doors is 6. +. +

                            The number of windows in my house is

                            +
                              +
                            1. The number of doors is 6.
                            2. +
                            +. + +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: + + I need to buy + - new shoes + - a coat + - a plane ticket + +Second, we are attracted to a + +> [principle of uniformity](@principle-of-uniformity): +> if a chunk of text has a certain +> meaning, it will continue to have the same meaning when put into a +> container block (such as a list item or blockquote). + +(Indeed, the spec for [list items] and [block quotes] presupposes +this principle.) This principle implies that if + + * I need to buy + - new shoes + - a coat + - a plane ticket + +is a list item containing a paragraph followed by a nested sublist, +as all Markdown implementations agree it is (though the paragraph +may be rendered without `

                            ` tags, since the list is "tight"), +then + + I need to buy + - new shoes + - a coat + - a plane ticket + +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: + +1. Require blank lines before *all* lists and blockquotes, + including lists that occur as sublists inside other list items. + +2. Require blank lines in none of these places. + +[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. + +There can be blank lines between items, but two blank lines end +a list: + +. +- foo + +- bar + + +- baz +. +

                              +
                            • +

                              foo

                              +
                            • +
                            • +

                              bar

                              +
                            • +
                            +
                              +
                            • baz
                            • +
                            +. + +As illustrated above in the section on [list items], +two blank lines between blocks *within* a list item will also end a +list: + +. +- foo + + + bar +- baz +. +
                              +
                            • foo
                            • +
                            +

                            bar

                            +
                              +
                            • baz
                            • +
                            +. + +Indeed, two blank lines will end *all* containing lists: + +. +- foo + - bar + - baz + + + bim +. +
                              +
                            • foo +
                                +
                              • bar +
                                  +
                                • baz
                                • +
                                +
                              • +
                              +
                            • +
                            +
                              bim
                            +
                            +. + +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: + +. +- foo +- bar + + +- baz +- bim +. +
                              +
                            • foo
                            • +
                            • bar
                            • +
                            +
                              +
                            • baz
                            • +
                            • bim
                            • +
                            +. + +. +- foo + + notcode + +- foo + + + code +. +
                              +
                            • +

                              foo

                              +

                              notcode

                              +
                            • +
                            • +

                              foo

                              +
                            • +
                            +
                            code
                            +
                            +. + +List items need not be indented to the same level. The following +list items will be treated as items at the same list level, +since none is indented enough to belong to the previous list +item: + +. +- a + - b + - c + - d + - e + - f +- g +. +
                              +
                            • a
                            • +
                            • b
                            • +
                            • c
                            • +
                            • d
                            • +
                            • e
                            • +
                            • f
                            • +
                            • g
                            • +
                            +. + +This is a loose list, because there is a blank line between +two of the list items: + +. +- a +- b + +- c +. +
                              +
                            • +

                              a

                              +
                            • +
                            • +

                              b

                              +
                            • +
                            • +

                              c

                              +
                            • +
                            +. + +So is this, with a empty second item: + +. +* a +* + +* c +. +
                              +
                            • +

                              a

                              +
                            • +
                            • +
                            • +

                              c

                              +
                            • +
                            +. + +These are loose lists, even though there is no space between the items, +because one of the items directly contains two block-level elements +with a blank line between them: + +. +- a +- b + + c +- d +. +
                              +
                            • +

                              a

                              +
                            • +
                            • +

                              b

                              +

                              c

                              +
                            • +
                            • +

                              d

                              +
                            • +
                            +. + +. +- a +- b + + [ref]: /url +- d +. +
                              +
                            • +

                              a

                              +
                            • +
                            • +

                              b

                              +
                            • +
                            • +

                              d

                              +
                            • +
                            +. + +This is a tight list, because the blank lines are in a code block: + +. +- a +- ``` + b + + + ``` +- c +. +
                              +
                            • a
                            • +
                            • +
                              b
                              +
                              +
                              +
                              +
                            • +
                            • c
                            • +
                            +. + +This is a tight list, because the blank line is between two +paragraphs of a sublist. So the sublist is loose while +the outer list is tight: + +. +- a + - b + + c +- d +. +
                              +
                            • a +
                                +
                              • +

                                b

                                +

                                c

                                +
                              • +
                              +
                            • +
                            • d
                            • +
                            +. + +This is a tight list, because the blank line is inside the +block quote: + +. +* a + > b + > +* c +. +
                              +
                            • a +
                              +

                              b

                              +
                              +
                            • +
                            • c
                            • +
                            +. + +This list is tight, because the consecutive block elements +are not separated by blank lines: + +. +- a + > b + ``` + c + ``` +- d +. +
                              +
                            • a +
                              +

                              b

                              +
                              +
                              c
                              +
                              +
                            • +
                            • d
                            • +
                            +. + +A single-paragraph list is tight: + +. +- a +. +
                              +
                            • a
                            • +
                            +. + +. +- a + - b +. +
                              +
                            • a +
                                +
                              • b
                              • +
                              +
                            • +
                            +. + +This list is loose, because of the blank line between the +two block elements in the list item: + +. +1. ``` + foo + ``` + + bar +. +
                              +
                            1. +
                              foo
                              +
                              +

                              bar

                              +
                            2. +
                            +. + +Here the outer list is loose, the inner list tight: + +. +* foo + * bar + + baz +. +
                              +
                            • +

                              foo

                              +
                                +
                              • bar
                              • +
                              +

                              baz

                              +
                            • +
                            +. + +. +- a + - b + - c + +- d + - e + - f +. +
                              +
                            • +

                              a

                              +
                                +
                              • b
                              • +
                              • c
                              • +
                              +
                            • +
                            • +

                              d

                              +
                                +
                              • e
                              • +
                              • f
                              • +
                              +
                            • +
                            +. + +# Inlines + +Inlines are parsed sequentially from the beginning of the character +stream to the end (left to right, in left-to-right languages). +Thus, for example, in + +. +`hi`lo` +. +

                            hilo`

                            +. + +`hi` is parsed as code, leaving the backtick at the end as a literal +backtick. + +## Backslash escapes + +Any ASCII punctuation character may be backslash-escaped: + +. +\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~ +. +

                            !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

                            +. + +Backslashes before other characters are treated as literal +backslashes: + +. +\→\A\a\ \3\φ\« +. +

                            \ \A\a\ \3\φ\«

                            +. + +Escaped characters are treated as regular characters and do +not have their usual Markdown meanings: + +. +\*not emphasized* +\
                            not a tag +\[not a link](/foo) +\`not code` +1\. not a list +\* not a list +\# not a header +\[foo]: /url "not a reference" +. +

                            *not emphasized* +<br/> not a tag +[not a link](/foo) +`not code` +1. not a list +* not a list +# not a header +[foo]: /url "not a reference"

                            +. + +If a backslash is itself escaped, the following character is not: + +. +\\*emphasis* +. +

                            \emphasis

                            +. + +A backslash at the end of the line is a [hard line break]: + +. +foo\ +bar +. +

                            foo
                            +bar

                            +. + +Backslash escapes do not work in code blocks, code spans, autolinks, or +raw HTML: + +. +`` \[\` `` +. +

                            \[\`

                            +. + +. + \[\] +. +
                            \[\]
                            +
                            +. + +. +~~~ +\[\] +~~~ +. +
                            \[\]
                            +
                            +. + +. + +. +

                            http://example.com?find=\*

                            +. + +. + +. +

                            +. + +But they work in all other contexts, including URLs and link titles, +link references, and [info string]s in [fenced code block]s: + +. +[foo](/bar\* "ti\*tle") +. +

                            foo

                            +. + +. +[foo] + +[foo]: /bar\* "ti\*tle" +. +

                            foo

                            +. + +. +``` foo\+bar +foo +``` +. +
                            foo
                            +
                            +. + + +## Entities + +With the goal of making this standard as HTML-agnostic as possible, all +valid HTML entities (except in code blocks and code spans) +are recognized as such and converted into unicode characters before +they are stored in the AST. This means that renderers to formats other +than HTML need not be HTML-entity aware. HTML renderers may either escape +unicode characters as entities or leave them as they are. (However, +`"`, `&`, `<`, and `>` must always be rendered as entities.) + +[Named entities](@name-entities) consist of `&` ++ any of the valid HTML5 entity names + `;`. The +[following document](https://html.spec.whatwg.org/multipage/entities.json) +is used as an authoritative source of the valid entity names and their +corresponding codepoints. + +. +  & © Æ Ď ¾ ℋ ⅆ ∲ +. +

                              & © Æ Ď ¾ ℋ ⅆ ∲

                            +. + +[Decimal entities](@decimal-entities) +consist of `&#` + a string of 1--8 arabic digits + `;`. Again, these +entities need to be recognised and tranformed into their corresponding +UTF8 codepoints. Invalid Unicode codepoints will be written as the +"unknown codepoint" character (`0xFFFD`) + +. +# Ӓ Ϡ � +. +

                            # Ӓ Ϡ �

                            +. + +[Hexadecimal entities](@hexadecimal-entities) +consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits ++ `;`. They will also be parsed and turned into their corresponding UTF8 values in the AST. + +. +" ആ ಫ +. +

                            " ആ ಫ

                            +. + +Here are some nonentities: + +. +  &x; &#; &#x; &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?; +. +

                            &nbsp &x; &#; &#x; &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?;

                            +. + +Although HTML5 does accept some entities without a trailing semicolon +(such as `©`), these are not recognized as entities here, because it +makes the grammar too ambiguous: + +. +© +. +

                            &copy

                            +. + +Strings that are not on the list of HTML5 named entities are not +recognized as entities either: + +. +&MadeUpEntity; +. +

                            &MadeUpEntity;

                            +. + +Entities are recognized in any context besides code spans or +code blocks, including raw HTML, URLs, [link title]s, and +[fenced code block] [info string]s: + +. + +. +

                            +. + +. +[foo](/föö "föö") +. +

                            foo

                            +. + +. +[foo] + +[foo]: /föö "föö" +. +

                            foo

                            +. + +. +``` föö +foo +``` +. +
                            foo
                            +
                            +. + +Entities are treated as literal text in code spans and code blocks: + +. +`föö` +. +

                            f&ouml;&ouml;

                            +. + +. + föfö +. +
                            f&ouml;f&ouml;
                            +
                            +. + +## Code spans + +A [backtick string](@backtick-string) +is a string of one or more backtick characters (`` ` ``) that is neither +preceded nor followed by a backtick. + +A [code span](@code-span) begins with a backtick string and ends with +a backtick string of equal length. The contents of the code span are +the characters between the two backtick strings, with leading and +trailing spaces and [line ending]s removed, and +[whitespace] collapsed to single spaces. + +This is a simple code span: + +. +`foo` +. +

                            foo

                            +. + +Here two backticks are used, because the code contains a backtick. +This example also illustrates stripping of leading and trailing spaces: + +. +`` foo ` bar `` +. +

                            foo ` bar

                            +. + +This example shows the motivation for stripping leading and trailing +spaces: + +. +` `` ` +. +

                            ``

                            +. + +[Line ending]s are treated like spaces: + +. +`` +foo +`` +. +

                            foo

                            +. + +Interior spaces and [line ending]s are collapsed into +single spaces, just as they would be by a browser: + +. +`foo bar + baz` +. +

                            foo bar baz

                            +. + +Q: Why not just leave the spaces, since browsers will collapse them +anyway? A: Because we might be targeting a non-HTML format, and we +shouldn't rely on HTML-specific rendering assumptions. + +(Existing implementations differ in their treatment of internal +spaces and [line ending]s. Some, including `Markdown.pl` and +`showdown`, convert an internal [line ending] into a +`
                            ` tag. But this makes things difficult for those who like to +hard-wrap their paragraphs, since a line break in the midst of a code +span will cause an unintended line break in the output. Others just +leave internal spaces as they are, which is fine if only HTML is being +targeted.) + +. +`foo `` bar` +. +

                            foo `` bar

                            +. + +Note that backslash escapes do not work in code spans. All backslashes +are treated literally: + +. +`foo\`bar` +. +

                            foo\bar`

                            +. + +Backslash escapes are never needed, because one can always choose a +string of *n* backtick characters as delimiters, where the code does +not contain any strings of exactly *n* backtick characters. + +Code span backticks have higher precedence than any other inline +constructs except HTML tags and autolinks. Thus, for example, this is +not parsed as emphasized text, since the second `*` is part of a code +span: + +. +*foo`*` +. +

                            *foo*

                            +. + +And this is not parsed as a link: + +. +[not a `link](/foo`) +. +

                            [not a link](/foo)

                            +. + +Code spans, HTML tags, and autolinks have the same precedence. +Thus, this is code: + +. +`` +. +

                            <a href="">`

                            +. + +But this is an HTML tag: + +. +
                            ` +. +

                            `

                            +. + +And this is code: + +. +`` +. +

                            <http://foo.bar.baz>`

                            +. + +But this is an autolink: + +. +` +. +

                            http://foo.bar.`baz`

                            +. + +When a backtick string is not closed by a matching backtick string, +we just have literal backticks: + +. +```foo`` +. +

                            ```foo``

                            +. + +. +`foo +. +

                            `foo

                            +. + +## Emphasis and strong emphasis + +John Gruber's original [Markdown syntax +description](http://daringfireball.net/projects/markdown/syntax#em) says: + +> Markdown treats asterisks (`*`) and underscores (`_`) as indicators of +> emphasis. Text wrapped with one `*` or `_` will be wrapped with an HTML +> `` tag; double `*`'s or `_`'s will be wrapped with an HTML `` +> tag. + +This is enough for most users, but these rules leave much undecided, +especially when it comes to nested emphasis. The original +`Markdown.pl` test suite makes it clear that triple `***` and +`___` delimiters can be used for strong emphasis, and most +implementations have also allowed the following patterns: + +``` markdown +***strong emph*** +***strong** in emph* +***emph* in strong** +**in strong *emph*** +*in emph **strong*** +``` + +The following patterns are less widely supported, but the intent +is clear and they are useful (especially in contexts like bibliography +entries): + +``` markdown +*emph *with emph* in it* +**strong **with strong** in it** +``` + +Many implementations have also restricted intraword emphasis to +the `*` forms, to avoid unwanted emphasis in words containing +internal underscores. (It is best practice to put these in code +spans, but users often do not.) + +``` markdown +internal emphasis: foo*bar*baz +no emphasis: foo_bar_baz +``` + +The rules given below capture all of these patterns, while allowing +for efficient parsing strategies that do not backtrack. + +First, some definitions. A [delimiter run](@delimiter-run) is either +a sequence of one or more `*` characters that is not preceded or +followed by a `*` character, or a sequence of one or more `_` +characters that is not preceded or followed by a `_` character. + +A [left-flanking delimiter run](@left-flanking-delimiter-run) is +a [delimiter run] that is (a) not followed by [unicode whitespace], +and (b) either not followed by a [punctuation character], or +preceded by [unicode whitespace] or a [punctuation character]. + +A [right-flanking delimiter run](@right-flanking-delimiter-run) is +a [delimiter run] that is (a) not preceded by [unicode whitespace], +and (b) either not preceded by a [punctuation character], or +followed by [unicode whitespace] or a [punctuation character]. + +Here are some examples of delimiter runs. + + - left-flanking but not right-flanking: + + ``` + ***abc + _abc + **"abc" + _"abc" + ``` + + - right-flanking but not left-flanking: + + ``` + abc*** + abc_ + "abc"** + _"abc" + ``` + + - Both right and right-flanking: + + ``` + abc***def + "abc"_"def" + ``` + + - Neither right nor right-flanking: + + ``` + abc *** def + a _ b + ``` + +(The idea of distinguishing left-flanking and right-flanking +delimiter runs based on the character before and the character +after comes from Roopesh Chander's +[vfmd](http://www.vfmd.org/vfmd-spec/specification/#procedure-for-identifying-emphasis-tags). +vfmd uses the terminology "emphasis indicator string" instead of "delimiter +run," and its rules for distinguishing left- and right-flanking runs +are a bit more complex than the ones given here.) + +The following rules define emphasis and strong emphasis: + +1. A single `*` character [can open emphasis](@can-open-emphasis) + iff it is part of a [left-flanking delimiter run]. + +2. A single `_` character [can open emphasis] iff + it is part of a [left-flanking delimiter run] + and not part of a [right-flanking delimiter run]. + +3. A single `*` character [can close emphasis](@can-close-emphasis) + iff it is part of a [right-flanking delimiter run]. + +4. A single `_` character [can close emphasis] + iff it is part of a [right-flanking delimiter run] + and not part of a [left-flanking delimiter run]. + +5. A double `**` [can open strong emphasis](@can-open-strong-emphasis) + iff it is part of a [left-flanking delimiter run]. + +6. A double `__` [can open strong emphasis] + iff it is part of a [left-flanking delimiter run] + and not part of a [right-flanking delimiter run]. + +7. A double `**` [can close strong emphasis](@can-close-strong-emphasis) + iff it is part of a [right-flanking delimiter run]. + +8. A double `__` [can close strong emphasis] + iff it is part of a [right-flanking delimiter run] + and not part of a [left-flanking delimiter run]. + +9. Emphasis begins with a delimiter that [can open emphasis] and ends + with a delimiter that [can close emphasis], and that uses the same + character (`_` or `*`) as the opening delimiter. There must + be a nonempty sequence of inlines between the open delimiter + and the closing delimiter; these form the contents of the emphasis + inline. + +10. Strong emphasis begins with a delimiter that + [can open strong emphasis] and ends with a delimiter that + [can close strong emphasis], and that uses the same character + (`_` or `*`) as the opening delimiter. + There must be a nonempty sequence of inlines between the open + delimiter and the closing delimiter; these form the contents of + the strong emphasis inline. + +11. A literal `*` character cannot occur at the beginning or end of + `*`-delimited emphasis or `**`-delimited strong emphasis, unless it + is backslash-escaped. + +12. A literal `_` character cannot occur at the beginning or end of + `_`-delimited emphasis or `__`-delimited strong emphasis, unless it + is backslash-escaped. + +Where rules 1--12 above are compatible with multiple parsings, +the following principles resolve ambiguity: + +13. The number of nestings should be minimized. Thus, for example, + an interpretation `...` is always preferred to + `...`. + +14. An interpretation `...` is always + preferred to `..`. + +15. When two potential emphasis or strong emphasis spans overlap, + so that the second begins before the first ends and ends after + the first ends, the first takes precedence. Thus, for example, + `*foo _bar* baz_` is parsed as `foo _bar baz_` rather + than `*foo bar* baz`. For the same reason, + `**foo*bar**` is parsed as `foobar*` + rather than `foo*bar`. + +16. When there are two potential emphasis or strong emphasis spans + with the same closing delimiter, the shorter one (the one that + opens later) takes precedence. Thus, for example, + `**foo **bar baz**` is parsed as `**foo bar baz` + rather than `foo **bar baz`. + +17. Inline code spans, links, images, and HTML tags group more tightly + than emphasis. So, when there is a choice between an interpretation + that contains one of these elements and one that does not, the + former always wins. Thus, for example, `*[foo*](bar)` is + parsed as `*foo*` rather than as + `[foo](bar)`. + +These rules can be illustrated through a series of examples. + +Rule 1: + +. +*foo bar* +. +

                            foo bar

                            +. + +This is not emphasis, because the opening `*` is followed by +whitespace, and hence not part of a [left-flanking delimiter run]: + +. +a * foo bar* +. +

                            a * foo bar*

                            +. + +This is not emphasis, because the opening `*` is preceded +by an alphanumeric and followed by punctuation, and hence +not part of a [left-flanking delimiter run]: + +. +a*"foo"* +. +

                            a*"foo"*

                            +. + +Unicode nonbreaking spaces count as whitespace, too: + +. +* a * +. +

                            * a *

                            +. + +Intraword emphasis with `*` is permitted: + +. +foo*bar* +. +

                            foobar

                            +. + +. +5*6*78 +. +

                            5678

                            +. + +Rule 2: + +. +_foo bar_ +. +

                            foo bar

                            +. + +This is not emphasis, because the opening `_` is followed by +whitespace: + +. +_ foo bar_ +. +

                            _ foo bar_

                            +. + +This is not emphasis, because the opening `_` is preceded +by an alphanumeric and followed by punctuation: + +. +a_"foo"_ +. +

                            a_"foo"_

                            +. + +Emphasis with `_` is not allowed inside words: + +. +foo_bar_ +. +

                            foo_bar_

                            +. + +. +5_6_78 +. +

                            5_6_78

                            +. + +. +пристаням_стремятся_ +. +

                            пристаням_стремятся_

                            +. + +Here `_` does not generate emphasis, because the first delimiter run +is right-flanking and the second left-flanking: + +. +aa_"bb"_cc +. +

                            aa_"bb"_cc

                            +. + +Here there is no emphasis, because the delimiter runs are +both left- and right-flanking: + +. +"aa"_"bb"_"cc" +. +

                            "aa"_"bb"_"cc"

                            +. + +Rule 3: + +This is not emphasis, because the closing delimiter does +not match the opening delimiter: + +. +_foo* +. +

                            _foo*

                            +. + +This is not emphasis, because the closing `*` is preceded by +whitespace: + +. +*foo bar * +. +

                            *foo bar *

                            +. + +This is not emphasis, because the second `*` is +preceded by punctuation and followed by an alphanumeric +(hence it is not part of a [right-flanking delimiter run]: + +. +*(*foo) +. +

                            *(*foo)

                            +. + +The point of this restriction is more easily appreciated +with this example: + +. +*(*foo*)* +. +

                            (foo)

                            +. + +Intraword emphasis with `*` is allowed: + +. +*foo*bar +. +

                            foobar

                            +. + + +Rule 4: + +This is not emphasis, because the closing `_` is preceded by +whitespace: + +. +_foo bar _ +. +

                            _foo bar _

                            +. + +This is not emphasis, because the second `_` is +preceded by punctuation and followed by an alphanumeric: + +. +_(_foo) +. +

                            _(_foo)

                            +. + +This is emphasis within emphasis: + +. +_(_foo_)_ +. +

                            (foo)

                            +. + +Intraword emphasis is disallowed for `_`: + +. +_foo_bar +. +

                            _foo_bar

                            +. + +. +_пристаням_стремятся +. +

                            _пристаням_стремятся

                            +. + +. +_foo_bar_baz_ +. +

                            foo_bar_baz

                            +. + +Rule 5: + +. +**foo bar** +. +

                            foo bar

                            +. + +This is not strong emphasis, because the opening delimiter is +followed by whitespace: + +. +** foo bar** +. +

                            ** foo bar**

                            +. + +This is not strong emphasis, because the opening `**` is preceded +by an alphanumeric and followed by punctuation, and hence +not part of a [left-flanking delimiter run]: + +. +a**"foo"** +. +

                            a**"foo"**

                            +. + +Intraword strong emphasis with `**` is permitted: + +. +foo**bar** +. +

                            foobar

                            +. + +Rule 6: + +. +__foo bar__ +. +

                            foo bar

                            +. + +This is not strong emphasis, because the opening delimiter is +followed by whitespace: + +. +__ foo bar__ +. +

                            __ foo bar__

                            +. + +This is not strong emphasis, because the opening `__` is preceded +by an alphanumeric and followed by punctuation: + +. +a__"foo"__ +. +

                            a__"foo"__

                            +. + +Intraword strong emphasis is forbidden with `__`: + +. +foo__bar__ +. +

                            foo__bar__

                            +. + +. +5__6__78 +. +

                            5__6__78

                            +. + +. +пристаням__стремятся__ +. +

                            пристаням__стремятся__

                            +. + +. +__foo, __bar__, baz__ +. +

                            foo, bar, baz

                            +. + +Rule 7: + +This is not strong emphasis, because the closing delimiter is preceded +by whitespace: + +. +**foo bar ** +. +

                            **foo bar **

                            +. + +(Nor can it be interpreted as an emphasized `*foo bar *`, because of +Rule 11.) + +This is not strong emphasis, because the second `**` is +preceded by punctuation and followed by an alphanumeric: + +. +**(**foo) +. +

                            **(**foo)

                            +. + +The point of this restriction is more easily appreciated +with these examples: + +. +*(**foo**)* +. +

                            (foo)

                            +. + +. +**Gomphocarpus (*Gomphocarpus physocarpus*, syn. +*Asclepias physocarpa*)** +. +

                            Gomphocarpus (Gomphocarpus physocarpus, syn. +Asclepias physocarpa)

                            +. + +. +**foo "*bar*" foo** +. +

                            foo "bar" foo

                            +. + +Intraword emphasis: + +. +**foo**bar +. +

                            foobar

                            +. + +Rule 8: + +This is not strong emphasis, because the closing delimiter is +preceded by whitespace: + +. +__foo bar __ +. +

                            __foo bar __

                            +. + +This is not strong emphasis, because the second `__` is +preceded by punctuation and followed by an alphanumeric: + +. +__(__foo) +. +

                            __(__foo)

                            +. + +The point of this restriction is more easily appreciated +with this example: + +. +_(__foo__)_ +. +

                            (foo)

                            +. + +Intraword strong emphasis is forbidden with `__`: + +. +__foo__bar +. +

                            __foo__bar

                            +. + +. +__пристаням__стремятся +. +

                            __пристаням__стремятся

                            +. + +. +__foo__bar__baz__ +. +

                            foo__bar__baz

                            +. + +Rule 9: + +Any nonempty sequence of inline elements can be the contents of an +emphasized span. + +. +*foo [bar](/url)* +. +

                            foo bar

                            +. + +. +*foo +bar* +. +

                            foo +bar

                            +. + +In particular, emphasis and strong emphasis can be nested +inside emphasis: + +. +_foo __bar__ baz_ +. +

                            foo bar baz

                            +. + +. +_foo _bar_ baz_ +. +

                            foo bar baz

                            +. + +. +__foo_ bar_ +. +

                            foo bar

                            +. + +. +*foo *bar** +. +

                            foo bar

                            +. + +. +*foo **bar** baz* +. +

                            foo bar baz

                            +. + +But note: + +. +*foo**bar**baz* +. +

                            foobarbaz

                            +. + +The difference is that in the preceding case, the internal delimiters +[can close emphasis], while in the cases with spaces, they cannot. + +. +***foo** bar* +. +

                            foo bar

                            +. + +. +*foo **bar*** +. +

                            foo bar

                            +. + +Note, however, that in the following case we get no strong +emphasis, because the opening delimiter is closed by the first +`*` before `bar`: + +. +*foo**bar*** +. +

                            foobar**

                            +. + + +Indefinite levels of nesting are possible: + +. +*foo **bar *baz* bim** bop* +. +

                            foo bar baz bim bop

                            +. + +. +*foo [*bar*](/url)* +. +

                            foo bar

                            +. + +There can be no empty emphasis or strong emphasis: + +. +** is not an empty emphasis +. +

                            ** is not an empty emphasis

                            +. + +. +**** is not an empty strong emphasis +. +

                            **** is not an empty strong emphasis

                            +. + + +Rule 10: + +Any nonempty sequence of inline elements can be the contents of an +strongly emphasized span. + +. +**foo [bar](/url)** +. +

                            foo bar

                            +. + +. +**foo +bar** +. +

                            foo +bar

                            +. + +In particular, emphasis and strong emphasis can be nested +inside strong emphasis: + +. +__foo _bar_ baz__ +. +

                            foo bar baz

                            +. + +. +__foo __bar__ baz__ +. +

                            foo bar baz

                            +. + +. +____foo__ bar__ +. +

                            foo bar

                            +. + +. +**foo **bar**** +. +

                            foo bar

                            +. + +. +**foo *bar* baz** +. +

                            foo bar baz

                            +. + +But note: + +. +**foo*bar*baz** +. +

                            foobarbaz**

                            +. + +The difference is that in the preceding case, the internal delimiters +[can close emphasis], while in the cases with spaces, they cannot. + +. +***foo* bar** +. +

                            foo bar

                            +. + +. +**foo *bar*** +. +

                            foo bar

                            +. + +Indefinite levels of nesting are possible: + +. +**foo *bar **baz** +bim* bop** +. +

                            foo bar baz +bim bop

                            +. + +. +**foo [*bar*](/url)** +. +

                            foo bar

                            +. + +There can be no empty emphasis or strong emphasis: + +. +__ is not an empty emphasis +. +

                            __ is not an empty emphasis

                            +. + +. +____ is not an empty strong emphasis +. +

                            ____ is not an empty strong emphasis

                            +. + + +Rule 11: + +. +foo *** +. +

                            foo ***

                            +. + +. +foo *\** +. +

                            foo *

                            +. + +. +foo *_* +. +

                            foo _

                            +. + +. +foo ***** +. +

                            foo *****

                            +. + +. +foo **\*** +. +

                            foo *

                            +. + +. +foo **_** +. +

                            foo _

                            +. + +Note that when delimiters do not match evenly, Rule 11 determines +that the excess literal `*` characters will appear outside of the +emphasis, rather than inside it: + +. +**foo* +. +

                            *foo

                            +. + +. +*foo** +. +

                            foo*

                            +. + +. +***foo** +. +

                            *foo

                            +. + +. +****foo* +. +

                            ***foo

                            +. + +. +**foo*** +. +

                            foo*

                            +. + +. +*foo**** +. +

                            foo***

                            +. + + +Rule 12: + +. +foo ___ +. +

                            foo ___

                            +. + +. +foo _\__ +. +

                            foo _

                            +. + +. +foo _*_ +. +

                            foo *

                            +. + +. +foo _____ +. +

                            foo _____

                            +. + +. +foo __\___ +. +

                            foo _

                            +. + +. +foo __*__ +. +

                            foo *

                            +. + +. +__foo_ +. +

                            _foo

                            +. + +Note that when delimiters do not match evenly, Rule 12 determines +that the excess literal `_` characters will appear outside of the +emphasis, rather than inside it: + +. +_foo__ +. +

                            foo_

                            +. + +. +___foo__ +. +

                            _foo

                            +. + +. +____foo_ +. +

                            ___foo

                            +. + +. +__foo___ +. +

                            foo_

                            +. + +. +_foo____ +. +

                            foo___

                            +. + +Rule 13 implies that if you want emphasis nested directly inside +emphasis, you must use different delimiters: + +. +**foo** +. +

                            foo

                            +. + +. +*_foo_* +. +

                            foo

                            +. + +. +__foo__ +. +

                            foo

                            +. + +. +_*foo*_ +. +

                            foo

                            +. + +However, strong emphasis within strong emphasis is possible without +switching delimiters: + +. +****foo**** +. +

                            foo

                            +. + +. +____foo____ +. +

                            foo

                            +. + + +Rule 13 can be applied to arbitrarily long sequences of +delimiters: + +. +******foo****** +. +

                            foo

                            +. + +Rule 14: + +. +***foo*** +. +

                            foo

                            +. + +. +_____foo_____ +. +

                            foo

                            +. + +Rule 15: + +. +*foo _bar* baz_ +. +

                            foo _bar baz_

                            +. + +. +**foo*bar** +. +

                            foobar*

                            +. + + +Rule 16: + +. +**foo **bar baz** +. +

                            **foo bar baz

                            +. + +. +*foo *bar baz* +. +

                            *foo bar baz

                            +. + +Rule 17: + +. +*[bar*](/url) +. +

                            *bar*

                            +. + +. +_foo [bar_](/url) +. +

                            _foo bar_

                            +. + +. +* +. +

                            *

                            +. + +. +** +. +

                            **

                            +. + +. +__ +. +

                            __

                            +. + +. +*a `*`* +. +

                            a *

                            +. + +. +_a `_`_ +. +

                            a _

                            +. + +. +**a +. +

                            **ahttp://foo.bar?q=**

                            +. + +. +__a +. +

                            __ahttp://foo.bar?q=__

                            +. + + +## Links + +A link contains [link text] (the visible text), a [link destination] +(the URI that is the link destination), and optionally a [link title]. +There are two basic kinds of links in Markdown. In [inline link]s the +destination and title are given immediately after the link text. In +[reference link]s the destination and title are defined elsewhere in +the document. + +A [link text](@link-text) consists of a sequence of zero or more +inline elements enclosed by square brackets (`[` and `]`). The +following rules apply: + +- Links may not contain other links, at any level of nesting. + +- Brackets are allowed in the [link text] only if (a) they + are backslash-escaped or (b) they appear as a matched pair of brackets, + with an open bracket `[`, a sequence of zero or more inlines, and + a close bracket `]`. + +- Backtick [code span]s, [autolink]s, and raw [HTML tag]s bind more tightly + than the brackets in link text. Thus, for example, + `` [foo`]` `` could not be a link text, since the second `]` + is part of a code span. + +- The brackets in link text bind more tightly than markers for + [emphasis and strong emphasis]. Thus, for example, `*[foo*](url)` is a link. + +A [link destination](@link-destination) consists of either + +- a sequence of zero or more characters between an opening `<` and a + closing `>` that contains no line breaks or unescaped `<` or `>` + characters, or + +- a nonempty sequence of characters that does not include + ASCII space or control characters, and includes parentheses + only if (a) they are backslash-escaped or (b) they are part of + a balanced pair of unescaped parentheses that is not itself + inside a balanced pair of unescaped paretheses. + +A [link title](@link-title) consists of either + +- a sequence of zero or more characters between straight double-quote + characters (`"`), including a `"` character only if it is + backslash-escaped, or + +- a sequence of zero or more characters between straight single-quote + characters (`'`), including a `'` character only if it is + backslash-escaped, or + +- a sequence of zero or more characters between matching parentheses + (`(...)`), including a `)` character only if it is backslash-escaped. + +An [inline link](@inline-link) consists of a [link text] followed immediately +by a left parenthesis `(`, optional [whitespace], an optional +[link destination], an optional [link title] separated from the link +destination by [whitespace], optional [whitespace], and a right +parenthesis `)`. The link's text consists of the inlines contained +in the [link text] (excluding the enclosing square brackets). +The link's URI consists of the link destination, excluding enclosing +`<...>` if present, with backslash-escapes in effect as described +above. The link's title consists of the link title, excluding its +enclosing delimiters, with backslash-escapes in effect as described +above. + +Here is a simple inline link: + +. +[link](/uri "title") +. +

                            link

                            +. + +The title may be omitted: + +. +[link](/uri) +. +

                            link

                            +. + +Both the title and the destination may be omitted: + +. +[link]() +. +

                            link

                            +. + +. +[link](<>) +. +

                            link

                            +. + +If the destination contains spaces, it must be enclosed in pointy +braces: + +. +[link](/my uri) +. +

                            [link](/my uri)

                            +. + +. +[link](
                            ) +. +

                            link

                            +. + +The destination cannot contain line breaks, even with pointy braces: + +. +[link](foo +bar) +. +

                            [link](foo +bar)

                            +. + +. +[link]() +. +

                            [link]()

                            +. + +One level of balanced parentheses is allowed without escaping: + +. +[link]((foo)and(bar)) +. +

                            link

                            +. + +However, if you have parentheses within parentheses, you need to escape +or use the `<...>` form: + +. +[link](foo(and(bar))) +. +

                            [link](foo(and(bar)))

                            +. + +. +[link](foo(and\(bar\))) +. +

                            link

                            +. + +. +[link]() +. +

                            link

                            +. + +Parentheses and other symbols can also be escaped, as usual +in Markdown: + +. +[link](foo\)\:) +. +

                            link

                            +. + +URL-escaping should be left alone inside the destination, as all +URL-escaped characters are also valid URL characters. HTML entities in +the destination will be parsed into their UTF-8 codepoints, as usual, and +optionally URL-escaped when written as HTML. + +. +[link](foo%20bä) +. +

                            link

                            +. + +Note that, because titles can often be parsed as destinations, +if you try to omit the destination and keep the title, you'll +get unexpected results: + +. +[link]("title") +. +

                            link

                            +. + +Titles may be in single quotes, double quotes, or parentheses: + +. +[link](/url "title") +[link](/url 'title') +[link](/url (title)) +. +

                            link +link +link

                            +. + +Backslash escapes and entities may be used in titles: + +. +[link](/url "title \""") +. +

                            link

                            +. + +Nested balanced quotes are not allowed without escaping: + +. +[link](/url "title "and" title") +. +

                            [link](/url "title "and" title")

                            +. + +But it is easy to work around this by using a different quote type: + +. +[link](/url 'title "and" title') +. +

                            link

                            +. + +(Note: `Markdown.pl` did allow double quotes inside a double-quoted +title, and its test suite included a test demonstrating this. +But it is hard to see a good rationale for the extra complexity this +brings, since there are already many ways---backslash escaping, +entities, or using a different quote type for the enclosing title---to +write titles containing double quotes. `Markdown.pl`'s handling of +titles has a number of other strange features. For example, it allows +single-quoted titles in inline links, but not reference links. And, in +reference links but not inline links, it allows a title to begin with +`"` and end with `)`. `Markdown.pl` 1.0.1 even allows titles with no closing +quotation mark, though 1.0.2b8 does not. It seems preferable to adopt +a simple, rational rule that works the same way in inline links and +link reference definitions.) + +[Whitespace] is allowed around the destination and title: + +. +[link]( /uri + "title" ) +. +

                            link

                            +. + +But it is not allowed between the link text and the +following parenthesis: + +. +[link] (/uri) +. +

                            [link] (/uri)

                            +. + +The link text may contain balanced brackets, but not unbalanced ones, +unless they are escaped: + +. +[link [foo [bar]]](/uri) +. +

                            link [foo [bar]]

                            +. + +. +[link] bar](/uri) +. +

                            [link] bar](/uri)

                            +. + +. +[link [bar](/uri) +. +

                            [link bar

                            +. + +. +[link \[bar](/uri) +. +

                            link [bar

                            +. + +The link text may contain inline content: + +. +[link *foo **bar** `#`*](/uri) +. +

                            link foo bar #

                            +. + +. +[![moon](moon.jpg)](/uri) +. +

                            moon

                            +. + +However, links may not contain other links, at any level of nesting. + +. +[foo [bar](/uri)](/uri) +. +

                            [foo bar](/uri)

                            +. + +. +[foo *[bar [baz](/uri)](/uri)*](/uri) +. +

                            [foo [bar baz](/uri)](/uri)

                            +. + +. +![[[foo](uri1)](uri2)](uri3) +. +

                            [foo](uri2)

                            +. + +These cases illustrate the precedence of link text grouping over +emphasis grouping: + +. +*[foo*](/uri) +. +

                            *foo*

                            +. + +. +[foo *bar](baz*) +. +

                            foo *bar

                            +. + +Note that brackets that *aren't* part of links do not take +precedence: + +. +*foo [bar* baz] +. +

                            foo [bar baz]

                            +. + +These cases illustrate the precedence of HTML tags, code spans, +and autolinks over link grouping: + +. +[foo +. +

                            [foo

                            +. + +. +[foo`](/uri)` +. +

                            [foo](/uri)

                            +. + +. +[foo +. +

                            [foohttp://example.com?search=](uri)

                            +. + +There are three kinds of [reference link](@reference-link)s: +[full](#full-reference-link), [collapsed](#collapsed-reference-link), +and [shortcut](#shortcut-reference-link). + +A [full reference link](@full-reference-link) +consists of a [link text], optional [whitespace], and a [link label] +that [matches] a [link reference definition] elsewhere in the document. + +A [link label](@link-label) begins with a left bracket (`[`) and ends +with the first right bracket (`]`) that is not backslash-escaped. +Unescaped square bracket characters are not allowed in +[link label]s. A link label can have at most 999 +characters inside the square brackets. + +One label [matches](@matches) +another just in case their normalized forms are equal. To normalize a +label, perform the *unicode case fold* and collapse consecutive internal +[whitespace] to a single space. If there are multiple +matching reference link definitions, the one that comes first in the +document is used. (It is desirable in such cases to emit a warning.) + +The contents of the first link label are parsed as inlines, which are +used as the link's text. The link's URI and title are provided by the +matching [link reference definition]. + +Here is a simple example: + +. +[foo][bar] + +[bar]: /url "title" +. +

                            foo

                            +. + +The rules for the [link text] are the same as with +[inline link]s. Thus: + +The link text may contain balanced brackets, but not unbalanced ones, +unless they are escaped: + +. +[link [foo [bar]]][ref] + +[ref]: /uri +. +

                            link [foo [bar]]

                            +. + +. +[link \[bar][ref] + +[ref]: /uri +. +

                            link [bar

                            +. + +The link text may contain inline content: + +. +[link *foo **bar** `#`*][ref] + +[ref]: /uri +. +

                            link foo bar #

                            +. + +. +[![moon](moon.jpg)][ref] + +[ref]: /uri +. +

                            moon

                            +. + +However, links may not contain other links, at any level of nesting. + +. +[foo [bar](/uri)][ref] + +[ref]: /uri +. +

                            [foo bar]ref

                            +. + +. +[foo *bar [baz][ref]*][ref] + +[ref]: /uri +. +

                            [foo bar baz]ref

                            +. + +(In the examples above, we have two [shortcut reference link]s +instead of one [full reference link].) + +The following cases illustrate the precedence of link text grouping over +emphasis grouping: + +. +*[foo*][ref] + +[ref]: /uri +. +

                            *foo*

                            +. + +. +[foo *bar][ref] + +[ref]: /uri +. +

                            foo *bar

                            +. + +These cases illustrate the precedence of HTML tags, code spans, +and autolinks over link grouping: + +. +[foo + +[ref]: /uri +. +

                            [foo

                            +. + +. +[foo`][ref]` + +[ref]: /uri +. +

                            [foo][ref]

                            +. + +. +[foo + +[ref]: /uri +. +

                            [foohttp://example.com?search=][ref]

                            +. + +Matching is case-insensitive: + +. +[foo][BaR] + +[bar]: /url "title" +. +

                            foo

                            +. + +Unicode case fold is used: + +. +[Толпой][Толпой] is a Russian word. + +[ТОЛПОЙ]: /url +. +

                            Толпой is a Russian word.

                            +. + +Consecutive internal [whitespace] is treated as one space for +purposes of determining matching: + +. +[Foo + bar]: /url + +[Baz][Foo bar] +. +

                            Baz

                            +. + +There can be [whitespace] between the [link text] and the [link label]: + +. +[foo] [bar] + +[bar]: /url "title" +. +

                            foo

                            +. + +. +[foo] +[bar] + +[bar]: /url "title" +. +

                            foo

                            +. + +When there are multiple matching [link reference definition]s, +the first is used: + +. +[foo]: /url1 + +[foo]: /url2 + +[bar][foo] +. +

                            bar

                            +. + +Note that matching is performed on normalized strings, not parsed +inline content. So the following does not match, even though the +labels define equivalent inline content: + +. +[bar][foo\!] + +[foo!]: /url +. +

                            [bar][foo!]

                            +. + +[Link label]s cannot contain brackets, unless they are +backslash-escaped: + +. +[foo][ref[] + +[ref[]: /uri +. +

                            [foo][ref[]

                            +

                            [ref[]: /uri

                            +. + +. +[foo][ref[bar]] + +[ref[bar]]: /uri +. +

                            [foo][ref[bar]]

                            +

                            [ref[bar]]: /uri

                            +. + +. +[[[foo]]] + +[[[foo]]]: /url +. +

                            [[[foo]]]

                            +

                            [[[foo]]]: /url

                            +. + +. +[foo][ref\[] + +[ref\[]: /uri +. +

                            foo

                            +. + +A [collapsed reference link](@collapsed-reference-link) +consists of a [link label] that [matches] a +[link reference definition] elsewhere in the +document, optional [whitespace], and the string `[]`. +The contents of the first link label are parsed as inlines, +which are used as the link's text. The link's URI and title are +provided by the matching reference link definition. Thus, +`[foo][]` is equivalent to `[foo][foo]`. + +. +[foo][] + +[foo]: /url "title" +. +

                            foo

                            +. + +. +[*foo* bar][] + +[*foo* bar]: /url "title" +. +

                            foo bar

                            +. + +The link labels are case-insensitive: + +. +[Foo][] + +[foo]: /url "title" +. +

                            Foo

                            +. + + +As with full reference links, [whitespace] is allowed +between the two sets of brackets: + +. +[foo] +[] + +[foo]: /url "title" +. +

                            foo

                            +. + +A [shortcut reference link](@shortcut-reference-link) +consists of a [link label] that [matches] a +[link reference definition] elsewhere in the +document and is not followed by `[]` or a link label. +The contents of the first link label are parsed as inlines, +which are used as the link's text. the link's URI and title +are provided by the matching link reference definition. +Thus, `[foo]` is equivalent to `[foo][]`. + +. +[foo] + +[foo]: /url "title" +. +

                            foo

                            +. + +. +[*foo* bar] + +[*foo* bar]: /url "title" +. +

                            foo bar

                            +. + +. +[[*foo* bar]] + +[*foo* bar]: /url "title" +. +

                            [foo bar]

                            +. + +The link labels are case-insensitive: + +. +[Foo] + +[foo]: /url "title" +. +

                            Foo

                            +. + +A space after the link text should be preserved: + +. +[foo] bar + +[foo]: /url +. +

                            foo bar

                            +. + +If you just want bracketed text, you can backslash-escape the +opening bracket to avoid links: + +. +\[foo] + +[foo]: /url "title" +. +

                            [foo]

                            +. + +Note that this is a link, because a link label ends with the first +following closing bracket: + +. +[foo*]: /url + +*[foo*] +. +

                            *foo*

                            +. + +Full references take precedence over shortcut references: + +. +[foo][bar] + +[foo]: /url1 +[bar]: /url2 +. +

                            foo

                            +. + +In the following case `[bar][baz]` is parsed as a reference, +`[foo]` as normal text: + +. +[foo][bar][baz] + +[baz]: /url +. +

                            [foo]bar

                            +. + +Here, though, `[foo][bar]` is parsed as a reference, since +`[bar]` is defined: + +. +[foo][bar][baz] + +[baz]: /url1 +[bar]: /url2 +. +

                            foobaz

                            +. + +Here `[foo]` is not parsed as a shortcut reference, because it +is followed by a link label (even though `[bar]` is not defined): + +. +[foo][bar][baz] + +[baz]: /url1 +[foo]: /url2 +. +

                            [foo]bar

                            +. + + +## Images + +Syntax for images is like the syntax for links, with one +difference. Instead of [link text], we have an +[image description](@image-description). The rules for this are the +same as for [link text], except that (a) an +image description starts with `![` rather than `[`, and +(b) an image description may contain links. +An image description has inline elements +as its contents. When an image is rendered to HTML, +this is standardly used as the image's `alt` attribute. + +. +![foo](/url "title") +. +

                            foo

                            +. + +. +![foo *bar*] + +[foo *bar*]: train.jpg "train & tracks" +. +

                            foo bar

                            +. + +. +![foo ![bar](/url)](/url2) +. +

                            foo bar

                            +. + +. +![foo [bar](/url)](/url2) +. +

                            foo bar

                            +. + +Though this spec is concerned with parsing, not rendering, it is +recommended that in rendering to HTML, only the plain string content +of the [image description] be used. Note that in +the above example, the alt attribute's value is `foo bar`, not `foo +[bar](/url)` or `foo bar`. Only the plain string +content is rendered, without formatting. + +. +![foo *bar*][] + +[foo *bar*]: train.jpg "train & tracks" +. +

                            foo bar

                            +. + +. +![foo *bar*][foobar] + +[FOOBAR]: train.jpg "train & tracks" +. +

                            foo bar

                            +. + +. +![foo](train.jpg) +. +

                            foo

                            +. + +. +My ![foo bar](/path/to/train.jpg "title" ) +. +

                            My foo bar

                            +. + +. +![foo]() +. +

                            foo

                            +. + +. +![](/url) +. +

                            +. + +Reference-style: + +. +![foo] [bar] + +[bar]: /url +. +

                            foo

                            +. + +. +![foo] [bar] + +[BAR]: /url +. +

                            foo

                            +. + +Collapsed: + +. +![foo][] + +[foo]: /url "title" +. +

                            foo

                            +. + +. +![*foo* bar][] + +[*foo* bar]: /url "title" +. +

                            foo bar

                            +. + +The labels are case-insensitive: + +. +![Foo][] + +[foo]: /url "title" +. +

                            Foo

                            +. + +As with full reference links, [whitespace] is allowed +between the two sets of brackets: + +. +![foo] +[] + +[foo]: /url "title" +. +

                            foo

                            +. + +Shortcut: + +. +![foo] + +[foo]: /url "title" +. +

                            foo

                            +. + +. +![*foo* bar] + +[*foo* bar]: /url "title" +. +

                            foo bar

                            +. + +Note that link labels cannot contain unescaped brackets: + +. +![[foo]] + +[[foo]]: /url "title" +. +

                            ![[foo]]

                            +

                            [[foo]]: /url "title"

                            +. + +The link labels are case-insensitive: + +. +![Foo] + +[foo]: /url "title" +. +

                            Foo

                            +. + +If you just want bracketed text, you can backslash-escape the +opening `!` and `[`: + +. +\!\[foo] + +[foo]: /url "title" +. +

                            ![foo]

                            +. + +If you want a link after a literal `!`, backslash-escape the +`!`: + +. +\![foo] + +[foo]: /url "title" +. +

                            !foo

                            +. + +## Autolinks + +[Autolink](@autolink)s are absolute URIs and email addresses inside +`<` and `>`. They are parsed as links, with the URL or email address +as the link label. + +A [URI autolink](@uri-autolink) consists of `<`, followed by an +[absolute URI] not containing `<`, followed by `>`. It is parsed as +a link to the URI, with the URI as the link's label. + +An [absolute URI](@absolute-uri), +for these purposes, consists of a [scheme] followed by a colon (`:`) +followed by zero or more characters other than ASCII +[whitespace] and control characters, `<`, and `>`. If +the URI includes these characters, you must use percent-encoding +(e.g. `%20` for a space). + +The following [schemes](@scheme) +are recognized (case-insensitive): +`coap`, `doi`, `javascript`, `aaa`, `aaas`, `about`, `acap`, `cap`, +`cid`, `crid`, `data`, `dav`, `dict`, `dns`, `file`, `ftp`, `geo`, `go`, +`gopher`, `h323`, `http`, `https`, `iax`, `icap`, `im`, `imap`, `info`, +`ipp`, `iris`, `iris.beep`, `iris.xpc`, `iris.xpcs`, `iris.lwz`, `ldap`, +`mailto`, `mid`, `msrp`, `msrps`, `mtqp`, `mupdate`, `news`, `nfs`, +`ni`, `nih`, `nntp`, `opaquelocktoken`, `pop`, `pres`, `rtsp`, +`service`, `session`, `shttp`, `sieve`, `sip`, `sips`, `sms`, `snmp`,` +soap.beep`, `soap.beeps`, `tag`, `tel`, `telnet`, `tftp`, `thismessage`, +`tn3270`, `tip`, `tv`, `urn`, `vemmi`, `ws`, `wss`, `xcon`, +`xcon-userid`, `xmlrpc.beep`, `xmlrpc.beeps`, `xmpp`, `z39.50r`, +`z39.50s`, `adiumxtra`, `afp`, `afs`, `aim`, `apt`,` attachment`, `aw`, +`beshare`, `bitcoin`, `bolo`, `callto`, `chrome`,` chrome-extension`, +`com-eventbrite-attendee`, `content`, `cvs`,` dlna-playsingle`, +`dlna-playcontainer`, `dtn`, `dvb`, `ed2k`, `facetime`, `feed`, +`finger`, `fish`, `gg`, `git`, `gizmoproject`, `gtalk`, `hcp`, `icon`, +`ipn`, `irc`, `irc6`, `ircs`, `itms`, `jar`, `jms`, `keyparc`, `lastfm`, +`ldaps`, `magnet`, `maps`, `market`,` message`, `mms`, `ms-help`, +`msnim`, `mumble`, `mvn`, `notes`, `oid`, `palm`, `paparazzi`, +`platform`, `proxy`, `psyc`, `query`, `res`, `resource`, `rmi`, `rsync`, +`rtmp`, `secondlife`, `sftp`, `sgn`, `skype`, `smb`, `soldat`, +`spotify`, `ssh`, `steam`, `svn`, `teamspeak`, `things`, `udp`, +`unreal`, `ut2004`, `ventrilo`, `view-source`, `webcal`, `wtai`, +`wyciwyg`, `xfire`, `xri`, `ymsgr`. + +Here are some valid autolinks: + +. + +. +

                            http://foo.bar.baz

                            +. + +. + +. +

                            http://foo.bar.baz?q=hello&id=22&boolean

                            +. + +. + +. +

                            irc://foo.bar:2233/baz

                            +. + +Uppercase is also fine: + +. + +. +

                            MAILTO:FOO@BAR.BAZ

                            +. + +Spaces are not allowed in autolinks: + +. + +. +

                            <http://foo.bar/baz bim>

                            +. + +An [email autolink](@email-autolink) +consists of `<`, followed by an [email address], +followed by `>`. The link's label is the email address, +and the URL is `mailto:` followed by the email address. + +An [email address](@email-address), +for these purposes, is anything that matches +the [non-normative regex from the HTML5 +spec](https://html.spec.whatwg.org/multipage/forms.html#e-mail-state-(type=email)): + + /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? + (?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ + +Examples of email autolinks: + +. + +. +

                            foo@bar.example.com

                            +. + +. + +. +

                            foo+special@Bar.baz-bar0.com

                            +. + +These are not autolinks: + +. +<> +. +

                            <>

                            +. + +. + +. +

                            <heck://bing.bong>

                            +. + +. +< http://foo.bar > +. +

                            < http://foo.bar >

                            +. + +. + +. +

                            <foo.bar.baz>

                            +. + +. + +. +

                            <localhost:5001/foo>

                            +. + +. +http://example.com +. +

                            http://example.com

                            +. + +. +foo@bar.example.com +. +

                            foo@bar.example.com

                            +. + +## Raw HTML + +Text between `<` and `>` that looks like an HTML tag is parsed as a +raw HTML tag and will be rendered in HTML without escaping. +Tag and attribute names are not limited to current HTML tags, +so custom tags (and even, say, DocBook tags) may be used. + +Here is the grammar for tags: + +A [tag name](@tag-name) consists of an ASCII letter +followed by zero or more ASCII letters or digits. + +An [attribute](@attribute) consists of [whitespace], +an [attribute name], and an optional +[attribute value specification]. + +An [attribute name](@attribute-name) +consists of an ASCII letter, `_`, or `:`, followed by zero or more ASCII +letters, digits, `_`, `.`, `:`, or `-`. (Note: This is the XML +specification restricted to ASCII. HTML5 is laxer.) + +An [attribute value specification](@attribute-value-specification) +consists of optional [whitespace], +a `=` character, optional [whitespace], and an [attribute +value]. + +An [attribute value](@attribute-value) +consists of an [unquoted attribute value], +a [single-quoted attribute value], or a [double-quoted attribute value]. + +An [unquoted attribute value](@unquoted-attribute-value) +is a nonempty string of characters not +including spaces, `"`, `'`, `=`, `<`, `>`, or `` ` ``. + +A [single-quoted attribute value](@single-quoted-attribute-value) +consists of `'`, zero or more +characters not including `'`, and a final `'`. + +A [double-quoted attribute value](@double-quoted-attribute-value) +consists of `"`, zero or more +characters not including `"`, and a final `"`. + +An [open tag](@open-tag) consists of a `<` character, a [tag name], +zero or more [attributes], optional [whitespace], an optional `/` +character, and a `>` character. + +A [closing tag](@closing-tag) consists of the string ``. + +An [HTML comment](@html-comment) consists of ``, +where *text* does not start with `>` or `->`, does not end with `-`, +and does not contain `--`. (See the +[HTML5 spec](http://www.w3.org/TR/html5/syntax.html#comments).) + +A [processing instruction](@processing-instruction) +consists of the string ``, and the string +`?>`. + +A [declaration](@declaration) consists of the +string ``, and the character `>`. + +A [CDATA section](@cdata-section) consists of +the string ``, and the string `]]>`. + +An [HTML tag](@html-tag) consists of an [open tag], a [closing tag], +an [HTML comment], a [processing instruction], a [declaration], +or a [CDATA section]. + +Here are some simple open tags: + +. + +. +

                            +. + +Empty elements: + +. + +. +

                            +. + +[Whitespace] is allowed: + +. + +. +

                            +. + +With attributes: + +. + +. +

                            +. + +Illegal tag names, not parsed as HTML: + +. +<33> <__> +. +

                            <33> <__>

                            +. + +Illegal attribute names: + +. +
                            +. +

                            <a h*#ref="hi">

                            +. + +Illegal attribute values: + +. +
                            +. +

                            </a href="foo">

                            +. + +Comments: + +. +foo +. +

                            foo

                            +. + +. +foo +. +

                            foo <!-- not a comment -- two hyphens -->

                            +. + +Not comments: + +. +foo foo --> + +foo +. +

                            foo <!--> foo -->

                            +

                            foo <!-- foo--->

                            +. + +Processing instructions: + +. +foo +. +

                            foo

                            +. + +Declarations: + +. +foo +. +

                            foo

                            +. + +CDATA sections: + +. +foo &<]]> +. +

                            foo &<]]>

                            +. + +Entities are preserved in HTML attributes: + +. +
                            +. +

                            +. + +Backslash escapes do not work in HTML attributes: + +. + +. +

                            +. + +. + +. +

                            <a href=""">

                            +. + +## Hard line breaks + +A line break (not in a code span or HTML tag) that is preceded +by two or more spaces and does not occur at the end of a block +is parsed as a [hard line break](@hard-line-break) (rendered +in HTML as a `
                            ` tag): + +. +foo +baz +. +

                            foo
                            +baz

                            +. + +For a more visible alternative, a backslash before the +[line ending] may be used instead of two spaces: + +. +foo\ +baz +. +

                            foo
                            +baz

                            +. + +More than two spaces can be used: + +. +foo +baz +. +

                            foo
                            +baz

                            +. + +Leading spaces at the beginning of the next line are ignored: + +. +foo + bar +. +

                            foo
                            +bar

                            +. + +. +foo\ + bar +. +

                            foo
                            +bar

                            +. + +Line breaks can occur inside emphasis, links, and other constructs +that allow inline content: + +. +*foo +bar* +. +

                            foo
                            +bar

                            +. + +. +*foo\ +bar* +. +

                            foo
                            +bar

                            +. + +Line breaks do not occur inside code spans + +. +`code +span` +. +

                            code span

                            +. + +. +`code\ +span` +. +

                            code\ span

                            +. + +or HTML tags: + +. +
                            +. +

                            +. + +. + +. +

                            +. + +Hard line breaks are for separating inline content within a block. +Neither syntax for hard line breaks works at the end of a paragraph or +other block element: + +. +foo\ +. +

                            foo\

                            +. + +. +foo +. +

                            foo

                            +. + +. +### foo\ +. +

                            foo\

                            +. + +. +### foo +. +

                            foo

                            +. + +## Soft line breaks + +A regular line break (not in a code span or HTML tag) that is not +preceded by two or more spaces is parsed 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.) + +. +foo +baz +. +

                            foo +baz

                            +. + +Spaces at the end of the line and beginning of the next line are +removed: + +. +foo + baz +. +

                            foo +baz

                            +. + +A conforming parser may render a soft line break in HTML either as a +line break or as a space. + +A renderer may also provide an option to render soft line breaks +as hard line breaks. + +## Textual content + +Any characters not given an interpretation by the above rules will +be parsed as plain textual content. + +. +hello $.;'there +. +

                            hello $.;'there

                            +. + +. +Foo χρῆν +. +

                            Foo χρῆν

                            +. + +Internal spaces are preserved verbatim: + +. +Multiple spaces +. +

                            Multiple spaces

                            +. + + + +# Appendix A: A parsing strategy {-} + +## Overview {-} + +Parsing has two phases: + +1. In the first phase, lines of input are consumed and the block +structure of the document---its division into paragraphs, block quotes, +list items, and so on---is constructed. Text is assigned to these +blocks but not parsed. Link reference definitions are parsed and a +map of links is constructed. + +2. In the second phase, the raw text contents of paragraphs and headers +are parsed into sequences of Markdown inline elements (strings, +code spans, links, emphasis, and so on), using the map of link +references constructed in phase 1. + +## The document tree {-} + +At each point in processing, the document is represented as a tree of +**blocks**. The root of the tree is a `document` block. The `document` +may have any number of other blocks as **children**. These children +may, in turn, have other blocks as children. The last child of a block +is normally considered **open**, meaning that subsequent lines of input +can alter its contents. (Blocks that are not open are **closed**.) +Here, for example, is a possible document tree, with the open blocks +marked by arrows: + +``` tree +-> document + -> block_quote + paragraph + "Lorem ipsum dolor\nsit amet." + -> list (type=bullet tight=true bullet_char=-) + list_item + paragraph + "Qui *quodsi iracundia*" + -> list_item + -> paragraph + "aliquando id" +``` + +## How source lines alter the document tree {-} + +Each line that is processed has an effect on this tree. The line is +analyzed and, depending on its contents, the document may be altered +in one or more of the following ways: + +1. One or more open blocks may be closed. +2. One or more new blocks may be created as children of the + last open block. +3. Text may be added to the last (deepest) open block remaining + on the tree. + +Once a line has been incorporated into the tree in this way, +it can be discarded, so input can be read in a stream. + +We can see how this works by considering how the tree above is +generated by four lines of Markdown: + +``` markdown +> Lorem ipsum dolor +sit amet. +> - Qui *quodsi iracundia* +> - aliquando id +``` + +At the outset, our document model is just + +``` tree +-> document +``` + +The first line of our text, + +``` markdown +> Lorem ipsum dolor +``` + +causes a `block_quote` block to be created as a child of our +open `document` block, and a `paragraph` block as a child of +the `block_quote`. Then the text is added to the last open +block, the `paragraph`: + +``` tree +-> document + -> block_quote + -> paragraph + "Lorem ipsum dolor" +``` + +The next line, + +``` markdown +sit amet. +``` + +is a "lazy continuation" of the open `paragraph`, so it gets added +to the paragraph's text: + +``` tree +-> document + -> block_quote + -> paragraph + "Lorem ipsum dolor\nsit amet." +``` + +The third line, + +``` markdown +> - Qui *quodsi iracundia* +``` + +causes the `paragraph` block to be closed, and a new `list` block +opened as a child of the `block_quote`. A `list_item` is also +added as a child of the `list`, and a `paragraph` as a child of +the `list_item`. The text is then added to the new `paragraph`: + +``` tree +-> document + -> block_quote + paragraph + "Lorem ipsum dolor\nsit amet." + -> list (type=bullet tight=true bullet_char=-) + -> list_item + -> paragraph + "Qui *quodsi iracundia*" +``` + +The fourth line, + +``` markdown +> - aliquando id +``` + +causes the `list_item` (and its child the `paragraph`) to be closed, +and a new `list_item` opened up as child of the `list`. A `paragraph` +is added as a child of the new `list_item`, to contain the text. +We thus obtain the final tree: + +``` tree +-> document + -> block_quote + paragraph + "Lorem ipsum dolor\nsit amet." + -> list (type=bullet tight=true bullet_char=-) + list_item + paragraph + "Qui *quodsi iracundia*" + -> list_item + -> paragraph + "aliquando id" +``` + +## From block structure to the final document {-} + +Once all of the input has been parsed, all open blocks are closed. + +We then "walk the tree," visiting every node, and parse raw +string contents of paragraphs and headers as inlines. At this +point we have seen all the link reference definitions, so we can +resolve reference links as we go. + +``` tree +document + block_quote + paragraph + str "Lorem ipsum dolor" + softbreak + str "sit amet." + list (type=bullet tight=true bullet_char=-) + list_item + paragraph + str "Qui " + emph + str "quodsi iracundia" + list_item + paragraph + str "aliquando id" +``` + +Notice how the [line ending] in the first paragraph has +been parsed as a `softbreak`, and the asterisks in the first list item +have become an `emph`. + +The document can be rendered as HTML, or in any other format, given +an appropriate renderer. diff --git a/test/spec_tests.py b/test/spec_tests.py index cc676be4bb..b1b0373130 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -13,7 +13,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description='Run cmark tests.') parser.add_argument('-p', '--program', dest='program', nargs='?', default=None, help='program to test') - parser.add_argument('-s', '--spec', dest='spec', nargs='?', default='spec.txt', + parser.add_argument('-s', '--spec', dest='spec', nargs='?', default='test/spec.txt', help='path to spec') parser.add_argument('-P', '--pattern', dest='pattern', nargs='?', default=None, help='limit to sections matching regex pattern') -- cgit 0.0.5-2-1-g0f52 From 9fb444cfffefe51967ae93b2dcca5ac2dd283abd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:14:49 -0800 Subject: Makefile: Added update-spec target. --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f7a9335385..50057bfc8f 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug mingw archive bench astyle +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug mingw archive bench astyle update-spec all: cmake_build man/man3/cmark.3 @@ -79,6 +79,10 @@ $(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re re2c --case-insensitive -b -i --no-generation-date -o $@ $< +update-spec: + curl 'https://raw.githubusercontent.com/jgm/CommonMark/master/spec.txt'\ + > $(SPEC) + test: $(SPEC) cmake_build make -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) -- cgit 0.0.5-2-1-g0f52 From 704753ef8a4946eb63e4980b70f7d958fe14302b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:16:29 -0800 Subject: Makefile: Removed spec- and website- related parts. --- Makefile | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/Makefile b/Makefile index 50057bfc8f..90990b1381 100644 --- a/Makefile +++ b/Makefile @@ -127,27 +127,4 @@ operf: $(CMARK) distclean: clean -rm -rf *.dSYM -rm -f README.html - -rm -f spec.md fuzz.txt spec.html -rm -rf $(BENCHFILE) $(ALLTESTS) progit - -### Spec ### - -spec.md: $(SPEC) - python3 tools/makespec.py markdown > $@ - -spec.html: spec.txt tools/template.html ${CMARK} - python3 tools/makespec.py html > $@ - -spec.pdf: spec.md tools/template.tex tools/specfilter.hs - pandoc -s $< --template tools/template.tex \ - --filter tools/specfilter.hs -o $@ --latex-engine=xelatex --toc \ - --number-sections -V documentclass=report -V tocdepth=2 \ - -V classoption=twosides - -### Website ### - -update-site: spec - make -C $(SITE) update - -upload-site: spec - make -C $(SITE) upload -- cgit 0.0.5-2-1-g0f52 From c8453ff31f696febac0fcf08c5b2d554b5df7b20 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:28:29 -0800 Subject: Removed non-C related parts of README.md. --- README.md | 216 +++++++++----------------------------------------------------- 1 file changed, 31 insertions(+), 185 deletions(-) diff --git a/README.md b/README.md index 8af9a48c57..44ec5cfd00 100644 --- a/README.md +++ b/README.md @@ -7,32 +7,17 @@ implementations in C and JavaScript. [Try it now!](http://spec.commonmark.org/dingus.html) -The implementations -------------------- +For more information, see . -The C implementation provides both a shared library (`libcmark`) and a -standalone program `cmark` that converts CommonMark to HTML. It is -written in standard C99 and has no library dependencies. The parser is -very fast (see [benchmarks](benchmarks.md)). For documentation, see -the man pages in the `man` directory. +This repository contains the C reference implementation. +It provides a library with functions for parsing CommonMark +documents to an abstract syntax tree (AST), manipulating the AST, +and rendering the document to HTML or to an XML representation of the +AST. It also provides a command-line program, `cmark`, for +parsing and rendering CommonMark documents. -It is easy to use `libcmark` in python, lua, ruby, and other dynamic -languages: see the `wrappers/` subdirectory for some simple examples. - -The JavaScript implementation provides both an NPM package and a -single JavaScript file, with no dependencies, that can be linked into -an HTML page. For further information, see its repository: -. - -**A note on security:** -Neither implementation attempts to sanitize link attributes or -raw HTML. If you use these libraries in applications that accept -untrusted user input, you must run the output through an HTML -sanitizer to protect against -[XSS attacks](http://en.wikipedia.org/wiki/Cross-site_scripting). - -Installing (C) --------------- +Installing +---------- Building the C program (`cmark`) and shared library (`libcmark`) requires [cmake]. If you modify `scanners.re`, then you will also @@ -87,9 +72,8 @@ To make a release tarball and zip archive: make archive - -Compiling for Windows ---------------------- +Installing (Windows) +-------------------- To compile with MSVC and NMAKE: @@ -102,139 +86,18 @@ You can cross-compile a Windows binary and dll on linux if you have the The binaries will be in `build-mingw/windows/bin`. -Installing (JavaScript) ------------------------ - -The JavaScript implementation has been split into its own -repository: . -Please look there for instructions for installation and use. - -The spec --------- - -[The spec] contains over 500 embedded examples which serve as conformance -tests. To run the tests using an executable `$PROG`: - - python3 test/spec_tests.py --program $PROG - -If you want to extract the raw test data from the spec without -actually running the tests, you can do: - - python3 test/spec_tests.py --dump-tests - -and you'll get all the tests in JSON format. - -[The spec]: http://spec.commonmark.org/0.13/ - -The source of [the spec] is `spec.txt`. This is basically a Markdown -file, with code examples written in a shorthand form: - - . - Markdown source - . - expected HTML output - . - -To build an HTML version of the spec, do `make spec.html`. To build a -PDF version, do `make spec.pdf`. (Creating a PDF requires [pandoc] -and a LaTeX installation. Creating the HTML version requires only -`libcmark` and `python3`.) - -The spec is written from the point of view of the human writer, not -the computer reader. It is not an algorithm---an English translation of -a computer program---but a declarative description of what counts as a block -quote, a code block, and each of the other structural elements that can -make up a Markdown document. - -Because John Gruber's [canonical syntax -description](http://daringfireball.net/projects/markdown/syntax) leaves -many aspects of the syntax undetermined, writing a precise spec requires -making a large number of decisions, many of them somewhat arbitrary. -In making them, we have appealed to existing conventions and -considerations of simplicity, readability, expressive power, and -consistency. We have tried to ensure that "normal" documents in the many -incompatible existing implementations of Markdown will render, as far as -possible, as their authors intended. And we have tried to make the rules -for different elements work together harmoniously. In places where -different decisions could have been made (for example, the rules -governing list indentation), we have explained the rationale for -my choices. In a few cases, we have departed slightly from the canonical -syntax description, in ways that we think further the goals of Markdown -as stated in that description. - -For the most part, we have limited ourselves to the basic elements -described in Gruber's canonical syntax description, eschewing extensions -like footnotes and definition lists. It is important to get the core -right before considering such things. However, we have included a visible -syntax for line breaks and fenced code blocks. - -Differences from original Markdown ----------------------------------- - -There are only a few places where this spec says things that contradict -the canonical syntax description: - -- It allows all punctuation symbols to be backslash-escaped, - not just the symbols with special meanings in Markdown. We found - that it was just too hard to remember which symbols could be - escaped. - -- It introduces an alternative syntax for hard line - breaks, a backslash at the end of the line, supplementing the - two-spaces-at-the-end-of-line rule. This is motivated by persistent - complaints about the “invisible” nature of the two-space rule. - -- Link syntax has been made a bit more predictable (in a - backwards-compatible way). For example, `Markdown.pl` allows single - quotes around a title in inline links, but not in reference links. - This kind of difference is really hard for users to remember, so the - spec allows single quotes in both contexts. - -- The rule for HTML blocks differs, though in most real cases it - shouldn't make a difference. (See the section on HTML Blocks - for details.) The spec's proposal makes it easy to include Markdown - inside HTML block-level tags, if you want to, but also allows you to - exclude this. It is also makes parsing much easier, avoiding - expensive backtracking. - -- It does not collapse adjacent bird-track blocks into a single - blockquote: - - > this is two - - > blockquotes - - > this is a single - > - > blockquote with two paragraphs - -- Rules for content in lists differ in a few respects, though (as with - HTML blocks), most lists in existing documents should render as - intended. There is some discussion of the choice points and - differences in the subsection of List Items entitled Motivation. - We think that the spec's proposal does better than any existing - implementation in rendering lists the way a human writer or reader - would intuitively understand them. (We could give numerous examples - of perfectly natural looking lists that nearly every existing - implementation flubs up.) - -- The spec stipulates that two blank lines break out of all list - contexts. This is an attempt to deal with issues that often come up - when someone wants to have two adjacent lists, or a list followed by - an indented code block. - -- Changing bullet characters, or changing from bullets to numbers or - vice versa, starts a new list. We think that is almost always going - to be the writer's intent. - -- The number that begins an ordered list item may be followed by - either `.` or `)`. Changing the delimiter style starts a new - list. - -- The start number of an ordered list is significant. - -- Fenced code blocks are supported, delimited by either - backticks (```` ``` ```` or tildes (` ~~~ `). +Usage +----- + +Instructions for the use of the command line program and library can +be found in the man pages in the `man` subdirectory. + +**A note on security:** +This library does not attempt to sanitize link attributes or +raw HTML. If you use it in applications that accept +untrusted user input, you must run the output through an HTML +sanitizer to protect against +[XSS attacks](http://en.wikipedia.org/wiki/Cross-site_scripting). Contributing ------------ @@ -248,31 +111,14 @@ only for simple, clear, actionable issues. Authors ------- -The spec was written by John MacFarlane, drawing on - -- his experience writing and maintaining Markdown implementations in several - languages, including the first Markdown parser not based on regular - expression substitutions ([pandoc](http://github.com/jgm/pandoc)) and - the first markdown parsers based on PEG grammars - ([peg-markdown](http://github.com/jgm/peg-markdown), - [lunamark](http://github.com/jgm/lunamark)) -- a detailed examination of the differences between existing Markdown - implementations using [BabelMark 2](http://johnmacfarlane.net/babelmark2/), - and -- extensive discussions with David Greenspan, Jeff Atwood, Vicent - Marti, Neil Williams, and Benjamin Dumke-von der Ehe. - -John MacFarlane was also responsible for the original versions of the -C and JavaScript implementations. The block parsing algorithm was -worked out together with David Greenspan. Vicent Marti -optimized the C implementation for performance, increasing its speed -tenfold. Kārlis Gaņģis helped work out a better parsing algorithm -for links and emphasis, eliminating several worst-case performance -issues. Nick Wellnhofer contributed many improvements, including -most of the C library's API and its test harness. Vitaly Puzrin -has offered much good advice about the JavaScript implementation. +John MacFarlane wrote the original library and program. +The block parsing algorithm was worked out together with David +Greenspan. Vicent Marti optimized the C implementation for +performance, increasing its speed tenfold. Kārlis Gaņģis helped +work out a better parsing algorithm for links and emphasis, +eliminating several worst-case performance issues. +Nick Wellnhofer contributed many improvements, including +most of the C library's API and its test harness. [cmake]: http://www.cmake.org/download/ -[pandoc]: http://johnmacfarlane.net/pandoc/ [re2c]: http://re2c.org - -- cgit 0.0.5-2-1-g0f52 From 63a4d269c56dfade77f9c51899b776b3d69bc66e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:33:22 -0800 Subject: Added reference to benchmarks in README. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 44ec5cfd00..750e56a25e 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,11 @@ and rendering the document to HTML or to an XML representation of the AST. It also provides a command-line program, `cmark`, for parsing and rendering CommonMark documents. +The library is fast, on par with [sundown]: see the [benchmarks]. + +[sundown]: https://github.com/vmg/sundown +[benchmarks]: benchmarks.md + Installing ---------- -- cgit 0.0.5-2-1-g0f52 From bc52bc756aaaa20d20d76dc2bc0f721f2801f9bb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 24 Jan 2015 21:47:46 -0800 Subject: Improved README with note on wrappers. --- README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 750e56a25e..61df75228e 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,18 @@ implementations in C and JavaScript. For more information, see . This repository contains the C reference implementation. -It provides a library with functions for parsing CommonMark -documents to an abstract syntax tree (AST), manipulating the AST, -and rendering the document to HTML or to an XML representation of the -AST. It also provides a command-line program, `cmark`, for -parsing and rendering CommonMark documents. - -The library is fast, on par with [sundown]: see the [benchmarks]. +It provides a shared library (`libcmark`) with functions for parsing +CommonMark documents to an abstract syntax tree (AST), manipulating +the AST, and rendering the document to HTML or to an XML +representation of the AST. It also provides a command-line program +(`cmark`) for parsing and rendering CommonMark documents. + +The library and program are written in standard C99 and have +no library dependencies. The parser is very fast, on par with +[sundown]: see the [benchmarks]. + +It is easy to use `libcmark` in python, lua, ruby, and other dynamic +languages: see the `wrappers/` subdirectory for some simple examples. [sundown]: https://github.com/vmg/sundown [benchmarks]: benchmarks.md -- cgit 0.0.5-2-1-g0f52 From 468ee8ad2fd23f7233d5bca8bc2cf88c3a9dd300 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Jan 2015 10:57:12 -0800 Subject: Removed JavaScript specific licenses in COPYING. --- COPYING | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) diff --git a/COPYING b/COPYING index 0bb344572f..ccc46f7384 100644 --- a/COPYING +++ b/COPYING @@ -108,56 +108,6 @@ DEALINGS IN THE SOFTWARE. ----- -normalize-reference.js is a slightly modified version of -https://github.com/dmoscrop/fold-case: - -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ------ - -The polyfill for String.fromCodePoint included in commonmark.js is -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ------ - The normalization code in runtests.py was derived from the markdowntest project, Copyright 2013 Karl Dubost: -- cgit 0.0.5-2-1-g0f52 From 58ce8ce3600a125aee8579a37b92474ebb4e8308 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Jan 2015 11:07:04 -0800 Subject: Use 2-clause BSD license. The legal implications of the 3rd clause seem too unclear. --- COPYING | 5 ----- 1 file changed, 5 deletions(-) diff --git a/COPYING b/COPYING index ccc46f7384..1dc93a377d 100644 --- a/COPYING +++ b/COPYING @@ -13,10 +13,6 @@ modification, are permitted provided that the following conditions are met: disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of John MacFarlane nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -120,4 +116,3 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -- cgit 0.0.5-2-1-g0f52 From b9622baf1ecea174a0093657f73971b693622a3a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Jan 2015 11:22:19 -0800 Subject: COPYING - added license for test/spec.txt and python code in test/. --- COPYING | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/COPYING b/COPYING index 1dc93a377d..8099de3018 100644 --- a/COPYING +++ b/COPYING @@ -111,8 +111,82 @@ The MIT License (MIT) Copyright (c) 2013 Karl Dubost +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + +The CommonMark spec (test/spec.txt) is + +Copyright (C) 2014-15 John MacFarlane + +Released under the Creative Commons CC-BY-SA 4.0 license: +. + +----- + +The test software in test/ is + +Copyright (c) 2014, John MacFarlane + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The normalization code in runtests.py was derived from the +markdowntest project, Copyright 2013 Karl Dubost: + +The MIT License (MIT) + +Copyright (c) 2013 Karl Dubost + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- cgit 0.0.5-2-1-g0f52 From b2c57d51f009af453321c9d14f5a06c0090b6c90 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Jan 2015 11:28:32 -0800 Subject: Fixed link to spec. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 61df75228e..f74351aa52 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ languages: see the `wrappers/` subdirectory for some simple examples. [sundown]: https://github.com/vmg/sundown [benchmarks]: benchmarks.md +[the spec]: http://spec.commonmark.org Installing ---------- -- cgit 0.0.5-2-1-g0f52 From 13b81edc2f1a7ac885aa50bcf41015e030473271 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Jan 2015 11:28:55 -0800 Subject: Fixed license in README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f74351aa52..c81db21f43 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ CommonMark ========== CommonMark is a rationalized version of Markdown syntax, -with a [spec][the spec] and BSD3-licensed reference +with a [spec][the spec] and BSD-licensed reference implementations in C and JavaScript. [Try it now!](http://spec.commonmark.org/dingus.html) -- cgit 0.0.5-2-1-g0f52 From c6aa2139eb2c62fc80f94d237aeb4847f7cd395e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Jan 2015 18:04:17 -0800 Subject: Adjust benchmarks for commonmark.js. --- benchmarks.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 6427ff60ec..fb4386f5f0 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -11,8 +11,8 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | cheapskate | 8.24 | | peg-markdown | 5.45 | | parsedown | 5.06 | -| **commonmark.js** | 2.09 | -| marked | 1.93 | +| marked | 1.94 | +| **commonmark.js** | 1.93 | | discount | 1.86 | | **cmark** | 0.37 | | sundown | 0.34 | -- cgit 0.0.5-2-1-g0f52 From 82d7fd56a60ba7ca1172fd66456451bb75bddee8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 28 Jan 2015 14:26:06 -0800 Subject: Added Profile build type, 'make prof' target. --- CMakeLists.txt | 2 +- Makefile | 6 ++++++ src/CMakeLists.txt | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 00c5d8fb4e..f681698ce8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,5 +20,5 @@ add_subdirectory(test testdir) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING - "Choose the type of build, options are: Debug Release." FORCE) + "Choose the type of build, options are: Debug Profile Release." FORCE) endif(NOT CMAKE_BUILD_TYPE) diff --git a/Makefile b/Makefile index 90990b1381..df9936730c 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,12 @@ debug: cmake .. -DCMAKE_BUILD_TYPE=Debug; \ make +prof: + mkdir -p $(BUILDDIR); \ + cd $(BUILDDIR); \ + cmake .. -DCMAKE_BUILD_TYPE=Profile; \ + make + mingw: mkdir -p $(MINGW_BUILDDIR); \ cd $(MINGW_BUILDDIR); \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 033a9bef9f..044b7e49d8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -68,6 +68,9 @@ set_target_properties(${PROGRAM} PROPERTIES set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -pg -DCMARK_DEBUG_NODES") set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -pg") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg") +set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") + if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -- cgit 0.0.5-2-1-g0f52 From ca13d6a2a9287459ff8d9ae94234c12bf95cf681 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 28 Jan 2015 14:45:59 -0800 Subject: Update cmark.3 man page. Only the date changed, but this is needed to avoid building the page on a git checkout. --- man/man3/cmark.3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 4b24391fbf..2c4dd14b99 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "January 23, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "January 28, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP -- cgit 0.0.5-2-1-g0f52 From 6947731fffec1a0ad51d5053d8c6ca17e8c1a5cd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 31 Jan 2015 20:25:48 -0800 Subject: Fixed autolink scanner to conform to the spec. Backslash escapes not allowed in autolinks. --- src/scanners.c | 11475 +++++++++++++++++++++++++++--------------------------- src/scanners.re | 2 +- 2 files changed, 5729 insertions(+), 5748 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 21c0744763..440cf83716 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -38,7 +38,7 @@ int _scan_autolink_uri(const unsigned char *p) 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -124,50 +124,50 @@ yy3: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy443; + case 'a': goto yy442; case 'H': - case 'h': goto yy442; + case 'h': goto yy441; case 'I': - case 'i': goto yy445; + case 'i': goto yy444; case 'O': - case 'o': goto yy441; + case 'o': goto yy440; case 'R': - case 'r': goto yy444; + case 'r': goto yy443; case 'V': - case 'v': goto yy440; + case 'v': goto yy439; default: goto yy2; } yy4: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy416; + case 'a': goto yy415; case 'I': - case 'i': goto yy415; + case 'i': goto yy414; case 'L': - case 'l': goto yy413; + case 'l': goto yy412; case 'N': - case 'n': goto yy414; + case 'n': goto yy413; case 'O': - case 'o': goto yy417; + case 'o': goto yy416; case 'T': - case 't': goto yy412; + case 't': goto yy411; case 'V': - case 'v': goto yy411; + case 'v': goto yy410; default: goto yy2; } yy5: yych = *(marker = ++p); if (yych <= 'M') { - if (yych == 'A') goto yy403; + if (yych == 'A') goto yy402; if (yych <= 'L') goto yy2; - goto yy402; + goto yy401; } else { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy403; + goto yy402; } else { - if (yych == 'm') goto yy402; + if (yych == 'm') goto yy401; goto yy2; } } @@ -175,21 +175,21 @@ yy6: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy384; + case 'a': goto yy383; case 'B': - case 'b': goto yy383; + case 'b': goto yy382; case 'C': - case 'c': goto yy382; + case 'c': goto yy381; case 'D': - case 'd': goto yy381; + case 'd': goto yy380; case 'F': - case 'f': goto yy380; + case 'f': goto yy379; case 'I': - case 'i': goto yy379; + case 'i': goto yy378; case 'P': - case 'p': goto yy378; + case 'p': goto yy377; case 'T': - case 't': goto yy377; + case 't': goto yy376; case 'W': case 'w': goto yy34; default: goto yy2; @@ -198,25 +198,25 @@ yy7: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'E') { - if (yych == 'A') goto yy364; + if (yych == 'A') goto yy363; if (yych <= 'D') goto yy2; - goto yy363; + goto yy362; } else { - if (yych == 'I') goto yy362; + if (yych == 'I') goto yy361; if (yych <= 'S') goto yy2; - goto yy365; + goto yy364; } } else { if (yych <= 'e') { - if (yych == 'a') goto yy364; + if (yych == 'a') goto yy363; if (yych <= 'd') goto yy2; - goto yy363; + goto yy362; } else { if (yych <= 'i') { if (yych <= 'h') goto yy2; - goto yy362; + goto yy361; } else { - if (yych == 't') goto yy365; + if (yych == 't') goto yy364; goto yy2; } } @@ -225,15 +225,15 @@ yy8: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy347; + case 'e': goto yy346; case 'G': case 'g': goto yy34; case 'I': - case 'i': goto yy345; + case 'i': goto yy344; case 'O': - case 'o': goto yy346; + case 'o': goto yy345; case 'T': - case 't': goto yy344; + case 't': goto yy343; default: goto yy2; } yy9: @@ -241,18 +241,18 @@ yy9: if (yych <= 'S') { if (yych <= '3') { if (yych <= '2') goto yy2; - goto yy340; + goto yy339; } else { - if (yych == 'C') goto yy338; + if (yych == 'C') goto yy337; goto yy2; } } else { if (yych <= 'c') { - if (yych <= 'T') goto yy339; + if (yych <= 'T') goto yy338; if (yych <= 'b') goto yy2; - goto yy338; + goto yy337; } else { - if (yych == 't') goto yy339; + if (yych == 't') goto yy338; goto yy2; } } @@ -260,33 +260,33 @@ yy10: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy320; + case 'a': goto yy319; case 'C': - case 'c': goto yy317; + case 'c': goto yy316; case 'M': - case 'm': goto yy319; + case 'm': goto yy318; case 'N': - case 'n': goto yy318; + case 'n': goto yy317; case 'P': - case 'p': goto yy316; + case 'p': goto yy315; case 'R': - case 'r': goto yy315; + case 'r': goto yy314; case 'T': - case 't': goto yy314; + case 't': goto yy313; default: goto yy2; } yy11: yych = *(marker = ++p); if (yych <= 'D') { - if (yych == 'A') goto yy308; + if (yych == 'A') goto yy307; if (yych <= 'C') goto yy2; - goto yy307; + goto yy306; } else { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy308; + goto yy307; } else { - if (yych == 'd') goto yy307; + if (yych == 'd') goto yy306; goto yy2; } } @@ -294,50 +294,50 @@ yy12: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy274; + case 'a': goto yy273; case 'E': - case 'e': goto yy273; + case 'e': goto yy272; case 'I': - case 'i': goto yy276; + case 'i': goto yy275; case 'M': - case 'm': goto yy272; + case 'm': goto yy271; case 'S': - case 's': goto yy271; + case 's': goto yy270; case 'T': - case 't': goto yy275; + case 't': goto yy274; case 'U': - case 'u': goto yy270; + case 'u': goto yy269; case 'V': - case 'v': goto yy269; + case 'v': goto yy268; default: goto yy2; } yy13: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy264; + case 'e': goto yy263; case 'F': - case 'f': goto yy263; + case 'f': goto yy262; case 'I': - case 'i': goto yy262; + case 'i': goto yy261; case 'N': - case 'n': goto yy261; + case 'n': goto yy260; case 'O': - case 'o': goto yy260; + case 'o': goto yy259; default: goto yy2; } yy14: yych = *(marker = ++p); if (yych <= 'P') { - if (yych == 'I') goto yy246; + if (yych == 'I') goto yy245; if (yych <= 'O') goto yy2; - goto yy247; + goto yy246; } else { if (yych <= 'i') { if (yych <= 'h') goto yy2; - goto yy246; + goto yy245; } else { - if (yych == 'p') goto yy247; + if (yych == 'p') goto yy246; goto yy2; } } @@ -345,35 +345,35 @@ yy15: yych = *(marker = ++p); if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'A') goto yy228; + if (yych == 'A') goto yy227; if (yych <= 'K') goto yy2; - goto yy227; + goto yy226; } else { if (yych <= 'O') { if (yych <= 'N') goto yy2; - goto yy229; + goto yy228; } else { if (yych <= 'Q') goto yy2; - if (yych <= 'R') goto yy226; - goto yy225; + if (yych <= 'R') goto yy225; + goto yy224; } } } else { if (yych <= 'n') { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy228; + goto yy227; } else { - if (yych == 'l') goto yy227; + if (yych == 'l') goto yy226; goto yy2; } } else { if (yych <= 'q') { - if (yych <= 'o') goto yy229; + if (yych <= 'o') goto yy228; goto yy2; } else { - if (yych <= 'r') goto yy226; - if (yych <= 's') goto yy225; + if (yych <= 'r') goto yy225; + if (yych <= 's') goto yy224; goto yy2; } } @@ -382,23 +382,23 @@ yy16: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'L') { - if (yych == 'E') goto yy215; + if (yych == 'E') goto yy214; goto yy2; } else { - if (yych <= 'M') goto yy214; + if (yych <= 'M') goto yy213; if (yych <= 'R') goto yy2; - if (yych <= 'S') goto yy213; - goto yy212; + if (yych <= 'S') goto yy212; + goto yy211; } } else { if (yych <= 'm') { - if (yych == 'e') goto yy215; + if (yych == 'e') goto yy214; if (yych <= 'l') goto yy2; - goto yy214; + goto yy213; } else { if (yych <= 'r') goto yy2; - if (yych <= 's') goto yy213; - if (yych <= 't') goto yy212; + if (yych <= 's') goto yy212; + if (yych <= 't') goto yy211; goto yy2; } } @@ -406,48 +406,48 @@ yy17: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy168; + case 'e': goto yy167; case 'F': - case 'f': goto yy167; + case 'f': goto yy166; case 'G': - case 'g': goto yy166; + case 'g': goto yy165; case 'H': - case 'h': goto yy171; + case 'h': goto yy170; case 'I': - case 'i': goto yy170; + case 'i': goto yy169; case 'K': - case 'k': goto yy165; + case 'k': goto yy164; case 'M': - case 'm': goto yy164; + case 'm': goto yy163; case 'N': - case 'n': goto yy169; + case 'n': goto yy168; case 'O': - case 'o': goto yy163; + case 'o': goto yy162; case 'P': - case 'p': goto yy162; + case 'p': goto yy161; case 'S': - case 's': goto yy161; + case 's': goto yy160; case 'T': - case 't': goto yy160; + case 't': goto yy159; case 'V': - case 'v': goto yy159; + case 'v': goto yy158; default: goto yy2; } yy18: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy135; + case 'a': goto yy134; case 'E': - case 'e': goto yy131; + case 'e': goto yy130; case 'F': - case 'f': goto yy134; + case 'f': goto yy133; case 'H': - case 'h': goto yy130; + case 'h': goto yy129; case 'I': - case 'i': goto yy132; + case 'i': goto yy131; case 'N': - case 'n': goto yy133; + case 'n': goto yy132; case 'V': case 'v': goto yy34; default: goto yy2; @@ -456,25 +456,25 @@ yy19: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'N') { - if (yych == 'D') goto yy122; + if (yych == 'D') goto yy121; if (yych <= 'M') goto yy2; - goto yy121; + goto yy120; } else { - if (yych == 'R') goto yy123; + if (yych == 'R') goto yy122; if (yych <= 'S') goto yy2; - goto yy120; + goto yy119; } } else { if (yych <= 'n') { - if (yych == 'd') goto yy122; + if (yych == 'd') goto yy121; if (yych <= 'm') goto yy2; - goto yy121; + goto yy120; } else { if (yych <= 'r') { if (yych <= 'q') goto yy2; - goto yy123; + goto yy122; } else { - if (yych == 't') goto yy120; + if (yych == 't') goto yy119; goto yy2; } } @@ -482,15 +482,15 @@ yy19: yy20: yych = *(marker = ++p); if (yych <= 'I') { - if (yych == 'E') goto yy104; + if (yych == 'E') goto yy103; if (yych <= 'H') goto yy2; - goto yy103; + goto yy102; } else { if (yych <= 'e') { if (yych <= 'd') goto yy2; - goto yy104; + goto yy103; } else { - if (yych == 'i') goto yy103; + if (yych == 'i') goto yy102; goto yy2; } } @@ -498,22 +498,22 @@ yy21: yych = *(marker = ++p); if (yych <= 'Y') { if (yych <= 'R') { - if (yych == 'E') goto yy93; + if (yych == 'E') goto yy92; goto yy2; } else { - if (yych <= 'S') goto yy94; - if (yych <= 'T') goto yy92; + if (yych <= 'S') goto yy93; + if (yych <= 'T') goto yy91; if (yych <= 'X') goto yy2; - goto yy91; + goto yy90; } } else { if (yych <= 's') { - if (yych == 'e') goto yy93; + if (yych == 'e') goto yy92; if (yych <= 'r') goto yy2; - goto yy94; + goto yy93; } else { - if (yych <= 't') goto yy92; - if (yych == 'y') goto yy91; + if (yych <= 't') goto yy91; + if (yych == 'y') goto yy90; goto yy2; } } @@ -521,68 +521,68 @@ yy22: yych = *(marker = ++p); if (yych <= 'R') { if (yych <= 'F') { - if (yych == 'C') goto yy70; + if (yych == 'C') goto yy69; if (yych <= 'E') goto yy2; - goto yy68; + goto yy67; } else { - if (yych == 'M') goto yy69; + if (yych == 'M') goto yy68; if (yych <= 'Q') goto yy2; - goto yy67; + goto yy66; } } else { if (yych <= 'f') { - if (yych == 'c') goto yy70; + if (yych == 'c') goto yy69; if (yych <= 'e') goto yy2; - goto yy68; + goto yy67; } else { if (yych <= 'm') { if (yych <= 'l') goto yy2; - goto yy69; + goto yy68; } else { - if (yych == 'r') goto yy67; + if (yych == 'r') goto yy66; goto yy2; } } } yy23: yych = *(marker = ++p); - if (yych == '3') goto yy62; + if (yych == '3') goto yy61; goto yy2; yy24: yych = *(marker = ++p); if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy52; + if (yych == 'E') goto yy51; goto yy2; } else { - if (yych <= 'I') goto yy51; + if (yych <= 'I') goto yy50; if (yych <= 'N') goto yy2; - goto yy50; + goto yy49; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy52; + if (yych == 'e') goto yy51; goto yy2; } else { - if (yych <= 'i') goto yy51; - if (yych == 'o') goto yy50; + if (yych <= 'i') goto yy50; + if (yych == 'o') goto yy49; goto yy2; } } yy25: yych = *(marker = ++p); - if (yych == 'D') goto yy48; - if (yych == 'd') goto yy48; + if (yych == 'D') goto yy47; + if (yych == 'd') goto yy47; goto yy2; yy26: yych = *(marker = ++p); - if (yych == 'E') goto yy43; - if (yych == 'e') goto yy43; + if (yych == 'E') goto yy42; + if (yych == 'e') goto yy42; goto yy2; yy27: yych = *(marker = ++p); - if (yych == 'U') goto yy40; - if (yych == 'u') goto yy40; + if (yych == 'U') goto yy39; + if (yych == 'u') goto yy39; goto yy2; yy28: yych = *(marker = ++p); @@ -617,122 +617,103 @@ yy35: goto yy35; } if (yych <= '=') goto yy31; - if (yych <= '>') goto yy38; - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= ' ') goto yy31; - if (yych <= '/') goto yy35; - if (yych <= '9') goto yy31; - goto yy35; - } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy31; - goto yy35; - } else { - if (yych <= 'z') goto yy31; - if (yych <= '~') goto yy35; - goto yy31; - } - } -yy38: ++p; { return (p - start); } -yy40: +yy39: yych = *++p; - if (yych == 'E') goto yy41; + if (yych == 'E') goto yy40; if (yych != 'e') goto yy31; -yy41: +yy40: yych = *++p; - if (yych == 'R') goto yy42; + if (yych == 'R') goto yy41; if (yych != 'r') goto yy31; -yy42: +yy41: yych = *++p; if (yych == 'Y') goto yy34; if (yych == 'y') goto yy34; goto yy31; -yy43: +yy42: yych = *++p; - if (yych == 'Y') goto yy44; + if (yych == 'Y') goto yy43; if (yych != 'y') goto yy31; -yy44: +yy43: yych = *++p; - if (yych == 'P') goto yy45; + if (yych == 'P') goto yy44; if (yych != 'p') goto yy31; -yy45: +yy44: yych = *++p; - if (yych == 'A') goto yy46; + if (yych == 'A') goto yy45; if (yych != 'a') goto yy31; -yy46: +yy45: yych = *++p; - if (yych == 'R') goto yy47; + if (yych == 'R') goto yy46; if (yych != 'r') goto yy31; -yy47: +yy46: yych = *++p; if (yych == 'C') goto yy34; if (yych == 'c') goto yy34; goto yy31; -yy48: +yy47: yych = *++p; if (yych != '2') goto yy31; yych = *++p; if (yych == 'K') goto yy34; if (yych == 'k') goto yy34; goto yy31; -yy50: +yy49: yych = *++p; - if (yych == 'L') goto yy61; - if (yych == 'l') goto yy61; + if (yych == 'L') goto yy60; + if (yych == 'l') goto yy60; goto yy31; -yy51: +yy50: yych = *++p; - if (yych == 'T') goto yy57; - if (yych == 't') goto yy57; + if (yych == 'T') goto yy56; + if (yych == 't') goto yy56; goto yy31; -yy52: +yy51: yych = *++p; - if (yych == 'S') goto yy53; + if (yych == 'S') goto yy52; if (yych != 's') goto yy31; -yy53: +yy52: yych = *++p; - if (yych == 'H') goto yy54; + if (yych == 'H') goto yy53; if (yych != 'h') goto yy31; -yy54: +yy53: yych = *++p; - if (yych == 'A') goto yy55; + if (yych == 'A') goto yy54; if (yych != 'a') goto yy31; -yy55: +yy54: yych = *++p; - if (yych == 'R') goto yy56; + if (yych == 'R') goto yy55; if (yych != 'r') goto yy31; -yy56: +yy55: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy57: +yy56: yych = *++p; - if (yych == 'C') goto yy58; + if (yych == 'C') goto yy57; if (yych != 'c') goto yy31; -yy58: +yy57: yych = *++p; - if (yych == 'O') goto yy59; + if (yych == 'O') goto yy58; if (yych != 'o') goto yy31; -yy59: +yy58: yych = *++p; - if (yych == 'I') goto yy60; + if (yych == 'I') goto yy59; if (yych != 'i') goto yy31; -yy60: +yy59: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy61: +yy60: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy62: +yy61: yych = *++p; if (yych != '9') goto yy31; yych = *++p; @@ -747,106 +728,106 @@ yy62: if (yych <= 'q') goto yy31; if (yych <= 's') goto yy34; goto yy31; -yy67: +yy66: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy68: +yy67: yych = *++p; - if (yych == 'I') goto yy89; - if (yych == 'i') goto yy89; + if (yych == 'I') goto yy88; + if (yych == 'i') goto yy88; goto yy31; -yy69: +yy68: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy79; + if (yych == 'L') goto yy78; if (yych <= 'O') goto yy31; - goto yy80; + goto yy79; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy79; + goto yy78; } else { - if (yych == 'p') goto yy80; + if (yych == 'p') goto yy79; goto yy31; } } -yy70: +yy69: yych = *++p; - if (yych == 'O') goto yy71; + if (yych == 'O') goto yy70; if (yych != 'o') goto yy31; -yy71: +yy70: yych = *++p; - if (yych == 'N') goto yy72; + if (yych == 'N') goto yy71; if (yych != 'n') goto yy31; -yy72: +yy71: yych = *++p; - if (yych == '-') goto yy73; + if (yych == '-') goto yy72; if (yych == ':') goto yy35; goto yy31; -yy73: +yy72: yych = *++p; - if (yych == 'U') goto yy74; + if (yych == 'U') goto yy73; if (yych != 'u') goto yy31; -yy74: +yy73: yych = *++p; - if (yych == 'S') goto yy75; + if (yych == 'S') goto yy74; if (yych != 's') goto yy31; -yy75: +yy74: yych = *++p; - if (yych == 'E') goto yy76; + if (yych == 'E') goto yy75; if (yych != 'e') goto yy31; -yy76: +yy75: yych = *++p; - if (yych == 'R') goto yy77; + if (yych == 'R') goto yy76; if (yych != 'r') goto yy31; -yy77: +yy76: yych = *++p; - if (yych == 'I') goto yy78; + if (yych == 'I') goto yy77; if (yych != 'i') goto yy31; -yy78: +yy77: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy79: +yy78: yych = *++p; - if (yych == 'R') goto yy81; - if (yych == 'r') goto yy81; + if (yych == 'R') goto yy80; + if (yych == 'r') goto yy80; goto yy31; -yy80: +yy79: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy81: +yy80: yych = *++p; - if (yych == 'P') goto yy82; + if (yych == 'P') goto yy81; if (yych != 'p') goto yy31; -yy82: +yy81: yych = *++p; - if (yych == 'C') goto yy83; + if (yych == 'C') goto yy82; if (yych != 'c') goto yy31; -yy83: +yy82: yych = *++p; if (yych != '.') goto yy31; yych = *++p; - if (yych == 'B') goto yy85; + if (yych == 'B') goto yy84; if (yych != 'b') goto yy31; +yy84: + yych = *++p; + if (yych == 'E') goto yy85; + if (yych != 'e') goto yy31; yy85: yych = *++p; if (yych == 'E') goto yy86; if (yych != 'e') goto yy31; yy86: yych = *++p; - if (yych == 'E') goto yy87; - if (yych != 'e') goto yy31; -yy87: - yych = *++p; - if (yych == 'P') goto yy88; + if (yych == 'P') goto yy87; if (yych != 'p') goto yy31; -yy88: +yy87: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -856,31 +837,31 @@ yy88: if (yych == 's') goto yy34; goto yy31; } -yy89: +yy88: yych = *++p; - if (yych == 'R') goto yy90; + if (yych == 'R') goto yy89; if (yych != 'r') goto yy31; -yy90: +yy89: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; +yy90: + yych = *++p; + if (yych == 'C') goto yy98; + if (yych == 'c') goto yy98; + goto yy31; yy91: yych = *++p; - if (yych == 'C') goto yy99; - if (yych == 'c') goto yy99; + if (yych == 'A') goto yy97; + if (yych == 'a') goto yy97; goto yy31; yy92: yych = *++p; - if (yych == 'A') goto yy98; - if (yych == 'a') goto yy98; + if (yych == 'B') goto yy94; + if (yych == 'b') goto yy94; goto yy31; yy93: - yych = *++p; - if (yych == 'B') goto yy95; - if (yych == 'b') goto yy95; - goto yy31; -yy94: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -890,152 +871,152 @@ yy94: if (yych == 's') goto yy34; goto yy31; } -yy95: +yy94: yych = *++p; - if (yych == 'C') goto yy96; + if (yych == 'C') goto yy95; if (yych != 'c') goto yy31; -yy96: +yy95: yych = *++p; - if (yych == 'A') goto yy97; + if (yych == 'A') goto yy96; if (yych != 'a') goto yy31; -yy97: +yy96: yych = *++p; if (yych == 'L') goto yy34; if (yych == 'l') goto yy34; goto yy31; -yy98: +yy97: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy99: +yy98: yych = *++p; - if (yych == 'I') goto yy100; + if (yych == 'I') goto yy99; if (yych != 'i') goto yy31; -yy100: +yy99: yych = *++p; - if (yych == 'W') goto yy101; + if (yych == 'W') goto yy100; if (yych != 'w') goto yy31; -yy101: +yy100: yych = *++p; - if (yych == 'Y') goto yy102; + if (yych == 'Y') goto yy101; if (yych != 'y') goto yy31; -yy102: +yy101: yych = *++p; if (yych == 'G') goto yy34; if (yych == 'g') goto yy34; goto yy31; -yy103: +yy102: yych = *++p; - if (yych == 'E') goto yy112; - if (yych == 'e') goto yy112; + if (yych == 'E') goto yy111; + if (yych == 'e') goto yy111; goto yy31; -yy104: +yy103: yych = *++p; if (yych <= 'N') { if (yych <= 'L') goto yy31; - if (yych >= 'N') goto yy106; + if (yych >= 'N') goto yy105; } else { if (yych <= 'l') goto yy31; - if (yych <= 'm') goto yy105; - if (yych <= 'n') goto yy106; + if (yych <= 'm') goto yy104; + if (yych <= 'n') goto yy105; goto yy31; } -yy105: +yy104: yych = *++p; - if (yych == 'M') goto yy111; - if (yych == 'm') goto yy111; + if (yych == 'M') goto yy110; + if (yych == 'm') goto yy110; goto yy31; -yy106: +yy105: yych = *++p; - if (yych == 'T') goto yy107; + if (yych == 'T') goto yy106; if (yych != 't') goto yy31; -yy107: +yy106: yych = *++p; - if (yych == 'R') goto yy108; + if (yych == 'R') goto yy107; if (yych != 'r') goto yy31; -yy108: +yy107: yych = *++p; - if (yych == 'I') goto yy109; + if (yych == 'I') goto yy108; if (yych != 'i') goto yy31; -yy109: +yy108: yych = *++p; - if (yych == 'L') goto yy110; + if (yych == 'L') goto yy109; if (yych != 'l') goto yy31; -yy110: +yy109: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy111: +yy110: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy112: +yy111: yych = *++p; - if (yych == 'W') goto yy113; + if (yych == 'W') goto yy112; if (yych != 'w') goto yy31; -yy113: +yy112: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'S') goto yy115; + if (yych == 'S') goto yy114; if (yych != 's') goto yy31; -yy115: +yy114: yych = *++p; - if (yych == 'O') goto yy116; + if (yych == 'O') goto yy115; if (yych != 'o') goto yy31; -yy116: +yy115: yych = *++p; - if (yych == 'U') goto yy117; + if (yych == 'U') goto yy116; if (yych != 'u') goto yy31; -yy117: +yy116: yych = *++p; - if (yych == 'R') goto yy118; + if (yych == 'R') goto yy117; if (yych != 'r') goto yy31; -yy118: +yy117: yych = *++p; - if (yych == 'C') goto yy119; + if (yych == 'C') goto yy118; if (yych != 'c') goto yy31; -yy119: +yy118: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy120: +yy119: yych = *++p; - if (yych == '2') goto yy127; + if (yych == '2') goto yy126; goto yy31; -yy121: +yy120: yych = *++p; - if (yych == 'R') goto yy124; - if (yych == 'r') goto yy124; + if (yych == 'R') goto yy123; + if (yych == 'r') goto yy123; goto yy31; -yy122: +yy121: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy123: +yy122: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy124: +yy123: yych = *++p; - if (yych == 'E') goto yy125; + if (yych == 'E') goto yy124; if (yych != 'e') goto yy31; -yy125: +yy124: yych = *++p; - if (yych == 'A') goto yy126; + if (yych == 'A') goto yy125; if (yych != 'a') goto yy31; -yy126: +yy125: yych = *++p; if (yych == 'L') goto yy34; if (yych == 'l') goto yy34; goto yy31; -yy127: +yy126: yych = *++p; if (yych != '0') goto yy31; yych = *++p; @@ -1043,51 +1024,51 @@ yy127: yych = *++p; if (yych == '4') goto yy34; goto yy31; -yy130: +yy129: yych = *++p; - if (yych == 'I') goto yy149; - if (yych == 'i') goto yy149; + if (yych == 'I') goto yy148; + if (yych == 'i') goto yy148; goto yy31; -yy131: +yy130: yych = *++p; if (yych <= 'L') { - if (yych == 'A') goto yy141; + if (yych == 'A') goto yy140; if (yych <= 'K') goto yy31; - goto yy140; + goto yy139; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy141; + goto yy140; } else { - if (yych == 'l') goto yy140; + if (yych == 'l') goto yy139; goto yy31; } } -yy132: +yy131: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy133: +yy132: yych = *++p; - if (yych == '3') goto yy137; + if (yych == '3') goto yy136; goto yy31; -yy134: +yy133: yych = *++p; - if (yych == 'T') goto yy136; - if (yych == 't') goto yy136; + if (yych == 'T') goto yy135; + if (yych == 't') goto yy135; goto yy31; -yy135: +yy134: yych = *++p; if (yych == 'G') goto yy34; if (yych == 'g') goto yy34; goto yy31; -yy136: +yy135: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy137: +yy136: yych = *++p; if (yych != '2') goto yy31; yych = *++p; @@ -1095,139 +1076,139 @@ yy137: yych = *++p; if (yych == '0') goto yy34; goto yy31; -yy140: +yy139: yych = *++p; if (yych <= 'M') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'N') goto yy147; - if (yych == 'n') goto yy147; + if (yych <= 'N') goto yy146; + if (yych == 'n') goto yy146; goto yy31; } -yy141: +yy140: yych = *++p; - if (yych == 'M') goto yy142; + if (yych == 'M') goto yy141; if (yych != 'm') goto yy31; -yy142: +yy141: yych = *++p; - if (yych == 'S') goto yy143; + if (yych == 'S') goto yy142; if (yych != 's') goto yy31; -yy143: +yy142: yych = *++p; - if (yych == 'P') goto yy144; + if (yych == 'P') goto yy143; if (yych != 'p') goto yy31; -yy144: +yy143: yych = *++p; - if (yych == 'E') goto yy145; + if (yych == 'E') goto yy144; if (yych != 'e') goto yy31; -yy145: +yy144: yych = *++p; - if (yych == 'A') goto yy146; + if (yych == 'A') goto yy145; if (yych != 'a') goto yy31; -yy146: +yy145: yych = *++p; if (yych == 'K') goto yy34; if (yych == 'k') goto yy34; goto yy31; -yy147: +yy146: yych = *++p; - if (yych == 'E') goto yy148; + if (yych == 'E') goto yy147; if (yych != 'e') goto yy31; -yy148: +yy147: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy149: +yy148: yych = *++p; if (yych <= 'S') { - if (yych == 'N') goto yy150; + if (yych == 'N') goto yy149; if (yych <= 'R') goto yy31; - goto yy151; + goto yy150; } else { if (yych <= 'n') { if (yych <= 'm') goto yy31; } else { - if (yych == 's') goto yy151; + if (yych == 's') goto yy150; goto yy31; } } -yy150: +yy149: yych = *++p; - if (yych == 'G') goto yy158; - if (yych == 'g') goto yy158; + if (yych == 'G') goto yy157; + if (yych == 'g') goto yy157; goto yy31; -yy151: +yy150: yych = *++p; - if (yych == 'M') goto yy152; + if (yych == 'M') goto yy151; if (yych != 'm') goto yy31; -yy152: +yy151: yych = *++p; - if (yych == 'E') goto yy153; + if (yych == 'E') goto yy152; if (yych != 'e') goto yy31; +yy152: + yych = *++p; + if (yych == 'S') goto yy153; + if (yych != 's') goto yy31; yy153: yych = *++p; if (yych == 'S') goto yy154; if (yych != 's') goto yy31; yy154: yych = *++p; - if (yych == 'S') goto yy155; - if (yych != 's') goto yy31; -yy155: - yych = *++p; - if (yych == 'A') goto yy156; + if (yych == 'A') goto yy155; if (yych != 'a') goto yy31; -yy156: +yy155: yych = *++p; - if (yych == 'G') goto yy157; + if (yych == 'G') goto yy156; if (yych != 'g') goto yy31; -yy157: +yy156: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy158: +yy157: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy159: +yy158: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy160: +yy159: yych = *++p; - if (yych == 'E') goto yy210; - if (yych == 'e') goto yy210; + if (yych == 'E') goto yy209; + if (yych == 'e') goto yy209; goto yy31; -yy161: +yy160: yych = *++p; if (yych == 'H') goto yy34; if (yych == 'h') goto yy34; goto yy31; -yy162: +yy161: yych = *++p; - if (yych == 'O') goto yy206; - if (yych == 'o') goto yy206; + if (yych == 'O') goto yy205; + if (yych == 'o') goto yy205; goto yy31; -yy163: +yy162: yych = *++p; if (yych <= 'L') { - if (yych == 'A') goto yy196; + if (yych == 'A') goto yy195; if (yych <= 'K') goto yy31; - goto yy197; + goto yy196; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy196; + goto yy195; } else { - if (yych == 'l') goto yy197; + if (yych == 'l') goto yy196; goto yy31; } } -yy164: +yy163: yych = *++p; if (yych <= 'S') { if (yych == 'B') goto yy34; @@ -1242,81 +1223,81 @@ yy164: goto yy31; } } -yy165: +yy164: yych = *++p; - if (yych == 'Y') goto yy194; - if (yych == 'y') goto yy194; + if (yych == 'Y') goto yy193; + if (yych == 'y') goto yy193; goto yy31; -yy166: +yy165: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy167: +yy166: yych = *++p; - if (yych == 'T') goto yy193; - if (yych == 't') goto yy193; + if (yych == 'T') goto yy192; + if (yych == 't') goto yy192; goto yy31; -yy168: +yy167: yych = *++p; if (yych <= 'S') { if (yych <= 'C') { if (yych <= 'B') goto yy31; - goto yy180; + goto yy179; } else { if (yych <= 'Q') goto yy31; - if (yych <= 'R') goto yy178; - goto yy179; + if (yych <= 'R') goto yy177; + goto yy178; } } else { if (yych <= 'q') { - if (yych == 'c') goto yy180; + if (yych == 'c') goto yy179; goto yy31; } else { - if (yych <= 'r') goto yy178; - if (yych <= 's') goto yy179; + if (yych <= 'r') goto yy177; + if (yych <= 's') goto yy178; goto yy31; } } -yy169: +yy168: yych = *++p; - if (yych == 'M') goto yy177; - if (yych == 'm') goto yy177; + if (yych == 'M') goto yy176; + if (yych == 'm') goto yy176; goto yy31; -yy170: +yy169: yych = *++p; if (yych <= 'P') { - if (yych == 'E') goto yy174; + if (yych == 'E') goto yy173; if (yych <= 'O') goto yy31; - goto yy175; + goto yy174; } else { if (yych <= 'e') { if (yych <= 'd') goto yy31; - goto yy174; + goto yy173; } else { - if (yych == 'p') goto yy175; + if (yych == 'p') goto yy174; goto yy31; } } +yy170: + yych = *++p; + if (yych == 'T') goto yy171; + if (yych != 't') goto yy31; yy171: yych = *++p; if (yych == 'T') goto yy172; if (yych != 't') goto yy31; yy172: - yych = *++p; - if (yych == 'T') goto yy173; - if (yych != 't') goto yy31; -yy173: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy174: +yy173: yych = *++p; - if (yych == 'V') goto yy176; - if (yych == 'v') goto yy176; + if (yych == 'V') goto yy175; + if (yych == 'v') goto yy175; goto yy31; -yy175: +yy174: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -1326,132 +1307,132 @@ yy175: if (yych == 's') goto yy34; goto yy31; } -yy176: +yy175: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy177: +yy176: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy178: +yy177: yych = *++p; - if (yych == 'V') goto yy190; - if (yych == 'v') goto yy190; + if (yych == 'V') goto yy189; + if (yych == 'v') goto yy189; goto yy31; -yy179: +yy178: yych = *++p; - if (yych == 'S') goto yy187; - if (yych == 's') goto yy187; + if (yych == 'S') goto yy186; + if (yych == 's') goto yy186; goto yy31; -yy180: +yy179: yych = *++p; - if (yych == 'O') goto yy181; + if (yych == 'O') goto yy180; if (yych != 'o') goto yy31; -yy181: +yy180: yych = *++p; - if (yych == 'N') goto yy182; + if (yych == 'N') goto yy181; if (yych != 'n') goto yy31; -yy182: +yy181: yych = *++p; - if (yych == 'D') goto yy183; + if (yych == 'D') goto yy182; if (yych != 'd') goto yy31; -yy183: +yy182: yych = *++p; - if (yych == 'L') goto yy184; + if (yych == 'L') goto yy183; if (yych != 'l') goto yy31; -yy184: +yy183: yych = *++p; - if (yych == 'I') goto yy185; + if (yych == 'I') goto yy184; if (yych != 'i') goto yy31; -yy185: +yy184: yych = *++p; - if (yych == 'F') goto yy186; + if (yych == 'F') goto yy185; if (yych != 'f') goto yy31; -yy186: +yy185: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy187: +yy186: yych = *++p; - if (yych == 'I') goto yy188; + if (yych == 'I') goto yy187; if (yych != 'i') goto yy31; -yy188: +yy187: yych = *++p; - if (yych == 'O') goto yy189; + if (yych == 'O') goto yy188; if (yych != 'o') goto yy31; -yy189: +yy188: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy190: +yy189: yych = *++p; - if (yych == 'I') goto yy191; + if (yych == 'I') goto yy190; if (yych != 'i') goto yy31; -yy191: +yy190: yych = *++p; - if (yych == 'C') goto yy192; + if (yych == 'C') goto yy191; if (yych != 'c') goto yy31; -yy192: +yy191: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy193: +yy192: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy194: +yy193: yych = *++p; - if (yych == 'P') goto yy195; + if (yych == 'P') goto yy194; if (yych != 'p') goto yy31; -yy195: +yy194: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy196: +yy195: yych = *++p; - if (yych == 'P') goto yy200; - if (yych == 'p') goto yy200; + if (yych == 'P') goto yy199; + if (yych == 'p') goto yy199; goto yy31; -yy197: +yy196: yych = *++p; - if (yych == 'D') goto yy198; + if (yych == 'D') goto yy197; if (yych != 'd') goto yy31; -yy198: +yy197: yych = *++p; - if (yych == 'A') goto yy199; + if (yych == 'A') goto yy198; if (yych != 'a') goto yy31; -yy199: +yy198: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy200: +yy199: yych = *++p; if (yych != '.') goto yy31; yych = *++p; - if (yych == 'B') goto yy202; + if (yych == 'B') goto yy201; if (yych != 'b') goto yy31; +yy201: + yych = *++p; + if (yych == 'E') goto yy202; + if (yych != 'e') goto yy31; yy202: yych = *++p; if (yych == 'E') goto yy203; if (yych != 'e') goto yy31; yy203: yych = *++p; - if (yych == 'E') goto yy204; - if (yych != 'e') goto yy31; -yy204: - yych = *++p; - if (yych == 'P') goto yy205; + if (yych == 'P') goto yy204; if (yych != 'p') goto yy31; -yy205: +yy204: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -1461,290 +1442,290 @@ yy205: if (yych == 's') goto yy34; goto yy31; } -yy206: +yy205: yych = *++p; - if (yych == 'T') goto yy207; + if (yych == 'T') goto yy206; if (yych != 't') goto yy31; -yy207: +yy206: yych = *++p; - if (yych == 'I') goto yy208; + if (yych == 'I') goto yy207; if (yych != 'i') goto yy31; -yy208: +yy207: yych = *++p; - if (yych == 'F') goto yy209; + if (yych == 'F') goto yy208; if (yych != 'f') goto yy31; -yy209: +yy208: yych = *++p; if (yych == 'Y') goto yy34; if (yych == 'y') goto yy34; goto yy31; -yy210: +yy209: yych = *++p; - if (yych == 'A') goto yy211; + if (yych == 'A') goto yy210; if (yych != 'a') goto yy31; -yy211: +yy210: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy212: +yy211: yych = *++p; if (yych <= 'S') { - if (yych == 'M') goto yy224; + if (yych == 'M') goto yy223; if (yych <= 'R') goto yy31; - goto yy223; + goto yy222; } else { if (yych <= 'm') { if (yych <= 'l') goto yy31; - goto yy224; + goto yy223; } else { - if (yych == 's') goto yy223; + if (yych == 's') goto yy222; goto yy31; } } -yy213: +yy212: yych = *++p; - if (yych == 'Y') goto yy221; - if (yych == 'y') goto yy221; + if (yych == 'Y') goto yy220; + if (yych == 'y') goto yy220; goto yy31; -yy214: +yy213: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy215: +yy214: yych = *++p; - if (yych == 'S') goto yy216; + if (yych == 'S') goto yy215; if (yych != 's') goto yy31; -yy216: +yy215: yych = *++p; if (yych <= 'N') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'O') goto yy217; + if (yych <= 'O') goto yy216; if (yych != 'o') goto yy31; } -yy217: +yy216: yych = *++p; - if (yych == 'U') goto yy218; + if (yych == 'U') goto yy217; if (yych != 'u') goto yy31; -yy218: +yy217: yych = *++p; - if (yych == 'R') goto yy219; + if (yych == 'R') goto yy218; if (yych != 'r') goto yy31; -yy219: +yy218: yych = *++p; - if (yych == 'C') goto yy220; + if (yych == 'C') goto yy219; if (yych != 'c') goto yy31; -yy220: +yy219: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy221: +yy220: yych = *++p; - if (yych == 'N') goto yy222; + if (yych == 'N') goto yy221; if (yych != 'n') goto yy31; -yy222: +yy221: yych = *++p; if (yych == 'C') goto yy34; if (yych == 'c') goto yy34; goto yy31; -yy223: +yy222: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy224: +yy223: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy225: +yy224: yych = *++p; - if (yych == 'Y') goto yy245; - if (yych == 'y') goto yy245; + if (yych == 'Y') goto yy244; + if (yych == 'y') goto yy244; goto yy31; -yy226: +yy225: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy242; + if (yych == 'E') goto yy241; if (yych <= 'N') goto yy31; - goto yy243; + goto yy242; } else { if (yych <= 'e') { if (yych <= 'd') goto yy31; - goto yy242; + goto yy241; } else { - if (yych == 'o') goto yy243; + if (yych == 'o') goto yy242; goto yy31; } } -yy227: +yy226: yych = *++p; - if (yych == 'A') goto yy237; - if (yych == 'a') goto yy237; + if (yych == 'A') goto yy236; + if (yych == 'a') goto yy236; goto yy31; -yy228: +yy227: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy230; + if (yych == 'L') goto yy229; if (yych <= 'O') goto yy31; - goto yy231; + goto yy230; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy230; + goto yy229; } else { - if (yych == 'p') goto yy231; + if (yych == 'p') goto yy230; goto yy31; } } -yy229: +yy228: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy230: +yy229: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy231: +yy230: yych = *++p; - if (yych == 'A') goto yy232; + if (yych == 'A') goto yy231; if (yych != 'a') goto yy31; -yy232: +yy231: yych = *++p; - if (yych == 'R') goto yy233; + if (yych == 'R') goto yy232; if (yych != 'r') goto yy31; -yy233: +yy232: yych = *++p; - if (yych == 'A') goto yy234; + if (yych == 'A') goto yy233; if (yych != 'a') goto yy31; +yy233: + yych = *++p; + if (yych == 'Z') goto yy234; + if (yych != 'z') goto yy31; yy234: yych = *++p; if (yych == 'Z') goto yy235; if (yych != 'z') goto yy31; yy235: - yych = *++p; - if (yych == 'Z') goto yy236; - if (yych != 'z') goto yy31; -yy236: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy237: +yy236: yych = *++p; - if (yych == 'T') goto yy238; + if (yych == 'T') goto yy237; if (yych != 't') goto yy31; -yy238: +yy237: yych = *++p; - if (yych == 'F') goto yy239; + if (yych == 'F') goto yy238; if (yych != 'f') goto yy31; -yy239: +yy238: yych = *++p; - if (yych == 'O') goto yy240; + if (yych == 'O') goto yy239; if (yych != 'o') goto yy31; -yy240: +yy239: yych = *++p; - if (yych == 'R') goto yy241; + if (yych == 'R') goto yy240; if (yych != 'r') goto yy31; -yy241: +yy240: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy242: +yy241: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy243: +yy242: yych = *++p; - if (yych == 'X') goto yy244; + if (yych == 'X') goto yy243; if (yych != 'x') goto yy31; -yy244: +yy243: yych = *++p; if (yych == 'Y') goto yy34; if (yych == 'y') goto yy34; goto yy31; -yy245: +yy244: yych = *++p; if (yych == 'C') goto yy34; if (yych == 'c') goto yy34; goto yy31; -yy246: +yy245: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy247: +yy246: yych = *++p; - if (yych == 'A') goto yy248; + if (yych == 'A') goto yy247; if (yych != 'a') goto yy31; -yy248: +yy247: yych = *++p; - if (yych == 'Q') goto yy249; + if (yych == 'Q') goto yy248; if (yych != 'q') goto yy31; -yy249: +yy248: yych = *++p; - if (yych == 'U') goto yy250; + if (yych == 'U') goto yy249; if (yych != 'u') goto yy31; -yy250: +yy249: yych = *++p; - if (yych == 'E') goto yy251; + if (yych == 'E') goto yy250; if (yych != 'e') goto yy31; -yy251: +yy250: yych = *++p; - if (yych == 'L') goto yy252; + if (yych == 'L') goto yy251; if (yych != 'l') goto yy31; -yy252: +yy251: yych = *++p; - if (yych == 'O') goto yy253; + if (yych == 'O') goto yy252; if (yych != 'o') goto yy31; -yy253: +yy252: yych = *++p; - if (yych == 'C') goto yy254; + if (yych == 'C') goto yy253; if (yych != 'c') goto yy31; -yy254: +yy253: yych = *++p; - if (yych == 'K') goto yy255; + if (yych == 'K') goto yy254; if (yych != 'k') goto yy31; -yy255: +yy254: yych = *++p; - if (yych == 'T') goto yy256; + if (yych == 'T') goto yy255; if (yych != 't') goto yy31; -yy256: +yy255: yych = *++p; - if (yych == 'O') goto yy257; + if (yych == 'O') goto yy256; if (yych != 'o') goto yy31; -yy257: +yy256: yych = *++p; - if (yych == 'K') goto yy258; + if (yych == 'K') goto yy257; if (yych != 'k') goto yy31; -yy258: +yy257: yych = *++p; - if (yych == 'E') goto yy259; + if (yych == 'E') goto yy258; if (yych != 'e') goto yy31; -yy259: +yy258: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy260: - yych = *++p; - if (yych == 'T') goto yy267; - if (yych == 't') goto yy267; - goto yy31; -yy261: +yy259: yych = *++p; if (yych == 'T') goto yy266; if (yych == 't') goto yy266; goto yy31; -yy262: +yy260: + yych = *++p; + if (yych == 'T') goto yy265; + if (yych == 't') goto yy265; + goto yy31; +yy261: yych = *++p; if (yych <= 'G') { if (yych == ':') goto yy35; @@ -1754,208 +1735,208 @@ yy262: if (yych == 'h') goto yy34; goto yy31; } -yy263: +yy262: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy264: +yy263: yych = *++p; - if (yych == 'W') goto yy265; + if (yych == 'W') goto yy264; if (yych != 'w') goto yy31; -yy265: +yy264: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy266: +yy265: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy267: +yy266: yych = *++p; - if (yych == 'E') goto yy268; + if (yych == 'E') goto yy267; if (yych != 'e') goto yy31; -yy268: +yy267: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy269: +yy268: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy270: +yy269: yych = *++p; if (yych <= 'P') { - if (yych == 'M') goto yy301; + if (yych == 'M') goto yy300; if (yych <= 'O') goto yy31; - goto yy300; + goto yy299; } else { if (yych <= 'm') { if (yych <= 'l') goto yy31; - goto yy301; + goto yy300; } else { - if (yych == 'p') goto yy300; + if (yych == 'p') goto yy299; goto yy31; } } -yy271: +yy270: yych = *++p; if (yych <= 'Q') { if (yych <= '-') { if (yych <= ',') goto yy31; - goto yy293; + goto yy292; } else { - if (yych == 'N') goto yy294; + if (yych == 'N') goto yy293; goto yy31; } } else { if (yych <= 'n') { - if (yych <= 'R') goto yy292; + if (yych <= 'R') goto yy291; if (yych <= 'm') goto yy31; - goto yy294; + goto yy293; } else { - if (yych == 'r') goto yy292; + if (yych == 'r') goto yy291; goto yy31; } } -yy272: +yy271: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy273: +yy272: yych = *++p; - if (yych == 'S') goto yy288; - if (yych == 's') goto yy288; + if (yych == 'S') goto yy287; + if (yych == 's') goto yy287; goto yy31; -yy274: +yy273: yych = *++p; switch (yych) { case 'G': - case 'g': goto yy279; + case 'g': goto yy278; case 'I': - case 'i': goto yy278; + case 'i': goto yy277; case 'P': - case 'p': goto yy280; + case 'p': goto yy279; case 'R': - case 'r': goto yy281; + case 'r': goto yy280; default: goto yy31; } -yy275: +yy274: yych = *++p; - if (yych == 'Q') goto yy277; - if (yych == 'q') goto yy277; + if (yych == 'Q') goto yy276; + if (yych == 'q') goto yy276; goto yy31; -yy276: +yy275: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy277: +yy276: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy278: +yy277: yych = *++p; - if (yych == 'L') goto yy286; - if (yych == 'l') goto yy286; + if (yych == 'L') goto yy285; + if (yych == 'l') goto yy285; goto yy31; -yy279: +yy278: yych = *++p; - if (yych == 'N') goto yy284; - if (yych == 'n') goto yy284; + if (yych == 'N') goto yy283; + if (yych == 'n') goto yy283; goto yy31; -yy280: +yy279: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy281: +yy280: yych = *++p; - if (yych == 'K') goto yy282; + if (yych == 'K') goto yy281; if (yych != 'k') goto yy31; -yy282: +yy281: yych = *++p; - if (yych == 'E') goto yy283; + if (yych == 'E') goto yy282; if (yych != 'e') goto yy31; -yy283: +yy282: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy284: +yy283: yych = *++p; - if (yych == 'E') goto yy285; + if (yych == 'E') goto yy284; if (yych != 'e') goto yy31; -yy285: +yy284: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy286: +yy285: yych = *++p; - if (yych == 'T') goto yy287; + if (yych == 'T') goto yy286; if (yych != 't') goto yy31; -yy287: +yy286: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy288: +yy287: yych = *++p; - if (yych == 'S') goto yy289; + if (yych == 'S') goto yy288; if (yych != 's') goto yy31; -yy289: +yy288: yych = *++p; - if (yych == 'A') goto yy290; + if (yych == 'A') goto yy289; if (yych != 'a') goto yy31; -yy290: +yy289: yych = *++p; - if (yych == 'G') goto yy291; + if (yych == 'G') goto yy290; if (yych != 'g') goto yy31; -yy291: +yy290: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy292: +yy291: yych = *++p; - if (yych == 'P') goto yy299; - if (yych == 'p') goto yy299; + if (yych == 'P') goto yy298; + if (yych == 'p') goto yy298; goto yy31; -yy293: +yy292: yych = *++p; - if (yych == 'H') goto yy296; - if (yych == 'h') goto yy296; + if (yych == 'H') goto yy295; + if (yych == 'h') goto yy295; goto yy31; -yy294: +yy293: yych = *++p; - if (yych == 'I') goto yy295; + if (yych == 'I') goto yy294; if (yych != 'i') goto yy31; -yy295: +yy294: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy296: +yy295: yych = *++p; - if (yych == 'E') goto yy297; + if (yych == 'E') goto yy296; if (yych != 'e') goto yy31; -yy297: +yy296: yych = *++p; - if (yych == 'L') goto yy298; + if (yych == 'L') goto yy297; if (yych != 'l') goto yy31; -yy298: +yy297: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy299: +yy298: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -1965,64 +1946,64 @@ yy299: if (yych == 's') goto yy34; goto yy31; } -yy300: +yy299: yych = *++p; - if (yych == 'D') goto yy304; - if (yych == 'd') goto yy304; + if (yych == 'D') goto yy303; + if (yych == 'd') goto yy303; goto yy31; -yy301: +yy300: yych = *++p; - if (yych == 'B') goto yy302; + if (yych == 'B') goto yy301; if (yych != 'b') goto yy31; -yy302: +yy301: yych = *++p; - if (yych == 'L') goto yy303; + if (yych == 'L') goto yy302; if (yych != 'l') goto yy31; -yy303: +yy302: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy304: +yy303: yych = *++p; - if (yych == 'A') goto yy305; + if (yych == 'A') goto yy304; if (yych != 'a') goto yy31; -yy305: +yy304: yych = *++p; - if (yych == 'T') goto yy306; + if (yych == 'T') goto yy305; if (yych != 't') goto yy31; -yy306: +yy305: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy307: +yy306: yych = *++p; - if (yych == 'A') goto yy312; - if (yych == 'a') goto yy312; + if (yych == 'A') goto yy311; + if (yych == 'a') goto yy311; goto yy31; -yy308: +yy307: yych = *++p; - if (yych == 'S') goto yy309; + if (yych == 'S') goto yy308; if (yych != 's') goto yy31; -yy309: +yy308: yych = *++p; - if (yych == 'T') goto yy310; + if (yych == 'T') goto yy309; if (yych != 't') goto yy31; -yy310: +yy309: yych = *++p; - if (yych == 'F') goto yy311; + if (yych == 'F') goto yy310; if (yych != 'f') goto yy31; -yy311: +yy310: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy312: +yy311: yych = *++p; - if (yych == 'P') goto yy313; + if (yych == 'P') goto yy312; if (yych != 'p') goto yy31; -yy313: +yy312: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2032,27 +2013,27 @@ yy313: if (yych == 's') goto yy34; goto yy31; } -yy314: +yy313: yych = *++p; - if (yych == 'M') goto yy337; - if (yych == 'm') goto yy337; + if (yych == 'M') goto yy336; + if (yych == 'm') goto yy336; goto yy31; -yy315: +yy314: yych = *++p; if (yych <= 'I') { - if (yych == 'C') goto yy326; + if (yych == 'C') goto yy325; if (yych <= 'H') goto yy31; - goto yy325; + goto yy324; } else { if (yych <= 'c') { if (yych <= 'b') goto yy31; - goto yy326; + goto yy325; } else { - if (yych == 'i') goto yy325; + if (yych == 'i') goto yy324; goto yy31; } } -yy316: +yy315: yych = *++p; if (yych <= 'P') { if (yych == 'N') goto yy34; @@ -2067,67 +2048,67 @@ yy316: goto yy31; } } -yy317: +yy316: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy323; + if (yych == 'A') goto yy322; if (yych <= 'N') goto yy31; - goto yy324; + goto yy323; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy323; + goto yy322; } else { - if (yych == 'o') goto yy324; + if (yych == 'o') goto yy323; goto yy31; } } -yy318: +yy317: yych = *++p; - if (yych == 'F') goto yy322; - if (yych == 'f') goto yy322; + if (yych == 'F') goto yy321; + if (yych == 'f') goto yy321; goto yy31; -yy319: +yy318: yych = *++p; if (yych <= '@') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'A') goto yy321; - if (yych == 'a') goto yy321; + if (yych <= 'A') goto yy320; + if (yych == 'a') goto yy320; goto yy31; } -yy320: +yy319: yych = *++p; if (yych == 'X') goto yy34; if (yych == 'x') goto yy34; goto yy31; -yy321: +yy320: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy322: +yy321: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy323: +yy322: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy324: +yy323: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy325: +yy324: yych = *++p; - if (yych == 'S') goto yy327; - if (yych == 's') goto yy327; + if (yych == 'S') goto yy326; + if (yych == 's') goto yy326; goto yy31; -yy326: +yy325: yych = *++p; if (yych <= ':') { if (yych == '6') goto yy34; @@ -2142,60 +2123,60 @@ yy326: goto yy31; } } -yy327: +yy326: yych = *++p; - if (yych == '.') goto yy328; + if (yych == '.') goto yy327; if (yych == ':') goto yy35; goto yy31; -yy328: +yy327: yych = *++p; if (yych <= 'X') { if (yych <= 'K') { - if (yych == 'B') goto yy331; + if (yych == 'B') goto yy330; goto yy31; } else { - if (yych <= 'L') goto yy329; + if (yych <= 'L') goto yy328; if (yych <= 'W') goto yy31; - goto yy330; + goto yy329; } } else { if (yych <= 'k') { - if (yych == 'b') goto yy331; + if (yych == 'b') goto yy330; goto yy31; } else { - if (yych <= 'l') goto yy329; - if (yych == 'x') goto yy330; + if (yych <= 'l') goto yy328; + if (yych == 'x') goto yy329; goto yy31; } } +yy328: + yych = *++p; + if (yych == 'W') goto yy335; + if (yych == 'w') goto yy335; + goto yy31; yy329: yych = *++p; - if (yych == 'W') goto yy336; - if (yych == 'w') goto yy336; + if (yych == 'P') goto yy333; + if (yych == 'p') goto yy333; goto yy31; yy330: yych = *++p; - if (yych == 'P') goto yy334; - if (yych == 'p') goto yy334; - goto yy31; + if (yych == 'E') goto yy331; + if (yych != 'e') goto yy31; yy331: yych = *++p; if (yych == 'E') goto yy332; if (yych != 'e') goto yy31; yy332: - yych = *++p; - if (yych == 'E') goto yy333; - if (yych != 'e') goto yy31; -yy333: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy334: +yy333: yych = *++p; - if (yych == 'C') goto yy335; + if (yych == 'C') goto yy334; if (yych != 'c') goto yy31; -yy335: +yy334: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2205,37 +2186,37 @@ yy335: if (yych == 's') goto yy34; goto yy31; } -yy336: +yy335: yych = *++p; if (yych == 'Z') goto yy34; if (yych == 'z') goto yy34; goto yy31; -yy337: +yy336: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy338: +yy337: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy339: +yy338: yych = *++p; - if (yych == 'T') goto yy342; - if (yych == 't') goto yy342; + if (yych == 'T') goto yy341; + if (yych == 't') goto yy341; goto yy31; -yy340: +yy339: yych = *++p; if (yych != '2') goto yy31; yych = *++p; if (yych == '3') goto yy34; goto yy31; -yy342: +yy341: yych = *++p; - if (yych == 'P') goto yy343; + if (yych == 'P') goto yy342; if (yych != 'p') goto yy31; -yy343: +yy342: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2245,202 +2226,202 @@ yy343: if (yych == 's') goto yy34; goto yy31; } -yy344: +yy343: yych = *++p; - if (yych == 'A') goto yy360; - if (yych == 'a') goto yy360; + if (yych == 'A') goto yy359; + if (yych == 'a') goto yy359; goto yy31; -yy345: +yy344: yych = *++p; if (yych <= 'Z') { if (yych == 'T') goto yy34; if (yych <= 'Y') goto yy31; - goto yy351; + goto yy350; } else { if (yych <= 't') { if (yych <= 's') goto yy31; goto yy34; } else { - if (yych == 'z') goto yy351; + if (yych == 'z') goto yy350; goto yy31; } } -yy346: +yy345: yych = *++p; if (yych <= 'O') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'P') goto yy348; - if (yych == 'p') goto yy348; + if (yych <= 'P') goto yy347; + if (yych == 'p') goto yy347; goto yy31; } -yy347: +yy346: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy348: +yy347: yych = *++p; - if (yych == 'H') goto yy349; + if (yych == 'H') goto yy348; if (yych != 'h') goto yy31; -yy349: +yy348: yych = *++p; - if (yych == 'E') goto yy350; + if (yych == 'E') goto yy349; if (yych != 'e') goto yy31; -yy350: +yy349: yych = *++p; if (yych == 'R') goto yy34; if (yych == 'r') goto yy34; goto yy31; -yy351: +yy350: yych = *++p; - if (yych == 'M') goto yy352; + if (yych == 'M') goto yy351; if (yych != 'm') goto yy31; -yy352: +yy351: yych = *++p; - if (yych == 'O') goto yy353; + if (yych == 'O') goto yy352; if (yych != 'o') goto yy31; -yy353: +yy352: yych = *++p; - if (yych == 'P') goto yy354; + if (yych == 'P') goto yy353; if (yych != 'p') goto yy31; -yy354: +yy353: yych = *++p; - if (yych == 'R') goto yy355; + if (yych == 'R') goto yy354; if (yych != 'r') goto yy31; -yy355: +yy354: yych = *++p; - if (yych == 'O') goto yy356; + if (yych == 'O') goto yy355; if (yych != 'o') goto yy31; -yy356: +yy355: yych = *++p; - if (yych == 'J') goto yy357; + if (yych == 'J') goto yy356; if (yych != 'j') goto yy31; -yy357: +yy356: yych = *++p; - if (yych == 'E') goto yy358; + if (yych == 'E') goto yy357; if (yych != 'e') goto yy31; -yy358: +yy357: yych = *++p; - if (yych == 'C') goto yy359; + if (yych == 'C') goto yy358; if (yych != 'c') goto yy31; -yy359: +yy358: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy360: +yy359: yych = *++p; - if (yych == 'L') goto yy361; + if (yych == 'L') goto yy360; if (yych != 'l') goto yy31; -yy361: +yy360: yych = *++p; if (yych == 'K') goto yy34; if (yych == 'k') goto yy34; goto yy31; -yy362: +yy361: yych = *++p; if (yych <= 'S') { if (yych <= 'M') { - if (yych == 'L') goto yy372; + if (yych == 'L') goto yy371; goto yy31; } else { - if (yych <= 'N') goto yy373; + if (yych <= 'N') goto yy372; if (yych <= 'R') goto yy31; - goto yy374; + goto yy373; } } else { if (yych <= 'm') { - if (yych == 'l') goto yy372; + if (yych == 'l') goto yy371; goto yy31; } else { - if (yych <= 'n') goto yy373; - if (yych == 's') goto yy374; + if (yych <= 'n') goto yy372; + if (yych == 's') goto yy373; goto yy31; } } -yy363: +yy362: yych = *++p; - if (yych == 'E') goto yy371; - if (yych == 'e') goto yy371; + if (yych == 'E') goto yy370; + if (yych == 'e') goto yy370; goto yy31; -yy364: +yy363: yych = *++p; - if (yych == 'C') goto yy366; - if (yych == 'c') goto yy366; + if (yych == 'C') goto yy365; + if (yych == 'c') goto yy365; goto yy31; -yy365: +yy364: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy366: +yy365: yych = *++p; - if (yych == 'E') goto yy367; + if (yych == 'E') goto yy366; if (yych != 'e') goto yy31; -yy367: +yy366: yych = *++p; - if (yych == 'T') goto yy368; + if (yych == 'T') goto yy367; if (yych != 't') goto yy31; -yy368: +yy367: yych = *++p; - if (yych == 'I') goto yy369; + if (yych == 'I') goto yy368; if (yych != 'i') goto yy31; -yy369: +yy368: yych = *++p; - if (yych == 'M') goto yy370; + if (yych == 'M') goto yy369; if (yych != 'm') goto yy31; -yy370: +yy369: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy371: +yy370: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy372: +yy371: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy373: +yy372: yych = *++p; - if (yych == 'G') goto yy375; - if (yych == 'g') goto yy375; + if (yych == 'G') goto yy374; + if (yych == 'g') goto yy374; goto yy31; -yy374: +yy373: yych = *++p; if (yych == 'H') goto yy34; if (yych == 'h') goto yy34; goto yy31; -yy375: +yy374: yych = *++p; - if (yych == 'E') goto yy376; + if (yych == 'E') goto yy375; if (yych != 'e') goto yy31; -yy376: +yy375: yych = *++p; if (yych == 'R') goto yy34; if (yych == 'r') goto yy34; goto yy31; -yy377: +yy376: yych = *++p; - if (yych == 'T') goto yy395; - if (yych == 't') goto yy395; + if (yych == 'T') goto yy394; + if (yych == 't') goto yy394; goto yy31; -yy378: +yy377: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy379: +yy378: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy380: +yy379: yych = *++p; if (yych <= 'S') { if (yych == 'P') goto yy34; @@ -2455,26 +2436,26 @@ yy380: goto yy31; } } +yy380: + yych = *++p; + if (yych == 'I') goto yy388; + if (yych == 'i') goto yy388; + goto yy31; yy381: yych = *++p; - if (yych == 'I') goto yy389; - if (yych == 'i') goto yy389; + if (yych == 'A') goto yy387; + if (yych == 'a') goto yy387; goto yy31; yy382: yych = *++p; - if (yych == 'A') goto yy388; - if (yych == 'a') goto yy388; + if (yych == 'O') goto yy385; + if (yych == 'o') goto yy385; goto yy31; yy383: yych = *++p; - if (yych == 'O') goto yy386; - if (yych == 'o') goto yy386; - goto yy31; -yy384: - yych = *++p; - if (yych == 'A') goto yy385; + if (yych == 'A') goto yy384; if (yych != 'a') goto yy31; -yy385: +yy384: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2484,80 +2465,80 @@ yy385: if (yych == 's') goto yy34; goto yy31; } -yy386: +yy385: yych = *++p; - if (yych == 'U') goto yy387; + if (yych == 'U') goto yy386; if (yych != 'u') goto yy31; -yy387: +yy386: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy388: +yy387: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy389: +yy388: yych = *++p; - if (yych == 'U') goto yy390; + if (yych == 'U') goto yy389; if (yych != 'u') goto yy31; -yy390: +yy389: yych = *++p; - if (yych == 'M') goto yy391; + if (yych == 'M') goto yy390; if (yych != 'm') goto yy31; -yy391: +yy390: yych = *++p; - if (yych == 'X') goto yy392; + if (yych == 'X') goto yy391; if (yych != 'x') goto yy31; -yy392: +yy391: yych = *++p; - if (yych == 'T') goto yy393; + if (yych == 'T') goto yy392; if (yych != 't') goto yy31; -yy393: +yy392: yych = *++p; - if (yych == 'R') goto yy394; + if (yych == 'R') goto yy393; if (yych != 'r') goto yy31; -yy394: +yy393: yych = *++p; if (yych == 'A') goto yy34; if (yych == 'a') goto yy34; goto yy31; -yy395: +yy394: yych = *++p; - if (yych == 'A') goto yy396; + if (yych == 'A') goto yy395; if (yych != 'a') goto yy31; -yy396: +yy395: yych = *++p; - if (yych == 'C') goto yy397; + if (yych == 'C') goto yy396; if (yych != 'c') goto yy31; -yy397: +yy396: yych = *++p; - if (yych == 'H') goto yy398; + if (yych == 'H') goto yy397; if (yych != 'h') goto yy31; -yy398: +yy397: yych = *++p; - if (yych == 'M') goto yy399; + if (yych == 'M') goto yy398; if (yych != 'm') goto yy31; -yy399: +yy398: yych = *++p; - if (yych == 'E') goto yy400; + if (yych == 'E') goto yy399; if (yych != 'e') goto yy31; -yy400: +yy399: yych = *++p; - if (yych == 'N') goto yy401; + if (yych == 'N') goto yy400; if (yych != 'n') goto yy31; -yy401: +yy400: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy402: +yy401: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy403: +yy402: yych = *++p; if (yych <= 'V') { if (yych == 'R') goto yy34; @@ -2571,404 +2552,404 @@ yy403: } } yych = *++p; - if (yych == 'A') goto yy405; + if (yych == 'A') goto yy404; if (yych != 'a') goto yy31; -yy405: +yy404: yych = *++p; - if (yych == 'S') goto yy406; + if (yych == 'S') goto yy405; if (yych != 's') goto yy31; -yy406: +yy405: yych = *++p; - if (yych == 'C') goto yy407; + if (yych == 'C') goto yy406; if (yych != 'c') goto yy31; -yy407: +yy406: yych = *++p; - if (yych == 'R') goto yy408; + if (yych == 'R') goto yy407; if (yych != 'r') goto yy31; -yy408: +yy407: yych = *++p; - if (yych == 'I') goto yy409; + if (yych == 'I') goto yy408; if (yych != 'i') goto yy31; -yy409: +yy408: yych = *++p; - if (yych == 'P') goto yy410; + if (yych == 'P') goto yy409; if (yych != 'p') goto yy31; -yy410: +yy409: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy411: +yy410: yych = *++p; if (yych == 'B') goto yy34; if (yych == 'b') goto yy34; goto yy31; -yy412: +yy411: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy413: +yy412: yych = *++p; - if (yych == 'N') goto yy420; - if (yych == 'n') goto yy420; + if (yych == 'N') goto yy419; + if (yych == 'n') goto yy419; goto yy31; -yy414: +yy413: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy415: +yy414: yych = *++p; - if (yych == 'C') goto yy419; - if (yych == 'c') goto yy419; + if (yych == 'C') goto yy418; + if (yych == 'c') goto yy418; goto yy31; -yy416: +yy415: yych = *++p; if (yych <= 'V') { - if (yych == 'T') goto yy418; + if (yych == 'T') goto yy417; if (yych <= 'U') goto yy31; goto yy34; } else { if (yych <= 't') { if (yych <= 's') goto yy31; - goto yy418; + goto yy417; } else { if (yych == 'v') goto yy34; goto yy31; } } -yy417: +yy416: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy418: +yy417: yych = *++p; if (yych == 'A') goto yy34; if (yych == 'a') goto yy34; goto yy31; -yy419: +yy418: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy420: +yy419: yych = *++p; - if (yych == 'A') goto yy421; + if (yych == 'A') goto yy420; if (yych != 'a') goto yy31; -yy421: +yy420: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'P') goto yy423; + if (yych == 'P') goto yy422; if (yych != 'p') goto yy31; -yy423: +yy422: yych = *++p; - if (yych == 'L') goto yy424; + if (yych == 'L') goto yy423; if (yych != 'l') goto yy31; -yy424: +yy423: yych = *++p; - if (yych == 'A') goto yy425; + if (yych == 'A') goto yy424; if (yych != 'a') goto yy31; -yy425: +yy424: yych = *++p; - if (yych == 'Y') goto yy426; + if (yych == 'Y') goto yy425; if (yych != 'y') goto yy31; -yy426: +yy425: yych = *++p; if (yych <= 'S') { - if (yych == 'C') goto yy427; + if (yych == 'C') goto yy426; if (yych <= 'R') goto yy31; - goto yy428; + goto yy427; } else { if (yych <= 'c') { if (yych <= 'b') goto yy31; } else { - if (yych == 's') goto yy428; + if (yych == 's') goto yy427; goto yy31; } } -yy427: +yy426: yych = *++p; - if (yych == 'O') goto yy433; - if (yych == 'o') goto yy433; + if (yych == 'O') goto yy432; + if (yych == 'o') goto yy432; goto yy31; -yy428: +yy427: yych = *++p; - if (yych == 'I') goto yy429; + if (yych == 'I') goto yy428; if (yych != 'i') goto yy31; -yy429: +yy428: yych = *++p; - if (yych == 'N') goto yy430; + if (yych == 'N') goto yy429; if (yych != 'n') goto yy31; -yy430: +yy429: yych = *++p; - if (yych == 'G') goto yy431; + if (yych == 'G') goto yy430; if (yych != 'g') goto yy31; -yy431: +yy430: yych = *++p; - if (yych == 'L') goto yy432; + if (yych == 'L') goto yy431; if (yych != 'l') goto yy31; -yy432: +yy431: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy433: +yy432: yych = *++p; - if (yych == 'N') goto yy434; + if (yych == 'N') goto yy433; if (yych != 'n') goto yy31; -yy434: +yy433: yych = *++p; - if (yych == 'T') goto yy435; + if (yych == 'T') goto yy434; if (yych != 't') goto yy31; -yy435: +yy434: yych = *++p; - if (yych == 'A') goto yy436; + if (yych == 'A') goto yy435; if (yych != 'a') goto yy31; -yy436: +yy435: yych = *++p; - if (yych == 'I') goto yy437; + if (yych == 'I') goto yy436; if (yych != 'i') goto yy31; -yy437: +yy436: yych = *++p; - if (yych == 'N') goto yy438; + if (yych == 'N') goto yy437; if (yych != 'n') goto yy31; -yy438: +yy437: yych = *++p; - if (yych == 'E') goto yy439; + if (yych == 'E') goto yy438; if (yych != 'e') goto yy31; -yy439: +yy438: yych = *++p; if (yych == 'R') goto yy34; if (yych == 'r') goto yy34; goto yy31; -yy440: +yy439: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy441: +yy440: yych = *++p; if (yych <= 'N') { if (yych <= 'A') { if (yych <= '@') goto yy31; - goto yy463; + goto yy462; } else { if (yych <= 'L') goto yy31; - if (yych <= 'M') goto yy464; - goto yy465; + if (yych <= 'M') goto yy463; + goto yy464; } } else { if (yych <= 'l') { - if (yych == 'a') goto yy463; + if (yych == 'a') goto yy462; goto yy31; } else { - if (yych <= 'm') goto yy464; - if (yych <= 'n') goto yy465; + if (yych <= 'm') goto yy463; + if (yych <= 'n') goto yy464; goto yy31; } } -yy442: +yy441: yych = *++p; - if (yych == 'R') goto yy450; - if (yych == 'r') goto yy450; + if (yych == 'R') goto yy449; + if (yych == 'r') goto yy449; goto yy31; -yy443: +yy442: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy447; + if (yych == 'L') goto yy446; if (yych <= 'O') goto yy31; goto yy34; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy447; + goto yy446; } else { if (yych == 'p') goto yy34; goto yy31; } } -yy444: +yy443: yych = *++p; - if (yych == 'I') goto yy446; - if (yych == 'i') goto yy446; + if (yych == 'I') goto yy445; + if (yych == 'i') goto yy445; goto yy31; -yy445: +yy444: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy446: +yy445: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy447: +yy446: yych = *++p; - if (yych == 'L') goto yy448; + if (yych == 'L') goto yy447; if (yych != 'l') goto yy31; -yy448: +yy447: yych = *++p; - if (yych == 'T') goto yy449; + if (yych == 'T') goto yy448; if (yych != 't') goto yy31; -yy449: +yy448: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy450: +yy449: yych = *++p; - if (yych == 'O') goto yy451; + if (yych == 'O') goto yy450; if (yych != 'o') goto yy31; -yy451: +yy450: yych = *++p; - if (yych == 'M') goto yy452; + if (yych == 'M') goto yy451; if (yych != 'm') goto yy31; -yy452: +yy451: yych = *++p; - if (yych == 'E') goto yy453; + if (yych == 'E') goto yy452; if (yych != 'e') goto yy31; -yy453: +yy452: yych = *++p; - if (yych == '-') goto yy454; + if (yych == '-') goto yy453; if (yych == ':') goto yy35; goto yy31; -yy454: +yy453: yych = *++p; - if (yych == 'E') goto yy455; + if (yych == 'E') goto yy454; if (yych != 'e') goto yy31; -yy455: +yy454: yych = *++p; - if (yych == 'X') goto yy456; + if (yych == 'X') goto yy455; if (yych != 'x') goto yy31; -yy456: +yy455: yych = *++p; - if (yych == 'T') goto yy457; + if (yych == 'T') goto yy456; if (yych != 't') goto yy31; -yy457: +yy456: yych = *++p; - if (yych == 'E') goto yy458; + if (yych == 'E') goto yy457; if (yych != 'e') goto yy31; -yy458: +yy457: yych = *++p; - if (yych == 'N') goto yy459; + if (yych == 'N') goto yy458; if (yych != 'n') goto yy31; -yy459: +yy458: yych = *++p; - if (yych == 'S') goto yy460; + if (yych == 'S') goto yy459; if (yych != 's') goto yy31; -yy460: +yy459: yych = *++p; - if (yych == 'I') goto yy461; + if (yych == 'I') goto yy460; if (yych != 'i') goto yy31; -yy461: +yy460: yych = *++p; - if (yych == 'O') goto yy462; + if (yych == 'O') goto yy461; if (yych != 'o') goto yy31; -yy462: +yy461: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy463: +yy462: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy464: +yy463: yych = *++p; - if (yych == '-') goto yy469; + if (yych == '-') goto yy468; goto yy31; -yy465: +yy464: yych = *++p; - if (yych == 'T') goto yy466; + if (yych == 'T') goto yy465; if (yych != 't') goto yy31; -yy466: +yy465: yych = *++p; - if (yych == 'E') goto yy467; + if (yych == 'E') goto yy466; if (yych != 'e') goto yy31; -yy467: +yy466: yych = *++p; - if (yych == 'N') goto yy468; + if (yych == 'N') goto yy467; if (yych != 'n') goto yy31; -yy468: +yy467: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy469: +yy468: yych = *++p; - if (yych == 'E') goto yy470; + if (yych == 'E') goto yy469; if (yych != 'e') goto yy31; -yy470: +yy469: yych = *++p; - if (yych == 'V') goto yy471; + if (yych == 'V') goto yy470; if (yych != 'v') goto yy31; -yy471: +yy470: yych = *++p; - if (yych == 'E') goto yy472; + if (yych == 'E') goto yy471; if (yych != 'e') goto yy31; -yy472: +yy471: yych = *++p; - if (yych == 'N') goto yy473; + if (yych == 'N') goto yy472; if (yych != 'n') goto yy31; -yy473: +yy472: yych = *++p; - if (yych == 'T') goto yy474; + if (yych == 'T') goto yy473; if (yych != 't') goto yy31; -yy474: +yy473: yych = *++p; - if (yych == 'B') goto yy475; + if (yych == 'B') goto yy474; if (yych != 'b') goto yy31; -yy475: +yy474: yych = *++p; - if (yych == 'R') goto yy476; + if (yych == 'R') goto yy475; if (yych != 'r') goto yy31; -yy476: +yy475: yych = *++p; - if (yych == 'I') goto yy477; + if (yych == 'I') goto yy476; if (yych != 'i') goto yy31; -yy477: +yy476: yych = *++p; - if (yych == 'T') goto yy478; + if (yych == 'T') goto yy477; if (yych != 't') goto yy31; -yy478: +yy477: yych = *++p; - if (yych == 'E') goto yy479; + if (yych == 'E') goto yy478; if (yych != 'e') goto yy31; -yy479: +yy478: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'A') goto yy481; + if (yych == 'A') goto yy480; if (yych != 'a') goto yy31; +yy480: + yych = *++p; + if (yych == 'T') goto yy481; + if (yych != 't') goto yy31; yy481: yych = *++p; if (yych == 'T') goto yy482; if (yych != 't') goto yy31; yy482: yych = *++p; - if (yych == 'T') goto yy483; - if (yych != 't') goto yy31; -yy483: - yych = *++p; - if (yych == 'E') goto yy484; + if (yych == 'E') goto yy483; if (yych != 'e') goto yy31; -yy484: +yy483: yych = *++p; - if (yych == 'N') goto yy485; + if (yych == 'N') goto yy484; if (yych != 'n') goto yy31; -yy485: +yy484: yych = *++p; - if (yych == 'D') goto yy486; + if (yych == 'D') goto yy485; if (yych != 'd') goto yy31; -yy486: +yy485: yych = *++p; - if (yych == 'E') goto yy487; + if (yych == 'E') goto yy486; if (yych != 'e') goto yy31; -yy487: +yy486: ++p; if ((yych = *p) == 'E') goto yy34; if (yych == 'e') goto yy34; @@ -3022,4900 +3003,4900 @@ int _scan_autolink_email(const unsigned char *p) yych = *p; if (yych <= ',') { if (yych <= '!') { - if (yych == '\n') goto yy490; - if (yych <= ' ') goto yy492; - goto yy491; + if (yych == '\n') goto yy489; + if (yych <= ' ') goto yy491; + goto yy490; } else { if (yych <= '\'') { - if (yych <= '"') goto yy492; - goto yy491; + if (yych <= '"') goto yy491; + goto yy490; } else { - if (yych <= ')') goto yy492; - if (yych <= '+') goto yy491; - goto yy492; + if (yych <= ')') goto yy491; + if (yych <= '+') goto yy490; + goto yy491; } } } else { if (yych <= '?') { if (yych <= '<') { - if (yych <= '9') goto yy491; - goto yy492; - } else { - if (yych == '>') goto yy492; + if (yych <= '9') goto yy490; goto yy491; + } else { + if (yych == '>') goto yy491; + goto yy490; } } else { if (yych <= 'Z') { - if (yych <= '@') goto yy492; - goto yy491; + if (yych <= '@') goto yy491; + goto yy490; } else { - if (yych <= ']') goto yy492; - if (yych <= '~') goto yy491; - goto yy492; + if (yych <= ']') goto yy491; + if (yych <= '~') goto yy490; + goto yy491; } } } -yy490: +yy489: { return 0; } -yy491: +yy490: yych = *(marker = ++p); if (yych <= ',') { if (yych <= '"') { - if (yych == '!') goto yy496; - goto yy490; + if (yych == '!') goto yy495; + goto yy489; } else { - if (yych <= '\'') goto yy496; - if (yych <= ')') goto yy490; - if (yych <= '+') goto yy496; - goto yy490; + if (yych <= '\'') goto yy495; + if (yych <= ')') goto yy489; + if (yych <= '+') goto yy495; + goto yy489; } } else { if (yych <= '>') { - if (yych <= '9') goto yy496; - if (yych == '=') goto yy496; - goto yy490; + if (yych <= '9') goto yy495; + if (yych == '=') goto yy495; + goto yy489; } else { - if (yych <= 'Z') goto yy496; - if (yych <= ']') goto yy490; - if (yych <= '~') goto yy496; - goto yy490; + if (yych <= 'Z') goto yy495; + if (yych <= ']') goto yy489; + if (yych <= '~') goto yy495; + goto yy489; } } -yy492: +yy491: yych = *++p; - goto yy490; -yy493: + goto yy489; +yy492: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy497; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy496; } else { - if (yych <= 'Z') goto yy497; - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy497; + if (yych <= 'Z') goto yy496; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy496; } -yy494: +yy493: p = marker; - goto yy490; -yy495: + goto yy489; +yy494: ++p; yych = *p; -yy496: +yy495: if (yybm[0+yych] & 128) { - goto yy495; + goto yy494; } - if (yych == '@') goto yy493; - goto yy494; -yy497: + if (yych == '@') goto yy492; + goto yy493; +yy496: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy499; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy498; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy499; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy498; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy499; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy498; + goto yy493; } } yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy627; - if (yych <= '/') goto yy494; - goto yy628; + if (yych == '-') goto yy626; + if (yych <= '/') goto yy493; + goto yy627; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy628; + if (yych <= '@') goto yy493; + goto yy627; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy628; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy627; + goto yy493; } } -yy499: +yy498: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych <= '-') goto yy627; + if (yych <= ',') goto yy493; + if (yych <= '-') goto yy626; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy628; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy627; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy628; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy627; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy628; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy627; + goto yy493; } } -yy500: +yy499: ++p; yych = *p; if (yych <= '@') { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy503; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy502; + goto yy493; } else { - if (yych <= 'Z') goto yy503; - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy503; - goto yy494; + if (yych <= 'Z') goto yy502; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy502; + goto yy493; } -yy501: +yy500: ++p; { return (p - start); } -yy503: +yy502: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy505; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy504; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy505; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy504; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy505; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy504; + goto yy493; } } ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy506; - if (yych <= '/') goto yy494; - goto yy507; + if (yych == '-') goto yy505; + if (yych <= '/') goto yy493; + goto yy506; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy507; + if (yych <= '@') goto yy493; + goto yy506; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy507; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy506; + goto yy493; } } -yy505: +yy504: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy507; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy506; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy507; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy506; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy507; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy506; + goto yy493; } } -yy506: +yy505: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy508; - if (yych <= '/') goto yy494; - goto yy509; + if (yych == '-') goto yy507; + if (yych <= '/') goto yy493; + goto yy508; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy509; + if (yych <= '@') goto yy493; + goto yy508; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy509; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy508; + goto yy493; } } -yy507: +yy506: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy509; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy508; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy509; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy508; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy509; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy508; + goto yy493; } } -yy508: +yy507: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy510; - if (yych <= '/') goto yy494; - goto yy511; + if (yych == '-') goto yy509; + if (yych <= '/') goto yy493; + goto yy510; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy511; + if (yych <= '@') goto yy493; + goto yy510; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy511; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy510; + goto yy493; } } -yy509: +yy508: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy511; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy510; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy511; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy510; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy511; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy510; + goto yy493; } } -yy510: +yy509: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy512; - if (yych <= '/') goto yy494; - goto yy513; + if (yych == '-') goto yy511; + if (yych <= '/') goto yy493; + goto yy512; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy513; + if (yych <= '@') goto yy493; + goto yy512; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy513; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy512; + goto yy493; } } -yy511: +yy510: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy513; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy512; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy513; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy512; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy513; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy512; + goto yy493; } } -yy512: +yy511: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy514; - if (yych <= '/') goto yy494; - goto yy515; + if (yych == '-') goto yy513; + if (yych <= '/') goto yy493; + goto yy514; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy515; + if (yych <= '@') goto yy493; + goto yy514; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy515; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy514; + goto yy493; } } -yy513: +yy512: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy515; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy514; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy515; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy514; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy515; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy514; + goto yy493; } } -yy514: +yy513: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy516; - if (yych <= '/') goto yy494; - goto yy517; + if (yych == '-') goto yy515; + if (yych <= '/') goto yy493; + goto yy516; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy517; + if (yych <= '@') goto yy493; + goto yy516; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy517; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy516; + goto yy493; } } -yy515: +yy514: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy517; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy516; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy517; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy516; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy517; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy516; + goto yy493; } } -yy516: +yy515: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy518; - if (yych <= '/') goto yy494; - goto yy519; + if (yych == '-') goto yy517; + if (yych <= '/') goto yy493; + goto yy518; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy519; + if (yych <= '@') goto yy493; + goto yy518; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy519; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy518; + goto yy493; } } -yy517: +yy516: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy519; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy518; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy519; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy518; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy519; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy518; + goto yy493; } } -yy518: +yy517: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy520; - if (yych <= '/') goto yy494; - goto yy521; + if (yych == '-') goto yy519; + if (yych <= '/') goto yy493; + goto yy520; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy521; + if (yych <= '@') goto yy493; + goto yy520; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy521; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy520; + goto yy493; } } -yy519: +yy518: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy521; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy520; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy521; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy520; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy521; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy520; + goto yy493; } } -yy520: +yy519: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy522; - if (yych <= '/') goto yy494; - goto yy523; + if (yych == '-') goto yy521; + if (yych <= '/') goto yy493; + goto yy522; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy523; + if (yych <= '@') goto yy493; + goto yy522; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy523; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy522; + goto yy493; } } -yy521: +yy520: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy523; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy522; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy523; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy522; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy523; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy522; + goto yy493; } } -yy522: +yy521: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy524; - if (yych <= '/') goto yy494; - goto yy525; + if (yych == '-') goto yy523; + if (yych <= '/') goto yy493; + goto yy524; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy525; + if (yych <= '@') goto yy493; + goto yy524; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy525; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy524; + goto yy493; } } -yy523: +yy522: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy525; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy524; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy525; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy524; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy525; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy524; + goto yy493; } } -yy524: +yy523: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy526; - if (yych <= '/') goto yy494; - goto yy527; + if (yych == '-') goto yy525; + if (yych <= '/') goto yy493; + goto yy526; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy527; + if (yych <= '@') goto yy493; + goto yy526; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy527; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy526; + goto yy493; } } -yy525: +yy524: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy527; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy526; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy527; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy526; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy527; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy526; + goto yy493; } } -yy526: +yy525: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy528; - if (yych <= '/') goto yy494; - goto yy529; + if (yych == '-') goto yy527; + if (yych <= '/') goto yy493; + goto yy528; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy529; + if (yych <= '@') goto yy493; + goto yy528; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy529; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy528; + goto yy493; } } -yy527: +yy526: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy529; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy528; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy529; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy528; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy529; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy528; + goto yy493; } } -yy528: +yy527: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy530; - if (yych <= '/') goto yy494; - goto yy531; + if (yych == '-') goto yy529; + if (yych <= '/') goto yy493; + goto yy530; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy531; + if (yych <= '@') goto yy493; + goto yy530; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy531; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy530; + goto yy493; } } -yy529: +yy528: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy531; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy530; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy531; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy530; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy531; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy530; + goto yy493; } } -yy530: +yy529: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy532; - if (yych <= '/') goto yy494; - goto yy533; + if (yych == '-') goto yy531; + if (yych <= '/') goto yy493; + goto yy532; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy533; + if (yych <= '@') goto yy493; + goto yy532; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy533; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy532; + goto yy493; } } -yy531: +yy530: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy533; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy532; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy533; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy532; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy533; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy532; + goto yy493; } } -yy532: +yy531: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy534; - if (yych <= '/') goto yy494; - goto yy535; + if (yych == '-') goto yy533; + if (yych <= '/') goto yy493; + goto yy534; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy535; + if (yych <= '@') goto yy493; + goto yy534; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy535; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy534; + goto yy493; } } -yy533: +yy532: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy535; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy534; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy535; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy534; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy535; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy534; + goto yy493; } } -yy534: +yy533: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy536; - if (yych <= '/') goto yy494; - goto yy537; + if (yych == '-') goto yy535; + if (yych <= '/') goto yy493; + goto yy536; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy537; + if (yych <= '@') goto yy493; + goto yy536; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy537; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy536; + goto yy493; } } -yy535: +yy534: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy537; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy536; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy537; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy536; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy537; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy536; + goto yy493; } } -yy536: +yy535: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy538; - if (yych <= '/') goto yy494; - goto yy539; + if (yych == '-') goto yy537; + if (yych <= '/') goto yy493; + goto yy538; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy539; + if (yych <= '@') goto yy493; + goto yy538; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy539; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy538; + goto yy493; } } -yy537: +yy536: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy539; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy538; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy539; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy538; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy539; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy538; + goto yy493; } } -yy538: +yy537: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy540; - if (yych <= '/') goto yy494; - goto yy541; + if (yych == '-') goto yy539; + if (yych <= '/') goto yy493; + goto yy540; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy541; + if (yych <= '@') goto yy493; + goto yy540; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy541; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy540; + goto yy493; } } -yy539: +yy538: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy541; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy540; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy541; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy540; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy541; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy540; + goto yy493; } } -yy540: +yy539: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy542; - if (yych <= '/') goto yy494; - goto yy543; + if (yych == '-') goto yy541; + if (yych <= '/') goto yy493; + goto yy542; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy543; + if (yych <= '@') goto yy493; + goto yy542; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy543; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy542; + goto yy493; } } -yy541: +yy540: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy543; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy542; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy543; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy542; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy543; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy542; + goto yy493; } } -yy542: +yy541: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy544; - if (yych <= '/') goto yy494; - goto yy545; + if (yych == '-') goto yy543; + if (yych <= '/') goto yy493; + goto yy544; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy545; + if (yych <= '@') goto yy493; + goto yy544; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy545; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy544; + goto yy493; } } -yy543: +yy542: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy545; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy544; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy545; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy544; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy545; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy544; + goto yy493; } } -yy544: +yy543: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy546; - if (yych <= '/') goto yy494; - goto yy547; + if (yych == '-') goto yy545; + if (yych <= '/') goto yy493; + goto yy546; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy547; + if (yych <= '@') goto yy493; + goto yy546; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy547; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy546; + goto yy493; } } -yy545: +yy544: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy547; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy546; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy547; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy546; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy547; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy546; + goto yy493; } } -yy546: +yy545: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy548; - if (yych <= '/') goto yy494; - goto yy549; + if (yych == '-') goto yy547; + if (yych <= '/') goto yy493; + goto yy548; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy549; + if (yych <= '@') goto yy493; + goto yy548; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy549; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy548; + goto yy493; } } -yy547: +yy546: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy549; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy548; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy549; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy548; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy549; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy548; + goto yy493; } } -yy548: +yy547: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy550; - if (yych <= '/') goto yy494; - goto yy551; + if (yych == '-') goto yy549; + if (yych <= '/') goto yy493; + goto yy550; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy551; + if (yych <= '@') goto yy493; + goto yy550; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy551; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy550; + goto yy493; } } -yy549: +yy548: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy551; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy550; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy551; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy550; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy551; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy550; + goto yy493; } } -yy550: +yy549: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy552; - if (yych <= '/') goto yy494; - goto yy553; + if (yych == '-') goto yy551; + if (yych <= '/') goto yy493; + goto yy552; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy553; + if (yych <= '@') goto yy493; + goto yy552; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy553; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy552; + goto yy493; } } -yy551: +yy550: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy553; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy552; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy553; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy552; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy553; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy552; + goto yy493; } } -yy552: +yy551: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy554; - if (yych <= '/') goto yy494; - goto yy555; + if (yych == '-') goto yy553; + if (yych <= '/') goto yy493; + goto yy554; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy555; + if (yych <= '@') goto yy493; + goto yy554; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy555; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy554; + goto yy493; } } -yy553: +yy552: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy555; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy554; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy555; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy554; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy555; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy554; + goto yy493; } } -yy554: +yy553: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy556; - if (yych <= '/') goto yy494; - goto yy557; + if (yych == '-') goto yy555; + if (yych <= '/') goto yy493; + goto yy556; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy557; + if (yych <= '@') goto yy493; + goto yy556; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy557; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy556; + goto yy493; } } -yy555: +yy554: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy557; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy556; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy557; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy556; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy557; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy556; + goto yy493; } } -yy556: +yy555: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy558; - if (yych <= '/') goto yy494; - goto yy559; + if (yych == '-') goto yy557; + if (yych <= '/') goto yy493; + goto yy558; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy559; + if (yych <= '@') goto yy493; + goto yy558; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy559; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy558; + goto yy493; } } -yy557: +yy556: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy559; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy558; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy559; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy558; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy559; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy558; + goto yy493; } } -yy558: +yy557: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy560; - if (yych <= '/') goto yy494; - goto yy561; + if (yych == '-') goto yy559; + if (yych <= '/') goto yy493; + goto yy560; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy561; + if (yych <= '@') goto yy493; + goto yy560; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy561; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy560; + goto yy493; } } -yy559: +yy558: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy561; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy560; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy561; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy560; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy561; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy560; + goto yy493; } } -yy560: +yy559: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy562; - if (yych <= '/') goto yy494; - goto yy563; + if (yych == '-') goto yy561; + if (yych <= '/') goto yy493; + goto yy562; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy563; + if (yych <= '@') goto yy493; + goto yy562; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy563; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy562; + goto yy493; } } -yy561: +yy560: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy563; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy562; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy563; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy562; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy563; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy562; + goto yy493; } } -yy562: +yy561: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy564; - if (yych <= '/') goto yy494; - goto yy565; + if (yych == '-') goto yy563; + if (yych <= '/') goto yy493; + goto yy564; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy565; + if (yych <= '@') goto yy493; + goto yy564; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy565; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy564; + goto yy493; } } -yy563: +yy562: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy565; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy564; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy565; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy564; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy565; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy564; + goto yy493; } } -yy564: +yy563: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy566; - if (yych <= '/') goto yy494; - goto yy567; + if (yych == '-') goto yy565; + if (yych <= '/') goto yy493; + goto yy566; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy567; + if (yych <= '@') goto yy493; + goto yy566; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy567; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy566; + goto yy493; } } -yy565: +yy564: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy567; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy566; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy567; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy566; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy567; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy566; + goto yy493; } } -yy566: +yy565: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy568; - if (yych <= '/') goto yy494; - goto yy569; + if (yych == '-') goto yy567; + if (yych <= '/') goto yy493; + goto yy568; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy569; + if (yych <= '@') goto yy493; + goto yy568; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy569; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy568; + goto yy493; } } -yy567: +yy566: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy569; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy568; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy569; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy568; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy569; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy568; + goto yy493; } } -yy568: +yy567: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy570; - if (yych <= '/') goto yy494; - goto yy571; + if (yych == '-') goto yy569; + if (yych <= '/') goto yy493; + goto yy570; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy571; + if (yych <= '@') goto yy493; + goto yy570; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy571; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy570; + goto yy493; } } -yy569: +yy568: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy571; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy570; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy571; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy570; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy571; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy570; + goto yy493; } } -yy570: +yy569: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy572; - if (yych <= '/') goto yy494; - goto yy573; + if (yych == '-') goto yy571; + if (yych <= '/') goto yy493; + goto yy572; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy573; + if (yych <= '@') goto yy493; + goto yy572; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy573; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy572; + goto yy493; } } -yy571: +yy570: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy573; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy572; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy573; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy572; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy573; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy572; + goto yy493; } } -yy572: +yy571: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy574; - if (yych <= '/') goto yy494; - goto yy575; + if (yych == '-') goto yy573; + if (yych <= '/') goto yy493; + goto yy574; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy575; + if (yych <= '@') goto yy493; + goto yy574; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy575; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy574; + goto yy493; } } -yy573: +yy572: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy575; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy574; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy575; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy574; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy575; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy574; + goto yy493; } } -yy574: +yy573: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy576; - if (yych <= '/') goto yy494; - goto yy577; + if (yych == '-') goto yy575; + if (yych <= '/') goto yy493; + goto yy576; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy577; + if (yych <= '@') goto yy493; + goto yy576; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy577; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy576; + goto yy493; } } -yy575: +yy574: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy577; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy576; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy577; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy576; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy577; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy576; + goto yy493; } } -yy576: +yy575: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy578; - if (yych <= '/') goto yy494; - goto yy579; + if (yych == '-') goto yy577; + if (yych <= '/') goto yy493; + goto yy578; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy579; + if (yych <= '@') goto yy493; + goto yy578; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy579; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy578; + goto yy493; } } -yy577: +yy576: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy579; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy578; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy579; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy578; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy579; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy578; + goto yy493; } } -yy578: +yy577: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy580; - if (yych <= '/') goto yy494; - goto yy581; + if (yych == '-') goto yy579; + if (yych <= '/') goto yy493; + goto yy580; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy581; + if (yych <= '@') goto yy493; + goto yy580; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy581; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy580; + goto yy493; } } -yy579: +yy578: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy581; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy580; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy581; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy580; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy581; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy580; + goto yy493; } } -yy580: +yy579: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy582; - if (yych <= '/') goto yy494; - goto yy583; + if (yych == '-') goto yy581; + if (yych <= '/') goto yy493; + goto yy582; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy583; + if (yych <= '@') goto yy493; + goto yy582; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy583; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy582; + goto yy493; } } -yy581: +yy580: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy583; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy582; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy583; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy582; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy583; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy582; + goto yy493; } } -yy582: +yy581: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy584; - if (yych <= '/') goto yy494; - goto yy585; + if (yych == '-') goto yy583; + if (yych <= '/') goto yy493; + goto yy584; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy585; + if (yych <= '@') goto yy493; + goto yy584; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy585; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy584; + goto yy493; } } -yy583: +yy582: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy585; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy584; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy585; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy584; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy585; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy584; + goto yy493; } } -yy584: +yy583: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy586; - if (yych <= '/') goto yy494; - goto yy587; + if (yych == '-') goto yy585; + if (yych <= '/') goto yy493; + goto yy586; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy587; + if (yych <= '@') goto yy493; + goto yy586; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy587; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy586; + goto yy493; } } -yy585: +yy584: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy587; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy586; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy587; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy586; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy587; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy586; + goto yy493; } } -yy586: +yy585: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy588; - if (yych <= '/') goto yy494; - goto yy589; + if (yych == '-') goto yy587; + if (yych <= '/') goto yy493; + goto yy588; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy589; + if (yych <= '@') goto yy493; + goto yy588; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy589; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy588; + goto yy493; } } -yy587: +yy586: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy589; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy588; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy589; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy588; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy589; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy588; + goto yy493; } } -yy588: +yy587: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy590; - if (yych <= '/') goto yy494; - goto yy591; + if (yych == '-') goto yy589; + if (yych <= '/') goto yy493; + goto yy590; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy591; + if (yych <= '@') goto yy493; + goto yy590; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy591; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy590; + goto yy493; } } -yy589: +yy588: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy591; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy590; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy591; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy590; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy591; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy590; + goto yy493; } } -yy590: +yy589: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy592; - if (yych <= '/') goto yy494; - goto yy593; + if (yych == '-') goto yy591; + if (yych <= '/') goto yy493; + goto yy592; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy593; + if (yych <= '@') goto yy493; + goto yy592; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy593; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy592; + goto yy493; } } -yy591: +yy590: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy593; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy592; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy593; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy592; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy593; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy592; + goto yy493; } } -yy592: +yy591: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy594; - if (yych <= '/') goto yy494; - goto yy595; + if (yych == '-') goto yy593; + if (yych <= '/') goto yy493; + goto yy594; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy595; + if (yych <= '@') goto yy493; + goto yy594; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy595; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy594; + goto yy493; } } -yy593: +yy592: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy595; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy594; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy595; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy594; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy595; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy594; + goto yy493; } } -yy594: +yy593: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy596; - if (yych <= '/') goto yy494; - goto yy597; + if (yych == '-') goto yy595; + if (yych <= '/') goto yy493; + goto yy596; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy597; + if (yych <= '@') goto yy493; + goto yy596; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy597; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy596; + goto yy493; } } -yy595: +yy594: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy597; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy596; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy597; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy596; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy597; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy596; + goto yy493; } } -yy596: +yy595: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy598; - if (yych <= '/') goto yy494; - goto yy599; + if (yych == '-') goto yy597; + if (yych <= '/') goto yy493; + goto yy598; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy599; + if (yych <= '@') goto yy493; + goto yy598; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy599; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy598; + goto yy493; } } -yy597: +yy596: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy599; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy598; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy599; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy598; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy599; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy598; + goto yy493; } } -yy598: +yy597: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy600; - if (yych <= '/') goto yy494; - goto yy601; + if (yych == '-') goto yy599; + if (yych <= '/') goto yy493; + goto yy600; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy601; + if (yych <= '@') goto yy493; + goto yy600; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy601; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy600; + goto yy493; } } -yy599: +yy598: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy601; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy600; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy601; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy600; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy601; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy600; + goto yy493; } } -yy600: +yy599: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy602; - if (yych <= '/') goto yy494; - goto yy603; + if (yych == '-') goto yy601; + if (yych <= '/') goto yy493; + goto yy602; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy603; + if (yych <= '@') goto yy493; + goto yy602; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy603; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy602; + goto yy493; } } -yy601: +yy600: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy603; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy602; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy603; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy602; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy603; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy602; + goto yy493; } } -yy602: +yy601: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy604; - if (yych <= '/') goto yy494; - goto yy605; + if (yych == '-') goto yy603; + if (yych <= '/') goto yy493; + goto yy604; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy605; + if (yych <= '@') goto yy493; + goto yy604; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy605; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy604; + goto yy493; } } -yy603: +yy602: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy605; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy604; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy605; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy604; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy605; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy604; + goto yy493; } } -yy604: +yy603: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy606; - if (yych <= '/') goto yy494; - goto yy607; + if (yych == '-') goto yy605; + if (yych <= '/') goto yy493; + goto yy606; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy607; + if (yych <= '@') goto yy493; + goto yy606; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy607; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy606; + goto yy493; } } -yy605: +yy604: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy607; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy606; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy607; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy606; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy607; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy606; + goto yy493; } } -yy606: +yy605: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy608; - if (yych <= '/') goto yy494; - goto yy609; + if (yych == '-') goto yy607; + if (yych <= '/') goto yy493; + goto yy608; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy609; + if (yych <= '@') goto yy493; + goto yy608; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy609; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy608; + goto yy493; } } -yy607: +yy606: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy609; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy608; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy609; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy608; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy609; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy608; + goto yy493; } } -yy608: +yy607: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy610; - if (yych <= '/') goto yy494; - goto yy611; + if (yych == '-') goto yy609; + if (yych <= '/') goto yy493; + goto yy610; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy611; + if (yych <= '@') goto yy493; + goto yy610; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy611; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy610; + goto yy493; } } -yy609: +yy608: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy611; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy610; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy611; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy610; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy611; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy610; + goto yy493; } } -yy610: +yy609: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy612; - if (yych <= '/') goto yy494; - goto yy613; + if (yych == '-') goto yy611; + if (yych <= '/') goto yy493; + goto yy612; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy613; + if (yych <= '@') goto yy493; + goto yy612; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy613; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy612; + goto yy493; } } -yy611: +yy610: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy613; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy612; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy613; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy612; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy613; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy612; + goto yy493; } } -yy612: +yy611: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy614; - if (yych <= '/') goto yy494; - goto yy615; + if (yych == '-') goto yy613; + if (yych <= '/') goto yy493; + goto yy614; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy615; + if (yych <= '@') goto yy493; + goto yy614; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy615; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy614; + goto yy493; } } -yy613: +yy612: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy615; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy614; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy615; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy614; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy615; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy614; + goto yy493; } } -yy614: +yy613: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy616; - if (yych <= '/') goto yy494; - goto yy617; + if (yych == '-') goto yy615; + if (yych <= '/') goto yy493; + goto yy616; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy617; + if (yych <= '@') goto yy493; + goto yy616; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy617; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy616; + goto yy493; } } -yy615: +yy614: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy617; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy616; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy617; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy616; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy617; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy616; + goto yy493; } } -yy616: +yy615: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy618; - if (yych <= '/') goto yy494; - goto yy619; + if (yych == '-') goto yy617; + if (yych <= '/') goto yy493; + goto yy618; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy619; + if (yych <= '@') goto yy493; + goto yy618; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy619; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy618; + goto yy493; } } -yy617: +yy616: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy619; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy618; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy619; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy618; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy619; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy618; + goto yy493; } } -yy618: +yy617: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy620; - if (yych <= '/') goto yy494; - goto yy621; + if (yych == '-') goto yy619; + if (yych <= '/') goto yy493; + goto yy620; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy621; + if (yych <= '@') goto yy493; + goto yy620; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy621; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy620; + goto yy493; } } -yy619: +yy618: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy621; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy620; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy621; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy620; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy621; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy620; + goto yy493; } } -yy620: +yy619: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy622; - if (yych <= '/') goto yy494; - goto yy623; + if (yych == '-') goto yy621; + if (yych <= '/') goto yy493; + goto yy622; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy623; + if (yych <= '@') goto yy493; + goto yy622; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy623; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy622; + goto yy493; } } -yy621: +yy620: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy623; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy622; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy623; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy622; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy623; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy622; + goto yy493; } } -yy622: +yy621: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy624; - if (yych <= '/') goto yy494; - goto yy625; + if (yych == '-') goto yy623; + if (yych <= '/') goto yy493; + goto yy624; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy625; + if (yych <= '@') goto yy493; + goto yy624; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy625; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy624; + goto yy493; } } -yy623: +yy622: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy625; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy624; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy625; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy624; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy625; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy624; + goto yy493; } } -yy624: +yy623: ++p; yych = *p; if (yych <= '@') { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy626; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy625; + goto yy493; } else { - if (yych <= 'Z') goto yy626; - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy626; - goto yy494; + if (yych <= 'Z') goto yy625; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy625; + goto yy493; } -yy625: +yy624: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= '-') goto yy494; - goto yy500; + if (yych <= '-') goto yy493; + goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych >= ':') goto yy494; + if (yych <= '/') goto yy493; + if (yych >= ':') goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; } else { - if (yych <= '`') goto yy494; - if (yych >= '{') goto yy494; + if (yych <= '`') goto yy493; + if (yych >= '{') goto yy493; } } -yy626: +yy625: ++p; yych = *p; - if (yych == '.') goto yy500; - if (yych == '>') goto yy501; - goto yy494; -yy627: + if (yych == '.') goto yy499; + if (yych == '>') goto yy500; + goto yy493; +yy626: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy629; - if (yych <= '/') goto yy494; - goto yy630; + if (yych == '-') goto yy628; + if (yych <= '/') goto yy493; + goto yy629; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy630; + if (yych <= '@') goto yy493; + goto yy629; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy630; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy629; + goto yy493; } } -yy628: +yy627: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy630; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy629; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy630; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy629; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy630; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy629; + goto yy493; } } -yy629: +yy628: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy631; - if (yych <= '/') goto yy494; - goto yy632; + if (yych == '-') goto yy630; + if (yych <= '/') goto yy493; + goto yy631; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy632; + if (yych <= '@') goto yy493; + goto yy631; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy632; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy631; + goto yy493; } } -yy630: +yy629: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy632; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy631; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy632; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy631; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy632; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy631; + goto yy493; } } -yy631: +yy630: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy633; - if (yych <= '/') goto yy494; - goto yy634; + if (yych == '-') goto yy632; + if (yych <= '/') goto yy493; + goto yy633; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy634; + if (yych <= '@') goto yy493; + goto yy633; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy634; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy633; + goto yy493; } } -yy632: +yy631: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy634; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy633; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy634; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy633; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy634; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy633; + goto yy493; } } -yy633: +yy632: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy635; - if (yych <= '/') goto yy494; - goto yy636; + if (yych == '-') goto yy634; + if (yych <= '/') goto yy493; + goto yy635; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy636; + if (yych <= '@') goto yy493; + goto yy635; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy636; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy635; + goto yy493; } } -yy634: +yy633: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy636; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy635; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy636; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy635; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy636; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy635; + goto yy493; } } -yy635: +yy634: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy637; - if (yych <= '/') goto yy494; - goto yy638; + if (yych == '-') goto yy636; + if (yych <= '/') goto yy493; + goto yy637; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy638; + if (yych <= '@') goto yy493; + goto yy637; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy638; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy637; + goto yy493; } } -yy636: +yy635: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy638; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy637; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy638; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy637; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy638; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy637; + goto yy493; } } -yy637: +yy636: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy639; - if (yych <= '/') goto yy494; - goto yy640; + if (yych == '-') goto yy638; + if (yych <= '/') goto yy493; + goto yy639; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy640; + if (yych <= '@') goto yy493; + goto yy639; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy640; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy639; + goto yy493; } } -yy638: +yy637: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy640; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy639; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy640; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy639; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy640; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy639; + goto yy493; } } -yy639: +yy638: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy641; - if (yych <= '/') goto yy494; - goto yy642; + if (yych == '-') goto yy640; + if (yych <= '/') goto yy493; + goto yy641; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy642; + if (yych <= '@') goto yy493; + goto yy641; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy642; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy641; + goto yy493; } } -yy640: +yy639: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy642; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy641; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy642; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy641; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy642; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy641; + goto yy493; } } -yy641: +yy640: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy643; - if (yych <= '/') goto yy494; - goto yy644; + if (yych == '-') goto yy642; + if (yych <= '/') goto yy493; + goto yy643; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy644; + if (yych <= '@') goto yy493; + goto yy643; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy644; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy643; + goto yy493; } } -yy642: +yy641: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy644; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy643; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy644; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy643; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy644; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy643; + goto yy493; } } -yy643: +yy642: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy645; - if (yych <= '/') goto yy494; - goto yy646; + if (yych == '-') goto yy644; + if (yych <= '/') goto yy493; + goto yy645; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy646; + if (yych <= '@') goto yy493; + goto yy645; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy646; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy645; + goto yy493; } } -yy644: +yy643: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy646; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy645; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy646; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy645; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy646; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy645; + goto yy493; } } -yy645: +yy644: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy647; - if (yych <= '/') goto yy494; - goto yy648; + if (yych == '-') goto yy646; + if (yych <= '/') goto yy493; + goto yy647; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy648; + if (yych <= '@') goto yy493; + goto yy647; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy648; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy647; + goto yy493; } } -yy646: +yy645: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy648; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy647; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy648; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy647; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy648; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy647; + goto yy493; } } -yy647: +yy646: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy649; - if (yych <= '/') goto yy494; - goto yy650; + if (yych == '-') goto yy648; + if (yych <= '/') goto yy493; + goto yy649; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy650; + if (yych <= '@') goto yy493; + goto yy649; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy650; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy649; + goto yy493; } } -yy648: +yy647: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy650; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy649; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy650; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy649; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy650; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy649; + goto yy493; } } -yy649: +yy648: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy651; - if (yych <= '/') goto yy494; - goto yy652; + if (yych == '-') goto yy650; + if (yych <= '/') goto yy493; + goto yy651; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy652; + if (yych <= '@') goto yy493; + goto yy651; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy652; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy651; + goto yy493; } } -yy650: +yy649: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy652; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy651; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy652; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy651; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy652; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy651; + goto yy493; } } -yy651: +yy650: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy653; - if (yych <= '/') goto yy494; - goto yy654; + if (yych == '-') goto yy652; + if (yych <= '/') goto yy493; + goto yy653; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy654; + if (yych <= '@') goto yy493; + goto yy653; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy654; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy653; + goto yy493; } } -yy652: +yy651: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy654; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy653; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy654; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy653; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy654; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy653; + goto yy493; } } -yy653: +yy652: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy655; - if (yych <= '/') goto yy494; - goto yy656; + if (yych == '-') goto yy654; + if (yych <= '/') goto yy493; + goto yy655; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy656; + if (yych <= '@') goto yy493; + goto yy655; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy656; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy655; + goto yy493; } } -yy654: +yy653: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy656; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy655; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy656; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy655; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy656; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy655; + goto yy493; } } -yy655: +yy654: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy657; - if (yych <= '/') goto yy494; - goto yy658; + if (yych == '-') goto yy656; + if (yych <= '/') goto yy493; + goto yy657; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy658; + if (yych <= '@') goto yy493; + goto yy657; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy658; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy657; + goto yy493; } } -yy656: +yy655: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy658; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy657; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy658; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy657; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy658; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy657; + goto yy493; } } -yy657: +yy656: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy659; - if (yych <= '/') goto yy494; - goto yy660; + if (yych == '-') goto yy658; + if (yych <= '/') goto yy493; + goto yy659; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy660; + if (yych <= '@') goto yy493; + goto yy659; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy660; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy659; + goto yy493; } } -yy658: +yy657: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy660; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy659; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy660; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy659; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy660; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy659; + goto yy493; } } -yy659: +yy658: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy661; - if (yych <= '/') goto yy494; - goto yy662; + if (yych == '-') goto yy660; + if (yych <= '/') goto yy493; + goto yy661; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy662; + if (yych <= '@') goto yy493; + goto yy661; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy662; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy661; + goto yy493; } } -yy660: +yy659: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy662; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy661; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy662; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy661; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy662; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy661; + goto yy493; } } -yy661: +yy660: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy663; - if (yych <= '/') goto yy494; - goto yy664; + if (yych == '-') goto yy662; + if (yych <= '/') goto yy493; + goto yy663; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy664; + if (yych <= '@') goto yy493; + goto yy663; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy664; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy663; + goto yy493; } } -yy662: +yy661: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy664; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy663; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy664; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy663; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy664; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy663; + goto yy493; } } -yy663: +yy662: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy665; - if (yych <= '/') goto yy494; - goto yy666; + if (yych == '-') goto yy664; + if (yych <= '/') goto yy493; + goto yy665; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy666; + if (yych <= '@') goto yy493; + goto yy665; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy666; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy665; + goto yy493; } } -yy664: +yy663: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy666; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy665; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy666; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy665; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy666; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy665; + goto yy493; } } -yy665: +yy664: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy667; - if (yych <= '/') goto yy494; - goto yy668; + if (yych == '-') goto yy666; + if (yych <= '/') goto yy493; + goto yy667; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy668; + if (yych <= '@') goto yy493; + goto yy667; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy668; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy667; + goto yy493; } } -yy666: +yy665: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy668; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy667; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy668; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy667; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy668; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy667; + goto yy493; } } -yy667: +yy666: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy669; - if (yych <= '/') goto yy494; - goto yy670; + if (yych == '-') goto yy668; + if (yych <= '/') goto yy493; + goto yy669; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy670; + if (yych <= '@') goto yy493; + goto yy669; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy670; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy669; + goto yy493; } } -yy668: +yy667: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy670; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy669; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy670; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy669; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy670; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy669; + goto yy493; } } -yy669: +yy668: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy671; - if (yych <= '/') goto yy494; - goto yy672; + if (yych == '-') goto yy670; + if (yych <= '/') goto yy493; + goto yy671; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy672; + if (yych <= '@') goto yy493; + goto yy671; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy672; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy671; + goto yy493; } } -yy670: +yy669: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy672; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy671; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy672; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy671; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy672; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy671; + goto yy493; } } -yy671: +yy670: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy673; - if (yych <= '/') goto yy494; - goto yy674; + if (yych == '-') goto yy672; + if (yych <= '/') goto yy493; + goto yy673; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy674; + if (yych <= '@') goto yy493; + goto yy673; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy674; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy673; + goto yy493; } } -yy672: +yy671: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy674; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy673; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy674; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy673; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy674; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy673; + goto yy493; } } -yy673: +yy672: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy675; - if (yych <= '/') goto yy494; - goto yy676; + if (yych == '-') goto yy674; + if (yych <= '/') goto yy493; + goto yy675; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy676; + if (yych <= '@') goto yy493; + goto yy675; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy676; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy675; + goto yy493; } } -yy674: +yy673: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy676; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy675; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy676; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy675; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy676; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy675; + goto yy493; } } -yy675: +yy674: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy677; - if (yych <= '/') goto yy494; - goto yy678; + if (yych == '-') goto yy676; + if (yych <= '/') goto yy493; + goto yy677; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy678; + if (yych <= '@') goto yy493; + goto yy677; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy678; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy677; + goto yy493; } } -yy676: +yy675: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy678; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy677; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy678; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy677; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy678; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy677; + goto yy493; } } -yy677: +yy676: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy679; - if (yych <= '/') goto yy494; - goto yy680; + if (yych == '-') goto yy678; + if (yych <= '/') goto yy493; + goto yy679; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy680; + if (yych <= '@') goto yy493; + goto yy679; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy680; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy679; + goto yy493; } } -yy678: +yy677: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy680; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy679; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy680; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy679; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy680; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy679; + goto yy493; } } -yy679: +yy678: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy681; - if (yych <= '/') goto yy494; - goto yy682; + if (yych == '-') goto yy680; + if (yych <= '/') goto yy493; + goto yy681; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy682; + if (yych <= '@') goto yy493; + goto yy681; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy682; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy681; + goto yy493; } } -yy680: +yy679: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy682; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy681; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy682; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy681; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy682; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy681; + goto yy493; } } -yy681: +yy680: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy683; - if (yych <= '/') goto yy494; - goto yy684; + if (yych == '-') goto yy682; + if (yych <= '/') goto yy493; + goto yy683; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy684; + if (yych <= '@') goto yy493; + goto yy683; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy684; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy683; + goto yy493; } } -yy682: +yy681: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy684; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy683; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy684; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy683; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy684; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy683; + goto yy493; } } -yy683: +yy682: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy685; - if (yych <= '/') goto yy494; - goto yy686; + if (yych == '-') goto yy684; + if (yych <= '/') goto yy493; + goto yy685; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy686; + if (yych <= '@') goto yy493; + goto yy685; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy686; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy685; + goto yy493; } } -yy684: +yy683: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy686; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy685; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy686; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy685; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy686; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy685; + goto yy493; } } -yy685: +yy684: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy687; - if (yych <= '/') goto yy494; - goto yy688; + if (yych == '-') goto yy686; + if (yych <= '/') goto yy493; + goto yy687; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy688; + if (yych <= '@') goto yy493; + goto yy687; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy688; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy687; + goto yy493; } } -yy686: +yy685: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy688; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy687; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy688; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy687; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy688; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy687; + goto yy493; } } -yy687: +yy686: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy689; - if (yych <= '/') goto yy494; - goto yy690; + if (yych == '-') goto yy688; + if (yych <= '/') goto yy493; + goto yy689; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy690; + if (yych <= '@') goto yy493; + goto yy689; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy690; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy689; + goto yy493; } } -yy688: +yy687: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy690; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy689; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy690; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy689; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy690; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy689; + goto yy493; } } -yy689: +yy688: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy691; - if (yych <= '/') goto yy494; - goto yy692; + if (yych == '-') goto yy690; + if (yych <= '/') goto yy493; + goto yy691; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy692; + if (yych <= '@') goto yy493; + goto yy691; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy692; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy691; + goto yy493; } } -yy690: +yy689: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy692; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy691; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy692; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy691; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy692; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy691; + goto yy493; } } -yy691: +yy690: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy693; - if (yych <= '/') goto yy494; - goto yy694; + if (yych == '-') goto yy692; + if (yych <= '/') goto yy493; + goto yy693; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy694; + if (yych <= '@') goto yy493; + goto yy693; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy694; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy693; + goto yy493; } } -yy692: +yy691: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy694; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy693; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy694; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy693; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy694; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy693; + goto yy493; } } -yy693: +yy692: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy695; - if (yych <= '/') goto yy494; - goto yy696; + if (yych == '-') goto yy694; + if (yych <= '/') goto yy493; + goto yy695; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy696; + if (yych <= '@') goto yy493; + goto yy695; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy696; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy695; + goto yy493; } } -yy694: +yy693: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy696; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy695; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy696; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy695; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy696; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy695; + goto yy493; } } -yy695: +yy694: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy697; - if (yych <= '/') goto yy494; - goto yy698; + if (yych == '-') goto yy696; + if (yych <= '/') goto yy493; + goto yy697; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy698; + if (yych <= '@') goto yy493; + goto yy697; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy698; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy697; + goto yy493; } } -yy696: +yy695: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy698; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy697; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy698; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy697; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy698; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy697; + goto yy493; } } -yy697: +yy696: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy699; - if (yych <= '/') goto yy494; - goto yy700; + if (yych == '-') goto yy698; + if (yych <= '/') goto yy493; + goto yy699; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy700; + if (yych <= '@') goto yy493; + goto yy699; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy700; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy699; + goto yy493; } } -yy698: +yy697: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy700; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy699; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy700; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy699; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy700; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy699; + goto yy493; } } -yy699: +yy698: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy701; - if (yych <= '/') goto yy494; - goto yy702; + if (yych == '-') goto yy700; + if (yych <= '/') goto yy493; + goto yy701; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy702; + if (yych <= '@') goto yy493; + goto yy701; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy702; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy701; + goto yy493; } } -yy700: +yy699: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy702; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy701; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy702; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy701; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy702; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy701; + goto yy493; } } -yy701: +yy700: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy703; - if (yych <= '/') goto yy494; - goto yy704; + if (yych == '-') goto yy702; + if (yych <= '/') goto yy493; + goto yy703; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy704; + if (yych <= '@') goto yy493; + goto yy703; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy704; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy703; + goto yy493; } } -yy702: +yy701: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy704; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy703; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy704; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy703; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy704; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy703; + goto yy493; } } -yy703: +yy702: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy705; - if (yych <= '/') goto yy494; - goto yy706; + if (yych == '-') goto yy704; + if (yych <= '/') goto yy493; + goto yy705; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy706; + if (yych <= '@') goto yy493; + goto yy705; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy706; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy705; + goto yy493; } } -yy704: +yy703: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy706; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy705; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy706; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy705; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy706; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy705; + goto yy493; } } -yy705: +yy704: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy707; - if (yych <= '/') goto yy494; - goto yy708; + if (yych == '-') goto yy706; + if (yych <= '/') goto yy493; + goto yy707; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy708; + if (yych <= '@') goto yy493; + goto yy707; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy708; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy707; + goto yy493; } } -yy706: +yy705: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy708; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy707; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy708; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy707; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy708; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy707; + goto yy493; } } -yy707: +yy706: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy709; - if (yych <= '/') goto yy494; - goto yy710; + if (yych == '-') goto yy708; + if (yych <= '/') goto yy493; + goto yy709; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy710; + if (yych <= '@') goto yy493; + goto yy709; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy710; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy709; + goto yy493; } } -yy708: +yy707: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy710; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy709; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy710; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy709; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy710; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy709; + goto yy493; } } -yy709: +yy708: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy711; - if (yych <= '/') goto yy494; - goto yy712; + if (yych == '-') goto yy710; + if (yych <= '/') goto yy493; + goto yy711; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy712; + if (yych <= '@') goto yy493; + goto yy711; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy712; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy711; + goto yy493; } } -yy710: +yy709: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy712; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy711; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy712; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy711; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy712; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy711; + goto yy493; } } -yy711: +yy710: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy713; - if (yych <= '/') goto yy494; - goto yy714; + if (yych == '-') goto yy712; + if (yych <= '/') goto yy493; + goto yy713; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy714; + if (yych <= '@') goto yy493; + goto yy713; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy714; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy713; + goto yy493; } } -yy712: +yy711: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy714; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy713; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy714; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy713; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy714; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy713; + goto yy493; } } -yy713: +yy712: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy715; - if (yych <= '/') goto yy494; - goto yy716; + if (yych == '-') goto yy714; + if (yych <= '/') goto yy493; + goto yy715; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy716; + if (yych <= '@') goto yy493; + goto yy715; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy716; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy715; + goto yy493; } } -yy714: +yy713: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy716; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy715; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy716; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy715; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy716; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy715; + goto yy493; } } -yy715: +yy714: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy717; - if (yych <= '/') goto yy494; - goto yy718; + if (yych == '-') goto yy716; + if (yych <= '/') goto yy493; + goto yy717; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy718; + if (yych <= '@') goto yy493; + goto yy717; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy718; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy717; + goto yy493; } } -yy716: +yy715: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy718; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy717; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy718; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy717; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy718; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy717; + goto yy493; } } -yy717: +yy716: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy719; - if (yych <= '/') goto yy494; - goto yy720; + if (yych == '-') goto yy718; + if (yych <= '/') goto yy493; + goto yy719; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy720; + if (yych <= '@') goto yy493; + goto yy719; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy720; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy719; + goto yy493; } } -yy718: +yy717: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy720; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy719; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy720; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy719; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy720; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy719; + goto yy493; } } -yy719: +yy718: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy721; - if (yych <= '/') goto yy494; - goto yy722; + if (yych == '-') goto yy720; + if (yych <= '/') goto yy493; + goto yy721; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy722; + if (yych <= '@') goto yy493; + goto yy721; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy722; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy721; + goto yy493; } } -yy720: +yy719: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy722; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy721; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy722; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy721; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy722; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy721; + goto yy493; } } -yy721: +yy720: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy723; - if (yych <= '/') goto yy494; - goto yy724; + if (yych == '-') goto yy722; + if (yych <= '/') goto yy493; + goto yy723; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy724; + if (yych <= '@') goto yy493; + goto yy723; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy724; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy723; + goto yy493; } } -yy722: +yy721: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy724; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy723; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy724; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy723; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy724; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy723; + goto yy493; } } -yy723: +yy722: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy725; - if (yych <= '/') goto yy494; - goto yy726; + if (yych == '-') goto yy724; + if (yych <= '/') goto yy493; + goto yy725; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy726; + if (yych <= '@') goto yy493; + goto yy725; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy726; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy725; + goto yy493; } } -yy724: +yy723: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy726; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy725; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy726; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy725; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy726; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy725; + goto yy493; } } -yy725: +yy724: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy727; - if (yych <= '/') goto yy494; - goto yy728; + if (yych == '-') goto yy726; + if (yych <= '/') goto yy493; + goto yy727; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy728; + if (yych <= '@') goto yy493; + goto yy727; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy728; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy727; + goto yy493; } } -yy726: +yy725: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy728; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy727; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy728; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy727; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy728; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy727; + goto yy493; } } -yy727: +yy726: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy729; - if (yych <= '/') goto yy494; - goto yy730; + if (yych == '-') goto yy728; + if (yych <= '/') goto yy493; + goto yy729; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy730; + if (yych <= '@') goto yy493; + goto yy729; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy730; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy729; + goto yy493; } } -yy728: +yy727: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy730; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy729; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy730; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy729; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy730; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy729; + goto yy493; } } -yy729: +yy728: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy731; - if (yych <= '/') goto yy494; - goto yy732; + if (yych == '-') goto yy730; + if (yych <= '/') goto yy493; + goto yy731; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy732; + if (yych <= '@') goto yy493; + goto yy731; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy732; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy731; + goto yy493; } } -yy730: +yy729: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy732; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy731; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy732; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy731; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy732; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy731; + goto yy493; } } -yy731: +yy730: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy733; - if (yych <= '/') goto yy494; - goto yy734; + if (yych == '-') goto yy732; + if (yych <= '/') goto yy493; + goto yy733; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy734; + if (yych <= '@') goto yy493; + goto yy733; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy734; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy733; + goto yy493; } } -yy732: +yy731: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy734; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy733; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy734; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy733; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy734; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy733; + goto yy493; } } -yy733: +yy732: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy735; - if (yych <= '/') goto yy494; - goto yy736; + if (yych == '-') goto yy734; + if (yych <= '/') goto yy493; + goto yy735; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy736; + if (yych <= '@') goto yy493; + goto yy735; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy736; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy735; + goto yy493; } } -yy734: +yy733: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy736; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy735; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy736; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy735; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy736; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy735; + goto yy493; } } -yy735: +yy734: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy737; - if (yych <= '/') goto yy494; - goto yy738; + if (yych == '-') goto yy736; + if (yych <= '/') goto yy493; + goto yy737; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy738; + if (yych <= '@') goto yy493; + goto yy737; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy738; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy737; + goto yy493; } } -yy736: +yy735: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy738; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy737; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy738; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy737; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy738; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy737; + goto yy493; } } -yy737: +yy736: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy739; - if (yych <= '/') goto yy494; - goto yy740; + if (yych == '-') goto yy738; + if (yych <= '/') goto yy493; + goto yy739; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy740; + if (yych <= '@') goto yy493; + goto yy739; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy740; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy739; + goto yy493; } } -yy738: +yy737: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy740; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy739; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy740; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy739; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy740; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy739; + goto yy493; } } -yy739: +yy738: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy741; - if (yych <= '/') goto yy494; - goto yy742; + if (yych == '-') goto yy740; + if (yych <= '/') goto yy493; + goto yy741; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy742; + if (yych <= '@') goto yy493; + goto yy741; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy742; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy741; + goto yy493; } } -yy740: +yy739: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy742; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy741; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy742; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy741; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy742; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy741; + goto yy493; } } -yy741: +yy740: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy743; - if (yych <= '/') goto yy494; - goto yy744; + if (yych == '-') goto yy742; + if (yych <= '/') goto yy493; + goto yy743; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy744; + if (yych <= '@') goto yy493; + goto yy743; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy744; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy743; + goto yy493; } } -yy742: +yy741: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy744; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy743; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy744; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy743; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy744; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy743; + goto yy493; } } -yy743: +yy742: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy745; - if (yych <= '/') goto yy494; - goto yy746; + if (yych == '-') goto yy744; + if (yych <= '/') goto yy493; + goto yy745; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy494; - goto yy746; + if (yych <= '@') goto yy493; + goto yy745; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy746; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy745; + goto yy493; } } -yy744: +yy743: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy494; - if (yych >= '.') goto yy500; + if (yych <= ',') goto yy493; + if (yych >= '.') goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy746; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy745; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy746; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy745; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy746; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy745; + goto yy493; } } -yy745: +yy744: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy626; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy625; + goto yy493; } else { - if (yych <= 'Z') goto yy626; - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy626; - goto yy494; + if (yych <= 'Z') goto yy625; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy625; + goto yy493; } -yy746: +yy745: ++p; if ((yych = *p) <= '=') { if (yych <= '.') { - if (yych <= '-') goto yy494; - goto yy500; + if (yych <= '-') goto yy493; + goto yy499; } else { - if (yych <= '/') goto yy494; - if (yych <= '9') goto yy626; - goto yy494; + if (yych <= '/') goto yy493; + if (yych <= '9') goto yy625; + goto yy493; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy501; - if (yych <= '@') goto yy494; - goto yy626; + if (yych <= '>') goto yy500; + if (yych <= '@') goto yy493; + goto yy625; } else { - if (yych <= '`') goto yy494; - if (yych <= 'z') goto yy626; - goto yy494; + if (yych <= '`') goto yy493; + if (yych <= 'z') goto yy625; + goto yy493; } } } @@ -8001,571 +7982,571 @@ int _scan_html_tag(const unsigned char *p) yych = *p; if (yych <= '/') { if (yych <= ' ') { - if (yych != '\n') goto yy754; + if (yych != '\n') goto yy753; } else { - if (yych <= '!') goto yy752; - if (yych <= '.') goto yy754; - goto yy751; + if (yych <= '!') goto yy751; + if (yych <= '.') goto yy753; + goto yy750; } } else { if (yych <= '@') { - if (yych == '?') goto yy753; - goto yy754; + if (yych == '?') goto yy752; + goto yy753; } else { - if (yych <= 'Z') goto yy750; - if (yych <= '`') goto yy754; - if (yych <= 'z') goto yy750; - goto yy754; + if (yych <= 'Z') goto yy749; + if (yych <= '`') goto yy753; + if (yych <= 'z') goto yy749; + goto yy753; } } -yy749: +yy748: { return 0; } -yy750: +yy749: yych = *(marker = ++p); if (yych <= '9') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy749; - if (yych <= '\n') goto yy791; - goto yy749; + if (yych <= 0x08) goto yy748; + if (yych <= '\n') goto yy790; + goto yy748; } else { - if (yych <= ' ') goto yy791; - if (yych <= '.') goto yy749; - if (yych <= '/') goto yy793; - goto yy789; + if (yych <= ' ') goto yy790; + if (yych <= '.') goto yy748; + if (yych <= '/') goto yy792; + goto yy788; } } else { if (yych <= '@') { - if (yych == '>') goto yy759; - goto yy749; + if (yych == '>') goto yy758; + goto yy748; } else { - if (yych <= 'Z') goto yy789; - if (yych <= '`') goto yy749; - if (yych <= 'z') goto yy789; - goto yy749; + if (yych <= 'Z') goto yy788; + if (yych <= '`') goto yy748; + if (yych <= 'z') goto yy788; + goto yy748; } } -yy751: +yy750: yych = *(marker = ++p); - if (yych <= '@') goto yy749; - if (yych <= 'Z') goto yy785; - if (yych <= '`') goto yy749; - if (yych <= 'z') goto yy785; - goto yy749; -yy752: + if (yych <= '@') goto yy748; + if (yych <= 'Z') goto yy784; + if (yych <= '`') goto yy748; + if (yych <= 'z') goto yy784; + goto yy748; +yy751: yych = *(marker = ++p); if (yybm[256+yych] & 64) { - goto yy762; + goto yy761; } - if (yych == '-') goto yy764; - if (yych == '[') goto yy761; - goto yy749; -yy753: + if (yych == '-') goto yy763; + if (yych == '[') goto yy760; + goto yy748; +yy752: yych = *(marker = ++p); - if (yych <= 0x00) goto yy749; - goto yy756; -yy754: + if (yych <= 0x00) goto yy748; + goto yy755; +yy753: yych = *++p; - goto yy749; -yy755: + goto yy748; +yy754: ++p; yych = *p; -yy756: +yy755: if (yybm[256+yych] & 32) { - goto yy755; + goto yy754; } - if (yych >= 0x01) goto yy758; -yy757: + if (yych >= 0x01) goto yy757; +yy756: p = marker; - goto yy749; -yy758: + goto yy748; +yy757: ++p; yych = *p; - if (yych <= 0x00) goto yy757; - if (yych != '>') goto yy755; -yy759: + if (yych <= 0x00) goto yy756; + if (yych != '>') goto yy754; +yy758: ++p; { return (p - start); } -yy761: +yy760: yych = *++p; - if (yych == 'C') goto yy776; - if (yych == 'c') goto yy776; - goto yy757; -yy762: + if (yych == 'C') goto yy775; + if (yych == 'c') goto yy775; + goto yy756; +yy761: ++p; yych = *p; if (yybm[0+yych] & 1) { - goto yy772; + goto yy771; } - if (yych <= '@') goto yy757; - if (yych <= 'Z') goto yy762; - goto yy757; -yy764: + if (yych <= '@') goto yy756; + if (yych <= 'Z') goto yy761; + goto yy756; +yy763: yych = *++p; - if (yych != '-') goto yy757; + if (yych != '-') goto yy756; yych = *++p; - if (yych == '-') goto yy766; - if (yych == '>') goto yy757; - goto yy768; -yy766: + if (yych == '-') goto yy765; + if (yych == '>') goto yy756; + goto yy767; +yy765: yych = *++p; - if (yych == '-') goto yy771; - if (yych == '>') goto yy757; - goto yy768; -yy767: + if (yych == '-') goto yy770; + if (yych == '>') goto yy756; + goto yy767; +yy766: ++p; yych = *p; -yy768: +yy767: if (yybm[256+yych] & 128) { - goto yy767; + goto yy766; } - if (yych <= 0x00) goto yy757; + if (yych <= 0x00) goto yy756; ++p; yych = *p; if (yybm[256+yych] & 128) { - goto yy767; + goto yy766; } - if (yych <= 0x00) goto yy757; + if (yych <= 0x00) goto yy756; yych = *++p; - if (yych == '>') goto yy759; - goto yy757; -yy771: + if (yych == '>') goto yy758; + goto yy756; +yy770: yych = *++p; - if (yych == '>') goto yy759; - goto yy757; -yy772: + if (yych == '>') goto yy758; + goto yy756; +yy771: ++p; yych = *p; if (yybm[0+yych] & 1) { - goto yy772; + goto yy771; } - if (yych <= 0x00) goto yy757; - if (yych == '>') goto yy759; -yy774: + if (yych <= 0x00) goto yy756; + if (yych == '>') goto yy758; +yy773: ++p; yych = *p; if (yybm[0+yych] & 2) { - goto yy774; + goto yy773; } - if (yych <= 0x00) goto yy757; - goto yy759; + if (yych <= 0x00) goto yy756; + goto yy758; +yy775: + yych = *++p; + if (yych == 'D') goto yy776; + if (yych != 'd') goto yy756; yy776: yych = *++p; - if (yych == 'D') goto yy777; - if (yych != 'd') goto yy757; + if (yych == 'A') goto yy777; + if (yych != 'a') goto yy756; yy777: yych = *++p; - if (yych == 'A') goto yy778; - if (yych != 'a') goto yy757; + if (yych == 'T') goto yy778; + if (yych != 't') goto yy756; yy778: yych = *++p; - if (yych == 'T') goto yy779; - if (yych != 't') goto yy757; + if (yych == 'A') goto yy779; + if (yych != 'a') goto yy756; yy779: yych = *++p; - if (yych == 'A') goto yy780; - if (yych != 'a') goto yy757; + if (yych != '[') goto yy756; yy780: - yych = *++p; - if (yych != '[') goto yy757; -yy781: ++p; yych = *p; if (yybm[0+yych] & 4) { - goto yy781; + goto yy780; } - if (yych <= 0x00) goto yy757; + if (yych <= 0x00) goto yy756; ++p; yych = *p; if (yybm[0+yych] & 4) { - goto yy781; + goto yy780; } - if (yych <= 0x00) goto yy757; + if (yych <= 0x00) goto yy756; ++p; yych = *p; - if (yych <= 0x00) goto yy757; - if (yych == '>') goto yy759; - goto yy781; -yy785: + if (yych <= 0x00) goto yy756; + if (yych == '>') goto yy758; + goto yy780; +yy784: ++p; yych = *p; if (yybm[0+yych] & 8) { - goto yy785; + goto yy784; } if (yych <= 0x1F) { - if (yych <= 0x08) goto yy757; - if (yych >= '\v') goto yy757; + if (yych <= 0x08) goto yy756; + if (yych >= '\v') goto yy756; } else { - if (yych <= ' ') goto yy787; - if (yych == '>') goto yy759; - goto yy757; + if (yych <= ' ') goto yy786; + if (yych == '>') goto yy758; + goto yy756; } -yy787: +yy786: ++p; yych = *p; if (yych <= 0x1F) { - if (yych <= 0x08) goto yy757; - if (yych <= '\n') goto yy787; - goto yy757; + if (yych <= 0x08) goto yy756; + if (yych <= '\n') goto yy786; + goto yy756; } else { - if (yych <= ' ') goto yy787; - if (yych == '>') goto yy759; - goto yy757; + if (yych <= ' ') goto yy786; + if (yych == '>') goto yy758; + goto yy756; } -yy789: +yy788: ++p; yych = *p; if (yych <= '9') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy757; - if (yych >= '\v') goto yy757; + if (yych <= 0x08) goto yy756; + if (yych >= '\v') goto yy756; } else { - if (yych <= ' ') goto yy791; - if (yych <= '.') goto yy757; - if (yych <= '/') goto yy793; - goto yy789; + if (yych <= ' ') goto yy790; + if (yych <= '.') goto yy756; + if (yych <= '/') goto yy792; + goto yy788; } } else { if (yych <= '@') { - if (yych == '>') goto yy759; - goto yy757; + if (yych == '>') goto yy758; + goto yy756; } else { - if (yych <= 'Z') goto yy789; - if (yych <= '`') goto yy757; - if (yych <= 'z') goto yy789; - goto yy757; + if (yych <= 'Z') goto yy788; + if (yych <= '`') goto yy756; + if (yych <= 'z') goto yy788; + goto yy756; } } -yy791: +yy790: ++p; yych = *p; if (yych <= ':') { if (yych <= ' ') { - if (yych <= 0x08) goto yy757; - if (yych <= '\n') goto yy791; - if (yych <= 0x1F) goto yy757; - goto yy791; + if (yych <= 0x08) goto yy756; + if (yych <= '\n') goto yy790; + if (yych <= 0x1F) goto yy756; + goto yy790; } else { - if (yych == '/') goto yy793; - if (yych <= '9') goto yy757; - goto yy794; + if (yych == '/') goto yy792; + if (yych <= '9') goto yy756; + goto yy793; } } else { if (yych <= 'Z') { - if (yych == '>') goto yy759; - if (yych <= '@') goto yy757; - goto yy794; + if (yych == '>') goto yy758; + if (yych <= '@') goto yy756; + goto yy793; } else { if (yych <= '_') { - if (yych <= '^') goto yy757; - goto yy794; + if (yych <= '^') goto yy756; + goto yy793; } else { - if (yych <= '`') goto yy757; - if (yych <= 'z') goto yy794; - goto yy757; + if (yych <= '`') goto yy756; + if (yych <= 'z') goto yy793; + goto yy756; } } } -yy793: +yy792: yych = *++p; - if (yych == '>') goto yy759; - goto yy757; -yy794: + if (yych == '>') goto yy758; + goto yy756; +yy793: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy794; + goto yy793; } if (yych <= '.') { if (yych <= '\n') { - if (yych <= 0x08) goto yy757; + if (yych <= 0x08) goto yy756; } else { - if (yych != ' ') goto yy757; + if (yych != ' ') goto yy756; } } else { if (yych <= '<') { - if (yych <= '/') goto yy793; - goto yy757; + if (yych <= '/') goto yy792; + goto yy756; } else { - if (yych <= '=') goto yy798; - if (yych <= '>') goto yy759; - goto yy757; + if (yych <= '=') goto yy797; + if (yych <= '>') goto yy758; + goto yy756; } } -yy796: +yy795: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { - if (yych <= 0x08) goto yy757; - if (yych <= '\n') goto yy796; - if (yych <= 0x1F) goto yy757; - goto yy796; + if (yych <= 0x08) goto yy756; + if (yych <= '\n') goto yy795; + if (yych <= 0x1F) goto yy756; + goto yy795; } else { if (yych <= '/') { - if (yych <= '.') goto yy757; - goto yy793; + if (yych <= '.') goto yy756; + goto yy792; } else { - if (yych == ':') goto yy794; - goto yy757; + if (yych == ':') goto yy793; + goto yy756; } } } else { if (yych <= 'Z') { - if (yych <= '=') goto yy798; - if (yych <= '>') goto yy759; - if (yych <= '@') goto yy757; - goto yy794; + if (yych <= '=') goto yy797; + if (yych <= '>') goto yy758; + if (yych <= '@') goto yy756; + goto yy793; } else { if (yych <= '_') { - if (yych <= '^') goto yy757; - goto yy794; + if (yych <= '^') goto yy756; + goto yy793; } else { - if (yych <= '`') goto yy757; - if (yych <= 'z') goto yy794; - goto yy757; + if (yych <= '`') goto yy756; + if (yych <= 'z') goto yy793; + goto yy756; } } } -yy798: +yy797: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy800; + goto yy799; } - if (yych <= 0x00) goto yy757; - if (yych <= '!') goto yy799; - if (yych <= '"') goto yy804; - if (yych <= ';') goto yy802; - goto yy757; -yy799: + if (yych <= 0x00) goto yy756; + if (yych <= '!') goto yy798; + if (yych <= '"') goto yy803; + if (yych <= ';') goto yy801; + goto yy756; +yy798: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy800; + goto yy799; } if (yych <= '"') { - if (yych <= 0x00) goto yy757; - if (yych <= '!') goto yy813; - goto yy804; + if (yych <= 0x00) goto yy756; + if (yych <= '!') goto yy812; + goto yy803; } else { - if (yych <= ';') goto yy802; - if (yych == '>') goto yy759; - goto yy757; + if (yych <= ';') goto yy801; + if (yych == '>') goto yy758; + goto yy756; } -yy800: +yy799: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy800; + goto yy799; } - if (yych <= 0x00) goto yy757; - if (yych <= '!') goto yy807; - if (yych == '>') goto yy759; - goto yy757; -yy802: + if (yych <= 0x00) goto yy756; + if (yych <= '!') goto yy806; + if (yych == '>') goto yy758; + goto yy756; +yy801: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy802; + goto yy801; } - if (yych <= 0x00) goto yy757; - goto yy806; -yy804: + if (yych <= 0x00) goto yy756; + goto yy805; +yy803: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy804; + goto yy803; } - if (yych <= 0x00) goto yy757; -yy806: + if (yych <= 0x00) goto yy756; +yy805: ++p; yych = *p; if (yych <= ' ') { - if (yych <= 0x08) goto yy757; - if (yych <= '\n') goto yy791; - if (yych <= 0x1F) goto yy757; - goto yy791; + if (yych <= 0x08) goto yy756; + if (yych <= '\n') goto yy790; + if (yych <= 0x1F) goto yy756; + goto yy790; } else { if (yych <= '/') { - if (yych <= '.') goto yy757; - goto yy793; + if (yych <= '.') goto yy756; + goto yy792; } else { - if (yych == '>') goto yy759; - goto yy757; + if (yych == '>') goto yy758; + goto yy756; } } -yy807: +yy806: ++p; yych = *p; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { - if (yych <= 0x00) goto yy757; - goto yy800; + if (yych <= 0x00) goto yy756; + goto yy799; } else { - if (yych <= '\n') goto yy807; - if (yych <= 0x1F) goto yy800; - goto yy807; + if (yych <= '\n') goto yy806; + if (yych <= 0x1F) goto yy799; + goto yy806; } } else { if (yych <= '"') { - if (yych <= '!') goto yy800; - goto yy757; + if (yych <= '!') goto yy799; + goto yy756; } else { - if (yych == '\'') goto yy757; - goto yy800; + if (yych == '\'') goto yy756; + goto yy799; } } } else { if (yych <= '@') { if (yych <= ';') { - if (yych >= ';') goto yy800; + if (yych >= ';') goto yy799; } else { - if (yych <= '=') goto yy757; - if (yych <= '>') goto yy759; - goto yy800; + if (yych <= '=') goto yy756; + if (yych <= '>') goto yy758; + goto yy799; } } else { if (yych <= '_') { - if (yych <= 'Z') goto yy809; - if (yych <= '^') goto yy800; + if (yych <= 'Z') goto yy808; + if (yych <= '^') goto yy799; } else { - if (yych <= '`') goto yy757; - if (yych >= '{') goto yy800; + if (yych <= '`') goto yy756; + if (yych >= '{') goto yy799; } } } -yy809: +yy808: ++p; yych = *p; if (yych <= '/') { if (yych <= '!') { if (yych <= '\n') { - if (yych <= 0x00) goto yy757; - if (yych <= 0x08) goto yy800; + if (yych <= 0x00) goto yy756; + if (yych <= 0x08) goto yy799; } else { - if (yych != ' ') goto yy800; + if (yych != ' ') goto yy799; } } else { if (yych <= '\'') { - if (yych <= '"') goto yy757; - if (yych <= '&') goto yy800; - goto yy757; + if (yych <= '"') goto yy756; + if (yych <= '&') goto yy799; + goto yy756; } else { - if (yych <= ',') goto yy800; - if (yych <= '.') goto yy809; - goto yy800; + if (yych <= ',') goto yy799; + if (yych <= '.') goto yy808; + goto yy799; } } } else { if (yych <= '@') { if (yych <= '<') { - if (yych <= ':') goto yy809; - if (yych <= ';') goto yy800; - goto yy757; + if (yych <= ':') goto yy808; + if (yych <= ';') goto yy799; + goto yy756; } else { - if (yych <= '=') goto yy798; - if (yych <= '>') goto yy759; - goto yy800; + if (yych <= '=') goto yy797; + if (yych <= '>') goto yy758; + goto yy799; } } else { if (yych <= '_') { - if (yych <= 'Z') goto yy809; - if (yych <= '^') goto yy800; - goto yy809; + if (yych <= 'Z') goto yy808; + if (yych <= '^') goto yy799; + goto yy808; } else { - if (yych <= '`') goto yy757; - if (yych <= 'z') goto yy809; - goto yy800; + if (yych <= '`') goto yy756; + if (yych <= 'z') goto yy808; + goto yy799; } } } -yy811: +yy810: ++p; yych = *p; if (yych <= ':') { if (yych <= ' ') { if (yych <= 0x08) { - if (yych <= 0x00) goto yy757; - goto yy800; + if (yych <= 0x00) goto yy756; + goto yy799; } else { - if (yych <= '\n') goto yy811; - if (yych <= 0x1F) goto yy800; - goto yy811; + if (yych <= '\n') goto yy810; + if (yych <= 0x1F) goto yy799; + goto yy810; } } else { if (yych <= '&') { - if (yych == '"') goto yy757; - goto yy800; + if (yych == '"') goto yy756; + goto yy799; } else { - if (yych <= '\'') goto yy757; - if (yych <= '9') goto yy800; - goto yy809; + if (yych <= '\'') goto yy756; + if (yych <= '9') goto yy799; + goto yy808; } } } else { if (yych <= '@') { if (yych <= '<') { - if (yych <= ';') goto yy800; - goto yy757; + if (yych <= ';') goto yy799; + goto yy756; } else { - if (yych <= '=') goto yy798; - if (yych <= '>') goto yy759; - goto yy800; + if (yych <= '=') goto yy797; + if (yych <= '>') goto yy758; + goto yy799; } } else { if (yych <= '_') { - if (yych <= 'Z') goto yy809; - if (yych <= '^') goto yy800; - goto yy809; + if (yych <= 'Z') goto yy808; + if (yych <= '^') goto yy799; + goto yy808; } else { - if (yych <= '`') goto yy757; - if (yych <= 'z') goto yy809; - goto yy800; + if (yych <= '`') goto yy756; + if (yych <= 'z') goto yy808; + goto yy799; } } } -yy813: +yy812: ++p; yych = *p; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { - if (yych <= 0x00) goto yy757; - goto yy800; + if (yych <= 0x00) goto yy756; + goto yy799; } else { - if (yych <= '\n') goto yy813; - if (yych <= 0x1F) goto yy800; - goto yy813; + if (yych <= '\n') goto yy812; + if (yych <= 0x1F) goto yy799; + goto yy812; } } else { if (yych <= '"') { - if (yych <= '!') goto yy800; - goto yy804; + if (yych <= '!') goto yy799; + goto yy803; } else { - if (yych == '\'') goto yy802; - goto yy800; + if (yych == '\'') goto yy801; + goto yy799; } } } else { if (yych <= '@') { if (yych <= ';') { - if (yych <= ':') goto yy809; - goto yy800; + if (yych <= ':') goto yy808; + goto yy799; } else { - if (yych <= '=') goto yy757; - if (yych <= '>') goto yy759; - goto yy800; + if (yych <= '=') goto yy756; + if (yych <= '>') goto yy758; + goto yy799; } } else { if (yych <= '_') { - if (yych <= 'Z') goto yy809; - if (yych <= '^') goto yy800; - goto yy809; + if (yych <= 'Z') goto yy808; + if (yych <= '^') goto yy799; + goto yy808; } else { - if (yych <= '`') goto yy757; - if (yych <= 'z') goto yy809; - goto yy800; + if (yych <= '`') goto yy756; + if (yych <= 'z') goto yy808; + goto yy799; } } } @@ -8583,1778 +8564,1778 @@ int _scan_html_block_tag(const unsigned char *p) { unsigned char yych; yych = *p; - if (yych == '\n') goto yy817; - if (yych == '<') goto yy818; - goto yy819; -yy817: + if (yych == '\n') goto yy816; + if (yych == '<') goto yy817; + goto yy818; +yy816: { return 0; } -yy818: +yy817: yych = *(marker = ++p); switch (yych) { case '!': - case '?': goto yy820; - case '/': goto yy839; + case '?': goto yy819; + case '/': goto yy838; case 'A': - case 'a': goto yy824; + case 'a': goto yy823; case 'B': - case 'b': goto yy827; + case 'b': goto yy826; case 'C': - case 'c': goto yy831; + case 'c': goto yy830; case 'D': - case 'd': goto yy832; + case 'd': goto yy831; case 'E': - case 'e': goto yy835; + case 'e': goto yy834; case 'F': - case 'f': goto yy836; + case 'f': goto yy835; case 'H': - case 'h': goto yy825; + case 'h': goto yy824; case 'I': - case 'i': goto yy826; + case 'i': goto yy825; case 'L': - case 'l': goto yy828; + case 'l': goto yy827; case 'M': - case 'm': goto yy829; + case 'm': goto yy828; case 'O': - case 'o': goto yy830; + case 'o': goto yy829; case 'P': - case 'p': goto yy822; + case 'p': goto yy821; case 'S': - case 's': goto yy833; + case 's': goto yy832; case 'T': - case 't': goto yy834; + case 't': goto yy833; case 'U': - case 'u': goto yy837; + case 'u': goto yy836; case 'V': - case 'v': goto yy838; - default: goto yy817; + case 'v': goto yy837; + default: goto yy816; } -yy819: +yy818: yych = *++p; - goto yy817; -yy820: + goto yy816; +yy819: ++p; { return (p - start); } -yy822: +yy821: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy823; - if (yych <= '\n') goto yy983; + if (yych <= 0x08) goto yy822; + if (yych <= '\n') goto yy982; } else { - if (yych <= ' ') goto yy983; - if (yych >= '/') goto yy983; + if (yych <= ' ') goto yy982; + if (yych >= '/') goto yy982; } } else { if (yych <= 'Q') { - if (yych == '>') goto yy983; + if (yych == '>') goto yy982; } else { - if (yych <= 'R') goto yy1096; - if (yych == 'r') goto yy1096; + if (yych <= 'R') goto yy1095; + if (yych == 'r') goto yy1095; } } -yy823: +yy822: p = marker; - goto yy817; -yy824: + goto yy816; +yy823: yych = *++p; if (yych <= 'S') { - if (yych <= 'Q') goto yy823; - if (yych <= 'R') goto yy1089; - goto yy1088; + if (yych <= 'Q') goto yy822; + if (yych <= 'R') goto yy1088; + goto yy1087; } else { - if (yych <= 'q') goto yy823; - if (yych <= 'r') goto yy1089; - if (yych <= 's') goto yy1088; - goto yy823; + if (yych <= 'q') goto yy822; + if (yych <= 'r') goto yy1088; + if (yych <= 's') goto yy1087; + goto yy822; } -yy825: +yy824: yych = *++p; if (yych <= 'Q') { if (yych <= 'D') { - if (yych <= '0') goto yy823; - if (yych <= '6') goto yy982; - goto yy823; + if (yych <= '0') goto yy822; + if (yych <= '6') goto yy981; + goto yy822; } else { - if (yych <= 'E') goto yy1081; - if (yych == 'G') goto yy1080; - goto yy823; + if (yych <= 'E') goto yy1080; + if (yych == 'G') goto yy1079; + goto yy822; } } else { if (yych <= 'f') { - if (yych <= 'R') goto yy982; - if (yych == 'e') goto yy1081; - goto yy823; + if (yych <= 'R') goto yy981; + if (yych == 'e') goto yy1080; + goto yy822; } else { - if (yych <= 'g') goto yy1080; - if (yych == 'r') goto yy982; - goto yy823; + if (yych <= 'g') goto yy1079; + if (yych == 'r') goto yy981; + goto yy822; } } -yy826: +yy825: yych = *++p; - if (yych == 'F') goto yy1076; - if (yych == 'f') goto yy1076; - goto yy823; -yy827: + if (yych == 'F') goto yy1075; + if (yych == 'f') goto yy1075; + goto yy822; +yy826: yych = *++p; if (yych <= 'U') { if (yych <= 'N') { - if (yych == 'L') goto yy1064; - goto yy823; + if (yych == 'L') goto yy1063; + goto yy822; } else { - if (yych <= 'O') goto yy1063; - if (yych <= 'T') goto yy823; - goto yy1062; + if (yych <= 'O') goto yy1062; + if (yych <= 'T') goto yy822; + goto yy1061; } } else { if (yych <= 'n') { - if (yych == 'l') goto yy1064; - goto yy823; + if (yych == 'l') goto yy1063; + goto yy822; } else { - if (yych <= 'o') goto yy1063; - if (yych == 'u') goto yy1062; - goto yy823; + if (yych <= 'o') goto yy1062; + if (yych == 'u') goto yy1061; + goto yy822; } } +yy827: + yych = *++p; + if (yych == 'I') goto yy981; + if (yych == 'i') goto yy981; + goto yy822; yy828: yych = *++p; - if (yych == 'I') goto yy982; - if (yych == 'i') goto yy982; - goto yy823; + if (yych == 'A') goto yy1060; + if (yych == 'a') goto yy1060; + goto yy822; yy829: - yych = *++p; - if (yych == 'A') goto yy1061; - if (yych == 'a') goto yy1061; - goto yy823; -yy830: yych = *++p; if (yych <= 'U') { if (yych <= 'K') { - if (yych == 'B') goto yy1054; - goto yy823; + if (yych == 'B') goto yy1053; + goto yy822; } else { - if (yych <= 'L') goto yy982; - if (yych <= 'T') goto yy823; - goto yy1053; + if (yych <= 'L') goto yy981; + if (yych <= 'T') goto yy822; + goto yy1052; } } else { if (yych <= 'k') { - if (yych == 'b') goto yy1054; - goto yy823; + if (yych == 'b') goto yy1053; + goto yy822; } else { - if (yych <= 'l') goto yy982; - if (yych == 'u') goto yy1053; - goto yy823; + if (yych <= 'l') goto yy981; + if (yych == 'u') goto yy1052; + goto yy822; } } -yy831: +yy830: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy1040; - if (yych <= 'N') goto yy823; - goto yy1039; + if (yych == 'A') goto yy1039; + if (yych <= 'N') goto yy822; + goto yy1038; } else { if (yych <= 'a') { - if (yych <= '`') goto yy823; - goto yy1040; + if (yych <= '`') goto yy822; + goto yy1039; } else { - if (yych == 'o') goto yy1039; - goto yy823; + if (yych == 'o') goto yy1038; + goto yy822; } } -yy832: +yy831: yych = *++p; if (yych <= 'T') { if (yych <= 'I') { - if (yych == 'D') goto yy982; - if (yych <= 'H') goto yy823; - goto yy1038; + if (yych == 'D') goto yy981; + if (yych <= 'H') goto yy822; + goto yy1037; } else { - if (yych == 'L') goto yy982; - if (yych <= 'S') goto yy823; - goto yy982; + if (yych == 'L') goto yy981; + if (yych <= 'S') goto yy822; + goto yy981; } } else { if (yych <= 'i') { - if (yych == 'd') goto yy982; - if (yych <= 'h') goto yy823; - goto yy1038; + if (yych == 'd') goto yy981; + if (yych <= 'h') goto yy822; + goto yy1037; } else { if (yych <= 'l') { - if (yych <= 'k') goto yy823; - goto yy982; + if (yych <= 'k') goto yy822; + goto yy981; } else { - if (yych == 't') goto yy982; - goto yy823; + if (yych == 't') goto yy981; + goto yy822; } } } -yy833: +yy832: yych = *++p; if (yych <= 'T') { if (yych <= 'D') { - if (yych == 'C') goto yy1027; - goto yy823; + if (yych == 'C') goto yy1026; + goto yy822; } else { - if (yych <= 'E') goto yy1028; - if (yych <= 'S') goto yy823; - goto yy1026; + if (yych <= 'E') goto yy1027; + if (yych <= 'S') goto yy822; + goto yy1025; } } else { if (yych <= 'd') { - if (yych == 'c') goto yy1027; - goto yy823; + if (yych == 'c') goto yy1026; + goto yy822; } else { - if (yych <= 'e') goto yy1028; - if (yych == 't') goto yy1026; - goto yy823; + if (yych <= 'e') goto yy1027; + if (yych == 't') goto yy1025; + goto yy822; } } -yy834: +yy833: yych = *++p; switch (yych) { case 'A': - case 'a': goto yy1012; + case 'a': goto yy1011; case 'B': - case 'b': goto yy1011; + case 'b': goto yy1010; case 'D': case 'R': case 'd': - case 'r': goto yy982; + case 'r': goto yy981; case 'E': - case 'e': goto yy1010; + case 'e': goto yy1009; case 'F': - case 'f': goto yy1009; + case 'f': goto yy1008; case 'H': - case 'h': goto yy1008; - default: goto yy823; + case 'h': goto yy1007; + default: goto yy822; } -yy835: +yy834: yych = *++p; - if (yych == 'M') goto yy1005; - if (yych == 'm') goto yy1005; - goto yy823; -yy836: + if (yych == 'M') goto yy1004; + if (yych == 'm') goto yy1004; + goto yy822; +yy835: yych = *++p; if (yych <= 'O') { - if (yych == 'I') goto yy986; - if (yych <= 'N') goto yy823; - goto yy985; + if (yych == 'I') goto yy985; + if (yych <= 'N') goto yy822; + goto yy984; } else { if (yych <= 'i') { - if (yych <= 'h') goto yy823; - goto yy986; + if (yych <= 'h') goto yy822; + goto yy985; } else { - if (yych == 'o') goto yy985; - goto yy823; + if (yych == 'o') goto yy984; + goto yy822; } } +yy836: + yych = *++p; + if (yych == 'L') goto yy981; + if (yych == 'l') goto yy981; + goto yy822; yy837: yych = *++p; - if (yych == 'L') goto yy982; - if (yych == 'l') goto yy982; - goto yy823; + if (yych == 'I') goto yy978; + if (yych == 'i') goto yy978; + goto yy822; yy838: - yych = *++p; - if (yych == 'I') goto yy979; - if (yych == 'i') goto yy979; - goto yy823; -yy839: yych = *++p; switch (yych) { case 'A': - case 'a': goto yy841; + case 'a': goto yy840; case 'B': - case 'b': goto yy844; + case 'b': goto yy843; case 'C': - case 'c': goto yy848; + case 'c': goto yy847; case 'D': - case 'd': goto yy849; + case 'd': goto yy848; case 'E': - case 'e': goto yy852; + case 'e': goto yy851; case 'F': - case 'f': goto yy853; + case 'f': goto yy852; case 'H': - case 'h': goto yy842; + case 'h': goto yy841; case 'I': - case 'i': goto yy843; + case 'i': goto yy842; case 'L': - case 'l': goto yy845; + case 'l': goto yy844; case 'M': - case 'm': goto yy846; + case 'm': goto yy845; case 'O': - case 'o': goto yy847; + case 'o': goto yy846; case 'P': - case 'p': goto yy840; + case 'p': goto yy839; case 'S': - case 's': goto yy850; + case 's': goto yy849; case 'T': - case 't': goto yy851; + case 't': goto yy850; case 'U': - case 'u': goto yy854; + case 'u': goto yy853; case 'V': - case 'v': goto yy855; - default: goto yy823; + case 'v': goto yy854; + default: goto yy822; } -yy840: +yy839: yych = *++p; if (yych <= '=') { if (yych <= '\n') { - if (yych <= 0x08) goto yy823; - goto yy860; + if (yych <= 0x08) goto yy822; + goto yy859; } else { - if (yych == ' ') goto yy860; - goto yy823; + if (yych == ' ') goto yy859; + goto yy822; } } else { if (yych <= 'R') { - if (yych <= '>') goto yy860; - if (yych <= 'Q') goto yy823; - goto yy973; + if (yych <= '>') goto yy859; + if (yych <= 'Q') goto yy822; + goto yy972; } else { - if (yych == 'r') goto yy973; - goto yy823; + if (yych == 'r') goto yy972; + goto yy822; } } -yy841: +yy840: yych = *++p; if (yych <= 'S') { - if (yych <= 'Q') goto yy823; - if (yych <= 'R') goto yy966; - goto yy965; + if (yych <= 'Q') goto yy822; + if (yych <= 'R') goto yy965; + goto yy964; } else { - if (yych <= 'q') goto yy823; - if (yych <= 'r') goto yy966; - if (yych <= 's') goto yy965; - goto yy823; + if (yych <= 'q') goto yy822; + if (yych <= 'r') goto yy965; + if (yych <= 's') goto yy964; + goto yy822; } -yy842: +yy841: yych = *++p; if (yych <= 'Q') { if (yych <= 'D') { - if (yych <= '0') goto yy823; - if (yych <= '6') goto yy859; - goto yy823; + if (yych <= '0') goto yy822; + if (yych <= '6') goto yy858; + goto yy822; } else { - if (yych <= 'E') goto yy958; - if (yych == 'G') goto yy957; - goto yy823; + if (yych <= 'E') goto yy957; + if (yych == 'G') goto yy956; + goto yy822; } } else { if (yych <= 'f') { - if (yych <= 'R') goto yy859; - if (yych == 'e') goto yy958; - goto yy823; + if (yych <= 'R') goto yy858; + if (yych == 'e') goto yy957; + goto yy822; } else { - if (yych <= 'g') goto yy957; - if (yych == 'r') goto yy859; - goto yy823; + if (yych <= 'g') goto yy956; + if (yych == 'r') goto yy858; + goto yy822; } } -yy843: +yy842: yych = *++p; - if (yych == 'F') goto yy953; - if (yych == 'f') goto yy953; - goto yy823; -yy844: + if (yych == 'F') goto yy952; + if (yych == 'f') goto yy952; + goto yy822; +yy843: yych = *++p; if (yych <= 'U') { if (yych <= 'N') { - if (yych == 'L') goto yy941; - goto yy823; + if (yych == 'L') goto yy940; + goto yy822; } else { - if (yych <= 'O') goto yy940; - if (yych <= 'T') goto yy823; - goto yy939; + if (yych <= 'O') goto yy939; + if (yych <= 'T') goto yy822; + goto yy938; } } else { if (yych <= 'n') { - if (yych == 'l') goto yy941; - goto yy823; + if (yych == 'l') goto yy940; + goto yy822; } else { - if (yych <= 'o') goto yy940; - if (yych == 'u') goto yy939; - goto yy823; + if (yych <= 'o') goto yy939; + if (yych == 'u') goto yy938; + goto yy822; } } +yy844: + yych = *++p; + if (yych == 'I') goto yy858; + if (yych == 'i') goto yy858; + goto yy822; yy845: yych = *++p; - if (yych == 'I') goto yy859; - if (yych == 'i') goto yy859; - goto yy823; + if (yych == 'A') goto yy937; + if (yych == 'a') goto yy937; + goto yy822; yy846: - yych = *++p; - if (yych == 'A') goto yy938; - if (yych == 'a') goto yy938; - goto yy823; -yy847: yych = *++p; if (yych <= 'U') { if (yych <= 'K') { - if (yych == 'B') goto yy931; - goto yy823; + if (yych == 'B') goto yy930; + goto yy822; } else { - if (yych <= 'L') goto yy859; - if (yych <= 'T') goto yy823; - goto yy930; + if (yych <= 'L') goto yy858; + if (yych <= 'T') goto yy822; + goto yy929; } } else { if (yych <= 'k') { - if (yych == 'b') goto yy931; - goto yy823; + if (yych == 'b') goto yy930; + goto yy822; } else { - if (yych <= 'l') goto yy859; - if (yych == 'u') goto yy930; - goto yy823; + if (yych <= 'l') goto yy858; + if (yych == 'u') goto yy929; + goto yy822; } } -yy848: +yy847: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy917; - if (yych <= 'N') goto yy823; - goto yy916; + if (yych == 'A') goto yy916; + if (yych <= 'N') goto yy822; + goto yy915; } else { if (yych <= 'a') { - if (yych <= '`') goto yy823; - goto yy917; + if (yych <= '`') goto yy822; + goto yy916; } else { - if (yych == 'o') goto yy916; - goto yy823; + if (yych == 'o') goto yy915; + goto yy822; } } -yy849: +yy848: yych = *++p; if (yych <= 'T') { if (yych <= 'I') { - if (yych == 'D') goto yy859; - if (yych <= 'H') goto yy823; - goto yy915; + if (yych == 'D') goto yy858; + if (yych <= 'H') goto yy822; + goto yy914; } else { - if (yych == 'L') goto yy859; - if (yych <= 'S') goto yy823; - goto yy859; + if (yych == 'L') goto yy858; + if (yych <= 'S') goto yy822; + goto yy858; } } else { if (yych <= 'i') { - if (yych == 'd') goto yy859; - if (yych <= 'h') goto yy823; - goto yy915; + if (yych == 'd') goto yy858; + if (yych <= 'h') goto yy822; + goto yy914; } else { if (yych <= 'l') { - if (yych <= 'k') goto yy823; - goto yy859; + if (yych <= 'k') goto yy822; + goto yy858; } else { - if (yych == 't') goto yy859; - goto yy823; + if (yych == 't') goto yy858; + goto yy822; } } } -yy850: +yy849: yych = *++p; if (yych <= 'T') { if (yych <= 'D') { - if (yych == 'C') goto yy904; - goto yy823; + if (yych == 'C') goto yy903; + goto yy822; } else { - if (yych <= 'E') goto yy905; - if (yych <= 'S') goto yy823; - goto yy903; + if (yych <= 'E') goto yy904; + if (yych <= 'S') goto yy822; + goto yy902; } } else { if (yych <= 'd') { - if (yych == 'c') goto yy904; - goto yy823; + if (yych == 'c') goto yy903; + goto yy822; } else { - if (yych <= 'e') goto yy905; - if (yych == 't') goto yy903; - goto yy823; + if (yych <= 'e') goto yy904; + if (yych == 't') goto yy902; + goto yy822; } } -yy851: +yy850: yych = *++p; switch (yych) { case 'A': - case 'a': goto yy889; + case 'a': goto yy888; case 'B': - case 'b': goto yy888; + case 'b': goto yy887; case 'D': case 'R': case 'd': - case 'r': goto yy859; + case 'r': goto yy858; case 'E': - case 'e': goto yy887; + case 'e': goto yy886; case 'F': - case 'f': goto yy886; + case 'f': goto yy885; case 'H': - case 'h': goto yy885; - default: goto yy823; + case 'h': goto yy884; + default: goto yy822; } -yy852: +yy851: yych = *++p; - if (yych == 'M') goto yy882; - if (yych == 'm') goto yy882; - goto yy823; -yy853: + if (yych == 'M') goto yy881; + if (yych == 'm') goto yy881; + goto yy822; +yy852: yych = *++p; if (yych <= 'O') { - if (yych == 'I') goto yy863; - if (yych <= 'N') goto yy823; - goto yy862; + if (yych == 'I') goto yy862; + if (yych <= 'N') goto yy822; + goto yy861; } else { if (yych <= 'i') { - if (yych <= 'h') goto yy823; - goto yy863; + if (yych <= 'h') goto yy822; + goto yy862; } else { - if (yych == 'o') goto yy862; - goto yy823; + if (yych == 'o') goto yy861; + goto yy822; } } +yy853: + yych = *++p; + if (yych == 'L') goto yy858; + if (yych == 'l') goto yy858; + goto yy822; yy854: yych = *++p; - if (yych == 'L') goto yy859; - if (yych == 'l') goto yy859; - goto yy823; + if (yych == 'I') goto yy855; + if (yych != 'i') goto yy822; yy855: yych = *++p; - if (yych == 'I') goto yy856; - if (yych != 'i') goto yy823; + if (yych == 'D') goto yy856; + if (yych != 'd') goto yy822; yy856: yych = *++p; - if (yych == 'D') goto yy857; - if (yych != 'd') goto yy823; + if (yych == 'E') goto yy857; + if (yych != 'e') goto yy822; yy857: yych = *++p; - if (yych == 'E') goto yy858; - if (yych != 'e') goto yy823; + if (yych == 'O') goto yy858; + if (yych != 'o') goto yy822; yy858: - yych = *++p; - if (yych == 'O') goto yy859; - if (yych != 'o') goto yy823; -yy859: yych = *++p; if (yych <= 0x1F) { - if (yych <= 0x08) goto yy823; - if (yych >= '\v') goto yy823; + if (yych <= 0x08) goto yy822; + if (yych >= '\v') goto yy822; } else { - if (yych <= ' ') goto yy860; - if (yych != '>') goto yy823; + if (yych <= ' ') goto yy859; + if (yych != '>') goto yy822; } -yy860: +yy859: ++p; { return (p - start); } -yy862: +yy861: yych = *++p; if (yych <= 'R') { - if (yych == 'O') goto yy878; - if (yych <= 'Q') goto yy823; - goto yy879; + if (yych == 'O') goto yy877; + if (yych <= 'Q') goto yy822; + goto yy878; } else { if (yych <= 'o') { - if (yych <= 'n') goto yy823; - goto yy878; + if (yych <= 'n') goto yy822; + goto yy877; } else { - if (yych == 'r') goto yy879; - goto yy823; + if (yych == 'r') goto yy878; + goto yy822; } } -yy863: +yy862: yych = *++p; if (yych <= 'G') { - if (yych == 'E') goto yy864; - if (yych <= 'F') goto yy823; - goto yy865; + if (yych == 'E') goto yy863; + if (yych <= 'F') goto yy822; + goto yy864; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy823; + if (yych <= 'd') goto yy822; } else { - if (yych == 'g') goto yy865; - goto yy823; + if (yych == 'g') goto yy864; + goto yy822; } } -yy864: +yy863: yych = *++p; - if (yych == 'L') goto yy874; - if (yych == 'l') goto yy874; - goto yy823; -yy865: + if (yych == 'L') goto yy873; + if (yych == 'l') goto yy873; + goto yy822; +yy864: yych = *++p; if (yych <= 'U') { - if (yych == 'C') goto yy867; - if (yych <= 'T') goto yy823; + if (yych == 'C') goto yy866; + if (yych <= 'T') goto yy822; } else { if (yych <= 'c') { - if (yych <= 'b') goto yy823; - goto yy867; + if (yych <= 'b') goto yy822; + goto yy866; } else { - if (yych != 'u') goto yy823; + if (yych != 'u') goto yy822; } } yych = *++p; - if (yych == 'R') goto yy873; - if (yych == 'r') goto yy873; - goto yy823; + if (yych == 'R') goto yy872; + if (yych == 'r') goto yy872; + goto yy822; +yy866: + yych = *++p; + if (yych == 'A') goto yy867; + if (yych != 'a') goto yy822; yy867: yych = *++p; - if (yych == 'A') goto yy868; - if (yych != 'a') goto yy823; + if (yych == 'P') goto yy868; + if (yych != 'p') goto yy822; yy868: yych = *++p; - if (yych == 'P') goto yy869; - if (yych != 'p') goto yy823; + if (yych == 'T') goto yy869; + if (yych != 't') goto yy822; yy869: yych = *++p; - if (yych == 'T') goto yy870; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy870; + if (yych != 'i') goto yy822; yy870: yych = *++p; - if (yych == 'I') goto yy871; - if (yych != 'i') goto yy823; + if (yych == 'O') goto yy871; + if (yych != 'o') goto yy822; yy871: yych = *++p; - if (yych == 'O') goto yy872; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy858; + if (yych == 'n') goto yy858; + goto yy822; yy872: yych = *++p; - if (yych == 'N') goto yy859; - if (yych == 'n') goto yy859; - goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy873: yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; + if (yych == 'D') goto yy874; + if (yych != 'd') goto yy822; yy874: yych = *++p; - if (yych == 'D') goto yy875; - if (yych != 'd') goto yy823; + if (yych == 'S') goto yy875; + if (yych != 's') goto yy822; yy875: yych = *++p; - if (yych == 'S') goto yy876; - if (yych != 's') goto yy823; + if (yych == 'E') goto yy876; + if (yych != 'e') goto yy822; yy876: yych = *++p; - if (yych == 'E') goto yy877; - if (yych != 'e') goto yy823; + if (yych == 'T') goto yy858; + if (yych == 't') goto yy858; + goto yy822; yy877: yych = *++p; - if (yych == 'T') goto yy859; - if (yych == 't') goto yy859; - goto yy823; + if (yych == 'T') goto yy879; + if (yych == 't') goto yy879; + goto yy822; yy878: yych = *++p; - if (yych == 'T') goto yy880; - if (yych == 't') goto yy880; - goto yy823; + if (yych == 'M') goto yy858; + if (yych == 'm') goto yy858; + goto yy822; yy879: yych = *++p; - if (yych == 'M') goto yy859; - if (yych == 'm') goto yy859; - goto yy823; + if (yych == 'E') goto yy880; + if (yych != 'e') goto yy822; yy880: yych = *++p; - if (yych == 'E') goto yy881; - if (yych != 'e') goto yy823; + if (yych == 'R') goto yy858; + if (yych == 'r') goto yy858; + goto yy822; yy881: yych = *++p; - if (yych == 'R') goto yy859; - if (yych == 'r') goto yy859; - goto yy823; + if (yych == 'B') goto yy882; + if (yych != 'b') goto yy822; yy882: yych = *++p; - if (yych == 'B') goto yy883; - if (yych != 'b') goto yy823; + if (yych == 'E') goto yy883; + if (yych != 'e') goto yy822; yy883: yych = *++p; - if (yych == 'E') goto yy884; - if (yych != 'e') goto yy823; + if (yych == 'D') goto yy858; + if (yych == 'd') goto yy858; + goto yy822; yy884: - yych = *++p; - if (yych == 'D') goto yy859; - if (yych == 'd') goto yy859; - goto yy823; -yy885: yych = *++p; if (yych <= '=') { if (yych <= '\n') { - if (yych <= 0x08) goto yy823; - goto yy860; + if (yych <= 0x08) goto yy822; + goto yy859; } else { - if (yych == ' ') goto yy860; - goto yy823; + if (yych == ' ') goto yy859; + goto yy822; } } else { if (yych <= 'E') { - if (yych <= '>') goto yy860; - if (yych <= 'D') goto yy823; - goto yy901; + if (yych <= '>') goto yy859; + if (yych <= 'D') goto yy822; + goto yy900; } else { - if (yych == 'e') goto yy901; - goto yy823; + if (yych == 'e') goto yy900; + goto yy822; } } +yy885: + yych = *++p; + if (yych == 'O') goto yy898; + if (yych == 'o') goto yy898; + goto yy822; yy886: yych = *++p; - if (yych == 'O') goto yy899; - if (yych == 'o') goto yy899; - goto yy823; + if (yych == 'X') goto yy893; + if (yych == 'x') goto yy893; + goto yy822; yy887: yych = *++p; - if (yych == 'X') goto yy894; - if (yych == 'x') goto yy894; - goto yy823; + if (yych == 'O') goto yy891; + if (yych == 'o') goto yy891; + goto yy822; yy888: yych = *++p; - if (yych == 'O') goto yy892; - if (yych == 'o') goto yy892; - goto yy823; + if (yych == 'B') goto yy889; + if (yych != 'b') goto yy822; yy889: yych = *++p; - if (yych == 'B') goto yy890; - if (yych != 'b') goto yy823; + if (yych == 'L') goto yy890; + if (yych != 'l') goto yy822; yy890: yych = *++p; - if (yych == 'L') goto yy891; - if (yych != 'l') goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy891: yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; + if (yych == 'D') goto yy892; + if (yych != 'd') goto yy822; yy892: yych = *++p; - if (yych == 'D') goto yy893; - if (yych != 'd') goto yy823; + if (yych == 'Y') goto yy858; + if (yych == 'y') goto yy858; + goto yy822; yy893: yych = *++p; - if (yych == 'Y') goto yy859; - if (yych == 'y') goto yy859; - goto yy823; + if (yych == 'T') goto yy894; + if (yych != 't') goto yy822; yy894: yych = *++p; - if (yych == 'T') goto yy895; - if (yych != 't') goto yy823; + if (yych == 'A') goto yy895; + if (yych != 'a') goto yy822; yy895: yych = *++p; - if (yych == 'A') goto yy896; - if (yych != 'a') goto yy823; + if (yych == 'R') goto yy896; + if (yych != 'r') goto yy822; yy896: yych = *++p; - if (yych == 'R') goto yy897; - if (yych != 'r') goto yy823; + if (yych == 'E') goto yy897; + if (yych != 'e') goto yy822; yy897: yych = *++p; - if (yych == 'E') goto yy898; - if (yych != 'e') goto yy823; + if (yych == 'A') goto yy858; + if (yych == 'a') goto yy858; + goto yy822; yy898: yych = *++p; - if (yych == 'A') goto yy859; - if (yych == 'a') goto yy859; - goto yy823; + if (yych == 'O') goto yy899; + if (yych != 'o') goto yy822; yy899: yych = *++p; - if (yych == 'O') goto yy900; - if (yych != 'o') goto yy823; + if (yych == 'T') goto yy858; + if (yych == 't') goto yy858; + goto yy822; yy900: yych = *++p; - if (yych == 'T') goto yy859; - if (yych == 't') goto yy859; - goto yy823; + if (yych == 'A') goto yy901; + if (yych != 'a') goto yy822; yy901: yych = *++p; - if (yych == 'A') goto yy902; - if (yych != 'a') goto yy823; + if (yych == 'D') goto yy858; + if (yych == 'd') goto yy858; + goto yy822; yy902: yych = *++p; - if (yych == 'D') goto yy859; - if (yych == 'd') goto yy859; - goto yy823; + if (yych == 'Y') goto yy912; + if (yych == 'y') goto yy912; + goto yy822; yy903: yych = *++p; - if (yych == 'Y') goto yy913; - if (yych == 'y') goto yy913; - goto yy823; + if (yych == 'R') goto yy909; + if (yych == 'r') goto yy909; + goto yy822; yy904: yych = *++p; - if (yych == 'R') goto yy910; - if (yych == 'r') goto yy910; - goto yy823; + if (yych == 'C') goto yy905; + if (yych != 'c') goto yy822; yy905: yych = *++p; - if (yych == 'C') goto yy906; - if (yych != 'c') goto yy823; + if (yych == 'T') goto yy906; + if (yych != 't') goto yy822; yy906: yych = *++p; - if (yych == 'T') goto yy907; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy907; + if (yych != 'i') goto yy822; yy907: yych = *++p; - if (yych == 'I') goto yy908; - if (yych != 'i') goto yy823; + if (yych == 'O') goto yy908; + if (yych != 'o') goto yy822; yy908: yych = *++p; - if (yych == 'O') goto yy909; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy858; + if (yych == 'n') goto yy858; + goto yy822; yy909: yych = *++p; - if (yych == 'N') goto yy859; - if (yych == 'n') goto yy859; - goto yy823; + if (yych == 'I') goto yy910; + if (yych != 'i') goto yy822; yy910: yych = *++p; - if (yych == 'I') goto yy911; - if (yych != 'i') goto yy823; + if (yych == 'P') goto yy911; + if (yych != 'p') goto yy822; yy911: yych = *++p; - if (yych == 'P') goto yy912; - if (yych != 'p') goto yy823; + if (yych == 'T') goto yy858; + if (yych == 't') goto yy858; + goto yy822; yy912: yych = *++p; - if (yych == 'T') goto yy859; - if (yych == 't') goto yy859; - goto yy823; + if (yych == 'L') goto yy913; + if (yych != 'l') goto yy822; yy913: yych = *++p; - if (yych == 'L') goto yy914; - if (yych != 'l') goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy914: yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; + if (yych == 'V') goto yy858; + if (yych == 'v') goto yy858; + goto yy822; yy915: yych = *++p; - if (yych == 'V') goto yy859; - if (yych == 'v') goto yy859; - goto yy823; + if (yych == 'L') goto yy924; + if (yych == 'l') goto yy924; + goto yy822; yy916: - yych = *++p; - if (yych == 'L') goto yy925; - if (yych == 'l') goto yy925; - goto yy823; -yy917: yych = *++p; if (yych <= 'P') { - if (yych == 'N') goto yy918; - if (yych <= 'O') goto yy823; - goto yy919; + if (yych == 'N') goto yy917; + if (yych <= 'O') goto yy822; + goto yy918; } else { if (yych <= 'n') { - if (yych <= 'm') goto yy823; + if (yych <= 'm') goto yy822; } else { - if (yych == 'p') goto yy919; - goto yy823; + if (yych == 'p') goto yy918; + goto yy822; } } +yy917: + yych = *++p; + if (yych == 'V') goto yy922; + if (yych == 'v') goto yy922; + goto yy822; yy918: yych = *++p; - if (yych == 'V') goto yy923; - if (yych == 'v') goto yy923; - goto yy823; + if (yych == 'T') goto yy919; + if (yych != 't') goto yy822; yy919: yych = *++p; - if (yych == 'T') goto yy920; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy920; + if (yych != 'i') goto yy822; yy920: yych = *++p; - if (yych == 'I') goto yy921; - if (yych != 'i') goto yy823; + if (yych == 'O') goto yy921; + if (yych != 'o') goto yy822; yy921: yych = *++p; - if (yych == 'O') goto yy922; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy858; + if (yych == 'n') goto yy858; + goto yy822; yy922: yych = *++p; - if (yych == 'N') goto yy859; - if (yych == 'n') goto yy859; - goto yy823; + if (yych == 'A') goto yy923; + if (yych != 'a') goto yy822; yy923: yych = *++p; - if (yych == 'A') goto yy924; - if (yych != 'a') goto yy823; + if (yych == 'S') goto yy858; + if (yych == 's') goto yy858; + goto yy822; yy924: - yych = *++p; - if (yych == 'S') goto yy859; - if (yych == 's') goto yy859; - goto yy823; -yy925: yych = *++p; if (yych <= '=') { if (yych <= '\n') { - if (yych <= 0x08) goto yy823; - goto yy860; + if (yych <= 0x08) goto yy822; + goto yy859; } else { - if (yych == ' ') goto yy860; - goto yy823; + if (yych == ' ') goto yy859; + goto yy822; } } else { if (yych <= 'G') { - if (yych <= '>') goto yy860; - if (yych <= 'F') goto yy823; + if (yych <= '>') goto yy859; + if (yych <= 'F') goto yy822; } else { - if (yych != 'g') goto yy823; + if (yych != 'g') goto yy822; } } yych = *++p; - if (yych == 'R') goto yy927; - if (yych != 'r') goto yy823; + if (yych == 'R') goto yy926; + if (yych != 'r') goto yy822; +yy926: + yych = *++p; + if (yych == 'O') goto yy927; + if (yych != 'o') goto yy822; yy927: yych = *++p; - if (yych == 'O') goto yy928; - if (yych != 'o') goto yy823; + if (yych == 'U') goto yy928; + if (yych != 'u') goto yy822; yy928: yych = *++p; - if (yych == 'U') goto yy929; - if (yych != 'u') goto yy823; + if (yych == 'P') goto yy858; + if (yych == 'p') goto yy858; + goto yy822; yy929: yych = *++p; - if (yych == 'P') goto yy859; - if (yych == 'p') goto yy859; - goto yy823; + if (yych == 'T') goto yy934; + if (yych == 't') goto yy934; + goto yy822; yy930: yych = *++p; - if (yych == 'T') goto yy935; - if (yych == 't') goto yy935; - goto yy823; + if (yych == 'J') goto yy931; + if (yych != 'j') goto yy822; yy931: yych = *++p; - if (yych == 'J') goto yy932; - if (yych != 'j') goto yy823; + if (yych == 'E') goto yy932; + if (yych != 'e') goto yy822; yy932: yych = *++p; - if (yych == 'E') goto yy933; - if (yych != 'e') goto yy823; + if (yych == 'C') goto yy933; + if (yych != 'c') goto yy822; yy933: yych = *++p; - if (yych == 'C') goto yy934; - if (yych != 'c') goto yy823; + if (yych == 'T') goto yy858; + if (yych == 't') goto yy858; + goto yy822; yy934: yych = *++p; - if (yych == 'T') goto yy859; - if (yych == 't') goto yy859; - goto yy823; + if (yych == 'P') goto yy935; + if (yych != 'p') goto yy822; yy935: yych = *++p; - if (yych == 'P') goto yy936; - if (yych != 'p') goto yy823; + if (yych == 'U') goto yy936; + if (yych != 'u') goto yy822; yy936: yych = *++p; - if (yych == 'U') goto yy937; - if (yych != 'u') goto yy823; + if (yych == 'T') goto yy858; + if (yych == 't') goto yy858; + goto yy822; yy937: yych = *++p; - if (yych == 'T') goto yy859; - if (yych == 't') goto yy859; - goto yy823; + if (yych == 'P') goto yy858; + if (yych == 'p') goto yy858; + goto yy822; yy938: yych = *++p; - if (yych == 'P') goto yy859; - if (yych == 'p') goto yy859; - goto yy823; + if (yych == 'T') goto yy949; + if (yych == 't') goto yy949; + goto yy822; yy939: yych = *++p; - if (yych == 'T') goto yy950; - if (yych == 't') goto yy950; - goto yy823; + if (yych == 'D') goto yy948; + if (yych == 'd') goto yy948; + goto yy822; yy940: yych = *++p; - if (yych == 'D') goto yy949; - if (yych == 'd') goto yy949; - goto yy823; + if (yych == 'O') goto yy941; + if (yych != 'o') goto yy822; yy941: yych = *++p; - if (yych == 'O') goto yy942; - if (yych != 'o') goto yy823; + if (yych == 'C') goto yy942; + if (yych != 'c') goto yy822; yy942: yych = *++p; - if (yych == 'C') goto yy943; - if (yych != 'c') goto yy823; + if (yych == 'K') goto yy943; + if (yych != 'k') goto yy822; yy943: yych = *++p; - if (yych == 'K') goto yy944; - if (yych != 'k') goto yy823; + if (yych == 'Q') goto yy944; + if (yych != 'q') goto yy822; yy944: yych = *++p; - if (yych == 'Q') goto yy945; - if (yych != 'q') goto yy823; + if (yych == 'U') goto yy945; + if (yych != 'u') goto yy822; yy945: yych = *++p; - if (yych == 'U') goto yy946; - if (yych != 'u') goto yy823; + if (yych == 'O') goto yy946; + if (yych != 'o') goto yy822; yy946: yych = *++p; - if (yych == 'O') goto yy947; - if (yych != 'o') goto yy823; + if (yych == 'T') goto yy947; + if (yych != 't') goto yy822; yy947: yych = *++p; - if (yych == 'T') goto yy948; - if (yych != 't') goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy948: yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; + if (yych == 'Y') goto yy858; + if (yych == 'y') goto yy858; + goto yy822; yy949: yych = *++p; - if (yych == 'Y') goto yy859; - if (yych == 'y') goto yy859; - goto yy823; + if (yych == 'T') goto yy950; + if (yych != 't') goto yy822; yy950: yych = *++p; - if (yych == 'T') goto yy951; - if (yych != 't') goto yy823; + if (yych == 'O') goto yy951; + if (yych != 'o') goto yy822; yy951: yych = *++p; - if (yych == 'O') goto yy952; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy858; + if (yych == 'n') goto yy858; + goto yy822; yy952: yych = *++p; - if (yych == 'N') goto yy859; - if (yych == 'n') goto yy859; - goto yy823; + if (yych == 'R') goto yy953; + if (yych != 'r') goto yy822; yy953: yych = *++p; - if (yych == 'R') goto yy954; - if (yych != 'r') goto yy823; + if (yych == 'A') goto yy954; + if (yych != 'a') goto yy822; yy954: yych = *++p; - if (yych == 'A') goto yy955; - if (yych != 'a') goto yy823; + if (yych == 'M') goto yy955; + if (yych != 'm') goto yy822; yy955: yych = *++p; - if (yych == 'M') goto yy956; - if (yych != 'm') goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy956: yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; + if (yych == 'R') goto yy961; + if (yych == 'r') goto yy961; + goto yy822; yy957: yych = *++p; - if (yych == 'R') goto yy962; - if (yych == 'r') goto yy962; - goto yy823; + if (yych == 'A') goto yy958; + if (yych != 'a') goto yy822; yy958: yych = *++p; - if (yych == 'A') goto yy959; - if (yych != 'a') goto yy823; + if (yych == 'D') goto yy959; + if (yych != 'd') goto yy822; yy959: yych = *++p; - if (yych == 'D') goto yy960; - if (yych != 'd') goto yy823; + if (yych == 'E') goto yy960; + if (yych != 'e') goto yy822; yy960: yych = *++p; - if (yych == 'E') goto yy961; - if (yych != 'e') goto yy823; + if (yych == 'R') goto yy858; + if (yych == 'r') goto yy858; + goto yy822; yy961: yych = *++p; - if (yych == 'R') goto yy859; - if (yych == 'r') goto yy859; - goto yy823; + if (yych == 'O') goto yy962; + if (yych != 'o') goto yy822; yy962: yych = *++p; - if (yych == 'O') goto yy963; - if (yych != 'o') goto yy823; + if (yych == 'U') goto yy963; + if (yych != 'u') goto yy822; yy963: yych = *++p; - if (yych == 'U') goto yy964; - if (yych != 'u') goto yy823; + if (yych == 'P') goto yy858; + if (yych == 'p') goto yy858; + goto yy822; yy964: yych = *++p; - if (yych == 'P') goto yy859; - if (yych == 'p') goto yy859; - goto yy823; + if (yych == 'I') goto yy970; + if (yych == 'i') goto yy970; + goto yy822; yy965: yych = *++p; - if (yych == 'I') goto yy971; - if (yych == 'i') goto yy971; - goto yy823; + if (yych == 'T') goto yy966; + if (yych != 't') goto yy822; yy966: yych = *++p; - if (yych == 'T') goto yy967; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy967; + if (yych != 'i') goto yy822; yy967: yych = *++p; - if (yych == 'I') goto yy968; - if (yych != 'i') goto yy823; + if (yych == 'C') goto yy968; + if (yych != 'c') goto yy822; yy968: yych = *++p; - if (yych == 'C') goto yy969; - if (yych != 'c') goto yy823; + if (yych == 'L') goto yy969; + if (yych != 'l') goto yy822; yy969: yych = *++p; - if (yych == 'L') goto yy970; - if (yych != 'l') goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy970: yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; + if (yych == 'D') goto yy971; + if (yych != 'd') goto yy822; yy971: yych = *++p; - if (yych == 'D') goto yy972; - if (yych != 'd') goto yy823; + if (yych == 'E') goto yy858; + if (yych == 'e') goto yy858; + goto yy822; yy972: - yych = *++p; - if (yych == 'E') goto yy859; - if (yych == 'e') goto yy859; - goto yy823; -yy973: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy859; - if (yych <= 'N') goto yy823; + if (yych == 'E') goto yy858; + if (yych <= 'N') goto yy822; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy823; - goto yy859; + if (yych <= 'd') goto yy822; + goto yy858; } else { - if (yych != 'o') goto yy823; + if (yych != 'o') goto yy822; } } yych = *++p; - if (yych == 'G') goto yy975; - if (yych != 'g') goto yy823; + if (yych == 'G') goto yy974; + if (yych != 'g') goto yy822; +yy974: + yych = *++p; + if (yych == 'R') goto yy975; + if (yych != 'r') goto yy822; yy975: yych = *++p; - if (yych == 'R') goto yy976; - if (yych != 'r') goto yy823; + if (yych == 'E') goto yy976; + if (yych != 'e') goto yy822; yy976: yych = *++p; - if (yych == 'E') goto yy977; - if (yych != 'e') goto yy823; + if (yych == 'S') goto yy977; + if (yych != 's') goto yy822; yy977: yych = *++p; - if (yych == 'S') goto yy978; - if (yych != 's') goto yy823; + if (yych == 'S') goto yy858; + if (yych == 's') goto yy858; + goto yy822; yy978: yych = *++p; - if (yych == 'S') goto yy859; - if (yych == 's') goto yy859; - goto yy823; + if (yych == 'D') goto yy979; + if (yych != 'd') goto yy822; yy979: yych = *++p; - if (yych == 'D') goto yy980; - if (yych != 'd') goto yy823; + if (yych == 'E') goto yy980; + if (yych != 'e') goto yy822; yy980: yych = *++p; - if (yych == 'E') goto yy981; - if (yych != 'e') goto yy823; + if (yych == 'O') goto yy981; + if (yych != 'o') goto yy822; yy981: - yych = *++p; - if (yych == 'O') goto yy982; - if (yych != 'o') goto yy823; -yy982: yych = *++p; if (yych <= ' ') { - if (yych <= 0x08) goto yy823; - if (yych <= '\n') goto yy983; - if (yych <= 0x1F) goto yy823; + if (yych <= 0x08) goto yy822; + if (yych <= '\n') goto yy982; + if (yych <= 0x1F) goto yy822; } else { if (yych <= '/') { - if (yych <= '.') goto yy823; + if (yych <= '.') goto yy822; } else { - if (yych != '>') goto yy823; + if (yych != '>') goto yy822; } } -yy983: +yy982: ++p; { return (p - start); } -yy985: +yy984: yych = *++p; if (yych <= 'R') { - if (yych == 'O') goto yy1001; - if (yych <= 'Q') goto yy823; - goto yy1002; + if (yych == 'O') goto yy1000; + if (yych <= 'Q') goto yy822; + goto yy1001; } else { if (yych <= 'o') { - if (yych <= 'n') goto yy823; - goto yy1001; + if (yych <= 'n') goto yy822; + goto yy1000; } else { - if (yych == 'r') goto yy1002; - goto yy823; + if (yych == 'r') goto yy1001; + goto yy822; } } -yy986: +yy985: yych = *++p; if (yych <= 'G') { - if (yych == 'E') goto yy987; - if (yych <= 'F') goto yy823; - goto yy988; + if (yych == 'E') goto yy986; + if (yych <= 'F') goto yy822; + goto yy987; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy823; + if (yych <= 'd') goto yy822; } else { - if (yych == 'g') goto yy988; - goto yy823; + if (yych == 'g') goto yy987; + goto yy822; } } -yy987: +yy986: yych = *++p; - if (yych == 'L') goto yy997; - if (yych == 'l') goto yy997; - goto yy823; -yy988: + if (yych == 'L') goto yy996; + if (yych == 'l') goto yy996; + goto yy822; +yy987: yych = *++p; if (yych <= 'U') { - if (yych == 'C') goto yy990; - if (yych <= 'T') goto yy823; + if (yych == 'C') goto yy989; + if (yych <= 'T') goto yy822; } else { if (yych <= 'c') { - if (yych <= 'b') goto yy823; - goto yy990; + if (yych <= 'b') goto yy822; + goto yy989; } else { - if (yych != 'u') goto yy823; + if (yych != 'u') goto yy822; } } yych = *++p; - if (yych == 'R') goto yy996; - if (yych == 'r') goto yy996; - goto yy823; + if (yych == 'R') goto yy995; + if (yych == 'r') goto yy995; + goto yy822; +yy989: + yych = *++p; + if (yych == 'A') goto yy990; + if (yych != 'a') goto yy822; yy990: yych = *++p; - if (yych == 'A') goto yy991; - if (yych != 'a') goto yy823; + if (yych == 'P') goto yy991; + if (yych != 'p') goto yy822; yy991: yych = *++p; - if (yych == 'P') goto yy992; - if (yych != 'p') goto yy823; + if (yych == 'T') goto yy992; + if (yych != 't') goto yy822; yy992: yych = *++p; - if (yych == 'T') goto yy993; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy993; + if (yych != 'i') goto yy822; yy993: yych = *++p; - if (yych == 'I') goto yy994; - if (yych != 'i') goto yy823; + if (yych == 'O') goto yy994; + if (yych != 'o') goto yy822; yy994: yych = *++p; - if (yych == 'O') goto yy995; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy981; + if (yych == 'n') goto yy981; + goto yy822; yy995: yych = *++p; - if (yych == 'N') goto yy982; - if (yych == 'n') goto yy982; - goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy996: yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; + if (yych == 'D') goto yy997; + if (yych != 'd') goto yy822; yy997: yych = *++p; - if (yych == 'D') goto yy998; - if (yych != 'd') goto yy823; + if (yych == 'S') goto yy998; + if (yych != 's') goto yy822; yy998: yych = *++p; - if (yych == 'S') goto yy999; - if (yych != 's') goto yy823; + if (yych == 'E') goto yy999; + if (yych != 'e') goto yy822; yy999: yych = *++p; - if (yych == 'E') goto yy1000; - if (yych != 'e') goto yy823; + if (yych == 'T') goto yy981; + if (yych == 't') goto yy981; + goto yy822; yy1000: yych = *++p; - if (yych == 'T') goto yy982; - if (yych == 't') goto yy982; - goto yy823; + if (yych == 'T') goto yy1002; + if (yych == 't') goto yy1002; + goto yy822; yy1001: yych = *++p; - if (yych == 'T') goto yy1003; - if (yych == 't') goto yy1003; - goto yy823; + if (yych == 'M') goto yy981; + if (yych == 'm') goto yy981; + goto yy822; yy1002: yych = *++p; - if (yych == 'M') goto yy982; - if (yych == 'm') goto yy982; - goto yy823; + if (yych == 'E') goto yy1003; + if (yych != 'e') goto yy822; yy1003: yych = *++p; - if (yych == 'E') goto yy1004; - if (yych != 'e') goto yy823; + if (yych == 'R') goto yy981; + if (yych == 'r') goto yy981; + goto yy822; yy1004: yych = *++p; - if (yych == 'R') goto yy982; - if (yych == 'r') goto yy982; - goto yy823; + if (yych == 'B') goto yy1005; + if (yych != 'b') goto yy822; yy1005: yych = *++p; - if (yych == 'B') goto yy1006; - if (yych != 'b') goto yy823; + if (yych == 'E') goto yy1006; + if (yych != 'e') goto yy822; yy1006: yych = *++p; - if (yych == 'E') goto yy1007; - if (yych != 'e') goto yy823; + if (yych == 'D') goto yy981; + if (yych == 'd') goto yy981; + goto yy822; yy1007: - yych = *++p; - if (yych == 'D') goto yy982; - if (yych == 'd') goto yy982; - goto yy823; -yy1008: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy823; - if (yych <= '\n') goto yy983; - goto yy823; + if (yych <= 0x08) goto yy822; + if (yych <= '\n') goto yy982; + goto yy822; } else { - if (yych <= ' ') goto yy983; - if (yych <= '.') goto yy823; - goto yy983; + if (yych <= ' ') goto yy982; + if (yych <= '.') goto yy822; + goto yy982; } } else { if (yych <= 'D') { - if (yych == '>') goto yy983; - goto yy823; + if (yych == '>') goto yy982; + goto yy822; } else { - if (yych <= 'E') goto yy1024; - if (yych == 'e') goto yy1024; - goto yy823; + if (yych <= 'E') goto yy1023; + if (yych == 'e') goto yy1023; + goto yy822; } } +yy1008: + yych = *++p; + if (yych == 'O') goto yy1021; + if (yych == 'o') goto yy1021; + goto yy822; yy1009: yych = *++p; - if (yych == 'O') goto yy1022; - if (yych == 'o') goto yy1022; - goto yy823; + if (yych == 'X') goto yy1016; + if (yych == 'x') goto yy1016; + goto yy822; yy1010: yych = *++p; - if (yych == 'X') goto yy1017; - if (yych == 'x') goto yy1017; - goto yy823; + if (yych == 'O') goto yy1014; + if (yych == 'o') goto yy1014; + goto yy822; yy1011: yych = *++p; - if (yych == 'O') goto yy1015; - if (yych == 'o') goto yy1015; - goto yy823; + if (yych == 'B') goto yy1012; + if (yych != 'b') goto yy822; yy1012: yych = *++p; - if (yych == 'B') goto yy1013; - if (yych != 'b') goto yy823; + if (yych == 'L') goto yy1013; + if (yych != 'l') goto yy822; yy1013: yych = *++p; - if (yych == 'L') goto yy1014; - if (yych != 'l') goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy1014: yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; + if (yych == 'D') goto yy1015; + if (yych != 'd') goto yy822; yy1015: yych = *++p; - if (yych == 'D') goto yy1016; - if (yych != 'd') goto yy823; + if (yych == 'Y') goto yy981; + if (yych == 'y') goto yy981; + goto yy822; yy1016: yych = *++p; - if (yych == 'Y') goto yy982; - if (yych == 'y') goto yy982; - goto yy823; + if (yych == 'T') goto yy1017; + if (yych != 't') goto yy822; yy1017: yych = *++p; - if (yych == 'T') goto yy1018; - if (yych != 't') goto yy823; + if (yych == 'A') goto yy1018; + if (yych != 'a') goto yy822; yy1018: yych = *++p; - if (yych == 'A') goto yy1019; - if (yych != 'a') goto yy823; + if (yych == 'R') goto yy1019; + if (yych != 'r') goto yy822; yy1019: yych = *++p; - if (yych == 'R') goto yy1020; - if (yych != 'r') goto yy823; + if (yych == 'E') goto yy1020; + if (yych != 'e') goto yy822; yy1020: yych = *++p; - if (yych == 'E') goto yy1021; - if (yych != 'e') goto yy823; + if (yych == 'A') goto yy981; + if (yych == 'a') goto yy981; + goto yy822; yy1021: yych = *++p; - if (yych == 'A') goto yy982; - if (yych == 'a') goto yy982; - goto yy823; + if (yych == 'O') goto yy1022; + if (yych != 'o') goto yy822; yy1022: yych = *++p; - if (yych == 'O') goto yy1023; - if (yych != 'o') goto yy823; + if (yych == 'T') goto yy981; + if (yych == 't') goto yy981; + goto yy822; yy1023: yych = *++p; - if (yych == 'T') goto yy982; - if (yych == 't') goto yy982; - goto yy823; + if (yych == 'A') goto yy1024; + if (yych != 'a') goto yy822; yy1024: yych = *++p; - if (yych == 'A') goto yy1025; - if (yych != 'a') goto yy823; + if (yych == 'D') goto yy981; + if (yych == 'd') goto yy981; + goto yy822; yy1025: yych = *++p; - if (yych == 'D') goto yy982; - if (yych == 'd') goto yy982; - goto yy823; + if (yych == 'Y') goto yy1035; + if (yych == 'y') goto yy1035; + goto yy822; yy1026: yych = *++p; - if (yych == 'Y') goto yy1036; - if (yych == 'y') goto yy1036; - goto yy823; + if (yych == 'R') goto yy1032; + if (yych == 'r') goto yy1032; + goto yy822; yy1027: yych = *++p; - if (yych == 'R') goto yy1033; - if (yych == 'r') goto yy1033; - goto yy823; + if (yych == 'C') goto yy1028; + if (yych != 'c') goto yy822; yy1028: yych = *++p; - if (yych == 'C') goto yy1029; - if (yych != 'c') goto yy823; + if (yych == 'T') goto yy1029; + if (yych != 't') goto yy822; yy1029: yych = *++p; - if (yych == 'T') goto yy1030; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy1030; + if (yych != 'i') goto yy822; yy1030: yych = *++p; - if (yych == 'I') goto yy1031; - if (yych != 'i') goto yy823; + if (yych == 'O') goto yy1031; + if (yych != 'o') goto yy822; yy1031: yych = *++p; - if (yych == 'O') goto yy1032; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy981; + if (yych == 'n') goto yy981; + goto yy822; yy1032: yych = *++p; - if (yych == 'N') goto yy982; - if (yych == 'n') goto yy982; - goto yy823; + if (yych == 'I') goto yy1033; + if (yych != 'i') goto yy822; yy1033: yych = *++p; - if (yych == 'I') goto yy1034; - if (yych != 'i') goto yy823; + if (yych == 'P') goto yy1034; + if (yych != 'p') goto yy822; yy1034: yych = *++p; - if (yych == 'P') goto yy1035; - if (yych != 'p') goto yy823; + if (yych == 'T') goto yy981; + if (yych == 't') goto yy981; + goto yy822; yy1035: yych = *++p; - if (yych == 'T') goto yy982; - if (yych == 't') goto yy982; - goto yy823; + if (yych == 'L') goto yy1036; + if (yych != 'l') goto yy822; yy1036: yych = *++p; - if (yych == 'L') goto yy1037; - if (yych != 'l') goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy1037: yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; + if (yych == 'V') goto yy981; + if (yych == 'v') goto yy981; + goto yy822; yy1038: yych = *++p; - if (yych == 'V') goto yy982; - if (yych == 'v') goto yy982; - goto yy823; + if (yych == 'L') goto yy1047; + if (yych == 'l') goto yy1047; + goto yy822; yy1039: - yych = *++p; - if (yych == 'L') goto yy1048; - if (yych == 'l') goto yy1048; - goto yy823; -yy1040: yych = *++p; if (yych <= 'P') { - if (yych == 'N') goto yy1041; - if (yych <= 'O') goto yy823; - goto yy1042; + if (yych == 'N') goto yy1040; + if (yych <= 'O') goto yy822; + goto yy1041; } else { if (yych <= 'n') { - if (yych <= 'm') goto yy823; + if (yych <= 'm') goto yy822; } else { - if (yych == 'p') goto yy1042; - goto yy823; + if (yych == 'p') goto yy1041; + goto yy822; } } +yy1040: + yych = *++p; + if (yych == 'V') goto yy1045; + if (yych == 'v') goto yy1045; + goto yy822; yy1041: yych = *++p; - if (yych == 'V') goto yy1046; - if (yych == 'v') goto yy1046; - goto yy823; + if (yych == 'T') goto yy1042; + if (yych != 't') goto yy822; yy1042: yych = *++p; - if (yych == 'T') goto yy1043; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy1043; + if (yych != 'i') goto yy822; yy1043: yych = *++p; - if (yych == 'I') goto yy1044; - if (yych != 'i') goto yy823; + if (yych == 'O') goto yy1044; + if (yych != 'o') goto yy822; yy1044: yych = *++p; - if (yych == 'O') goto yy1045; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy981; + if (yych == 'n') goto yy981; + goto yy822; yy1045: yych = *++p; - if (yych == 'N') goto yy982; - if (yych == 'n') goto yy982; - goto yy823; + if (yych == 'A') goto yy1046; + if (yych != 'a') goto yy822; yy1046: yych = *++p; - if (yych == 'A') goto yy1047; - if (yych != 'a') goto yy823; + if (yych == 'S') goto yy981; + if (yych == 's') goto yy981; + goto yy822; yy1047: - yych = *++p; - if (yych == 'S') goto yy982; - if (yych == 's') goto yy982; - goto yy823; -yy1048: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy823; - if (yych <= '\n') goto yy983; - goto yy823; + if (yych <= 0x08) goto yy822; + if (yych <= '\n') goto yy982; + goto yy822; } else { - if (yych <= ' ') goto yy983; - if (yych <= '.') goto yy823; - goto yy983; + if (yych <= ' ') goto yy982; + if (yych <= '.') goto yy822; + goto yy982; } } else { if (yych <= 'F') { - if (yych == '>') goto yy983; - goto yy823; + if (yych == '>') goto yy982; + goto yy822; } else { - if (yych <= 'G') goto yy1049; - if (yych != 'g') goto yy823; + if (yych <= 'G') goto yy1048; + if (yych != 'g') goto yy822; } } +yy1048: + yych = *++p; + if (yych == 'R') goto yy1049; + if (yych != 'r') goto yy822; yy1049: yych = *++p; - if (yych == 'R') goto yy1050; - if (yych != 'r') goto yy823; + if (yych == 'O') goto yy1050; + if (yych != 'o') goto yy822; yy1050: yych = *++p; - if (yych == 'O') goto yy1051; - if (yych != 'o') goto yy823; + if (yych == 'U') goto yy1051; + if (yych != 'u') goto yy822; yy1051: yych = *++p; - if (yych == 'U') goto yy1052; - if (yych != 'u') goto yy823; + if (yych == 'P') goto yy981; + if (yych == 'p') goto yy981; + goto yy822; yy1052: yych = *++p; - if (yych == 'P') goto yy982; - if (yych == 'p') goto yy982; - goto yy823; + if (yych == 'T') goto yy1057; + if (yych == 't') goto yy1057; + goto yy822; yy1053: yych = *++p; - if (yych == 'T') goto yy1058; - if (yych == 't') goto yy1058; - goto yy823; + if (yych == 'J') goto yy1054; + if (yych != 'j') goto yy822; yy1054: yych = *++p; - if (yych == 'J') goto yy1055; - if (yych != 'j') goto yy823; + if (yych == 'E') goto yy1055; + if (yych != 'e') goto yy822; yy1055: yych = *++p; - if (yych == 'E') goto yy1056; - if (yych != 'e') goto yy823; + if (yych == 'C') goto yy1056; + if (yych != 'c') goto yy822; yy1056: yych = *++p; - if (yych == 'C') goto yy1057; - if (yych != 'c') goto yy823; + if (yych == 'T') goto yy981; + if (yych == 't') goto yy981; + goto yy822; yy1057: yych = *++p; - if (yych == 'T') goto yy982; - if (yych == 't') goto yy982; - goto yy823; + if (yych == 'P') goto yy1058; + if (yych != 'p') goto yy822; yy1058: yych = *++p; - if (yych == 'P') goto yy1059; - if (yych != 'p') goto yy823; + if (yych == 'U') goto yy1059; + if (yych != 'u') goto yy822; yy1059: yych = *++p; - if (yych == 'U') goto yy1060; - if (yych != 'u') goto yy823; + if (yych == 'T') goto yy981; + if (yych == 't') goto yy981; + goto yy822; yy1060: yych = *++p; - if (yych == 'T') goto yy982; - if (yych == 't') goto yy982; - goto yy823; + if (yych == 'P') goto yy981; + if (yych == 'p') goto yy981; + goto yy822; yy1061: yych = *++p; - if (yych == 'P') goto yy982; - if (yych == 'p') goto yy982; - goto yy823; + if (yych == 'T') goto yy1072; + if (yych == 't') goto yy1072; + goto yy822; yy1062: yych = *++p; - if (yych == 'T') goto yy1073; - if (yych == 't') goto yy1073; - goto yy823; + if (yych == 'D') goto yy1071; + if (yych == 'd') goto yy1071; + goto yy822; yy1063: yych = *++p; - if (yych == 'D') goto yy1072; - if (yych == 'd') goto yy1072; - goto yy823; + if (yych == 'O') goto yy1064; + if (yych != 'o') goto yy822; yy1064: yych = *++p; - if (yych == 'O') goto yy1065; - if (yych != 'o') goto yy823; + if (yych == 'C') goto yy1065; + if (yych != 'c') goto yy822; yy1065: yych = *++p; - if (yych == 'C') goto yy1066; - if (yych != 'c') goto yy823; + if (yych == 'K') goto yy1066; + if (yych != 'k') goto yy822; yy1066: yych = *++p; - if (yych == 'K') goto yy1067; - if (yych != 'k') goto yy823; + if (yych == 'Q') goto yy1067; + if (yych != 'q') goto yy822; yy1067: yych = *++p; - if (yych == 'Q') goto yy1068; - if (yych != 'q') goto yy823; + if (yych == 'U') goto yy1068; + if (yych != 'u') goto yy822; yy1068: yych = *++p; - if (yych == 'U') goto yy1069; - if (yych != 'u') goto yy823; + if (yych == 'O') goto yy1069; + if (yych != 'o') goto yy822; yy1069: yych = *++p; - if (yych == 'O') goto yy1070; - if (yych != 'o') goto yy823; + if (yych == 'T') goto yy1070; + if (yych != 't') goto yy822; yy1070: yych = *++p; - if (yych == 'T') goto yy1071; - if (yych != 't') goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy1071: yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; + if (yych == 'Y') goto yy981; + if (yych == 'y') goto yy981; + goto yy822; yy1072: yych = *++p; - if (yych == 'Y') goto yy982; - if (yych == 'y') goto yy982; - goto yy823; + if (yych == 'T') goto yy1073; + if (yych != 't') goto yy822; yy1073: yych = *++p; - if (yych == 'T') goto yy1074; - if (yych != 't') goto yy823; + if (yych == 'O') goto yy1074; + if (yych != 'o') goto yy822; yy1074: yych = *++p; - if (yych == 'O') goto yy1075; - if (yych != 'o') goto yy823; + if (yych == 'N') goto yy981; + if (yych == 'n') goto yy981; + goto yy822; yy1075: yych = *++p; - if (yych == 'N') goto yy982; - if (yych == 'n') goto yy982; - goto yy823; + if (yych == 'R') goto yy1076; + if (yych != 'r') goto yy822; yy1076: yych = *++p; - if (yych == 'R') goto yy1077; - if (yych != 'r') goto yy823; + if (yych == 'A') goto yy1077; + if (yych != 'a') goto yy822; yy1077: yych = *++p; - if (yych == 'A') goto yy1078; - if (yych != 'a') goto yy823; + if (yych == 'M') goto yy1078; + if (yych != 'm') goto yy822; yy1078: yych = *++p; - if (yych == 'M') goto yy1079; - if (yych != 'm') goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy1079: yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; + if (yych == 'R') goto yy1084; + if (yych == 'r') goto yy1084; + goto yy822; yy1080: yych = *++p; - if (yych == 'R') goto yy1085; - if (yych == 'r') goto yy1085; - goto yy823; + if (yych == 'A') goto yy1081; + if (yych != 'a') goto yy822; yy1081: yych = *++p; - if (yych == 'A') goto yy1082; - if (yych != 'a') goto yy823; + if (yych == 'D') goto yy1082; + if (yych != 'd') goto yy822; yy1082: yych = *++p; - if (yych == 'D') goto yy1083; - if (yych != 'd') goto yy823; + if (yych == 'E') goto yy1083; + if (yych != 'e') goto yy822; yy1083: yych = *++p; - if (yych == 'E') goto yy1084; - if (yych != 'e') goto yy823; + if (yych == 'R') goto yy981; + if (yych == 'r') goto yy981; + goto yy822; yy1084: yych = *++p; - if (yych == 'R') goto yy982; - if (yych == 'r') goto yy982; - goto yy823; + if (yych == 'O') goto yy1085; + if (yych != 'o') goto yy822; yy1085: yych = *++p; - if (yych == 'O') goto yy1086; - if (yych != 'o') goto yy823; + if (yych == 'U') goto yy1086; + if (yych != 'u') goto yy822; yy1086: yych = *++p; - if (yych == 'U') goto yy1087; - if (yych != 'u') goto yy823; + if (yych == 'P') goto yy981; + if (yych == 'p') goto yy981; + goto yy822; yy1087: yych = *++p; - if (yych == 'P') goto yy982; - if (yych == 'p') goto yy982; - goto yy823; + if (yych == 'I') goto yy1093; + if (yych == 'i') goto yy1093; + goto yy822; yy1088: yych = *++p; - if (yych == 'I') goto yy1094; - if (yych == 'i') goto yy1094; - goto yy823; + if (yych == 'T') goto yy1089; + if (yych != 't') goto yy822; yy1089: yych = *++p; - if (yych == 'T') goto yy1090; - if (yych != 't') goto yy823; + if (yych == 'I') goto yy1090; + if (yych != 'i') goto yy822; yy1090: yych = *++p; - if (yych == 'I') goto yy1091; - if (yych != 'i') goto yy823; + if (yych == 'C') goto yy1091; + if (yych != 'c') goto yy822; yy1091: yych = *++p; - if (yych == 'C') goto yy1092; - if (yych != 'c') goto yy823; + if (yych == 'L') goto yy1092; + if (yych != 'l') goto yy822; yy1092: yych = *++p; - if (yych == 'L') goto yy1093; - if (yych != 'l') goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy1093: yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; + if (yych == 'D') goto yy1094; + if (yych != 'd') goto yy822; yy1094: yych = *++p; - if (yych == 'D') goto yy1095; - if (yych != 'd') goto yy823; + if (yych == 'E') goto yy981; + if (yych == 'e') goto yy981; + goto yy822; yy1095: - yych = *++p; - if (yych == 'E') goto yy982; - if (yych == 'e') goto yy982; - goto yy823; -yy1096: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy982; - if (yych <= 'N') goto yy823; + if (yych == 'E') goto yy981; + if (yych <= 'N') goto yy822; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy823; - goto yy982; + if (yych <= 'd') goto yy822; + goto yy981; } else { - if (yych != 'o') goto yy823; + if (yych != 'o') goto yy822; } } yych = *++p; - if (yych == 'G') goto yy1098; - if (yych != 'g') goto yy823; + if (yych == 'G') goto yy1097; + if (yych != 'g') goto yy822; +yy1097: + yych = *++p; + if (yych == 'R') goto yy1098; + if (yych != 'r') goto yy822; yy1098: yych = *++p; - if (yych == 'R') goto yy1099; - if (yych != 'r') goto yy823; + if (yych == 'E') goto yy1099; + if (yych != 'e') goto yy822; yy1099: yych = *++p; - if (yych == 'E') goto yy1100; - if (yych != 'e') goto yy823; + if (yych == 'S') goto yy1100; + if (yych != 's') goto yy822; yy1100: - yych = *++p; - if (yych == 'S') goto yy1101; - if (yych != 's') goto yy823; -yy1101: ++p; - if ((yych = *p) == 'S') goto yy982; - if (yych == 's') goto yy982; - goto yy823; + if ((yych = *p) == 'S') goto yy981; + if (yych == 's') goto yy981; + goto yy822; } } @@ -10408,402 +10389,402 @@ int _scan_link_url(const unsigned char *p) yych = *p; if (yych <= '(') { if (yych <= 0x1F) { - if (yych == '\n') goto yy1105; - goto yy1113; - } else { - if (yych <= ' ') goto yy1107; - if (yych <= '\'') goto yy1109; + if (yych == '\n') goto yy1104; goto yy1112; + } else { + if (yych <= ' ') goto yy1106; + if (yych <= '\'') goto yy1108; + goto yy1111; } } else { if (yych <= '<') { - if (yych <= ')') goto yy1113; - if (yych <= ';') goto yy1109; - goto yy1108; + if (yych <= ')') goto yy1112; + if (yych <= ';') goto yy1108; + goto yy1107; } else { - if (yych == '\\') goto yy1110; - goto yy1109; + if (yych == '\\') goto yy1109; + goto yy1108; } } -yy1104: +yy1103: { return (p - start); } -yy1105: +yy1104: yyaccept = 0; marker = ++p; yych = *p; -yy1106: +yy1105: if (yybm[0+yych] & 8) { - goto yy1105; + goto yy1104; } if (yych <= ')') { - if (yych <= ' ') goto yy1104; - if (yych <= '\'') goto yy1118; - if (yych <= '(') goto yy1114; - goto yy1104; + if (yych <= ' ') goto yy1103; + if (yych <= '\'') goto yy1117; + if (yych <= '(') goto yy1113; + goto yy1103; } else { if (yych <= '<') { - if (yych <= ';') goto yy1118; - goto yy1121; + if (yych <= ';') goto yy1117; + goto yy1120; } else { - if (yych == '\\') goto yy1120; - goto yy1118; + if (yych == '\\') goto yy1119; + goto yy1117; } } -yy1107: +yy1106: yyaccept = 0; yych = *(marker = ++p); - goto yy1106; -yy1108: + goto yy1105; +yy1107: yyaccept = 0; yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1121; + goto yy1120; } if (yych <= '\'') { - if (yych <= 0x00) goto yy1104; - if (yych == '\n') goto yy1104; - goto yy1128; + if (yych <= 0x00) goto yy1103; + if (yych == '\n') goto yy1103; + goto yy1127; } else { if (yych <= ')') { - if (yych <= '(') goto yy1126; - goto yy1128; + if (yych <= '(') goto yy1125; + goto yy1127; } else { - if (yych <= '=') goto yy1118; - if (yych <= '>') goto yy1123; - goto yy1125; + if (yych <= '=') goto yy1117; + if (yych <= '>') goto yy1122; + goto yy1124; } } -yy1109: +yy1108: yyaccept = 0; yych = *(marker = ++p); - goto yy1119; -yy1110: + goto yy1118; +yy1109: ++p; if ((yych = *p) <= '@') { - if (yych <= ' ') goto yy1111; - if (yych <= '/') goto yy1118; - if (yych >= ':') goto yy1118; + if (yych <= ' ') goto yy1110; + if (yych <= '/') goto yy1117; + if (yych >= ':') goto yy1117; } else { if (yych <= '`') { - if (yych >= '[') goto yy1118; + if (yych >= '[') goto yy1117; } else { - if (yych <= 'z') goto yy1111; - if (yych <= '~') goto yy1118; + if (yych <= 'z') goto yy1110; + if (yych <= '~') goto yy1117; } } -yy1111: +yy1110: { return 0; } -yy1112: +yy1111: yyaccept = 1; yych = *(marker = ++p); - if (yych <= ' ') goto yy1111; - if (yych == '(') goto yy1111; - goto yy1115; -yy1113: + if (yych <= ' ') goto yy1110; + if (yych == '(') goto yy1110; + goto yy1114; +yy1112: yych = *++p; - goto yy1111; -yy1114: + goto yy1110; +yy1113: ++p; yych = *p; -yy1115: +yy1114: if (yybm[0+yych] & 16) { - goto yy1114; + goto yy1113; } - if (yych <= '(') goto yy1116; - if (yych <= ')') goto yy1118; - goto yy1117; -yy1116: + if (yych <= '(') goto yy1115; + if (yych <= ')') goto yy1117; + goto yy1116; +yy1115: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1104; + goto yy1103; } else { - goto yy1111; + goto yy1110; } } else { - goto yy1124; + goto yy1123; } -yy1117: +yy1116: ++p; yych = *p; if (yych <= '@') { - if (yych <= ' ') goto yy1116; - if (yych <= '/') goto yy1114; - if (yych <= '9') goto yy1116; - goto yy1114; + if (yych <= ' ') goto yy1115; + if (yych <= '/') goto yy1113; + if (yych <= '9') goto yy1115; + goto yy1113; } else { if (yych <= '`') { - if (yych <= 'Z') goto yy1116; - goto yy1114; + if (yych <= 'Z') goto yy1115; + goto yy1113; } else { - if (yych <= 'z') goto yy1116; - if (yych <= '~') goto yy1114; - goto yy1116; + if (yych <= 'z') goto yy1115; + if (yych <= '~') goto yy1113; + goto yy1115; } } -yy1118: +yy1117: yyaccept = 0; marker = ++p; yych = *p; -yy1119: +yy1118: if (yych <= '(') { - if (yych <= ' ') goto yy1104; - if (yych <= '\'') goto yy1118; - goto yy1114; + if (yych <= ' ') goto yy1103; + if (yych <= '\'') goto yy1117; + goto yy1113; } else { - if (yych <= ')') goto yy1104; - if (yych != '\\') goto yy1118; + if (yych <= ')') goto yy1103; + if (yych != '\\') goto yy1117; } -yy1120: +yy1119: ++p; yych = *p; if (yych <= '@') { - if (yych <= ' ') goto yy1116; - if (yych <= '/') goto yy1118; - if (yych <= '9') goto yy1116; - goto yy1118; + if (yych <= ' ') goto yy1115; + if (yych <= '/') goto yy1117; + if (yych <= '9') goto yy1115; + goto yy1117; } else { if (yych <= '`') { - if (yych <= 'Z') goto yy1116; - goto yy1118; + if (yych <= 'Z') goto yy1115; + goto yy1117; } else { - if (yych <= 'z') goto yy1116; - if (yych <= '~') goto yy1118; - goto yy1116; + if (yych <= 'z') goto yy1115; + if (yych <= '~') goto yy1117; + goto yy1115; } } -yy1121: +yy1120: yyaccept = 0; marker = ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1121; + goto yy1120; } if (yych <= '\'') { - if (yych <= 0x00) goto yy1104; - if (yych == '\n') goto yy1104; - goto yy1128; + if (yych <= 0x00) goto yy1103; + if (yych == '\n') goto yy1103; + goto yy1127; } else { if (yych <= ')') { - if (yych <= '(') goto yy1126; - goto yy1128; + if (yych <= '(') goto yy1125; + goto yy1127; } else { - if (yych <= '=') goto yy1118; - if (yych >= '?') goto yy1125; + if (yych <= '=') goto yy1117; + if (yych >= '?') goto yy1124; } } -yy1123: +yy1122: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1124; - if (yych != ')') goto yy1119; -yy1124: + if (yych <= ' ') goto yy1123; + if (yych != ')') goto yy1118; +yy1123: { return (p - start); } -yy1125: +yy1124: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { - if (yych <= 0x00) goto yy1116; - if (yych == '\n') goto yy1116; - goto yy1128; + if (yych <= 0x00) goto yy1115; + if (yych == '\n') goto yy1115; + goto yy1127; } else { - if (yych <= '/') goto yy1121; - if (yych <= '9') goto yy1128; - if (yych <= '=') goto yy1121; - goto yy1138; + if (yych <= '/') goto yy1120; + if (yych <= '9') goto yy1127; + if (yych <= '=') goto yy1120; + goto yy1137; } } else { if (yych <= '\\') { - if (yych <= '@') goto yy1121; - if (yych <= 'Z') goto yy1128; - if (yych <= '[') goto yy1121; - goto yy1139; + if (yych <= '@') goto yy1120; + if (yych <= 'Z') goto yy1127; + if (yych <= '[') goto yy1120; + goto yy1138; } else { - if (yych <= '`') goto yy1121; - if (yych <= 'z') goto yy1128; - if (yych <= '~') goto yy1121; - goto yy1128; + if (yych <= '`') goto yy1120; + if (yych <= 'z') goto yy1127; + if (yych <= '~') goto yy1120; + goto yy1127; } } -yy1126: +yy1125: ++p; yych = *p; if (yych <= ')') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1116; - if (yych >= '\n') goto yy1116; + if (yych <= 0x00) goto yy1115; + if (yych >= '\n') goto yy1115; } else { - if (yych <= ' ') goto yy1128; - if (yych <= '\'') goto yy1126; - if (yych >= ')') goto yy1121; + if (yych <= ' ') goto yy1127; + if (yych <= '\'') goto yy1125; + if (yych >= ')') goto yy1120; } } else { if (yych <= '=') { - if (yych == '<') goto yy1114; - goto yy1126; + if (yych == '<') goto yy1113; + goto yy1125; } else { - if (yych <= '>') goto yy1134; - if (yych == '\\') goto yy1135; - goto yy1126; + if (yych <= '>') goto yy1133; + if (yych == '\\') goto yy1134; + goto yy1125; } } -yy1128: +yy1127: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1128; + goto yy1127; } - if (yych <= '=') goto yy1116; - if (yych >= '?') goto yy1131; -yy1130: + if (yych <= '=') goto yy1115; + if (yych >= '?') goto yy1130; +yy1129: yych = *++p; - goto yy1124; -yy1131: + goto yy1123; +yy1130: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1131; + goto yy1130; } if (yych <= '\n') { - if (yych <= 0x00) goto yy1116; - if (yych <= '\t') goto yy1128; - goto yy1116; + if (yych <= 0x00) goto yy1115; + if (yych <= '\t') goto yy1127; + goto yy1115; } else { - if (yych != '>') goto yy1128; + if (yych != '>') goto yy1127; } yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1128; + goto yy1127; } - if (yych <= '=') goto yy1124; - if (yych <= '>') goto yy1130; - goto yy1131; -yy1134: + if (yych <= '=') goto yy1123; + if (yych <= '>') goto yy1129; + goto yy1130; +yy1133: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1124; - if (yych == '(') goto yy1124; - goto yy1115; -yy1135: + if (yych <= ' ') goto yy1123; + if (yych == '(') goto yy1123; + goto yy1114; +yy1134: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { - if (yych <= 0x00) goto yy1116; - if (yych == '\n') goto yy1116; - goto yy1128; + if (yych <= 0x00) goto yy1115; + if (yych == '\n') goto yy1115; + goto yy1127; } else { - if (yych <= '/') goto yy1126; - if (yych <= '9') goto yy1128; - if (yych <= '=') goto yy1126; + if (yych <= '/') goto yy1125; + if (yych <= '9') goto yy1127; + if (yych <= '=') goto yy1125; } } else { if (yych <= '\\') { - if (yych <= '@') goto yy1126; - if (yych <= 'Z') goto yy1128; - if (yych <= '[') goto yy1126; - goto yy1137; + if (yych <= '@') goto yy1125; + if (yych <= 'Z') goto yy1127; + if (yych <= '[') goto yy1125; + goto yy1136; } else { - if (yych <= '`') goto yy1126; - if (yych <= 'z') goto yy1128; - if (yych <= '~') goto yy1126; - goto yy1128; + if (yych <= '`') goto yy1125; + if (yych <= 'z') goto yy1127; + if (yych <= '~') goto yy1125; + goto yy1127; } } -yy1136: +yy1135: yyaccept = 2; marker = ++p; yych = *p; if (yych <= ')') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1124; - if (yych <= '\t') goto yy1128; - goto yy1124; + if (yych <= 0x00) goto yy1123; + if (yych <= '\t') goto yy1127; + goto yy1123; } else { - if (yych <= ' ') goto yy1128; - if (yych <= '\'') goto yy1126; - if (yych <= '(') goto yy1128; - goto yy1121; + if (yych <= ' ') goto yy1127; + if (yych <= '\'') goto yy1125; + if (yych <= '(') goto yy1127; + goto yy1120; } } else { if (yych <= '=') { - if (yych == '<') goto yy1114; - goto yy1126; + if (yych == '<') goto yy1113; + goto yy1125; } else { - if (yych <= '>') goto yy1134; - if (yych == '\\') goto yy1135; - goto yy1126; + if (yych <= '>') goto yy1133; + if (yych == '\\') goto yy1134; + goto yy1125; } } -yy1137: +yy1136: ++p; yych = *p; if (yych <= '(') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1116; - if (yych <= '\t') goto yy1128; - goto yy1116; + if (yych <= 0x00) goto yy1115; + if (yych <= '\t') goto yy1127; + goto yy1115; } else { - if (yych <= ' ') goto yy1128; - if (yych <= '\'') goto yy1126; - goto yy1128; + if (yych <= ' ') goto yy1127; + if (yych <= '\'') goto yy1125; + goto yy1127; } } else { if (yych <= '>') { - if (yych <= ')') goto yy1121; - if (yych <= '=') goto yy1126; - goto yy1136; + if (yych <= ')') goto yy1120; + if (yych <= '=') goto yy1125; + goto yy1135; } else { - if (yych == '\\') goto yy1135; - goto yy1126; + if (yych == '\\') goto yy1134; + goto yy1125; } } -yy1138: +yy1137: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1121; + goto yy1120; } if (yych <= '\'') { - if (yych <= 0x00) goto yy1124; - if (yych == '\n') goto yy1124; - goto yy1128; + if (yych <= 0x00) goto yy1123; + if (yych == '\n') goto yy1123; + goto yy1127; } else { if (yych <= ')') { - if (yych <= '(') goto yy1126; - goto yy1128; + if (yych <= '(') goto yy1125; + goto yy1127; } else { - if (yych <= '=') goto yy1118; - if (yych <= '>') goto yy1123; - goto yy1125; + if (yych <= '=') goto yy1117; + if (yych <= '>') goto yy1122; + goto yy1124; } } -yy1139: +yy1138: yyaccept = 0; marker = ++p; yych = *p; if (yych <= '(') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1104; - if (yych <= '\t') goto yy1128; - goto yy1104; + if (yych <= 0x00) goto yy1103; + if (yych <= '\t') goto yy1127; + goto yy1103; } else { - if (yych <= ' ') goto yy1128; - if (yych <= '\'') goto yy1121; - goto yy1126; + if (yych <= ' ') goto yy1127; + if (yych <= '\'') goto yy1120; + goto yy1125; } } else { if (yych <= '>') { - if (yych <= ')') goto yy1128; - if (yych <= '=') goto yy1121; - goto yy1138; + if (yych <= ')') goto yy1127; + if (yych <= '=') goto yy1120; + goto yy1137; } else { - if (yych == '\\') goto yy1125; - goto yy1121; + if (yych == '\\') goto yy1124; + goto yy1120; } } } @@ -10857,147 +10838,147 @@ int _scan_link_title(const unsigned char *p) }; yych = *p; if (yych <= '"') { - if (yych == '\n') goto yy1142; - if (yych <= '!') goto yy1146; - goto yy1143; + if (yych == '\n') goto yy1141; + if (yych <= '!') goto yy1145; + goto yy1142; } else { - if (yych <= '&') goto yy1146; - if (yych <= '\'') goto yy1144; - if (yych <= '(') goto yy1145; - goto yy1146; + if (yych <= '&') goto yy1145; + if (yych <= '\'') goto yy1143; + if (yych <= '(') goto yy1144; + goto yy1145; } -yy1142: +yy1141: { return 0; } +yy1142: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) goto yy1141; + goto yy1162; yy1143: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1142; - goto yy1163; + if (yych <= 0x00) goto yy1141; + goto yy1155; yy1144: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1142; - goto yy1156; + if (yych <= 0x00) goto yy1141; + goto yy1147; yy1145: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1142; - goto yy1148; -yy1146: yych = *++p; - goto yy1142; -yy1147: + goto yy1141; +yy1146: ++p; yych = *p; -yy1148: +yy1147: if (yybm[0+yych] & 16) { - goto yy1147; + goto yy1146; } - if (yych <= 0x00) goto yy1149; - if (yych <= '[') goto yy1152; - goto yy1150; -yy1149: + if (yych <= 0x00) goto yy1148; + if (yych <= '[') goto yy1151; + goto yy1149; +yy1148: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1142; + goto yy1141; } else { - goto yy1153; + goto yy1152; } } else { if (yyaccept == 2) { - goto yy1160; + goto yy1159; } else { - goto yy1167; + goto yy1166; } } -yy1150: +yy1149: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1147; + goto yy1146; } - if (yych <= 0x00) goto yy1149; - if (yych <= '[') goto yy1154; - goto yy1150; -yy1152: + if (yych <= 0x00) goto yy1148; + if (yych <= '[') goto yy1153; + goto yy1149; +yy1151: ++p; -yy1153: +yy1152: { return (p - start); } -yy1154: +yy1153: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1147; + goto yy1146; } - if (yych <= 0x00) goto yy1153; - if (yych <= '[') goto yy1152; - goto yy1150; -yy1155: + if (yych <= 0x00) goto yy1152; + if (yych <= '[') goto yy1151; + goto yy1149; +yy1154: ++p; yych = *p; -yy1156: +yy1155: if (yybm[0+yych] & 64) { - goto yy1155; + goto yy1154; } - if (yych <= 0x00) goto yy1149; - if (yych <= '[') goto yy1159; -yy1157: + if (yych <= 0x00) goto yy1148; + if (yych <= '[') goto yy1158; +yy1156: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1155; + goto yy1154; } - if (yych <= 0x00) goto yy1149; - if (yych <= '[') goto yy1161; - goto yy1157; -yy1159: + if (yych <= 0x00) goto yy1148; + if (yych <= '[') goto yy1160; + goto yy1156; +yy1158: ++p; -yy1160: +yy1159: { return (p - start); } -yy1161: +yy1160: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1155; + goto yy1154; } - if (yych <= 0x00) goto yy1160; - if (yych <= '[') goto yy1159; - goto yy1157; -yy1162: + if (yych <= 0x00) goto yy1159; + if (yych <= '[') goto yy1158; + goto yy1156; +yy1161: ++p; yych = *p; -yy1163: +yy1162: if (yybm[0+yych] & 128) { - goto yy1162; + goto yy1161; } - if (yych <= 0x00) goto yy1149; - if (yych <= '[') goto yy1166; -yy1164: + if (yych <= 0x00) goto yy1148; + if (yych <= '[') goto yy1165; +yy1163: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1162; + goto yy1161; } - if (yych <= 0x00) goto yy1149; - if (yych <= '[') goto yy1168; - goto yy1164; -yy1166: + if (yych <= 0x00) goto yy1148; + if (yych <= '[') goto yy1167; + goto yy1163; +yy1165: ++p; -yy1167: +yy1166: { return (p - start); } -yy1168: +yy1167: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1162; + goto yy1161; } - if (yych <= 0x00) goto yy1167; - if (yych <= '[') goto yy1166; - goto yy1164; + if (yych <= 0x00) goto yy1166; + if (yych <= '[') goto yy1165; + goto yy1163; } } @@ -11045,27 +11026,27 @@ int _scan_spacechars(const unsigned char *p) }; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1175; - if (yych <= '\t') goto yy1172; - goto yy1173; + if (yych <= 0x08) goto yy1174; + if (yych <= '\t') goto yy1171; + goto yy1172; } else { - if (yych == ' ') goto yy1172; - goto yy1175; + if (yych == ' ') goto yy1171; + goto yy1174; } -yy1171: +yy1170: { return (p - start); } -yy1172: +yy1171: yych = *++p; - goto yy1174; -yy1173: + goto yy1173; +yy1172: ++p; yych = *p; -yy1174: +yy1173: if (yybm[0+yych] & 128) { - goto yy1173; + goto yy1172; } - goto yy1171; -yy1175: + goto yy1170; +yy1174: ++p; { return 0; } } @@ -11115,68 +11096,68 @@ int _scan_atx_header_start(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *p; - if (yych == '\n') goto yy1179; - if (yych == '#') goto yy1180; - goto yy1181; -yy1179: + if (yych == '\n') goto yy1178; + if (yych == '#') goto yy1179; + goto yy1180; +yy1178: { return 0; } -yy1180: +yy1179: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1184; + goto yy1183; } - if (yych == '\n') goto yy1182; - if (yych == '#') goto yy1186; - goto yy1179; -yy1181: + if (yych == '\n') goto yy1181; + if (yych == '#') goto yy1185; + goto yy1178; +yy1180: yych = *++p; - goto yy1179; -yy1182: + goto yy1178; +yy1181: ++p; -yy1183: +yy1182: { return (p - start); } -yy1184: +yy1183: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1184; + goto yy1183; } - goto yy1183; -yy1186: + goto yy1182; +yy1185: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1184; + goto yy1183; } - if (yych == '\n') goto yy1182; - if (yych == '#') goto yy1188; -yy1187: + if (yych == '\n') goto yy1181; + if (yych == '#') goto yy1187; +yy1186: p = marker; - goto yy1179; -yy1188: + goto yy1178; +yy1187: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1184; + goto yy1183; } - if (yych == '\n') goto yy1182; - if (yych != '#') goto yy1187; + if (yych == '\n') goto yy1181; + if (yych != '#') goto yy1186; yych = *++p; if (yybm[0+yych] & 128) { - goto yy1184; + goto yy1183; } - if (yych == '\n') goto yy1182; - if (yych != '#') goto yy1187; + if (yych == '\n') goto yy1181; + if (yych != '#') goto yy1186; yych = *++p; if (yybm[0+yych] & 128) { - goto yy1184; + goto yy1183; } - if (yych == '\n') goto yy1182; - if (yych != '#') goto yy1187; + if (yych == '\n') goto yy1181; + if (yych != '#') goto yy1186; ++p; if (yybm[0+(yych = *p)] & 128) { - goto yy1184; + goto yy1183; } - if (yych == '\n') goto yy1182; - goto yy1187; + if (yych == '\n') goto yy1181; + goto yy1186; } } @@ -11225,73 +11206,73 @@ int _scan_setext_header_line(const unsigned char *p) }; yych = *p; if (yych <= ',') { - if (yych != '\n') goto yy1197; + if (yych != '\n') goto yy1196; } else { - if (yych <= '-') goto yy1196; - if (yych == '=') goto yy1195; - goto yy1197; + if (yych <= '-') goto yy1195; + if (yych == '=') goto yy1194; + goto yy1196; } -yy1194: +yy1193: { return 0; } -yy1195: +yy1194: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1209; + goto yy1208; } - if (yych == '\n') goto yy1207; - if (yych == ' ') goto yy1205; - goto yy1194; -yy1196: + if (yych == '\n') goto yy1206; + if (yych == ' ') goto yy1204; + goto yy1193; +yy1195: yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1198; + goto yy1197; } - if (yych == '\n') goto yy1201; - if (yych == '-') goto yy1203; - goto yy1194; -yy1197: + if (yych == '\n') goto yy1200; + if (yych == '-') goto yy1202; + goto yy1193; +yy1196: yych = *++p; - goto yy1194; -yy1198: + goto yy1193; +yy1197: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1198; + goto yy1197; } - if (yych == '\n') goto yy1201; -yy1200: + if (yych == '\n') goto yy1200; +yy1199: p = marker; - goto yy1194; -yy1201: + goto yy1193; +yy1200: ++p; { return 2; } -yy1203: +yy1202: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1198; + goto yy1197; } - if (yych == '\n') goto yy1201; - if (yych == '-') goto yy1203; - goto yy1200; -yy1205: + if (yych == '\n') goto yy1200; + if (yych == '-') goto yy1202; + goto yy1199; +yy1204: ++p; yych = *p; - if (yych == '\n') goto yy1207; - if (yych == ' ') goto yy1205; - goto yy1200; -yy1207: + if (yych == '\n') goto yy1206; + if (yych == ' ') goto yy1204; + goto yy1199; +yy1206: ++p; { return 1; } -yy1209: +yy1208: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1209; + goto yy1208; } - if (yych == '\n') goto yy1207; - if (yych == ' ') goto yy1205; - goto yy1200; + if (yych == '\n') goto yy1206; + if (yych == ' ') goto yy1204; + goto yy1199; } } @@ -11342,139 +11323,139 @@ int _scan_hrule(const unsigned char *p) }; yych = *p; if (yych <= '*') { - if (yych == '\n') goto yy1213; - if (yych <= ')') goto yy1217; - goto yy1214; + if (yych == '\n') goto yy1212; + if (yych <= ')') goto yy1216; + goto yy1213; } else { if (yych <= '-') { - if (yych <= ',') goto yy1217; - goto yy1216; + if (yych <= ',') goto yy1216; + goto yy1215; } else { - if (yych == '_') goto yy1215; - goto yy1217; + if (yych == '_') goto yy1214; + goto yy1216; } } -yy1213: +yy1212: { return 0; } +yy1213: + yych = *(marker = ++p); + if (yych == ' ') goto yy1238; + if (yych == '*') goto yy1240; + goto yy1212; yy1214: yych = *(marker = ++p); - if (yych == ' ') goto yy1239; - if (yych == '*') goto yy1241; - goto yy1213; + if (yych == ' ') goto yy1228; + if (yych == '_') goto yy1230; + goto yy1212; yy1215: - yych = *(marker = ++p); - if (yych == ' ') goto yy1229; - if (yych == '_') goto yy1231; - goto yy1213; -yy1216: yych = *(marker = ++p); if (yybm[0+yych] & 8) { - goto yy1218; + goto yy1217; } - if (yych == '-') goto yy1221; - goto yy1213; -yy1217: + if (yych == '-') goto yy1220; + goto yy1212; +yy1216: yych = *++p; - goto yy1213; -yy1218: + goto yy1212; +yy1217: ++p; yych = *p; if (yybm[0+yych] & 8) { - goto yy1218; + goto yy1217; } - if (yych == '-') goto yy1221; -yy1220: + if (yych == '-') goto yy1220; +yy1219: p = marker; - goto yy1213; -yy1221: + goto yy1212; +yy1220: ++p; yych = *p; - if (yych == ' ') goto yy1221; - if (yych != '-') goto yy1220; -yy1223: + if (yych == ' ') goto yy1220; + if (yych != '-') goto yy1219; +yy1222: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1223; + goto yy1222; } - if (yych <= 0x08) goto yy1220; - if (yych <= '\t') goto yy1225; - if (yych <= '\n') goto yy1227; - goto yy1220; -yy1225: + if (yych <= 0x08) goto yy1219; + if (yych <= '\t') goto yy1224; + if (yych <= '\n') goto yy1226; + goto yy1219; +yy1224: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1225; + goto yy1224; } - if (yych != '\n') goto yy1220; -yy1227: + if (yych != '\n') goto yy1219; +yy1226: ++p; { return (p - start); } -yy1229: +yy1228: ++p; yych = *p; - if (yych == ' ') goto yy1229; - if (yych != '_') goto yy1220; -yy1231: + if (yych == ' ') goto yy1228; + if (yych != '_') goto yy1219; +yy1230: ++p; yych = *p; - if (yych == ' ') goto yy1231; - if (yych != '_') goto yy1220; -yy1233: + if (yych == ' ') goto yy1230; + if (yych != '_') goto yy1219; +yy1232: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1233; + goto yy1232; } - if (yych <= 0x08) goto yy1220; - if (yych <= '\t') goto yy1235; - if (yych <= '\n') goto yy1237; - goto yy1220; -yy1235: + if (yych <= 0x08) goto yy1219; + if (yych <= '\t') goto yy1234; + if (yych <= '\n') goto yy1236; + goto yy1219; +yy1234: ++p; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1220; - if (yych <= '\t') goto yy1235; + if (yych <= 0x08) goto yy1219; + if (yych <= '\t') goto yy1234; } else { - if (yych == ' ') goto yy1235; - goto yy1220; + if (yych == ' ') goto yy1234; + goto yy1219; } -yy1237: +yy1236: ++p; { return (p - start); } -yy1239: +yy1238: ++p; yych = *p; - if (yych == ' ') goto yy1239; - if (yych != '*') goto yy1220; -yy1241: + if (yych == ' ') goto yy1238; + if (yych != '*') goto yy1219; +yy1240: ++p; yych = *p; - if (yych == ' ') goto yy1241; - if (yych != '*') goto yy1220; -yy1243: + if (yych == ' ') goto yy1240; + if (yych != '*') goto yy1219; +yy1242: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1243; + goto yy1242; } - if (yych <= 0x08) goto yy1220; - if (yych <= '\t') goto yy1245; - if (yych <= '\n') goto yy1247; - goto yy1220; -yy1245: + if (yych <= 0x08) goto yy1219; + if (yych <= '\t') goto yy1244; + if (yych <= '\n') goto yy1246; + goto yy1219; +yy1244: ++p; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1220; - if (yych <= '\t') goto yy1245; + if (yych <= 0x08) goto yy1219; + if (yych <= '\t') goto yy1244; } else { - if (yych == ' ') goto yy1245; - goto yy1220; + if (yych == ' ') goto yy1244; + goto yy1219; } -yy1247: +yy1246: ++p; { return (p - start); } } @@ -11525,80 +11506,80 @@ int _scan_open_code_fence(const unsigned char *p) }; yych = *p; if (yych <= '_') { - if (yych != '\n') goto yy1254; + if (yych != '\n') goto yy1253; } else { - if (yych <= '`') goto yy1252; - if (yych == '~') goto yy1253; - goto yy1254; + if (yych <= '`') goto yy1251; + if (yych == '~') goto yy1252; + goto yy1253; } -yy1251: +yy1250: { return 0; } +yy1251: + yych = *(marker = ++p); + if (yych == '`') goto yy1262; + goto yy1250; yy1252: yych = *(marker = ++p); - if (yych == '`') goto yy1263; - goto yy1251; + if (yych == '~') goto yy1254; + goto yy1250; yy1253: - yych = *(marker = ++p); - if (yych == '~') goto yy1255; - goto yy1251; -yy1254: yych = *++p; - goto yy1251; -yy1255: + goto yy1250; +yy1254: yych = *++p; if (yybm[0+yych] & 16) { - goto yy1257; + goto yy1256; } -yy1256: +yy1255: p = marker; - goto yy1251; -yy1257: + goto yy1250; +yy1256: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1259; + goto yy1258; } - if (yych <= 0x00) goto yy1256; - if (yych <= '}') goto yy1261; - goto yy1257; -yy1259: + if (yych <= 0x00) goto yy1255; + if (yych <= '}') goto yy1260; + goto yy1256; +yy1258: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1259; + goto yy1258; } - if (yych <= 0x00) goto yy1256; - if (yych >= '~') goto yy1256; -yy1261: + if (yych <= 0x00) goto yy1255; + if (yych >= '~') goto yy1255; +yy1260: ++p; p = marker; { return (p - start); } -yy1263: +yy1262: yych = *++p; if (yybm[0+yych] & 64) { - goto yy1264; + goto yy1263; } - goto yy1256; -yy1264: + goto yy1255; +yy1263: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1266; + goto yy1265; } - if (yych <= 0x00) goto yy1256; - if (yych <= '_') goto yy1268; - goto yy1264; -yy1266: + if (yych <= 0x00) goto yy1255; + if (yych <= '_') goto yy1267; + goto yy1263; +yy1265: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1266; + goto yy1265; } - if (yych <= 0x00) goto yy1256; - if (yych >= '`') goto yy1256; -yy1268: + if (yych <= 0x00) goto yy1255; + if (yych >= '`') goto yy1255; +yy1267: ++p; p = marker; { return (p - start); } @@ -11650,84 +11631,84 @@ int _scan_close_code_fence(const unsigned char *p) }; yych = *p; if (yych <= '_') { - if (yych != '\n') goto yy1275; + if (yych != '\n') goto yy1274; } else { - if (yych <= '`') goto yy1273; - if (yych == '~') goto yy1274; - goto yy1275; + if (yych <= '`') goto yy1272; + if (yych == '~') goto yy1273; + goto yy1274; } -yy1272: +yy1271: { return 0; } +yy1272: + yych = *(marker = ++p); + if (yych == '`') goto yy1283; + goto yy1271; yy1273: yych = *(marker = ++p); - if (yych == '`') goto yy1284; - goto yy1272; + if (yych == '~') goto yy1275; + goto yy1271; yy1274: - yych = *(marker = ++p); - if (yych == '~') goto yy1276; - goto yy1272; -yy1275: yych = *++p; - goto yy1272; -yy1276: + goto yy1271; +yy1275: yych = *++p; if (yybm[0+yych] & 32) { - goto yy1278; + goto yy1277; } -yy1277: +yy1276: p = marker; - goto yy1272; -yy1278: + goto yy1271; +yy1277: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1280; + goto yy1279; } - if (yych == '\n') goto yy1282; - if (yych == '~') goto yy1278; - goto yy1277; -yy1280: + if (yych == '\n') goto yy1281; + if (yych == '~') goto yy1277; + goto yy1276; +yy1279: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1280; + goto yy1279; } - if (yych != '\n') goto yy1277; -yy1282: + if (yych != '\n') goto yy1276; +yy1281: ++p; p = marker; { return (p - start); } -yy1284: +yy1283: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1285; + goto yy1284; } - goto yy1277; -yy1285: + goto yy1276; +yy1284: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1285; + goto yy1284; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1277; - if (yych >= '\n') goto yy1289; + if (yych <= 0x08) goto yy1276; + if (yych >= '\n') goto yy1288; } else { - if (yych != ' ') goto yy1277; + if (yych != ' ') goto yy1276; } -yy1287: +yy1286: ++p; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1277; - if (yych <= '\t') goto yy1287; + if (yych <= 0x08) goto yy1276; + if (yych <= '\t') goto yy1286; } else { - if (yych == ' ') goto yy1287; - goto yy1277; + if (yych == ' ') goto yy1286; + goto yy1276; } -yy1289: +yy1288: ++p; p = marker; { return (p - start); } @@ -11745,664 +11726,664 @@ int _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; - if (yych == '\n') goto yy1293; - if (yych == '&') goto yy1294; - goto yy1295; -yy1293: + if (yych == '\n') goto yy1292; + if (yych == '&') goto yy1293; + goto yy1294; +yy1292: { return 0; } -yy1294: +yy1293: yych = *(marker = ++p); if (yych <= '@') { - if (yych == '#') goto yy1296; - goto yy1293; + if (yych == '#') goto yy1295; + goto yy1292; } else { - if (yych <= 'Z') goto yy1298; - if (yych <= '`') goto yy1293; - if (yych <= 'z') goto yy1298; - goto yy1293; + if (yych <= 'Z') goto yy1297; + if (yych <= '`') goto yy1292; + if (yych <= 'z') goto yy1297; + goto yy1292; } -yy1295: +yy1294: yych = *++p; - goto yy1293; -yy1296: + goto yy1292; +yy1295: yych = *++p; if (yych <= 'W') { - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1333; + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1332; } else { - if (yych <= 'X') goto yy1332; - if (yych == 'x') goto yy1332; + if (yych <= 'X') goto yy1331; + if (yych == 'x') goto yy1331; } -yy1297: +yy1296: p = marker; - goto yy1293; -yy1298: + goto yy1292; +yy1297: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1297; - if (yych >= ':') goto yy1297; + if (yych <= '/') goto yy1296; + if (yych >= ':') goto yy1296; } else { - if (yych <= 'Z') goto yy1299; - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= 'Z') goto yy1298; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } -yy1299: +yy1298: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1302; - if (yych <= ':') goto yy1297; + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1301; + if (yych <= ':') goto yy1296; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; - goto yy1302; + if (yych <= '@') goto yy1296; + goto yy1301; } else { - if (yych <= '`') goto yy1297; - if (yych <= 'z') goto yy1302; - goto yy1297; + if (yych <= '`') goto yy1296; + if (yych <= 'z') goto yy1301; + goto yy1296; } } -yy1300: +yy1299: ++p; { return (p - start); } +yy1301: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1302; + if (yych <= ':') goto yy1296; + goto yy1299; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy1296; + } else { + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; + } + } yy1302: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1303; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1303: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1304; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1304: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1305; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1305: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1306; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1306: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1307; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1307: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1308; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1308: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1309; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1309: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1310; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1310: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1311; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1311: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1312; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1312: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1313; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1313: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1314; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1314: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1315; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1315: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1316; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1316: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1317; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1317: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1318; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1318: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1319; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1319: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1320; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1320: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1321; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1321: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1322; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1322: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1323; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1323: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1324; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1324: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1325; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1325: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1326; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1326: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1327; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1327: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1328; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1328: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1329; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1329: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1330; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= '{') goto yy1296; } } yy1330: yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1331; - if (yych <= ':') goto yy1297; - goto yy1300; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy1297; - } else { - if (yych <= '`') goto yy1297; - if (yych >= '{') goto yy1297; - } - } + if (yych == ';') goto yy1299; + goto yy1296; yy1331: - yych = *++p; - if (yych == ';') goto yy1300; - goto yy1297; -yy1332: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1340; - goto yy1297; + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1339; + goto yy1296; } else { - if (yych <= 'F') goto yy1340; - if (yych <= '`') goto yy1297; - if (yych <= 'f') goto yy1340; - goto yy1297; + if (yych <= 'F') goto yy1339; + if (yych <= '`') goto yy1296; + if (yych <= 'f') goto yy1339; + goto yy1296; } +yy1332: + yych = *++p; + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1333; + if (yych == ';') goto yy1299; + goto yy1296; yy1333: yych = *++p; - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1334; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych == ';') goto yy1299; + goto yy1296; yy1334: yych = *++p; - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1335; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych == ';') goto yy1299; + goto yy1296; yy1335: yych = *++p; - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1336; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych == ';') goto yy1299; + goto yy1296; yy1336: yych = *++p; - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1337; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych == ';') goto yy1299; + goto yy1296; yy1337: yych = *++p; - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1338; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych == ';') goto yy1299; + goto yy1296; yy1338: yych = *++p; - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1339; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1330; + if (yych == ';') goto yy1299; + goto yy1296; yy1339: yych = *++p; - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1331; - if (yych == ';') goto yy1300; - goto yy1297; + if (yych <= ';') { + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1340; + if (yych <= ':') goto yy1296; + goto yy1299; + } else { + if (yych <= 'F') { + if (yych <= '@') goto yy1296; + } else { + if (yych <= '`') goto yy1296; + if (yych >= 'g') goto yy1296; + } + } yy1340: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1341; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= 'g') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= 'g') goto yy1296; } } yy1341: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1342; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= 'g') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= 'g') goto yy1296; } } yy1342: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1343; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= 'g') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= 'g') goto yy1296; } } yy1343: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1344; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= 'g') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= 'g') goto yy1296; } } yy1344: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1297; + if (yych <= '/') goto yy1296; if (yych <= '9') goto yy1345; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1297; + if (yych <= '@') goto yy1296; } else { - if (yych <= '`') goto yy1297; - if (yych >= 'g') goto yy1297; + if (yych <= '`') goto yy1296; + if (yych >= 'g') goto yy1296; } } yy1345: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1346; - if (yych <= ':') goto yy1297; - goto yy1300; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy1297; - } else { - if (yych <= '`') goto yy1297; - if (yych >= 'g') goto yy1297; - } - } -yy1346: ++p; if ((yych = *p) <= ';') { - if (yych <= '/') goto yy1297; - if (yych <= '9') goto yy1331; - if (yych <= ':') goto yy1297; - goto yy1300; + if (yych <= '/') goto yy1296; + if (yych <= '9') goto yy1330; + if (yych <= ':') goto yy1296; + goto yy1299; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1297; - goto yy1331; + if (yych <= '@') goto yy1296; + goto yy1330; } else { - if (yych <= '`') goto yy1297; - if (yych <= 'f') goto yy1331; - goto yy1297; + if (yych <= '`') goto yy1296; + if (yych <= 'f') goto yy1330; + goto yy1296; } } } diff --git a/src/scanners.re b/src/scanners.re index d83efdefa1..28a6991ded 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -75,7 +75,7 @@ int _scan_autolink_uri(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - scheme [:]([^\x00-\x20<>\\]|escaped_char)*[>] { return (p - start); } + scheme [:][^\x00-\x20<>]*[>] { return (p - start); } .? { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 57a756462f30d7f2f03c8d8de9ea874cf9536fa9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 31 Jan 2015 20:41:36 -0800 Subject: Updated spec.txt from CommonMark repo. --- test/spec.txt | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index e75481045f..11b649659b 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1854,6 +1854,24 @@ them.

                            Foo bar

                            . +The title may extend over multiple lines: + +. +[foo]: /url ' +title +line1 +line2 +' + +[foo] +. +

                            foo

                            +. + The title may be omitted: . @@ -1925,6 +1943,17 @@ It contributes nothing to the document. . . +Here is another one: + +. +[ +foo +]: /url +bar +. +

                            bar

                            +. + This is not a link reference definition, because there are [non-space character]s after the title: @@ -2705,6 +2734,18 @@ far enough past the blockquote marker: . +Note that at least one space is needed between the list marker and +any following content, so these are not list items: + +. +-one + +2.two +. +

                            -one

                            +

                            2.two

                            +. + 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]. @@ -4759,6 +4800,18 @@ whitespace:

                            *foo bar *

                            . +A newline also counts as whitespace: + +. +*foo bar +* +. +

                            *foo bar

                            +
                              +
                            • +
                            +. + This is not emphasis, because the second `*` is preceded by punctuation and followed by an alphanumeric (hence it is not part of a [right-flanking delimiter run]: @@ -4887,6 +4940,15 @@ __ foo bar__

                            __ foo bar__

                            . +A newline counts as whitespace: +. +__ +foo bar__ +. +

                            __ +foo bar__

                            +. + This is not strong emphasis, because the opening `__` is preceded by an alphanumeric and followed by punctuation: @@ -6253,6 +6315,14 @@ Thus, `[foo]` is equivalent to `[foo][]`.

                            [foo bar]

                            . +. +[[bar [foo] + +[foo]: /url +. +

                            [[bar foo

                            +. + The link labels are case-insensitive: . @@ -6625,6 +6695,14 @@ Spaces are not allowed in autolinks:

                            <http://foo.bar/baz bim>

                            . +Backslash-escapes do not work inside autolinks: + +. + +. +

                            http://example.com/\[\

                            +. + An [email autolink](@email-autolink) consists of `<`, followed by an [email address], followed by `>`. The link's label is the email address, @@ -6652,6 +6730,14 @@ Examples of email autolinks:

                            foo+special@Bar.baz-bar0.com

                            . +Backslash-escapes do not work inside email autolinks: + +. + +. +

                            <foo+@bar.example.com>

                            +. + These are not autolinks: . -- cgit 0.0.5-2-1-g0f52 From cd9a269bbda29a26a9bf6b8b47bd12dec64e3df2 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 1 Feb 2015 23:46:48 +0100 Subject: Don't rely on strnlen being available --- src/CMakeLists.txt | 2 +- src/houdini_html_u.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 044b7e49d8..2179c084ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -136,7 +136,7 @@ if(MSVC) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /wd4800 /D_CRT_SECURE_NO_WARNINGS") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic -D_GNU_SOURCE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() # Compile as C++ under MSVC diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index ecd7faa20c..2cb14b48cf 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -55,7 +55,10 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size) const struct html_ent *entity = find_entity((char *)src, i); if (entity != NULL) { - size_t len = strnlen((const char *)entity->utf8, 4); + int len = 0; + while (len < 4 && entity->utf8[len] != '\0') { + ++len; + } cmark_strbuf_put(ob, entity->utf8, len); return i + 1; } -- cgit 0.0.5-2-1-g0f52 From 3a5ed08c6a233aecb66e5e3c7d22e19998f94087 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 4 Feb 2015 10:33:02 -0800 Subject: Use try.commonmark.org for dingus address. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c81db21f43..3b3545c594 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ CommonMark is a rationalized version of Markdown syntax, with a [spec][the spec] and BSD-licensed reference implementations in C and JavaScript. -[Try it now!](http://spec.commonmark.org/dingus.html) +[Try it now!](http://try.commonmark.org/) For more information, see . -- cgit 0.0.5-2-1-g0f52 From f672460d6c6b9ab66afa69c783bcae9315e2c71b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 13 Feb 2015 20:59:08 -0800 Subject: Updated test/spec.txt. --- test/spec.txt | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 11b649659b..500f4eacd7 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -225,8 +225,8 @@ A line containing no characters, or a line containing only spaces The following definitions of character classes will be used in this spec: A [whitespace character](@whitespace-character) is a space -(`U+0020`), tab (`U+0009`), carriage return (`U+000D`), or -newline (`U+000A`). +(`U+0020`), tab (`U+0009`), newline (`U+000A`), line tabulation (`U+000B`), +form feed (`U+000C`), or carriage return (`U+000D`). [Whitespace](@whitespace) is a sequence of one or more [whitespace character]s. @@ -1872,6 +1872,20 @@ line2 ">foo

                            . +However, it may not contain a [blank line]: + +. +[foo]: /url 'title + +with blank line' + +[foo] +. +

                            [foo]: /url 'title

                            +

                            with blank line'

                            +

                            [foo]

                            +. + The title may be omitted: . @@ -2984,8 +2998,42 @@ the above case: . -3. **Empty list item.** A [list marker] followed by a -line containing only [whitespace] is a list item with no contents. +3. **Item starting with a blank line.** If a sequence of lines *Ls* + starting with a single [blank line] constitute a (possibly empty) + sequence of blocks *Bs*, not separated from each other by more than + one blank line, and *M* is a list marker *M* of width *W*, + then the result of prepending *M* to the first line of *Ls*, and + indenting subsequent lines of *Ls* by *W + 1* spaces, is a list + item with *Bs* as its contents. + If a line is empty, then it need not be indented. The type of the + list item (bullet or ordered) is determined by the type of its list + marker. If the list item is ordered, then it is also assigned a + start number, based on the ordered list marker. + +Here are some list items that start with a blank line but are not empty: + +. +- + foo +- + ``` + bar + ``` +- + baz +. +
                              +
                            • foo
                            • +
                            • +
                              bar
                              +
                              +
                            • +
                            • +
                              baz
                              +
                              +
                            • +
                            +. Here is an empty bullet list item: @@ -3039,6 +3087,7 @@ A list may start or end with an empty list item: . + 4. **Indentation.** If a sequence of lines *Ls* constitutes a list item according to rule #1, #2, or #3, then the result of indenting each line of *L* by 1-3 spaces (the same for each line) also constitutes a @@ -5670,6 +5719,9 @@ A [link title](@link-title) consists of either - a sequence of zero or more characters between matching parentheses (`(...)`), including a `)` character only if it is backslash-escaped. +Although [link title]s may span multiple lines, they may not contain +a [blank line]. + An [inline link](@inline-link) consists of a [link text] followed immediately by a left parenthesis `(`, optional [whitespace], an optional [link destination], an optional [link title] separated from the link -- cgit 0.0.5-2-1-g0f52 From c6417fc0b9cd240eb175501d44f68ea9d4406ec4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 13 Feb 2015 21:00:17 -0800 Subject: Updated scanners for new whitespace definition. --- src/scanners.c | 45 +++++++++++++++++++++++---------------------- src/scanners.re | 4 ++-- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 440cf83716..4f619e7d2e 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -7914,7 +7914,7 @@ int _scan_html_tag(const unsigned char *p) static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ 0, 230, 230, 230, 230, 230, 230, 230, - 230, 199, 199, 230, 230, 230, 230, 230, + 230, 199, 199, 199, 199, 199, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, @@ -8006,7 +8006,7 @@ yy749: if (yych <= '9') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy748; - if (yych <= '\n') goto yy790; + if (yych <= '\r') goto yy790; goto yy748; } else { if (yych <= ' ') goto yy790; @@ -8174,7 +8174,7 @@ yy784: } if (yych <= 0x1F) { if (yych <= 0x08) goto yy756; - if (yych >= '\v') goto yy756; + if (yych >= 0x0E) goto yy756; } else { if (yych <= ' ') goto yy786; if (yych == '>') goto yy758; @@ -8185,7 +8185,7 @@ yy786: yych = *p; if (yych <= 0x1F) { if (yych <= 0x08) goto yy756; - if (yych <= '\n') goto yy786; + if (yych <= '\r') goto yy786; goto yy756; } else { if (yych <= ' ') goto yy786; @@ -8198,7 +8198,7 @@ yy788: if (yych <= '9') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy756; - if (yych >= '\v') goto yy756; + if (yych >= 0x0E) goto yy756; } else { if (yych <= ' ') goto yy790; if (yych <= '.') goto yy756; @@ -8222,7 +8222,7 @@ yy790: if (yych <= ':') { if (yych <= ' ') { if (yych <= 0x08) goto yy756; - if (yych <= '\n') goto yy790; + if (yych <= '\r') goto yy790; if (yych <= 0x1F) goto yy756; goto yy790; } else { @@ -8257,7 +8257,7 @@ yy793: goto yy793; } if (yych <= '.') { - if (yych <= '\n') { + if (yych <= '\r') { if (yych <= 0x08) goto yy756; } else { if (yych != ' ') goto yy756; @@ -8278,7 +8278,7 @@ yy795: if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) goto yy756; - if (yych <= '\n') goto yy795; + if (yych <= '\r') goto yy795; if (yych <= 0x1F) goto yy756; goto yy795; } else { @@ -8363,7 +8363,7 @@ yy805: yych = *p; if (yych <= ' ') { if (yych <= 0x08) goto yy756; - if (yych <= '\n') goto yy790; + if (yych <= '\r') goto yy790; if (yych <= 0x1F) goto yy756; goto yy790; } else { @@ -8384,7 +8384,7 @@ yy806: if (yych <= 0x00) goto yy756; goto yy799; } else { - if (yych <= '\n') goto yy806; + if (yych <= '\r') goto yy806; if (yych <= 0x1F) goto yy799; goto yy806; } @@ -8421,7 +8421,7 @@ yy808: yych = *p; if (yych <= '/') { if (yych <= '!') { - if (yych <= '\n') { + if (yych <= '\r') { if (yych <= 0x00) goto yy756; if (yych <= 0x08) goto yy799; } else { @@ -8470,7 +8470,7 @@ yy810: if (yych <= 0x00) goto yy756; goto yy799; } else { - if (yych <= '\n') goto yy810; + if (yych <= '\r') goto yy810; if (yych <= 0x1F) goto yy799; goto yy810; } @@ -8515,7 +8515,7 @@ yy812: if (yych <= 0x00) goto yy756; goto yy799; } else { - if (yych <= '\n') goto yy812; + if (yych <= '\r') goto yy812; if (yych <= 0x1F) goto yy799; goto yy812; } @@ -8620,7 +8620,7 @@ yy821: if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy822; - if (yych <= '\n') goto yy982; + if (yych <= '\r') goto yy982; } else { if (yych <= ' ') goto yy982; if (yych >= '/') goto yy982; @@ -8880,7 +8880,7 @@ yy838: yy839: yych = *++p; if (yych <= '=') { - if (yych <= '\n') { + if (yych <= '\r') { if (yych <= 0x08) goto yy822; goto yy859; } else { @@ -9116,7 +9116,7 @@ yy858: yych = *++p; if (yych <= 0x1F) { if (yych <= 0x08) goto yy822; - if (yych >= '\v') goto yy822; + if (yych >= 0x0E) goto yy822; } else { if (yych <= ' ') goto yy859; if (yych != '>') goto yy822; @@ -9257,7 +9257,7 @@ yy883: yy884: yych = *++p; if (yych <= '=') { - if (yych <= '\n') { + if (yych <= '\r') { if (yych <= 0x08) goto yy822; goto yy859; } else { @@ -9461,7 +9461,7 @@ yy923: yy924: yych = *++p; if (yych <= '=') { - if (yych <= '\n') { + if (yych <= '\r') { if (yych <= 0x08) goto yy822; goto yy859; } else { @@ -9729,7 +9729,7 @@ yy981: yych = *++p; if (yych <= ' ') { if (yych <= 0x08) goto yy822; - if (yych <= '\n') goto yy982; + if (yych <= '\r') goto yy982; if (yych <= 0x1F) goto yy822; } else { if (yych <= '/') { @@ -9876,7 +9876,7 @@ yy1007: if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy822; - if (yych <= '\n') goto yy982; + if (yych <= '\r') goto yy982; goto yy822; } else { if (yych <= ' ') goto yy982; @@ -10082,7 +10082,7 @@ yy1047: if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy822; - if (yych <= '\n') goto yy982; + if (yych <= '\r') goto yy982; goto yy822; } else { if (yych <= ' ') goto yy982; @@ -10992,7 +10992,7 @@ int _scan_spacechars(const unsigned char *p) unsigned char yych; static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 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, @@ -11030,6 +11030,7 @@ int _scan_spacechars(const unsigned char *p) if (yych <= '\t') goto yy1171; goto yy1172; } else { + if (yych <= '\r') goto yy1171; if (yych == ' ') goto yy1171; goto yy1174; } diff --git a/src/scanners.re b/src/scanners.re index 28a6991ded..c6ebae3599 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -24,7 +24,7 @@ int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) wordchar = [^\x00-\x20]; - spacechar = [ \t\n]; + spacechar = [ \t\v\f\r\n]; reg_char = [^\\()\x00-\x20]; @@ -155,7 +155,7 @@ int _scan_spacechars(const unsigned char *p) { const unsigned char *start = p; \ /*!re2c - [ \t\n]* { return (p - start); } + [ \t\v\f\r\n]* { return (p - start); } . { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From bb26b18173df983c57459809e8b1691b89907a58 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Feb 2015 16:36:43 -0800 Subject: Added CMARK_OPT_SMARTPUNCT and --smart option. So far this is only implemented for the HTML renderer. Ultimately some of this should be factored out into a form that can be used in other renderers. --- man/man3/cmark.3 | 14 ++++++++- src/cmark.h | 4 +++ src/html.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/main.c | 3 ++ 4 files changed, 106 insertions(+), 3 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 2c4dd14b99..c8fc4c7c62 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "January 28, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "February 14, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -520,6 +520,18 @@ Render \f[C]softbreak\f[] elements as hard line breaks. .PP Normalize tree by consolidating adjacent text nodes. +.PP +.nf +\fC +.RS 0n +#define CMARK_OPT_SMARTPUNCT 8 +.RE +\f[] +.fi + +.PP +Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en dashes. + .SS Version information diff --git a/src/cmark.h b/src/cmark.h index 9f312bcdc3..f106371c30 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -496,6 +496,10 @@ char *cmark_render_man(cmark_node *root, long options); */ #define CMARK_OPT_NORMALIZE 4 +/** Convert straight quotes to curly, --- to em dashes, -- to en dashes. + */ +#define CMARK_OPT_SMARTPUNCT 8 + /** * ## Version information */ diff --git a/src/html.c b/src/html.c index 8ccb495b5d..c8cc9fba96 100644 --- a/src/html.c +++ b/src/html.c @@ -6,6 +6,7 @@ #include "config.h" #include "cmark.h" #include "node.h" +#include "utf8.h" #include "buffer.h" #include "houdini.h" @@ -60,6 +61,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, char start_header[] = "as.literal.data, - node->as.literal.len); + if (options & CMARK_OPT_SMARTPUNCT) { + lastout = 0; + i = 0; + lit = node->as.literal; + while (i < lit.len) { + c = lit.data[i]; + // replace with efficient lookup table: + if (c != '"' && c != '-' && c != '\'' && c != '.') { + i++; + continue; + } + escape_html(html, lit.data + lastout, + i - lastout); + if (c == '\'' || c == '"') { + before_char = i == 0 ? ',' : lit.data[i - 1]; + after_char = i == lit.len - 1 ? ',' : lit.data[i + 1]; + left_flanking = !utf8proc_is_space(after_char) && + !(utf8proc_is_punctuation(after_char) && + !utf8proc_is_space(before_char) && + !utf8proc_is_punctuation(before_char)); + right_flanking = !utf8proc_is_space(before_char) && + !(utf8proc_is_punctuation(before_char) && + !utf8proc_is_space(after_char) && + !utf8proc_is_punctuation(after_char)); + } + switch (lit.data[i]) { + case '"': + if (right_flanking) { + cmark_strbuf_puts(html, "”"); + } else { + cmark_strbuf_puts(html, "“"); + } + i += 1; + break; + case '\'': + if (left_flanking && !right_flanking) { + cmark_strbuf_puts(html, "‘"); + } else { + cmark_strbuf_puts(html, "’"); + } + i += 1; + break; + case '-': + if (i < lit.len - 1 && lit.data[i + 1] == '-') { + if (lit.data[i + 2] == '-') { + cmark_strbuf_puts(html, + "—"); + i += 3; + } else { + cmark_strbuf_puts(html, "–"); + i += 2; + } + } else { + cmark_strbuf_putc(html, c); + i += 1; + } + break; + case '.': + if (i < lit.len - 2 && lit.data[i + 1] == '.' && + lit.data[i + 2] == '.') { + cmark_strbuf_puts(html, + "…"); + i += 3; + } else { + cmark_strbuf_putc(html, c); + i += 1; + } + break; + default: + cmark_strbuf_putc(html, c); + i++; + } + lastout = i; + } + escape_html(html, node->as.literal.data + lastout, + i - lastout); + + } else { + escape_html(html, node->as.literal.data, + node->as.literal.len); + } break; case CMARK_NODE_LINEBREAK: diff --git a/src/main.c b/src/main.c index ef40a88f2d..3834c1fb5f 100644 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,7 @@ void print_usage() printf(" --to, -t FORMAT Specify output format (html, xml, man)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); + printf(" --smart Use smart punctuation\n"); printf(" --normalize Consolidate adjacent text nodes\n"); printf(" --help, -h Print usage information\n"); printf(" --version Print version\n"); @@ -80,6 +81,8 @@ int main(int argc, char *argv[]) options |= CMARK_OPT_SOURCEPOS; } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; + } else if (strcmp(argv[i], "--smart") == 0) { + options |= CMARK_OPT_SMARTPUNCT; } else if (strcmp(argv[i], "--normalize") == 0) { options |= CMARK_OPT_NORMALIZE; } else if ((strcmp(argv[i], "--help") == 0) || -- cgit 0.0.5-2-1-g0f52 From 515e823051533a91cae322536e6926eea4c48113 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Feb 2015 18:10:32 -0800 Subject: Added test for --smart option. Currently one test fails. --- test/CMakeLists.txt | 4 ++++ test/smart_punct.txt | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 test/smart_punct.txt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0fba1b3cb2..6d752cac45 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -39,6 +39,10 @@ IF (PYTHONINTERP_FOUND) ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_SOURCE_DIR}/test/spec.txt" "--program" "${CMAKE_BINARY_DIR}/src/cmark" ) + add_test(smartpuncttest_executable + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_SOURCE_DIR}/test/smart_punct.txt" "--program" "${CMAKE_BINARY_DIR}/src/cmark --smart" + ) + ELSE(PYTHONINTERP_FOUND) message("\n*** A python 3 interpreter is required to run the spec tests.\n") diff --git a/test/smart_punct.txt b/test/smart_punct.txt new file mode 100644 index 0000000000..c036a6d64a --- /dev/null +++ b/test/smart_punct.txt @@ -0,0 +1,61 @@ +## Smart punctuation + +. +"Hello," said the spider. +"'Shelob' is my name." +. +

                            “Hello,” said the spider. +“‘Shelob’ is my name.”

                            +. + +. +'A', 'B', and 'C' are letters. +. +

                            ‘A’, ‘B’, and ‘C’ are letters.

                            +. + +. +'Oak,' 'elm,' and 'beech' are names of trees. +So is 'pine.' +. +

                            ‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. +So is ‘pine.’

                            +. + +. +'He said, "I want to go."' +. +

                            ‘He said, “I want to go.”’

                            +. + +. +Were you alive in the 70's? +. +

                            Were you alive in the 70’s?

                            +. + +. +Here is some quoted '`code`' and a "[quoted link][1]". +. +

                            Here is some quoted ‘code’ and a “[quoted link][1]”.

                            +. + +. +Some dashes: one---two --- +three---four --- five. +. +

                            Some dashes: one—two — +three—four — five.

                            +. + +. +Dashes between numbers: 5--7, 255--66, 1987--1999. +. +

                            Dashes between numbers: 5–7, 255–66, 1987–1999.

                            +. + +. +Ellipses...and...and.... +. +

                            Ellipses…and…and….

                            +. -- cgit 0.0.5-2-1-g0f52 From fd3ae5c387e9be4e9e6362b71b25b9945e54f54b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Feb 2015 18:30:05 -0800 Subject: Improved smart quote recognition. All tests now pass. --- src/html.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/html.c b/src/html.c index c8cc9fba96..87f2371774 100644 --- a/src/html.c +++ b/src/html.c @@ -236,8 +236,38 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, escape_html(html, lit.data + lastout, i - lastout); if (c == '\'' || c == '"') { - before_char = i == 0 ? ',' : lit.data[i - 1]; - after_char = i == lit.len - 1 ? ',' : lit.data[i + 1]; + if (i == 0) { + if (node->prev) { + if (node->prev->type == CMARK_NODE_TEXT) { + before_char = node->prev->as.literal.data[node->prev->as.literal.len - 1]; + } else if (node->prev->type == CMARK_NODE_SOFTBREAK || + node->prev->type == CMARK_NODE_LINEBREAK) { + before_char = '\n'; + } else { + before_char = 'x'; + } + } else { + before_char = '\n'; + } + } else { + before_char = lit.data[i - 1]; + } + if (i >= lit.len - 1) { + if (node->next) { + if (node->next->type == CMARK_NODE_TEXT) { + after_char = node->next->as.literal.data[0]; + } else if (node->next->type == CMARK_NODE_SOFTBREAK || + node->next->type == CMARK_NODE_LINEBREAK) { + before_char = '\n'; + } else { + after_char = 'x'; + } + } else { + after_char = '\n'; + } + } else { + after_char = lit.data[i + 1]; + } left_flanking = !utf8proc_is_space(after_char) && !(utf8proc_is_punctuation(after_char) && !utf8proc_is_space(before_char) && -- cgit 0.0.5-2-1-g0f52 From a27cf939b21e2a73ddd49dde942b66f7ca85abdc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Feb 2015 18:36:30 -0800 Subject: Updated man page for --smart. --- man/man1/cmark.1 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index c425b8cae3..305761f3e5 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -32,6 +32,13 @@ Treat newlines as hard line breaks. \-\-normalize Consolidate adjacent text nodes. .TP 12n +\-\-smart +Use smart punctuation. Straight double and single quotes will +be rendered as curly quotes, depending on their position. `--` +will be rendered as an en-dash. `---` will be rendered as +an em-dash. `...` will be rendered as ellipses. Currently +only supported for HTML output. +.TP 12n \-\-help Print usage information. .TP 12n -- cgit 0.0.5-2-1-g0f52 From 7c92577bbb670ddfbf6df5ee4b931c27548230cc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Feb 2015 18:37:42 -0800 Subject: astyle changes (code formatting only). --- src/blocks.c | 8 ++++---- src/html.c | 58 +++++++++++++++++++++++++++++----------------------------- src/inlines.c | 12 ++++++------ src/node.c | 6 ++++-- 4 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 806f7a63d0..10074156f6 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -592,10 +592,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } else { // fenced matched = 0; if (indent <= 3 && - (peek_at(&input, first_nonspace) == - container->as.code.fence_char)) { + (peek_at(&input, first_nonspace) == + container->as.code.fence_char)) { matched = scan_close_code_fence(&input, - first_nonspace); + first_nonspace); } if (matched >= container->as.code.fence_length) { // closing fence - and since we're at @@ -608,7 +608,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // skip opt. spaces of fence offset i = container->as.code.fence_offset; while (i > 0 && - peek_at(&input, offset) == ' ') { + peek_at(&input, offset) == ' ') { offset++; i--; } diff --git a/src/html.c b/src/html.c index 87f2371774..b4d351ef7c 100644 --- a/src/html.c +++ b/src/html.c @@ -234,18 +234,18 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, continue; } escape_html(html, lit.data + lastout, - i - lastout); + i - lastout); if (c == '\'' || c == '"') { if (i == 0) { if (node->prev) { - if (node->prev->type == CMARK_NODE_TEXT) { - before_char = node->prev->as.literal.data[node->prev->as.literal.len - 1]; - } else if (node->prev->type == CMARK_NODE_SOFTBREAK || - node->prev->type == CMARK_NODE_LINEBREAK) { - before_char = '\n'; - } else { - before_char = 'x'; - } + if (node->prev->type == CMARK_NODE_TEXT) { + before_char = node->prev->as.literal.data[node->prev->as.literal.len - 1]; + } else if (node->prev->type == CMARK_NODE_SOFTBREAK || + node->prev->type == CMARK_NODE_LINEBREAK) { + before_char = '\n'; + } else { + before_char = 'x'; + } } else { before_char = '\n'; } @@ -254,14 +254,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } if (i >= lit.len - 1) { if (node->next) { - if (node->next->type == CMARK_NODE_TEXT) { - after_char = node->next->as.literal.data[0]; - } else if (node->next->type == CMARK_NODE_SOFTBREAK || - node->next->type == CMARK_NODE_LINEBREAK) { - before_char = '\n'; - } else { - after_char = 'x'; - } + if (node->next->type == CMARK_NODE_TEXT) { + after_char = node->next->as.literal.data[0]; + } else if (node->next->type == CMARK_NODE_SOFTBREAK || + node->next->type == CMARK_NODE_LINEBREAK) { + before_char = '\n'; + } else { + after_char = 'x'; + } } else { after_char = '\n'; } @@ -269,13 +269,13 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, after_char = lit.data[i + 1]; } left_flanking = !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); + !(utf8proc_is_punctuation(after_char) && + !utf8proc_is_space(before_char) && + !utf8proc_is_punctuation(before_char)); right_flanking = !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && - !utf8proc_is_punctuation(after_char)); + !(utf8proc_is_punctuation(before_char) && + !utf8proc_is_space(after_char) && + !utf8proc_is_punctuation(after_char)); } switch (lit.data[i]) { case '"': @@ -298,7 +298,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (i < lit.len - 1 && lit.data[i + 1] == '-') { if (lit.data[i + 2] == '-') { cmark_strbuf_puts(html, - "—"); + "—"); i += 3; } else { cmark_strbuf_puts(html, "–"); @@ -312,9 +312,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case '.': if (i < lit.len - 2 && lit.data[i + 1] == '.' && lit.data[i + 2] == '.') { - cmark_strbuf_puts(html, - "…"); - i += 3; + cmark_strbuf_puts(html, + "…"); + i += 3; } else { cmark_strbuf_putc(html, c); i += 1; @@ -327,11 +327,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lastout = i; } escape_html(html, node->as.literal.data + lastout, - i - lastout); + i - lastout); } else { escape_html(html, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); } break; diff --git a/src/inlines.c b/src/inlines.c index 2c12408339..249e3913d6 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -279,13 +279,13 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) after_char = 10; } left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); + !(utf8proc_is_punctuation(after_char) && + !utf8proc_is_space(before_char) && + !utf8proc_is_punctuation(before_char)); right_flanking = numdelims > 0 && !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && - !utf8proc_is_punctuation(after_char)); + !(utf8proc_is_punctuation(before_char) && + !utf8proc_is_space(after_char) && + !utf8proc_is_punctuation(after_char)); if (c == '_') { *can_open = left_flanking && !right_flanking; *can_close = right_flanking && !left_flanking; diff --git a/src/node.c b/src/node.c index fe3dac31d2..466b0a1516 100644 --- a/src/node.c +++ b/src/node.c @@ -263,7 +263,8 @@ cmark_node_last_child(cmark_node *node) } void* -cmark_node_get_user_data(cmark_node *node) { +cmark_node_get_user_data(cmark_node *node) +{ if (node == NULL) { return NULL; } else { @@ -272,7 +273,8 @@ cmark_node_get_user_data(cmark_node *node) { } int -cmark_node_set_user_data(cmark_node *node, void *user_data) { +cmark_node_set_user_data(cmark_node *node, void *user_data) +{ if (node == NULL) { return 0; } -- cgit 0.0.5-2-1-g0f52 From 5860d60cc79332c01da59f39e90fff2bcc8a5e9e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Feb 2015 21:18:55 -0800 Subject: Added smart.c, smart.h with function abstracting smart punct rendering. Also fixed some bugs in earlier smart handling. Now handles UTF-8. --- src/CMakeLists.txt | 2 + src/html.c | 114 ++-------------------------------------- src/smart.c | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/smart.h | 28 ++++++++++ test/smart_punct.txt | 4 +- 5 files changed, 182 insertions(+), 112 deletions(-) create mode 100644 src/smart.c create mode 100644 src/smart.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2179c084ea..2150e7af3d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,6 +16,7 @@ set(HEADERS html_unescape.h houdini.h cmark_ctype.h + smart.h ) set(LIBRARY_SOURCES cmark.c @@ -36,6 +37,7 @@ set(LIBRARY_SOURCES houdini_html_e.c houdini_html_u.c cmark_ctype.c + smart.c ${HEADERS} ) diff --git a/src/html.c b/src/html.c index b4d351ef7c..1f641966e8 100644 --- a/src/html.c +++ b/src/html.c @@ -9,6 +9,7 @@ #include "utf8.h" #include "buffer.h" #include "houdini.h" +#include "smart.h" // Functions to convert cmark_nodes to HTML strings. @@ -61,10 +62,6 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, char start_header[] = "as.literal; - while (i < lit.len) { - c = lit.data[i]; - // replace with efficient lookup table: - if (c != '"' && c != '-' && c != '\'' && c != '.') { - i++; - continue; - } - escape_html(html, lit.data + lastout, - i - lastout); - if (c == '\'' || c == '"') { - if (i == 0) { - if (node->prev) { - if (node->prev->type == CMARK_NODE_TEXT) { - before_char = node->prev->as.literal.data[node->prev->as.literal.len - 1]; - } else if (node->prev->type == CMARK_NODE_SOFTBREAK || - node->prev->type == CMARK_NODE_LINEBREAK) { - before_char = '\n'; - } else { - before_char = 'x'; - } - } else { - before_char = '\n'; - } - } else { - before_char = lit.data[i - 1]; - } - if (i >= lit.len - 1) { - if (node->next) { - if (node->next->type == CMARK_NODE_TEXT) { - after_char = node->next->as.literal.data[0]; - } else if (node->next->type == CMARK_NODE_SOFTBREAK || - node->next->type == CMARK_NODE_LINEBREAK) { - before_char = '\n'; - } else { - after_char = 'x'; - } - } else { - after_char = '\n'; - } - } else { - after_char = lit.data[i + 1]; - } - left_flanking = !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); - right_flanking = !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && - !utf8proc_is_punctuation(after_char)); - } - switch (lit.data[i]) { - case '"': - if (right_flanking) { - cmark_strbuf_puts(html, "”"); - } else { - cmark_strbuf_puts(html, "“"); - } - i += 1; - break; - case '\'': - if (left_flanking && !right_flanking) { - cmark_strbuf_puts(html, "‘"); - } else { - cmark_strbuf_puts(html, "’"); - } - i += 1; - break; - case '-': - if (i < lit.len - 1 && lit.data[i + 1] == '-') { - if (lit.data[i + 2] == '-') { - cmark_strbuf_puts(html, - "—"); - i += 3; - } else { - cmark_strbuf_puts(html, "–"); - i += 2; - } - } else { - cmark_strbuf_putc(html, c); - i += 1; - } - break; - case '.': - if (i < lit.len - 2 && lit.data[i + 1] == '.' && - lit.data[i + 2] == '.') { - cmark_strbuf_puts(html, - "…"); - i += 3; - } else { - cmark_strbuf_putc(html, c); - i += 1; - } - break; - default: - cmark_strbuf_putc(html, c); - i++; - } - lastout = i; - } - escape_html(html, node->as.literal.data + lastout, - i - lastout); - + escape_with_smart(html, node, escape_html, + "“", "”", "‘", "’", + "—", "–", "…"); } else { escape_html(html, node->as.literal.data, node->as.literal.len); diff --git a/src/smart.c b/src/smart.c new file mode 100644 index 0000000000..54c97409cd --- /dev/null +++ b/src/smart.c @@ -0,0 +1,146 @@ +#include +#include +#include +#include + +#include "config.h" +#include "cmark.h" +#include "node.h" +#include "utf8.h" +#include "buffer.h" +#include "chunk.h" + +void escape_with_smart(cmark_strbuf *buf, + cmark_node *node, + void (*escape)(cmark_strbuf *, const unsigned char *, int), + const char *left_double_quote, + const char *right_double_quote, + const char *left_single_quote, + const char *right_single_quote, + const char *em_dash, + const char *en_dash, + const char *ellipses) +{ + int32_t c = 0; + int32_t after_char = 0; + int32_t before_char = 0; + int len; + bool left_flanking, right_flanking; + int lastout = 0; + int i = 0; + cmark_chunk lit = node->as.literal; + + // set before_char based on previous text node if there is one: + if (node->prev) { + if (node->prev->type == CMARK_NODE_TEXT) { + + // walk back to the beginning of the UTF_8 sequence: + i = node->prev->as.literal.len - 1; + while (i > 0 && node->prev->as.literal.data[i] >> 6 == 2) { + i -= 1; + } + len = utf8proc_iterate(node->prev->as.literal.data + i, + node->prev->as.literal.len - i, + &before_char); + if (len == -1) { + before_char = 10; + } + + } else if (node->prev->type == CMARK_NODE_SOFTBREAK || + node->prev->type == CMARK_NODE_LINEBREAK) { + before_char = 10; + + } else { + before_char = 65; + } + } else { + before_char = 10; + } + + while (i < lit.len) { + len = utf8proc_iterate(lit.data + i, lit.len - i, &c); + i += len; + + // replace with efficient lookup table: + if (!(c == 34 || c == 39 || c == 45 || c == 46)) { + before_char = c; + continue; + } + (*escape)(buf, lit.data + lastout, i - len - lastout); + + if (c == 34 || c == 39) { + + if (i >= lit.len) { + if (node->next) { + if (node->next->type == CMARK_NODE_TEXT) { + utf8proc_iterate(node->next->as.literal.data, + node->next->as.literal.len, + &after_char); + } else if (node->next->type == CMARK_NODE_SOFTBREAK || + node->next->type == CMARK_NODE_LINEBREAK) { + after_char = 10; + } else { + after_char = 65; + } + } else { + after_char = 10; + } + } else { + utf8proc_iterate(lit.data + i, lit.len - i, &after_char); + } + + left_flanking = !utf8proc_is_space(after_char) && + !(utf8proc_is_punctuation(after_char) && + !utf8proc_is_space(before_char) && + !utf8proc_is_punctuation(before_char)); + right_flanking = !utf8proc_is_space(before_char) && + !(utf8proc_is_punctuation(before_char) && + !utf8proc_is_space(after_char) && + !utf8proc_is_punctuation(after_char)); + } + + switch (c) { + case 34: // " + if (right_flanking) { + cmark_strbuf_puts(buf, right_double_quote); + } else { + cmark_strbuf_puts(buf, left_double_quote); + } + break; + case 39: // ' + if (left_flanking && !right_flanking) { + cmark_strbuf_puts(buf, left_single_quote); + } else { + cmark_strbuf_puts(buf, right_single_quote); + } + break; + case 45: // - + if (i < lit.len && lit.data[i] == '-') { + if (lit.data[i + 1] == '-') { + cmark_strbuf_puts(buf, em_dash); + i += 2; + } else { + cmark_strbuf_puts(buf, en_dash); + i += 1; + } + } else { + cmark_strbuf_putc(buf, c); + } + break; + case 46: // . + if (i < lit.len - 1 && lit.data[i] == '.' && + lit.data[i + 1] == '.') { + cmark_strbuf_puts(buf, ellipses); + i += 2; + } else { + cmark_strbuf_putc(buf, c); + } + break; + default: + cmark_strbuf_putc(buf, c); + } + lastout = i; + } + (*escape)(buf, node->as.literal.data + lastout, lit.len - lastout); + +} diff --git a/src/smart.h b/src/smart.h new file mode 100644 index 0000000000..fa614b3be0 --- /dev/null +++ b/src/smart.h @@ -0,0 +1,28 @@ +#ifndef CMARK_SMART_H +#define CMARK_SMART_H + +#include +#include +#include "config.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void escape_with_smart(cmark_strbuf *buf, + cmark_node *node, + void (*escape)(cmark_strbuf *, const unsigned char *, int), + const char *left_double_quote, + const char *right_double_quote, + const char *left_single_quote, + const char *right_single_quote, + const char *em_dash, + const char *en_dash, + const char *ellipses); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/test/smart_punct.txt b/test/smart_punct.txt index c036a6d64a..c870c9d5b6 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -35,9 +35,9 @@ Were you alive in the 70's? . . -Here is some quoted '`code`' and a "[quoted link][1]". +Here is some quoted '`code`' and a "[quoted link](url)". . -

                            Here is some quoted ‘code’ and a “[quoted link][1]”.

                            +

                            Here is some quoted ‘code’ and a “quoted link”.

                            . . -- cgit 0.0.5-2-1-g0f52 From 846650bc717b908ef865d8c4095ee6fcd059c79b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 09:42:25 -0800 Subject: Optimized --smart. Previously we had 0.24s on the benchmark without `--smart`, 0.38s with it. Now we have 0.27s with `--smart`, so `--smart` has only a small performance impact. --- src/smart.c | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/src/smart.c b/src/smart.c index 54c97409cd..566e492b4d 100644 --- a/src/smart.c +++ b/src/smart.c @@ -10,6 +10,25 @@ #include "buffer.h" #include "chunk.h" +static const char SMART_PUNCT_TABLE[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + void escape_with_smart(cmark_strbuf *buf, cmark_node *node, void (*escape)(cmark_strbuf *, const unsigned char *, int), @@ -24,11 +43,11 @@ void escape_with_smart(cmark_strbuf *buf, int32_t c = 0; int32_t after_char = 0; int32_t before_char = 0; - int len; bool left_flanking, right_flanking; int lastout = 0; - int i = 0; + int i = 0, j = 0; cmark_chunk lit = node->as.literal; + int len; // set before_char based on previous text node if there is one: if (node->prev) { @@ -58,18 +77,26 @@ void escape_with_smart(cmark_strbuf *buf, } while (i < lit.len) { - len = utf8proc_iterate(lit.data + i, lit.len - i, &c); - i += len; - - // replace with efficient lookup table: - if (!(c == 34 || c == 39 || c == 45 || c == 46)) { - before_char = c; + c = lit.data[i]; + i++; + if (SMART_PUNCT_TABLE[c] == 0) { continue; } - (*escape)(buf, lit.data + lastout, i - len - lastout); + + (*escape)(buf, lit.data + lastout, i - 1 - lastout); if (c == 34 || c == 39) { + // if i == 0 then before_char was set before the while loop + if (i > 1) { + j = i - 2; + // walk back to the beginning of the UTF_8 sequence: + while (j >= 0 && lit.data[j] >> 6 == 2) { + j--; + } + utf8proc_iterate(lit.data + j, lit.len - j, &before_char); + } + if (i >= lit.len) { if (node->next) { if (node->next->type == CMARK_NODE_TEXT) { -- cgit 0.0.5-2-1-g0f52 From b27dcba03a6907cfc71aa0af5bfe737793c542ca Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 10:03:28 -0800 Subject: Further improvements and small optimizations in smart punctuation code. --- src/smart.c | 75 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/src/smart.c b/src/smart.c index 566e492b4d..cb67448e3b 100644 --- a/src/smart.c +++ b/src/smart.c @@ -40,7 +40,7 @@ void escape_with_smart(cmark_strbuf *buf, const char *en_dash, const char *ellipses) { - int32_t c = 0; + char c; int32_t after_char = 0; int32_t before_char = 0; bool left_flanking, right_flanking; @@ -49,49 +49,50 @@ void escape_with_smart(cmark_strbuf *buf, cmark_chunk lit = node->as.literal; int len; - // set before_char based on previous text node if there is one: - if (node->prev) { - if (node->prev->type == CMARK_NODE_TEXT) { - - // walk back to the beginning of the UTF_8 sequence: - i = node->prev->as.literal.len - 1; - while (i > 0 && node->prev->as.literal.data[i] >> 6 == 2) { - i -= 1; - } - len = utf8proc_iterate(node->prev->as.literal.data + i, - node->prev->as.literal.len - i, - &before_char); - if (len == -1) { - before_char = 10; - } - - } else if (node->prev->type == CMARK_NODE_SOFTBREAK || - node->prev->type == CMARK_NODE_LINEBREAK) { - before_char = 10; - - } else { - before_char = 65; - } - } else { - before_char = 10; - } - while (i < lit.len) { c = lit.data[i]; i++; - if (SMART_PUNCT_TABLE[c] == 0) { + if (SMART_PUNCT_TABLE[(int)c] == 0) { continue; } - (*escape)(buf, lit.data + lastout, i - 1 - lastout); + if (i - 1 - lastout > 0) { + (*escape)(buf, lit.data + lastout, i - 1 - lastout); + } if (c == 34 || c == 39) { + if (i == 1) { + // set before_char based on previous text node if there is one: + if (node->prev) { + if (node->prev->type == CMARK_NODE_TEXT) { + + // walk to the beginning of the UTF_8 sequence: + j = node->prev->as.literal.len - 1; + while (j > 0 && + node->prev->as.literal.data[j] >> 6 == 2) { + j--; + } + len = utf8proc_iterate(node->prev->as.literal.data + i, + node->prev->as.literal.len - i, + &before_char); + if (len == -1) { + before_char = 10; + } - // if i == 0 then before_char was set before the while loop - if (i > 1) { + } else if (node->prev->type == CMARK_NODE_SOFTBREAK || + node->prev->type == CMARK_NODE_LINEBREAK) { + before_char = 10; + + } else { + before_char = 65; + } + } else { + before_char = 10; + } + } else { j = i - 2; // walk back to the beginning of the UTF_8 sequence: - while (j >= 0 && lit.data[j] >> 6 == 2) { + while (j > 0 && lit.data[j] >> 6 == 2) { j--; } utf8proc_iterate(lit.data + j, lit.len - j, &before_char); @@ -127,21 +128,21 @@ void escape_with_smart(cmark_strbuf *buf, } switch (c) { - case 34: // " + case '"': if (right_flanking) { cmark_strbuf_puts(buf, right_double_quote); } else { cmark_strbuf_puts(buf, left_double_quote); } break; - case 39: // ' + case '\'': if (left_flanking && !right_flanking) { cmark_strbuf_puts(buf, left_single_quote); } else { cmark_strbuf_puts(buf, right_single_quote); } break; - case 45: // - + case '-': if (i < lit.len && lit.data[i] == '-') { if (lit.data[i + 1] == '-') { cmark_strbuf_puts(buf, em_dash); @@ -154,7 +155,7 @@ void escape_with_smart(cmark_strbuf *buf, cmark_strbuf_putc(buf, c); } break; - case 46: // . + case '.': if (i < lit.len - 1 && lit.data[i] == '.' && lit.data[i + 1] == '.') { cmark_strbuf_puts(buf, ellipses); -- cgit 0.0.5-2-1-g0f52 From 455a6a937df0e6eb4612c0f818a36e6a0629ee4b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 11:15:04 -0800 Subject: Implemented --smart for man output. --- man/man1/cmark.1 | 4 ++-- src/man.c | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 305761f3e5..c2a023a547 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -36,8 +36,8 @@ Consolidate adjacent text nodes. Use smart punctuation. Straight double and single quotes will be rendered as curly quotes, depending on their position. `--` will be rendered as an en-dash. `---` will be rendered as -an em-dash. `...` will be rendered as ellipses. Currently -only supported for HTML output. +an em-dash. `...` will be rendered as ellipses. (This option +has no effect on XML output.) .TP 12n \-\-help Print usage information. diff --git a/src/man.c b/src/man.c index f57eb7523e..970bb6dc71 100644 --- a/src/man.c +++ b/src/man.c @@ -7,6 +7,7 @@ #include "cmark.h" #include "node.h" #include "buffer.h" +#include "smart.h" // Functions to convert cmark_nodes to groff man strings. @@ -46,7 +47,7 @@ struct render_state { static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state) + struct render_state *state, long options) { cmark_node *tmp; cmark_strbuf *man = state->man; @@ -165,8 +166,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_TEXT: - escape_man(man, node->as.literal.data, - node->as.literal.len); + if (options & CMARK_OPT_SMARTPUNCT) { + escape_with_smart(man, node, escape_man, + "\\[lq]", "\\[rq]", "\\[oq]", "\\[cq]", + "\\[em]", "\\[en]", "..."); + } else { + escape_man(man, node->as.literal.data, + node->as.literal.len); + } break; case CMARK_NODE_LINEBREAK: @@ -241,7 +248,7 @@ char *cmark_render_man(cmark_node *root, long options) while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state); + S_render_node(cur, ev_type, &state, options); } result = (char *)cmark_strbuf_detach(&man); -- cgit 0.0.5-2-1-g0f52 From 2a6cbd357aa142bb40b136419cba22b6b0fa477a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 11:23:12 -0800 Subject: Man page updates. --- man/man1/cmark.1 | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index c2a023a547..cb00fda61c 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -5,7 +5,7 @@ .SH "SYNOPSIS" .HP 6n \fBcmark\fR -[\fB\-\-ast\fR] +[options] file* .SH "DESCRIPTION" \fBcmark\fR @@ -34,10 +34,11 @@ Consolidate adjacent text nodes. .TP 12n \-\-smart Use smart punctuation. Straight double and single quotes will -be rendered as curly quotes, depending on their position. `--` -will be rendered as an en-dash. `---` will be rendered as -an em-dash. `...` will be rendered as ellipses. (This option -has no effect on XML output.) +be rendered as curly quotes, depending on their position. +\f[C]\-\-\f[] will be rendered as an en-dash. +\f[C]\-\-\-\f[] will be rendered as an em-dash. +\f[C]...\f[] will be rendered as ellipses. +(This option has no effect on XML output.) .TP 12n \-\-help Print usage information. @@ -45,4 +46,7 @@ Print usage information. \-\-version Print version. .SH "AUTHORS" -John MacFarlane +John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. +.SH "SEE ALSO" +.PP +CommonMark spec: \f[C]http://spec.commonmark.org\f[]. -- cgit 0.0.5-2-1-g0f52 From 12e9e3c4d06fa33f2d72ea4eb7ee2978f59c1313 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 14:18:51 -0800 Subject: Fixed segfault with --normalize (closes #7). This bug was introduced after the modification in 009c3847f004fda437dd5376a9452973b1cb913e. --- src/iterator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iterator.c b/src/iterator.c index eb7b49cb77..c6faf99859 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -132,7 +132,7 @@ void cmark_consolidate_text_nodes(cmark_node *root) cmark_strbuf_puts(&buf, cmark_node_get_literal(cur)); tmp = cur->next; while (tmp && tmp->type == CMARK_NODE_TEXT) { - cmark_iter_get_node(iter); // advance pointer + cmark_iter_next(iter); // advance pointer cmark_strbuf_puts(&buf, cmark_node_get_literal(tmp)); next = tmp->next; cmark_node_free(tmp); -- cgit 0.0.5-2-1-g0f52 From 982ba5a528111dbf647e90f412498e315fcf432c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 17:32:00 -0800 Subject: Moved normalization step from XML renderer to main. --- src/main.c | 6 ++++++ src/xml.c | 4 ---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index 3834c1fb5f..6dc3d34c84 100644 --- a/src/main.c +++ b/src/main.c @@ -152,6 +152,12 @@ int main(int argc, char *argv[]) end_timer("finishing document"); cmark_parser_free(parser); + if (options & CMARK_OPT_NORMALIZE) { + start_timer(); + cmark_consolidate_text_nodes(document); + end_timer("normalizing document"); + } + start_timer(); print_document(document, writer, options); end_timer("print_document"); diff --git a/src/xml.c b/src/xml.c index f1692419ac..57d4c74b31 100644 --- a/src/xml.c +++ b/src/xml.c @@ -153,10 +153,6 @@ char *cmark_render_xml(cmark_node *root, long options) cmark_node *cur; struct render_state state = { &xml, 0 }; - if (options & CMARK_OPT_NORMALIZE) { - cmark_consolidate_text_nodes(root); - } - cmark_iter *iter = cmark_iter_new(root); cmark_strbuf_puts(state.xml, -- cgit 0.0.5-2-1-g0f52 From 376f81ab8aa017ab01040e10d393d7682674562d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 18:26:35 -0800 Subject: Added options parameter to cmark_parse_document, cmark_parse_file. Also to some non-exported functions in blocks and inlines. --- api_test/main.c | 10 ++++++---- man/man3/cmark.3 | 6 +++--- src/blocks.c | 17 +++++++++-------- src/cmark.c | 2 +- src/cmark.h | 4 ++-- src/inlines.c | 34 +++++++++++++++++++++++++++------- src/inlines.h | 2 +- src/main.c | 2 +- src/parser.h | 1 + 9 files changed, 51 insertions(+), 27 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index d341246325..d42cbaff8a 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -122,7 +122,7 @@ accessors(test_batch_runner *runner) "\n" "[link](url 'title')\n"; - cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1); + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); // Getters @@ -308,7 +308,7 @@ node_check(test_batch_runner *runner) { static void iterator(test_batch_runner *runner) { - cmark_node *doc = cmark_parse_document("> a *b*\n\nc", 10); + cmark_node *doc = cmark_parse_document("> a *b*\n\nc", 10, CMARK_OPT_DEFAULT); int parnodes = 0; cmark_event_type ev_type; cmark_iter *iter = cmark_iter_new(doc); @@ -339,7 +339,8 @@ iterator_delete(test_batch_runner *runner) { "\n" "* item1\n" "* item2\n"; - cmark_node *doc = cmark_parse_document(md, sizeof(md) - 1); + cmark_node *doc = cmark_parse_document(md, sizeof(md) - 1, + CMARK_OPT_DEFAULT); cmark_iter *iter = cmark_iter_new(doc); cmark_event_type ev_type; @@ -544,7 +545,8 @@ render_html(test_batch_runner *runner) "foo *bar*\n" "\n" "paragraph 2\n"; - cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1); + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, + CMARK_OPT_DEFAULT); cmark_node *paragraph = cmark_node_first_child(doc); html = cmark_render_html(paragraph, CMARK_OPT_DEFAULT); diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index c8fc4c7c62..c485bfbf17 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "February 14, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "February 15, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -437,14 +437,14 @@ Feeds a string of length \f[I]len\f[] to \f[I]parser\f[]\&. Finish parsing and return a pointer to a tree of nodes. .PP -\fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[]) +\fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIlong options\f[]) .PP Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]\&. Returns a pointer to a tree of nodes. .PP -\fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[]) +\fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIlong options\f[]) .PP Parse a CommonMark document in file \f[I]f\f[], returning a pointer to diff --git a/src/blocks.c b/src/blocks.c index 10074156f6..f2e4e8e61a 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -50,7 +50,7 @@ static cmark_node* make_document() return e; } -cmark_parser *cmark_parser_new() +cmark_parser *cmark_parser_new(long options) { cmark_parser *parser = (cmark_parser*)malloc(sizeof(cmark_parser)); cmark_node *document = make_document(); @@ -66,6 +66,7 @@ cmark_parser *cmark_parser_new() parser->curline = line; parser->last_line_length = 0; parser->linebuf = buf; + parser->options = options; return parser; } @@ -316,7 +317,7 @@ static cmark_node* add_child(cmark_parser *parser, cmark_node* parent, // Walk through cmark_node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_node* root, cmark_reference_map *refmap) +static void process_inlines(cmark_node* root, cmark_reference_map *refmap, long options) { cmark_iter *iter = cmark_iter_new(root); cmark_node *cur; @@ -327,7 +328,7 @@ static void process_inlines(cmark_node* root, cmark_reference_map *refmap) if (ev_type == CMARK_EVENT_ENTER) { if (cur->type == NODE_PARAGRAPH || cur->type == NODE_HEADER) { - cmark_parse_inlines(cur, refmap); + cmark_parse_inlines(cur, refmap, options); } } } @@ -416,15 +417,15 @@ static cmark_node *finalize_document(cmark_parser *parser) } finalize(parser, parser->root); - process_inlines(parser->root, parser->refmap); + process_inlines(parser->root, parser->refmap, parser->options); return parser->root; } -cmark_node *cmark_parse_file(FILE *f) +cmark_node *cmark_parse_file(FILE *f, long options) { unsigned char buffer[4096]; - cmark_parser *parser = cmark_parser_new(); + cmark_parser *parser = cmark_parser_new(options); size_t bytes; cmark_node *document; @@ -441,9 +442,9 @@ cmark_node *cmark_parse_file(FILE *f) return document; } -cmark_node *cmark_parse_document(const char *buffer, size_t len) +cmark_node *cmark_parse_document(const char *buffer, size_t len, long options) { - cmark_parser *parser = cmark_parser_new(); + cmark_parser *parser = cmark_parser_new(options); cmark_node *document; S_parser_feed(parser, (const unsigned char *)buffer, len, true); diff --git a/src/cmark.c b/src/cmark.c index 2ec9be9aea..d6e9278d60 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -14,7 +14,7 @@ char *cmark_markdown_to_html(const char *text, int len) cmark_node *doc; char *result; - doc = cmark_parse_document(text, len); + doc = cmark_parse_document(text, len, CMARK_OPT_DEFAULT); result = cmark_render_html(doc, CMARK_OPT_DEFAULT); cmark_node_free(doc); diff --git a/src/cmark.h b/src/cmark.h index f106371c30..f00495a7a4 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -452,13 +452,13 @@ cmark_node *cmark_parser_finish(cmark_parser *parser); * Returns a pointer to a tree of nodes. */ CMARK_EXPORT -cmark_node *cmark_parse_document(const char *buffer, size_t len); +cmark_node *cmark_parse_document(const char *buffer, size_t len, long options); /** Parse a CommonMark document in file 'f', returning a pointer to * a tree of nodes. */ CMARK_EXPORT -cmark_node *cmark_parse_file(FILE *f); +cmark_node *cmark_parse_file(FILE *f, long options); /** * ## Rendering diff --git a/src/inlines.c b/src/inlines.c index 249e3913d6..014c01814b 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -44,11 +44,11 @@ typedef struct { static delimiter* S_insert_emph(subject *subj, delimiter *opener, delimiter *closer); -static int parse_inline(subject* subj, cmark_node * parent); +static int parse_inline(subject* subj, cmark_node * parent, long options); static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); -static int subject_find_special_char(subject *subj); +static int subject_find_special_char(subject *subj, long options); static unsigned char *cmark_clean_autolink(cmark_chunk *url, int is_email) { @@ -843,7 +843,7 @@ static cmark_node* handle_newline(subject *subj) } } -static int subject_find_special_char(subject *subj) +static int subject_find_special_char(subject *subj, long options) { // "\n\\`&_*[]pos + 1; while (n < subj->input.len) { @@ -878,7 +898,7 @@ static int subject_find_special_char(subject *subj) // Parse an inline, advancing subject, and add it as a child of parent. // Return 0 if no inline can be parsed, 1 otherwise. -static int parse_inline(subject* subj, cmark_node * parent) +static int parse_inline(subject* subj, cmark_node * parent, long options) { cmark_node* new_inl = NULL; cmark_chunk contents; @@ -927,7 +947,7 @@ static int parse_inline(subject* subj, cmark_node * parent) } break; default: - endpos = subject_find_special_char(subj); + endpos = subject_find_special_char(subj, options); contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos); subj->pos = endpos; @@ -946,12 +966,12 @@ static int parse_inline(subject* subj, cmark_node * parent) } // Parse inlines from parent's string_content, adding as children of parent. -extern void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap) +extern void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, long options) { subject subj; subject_from_buf(&subj, &parent->string_content, refmap); - while (!is_eof(&subj) && parse_inline(&subj, parent)) ; + while (!is_eof(&subj) && parse_inline(&subj, parent, options)) ; process_emphasis(&subj, NULL); } diff --git a/src/inlines.h b/src/inlines.h index d2ccfb475c..4ed2391730 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -8,7 +8,7 @@ extern "C" { unsigned char *cmark_clean_url(cmark_chunk *url); unsigned char *cmark_clean_title(cmark_chunk *title); -void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap); +void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, long options); int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap); diff --git a/src/main.c b/src/main.c index 6dc3d34c84..a88a764775 100644 --- a/src/main.c +++ b/src/main.c @@ -69,7 +69,6 @@ int main(int argc, char *argv[]) _setmode(_fileno(stdout), _O_BINARY); #endif - parser = cmark_parser_new(); files = (int *)malloc(argc * sizeof(*files)); for (i = 1; i < argc; i++) { @@ -117,6 +116,7 @@ int main(int argc, char *argv[]) } } + parser = cmark_parser_new(options); for (i = 0; i < numfps; i++) { FILE *fp = fopen(argv[files[i]], "r"); if (fp == NULL) { diff --git a/src/parser.h b/src/parser.h index 3c8def9883..7a3aec47e3 100644 --- a/src/parser.h +++ b/src/parser.h @@ -19,6 +19,7 @@ struct cmark_parser { cmark_strbuf *curline; int last_line_length; cmark_strbuf *linebuf; + long options; }; #ifdef __cplusplus -- cgit 0.0.5-2-1-g0f52 From 27373892cb98a2a6a1d35fba28798d9117fff58f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 18:31:07 -0800 Subject: Moved handling of --smart from renderer to parser. This allows backslash escapes to disable smart quote transformations in particular cases. Closes #8. --- src/CMakeLists.txt | 2 - src/html.c | 10 +-- src/inlines.c | 105 +++++++++++++++++++++++++++---- src/man.c | 17 ++--- src/smart.c | 174 --------------------------------------------------- src/smart.h | 28 --------- test/smart_punct.txt | 24 +++---- 7 files changed, 113 insertions(+), 247 deletions(-) delete mode 100644 src/smart.c delete mode 100644 src/smart.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2150e7af3d..2179c084ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,6 @@ set(HEADERS html_unescape.h houdini.h cmark_ctype.h - smart.h ) set(LIBRARY_SOURCES cmark.c @@ -37,7 +36,6 @@ set(LIBRARY_SOURCES houdini_html_e.c houdini_html_u.c cmark_ctype.c - smart.c ${HEADERS} ) diff --git a/src/html.c b/src/html.c index 1f641966e8..5a64f9cce6 100644 --- a/src/html.c +++ b/src/html.c @@ -9,7 +9,6 @@ #include "utf8.h" #include "buffer.h" #include "houdini.h" -#include "smart.h" // Functions to convert cmark_nodes to HTML strings. @@ -219,14 +218,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_TEXT: - if (options & CMARK_OPT_SMARTPUNCT) { - escape_with_smart(html, node, escape_html, - "“", "”", "‘", "’", - "—", "–", "…"); - } else { - escape_html(html, node->as.literal.data, - node->as.literal.len); - } + escape_html(html, node->as.literal.data, node->as.literal.len); break; case CMARK_NODE_LINEBREAK: diff --git a/src/inlines.c b/src/inlines.c index 014c01814b..a5af1a58fc 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -271,6 +271,9 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) while (peek_char(subj) == c) { numdelims++; advance(subj); + if (c == '\'' || c == '"') { + break; // limit to 1 delim for quotes + } } len = utf8proc_iterate(subj->input.data + subj->pos, @@ -289,6 +292,9 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) if (c == '_') { *can_open = left_flanking && !right_flanking; *can_close = right_flanking && !left_flanking; + } else if (c == '\'' || c == '"') { + *can_open = left_flanking && !right_flanking; + *can_close = right_flanking; } else { *can_open = left_flanking; *can_close = right_flanking; @@ -349,25 +355,68 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, subj->last_delim = delim; } -// Parse strong/emph or a fallback. -// Assumes the subject has '_' or '*' at the current position. -static cmark_node* handle_strong_emph(subject* subj, unsigned char c) +// Assumes the subject has a c at the current position. +static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart) { int numdelims; cmark_node * inl_text; bool can_open, can_close; + cmark_chunk contents; numdelims = scan_delims(subj, c, &can_open, &can_close); - inl_text = make_str(cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims)); + if (c == '\'' && smart) { + contents = cmark_chunk_literal("’"); + } else if (c == '"' && smart) { + contents = cmark_chunk_literal("”"); + } else { + contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); + } + + inl_text = make_str(contents); - if (can_open || can_close) { + if ((can_open || can_close) && + (!(c == '\'' || c == '"') || smart)) { push_delimiter(subj, c, can_open, can_close, inl_text); } return inl_text; } +// Assumes we have a hyphen at the current position. +static cmark_node* handle_hyphen(subject* subj, bool smart) +{ + advance(subj); + if (smart && peek_char(subj) == '-') { + advance(subj); + if (peek_char(subj) == '-') { + advance(subj); + return make_str(cmark_chunk_literal("—")); + } else { + return make_str(cmark_chunk_literal("–")); + } + } else { + return make_str(cmark_chunk_literal("-")); + } +} + +// Assumes we have a period at the current position. +static cmark_node* handle_period(subject* subj, bool smart) +{ + advance(subj); + if (smart && peek_char(subj) == '.') { + advance(subj); + if (peek_char(subj) == '.') { + advance(subj); + return make_str(cmark_chunk_literal("…")); + } else { + return make_str(cmark_chunk_literal("..")); + } + } else { + return make_str(cmark_chunk_literal(".")); + } +} + static void process_emphasis(subject *subj, delimiter *start_delim) { delimiter *closer = subj->last_delim; @@ -381,7 +430,8 @@ static void process_emphasis(subject *subj, delimiter *start_delim) // now move forward, looking for closers, and handling each while (closer != NULL) { if (closer->can_close && - (closer->delim_char == '*' || closer->delim_char == '_')) { + (closer->delim_char == '*' || closer->delim_char == '_' || + closer->delim_char == '"' || closer->delim_char == '\'')) { // Now look backwards for first matching opener: opener = closer->previous; while (opener != NULL && opener != start_delim) { @@ -391,9 +441,31 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } opener = opener->previous; } - if (opener != NULL && opener != start_delim) { - closer = S_insert_emph(subj, opener, closer); - } else { + if (closer->delim_char == '*' || closer->delim_char == '_') { + if (opener != NULL && opener != start_delim) { + closer = S_insert_emph(subj, opener, closer); + } else { + closer = closer->next; + } + } else if (closer->delim_char == '\'') { + cmark_chunk_free(&closer->inl_text->as.literal); + closer->inl_text->as.literal = + cmark_chunk_literal("’"); + if (opener != NULL && opener != start_delim) { + cmark_chunk_free(&opener->inl_text->as.literal); + opener->inl_text->as.literal = + cmark_chunk_literal("‘"); + } + closer = closer->next; + } else if (closer->delim_char == '"') { + cmark_chunk_free(&closer->inl_text->as.literal); + closer->inl_text->as.literal = + cmark_chunk_literal("”"); + if (opener != NULL && opener != start_delim) { + cmark_chunk_free(&opener->inl_text->as.literal); + opener->inl_text->as.literal = + cmark_chunk_literal("“"); + } closer = closer->next; } } else { @@ -866,7 +938,7 @@ static int subject_find_special_char(subject *subj, long options) }; // " ' . - - static const char SMART_PUNCT_TABLE[] = { + static const char SMART_PUNCT_CHARS[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, @@ -890,6 +962,9 @@ static int subject_find_special_char(subject *subj, long options) while (n < subj->input.len) { if (SPECIAL_CHARS[subj->input.data[n]]) return n; + if (options & CMARK_OPT_SMARTPUNCT && + SMART_PUNCT_CHARS[subj->input.data[n]]) + return n; n++; } @@ -926,7 +1001,15 @@ static int parse_inline(subject* subj, cmark_node * parent, long options) break; case '*': case '_': - new_inl = handle_strong_emph(subj, c); + case '\'': + case '"': + new_inl = handle_delim(subj, c, options & CMARK_OPT_SMARTPUNCT); + break; + case '-': + new_inl = handle_hyphen(subj, options & CMARK_OPT_SMARTPUNCT); + break; + case '.': + new_inl = handle_period(subj, options & CMARK_OPT_SMARTPUNCT); break; case '[': advance(subj); diff --git a/src/man.c b/src/man.c index 970bb6dc71..b7cb932df3 100644 --- a/src/man.c +++ b/src/man.c @@ -7,10 +7,11 @@ #include "cmark.h" #include "node.h" #include "buffer.h" -#include "smart.h" // Functions to convert cmark_nodes to groff man strings. +// TODO: properly escape unicode punctuation used in smart mode: +// "\\[lq]", "\\[rq]", "\\[oq]", "\\[cq]", "\\[em]", "\\[en]", "..." static void escape_man(cmark_strbuf *dest, const unsigned char *source, int length) { int i; @@ -47,7 +48,7 @@ struct render_state { static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, long options) + struct render_state *state) { cmark_node *tmp; cmark_strbuf *man = state->man; @@ -166,14 +167,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_TEXT: - if (options & CMARK_OPT_SMARTPUNCT) { - escape_with_smart(man, node, escape_man, - "\\[lq]", "\\[rq]", "\\[oq]", "\\[cq]", - "\\[em]", "\\[en]", "..."); - } else { - escape_man(man, node->as.literal.data, - node->as.literal.len); - } + escape_man(man, node->as.literal.data, + node->as.literal.len); break; case CMARK_NODE_LINEBREAK: @@ -248,7 +243,7 @@ char *cmark_render_man(cmark_node *root, long options) while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state, options); + S_render_node(cur, ev_type, &state); } result = (char *)cmark_strbuf_detach(&man); diff --git a/src/smart.c b/src/smart.c deleted file mode 100644 index cb67448e3b..0000000000 --- a/src/smart.c +++ /dev/null @@ -1,174 +0,0 @@ -#include -#include -#include -#include - -#include "config.h" -#include "cmark.h" -#include "node.h" -#include "utf8.h" -#include "buffer.h" -#include "chunk.h" - -static const char SMART_PUNCT_TABLE[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -void escape_with_smart(cmark_strbuf *buf, - cmark_node *node, - void (*escape)(cmark_strbuf *, const unsigned char *, int), - const char *left_double_quote, - const char *right_double_quote, - const char *left_single_quote, - const char *right_single_quote, - const char *em_dash, - const char *en_dash, - const char *ellipses) -{ - char c; - int32_t after_char = 0; - int32_t before_char = 0; - bool left_flanking, right_flanking; - int lastout = 0; - int i = 0, j = 0; - cmark_chunk lit = node->as.literal; - int len; - - while (i < lit.len) { - c = lit.data[i]; - i++; - if (SMART_PUNCT_TABLE[(int)c] == 0) { - continue; - } - - if (i - 1 - lastout > 0) { - (*escape)(buf, lit.data + lastout, i - 1 - lastout); - } - - if (c == 34 || c == 39) { - if (i == 1) { - // set before_char based on previous text node if there is one: - if (node->prev) { - if (node->prev->type == CMARK_NODE_TEXT) { - - // walk to the beginning of the UTF_8 sequence: - j = node->prev->as.literal.len - 1; - while (j > 0 && - node->prev->as.literal.data[j] >> 6 == 2) { - j--; - } - len = utf8proc_iterate(node->prev->as.literal.data + i, - node->prev->as.literal.len - i, - &before_char); - if (len == -1) { - before_char = 10; - } - - } else if (node->prev->type == CMARK_NODE_SOFTBREAK || - node->prev->type == CMARK_NODE_LINEBREAK) { - before_char = 10; - - } else { - before_char = 65; - } - } else { - before_char = 10; - } - } else { - j = i - 2; - // walk back to the beginning of the UTF_8 sequence: - while (j > 0 && lit.data[j] >> 6 == 2) { - j--; - } - utf8proc_iterate(lit.data + j, lit.len - j, &before_char); - } - - if (i >= lit.len) { - if (node->next) { - if (node->next->type == CMARK_NODE_TEXT) { - utf8proc_iterate(node->next->as.literal.data, - node->next->as.literal.len, - &after_char); - } else if (node->next->type == CMARK_NODE_SOFTBREAK || - node->next->type == CMARK_NODE_LINEBREAK) { - after_char = 10; - } else { - after_char = 65; - } - } else { - after_char = 10; - } - } else { - utf8proc_iterate(lit.data + i, lit.len - i, &after_char); - } - - left_flanking = !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); - right_flanking = !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && - !utf8proc_is_punctuation(after_char)); - } - - switch (c) { - case '"': - if (right_flanking) { - cmark_strbuf_puts(buf, right_double_quote); - } else { - cmark_strbuf_puts(buf, left_double_quote); - } - break; - case '\'': - if (left_flanking && !right_flanking) { - cmark_strbuf_puts(buf, left_single_quote); - } else { - cmark_strbuf_puts(buf, right_single_quote); - } - break; - case '-': - if (i < lit.len && lit.data[i] == '-') { - if (lit.data[i + 1] == '-') { - cmark_strbuf_puts(buf, em_dash); - i += 2; - } else { - cmark_strbuf_puts(buf, en_dash); - i += 1; - } - } else { - cmark_strbuf_putc(buf, c); - } - break; - case '.': - if (i < lit.len - 1 && lit.data[i] == '.' && - lit.data[i + 1] == '.') { - cmark_strbuf_puts(buf, ellipses); - i += 2; - } else { - cmark_strbuf_putc(buf, c); - } - break; - default: - cmark_strbuf_putc(buf, c); - } - lastout = i; - } - (*escape)(buf, node->as.literal.data + lastout, lit.len - lastout); - -} diff --git a/src/smart.h b/src/smart.h deleted file mode 100644 index fa614b3be0..0000000000 --- a/src/smart.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef CMARK_SMART_H -#define CMARK_SMART_H - -#include -#include -#include "config.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void escape_with_smart(cmark_strbuf *buf, - cmark_node *node, - void (*escape)(cmark_strbuf *, const unsigned char *, int), - const char *left_double_quote, - const char *right_double_quote, - const char *left_single_quote, - const char *right_single_quote, - const char *em_dash, - const char *en_dash, - const char *ellipses); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/test/smart_punct.txt b/test/smart_punct.txt index c870c9d5b6..5deccde454 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -4,58 +4,58 @@ "Hello," said the spider. "'Shelob' is my name." . -

                            “Hello,” said the spider. -“‘Shelob’ is my name.”

                            +

                            “Hello,” said the spider. +“‘Shelob’ is my name.”

                            . . 'A', 'B', and 'C' are letters. . -

                            ‘A’, ‘B’, and ‘C’ are letters.

                            +

                            ‘A’, ‘B’, and ‘C’ are letters.

                            . . 'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.' . -

                            ‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. -So is ‘pine.’

                            +

                            ‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. +So is ‘pine.’

                            . . 'He said, "I want to go."' . -

                            ‘He said, “I want to go.”’

                            +

                            ‘He said, “I want to go.”’

                            . . Were you alive in the 70's? . -

                            Were you alive in the 70’s?

                            +

                            Were you alive in the 70’s?

                            . . Here is some quoted '`code`' and a "[quoted link](url)". . -

                            Here is some quoted ‘code’ and a “quoted link”.

                            +

                            Here is some quoted ‘code’ and a “quoted link”.

                            . . Some dashes: one---two --- three---four --- five. . -

                            Some dashes: one—two — -three—four — five.

                            +

                            Some dashes: one—two — +three—four — five.

                            . . Dashes between numbers: 5--7, 255--66, 1987--1999. . -

                            Dashes between numbers: 5–7, 255–66, 1987–1999.

                            +

                            Dashes between numbers: 5–7, 255–66, 1987–1999.

                            . . Ellipses...and...and.... . -

                            Ellipses…and…and….

                            +

                            Ellipses…and…and….

                            . -- cgit 0.0.5-2-1-g0f52 From 8462637bc8e525ef200ebc221b5988d69ef71680 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 21:46:18 -0800 Subject: Removed outdated statement in man page. `--smart` now affects XML output too. --- man/man1/cmark.1 | 1 - 1 file changed, 1 deletion(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index cb00fda61c..80095fdf77 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -38,7 +38,6 @@ be rendered as curly quotes, depending on their position. \f[C]\-\-\f[] will be rendered as an en-dash. \f[C]\-\-\-\f[] will be rendered as an em-dash. \f[C]...\f[] will be rendered as ellipses. -(This option has no effect on XML output.) .TP 12n \-\-help Print usage information. -- cgit 0.0.5-2-1-g0f52 From 675e49eb132eb5b78cab0f22df1a67a127261c64 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 21:47:58 -0800 Subject: Removed unneeded include. --- src/html.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/html.c b/src/html.c index 5a64f9cce6..652e3ef806 100644 --- a/src/html.c +++ b/src/html.c @@ -6,7 +6,6 @@ #include "config.h" #include "cmark.h" #include "node.h" -#include "utf8.h" #include "buffer.h" #include "houdini.h" -- cgit 0.0.5-2-1-g0f52 From d7aec31cf9bfb616f648e85b086e1e683a2d3629 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 22:06:38 -0800 Subject: Proper escaping of smart punctuation in man writer. --- src/man.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/src/man.c b/src/man.c index b7cb932df3..0194010788 100644 --- a/src/man.c +++ b/src/man.c @@ -7,31 +7,63 @@ #include "cmark.h" #include "node.h" #include "buffer.h" +#include "utf8.h" // Functions to convert cmark_nodes to groff man strings. -// TODO: properly escape unicode punctuation used in smart mode: -// "\\[lq]", "\\[rq]", "\\[oq]", "\\[cq]", "\\[em]", "\\[en]", "..." static void escape_man(cmark_strbuf *dest, const unsigned char *source, int length) { - int i; - unsigned char c; + int32_t c; + int i = 0; + int len; bool beginLine = true; - for (i = 0; i < length; i++) { - c = source[i]; - if (c == '.' && beginLine) { - cmark_strbuf_puts(dest, "\\&."); - } else if (c == '\'' && beginLine) { - cmark_strbuf_puts(dest, "\\&'"); - } else if (c == '-') { + while (i < length) { + len = utf8proc_iterate(source + i, length - i, &c); + switch(c) { + case 46: + if (beginLine) { + cmark_strbuf_puts(dest, "\\&."); + } else { + cmark_strbuf_putc(dest, source[i]); + } + break; + case 39: + if (beginLine) { + cmark_strbuf_puts(dest, "\\&'"); + } else { + cmark_strbuf_putc(dest, source[i]); + } + break; + case 45: cmark_strbuf_puts(dest, "\\-"); - } else if (c == '\\') { + break; + case 92: cmark_strbuf_puts(dest, "\\e"); - } else { + break; + case 8216: // left single quote + cmark_strbuf_puts(dest, "\\[oq]"); + break; + case 8217: // right single quote + cmark_strbuf_puts(dest, "\\[cq]"); + break; + case 8220: // left double quote + cmark_strbuf_puts(dest, "\\[lq]"); + break; + case 8221: // right double quote + cmark_strbuf_puts(dest, "\\[rq]"); + break; + case 8212: // em dash + cmark_strbuf_puts(dest, "\\[em]"); + break; + case 8211: // en dash + cmark_strbuf_puts(dest, "\\[en]"); + break; + default: cmark_strbuf_putc(dest, source[i]); } - beginLine = (c == '\n'); + beginLine = (c == 10); + i += len; } } -- cgit 0.0.5-2-1-g0f52 From af5bff782a9682531da0dec6469748cd0ea48489 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Feb 2015 22:42:49 -0800 Subject: Fixed man escaping for unicode characters. --- src/man.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/man.c b/src/man.c index 0194010788..409813934a 100644 --- a/src/man.c +++ b/src/man.c @@ -25,14 +25,14 @@ static void escape_man(cmark_strbuf *dest, const unsigned char *source, int leng if (beginLine) { cmark_strbuf_puts(dest, "\\&."); } else { - cmark_strbuf_putc(dest, source[i]); + utf8proc_encode_char(c, dest); } break; case 39: if (beginLine) { cmark_strbuf_puts(dest, "\\&'"); } else { - cmark_strbuf_putc(dest, source[i]); + utf8proc_encode_char(c, dest); } break; case 45: @@ -60,7 +60,7 @@ static void escape_man(cmark_strbuf *dest, const unsigned char *source, int leng cmark_strbuf_puts(dest, "\\[en]"); break; default: - cmark_strbuf_putc(dest, source[i]); + utf8proc_encode_char(c, dest); } beginLine = (c == 10); i += len; -- cgit 0.0.5-2-1-g0f52 From 3c0b582b52021a6abea644f056a4da4301e2bc30 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 06:44:10 -0800 Subject: Properly handle " with no matching close quote with --smart. This occurs in fiction: when a speaker has dialogue with multiple paragraphs, a close quote is used only on the final one. Added test cases. --- src/inlines.c | 2 +- test/smart_punct.txt | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index a5af1a58fc..3b2edbb5ba 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -368,7 +368,7 @@ static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart) if (c == '\'' && smart) { contents = cmark_chunk_literal("’"); } else if (c == '"' && smart) { - contents = cmark_chunk_literal("”"); + contents = cmark_chunk_literal(can_close ? "”" : "“"); } else { contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); } diff --git a/test/smart_punct.txt b/test/smart_punct.txt index 5deccde454..66b6fd2d10 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -40,6 +40,21 @@ Here is some quoted '`code`' and a "[quoted link](url)".

                            Here is some quoted ‘code’ and a “quoted link”.

                            . +. +'tis the season to be 'jolly' +. +

                            ’tis the season to be ‘jolly’

                            +. + +. +"A paragraph with no closing quote. + +"Second paragraph by same speaker, in fiction." +. +

                            “A paragraph with no closing quote.

                            +

                            “Second paragraph by same speaker, in fiction.”

                            +. + . Some dashes: one---two --- three---four --- five. -- cgit 0.0.5-2-1-g0f52 From 73f6a4c1dafeb59b3a9615e071afae2b516a03fc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 10:27:36 -0800 Subject: Move normalization step from main to cmark_parser_finish. --- src/blocks.c | 6 ++++++ src/main.c | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index f2e4e8e61a..7470389237 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -869,7 +869,13 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) } finalize_document(parser); + + if (parser->options & CMARK_OPT_NORMALIZE) { + cmark_consolidate_text_nodes(parser->root); + } + cmark_strbuf_free(parser->curline); + #if CMARK_DEBUG_NODES if (cmark_node_check(parser->root, stderr)) { abort(); diff --git a/src/main.c b/src/main.c index a88a764775..80cdb3789a 100644 --- a/src/main.c +++ b/src/main.c @@ -152,12 +152,6 @@ int main(int argc, char *argv[]) end_timer("finishing document"); cmark_parser_free(parser); - if (options & CMARK_OPT_NORMALIZE) { - start_timer(); - cmark_consolidate_text_nodes(document); - end_timer("normalizing document"); - } - start_timer(); print_document(document, writer, options); end_timer("print_document"); -- cgit 0.0.5-2-1-g0f52 From 09c35bd26b78c58ceb38866f654eea3e3b3429e1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 11:14:05 -0800 Subject: Don't require python3 to make cmark.3 man page. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index df9936730c..924492f586 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ mingw: make && make install man/man3/cmark.3: src/cmark.h | $(CMARK) - python3 man/make_man_page.py $< > $@ \ + python man/make_man_page.py $< > $@ \ archive: git archive --prefix=$(RELEASE)/ -o $(RELEASE).tar.gz HEAD -- cgit 0.0.5-2-1-g0f52 From 5de2e4e9d39fd918d041169e2759d4f4b57a0cc6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 11:28:55 -0800 Subject: Use ascii escapes for punctuation characters for portability. --- src/inlines.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 3b2edbb5ba..858bdc2012 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -14,6 +14,15 @@ #include "inlines.h" +static const char *EMDASH = "\xE2\x80\x94"; +static const char *ENDASH = "\xE2\x80\x93"; +static const char *ELLIPSES = "\xE2\x80\xA6"; +static const char *LEFTDOUBLEQUOTE = "\xE2\x80\x9C"; +static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D"; +static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98"; +static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; + + // Macros for creating various kinds of simple. #define make_str(s) make_literal(CMARK_NODE_TEXT, s) #define make_code(s) make_literal(CMARK_NODE_CODE, s) @@ -366,9 +375,9 @@ static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart) numdelims = scan_delims(subj, c, &can_open, &can_close); if (c == '\'' && smart) { - contents = cmark_chunk_literal("’"); + contents = cmark_chunk_literal(RIGHTSINGLEQUOTE); } else if (c == '"' && smart) { - contents = cmark_chunk_literal(can_close ? "”" : "“"); + contents = cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE); } else { contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); } @@ -391,9 +400,9 @@ static cmark_node* handle_hyphen(subject* subj, bool smart) advance(subj); if (peek_char(subj) == '-') { advance(subj); - return make_str(cmark_chunk_literal("—")); + return make_str(cmark_chunk_literal(EMDASH)); } else { - return make_str(cmark_chunk_literal("–")); + return make_str(cmark_chunk_literal(ENDASH)); } } else { return make_str(cmark_chunk_literal("-")); @@ -408,7 +417,7 @@ static cmark_node* handle_period(subject* subj, bool smart) advance(subj); if (peek_char(subj) == '.') { advance(subj); - return make_str(cmark_chunk_literal("…")); + return make_str(cmark_chunk_literal(ELLIPSES)); } else { return make_str(cmark_chunk_literal("..")); } @@ -450,21 +459,21 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } else if (closer->delim_char == '\'') { cmark_chunk_free(&closer->inl_text->as.literal); closer->inl_text->as.literal = - cmark_chunk_literal("’"); + cmark_chunk_literal(RIGHTSINGLEQUOTE); if (opener != NULL && opener != start_delim) { cmark_chunk_free(&opener->inl_text->as.literal); opener->inl_text->as.literal = - cmark_chunk_literal("‘"); + cmark_chunk_literal(LEFTSINGLEQUOTE); } closer = closer->next; } else if (closer->delim_char == '"') { cmark_chunk_free(&closer->inl_text->as.literal); closer->inl_text->as.literal = - cmark_chunk_literal("”"); + cmark_chunk_literal(RIGHTDOUBLEQUOTE); if (opener != NULL && opener != start_delim) { cmark_chunk_free(&opener->inl_text->as.literal); opener->inl_text->as.literal = - cmark_chunk_literal("“"); + cmark_chunk_literal(LEFTDOUBLEQUOTE); } closer = closer->next; } -- cgit 0.0.5-2-1-g0f52 From 2bcca4c2118733f14a91eaf585e8ff97e216b6bd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 12:06:51 -0800 Subject: Made 'options' an int rather than a long. For consistency with the API. --- man/man3/cmark.3 | 12 ++++++------ src/blocks.c | 8 ++++---- src/cmark.h | 10 +++++----- src/html.c | 6 +++--- src/inlines.c | 10 +++++----- src/inlines.h | 2 +- src/main.c | 4 ++-- src/man.c | 2 +- src/parser.h | 2 +- src/xml.c | 4 ++-- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index c485bfbf17..bb9c7c436e 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "February 15, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "February 16, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -437,14 +437,14 @@ Feeds a string of length \f[I]len\f[] to \f[I]parser\f[]\&. Finish parsing and return a pointer to a tree of nodes. .PP -\fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIlong options\f[]) +\fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[]) .PP Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]\&. Returns a pointer to a tree of nodes. .PP -\fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIlong options\f[]) +\fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[]) .PP Parse a CommonMark document in file \f[I]f\f[], returning a pointer to @@ -454,20 +454,20 @@ a tree of nodes. Rendering .PP -\fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIlong options\f[]) +\fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP Render a \f[I]node\f[] tree as XML. .PP -\fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIlong options\f[]) +\fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to add an appropriate header and footer. .PP -\fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIlong options\f[]) +\fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP Render a \f[I]node\f[] tree as a groff man page, without the header. diff --git a/src/blocks.c b/src/blocks.c index 7470389237..c6a468f278 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -50,7 +50,7 @@ static cmark_node* make_document() return e; } -cmark_parser *cmark_parser_new(long options) +cmark_parser *cmark_parser_new(int options) { cmark_parser *parser = (cmark_parser*)malloc(sizeof(cmark_parser)); cmark_node *document = make_document(); @@ -317,7 +317,7 @@ static cmark_node* add_child(cmark_parser *parser, cmark_node* parent, // Walk through cmark_node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_node* root, cmark_reference_map *refmap, long options) +static void process_inlines(cmark_node* root, cmark_reference_map *refmap, int options) { cmark_iter *iter = cmark_iter_new(root); cmark_node *cur; @@ -422,7 +422,7 @@ static cmark_node *finalize_document(cmark_parser *parser) return parser->root; } -cmark_node *cmark_parse_file(FILE *f, long options) +cmark_node *cmark_parse_file(FILE *f, int options) { unsigned char buffer[4096]; cmark_parser *parser = cmark_parser_new(options); @@ -442,7 +442,7 @@ cmark_node *cmark_parse_file(FILE *f, long options) return document; } -cmark_node *cmark_parse_document(const char *buffer, size_t len, long options) +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) { cmark_parser *parser = cmark_parser_new(options); cmark_node *document; diff --git a/src/cmark.h b/src/cmark.h index f00495a7a4..fc20409e90 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -452,13 +452,13 @@ cmark_node *cmark_parser_finish(cmark_parser *parser); * Returns a pointer to a tree of nodes. */ CMARK_EXPORT -cmark_node *cmark_parse_document(const char *buffer, size_t len, long options); +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); /** Parse a CommonMark document in file 'f', returning a pointer to * a tree of nodes. */ CMARK_EXPORT -cmark_node *cmark_parse_file(FILE *f, long options); +cmark_node *cmark_parse_file(FILE *f, int options); /** * ## Rendering @@ -467,18 +467,18 @@ cmark_node *cmark_parse_file(FILE *f, long options); /** Render a 'node' tree as XML. */ CMARK_EXPORT -char *cmark_render_xml(cmark_node *root, long options); +char *cmark_render_xml(cmark_node *root, int options); /** Render a 'node' tree as an HTML fragment. It is up to the user * to add an appropriate header and footer. */ CMARK_EXPORT -char *cmark_render_html(cmark_node *root, long options); +char *cmark_render_html(cmark_node *root, int options); /** Render a 'node' tree as a groff man page, without the header. */ CMARK_EXPORT -char *cmark_render_man(cmark_node *root, long options); +char *cmark_render_man(cmark_node *root, int options); /** Default writer options. */ diff --git a/src/html.c b/src/html.c index 652e3ef806..f1b88fa1c0 100644 --- a/src/html.c +++ b/src/html.c @@ -39,7 +39,7 @@ struct render_state { }; static void -S_render_sourcepos(cmark_node *node, cmark_strbuf *html, long options) +S_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) { if (CMARK_OPT_SOURCEPOS & options) { cmark_strbuf_printf(html, " data-sourcepos=\"%d:%d-%d:%d\"", @@ -52,7 +52,7 @@ S_render_sourcepos(cmark_node *node, cmark_strbuf *html, long options) static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, long options) + struct render_state *state, int options) { cmark_node *parent; cmark_node *grandparent; @@ -302,7 +302,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, return 1; } -char *cmark_render_html(cmark_node *root, long options) +char *cmark_render_html(cmark_node *root, int options) { char *result; cmark_strbuf html = GH_BUF_INIT; diff --git a/src/inlines.c b/src/inlines.c index 858bdc2012..202dcd6afb 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -53,11 +53,11 @@ typedef struct { static delimiter* S_insert_emph(subject *subj, delimiter *opener, delimiter *closer); -static int parse_inline(subject* subj, cmark_node * parent, long options); +static int parse_inline(subject* subj, cmark_node * parent, int options); static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); -static int subject_find_special_char(subject *subj, long options); +static int subject_find_special_char(subject *subj, int options); static unsigned char *cmark_clean_autolink(cmark_chunk *url, int is_email) { @@ -924,7 +924,7 @@ static cmark_node* handle_newline(subject *subj) } } -static int subject_find_special_char(subject *subj, long options) +static int subject_find_special_char(subject *subj, int options) { // "\n\\`&_*[]string_content, refmap); diff --git a/src/inlines.h b/src/inlines.h index 4ed2391730..9e56790997 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -8,7 +8,7 @@ extern "C" { unsigned char *cmark_clean_url(cmark_chunk *url); unsigned char *cmark_clean_title(cmark_chunk *title); -void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, long options); +void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options); int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap); diff --git a/src/main.c b/src/main.c index 80cdb3789a..b8ad2643da 100644 --- a/src/main.c +++ b/src/main.c @@ -33,7 +33,7 @@ void print_usage() } static void print_document(cmark_node *document, writer_format writer, - long options) + int options) { char *result; switch (writer) { @@ -63,7 +63,7 @@ int main(int argc, char *argv[]) size_t bytes; cmark_node *document; writer_format writer = FORMAT_HTML; - long options = CMARK_OPT_DEFAULT; + int options = CMARK_OPT_DEFAULT; #if defined(_WIN32) && !defined(__CYGWIN__) _setmode(_fileno(stdout), _O_BINARY); diff --git a/src/man.c b/src/man.c index 409813934a..27d308bf0e 100644 --- a/src/man.c +++ b/src/man.c @@ -262,7 +262,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, return 1; } -char *cmark_render_man(cmark_node *root, long options) +char *cmark_render_man(cmark_node *root, int options) { char *result; cmark_strbuf man = GH_BUF_INIT; diff --git a/src/parser.h b/src/parser.h index 7a3aec47e3..cbccae32df 100644 --- a/src/parser.h +++ b/src/parser.h @@ -19,7 +19,7 @@ struct cmark_parser { cmark_strbuf *curline; int last_line_length; cmark_strbuf *linebuf; - long options; + int options; }; #ifdef __cplusplus diff --git a/src/xml.c b/src/xml.c index 57d4c74b31..845e553f1c 100644 --- a/src/xml.c +++ b/src/xml.c @@ -36,7 +36,7 @@ static inline void indent(struct render_state *state) static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, long options) + struct render_state *state, int options) { cmark_strbuf *xml = state->xml; bool literal = false; @@ -145,7 +145,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, return 1; } -char *cmark_render_xml(cmark_node *root, long options) +char *cmark_render_xml(cmark_node *root, int options) { char *result; cmark_strbuf xml = GH_BUF_INIT; -- cgit 0.0.5-2-1-g0f52 From 28525a57f3a7ba4e821e7300ac9c74a1dbcadc24 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 12:10:10 -0800 Subject: Rename CMARK_OPT_SMARTPUNCT -> CMARK_OPT_SMART. --- man/man3/cmark.3 | 2 +- src/cmark.h | 2 +- src/inlines.c | 8 ++++---- src/main.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index bb9c7c436e..aa3ffd9c6e 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -524,7 +524,7 @@ Normalize tree by consolidating adjacent text nodes. .nf \fC .RS 0n -#define CMARK_OPT_SMARTPUNCT 8 +#define CMARK_OPT_SMART 8 .RE \f[] .fi diff --git a/src/cmark.h b/src/cmark.h index fc20409e90..3878355569 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -498,7 +498,7 @@ char *cmark_render_man(cmark_node *root, int options); /** Convert straight quotes to curly, --- to em dashes, -- to en dashes. */ -#define CMARK_OPT_SMARTPUNCT 8 +#define CMARK_OPT_SMART 8 /** * ## Version information diff --git a/src/inlines.c b/src/inlines.c index 202dcd6afb..cc9614194c 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -971,7 +971,7 @@ static int subject_find_special_char(subject *subj, int options) while (n < subj->input.len) { if (SPECIAL_CHARS[subj->input.data[n]]) return n; - if (options & CMARK_OPT_SMARTPUNCT && + if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]]) return n; n++; @@ -1012,13 +1012,13 @@ static int parse_inline(subject* subj, cmark_node * parent, int options) case '_': case '\'': case '"': - new_inl = handle_delim(subj, c, options & CMARK_OPT_SMARTPUNCT); + new_inl = handle_delim(subj, c, options & CMARK_OPT_SMART); break; case '-': - new_inl = handle_hyphen(subj, options & CMARK_OPT_SMARTPUNCT); + new_inl = handle_hyphen(subj, options & CMARK_OPT_SMART); break; case '.': - new_inl = handle_period(subj, options & CMARK_OPT_SMARTPUNCT); + new_inl = handle_period(subj, options & CMARK_OPT_SMART); break; case '[': advance(subj); diff --git a/src/main.c b/src/main.c index b8ad2643da..9a8fd98a73 100644 --- a/src/main.c +++ b/src/main.c @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; } else if (strcmp(argv[i], "--smart") == 0) { - options |= CMARK_OPT_SMARTPUNCT; + options |= CMARK_OPT_SMART; } else if (strcmp(argv[i], "--normalize") == 0) { options |= CMARK_OPT_NORMALIZE; } else if ((strcmp(argv[i], "--help") == 0) || -- cgit 0.0.5-2-1-g0f52 From 2f4cbcb9957a2840735a547cc846eeb566262a44 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 16 Feb 2015 12:13:49 -0800 Subject: Added more --smart test cases. --- test/smart_punct.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/smart_punct.txt b/test/smart_punct.txt index 66b6fd2d10..14da741e79 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -55,6 +55,14 @@ Here is some quoted '`code`' and a "[quoted link](url)".

                            “Second paragraph by same speaker, in fiction.”

                            . +. +\"This is not smart.\" +This isn\'t either. +. +

                            "This is not smart." +This isn't either.

                            +. + . Some dashes: one---two --- three---four --- five. @@ -63,6 +71,12 @@ three---four --- five. three—four — five.

                            . +. +Escaped dashes: \-- \-\-\-. +. +

                            Escaped dashes: -- ---.

                            +. + . Dashes between numbers: 5--7, 255--66, 1987--1999. . @@ -74,3 +88,9 @@ Ellipses...and...and.... .

                            Ellipses…and…and….

                            . + +. +No ellipses\.\.\. +. +

                            No ellipses...

                            +. -- cgit 0.0.5-2-1-g0f52 From 0f90fc3f7ec06dd032ab28ef0478c415f831862f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 17 Feb 2015 21:20:17 -0800 Subject: Moved a test outside a loop. --- src/inlines.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index cc9614194c..4e6a30a4ad 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -277,11 +277,13 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) } } - while (peek_char(subj) == c) { + if (c == '\'' || c == '"') { numdelims++; - advance(subj); - if (c == '\'' || c == '"') { - break; // limit to 1 delim for quotes + advance(subj); // limit to 1 delim for quotes + } else { + while (peek_char(subj) == c) { + numdelims++; + advance(subj); } } -- cgit 0.0.5-2-1-g0f52 From 5e90436d9c90d6e8e5612cebb4266eea432168b4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 18 Feb 2015 15:49:45 -0800 Subject: Packed cmark_node struct to fit into 128 bytes. This gives a small performance boost (0.37 to 0.36). --- src/node.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/node.h b/src/node.h index 74eddd4828..7a45d424b0 100644 --- a/src/node.h +++ b/src/node.h @@ -6,6 +6,7 @@ extern "C" { #endif #include +#include #include "cmark.h" #include "buffer.h" @@ -22,12 +23,13 @@ typedef struct { } cmark_list; typedef struct { - bool fenced; - int fence_length; - int fence_offset; - unsigned char fence_char; cmark_chunk info; cmark_chunk literal; + int fence_length; + /* fence_offset must be 0-3, so we can use int8_t */ + int8_t fence_offset; + unsigned char fence_char; + bool fenced; } cmark_code; typedef struct { @@ -41,8 +43,6 @@ typedef struct { } cmark_link; struct cmark_node { - cmark_node_type type; - struct cmark_node *next; struct cmark_node *prev; struct cmark_node *parent; @@ -55,6 +55,9 @@ struct cmark_node { int start_column; int end_line; int end_column; + + cmark_node_type type; + bool open; bool last_line_blank; -- cgit 0.0.5-2-1-g0f52 From 3886843e12c564efdbf233b294d451ac25be93bc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 18 Feb 2015 15:52:21 -0800 Subject: Updated benchmarks. --- benchmarks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks.md b/benchmarks.md index fb4386f5f0..b515c73fee 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -14,7 +14,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | marked | 1.94 | | **commonmark.js** | 1.93 | | discount | 1.86 | -| **cmark** | 0.37 | +| **cmark** | 0.36 | | sundown | 0.34 | -- cgit 0.0.5-2-1-g0f52 From 17e4a8203dc24ecee990ba3e8880092a1864e12e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 18 Feb 2015 15:55:04 -0800 Subject: Repacked delimiter struct to avoid hole. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 4e6a30a4ad..9ed7d46887 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -36,8 +36,8 @@ typedef struct delimiter { struct delimiter *previous; struct delimiter *next; cmark_node *inl_text; - unsigned char delim_char; int position; + unsigned char delim_char; bool can_open; bool can_close; bool active; -- cgit 0.0.5-2-1-g0f52 From aad831e87c92530fe54b7dcdda593c53ccc3f0b6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 19 Feb 2015 09:16:49 -0800 Subject: Fixed use-after-free bug. This arose when a paragraph containing only reference links and blank space was finalized. Finalization would remove the node. `finalize` returns the parent node, but the problem arose because we had both `cur` and `parser->current`, and only one was being updated. Solution: remove `cur`, which is a holdover from before we had `parser->current`. I believe this will close #9 -- @JordanMilne can you test and confirm? --- src/blocks.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index c6a468f278..6e2f97a234 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -523,7 +523,6 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) cmark_list *data = NULL; bool all_matched = true; cmark_node* container; - cmark_node* cur = parser->current; bool blank = false; int first_nonspace; int indent; @@ -659,7 +658,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) blank = peek_at(&input, first_nonspace) == '\n'; if (indent >= CODE_INDENT) { - if (cur->type != NODE_PARAGRAPH && !blank) { + if (parser->current->type != NODE_PARAGRAPH && !blank) { offset += CODE_INDENT; container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); container->as.code.fenced = false; @@ -809,20 +808,20 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) cont = cont->parent; } - if (cur != last_matched_container && + if (parser->current != last_matched_container && container == last_matched_container && !blank && - cur->type == NODE_PARAGRAPH && - cmark_strbuf_len(&cur->string_content) > 0) { + parser->current->type == NODE_PARAGRAPH && + cmark_strbuf_len(&parser->current->string_content) > 0) { - add_line(cur, &input, offset); + add_line(parser->current, &input, offset); } else { // not a lazy continuation // finalize any blocks that were not matched and set cur to container: - while (cur != last_matched_container) { - cur = finalize(parser, cur); - assert(cur != NULL); + while (parser->current != last_matched_container) { + parser->current = finalize(parser, parser->current); + assert(parser->current != NULL); } if (container->type == NODE_CODE_BLOCK || -- cgit 0.0.5-2-1-g0f52 From 0fdb06f275aeb67331fd0984d89227ecadeeb26e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 19 Feb 2015 10:34:34 -0800 Subject: Added 'Asan' build type. `make asan` will link against ASan; the resulting executable will do checks for memory access issues. Thanks @JordanMilne for the suggestion. --- CMakeLists.txt | 1 + FindAsan.cmake | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 8 ++++++- 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 FindAsan.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f681698ce8..db04698f58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ project(cmark) cmake_minimum_required(VERSION 2.8.9) +include("FindAsan.cmake") if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") message(FATAL_ERROR "Do not build in-source.\nPlease remove CMakeCache.txt and the CMakeFiles/ directory.\nThen: mkdir build ; cd build ; cmake .. ; make") diff --git a/FindAsan.cmake b/FindAsan.cmake new file mode 100644 index 0000000000..064b5b6b39 --- /dev/null +++ b/FindAsan.cmake @@ -0,0 +1,74 @@ +# +# The MIT License (MIT) +# +# Copyright (c) 2013 Matthew Arsenault +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# This module tests if address sanitizer is supported by the compiler, +# and creates a ASan build type (i.e. set CMAKE_BUILD_TYPE=ASan to use +# it). This sets the following variables: +# +# CMAKE_C_FLAGS_ASAN - Flags to use for C with asan +# CMAKE_CXX_FLAGS_ASAN - Flags to use for C++ with asan +# HAVE_ADDRESS_SANITIZER - True or false if the ASan build type is available + +include(CheckCCompilerFlag) + +# Set -Werror to catch "argument unused during compilation" warnings +set(CMAKE_REQUIRED_FLAGS "-Werror -faddress-sanitizer") # Also needs to be a link flag for test to pass +check_c_compiler_flag("-faddress-sanitizer" HAVE_FLAG_ADDRESS_SANITIZER) + +set(CMAKE_REQUIRED_FLAGS "-Werror -fsanitize=address") # Also needs to be a link flag for test to pass +check_c_compiler_flag("-fsanitize=address" HAVE_FLAG_SANITIZE_ADDRESS) + +unset(CMAKE_REQUIRED_FLAGS) + +if(HAVE_FLAG_SANITIZE_ADDRESS) + # Clang 3.2+ use this version + set(ADDRESS_SANITIZER_FLAG "-fsanitize=address") +elseif(HAVE_FLAG_ADDRESS_SANITIZER) + # Older deprecated flag for ASan + set(ADDRESS_SANITIZER_FLAG "-faddress-sanitizer") +endif() + +if(NOT ADDRESS_SANITIZER_FLAG) + return() +else(NOT ADDRESS_SANITIZER_FLAG) + set(HAVE_ADDRESS_SANITIZER FALSE) +endif() + +set(HAVE_ADDRESS_SANITIZER TRUE) + +set(CMAKE_C_FLAGS_ASAN "-O1 -g ${ADDRESS_SANITIZER_FLAG} -fno-omit-frame-pointer -fno-optimize-sibling-calls" + CACHE STRING "Flags used by the C compiler during ASan builds." + FORCE) +set(CMAKE_CXX_FLAGS_ASAN "-O1 -g ${ADDRESS_SANITIZER_FLAG} -fno-omit-frame-pointer -fno-optimize-sibling-calls" + CACHE STRING "Flags used by the C++ compiler during ASan builds." + FORCE) +set(CMAKE_EXE_LINKER_FLAGS_ASAN "${ADDRESS_SANITIZER_FLAG}" + CACHE STRING "Flags used for linking binaries during ASan builds." + FORCE) +set(CMAKE_SHARED_LINKER_FLAGS_ASAN "${ADDRESS_SANITIZER_FLAG}" + CACHE STRING "Flags used by the shared libraries linker during ASan builds." + FORCE) +mark_as_advanced(CMAKE_C_FLAGS_ASAN + CMAKE_CXX_FLAGS_ASAN + CMAKE_EXE_LINKER_FLAGS_ASAN + CMAKE_SHARED_LINKER_FLAGS_ASAN) diff --git a/Makefile b/Makefile index 924492f586..e6a2314c40 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug mingw archive bench astyle update-spec +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug asan mingw archive bench astyle update-spec all: cmake_build man/man3/cmark.3 @@ -47,6 +47,12 @@ debug: cmake .. -DCMAKE_BUILD_TYPE=Debug; \ make +asan: + mkdir -p $(BUILDDIR); \ + cd $(BUILDDIR); \ + cmake .. -DCMAKE_BUILD_TYPE=Asan; \ + make + prof: mkdir -p $(BUILDDIR); \ cd $(BUILDDIR); \ -- cgit 0.0.5-2-1-g0f52 From 5af9f2717274efe5e2aebfe6a8154d700ec7e471 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 19 Feb 2015 22:55:02 -0800 Subject: Fixed use-after-free error. Closes #9, confirmed with ASAN. Avoid using `parser->current` in the loop that creates new blocks, since `finalize` in `add_child` may have removed the current parser (if it contains only reference definitions). This isn't a great solution; in the long run we need to rewrite to make the logic clearer and to make it harder to make mistakes like this one. --- src/blocks.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 6e2f97a234..b5b1e3e008 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -527,6 +527,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) int first_nonspace; int indent; cmark_chunk input; + bool maybe_lazy; utf8proc_detab(parser->curline, buffer, bytes); @@ -646,7 +647,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) break_out_of_lists(parser, &container); } - // unless last matched container is code cmark_node, try new container starts: + maybe_lazy = parser->current->type == NODE_PARAGRAPH; + // try new container starts: while (container->type != NODE_CODE_BLOCK && container->type != NODE_HTML) { @@ -658,7 +660,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) blank = peek_at(&input, first_nonspace) == '\n'; if (indent >= CODE_INDENT) { - if (parser->current->type != NODE_PARAGRAPH && !blank) { + if (!maybe_lazy && !blank) { offset += CODE_INDENT; container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); container->as.code.fenced = false; @@ -773,6 +775,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // if it's a line container, it can't contain other containers break; } + maybe_lazy = false; } // what remains at offset is a text line. add the text to the -- cgit 0.0.5-2-1-g0f52 From 1533c8fbad3acc48e6a2f0a1e305aeb5932b3bbd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 20 Feb 2015 21:08:16 -0800 Subject: Cleaned up some comments. --- src/blocks.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index b5b1e3e008..fc9cbb43c1 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -43,7 +43,7 @@ static cmark_node* make_block(cmark_node_type tag, int start_line, int start_col return e; } -// Create a root document cmark_node. +// Create a root document node. static cmark_node* make_document() { cmark_node *e = make_block(NODE_DOCUMENT, 1, 1); @@ -144,7 +144,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) cmark_strbuf_truncate(ln, i); } -// Check to see if a cmark_node ends with a blank line, descending +// Check to see if a node ends with a blank line, descending // if needed into lists and sublists. static bool ends_with_blank_line(cmark_node* node) { @@ -288,14 +288,14 @@ finalize(cmark_parser *parser, cmark_node* b) return parent; } -// Add a cmark_node as child of another. Return pointer to child. +// Add a node as child of another. Return pointer to child. static cmark_node* add_child(cmark_parser *parser, cmark_node* parent, cmark_node_type block_type, int start_column) { assert(parent); - // if 'parent' isn't the kind of cmark_node that can accept this child, - // then back up til we hit a cmark_node that can. + // if 'parent' isn't the kind of node that can accept this child, + // then back up til we hit a node that can. while (!can_contain(parent->type, block_type)) { parent = finalize(parser, parent); } @@ -315,7 +315,7 @@ static cmark_node* add_child(cmark_parser *parser, cmark_node* parent, } -// Walk through cmark_node and all children, recursively, parsing +// Walk through node and all children, recursively, parsing // string content into inline content where appropriate. static void process_inlines(cmark_node* root, cmark_reference_map *refmap, int options) { @@ -544,8 +544,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) parser->line_number++; - // for each containing cmark_node, try to parse the associated line start. - // bail out on failure: container will point to the last matching cmark_node. + // for each containing node, try to parse the associated line start. + // bail out on failure: container will point to the last matching node. while (container->last_child && container->last_child->open) { container = container->last_child; @@ -635,7 +635,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } if (!all_matched) { - container = container->parent; // back up to last matching cmark_node + container = container->parent; // back up to last matching node break; } } -- cgit 0.0.5-2-1-g0f52 From 573a3dc076cfecb2337cca118bdbd7c4452b1ec6 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 21 Feb 2015 21:05:10 +0100 Subject: Add Makefile target to fuzz with AFL Also add a compact test case. As far as I understand, a good test case should exercise many code paths while being as small as possible. There's probably still room for improvement. The variable $AFL_PATH must point to the directory containing the AFL binaries. It can be set as an environment variable or passed to make on the command line. --- Makefile | 11 +++++++++++ test/afl_test_cases/test.md | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 test/afl_test_cases/test.md diff --git a/Makefile b/Makefile index e6a2314c40..7cf1cc895e 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,17 @@ prof: cmake .. -DCMAKE_BUILD_TYPE=Profile; \ make +afl: + @[ -n "$(AFL_PATH)" ] || { echo '$$AFL_PATH not set'; false; } + mkdir -p $(BUILDDIR) + cd $(BUILDDIR) && cmake .. -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-gcc + make + $(AFL_PATH)/afl-fuzz \ + -i test/afl_test_cases \ + -o test/afl_results \ + -m none \ + $(CMARK) + mingw: mkdir -p $(MINGW_BUILDDIR); \ cd $(MINGW_BUILDDIR); \ diff --git a/test/afl_test_cases/test.md b/test/afl_test_cases/test.md new file mode 100644 index 0000000000..27eee009c7 --- /dev/null +++ b/test/afl_test_cases/test.md @@ -0,0 +1,36 @@ +# H1 + +H2 +-- + +t ☺ +*b* **em** `c` +≥\&\ +\_e\_ + +4) I1 + +5) I2 + > [l](/u "t") + > + > - [f] + > - ![a](/u "t") + > + >> + >> + +~~~ l☺ +cb +~~~ + + c1 + c2 + +*** + +
                            +x +
                            + +[f]: /u "t" + -- cgit 0.0.5-2-1-g0f52 From 1dbbc4d3245d0494e0db4ae2cc3530ae08e4b8a4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Mar 2015 22:22:52 -0800 Subject: Updated spec in test. --- test/spec.txt | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 500f4eacd7..ac47b1a36c 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.17 -date: 2015-01-24 +version: 0.18 +date: 2015-03-03 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -3591,7 +3591,7 @@ of an [ordered list] is determined by the list number of its initial list item. The numbers of subsequent list items are disregarded. -A list is [loose](@loose) if it any of its constituent +A list is [loose](@loose) if any of its constituent list items are separated by blank lines, or if any of its constituent list items directly contain two block-level elements with a blank line between them. Otherwise a list is [tight](@tight). @@ -4581,12 +4581,14 @@ characters that is not preceded or followed by a `_` character. A [left-flanking delimiter run](@left-flanking-delimiter-run) is a [delimiter run] that is (a) not followed by [unicode whitespace], and (b) either not followed by a [punctuation character], or -preceded by [unicode whitespace] or a [punctuation character]. +preceded by [unicode whitespace] or a [punctuation character] or +the beginning of a line. A [right-flanking delimiter run](@right-flanking-delimiter-run) is a [delimiter run] that is (a) not preceded by [unicode whitespace], and (b) either not preceded by a [punctuation character], or -followed by [unicode whitespace] or a [punctuation character]. +followed by [unicode whitespace] or a [punctuation character] or +the end of a line. Here are some examples of delimiter runs. @@ -5654,15 +5656,15 @@ _a `_`_ . . -**a +**a . -

                            **ahttp://foo.bar?q=**

                            +

                            **ahttp://foo.bar/?q=**

                            . . -__a +__a . -

                            __ahttp://foo.bar?q=__

                            +

                            __ahttp://foo.bar/?q=__

                            . @@ -6025,9 +6027,9 @@ and autolinks over link grouping: . . -[foo +[foo . -

                            [foohttp://example.com?search=](uri)

                            +

                            [foohttp://example.com/?search=](uri)

                            . There are three kinds of [reference link](@reference-link)s: @@ -6165,11 +6167,11 @@ and autolinks over link grouping: . . -[foo +[foo [ref]: /uri . -

                            [foohttp://example.com?search=][ref]

                            +

                            [foohttp://example.com/?search=][ref]

                            . Matching is case-insensitive: @@ -6720,9 +6722,9 @@ Here are some valid autolinks: . . - + . -

                            http://foo.bar.baz?q=hello&id=22&boolean

                            +

                            http://foo.bar.baz/test?q=hello&id=22&boolean

                            . . -- cgit 0.0.5-2-1-g0f52 From a4f983182829eda9c0d4f8d1baad699aad6514f1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Mar 2015 22:32:47 -0800 Subject: Updated changelog. --- changelog.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/changelog.txt b/changelog.txt index 50f1c7d1a8..c5848905cc 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,39 @@ +[0.18] + + * Switch to 2-clause BSD license, with agreement of contributors. + * Added Profile build type, `make prof` target. + * Fixed autolink scanner to conform to the spec. Backslash escapes + not allowed in autolinks. + * Don't rely on strnlen being available (Nick Wellnhofer). + * Updated scanners for new whitespace definition. + * Added `CMARK_OPT_SMART` and `--smart` option, `smart.c`, `smart.h`. + * Added test for `--smart` option. + * Fixed segfault with --normalize (closes #7). + * Moved normalization step from XML renderer to `cmark_parser_finish`. + * Added options parameter to `cmark_parse_document`, `cmark_parse_file`. + * Fixed man renderer's escaping for unicode characters. + * Don't require python3 to make `cmark.3` man page. + * Use ASCII escapes for punctuation characters for portability. + * Made `options` an int rather than a long, for consistency. + * Packed `cmark_node` struct to fit into 128 bytes. + This gives a small performance boost and lowers memory usage. + * Repacked `delimiter` struct to avoid hole. + * Fixed use-after-free bug, which arose when a paragraph containing + only reference links and blank space was finalized (#9). + Avoid using `parser->current` in the loop that creates new + blocks, since `finalize` in `add_child` may have removed + the current parser (if it contains only reference definitions). + This isn't a great solution; in the long run we need to rewrite + to make the logic clearer and to make it harder to make + mistakes like this one. + * Added 'Asan' build type. `make asan` will link against ASan; the + resulting executable will do checks for memory access issues. + Thanks @JordanMilne for the suggestion. + * Add Makefile target to fuzz with AFL (Nick Wellnhofer) + The variable `$AFL_PATH` must point to the directory containing the AFL + binaries. It can be set as an environment variable or passed to make on + the command line. + [0.17] * Stripped out all JavaScript related code and documentation, moving -- cgit 0.0.5-2-1-g0f52 From 417241800a2e5ab6da97303f52bc09bee664a755 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Mar 2015 22:33:35 -0800 Subject: Updated version to 0.18. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index db04698f58..29749b2604 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 17) +set(PROJECT_VERSION_MINOR 18) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From 9a9b1760024caf43610aa838885f75c15ff19ccd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Mar 2015 22:35:03 -0800 Subject: astyle changes. --- src/inlines.c | 8 ++++---- src/man.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 9ed7d46887..e2641a75d3 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -461,21 +461,21 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } else if (closer->delim_char == '\'') { cmark_chunk_free(&closer->inl_text->as.literal); closer->inl_text->as.literal = - cmark_chunk_literal(RIGHTSINGLEQUOTE); + cmark_chunk_literal(RIGHTSINGLEQUOTE); if (opener != NULL && opener != start_delim) { cmark_chunk_free(&opener->inl_text->as.literal); opener->inl_text->as.literal = - cmark_chunk_literal(LEFTSINGLEQUOTE); + cmark_chunk_literal(LEFTSINGLEQUOTE); } closer = closer->next; } else if (closer->delim_char == '"') { cmark_chunk_free(&closer->inl_text->as.literal); closer->inl_text->as.literal = - cmark_chunk_literal(RIGHTDOUBLEQUOTE); + cmark_chunk_literal(RIGHTDOUBLEQUOTE); if (opener != NULL && opener != start_delim) { cmark_chunk_free(&opener->inl_text->as.literal); opener->inl_text->as.literal = - cmark_chunk_literal(LEFTDOUBLEQUOTE); + cmark_chunk_literal(LEFTDOUBLEQUOTE); } closer = closer->next; } diff --git a/src/man.c b/src/man.c index 27d308bf0e..27cd2e4296 100644 --- a/src/man.c +++ b/src/man.c @@ -200,7 +200,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: escape_man(man, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); break; case CMARK_NODE_LINEBREAK: -- cgit 0.0.5-2-1-g0f52 From fb68ad172015cce0e8fb6c5161297a3b79d35147 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 7 Mar 2015 21:49:15 -0800 Subject: Build static version of library in default build. The static library will be named (lib)cmark_static. Closes #11. --- src/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2179c084ea..d6b28c99ad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 2.8) set(LIBRARY "libcmark") +set(STATICLIBRARY "libcmark_static") set(HEADERS cmark.h parser.h @@ -79,11 +80,15 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") endif () add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES}) +add_library(${STATICLIBRARY} STATIC ${LIBRARY_SOURCES}) # Include minor version in soname as long as major version is 0. set_target_properties(${LIBRARY} PROPERTIES OUTPUT_NAME "cmark" SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} VERSION ${PROJECT_VERSION}) +set_target_properties(${STATICLIBRARY} PROPERTIES + OUTPUT_NAME "cmark_static" + VERSION ${PROJECT_VERSION}) set_property(TARGET ${LIBRARY} APPEND PROPERTY MACOSX_RPATH true) -- cgit 0.0.5-2-1-g0f52 From a06430102225c2c261f1bbb510cb9720b02d3a84 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 9 Mar 2015 21:24:37 -0700 Subject: cmark.h: Add argument to cmark_parser_new. This was a bug; the function does take an argument. Oddly, gcc and clang did not complain. Closes #12. --- man/man3/cmark.3 | 4 ++-- src/cmark.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index aa3ffd9c6e..111d3b8e31 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "February 16, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 09, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -413,7 +413,7 @@ cmark_parser_free(parser); .fi .PP -\fIcmark_parser *\f[] \fBcmark_parser_new\f[](\fI\f[]) +\fIcmark_parser *\f[] \fBcmark_parser_new\f[](\fIint options\f[]) .PP Creates a new parser object. diff --git a/src/cmark.h b/src/cmark.h index 3878355569..e29f28ac2e 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -431,7 +431,7 @@ cmark_consolidate_text_nodes(cmark_node *root); /** Creates a new parser object. */ CMARK_EXPORT -cmark_parser *cmark_parser_new(); +cmark_parser *cmark_parser_new(int options); /** Frees memory allocated for a parser object. */ -- cgit 0.0.5-2-1-g0f52 From caa81895c8aa8d5e5b6b2c2ecdb84fbad8797692 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 9 Mar 2015 21:39:07 -0700 Subject: Use libcmark.a for static library on *nix. Use cmark_static on Windows as before. See #11. --- src/CMakeLists.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d6b28c99ad..d515ff3eec 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -86,9 +86,16 @@ set_target_properties(${LIBRARY} PROPERTIES OUTPUT_NAME "cmark" SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} VERSION ${PROJECT_VERSION}) -set_target_properties(${STATICLIBRARY} PROPERTIES - OUTPUT_NAME "cmark_static" - VERSION ${PROJECT_VERSION}) + +if (MSVC) + set_target_properties(${STATICLIBRARY} PROPERTIES + OUTPUT_NAME "cmark_static" + VERSION ${PROJECT_VERSION}) +else() + set_target_properties(${STATICLIBRARY} PROPERTIES + OUTPUT_NAME "cmark" + VERSION ${PROJECT_VERSION}) +endif(MSVC) set_property(TARGET ${LIBRARY} APPEND PROPERTY MACOSX_RPATH true) -- cgit 0.0.5-2-1-g0f52 From b15b588af1a47851620465837f6996d0d3d0d8ee Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 9 Mar 2015 21:43:31 -0700 Subject: Version to 0.18.1. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29749b2604..375cc4ef30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 18) -set(PROJECT_VERSION_PATCH 0) +set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) add_subdirectory(src) -- cgit 0.0.5-2-1-g0f52 From 624245931f97a2442d2f9bb6b3fd2c6047bf69c1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 9 Mar 2015 21:46:04 -0700 Subject: Updated changelog. --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index c5848905cc..7328c99937 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +[0.18.1] + + * Build static version of library in default build (#11). + * `cmark.h`: Add missing argument to `cmark_parser_new` (#12). + [0.18] * Switch to 2-clause BSD license, with agreement of contributors. -- cgit 0.0.5-2-1-g0f52 From 4a3ed6a7ce035f1b0ad7c8130242d052dc5efcec Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 9 Mar 2015 22:47:35 -0700 Subject: Check for CMAKE_C_COMPILER (not CC_COMPILER) when setting C flags. --- api_test/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index e3e84f6ce8..74893883ed 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -20,6 +20,6 @@ if(MSVC) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /wd4800 /D_CRT_SECURE_NO_WARNINGS") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") -elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d515ff3eec..cf9e17eda2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -75,7 +75,7 @@ set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif () -- cgit 0.0.5-2-1-g0f52 From d348bf71f2139c0112db204acabe5fc3cf1c8173 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 11 Mar 2015 12:42:12 +0100 Subject: Update code examples in documentation Add new parser option argument. --- src/cmark.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index e29f28ac2e..ffaca686eb 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -412,11 +412,11 @@ cmark_consolidate_text_nodes(cmark_node *root); * * Simple interface: * - * cmark_node *document = cmark_parse_document("Hello *world*", 12); + * cmark_node *document = cmark_parse_document("Hello *world*", 12, 0); * * Streaming interface: * - * cmark_parser *parser = cmark_parser_new(); + * cmark_parser *parser = cmark_parser_new(0); * FILE *fp = fopen("myfile.md", "r"); * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { * cmark_parser_feed(parser, buffer, bytes); -- cgit 0.0.5-2-1-g0f52 From b4ed40eb4899afb59773ac1d3473f9603b3934a9 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 11 Mar 2015 19:18:18 +0100 Subject: Use CMARK_OPT_DEFAULT in code examples --- src/cmark.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index ffaca686eb..3c68ac6d0e 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -412,11 +412,12 @@ cmark_consolidate_text_nodes(cmark_node *root); * * Simple interface: * - * cmark_node *document = cmark_parse_document("Hello *world*", 12, 0); + * cmark_node *document = cmark_parse_document("Hello *world*", 12, + * CMARK_OPT_DEFAULT); * * Streaming interface: * - * cmark_parser *parser = cmark_parser_new(0); + * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); * FILE *fp = fopen("myfile.md", "r"); * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { * cmark_parser_feed(parser, buffer, bytes); -- cgit 0.0.5-2-1-g0f52 From 294880e0118e27c97f26beaaa81a79de23f80727 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Mar 2015 16:41:59 -0700 Subject: Added options parameter to cmark_markdown_to_html. --- api_test/cplusplus.cpp | 2 +- api_test/main.c | 9 ++++++--- man/man3/cmark.3 | 9 +++++---- src/cmark.c | 6 +++--- src/cmark.h | 2 +- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/api_test/cplusplus.cpp b/api_test/cplusplus.cpp index b6228a35f4..5e8f722a3b 100644 --- a/api_test/cplusplus.cpp +++ b/api_test/cplusplus.cpp @@ -8,7 +8,7 @@ void test_cplusplus(test_batch_runner *runner) { static const char md[] = "paragraph\n"; - char *html = cmark_markdown_to_html(md, sizeof(md) - 1); + char *html = cmark_markdown_to_html(md, sizeof(md) - 1, CMARK_OPT_DEFAULT); STR_EQ(runner, html, "

                            paragraph

                            \n", "libcmark works with C++"); free(html); } diff --git a/api_test/main.c b/api_test/main.c index d42cbaff8a..3390ac6e58 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -606,7 +606,8 @@ utf8(test_batch_runner *runner) // Test string containing null character static const char string_with_null[] = "((((\0))))"; char *html = cmark_markdown_to_html(string_with_null, - sizeof(string_with_null) - 1); + sizeof(string_with_null) - 1, + CMARK_OPT_DEFAULT); STR_EQ(runner, html, "

                            ((((" UTF8_REPL "))))

                            \n", "utf8 with U+0000"); free(html); @@ -656,7 +657,8 @@ test_continuation_byte(test_batch_runner *runner, const char *utf8) } strcat(expected, "))))

                            \n"); - char *html = cmark_markdown_to_html(buf, strlen(buf)); + char *html = cmark_markdown_to_html(buf, strlen(buf), + CMARK_OPT_DEFAULT); STR_EQ(runner, html, expected, "invalid utf8 continuation byte %d/%d", pos, len); free(html); @@ -667,7 +669,8 @@ static void test_md_to_html(test_batch_runner *runner, const char *markdown, const char *expected_html, const char *msg) { - char *html = cmark_markdown_to_html(markdown, strlen(markdown)); + char *html = cmark_markdown_to_html(markdown, strlen(markdown), + CMARK_OPT_DEFAULT); STR_EQ(runner, html, expected_html, msg); free(html); } diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 111d3b8e31..2a557749a6 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 09, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 15, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -10,7 +10,7 @@ DESCRIPTION Simple Interface .PP -\fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIint len\f[]) +\fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIint len\f[], \fIint options\f[]) .PP Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length @@ -391,7 +391,8 @@ Simple interface: .IP .nf \f[C] -cmark_node *document = cmark_parse_document("Hello *world*", 12); +cmark_node *document = cmark_parse_document("Hello *world*", 12, + CMARK_OPT_DEFAULT); \f[] .fi .PP @@ -399,7 +400,7 @@ Streaming interface: .IP .nf \f[C] -cmark_parser *parser = cmark_parser_new(); +cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); FILE *fp = fopen("myfile.md", "r"); while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { cmark_parser_feed(parser, buffer, bytes); diff --git a/src/cmark.c b/src/cmark.c index d6e9278d60..79ceabf587 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -9,14 +9,14 @@ const int cmark_version = CMARK_VERSION; const char cmark_version_string[] = CMARK_VERSION_STRING; -char *cmark_markdown_to_html(const char *text, int len) +char *cmark_markdown_to_html(const char *text, int len, int options) { cmark_node *doc; char *result; - doc = cmark_parse_document(text, len, CMARK_OPT_DEFAULT); + doc = cmark_parse_document(text, len, options); - result = cmark_render_html(doc, CMARK_OPT_DEFAULT); + result = cmark_render_html(doc, options); cmark_node_free(doc); return result; diff --git a/src/cmark.h b/src/cmark.h index 3c68ac6d0e..942c06c98c 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -24,7 +24,7 @@ extern "C" { * UTF-8-encoded string. */ CMARK_EXPORT -char *cmark_markdown_to_html(const char *text, int len); +char *cmark_markdown_to_html(const char *text, int len, int options); /** ## Node Structure */ -- cgit 0.0.5-2-1-g0f52 From 536754ea42d7025a2917a9407ad81a9aaaca7b92 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Mar 2015 17:16:05 -0700 Subject: Removed obsolete reference to CMARK_NODE_LINK_LABEL. --- src/cmark.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cmark.h b/src/cmark.h index 942c06c98c..12e1f14704 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -547,7 +547,6 @@ extern const char cmark_version_string[]; #define NODE_STRONG CMARK_NODE_STRONG #define NODE_LINK CMARK_NODE_LINK #define NODE_IMAGE CMARK_NODE_IMAGE -#define NODE_LINK_LABEL CMARK_NODE_LINK_LABEL #define BULLET_LIST CMARK_BULLET_LIST #define ORDERED_LIST CMARK_ORDERED_LIST #define PERIOD_DELIM CMARK_PERIOD_DELIM -- cgit 0.0.5-2-1-g0f52 From 39ae2629ff9f343669a24cb22890fb5b6645a4ab Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 16:34:19 -0700 Subject: leakcheck with all formats --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 7cf1cc895e..cedee8c981 100644 --- a/Makefile +++ b/Makefile @@ -113,9 +113,9 @@ $(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) - cat $< | valgrind --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) >/dev/null - cat $< | valgrind --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t man >/dev/null - cat $< | valgrind --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t xml >/dev/null + for format in html man xml commonmark; do \ + cat $< | valgrind --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t $$format >/dev/null; \ + done fuzztest: { for i in `seq 1 10`; do \ -- cgit 0.0.5-2-1-g0f52 From 3d46c2b594c1230cebb89c48c86b8a80aee43553 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 14:34:00 -0700 Subject: test/cmark.py: set default options for markdown_to_html. --- test/cmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cmark.py b/test/cmark.py index 253e3a8840..40e8c224f7 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -13,7 +13,7 @@ def pipe_through_prog(prog, text): def use_library(lib, text): textbytes = text.encode('utf-8') textlen = len(textbytes) - return [0, lib(textbytes, textlen).decode('utf-8'), ''] + return [0, lib(textbytes, textlen, 0).decode('utf-8'), ''] class CMark: def __init__(self, prog=None, library_dir=None): -- cgit 0.0.5-2-1-g0f52 From f4afff1ce6c59a9a6ad7a5d370aab902a8cdb4c9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 25 Feb 2015 22:43:31 -0800 Subject: Added commonmark renderer. This is still incomplete. (See TODOs in the source.) --- man/man3/cmark.3 | 8 +- src/CMakeLists.txt | 1 + src/cmark.h | 5 + src/commonmark.c | 336 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 8 +- 5 files changed, 356 insertions(+), 2 deletions(-) create mode 100644 src/commonmark.c diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 2a557749a6..9ebdaf9345 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 15, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 18, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -473,6 +473,12 @@ to add an appropriate header and footer. .PP Render a \f[I]node\f[] tree as a groff man page, without the header. +.PP +\fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[]) + +.PP +Render a \f[I]node\f[] tree as a commonmark document. + .PP .nf \fC diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cf9e17eda2..14ed306ba3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,6 +32,7 @@ set(LIBRARY_SOURCES man.c xml.c html.c + commonmark.c html_unescape.gperf houdini_href_e.c houdini_html_e.c diff --git a/src/cmark.h b/src/cmark.h index 12e1f14704..1c06125dbc 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -481,6 +481,11 @@ char *cmark_render_html(cmark_node *root, int options); CMARK_EXPORT char *cmark_render_man(cmark_node *root, int options); +/** Render a 'node' tree as a commonmark document. + */ +CMARK_EXPORT +char *cmark_render_commonmark(cmark_node *root, int options); + /** Default writer options. */ #define CMARK_OPT_DEFAULT 0 diff --git a/src/commonmark.c b/src/commonmark.c new file mode 100644 index 0000000000..6c0de8840a --- /dev/null +++ b/src/commonmark.c @@ -0,0 +1,336 @@ +#include +#include +#include +#include +#include + +#include "config.h" +#include "cmark.h" +#include "node.h" +#include "buffer.h" +#include "utf8.h" + +// Functions to convert cmark_nodes to commonmark strings. + +struct render_state { + cmark_strbuf* buffer; + cmark_strbuf* prefix; + int column; + int width; + int need_cr; + int last_breakable; + bool begin_line; +}; + +static inline void cr(struct render_state *state) +{ + if (state->need_cr < 1) { + state->need_cr = 1; + } +} + +static inline void blankline(struct render_state *state) +{ + if (state->need_cr < 2) { + state->need_cr = 2; + } +} + +static inline bool needs_escaping(int32_t c, unsigned char d) +{ + // TODO escape potential list markers at beginning of line + // (add param) + return (c == '*' || c == '_' || c == '[' || c == ']' || + c == '<' || c == '>' || c == '\\' || + (c == '&' && isalpha(d)) || + (c == '!' && d == '[')); +} + +static inline void out(struct render_state *state, + cmark_chunk str, + bool wrap, + bool escape) +{ + unsigned char* source = str.data; + int length = str.len; + unsigned char nextc; + int32_t c; + int i = 0; + int len; + cmark_chunk remainder = cmark_chunk_literal(""); + int k = state->buffer->size - 1; + + while (state->need_cr) { + if (k < 0 || state->buffer->ptr[k] == '\n') { + k -= 1; + } else { + cmark_strbuf_putc(state->buffer, '\n'); + if (state->need_cr > 1) { + cmark_strbuf_put(state->buffer, state->prefix->ptr, + state->prefix->size); + } + } + state->column = 0; + state->begin_line = true; + state->need_cr -= 1; + } + + while (i < length) { + if (state->begin_line) { + cmark_strbuf_put(state->buffer, state->prefix->ptr, + state->prefix->size); + // note: this assumes prefix is ascii: + state->column = state->prefix->size; + } + + len = utf8proc_iterate(source + i, length - i, &c); + nextc = source[i + len]; + if (c == 32 && wrap) { + if (!state->begin_line) { + cmark_strbuf_putc(state->buffer, ' '); + state->column += 1; + state->begin_line = false; + state->last_breakable = state->buffer->size - + 1; + // skip following spaces + while (source[i + 1] == ' ') { + i++; + } + } + + } else if (c == 10) { + cmark_strbuf_putc(state->buffer, '\n'); + state->column = 0; + state->begin_line = true; + state->last_breakable = 0; + } else if (escape && needs_escaping(c, nextc)) { + cmark_strbuf_putc(state->buffer, '\\'); + utf8proc_encode_char(c, state->buffer); + state->column += 2; + state->begin_line = false; + } else { + utf8proc_encode_char(c, state->buffer); + state->column += 1; + state->begin_line = false; + } + + // If adding the character went beyond width, look for an + // earlier place where the line could be broken: + if (state->width > 0 && + state->column > state->width && + !state->begin_line && + state->last_breakable > 0) { + + // copy from last_breakable to remainder + cmark_chunk_set_cstr(&remainder, (char *) state->buffer->ptr + state->last_breakable + 1); + // truncate at last_breakable + cmark_strbuf_truncate(state->buffer, state->last_breakable); + // add newline, prefix, and remainder + cmark_strbuf_putc(state->buffer, '\n'); + cmark_strbuf_put(state->buffer, state->prefix->ptr, + state->prefix->size); + cmark_strbuf_put(state->buffer, remainder.data, remainder.len); + state->column = state->prefix->size + remainder.len; + cmark_chunk_free(&remainder); + state->last_breakable = 0; + state->begin_line = false; + } + + i += len; + } +} + +static void lit(struct render_state *state, char *s, bool wrap) +{ + cmark_chunk str = cmark_chunk_literal(s); + out(state, str, wrap, false); +} + + +static int +S_render_node(cmark_node *node, cmark_event_type ev_type, + struct render_state *state) +{ + cmark_node *tmp; + int list_number; + bool entering = (ev_type == CMARK_EVENT_ENTER); + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + if (!entering) { + cmark_strbuf_putc(state->buffer, '\n'); + } + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + lit(state, "> ", false); + cmark_strbuf_puts(state->prefix, "> "); + } else { + cmark_strbuf_truncate(state->prefix, state->prefix->size - 2); + blankline(state); + } + break; + + case CMARK_NODE_LIST: + break; + + case CMARK_NODE_ITEM: + if (entering) { + if (cmark_node_get_list_type(node->parent) == + CMARK_BULLET_LIST) { + lit(state, "- ", false); + cmark_strbuf_puts(state->prefix, " "); + } else { + list_number = cmark_node_get_list_start(node->parent); + tmp = node; + while (tmp->prev) { + tmp = tmp->prev; + list_number += 1; + } + lit(state, "1. ", false); + cmark_strbuf_puts(state->prefix, " "); + } + } else { + cmark_strbuf_truncate(state->prefix, state->prefix->size - + (cmark_node_get_list_type(node->parent) == + CMARK_BULLET_LIST ? 2 : 4)); + cr(state); + } + break; + + case CMARK_NODE_HEADER: + if (entering) { + for (int i = cmark_node_get_header_level(node); i > 0; i--) { + lit(state, "#", false); + } + lit(state, " ", false); + // TODO set a "nowrap" variable in state, and refer to this in out() + } else { + blankline(state); + } + break; + + case CMARK_NODE_CODE_BLOCK: + blankline(state); + // TODO variable number of ticks + lit(state, "```", false); + cr(state); + // TODO info string + // TODO use indented form if no info string? + out(state, node->as.code.literal, false, true); + cr(state); + lit(state, "```", false); + blankline(state); + break; + + case CMARK_NODE_HTML: + blankline(state); + out(state, node->as.code.literal, false, false); + blankline(state); + break; + + case CMARK_NODE_HRULE: + blankline(state); + lit(state, "-----", false); + blankline(state); + break; + + case CMARK_NODE_PARAGRAPH: + if (!entering) { + blankline(state); + } + break; + + case CMARK_NODE_TEXT: + out(state, node->as.literal, true, true); + break; + + case CMARK_NODE_LINEBREAK: + lit(state, "\\", false); + cr(state); + break; + + case CMARK_NODE_SOFTBREAK: + lit(state, " ", true); + break; + + case CMARK_NODE_CODE: + // TODO variable number of ticks + lit(state, "`", false); + out(state, node->as.literal, true, false); + lit(state, "`", false); + break; + + case CMARK_NODE_INLINE_HTML: + out(state, node->as.literal, true, false); + break; + + case CMARK_NODE_STRONG: + if (entering) { + lit(state, "**", false); + } else { + lit(state, "**", false); + } + break; + + case CMARK_NODE_EMPH: + if (entering) { + lit(state, "*", false); + } else { + lit(state, "*", false); + } + break; + + case CMARK_NODE_LINK: + if (entering) { + lit(state, "[", false); + } else { + lit(state, "](", false); + out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); + // TODO title + lit(state, ")", false); + } + break; + + case CMARK_NODE_IMAGE: + if (entering) { + lit(state, "![", false); + } else { + lit(state, "](", false); + out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); + // TODO title + lit(state, ")", false); + } + break; + + default: + assert(false); + break; + } + + return 1; +} + +char *cmark_render_commonmark(cmark_node *root, int options) +{ + char *result; + cmark_strbuf commonmark = GH_BUF_INIT; + cmark_strbuf prefix = GH_BUF_INIT; + struct render_state state = { &commonmark, &prefix, 0, 65, 0, 0, true }; + cmark_node *cur; + cmark_event_type ev_type; + cmark_iter *iter = cmark_iter_new(root); + + if (options == 0) options = 0; // avoid warning about unused parameters + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + S_render_node(cur, ev_type, &state); + } + result = (char *)cmark_strbuf_detach(&commonmark); + + cmark_strbuf_free(&prefix); + cmark_iter_free(iter); + return result; +} diff --git a/src/main.c b/src/main.c index 9a8fd98a73..c9b9013361 100644 --- a/src/main.c +++ b/src/main.c @@ -17,13 +17,14 @@ typedef enum { FORMAT_HTML, FORMAT_XML, FORMAT_MAN, + FORMAT_COMMONMARK } writer_format; void print_usage() { printf("Usage: cmark [FILE*]\n"); printf("Options:\n"); - printf(" --to, -t FORMAT Specify output format (html, xml, man)\n"); + printf(" --to, -t FORMAT Specify output format (html, xml, man, commonmark)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); printf(" --smart Use smart punctuation\n"); @@ -46,6 +47,9 @@ static void print_document(cmark_node *document, writer_format writer, case FORMAT_MAN: result = cmark_render_man(document, options); break; + case FORMAT_COMMONMARK: + result = cmark_render_commonmark(document, options); + break; default: fprintf(stderr, "Unknown format %d\n", writer); exit(1); @@ -98,6 +102,8 @@ int main(int argc, char *argv[]) writer = FORMAT_HTML; } else if (strcmp(argv[i], "xml") == 0) { writer = FORMAT_XML; + } else if (strcmp(argv[i], "commonmark") == 0) { + writer = FORMAT_COMMONMARK; } else { fprintf(stderr, "Unknown format %s\n", argv[i]); -- cgit 0.0.5-2-1-g0f52 From 8a1a7c63f944370a6f5ee1db3dd53a8db44ddcdf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 17:35:03 -0700 Subject: Updated output formats in man page. Closes #16. --- man/man1/cmark.1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 80095fdf77..3db18da898 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -21,7 +21,8 @@ concatenated before parsing. .SH "OPTIONS" .TP 12n \-\-to, \-t \f[I]FORMAT\f[] -Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]ast\f[]). +Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]xml\f[], +\f[C]commonmark\f[]). .TP 12n \-\-sourcepos Include source position attribute. -- cgit 0.0.5-2-1-g0f52 From 0bf07dda1cbbdaf0ae7696be1f0c37169689539f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 17:36:02 -0700 Subject: Update README on output formats. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3b3545c594..870e3b1228 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,10 @@ For more information, see . This repository contains the C reference implementation. It provides a shared library (`libcmark`) with functions for parsing CommonMark documents to an abstract syntax tree (AST), manipulating -the AST, and rendering the document to HTML or to an XML -representation of the AST. It also provides a command-line program -(`cmark`) for parsing and rendering CommonMark documents. +the AST, and rendering the document to HTML, groff man, +CommonMark, or an XML representation of the AST. It also provides a +command-line program (`cmark`) for parsing and rendering CommonMark +documents. The library and program are written in standard C99 and have no library dependencies. The parser is very fast, on par with -- cgit 0.0.5-2-1-g0f52 From 4b21fe65b6f774193ce25b6f0ebee5cf88b88200 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 18:16:50 -0700 Subject: Commonmark renderer: improved escaping. --- src/commonmark.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 6c0de8840a..3ab9988904 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -36,14 +36,17 @@ static inline void blankline(struct render_state *state) } } -static inline bool needs_escaping(int32_t c, unsigned char d) +static inline bool +needs_escaping(int32_t c, unsigned char next_c, struct render_state *state) { - // TODO escape potential list markers at beginning of line - // (add param) return (c == '*' || c == '_' || c == '[' || c == ']' || c == '<' || c == '>' || c == '\\' || - (c == '&' && isalpha(d)) || - (c == '!' && d == '[')); + (c == '&' && isalpha(next_c)) || + (c == '!' && next_c == '[') || + (state->begin_line && + (c == '-' || c == '+' || c == '#' || c == '=')) || + ((c == '.' || c == ')') && + isdigit(state->buffer->ptr[state->buffer->size - 1]))); } static inline void out(struct render_state *state, @@ -103,7 +106,8 @@ static inline void out(struct render_state *state, state->column = 0; state->begin_line = true; state->last_breakable = 0; - } else if (escape && needs_escaping(c, nextc)) { + } else if (escape && + needs_escaping(c, nextc, state)) { cmark_strbuf_putc(state->buffer, '\\'); utf8proc_encode_char(c, state->buffer); state->column += 2; -- cgit 0.0.5-2-1-g0f52 From 393c9507b033e3115c57887e8863f40d45f1a999 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 20:11:38 -0700 Subject: CommonMark renderer: don't wrap headers. --- src/commonmark.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 3ab9988904..73c3d2ddeb 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -20,6 +20,7 @@ struct render_state { int need_cr; int last_breakable; bool begin_line; + bool no_wrap; }; static inline void cr(struct render_state *state) @@ -63,6 +64,8 @@ static inline void out(struct render_state *state, cmark_chunk remainder = cmark_chunk_literal(""); int k = state->buffer->size - 1; + wrap = wrap && !state->no_wrap; + while (state->need_cr) { if (k < 0 || state->buffer->ptr[k] == '\n') { k -= 1; @@ -209,8 +212,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "#", false); } lit(state, " ", false); - // TODO set a "nowrap" variable in state, and refer to this in out() + state->no_wrap = true; } else { + state->no_wrap = false; blankline(state); } break; @@ -321,7 +325,8 @@ char *cmark_render_commonmark(cmark_node *root, int options) char *result; cmark_strbuf commonmark = GH_BUF_INIT; cmark_strbuf prefix = GH_BUF_INIT; - struct render_state state = { &commonmark, &prefix, 0, 65, 0, 0, true }; + struct render_state state = + { &commonmark, &prefix, 0, 65, 0, 0, true, false }; cmark_node *cur; cmark_event_type ev_type; cmark_iter *iter = cmark_iter_new(root); -- cgit 0.0.5-2-1-g0f52 From 6c0da96b490f0889282d20ce5c30ec18e351f1c1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 20:40:41 -0700 Subject: CommonMark renderer: improved code blocks. * Use indented code block if no info. * Print info string on fenced blocks. --- src/commonmark.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 73c3d2ddeb..c51be5cd24 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -161,6 +161,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_node *tmp; int list_number; bool entering = (ev_type == CMARK_EVENT_ENTER); + const char *info; switch (node->type) { case CMARK_NODE_DOCUMENT: @@ -221,14 +222,23 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE_BLOCK: blankline(state); - // TODO variable number of ticks - lit(state, "```", false); - cr(state); - // TODO info string - // TODO use indented form if no info string? - out(state, node->as.code.literal, false, true); - cr(state); - lit(state, "```", false); + // TODO variable number of ticks, depending on contents + info = cmark_node_get_fence_info(node); + if (info == NULL || strlen(info) == 0) { + // use indented form if no info + lit(state, " ", false); + cmark_strbuf_puts(state->prefix, " "); + out(state, node->as.code.literal, false, false); + cmark_strbuf_truncate(state->prefix, + state->prefix->size - 4); + } else { + lit(state, "``` ", false); + out(state, cmark_chunk_literal(info), false, false); + cr(state); + out(state, node->as.code.literal, false, true); + cr(state); + lit(state, "```", false); + } blankline(state); break; -- cgit 0.0.5-2-1-g0f52 From 57a601a20071d854e2df19f2fc7ee05422a8e59a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 20:46:05 -0700 Subject: CommonMark writer: support title on link, image. --- src/commonmark.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index c51be5cd24..bb245153ae 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -162,6 +162,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, int list_number; bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info; + const char *title; switch (node->type) { case CMARK_NODE_DOCUMENT: @@ -306,7 +307,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } else { lit(state, "](", false); out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); - // TODO title + title = cmark_node_get_title(node); + if (title && strlen(title) > 0) { + lit(state, " \"", true); + out(state, cmark_chunk_literal(title), false, true); + lit(state, "\"", false); + } lit(state, ")", false); } break; @@ -317,7 +323,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } else { lit(state, "](", false); out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); - // TODO title + title = cmark_node_get_title(node); + if (title && strlen(title) > 0) { + lit(state, " \"", true); + out(state, cmark_chunk_literal(title), false, true); + lit(state, "\"", false); + } lit(state, ")", false); } break; -- cgit 0.0.5-2-1-g0f52 From b31224fbe2072b8e2328c9607e8587e79a7f307d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 21:01:10 -0700 Subject: CommonMark renderer: use right number of backticks in quoting code. We ensure that we use one more backtick then the longest backtick string in the code. --- src/commonmark.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index bb245153ae..654afc3696 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -153,6 +153,25 @@ static void lit(struct render_state *state, char *s, bool wrap) out(state, str, wrap, false); } +static int +longest_backtick_sequence(cmark_chunk *code) +{ + int longest = 0; + int current = 0; + int i = 0; + while (i < code->len) { + if (code->data[i] == '`') { + current++; + } else { + if (current > longest) { + longest = current; + } + current = 0; + } + i++; + } + return longest; +} static int S_render_node(cmark_node *node, cmark_event_type ev_type, @@ -160,6 +179,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, { cmark_node *tmp; int list_number; + int numticks; + int i; bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info; const char *title; @@ -223,7 +244,6 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE_BLOCK: blankline(state); - // TODO variable number of ticks, depending on contents info = cmark_node_get_fence_info(node); if (info == NULL || strlen(info) == 0) { // use indented form if no info @@ -233,12 +253,22 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_truncate(state->prefix, state->prefix->size - 4); } else { - lit(state, "``` ", false); + numticks = longest_backtick_sequence(&node->as.code.literal) + + 1; + if (numticks < 3) { + numticks = 3; + } + for (i = 0; i < numticks; i++) { + lit(state, "`", false); + } + lit(state, " ", false); out(state, cmark_chunk_literal(info), false, false); cr(state); out(state, node->as.code.literal, false, true); cr(state); - lit(state, "```", false); + for (i = 0; i < numticks; i++) { + lit(state, "`", false); + } } blankline(state); break; @@ -275,10 +305,20 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_CODE: - // TODO variable number of ticks - lit(state, "`", false); + numticks = longest_backtick_sequence(&node->as.literal) + 1; + for (i = 0; i < numticks; i++) { + lit(state, "`", false); + } + if (numticks > 1) { + lit(state, " ", false); + } out(state, node->as.literal, true, false); - lit(state, "`", false); + if (numticks > 1) { + lit(state, " ", false); + } + for (i = 0; i < numticks; i++) { + lit(state, "`", false); + } break; case CMARK_NODE_INLINE_HTML: @@ -341,6 +381,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, return 1; } +// TODO parameter for wrap width or 0 for no wrap char *cmark_render_commonmark(cmark_node *root, int options) { char *result; -- cgit 0.0.5-2-1-g0f52 From 573dd81575b821661fb4aaa6f8c68b513f889f07 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Mar 2015 21:13:36 -0700 Subject: CommonMark renderer: Added 'width' parameter. This controls column width for hard wrapping. By default it is 0, which means that no wrapping will be done. Added a width parameter in `cmark_render_commonmark`. --- man/man1/cmark.1 | 5 +++++ man/man3/cmark.3 | 4 ++-- src/cmark.h | 2 +- src/commonmark.c | 5 ++--- src/main.c | 25 ++++++++++++++++++++++--- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 3db18da898..6635be513d 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -24,6 +24,11 @@ concatenated before parsing. Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]xml\f[], \f[C]commonmark\f[]). .TP 12n +\-\-width \f[I]WIDTH\f[] +Specify a column width to which to wrap the output. For no wrapping, use +the value 0 (the default). This option currently only affects the +commonmark renderer. +.TP 12n \-\-sourcepos Include source position attribute. .TP 12n diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 9ebdaf9345..5b68ecb40e 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 18, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 21, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -474,7 +474,7 @@ to add an appropriate header and footer. Render a \f[I]node\f[] tree as a groff man page, without the header. .PP -\fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[]) +\fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP Render a \f[I]node\f[] tree as a commonmark document. diff --git a/src/cmark.h b/src/cmark.h index 1c06125dbc..84c6f76764 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -484,7 +484,7 @@ char *cmark_render_man(cmark_node *root, int options); /** Render a 'node' tree as a commonmark document. */ CMARK_EXPORT -char *cmark_render_commonmark(cmark_node *root, int options); +char *cmark_render_commonmark(cmark_node *root, int options, int width); /** Default writer options. */ diff --git a/src/commonmark.c b/src/commonmark.c index 654afc3696..98fef5ee4f 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -381,14 +381,13 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, return 1; } -// TODO parameter for wrap width or 0 for no wrap -char *cmark_render_commonmark(cmark_node *root, int options) +char *cmark_render_commonmark(cmark_node *root, int options, int width) { char *result; cmark_strbuf commonmark = GH_BUF_INIT; cmark_strbuf prefix = GH_BUF_INIT; struct render_state state = - { &commonmark, &prefix, 0, 65, 0, 0, true, false }; + { &commonmark, &prefix, 0, width, 0, 0, true, false }; cmark_node *cur; cmark_event_type ev_type; cmark_iter *iter = cmark_iter_new(root); diff --git a/src/main.c b/src/main.c index c9b9013361..380c488552 100644 --- a/src/main.c +++ b/src/main.c @@ -25,6 +25,7 @@ void print_usage() printf("Usage: cmark [FILE*]\n"); printf("Options:\n"); printf(" --to, -t FORMAT Specify output format (html, xml, man, commonmark)\n"); + printf(" --width WIDTH Specify wrap width (default 0 = nowrap)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); printf(" --smart Use smart punctuation\n"); @@ -34,9 +35,10 @@ void print_usage() } static void print_document(cmark_node *document, writer_format writer, - int options) + int options, int width) { char *result; + switch (writer) { case FORMAT_HTML: result = cmark_render_html(document, options); @@ -48,7 +50,7 @@ static void print_document(cmark_node *document, writer_format writer, result = cmark_render_man(document, options); break; case FORMAT_COMMONMARK: - result = cmark_render_commonmark(document, options); + result = cmark_render_commonmark(document, options, width); break; default: fprintf(stderr, "Unknown format %d\n", writer); @@ -66,6 +68,8 @@ int main(int argc, char *argv[]) cmark_parser *parser; size_t bytes; cmark_node *document; + int width; + char *unparsed; writer_format writer = FORMAT_HTML; int options = CMARK_OPT_DEFAULT; @@ -92,6 +96,21 @@ int main(int argc, char *argv[]) (strcmp(argv[i], "-h") == 0)) { print_usage(); exit(0); + } else if (strcmp(argv[i], "--width") == 0) { + i += 1; + if (i < argc) { + width = (int)strtol(argv[i], &unparsed, 10); + if (unparsed && strlen(unparsed) > 0) { + fprintf(stderr, + "failed parsing width '%s' at '%s'\n", + argv[i], unparsed); + exit(1); + } + } else { + fprintf(stderr, + "--width requires an argument\n"); + exit(1); + } } else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "--to") == 0)) { i += 1; @@ -159,7 +178,7 @@ int main(int argc, char *argv[]) cmark_parser_free(parser); start_timer(); - print_document(document, writer, options); + print_document(document, writer, options, width); end_timer("print_document"); start_timer(); -- cgit 0.0.5-2-1-g0f52 From ba58d983c6c5e9be72c51210e5ae1aad00f229bb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 22 Mar 2015 14:02:11 -0700 Subject: Initialize width. --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 380c488552..9666747977 100644 --- a/src/main.c +++ b/src/main.c @@ -68,7 +68,7 @@ int main(int argc, char *argv[]) cmark_parser *parser; size_t bytes; cmark_node *document; - int width; + int width = 0; char *unparsed; writer_format writer = FORMAT_HTML; int options = CMARK_OPT_DEFAULT; -- cgit 0.0.5-2-1-g0f52 From 050fb343307b8fe40e3f7541093b75eb276c547a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 23 Mar 2015 13:22:08 -0700 Subject: Made CommonMark renderer sensitive to CMARK_OPT_HARDBREAKS. Note that width is automatically set to 0 if CMARK_OPT_HARDBREAKS is specified. --- src/commonmark.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 98fef5ee4f..d11c4490db 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -13,6 +13,7 @@ // Functions to convert cmark_nodes to commonmark strings. struct render_state { + int options; cmark_strbuf* buffer; cmark_strbuf* prefix; int column; @@ -296,7 +297,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_LINEBREAK: - lit(state, "\\", false); + if (!(CMARK_OPT_HARDBREAKS & state->options)) { + lit(state, "\\", false); + } cr(state); break; @@ -386,14 +389,15 @@ char *cmark_render_commonmark(cmark_node *root, int options, int width) char *result; cmark_strbuf commonmark = GH_BUF_INIT; cmark_strbuf prefix = GH_BUF_INIT; + if (CMARK_OPT_HARDBREAKS & options) { + width = 0; + } struct render_state state = - { &commonmark, &prefix, 0, width, 0, 0, true, false }; + { options, &commonmark, &prefix, 0, width, 0, 0, true, false }; cmark_node *cur; cmark_event_type ev_type; cmark_iter *iter = cmark_iter_new(root); - if (options == 0) options = 0; // avoid warning about unused parameters - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); S_render_node(cur, ev_type, &state); -- cgit 0.0.5-2-1-g0f52 From 756b95d184103857b5196063ef310633cb8dba5b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 23 Mar 2015 15:33:42 -0700 Subject: Added TODO on tight lists. --- src/commonmark.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/commonmark.c b/src/commonmark.c index d11c4490db..77fc3953d9 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -207,6 +207,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_ITEM: + // TODO implement tight lists if (entering) { if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { -- cgit 0.0.5-2-1-g0f52 From f74d5dee1615e4d5ed8763fae40ffe6102c61a2c Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 25 Mar 2015 15:33:07 +0100 Subject: Warn about buggy re2c versions --- Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Makefile b/Makefile index cedee8c981..9b6b78e81c 100644 --- a/Makefile +++ b/Makefile @@ -100,6 +100,13 @@ $(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt # We include scanners.c in the repository, so this shouldn't # normally need to be generated. $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re + @case "$$(re2c -v)" in \ + *\ 0.13.7*|*\ 0.14*) \ + echo $$(re2c -v) is known to produce buggy code.; \ + echo Try version 0.13.6 or below.; \ + false; \ + ;; \ + esac re2c --case-insensitive -b -i --no-generation-date -o $@ $< update-spec: -- cgit 0.0.5-2-1-g0f52 From 77ea10290e75313c5faf61a70cdcb1dbc5e51813 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 26 Mar 2015 13:15:05 -0400 Subject: commonmark renderer: proper numbering for ordered lists. --- src/commonmark.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 77fc3953d9..c3d556c96e 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -180,11 +180,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, { cmark_node *tmp; int list_number; + cmark_delim_type list_delim; int numticks; int i; bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info; const char *title; + char listmarker[64]; + int marker_width; switch (node->type) { case CMARK_NODE_DOCUMENT: @@ -208,25 +211,41 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_ITEM: // TODO implement tight lists + if (cmark_node_get_list_type(node->parent) == + CMARK_BULLET_LIST) { + marker_width = 2; + } else { + list_number = cmark_node_get_list_start(node->parent); + list_delim = cmark_node_get_list_delim(node->parent); + tmp = node; + while (tmp->prev) { + tmp = tmp->prev; + list_number += 1; + } + // we ensure a width of at least 4 so + // we get nice transition from single digits + // to double + snprintf(listmarker, 63, "%d%s%s", list_number, + list_delim == CMARK_PAREN_DELIM ? + ")" : ".", + list_number < 10 ? " " : " "); + marker_width = strlen(listmarker); + } if (entering) { if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { lit(state, "- ", false); cmark_strbuf_puts(state->prefix, " "); } else { - list_number = cmark_node_get_list_start(node->parent); - tmp = node; - while (tmp->prev) { - tmp = tmp->prev; - list_number += 1; + lit(state, listmarker, false); + for (i=marker_width; i--;) { + cmark_strbuf_putc(state->prefix, ' '); } - lit(state, "1. ", false); - cmark_strbuf_puts(state->prefix, " "); } } else { - cmark_strbuf_truncate(state->prefix, state->prefix->size - - (cmark_node_get_list_type(node->parent) == - CMARK_BULLET_LIST ? 2 : 4)); + cmark_strbuf_truncate(state->prefix, + state->prefix->size - + marker_width); cr(state); } break; -- cgit 0.0.5-2-1-g0f52 From fcc29754916a53078260dd95055f4e1dda6a3395 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 26 Mar 2015 14:13:32 -0400 Subject: commonmark renderer: handle tight/loose list distinction. --- src/commonmark.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index c3d556c96e..af153713c5 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -22,6 +22,7 @@ struct render_state { int last_breakable; bool begin_line; bool no_wrap; + bool in_tight_list_item; }; static inline void cr(struct render_state *state) @@ -67,6 +68,9 @@ static inline void out(struct render_state *state, wrap = wrap && !state->no_wrap; + if (state->in_tight_list_item && state->need_cr > 1) { + state->need_cr = 1; + } while (state->need_cr) { if (k < 0 || state->buffer->ptr[k] == '\n') { k -= 1; @@ -189,6 +193,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, char listmarker[64]; int marker_width; + state->in_tight_list_item = + node->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(node->parent); + switch (node->type) { case CMARK_NODE_DOCUMENT: if (!entering) { @@ -201,7 +209,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "> ", false); cmark_strbuf_puts(state->prefix, "> "); } else { - cmark_strbuf_truncate(state->prefix, state->prefix->size - 2); + cmark_strbuf_truncate(state->prefix, + state->prefix->size - 2); blankline(state); } break; @@ -210,7 +219,6 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_ITEM: - // TODO implement tight lists if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { marker_width = 2; @@ -413,7 +421,8 @@ char *cmark_render_commonmark(cmark_node *root, int options, int width) width = 0; } struct render_state state = - { options, &commonmark, &prefix, 0, width, 0, 0, true, false }; + { options, &commonmark, &prefix, 0, width, + 0, 0, true, false, false}; cmark_node *cur; cmark_event_type ev_type; cmark_iter *iter = cmark_iter_new(root); -- cgit 0.0.5-2-1-g0f52 From 30d84a8b75ed443d55f18d4f6b2982c5440b2b27 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 26 Mar 2015 14:39:37 -0400 Subject: Fixed HTML blocks. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index af153713c5..b713303b8f 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -304,7 +304,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_HTML: blankline(state); - out(state, node->as.code.literal, false, false); + out(state, node->as.literal, false, false); blankline(state); break; -- cgit 0.0.5-2-1-g0f52 From a2a30c2d7a4aec776604e8652e0089171f1fde3f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 26 Mar 2015 15:39:42 -0400 Subject: Added shell script for round-trip spec test. --- test/roundtrip.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100755 test/roundtrip.sh diff --git a/test/roundtrip.sh b/test/roundtrip.sh new file mode 100755 index 0000000000..a7bbbf6ea1 --- /dev/null +++ b/test/roundtrip.sh @@ -0,0 +1,2 @@ +#!/bin/sh +./cmark -t commonmark | ./cmark -- cgit 0.0.5-2-1-g0f52 From a32b453520b671b43b1ace492ad5f37270b0dfcd Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 27 Mar 2015 17:15:52 +0100 Subject: Update list of buggy re2c versions re2c 0.14.2 fixed the issue we were hitting. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9b6b78e81c..1ece8f7a6f 100644 --- a/Makefile +++ b/Makefile @@ -101,9 +101,9 @@ $(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt # normally need to be generated. $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re @case "$$(re2c -v)" in \ - *\ 0.13.7*|*\ 0.14*) \ - echo $$(re2c -v) is known to produce buggy code.; \ - echo Try version 0.13.6 or below.; \ + *\ 0.13.7*|*\ 0.14|*\ 0.14.1) \ + echo "re2c versions 0.13.7 through 0.14.1 are known to produce buggy code."; \ + echo "Try a version >= 0.14.2 or <= 0.13.6."; \ false; \ ;; \ esac -- cgit 0.0.5-2-1-g0f52 From b77c79c0183a378a736489743639ef3331e711c7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 27 Mar 2015 13:59:14 -0700 Subject: Removed an unnecessary check. By the time we check for a list start, we've already checked for an HRULE, so we don't need to repeat that check here. Thanks to Robin Stocker for pointing out a similar redundancy in commonmark.js. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index fc9cbb43c1..a15f819ea7 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -348,7 +348,7 @@ static int parse_list_marker(cmark_chunk *input, int pos, cmark_list **dataptr) startpos = pos; c = peek_at(input, pos); - if ((c == '*' || c == '-' || c == '+') && !scan_hrule(input, pos)) { + if (c == '*' || c == '-' || c == '+') { pos++; if (!cmark_isspace(peek_at(input, pos))) { return 0; -- cgit 0.0.5-2-1-g0f52 From c8de565f118fa194236230a432ea4bc29292daba Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 27 Mar 2015 22:21:27 -0700 Subject: Added TODO comment to commonmark renderer. --- src/commonmark.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index b713303b8f..fa5dd965e0 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -376,6 +376,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { lit(state, "[", false); } else { + // TODO - backslash-escape " and \ inside url, title + // for both links and images lit(state, "](", false); out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); title = cmark_node_get_title(node); -- cgit 0.0.5-2-1-g0f52 From ea888d7291523b8e207ab32b66374fa043384e65 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 27 Mar 2015 22:31:44 -0700 Subject: More TODOs in commonmark renderer. --- src/commonmark.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index fa5dd965e0..9606fbe9cd 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -240,6 +240,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, marker_width = strlen(listmarker); } if (entering) { + // TODO change bullet list marker to avoid + // interpretation as setext headers? if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { lit(state, "- ", false); @@ -259,6 +261,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_HEADER: + // TODO escape literal ##s at the end of header conetnt if (entering) { for (int i = cmark_node_get_header_level(node); i > 0; i--) { lit(state, "#", false); @@ -376,6 +379,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { lit(state, "[", false); } else { + // TODO - emit autolink when url matches link text // TODO - backslash-escape " and \ inside url, title // for both links and images lit(state, "](", false); -- cgit 0.0.5-2-1-g0f52 From dfe48b48179c7779b39da9ba868fa182f8368e38 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 28 Mar 2015 23:10:28 -0700 Subject: commonmark renderer: better escaping of `#`. --- src/commonmark.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/commonmark.c b/src/commonmark.c index 9606fbe9cd..6347bb5c7e 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -48,6 +48,7 @@ needs_escaping(int32_t c, unsigned char next_c, struct render_state *state) (c == '!' && next_c == '[') || (state->begin_line && (c == '-' || c == '+' || c == '#' || c == '=')) || + (c == '#' && (isspace(next_c) || next_c == '\0')) || ((c == '.' || c == ')') && isdigit(state->buffer->ptr[state->buffer->size - 1]))); } -- cgit 0.0.5-2-1-g0f52 From cb32c56abbc1e085025da1cd55b151ffb5a006cc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 28 Mar 2015 23:23:03 -0700 Subject: commonmark rendere: more fine-grained control over escaping. --- src/commonmark.c | 64 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 6347bb5c7e..667e8d29c1 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -39,24 +39,39 @@ static inline void blankline(struct render_state *state) } } +typedef enum { + NO_ESCAPING, + NORMAL_ESCAPING, + QUOTE_ESCAPING +} escaping; + static inline bool -needs_escaping(int32_t c, unsigned char next_c, struct render_state *state) +needs_escaping(escaping escape, + int32_t c, + unsigned char next_c, + struct render_state *state) { - return (c == '*' || c == '_' || c == '[' || c == ']' || - c == '<' || c == '>' || c == '\\' || - (c == '&' && isalpha(next_c)) || - (c == '!' && next_c == '[') || - (state->begin_line && - (c == '-' || c == '+' || c == '#' || c == '=')) || - (c == '#' && (isspace(next_c) || next_c == '\0')) || - ((c == '.' || c == ')') && - isdigit(state->buffer->ptr[state->buffer->size - 1]))); + if (escape == NORMAL_ESCAPING) { + return (c == '*' || c == '_' || c == '[' || c == ']' || + c == '<' || c == '>' || c == '\\' || + (c == '&' && isalpha(next_c)) || + (c == '!' && next_c == '[') || + (state->begin_line && + (c == '-' || c == '+' || c == '#' || c == '=')) || + (c == '#' && (isspace(next_c) || next_c == '\0')) || + ((c == '.' || c == ')') && + isdigit(state->buffer->ptr[state->buffer->size - 1]))); + } else if (escape == QUOTE_ESCAPING) { + return (c == '"' || c == '\\'); + } else { + return false; + } } static inline void out(struct render_state *state, cmark_chunk str, bool wrap, - bool escape) + escaping escape) { unsigned char* source = str.data; int length = str.len; @@ -115,8 +130,7 @@ static inline void out(struct render_state *state, state->column = 0; state->begin_line = true; state->last_breakable = 0; - } else if (escape && - needs_escaping(c, nextc, state)) { + } else if (needs_escaping(escape, c, nextc, state)) { cmark_strbuf_putc(state->buffer, '\\'); utf8proc_encode_char(c, state->buffer); state->column += 2; @@ -156,7 +170,7 @@ static inline void out(struct render_state *state, static void lit(struct render_state *state, char *s, bool wrap) { cmark_chunk str = cmark_chunk_literal(s); - out(state, str, wrap, false); + out(state, str, wrap, NO_ESCAPING); } static int @@ -282,7 +296,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // use indented form if no info lit(state, " ", false); cmark_strbuf_puts(state->prefix, " "); - out(state, node->as.code.literal, false, false); + out(state, node->as.code.literal, false, NO_ESCAPING); cmark_strbuf_truncate(state->prefix, state->prefix->size - 4); } else { @@ -295,9 +309,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "`", false); } lit(state, " ", false); - out(state, cmark_chunk_literal(info), false, false); + out(state, cmark_chunk_literal(info), false, NO_ESCAPING); cr(state); - out(state, node->as.code.literal, false, true); + out(state, node->as.code.literal, false, NORMAL_ESCAPING); cr(state); for (i = 0; i < numticks; i++) { lit(state, "`", false); @@ -308,7 +322,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_HTML: blankline(state); - out(state, node->as.literal, false, false); + out(state, node->as.literal, false, NO_ESCAPING); blankline(state); break; @@ -325,7 +339,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_TEXT: - out(state, node->as.literal, true, true); + out(state, node->as.literal, true, NORMAL_ESCAPING); break; case CMARK_NODE_LINEBREAK: @@ -347,7 +361,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (numticks > 1) { lit(state, " ", false); } - out(state, node->as.literal, true, false); + out(state, node->as.literal, true, NO_ESCAPING); if (numticks > 1) { lit(state, " ", false); } @@ -357,7 +371,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_INLINE_HTML: - out(state, node->as.literal, true, false); + out(state, node->as.literal, true, NO_ESCAPING); break; case CMARK_NODE_STRONG: @@ -384,11 +398,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // TODO - backslash-escape " and \ inside url, title // for both links and images lit(state, "](", false); - out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); + out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, QUOTE_ESCAPING); title = cmark_node_get_title(node); if (title && strlen(title) > 0) { lit(state, " \"", true); - out(state, cmark_chunk_literal(title), false, true); + out(state, cmark_chunk_literal(title), false, QUOTE_ESCAPING); lit(state, "\"", false); } lit(state, ")", false); @@ -400,11 +414,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "![", false); } else { lit(state, "](", false); - out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, true); + out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, QUOTE_ESCAPING); title = cmark_node_get_title(node); if (title && strlen(title) > 0) { lit(state, " \"", true); - out(state, cmark_chunk_literal(title), false, true); + out(state, cmark_chunk_literal(title), false, QUOTE_ESCAPING); lit(state, "\"", false); } lit(state, ")", false); -- cgit 0.0.5-2-1-g0f52 From 9a1b342685243c31d986248b12d96e4cb9db589d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 15:47:17 -0700 Subject: commonmark renderer - escaping improvements. --- src/commonmark.c | 57 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 667e8d29c1..7aa9326872 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -40,9 +40,11 @@ static inline void blankline(struct render_state *state) } typedef enum { - NO_ESCAPING, - NORMAL_ESCAPING, - QUOTE_ESCAPING + LITERAL, + NORMAL, + TITLE, + URL, + BRACED_URL } escaping; static inline bool @@ -51,7 +53,7 @@ needs_escaping(escaping escape, unsigned char next_c, struct render_state *state) { - if (escape == NORMAL_ESCAPING) { + if (escape == NORMAL) { return (c == '*' || c == '_' || c == '[' || c == ']' || c == '<' || c == '>' || c == '\\' || (c == '&' && isalpha(next_c)) || @@ -61,8 +63,14 @@ needs_escaping(escaping escape, (c == '#' && (isspace(next_c) || next_c == '\0')) || ((c == '.' || c == ')') && isdigit(state->buffer->ptr[state->buffer->size - 1]))); - } else if (escape == QUOTE_ESCAPING) { - return (c == '"' || c == '\\'); + } else if (escape == TITLE) { + return (c == '`' || c == '<' || c == '>' || c == '"' || + c == '\\'); + } else if (escape == URL) { + return (c == '`' || c == '<' || c == '>' || isspace(c) || + c == '\\' || c == ')' || c == '('); + } else if (escape == BRACED_URL) { + return (c == '`' || c == '<' || c == '>' || c == '\\'); } else { return false; } @@ -131,9 +139,15 @@ static inline void out(struct render_state *state, state->begin_line = true; state->last_breakable = 0; } else if (needs_escaping(escape, c, nextc, state)) { - cmark_strbuf_putc(state->buffer, '\\'); - utf8proc_encode_char(c, state->buffer); - state->column += 2; + if (isspace(c)) { + // use percent encoding for spaces + cmark_strbuf_printf(state->buffer, "%%%2x", c); + state->column += 3; + } else { + cmark_strbuf_putc(state->buffer, '\\'); + utf8proc_encode_char(c, state->buffer); + state->column += 2; + } state->begin_line = false; } else { utf8proc_encode_char(c, state->buffer); @@ -170,7 +184,7 @@ static inline void out(struct render_state *state, static void lit(struct render_state *state, char *s, bool wrap) { cmark_chunk str = cmark_chunk_literal(s); - out(state, str, wrap, NO_ESCAPING); + out(state, str, wrap, LITERAL); } static int @@ -276,7 +290,6 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_HEADER: - // TODO escape literal ##s at the end of header conetnt if (entering) { for (int i = cmark_node_get_header_level(node); i > 0; i--) { lit(state, "#", false); @@ -296,7 +309,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // use indented form if no info lit(state, " ", false); cmark_strbuf_puts(state->prefix, " "); - out(state, node->as.code.literal, false, NO_ESCAPING); + out(state, node->as.code.literal, false, LITERAL); cmark_strbuf_truncate(state->prefix, state->prefix->size - 4); } else { @@ -309,9 +322,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "`", false); } lit(state, " ", false); - out(state, cmark_chunk_literal(info), false, NO_ESCAPING); + out(state, cmark_chunk_literal(info), false, LITERAL); cr(state); - out(state, node->as.code.literal, false, NORMAL_ESCAPING); + out(state, node->as.code.literal, false, NORMAL); cr(state); for (i = 0; i < numticks; i++) { lit(state, "`", false); @@ -322,7 +335,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_HTML: blankline(state); - out(state, node->as.literal, false, NO_ESCAPING); + out(state, node->as.literal, false, LITERAL); blankline(state); break; @@ -339,7 +352,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_TEXT: - out(state, node->as.literal, true, NORMAL_ESCAPING); + out(state, node->as.literal, true, NORMAL); break; case CMARK_NODE_LINEBREAK: @@ -361,7 +374,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (numticks > 1) { lit(state, " ", false); } - out(state, node->as.literal, true, NO_ESCAPING); + out(state, node->as.literal, true, LITERAL); if (numticks > 1) { lit(state, " ", false); } @@ -371,7 +384,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_INLINE_HTML: - out(state, node->as.literal, true, NO_ESCAPING); + out(state, node->as.literal, true, LITERAL); break; case CMARK_NODE_STRONG: @@ -398,11 +411,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // TODO - backslash-escape " and \ inside url, title // for both links and images lit(state, "](", false); - out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, QUOTE_ESCAPING); + out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); title = cmark_node_get_title(node); if (title && strlen(title) > 0) { lit(state, " \"", true); - out(state, cmark_chunk_literal(title), false, QUOTE_ESCAPING); + out(state, cmark_chunk_literal(title), false, TITLE); lit(state, "\"", false); } lit(state, ")", false); @@ -414,11 +427,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "![", false); } else { lit(state, "](", false); - out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, QUOTE_ESCAPING); + out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); title = cmark_node_get_title(node); if (title && strlen(title) > 0) { lit(state, " \"", true); - out(state, cmark_chunk_literal(title), false, QUOTE_ESCAPING); + out(state, cmark_chunk_literal(title), false, TITLE); lit(state, "\"", false); } lit(state, ")", false); -- cgit 0.0.5-2-1-g0f52 From 029ced080c5fd483db72bba5082a16faeb8f8b75 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:00:56 -0700 Subject: commonmark renderer - two blank lines after list before code/list. --- src/commonmark.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index 7aa9326872..4edf1b27cf 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -39,6 +39,13 @@ static inline void blankline(struct render_state *state) } } +static inline void double_blankline(struct render_state *state) +{ + if (state->need_cr < 3) { + state->need_cr = 3; + } +} + typedef enum { LITERAL, NORMAL, @@ -245,6 +252,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_LIST: + if (!entering && node->next && + (node->next->type == CMARK_NODE_CODE_BLOCK || + node->next->type == CMARK_NODE_LIST)) { + // two blank lines after list before code block or list + double_blankline(state); + } break; case CMARK_NODE_ITEM: -- cgit 0.0.5-2-1-g0f52 From bc902b8826c8d00194dfdc91a3791d540c1e8b97 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:03:01 -0700 Subject: Removed obsolete TODO comment. --- src/commonmark.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 4edf1b27cf..05c3510116 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -282,8 +282,6 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, marker_width = strlen(listmarker); } if (entering) { - // TODO change bullet list marker to avoid - // interpretation as setext headers? if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { lit(state, "- ", false); -- cgit 0.0.5-2-1-g0f52 From 53a48ee09495c15ba27aea06fb6621211bde831f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:08:00 -0700 Subject: commonmark renderer - fixed calculation of number of backticks in code. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 05c3510116..fc508c68af 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -200,7 +200,7 @@ longest_backtick_sequence(cmark_chunk *code) int longest = 0; int current = 0; int i = 0; - while (i < code->len) { + while (i <= code->len) { if (code->data[i] == '`') { current++; } else { -- cgit 0.0.5-2-1-g0f52 From 464b21b11b17009b09379e7edd6dac9c6479db98 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:24:15 -0700 Subject: commonmark renderer - better inline code. Use the minimum number of backticks as delimiter, and include a space only if needed. --- src/commonmark.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index fc508c68af..6994ed1a92 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -214,11 +214,38 @@ longest_backtick_sequence(cmark_chunk *code) return longest; } +static int +shortest_unused_backtick_sequence(cmark_chunk *code) +{ + int32_t used = 1; + int current = 0; + int i = 0; + while (i <= code->len) { + if (code->data[i] == '`') { + current++; + } else { + if (current) { + used |= (1 << current); + } + current = 0; + } + i++; + } + // return number of first bit that is 0: + i = 0; + while (used & 1) { + used = used >> 1; + i++; + } + return i; +} + static int S_render_node(cmark_node *node, cmark_event_type ev_type, struct render_state *state) { cmark_node *tmp; + cmark_chunk *code; int list_number; cmark_delim_type list_delim; int numticks; @@ -324,8 +351,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_truncate(state->prefix, state->prefix->size - 4); } else { - numticks = longest_backtick_sequence(&node->as.code.literal) - + 1; + numticks = longest_backtick_sequence(&node->as.code.literal) + 1; if (numticks < 3) { numticks = 3; } @@ -378,15 +404,16 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_CODE: - numticks = longest_backtick_sequence(&node->as.literal) + 1; + code = &node->as.literal; + numticks = shortest_unused_backtick_sequence(code); for (i = 0; i < numticks; i++) { lit(state, "`", false); } - if (numticks > 1) { + if (code->data[0] == '`') { lit(state, " ", false); } out(state, node->as.literal, true, LITERAL); - if (numticks > 1) { + if (code->data[code->len - 1] == '`') { lit(state, " ", false); } for (i = 0; i < numticks; i++) { -- cgit 0.0.5-2-1-g0f52 From e63be8475f241cde1f7001252a3039b5c66c3e0f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:29:14 -0700 Subject: commonmark renderer: special case EMPH(EMPH(x)). This needs to be rendered `*_x_*` rather than `**x**`. --- src/commonmark.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 6994ed1a92..17a89abc9d 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -254,6 +254,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, const char *info; const char *title; char listmarker[64]; + char *emph_delim; int marker_width; state->in_tight_list_item = @@ -434,10 +435,18 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_EMPH: + // If we have EMPH(EMPH(x)), we need to use *_x_* + // because **x** is STRONG(x): + if (node->parent && node->parent->type == CMARK_NODE_EMPH && + node->next == NULL && node->prev == NULL) { + emph_delim = "_"; + } else { + emph_delim = "*"; + } if (entering) { - lit(state, "*", false); + lit(state, emph_delim, false); } else { - lit(state, "*", false); + lit(state, emph_delim, false); } break; -- cgit 0.0.5-2-1-g0f52 From e345fd465ac5920cd78315883a76f4bafbaec71f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:40:48 -0700 Subject: commonmark - use fenced code blocks if code starts/ends with blank. --- src/commonmark.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 17a89abc9d..180ff183ff 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -344,15 +344,21 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE_BLOCK: blankline(state); info = cmark_node_get_fence_info(node); - if (info == NULL || strlen(info) == 0) { - // use indented form if no info + code = &node->as.code.literal; + if ((info == NULL || strlen(info) == 0) && + (code->len > 2 && + !isspace(code->data[0]) && + !(isspace(code->data[code->len - 1]) && + isspace(code->data[code->len - 2])))) { + // use indented form if no info and code doesn't + // begin or end with a blank line lit(state, " ", false); cmark_strbuf_puts(state->prefix, " "); out(state, node->as.code.literal, false, LITERAL); cmark_strbuf_truncate(state->prefix, state->prefix->size - 4); } else { - numticks = longest_backtick_sequence(&node->as.code.literal) + 1; + numticks = longest_backtick_sequence(code) + 1; if (numticks < 3) { numticks = 3; } -- cgit 0.0.5-2-1-g0f52 From 5dba9e685d3491e55bd10a698adaf28bb4d44cd2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:43:13 -0700 Subject: commonmark - use space after delim if code is empty. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 180ff183ff..640779d4af 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -416,7 +416,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, for (i = 0; i < numticks; i++) { lit(state, "`", false); } - if (code->data[0] == '`') { + if (code->len <= 1 || code->data[0] == '`') { lit(state, " ", false); } out(state, node->as.literal, true, LITERAL); -- cgit 0.0.5-2-1-g0f52 From 951111c353c5eabe6c855f0a78362512d4d20d18 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:45:09 -0700 Subject: Fixes one-off error in previous commit. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 640779d4af..e87e1196be 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -416,7 +416,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, for (i = 0; i < numticks; i++) { lit(state, "`", false); } - if (code->len <= 1 || code->data[0] == '`') { + if (code->len == 0 || code->data[0] == '`') { lit(state, " ", false); } out(state, node->as.literal, true, LITERAL); -- cgit 0.0.5-2-1-g0f52 From 2791ffabfc7da2e19e6c5486070ebff20e9ac9df Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:47:43 -0700 Subject: commonmark - use * for bullet list to avoid clash with setext header. E.g. with a paragraph followed immediately by a list item with no content. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index e87e1196be..66d4ba7262 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -312,7 +312,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { - lit(state, "- ", false); + lit(state, "* ", false); cmark_strbuf_puts(state->prefix, " "); } else { lit(state, listmarker, false); -- cgit 0.0.5-2-1-g0f52 From 4f24c5e65ad4f7f34acf620008b5f824a81f091d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 16:52:11 -0700 Subject: commonmark - improved tight list rendering. --- src/commonmark.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 66d4ba7262..b8ff25b9ae 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -39,13 +39,6 @@ static inline void blankline(struct render_state *state) } } -static inline void double_blankline(struct render_state *state) -{ - if (state->need_cr < 3) { - state->need_cr = 3; - } -} - typedef enum { LITERAL, NORMAL, @@ -258,8 +251,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, int marker_width; state->in_tight_list_item = - node->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(node->parent); + (node->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(node->parent)) || + (node->parent && node->parent->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(node->parent->parent)); switch (node->type) { case CMARK_NODE_DOCUMENT: @@ -283,8 +278,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK || node->next->type == CMARK_NODE_LIST)) { - // two blank lines after list before code block or list - double_blankline(state); + // this ensures 2 blank lines after list, + // if before code block or list: + lit(state, "\n", false); + state->need_cr = 0; } break; -- cgit 0.0.5-2-1-g0f52 From cb8e0d5cac88e5f1151826833b6d6186fedbd4fc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 17:05:29 -0700 Subject: commonmark renderer - fixed memory access error. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index b8ff25b9ae..c266bf6160 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -417,7 +417,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, " ", false); } out(state, node->as.literal, true, LITERAL); - if (code->data[code->len - 1] == '`') { + if (code->len == 0 || code->data[code->len - 1] == '`') { lit(state, " ", false); } for (i = 0; i < numticks; i++) { -- cgit 0.0.5-2-1-g0f52 From 8032d6572d6833e201468ba87b78fba604ef7147 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 17:46:51 -0700 Subject: commonmark renderer - honor softbreak if width == 0. --- src/commonmark.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index c266bf6160..f41c9ee568 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -404,7 +404,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_SOFTBREAK: - lit(state, " ", true); + if (state->width == 0) { + cr(state); + } else { + lit(state, " ", true); + } break; case CMARK_NODE_CODE: -- cgit 0.0.5-2-1-g0f52 From 455068614817b4080a0606dca0daec4de61ff68a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 17:48:04 -0700 Subject: commonmark - properly escape literal backticks. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index f41c9ee568..9a7a882876 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -55,7 +55,7 @@ needs_escaping(escaping escape, { if (escape == NORMAL) { return (c == '*' || c == '_' || c == '[' || c == ']' || - c == '<' || c == '>' || c == '\\' || + c == '<' || c == '>' || c == '\\' || c == '`' || (c == '&' && isalpha(next_c)) || (c == '!' && next_c == '[') || (state->begin_line && -- cgit 0.0.5-2-1-g0f52 From df29746dabf154ce09f3bfbdeeafb62bff72366a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 17:50:28 -0700 Subject: commonmark renderer - don't escape in fenced code blocks. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 9a7a882876..61eb4cc175 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -365,7 +365,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, " ", false); out(state, cmark_chunk_literal(info), false, LITERAL); cr(state); - out(state, node->as.code.literal, false, NORMAL); + out(state, node->as.code.literal, false, LITERAL); cr(state); for (i = 0; i < numticks; i++) { lit(state, "`", false); -- cgit 0.0.5-2-1-g0f52 From 1fad45bf96b3daf2fcba747d44caa4556c68917a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 17:57:19 -0700 Subject: commonmark - don't use indented code if first thing in list item. --- src/commonmark.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 61eb4cc175..96f4c3a148 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -342,13 +342,16 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, blankline(state); info = cmark_node_get_fence_info(node); code = &node->as.code.literal; + // use indented form if no info, and code doesn't + // begin or end with a blank line, and code isn't + // first thing in a list item if ((info == NULL || strlen(info) == 0) && (code->len > 2 && !isspace(code->data[0]) && !(isspace(code->data[code->len - 1]) && - isspace(code->data[code->len - 2])))) { - // use indented form if no info and code doesn't - // begin or end with a blank line + isspace(code->data[code->len - 2]))) && + !(node->prev == NULL && node->parent && + node->parent->type == CMARK_NODE_ITEM)) { lit(state, " ", false); cmark_strbuf_puts(state->prefix, " "); out(state, node->as.code.literal, false, LITERAL); -- cgit 0.0.5-2-1-g0f52 From 86263adc7ee25ca727c770586fe1a67e41ad8f10 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 18:05:55 -0700 Subject: commonmark writer - more tight list fixes. Avoid losing blank line *before* a tight list, by adjusting `state->in_tight_list_item` only *after* we've started the first list item. --- src/commonmark.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 96f4c3a148..c94cf9ae4a 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -250,11 +250,17 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, char *emph_delim; int marker_width; - state->in_tight_list_item = - (node->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(node->parent)) || - (node->parent && node->parent->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(node->parent->parent)); + // Don't adjust tight list status til we've started the list. + // Otherwise we loose the blank line between a paragraph and + // a following list. + if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && + entering)) { + state->in_tight_list_item = + (node->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(node->parent)) || + (node->parent && node->parent->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(node->parent->parent)); + } switch (node->type) { case CMARK_NODE_DOCUMENT: -- cgit 0.0.5-2-1-g0f52 From 07abc70323fe35f711a650b39472e0ac5af96185 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 20:32:15 -0700 Subject: commonmark renderer - improved tight list detection. --- src/commonmark.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index c94cf9ae4a..83a6602a2c 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -233,6 +233,19 @@ shortest_unused_backtick_sequence(cmark_chunk *code) return i; } +// if node is a block node, returns node. +// otherwise returns first block-level node that is an ancestor of node. +static cmark_node* +get_containing_block(cmark_node *node) +{ + while (node && + (node->type < CMARK_NODE_FIRST_BLOCK || + node->type > CMARK_NODE_LAST_BLOCK)) { + node = node->parent; + } + return node; +} + static int S_render_node(cmark_node *node, cmark_event_type ev_type, struct render_state *state) @@ -255,11 +268,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // a following list. if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) { - state->in_tight_list_item = - (node->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(node->parent)) || - (node->parent && node->parent->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(node->parent->parent)); + tmp = get_containing_block(node); + state->in_tight_list_item = + (tmp->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent)) || + (tmp && + tmp->parent && + tmp->parent->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent->parent)); } switch (node->type) { -- cgit 0.0.5-2-1-g0f52 From 5fcc575ee3a77da65cb63cd43eb4235c851ce6ad Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 20:40:07 -0700 Subject: Don't wrap inline HTML. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 83a6602a2c..9f093c3b72 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -455,7 +455,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_INLINE_HTML: - out(state, node->as.literal, true, LITERAL); + out(state, node->as.literal, false, LITERAL); break; case CMARK_NODE_STRONG: -- cgit 0.0.5-2-1-g0f52 From acd11e2766a10236750424453059abb2ab759d1e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 20:55:43 -0700 Subject: Fixed bug in cmark_strbuf_unescape (buffer.c). The old function called 'continue' when seeing a backslash, but this gave incorrect results on input like: \\* since the next backslash would be treated as escaping the `*` instead of being escaped itself. --- src/buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index 0df65617fa..5ec8b49875 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -372,7 +372,7 @@ extern void cmark_strbuf_unescape(cmark_strbuf *buf) for (r = 0, w = 0; r < buf->size; ++r) { if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1])) - continue; + r++; buf->ptr[w++] = buf->ptr[r]; } -- cgit 0.0.5-2-1-g0f52 From 7fdb93306d64607d40953bbbd53d961944819c73 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 21:14:41 -0700 Subject: Added roundtrip_test Makefile target. Eventually this should be pythonized and put in the cmake test routine. --- .travis.yml | 1 + Makefile | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 4ef377db6c..c177482aee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,7 @@ before_install: script: - make - make test + - make roundtrip_test - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] then diff --git a/Makefile b/Makefile index 1ece8f7a6f..eacc27124a 100644 --- a/Makefile +++ b/Makefile @@ -116,6 +116,9 @@ update-spec: test: $(SPEC) cmake_build make -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) +roundtrip_test: $(SPEC) cmake_build + python3 test/spec_tests.py --spec $< --prog test/roundtrip.sh + $(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]))' > $@ -- cgit 0.0.5-2-1-g0f52 From f99a680b089eee01797e085a6d9f5c5398907a57 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 22:13:24 -0700 Subject: Scanners: added _scan_scheme, scan_scheme. This is used in the commonmark renderer. --- src/scanners.c | 16417 ++++++++++++++++++++++++++++++++---------------------- src/scanners.h | 2 + src/scanners.re | 11 + 3 files changed, 9671 insertions(+), 6759 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 4f619e7d2e..42b9275eb8 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -18,48 +18,14 @@ int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) -// Try to match URI autolink after first <, returning number of chars matched. -int _scan_autolink_uri(const unsigned char *p) +// Try to match a scheme including colon. +int _scan_scheme(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = 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, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 0, 128, 0, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - }; yych = *p; switch (yych) { @@ -124,50 +90,50 @@ yy3: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy442; + case 'a': goto yy440; case 'H': - case 'h': goto yy441; + case 'h': goto yy439; case 'I': - case 'i': goto yy444; + case 'i': goto yy442; case 'O': - case 'o': goto yy440; + case 'o': goto yy438; case 'R': - case 'r': goto yy443; + case 'r': goto yy441; case 'V': - case 'v': goto yy439; + case 'v': goto yy437; default: goto yy2; } yy4: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy415; + case 'a': goto yy413; case 'I': - case 'i': goto yy414; + case 'i': goto yy412; case 'L': - case 'l': goto yy412; + case 'l': goto yy410; case 'N': - case 'n': goto yy413; + case 'n': goto yy411; case 'O': - case 'o': goto yy416; + case 'o': goto yy414; case 'T': - case 't': goto yy411; + case 't': goto yy409; case 'V': - case 'v': goto yy410; + case 'v': goto yy408; default: goto yy2; } yy5: yych = *(marker = ++p); if (yych <= 'M') { - if (yych == 'A') goto yy402; + if (yych == 'A') goto yy400; if (yych <= 'L') goto yy2; - goto yy401; + goto yy399; } else { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy402; + goto yy400; } else { - if (yych == 'm') goto yy401; + if (yych == 'm') goto yy399; goto yy2; } } @@ -175,21 +141,21 @@ yy6: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy383; + case 'a': goto yy381; case 'B': - case 'b': goto yy382; + case 'b': goto yy380; case 'C': - case 'c': goto yy381; + case 'c': goto yy379; case 'D': - case 'd': goto yy380; + case 'd': goto yy378; case 'F': - case 'f': goto yy379; + case 'f': goto yy377; case 'I': - case 'i': goto yy378; + case 'i': goto yy376; case 'P': - case 'p': goto yy377; + case 'p': goto yy375; case 'T': - case 't': goto yy376; + case 't': goto yy374; case 'W': case 'w': goto yy34; default: goto yy2; @@ -198,25 +164,25 @@ yy7: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'E') { - if (yych == 'A') goto yy363; + if (yych == 'A') goto yy361; if (yych <= 'D') goto yy2; - goto yy362; + goto yy360; } else { - if (yych == 'I') goto yy361; + if (yych == 'I') goto yy359; if (yych <= 'S') goto yy2; - goto yy364; + goto yy362; } } else { if (yych <= 'e') { - if (yych == 'a') goto yy363; + if (yych == 'a') goto yy361; if (yych <= 'd') goto yy2; - goto yy362; + goto yy360; } else { if (yych <= 'i') { if (yych <= 'h') goto yy2; - goto yy361; + goto yy359; } else { - if (yych == 't') goto yy364; + if (yych == 't') goto yy362; goto yy2; } } @@ -225,15 +191,15 @@ yy8: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy346; + case 'e': goto yy344; case 'G': case 'g': goto yy34; case 'I': - case 'i': goto yy344; + case 'i': goto yy342; case 'O': - case 'o': goto yy345; + case 'o': goto yy343; case 'T': - case 't': goto yy343; + case 't': goto yy341; default: goto yy2; } yy9: @@ -241,18 +207,18 @@ yy9: if (yych <= 'S') { if (yych <= '3') { if (yych <= '2') goto yy2; - goto yy339; + goto yy337; } else { - if (yych == 'C') goto yy337; + if (yych == 'C') goto yy335; goto yy2; } } else { if (yych <= 'c') { - if (yych <= 'T') goto yy338; + if (yych <= 'T') goto yy336; if (yych <= 'b') goto yy2; - goto yy337; + goto yy335; } else { - if (yych == 't') goto yy338; + if (yych == 't') goto yy336; goto yy2; } } @@ -260,33 +226,33 @@ yy10: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy319; + case 'a': goto yy317; case 'C': - case 'c': goto yy316; + case 'c': goto yy314; case 'M': - case 'm': goto yy318; + case 'm': goto yy316; case 'N': - case 'n': goto yy317; + case 'n': goto yy315; case 'P': - case 'p': goto yy315; + case 'p': goto yy313; case 'R': - case 'r': goto yy314; + case 'r': goto yy312; case 'T': - case 't': goto yy313; + case 't': goto yy311; default: goto yy2; } yy11: yych = *(marker = ++p); if (yych <= 'D') { - if (yych == 'A') goto yy307; + if (yych == 'A') goto yy305; if (yych <= 'C') goto yy2; - goto yy306; + goto yy304; } else { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy307; + goto yy305; } else { - if (yych == 'd') goto yy306; + if (yych == 'd') goto yy304; goto yy2; } } @@ -294,50 +260,50 @@ yy12: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy273; + case 'a': goto yy271; case 'E': - case 'e': goto yy272; + case 'e': goto yy270; case 'I': - case 'i': goto yy275; + case 'i': goto yy273; case 'M': - case 'm': goto yy271; + case 'm': goto yy269; case 'S': - case 's': goto yy270; + case 's': goto yy268; case 'T': - case 't': goto yy274; + case 't': goto yy272; case 'U': - case 'u': goto yy269; + case 'u': goto yy267; case 'V': - case 'v': goto yy268; + case 'v': goto yy266; default: goto yy2; } yy13: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy263; + case 'e': goto yy261; case 'F': - case 'f': goto yy262; + case 'f': goto yy260; case 'I': - case 'i': goto yy261; + case 'i': goto yy259; case 'N': - case 'n': goto yy260; + case 'n': goto yy258; case 'O': - case 'o': goto yy259; + case 'o': goto yy257; default: goto yy2; } yy14: yych = *(marker = ++p); if (yych <= 'P') { - if (yych == 'I') goto yy245; + if (yych == 'I') goto yy243; if (yych <= 'O') goto yy2; - goto yy246; + goto yy244; } else { if (yych <= 'i') { if (yych <= 'h') goto yy2; - goto yy245; + goto yy243; } else { - if (yych == 'p') goto yy246; + if (yych == 'p') goto yy244; goto yy2; } } @@ -345,35 +311,35 @@ yy15: yych = *(marker = ++p); if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'A') goto yy227; + if (yych == 'A') goto yy225; if (yych <= 'K') goto yy2; - goto yy226; + goto yy224; } else { if (yych <= 'O') { if (yych <= 'N') goto yy2; - goto yy228; + goto yy226; } else { if (yych <= 'Q') goto yy2; - if (yych <= 'R') goto yy225; - goto yy224; + if (yych <= 'R') goto yy223; + goto yy222; } } } else { if (yych <= 'n') { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy227; + goto yy225; } else { - if (yych == 'l') goto yy226; + if (yych == 'l') goto yy224; goto yy2; } } else { if (yych <= 'q') { - if (yych <= 'o') goto yy228; + if (yych <= 'o') goto yy226; goto yy2; } else { - if (yych <= 'r') goto yy225; - if (yych <= 's') goto yy224; + if (yych <= 'r') goto yy223; + if (yych <= 's') goto yy222; goto yy2; } } @@ -382,23 +348,23 @@ yy16: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'L') { - if (yych == 'E') goto yy214; + if (yych == 'E') goto yy212; goto yy2; } else { - if (yych <= 'M') goto yy213; + if (yych <= 'M') goto yy211; if (yych <= 'R') goto yy2; - if (yych <= 'S') goto yy212; - goto yy211; + if (yych <= 'S') goto yy210; + goto yy209; } } else { if (yych <= 'm') { - if (yych == 'e') goto yy214; + if (yych == 'e') goto yy212; if (yych <= 'l') goto yy2; - goto yy213; + goto yy211; } else { if (yych <= 'r') goto yy2; - if (yych <= 's') goto yy212; - if (yych <= 't') goto yy211; + if (yych <= 's') goto yy210; + if (yych <= 't') goto yy209; goto yy2; } } @@ -406,48 +372,48 @@ yy17: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy167; + case 'e': goto yy165; case 'F': - case 'f': goto yy166; + case 'f': goto yy164; case 'G': - case 'g': goto yy165; + case 'g': goto yy163; case 'H': - case 'h': goto yy170; + case 'h': goto yy168; case 'I': - case 'i': goto yy169; + case 'i': goto yy167; case 'K': - case 'k': goto yy164; + case 'k': goto yy162; case 'M': - case 'm': goto yy163; + case 'm': goto yy161; case 'N': - case 'n': goto yy168; + case 'n': goto yy166; case 'O': - case 'o': goto yy162; + case 'o': goto yy160; case 'P': - case 'p': goto yy161; + case 'p': goto yy159; case 'S': - case 's': goto yy160; + case 's': goto yy158; case 'T': - case 't': goto yy159; + case 't': goto yy157; case 'V': - case 'v': goto yy158; + case 'v': goto yy156; default: goto yy2; } yy18: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy134; + case 'a': goto yy132; case 'E': - case 'e': goto yy130; + case 'e': goto yy128; case 'F': - case 'f': goto yy133; + case 'f': goto yy131; case 'H': - case 'h': goto yy129; + case 'h': goto yy127; case 'I': - case 'i': goto yy131; + case 'i': goto yy129; case 'N': - case 'n': goto yy132; + case 'n': goto yy130; case 'V': case 'v': goto yy34; default: goto yy2; @@ -456,25 +422,25 @@ yy19: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'N') { - if (yych == 'D') goto yy121; + if (yych == 'D') goto yy119; if (yych <= 'M') goto yy2; - goto yy120; + goto yy118; } else { - if (yych == 'R') goto yy122; + if (yych == 'R') goto yy120; if (yych <= 'S') goto yy2; - goto yy119; + goto yy117; } } else { if (yych <= 'n') { - if (yych == 'd') goto yy121; + if (yych == 'd') goto yy119; if (yych <= 'm') goto yy2; - goto yy120; + goto yy118; } else { if (yych <= 'r') { if (yych <= 'q') goto yy2; - goto yy122; + goto yy120; } else { - if (yych == 't') goto yy119; + if (yych == 't') goto yy117; goto yy2; } } @@ -482,15 +448,15 @@ yy19: yy20: yych = *(marker = ++p); if (yych <= 'I') { - if (yych == 'E') goto yy103; + if (yych == 'E') goto yy101; if (yych <= 'H') goto yy2; - goto yy102; + goto yy100; } else { if (yych <= 'e') { if (yych <= 'd') goto yy2; - goto yy103; + goto yy101; } else { - if (yych == 'i') goto yy102; + if (yych == 'i') goto yy100; goto yy2; } } @@ -498,22 +464,22 @@ yy21: yych = *(marker = ++p); if (yych <= 'Y') { if (yych <= 'R') { - if (yych == 'E') goto yy92; + if (yych == 'E') goto yy90; goto yy2; } else { - if (yych <= 'S') goto yy93; - if (yych <= 'T') goto yy91; + if (yych <= 'S') goto yy91; + if (yych <= 'T') goto yy89; if (yych <= 'X') goto yy2; - goto yy90; + goto yy88; } } else { if (yych <= 's') { - if (yych == 'e') goto yy92; + if (yych == 'e') goto yy90; if (yych <= 'r') goto yy2; - goto yy93; + goto yy91; } else { - if (yych <= 't') goto yy91; - if (yych == 'y') goto yy90; + if (yych <= 't') goto yy89; + if (yych == 'y') goto yy88; goto yy2; } } @@ -521,68 +487,68 @@ yy22: yych = *(marker = ++p); if (yych <= 'R') { if (yych <= 'F') { - if (yych == 'C') goto yy69; + if (yych == 'C') goto yy67; if (yych <= 'E') goto yy2; - goto yy67; + goto yy65; } else { - if (yych == 'M') goto yy68; + if (yych == 'M') goto yy66; if (yych <= 'Q') goto yy2; - goto yy66; + goto yy64; } } else { if (yych <= 'f') { - if (yych == 'c') goto yy69; + if (yych == 'c') goto yy67; if (yych <= 'e') goto yy2; - goto yy67; + goto yy65; } else { if (yych <= 'm') { if (yych <= 'l') goto yy2; - goto yy68; + goto yy66; } else { - if (yych == 'r') goto yy66; + if (yych == 'r') goto yy64; goto yy2; } } } yy23: yych = *(marker = ++p); - if (yych == '3') goto yy61; + if (yych == '3') goto yy59; goto yy2; yy24: yych = *(marker = ++p); if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy51; + if (yych == 'E') goto yy49; goto yy2; } else { - if (yych <= 'I') goto yy50; + if (yych <= 'I') goto yy48; if (yych <= 'N') goto yy2; - goto yy49; + goto yy47; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy51; + if (yych == 'e') goto yy49; goto yy2; } else { - if (yych <= 'i') goto yy50; - if (yych == 'o') goto yy49; + if (yych <= 'i') goto yy48; + if (yych == 'o') goto yy47; goto yy2; } } yy25: yych = *(marker = ++p); - if (yych == 'D') goto yy47; - if (yych == 'd') goto yy47; + if (yych == 'D') goto yy45; + if (yych == 'd') goto yy45; goto yy2; yy26: yych = *(marker = ++p); - if (yych == 'E') goto yy42; - if (yych == 'e') goto yy42; + if (yych == 'E') goto yy40; + if (yych == 'e') goto yy40; goto yy2; yy27: yych = *(marker = ++p); - if (yych == 'U') goto yy39; - if (yych == 'u') goto yy39; + if (yych == 'U') goto yy37; + if (yych == 'u') goto yy37; goto yy2; yy28: yych = *(marker = ++p); @@ -611,109 +577,103 @@ yy34: yych = *++p; if (yych != ':') goto yy31; yy35: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy35; - } - if (yych <= '=') goto yy31; ++p; { return (p - start); } -yy39: +yy37: yych = *++p; - if (yych == 'E') goto yy40; + if (yych == 'E') goto yy38; if (yych != 'e') goto yy31; -yy40: +yy38: yych = *++p; - if (yych == 'R') goto yy41; + if (yych == 'R') goto yy39; if (yych != 'r') goto yy31; -yy41: +yy39: yych = *++p; if (yych == 'Y') goto yy34; if (yych == 'y') goto yy34; goto yy31; -yy42: +yy40: yych = *++p; - if (yych == 'Y') goto yy43; + if (yych == 'Y') goto yy41; if (yych != 'y') goto yy31; -yy43: +yy41: yych = *++p; - if (yych == 'P') goto yy44; + if (yych == 'P') goto yy42; if (yych != 'p') goto yy31; -yy44: +yy42: yych = *++p; - if (yych == 'A') goto yy45; + if (yych == 'A') goto yy43; if (yych != 'a') goto yy31; -yy45: +yy43: yych = *++p; - if (yych == 'R') goto yy46; + if (yych == 'R') goto yy44; if (yych != 'r') goto yy31; -yy46: +yy44: yych = *++p; if (yych == 'C') goto yy34; if (yych == 'c') goto yy34; goto yy31; -yy47: +yy45: yych = *++p; if (yych != '2') goto yy31; yych = *++p; if (yych == 'K') goto yy34; if (yych == 'k') goto yy34; goto yy31; -yy49: +yy47: yych = *++p; - if (yych == 'L') goto yy60; - if (yych == 'l') goto yy60; + if (yych == 'L') goto yy58; + if (yych == 'l') goto yy58; goto yy31; -yy50: +yy48: yych = *++p; - if (yych == 'T') goto yy56; - if (yych == 't') goto yy56; + if (yych == 'T') goto yy54; + if (yych == 't') goto yy54; goto yy31; -yy51: +yy49: yych = *++p; - if (yych == 'S') goto yy52; + if (yych == 'S') goto yy50; if (yych != 's') goto yy31; -yy52: +yy50: yych = *++p; - if (yych == 'H') goto yy53; + if (yych == 'H') goto yy51; if (yych != 'h') goto yy31; -yy53: +yy51: yych = *++p; - if (yych == 'A') goto yy54; + if (yych == 'A') goto yy52; if (yych != 'a') goto yy31; -yy54: +yy52: yych = *++p; - if (yych == 'R') goto yy55; + if (yych == 'R') goto yy53; if (yych != 'r') goto yy31; -yy55: +yy53: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy56: +yy54: yych = *++p; - if (yych == 'C') goto yy57; + if (yych == 'C') goto yy55; if (yych != 'c') goto yy31; -yy57: +yy55: yych = *++p; - if (yych == 'O') goto yy58; + if (yych == 'O') goto yy56; if (yych != 'o') goto yy31; -yy58: +yy56: yych = *++p; - if (yych == 'I') goto yy59; + if (yych == 'I') goto yy57; if (yych != 'i') goto yy31; -yy59: +yy57: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy60: +yy58: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy61: +yy59: yych = *++p; if (yych != '9') goto yy31; yych = *++p; @@ -728,106 +688,106 @@ yy61: if (yych <= 'q') goto yy31; if (yych <= 's') goto yy34; goto yy31; -yy66: +yy64: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy67: +yy65: yych = *++p; - if (yych == 'I') goto yy88; - if (yych == 'i') goto yy88; + if (yych == 'I') goto yy86; + if (yych == 'i') goto yy86; goto yy31; -yy68: +yy66: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy78; + if (yych == 'L') goto yy76; if (yych <= 'O') goto yy31; - goto yy79; + goto yy77; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy78; + goto yy76; } else { - if (yych == 'p') goto yy79; + if (yych == 'p') goto yy77; goto yy31; } } -yy69: +yy67: yych = *++p; - if (yych == 'O') goto yy70; + if (yych == 'O') goto yy68; if (yych != 'o') goto yy31; -yy70: +yy68: yych = *++p; - if (yych == 'N') goto yy71; + if (yych == 'N') goto yy69; if (yych != 'n') goto yy31; -yy71: +yy69: yych = *++p; - if (yych == '-') goto yy72; + if (yych == '-') goto yy70; if (yych == ':') goto yy35; goto yy31; -yy72: +yy70: yych = *++p; - if (yych == 'U') goto yy73; + if (yych == 'U') goto yy71; if (yych != 'u') goto yy31; -yy73: +yy71: yych = *++p; - if (yych == 'S') goto yy74; + if (yych == 'S') goto yy72; if (yych != 's') goto yy31; -yy74: +yy72: yych = *++p; - if (yych == 'E') goto yy75; + if (yych == 'E') goto yy73; if (yych != 'e') goto yy31; -yy75: +yy73: yych = *++p; - if (yych == 'R') goto yy76; + if (yych == 'R') goto yy74; if (yych != 'r') goto yy31; -yy76: +yy74: yych = *++p; - if (yych == 'I') goto yy77; + if (yych == 'I') goto yy75; if (yych != 'i') goto yy31; -yy77: +yy75: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy78: +yy76: yych = *++p; - if (yych == 'R') goto yy80; - if (yych == 'r') goto yy80; + if (yych == 'R') goto yy78; + if (yych == 'r') goto yy78; goto yy31; -yy79: +yy77: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy80: +yy78: yych = *++p; - if (yych == 'P') goto yy81; + if (yych == 'P') goto yy79; if (yych != 'p') goto yy31; -yy81: +yy79: yych = *++p; - if (yych == 'C') goto yy82; + if (yych == 'C') goto yy80; if (yych != 'c') goto yy31; -yy82: +yy80: yych = *++p; if (yych != '.') goto yy31; yych = *++p; - if (yych == 'B') goto yy84; + if (yych == 'B') goto yy82; if (yych != 'b') goto yy31; -yy84: +yy82: yych = *++p; - if (yych == 'E') goto yy85; + if (yych == 'E') goto yy83; if (yych != 'e') goto yy31; -yy85: +yy83: yych = *++p; - if (yych == 'E') goto yy86; + if (yych == 'E') goto yy84; if (yych != 'e') goto yy31; -yy86: +yy84: yych = *++p; - if (yych == 'P') goto yy87; + if (yych == 'P') goto yy85; if (yych != 'p') goto yy31; -yy87: +yy85: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -837,31 +797,31 @@ yy87: if (yych == 's') goto yy34; goto yy31; } -yy88: +yy86: yych = *++p; - if (yych == 'R') goto yy89; + if (yych == 'R') goto yy87; if (yych != 'r') goto yy31; -yy89: +yy87: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy90: +yy88: yych = *++p; - if (yych == 'C') goto yy98; - if (yych == 'c') goto yy98; + if (yych == 'C') goto yy96; + if (yych == 'c') goto yy96; goto yy31; -yy91: +yy89: yych = *++p; - if (yych == 'A') goto yy97; - if (yych == 'a') goto yy97; + if (yych == 'A') goto yy95; + if (yych == 'a') goto yy95; goto yy31; -yy92: +yy90: yych = *++p; - if (yych == 'B') goto yy94; - if (yych == 'b') goto yy94; + if (yych == 'B') goto yy92; + if (yych == 'b') goto yy92; goto yy31; -yy93: +yy91: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -871,152 +831,152 @@ yy93: if (yych == 's') goto yy34; goto yy31; } -yy94: +yy92: yych = *++p; - if (yych == 'C') goto yy95; + if (yych == 'C') goto yy93; if (yych != 'c') goto yy31; -yy95: +yy93: yych = *++p; - if (yych == 'A') goto yy96; + if (yych == 'A') goto yy94; if (yych != 'a') goto yy31; -yy96: +yy94: yych = *++p; if (yych == 'L') goto yy34; if (yych == 'l') goto yy34; goto yy31; -yy97: +yy95: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy98: +yy96: yych = *++p; - if (yych == 'I') goto yy99; + if (yych == 'I') goto yy97; if (yych != 'i') goto yy31; -yy99: +yy97: yych = *++p; - if (yych == 'W') goto yy100; + if (yych == 'W') goto yy98; if (yych != 'w') goto yy31; -yy100: +yy98: yych = *++p; - if (yych == 'Y') goto yy101; + if (yych == 'Y') goto yy99; if (yych != 'y') goto yy31; -yy101: +yy99: yych = *++p; if (yych == 'G') goto yy34; if (yych == 'g') goto yy34; goto yy31; -yy102: +yy100: yych = *++p; - if (yych == 'E') goto yy111; - if (yych == 'e') goto yy111; + if (yych == 'E') goto yy109; + if (yych == 'e') goto yy109; goto yy31; -yy103: +yy101: yych = *++p; if (yych <= 'N') { if (yych <= 'L') goto yy31; - if (yych >= 'N') goto yy105; + if (yych >= 'N') goto yy103; } else { if (yych <= 'l') goto yy31; - if (yych <= 'm') goto yy104; - if (yych <= 'n') goto yy105; + if (yych <= 'm') goto yy102; + if (yych <= 'n') goto yy103; goto yy31; } -yy104: +yy102: yych = *++p; - if (yych == 'M') goto yy110; - if (yych == 'm') goto yy110; + if (yych == 'M') goto yy108; + if (yych == 'm') goto yy108; goto yy31; -yy105: +yy103: yych = *++p; - if (yych == 'T') goto yy106; + if (yych == 'T') goto yy104; if (yych != 't') goto yy31; -yy106: +yy104: yych = *++p; - if (yych == 'R') goto yy107; + if (yych == 'R') goto yy105; if (yych != 'r') goto yy31; -yy107: +yy105: yych = *++p; - if (yych == 'I') goto yy108; + if (yych == 'I') goto yy106; if (yych != 'i') goto yy31; -yy108: +yy106: yych = *++p; - if (yych == 'L') goto yy109; + if (yych == 'L') goto yy107; if (yych != 'l') goto yy31; -yy109: +yy107: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy110: +yy108: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy111: +yy109: yych = *++p; - if (yych == 'W') goto yy112; + if (yych == 'W') goto yy110; if (yych != 'w') goto yy31; -yy112: +yy110: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'S') goto yy114; + if (yych == 'S') goto yy112; if (yych != 's') goto yy31; -yy114: +yy112: yych = *++p; - if (yych == 'O') goto yy115; + if (yych == 'O') goto yy113; if (yych != 'o') goto yy31; -yy115: +yy113: yych = *++p; - if (yych == 'U') goto yy116; + if (yych == 'U') goto yy114; if (yych != 'u') goto yy31; -yy116: +yy114: yych = *++p; - if (yych == 'R') goto yy117; + if (yych == 'R') goto yy115; if (yych != 'r') goto yy31; -yy117: +yy115: yych = *++p; - if (yych == 'C') goto yy118; + if (yych == 'C') goto yy116; if (yych != 'c') goto yy31; -yy118: +yy116: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy119: +yy117: yych = *++p; - if (yych == '2') goto yy126; + if (yych == '2') goto yy124; goto yy31; -yy120: +yy118: yych = *++p; - if (yych == 'R') goto yy123; - if (yych == 'r') goto yy123; + if (yych == 'R') goto yy121; + if (yych == 'r') goto yy121; goto yy31; -yy121: +yy119: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy122: +yy120: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy123: +yy121: yych = *++p; - if (yych == 'E') goto yy124; + if (yych == 'E') goto yy122; if (yych != 'e') goto yy31; -yy124: +yy122: yych = *++p; - if (yych == 'A') goto yy125; + if (yych == 'A') goto yy123; if (yych != 'a') goto yy31; -yy125: +yy123: yych = *++p; if (yych == 'L') goto yy34; if (yych == 'l') goto yy34; goto yy31; -yy126: +yy124: yych = *++p; if (yych != '0') goto yy31; yych = *++p; @@ -1024,51 +984,51 @@ yy126: yych = *++p; if (yych == '4') goto yy34; goto yy31; -yy129: +yy127: yych = *++p; - if (yych == 'I') goto yy148; - if (yych == 'i') goto yy148; + if (yych == 'I') goto yy146; + if (yych == 'i') goto yy146; goto yy31; -yy130: +yy128: yych = *++p; if (yych <= 'L') { - if (yych == 'A') goto yy140; + if (yych == 'A') goto yy138; if (yych <= 'K') goto yy31; - goto yy139; + goto yy137; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy140; + goto yy138; } else { - if (yych == 'l') goto yy139; + if (yych == 'l') goto yy137; goto yy31; } } -yy131: +yy129: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy132: +yy130: yych = *++p; - if (yych == '3') goto yy136; + if (yych == '3') goto yy134; goto yy31; -yy133: +yy131: yych = *++p; - if (yych == 'T') goto yy135; - if (yych == 't') goto yy135; + if (yych == 'T') goto yy133; + if (yych == 't') goto yy133; goto yy31; -yy134: +yy132: yych = *++p; if (yych == 'G') goto yy34; if (yych == 'g') goto yy34; goto yy31; -yy135: +yy133: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy136: +yy134: yych = *++p; if (yych != '2') goto yy31; yych = *++p; @@ -1076,139 +1036,139 @@ yy136: yych = *++p; if (yych == '0') goto yy34; goto yy31; -yy139: +yy137: yych = *++p; if (yych <= 'M') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'N') goto yy146; - if (yych == 'n') goto yy146; + if (yych <= 'N') goto yy144; + if (yych == 'n') goto yy144; goto yy31; } -yy140: +yy138: yych = *++p; - if (yych == 'M') goto yy141; + if (yych == 'M') goto yy139; if (yych != 'm') goto yy31; -yy141: +yy139: yych = *++p; - if (yych == 'S') goto yy142; + if (yych == 'S') goto yy140; if (yych != 's') goto yy31; -yy142: +yy140: yych = *++p; - if (yych == 'P') goto yy143; + if (yych == 'P') goto yy141; if (yych != 'p') goto yy31; -yy143: +yy141: yych = *++p; - if (yych == 'E') goto yy144; + if (yych == 'E') goto yy142; if (yych != 'e') goto yy31; -yy144: +yy142: yych = *++p; - if (yych == 'A') goto yy145; + if (yych == 'A') goto yy143; if (yych != 'a') goto yy31; -yy145: +yy143: yych = *++p; if (yych == 'K') goto yy34; if (yych == 'k') goto yy34; goto yy31; -yy146: +yy144: yych = *++p; - if (yych == 'E') goto yy147; + if (yych == 'E') goto yy145; if (yych != 'e') goto yy31; -yy147: +yy145: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy148: +yy146: yych = *++p; if (yych <= 'S') { - if (yych == 'N') goto yy149; + if (yych == 'N') goto yy147; if (yych <= 'R') goto yy31; - goto yy150; + goto yy148; } else { if (yych <= 'n') { if (yych <= 'm') goto yy31; } else { - if (yych == 's') goto yy150; + if (yych == 's') goto yy148; goto yy31; } } -yy149: +yy147: yych = *++p; - if (yych == 'G') goto yy157; - if (yych == 'g') goto yy157; + if (yych == 'G') goto yy155; + if (yych == 'g') goto yy155; goto yy31; -yy150: +yy148: yych = *++p; - if (yych == 'M') goto yy151; + if (yych == 'M') goto yy149; if (yych != 'm') goto yy31; -yy151: +yy149: yych = *++p; - if (yych == 'E') goto yy152; + if (yych == 'E') goto yy150; if (yych != 'e') goto yy31; -yy152: +yy150: yych = *++p; - if (yych == 'S') goto yy153; + if (yych == 'S') goto yy151; if (yych != 's') goto yy31; -yy153: +yy151: yych = *++p; - if (yych == 'S') goto yy154; + if (yych == 'S') goto yy152; if (yych != 's') goto yy31; -yy154: +yy152: yych = *++p; - if (yych == 'A') goto yy155; + if (yych == 'A') goto yy153; if (yych != 'a') goto yy31; -yy155: +yy153: yych = *++p; - if (yych == 'G') goto yy156; + if (yych == 'G') goto yy154; if (yych != 'g') goto yy31; -yy156: +yy154: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy157: +yy155: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy158: +yy156: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy159: +yy157: yych = *++p; - if (yych == 'E') goto yy209; - if (yych == 'e') goto yy209; + if (yych == 'E') goto yy207; + if (yych == 'e') goto yy207; goto yy31; -yy160: +yy158: yych = *++p; if (yych == 'H') goto yy34; if (yych == 'h') goto yy34; goto yy31; -yy161: +yy159: yych = *++p; - if (yych == 'O') goto yy205; - if (yych == 'o') goto yy205; + if (yych == 'O') goto yy203; + if (yych == 'o') goto yy203; goto yy31; -yy162: +yy160: yych = *++p; if (yych <= 'L') { - if (yych == 'A') goto yy195; + if (yych == 'A') goto yy193; if (yych <= 'K') goto yy31; - goto yy196; + goto yy194; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy195; + goto yy193; } else { - if (yych == 'l') goto yy196; + if (yych == 'l') goto yy194; goto yy31; } } -yy163: +yy161: yych = *++p; if (yych <= 'S') { if (yych == 'B') goto yy34; @@ -1223,81 +1183,81 @@ yy163: goto yy31; } } -yy164: +yy162: yych = *++p; - if (yych == 'Y') goto yy193; - if (yych == 'y') goto yy193; + if (yych == 'Y') goto yy191; + if (yych == 'y') goto yy191; goto yy31; -yy165: +yy163: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy166: +yy164: yych = *++p; - if (yych == 'T') goto yy192; - if (yych == 't') goto yy192; + if (yych == 'T') goto yy190; + if (yych == 't') goto yy190; goto yy31; -yy167: +yy165: yych = *++p; if (yych <= 'S') { if (yych <= 'C') { if (yych <= 'B') goto yy31; - goto yy179; + goto yy177; } else { if (yych <= 'Q') goto yy31; - if (yych <= 'R') goto yy177; - goto yy178; + if (yych <= 'R') goto yy175; + goto yy176; } } else { if (yych <= 'q') { - if (yych == 'c') goto yy179; + if (yych == 'c') goto yy177; goto yy31; } else { - if (yych <= 'r') goto yy177; - if (yych <= 's') goto yy178; + if (yych <= 'r') goto yy175; + if (yych <= 's') goto yy176; goto yy31; } } -yy168: +yy166: yych = *++p; - if (yych == 'M') goto yy176; - if (yych == 'm') goto yy176; + if (yych == 'M') goto yy174; + if (yych == 'm') goto yy174; goto yy31; -yy169: +yy167: yych = *++p; if (yych <= 'P') { - if (yych == 'E') goto yy173; + if (yych == 'E') goto yy171; if (yych <= 'O') goto yy31; - goto yy174; + goto yy172; } else { if (yych <= 'e') { if (yych <= 'd') goto yy31; - goto yy173; + goto yy171; } else { - if (yych == 'p') goto yy174; + if (yych == 'p') goto yy172; goto yy31; } } -yy170: +yy168: yych = *++p; - if (yych == 'T') goto yy171; + if (yych == 'T') goto yy169; if (yych != 't') goto yy31; -yy171: +yy169: yych = *++p; - if (yych == 'T') goto yy172; + if (yych == 'T') goto yy170; if (yych != 't') goto yy31; -yy172: +yy170: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy173: +yy171: yych = *++p; - if (yych == 'V') goto yy175; - if (yych == 'v') goto yy175; + if (yych == 'V') goto yy173; + if (yych == 'v') goto yy173; goto yy31; -yy174: +yy172: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -1307,132 +1267,132 @@ yy174: if (yych == 's') goto yy34; goto yy31; } -yy175: +yy173: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy176: +yy174: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy177: +yy175: yych = *++p; - if (yych == 'V') goto yy189; - if (yych == 'v') goto yy189; + if (yych == 'V') goto yy187; + if (yych == 'v') goto yy187; goto yy31; -yy178: +yy176: yych = *++p; - if (yych == 'S') goto yy186; - if (yych == 's') goto yy186; + if (yych == 'S') goto yy184; + if (yych == 's') goto yy184; goto yy31; -yy179: +yy177: yych = *++p; - if (yych == 'O') goto yy180; + if (yych == 'O') goto yy178; if (yych != 'o') goto yy31; -yy180: +yy178: yych = *++p; - if (yych == 'N') goto yy181; + if (yych == 'N') goto yy179; if (yych != 'n') goto yy31; -yy181: +yy179: yych = *++p; - if (yych == 'D') goto yy182; + if (yych == 'D') goto yy180; if (yych != 'd') goto yy31; -yy182: +yy180: yych = *++p; - if (yych == 'L') goto yy183; + if (yych == 'L') goto yy181; if (yych != 'l') goto yy31; -yy183: +yy181: yych = *++p; - if (yych == 'I') goto yy184; + if (yych == 'I') goto yy182; if (yych != 'i') goto yy31; -yy184: +yy182: yych = *++p; - if (yych == 'F') goto yy185; + if (yych == 'F') goto yy183; if (yych != 'f') goto yy31; -yy185: +yy183: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy186: +yy184: yych = *++p; - if (yych == 'I') goto yy187; + if (yych == 'I') goto yy185; if (yych != 'i') goto yy31; -yy187: +yy185: yych = *++p; - if (yych == 'O') goto yy188; + if (yych == 'O') goto yy186; if (yych != 'o') goto yy31; -yy188: +yy186: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy189: +yy187: yych = *++p; - if (yych == 'I') goto yy190; + if (yych == 'I') goto yy188; if (yych != 'i') goto yy31; -yy190: +yy188: yych = *++p; - if (yych == 'C') goto yy191; + if (yych == 'C') goto yy189; if (yych != 'c') goto yy31; -yy191: +yy189: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy192: +yy190: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy193: +yy191: yych = *++p; - if (yych == 'P') goto yy194; + if (yych == 'P') goto yy192; if (yych != 'p') goto yy31; -yy194: +yy192: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy195: +yy193: yych = *++p; - if (yych == 'P') goto yy199; - if (yych == 'p') goto yy199; + if (yych == 'P') goto yy197; + if (yych == 'p') goto yy197; goto yy31; -yy196: +yy194: yych = *++p; - if (yych == 'D') goto yy197; + if (yych == 'D') goto yy195; if (yych != 'd') goto yy31; -yy197: +yy195: yych = *++p; - if (yych == 'A') goto yy198; + if (yych == 'A') goto yy196; if (yych != 'a') goto yy31; -yy198: +yy196: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy199: +yy197: yych = *++p; if (yych != '.') goto yy31; yych = *++p; - if (yych == 'B') goto yy201; + if (yych == 'B') goto yy199; if (yych != 'b') goto yy31; -yy201: +yy199: yych = *++p; - if (yych == 'E') goto yy202; + if (yych == 'E') goto yy200; if (yych != 'e') goto yy31; -yy202: +yy200: yych = *++p; - if (yych == 'E') goto yy203; + if (yych == 'E') goto yy201; if (yych != 'e') goto yy31; -yy203: +yy201: yych = *++p; - if (yych == 'P') goto yy204; + if (yych == 'P') goto yy202; if (yych != 'p') goto yy31; -yy204: +yy202: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -1442,290 +1402,290 @@ yy204: if (yych == 's') goto yy34; goto yy31; } -yy205: +yy203: yych = *++p; - if (yych == 'T') goto yy206; + if (yych == 'T') goto yy204; if (yych != 't') goto yy31; -yy206: +yy204: yych = *++p; - if (yych == 'I') goto yy207; + if (yych == 'I') goto yy205; if (yych != 'i') goto yy31; -yy207: +yy205: yych = *++p; - if (yych == 'F') goto yy208; + if (yych == 'F') goto yy206; if (yych != 'f') goto yy31; -yy208: +yy206: yych = *++p; if (yych == 'Y') goto yy34; if (yych == 'y') goto yy34; goto yy31; -yy209: +yy207: yych = *++p; - if (yych == 'A') goto yy210; + if (yych == 'A') goto yy208; if (yych != 'a') goto yy31; -yy210: +yy208: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy211: +yy209: yych = *++p; if (yych <= 'S') { - if (yych == 'M') goto yy223; + if (yych == 'M') goto yy221; if (yych <= 'R') goto yy31; - goto yy222; + goto yy220; } else { if (yych <= 'm') { if (yych <= 'l') goto yy31; - goto yy223; + goto yy221; } else { - if (yych == 's') goto yy222; + if (yych == 's') goto yy220; goto yy31; } } -yy212: +yy210: yych = *++p; - if (yych == 'Y') goto yy220; - if (yych == 'y') goto yy220; + if (yych == 'Y') goto yy218; + if (yych == 'y') goto yy218; goto yy31; -yy213: +yy211: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy214: +yy212: yych = *++p; - if (yych == 'S') goto yy215; + if (yych == 'S') goto yy213; if (yych != 's') goto yy31; -yy215: +yy213: yych = *++p; if (yych <= 'N') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'O') goto yy216; + if (yych <= 'O') goto yy214; if (yych != 'o') goto yy31; } -yy216: +yy214: yych = *++p; - if (yych == 'U') goto yy217; + if (yych == 'U') goto yy215; if (yych != 'u') goto yy31; -yy217: +yy215: yych = *++p; - if (yych == 'R') goto yy218; + if (yych == 'R') goto yy216; if (yych != 'r') goto yy31; -yy218: +yy216: yych = *++p; - if (yych == 'C') goto yy219; + if (yych == 'C') goto yy217; if (yych != 'c') goto yy31; -yy219: +yy217: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy220: +yy218: yych = *++p; - if (yych == 'N') goto yy221; + if (yych == 'N') goto yy219; if (yych != 'n') goto yy31; -yy221: +yy219: yych = *++p; if (yych == 'C') goto yy34; if (yych == 'c') goto yy34; goto yy31; -yy222: +yy220: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy223: +yy221: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy224: +yy222: yych = *++p; - if (yych == 'Y') goto yy244; - if (yych == 'y') goto yy244; + if (yych == 'Y') goto yy242; + if (yych == 'y') goto yy242; goto yy31; -yy225: +yy223: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy241; + if (yych == 'E') goto yy239; if (yych <= 'N') goto yy31; - goto yy242; + goto yy240; } else { if (yych <= 'e') { if (yych <= 'd') goto yy31; - goto yy241; + goto yy239; } else { - if (yych == 'o') goto yy242; + if (yych == 'o') goto yy240; goto yy31; } } -yy226: +yy224: yych = *++p; - if (yych == 'A') goto yy236; - if (yych == 'a') goto yy236; + if (yych == 'A') goto yy234; + if (yych == 'a') goto yy234; goto yy31; -yy227: +yy225: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy229; + if (yych == 'L') goto yy227; if (yych <= 'O') goto yy31; - goto yy230; + goto yy228; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy229; + goto yy227; } else { - if (yych == 'p') goto yy230; + if (yych == 'p') goto yy228; goto yy31; } } -yy228: +yy226: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy229: +yy227: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy230: +yy228: yych = *++p; - if (yych == 'A') goto yy231; + if (yych == 'A') goto yy229; if (yych != 'a') goto yy31; -yy231: +yy229: yych = *++p; - if (yych == 'R') goto yy232; + if (yych == 'R') goto yy230; if (yych != 'r') goto yy31; -yy232: +yy230: yych = *++p; - if (yych == 'A') goto yy233; + if (yych == 'A') goto yy231; if (yych != 'a') goto yy31; -yy233: +yy231: yych = *++p; - if (yych == 'Z') goto yy234; + if (yych == 'Z') goto yy232; if (yych != 'z') goto yy31; -yy234: +yy232: yych = *++p; - if (yych == 'Z') goto yy235; + if (yych == 'Z') goto yy233; if (yych != 'z') goto yy31; -yy235: +yy233: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy236: +yy234: yych = *++p; - if (yych == 'T') goto yy237; + if (yych == 'T') goto yy235; if (yych != 't') goto yy31; -yy237: +yy235: yych = *++p; - if (yych == 'F') goto yy238; + if (yych == 'F') goto yy236; if (yych != 'f') goto yy31; -yy238: +yy236: yych = *++p; - if (yych == 'O') goto yy239; + if (yych == 'O') goto yy237; if (yych != 'o') goto yy31; -yy239: +yy237: yych = *++p; - if (yych == 'R') goto yy240; + if (yych == 'R') goto yy238; if (yych != 'r') goto yy31; -yy240: +yy238: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy241: +yy239: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy242: +yy240: yych = *++p; - if (yych == 'X') goto yy243; + if (yych == 'X') goto yy241; if (yych != 'x') goto yy31; -yy243: +yy241: yych = *++p; if (yych == 'Y') goto yy34; if (yych == 'y') goto yy34; goto yy31; -yy244: +yy242: yych = *++p; if (yych == 'C') goto yy34; if (yych == 'c') goto yy34; goto yy31; -yy245: +yy243: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy246: +yy244: yych = *++p; - if (yych == 'A') goto yy247; + if (yych == 'A') goto yy245; if (yych != 'a') goto yy31; -yy247: +yy245: yych = *++p; - if (yych == 'Q') goto yy248; + if (yych == 'Q') goto yy246; if (yych != 'q') goto yy31; -yy248: +yy246: yych = *++p; - if (yych == 'U') goto yy249; + if (yych == 'U') goto yy247; if (yych != 'u') goto yy31; -yy249: +yy247: yych = *++p; - if (yych == 'E') goto yy250; + if (yych == 'E') goto yy248; if (yych != 'e') goto yy31; -yy250: +yy248: yych = *++p; - if (yych == 'L') goto yy251; + if (yych == 'L') goto yy249; if (yych != 'l') goto yy31; -yy251: +yy249: yych = *++p; - if (yych == 'O') goto yy252; + if (yych == 'O') goto yy250; if (yych != 'o') goto yy31; -yy252: +yy250: yych = *++p; - if (yych == 'C') goto yy253; + if (yych == 'C') goto yy251; if (yych != 'c') goto yy31; -yy253: +yy251: yych = *++p; - if (yych == 'K') goto yy254; + if (yych == 'K') goto yy252; if (yych != 'k') goto yy31; -yy254: +yy252: yych = *++p; - if (yych == 'T') goto yy255; + if (yych == 'T') goto yy253; if (yych != 't') goto yy31; -yy255: +yy253: yych = *++p; - if (yych == 'O') goto yy256; + if (yych == 'O') goto yy254; if (yych != 'o') goto yy31; -yy256: +yy254: yych = *++p; - if (yych == 'K') goto yy257; + if (yych == 'K') goto yy255; if (yych != 'k') goto yy31; -yy257: +yy255: yych = *++p; - if (yych == 'E') goto yy258; + if (yych == 'E') goto yy256; if (yych != 'e') goto yy31; -yy258: +yy256: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy259: +yy257: yych = *++p; - if (yych == 'T') goto yy266; - if (yych == 't') goto yy266; + if (yych == 'T') goto yy264; + if (yych == 't') goto yy264; goto yy31; -yy260: +yy258: yych = *++p; - if (yych == 'T') goto yy265; - if (yych == 't') goto yy265; + if (yych == 'T') goto yy263; + if (yych == 't') goto yy263; goto yy31; -yy261: +yy259: yych = *++p; if (yych <= 'G') { if (yych == ':') goto yy35; @@ -1735,208 +1695,208 @@ yy261: if (yych == 'h') goto yy34; goto yy31; } -yy262: +yy260: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy263: +yy261: yych = *++p; - if (yych == 'W') goto yy264; + if (yych == 'W') goto yy262; if (yych != 'w') goto yy31; -yy264: +yy262: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy265: +yy263: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy266: +yy264: yych = *++p; - if (yych == 'E') goto yy267; + if (yych == 'E') goto yy265; if (yych != 'e') goto yy31; -yy267: +yy265: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy268: +yy266: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy269: +yy267: yych = *++p; if (yych <= 'P') { - if (yych == 'M') goto yy300; + if (yych == 'M') goto yy298; if (yych <= 'O') goto yy31; - goto yy299; + goto yy297; } else { if (yych <= 'm') { if (yych <= 'l') goto yy31; - goto yy300; + goto yy298; } else { - if (yych == 'p') goto yy299; + if (yych == 'p') goto yy297; goto yy31; } } -yy270: +yy268: yych = *++p; if (yych <= 'Q') { if (yych <= '-') { if (yych <= ',') goto yy31; - goto yy292; + goto yy290; } else { - if (yych == 'N') goto yy293; + if (yych == 'N') goto yy291; goto yy31; } } else { if (yych <= 'n') { - if (yych <= 'R') goto yy291; + if (yych <= 'R') goto yy289; if (yych <= 'm') goto yy31; - goto yy293; + goto yy291; } else { - if (yych == 'r') goto yy291; + if (yych == 'r') goto yy289; goto yy31; } } -yy271: +yy269: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy272: +yy270: yych = *++p; - if (yych == 'S') goto yy287; - if (yych == 's') goto yy287; + if (yych == 'S') goto yy285; + if (yych == 's') goto yy285; goto yy31; -yy273: +yy271: yych = *++p; switch (yych) { case 'G': - case 'g': goto yy278; + case 'g': goto yy276; case 'I': - case 'i': goto yy277; + case 'i': goto yy275; case 'P': - case 'p': goto yy279; + case 'p': goto yy277; case 'R': - case 'r': goto yy280; + case 'r': goto yy278; default: goto yy31; } -yy274: +yy272: yych = *++p; - if (yych == 'Q') goto yy276; - if (yych == 'q') goto yy276; + if (yych == 'Q') goto yy274; + if (yych == 'q') goto yy274; goto yy31; -yy275: +yy273: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy276: +yy274: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy277: +yy275: yych = *++p; - if (yych == 'L') goto yy285; - if (yych == 'l') goto yy285; + if (yych == 'L') goto yy283; + if (yych == 'l') goto yy283; goto yy31; -yy278: +yy276: yych = *++p; - if (yych == 'N') goto yy283; - if (yych == 'n') goto yy283; + if (yych == 'N') goto yy281; + if (yych == 'n') goto yy281; goto yy31; -yy279: +yy277: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy280: +yy278: yych = *++p; - if (yych == 'K') goto yy281; + if (yych == 'K') goto yy279; if (yych != 'k') goto yy31; -yy281: +yy279: yych = *++p; - if (yych == 'E') goto yy282; + if (yych == 'E') goto yy280; if (yych != 'e') goto yy31; -yy282: +yy280: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy283: +yy281: yych = *++p; - if (yych == 'E') goto yy284; + if (yych == 'E') goto yy282; if (yych != 'e') goto yy31; -yy284: +yy282: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy285: +yy283: yych = *++p; - if (yych == 'T') goto yy286; + if (yych == 'T') goto yy284; if (yych != 't') goto yy31; -yy286: +yy284: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy287: +yy285: yych = *++p; - if (yych == 'S') goto yy288; + if (yych == 'S') goto yy286; if (yych != 's') goto yy31; -yy288: +yy286: yych = *++p; - if (yych == 'A') goto yy289; + if (yych == 'A') goto yy287; if (yych != 'a') goto yy31; -yy289: +yy287: yych = *++p; - if (yych == 'G') goto yy290; + if (yych == 'G') goto yy288; if (yych != 'g') goto yy31; -yy290: +yy288: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy291: +yy289: yych = *++p; - if (yych == 'P') goto yy298; - if (yych == 'p') goto yy298; + if (yych == 'P') goto yy296; + if (yych == 'p') goto yy296; goto yy31; -yy292: +yy290: yych = *++p; - if (yych == 'H') goto yy295; - if (yych == 'h') goto yy295; + if (yych == 'H') goto yy293; + if (yych == 'h') goto yy293; goto yy31; -yy293: +yy291: yych = *++p; - if (yych == 'I') goto yy294; + if (yych == 'I') goto yy292; if (yych != 'i') goto yy31; -yy294: +yy292: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy295: +yy293: yych = *++p; - if (yych == 'E') goto yy296; + if (yych == 'E') goto yy294; if (yych != 'e') goto yy31; -yy296: +yy294: yych = *++p; - if (yych == 'L') goto yy297; + if (yych == 'L') goto yy295; if (yych != 'l') goto yy31; -yy297: +yy295: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy298: +yy296: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -1946,64 +1906,64 @@ yy298: if (yych == 's') goto yy34; goto yy31; } -yy299: +yy297: yych = *++p; - if (yych == 'D') goto yy303; - if (yych == 'd') goto yy303; + if (yych == 'D') goto yy301; + if (yych == 'd') goto yy301; goto yy31; -yy300: +yy298: yych = *++p; - if (yych == 'B') goto yy301; + if (yych == 'B') goto yy299; if (yych != 'b') goto yy31; -yy301: +yy299: yych = *++p; - if (yych == 'L') goto yy302; + if (yych == 'L') goto yy300; if (yych != 'l') goto yy31; -yy302: +yy300: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy303: +yy301: yych = *++p; - if (yych == 'A') goto yy304; + if (yych == 'A') goto yy302; if (yych != 'a') goto yy31; -yy304: +yy302: yych = *++p; - if (yych == 'T') goto yy305; + if (yych == 'T') goto yy303; if (yych != 't') goto yy31; -yy305: +yy303: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy306: +yy304: yych = *++p; - if (yych == 'A') goto yy311; - if (yych == 'a') goto yy311; + if (yych == 'A') goto yy309; + if (yych == 'a') goto yy309; goto yy31; -yy307: +yy305: yych = *++p; - if (yych == 'S') goto yy308; + if (yych == 'S') goto yy306; if (yych != 's') goto yy31; -yy308: +yy306: yych = *++p; - if (yych == 'T') goto yy309; + if (yych == 'T') goto yy307; if (yych != 't') goto yy31; -yy309: +yy307: yych = *++p; - if (yych == 'F') goto yy310; + if (yych == 'F') goto yy308; if (yych != 'f') goto yy31; -yy310: +yy308: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy311: +yy309: yych = *++p; - if (yych == 'P') goto yy312; + if (yych == 'P') goto yy310; if (yych != 'p') goto yy31; -yy312: +yy310: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2013,27 +1973,27 @@ yy312: if (yych == 's') goto yy34; goto yy31; } -yy313: +yy311: yych = *++p; - if (yych == 'M') goto yy336; - if (yych == 'm') goto yy336; + if (yych == 'M') goto yy334; + if (yych == 'm') goto yy334; goto yy31; -yy314: +yy312: yych = *++p; if (yych <= 'I') { - if (yych == 'C') goto yy325; + if (yych == 'C') goto yy323; if (yych <= 'H') goto yy31; - goto yy324; + goto yy322; } else { if (yych <= 'c') { if (yych <= 'b') goto yy31; - goto yy325; + goto yy323; } else { - if (yych == 'i') goto yy324; + if (yych == 'i') goto yy322; goto yy31; } } -yy315: +yy313: yych = *++p; if (yych <= 'P') { if (yych == 'N') goto yy34; @@ -2048,67 +2008,67 @@ yy315: goto yy31; } } -yy316: +yy314: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy322; + if (yych == 'A') goto yy320; if (yych <= 'N') goto yy31; - goto yy323; + goto yy321; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy322; + goto yy320; } else { - if (yych == 'o') goto yy323; + if (yych == 'o') goto yy321; goto yy31; } } -yy317: +yy315: yych = *++p; - if (yych == 'F') goto yy321; - if (yych == 'f') goto yy321; + if (yych == 'F') goto yy319; + if (yych == 'f') goto yy319; goto yy31; -yy318: +yy316: yych = *++p; if (yych <= '@') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'A') goto yy320; - if (yych == 'a') goto yy320; + if (yych <= 'A') goto yy318; + if (yych == 'a') goto yy318; goto yy31; } -yy319: +yy317: yych = *++p; if (yych == 'X') goto yy34; if (yych == 'x') goto yy34; goto yy31; -yy320: +yy318: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy321: +yy319: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy322: +yy320: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy323: +yy321: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy324: +yy322: yych = *++p; - if (yych == 'S') goto yy326; - if (yych == 's') goto yy326; + if (yych == 'S') goto yy324; + if (yych == 's') goto yy324; goto yy31; -yy325: +yy323: yych = *++p; if (yych <= ':') { if (yych == '6') goto yy34; @@ -2123,60 +2083,60 @@ yy325: goto yy31; } } -yy326: +yy324: yych = *++p; - if (yych == '.') goto yy327; + if (yych == '.') goto yy325; if (yych == ':') goto yy35; goto yy31; -yy327: +yy325: yych = *++p; if (yych <= 'X') { if (yych <= 'K') { - if (yych == 'B') goto yy330; + if (yych == 'B') goto yy328; goto yy31; } else { - if (yych <= 'L') goto yy328; + if (yych <= 'L') goto yy326; if (yych <= 'W') goto yy31; - goto yy329; + goto yy327; } } else { if (yych <= 'k') { - if (yych == 'b') goto yy330; + if (yych == 'b') goto yy328; goto yy31; } else { - if (yych <= 'l') goto yy328; - if (yych == 'x') goto yy329; + if (yych <= 'l') goto yy326; + if (yych == 'x') goto yy327; goto yy31; } } -yy328: +yy326: yych = *++p; - if (yych == 'W') goto yy335; - if (yych == 'w') goto yy335; + if (yych == 'W') goto yy333; + if (yych == 'w') goto yy333; goto yy31; -yy329: +yy327: yych = *++p; - if (yych == 'P') goto yy333; - if (yych == 'p') goto yy333; + if (yych == 'P') goto yy331; + if (yych == 'p') goto yy331; goto yy31; -yy330: +yy328: yych = *++p; - if (yych == 'E') goto yy331; + if (yych == 'E') goto yy329; if (yych != 'e') goto yy31; -yy331: +yy329: yych = *++p; - if (yych == 'E') goto yy332; + if (yych == 'E') goto yy330; if (yych != 'e') goto yy31; -yy332: +yy330: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy333: +yy331: yych = *++p; - if (yych == 'C') goto yy334; + if (yych == 'C') goto yy332; if (yych != 'c') goto yy31; -yy334: +yy332: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2186,37 +2146,37 @@ yy334: if (yych == 's') goto yy34; goto yy31; } -yy335: +yy333: yych = *++p; if (yych == 'Z') goto yy34; if (yych == 'z') goto yy34; goto yy31; -yy336: +yy334: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy337: +yy335: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy338: +yy336: yych = *++p; - if (yych == 'T') goto yy341; - if (yych == 't') goto yy341; + if (yych == 'T') goto yy339; + if (yych == 't') goto yy339; goto yy31; -yy339: +yy337: yych = *++p; if (yych != '2') goto yy31; yych = *++p; if (yych == '3') goto yy34; goto yy31; -yy341: +yy339: yych = *++p; - if (yych == 'P') goto yy342; + if (yych == 'P') goto yy340; if (yych != 'p') goto yy31; -yy342: +yy340: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2226,202 +2186,202 @@ yy342: if (yych == 's') goto yy34; goto yy31; } -yy343: +yy341: yych = *++p; - if (yych == 'A') goto yy359; - if (yych == 'a') goto yy359; + if (yych == 'A') goto yy357; + if (yych == 'a') goto yy357; goto yy31; -yy344: +yy342: yych = *++p; if (yych <= 'Z') { if (yych == 'T') goto yy34; if (yych <= 'Y') goto yy31; - goto yy350; + goto yy348; } else { if (yych <= 't') { if (yych <= 's') goto yy31; goto yy34; } else { - if (yych == 'z') goto yy350; + if (yych == 'z') goto yy348; goto yy31; } } -yy345: +yy343: yych = *++p; if (yych <= 'O') { if (yych == ':') goto yy35; goto yy31; } else { - if (yych <= 'P') goto yy347; - if (yych == 'p') goto yy347; + if (yych <= 'P') goto yy345; + if (yych == 'p') goto yy345; goto yy31; } -yy346: +yy344: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy347: +yy345: yych = *++p; - if (yych == 'H') goto yy348; + if (yych == 'H') goto yy346; if (yych != 'h') goto yy31; -yy348: +yy346: yych = *++p; - if (yych == 'E') goto yy349; + if (yych == 'E') goto yy347; if (yych != 'e') goto yy31; -yy349: +yy347: yych = *++p; if (yych == 'R') goto yy34; if (yych == 'r') goto yy34; goto yy31; -yy350: +yy348: yych = *++p; - if (yych == 'M') goto yy351; + if (yych == 'M') goto yy349; if (yych != 'm') goto yy31; -yy351: +yy349: yych = *++p; - if (yych == 'O') goto yy352; + if (yych == 'O') goto yy350; if (yych != 'o') goto yy31; -yy352: +yy350: yych = *++p; - if (yych == 'P') goto yy353; + if (yych == 'P') goto yy351; if (yych != 'p') goto yy31; -yy353: +yy351: yych = *++p; - if (yych == 'R') goto yy354; + if (yych == 'R') goto yy352; if (yych != 'r') goto yy31; -yy354: +yy352: yych = *++p; - if (yych == 'O') goto yy355; + if (yych == 'O') goto yy353; if (yych != 'o') goto yy31; -yy355: +yy353: yych = *++p; - if (yych == 'J') goto yy356; + if (yych == 'J') goto yy354; if (yych != 'j') goto yy31; -yy356: +yy354: yych = *++p; - if (yych == 'E') goto yy357; + if (yych == 'E') goto yy355; if (yych != 'e') goto yy31; -yy357: +yy355: yych = *++p; - if (yych == 'C') goto yy358; + if (yych == 'C') goto yy356; if (yych != 'c') goto yy31; -yy358: +yy356: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy359: +yy357: yych = *++p; - if (yych == 'L') goto yy360; + if (yych == 'L') goto yy358; if (yych != 'l') goto yy31; -yy360: +yy358: yych = *++p; if (yych == 'K') goto yy34; if (yych == 'k') goto yy34; goto yy31; -yy361: +yy359: yych = *++p; if (yych <= 'S') { if (yych <= 'M') { - if (yych == 'L') goto yy371; + if (yych == 'L') goto yy369; goto yy31; } else { - if (yych <= 'N') goto yy372; + if (yych <= 'N') goto yy370; if (yych <= 'R') goto yy31; - goto yy373; + goto yy371; } } else { if (yych <= 'm') { - if (yych == 'l') goto yy371; + if (yych == 'l') goto yy369; goto yy31; } else { - if (yych <= 'n') goto yy372; - if (yych == 's') goto yy373; + if (yych <= 'n') goto yy370; + if (yych == 's') goto yy371; goto yy31; } } -yy362: +yy360: yych = *++p; - if (yych == 'E') goto yy370; - if (yych == 'e') goto yy370; + if (yych == 'E') goto yy368; + if (yych == 'e') goto yy368; goto yy31; -yy363: +yy361: yych = *++p; - if (yych == 'C') goto yy365; - if (yych == 'c') goto yy365; + if (yych == 'C') goto yy363; + if (yych == 'c') goto yy363; goto yy31; -yy364: +yy362: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy365: +yy363: yych = *++p; - if (yych == 'E') goto yy366; + if (yych == 'E') goto yy364; if (yych != 'e') goto yy31; -yy366: +yy364: yych = *++p; - if (yych == 'T') goto yy367; + if (yych == 'T') goto yy365; if (yych != 't') goto yy31; -yy367: +yy365: yych = *++p; - if (yych == 'I') goto yy368; + if (yych == 'I') goto yy366; if (yych != 'i') goto yy31; -yy368: +yy366: yych = *++p; - if (yych == 'M') goto yy369; + if (yych == 'M') goto yy367; if (yych != 'm') goto yy31; -yy369: +yy367: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy370: +yy368: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy371: +yy369: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy372: +yy370: yych = *++p; - if (yych == 'G') goto yy374; - if (yych == 'g') goto yy374; + if (yych == 'G') goto yy372; + if (yych == 'g') goto yy372; goto yy31; -yy373: +yy371: yych = *++p; if (yych == 'H') goto yy34; if (yych == 'h') goto yy34; goto yy31; -yy374: +yy372: yych = *++p; - if (yych == 'E') goto yy375; + if (yych == 'E') goto yy373; if (yych != 'e') goto yy31; -yy375: +yy373: yych = *++p; if (yych == 'R') goto yy34; if (yych == 'r') goto yy34; goto yy31; -yy376: +yy374: yych = *++p; - if (yych == 'T') goto yy394; - if (yych == 't') goto yy394; + if (yych == 'T') goto yy392; + if (yych == 't') goto yy392; goto yy31; -yy377: +yy375: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy378: +yy376: yych = *++p; if (yych == 'M') goto yy34; if (yych == 'm') goto yy34; goto yy31; -yy379: +yy377: yych = *++p; if (yych <= 'S') { if (yych == 'P') goto yy34; @@ -2436,26 +2396,26 @@ yy379: goto yy31; } } -yy380: +yy378: yych = *++p; - if (yych == 'I') goto yy388; - if (yych == 'i') goto yy388; + if (yych == 'I') goto yy386; + if (yych == 'i') goto yy386; goto yy31; -yy381: +yy379: yych = *++p; - if (yych == 'A') goto yy387; - if (yych == 'a') goto yy387; + if (yych == 'A') goto yy385; + if (yych == 'a') goto yy385; goto yy31; -yy382: +yy380: yych = *++p; - if (yych == 'O') goto yy385; - if (yych == 'o') goto yy385; + if (yych == 'O') goto yy383; + if (yych == 'o') goto yy383; goto yy31; -yy383: +yy381: yych = *++p; - if (yych == 'A') goto yy384; + if (yych == 'A') goto yy382; if (yych != 'a') goto yy31; -yy384: +yy382: yych = *++p; if (yych <= 'R') { if (yych == ':') goto yy35; @@ -2465,80 +2425,80 @@ yy384: if (yych == 's') goto yy34; goto yy31; } -yy385: +yy383: yych = *++p; - if (yych == 'U') goto yy386; + if (yych == 'U') goto yy384; if (yych != 'u') goto yy31; -yy386: +yy384: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy387: +yy385: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy388: +yy386: yych = *++p; - if (yych == 'U') goto yy389; + if (yych == 'U') goto yy387; if (yych != 'u') goto yy31; -yy389: +yy387: yych = *++p; - if (yych == 'M') goto yy390; + if (yych == 'M') goto yy388; if (yych != 'm') goto yy31; -yy390: +yy388: yych = *++p; - if (yych == 'X') goto yy391; + if (yych == 'X') goto yy389; if (yych != 'x') goto yy31; -yy391: +yy389: yych = *++p; - if (yych == 'T') goto yy392; + if (yych == 'T') goto yy390; if (yych != 't') goto yy31; -yy392: +yy390: yych = *++p; - if (yych == 'R') goto yy393; + if (yych == 'R') goto yy391; if (yych != 'r') goto yy31; -yy393: +yy391: yych = *++p; if (yych == 'A') goto yy34; if (yych == 'a') goto yy34; goto yy31; -yy394: +yy392: yych = *++p; - if (yych == 'A') goto yy395; + if (yych == 'A') goto yy393; if (yych != 'a') goto yy31; -yy395: +yy393: yych = *++p; - if (yych == 'C') goto yy396; + if (yych == 'C') goto yy394; if (yych != 'c') goto yy31; -yy396: +yy394: yych = *++p; - if (yych == 'H') goto yy397; + if (yych == 'H') goto yy395; if (yych != 'h') goto yy31; -yy397: +yy395: yych = *++p; - if (yych == 'M') goto yy398; + if (yych == 'M') goto yy396; if (yych != 'm') goto yy31; -yy398: +yy396: yych = *++p; - if (yych == 'E') goto yy399; + if (yych == 'E') goto yy397; if (yych != 'e') goto yy31; -yy399: +yy397: yych = *++p; - if (yych == 'N') goto yy400; + if (yych == 'N') goto yy398; if (yych != 'n') goto yy31; -yy400: +yy398: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy401: +yy399: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy402: +yy400: yych = *++p; if (yych <= 'V') { if (yych == 'R') goto yy34; @@ -2552,404 +2512,404 @@ yy402: } } yych = *++p; - if (yych == 'A') goto yy404; + if (yych == 'A') goto yy402; if (yych != 'a') goto yy31; -yy404: +yy402: yych = *++p; - if (yych == 'S') goto yy405; + if (yych == 'S') goto yy403; if (yych != 's') goto yy31; -yy405: +yy403: yych = *++p; - if (yych == 'C') goto yy406; + if (yych == 'C') goto yy404; if (yych != 'c') goto yy31; -yy406: +yy404: yych = *++p; - if (yych == 'R') goto yy407; + if (yych == 'R') goto yy405; if (yych != 'r') goto yy31; -yy407: +yy405: yych = *++p; - if (yych == 'I') goto yy408; + if (yych == 'I') goto yy406; if (yych != 'i') goto yy31; -yy408: +yy406: yych = *++p; - if (yych == 'P') goto yy409; + if (yych == 'P') goto yy407; if (yych != 'p') goto yy31; -yy409: +yy407: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy410: +yy408: yych = *++p; if (yych == 'B') goto yy34; if (yych == 'b') goto yy34; goto yy31; -yy411: +yy409: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy412: +yy410: yych = *++p; - if (yych == 'N') goto yy419; - if (yych == 'n') goto yy419; + if (yych == 'N') goto yy417; + if (yych == 'n') goto yy417; goto yy31; -yy413: +yy411: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy414: +yy412: yych = *++p; - if (yych == 'C') goto yy418; - if (yych == 'c') goto yy418; + if (yych == 'C') goto yy416; + if (yych == 'c') goto yy416; goto yy31; -yy415: +yy413: yych = *++p; if (yych <= 'V') { - if (yych == 'T') goto yy417; + if (yych == 'T') goto yy415; if (yych <= 'U') goto yy31; goto yy34; } else { if (yych <= 't') { if (yych <= 's') goto yy31; - goto yy417; + goto yy415; } else { if (yych == 'v') goto yy34; goto yy31; } } -yy416: +yy414: yych = *++p; if (yych == 'I') goto yy34; if (yych == 'i') goto yy34; goto yy31; -yy417: +yy415: yych = *++p; if (yych == 'A') goto yy34; if (yych == 'a') goto yy34; goto yy31; -yy418: +yy416: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy419: +yy417: yych = *++p; - if (yych == 'A') goto yy420; + if (yych == 'A') goto yy418; if (yych != 'a') goto yy31; -yy420: +yy418: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'P') goto yy422; + if (yych == 'P') goto yy420; if (yych != 'p') goto yy31; -yy422: +yy420: yych = *++p; - if (yych == 'L') goto yy423; + if (yych == 'L') goto yy421; if (yych != 'l') goto yy31; -yy423: +yy421: yych = *++p; - if (yych == 'A') goto yy424; + if (yych == 'A') goto yy422; if (yych != 'a') goto yy31; -yy424: +yy422: yych = *++p; - if (yych == 'Y') goto yy425; + if (yych == 'Y') goto yy423; if (yych != 'y') goto yy31; -yy425: +yy423: yych = *++p; if (yych <= 'S') { - if (yych == 'C') goto yy426; + if (yych == 'C') goto yy424; if (yych <= 'R') goto yy31; - goto yy427; + goto yy425; } else { if (yych <= 'c') { if (yych <= 'b') goto yy31; } else { - if (yych == 's') goto yy427; + if (yych == 's') goto yy425; goto yy31; } } -yy426: +yy424: yych = *++p; - if (yych == 'O') goto yy432; - if (yych == 'o') goto yy432; + if (yych == 'O') goto yy430; + if (yych == 'o') goto yy430; goto yy31; -yy427: +yy425: yych = *++p; - if (yych == 'I') goto yy428; + if (yych == 'I') goto yy426; if (yych != 'i') goto yy31; -yy428: +yy426: yych = *++p; - if (yych == 'N') goto yy429; + if (yych == 'N') goto yy427; if (yych != 'n') goto yy31; -yy429: +yy427: yych = *++p; - if (yych == 'G') goto yy430; + if (yych == 'G') goto yy428; if (yych != 'g') goto yy31; -yy430: +yy428: yych = *++p; - if (yych == 'L') goto yy431; + if (yych == 'L') goto yy429; if (yych != 'l') goto yy31; -yy431: +yy429: yych = *++p; if (yych == 'E') goto yy34; if (yych == 'e') goto yy34; goto yy31; -yy432: +yy430: yych = *++p; - if (yych == 'N') goto yy433; + if (yych == 'N') goto yy431; if (yych != 'n') goto yy31; -yy433: +yy431: yych = *++p; - if (yych == 'T') goto yy434; + if (yych == 'T') goto yy432; if (yych != 't') goto yy31; -yy434: +yy432: yych = *++p; - if (yych == 'A') goto yy435; + if (yych == 'A') goto yy433; if (yych != 'a') goto yy31; -yy435: +yy433: yych = *++p; - if (yych == 'I') goto yy436; + if (yych == 'I') goto yy434; if (yych != 'i') goto yy31; -yy436: +yy434: yych = *++p; - if (yych == 'N') goto yy437; + if (yych == 'N') goto yy435; if (yych != 'n') goto yy31; -yy437: +yy435: yych = *++p; - if (yych == 'E') goto yy438; + if (yych == 'E') goto yy436; if (yych != 'e') goto yy31; -yy438: +yy436: yych = *++p; if (yych == 'R') goto yy34; if (yych == 'r') goto yy34; goto yy31; -yy439: +yy437: yych = *++p; if (yych == 'S') goto yy34; if (yych == 's') goto yy34; goto yy31; -yy440: +yy438: yych = *++p; if (yych <= 'N') { if (yych <= 'A') { if (yych <= '@') goto yy31; - goto yy462; + goto yy460; } else { if (yych <= 'L') goto yy31; - if (yych <= 'M') goto yy463; - goto yy464; + if (yych <= 'M') goto yy461; + goto yy462; } } else { if (yych <= 'l') { - if (yych == 'a') goto yy462; + if (yych == 'a') goto yy460; goto yy31; } else { - if (yych <= 'm') goto yy463; - if (yych <= 'n') goto yy464; + if (yych <= 'm') goto yy461; + if (yych <= 'n') goto yy462; goto yy31; } } -yy441: +yy439: yych = *++p; - if (yych == 'R') goto yy449; - if (yych == 'r') goto yy449; + if (yych == 'R') goto yy447; + if (yych == 'r') goto yy447; goto yy31; -yy442: +yy440: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy446; + if (yych == 'L') goto yy444; if (yych <= 'O') goto yy31; goto yy34; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy446; + goto yy444; } else { if (yych == 'p') goto yy34; goto yy31; } } -yy443: +yy441: yych = *++p; - if (yych == 'I') goto yy445; - if (yych == 'i') goto yy445; + if (yych == 'I') goto yy443; + if (yych == 'i') goto yy443; goto yy31; -yy444: +yy442: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy445: +yy443: yych = *++p; if (yych == 'D') goto yy34; if (yych == 'd') goto yy34; goto yy31; -yy446: +yy444: yych = *++p; - if (yych == 'L') goto yy447; + if (yych == 'L') goto yy445; if (yych != 'l') goto yy31; -yy447: +yy445: yych = *++p; - if (yych == 'T') goto yy448; + if (yych == 'T') goto yy446; if (yych != 't') goto yy31; -yy448: +yy446: yych = *++p; if (yych == 'O') goto yy34; if (yych == 'o') goto yy34; goto yy31; -yy449: +yy447: yych = *++p; - if (yych == 'O') goto yy450; + if (yych == 'O') goto yy448; if (yych != 'o') goto yy31; -yy450: +yy448: yych = *++p; - if (yych == 'M') goto yy451; + if (yych == 'M') goto yy449; if (yych != 'm') goto yy31; -yy451: +yy449: yych = *++p; - if (yych == 'E') goto yy452; + if (yych == 'E') goto yy450; if (yych != 'e') goto yy31; -yy452: +yy450: yych = *++p; - if (yych == '-') goto yy453; + if (yych == '-') goto yy451; if (yych == ':') goto yy35; goto yy31; -yy453: +yy451: yych = *++p; - if (yych == 'E') goto yy454; + if (yych == 'E') goto yy452; if (yych != 'e') goto yy31; -yy454: +yy452: yych = *++p; - if (yych == 'X') goto yy455; + if (yych == 'X') goto yy453; if (yych != 'x') goto yy31; -yy455: +yy453: yych = *++p; - if (yych == 'T') goto yy456; + if (yych == 'T') goto yy454; if (yych != 't') goto yy31; -yy456: +yy454: yych = *++p; - if (yych == 'E') goto yy457; + if (yych == 'E') goto yy455; if (yych != 'e') goto yy31; -yy457: +yy455: yych = *++p; - if (yych == 'N') goto yy458; + if (yych == 'N') goto yy456; if (yych != 'n') goto yy31; -yy458: +yy456: yych = *++p; - if (yych == 'S') goto yy459; + if (yych == 'S') goto yy457; if (yych != 's') goto yy31; -yy459: +yy457: yych = *++p; - if (yych == 'I') goto yy460; + if (yych == 'I') goto yy458; if (yych != 'i') goto yy31; -yy460: +yy458: yych = *++p; - if (yych == 'O') goto yy461; + if (yych == 'O') goto yy459; if (yych != 'o') goto yy31; -yy461: +yy459: yych = *++p; if (yych == 'N') goto yy34; if (yych == 'n') goto yy34; goto yy31; -yy462: +yy460: yych = *++p; if (yych == 'P') goto yy34; if (yych == 'p') goto yy34; goto yy31; -yy463: +yy461: yych = *++p; - if (yych == '-') goto yy468; + if (yych == '-') goto yy466; goto yy31; -yy464: +yy462: yych = *++p; - if (yych == 'T') goto yy465; + if (yych == 'T') goto yy463; if (yych != 't') goto yy31; -yy465: +yy463: yych = *++p; - if (yych == 'E') goto yy466; + if (yych == 'E') goto yy464; if (yych != 'e') goto yy31; -yy466: +yy464: yych = *++p; - if (yych == 'N') goto yy467; + if (yych == 'N') goto yy465; if (yych != 'n') goto yy31; -yy467: +yy465: yych = *++p; if (yych == 'T') goto yy34; if (yych == 't') goto yy34; goto yy31; -yy468: +yy466: yych = *++p; - if (yych == 'E') goto yy469; + if (yych == 'E') goto yy467; if (yych != 'e') goto yy31; -yy469: +yy467: yych = *++p; - if (yych == 'V') goto yy470; + if (yych == 'V') goto yy468; if (yych != 'v') goto yy31; -yy470: +yy468: yych = *++p; - if (yych == 'E') goto yy471; + if (yych == 'E') goto yy469; if (yych != 'e') goto yy31; -yy471: +yy469: yych = *++p; - if (yych == 'N') goto yy472; + if (yych == 'N') goto yy470; if (yych != 'n') goto yy31; -yy472: +yy470: yych = *++p; - if (yych == 'T') goto yy473; + if (yych == 'T') goto yy471; if (yych != 't') goto yy31; -yy473: +yy471: yych = *++p; - if (yych == 'B') goto yy474; + if (yych == 'B') goto yy472; if (yych != 'b') goto yy31; -yy474: +yy472: yych = *++p; - if (yych == 'R') goto yy475; + if (yych == 'R') goto yy473; if (yych != 'r') goto yy31; -yy475: +yy473: yych = *++p; - if (yych == 'I') goto yy476; + if (yych == 'I') goto yy474; if (yych != 'i') goto yy31; -yy476: +yy474: yych = *++p; - if (yych == 'T') goto yy477; + if (yych == 'T') goto yy475; if (yych != 't') goto yy31; -yy477: +yy475: yych = *++p; - if (yych == 'E') goto yy478; + if (yych == 'E') goto yy476; if (yych != 'e') goto yy31; -yy478: +yy476: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'A') goto yy480; + if (yych == 'A') goto yy478; if (yych != 'a') goto yy31; -yy480: +yy478: yych = *++p; - if (yych == 'T') goto yy481; + if (yych == 'T') goto yy479; if (yych != 't') goto yy31; -yy481: +yy479: yych = *++p; - if (yych == 'T') goto yy482; + if (yych == 'T') goto yy480; if (yych != 't') goto yy31; -yy482: +yy480: yych = *++p; - if (yych == 'E') goto yy483; + if (yych == 'E') goto yy481; if (yych != 'e') goto yy31; -yy483: +yy481: yych = *++p; - if (yych == 'N') goto yy484; + if (yych == 'N') goto yy482; if (yych != 'n') goto yy31; -yy484: +yy482: yych = *++p; - if (yych == 'D') goto yy485; + if (yych == 'D') goto yy483; if (yych != 'd') goto yy31; -yy485: +yy483: yych = *++p; - if (yych == 'E') goto yy486; + if (yych == 'E') goto yy484; if (yych != 'e') goto yy31; -yy486: +yy484: ++p; if ((yych = *p) == 'E') goto yy34; if (yych == 'e') goto yy34; @@ -2958,8 +2918,8 @@ yy486: } -// Try to match email autolink after first <, returning num of chars matched. -int _scan_autolink_email(const unsigned char *p) +// Try to match URI autolink after first <, returning number of chars matched. +int _scan_autolink_uri(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -2971,4932 +2931,7871 @@ int _scan_autolink_email(const unsigned char *p) 0, 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, 128, 128, 128, 128, 128, - 0, 0, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 128, 128, + 128, 128, 128, 128, 0, 128, 0, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 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, }; yych = *p; - if (yych <= ',') { - if (yych <= '!') { - if (yych == '\n') goto yy489; - if (yych <= ' ') goto yy491; - goto yy490; - } else { - if (yych <= '\'') { - if (yych <= '"') goto yy491; - goto yy490; - } else { - if (yych <= ')') goto yy491; - if (yych <= '+') goto yy490; - goto yy491; - } - } - } else { - if (yych <= '?') { - if (yych <= '<') { - if (yych <= '9') goto yy490; - goto yy491; - } else { - if (yych == '>') goto yy491; - goto yy490; - } - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy491; - goto yy490; - } else { - if (yych <= ']') goto yy491; - if (yych <= '~') goto yy490; - goto yy491; - } - } + switch (yych) { + case '\n': goto yy487; + case 'A': + case 'a': goto yy491; + case 'B': + case 'b': goto yy509; + case 'C': + case 'c': goto yy488; + case 'D': + case 'd': goto yy489; + case 'E': + case 'e': goto yy510; + case 'F': + case 'f': goto yy492; + case 'G': + case 'g': goto yy493; + case 'H': + case 'h': goto yy494; + case 'I': + case 'i': goto yy495; + case 'J': + case 'j': goto yy490; + case 'K': + case 'k': goto yy511; + case 'L': + case 'l': goto yy496; + case 'M': + case 'm': goto yy497; + case 'N': + case 'n': goto yy498; + case 'O': + case 'o': goto yy499; + case 'P': + case 'p': goto yy500; + case 'Q': + case 'q': goto yy512; + case 'R': + case 'r': goto yy501; + case 'S': + case 's': goto yy502; + case 'T': + case 't': goto yy503; + case 'U': + case 'u': goto yy504; + case 'V': + case 'v': goto yy505; + case 'W': + case 'w': goto yy506; + case 'X': + case 'x': goto yy507; + case 'Y': + case 'y': goto yy513; + case 'Z': + case 'z': goto yy508; + default: goto yy514; } -yy489: +yy487: { return 0; } +yy488: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': goto yy927; + case 'H': + case 'h': goto yy926; + case 'I': + case 'i': goto yy929; + case 'O': + case 'o': goto yy925; + case 'R': + case 'r': goto yy928; + case 'V': + case 'v': goto yy924; + default: goto yy487; + } +yy489: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': goto yy900; + case 'I': + case 'i': goto yy899; + case 'L': + case 'l': goto yy897; + case 'N': + case 'n': goto yy898; + case 'O': + case 'o': goto yy901; + case 'T': + case 't': goto yy896; + case 'V': + case 'v': goto yy895; + default: goto yy487; + } yy490: yych = *(marker = ++p); - if (yych <= ',') { - if (yych <= '"') { - if (yych == '!') goto yy495; - goto yy489; - } else { - if (yych <= '\'') goto yy495; - if (yych <= ')') goto yy489; - if (yych <= '+') goto yy495; - goto yy489; - } + if (yych <= 'M') { + if (yych == 'A') goto yy887; + if (yych <= 'L') goto yy487; + goto yy886; } else { - if (yych <= '>') { - if (yych <= '9') goto yy495; - if (yych == '=') goto yy495; - goto yy489; + if (yych <= 'a') { + if (yych <= '`') goto yy487; + goto yy887; } else { - if (yych <= 'Z') goto yy495; - if (yych <= ']') goto yy489; - if (yych <= '~') goto yy495; - goto yy489; + if (yych == 'm') goto yy886; + goto yy487; } } yy491: - yych = *++p; - goto yy489; -yy492: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy496; - } else { - if (yych <= 'Z') goto yy496; - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy496; - } -yy493: - p = marker; - goto yy489; -yy494: - ++p; - yych = *p; -yy495: - if (yybm[0+yych] & 128) { - goto yy494; + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': goto yy868; + case 'B': + case 'b': goto yy867; + case 'C': + case 'c': goto yy866; + case 'D': + case 'd': goto yy865; + case 'F': + case 'f': goto yy864; + case 'I': + case 'i': goto yy863; + case 'P': + case 'p': goto yy862; + case 'T': + case 't': goto yy861; + case 'W': + case 'w': goto yy519; + default: goto yy487; } - if (yych == '@') goto yy492; - goto yy493; -yy496: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; +yy492: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'E') { + if (yych == 'A') goto yy848; + if (yych <= 'D') goto yy487; + goto yy847; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy498; - goto yy493; + if (yych == 'I') goto yy846; + if (yych <= 'S') goto yy487; + goto yy849; } } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy498; + if (yych <= 'e') { + if (yych == 'a') goto yy848; + if (yych <= 'd') goto yy487; + goto yy847; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy498; - goto yy493; + if (yych <= 'i') { + if (yych <= 'h') goto yy487; + goto yy846; + } else { + if (yych == 't') goto yy849; + goto yy487; + } } } - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy626; - if (yych <= '/') goto yy493; - goto yy627; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy627; +yy493: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': goto yy831; + case 'G': + case 'g': goto yy519; + case 'I': + case 'i': goto yy829; + case 'O': + case 'o': goto yy830; + case 'T': + case 't': goto yy828; + default: goto yy487; + } +yy494: + yych = *(marker = ++p); + if (yych <= 'S') { + if (yych <= '3') { + if (yych <= '2') goto yy487; + goto yy824; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy627; - goto yy493; + if (yych == 'C') goto yy822; + goto yy487; } - } -yy498: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych <= '-') goto yy626; + } else { + if (yych <= 'c') { + if (yych <= 'T') goto yy823; + if (yych <= 'b') goto yy487; + goto yy822; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy627; - goto yy493; + if (yych == 't') goto yy823; + goto yy487; } + } +yy495: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': goto yy804; + case 'C': + case 'c': goto yy801; + case 'M': + case 'm': goto yy803; + case 'N': + case 'n': goto yy802; + case 'P': + case 'p': goto yy800; + case 'R': + case 'r': goto yy799; + case 'T': + case 't': goto yy798; + default: goto yy487; + } +yy496: + yych = *(marker = ++p); + if (yych <= 'D') { + if (yych == 'A') goto yy792; + if (yych <= 'C') goto yy487; + goto yy791; } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy627; + if (yych <= 'a') { + if (yych <= '`') goto yy487; + goto yy792; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy627; - goto yy493; + if (yych == 'd') goto yy791; + goto yy487; } } +yy497: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': goto yy758; + case 'E': + case 'e': goto yy757; + case 'I': + case 'i': goto yy760; + case 'M': + case 'm': goto yy756; + case 'S': + case 's': goto yy755; + case 'T': + case 't': goto yy759; + case 'U': + case 'u': goto yy754; + case 'V': + case 'v': goto yy753; + default: goto yy487; + } +yy498: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': goto yy748; + case 'F': + case 'f': goto yy747; + case 'I': + case 'i': goto yy746; + case 'N': + case 'n': goto yy745; + case 'O': + case 'o': goto yy744; + default: goto yy487; + } yy499: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy502; - goto yy493; + yych = *(marker = ++p); + if (yych <= 'P') { + if (yych == 'I') goto yy730; + if (yych <= 'O') goto yy487; + goto yy731; } else { - if (yych <= 'Z') goto yy502; - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy502; - goto yy493; + if (yych <= 'i') { + if (yych <= 'h') goto yy487; + goto yy730; + } else { + if (yych == 'p') goto yy731; + goto yy487; + } } yy500: - ++p; - { return (p - start); } -yy502: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + yych = *(marker = ++p); + if (yych <= 'S') { + if (yych <= 'L') { + if (yych == 'A') goto yy712; + if (yych <= 'K') goto yy487; + goto yy711; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy504; - goto yy493; + if (yych <= 'O') { + if (yych <= 'N') goto yy487; + goto yy713; + } else { + if (yych <= 'Q') goto yy487; + if (yych <= 'R') goto yy710; + goto yy709; + } } } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy504; + if (yych <= 'n') { + if (yych <= 'a') { + if (yych <= '`') goto yy487; + goto yy712; + } else { + if (yych == 'l') goto yy711; + goto yy487; + } } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy504; - goto yy493; + if (yych <= 'q') { + if (yych <= 'o') goto yy713; + goto yy487; + } else { + if (yych <= 'r') goto yy710; + if (yych <= 's') goto yy709; + goto yy487; + } } } - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy505; - if (yych <= '/') goto yy493; - goto yy506; +yy501: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'L') { + if (yych == 'E') goto yy699; + goto yy487; + } else { + if (yych <= 'M') goto yy698; + if (yych <= 'R') goto yy487; + if (yych <= 'S') goto yy697; + goto yy696; + } } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy506; + if (yych <= 'm') { + if (yych == 'e') goto yy699; + if (yych <= 'l') goto yy487; + goto yy698; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy506; - goto yy493; + if (yych <= 'r') goto yy487; + if (yych <= 's') goto yy697; + if (yych <= 't') goto yy696; + goto yy487; } } +yy502: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': goto yy652; + case 'F': + case 'f': goto yy651; + case 'G': + case 'g': goto yy650; + case 'H': + case 'h': goto yy655; + case 'I': + case 'i': goto yy654; + case 'K': + case 'k': goto yy649; + case 'M': + case 'm': goto yy648; + case 'N': + case 'n': goto yy653; + case 'O': + case 'o': goto yy647; + case 'P': + case 'p': goto yy646; + case 'S': + case 's': goto yy645; + case 'T': + case 't': goto yy644; + case 'V': + case 'v': goto yy643; + default: goto yy487; + } +yy503: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': goto yy619; + case 'E': + case 'e': goto yy615; + case 'F': + case 'f': goto yy618; + case 'H': + case 'h': goto yy614; + case 'I': + case 'i': goto yy616; + case 'N': + case 'n': goto yy617; + case 'V': + case 'v': goto yy519; + default: goto yy487; + } yy504: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'N') { + if (yych == 'D') goto yy606; + if (yych <= 'M') goto yy487; + goto yy605; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy506; - goto yy493; + if (yych == 'R') goto yy607; + if (yych <= 'S') goto yy487; + goto yy604; } } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy506; + if (yych <= 'n') { + if (yych == 'd') goto yy606; + if (yych <= 'm') goto yy487; + goto yy605; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy506; - goto yy493; + if (yych <= 'r') { + if (yych <= 'q') goto yy487; + goto yy607; + } else { + if (yych == 't') goto yy604; + goto yy487; + } } } yy505: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy507; - if (yych <= '/') goto yy493; - goto yy508; + yych = *(marker = ++p); + if (yych <= 'I') { + if (yych == 'E') goto yy588; + if (yych <= 'H') goto yy487; + goto yy587; } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy508; + if (yych <= 'e') { + if (yych <= 'd') goto yy487; + goto yy588; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy508; - goto yy493; + if (yych == 'i') goto yy587; + goto yy487; } } yy506: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + yych = *(marker = ++p); + if (yych <= 'Y') { + if (yych <= 'R') { + if (yych == 'E') goto yy577; + goto yy487; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy508; - goto yy493; + if (yych <= 'S') goto yy578; + if (yych <= 'T') goto yy576; + if (yych <= 'X') goto yy487; + goto yy575; } } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy508; + if (yych <= 's') { + if (yych == 'e') goto yy577; + if (yych <= 'r') goto yy487; + goto yy578; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy508; - goto yy493; + if (yych <= 't') goto yy576; + if (yych == 'y') goto yy575; + goto yy487; } } yy507: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy509; - if (yych <= '/') goto yy493; - goto yy510; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy510; - } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy510; - goto yy493; - } - } -yy508: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + yych = *(marker = ++p); + if (yych <= 'R') { + if (yych <= 'F') { + if (yych == 'C') goto yy554; + if (yych <= 'E') goto yy487; + goto yy552; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy510; - goto yy493; + if (yych == 'M') goto yy553; + if (yych <= 'Q') goto yy487; + goto yy551; } } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy510; + if (yych <= 'f') { + if (yych == 'c') goto yy554; + if (yych <= 'e') goto yy487; + goto yy552; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy510; - goto yy493; + if (yych <= 'm') { + if (yych <= 'l') goto yy487; + goto yy553; + } else { + if (yych == 'r') goto yy551; + goto yy487; + } } } +yy508: + yych = *(marker = ++p); + if (yych == '3') goto yy546; + goto yy487; yy509: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy511; - if (yych <= '/') goto yy493; - goto yy512; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy512; - } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy512; - goto yy493; - } - } -yy510: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + yych = *(marker = ++p); + if (yych <= 'O') { + if (yych <= 'H') { + if (yych == 'E') goto yy536; + goto yy487; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy512; - goto yy493; + if (yych <= 'I') goto yy535; + if (yych <= 'N') goto yy487; + goto yy534; } } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy512; + if (yych <= 'h') { + if (yych == 'e') goto yy536; + goto yy487; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy512; - goto yy493; + if (yych <= 'i') goto yy535; + if (yych == 'o') goto yy534; + goto yy487; } } +yy510: + yych = *(marker = ++p); + if (yych == 'D') goto yy532; + if (yych == 'd') goto yy532; + goto yy487; yy511: + yych = *(marker = ++p); + if (yych == 'E') goto yy527; + if (yych == 'e') goto yy527; + goto yy487; +yy512: + yych = *(marker = ++p); + if (yych == 'U') goto yy524; + if (yych == 'u') goto yy524; + goto yy487; +yy513: + yych = *(marker = ++p); + if (yych == 'M') goto yy515; + if (yych == 'm') goto yy515; + goto yy487; +yy514: + yych = *++p; + goto yy487; +yy515: + yych = *++p; + if (yych == 'S') goto yy517; + if (yych == 's') goto yy517; +yy516: + p = marker; + goto yy487; +yy517: + yych = *++p; + if (yych == 'G') goto yy518; + if (yych != 'g') goto yy516; +yy518: + yych = *++p; + if (yych == 'R') goto yy519; + if (yych != 'r') goto yy516; +yy519: + yych = *++p; + if (yych != ':') goto yy516; +yy520: ++p; yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy513; - if (yych <= '/') goto yy493; - goto yy514; + if (yybm[0+yych] & 128) { + goto yy520; + } + if (yych <= '=') goto yy516; + ++p; + { return (p - start); } +yy524: + yych = *++p; + if (yych == 'E') goto yy525; + if (yych != 'e') goto yy516; +yy525: + yych = *++p; + if (yych == 'R') goto yy526; + if (yych != 'r') goto yy516; +yy526: + yych = *++p; + if (yych == 'Y') goto yy519; + if (yych == 'y') goto yy519; + goto yy516; +yy527: + yych = *++p; + if (yych == 'Y') goto yy528; + if (yych != 'y') goto yy516; +yy528: + yych = *++p; + if (yych == 'P') goto yy529; + if (yych != 'p') goto yy516; +yy529: + yych = *++p; + if (yych == 'A') goto yy530; + if (yych != 'a') goto yy516; +yy530: + yych = *++p; + if (yych == 'R') goto yy531; + if (yych != 'r') goto yy516; +yy531: + yych = *++p; + if (yych == 'C') goto yy519; + if (yych == 'c') goto yy519; + goto yy516; +yy532: + yych = *++p; + if (yych != '2') goto yy516; + yych = *++p; + if (yych == 'K') goto yy519; + if (yych == 'k') goto yy519; + goto yy516; +yy534: + yych = *++p; + if (yych == 'L') goto yy545; + if (yych == 'l') goto yy545; + goto yy516; +yy535: + yych = *++p; + if (yych == 'T') goto yy541; + if (yych == 't') goto yy541; + goto yy516; +yy536: + yych = *++p; + if (yych == 'S') goto yy537; + if (yych != 's') goto yy516; +yy537: + yych = *++p; + if (yych == 'H') goto yy538; + if (yych != 'h') goto yy516; +yy538: + yych = *++p; + if (yych == 'A') goto yy539; + if (yych != 'a') goto yy516; +yy539: + yych = *++p; + if (yych == 'R') goto yy540; + if (yych != 'r') goto yy516; +yy540: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy541: + yych = *++p; + if (yych == 'C') goto yy542; + if (yych != 'c') goto yy516; +yy542: + yych = *++p; + if (yych == 'O') goto yy543; + if (yych != 'o') goto yy516; +yy543: + yych = *++p; + if (yych == 'I') goto yy544; + if (yych != 'i') goto yy516; +yy544: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy545: + yych = *++p; + if (yych == 'O') goto yy519; + if (yych == 'o') goto yy519; + goto yy516; +yy546: + yych = *++p; + if (yych != '9') goto yy516; + yych = *++p; + if (yych != '.') goto yy516; + yych = *++p; + if (yych != '5') goto yy516; + yych = *++p; + if (yych != '0') goto yy516; + yych = *++p; + if (yych <= 'Q') goto yy516; + if (yych <= 'S') goto yy519; + if (yych <= 'q') goto yy516; + if (yych <= 's') goto yy519; + goto yy516; +yy551: + yych = *++p; + if (yych == 'I') goto yy519; + if (yych == 'i') goto yy519; + goto yy516; +yy552: + yych = *++p; + if (yych == 'I') goto yy573; + if (yych == 'i') goto yy573; + goto yy516; +yy553: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') goto yy563; + if (yych <= 'O') goto yy516; + goto yy564; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy516; + goto yy563; + } else { + if (yych == 'p') goto yy564; + goto yy516; + } + } +yy554: + yych = *++p; + if (yych == 'O') goto yy555; + if (yych != 'o') goto yy516; +yy555: + yych = *++p; + if (yych == 'N') goto yy556; + if (yych != 'n') goto yy516; +yy556: + yych = *++p; + if (yych == '-') goto yy557; + if (yych == ':') goto yy520; + goto yy516; +yy557: + yych = *++p; + if (yych == 'U') goto yy558; + if (yych != 'u') goto yy516; +yy558: + yych = *++p; + if (yych == 'S') goto yy559; + if (yych != 's') goto yy516; +yy559: + yych = *++p; + if (yych == 'E') goto yy560; + if (yych != 'e') goto yy516; +yy560: + yych = *++p; + if (yych == 'R') goto yy561; + if (yych != 'r') goto yy516; +yy561: + yych = *++p; + if (yych == 'I') goto yy562; + if (yych != 'i') goto yy516; +yy562: + yych = *++p; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy516; +yy563: + yych = *++p; + if (yych == 'R') goto yy565; + if (yych == 'r') goto yy565; + goto yy516; +yy564: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy565: + yych = *++p; + if (yych == 'P') goto yy566; + if (yych != 'p') goto yy516; +yy566: + yych = *++p; + if (yych == 'C') goto yy567; + if (yych != 'c') goto yy516; +yy567: + yych = *++p; + if (yych != '.') goto yy516; + yych = *++p; + if (yych == 'B') goto yy569; + if (yych != 'b') goto yy516; +yy569: + yych = *++p; + if (yych == 'E') goto yy570; + if (yych != 'e') goto yy516; +yy570: + yych = *++p; + if (yych == 'E') goto yy571; + if (yych != 'e') goto yy516; +yy571: + yych = *++p; + if (yych == 'P') goto yy572; + if (yych != 'p') goto yy516; +yy572: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy573: + yych = *++p; + if (yych == 'R') goto yy574; + if (yych != 'r') goto yy516; +yy574: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy575: + yych = *++p; + if (yych == 'C') goto yy583; + if (yych == 'c') goto yy583; + goto yy516; +yy576: + yych = *++p; + if (yych == 'A') goto yy582; + if (yych == 'a') goto yy582; + goto yy516; +yy577: + yych = *++p; + if (yych == 'B') goto yy579; + if (yych == 'b') goto yy579; + goto yy516; +yy578: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy579: + yych = *++p; + if (yych == 'C') goto yy580; + if (yych != 'c') goto yy516; +yy580: + yych = *++p; + if (yych == 'A') goto yy581; + if (yych != 'a') goto yy516; +yy581: + yych = *++p; + if (yych == 'L') goto yy519; + if (yych == 'l') goto yy519; + goto yy516; +yy582: + yych = *++p; + if (yych == 'I') goto yy519; + if (yych == 'i') goto yy519; + goto yy516; +yy583: + yych = *++p; + if (yych == 'I') goto yy584; + if (yych != 'i') goto yy516; +yy584: + yych = *++p; + if (yych == 'W') goto yy585; + if (yych != 'w') goto yy516; +yy585: + yych = *++p; + if (yych == 'Y') goto yy586; + if (yych != 'y') goto yy516; +yy586: + yych = *++p; + if (yych == 'G') goto yy519; + if (yych == 'g') goto yy519; + goto yy516; +yy587: + yych = *++p; + if (yych == 'E') goto yy596; + if (yych == 'e') goto yy596; + goto yy516; +yy588: + yych = *++p; + if (yych <= 'N') { + if (yych <= 'L') goto yy516; + if (yych >= 'N') goto yy590; + } else { + if (yych <= 'l') goto yy516; + if (yych <= 'm') goto yy589; + if (yych <= 'n') goto yy590; + goto yy516; + } +yy589: + yych = *++p; + if (yych == 'M') goto yy595; + if (yych == 'm') goto yy595; + goto yy516; +yy590: + yych = *++p; + if (yych == 'T') goto yy591; + if (yych != 't') goto yy516; +yy591: + yych = *++p; + if (yych == 'R') goto yy592; + if (yych != 'r') goto yy516; +yy592: + yych = *++p; + if (yych == 'I') goto yy593; + if (yych != 'i') goto yy516; +yy593: + yych = *++p; + if (yych == 'L') goto yy594; + if (yych != 'l') goto yy516; +yy594: + yych = *++p; + if (yych == 'O') goto yy519; + if (yych == 'o') goto yy519; + goto yy516; +yy595: + yych = *++p; + if (yych == 'I') goto yy519; + if (yych == 'i') goto yy519; + goto yy516; +yy596: + yych = *++p; + if (yych == 'W') goto yy597; + if (yych != 'w') goto yy516; +yy597: + yych = *++p; + if (yych != '-') goto yy516; + yych = *++p; + if (yych == 'S') goto yy599; + if (yych != 's') goto yy516; +yy599: + yych = *++p; + if (yych == 'O') goto yy600; + if (yych != 'o') goto yy516; +yy600: + yych = *++p; + if (yych == 'U') goto yy601; + if (yych != 'u') goto yy516; +yy601: + yych = *++p; + if (yych == 'R') goto yy602; + if (yych != 'r') goto yy516; +yy602: + yych = *++p; + if (yych == 'C') goto yy603; + if (yych != 'c') goto yy516; +yy603: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy604: + yych = *++p; + if (yych == '2') goto yy611; + goto yy516; +yy605: + yych = *++p; + if (yych == 'R') goto yy608; + if (yych == 'r') goto yy608; + goto yy516; +yy606: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy607: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy608: + yych = *++p; + if (yych == 'E') goto yy609; + if (yych != 'e') goto yy516; +yy609: + yych = *++p; + if (yych == 'A') goto yy610; + if (yych != 'a') goto yy516; +yy610: + yych = *++p; + if (yych == 'L') goto yy519; + if (yych == 'l') goto yy519; + goto yy516; +yy611: + yych = *++p; + if (yych != '0') goto yy516; + yych = *++p; + if (yych != '0') goto yy516; + yych = *++p; + if (yych == '4') goto yy519; + goto yy516; +yy614: + yych = *++p; + if (yych == 'I') goto yy633; + if (yych == 'i') goto yy633; + goto yy516; +yy615: + yych = *++p; + if (yych <= 'L') { + if (yych == 'A') goto yy625; + if (yych <= 'K') goto yy516; + goto yy624; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy516; + goto yy625; + } else { + if (yych == 'l') goto yy624; + goto yy516; + } + } +yy616: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy617: + yych = *++p; + if (yych == '3') goto yy621; + goto yy516; +yy618: + yych = *++p; + if (yych == 'T') goto yy620; + if (yych == 't') goto yy620; + goto yy516; +yy619: + yych = *++p; + if (yych == 'G') goto yy519; + if (yych == 'g') goto yy519; + goto yy516; +yy620: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy621: + yych = *++p; + if (yych != '2') goto yy516; + yych = *++p; + if (yych != '7') goto yy516; + yych = *++p; + if (yych == '0') goto yy519; + goto yy516; +yy624: + yych = *++p; + if (yych <= 'M') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'N') goto yy631; + if (yych == 'n') goto yy631; + goto yy516; + } +yy625: + yych = *++p; + if (yych == 'M') goto yy626; + if (yych != 'm') goto yy516; +yy626: + yych = *++p; + if (yych == 'S') goto yy627; + if (yych != 's') goto yy516; +yy627: + yych = *++p; + if (yych == 'P') goto yy628; + if (yych != 'p') goto yy516; +yy628: + yych = *++p; + if (yych == 'E') goto yy629; + if (yych != 'e') goto yy516; +yy629: + yych = *++p; + if (yych == 'A') goto yy630; + if (yych != 'a') goto yy516; +yy630: + yych = *++p; + if (yych == 'K') goto yy519; + if (yych == 'k') goto yy519; + goto yy516; +yy631: + yych = *++p; + if (yych == 'E') goto yy632; + if (yych != 'e') goto yy516; +yy632: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy633: + yych = *++p; + if (yych <= 'S') { + if (yych == 'N') goto yy634; + if (yych <= 'R') goto yy516; + goto yy635; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy516; + } else { + if (yych == 's') goto yy635; + goto yy516; + } + } +yy634: + yych = *++p; + if (yych == 'G') goto yy642; + if (yych == 'g') goto yy642; + goto yy516; +yy635: + yych = *++p; + if (yych == 'M') goto yy636; + if (yych != 'm') goto yy516; +yy636: + yych = *++p; + if (yych == 'E') goto yy637; + if (yych != 'e') goto yy516; +yy637: + yych = *++p; + if (yych == 'S') goto yy638; + if (yych != 's') goto yy516; +yy638: + yych = *++p; + if (yych == 'S') goto yy639; + if (yych != 's') goto yy516; +yy639: + yych = *++p; + if (yych == 'A') goto yy640; + if (yych != 'a') goto yy516; +yy640: + yych = *++p; + if (yych == 'G') goto yy641; + if (yych != 'g') goto yy516; +yy641: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy642: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy643: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy644: + yych = *++p; + if (yych == 'E') goto yy694; + if (yych == 'e') goto yy694; + goto yy516; +yy645: + yych = *++p; + if (yych == 'H') goto yy519; + if (yych == 'h') goto yy519; + goto yy516; +yy646: + yych = *++p; + if (yych == 'O') goto yy690; + if (yych == 'o') goto yy690; + goto yy516; +yy647: + yych = *++p; + if (yych <= 'L') { + if (yych == 'A') goto yy680; + if (yych <= 'K') goto yy516; + goto yy681; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy516; + goto yy680; + } else { + if (yych == 'l') goto yy681; + goto yy516; + } + } +yy648: + yych = *++p; + if (yych <= 'S') { + if (yych == 'B') goto yy519; + if (yych <= 'R') goto yy516; + goto yy519; + } else { + if (yych <= 'b') { + if (yych <= 'a') goto yy516; + goto yy519; + } else { + if (yych == 's') goto yy519; + goto yy516; + } + } +yy649: + yych = *++p; + if (yych == 'Y') goto yy678; + if (yych == 'y') goto yy678; + goto yy516; +yy650: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy651: + yych = *++p; + if (yych == 'T') goto yy677; + if (yych == 't') goto yy677; + goto yy516; +yy652: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'C') { + if (yych <= 'B') goto yy516; + goto yy664; + } else { + if (yych <= 'Q') goto yy516; + if (yych <= 'R') goto yy662; + goto yy663; + } + } else { + if (yych <= 'q') { + if (yych == 'c') goto yy664; + goto yy516; + } else { + if (yych <= 'r') goto yy662; + if (yych <= 's') goto yy663; + goto yy516; + } + } +yy653: + yych = *++p; + if (yych == 'M') goto yy661; + if (yych == 'm') goto yy661; + goto yy516; +yy654: + yych = *++p; + if (yych <= 'P') { + if (yych == 'E') goto yy658; + if (yych <= 'O') goto yy516; + goto yy659; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy516; + goto yy658; + } else { + if (yych == 'p') goto yy659; + goto yy516; + } + } +yy655: + yych = *++p; + if (yych == 'T') goto yy656; + if (yych != 't') goto yy516; +yy656: + yych = *++p; + if (yych == 'T') goto yy657; + if (yych != 't') goto yy516; +yy657: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy658: + yych = *++p; + if (yych == 'V') goto yy660; + if (yych == 'v') goto yy660; + goto yy516; +yy659: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy660: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy661: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy662: + yych = *++p; + if (yych == 'V') goto yy674; + if (yych == 'v') goto yy674; + goto yy516; +yy663: + yych = *++p; + if (yych == 'S') goto yy671; + if (yych == 's') goto yy671; + goto yy516; +yy664: + yych = *++p; + if (yych == 'O') goto yy665; + if (yych != 'o') goto yy516; +yy665: + yych = *++p; + if (yych == 'N') goto yy666; + if (yych != 'n') goto yy516; +yy666: + yych = *++p; + if (yych == 'D') goto yy667; + if (yych != 'd') goto yy516; +yy667: + yych = *++p; + if (yych == 'L') goto yy668; + if (yych != 'l') goto yy516; +yy668: + yych = *++p; + if (yych == 'I') goto yy669; + if (yych != 'i') goto yy516; +yy669: + yych = *++p; + if (yych == 'F') goto yy670; + if (yych != 'f') goto yy516; +yy670: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy671: + yych = *++p; + if (yych == 'I') goto yy672; + if (yych != 'i') goto yy516; +yy672: + yych = *++p; + if (yych == 'O') goto yy673; + if (yych != 'o') goto yy516; +yy673: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy674: + yych = *++p; + if (yych == 'I') goto yy675; + if (yych != 'i') goto yy516; +yy675: + yych = *++p; + if (yych == 'C') goto yy676; + if (yych != 'c') goto yy516; +yy676: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy677: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy678: + yych = *++p; + if (yych == 'P') goto yy679; + if (yych != 'p') goto yy516; +yy679: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy680: + yych = *++p; + if (yych == 'P') goto yy684; + if (yych == 'p') goto yy684; + goto yy516; +yy681: + yych = *++p; + if (yych == 'D') goto yy682; + if (yych != 'd') goto yy516; +yy682: + yych = *++p; + if (yych == 'A') goto yy683; + if (yych != 'a') goto yy516; +yy683: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy684: + yych = *++p; + if (yych != '.') goto yy516; + yych = *++p; + if (yych == 'B') goto yy686; + if (yych != 'b') goto yy516; +yy686: + yych = *++p; + if (yych == 'E') goto yy687; + if (yych != 'e') goto yy516; +yy687: + yych = *++p; + if (yych == 'E') goto yy688; + if (yych != 'e') goto yy516; +yy688: + yych = *++p; + if (yych == 'P') goto yy689; + if (yych != 'p') goto yy516; +yy689: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy690: + yych = *++p; + if (yych == 'T') goto yy691; + if (yych != 't') goto yy516; +yy691: + yych = *++p; + if (yych == 'I') goto yy692; + if (yych != 'i') goto yy516; +yy692: + yych = *++p; + if (yych == 'F') goto yy693; + if (yych != 'f') goto yy516; +yy693: + yych = *++p; + if (yych == 'Y') goto yy519; + if (yych == 'y') goto yy519; + goto yy516; +yy694: + yych = *++p; + if (yych == 'A') goto yy695; + if (yych != 'a') goto yy516; +yy695: + yych = *++p; + if (yych == 'M') goto yy519; + if (yych == 'm') goto yy519; + goto yy516; +yy696: + yych = *++p; + if (yych <= 'S') { + if (yych == 'M') goto yy708; + if (yych <= 'R') goto yy516; + goto yy707; + } else { + if (yych <= 'm') { + if (yych <= 'l') goto yy516; + goto yy708; + } else { + if (yych == 's') goto yy707; + goto yy516; + } + } +yy697: + yych = *++p; + if (yych == 'Y') goto yy705; + if (yych == 'y') goto yy705; + goto yy516; +yy698: + yych = *++p; + if (yych == 'I') goto yy519; + if (yych == 'i') goto yy519; + goto yy516; +yy699: + yych = *++p; + if (yych == 'S') goto yy700; + if (yych != 's') goto yy516; +yy700: + yych = *++p; + if (yych <= 'N') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'O') goto yy701; + if (yych != 'o') goto yy516; + } +yy701: + yych = *++p; + if (yych == 'U') goto yy702; + if (yych != 'u') goto yy516; +yy702: + yych = *++p; + if (yych == 'R') goto yy703; + if (yych != 'r') goto yy516; +yy703: + yych = *++p; + if (yych == 'C') goto yy704; + if (yych != 'c') goto yy516; +yy704: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy705: + yych = *++p; + if (yych == 'N') goto yy706; + if (yych != 'n') goto yy516; +yy706: + yych = *++p; + if (yych == 'C') goto yy519; + if (yych == 'c') goto yy519; + goto yy516; +yy707: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy708: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy709: + yych = *++p; + if (yych == 'Y') goto yy729; + if (yych == 'y') goto yy729; + goto yy516; +yy710: + yych = *++p; + if (yych <= 'O') { + if (yych == 'E') goto yy726; + if (yych <= 'N') goto yy516; + goto yy727; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy516; + goto yy726; + } else { + if (yych == 'o') goto yy727; + goto yy516; + } + } +yy711: + yych = *++p; + if (yych == 'A') goto yy721; + if (yych == 'a') goto yy721; + goto yy516; +yy712: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') goto yy714; + if (yych <= 'O') goto yy516; + goto yy715; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy516; + goto yy714; + } else { + if (yych == 'p') goto yy715; + goto yy516; + } + } +yy713: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy714: + yych = *++p; + if (yych == 'M') goto yy519; + if (yych == 'm') goto yy519; + goto yy516; +yy715: + yych = *++p; + if (yych == 'A') goto yy716; + if (yych != 'a') goto yy516; +yy716: + yych = *++p; + if (yych == 'R') goto yy717; + if (yych != 'r') goto yy516; +yy717: + yych = *++p; + if (yych == 'A') goto yy718; + if (yych != 'a') goto yy516; +yy718: + yych = *++p; + if (yych == 'Z') goto yy719; + if (yych != 'z') goto yy516; +yy719: + yych = *++p; + if (yych == 'Z') goto yy720; + if (yych != 'z') goto yy516; +yy720: + yych = *++p; + if (yych == 'I') goto yy519; + if (yych == 'i') goto yy519; + goto yy516; +yy721: + yych = *++p; + if (yych == 'T') goto yy722; + if (yych != 't') goto yy516; +yy722: + yych = *++p; + if (yych == 'F') goto yy723; + if (yych != 'f') goto yy516; +yy723: + yych = *++p; + if (yych == 'O') goto yy724; + if (yych != 'o') goto yy516; +yy724: + yych = *++p; + if (yych == 'R') goto yy725; + if (yych != 'r') goto yy516; +yy725: + yych = *++p; + if (yych == 'M') goto yy519; + if (yych == 'm') goto yy519; + goto yy516; +yy726: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy727: + yych = *++p; + if (yych == 'X') goto yy728; + if (yych != 'x') goto yy516; +yy728: + yych = *++p; + if (yych == 'Y') goto yy519; + if (yych == 'y') goto yy519; + goto yy516; +yy729: + yych = *++p; + if (yych == 'C') goto yy519; + if (yych == 'c') goto yy519; + goto yy516; +yy730: + yych = *++p; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy516; +yy731: + yych = *++p; + if (yych == 'A') goto yy732; + if (yych != 'a') goto yy516; +yy732: + yych = *++p; + if (yych == 'Q') goto yy733; + if (yych != 'q') goto yy516; +yy733: + yych = *++p; + if (yych == 'U') goto yy734; + if (yych != 'u') goto yy516; +yy734: + yych = *++p; + if (yych == 'E') goto yy735; + if (yych != 'e') goto yy516; +yy735: + yych = *++p; + if (yych == 'L') goto yy736; + if (yych != 'l') goto yy516; +yy736: + yych = *++p; + if (yych == 'O') goto yy737; + if (yych != 'o') goto yy516; +yy737: + yych = *++p; + if (yych == 'C') goto yy738; + if (yych != 'c') goto yy516; +yy738: + yych = *++p; + if (yych == 'K') goto yy739; + if (yych != 'k') goto yy516; +yy739: + yych = *++p; + if (yych == 'T') goto yy740; + if (yych != 't') goto yy516; +yy740: + yych = *++p; + if (yych == 'O') goto yy741; + if (yych != 'o') goto yy516; +yy741: + yych = *++p; + if (yych == 'K') goto yy742; + if (yych != 'k') goto yy516; +yy742: + yych = *++p; + if (yych == 'E') goto yy743; + if (yych != 'e') goto yy516; +yy743: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy744: + yych = *++p; + if (yych == 'T') goto yy751; + if (yych == 't') goto yy751; + goto yy516; +yy745: + yych = *++p; + if (yych == 'T') goto yy750; + if (yych == 't') goto yy750; + goto yy516; +yy746: + yych = *++p; + if (yych <= 'G') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'H') goto yy519; + if (yych == 'h') goto yy519; + goto yy516; + } +yy747: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy748: + yych = *++p; + if (yych == 'W') goto yy749; + if (yych != 'w') goto yy516; +yy749: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy750: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy751: + yych = *++p; + if (yych == 'E') goto yy752; + if (yych != 'e') goto yy516; +yy752: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy753: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy754: + yych = *++p; + if (yych <= 'P') { + if (yych == 'M') goto yy785; + if (yych <= 'O') goto yy516; + goto yy784; + } else { + if (yych <= 'm') { + if (yych <= 'l') goto yy516; + goto yy785; + } else { + if (yych == 'p') goto yy784; + goto yy516; + } + } +yy755: + yych = *++p; + if (yych <= 'Q') { + if (yych <= '-') { + if (yych <= ',') goto yy516; + goto yy777; + } else { + if (yych == 'N') goto yy778; + goto yy516; + } + } else { + if (yych <= 'n') { + if (yych <= 'R') goto yy776; + if (yych <= 'm') goto yy516; + goto yy778; + } else { + if (yych == 'r') goto yy776; + goto yy516; + } + } +yy756: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy757: + yych = *++p; + if (yych == 'S') goto yy772; + if (yych == 's') goto yy772; + goto yy516; +yy758: + yych = *++p; + switch (yych) { + case 'G': + case 'g': goto yy763; + case 'I': + case 'i': goto yy762; + case 'P': + case 'p': goto yy764; + case 'R': + case 'r': goto yy765; + default: goto yy516; + } +yy759: + yych = *++p; + if (yych == 'Q') goto yy761; + if (yych == 'q') goto yy761; + goto yy516; +yy760: + yych = *++p; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy516; +yy761: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy762: + yych = *++p; + if (yych == 'L') goto yy770; + if (yych == 'l') goto yy770; + goto yy516; +yy763: + yych = *++p; + if (yych == 'N') goto yy768; + if (yych == 'n') goto yy768; + goto yy516; +yy764: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy765: + yych = *++p; + if (yych == 'K') goto yy766; + if (yych != 'k') goto yy516; +yy766: + yych = *++p; + if (yych == 'E') goto yy767; + if (yych != 'e') goto yy516; +yy767: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy768: + yych = *++p; + if (yych == 'E') goto yy769; + if (yych != 'e') goto yy516; +yy769: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy770: + yych = *++p; + if (yych == 'T') goto yy771; + if (yych != 't') goto yy516; +yy771: + yych = *++p; + if (yych == 'O') goto yy519; + if (yych == 'o') goto yy519; + goto yy516; +yy772: + yych = *++p; + if (yych == 'S') goto yy773; + if (yych != 's') goto yy516; +yy773: + yych = *++p; + if (yych == 'A') goto yy774; + if (yych != 'a') goto yy516; +yy774: + yych = *++p; + if (yych == 'G') goto yy775; + if (yych != 'g') goto yy516; +yy775: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy776: + yych = *++p; + if (yych == 'P') goto yy783; + if (yych == 'p') goto yy783; + goto yy516; +yy777: + yych = *++p; + if (yych == 'H') goto yy780; + if (yych == 'h') goto yy780; + goto yy516; +yy778: + yych = *++p; + if (yych == 'I') goto yy779; + if (yych != 'i') goto yy516; +yy779: + yych = *++p; + if (yych == 'M') goto yy519; + if (yych == 'm') goto yy519; + goto yy516; +yy780: + yych = *++p; + if (yych == 'E') goto yy781; + if (yych != 'e') goto yy516; +yy781: + yych = *++p; + if (yych == 'L') goto yy782; + if (yych != 'l') goto yy516; +yy782: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy783: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy784: + yych = *++p; + if (yych == 'D') goto yy788; + if (yych == 'd') goto yy788; + goto yy516; +yy785: + yych = *++p; + if (yych == 'B') goto yy786; + if (yych != 'b') goto yy516; +yy786: + yych = *++p; + if (yych == 'L') goto yy787; + if (yych != 'l') goto yy516; +yy787: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy788: + yych = *++p; + if (yych == 'A') goto yy789; + if (yych != 'a') goto yy516; +yy789: + yych = *++p; + if (yych == 'T') goto yy790; + if (yych != 't') goto yy516; +yy790: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy791: + yych = *++p; + if (yych == 'A') goto yy796; + if (yych == 'a') goto yy796; + goto yy516; +yy792: + yych = *++p; + if (yych == 'S') goto yy793; + if (yych != 's') goto yy516; +yy793: + yych = *++p; + if (yych == 'T') goto yy794; + if (yych != 't') goto yy516; +yy794: + yych = *++p; + if (yych == 'F') goto yy795; + if (yych != 'f') goto yy516; +yy795: + yych = *++p; + if (yych == 'M') goto yy519; + if (yych == 'm') goto yy519; + goto yy516; +yy796: + yych = *++p; + if (yych == 'P') goto yy797; + if (yych != 'p') goto yy516; +yy797: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy798: + yych = *++p; + if (yych == 'M') goto yy821; + if (yych == 'm') goto yy821; + goto yy516; +yy799: + yych = *++p; + if (yych <= 'I') { + if (yych == 'C') goto yy810; + if (yych <= 'H') goto yy516; + goto yy809; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy516; + goto yy810; + } else { + if (yych == 'i') goto yy809; + goto yy516; + } + } +yy800: + yych = *++p; + if (yych <= 'P') { + if (yych == 'N') goto yy519; + if (yych <= 'O') goto yy516; + goto yy519; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy516; + goto yy519; + } else { + if (yych == 'p') goto yy519; + goto yy516; + } + } +yy801: + yych = *++p; + if (yych <= 'O') { + if (yych == 'A') goto yy807; + if (yych <= 'N') goto yy516; + goto yy808; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy516; + goto yy807; + } else { + if (yych == 'o') goto yy808; + goto yy516; + } + } +yy802: + yych = *++p; + if (yych == 'F') goto yy806; + if (yych == 'f') goto yy806; + goto yy516; +yy803: + yych = *++p; + if (yych <= '@') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'A') goto yy805; + if (yych == 'a') goto yy805; + goto yy516; + } +yy804: + yych = *++p; + if (yych == 'X') goto yy519; + if (yych == 'x') goto yy519; + goto yy516; +yy805: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy806: + yych = *++p; + if (yych == 'O') goto yy519; + if (yych == 'o') goto yy519; + goto yy516; +yy807: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy808: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy809: + yych = *++p; + if (yych == 'S') goto yy811; + if (yych == 's') goto yy811; + goto yy516; +yy810: + yych = *++p; + if (yych <= ':') { + if (yych == '6') goto yy519; + if (yych <= '9') goto yy516; + goto yy520; + } else { + if (yych <= 'S') { + if (yych <= 'R') goto yy516; + goto yy519; + } else { + if (yych == 's') goto yy519; + goto yy516; + } + } +yy811: + yych = *++p; + if (yych == '.') goto yy812; + if (yych == ':') goto yy520; + goto yy516; +yy812: + yych = *++p; + if (yych <= 'X') { + if (yych <= 'K') { + if (yych == 'B') goto yy815; + goto yy516; + } else { + if (yych <= 'L') goto yy813; + if (yych <= 'W') goto yy516; + goto yy814; + } + } else { + if (yych <= 'k') { + if (yych == 'b') goto yy815; + goto yy516; + } else { + if (yych <= 'l') goto yy813; + if (yych == 'x') goto yy814; + goto yy516; + } + } +yy813: + yych = *++p; + if (yych == 'W') goto yy820; + if (yych == 'w') goto yy820; + goto yy516; +yy814: + yych = *++p; + if (yych == 'P') goto yy818; + if (yych == 'p') goto yy818; + goto yy516; +yy815: + yych = *++p; + if (yych == 'E') goto yy816; + if (yych != 'e') goto yy516; +yy816: + yych = *++p; + if (yych == 'E') goto yy817; + if (yych != 'e') goto yy516; +yy817: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy818: + yych = *++p; + if (yych == 'C') goto yy819; + if (yych != 'c') goto yy516; +yy819: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy820: + yych = *++p; + if (yych == 'Z') goto yy519; + if (yych == 'z') goto yy519; + goto yy516; +yy821: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy822: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy823: + yych = *++p; + if (yych == 'T') goto yy826; + if (yych == 't') goto yy826; + goto yy516; +yy824: + yych = *++p; + if (yych != '2') goto yy516; + yych = *++p; + if (yych == '3') goto yy519; + goto yy516; +yy826: + yych = *++p; + if (yych == 'P') goto yy827; + if (yych != 'p') goto yy516; +yy827: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy828: + yych = *++p; + if (yych == 'A') goto yy844; + if (yych == 'a') goto yy844; + goto yy516; +yy829: + yych = *++p; + if (yych <= 'Z') { + if (yych == 'T') goto yy519; + if (yych <= 'Y') goto yy516; + goto yy835; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy516; + goto yy519; + } else { + if (yych == 'z') goto yy835; + goto yy516; + } + } +yy830: + yych = *++p; + if (yych <= 'O') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'P') goto yy832; + if (yych == 'p') goto yy832; + goto yy516; + } +yy831: + yych = *++p; + if (yych == 'O') goto yy519; + if (yych == 'o') goto yy519; + goto yy516; +yy832: + yych = *++p; + if (yych == 'H') goto yy833; + if (yych != 'h') goto yy516; +yy833: + yych = *++p; + if (yych == 'E') goto yy834; + if (yych != 'e') goto yy516; +yy834: + yych = *++p; + if (yych == 'R') goto yy519; + if (yych == 'r') goto yy519; + goto yy516; +yy835: + yych = *++p; + if (yych == 'M') goto yy836; + if (yych != 'm') goto yy516; +yy836: + yych = *++p; + if (yych == 'O') goto yy837; + if (yych != 'o') goto yy516; +yy837: + yych = *++p; + if (yych == 'P') goto yy838; + if (yych != 'p') goto yy516; +yy838: + yych = *++p; + if (yych == 'R') goto yy839; + if (yych != 'r') goto yy516; +yy839: + yych = *++p; + if (yych == 'O') goto yy840; + if (yych != 'o') goto yy516; +yy840: + yych = *++p; + if (yych == 'J') goto yy841; + if (yych != 'j') goto yy516; +yy841: + yych = *++p; + if (yych == 'E') goto yy842; + if (yych != 'e') goto yy516; +yy842: + yych = *++p; + if (yych == 'C') goto yy843; + if (yych != 'c') goto yy516; +yy843: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy844: + yych = *++p; + if (yych == 'L') goto yy845; + if (yych != 'l') goto yy516; +yy845: + yych = *++p; + if (yych == 'K') goto yy519; + if (yych == 'k') goto yy519; + goto yy516; +yy846: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'L') goto yy856; + goto yy516; + } else { + if (yych <= 'N') goto yy857; + if (yych <= 'R') goto yy516; + goto yy858; + } + } else { + if (yych <= 'm') { + if (yych == 'l') goto yy856; + goto yy516; + } else { + if (yych <= 'n') goto yy857; + if (yych == 's') goto yy858; + goto yy516; + } + } +yy847: + yych = *++p; + if (yych == 'E') goto yy855; + if (yych == 'e') goto yy855; + goto yy516; +yy848: + yych = *++p; + if (yych == 'C') goto yy850; + if (yych == 'c') goto yy850; + goto yy516; +yy849: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy850: + yych = *++p; + if (yych == 'E') goto yy851; + if (yych != 'e') goto yy516; +yy851: + yych = *++p; + if (yych == 'T') goto yy852; + if (yych != 't') goto yy516; +yy852: + yych = *++p; + if (yych == 'I') goto yy853; + if (yych != 'i') goto yy516; +yy853: + yych = *++p; + if (yych == 'M') goto yy854; + if (yych != 'm') goto yy516; +yy854: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy855: + yych = *++p; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy516; +yy856: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy857: + yych = *++p; + if (yych == 'G') goto yy859; + if (yych == 'g') goto yy859; + goto yy516; +yy858: + yych = *++p; + if (yych == 'H') goto yy519; + if (yych == 'h') goto yy519; + goto yy516; +yy859: + yych = *++p; + if (yych == 'E') goto yy860; + if (yych != 'e') goto yy516; +yy860: + yych = *++p; + if (yych == 'R') goto yy519; + if (yych == 'r') goto yy519; + goto yy516; +yy861: + yych = *++p; + if (yych == 'T') goto yy879; + if (yych == 't') goto yy879; + goto yy516; +yy862: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy863: + yych = *++p; + if (yych == 'M') goto yy519; + if (yych == 'm') goto yy519; + goto yy516; +yy864: + yych = *++p; + if (yych <= 'S') { + if (yych == 'P') goto yy519; + if (yych <= 'R') goto yy516; + goto yy519; + } else { + if (yych <= 'p') { + if (yych <= 'o') goto yy516; + goto yy519; + } else { + if (yych == 's') goto yy519; + goto yy516; + } + } +yy865: + yych = *++p; + if (yych == 'I') goto yy873; + if (yych == 'i') goto yy873; + goto yy516; +yy866: + yych = *++p; + if (yych == 'A') goto yy872; + if (yych == 'a') goto yy872; + goto yy516; +yy867: + yych = *++p; + if (yych == 'O') goto yy870; + if (yych == 'o') goto yy870; + goto yy516; +yy868: + yych = *++p; + if (yych == 'A') goto yy869; + if (yych != 'a') goto yy516; +yy869: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') goto yy520; + goto yy516; + } else { + if (yych <= 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; + } +yy870: + yych = *++p; + if (yych == 'U') goto yy871; + if (yych != 'u') goto yy516; +yy871: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy872: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy873: + yych = *++p; + if (yych == 'U') goto yy874; + if (yych != 'u') goto yy516; +yy874: + yych = *++p; + if (yych == 'M') goto yy875; + if (yych != 'm') goto yy516; +yy875: + yych = *++p; + if (yych == 'X') goto yy876; + if (yych != 'x') goto yy516; +yy876: + yych = *++p; + if (yych == 'T') goto yy877; + if (yych != 't') goto yy516; +yy877: + yych = *++p; + if (yych == 'R') goto yy878; + if (yych != 'r') goto yy516; +yy878: + yych = *++p; + if (yych == 'A') goto yy519; + if (yych == 'a') goto yy519; + goto yy516; +yy879: + yych = *++p; + if (yych == 'A') goto yy880; + if (yych != 'a') goto yy516; +yy880: + yych = *++p; + if (yych == 'C') goto yy881; + if (yych != 'c') goto yy516; +yy881: + yych = *++p; + if (yych == 'H') goto yy882; + if (yych != 'h') goto yy516; +yy882: + yych = *++p; + if (yych == 'M') goto yy883; + if (yych != 'm') goto yy516; +yy883: + yych = *++p; + if (yych == 'E') goto yy884; + if (yych != 'e') goto yy516; +yy884: + yych = *++p; + if (yych == 'N') goto yy885; + if (yych != 'n') goto yy516; +yy885: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy886: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy887: + yych = *++p; + if (yych <= 'V') { + if (yych == 'R') goto yy519; + if (yych <= 'U') goto yy516; + } else { + if (yych <= 'r') { + if (yych <= 'q') goto yy516; + goto yy519; + } else { + if (yych != 'v') goto yy516; + } + } + yych = *++p; + if (yych == 'A') goto yy889; + if (yych != 'a') goto yy516; +yy889: + yych = *++p; + if (yych == 'S') goto yy890; + if (yych != 's') goto yy516; +yy890: + yych = *++p; + if (yych == 'C') goto yy891; + if (yych != 'c') goto yy516; +yy891: + yych = *++p; + if (yych == 'R') goto yy892; + if (yych != 'r') goto yy516; +yy892: + yych = *++p; + if (yych == 'I') goto yy893; + if (yych != 'i') goto yy516; +yy893: + yych = *++p; + if (yych == 'P') goto yy894; + if (yych != 'p') goto yy516; +yy894: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy895: + yych = *++p; + if (yych == 'B') goto yy519; + if (yych == 'b') goto yy519; + goto yy516; +yy896: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy897: + yych = *++p; + if (yych == 'N') goto yy904; + if (yych == 'n') goto yy904; + goto yy516; +yy898: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy899: + yych = *++p; + if (yych == 'C') goto yy903; + if (yych == 'c') goto yy903; + goto yy516; +yy900: + yych = *++p; + if (yych <= 'V') { + if (yych == 'T') goto yy902; + if (yych <= 'U') goto yy516; + goto yy519; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy516; + goto yy902; + } else { + if (yych == 'v') goto yy519; + goto yy516; + } + } +yy901: + yych = *++p; + if (yych == 'I') goto yy519; + if (yych == 'i') goto yy519; + goto yy516; +yy902: + yych = *++p; + if (yych == 'A') goto yy519; + if (yych == 'a') goto yy519; + goto yy516; +yy903: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy904: + yych = *++p; + if (yych == 'A') goto yy905; + if (yych != 'a') goto yy516; +yy905: + yych = *++p; + if (yych != '-') goto yy516; + yych = *++p; + if (yych == 'P') goto yy907; + if (yych != 'p') goto yy516; +yy907: + yych = *++p; + if (yych == 'L') goto yy908; + if (yych != 'l') goto yy516; +yy908: + yych = *++p; + if (yych == 'A') goto yy909; + if (yych != 'a') goto yy516; +yy909: + yych = *++p; + if (yych == 'Y') goto yy910; + if (yych != 'y') goto yy516; +yy910: + yych = *++p; + if (yych <= 'S') { + if (yych == 'C') goto yy911; + if (yych <= 'R') goto yy516; + goto yy912; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy516; + } else { + if (yych == 's') goto yy912; + goto yy516; + } + } +yy911: + yych = *++p; + if (yych == 'O') goto yy917; + if (yych == 'o') goto yy917; + goto yy516; +yy912: + yych = *++p; + if (yych == 'I') goto yy913; + if (yych != 'i') goto yy516; +yy913: + yych = *++p; + if (yych == 'N') goto yy914; + if (yych != 'n') goto yy516; +yy914: + yych = *++p; + if (yych == 'G') goto yy915; + if (yych != 'g') goto yy516; +yy915: + yych = *++p; + if (yych == 'L') goto yy916; + if (yych != 'l') goto yy516; +yy916: + yych = *++p; + if (yych == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +yy917: + yych = *++p; + if (yych == 'N') goto yy918; + if (yych != 'n') goto yy516; +yy918: + yych = *++p; + if (yych == 'T') goto yy919; + if (yych != 't') goto yy516; +yy919: + yych = *++p; + if (yych == 'A') goto yy920; + if (yych != 'a') goto yy516; +yy920: + yych = *++p; + if (yych == 'I') goto yy921; + if (yych != 'i') goto yy516; +yy921: + yych = *++p; + if (yych == 'N') goto yy922; + if (yych != 'n') goto yy516; +yy922: + yych = *++p; + if (yych == 'E') goto yy923; + if (yych != 'e') goto yy516; +yy923: + yych = *++p; + if (yych == 'R') goto yy519; + if (yych == 'r') goto yy519; + goto yy516; +yy924: + yych = *++p; + if (yych == 'S') goto yy519; + if (yych == 's') goto yy519; + goto yy516; +yy925: + yych = *++p; + if (yych <= 'N') { + if (yych <= 'A') { + if (yych <= '@') goto yy516; + goto yy947; + } else { + if (yych <= 'L') goto yy516; + if (yych <= 'M') goto yy948; + goto yy949; + } + } else { + if (yych <= 'l') { + if (yych == 'a') goto yy947; + goto yy516; + } else { + if (yych <= 'm') goto yy948; + if (yych <= 'n') goto yy949; + goto yy516; + } + } +yy926: + yych = *++p; + if (yych == 'R') goto yy934; + if (yych == 'r') goto yy934; + goto yy516; +yy927: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') goto yy931; + if (yych <= 'O') goto yy516; + goto yy519; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy516; + goto yy931; + } else { + if (yych == 'p') goto yy519; + goto yy516; + } + } +yy928: + yych = *++p; + if (yych == 'I') goto yy930; + if (yych == 'i') goto yy930; + goto yy516; +yy929: + yych = *++p; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy516; +yy930: + yych = *++p; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy516; +yy931: + yych = *++p; + if (yych == 'L') goto yy932; + if (yych != 'l') goto yy516; +yy932: + yych = *++p; + if (yych == 'T') goto yy933; + if (yych != 't') goto yy516; +yy933: + yych = *++p; + if (yych == 'O') goto yy519; + if (yych == 'o') goto yy519; + goto yy516; +yy934: + yych = *++p; + if (yych == 'O') goto yy935; + if (yych != 'o') goto yy516; +yy935: + yych = *++p; + if (yych == 'M') goto yy936; + if (yych != 'm') goto yy516; +yy936: + yych = *++p; + if (yych == 'E') goto yy937; + if (yych != 'e') goto yy516; +yy937: + yych = *++p; + if (yych == '-') goto yy938; + if (yych == ':') goto yy520; + goto yy516; +yy938: + yych = *++p; + if (yych == 'E') goto yy939; + if (yych != 'e') goto yy516; +yy939: + yych = *++p; + if (yych == 'X') goto yy940; + if (yych != 'x') goto yy516; +yy940: + yych = *++p; + if (yych == 'T') goto yy941; + if (yych != 't') goto yy516; +yy941: + yych = *++p; + if (yych == 'E') goto yy942; + if (yych != 'e') goto yy516; +yy942: + yych = *++p; + if (yych == 'N') goto yy943; + if (yych != 'n') goto yy516; +yy943: + yych = *++p; + if (yych == 'S') goto yy944; + if (yych != 's') goto yy516; +yy944: + yych = *++p; + if (yych == 'I') goto yy945; + if (yych != 'i') goto yy516; +yy945: + yych = *++p; + if (yych == 'O') goto yy946; + if (yych != 'o') goto yy516; +yy946: + yych = *++p; + if (yych == 'N') goto yy519; + if (yych == 'n') goto yy519; + goto yy516; +yy947: + yych = *++p; + if (yych == 'P') goto yy519; + if (yych == 'p') goto yy519; + goto yy516; +yy948: + yych = *++p; + if (yych == '-') goto yy953; + goto yy516; +yy949: + yych = *++p; + if (yych == 'T') goto yy950; + if (yych != 't') goto yy516; +yy950: + yych = *++p; + if (yych == 'E') goto yy951; + if (yych != 'e') goto yy516; +yy951: + yych = *++p; + if (yych == 'N') goto yy952; + if (yych != 'n') goto yy516; +yy952: + yych = *++p; + if (yych == 'T') goto yy519; + if (yych == 't') goto yy519; + goto yy516; +yy953: + yych = *++p; + if (yych == 'E') goto yy954; + if (yych != 'e') goto yy516; +yy954: + yych = *++p; + if (yych == 'V') goto yy955; + if (yych != 'v') goto yy516; +yy955: + yych = *++p; + if (yych == 'E') goto yy956; + if (yych != 'e') goto yy516; +yy956: + yych = *++p; + if (yych == 'N') goto yy957; + if (yych != 'n') goto yy516; +yy957: + yych = *++p; + if (yych == 'T') goto yy958; + if (yych != 't') goto yy516; +yy958: + yych = *++p; + if (yych == 'B') goto yy959; + if (yych != 'b') goto yy516; +yy959: + yych = *++p; + if (yych == 'R') goto yy960; + if (yych != 'r') goto yy516; +yy960: + yych = *++p; + if (yych == 'I') goto yy961; + if (yych != 'i') goto yy516; +yy961: + yych = *++p; + if (yych == 'T') goto yy962; + if (yych != 't') goto yy516; +yy962: + yych = *++p; + if (yych == 'E') goto yy963; + if (yych != 'e') goto yy516; +yy963: + yych = *++p; + if (yych != '-') goto yy516; + yych = *++p; + if (yych == 'A') goto yy965; + if (yych != 'a') goto yy516; +yy965: + yych = *++p; + if (yych == 'T') goto yy966; + if (yych != 't') goto yy516; +yy966: + yych = *++p; + if (yych == 'T') goto yy967; + if (yych != 't') goto yy516; +yy967: + yych = *++p; + if (yych == 'E') goto yy968; + if (yych != 'e') goto yy516; +yy968: + yych = *++p; + if (yych == 'N') goto yy969; + if (yych != 'n') goto yy516; +yy969: + yych = *++p; + if (yych == 'D') goto yy970; + if (yych != 'd') goto yy516; +yy970: + yych = *++p; + if (yych == 'E') goto yy971; + if (yych != 'e') goto yy516; +yy971: + ++p; + if ((yych = *p) == 'E') goto yy519; + if (yych == 'e') goto yy519; + goto yy516; +} + +} + +// Try to match email autolink after first <, returning num of chars matched. +int _scan_autolink_email(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = 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, + 0, 128, 0, 128, 128, 128, 128, 128, + 0, 0, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 128, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 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, + }; + yych = *p; + if (yych <= ',') { + if (yych <= '!') { + if (yych == '\n') goto yy974; + if (yych <= ' ') goto yy976; + goto yy975; + } else { + if (yych <= '\'') { + if (yych <= '"') goto yy976; + goto yy975; + } else { + if (yych <= ')') goto yy976; + if (yych <= '+') goto yy975; + goto yy976; + } + } + } else { + if (yych <= '?') { + if (yych <= '<') { + if (yych <= '9') goto yy975; + goto yy976; + } else { + if (yych == '>') goto yy976; + goto yy975; + } + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy976; + goto yy975; + } else { + if (yych <= ']') goto yy976; + if (yych <= '~') goto yy975; + goto yy976; + } + } + } +yy974: + { return 0; } +yy975: + yych = *(marker = ++p); + if (yych <= ',') { + if (yych <= '"') { + if (yych == '!') goto yy980; + goto yy974; + } else { + if (yych <= '\'') goto yy980; + if (yych <= ')') goto yy974; + if (yych <= '+') goto yy980; + goto yy974; + } + } else { + if (yych <= '>') { + if (yych <= '9') goto yy980; + if (yych == '=') goto yy980; + goto yy974; + } else { + if (yych <= 'Z') goto yy980; + if (yych <= ']') goto yy974; + if (yych <= '~') goto yy980; + goto yy974; + } + } +yy976: + yych = *++p; + goto yy974; +yy977: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy981; + } else { + if (yych <= 'Z') goto yy981; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy981; + } +yy978: + p = marker; + goto yy974; +yy979: + ++p; + yych = *p; +yy980: + if (yybm[0+yych] & 128) { + goto yy979; + } + if (yych == '@') goto yy977; + goto yy978; +yy981: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy983; + goto yy978; + } } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy514; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy983; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy514; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy983; + goto yy978; } } -yy512: + yych = *++p; + if (yych <= '9') { + if (yych == '-') goto yy1111; + if (yych <= '/') goto yy978; + goto yy1112; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy978; + goto yy1112; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1112; + goto yy978; + } + } +yy983: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych <= '-') goto yy1111; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1112; + goto yy978; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1112; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1112; + goto yy978; + } + } +yy984: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy987; + goto yy978; + } else { + if (yych <= 'Z') goto yy987; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy987; + goto yy978; + } +yy985: + ++p; + { return (p - start); } +yy987: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy514; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy989; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy514; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy989; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy514; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy989; + goto yy978; } } -yy513: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy515; - if (yych <= '/') goto yy493; - goto yy516; + if (yych == '-') goto yy990; + if (yych <= '/') goto yy978; + goto yy991; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy516; + if (yych <= '@') goto yy978; + goto yy991; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy516; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy991; + goto yy978; } } -yy514: +yy989: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy516; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy991; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy516; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy991; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy516; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy991; + goto yy978; } } -yy515: +yy990: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy517; - if (yych <= '/') goto yy493; - goto yy518; + if (yych == '-') goto yy992; + if (yych <= '/') goto yy978; + goto yy993; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy518; + if (yych <= '@') goto yy978; + goto yy993; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy518; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy993; + goto yy978; } } -yy516: +yy991: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy518; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy993; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy518; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy993; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy518; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy993; + goto yy978; } } -yy517: +yy992: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy519; - if (yych <= '/') goto yy493; - goto yy520; + if (yych == '-') goto yy994; + if (yych <= '/') goto yy978; + goto yy995; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy520; + if (yych <= '@') goto yy978; + goto yy995; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy520; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy995; + goto yy978; } } -yy518: +yy993: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy520; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy995; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy520; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy995; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy520; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy995; + goto yy978; } } -yy519: +yy994: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy521; - if (yych <= '/') goto yy493; - goto yy522; + if (yych == '-') goto yy996; + if (yych <= '/') goto yy978; + goto yy997; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy522; + if (yych <= '@') goto yy978; + goto yy997; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy522; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy997; + goto yy978; } } -yy520: +yy995: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy522; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy997; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy522; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy997; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy522; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy997; + goto yy978; } } -yy521: +yy996: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy523; - if (yych <= '/') goto yy493; - goto yy524; + if (yych == '-') goto yy998; + if (yych <= '/') goto yy978; + goto yy999; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy524; + if (yych <= '@') goto yy978; + goto yy999; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy524; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy999; + goto yy978; } } -yy522: +yy997: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy524; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy999; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy524; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy999; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy524; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy999; + goto yy978; } } -yy523: +yy998: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy525; - if (yych <= '/') goto yy493; - goto yy526; + if (yych == '-') goto yy1000; + if (yych <= '/') goto yy978; + goto yy1001; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy526; + if (yych <= '@') goto yy978; + goto yy1001; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy526; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1001; + goto yy978; } } -yy524: +yy999: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy526; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1001; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy526; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1001; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy526; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1001; + goto yy978; } } -yy525: +yy1000: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy527; - if (yych <= '/') goto yy493; - goto yy528; + if (yych == '-') goto yy1002; + if (yych <= '/') goto yy978; + goto yy1003; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy528; + if (yych <= '@') goto yy978; + goto yy1003; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy528; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1003; + goto yy978; } } -yy526: +yy1001: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy528; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1003; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy528; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1003; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy528; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1003; + goto yy978; } } -yy527: +yy1002: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy529; - if (yych <= '/') goto yy493; - goto yy530; + if (yych == '-') goto yy1004; + if (yych <= '/') goto yy978; + goto yy1005; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy530; + if (yych <= '@') goto yy978; + goto yy1005; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy530; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1005; + goto yy978; } } -yy528: +yy1003: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy530; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1005; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy530; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1005; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy530; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1005; + goto yy978; } } -yy529: +yy1004: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy531; - if (yych <= '/') goto yy493; - goto yy532; + if (yych == '-') goto yy1006; + if (yych <= '/') goto yy978; + goto yy1007; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy532; + if (yych <= '@') goto yy978; + goto yy1007; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy532; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1007; + goto yy978; } } -yy530: +yy1005: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy532; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1007; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy532; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1007; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy532; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1007; + goto yy978; } } -yy531: +yy1006: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy533; - if (yych <= '/') goto yy493; - goto yy534; + if (yych == '-') goto yy1008; + if (yych <= '/') goto yy978; + goto yy1009; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy534; + if (yych <= '@') goto yy978; + goto yy1009; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy534; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1009; + goto yy978; } } -yy532: +yy1007: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy534; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1009; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy534; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1009; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy534; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1009; + goto yy978; } } -yy533: +yy1008: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy535; - if (yych <= '/') goto yy493; - goto yy536; + if (yych == '-') goto yy1010; + if (yych <= '/') goto yy978; + goto yy1011; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy536; + if (yych <= '@') goto yy978; + goto yy1011; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy536; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1011; + goto yy978; } } -yy534: +yy1009: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy536; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1011; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy536; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1011; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy536; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1011; + goto yy978; } } -yy535: +yy1010: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy537; - if (yych <= '/') goto yy493; - goto yy538; + if (yych == '-') goto yy1012; + if (yych <= '/') goto yy978; + goto yy1013; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy538; + if (yych <= '@') goto yy978; + goto yy1013; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy538; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1013; + goto yy978; } } -yy536: +yy1011: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy538; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1013; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy538; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1013; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy538; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1013; + goto yy978; } } -yy537: +yy1012: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy539; - if (yych <= '/') goto yy493; - goto yy540; + if (yych == '-') goto yy1014; + if (yych <= '/') goto yy978; + goto yy1015; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy540; + if (yych <= '@') goto yy978; + goto yy1015; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy540; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1015; + goto yy978; } } -yy538: +yy1013: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy540; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1015; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy540; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1015; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy540; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1015; + goto yy978; } } -yy539: +yy1014: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy541; - if (yych <= '/') goto yy493; - goto yy542; + if (yych == '-') goto yy1016; + if (yych <= '/') goto yy978; + goto yy1017; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy542; + if (yych <= '@') goto yy978; + goto yy1017; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy542; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1017; + goto yy978; } } -yy540: +yy1015: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy542; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1017; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy542; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1017; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy542; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1017; + goto yy978; } } -yy541: +yy1016: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy543; - if (yych <= '/') goto yy493; - goto yy544; + if (yych == '-') goto yy1018; + if (yych <= '/') goto yy978; + goto yy1019; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy544; + if (yych <= '@') goto yy978; + goto yy1019; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy544; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1019; + goto yy978; } } -yy542: +yy1017: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy544; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1019; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy544; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1019; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy544; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1019; + goto yy978; } } -yy543: +yy1018: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy545; - if (yych <= '/') goto yy493; - goto yy546; + if (yych == '-') goto yy1020; + if (yych <= '/') goto yy978; + goto yy1021; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy546; + if (yych <= '@') goto yy978; + goto yy1021; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy546; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1021; + goto yy978; } } -yy544: +yy1019: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy546; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1021; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy546; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1021; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy546; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1021; + goto yy978; } } -yy545: +yy1020: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy547; - if (yych <= '/') goto yy493; - goto yy548; + if (yych == '-') goto yy1022; + if (yych <= '/') goto yy978; + goto yy1023; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy548; + if (yych <= '@') goto yy978; + goto yy1023; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy548; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1023; + goto yy978; } } -yy546: +yy1021: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1023; + goto yy978; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1023; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1023; + goto yy978; + } + } +yy1022: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') goto yy1024; + if (yych <= '/') goto yy978; + goto yy1025; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy978; + goto yy1025; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1025; + goto yy978; + } + } +yy1023: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy548; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1025; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy548; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1025; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy548; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1025; + goto yy978; } } -yy547: +yy1024: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy549; - if (yych <= '/') goto yy493; - goto yy550; + if (yych == '-') goto yy1026; + if (yych <= '/') goto yy978; + goto yy1027; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy550; + if (yych <= '@') goto yy978; + goto yy1027; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy550; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1027; + goto yy978; } } -yy548: +yy1025: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy550; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1027; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy550; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1027; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy550; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1027; + goto yy978; } } -yy549: +yy1026: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy551; - if (yych <= '/') goto yy493; - goto yy552; + if (yych == '-') goto yy1028; + if (yych <= '/') goto yy978; + goto yy1029; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy552; + if (yych <= '@') goto yy978; + goto yy1029; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy552; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1029; + goto yy978; } } -yy550: +yy1027: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy552; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1029; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy552; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1029; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy552; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1029; + goto yy978; } } -yy551: +yy1028: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy553; - if (yych <= '/') goto yy493; - goto yy554; + if (yych == '-') goto yy1030; + if (yych <= '/') goto yy978; + goto yy1031; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy554; + if (yych <= '@') goto yy978; + goto yy1031; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy554; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1031; + goto yy978; } } -yy552: +yy1029: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy554; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1031; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy554; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1031; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy554; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1031; + goto yy978; } } -yy553: +yy1030: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy555; - if (yych <= '/') goto yy493; - goto yy556; + if (yych == '-') goto yy1032; + if (yych <= '/') goto yy978; + goto yy1033; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy556; + if (yych <= '@') goto yy978; + goto yy1033; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy556; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1033; + goto yy978; } } -yy554: +yy1031: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy556; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1033; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy556; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1033; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy556; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1033; + goto yy978; } } -yy555: +yy1032: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy557; - if (yych <= '/') goto yy493; - goto yy558; + if (yych == '-') goto yy1034; + if (yych <= '/') goto yy978; + goto yy1035; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy558; + if (yych <= '@') goto yy978; + goto yy1035; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy558; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1035; + goto yy978; } } -yy556: +yy1033: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy558; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1035; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy558; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1035; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy558; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1035; + goto yy978; } } -yy557: +yy1034: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') goto yy1036; + if (yych <= '/') goto yy978; + goto yy1037; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy978; + goto yy1037; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1037; + goto yy978; + } + } +yy1035: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1037; + goto yy978; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1037; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1037; + goto yy978; + } + } +yy1036: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') goto yy1038; + if (yych <= '/') goto yy978; + goto yy1039; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy978; + goto yy1039; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1039; + goto yy978; + } + } +yy1037: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1039; + goto yy978; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1039; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1039; + goto yy978; + } + } +yy1038: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') goto yy1040; + if (yych <= '/') goto yy978; + goto yy1041; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy978; + goto yy1041; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1041; + goto yy978; + } + } +yy1039: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1041; + goto yy978; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1041; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1041; + goto yy978; + } + } +yy1040: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') goto yy1042; + if (yych <= '/') goto yy978; + goto yy1043; + } else { + if (yych <= 'Z') { + if (yych <= '@') goto yy978; + goto yy1043; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1043; + goto yy978; + } + } +yy1041: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; + } else { + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1043; + goto yy978; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1043; + } else { + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1043; + goto yy978; + } + } +yy1042: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy559; - if (yych <= '/') goto yy493; - goto yy560; + if (yych == '-') goto yy1044; + if (yych <= '/') goto yy978; + goto yy1045; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy560; + if (yych <= '@') goto yy978; + goto yy1045; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy560; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1045; + goto yy978; } } -yy558: +yy1043: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy560; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1045; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy560; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1045; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy560; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1045; + goto yy978; } } -yy559: +yy1044: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy561; - if (yych <= '/') goto yy493; - goto yy562; + if (yych == '-') goto yy1046; + if (yych <= '/') goto yy978; + goto yy1047; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy562; + if (yych <= '@') goto yy978; + goto yy1047; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy562; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1047; + goto yy978; } } -yy560: +yy1045: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy562; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1047; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy562; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1047; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy562; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1047; + goto yy978; } } -yy561: +yy1046: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy563; - if (yych <= '/') goto yy493; - goto yy564; + if (yych == '-') goto yy1048; + if (yych <= '/') goto yy978; + goto yy1049; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy564; + if (yych <= '@') goto yy978; + goto yy1049; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy564; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1049; + goto yy978; } } -yy562: +yy1047: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy564; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1049; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy564; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1049; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy564; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1049; + goto yy978; } } -yy563: +yy1048: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy565; - if (yych <= '/') goto yy493; - goto yy566; + if (yych == '-') goto yy1050; + if (yych <= '/') goto yy978; + goto yy1051; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy566; + if (yych <= '@') goto yy978; + goto yy1051; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy566; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1051; + goto yy978; } } -yy564: +yy1049: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy566; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1051; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy566; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1051; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy566; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1051; + goto yy978; } } -yy565: +yy1050: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy567; - if (yych <= '/') goto yy493; - goto yy568; + if (yych == '-') goto yy1052; + if (yych <= '/') goto yy978; + goto yy1053; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy568; + if (yych <= '@') goto yy978; + goto yy1053; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy568; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1053; + goto yy978; } } -yy566: +yy1051: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy568; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1053; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy568; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1053; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy568; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1053; + goto yy978; } } -yy567: +yy1052: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy569; - if (yych <= '/') goto yy493; - goto yy570; + if (yych == '-') goto yy1054; + if (yych <= '/') goto yy978; + goto yy1055; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy570; + if (yych <= '@') goto yy978; + goto yy1055; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy570; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1055; + goto yy978; } } -yy568: +yy1053: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy570; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1055; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy570; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1055; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy570; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1055; + goto yy978; } } -yy569: +yy1054: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy571; - if (yych <= '/') goto yy493; - goto yy572; + if (yych == '-') goto yy1056; + if (yych <= '/') goto yy978; + goto yy1057; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy572; + if (yych <= '@') goto yy978; + goto yy1057; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy572; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1057; + goto yy978; } } -yy570: +yy1055: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy572; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1057; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy572; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1057; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy572; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1057; + goto yy978; } } -yy571: +yy1056: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy573; - if (yych <= '/') goto yy493; - goto yy574; + if (yych == '-') goto yy1058; + if (yych <= '/') goto yy978; + goto yy1059; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy574; + if (yych <= '@') goto yy978; + goto yy1059; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy574; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1059; + goto yy978; } } -yy572: +yy1057: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy574; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1059; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy574; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1059; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy574; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1059; + goto yy978; } } -yy573: +yy1058: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy575; - if (yych <= '/') goto yy493; - goto yy576; + if (yych == '-') goto yy1060; + if (yych <= '/') goto yy978; + goto yy1061; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy576; + if (yych <= '@') goto yy978; + goto yy1061; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy576; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1061; + goto yy978; } } -yy574: +yy1059: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy576; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1061; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy576; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1061; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy576; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1061; + goto yy978; } } -yy575: +yy1060: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy577; - if (yych <= '/') goto yy493; - goto yy578; + if (yych == '-') goto yy1062; + if (yych <= '/') goto yy978; + goto yy1063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy578; + if (yych <= '@') goto yy978; + goto yy1063; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy578; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1063; + goto yy978; } } -yy576: +yy1061: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy578; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1063; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy578; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1063; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy578; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1063; + goto yy978; } } -yy577: +yy1062: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy579; - if (yych <= '/') goto yy493; - goto yy580; + if (yych == '-') goto yy1064; + if (yych <= '/') goto yy978; + goto yy1065; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy580; + if (yych <= '@') goto yy978; + goto yy1065; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy580; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1065; + goto yy978; } } -yy578: +yy1063: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy580; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1065; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy580; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1065; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy580; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1065; + goto yy978; } } -yy579: +yy1064: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy581; - if (yych <= '/') goto yy493; - goto yy582; + if (yych == '-') goto yy1066; + if (yych <= '/') goto yy978; + goto yy1067; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy582; + if (yych <= '@') goto yy978; + goto yy1067; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy582; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1067; + goto yy978; } } -yy580: +yy1065: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy582; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1067; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy582; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1067; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy582; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1067; + goto yy978; } } -yy581: +yy1066: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy583; - if (yych <= '/') goto yy493; - goto yy584; + if (yych == '-') goto yy1068; + if (yych <= '/') goto yy978; + goto yy1069; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy584; + if (yych <= '@') goto yy978; + goto yy1069; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy584; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1069; + goto yy978; } } -yy582: +yy1067: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy584; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1069; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy584; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1069; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy584; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1069; + goto yy978; } } -yy583: +yy1068: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy585; - if (yych <= '/') goto yy493; - goto yy586; + if (yych == '-') goto yy1070; + if (yych <= '/') goto yy978; + goto yy1071; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy586; + if (yych <= '@') goto yy978; + goto yy1071; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy586; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1071; + goto yy978; } } -yy584: +yy1069: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy586; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1071; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy586; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1071; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy586; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1071; + goto yy978; } } -yy585: +yy1070: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy587; - if (yych <= '/') goto yy493; - goto yy588; + if (yych == '-') goto yy1072; + if (yych <= '/') goto yy978; + goto yy1073; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy588; + if (yych <= '@') goto yy978; + goto yy1073; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy588; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1073; + goto yy978; } } -yy586: +yy1071: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy588; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1073; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy588; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1073; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy588; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1073; + goto yy978; } } -yy587: +yy1072: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy589; - if (yych <= '/') goto yy493; - goto yy590; + if (yych == '-') goto yy1074; + if (yych <= '/') goto yy978; + goto yy1075; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy590; + if (yych <= '@') goto yy978; + goto yy1075; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy590; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1075; + goto yy978; } } -yy588: +yy1073: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy590; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1075; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy590; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1075; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy590; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1075; + goto yy978; } } -yy589: +yy1074: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy591; - if (yych <= '/') goto yy493; - goto yy592; + if (yych == '-') goto yy1076; + if (yych <= '/') goto yy978; + goto yy1077; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy592; + if (yych <= '@') goto yy978; + goto yy1077; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy592; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1077; + goto yy978; } } -yy590: +yy1075: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy592; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1077; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy592; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1077; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy592; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1077; + goto yy978; } } -yy591: +yy1076: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy593; - if (yych <= '/') goto yy493; - goto yy594; + if (yych == '-') goto yy1078; + if (yych <= '/') goto yy978; + goto yy1079; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy594; + if (yych <= '@') goto yy978; + goto yy1079; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy594; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1079; + goto yy978; } } -yy592: +yy1077: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy594; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1079; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy594; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1079; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy594; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1079; + goto yy978; } } -yy593: +yy1078: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy595; - if (yych <= '/') goto yy493; - goto yy596; + if (yych == '-') goto yy1080; + if (yych <= '/') goto yy978; + goto yy1081; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy596; + if (yych <= '@') goto yy978; + goto yy1081; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy596; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1081; + goto yy978; } } -yy594: +yy1079: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy596; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1081; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy596; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1081; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy596; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1081; + goto yy978; } } -yy595: +yy1080: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy597; - if (yych <= '/') goto yy493; - goto yy598; + if (yych == '-') goto yy1082; + if (yych <= '/') goto yy978; + goto yy1083; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy598; + if (yych <= '@') goto yy978; + goto yy1083; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy598; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1083; + goto yy978; } } -yy596: +yy1081: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy598; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1083; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy598; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1083; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy598; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1083; + goto yy978; } } -yy597: +yy1082: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy599; - if (yych <= '/') goto yy493; - goto yy600; + if (yych == '-') goto yy1084; + if (yych <= '/') goto yy978; + goto yy1085; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy600; + if (yych <= '@') goto yy978; + goto yy1085; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy600; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1085; + goto yy978; } } -yy598: +yy1083: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy600; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1085; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy600; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1085; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy600; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1085; + goto yy978; } } -yy599: +yy1084: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy601; - if (yych <= '/') goto yy493; - goto yy602; + if (yych == '-') goto yy1086; + if (yych <= '/') goto yy978; + goto yy1087; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy602; + if (yych <= '@') goto yy978; + goto yy1087; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy602; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1087; + goto yy978; } } -yy600: +yy1085: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy602; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1087; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy602; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1087; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy602; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1087; + goto yy978; } } -yy601: +yy1086: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy603; - if (yych <= '/') goto yy493; - goto yy604; + if (yych == '-') goto yy1088; + if (yych <= '/') goto yy978; + goto yy1089; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy604; + if (yych <= '@') goto yy978; + goto yy1089; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy604; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1089; + goto yy978; } } -yy602: +yy1087: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy604; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1089; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy604; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1089; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy604; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1089; + goto yy978; } } -yy603: +yy1088: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy605; - if (yych <= '/') goto yy493; - goto yy606; + if (yych == '-') goto yy1090; + if (yych <= '/') goto yy978; + goto yy1091; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy606; + if (yych <= '@') goto yy978; + goto yy1091; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy606; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1091; + goto yy978; } } -yy604: +yy1089: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy606; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1091; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy606; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1091; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy606; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1091; + goto yy978; } } -yy605: +yy1090: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy607; - if (yych <= '/') goto yy493; - goto yy608; + if (yych == '-') goto yy1092; + if (yych <= '/') goto yy978; + goto yy1093; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy608; + if (yych <= '@') goto yy978; + goto yy1093; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy608; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1093; + goto yy978; } } -yy606: +yy1091: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy608; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1093; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy608; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1093; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy608; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1093; + goto yy978; } } -yy607: +yy1092: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy609; - if (yych <= '/') goto yy493; - goto yy610; + if (yych == '-') goto yy1094; + if (yych <= '/') goto yy978; + goto yy1095; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy610; + if (yych <= '@') goto yy978; + goto yy1095; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy610; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1095; + goto yy978; } } -yy608: +yy1093: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy610; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1095; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy610; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1095; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy610; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1095; + goto yy978; } } -yy609: +yy1094: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy611; - if (yych <= '/') goto yy493; - goto yy612; + if (yych == '-') goto yy1096; + if (yych <= '/') goto yy978; + goto yy1097; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy612; + if (yych <= '@') goto yy978; + goto yy1097; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy612; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1097; + goto yy978; } } -yy610: +yy1095: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy612; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1097; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy612; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1097; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy612; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1097; + goto yy978; } } -yy611: +yy1096: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy613; - if (yych <= '/') goto yy493; - goto yy614; + if (yych == '-') goto yy1098; + if (yych <= '/') goto yy978; + goto yy1099; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy614; + if (yych <= '@') goto yy978; + goto yy1099; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy614; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1099; + goto yy978; } } -yy612: +yy1097: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy614; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1099; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy614; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1099; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy614; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1099; + goto yy978; } } -yy613: +yy1098: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy615; - if (yych <= '/') goto yy493; - goto yy616; + if (yych == '-') goto yy1100; + if (yych <= '/') goto yy978; + goto yy1101; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy616; + if (yych <= '@') goto yy978; + goto yy1101; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy616; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1101; + goto yy978; } } -yy614: +yy1099: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy616; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1101; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy616; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1101; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy616; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1101; + goto yy978; } } -yy615: +yy1100: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy617; - if (yych <= '/') goto yy493; - goto yy618; + if (yych == '-') goto yy1102; + if (yych <= '/') goto yy978; + goto yy1103; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy618; + if (yych <= '@') goto yy978; + goto yy1103; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy618; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1103; + goto yy978; } } -yy616: +yy1101: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy618; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1103; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy618; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1103; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy618; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1103; + goto yy978; } } -yy617: +yy1102: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy619; - if (yych <= '/') goto yy493; - goto yy620; + if (yych == '-') goto yy1104; + if (yych <= '/') goto yy978; + goto yy1105; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy620; + if (yych <= '@') goto yy978; + goto yy1105; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy620; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1105; + goto yy978; } } -yy618: +yy1103: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy620; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1105; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy620; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1105; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy620; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1105; + goto yy978; } } -yy619: +yy1104: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy621; - if (yych <= '/') goto yy493; - goto yy622; + if (yych == '-') goto yy1106; + if (yych <= '/') goto yy978; + goto yy1107; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy622; + if (yych <= '@') goto yy978; + goto yy1107; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy622; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1107; + goto yy978; } } -yy620: +yy1105: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy622; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1107; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy622; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1107; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy622; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1107; + goto yy978; } } -yy621: +yy1106: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy623; - if (yych <= '/') goto yy493; - goto yy624; + if (yych == '-') goto yy1108; + if (yych <= '/') goto yy978; + goto yy1109; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy624; + if (yych <= '@') goto yy978; + goto yy1109; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy624; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1109; + goto yy978; } } -yy622: +yy1107: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy624; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1109; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy624; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1109; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy624; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1109; + goto yy978; } } -yy623: +yy1108: ++p; yych = *p; if (yych <= '@') { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy625; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1110; + goto yy978; } else { - if (yych <= 'Z') goto yy625; - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy625; - goto yy493; + if (yych <= 'Z') goto yy1110; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1110; + goto yy978; } -yy624: +yy1109: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= '-') goto yy493; - goto yy499; + if (yych <= '-') goto yy978; + goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych >= ':') goto yy493; + if (yych <= '/') goto yy978; + if (yych >= ':') goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; } else { - if (yych <= '`') goto yy493; - if (yych >= '{') goto yy493; + if (yych <= '`') goto yy978; + if (yych >= '{') goto yy978; } } -yy625: +yy1110: ++p; yych = *p; - if (yych == '.') goto yy499; - if (yych == '>') goto yy500; - goto yy493; -yy626: + if (yych == '.') goto yy984; + if (yych == '>') goto yy985; + goto yy978; +yy1111: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy628; - if (yych <= '/') goto yy493; - goto yy629; + if (yych == '-') goto yy1113; + if (yych <= '/') goto yy978; + goto yy1114; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy629; + if (yych <= '@') goto yy978; + goto yy1114; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy629; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1114; + goto yy978; } } -yy627: +yy1112: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy629; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1114; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy629; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1114; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy629; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1114; + goto yy978; } } -yy628: +yy1113: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy630; - if (yych <= '/') goto yy493; - goto yy631; + if (yych == '-') goto yy1115; + if (yych <= '/') goto yy978; + goto yy1116; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy631; + if (yych <= '@') goto yy978; + goto yy1116; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy631; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1116; + goto yy978; } } -yy629: +yy1114: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy631; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1116; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy631; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1116; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy631; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1116; + goto yy978; } } -yy630: +yy1115: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy632; - if (yych <= '/') goto yy493; - goto yy633; + if (yych == '-') goto yy1117; + if (yych <= '/') goto yy978; + goto yy1118; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy633; + if (yych <= '@') goto yy978; + goto yy1118; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy633; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1118; + goto yy978; } } -yy631: +yy1116: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy633; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1118; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy633; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1118; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy633; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1118; + goto yy978; } } -yy632: +yy1117: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy634; - if (yych <= '/') goto yy493; - goto yy635; + if (yych == '-') goto yy1119; + if (yych <= '/') goto yy978; + goto yy1120; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy635; + if (yych <= '@') goto yy978; + goto yy1120; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy635; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1120; + goto yy978; } } -yy633: +yy1118: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy635; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1120; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy635; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1120; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy635; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1120; + goto yy978; } } -yy634: +yy1119: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy636; - if (yych <= '/') goto yy493; - goto yy637; + if (yych == '-') goto yy1121; + if (yych <= '/') goto yy978; + goto yy1122; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy637; + if (yych <= '@') goto yy978; + goto yy1122; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy637; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1122; + goto yy978; } } -yy635: +yy1120: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy637; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1122; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy637; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1122; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy637; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1122; + goto yy978; } } -yy636: +yy1121: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy638; - if (yych <= '/') goto yy493; - goto yy639; + if (yych == '-') goto yy1123; + if (yych <= '/') goto yy978; + goto yy1124; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy639; + if (yych <= '@') goto yy978; + goto yy1124; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy639; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1124; + goto yy978; } } -yy637: +yy1122: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy639; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1124; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy639; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1124; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy639; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1124; + goto yy978; } } -yy638: +yy1123: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy640; - if (yych <= '/') goto yy493; - goto yy641; + if (yych == '-') goto yy1125; + if (yych <= '/') goto yy978; + goto yy1126; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy641; + if (yych <= '@') goto yy978; + goto yy1126; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy641; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1126; + goto yy978; } } -yy639: +yy1124: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy641; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1126; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy641; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1126; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy641; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1126; + goto yy978; } } -yy640: +yy1125: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy642; - if (yych <= '/') goto yy493; - goto yy643; + if (yych == '-') goto yy1127; + if (yych <= '/') goto yy978; + goto yy1128; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy643; + if (yych <= '@') goto yy978; + goto yy1128; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy643; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1128; + goto yy978; } } -yy641: +yy1126: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy643; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1128; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy643; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1128; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy643; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1128; + goto yy978; } } -yy642: +yy1127: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy644; - if (yych <= '/') goto yy493; - goto yy645; + if (yych == '-') goto yy1129; + if (yych <= '/') goto yy978; + goto yy1130; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy645; + if (yych <= '@') goto yy978; + goto yy1130; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy645; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1130; + goto yy978; } } -yy643: +yy1128: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy645; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1130; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy645; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1130; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy645; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1130; + goto yy978; } } -yy644: +yy1129: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy646; - if (yych <= '/') goto yy493; - goto yy647; + if (yych == '-') goto yy1131; + if (yych <= '/') goto yy978; + goto yy1132; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy647; + if (yych <= '@') goto yy978; + goto yy1132; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy647; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1132; + goto yy978; } } -yy645: +yy1130: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy647; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1132; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy647; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1132; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy647; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1132; + goto yy978; } } -yy646: +yy1131: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy648; - if (yych <= '/') goto yy493; - goto yy649; + if (yych == '-') goto yy1133; + if (yych <= '/') goto yy978; + goto yy1134; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy649; + if (yych <= '@') goto yy978; + goto yy1134; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy649; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1134; + goto yy978; } } -yy647: +yy1132: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy649; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1134; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy649; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1134; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy649; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1134; + goto yy978; } } -yy648: +yy1133: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy650; - if (yych <= '/') goto yy493; - goto yy651; + if (yych == '-') goto yy1135; + if (yych <= '/') goto yy978; + goto yy1136; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy651; + if (yych <= '@') goto yy978; + goto yy1136; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy651; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1136; + goto yy978; } } -yy649: +yy1134: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy651; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1136; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy651; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1136; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy651; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1136; + goto yy978; } } -yy650: +yy1135: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy652; - if (yych <= '/') goto yy493; - goto yy653; + if (yych == '-') goto yy1137; + if (yych <= '/') goto yy978; + goto yy1138; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy653; + if (yych <= '@') goto yy978; + goto yy1138; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy653; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1138; + goto yy978; } } -yy651: +yy1136: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy653; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1138; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy653; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1138; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy653; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1138; + goto yy978; } } -yy652: +yy1137: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy654; - if (yych <= '/') goto yy493; - goto yy655; + if (yych == '-') goto yy1139; + if (yych <= '/') goto yy978; + goto yy1140; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy655; + if (yych <= '@') goto yy978; + goto yy1140; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy655; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1140; + goto yy978; } } -yy653: +yy1138: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy655; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1140; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy655; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1140; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy655; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1140; + goto yy978; } } -yy654: +yy1139: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy656; - if (yych <= '/') goto yy493; - goto yy657; + if (yych == '-') goto yy1141; + if (yych <= '/') goto yy978; + goto yy1142; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy657; + if (yych <= '@') goto yy978; + goto yy1142; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy657; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1142; + goto yy978; } } -yy655: +yy1140: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy657; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1142; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy657; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1142; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy657; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1142; + goto yy978; } } -yy656: +yy1141: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy658; - if (yych <= '/') goto yy493; - goto yy659; + if (yych == '-') goto yy1143; + if (yych <= '/') goto yy978; + goto yy1144; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy659; + if (yych <= '@') goto yy978; + goto yy1144; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy659; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1144; + goto yy978; } } -yy657: +yy1142: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy659; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1144; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy659; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1144; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy659; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1144; + goto yy978; } } -yy658: +yy1143: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy660; - if (yych <= '/') goto yy493; - goto yy661; + if (yych == '-') goto yy1145; + if (yych <= '/') goto yy978; + goto yy1146; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy661; + if (yych <= '@') goto yy978; + goto yy1146; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy661; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1146; + goto yy978; } } -yy659: +yy1144: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy661; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1146; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy661; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1146; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy661; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1146; + goto yy978; } } -yy660: +yy1145: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy662; - if (yych <= '/') goto yy493; - goto yy663; + if (yych == '-') goto yy1147; + if (yych <= '/') goto yy978; + goto yy1148; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy663; + if (yych <= '@') goto yy978; + goto yy1148; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy663; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1148; + goto yy978; } } -yy661: +yy1146: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy663; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1148; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy663; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1148; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy663; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1148; + goto yy978; } } -yy662: +yy1147: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy664; - if (yych <= '/') goto yy493; - goto yy665; + if (yych == '-') goto yy1149; + if (yych <= '/') goto yy978; + goto yy1150; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy665; + if (yych <= '@') goto yy978; + goto yy1150; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy665; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1150; + goto yy978; } } -yy663: +yy1148: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy665; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1150; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy665; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1150; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy665; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1150; + goto yy978; } } -yy664: +yy1149: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy666; - if (yych <= '/') goto yy493; - goto yy667; + if (yych == '-') goto yy1151; + if (yych <= '/') goto yy978; + goto yy1152; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy667; + if (yych <= '@') goto yy978; + goto yy1152; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy667; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1152; + goto yy978; } } -yy665: +yy1150: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy667; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1152; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy667; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1152; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy667; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1152; + goto yy978; } } -yy666: +yy1151: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy668; - if (yych <= '/') goto yy493; - goto yy669; + if (yych == '-') goto yy1153; + if (yych <= '/') goto yy978; + goto yy1154; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy669; + if (yych <= '@') goto yy978; + goto yy1154; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy669; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1154; + goto yy978; } } -yy667: +yy1152: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy669; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1154; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy669; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1154; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy669; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1154; + goto yy978; } } -yy668: +yy1153: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy670; - if (yych <= '/') goto yy493; - goto yy671; + if (yych == '-') goto yy1155; + if (yych <= '/') goto yy978; + goto yy1156; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy671; + if (yych <= '@') goto yy978; + goto yy1156; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy671; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1156; + goto yy978; } } -yy669: +yy1154: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy671; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1156; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy671; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1156; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy671; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1156; + goto yy978; } } -yy670: +yy1155: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy672; - if (yych <= '/') goto yy493; - goto yy673; + if (yych == '-') goto yy1157; + if (yych <= '/') goto yy978; + goto yy1158; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy673; + if (yych <= '@') goto yy978; + goto yy1158; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy673; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1158; + goto yy978; } } -yy671: +yy1156: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy673; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1158; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy673; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1158; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy673; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1158; + goto yy978; } } -yy672: +yy1157: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy674; - if (yych <= '/') goto yy493; - goto yy675; + if (yych == '-') goto yy1159; + if (yych <= '/') goto yy978; + goto yy1160; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy675; + if (yych <= '@') goto yy978; + goto yy1160; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy675; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1160; + goto yy978; } } -yy673: +yy1158: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy675; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1160; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy675; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1160; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy675; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1160; + goto yy978; } } -yy674: +yy1159: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy676; - if (yych <= '/') goto yy493; - goto yy677; + if (yych == '-') goto yy1161; + if (yych <= '/') goto yy978; + goto yy1162; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy677; + if (yych <= '@') goto yy978; + goto yy1162; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy677; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1162; + goto yy978; } } -yy675: +yy1160: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy677; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1162; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy677; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1162; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy677; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1162; + goto yy978; } } -yy676: +yy1161: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy678; - if (yych <= '/') goto yy493; - goto yy679; + if (yych == '-') goto yy1163; + if (yych <= '/') goto yy978; + goto yy1164; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy679; + if (yych <= '@') goto yy978; + goto yy1164; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy679; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1164; + goto yy978; } } -yy677: +yy1162: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy679; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1164; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy679; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1164; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy679; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1164; + goto yy978; } } -yy678: +yy1163: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy680; - if (yych <= '/') goto yy493; - goto yy681; + if (yych == '-') goto yy1165; + if (yych <= '/') goto yy978; + goto yy1166; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy681; + if (yych <= '@') goto yy978; + goto yy1166; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy681; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1166; + goto yy978; } } -yy679: +yy1164: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy681; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1166; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy681; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1166; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy681; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1166; + goto yy978; } } -yy680: +yy1165: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy682; - if (yych <= '/') goto yy493; - goto yy683; + if (yych == '-') goto yy1167; + if (yych <= '/') goto yy978; + goto yy1168; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy683; + if (yych <= '@') goto yy978; + goto yy1168; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy683; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1168; + goto yy978; } } -yy681: +yy1166: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy683; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1168; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy683; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1168; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy683; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1168; + goto yy978; } } -yy682: +yy1167: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy684; - if (yych <= '/') goto yy493; - goto yy685; + if (yych == '-') goto yy1169; + if (yych <= '/') goto yy978; + goto yy1170; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy685; + if (yych <= '@') goto yy978; + goto yy1170; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy685; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1170; + goto yy978; } } -yy683: +yy1168: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy685; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1170; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy685; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1170; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy685; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1170; + goto yy978; } } -yy684: +yy1169: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy686; - if (yych <= '/') goto yy493; - goto yy687; + if (yych == '-') goto yy1171; + if (yych <= '/') goto yy978; + goto yy1172; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy687; + if (yych <= '@') goto yy978; + goto yy1172; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy687; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1172; + goto yy978; } } -yy685: +yy1170: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy687; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1172; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy687; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1172; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy687; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1172; + goto yy978; } } -yy686: +yy1171: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy688; - if (yych <= '/') goto yy493; - goto yy689; + if (yych == '-') goto yy1173; + if (yych <= '/') goto yy978; + goto yy1174; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy689; + if (yych <= '@') goto yy978; + goto yy1174; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy689; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1174; + goto yy978; } } -yy687: +yy1172: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy689; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1174; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy689; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1174; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy689; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1174; + goto yy978; } } -yy688: +yy1173: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy690; - if (yych <= '/') goto yy493; - goto yy691; + if (yych == '-') goto yy1175; + if (yych <= '/') goto yy978; + goto yy1176; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy691; + if (yych <= '@') goto yy978; + goto yy1176; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy691; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1176; + goto yy978; } } -yy689: +yy1174: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy691; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1176; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy691; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1176; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy691; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1176; + goto yy978; } } -yy690: +yy1175: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy692; - if (yych <= '/') goto yy493; - goto yy693; + if (yych == '-') goto yy1177; + if (yych <= '/') goto yy978; + goto yy1178; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy693; + if (yych <= '@') goto yy978; + goto yy1178; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy693; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1178; + goto yy978; } } -yy691: +yy1176: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy693; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1178; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy693; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1178; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy693; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1178; + goto yy978; } } -yy692: +yy1177: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy694; - if (yych <= '/') goto yy493; - goto yy695; + if (yych == '-') goto yy1179; + if (yych <= '/') goto yy978; + goto yy1180; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy695; + if (yych <= '@') goto yy978; + goto yy1180; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy695; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1180; + goto yy978; } } -yy693: +yy1178: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy695; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1180; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy695; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1180; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy695; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1180; + goto yy978; } } -yy694: +yy1179: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy696; - if (yych <= '/') goto yy493; - goto yy697; + if (yych == '-') goto yy1181; + if (yych <= '/') goto yy978; + goto yy1182; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy697; + if (yych <= '@') goto yy978; + goto yy1182; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy697; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1182; + goto yy978; } } -yy695: +yy1180: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy697; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1182; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy697; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1182; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy697; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1182; + goto yy978; } } -yy696: +yy1181: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy698; - if (yych <= '/') goto yy493; - goto yy699; + if (yych == '-') goto yy1183; + if (yych <= '/') goto yy978; + goto yy1184; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy699; + if (yych <= '@') goto yy978; + goto yy1184; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy699; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1184; + goto yy978; } } -yy697: +yy1182: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy699; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1184; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy699; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1184; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy699; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1184; + goto yy978; } } -yy698: +yy1183: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy700; - if (yych <= '/') goto yy493; - goto yy701; + if (yych == '-') goto yy1185; + if (yych <= '/') goto yy978; + goto yy1186; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy701; + if (yych <= '@') goto yy978; + goto yy1186; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy701; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1186; + goto yy978; } } -yy699: +yy1184: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy701; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1186; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy701; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1186; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy701; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1186; + goto yy978; } } -yy700: +yy1185: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy702; - if (yych <= '/') goto yy493; - goto yy703; + if (yych == '-') goto yy1187; + if (yych <= '/') goto yy978; + goto yy1188; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy703; + if (yych <= '@') goto yy978; + goto yy1188; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy703; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1188; + goto yy978; } } -yy701: +yy1186: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy703; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1188; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy703; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1188; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy703; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1188; + goto yy978; } } -yy702: +yy1187: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy704; - if (yych <= '/') goto yy493; - goto yy705; + if (yych == '-') goto yy1189; + if (yych <= '/') goto yy978; + goto yy1190; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy705; + if (yych <= '@') goto yy978; + goto yy1190; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy705; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1190; + goto yy978; } } -yy703: +yy1188: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy705; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1190; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy705; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1190; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy705; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1190; + goto yy978; } } -yy704: +yy1189: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy706; - if (yych <= '/') goto yy493; - goto yy707; + if (yych == '-') goto yy1191; + if (yych <= '/') goto yy978; + goto yy1192; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy707; + if (yych <= '@') goto yy978; + goto yy1192; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy707; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1192; + goto yy978; } } -yy705: +yy1190: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy707; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1192; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy707; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1192; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy707; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1192; + goto yy978; } } -yy706: +yy1191: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy708; - if (yych <= '/') goto yy493; - goto yy709; + if (yych == '-') goto yy1193; + if (yych <= '/') goto yy978; + goto yy1194; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy709; + if (yych <= '@') goto yy978; + goto yy1194; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy709; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1194; + goto yy978; } } -yy707: +yy1192: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy709; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1194; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy709; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1194; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy709; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1194; + goto yy978; } } -yy708: +yy1193: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy710; - if (yych <= '/') goto yy493; - goto yy711; + if (yych == '-') goto yy1195; + if (yych <= '/') goto yy978; + goto yy1196; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy711; + if (yych <= '@') goto yy978; + goto yy1196; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy711; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1196; + goto yy978; } } -yy709: +yy1194: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy711; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1196; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy711; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1196; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy711; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1196; + goto yy978; } } -yy710: +yy1195: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy712; - if (yych <= '/') goto yy493; - goto yy713; + if (yych == '-') goto yy1197; + if (yych <= '/') goto yy978; + goto yy1198; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy713; + if (yych <= '@') goto yy978; + goto yy1198; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy713; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1198; + goto yy978; } } -yy711: +yy1196: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy713; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1198; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy713; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1198; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy713; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1198; + goto yy978; } } -yy712: +yy1197: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy714; - if (yych <= '/') goto yy493; - goto yy715; + if (yych == '-') goto yy1199; + if (yych <= '/') goto yy978; + goto yy1200; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy715; + if (yych <= '@') goto yy978; + goto yy1200; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy715; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1200; + goto yy978; } } -yy713: +yy1198: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy715; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1200; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy715; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1200; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy715; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1200; + goto yy978; } } -yy714: +yy1199: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy716; - if (yych <= '/') goto yy493; - goto yy717; + if (yych == '-') goto yy1201; + if (yych <= '/') goto yy978; + goto yy1202; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy717; + if (yych <= '@') goto yy978; + goto yy1202; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy717; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1202; + goto yy978; } } -yy715: +yy1200: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy717; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1202; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy717; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1202; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy717; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1202; + goto yy978; } } -yy716: +yy1201: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy718; - if (yych <= '/') goto yy493; - goto yy719; + if (yych == '-') goto yy1203; + if (yych <= '/') goto yy978; + goto yy1204; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy719; + if (yych <= '@') goto yy978; + goto yy1204; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy719; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1204; + goto yy978; } } -yy717: +yy1202: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy719; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1204; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy719; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1204; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy719; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1204; + goto yy978; } } -yy718: +yy1203: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy720; - if (yych <= '/') goto yy493; - goto yy721; + if (yych == '-') goto yy1205; + if (yych <= '/') goto yy978; + goto yy1206; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy721; + if (yych <= '@') goto yy978; + goto yy1206; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy721; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1206; + goto yy978; } } -yy719: +yy1204: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy721; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1206; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy721; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1206; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy721; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1206; + goto yy978; } } -yy720: +yy1205: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy722; - if (yych <= '/') goto yy493; - goto yy723; + if (yych == '-') goto yy1207; + if (yych <= '/') goto yy978; + goto yy1208; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy723; + if (yych <= '@') goto yy978; + goto yy1208; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy723; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1208; + goto yy978; } } -yy721: +yy1206: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy723; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1208; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy723; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1208; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy723; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1208; + goto yy978; } } -yy722: +yy1207: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy724; - if (yych <= '/') goto yy493; - goto yy725; + if (yych == '-') goto yy1209; + if (yych <= '/') goto yy978; + goto yy1210; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy725; + if (yych <= '@') goto yy978; + goto yy1210; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy725; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1210; + goto yy978; } } -yy723: +yy1208: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy725; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1210; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy725; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1210; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy725; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1210; + goto yy978; } } -yy724: +yy1209: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy726; - if (yych <= '/') goto yy493; - goto yy727; + if (yych == '-') goto yy1211; + if (yych <= '/') goto yy978; + goto yy1212; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy727; + if (yych <= '@') goto yy978; + goto yy1212; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy727; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1212; + goto yy978; } } -yy725: +yy1210: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy727; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1212; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy727; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1212; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy727; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1212; + goto yy978; } } -yy726: +yy1211: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy728; - if (yych <= '/') goto yy493; - goto yy729; + if (yych == '-') goto yy1213; + if (yych <= '/') goto yy978; + goto yy1214; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy729; + if (yych <= '@') goto yy978; + goto yy1214; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy729; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1214; + goto yy978; } } -yy727: +yy1212: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy729; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1214; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy729; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1214; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy729; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1214; + goto yy978; } } -yy728: +yy1213: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy730; - if (yych <= '/') goto yy493; - goto yy731; + if (yych == '-') goto yy1215; + if (yych <= '/') goto yy978; + goto yy1216; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy731; + if (yych <= '@') goto yy978; + goto yy1216; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy731; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1216; + goto yy978; } } -yy729: +yy1214: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy731; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1216; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy731; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1216; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy731; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1216; + goto yy978; } } -yy730: +yy1215: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy732; - if (yych <= '/') goto yy493; - goto yy733; + if (yych == '-') goto yy1217; + if (yych <= '/') goto yy978; + goto yy1218; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy733; + if (yych <= '@') goto yy978; + goto yy1218; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy733; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1218; + goto yy978; } } -yy731: +yy1216: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy733; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1218; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy733; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1218; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy733; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1218; + goto yy978; } } -yy732: +yy1217: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy734; - if (yych <= '/') goto yy493; - goto yy735; + if (yych == '-') goto yy1219; + if (yych <= '/') goto yy978; + goto yy1220; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy735; + if (yych <= '@') goto yy978; + goto yy1220; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy735; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1220; + goto yy978; } } -yy733: +yy1218: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy735; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1220; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy735; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1220; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy735; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1220; + goto yy978; } } -yy734: +yy1219: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy736; - if (yych <= '/') goto yy493; - goto yy737; + if (yych == '-') goto yy1221; + if (yych <= '/') goto yy978; + goto yy1222; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy737; + if (yych <= '@') goto yy978; + goto yy1222; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy737; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1222; + goto yy978; } } -yy735: +yy1220: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy737; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1222; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy737; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1222; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy737; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1222; + goto yy978; } } -yy736: +yy1221: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy738; - if (yych <= '/') goto yy493; - goto yy739; + if (yych == '-') goto yy1223; + if (yych <= '/') goto yy978; + goto yy1224; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy739; + if (yych <= '@') goto yy978; + goto yy1224; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy739; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1224; + goto yy978; } } -yy737: +yy1222: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy739; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1224; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy739; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1224; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy739; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1224; + goto yy978; } } -yy738: +yy1223: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy740; - if (yych <= '/') goto yy493; - goto yy741; + if (yych == '-') goto yy1225; + if (yych <= '/') goto yy978; + goto yy1226; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy741; + if (yych <= '@') goto yy978; + goto yy1226; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy741; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1226; + goto yy978; } } -yy739: +yy1224: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy741; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1226; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy741; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1226; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy741; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1226; + goto yy978; } } -yy740: +yy1225: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy742; - if (yych <= '/') goto yy493; - goto yy743; + if (yych == '-') goto yy1227; + if (yych <= '/') goto yy978; + goto yy1228; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy743; + if (yych <= '@') goto yy978; + goto yy1228; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy743; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1228; + goto yy978; } } -yy741: +yy1226: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy743; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1228; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy743; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1228; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy743; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1228; + goto yy978; } } -yy742: +yy1227: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy744; - if (yych <= '/') goto yy493; - goto yy745; + if (yych == '-') goto yy1229; + if (yych <= '/') goto yy978; + goto yy1230; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy493; - goto yy745; + if (yych <= '@') goto yy978; + goto yy1230; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy745; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1230; + goto yy978; } } -yy743: +yy1228: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy493; - if (yych >= '.') goto yy499; + if (yych <= ',') goto yy978; + if (yych >= '.') goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy745; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1230; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy745; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1230; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy745; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1230; + goto yy978; } } -yy744: +yy1229: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy625; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1110; + goto yy978; } else { - if (yych <= 'Z') goto yy625; - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy625; - goto yy493; + if (yych <= 'Z') goto yy1110; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1110; + goto yy978; } -yy745: +yy1230: ++p; if ((yych = *p) <= '=') { if (yych <= '.') { - if (yych <= '-') goto yy493; - goto yy499; + if (yych <= '-') goto yy978; + goto yy984; } else { - if (yych <= '/') goto yy493; - if (yych <= '9') goto yy625; - goto yy493; + if (yych <= '/') goto yy978; + if (yych <= '9') goto yy1110; + goto yy978; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy500; - if (yych <= '@') goto yy493; - goto yy625; + if (yych <= '>') goto yy985; + if (yych <= '@') goto yy978; + goto yy1110; } else { - if (yych <= '`') goto yy493; - if (yych <= 'z') goto yy625; - goto yy493; + if (yych <= '`') goto yy978; + if (yych <= 'z') goto yy1110; + goto yy978; } } } @@ -7973,2369 +10872,2369 @@ int _scan_html_tag(const unsigned char *p) 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - }; - yych = *p; - if (yych <= '/') { - if (yych <= ' ') { - if (yych != '\n') goto yy753; - } else { - if (yych <= '!') goto yy751; - if (yych <= '.') goto yy753; - goto yy750; - } - } else { - if (yych <= '@') { - if (yych == '?') goto yy752; - goto yy753; - } else { - if (yych <= 'Z') goto yy749; - if (yych <= '`') goto yy753; - if (yych <= 'z') goto yy749; - goto yy753; - } - } -yy748: - { return 0; } -yy749: - yych = *(marker = ++p); - if (yych <= '9') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy748; - if (yych <= '\r') goto yy790; - goto yy748; - } else { - if (yych <= ' ') goto yy790; - if (yych <= '.') goto yy748; - if (yych <= '/') goto yy792; - goto yy788; - } - } else { - if (yych <= '@') { - if (yych == '>') goto yy758; - goto yy748; - } else { - if (yych <= 'Z') goto yy788; - if (yych <= '`') goto yy748; - if (yych <= 'z') goto yy788; - goto yy748; - } - } -yy750: - yych = *(marker = ++p); - if (yych <= '@') goto yy748; - if (yych <= 'Z') goto yy784; - if (yych <= '`') goto yy748; - if (yych <= 'z') goto yy784; - goto yy748; -yy751: - yych = *(marker = ++p); - if (yybm[256+yych] & 64) { - goto yy761; - } - if (yych == '-') goto yy763; - if (yych == '[') goto yy760; - goto yy748; -yy752: - yych = *(marker = ++p); - if (yych <= 0x00) goto yy748; - goto yy755; -yy753: - yych = *++p; - goto yy748; -yy754: - ++p; - yych = *p; -yy755: - if (yybm[256+yych] & 32) { - goto yy754; - } - if (yych >= 0x01) goto yy757; -yy756: - p = marker; - goto yy748; -yy757: - ++p; - yych = *p; - if (yych <= 0x00) goto yy756; - if (yych != '>') goto yy754; -yy758: - ++p; - { return (p - start); } -yy760: - yych = *++p; - if (yych == 'C') goto yy775; - if (yych == 'c') goto yy775; - goto yy756; -yy761: - ++p; - yych = *p; - if (yybm[0+yych] & 1) { - goto yy771; - } - if (yych <= '@') goto yy756; - if (yych <= 'Z') goto yy761; - goto yy756; -yy763: - yych = *++p; - if (yych != '-') goto yy756; - yych = *++p; - if (yych == '-') goto yy765; - if (yych == '>') goto yy756; - goto yy767; -yy765: - yych = *++p; - if (yych == '-') goto yy770; - if (yych == '>') goto yy756; - goto yy767; -yy766: - ++p; - yych = *p; -yy767: - if (yybm[256+yych] & 128) { - goto yy766; - } - if (yych <= 0x00) goto yy756; - ++p; - yych = *p; - if (yybm[256+yych] & 128) { - goto yy766; - } - if (yych <= 0x00) goto yy756; - yych = *++p; - if (yych == '>') goto yy758; - goto yy756; -yy770: - yych = *++p; - if (yych == '>') goto yy758; - goto yy756; -yy771: - ++p; - yych = *p; - if (yybm[0+yych] & 1) { - goto yy771; - } - if (yych <= 0x00) goto yy756; - if (yych == '>') goto yy758; -yy773: - ++p; - yych = *p; - if (yybm[0+yych] & 2) { - goto yy773; - } - if (yych <= 0x00) goto yy756; - goto yy758; -yy775: - yych = *++p; - if (yych == 'D') goto yy776; - if (yych != 'd') goto yy756; -yy776: - yych = *++p; - if (yych == 'A') goto yy777; - if (yych != 'a') goto yy756; -yy777: - yych = *++p; - if (yych == 'T') goto yy778; - if (yych != 't') goto yy756; -yy778: - yych = *++p; - if (yych == 'A') goto yy779; - if (yych != 'a') goto yy756; -yy779: - yych = *++p; - if (yych != '[') goto yy756; -yy780: - ++p; - yych = *p; - if (yybm[0+yych] & 4) { - goto yy780; - } - if (yych <= 0x00) goto yy756; - ++p; - yych = *p; - if (yybm[0+yych] & 4) { - goto yy780; - } - if (yych <= 0x00) goto yy756; - ++p; - yych = *p; - if (yych <= 0x00) goto yy756; - if (yych == '>') goto yy758; - goto yy780; -yy784: - ++p; - yych = *p; - if (yybm[0+yych] & 8) { - goto yy784; - } - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy756; - if (yych >= 0x0E) goto yy756; - } else { - if (yych <= ' ') goto yy786; - if (yych == '>') goto yy758; - goto yy756; - } -yy786: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy756; - if (yych <= '\r') goto yy786; - goto yy756; - } else { - if (yych <= ' ') goto yy786; - if (yych == '>') goto yy758; - goto yy756; - } -yy788: - ++p; + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + }; yych = *p; - if (yych <= '9') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy756; - if (yych >= 0x0E) goto yy756; + if (yych <= '/') { + if (yych <= ' ') { + if (yych != '\n') goto yy1238; } else { - if (yych <= ' ') goto yy790; - if (yych <= '.') goto yy756; - if (yych <= '/') goto yy792; - goto yy788; + if (yych <= '!') goto yy1236; + if (yych <= '.') goto yy1238; + goto yy1235; } } else { if (yych <= '@') { - if (yych == '>') goto yy758; - goto yy756; + if (yych == '?') goto yy1237; + goto yy1238; } else { - if (yych <= 'Z') goto yy788; - if (yych <= '`') goto yy756; - if (yych <= 'z') goto yy788; - goto yy756; + if (yych <= 'Z') goto yy1234; + if (yych <= '`') goto yy1238; + if (yych <= 'z') goto yy1234; + goto yy1238; } } -yy790: - ++p; - yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy756; - if (yych <= '\r') goto yy790; - if (yych <= 0x1F) goto yy756; - goto yy790; +yy1233: + { return 0; } +yy1234: + yych = *(marker = ++p); + if (yych <= '9') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1233; + if (yych <= '\r') goto yy1275; + goto yy1233; } else { - if (yych == '/') goto yy792; - if (yych <= '9') goto yy756; - goto yy793; + if (yych <= ' ') goto yy1275; + if (yych <= '.') goto yy1233; + if (yych <= '/') goto yy1277; + goto yy1273; } } else { - if (yych <= 'Z') { - if (yych == '>') goto yy758; - if (yych <= '@') goto yy756; - goto yy793; + if (yych <= '@') { + if (yych == '>') goto yy1243; + goto yy1233; } else { - if (yych <= '_') { - if (yych <= '^') goto yy756; - goto yy793; - } else { - if (yych <= '`') goto yy756; - if (yych <= 'z') goto yy793; - goto yy756; - } + if (yych <= 'Z') goto yy1273; + if (yych <= '`') goto yy1233; + if (yych <= 'z') goto yy1273; + goto yy1233; } } -yy792: +yy1235: + yych = *(marker = ++p); + if (yych <= '@') goto yy1233; + if (yych <= 'Z') goto yy1269; + if (yych <= '`') goto yy1233; + if (yych <= 'z') goto yy1269; + goto yy1233; +yy1236: + yych = *(marker = ++p); + if (yybm[256+yych] & 64) { + goto yy1246; + } + if (yych == '-') goto yy1248; + if (yych == '[') goto yy1245; + goto yy1233; +yy1237: + yych = *(marker = ++p); + if (yych <= 0x00) goto yy1233; + goto yy1240; +yy1238: yych = *++p; - if (yych == '>') goto yy758; - goto yy756; -yy793: + goto yy1233; +yy1239: ++p; yych = *p; - if (yybm[0+yych] & 16) { - goto yy793; - } - if (yych <= '.') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy756; - } else { - if (yych != ' ') goto yy756; - } - } else { - if (yych <= '<') { - if (yych <= '/') goto yy792; - goto yy756; - } else { - if (yych <= '=') goto yy797; - if (yych <= '>') goto yy758; - goto yy756; - } +yy1240: + if (yybm[256+yych] & 32) { + goto yy1239; } -yy795: + if (yych >= 0x01) goto yy1242; +yy1241: + p = marker; + goto yy1233; +yy1242: ++p; yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy756; - if (yych <= '\r') goto yy795; - if (yych <= 0x1F) goto yy756; - goto yy795; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy756; - goto yy792; - } else { - if (yych == ':') goto yy793; - goto yy756; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') goto yy797; - if (yych <= '>') goto yy758; - if (yych <= '@') goto yy756; - goto yy793; - } else { - if (yych <= '_') { - if (yych <= '^') goto yy756; - goto yy793; - } else { - if (yych <= '`') goto yy756; - if (yych <= 'z') goto yy793; - goto yy756; - } - } - } -yy797: + if (yych <= 0x00) goto yy1241; + if (yych != '>') goto yy1239; +yy1243: ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy799; - } - if (yych <= 0x00) goto yy756; - if (yych <= '!') goto yy798; - if (yych <= '"') goto yy803; - if (yych <= ';') goto yy801; - goto yy756; -yy798: + { return (p - start); } +yy1245: + yych = *++p; + if (yych == 'C') goto yy1260; + if (yych == 'c') goto yy1260; + goto yy1241; +yy1246: ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy799; - } - if (yych <= '"') { - if (yych <= 0x00) goto yy756; - if (yych <= '!') goto yy812; - goto yy803; - } else { - if (yych <= ';') goto yy801; - if (yych == '>') goto yy758; - goto yy756; + if (yybm[0+yych] & 1) { + goto yy1256; } -yy799: + if (yych <= '@') goto yy1241; + if (yych <= 'Z') goto yy1246; + goto yy1241; +yy1248: + yych = *++p; + if (yych != '-') goto yy1241; + yych = *++p; + if (yych == '-') goto yy1250; + if (yych == '>') goto yy1241; + goto yy1252; +yy1250: + yych = *++p; + if (yych == '-') goto yy1255; + if (yych == '>') goto yy1241; + goto yy1252; +yy1251: ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy799; +yy1252: + if (yybm[256+yych] & 128) { + goto yy1251; } - if (yych <= 0x00) goto yy756; - if (yych <= '!') goto yy806; - if (yych == '>') goto yy758; - goto yy756; -yy801: + if (yych <= 0x00) goto yy1241; ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy801; + if (yybm[256+yych] & 128) { + goto yy1251; } - if (yych <= 0x00) goto yy756; - goto yy805; -yy803: + if (yych <= 0x00) goto yy1241; + yych = *++p; + if (yych == '>') goto yy1243; + goto yy1241; +yy1255: + yych = *++p; + if (yych == '>') goto yy1243; + goto yy1241; +yy1256: ++p; yych = *p; - if (yybm[0+yych] & 128) { - goto yy803; + if (yybm[0+yych] & 1) { + goto yy1256; } - if (yych <= 0x00) goto yy756; -yy805: + if (yych <= 0x00) goto yy1241; + if (yych == '>') goto yy1243; +yy1258: ++p; yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy756; - if (yych <= '\r') goto yy790; - if (yych <= 0x1F) goto yy756; - goto yy790; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy756; - goto yy792; - } else { - if (yych == '>') goto yy758; - goto yy756; - } + if (yybm[0+yych] & 2) { + goto yy1258; } -yy806: + if (yych <= 0x00) goto yy1241; + goto yy1243; +yy1260: + yych = *++p; + if (yych == 'D') goto yy1261; + if (yych != 'd') goto yy1241; +yy1261: + yych = *++p; + if (yych == 'A') goto yy1262; + if (yych != 'a') goto yy1241; +yy1262: + yych = *++p; + if (yych == 'T') goto yy1263; + if (yych != 't') goto yy1241; +yy1263: + yych = *++p; + if (yych == 'A') goto yy1264; + if (yych != 'a') goto yy1241; +yy1264: + yych = *++p; + if (yych != '[') goto yy1241; +yy1265: ++p; yych = *p; - if (yych <= '9') { - if (yych <= ' ') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy756; - goto yy799; - } else { - if (yych <= '\r') goto yy806; - if (yych <= 0x1F) goto yy799; - goto yy806; - } - } else { - if (yych <= '"') { - if (yych <= '!') goto yy799; - goto yy756; - } else { - if (yych == '\'') goto yy756; - goto yy799; - } - } - } else { - if (yych <= '@') { - if (yych <= ';') { - if (yych >= ';') goto yy799; - } else { - if (yych <= '=') goto yy756; - if (yych <= '>') goto yy758; - goto yy799; - } - } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy808; - if (yych <= '^') goto yy799; - } else { - if (yych <= '`') goto yy756; - if (yych >= '{') goto yy799; - } - } + if (yybm[0+yych] & 4) { + goto yy1265; } -yy808: + if (yych <= 0x00) goto yy1241; ++p; yych = *p; - if (yych <= '/') { - if (yych <= '!') { - if (yych <= '\r') { - if (yych <= 0x00) goto yy756; - if (yych <= 0x08) goto yy799; - } else { - if (yych != ' ') goto yy799; - } - } else { - if (yych <= '\'') { - if (yych <= '"') goto yy756; - if (yych <= '&') goto yy799; - goto yy756; - } else { - if (yych <= ',') goto yy799; - if (yych <= '.') goto yy808; - goto yy799; - } - } - } else { - if (yych <= '@') { - if (yych <= '<') { - if (yych <= ':') goto yy808; - if (yych <= ';') goto yy799; - goto yy756; - } else { - if (yych <= '=') goto yy797; - if (yych <= '>') goto yy758; - goto yy799; - } - } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy808; - if (yych <= '^') goto yy799; - goto yy808; - } else { - if (yych <= '`') goto yy756; - if (yych <= 'z') goto yy808; - goto yy799; - } - } + if (yybm[0+yych] & 4) { + goto yy1265; } -yy810: + if (yych <= 0x00) goto yy1241; ++p; yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy756; - goto yy799; - } else { - if (yych <= '\r') goto yy810; - if (yych <= 0x1F) goto yy799; - goto yy810; - } - } else { - if (yych <= '&') { - if (yych == '"') goto yy756; - goto yy799; - } else { - if (yych <= '\'') goto yy756; - if (yych <= '9') goto yy799; - goto yy808; - } - } - } else { - if (yych <= '@') { - if (yych <= '<') { - if (yych <= ';') goto yy799; - goto yy756; - } else { - if (yych <= '=') goto yy797; - if (yych <= '>') goto yy758; - goto yy799; - } - } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy808; - if (yych <= '^') goto yy799; - goto yy808; - } else { - if (yych <= '`') goto yy756; - if (yych <= 'z') goto yy808; - goto yy799; - } - } - } -yy812: + if (yych <= 0x00) goto yy1241; + if (yych == '>') goto yy1243; + goto yy1265; +yy1269: ++p; yych = *p; - if (yych <= '9') { - if (yych <= ' ') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy756; - goto yy799; - } else { - if (yych <= '\r') goto yy812; - if (yych <= 0x1F) goto yy799; - goto yy812; - } - } else { - if (yych <= '"') { - if (yych <= '!') goto yy799; - goto yy803; - } else { - if (yych == '\'') goto yy801; - goto yy799; - } - } - } else { - if (yych <= '@') { - if (yych <= ';') { - if (yych <= ':') goto yy808; - goto yy799; - } else { - if (yych <= '=') goto yy756; - if (yych <= '>') goto yy758; - goto yy799; - } - } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy808; - if (yych <= '^') goto yy799; - goto yy808; - } else { - if (yych <= '`') goto yy756; - if (yych <= 'z') goto yy808; - goto yy799; - } - } - } -} - -} - -// Try to match an HTML block tag including first <, -// returning num of chars matched. -int _scan_html_block_tag(const unsigned char *p) -{ - const unsigned char *marker = NULL; - const unsigned char *start = p; - -{ - unsigned char yych; - yych = *p; - if (yych == '\n') goto yy816; - if (yych == '<') goto yy817; - goto yy818; -yy816: - { return 0; } -yy817: - yych = *(marker = ++p); - switch (yych) { - case '!': - case '?': goto yy819; - case '/': goto yy838; - case 'A': - case 'a': goto yy823; - case 'B': - case 'b': goto yy826; - case 'C': - case 'c': goto yy830; - case 'D': - case 'd': goto yy831; - case 'E': - case 'e': goto yy834; - case 'F': - case 'f': goto yy835; - case 'H': - case 'h': goto yy824; - case 'I': - case 'i': goto yy825; - case 'L': - case 'l': goto yy827; - case 'M': - case 'm': goto yy828; - case 'O': - case 'o': goto yy829; - case 'P': - case 'p': goto yy821; - case 'S': - case 's': goto yy832; - case 'T': - case 't': goto yy833; - case 'U': - case 'u': goto yy836; - case 'V': - case 'v': goto yy837; - default: goto yy816; - } -yy818: - yych = *++p; - goto yy816; -yy819: - ++p; - { return (p - start); } -yy821: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy822; - if (yych <= '\r') goto yy982; - } else { - if (yych <= ' ') goto yy982; - if (yych >= '/') goto yy982; - } + if (yybm[0+yych] & 8) { + goto yy1269; + } + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1241; + if (yych >= 0x0E) goto yy1241; } else { - if (yych <= 'Q') { - if (yych == '>') goto yy982; - } else { - if (yych <= 'R') goto yy1095; - if (yych == 'r') goto yy1095; - } + if (yych <= ' ') goto yy1271; + if (yych == '>') goto yy1243; + goto yy1241; } -yy822: - p = marker; - goto yy816; -yy823: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'Q') goto yy822; - if (yych <= 'R') goto yy1088; - goto yy1087; +yy1271: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1241; + if (yych <= '\r') goto yy1271; + goto yy1241; } else { - if (yych <= 'q') goto yy822; - if (yych <= 'r') goto yy1088; - if (yych <= 's') goto yy1087; - goto yy822; + if (yych <= ' ') goto yy1271; + if (yych == '>') goto yy1243; + goto yy1241; } -yy824: - yych = *++p; - if (yych <= 'Q') { - if (yych <= 'D') { - if (yych <= '0') goto yy822; - if (yych <= '6') goto yy981; - goto yy822; +yy1273: + ++p; + yych = *p; + if (yych <= '9') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1241; + if (yych >= 0x0E) goto yy1241; } else { - if (yych <= 'E') goto yy1080; - if (yych == 'G') goto yy1079; - goto yy822; + if (yych <= ' ') goto yy1275; + if (yych <= '.') goto yy1241; + if (yych <= '/') goto yy1277; + goto yy1273; } } else { - if (yych <= 'f') { - if (yych <= 'R') goto yy981; - if (yych == 'e') goto yy1080; - goto yy822; + if (yych <= '@') { + if (yych == '>') goto yy1243; + goto yy1241; } else { - if (yych <= 'g') goto yy1079; - if (yych == 'r') goto yy981; - goto yy822; + if (yych <= 'Z') goto yy1273; + if (yych <= '`') goto yy1241; + if (yych <= 'z') goto yy1273; + goto yy1241; } } -yy825: - yych = *++p; - if (yych == 'F') goto yy1075; - if (yych == 'f') goto yy1075; - goto yy822; -yy826: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'L') goto yy1063; - goto yy822; +yy1275: + ++p; + yych = *p; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= 0x08) goto yy1241; + if (yych <= '\r') goto yy1275; + if (yych <= 0x1F) goto yy1241; + goto yy1275; } else { - if (yych <= 'O') goto yy1062; - if (yych <= 'T') goto yy822; - goto yy1061; + if (yych == '/') goto yy1277; + if (yych <= '9') goto yy1241; + goto yy1278; } } else { - if (yych <= 'n') { - if (yych == 'l') goto yy1063; - goto yy822; + if (yych <= 'Z') { + if (yych == '>') goto yy1243; + if (yych <= '@') goto yy1241; + goto yy1278; } else { - if (yych <= 'o') goto yy1062; - if (yych == 'u') goto yy1061; - goto yy822; + if (yych <= '_') { + if (yych <= '^') goto yy1241; + goto yy1278; + } else { + if (yych <= '`') goto yy1241; + if (yych <= 'z') goto yy1278; + goto yy1241; + } } } -yy827: - yych = *++p; - if (yych == 'I') goto yy981; - if (yych == 'i') goto yy981; - goto yy822; -yy828: - yych = *++p; - if (yych == 'A') goto yy1060; - if (yych == 'a') goto yy1060; - goto yy822; -yy829: +yy1277: yych = *++p; - if (yych <= 'U') { - if (yych <= 'K') { - if (yych == 'B') goto yy1053; - goto yy822; - } else { - if (yych <= 'L') goto yy981; - if (yych <= 'T') goto yy822; - goto yy1052; - } - } else { - if (yych <= 'k') { - if (yych == 'b') goto yy1053; - goto yy822; + if (yych == '>') goto yy1243; + goto yy1241; +yy1278: + ++p; + yych = *p; + if (yybm[0+yych] & 16) { + goto yy1278; + } + if (yych <= '.') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1241; } else { - if (yych <= 'l') goto yy981; - if (yych == 'u') goto yy1052; - goto yy822; + if (yych != ' ') goto yy1241; } - } -yy830: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy1039; - if (yych <= 'N') goto yy822; - goto yy1038; } else { - if (yych <= 'a') { - if (yych <= '`') goto yy822; - goto yy1039; + if (yych <= '<') { + if (yych <= '/') goto yy1277; + goto yy1241; } else { - if (yych == 'o') goto yy1038; - goto yy822; + if (yych <= '=') goto yy1282; + if (yych <= '>') goto yy1243; + goto yy1241; } } -yy831: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'I') { - if (yych == 'D') goto yy981; - if (yych <= 'H') goto yy822; - goto yy1037; +yy1280: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) goto yy1241; + if (yych <= '\r') goto yy1280; + if (yych <= 0x1F) goto yy1241; + goto yy1280; } else { - if (yych == 'L') goto yy981; - if (yych <= 'S') goto yy822; - goto yy981; + if (yych <= '/') { + if (yych <= '.') goto yy1241; + goto yy1277; + } else { + if (yych == ':') goto yy1278; + goto yy1241; + } } } else { - if (yych <= 'i') { - if (yych == 'd') goto yy981; - if (yych <= 'h') goto yy822; - goto yy1037; + if (yych <= 'Z') { + if (yych <= '=') goto yy1282; + if (yych <= '>') goto yy1243; + if (yych <= '@') goto yy1241; + goto yy1278; } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy822; - goto yy981; + if (yych <= '_') { + if (yych <= '^') goto yy1241; + goto yy1278; } else { - if (yych == 't') goto yy981; - goto yy822; + if (yych <= '`') goto yy1241; + if (yych <= 'z') goto yy1278; + goto yy1241; } } } -yy832: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'D') { - if (yych == 'C') goto yy1026; - goto yy822; - } else { - if (yych <= 'E') goto yy1027; - if (yych <= 'S') goto yy822; - goto yy1025; - } - } else { - if (yych <= 'd') { - if (yych == 'c') goto yy1026; - goto yy822; - } else { - if (yych <= 'e') goto yy1027; - if (yych == 't') goto yy1025; - goto yy822; - } +yy1282: + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1284; } -yy833: - yych = *++p; - switch (yych) { - case 'A': - case 'a': goto yy1011; - case 'B': - case 'b': goto yy1010; - case 'D': - case 'R': - case 'd': - case 'r': goto yy981; - case 'E': - case 'e': goto yy1009; - case 'F': - case 'f': goto yy1008; - case 'H': - case 'h': goto yy1007; - default: goto yy822; + if (yych <= 0x00) goto yy1241; + if (yych <= '!') goto yy1283; + if (yych <= '"') goto yy1288; + if (yych <= ';') goto yy1286; + goto yy1241; +yy1283: + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1284; } -yy834: - yych = *++p; - if (yych == 'M') goto yy1004; - if (yych == 'm') goto yy1004; - goto yy822; -yy835: - yych = *++p; - if (yych <= 'O') { - if (yych == 'I') goto yy985; - if (yych <= 'N') goto yy822; - goto yy984; + if (yych <= '"') { + if (yych <= 0x00) goto yy1241; + if (yych <= '!') goto yy1297; + goto yy1288; } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy822; - goto yy985; - } else { - if (yych == 'o') goto yy984; - goto yy822; - } + if (yych <= ';') goto yy1286; + if (yych == '>') goto yy1243; + goto yy1241; } -yy836: - yych = *++p; - if (yych == 'L') goto yy981; - if (yych == 'l') goto yy981; - goto yy822; -yy837: - yych = *++p; - if (yych == 'I') goto yy978; - if (yych == 'i') goto yy978; - goto yy822; -yy838: - yych = *++p; - switch (yych) { - case 'A': - case 'a': goto yy840; - case 'B': - case 'b': goto yy843; - case 'C': - case 'c': goto yy847; - case 'D': - case 'd': goto yy848; - case 'E': - case 'e': goto yy851; - case 'F': - case 'f': goto yy852; - case 'H': - case 'h': goto yy841; - case 'I': - case 'i': goto yy842; - case 'L': - case 'l': goto yy844; - case 'M': - case 'm': goto yy845; - case 'O': - case 'o': goto yy846; - case 'P': - case 'p': goto yy839; - case 'S': - case 's': goto yy849; - case 'T': - case 't': goto yy850; - case 'U': - case 'u': goto yy853; - case 'V': - case 'v': goto yy854; - default: goto yy822; +yy1284: + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1284; } -yy839: - yych = *++p; - if (yych <= '=') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy822; - goto yy859; - } else { - if (yych == ' ') goto yy859; - goto yy822; - } - } else { - if (yych <= 'R') { - if (yych <= '>') goto yy859; - if (yych <= 'Q') goto yy822; - goto yy972; - } else { - if (yych == 'r') goto yy972; - goto yy822; - } + if (yych <= 0x00) goto yy1241; + if (yych <= '!') goto yy1291; + if (yych == '>') goto yy1243; + goto yy1241; +yy1286: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1286; } -yy840: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'Q') goto yy822; - if (yych <= 'R') goto yy965; - goto yy964; - } else { - if (yych <= 'q') goto yy822; - if (yych <= 'r') goto yy965; - if (yych <= 's') goto yy964; - goto yy822; + if (yych <= 0x00) goto yy1241; + goto yy1290; +yy1288: + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1288; } -yy841: - yych = *++p; - if (yych <= 'Q') { - if (yych <= 'D') { - if (yych <= '0') goto yy822; - if (yych <= '6') goto yy858; - goto yy822; - } else { - if (yych <= 'E') goto yy957; - if (yych == 'G') goto yy956; - goto yy822; - } + if (yych <= 0x00) goto yy1241; +yy1290: + ++p; + yych = *p; + if (yych <= ' ') { + if (yych <= 0x08) goto yy1241; + if (yych <= '\r') goto yy1275; + if (yych <= 0x1F) goto yy1241; + goto yy1275; } else { - if (yych <= 'f') { - if (yych <= 'R') goto yy858; - if (yych == 'e') goto yy957; - goto yy822; + if (yych <= '/') { + if (yych <= '.') goto yy1241; + goto yy1277; } else { - if (yych <= 'g') goto yy956; - if (yych == 'r') goto yy858; - goto yy822; + if (yych == '>') goto yy1243; + goto yy1241; } } -yy842: - yych = *++p; - if (yych == 'F') goto yy952; - if (yych == 'f') goto yy952; - goto yy822; -yy843: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'L') goto yy940; - goto yy822; +yy1291: + ++p; + yych = *p; + if (yych <= '9') { + if (yych <= ' ') { + if (yych <= 0x08) { + if (yych <= 0x00) goto yy1241; + goto yy1284; + } else { + if (yych <= '\r') goto yy1291; + if (yych <= 0x1F) goto yy1284; + goto yy1291; + } } else { - if (yych <= 'O') goto yy939; - if (yych <= 'T') goto yy822; - goto yy938; + if (yych <= '"') { + if (yych <= '!') goto yy1284; + goto yy1241; + } else { + if (yych == '\'') goto yy1241; + goto yy1284; + } } } else { - if (yych <= 'n') { - if (yych == 'l') goto yy940; - goto yy822; + if (yych <= '@') { + if (yych <= ';') { + if (yych >= ';') goto yy1284; + } else { + if (yych <= '=') goto yy1241; + if (yych <= '>') goto yy1243; + goto yy1284; + } } else { - if (yych <= 'o') goto yy939; - if (yych == 'u') goto yy938; - goto yy822; + if (yych <= '_') { + if (yych <= 'Z') goto yy1293; + if (yych <= '^') goto yy1284; + } else { + if (yych <= '`') goto yy1241; + if (yych >= '{') goto yy1284; + } } } -yy844: - yych = *++p; - if (yych == 'I') goto yy858; - if (yych == 'i') goto yy858; - goto yy822; -yy845: - yych = *++p; - if (yych == 'A') goto yy937; - if (yych == 'a') goto yy937; - goto yy822; -yy846: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'K') { - if (yych == 'B') goto yy930; - goto yy822; - } else { - if (yych <= 'L') goto yy858; - if (yych <= 'T') goto yy822; - goto yy929; - } - } else { - if (yych <= 'k') { - if (yych == 'b') goto yy930; - goto yy822; +yy1293: + ++p; + yych = *p; + if (yych <= '/') { + if (yych <= '!') { + if (yych <= '\r') { + if (yych <= 0x00) goto yy1241; + if (yych <= 0x08) goto yy1284; + } else { + if (yych != ' ') goto yy1284; + } } else { - if (yych <= 'l') goto yy858; - if (yych == 'u') goto yy929; - goto yy822; + if (yych <= '\'') { + if (yych <= '"') goto yy1241; + if (yych <= '&') goto yy1284; + goto yy1241; + } else { + if (yych <= ',') goto yy1284; + if (yych <= '.') goto yy1293; + goto yy1284; + } } - } -yy847: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy916; - if (yych <= 'N') goto yy822; - goto yy915; } else { - if (yych <= 'a') { - if (yych <= '`') goto yy822; - goto yy916; + if (yych <= '@') { + if (yych <= '<') { + if (yych <= ':') goto yy1293; + if (yych <= ';') goto yy1284; + goto yy1241; + } else { + if (yych <= '=') goto yy1282; + if (yych <= '>') goto yy1243; + goto yy1284; + } } else { - if (yych == 'o') goto yy915; - goto yy822; + if (yych <= '_') { + if (yych <= 'Z') goto yy1293; + if (yych <= '^') goto yy1284; + goto yy1293; + } else { + if (yych <= '`') goto yy1241; + if (yych <= 'z') goto yy1293; + goto yy1284; + } } } -yy848: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'I') { - if (yych == 'D') goto yy858; - if (yych <= 'H') goto yy822; - goto yy914; +yy1295: + ++p; + yych = *p; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= 0x08) { + if (yych <= 0x00) goto yy1241; + goto yy1284; + } else { + if (yych <= '\r') goto yy1295; + if (yych <= 0x1F) goto yy1284; + goto yy1295; + } } else { - if (yych == 'L') goto yy858; - if (yych <= 'S') goto yy822; - goto yy858; + if (yych <= '&') { + if (yych == '"') goto yy1241; + goto yy1284; + } else { + if (yych <= '\'') goto yy1241; + if (yych <= '9') goto yy1284; + goto yy1293; + } } } else { - if (yych <= 'i') { - if (yych == 'd') goto yy858; - if (yych <= 'h') goto yy822; - goto yy914; + if (yych <= '@') { + if (yych <= '<') { + if (yych <= ';') goto yy1284; + goto yy1241; + } else { + if (yych <= '=') goto yy1282; + if (yych <= '>') goto yy1243; + goto yy1284; + } } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy822; - goto yy858; + if (yych <= '_') { + if (yych <= 'Z') goto yy1293; + if (yych <= '^') goto yy1284; + goto yy1293; } else { - if (yych == 't') goto yy858; - goto yy822; + if (yych <= '`') goto yy1241; + if (yych <= 'z') goto yy1293; + goto yy1284; } } } -yy849: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'D') { - if (yych == 'C') goto yy903; - goto yy822; +yy1297: + ++p; + yych = *p; + if (yych <= '9') { + if (yych <= ' ') { + if (yych <= 0x08) { + if (yych <= 0x00) goto yy1241; + goto yy1284; + } else { + if (yych <= '\r') goto yy1297; + if (yych <= 0x1F) goto yy1284; + goto yy1297; + } } else { - if (yych <= 'E') goto yy904; - if (yych <= 'S') goto yy822; - goto yy902; + if (yych <= '"') { + if (yych <= '!') goto yy1284; + goto yy1288; + } else { + if (yych == '\'') goto yy1286; + goto yy1284; + } } } else { - if (yych <= 'd') { - if (yych == 'c') goto yy903; - goto yy822; + if (yych <= '@') { + if (yych <= ';') { + if (yych <= ':') goto yy1293; + goto yy1284; + } else { + if (yych <= '=') goto yy1241; + if (yych <= '>') goto yy1243; + goto yy1284; + } } else { - if (yych <= 'e') goto yy904; - if (yych == 't') goto yy902; - goto yy822; + if (yych <= '_') { + if (yych <= 'Z') goto yy1293; + if (yych <= '^') goto yy1284; + goto yy1293; + } else { + if (yych <= '`') goto yy1241; + if (yych <= 'z') goto yy1293; + goto yy1284; + } } } -yy850: - yych = *++p; +} + +} + +// Try to match an HTML block tag including first <, +// returning num of chars matched. +int _scan_html_block_tag(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + yych = *p; + if (yych == '\n') goto yy1301; + if (yych == '<') goto yy1302; + goto yy1303; +yy1301: + { return 0; } +yy1302: + yych = *(marker = ++p); switch (yych) { + case '!': + case '?': goto yy1304; + case '/': goto yy1323; case 'A': - case 'a': goto yy888; + case 'a': goto yy1308; case 'B': - case 'b': goto yy887; + case 'b': goto yy1311; + case 'C': + case 'c': goto yy1315; case 'D': - case 'R': - case 'd': - case 'r': goto yy858; + case 'd': goto yy1316; case 'E': - case 'e': goto yy886; + case 'e': goto yy1319; case 'F': - case 'f': goto yy885; + case 'f': goto yy1320; case 'H': - case 'h': goto yy884; - default: goto yy822; - } -yy851: - yych = *++p; - if (yych == 'M') goto yy881; - if (yych == 'm') goto yy881; - goto yy822; -yy852: - yych = *++p; - if (yych <= 'O') { - if (yych == 'I') goto yy862; - if (yych <= 'N') goto yy822; - goto yy861; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy822; - goto yy862; - } else { - if (yych == 'o') goto yy861; - goto yy822; - } - } -yy853: - yych = *++p; - if (yych == 'L') goto yy858; - if (yych == 'l') goto yy858; - goto yy822; -yy854: - yych = *++p; - if (yych == 'I') goto yy855; - if (yych != 'i') goto yy822; -yy855: - yych = *++p; - if (yych == 'D') goto yy856; - if (yych != 'd') goto yy822; -yy856: - yych = *++p; - if (yych == 'E') goto yy857; - if (yych != 'e') goto yy822; -yy857: - yych = *++p; - if (yych == 'O') goto yy858; - if (yych != 'o') goto yy822; -yy858: - yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy822; - if (yych >= 0x0E) goto yy822; - } else { - if (yych <= ' ') goto yy859; - if (yych != '>') goto yy822; - } -yy859: - ++p; - { return (p - start); } -yy861: - yych = *++p; - if (yych <= 'R') { - if (yych == 'O') goto yy877; - if (yych <= 'Q') goto yy822; - goto yy878; - } else { - if (yych <= 'o') { - if (yych <= 'n') goto yy822; - goto yy877; - } else { - if (yych == 'r') goto yy878; - goto yy822; - } - } -yy862: - yych = *++p; - if (yych <= 'G') { - if (yych == 'E') goto yy863; - if (yych <= 'F') goto yy822; - goto yy864; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy822; - } else { - if (yych == 'g') goto yy864; - goto yy822; - } - } -yy863: - yych = *++p; - if (yych == 'L') goto yy873; - if (yych == 'l') goto yy873; - goto yy822; -yy864: - yych = *++p; - if (yych <= 'U') { - if (yych == 'C') goto yy866; - if (yych <= 'T') goto yy822; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy822; - goto yy866; - } else { - if (yych != 'u') goto yy822; - } - } - yych = *++p; - if (yych == 'R') goto yy872; - if (yych == 'r') goto yy872; - goto yy822; -yy866: - yych = *++p; - if (yych == 'A') goto yy867; - if (yych != 'a') goto yy822; -yy867: - yych = *++p; - if (yych == 'P') goto yy868; - if (yych != 'p') goto yy822; -yy868: - yych = *++p; - if (yych == 'T') goto yy869; - if (yych != 't') goto yy822; -yy869: - yych = *++p; - if (yych == 'I') goto yy870; - if (yych != 'i') goto yy822; -yy870: - yych = *++p; - if (yych == 'O') goto yy871; - if (yych != 'o') goto yy822; -yy871: - yych = *++p; - if (yych == 'N') goto yy858; - if (yych == 'n') goto yy858; - goto yy822; -yy872: - yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy873: - yych = *++p; - if (yych == 'D') goto yy874; - if (yych != 'd') goto yy822; -yy874: - yych = *++p; - if (yych == 'S') goto yy875; - if (yych != 's') goto yy822; -yy875: - yych = *++p; - if (yych == 'E') goto yy876; - if (yych != 'e') goto yy822; -yy876: - yych = *++p; - if (yych == 'T') goto yy858; - if (yych == 't') goto yy858; - goto yy822; -yy877: - yych = *++p; - if (yych == 'T') goto yy879; - if (yych == 't') goto yy879; - goto yy822; -yy878: - yych = *++p; - if (yych == 'M') goto yy858; - if (yych == 'm') goto yy858; - goto yy822; -yy879: - yych = *++p; - if (yych == 'E') goto yy880; - if (yych != 'e') goto yy822; -yy880: - yych = *++p; - if (yych == 'R') goto yy858; - if (yych == 'r') goto yy858; - goto yy822; -yy881: - yych = *++p; - if (yych == 'B') goto yy882; - if (yych != 'b') goto yy822; -yy882: - yych = *++p; - if (yych == 'E') goto yy883; - if (yych != 'e') goto yy822; -yy883: - yych = *++p; - if (yych == 'D') goto yy858; - if (yych == 'd') goto yy858; - goto yy822; -yy884: - yych = *++p; - if (yych <= '=') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy822; - goto yy859; - } else { - if (yych == ' ') goto yy859; - goto yy822; - } - } else { - if (yych <= 'E') { - if (yych <= '>') goto yy859; - if (yych <= 'D') goto yy822; - goto yy900; - } else { - if (yych == 'e') goto yy900; - goto yy822; - } - } -yy885: - yych = *++p; - if (yych == 'O') goto yy898; - if (yych == 'o') goto yy898; - goto yy822; -yy886: - yych = *++p; - if (yych == 'X') goto yy893; - if (yych == 'x') goto yy893; - goto yy822; -yy887: - yych = *++p; - if (yych == 'O') goto yy891; - if (yych == 'o') goto yy891; - goto yy822; -yy888: - yych = *++p; - if (yych == 'B') goto yy889; - if (yych != 'b') goto yy822; -yy889: - yych = *++p; - if (yych == 'L') goto yy890; - if (yych != 'l') goto yy822; -yy890: - yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy891: - yych = *++p; - if (yych == 'D') goto yy892; - if (yych != 'd') goto yy822; -yy892: - yych = *++p; - if (yych == 'Y') goto yy858; - if (yych == 'y') goto yy858; - goto yy822; -yy893: - yych = *++p; - if (yych == 'T') goto yy894; - if (yych != 't') goto yy822; -yy894: - yych = *++p; - if (yych == 'A') goto yy895; - if (yych != 'a') goto yy822; -yy895: - yych = *++p; - if (yych == 'R') goto yy896; - if (yych != 'r') goto yy822; -yy896: - yych = *++p; - if (yych == 'E') goto yy897; - if (yych != 'e') goto yy822; -yy897: - yych = *++p; - if (yych == 'A') goto yy858; - if (yych == 'a') goto yy858; - goto yy822; -yy898: - yych = *++p; - if (yych == 'O') goto yy899; - if (yych != 'o') goto yy822; -yy899: - yych = *++p; - if (yych == 'T') goto yy858; - if (yych == 't') goto yy858; - goto yy822; -yy900: - yych = *++p; - if (yych == 'A') goto yy901; - if (yych != 'a') goto yy822; -yy901: - yych = *++p; - if (yych == 'D') goto yy858; - if (yych == 'd') goto yy858; - goto yy822; -yy902: - yych = *++p; - if (yych == 'Y') goto yy912; - if (yych == 'y') goto yy912; - goto yy822; -yy903: - yych = *++p; - if (yych == 'R') goto yy909; - if (yych == 'r') goto yy909; - goto yy822; -yy904: - yych = *++p; - if (yych == 'C') goto yy905; - if (yych != 'c') goto yy822; -yy905: - yych = *++p; - if (yych == 'T') goto yy906; - if (yych != 't') goto yy822; -yy906: - yych = *++p; - if (yych == 'I') goto yy907; - if (yych != 'i') goto yy822; -yy907: - yych = *++p; - if (yych == 'O') goto yy908; - if (yych != 'o') goto yy822; -yy908: - yych = *++p; - if (yych == 'N') goto yy858; - if (yych == 'n') goto yy858; - goto yy822; -yy909: - yych = *++p; - if (yych == 'I') goto yy910; - if (yych != 'i') goto yy822; -yy910: - yych = *++p; - if (yych == 'P') goto yy911; - if (yych != 'p') goto yy822; -yy911: + case 'h': goto yy1309; + case 'I': + case 'i': goto yy1310; + case 'L': + case 'l': goto yy1312; + case 'M': + case 'm': goto yy1313; + case 'O': + case 'o': goto yy1314; + case 'P': + case 'p': goto yy1306; + case 'S': + case 's': goto yy1317; + case 'T': + case 't': goto yy1318; + case 'U': + case 'u': goto yy1321; + case 'V': + case 'v': goto yy1322; + default: goto yy1301; + } +yy1303: yych = *++p; - if (yych == 'T') goto yy858; - if (yych == 't') goto yy858; - goto yy822; -yy912: + goto yy1301; +yy1304: + ++p; + { return (p - start); } +yy1306: yych = *++p; - if (yych == 'L') goto yy913; - if (yych != 'l') goto yy822; -yy913: + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1307; + if (yych <= '\r') goto yy1467; + } else { + if (yych <= ' ') goto yy1467; + if (yych >= '/') goto yy1467; + } + } else { + if (yych <= 'Q') { + if (yych == '>') goto yy1467; + } else { + if (yych <= 'R') goto yy1580; + if (yych == 'r') goto yy1580; + } + } +yy1307: + p = marker; + goto yy1301; +yy1308: yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy914: + if (yych <= 'S') { + if (yych <= 'Q') goto yy1307; + if (yych <= 'R') goto yy1573; + goto yy1572; + } else { + if (yych <= 'q') goto yy1307; + if (yych <= 'r') goto yy1573; + if (yych <= 's') goto yy1572; + goto yy1307; + } +yy1309: yych = *++p; - if (yych == 'V') goto yy858; - if (yych == 'v') goto yy858; - goto yy822; -yy915: + if (yych <= 'Q') { + if (yych <= 'D') { + if (yych <= '0') goto yy1307; + if (yych <= '6') goto yy1466; + goto yy1307; + } else { + if (yych <= 'E') goto yy1565; + if (yych == 'G') goto yy1564; + goto yy1307; + } + } else { + if (yych <= 'f') { + if (yych <= 'R') goto yy1466; + if (yych == 'e') goto yy1565; + goto yy1307; + } else { + if (yych <= 'g') goto yy1564; + if (yych == 'r') goto yy1466; + goto yy1307; + } + } +yy1310: yych = *++p; - if (yych == 'L') goto yy924; - if (yych == 'l') goto yy924; - goto yy822; -yy916: + if (yych == 'F') goto yy1560; + if (yych == 'f') goto yy1560; + goto yy1307; +yy1311: yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy917; - if (yych <= 'O') goto yy822; - goto yy918; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'L') goto yy1548; + goto yy1307; + } else { + if (yych <= 'O') goto yy1547; + if (yych <= 'T') goto yy1307; + goto yy1546; + } } else { if (yych <= 'n') { - if (yych <= 'm') goto yy822; + if (yych == 'l') goto yy1548; + goto yy1307; } else { - if (yych == 'p') goto yy918; - goto yy822; + if (yych <= 'o') goto yy1547; + if (yych == 'u') goto yy1546; + goto yy1307; } } -yy917: - yych = *++p; - if (yych == 'V') goto yy922; - if (yych == 'v') goto yy922; - goto yy822; -yy918: - yych = *++p; - if (yych == 'T') goto yy919; - if (yych != 't') goto yy822; -yy919: - yych = *++p; - if (yych == 'I') goto yy920; - if (yych != 'i') goto yy822; -yy920: - yych = *++p; - if (yych == 'O') goto yy921; - if (yych != 'o') goto yy822; -yy921: - yych = *++p; - if (yych == 'N') goto yy858; - if (yych == 'n') goto yy858; - goto yy822; -yy922: +yy1312: yych = *++p; - if (yych == 'A') goto yy923; - if (yych != 'a') goto yy822; -yy923: + if (yych == 'I') goto yy1466; + if (yych == 'i') goto yy1466; + goto yy1307; +yy1313: yych = *++p; - if (yych == 'S') goto yy858; - if (yych == 's') goto yy858; - goto yy822; -yy924: + if (yych == 'A') goto yy1545; + if (yych == 'a') goto yy1545; + goto yy1307; +yy1314: yych = *++p; - if (yych <= '=') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy822; - goto yy859; + if (yych <= 'U') { + if (yych <= 'K') { + if (yych == 'B') goto yy1538; + goto yy1307; } else { - if (yych == ' ') goto yy859; - goto yy822; + if (yych <= 'L') goto yy1466; + if (yych <= 'T') goto yy1307; + goto yy1537; } } else { - if (yych <= 'G') { - if (yych <= '>') goto yy859; - if (yych <= 'F') goto yy822; + if (yych <= 'k') { + if (yych == 'b') goto yy1538; + goto yy1307; } else { - if (yych != 'g') goto yy822; + if (yych <= 'l') goto yy1466; + if (yych == 'u') goto yy1537; + goto yy1307; } } +yy1315: yych = *++p; - if (yych == 'R') goto yy926; - if (yych != 'r') goto yy822; -yy926: - yych = *++p; - if (yych == 'O') goto yy927; - if (yych != 'o') goto yy822; -yy927: - yych = *++p; - if (yych == 'U') goto yy928; - if (yych != 'u') goto yy822; -yy928: - yych = *++p; - if (yych == 'P') goto yy858; - if (yych == 'p') goto yy858; - goto yy822; -yy929: - yych = *++p; - if (yych == 'T') goto yy934; - if (yych == 't') goto yy934; - goto yy822; -yy930: - yych = *++p; - if (yych == 'J') goto yy931; - if (yych != 'j') goto yy822; -yy931: - yych = *++p; - if (yych == 'E') goto yy932; - if (yych != 'e') goto yy822; -yy932: - yych = *++p; - if (yych == 'C') goto yy933; - if (yych != 'c') goto yy822; -yy933: - yych = *++p; - if (yych == 'T') goto yy858; - if (yych == 't') goto yy858; - goto yy822; -yy934: - yych = *++p; - if (yych == 'P') goto yy935; - if (yych != 'p') goto yy822; -yy935: - yych = *++p; - if (yych == 'U') goto yy936; - if (yych != 'u') goto yy822; -yy936: - yych = *++p; - if (yych == 'T') goto yy858; - if (yych == 't') goto yy858; - goto yy822; -yy937: - yych = *++p; - if (yych == 'P') goto yy858; - if (yych == 'p') goto yy858; - goto yy822; -yy938: - yych = *++p; - if (yych == 'T') goto yy949; - if (yych == 't') goto yy949; - goto yy822; -yy939: - yych = *++p; - if (yych == 'D') goto yy948; - if (yych == 'd') goto yy948; - goto yy822; -yy940: - yych = *++p; - if (yych == 'O') goto yy941; - if (yych != 'o') goto yy822; -yy941: - yych = *++p; - if (yych == 'C') goto yy942; - if (yych != 'c') goto yy822; -yy942: - yych = *++p; - if (yych == 'K') goto yy943; - if (yych != 'k') goto yy822; -yy943: - yych = *++p; - if (yych == 'Q') goto yy944; - if (yych != 'q') goto yy822; -yy944: - yych = *++p; - if (yych == 'U') goto yy945; - if (yych != 'u') goto yy822; -yy945: - yych = *++p; - if (yych == 'O') goto yy946; - if (yych != 'o') goto yy822; -yy946: - yych = *++p; - if (yych == 'T') goto yy947; - if (yych != 't') goto yy822; -yy947: - yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy948: - yych = *++p; - if (yych == 'Y') goto yy858; - if (yych == 'y') goto yy858; - goto yy822; -yy949: - yych = *++p; - if (yych == 'T') goto yy950; - if (yych != 't') goto yy822; -yy950: - yych = *++p; - if (yych == 'O') goto yy951; - if (yych != 'o') goto yy822; -yy951: - yych = *++p; - if (yych == 'N') goto yy858; - if (yych == 'n') goto yy858; - goto yy822; -yy952: - yych = *++p; - if (yych == 'R') goto yy953; - if (yych != 'r') goto yy822; -yy953: - yych = *++p; - if (yych == 'A') goto yy954; - if (yych != 'a') goto yy822; -yy954: - yych = *++p; - if (yych == 'M') goto yy955; - if (yych != 'm') goto yy822; -yy955: - yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy956: + if (yych <= 'O') { + if (yych == 'A') goto yy1524; + if (yych <= 'N') goto yy1307; + goto yy1523; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy1307; + goto yy1524; + } else { + if (yych == 'o') goto yy1523; + goto yy1307; + } + } +yy1316: yych = *++p; - if (yych == 'R') goto yy961; - if (yych == 'r') goto yy961; - goto yy822; -yy957: + if (yych <= 'T') { + if (yych <= 'I') { + if (yych == 'D') goto yy1466; + if (yych <= 'H') goto yy1307; + goto yy1522; + } else { + if (yych == 'L') goto yy1466; + if (yych <= 'S') goto yy1307; + goto yy1466; + } + } else { + if (yych <= 'i') { + if (yych == 'd') goto yy1466; + if (yych <= 'h') goto yy1307; + goto yy1522; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy1307; + goto yy1466; + } else { + if (yych == 't') goto yy1466; + goto yy1307; + } + } + } +yy1317: yych = *++p; - if (yych == 'A') goto yy958; - if (yych != 'a') goto yy822; -yy958: + if (yych <= 'T') { + if (yych <= 'D') { + if (yych == 'C') goto yy1511; + goto yy1307; + } else { + if (yych <= 'E') goto yy1512; + if (yych <= 'S') goto yy1307; + goto yy1510; + } + } else { + if (yych <= 'd') { + if (yych == 'c') goto yy1511; + goto yy1307; + } else { + if (yych <= 'e') goto yy1512; + if (yych == 't') goto yy1510; + goto yy1307; + } + } +yy1318: yych = *++p; - if (yych == 'D') goto yy959; - if (yych != 'd') goto yy822; -yy959: + switch (yych) { + case 'A': + case 'a': goto yy1496; + case 'B': + case 'b': goto yy1495; + case 'D': + case 'R': + case 'd': + case 'r': goto yy1466; + case 'E': + case 'e': goto yy1494; + case 'F': + case 'f': goto yy1493; + case 'H': + case 'h': goto yy1492; + default: goto yy1307; + } +yy1319: yych = *++p; - if (yych == 'E') goto yy960; - if (yych != 'e') goto yy822; -yy960: + if (yych == 'M') goto yy1489; + if (yych == 'm') goto yy1489; + goto yy1307; +yy1320: yych = *++p; - if (yych == 'R') goto yy858; - if (yych == 'r') goto yy858; - goto yy822; -yy961: + if (yych <= 'O') { + if (yych == 'I') goto yy1470; + if (yych <= 'N') goto yy1307; + goto yy1469; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy1307; + goto yy1470; + } else { + if (yych == 'o') goto yy1469; + goto yy1307; + } + } +yy1321: yych = *++p; - if (yych == 'O') goto yy962; - if (yych != 'o') goto yy822; -yy962: + if (yych == 'L') goto yy1466; + if (yych == 'l') goto yy1466; + goto yy1307; +yy1322: yych = *++p; - if (yych == 'U') goto yy963; - if (yych != 'u') goto yy822; -yy963: + if (yych == 'I') goto yy1463; + if (yych == 'i') goto yy1463; + goto yy1307; +yy1323: yych = *++p; - if (yych == 'P') goto yy858; - if (yych == 'p') goto yy858; - goto yy822; -yy964: + switch (yych) { + case 'A': + case 'a': goto yy1325; + case 'B': + case 'b': goto yy1328; + case 'C': + case 'c': goto yy1332; + case 'D': + case 'd': goto yy1333; + case 'E': + case 'e': goto yy1336; + case 'F': + case 'f': goto yy1337; + case 'H': + case 'h': goto yy1326; + case 'I': + case 'i': goto yy1327; + case 'L': + case 'l': goto yy1329; + case 'M': + case 'm': goto yy1330; + case 'O': + case 'o': goto yy1331; + case 'P': + case 'p': goto yy1324; + case 'S': + case 's': goto yy1334; + case 'T': + case 't': goto yy1335; + case 'U': + case 'u': goto yy1338; + case 'V': + case 'v': goto yy1339; + default: goto yy1307; + } +yy1324: yych = *++p; - if (yych == 'I') goto yy970; - if (yych == 'i') goto yy970; - goto yy822; -yy965: + if (yych <= '=') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1307; + goto yy1344; + } else { + if (yych == ' ') goto yy1344; + goto yy1307; + } + } else { + if (yych <= 'R') { + if (yych <= '>') goto yy1344; + if (yych <= 'Q') goto yy1307; + goto yy1457; + } else { + if (yych == 'r') goto yy1457; + goto yy1307; + } + } +yy1325: yych = *++p; - if (yych == 'T') goto yy966; - if (yych != 't') goto yy822; -yy966: + if (yych <= 'S') { + if (yych <= 'Q') goto yy1307; + if (yych <= 'R') goto yy1450; + goto yy1449; + } else { + if (yych <= 'q') goto yy1307; + if (yych <= 'r') goto yy1450; + if (yych <= 's') goto yy1449; + goto yy1307; + } +yy1326: yych = *++p; - if (yych == 'I') goto yy967; - if (yych != 'i') goto yy822; -yy967: + if (yych <= 'Q') { + if (yych <= 'D') { + if (yych <= '0') goto yy1307; + if (yych <= '6') goto yy1343; + goto yy1307; + } else { + if (yych <= 'E') goto yy1442; + if (yych == 'G') goto yy1441; + goto yy1307; + } + } else { + if (yych <= 'f') { + if (yych <= 'R') goto yy1343; + if (yych == 'e') goto yy1442; + goto yy1307; + } else { + if (yych <= 'g') goto yy1441; + if (yych == 'r') goto yy1343; + goto yy1307; + } + } +yy1327: yych = *++p; - if (yych == 'C') goto yy968; - if (yych != 'c') goto yy822; -yy968: + if (yych == 'F') goto yy1437; + if (yych == 'f') goto yy1437; + goto yy1307; +yy1328: yych = *++p; - if (yych == 'L') goto yy969; - if (yych != 'l') goto yy822; -yy969: + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'L') goto yy1425; + goto yy1307; + } else { + if (yych <= 'O') goto yy1424; + if (yych <= 'T') goto yy1307; + goto yy1423; + } + } else { + if (yych <= 'n') { + if (yych == 'l') goto yy1425; + goto yy1307; + } else { + if (yych <= 'o') goto yy1424; + if (yych == 'u') goto yy1423; + goto yy1307; + } + } +yy1329: yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy970: + if (yych == 'I') goto yy1343; + if (yych == 'i') goto yy1343; + goto yy1307; +yy1330: yych = *++p; - if (yych == 'D') goto yy971; - if (yych != 'd') goto yy822; -yy971: + if (yych == 'A') goto yy1422; + if (yych == 'a') goto yy1422; + goto yy1307; +yy1331: yych = *++p; - if (yych == 'E') goto yy858; - if (yych == 'e') goto yy858; - goto yy822; -yy972: + if (yych <= 'U') { + if (yych <= 'K') { + if (yych == 'B') goto yy1415; + goto yy1307; + } else { + if (yych <= 'L') goto yy1343; + if (yych <= 'T') goto yy1307; + goto yy1414; + } + } else { + if (yych <= 'k') { + if (yych == 'b') goto yy1415; + goto yy1307; + } else { + if (yych <= 'l') goto yy1343; + if (yych == 'u') goto yy1414; + goto yy1307; + } + } +yy1332: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy858; - if (yych <= 'N') goto yy822; + if (yych == 'A') goto yy1401; + if (yych <= 'N') goto yy1307; + goto yy1400; } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy822; - goto yy858; + if (yych <= 'a') { + if (yych <= '`') goto yy1307; + goto yy1401; } else { - if (yych != 'o') goto yy822; + if (yych == 'o') goto yy1400; + goto yy1307; } } +yy1333: yych = *++p; - if (yych == 'G') goto yy974; - if (yych != 'g') goto yy822; -yy974: + if (yych <= 'T') { + if (yych <= 'I') { + if (yych == 'D') goto yy1343; + if (yych <= 'H') goto yy1307; + goto yy1399; + } else { + if (yych == 'L') goto yy1343; + if (yych <= 'S') goto yy1307; + goto yy1343; + } + } else { + if (yych <= 'i') { + if (yych == 'd') goto yy1343; + if (yych <= 'h') goto yy1307; + goto yy1399; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy1307; + goto yy1343; + } else { + if (yych == 't') goto yy1343; + goto yy1307; + } + } + } +yy1334: yych = *++p; - if (yych == 'R') goto yy975; - if (yych != 'r') goto yy822; -yy975: + if (yych <= 'T') { + if (yych <= 'D') { + if (yych == 'C') goto yy1388; + goto yy1307; + } else { + if (yych <= 'E') goto yy1389; + if (yych <= 'S') goto yy1307; + goto yy1387; + } + } else { + if (yych <= 'd') { + if (yych == 'c') goto yy1388; + goto yy1307; + } else { + if (yych <= 'e') goto yy1389; + if (yych == 't') goto yy1387; + goto yy1307; + } + } +yy1335: yych = *++p; - if (yych == 'E') goto yy976; - if (yych != 'e') goto yy822; -yy976: + switch (yych) { + case 'A': + case 'a': goto yy1373; + case 'B': + case 'b': goto yy1372; + case 'D': + case 'R': + case 'd': + case 'r': goto yy1343; + case 'E': + case 'e': goto yy1371; + case 'F': + case 'f': goto yy1370; + case 'H': + case 'h': goto yy1369; + default: goto yy1307; + } +yy1336: yych = *++p; - if (yych == 'S') goto yy977; - if (yych != 's') goto yy822; -yy977: + if (yych == 'M') goto yy1366; + if (yych == 'm') goto yy1366; + goto yy1307; +yy1337: yych = *++p; - if (yych == 'S') goto yy858; - if (yych == 's') goto yy858; - goto yy822; -yy978: + if (yych <= 'O') { + if (yych == 'I') goto yy1347; + if (yych <= 'N') goto yy1307; + goto yy1346; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy1307; + goto yy1347; + } else { + if (yych == 'o') goto yy1346; + goto yy1307; + } + } +yy1338: yych = *++p; - if (yych == 'D') goto yy979; - if (yych != 'd') goto yy822; -yy979: + if (yych == 'L') goto yy1343; + if (yych == 'l') goto yy1343; + goto yy1307; +yy1339: yych = *++p; - if (yych == 'E') goto yy980; - if (yych != 'e') goto yy822; -yy980: + if (yych == 'I') goto yy1340; + if (yych != 'i') goto yy1307; +yy1340: yych = *++p; - if (yych == 'O') goto yy981; - if (yych != 'o') goto yy822; -yy981: + if (yych == 'D') goto yy1341; + if (yych != 'd') goto yy1307; +yy1341: yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy822; - if (yych <= '\r') goto yy982; - if (yych <= 0x1F) goto yy822; + if (yych == 'E') goto yy1342; + if (yych != 'e') goto yy1307; +yy1342: + yych = *++p; + if (yych == 'O') goto yy1343; + if (yych != 'o') goto yy1307; +yy1343: + yych = *++p; + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1307; + if (yych >= 0x0E) goto yy1307; } else { - if (yych <= '/') { - if (yych <= '.') goto yy822; - } else { - if (yych != '>') goto yy822; - } + if (yych <= ' ') goto yy1344; + if (yych != '>') goto yy1307; } -yy982: +yy1344: ++p; { return (p - start); } -yy984: +yy1346: yych = *++p; if (yych <= 'R') { - if (yych == 'O') goto yy1000; - if (yych <= 'Q') goto yy822; - goto yy1001; + if (yych == 'O') goto yy1362; + if (yych <= 'Q') goto yy1307; + goto yy1363; } else { if (yych <= 'o') { - if (yych <= 'n') goto yy822; - goto yy1000; + if (yych <= 'n') goto yy1307; + goto yy1362; } else { - if (yych == 'r') goto yy1001; - goto yy822; + if (yych == 'r') goto yy1363; + goto yy1307; } } -yy985: +yy1347: yych = *++p; if (yych <= 'G') { - if (yych == 'E') goto yy986; - if (yych <= 'F') goto yy822; - goto yy987; + if (yych == 'E') goto yy1348; + if (yych <= 'F') goto yy1307; + goto yy1349; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy822; + if (yych <= 'd') goto yy1307; } else { - if (yych == 'g') goto yy987; - goto yy822; + if (yych == 'g') goto yy1349; + goto yy1307; } } -yy986: +yy1348: yych = *++p; - if (yych == 'L') goto yy996; - if (yych == 'l') goto yy996; - goto yy822; -yy987: + if (yych == 'L') goto yy1358; + if (yych == 'l') goto yy1358; + goto yy1307; +yy1349: yych = *++p; if (yych <= 'U') { - if (yych == 'C') goto yy989; - if (yych <= 'T') goto yy822; + if (yych == 'C') goto yy1351; + if (yych <= 'T') goto yy1307; } else { if (yych <= 'c') { - if (yych <= 'b') goto yy822; - goto yy989; + if (yych <= 'b') goto yy1307; + goto yy1351; } else { - if (yych != 'u') goto yy822; + if (yych != 'u') goto yy1307; } } yych = *++p; - if (yych == 'R') goto yy995; - if (yych == 'r') goto yy995; - goto yy822; -yy989: + if (yych == 'R') goto yy1357; + if (yych == 'r') goto yy1357; + goto yy1307; +yy1351: yych = *++p; - if (yych == 'A') goto yy990; - if (yych != 'a') goto yy822; -yy990: + if (yych == 'A') goto yy1352; + if (yych != 'a') goto yy1307; +yy1352: yych = *++p; - if (yych == 'P') goto yy991; - if (yych != 'p') goto yy822; -yy991: + if (yych == 'P') goto yy1353; + if (yych != 'p') goto yy1307; +yy1353: yych = *++p; - if (yych == 'T') goto yy992; - if (yych != 't') goto yy822; -yy992: + if (yych == 'T') goto yy1354; + if (yych != 't') goto yy1307; +yy1354: yych = *++p; - if (yych == 'I') goto yy993; - if (yych != 'i') goto yy822; -yy993: + if (yych == 'I') goto yy1355; + if (yych != 'i') goto yy1307; +yy1355: yych = *++p; - if (yych == 'O') goto yy994; - if (yych != 'o') goto yy822; -yy994: + if (yych == 'O') goto yy1356; + if (yych != 'o') goto yy1307; +yy1356: yych = *++p; - if (yych == 'N') goto yy981; - if (yych == 'n') goto yy981; - goto yy822; -yy995: + if (yych == 'N') goto yy1343; + if (yych == 'n') goto yy1343; + goto yy1307; +yy1357: yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy996: + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1358: yych = *++p; - if (yych == 'D') goto yy997; - if (yych != 'd') goto yy822; -yy997: + if (yych == 'D') goto yy1359; + if (yych != 'd') goto yy1307; +yy1359: yych = *++p; - if (yych == 'S') goto yy998; - if (yych != 's') goto yy822; -yy998: + if (yych == 'S') goto yy1360; + if (yych != 's') goto yy1307; +yy1360: yych = *++p; - if (yych == 'E') goto yy999; - if (yych != 'e') goto yy822; -yy999: + if (yych == 'E') goto yy1361; + if (yych != 'e') goto yy1307; +yy1361: yych = *++p; - if (yych == 'T') goto yy981; - if (yych == 't') goto yy981; - goto yy822; -yy1000: + if (yych == 'T') goto yy1343; + if (yych == 't') goto yy1343; + goto yy1307; +yy1362: yych = *++p; - if (yych == 'T') goto yy1002; - if (yych == 't') goto yy1002; - goto yy822; -yy1001: + if (yych == 'T') goto yy1364; + if (yych == 't') goto yy1364; + goto yy1307; +yy1363: yych = *++p; - if (yych == 'M') goto yy981; - if (yych == 'm') goto yy981; - goto yy822; -yy1002: + if (yych == 'M') goto yy1343; + if (yych == 'm') goto yy1343; + goto yy1307; +yy1364: yych = *++p; - if (yych == 'E') goto yy1003; - if (yych != 'e') goto yy822; -yy1003: + if (yych == 'E') goto yy1365; + if (yych != 'e') goto yy1307; +yy1365: yych = *++p; - if (yych == 'R') goto yy981; - if (yych == 'r') goto yy981; - goto yy822; -yy1004: + if (yych == 'R') goto yy1343; + if (yych == 'r') goto yy1343; + goto yy1307; +yy1366: yych = *++p; - if (yych == 'B') goto yy1005; - if (yych != 'b') goto yy822; -yy1005: + if (yych == 'B') goto yy1367; + if (yych != 'b') goto yy1307; +yy1367: yych = *++p; - if (yych == 'E') goto yy1006; - if (yych != 'e') goto yy822; -yy1006: + if (yych == 'E') goto yy1368; + if (yych != 'e') goto yy1307; +yy1368: yych = *++p; - if (yych == 'D') goto yy981; - if (yych == 'd') goto yy981; - goto yy822; -yy1007: + if (yych == 'D') goto yy1343; + if (yych == 'd') goto yy1343; + goto yy1307; +yy1369: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy822; - if (yych <= '\r') goto yy982; - goto yy822; + if (yych <= '=') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1307; + goto yy1344; } else { - if (yych <= ' ') goto yy982; - if (yych <= '.') goto yy822; - goto yy982; + if (yych == ' ') goto yy1344; + goto yy1307; } } else { - if (yych <= 'D') { - if (yych == '>') goto yy982; - goto yy822; + if (yych <= 'E') { + if (yych <= '>') goto yy1344; + if (yych <= 'D') goto yy1307; + goto yy1385; + } else { + if (yych == 'e') goto yy1385; + goto yy1307; + } + } +yy1370: + yych = *++p; + if (yych == 'O') goto yy1383; + if (yych == 'o') goto yy1383; + goto yy1307; +yy1371: + yych = *++p; + if (yych == 'X') goto yy1378; + if (yych == 'x') goto yy1378; + goto yy1307; +yy1372: + yych = *++p; + if (yych == 'O') goto yy1376; + if (yych == 'o') goto yy1376; + goto yy1307; +yy1373: + yych = *++p; + if (yych == 'B') goto yy1374; + if (yych != 'b') goto yy1307; +yy1374: + yych = *++p; + if (yych == 'L') goto yy1375; + if (yych != 'l') goto yy1307; +yy1375: + yych = *++p; + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1376: + yych = *++p; + if (yych == 'D') goto yy1377; + if (yych != 'd') goto yy1307; +yy1377: + yych = *++p; + if (yych == 'Y') goto yy1343; + if (yych == 'y') goto yy1343; + goto yy1307; +yy1378: + yych = *++p; + if (yych == 'T') goto yy1379; + if (yych != 't') goto yy1307; +yy1379: + yych = *++p; + if (yych == 'A') goto yy1380; + if (yych != 'a') goto yy1307; +yy1380: + yych = *++p; + if (yych == 'R') goto yy1381; + if (yych != 'r') goto yy1307; +yy1381: + yych = *++p; + if (yych == 'E') goto yy1382; + if (yych != 'e') goto yy1307; +yy1382: + yych = *++p; + if (yych == 'A') goto yy1343; + if (yych == 'a') goto yy1343; + goto yy1307; +yy1383: + yych = *++p; + if (yych == 'O') goto yy1384; + if (yych != 'o') goto yy1307; +yy1384: + yych = *++p; + if (yych == 'T') goto yy1343; + if (yych == 't') goto yy1343; + goto yy1307; +yy1385: + yych = *++p; + if (yych == 'A') goto yy1386; + if (yych != 'a') goto yy1307; +yy1386: + yych = *++p; + if (yych == 'D') goto yy1343; + if (yych == 'd') goto yy1343; + goto yy1307; +yy1387: + yych = *++p; + if (yych == 'Y') goto yy1397; + if (yych == 'y') goto yy1397; + goto yy1307; +yy1388: + yych = *++p; + if (yych == 'R') goto yy1394; + if (yych == 'r') goto yy1394; + goto yy1307; +yy1389: + yych = *++p; + if (yych == 'C') goto yy1390; + if (yych != 'c') goto yy1307; +yy1390: + yych = *++p; + if (yych == 'T') goto yy1391; + if (yych != 't') goto yy1307; +yy1391: + yych = *++p; + if (yych == 'I') goto yy1392; + if (yych != 'i') goto yy1307; +yy1392: + yych = *++p; + if (yych == 'O') goto yy1393; + if (yych != 'o') goto yy1307; +yy1393: + yych = *++p; + if (yych == 'N') goto yy1343; + if (yych == 'n') goto yy1343; + goto yy1307; +yy1394: + yych = *++p; + if (yych == 'I') goto yy1395; + if (yych != 'i') goto yy1307; +yy1395: + yych = *++p; + if (yych == 'P') goto yy1396; + if (yych != 'p') goto yy1307; +yy1396: + yych = *++p; + if (yych == 'T') goto yy1343; + if (yych == 't') goto yy1343; + goto yy1307; +yy1397: + yych = *++p; + if (yych == 'L') goto yy1398; + if (yych != 'l') goto yy1307; +yy1398: + yych = *++p; + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1399: + yych = *++p; + if (yych == 'V') goto yy1343; + if (yych == 'v') goto yy1343; + goto yy1307; +yy1400: + yych = *++p; + if (yych == 'L') goto yy1409; + if (yych == 'l') goto yy1409; + goto yy1307; +yy1401: + yych = *++p; + if (yych <= 'P') { + if (yych == 'N') goto yy1402; + if (yych <= 'O') goto yy1307; + goto yy1403; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy1307; } else { - if (yych <= 'E') goto yy1023; - if (yych == 'e') goto yy1023; - goto yy822; + if (yych == 'p') goto yy1403; + goto yy1307; } } -yy1008: - yych = *++p; - if (yych == 'O') goto yy1021; - if (yych == 'o') goto yy1021; - goto yy822; -yy1009: - yych = *++p; - if (yych == 'X') goto yy1016; - if (yych == 'x') goto yy1016; - goto yy822; -yy1010: - yych = *++p; - if (yych == 'O') goto yy1014; - if (yych == 'o') goto yy1014; - goto yy822; -yy1011: - yych = *++p; - if (yych == 'B') goto yy1012; - if (yych != 'b') goto yy822; -yy1012: - yych = *++p; - if (yych == 'L') goto yy1013; - if (yych != 'l') goto yy822; -yy1013: - yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy1014: +yy1402: yych = *++p; - if (yych == 'D') goto yy1015; - if (yych != 'd') goto yy822; -yy1015: + if (yych == 'V') goto yy1407; + if (yych == 'v') goto yy1407; + goto yy1307; +yy1403: yych = *++p; - if (yych == 'Y') goto yy981; - if (yych == 'y') goto yy981; - goto yy822; -yy1016: + if (yych == 'T') goto yy1404; + if (yych != 't') goto yy1307; +yy1404: yych = *++p; - if (yych == 'T') goto yy1017; - if (yych != 't') goto yy822; -yy1017: + if (yych == 'I') goto yy1405; + if (yych != 'i') goto yy1307; +yy1405: yych = *++p; - if (yych == 'A') goto yy1018; - if (yych != 'a') goto yy822; -yy1018: + if (yych == 'O') goto yy1406; + if (yych != 'o') goto yy1307; +yy1406: yych = *++p; - if (yych == 'R') goto yy1019; - if (yych != 'r') goto yy822; -yy1019: + if (yych == 'N') goto yy1343; + if (yych == 'n') goto yy1343; + goto yy1307; +yy1407: yych = *++p; - if (yych == 'E') goto yy1020; - if (yych != 'e') goto yy822; -yy1020: + if (yych == 'A') goto yy1408; + if (yych != 'a') goto yy1307; +yy1408: yych = *++p; - if (yych == 'A') goto yy981; - if (yych == 'a') goto yy981; - goto yy822; -yy1021: + if (yych == 'S') goto yy1343; + if (yych == 's') goto yy1343; + goto yy1307; +yy1409: yych = *++p; - if (yych == 'O') goto yy1022; - if (yych != 'o') goto yy822; -yy1022: + if (yych <= '=') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1307; + goto yy1344; + } else { + if (yych == ' ') goto yy1344; + goto yy1307; + } + } else { + if (yych <= 'G') { + if (yych <= '>') goto yy1344; + if (yych <= 'F') goto yy1307; + } else { + if (yych != 'g') goto yy1307; + } + } yych = *++p; - if (yych == 'T') goto yy981; - if (yych == 't') goto yy981; - goto yy822; -yy1023: + if (yych == 'R') goto yy1411; + if (yych != 'r') goto yy1307; +yy1411: yych = *++p; - if (yych == 'A') goto yy1024; - if (yych != 'a') goto yy822; -yy1024: + if (yych == 'O') goto yy1412; + if (yych != 'o') goto yy1307; +yy1412: yych = *++p; - if (yych == 'D') goto yy981; - if (yych == 'd') goto yy981; - goto yy822; -yy1025: + if (yych == 'U') goto yy1413; + if (yych != 'u') goto yy1307; +yy1413: yych = *++p; - if (yych == 'Y') goto yy1035; - if (yych == 'y') goto yy1035; - goto yy822; -yy1026: + if (yych == 'P') goto yy1343; + if (yych == 'p') goto yy1343; + goto yy1307; +yy1414: + yych = *++p; + if (yych == 'T') goto yy1419; + if (yych == 't') goto yy1419; + goto yy1307; +yy1415: yych = *++p; - if (yych == 'R') goto yy1032; - if (yych == 'r') goto yy1032; - goto yy822; -yy1027: + if (yych == 'J') goto yy1416; + if (yych != 'j') goto yy1307; +yy1416: yych = *++p; - if (yych == 'C') goto yy1028; - if (yych != 'c') goto yy822; -yy1028: + if (yych == 'E') goto yy1417; + if (yych != 'e') goto yy1307; +yy1417: yych = *++p; - if (yych == 'T') goto yy1029; - if (yych != 't') goto yy822; -yy1029: + if (yych == 'C') goto yy1418; + if (yych != 'c') goto yy1307; +yy1418: + yych = *++p; + if (yych == 'T') goto yy1343; + if (yych == 't') goto yy1343; + goto yy1307; +yy1419: + yych = *++p; + if (yych == 'P') goto yy1420; + if (yych != 'p') goto yy1307; +yy1420: + yych = *++p; + if (yych == 'U') goto yy1421; + if (yych != 'u') goto yy1307; +yy1421: + yych = *++p; + if (yych == 'T') goto yy1343; + if (yych == 't') goto yy1343; + goto yy1307; +yy1422: yych = *++p; - if (yych == 'I') goto yy1030; - if (yych != 'i') goto yy822; -yy1030: + if (yych == 'P') goto yy1343; + if (yych == 'p') goto yy1343; + goto yy1307; +yy1423: + yych = *++p; + if (yych == 'T') goto yy1434; + if (yych == 't') goto yy1434; + goto yy1307; +yy1424: + yych = *++p; + if (yych == 'D') goto yy1433; + if (yych == 'd') goto yy1433; + goto yy1307; +yy1425: + yych = *++p; + if (yych == 'O') goto yy1426; + if (yych != 'o') goto yy1307; +yy1426: + yych = *++p; + if (yych == 'C') goto yy1427; + if (yych != 'c') goto yy1307; +yy1427: + yych = *++p; + if (yych == 'K') goto yy1428; + if (yych != 'k') goto yy1307; +yy1428: + yych = *++p; + if (yych == 'Q') goto yy1429; + if (yych != 'q') goto yy1307; +yy1429: + yych = *++p; + if (yych == 'U') goto yy1430; + if (yych != 'u') goto yy1307; +yy1430: + yych = *++p; + if (yych == 'O') goto yy1431; + if (yych != 'o') goto yy1307; +yy1431: + yych = *++p; + if (yych == 'T') goto yy1432; + if (yych != 't') goto yy1307; +yy1432: + yych = *++p; + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1433: + yych = *++p; + if (yych == 'Y') goto yy1343; + if (yych == 'y') goto yy1343; + goto yy1307; +yy1434: + yych = *++p; + if (yych == 'T') goto yy1435; + if (yych != 't') goto yy1307; +yy1435: + yych = *++p; + if (yych == 'O') goto yy1436; + if (yych != 'o') goto yy1307; +yy1436: + yych = *++p; + if (yych == 'N') goto yy1343; + if (yych == 'n') goto yy1343; + goto yy1307; +yy1437: + yych = *++p; + if (yych == 'R') goto yy1438; + if (yych != 'r') goto yy1307; +yy1438: + yych = *++p; + if (yych == 'A') goto yy1439; + if (yych != 'a') goto yy1307; +yy1439: + yych = *++p; + if (yych == 'M') goto yy1440; + if (yych != 'm') goto yy1307; +yy1440: + yych = *++p; + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1441: + yych = *++p; + if (yych == 'R') goto yy1446; + if (yych == 'r') goto yy1446; + goto yy1307; +yy1442: + yych = *++p; + if (yych == 'A') goto yy1443; + if (yych != 'a') goto yy1307; +yy1443: + yych = *++p; + if (yych == 'D') goto yy1444; + if (yych != 'd') goto yy1307; +yy1444: + yych = *++p; + if (yych == 'E') goto yy1445; + if (yych != 'e') goto yy1307; +yy1445: + yych = *++p; + if (yych == 'R') goto yy1343; + if (yych == 'r') goto yy1343; + goto yy1307; +yy1446: + yych = *++p; + if (yych == 'O') goto yy1447; + if (yych != 'o') goto yy1307; +yy1447: + yych = *++p; + if (yych == 'U') goto yy1448; + if (yych != 'u') goto yy1307; +yy1448: + yych = *++p; + if (yych == 'P') goto yy1343; + if (yych == 'p') goto yy1343; + goto yy1307; +yy1449: + yych = *++p; + if (yych == 'I') goto yy1455; + if (yych == 'i') goto yy1455; + goto yy1307; +yy1450: + yych = *++p; + if (yych == 'T') goto yy1451; + if (yych != 't') goto yy1307; +yy1451: + yych = *++p; + if (yych == 'I') goto yy1452; + if (yych != 'i') goto yy1307; +yy1452: + yych = *++p; + if (yych == 'C') goto yy1453; + if (yych != 'c') goto yy1307; +yy1453: + yych = *++p; + if (yych == 'L') goto yy1454; + if (yych != 'l') goto yy1307; +yy1454: + yych = *++p; + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1455: + yych = *++p; + if (yych == 'D') goto yy1456; + if (yych != 'd') goto yy1307; +yy1456: + yych = *++p; + if (yych == 'E') goto yy1343; + if (yych == 'e') goto yy1343; + goto yy1307; +yy1457: yych = *++p; - if (yych == 'O') goto yy1031; - if (yych != 'o') goto yy822; -yy1031: + if (yych <= 'O') { + if (yych == 'E') goto yy1343; + if (yych <= 'N') goto yy1307; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy1307; + goto yy1343; + } else { + if (yych != 'o') goto yy1307; + } + } yych = *++p; - if (yych == 'N') goto yy981; - if (yych == 'n') goto yy981; - goto yy822; -yy1032: + if (yych == 'G') goto yy1459; + if (yych != 'g') goto yy1307; +yy1459: yych = *++p; - if (yych == 'I') goto yy1033; - if (yych != 'i') goto yy822; -yy1033: + if (yych == 'R') goto yy1460; + if (yych != 'r') goto yy1307; +yy1460: yych = *++p; - if (yych == 'P') goto yy1034; - if (yych != 'p') goto yy822; -yy1034: + if (yych == 'E') goto yy1461; + if (yych != 'e') goto yy1307; +yy1461: yych = *++p; - if (yych == 'T') goto yy981; - if (yych == 't') goto yy981; - goto yy822; -yy1035: + if (yych == 'S') goto yy1462; + if (yych != 's') goto yy1307; +yy1462: yych = *++p; - if (yych == 'L') goto yy1036; - if (yych != 'l') goto yy822; -yy1036: + if (yych == 'S') goto yy1343; + if (yych == 's') goto yy1343; + goto yy1307; +yy1463: yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy1037: + if (yych == 'D') goto yy1464; + if (yych != 'd') goto yy1307; +yy1464: yych = *++p; - if (yych == 'V') goto yy981; - if (yych == 'v') goto yy981; - goto yy822; -yy1038: + if (yych == 'E') goto yy1465; + if (yych != 'e') goto yy1307; +yy1465: yych = *++p; - if (yych == 'L') goto yy1047; - if (yych == 'l') goto yy1047; - goto yy822; -yy1039: + if (yych == 'O') goto yy1466; + if (yych != 'o') goto yy1307; +yy1466: yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy1040; - if (yych <= 'O') goto yy822; - goto yy1041; + if (yych <= ' ') { + if (yych <= 0x08) goto yy1307; + if (yych <= '\r') goto yy1467; + if (yych <= 0x1F) goto yy1307; } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy822; + if (yych <= '/') { + if (yych <= '.') goto yy1307; } else { - if (yych == 'p') goto yy1041; - goto yy822; + if (yych != '>') goto yy1307; } } -yy1040: - yych = *++p; - if (yych == 'V') goto yy1045; - if (yych == 'v') goto yy1045; - goto yy822; -yy1041: - yych = *++p; - if (yych == 'T') goto yy1042; - if (yych != 't') goto yy822; -yy1042: - yych = *++p; - if (yych == 'I') goto yy1043; - if (yych != 'i') goto yy822; -yy1043: - yych = *++p; - if (yych == 'O') goto yy1044; - if (yych != 'o') goto yy822; -yy1044: - yych = *++p; - if (yych == 'N') goto yy981; - if (yych == 'n') goto yy981; - goto yy822; -yy1045: - yych = *++p; - if (yych == 'A') goto yy1046; - if (yych != 'a') goto yy822; -yy1046: - yych = *++p; - if (yych == 'S') goto yy981; - if (yych == 's') goto yy981; - goto yy822; -yy1047: +yy1467: + ++p; + { return (p - start); } +yy1469: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy822; - if (yych <= '\r') goto yy982; - goto yy822; + if (yych <= 'R') { + if (yych == 'O') goto yy1485; + if (yych <= 'Q') goto yy1307; + goto yy1486; + } else { + if (yych <= 'o') { + if (yych <= 'n') goto yy1307; + goto yy1485; } else { - if (yych <= ' ') goto yy982; - if (yych <= '.') goto yy822; - goto yy982; + if (yych == 'r') goto yy1486; + goto yy1307; } + } +yy1470: + yych = *++p; + if (yych <= 'G') { + if (yych == 'E') goto yy1471; + if (yych <= 'F') goto yy1307; + goto yy1472; } else { - if (yych <= 'F') { - if (yych == '>') goto yy982; - goto yy822; + if (yych <= 'e') { + if (yych <= 'd') goto yy1307; } else { - if (yych <= 'G') goto yy1048; - if (yych != 'g') goto yy822; + if (yych == 'g') goto yy1472; + goto yy1307; } } -yy1048: - yych = *++p; - if (yych == 'R') goto yy1049; - if (yych != 'r') goto yy822; -yy1049: - yych = *++p; - if (yych == 'O') goto yy1050; - if (yych != 'o') goto yy822; -yy1050: - yych = *++p; - if (yych == 'U') goto yy1051; - if (yych != 'u') goto yy822; -yy1051: - yych = *++p; - if (yych == 'P') goto yy981; - if (yych == 'p') goto yy981; - goto yy822; -yy1052: - yych = *++p; - if (yych == 'T') goto yy1057; - if (yych == 't') goto yy1057; - goto yy822; -yy1053: - yych = *++p; - if (yych == 'J') goto yy1054; - if (yych != 'j') goto yy822; -yy1054: - yych = *++p; - if (yych == 'E') goto yy1055; - if (yych != 'e') goto yy822; -yy1055: - yych = *++p; - if (yych == 'C') goto yy1056; - if (yych != 'c') goto yy822; -yy1056: - yych = *++p; - if (yych == 'T') goto yy981; - if (yych == 't') goto yy981; - goto yy822; -yy1057: - yych = *++p; - if (yych == 'P') goto yy1058; - if (yych != 'p') goto yy822; -yy1058: - yych = *++p; - if (yych == 'U') goto yy1059; - if (yych != 'u') goto yy822; -yy1059: - yych = *++p; - if (yych == 'T') goto yy981; - if (yych == 't') goto yy981; - goto yy822; -yy1060: +yy1471: yych = *++p; - if (yych == 'P') goto yy981; - if (yych == 'p') goto yy981; - goto yy822; -yy1061: + if (yych == 'L') goto yy1481; + if (yych == 'l') goto yy1481; + goto yy1307; +yy1472: yych = *++p; - if (yych == 'T') goto yy1072; - if (yych == 't') goto yy1072; - goto yy822; -yy1062: + if (yych <= 'U') { + if (yych == 'C') goto yy1474; + if (yych <= 'T') goto yy1307; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy1307; + goto yy1474; + } else { + if (yych != 'u') goto yy1307; + } + } yych = *++p; - if (yych == 'D') goto yy1071; - if (yych == 'd') goto yy1071; - goto yy822; -yy1063: + if (yych == 'R') goto yy1480; + if (yych == 'r') goto yy1480; + goto yy1307; +yy1474: yych = *++p; - if (yych == 'O') goto yy1064; - if (yych != 'o') goto yy822; -yy1064: + if (yych == 'A') goto yy1475; + if (yych != 'a') goto yy1307; +yy1475: yych = *++p; - if (yych == 'C') goto yy1065; - if (yych != 'c') goto yy822; -yy1065: + if (yych == 'P') goto yy1476; + if (yych != 'p') goto yy1307; +yy1476: yych = *++p; - if (yych == 'K') goto yy1066; - if (yych != 'k') goto yy822; -yy1066: + if (yych == 'T') goto yy1477; + if (yych != 't') goto yy1307; +yy1477: yych = *++p; - if (yych == 'Q') goto yy1067; - if (yych != 'q') goto yy822; -yy1067: + if (yych == 'I') goto yy1478; + if (yych != 'i') goto yy1307; +yy1478: yych = *++p; - if (yych == 'U') goto yy1068; - if (yych != 'u') goto yy822; -yy1068: + if (yych == 'O') goto yy1479; + if (yych != 'o') goto yy1307; +yy1479: yych = *++p; - if (yych == 'O') goto yy1069; - if (yych != 'o') goto yy822; -yy1069: + if (yych == 'N') goto yy1466; + if (yych == 'n') goto yy1466; + goto yy1307; +yy1480: yych = *++p; - if (yych == 'T') goto yy1070; - if (yych != 't') goto yy822; -yy1070: + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1481: yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy1071: + if (yych == 'D') goto yy1482; + if (yych != 'd') goto yy1307; +yy1482: yych = *++p; - if (yych == 'Y') goto yy981; - if (yych == 'y') goto yy981; - goto yy822; -yy1072: + if (yych == 'S') goto yy1483; + if (yych != 's') goto yy1307; +yy1483: yych = *++p; - if (yych == 'T') goto yy1073; - if (yych != 't') goto yy822; -yy1073: + if (yych == 'E') goto yy1484; + if (yych != 'e') goto yy1307; +yy1484: yych = *++p; - if (yych == 'O') goto yy1074; - if (yych != 'o') goto yy822; -yy1074: + if (yych == 'T') goto yy1466; + if (yych == 't') goto yy1466; + goto yy1307; +yy1485: yych = *++p; - if (yych == 'N') goto yy981; - if (yych == 'n') goto yy981; - goto yy822; -yy1075: + if (yych == 'T') goto yy1487; + if (yych == 't') goto yy1487; + goto yy1307; +yy1486: yych = *++p; - if (yych == 'R') goto yy1076; - if (yych != 'r') goto yy822; -yy1076: + if (yych == 'M') goto yy1466; + if (yych == 'm') goto yy1466; + goto yy1307; +yy1487: yych = *++p; - if (yych == 'A') goto yy1077; - if (yych != 'a') goto yy822; -yy1077: + if (yych == 'E') goto yy1488; + if (yych != 'e') goto yy1307; +yy1488: yych = *++p; - if (yych == 'M') goto yy1078; - if (yych != 'm') goto yy822; -yy1078: + if (yych == 'R') goto yy1466; + if (yych == 'r') goto yy1466; + goto yy1307; +yy1489: yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy1079: + if (yych == 'B') goto yy1490; + if (yych != 'b') goto yy1307; +yy1490: yych = *++p; - if (yych == 'R') goto yy1084; - if (yych == 'r') goto yy1084; - goto yy822; -yy1080: + if (yych == 'E') goto yy1491; + if (yych != 'e') goto yy1307; +yy1491: yych = *++p; - if (yych == 'A') goto yy1081; - if (yych != 'a') goto yy822; -yy1081: + if (yych == 'D') goto yy1466; + if (yych == 'd') goto yy1466; + goto yy1307; +yy1492: yych = *++p; - if (yych == 'D') goto yy1082; - if (yych != 'd') goto yy822; -yy1082: + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1307; + if (yych <= '\r') goto yy1467; + goto yy1307; + } else { + if (yych <= ' ') goto yy1467; + if (yych <= '.') goto yy1307; + goto yy1467; + } + } else { + if (yych <= 'D') { + if (yych == '>') goto yy1467; + goto yy1307; + } else { + if (yych <= 'E') goto yy1508; + if (yych == 'e') goto yy1508; + goto yy1307; + } + } +yy1493: + yych = *++p; + if (yych == 'O') goto yy1506; + if (yych == 'o') goto yy1506; + goto yy1307; +yy1494: + yych = *++p; + if (yych == 'X') goto yy1501; + if (yych == 'x') goto yy1501; + goto yy1307; +yy1495: + yych = *++p; + if (yych == 'O') goto yy1499; + if (yych == 'o') goto yy1499; + goto yy1307; +yy1496: + yych = *++p; + if (yych == 'B') goto yy1497; + if (yych != 'b') goto yy1307; +yy1497: + yych = *++p; + if (yych == 'L') goto yy1498; + if (yych != 'l') goto yy1307; +yy1498: + yych = *++p; + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1499: + yych = *++p; + if (yych == 'D') goto yy1500; + if (yych != 'd') goto yy1307; +yy1500: + yych = *++p; + if (yych == 'Y') goto yy1466; + if (yych == 'y') goto yy1466; + goto yy1307; +yy1501: + yych = *++p; + if (yych == 'T') goto yy1502; + if (yych != 't') goto yy1307; +yy1502: + yych = *++p; + if (yych == 'A') goto yy1503; + if (yych != 'a') goto yy1307; +yy1503: + yych = *++p; + if (yych == 'R') goto yy1504; + if (yych != 'r') goto yy1307; +yy1504: + yych = *++p; + if (yych == 'E') goto yy1505; + if (yych != 'e') goto yy1307; +yy1505: + yych = *++p; + if (yych == 'A') goto yy1466; + if (yych == 'a') goto yy1466; + goto yy1307; +yy1506: + yych = *++p; + if (yych == 'O') goto yy1507; + if (yych != 'o') goto yy1307; +yy1507: + yych = *++p; + if (yych == 'T') goto yy1466; + if (yych == 't') goto yy1466; + goto yy1307; +yy1508: + yych = *++p; + if (yych == 'A') goto yy1509; + if (yych != 'a') goto yy1307; +yy1509: + yych = *++p; + if (yych == 'D') goto yy1466; + if (yych == 'd') goto yy1466; + goto yy1307; +yy1510: + yych = *++p; + if (yych == 'Y') goto yy1520; + if (yych == 'y') goto yy1520; + goto yy1307; +yy1511: + yych = *++p; + if (yych == 'R') goto yy1517; + if (yych == 'r') goto yy1517; + goto yy1307; +yy1512: + yych = *++p; + if (yych == 'C') goto yy1513; + if (yych != 'c') goto yy1307; +yy1513: + yych = *++p; + if (yych == 'T') goto yy1514; + if (yych != 't') goto yy1307; +yy1514: + yych = *++p; + if (yych == 'I') goto yy1515; + if (yych != 'i') goto yy1307; +yy1515: + yych = *++p; + if (yych == 'O') goto yy1516; + if (yych != 'o') goto yy1307; +yy1516: + yych = *++p; + if (yych == 'N') goto yy1466; + if (yych == 'n') goto yy1466; + goto yy1307; +yy1517: + yych = *++p; + if (yych == 'I') goto yy1518; + if (yych != 'i') goto yy1307; +yy1518: + yych = *++p; + if (yych == 'P') goto yy1519; + if (yych != 'p') goto yy1307; +yy1519: + yych = *++p; + if (yych == 'T') goto yy1466; + if (yych == 't') goto yy1466; + goto yy1307; +yy1520: + yych = *++p; + if (yych == 'L') goto yy1521; + if (yych != 'l') goto yy1307; +yy1521: + yych = *++p; + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1522: + yych = *++p; + if (yych == 'V') goto yy1466; + if (yych == 'v') goto yy1466; + goto yy1307; +yy1523: + yych = *++p; + if (yych == 'L') goto yy1532; + if (yych == 'l') goto yy1532; + goto yy1307; +yy1524: yych = *++p; - if (yych == 'E') goto yy1083; - if (yych != 'e') goto yy822; -yy1083: + if (yych <= 'P') { + if (yych == 'N') goto yy1525; + if (yych <= 'O') goto yy1307; + goto yy1526; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy1307; + } else { + if (yych == 'p') goto yy1526; + goto yy1307; + } + } +yy1525: yych = *++p; - if (yych == 'R') goto yy981; - if (yych == 'r') goto yy981; - goto yy822; -yy1084: + if (yych == 'V') goto yy1530; + if (yych == 'v') goto yy1530; + goto yy1307; +yy1526: yych = *++p; - if (yych == 'O') goto yy1085; - if (yych != 'o') goto yy822; -yy1085: + if (yych == 'T') goto yy1527; + if (yych != 't') goto yy1307; +yy1527: yych = *++p; - if (yych == 'U') goto yy1086; - if (yych != 'u') goto yy822; -yy1086: + if (yych == 'I') goto yy1528; + if (yych != 'i') goto yy1307; +yy1528: yych = *++p; - if (yych == 'P') goto yy981; - if (yych == 'p') goto yy981; - goto yy822; -yy1087: + if (yych == 'O') goto yy1529; + if (yych != 'o') goto yy1307; +yy1529: yych = *++p; - if (yych == 'I') goto yy1093; - if (yych == 'i') goto yy1093; - goto yy822; -yy1088: + if (yych == 'N') goto yy1466; + if (yych == 'n') goto yy1466; + goto yy1307; +yy1530: yych = *++p; - if (yych == 'T') goto yy1089; - if (yych != 't') goto yy822; -yy1089: + if (yych == 'A') goto yy1531; + if (yych != 'a') goto yy1307; +yy1531: yych = *++p; - if (yych == 'I') goto yy1090; - if (yych != 'i') goto yy822; -yy1090: + if (yych == 'S') goto yy1466; + if (yych == 's') goto yy1466; + goto yy1307; +yy1532: yych = *++p; - if (yych == 'C') goto yy1091; - if (yych != 'c') goto yy822; -yy1091: + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1307; + if (yych <= '\r') goto yy1467; + goto yy1307; + } else { + if (yych <= ' ') goto yy1467; + if (yych <= '.') goto yy1307; + goto yy1467; + } + } else { + if (yych <= 'F') { + if (yych == '>') goto yy1467; + goto yy1307; + } else { + if (yych <= 'G') goto yy1533; + if (yych != 'g') goto yy1307; + } + } +yy1533: yych = *++p; - if (yych == 'L') goto yy1092; - if (yych != 'l') goto yy822; -yy1092: + if (yych == 'R') goto yy1534; + if (yych != 'r') goto yy1307; +yy1534: + yych = *++p; + if (yych == 'O') goto yy1535; + if (yych != 'o') goto yy1307; +yy1535: + yych = *++p; + if (yych == 'U') goto yy1536; + if (yych != 'u') goto yy1307; +yy1536: + yych = *++p; + if (yych == 'P') goto yy1466; + if (yych == 'p') goto yy1466; + goto yy1307; +yy1537: + yych = *++p; + if (yych == 'T') goto yy1542; + if (yych == 't') goto yy1542; + goto yy1307; +yy1538: yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy1093: + if (yych == 'J') goto yy1539; + if (yych != 'j') goto yy1307; +yy1539: yych = *++p; - if (yych == 'D') goto yy1094; - if (yych != 'd') goto yy822; -yy1094: + if (yych == 'E') goto yy1540; + if (yych != 'e') goto yy1307; +yy1540: yych = *++p; - if (yych == 'E') goto yy981; - if (yych == 'e') goto yy981; - goto yy822; -yy1095: + if (yych == 'C') goto yy1541; + if (yych != 'c') goto yy1307; +yy1541: + yych = *++p; + if (yych == 'T') goto yy1466; + if (yych == 't') goto yy1466; + goto yy1307; +yy1542: + yych = *++p; + if (yych == 'P') goto yy1543; + if (yych != 'p') goto yy1307; +yy1543: + yych = *++p; + if (yych == 'U') goto yy1544; + if (yych != 'u') goto yy1307; +yy1544: + yych = *++p; + if (yych == 'T') goto yy1466; + if (yych == 't') goto yy1466; + goto yy1307; +yy1545: + yych = *++p; + if (yych == 'P') goto yy1466; + if (yych == 'p') goto yy1466; + goto yy1307; +yy1546: + yych = *++p; + if (yych == 'T') goto yy1557; + if (yych == 't') goto yy1557; + goto yy1307; +yy1547: + yych = *++p; + if (yych == 'D') goto yy1556; + if (yych == 'd') goto yy1556; + goto yy1307; +yy1548: + yych = *++p; + if (yych == 'O') goto yy1549; + if (yych != 'o') goto yy1307; +yy1549: + yych = *++p; + if (yych == 'C') goto yy1550; + if (yych != 'c') goto yy1307; +yy1550: + yych = *++p; + if (yych == 'K') goto yy1551; + if (yych != 'k') goto yy1307; +yy1551: + yych = *++p; + if (yych == 'Q') goto yy1552; + if (yych != 'q') goto yy1307; +yy1552: + yych = *++p; + if (yych == 'U') goto yy1553; + if (yych != 'u') goto yy1307; +yy1553: + yych = *++p; + if (yych == 'O') goto yy1554; + if (yych != 'o') goto yy1307; +yy1554: + yych = *++p; + if (yych == 'T') goto yy1555; + if (yych != 't') goto yy1307; +yy1555: + yych = *++p; + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1556: + yych = *++p; + if (yych == 'Y') goto yy1466; + if (yych == 'y') goto yy1466; + goto yy1307; +yy1557: + yych = *++p; + if (yych == 'T') goto yy1558; + if (yych != 't') goto yy1307; +yy1558: + yych = *++p; + if (yych == 'O') goto yy1559; + if (yych != 'o') goto yy1307; +yy1559: + yych = *++p; + if (yych == 'N') goto yy1466; + if (yych == 'n') goto yy1466; + goto yy1307; +yy1560: + yych = *++p; + if (yych == 'R') goto yy1561; + if (yych != 'r') goto yy1307; +yy1561: + yych = *++p; + if (yych == 'A') goto yy1562; + if (yych != 'a') goto yy1307; +yy1562: + yych = *++p; + if (yych == 'M') goto yy1563; + if (yych != 'm') goto yy1307; +yy1563: + yych = *++p; + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1564: + yych = *++p; + if (yych == 'R') goto yy1569; + if (yych == 'r') goto yy1569; + goto yy1307; +yy1565: + yych = *++p; + if (yych == 'A') goto yy1566; + if (yych != 'a') goto yy1307; +yy1566: + yych = *++p; + if (yych == 'D') goto yy1567; + if (yych != 'd') goto yy1307; +yy1567: + yych = *++p; + if (yych == 'E') goto yy1568; + if (yych != 'e') goto yy1307; +yy1568: + yych = *++p; + if (yych == 'R') goto yy1466; + if (yych == 'r') goto yy1466; + goto yy1307; +yy1569: + yych = *++p; + if (yych == 'O') goto yy1570; + if (yych != 'o') goto yy1307; +yy1570: + yych = *++p; + if (yych == 'U') goto yy1571; + if (yych != 'u') goto yy1307; +yy1571: + yych = *++p; + if (yych == 'P') goto yy1466; + if (yych == 'p') goto yy1466; + goto yy1307; +yy1572: + yych = *++p; + if (yych == 'I') goto yy1578; + if (yych == 'i') goto yy1578; + goto yy1307; +yy1573: + yych = *++p; + if (yych == 'T') goto yy1574; + if (yych != 't') goto yy1307; +yy1574: + yych = *++p; + if (yych == 'I') goto yy1575; + if (yych != 'i') goto yy1307; +yy1575: + yych = *++p; + if (yych == 'C') goto yy1576; + if (yych != 'c') goto yy1307; +yy1576: + yych = *++p; + if (yych == 'L') goto yy1577; + if (yych != 'l') goto yy1307; +yy1577: + yych = *++p; + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1578: + yych = *++p; + if (yych == 'D') goto yy1579; + if (yych != 'd') goto yy1307; +yy1579: + yych = *++p; + if (yych == 'E') goto yy1466; + if (yych == 'e') goto yy1466; + goto yy1307; +yy1580: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy981; - if (yych <= 'N') goto yy822; + if (yych == 'E') goto yy1466; + if (yych <= 'N') goto yy1307; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy822; - goto yy981; + if (yych <= 'd') goto yy1307; + goto yy1466; } else { - if (yych != 'o') goto yy822; + if (yych != 'o') goto yy1307; } } yych = *++p; - if (yych == 'G') goto yy1097; - if (yych != 'g') goto yy822; -yy1097: + if (yych == 'G') goto yy1582; + if (yych != 'g') goto yy1307; +yy1582: yych = *++p; - if (yych == 'R') goto yy1098; - if (yych != 'r') goto yy822; -yy1098: + if (yych == 'R') goto yy1583; + if (yych != 'r') goto yy1307; +yy1583: yych = *++p; - if (yych == 'E') goto yy1099; - if (yych != 'e') goto yy822; -yy1099: + if (yych == 'E') goto yy1584; + if (yych != 'e') goto yy1307; +yy1584: yych = *++p; - if (yych == 'S') goto yy1100; - if (yych != 's') goto yy822; -yy1100: + if (yych == 'S') goto yy1585; + if (yych != 's') goto yy1307; +yy1585: ++p; - if ((yych = *p) == 'S') goto yy981; - if (yych == 's') goto yy981; - goto yy822; + if ((yych = *p) == 'S') goto yy1466; + if (yych == 's') goto yy1466; + goto yy1307; } } @@ -10389,402 +13288,402 @@ int _scan_link_url(const unsigned char *p) yych = *p; if (yych <= '(') { if (yych <= 0x1F) { - if (yych == '\n') goto yy1104; - goto yy1112; + if (yych == '\n') goto yy1589; + goto yy1597; } else { - if (yych <= ' ') goto yy1106; - if (yych <= '\'') goto yy1108; - goto yy1111; + if (yych <= ' ') goto yy1591; + if (yych <= '\'') goto yy1593; + goto yy1596; } } else { if (yych <= '<') { - if (yych <= ')') goto yy1112; - if (yych <= ';') goto yy1108; - goto yy1107; + if (yych <= ')') goto yy1597; + if (yych <= ';') goto yy1593; + goto yy1592; } else { - if (yych == '\\') goto yy1109; - goto yy1108; + if (yych == '\\') goto yy1594; + goto yy1593; } } -yy1103: +yy1588: { return (p - start); } -yy1104: +yy1589: yyaccept = 0; marker = ++p; yych = *p; -yy1105: +yy1590: if (yybm[0+yych] & 8) { - goto yy1104; + goto yy1589; } if (yych <= ')') { - if (yych <= ' ') goto yy1103; - if (yych <= '\'') goto yy1117; - if (yych <= '(') goto yy1113; - goto yy1103; + if (yych <= ' ') goto yy1588; + if (yych <= '\'') goto yy1602; + if (yych <= '(') goto yy1598; + goto yy1588; } else { if (yych <= '<') { - if (yych <= ';') goto yy1117; - goto yy1120; + if (yych <= ';') goto yy1602; + goto yy1605; } else { - if (yych == '\\') goto yy1119; - goto yy1117; + if (yych == '\\') goto yy1604; + goto yy1602; } } -yy1106: +yy1591: yyaccept = 0; yych = *(marker = ++p); - goto yy1105; -yy1107: + goto yy1590; +yy1592: yyaccept = 0; yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1120; + goto yy1605; } if (yych <= '\'') { - if (yych <= 0x00) goto yy1103; - if (yych == '\n') goto yy1103; - goto yy1127; + if (yych <= 0x00) goto yy1588; + if (yych == '\n') goto yy1588; + goto yy1612; } else { if (yych <= ')') { - if (yych <= '(') goto yy1125; - goto yy1127; + if (yych <= '(') goto yy1610; + goto yy1612; } else { - if (yych <= '=') goto yy1117; - if (yych <= '>') goto yy1122; - goto yy1124; + if (yych <= '=') goto yy1602; + if (yych <= '>') goto yy1607; + goto yy1609; } } -yy1108: +yy1593: yyaccept = 0; yych = *(marker = ++p); - goto yy1118; -yy1109: + goto yy1603; +yy1594: ++p; if ((yych = *p) <= '@') { - if (yych <= ' ') goto yy1110; - if (yych <= '/') goto yy1117; - if (yych >= ':') goto yy1117; + if (yych <= ' ') goto yy1595; + if (yych <= '/') goto yy1602; + if (yych >= ':') goto yy1602; } else { if (yych <= '`') { - if (yych >= '[') goto yy1117; + if (yych >= '[') goto yy1602; } else { - if (yych <= 'z') goto yy1110; - if (yych <= '~') goto yy1117; + if (yych <= 'z') goto yy1595; + if (yych <= '~') goto yy1602; } } -yy1110: +yy1595: { return 0; } -yy1111: +yy1596: yyaccept = 1; yych = *(marker = ++p); - if (yych <= ' ') goto yy1110; - if (yych == '(') goto yy1110; - goto yy1114; -yy1112: + if (yych <= ' ') goto yy1595; + if (yych == '(') goto yy1595; + goto yy1599; +yy1597: yych = *++p; - goto yy1110; -yy1113: + goto yy1595; +yy1598: ++p; yych = *p; -yy1114: +yy1599: if (yybm[0+yych] & 16) { - goto yy1113; + goto yy1598; } - if (yych <= '(') goto yy1115; - if (yych <= ')') goto yy1117; - goto yy1116; -yy1115: + if (yych <= '(') goto yy1600; + if (yych <= ')') goto yy1602; + goto yy1601; +yy1600: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1103; + goto yy1588; } else { - goto yy1110; + goto yy1595; } } else { - goto yy1123; + goto yy1608; } -yy1116: +yy1601: ++p; yych = *p; if (yych <= '@') { - if (yych <= ' ') goto yy1115; - if (yych <= '/') goto yy1113; - if (yych <= '9') goto yy1115; - goto yy1113; + if (yych <= ' ') goto yy1600; + if (yych <= '/') goto yy1598; + if (yych <= '9') goto yy1600; + goto yy1598; } else { if (yych <= '`') { - if (yych <= 'Z') goto yy1115; - goto yy1113; + if (yych <= 'Z') goto yy1600; + goto yy1598; } else { - if (yych <= 'z') goto yy1115; - if (yych <= '~') goto yy1113; - goto yy1115; + if (yych <= 'z') goto yy1600; + if (yych <= '~') goto yy1598; + goto yy1600; } } -yy1117: +yy1602: yyaccept = 0; marker = ++p; yych = *p; -yy1118: +yy1603: if (yych <= '(') { - if (yych <= ' ') goto yy1103; - if (yych <= '\'') goto yy1117; - goto yy1113; + if (yych <= ' ') goto yy1588; + if (yych <= '\'') goto yy1602; + goto yy1598; } else { - if (yych <= ')') goto yy1103; - if (yych != '\\') goto yy1117; + if (yych <= ')') goto yy1588; + if (yych != '\\') goto yy1602; } -yy1119: +yy1604: ++p; yych = *p; if (yych <= '@') { - if (yych <= ' ') goto yy1115; - if (yych <= '/') goto yy1117; - if (yych <= '9') goto yy1115; - goto yy1117; + if (yych <= ' ') goto yy1600; + if (yych <= '/') goto yy1602; + if (yych <= '9') goto yy1600; + goto yy1602; } else { if (yych <= '`') { - if (yych <= 'Z') goto yy1115; - goto yy1117; + if (yych <= 'Z') goto yy1600; + goto yy1602; } else { - if (yych <= 'z') goto yy1115; - if (yych <= '~') goto yy1117; - goto yy1115; + if (yych <= 'z') goto yy1600; + if (yych <= '~') goto yy1602; + goto yy1600; } } -yy1120: +yy1605: yyaccept = 0; marker = ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1120; + goto yy1605; } if (yych <= '\'') { - if (yych <= 0x00) goto yy1103; - if (yych == '\n') goto yy1103; - goto yy1127; + if (yych <= 0x00) goto yy1588; + if (yych == '\n') goto yy1588; + goto yy1612; } else { if (yych <= ')') { - if (yych <= '(') goto yy1125; - goto yy1127; + if (yych <= '(') goto yy1610; + goto yy1612; } else { - if (yych <= '=') goto yy1117; - if (yych >= '?') goto yy1124; + if (yych <= '=') goto yy1602; + if (yych >= '?') goto yy1609; } } -yy1122: +yy1607: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1123; - if (yych != ')') goto yy1118; -yy1123: + if (yych <= ' ') goto yy1608; + if (yych != ')') goto yy1603; +yy1608: { return (p - start); } -yy1124: +yy1609: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { - if (yych <= 0x00) goto yy1115; - if (yych == '\n') goto yy1115; - goto yy1127; + if (yych <= 0x00) goto yy1600; + if (yych == '\n') goto yy1600; + goto yy1612; } else { - if (yych <= '/') goto yy1120; - if (yych <= '9') goto yy1127; - if (yych <= '=') goto yy1120; - goto yy1137; + if (yych <= '/') goto yy1605; + if (yych <= '9') goto yy1612; + if (yych <= '=') goto yy1605; + goto yy1622; } } else { if (yych <= '\\') { - if (yych <= '@') goto yy1120; - if (yych <= 'Z') goto yy1127; - if (yych <= '[') goto yy1120; - goto yy1138; + if (yych <= '@') goto yy1605; + if (yych <= 'Z') goto yy1612; + if (yych <= '[') goto yy1605; + goto yy1623; } else { - if (yych <= '`') goto yy1120; - if (yych <= 'z') goto yy1127; - if (yych <= '~') goto yy1120; - goto yy1127; + if (yych <= '`') goto yy1605; + if (yych <= 'z') goto yy1612; + if (yych <= '~') goto yy1605; + goto yy1612; } } -yy1125: +yy1610: ++p; yych = *p; if (yych <= ')') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1115; - if (yych >= '\n') goto yy1115; + if (yych <= 0x00) goto yy1600; + if (yych >= '\n') goto yy1600; } else { - if (yych <= ' ') goto yy1127; - if (yych <= '\'') goto yy1125; - if (yych >= ')') goto yy1120; + if (yych <= ' ') goto yy1612; + if (yych <= '\'') goto yy1610; + if (yych >= ')') goto yy1605; } } else { if (yych <= '=') { - if (yych == '<') goto yy1113; - goto yy1125; + if (yych == '<') goto yy1598; + goto yy1610; } else { - if (yych <= '>') goto yy1133; - if (yych == '\\') goto yy1134; - goto yy1125; + if (yych <= '>') goto yy1618; + if (yych == '\\') goto yy1619; + goto yy1610; } } -yy1127: +yy1612: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1127; + goto yy1612; } - if (yych <= '=') goto yy1115; - if (yych >= '?') goto yy1130; -yy1129: + if (yych <= '=') goto yy1600; + if (yych >= '?') goto yy1615; +yy1614: yych = *++p; - goto yy1123; -yy1130: + goto yy1608; +yy1615: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1130; + goto yy1615; } if (yych <= '\n') { - if (yych <= 0x00) goto yy1115; - if (yych <= '\t') goto yy1127; - goto yy1115; + if (yych <= 0x00) goto yy1600; + if (yych <= '\t') goto yy1612; + goto yy1600; } else { - if (yych != '>') goto yy1127; + if (yych != '>') goto yy1612; } yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1127; + goto yy1612; } - if (yych <= '=') goto yy1123; - if (yych <= '>') goto yy1129; - goto yy1130; -yy1133: + if (yych <= '=') goto yy1608; + if (yych <= '>') goto yy1614; + goto yy1615; +yy1618: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1123; - if (yych == '(') goto yy1123; - goto yy1114; -yy1134: + if (yych <= ' ') goto yy1608; + if (yych == '(') goto yy1608; + goto yy1599; +yy1619: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { - if (yych <= 0x00) goto yy1115; - if (yych == '\n') goto yy1115; - goto yy1127; + if (yych <= 0x00) goto yy1600; + if (yych == '\n') goto yy1600; + goto yy1612; } else { - if (yych <= '/') goto yy1125; - if (yych <= '9') goto yy1127; - if (yych <= '=') goto yy1125; + if (yych <= '/') goto yy1610; + if (yych <= '9') goto yy1612; + if (yych <= '=') goto yy1610; } } else { if (yych <= '\\') { - if (yych <= '@') goto yy1125; - if (yych <= 'Z') goto yy1127; - if (yych <= '[') goto yy1125; - goto yy1136; + if (yych <= '@') goto yy1610; + if (yych <= 'Z') goto yy1612; + if (yych <= '[') goto yy1610; + goto yy1621; } else { - if (yych <= '`') goto yy1125; - if (yych <= 'z') goto yy1127; - if (yych <= '~') goto yy1125; - goto yy1127; + if (yych <= '`') goto yy1610; + if (yych <= 'z') goto yy1612; + if (yych <= '~') goto yy1610; + goto yy1612; } } -yy1135: +yy1620: yyaccept = 2; marker = ++p; yych = *p; if (yych <= ')') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1123; - if (yych <= '\t') goto yy1127; - goto yy1123; + if (yych <= 0x00) goto yy1608; + if (yych <= '\t') goto yy1612; + goto yy1608; } else { - if (yych <= ' ') goto yy1127; - if (yych <= '\'') goto yy1125; - if (yych <= '(') goto yy1127; - goto yy1120; + if (yych <= ' ') goto yy1612; + if (yych <= '\'') goto yy1610; + if (yych <= '(') goto yy1612; + goto yy1605; } } else { if (yych <= '=') { - if (yych == '<') goto yy1113; - goto yy1125; + if (yych == '<') goto yy1598; + goto yy1610; } else { - if (yych <= '>') goto yy1133; - if (yych == '\\') goto yy1134; - goto yy1125; + if (yych <= '>') goto yy1618; + if (yych == '\\') goto yy1619; + goto yy1610; } } -yy1136: +yy1621: ++p; yych = *p; if (yych <= '(') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1115; - if (yych <= '\t') goto yy1127; - goto yy1115; + if (yych <= 0x00) goto yy1600; + if (yych <= '\t') goto yy1612; + goto yy1600; } else { - if (yych <= ' ') goto yy1127; - if (yych <= '\'') goto yy1125; - goto yy1127; + if (yych <= ' ') goto yy1612; + if (yych <= '\'') goto yy1610; + goto yy1612; } } else { if (yych <= '>') { - if (yych <= ')') goto yy1120; - if (yych <= '=') goto yy1125; - goto yy1135; + if (yych <= ')') goto yy1605; + if (yych <= '=') goto yy1610; + goto yy1620; } else { - if (yych == '\\') goto yy1134; - goto yy1125; + if (yych == '\\') goto yy1619; + goto yy1610; } } -yy1137: +yy1622: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1120; + goto yy1605; } if (yych <= '\'') { - if (yych <= 0x00) goto yy1123; - if (yych == '\n') goto yy1123; - goto yy1127; + if (yych <= 0x00) goto yy1608; + if (yych == '\n') goto yy1608; + goto yy1612; } else { if (yych <= ')') { - if (yych <= '(') goto yy1125; - goto yy1127; + if (yych <= '(') goto yy1610; + goto yy1612; } else { - if (yych <= '=') goto yy1117; - if (yych <= '>') goto yy1122; - goto yy1124; + if (yych <= '=') goto yy1602; + if (yych <= '>') goto yy1607; + goto yy1609; } } -yy1138: +yy1623: yyaccept = 0; marker = ++p; yych = *p; if (yych <= '(') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1103; - if (yych <= '\t') goto yy1127; - goto yy1103; + if (yych <= 0x00) goto yy1588; + if (yych <= '\t') goto yy1612; + goto yy1588; } else { - if (yych <= ' ') goto yy1127; - if (yych <= '\'') goto yy1120; - goto yy1125; + if (yych <= ' ') goto yy1612; + if (yych <= '\'') goto yy1605; + goto yy1610; } } else { if (yych <= '>') { - if (yych <= ')') goto yy1127; - if (yych <= '=') goto yy1120; - goto yy1137; + if (yych <= ')') goto yy1612; + if (yych <= '=') goto yy1605; + goto yy1622; } else { - if (yych == '\\') goto yy1124; - goto yy1120; + if (yych == '\\') goto yy1609; + goto yy1605; } } } @@ -10838,147 +13737,147 @@ int _scan_link_title(const unsigned char *p) }; yych = *p; if (yych <= '"') { - if (yych == '\n') goto yy1141; - if (yych <= '!') goto yy1145; - goto yy1142; + if (yych == '\n') goto yy1626; + if (yych <= '!') goto yy1630; + goto yy1627; } else { - if (yych <= '&') goto yy1145; - if (yych <= '\'') goto yy1143; - if (yych <= '(') goto yy1144; - goto yy1145; + if (yych <= '&') goto yy1630; + if (yych <= '\'') goto yy1628; + if (yych <= '(') goto yy1629; + goto yy1630; } -yy1141: +yy1626: { return 0; } -yy1142: +yy1627: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1141; - goto yy1162; -yy1143: + if (yych <= 0x00) goto yy1626; + goto yy1647; +yy1628: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1141; - goto yy1155; -yy1144: + if (yych <= 0x00) goto yy1626; + goto yy1640; +yy1629: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1141; - goto yy1147; -yy1145: + if (yych <= 0x00) goto yy1626; + goto yy1632; +yy1630: yych = *++p; - goto yy1141; -yy1146: + goto yy1626; +yy1631: ++p; yych = *p; -yy1147: +yy1632: if (yybm[0+yych] & 16) { - goto yy1146; + goto yy1631; } - if (yych <= 0x00) goto yy1148; - if (yych <= '[') goto yy1151; - goto yy1149; -yy1148: + if (yych <= 0x00) goto yy1633; + if (yych <= '[') goto yy1636; + goto yy1634; +yy1633: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1141; + goto yy1626; } else { - goto yy1152; + goto yy1637; } } else { if (yyaccept == 2) { - goto yy1159; + goto yy1644; } else { - goto yy1166; + goto yy1651; } } -yy1149: +yy1634: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1146; + goto yy1631; } - if (yych <= 0x00) goto yy1148; - if (yych <= '[') goto yy1153; - goto yy1149; -yy1151: + if (yych <= 0x00) goto yy1633; + if (yych <= '[') goto yy1638; + goto yy1634; +yy1636: ++p; -yy1152: +yy1637: { return (p - start); } -yy1153: +yy1638: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1146; + goto yy1631; } - if (yych <= 0x00) goto yy1152; - if (yych <= '[') goto yy1151; - goto yy1149; -yy1154: + if (yych <= 0x00) goto yy1637; + if (yych <= '[') goto yy1636; + goto yy1634; +yy1639: ++p; yych = *p; -yy1155: +yy1640: if (yybm[0+yych] & 64) { - goto yy1154; + goto yy1639; } - if (yych <= 0x00) goto yy1148; - if (yych <= '[') goto yy1158; -yy1156: + if (yych <= 0x00) goto yy1633; + if (yych <= '[') goto yy1643; +yy1641: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1154; + goto yy1639; } - if (yych <= 0x00) goto yy1148; - if (yych <= '[') goto yy1160; - goto yy1156; -yy1158: + if (yych <= 0x00) goto yy1633; + if (yych <= '[') goto yy1645; + goto yy1641; +yy1643: ++p; -yy1159: +yy1644: { return (p - start); } -yy1160: +yy1645: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1154; + goto yy1639; } - if (yych <= 0x00) goto yy1159; - if (yych <= '[') goto yy1158; - goto yy1156; -yy1161: + if (yych <= 0x00) goto yy1644; + if (yych <= '[') goto yy1643; + goto yy1641; +yy1646: ++p; yych = *p; -yy1162: +yy1647: if (yybm[0+yych] & 128) { - goto yy1161; + goto yy1646; } - if (yych <= 0x00) goto yy1148; - if (yych <= '[') goto yy1165; -yy1163: + if (yych <= 0x00) goto yy1633; + if (yych <= '[') goto yy1650; +yy1648: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1161; + goto yy1646; } - if (yych <= 0x00) goto yy1148; - if (yych <= '[') goto yy1167; - goto yy1163; -yy1165: + if (yych <= 0x00) goto yy1633; + if (yych <= '[') goto yy1652; + goto yy1648; +yy1650: ++p; -yy1166: +yy1651: { return (p - start); } -yy1167: +yy1652: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1161; + goto yy1646; } - if (yych <= 0x00) goto yy1166; - if (yych <= '[') goto yy1165; - goto yy1163; + if (yych <= 0x00) goto yy1651; + if (yych <= '[') goto yy1650; + goto yy1648; } } @@ -11026,28 +13925,28 @@ int _scan_spacechars(const unsigned char *p) }; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1174; - if (yych <= '\t') goto yy1171; - goto yy1172; + if (yych <= 0x08) goto yy1659; + if (yych <= '\t') goto yy1656; + goto yy1657; } else { - if (yych <= '\r') goto yy1171; - if (yych == ' ') goto yy1171; - goto yy1174; + if (yych <= '\r') goto yy1656; + if (yych == ' ') goto yy1656; + goto yy1659; } -yy1170: +yy1655: { return (p - start); } -yy1171: +yy1656: yych = *++p; - goto yy1173; -yy1172: + goto yy1658; +yy1657: ++p; yych = *p; -yy1173: +yy1658: if (yybm[0+yych] & 128) { - goto yy1172; + goto yy1657; } - goto yy1170; -yy1174: + goto yy1655; +yy1659: ++p; { return 0; } } @@ -11097,68 +13996,68 @@ int _scan_atx_header_start(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *p; - if (yych == '\n') goto yy1178; - if (yych == '#') goto yy1179; - goto yy1180; -yy1178: + if (yych == '\n') goto yy1663; + if (yych == '#') goto yy1664; + goto yy1665; +yy1663: { return 0; } -yy1179: +yy1664: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1183; + goto yy1668; } - if (yych == '\n') goto yy1181; - if (yych == '#') goto yy1185; - goto yy1178; -yy1180: + if (yych == '\n') goto yy1666; + if (yych == '#') goto yy1670; + goto yy1663; +yy1665: yych = *++p; - goto yy1178; -yy1181: + goto yy1663; +yy1666: ++p; -yy1182: +yy1667: { return (p - start); } -yy1183: +yy1668: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1183; + goto yy1668; } - goto yy1182; -yy1185: + goto yy1667; +yy1670: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1183; + goto yy1668; } - if (yych == '\n') goto yy1181; - if (yych == '#') goto yy1187; -yy1186: + if (yych == '\n') goto yy1666; + if (yych == '#') goto yy1672; +yy1671: p = marker; - goto yy1178; -yy1187: + goto yy1663; +yy1672: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1183; + goto yy1668; } - if (yych == '\n') goto yy1181; - if (yych != '#') goto yy1186; + if (yych == '\n') goto yy1666; + if (yych != '#') goto yy1671; yych = *++p; if (yybm[0+yych] & 128) { - goto yy1183; + goto yy1668; } - if (yych == '\n') goto yy1181; - if (yych != '#') goto yy1186; + if (yych == '\n') goto yy1666; + if (yych != '#') goto yy1671; yych = *++p; if (yybm[0+yych] & 128) { - goto yy1183; + goto yy1668; } - if (yych == '\n') goto yy1181; - if (yych != '#') goto yy1186; + if (yych == '\n') goto yy1666; + if (yych != '#') goto yy1671; ++p; if (yybm[0+(yych = *p)] & 128) { - goto yy1183; + goto yy1668; } - if (yych == '\n') goto yy1181; - goto yy1186; + if (yych == '\n') goto yy1666; + goto yy1671; } } @@ -11207,73 +14106,73 @@ int _scan_setext_header_line(const unsigned char *p) }; yych = *p; if (yych <= ',') { - if (yych != '\n') goto yy1196; + if (yych != '\n') goto yy1681; } else { - if (yych <= '-') goto yy1195; - if (yych == '=') goto yy1194; - goto yy1196; + if (yych <= '-') goto yy1680; + if (yych == '=') goto yy1679; + goto yy1681; } -yy1193: +yy1678: { return 0; } -yy1194: +yy1679: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1208; + goto yy1693; } - if (yych == '\n') goto yy1206; - if (yych == ' ') goto yy1204; - goto yy1193; -yy1195: + if (yych == '\n') goto yy1691; + if (yych == ' ') goto yy1689; + goto yy1678; +yy1680: yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1197; + goto yy1682; } - if (yych == '\n') goto yy1200; - if (yych == '-') goto yy1202; - goto yy1193; -yy1196: + if (yych == '\n') goto yy1685; + if (yych == '-') goto yy1687; + goto yy1678; +yy1681: yych = *++p; - goto yy1193; -yy1197: + goto yy1678; +yy1682: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1197; + goto yy1682; } - if (yych == '\n') goto yy1200; -yy1199: + if (yych == '\n') goto yy1685; +yy1684: p = marker; - goto yy1193; -yy1200: + goto yy1678; +yy1685: ++p; { return 2; } -yy1202: +yy1687: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1197; + goto yy1682; } - if (yych == '\n') goto yy1200; - if (yych == '-') goto yy1202; - goto yy1199; -yy1204: + if (yych == '\n') goto yy1685; + if (yych == '-') goto yy1687; + goto yy1684; +yy1689: ++p; yych = *p; - if (yych == '\n') goto yy1206; - if (yych == ' ') goto yy1204; - goto yy1199; -yy1206: + if (yych == '\n') goto yy1691; + if (yych == ' ') goto yy1689; + goto yy1684; +yy1691: ++p; { return 1; } -yy1208: +yy1693: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1208; + goto yy1693; } - if (yych == '\n') goto yy1206; - if (yych == ' ') goto yy1204; - goto yy1199; + if (yych == '\n') goto yy1691; + if (yych == ' ') goto yy1689; + goto yy1684; } } @@ -11324,139 +14223,139 @@ int _scan_hrule(const unsigned char *p) }; yych = *p; if (yych <= '*') { - if (yych == '\n') goto yy1212; - if (yych <= ')') goto yy1216; - goto yy1213; + if (yych == '\n') goto yy1697; + if (yych <= ')') goto yy1701; + goto yy1698; } else { if (yych <= '-') { - if (yych <= ',') goto yy1216; - goto yy1215; + if (yych <= ',') goto yy1701; + goto yy1700; } else { - if (yych == '_') goto yy1214; - goto yy1216; + if (yych == '_') goto yy1699; + goto yy1701; } } -yy1212: +yy1697: { return 0; } -yy1213: +yy1698: yych = *(marker = ++p); - if (yych == ' ') goto yy1238; - if (yych == '*') goto yy1240; - goto yy1212; -yy1214: + if (yych == ' ') goto yy1723; + if (yych == '*') goto yy1725; + goto yy1697; +yy1699: yych = *(marker = ++p); - if (yych == ' ') goto yy1228; - if (yych == '_') goto yy1230; - goto yy1212; -yy1215: + if (yych == ' ') goto yy1713; + if (yych == '_') goto yy1715; + goto yy1697; +yy1700: yych = *(marker = ++p); if (yybm[0+yych] & 8) { - goto yy1217; + goto yy1702; } - if (yych == '-') goto yy1220; - goto yy1212; -yy1216: + if (yych == '-') goto yy1705; + goto yy1697; +yy1701: yych = *++p; - goto yy1212; -yy1217: + goto yy1697; +yy1702: ++p; yych = *p; if (yybm[0+yych] & 8) { - goto yy1217; + goto yy1702; } - if (yych == '-') goto yy1220; -yy1219: + if (yych == '-') goto yy1705; +yy1704: p = marker; - goto yy1212; -yy1220: + goto yy1697; +yy1705: ++p; yych = *p; - if (yych == ' ') goto yy1220; - if (yych != '-') goto yy1219; -yy1222: + if (yych == ' ') goto yy1705; + if (yych != '-') goto yy1704; +yy1707: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1222; + goto yy1707; } - if (yych <= 0x08) goto yy1219; - if (yych <= '\t') goto yy1224; - if (yych <= '\n') goto yy1226; - goto yy1219; -yy1224: + if (yych <= 0x08) goto yy1704; + if (yych <= '\t') goto yy1709; + if (yych <= '\n') goto yy1711; + goto yy1704; +yy1709: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1224; + goto yy1709; } - if (yych != '\n') goto yy1219; -yy1226: + if (yych != '\n') goto yy1704; +yy1711: ++p; { return (p - start); } -yy1228: +yy1713: ++p; yych = *p; - if (yych == ' ') goto yy1228; - if (yych != '_') goto yy1219; -yy1230: + if (yych == ' ') goto yy1713; + if (yych != '_') goto yy1704; +yy1715: ++p; yych = *p; - if (yych == ' ') goto yy1230; - if (yych != '_') goto yy1219; -yy1232: + if (yych == ' ') goto yy1715; + if (yych != '_') goto yy1704; +yy1717: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1232; + goto yy1717; } - if (yych <= 0x08) goto yy1219; - if (yych <= '\t') goto yy1234; - if (yych <= '\n') goto yy1236; - goto yy1219; -yy1234: + if (yych <= 0x08) goto yy1704; + if (yych <= '\t') goto yy1719; + if (yych <= '\n') goto yy1721; + goto yy1704; +yy1719: ++p; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1219; - if (yych <= '\t') goto yy1234; + if (yych <= 0x08) goto yy1704; + if (yych <= '\t') goto yy1719; } else { - if (yych == ' ') goto yy1234; - goto yy1219; + if (yych == ' ') goto yy1719; + goto yy1704; } -yy1236: +yy1721: ++p; { return (p - start); } -yy1238: +yy1723: ++p; yych = *p; - if (yych == ' ') goto yy1238; - if (yych != '*') goto yy1219; -yy1240: + if (yych == ' ') goto yy1723; + if (yych != '*') goto yy1704; +yy1725: ++p; yych = *p; - if (yych == ' ') goto yy1240; - if (yych != '*') goto yy1219; -yy1242: + if (yych == ' ') goto yy1725; + if (yych != '*') goto yy1704; +yy1727: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1242; + goto yy1727; } - if (yych <= 0x08) goto yy1219; - if (yych <= '\t') goto yy1244; - if (yych <= '\n') goto yy1246; - goto yy1219; -yy1244: + if (yych <= 0x08) goto yy1704; + if (yych <= '\t') goto yy1729; + if (yych <= '\n') goto yy1731; + goto yy1704; +yy1729: ++p; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1219; - if (yych <= '\t') goto yy1244; + if (yych <= 0x08) goto yy1704; + if (yych <= '\t') goto yy1729; } else { - if (yych == ' ') goto yy1244; - goto yy1219; + if (yych == ' ') goto yy1729; + goto yy1704; } -yy1246: +yy1731: ++p; { return (p - start); } } @@ -11507,80 +14406,80 @@ int _scan_open_code_fence(const unsigned char *p) }; yych = *p; if (yych <= '_') { - if (yych != '\n') goto yy1253; + if (yych != '\n') goto yy1738; } else { - if (yych <= '`') goto yy1251; - if (yych == '~') goto yy1252; - goto yy1253; + if (yych <= '`') goto yy1736; + if (yych == '~') goto yy1737; + goto yy1738; } -yy1250: +yy1735: { return 0; } -yy1251: +yy1736: yych = *(marker = ++p); - if (yych == '`') goto yy1262; - goto yy1250; -yy1252: + if (yych == '`') goto yy1747; + goto yy1735; +yy1737: yych = *(marker = ++p); - if (yych == '~') goto yy1254; - goto yy1250; -yy1253: + if (yych == '~') goto yy1739; + goto yy1735; +yy1738: yych = *++p; - goto yy1250; -yy1254: + goto yy1735; +yy1739: yych = *++p; if (yybm[0+yych] & 16) { - goto yy1256; + goto yy1741; } -yy1255: +yy1740: p = marker; - goto yy1250; -yy1256: + goto yy1735; +yy1741: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1258; + goto yy1743; } - if (yych <= 0x00) goto yy1255; - if (yych <= '}') goto yy1260; - goto yy1256; -yy1258: + if (yych <= 0x00) goto yy1740; + if (yych <= '}') goto yy1745; + goto yy1741; +yy1743: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1258; + goto yy1743; } - if (yych <= 0x00) goto yy1255; - if (yych >= '~') goto yy1255; -yy1260: + if (yych <= 0x00) goto yy1740; + if (yych >= '~') goto yy1740; +yy1745: ++p; p = marker; { return (p - start); } -yy1262: +yy1747: yych = *++p; if (yybm[0+yych] & 64) { - goto yy1263; + goto yy1748; } - goto yy1255; -yy1263: + goto yy1740; +yy1748: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1265; + goto yy1750; } - if (yych <= 0x00) goto yy1255; - if (yych <= '_') goto yy1267; - goto yy1263; -yy1265: + if (yych <= 0x00) goto yy1740; + if (yych <= '_') goto yy1752; + goto yy1748; +yy1750: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1265; + goto yy1750; } - if (yych <= 0x00) goto yy1255; - if (yych >= '`') goto yy1255; -yy1267: + if (yych <= 0x00) goto yy1740; + if (yych >= '`') goto yy1740; +yy1752: ++p; p = marker; { return (p - start); } @@ -11632,84 +14531,84 @@ int _scan_close_code_fence(const unsigned char *p) }; yych = *p; if (yych <= '_') { - if (yych != '\n') goto yy1274; + if (yych != '\n') goto yy1759; } else { - if (yych <= '`') goto yy1272; - if (yych == '~') goto yy1273; - goto yy1274; + if (yych <= '`') goto yy1757; + if (yych == '~') goto yy1758; + goto yy1759; } -yy1271: +yy1756: { return 0; } -yy1272: +yy1757: yych = *(marker = ++p); - if (yych == '`') goto yy1283; - goto yy1271; -yy1273: + if (yych == '`') goto yy1768; + goto yy1756; +yy1758: yych = *(marker = ++p); - if (yych == '~') goto yy1275; - goto yy1271; -yy1274: + if (yych == '~') goto yy1760; + goto yy1756; +yy1759: yych = *++p; - goto yy1271; -yy1275: + goto yy1756; +yy1760: yych = *++p; if (yybm[0+yych] & 32) { - goto yy1277; + goto yy1762; } -yy1276: +yy1761: p = marker; - goto yy1271; -yy1277: + goto yy1756; +yy1762: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1279; + goto yy1764; } - if (yych == '\n') goto yy1281; - if (yych == '~') goto yy1277; - goto yy1276; -yy1279: + if (yych == '\n') goto yy1766; + if (yych == '~') goto yy1762; + goto yy1761; +yy1764: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1279; + goto yy1764; } - if (yych != '\n') goto yy1276; -yy1281: + if (yych != '\n') goto yy1761; +yy1766: ++p; p = marker; { return (p - start); } -yy1283: +yy1768: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1284; + goto yy1769; } - goto yy1276; -yy1284: + goto yy1761; +yy1769: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1284; + goto yy1769; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1276; - if (yych >= '\n') goto yy1288; + if (yych <= 0x08) goto yy1761; + if (yych >= '\n') goto yy1773; } else { - if (yych != ' ') goto yy1276; + if (yych != ' ') goto yy1761; } -yy1286: +yy1771: ++p; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1276; - if (yych <= '\t') goto yy1286; + if (yych <= 0x08) goto yy1761; + if (yych <= '\t') goto yy1771; } else { - if (yych == ' ') goto yy1286; - goto yy1276; + if (yych == ' ') goto yy1771; + goto yy1761; } -yy1288: +yy1773: ++p; p = marker; { return (p - start); } @@ -11727,664 +14626,664 @@ int _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; - if (yych == '\n') goto yy1292; - if (yych == '&') goto yy1293; - goto yy1294; -yy1292: + if (yych == '\n') goto yy1777; + if (yych == '&') goto yy1778; + goto yy1779; +yy1777: { return 0; } -yy1293: +yy1778: yych = *(marker = ++p); if (yych <= '@') { - if (yych == '#') goto yy1295; - goto yy1292; + if (yych == '#') goto yy1780; + goto yy1777; } else { - if (yych <= 'Z') goto yy1297; - if (yych <= '`') goto yy1292; - if (yych <= 'z') goto yy1297; - goto yy1292; + if (yych <= 'Z') goto yy1782; + if (yych <= '`') goto yy1777; + if (yych <= 'z') goto yy1782; + goto yy1777; } -yy1294: +yy1779: yych = *++p; - goto yy1292; -yy1295: + goto yy1777; +yy1780: yych = *++p; if (yych <= 'W') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1332; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1817; } else { - if (yych <= 'X') goto yy1331; - if (yych == 'x') goto yy1331; + if (yych <= 'X') goto yy1816; + if (yych == 'x') goto yy1816; } -yy1296: +yy1781: p = marker; - goto yy1292; -yy1297: + goto yy1777; +yy1782: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1296; - if (yych >= ':') goto yy1296; + if (yych <= '/') goto yy1781; + if (yych >= ':') goto yy1781; } else { - if (yych <= 'Z') goto yy1298; - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= 'Z') goto yy1783; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } -yy1298: +yy1783: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1301; - if (yych <= ':') goto yy1296; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1786; + if (yych <= ':') goto yy1781; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; - goto yy1301; + if (yych <= '@') goto yy1781; + goto yy1786; } else { - if (yych <= '`') goto yy1296; - if (yych <= 'z') goto yy1301; - goto yy1296; + if (yych <= '`') goto yy1781; + if (yych <= 'z') goto yy1786; + goto yy1781; } } -yy1299: +yy1784: ++p; { return (p - start); } -yy1301: +yy1786: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1302; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1787; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1302: +yy1787: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1303; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1788; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1303: +yy1788: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1304; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1789; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1304: +yy1789: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1305; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1790; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1305: +yy1790: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1306; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1791; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1306: +yy1791: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1307; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1792; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1307: +yy1792: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1308; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1793; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1308: +yy1793: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1309; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1794; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1309: +yy1794: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1310; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1795; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1310: +yy1795: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1311; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1796; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1311: +yy1796: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1312; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1797; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1312: +yy1797: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1313; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1798; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1313: +yy1798: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1314; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1799; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1314: +yy1799: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1315; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1800; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1315: +yy1800: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1316; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1801; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1316: +yy1801: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1317; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1802; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1317: +yy1802: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1318; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1803; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1318: +yy1803: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1319; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1804; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1319: +yy1804: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1320; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1805; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1320: +yy1805: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1321; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1806; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1321: +yy1806: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1322; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1807; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1322: +yy1807: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1323; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1808; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1323: +yy1808: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1324; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1809; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1324: +yy1809: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1325; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1810; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1325: +yy1810: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1326; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1811; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1326: +yy1811: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1327; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1812; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1327: +yy1812: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1328; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1813; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1328: +yy1813: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1329; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1814; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1329: +yy1814: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1330; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1815; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= '{') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= '{') goto yy1781; } } -yy1330: +yy1815: yych = *++p; - if (yych == ';') goto yy1299; - goto yy1296; -yy1331: + if (yych == ';') goto yy1784; + goto yy1781; +yy1816: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1339; - goto yy1296; - } else { - if (yych <= 'F') goto yy1339; - if (yych <= '`') goto yy1296; - if (yych <= 'f') goto yy1339; - goto yy1296; - } -yy1332: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1333; - if (yych == ';') goto yy1299; - goto yy1296; -yy1333: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1334; - if (yych == ';') goto yy1299; - goto yy1296; -yy1334: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1335; - if (yych == ';') goto yy1299; - goto yy1296; -yy1335: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1336; - if (yych == ';') goto yy1299; - goto yy1296; -yy1336: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1337; - if (yych == ';') goto yy1299; - goto yy1296; -yy1337: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1338; - if (yych == ';') goto yy1299; - goto yy1296; -yy1338: - yych = *++p; - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1330; - if (yych == ';') goto yy1299; - goto yy1296; -yy1339: + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1824; + goto yy1781; + } else { + if (yych <= 'F') goto yy1824; + if (yych <= '`') goto yy1781; + if (yych <= 'f') goto yy1824; + goto yy1781; + } +yy1817: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1818; + if (yych == ';') goto yy1784; + goto yy1781; +yy1818: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1819; + if (yych == ';') goto yy1784; + goto yy1781; +yy1819: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1820; + if (yych == ';') goto yy1784; + goto yy1781; +yy1820: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1821; + if (yych == ';') goto yy1784; + goto yy1781; +yy1821: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1822; + if (yych == ';') goto yy1784; + goto yy1781; +yy1822: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1823; + if (yych == ';') goto yy1784; + goto yy1781; +yy1823: + yych = *++p; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1815; + if (yych == ';') goto yy1784; + goto yy1781; +yy1824: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1340; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1825; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= 'g') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= 'g') goto yy1781; } } -yy1340: +yy1825: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1341; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1826; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= 'g') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= 'g') goto yy1781; } } -yy1341: +yy1826: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1342; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1827; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= 'g') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= 'g') goto yy1781; } } -yy1342: +yy1827: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1343; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1828; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= 'g') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= 'g') goto yy1781; } } -yy1343: +yy1828: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1344; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1829; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= 'g') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= 'g') goto yy1781; } } -yy1344: +yy1829: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1345; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1830; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; + if (yych <= '@') goto yy1781; } else { - if (yych <= '`') goto yy1296; - if (yych >= 'g') goto yy1296; + if (yych <= '`') goto yy1781; + if (yych >= 'g') goto yy1781; } } -yy1345: +yy1830: ++p; if ((yych = *p) <= ';') { - if (yych <= '/') goto yy1296; - if (yych <= '9') goto yy1330; - if (yych <= ':') goto yy1296; - goto yy1299; + if (yych <= '/') goto yy1781; + if (yych <= '9') goto yy1815; + if (yych <= ':') goto yy1781; + goto yy1784; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1296; - goto yy1330; + if (yych <= '@') goto yy1781; + goto yy1815; } else { - if (yych <= '`') goto yy1296; - if (yych <= 'f') goto yy1330; - goto yy1296; + if (yych <= '`') goto yy1781; + if (yych <= 'f') goto yy1815; + goto yy1781; } } } diff --git a/src/scanners.h b/src/scanners.h index f360505bae..1353f3be0a 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -6,6 +6,7 @@ extern "C" { #endif int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset); +int _scan_scheme(const unsigned char *p); int _scan_autolink_uri(const unsigned char *p); int _scan_autolink_email(const unsigned char *p); int _scan_html_tag(const unsigned char *p); @@ -20,6 +21,7 @@ int _scan_open_code_fence(const unsigned char *p); int _scan_close_code_fence(const unsigned char *p); int _scan_entity(const unsigned char *p); +#define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n) #define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n) #define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n) #define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n) diff --git a/src/scanners.re b/src/scanners.re index c6ebae3599..31cdb4f67c 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -69,6 +69,17 @@ int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) scheme = 'coap'|'doi'|'javascript'|'aaa'|'aaas'|'about'|'acap'|'cap'|'cid'|'crid'|'data'|'dav'|'dict'|'dns'|'file'|'ftp'|'geo'|'go'|'gopher'|'h323'|'http'|'https'|'iax'|'icap'|'im'|'imap'|'info'|'ipp'|'iris'|'iris.beep'|'iris.xpc'|'iris.xpcs'|'iris.lwz'|'ldap'|'mailto'|'mid'|'msrp'|'msrps'|'mtqp'|'mupdate'|'news'|'nfs'|'ni'|'nih'|'nntp'|'opaquelocktoken'|'pop'|'pres'|'rtsp'|'service'|'session'|'shttp'|'sieve'|'sip'|'sips'|'sms'|'snmp'|'soap.beep'|'soap.beeps'|'tag'|'tel'|'telnet'|'tftp'|'thismessage'|'tn3270'|'tip'|'tv'|'urn'|'vemmi'|'ws'|'wss'|'xcon'|'xcon-userid'|'xmlrpc.beep'|'xmlrpc.beeps'|'xmpp'|'z39.50r'|'z39.50s'|'adiumxtra'|'afp'|'afs'|'aim'|'apt'|'attachment'|'aw'|'beshare'|'bitcoin'|'bolo'|'callto'|'chrome'|'chrome-extension'|'com-eventbrite-attendee'|'content'|'cvs'|'dlna-playsingle'|'dlna-playcontainer'|'dtn'|'dvb'|'ed2k'|'facetime'|'feed'|'finger'|'fish'|'gg'|'git'|'gizmoproject'|'gtalk'|'hcp'|'icon'|'ipn'|'irc'|'irc6'|'ircs'|'itms'|'jar'|'jms'|'keyparc'|'lastfm'|'ldaps'|'magnet'|'maps'|'market'|'message'|'mms'|'ms-help'|'msnim'|'mumble'|'mvn'|'notes'|'oid'|'palm'|'paparazzi'|'platform'|'proxy'|'psyc'|'query'|'res'|'resource'|'rmi'|'rsync'|'rtmp'|'secondlife'|'sftp'|'sgn'|'skype'|'smb'|'soldat'|'spotify'|'ssh'|'steam'|'svn'|'teamspeak'|'things'|'udp'|'unreal'|'ut2004'|'ventrilo'|'view-source'|'webcal'|'wtai'|'wyciwyg'|'xfire'|'xri'|'ymsgr'; */ +// Try to match a scheme including colon. +int _scan_scheme(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; +/*!re2c + scheme [:] { return (p - start); } + .? { return 0; } +*/ +} + // Try to match URI autolink after first <, returning number of chars matched. int _scan_autolink_uri(const unsigned char *p) { -- cgit 0.0.5-2-1-g0f52 From 8a04d10c5570231baa4326817d7f10f8f1f04a57 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 22:14:12 -0700 Subject: commonmark renderer - render links as autolinks when appropriate. --- src/commonmark.c | 91 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 21 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 9f093c3b72..dcf2e63021 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -9,6 +9,7 @@ #include "node.h" #include "buffer.h" #include "utf8.h" +#include "scanners.h" // Functions to convert cmark_nodes to commonmark strings. @@ -43,8 +44,7 @@ typedef enum { LITERAL, NORMAL, TITLE, - URL, - BRACED_URL + URL } escaping; static inline bool @@ -69,8 +69,6 @@ needs_escaping(escaping escape, } else if (escape == URL) { return (c == '`' || c == '<' || c == '>' || isspace(c) || c == '\\' || c == ')' || c == '('); - } else if (escape == BRACED_URL) { - return (c == '`' || c == '<' || c == '>' || c == '\\'); } else { return false; } @@ -233,6 +231,33 @@ shortest_unused_backtick_sequence(cmark_chunk *code) return i; } +static bool +is_autolink(cmark_node *node) +{ + const char *title; + const char *url; + + if (node->type != CMARK_NODE_LINK) { + return false; + } + + url = cmark_node_get_url(node); + if (url == NULL || + _scan_scheme((unsigned char *)url) == 0) { + return false; + } + + title = cmark_node_get_title(node); + // if it has a title, we can't treat it as an autolink: + if (title != NULL && strnlen(title, 1) > 0) { + return false; + } + cmark_consolidate_text_nodes(node); + return (strncmp(url, + (char*)node->as.literal.data, + node->as.literal.len) == 0); +} + // if node is a block node, returns node. // otherwise returns first block-level node that is an ancestor of node. static cmark_node* @@ -326,7 +351,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, list_delim == CMARK_PAREN_DELIM ? ")" : ".", list_number < 10 ? " " : " "); - marker_width = strlen(listmarker); + marker_width = strnlen(listmarker, 63); } if (entering) { if (cmark_node_get_list_type(node->parent) == @@ -367,7 +392,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // use indented form if no info, and code doesn't // begin or end with a blank line, and code isn't // first thing in a list item - if ((info == NULL || strlen(info) == 0) && + if ((info == NULL || strnlen(info, 1) == 0) && (code->len > 2 && !isspace(code->data[0]) && !(isspace(code->data[code->len - 1]) && @@ -483,21 +508,40 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_LINK: - if (entering) { - lit(state, "[", false); + if (is_autolink(node)) { + if (entering) { + lit(state, "<", false); + if (strncmp(cmark_node_get_url(node), + "mailto:", 7) == 0) { + lit(state, + (char *)cmark_node_get_url(node) + 7, + false); + } else { + lit(state, + (char *)cmark_node_get_url(node), + false); + } + lit(state, ">", false); + // return signal to skip contents of node... + return 0; + } } else { - // TODO - emit autolink when url matches link text - // TODO - backslash-escape " and \ inside url, title - // for both links and images - lit(state, "](", false); - out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); - title = cmark_node_get_title(node); - if (title && strlen(title) > 0) { - lit(state, " \"", true); - out(state, cmark_chunk_literal(title), false, TITLE); - lit(state, "\"", false); + if (entering) { + lit(state, "[", false); + } else { + lit(state, "](", false); + out(state, + cmark_chunk_literal(cmark_node_get_url(node)), + false, URL); + title = cmark_node_get_title(node); + if (title && strnlen(title, 1) > 0) { + lit(state, " \"", true); + out(state, cmark_chunk_literal(title), + false, TITLE); + lit(state, "\"", false); + } + lit(state, ")", false); } - lit(state, ")", false); } break; @@ -508,7 +552,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "](", false); out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); title = cmark_node_get_title(node); - if (title && strlen(title) > 0) { + if (title && strnlen(title, 1) > 0) { lit(state, " \"", true); out(state, cmark_chunk_literal(title), false, TITLE); lit(state, "\"", false); @@ -542,7 +586,12 @@ char *cmark_render_commonmark(cmark_node *root, int options, int width) while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state); + if (!S_render_node(cur, ev_type, &state)) { + // a false value causes us to skip processing + // the node's contents. this is used for + // autolinks. + cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT); + } } result = (char *)cmark_strbuf_detach(&commonmark); -- cgit 0.0.5-2-1-g0f52 From 3361e66c633f7b1625b067147a20e6eda48da403 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 23:03:52 -0700 Subject: Updated cmark path in roundtrip.sh. --- test/roundtrip.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/roundtrip.sh b/test/roundtrip.sh index a7bbbf6ea1..6d3b9d5baf 100755 --- a/test/roundtrip.sh +++ b/test/roundtrip.sh @@ -1,2 +1,2 @@ #!/bin/sh -./cmark -t commonmark | ./cmark +./src/build/cmark -t commonmark | ./src/build/cmark -- cgit 0.0.5-2-1-g0f52 From 2efddb2c78bc161e71b7e4f609b8377b05c57c04 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 23:09:59 -0700 Subject: commonmark - use strlen not strnlen for portability. strlen should be safe here, as we use it on strings generated by cmark_chunk_to_cstr and these should be null terminated. --- src/commonmark.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index dcf2e63021..23faa7c6f8 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -249,7 +249,7 @@ is_autolink(cmark_node *node) title = cmark_node_get_title(node); // if it has a title, we can't treat it as an autolink: - if (title != NULL && strnlen(title, 1) > 0) { + if (title != NULL && strlen(title) > 0) { return false; } cmark_consolidate_text_nodes(node); @@ -351,7 +351,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, list_delim == CMARK_PAREN_DELIM ? ")" : ".", list_number < 10 ? " " : " "); - marker_width = strnlen(listmarker, 63); + marker_width = strlen(listmarker); } if (entering) { if (cmark_node_get_list_type(node->parent) == @@ -392,7 +392,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // use indented form if no info, and code doesn't // begin or end with a blank line, and code isn't // first thing in a list item - if ((info == NULL || strnlen(info, 1) == 0) && + if ((info == NULL || strlen(info) == 0) && (code->len > 2 && !isspace(code->data[0]) && !(isspace(code->data[code->len - 1]) && @@ -534,7 +534,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); title = cmark_node_get_title(node); - if (title && strnlen(title, 1) > 0) { + if (title && strlen(title) > 0) { lit(state, " \"", true); out(state, cmark_chunk_literal(title), false, TITLE); @@ -552,7 +552,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "](", false); out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); title = cmark_node_get_title(node); - if (title && strnlen(title, 1) > 0) { + if (title && strlen(title) > 0) { lit(state, " \"", true); out(state, cmark_chunk_literal(title), false, TITLE); lit(state, "\"", false); -- cgit 0.0.5-2-1-g0f52 From f40e09807bd01f83cba0c411b1a76462038c330d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 23:17:11 -0700 Subject: Fixed roundtrip.sh. --- test/roundtrip.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/roundtrip.sh b/test/roundtrip.sh index 6d3b9d5baf..1631f35d9a 100755 --- a/test/roundtrip.sh +++ b/test/roundtrip.sh @@ -1,2 +1,2 @@ #!/bin/sh -./src/build/cmark -t commonmark | ./src/build/cmark +./build/src/cmark -t commonmark | ./build/src/cmark -- cgit 0.0.5-2-1-g0f52 From 408f99794c2fa1f76c69278746b09fb37bedfa0e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 29 Mar 2015 23:22:03 -0700 Subject: Travis: only do roundtrip test on linux. We need python3, and we're testing the OSX install without python3. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c177482aee..8e76f06a17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,9 +20,9 @@ before_install: script: - make - make test - - make roundtrip_test - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] then + make roundtrip_test make leakcheck fi -- cgit 0.0.5-2-1-g0f52 From d8528f2d5c169a0e3b12fc6120dc958e56fa7f2d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 30 Mar 2015 12:54:54 -0700 Subject: Updated version to 0.18.2 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 375cc4ef30..1800db979b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 18) -set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION_PATCH 2) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) add_subdirectory(src) -- cgit 0.0.5-2-1-g0f52 From 1fe9432c865fee5442b42da4485b342cafe08b13 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 30 Mar 2015 12:54:59 -0700 Subject: Updated changelog. --- changelog.txt | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/changelog.txt b/changelog.txt index 7328c99937..c6cd50af87 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,37 @@ +[0.18.2] + + * Added commonmark renderer: `cmark_render_commonmark`. In addition + to options, this takes a `width` parameter. A value of 0 disables + wrapping; a positive value wraps the document to the specified + width. Note that width is automatically set to 0 if the + `CMARK_OPT_HARDBREAKS` option is set. + * The `cmark` executable now allows `-t commonmark` for output as + CommonMark. A `--width` option has been added to specify wrapping + width. + * Added `roundtrip_test` Makefile target. This runs all the spec + through the commonmark renderer, and then through the commonmark + parser, and compares normalized HTML to the test. All tests pass + with the current parser and renderer, giving us some confidence that + the commonmark renderer is sufficiently robust. Eventually this + should be pythonized and put in the cmake test routine. + * Removed an unnecessary check in `blocks.c`. By the time we check + for a list start, we've already checked for a horizontal rule, so + we don't need to repeat that check here. Thanks to Robin Stocker for + pointing out a similar redundancy in commonmark.js. + * Fixed bug in `cmark_strbuf_unescape` (`buffer.c`). The old function + gave incorrect results on input like `\\*`, since the next backslash + would be treated as escaping the `*` instead of being escaped itself. + * `scanners.re`: added `_scan_scheme`, `scan_scheme`, used in the + commonmark renderer. + * Check for `CMAKE_C_COMPILER` (not `CC_COMPILER`) when setting C flags. + * Update code examples in documentation, adding new parser option + argument, and using `CMARK_OPT_DEFAULT` (Nick Wellnhofer). + * Added options parameter to `cmark_markdown_to_html`. + * Removed obsolete reference to `CMARK_NODE_LINK_LABEL`. + * `make leakcheck` now checks all output formats. + * `test/cmark.py`: set default options for `markdown_to_html`. + * Warn about buggy re2c versions (Nick Wellnhofer). + [0.18.1] * Build static version of library in default build (#11). -- cgit 0.0.5-2-1-g0f52 From c5b4d5f3a7fa91cf97dfdf18710687823f8244e6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 30 Mar 2015 13:04:41 -0700 Subject: Updated man page. --- man/man1/cmark.1 | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 6635be513d..2e08b3812a 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -9,46 +9,43 @@ file* .SH "DESCRIPTION" \fBcmark\fR -acts as a pipe, reading from -\fRstdin\fR -or from the specified files and writing to -\fRstdout\fR. -It converts Markdown formatted plain text to HTML (or groff man or -an abstract representation of the AST), using the conventions -described in the CommonMark spec. -If multiple files are specified, the contents of the files are simply -concatenated before parsing. +converts Markdown formatted plain text to either HTML, groff man, +CommonMark XML, or CommonMark, using the conventions +described in the CommonMark spec. It reads input from \fIstdin\fR +or the specified files (concatenating their contents) and writes +output to \fIstdout\fR. .SH "OPTIONS" .TP 12n -\-\-to, \-t \f[I]FORMAT\f[] +.B \-\-to, \-t \f[I]FORMAT\f[] Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]xml\f[], \f[C]commonmark\f[]). .TP 12n -\-\-width \f[I]WIDTH\f[] +.B \-\-width \f[I]WIDTH\f[] Specify a column width to which to wrap the output. For no wrapping, use the value 0 (the default). This option currently only affects the commonmark renderer. .TP 12n -\-\-sourcepos +.B \-\-sourcepos Include source position attribute. .TP 12n -\-\-hardbreaks -Treat newlines as hard line breaks. +.B \-\-hardbreaks +Treat newlines as hard line breaks. If this option is specified, +hard wrapping is disabled, regardless of the value given with \-\-width. .TP 12n -\-\-normalize +.B \-\-normalize Consolidate adjacent text nodes. .TP 12n -\-\-smart +.B \-\-smart Use smart punctuation. Straight double and single quotes will be rendered as curly quotes, depending on their position. \f[C]\-\-\f[] will be rendered as an en-dash. \f[C]\-\-\-\f[] will be rendered as an em-dash. \f[C]...\f[] will be rendered as ellipses. .TP 12n -\-\-help +.B \-\-help Print usage information. .TP 12n -\-\-version +.B \-\-version Print version. .SH "AUTHORS" John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. -- cgit 0.0.5-2-1-g0f52 From ba5e6434e2ab94d617637ea21abf840f97ba6593 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 30 Mar 2015 13:07:56 -0700 Subject: Modified copyright message with --version. --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 9666747977..919160291c 100644 --- a/src/main.c +++ b/src/main.c @@ -82,7 +82,7 @@ int main(int argc, char *argv[]) for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { printf("cmark %s", CMARK_VERSION_STRING); - printf(" - CommonMark converter (c) 2014 John MacFarlane\n"); + printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n"); exit(0); } else if (strcmp(argv[i], "--sourcepos") == 0) { options |= CMARK_OPT_SOURCEPOS; -- cgit 0.0.5-2-1-g0f52 From b4ac6eb92cce438632e44de80ab81c83198b2360 Mon Sep 17 00:00:00 2001 From: Changjiang Yang Date: Mon, 30 Mar 2015 23:33:11 -0400 Subject: snprintf is not implemented in Visual Studio 2013 or earlier. Use _snprintf instead. --- src/commonmark.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index 23faa7c6f8..31fdcec413 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -11,6 +11,10 @@ #include "utf8.h" #include "scanners.h" +#if defined(_MSC_VER) && (_MSC_VER <=1800) +#define snprintf _snprintf +#endif + // Functions to convert cmark_nodes to commonmark strings. struct render_state { -- cgit 0.0.5-2-1-g0f52 From 87d66880803c9362f135d894652f6d0ed50b73bc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 30 Mar 2015 22:32:30 -0700 Subject: Fixed memory issue. This fixes valgrind "invalid read of size 1" on input `[link](<>)`. --- src/inlines.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index e2641a75d3..3e298dee20 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -636,7 +636,7 @@ unsigned char *cmark_clean_url(cmark_chunk *url) } cmark_strbuf_unescape(&buf); - return cmark_strbuf_detach(&buf); + return buf.size == 0 ? NULL : cmark_strbuf_detach(&buf); } unsigned char *cmark_clean_title(cmark_chunk *title) @@ -660,7 +660,7 @@ unsigned char *cmark_clean_title(cmark_chunk *title) } cmark_strbuf_unescape(&buf); - return cmark_strbuf_detach(&buf); + return buf.size == 0 ? NULL : cmark_strbuf_detach(&buf); } // Parse an autolink or HTML tag. -- cgit 0.0.5-2-1-g0f52 From d468f85540778735e09fa4e6e7c5a14229f1a9f3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 30 Mar 2015 22:39:36 -0700 Subject: Use strbuf_printf instead of snprintf. snprintf is not available on some platforms. --- src/commonmark.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 31fdcec413..bef92f6228 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -11,10 +11,6 @@ #include "utf8.h" #include "scanners.h" -#if defined(_MSC_VER) && (_MSC_VER <=1800) -#define snprintf _snprintf -#endif - // Functions to convert cmark_nodes to commonmark strings. struct render_state { @@ -288,7 +284,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info; const char *title; - char listmarker[64]; + cmark_strbuf listmarker = GH_BUF_INIT; char *emph_delim; int marker_width; @@ -351,11 +347,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // we ensure a width of at least 4 so // we get nice transition from single digits // to double - snprintf(listmarker, 63, "%d%s%s", list_number, - list_delim == CMARK_PAREN_DELIM ? - ")" : ".", - list_number < 10 ? " " : " "); - marker_width = strlen(listmarker); + cmark_strbuf_printf(&listmarker, + "%d%s%s", list_number, + list_delim == CMARK_PAREN_DELIM ? + ")" : ".", + list_number < 10 ? " " : " "); + marker_width = listmarker.size; } if (entering) { if (cmark_node_get_list_type(node->parent) == @@ -363,7 +360,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "* ", false); cmark_strbuf_puts(state->prefix, " "); } else { - lit(state, listmarker, false); + lit(state, (char *)listmarker.ptr, false); for (i=marker_width; i--;) { cmark_strbuf_putc(state->prefix, ' '); } @@ -374,6 +371,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, marker_width); cr(state); } + cmark_strbuf_free(&listmarker); break; case CMARK_NODE_HEADER: -- cgit 0.0.5-2-1-g0f52 From c792965117aadc30f651b8eae29126ead573bb6f Mon Sep 17 00:00:00 2001 From: Changjiang Yang Date: Tue, 31 Mar 2015 18:29:46 -0400 Subject: Install compiler-provided system runtime libraries. --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 14ed306ba3..af38691566 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -109,6 +109,7 @@ if (MSVC) APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO) endif(MSVC) +include (InstallRequiredSystemLibraries) install(TARGETS ${PROGRAM} ${LIBRARY} RUNTIME DESTINATION bin LIBRARY DESTINATION lib -- cgit 0.0.5-2-1-g0f52 From 130b87d0b0aa0979c3f8bfdb9ff97be7051da370 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 1 Apr 2015 16:50:42 +0200 Subject: Include patch level in soname Minor version is tied to spec version, so this allows to break the ABI between spec releases. --- src/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index af38691566..06c13e0b8d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -82,10 +82,10 @@ endif () add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES}) add_library(${STATICLIBRARY} STATIC ${LIBRARY_SOURCES}) -# Include minor version in soname as long as major version is 0. +# Include minor version and patch level in soname for now. set_target_properties(${LIBRARY} PROPERTIES OUTPUT_NAME "cmark" - SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} VERSION ${PROJECT_VERSION}) if (MSVC) -- cgit 0.0.5-2-1-g0f52 From 9988c150959c56cee045ea3f7eb2492d34016c52 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 1 Apr 2015 09:25:47 -0700 Subject: Updated changelog. --- changelog.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/changelog.txt b/changelog.txt index c6cd50af87..2ac61d65b0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,13 @@ +[0.18.3] + + * Include patch level in soname (Nick Wellnhofer). Minor version is + tied to spec version, so this allows breaking the ABI between spec + releases. + * Install compiler-provided system runtime libraries (Changjiang Yang). + * Use `strbuf_printf` instead of `snprintf`. `snprintf` is not + available on some platforms (Visual Studio 2013 and earlier). + * Fixed memory access bug: "invalid read of size 1" on input `[link](<>)`. + [0.18.2] * Added commonmark renderer: `cmark_render_commonmark`. In addition -- cgit 0.0.5-2-1-g0f52 From 0e5a0584cedb329fc7eca1966fe95bd2f4593e7e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 1 Apr 2015 09:26:04 -0700 Subject: Bump version to 0.18.3. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1800db979b..84a219149d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 18) -set(PROJECT_VERSION_PATCH 2) +set(PROJECT_VERSION_PATCH 3) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) add_subdirectory(src) -- cgit 0.0.5-2-1-g0f52 From 5a3241c1cec67bbdee20c18b95c5fc0695df5edf Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Fri, 20 Mar 2015 20:30:20 -0400 Subject: Support for CRLF and CR line endings. --- src/blocks.c | 95 +++++++++++---- src/scanners.c | 360 +++++++++++++++++++++++++++++++++++++------------------- src/scanners.re | 26 ++-- 3 files changed, 321 insertions(+), 160 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index a15f819ea7..0222c0f218 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -89,6 +89,10 @@ static bool is_blank(cmark_strbuf *s, int offset) { while (offset < s->size) { switch (s->ptr[offset]) { + case '\r': + if (s->ptr[offset + 1] == '\n') + offset++; + return true; case '\n': return true; case ' ': @@ -126,9 +130,10 @@ static void add_line(cmark_node* node, cmark_chunk *ch, int offset) static void remove_trailing_blank_lines(cmark_strbuf *ln) { int i; + unsigned char c; for (i = ln->size - 1; i >= 0; --i) { - unsigned char c = ln->ptr[i]; + c = ln->ptr[i]; if (c != ' ' && c != '\t' && c != '\r' && c != '\n') break; @@ -139,9 +144,20 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) return; } - i = cmark_strbuf_strchr(ln, '\n', i); - if (i >= 0) + + for(i = 0; i < ln->size; ++i) { + c = ln->ptr[i]; + + if (c != '\r' && c != '\n') + continue; + + // Don't cut a CRLF in half + if (c == '\r' && i+1 < ln->size && ln->ptr[i+1] == '\n') + ++i; + cmark_strbuf_truncate(ln, i); + break; + } } // Check to see if a node ends with a blank line, descending @@ -185,7 +201,6 @@ static int break_out_of_lists(cmark_parser *parser, cmark_node ** bptr) static cmark_node* finalize(cmark_parser *parser, cmark_node* b) { - int firstlinelen; int pos; cmark_node* item; cmark_node* subitem; @@ -204,9 +219,11 @@ finalize(cmark_parser *parser, cmark_node* b) (b->type == NODE_CODE_BLOCK && b->as.code.fenced) || (b->type == NODE_HEADER && b->as.header.setext)) { b->end_line = parser->line_number; - b->end_column = parser->curline->size - - (parser->curline->ptr[parser->curline->size - 1] == '\n' ? - 1 : 0); + b->end_column = parser->curline->size; + if (b->end_column && parser->curline->ptr[b->end_column-1] == '\n') + b->end_column -= 1; + if (b->end_column && parser->curline->ptr[b->end_column-1] == '\r') + b->end_column -= 1; } else { b->end_line = parser->line_number - 1; b->end_column = parser->last_line_length; @@ -232,19 +249,28 @@ finalize(cmark_parser *parser, cmark_node* b) } else { // first line of contents becomes info - firstlinelen = cmark_strbuf_strchr(&b->string_content, '\n', 0); + for (pos = 0; pos < b->string_content.size; ++pos) { + if (b->string_content.ptr[pos] == '\r' || + b->string_content.ptr[pos] == '\n') + break; + } + assert(pos < b->string_content.size); cmark_strbuf tmp = GH_BUF_INIT; houdini_unescape_html_f( &tmp, b->string_content.ptr, - firstlinelen + pos ); cmark_strbuf_trim(&tmp); cmark_strbuf_unescape(&tmp); b->as.code.info = cmark_chunk_buf_detach(&tmp); - cmark_strbuf_drop(&b->string_content, firstlinelen + 1); + if (b->string_content.ptr[pos] == '\r') + pos += 1; + if (b->string_content.ptr[pos] == '\n') + pos += 1; + cmark_strbuf_drop(&b->string_content, pos); } b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); break; @@ -467,13 +493,22 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, const unsigned char *end = buffer + len; while (buffer < end) { - const unsigned char *eol - = (const unsigned char *)memchr(buffer, '\n', - end - buffer); + const unsigned char *eol; size_t line_len; + for (eol = buffer; eol < end; ++eol) { + if (*eol == '\r' || *eol == '\n') + break; + } + if (eol >= end) + eol = NULL; + if (eol) { - line_len = eol + 1 - buffer; + if (eol < end && *eol == '\r') + eol++; + if (eol < end && *eol == '\n') + eol++; + line_len = eol - buffer; } else if (eof) { line_len = end - buffer; } else { @@ -533,6 +568,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // Add a newline to the end if not present: // TODO this breaks abstraction: + // Note: we assume output is LF-only if (parser->curline->ptr[parser->curline->size - 1] != '\n') { cmark_strbuf_putc(parser->curline, '\n'); } @@ -556,7 +592,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } indent = first_nonspace - offset; - blank = peek_at(&input, first_nonspace) == '\n'; + blank = peek_at(&input, first_nonspace) == '\n' || + peek_at(&input, first_nonspace) == '\r'; if (container->type == NODE_BLOCK_QUOTE) { matched = indent <= 3 && peek_at(&input, first_nonspace) == '>'; @@ -657,7 +694,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) first_nonspace++; indent = first_nonspace - offset; - blank = peek_at(&input, first_nonspace) == '\n'; + blank = peek_at(&input, first_nonspace) == '\n' || + peek_at(&input, first_nonspace) == '\r'; if (indent >= CODE_INDENT) { if (!maybe_lazy && !blank) { @@ -713,8 +751,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } else if (container->type == NODE_PARAGRAPH && (lev = scan_setext_header_line(&input, first_nonspace)) && // check that there is only one line in the paragraph: - cmark_strbuf_strrchr(&container->string_content, '\n', - cmark_strbuf_len(&container->string_content) - 2) < 0) { + (cmark_strbuf_strrchr(&container->string_content, '\n', + cmark_strbuf_len(&container->string_content) - 2) < 0 && + cmark_strbuf_strrchr(&container->string_content, '\r', + cmark_strbuf_len(&container->string_content) - 2) < 0)) { container->type = NODE_HEADER; container->as.header.level = lev; @@ -738,7 +778,9 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) i++; } // i = number of spaces after marker, up to 5 - if (i >= 5 || i < 1 || peek_at(&input, offset) == '\n') { + if (i >= 5 || i < 1 || + peek_at(&input, offset) == '\n' || + peek_at(&input, offset) == '\r') { data->padding = matched + 1; if (i > 0) { offset += 1; @@ -786,7 +828,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) first_nonspace++; indent = first_nonspace - offset; - blank = peek_at(&input, first_nonspace) == '\n'; + blank = peek_at(&input, first_nonspace) == '\n' || + peek_at(&input, first_nonspace) == '\r'; if (blank && container->last_child) { container->last_child->last_line_blank = true; @@ -854,10 +897,14 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) parser->current = container; } finished: - parser->last_line_length = parser->curline->size - - (parser->curline->ptr[parser->curline->size - 1] == '\n' ? - 1 : 0); - ; + parser->last_line_length = parser->curline->size; + if (parser->last_line_length && + parser->curline->ptr[parser->last_line_length-1] == '\n') + parser->last_line_length -= 1; + if (parser->last_line_length && + parser->curline->ptr[parser->last_line_length-1] == '\r') + parser->last_line_length -= 1; + cmark_strbuf_clear(parser->curline); } diff --git a/src/scanners.c b/src/scanners.c index 42b9275eb8..7f9ed2e9fb 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -13253,7 +13253,7 @@ int _scan_link_url(const unsigned char *p) unsigned int yyaccept = 0; static const unsigned char yybm[] = { 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 8, 64, 64, 64, 64, 64, + 64, 64, 8, 64, 64, 8, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 72, 112, 112, 112, 112, 112, 112, 112, @@ -13286,21 +13286,23 @@ int _scan_link_url(const unsigned char *p) 112, 112, 112, 112, 112, 112, 112, 112, }; yych = *p; - if (yych <= '(') { - if (yych <= 0x1F) { + if (yych <= '\'') { + if (yych <= '\f') { if (yych == '\n') goto yy1589; goto yy1597; } else { + if (yych <= '\r') goto yy1591; + if (yych <= 0x1F) goto yy1597; if (yych <= ' ') goto yy1591; - if (yych <= '\'') goto yy1593; - goto yy1596; + goto yy1593; } } else { - if (yych <= '<') { + if (yych <= ';') { + if (yych <= '(') goto yy1596; if (yych <= ')') goto yy1597; - if (yych <= ';') goto yy1593; - goto yy1592; + goto yy1593; } else { + if (yych <= '<') goto yy1592; if (yych == '\\') goto yy1594; goto yy1593; } @@ -13339,13 +13341,18 @@ yy1592: if (yybm[0+yych] & 32) { goto yy1605; } - if (yych <= '\'') { - if (yych <= 0x00) goto yy1588; - if (yych == '\n') goto yy1588; - goto yy1612; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1588; + goto yy1612; + } else { + if (yych <= '\n') goto yy1588; + if (yych <= '\f') goto yy1612; + goto yy1588; + } } else { if (yych <= ')') { - if (yych <= '(') goto yy1610; + if (yych == '(') goto yy1610; goto yy1612; } else { if (yych <= '=') goto yy1602; @@ -13459,13 +13466,18 @@ yy1605: if (yybm[0+yych] & 32) { goto yy1605; } - if (yych <= '\'') { - if (yych <= 0x00) goto yy1588; - if (yych == '\n') goto yy1588; - goto yy1612; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1588; + goto yy1612; + } else { + if (yych <= '\n') goto yy1588; + if (yych <= '\f') goto yy1612; + goto yy1588; + } } else { if (yych <= ')') { - if (yych <= '(') goto yy1610; + if (yych == '(') goto yy1610; goto yy1612; } else { if (yych <= '=') goto yy1602; @@ -13482,44 +13494,53 @@ yy1608: yy1609: ++p; yych = *p; - if (yych <= '>') { - if (yych <= ' ') { + if (yych <= '=') { + if (yych <= '\f') { if (yych <= 0x00) goto yy1600; if (yych == '\n') goto yy1600; goto yy1612; } else { - if (yych <= '/') goto yy1605; - if (yych <= '9') goto yy1612; - if (yych <= '=') goto yy1605; - goto yy1622; + if (yych <= ' ') { + if (yych <= '\r') goto yy1600; + goto yy1612; + } else { + if (yych <= '/') goto yy1605; + if (yych <= '9') goto yy1612; + goto yy1605; + } } } else { - if (yych <= '\\') { + if (yych <= '[') { + if (yych <= '>') goto yy1622; if (yych <= '@') goto yy1605; if (yych <= 'Z') goto yy1612; - if (yych <= '[') goto yy1605; - goto yy1623; + goto yy1605; } else { - if (yych <= '`') goto yy1605; - if (yych <= 'z') goto yy1612; - if (yych <= '~') goto yy1605; - goto yy1612; + if (yych <= '`') { + if (yych <= '\\') goto yy1623; + goto yy1605; + } else { + if (yych <= 'z') goto yy1612; + if (yych <= '~') goto yy1605; + goto yy1612; + } } } yy1610: ++p; yych = *p; - if (yych <= ')') { - if (yych <= '\n') { + if (yych <= '(') { + if (yych <= '\f') { if (yych <= 0x00) goto yy1600; - if (yych >= '\n') goto yy1600; + if (yych == '\n') goto yy1600; } else { + if (yych <= '\r') goto yy1600; if (yych <= ' ') goto yy1612; if (yych <= '\'') goto yy1610; - if (yych >= ')') goto yy1605; } } else { if (yych <= '=') { + if (yych <= ')') goto yy1605; if (yych == '<') goto yy1598; goto yy1610; } else { @@ -13545,11 +13566,12 @@ yy1615: if (yybm[0+yych] & 128) { goto yy1615; } - if (yych <= '\n') { + if (yych <= '\f') { if (yych <= 0x00) goto yy1600; - if (yych <= '\t') goto yy1612; - goto yy1600; + if (yych == '\n') goto yy1600; + goto yy1612; } else { + if (yych <= '\r') goto yy1600; if (yych != '>') goto yy1612; } yyaccept = 2; @@ -13570,46 +13592,56 @@ yy1618: yy1619: ++p; yych = *p; - if (yych <= '>') { - if (yych <= ' ') { + if (yych <= '=') { + if (yych <= '\f') { if (yych <= 0x00) goto yy1600; if (yych == '\n') goto yy1600; goto yy1612; } else { - if (yych <= '/') goto yy1610; - if (yych <= '9') goto yy1612; - if (yych <= '=') goto yy1610; + if (yych <= ' ') { + if (yych <= '\r') goto yy1600; + goto yy1612; + } else { + if (yych <= '/') goto yy1610; + if (yych <= '9') goto yy1612; + goto yy1610; + } } } else { - if (yych <= '\\') { + if (yych <= '[') { + if (yych <= '>') goto yy1620; if (yych <= '@') goto yy1610; if (yych <= 'Z') goto yy1612; - if (yych <= '[') goto yy1610; - goto yy1621; + goto yy1610; } else { - if (yych <= '`') goto yy1610; - if (yych <= 'z') goto yy1612; - if (yych <= '~') goto yy1610; - goto yy1612; + if (yych <= '`') { + if (yych <= '\\') goto yy1621; + goto yy1610; + } else { + if (yych <= 'z') goto yy1612; + if (yych <= '~') goto yy1610; + goto yy1612; + } } } yy1620: yyaccept = 2; marker = ++p; yych = *p; - if (yych <= ')') { - if (yych <= '\n') { + if (yych <= '(') { + if (yych <= '\f') { if (yych <= 0x00) goto yy1608; - if (yych <= '\t') goto yy1612; - goto yy1608; + if (yych == '\n') goto yy1608; + goto yy1612; } else { + if (yych <= '\r') goto yy1608; if (yych <= ' ') goto yy1612; if (yych <= '\'') goto yy1610; - if (yych <= '(') goto yy1612; - goto yy1605; + goto yy1612; } } else { if (yych <= '=') { + if (yych <= ')') goto yy1605; if (yych == '<') goto yy1598; goto yy1610; } else { @@ -13621,22 +13653,23 @@ yy1620: yy1621: ++p; yych = *p; - if (yych <= '(') { + if (yych <= '\'') { if (yych <= '\n') { if (yych <= 0x00) goto yy1600; if (yych <= '\t') goto yy1612; goto yy1600; } else { + if (yych == '\r') goto yy1600; if (yych <= ' ') goto yy1612; - if (yych <= '\'') goto yy1610; - goto yy1612; + goto yy1610; } } else { - if (yych <= '>') { + if (yych <= '=') { + if (yych <= '(') goto yy1612; if (yych <= ')') goto yy1605; - if (yych <= '=') goto yy1610; - goto yy1620; + goto yy1610; } else { + if (yych <= '>') goto yy1620; if (yych == '\\') goto yy1619; goto yy1610; } @@ -13648,13 +13681,18 @@ yy1622: if (yybm[0+yych] & 32) { goto yy1605; } - if (yych <= '\'') { - if (yych <= 0x00) goto yy1608; - if (yych == '\n') goto yy1608; - goto yy1612; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1608; + goto yy1612; + } else { + if (yych <= '\n') goto yy1608; + if (yych <= '\f') goto yy1612; + goto yy1608; + } } else { if (yych <= ')') { - if (yych <= '(') goto yy1610; + if (yych == '(') goto yy1610; goto yy1612; } else { if (yych <= '=') goto yy1602; @@ -13666,22 +13704,23 @@ yy1623: yyaccept = 0; marker = ++p; yych = *p; - if (yych <= '(') { + if (yych <= '\'') { if (yych <= '\n') { if (yych <= 0x00) goto yy1588; if (yych <= '\t') goto yy1612; goto yy1588; } else { + if (yych == '\r') goto yy1588; if (yych <= ' ') goto yy1612; - if (yych <= '\'') goto yy1605; - goto yy1610; + goto yy1605; } } else { - if (yych <= '>') { + if (yych <= '=') { + if (yych <= '(') goto yy1610; if (yych <= ')') goto yy1612; - if (yych <= '=') goto yy1605; - goto yy1622; + goto yy1605; } else { + if (yych <= '>') goto yy1622; if (yych == '\\') goto yy1609; goto yy1605; } @@ -14006,9 +14045,14 @@ yy1664: if (yybm[0+yych] & 128) { goto yy1668; } - if (yych == '\n') goto yy1666; - if (yych == '#') goto yy1670; - goto yy1663; + if (yych <= '\f') { + if (yych == '\n') goto yy1666; + goto yy1663; + } else { + if (yych <= '\r') goto yy1666; + if (yych == '#') goto yy1670; + goto yy1663; + } yy1665: yych = *++p; goto yy1663; @@ -14028,8 +14072,12 @@ yy1670: if (yybm[0+yych] & 128) { goto yy1668; } - if (yych == '\n') goto yy1666; - if (yych == '#') goto yy1672; + if (yych <= '\f') { + if (yych == '\n') goto yy1666; + } else { + if (yych <= '\r') goto yy1666; + if (yych == '#') goto yy1672; + } yy1671: p = marker; goto yy1663; @@ -14038,31 +14086,47 @@ yy1672: if (yybm[0+yych] & 128) { goto yy1668; } - if (yych == '\n') goto yy1666; - if (yych != '#') goto yy1671; + if (yych <= '\f') { + if (yych == '\n') goto yy1666; + goto yy1671; + } else { + if (yych <= '\r') goto yy1666; + if (yych != '#') goto yy1671; + } yych = *++p; if (yybm[0+yych] & 128) { goto yy1668; } - if (yych == '\n') goto yy1666; - if (yych != '#') goto yy1671; + if (yych <= '\f') { + if (yych == '\n') goto yy1666; + goto yy1671; + } else { + if (yych <= '\r') goto yy1666; + if (yych != '#') goto yy1671; + } yych = *++p; if (yybm[0+yych] & 128) { goto yy1668; } - if (yych == '\n') goto yy1666; - if (yych != '#') goto yy1671; + if (yych <= '\f') { + if (yych == '\n') goto yy1666; + goto yy1671; + } else { + if (yych <= '\r') goto yy1666; + if (yych != '#') goto yy1671; + } ++p; if (yybm[0+(yych = *p)] & 128) { goto yy1668; } if (yych == '\n') goto yy1666; + if (yych == '\r') goto yy1666; goto yy1671; } } -// Match sexext header line. Return 1 for level-1 header, +// Match setext header line. Return 1 for level-1 header, // 2 for level-2, 0 for no match. int _scan_setext_header_line(const unsigned char *p) { @@ -14119,17 +14183,27 @@ yy1679: if (yybm[0+yych] & 128) { goto yy1693; } - if (yych == '\n') goto yy1691; - if (yych == ' ') goto yy1689; - goto yy1678; + if (yych <= '\f') { + if (yych == '\n') goto yy1691; + goto yy1678; + } else { + if (yych <= '\r') goto yy1691; + if (yych == ' ') goto yy1689; + goto yy1678; + } yy1680: yych = *(marker = ++p); if (yybm[0+yych] & 32) { goto yy1682; } - if (yych == '\n') goto yy1685; - if (yych == '-') goto yy1687; - goto yy1678; + if (yych <= '\f') { + if (yych == '\n') goto yy1685; + goto yy1678; + } else { + if (yych <= '\r') goto yy1685; + if (yych == '-') goto yy1687; + goto yy1678; + } yy1681: yych = *++p; goto yy1678; @@ -14140,6 +14214,7 @@ yy1682: goto yy1682; } if (yych == '\n') goto yy1685; + if (yych == '\r') goto yy1685; yy1684: p = marker; goto yy1678; @@ -14152,15 +14227,24 @@ yy1687: if (yybm[0+yych] & 32) { goto yy1682; } - if (yych == '\n') goto yy1685; - if (yych == '-') goto yy1687; - goto yy1684; + if (yych <= '\f') { + if (yych == '\n') goto yy1685; + goto yy1684; + } else { + if (yych <= '\r') goto yy1685; + if (yych == '-') goto yy1687; + goto yy1684; + } yy1689: ++p; yych = *p; - if (yych == '\n') goto yy1691; - if (yych == ' ') goto yy1689; - goto yy1684; + if (yych <= '\f') { + if (yych != '\n') goto yy1684; + } else { + if (yych <= '\r') goto yy1691; + if (yych == ' ') goto yy1689; + goto yy1684; + } yy1691: ++p; { return 1; } @@ -14170,9 +14254,14 @@ yy1693: if (yybm[0+yych] & 128) { goto yy1693; } - if (yych == '\n') goto yy1691; - if (yych == ' ') goto yy1689; - goto yy1684; + if (yych <= '\f') { + if (yych == '\n') goto yy1691; + goto yy1684; + } else { + if (yych <= '\r') goto yy1691; + if (yych == ' ') goto yy1689; + goto yy1684; + } } } @@ -14278,17 +14367,21 @@ yy1707: if (yybm[0+yych] & 16) { goto yy1707; } - if (yych <= 0x08) goto yy1704; - if (yych <= '\t') goto yy1709; - if (yych <= '\n') goto yy1711; - goto yy1704; + if (yych <= '\n') { + if (yych <= 0x08) goto yy1704; + if (yych >= '\n') goto yy1711; + } else { + if (yych == '\r') goto yy1711; + goto yy1704; + } yy1709: ++p; yych = *p; if (yybm[0+yych] & 32) { goto yy1709; } - if (yych != '\n') goto yy1704; + if (yych == '\n') goto yy1711; + if (yych != '\r') goto yy1704; yy1711: ++p; { return (p - start); } @@ -14308,17 +14401,22 @@ yy1717: if (yybm[0+yych] & 64) { goto yy1717; } - if (yych <= 0x08) goto yy1704; - if (yych <= '\t') goto yy1719; - if (yych <= '\n') goto yy1721; - goto yy1704; + if (yych <= '\n') { + if (yych <= 0x08) goto yy1704; + if (yych >= '\n') goto yy1721; + } else { + if (yych == '\r') goto yy1721; + goto yy1704; + } yy1719: ++p; yych = *p; - if (yych <= '\n') { + if (yych <= '\f') { if (yych <= 0x08) goto yy1704; if (yych <= '\t') goto yy1719; + if (yych >= '\v') goto yy1704; } else { + if (yych <= '\r') goto yy1721; if (yych == ' ') goto yy1719; goto yy1704; } @@ -14341,17 +14439,22 @@ yy1727: if (yybm[0+yych] & 128) { goto yy1727; } - if (yych <= 0x08) goto yy1704; - if (yych <= '\t') goto yy1729; - if (yych <= '\n') goto yy1731; - goto yy1704; + if (yych <= '\n') { + if (yych <= 0x08) goto yy1704; + if (yych >= '\n') goto yy1731; + } else { + if (yych == '\r') goto yy1731; + goto yy1704; + } yy1729: ++p; yych = *p; - if (yych <= '\n') { + if (yych <= '\f') { if (yych <= 0x08) goto yy1704; if (yych <= '\t') goto yy1729; + if (yych >= '\v') goto yy1704; } else { + if (yych <= '\r') goto yy1731; if (yych == ' ') goto yy1729; goto yy1704; } @@ -14372,7 +14475,7 @@ int _scan_open_code_fence(const unsigned char *p) unsigned char yych; static const unsigned char yybm[] = { 0, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 0, 160, 160, 160, 160, 160, + 160, 160, 0, 160, 160, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, @@ -14565,16 +14668,22 @@ yy1762: if (yybm[0+yych] & 64) { goto yy1764; } - if (yych == '\n') goto yy1766; - if (yych == '~') goto yy1762; - goto yy1761; + if (yych <= '\f') { + if (yych == '\n') goto yy1766; + goto yy1761; + } else { + if (yych <= '\r') goto yy1766; + if (yych == '~') goto yy1762; + goto yy1761; + } yy1764: ++p; yych = *p; if (yybm[0+yych] & 64) { goto yy1764; } - if (yych != '\n') goto yy1761; + if (yych == '\n') goto yy1766; + if (yych != '\r') goto yy1761; yy1766: ++p; p = marker; @@ -14592,19 +14701,24 @@ yy1769: if (yybm[0+yych] & 128) { goto yy1769; } - if (yych <= '\n') { + if (yych <= '\f') { if (yych <= 0x08) goto yy1761; - if (yych >= '\n') goto yy1773; + if (yych <= '\t') goto yy1771; + if (yych <= '\n') goto yy1773; + goto yy1761; } else { + if (yych <= '\r') goto yy1773; if (yych != ' ') goto yy1761; } yy1771: ++p; yych = *p; - if (yych <= '\n') { + if (yych <= '\f') { if (yych <= 0x08) goto yy1761; if (yych <= '\t') goto yy1771; + if (yych >= '\v') goto yy1761; } else { + if (yych <= '\r') goto yy1773; if (yych == ' ') goto yy1771; goto yy1761; } diff --git a/src/scanners.re b/src/scanners.re index 31cdb4f67c..941101862d 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -140,8 +140,8 @@ int _scan_link_url(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [ \n]* [<] ([^<>\n\\\x00] | escaped_char | [\\])* [>] { return (p - start); } - [ \n]* (reg_char+ | escaped_char | in_parens_nosp)* { return (p - start); } + [ \r\n]* [<] ([^<>\r\n\\\x00] | escaped_char | [\\])* [>] { return (p - start); } + [ \r\n]* (reg_char+ | escaped_char | in_parens_nosp)* { return (p - start); } .? { return 0; } */ } @@ -177,19 +177,19 @@ int _scan_atx_header_start(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [#]{1,6} ([ ]+|[\n]) { return (p - start); } + [#]{1,6} ([ ]+|[\r\n]) { return (p - start); } .? { return 0; } */ } -// Match sexext header line. Return 1 for level-1 header, +// Match setext header line. Return 1 for level-1 header, // 2 for level-2, 0 for no match. int _scan_setext_header_line(const unsigned char *p) { const unsigned char *marker = NULL; /*!re2c - [=]+ [ ]* [\n] { return 1; } - [-]+ [ ]* [\n] { return 2; } + [=]+ [ ]* [\r\n] { return 1; } + [-]+ [ ]* [\r\n] { return 2; } .? { return 0; } */ } @@ -202,9 +202,9 @@ int _scan_hrule(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - ([*][ ]*){3,} [ \t]* [\n] { return (p - start); } - ([_][ ]*){3,} [ \t]* [\n] { return (p - start); } - ([-][ ]*){3,} [ \t]* [\n] { return (p - start); } + ([*][ ]*){3,} [ \t]* [\r\n] { return (p - start); } + ([_][ ]*){3,} [ \t]* [\r\n] { return (p - start); } + ([-][ ]*){3,} [ \t]* [\r\n] { return (p - start); } .? { return 0; } */ } @@ -215,8 +215,8 @@ int _scan_open_code_fence(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [`]{3,} / [^`\n\x00]*[\n] { return (p - start); } - [~]{3,} / [^~\n\x00]*[\n] { return (p - start); } + [`]{3,} / [^`\r\n\x00]*[\r\n] { return (p - start); } + [~]{3,} / [^~\r\n\x00]*[\r\n] { return (p - start); } .? { return 0; } */ } @@ -227,8 +227,8 @@ int _scan_close_code_fence(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [`]{3,} / [ \t]*[\n] { return (p - start); } - [~]{3,} / [ \t]*[\n] { return (p - start); } + [`]{3,} / [ \t]*[\r\n] { return (p - start); } + [~]{3,} / [ \t]*[\r\n] { return (p - start); } .? { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 209ac5d2be3ddc9b0ff814c25903cd33f7dc94b4 Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Fri, 20 Mar 2015 20:37:58 -0400 Subject: Add CRLF/CR handling to inlines.c. --- src/inlines.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 3e298dee20..71753274be 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -576,7 +576,7 @@ static cmark_node* handle_backslash(subject *subj) if (cmark_ispunct(nextchar)) { // only ascii symbols and newline can be escaped advance(subj); return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); - } else if (nextchar == '\n') { + } else if (nextchar == '\r' || nextchar == '\n') { advance(subj); return make_linebreak(); } else { @@ -928,9 +928,9 @@ static cmark_node* handle_newline(subject *subj) static int subject_find_special_char(subject *subj, int options) { - // "\n\\`&_*[]pos = endpos; // if we're at a newline, strip trailing spaces. - if (peek_char(subj) == '\n') { + if (peek_char(subj) == '\r' || peek_char(subj) == '\n') { cmark_chunk_rtrim(&contents); } @@ -1076,7 +1077,7 @@ static void spnl(subject* subj) bool seen_newline = false; while (peek_char(subj) == ' ' || (!seen_newline && - (seen_newline = peek_char(subj) == '\n'))) { + (seen_newline = peek_char(subj) == '\r' || peek_char(subj) == '\n'))) { advance(subj); } } @@ -1134,7 +1135,7 @@ int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refma while (peek_char(&subj) == ' ') { advance(&subj); } - if (peek_char(&subj) == '\n') { + if (peek_char(&subj) == '\r' || peek_char(&subj) == '\n') { advance(&subj); } else if (peek_char(&subj) != 0) { return 0; -- cgit 0.0.5-2-1-g0f52 From fbb0836feb25f3f5f3e3373c7c20eab62f30e036 Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Fri, 20 Mar 2015 21:12:10 -0400 Subject: Fix regression in remove_trailing_blank_lines(). --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 0222c0f218..338d4e92f3 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -145,7 +145,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) } - for(i = 0; i < ln->size; ++i) { + for(; i < ln->size; ++i) { c = ln->ptr[i]; if (c != '\r' && c != '\n') -- cgit 0.0.5-2-1-g0f52 From 6f99ff72519a34517285b070cb222de42d8acdfd Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Tue, 7 Apr 2015 05:27:18 -0400 Subject: Hacks to spec_tests.py to test CRLF support. --- test/spec_tests.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index b1b0373130..6fd43efe35 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -36,7 +36,7 @@ def print_test_header(headertext, example_number, start_line, end_line): print("Example %d (lines %d-%d) %s" % (example_number,start_line,end_line,headertext)) def do_test(test, normalize, result_counts): - [retcode, actual_html, err] = cmark.to_html(test['markdown']) + [retcode, actual_html, err] = cmark.to_html(re.sub(r"\n", "\r\n", test['markdown'])) if retcode == 0: expected_html = test['html'] unicode_error = None @@ -52,17 +52,21 @@ def do_test(test, normalize, result_counts): result_counts['pass'] += 1 else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) - sys.stdout.write(test['markdown']) + print("Orig: "+repr(test['markdown'])) + print("Conv: "+repr(re.sub(r"\n", "\r\n", test['markdown']))) +# sys.stdout.write(test['markdown']) if unicode_error: print("Unicode error: " + str(unicode_error)) print("Expected: " + repr(expected_html)) print("Got: " + repr(actual_html)) else: - expected_html_lines = expected_html.splitlines(True) - actual_html_lines = actual_html.splitlines(True) - for diffline in unified_diff(expected_html_lines, actual_html_lines, - "expected HTML", "actual HTML"): - sys.stdout.write(diffline) + print("Expected: " + repr(expected_html)) + print("Got: " + repr(actual_html)) +# expected_html_lines = expected_html.splitlines(True) +# actual_html_lines = actual_html.splitlines(True) +# for diffline in unified_diff(expected_html_lines, actual_html_lines, +# "expected HTML", "actual HTML"): +# sys.stdout.write(diffline) sys.stdout.write('\n') result_counts['fail'] += 1 else: -- cgit 0.0.5-2-1-g0f52 From b8aa64967e328d2d9fa0bc1f21c0970ec32d259f Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Tue, 7 Apr 2015 05:27:45 -0400 Subject: Bug fixes for CRLF support. --- src/blocks.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 338d4e92f3..06521d1062 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -90,9 +90,6 @@ static bool is_blank(cmark_strbuf *s, int offset) while (offset < s->size) { switch (s->ptr[offset]) { case '\r': - if (s->ptr[offset + 1] == '\n') - offset++; - return true; case '\n': return true; case ' ': @@ -151,10 +148,6 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) if (c != '\r' && c != '\n') continue; - // Don't cut a CRLF in half - if (c == '\r' && i+1 < ln->size && ln->ptr[i+1] == '\n') - ++i; - cmark_strbuf_truncate(ln, i); break; } @@ -568,10 +561,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // Add a newline to the end if not present: // TODO this breaks abstraction: - // Note: we assume output is LF-only - if (parser->curline->ptr[parser->curline->size - 1] != '\n') { - cmark_strbuf_putc(parser->curline, '\n'); + if (parser->curline->ptr[parser->curline->size - 1] == '\n') { + cmark_strbuf_truncate(parser->curline, parser->curline->size - 1); + } + if (parser->curline->ptr[parser->curline->size - 1] == '\r') { + cmark_strbuf_truncate(parser->curline, parser->curline->size - 1); } + cmark_strbuf_putc(parser->curline, '\n'); input.data = parser->curline->ptr; input.len = parser->curline->size; -- cgit 0.0.5-2-1-g0f52 From 271d8a16e0fa62aa8d6eace9b1931cc4beb27e06 Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Tue, 7 Apr 2015 05:32:01 -0400 Subject: Try to match existing style better. --- src/blocks.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 06521d1062..4acd899505 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -213,10 +213,10 @@ finalize(cmark_parser *parser, cmark_node* b) (b->type == NODE_HEADER && b->as.header.setext)) { b->end_line = parser->line_number; b->end_column = parser->curline->size; - if (b->end_column && parser->curline->ptr[b->end_column-1] == '\n') - b->end_column -= 1; - if (b->end_column && parser->curline->ptr[b->end_column-1] == '\r') - b->end_column -= 1; + if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n') + b->end_column--; + if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r') + b->end_column--; } else { b->end_line = parser->line_number - 1; b->end_column = parser->last_line_length; @@ -895,11 +895,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) finished: parser->last_line_length = parser->curline->size; if (parser->last_line_length && - parser->curline->ptr[parser->last_line_length-1] == '\n') - parser->last_line_length -= 1; + parser->curline->ptr[parser->last_line_length - 1] == '\n') + parser->last_line_length--; if (parser->last_line_length && - parser->curline->ptr[parser->last_line_length-1] == '\r') - parser->last_line_length -= 1; + parser->curline->ptr[parser->last_line_length - 1] == '\r') + parser->last_line_length--; cmark_strbuf_clear(parser->curline); -- cgit 0.0.5-2-1-g0f52 From 60d8ded6a6623ddceec76ea348879638b599ee1f Mon Sep 17 00:00:00 2001 From: Ben Trask Date: Tue, 7 Apr 2015 09:41:05 -0400 Subject: Check length before reading. --- src/blocks.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 4acd899505..777356aba9 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -561,10 +561,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // Add a newline to the end if not present: // TODO this breaks abstraction: - if (parser->curline->ptr[parser->curline->size - 1] == '\n') { + if (parser->curline->size && parser->curline->ptr[parser->curline->size - 1] == '\n') { cmark_strbuf_truncate(parser->curline, parser->curline->size - 1); } - if (parser->curline->ptr[parser->curline->size - 1] == '\r') { + if (parser->curline->size && parser->curline->ptr[parser->curline->size - 1] == '\r') { cmark_strbuf_truncate(parser->curline, parser->curline->size - 1); } cmark_strbuf_putc(parser->curline, '\n'); -- cgit 0.0.5-2-1-g0f52 From 8c121939e21f6ebb57e33a2e2e4bf90d37a0a140 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Apr 2015 21:08:23 -0700 Subject: Added afl to .PHONY in Makefile. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index eacc27124a..a8f116e397 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug asan mingw archive bench astyle update-spec +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug asan mingw archive bench astyle update-spec afl all: cmake_build man/man3/cmark.3 -- cgit 0.0.5-2-1-g0f52 From 520d5a6fc6a6cf100d9414d588079f2a076801c5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 15 Apr 2015 16:09:53 -0700 Subject: Check return status of utf8proc_iterate. Closes #27. If unicode parsing gives an error condition, we just skip the rest of the string without rendering anything and proceed. I'm not sure if that's the best way to handle this, but garbage in, garbage out. Note: this bug was found using american fuzzy lop. --- src/commonmark.c | 3 +++ src/man.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index bef92f6228..24ee8cefff 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -117,6 +117,9 @@ static inline void out(struct render_state *state, } len = utf8proc_iterate(source + i, length - i, &c); + if (len == -1) { // error condition + return; // return without rendering rest of string + } nextc = source[i + len]; if (c == 32 && wrap) { if (!state->begin_line) { diff --git a/src/man.c b/src/man.c index 27cd2e4296..8ff4a9ff80 100644 --- a/src/man.c +++ b/src/man.c @@ -20,6 +20,9 @@ static void escape_man(cmark_strbuf *dest, const unsigned char *source, int leng while (i < length) { len = utf8proc_iterate(source + i, length - i, &c); + if (len == -1) { // error condition + return; // return without rendering anything + } switch(c) { case 46: if (beginLine) { -- cgit 0.0.5-2-1-g0f52 From 1111672722f0805cec39076d640d9c1acd2da4c8 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Thu, 16 Apr 2015 19:51:12 +0200 Subject: Pass-through Unicode non-characters Despite their name, Unicode non-characters are valid code points. They should be passed through by a library like libcmark. --- src/utf8.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/utf8.c b/src/utf8.c index d77c5d1388..b83c2a529f 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -172,8 +172,7 @@ int utf8proc_iterate(const uint8_t *str, int str_len, int32_t *dst) case 3: uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F); - if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) || - (uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1; + if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) uc = -1; break; case 4: uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) @@ -182,7 +181,7 @@ int utf8proc_iterate(const uint8_t *str, int str_len, int32_t *dst) break; } - if (uc < 0 || ((uc & 0xFFFF) >= 0xFFFE)) + if (uc < 0) return -1; *dst = uc; -- cgit 0.0.5-2-1-g0f52 From 5fcf8acaf53d228287af23289505f2609d2ff874 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 16 Apr 2015 12:55:05 -0700 Subject: Improved README. --- README.md | 51 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 870e3b1228..13dd5a2308 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,11 @@ -CommonMark -========== +cmark +===== -CommonMark is a rationalized version of Markdown syntax, -with a [spec][the spec] and BSD-licensed reference -implementations in C and JavaScript. +`cmark` is the C reference implementation of [CommonMark], a +rationalized version of Markdown syntax with a [spec][the spec]. +(For the JavaScript reference implementation, see +[commonmark.js].) -[Try it now!](http://try.commonmark.org/) - -For more information, see . - -This repository contains the C reference implementation. It provides a shared library (`libcmark`) with functions for parsing CommonMark documents to an abstract syntax tree (AST), manipulating the AST, and rendering the document to HTML, groff man, @@ -17,16 +13,34 @@ CommonMark, or an XML representation of the AST. It also provides a command-line program (`cmark`) for parsing and rendering CommonMark documents. -The library and program are written in standard C99 and have -no library dependencies. The parser is very fast, on par with -[sundown]: see the [benchmarks]. +Advantages of this library: + +- **Portable.** The library and program are written in standard + C99 and have no external dependencies. It has been tested with + MSVC, gcc, tcc, and clang. + +- **Fast.** Performance is on par with the fastest existing + Markdown parser, [sundown]: see the [benchmarks]. + +- **Accurate.** The library passes all CommonMark conformance tests. + +- **Robust.** The library has been extensively fuzz-tested using + american fuzzy lop. The test suite includes pathological cases + that bring many other Markdown parsers to a crawl (for example, + thousands-deep nested bracketed text or block quotes). + +- **Flexible.** CommonMark input is parsed to an AST which can be + manipulated programatically prior to rendering. + +- **Multiple renderers.** Output in HTML, groff man, CommonMark, + and a custom XML format is supported. And it is easy to write new + renderers to support other formats. + +- **Free.** BSD2-licensed. It is easy to use `libcmark` in python, lua, ruby, and other dynamic languages: see the `wrappers/` subdirectory for some simple examples. -[sundown]: https://github.com/vmg/sundown -[benchmarks]: benchmarks.md -[the spec]: http://spec.commonmark.org Installing ---------- @@ -132,5 +146,10 @@ eliminating several worst-case performance issues. Nick Wellnhofer contributed many improvements, including most of the C library's API and its test harness. +[sundown]: https://github.com/vmg/sundown +[benchmarks]: benchmarks.md +[the spec]: http://spec.commonmark.org +[CommonMark]: http://commonmark.org [cmake]: http://www.cmake.org/download/ [re2c]: http://re2c.org +[commonmark.js]: https://github.com/jgm/commonmark.js -- cgit 0.0.5-2-1-g0f52 From f8c18d68e95d63bda55c77100fe395a7882bb71c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 16 Apr 2015 13:57:29 -0700 Subject: Added "Standardized" bullet to README. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 13dd5a2308..0fa1d8a3f5 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,11 @@ Advantages of this library: - **Accurate.** The library passes all CommonMark conformance tests. +- **Standardized.** The library can be expected to parse CommonMark + the same way as any other conforming parser. So, for example, + you can use `commonmark.js` on the client to preview content that + will be rendered on the server using `cmark`. + - **Robust.** The library has been extensively fuzz-tested using american fuzzy lop. The test suite includes pathological cases that bring many other Markdown parsers to a crawl (for example, -- cgit 0.0.5-2-1-g0f52 From 914e82fad8d89c8ebc23bb9888754627ff24f839 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 17 Apr 2015 09:53:14 -0700 Subject: Added test/afl_dictionary. --- test/afl_dictionary/attr_generic | 1 + test/afl_dictionary/attr_href | 1 + test/afl_dictionary/attr_xml_lang | 1 + test/afl_dictionary/attr_xmlns | 1 + test/afl_dictionary/backslash | 1 + test/afl_dictionary/backtick | 1 + test/afl_dictionary/colon | 1 + test/afl_dictionary/dashes | 1 + test/afl_dictionary/double_quote | 1 + test/afl_dictionary/entity_builtin | 1 + test/afl_dictionary/entity_decimal | 1 + test/afl_dictionary/entity_external | 1 + test/afl_dictionary/entity_hex | 1 + test/afl_dictionary/equals | 1 + test/afl_dictionary/exclamation | 1 + test/afl_dictionary/greater_than | 1 + test/afl_dictionary/hash | 1 + test/afl_dictionary/indent | 1 + test/afl_dictionary/left_bracket | 1 + test/afl_dictionary/left_paren | 1 + test/afl_dictionary/less_than | 1 + test/afl_dictionary/right_bracket | 1 + test/afl_dictionary/right_paren | 1 + test/afl_dictionary/single_quote | 1 + test/afl_dictionary/string_any | 1 + test/afl_dictionary/string_brackets | 1 + test/afl_dictionary/string_cdata | 1 + test/afl_dictionary/string_dashes | 1 + test/afl_dictionary/string_empty_dblquotes | 1 + test/afl_dictionary/string_empty_quotes | 1 + test/afl_dictionary/string_idrefs | 1 + test/afl_dictionary/string_parentheses | 1 + test/afl_dictionary/string_pcdata | 1 + test/afl_dictionary/tag_cdata | 1 + test/afl_dictionary/tag_close | 1 + test/afl_dictionary/tag_doctype | 1 + test/afl_dictionary/tag_element | 1 + test/afl_dictionary/tag_entity | 1 + test/afl_dictionary/tag_notation | 1 + test/afl_dictionary/tag_open | 1 + test/afl_dictionary/tag_open_close | 1 + test/afl_dictionary/tag_open_exclamation | 1 + test/afl_dictionary/tag_open_q | 1 + test/afl_dictionary/tag_sq2_close | 1 + test/afl_dictionary/tag_xml_q | 1 + 45 files changed, 45 insertions(+) create mode 100644 test/afl_dictionary/attr_generic create mode 100644 test/afl_dictionary/attr_href create mode 100644 test/afl_dictionary/attr_xml_lang create mode 100644 test/afl_dictionary/attr_xmlns create mode 100644 test/afl_dictionary/backslash create mode 100644 test/afl_dictionary/backtick create mode 100644 test/afl_dictionary/colon create mode 100644 test/afl_dictionary/dashes create mode 100644 test/afl_dictionary/double_quote create mode 100644 test/afl_dictionary/entity_builtin create mode 100644 test/afl_dictionary/entity_decimal create mode 100644 test/afl_dictionary/entity_external create mode 100644 test/afl_dictionary/entity_hex create mode 100644 test/afl_dictionary/equals create mode 100644 test/afl_dictionary/exclamation create mode 100644 test/afl_dictionary/greater_than create mode 100644 test/afl_dictionary/hash create mode 100644 test/afl_dictionary/indent create mode 100644 test/afl_dictionary/left_bracket create mode 100644 test/afl_dictionary/left_paren create mode 100644 test/afl_dictionary/less_than create mode 100644 test/afl_dictionary/right_bracket create mode 100644 test/afl_dictionary/right_paren create mode 100644 test/afl_dictionary/single_quote create mode 100644 test/afl_dictionary/string_any create mode 100644 test/afl_dictionary/string_brackets create mode 100644 test/afl_dictionary/string_cdata create mode 100644 test/afl_dictionary/string_dashes create mode 100644 test/afl_dictionary/string_empty_dblquotes create mode 100644 test/afl_dictionary/string_empty_quotes create mode 100644 test/afl_dictionary/string_idrefs create mode 100644 test/afl_dictionary/string_parentheses create mode 100644 test/afl_dictionary/string_pcdata create mode 100644 test/afl_dictionary/tag_cdata create mode 100644 test/afl_dictionary/tag_close create mode 100644 test/afl_dictionary/tag_doctype create mode 100644 test/afl_dictionary/tag_element create mode 100644 test/afl_dictionary/tag_entity create mode 100644 test/afl_dictionary/tag_notation create mode 100644 test/afl_dictionary/tag_open create mode 100644 test/afl_dictionary/tag_open_close create mode 100644 test/afl_dictionary/tag_open_exclamation create mode 100644 test/afl_dictionary/tag_open_q create mode 100644 test/afl_dictionary/tag_sq2_close create mode 100644 test/afl_dictionary/tag_xml_q diff --git a/test/afl_dictionary/attr_generic b/test/afl_dictionary/attr_generic new file mode 100644 index 0000000000..d84e4b2e4f --- /dev/null +++ b/test/afl_dictionary/attr_generic @@ -0,0 +1 @@ + a="1" \ No newline at end of file diff --git a/test/afl_dictionary/attr_href b/test/afl_dictionary/attr_href new file mode 100644 index 0000000000..cbb9775697 --- /dev/null +++ b/test/afl_dictionary/attr_href @@ -0,0 +1 @@ + href="1" \ No newline at end of file diff --git a/test/afl_dictionary/attr_xml_lang b/test/afl_dictionary/attr_xml_lang new file mode 100644 index 0000000000..6dab3e9ee6 --- /dev/null +++ b/test/afl_dictionary/attr_xml_lang @@ -0,0 +1 @@ + xml:lang="1" \ No newline at end of file diff --git a/test/afl_dictionary/attr_xmlns b/test/afl_dictionary/attr_xmlns new file mode 100644 index 0000000000..168863a33d --- /dev/null +++ b/test/afl_dictionary/attr_xmlns @@ -0,0 +1 @@ + xmlns="1" \ No newline at end of file diff --git a/test/afl_dictionary/backslash b/test/afl_dictionary/backslash new file mode 100644 index 0000000000..b7d5379f9e --- /dev/null +++ b/test/afl_dictionary/backslash @@ -0,0 +1 @@ +\ \ No newline at end of file diff --git a/test/afl_dictionary/backtick b/test/afl_dictionary/backtick new file mode 100644 index 0000000000..64845fb767 --- /dev/null +++ b/test/afl_dictionary/backtick @@ -0,0 +1 @@ +` \ No newline at end of file diff --git a/test/afl_dictionary/colon b/test/afl_dictionary/colon new file mode 100644 index 0000000000..22ded55aa2 --- /dev/null +++ b/test/afl_dictionary/colon @@ -0,0 +1 @@ +: \ No newline at end of file diff --git a/test/afl_dictionary/dashes b/test/afl_dictionary/dashes new file mode 100644 index 0000000000..73b314ff7c --- /dev/null +++ b/test/afl_dictionary/dashes @@ -0,0 +1 @@ +--- \ No newline at end of file diff --git a/test/afl_dictionary/double_quote b/test/afl_dictionary/double_quote new file mode 100644 index 0000000000..9d68933c44 --- /dev/null +++ b/test/afl_dictionary/double_quote @@ -0,0 +1 @@ +" \ No newline at end of file diff --git a/test/afl_dictionary/entity_builtin b/test/afl_dictionary/entity_builtin new file mode 100644 index 0000000000..1489a83e36 --- /dev/null +++ b/test/afl_dictionary/entity_builtin @@ -0,0 +1 @@ +< \ No newline at end of file diff --git a/test/afl_dictionary/entity_decimal b/test/afl_dictionary/entity_decimal new file mode 100644 index 0000000000..7b997f68af --- /dev/null +++ b/test/afl_dictionary/entity_decimal @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/entity_external b/test/afl_dictionary/entity_external new file mode 100644 index 0000000000..f626a66c1e --- /dev/null +++ b/test/afl_dictionary/entity_external @@ -0,0 +1 @@ +&a; \ No newline at end of file diff --git a/test/afl_dictionary/entity_hex b/test/afl_dictionary/entity_hex new file mode 100644 index 0000000000..8766028af5 --- /dev/null +++ b/test/afl_dictionary/entity_hex @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/equals b/test/afl_dictionary/equals new file mode 100644 index 0000000000..719398400d --- /dev/null +++ b/test/afl_dictionary/equals @@ -0,0 +1 @@ +=== \ No newline at end of file diff --git a/test/afl_dictionary/exclamation b/test/afl_dictionary/exclamation new file mode 100644 index 0000000000..74e0f12e32 --- /dev/null +++ b/test/afl_dictionary/exclamation @@ -0,0 +1 @@ +! \ No newline at end of file diff --git a/test/afl_dictionary/greater_than b/test/afl_dictionary/greater_than new file mode 100644 index 0000000000..0817502b11 --- /dev/null +++ b/test/afl_dictionary/greater_than @@ -0,0 +1 @@ +> \ No newline at end of file diff --git a/test/afl_dictionary/hash b/test/afl_dictionary/hash new file mode 100644 index 0000000000..4287ca8617 --- /dev/null +++ b/test/afl_dictionary/hash @@ -0,0 +1 @@ +# \ No newline at end of file diff --git a/test/afl_dictionary/indent b/test/afl_dictionary/indent new file mode 100644 index 0000000000..136d06384a --- /dev/null +++ b/test/afl_dictionary/indent @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/left_bracket b/test/afl_dictionary/left_bracket new file mode 100644 index 0000000000..8e2f0bef13 --- /dev/null +++ b/test/afl_dictionary/left_bracket @@ -0,0 +1 @@ +[ \ No newline at end of file diff --git a/test/afl_dictionary/left_paren b/test/afl_dictionary/left_paren new file mode 100644 index 0000000000..f46d387bf9 --- /dev/null +++ b/test/afl_dictionary/left_paren @@ -0,0 +1 @@ +( \ No newline at end of file diff --git a/test/afl_dictionary/less_than b/test/afl_dictionary/less_than new file mode 100644 index 0000000000..c5fa78456d --- /dev/null +++ b/test/afl_dictionary/less_than @@ -0,0 +1 @@ +< \ No newline at end of file diff --git a/test/afl_dictionary/right_bracket b/test/afl_dictionary/right_bracket new file mode 100644 index 0000000000..54caf60b13 --- /dev/null +++ b/test/afl_dictionary/right_bracket @@ -0,0 +1 @@ +] \ No newline at end of file diff --git a/test/afl_dictionary/right_paren b/test/afl_dictionary/right_paren new file mode 100644 index 0000000000..e8a0f87653 --- /dev/null +++ b/test/afl_dictionary/right_paren @@ -0,0 +1 @@ +) \ No newline at end of file diff --git a/test/afl_dictionary/single_quote b/test/afl_dictionary/single_quote new file mode 100644 index 0000000000..ad2823b48f --- /dev/null +++ b/test/afl_dictionary/single_quote @@ -0,0 +1 @@ +' \ No newline at end of file diff --git a/test/afl_dictionary/string_any b/test/afl_dictionary/string_any new file mode 100644 index 0000000000..bcd7dd4e44 --- /dev/null +++ b/test/afl_dictionary/string_any @@ -0,0 +1 @@ +ANY \ No newline at end of file diff --git a/test/afl_dictionary/string_brackets b/test/afl_dictionary/string_brackets new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/afl_dictionary/string_brackets @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/afl_dictionary/string_cdata b/test/afl_dictionary/string_cdata new file mode 100644 index 0000000000..9d6d94ee58 --- /dev/null +++ b/test/afl_dictionary/string_cdata @@ -0,0 +1 @@ +CDATA \ No newline at end of file diff --git a/test/afl_dictionary/string_dashes b/test/afl_dictionary/string_dashes new file mode 100644 index 0000000000..7489accbf2 --- /dev/null +++ b/test/afl_dictionary/string_dashes @@ -0,0 +1 @@ +-- \ No newline at end of file diff --git a/test/afl_dictionary/string_empty_dblquotes b/test/afl_dictionary/string_empty_dblquotes new file mode 100644 index 0000000000..3cc762b550 --- /dev/null +++ b/test/afl_dictionary/string_empty_dblquotes @@ -0,0 +1 @@ +"" \ No newline at end of file diff --git a/test/afl_dictionary/string_empty_quotes b/test/afl_dictionary/string_empty_quotes new file mode 100644 index 0000000000..9423090951 --- /dev/null +++ b/test/afl_dictionary/string_empty_quotes @@ -0,0 +1 @@ +'' \ No newline at end of file diff --git a/test/afl_dictionary/string_idrefs b/test/afl_dictionary/string_idrefs new file mode 100644 index 0000000000..dd37f9ccd4 --- /dev/null +++ b/test/afl_dictionary/string_idrefs @@ -0,0 +1 @@ +IDREFS \ No newline at end of file diff --git a/test/afl_dictionary/string_parentheses b/test/afl_dictionary/string_parentheses new file mode 100644 index 0000000000..dd626a0f31 --- /dev/null +++ b/test/afl_dictionary/string_parentheses @@ -0,0 +1 @@ +() \ No newline at end of file diff --git a/test/afl_dictionary/string_pcdata b/test/afl_dictionary/string_pcdata new file mode 100644 index 0000000000..d2dd7f78a0 --- /dev/null +++ b/test/afl_dictionary/string_pcdata @@ -0,0 +1 @@ +#PCDATA \ No newline at end of file diff --git a/test/afl_dictionary/tag_cdata b/test/afl_dictionary/tag_cdata new file mode 100644 index 0000000000..fac6255c43 --- /dev/null +++ b/test/afl_dictionary/tag_cdata @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/tag_doctype b/test/afl_dictionary/tag_doctype new file mode 100644 index 0000000000..b7717521bb --- /dev/null +++ b/test/afl_dictionary/tag_doctype @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/tag_open_close b/test/afl_dictionary/tag_open_close new file mode 100644 index 0000000000..4a12235218 --- /dev/null +++ b/test/afl_dictionary/tag_open_close @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/tag_open_exclamation b/test/afl_dictionary/tag_open_exclamation new file mode 100644 index 0000000000..58adc036c0 --- /dev/null +++ b/test/afl_dictionary/tag_open_exclamation @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/afl_dictionary/tag_xml_q b/test/afl_dictionary/tag_xml_q new file mode 100644 index 0000000000..be32990c5e --- /dev/null +++ b/test/afl_dictionary/tag_xml_q @@ -0,0 +1 @@ + \ No newline at end of file -- cgit 0.0.5-2-1-g0f52 From 58319aa3ffb6054d88650acba3b0678ef7c13b92 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 17 Apr 2015 09:55:21 -0700 Subject: make afl: use afl_dictionary, raise timeout for hangs. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index a8f116e397..6f58b5213c 100644 --- a/Makefile +++ b/Makefile @@ -67,6 +67,8 @@ afl: $(AFL_PATH)/afl-fuzz \ -i test/afl_test_cases \ -o test/afl_results \ + -x test/afl_dictionary \ + -t 100 \ -m none \ $(CMARK) -- cgit 0.0.5-2-1-g0f52 From 177f8edf37cc44c6486bf51bc7040481643a72cc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 17 Apr 2015 09:59:21 -0700 Subject: Added to afl_dictionary. --- test/afl_dictionary/asterisk | 1 + test/afl_dictionary/hyphen | 0 test/afl_dictionary/plus | 1 + test/afl_dictionary/underscore | 1 + 4 files changed, 3 insertions(+) create mode 100644 test/afl_dictionary/asterisk create mode 100644 test/afl_dictionary/hyphen create mode 100644 test/afl_dictionary/plus create mode 100644 test/afl_dictionary/underscore diff --git a/test/afl_dictionary/asterisk b/test/afl_dictionary/asterisk new file mode 100644 index 0000000000..f59ec20aab --- /dev/null +++ b/test/afl_dictionary/asterisk @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/test/afl_dictionary/hyphen b/test/afl_dictionary/hyphen new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/afl_dictionary/plus b/test/afl_dictionary/plus new file mode 100644 index 0000000000..9b26e9b102 --- /dev/null +++ b/test/afl_dictionary/plus @@ -0,0 +1 @@ ++ \ No newline at end of file diff --git a/test/afl_dictionary/underscore b/test/afl_dictionary/underscore new file mode 100644 index 0000000000..c9cdc63b07 --- /dev/null +++ b/test/afl_dictionary/underscore @@ -0,0 +1 @@ +_ \ No newline at end of file -- cgit 0.0.5-2-1-g0f52 From efaa24fe63a0ce1ee2b34ef20419d7ba9396463a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 19 Apr 2015 22:56:45 -0700 Subject: astyle reformatting. --- src/commonmark.c | 89 ++++++++++++++++++++++++++++---------------------------- src/main.c | 6 ++-- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 24ee8cefff..805f1397bf 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -49,35 +49,35 @@ typedef enum { static inline bool needs_escaping(escaping escape, - int32_t c, - unsigned char next_c, - struct render_state *state) + int32_t c, + unsigned char next_c, + struct render_state *state) { if (escape == NORMAL) { return (c == '*' || c == '_' || c == '[' || c == ']' || - c == '<' || c == '>' || c == '\\' || c == '`' || - (c == '&' && isalpha(next_c)) || - (c == '!' && next_c == '[') || - (state->begin_line && - (c == '-' || c == '+' || c == '#' || c == '=')) || - (c == '#' && (isspace(next_c) || next_c == '\0')) || - ((c == '.' || c == ')') && - isdigit(state->buffer->ptr[state->buffer->size - 1]))); + c == '<' || c == '>' || c == '\\' || c == '`' || + (c == '&' && isalpha(next_c)) || + (c == '!' && next_c == '[') || + (state->begin_line && + (c == '-' || c == '+' || c == '#' || c == '=')) || + (c == '#' && (isspace(next_c) || next_c == '\0')) || + ((c == '.' || c == ')') && + isdigit(state->buffer->ptr[state->buffer->size - 1]))); } else if (escape == TITLE) { return (c == '`' || c == '<' || c == '>' || c == '"' || - c == '\\'); + c == '\\'); } else if (escape == URL) { return (c == '`' || c == '<' || c == '>' || isspace(c) || - c == '\\' || c == ')' || c == '('); + c == '\\' || c == ')' || c == '('); } else { return false; } } static inline void out(struct render_state *state, - cmark_chunk str, - bool wrap, - escaping escape) + cmark_chunk str, + bool wrap, + escaping escape) { unsigned char* source = str.data; int length = str.len; @@ -100,7 +100,7 @@ static inline void out(struct render_state *state, cmark_strbuf_putc(state->buffer, '\n'); if (state->need_cr > 1) { cmark_strbuf_put(state->buffer, state->prefix->ptr, - state->prefix->size); + state->prefix->size); } } state->column = 0; @@ -111,7 +111,7 @@ static inline void out(struct render_state *state, while (i < length) { if (state->begin_line) { cmark_strbuf_put(state->buffer, state->prefix->ptr, - state->prefix->size); + state->prefix->size); // note: this assumes prefix is ascii: state->column = state->prefix->size; } @@ -127,7 +127,7 @@ static inline void out(struct render_state *state, state->column += 1; state->begin_line = false; state->last_breakable = state->buffer->size - - 1; + 1; // skip following spaces while (source[i + 1] == ' ') { i++; @@ -170,7 +170,7 @@ static inline void out(struct render_state *state, // add newline, prefix, and remainder cmark_strbuf_putc(state->buffer, '\n'); cmark_strbuf_put(state->buffer, state->prefix->ptr, - state->prefix->size); + state->prefix->size); cmark_strbuf_put(state->buffer, remainder.data, remainder.len); state->column = state->prefix->size + remainder.len; cmark_chunk_free(&remainder); @@ -257,8 +257,8 @@ is_autolink(cmark_node *node) } cmark_consolidate_text_nodes(node); return (strncmp(url, - (char*)node->as.literal.data, - node->as.literal.len) == 0); + (char*)node->as.literal.data, + node->as.literal.len) == 0); } // if node is a block node, returns node. @@ -268,7 +268,7 @@ get_containing_block(cmark_node *node) { while (node && (node->type < CMARK_NODE_FIRST_BLOCK || - node->type > CMARK_NODE_LAST_BLOCK)) { + node->type > CMARK_NODE_LAST_BLOCK)) { node = node->parent; } return node; @@ -296,14 +296,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // a following list. if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) { - tmp = get_containing_block(node); - state->in_tight_list_item = - (tmp->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(tmp->parent)) || - (tmp && - tmp->parent && - tmp->parent->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(tmp->parent->parent)); + tmp = get_containing_block(node); + state->in_tight_list_item = + (tmp->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent)) || + (tmp && + tmp->parent && + tmp->parent->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent->parent)); } switch (node->type) { @@ -319,7 +319,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(state->prefix, "> "); } else { cmark_strbuf_truncate(state->prefix, - state->prefix->size - 2); + state->prefix->size - 2); blankline(state); } break; @@ -351,10 +351,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, // we get nice transition from single digits // to double cmark_strbuf_printf(&listmarker, - "%d%s%s", list_number, - list_delim == CMARK_PAREN_DELIM ? - ")" : ".", - list_number < 10 ? " " : " "); + "%d%s%s", list_number, + list_delim == CMARK_PAREN_DELIM ? + ")" : ".", + list_number < 10 ? " " : " "); marker_width = listmarker.size; } if (entering) { @@ -364,14 +364,14 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(state->prefix, " "); } else { lit(state, (char *)listmarker.ptr, false); - for (i=marker_width; i--;) { + for (i = marker_width; i--;) { cmark_strbuf_putc(state->prefix, ' '); } } } else { cmark_strbuf_truncate(state->prefix, - state->prefix->size - - marker_width); + state->prefix->size - + marker_width); cr(state); } cmark_strbuf_free(&listmarker); @@ -408,7 +408,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(state->prefix, " "); out(state, node->as.code.literal, false, LITERAL); cmark_strbuf_truncate(state->prefix, - state->prefix->size - 4); + state->prefix->size - 4); } else { numticks = longest_backtick_sequence(code) + 1; if (numticks < 3) { @@ -517,7 +517,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { lit(state, "<", false); if (strncmp(cmark_node_get_url(node), - "mailto:", 7) == 0) { + "mailto:", 7) == 0) { lit(state, (char *)cmark_node_get_url(node) + 7, false); @@ -582,9 +582,10 @@ char *cmark_render_commonmark(cmark_node *root, int options, int width) if (CMARK_OPT_HARDBREAKS & options) { width = 0; } - struct render_state state = - { options, &commonmark, &prefix, 0, width, - 0, 0, true, false, false}; + struct render_state state = { + options, &commonmark, &prefix, 0, width, + 0, 0, true, false, false + }; cmark_node *cur; cmark_event_type ev_type; cmark_iter *iter = cmark_iter_new(root); diff --git a/src/main.c b/src/main.c index 919160291c..c23071fec6 100644 --- a/src/main.c +++ b/src/main.c @@ -102,13 +102,13 @@ int main(int argc, char *argv[]) width = (int)strtol(argv[i], &unparsed, 10); if (unparsed && strlen(unparsed) > 0) { fprintf(stderr, - "failed parsing width '%s' at '%s'\n", - argv[i], unparsed); + "failed parsing width '%s' at '%s'\n", + argv[i], unparsed); exit(1); } } else { fprintf(stderr, - "--width requires an argument\n"); + "--width requires an argument\n"); exit(1); } } else if ((strcmp(argv[i], "-t") == 0) || -- cgit 0.0.5-2-1-g0f52 From ff0c1e79b2909877aacfdfe8490dca4b8a0aed8e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:06:31 -0700 Subject: Added appveyor.yml --- appveyor.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000000..31066d147f --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,12 @@ +environment: + - PYTHON: "C:\\Python34" + - PYTHON_VERSION: "3.4.1" + - PYTHON_ARCH: "32" + +build: + - @nmake.exe /nologo /f Makefile.nmake + +test_script: + - @nmake.exe /nologo /f Makefile.nmake test + + -- cgit 0.0.5-2-1-g0f52 From 59701edb2e2bb11b1b2eb5aef87244a35f555bfb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:07:44 -0700 Subject: Fixed yaml error in appveyor.yml --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 31066d147f..4c9b792b55 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,9 +4,9 @@ environment: - PYTHON_ARCH: "32" build: - - @nmake.exe /nologo /f Makefile.nmake + - '@nmake.exe /nologo /f Makefile.nmake' test_script: - - @nmake.exe /nologo /f Makefile.nmake test + - '@nmake.exe /nologo /f Makefile.nmake test' -- cgit 0.0.5-2-1-g0f52 From 5eb6317f64acb3ad98ed3bc8fd622942dcba50b5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:08:51 -0700 Subject: Made environment a mapping in appveyor.yaml --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 4c9b792b55..8c9c12e9cc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,7 @@ environment: - - PYTHON: "C:\\Python34" - - PYTHON_VERSION: "3.4.1" - - PYTHON_ARCH: "32" + PYTHON: "C:\\Python34" + PYTHON_VERSION: "3.4.1" + PYTHON_ARCH: "32" build: - '@nmake.exe /nologo /f Makefile.nmake' -- cgit 0.0.5-2-1-g0f52 From 36a19891dd92a93fd77b94cafc0de3242545e7cd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:11:04 -0700 Subject: Trying configuration in appveyor.yml --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 8c9c12e9cc..02721e679b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,8 +3,8 @@ environment: PYTHON_VERSION: "3.4.1" PYTHON_ARCH: "32" -build: - - '@nmake.exe /nologo /f Makefile.nmake' +configuration: + - Release test_script: - '@nmake.exe /nologo /f Makefile.nmake test' -- cgit 0.0.5-2-1-g0f52 From c6222ca227948b598f58cc26a47c4227baeb1b37 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:17:06 -0700 Subject: Added build_script to appveyor --- appveyor.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 02721e679b..dcf15d7d49 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,6 +6,9 @@ environment: configuration: - Release +build_script: + - '@nmake.exe /nologo /f Makefile.nmake all' + test_script: - '@nmake.exe /nologo /f Makefile.nmake test' -- cgit 0.0.5-2-1-g0f52 From 74dfc16b9d57a93249849b7956c8da7af36bf63d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:28:04 -0700 Subject: Tried build_script in appveyor.yml --- appveyor.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index dcf15d7d49..dd2101f6a6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,13 +3,17 @@ environment: PYTHON_VERSION: "3.4.1" PYTHON_ARCH: "32" -configuration: - - Release - build_script: - - '@nmake.exe /nologo /f Makefile.nmake all' + - | + mkdir build 2> nul + pushd build + cmake \ + -G "NMake Makefiles" \ + -D CMAKE_BUILD_TYPE="Release" \ + -D CMAKE_INSTALL_PREFIX="windows" \ + nmake /nologo && popd test_script: - - '@nmake.exe /nologo /f Makefile.nmake test' - + - | + pushd build && nmake /nologo test -- cgit 0.0.5-2-1-g0f52 From 062aee9292d807c90c28fa0a09a888d34bee4dd3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:28:57 -0700 Subject: Fixed tabs in appveyor.yml --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index dd2101f6a6..71ff3cde2a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,9 +8,9 @@ build_script: mkdir build 2> nul pushd build cmake \ - -G "NMake Makefiles" \ - -D CMAKE_BUILD_TYPE="Release" \ - -D CMAKE_INSTALL_PREFIX="windows" \ + -G "NMake Makefiles" \ + -D CMAKE_BUILD_TYPE="Release" \ + -D CMAKE_INSTALL_PREFIX="windows" \ nmake /nologo && popd test_script: -- cgit 0.0.5-2-1-g0f52 From 67e3f65c5f196f3f80dfe4a224a4727a3093e5ae Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:41:13 -0700 Subject: Fixed appveyor build_script --- appveyor.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 71ff3cde2a..0c66d7d631 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,11 +7,9 @@ build_script: - | mkdir build 2> nul pushd build - cmake \ - -G "NMake Makefiles" \ - -D CMAKE_BUILD_TYPE="Release" \ - -D CMAKE_INSTALL_PREFIX="windows" \ - nmake /nologo && popd + cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE="Release" -D CMAKE_INSTALL_PREFIX="windows" + nmake /nologo + popd test_script: - | -- cgit 0.0.5-2-1-g0f52 From 71018bfb292d58cbe0d5ae06fcb1b1b6c80ad02a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:47:01 -0700 Subject: Fixed typo in build script for appveyor --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 0c66d7d631..a04b953fec 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ build_script: - | mkdir build 2> nul pushd build - cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE="Release" -D CMAKE_INSTALL_PREFIX="windows" + cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE="Release" -D CMAKE_INSTALL_PREFIX="windows" .. nmake /nologo popd -- cgit 0.0.5-2-1-g0f52 From 80ed0e17f695be792a7948924c9e33b791e2fd41 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 12:52:43 -0700 Subject: appveyor.yml - set up for using nmake. --- appveyor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index a04b953fec..f1c75b8b5e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,6 +3,10 @@ environment: PYTHON_VERSION: "3.4.1" PYTHON_ARCH: "32" +# set up for nmake: +install: + - '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64' + build_script: - | mkdir build 2> nul -- cgit 0.0.5-2-1-g0f52 From 890a926dec02d8f024a4492248dbff4f84d37ff2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 13:01:37 -0700 Subject: CMakeLists.txt: quote variable to avoid warning. --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 06c13e0b8d..ee3d76e727 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -76,7 +76,7 @@ set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") +elseif(${CMAKE_COMPILER_IS_GNUCC} OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif () -- cgit 0.0.5-2-1-g0f52 From 65e7ab9e1fd07c6df8fdd4dada320cbfef5a1258 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 13:02:42 -0700 Subject: Really fixed cmake warning. --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ee3d76e727..6a1ab7e58a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -76,7 +76,7 @@ set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -elseif(${CMAKE_COMPILER_IS_GNUCC} OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") +elseif(${CMAKE_COMPILER_IS_GNUCC} OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif () -- cgit 0.0.5-2-1-g0f52 From 97da7901e73caa65ff16a7271ecbff11d08ebd7b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 13:09:25 -0700 Subject: Revert "CMakeLists.txt: quote variable to avoid warning." This reverts commit 890a926dec02d8f024a4492248dbff4f84d37ff2. Conflicts: src/CMakeLists.txt --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6a1ab7e58a..594d76e621 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -76,7 +76,7 @@ set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -elseif(${CMAKE_COMPILER_IS_GNUCC} OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") +elseif(CMAKE_COMPILER_IS_GNUCC OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif () -- cgit 0.0.5-2-1-g0f52 From 6b53a312cc5ec7caee8aec46c501666783dd198b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 13:37:19 -0700 Subject: appveyor - add python to path --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index f1c75b8b5e..ba535d8079 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,6 +6,7 @@ environment: # set up for nmake: install: - '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64' + - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" build_script: - | -- cgit 0.0.5-2-1-g0f52 From 7441bb4b85a75869aa7604c0315f4c9f743b04c6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Apr 2015 16:41:30 -0700 Subject: appveyor - removed pushd/popd --- appveyor.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ba535d8079..44ad7f0066 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,12 +11,11 @@ install: build_script: - | mkdir build 2> nul - pushd build + cd build cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE="Release" -D CMAKE_INSTALL_PREFIX="windows" .. nmake /nologo - popd test_script: - | - pushd build && nmake /nologo test + cd build && nmake /nologo test -- cgit 0.0.5-2-1-g0f52 From 2e8143599001e1cb373cd3ae95a9c23d7f8bcc03 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Apr 2015 09:44:43 -0700 Subject: Appveyor - don't cd in test_script. We're already in the build directory after build_script. --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 44ad7f0066..5c6dc65c40 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -17,5 +17,5 @@ build_script: test_script: - | - cd build && nmake /nologo test + nmake /nologo test -- cgit 0.0.5-2-1-g0f52 From 8dc057112e43a979bb23683c7d5225cd48c036db Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Apr 2015 10:31:08 -0700 Subject: appveyor - use nmake for build and test. --- appveyor.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 5c6dc65c40..d1c24e2245 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,13 +9,7 @@ install: - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" build_script: - - | - mkdir build 2> nul - cd build - cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE="Release" -D CMAKE_INSTALL_PREFIX="windows" .. - nmake /nologo + - 'nmake' test_script: - - | - nmake /nologo test - + - 'nmake test' -- cgit 0.0.5-2-1-g0f52 From 835d63b63c920e972b4e72418dea0dd08c667bde Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Apr 2015 10:45:24 -0700 Subject: Fixed spec location in Makefile.nmake. --- Makefile.nmake | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/Makefile.nmake b/Makefile.nmake index 3f3bbce889..3f604e4991 100644 --- a/Makefile.nmake +++ b/Makefile.nmake @@ -2,7 +2,7 @@ SRCDIR=src DATADIR=data BUILDDIR=build INSTALLDIR=windows -SPEC=spec.txt +SPEC=test/spec.txt PROG=$(BUILDDIR)\src\cmark.exe GENERATOR=NMake Makefiles @@ -35,17 +35,3 @@ test: $(SPEC) all distclean: clean del /q src\scanners.c 2> nul del /q spec.md spec.html 2> nul - -### Spec ### - -spec.html: spec.txt template.html $(PROG) - python3 makespec.py html > $@ - -spec.md: spec.txt - python3 makespec.py markdown > $@ - -spec.pdf: spec.md template.tex specfilter.hs - pandoc -s $< --template template.tex \ - --filter ./specfilter.hs -o $@ --latex-engine=xelatex --toc \ - --number-sections -V documentclass=report -V tocdepth=2 \ - -V classoption=twosides -- cgit 0.0.5-2-1-g0f52 From e982e57fc3b4348bb601a8764ce2d17f0dc053ae Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Apr 2015 10:57:24 -0700 Subject: Makefile.nmake fixes. Removed echo, pushd, popd. --- Makefile.nmake | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Makefile.nmake b/Makefile.nmake index 3f604e4991..b0556e2ae7 100644 --- a/Makefile.nmake +++ b/Makefile.nmake @@ -7,21 +7,20 @@ PROG=$(BUILDDIR)\src\cmark.exe GENERATOR=NMake Makefiles all: $(BUILDDIR) - @pushd $(BUILDDIR) && $(MAKE) /nologo && popd + @cd $(BUILDDIR) && $(MAKE) /nologo && cd .. $(BUILDDIR): - @cmake --version > nul || (echo "You need cmake to build this program: http://www.cmake.org/download/" && exit 1) - -mkdir $(BUILDDIR) 2> nul - pushd $(BUILDDIR) && \ + @-mkdir $(BUILDDIR) 2> nul + cd $(BUILDDIR) && \ cmake \ -G "$(GENERATOR)" \ -D CMAKE_BUILD_TYPE=$(BUILD_TYPE) \ -D CMAKE_INSTALL_PREFIX=$(INSTALLDIR) \ .. && \ - popd + cd .. install: all - @pushd $(BUILDDIR) && $(MAKE) /nologo install && popd + @cd $(BUILDDIR) && $(MAKE) /nologo install && cd .. clean: -rmdir /s /q $(BUILDDIR) $(MINGW_INSTALLDIR) 2> nul @@ -30,7 +29,7 @@ $(SRCDIR)\case_fold_switch.inc: $(DATADIR)\CaseFolding-3.2.0.txt perl mkcasefold.pl < $? > $@ test: $(SPEC) all - @pushd $(BUILDDIR) && $(MAKE) /nologo test ARGS="-V" && popd + @cd $(BUILDDIR) && $(MAKE) /nologo test ARGS="-V" && cd .. distclean: clean del /q src\scanners.c 2> nul -- cgit 0.0.5-2-1-g0f52 From f26d60deacc2d4cbce37fb54602f491e12494557 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Apr 2015 11:01:01 -0700 Subject: Use os.path.join in test/cmark.py. For proper cross-platform paths. --- test/cmark.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/cmark.py b/test/cmark.py index 40e8c224f7..1110860306 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -4,6 +4,7 @@ from ctypes import CDLL, c_char_p, c_long from subprocess import * import platform +import os def pipe_through_prog(prog, text): p1 = Popen(prog.split(), stdout=PIPE, stdin=PIPE, stderr=PIPE) @@ -22,17 +23,16 @@ class CMark: self.to_html = lambda x: pipe_through_prog(prog, x) else: sysname = platform.system() - libname = "libcmark" if sysname == 'Darwin': - libname += ".dylib" + libname = "libcmark.dylib" elif sysname == 'Windows': libname = "cmark.dll" else: - libname += ".so" + libname = "libcmark.so" if library_dir: - libpath = library_dir + "/" + libname + libpath = os.path.join(library_dir, libname) else: - libpath = "build/src/" + libname + libpath = os.path.join("build", "src", libname) cmark = CDLL(libpath) markdown = cmark.cmark_markdown_to_html markdown.restype = c_char_p -- cgit 0.0.5-2-1-g0f52 From 153149fb94b3dfe63e8960a457311521ecf302c8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Apr 2015 11:14:21 -0700 Subject: Appveyor - use 64-bit python. Maybe this will help with the dll load failure? --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d1c24e2245..d86785ba95 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,7 @@ environment: - PYTHON: "C:\\Python34" - PYTHON_VERSION: "3.4.1" - PYTHON_ARCH: "32" + PYTHON: "C:\\Python34-x64" + PYTHON_VERSION: "3.4.3" + PYTHON_ARCH: "64" # set up for nmake: install: -- cgit 0.0.5-2-1-g0f52 From 141fb056c7a95ce12ed845a24bdf3f9af66afdfb Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 26 Apr 2015 21:36:34 +0200 Subject: Compile static library with -DCMARK_STATIC_DEFINE Fixes warnings on Windows. --- src/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 594d76e621..894b2c15e0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -87,6 +87,8 @@ set_target_properties(${LIBRARY} PROPERTIES OUTPUT_NAME "cmark" SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} VERSION ${PROJECT_VERSION}) +set_target_properties(${STATICLIBRARY} PROPERTIES + COMPILE_FLAGS -DCMARK_STATIC_DEFINE) if (MSVC) set_target_properties(${STATICLIBRARY} PROPERTIES -- cgit 0.0.5-2-1-g0f52 From 040470aaced3f7f82de713193e48cc1acaab381d Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 26 Apr 2015 21:51:10 +0200 Subject: Suppress warnings about Windows runtime library files Visual Studio Express editions do not include the redistributable files. Set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS to suppress warnings. --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 894b2c15e0..ba3e18e84d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -111,6 +111,7 @@ if (MSVC) APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO) endif(MSVC) +set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) include (InstallRequiredSystemLibraries) install(TARGETS ${PROGRAM} ${LIBRARY} RUNTIME DESTINATION bin -- cgit 0.0.5-2-1-g0f52 From 42ec0dedaa3bb770a689603c52c12a4c6295b0b2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Apr 2015 22:51:15 -0700 Subject: Updated spec.txt. --- test/spec.txt | 136 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 46 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index ac47b1a36c..9d77702439 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -192,8 +192,8 @@ an implementation without writing an abstract syntax tree renderer. This document is generated from a text file, `spec.txt`, written in Markdown with a small extension for the side-by-side tests. -The script `spec2md.pl` can be used to turn `spec.txt` into pandoc -Markdown, which can then be converted into other formats. +The script `tools/makespec.py` can be used to convert `spec.txt` into +HTML or CommonMark (which can then be converted into other formats). In the examples, the `→` character is used to represent tabs. @@ -724,13 +724,14 @@ ATX headers can be empty: ## Setext headers A [setext header](@setext-header) -consists of a line of text, containing at least one -[non-space character], +consists of a line of text, containing at least one [non-space character], with no more than 3 spaces indentation, followed by a [setext header underline]. The line of text must be one that, were it not followed by the setext header underline, -would be interpreted as part of a paragraph: it cannot be a code -block, header, blockquote, horizontal rule, or list. +would be interpreted as part of a paragraph: it cannot be +interpretable as a [code fence], [ATX header][ATX headers], +[block quote][block quotes], [horizontal rule][horizontal rules], +[list item][list items], or [HTML block][HTML blocks]. A [setext header underline](@setext-header-underline) is a sequence of `=` characters or a sequence of `-` characters, with no more than 3 @@ -1811,7 +1812,7 @@ title], which if it is present must be separated from the [link destination] by [whitespace]. No further [non-space character]s may occur on the line. -A [link reference-definition] +A [link reference definition] does not correspond to a structural element of a document. Instead, it defines a label which can be used in [reference link]s and reference-style [images] elsewhere in the document. [Link @@ -2587,7 +2588,7 @@ 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-space character] and not separated from each other by more than one blank line, and *M* is a list - marker *M* of width *W* followed by 0 < *N* < 5 spaces, then the result + marker of width *W* followed by 0 < *N* < 5 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 @@ -2726,7 +2727,7 @@ this example: Here `two` occurs in the same column as the list marker `1.`, but is actually contained in the list item, because there is -sufficent indentation after the last containing blockquote marker. +sufficient indentation after the last containing blockquote marker. The converse is also possible. In the following example, the word `two` occurs far to the right of the initial text of the list item, `one`, but @@ -2852,7 +2853,7 @@ A list item may contain any kind of block: 2. **Item starting with indented code.** If a sequence of lines *Ls* constitute a sequence of blocks *Bs* starting with an indented code block and not separated from each other by more than one blank line, - and *M* is a list marker *M* of width *W* followed by + and *M* is a list marker of width *W* followed by one space, then the result of prepending *M* and the following space to the first line of *Ls*, and indenting subsequent lines of *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. @@ -3001,7 +3002,7 @@ the above case: 3. **Item starting with a blank line.** If a sequence of lines *Ls* starting with a single [blank line] constitute a (possibly empty) sequence of blocks *Bs*, not separated from each other by more than - one blank line, and *M* is a list marker *M* of width *W*, + one blank line, and *M* is a list marker of width *W*, then the result of prepending *M* to the first line of *Ls*, and indenting subsequent lines of *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. @@ -3090,7 +3091,7 @@ A list may start or end with an empty list item: 4. **Indentation.** If a sequence of lines *Ls* constitutes a list item according to rule #1, #2, or #3, then the result of indenting each line - of *L* by 1-3 spaces (the same for each line) also constitutes a + of *Ls* by 1-3 spaces (the same for each line) also constitutes a list item with the same contents and attributes. If a line is empty, then it need not be indented. @@ -4275,8 +4276,8 @@ corresponding codepoints. [Decimal entities](@decimal-entities) consist of `&#` + a string of 1--8 arabic digits + `;`. Again, these -entities need to be recognised and tranformed into their corresponding -UTF8 codepoints. Invalid Unicode codepoints will be written as the +entities need to be recognised and transformed into their corresponding +unicode codepoints. Invalid unicode codepoints will be written as the "unknown codepoint" character (`0xFFFD`) . @@ -4287,7 +4288,8 @@ UTF8 codepoints. Invalid Unicode codepoints will be written as the [Hexadecimal entities](@hexadecimal-entities) consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits -+ `;`. They will also be parsed and turned into their corresponding UTF8 values in the AST. ++ `;`. They will also be parsed and turned into the corresponding +unicode codepoints in the AST. . " ആ ಫ @@ -4581,14 +4583,16 @@ characters that is not preceded or followed by a `_` character. A [left-flanking delimiter run](@left-flanking-delimiter-run) is a [delimiter run] that is (a) not followed by [unicode whitespace], and (b) either not followed by a [punctuation character], or -preceded by [unicode whitespace] or a [punctuation character] or -the beginning of a line. +preceded by [unicode whitespace] or a [punctuation character]. +For purposes of this definition, the beginning and the end of +the line count as unicode whitespace. A [right-flanking delimiter run](@right-flanking-delimiter-run) is a [delimiter run] that is (a) not preceded by [unicode whitespace], and (b) either not preceded by a [punctuation character], or -followed by [unicode whitespace] or a [punctuation character] or -the end of a line. +followed by [unicode whitespace] or a [punctuation character]. +For purposes of this definition, the beginning and the end of +the line count as unicode whitespace. Here are some examples of delimiter runs. @@ -4604,20 +4608,20 @@ Here are some examples of delimiter runs. - right-flanking but not left-flanking: ``` - abc*** - abc_ + abc*** + abc_ "abc"** - _"abc" + "abc"_ ``` - - Both right and right-flanking: + - Both left and right-flanking: ``` - abc***def + abc***def "abc"_"def" ``` - - Neither right nor right-flanking: + - Neither left nor right-flanking: ``` abc *** def @@ -4635,32 +4639,40 @@ are a bit more complex than the ones given here.) The following rules define emphasis and strong emphasis: 1. A single `*` character [can open emphasis](@can-open-emphasis) - iff it is part of a [left-flanking delimiter run]. + iff (if and only if) it is part of a [left-flanking delimiter run]. 2. A single `_` character [can open emphasis] iff it is part of a [left-flanking delimiter run] - and not part of a [right-flanking delimiter run]. + and either (a) not part of a [right-flanking delimiter run] + or (b) part of a [right-flanking delimeter run] + preceded by punctuation. 3. A single `*` character [can close emphasis](@can-close-emphasis) iff it is part of a [right-flanking delimiter run]. -4. A single `_` character [can close emphasis] - iff it is part of a [right-flanking delimiter run] - and not part of a [left-flanking delimiter run]. +4. A single `_` character [can close emphasis] iff + it is part of a [right-flanking delimiter run] + and either (a) not part of a [left-flanking delimiter run] + or (b) part of a [left-flanking delimeter run] + followed by punctuation. 5. A double `**` [can open strong emphasis](@can-open-strong-emphasis) iff it is part of a [left-flanking delimiter run]. -6. A double `__` [can open strong emphasis] - iff it is part of a [left-flanking delimiter run] - and not part of a [right-flanking delimiter run]. +6. A double `__` [can open strong emphasis] iff + it is part of a [left-flanking delimiter run] + and either (a) not part of a [right-flanking delimiter run] + or (b) part of a [right-flanking delimeter run] + preceded by punctuation. 7. A double `**` [can close strong emphasis](@can-close-strong-emphasis) iff it is part of a [right-flanking delimiter run]. 8. A double `__` [can close strong emphasis] - iff it is part of a [right-flanking delimiter run] - and not part of a [left-flanking delimiter run]. + it is part of a [right-flanking delimiter run] + and either (a) not part of a [left-flanking delimiter run] + or (b) part of a [left-flanking delimeter run] + followed by punctuation. 9. Emphasis begins with a delimiter that [can open emphasis] and ends with a delimiter that [can close emphasis], and that uses the same @@ -4822,13 +4834,14 @@ aa_"bb"_cc

                            aa_"bb"_cc

                            . -Here there is no emphasis, because the delimiter runs are -both left- and right-flanking: +This is emphasis, even though the opening delimiter is +both left- and right-flanking, because it is preceded by +punctuation: . -"aa"_"bb"_"cc" +foo-_(bar)_ . -

                            "aa"_"bb"_"cc"

                            +

                            foo-(bar)

                            . Rule 3: @@ -4939,6 +4952,16 @@ _foo_bar_baz_

                            foo_bar_baz

                            . +This is emphasis, even though the closing delimiter is +both left- and right-flanking, because it is followed by +punctuation: + +. +_(bar)_. +. +

                            (bar).

                            +. + Rule 5: . @@ -5035,6 +5058,17 @@ __foo, __bar__, baz__

                            foo, bar, baz

                            . +This is strong emphasis, even though the opening delimiter is +both left- and right-flanking, because it is preceded by +punctuation: + +. +foo-_(bar)_ +. +

                            foo-(bar)

                            +. + + Rule 7: This is not strong emphasis, because the closing delimiter is preceded @@ -5138,6 +5172,16 @@ __foo__bar__baz__

                            foo__bar__baz

                            . +This is strong emphasis, even though the closing delimiter is +both left- and right-flanking, because it is followed by +punctuation: + +. +_(bar)_. +. +

                            (bar).

                            +. + Rule 9: Any nonempty sequence of inline elements can be the contents of an @@ -5706,7 +5750,7 @@ A [link destination](@link-destination) consists of either ASCII space or control characters, and includes parentheses only if (a) they are backslash-escaped or (b) they are part of a balanced pair of unescaped parentheses that is not itself - inside a balanced pair of unescaped paretheses. + inside a balanced pair of unescaped parentheses. A [link title](@link-title) consists of either @@ -5839,8 +5883,8 @@ in Markdown: URL-escaping should be left alone inside the destination, as all URL-escaped characters are also valid URL characters. HTML entities in -the destination will be parsed into their UTF-8 codepoints, as usual, and -optionally URL-escaped when written as HTML. +the destination will be parsed into the corresponding unicode +codepoints, as usual, and optionally URL-escaped when written as HTML. . [link](foo%20bä) @@ -7215,10 +7259,10 @@ foo ## Soft line breaks A regular line break (not in a code span or HTML tag) that is not -preceded by two or more spaces is parsed 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.) +preceded by two or more spaces or a backslash is parsed 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.) . foo -- cgit 0.0.5-2-1-g0f52 From 9b806e05e4b81b213714a9f9e5020486d0602a00 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Apr 2015 22:56:56 -0700 Subject: Fixed _ emphasis parsing to conform to spec. See jgm/CommonMark#317. --- src/inlines.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 3e298dee20..afe564c564 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -301,8 +301,10 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) !utf8proc_is_space(after_char) && !utf8proc_is_punctuation(after_char)); if (c == '_') { - *can_open = left_flanking && !right_flanking; - *can_close = right_flanking && !left_flanking; + *can_open = left_flanking && + (!right_flanking || utf8proc_is_punctuation(before_char)); + *can_close = right_flanking && + (!left_flanking || utf8proc_is_punctuation(after_char)); } else if (c == '\'' || c == '"') { *can_open = left_flanking && !right_flanking; *can_close = right_flanking; -- cgit 0.0.5-2-1-g0f52 From 9cad14e56770af3bc71fb3bbe944418dbcf868cb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Apr 2015 23:11:13 -0700 Subject: Bump version to 0.19.0. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84a219149d..9a6f304ba7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,8 +9,8 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 18) -set(PROJECT_VERSION_PATCH 3) +set(PROJECT_VERSION_MINOR 19) +set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) add_subdirectory(src) -- cgit 0.0.5-2-1-g0f52 From 40c78bcba301d0d02d5179180983873b2e08fa3d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 28 Apr 2015 21:18:27 -0700 Subject: Updated spec. --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 9d77702439..7ad874d729 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.18 -date: 2015-03-03 +version: 0.19 +date: 2015-04-27 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From f31923f09c07da484aa74cdd10eb7552c71a4444 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 28 Apr 2015 21:23:59 -0700 Subject: Updated changelog.txt. --- changelog.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/changelog.txt b/changelog.txt index 2ac61d65b0..e622f0bb2c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,22 @@ +[0.19.0] + + * Fixed `_` emphasis parsing to conform to spec (jgm/CommonMark#317). + * Updated `spec.txt`. + * Compile static library with `-DCMARK_STATIC_DEFINE` (Nick Wellnhofer). + * Suppress warnings about Windows runtime library files (Nick Wellnhofer). + Visual Studio Express editions do not include the redistributable files. + Set `CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS` to suppress warnings. + * Added appyeyor: Windows continuous integration (`appveyor.yml`). + * Use `os.path.join` in `test/cmark.py` for proper cross-platform paths. + * Fixed `Makefile.nmake`. + * Improved `make afl`: added `test/afl_dictionary`, increased timeout + for hangs. + * Improved README with a description of the library's strengths. + * Pass-through Unicode non-characters (Nick Wellnhofer). + Despite their name, Unicode non-characters are valid code points. They + should be passed through by a library like libcmark. + * Check return status of `utf8proc_iterate` (#27). + [0.18.3] * Include patch level in soname (Nick Wellnhofer). Minor version is -- cgit 0.0.5-2-1-g0f52 From 645bcf6a39a534ae2e8840e73196b24c9f24c145 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 29 Apr 2015 07:04:57 -0700 Subject: Updated spec.txt. --- test/spec.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 7ad874d729..5c06ec1073 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5063,9 +5063,9 @@ both left- and right-flanking, because it is preceded by punctuation: . -foo-_(bar)_ +foo-__(bar)__ . -

                            foo-(bar)

                            +

                            foo-(bar)

                            . @@ -5177,9 +5177,9 @@ both left- and right-flanking, because it is followed by punctuation: . -_(bar)_. +__(bar)__. . -

                            (bar).

                            +

                            (bar).

                            . Rule 9: -- cgit 0.0.5-2-1-g0f52 From d12c040d58d70555cc98e397e05ab0d8326b6aca Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 4 May 2015 09:48:52 -0700 Subject: Improved 'make leakcheck'. * We now return an error status if anything in the loop fails. * We now check --smart and --normalize options. --- Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6f58b5213c..360636805b 100644 --- a/Makefile +++ b/Makefile @@ -125,9 +125,14 @@ $(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 commonmark; do \ - cat $< | valgrind --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t $$format >/dev/null; \ - done + 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; \ + done; \ + done; \ + exit $$rc fuzztest: { for i in `seq 1 10`; do \ -- cgit 0.0.5-2-1-g0f52 From f1035464022a8a4e804f5915e6a1388ea49e3fb3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 4 May 2015 09:53:03 -0700 Subject: Straightforward fix for memory leak #32. --- src/iterator.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/iterator.c b/src/iterator.c index c6faf99859..8ed0cc4fc8 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -121,6 +121,7 @@ void cmark_consolidate_text_nodes(cmark_node *root) cmark_strbuf buf = GH_BUF_INIT; cmark_event_type ev_type; cmark_node *cur, *tmp, *next; + char *detached; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); @@ -138,7 +139,9 @@ void cmark_consolidate_text_nodes(cmark_node *root) cmark_node_free(tmp); tmp = next; } - cmark_node_set_literal(cur, (char *)cmark_strbuf_detach(&buf)); + detached = (char *)cmark_strbuf_detach(&buf); + cmark_node_set_literal(cur, detached); + free(detached); } } -- cgit 0.0.5-2-1-g0f52 From 2cbb135cbbc43b330506aaecb04a1177681264d0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 4 May 2015 09:58:30 -0700 Subject: Better solution for memory leak in `cmark_consolidate_text_nodes`. This avoids allocating a new string. Closes #32. --- src/iterator.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/iterator.c b/src/iterator.c index 8ed0cc4fc8..a149072eab 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -121,7 +121,6 @@ void cmark_consolidate_text_nodes(cmark_node *root) cmark_strbuf buf = GH_BUF_INIT; cmark_event_type ev_type; cmark_node *cur, *tmp, *next; - char *detached; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); @@ -139,11 +138,10 @@ void cmark_consolidate_text_nodes(cmark_node *root) cmark_node_free(tmp); tmp = next; } - detached = (char *)cmark_strbuf_detach(&buf); - cmark_node_set_literal(cur, detached); - free(detached); + cmark_node_set_literal(cur, (char *)buf.ptr); } } + cmark_strbuf_free(&buf); cmark_iter_free(iter); } -- cgit 0.0.5-2-1-g0f52 From 5ad8a0c5ba3a4c95a92f498f2d6caa305be18301 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Wed, 6 May 2015 13:54:30 -0400 Subject: New Racket wrapper. Has an almost complete low-level interface, mostly missing the iterator thing. Also some higher-level interface: some thin convenient wrappers, and conversions to/from sexpr format. --- wrappers/wrapper.rkt | 188 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 wrappers/wrapper.rkt diff --git a/wrappers/wrapper.rkt b/wrappers/wrapper.rkt new file mode 100644 index 0000000000..91714aee21 --- /dev/null +++ b/wrappers/wrapper.rkt @@ -0,0 +1,188 @@ +#lang racket/base + +;; Lowlevel interface + +(module low-level racket/base + + (require ffi/unsafe ffi/unsafe/define) + + (provide (all-defined-out)) + + (define-ffi-definer defcmark (ffi-lib "libcmark")) + + (define _cmark_node_type + (_enum '(none + ;; Block + document block-quote list item code-block + html paragraph header hrule + ;; Inline + text softbreak linebreak code inline-html + emph strong link image))) + (define _cmark_list_type + (_enum '(no_list bullet_list ordered_list))) + (define _cmark_delim_type + (_enum '(no_delim period_delim paren_delim))) + (define _cmark_opts + (_bitmask '(sourcepos = 1 hardbreaks = 2 normalize = 4 smart = 8))) + + (define-cpointer-type _node) + + (defcmark cmark_markdown_to_html + (_fun [bs : _bytes] [_int = (bytes-length bs)] _cmark_opts + -> [r : _bytes] -> (begin0 (bytes->string/utf-8 r) (free r)))) + + (defcmark cmark_parse_document + (_fun [bs : _bytes] [_int = (bytes-length bs)] _cmark_opts + -> _node)) + + (defcmark cmark_render_html + (_fun _node _cmark_opts + -> [r : _bytes] -> (begin0 (bytes->string/utf-8 r) (free r)))) + + (defcmark cmark_node_new (_fun _cmark_node_type -> _node)) + (defcmark cmark_node_free (_fun _node -> _void)) + + (defcmark cmark_node_next (_fun _node -> _node/null)) + (defcmark cmark_node_previous (_fun _node -> _node/null)) + (defcmark cmark_node_parent (_fun _node -> _node/null)) + (defcmark cmark_node_first_child (_fun _node -> _node/null)) + (defcmark cmark_node_last_child (_fun _node -> _node/null)) + + (defcmark cmark_node_get_user_data (_fun _node -> _racket)) + (defcmark cmark_node_set_user_data (_fun _node _racket -> _bool)) + (defcmark cmark_node_get_type (_fun _node -> _cmark_node_type)) + (defcmark cmark_node_get_type_string (_fun _node -> _bytes)) + (defcmark cmark_node_get_literal (_fun _node -> _string)) + (defcmark cmark_node_set_literal (_fun _node _string -> _bool)) + (defcmark cmark_node_get_header_level (_fun _node -> _int)) + (defcmark cmark_node_set_header_level (_fun _node _int -> _bool)) + (defcmark cmark_node_get_list_type (_fun _node -> _cmark_list_type)) + (defcmark cmark_node_set_list_type (_fun _node _cmark_list_type -> _bool)) + (defcmark cmark_node_get_list_delim (_fun _node -> _cmark_delim_type)) + (defcmark cmark_node_set_list_delim (_fun _node _cmark_delim_type -> _bool)) + (defcmark cmark_node_get_list_start (_fun _node -> _int)) + (defcmark cmark_node_set_list_start (_fun _node _int -> _bool)) + (defcmark cmark_node_get_list_tight (_fun _node -> _bool)) + (defcmark cmark_node_set_list_tight (_fun _node _bool -> _bool)) + (defcmark cmark_node_get_fence_info (_fun _node -> _string)) + (defcmark cmark_node_set_fence_info (_fun _node _string -> _bool)) + (defcmark cmark_node_get_url (_fun _node -> _string)) + (defcmark cmark_node_set_url (_fun _node _string -> _bool)) + (defcmark cmark_node_get_title (_fun _node -> _string)) + (defcmark cmark_node_set_title (_fun _node _string -> _bool)) + (defcmark cmark_node_get_start_line (_fun _node -> _int)) + (defcmark cmark_node_get_start_column (_fun _node -> _int)) + (defcmark cmark_node_get_end_line (_fun _node -> _int)) + (defcmark cmark_node_get_end_column (_fun _node -> _int)) + + (defcmark cmark_node_unlink (_fun _node -> _void)) + (defcmark cmark_node_insert_before (_fun _node _node -> _bool)) + (defcmark cmark_node_insert_after (_fun _node _node -> _bool)) + (defcmark cmark_node_prepend_child (_fun _node _node -> _bool)) + (defcmark cmark_node_append_child (_fun _node _node -> _bool)) + (defcmark cmark_consolidate_text_nodes (_fun _node -> _void)) + + ) + +;; Rackety interface + +(module high-level racket/base + + (require (submod ".." low-level) ffi/unsafe) + + (provide cmark-markdown-to-html) + (define (cmark-markdown-to-html str [options '(normalize smart)]) + (cmark_markdown_to_html (if (bytes? str) str (string->bytes/utf-8 str)) + options)) + + (require (for-syntax racket/base racket/syntax)) + (define-syntax (make-getter+setter stx) + (syntax-case stx () + [(_ name) (with-syntax ([(getter setter) + (map (λ(op) (format-id #'name "cmark_node_~a_~a" + op #'name)) + '(get set))]) + #'(cons getter setter))])) + (define-syntax-rule (define-getters+setters name [type field ...] ...) + (define name (list (list 'type (make-getter+setter field) ...) ...))) + (define-getters+setters getters+setters + [header header_level] [code-block fence_info] + [link url title] [image url title] + [list list_type list_delim list_start list_tight]) + + (provide cmark->sexpr) + (define (cmark->sexpr node) + (define text (cmark_node_get_literal node)) + (define type (cmark_node_get_type node)) + (define children + (let loop ([node (cmark_node_first_child node)]) + (if (not node) '() + (cons (cmark->sexpr node) (loop (cmark_node_next node)))))) + (define info + (cond [(assq type getters+setters) + => (λ(gss) (map (λ(gs) ((car gs) node)) (cdr gss)))] + [else '()])) + (define (assert-no what-not b) + (when b (error 'cmark->sexpr "unexpected ~a in ~s" what-not type))) + (cond [(memq type '(document paragraph header block-quote list item + emph strong link image)) + (assert-no 'text text) + (list type info children)] + [(memq type '(text code code-block html inline-html + softbreak linebreak hrule)) + (assert-no 'children (pair? children)) + (list type info text)] + [else (error 'cmark->sexpr "unknown type: ~s" type)])) + + (provide sexpr->cmark) + (define (sexpr->cmark sexpr) ; assumes valid input, as generated by the above + (define (loop sexpr) + (define type (car sexpr)) + (define info (cadr sexpr)) + (define data (caddr sexpr)) + (define node (cmark_node_new type)) + (let ([gss (assq type getters+setters)]) + (when gss + (unless (= (length (cdr gss)) (length info)) + (error 'sexpr->cmark "bad number of info values in ~s" sexpr)) + (for-each (λ(gs x) ((cdr gs) node x)) (cdr gss) info))) + (cond [(string? data) (cmark_node_set_literal node data)] + [(not data) (void)] + [(list? data) + (for ([child (in-list data)]) + (cmark_node_append_child node (sexpr->cmark child)))] + [else (error 'sexpr->cmark "bad data in ~s" sexpr)]) + node) + (define root (loop sexpr)) + (register-finalizer root cmark_node_free) + root) + + ;; Registers a `cmark_node_free` finalizer + (provide cmark-parse-document) + (define (cmark-parse-document str [options '(normalize smart)]) + (define root (cmark_parse_document + (if (bytes? str) str (string->bytes/utf-8 str)) + options)) + (register-finalizer root cmark_node_free) + root) + + (provide cmark-render-html) + (define (cmark-render-html root [options '(normalize smart)]) + (cmark_render_html root options))) + +#; ;; sample use +(begin + (require 'high-level racket/string) + (cmark-render-html + (cmark-parse-document + (string-join '("foo" + "===" + "" + "> blah" + ">" + "> blah *blah* `bar()` blah:" + ">" + "> function foo() {" + "> bar();" + "> }") + "\n")))) -- cgit 0.0.5-2-1-g0f52 From 36ab6fcfb426000eeb2d341d049f65a3d3d46450 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 14:07:33 -0700 Subject: Added build status badges to README.md. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 0fa1d8a3f5..5d63b7e2a4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ cmark ===== +[![Build Status]](https://travis-ci.org/jgm/cmark) +[![Windows Build Status]](https://ci.appveyor.com/project/jgm/cmark) + `cmark` is the C reference implementation of [CommonMark], a rationalized version of Markdown syntax with a [spec][the spec]. (For the JavaScript reference implementation, see @@ -158,3 +161,5 @@ most of the C library's API and its test harness. [cmake]: http://www.cmake.org/download/ [re2c]: http://re2c.org [commonmark.js]: https://github.com/jgm/commonmark.js +[Build Status]: https://img.shields.io/travis/jgm/cmark/master.svg?style=flat +[Windows Build Status]: https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true -- cgit 0.0.5-2-1-g0f52 From 8dab8b603d3f115d7830f3d90b071ab784596978 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 14:26:56 -0700 Subject: Removed wrapper3.py, made wrapper.py work with python 2/3. Also improved the wrapper to work with windows, and to use smart punctuation (as an example). In the future we may want to use cffi instead of ctypes. It is like luajit ffi, and allows us to use constants from the C library. --- wrappers/wrapper.py | 22 ++++++++++++++++++---- wrappers/wrapper3.py | 25 ------------------------- 2 files changed, 18 insertions(+), 29 deletions(-) delete mode 100755 wrappers/wrapper3.py diff --git a/wrappers/wrapper.py b/wrappers/wrapper.py index 52cbfc75aa..44d982cda1 100755 --- a/wrappers/wrapper.py +++ b/wrappers/wrapper.py @@ -1,6 +1,8 @@ #!/usr/bin/env python # Example for using the shared library from python +# Will work with either python 2 or python 3 +# Requires cmark library to be installed from ctypes import CDLL, c_char_p, c_long import sys @@ -9,15 +11,27 @@ import platform sysname = platform.system() if sysname == 'Darwin': - cmark = CDLL("build/src/libcmark.dylib") + libname = "libcmark.dylib" +elif sysname == 'Windows': + libname = "cmark.dll" else: - cmark = CDLL("build/src/libcmark.so") + libname = "libcmark.so" +cmark = CDLL(libname) markdown = cmark.cmark_markdown_to_html markdown.restype = c_char_p -markdown.argtypes = [c_char_p, c_long] +markdown.argtypes = [c_char_p, c_long, c_long] + +opts = 8 # CMARK_OPT_PRETTY def md2html(text): - return markdown(text, len(text)) + if sys.version_info >= (3,0): + textbytes = text.encode('utf-8') + textlen = len(textbytes) + return markdown(textbytes, textlen, opts).decode('utf-8') + else: + textbytes = text + textlen = len(text) + return markdown(textbytes, textlen, opts) sys.stdout.write(md2html(sys.stdin.read())) diff --git a/wrappers/wrapper3.py b/wrappers/wrapper3.py deleted file mode 100755 index 7a777fa1ed..0000000000 --- a/wrappers/wrapper3.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python3 - -# Example for using the shared library from python - -from ctypes import CDLL, c_char_p, c_long -import sys -import platform - -sysname = platform.system() - -if sysname == 'Darwin': - cmark = CDLL("build/src/libcmark.dylib") -else: - cmark = CDLL("build/src/libcmark.so") - -markdown = cmark.cmark_markdown_to_html -markdown.restype = c_char_p -markdown.argtypes = [c_char_p, c_long] - -def md2html(text): - textbytes = text.encode('utf-8') - textlen = len(textbytes) - return markdown(textbytes, textlen).decode('utf-8') - -sys.stdout.write(md2html(sys.stdin.read())) -- cgit 0.0.5-2-1-g0f52 From f6207586974fc638cef13b7b05cdfdb13513e2c2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 14:31:04 -0700 Subject: wrapper.rb: added argument for options. --- wrappers/wrapper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wrappers/wrapper.rb b/wrappers/wrapper.rb index 59a9b87560..2359366f34 100755 --- a/wrappers/wrapper.rb +++ b/wrappers/wrapper.rb @@ -4,12 +4,12 @@ require 'ffi' module CMark extend FFI::Library ffi_lib ['libcmark', 'cmark'] - attach_function :cmark_markdown_to_html, [:string, :int], :string + attach_function :cmark_markdown_to_html, [:string, :int, :int], :string end def markdown_to_html(s) len = s.bytesize - CMark::cmark_markdown_to_html(s, len) + CMark::cmark_markdown_to_html(s, len, 0) end STDOUT.write(markdown_to_html(ARGF.read())) -- cgit 0.0.5-2-1-g0f52 From 64c2fb9e47c1857a0d6c8a24ca56e7e99be4ddd4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 14:43:48 -0700 Subject: Revised luajit wrapper. --- wrappers/wrapper.lua | 326 ++++++++++++++++++++++++++++----------------------- 1 file changed, 182 insertions(+), 144 deletions(-) diff --git a/wrappers/wrapper.lua b/wrappers/wrapper.lua index 11c5183280..023e0b3e73 100755 --- a/wrappers/wrapper.lua +++ b/wrappers/wrapper.lua @@ -5,197 +5,235 @@ local ffi = require("ffi") cmark = ffi.load("libcmark") ffi.cdef[[ +char *cmark_markdown_to_html(const char *text, int len, int options); - char *cmark_markdown_to_html(const char *text, int len); - typedef enum { - /* Block */ - CMARK_NODE_DOCUMENT, - CMARK_NODE_BLOCK_QUOTE, - CMARK_NODE_LIST, - CMARK_NODE_LIST_ITEM, - CMARK_NODE_CODE_BLOCK, - CMARK_NODE_HTML, - CMARK_NODE_PARAGRAPH, - CMARK_NODE_HEADER, - CMARK_NODE_HRULE, - CMARK_NODE_REFERENCE_DEF, +typedef enum { + /* Error status */ + CMARK_NODE_NONE, - CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, - CMARK_NODE_LAST_BLOCK = CMARK_NODE_REFERENCE_DEF, + /* Block */ + CMARK_NODE_DOCUMENT, + CMARK_NODE_BLOCK_QUOTE, + CMARK_NODE_LIST, + CMARK_NODE_ITEM, + CMARK_NODE_CODE_BLOCK, + CMARK_NODE_HTML, + CMARK_NODE_PARAGRAPH, + CMARK_NODE_HEADER, + CMARK_NODE_HRULE, - /* Inline */ - CMARK_NODE_TEXT, - CMARK_NODE_SOFTBREAK, - CMARK_NODE_LINEBREAK, - CMARK_NODE_INLINE_CODE, - CMARK_NODE_INLINE_HTML, - CMARK_NODE_EMPH, - CMARK_NODE_STRONG, - CMARK_NODE_LINK, - CMARK_NODE_IMAGE, + CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_HRULE, - CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, - CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, - } cmark_node_type; + /* Inline */ + CMARK_NODE_TEXT, + CMARK_NODE_SOFTBREAK, + CMARK_NODE_LINEBREAK, + CMARK_NODE_CODE, + CMARK_NODE_INLINE_HTML, + CMARK_NODE_EMPH, + CMARK_NODE_STRONG, + CMARK_NODE_LINK, + CMARK_NODE_IMAGE, - typedef enum { - CMARK_NO_LIST, - CMARK_BULLET_LIST, - CMARK_ORDERED_LIST - } cmark_list_type; + CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, + CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, +} cmark_node_type; - typedef enum { - CMARK_PERIOD_DELIM, - CMARK_PAREN_DELIM - } cmark_delim_type; - typedef struct cmark_node cmark_node; - typedef struct cmark_parser cmark_parser; +typedef enum { + CMARK_NO_LIST, + CMARK_BULLET_LIST, + CMARK_ORDERED_LIST +} cmark_list_type; - cmark_node* cmark_node_new(cmark_node_type type); +typedef enum { + CMARK_NO_DELIM, + CMARK_PERIOD_DELIM, + CMARK_PAREN_DELIM +} cmark_delim_type; - void - cmark_node_free(cmark_node *node); +typedef struct cmark_node cmark_node; +typedef struct cmark_parser cmark_parser; +typedef struct cmark_iter cmark_iter; - cmark_node* cmark_node_next(cmark_node *node); +typedef enum { + CMARK_EVENT_NONE, + CMARK_EVENT_DONE, + CMARK_EVENT_ENTER, + CMARK_EVENT_EXIT +} cmark_event_type; - cmark_node* cmark_node_previous(cmark_node *node); +cmark_node* +cmark_node_new(cmark_node_type type); - cmark_node* cmark_node_parent(cmark_node *node); +void +cmark_node_free(cmark_node *node); - cmark_node* cmark_node_first_child(cmark_node *node); +cmark_node* +cmark_node_next(cmark_node *node); - cmark_node* cmark_node_last_child(cmark_node *node); +cmark_node* +cmark_node_previous(cmark_node *node); - cmark_node_type cmark_node_get_type(cmark_node *node); +cmark_node* +cmark_node_parent(cmark_node *node); - const char* cmark_node_get_string_content(cmark_node *node); +cmark_node* +cmark_node_first_child(cmark_node *node); - int cmark_node_set_string_content(cmark_node *node, const char *content); +cmark_node* +cmark_node_last_child(cmark_node *node); - int cmark_node_get_header_level(cmark_node *node); +cmark_iter* +cmark_iter_new(cmark_node *root); - int cmark_node_set_header_level(cmark_node *node, int level); +void +cmark_iter_free(cmark_iter *iter); - cmark_list_type cmark_node_get_list_type(cmark_node *node); +cmark_event_type +cmark_iter_next(cmark_iter *iter); - int cmark_node_set_list_type(cmark_node *node, cmark_list_type type); +cmark_node* +cmark_iter_get_node(cmark_iter *iter); - int cmark_node_get_list_start(cmark_node *node); +cmark_event_type +cmark_iter_get_event_type(cmark_iter *iter); - int cmark_node_set_list_start(cmark_node *node, int start); +cmark_node* +cmark_iter_get_root(cmark_iter *iter); - int cmark_node_get_list_tight(cmark_node *node); +void +cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type); - int cmark_node_set_list_tight(cmark_node *node, int tight); +void* +cmark_node_get_user_data(cmark_node *node); - const char* cmark_node_get_fence_info(cmark_node *node); +int +cmark_node_set_user_data(cmark_node *node, void *user_data); - int cmark_node_set_fence_info(cmark_node *node, const char *info); +cmark_node_type +cmark_node_get_type(cmark_node *node); - const char* cmark_node_get_url(cmark_node *node); +const char* +cmark_node_get_type_string(cmark_node *node); - int cmark_node_set_url(cmark_node *node, const char *url); +const char* +cmark_node_get_literal(cmark_node *node); - const char* cmark_node_get_title(cmark_node *node); +int +cmark_node_set_literal(cmark_node *node, const char *content); - int cmark_node_set_title(cmark_node *node, const char *title); +int +cmark_node_get_header_level(cmark_node *node); - int cmark_node_get_start_line(cmark_node *node); +int +cmark_node_set_header_level(cmark_node *node, int level); - int cmark_node_get_start_column(cmark_node *node); +cmark_list_type +cmark_node_get_list_type(cmark_node *node); - int cmark_node_get_end_line(cmark_node *node); +int +cmark_node_set_list_type(cmark_node *node, cmark_list_type type); - void cmark_node_unlink(cmark_node *node); +cmark_delim_type +cmark_node_get_list_delim(cmark_node *node); - int cmark_node_insert_before(cmark_node *node, cmark_node *sibling); +int +cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim); - int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); +int +cmark_node_get_list_start(cmark_node *node); - int cmark_node_prepend_child(cmark_node *node, cmark_node *child); +int +cmark_node_set_list_start(cmark_node *node, int start); - int cmark_node_append_child(cmark_node *node, cmark_node *child); +int +cmark_node_get_list_tight(cmark_node *node); - cmark_parser *cmark_parser_new(); +int +cmark_node_set_list_tight(cmark_node *node, int tight); - void cmark_parser_free(cmark_parser *parser); +const char* +cmark_node_get_fence_info(cmark_node *node); - cmark_node *cmark_parser_finish(cmark_parser *parser); +int +cmark_node_set_fence_info(cmark_node *node, const char *info); - void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); +const char* +cmark_node_get_url(cmark_node *node); - cmark_node *cmark_parse_document(const char *buffer, size_t len); +int +cmark_node_set_url(cmark_node *node, const char *url); - char *cmark_render_ast(cmark_node *root); +const char* +cmark_node_get_title(cmark_node *node); - char *cmark_render_html(cmark_node *root); +int +cmark_node_set_title(cmark_node *node, const char *title); + +int +cmark_node_get_start_line(cmark_node *node); + +int +cmark_node_get_start_column(cmark_node *node); + +int +cmark_node_get_end_line(cmark_node *node); + +int +cmark_node_get_end_column(cmark_node *node); + +void +cmark_node_unlink(cmark_node *node); + +int +cmark_node_insert_before(cmark_node *node, cmark_node *sibling); + +int +cmark_node_insert_after(cmark_node *node, cmark_node *sibling); + +int +cmark_node_prepend_child(cmark_node *node, cmark_node *child); + +int +cmark_node_append_child(cmark_node *node, cmark_node *child); + +void +cmark_consolidate_text_nodes(cmark_node *root); + +cmark_parser *cmark_parser_new(int options); + +void cmark_parser_free(cmark_parser *parser); + +void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); + +cmark_node *cmark_parser_finish(cmark_parser *parser); + +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); + +char *cmark_render_xml(cmark_node *root, int options); + +char *cmark_render_html(cmark_node *root, int options); + +char *cmark_render_man(cmark_node *root, int options); + +char *cmark_render_commonmark(cmark_node *root, int options, int width); + +extern const int cmark_version; + +extern const char cmark_version_string[]; ]] +CMARK_OPT_DEFAULT = 0 +CMARK_OPT_SOURCEPOS = 1 +CMARK_OPT_HARDBREAKS = 2 +CMARK_OPT_NORMALIZE = 4 +CMARK_OPT_SMART = 8 + local inp = io.read("*all") -local doc = cmark.cmark_parse_document(inp, string.len(inp)) - -local cur = doc -local next -local child - -local walk = function(action) - level = 0 - while cur ~= nil do - action(cur, level) - child = cmark.cmark_node_first_child(cur) - if child == nil then - next = cmark.cmark_node_next(cur) - while next == nil do - cur = cmark.cmark_node_parent(cur) - level = level - 1 - if cur == nil then - break - else - next = cmark.cmark_node_next(cur) - end - end - cur = next - else - level = level + 1 - cur = child - end - end -end - -local type_table = { - 'BLOCK_QUOTE', - 'LIST', - 'LIST_ITEM', - 'CODE_BLOCK', - 'HTML', - 'PARAGRAPH', - 'HEADER', - 'HRULE', - 'REFERENCE_DEF', - 'TEXT', - 'SOFTBREAK', - 'LINEBREAK', - 'INLINE_CODE', - 'INLINE_HTML', - 'EMPH', - 'STRONG', - 'LINK', - 'IMAGE', -} -type_table[0] = 'DOCUMENT' - -local function print_type(node, level) - local t = tonumber(cmark.cmark_node_get_type(node)) - io.write(string.rep(' ', level) .. type_table[t]) - if t == cmark.CMARK_NODE_TEXT then - io.write(' ' .. ffi.string(cmark.cmark_node_get_string_content(node))) - end - io.write('\n') -end - -walk(print_type) - --- local html = ffi.string(cmark.cmark_render_html(doc)) --- print(html) +local doc = cmark.cmark_parse_document(inp, string.len(inp), CMARK_OPT_SMART) +local html = ffi.string(cmark.cmark_render_html(doc, CMARK_OPT_DEFAULT)) +print(html) -- cgit 0.0.5-2-1-g0f52 From 6456e7c959097d3873b413afd8ab7b4bac88bfee Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 14:45:45 -0700 Subject: Added note to wrapper.rkt, requires racket 5.3+. --- wrappers/wrapper.rkt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wrappers/wrapper.rkt b/wrappers/wrapper.rkt index 91714aee21..d9b34e849f 100644 --- a/wrappers/wrapper.rkt +++ b/wrappers/wrapper.rkt @@ -1,5 +1,7 @@ #lang racket/base +;; requires racket >= 5.3 because of submodules + ;; Lowlevel interface (module low-level racket/base -- cgit 0.0.5-2-1-g0f52 From 6d27ebf98e4de6bc8422eef495ea86c098c72e67 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 14:49:37 -0700 Subject: README: add links to go, perl, haskell wrapper libraries. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5d63b7e2a4..89ba16fea8 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,10 @@ Advantages of this library: It is easy to use `libcmark` in python, lua, ruby, and other dynamic languages: see the `wrappers/` subdirectory for some simple examples. +There are also libraries that wrap `libcmark` for +[go](https://github.com/rhinoman/go-commonmark), +[Haskell](http://hackage.haskell.org/package/cmark), +and [Perl](https://metacpan.org/release/CommonMark). Installing ---------- -- cgit 0.0.5-2-1-g0f52 From 39c3554151d40464cd1694a4013acd1e0188dbc7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 15:08:55 -0700 Subject: cmark_consolidate_text_nodes: avoid some unnecessary allocation. This improves on #32, I think. @elibarzilay, does this look better? We now avoid the allocations associated with cmark_get_literal, and copy directly from the chunk to the buffer. --- src/iterator.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/iterator.c b/src/iterator.c index a149072eab..6d77ffcb18 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -129,15 +129,16 @@ void cmark_consolidate_text_nodes(cmark_node *root) cur->next && cur->next->type == CMARK_NODE_TEXT) { cmark_strbuf_clear(&buf); - cmark_strbuf_puts(&buf, cmark_node_get_literal(cur)); + cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len); tmp = cur->next; while (tmp && tmp->type == CMARK_NODE_TEXT) { cmark_iter_next(iter); // advance pointer - cmark_strbuf_puts(&buf, cmark_node_get_literal(tmp)); + cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len); next = tmp->next; cmark_node_free(tmp); tmp = next; } + cmark_strbuf_putc(&buf, 0); cmark_node_set_literal(cur, (char *)buf.ptr); } } -- cgit 0.0.5-2-1-g0f52 From c06c705260a6681a8bb5eebecd35422e388cab9f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 6 May 2015 17:45:44 -0700 Subject: Updated benchmarks. We are now as fast as sundown (tied for fastest). --- benchmarks.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index b515c73fee..58b3de4a53 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -14,8 +14,8 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | marked | 1.94 | | **commonmark.js** | 1.93 | | discount | 1.86 | -| **cmark** | 0.36 | -| sundown | 0.34 | +| sundown | 0.33 | +| **cmark** | 0.33 | To run these benchmarks, use `make bench PROG=/path/to/program`. @@ -28,6 +28,6 @@ Markdown sources of all the localizations of the first edition of time is the *difference* between the time to run the program with the benchmark input and the time to run it with no input. (This procedure ensures that implementations in dynamic languages are -not penalized by startup time.) Amedian of ten runs is taken. The +not penalized by startup time.) A median of ten runs is taken. The process is reniced to a high priority so that the system doesn't interrupt runs. -- cgit 0.0.5-2-1-g0f52 From 5f52f7be7fa1e119fc74cabe1a3a4fd44b6e4623 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Thu, 7 May 2015 17:26:36 +0200 Subject: Multiple issues with numeric entities This closes #33. --- api_test/main.c | 35 +++++++++++++++++++++++++++++++++++ src/houdini_html_u.c | 39 ++++++++++++++++++++++++++------------- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 3390ac6e58..029a87941a 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -665,6 +665,40 @@ test_continuation_byte(test_batch_runner *runner, const char *utf8) } } +static void +numeric_entities(test_batch_runner *runner) +{ + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 0"); + test_md_to_html(runner, "퟿", "

                            \xED\x9F\xBF

                            \n", + "Valid numeric entity 0xD7FF"); + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 0xD800"); + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 0xDFFF"); + test_md_to_html(runner, "", "

                            \xEE\x80\x80

                            \n", + "Valid numeric entity 0xE000"); + test_md_to_html(runner, "􏿿", "

                            \xF4\x8F\xBF\xBF

                            \n", + "Valid numeric entity 0x10FFFF"); + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 0x110000"); + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 0x80000000"); + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 0xFFFFFFFF"); + test_md_to_html(runner, "�", "

                            " UTF8_REPL "

                            \n", + "Invalid numeric entity 99999999"); + + test_md_to_html(runner, "&#;", "

                            &#;

                            \n", + "Min decimal entity length"); + test_md_to_html(runner, "&#x;", "

                            &#x;

                            \n", + "Min hexadecimal entity length"); + test_md_to_html(runner, "�", "

                            &#999999999;

                            \n", + "Max decimal entity length"); + test_md_to_html(runner, "A", "

                            &#x000000041;

                            \n", + "Max hexadecimal entity length"); +} + static void test_md_to_html(test_batch_runner *runner, const char *markdown, const char *expected_html, const char *msg) @@ -690,6 +724,7 @@ int main() { parser(runner); render_html(runner); utf8(runner); + numeric_entities(runner); test_cplusplus(runner); test_print_summary(runner); diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 2cb14b48cf..eaf295ec53 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -12,32 +12,45 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size) { size_t i = 0; - if (size > 3 && src[0] == '#') { - int codepoint = 0; + if (size >= 3 && src[0] == '#') { + int codepoint = 0; + int num_digits = 0; if (_isdigit(src[1])) { for (i = 1; i < size && _isdigit(src[i]); ++i) { - int cp = (codepoint * 10) + (src[i] - '0'); + codepoint = (codepoint * 10) + (src[i] - '0'); - if (cp < codepoint) - return 0; - - codepoint = cp; + if (codepoint >= 0x110000) { + // Keep counting digits but + // avoid integer overflow. + codepoint = 0x110000; + } } + + num_digits = i - 1; } else if (src[1] == 'x' || src[1] == 'X') { for (i = 2; i < size && _isxdigit(src[i]); ++i) { - int cp = (codepoint * 16) + ((src[i] | 32) % 39 - 9); + codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9); - if (cp < codepoint) - return 0; - - codepoint = cp; + if (codepoint >= 0x110000) { + // Keep counting digits but + // avoid integer overflow. + codepoint = 0x110000; + } } + + num_digits = i - 2; } - if (i < size && src[i] == ';' && codepoint) { + if (num_digits >= 1 && num_digits <= 8 && + i < size && src[i] == ';') { + if (codepoint == 0 || + (codepoint >= 0xD800 && codepoint < 0xE000) || + codepoint >= 0x110000) { + codepoint = 0xFFFD; + } utf8proc_encode_char(codepoint, ob); return i + 1; } -- cgit 0.0.5-2-1-g0f52 From bc5f16f146558a1faf9be6abe034755421f6ecce Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 7 May 2015 10:52:06 -0700 Subject: cmark_consolidate_text_nodes: Avoid an unnecessary string allocation. --- src/iterator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/iterator.c b/src/iterator.c index 6d77ffcb18..f18e3bfe6f 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -138,8 +138,8 @@ void cmark_consolidate_text_nodes(cmark_node *root) cmark_node_free(tmp); tmp = next; } - cmark_strbuf_putc(&buf, 0); - cmark_node_set_literal(cur, (char *)buf.ptr); + cmark_chunk_free(&cur->as.literal); + cur->as.literal = cmark_chunk_buf_detach(&buf); } } -- cgit 0.0.5-2-1-g0f52 From 5ba5740f7e4404c0111a37f77db42c105740a6ff Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 May 2015 10:21:03 -0700 Subject: Added link to CommonMarker, ruby wrapper, in docs. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 89ba16fea8..18ee8ba0c3 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ languages: see the `wrappers/` subdirectory for some simple examples. There are also libraries that wrap `libcmark` for [go](https://github.com/rhinoman/go-commonmark), [Haskell](http://hackage.haskell.org/package/cmark), +[ruby](https://github.com/gjtorikian/commonmarker), and [Perl](https://metacpan.org/release/CommonMark). Installing -- cgit 0.0.5-2-1-g0f52 From da23f80b53d47c76a85ba163cb0fb426050f3738 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 9 May 2015 15:57:35 +0200 Subject: Store link URL and title as cmark_chunk --- src/chunk.h | 2 ++ src/html.c | 18 ++++++++------- src/inlines.c | 67 ++++++++++++++++++++++++++++++++------------------------ src/inlines.h | 4 ++-- src/node.c | 27 +++++------------------ src/node.h | 4 ++-- src/references.c | 4 ++-- src/references.h | 4 ++-- src/xml.c | 6 +++-- 9 files changed, 68 insertions(+), 68 deletions(-) diff --git a/src/chunk.h b/src/chunk.h index 54c4b1602e..8b4333a1c7 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -7,6 +7,8 @@ #include "cmark_ctype.h" #include "buffer.h" +#define CMARK_CHUNK_EMPTY { NULL, 0, 0 } + typedef struct { unsigned char *data; int len; diff --git a/src/html.c b/src/html.c index f1b88fa1c0..c15f6f44cb 100644 --- a/src/html.c +++ b/src/html.c @@ -261,12 +261,13 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LINK: if (entering) { cmark_strbuf_puts(html, "
                            as.link.url) - escape_href(html, node->as.link.url, -1); + escape_href(html, node->as.link.url.data, + node->as.link.url.len); - if (node->as.link.title) { + if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); - escape_html(html, node->as.link.title, -1); + escape_html(html, node->as.link.title.data, + node->as.link.title.len); } cmark_strbuf_puts(html, "\">"); @@ -278,15 +279,16 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_IMAGE: if (entering) { cmark_strbuf_puts(html, "as.link.url) - escape_href(html, node->as.link.url, -1); + escape_href(html, node->as.link.url.data, + node->as.link.url.len); cmark_strbuf_puts(html, "\" alt=\""); state->plain = node; } else { - if (node->as.link.title) { + if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); - escape_html(html, node->as.link.title, -1); + escape_html(html, node->as.link.title.data, + node->as.link.title.len); } cmark_strbuf_puts(html, "\" />"); diff --git a/src/inlines.c b/src/inlines.c index afe564c564..fc39a5f6f7 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -59,31 +59,33 @@ static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); static int subject_find_special_char(subject *subj, int options); -static unsigned char *cmark_clean_autolink(cmark_chunk *url, int is_email) +static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) { cmark_strbuf buf = GH_BUF_INIT; cmark_chunk_trim(url); - if (url->len == 0) - return NULL; + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } if (is_email) cmark_strbuf_puts(&buf, "mailto:"); houdini_unescape_html_f(&buf, url->data, url->len); - return cmark_strbuf_detach(&buf); + return cmark_chunk_buf_detach(&buf); } -static inline cmark_node *make_link(cmark_node *label, unsigned char *url, unsigned char *title) +static inline cmark_node *make_link(cmark_node *label, cmark_chunk *url, cmark_chunk *title) { cmark_node* e = (cmark_node *)calloc(1, sizeof(*e)); if(e != NULL) { e->type = CMARK_NODE_LINK; e->first_child = label; e->last_child = label; - e->as.link.url = url; - e->as.link.title = title; + e->as.link.url = *url; + e->as.link.title = *title; e->next = NULL; label->parent = e; } @@ -92,7 +94,9 @@ static inline cmark_node *make_link(cmark_node *label, unsigned char *url, unsig static inline cmark_node* make_autolink(cmark_node* label, cmark_chunk url, int is_email) { - return make_link(label, cmark_clean_autolink(&url, is_email), NULL); + cmark_chunk clean_url = cmark_clean_autolink(&url, is_email); + cmark_chunk title = CMARK_CHUNK_EMPTY; + return make_link(label, &clean_url, &title); } // Create an inline with a literal string value. @@ -134,19 +138,20 @@ static inline cmark_node* make_simple(cmark_node_type t) return e; } -static unsigned char *bufdup(const unsigned char *buf) +// Duplicate a chunk by creating a copy of the buffer not by reusing the +// buffer like cmark_chunk_dup does. +static cmark_chunk chunk_clone(cmark_chunk *src) { - unsigned char *new_buf = NULL; + cmark_chunk c; + int len = src->len; - if (buf) { - int len = strlen((char *)buf); - new_buf = (unsigned char *)calloc(len + 1, sizeof(*new_buf)); - if(new_buf != NULL) { - memcpy(new_buf, buf, len + 1); - } - } + c.len = len; + c.data = (unsigned char *)malloc(len + 1); + c.alloc = 1; + memcpy(c.data, src->data, len); + c.data[len] = '\0'; - return new_buf; + return c; } static void subject_from_buf(subject *e, cmark_strbuf *buffer, @@ -622,14 +627,16 @@ static cmark_node *make_str_with_entities(cmark_chunk *content) // Clean a URL: remove surrounding whitespace and surrounding <>, // and remove \ that escape punctuation. -unsigned char *cmark_clean_url(cmark_chunk *url) +cmark_chunk cmark_clean_url(cmark_chunk *url) { cmark_strbuf buf = GH_BUF_INIT; cmark_chunk_trim(url); - if (url->len == 0) - return NULL; + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } if (url->data[0] == '<' && url->data[url->len - 1] == '>') { houdini_unescape_html_f(&buf, url->data + 1, url->len - 2); @@ -638,16 +645,18 @@ unsigned char *cmark_clean_url(cmark_chunk *url) } cmark_strbuf_unescape(&buf); - return buf.size == 0 ? NULL : cmark_strbuf_detach(&buf); + return cmark_chunk_buf_detach(&buf); } -unsigned char *cmark_clean_title(cmark_chunk *title) +cmark_chunk cmark_clean_title(cmark_chunk *title) { cmark_strbuf buf = GH_BUF_INIT; unsigned char first, last; - if (title->len == 0) - return NULL; + if (title->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } first = title->data[0]; last = title->data[title->len - 1]; @@ -662,7 +671,7 @@ unsigned char *cmark_clean_title(cmark_chunk *title) } cmark_strbuf_unescape(&buf); - return buf.size == 0 ? NULL : cmark_strbuf_detach(&buf); + return cmark_chunk_buf_detach(&buf); } // Parse an autolink or HTML tag. @@ -766,7 +775,7 @@ static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent) cmark_reference *ref; bool is_image = false; cmark_chunk url_chunk, title_chunk; - unsigned char *url, *title; + cmark_chunk url, title; delimiter *opener; cmark_node *link_text; cmark_node *inl; @@ -854,8 +863,8 @@ static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent) cmark_chunk_free(&raw_label); if (ref != NULL) { // found - url = bufdup(ref->url); - title = bufdup(ref->title); + url = chunk_clone(&ref->url); + title = chunk_clone(&ref->title); goto match; } else { goto noMatch; diff --git a/src/inlines.h b/src/inlines.h index 9e56790997..534588e370 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -5,8 +5,8 @@ extern "C" { #endif -unsigned char *cmark_clean_url(cmark_chunk *url); -unsigned char *cmark_clean_title(cmark_chunk *title); +cmark_chunk cmark_clean_url(cmark_chunk *url); +cmark_chunk cmark_clean_title(cmark_chunk *title); void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options); diff --git a/src/node.c b/src/node.c index 466b0a1516..7b1bb10e28 100644 --- a/src/node.c +++ b/src/node.c @@ -122,12 +122,8 @@ void S_free_nodes(cmark_node *e) break; case NODE_LINK: case NODE_IMAGE: - if (e->as.link.url) { - free(e->as.link.url); - } - if (e->as.link.title) { - free(e->as.link.title); - } + cmark_chunk_free(&e->as.link.url); + cmark_chunk_free(&e->as.link.title); break; default: break; @@ -282,15 +278,6 @@ cmark_node_set_user_data(cmark_node *node, void *user_data) return 1; } -static char* -S_strdup(const char *str) -{ - size_t size = strlen(str) + 1; - char *dup = (char *)malloc(size); - memcpy(dup, str, size); - return dup; -} - const char* cmark_node_get_literal(cmark_node *node) { @@ -541,7 +528,7 @@ cmark_node_get_url(cmark_node *node) switch (node->type) { case NODE_LINK: case NODE_IMAGE: - return (char *)node->as.link.url; + return cmark_chunk_to_cstr(&node->as.link.url); default: break; } @@ -559,8 +546,7 @@ cmark_node_set_url(cmark_node *node, const char *url) switch (node->type) { case NODE_LINK: case NODE_IMAGE: - free(node->as.link.url); - node->as.link.url = (unsigned char *)S_strdup(url); + cmark_chunk_set_cstr(&node->as.link.url, url); return 1; default: break; @@ -579,7 +565,7 @@ cmark_node_get_title(cmark_node *node) switch (node->type) { case NODE_LINK: case NODE_IMAGE: - return (char *)node->as.link.title; + return cmark_chunk_to_cstr(&node->as.link.title); default: break; } @@ -597,8 +583,7 @@ cmark_node_set_title(cmark_node *node, const char *title) switch (node->type) { case NODE_LINK: case NODE_IMAGE: - free(node->as.link.title); - node->as.link.title = (unsigned char *)S_strdup(title); + cmark_chunk_set_cstr(&node->as.link.title, title); return 1; default: break; diff --git a/src/node.h b/src/node.h index 7a45d424b0..911a18f5c3 100644 --- a/src/node.h +++ b/src/node.h @@ -38,8 +38,8 @@ typedef struct { } cmark_header; typedef struct { - unsigned char *url; - unsigned char *title; + cmark_chunk url; + cmark_chunk title; } cmark_link; struct cmark_node { diff --git a/src/references.c b/src/references.c index 37bf4cbdbe..1d3d56d1b2 100644 --- a/src/references.c +++ b/src/references.c @@ -20,8 +20,8 @@ static void reference_free(cmark_reference *ref) { if(ref != NULL) { free(ref->label); - free(ref->url); - free(ref->title); + cmark_chunk_free(&ref->url); + cmark_chunk_free(&ref->title); free(ref); } } diff --git a/src/references.h b/src/references.h index 69325bbd89..a360cd5e79 100644 --- a/src/references.h +++ b/src/references.h @@ -12,8 +12,8 @@ extern "C" { struct cmark_reference { struct cmark_reference *next; unsigned char *label; - unsigned char *url; - unsigned char *title; + cmark_chunk url; + cmark_chunk title; unsigned int hash; }; diff --git a/src/xml.c b/src/xml.c index 845e553f1c..acb2f3d798 100644 --- a/src/xml.c +++ b/src/xml.c @@ -118,10 +118,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: cmark_strbuf_puts(xml, " destination=\""); - escape_xml(xml, node->as.link.url, -1); + escape_xml(xml, node->as.link.url.data, + node->as.link.url.len); cmark_strbuf_putc(xml, '"'); cmark_strbuf_puts(xml, " title=\""); - escape_xml(xml, node->as.link.title, -1); + escape_xml(xml, node->as.link.title.data, + node->as.link.title.len); cmark_strbuf_putc(xml, '"'); break; default: -- cgit 0.0.5-2-1-g0f52 From eada41977a4dc6da389d3bdefe7116ac2b1d75bd Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 9 May 2015 16:30:50 +0200 Subject: Allow NULL value in string setters Supersedes pull request #34. --- src/chunk.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/chunk.h b/src/chunk.h index 8b4333a1c7..3d6743c579 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -80,10 +80,17 @@ static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) if (c->alloc) { free(c->data); } - c->len = strlen(str); - c->data = (unsigned char *)malloc(c->len + 1); - c->alloc = 1; - memcpy(c->data, str, c->len + 1); + if (str == NULL) { + c->len = 0; + c->data = NULL; + c->alloc = 0; + } + else { + c->len = strlen(str); + c->data = (unsigned char *)malloc(c->len + 1); + c->alloc = 1; + memcpy(c->data, str, c->len + 1); + } } static inline cmark_chunk cmark_chunk_literal(const char *data) -- cgit 0.0.5-2-1-g0f52 From 30936f2fcf7104f225b4a9919f0e2a047a13b96f Mon Sep 17 00:00:00 2001 From: Jeroen Ooms Date: Thu, 28 May 2015 17:21:52 +0200 Subject: Add link to R bindings --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 18ee8ba0c3..465efe0f8a 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,8 @@ There are also libraries that wrap `libcmark` for [go](https://github.com/rhinoman/go-commonmark), [Haskell](http://hackage.haskell.org/package/cmark), [ruby](https://github.com/gjtorikian/commonmarker), -and [Perl](https://metacpan.org/release/CommonMark). +[Perl](https://metacpan.org/release/CommonMark), and +[R](http://cran.r-project.org/package=commonmark). Installing ---------- -- cgit 0.0.5-2-1-g0f52 From b4599a48694b78a5db144f17c2ab281a6d9f17d1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 29 May 2015 10:15:29 -0700 Subject: Added Ubsan build target, to check for undefined behavior. --- CMakeLists.txt | 2 +- Makefile | 8 +++++++- src/CMakeLists.txt | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a6f304ba7..a4ebe9279c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,5 +21,5 @@ add_subdirectory(test testdir) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING - "Choose the type of build, options are: Debug Profile Release." FORCE) + "Choose the type of build, options are: Debug Profile Release Asan Ubsan." FORCE) endif(NOT CMAKE_BUILD_TYPE) diff --git a/Makefile b/Makefile index 360636805b..5ad87d0457 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug asan mingw archive bench astyle update-spec afl +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl all: cmake_build man/man3/cmark.3 @@ -47,6 +47,12 @@ debug: cmake .. -DCMAKE_BUILD_TYPE=Debug; \ make +ubsan: + mkdir -p $(BUILDDIR); \ + cd $(BUILDDIR); \ + cmake .. -DCMAKE_BUILD_TYPE=Ubsan; \ + make + asan: mkdir -p $(BUILDDIR); \ cd $(BUILDDIR); \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba3e18e84d..f27186e539 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -164,3 +164,7 @@ endif() if($ENV{TIMER}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTIMER=1") endif($ENV{TIMER}) + +if(CMAKE_BUILD_TYPE STREQUAL "Ubsan") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") +endif() \ No newline at end of file -- cgit 0.0.5-2-1-g0f52 From 678bdab4a4421e64f7c36991a098ae6db730140b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 29 May 2015 10:36:34 -0700 Subject: Ubsan: add -fsanitize=undefined to link flags too. --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f27186e539..a38393c959 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -167,4 +167,5 @@ endif($ENV{TIMER}) if(CMAKE_BUILD_TYPE STREQUAL "Ubsan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") endif() \ No newline at end of file -- cgit 0.0.5-2-1-g0f52 From e5d216b9190bb0ca6f33e175931630e7aa9bd430 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 29 May 2015 11:09:48 -0700 Subject: Revert "Ubsan: add -fsanitize=undefined to link flags too." This reverts commit 678bdab4a4421e64f7c36991a098ae6db730140b. This commit led to two -fsanitized=undefined in the same linker invocation. --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a38393c959..f27186e539 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -167,5 +167,4 @@ endif($ENV{TIMER}) if(CMAKE_BUILD_TYPE STREQUAL "Ubsan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") endif() \ No newline at end of file -- cgit 0.0.5-2-1-g0f52 From 0ddadad7333a999ab3289fd6d47433e4984d182e Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 29 May 2015 20:47:36 +0200 Subject: Cope with broken snprintf on Windows On Windows, snprintf returns -1 if the output was truncated. Fall back to Windows-specific _scprintf. --- src/CMakeLists.txt | 7 ++++++- src/buffer.c | 6 ++++++ src/config.h.in | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f27186e539..19a5258899 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -128,6 +128,7 @@ install(FILES # Feature tests include(CheckIncludeFile) include(CheckCSourceCompiles) +include(CheckCSourceRuns) include(CheckSymbolExists) CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H) CHECK_C_SOURCE_COMPILES( @@ -137,6 +138,10 @@ CHECK_C_SOURCE_COMPILES(" int f(void) __attribute__ (()); int main() { return 0; } " HAVE___ATTRIBUTE__) +CHECK_C_SOURCE_RUNS(" + #include + int main() { return snprintf(NULL, 0, \"123\") == 3 ? 0 : 1; } +" HAVE_C99_SNPRINTF) CHECK_SYMBOL_EXISTS(va_copy stdarg.h HAVE_VA_COPY) CONFIGURE_FILE( @@ -167,4 +172,4 @@ endif($ENV{TIMER}) if(CMAKE_BUILD_TYPE STREQUAL "Ubsan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") -endif() \ No newline at end of file +endif() diff --git a/src/buffer.c b/src/buffer.c index 5ec8b49875..2b7f062097 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -175,6 +175,12 @@ int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) buf->asize - buf->size, format, args ); +#ifndef HAVE_C99_SNPRINTF + // Assume we're on Windows. + if (len < 0) { + len = _vscprintf(format, args); + } +#endif va_end(args); diff --git a/src/config.h.in b/src/config.h.in index c1e9597dba..5960928353 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -21,3 +21,5 @@ #ifndef HAVE_VA_COPY #define va_copy(dest, src) ((dest) = (src)) #endif + +#cmakedefine HAVE_C99_SNPRINTF -- cgit 0.0.5-2-1-g0f52 From e10aa8549aa6a48af847c1768705ab869c6fcdb6 Mon Sep 17 00:00:00 2001 From: Jeroen Ooms Date: Sat, 30 May 2015 13:42:23 +0200 Subject: Fix for UBSAN note --- src/chunk.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/chunk.h b/src/chunk.h index 3d6743c579..4bb4980c52 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -66,7 +66,9 @@ static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) } str = (unsigned char *)malloc(c->len + 1); if(str != NULL) { - memcpy(str, c->data, c->len); + if(c->len > 0){ + memcpy(str, c->data, c->len); + } str[c->len] = 0; } c->data = str; -- cgit 0.0.5-2-1-g0f52 From 4be7a417b4ea18f36e294a547c304a454a53a98f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 31 May 2015 13:27:08 +0200 Subject: Removed -pg from Debug build flags. Closes #47. --- src/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f27186e539..90525835cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -67,8 +67,8 @@ set_target_properties(${PROGRAM} PROPERTIES COMPILE_FLAGS -DCMARK_STATIC_DEFINE) # Check integrity of node structure when compiled as debug: -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -pg -DCMARK_DEBUG_NODES") -set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -pg") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DCMARK_DEBUG_NODES") +set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg") set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") -- cgit 0.0.5-2-1-g0f52 From 8270cf85fc1ee514ccef54d4c545e9ba97b4c003 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 1 Jun 2015 22:59:49 +0200 Subject: Fixed `is_autolink`. Previously *any* link with an absolute URL was treated as an autolink. Closes #50. See also jgm/pandoc#2203. --- src/commonmark.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 805f1397bf..47da191360 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -239,6 +239,7 @@ is_autolink(cmark_node *node) { const char *title; const char *url; + cmark_node *link_text; if (node->type != CMARK_NODE_LINK) { return false; @@ -255,10 +256,13 @@ is_autolink(cmark_node *node) if (title != NULL && strlen(title) > 0) { return false; } - cmark_consolidate_text_nodes(node); - return (strncmp(url, - (char*)node->as.literal.data, - node->as.literal.len) == 0); + + link_text = node->first_child; + cmark_consolidate_text_nodes(link_text); + return ((int)strlen(url) == link_text->as.literal.len && + strncmp(url, + (char*)link_text->as.literal.data, + link_text->as.literal.len) == 0); } // if node is a block node, returns node. -- cgit 0.0.5-2-1-g0f52 From cc818d27efdf7f1b4a60811c46f813b2a3149041 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 09:30:26 +0200 Subject: Updated spec.txt. --- test/spec.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 5c06ec1073..a029c1901d 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3835,9 +3835,11 @@ item: - b - c - d - - e - - f -- g + - e + - f + - g + - h +- i .
                            • a
                            • @@ -3847,6 +3849,8 @@ item:
                            • e
                            • f
                            • g
                            • +
                            • h
                            • +
                            • i
                            . -- cgit 0.0.5-2-1-g0f52 From 9ff1cccc955f108ed76b0039e1ca1b61d44cad56 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 09:49:40 +0200 Subject: Fixed bug in list item parsing when items indented >= 4 spaces. Closes #52. --- src/blocks.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index a15f819ea7..b006cc1fff 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -526,6 +526,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) bool blank = false; int first_nonspace; int indent; + bool indented; cmark_chunk input; bool maybe_lazy; @@ -657,10 +658,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) first_nonspace++; indent = first_nonspace - offset; + indented = indent >= CODE_INDENT; blank = peek_at(&input, first_nonspace) == '\n'; - if (indent >= CODE_INDENT) { - if (!maybe_lazy && !blank) { + if (indented && !maybe_lazy && !blank) { offset += CODE_INDENT; container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); container->as.code.fenced = false; @@ -668,11 +669,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->as.code.fence_length = 0; container->as.code.fence_offset = 0; container->as.code.info = cmark_chunk_literal(""); - } else { // indent > 4 in lazy line - break; - } - } else if (peek_at(&input, first_nonspace) == '>') { + } else if (!indented && peek_at(&input, first_nonspace) == '>') { offset = first_nonspace + 1; // optional following character @@ -680,7 +678,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) offset++; container = add_child(parser, container, NODE_BLOCK_QUOTE, offset + 1); - } else if ((matched = scan_atx_header_start(&input, first_nonspace))) { + } else if (!indented && (matched = scan_atx_header_start(&input, first_nonspace))) { offset = first_nonspace + matched; container = add_child(parser, container, NODE_HEADER, offset + 1); @@ -695,7 +693,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->as.header.level = level; container->as.header.setext = false; - } else if ((matched = scan_open_code_fence(&input, first_nonspace))) { + } else if (!indented && (matched = scan_open_code_fence(&input, first_nonspace))) { container = add_child(parser, container, NODE_CODE_BLOCK, first_nonspace + 1); container->as.code.fenced = true; @@ -705,12 +703,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->as.code.info = cmark_chunk_literal(""); offset = first_nonspace + matched; - } else if ((matched = scan_html_block_tag(&input, first_nonspace))) { + } else if (!indented && (matched = scan_html_block_tag(&input, first_nonspace))) { container = add_child(parser, container, NODE_HTML, first_nonspace + 1); // note, we don't adjust offset because the tag is part of the text - } else if (container->type == NODE_PARAGRAPH && + } else if (!indented && + container->type == NODE_PARAGRAPH && (lev = scan_setext_header_line(&input, first_nonspace)) && // check that there is only one line in the paragraph: cmark_strbuf_strrchr(&container->string_content, '\n', @@ -721,7 +720,9 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->as.header.setext = true; offset = input.len - 1; - } else if (!(container->type == NODE_PARAGRAPH && !all_matched) && + } else if (!indented && + !(container->type == NODE_PARAGRAPH && + !all_matched) && (matched = scan_hrule(&input, first_nonspace))) { // it's only now that we know the line is not part of a setext header: -- cgit 0.0.5-2-1-g0f52 From dc0e8aac6cd8b891e23a3bd29459eb63b07af3e7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 10:23:35 +0200 Subject: Added note on 64-bit timings in benchmarks.md. --- benchmarks.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/benchmarks.md b/benchmarks.md index 58b3de4a53..848c54a1e0 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -31,3 +31,10 @@ with the benchmark input and the time to run it with no input. not penalized by startup time.) A median of ten runs is taken. The process is reniced to a high priority so that the system doesn't interrupt runs. + +Note that these benchmarks were done on a 32-bit machine. On a 64-bit +machines, sundown is significantly faster than cmark (0.146s vs 0.237s +on Intel i5/OSX with Clang, 0.130s vs 0.191s on a 64-bit Debian VPS +with GCC). I do not know why the performance difference shows up on +the 64-bit architecture and not the 32-bit, but that is something that +might be investigated. -- cgit 0.0.5-2-1-g0f52 From 657061c630cf493aa74ce4a09aebc869813b6916 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 11:45:07 +0200 Subject: Updated spec. --- test/spec.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index a029c1901d..9b2b97739c 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -569,8 +569,11 @@ prevent things like the following from being parsed as headers: . #5 bolt + +#foobar .

                            #5 bolt

                            +

                            #foobar

                            . This is not a header, because the first `#` is escaped: -- cgit 0.0.5-2-1-g0f52 From 65056eabe93702620d64449761c980b0ab3292ff Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 11:54:06 +0200 Subject: Revised "add newline to end if missing" for performance. From btrask's alternate code in the comment on https://github.com/jgm/cmark/pull/18. Note: this gives a 1-2% performance boot in our benchmark, probably enough to make it worth while. --- src/blocks.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 8ae452ed84..bb8acd2290 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -557,18 +557,31 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) bool indented; cmark_chunk input; bool maybe_lazy; + int trim = 0; + bool cr = false; + bool lf = false; utf8proc_detab(parser->curline, buffer, bytes); // Add a newline to the end if not present: // TODO this breaks abstraction: - if (parser->curline->size && parser->curline->ptr[parser->curline->size - 1] == '\n') { - cmark_strbuf_truncate(parser->curline, parser->curline->size - 1); + if (parser->curline->size > trim && + parser->curline->ptr[parser->curline->size - 1 - trim] == '\n') { + trim += 1; + lf = true; } - if (parser->curline->size && parser->curline->ptr[parser->curline->size - 1] == '\r') { - cmark_strbuf_truncate(parser->curline, parser->curline->size - 1); + if (parser->curline->size > trim && + parser->curline->ptr[parser->curline->size - 1 - trim] == '\r') { + trim += 1; + cr = true; } - cmark_strbuf_putc(parser->curline, '\n'); + if (cr) { + cmark_strbuf_truncate(parser->curline, parser->curline->size - trim); + } + if (cr || !lf) { + cmark_strbuf_putc(parser->curline, '\n'); + } + input.data = parser->curline->ptr; input.len = parser->curline->size; -- cgit 0.0.5-2-1-g0f52 From 9ac6ccf3a882c861b131c38160728a1d1e12e9ec Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 14:38:15 +0200 Subject: Revert "Hacks to spec_tests.py to test CRLF support." This reverts commit 6f99ff72519a34517285b070cb222de42d8acdfd. We'll add a separate test for line endings. --- test/spec_tests.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index 6fd43efe35..b1b0373130 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -36,7 +36,7 @@ def print_test_header(headertext, example_number, start_line, end_line): print("Example %d (lines %d-%d) %s" % (example_number,start_line,end_line,headertext)) def do_test(test, normalize, result_counts): - [retcode, actual_html, err] = cmark.to_html(re.sub(r"\n", "\r\n", test['markdown'])) + [retcode, actual_html, err] = cmark.to_html(test['markdown']) if retcode == 0: expected_html = test['html'] unicode_error = None @@ -52,21 +52,17 @@ def do_test(test, normalize, result_counts): result_counts['pass'] += 1 else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) - print("Orig: "+repr(test['markdown'])) - print("Conv: "+repr(re.sub(r"\n", "\r\n", test['markdown']))) -# sys.stdout.write(test['markdown']) + sys.stdout.write(test['markdown']) if unicode_error: print("Unicode error: " + str(unicode_error)) print("Expected: " + repr(expected_html)) print("Got: " + repr(actual_html)) else: - print("Expected: " + repr(expected_html)) - print("Got: " + repr(actual_html)) -# expected_html_lines = expected_html.splitlines(True) -# actual_html_lines = actual_html.splitlines(True) -# for diffline in unified_diff(expected_html_lines, actual_html_lines, -# "expected HTML", "actual HTML"): -# sys.stdout.write(diffline) + expected_html_lines = expected_html.splitlines(True) + actual_html_lines = actual_html.splitlines(True) + for diffline in unified_diff(expected_html_lines, actual_html_lines, + "expected HTML", "actual HTML"): + sys.stdout.write(diffline) sys.stdout.write('\n') result_counts['fail'] += 1 else: -- cgit 0.0.5-2-1-g0f52 From bd3b24523fe30934c287698c53b4f2623557fa58 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 15:07:53 +0200 Subject: Cleaned up with is_line_end_char function. --- src/blocks.c | 58 +++++++++++++++++++++------------------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index bb8acd2290..8ccaa2572d 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -18,6 +18,12 @@ #define CODE_INDENT 4 #define peek_at(i, n) (i)->data[n] +static inline bool +is_line_end_char(char c) +{ + return (c == '\n' || c == '\r'); +} + static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, bool eof); @@ -132,7 +138,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) for (i = ln->size - 1; i >= 0; --i) { c = ln->ptr[i]; - if (c != ' ' && c != '\t' && c != '\r' && c != '\n') + if (c != ' ' && c != '\t' && !is_line_end_char(c)) break; } @@ -145,7 +151,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) for(; i < ln->size; ++i) { c = ln->ptr[i]; - if (c != '\r' && c != '\n') + if (!is_line_end_char(c)) continue; cmark_strbuf_truncate(ln, i); @@ -214,9 +220,9 @@ finalize(cmark_parser *parser, cmark_node* b) b->end_line = parser->line_number; b->end_column = parser->curline->size; if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n') - b->end_column--; + b->end_column -= 1; if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r') - b->end_column--; + b->end_column -= 1; } else { b->end_line = parser->line_number - 1; b->end_column = parser->last_line_length; @@ -243,8 +249,7 @@ finalize(cmark_parser *parser, cmark_node* b) // first line of contents becomes info for (pos = 0; pos < b->string_content.size; ++pos) { - if (b->string_content.ptr[pos] == '\r' || - b->string_content.ptr[pos] == '\n') + if (is_line_end_char(b->string_content.ptr[pos])) break; } assert(pos < b->string_content.size); @@ -490,7 +495,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, size_t line_len; for (eol = buffer; eol < end; ++eol) { - if (*eol == '\r' || *eol == '\n') + if (is_line_end_char(*eol)) break; } if (eol >= end) @@ -557,28 +562,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) bool indented; cmark_chunk input; bool maybe_lazy; - int trim = 0; - bool cr = false; - bool lf = false; utf8proc_detab(parser->curline, buffer, bytes); // Add a newline to the end if not present: // TODO this breaks abstraction: - if (parser->curline->size > trim && - parser->curline->ptr[parser->curline->size - 1 - trim] == '\n') { - trim += 1; - lf = true; - } - if (parser->curline->size > trim && - parser->curline->ptr[parser->curline->size - 1 - trim] == '\r') { - trim += 1; - cr = true; - } - if (cr) { - cmark_strbuf_truncate(parser->curline, parser->curline->size - trim); - } - if (cr || !lf) { + if (parser->curline->size > 0 && + !is_line_end_char(parser->curline->ptr[parser->curline->size - 1])) { cmark_strbuf_putc(parser->curline, '\n'); } @@ -602,8 +592,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } indent = first_nonspace - offset; - blank = peek_at(&input, first_nonspace) == '\n' || - peek_at(&input, first_nonspace) == '\r'; + blank = is_line_end_char(peek_at(&input, first_nonspace)); if (container->type == NODE_BLOCK_QUOTE) { matched = indent <= 3 && peek_at(&input, first_nonspace) == '>'; @@ -705,8 +694,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) indent = first_nonspace - offset; indented = indent >= CODE_INDENT; - blank = peek_at(&input, first_nonspace) == '\n' || - peek_at(&input, first_nonspace) == '\r'; + blank = is_line_end_char(peek_at(&input, first_nonspace)); if (indented && !maybe_lazy && !blank) { offset += CODE_INDENT; @@ -760,9 +748,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) (lev = scan_setext_header_line(&input, first_nonspace)) && // check that there is only one line in the paragraph: (cmark_strbuf_strrchr(&container->string_content, '\n', - cmark_strbuf_len(&container->string_content) - 2) < 0 && - cmark_strbuf_strrchr(&container->string_content, '\r', - cmark_strbuf_len(&container->string_content) - 2) < 0)) { + cmark_strbuf_len(&container->string_content) - 2) < 0)) { container->type = NODE_HEADER; container->as.header.level = lev; @@ -789,8 +775,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } // i = number of spaces after marker, up to 5 if (i >= 5 || i < 1 || - peek_at(&input, offset) == '\n' || - peek_at(&input, offset) == '\r') { + is_line_end_char(peek_at(&input, offset))) { data->padding = matched + 1; if (i > 0) { offset += 1; @@ -838,8 +823,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) first_nonspace++; indent = first_nonspace - offset; - blank = peek_at(&input, first_nonspace) == '\n' || - peek_at(&input, first_nonspace) == '\r'; + blank = is_line_end_char(peek_at(&input, first_nonspace)); if (blank && container->last_child) { container->last_child->last_line_blank = true; @@ -910,10 +894,10 @@ finished: parser->last_line_length = parser->curline->size; if (parser->last_line_length && parser->curline->ptr[parser->last_line_length - 1] == '\n') - parser->last_line_length--; + parser->last_line_length -= 1; if (parser->last_line_length && parser->curline->ptr[parser->last_line_length - 1] == '\r') - parser->last_line_length--; + parser->last_line_length -= 1; cmark_strbuf_clear(parser->curline); -- cgit 0.0.5-2-1-g0f52 From f634a3ff3583f2e0d533db3d4e2d8aef9ea7e9c8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Jun 2015 14:47:16 +0200 Subject: Added test for different line endings to api_test. --- api_test/main.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index 029a87941a..01df51dcf9 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -665,6 +665,20 @@ test_continuation_byte(test_batch_runner *runner, const char *utf8) } } +static void +line_endings(test_batch_runner *runner) +{ + // Test list with different line endings + static const char list_with_endings[] = + "- a\n- b\r\n- c\r- d"; + char *html = cmark_markdown_to_html(list_with_endings, + sizeof(list_with_endings) - 1, + CMARK_OPT_DEFAULT); + STR_EQ(runner, html, "
                              \n
                            • a
                            • \n
                            • b
                            • \n
                            • c
                            • \n
                            • d
                            • \n
                            \n", + "list with different line endings"); + free(html); +} + static void numeric_entities(test_batch_runner *runner) { @@ -724,6 +738,7 @@ int main() { parser(runner); render_html(runner); utf8(runner); + line_endings(runner); numeric_entities(runner); test_cplusplus(runner); -- cgit 0.0.5-2-1-g0f52 From c52aecff5e1fb1c611f0803203e7efa933a9a472 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Jun 2015 10:58:44 +0200 Subject: Updated spec.txt. --- test/spec.txt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 9b2b97739c..6c660bb116 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -212,12 +212,8 @@ to a certain encoding. A [line](@line) is a sequence of zero or more [character]s followed by a [line ending] or by the end of file. -A [line ending](@line-ending) is, depending on the platform, a -newline (`U+000A`), carriage return (`U+000D`), or -carriage return + newline. - -For security reasons, a conforming parser must strip or replace the -Unicode character `U+0000`. +A [line ending](@line-ending) is a newline (`U+000A`), carriage return +(`U+000D`), or carriage return + newline. A line containing no characters, or a line containing only spaces (`U+0020`) or tabs (`U+0009`), is called a [blank line](@blank-line). @@ -270,6 +266,11 @@ Tabs in lines are expanded to spaces, with a tab stop of 4 characters:
                            . +## Insecure characters + +For security reasons, the Unicode character `U+0000` must be replaced +with the replacement character (`U+FFFD`). + # Blocks and inlines We can think of a document as a sequence of @@ -4284,13 +4285,14 @@ corresponding codepoints. [Decimal entities](@decimal-entities) consist of `&#` + a string of 1--8 arabic digits + `;`. Again, these entities need to be recognised and transformed into their corresponding -unicode codepoints. Invalid unicode codepoints will be written as the -"unknown codepoint" character (`0xFFFD`) +unicode codepoints. Invalid unicode codepoints will be replaced by +the "unknown codepoint" character (`U+FFFD`). For security reasons, +the codepoint `U+0000` will also be replaced by `U+FFFD`. . -# Ӓ Ϡ � +# Ӓ Ϡ � � . -

                            # Ӓ Ϡ �

                            +

                            # Ӓ Ϡ � �

                            . [Hexadecimal entities](@hexadecimal-entities) -- cgit 0.0.5-2-1-g0f52 From 240400e1c397c6b379c0c7c21d1ec658dbb24153 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Jun 2015 12:59:40 +0200 Subject: Updated spec. --- test/spec.txt | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 6c660bb116..f6417cf4bf 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -6095,6 +6095,7 @@ that [matches] a [link reference definition] elsewhere in the document. A [link label](@link-label) begins with a left bracket (`[`) and ends with the first right bracket (`]`) that is not backslash-escaped. +Between these brackets there must be at least one non-[whitespace character]. Unescaped square bracket characters are not allowed in [link label]s. A link label can have at most 999 characters inside the square brackets. @@ -6341,6 +6342,30 @@ backslash-escaped:

                            foo

                            . +A [link label] must contain at least one non-[whitespace character]: + +. +[] + +[]: /uri +. +

                            []

                            +

                            []: /uri

                            +. + +. +[ + ] + +[ + ]: /uri +. +

                            [ + ]

                            +

                            [ + ]: /uri

                            +. + A [collapsed reference link](@collapsed-reference-link) consists of a [link label] that [matches] a [link reference definition] elsewhere in the -- cgit 0.0.5-2-1-g0f52 From 7767b22ab12aa4ab43ae389771617078248a4b84 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Jun 2015 12:59:48 +0200 Subject: Don't allow link labels with no non-whitespace characters. See jgm/CommonMark#322. --- src/inlines.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 232fc108c4..352ded3fd4 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -755,6 +755,7 @@ static int link_label(subject* subj, cmark_chunk *raw_label) if (c == ']') { // match found *raw_label = cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1)); + cmark_chunk_trim(raw_label); advance(subj); // advance past ] return 1; } @@ -1111,7 +1112,7 @@ int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refma subject_from_buf(&subj, input, NULL); // parse label: - if (!link_label(&subj, &lab)) + if (!link_label(&subj, &lab) || lab.len == 0) return 0; // colon: -- cgit 0.0.5-2-1-g0f52 From 966898e10d7ecc61d2e0f956197944626e059ec2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Jun 2015 13:20:56 +0200 Subject: Updated spec. --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index f6417cf4bf..13db0ab424 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -6361,9 +6361,9 @@ A [link label] must contain at least one non-[whitespace character]: ]: /uri .

                            [ - ]

                            +]

                            [ - ]: /uri

                            +]: /uri

                            . A [collapsed reference link](@collapsed-reference-link) -- cgit 0.0.5-2-1-g0f52 From d63dd090693f6065b7a79d634bf88e45da089b53 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 08:10:57 +0200 Subject: Updated spec. --- test/spec.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 13db0ab424..ba2c5aa894 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3858,6 +3858,26 @@ item: . +. +1. a + + 2. b + + 3. c +. +
                              +
                            1. +

                              a

                              +
                            2. +
                            3. +

                              b

                              +
                            4. +
                            5. +

                              c

                              +
                            6. +
                            +. + This is a loose list, because there is a blank line between two of the list items: -- cgit 0.0.5-2-1-g0f52 From 56b1123c6662169ffe6a0eabc67f8533e745eb97 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 21:51:17 +0200 Subject: Allow new list item container indented > 4 spaces. This fixes cases like: ``` 1. a 2. b 3. c ``` --- src/blocks.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 8ccaa2572d..d6fa552dc4 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -696,16 +696,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) indented = indent >= CODE_INDENT; blank = is_line_end_char(peek_at(&input, first_nonspace)); - if (indented && !maybe_lazy && !blank) { - offset += CODE_INDENT; - container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); - container->as.code.fenced = false; - container->as.code.fence_char = 0; - container->as.code.fence_length = 0; - container->as.code.fence_offset = 0; - container->as.code.info = cmark_chunk_literal(""); - - } else if (!indented && peek_at(&input, first_nonspace) == '>') { + if (!indented && peek_at(&input, first_nonspace) == '>') { offset = first_nonspace + 1; // optional following character @@ -765,7 +756,10 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container = finalize(parser, container); offset = input.len - 1; - } else if ((matched = parse_list_marker(&input, first_nonspace, &data))) { + } else if ((matched = parse_list_marker(&input, first_nonspace, &data)) && + (!indented || container->type == NODE_LIST)) { + // Note that we can have new list items starting with >= 4 + // spaces indent, as long as the list container is still open. // compute padding: offset = first_nonspace + matched; @@ -804,6 +798,16 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) /* TODO: static */ memcpy(&container->as.list, data, sizeof(*data)); free(data); + + } else if (indented && !maybe_lazy && !blank) { + offset += CODE_INDENT; + container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); + container->as.code.fenced = false; + container->as.code.fence_char = 0; + container->as.code.fence_length = 0; + container->as.code.fence_offset = 0; + container->as.code.info = cmark_chunk_literal(""); + } else { break; } -- cgit 0.0.5-2-1-g0f52 From 13947ca611561e1771f14469696ee61a53cebbe9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 23:09:50 +0200 Subject: astyle formatting changes. --- src/blocks.c | 22 +++++++++++----------- src/chunk.h | 7 +++---- src/commonmark.c | 2 +- src/html.c | 8 ++++---- src/inlines.c | 6 +++--- src/xml.c | 4 ++-- 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index d6fa552dc4..f6d0ee437d 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -735,7 +735,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // note, we don't adjust offset because the tag is part of the text } else if (!indented && - container->type == NODE_PARAGRAPH && + container->type == NODE_PARAGRAPH && (lev = scan_setext_header_line(&input, first_nonspace)) && // check that there is only one line in the paragraph: (cmark_strbuf_strrchr(&container->string_content, '\n', @@ -747,8 +747,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) offset = input.len - 1; } else if (!indented && - !(container->type == NODE_PARAGRAPH && - !all_matched) && + !(container->type == NODE_PARAGRAPH && + !all_matched) && (matched = scan_hrule(&input, first_nonspace))) { // it's only now that we know the line is not part of a setext header: @@ -757,7 +757,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) offset = input.len - 1; } else if ((matched = parse_list_marker(&input, first_nonspace, &data)) && - (!indented || container->type == NODE_LIST)) { + (!indented || container->type == NODE_LIST)) { // Note that we can have new list items starting with >= 4 // spaces indent, as long as the list container is still open. @@ -800,13 +800,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) free(data); } else if (indented && !maybe_lazy && !blank) { - offset += CODE_INDENT; - container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); - container->as.code.fenced = false; - container->as.code.fence_char = 0; - container->as.code.fence_length = 0; - container->as.code.fence_offset = 0; - container->as.code.info = cmark_chunk_literal(""); + offset += CODE_INDENT; + container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); + container->as.code.fenced = false; + container->as.code.fence_char = 0; + container->as.code.fence_length = 0; + container->as.code.fence_offset = 0; + container->as.code.info = cmark_chunk_literal(""); } else { break; diff --git a/src/chunk.h b/src/chunk.h index 4bb4980c52..a246a9de8f 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -66,8 +66,8 @@ static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) } str = (unsigned char *)malloc(c->len + 1); if(str != NULL) { - if(c->len > 0){ - memcpy(str, c->data, c->len); + if(c->len > 0) { + memcpy(str, c->data, c->len); } str[c->len] = 0; } @@ -86,8 +86,7 @@ static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) c->len = 0; c->data = NULL; c->alloc = 0; - } - else { + } else { c->len = strlen(str); c->data = (unsigned char *)malloc(c->len + 1); c->alloc = 1; diff --git a/src/commonmark.c b/src/commonmark.c index 47da191360..dba1fcff8d 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -260,7 +260,7 @@ is_autolink(cmark_node *node) link_text = node->first_child; cmark_consolidate_text_nodes(link_text); return ((int)strlen(url) == link_text->as.literal.len && - strncmp(url, + strncmp(url, (char*)link_text->as.literal.data, link_text->as.literal.len) == 0); } diff --git a/src/html.c b/src/html.c index c15f6f44cb..d3f9fc78ad 100644 --- a/src/html.c +++ b/src/html.c @@ -262,12 +262,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { cmark_strbuf_puts(html, "as.link.url.data, - node->as.link.url.len); + node->as.link.url.len); if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); escape_html(html, node->as.link.title.data, - node->as.link.title.len); + node->as.link.title.len); } cmark_strbuf_puts(html, "\">"); @@ -280,7 +280,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { cmark_strbuf_puts(html, "as.link.url.data, - node->as.link.url.len); + node->as.link.url.len); cmark_strbuf_puts(html, "\" alt=\""); state->plain = node; @@ -288,7 +288,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); escape_html(html, node->as.link.title.data, - node->as.link.title.len); + node->as.link.title.len); } cmark_strbuf_puts(html, "\" />"); diff --git a/src/inlines.c b/src/inlines.c index 352ded3fd4..8a1ee44f82 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -151,7 +151,7 @@ static cmark_chunk chunk_clone(cmark_chunk *src) memcpy(c.data, src->data, len); c.data[len] = '\0'; - return c; + return c; } static void subject_from_buf(subject *e, cmark_strbuf *buffer, @@ -307,9 +307,9 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) !utf8proc_is_punctuation(after_char)); if (c == '_') { *can_open = left_flanking && - (!right_flanking || utf8proc_is_punctuation(before_char)); + (!right_flanking || utf8proc_is_punctuation(before_char)); *can_close = right_flanking && - (!left_flanking || utf8proc_is_punctuation(after_char)); + (!left_flanking || utf8proc_is_punctuation(after_char)); } else if (c == '\'' || c == '"') { *can_open = left_flanking && !right_flanking; *can_close = right_flanking; diff --git a/src/xml.c b/src/xml.c index acb2f3d798..14f6d676ed 100644 --- a/src/xml.c +++ b/src/xml.c @@ -119,11 +119,11 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_IMAGE: cmark_strbuf_puts(xml, " destination=\""); escape_xml(xml, node->as.link.url.data, - node->as.link.url.len); + node->as.link.url.len); cmark_strbuf_putc(xml, '"'); cmark_strbuf_puts(xml, " title=\""); escape_xml(xml, node->as.link.title.data, - node->as.link.title.len); + node->as.link.title.len); cmark_strbuf_putc(xml, '"'); break; default: -- cgit 0.0.5-2-1-g0f52 From 6b240196296cd029771810b6f2c8fc5b61529c56 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 23:30:02 +0200 Subject: Factored out `S_find_first_nonspace` in `S_proces_line`. Added fields `offset`, `first_nonspace`, `indent`, and `blank` to `cmark_parser` struct. This just removes some repetition in the code. --- src/blocks.c | 178 +++++++++++++++++++++++++++++------------------------------ src/parser.h | 4 ++ 2 files changed, 92 insertions(+), 90 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index f6d0ee437d..fe999d71a5 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -69,6 +69,10 @@ cmark_parser *cmark_parser_new(int options) parser->root = document; parser->current = document; parser->line_number = 0; + parser->offset = 0; + parser->first_nonspace = 0; + parser->indent = 0; + parser->blank = false; parser->curline = line; parser->last_line_length = 0; parser->linebuf = buf; @@ -545,25 +549,35 @@ static void chop_trailing_hashtags(cmark_chunk *ch) } } +static void +S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) +{ + parser->first_nonspace = parser->offset; + while (peek_at(input, parser->first_nonspace) == ' ') { + parser->first_nonspace++; + } + + parser->indent = parser->first_nonspace - parser->offset; + parser->blank = is_line_end_char(peek_at(input, parser->first_nonspace)); +} + static void S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) { cmark_node* last_matched_container; - int offset = 0; int matched = 0; int lev = 0; int i; cmark_list *data = NULL; bool all_matched = true; cmark_node* container; - bool blank = false; - int first_nonspace; - int indent; bool indented; cmark_chunk input; bool maybe_lazy; utf8proc_detab(parser->curline, buffer, bytes); + parser->offset = 0; + parser->blank = false; // Add a newline to the end if not present: // TODO this breaks abstraction: @@ -586,32 +600,26 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) while (container->last_child && container->last_child->open) { container = container->last_child; - first_nonspace = offset; - while (peek_at(&input, first_nonspace) == ' ') { - first_nonspace++; - } - - indent = first_nonspace - offset; - blank = is_line_end_char(peek_at(&input, first_nonspace)); + S_find_first_nonspace(parser, &input); if (container->type == NODE_BLOCK_QUOTE) { - matched = indent <= 3 && peek_at(&input, first_nonspace) == '>'; + matched = parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; if (matched) { - offset = first_nonspace + 1; - if (peek_at(&input, offset) == ' ') - offset++; + parser->offset = parser->first_nonspace + 1; + if (peek_at(&input, parser->offset) == ' ') + parser->offset++; } else { all_matched = false; } } else if (container->type == NODE_ITEM) { - if (indent >= container->as.list.marker_offset + + if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { - offset += container->as.list.marker_offset + + parser->offset += container->as.list.marker_offset + container->as.list.padding; - } else if (blank) { - offset = first_nonspace; + } else if (parser->blank) { + parser->offset = parser->first_nonspace; } else { all_matched = false; } @@ -619,34 +627,34 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } else if (container->type == NODE_CODE_BLOCK) { if (!container->as.code.fenced) { // indented - if (indent >= CODE_INDENT) { - offset += CODE_INDENT; - } else if (blank) { - offset = first_nonspace; + if (parser->indent >= CODE_INDENT) { + parser->offset += CODE_INDENT; + } else if (parser->blank) { + parser->offset = parser->first_nonspace; } else { all_matched = false; } } else { // fenced matched = 0; - if (indent <= 3 && - (peek_at(&input, first_nonspace) == + if (parser->indent <= 3 && + (peek_at(&input, parser->first_nonspace) == container->as.code.fence_char)) { matched = scan_close_code_fence(&input, - first_nonspace); + parser->first_nonspace); } if (matched >= container->as.code.fence_length) { // closing fence - and since we're at // the end of a line, we can return: all_matched = false; - offset += matched; + parser->offset += matched; parser->current = finalize(parser, container); goto finished; } else { - // skip opt. spaces of fence offset + // skip opt. spaces of fence parser->offset i = container->as.code.fence_offset; while (i > 0 && - peek_at(&input, offset) == ' ') { - offset++; + peek_at(&input, parser->offset) == ' ') { + parser->offset++; i--; } } @@ -658,13 +666,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } else if (container->type == NODE_HTML) { - if (blank) { + if (parser->blank) { all_matched = false; } } else if (container->type == NODE_PARAGRAPH) { - if (blank) { + if (parser->blank) { all_matched = false; } @@ -679,7 +687,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) last_matched_container = container; // check to see if we've hit 2nd blank line, break out of list: - if (blank && container->last_line_blank) { + if (parser->blank && container->last_line_blank) { break_out_of_lists(parser, &container); } @@ -688,28 +696,23 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) while (container->type != NODE_CODE_BLOCK && container->type != NODE_HTML) { - first_nonspace = offset; - while (peek_at(&input, first_nonspace) == ' ') - first_nonspace++; + S_find_first_nonspace(parser, &input); + indented = parser->indent >= CODE_INDENT; - indent = first_nonspace - offset; - indented = indent >= CODE_INDENT; - blank = is_line_end_char(peek_at(&input, first_nonspace)); + if (!indented && peek_at(&input, parser->first_nonspace) == '>') { - if (!indented && peek_at(&input, first_nonspace) == '>') { - - offset = first_nonspace + 1; + parser->offset = parser->first_nonspace + 1; // optional following character - if (peek_at(&input, offset) == ' ') - offset++; - container = add_child(parser, container, NODE_BLOCK_QUOTE, offset + 1); + if (peek_at(&input, parser->offset) == ' ') + parser->offset++; + container = add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1); - } else if (!indented && (matched = scan_atx_header_start(&input, first_nonspace))) { + } else if (!indented && (matched = scan_atx_header_start(&input, parser->first_nonspace))) { - offset = first_nonspace + matched; - container = add_child(parser, container, NODE_HEADER, offset + 1); + parser->offset = parser->first_nonspace + matched; + container = add_child(parser, container, NODE_HEADER, parser->offset + 1); - int hashpos = cmark_chunk_strchr(&input, '#', first_nonspace); + int hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); int level = 0; while (peek_at(&input, hashpos) == '#') { @@ -719,24 +722,24 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->as.header.level = level; container->as.header.setext = false; - } else if (!indented && (matched = scan_open_code_fence(&input, first_nonspace))) { + } else if (!indented && (matched = scan_open_code_fence(&input, parser->first_nonspace))) { - container = add_child(parser, container, NODE_CODE_BLOCK, first_nonspace + 1); + container = add_child(parser, container, NODE_CODE_BLOCK, parser->first_nonspace + 1); container->as.code.fenced = true; - container->as.code.fence_char = peek_at(&input, first_nonspace); + container->as.code.fence_char = peek_at(&input, parser->first_nonspace); container->as.code.fence_length = matched; - container->as.code.fence_offset = first_nonspace - offset; + container->as.code.fence_offset = parser->first_nonspace - parser->offset; container->as.code.info = cmark_chunk_literal(""); - offset = first_nonspace + matched; + parser->offset = parser->first_nonspace + matched; - } else if (!indented && (matched = scan_html_block_tag(&input, first_nonspace))) { + } else if (!indented && (matched = scan_html_block_tag(&input, parser->first_nonspace))) { - container = add_child(parser, container, NODE_HTML, first_nonspace + 1); - // note, we don't adjust offset because the tag is part of the text + container = add_child(parser, container, NODE_HTML, parser->first_nonspace + 1); + // note, we don't adjust parser->offset because the tag is part of the text } else if (!indented && container->type == NODE_PARAGRAPH && - (lev = scan_setext_header_line(&input, first_nonspace)) && + (lev = scan_setext_header_line(&input, parser->first_nonspace)) && // check that there is only one line in the paragraph: (cmark_strbuf_strrchr(&container->string_content, '\n', cmark_strbuf_len(&container->string_content) - 2) < 0)) { @@ -744,64 +747,64 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->type = NODE_HEADER; container->as.header.level = lev; container->as.header.setext = true; - offset = input.len - 1; + parser->offset = input.len - 1; } else if (!indented && !(container->type == NODE_PARAGRAPH && !all_matched) && - (matched = scan_hrule(&input, first_nonspace))) { + (matched = scan_hrule(&input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext header: - container = add_child(parser, container, NODE_HRULE, first_nonspace + 1); + container = add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); container = finalize(parser, container); - offset = input.len - 1; + parser->offset = input.len - 1; - } else if ((matched = parse_list_marker(&input, first_nonspace, &data)) && + } else if ((matched = parse_list_marker(&input, parser->first_nonspace, &data)) && (!indented || container->type == NODE_LIST)) { // Note that we can have new list items starting with >= 4 // spaces indent, as long as the list container is still open. // compute padding: - offset = first_nonspace + matched; + parser->offset = parser->first_nonspace + matched; i = 0; - while (i <= 5 && peek_at(&input, offset + i) == ' ') { + while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') { i++; } // i = number of spaces after marker, up to 5 if (i >= 5 || i < 1 || - is_line_end_char(peek_at(&input, offset))) { + is_line_end_char(peek_at(&input, parser->offset))) { data->padding = matched + 1; if (i > 0) { - offset += 1; + parser->offset += 1; } } else { data->padding = matched + i; - offset += i; + parser->offset += i; } // check container; if it's a list, see if this list item // can continue the list; otherwise, create a list container. - data->marker_offset = indent; + data->marker_offset = parser->indent; if (container->type != NODE_LIST || !lists_match(&container->as.list, data)) { container = add_child(parser, container, NODE_LIST, - first_nonspace + 1); + parser->first_nonspace + 1); memcpy(&container->as.list, data, sizeof(*data)); } // add the list item container = add_child(parser, container, NODE_ITEM, - first_nonspace + 1); + parser->first_nonspace + 1); /* TODO: static */ memcpy(&container->as.list, data, sizeof(*data)); free(data); - } else if (indented && !maybe_lazy && !blank) { - offset += CODE_INDENT; - container = add_child(parser, container, NODE_CODE_BLOCK, offset + 1); + } else if (indented && !maybe_lazy && !parser->blank) { + parser->offset += CODE_INDENT; + container = add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1); container->as.code.fenced = false; container->as.code.fence_char = 0; container->as.code.fence_length = 0; @@ -819,17 +822,12 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) maybe_lazy = false; } - // what remains at offset is a text line. add the text to the + // what remains at parser->offset is a text line. add the text to the // appropriate container. - first_nonspace = offset; - while (peek_at(&input, first_nonspace) == ' ') - first_nonspace++; - - indent = first_nonspace - offset; - blank = is_line_end_char(peek_at(&input, first_nonspace)); + S_find_first_nonspace(parser, &input); - if (blank && container->last_child) { + if (parser->blank && container->last_child) { container->last_child->last_line_blank = true; } @@ -837,7 +835,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. we also don't set last_line_blank // on an empty list item. - container->last_line_blank = (blank && + container->last_line_blank = (parser->blank && container->type != NODE_BLOCK_QUOTE && container->type != NODE_HEADER && !(container->type == NODE_CODE_BLOCK && @@ -854,11 +852,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) if (parser->current != last_matched_container && container == last_matched_container && - !blank && + !parser->blank && parser->current->type == NODE_PARAGRAPH && cmark_strbuf_len(&parser->current->string_content) > 0) { - add_line(parser->current, &input, offset); + add_line(parser->current, &input, parser->offset); } else { // not a lazy continuation @@ -871,9 +869,9 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) if (container->type == NODE_CODE_BLOCK || container->type == NODE_HTML) { - add_line(container, &input, offset); + add_line(container, &input, parser->offset); - } else if (blank) { + } else if (parser->blank) { // ??? do nothing @@ -883,12 +881,12 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) container->as.header.setext == false) { chop_trailing_hashtags(&input); } - add_line(container, &input, first_nonspace); + add_line(container, &input, parser->first_nonspace); } else { // create paragraph container for line - container = add_child(parser, container, NODE_PARAGRAPH, first_nonspace + 1); - add_line(container, &input, first_nonspace); + container = add_child(parser, container, NODE_PARAGRAPH, parser->first_nonspace + 1); + add_line(container, &input, parser->first_nonspace); } diff --git a/src/parser.h b/src/parser.h index cbccae32df..ccdf84bca8 100644 --- a/src/parser.h +++ b/src/parser.h @@ -16,6 +16,10 @@ struct cmark_parser { struct cmark_node* root; struct cmark_node* current; int line_number; + int offset; + int first_nonspace; + int indent; + bool blank; cmark_strbuf *curline; int last_line_length; cmark_strbuf *linebuf; -- cgit 0.0.5-2-1-g0f52 From c98120014c0bff78062f477b9b59224e55ae5a31 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 23:32:10 +0200 Subject: Rename `is_line_end_char` to `S_is_line_end_char`. --- src/blocks.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index fe999d71a5..b72c256bc9 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -19,7 +19,7 @@ #define peek_at(i, n) (i)->data[n] static inline bool -is_line_end_char(char c) +S_is_line_end_char(char c) { return (c == '\n' || c == '\r'); } @@ -142,7 +142,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) for (i = ln->size - 1; i >= 0; --i) { c = ln->ptr[i]; - if (c != ' ' && c != '\t' && !is_line_end_char(c)) + if (c != ' ' && c != '\t' && !S_is_line_end_char(c)) break; } @@ -155,7 +155,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) for(; i < ln->size; ++i) { c = ln->ptr[i]; - if (!is_line_end_char(c)) + if (!S_is_line_end_char(c)) continue; cmark_strbuf_truncate(ln, i); @@ -253,7 +253,7 @@ finalize(cmark_parser *parser, cmark_node* b) // first line of contents becomes info for (pos = 0; pos < b->string_content.size; ++pos) { - if (is_line_end_char(b->string_content.ptr[pos])) + if (S_is_line_end_char(b->string_content.ptr[pos])) break; } assert(pos < b->string_content.size); @@ -499,7 +499,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, size_t line_len; for (eol = buffer; eol < end; ++eol) { - if (is_line_end_char(*eol)) + if (S_is_line_end_char(*eol)) break; } if (eol >= end) @@ -558,7 +558,7 @@ S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) } parser->indent = parser->first_nonspace - parser->offset; - parser->blank = is_line_end_char(peek_at(input, parser->first_nonspace)); + parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); } static void @@ -582,7 +582,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) // Add a newline to the end if not present: // TODO this breaks abstraction: if (parser->curline->size > 0 && - !is_line_end_char(parser->curline->ptr[parser->curline->size - 1])) { + !S_is_line_end_char(parser->curline->ptr[parser->curline->size - 1])) { cmark_strbuf_putc(parser->curline, '\n'); } @@ -772,7 +772,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) } // i = number of spaces after marker, up to 5 if (i >= 5 || i < 1 || - is_line_end_char(peek_at(&input, parser->offset))) { + S_is_line_end_char(peek_at(&input, parser->offset))) { data->padding = matched + 1; if (i > 0) { parser->offset += 1; -- cgit 0.0.5-2-1-g0f52 From 7d3fc1e3d39e57eed84e6918b2e7d38b0186319d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 18:47:01 -0700 Subject: Updated version to 0.20.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a4ebe9279c..7813ca194f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 19) +set(PROJECT_VERSION_MINOR 20) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From dcf112add5861b99b0cb33a9c0c2e8c3edd9c2ad Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Jun 2015 18:46:41 -0700 Subject: Updated changelog. --- changelog.txt | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/changelog.txt b/changelog.txt index e622f0bb2c..9323ea1176 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,36 @@ +[0.20.0] + + * Fixed bug in list item parsing when items indented >= 4 spaces (#52). + * Don't allow link labels with no non-whitespace characters + (jgm/CommonMark#322). + * Fixed multiple issues with numeric entities (#33). + * Support CR and CRLF line endings (Ben Trask). + * Added test for different line endings to `api_test`. + * Allow NULL value in string setters (Nick Wellnhofer). (NULL + produces a 0-length string value.) Internally, URL and + title are now stored as `cmark_chunk` rather than `char *`. + * Fixed memory leak in `cmark_consolidate_text_nodes` (#32). + * Fixed `is_autolink` in the CommonMark renderer (#50). Previously *any* + link with an absolute URL was treated as an autolink. + * Cope with broken `snprintf` on Windows (Nick Wellnhofer). On Windows, + `snprintf` returns -1 if the output was truncated. Fall back to + Windows-specific `_scprintf`. + * Factored out `S_find_first_nonspace` in `S_proces_line`. + Added fields `offset`, `first_nonspace`, `indent`, and `blank` + to `cmark_parser` struct. This just removes some repetition. + * Added Racket Racket (5.3+) wrapper (Eli Barzilay). + * Removed -pg from Debug build flags (#47). + * Added Ubsan build target, to check for undefined behavior. + * Improved `make leakcheck`. We now return an error status if anything + in the loop fails. We now check `--smart` and `--normalize` options. + * Removed `wrapper3.py`, made `wrapper.py` work with python 2 and 3. + Also improved the wrapper to work with Windows, and to use smart + punctuation (as an example). + * In `wrapper.rb`, added argument for options. + * Revised luajit wrapper. + * Added build status badges to README.md. + * Added links to go, perl, ruby, R, and Haskell bindings to README.md. + [0.19.0] * Fixed `_` emphasis parsing to conform to spec (jgm/CommonMark#317). -- cgit 0.0.5-2-1-g0f52 From 5fecd3827f2d9c637576dd8616debf4813381981 Mon Sep 17 00:00:00 2001 From: bryant Date: Sat, 6 Jun 2015 22:20:30 -0400 Subject: fix ENSURE_SIZE to actually check left arg length. --- src/buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index 2b7f062097..cb6af42c0d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -16,7 +16,7 @@ unsigned char cmark_strbuf__initbuf[1]; unsigned char cmark_strbuf__oom[1]; #define ENSURE_SIZE(b, d) \ - if ((d) > buf->asize && cmark_strbuf_grow(b, (d)) < 0) \ + if ((d) > b->asize && cmark_strbuf_grow(b, (d)) < 0) \ return -1; #ifndef MIN -- cgit 0.0.5-2-1-g0f52 From 14dc4a7781a74a156a418690467554bae4a79b97 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 30 May 2015 00:02:51 +0200 Subject: Abort on strbuf errors Users of the strbuf API are supposed to check for an OOM condition after appending to strbufs, but: * This is never done in the whole code base. * The implementation was flawed because only `ptr` was set to the OOM value without adjusting `size` and `asize`. After an error, subsequent calls could very well lead to segfaults, contrary to the documentation. Change the code to always abort on errors with a message printed to stderr. The only alternative is to propagate errors throughout the whole library which seems infeasible. --- src/buffer.c | 73 +++++++++++++++++++----------------------------------------- src/buffer.h | 56 ++++++++-------------------------------------- 2 files changed, 32 insertions(+), 97 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index cb6af42c0d..e2ebc022d6 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -13,11 +13,10 @@ * assume ptr is non-NULL and zero terminated even for new cmark_strbufs. */ unsigned char cmark_strbuf__initbuf[1]; -unsigned char cmark_strbuf__oom[1]; -#define ENSURE_SIZE(b, d) \ - if ((d) > b->asize && cmark_strbuf_grow(b, (d)) < 0) \ - return -1; +#define ENSURE_SIZE(b, d) \ + if ((d) > b->asize) \ + cmark_strbuf_grow(b, (d)); \ #ifndef MIN #define MIN(x,y) ((xptr == cmark_strbuf__oom) - return -1; - if (target_size <= buf->asize) - return 0; + return; if (buf->asize == 0) { new_size = target_size; @@ -63,9 +59,8 @@ int cmark_strbuf_try_grow(cmark_strbuf *buf, int target_size, bool mark_oom) new_ptr = (unsigned char *)realloc(new_ptr, new_size); if (!new_ptr) { - if (mark_oom) - buf->ptr = cmark_strbuf__oom; - return -1; + perror("realloc in cmark_strbuf_grow"); + abort(); } buf->asize = new_size; @@ -75,18 +70,6 @@ int cmark_strbuf_try_grow(cmark_strbuf *buf, int target_size, bool mark_oom) if (buf->size >= buf->asize) buf->size = buf->asize - 1; buf->ptr[buf->size] = '\0'; - - return 0; -} - -int cmark_strbuf_grow(cmark_strbuf *buf, int target_size) -{ - return cmark_strbuf_try_grow(buf, target_size, true); -} - -bool cmark_strbuf_oom(const cmark_strbuf *buf) -{ - return (buf->ptr == cmark_strbuf__oom); } size_t cmark_strbuf_len(const cmark_strbuf *buf) @@ -98,7 +81,7 @@ void cmark_strbuf_free(cmark_strbuf *buf) { if (!buf) return; - if (buf->ptr != cmark_strbuf__initbuf && buf->ptr != cmark_strbuf__oom) + if (buf->ptr != cmark_strbuf__initbuf) free(buf->ptr); cmark_strbuf_init(buf, 0); @@ -112,7 +95,7 @@ void cmark_strbuf_clear(cmark_strbuf *buf) buf->ptr[0] = '\0'; } -int cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len) +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len) { if (len <= 0 || data == NULL) { cmark_strbuf_clear(buf); @@ -124,42 +107,38 @@ int cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len) buf->size = len; buf->ptr[buf->size] = '\0'; } - return 0; } -int cmark_strbuf_sets(cmark_strbuf *buf, const char *string) +void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { - return cmark_strbuf_set(buf, - (const unsigned char *)string, - string ? strlen(string) : 0); + cmark_strbuf_set(buf, (const unsigned char *)string, + string ? strlen(string) : 0); } -int cmark_strbuf_putc(cmark_strbuf *buf, int c) +void cmark_strbuf_putc(cmark_strbuf *buf, int c) { ENSURE_SIZE(buf, buf->size + 2); buf->ptr[buf->size++] = c; buf->ptr[buf->size] = '\0'; - return 0; } -int cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len) +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len) { if (len <= 0) - return 0; + return; ENSURE_SIZE(buf, buf->size + len + 1); memmove(buf->ptr + buf->size, data, len); buf->size += len; buf->ptr[buf->size] = '\0'; - return 0; } -int cmark_strbuf_puts(cmark_strbuf *buf, const char *string) +void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { - return cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string)); + cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string)); } -int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) +void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) { const int expected_size = buf->size + (strlen(format) * 2); int len; @@ -185,9 +164,8 @@ int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) va_end(args); if (len < 0) { - free(buf->ptr); - buf->ptr = cmark_strbuf__oom; - return -1; + perror("vsnprintf in cmark_strbuf_vprintf"); + abort(); } if (len + 1 <= buf->asize - buf->size) { @@ -197,20 +175,15 @@ int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) ENSURE_SIZE(buf, buf->size + len + 1); } - - return 0; } -int cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) +void cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) { - int r; va_list ap; va_start(ap, format); - r = cmark_strbuf_vprintf(buf, format, ap); + cmark_strbuf_vprintf(buf, format, ap); va_end(ap); - - return r; } void cmark_strbuf_copy_cstr(char *data, int datasize, const cmark_strbuf *buf) @@ -242,7 +215,7 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { unsigned char *data = buf->ptr; - if (buf->asize == 0 || buf->ptr == cmark_strbuf__oom) { + if (buf->asize == 0) { /* return an empty string */ return (unsigned char *)calloc(1, 1); } diff --git a/src/buffer.h b/src/buffer.h index fb9f91067e..417df266a4 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -16,8 +16,6 @@ typedef struct { extern unsigned char cmark_strbuf__initbuf[]; -extern unsigned char cmark_strbuf__oom[]; - #define GH_BUF_INIT { cmark_strbuf__initbuf, 0, 0 } /** @@ -28,42 +26,14 @@ extern unsigned char cmark_strbuf__oom[]; */ void cmark_strbuf_init(cmark_strbuf *buf, int initial_size); -/** - * Attempt to grow the buffer to hold at least `target_size` bytes. - * - * If the allocation fails, this will return an error. If mark_oom is true, - * this will mark the buffer as invalid for future operations; if false, - * existing buffer content will be preserved, but calling code must handle - * that buffer was not expanded. - */ -int cmark_strbuf_try_grow(cmark_strbuf *buf, int target_size, bool mark_oom); - /** * Grow the buffer to hold at least `target_size` bytes. - * - * If the allocation fails, this will return an error and the buffer will be - * marked as invalid for future operations, invaliding contents. - * - * @return 0 on success or -1 on failure */ -int cmark_strbuf_grow(cmark_strbuf *buf, int target_size); +void cmark_strbuf_grow(cmark_strbuf *buf, int target_size); void cmark_strbuf_free(cmark_strbuf *buf); void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); -/** - * Test if there have been any reallocation failures with this cmark_strbuf. - * - * Any function that writes to a cmark_strbuf can fail due to memory allocation - * issues. If one fails, the cmark_strbuf will be marked with an OOM error and - * further calls to modify the buffer will fail. Check cmark_strbuf_oom() at the - * end of your sequence and it will be true if you ran out of memory at any - * point with that buffer. - * - * @return false if no error, true if allocation error - */ -bool cmark_strbuf_oom(const cmark_strbuf *buf); - size_t cmark_strbuf_len(const cmark_strbuf *buf); int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); @@ -79,22 +49,14 @@ static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) #define cmark_strbuf_at(buf, n) ((buf)->ptr[n]) -/* - * Functions below that return int value error codes will return 0 on - * success or -1 on failure (which generally means an allocation failed). - * Using a cmark_strbuf where the allocation has failed with result in -1 from - * all further calls using that buffer. As a result, you can ignore the - * return code of these functions and call them in a series then just call - * cmark_strbuf_oom at the end. - */ -int cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len); -int cmark_strbuf_sets(cmark_strbuf *buf, const char *string); -int cmark_strbuf_putc(cmark_strbuf *buf, int c); -int cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len); -int cmark_strbuf_puts(cmark_strbuf *buf, const char *string); -int cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) -CMARK_ATTRIBUTE((format (printf, 2, 3))); -int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap); +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len); +void cmark_strbuf_sets(cmark_strbuf *buf, const char *string); +void cmark_strbuf_putc(cmark_strbuf *buf, int c); +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len); +void cmark_strbuf_puts(cmark_strbuf *buf, const char *string); +void cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) + CMARK_ATTRIBUTE((format (printf, 2, 3))); +void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap); void cmark_strbuf_clear(cmark_strbuf *buf); int cmark_strbuf_strchr(const cmark_strbuf *buf, int c, int pos); -- cgit 0.0.5-2-1-g0f52 From 65f0a13acefb06fd0e94f3a08b93102e20ecaf67 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 7 Jun 2015 10:23:55 -0700 Subject: Updated changelog. --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index 9323ea1176..d6e244b64c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -18,6 +18,7 @@ * Factored out `S_find_first_nonspace` in `S_proces_line`. Added fields `offset`, `first_nonspace`, `indent`, and `blank` to `cmark_parser` struct. This just removes some repetition. + * Fixed typo in `ENSURE_SIZE` macro (bryant). * Added Racket Racket (5.3+) wrapper (Eli Barzilay). * Removed -pg from Debug build flags (#47). * Added Ubsan build target, to check for undefined behavior. -- cgit 0.0.5-2-1-g0f52 From 3adc586d9d7539e4d33f737110ffd4e236379099 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 7 Jun 2015 12:41:47 -0700 Subject: Added benchmark for hoedown. Note that hoedown doesn't show the 32/64 bit difference that sundown does -- so it was probably a bug in sundown. Removed the comments from benchmarks.md about this. --- README.md | 4 ++-- benchmarks.md | 13 +++---------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 465efe0f8a..ff0fa3f669 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,8 @@ Advantages of this library: C99 and have no external dependencies. It has been tested with MSVC, gcc, tcc, and clang. -- **Fast.** Performance is on par with the fastest existing - Markdown parser, [sundown]: see the [benchmarks]. +- **Fast.** Performance is very good, on par with the fastest + Markdown processors: see the [benchmarks]. - **Accurate.** The library passes all CommonMark conformance tests. diff --git a/benchmarks.md b/benchmarks.md index 848c54a1e0..e905119718 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -14,9 +14,9 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | marked | 1.94 | | **commonmark.js** | 1.93 | | discount | 1.86 | -| sundown | 0.33 | -| **cmark** | 0.33 | - +| **cmark** | 0.35 | +| sundown | 0.34 | +| hoedown | 0.21 | To run these benchmarks, use `make bench PROG=/path/to/program`. @@ -31,10 +31,3 @@ with the benchmark input and the time to run it with no input. not penalized by startup time.) A median of ten runs is taken. The process is reniced to a high priority so that the system doesn't interrupt runs. - -Note that these benchmarks were done on a 32-bit machine. On a 64-bit -machines, sundown is significantly faster than cmark (0.146s vs 0.237s -on Intel i5/OSX with Clang, 0.130s vs 0.191s on a 64-bit Debian VPS -with GCC). I do not know why the performance difference shows up on -the 64-bit architecture and not the 32-bit, but that is something that -might be investigated. -- cgit 0.0.5-2-1-g0f52 From 019128a8e7f74344cc03e001e8b7286b42a03002 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 13:15:07 +0200 Subject: Switch cmark_markdown_to_html over to size_t --- man/man3/cmark.3 | 4 ++-- src/cmark.c | 2 +- src/cmark.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 5b68ecb40e..82c34cd58f 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 21, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 07, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -10,7 +10,7 @@ DESCRIPTION Simple Interface .PP -\fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIint len\f[], \fIint options\f[]) +\fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIsize_t len\f[], \fIint options\f[]) .PP Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length diff --git a/src/cmark.c b/src/cmark.c index 79ceabf587..35765b17a6 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -9,7 +9,7 @@ const int cmark_version = CMARK_VERSION; const char cmark_version_string[] = CMARK_VERSION_STRING; -char *cmark_markdown_to_html(const char *text, int len, int options) +char *cmark_markdown_to_html(const char *text, size_t len, int options) { cmark_node *doc; char *result; diff --git a/src/cmark.h b/src/cmark.h index 84c6f76764..d86e13e7d5 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -24,7 +24,7 @@ extern "C" { * UTF-8-encoded string. */ CMARK_EXPORT -char *cmark_markdown_to_html(const char *text, int len, int options); +char *cmark_markdown_to_html(const char *text, size_t len, int options); /** ## Node Structure */ -- cgit 0.0.5-2-1-g0f52 From 1193050109dee6be85c82bd29a1c817532dde912 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 13:16:13 +0200 Subject: Use custom type bufsize_t for string buffer sizes This makes it easier to change the type later. No functional change. The rest of the code base still has to be adjusted to use the new type. Also add some TODO comments in buffer.c. --- src/buffer.c | 56 ++++++++++++++++++++++++++++++++++++-------------------- src/buffer.h | 26 +++++++++++++++----------- 2 files changed, 51 insertions(+), 31 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index e2ebc022d6..78d0a00ba7 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -22,20 +22,21 @@ unsigned char cmark_strbuf__initbuf[1]; #define MIN(x,y) ((xasize = 0; buf->size = 0; buf->ptr = cmark_strbuf__initbuf; + // TODO: Check for negative initial_size. if (initial_size) cmark_strbuf_grow(buf, initial_size); } -void cmark_strbuf_grow(cmark_strbuf *buf, int target_size) +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { unsigned char *new_ptr; - int new_size; + bufsize_t new_size; if (target_size <= buf->asize) return; @@ -51,9 +52,11 @@ void cmark_strbuf_grow(cmark_strbuf *buf, int target_size) /* grow the buffer size by 1.5, until it's big enough * to fit our target size */ while (new_size < target_size) + // TODO: Check for overflow. new_size = (new_size << 1) - (new_size >> 1); /* round allocation up to multiple of 8 */ + // TODO: Check for overflow. new_size = (new_size + 7) & ~7; new_ptr = (unsigned char *)realloc(new_ptr, new_size); @@ -95,12 +98,13 @@ void cmark_strbuf_clear(cmark_strbuf *buf) buf->ptr[0] = '\0'; } -void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len) +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t len) { if (len <= 0 || data == NULL) { cmark_strbuf_clear(buf); } else { if (data != buf->ptr) { + // TODO: Check for overflow. ENSURE_SIZE(buf, len + 1); memmove(buf->ptr, data, len); } @@ -117,16 +121,18 @@ void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) void cmark_strbuf_putc(cmark_strbuf *buf, int c) { + // TODO: Check for overflow. ENSURE_SIZE(buf, buf->size + 2); buf->ptr[buf->size++] = c; buf->ptr[buf->size] = '\0'; } -void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len) +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len) { if (len <= 0) return; + // TODO: Check for overflow. ENSURE_SIZE(buf, buf->size + len + 1); memmove(buf->ptr + buf->size, data, len); buf->size += len; @@ -140,8 +146,8 @@ void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) { - const int expected_size = buf->size + (strlen(format) * 2); - int len; + // TODO: Check for overflow. + const bufsize_t expected_size = buf->size + (strlen(format) * 2); ENSURE_SIZE(buf, expected_size); @@ -149,7 +155,7 @@ void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) va_list args; va_copy(args, ap); - len = vsnprintf( + int len = vsnprintf( (char *)buf->ptr + buf->size, buf->asize - buf->size, format, args @@ -168,11 +174,13 @@ void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) abort(); } + // TODO: Check for overflow. if (len + 1 <= buf->asize - buf->size) { buf->size += len; break; } + // TODO: Check for overflow. ENSURE_SIZE(buf, buf->size + len + 1); } } @@ -186,10 +194,11 @@ void cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) va_end(ap); } -void cmark_strbuf_copy_cstr(char *data, int datasize, const cmark_strbuf *buf) +void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf) { - int copylen; + bufsize_t copylen; + // TODO: Check negative datasize. assert(data && datasize && buf); data[0] = '\0'; @@ -224,16 +233,19 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) return data; } -void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, int asize) +void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, bufsize_t asize) { cmark_strbuf_free(buf); if (ptr) { buf->ptr = ptr; buf->size = strlen((char *)ptr); + // TODO: Check for negative asize. if (asize) + // TODO: Check for overflow. buf->asize = (asize < buf->size) ? buf->size + 1 : asize; else /* pass 0 to fall back on strlen + 1 */ + // TODO: Check for overflow. buf->asize = buf->size + 1; } else { cmark_strbuf_grow(buf, asize); @@ -247,19 +259,21 @@ int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; } -int cmark_strbuf_strchr(const cmark_strbuf *buf, int c, int pos) +bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) { + // TODO: Bounds check. const unsigned char *p = (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos); if (!p) return -1; - return (int)(p - (const unsigned char *)buf->ptr); + return (bufsize_t)(p - (const unsigned char *)buf->ptr); } -int cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, int pos) +bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) { - int i; + bufsize_t i; + // TODO: Bounds check. for (i = pos; i >= 0; i--) { if (buf->ptr[i] == (unsigned char) c) return i; @@ -268,17 +282,19 @@ int cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, int pos) return -1; } -void cmark_strbuf_truncate(cmark_strbuf *buf, int len) +void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) { + // TODO: Check for negative len. if (len < buf->size) { buf->size = len; buf->ptr[buf->size] = '\0'; } } -void cmark_strbuf_drop(cmark_strbuf *buf, int n) +void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) { if (n > 0) { + // TODO: Bounds check. buf->size = buf->size - n; if (buf->size) memmove(buf->ptr, buf->ptr + n, buf->size); @@ -304,7 +320,7 @@ void cmark_strbuf_rtrim(cmark_strbuf *buf) void cmark_strbuf_trim(cmark_strbuf *buf) { - int i = 0; + bufsize_t i = 0; if (!buf->size) return; @@ -322,7 +338,7 @@ void cmark_strbuf_trim(cmark_strbuf *buf) void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) { bool last_char_was_space = false; - int r, w; + bufsize_t r, w; for (r = 0, w = 0; r < s->size; ++r) { switch (s->ptr[r]) { @@ -347,7 +363,7 @@ void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) // Destructively unescape a string: remove backslashes before punctuation chars. extern void cmark_strbuf_unescape(cmark_strbuf *buf) { - int r, w; + bufsize_t r, w; for (r = 0, w = 0; r < buf->size; ++r) { if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1])) diff --git a/src/buffer.h b/src/buffer.h index 417df266a4..99e6feb713 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -3,20 +3,24 @@ #include #include +#include #include "config.h" #ifdef __cplusplus extern "C" { #endif +typedef int bufsize_t; + typedef struct { unsigned char *ptr; - int asize, size; + bufsize_t asize, size; } cmark_strbuf; extern unsigned char cmark_strbuf__initbuf[]; #define GH_BUF_INIT { cmark_strbuf__initbuf, 0, 0 } +#define BUFSIZE_MAX INT_MAX /** * Initialize a cmark_strbuf structure. @@ -24,12 +28,12 @@ extern unsigned char cmark_strbuf__initbuf[]; * For the cases where GH_BUF_INIT cannot be used to do static * initialization. */ -void cmark_strbuf_init(cmark_strbuf *buf, int initial_size); +void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size); /** * Grow the buffer to hold at least `target_size` bytes. */ -void cmark_strbuf_grow(cmark_strbuf *buf, int target_size); +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); void cmark_strbuf_free(cmark_strbuf *buf); void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); @@ -38,9 +42,9 @@ size_t cmark_strbuf_len(const cmark_strbuf *buf); int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); -void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, int asize); +void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, bufsize_t asize); unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); -void cmark_strbuf_copy_cstr(char *data, int datasize, const cmark_strbuf *buf); +void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf); static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { @@ -49,20 +53,20 @@ static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) #define cmark_strbuf_at(buf, n) ((buf)->ptr[n]) -void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, int len); +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t len); void cmark_strbuf_sets(cmark_strbuf *buf, const char *string); void cmark_strbuf_putc(cmark_strbuf *buf, int c); -void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, int len); +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len); void cmark_strbuf_puts(cmark_strbuf *buf, const char *string); void cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) CMARK_ATTRIBUTE((format (printf, 2, 3))); void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap); void cmark_strbuf_clear(cmark_strbuf *buf); -int cmark_strbuf_strchr(const cmark_strbuf *buf, int c, int pos); -int cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, int pos); -void cmark_strbuf_drop(cmark_strbuf *buf, int n); -void cmark_strbuf_truncate(cmark_strbuf *buf, int len); +bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos); +bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos); +void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n); +void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len); void cmark_strbuf_rtrim(cmark_strbuf *buf); void cmark_strbuf_trim(cmark_strbuf *buf); void cmark_strbuf_normalize_whitespace(cmark_strbuf *s); -- cgit 0.0.5-2-1-g0f52 From 1a38daeb81db11ef2acd57690aad36b4ce3fe3da Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 30 May 2015 00:38:20 +0200 Subject: Simplify oversizing of strbufs Always add 50% on top of target size. No need for a loop. --- src/buffer.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 78d0a00ba7..8ec38b01ea 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -42,18 +42,15 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) return; if (buf->asize == 0) { - new_size = target_size; new_ptr = NULL; } else { - new_size = buf->asize; new_ptr = buf->ptr; } - /* grow the buffer size by 1.5, until it's big enough - * to fit our target size */ - while (new_size < target_size) - // TODO: Check for overflow. - new_size = (new_size << 1) - (new_size >> 1); + /* Oversize the buffer by 50% to guarantee amortized linear time + * complexity on append operations. */ + // TODO: Check for overflow. + new_size = target_size + target_size / 2; /* round allocation up to multiple of 8 */ // TODO: Check for overflow. -- cgit 0.0.5-2-1-g0f52 From ea23e2b42f05ac4a04154e572fc5ce8c84c29c10 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 13:41:13 +0200 Subject: Check for overflow in cmark_strbuf_grow --- src/buffer.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 8ec38b01ea..8fb26524ff 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -36,7 +36,6 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { unsigned char *new_ptr; - bufsize_t new_size; if (target_size <= buf->asize) return; @@ -49,13 +48,18 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) /* Oversize the buffer by 50% to guarantee amortized linear time * complexity on append operations. */ - // TODO: Check for overflow. - new_size = target_size + target_size / 2; + size_t new_size = (size_t)target_size + (size_t)target_size / 2; /* round allocation up to multiple of 8 */ - // TODO: Check for overflow. new_size = (new_size + 7) & ~7; + if (new_size < (size_t)target_size /* Integer overflow. */ + || new_size > BUFSIZE_MAX /* Truncation overflow. */ + ) { + /* Oversize by the maximum possible amount. */ + new_size = BUFSIZE_MAX; + } + new_ptr = (unsigned char *)realloc(new_ptr, new_size); if (!new_ptr) { @@ -63,7 +67,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) abort(); } - buf->asize = new_size; + buf->asize = (bufsize_t)new_size; buf->ptr = new_ptr; /* truncate the existing buffer size if necessary */ -- cgit 0.0.5-2-1-g0f52 From a87b62a8eb42ee5bf6307f6c140bb400c860bcdd Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 14:01:09 +0200 Subject: Account for null terminator in cmark_strbuf_grow This simplifies overflow checks. --- src/buffer.c | 26 +++++++++++++++++++------- src/buffer.h | 3 +++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 8fb26524ff..d39828e0b2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -15,7 +15,7 @@ unsigned char cmark_strbuf__initbuf[1]; #define ENSURE_SIZE(b, d) \ - if ((d) > b->asize) \ + if ((d) >= b->asize) \ cmark_strbuf_grow(b, (d)); \ #ifndef MIN @@ -33,11 +33,16 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) cmark_strbuf_grow(buf, initial_size); } +void cmark_strbuf_overflow_err() { + fprintf(stderr, "String buffer overflow"); + abort(); +} + void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { unsigned char *new_ptr; - if (target_size <= buf->asize) + if (target_size < buf->asize) return; if (buf->asize == 0) { @@ -50,12 +55,20 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) * complexity on append operations. */ size_t new_size = (size_t)target_size + (size_t)target_size / 2; + /* Account for terminating null byte. */ + new_size += 1; + /* round allocation up to multiple of 8 */ new_size = (new_size + 7) & ~7; if (new_size < (size_t)target_size /* Integer overflow. */ || new_size > BUFSIZE_MAX /* Truncation overflow. */ ) { + if (target_size >= BUFSIZE_MAX) { + /* No space for terminating null byte. */ + cmark_strbuf_overflow_err(); + return; /* unreachable */ + } /* Oversize by the maximum possible amount. */ new_size = BUFSIZE_MAX; } @@ -105,8 +118,7 @@ void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t le cmark_strbuf_clear(buf); } else { if (data != buf->ptr) { - // TODO: Check for overflow. - ENSURE_SIZE(buf, len + 1); + ENSURE_SIZE(buf, len); memmove(buf->ptr, data, len); } buf->size = len; @@ -123,7 +135,7 @@ void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) void cmark_strbuf_putc(cmark_strbuf *buf, int c) { // TODO: Check for overflow. - ENSURE_SIZE(buf, buf->size + 2); + ENSURE_SIZE(buf, buf->size + 1); buf->ptr[buf->size++] = c; buf->ptr[buf->size] = '\0'; } @@ -134,7 +146,7 @@ void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t le return; // TODO: Check for overflow. - ENSURE_SIZE(buf, buf->size + len + 1); + ENSURE_SIZE(buf, buf->size + len); memmove(buf->ptr + buf->size, data, len); buf->size += len; buf->ptr[buf->size] = '\0'; @@ -182,7 +194,7 @@ void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) } // TODO: Check for overflow. - ENSURE_SIZE(buf, buf->size + len + 1); + ENSURE_SIZE(buf, buf->size + len); } } diff --git a/src/buffer.h b/src/buffer.h index 99e6feb713..526276d37b 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -72,6 +72,9 @@ void cmark_strbuf_trim(cmark_strbuf *buf); void cmark_strbuf_normalize_whitespace(cmark_strbuf *s); void cmark_strbuf_unescape(cmark_strbuf *s); +/* Print error and abort. */ +void cmark_strbuf_overflow_err(void); + #ifdef __cplusplus } #endif -- cgit 0.0.5-2-1-g0f52 From dbfd2eba6427893cb48587d914719402252855b2 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 14:04:20 +0200 Subject: Remove useless code in cmark_strbuf_grow cmark_strbuf_grow will never truncate a buffer. --- src/buffer.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index d39828e0b2..f74c8c6ded 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -82,11 +82,6 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) buf->asize = (bufsize_t)new_size; buf->ptr = new_ptr; - - /* truncate the existing buffer size if necessary */ - if (buf->size >= buf->asize) - buf->size = buf->asize - 1; - buf->ptr[buf->size] = '\0'; } size_t cmark_strbuf_len(const cmark_strbuf *buf) -- cgit 0.0.5-2-1-g0f52 From 996bcfb2eee238cf9a07d26b90e673f2496cbbec Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 14:33:24 +0200 Subject: Check for overflow when growing strbufs Replace macro ENSURE_SIZE with inline function S_strbuf_grow_by that checks for overflow. --- src/buffer.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index f74c8c6ded..78be967327 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "config.h" #include "cmark_ctype.h" @@ -14,10 +15,6 @@ */ unsigned char cmark_strbuf__initbuf[1]; -#define ENSURE_SIZE(b, d) \ - if ((d) >= b->asize) \ - cmark_strbuf_grow(b, (d)); \ - #ifndef MIN #define MIN(x,y) ((xsize + add; + + if (target_size < add /* Integer overflow. */ + || target_size > BUFSIZE_MAX /* Truncation overflow. */ + ) { + cmark_strbuf_overflow_err(); + return; /* unreachable */ + } + + if ((bufsize_t)target_size >= buf->asize) + cmark_strbuf_grow(buf, (bufsize_t)target_size); +} + void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { unsigned char *new_ptr; @@ -113,7 +125,8 @@ void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t le cmark_strbuf_clear(buf); } else { if (data != buf->ptr) { - ENSURE_SIZE(buf, len); + if (len >= buf->asize) + cmark_strbuf_grow(buf, len); memmove(buf->ptr, data, len); } buf->size = len; @@ -129,8 +142,7 @@ void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) void cmark_strbuf_putc(cmark_strbuf *buf, int c) { - // TODO: Check for overflow. - ENSURE_SIZE(buf, buf->size + 1); + S_strbuf_grow_by(buf, 1); buf->ptr[buf->size++] = c; buf->ptr[buf->size] = '\0'; } @@ -140,8 +152,7 @@ void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t le if (len <= 0) return; - // TODO: Check for overflow. - ENSURE_SIZE(buf, buf->size + len); + S_strbuf_grow_by(buf, len); memmove(buf->ptr + buf->size, data, len); buf->size += len; buf->ptr[buf->size] = '\0'; @@ -154,10 +165,10 @@ void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) { - // TODO: Check for overflow. - const bufsize_t expected_size = buf->size + (strlen(format) * 2); - - ENSURE_SIZE(buf, expected_size); + size_t expected_size = strlen(format); + if (expected_size <= SIZE_MAX / 2) + expected_size *= 2; + S_strbuf_grow_by(buf, expected_size); while (1) { va_list args; @@ -188,8 +199,7 @@ void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) break; } - // TODO: Check for overflow. - ENSURE_SIZE(buf, buf->size + len); + S_strbuf_grow_by(buf, len); } } -- cgit 0.0.5-2-1-g0f52 From ad94c00083285703144e4874642fb89dac2f5446 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 14:42:38 +0200 Subject: Check for negative lengths in buffer.c --- src/buffer.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 78be967327..db575edea1 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -25,8 +25,7 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) buf->size = 0; buf->ptr = cmark_strbuf__initbuf; - // TODO: Check for negative initial_size. - if (initial_size) + if (initial_size > 0) cmark_strbuf_grow(buf, initial_size); } @@ -216,8 +215,9 @@ void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf * { bufsize_t copylen; - // TODO: Check negative datasize. - assert(data && datasize && buf); + assert(buf); + if (!data || datasize <= 0) + return; data[0] = '\0'; @@ -258,8 +258,7 @@ void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, bufsize_t asize) if (ptr) { buf->ptr = ptr; buf->size = strlen((char *)ptr); - // TODO: Check for negative asize. - if (asize) + if (asize > 0) // TODO: Check for overflow. buf->asize = (asize < buf->size) ? buf->size + 1 : asize; else /* pass 0 to fall back on strlen + 1 */ @@ -302,7 +301,9 @@ bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) { - // TODO: Check for negative len. + if (len < 0) + len = 0; + if (len < buf->size) { buf->size = len; buf->ptr[buf->size] = '\0'; -- cgit 0.0.5-2-1-g0f52 From 09cee35add8c8686a3982f3f31de283450b625eb Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 14:49:18 +0200 Subject: Fix check in cmark_strbuf_vprintf Avoid potential overflow and allow for different bufsize types. --- src/buffer.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index db575edea1..08192daeda 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -192,8 +192,7 @@ void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) abort(); } - // TODO: Check for overflow. - if (len + 1 <= buf->asize - buf->size) { + if ((size_t)len < (size_t)(buf->asize - buf->size)) { buf->size += len; break; } -- cgit 0.0.5-2-1-g0f52 From b0a0cabbee704740169c9e493d61fcf786251601 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 15:01:43 +0200 Subject: Remove unused function cmark_strbuf_attach This function was missing a couple of range checks that I'm too lazy to fix. --- src/buffer.c | 18 ------------------ src/buffer.h | 1 - 2 files changed, 19 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 08192daeda..bc2e38f368 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -250,24 +250,6 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) return data; } -void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, bufsize_t asize) -{ - cmark_strbuf_free(buf); - - if (ptr) { - buf->ptr = ptr; - buf->size = strlen((char *)ptr); - if (asize > 0) - // TODO: Check for overflow. - buf->asize = (asize < buf->size) ? buf->size + 1 : asize; - else /* pass 0 to fall back on strlen + 1 */ - // TODO: Check for overflow. - buf->asize = buf->size + 1; - } else { - cmark_strbuf_grow(buf, asize); - } -} - int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) { int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size)); diff --git a/src/buffer.h b/src/buffer.h index 526276d37b..d125207fa7 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -42,7 +42,6 @@ size_t cmark_strbuf_len(const cmark_strbuf *buf); int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); -void cmark_strbuf_attach(cmark_strbuf *buf, unsigned char *ptr, bufsize_t asize); unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf); -- cgit 0.0.5-2-1-g0f52 From e2b4500209821198413fb7fb6127060034b64c87 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 15:11:07 +0200 Subject: Missing bounds checks in buffer.c --- src/buffer.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index bc2e38f368..19ea677969 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -259,7 +259,11 @@ int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) { - // TODO: Bounds check. + if (pos >= buf->size) + return -1; + if (pos < 0) + pos = 0; + const unsigned char *p = (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos); if (!p) return -1; @@ -269,10 +273,12 @@ bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) { - bufsize_t i; + if (pos < 0 || buf->size == 0) + return -1; + if (pos >= buf->size) + pos = buf->size - 1; - // TODO: Bounds check. - for (i = pos; i >= 0; i--) { + for (bufsize_t i = pos; i >= 0; i--) { if (buf->ptr[i] == (unsigned char) c) return i; } @@ -294,7 +300,8 @@ void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) { if (n > 0) { - // TODO: Bounds check. + if (n > buf->size) + n = buf->size; buf->size = buf->size - n; if (buf->size) memmove(buf->ptr, buf->ptr + n, buf->size); -- cgit 0.0.5-2-1-g0f52 From d49d3fd7bab4a8734e5f22318e3fb538bfe20dbb Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 16:48:01 +0200 Subject: Change return type of cmark_strbuf_len --- src/buffer.c | 2 +- src/buffer.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 19ea677969..efee41d7e9 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -95,7 +95,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) buf->ptr = new_ptr; } -size_t cmark_strbuf_len(const cmark_strbuf *buf) +bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } diff --git a/src/buffer.h b/src/buffer.h index d125207fa7..9c850e427d 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -38,7 +38,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); void cmark_strbuf_free(cmark_strbuf *buf); void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); -size_t cmark_strbuf_len(const cmark_strbuf *buf); +bufsize_t cmark_strbuf_len(const cmark_strbuf *buf); int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); -- cgit 0.0.5-2-1-g0f52 From 7382fd5eba48107a8190bd2d6232cc3b6e20d8fc Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 16:52:44 +0200 Subject: Convert code base to strbuf_t There are probably a couple of places I missed. But this will only be a problem if we use a 64-bit bufsize_t at some point. Then, we'll get warnings from -Wshorten-64-to-32. --- src/blocks.c | 22 +++++++------- src/chunk.h | 10 +++---- src/commonmark.c | 4 +-- src/houdini.h | 12 ++++---- src/houdini_href_e.c | 4 +-- src/houdini_html_e.c | 6 ++-- src/houdini_html_u.c | 14 ++++----- src/html.c | 10 +++---- src/inlines.c | 62 +++++++++++++++++++------------------- src/inlines.h | 2 +- src/parser.h | 6 ++-- src/scanners.c | 84 ++++++++++++++++++++++++++-------------------------- src/scanners.h | 30 +++++++++---------- src/scanners.re | 76 +++++++++++++++++++++++------------------------ src/utf8.c | 20 ++++++------- src/utf8.h | 6 ++-- src/xml.c | 4 +-- 17 files changed, 186 insertions(+), 186 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index b72c256bc9..72b1ca501b 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -30,7 +30,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - size_t bytes); + bufsize_t bytes); static cmark_node* make_block(cmark_node_type tag, int start_line, int start_column) { @@ -95,7 +95,7 @@ static cmark_node* finalize(cmark_parser *parser, cmark_node* b); // Returns true if line has only space characters, else false. -static bool is_blank(cmark_strbuf *s, int offset) +static bool is_blank(cmark_strbuf *s, bufsize_t offset) { while (offset < s->size) { switch (s->ptr[offset]) { @@ -128,7 +128,7 @@ static inline bool accepts_lines(cmark_node_type block_type) block_type == NODE_CODE_BLOCK); } -static void add_line(cmark_node* node, cmark_chunk *ch, int offset) +static void add_line(cmark_node* node, cmark_chunk *ch, bufsize_t offset) { assert(node->open); cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset); @@ -136,7 +136,7 @@ static void add_line(cmark_node* node, cmark_chunk *ch, int offset) static void remove_trailing_blank_lines(cmark_strbuf *ln) { - int i; + bufsize_t i; unsigned char c; for (i = ln->size - 1; i >= 0; --i) { @@ -204,7 +204,7 @@ static int break_out_of_lists(cmark_parser *parser, cmark_node ** bptr) static cmark_node* finalize(cmark_parser *parser, cmark_node* b) { - int pos; + bufsize_t pos; cmark_node* item; cmark_node* subitem; cmark_node* parent; @@ -367,10 +367,10 @@ static void process_inlines(cmark_node* root, cmark_reference_map *refmap, int o // Attempts to parse a list item marker (bullet or enumerated). // On success, returns length of the marker, and populates // data with the details. On failure, returns 0. -static int parse_list_marker(cmark_chunk *input, int pos, cmark_list **dataptr) +static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, cmark_list **dataptr) { unsigned char c; - int startpos; + bufsize_t startpos; cmark_list *data; startpos = pos; @@ -533,7 +533,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, static void chop_trailing_hashtags(cmark_chunk *ch) { - int n, orig_n; + bufsize_t n, orig_n; cmark_chunk_rtrim(ch); orig_n = n = ch->len - 1; @@ -562,10 +562,10 @@ S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) } static void -S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) +S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t bytes) { cmark_node* last_matched_container; - int matched = 0; + bufsize_t matched = 0; int lev = 0; int i; cmark_list *data = NULL; @@ -712,7 +712,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, size_t bytes) parser->offset = parser->first_nonspace + matched; container = add_child(parser, container, NODE_HEADER, parser->offset + 1); - int hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); + bufsize_t hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); int level = 0; while (peek_at(&input, hashpos) == '#') { diff --git a/src/chunk.h b/src/chunk.h index a246a9de8f..364918de34 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -11,8 +11,8 @@ typedef struct { unsigned char *data; - int len; - int alloc; // also implies a NULL-terminated string + bufsize_t len; + bufsize_t alloc; // also implies a NULL-terminated string } cmark_chunk; static inline void cmark_chunk_free(cmark_chunk *c) @@ -51,10 +51,10 @@ static inline void cmark_chunk_trim(cmark_chunk *c) cmark_chunk_rtrim(c); } -static inline int cmark_chunk_strchr(cmark_chunk *ch, int c, int offset) +static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); - return p ? (int)(p - ch->data) : ch->len; + return p ? (bufsize_t)(p - ch->data) : ch->len; } static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) @@ -100,7 +100,7 @@ static inline cmark_chunk cmark_chunk_literal(const char *data) return c; } -static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, int pos, int len) +static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; diff --git a/src/commonmark.c b/src/commonmark.c index dba1fcff8d..2022fd5d88 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -20,7 +20,7 @@ struct render_state { int column; int width; int need_cr; - int last_breakable; + bufsize_t last_breakable; bool begin_line; bool no_wrap; bool in_tight_list_item; @@ -293,7 +293,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, const char *title; cmark_strbuf listmarker = GH_BUF_INIT; char *emph_delim; - int marker_width; + bufsize_t marker_width; // Don't adjust tight list status til we've started the list. // Otherwise we loose the blank line between a paragraph and diff --git a/src/houdini.h b/src/houdini.h index 9f00f6d4f8..2e7a3540dc 100644 --- a/src/houdini.h +++ b/src/houdini.h @@ -31,15 +31,15 @@ extern "C" { #define HOUDINI_ESCAPED_SIZE(x) (((x) * 12) / 10) #define HOUDINI_UNESCAPED_SIZE(x) (x) -extern size_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, size_t size, int secure); -extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, size_t size); +extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); +extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); +extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure); +extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); +extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); extern int houdini_escape_xml(cmark_strbuf *ob, const uint8_t *src, size_t size); extern int houdini_escape_uri(cmark_strbuf *ob, const uint8_t *src, size_t size); extern int houdini_escape_url(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, size_t size); +extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); extern int houdini_unescape_uri(cmark_strbuf *ob, const uint8_t *src, size_t size); extern int houdini_unescape_url(cmark_strbuf *ob, const uint8_t *src, size_t size); extern int houdini_escape_js(cmark_strbuf *ob, const uint8_t *src, size_t size); diff --git a/src/houdini_href_e.c b/src/houdini_href_e.c index 7527780bdc..7fb958a8ef 100644 --- a/src/houdini_href_e.c +++ b/src/houdini_href_e.c @@ -49,10 +49,10 @@ static const char HREF_SAFE[] = { }; int -houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, size_t size) +houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { static const uint8_t hex_chars[] = "0123456789ABCDEF"; - size_t i = 0, org; + bufsize_t i = 0, org; uint8_t hex_str[3]; hex_str[0] = '%'; diff --git a/src/houdini_html_e.c b/src/houdini_html_e.c index 1a4c3e113c..7f4b91fcc8 100644 --- a/src/houdini_html_e.c +++ b/src/houdini_html_e.c @@ -45,9 +45,9 @@ static const char *HTML_ESCAPES[] = { }; int -houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, size_t size, int secure) +houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure) { - size_t i = 0, org, esc = 0; + bufsize_t i = 0, org, esc = 0; while (i < size) { org = i; @@ -75,7 +75,7 @@ houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, size_t size, int secu } int -houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, size_t size) +houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { return houdini_escape_html0(ob, src, size, 1); } diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index eaf295ec53..e57894d36e 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -7,10 +7,10 @@ #include "utf8.h" #include "html_unescape.h" -size_t -houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size) +bufsize_t +houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { - size_t i = 0; + bufsize_t i = 0; if (size >= 3 && src[0] == '#') { int codepoint = 0; @@ -68,7 +68,7 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size) const struct html_ent *entity = find_entity((char *)src, i); if (entity != NULL) { - int len = 0; + bufsize_t len = 0; while (len < 4 && entity->utf8[len] != '\0') { ++len; } @@ -85,9 +85,9 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size) } int -houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, size_t size) +houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { - size_t i = 0, org, ent; + bufsize_t i = 0, org, ent; while (i < size) { org = i; @@ -122,7 +122,7 @@ houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, size_t size) return 1; } -void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, size_t size) +void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { if (!houdini_unescape_html(ob, src, size)) cmark_strbuf_put(ob, src, size); diff --git a/src/html.c b/src/html.c index d3f9fc78ad..317eb458b5 100644 --- a/src/html.c +++ b/src/html.c @@ -11,20 +11,20 @@ // Functions to convert cmark_nodes to HTML strings. -static void escape_html(cmark_strbuf *dest, const unsigned char *source, int length) +static void escape_html(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) { if (length < 0) length = strlen((char *)source); - houdini_escape_html0(dest, source, (size_t)length, 0); + houdini_escape_html0(dest, source, length, 0); } -static void escape_href(cmark_strbuf *dest, const unsigned char *source, int length) +static void escape_href(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) { if (length < 0) length = strlen((char *)source); - houdini_escape_href(dest, source, (size_t)length); + houdini_escape_href(dest, source, length); } static inline void cr(cmark_strbuf *html) @@ -165,7 +165,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, S_render_sourcepos(node, html, options); cmark_strbuf_puts(html, ">"); } else { - int first_tag = 0; + bufsize_t first_tag = 0; while (first_tag < node->as.code.info.len && node->as.code.info.data[first_tag] != ' ') { first_tag += 1; diff --git a/src/inlines.c b/src/inlines.c index 8a1ee44f82..7e8f806cba 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -36,7 +36,7 @@ typedef struct delimiter { struct delimiter *previous; struct delimiter *next; cmark_node *inl_text; - int position; + bufsize_t position; unsigned char delim_char; bool can_open; bool can_close; @@ -45,7 +45,7 @@ typedef struct delimiter { typedef struct { cmark_chunk input; - int pos; + bufsize_t pos; cmark_reference_map *refmap; delimiter *last_delim; } subject; @@ -57,7 +57,7 @@ static int parse_inline(subject* subj, cmark_node * parent, int options); static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); -static int subject_find_special_char(subject *subj, int options); +static bufsize_t subject_find_special_char(subject *subj, int options); static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) { @@ -143,7 +143,7 @@ static inline cmark_node* make_simple(cmark_node_type t) static cmark_chunk chunk_clone(cmark_chunk *src) { cmark_chunk c; - int len = src->len; + bufsize_t len = src->len; c.len = len; c.data = (unsigned char *)malloc(len + 1); @@ -177,7 +177,7 @@ static inline unsigned char peek_char(subject *subj) return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; } -static inline unsigned char peek_at(subject *subj, int pos) +static inline unsigned char peek_at(subject *subj, bufsize_t pos) { return subj->input.data[pos]; } @@ -195,8 +195,8 @@ static inline int is_eof(subject* subj) static inline cmark_chunk take_while(subject* subj, int (*f)(int)) { unsigned char c; - int startpos = subj->pos; - int len = 0; + bufsize_t startpos = subj->pos; + bufsize_t len = 0; while ((c = peek_char(subj)) && (*f)(c)) { advance(subj); @@ -211,7 +211,7 @@ static inline cmark_chunk take_while(subject* subj, int (*f)(int)) // parsed). Return 0 if you don't find matching closing // backticks, otherwise return the position in the subject // after the closing backticks. -static int scan_to_closing_backticks(subject* subj, int openticklength) +static bufsize_t scan_to_closing_backticks(subject* subj, bufsize_t openticklength) { // read non backticks unsigned char c; @@ -221,7 +221,7 @@ static int scan_to_closing_backticks(subject* subj, int openticklength) if (is_eof(subj)) { return 0; // did not find closing ticks, return 0 } - int numticks = 0; + bufsize_t numticks = 0; while (peek_char(subj) == '`') { advance(subj); numticks++; @@ -237,8 +237,8 @@ static int scan_to_closing_backticks(subject* subj, int openticklength) static cmark_node* handle_backticks(subject *subj) { cmark_chunk openticks = take_while(subj, isbacktick); - int startpos = subj->pos; - int endpos = scan_to_closing_backticks(subj, openticks.len); + bufsize_t startpos = subj->pos; + bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len); if (endpos == 0) { // not found subj->pos = startpos; // rewind @@ -260,7 +260,7 @@ static int scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) { int numdelims = 0; - int before_char_pos; + bufsize_t before_char_pos; int32_t after_char = 0; int32_t before_char = 0; int len; @@ -376,7 +376,7 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, // Assumes the subject has a c at the current position. static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart) { - int numdelims; + bufsize_t numdelims; cmark_node * inl_text; bool can_open, can_close; cmark_chunk contents; @@ -500,11 +500,11 @@ static delimiter* S_insert_emph(subject *subj, delimiter *opener, delimiter *closer) { delimiter *delim, *tmp_delim; - int use_delims; + bufsize_t use_delims; cmark_node *opener_inl = opener->inl_text; cmark_node *closer_inl = closer->inl_text; - int opener_num_chars = opener_inl->as.literal.len; - int closer_num_chars = closer_inl->as.literal.len; + bufsize_t opener_num_chars = opener_inl->as.literal.len; + bufsize_t closer_num_chars = closer_inl->as.literal.len; cmark_node *tmp, *emph, *first_child, *last_child; // calculate the actual number of characters used from this closer @@ -596,7 +596,7 @@ static cmark_node* handle_backslash(subject *subj) static cmark_node* handle_entity(subject* subj) { cmark_strbuf ent = GH_BUF_INIT; - size_t len; + bufsize_t len; advance(subj); @@ -618,7 +618,7 @@ static cmark_node *make_str_with_entities(cmark_chunk *content) { cmark_strbuf unescaped = GH_BUF_INIT; - if (houdini_unescape_html(&unescaped, content->data, (size_t)content->len)) { + if (houdini_unescape_html(&unescaped, content->data, content->len)) { return make_str(cmark_chunk_buf_detach(&unescaped)); } else { return make_str(*content); @@ -678,7 +678,7 @@ cmark_chunk cmark_clean_title(cmark_chunk *title) // Assumes the subject has a '<' character at the current position. static cmark_node* handle_pointy_brace(subject* subj) { - int matchlen = 0; + bufsize_t matchlen = 0; cmark_chunk contents; advance(subj); // advance past first < @@ -725,7 +725,7 @@ static cmark_node* handle_pointy_brace(subject* subj) // encountered. Backticks in labels do not start code spans. static int link_label(subject* subj, cmark_chunk *raw_label) { - int startpos = subj->pos; + bufsize_t startpos = subj->pos; int length = 0; unsigned char c; @@ -769,10 +769,10 @@ noMatch: // Return a link, an image, or a literal close bracket. static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent) { - int initial_pos; - int starturl, endurl, starttitle, endtitle, endall; - int n; - int sps; + bufsize_t initial_pos; + bufsize_t starturl, endurl, starttitle, endtitle, endall; + bufsize_t n; + bufsize_t sps; cmark_reference *ref; bool is_image = false; cmark_chunk url_chunk, title_chunk; @@ -922,7 +922,7 @@ match: // Assumes the subject has a newline at the current position. static cmark_node* handle_newline(subject *subj) { - int nlpos = subj->pos; + bufsize_t nlpos = subj->pos; // skip over newline advance(subj); // skip spaces at beginning of line @@ -938,7 +938,7 @@ static cmark_node* handle_newline(subject *subj) } } -static int subject_find_special_char(subject *subj, int options) +static bufsize_t subject_find_special_char(subject *subj, int options) { // "\r\n\\`&_*[]pos + 1; + bufsize_t n = subj->pos + 1; while (n < subj->input.len) { if (SPECIAL_CHARS[subj->input.data[n]]) @@ -1001,7 +1001,7 @@ static int parse_inline(subject* subj, cmark_node * parent, int options) cmark_node* new_inl = NULL; cmark_chunk contents; unsigned char c; - int endpos; + bufsize_t endpos; c = peek_char(subj); if (c == 0) { return 0; @@ -1098,7 +1098,7 @@ static void spnl(subject* subj) // Modify refmap if a reference is encountered. // Return 0 if no reference found, otherwise position of subject // after reference is parsed. -int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap) +bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap) { subject subj; @@ -1106,8 +1106,8 @@ int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refma cmark_chunk url; cmark_chunk title; - int matchlen = 0; - int beforetitle; + bufsize_t matchlen = 0; + bufsize_t beforetitle; subject_from_buf(&subj, input, NULL); diff --git a/src/inlines.h b/src/inlines.h index 534588e370..f8847fc881 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -10,7 +10,7 @@ cmark_chunk cmark_clean_title(cmark_chunk *title); void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options); -int cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap); +bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap); #ifdef __cplusplus } diff --git a/src/parser.h b/src/parser.h index ccdf84bca8..6e18c6765b 100644 --- a/src/parser.h +++ b/src/parser.h @@ -16,12 +16,12 @@ struct cmark_parser { struct cmark_node* root; struct cmark_node* current; int line_number; - int offset; - int first_nonspace; + bufsize_t offset; + bufsize_t first_nonspace; int indent; bool blank; cmark_strbuf *curline; - int last_line_length; + bufsize_t last_line_length; cmark_strbuf *linebuf; int options; }; diff --git a/src/scanners.c b/src/scanners.c index 7f9ed2e9fb..3f4ddac149 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,11 +1,11 @@ -/* Generated by re2c 0.13.6 */ +/* Generated by re2c 0.13.5 */ #include #include "chunk.h" #include "scanners.h" -int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset) { - int res; + bufsize_t res; unsigned char *ptr = (unsigned char *)c->data; unsigned char lim = ptr[c->len]; @@ -19,7 +19,7 @@ int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) // Try to match a scheme including colon. -int _scan_scheme(const unsigned char *p) +bufsize_t _scan_scheme(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -578,7 +578,7 @@ yy34: if (yych != ':') goto yy31; yy35: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy37: yych = *++p; if (yych == 'E') goto yy38; @@ -2919,7 +2919,7 @@ yy484: } // Try to match URI autolink after first <, returning number of chars matched. -int _scan_autolink_uri(const unsigned char *p) +bufsize_t _scan_autolink_uri(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -3517,7 +3517,7 @@ yy520: } if (yych <= '=') goto yy516; ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy524: yych = *++p; if (yych == 'E') goto yy525; @@ -5858,7 +5858,7 @@ yy971: } // Try to match email autolink after first <, returning num of chars matched. -int _scan_autolink_email(const unsigned char *p) +bufsize_t _scan_autolink_email(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -6060,7 +6060,7 @@ yy984: } yy985: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy987: ++p; yych = *p; @@ -10803,7 +10803,7 @@ yy1230: } // Try to match an HTML tag after first <, returning num of chars matched. -int _scan_html_tag(const unsigned char *p) +bufsize_t _scan_html_tag(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -10964,7 +10964,7 @@ yy1242: if (yych != '>') goto yy1239; yy1243: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1245: yych = *++p; if (yych == 'C') goto yy1260; @@ -11455,7 +11455,7 @@ yy1297: // Try to match an HTML block tag including first <, // returning num of chars matched. -int _scan_html_block_tag(const unsigned char *p) +bufsize_t _scan_html_block_tag(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -11513,7 +11513,7 @@ yy1303: goto yy1301; yy1304: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1306: yych = *++p; if (yych <= '/') { @@ -12022,7 +12022,7 @@ yy1343: } yy1344: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1346: yych = *++p; if (yych <= 'R') { @@ -12639,7 +12639,7 @@ yy1466: } yy1467: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1469: yych = *++p; if (yych <= 'R') { @@ -13243,7 +13243,7 @@ yy1585: // This may optionally be contained in <..>; otherwise // whitespace and unbalanced right parentheses aren't allowed. // Newlines aren't ever allowed. -int _scan_link_url(const unsigned char *p) +bufsize_t _scan_link_url(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -13308,7 +13308,7 @@ int _scan_link_url(const unsigned char *p) } } yy1588: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1589: yyaccept = 0; marker = ++p; @@ -13402,7 +13402,7 @@ yy1599: yy1600: p = marker; if (yyaccept <= 1) { - if (yyaccept == 0) { + if (yyaccept <= 0) { goto yy1588; } else { goto yy1595; @@ -13490,7 +13490,7 @@ yy1607: if (yych <= ' ') goto yy1608; if (yych != ')') goto yy1603; yy1608: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1609: ++p; yych = *p; @@ -13732,7 +13732,7 @@ yy1623: // Try to match a link title (in single quotes, in double quotes, or // in parentheses), returning number of chars matched. Allow one // level of internal nesting (quotes within quotes). -int _scan_link_title(const unsigned char *p) +bufsize_t _scan_link_title(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -13818,13 +13818,13 @@ yy1632: yy1633: p = marker; if (yyaccept <= 1) { - if (yyaccept == 0) { + if (yyaccept <= 0) { goto yy1626; } else { goto yy1637; } } else { - if (yyaccept == 2) { + if (yyaccept <= 2) { goto yy1644; } else { goto yy1651; @@ -13842,7 +13842,7 @@ yy1634: yy1636: ++p; yy1637: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1638: yyaccept = 1; marker = ++p; @@ -13874,7 +13874,7 @@ yy1641: yy1643: ++p; yy1644: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1645: yyaccept = 2; marker = ++p; @@ -13906,7 +13906,7 @@ yy1648: yy1650: ++p; yy1651: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1652: yyaccept = 3; marker = ++p; @@ -13922,7 +13922,7 @@ yy1652: } // Match space characters, including newlines. -int _scan_spacechars(const unsigned char *p) +bufsize_t _scan_spacechars(const unsigned char *p) { const unsigned char *start = p; \ @@ -13973,7 +13973,7 @@ int _scan_spacechars(const unsigned char *p) goto yy1659; } yy1655: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1656: yych = *++p; goto yy1658; @@ -13993,7 +13993,7 @@ yy1659: } // Match ATX header start. -int _scan_atx_header_start(const unsigned char *p) +bufsize_t _scan_atx_header_start(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -14059,7 +14059,7 @@ yy1665: yy1666: ++p; yy1667: - { return (p - start); } + { return (bufsize_t)(p - start); } yy1668: ++p; yych = *p; @@ -14128,7 +14128,7 @@ yy1672: // Match setext header line. Return 1 for level-1 header, // 2 for level-2, 0 for no match. -int _scan_setext_header_line(const unsigned char *p) +bufsize_t _scan_setext_header_line(const unsigned char *p) { const unsigned char *marker = NULL; @@ -14269,7 +14269,7 @@ yy1693: // Scan a horizontal rule line: "...three or more hyphens, asterisks, // or underscores on a line by themselves. If you wish, you may use // spaces between the hyphens or asterisks." -int _scan_hrule(const unsigned char *p) +bufsize_t _scan_hrule(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -14384,7 +14384,7 @@ yy1709: if (yych != '\r') goto yy1704; yy1711: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1713: ++p; yych = *p; @@ -14422,7 +14422,7 @@ yy1719: } yy1721: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1723: ++p; yych = *p; @@ -14460,13 +14460,13 @@ yy1729: } yy1731: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } } } // Scan an opening code fence. -int _scan_open_code_fence(const unsigned char *p) +bufsize_t _scan_open_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -14557,7 +14557,7 @@ yy1743: yy1745: ++p; p = marker; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1747: yych = *++p; if (yybm[0+yych] & 64) { @@ -14585,13 +14585,13 @@ yy1750: yy1752: ++p; p = marker; - { return (p - start); } + { return (bufsize_t)(p - start); } } } // Scan a closing code fence with length at least len. -int _scan_close_code_fence(const unsigned char *p) +bufsize_t _scan_close_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -14687,7 +14687,7 @@ yy1764: yy1766: ++p; p = marker; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1768: yych = *++p; if (yybm[0+yych] & 128) { @@ -14725,14 +14725,14 @@ yy1771: yy1773: ++p; p = marker; - { return (p - start); } + { return (bufsize_t)(p - start); } } } // Scans an entity. // Returns number of chars matched. -int _scan_entity(const unsigned char *p) +bufsize_t _scan_entity(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -14799,7 +14799,7 @@ yy1783: } yy1784: ++p; - { return (p - start); } + { return (bufsize_t)(p - start); } yy1786: yych = *++p; if (yych <= ';') { diff --git a/src/scanners.h b/src/scanners.h index 1353f3be0a..bc5134ea6f 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -5,21 +5,21 @@ extern "C" { #endif -int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset); -int _scan_scheme(const unsigned char *p); -int _scan_autolink_uri(const unsigned char *p); -int _scan_autolink_email(const unsigned char *p); -int _scan_html_tag(const unsigned char *p); -int _scan_html_block_tag(const unsigned char *p); -int _scan_link_url(const unsigned char *p); -int _scan_link_title(const unsigned char *p); -int _scan_spacechars(const unsigned char *p); -int _scan_atx_header_start(const unsigned char *p); -int _scan_setext_header_line(const unsigned char *p); -int _scan_hrule(const unsigned char *p); -int _scan_open_code_fence(const unsigned char *p); -int _scan_close_code_fence(const unsigned char *p); -int _scan_entity(const unsigned char *p); +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset); +bufsize_t _scan_scheme(const unsigned char *p); +bufsize_t _scan_autolink_uri(const unsigned char *p); +bufsize_t _scan_autolink_email(const unsigned char *p); +bufsize_t _scan_html_tag(const unsigned char *p); +bufsize_t _scan_html_block_tag(const unsigned char *p); +bufsize_t _scan_link_url(const unsigned char *p); +bufsize_t _scan_link_title(const unsigned char *p); +bufsize_t _scan_spacechars(const unsigned char *p); +bufsize_t _scan_atx_header_start(const unsigned char *p); +bufsize_t _scan_setext_header_line(const unsigned char *p); +bufsize_t _scan_hrule(const unsigned char *p); +bufsize_t _scan_open_code_fence(const unsigned char *p); +bufsize_t _scan_close_code_fence(const unsigned char *p); +bufsize_t _scan_entity(const unsigned char *p); #define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n) #define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n) diff --git a/src/scanners.re b/src/scanners.re index 941101862d..3722a999df 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -2,9 +2,9 @@ #include "chunk.h" #include "scanners.h" -int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset) { - int res; + bufsize_t res; unsigned char *ptr = (unsigned char *)c->data; unsigned char lim = ptr[c->len]; @@ -70,29 +70,29 @@ int _scan_at(int (*scanner)(const unsigned char *), cmark_chunk *c, int offset) */ // Try to match a scheme including colon. -int _scan_scheme(const unsigned char *p) +bufsize_t _scan_scheme(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - scheme [:] { return (p - start); } + scheme [:] { return (bufsize_t)(p - start); } .? { return 0; } */ } // Try to match URI autolink after first <, returning number of chars matched. -int _scan_autolink_uri(const unsigned char *p) +bufsize_t _scan_autolink_uri(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - scheme [:][^\x00-\x20<>]*[>] { return (p - start); } + scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); } .? { return 0; } */ } // Try to match email autolink after first <, returning num of chars matched. -int _scan_autolink_email(const unsigned char *p) +bufsize_t _scan_autolink_email(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -101,32 +101,32 @@ int _scan_autolink_email(const unsigned char *p) [@] [a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? ([.][a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)* - [>] { return (p - start); } + [>] { return (bufsize_t)(p - start); } .? { return 0; } */ } // Try to match an HTML tag after first <, returning num of chars matched. -int _scan_html_tag(const unsigned char *p) +bufsize_t _scan_html_tag(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - htmltag { return (p - start); } + htmltag { return (bufsize_t)(p - start); } .? { return 0; } */ } // Try to match an HTML block tag including first <, // returning num of chars matched. -int _scan_html_block_tag(const unsigned char *p) +bufsize_t _scan_html_block_tag(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [<] [/] blocktagname (spacechar | [>]) { return (p - start); } - [<] blocktagname (spacechar | [/>]) { return (p - start); } - [<] [!?] { return (p - start); } + [<] [/] blocktagname (spacechar | [>]) { return (bufsize_t)(p - start); } + [<] blocktagname (spacechar | [/>]) { return (bufsize_t)(p - start); } + [<] [!?] { return (bufsize_t)(p - start); } .? { return 0; } */ } @@ -135,13 +135,13 @@ int _scan_html_block_tag(const unsigned char *p) // This may optionally be contained in <..>; otherwise // whitespace and unbalanced right parentheses aren't allowed. // Newlines aren't ever allowed. -int _scan_link_url(const unsigned char *p) +bufsize_t _scan_link_url(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [ \r\n]* [<] ([^<>\r\n\\\x00] | escaped_char | [\\])* [>] { return (p - start); } - [ \r\n]* (reg_char+ | escaped_char | in_parens_nosp)* { return (p - start); } + [ \r\n]* [<] ([^<>\r\n\\\x00] | escaped_char | [\\])* [>] { return (bufsize_t)(p - start); } + [ \r\n]* (reg_char+ | escaped_char | in_parens_nosp)* { return (bufsize_t)(p - start); } .? { return 0; } */ } @@ -149,42 +149,42 @@ int _scan_link_url(const unsigned char *p) // Try to match a link title (in single quotes, in double quotes, or // in parentheses), returning number of chars matched. Allow one // level of internal nesting (quotes within quotes). -int _scan_link_title(const unsigned char *p) +bufsize_t _scan_link_title(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - ["] (escaped_char|[^"\x00])* ["] { return (p - start); } - ['] (escaped_char|[^'\x00])* ['] { return (p - start); } - [(] (escaped_char|[^)\x00])* [)] { return (p - start); } + ["] (escaped_char|[^"\x00])* ["] { return (bufsize_t)(p - start); } + ['] (escaped_char|[^'\x00])* ['] { return (bufsize_t)(p - start); } + [(] (escaped_char|[^)\x00])* [)] { return (bufsize_t)(p - start); } .? { return 0; } */ } // Match space characters, including newlines. -int _scan_spacechars(const unsigned char *p) +bufsize_t _scan_spacechars(const unsigned char *p) { const unsigned char *start = p; \ /*!re2c - [ \t\v\f\r\n]* { return (p - start); } + [ \t\v\f\r\n]* { return (bufsize_t)(p - start); } . { return 0; } */ } // Match ATX header start. -int _scan_atx_header_start(const unsigned char *p) +bufsize_t _scan_atx_header_start(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [#]{1,6} ([ ]+|[\r\n]) { return (p - start); } + [#]{1,6} ([ ]+|[\r\n]) { return (bufsize_t)(p - start); } .? { return 0; } */ } // Match setext header line. Return 1 for level-1 header, // 2 for level-2, 0 for no match. -int _scan_setext_header_line(const unsigned char *p) +bufsize_t _scan_setext_header_line(const unsigned char *p) { const unsigned char *marker = NULL; /*!re2c @@ -197,51 +197,51 @@ int _scan_setext_header_line(const unsigned char *p) // Scan a horizontal rule line: "...three or more hyphens, asterisks, // or underscores on a line by themselves. If you wish, you may use // spaces between the hyphens or asterisks." -int _scan_hrule(const unsigned char *p) +bufsize_t _scan_hrule(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - ([*][ ]*){3,} [ \t]* [\r\n] { return (p - start); } - ([_][ ]*){3,} [ \t]* [\r\n] { return (p - start); } - ([-][ ]*){3,} [ \t]* [\r\n] { return (p - start); } + ([*][ ]*){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); } .? { return 0; } */ } // Scan an opening code fence. -int _scan_open_code_fence(const unsigned char *p) +bufsize_t _scan_open_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [`]{3,} / [^`\r\n\x00]*[\r\n] { return (p - start); } - [~]{3,} / [^~\r\n\x00]*[\r\n] { return (p - start); } + [`]{3,} / [^`\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } + [~]{3,} / [^~\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } .? { return 0; } */ } // Scan a closing code fence with length at least len. -int _scan_close_code_fence(const unsigned char *p) +bufsize_t _scan_close_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [`]{3,} / [ \t]*[\r\n] { return (p - start); } - [~]{3,} / [ \t]*[\r\n] { return (p - start); } + [`]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); } + [~]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); } .? { return 0; } */ } // Scans an entity. // Returns number of chars matched. -int _scan_entity(const unsigned char *p) +bufsize_t _scan_entity(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c [&] ([#] ([Xx][A-Fa-f0-9]{1,8}|[0-9]{1,8}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;] - { return (p - start); } + { return (bufsize_t)(p - start); } .? { return 0; } */ } diff --git a/src/utf8.c b/src/utf8.c index b83c2a529f..ba1d87317d 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -30,7 +30,7 @@ static void encode_unknown(cmark_strbuf *buf) cmark_strbuf_put(buf, repl, 3); } -static int utf8proc_charlen(const uint8_t *str, int str_len) +static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) { int length, i; @@ -42,7 +42,7 @@ static int utf8proc_charlen(const uint8_t *str, int str_len) if (!length) return -1; - if (str_len >= 0 && length > str_len) + if (str_len >= 0 && (bufsize_t)length > str_len) return -str_len; for (i = 1; i < length; i++) { @@ -54,7 +54,7 @@ static int utf8proc_charlen(const uint8_t *str, int str_len) } // Validate a single UTF-8 character according to RFC 3629. -static int utf8proc_valid(const uint8_t *str, int str_len) +static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { int length = utf8proc_charlen(str, str_len); @@ -109,14 +109,14 @@ static int utf8proc_valid(const uint8_t *str, int str_len) return length; } -void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, size_t size) +void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { static const uint8_t whitespace[] = " "; - size_t i = 0, tab = 0; + bufsize_t i = 0, tab = 0; while (i < size) { - size_t org = i; + bufsize_t org = i; while (i < size && line[i] != '\t' && line[i] != '\0' && line[i] < 0x80) { @@ -151,7 +151,7 @@ void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, size_t size) } } -int utf8proc_iterate(const uint8_t *str, int str_len, int32_t *dst) +int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) { int length; int32_t uc = -1; @@ -191,7 +191,7 @@ int utf8proc_iterate(const uint8_t *str, int str_len, int32_t *dst) void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { uint8_t dst[4]; - int len = 0; + bufsize_t len = 0; assert(uc >= 0); @@ -227,7 +227,7 @@ void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) cmark_strbuf_put(buf, dst, len); } -void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, int len) +void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) { int32_t c; @@ -235,7 +235,7 @@ void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, int len) utf8proc_encode_char(x, dest) while (len > 0) { - int char_len = utf8proc_iterate(str, len, &c); + bufsize_t char_len = utf8proc_iterate(str, len, &c); if (char_len >= 0) { #include "case_fold_switch.inc" diff --git a/src/utf8.h b/src/utf8.h index 7df15737ed..ed1d7eeeb1 100644 --- a/src/utf8.h +++ b/src/utf8.h @@ -8,10 +8,10 @@ extern "C" { #endif -void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, int len); +void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len); void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); -int utf8proc_iterate(const uint8_t *str, int str_len, int32_t *dst); -void utf8proc_detab(cmark_strbuf *dest, const uint8_t *line, size_t size); +int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); +void utf8proc_detab(cmark_strbuf *dest, const uint8_t *line, bufsize_t size); int utf8proc_is_space(int32_t uc); int utf8proc_is_punctuation(int32_t uc); diff --git a/src/xml.c b/src/xml.c index 14f6d676ed..688dd36f66 100644 --- a/src/xml.c +++ b/src/xml.c @@ -11,13 +11,13 @@ // Functions to convert cmark_nodes to XML strings. -static void escape_xml(cmark_strbuf *dest, const unsigned char *source, int length) +static void escape_xml(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) { if (source != NULL) { if (length < 0) length = strlen((char *)source); - houdini_escape_html0(dest, source, (size_t)length, 0); + houdini_escape_html0(dest, source, length, 0); } } -- cgit 0.0.5-2-1-g0f52 From bef240d45b5eda3a584ca1a495f54cb17ff8895f Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 16:54:37 +0200 Subject: Check for overflow in S_parser_feed Guard against too large chunks passed via the API. --- src/blocks.c | 9 ++++++--- src/buffer.h | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 72b1ca501b..a3ac71234b 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -497,6 +497,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, while (buffer < end) { const unsigned char *eol; size_t line_len; + bufsize_t bufsize; for (eol = buffer; eol < end; ++eol) { if (S_is_line_end_char(*eol)) @@ -514,17 +515,19 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, } else if (eof) { line_len = end - buffer; } else { - cmark_strbuf_put(parser->linebuf, buffer, end - buffer); + bufsize = cmark_strbuf_check_bufsize(end - buffer); + cmark_strbuf_put(parser->linebuf, buffer, bufsize); break; } + bufsize = cmark_strbuf_check_bufsize(line_len); if (parser->linebuf->size > 0) { - cmark_strbuf_put(parser->linebuf, buffer, line_len); + cmark_strbuf_put(parser->linebuf, buffer, bufsize); S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size); cmark_strbuf_clear(parser->linebuf); } else { - S_process_line(parser, buffer, line_len); + S_process_line(parser, buffer, bufsize); } buffer += line_len; diff --git a/src/buffer.h b/src/buffer.h index 9c850e427d..f9696e0af5 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -74,6 +74,14 @@ void cmark_strbuf_unescape(cmark_strbuf *s); /* Print error and abort. */ void cmark_strbuf_overflow_err(void); +static inline bufsize_t +cmark_strbuf_check_bufsize(size_t size) { + if (size > BUFSIZE_MAX) { + cmark_strbuf_overflow_err(); + } + return (bufsize_t)size; +} + #ifdef __cplusplus } #endif -- cgit 0.0.5-2-1-g0f52 From abda63215d69b6245be853566481c09c4f015c14 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 17:32:51 +0200 Subject: Avoid strlen in commonmark.c --- src/commonmark.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 2022fd5d88..4594748138 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -237,30 +237,29 @@ shortest_unused_backtick_sequence(cmark_chunk *code) static bool is_autolink(cmark_node *node) { - const char *title; - const char *url; + cmark_chunk *title; + cmark_chunk *url; cmark_node *link_text; if (node->type != CMARK_NODE_LINK) { return false; } - url = cmark_node_get_url(node); - if (url == NULL || - _scan_scheme((unsigned char *)url) == 0) { + url = &node->as.link.url; + if (url->len == 0 || scan_scheme(url, 0) == 0) { return false; } - title = cmark_node_get_title(node); + title = &node->as.link.title; // if it has a title, we can't treat it as an autolink: - if (title != NULL && strlen(title) > 0) { + if (title->len > 0) { return false; } link_text = node->first_child; cmark_consolidate_text_nodes(link_text); - return ((int)strlen(url) == link_text->as.literal.len && - strncmp(url, + return (url->len == link_text->as.literal.len && + strncmp((char*)url->data, (char*)link_text->as.literal.data, link_text->as.literal.len) == 0); } @@ -289,8 +288,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, int numticks; int i; bool entering = (ev_type == CMARK_EVENT_ENTER); - const char *info; - const char *title; + cmark_chunk *info; + cmark_chunk *title; cmark_strbuf listmarker = GH_BUF_INIT; char *emph_delim; bufsize_t marker_width; @@ -396,12 +395,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE_BLOCK: blankline(state); - info = cmark_node_get_fence_info(node); + info = &node->as.code.info; code = &node->as.code.literal; // use indented form if no info, and code doesn't // begin or end with a blank line, and code isn't // first thing in a list item - if ((info == NULL || strlen(info) == 0) && + if (info->len == 0 && (code->len > 2 && !isspace(code->data[0]) && !(isspace(code->data[code->len - 1]) && @@ -422,7 +421,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, lit(state, "`", false); } lit(state, " ", false); - out(state, cmark_chunk_literal(info), false, LITERAL); + out(state, *info, false, LITERAL); cr(state); out(state, node->as.code.literal, false, LITERAL); cr(state); @@ -542,11 +541,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); - title = cmark_node_get_title(node); - if (title && strlen(title) > 0) { + title = &node->as.link.title; + if (title->len > 0) { lit(state, " \"", true); - out(state, cmark_chunk_literal(title), - false, TITLE); + out(state, *title, false, TITLE); lit(state, "\"", false); } lit(state, ")", false); @@ -560,10 +558,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } else { lit(state, "](", false); out(state, cmark_chunk_literal(cmark_node_get_url(node)), false, URL); - title = cmark_node_get_title(node); - if (title && strlen(title) > 0) { + title = &node->as.link.title; + if (title->len > 0) { lit(state, " \"", true); - out(state, cmark_chunk_literal(title), false, TITLE); + out(state, *title, false, TITLE); lit(state, "\"", false); } lit(state, ")", false); -- cgit 0.0.5-2-1-g0f52 From e477618d40cb3db39667f06085c67cdfa33710a2 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 17:33:25 +0200 Subject: Avoid strlen in xml.c --- src/xml.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/xml.c b/src/xml.c index 688dd36f66..7eec5a69db 100644 --- a/src/xml.c +++ b/src/xml.c @@ -13,12 +13,7 @@ static void escape_xml(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) { - if (source != NULL) { - if (length < 0) - length = strlen((char *)source); - - houdini_escape_html0(dest, source, length, 0); - } + houdini_escape_html0(dest, source, length, 0); } struct render_state { -- cgit 0.0.5-2-1-g0f52 From 9087645812433abdc51eb7bb82ade8c3c3bccfa5 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 17:34:34 +0200 Subject: Avoid strlen in html.c --- src/html.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/html.c b/src/html.c index 317eb458b5..a30bbca1e2 100644 --- a/src/html.c +++ b/src/html.c @@ -13,20 +13,9 @@ static void escape_html(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) { - if (length < 0) - length = strlen((char *)source); - houdini_escape_html0(dest, source, length, 0); } -static void escape_href(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) -{ - if (length < 0) - length = strlen((char *)source); - - houdini_escape_href(dest, source, length); -} - static inline void cr(cmark_strbuf *html) { if (html->size && html->ptr[html->size - 1] != '\n') @@ -261,8 +250,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LINK: if (entering) { cmark_strbuf_puts(html, "as.link.url.data, - node->as.link.url.len); + houdini_escape_href(html, node->as.link.url.data, + node->as.link.url.len); if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); @@ -279,8 +268,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_IMAGE: if (entering) { cmark_strbuf_puts(html, "as.link.url.data, - node->as.link.url.len); + houdini_escape_href(html, node->as.link.url.data, + node->as.link.url.len); cmark_strbuf_puts(html, "\" alt=\""); state->plain = node; -- cgit 0.0.5-2-1-g0f52 From 54abb08e615ab4d094b37ce3102df81779ee2c7a Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 17:42:07 +0200 Subject: Use size_t for strlen result in API test --- api_test/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 01df51dcf9..132d48c9cb 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -643,16 +643,16 @@ test_incomplete_char(test_batch_runner *runner, const char *utf8, static void test_continuation_byte(test_batch_runner *runner, const char *utf8) { - int len = strlen(utf8); + size_t len = strlen(utf8); - for (int pos = 1; pos < len; ++pos) { + for (size_t pos = 1; pos < len; ++pos) { char buf[20]; sprintf(buf, "((((%s))))", utf8); buf[4+pos] = '\x20'; char expected[50]; strcpy(expected, "

                            ((((" UTF8_REPL "\x20"); - for (int i = pos + 1; i < len; ++i) { + for (size_t i = pos + 1; i < len; ++i) { strcat(expected, UTF8_REPL); } strcat(expected, "))))

                            \n"); -- cgit 0.0.5-2-1-g0f52 From 0641c5e4e9727ddde0d2be1aebe3fd7009d010f5 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 17:44:11 +0200 Subject: Helper to safely call strlen --- src/buffer.c | 5 +++-- src/buffer.h | 6 ++++++ src/chunk.h | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index efee41d7e9..7d16af84d2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -136,7 +136,7 @@ void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t le void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { cmark_strbuf_set(buf, (const unsigned char *)string, - string ? strlen(string) : 0); + string ? cmark_strbuf_safe_strlen(string) : 0); } void cmark_strbuf_putc(cmark_strbuf *buf, int c) @@ -159,7 +159,8 @@ void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t le void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { - cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string)); + cmark_strbuf_put(buf, (const unsigned char *)string, + cmark_strbuf_safe_strlen(string)); } void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) diff --git a/src/buffer.h b/src/buffer.h index f9696e0af5..babd051305 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -3,6 +3,7 @@ #include #include +#include #include #include "config.h" @@ -82,6 +83,11 @@ cmark_strbuf_check_bufsize(size_t size) { return (bufsize_t)size; } +static inline bufsize_t +cmark_strbuf_safe_strlen(const char *str) { + return cmark_strbuf_check_bufsize(strlen(str)); +} + #ifdef __cplusplus } #endif diff --git a/src/chunk.h b/src/chunk.h index 364918de34..f23a02d4b4 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -87,7 +87,7 @@ static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) c->data = NULL; c->alloc = 0; } else { - c->len = strlen(str); + c->len = cmark_strbuf_safe_strlen(str); c->data = (unsigned char *)malloc(c->len + 1); c->alloc = 1; memcpy(c->data, str, c->len + 1); @@ -96,7 +96,8 @@ static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) static inline cmark_chunk cmark_chunk_literal(const char *data) { - cmark_chunk c = {(unsigned char *)data, data ? strlen(data) : 0, 0}; + bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0; + cmark_chunk c = {(unsigned char *)data, len, 0}; return c; } -- cgit 0.0.5-2-1-g0f52 From fdfa1e4bedf95691389efb9991ac8a6a4599c158 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 7 Jun 2015 22:04:38 +0200 Subject: Remove unimplemented functions from houdini.h --- src/houdini.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/houdini.h b/src/houdini.h index 2e7a3540dc..b926cf362b 100644 --- a/src/houdini.h +++ b/src/houdini.h @@ -36,14 +36,7 @@ extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t s extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure); extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); -extern int houdini_escape_xml(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_escape_uri(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_escape_url(cmark_strbuf *ob, const uint8_t *src, size_t size); extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); -extern int houdini_unescape_uri(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_unescape_url(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_escape_js(cmark_strbuf *ob, const uint8_t *src, size_t size); -extern int houdini_unescape_js(cmark_strbuf *ob, const uint8_t *src, size_t size); #ifdef __cplusplus } -- cgit 0.0.5-2-1-g0f52 From cf85c7643282360a4c30d015560bc64f07ab576c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 7 Jun 2015 15:33:24 -0700 Subject: Updated changelog. --- changelog.txt | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/changelog.txt b/changelog.txt index d6e244b64c..b4ee8eadba 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,7 +3,7 @@ * Fixed bug in list item parsing when items indented >= 4 spaces (#52). * Don't allow link labels with no non-whitespace characters (jgm/CommonMark#322). - * Fixed multiple issues with numeric entities (#33). + * Fixed multiple issues with numeric entities (#33, Nick Wellnhofer). * Support CR and CRLF line endings (Ben Trask). * Added test for different line endings to `api_test`. * Allow NULL value in string setters (Nick Wellnhofer). (NULL @@ -15,12 +15,29 @@ * Cope with broken `snprintf` on Windows (Nick Wellnhofer). On Windows, `snprintf` returns -1 if the output was truncated. Fall back to Windows-specific `_scprintf`. + * Switched length parameter on `cmark_markdown_to_html`, + `cmark_parser_feed`, and `cmark_parse_document` from `int` + to `size_t` (#53, Nick Wellnhofer). + * Use a custom type `bufsize_t` for all string sizes and indices. + This allows to switch to 64-bit string buffers by changing a single + typedef and a macro definition (Nick Wellnhofer). + * Hardened the `strbuf` code, checking for integer overflows and + adding range checks (Nick Wellnhofer). + * Removed unused function `cmark_strbuf_attach` (Nick Wellnhofer). + * Fixed all implicit 64-bit to 32-bit conversions that + `-Wshorten-64-to-32` warns about (Nick Wellnhofer). + * Added helper function `cmark_strbuf_safe_strlen` that converts + from `size_t` to `bufsize_t` and throws an error in case of + an overflow (Nick Wellnhofer). + * Abort on `strbuf` out of memory errors (Nick Wellnhofer). + Previously such errors were not being trapped. This involves + some internal changes to the `buffer` library that do not affect + the API. * Factored out `S_find_first_nonspace` in `S_proces_line`. Added fields `offset`, `first_nonspace`, `indent`, and `blank` to `cmark_parser` struct. This just removes some repetition. - * Fixed typo in `ENSURE_SIZE` macro (bryant). * Added Racket Racket (5.3+) wrapper (Eli Barzilay). - * Removed -pg from Debug build flags (#47). + * Removed `-pg` from Debug build flags (#47). * Added Ubsan build target, to check for undefined behavior. * Improved `make leakcheck`. We now return an error status if anything in the loop fails. We now check `--smart` and `--normalize` options. -- cgit 0.0.5-2-1-g0f52 From a173d0bb746b1afc6a4942a2536c9008da35b572 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 8 Jun 2015 12:53:31 -0700 Subject: Updated spec. --- test/spec.txt | 109 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 84 insertions(+), 25 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index ba2c5aa894..8b2c7a30dc 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.19 -date: 2015-04-27 +version: 0.20 +date: 2015-06-08 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -235,7 +235,10 @@ carriage return (`U+000D`), newline (`U+000A`), or form feed [Unicode whitespace](@unicode-whitespace) is a sequence of one or more [unicode whitespace character]s. -A [non-space character](@non-space-character) is anything but `U+0020`. +A [space](@space) is `U+0020`. + +A [non-space character](@non-space-character) is any character +that is not a [whitespace character]. An [ASCII punctuation character](@ascii-punctuation-character) is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, @@ -246,9 +249,10 @@ A [punctuation character](@punctuation-character) is an [ASCII punctuation character] or anything in the unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. -## Tab expansion +## Preprocessing -Tabs in lines are expanded to spaces, with a tab stop of 4 characters: +Tabs in lines are immediately expanded to [spaces][space], with a tab +stop of 4 characters: . →foo→baz→→bim @@ -274,11 +278,11 @@ with the replacement character (`U+FFFD`). # Blocks and inlines We can think of a document as a sequence of -[blocks](@block)---structural -elements like paragraphs, block quotations, -lists, headers, rules, and code blocks. Blocks can contain other -blocks, or they can contain [inline](@inline) content: -words, spaces, links, emphasized text, images, and inline code. +[blocks](@block)---structural elements like paragraphs, block +quotations, lists, headers, rules, and code blocks. Some blocks (like +block quotes and list items) contain other blocks; others (like +headers and paragraphs) contain [inline](@inline) content---text, +links, emphasized text, images, code, and so on. ## Precedence @@ -529,12 +533,12 @@ consists of a string of characters, parsed as inline content, between an opening sequence of 1--6 unescaped `#` characters and an optional closing sequence of any number of `#` characters. The opening sequence of `#` characters cannot be followed directly by a -[non-space character]. -The optional closing sequence of `#`s must be preceded by a space and may be -followed by spaces only. The opening `#` character may be indented 0-3 -spaces. The raw contents of the header are stripped of leading and -trailing spaces before being parsed as inline content. The header level -is equal to the number of `#` characters in the opening sequence. +[non-space character]. The optional closing sequence of `#`s must be +preceded by a [space] and may be followed by spaces only. The opening +`#` character may be indented 0-3 spaces. The raw contents of the +header are stripped of leading and trailing spaces before being parsed +as inline content. The header level is equal to the number of `#` +characters in the opening sequence. Simple headers: @@ -562,11 +566,13 @@ More than six `#` characters is not a header:

                            ####### foo

                            . -A space is required between the `#` characters and the header's -contents. Note that many implementations currently do not require -the space. However, the space was required by the [original ATX -implementation](http://www.aaronsw.com/2002/atx/atx.py), and it helps -prevent things like the following from being parsed as headers: +At least one space is required between the `#` characters and the +header's contents, unless the header is empty. Note that many +implementations currently do not require the space. However, the +space was required by the +[original ATX implementation](http://www.aaronsw.com/2002/atx/atx.py), +and it helps prevent things like the following from being parsed as +headers: . #5 bolt @@ -1028,7 +1034,41 @@ paragraph.)
                            . -The contents are literal text, and do not get parsed as Markdown: +If there is any ambiguity between an interpretation of indentation +as a code block and as indicating that material belongs to a [list +item][list items], the list item interpretation takes precedence: + +. + - foo + + bar +. +
                              +
                            • +

                              foo

                              +

                              bar

                              +
                            • +
                            +. + +. +1. foo + + - bar +. +
                              +
                            1. +

                              foo

                              +
                                +
                              • bar
                              • +
                              +
                            2. +
                            +. + + +The contents of a code block are literal text, and do not get parsed +as Markdown: .
                            @@ -2329,9 +2369,16 @@ foo

                            . -Laziness only applies to lines that are continuations of -paragraphs. Lines containing characters or indentation that indicate -block structure cannot be lazy. +Laziness only applies to lines that would have been continuations of +paragraphs had they been prepended with `>`. For example, the +`>` cannot be omitted in the second line of + +``` markdown +> foo +> --- +``` + +without changing the meaning: . > foo @@ -2343,6 +2390,15 @@ block structure cannot be lazy.
                            . +Similarly, if we omit the `>` in the second line of + +``` markdown +> - foo +> - bar +``` + +then the block quote ends after the first line: + . > - foo - bar @@ -2357,6 +2413,9 @@ block structure cannot be lazy. . +For the same reason, we can't omit the `>` in front of +subsequent lines of an indented or fenced code block: + . > foo bar -- cgit 0.0.5-2-1-g0f52 From 8ac509f8bf0fe9f9f0b277cb612f9deb5bd072a5 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 9 Jun 2015 17:59:37 +0200 Subject: Optimize utf8proc_detab Handle valid UTF-8 chars inside the main loop and avoid a call to strbuf_put for every UTF-8 char. Results in a 8% speedup in the UTF-8-heavy "make bench" on my system. --- src/utf8.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/utf8.c b/src/utf8.c index ba1d87317d..248a19944c 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -62,14 +62,6 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) return length; switch (length) { - case 1: - if (str[0] == 0x00) { - // ASCII NUL is technically valid but rejected - // for security reasons. - return -length; - } - break; - case 2: if (str[0] < 0xC2) { // Overlong @@ -117,10 +109,27 @@ void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) while (i < size) { bufsize_t org = i; + int charlen = 0; + + while (i < size && line[i] != '\t') { + if (line[i] >= 0x80) { + charlen = utf8proc_valid(line + i, size - i); + if (charlen < 0) { + charlen = -charlen; + break; + } + i += charlen; + } + else if (line[i] == '\0') { + // ASCII NUL is technically valid but rejected + // for security reasons. + charlen = 1; + break; + } + else { + i++; + } - while (i < size && line[i] != '\t' && line[i] != '\0' - && line[i] < 0x80) { - i++; tab++; } @@ -136,14 +145,8 @@ void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) i += 1; tab += numspaces; } else { - int charlen = utf8proc_valid(line + i, size - i); - - if (charlen >= 0) { - cmark_strbuf_put(ob, line + i, charlen); - } else { - encode_unknown(ob); - charlen = -charlen; - } + // Invalid UTF-8 + encode_unknown(ob); i += charlen; tab += 1; -- cgit 0.0.5-2-1-g0f52 From 8d997c85ee1452480ed3d821ce0642f7e6e5b9e6 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 9 Jun 2015 18:26:04 +0200 Subject: Roll utf8proc_charlen into utf8proc_valid Speeds up "make bench" by another percent. --- src/utf8.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/utf8.c b/src/utf8.c index 248a19944c..a4449dd256 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -56,13 +56,18 @@ static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) // Validate a single UTF-8 character according to RFC 3629. static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { - int length = utf8proc_charlen(str, str_len); + int length = utf8proc_utf8class[str[0]]; - if (length <= 0) - return length; + if (!length) + return -1; + + if ((bufsize_t)length > str_len) + return -str_len; switch (length) { case 2: + if ((str[1] & 0xC0) != 0x80) + return -1; if (str[0] < 0xC2) { // Overlong return -length; @@ -70,6 +75,10 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) break; case 3: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; if (str[0] == 0xE0) { if (str[1] < 0xA0) { // Overlong @@ -84,6 +93,12 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) break; case 4: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; + if ((str[3] & 0xC0) != 0x80) + return -3; if (str[0] == 0xF0) { if (str[1] < 0x90) { // Overlong -- cgit 0.0.5-2-1-g0f52 From 38f6ac470d3b597446d4663a00efbe6ebce8ee5e Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 9 Jun 2015 19:27:33 +0200 Subject: Further optimize utf8proc_valid Assume a multi-byte sequence and rework switch statement into if/else for another 2% speedup. --- src/utf8.c | 71 ++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/src/utf8.c b/src/utf8.c index a4449dd256..4b85714961 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -54,9 +54,11 @@ static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) } // Validate a single UTF-8 character according to RFC 3629. +// Assumes a multi-byte UTF-8 sequence. static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { int length = utf8proc_utf8class[str[0]]; + assert(length != 1); if (!length) return -1; @@ -64,53 +66,48 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) if ((bufsize_t)length > str_len) return -str_len; - switch (length) { - case 2: - if ((str[1] & 0xC0) != 0x80) - return -1; + if ((str[1] & 0xC0) != 0x80) + return -1; + + if (length == 2) { if (str[0] < 0xC2) { // Overlong return -length; } - break; - - case 3: - if ((str[1] & 0xC0) != 0x80) - return -1; + } + else { if ((str[2] & 0xC0) != 0x80) return -2; - if (str[0] == 0xE0) { - if (str[1] < 0xA0) { - // Overlong - return -length; - } - } else if (str[0] == 0xED) { - if (str[1] >= 0xA0) { - // Surrogate - return -length; - } - } - break; - case 4: - if ((str[1] & 0xC0) != 0x80) - return -1; - if ((str[2] & 0xC0) != 0x80) - return -2; - if ((str[3] & 0xC0) != 0x80) - return -3; - if (str[0] == 0xF0) { - if (str[1] < 0x90) { - // Overlong - return -length; + if (length == 3) { + if (str[0] == 0xE0) { + if (str[1] < 0xA0) { + // Overlong + return -length; + } + } else if (str[0] == 0xED) { + if (str[1] >= 0xA0) { + // Surrogate + return -length; + } } - } else if (str[0] >= 0xF4) { - if (str[0] > 0xF4 || str[1] >= 0x90) { - // Above 0x10FFFF - return -length; + } + else { + if ((str[3] & 0xC0) != 0x80) + return -3; + + if (str[0] == 0xF0) { + if (str[1] < 0x90) { + // Overlong + return -length; + } + } else if (str[0] >= 0xF4) { + if (str[0] > 0xF4 || str[1] >= 0x90) { + // Above 0x10FFFF + return -length; + } } } - break; } return length; -- cgit 0.0.5-2-1-g0f52 From 52b2f3e8c7f8d039eb1ba509a75f98046afb4c5e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 9 Jun 2015 21:08:06 -0700 Subject: Updated spec. --- test/spec.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 8b2c7a30dc..a4fe485edf 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5728,6 +5728,11 @@ Rule 15:

                            foobar*

                            . +. +*foo __bar *baz bim__ bam* +. +

                            foo bar *baz bim bam

                            +. Rule 16: -- cgit 0.0.5-2-1-g0f52 From a79b2ed9b7051b259f1ab874e5168a853723c314 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Jun 2015 11:53:06 -0700 Subject: Revert "Merge pull request #58 from nwellnhof/optimize_utf8proc_detab" This reverts commit 54d1249c2caebf45a24d691dc765fb93c9a5e594, reversing changes made to bc14d869323650e936c7143dcf941b28ccd5b57d. --- src/utf8.c | 71 ++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/src/utf8.c b/src/utf8.c index 4b85714961..a4449dd256 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -54,11 +54,9 @@ static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) } // Validate a single UTF-8 character according to RFC 3629. -// Assumes a multi-byte UTF-8 sequence. static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { int length = utf8proc_utf8class[str[0]]; - assert(length != 1); if (!length) return -1; @@ -66,48 +64,53 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) if ((bufsize_t)length > str_len) return -str_len; - if ((str[1] & 0xC0) != 0x80) - return -1; - - if (length == 2) { + switch (length) { + case 2: + if ((str[1] & 0xC0) != 0x80) + return -1; if (str[0] < 0xC2) { // Overlong return -length; } - } - else { + break; + + case 3: + if ((str[1] & 0xC0) != 0x80) + return -1; if ((str[2] & 0xC0) != 0x80) return -2; - - if (length == 3) { - if (str[0] == 0xE0) { - if (str[1] < 0xA0) { - // Overlong - return -length; - } - } else if (str[0] == 0xED) { - if (str[1] >= 0xA0) { - // Surrogate - return -length; - } + if (str[0] == 0xE0) { + if (str[1] < 0xA0) { + // Overlong + return -length; + } + } else if (str[0] == 0xED) { + if (str[1] >= 0xA0) { + // Surrogate + return -length; } } - else { - if ((str[3] & 0xC0) != 0x80) - return -3; - - if (str[0] == 0xF0) { - if (str[1] < 0x90) { - // Overlong - return -length; - } - } else if (str[0] >= 0xF4) { - if (str[0] > 0xF4 || str[1] >= 0x90) { - // Above 0x10FFFF - return -length; - } + break; + + case 4: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; + if ((str[3] & 0xC0) != 0x80) + return -3; + if (str[0] == 0xF0) { + if (str[1] < 0x90) { + // Overlong + return -length; + } + } else if (str[0] >= 0xF4) { + if (str[0] > 0xF4 || str[1] >= 0x90) { + // Above 0x10FFFF + return -length; } } + break; } return length; -- cgit 0.0.5-2-1-g0f52 From e1db44b114620c5a23708d851d64fb53dd84bde9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Jun 2015 12:58:27 -0700 Subject: process_inlines: remove closers from delim stack when possible. When they have no matching openers and cannot be openers themselves, we can safely remove them. This helps with a performance case: "a_ " * 20000. See jgm/commonmark.js#43. --- src/inlines.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/inlines.c b/src/inlines.c index 7e8f806cba..a1f0356629 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -439,6 +439,8 @@ static void process_emphasis(subject *subj, delimiter *start_delim) { delimiter *closer = subj->last_delim; delimiter *opener; + delimiter *old_closer; + bool opener_not_found; // move back to first relevant delim. while (closer != NULL && closer->previous != start_delim) { @@ -459,6 +461,9 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } opener = opener->previous; } + opener_not_found = opener == NULL || + opener == start_delim; + old_closer = closer; if (closer->delim_char == '*' || closer->delim_char == '_') { if (opener != NULL && opener != start_delim) { closer = S_insert_emph(subj, opener, closer); @@ -486,6 +491,12 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } closer = closer->next; } + if (opener_not_found && !old_closer->can_open) { + // we can remove a closer that can't be an + // opener, once we've seen there's no + // matching opener: + remove_delimiter(subj, old_closer); + } } else { closer = closer->next; } -- cgit 0.0.5-2-1-g0f52 From 4765fff411c4629ef8887d813ebd669b803b7336 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Jun 2015 13:06:06 -0700 Subject: Added pathological test case for jgm/commonmark#43. Many closers with no openers. --- test/pathological_tests.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 0e991f91dc..450acbf11a 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -23,6 +23,9 @@ pathological = { "nested strong emph": (("*a **a " * 65000) + "b" + (" a** a*" * 65000), re.compile("(a a ){65000}b( a a){65000}")), + "many emph closers with no openers": + (("a_ " * 65000), + re.compile("(a[_] ){64999}a_")), "nested brackets": (("[" * 50000) + "a" + ("]" * 50000), re.compile("\[{50000}a\]{50000}")), -- cgit 0.0.5-2-1-g0f52 From 1acd161b2f25e71a40c903ea8997a6ee2f4694d2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Jun 2015 13:08:09 -0700 Subject: Added more pathological tests. Many link closers with no openers. Many link openers with no closers. Many emph openers with no closers. --- test/pathological_tests.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 450acbf11a..6e207ce39f 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -26,6 +26,15 @@ pathological = { "many emph closers with no openers": (("a_ " * 65000), re.compile("(a[_] ){64999}a_")), + "many emph openers with no closers": + (("_a " * 65000), + re.compile("(_a ){64999}_a")), + "many link closers with no openers": + (("a]" * 65000), + re.compile("(a\]){65000}")), + "many link openers with no closers": + (("[a" * 65000), + re.compile("(\[a){65000}")), "nested brackets": (("[" * 50000) + "a" + ("]" * 50000), re.compile("\[{50000}a\]{50000}")), -- cgit 0.0.5-2-1-g0f52 From aa2f771502ad48842bf084ccd67aaa19cac590c0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Jun 2015 23:53:15 -0700 Subject: Code simplification. --- src/inlines.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index a1f0356629..c04e793f5c 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -440,7 +440,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) delimiter *closer = subj->last_delim; delimiter *opener; delimiter *old_closer; - bool opener_not_found; + bool opener_found; // move back to first relevant delim. while (closer != NULL && closer->previous != start_delim) { @@ -454,15 +454,15 @@ static void process_emphasis(subject *subj, delimiter *start_delim) closer->delim_char == '"' || closer->delim_char == '\'')) { // Now look backwards for first matching opener: opener = closer->previous; + opener_found = false; while (opener != NULL && opener != start_delim) { if (opener->delim_char == closer->delim_char && opener->can_open) { + opener_found = true; break; } opener = opener->previous; } - opener_not_found = opener == NULL || - opener == start_delim; old_closer = closer; if (closer->delim_char == '*' || closer->delim_char == '_') { if (opener != NULL && opener != start_delim) { @@ -491,7 +491,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } closer = closer->next; } - if (opener_not_found && !old_closer->can_open) { + if (!opener_found && !old_closer->can_open) { // we can remove a closer that can't be an // opener, once we've seen there's no // matching opener: -- cgit 0.0.5-2-1-g0f52 From 1bdb53d28f75db491e4706932fe0efd023f14d9f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Jun 2015 23:57:52 -0700 Subject: More code simplification. --- src/inlines.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index c04e793f5c..7b51be97d8 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -465,7 +465,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } old_closer = closer; if (closer->delim_char == '*' || closer->delim_char == '_') { - if (opener != NULL && opener != start_delim) { + if (opener_found) { closer = S_insert_emph(subj, opener, closer); } else { closer = closer->next; @@ -474,7 +474,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) cmark_chunk_free(&closer->inl_text->as.literal); closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE); - if (opener != NULL && opener != start_delim) { + if (opener_found) { cmark_chunk_free(&opener->inl_text->as.literal); opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE); @@ -484,7 +484,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) cmark_chunk_free(&closer->inl_text->as.literal); closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE); - if (opener != NULL && opener != start_delim) { + if (opener_found) { cmark_chunk_free(&opener->inl_text->as.literal); opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE); -- cgit 0.0.5-2-1-g0f52 From eba54eb5769075d29f21f11cbb011f6d537d9f8c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 08:01:07 -0700 Subject: Added timetouts to pathological tests. This way tests fail instead of just hanging. Currently we use a 1 sec timeout. Added a failing test from jgm/commonmark#43. --- test/pathological_tests.py | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 6e207ce39f..3b3374b6b7 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -6,6 +6,8 @@ import argparse import sys import platform from cmark import CMark +from multiprocessing import Process, Value +import time if __name__ == "__main__": parser = argparse.ArgumentParser(description='Run cmark tests.') @@ -35,6 +37,9 @@ pathological = { "many link openers with no closers": (("[a" * 65000), re.compile("(\[a){65000}")), + "mismatched openers and closers": + (("*a_ " * 50000), + re.compile("([*]a[_] ){49999}[*]a_")), "nested brackets": (("[" * 50000) + "a" + ("]" * 50000), re.compile("\[{50000}a\]{50000}")), @@ -47,29 +52,38 @@ pathological = { } whitespace_re = re.compile('/s+/') -passed = 0 -errored = 0 -failed = 0 +passed = Value('i', 0) +errored = Value('i', 0) +failed = Value('i', 0) -print("Testing pathological cases:") -for description in pathological: - print(description) - (inp, regex) = pathological[description] +def do_cmark_test(inp, regex, passed, errored, failed): [rc, actual, err] = cmark.to_html(inp) if rc != 0: - errored += 1 - print(description) - print("program returned error code %d" % rc) + errored.value += 1 + print(description, '[ERRORED (return code %d)]' %rc) print(err) elif regex.search(actual): - passed += 1 + print(description, '[PASSED]') + passed.value += 1 else: - print(description, 'failed') + print(description, '[FAILED]') print(repr(actual)) - failed += 1 + failed.value += 1 + +print("Testing pathological cases:") +for description in pathological: + (inp, regex) = pathological[description] + p = Process(target=do_cmark_test, args=(inp, regex, passed, errored, failed)) + p.start() + p.join(1) + if p.is_alive(): + print(description, '[FAILED (timed out)]') + p.terminate() + p.join() + failed.value += 1 -print("%d passed, %d failed, %d errored" % (passed, failed, errored)) -if (failed == 0 and errored == 0): +print("%d passed, %d failed, %d errored" % (passed.value, failed.value, errored.value)) +if (failed.value == 0 and errored.value == 0): exit(0) else: exit(1) -- cgit 0.0.5-2-1-g0f52 From 4224dc159cdd0b4429a566a14792c0abc0f5f62a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 10:10:33 -0700 Subject: Added another case to pathological tests. "*a_ " * 20000 See jgm/commonmark#43. --- test/pathological_tests.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 3b3374b6b7..abc67ce407 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -40,6 +40,9 @@ pathological = { "mismatched openers and closers": (("*a_ " * 50000), re.compile("([*]a[_] ){49999}[*]a_")), + "link openers and emph closers": + (("[ a_" * 50000), + re.compile("(\[ a_){50000}")), "nested brackets": (("[" * 50000) + "a" + ("]" * 50000), re.compile("\[{50000}a\]{50000}")), -- cgit 0.0.5-2-1-g0f52 From 39b40151afa1af92c2d585c86930393be7e8ac73 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 10:11:37 -0700 Subject: Fixed `process_emphasis` to handle new pathological cases. Now we have an array of pointers (`potential_openers`), keyed to the delim char. When we've failed to match a potential opener prior to point X in the delimiter stack, we reset `potential_openers` for that opener type to X, and thus avoid having to look again through all the openers we've already rejected. See jgm/commonmark#43. --- src/inlines.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 7b51be97d8..0a75e38fa0 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -441,6 +441,13 @@ static void process_emphasis(subject *subj, delimiter *start_delim) delimiter *opener; delimiter *old_closer; bool opener_found; + delimiter *potential_openers[128]; + + // initialize potential_openers: + potential_openers['*'] = start_delim; + potential_openers['_'] = start_delim; + potential_openers['\''] = start_delim; + potential_openers['"'] = start_delim; // move back to first relevant delim. while (closer != NULL && closer->previous != start_delim) { @@ -455,7 +462,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; - while (opener != NULL && opener != start_delim) { + while (opener != NULL && opener != potential_openers[closer->delim_char]) { if (opener->delim_char == closer->delim_char && opener->can_open) { opener_found = true; @@ -464,7 +471,13 @@ static void process_emphasis(subject *subj, delimiter *start_delim) opener = opener->previous; } old_closer = closer; - if (closer->delim_char == '*' || closer->delim_char == '_') { + if (closer->delim_char == '*') { + if (opener_found) { + closer = S_insert_emph(subj, opener, closer); + } else { + closer = closer->next; + } + } else if (closer->delim_char == '_') { if (opener_found) { closer = S_insert_emph(subj, opener, closer); } else { @@ -492,6 +505,8 @@ static void process_emphasis(subject *subj, delimiter *start_delim) closer = closer->next; } if (!opener_found && !old_closer->can_open) { + // set lower bound for future searches for openers: + potential_openers[old_closer->delim_char] = closer; // we can remove a closer that can't be an // opener, once we've seen there's no // matching opener: -- cgit 0.0.5-2-1-g0f52 From 18c32c79bad08359c5590a93c818be51f1f63021 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 10:17:25 -0700 Subject: Updated benchmarks.md. Removed sundown, because the reading was anomalous. This commit in hoedown caused the speed difference btw sundown and hoedown that I was measuring before (on 32 bit machines): https://github.com/hoedown/hoedown/commit/ca829ff83580ed52cc56c09a67c80119026bae20 As Nick Wellnhofer explains: "The commit removes a rather arbitrary limit of 16MB for buffers. Your benchmark input probably results in an buffer larger than 16MB. It also seems that hoedown didn't check error returns thoroughly at the time of the commit. This basically means that large input files ould produce any kind of random behavior before that commit, and that any benchmark that results in a too large buffer can't be relied on." --- benchmarks.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index e905119718..e43435dbde 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -14,8 +14,7 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | marked | 1.94 | | **commonmark.js** | 1.93 | | discount | 1.86 | -| **cmark** | 0.35 | -| sundown | 0.34 | +| **cmark** | 0.32 | | hoedown | 0.21 | To run these benchmarks, use `make bench PROG=/path/to/program`. -- cgit 0.0.5-2-1-g0f52 From c5b77c7b01ef6ff035b3afe618de5a6bc353c9cf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 11:12:09 -0700 Subject: Small logic fixes and a simplification in process_emphasis. --- src/inlines.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 0a75e38fa0..a96a479c62 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -471,13 +471,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) opener = opener->previous; } old_closer = closer; - if (closer->delim_char == '*') { - if (opener_found) { - closer = S_insert_emph(subj, opener, closer); - } else { - closer = closer->next; - } - } else if (closer->delim_char == '_') { + if (closer->delim_char == '*' || closer->delim_char == '_') { if (opener_found) { closer = S_insert_emph(subj, opener, closer); } else { @@ -504,13 +498,15 @@ static void process_emphasis(subject *subj, delimiter *start_delim) } closer = closer->next; } - if (!opener_found && !old_closer->can_open) { + if (!opener_found) { // set lower bound for future searches for openers: potential_openers[old_closer->delim_char] = closer; - // we can remove a closer that can't be an - // opener, once we've seen there's no - // matching opener: - remove_delimiter(subj, old_closer); + if (!old_closer->can_open) { + // we can remove a closer that can't be an + // opener, once we've seen there's no + // matching opener: + remove_delimiter(subj, old_closer); + } } } else { closer = closer->next; -- cgit 0.0.5-2-1-g0f52 From ab5666eae00102f0ea7753f6c449e9778b14287b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 12:13:55 -0700 Subject: pathological_tests: removed timeout stuff. It breaks on Windows. --- test/pathological_tests.py | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index abc67ce407..fe5d2e42b6 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -6,8 +6,6 @@ import argparse import sys import platform from cmark import CMark -from multiprocessing import Process, Value -import time if __name__ == "__main__": parser = argparse.ArgumentParser(description='Run cmark tests.') @@ -55,38 +53,28 @@ pathological = { } whitespace_re = re.compile('/s+/') -passed = Value('i', 0) -errored = Value('i', 0) -failed = Value('i', 0) +passed = 0 +errored = 0 +failed = 0 -def do_cmark_test(inp, regex, passed, errored, failed): +print("Testing pathological cases:") +for description in pathological: + (inp, regex) = pathological[description] [rc, actual, err] = cmark.to_html(inp) if rc != 0: - errored.value += 1 + errored += 1 print(description, '[ERRORED (return code %d)]' %rc) print(err) elif regex.search(actual): print(description, '[PASSED]') - passed.value += 1 + passed += 1 else: print(description, '[FAILED]') print(repr(actual)) - failed.value += 1 - -print("Testing pathological cases:") -for description in pathological: - (inp, regex) = pathological[description] - p = Process(target=do_cmark_test, args=(inp, regex, passed, errored, failed)) - p.start() - p.join(1) - if p.is_alive(): - print(description, '[FAILED (timed out)]') - p.terminate() - p.join() - failed.value += 1 + failed += 1 -print("%d passed, %d failed, %d errored" % (passed.value, failed.value, errored.value)) -if (failed.value == 0 and errored.value == 0): +print("%d passed, %d failed, %d errored" % (passed, failed, errored)) +if (failed == 0 and errored == 0): exit(0) else: exit(1) -- cgit 0.0.5-2-1-g0f52 From 0f7233e073a32c15bdde476edcd04b6d395278b4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 14:34:24 -0700 Subject: Removed "add newline if line doesn't have one." This isn't actually needed. --- src/blocks.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index a3ac71234b..2a68f75a10 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -582,13 +582,6 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte parser->offset = 0; parser->blank = false; - // Add a newline to the end if not present: - // TODO this breaks abstraction: - if (parser->curline->size > 0 && - !S_is_line_end_char(parser->curline->ptr[parser->curline->size - 1])) { - cmark_strbuf_putc(parser->curline, '\n'); - } - input.data = parser->curline->ptr; input.len = parser->curline->size; -- cgit 0.0.5-2-1-g0f52 From cdcb65c5a209a1a3be4a1b9e804f5a4292127509 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 13 Jun 2015 15:49:59 -0700 Subject: Fixed entity lookup table. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The old one had many errors. The new one is derived from the list in the npm entities package. Since the sequences can now be longer (multi-code-point), we have bumped the length limit from 4 to 8, which also affects houdini_html_u.c. An example of the kind of error that was fixed in given in jgm/commonmark.js#47: `≧̸` should be rendered as "≧̸" (U+02267 U+00338), but it's actually rendered as "≧" (which is the same as `≧`). --- src/houdini_html_u.c | 2 +- src/html_unescape.gperf | 718 ++++++++++++++-------------- src/html_unescape.h | 1186 +++++++++++++++++++++++------------------------ 3 files changed, 953 insertions(+), 953 deletions(-) diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index e57894d36e..2362b0405e 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -69,7 +69,7 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) if (entity != NULL) { bufsize_t len = 0; - while (len < 4 && entity->utf8[len] != '\0') { + while (len < 8 && entity->utf8[len] != '\0') { ++len; } cmark_strbuf_put(ob, entity->utf8, len); diff --git a/src/html_unescape.gperf b/src/html_unescape.gperf index 74173a6ebb..a03b036dd8 100644 --- a/src/html_unescape.gperf +++ b/src/html_unescape.gperf @@ -1,6 +1,6 @@ struct html_ent { int entity; - unsigned char utf8[4]; + unsigned char utf8[8]; }; %% "Aacute", {195, 129, 0} @@ -9,7 +9,7 @@ struct html_ent { "abreve", {196, 131, 0} "ac", {226, 136, 190, 0} "acd", {226, 136, 191, 0} -"acE", {226, 136, 190, 0} +"acE", {226, 136, 190, 204, 179, 0} "Acirc", {195, 130, 0} "acirc", {195, 162, 0} "acute", {194, 180, 0} @@ -18,8 +18,8 @@ struct html_ent { "AElig", {195, 134, 0} "aelig", {195, 166, 0} "af", {226, 129, 161, 0} -"Afr", {240, 157, 148, 132} -"afr", {240, 157, 148, 158} +"Afr", {240, 157, 148, 132, 0} +"afr", {240, 157, 148, 158, 0} "Agrave", {195, 128, 0} "agrave", {195, 160, 0} "alefsym", {226, 132, 181, 0} @@ -29,17 +29,18 @@ struct html_ent { "Amacr", {196, 128, 0} "amacr", {196, 129, 0} "amalg", {226, 168, 191, 0} -"amp", {38, 0} "AMP", {38, 0} -"andand", {226, 169, 149, 0} -"And", {226, 169, 147, 0} +"amp", {38, 0} "and", {226, 136, 167, 0} +"And", {226, 169, 147, 0} +"andand", {226, 169, 149, 0} "andd", {226, 169, 156, 0} "andslope", {226, 169, 152, 0} "andv", {226, 169, 154, 0} "ang", {226, 136, 160, 0} "ange", {226, 166, 164, 0} "angle", {226, 136, 160, 0} +"angmsd", {226, 136, 161, 0} "angmsdaa", {226, 166, 168, 0} "angmsdab", {226, 166, 169, 0} "angmsdac", {226, 166, 170, 0} @@ -48,7 +49,6 @@ struct html_ent { "angmsdaf", {226, 166, 173, 0} "angmsdag", {226, 166, 174, 0} "angmsdah", {226, 166, 175, 0} -"angmsd", {226, 136, 161, 0} "angrt", {226, 136, 159, 0} "angrtvb", {226, 138, 190, 0} "angrtvbd", {226, 166, 157, 0} @@ -57,12 +57,12 @@ struct html_ent { "angzarr", {226, 141, 188, 0} "Aogon", {196, 132, 0} "aogon", {196, 133, 0} -"Aopf", {240, 157, 148, 184} -"aopf", {240, 157, 149, 146} -"apacir", {226, 169, 175, 0} +"Aopf", {240, 157, 148, 184, 0} +"aopf", {240, 157, 149, 146, 0} "ap", {226, 137, 136, 0} -"apE", {226, 169, 176, 0} +"apacir", {226, 169, 175, 0} "ape", {226, 137, 138, 0} +"apE", {226, 169, 176, 0} "apid", {226, 137, 139, 0} "apos", {39, 0} "ApplyFunction", {226, 129, 161, 0} @@ -70,8 +70,8 @@ struct html_ent { "approxeq", {226, 137, 138, 0} "Aring", {195, 133, 0} "aring", {195, 165, 0} -"Ascr", {240, 157, 146, 156} -"ascr", {240, 157, 146, 182} +"Ascr", {240, 157, 146, 156, 0} +"ascr", {240, 157, 146, 182, 0} "Assign", {226, 137, 148, 0} "ast", {42, 0} "asymp", {226, 137, 136, 0} @@ -100,8 +100,8 @@ struct html_ent { "bcy", {208, 177, 0} "bdquo", {226, 128, 158, 0} "becaus", {226, 136, 181, 0} -"because", {226, 136, 181, 0} "Because", {226, 136, 181, 0} +"because", {226, 136, 181, 0} "bemptyv", {226, 166, 176, 0} "bepsi", {207, 182, 0} "bernou", {226, 132, 172, 0} @@ -110,8 +110,8 @@ struct html_ent { "beta", {206, 178, 0} "beth", {226, 132, 182, 0} "between", {226, 137, 172, 0} -"Bfr", {240, 157, 148, 133} -"bfr", {240, 157, 148, 159} +"Bfr", {240, 157, 148, 133, 0} +"bfr", {240, 157, 148, 159, 0} "bigcap", {226, 139, 130, 0} "bigcirc", {226, 151, 175, 0} "bigcup", {226, 139, 131, 0} @@ -137,12 +137,12 @@ struct html_ent { "blk14", {226, 150, 145, 0} "blk34", {226, 150, 147, 0} "block", {226, 150, 136, 0} -"bne", {61, 0} -"bnequiv", {226, 137, 161, 0} -"bNot", {226, 171, 173, 0} +"bne", {61, 226, 131, 165, 0} +"bnequiv", {226, 137, 161, 226, 131, 165, 0} "bnot", {226, 140, 144, 0} -"Bopf", {240, 157, 148, 185} -"bopf", {240, 157, 149, 147} +"bNot", {226, 171, 173, 0} +"Bopf", {240, 157, 148, 185, 0} +"bopf", {240, 157, 149, 147, 0} "bot", {226, 138, 165, 0} "bottom", {226, 138, 165, 0} "bowtie", {226, 139, 136, 0} @@ -191,35 +191,35 @@ struct html_ent { "boxVr", {226, 149, 159, 0} "boxVR", {226, 149, 160, 0} "bprime", {226, 128, 181, 0} -"breve", {203, 152, 0} "Breve", {203, 152, 0} +"breve", {203, 152, 0} "brvbar", {194, 166, 0} -"bscr", {240, 157, 146, 183} "Bscr", {226, 132, 172, 0} +"bscr", {240, 157, 146, 183, 0} "bsemi", {226, 129, 143, 0} "bsim", {226, 136, 189, 0} "bsime", {226, 139, 141, 0} -"bsolb", {226, 167, 133, 0} "bsol", {92, 0} +"bsolb", {226, 167, 133, 0} "bsolhsub", {226, 159, 136, 0} "bull", {226, 128, 162, 0} "bullet", {226, 128, 162, 0} "bump", {226, 137, 142, 0} -"bumpE", {226, 170, 174, 0} "bumpe", {226, 137, 143, 0} +"bumpE", {226, 170, 174, 0} "Bumpeq", {226, 137, 142, 0} "bumpeq", {226, 137, 143, 0} "Cacute", {196, 134, 0} "cacute", {196, 135, 0} +"cap", {226, 136, 169, 0} +"Cap", {226, 139, 146, 0} "capand", {226, 169, 132, 0} "capbrcup", {226, 169, 137, 0} "capcap", {226, 169, 139, 0} -"cap", {226, 136, 169, 0} -"Cap", {226, 139, 146, 0} "capcup", {226, 169, 135, 0} "capdot", {226, 169, 128, 0} "CapitalDifferentialD", {226, 133, 133, 0} -"caps", {226, 136, 169, 0} +"caps", {226, 136, 169, 239, 184, 128, 0} "caret", {226, 129, 129, 0} "caron", {203, 135, 0} "Cayleys", {226, 132, 173, 0} @@ -239,16 +239,17 @@ struct html_ent { "Cedilla", {194, 184, 0} "cemptyv", {226, 166, 178, 0} "cent", {194, 162, 0} -"centerdot", {194, 183, 0} "CenterDot", {194, 183, 0} -"cfr", {240, 157, 148, 160} +"centerdot", {194, 183, 0} "Cfr", {226, 132, 173, 0} +"cfr", {240, 157, 148, 160, 0} "CHcy", {208, 167, 0} "chcy", {209, 135, 0} "check", {226, 156, 147, 0} "checkmark", {226, 156, 147, 0} "Chi", {206, 167, 0} "chi", {207, 135, 0} +"cir", {226, 151, 139, 0} "circ", {203, 134, 0} "circeq", {226, 137, 151, 0} "circlearrowleft", {226, 134, 186, 0} @@ -262,9 +263,8 @@ struct html_ent { "CircleMinus", {226, 138, 150, 0} "CirclePlus", {226, 138, 149, 0} "CircleTimes", {226, 138, 151, 0} -"cir", {226, 151, 139, 0} -"cirE", {226, 167, 131, 0} "cire", {226, 137, 151, 0} +"cirE", {226, 167, 131, 0} "cirfnint", {226, 168, 144, 0} "cirmid", {226, 171, 175, 0} "cirscir", {226, 167, 130, 0} @@ -273,10 +273,10 @@ struct html_ent { "CloseCurlyQuote", {226, 128, 153, 0} "clubs", {226, 153, 163, 0} "clubsuit", {226, 153, 163, 0} -"colon", {58, 0} "Colon", {226, 136, 183, 0} -"Colone", {226, 169, 180, 0} +"colon", {58, 0} "colone", {226, 137, 148, 0} +"Colone", {226, 169, 180, 0} "coloneq", {226, 137, 148, 0} "comma", {44, 0} "commat", {64, 0} @@ -290,19 +290,19 @@ struct html_ent { "conint", {226, 136, 174, 0} "Conint", {226, 136, 175, 0} "ContourIntegral", {226, 136, 174, 0} -"copf", {240, 157, 149, 148} "Copf", {226, 132, 130, 0} +"copf", {240, 157, 149, 148, 0} "coprod", {226, 136, 144, 0} "Coproduct", {226, 136, 144, 0} -"copy", {194, 169, 0} "COPY", {194, 169, 0} +"copy", {194, 169, 0} "copysr", {226, 132, 151, 0} "CounterClockwiseContourIntegral", {226, 136, 179, 0} "crarr", {226, 134, 181, 0} "cross", {226, 156, 151, 0} "Cross", {226, 168, 175, 0} -"Cscr", {240, 157, 146, 158} -"cscr", {240, 157, 146, 184} +"Cscr", {240, 157, 146, 158, 0} +"cscr", {240, 157, 146, 184, 0} "csub", {226, 171, 143, 0} "csube", {226, 171, 145, 0} "csup", {226, 171, 144, 0} @@ -314,15 +314,15 @@ struct html_ent { "cuesc", {226, 139, 159, 0} "cularr", {226, 134, 182, 0} "cularrp", {226, 164, 189, 0} -"cupbrcap", {226, 169, 136, 0} -"cupcap", {226, 169, 134, 0} -"CupCap", {226, 137, 141, 0} "cup", {226, 136, 170, 0} "Cup", {226, 139, 147, 0} +"cupbrcap", {226, 169, 136, 0} +"CupCap", {226, 137, 141, 0} +"cupcap", {226, 169, 134, 0} "cupcup", {226, 169, 138, 0} "cupdot", {226, 138, 141, 0} "cupor", {226, 169, 133, 0} -"cups", {226, 136, 170, 0} +"cups", {226, 136, 170, 239, 184, 128, 0} "curarr", {226, 134, 183, 0} "curarrm", {226, 164, 188, 0} "curlyeqprec", {226, 139, 158, 0} @@ -344,18 +344,18 @@ struct html_ent { "Darr", {226, 134, 161, 0} "dArr", {226, 135, 147, 0} "dash", {226, 128, 144, 0} -"Dashv", {226, 171, 164, 0} "dashv", {226, 138, 163, 0} +"Dashv", {226, 171, 164, 0} "dbkarow", {226, 164, 143, 0} "dblac", {203, 157, 0} "Dcaron", {196, 142, 0} "dcaron", {196, 143, 0} "Dcy", {208, 148, 0} "dcy", {208, 180, 0} -"ddagger", {226, 128, 161, 0} -"ddarr", {226, 135, 138, 0} "DD", {226, 133, 133, 0} "dd", {226, 133, 134, 0} +"ddagger", {226, 128, 161, 0} +"ddarr", {226, 135, 138, 0} "DDotrahd", {226, 164, 145, 0} "ddotseq", {226, 169, 183, 0} "deg", {194, 176, 0} @@ -364,8 +364,8 @@ struct html_ent { "delta", {206, 180, 0} "demptyv", {226, 166, 177, 0} "dfisht", {226, 165, 191, 0} -"Dfr", {240, 157, 148, 135} -"dfr", {240, 157, 148, 161} +"Dfr", {240, 157, 148, 135, 0} +"dfr", {240, 157, 148, 161, 0} "dHar", {226, 165, 165, 0} "dharl", {226, 135, 131, 0} "dharr", {226, 135, 130, 0} @@ -375,8 +375,8 @@ struct html_ent { "DiacriticalGrave", {96, 0} "DiacriticalTilde", {203, 156, 0} "diam", {226, 139, 132, 0} -"diamond", {226, 139, 132, 0} "Diamond", {226, 139, 132, 0} +"diamond", {226, 139, 132, 0} "diamondsuit", {226, 153, 166, 0} "diams", {226, 153, 166, 0} "die", {194, 168, 0} @@ -392,8 +392,8 @@ struct html_ent { "dlcorn", {226, 140, 158, 0} "dlcrop", {226, 140, 141, 0} "dollar", {36, 0} -"Dopf", {240, 157, 148, 187} -"dopf", {240, 157, 149, 149} +"Dopf", {240, 157, 148, 187, 0} +"dopf", {240, 157, 149, 149, 0} "Dot", {194, 168, 0} "dot", {203, 153, 0} "DotDot", {226, 131, 156, 0} @@ -418,10 +418,10 @@ struct html_ent { "DoubleUpArrow", {226, 135, 145, 0} "DoubleUpDownArrow", {226, 135, 149, 0} "DoubleVerticalBar", {226, 136, 165, 0} -"DownArrowBar", {226, 164, 147, 0} -"downarrow", {226, 134, 147, 0} "DownArrow", {226, 134, 147, 0} +"downarrow", {226, 134, 147, 0} "Downarrow", {226, 135, 147, 0} +"DownArrowBar", {226, 164, 147, 0} "DownArrowUpArrow", {226, 135, 181, 0} "DownBreve", {204, 145, 0} "downdownarrows", {226, 135, 138, 0} @@ -429,18 +429,18 @@ struct html_ent { "downharpoonright", {226, 135, 130, 0} "DownLeftRightVector", {226, 165, 144, 0} "DownLeftTeeVector", {226, 165, 158, 0} -"DownLeftVectorBar", {226, 165, 150, 0} "DownLeftVector", {226, 134, 189, 0} +"DownLeftVectorBar", {226, 165, 150, 0} "DownRightTeeVector", {226, 165, 159, 0} -"DownRightVectorBar", {226, 165, 151, 0} "DownRightVector", {226, 135, 129, 0} -"DownTeeArrow", {226, 134, 167, 0} +"DownRightVectorBar", {226, 165, 151, 0} "DownTee", {226, 138, 164, 0} +"DownTeeArrow", {226, 134, 167, 0} "drbkarow", {226, 164, 144, 0} "drcorn", {226, 140, 159, 0} "drcrop", {226, 140, 140, 0} -"Dscr", {240, 157, 146, 159} -"dscr", {240, 157, 146, 185} +"Dscr", {240, 157, 146, 159, 0} +"dscr", {240, 157, 146, 185, 0} "DScy", {208, 133, 0} "dscy", {209, 149, 0} "dsol", {226, 167, 182, 0} @@ -460,9 +460,9 @@ struct html_ent { "easter", {226, 169, 174, 0} "Ecaron", {196, 154, 0} "ecaron", {196, 155, 0} +"ecir", {226, 137, 150, 0} "Ecirc", {195, 138, 0} "ecirc", {195, 170, 0} -"ecir", {226, 137, 150, 0} "ecolon", {226, 137, 149, 0} "Ecy", {208, 173, 0} "ecy", {209, 141, 0} @@ -472,8 +472,8 @@ struct html_ent { "eDot", {226, 137, 145, 0} "ee", {226, 133, 135, 0} "efDot", {226, 137, 146, 0} -"Efr", {240, 157, 148, 136} -"efr", {240, 157, 148, 162} +"Efr", {240, 157, 148, 136, 0} +"efr", {240, 157, 148, 162, 0} "eg", {226, 170, 154, 0} "Egrave", {195, 136, 0} "egrave", {195, 168, 0} @@ -492,16 +492,16 @@ struct html_ent { "EmptySmallSquare", {226, 151, 187, 0} "emptyv", {226, 136, 133, 0} "EmptyVerySmallSquare", {226, 150, 171, 0} +"emsp", {226, 128, 131, 0} "emsp13", {226, 128, 132, 0} "emsp14", {226, 128, 133, 0} -"emsp", {226, 128, 131, 0} "ENG", {197, 138, 0} "eng", {197, 139, 0} "ensp", {226, 128, 130, 0} "Eogon", {196, 152, 0} "eogon", {196, 153, 0} -"Eopf", {240, 157, 148, 188} -"eopf", {240, 157, 149, 150} +"Eopf", {240, 157, 148, 188, 0} +"eopf", {240, 157, 149, 150, 0} "epar", {226, 139, 149, 0} "eparsl", {226, 167, 163, 0} "eplus", {226, 169, 177, 0} @@ -527,8 +527,8 @@ struct html_ent { "escr", {226, 132, 175, 0} "Escr", {226, 132, 176, 0} "esdot", {226, 137, 144, 0} -"Esim", {226, 169, 179, 0} "esim", {226, 137, 130, 0} +"Esim", {226, 169, 179, 0} "Eta", {206, 151, 0} "eta", {206, 183, 0} "ETH", {195, 144, 0} @@ -540,8 +540,8 @@ struct html_ent { "exist", {226, 136, 131, 0} "Exists", {226, 136, 131, 0} "expectation", {226, 132, 176, 0} -"exponentiale", {226, 133, 135, 0} "ExponentialE", {226, 133, 135, 0} +"exponentiale", {226, 133, 135, 0} "fallingdotseq", {226, 137, 146, 0} "Fcy", {208, 164, 0} "fcy", {209, 132, 0} @@ -549,20 +549,20 @@ struct html_ent { "ffilig", {239, 172, 131, 0} "fflig", {239, 172, 128, 0} "ffllig", {239, 172, 132, 0} -"Ffr", {240, 157, 148, 137} -"ffr", {240, 157, 148, 163} +"Ffr", {240, 157, 148, 137, 0} +"ffr", {240, 157, 148, 163, 0} "filig", {239, 172, 129, 0} "FilledSmallSquare", {226, 151, 188, 0} "FilledVerySmallSquare", {226, 150, 170, 0} -"fjlig", {102, 0} +"fjlig", {102, 106, 0} "flat", {226, 153, 173, 0} "fllig", {239, 172, 130, 0} "fltns", {226, 150, 177, 0} "fnof", {198, 146, 0} -"Fopf", {240, 157, 148, 189} -"fopf", {240, 157, 149, 151} -"forall", {226, 136, 128, 0} +"Fopf", {240, 157, 148, 189, 0} +"fopf", {240, 157, 149, 151, 0} "ForAll", {226, 136, 128, 0} +"forall", {226, 136, 128, 0} "fork", {226, 139, 148, 0} "forkv", {226, 171, 153, 0} "Fouriertrf", {226, 132, 177, 0} @@ -584,8 +584,8 @@ struct html_ent { "frac78", {226, 133, 158, 0} "frasl", {226, 129, 132, 0} "frown", {226, 140, 162, 0} -"fscr", {240, 157, 146, 187} "Fscr", {226, 132, 177, 0} +"fscr", {240, 157, 146, 187, 0} "gacute", {199, 181, 0} "Gamma", {206, 147, 0} "gamma", {206, 179, 0} @@ -603,39 +603,39 @@ struct html_ent { "gdot", {196, 161, 0} "ge", {226, 137, 165, 0} "gE", {226, 137, 167, 0} -"gEl", {226, 170, 140, 0} "gel", {226, 139, 155, 0} +"gEl", {226, 170, 140, 0} "geq", {226, 137, 165, 0} "geqq", {226, 137, 167, 0} "geqslant", {226, 169, 190, 0} -"gescc", {226, 170, 169, 0} "ges", {226, 169, 190, 0} +"gescc", {226, 170, 169, 0} "gesdot", {226, 170, 128, 0} "gesdoto", {226, 170, 130, 0} "gesdotol", {226, 170, 132, 0} -"gesl", {226, 139, 155, 0} +"gesl", {226, 139, 155, 239, 184, 128, 0} "gesles", {226, 170, 148, 0} -"Gfr", {240, 157, 148, 138} -"gfr", {240, 157, 148, 164} +"Gfr", {240, 157, 148, 138, 0} +"gfr", {240, 157, 148, 164, 0} "gg", {226, 137, 171, 0} "Gg", {226, 139, 153, 0} "ggg", {226, 139, 153, 0} "gimel", {226, 132, 183, 0} "GJcy", {208, 131, 0} "gjcy", {209, 147, 0} -"gla", {226, 170, 165, 0} "gl", {226, 137, 183, 0} +"gla", {226, 170, 165, 0} "glE", {226, 170, 146, 0} "glj", {226, 170, 164, 0} "gnap", {226, 170, 138, 0} "gnapprox", {226, 170, 138, 0} -"gne", {226, 170, 136, 0} "gnE", {226, 137, 169, 0} +"gne", {226, 170, 136, 0} "gneq", {226, 170, 136, 0} "gneqq", {226, 137, 169, 0} "gnsim", {226, 139, 167, 0} -"Gopf", {240, 157, 148, 190} -"gopf", {240, 157, 149, 152} +"Gopf", {240, 157, 148, 190, 0} +"gopf", {240, 157, 149, 152, 0} "grave", {96, 0} "GreaterEqual", {226, 137, 165, 0} "GreaterEqualLess", {226, 139, 155, 0} @@ -644,16 +644,16 @@ struct html_ent { "GreaterLess", {226, 137, 183, 0} "GreaterSlantEqual", {226, 169, 190, 0} "GreaterTilde", {226, 137, 179, 0} -"Gscr", {240, 157, 146, 162} "gscr", {226, 132, 138, 0} +"Gscr", {240, 157, 146, 162, 0} "gsim", {226, 137, 179, 0} "gsime", {226, 170, 142, 0} "gsiml", {226, 170, 144, 0} +"Gt", {226, 137, 171, 0} +"GT", {62, 0} +"gt", {62, 0} "gtcc", {226, 170, 167, 0} "gtcir", {226, 169, 186, 0} -"gt", {62, 0} -"GT", {62, 0} -"Gt", {226, 137, 171, 0} "gtdot", {226, 139, 151, 0} "gtlPar", {226, 166, 149, 0} "gtquest", {226, 169, 188, 0} @@ -664,17 +664,17 @@ struct html_ent { "gtreqqless", {226, 170, 140, 0} "gtrless", {226, 137, 183, 0} "gtrsim", {226, 137, 179, 0} -"gvertneqq", {226, 137, 169, 0} -"gvnE", {226, 137, 169, 0} +"gvertneqq", {226, 137, 169, 239, 184, 128, 0} +"gvnE", {226, 137, 169, 239, 184, 128, 0} "Hacek", {203, 135, 0} "hairsp", {226, 128, 138, 0} "half", {194, 189, 0} "hamilt", {226, 132, 139, 0} "HARDcy", {208, 170, 0} "hardcy", {209, 138, 0} -"harrcir", {226, 165, 136, 0} "harr", {226, 134, 148, 0} "hArr", {226, 135, 148, 0} +"harrcir", {226, 165, 136, 0} "harrw", {226, 134, 173, 0} "Hat", {94, 0} "hbar", {226, 132, 143, 0} @@ -684,8 +684,8 @@ struct html_ent { "heartsuit", {226, 153, 165, 0} "hellip", {226, 128, 166, 0} "hercon", {226, 138, 185, 0} -"hfr", {240, 157, 148, 165} "Hfr", {226, 132, 140, 0} +"hfr", {240, 157, 148, 165, 0} "HilbertSpace", {226, 132, 139, 0} "hksearow", {226, 164, 165, 0} "hkswarow", {226, 164, 166, 0} @@ -693,12 +693,12 @@ struct html_ent { "homtht", {226, 136, 187, 0} "hookleftarrow", {226, 134, 169, 0} "hookrightarrow", {226, 134, 170, 0} -"hopf", {240, 157, 149, 153} "Hopf", {226, 132, 141, 0} +"hopf", {240, 157, 149, 153, 0} "horbar", {226, 128, 149, 0} "HorizontalLine", {226, 148, 128, 0} -"hscr", {240, 157, 146, 189} "Hscr", {226, 132, 139, 0} +"hscr", {240, 157, 146, 189, 0} "hslash", {226, 132, 143, 0} "Hstrok", {196, 166, 0} "hstrok", {196, 167, 0} @@ -718,8 +718,8 @@ struct html_ent { "iecy", {208, 181, 0} "iexcl", {194, 161, 0} "iff", {226, 135, 148, 0} -"ifr", {240, 157, 148, 166} "Ifr", {226, 132, 145, 0} +"ifr", {240, 157, 148, 166, 0} "Igrave", {195, 140, 0} "igrave", {195, 172, 0} "ii", {226, 133, 136, 0} @@ -729,6 +729,7 @@ struct html_ent { "iiota", {226, 132, 169, 0} "IJlig", {196, 178, 0} "ijlig", {196, 179, 0} +"Im", {226, 132, 145, 0} "Imacr", {196, 170, 0} "imacr", {196, 171, 0} "image", {226, 132, 145, 0} @@ -736,18 +737,17 @@ struct html_ent { "imagline", {226, 132, 144, 0} "imagpart", {226, 132, 145, 0} "imath", {196, 177, 0} -"Im", {226, 132, 145, 0} "imof", {226, 138, 183, 0} "imped", {198, 181, 0} "Implies", {226, 135, 146, 0} -"incare", {226, 132, 133, 0} "in", {226, 136, 136, 0} +"incare", {226, 132, 133, 0} "infin", {226, 136, 158, 0} "infintie", {226, 167, 157, 0} "inodot", {196, 177, 0} -"intcal", {226, 138, 186, 0} "int", {226, 136, 171, 0} "Int", {226, 136, 172, 0} +"intcal", {226, 138, 186, 0} "integers", {226, 132, 164, 0} "Integral", {226, 136, 171, 0} "intercal", {226, 138, 186, 0} @@ -760,14 +760,14 @@ struct html_ent { "iocy", {209, 145, 0} "Iogon", {196, 174, 0} "iogon", {196, 175, 0} -"Iopf", {240, 157, 149, 128} -"iopf", {240, 157, 149, 154} +"Iopf", {240, 157, 149, 128, 0} +"iopf", {240, 157, 149, 154, 0} "Iota", {206, 153, 0} "iota", {206, 185, 0} "iprod", {226, 168, 188, 0} "iquest", {194, 191, 0} -"iscr", {240, 157, 146, 190} "Iscr", {226, 132, 144, 0} +"iscr", {240, 157, 146, 190, 0} "isin", {226, 136, 136, 0} "isindot", {226, 139, 181, 0} "isinE", {226, 139, 185, 0} @@ -785,13 +785,13 @@ struct html_ent { "jcirc", {196, 181, 0} "Jcy", {208, 153, 0} "jcy", {208, 185, 0} -"Jfr", {240, 157, 148, 141} -"jfr", {240, 157, 148, 167} +"Jfr", {240, 157, 148, 141, 0} +"jfr", {240, 157, 148, 167, 0} "jmath", {200, 183, 0} -"Jopf", {240, 157, 149, 129} -"jopf", {240, 157, 149, 155} -"Jscr", {240, 157, 146, 165} -"jscr", {240, 157, 146, 191} +"Jopf", {240, 157, 149, 129, 0} +"jopf", {240, 157, 149, 155, 0} +"Jscr", {240, 157, 146, 165, 0} +"jscr", {240, 157, 146, 191, 0} "Jsercy", {208, 136, 0} "jsercy", {209, 152, 0} "Jukcy", {208, 132, 0} @@ -803,17 +803,17 @@ struct html_ent { "kcedil", {196, 183, 0} "Kcy", {208, 154, 0} "kcy", {208, 186, 0} -"Kfr", {240, 157, 148, 142} -"kfr", {240, 157, 148, 168} +"Kfr", {240, 157, 148, 142, 0} +"kfr", {240, 157, 148, 168, 0} "kgreen", {196, 184, 0} "KHcy", {208, 165, 0} "khcy", {209, 133, 0} "KJcy", {208, 140, 0} "kjcy", {209, 156, 0} -"Kopf", {240, 157, 149, 130} -"kopf", {240, 157, 149, 156} -"Kscr", {240, 157, 146, 166} -"kscr", {240, 157, 147, 128} +"Kopf", {240, 157, 149, 130, 0} +"kopf", {240, 157, 149, 156, 0} +"Kscr", {240, 157, 146, 166, 0} +"kscr", {240, 157, 147, 128, 0} "lAarr", {226, 135, 154, 0} "Lacute", {196, 185, 0} "lacute", {196, 186, 0} @@ -828,22 +828,22 @@ struct html_ent { "lap", {226, 170, 133, 0} "Laplacetrf", {226, 132, 146, 0} "laquo", {194, 171, 0} -"larrb", {226, 135, 164, 0} -"larrbfs", {226, 164, 159, 0} "larr", {226, 134, 144, 0} "Larr", {226, 134, 158, 0} "lArr", {226, 135, 144, 0} +"larrb", {226, 135, 164, 0} +"larrbfs", {226, 164, 159, 0} "larrfs", {226, 164, 157, 0} "larrhk", {226, 134, 169, 0} "larrlp", {226, 134, 171, 0} "larrpl", {226, 164, 185, 0} "larrsim", {226, 165, 179, 0} "larrtl", {226, 134, 162, 0} +"lat", {226, 170, 171, 0} "latail", {226, 164, 153, 0} "lAtail", {226, 164, 155, 0} -"lat", {226, 170, 171, 0} "late", {226, 170, 173, 0} -"lates", {226, 170, 173, 0} +"lates", {226, 170, 173, 239, 184, 128, 0} "lbarr", {226, 164, 140, 0} "lBarr", {226, 164, 142, 0} "lbbrk", {226, 157, 178, 0} @@ -869,52 +869,52 @@ struct html_ent { "le", {226, 137, 164, 0} "lE", {226, 137, 166, 0} "LeftAngleBracket", {226, 159, 168, 0} -"LeftArrowBar", {226, 135, 164, 0} -"leftarrow", {226, 134, 144, 0} "LeftArrow", {226, 134, 144, 0} +"leftarrow", {226, 134, 144, 0} "Leftarrow", {226, 135, 144, 0} +"LeftArrowBar", {226, 135, 164, 0} "LeftArrowRightArrow", {226, 135, 134, 0} "leftarrowtail", {226, 134, 162, 0} "LeftCeiling", {226, 140, 136, 0} "LeftDoubleBracket", {226, 159, 166, 0} "LeftDownTeeVector", {226, 165, 161, 0} -"LeftDownVectorBar", {226, 165, 153, 0} "LeftDownVector", {226, 135, 131, 0} +"LeftDownVectorBar", {226, 165, 153, 0} "LeftFloor", {226, 140, 138, 0} "leftharpoondown", {226, 134, 189, 0} "leftharpoonup", {226, 134, 188, 0} "leftleftarrows", {226, 135, 135, 0} -"leftrightarrow", {226, 134, 148, 0} "LeftRightArrow", {226, 134, 148, 0} +"leftrightarrow", {226, 134, 148, 0} "Leftrightarrow", {226, 135, 148, 0} "leftrightarrows", {226, 135, 134, 0} "leftrightharpoons", {226, 135, 139, 0} "leftrightsquigarrow", {226, 134, 173, 0} "LeftRightVector", {226, 165, 142, 0} -"LeftTeeArrow", {226, 134, 164, 0} "LeftTee", {226, 138, 163, 0} +"LeftTeeArrow", {226, 134, 164, 0} "LeftTeeVector", {226, 165, 154, 0} "leftthreetimes", {226, 139, 139, 0} -"LeftTriangleBar", {226, 167, 143, 0} "LeftTriangle", {226, 138, 178, 0} +"LeftTriangleBar", {226, 167, 143, 0} "LeftTriangleEqual", {226, 138, 180, 0} "LeftUpDownVector", {226, 165, 145, 0} "LeftUpTeeVector", {226, 165, 160, 0} -"LeftUpVectorBar", {226, 165, 152, 0} "LeftUpVector", {226, 134, 191, 0} -"LeftVectorBar", {226, 165, 146, 0} +"LeftUpVectorBar", {226, 165, 152, 0} "LeftVector", {226, 134, 188, 0} -"lEg", {226, 170, 139, 0} +"LeftVectorBar", {226, 165, 146, 0} "leg", {226, 139, 154, 0} +"lEg", {226, 170, 139, 0} "leq", {226, 137, 164, 0} "leqq", {226, 137, 166, 0} "leqslant", {226, 169, 189, 0} -"lescc", {226, 170, 168, 0} "les", {226, 169, 189, 0} +"lescc", {226, 170, 168, 0} "lesdot", {226, 169, 191, 0} "lesdoto", {226, 170, 129, 0} "lesdotor", {226, 170, 131, 0} -"lesg", {226, 139, 154, 0} +"lesg", {226, 139, 154, 239, 184, 128, 0} "lesges", {226, 170, 147, 0} "lessapprox", {226, 170, 133, 0} "lessdot", {226, 139, 150, 0} @@ -930,8 +930,8 @@ struct html_ent { "LessTilde", {226, 137, 178, 0} "lfisht", {226, 165, 188, 0} "lfloor", {226, 140, 138, 0} -"Lfr", {240, 157, 148, 143} -"lfr", {240, 157, 148, 169} +"Lfr", {240, 157, 148, 143, 0} +"lfr", {240, 157, 148, 169, 0} "lg", {226, 137, 182, 0} "lgE", {226, 170, 145, 0} "lHar", {226, 165, 162, 0} @@ -941,42 +941,42 @@ struct html_ent { "lhblk", {226, 150, 132, 0} "LJcy", {208, 137, 0} "ljcy", {209, 153, 0} -"llarr", {226, 135, 135, 0} "ll", {226, 137, 170, 0} "Ll", {226, 139, 152, 0} +"llarr", {226, 135, 135, 0} "llcorner", {226, 140, 158, 0} "Lleftarrow", {226, 135, 154, 0} "llhard", {226, 165, 171, 0} "lltri", {226, 151, 186, 0} "Lmidot", {196, 191, 0} "lmidot", {197, 128, 0} -"lmoustache", {226, 142, 176, 0} "lmoust", {226, 142, 176, 0} +"lmoustache", {226, 142, 176, 0} "lnap", {226, 170, 137, 0} "lnapprox", {226, 170, 137, 0} -"lne", {226, 170, 135, 0} "lnE", {226, 137, 168, 0} +"lne", {226, 170, 135, 0} "lneq", {226, 170, 135, 0} "lneqq", {226, 137, 168, 0} "lnsim", {226, 139, 166, 0} "loang", {226, 159, 172, 0} "loarr", {226, 135, 189, 0} "lobrk", {226, 159, 166, 0} -"longleftarrow", {226, 159, 181, 0} "LongLeftArrow", {226, 159, 181, 0} +"longleftarrow", {226, 159, 181, 0} "Longleftarrow", {226, 159, 184, 0} -"longleftrightarrow", {226, 159, 183, 0} "LongLeftRightArrow", {226, 159, 183, 0} +"longleftrightarrow", {226, 159, 183, 0} "Longleftrightarrow", {226, 159, 186, 0} "longmapsto", {226, 159, 188, 0} -"longrightarrow", {226, 159, 182, 0} "LongRightArrow", {226, 159, 182, 0} +"longrightarrow", {226, 159, 182, 0} "Longrightarrow", {226, 159, 185, 0} "looparrowleft", {226, 134, 171, 0} "looparrowright", {226, 134, 172, 0} "lopar", {226, 166, 133, 0} -"Lopf", {240, 157, 149, 131} -"lopf", {240, 157, 149, 157} +"Lopf", {240, 157, 149, 131, 0} +"lopf", {240, 157, 149, 157, 0} "loplus", {226, 168, 173, 0} "lotimes", {226, 168, 180, 0} "lowast", {226, 136, 151, 0} @@ -995,10 +995,10 @@ struct html_ent { "lrm", {226, 128, 142, 0} "lrtri", {226, 138, 191, 0} "lsaquo", {226, 128, 185, 0} -"lscr", {240, 157, 147, 129} "Lscr", {226, 132, 146, 0} -"lsh", {226, 134, 176, 0} +"lscr", {240, 157, 147, 129, 0} "Lsh", {226, 134, 176, 0} +"lsh", {226, 134, 176, 0} "lsim", {226, 137, 178, 0} "lsime", {226, 170, 141, 0} "lsimg", {226, 170, 143, 0} @@ -1007,11 +1007,11 @@ struct html_ent { "lsquor", {226, 128, 154, 0} "Lstrok", {197, 129, 0} "lstrok", {197, 130, 0} +"Lt", {226, 137, 170, 0} +"LT", {60, 0} +"lt", {60, 0} "ltcc", {226, 170, 166, 0} "ltcir", {226, 169, 185, 0} -"lt", {60, 0} -"LT", {60, 0} -"Lt", {226, 137, 170, 0} "ltdot", {226, 139, 150, 0} "lthree", {226, 139, 139, 0} "ltimes", {226, 139, 137, 0} @@ -1023,14 +1023,14 @@ struct html_ent { "ltrPar", {226, 166, 150, 0} "lurdshar", {226, 165, 138, 0} "luruhar", {226, 165, 166, 0} -"lvertneqq", {226, 137, 168, 0} -"lvnE", {226, 137, 168, 0} +"lvertneqq", {226, 137, 168, 239, 184, 128, 0} +"lvnE", {226, 137, 168, 239, 184, 128, 0} "macr", {194, 175, 0} "male", {226, 153, 130, 0} "malt", {226, 156, 160, 0} "maltese", {226, 156, 160, 0} -"Map", {226, 164, 133, 0} "map", {226, 134, 166, 0} +"Map", {226, 164, 133, 0} "mapsto", {226, 134, 166, 0} "mapstodown", {226, 134, 167, 0} "mapstoleft", {226, 134, 164, 0} @@ -1044,16 +1044,16 @@ struct html_ent { "measuredangle", {226, 136, 161, 0} "MediumSpace", {226, 129, 159, 0} "Mellintrf", {226, 132, 179, 0} -"Mfr", {240, 157, 148, 144} -"mfr", {240, 157, 148, 170} +"Mfr", {240, 157, 148, 144, 0} +"mfr", {240, 157, 148, 170, 0} "mho", {226, 132, 167, 0} "micro", {194, 181, 0} +"mid", {226, 136, 163, 0} "midast", {42, 0} "midcir", {226, 171, 176, 0} -"mid", {226, 136, 163, 0} "middot", {194, 183, 0} -"minusb", {226, 138, 159, 0} "minus", {226, 136, 146, 0} +"minusb", {226, 138, 159, 0} "minusd", {226, 136, 184, 0} "minusdu", {226, 168, 170, 0} "MinusPlus", {226, 136, 147, 0} @@ -1061,11 +1061,11 @@ struct html_ent { "mldr", {226, 128, 166, 0} "mnplus", {226, 136, 147, 0} "models", {226, 138, 167, 0} -"Mopf", {240, 157, 149, 132} -"mopf", {240, 157, 149, 158} +"Mopf", {240, 157, 149, 132, 0} +"mopf", {240, 157, 149, 158, 0} "mp", {226, 136, 147, 0} -"mscr", {240, 157, 147, 130} "Mscr", {226, 132, 179, 0} +"mscr", {240, 157, 147, 130, 0} "mstpos", {226, 136, 190, 0} "Mu", {206, 156, 0} "mu", {206, 188, 0} @@ -1074,61 +1074,61 @@ struct html_ent { "nabla", {226, 136, 135, 0} "Nacute", {197, 131, 0} "nacute", {197, 132, 0} -"nang", {226, 136, 160, 0} +"nang", {226, 136, 160, 226, 131, 146, 0} "nap", {226, 137, 137, 0} -"napE", {226, 169, 176, 0} -"napid", {226, 137, 139, 0} +"napE", {226, 169, 176, 204, 184, 0} +"napid", {226, 137, 139, 204, 184, 0} "napos", {197, 137, 0} "napprox", {226, 137, 137, 0} +"natur", {226, 153, 174, 0} "natural", {226, 153, 174, 0} "naturals", {226, 132, 149, 0} -"natur", {226, 153, 174, 0} "nbsp", {194, 160, 0} -"nbump", {226, 137, 142, 0} -"nbumpe", {226, 137, 143, 0} +"nbump", {226, 137, 142, 204, 184, 0} +"nbumpe", {226, 137, 143, 204, 184, 0} "ncap", {226, 169, 131, 0} "Ncaron", {197, 135, 0} "ncaron", {197, 136, 0} "Ncedil", {197, 133, 0} "ncedil", {197, 134, 0} "ncong", {226, 137, 135, 0} -"ncongdot", {226, 169, 173, 0} +"ncongdot", {226, 169, 173, 204, 184, 0} "ncup", {226, 169, 130, 0} "Ncy", {208, 157, 0} "ncy", {208, 189, 0} "ndash", {226, 128, 147, 0} +"ne", {226, 137, 160, 0} "nearhk", {226, 164, 164, 0} "nearr", {226, 134, 151, 0} "neArr", {226, 135, 151, 0} "nearrow", {226, 134, 151, 0} -"ne", {226, 137, 160, 0} -"nedot", {226, 137, 144, 0} +"nedot", {226, 137, 144, 204, 184, 0} "NegativeMediumSpace", {226, 128, 139, 0} "NegativeThickSpace", {226, 128, 139, 0} "NegativeThinSpace", {226, 128, 139, 0} "NegativeVeryThinSpace", {226, 128, 139, 0} "nequiv", {226, 137, 162, 0} "nesear", {226, 164, 168, 0} -"nesim", {226, 137, 130, 0} +"nesim", {226, 137, 130, 204, 184, 0} "NestedGreaterGreater", {226, 137, 171, 0} "NestedLessLess", {226, 137, 170, 0} "NewLine", {10, 0} "nexist", {226, 136, 132, 0} "nexists", {226, 136, 132, 0} -"Nfr", {240, 157, 148, 145} -"nfr", {240, 157, 148, 171} -"ngE", {226, 137, 167, 0} +"Nfr", {240, 157, 148, 145, 0} +"nfr", {240, 157, 148, 171, 0} +"ngE", {226, 137, 167, 204, 184, 0} "nge", {226, 137, 177, 0} "ngeq", {226, 137, 177, 0} -"ngeqq", {226, 137, 167, 0} -"ngeqslant", {226, 169, 190, 0} -"nges", {226, 169, 190, 0} -"nGg", {226, 139, 153, 0} +"ngeqq", {226, 137, 167, 204, 184, 0} +"ngeqslant", {226, 169, 190, 204, 184, 0} +"nges", {226, 169, 190, 204, 184, 0} +"nGg", {226, 139, 153, 204, 184, 0} "ngsim", {226, 137, 181, 0} -"nGt", {226, 137, 171, 0} +"nGt", {226, 137, 171, 226, 131, 146, 0} "ngt", {226, 137, 175, 0} "ngtr", {226, 137, 175, 0} -"nGtv", {226, 137, 171, 0} +"nGtv", {226, 137, 171, 204, 184, 0} "nharr", {226, 134, 174, 0} "nhArr", {226, 135, 142, 0} "nhpar", {226, 171, 178, 0} @@ -1141,115 +1141,115 @@ struct html_ent { "nlarr", {226, 134, 154, 0} "nlArr", {226, 135, 141, 0} "nldr", {226, 128, 165, 0} -"nlE", {226, 137, 166, 0} +"nlE", {226, 137, 166, 204, 184, 0} "nle", {226, 137, 176, 0} "nleftarrow", {226, 134, 154, 0} "nLeftarrow", {226, 135, 141, 0} "nleftrightarrow", {226, 134, 174, 0} "nLeftrightarrow", {226, 135, 142, 0} "nleq", {226, 137, 176, 0} -"nleqq", {226, 137, 166, 0} -"nleqslant", {226, 169, 189, 0} -"nles", {226, 169, 189, 0} +"nleqq", {226, 137, 166, 204, 184, 0} +"nleqslant", {226, 169, 189, 204, 184, 0} +"nles", {226, 169, 189, 204, 184, 0} "nless", {226, 137, 174, 0} -"nLl", {226, 139, 152, 0} +"nLl", {226, 139, 152, 204, 184, 0} "nlsim", {226, 137, 180, 0} -"nLt", {226, 137, 170, 0} +"nLt", {226, 137, 170, 226, 131, 146, 0} "nlt", {226, 137, 174, 0} "nltri", {226, 139, 170, 0} "nltrie", {226, 139, 172, 0} -"nLtv", {226, 137, 170, 0} +"nLtv", {226, 137, 170, 204, 184, 0} "nmid", {226, 136, 164, 0} "NoBreak", {226, 129, 160, 0} "NonBreakingSpace", {194, 160, 0} -"nopf", {240, 157, 149, 159} "Nopf", {226, 132, 149, 0} -"Not", {226, 171, 172, 0} +"nopf", {240, 157, 149, 159, 0} "not", {194, 172, 0} +"Not", {226, 171, 172, 0} "NotCongruent", {226, 137, 162, 0} "NotCupCap", {226, 137, 173, 0} "NotDoubleVerticalBar", {226, 136, 166, 0} "NotElement", {226, 136, 137, 0} "NotEqual", {226, 137, 160, 0} -"NotEqualTilde", {226, 137, 130, 0} +"NotEqualTilde", {226, 137, 130, 204, 184, 0} "NotExists", {226, 136, 132, 0} "NotGreater", {226, 137, 175, 0} "NotGreaterEqual", {226, 137, 177, 0} -"NotGreaterFullEqual", {226, 137, 167, 0} -"NotGreaterGreater", {226, 137, 171, 0} +"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0} +"NotGreaterGreater", {226, 137, 171, 204, 184, 0} "NotGreaterLess", {226, 137, 185, 0} -"NotGreaterSlantEqual", {226, 169, 190, 0} +"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0} "NotGreaterTilde", {226, 137, 181, 0} -"NotHumpDownHump", {226, 137, 142, 0} -"NotHumpEqual", {226, 137, 143, 0} +"NotHumpDownHump", {226, 137, 142, 204, 184, 0} +"NotHumpEqual", {226, 137, 143, 204, 184, 0} "notin", {226, 136, 137, 0} -"notindot", {226, 139, 181, 0} -"notinE", {226, 139, 185, 0} +"notindot", {226, 139, 181, 204, 184, 0} +"notinE", {226, 139, 185, 204, 184, 0} "notinva", {226, 136, 137, 0} "notinvb", {226, 139, 183, 0} "notinvc", {226, 139, 182, 0} -"NotLeftTriangleBar", {226, 167, 143, 0} "NotLeftTriangle", {226, 139, 170, 0} +"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0} "NotLeftTriangleEqual", {226, 139, 172, 0} "NotLess", {226, 137, 174, 0} "NotLessEqual", {226, 137, 176, 0} "NotLessGreater", {226, 137, 184, 0} -"NotLessLess", {226, 137, 170, 0} -"NotLessSlantEqual", {226, 169, 189, 0} +"NotLessLess", {226, 137, 170, 204, 184, 0} +"NotLessSlantEqual", {226, 169, 189, 204, 184, 0} "NotLessTilde", {226, 137, 180, 0} -"NotNestedGreaterGreater", {226, 170, 162, 0} -"NotNestedLessLess", {226, 170, 161, 0} +"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0} +"NotNestedLessLess", {226, 170, 161, 204, 184, 0} "notni", {226, 136, 140, 0} "notniva", {226, 136, 140, 0} "notnivb", {226, 139, 190, 0} "notnivc", {226, 139, 189, 0} "NotPrecedes", {226, 138, 128, 0} -"NotPrecedesEqual", {226, 170, 175, 0} +"NotPrecedesEqual", {226, 170, 175, 204, 184, 0} "NotPrecedesSlantEqual", {226, 139, 160, 0} "NotReverseElement", {226, 136, 140, 0} -"NotRightTriangleBar", {226, 167, 144, 0} "NotRightTriangle", {226, 139, 171, 0} +"NotRightTriangleBar", {226, 167, 144, 204, 184, 0} "NotRightTriangleEqual", {226, 139, 173, 0} -"NotSquareSubset", {226, 138, 143, 0} +"NotSquareSubset", {226, 138, 143, 204, 184, 0} "NotSquareSubsetEqual", {226, 139, 162, 0} -"NotSquareSuperset", {226, 138, 144, 0} +"NotSquareSuperset", {226, 138, 144, 204, 184, 0} "NotSquareSupersetEqual", {226, 139, 163, 0} -"NotSubset", {226, 138, 130, 0} +"NotSubset", {226, 138, 130, 226, 131, 146, 0} "NotSubsetEqual", {226, 138, 136, 0} "NotSucceeds", {226, 138, 129, 0} -"NotSucceedsEqual", {226, 170, 176, 0} +"NotSucceedsEqual", {226, 170, 176, 204, 184, 0} "NotSucceedsSlantEqual", {226, 139, 161, 0} -"NotSucceedsTilde", {226, 137, 191, 0} -"NotSuperset", {226, 138, 131, 0} +"NotSucceedsTilde", {226, 137, 191, 204, 184, 0} +"NotSuperset", {226, 138, 131, 226, 131, 146, 0} "NotSupersetEqual", {226, 138, 137, 0} "NotTilde", {226, 137, 129, 0} "NotTildeEqual", {226, 137, 132, 0} "NotTildeFullEqual", {226, 137, 135, 0} "NotTildeTilde", {226, 137, 137, 0} "NotVerticalBar", {226, 136, 164, 0} -"nparallel", {226, 136, 166, 0} "npar", {226, 136, 166, 0} -"nparsl", {226, 171, 189, 0} -"npart", {226, 136, 130, 0} +"nparallel", {226, 136, 166, 0} +"nparsl", {226, 171, 189, 226, 131, 165, 0} +"npart", {226, 136, 130, 204, 184, 0} "npolint", {226, 168, 148, 0} "npr", {226, 138, 128, 0} "nprcue", {226, 139, 160, 0} +"npre", {226, 170, 175, 204, 184, 0} "nprec", {226, 138, 128, 0} -"npreceq", {226, 170, 175, 0} -"npre", {226, 170, 175, 0} -"nrarrc", {226, 164, 179, 0} +"npreceq", {226, 170, 175, 204, 184, 0} "nrarr", {226, 134, 155, 0} "nrArr", {226, 135, 143, 0} -"nrarrw", {226, 134, 157, 0} +"nrarrc", {226, 164, 179, 204, 184, 0} +"nrarrw", {226, 134, 157, 204, 184, 0} "nrightarrow", {226, 134, 155, 0} "nRightarrow", {226, 135, 143, 0} "nrtri", {226, 139, 171, 0} "nrtrie", {226, 139, 173, 0} "nsc", {226, 138, 129, 0} "nsccue", {226, 139, 161, 0} -"nsce", {226, 170, 176, 0} -"Nscr", {240, 157, 146, 169} -"nscr", {240, 157, 147, 131} +"nsce", {226, 170, 176, 204, 184, 0} +"Nscr", {240, 157, 146, 169, 0} +"nscr", {240, 157, 147, 131, 0} "nshortmid", {226, 136, 164, 0} "nshortparallel", {226, 136, 166, 0} "nsim", {226, 137, 129, 0} @@ -1260,19 +1260,19 @@ struct html_ent { "nsqsube", {226, 139, 162, 0} "nsqsupe", {226, 139, 163, 0} "nsub", {226, 138, 132, 0} -"nsubE", {226, 171, 133, 0} "nsube", {226, 138, 136, 0} -"nsubset", {226, 138, 130, 0} +"nsubE", {226, 171, 133, 204, 184, 0} +"nsubset", {226, 138, 130, 226, 131, 146, 0} "nsubseteq", {226, 138, 136, 0} -"nsubseteqq", {226, 171, 133, 0} +"nsubseteqq", {226, 171, 133, 204, 184, 0} "nsucc", {226, 138, 129, 0} -"nsucceq", {226, 170, 176, 0} +"nsucceq", {226, 170, 176, 204, 184, 0} "nsup", {226, 138, 133, 0} -"nsupE", {226, 171, 134, 0} "nsupe", {226, 138, 137, 0} -"nsupset", {226, 138, 131, 0} +"nsupE", {226, 171, 134, 204, 184, 0} +"nsupset", {226, 138, 131, 226, 131, 146, 0} "nsupseteq", {226, 138, 137, 0} -"nsupseteqq", {226, 171, 134, 0} +"nsupseteqq", {226, 171, 134, 204, 184, 0} "ntgl", {226, 137, 185, 0} "Ntilde", {195, 145, 0} "ntilde", {195, 177, 0} @@ -1286,22 +1286,22 @@ struct html_ent { "num", {35, 0} "numero", {226, 132, 150, 0} "numsp", {226, 128, 135, 0} -"nvap", {226, 137, 141, 0} +"nvap", {226, 137, 141, 226, 131, 146, 0} "nvdash", {226, 138, 172, 0} "nvDash", {226, 138, 173, 0} "nVdash", {226, 138, 174, 0} "nVDash", {226, 138, 175, 0} -"nvge", {226, 137, 165, 0} -"nvgt", {62, 0} +"nvge", {226, 137, 165, 226, 131, 146, 0} +"nvgt", {62, 226, 131, 146, 0} "nvHarr", {226, 164, 132, 0} "nvinfin", {226, 167, 158, 0} "nvlArr", {226, 164, 130, 0} -"nvle", {226, 137, 164, 0} -"nvlt", {60, 0} -"nvltrie", {226, 138, 180, 0} +"nvle", {226, 137, 164, 226, 131, 146, 0} +"nvlt", {60, 226, 131, 146, 0} +"nvltrie", {226, 138, 180, 226, 131, 146, 0} "nvrArr", {226, 164, 131, 0} -"nvrtrie", {226, 138, 181, 0} -"nvsim", {226, 136, 188, 0} +"nvrtrie", {226, 138, 181, 226, 131, 146, 0} +"nvsim", {226, 136, 188, 226, 131, 146, 0} "nwarhk", {226, 164, 163, 0} "nwarr", {226, 134, 150, 0} "nwArr", {226, 135, 150, 0} @@ -1310,9 +1310,9 @@ struct html_ent { "Oacute", {195, 147, 0} "oacute", {195, 179, 0} "oast", {226, 138, 155, 0} +"ocir", {226, 138, 154, 0} "Ocirc", {195, 148, 0} "ocirc", {195, 180, 0} -"ocir", {226, 138, 154, 0} "Ocy", {208, 158, 0} "ocy", {208, 190, 0} "odash", {226, 138, 157, 0} @@ -1324,8 +1324,8 @@ struct html_ent { "OElig", {197, 146, 0} "oelig", {197, 147, 0} "ofcir", {226, 166, 191, 0} -"Ofr", {240, 157, 148, 146} -"ofr", {240, 157, 148, 172} +"Ofr", {240, 157, 148, 146, 0} +"ofr", {240, 157, 148, 172, 0} "ogon", {203, 155, 0} "Ograve", {195, 146, 0} "ograve", {195, 178, 0} @@ -1346,16 +1346,16 @@ struct html_ent { "omicron", {206, 191, 0} "omid", {226, 166, 182, 0} "ominus", {226, 138, 150, 0} -"Oopf", {240, 157, 149, 134} -"oopf", {240, 157, 149, 160} +"Oopf", {240, 157, 149, 134, 0} +"oopf", {240, 157, 149, 160, 0} "opar", {226, 166, 183, 0} "OpenCurlyDoubleQuote", {226, 128, 156, 0} "OpenCurlyQuote", {226, 128, 152, 0} "operp", {226, 166, 185, 0} "oplus", {226, 138, 149, 0} -"orarr", {226, 134, 187, 0} -"Or", {226, 169, 148, 0} "or", {226, 136, 168, 0} +"Or", {226, 169, 148, 0} +"orarr", {226, 134, 187, 0} "ord", {226, 169, 157, 0} "order", {226, 132, 180, 0} "orderof", {226, 132, 180, 0} @@ -1366,16 +1366,16 @@ struct html_ent { "orslope", {226, 169, 151, 0} "orv", {226, 169, 155, 0} "oS", {226, 147, 136, 0} -"Oscr", {240, 157, 146, 170} "oscr", {226, 132, 180, 0} +"Oscr", {240, 157, 146, 170, 0} "Oslash", {195, 152, 0} "oslash", {195, 184, 0} "osol", {226, 138, 152, 0} "Otilde", {195, 149, 0} "otilde", {195, 181, 0} -"otimesas", {226, 168, 182, 0} -"Otimes", {226, 168, 183, 0} "otimes", {226, 138, 151, 0} +"Otimes", {226, 168, 183, 0} +"otimesas", {226, 168, 182, 0} "Ouml", {195, 150, 0} "ouml", {195, 182, 0} "ovbar", {226, 140, 189, 0} @@ -1383,9 +1383,9 @@ struct html_ent { "OverBrace", {226, 143, 158, 0} "OverBracket", {226, 142, 180, 0} "OverParenthesis", {226, 143, 156, 0} +"par", {226, 136, 165, 0} "para", {194, 182, 0} "parallel", {226, 136, 165, 0} -"par", {226, 136, 165, 0} "parsim", {226, 171, 179, 0} "parsl", {226, 171, 189, 0} "part", {226, 136, 130, 0} @@ -1397,8 +1397,8 @@ struct html_ent { "permil", {226, 128, 176, 0} "perp", {226, 138, 165, 0} "pertenk", {226, 128, 177, 0} -"Pfr", {240, 157, 148, 147} -"pfr", {240, 157, 148, 173} +"Pfr", {240, 157, 148, 147, 0} +"pfr", {240, 157, 148, 173, 0} "Phi", {206, 166, 0} "phi", {207, 134, 0} "phiv", {207, 149, 0} @@ -1411,10 +1411,10 @@ struct html_ent { "planck", {226, 132, 143, 0} "planckh", {226, 132, 142, 0} "plankv", {226, 132, 143, 0} +"plus", {43, 0} "plusacir", {226, 168, 163, 0} "plusb", {226, 138, 158, 0} "pluscir", {226, 168, 162, 0} -"plus", {43, 0} "plusdo", {226, 136, 148, 0} "plusdu", {226, 168, 165, 0} "pluse", {226, 169, 178, 0} @@ -1425,15 +1425,17 @@ struct html_ent { "pm", {194, 177, 0} "Poincareplane", {226, 132, 140, 0} "pointint", {226, 168, 149, 0} -"popf", {240, 157, 149, 161} "Popf", {226, 132, 153, 0} +"popf", {240, 157, 149, 161, 0} "pound", {194, 163, 0} -"prap", {226, 170, 183, 0} -"Pr", {226, 170, 187, 0} "pr", {226, 137, 186, 0} +"Pr", {226, 170, 187, 0} +"prap", {226, 170, 183, 0} "prcue", {226, 137, 188, 0} -"precapprox", {226, 170, 183, 0} +"pre", {226, 170, 175, 0} +"prE", {226, 170, 179, 0} "prec", {226, 137, 186, 0} +"precapprox", {226, 170, 183, 0} "preccurlyeq", {226, 137, 188, 0} "Precedes", {226, 137, 186, 0} "PrecedesEqual", {226, 170, 175, 0} @@ -1443,8 +1445,6 @@ struct html_ent { "precnapprox", {226, 170, 185, 0} "precneqq", {226, 170, 181, 0} "precnsim", {226, 139, 168, 0} -"pre", {226, 170, 175, 0} -"prE", {226, 170, 179, 0} "precsim", {226, 137, 190, 0} "prime", {226, 128, 178, 0} "Prime", {226, 128, 179, 0} @@ -1458,32 +1458,32 @@ struct html_ent { "profline", {226, 140, 146, 0} "profsurf", {226, 140, 147, 0} "prop", {226, 136, 157, 0} -"Proportional", {226, 136, 157, 0} "Proportion", {226, 136, 183, 0} +"Proportional", {226, 136, 157, 0} "propto", {226, 136, 157, 0} "prsim", {226, 137, 190, 0} "prurel", {226, 138, 176, 0} -"Pscr", {240, 157, 146, 171} -"pscr", {240, 157, 147, 133} +"Pscr", {240, 157, 146, 171, 0} +"pscr", {240, 157, 147, 133, 0} "Psi", {206, 168, 0} "psi", {207, 136, 0} "puncsp", {226, 128, 136, 0} -"Qfr", {240, 157, 148, 148} -"qfr", {240, 157, 148, 174} +"Qfr", {240, 157, 148, 148, 0} +"qfr", {240, 157, 148, 174, 0} "qint", {226, 168, 140, 0} -"qopf", {240, 157, 149, 162} "Qopf", {226, 132, 154, 0} +"qopf", {240, 157, 149, 162, 0} "qprime", {226, 129, 151, 0} -"Qscr", {240, 157, 146, 172} -"qscr", {240, 157, 147, 134} +"Qscr", {240, 157, 146, 172, 0} +"qscr", {240, 157, 147, 134, 0} "quaternions", {226, 132, 141, 0} "quatint", {226, 168, 150, 0} "quest", {63, 0} "questeq", {226, 137, 159, 0} -"quot", {34, 0} "QUOT", {34, 0} +"quot", {34, 0} "rAarr", {226, 135, 155, 0} -"race", {226, 136, 189, 0} +"race", {226, 136, 189, 204, 177, 0} "Racute", {197, 148, 0} "racute", {197, 149, 0} "radic", {226, 136, 154, 0} @@ -1494,20 +1494,20 @@ struct html_ent { "range", {226, 166, 165, 0} "rangle", {226, 159, 169, 0} "raquo", {194, 187, 0} +"rarr", {226, 134, 146, 0} +"Rarr", {226, 134, 160, 0} +"rArr", {226, 135, 146, 0} "rarrap", {226, 165, 181, 0} "rarrb", {226, 135, 165, 0} "rarrbfs", {226, 164, 160, 0} "rarrc", {226, 164, 179, 0} -"rarr", {226, 134, 146, 0} -"Rarr", {226, 134, 160, 0} -"rArr", {226, 135, 146, 0} "rarrfs", {226, 164, 158, 0} "rarrhk", {226, 134, 170, 0} "rarrlp", {226, 134, 172, 0} "rarrpl", {226, 165, 133, 0} "rarrsim", {226, 165, 180, 0} -"Rarrtl", {226, 164, 150, 0} "rarrtl", {226, 134, 163, 0} +"Rarrtl", {226, 164, 150, 0} "rarrw", {226, 134, 157, 0} "ratail", {226, 164, 154, 0} "rAtail", {226, 164, 156, 0} @@ -1535,21 +1535,21 @@ struct html_ent { "rdquo", {226, 128, 157, 0} "rdquor", {226, 128, 157, 0} "rdsh", {226, 134, 179, 0} +"Re", {226, 132, 156, 0} "real", {226, 132, 156, 0} "realine", {226, 132, 155, 0} "realpart", {226, 132, 156, 0} "reals", {226, 132, 157, 0} -"Re", {226, 132, 156, 0} "rect", {226, 150, 173, 0} -"reg", {194, 174, 0} "REG", {194, 174, 0} +"reg", {194, 174, 0} "ReverseElement", {226, 136, 139, 0} "ReverseEquilibrium", {226, 135, 139, 0} "ReverseUpEquilibrium", {226, 165, 175, 0} "rfisht", {226, 165, 189, 0} "rfloor", {226, 140, 139, 0} -"rfr", {240, 157, 148, 175} "Rfr", {226, 132, 156, 0} +"rfr", {240, 157, 148, 175, 0} "rHar", {226, 165, 164, 0} "rhard", {226, 135, 129, 0} "rharu", {226, 135, 128, 0} @@ -1558,17 +1558,17 @@ struct html_ent { "rho", {207, 129, 0} "rhov", {207, 177, 0} "RightAngleBracket", {226, 159, 169, 0} -"RightArrowBar", {226, 135, 165, 0} -"rightarrow", {226, 134, 146, 0} "RightArrow", {226, 134, 146, 0} +"rightarrow", {226, 134, 146, 0} "Rightarrow", {226, 135, 146, 0} +"RightArrowBar", {226, 135, 165, 0} "RightArrowLeftArrow", {226, 135, 132, 0} "rightarrowtail", {226, 134, 163, 0} "RightCeiling", {226, 140, 137, 0} "RightDoubleBracket", {226, 159, 167, 0} "RightDownTeeVector", {226, 165, 157, 0} -"RightDownVectorBar", {226, 165, 149, 0} "RightDownVector", {226, 135, 130, 0} +"RightDownVectorBar", {226, 165, 149, 0} "RightFloor", {226, 140, 139, 0} "rightharpoondown", {226, 135, 129, 0} "rightharpoonup", {226, 135, 128, 0} @@ -1576,33 +1576,33 @@ struct html_ent { "rightleftharpoons", {226, 135, 140, 0} "rightrightarrows", {226, 135, 137, 0} "rightsquigarrow", {226, 134, 157, 0} -"RightTeeArrow", {226, 134, 166, 0} "RightTee", {226, 138, 162, 0} +"RightTeeArrow", {226, 134, 166, 0} "RightTeeVector", {226, 165, 155, 0} "rightthreetimes", {226, 139, 140, 0} -"RightTriangleBar", {226, 167, 144, 0} "RightTriangle", {226, 138, 179, 0} +"RightTriangleBar", {226, 167, 144, 0} "RightTriangleEqual", {226, 138, 181, 0} "RightUpDownVector", {226, 165, 143, 0} "RightUpTeeVector", {226, 165, 156, 0} -"RightUpVectorBar", {226, 165, 148, 0} "RightUpVector", {226, 134, 190, 0} -"RightVectorBar", {226, 165, 147, 0} +"RightUpVectorBar", {226, 165, 148, 0} "RightVector", {226, 135, 128, 0} +"RightVectorBar", {226, 165, 147, 0} "ring", {203, 154, 0} "risingdotseq", {226, 137, 147, 0} "rlarr", {226, 135, 132, 0} "rlhar", {226, 135, 140, 0} "rlm", {226, 128, 143, 0} -"rmoustache", {226, 142, 177, 0} "rmoust", {226, 142, 177, 0} +"rmoustache", {226, 142, 177, 0} "rnmid", {226, 171, 174, 0} "roang", {226, 159, 173, 0} "roarr", {226, 135, 190, 0} "robrk", {226, 159, 167, 0} "ropar", {226, 166, 134, 0} -"ropf", {240, 157, 149, 163} "Ropf", {226, 132, 157, 0} +"ropf", {240, 157, 149, 163, 0} "roplus", {226, 168, 174, 0} "rotimes", {226, 168, 181, 0} "RoundImplies", {226, 165, 176, 0} @@ -1612,10 +1612,10 @@ struct html_ent { "rrarr", {226, 135, 137, 0} "Rrightarrow", {226, 135, 155, 0} "rsaquo", {226, 128, 186, 0} -"rscr", {240, 157, 147, 135} "Rscr", {226, 132, 155, 0} -"rsh", {226, 134, 177, 0} +"rscr", {240, 157, 147, 135, 0} "Rsh", {226, 134, 177, 0} +"rsh", {226, 134, 177, 0} "rsqb", {93, 0} "rsquo", {226, 128, 153, 0} "rsquor", {226, 128, 153, 0} @@ -1631,11 +1631,11 @@ struct html_ent { "Sacute", {197, 154, 0} "sacute", {197, 155, 0} "sbquo", {226, 128, 154, 0} +"sc", {226, 137, 187, 0} +"Sc", {226, 170, 188, 0} "scap", {226, 170, 184, 0} "Scaron", {197, 160, 0} "scaron", {197, 161, 0} -"Sc", {226, 170, 188, 0} -"sc", {226, 137, 187, 0} "sccue", {226, 137, 189, 0} "sce", {226, 170, 176, 0} "scE", {226, 170, 180, 0} @@ -1650,8 +1650,8 @@ struct html_ent { "scsim", {226, 137, 191, 0} "Scy", {208, 161, 0} "scy", {209, 129, 0} -"sdotb", {226, 138, 161, 0} "sdot", {226, 139, 133, 0} +"sdotb", {226, 138, 161, 0} "sdote", {226, 169, 166, 0} "searhk", {226, 164, 165, 0} "searr", {226, 134, 152, 0} @@ -1663,8 +1663,8 @@ struct html_ent { "setminus", {226, 136, 150, 0} "setmn", {226, 136, 150, 0} "sext", {226, 156, 182, 0} -"Sfr", {240, 157, 148, 150} -"sfr", {240, 157, 148, 176} +"Sfr", {240, 157, 148, 150, 0} +"sfr", {240, 157, 148, 176, 0} "sfrown", {226, 140, 162, 0} "sharp", {226, 153, 175, 0} "SHCHcy", {208, 169, 0} @@ -1702,21 +1702,21 @@ struct html_ent { "smile", {226, 140, 163, 0} "smt", {226, 170, 170, 0} "smte", {226, 170, 172, 0} -"smtes", {226, 170, 172, 0} +"smtes", {226, 170, 172, 239, 184, 128, 0} "SOFTcy", {208, 172, 0} "softcy", {209, 140, 0} -"solbar", {226, 140, 191, 0} -"solb", {226, 167, 132, 0} "sol", {47, 0} -"Sopf", {240, 157, 149, 138} -"sopf", {240, 157, 149, 164} +"solb", {226, 167, 132, 0} +"solbar", {226, 140, 191, 0} +"Sopf", {240, 157, 149, 138, 0} +"sopf", {240, 157, 149, 164, 0} "spades", {226, 153, 160, 0} "spadesuit", {226, 153, 160, 0} "spar", {226, 136, 165, 0} "sqcap", {226, 138, 147, 0} -"sqcaps", {226, 138, 147, 0} +"sqcaps", {226, 138, 147, 239, 184, 128, 0} "sqcup", {226, 138, 148, 0} -"sqcups", {226, 138, 148, 0} +"sqcups", {226, 138, 148, 239, 184, 128, 0} "Sqrt", {226, 136, 154, 0} "sqsub", {226, 138, 143, 0} "sqsube", {226, 138, 145, 0} @@ -1726,8 +1726,9 @@ struct html_ent { "sqsupe", {226, 138, 146, 0} "sqsupset", {226, 138, 144, 0} "sqsupseteq", {226, 138, 146, 0} -"square", {226, 150, 161, 0} +"squ", {226, 150, 161, 0} "Square", {226, 150, 161, 0} +"square", {226, 150, 161, 0} "SquareIntersection", {226, 138, 147, 0} "SquareSubset", {226, 138, 143, 0} "SquareSubsetEqual", {226, 138, 145, 0} @@ -1735,11 +1736,10 @@ struct html_ent { "SquareSupersetEqual", {226, 138, 146, 0} "SquareUnion", {226, 138, 148, 0} "squarf", {226, 150, 170, 0} -"squ", {226, 150, 161, 0} "squf", {226, 150, 170, 0} "srarr", {226, 134, 146, 0} -"Sscr", {240, 157, 146, 174} -"sscr", {240, 157, 147, 136} +"Sscr", {240, 157, 146, 174, 0} +"sscr", {240, 157, 147, 136, 0} "ssetmn", {226, 136, 150, 0} "ssmile", {226, 140, 163, 0} "sstarf", {226, 139, 134, 0} @@ -1752,12 +1752,12 @@ struct html_ent { "sub", {226, 138, 130, 0} "Sub", {226, 139, 144, 0} "subdot", {226, 170, 189, 0} -"subE", {226, 171, 133, 0} "sube", {226, 138, 134, 0} +"subE", {226, 171, 133, 0} "subedot", {226, 171, 131, 0} "submult", {226, 171, 129, 0} -"subnE", {226, 171, 139, 0} "subne", {226, 138, 138, 0} +"subnE", {226, 171, 139, 0} "subplus", {226, 170, 191, 0} "subrarr", {226, 165, 185, 0} "subset", {226, 138, 130, 0} @@ -1770,8 +1770,8 @@ struct html_ent { "subsim", {226, 171, 135, 0} "subsub", {226, 171, 149, 0} "subsup", {226, 171, 147, 0} -"succapprox", {226, 170, 184, 0} "succ", {226, 137, 187, 0} +"succapprox", {226, 170, 184, 0} "succcurlyeq", {226, 137, 189, 0} "Succeeds", {226, 137, 187, 0} "SucceedsEqual", {226, 170, 176, 0} @@ -1783,18 +1783,18 @@ struct html_ent { "succnsim", {226, 139, 169, 0} "succsim", {226, 137, 191, 0} "SuchThat", {226, 136, 139, 0} -"sum", {226, 136, 145, 0} "Sum", {226, 136, 145, 0} +"sum", {226, 136, 145, 0} "sung", {226, 153, 170, 0} +"sup", {226, 138, 131, 0} +"Sup", {226, 139, 145, 0} "sup1", {194, 185, 0} "sup2", {194, 178, 0} "sup3", {194, 179, 0} -"sup", {226, 138, 131, 0} -"Sup", {226, 139, 145, 0} "supdot", {226, 170, 190, 0} "supdsub", {226, 171, 152, 0} -"supE", {226, 171, 134, 0} "supe", {226, 138, 135, 0} +"supE", {226, 171, 134, 0} "supedot", {226, 171, 132, 0} "Superset", {226, 138, 131, 0} "SupersetEqual", {226, 138, 135, 0} @@ -1802,8 +1802,8 @@ struct html_ent { "suphsub", {226, 171, 151, 0} "suplarr", {226, 165, 187, 0} "supmult", {226, 171, 130, 0} -"supnE", {226, 171, 140, 0} "supne", {226, 138, 139, 0} +"supnE", {226, 171, 140, 0} "supplus", {226, 171, 128, 0} "supset", {226, 138, 131, 0} "Supset", {226, 139, 145, 0} @@ -1833,20 +1833,20 @@ struct html_ent { "tcy", {209, 130, 0} "tdot", {226, 131, 155, 0} "telrec", {226, 140, 149, 0} -"Tfr", {240, 157, 148, 151} -"tfr", {240, 157, 148, 177} +"Tfr", {240, 157, 148, 151, 0} +"tfr", {240, 157, 148, 177, 0} "there4", {226, 136, 180, 0} -"therefore", {226, 136, 180, 0} "Therefore", {226, 136, 180, 0} +"therefore", {226, 136, 180, 0} "Theta", {206, 152, 0} "theta", {206, 184, 0} "thetasym", {207, 145, 0} "thetav", {207, 145, 0} "thickapprox", {226, 137, 136, 0} "thicksim", {226, 136, 188, 0} -"ThickSpace", {226, 129, 159, 0} -"ThinSpace", {226, 128, 137, 0} +"ThickSpace", {226, 129, 159, 226, 128, 138, 0} "thinsp", {226, 128, 137, 0} +"ThinSpace", {226, 128, 137, 0} "thkap", {226, 137, 136, 0} "thksim", {226, 136, 188, 0} "THORN", {195, 158, 0} @@ -1856,22 +1856,22 @@ struct html_ent { "TildeEqual", {226, 137, 131, 0} "TildeFullEqual", {226, 137, 133, 0} "TildeTilde", {226, 137, 136, 0} -"timesbar", {226, 168, 177, 0} -"timesb", {226, 138, 160, 0} "times", {195, 151, 0} +"timesb", {226, 138, 160, 0} +"timesbar", {226, 168, 177, 0} "timesd", {226, 168, 176, 0} "tint", {226, 136, 173, 0} "toea", {226, 164, 168, 0} +"top", {226, 138, 164, 0} "topbot", {226, 140, 182, 0} "topcir", {226, 171, 177, 0} -"top", {226, 138, 164, 0} -"Topf", {240, 157, 149, 139} -"topf", {240, 157, 149, 165} +"Topf", {240, 157, 149, 139, 0} +"topf", {240, 157, 149, 165, 0} "topfork", {226, 171, 154, 0} "tosa", {226, 164, 169, 0} "tprime", {226, 128, 180, 0} -"trade", {226, 132, 162, 0} "TRADE", {226, 132, 162, 0} +"trade", {226, 132, 162, 0} "triangle", {226, 150, 181, 0} "triangledown", {226, 150, 191, 0} "triangleleft", {226, 151, 131, 0} @@ -1887,8 +1887,8 @@ struct html_ent { "trisb", {226, 167, 141, 0} "tritime", {226, 168, 187, 0} "trpezium", {226, 143, 162, 0} -"Tscr", {240, 157, 146, 175} -"tscr", {240, 157, 147, 137} +"Tscr", {240, 157, 146, 175, 0} +"tscr", {240, 157, 147, 137, 0} "TScy", {208, 166, 0} "tscy", {209, 134, 0} "TSHcy", {208, 139, 0} @@ -1917,8 +1917,8 @@ struct html_ent { "udblac", {197, 177, 0} "udhar", {226, 165, 174, 0} "ufisht", {226, 165, 190, 0} -"Ufr", {240, 157, 148, 152} -"ufr", {240, 157, 148, 178} +"Ufr", {240, 157, 148, 152, 0} +"ufr", {240, 157, 148, 178, 0} "Ugrave", {195, 153, 0} "ugrave", {195, 185, 0} "uHar", {226, 165, 163, 0} @@ -1940,15 +1940,15 @@ struct html_ent { "UnionPlus", {226, 138, 142, 0} "Uogon", {197, 178, 0} "uogon", {197, 179, 0} -"Uopf", {240, 157, 149, 140} -"uopf", {240, 157, 149, 166} -"UpArrowBar", {226, 164, 146, 0} -"uparrow", {226, 134, 145, 0} +"Uopf", {240, 157, 149, 140, 0} +"uopf", {240, 157, 149, 166, 0} "UpArrow", {226, 134, 145, 0} +"uparrow", {226, 134, 145, 0} "Uparrow", {226, 135, 145, 0} +"UpArrowBar", {226, 164, 146, 0} "UpArrowDownArrow", {226, 135, 133, 0} -"updownarrow", {226, 134, 149, 0} "UpDownArrow", {226, 134, 149, 0} +"updownarrow", {226, 134, 149, 0} "Updownarrow", {226, 135, 149, 0} "UpEquilibrium", {226, 165, 174, 0} "upharpoonleft", {226, 134, 191, 0} @@ -1961,8 +1961,8 @@ struct html_ent { "upsih", {207, 146, 0} "Upsilon", {206, 165, 0} "upsilon", {207, 133, 0} -"UpTeeArrow", {226, 134, 165, 0} "UpTee", {226, 138, 165, 0} +"UpTeeArrow", {226, 134, 165, 0} "upuparrows", {226, 135, 136, 0} "urcorn", {226, 140, 157, 0} "urcorner", {226, 140, 157, 0} @@ -1970,8 +1970,8 @@ struct html_ent { "Uring", {197, 174, 0} "uring", {197, 175, 0} "urtri", {226, 151, 185, 0} -"Uscr", {240, 157, 146, 176} -"uscr", {240, 157, 147, 138} +"Uscr", {240, 157, 146, 176, 0} +"uscr", {240, 157, 147, 138, 0} "utdot", {226, 139, 176, 0} "Utilde", {197, 168, 0} "utilde", {197, 169, 0} @@ -1992,10 +1992,10 @@ struct html_ent { "vArr", {226, 135, 149, 0} "varrho", {207, 177, 0} "varsigma", {207, 130, 0} -"varsubsetneq", {226, 138, 138, 0} -"varsubsetneqq", {226, 171, 139, 0} -"varsupsetneq", {226, 138, 139, 0} -"varsupsetneqq", {226, 171, 140, 0} +"varsubsetneq", {226, 138, 138, 239, 184, 128, 0} +"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0} +"varsupsetneq", {226, 138, 139, 239, 184, 128, 0} +"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0} "vartheta", {207, 145, 0} "vartriangleleft", {226, 138, 178, 0} "vartriangleright", {226, 138, 179, 0} @@ -2009,9 +2009,9 @@ struct html_ent { "Vdash", {226, 138, 169, 0} "VDash", {226, 138, 171, 0} "Vdashl", {226, 171, 166, 0} -"veebar", {226, 138, 187, 0} "vee", {226, 136, 168, 0} "Vee", {226, 139, 129, 0} +"veebar", {226, 138, 187, 0} "veeeq", {226, 137, 154, 0} "vellip", {226, 139, 174, 0} "verbar", {124, 0} @@ -2023,21 +2023,21 @@ struct html_ent { "VerticalSeparator", {226, 157, 152, 0} "VerticalTilde", {226, 137, 128, 0} "VeryThinSpace", {226, 128, 138, 0} -"Vfr", {240, 157, 148, 153} -"vfr", {240, 157, 148, 179} +"Vfr", {240, 157, 148, 153, 0} +"vfr", {240, 157, 148, 179, 0} "vltri", {226, 138, 178, 0} -"vnsub", {226, 138, 130, 0} -"vnsup", {226, 138, 131, 0} -"Vopf", {240, 157, 149, 141} -"vopf", {240, 157, 149, 167} +"vnsub", {226, 138, 130, 226, 131, 146, 0} +"vnsup", {226, 138, 131, 226, 131, 146, 0} +"Vopf", {240, 157, 149, 141, 0} +"vopf", {240, 157, 149, 167, 0} "vprop", {226, 136, 157, 0} "vrtri", {226, 138, 179, 0} -"Vscr", {240, 157, 146, 177} -"vscr", {240, 157, 147, 139} -"vsubnE", {226, 171, 139, 0} -"vsubne", {226, 138, 138, 0} -"vsupnE", {226, 171, 140, 0} -"vsupne", {226, 138, 139, 0} +"Vscr", {240, 157, 146, 177, 0} +"vscr", {240, 157, 147, 139, 0} +"vsubne", {226, 138, 138, 239, 184, 128, 0} +"vsubnE", {226, 171, 139, 239, 184, 128, 0} +"vsupne", {226, 138, 139, 239, 184, 128, 0} +"vsupnE", {226, 171, 140, 239, 184, 128, 0} "Vvdash", {226, 138, 170, 0} "vzigzag", {226, 166, 154, 0} "Wcirc", {197, 180, 0} @@ -2047,21 +2047,21 @@ struct html_ent { "Wedge", {226, 139, 128, 0} "wedgeq", {226, 137, 153, 0} "weierp", {226, 132, 152, 0} -"Wfr", {240, 157, 148, 154} -"wfr", {240, 157, 148, 180} -"Wopf", {240, 157, 149, 142} -"wopf", {240, 157, 149, 168} +"Wfr", {240, 157, 148, 154, 0} +"wfr", {240, 157, 148, 180, 0} +"Wopf", {240, 157, 149, 142, 0} +"wopf", {240, 157, 149, 168, 0} "wp", {226, 132, 152, 0} "wr", {226, 137, 128, 0} "wreath", {226, 137, 128, 0} -"Wscr", {240, 157, 146, 178} -"wscr", {240, 157, 147, 140} +"Wscr", {240, 157, 146, 178, 0} +"wscr", {240, 157, 147, 140, 0} "xcap", {226, 139, 130, 0} "xcirc", {226, 151, 175, 0} "xcup", {226, 139, 131, 0} "xdtri", {226, 150, 189, 0} -"Xfr", {240, 157, 148, 155} -"xfr", {240, 157, 148, 181} +"Xfr", {240, 157, 148, 155, 0} +"xfr", {240, 157, 148, 181, 0} "xharr", {226, 159, 183, 0} "xhArr", {226, 159, 186, 0} "Xi", {206, 158, 0} @@ -2071,14 +2071,14 @@ struct html_ent { "xmap", {226, 159, 188, 0} "xnis", {226, 139, 187, 0} "xodot", {226, 168, 128, 0} -"Xopf", {240, 157, 149, 143} -"xopf", {240, 157, 149, 169} +"Xopf", {240, 157, 149, 143, 0} +"xopf", {240, 157, 149, 169, 0} "xoplus", {226, 168, 129, 0} "xotime", {226, 168, 130, 0} "xrarr", {226, 159, 182, 0} "xrArr", {226, 159, 185, 0} -"Xscr", {240, 157, 146, 179} -"xscr", {240, 157, 147, 141} +"Xscr", {240, 157, 146, 179, 0} +"xscr", {240, 157, 147, 141, 0} "xsqcup", {226, 168, 134, 0} "xuplus", {226, 168, 132, 0} "xutri", {226, 150, 179, 0} @@ -2093,14 +2093,14 @@ struct html_ent { "Ycy", {208, 171, 0} "ycy", {209, 139, 0} "yen", {194, 165, 0} -"Yfr", {240, 157, 148, 156} -"yfr", {240, 157, 148, 182} +"Yfr", {240, 157, 148, 156, 0} +"yfr", {240, 157, 148, 182, 0} "YIcy", {208, 135, 0} "yicy", {209, 151, 0} -"Yopf", {240, 157, 149, 144} -"yopf", {240, 157, 149, 170} -"Yscr", {240, 157, 146, 180} -"yscr", {240, 157, 147, 142} +"Yopf", {240, 157, 149, 144, 0} +"yopf", {240, 157, 149, 170, 0} +"Yscr", {240, 157, 146, 180, 0} +"yscr", {240, 157, 147, 142, 0} "YUcy", {208, 174, 0} "yucy", {209, 142, 0} "yuml", {195, 191, 0} @@ -2117,14 +2117,14 @@ struct html_ent { "ZeroWidthSpace", {226, 128, 139, 0} "Zeta", {206, 150, 0} "zeta", {206, 182, 0} -"zfr", {240, 157, 148, 183} "Zfr", {226, 132, 168, 0} +"zfr", {240, 157, 148, 183, 0} "ZHcy", {208, 150, 0} "zhcy", {208, 182, 0} "zigrarr", {226, 135, 157, 0} -"zopf", {240, 157, 149, 171} "Zopf", {226, 132, 164, 0} -"Zscr", {240, 157, 146, 181} -"zscr", {240, 157, 147, 143} +"zopf", {240, 157, 149, 171, 0} +"Zscr", {240, 157, 146, 181, 0} +"zscr", {240, 157, 147, 143, 0} "zwj", {226, 128, 141, 0} "zwnj", {226, 128, 140, 0} diff --git a/src/html_unescape.h b/src/html_unescape.h index 1eb318b49e..e4c5929f10 100644 --- a/src/html_unescape.h +++ b/src/html_unescape.h @@ -1,5 +1,5 @@ /* ANSI-C code produced by gperf version 3.0.3 */ -/* Command-line: /Library/Developer/CommandLineTools/usr/bin/gperf -L ANSI-C -I -t -N find_entity -H hash_entity -K entity -C -l -F ',{0}' --null-strings -m5 -P -Q entity_pool src/html_unescape.gperf */ +/* Command-line: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gperf -L ANSI-C -I -t -N find_entity -H hash_entity -K entity -C -l -F ',{0}' --null-strings -m5 -P -Q entity_pool src/html_unescape.gperf */ /* Computed positions: -k'1-7,10,12,$' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -32,7 +32,7 @@ #line 1 "src/html_unescape.gperf" struct html_ent { int entity; - unsigned char utf8[4]; + unsigned char utf8[8]; }; #include #include @@ -5537,14 +5537,14 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1501 "src/html_unescape.gperf" +#line 1497 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str39), {226, 134, 146, 0}}, {-1,{0}}, -#line 833 "src/html_unescape.gperf" +#line 831 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str41), {226, 134, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 844 "src/html_unescape.gperf" +#line 842 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str49), {226, 170, 171, 0}}, {-1,{0}}, {-1,{0}}, #line 1903 "src/html_unescape.gperf" @@ -5554,7 +5554,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str55), {226, 138, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1510 "src/html_unescape.gperf" +#line 1509 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str62), {226, 134, 163, 0}}, {-1,{0}}, #line 841 "src/html_unescape.gperf" @@ -5564,7 +5564,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 963 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str67), {226, 135, 189, 0}}, -#line 1168 "src/html_unescape.gperf" +#line 1167 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str68), {194, 172, 0}}, #line 1609 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str69), {41, 0}}, @@ -5576,7 +5576,7 @@ find_entity (register const char *str, register unsigned int len) #line 1715 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str73), {226, 136, 165, 0}}, {-1,{0}}, -#line 945 "src/html_unescape.gperf" +#line 944 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str75), {226, 137, 170, 0}}, #line 1926 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str76), {226, 134, 190, 0}}, @@ -5591,13 +5591,13 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 981 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str85), {226, 168, 180, 0}}, -#line 1388 "src/html_unescape.gperf" +#line 1386 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str86), {226, 136, 165, 0}}, {-1,{0}}, #line 1132 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str88), {226, 134, 174, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1231 "src/html_unescape.gperf" +#line 1230 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str94), {226, 136, 166, 0}}, {-1,{0}}, {-1,{0}}, #line 1872 "src/html_unescape.gperf" @@ -5625,15 +5625,15 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str117), {226, 150, 147, 0}}, {-1,{0}}, #line 1232 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str119), {226, 171, 189, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str119), {226, 171, 189, 226, 131, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1143 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str123), {226, 128, 165, 0}}, #line 1594 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str124), {226, 135, 132, 0}}, #line 1233 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str125), {226, 136, 130, 0}}, -#line 944 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str125), {226, 136, 130, 204, 184, 0}}, +#line 946 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str126), {226, 135, 135, 0}}, #line 1158 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str127), {226, 137, 174, 0}}, @@ -5641,7 +5641,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str128), {226, 134, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1230 "src/html_unescape.gperf" +#line 1231 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str138), {226, 136, 166, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1825 "src/html_unescape.gperf" @@ -5649,7 +5649,7 @@ find_entity (register const char *str, register unsigned int len) #line 1991 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str144), {226, 134, 149, 0}}, {-1,{0}}, -#line 1738 "src/html_unescape.gperf" +#line 1729 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str146), {226, 150, 161, 0}}, {-1,{0}}, {-1,{0}}, #line 1141 "src/html_unescape.gperf" @@ -5660,7 +5660,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 957 "src/html_unescape.gperf" +#line 958 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str165), {226, 170, 135, 0}}, #line 1612 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str166), {226, 135, 137, 0}}, @@ -5678,7 +5678,7 @@ find_entity (register const char *str, register unsigned int len) #line 525 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str174), {226, 165, 177, 0}}, {-1,{0}}, -#line 1433 "src/html_unescape.gperf" +#line 1431 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str176), {226, 137, 186, 0}}, #line 1555 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str177), {226, 135, 128, 0}}, @@ -5690,17 +5690,17 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str184), {226, 134, 159, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1128 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str188), {226, 137, 171, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str188), {226, 137, 171, 226, 131, 146, 0}}, {-1,{0}}, #line 140 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str190), {61, 0}}, -#line 1241 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str190), {61, 226, 131, 165, 0}}, +#line 1240 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str191), {226, 134, 155, 0}}, {-1,{0}}, {-1,{0}}, #line 1818 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str194), {226, 134, 153, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1497 "src/html_unescape.gperf" +#line 1500 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str198), {226, 165, 181, 0}}, {-1,{0}}, #line 1966 "src/html_unescape.gperf" @@ -5723,7 +5723,7 @@ find_entity (register const char *str, register unsigned int len) #line 1703 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str217), {226, 170, 170, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 496 "src/html_unescape.gperf" +#line 497 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str222), {226, 128, 133, 0}}, #line 1507 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str223), {226, 165, 133, 0}}, @@ -5734,13 +5734,13 @@ find_entity (register const char *str, register unsigned int len) #line 1405 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str230), {226, 132, 179, 0}}, {-1,{0}}, -#line 495 "src/html_unescape.gperf" +#line 496 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str232), {226, 128, 132, 0}}, {-1,{0}}, -#line 1013 "src/html_unescape.gperf" +#line 1011 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str234), {60, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 834 "src/html_unescape.gperf" +#line 832 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str238), {226, 134, 158, 0}}, #line 1524 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str239), {226, 166, 144, 0}}, @@ -5771,19 +5771,19 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str265), {194, 160, 0}}, #line 1924 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str266), {226, 165, 163, 0}}, -#line 1867 "src/html_unescape.gperf" +#line 1865 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str267), {226, 138, 164, 0}}, {-1,{0}}, #line 2003 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str269), {226, 171, 171, 0}}, {-1,{0}}, {-1,{0}}, -#line 946 "src/html_unescape.gperf" +#line 945 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str272), {226, 139, 152, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1431 "src/html_unescape.gperf" +#line 1433 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str276), {226, 170, 183, 0}}, {-1,{0}}, -#line 497 "src/html_unescape.gperf" +#line 495 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str278), {226, 128, 131, 0}}, {-1,{0}}, {-1,{0}}, #line 1078 "src/html_unescape.gperf" @@ -5804,27 +5804,27 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str302), {226, 133, 135, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 913 "src/html_unescape.gperf" +#line 912 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str310), {226, 169, 189, 0}}, -#line 744 "src/html_unescape.gperf" +#line 743 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str311), {226, 136, 136, 0}}, #line 1460 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str312), {226, 136, 157, 0}}, {-1,{0}}, -#line 1865 "src/html_unescape.gperf" +#line 1866 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str314), {226, 140, 182, 0}}, {-1,{0}}, {-1,{0}}, -#line 749 "src/html_unescape.gperf" +#line 748 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str317), {226, 136, 171, 0}}, {-1,{0}}, -#line 1104 "src/html_unescape.gperf" +#line 1100 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str319), {226, 137, 160, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1236 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str329), {226, 139, 160, 0}}, {-1,{0}}, -#line 1446 "src/html_unescape.gperf" +#line 1435 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str331), {226, 170, 175, 0}}, #line 508 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str332), {206, 181, 0}}, @@ -5850,18 +5850,18 @@ find_entity (register const char *str, register unsigned int len) #line 960 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str352), {226, 137, 168, 0}}, {-1,{0}}, -#line 1417 "src/html_unescape.gperf" +#line 1414 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str354), {43, 0}}, #line 1153 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str355), {226, 169, 189, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str355), {226, 169, 189, 204, 184, 0}}, #line 1105 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str356), {226, 137, 144, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str356), {226, 137, 144, 204, 184, 0}}, #line 133 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str357), {226, 151, 130, 0}}, #line 134 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str358), {226, 150, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1101 "src/html_unescape.gperf" +#line 1102 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str364), {226, 134, 151, 0}}, {-1,{0}}, {-1,{0}}, #line 132 "src/html_unescape.gperf" @@ -5880,12 +5880,12 @@ find_entity (register const char *str, register unsigned int len) #line 1700 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str383), {226, 167, 164, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1032 "src/html_unescape.gperf" +#line 1033 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str387), {226, 164, 133, 0}}, {-1,{0}}, {-1,{0}}, #line 1419 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str390), {226, 168, 165, 0}}, -#line 1167 "src/html_unescape.gperf" +#line 1168 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str391), {226, 171, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -5909,7 +5909,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str435), {226, 137, 176, 0}}, {-1,{0}}, {-1,{0}}, #line 1151 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str438), {226, 137, 166, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str438), {226, 137, 166, 204, 184, 0}}, {-1,{0}}, #line 578 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str440), {194, 190, 0}}, @@ -5962,7 +5962,7 @@ find_entity (register const char *str, register unsigned int len) #line 1406 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str471), {226, 152, 142, 0}}, {-1,{0}}, {-1,{0}}, -#line 218 "src/html_unescape.gperf" +#line 215 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str474), {226, 139, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 130 "src/html_unescape.gperf" @@ -5973,7 +5973,7 @@ find_entity (register const char *str, register unsigned int len) #line 910 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str483), {226, 137, 166, 0}}, {-1,{0}}, {-1,{0}}, -#line 748 "src/html_unescape.gperf" +#line 750 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str486), {226, 138, 186, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 371 "src/html_unescape.gperf" @@ -5991,10 +5991,10 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1932 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str511), {197, 170, 0}}, -#line 2014 "src/html_unescape.gperf" +#line 2013 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str512), {226, 139, 129, 0}}, {-1,{0}}, {-1,{0}}, -#line 1502 "src/html_unescape.gperf" +#line 1498 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str515), {226, 134, 160, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6009,16 +6009,16 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str531), {91, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1509 "src/html_unescape.gperf" +#line 1510 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str538), {226, 164, 150, 0}}, {-1,{0}}, {-1,{0}}, #line 529 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str541), {226, 137, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2013 "src/html_unescape.gperf" +#line 2012 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str546), {226, 136, 168, 0}}, #line 1088 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str547), {226, 137, 143, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str547), {226, 137, 143, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 947 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str553), {226, 140, 158, 0}}, @@ -6042,23 +6042,23 @@ find_entity (register const char *str, register unsigned int len) #line 988 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str571), {226, 167, 171, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 298 "src/html_unescape.gperf" +#line 297 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str575), {194, 169, 0}}, {-1,{0}}, #line 1928 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str577), {226, 140, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2012 "src/html_unescape.gperf" +#line 2014 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str582), {226, 138, 187, 0}}, {-1,{0}}, #line 1391 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str584), {226, 136, 130, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1729 "src/html_unescape.gperf" +#line 1731 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str589), {226, 150, 161, 0}}, {-1,{0}}, #line 1087 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str591), {226, 137, 142, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str591), {226, 137, 142, 204, 184, 0}}, #line 107 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str592), {226, 132, 172, 0}}, #line 2055 "src/html_unescape.gperf" @@ -6070,7 +6070,7 @@ find_entity (register const char *str, register unsigned int len) #line 848 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str596), {226, 164, 142, 0}}, {-1,{0}}, {-1,{0}}, -#line 143 "src/html_unescape.gperf" +#line 142 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str599), {226, 140, 144, 0}}, {-1,{0}}, #line 1661 "src/html_unescape.gperf" @@ -6080,58 +6080,58 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str606), {226, 140, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1217 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str612), {226, 138, 130, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str612), {226, 138, 130, 226, 131, 146, 0}}, {-1,{0}}, -#line 1604 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str614), {240, 157, 149, 163}}, -#line 1475 "src/html_unescape.gperf" +#line 1605 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str614), {240, 157, 149, 163, 0}}, +#line 1474 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str615), {226, 132, 154, 0}}, #line 979 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str616), {240, 157, 149, 157}}, + {offsetof(struct entity_pool_t, entity_pool_str616), {240, 157, 149, 157, 0}}, {-1,{0}}, #line 1712 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str618), {240, 157, 149, 164}}, + {offsetof(struct entity_pool_t, entity_pool_str618), {240, 157, 149, 164, 0}}, #line 1967 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str619), {226, 140, 157, 0}}, #line 1868 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str620), {240, 157, 149, 139}}, -#line 2126 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str620), {240, 157, 149, 139, 0}}, +#line 2125 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str621), {226, 132, 164, 0}}, #line 504 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str622), {240, 157, 149, 150}}, + {offsetof(struct entity_pool_t, entity_pool_str622), {240, 157, 149, 150, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1603 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str626), {226, 166, 134, 0}}, #line 1944 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str627), {240, 157, 149, 166}}, + {offsetof(struct entity_pool_t, entity_pool_str627), {240, 157, 149, 166, 0}}, #line 977 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str628), {226, 166, 133, 0}}, #line 1869 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str629), {240, 157, 149, 165}}, + {offsetof(struct entity_pool_t, entity_pool_str629), {240, 157, 149, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2074 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str635), {240, 157, 149, 143}}, + {offsetof(struct entity_pool_t, entity_pool_str635), {240, 157, 149, 143, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1165 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str639), {240, 157, 149, 159}}, +#line 1166 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str639), {240, 157, 149, 159, 0}}, {-1,{0}}, #line 145 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str641), {240, 157, 149, 147}}, + {offsetof(struct entity_pool_t, entity_pool_str641), {240, 157, 149, 147, 0}}, #line 511 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str642), {207, 181, 0}}, #line 561 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str643), {198, 146, 0}}, -#line 733 "src/html_unescape.gperf" +#line 734 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str644), {196, 171, 0}}, {-1,{0}}, {-1,{0}}, #line 791 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str647), {240, 157, 149, 129}}, + {offsetof(struct entity_pool_t, entity_pool_str647), {240, 157, 149, 129, 0}}, {-1,{0}}, #line 1134 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str649), {226, 171, 178, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2052 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str653), {240, 157, 149, 142}}, + {offsetof(struct entity_pool_t, entity_pool_str653), {240, 157, 149, 142, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1720 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str658), {226, 136, 154, 0}}, @@ -6139,38 +6139,38 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str659), {226, 138, 132, 0}}, {-1,{0}}, #line 1080 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str661), {226, 137, 139, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str661), {226, 137, 139, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, #line 1223 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str664), {226, 138, 131, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str664), {226, 138, 131, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, #line 196 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str667), {194, 166, 0}}, {-1,{0}}, {-1,{0}}, -#line 1710 "src/html_unescape.gperf" +#line 1708 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str670), {47, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 460 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str675), {226, 169, 174, 0}}, {-1,{0}}, -#line 1428 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str677), {240, 157, 149, 161}}, +#line 1429 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str677), {240, 157, 149, 161, 0}}, {-1,{0}}, {-1,{0}}, #line 369 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str680), {226, 165, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2031 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str685), {240, 157, 149, 141}}, + {offsetof(struct entity_pool_t, entity_pool_str685), {240, 157, 149, 141, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1273 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str690), {226, 138, 131, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str690), {226, 138, 131, 226, 131, 146, 0}}, #line 1270 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str691), {226, 138, 133, 0}}, #line 2002 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str692), {226, 171, 168, 0}}, {-1,{0}}, #line 1265 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str694), {226, 138, 130, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str694), {226, 138, 130, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1850 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str700), {226, 137, 136, 0}}, @@ -6185,14 +6185,14 @@ find_entity (register const char *str, register unsigned int len) #line 961 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str710), {226, 139, 166, 0}}, {-1,{0}}, -#line 1708 "src/html_unescape.gperf" +#line 1710 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str712), {226, 140, 191, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1730 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str717), {226, 150, 161, 0}}, {-1,{0}}, #line 2032 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str719), {240, 157, 149, 167}}, + {offsetof(struct entity_pool_t, entity_pool_str719), {240, 157, 149, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1925 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str723), {226, 134, 191, 0}}, @@ -6213,7 +6213,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str735), {226, 136, 147, 0}}, {-1,{0}}, {-1,{0}}, #line 813 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str738), {240, 157, 149, 130}}, + {offsetof(struct entity_pool_t, entity_pool_str738), {240, 157, 149, 130, 0}}, {-1,{0}}, {-1,{0}}, #line 1695 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str741), {226, 165, 178, 0}}, @@ -6222,9 +6222,9 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str743), {226, 153, 173, 0}}, {-1,{0}}, #line 1064 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str745), {240, 157, 149, 132}}, + {offsetof(struct entity_pool_t, entity_pool_str745), {240, 157, 149, 132, 0}}, #line 1711 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str746), {240, 157, 149, 138}}, + {offsetof(struct entity_pool_t, entity_pool_str746), {240, 157, 149, 138, 0}}, #line 1061 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str747), {226, 128, 166, 0}}, #line 1596 "src/html_unescape.gperf" @@ -6237,28 +6237,28 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str756), {226, 166, 147, 0}}, {-1,{0}}, #line 563 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str758), {240, 157, 149, 151}}, + {offsetof(struct entity_pool_t, entity_pool_str758), {240, 157, 149, 151, 0}}, #line 1943 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str759), {240, 157, 149, 140}}, + {offsetof(struct entity_pool_t, entity_pool_str759), {240, 157, 149, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1995 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str763), {226, 138, 138, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str763), {226, 138, 138, 239, 184, 128, 0}}, #line 1996 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str764), {226, 171, 139, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str764), {226, 171, 139, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, #line 1969 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str767), {226, 140, 142, 0}}, #line 927 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str768), {226, 170, 161, 0}}, {-1,{0}}, -#line 1542 "src/html_unescape.gperf" +#line 1538 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str770), {226, 132, 156, 0}}, {-1,{0}}, {-1,{0}}, #line 1201 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str773), {226, 170, 161, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str773), {226, 170, 161, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 395 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str777), {240, 157, 148, 187}}, + {offsetof(struct entity_pool_t, entity_pool_str777), {240, 157, 148, 187, 0}}, {-1,{0}}, #line 567 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str779), {226, 171, 153, 0}}, @@ -6266,13 +6266,13 @@ find_entity (register const char *str, register unsigned int len) #line 1260 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str781), {226, 139, 162, 0}}, {-1,{0}}, -#line 1272 "src/html_unescape.gperf" +#line 1271 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str783), {226, 138, 137, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1264 "src/html_unescape.gperf" +#line 1263 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str787), {226, 138, 136, 0}}, -#line 1474 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str788), {240, 157, 149, 162}}, +#line 1475 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str788), {240, 157, 149, 162, 0}}, #line 1595 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str789), {226, 135, 140, 0}}, {-1,{0}}, {-1,{0}}, @@ -6285,16 +6285,16 @@ find_entity (register const char *str, register unsigned int len) #line 1430 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str798), {194, 163, 0}}, #line 1997 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str799), {226, 138, 139, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str799), {226, 138, 139, 239, 184, 128, 0}}, #line 1998 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str800), {226, 171, 140, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str800), {226, 171, 140, 239, 184, 128, 0}}, {-1,{0}}, #line 141 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str802), {226, 137, 161, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str802), {226, 137, 161, 226, 131, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 978 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str813), {240, 157, 149, 131}}, + {offsetof(struct entity_pool_t, entity_pool_str813), {240, 157, 149, 131, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1261 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str817), {226, 139, 163, 0}}, @@ -6307,12 +6307,12 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str822), {226, 134, 171, 0}}, {-1,{0}}, #line 2100 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str824), {240, 157, 149, 144}}, + {offsetof(struct entity_pool_t, entity_pool_str824), {240, 157, 149, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1209 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str829), {226, 136, 140, 0}}, {-1,{0}}, {-1,{0}}, -#line 294 "src/html_unescape.gperf" +#line 293 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str832), {226, 132, 130, 0}}, #line 993 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str833), {226, 135, 139, 0}}, @@ -6331,32 +6331,32 @@ find_entity (register const char *str, register unsigned int len) #line 1266 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str855), {226, 138, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1737 "src/html_unescape.gperf" +#line 1738 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str861), {226, 150, 170, 0}}, #line 2020 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str862), {226, 128, 150, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1735 "src/html_unescape.gperf" +#line 1736 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str874), {226, 138, 146, 0}}, {-1,{0}}, #line 1464 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str876), {226, 137, 190, 0}}, {-1,{0}}, {-1,{0}}, -#line 1733 "src/html_unescape.gperf" +#line 1734 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str879), {226, 138, 145, 0}}, {-1,{0}}, {-1,{0}}, -#line 1734 "src/html_unescape.gperf" +#line 1735 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str882), {226, 138, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1732 "src/html_unescape.gperf" +#line 1733 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str887), {226, 138, 143, 0}}, #line 1289 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str888), {226, 137, 141, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str888), {226, 137, 141, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 764 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str892), {240, 157, 149, 154}}, + {offsetof(struct entity_pool_t, entity_pool_str892), {240, 157, 149, 154, 0}}, {-1,{0}}, #line 1425 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str894), {194, 177, 0}}, @@ -6370,7 +6370,7 @@ find_entity (register const char *str, register unsigned int len) #line 986 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str901), {226, 151, 138, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1033 "src/html_unescape.gperf" +#line 1032 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str905), {226, 134, 166, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6380,28 +6380,28 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1615 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str934), {240, 157, 147, 135}}, +#line 1616 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str934), {240, 157, 147, 135, 0}}, #line 1477 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str935), {240, 157, 146, 172}}, -#line 998 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str936), {240, 157, 147, 129}}, + {offsetof(struct entity_pool_t, entity_pool_str935), {240, 157, 146, 172, 0}}, +#line 999 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str936), {240, 157, 147, 129, 0}}, {-1,{0}}, #line 1742 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str938), {240, 157, 147, 136}}, + {offsetof(struct entity_pool_t, entity_pool_str938), {240, 157, 147, 136, 0}}, {-1,{0}}, #line 1890 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str940), {240, 157, 146, 175}}, + {offsetof(struct entity_pool_t, entity_pool_str940), {240, 157, 146, 175, 0}}, #line 2127 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str941), {240, 157, 146, 181}}, + {offsetof(struct entity_pool_t, entity_pool_str941), {240, 157, 146, 181, 0}}, #line 527 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str942), {226, 132, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1974 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str947), {240, 157, 147, 138}}, + {offsetof(struct entity_pool_t, entity_pool_str947), {240, 157, 147, 138, 0}}, {-1,{0}}, #line 1891 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str949), {240, 157, 147, 137}}, + {offsetof(struct entity_pool_t, entity_pool_str949), {240, 157, 147, 137, 0}}, {-1,{0}}, #line 740 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str951), {226, 138, 183, 0}}, @@ -6409,22 +6409,22 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str952), {226, 136, 144, 0}}, {-1,{0}}, {-1,{0}}, #line 2080 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str955), {240, 157, 146, 179}}, + {offsetof(struct entity_pool_t, entity_pool_str955), {240, 157, 146, 179, 0}}, #line 2067 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str956), {206, 158, 0}}, {-1,{0}}, {-1,{0}}, #line 1252 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str959), {240, 157, 147, 131}}, + {offsetof(struct entity_pool_t, entity_pool_str959), {240, 157, 147, 131, 0}}, #line 1135 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str960), {226, 136, 139, 0}}, -#line 197 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str961), {240, 157, 146, 183}}, -#line 1166 "src/html_unescape.gperf" +#line 198 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str961), {240, 157, 146, 183, 0}}, +#line 1165 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str962), {226, 132, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 793 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str967), {240, 157, 146, 165}}, -#line 1442 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str967), {240, 157, 146, 165, 0}}, +#line 1444 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str968), {226, 170, 175, 0}}, {-1,{0}}, {-1,{0}}, #line 1302 "src/html_unescape.gperf" @@ -6432,7 +6432,7 @@ find_entity (register const char *str, register unsigned int len) #line 87 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str972), {226, 128, 181, 0}}, #line 2057 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str973), {240, 157, 146, 178}}, + {offsetof(struct entity_pool_t, entity_pool_str973), {240, 157, 146, 178, 0}}, {-1,{0}}, #line 1988 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str975), {207, 149, 0}}, @@ -6446,16 +6446,16 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str991), {226, 140, 158, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1467 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str997), {240, 157, 147, 133}}, + {offsetof(struct entity_pool_t, entity_pool_str997), {240, 157, 147, 133, 0}}, #line 1408 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str998), {207, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2035 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1005), {240, 157, 146, 177}}, + {offsetof(struct entity_pool_t, entity_pool_str1005), {240, 157, 146, 177, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1112 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1011), {226, 137, 130, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1011), {226, 137, 130, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1693 "src/html_unescape.gperf" @@ -6463,21 +6463,21 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1275 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1028), {226, 171, 134, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1028), {226, 171, 134, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1267 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1032), {226, 171, 133, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1032), {226, 171, 133, 204, 184, 0}}, #line 440 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1033), {226, 140, 159, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1520 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1038), {125, 0}}, #line 2036 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1039), {240, 157, 147, 139}}, + {offsetof(struct entity_pool_t, entity_pool_str1039), {240, 157, 147, 139, 0}}, #line 850 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1040), {123, 0}}, #line 396 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1041), {240, 157, 149, 149}}, + {offsetof(struct entity_pool_t, entity_pool_str1041), {240, 157, 149, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 585 "src/html_unescape.gperf" @@ -6487,14 +6487,14 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1055), {226, 137, 178, 0}}, {-1,{0}}, {-1,{0}}, #line 815 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1058), {240, 157, 146, 166}}, + {offsetof(struct entity_pool_t, entity_pool_str1058), {240, 157, 146, 166, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1416 "src/html_unescape.gperf" +#line 1417 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1064), {226, 168, 162, 0}}, -#line 1068 "src/html_unescape.gperf" +#line 1067 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1065), {226, 132, 179, 0}}, #line 1741 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1066), {240, 157, 146, 174}}, + {offsetof(struct entity_pool_t, entity_pool_str1066), {240, 157, 146, 174, 0}}, #line 1523 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1067), {226, 166, 142, 0}}, {-1,{0}}, @@ -6504,31 +6504,31 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1070), {226, 164, 144, 0}}, {-1,{0}}, {-1,{0}}, #line 1717 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1073), {226, 138, 147, 0}}, -#line 1503 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1073), {226, 138, 147, 239, 184, 128, 0}}, +#line 1499 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1074), {226, 135, 146, 0}}, -#line 142 "src/html_unescape.gperf" +#line 143 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1075), {226, 171, 173, 0}}, -#line 835 "src/html_unescape.gperf" +#line 833 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1076), {226, 135, 144, 0}}, {-1,{0}}, -#line 587 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1078), {240, 157, 146, 187}}, +#line 588 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1078), {240, 157, 146, 187, 0}}, #line 1973 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1079), {240, 157, 146, 176}}, + {offsetof(struct entity_pool_t, entity_pool_str1079), {240, 157, 146, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1905 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1087), {226, 135, 145, 0}}, {-1,{0}}, {-1,{0}}, -#line 1605 "src/html_unescape.gperf" +#line 1604 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1090), {226, 132, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2053 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1094), {240, 157, 149, 168}}, + {offsetof(struct entity_pool_t, entity_pool_str1094), {240, 157, 149, 168, 0}}, {-1,{0}}, {-1,{0}}, #line 442 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1097), {240, 157, 146, 159}}, + {offsetof(struct entity_pool_t, entity_pool_str1097), {240, 157, 146, 159, 0}}, #line 1351 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1098), {226, 166, 183, 0}}, #line 1662 "src/html_unescape.gperf" @@ -6542,10 +6542,10 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1105), {207, 129, 0}}, #line 817 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1106), {226, 135, 154, 0}}, -#line 1437 "src/html_unescape.gperf" +#line 1439 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1107), {226, 137, 188, 0}}, #line 1478 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1108), {240, 157, 147, 134}}, + {offsetof(struct entity_pool_t, entity_pool_str1108), {240, 157, 147, 134, 0}}, {-1,{0}}, {-1,{0}}, #line 1028 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1111), {194, 175, 0}}, @@ -6566,7 +6566,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1131), {226, 167, 128, 0}}, #line 1514 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1132), {226, 136, 182, 0}}, -#line 999 "src/html_unescape.gperf" +#line 998 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1133), {226, 132, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 370 "src/html_unescape.gperf" @@ -6578,24 +6578,24 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1140), {194, 168, 0}}, #line 404 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1141), {226, 136, 148, 0}}, -#line 1358 "src/html_unescape.gperf" +#line 1356 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1142), {226, 136, 168, 0}}, {-1,{0}}, #line 2102 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1144), {240, 157, 146, 180}}, + {offsetof(struct entity_pool_t, entity_pool_str1144), {240, 157, 146, 180, 0}}, {-1,{0}}, {-1,{0}}, #line 562 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1147), {240, 157, 148, 189}}, + {offsetof(struct entity_pool_t, entity_pool_str1147), {240, 157, 148, 189, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 304 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1152), {240, 157, 146, 158}}, + {offsetof(struct entity_pool_t, entity_pool_str1152), {240, 157, 146, 158, 0}}, #line 1336 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1153), {226, 134, 186, 0}}, #line 1243 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1154), {226, 134, 157, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1154), {226, 134, 157, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1026 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1159), {226, 137, 168, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1159), {226, 137, 168, 239, 184, 128, 0}}, #line 515 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1160), {226, 170, 150, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6605,7 +6605,7 @@ find_entity (register const char *str, register unsigned int len) #line 516 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1169), {226, 170, 149, 0}}, {-1,{0}}, {-1,{0}}, -#line 743 "src/html_unescape.gperf" +#line 744 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1172), {226, 132, 133, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6616,11 +6616,11 @@ find_entity (register const char *str, register unsigned int len) #line 441 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1181), {226, 140, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1387 "src/html_unescape.gperf" +#line 1388 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1187), {226, 136, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1356 "src/html_unescape.gperf" +#line 1358 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1195), {226, 134, 187, 0}}, #line 1744 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1196), {226, 140, 163, 0}}, @@ -6637,8 +6637,8 @@ find_entity (register const char *str, register unsigned int len) #line 1368 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1208), {226, 147, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 769 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1212), {240, 157, 146, 190}}, +#line 770 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1212), {240, 157, 146, 190, 0}}, #line 725 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1213), {226, 133, 136, 0}}, #line 1543 "src/html_unescape.gperf" @@ -6676,7 +6676,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 564 "src/html_unescape.gperf" +#line 565 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1252), {226, 136, 128, 0}}, {-1,{0}}, {-1,{0}}, #line 1189 "src/html_unescape.gperf" @@ -6684,7 +6684,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1065 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1263), {240, 157, 149, 158}}, + {offsetof(struct entity_pool_t, entity_pool_str1263), {240, 157, 149, 158, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1138 "src/html_unescape.gperf" @@ -6695,7 +6695,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1280), {226, 171, 169, 0}}, {-1,{0}}, #line 1251 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1282), {240, 157, 146, 169}}, + {offsetof(struct entity_pool_t, entity_pool_str1282), {240, 157, 146, 169, 0}}, {-1,{0}}, #line 1396 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1284), {46, 0}}, @@ -6706,11 +6706,11 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 112 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1298), {226, 137, 172, 0}}, -#line 750 "src/html_unescape.gperf" +#line 749 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1299), {226, 136, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 103 "src/html_unescape.gperf" +#line 104 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1307), {226, 136, 181, 0}}, #line 1410 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1308), {207, 150, 0}}, @@ -6718,64 +6718,64 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1551 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1326), {240, 157, 148, 175}}, +#line 1552 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1326), {240, 157, 148, 175, 0}}, #line 1471 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1327), {240, 157, 148, 148}}, + {offsetof(struct entity_pool_t, entity_pool_str1327), {240, 157, 148, 148, 0}}, #line 934 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1328), {240, 157, 148, 169}}, + {offsetof(struct entity_pool_t, entity_pool_str1328), {240, 157, 148, 169, 0}}, {-1,{0}}, #line 1667 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1330), {240, 157, 148, 176}}, + {offsetof(struct entity_pool_t, entity_pool_str1330), {240, 157, 148, 176, 0}}, #line 1148 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1331), {226, 134, 174, 0}}, #line 1836 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1332), {240, 157, 148, 151}}, -#line 2121 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1332), {240, 157, 148, 151, 0}}, +#line 2120 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1333), {226, 132, 168, 0}}, #line 476 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1334), {240, 157, 148, 162}}, + {offsetof(struct entity_pool_t, entity_pool_str1334), {240, 157, 148, 162, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1685 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1338), {226, 136, 188, 0}}, #line 1921 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1339), {240, 157, 148, 178}}, + {offsetof(struct entity_pool_t, entity_pool_str1339), {240, 157, 148, 178, 0}}, #line 1606 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1340), {226, 168, 174, 0}}, #line 1837 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1341), {240, 157, 148, 177}}, + {offsetof(struct entity_pool_t, entity_pool_str1341), {240, 157, 148, 177, 0}}, #line 980 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1342), {226, 168, 173, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2063 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1347), {240, 157, 148, 155}}, + {offsetof(struct entity_pool_t, entity_pool_str1347), {240, 157, 148, 155, 0}}, {-1,{0}}, {-1,{0}}, -#line 1538 "src/html_unescape.gperf" +#line 1539 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1350), {226, 132, 156, 0}}, #line 1119 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1351), {240, 157, 148, 171}}, + {offsetof(struct entity_pool_t, entity_pool_str1351), {240, 157, 148, 171, 0}}, {-1,{0}}, #line 114 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1353), {240, 157, 148, 159}}, + {offsetof(struct entity_pool_t, entity_pool_str1353), {240, 157, 148, 159, 0}}, {-1,{0}}, #line 1184 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1355), {226, 137, 143, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1355), {226, 137, 143, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 788 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1359), {240, 157, 148, 141}}, + {offsetof(struct entity_pool_t, entity_pool_str1359), {240, 157, 148, 141, 0}}, {-1,{0}}, #line 443 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1361), {240, 157, 146, 185}}, + {offsetof(struct entity_pool_t, entity_pool_str1361), {240, 157, 146, 185, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2050 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1365), {240, 157, 148, 154}}, + {offsetof(struct entity_pool_t, entity_pool_str1365), {240, 157, 148, 154, 0}}, {-1,{0}}, #line 129 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1367), {226, 167, 171, 0}}, {-1,{0}}, -#line 2125 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1369), {240, 157, 149, 171}}, -#line 1541 "src/html_unescape.gperf" +#line 2126 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1369), {240, 157, 149, 171, 0}}, +#line 1542 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1370), {226, 132, 157, 0}}, {-1,{0}}, #line 1170 "src/html_unescape.gperf" @@ -6784,29 +6784,29 @@ find_entity (register const char *str, register unsigned int len) #line 1694 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1375), {226, 168, 164, 0}}, {-1,{0}}, -#line 565 "src/html_unescape.gperf" +#line 564 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1377), {226, 136, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1401 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1389), {240, 157, 148, 173}}, + {offsetof(struct entity_pool_t, entity_pool_str1389), {240, 157, 148, 173, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1342 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1395), {197, 141, 0}}, {-1,{0}}, #line 2026 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1397), {240, 157, 148, 153}}, + {offsetof(struct entity_pool_t, entity_pool_str1397), {240, 157, 148, 153, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 488 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1409), {196, 146, 0}}, -#line 1616 "src/html_unescape.gperf" +#line 1615 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1410), {226, 132, 155, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2058 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1414), {240, 157, 147, 140}}, + {offsetof(struct entity_pool_t, entity_pool_str1414), {240, 157, 147, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1679 "src/html_unescape.gperf" @@ -6816,32 +6816,32 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1429), {226, 136, 150, 0}}, {-1,{0}}, #line 2027 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1431), {240, 157, 148, 179}}, + {offsetof(struct entity_pool_t, entity_pool_str1431), {240, 157, 148, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 806 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1450), {240, 157, 148, 142}}, + {offsetof(struct entity_pool_t, entity_pool_str1450), {240, 157, 148, 142, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1354 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1455), {226, 166, 185, 0}}, {-1,{0}}, #line 1047 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1457), {240, 157, 148, 144}}, + {offsetof(struct entity_pool_t, entity_pool_str1457), {240, 157, 148, 144, 0}}, #line 1666 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1458), {240, 157, 148, 150}}, + {offsetof(struct entity_pool_t, entity_pool_str1458), {240, 157, 148, 150, 0}}, {-1,{0}}, {-1,{0}}, #line 1160 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1461), {226, 139, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 588 "src/html_unescape.gperf" +#line 587 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1467), {226, 132, 177, 0}}, {-1,{0}}, {-1,{0}}, #line 553 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1470), {240, 157, 148, 163}}, + {offsetof(struct entity_pool_t, entity_pool_str1470), {240, 157, 148, 163, 0}}, #line 1920 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1471), {240, 157, 148, 152}}, + {offsetof(struct entity_pool_t, entity_pool_str1471), {240, 157, 148, 152, 0}}, {-1,{0}}, #line 1676 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1473), {226, 136, 163, 0}}, @@ -6849,9 +6849,9 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1304 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1488), {226, 136, 188, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1488), {226, 136, 188, 226, 131, 146, 0}}, #line 367 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1489), {240, 157, 148, 135}}, + {offsetof(struct entity_pool_t, entity_pool_str1489), {240, 157, 148, 135, 0}}, #line 920 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1490), {226, 139, 150, 0}}, {-1,{0}}, {-1,{0}}, @@ -6860,7 +6860,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1472 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1500), {240, 157, 148, 174}}, + {offsetof(struct entity_pool_t, entity_pool_str1500), {240, 157, 148, 174, 0}}, #line 345 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1501), {226, 135, 147, 0}}, {-1,{0}}, @@ -6871,16 +6871,16 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1507), {226, 134, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1840 "src/html_unescape.gperf" +#line 1839 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1515), {226, 136, 180, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 357 "src/html_unescape.gperf" +#line 355 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1519), {226, 133, 133, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1839 "src/html_unescape.gperf" +#line 1840 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1524), {226, 136, 180, 0}}, #line 933 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1525), {240, 157, 148, 143}}, + {offsetof(struct entity_pool_t, entity_pool_str1525), {240, 157, 148, 143, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1824 "src/html_unescape.gperf" @@ -6889,14 +6889,14 @@ find_entity (register const char *str, register unsigned int len) #line 483 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1535), {226, 136, 136, 0}}, #line 2096 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1536), {240, 157, 148, 156}}, + {offsetof(struct entity_pool_t, entity_pool_str1536), {240, 157, 148, 156, 0}}, #line 271 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1537), {226, 136, 178, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1337 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1542), {226, 166, 190, 0}}, {-1,{0}}, -#line 245 "src/html_unescape.gperf" +#line 244 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1544), {226, 132, 173, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6904,7 +6904,7 @@ find_entity (register const char *str, register unsigned int len) #line 548 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1559), {226, 153, 128, 0}}, #line 1269 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1560), {226, 170, 176, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1560), {226, 170, 176, 204, 184, 0}}, #line 1312 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1561), {226, 138, 155, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6921,13 +6921,13 @@ find_entity (register const char *str, register unsigned int len) #line 1557 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1581), {206, 161, 0}}, {-1,{0}}, -#line 1067 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1583), {240, 157, 147, 130}}, +#line 1068 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1583), {240, 157, 147, 130, 0}}, {-1,{0}}, #line 1303 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1585), {226, 138, 181, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1585), {226, 138, 181, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 958 "src/html_unescape.gperf" +#line 957 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1589), {226, 137, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -6939,19 +6939,19 @@ find_entity (register const char *str, register unsigned int len) #line 387 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1602), {195, 183, 0}}, {-1,{0}}, -#line 721 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1604), {240, 157, 148, 166}}, +#line 722 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1604), {240, 157, 148, 166, 0}}, #line 484 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1605), {226, 143, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 203 "src/html_unescape.gperf" +#line 202 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1615), {92, 0}}, #line 1298 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1616), {226, 164, 130, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 732 "src/html_unescape.gperf" +#line 733 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1626), {196, 170, 0}}, {-1,{0}}, #line 89 "src/html_unescape.gperf" @@ -6971,7 +6971,7 @@ find_entity (register const char *str, register unsigned int len) #line 491 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1642), {226, 136, 133, 0}}, #line 1350 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1643), {240, 157, 149, 160}}, + {offsetof(struct entity_pool_t, entity_pool_str1643), {240, 157, 149, 160, 0}}, {-1,{0}}, #line 540 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1645), {226, 136, 131, 0}}, @@ -6983,11 +6983,11 @@ find_entity (register const char *str, register unsigned int len) #line 539 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1656), {33, 0}}, #line 503 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1657), {240, 157, 148, 188}}, + {offsetof(struct entity_pool_t, entity_pool_str1657), {240, 157, 148, 188, 0}}, #line 1142 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1658), {226, 135, 141, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1849 "src/html_unescape.gperf" +#line 1848 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1663), {226, 128, 137, 0}}, #line 1218 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1664), {226, 138, 136, 0}}, @@ -6996,21 +6996,21 @@ find_entity (register const char *str, register unsigned int len) #line 410 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1666), {226, 135, 144, 0}}, {-1,{0}}, -#line 1866 "src/html_unescape.gperf" +#line 1867 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1668), {226, 171, 177, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 386 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1672), {195, 183, 0}}, {-1,{0}}, #line 1118 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1674), {240, 157, 148, 145}}, + {offsetof(struct entity_pool_t, entity_pool_str1674), {240, 157, 148, 145, 0}}, #line 1144 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1675), {226, 137, 166, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1675), {226, 137, 166, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2128 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1689), {240, 157, 147, 143}}, + {offsetof(struct entity_pool_t, entity_pool_str1689), {240, 157, 147, 143, 0}}, #line 994 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1690), {226, 165, 173, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7018,7 +7018,7 @@ find_entity (register const char *str, register unsigned int len) #line 950 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1697), {226, 151, 186, 0}}, {-1,{0}}, {-1,{0}}, -#line 1242 "src/html_unescape.gperf" +#line 1241 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1700), {226, 135, 143, 0}}, #line 1224 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1701), {226, 138, 137, 0}}, @@ -7026,7 +7026,7 @@ find_entity (register const char *str, register unsigned int len) #line 1819 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1703), {226, 135, 153, 0}}, #line 1847 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1704), {226, 129, 159, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1704), {226, 129, 159, 226, 128, 138, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1931 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1708), {226, 151, 184, 0}}, @@ -7042,7 +7042,7 @@ find_entity (register const char *str, register unsigned int len) #line 1334 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1716), {206, 169, 0}}, {-1,{0}}, {-1,{0}}, -#line 264 "src/html_unescape.gperf" +#line 265 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1719), {226, 138, 151, 0}}, #line 1159 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1720), {226, 139, 170, 0}}, @@ -7066,26 +7066,26 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1397 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1743), {226, 128, 176, 0}}, -#line 1053 "src/html_unescape.gperf" +#line 1051 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1744), {226, 136, 163, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1972 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1750), {226, 151, 185, 0}}, {-1,{0}}, {-1,{0}}, #line 368 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1753), {240, 157, 148, 161}}, + {offsetof(struct entity_pool_t, entity_pool_str1753), {240, 157, 148, 161, 0}}, #line 1049 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1754), {226, 132, 167, 0}}, -#line 1447 "src/html_unescape.gperf" +#line 1436 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1755), {226, 170, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2040 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1759), {226, 138, 139, 0}}, +#line 2039 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1759), {226, 138, 139, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, #line 1246 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1762), {226, 139, 171, 0}}, -#line 2038 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1763), {226, 138, 138, 0}}, +#line 2037 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1763), {226, 138, 138, 239, 184, 128, 0}}, {-1,{0}}, #line 472 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1765), {226, 137, 145, 0}}, @@ -7101,7 +7101,7 @@ find_entity (register const char *str, register unsigned int len) #line 1512 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1783), {226, 164, 154, 0}}, {-1,{0}}, -#line 842 "src/html_unescape.gperf" +#line 843 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1785), {226, 164, 153, 0}}, {-1,{0}}, {-1,{0}}, #line 1953 "src/html_unescape.gperf" @@ -7113,20 +7113,20 @@ find_entity (register const char *str, register unsigned int len) #line 1963 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1796), {207, 133, 0}}, {-1,{0}}, -#line 1051 "src/html_unescape.gperf" +#line 1052 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1798), {42, 0}}, -#line 697 "src/html_unescape.gperf" +#line 696 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1799), {226, 132, 141, 0}}, #line 2028 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1800), {226, 138, 178, 0}}, {-1,{0}}, -#line 1552 "src/html_unescape.gperf" +#line 1551 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1802), {226, 132, 156, 0}}, {-1,{0}}, {-1,{0}}, #line 2047 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1805), {226, 139, 128, 0}}, #line 2051 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1806), {240, 157, 148, 180}}, + {offsetof(struct entity_pool_t, entity_pool_str1806), {240, 157, 148, 180, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 93 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1812), {226, 140, 133, 0}}, @@ -7153,7 +7153,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1842), {226, 138, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 262 "src/html_unescape.gperf" +#line 263 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1849), {226, 138, 150, 0}}, {-1,{0}}, #line 1341 "src/html_unescape.gperf" @@ -7163,21 +7163,21 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 552 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1859), {240, 157, 148, 137}}, + {offsetof(struct entity_pool_t, entity_pool_str1859), {240, 157, 148, 137, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1444 "src/html_unescape.gperf" +#line 1446 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1865), {226, 170, 181, 0}}, {-1,{0}}, -#line 379 "src/html_unescape.gperf" +#line 378 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1867), {226, 139, 132, 0}}, #line 1363 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1868), {194, 186, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1102 "src/html_unescape.gperf" +#line 1103 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1873), {226, 135, 151, 0}}, #line 763 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1874), {240, 157, 149, 128}}, -#line 259 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str1874), {240, 157, 149, 128, 0}}, +#line 260 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1875), {226, 138, 153, 0}}, {-1,{0}}, {-1,{0}}, #line 1452 "src/html_unescape.gperf" @@ -7199,26 +7199,26 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1907), {226, 168, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1736 "src/html_unescape.gperf" +#line 1737 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1917), {226, 138, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 792 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1925), {240, 157, 149, 155}}, + {offsetof(struct entity_pool_t, entity_pool_str1925), {240, 157, 149, 155, 0}}, {-1,{0}}, {-1,{0}}, #line 1962 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1928), {206, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 278 "src/html_unescape.gperf" +#line 279 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1936), {226, 169, 180, 0}}, {-1,{0}}, #line 1300 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1938), {60, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str1938), {60, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, #line 1114 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1941), {226, 137, 170, 0}}, -#line 277 "src/html_unescape.gperf" +#line 276 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1942), {226, 136, 183, 0}}, {-1,{0}}, {-1,{0}}, #line 204 "src/html_unescape.gperf" @@ -7230,12 +7230,12 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1950), {226, 168, 166, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 734 "src/html_unescape.gperf" +#line 735 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1959), {226, 132, 145, 0}}, #line 480 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1960), {226, 170, 150, 0}}, {-1,{0}}, {-1,{0}}, -#line 1370 "src/html_unescape.gperf" +#line 1369 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1963), {226, 132, 180, 0}}, #line 1821 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1964), {226, 164, 170, 0}}, @@ -7247,7 +7247,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1973), {226, 156, 160, 0}}, {-1,{0}}, #line 1048 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1975), {240, 157, 148, 170}}, + {offsetof(struct entity_pool_t, entity_pool_str1975), {240, 157, 148, 170, 0}}, #line 1504 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1976), {226, 164, 158, 0}}, #line 528 "src/html_unescape.gperf" @@ -7264,13 +7264,13 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str1987), {226, 137, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 627 "src/html_unescape.gperf" +#line 626 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str1996), {226, 137, 183, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 380 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2003), {226, 153, 166, 0}}, -#line 655 "src/html_unescape.gperf" +#line 653 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2004), {62, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7282,13 +7282,13 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, #line 1954 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2023), {226, 134, 191, 0}}, -#line 1731 "src/html_unescape.gperf" +#line 1732 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2024), {226, 138, 147, 0}}, #line 1003 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2025), {226, 170, 141, 0}}, {-1,{0}}, #line 1157 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2027), {226, 137, 170, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2027), {226, 137, 170, 226, 131, 146, 0}}, {-1,{0}}, #line 1194 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2029), {226, 137, 174, 0}}, @@ -7296,13 +7296,13 @@ find_entity (register const char *str, register unsigned int len) #line 630 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2031), {226, 170, 138, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1634 "src/html_unescape.gperf" +#line 1636 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2035), {226, 170, 184, 0}}, {-1,{0}}, {-1,{0}}, #line 1036 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2038), {226, 134, 164, 0}}, #line 1197 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2039), {226, 137, 170, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2039), {226, 137, 170, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1550 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2043), {226, 140, 139, 0}}, @@ -7342,18 +7342,18 @@ find_entity (register const char *str, register unsigned int len) #line 860 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2079), {123, 0}}, {-1,{0}}, -#line 2120 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2081), {240, 157, 148, 183}}, +#line 2121 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2081), {240, 157, 148, 183, 0}}, {-1,{0}}, {-1,{0}}, #line 1946 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2084), {226, 134, 145, 0}}, {-1,{0}}, -#line 632 "src/html_unescape.gperf" +#line 633 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2086), {226, 170, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1640 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2090), {226, 170, 176, 0}}, -#line 739 "src/html_unescape.gperf" +#line 732 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2091), {226, 132, 145, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1526 "src/html_unescape.gperf" @@ -7362,8 +7362,8 @@ find_entity (register const char *str, register unsigned int len) #line 856 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2098), {196, 190, 0}}, #line 1349 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2099), {240, 157, 149, 134}}, -#line 1636 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2099), {240, 157, 149, 134, 0}}, +#line 1638 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2100), {197, 161, 0}}, #line 88 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2101), {226, 136, 189, 0}}, @@ -7385,7 +7385,7 @@ find_entity (register const char *str, register unsigned int len) #line 566 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2113), {226, 139, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 701 "src/html_unescape.gperf" +#line 700 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2119), {226, 132, 139, 0}}, {-1,{0}}, #line 1091 "src/html_unescape.gperf" @@ -7399,7 +7399,7 @@ find_entity (register const char *str, register unsigned int len) #line 1886 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2128), {226, 168, 185, 0}}, {-1,{0}}, {-1,{0}}, -#line 378 "src/html_unescape.gperf" +#line 379 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2131), {226, 139, 132, 0}}, {-1,{0}}, {-1,{0}}, #line 1096 "src/html_unescape.gperf" @@ -7421,7 +7421,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 144 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2150), {240, 157, 148, 185}}, + {offsetof(struct entity_pool_t, entity_pool_str2150), {240, 157, 148, 185, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 394 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2156), {36, 0}}, @@ -7450,7 +7450,7 @@ find_entity (register const char *str, register unsigned int len) #line 106 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2190), {207, 182, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 770 "src/html_unescape.gperf" +#line 769 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2194), {226, 132, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1227 "src/html_unescape.gperf" @@ -7464,18 +7464,18 @@ find_entity (register const char *str, register unsigned int len) #line 756 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2205), {226, 168, 188, 0}}, {-1,{0}}, -#line 1271 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2207), {226, 171, 134, 0}}, +#line 1272 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2207), {226, 171, 134, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, #line 1308 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2210), {226, 134, 150, 0}}, -#line 1263 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2211), {226, 171, 133, 0}}, +#line 1264 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2211), {226, 171, 133, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, #line 1125 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2214), {226, 169, 190, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2214), {226, 169, 190, 204, 184, 0}}, {-1,{0}}, -#line 1948 "src/html_unescape.gperf" +#line 1947 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2216), {226, 135, 145, 0}}, #line 604 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2217), {226, 137, 165, 0}}, @@ -7485,25 +7485,25 @@ find_entity (register const char *str, register unsigned int len) #line 1698 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2223), {226, 136, 150, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1635 "src/html_unescape.gperf" +#line 1637 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2228), {197, 160, 0}}, {-1,{0}}, #line 1301 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2230), {226, 138, 180, 0}}, -#line 612 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2230), {226, 138, 180, 226, 131, 146, 0}}, +#line 611 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2231), {226, 169, 190, 0}}, #line 135 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2232), {226, 144, 163, 0}}, -#line 1484 "src/html_unescape.gperf" +#line 1483 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2233), {34, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 139 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2238), {226, 150, 136, 0}}, -#line 1873 "src/html_unescape.gperf" +#line 1874 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2239), {226, 132, 162, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 794 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2245), {240, 157, 146, 191}}, + {offsetof(struct entity_pool_t, entity_pool_str2245), {240, 157, 146, 191, 0}}, #line 2046 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2246), {226, 136, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7528,7 +7528,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 635 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2273), {226, 137, 169, 0}}, -#line 1461 "src/html_unescape.gperf" +#line 1462 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2274), {226, 136, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 774 "src/html_unescape.gperf" @@ -7544,7 +7544,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 568 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2290), {226, 132, 177, 0}}, -#line 1462 "src/html_unescape.gperf" +#line 1461 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2291), {226, 136, 183, 0}}, {-1,{0}}, {-1,{0}}, #line 1122 "src/html_unescape.gperf" @@ -7553,7 +7553,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2295), {196, 189, 0}}, {-1,{0}}, #line 1123 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2297), {226, 137, 167, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2297), {226, 137, 167, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7581,37 +7581,37 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1366 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2343), {226, 169, 151, 0}}, -#line 676 "src/html_unescape.gperf" +#line 675 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2344), {226, 134, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 845 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2350), {226, 170, 173, 0}}, {-1,{0}}, -#line 243 "src/html_unescape.gperf" +#line 242 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2352), {194, 183, 0}}, {-1,{0}}, {-1,{0}}, #line 1328 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2355), {240, 157, 148, 172}}, + {offsetof(struct entity_pool_t, entity_pool_str2355), {240, 157, 148, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1103 "src/html_unescape.gperf" +#line 1104 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2359), {226, 134, 151, 0}}, {-1,{0}}, #line 1473 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2361), {226, 168, 140, 0}}, {-1,{0}}, {-1,{0}}, #line 846 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2364), {226, 170, 173, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2364), {226, 170, 173, 239, 184, 128, 0}}, #line 801 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2365), {207, 176, 0}}, {-1,{0}}, {-1,{0}}, #line 698 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2368), {226, 128, 149, 0}}, #line 475 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2369), {240, 157, 148, 136}}, + {offsetof(struct entity_pool_t, entity_pool_str2369), {240, 157, 148, 136, 0}}, #line 692 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2370), {226, 135, 191, 0}}, -#line 1239 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2371), {226, 170, 175, 0}}, +#line 1237 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2371), {226, 170, 175, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 747 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2377), {196, 177, 0}}, @@ -7638,8 +7638,8 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2410), {226, 166, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1369 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2419), {240, 157, 146, 170}}, +#line 1370 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2419), {240, 157, 146, 170, 0}}, {-1,{0}}, {-1,{0}}, #line 1418 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2422), {226, 136, 148, 0}}, @@ -7651,14 +7651,14 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2429), {226, 136, 188, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1445 "src/html_unescape.gperf" +#line 1447 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2440), {226, 139, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1090 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2444), {197, 135, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1079 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2449), {226, 169, 176, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2449), {226, 169, 176, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 727 "src/html_unescape.gperf" @@ -7666,7 +7666,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 198 "src/html_unescape.gperf" +#line 197 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2470), {226, 132, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7683,26 +7683,26 @@ find_entity (register const char *str, register unsigned int len) #line 1296 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2491), {226, 164, 132, 0}}, {-1,{0}}, {-1,{0}}, -#line 1191 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2494), {226, 167, 143, 0}}, +#line 1192 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2494), {226, 167, 143, 204, 184, 0}}, {-1,{0}}, #line 520 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2496), {226, 137, 159, 0}}, {-1,{0}}, #line 1193 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2498), {226, 139, 172, 0}}, -#line 1192 "src/html_unescape.gperf" +#line 1191 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2499), {226, 139, 170, 0}}, {-1,{0}}, {-1,{0}}, #line 60 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2502), {240, 157, 148, 184}}, + {offsetof(struct entity_pool_t, entity_pool_str2502), {240, 157, 148, 184, 0}}, #line 680 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2503), {226, 132, 143, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1984 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2507), {226, 166, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 688 "src/html_unescape.gperf" +#line 687 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2511), {226, 132, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1494 "src/html_unescape.gperf" @@ -7718,19 +7718,19 @@ find_entity (register const char *str, register unsigned int len) #line 352 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2523), {196, 143, 0}}, {-1,{0}}, -#line 531 "src/html_unescape.gperf" +#line 530 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2525), {226, 137, 130, 0}}, {-1,{0}}, #line 1939 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2527), {226, 139, 131, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1705 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2532), {226, 170, 172, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2532), {226, 170, 172, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 814 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2536), {240, 157, 149, 156}}, + {offsetof(struct entity_pool_t, entity_pool_str2536), {240, 157, 149, 156, 0}}, #line 638 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2537), {240, 157, 149, 152}}, + {offsetof(struct entity_pool_t, entity_pool_str2537), {240, 157, 149, 152, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1255 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2542), {226, 137, 129, 0}}, @@ -7744,7 +7744,7 @@ find_entity (register const char *str, register unsigned int len) #line 1171 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2548), {226, 136, 166, 0}}, #line 1200 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2549), {226, 170, 162, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2549), {226, 170, 162, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7752,18 +7752,18 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2565), {226, 137, 130, 0}}, {-1,{0}}, {-1,{0}}, #line 1186 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2568), {226, 139, 181, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2568), {226, 139, 181, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1525 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2572), {197, 152, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1429 "src/html_unescape.gperf" +#line 1428 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2577), {226, 132, 153, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 637 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2583), {240, 157, 148, 190}}, + {offsetof(struct entity_pool_t, entity_pool_str2583), {240, 157, 148, 190, 0}}, {-1,{0}}, {-1,{0}}, -#line 722 "src/html_unescape.gperf" +#line 721 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2586), {226, 132, 145, 0}}, {-1,{0}}, {-1,{0}}, #line 2048 "src/html_unescape.gperf" @@ -7793,14 +7793,14 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2635), {226, 137, 191, 0}}, {-1,{0}}, #line 789 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2637), {240, 157, 148, 167}}, + {offsetof(struct entity_pool_t, entity_pool_str2637), {240, 157, 148, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1961 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2645), {207, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1155 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2650), {226, 139, 152, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2650), {226, 139, 152, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, #line 419 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2653), {226, 135, 149, 0}}, @@ -7844,9 +7844,9 @@ find_entity (register const char *str, register unsigned int len) #line 997 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2707), {226, 128, 185, 0}}, {-1,{0}}, -#line 1539 "src/html_unescape.gperf" +#line 1540 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2709), {226, 132, 155, 0}}, -#line 347 "src/html_unescape.gperf" +#line 348 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2710), {226, 171, 164, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1686 "src/html_unescape.gperf" @@ -7885,26 +7885,26 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1486 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2762), {226, 136, 189, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str2762), {226, 136, 189, 204, 177, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 768 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2766), {194, 191, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 736 "src/html_unescape.gperf" +#line 737 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2774), {226, 132, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1965 "src/html_unescape.gperf" +#line 1964 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2779), {226, 138, 165, 0}}, {-1,{0}}, -#line 1052 "src/html_unescape.gperf" +#line 1053 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2781), {226, 171, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1326 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2790), {226, 166, 191, 0}}, {-1,{0}}, {-1,{0}}, -#line 356 "src/html_unescape.gperf" +#line 358 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2793), {226, 135, 138, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -7921,20 +7921,20 @@ find_entity (register const char *str, register unsigned int len) #line 2011 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2810), {226, 171, 166, 0}}, #line 1327 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2811), {240, 157, 148, 146}}, + {offsetof(struct entity_pool_t, entity_pool_str2811), {240, 157, 148, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 104 "src/html_unescape.gperf" +#line 103 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2816), {226, 136, 181, 0}}, {-1,{0}}, #line 1513 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2818), {226, 164, 156, 0}}, {-1,{0}}, -#line 843 "src/html_unescape.gperf" +#line 844 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2820), {226, 164, 155, 0}}, #line 1348 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2821), {226, 138, 150, 0}}, #line 73 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2822), {240, 157, 146, 156}}, + {offsetof(struct entity_pool_t, entity_pool_str2822), {240, 157, 146, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 509 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2826), {206, 149, 0}}, @@ -7954,13 +7954,13 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2851), {197, 190, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 816 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2856), {240, 157, 147, 128}}, -#line 648 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2856), {240, 157, 147, 128, 0}}, +#line 647 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2857), {226, 132, 138, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 113 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2862), {240, 157, 148, 133}}, -#line 607 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2862), {240, 157, 148, 133, 0}}, +#line 606 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2863), {226, 139, 155, 0}}, #line 686 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2864), {226, 138, 185, 0}}, @@ -7972,7 +7972,7 @@ find_entity (register const char *str, register unsigned int len) #line 479 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2877), {195, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1654 "src/html_unescape.gperf" +#line 1653 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2881), {226, 139, 133, 0}}, #line 1923 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2882), {195, 185, 0}}, @@ -7989,12 +7989,12 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2892), {226, 131, 155, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1466 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2897), {240, 157, 146, 171}}, + {offsetof(struct entity_pool_t, entity_pool_str2897), {240, 157, 146, 171, 0}}, #line 1407 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2898), {206, 160, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 647 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2903), {240, 157, 146, 162}}, +#line 648 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2903), {240, 157, 146, 162, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1424 "src/html_unescape.gperf" @@ -8006,8 +8006,8 @@ find_entity (register const char *str, register unsigned int len) #line 1421 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2916), {194, 177, 0}}, {-1,{0}}, {-1,{0}}, -#line 696 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2919), {240, 157, 149, 153}}, +#line 697 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str2919), {240, 157, 149, 153, 0}}, #line 593 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2920), {207, 157, 0}}, {-1,{0}}, @@ -8028,14 +8028,14 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2956), {207, 181, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1438 "src/html_unescape.gperf" +#line 1440 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2963), {226, 137, 186, 0}}, {-1,{0}}, {-1,{0}}, #line 592 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2966), {207, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 348 "src/html_unescape.gperf" +#line 347 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str2974), {226, 138, 163, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1169 "src/html_unescape.gperf" @@ -8052,7 +8052,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str2994), {226, 165, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1440 "src/html_unescape.gperf" +#line 1442 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3002), {226, 137, 188, 0}}, {-1,{0}}, {-1,{0}}, #line 1687 "src/html_unescape.gperf" @@ -8074,7 +8074,7 @@ find_entity (register const char *str, register unsigned int len) #line 1034 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3027), {226, 134, 166, 0}}, {-1,{0}}, {-1,{0}}, -#line 1861 "src/html_unescape.gperf" +#line 1859 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3030), {195, 151, 0}}, {-1,{0}}, {-1,{0}}, #line 1495 "src/html_unescape.gperf" @@ -8100,7 +8100,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 931 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3057), {226, 165, 188, 0}}, -#line 675 "src/html_unescape.gperf" +#line 677 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3058), {226, 165, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8110,19 +8110,19 @@ find_entity (register const char *str, register unsigned int len) #line 1919 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3068), {226, 165, 190, 0}}, #line 1183 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3069), {226, 137, 142, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3069), {226, 137, 142, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, -#line 895 "src/html_unescape.gperf" +#line 894 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3072), {226, 138, 163, 0}}, {-1,{0}}, -#line 1617 "src/html_unescape.gperf" +#line 1618 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3074), {226, 134, 177, 0}}, {-1,{0}}, -#line 1000 "src/html_unescape.gperf" +#line 1001 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3076), {226, 134, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 667 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3080), {226, 137, 169, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3080), {226, 137, 169, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, #line 1860 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3083), {226, 138, 160, 0}}, @@ -8145,10 +8145,10 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 904 "src/html_unescape.gperf" +#line 903 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3132), {226, 134, 191, 0}}, {-1,{0}}, {-1,{0}}, -#line 903 "src/html_unescape.gperf" +#line 904 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3135), {226, 165, 152, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 461 "src/html_unescape.gperf" @@ -8161,13 +8161,13 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3147), {195, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1238 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3155), {226, 170, 175, 0}}, +#line 1239 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3155), {226, 170, 175, 204, 184, 0}}, #line 466 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3156), {226, 137, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 358 "src/html_unescape.gperf" +#line 356 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3167), {226, 133, 134, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8175,7 +8175,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3174), {226, 137, 131, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1187 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3179), {226, 139, 185, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3179), {226, 139, 185, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8186,7 +8186,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 21 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3214), {240, 157, 148, 132}}, + {offsetof(struct entity_pool_t, entity_pool_str3214), {240, 157, 148, 132, 0}}, #line 873 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3215), {226, 134, 144, 0}}, #line 1335 "src/html_unescape.gperf" @@ -8204,33 +8204,33 @@ find_entity (register const char *str, register unsigned int len) #line 1149 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3231), {226, 135, 142, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1498 "src/html_unescape.gperf" +#line 1501 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3235), {226, 135, 165, 0}}, {-1,{0}}, -#line 831 "src/html_unescape.gperf" +#line 834 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3237), {226, 135, 164, 0}}, {-1,{0}}, -#line 700 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3239), {240, 157, 146, 189}}, +#line 701 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3239), {240, 157, 146, 189, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 901 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3246), {226, 165, 145, 0}}, {-1,{0}}, #line 807 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3248), {240, 157, 148, 168}}, + {offsetof(struct entity_pool_t, entity_pool_str3248), {240, 157, 148, 168, 0}}, #line 619 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3249), {240, 157, 148, 164}}, -#line 1945 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3249), {240, 157, 148, 164, 0}}, +#line 1948 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3250), {226, 164, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1250 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3259), {226, 170, 176, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3259), {226, 170, 176, 204, 184, 0}}, #line 1015 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3260), {226, 139, 150, 0}}, #line 616 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3261), {226, 139, 155, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3261), {226, 139, 155, 239, 184, 128, 0}}, #line 2073 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3262), {226, 168, 128, 0}}, #line 1747 "src/html_unescape.gperf" @@ -8241,14 +8241,14 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 2065 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3268), {226, 159, 183, 0}}, -#line 465 "src/html_unescape.gperf" +#line 463 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3269), {226, 137, 150, 0}}, {-1,{0}}, #line 1975 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3271), {226, 139, 176, 0}}, -#line 1085 "src/html_unescape.gperf" +#line 1083 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3272), {226, 153, 174, 0}}, -#line 1001 "src/html_unescape.gperf" +#line 1000 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3273), {226, 134, 176, 0}}, #line 745 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3274), {226, 136, 158, 0}}, @@ -8264,10 +8264,10 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3285), {226, 168, 130, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1400 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3289), {240, 157, 148, 147}}, + {offsetof(struct entity_pool_t, entity_pool_str3289), {240, 157, 148, 147, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 618 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3295), {240, 157, 148, 138}}, + {offsetof(struct entity_pool_t, entity_pool_str3295), {240, 157, 148, 138, 0}}, {-1,{0}}, {-1,{0}}, #line 115 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3298), {226, 139, 130, 0}}, @@ -8312,10 +8312,10 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3356), {207, 130, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1499 "src/html_unescape.gperf" +#line 1502 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3366), {226, 164, 160, 0}}, {-1,{0}}, -#line 832 "src/html_unescape.gperf" +#line 835 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3368), {226, 164, 159, 0}}, {-1,{0}}, {-1,{0}}, #line 2078 "src/html_unescape.gperf" @@ -8326,7 +8326,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 274 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3378), {226, 153, 163, 0}}, -#line 677 "src/html_unescape.gperf" +#line 676 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3379), {226, 135, 148, 0}}, #line 1625 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3380), {226, 138, 181, 0}}, @@ -8359,18 +8359,18 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3405), {203, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 875 "src/html_unescape.gperf" +#line 874 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3412), {226, 135, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 617 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3417), {226, 170, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 217 "src/html_unescape.gperf" +#line 214 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3422), {226, 136, 169, 0}}, #line 1751 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3423), {194, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1014 "src/html_unescape.gperf" +#line 1010 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3427), {226, 137, 170, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8393,7 +8393,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3468), {226, 132, 180, 0}}, {-1,{0}}, {-1,{0}}, #line 222 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3471), {226, 136, 169, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3471), {226, 136, 169, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 302 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3475), {226, 156, 151, 0}}, @@ -8417,12 +8417,12 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3505), {226, 151, 131, 0}}, #line 777 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3506), {226, 129, 162, 0}}, -#line 1598 "src/html_unescape.gperf" +#line 1597 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3507), {226, 142, 177, 0}}, {-1,{0}}, -#line 954 "src/html_unescape.gperf" +#line 953 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3509), {226, 142, 176, 0}}, -#line 633 "src/html_unescape.gperf" +#line 632 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3510), {226, 137, 169, 0}}, #line 936 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3511), {226, 170, 145, 0}}, @@ -8449,18 +8449,18 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1120 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3534), {226, 137, 167, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3534), {226, 137, 167, 204, 184, 0}}, #line 1309 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3535), {226, 164, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 917 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3543), {226, 139, 154, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3543), {226, 139, 154, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, -#line 1415 "src/html_unescape.gperf" +#line 1416 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3546), {226, 138, 158, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1618 "src/html_unescape.gperf" +#line 1617 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3550), {226, 134, 177, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 299 "src/html_unescape.gperf" @@ -8469,9 +8469,9 @@ find_entity (register const char *str, register unsigned int len) #line 746 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3557), {226, 167, 157, 0}}, {-1,{0}}, -#line 738 "src/html_unescape.gperf" +#line 739 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3559), {196, 177, 0}}, -#line 530 "src/html_unescape.gperf" +#line 531 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3560), {226, 169, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1402 "src/html_unescape.gperf" @@ -8482,7 +8482,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3573), {226, 170, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2030 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3579), {226, 138, 131, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3579), {226, 138, 131, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, #line 1690 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3582), {226, 170, 160, 0}}, @@ -8494,7 +8494,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3591), {226, 159, 186, 0}}, {-1,{0}}, {-1,{0}}, #line 1295 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3594), {62, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3594), {62, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8516,16 +8516,16 @@ find_entity (register const char *str, register unsigned int len) #line 1489 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3628), {226, 136, 154, 0}}, {-1,{0}}, {-1,{0}}, -#line 687 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3631), {240, 157, 148, 165}}, +#line 688 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3631), {240, 157, 148, 165, 0}}, #line 2115 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3632), {197, 188, 0}}, #line 1029 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3633), {226, 153, 130, 0}}, {-1,{0}}, -#line 1500 "src/html_unescape.gperf" +#line 1503 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3635), {226, 164, 179, 0}}, -#line 1436 "src/html_unescape.gperf" +#line 1437 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3636), {226, 137, 186, 0}}, #line 1646 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3637), {226, 170, 186, 0}}, @@ -8538,13 +8538,13 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1011 "src/html_unescape.gperf" +#line 1014 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3657), {226, 169, 185, 0}}, #line 762 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3658), {196, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 216 "src/html_unescape.gperf" +#line 218 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3665), {226, 169, 139, 0}}, {-1,{0}}, #line 720 "src/html_unescape.gperf" @@ -8553,7 +8553,7 @@ find_entity (register const char *str, register unsigned int len) #line 360 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3669), {226, 169, 183, 0}}, {-1,{0}}, -#line 263 "src/html_unescape.gperf" +#line 264 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3671), {226, 138, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1622 "src/html_unescape.gperf" @@ -8562,7 +8562,7 @@ find_entity (register const char *str, register unsigned int len) #line 1016 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3678), {226, 139, 139, 0}}, {-1,{0}}, {-1,{0}}, -#line 1441 "src/html_unescape.gperf" +#line 1443 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3681), {226, 137, 190, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 449 "src/html_unescape.gperf" @@ -8606,14 +8606,14 @@ find_entity (register const char *str, register unsigned int len) #line 951 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3720), {196, 191, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1947 "src/html_unescape.gperf" +#line 1945 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3725), {226, 134, 145, 0}}, {-1,{0}}, #line 1511 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3727), {226, 134, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 438 "src/html_unescape.gperf" +#line 437 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3738), {226, 138, 164, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 555 "src/html_unescape.gperf" @@ -8626,7 +8626,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1299 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3756), {226, 137, 164, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3756), {226, 137, 164, 226, 131, 146, 0}}, {-1,{0}}, #line 1883 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3758), {226, 137, 156, 0}}, @@ -8648,8 +8648,8 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3772), {226, 135, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 293 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3780), {240, 157, 149, 148}}, +#line 294 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3780), {240, 157, 149, 148, 0}}, {-1,{0}}, #line 292 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3782), {226, 136, 174, 0}}, @@ -8674,22 +8674,22 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3817), {226, 134, 147, 0}}, {-1,{0}}, #line 2075 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3819), {240, 157, 149, 169}}, + {offsetof(struct entity_pool_t, entity_pool_str3819), {240, 157, 149, 169, 0}}, {-1,{0}}, #line 1631 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3821), {197, 154, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2039 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3829), {226, 171, 140, 0}}, -#line 265 "src/html_unescape.gperf" +#line 2040 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3829), {226, 171, 140, 239, 184, 128, 0}}, +#line 252 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3830), {226, 151, 139, 0}}, -#line 1414 "src/html_unescape.gperf" +#line 1415 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3831), {226, 168, 163, 0}}, #line 308 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3832), {226, 171, 144, 0}}, -#line 2037 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3833), {226, 171, 139, 0}}, +#line 2038 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str3833), {226, 171, 139, 239, 184, 128, 0}}, #line 1901 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3834), {195, 154, 0}}, {-1,{0}}, @@ -8697,11 +8697,11 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str3836), {226, 139, 185, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 606 "src/html_unescape.gperf" +#line 607 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3845), {226, 170, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1719 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3851), {226, 138, 148, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str3851), {226, 138, 148, 239, 184, 128, 0}}, {-1,{0}}, #line 1701 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3853), {226, 136, 163, 0}}, @@ -8717,7 +8717,7 @@ find_entity (register const char *str, register unsigned int len) #line 477 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3861), {226, 170, 154, 0}}, {-1,{0}}, {-1,{0}}, -#line 33 "src/html_unescape.gperf" +#line 32 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3864), {38, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8728,13 +8728,13 @@ find_entity (register const char *str, register unsigned int len) #line 1862 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3883), {226, 168, 176, 0}}, {-1,{0}}, {-1,{0}}, -#line 433 "src/html_unescape.gperf" +#line 432 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3886), {226, 134, 189, 0}}, #line 2130 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3887), {226, 128, 140, 0}}, #line 818 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3888), {196, 185, 0}}, -#line 432 "src/html_unescape.gperf" +#line 433 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str3889), {226, 165, 150, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8837,9 +8837,9 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4022), {226, 138, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1027 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4028), {226, 137, 168, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4028), {226, 137, 168, 239, 184, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 894 "src/html_unescape.gperf" +#line 895 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4033), {226, 134, 164, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1075 "src/html_unescape.gperf" @@ -8853,24 +8853,24 @@ find_entity (register const char *str, register unsigned int len) #line 1559 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4047), {207, 177, 0}}, {-1,{0}}, -#line 912 "src/html_unescape.gperf" +#line 913 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4049), {226, 170, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1789 "src/html_unescape.gperf" +#line 1791 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4055), {194, 185, 0}}, {-1,{0}}, {-1,{0}}, -#line 1790 "src/html_unescape.gperf" +#line 1792 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4058), {194, 178, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1791 "src/html_unescape.gperf" +#line 1793 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4066), {194, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 118 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4071), {226, 168, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 424 "src/html_unescape.gperf" +#line 423 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4078), {226, 135, 147, 0}}, {-1,{0}}, #line 2082 "src/html_unescape.gperf" @@ -8881,19 +8881,19 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1106 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4087), {226, 128, 139, 0}}, -#line 209 "src/html_unescape.gperf" +#line 208 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4088), {226, 137, 143, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 305 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4100), {240, 157, 146, 184}}, + {offsetof(struct entity_pool_t, entity_pool_str4100), {240, 157, 146, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1248 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4109), {226, 138, 129, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1792 "src/html_unescape.gperf" +#line 1789 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4115), {226, 138, 131, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -8915,12 +8915,12 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4137), {196, 176, 0}}, {-1,{0}}, #line 2081 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4139), {240, 157, 147, 141}}, + {offsetof(struct entity_pool_t, entity_pool_str4139), {240, 157, 147, 141, 0}}, #line 2068 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4140), {206, 190, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1131 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4144), {226, 137, 171, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4144), {226, 137, 171, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 165 "src/html_unescape.gperf" @@ -8971,10 +8971,10 @@ find_entity (register const char *str, register unsigned int len) #line 605 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4234), {226, 137, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 63 "src/html_unescape.gperf" +#line 62 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4238), {226, 137, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1793 "src/html_unescape.gperf" +#line 1790 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4243), {226, 139, 145, 0}}, #line 401 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4244), {226, 137, 145, 0}}, @@ -9013,7 +9013,7 @@ find_entity (register const char *str, register unsigned int len) #line 824 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4287), {226, 159, 168, 0}}, {-1,{0}}, {-1,{0}}, -#line 1315 "src/html_unescape.gperf" +#line 1313 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4290), {226, 138, 154, 0}}, {-1,{0}}, #line 1515 "src/html_unescape.gperf" @@ -9026,11 +9026,11 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, #line 1018 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4307), {226, 165, 182, 0}}, -#line 194 "src/html_unescape.gperf" +#line 195 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4308), {203, 152, 0}}, {-1,{0}}, #line 1077 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4310), {226, 136, 160, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4310), {226, 136, 160, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1817 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4315), {226, 164, 166, 0}}, @@ -9044,9 +9044,9 @@ find_entity (register const char *str, register unsigned int len) #line 1815 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4325), {226, 171, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 321 "src/html_unescape.gperf" +#line 318 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4329), {226, 139, 147, 0}}, -#line 65 "src/html_unescape.gperf" +#line 64 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4330), {226, 137, 138, 0}}, #line 1481 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4331), {63, 0}}, @@ -9075,7 +9075,7 @@ find_entity (register const char *str, register unsigned int len) #line 1268 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4364), {226, 138, 129, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 966 "src/html_unescape.gperf" +#line 965 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4368), {226, 159, 181, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9083,11 +9083,11 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4377), {226, 170, 129, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1806 "src/html_unescape.gperf" +#line 1805 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4384), {226, 138, 139, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1126 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4388), {226, 139, 153, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4388), {226, 139, 153, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1490 "src/html_unescape.gperf" @@ -9139,7 +9139,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4452), {226, 159, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1152 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4456), {226, 169, 189, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4456), {226, 169, 189, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1633 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4462), {226, 128, 154, 0}}, @@ -9157,24 +9157,24 @@ find_entity (register const char *str, register unsigned int len) #line 1986 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4471), {207, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 253 "src/html_unescape.gperf" +#line 254 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4475), {226, 137, 151, 0}}, {-1,{0}}, #line 2101 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4477), {240, 157, 149, 170}}, + {offsetof(struct entity_pool_t, entity_pool_str4477), {240, 157, 149, 170, 0}}, {-1,{0}}, #line 1940 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4479), {226, 138, 142, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 825 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4484), {226, 159, 170, 0}}, -#line 1100 "src/html_unescape.gperf" +#line 1101 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4485), {226, 164, 164, 0}}, #line 1673 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4486), {209, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 244 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4492), {240, 157, 148, 160}}, +#line 245 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str4492), {240, 157, 148, 160, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9190,11 +9190,11 @@ find_entity (register const char *str, register unsigned int len) #line 1811 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4512), {226, 171, 134, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1544 "src/html_unescape.gperf" +#line 1545 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4517), {194, 174, 0}}, #line 30 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4518), {196, 129, 0}}, -#line 908 "src/html_unescape.gperf" +#line 907 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4519), {226, 139, 154, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2049 "src/html_unescape.gperf" @@ -9207,7 +9207,7 @@ find_entity (register const char *str, register unsigned int len) #line 1140 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4530), {209, 154, 0}}, #line 2064 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4531), {240, 157, 148, 181}}, + {offsetof(struct entity_pool_t, entity_pool_str4531), {240, 157, 148, 181, 0}}, {-1,{0}}, #line 1071 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4533), {206, 188, 0}}, @@ -9222,7 +9222,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 886 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4551), {226, 135, 135, 0}}, -#line 1786 "src/html_unescape.gperf" +#line 1787 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4552), {226, 136, 145, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9235,7 +9235,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1286 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4573), {35, 0}}, -#line 32 "src/html_unescape.gperf" +#line 33 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4574), {38, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9256,23 +9256,23 @@ find_entity (register const char *str, register unsigned int len) #line 447 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4596), {196, 144, 0}}, {-1,{0}}, -#line 36 "src/html_unescape.gperf" +#line 34 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4598), {226, 136, 167, 0}}, #line 1179 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4599), {226, 137, 171, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4599), {226, 137, 171, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1181 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4606), {226, 169, 190, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4606), {226, 169, 190, 204, 184, 0}}, {-1,{0}}, #line 1180 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4608), {226, 137, 185, 0}}, -#line 1483 "src/html_unescape.gperf" +#line 1484 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4609), {34, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1178 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4616), {226, 137, 167, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4616), {226, 137, 167, 204, 184, 0}}, #line 708 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4617), {226, 128, 144, 0}}, #line 1411 "src/html_unescape.gperf" @@ -9311,7 +9311,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1386 "src/html_unescape.gperf" +#line 1387 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4668), {194, 182, 0}}, {-1,{0}}, {-1,{0}}, #line 76 "src/html_unescape.gperf" @@ -9321,7 +9321,7 @@ find_entity (register const char *str, register unsigned int len) #line 1482 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4678), {226, 137, 159, 0}}, {-1,{0}}, -#line 1787 "src/html_unescape.gperf" +#line 1786 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4680), {226, 136, 145, 0}}, {-1,{0}}, #line 444 "src/html_unescape.gperf" @@ -9333,14 +9333,14 @@ find_entity (register const char *str, register unsigned int len) #line 2122 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4686), {208, 150, 0}}, {-1,{0}}, {-1,{0}}, -#line 965 "src/html_unescape.gperf" +#line 966 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4689), {226, 159, 181, 0}}, {-1,{0}}, #line 346 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4691), {226, 128, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 437 "src/html_unescape.gperf" +#line 438 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4699), {226, 134, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9394,10 +9394,10 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4762), {209, 145, 0}}, {-1,{0}}, #line 1207 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4764), {226, 170, 175, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4764), {226, 170, 175, 204, 184, 0}}, {-1,{0}}, #line 61 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4766), {240, 157, 149, 146}}, + {offsetof(struct entity_pool_t, entity_pool_str4766), {240, 157, 149, 146, 0}}, {-1,{0}}, #line 251 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4768), {207, 135, 0}}, @@ -9423,7 +9423,7 @@ find_entity (register const char *str, register unsigned int len) #line 1006 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4796), {226, 128, 152, 0}}, #line 2103 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4797), {240, 157, 147, 142}}, + {offsetof(struct entity_pool_t, entity_pool_str4797), {240, 157, 147, 142, 0}}, {-1,{0}}, {-1,{0}}, #line 603 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4800), {196, 161, 0}}, @@ -9433,10 +9433,10 @@ find_entity (register const char *str, register unsigned int len) #line 809 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4803), {208, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 202 "src/html_unescape.gperf" +#line 203 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4809), {226, 167, 133, 0}}, #line 1213 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4810), {226, 138, 143, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4810), {226, 138, 143, 204, 184, 0}}, #line 1672 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4811), {208, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9468,7 +9468,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4846), {196, 160, 0}}, {-1,{0}}, #line 1215 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4848), {226, 138, 144, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str4848), {226, 138, 144, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 8 "src/html_unescape.gperf" @@ -9498,7 +9498,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4882), {226, 151, 131, 0}}, #line 1182 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4883), {226, 137, 181, 0}}, -#line 279 "src/html_unescape.gperf" +#line 278 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4884), {226, 137, 148, 0}}, {-1,{0}}, #line 967 "src/html_unescape.gperf" @@ -9507,7 +9507,7 @@ find_entity (register const char *str, register unsigned int len) #line 766 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4888), {206, 185, 0}}, {-1,{0}}, -#line 276 "src/html_unescape.gperf" +#line 277 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4890), {58, 0}}, #line 2118 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4891), {206, 150, 0}}, @@ -9519,7 +9519,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, #line 2104 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4900), {208, 174, 0}}, -#line 1545 "src/html_unescape.gperf" +#line 1544 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4901), {194, 174, 0}}, #line 1822 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4902), {195, 159, 0}}, @@ -9535,7 +9535,7 @@ find_entity (register const char *str, register unsigned int len) #line 538 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4918), {226, 130, 172, 0}}, {-1,{0}}, {-1,{0}}, -#line 874 "src/html_unescape.gperf" +#line 872 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4921), {226, 134, 144, 0}}, {-1,{0}}, {-1,{0}}, #line 221 "src/html_unescape.gperf" @@ -9577,7 +9577,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str4952), {208, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 319 "src/html_unescape.gperf" +#line 320 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str4961), {226, 137, 141, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9633,7 +9633,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str5063), {226, 139, 136, 0}}, {-1,{0}}, #line 557 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5065), {102, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str5065), {102, 106, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1907 "src/html_unescape.gperf" @@ -9650,7 +9650,7 @@ find_entity (register const char *str, register unsigned int len) #line 2000 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5085), {226, 138, 178, 0}}, #line 74 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5086), {240, 157, 146, 182}}, + {offsetof(struct entity_pool_t, entity_pool_str5086), {240, 157, 146, 182, 0}}, {-1,{0}}, {-1,{0}}, #line 1775 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5089), {226, 137, 189, 0}}, @@ -9659,13 +9659,13 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str5093), {226, 136, 178, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1638 "src/html_unescape.gperf" +#line 1634 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5101), {226, 137, 187, 0}}, {-1,{0}}, #line 559 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5103), {239, 172, 130, 0}}, {-1,{0}}, -#line 256 "src/html_unescape.gperf" +#line 257 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5105), {226, 138, 155, 0}}, {-1,{0}}, {-1,{0}}, #line 2009 "src/html_unescape.gperf" @@ -9705,7 +9705,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str5173), {226, 137, 187, 0}}, #line 1310 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5174), {195, 147, 0}}, -#line 1874 "src/html_unescape.gperf" +#line 1873 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5175), {226, 132, 162, 0}}, #line 1139 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5176), {208, 138, 0}}, @@ -9715,19 +9715,19 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2097 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5189), {240, 157, 148, 182}}, + {offsetof(struct entity_pool_t, entity_pool_str5189), {240, 157, 148, 182, 0}}, {-1,{0}}, {-1,{0}}, #line 284 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5192), {226, 136, 152, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 656 "src/html_unescape.gperf" +#line 652 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5197), {226, 137, 171, 0}}, #line 1647 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5198), {226, 170, 182, 0}}, #line 731 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5199), {196, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 261 "src/html_unescape.gperf" +#line 262 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5203), {226, 147, 136, 0}}, {-1,{0}}, {-1,{0}}, #line 2095 "src/html_unescape.gperf" @@ -9752,7 +9752,7 @@ find_entity (register const char *str, register unsigned int len) #line 280 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5227), {226, 137, 148, 0}}, {-1,{0}}, -#line 1637 "src/html_unescape.gperf" +#line 1635 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5229), {226, 170, 188, 0}}, #line 629 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5230), {226, 170, 164, 0}}, @@ -9794,14 +9794,14 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 58 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5268), {196, 132, 0}}, -#line 898 "src/html_unescape.gperf" +#line 899 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5269), {226, 167, 143, 0}}, {-1,{0}}, {-1,{0}}, #line 615 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5272), {226, 170, 132, 0}}, #line 900 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5273), {226, 138, 180, 0}}, -#line 899 "src/html_unescape.gperf" +#line 898 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5274), {226, 138, 178, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 290 "src/html_unescape.gperf" @@ -9886,10 +9886,10 @@ find_entity (register const char *str, register unsigned int len) #line 1280 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5405), {226, 139, 170, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1580 "src/html_unescape.gperf" +#line 1579 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5411), {226, 138, 162, 0}}, #line 1294 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5412), {226, 137, 165, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str5412), {226, 137, 165, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9900,7 +9900,7 @@ find_entity (register const char *str, register unsigned int len) #line 987 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5431), {226, 151, 138, 0}}, {-1,{0}}, {-1,{0}}, -#line 1583 "src/html_unescape.gperf" +#line 1584 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5434), {226, 167, 144, 0}}, {-1,{0}}, #line 1581 "src/html_unescape.gperf" @@ -9908,7 +9908,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 1585 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5438), {226, 138, 181, 0}}, -#line 1584 "src/html_unescape.gperf" +#line 1583 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5439), {226, 138, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9928,27 +9928,27 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 22 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5478), {240, 157, 148, 158}}, + {offsetof(struct entity_pool_t, entity_pool_str5478), {240, 157, 148, 158, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 376 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5482), {203, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 882 "src/html_unescape.gperf" +#line 881 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5489), {226, 135, 131, 0}}, {-1,{0}}, {-1,{0}}, -#line 881 "src/html_unescape.gperf" +#line 882 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5492), {226, 165, 153, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 907 "src/html_unescape.gperf" +#line 908 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5501), {226, 170, 139, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 68 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5509), {226, 129, 161, 0}}, {-1,{0}}, {-1,{0}}, -#line 208 "src/html_unescape.gperf" +#line 209 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5512), {226, 170, 174, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -9967,7 +9967,7 @@ find_entity (register const char *str, register unsigned int len) #line 229 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5543), {195, 135, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 260 "src/html_unescape.gperf" +#line 261 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5547), {194, 174, 0}}, #line 880 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5548), {226, 165, 161, 0}}, @@ -9979,13 +9979,13 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str5556), {226, 137, 144, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 242 "src/html_unescape.gperf" +#line 243 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5564), {194, 183, 0}}, {-1,{0}}, #line 1281 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5566), {226, 139, 172, 0}}, {-1,{0}}, -#line 1056 "src/html_unescape.gperf" +#line 1055 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5568), {226, 136, 146, 0}}, {-1,{0}}, #line 623 "src/html_unescape.gperf" @@ -9994,7 +9994,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 6 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5577), {195, 129, 0}}, -#line 653 "src/html_unescape.gperf" +#line 656 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5578), {226, 169, 186, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 661 "src/html_unescape.gperf" @@ -10002,7 +10002,7 @@ find_entity (register const char *str, register unsigned int len) #line 205 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5584), {226, 128, 162, 0}}, {-1,{0}}, {-1,{0}}, -#line 423 "src/html_unescape.gperf" +#line 421 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5587), {226, 134, 147, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1536 "src/html_unescape.gperf" @@ -10029,15 +10029,15 @@ find_entity (register const char *str, register unsigned int len) #line 703 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5618), {196, 166, 0}}, {-1,{0}}, -#line 543 "src/html_unescape.gperf" +#line 544 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5620), {226, 133, 135, 0}}, -#line 1055 "src/html_unescape.gperf" +#line 1056 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5621), {226, 138, 159, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1587 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5625), {226, 165, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1964 "src/html_unescape.gperf" +#line 1965 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5630), {226, 134, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10060,13 +10060,13 @@ find_entity (register const char *str, register unsigned int len) #line 729 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5666), {226, 132, 169, 0}}, {-1,{0}}, {-1,{0}}, -#line 62 "src/html_unescape.gperf" +#line 63 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5669), {226, 169, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1092 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5673), {197, 133, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 214 "src/html_unescape.gperf" +#line 216 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5678), {226, 169, 132, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10079,7 +10079,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str5690), {226, 139, 169, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1540 "src/html_unescape.gperf" +#line 1541 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5699), {226, 132, 156, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 897 "src/html_unescape.gperf" @@ -10110,11 +10110,11 @@ find_entity (register const char *str, register unsigned int len) #line 1173 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5741), {226, 137, 160, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1848 "src/html_unescape.gperf" +#line 1849 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5747), {226, 128, 137, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 64 "src/html_unescape.gperf" +#line 65 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5754), {226, 169, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10130,7 +10130,7 @@ find_entity (register const char *str, register unsigned int len) #line 620 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5776), {226, 137, 171, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1378 "src/html_unescape.gperf" +#line 1376 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5780), {226, 138, 151, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10144,13 +10144,13 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 535 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5807), {195, 176, 0}}, -#line 1805 "src/html_unescape.gperf" +#line 1806 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5808), {226, 171, 140, 0}}, {-1,{0}}, {-1,{0}}, #line 84 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5811), {226, 168, 145, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 195 "src/html_unescape.gperf" +#line 194 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5817), {203, 152, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 621 "src/html_unescape.gperf" @@ -10211,7 +10211,7 @@ find_entity (register const char *str, register unsigned int len) #line 1876 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5923), {226, 150, 191, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 969 "src/html_unescape.gperf" +#line 968 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5927), {226, 159, 183, 0}}, #line 1572 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5928), {226, 140, 139, 0}}, @@ -10230,7 +10230,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 668 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5949), {226, 137, 169, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str5949), {226, 137, 169, 239, 184, 128, 0}}, {-1,{0}}, #line 164 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5951), {226, 148, 180, 0}}, @@ -10238,14 +10238,14 @@ find_entity (register const char *str, register unsigned int len) #line 658 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5956), {226, 166, 149, 0}}, {-1,{0}}, {-1,{0}}, -#line 1237 "src/html_unescape.gperf" +#line 1238 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5959), {226, 138, 128, 0}}, {-1,{0}}, {-1,{0}}, #line 1380 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5962), {195, 182, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 611 "src/html_unescape.gperf" +#line 612 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5970), {226, 170, 169, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 536 "src/html_unescape.gperf" @@ -10257,11 +10257,11 @@ find_entity (register const char *str, register unsigned int len) #line 1937 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5982), {226, 142, 181, 0}}, #line 1161 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5983), {226, 137, 170, 0}}, -#line 872 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str5983), {226, 137, 170, 204, 184, 0}}, +#line 875 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str5984), {226, 135, 164, 0}}, #line 1095 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5985), {226, 169, 173, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str5985), {226, 169, 173, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10297,9 +10297,9 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str6052), {226, 137, 191, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 266 "src/html_unescape.gperf" +#line 267 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6061), {226, 167, 131, 0}}, -#line 1653 "src/html_unescape.gperf" +#line 1654 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6062), {226, 138, 161, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1318 "src/html_unescape.gperf" @@ -10334,7 +10334,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 906 "src/html_unescape.gperf" +#line 905 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6121), {226, 134, 188, 0}}, #line 416 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6122), {226, 135, 146, 0}}, @@ -10347,7 +10347,7 @@ find_entity (register const char *str, register unsigned int len) #line 941 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6140), {226, 150, 132, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 267 "src/html_unescape.gperf" +#line 266 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6146), {226, 137, 151, 0}}, #line 1293 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6147), {226, 138, 175, 0}}, @@ -10355,7 +10355,7 @@ find_entity (register const char *str, register unsigned int len) #line 1927 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6151), {226, 150, 128, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 737 "src/html_unescape.gperf" +#line 738 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6155), {226, 132, 145, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1586 "src/html_unescape.gperf" @@ -10366,7 +10366,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 626 "src/html_unescape.gperf" +#line 627 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6176), {226, 170, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10380,7 +10380,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str6203), {197, 147, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1198 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6208), {226, 169, 189, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str6208), {226, 169, 189, 204, 184, 0}}, {-1,{0}}, #line 153 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6210), {226, 149, 151, 0}}, @@ -10396,7 +10396,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 968 "src/html_unescape.gperf" +#line 969 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6248), {226, 159, 183, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10411,7 +10411,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1796 "src/html_unescape.gperf" +#line 1797 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6283), {226, 171, 134, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10426,7 +10426,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1124 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6315), {226, 169, 190, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str6315), {226, 169, 190, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10445,7 +10445,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 808 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6367), {196, 184, 0}}, -#line 1797 "src/html_unescape.gperf" +#line 1796 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6368), {226, 138, 135, 0}}, {-1,{0}}, #line 170 "src/html_unescape.gperf" @@ -10466,7 +10466,7 @@ find_entity (register const char *str, register unsigned int len) #line 810 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6404), {209, 133, 0}}, {-1,{0}}, -#line 355 "src/html_unescape.gperf" +#line 357 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6406), {226, 128, 161, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10519,7 +10519,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str6456), {226, 136, 164, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1174 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6461), {226, 137, 130, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str6461), {226, 137, 130, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10531,12 +10531,12 @@ find_entity (register const char *str, register unsigned int len) #line 157 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6488), {226, 149, 148, 0}}, {-1,{0}}, -#line 34 "src/html_unescape.gperf" +#line 36 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6490), {226, 169, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1591 "src/html_unescape.gperf" +#line 1590 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6502), {226, 135, 128, 0}}, {-1,{0}}, #line 730 "src/html_unescape.gperf" @@ -10556,8 +10556,8 @@ find_entity (register const char *str, register unsigned int len) #line 37 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6524), {226, 169, 156, 0}}, {-1,{0}}, -#line 1240 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6526), {226, 164, 179, 0}}, +#line 1242 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str6526), {226, 164, 179, 204, 184, 0}}, #line 2025 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6527), {226, 128, 138, 0}}, {-1,{0}}, @@ -10568,7 +10568,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str6531), {226, 149, 150, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 2029 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6535), {226, 138, 130, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str6535), {226, 138, 130, 226, 131, 146, 0}}, {-1,{0}}, {-1,{0}}, #line 235 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6538), {226, 169, 144, 0}}, @@ -10648,7 +10648,7 @@ find_entity (register const char *str, register unsigned int len) #line 2005 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6623), {208, 146, 0}}, {-1,{0}}, {-1,{0}}, -#line 215 "src/html_unescape.gperf" +#line 217 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6626), {226, 169, 137, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10657,7 +10657,7 @@ find_entity (register const char *str, register unsigned int len) #line 101 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6646), {226, 128, 158, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 421 "src/html_unescape.gperf" +#line 424 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6650), {226, 164, 147, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10764,7 +10764,7 @@ find_entity (register const char *str, register unsigned int len) #line 1645 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6861), {197, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 464 "src/html_unescape.gperf" +#line 465 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6865), {195, 170, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1912 "src/html_unescape.gperf" @@ -10790,7 +10790,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1579 "src/html_unescape.gperf" +#line 1580 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6921), {226, 134, 166, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10801,7 +10801,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1010 "src/html_unescape.gperf" +#line 1013 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str6958), {226, 170, 166, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 26 "src/html_unescape.gperf" @@ -10851,7 +10851,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str7039), {226, 149, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1435 "src/html_unescape.gperf" +#line 1438 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7047), {226, 170, 183, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10901,7 +10901,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, #line 2062 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7142), {226, 150, 189, 0}}, -#line 252 "src/html_unescape.gperf" +#line 253 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7143), {203, 134, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10930,7 +10930,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str7201), {208, 188, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1859 "src/html_unescape.gperf" +#line 1861 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7212), {226, 168, 177, 0}}, {-1,{0}}, #line 690 "src/html_unescape.gperf" @@ -10972,9 +10972,9 @@ find_entity (register const char *str, register unsigned int len) #line 122 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7274), {226, 152, 133, 0}}, {-1,{0}}, {-1,{0}}, -#line 320 "src/html_unescape.gperf" +#line 317 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7277), {226, 136, 170, 0}}, -#line 973 "src/html_unescape.gperf" +#line 972 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7278), {226, 159, 182, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -10982,7 +10982,7 @@ find_entity (register const char *str, register unsigned int len) #line 597 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7294), {196, 162, 0}}, {-1,{0}}, -#line 1439 "src/html_unescape.gperf" +#line 1441 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7296), {226, 170, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11002,7 +11002,7 @@ find_entity (register const char *str, register unsigned int len) #line 1533 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7325), {226, 164, 183, 0}}, #line 325 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7326), {226, 136, 170, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str7326), {226, 136, 170, 239, 184, 128, 0}}, #line 863 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7327), {226, 164, 182, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11024,7 +11024,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str7345), {206, 163, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1222 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7350), {226, 137, 191, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str7350), {226, 137, 191, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11033,39 +11033,39 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1760 "src/html_unescape.gperf" +#line 1759 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7376), {226, 138, 138, 0}}, {-1,{0}}, #line 1456 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7378), {226, 136, 143, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 258 "src/html_unescape.gperf" +#line 259 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7385), {226, 138, 157, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1772 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7389), {226, 171, 147, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 297 "src/html_unescape.gperf" +#line 298 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7397), {194, 169, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 533 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7403), {206, 183, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 51 "src/html_unescape.gperf" +#line 43 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7409), {226, 136, 161, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1083 "src/html_unescape.gperf" +#line 1084 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7434), {226, 153, 174, 0}}, {-1,{0}}, #line 1798 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7436), {226, 171, 132, 0}}, -#line 1084 "src/html_unescape.gperf" +#line 1085 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7437), {226, 132, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1880 "src/html_unescape.gperf" @@ -11117,7 +11117,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 318 "src/html_unescape.gperf" +#line 321 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7520), {226, 169, 134, 0}}, #line 1768 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7521), {226, 138, 138, 0}}, @@ -11160,10 +11160,10 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str7604), {226, 138, 181, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 888 "src/html_unescape.gperf" +#line 887 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7615), {226, 134, 148, 0}}, {-1,{0}}, {-1,{0}}, -#line 1774 "src/html_unescape.gperf" +#line 1773 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7618), {226, 137, 187, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11186,12 +11186,12 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 12 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7662), {226, 136, 190, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str7662), {226, 136, 190, 204, 179, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1597 "src/html_unescape.gperf" +#line 1598 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7668), {226, 142, 177, 0}}, {-1,{0}}, -#line 953 "src/html_unescape.gperf" +#line 954 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7670), {226, 142, 176, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1109 "src/html_unescape.gperf" @@ -11264,7 +11264,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1951 "src/html_unescape.gperf" +#line 1950 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7859), {226, 134, 149, 0}}, {-1,{0}}, #line 1113 "src/html_unescape.gperf" @@ -11281,12 +11281,12 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str7876), {226, 148, 130, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1314 "src/html_unescape.gperf" +#line 1315 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7886), {195, 180, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 463 "src/html_unescape.gperf" +#line 464 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str7900), {195, 138, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11327,7 +11327,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 681 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8042), {196, 164, 0}}, -#line 1590 "src/html_unescape.gperf" +#line 1591 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8043), {226, 165, 147, 0}}, #line 18 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8044), {195, 134, 0}}, @@ -11401,9 +11401,9 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1563 "src/html_unescape.gperf" +#line 1561 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8241), {226, 134, 146, 0}}, -#line 257 "src/html_unescape.gperf" +#line 258 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8242), {226, 138, 154, 0}}, #line 27 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8243), {206, 145, 0}}, @@ -11445,7 +11445,7 @@ find_entity (register const char *str, register unsigned int len) #line 542 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8340), {226, 132, 176, 0}}, {-1,{0}}, -#line 1313 "src/html_unescape.gperf" +#line 1314 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8342), {195, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11460,7 +11460,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str8375), {206, 187, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1220 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8381), {226, 170, 176, 0}}, + {offsetof(struct entity_pool_t, entity_pool_str8381), {226, 170, 176, 204, 184, 0}}, #line 190 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8382), {226, 149, 158, 0}}, {-1,{0}}, @@ -11584,7 +11584,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 544 "src/html_unescape.gperf" +#line 543 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8725), {226, 133, 135, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11617,7 +11617,7 @@ find_entity (register const char *str, register unsigned int len) #line 2106 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8796), {195, 191, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1759 "src/html_unescape.gperf" +#line 1760 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8800), {226, 171, 139, 0}}, {-1,{0}}, {-1,{0}}, #line 359 "src/html_unescape.gperf" @@ -11644,7 +11644,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 652 "src/html_unescape.gperf" +#line 655 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8879), {226, 170, 167, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11664,7 +11664,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1950 "src/html_unescape.gperf" +#line 1951 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str8956), {226, 134, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 330 "src/html_unescape.gperf" @@ -11726,10 +11726,10 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 436 "src/html_unescape.gperf" +#line 435 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9151), {226, 135, 129, 0}}, {-1,{0}}, {-1,{0}}, -#line 435 "src/html_unescape.gperf" +#line 436 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9154), {226, 165, 151, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11748,7 +11748,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 972 "src/html_unescape.gperf" +#line 973 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9217), {226, 159, 182, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11771,7 +11771,7 @@ find_entity (register const char *str, register unsigned int len) #line 1107 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9271), {226, 128, 139, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1755 "src/html_unescape.gperf" +#line 1756 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9275), {226, 171, 133, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11806,7 +11806,7 @@ find_entity (register const char *str, register unsigned int len) {offsetof(struct entity_pool_t, entity_pool_str9351), {226, 129, 131, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1756 "src/html_unescape.gperf" +#line 1755 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9360), {226, 138, 134, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11855,7 +11855,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 887 "src/html_unescape.gperf" +#line 888 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9554), {226, 134, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11921,20 +11921,20 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1589 "src/html_unescape.gperf" +#line 1588 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9801), {226, 134, 190, 0}}, {-1,{0}}, {-1,{0}}, -#line 1588 "src/html_unescape.gperf" +#line 1589 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9804), {226, 165, 148, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1571 "src/html_unescape.gperf" +#line 1570 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9829), {226, 135, 130, 0}}, {-1,{0}}, {-1,{0}}, -#line 1570 "src/html_unescape.gperf" +#line 1571 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9832), {226, 165, 149, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 25 "src/html_unescape.gperf" @@ -11942,9 +11942,9 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 255 "src/html_unescape.gperf" +#line 256 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9852), {226, 134, 187, 0}}, -#line 254 "src/html_unescape.gperf" +#line 255 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9853), {226, 134, 186, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11965,7 +11965,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1376 "src/html_unescape.gperf" +#line 1378 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9936), {226, 168, 182, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -11982,7 +11982,7 @@ find_entity (register const char *str, register unsigned int len) #line 1203 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9959), {226, 136, 140, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1443 "src/html_unescape.gperf" +#line 1445 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str9963), {226, 170, 185, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12060,12 +12060,12 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1210 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10240), {226, 167, 144, 0}}, +#line 1211 "src/html_unescape.gperf" + {offsetof(struct entity_pool_t, entity_pool_str10240), {226, 167, 144, 204, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, #line 1212 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str10244), {226, 139, 173, 0}}, -#line 1211 "src/html_unescape.gperf" +#line 1210 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str10245), {226, 139, 171, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12074,7 +12074,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 905 "src/html_unescape.gperf" +#line 906 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str10278), {226, 165, 146, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12133,7 +12133,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1564 "src/html_unescape.gperf" +#line 1563 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str10505), {226, 135, 146, 0}}, {-1,{0}}, #line 28 "src/html_unescape.gperf" @@ -12208,7 +12208,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 735 "src/html_unescape.gperf" +#line 736 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str10808), {226, 133, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12268,7 +12268,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1773 "src/html_unescape.gperf" +#line 1774 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str11029), {226, 170, 184, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12296,13 +12296,13 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 47 "src/html_unescape.gperf" +#line 48 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str11146), {226, 166, 172, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 44 "src/html_unescape.gperf" +#line 45 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str11165), {226, 166, 169, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12328,7 +12328,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 48 "src/html_unescape.gperf" +#line 49 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str11282), {226, 166, 173, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12391,7 +12391,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 46 "src/html_unescape.gperf" +#line 47 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str11565), {226, 166, 171, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12472,7 +12472,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1561 "src/html_unescape.gperf" +#line 1564 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str11918), {226, 135, 165, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12739,7 +12739,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 49 "src/html_unescape.gperf" +#line 50 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str13061), {226, 166, 174, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -12818,7 +12818,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 50 "src/html_unescape.gperf" +#line 51 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str13443), {226, 166, 175, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -13003,7 +13003,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 45 "src/html_unescape.gperf" +#line 46 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str14304), {226, 166, 170, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -13070,7 +13070,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 317 "src/html_unescape.gperf" +#line 319 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str14620), {226, 169, 136, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, @@ -13206,7 +13206,7 @@ find_entity (register const char *str, register unsigned int len) {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 43 "src/html_unescape.gperf" +#line 44 "src/html_unescape.gperf" {offsetof(struct entity_pool_t, entity_pool_str15290), {226, 166, 168, 0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -- cgit 0.0.5-2-1-g0f52 From 68ab4cc72e709c86c976063945d3a37f0fbdb330 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 13 Jun 2015 16:09:03 -0700 Subject: Updated spec.txt. --- test/spec.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index a4fe485edf..ffaa8a2999 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -4356,9 +4356,13 @@ is used as an authoritative source of the valid entity names and their corresponding codepoints. . -  & © Æ Ď ¾ ℋ ⅆ ∲ +  & © Æ Ď +¾ ℋ ⅆ +∲ ≧̸ . -

                              & © Æ Ď ¾ ℋ ⅆ ∲

                            +

                              & © Æ Ď +¾ ℋ ⅆ +∲ ≧̸

                            . [Decimal entities](@decimal-entities) -- cgit 0.0.5-2-1-g0f52 From 645ea4e735a85c7554e0247015ed8f61d4888a86 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 13 Jun 2015 16:33:36 -0700 Subject: Updated spec.txt. --- test/spec.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index ffaa8a2999..ac2ce2a5d6 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1953,6 +1953,17 @@ The link destination may not be omitted:

                            [foo]

                            . +Both title and destination can contain backslash escapes +and literal backslashes: + +. +[foo]: /url\bar\*baz "foo\"bar\baz" + +[foo] +. +

                            foo

                            +. + A link can come before its corresponding definition: . @@ -5978,6 +5989,15 @@ in Markdown:

                            link

                            . +Note that a backslash before a non-escapable character is +just a backslash: + +. +[link](foo\bar) +. +

                            link

                            +. + URL-escaping should be left alone inside the destination, as all URL-escaped characters are also valid URL characters. HTML entities in the destination will be parsed into the corresponding unicode -- cgit 0.0.5-2-1-g0f52 From e251fe5fbbd5691ab5a067623fea5685e7dbf03a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 13 Jun 2015 16:39:12 -0700 Subject: Fixed backslashes in link destinations that are not part of escapes. See jgm/commonmark#45. --- src/scanners.c | 2010 +++++++++++++++++++++++++++---------------------------- src/scanners.re | 4 +- 2 files changed, 1007 insertions(+), 1007 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 3f4ddac149..10af6d98f4 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 */ +/* Generated by re2c 0.13.6 */ #include #include "chunk.h" #include "scanners.h" @@ -13252,38 +13252,38 @@ bufsize_t _scan_link_url(const unsigned char *p) unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 8, 64, 64, 8, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 72, 112, 112, 112, 112, 112, 112, 112, - 64, 64, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 16, 112, 16, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 128, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 8, 128, 128, 8, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 136, 208, 208, 208, 208, 208, 208, 208, + 128, 128, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 16, 208, 16, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 32, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, }; yych = *p; if (yych <= '\'') { @@ -13294,17 +13294,17 @@ bufsize_t _scan_link_url(const unsigned char *p) if (yych <= '\r') goto yy1591; if (yych <= 0x1F) goto yy1597; if (yych <= ' ') goto yy1591; - goto yy1593; + goto yy1594; } } else { if (yych <= ';') { - if (yych <= '(') goto yy1596; + if (yych <= '(') goto yy1595; if (yych <= ')') goto yy1597; - goto yy1593; + goto yy1594; } else { if (yych <= '<') goto yy1592; - if (yych == '\\') goto yy1594; - goto yy1593; + if (yych == '\\') goto yy1593; + goto yy1594; } } yy1588: @@ -13319,16 +13319,16 @@ yy1590: } if (yych <= ')') { if (yych <= ' ') goto yy1588; - if (yych <= '\'') goto yy1602; + if (yych <= '\'') goto yy1603; if (yych <= '(') goto yy1598; goto yy1588; } else { if (yych <= '<') { - if (yych <= ';') goto yy1602; - goto yy1605; + if (yych <= ';') goto yy1603; + goto yy1613; } else { - if (yych == '\\') goto yy1604; - goto yy1602; + if (yych == '\\') goto yy1605; + goto yy1603; } } yy1591: @@ -13338,57 +13338,48 @@ yy1591: yy1592: yyaccept = 0; yych = *(marker = ++p); - if (yybm[0+yych] & 32) { - goto yy1605; + if (yybm[0+yych] & 64) { + goto yy1613; } if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) goto yy1588; - goto yy1612; + goto yy1619; } else { if (yych <= '\n') goto yy1588; - if (yych <= '\f') goto yy1612; + if (yych <= '\f') goto yy1619; goto yy1588; } } else { if (yych <= ')') { - if (yych == '(') goto yy1610; - goto yy1612; + if (yych == '(') goto yy1617; + goto yy1619; } else { - if (yych <= '=') goto yy1602; - if (yych <= '>') goto yy1607; - goto yy1609; + if (yych <= '=') goto yy1603; + if (yych <= '>') goto yy1615; + goto yy1611; } } yy1593: + yych = *++p; + if (yych <= '\'') goto yy1604; + if (yych <= '(') goto yy1607; + if (yych <= ')') goto yy1603; + goto yy1604; +yy1594: yyaccept = 0; yych = *(marker = ++p); - goto yy1603; -yy1594: - ++p; - if ((yych = *p) <= '@') { - if (yych <= ' ') goto yy1595; - if (yych <= '/') goto yy1602; - if (yych >= ':') goto yy1602; - } else { - if (yych <= '`') { - if (yych >= '[') goto yy1602; - } else { - if (yych <= 'z') goto yy1595; - if (yych <= '~') goto yy1602; - } - } + goto yy1604; yy1595: - { return 0; } -yy1596: yyaccept = 1; yych = *(marker = ++p); - if (yych <= ' ') goto yy1595; - if (yych == '(') goto yy1595; - goto yy1599; + if (yych <= ' ') goto yy1596; + if (yych != '(') goto yy1599; +yy1596: + { return 0; } yy1597: yych = *++p; - goto yy1595; + goto yy1596; yy1598: ++p; yych = *p; @@ -13397,136 +13388,124 @@ yy1599: goto yy1598; } if (yych <= '(') goto yy1600; - if (yych <= ')') goto yy1602; + if (yych <= ')') goto yy1603; goto yy1601; yy1600: p = marker; if (yyaccept <= 1) { - if (yyaccept <= 0) { + if (yyaccept == 0) { goto yy1588; } else { - goto yy1595; + goto yy1596; } } else { - goto yy1608; + goto yy1616; } yy1601: ++p; yych = *p; - if (yych <= '@') { - if (yych <= ' ') goto yy1600; - if (yych <= '/') goto yy1598; - if (yych <= '9') goto yy1600; + if (yybm[0+yych] & 32) { + goto yy1601; + } + if (yych <= ' ') goto yy1600; + if (yych == ')') goto yy1607; + goto yy1598; +yy1603: + yyaccept = 0; + marker = ++p; + yych = *p; +yy1604: + if (yych <= '(') { + if (yych <= ' ') goto yy1588; + if (yych <= '\'') goto yy1603; goto yy1598; } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy1600; - goto yy1598; - } else { - if (yych <= 'z') goto yy1600; - if (yych <= '~') goto yy1598; - goto yy1600; - } + if (yych <= ')') goto yy1588; + if (yych != '\\') goto yy1603; + } +yy1605: + ++p; + yych = *p; + if (yych <= '(') { + if (yych <= ' ') goto yy1588; + if (yych <= '\'') goto yy1603; + } else { + if (yych == '\\') goto yy1605; + goto yy1603; } -yy1602: +yy1607: yyaccept = 0; marker = ++p; yych = *p; -yy1603: +yy1608: if (yych <= '(') { if (yych <= ' ') goto yy1588; - if (yych <= '\'') goto yy1602; + if (yych <= '\'') goto yy1607; goto yy1598; } else { - if (yych <= ')') goto yy1588; - if (yych != '\\') goto yy1602; + if (yych <= ')') goto yy1603; + if (yych != '\\') goto yy1607; } -yy1604: +yy1609: ++p; yych = *p; - if (yych <= '@') { - if (yych <= ' ') goto yy1600; - if (yych <= '/') goto yy1602; - if (yych <= '9') goto yy1600; - goto yy1602; + if (yych <= ' ') goto yy1588; + if (yych == '\\') goto yy1609; + goto yy1607; +yy1611: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy1588; + if (yych <= '\t') goto yy1619; + goto yy1588; + } else { + if (yych == '\r') goto yy1588; + goto yy1619; + } } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy1600; - goto yy1602; + if (yych <= '=') { + if (yych == '(') goto yy1628; } else { - if (yych <= 'z') goto yy1600; - if (yych <= '~') goto yy1602; - goto yy1600; + if (yych <= '>') goto yy1635; + if (yych == '\\') goto yy1611; } } -yy1605: +yy1613: yyaccept = 0; marker = ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy1605; + if (yybm[0+yych] & 64) { + goto yy1613; } if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) goto yy1588; - goto yy1612; + goto yy1619; } else { if (yych <= '\n') goto yy1588; - if (yych <= '\f') goto yy1612; + if (yych <= '\f') goto yy1619; goto yy1588; } } else { if (yych <= ')') { - if (yych == '(') goto yy1610; - goto yy1612; + if (yych == '(') goto yy1617; + goto yy1619; } else { - if (yych <= '=') goto yy1602; - if (yych >= '?') goto yy1609; + if (yych <= '=') goto yy1603; + if (yych >= '?') goto yy1611; } } -yy1607: +yy1615: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1608; - if (yych != ')') goto yy1603; -yy1608: + if (yych <= ' ') goto yy1616; + if (yych != ')') goto yy1604; +yy1616: { return (bufsize_t)(p - start); } -yy1609: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy1600; - if (yych == '\n') goto yy1600; - goto yy1612; - } else { - if (yych <= ' ') { - if (yych <= '\r') goto yy1600; - goto yy1612; - } else { - if (yych <= '/') goto yy1605; - if (yych <= '9') goto yy1612; - goto yy1605; - } - } - } else { - if (yych <= '[') { - if (yych <= '>') goto yy1622; - if (yych <= '@') goto yy1605; - if (yych <= 'Z') goto yy1612; - goto yy1605; - } else { - if (yych <= '`') { - if (yych <= '\\') goto yy1623; - goto yy1605; - } else { - if (yych <= 'z') goto yy1612; - if (yych <= '~') goto yy1605; - goto yy1612; - } - } - } -yy1610: +yy1617: ++p; yych = *p; if (yych <= '(') { @@ -13535,194 +13514,215 @@ yy1610: if (yych == '\n') goto yy1600; } else { if (yych <= '\r') goto yy1600; - if (yych <= ' ') goto yy1612; - if (yych <= '\'') goto yy1610; + if (yych <= ' ') goto yy1619; + if (yych <= '\'') goto yy1617; } } else { if (yych <= '=') { - if (yych <= ')') goto yy1605; + if (yych <= ')') goto yy1613; if (yych == '<') goto yy1598; - goto yy1610; + goto yy1617; } else { - if (yych <= '>') goto yy1618; - if (yych == '\\') goto yy1619; - goto yy1610; + if (yych <= '>') goto yy1625; + if (yych == '\\') goto yy1626; + goto yy1617; } } -yy1612: +yy1619: ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy1612; + if (yybm[0+yych] & 128) { + goto yy1619; } if (yych <= '=') goto yy1600; - if (yych >= '?') goto yy1615; -yy1614: + if (yych >= '?') goto yy1622; +yy1621: yych = *++p; - goto yy1608; -yy1615: + goto yy1616; +yy1622: ++p; yych = *p; - if (yybm[0+yych] & 128) { - goto yy1615; - } - if (yych <= '\f') { - if (yych <= 0x00) goto yy1600; - if (yych == '\n') goto yy1600; - goto yy1612; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1600; + goto yy1619; + } else { + if (yych <= '\n') goto yy1600; + if (yych <= '\f') goto yy1619; + goto yy1600; + } } else { - if (yych <= '\r') goto yy1600; - if (yych != '>') goto yy1612; + if (yych <= '>') { + if (yych <= '=') goto yy1619; + } else { + if (yych == '\\') goto yy1622; + goto yy1619; + } } yyaccept = 2; marker = ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy1612; + if (yybm[0+yych] & 128) { + goto yy1619; } - if (yych <= '=') goto yy1608; - if (yych <= '>') goto yy1614; - goto yy1615; -yy1618: + if (yych <= '=') goto yy1616; + if (yych <= '>') goto yy1621; + goto yy1622; +yy1625: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1608; - if (yych == '(') goto yy1608; + if (yych <= ' ') goto yy1616; + if (yych == '(') goto yy1616; goto yy1599; -yy1619: +yy1626: ++p; yych = *p; - if (yych <= '=') { - if (yych <= '\f') { + if (yych <= ' ') { + if (yych <= '\n') { if (yych <= 0x00) goto yy1600; - if (yych == '\n') goto yy1600; - goto yy1612; + if (yych <= '\t') goto yy1619; + goto yy1600; } else { - if (yych <= ' ') { - if (yych <= '\r') goto yy1600; - goto yy1612; - } else { - if (yych <= '/') goto yy1610; - if (yych <= '9') goto yy1612; - goto yy1610; - } + if (yych == '\r') goto yy1600; + goto yy1619; } } else { - if (yych <= '[') { - if (yych <= '>') goto yy1620; - if (yych <= '@') goto yy1610; - if (yych <= 'Z') goto yy1612; - goto yy1610; + if (yych <= '=') { + if (yych != ')') goto yy1617; } else { - if (yych <= '`') { - if (yych <= '\\') goto yy1621; - goto yy1610; - } else { - if (yych <= 'z') goto yy1612; - if (yych <= '~') goto yy1610; - goto yy1612; - } + if (yych <= '>') goto yy1630; + if (yych == '\\') goto yy1626; + goto yy1617; } } -yy1620: - yyaccept = 2; +yy1628: + yyaccept = 0; marker = ++p; yych = *p; if (yych <= '(') { if (yych <= '\f') { - if (yych <= 0x00) goto yy1608; - if (yych == '\n') goto yy1608; - goto yy1612; + if (yych <= 0x00) goto yy1588; + if (yych == '\n') goto yy1588; + goto yy1619; } else { - if (yych <= '\r') goto yy1608; - if (yych <= ' ') goto yy1612; - if (yych <= '\'') goto yy1610; - goto yy1612; + if (yych <= '\r') goto yy1588; + if (yych <= ' ') goto yy1619; + if (yych <= '\'') goto yy1628; + goto yy1617; } } else { if (yych <= '=') { - if (yych <= ')') goto yy1605; - if (yych == '<') goto yy1598; - goto yy1610; + if (yych <= ')') goto yy1613; + if (yych == '<') goto yy1607; + goto yy1628; } else { - if (yych <= '>') goto yy1618; - if (yych == '\\') goto yy1619; - goto yy1610; + if (yych <= '>') goto yy1631; + if (yych == '\\') goto yy1632; + goto yy1628; } } -yy1621: - ++p; +yy1630: + yyaccept = 2; + marker = ++p; yych = *p; - if (yych <= '\'') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1600; - if (yych <= '\t') goto yy1612; - goto yy1600; + if (yych <= '(') { + if (yych <= '\f') { + if (yych <= 0x00) goto yy1616; + if (yych == '\n') goto yy1616; + goto yy1619; } else { - if (yych == '\r') goto yy1600; - if (yych <= ' ') goto yy1612; - goto yy1610; + if (yych <= '\r') goto yy1616; + if (yych <= ' ') goto yy1619; + if (yych <= '\'') goto yy1617; + goto yy1619; } } else { if (yych <= '=') { - if (yych <= '(') goto yy1612; - if (yych <= ')') goto yy1605; - goto yy1610; + if (yych <= ')') goto yy1613; + if (yych == '<') goto yy1598; + goto yy1617; } else { - if (yych <= '>') goto yy1620; - if (yych == '\\') goto yy1619; - goto yy1610; + if (yych <= '>') goto yy1625; + if (yych == '\\') goto yy1626; + goto yy1617; } } -yy1622: +yy1631: yyaccept = 2; + yych = *(marker = ++p); + if (yych <= ' ') goto yy1616; + goto yy1608; +yy1632: + yyaccept = 0; marker = ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy1605; - } if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1608; - goto yy1612; + if (yych <= 0x00) goto yy1588; + goto yy1619; } else { - if (yych <= '\n') goto yy1608; - if (yych <= '\f') goto yy1612; - goto yy1608; + if (yych <= '\n') goto yy1588; + if (yych <= '\f') goto yy1619; + goto yy1588; } } else { - if (yych <= ')') { - if (yych == '(') goto yy1610; - goto yy1612; + if (yych <= '>') { + if (yych <= ' ') goto yy1619; + if (yych <= '=') goto yy1628; } else { - if (yych <= '=') goto yy1602; - if (yych <= '>') goto yy1607; - goto yy1609; + if (yych == '\\') goto yy1632; + goto yy1628; } } -yy1623: - yyaccept = 0; + yyaccept = 2; marker = ++p; yych = *p; - if (yych <= '\'') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1588; - if (yych <= '\t') goto yy1612; - goto yy1588; + if (yych <= '(') { + if (yych <= '\f') { + if (yych <= 0x00) goto yy1616; + if (yych == '\n') goto yy1616; + goto yy1619; } else { - if (yych == '\r') goto yy1588; - if (yych <= ' ') goto yy1612; - goto yy1605; + if (yych <= '\r') goto yy1616; + if (yych <= ' ') goto yy1619; + if (yych <= '\'') goto yy1628; + goto yy1617; } } else { if (yych <= '=') { - if (yych <= '(') goto yy1610; - if (yych <= ')') goto yy1612; - goto yy1605; + if (yych <= ')') goto yy1613; + if (yych == '<') goto yy1607; + goto yy1628; + } else { + if (yych <= '>') goto yy1631; + if (yych == '\\') goto yy1632; + goto yy1628; + } + } +yy1635: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1613; + } + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1616; + goto yy1619; + } else { + if (yych <= '\n') goto yy1616; + if (yych <= '\f') goto yy1619; + goto yy1616; + } + } else { + if (yych <= ')') { + if (yych == '(') goto yy1617; + goto yy1619; } else { - if (yych <= '>') goto yy1622; - if (yych == '\\') goto yy1609; - goto yy1605; + if (yych <= '=') goto yy1603; + if (yych <= '>') goto yy1615; + goto yy1611; } } } @@ -13776,147 +13776,147 @@ bufsize_t _scan_link_title(const unsigned char *p) }; yych = *p; if (yych <= '"') { - if (yych == '\n') goto yy1626; - if (yych <= '!') goto yy1630; - goto yy1627; + if (yych == '\n') goto yy1638; + if (yych <= '!') goto yy1642; + goto yy1639; } else { - if (yych <= '&') goto yy1630; - if (yych <= '\'') goto yy1628; - if (yych <= '(') goto yy1629; - goto yy1630; + if (yych <= '&') goto yy1642; + if (yych <= '\'') goto yy1640; + if (yych <= '(') goto yy1641; + goto yy1642; } -yy1626: +yy1638: { return 0; } -yy1627: +yy1639: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1626; - goto yy1647; -yy1628: + if (yych <= 0x00) goto yy1638; + goto yy1659; +yy1640: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1626; - goto yy1640; -yy1629: + if (yych <= 0x00) goto yy1638; + goto yy1652; +yy1641: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1626; - goto yy1632; -yy1630: + if (yych <= 0x00) goto yy1638; + goto yy1644; +yy1642: yych = *++p; - goto yy1626; -yy1631: + goto yy1638; +yy1643: ++p; yych = *p; -yy1632: +yy1644: if (yybm[0+yych] & 16) { - goto yy1631; + goto yy1643; } - if (yych <= 0x00) goto yy1633; - if (yych <= '[') goto yy1636; - goto yy1634; -yy1633: + if (yych <= 0x00) goto yy1645; + if (yych <= '[') goto yy1648; + goto yy1646; +yy1645: p = marker; if (yyaccept <= 1) { - if (yyaccept <= 0) { - goto yy1626; + if (yyaccept == 0) { + goto yy1638; } else { - goto yy1637; + goto yy1649; } } else { - if (yyaccept <= 2) { - goto yy1644; + if (yyaccept == 2) { + goto yy1656; } else { - goto yy1651; + goto yy1663; } } -yy1634: +yy1646: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1631; + goto yy1643; } - if (yych <= 0x00) goto yy1633; - if (yych <= '[') goto yy1638; - goto yy1634; -yy1636: + if (yych <= 0x00) goto yy1645; + if (yych <= '[') goto yy1650; + goto yy1646; +yy1648: ++p; -yy1637: +yy1649: { return (bufsize_t)(p - start); } -yy1638: +yy1650: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1631; + goto yy1643; } - if (yych <= 0x00) goto yy1637; - if (yych <= '[') goto yy1636; - goto yy1634; -yy1639: + if (yych <= 0x00) goto yy1649; + if (yych <= '[') goto yy1648; + goto yy1646; +yy1651: ++p; yych = *p; -yy1640: +yy1652: if (yybm[0+yych] & 64) { - goto yy1639; + goto yy1651; } - if (yych <= 0x00) goto yy1633; - if (yych <= '[') goto yy1643; -yy1641: + if (yych <= 0x00) goto yy1645; + if (yych <= '[') goto yy1655; +yy1653: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1639; + goto yy1651; } - if (yych <= 0x00) goto yy1633; - if (yych <= '[') goto yy1645; - goto yy1641; -yy1643: + if (yych <= 0x00) goto yy1645; + if (yych <= '[') goto yy1657; + goto yy1653; +yy1655: ++p; -yy1644: +yy1656: { return (bufsize_t)(p - start); } -yy1645: +yy1657: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1639; + goto yy1651; } - if (yych <= 0x00) goto yy1644; - if (yych <= '[') goto yy1643; - goto yy1641; -yy1646: + if (yych <= 0x00) goto yy1656; + if (yych <= '[') goto yy1655; + goto yy1653; +yy1658: ++p; yych = *p; -yy1647: +yy1659: if (yybm[0+yych] & 128) { - goto yy1646; + goto yy1658; } - if (yych <= 0x00) goto yy1633; - if (yych <= '[') goto yy1650; -yy1648: + if (yych <= 0x00) goto yy1645; + if (yych <= '[') goto yy1662; +yy1660: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1646; + goto yy1658; } - if (yych <= 0x00) goto yy1633; - if (yych <= '[') goto yy1652; - goto yy1648; -yy1650: + if (yych <= 0x00) goto yy1645; + if (yych <= '[') goto yy1664; + goto yy1660; +yy1662: ++p; -yy1651: +yy1663: { return (bufsize_t)(p - start); } -yy1652: +yy1664: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1646; + goto yy1658; } - if (yych <= 0x00) goto yy1651; - if (yych <= '[') goto yy1650; - goto yy1648; + if (yych <= 0x00) goto yy1663; + if (yych <= '[') goto yy1662; + goto yy1660; } } @@ -13964,28 +13964,28 @@ bufsize_t _scan_spacechars(const unsigned char *p) }; yych = *p; if (yych <= '\n') { - if (yych <= 0x08) goto yy1659; - if (yych <= '\t') goto yy1656; - goto yy1657; + if (yych <= 0x08) goto yy1671; + if (yych <= '\t') goto yy1668; + goto yy1669; } else { - if (yych <= '\r') goto yy1656; - if (yych == ' ') goto yy1656; - goto yy1659; + if (yych <= '\r') goto yy1668; + if (yych == ' ') goto yy1668; + goto yy1671; } -yy1655: +yy1667: { return (bufsize_t)(p - start); } -yy1656: +yy1668: yych = *++p; - goto yy1658; -yy1657: + goto yy1670; +yy1669: ++p; yych = *p; -yy1658: +yy1670: if (yybm[0+yych] & 128) { - goto yy1657; + goto yy1669; } - goto yy1655; -yy1659: + goto yy1667; +yy1671: ++p; { return 0; } } @@ -14035,93 +14035,93 @@ bufsize_t _scan_atx_header_start(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *p; - if (yych == '\n') goto yy1663; - if (yych == '#') goto yy1664; - goto yy1665; -yy1663: + if (yych == '\n') goto yy1675; + if (yych == '#') goto yy1676; + goto yy1677; +yy1675: { return 0; } -yy1664: +yy1676: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1668; + goto yy1680; } if (yych <= '\f') { - if (yych == '\n') goto yy1666; - goto yy1663; + if (yych == '\n') goto yy1678; + goto yy1675; } else { - if (yych <= '\r') goto yy1666; - if (yych == '#') goto yy1670; - goto yy1663; + if (yych <= '\r') goto yy1678; + if (yych == '#') goto yy1682; + goto yy1675; } -yy1665: +yy1677: yych = *++p; - goto yy1663; -yy1666: + goto yy1675; +yy1678: ++p; -yy1667: +yy1679: { return (bufsize_t)(p - start); } -yy1668: +yy1680: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1668; + goto yy1680; } - goto yy1667; -yy1670: + goto yy1679; +yy1682: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1668; + goto yy1680; } if (yych <= '\f') { - if (yych == '\n') goto yy1666; + if (yych == '\n') goto yy1678; } else { - if (yych <= '\r') goto yy1666; - if (yych == '#') goto yy1672; + if (yych <= '\r') goto yy1678; + if (yych == '#') goto yy1684; } -yy1671: +yy1683: p = marker; - goto yy1663; -yy1672: + goto yy1675; +yy1684: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1668; + goto yy1680; } if (yych <= '\f') { - if (yych == '\n') goto yy1666; - goto yy1671; + if (yych == '\n') goto yy1678; + goto yy1683; } else { - if (yych <= '\r') goto yy1666; - if (yych != '#') goto yy1671; + if (yych <= '\r') goto yy1678; + if (yych != '#') goto yy1683; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1668; + goto yy1680; } if (yych <= '\f') { - if (yych == '\n') goto yy1666; - goto yy1671; + if (yych == '\n') goto yy1678; + goto yy1683; } else { - if (yych <= '\r') goto yy1666; - if (yych != '#') goto yy1671; + if (yych <= '\r') goto yy1678; + if (yych != '#') goto yy1683; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1668; + goto yy1680; } if (yych <= '\f') { - if (yych == '\n') goto yy1666; - goto yy1671; + if (yych == '\n') goto yy1678; + goto yy1683; } else { - if (yych <= '\r') goto yy1666; - if (yych != '#') goto yy1671; + if (yych <= '\r') goto yy1678; + if (yych != '#') goto yy1683; } ++p; if (yybm[0+(yych = *p)] & 128) { - goto yy1668; + goto yy1680; } - if (yych == '\n') goto yy1666; - if (yych == '\r') goto yy1666; - goto yy1671; + if (yych == '\n') goto yy1678; + if (yych == '\r') goto yy1678; + goto yy1683; } } @@ -14170,97 +14170,97 @@ bufsize_t _scan_setext_header_line(const unsigned char *p) }; yych = *p; if (yych <= ',') { - if (yych != '\n') goto yy1681; + if (yych != '\n') goto yy1693; } else { - if (yych <= '-') goto yy1680; - if (yych == '=') goto yy1679; - goto yy1681; + if (yych <= '-') goto yy1692; + if (yych == '=') goto yy1691; + goto yy1693; } -yy1678: +yy1690: { return 0; } -yy1679: +yy1691: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1693; + goto yy1705; } if (yych <= '\f') { - if (yych == '\n') goto yy1691; - goto yy1678; + if (yych == '\n') goto yy1703; + goto yy1690; } else { - if (yych <= '\r') goto yy1691; - if (yych == ' ') goto yy1689; - goto yy1678; + if (yych <= '\r') goto yy1703; + if (yych == ' ') goto yy1701; + goto yy1690; } -yy1680: +yy1692: yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1682; + goto yy1694; } if (yych <= '\f') { - if (yych == '\n') goto yy1685; - goto yy1678; + if (yych == '\n') goto yy1697; + goto yy1690; } else { - if (yych <= '\r') goto yy1685; - if (yych == '-') goto yy1687; - goto yy1678; + if (yych <= '\r') goto yy1697; + if (yych == '-') goto yy1699; + goto yy1690; } -yy1681: +yy1693: yych = *++p; - goto yy1678; -yy1682: + goto yy1690; +yy1694: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1682; + goto yy1694; } - if (yych == '\n') goto yy1685; - if (yych == '\r') goto yy1685; -yy1684: + if (yych == '\n') goto yy1697; + if (yych == '\r') goto yy1697; +yy1696: p = marker; - goto yy1678; -yy1685: + goto yy1690; +yy1697: ++p; { return 2; } -yy1687: +yy1699: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1682; + goto yy1694; } if (yych <= '\f') { - if (yych == '\n') goto yy1685; - goto yy1684; + if (yych == '\n') goto yy1697; + goto yy1696; } else { - if (yych <= '\r') goto yy1685; - if (yych == '-') goto yy1687; - goto yy1684; + if (yych <= '\r') goto yy1697; + if (yych == '-') goto yy1699; + goto yy1696; } -yy1689: +yy1701: ++p; yych = *p; if (yych <= '\f') { - if (yych != '\n') goto yy1684; + if (yych != '\n') goto yy1696; } else { - if (yych <= '\r') goto yy1691; - if (yych == ' ') goto yy1689; - goto yy1684; + if (yych <= '\r') goto yy1703; + if (yych == ' ') goto yy1701; + goto yy1696; } -yy1691: +yy1703: ++p; { return 1; } -yy1693: +yy1705: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1693; + goto yy1705; } if (yych <= '\f') { - if (yych == '\n') goto yy1691; - goto yy1684; + if (yych == '\n') goto yy1703; + goto yy1696; } else { - if (yych <= '\r') goto yy1691; - if (yych == ' ') goto yy1689; - goto yy1684; + if (yych <= '\r') goto yy1703; + if (yych == ' ') goto yy1701; + goto yy1696; } } @@ -14312,153 +14312,153 @@ bufsize_t _scan_hrule(const unsigned char *p) }; yych = *p; if (yych <= '*') { - if (yych == '\n') goto yy1697; - if (yych <= ')') goto yy1701; - goto yy1698; + if (yych == '\n') goto yy1709; + if (yych <= ')') goto yy1713; + goto yy1710; } else { if (yych <= '-') { - if (yych <= ',') goto yy1701; - goto yy1700; + if (yych <= ',') goto yy1713; + goto yy1712; } else { - if (yych == '_') goto yy1699; - goto yy1701; + if (yych == '_') goto yy1711; + goto yy1713; } } -yy1697: +yy1709: { return 0; } -yy1698: +yy1710: yych = *(marker = ++p); - if (yych == ' ') goto yy1723; - if (yych == '*') goto yy1725; - goto yy1697; -yy1699: + if (yych == ' ') goto yy1735; + if (yych == '*') goto yy1737; + goto yy1709; +yy1711: yych = *(marker = ++p); - if (yych == ' ') goto yy1713; - if (yych == '_') goto yy1715; - goto yy1697; -yy1700: + if (yych == ' ') goto yy1725; + if (yych == '_') goto yy1727; + goto yy1709; +yy1712: yych = *(marker = ++p); if (yybm[0+yych] & 8) { - goto yy1702; + goto yy1714; } - if (yych == '-') goto yy1705; - goto yy1697; -yy1701: + if (yych == '-') goto yy1717; + goto yy1709; +yy1713: yych = *++p; - goto yy1697; -yy1702: + goto yy1709; +yy1714: ++p; yych = *p; if (yybm[0+yych] & 8) { - goto yy1702; + goto yy1714; } - if (yych == '-') goto yy1705; -yy1704: + if (yych == '-') goto yy1717; +yy1716: p = marker; - goto yy1697; -yy1705: + goto yy1709; +yy1717: ++p; yych = *p; - if (yych == ' ') goto yy1705; - if (yych != '-') goto yy1704; -yy1707: + if (yych == ' ') goto yy1717; + if (yych != '-') goto yy1716; +yy1719: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1707; + goto yy1719; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1704; - if (yych >= '\n') goto yy1711; + if (yych <= 0x08) goto yy1716; + if (yych >= '\n') goto yy1723; } else { - if (yych == '\r') goto yy1711; - goto yy1704; + if (yych == '\r') goto yy1723; + goto yy1716; } -yy1709: +yy1721: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1709; + goto yy1721; } - if (yych == '\n') goto yy1711; - if (yych != '\r') goto yy1704; -yy1711: + if (yych == '\n') goto yy1723; + if (yych != '\r') goto yy1716; +yy1723: ++p; { return (bufsize_t)(p - start); } -yy1713: +yy1725: ++p; yych = *p; - if (yych == ' ') goto yy1713; - if (yych != '_') goto yy1704; -yy1715: + if (yych == ' ') goto yy1725; + if (yych != '_') goto yy1716; +yy1727: ++p; yych = *p; - if (yych == ' ') goto yy1715; - if (yych != '_') goto yy1704; -yy1717: + if (yych == ' ') goto yy1727; + if (yych != '_') goto yy1716; +yy1729: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1717; + goto yy1729; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1704; - if (yych >= '\n') goto yy1721; + if (yych <= 0x08) goto yy1716; + if (yych >= '\n') goto yy1733; } else { - if (yych == '\r') goto yy1721; - goto yy1704; + if (yych == '\r') goto yy1733; + goto yy1716; } -yy1719: +yy1731: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1704; - if (yych <= '\t') goto yy1719; - if (yych >= '\v') goto yy1704; + if (yych <= 0x08) goto yy1716; + if (yych <= '\t') goto yy1731; + if (yych >= '\v') goto yy1716; } else { - if (yych <= '\r') goto yy1721; - if (yych == ' ') goto yy1719; - goto yy1704; + if (yych <= '\r') goto yy1733; + if (yych == ' ') goto yy1731; + goto yy1716; } -yy1721: +yy1733: ++p; { return (bufsize_t)(p - start); } -yy1723: +yy1735: ++p; yych = *p; - if (yych == ' ') goto yy1723; - if (yych != '*') goto yy1704; -yy1725: + if (yych == ' ') goto yy1735; + if (yych != '*') goto yy1716; +yy1737: ++p; yych = *p; - if (yych == ' ') goto yy1725; - if (yych != '*') goto yy1704; -yy1727: + if (yych == ' ') goto yy1737; + if (yych != '*') goto yy1716; +yy1739: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1727; + goto yy1739; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1704; - if (yych >= '\n') goto yy1731; + if (yych <= 0x08) goto yy1716; + if (yych >= '\n') goto yy1743; } else { - if (yych == '\r') goto yy1731; - goto yy1704; + if (yych == '\r') goto yy1743; + goto yy1716; } -yy1729: +yy1741: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1704; - if (yych <= '\t') goto yy1729; - if (yych >= '\v') goto yy1704; + if (yych <= 0x08) goto yy1716; + if (yych <= '\t') goto yy1741; + if (yych >= '\v') goto yy1716; } else { - if (yych <= '\r') goto yy1731; - if (yych == ' ') goto yy1729; - goto yy1704; + if (yych <= '\r') goto yy1743; + if (yych == ' ') goto yy1741; + goto yy1716; } -yy1731: +yy1743: ++p; { return (bufsize_t)(p - start); } } @@ -14509,80 +14509,80 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) }; yych = *p; if (yych <= '_') { - if (yych != '\n') goto yy1738; + if (yych != '\n') goto yy1750; } else { - if (yych <= '`') goto yy1736; - if (yych == '~') goto yy1737; - goto yy1738; + if (yych <= '`') goto yy1748; + if (yych == '~') goto yy1749; + goto yy1750; } -yy1735: +yy1747: { return 0; } -yy1736: +yy1748: yych = *(marker = ++p); - if (yych == '`') goto yy1747; - goto yy1735; -yy1737: + if (yych == '`') goto yy1759; + goto yy1747; +yy1749: yych = *(marker = ++p); - if (yych == '~') goto yy1739; - goto yy1735; -yy1738: + if (yych == '~') goto yy1751; + goto yy1747; +yy1750: yych = *++p; - goto yy1735; -yy1739: + goto yy1747; +yy1751: yych = *++p; if (yybm[0+yych] & 16) { - goto yy1741; + goto yy1753; } -yy1740: +yy1752: p = marker; - goto yy1735; -yy1741: + goto yy1747; +yy1753: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1743; + goto yy1755; } - if (yych <= 0x00) goto yy1740; - if (yych <= '}') goto yy1745; - goto yy1741; -yy1743: + if (yych <= 0x00) goto yy1752; + if (yych <= '}') goto yy1757; + goto yy1753; +yy1755: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1743; + goto yy1755; } - if (yych <= 0x00) goto yy1740; - if (yych >= '~') goto yy1740; -yy1745: + if (yych <= 0x00) goto yy1752; + if (yych >= '~') goto yy1752; +yy1757: ++p; p = marker; { return (bufsize_t)(p - start); } -yy1747: +yy1759: yych = *++p; if (yybm[0+yych] & 64) { - goto yy1748; + goto yy1760; } - goto yy1740; -yy1748: + goto yy1752; +yy1760: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1750; + goto yy1762; } - if (yych <= 0x00) goto yy1740; - if (yych <= '_') goto yy1752; - goto yy1748; -yy1750: + if (yych <= 0x00) goto yy1752; + if (yych <= '_') goto yy1764; + goto yy1760; +yy1762: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1750; + goto yy1762; } - if (yych <= 0x00) goto yy1740; - if (yych >= '`') goto yy1740; -yy1752: + if (yych <= 0x00) goto yy1752; + if (yych >= '`') goto yy1752; +yy1764: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -14634,95 +14634,95 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) }; yych = *p; if (yych <= '_') { - if (yych != '\n') goto yy1759; + if (yych != '\n') goto yy1771; } else { - if (yych <= '`') goto yy1757; - if (yych == '~') goto yy1758; - goto yy1759; + if (yych <= '`') goto yy1769; + if (yych == '~') goto yy1770; + goto yy1771; } -yy1756: +yy1768: { return 0; } -yy1757: +yy1769: yych = *(marker = ++p); - if (yych == '`') goto yy1768; - goto yy1756; -yy1758: + if (yych == '`') goto yy1780; + goto yy1768; +yy1770: yych = *(marker = ++p); - if (yych == '~') goto yy1760; - goto yy1756; -yy1759: + if (yych == '~') goto yy1772; + goto yy1768; +yy1771: yych = *++p; - goto yy1756; -yy1760: + goto yy1768; +yy1772: yych = *++p; if (yybm[0+yych] & 32) { - goto yy1762; + goto yy1774; } -yy1761: +yy1773: p = marker; - goto yy1756; -yy1762: + goto yy1768; +yy1774: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1764; + goto yy1776; } if (yych <= '\f') { - if (yych == '\n') goto yy1766; - goto yy1761; + if (yych == '\n') goto yy1778; + goto yy1773; } else { - if (yych <= '\r') goto yy1766; - if (yych == '~') goto yy1762; - goto yy1761; + if (yych <= '\r') goto yy1778; + if (yych == '~') goto yy1774; + goto yy1773; } -yy1764: +yy1776: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1764; + goto yy1776; } - if (yych == '\n') goto yy1766; - if (yych != '\r') goto yy1761; -yy1766: + if (yych == '\n') goto yy1778; + if (yych != '\r') goto yy1773; +yy1778: ++p; p = marker; { return (bufsize_t)(p - start); } -yy1768: +yy1780: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1769; + goto yy1781; } - goto yy1761; -yy1769: + goto yy1773; +yy1781: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1769; + goto yy1781; } if (yych <= '\f') { - if (yych <= 0x08) goto yy1761; - if (yych <= '\t') goto yy1771; - if (yych <= '\n') goto yy1773; - goto yy1761; + if (yych <= 0x08) goto yy1773; + if (yych <= '\t') goto yy1783; + if (yych <= '\n') goto yy1785; + goto yy1773; } else { - if (yych <= '\r') goto yy1773; - if (yych != ' ') goto yy1761; + if (yych <= '\r') goto yy1785; + if (yych != ' ') goto yy1773; } -yy1771: +yy1783: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1761; - if (yych <= '\t') goto yy1771; - if (yych >= '\v') goto yy1761; + if (yych <= 0x08) goto yy1773; + if (yych <= '\t') goto yy1783; + if (yych >= '\v') goto yy1773; } else { - if (yych <= '\r') goto yy1773; - if (yych == ' ') goto yy1771; - goto yy1761; + if (yych <= '\r') goto yy1785; + if (yych == ' ') goto yy1783; + goto yy1773; } -yy1773: +yy1785: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -14740,664 +14740,664 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; - if (yych == '\n') goto yy1777; - if (yych == '&') goto yy1778; - goto yy1779; -yy1777: + if (yych == '\n') goto yy1789; + if (yych == '&') goto yy1790; + goto yy1791; +yy1789: { return 0; } -yy1778: +yy1790: yych = *(marker = ++p); if (yych <= '@') { - if (yych == '#') goto yy1780; - goto yy1777; + if (yych == '#') goto yy1792; + goto yy1789; } else { - if (yych <= 'Z') goto yy1782; - if (yych <= '`') goto yy1777; - if (yych <= 'z') goto yy1782; - goto yy1777; + if (yych <= 'Z') goto yy1794; + if (yych <= '`') goto yy1789; + if (yych <= 'z') goto yy1794; + goto yy1789; } -yy1779: +yy1791: yych = *++p; - goto yy1777; -yy1780: + goto yy1789; +yy1792: yych = *++p; if (yych <= 'W') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1817; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1829; } else { - if (yych <= 'X') goto yy1816; - if (yych == 'x') goto yy1816; + if (yych <= 'X') goto yy1828; + if (yych == 'x') goto yy1828; } -yy1781: +yy1793: p = marker; - goto yy1777; -yy1782: + goto yy1789; +yy1794: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1781; - if (yych >= ':') goto yy1781; + if (yych <= '/') goto yy1793; + if (yych >= ':') goto yy1793; } else { - if (yych <= 'Z') goto yy1783; - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= 'Z') goto yy1795; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } -yy1783: +yy1795: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1786; - if (yych <= ':') goto yy1781; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1798; + if (yych <= ':') goto yy1793; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; - goto yy1786; + if (yych <= '@') goto yy1793; + goto yy1798; } else { - if (yych <= '`') goto yy1781; - if (yych <= 'z') goto yy1786; - goto yy1781; + if (yych <= '`') goto yy1793; + if (yych <= 'z') goto yy1798; + goto yy1793; } } -yy1784: +yy1796: ++p; { return (bufsize_t)(p - start); } -yy1786: +yy1798: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1787; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1799; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1787: +yy1799: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1788; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1800; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1788: +yy1800: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1789; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1801; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1789: +yy1801: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1790; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1802; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1790: +yy1802: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1791; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1803; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1791: +yy1803: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1792; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1804; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1792: +yy1804: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1793; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1805; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1793: +yy1805: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1794; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1806; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1794: +yy1806: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1795; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1807; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1795: +yy1807: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1796; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1808; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1796: +yy1808: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1797; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1809; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1797: +yy1809: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1798; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1810; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1798: +yy1810: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1799; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1811; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1799: +yy1811: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1800; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1812; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1800: +yy1812: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1801; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1813; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1801: +yy1813: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1802; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1814; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1802: +yy1814: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1803; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1815; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1803: +yy1815: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1804; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1816; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1804: +yy1816: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1805; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1817; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1805: +yy1817: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1806; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1818; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1806: +yy1818: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1807; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1819; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1807: +yy1819: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1808; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1820; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1808: +yy1820: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1809; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1821; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1809: +yy1821: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1810; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1822; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1810: +yy1822: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1811; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1823; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1811: +yy1823: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1812; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1824; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1812: +yy1824: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1813; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1825; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1813: +yy1825: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1814; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1826; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1814: +yy1826: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1815; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1827; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= '{') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= '{') goto yy1793; } } -yy1815: +yy1827: yych = *++p; - if (yych == ';') goto yy1784; - goto yy1781; -yy1816: + if (yych == ';') goto yy1796; + goto yy1793; +yy1828: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1824; - goto yy1781; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1836; + goto yy1793; } else { - if (yych <= 'F') goto yy1824; - if (yych <= '`') goto yy1781; - if (yych <= 'f') goto yy1824; - goto yy1781; + if (yych <= 'F') goto yy1836; + if (yych <= '`') goto yy1793; + if (yych <= 'f') goto yy1836; + goto yy1793; } -yy1817: - yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1818; - if (yych == ';') goto yy1784; - goto yy1781; -yy1818: - yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1819; - if (yych == ';') goto yy1784; - goto yy1781; -yy1819: - yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1820; - if (yych == ';') goto yy1784; - goto yy1781; -yy1820: - yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1821; - if (yych == ';') goto yy1784; - goto yy1781; -yy1821: - yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1822; - if (yych == ';') goto yy1784; - goto yy1781; -yy1822: +yy1829: yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1823; - if (yych == ';') goto yy1784; - goto yy1781; -yy1823: + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1830; + if (yych == ';') goto yy1796; + goto yy1793; +yy1830: yych = *++p; - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1815; - if (yych == ';') goto yy1784; - goto yy1781; -yy1824: + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1831; + if (yych == ';') goto yy1796; + goto yy1793; +yy1831: + yych = *++p; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1832; + if (yych == ';') goto yy1796; + goto yy1793; +yy1832: + yych = *++p; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1833; + if (yych == ';') goto yy1796; + goto yy1793; +yy1833: + yych = *++p; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1834; + if (yych == ';') goto yy1796; + goto yy1793; +yy1834: + yych = *++p; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1835; + if (yych == ';') goto yy1796; + goto yy1793; +yy1835: + yych = *++p; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1827; + if (yych == ';') goto yy1796; + goto yy1793; +yy1836: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1825; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1837; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= 'g') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= 'g') goto yy1793; } } -yy1825: +yy1837: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1826; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1838; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= 'g') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= 'g') goto yy1793; } } -yy1826: +yy1838: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1827; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1839; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= 'g') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= 'g') goto yy1793; } } -yy1827: +yy1839: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1828; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1840; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= 'g') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= 'g') goto yy1793; } } -yy1828: +yy1840: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1829; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1841; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= 'g') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= 'g') goto yy1793; } } -yy1829: +yy1841: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1830; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1842; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; + if (yych <= '@') goto yy1793; } else { - if (yych <= '`') goto yy1781; - if (yych >= 'g') goto yy1781; + if (yych <= '`') goto yy1793; + if (yych >= 'g') goto yy1793; } } -yy1830: +yy1842: ++p; if ((yych = *p) <= ';') { - if (yych <= '/') goto yy1781; - if (yych <= '9') goto yy1815; - if (yych <= ':') goto yy1781; - goto yy1784; + if (yych <= '/') goto yy1793; + if (yych <= '9') goto yy1827; + if (yych <= ':') goto yy1793; + goto yy1796; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1781; - goto yy1815; + if (yych <= '@') goto yy1793; + goto yy1827; } else { - if (yych <= '`') goto yy1781; - if (yych <= 'f') goto yy1815; - goto yy1781; + if (yych <= '`') goto yy1793; + if (yych <= 'f') goto yy1827; + goto yy1793; } } } diff --git a/src/scanners.re b/src/scanners.re index 3722a999df..dfe15872fe 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -60,7 +60,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, htmltag = opentag | closetag | htmlcomment | processinginstruction | declaration | cdata; - in_parens_nosp = [(] (reg_char|escaped_char)* [)]; + in_parens_nosp = [(] (reg_char|escaped_char|[\\])* [)]; in_double_quotes = ["] (escaped_char|[^"\x00])* ["]; in_single_quotes = ['] (escaped_char|[^'\x00])* [']; @@ -141,7 +141,7 @@ bufsize_t _scan_link_url(const unsigned char *p) const unsigned char *start = p; /*!re2c [ \r\n]* [<] ([^<>\r\n\\\x00] | escaped_char | [\\])* [>] { return (bufsize_t)(p - start); } - [ \r\n]* (reg_char+ | escaped_char | in_parens_nosp)* { return (bufsize_t)(p - start); } + [ \r\n]* (reg_char+ | escaped_char | in_parens_nosp | [\\])* { return (bufsize_t)(p - start); } .? { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From fbeb28c9bd35823f179a69e051faa93d01124ebd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 15 Jun 2015 10:44:55 -0700 Subject: Updated spec.txt. --- test/spec.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index ac2ce2a5d6..f6ea79399b 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2033,6 +2033,15 @@ This is not a link reference definition, because there are

                            [foo]: /url "title" ok

                            . +This is a link reference definition, but it has no title: + +. +[foo]: /url +"title" ok +. +

                            "title" ok

                            +. + This is not a link reference definition, because it is indented four spaces: @@ -5833,7 +5842,9 @@ A [link text](@link-text) consists of a sequence of zero or more inline elements enclosed by square brackets (`[` and `]`). The following rules apply: -- Links may not contain other links, at any level of nesting. +- Links may not contain other links, at any level of nesting. If + multiple otherwise valid link definitions appear nested inside each + other, the inner-most definition is used. - Brackets are allowed in the [link text] only if (a) they are backslash-escaped or (b) they appear as a matched pair of brackets, -- cgit 0.0.5-2-1-g0f52 From d55f1130acf9708de4f74556767251f8ed85e356 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 15 Jun 2015 11:28:52 -0700 Subject: inlines.c: Added utility functions to skip spaces and line endings. --- src/inlines.c | 58 +++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index a96a479c62..28250e15e8 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -50,6 +50,12 @@ typedef struct { delimiter *last_delim; } subject; +static inline bool +S_is_line_end_char(char c) +{ + return (c == '\n' || c == '\r'); +} + static delimiter* S_insert_emph(subject *subj, delimiter *opener, delimiter *closer); @@ -191,6 +197,32 @@ static inline int is_eof(subject* subj) // Advance the subject. Doesn't check for eof. #define advance(subj) (subj)->pos += 1 +static inline bool +skip_spaces(subject *subj) +{ + bool skipped = false; + while (peek_char(subj) == ' ') { + advance(subj); + skipped = true; + } + return skipped; +} + +static inline bool +skip_line_end(subject *subj) +{ + bool seen_line_end_char = false; + if (peek_char(subj) == '\r') { + advance(subj); + seen_line_end_char = true; + } + if (peek_char(subj) == '\n') { + advance(subj); + seen_line_end_char = true; + } + return seen_line_end_char || is_eof(subj); +} + // Take characters while a predicate holds, and return a string. static inline cmark_chunk take_while(subject* subj, int (*f)(int)) { @@ -605,8 +637,7 @@ static cmark_node* handle_backslash(subject *subj) if (cmark_ispunct(nextchar)) { // only ascii symbols and newline can be escaped advance(subj); return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); - } else if (nextchar == '\r' || nextchar == '\n') { - advance(subj); + } else if (!is_eof(subj) && skip_line_end(subj)) { return make_linebreak(); } else { return make_str(cmark_chunk_literal("\\")); @@ -948,9 +979,7 @@ static cmark_node* handle_newline(subject *subj) // skip over newline advance(subj); // skip spaces at beginning of line - while (peek_char(subj) == ' ') { - advance(subj); - } + skip_spaces(subj); if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && peek_at(subj, nlpos - 2) == ' ') { @@ -1081,7 +1110,8 @@ static int parse_inline(subject* subj, cmark_node * parent, int options) subj->pos = endpos; // if we're at a newline, strip trailing spaces. - if (peek_char(subj) == '\r' || peek_char(subj) == '\n') { + if (peek_char(subj) == '\r' || + peek_char(subj) == '\n') { cmark_chunk_rtrim(&contents); } @@ -1108,11 +1138,9 @@ extern void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, // Parse zero or more space characters, including at most one newline. static void spnl(subject* subj) { - bool seen_newline = false; - while (peek_char(subj) == ' ' || - (!seen_newline && - (seen_newline = peek_char(subj) == '\r' || peek_char(subj) == '\n'))) { - advance(subj); + skip_spaces(subj); + if (skip_line_end(subj)) { + skip_spaces(subj); } } @@ -1166,12 +1194,8 @@ bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map title = cmark_chunk_literal(""); } // parse final spaces and newline: - while (peek_char(&subj) == ' ') { - advance(&subj); - } - if (peek_char(&subj) == '\r' || peek_char(&subj) == '\n') { - advance(&subj); - } else if (peek_char(&subj) != 0) { + skip_spaces(&subj); + if (!skip_line_end(&subj)) { return 0; } // insert reference into refmap -- cgit 0.0.5-2-1-g0f52 From f904f701cf4390b4d5531c5626c5cf08d85a913f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 15 Jun 2015 11:31:36 -0700 Subject: Fixed cases like ``` [ref]: url "title" ok ``` Here we should parse the first line as a reference. --- src/inlines.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 28250e15e8..f4daeb1fea 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1196,7 +1196,15 @@ bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map // parse final spaces and newline: skip_spaces(&subj); if (!skip_line_end(&subj)) { - return 0; + if (matchlen) { // try rewinding before title + subj.pos = beforetitle; + skip_spaces(&subj); + if (!skip_line_end(&subj)) { + return 0; + } + } else { + return 0; + } } // insert reference into refmap cmark_reference_create(refmap, &lab, &url, &title); -- cgit 0.0.5-2-1-g0f52 From 208c794def61eb819ed6eebe1d51867613addce0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 09:54:31 -0700 Subject: Replace gperf-based entity lookup with binary tree lookup. The primary advantage is a big reduction in the size of the compiled library and executable (> 100K). There should be no measurable performance difference in normal documents. I detected a slight performance hit (around 5%) in a file containing 1,000,000 entities. * Removed `src/html_unescape.gperf` and `src/html_unescape.h`. * Added `src/entities.h` (generated by `tools/make_entities_h.py`). * Added binary tree lookup functions to `houdini_html_u.c`, and use the data in `src/entities.h`. --- Makefile | 9 +- src/CMakeLists.txt | 3 +- src/entities.h | 2153 ++++++++ src/houdini_html_u.c | 53 +- src/html_unescape.gperf | 2130 -------- src/html_unescape.h | 13375 --------------------------------------------- tools/make_entities_h.py | 107 + 7 files changed, 2307 insertions(+), 15523 deletions(-) create mode 100644 src/entities.h delete mode 100644 src/html_unescape.gperf delete mode 100644 src/html_unescape.h create mode 100644 tools/make_entities_h.py diff --git a/Makefile b/Makefile index 5ad87d0457..23a6a6c0ad 100644 --- a/Makefile +++ b/Makefile @@ -94,12 +94,6 @@ archive: clean: rm -rf $(BUILDDIR) $(MINGW_BUILDDIR) $(MINGW_INSTALLDIR) -# We include html_unescape.h in the repository, so this shouldn't -# normally need to be generated. -$(SRCDIR)/html_unescape.h: $(SRCDIR)/html_unescape.gperf - gperf -L ANSI-C -I -t -N find_entity -H hash_entity -K entity -C -l \ - -F ',{0}' --null-strings -m5 -P -Q entity_pool $< > $@ - # We include case_fold_switch.inc in the repository, so this shouldn't # normally need to be generated. $(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt @@ -117,6 +111,9 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re esac re2c --case-insensitive -b -i --no-generation-date -o $@ $< +$(SRCDIR)/entities.h: tools/make_entities_h.py + python3 $< > $@ + update-spec: curl 'https://raw.githubusercontent.com/jgm/CommonMark/master/spec.txt'\ > $(SPEC) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 716b97bbec..06de9ef15e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,9 +14,9 @@ set(HEADERS utf8.h scanners.h inlines.h - html_unescape.h houdini.h cmark_ctype.h + entities.h ) set(LIBRARY_SOURCES cmark.c @@ -33,7 +33,6 @@ set(LIBRARY_SOURCES xml.c html.c commonmark.c - html_unescape.gperf houdini_href_e.c houdini_html_e.c houdini_html_u.c diff --git a/src/entities.h b/src/entities.h new file mode 100644 index 0000000000..6125f23e08 --- /dev/null +++ b/src/entities.h @@ -0,0 +1,2153 @@ +#ifndef CMARK_ENTITIES_H +#define CMARK_ENTITIES_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct cmark_entity_node { + unsigned long value; + unsigned char *bytes; + int less; + int greater; +}; + +#define CMARK_ENTITY_MIN_LENGTH 2 +#define CMARK_ENTITY_MAX_LENGTH 31 + +static struct cmark_entity_node cmark_entities[] = { +{132476, (unsigned char*)"\342\203\233", 0, 0}, /* ⃛ */ +{5862221, (unsigned char*)"\342\205\205", 0, 0}, /* ⅅ */ +{5862336, (unsigned char*)"\76", 1, 3}, /* > */ +{5862355, (unsigned char*)"\342\213\231", 0, 0}, /* ⋙ */ +{5862368, (unsigned char*)"\342\211\253", 2, 6}, /* ≫ */ +{5862427, (unsigned char*)"\342\204\221", 0, 0}, /* ℑ */ +{5862501, (unsigned char*)"\74", 5, 7}, /* < */ +{5862525, (unsigned char*)"\342\213\230", 0, 0}, /* ⋘ */ +{5862533, (unsigned char*)"\342\211\252", 4, 12}, /* ≪ */ +{5862567, (unsigned char*)"\316\234", 0, 0}, /* Μ */ +{5862600, (unsigned char*)"\316\235", 9, 11}, /* Ν */ +{5862630, (unsigned char*)"\342\251\224", 0, 0}, /* ⩔ */ +{5862654, (unsigned char*)"\316\240", 10, 14}, /* Π */ +{5862663, (unsigned char*)"\342\252\273", 0, 0}, /* ⪻ */ +{5862716, (unsigned char*)"\342\204\234", 13, 15}, /* ℜ */ +{5862747, (unsigned char*)"\342\252\274", 0, 0}, /* ⪼ */ +{5862918, (unsigned char*)"\316\236", 8, 25}, /* Ξ */ +{5863209, (unsigned char*)"\342\210\276", 0, 0}, /* ∾ */ +{5863212, (unsigned char*)"\342\201\241", 17, 0}, /* ⁡ */ +{5863222, (unsigned char*)"\342\211\210", 18, 20}, /* ≈ */ +{5863309, (unsigned char*)"\342\205\206", 0, 0}, /* ⅆ */ +{5863343, (unsigned char*)"\342\205\207", 19, 23}, /* ⅇ */ +{5863345, (unsigned char*)"\342\252\232", 0, 0}, /* ⪚ */ +{5863350, (unsigned char*)"\342\252\231", 22, 24}, /* ⪙ */ +{5863377, (unsigned char*)"\342\211\247", 0, 0}, /* ≧ */ +{5863409, (unsigned char*)"\342\211\245", 21, 29}, /* ≥ */ +{5863411, (unsigned char*)"\342\211\253", 0, 0}, /* ≫ */ +{5863416, (unsigned char*)"\342\211\267", 26, 28}, /* ≷ */ +{5863424, (unsigned char*)"\76", 0, 0}, /* > */ +{5863473, (unsigned char*)"\342\201\243", 27, 31}, /* ⁣ */ +{5863479, (unsigned char*)"\342\205\210", 0, 0}, /* ⅈ */ +{5863484, (unsigned char*)"\342\210\210", 30, 32}, /* ∈ */ +{5863490, (unsigned char*)"\342\201\242", 0, 0}, /* ⁢ */ +{5863542, (unsigned char*)"\342\211\246", 16, 50}, /* ≦ */ +{5863574, (unsigned char*)"\342\211\244", 0, 0}, /* ≤ */ +{5863576, (unsigned char*)"\342\211\266", 34, 0}, /* ≶ */ +{5863581, (unsigned char*)"\342\211\252", 35, 37}, /* ≪ */ +{5863589, (unsigned char*)"\74", 0, 0}, /* < */ +{5863618, (unsigned char*)"\342\210\223", 36, 40}, /* ∓ */ +{5863623, (unsigned char*)"\316\274", 0, 0}, /* μ */ +{5863640, (unsigned char*)"\342\211\240", 39, 41}, /* ≠ */ +{5863644, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{5863655, (unsigned char*)"\342\223\210", 38, 46}, /* Ⓢ */ +{5863656, (unsigned char*)"\316\275", 0, 0}, /* ν */ +{5863686, (unsigned char*)"\342\210\250", 43, 45}, /* ∨ */ +{5863710, (unsigned char*)"\317\200", 0, 0}, /* π */ +{5863714, (unsigned char*)"\302\261", 44, 48}, /* ± */ +{5863719, (unsigned char*)"\342\211\272", 0, 0}, /* ≺ */ +{5863791, (unsigned char*)"\342\204\236", 47, 49}, /* ℞ */ +{5863803, (unsigned char*)"\342\211\273", 0, 0}, /* ≻ */ +{5863948, (unsigned char*)"\342\204\230", 42, 58}, /* ℘ */ +{5863950, (unsigned char*)"\342\211\200", 0, 0}, /* ≀ */ +{5863974, (unsigned char*)"\316\276", 51, 53}, /* ξ */ +{9572911, (unsigned char*)"\342\246\225", 0, 0}, /* ⦕ */ +{9807607, (unsigned char*)"\342\245\270", 52, 56}, /* ⥸ */ +{9810777, (unsigned char*)"\342\213\227", 0, 0}, /* ⋗ */ +{9826907, (unsigned char*)"\342\211\263", 55, 57}, /* ≳ */ +{20607280, (unsigned char*)"\342\253\206", 0, 0}, /* ⫆ */ +{20616685, (unsigned char*)"\342\212\213", 54, 62}, /* ⊋ */ +{22422014, (unsigned char*)"\342\253\206\314\270", 0, 0}, /* ⫆̸ */ +{26105612, (unsigned char*)"\342\200\212", 59, 61}, /*   */ +{26239332, (unsigned char*)"\342\204\213", 0, 0}, /* ℋ */ +{26413280, (unsigned char*)"\321\212", 60, 64}, /* ъ */ +{28586989, (unsigned char*)"\342\211\211", 0, 0}, /* ≉ */ +{30561836, (unsigned char*)"\342\231\245", 63, 65}, /* ♥ */ +{30950243, (unsigned char*)"\342\200\246", 0, 0}, /* … */ +{31156260, (unsigned char*)"\342\212\271", 33, 99}, /* ⊹ */ +{31475919, (unsigned char*)"\342\244\217", 0, 0}, /* ⤏ */ +{33509884, (unsigned char*)"\342\231\256", 67, 0}, /* ♮ */ +{37287965, (unsigned char*)"\342\213\255", 68, 70}, /* ⋭ */ +{42854073, (unsigned char*)"\342\210\273", 0, 0}, /* ∻ */ +{43013923, (unsigned char*)"\342\200\225", 69, 73}, /* ― */ +{47541480, (unsigned char*)"\342\204\217", 0, 0}, /* ℏ */ +{47847360, (unsigned char*)"\304\247", 72, 74}, /* ħ */ +{54319189, (unsigned char*)"\342\201\203", 0, 0}, /* ⁃ */ +{54807921, (unsigned char*)"\342\200\220", 71, 79}, /* ‐ */ +{59944000, (unsigned char*)"\342\245\260", 0, 0}, /* ⥰ */ +{64038461, (unsigned char*)"\342\216\264", 76, 78}, /* ⎴ */ +{65028672, (unsigned char*)"\303\255", 0, 0}, /* í */ +{66296283, (unsigned char*)"\342\210\253", 77, 81}, /* ∫ */ +{68537958, (unsigned char*)"\342\211\267", 0, 0}, /* ≷ */ +{72661539, (unsigned char*)"\303\254", 80, 82}, /* ì */ +{74718411, (unsigned char*)"\342\250\214", 0, 0}, /* ⨌ */ +{74894658, (unsigned char*)"\342\247\234", 75, 91}, /* ⧜ */ +{80423799, (unsigned char*)"\342\204\205", 0, 0}, /* ℅ */ +{80858226, (unsigned char*)"\304\261", 84, 86}, /* ı */ +{81036352, (unsigned char*)"\342\212\272", 0, 0}, /* ⊺ */ +{84632832, (unsigned char*)"\302\277", 85, 89}, /* ¿ */ +{85198288, (unsigned char*)"\342\245\231", 0, 0}, /* ⥙ */ +{86583233, (unsigned char*)"\342\213\263", 88, 90}, /* ⋳ */ +{87766464, (unsigned char*)"\304\251", 0, 0}, /* ĩ */ +{97324795, (unsigned char*)"\342\251\230", 87, 95}, /* ⩘ */ +{98090803, (unsigned char*)"\342\200\241", 0, 0}, /* ‡ */ +{107934141, (unsigned char*)"\342\211\214", 92, 94}, /* ≌ */ +{113713274, (unsigned char*)"\342\237\247", 0, 0}, /* ⟧ */ +{115173945, (unsigned char*)"\342\251\267", 93, 97}, /* ⩷ */ +{118531391, (unsigned char*)"\342\206\275", 0, 0}, /* ↽ */ +{125578709, (unsigned char*)"\321\230", 96, 98}, /* ј */ +{143760584, (unsigned char*)"\317\260", 0, 0}, /* ϰ */ +{145074172, (unsigned char*)"\342\244\233", 83, 116}, /* ⤛ */ +{145724305, (unsigned char*)"\304\267", 0, 0}, /* ķ */ +{147916603, (unsigned char*)"\342\212\225", 100, 0}, /* ⊕ */ +{150936129, (unsigned char*)"\304\270", 101, 103}, /* ĸ */ +{151795502, (unsigned char*)"\342\246\261", 0, 0}, /* ⦱ */ +{165680359, (unsigned char*)"\342\213\253", 102, 106}, /* ⋫ */ +{167411619, (unsigned char*)"\342\206\227", 0, 0}, /* ↗ */ +{182434851, (unsigned char*)"\304\272", 105, 107}, /* ĺ */ +{182574714, (unsigned char*)"\342\204\222", 0, 0}, /* ℒ */ +{182772998, (unsigned char*)"\316\273", 104, 112}, /* λ */ +{182814648, (unsigned char*)"\342\237\250", 0, 0}, /* ⟨ */ +{182970191, (unsigned char*)"\342\244\235", 109, 111}, /* ⤝ */ +{182970249, (unsigned char*)"\342\206\251", 0, 0}, /* ↩ */ +{182970386, (unsigned char*)"\342\206\253", 110, 114}, /* ↫ */ +{182970514, (unsigned char*)"\342\244\271", 0, 0}, /* ⤹ */ +{182970646, (unsigned char*)"\342\206\242", 113, 115}, /* ↢ */ +{183023644, (unsigned char*)"\342\244\231", 0, 0}, /* ⤙ */ +{184137486, (unsigned char*)"\173", 108, 124}, /* { */ +{184137492, (unsigned char*)"\133", 0, 0}, /* [ */ +{184731396, (unsigned char*)"\304\276", 117, 119}, /* ľ */ +{184859698, (unsigned char*)"\304\274", 0, 0}, /* ļ */ +{186495580, (unsigned char*)"\342\200\236", 118, 122}, /* „ */ +{187734864, (unsigned char*)"\342\251\277", 0, 0}, /* ⩿ */ +{187737800, (unsigned char*)"\342\252\223", 121, 123}, /* ⪓ */ +{188577519, (unsigned char*)"\342\245\274", 0, 0}, /* ⥼ */ +{188681203, (unsigned char*)"\342\214\212", 120, 128}, /* ⌊ */ +{190661197, (unsigned char*)"\342\245\252", 0, 0}, /* ⥪ */ +{193450403, (unsigned char*)"\46", 125, 127}, /* & */ +{193451170, (unsigned char*)"\320\220", 0, 0}, /* А */ +{193451262, (unsigned char*)"\360\235\224\204", 126, 130}, /* 𝔄 */ +{193451512, (unsigned char*)"\342\251\223", 0, 0}, /* ⩓ */ +{193452259, (unsigned char*)"\320\221", 129, 131}, /* Б */ +{193452351, (unsigned char*)"\360\235\224\205", 0, 0}, /* 𝔅 */ +{193453273, (unsigned char*)"\342\213\222", 66, 199}, /* ⋒ */ +{193453440, (unsigned char*)"\342\204\255", 0, 0}, /* ℭ */ +{193453497, (unsigned char*)"\316\247", 133, 0}, /* Χ */ +{193453933, (unsigned char*)"\342\213\223", 134, 136}, /* ⋓ */ +{193454437, (unsigned char*)"\320\224", 0, 0}, /* Д */ +{193454490, (unsigned char*)"\342\210\207", 135, 139}, /* ∇ */ +{193454529, (unsigned char*)"\360\235\224\207", 0, 0}, /* 𝔇 */ +{193454783, (unsigned char*)"\305\212", 138, 140}, /* Ŋ */ +{193454828, (unsigned char*)"\302\250", 0, 0}, /* ¨ */ +{193454982, (unsigned char*)"\303\220", 137, 145}, /* Ð */ +{193455526, (unsigned char*)"\320\255", 0, 0}, /* Э */ +{193455618, (unsigned char*)"\360\235\224\210", 142, 144}, /* 𝔈 */ +{193456063, (unsigned char*)"\316\227", 0, 0}, /* Η */ +{193456615, (unsigned char*)"\320\244", 143, 147}, /* Ф */ +{193456707, (unsigned char*)"\360\235\224\211", 0, 0}, /* 𝔉 */ +{193457704, (unsigned char*)"\320\223", 146, 148}, /* Г */ +{193457796, (unsigned char*)"\360\235\224\212", 0, 0}, /* 𝔊 */ +{193458722, (unsigned char*)"\136", 141, 158}, /* ^ */ +{193458885, (unsigned char*)"\342\204\214", 0, 0}, /* ℌ */ +{193459882, (unsigned char*)"\320\230", 150, 0}, /* И */ +{193459974, (unsigned char*)"\342\204\221", 151, 153}, /* ℑ */ +{193460240, (unsigned char*)"\342\210\254", 0, 0}, /* ∬ */ +{193460971, (unsigned char*)"\320\231", 152, 156}, /* Й */ +{193461063, (unsigned char*)"\360\235\224\215", 0, 0}, /* 𝔍 */ +{193462060, (unsigned char*)"\320\232", 155, 157}, /* К */ +{193462152, (unsigned char*)"\360\235\224\216", 0, 0}, /* 𝔎 */ +{193463149, (unsigned char*)"\320\233", 154, 162}, /* Л */ +{193463241, (unsigned char*)"\360\235\224\217", 0, 0}, /* 𝔏 */ +{193463660, (unsigned char*)"\342\206\260", 159, 161}, /* ↰ */ +{193464163, (unsigned char*)"\342\244\205", 0, 0}, /* ⤅ */ +{193464238, (unsigned char*)"\320\234", 160, 164}, /* М */ +{193464330, (unsigned char*)"\360\235\224\220", 0, 0}, /* 𝔐 */ +{193465327, (unsigned char*)"\320\235", 163, 165}, /* Н */ +{193465419, (unsigned char*)"\360\235\224\221", 0, 0}, /* 𝔑 */ +{193465718, (unsigned char*)"\342\253\254", 149, 183}, /* ⫬ */ +{193466416, (unsigned char*)"\320\236", 0, 0}, /* О */ +{193466508, (unsigned char*)"\360\235\224\222", 167, 0}, /* 𝔒 */ +{193467505, (unsigned char*)"\320\237", 168, 170}, /* П */ +{193467597, (unsigned char*)"\360\235\224\223", 0, 0}, /* 𝔓 */ +{193467654, (unsigned char*)"\316\246", 169, 173}, /* Φ */ +{193468017, (unsigned char*)"\316\250", 0, 0}, /* Ψ */ +{193468643, (unsigned char*)"\302\256", 172, 174}, /* ® */ +{193468686, (unsigned char*)"\360\235\224\224", 0, 0}, /* 𝔔 */ +{193469683, (unsigned char*)"\320\240", 171, 179}, /* Р */ +{193469775, (unsigned char*)"\342\204\234", 0, 0}, /* ℜ */ +{193469838, (unsigned char*)"\316\241", 176, 178}, /* Ρ */ +{193470194, (unsigned char*)"\342\206\261", 0, 0}, /* ↱ */ +{193470772, (unsigned char*)"\320\241", 177, 181}, /* С */ +{193470864, (unsigned char*)"\360\235\224\226", 0, 0}, /* 𝔖 */ +{193471343, (unsigned char*)"\342\213\220", 180, 182}, /* ⋐ */ +{193471354, (unsigned char*)"\342\210\221", 0, 0}, /* ∑ */ +{193471357, (unsigned char*)"\342\213\221", 175, 191}, /* ⋑ */ +{193471772, (unsigned char*)"\11", 0, 0}, /* */ +{193471791, (unsigned char*)"\316\244", 184, 186}, /* Τ */ +{193471861, (unsigned char*)"\320\242", 0, 0}, /* Т */ +{193471953, (unsigned char*)"\360\235\224\227", 185, 189}, /* 𝔗 */ +{193472950, (unsigned char*)"\320\243", 0, 0}, /* У */ +{193473042, (unsigned char*)"\360\235\224\230", 188, 190}, /* 𝔘 */ +{193474039, (unsigned char*)"\320\222", 0, 0}, /* В */ +{193474085, (unsigned char*)"\342\213\201", 187, 195}, /* ⋁ */ +{193474131, (unsigned char*)"\360\235\224\231", 0, 0}, /* 𝔙 */ +{193475220, (unsigned char*)"\360\235\224\232", 192, 194}, /* 𝔚 */ +{193476309, (unsigned char*)"\360\235\224\233", 0, 0}, /* 𝔛 */ +{193477306, (unsigned char*)"\320\253", 193, 197}, /* Ы */ +{193477398, (unsigned char*)"\360\235\224\234", 0, 0}, /* 𝔜 */ +{193478395, (unsigned char*)"\320\227", 196, 198}, /* З */ +{193478487, (unsigned char*)"\342\204\250", 0, 0}, /* ℨ */ +{193485966, (unsigned char*)"\342\210\276\314\263", 166, 232}, /* ∾̳ */ +{193485997, (unsigned char*)"\342\210\277", 0, 0}, /* ∿ */ +{193486018, (unsigned char*)"\320\260", 200, 0}, /* а */ +{193486110, (unsigned char*)"\360\235\224\236", 201, 203}, /* 𝔞 */ +{193486339, (unsigned char*)"\46", 0, 0}, /* & */ +{193486360, (unsigned char*)"\342\210\247", 202, 206}, /* ∧ */ +{193486363, (unsigned char*)"\342\210\240", 0, 0}, /* ∠ */ +{193486395, (unsigned char*)"\342\251\260", 205, 207}, /* ⩰ */ +{193486427, (unsigned char*)"\342\211\212", 0, 0}, /* ≊ */ +{193486541, (unsigned char*)"\52", 204, 212}, /* * */ +{193487107, (unsigned char*)"\320\261", 0, 0}, /* б */ +{193487199, (unsigned char*)"\360\235\224\237", 209, 211}, /* 𝔟 */ +{193487450, (unsigned char*)"\75\342\203\245", 0, 0}, /* =⃥ */ +{193487498, (unsigned char*)"\342\212\245", 210, 214}, /* ⊥ */ +{193488121, (unsigned char*)"\342\210\251", 0, 0}, /* ∩ */ +{193488288, (unsigned char*)"\360\235\224\240", 213, 215}, /* 𝔠 */ +{193488345, (unsigned char*)"\317\207", 0, 0}, /* χ */ +{193488387, (unsigned char*)"\342\227\213", 208, 224}, /* ○ */ +{193488781, (unsigned char*)"\342\210\252", 0, 0}, /* ∪ */ +{193489285, (unsigned char*)"\320\264", 217, 219}, /* д */ +{193489333, (unsigned char*)"\302\260", 0, 0}, /* ° */ +{193489377, (unsigned char*)"\360\235\224\241", 218, 222}, /* 𝔡 */ +{193489463, (unsigned char*)"\302\250", 0, 0}, /* ¨ */ +{193489480, (unsigned char*)"\303\267", 221, 223}, /* ÷ */ +{193489676, (unsigned char*)"\313\231", 0, 0}, /* ˙ */ +{193490374, (unsigned char*)"\321\215", 220, 228}, /* э */ +{193490466, (unsigned char*)"\360\235\224\242", 0, 0}, /* 𝔢 */ +{193490500, (unsigned char*)"\342\252\226", 225, 227}, /* ⪖ */ +{193490658, (unsigned char*)"\342\204\223", 0, 0}, /* ℓ */ +{193490665, (unsigned char*)"\342\252\225", 226, 230}, /* ⪕ */ +{193490719, (unsigned char*)"\305\213", 0, 0}, /* ŋ */ +{193490911, (unsigned char*)"\316\267", 229, 231}, /* η */ +{193490918, (unsigned char*)"\303\260", 0, 0}, /* ð */ +{193491463, (unsigned char*)"\321\204", 216, 249}, /* ф */ +{193491549, (unsigned char*)"\342\252\214", 0, 0}, /* ⪌ */ +{193491555, (unsigned char*)"\360\235\224\243", 233, 0}, /* 𝔣 */ +{193492477, (unsigned char*)"\342\252\206", 234, 236}, /* ⪆ */ +{193492552, (unsigned char*)"\320\263", 0, 0}, /* г */ +{193492605, (unsigned char*)"\342\213\233", 235, 239}, /* ⋛ */ +{193492610, (unsigned char*)"\342\211\245", 0, 0}, /* ≥ */ +{193492612, (unsigned char*)"\342\251\276", 238, 240}, /* ⩾ */ +{193492644, (unsigned char*)"\360\235\224\244", 0, 0}, /* 𝔤 */ +{193492666, (unsigned char*)"\342\213\231", 237, 245}, /* ⋙ */ +{193492797, (unsigned char*)"\342\252\222", 0, 0}, /* ⪒ */ +{193492825, (unsigned char*)"\342\252\245", 242, 244}, /* ⪥ */ +{193492834, (unsigned char*)"\342\252\244", 0, 0}, /* ⪤ */ +{193492863, (unsigned char*)"\342\211\251", 243, 247}, /* ≩ */ +{193492895, (unsigned char*)"\342\252\210", 0, 0}, /* ⪈ */ +{193493733, (unsigned char*)"\360\235\224\245", 246, 248}, /* 𝔥 */ +{193494730, (unsigned char*)"\320\270", 0, 0}, /* и */ +{193494810, (unsigned char*)"\342\207\224", 241, 257}, /* ⇔ */ +{193494822, (unsigned char*)"\360\235\224\246", 0, 0}, /* 𝔦 */ +{193495088, (unsigned char*)"\342\210\253", 250, 252}, /* ∫ */ +{193495819, (unsigned char*)"\320\271", 0, 0}, /* й */ +{193495911, (unsigned char*)"\360\235\224\247", 251, 255}, /* 𝔧 */ +{193496908, (unsigned char*)"\320\272", 0, 0}, /* к */ +{193496989, (unsigned char*)"\342\252\213", 254, 256}, /* ⪋ */ +{193497000, (unsigned char*)"\360\235\224\250", 0, 0}, /* 𝔨 */ +{193497922, (unsigned char*)"\342\252\205", 253, 261}, /* ⪅ */ +{193497926, (unsigned char*)"\342\252\253", 0, 0}, /* ⪫ */ +{193497997, (unsigned char*)"\320\273", 258, 260}, /* л */ +{193498045, (unsigned char*)"\342\213\232", 0, 0}, /* ⋚ */ +{193498055, (unsigned char*)"\342\211\244", 259, 263}, /* ≤ */ +{193498057, (unsigned char*)"\342\251\275", 0, 0}, /* ⩽ */ +{193498077, (unsigned char*)"\342\252\221", 262, 264}, /* ⪑ */ +{193498089, (unsigned char*)"\360\235\224\251", 0, 0}, /* 𝔩 */ +{193498308, (unsigned char*)"\342\211\250", 132, 398}, /* ≨ */ +{193498340, (unsigned char*)"\342\252\207", 0, 0}, /* ⪇ */ +{193498394, (unsigned char*)"\342\227\212", 266, 0}, /* ◊ */ +{193498480, (unsigned char*)"\342\200\216", 267, 269}, /* ‎ */ +{193498508, (unsigned char*)"\342\206\260", 0, 0}, /* ↰ */ +{193499011, (unsigned char*)"\342\206\246", 268, 272}, /* ↦ */ +{193499086, (unsigned char*)"\320\274", 0, 0}, /* м */ +{193499178, (unsigned char*)"\360\235\224\252", 271, 273}, /* 𝔪 */ +{193499233, (unsigned char*)"\342\213\231\314\270", 0, 0}, /* ⋙̸ */ +{193499241, (unsigned char*)"\342\204\247", 270, 278}, /* ℧ */ +{193499246, (unsigned char*)"\342\211\253\342\203\222", 0, 0}, /* ≫⃒ */ +{193499263, (unsigned char*)"\342\210\243", 275, 277}, /* ∣ */ +{193499403, (unsigned char*)"\342\213\230\314\270", 0, 0}, /* ⋘̸ */ +{193499411, (unsigned char*)"\342\211\252\342\203\222", 276, 280}, /* ≪⃒ */ +{193500100, (unsigned char*)"\342\211\211", 0, 0}, /* ≉ */ +{193500175, (unsigned char*)"\320\275", 279, 281}, /* н */ +{193500255, (unsigned char*)"\342\211\247\314\270", 0, 0}, /* ≧̸ */ +{193500267, (unsigned char*)"\360\235\224\253", 274, 291}, /* 𝔫 */ +{193500287, (unsigned char*)"\342\211\261", 0, 0}, /* ≱ */ +{193500302, (unsigned char*)"\342\211\257", 283, 0}, /* ≯ */ +{193500367, (unsigned char*)"\342\213\274", 284, 286}, /* ⋼ */ +{193500370, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{193500420, (unsigned char*)"\342\211\246\314\270", 285, 289}, /* ≦̸ */ +{193500452, (unsigned char*)"\342\211\260", 0, 0}, /* ≰ */ +{193500467, (unsigned char*)"\342\211\256", 288, 290}, /* ≮ */ +{193500566, (unsigned char*)"\302\254", 0, 0}, /* ¬ */ +{193500597, (unsigned char*)"\342\212\200", 287, 295}, /* ⊀ */ +{193500681, (unsigned char*)"\342\212\201", 0, 0}, /* ⊁ */ +{193500757, (unsigned char*)"\43", 292, 294}, /* # */ +{193501264, (unsigned char*)"\320\276", 0, 0}, /* о */ +{193501356, (unsigned char*)"\360\235\224\254", 293, 297}, /* 𝔬 */ +{193501391, (unsigned char*)"\342\247\201", 0, 0}, /* ⧁ */ +{193501417, (unsigned char*)"\316\251", 296, 298}, /* Ω */ +{193501556, (unsigned char*)"\342\247\200", 0, 0}, /* ⧀ */ +{193501738, (unsigned char*)"\342\251\235", 282, 316}, /* ⩝ */ +{193501756, (unsigned char*)"\342\251\233", 0, 0}, /* ⩛ */ +{193502280, (unsigned char*)"\342\210\245", 300, 0}, /* ∥ */ +{193502353, (unsigned char*)"\320\277", 301, 303}, /* п */ +{193502445, (unsigned char*)"\360\235\224\255", 0, 0}, /* 𝔭 */ +{193502502, (unsigned char*)"\317\206", 302, 306}, /* φ */ +{193502548, (unsigned char*)"\317\226", 0, 0}, /* ϖ */ +{193502796, (unsigned char*)"\342\252\263", 305, 307}, /* ⪳ */ +{193502828, (unsigned char*)"\342\252\257", 0, 0}, /* ⪯ */ +{193502865, (unsigned char*)"\317\210", 304, 312}, /* ψ */ +{193503534, (unsigned char*)"\360\235\224\256", 0, 0}, /* 𝔮 */ +{193504531, (unsigned char*)"\321\200", 309, 311}, /* р */ +{193504579, (unsigned char*)"\302\256", 0, 0}, /* ® */ +{193504623, (unsigned char*)"\360\235\224\257", 310, 314}, /* 𝔯 */ +{193504686, (unsigned char*)"\317\201", 0, 0}, /* ρ */ +{193504816, (unsigned char*)"\342\200\217", 313, 315}, /* ‏ */ +{193505042, (unsigned char*)"\342\206\261", 0, 0}, /* ↱ */ +{193505568, (unsigned char*)"\342\252\264", 308, 324}, /* ⪴ */ +{193505600, (unsigned char*)"\342\252\260", 0, 0}, /* ⪰ */ +{193505620, (unsigned char*)"\321\201", 317, 319}, /* с */ +{193505712, (unsigned char*)"\360\235\224\260", 0, 0}, /* 𝔰 */ +{193505785, (unsigned char*)"\302\255", 318, 322}, /* ­ */ +{193505806, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{193505945, (unsigned char*)"\342\252\252", 321, 323}, /* ⪪ */ +{193506003, (unsigned char*)"\57", 0, 0}, /* / */ +{193506078, (unsigned char*)"\342\226\241", 320, 328}, /* □ */ +{193506191, (unsigned char*)"\342\212\202", 0, 0}, /* ⊂ */ +{193506202, (unsigned char*)"\342\210\221", 325, 327}, /* ∑ */ +{193506205, (unsigned char*)"\342\212\203", 0, 0}, /* ⊃ */ +{193506639, (unsigned char*)"\317\204", 326, 330}, /* τ */ +{193506709, (unsigned char*)"\321\202", 0, 0}, /* т */ +{193506801, (unsigned char*)"\360\235\224\261", 329, 331}, /* 𝔱 */ +{193507096, (unsigned char*)"\342\212\244", 0, 0}, /* ⊤ */ +{193507798, (unsigned char*)"\321\203", 299, 365}, /* у */ +{193507890, (unsigned char*)"\360\235\224\262", 0, 0}, /* 𝔲 */ +{193508115, (unsigned char*)"\302\250", 333, 0}, /* ¨ */ +{193508887, (unsigned char*)"\320\262", 334, 336}, /* в */ +{193508933, (unsigned char*)"\342\210\250", 0, 0}, /* ∨ */ +{193508979, (unsigned char*)"\360\235\224\263", 335, 339}, /* 𝔳 */ +{193510068, (unsigned char*)"\360\235\224\264", 0, 0}, /* 𝔴 */ +{193511157, (unsigned char*)"\360\235\224\265", 338, 340}, /* 𝔵 */ +{193512154, (unsigned char*)"\321\213", 0, 0}, /* ы */ +{193512209, (unsigned char*)"\302\245", 337, 345}, /* ¥ */ +{193512246, (unsigned char*)"\360\235\224\266", 0, 0}, /* 𝔶 */ +{193513243, (unsigned char*)"\320\267", 342, 344}, /* з */ +{193513335, (unsigned char*)"\360\235\224\267", 0, 0}, /* 𝔷 */ +{193513888, (unsigned char*)"\342\200\215", 343, 347}, /* ‍ */ +{194365619, (unsigned char*)"\342\210\204", 0, 0}, /* ∄ */ +{195637820, (unsigned char*)"\342\245\253", 346, 348}, /* ⥫ */ +{196862862, (unsigned char*)"\305\200", 0, 0}, /* ŀ */ +{197097129, (unsigned char*)"\342\216\260", 341, 357}, /* ⎰ */ +{199495172, (unsigned char*)"\342\250\255", 0, 0}, /* ⨭ */ +{199734687, (unsigned char*)"\342\210\227", 350, 352}, /* ∗ */ +{199735180, (unsigned char*)"\137", 0, 0}, /* _ */ +{200148276, (unsigned char*)"\342\246\223", 351, 355}, /* ⦓ */ +{202753346, (unsigned char*)"\342\245\255", 0, 0}, /* ⥭ */ +{203705242, (unsigned char*)"\342\200\271", 354, 356}, /* ‹ */ +{204284395, (unsigned char*)"\342\200\232", 0, 0}, /* ‚ */ +{204388932, (unsigned char*)"\305\202", 353, 361}, /* ł */ +{205058880, (unsigned char*)"\342\211\204", 0, 0}, /* ≄ */ +{205143273, (unsigned char*)"\342\213\213", 358, 360}, /* ⋋ */ +{205173779, (unsigned char*)"\342\213\211", 0, 0}, /* ⋉ */ +{205268950, (unsigned char*)"\342\245\266", 359, 363}, /* ⥶ */ +{205465498, (unsigned char*)"\342\246\226", 0, 0}, /* ⦖ */ +{207854529, (unsigned char*)"\342\246\250", 362, 364}, /* ⦨ */ +{207854530, (unsigned char*)"\342\246\251", 0, 0}, /* ⦩ */ +{207854531, (unsigned char*)"\342\246\252", 349, 382}, /* ⦪ */ +{207854532, (unsigned char*)"\342\246\253", 0, 0}, /* ⦫ */ +{207854533, (unsigned char*)"\342\246\254", 366, 0}, /* ⦬ */ +{207854534, (unsigned char*)"\342\246\255", 367, 369}, /* ⦭ */ +{207854535, (unsigned char*)"\342\246\256", 0, 0}, /* ⦮ */ +{207854536, (unsigned char*)"\342\246\257", 368, 372}, /* ⦯ */ +{213837927, (unsigned char*)"\303\206", 0, 0}, /* Æ */ +{213839709, (unsigned char*)"\342\246\235", 371, 373}, /* ⦝ */ +{214913063, (unsigned char*)"\303\202", 0, 0}, /*  */ +{215243787, (unsigned char*)"\316\221", 370, 378}, /* Α */ +{215263241, (unsigned char*)"\304\200", 0, 0}, /* Ā */ +{215342041, (unsigned char*)"\304\204", 375, 377}, /* Ą */ +{215451990, (unsigned char*)"\303\205", 0, 0}, /* Å */ +{216633817, (unsigned char*)"\313\230", 376, 380}, /* ˘ */ +{217284905, (unsigned char*)"\304\210", 0, 0}, /* Ĉ */ +{217719328, (unsigned char*)"\342\210\267", 379, 381}, /* ∷ */ +{217830543, (unsigned char*)"\342\250\257", 0, 0}, /* ⨯ */ +{218409531, (unsigned char*)"\342\253\244", 374, 390}, /* ⫤ */ +{218546031, (unsigned char*)"\316\224", 0, 0}, /* Δ */ +{219656747, (unsigned char*)"\303\212", 383, 385}, /* Ê */ +{220006925, (unsigned char*)"\304\222", 0, 0}, /* Ē */ +{220085725, (unsigned char*)"\304\230", 384, 388}, /* Ę */ +{220172381, (unsigned char*)"\342\251\265", 0, 0}, /* ⩵ */ +{221960904, (unsigned char*)"\316\223", 387, 389}, /* Γ */ +{222028589, (unsigned char*)"\304\234", 0, 0}, /* Ĝ */ +{222035257, (unsigned char*)"\342\206\246", 386, 394}, /* ↦ */ +{222097927, (unsigned char*)"\342\226\256", 0, 0}, /* ▮ */ +{222550490, (unsigned char*)"\342\211\211", 391, 393}, /* ≉ */ +{223135681, (unsigned char*)"\313\207", 0, 0}, /* ˇ */ +{223214510, (unsigned char*)"\304\244", 392, 396}, /* Ĥ */ +{223504980, (unsigned char*)"\304\262", 0, 0}, /* IJ */ +{224364383, (unsigned char*)"\342\250\251", 395, 397}, /* ⨩ */ +{224400431, (unsigned char*)"\303\216", 0, 0}, /* Î */ +{224750609, (unsigned char*)"\304\252", 332, 465}, /* Ī */ +{224829409, (unsigned char*)"\304\256", 0, 0}, /* Į */ +{225049002, (unsigned char*)"\320\206", 399, 0}, /* І */ +{225586352, (unsigned char*)"\304\264", 400, 402}, /* Ĵ */ +{226162576, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{226234923, (unsigned char*)"\320\204", 401, 405}, /* Є */ +{226707954, (unsigned char*)"\316\232", 0, 0}, /* Κ */ +{230440821, (unsigned char*)"\305\222", 404, 406}, /* Œ */ +{231071751, (unsigned char*)"\52", 0, 0}, /* * */ +{231073597, (unsigned char*)"\342\253\260", 403, 411}, /* ⫰ */ +{231074886, (unsigned char*)"\302\267", 0, 0}, /* · */ +{231452883, (unsigned char*)"\342\212\237", 408, 410}, /* ⊟ */ +{231452885, (unsigned char*)"\342\210\270", 0, 0}, /* ∸ */ +{231515957, (unsigned char*)"\303\224", 409, 413}, /* Ô */ +{231866135, (unsigned char*)"\305\214", 0, 0}, /* Ō */ +{231870606, (unsigned char*)"\316\251", 412, 414}, /* Ω */ +{233240770, (unsigned char*)"\342\200\263", 0, 0}, /* ″ */ +{233879102, (unsigned char*)"\342\244\220", 407, 424}, /* ⤐ */ +{234590587, (unsigned char*)"\342\206\220", 0, 0}, /* ← */ +{236259641, (unsigned char*)"\305\234", 416, 0}, /* Ŝ */ +{236405321, (unsigned char*)"\342\206\232", 417, 419}, /* ↚ */ +{236445872, (unsigned char*)"\303\236", 0, 0}, /* Þ */ +{236472918, (unsigned char*)"\316\243", 418, 422}, /* Σ */ +{236789525, (unsigned char*)"\342\204\242", 0, 0}, /* ™ */ +{236834160, (unsigned char*)"\320\213", 421, 423}, /* Ћ */ +{237444644, (unsigned char*)"\342\210\223", 0, 0}, /* ∓ */ +{237620955, (unsigned char*)"\316\230", 420, 428}, /* Θ */ +{237663991, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{238191401, (unsigned char*)"\342\212\247", 425, 427}, /* ⊧ */ +{238604874, (unsigned char*)"\320\216", 0, 0}, /* Ў */ +{238631483, (unsigned char*)"\303\233", 426, 430}, /* Û */ +{238694683, (unsigned char*)"\342\212\253", 0, 0}, /* ⊫ */ +{238981661, (unsigned char*)"\305\252", 429, 431}, /* Ū */ +{239026702, (unsigned char*)"\342\213\203", 0, 0}, /* ⋃ */ +{239060461, (unsigned char*)"\305\262", 415, 449}, /* Ų */ +{239075368, (unsigned char*)"\342\212\245", 0, 0}, /* ⊥ */ +{239170410, (unsigned char*)"\305\256", 433, 0}, /* Ů */ +{239844667, (unsigned char*)"\342\212\251", 434, 436}, /* ⊩ */ +{241003325, (unsigned char*)"\305\264", 0, 0}, /* Ŵ */ +{241069393, (unsigned char*)"\342\213\200", 435, 439}, /* ⋀ */ +{243375167, (unsigned char*)"\305\266", 0, 0}, /* Ŷ */ +{243522155, (unsigned char*)"\342\210\276", 438, 440}, /* ∾ */ +{246524649, (unsigned char*)"\342\212\257", 0, 0}, /* ⊯ */ +{247674633, (unsigned char*)"\342\212\256", 437, 445}, /* ⊮ */ +{252862535, (unsigned char*)"\303\242", 0, 0}, /* â */ +{252875671, (unsigned char*)"\302\264", 442, 444}, /* ´ */ +{252937383, (unsigned char*)"\303\246", 0, 0}, /* æ */ +{253181551, (unsigned char*)"\342\204\265", 443, 447}, /* ℵ */ +{253193259, (unsigned char*)"\316\261", 0, 0}, /* α */ +{253212713, (unsigned char*)"\304\201", 446, 448}, /* ā */ +{253212999, (unsigned char*)"\342\250\277", 0, 0}, /* ⨿ */ +{253255468, (unsigned char*)"\342\210\240", 441, 457}, /* ∠ */ +{253255681, (unsigned char*)"\342\210\237", 0, 0}, /* ∟ */ +{253255714, (unsigned char*)"\303\205", 450, 452}, /* Å */ +{253291513, (unsigned char*)"\304\205", 0, 0}, /* ą */ +{253401462, (unsigned char*)"\303\245", 451, 455}, /* å */ +{253454799, (unsigned char*)"\342\211\210", 0, 0}, /* ≈ */ +{253581160, (unsigned char*)"\342\250\221", 454, 456}, /* ⨑ */ +{254054862, (unsigned char*)"\342\211\214", 0, 0}, /* ≌ */ +{254093216, (unsigned char*)"\342\200\236", 453, 461}, /* „ */ +{254127992, (unsigned char*)"\317\266", 0, 0}, /* ϶ */ +{254363053, (unsigned char*)"\342\220\243", 458, 460}, /* ␣ */ +{254371873, (unsigned char*)"\342\226\222", 0, 0}, /* ▒ */ +{254371875, (unsigned char*)"\342\226\221", 459, 463}, /* ░ */ +{254371941, (unsigned char*)"\342\226\223", 0, 0}, /* ▓ */ +{254377936, (unsigned char*)"\342\226\210", 462, 464}, /* █ */ +{254494494, (unsigned char*)"\342\225\227", 0, 0}, /* ╗ */ +{254494500, (unsigned char*)"\342\225\224", 432, 498}, /* ╔ */ +{254494526, (unsigned char*)"\342\225\226", 0, 0}, /* ╖ */ +{254494532, (unsigned char*)"\342\225\223", 466, 0}, /* ╓ */ +{254494618, (unsigned char*)"\342\225\246", 467, 469}, /* ╦ */ +{254494635, (unsigned char*)"\342\225\251", 0, 0}, /* ╩ */ +{254494650, (unsigned char*)"\342\225\244", 468, 472}, /* ╤ */ +{254494667, (unsigned char*)"\342\225\247", 0, 0}, /* ╧ */ +{254495055, (unsigned char*)"\342\225\235", 471, 473}, /* ╝ */ +{254495061, (unsigned char*)"\342\225\232", 0, 0}, /* ╚ */ +{254495084, (unsigned char*)"\342\225\254", 470, 478}, /* ╬ */ +{254495087, (unsigned char*)"\342\225\234", 0, 0}, /* ╜ */ +{254495088, (unsigned char*)"\342\225\243", 475, 477}, /* ╣ */ +{254495093, (unsigned char*)"\342\225\231", 0, 0}, /* ╙ */ +{254495094, (unsigned char*)"\342\225\240", 476, 480}, /* ╠ */ +{254495116, (unsigned char*)"\342\225\253", 0, 0}, /* ╫ */ +{254495120, (unsigned char*)"\342\225\242", 479, 481}, /* ╢ */ +{254495126, (unsigned char*)"\342\225\237", 0, 0}, /* ╟ */ +{254495550, (unsigned char*)"\342\225\225", 474, 490}, /* ╕ */ +{254495556, (unsigned char*)"\342\225\222", 0, 0}, /* ╒ */ +{254495582, (unsigned char*)"\342\224\220", 483, 485}, /* ┐ */ +{254495588, (unsigned char*)"\342\224\214", 0, 0}, /* ┌ */ +{254495674, (unsigned char*)"\342\225\245", 484, 488}, /* ╥ */ +{254495691, (unsigned char*)"\342\225\250", 0, 0}, /* ╨ */ +{254495706, (unsigned char*)"\342\224\254", 487, 489}, /* ┬ */ +{254495723, (unsigned char*)"\342\224\264", 0, 0}, /* ┴ */ +{254496111, (unsigned char*)"\342\225\233", 486, 494}, /* ╛ */ +{254496117, (unsigned char*)"\342\225\230", 0, 0}, /* ╘ */ +{254496140, (unsigned char*)"\342\225\252", 491, 493}, /* ╪ */ +{254496143, (unsigned char*)"\342\224\230", 0, 0}, /* ┘ */ +{254496144, (unsigned char*)"\342\225\241", 492, 496}, /* ╡ */ +{254496149, (unsigned char*)"\342\224\224", 0, 0}, /* └ */ +{254496150, (unsigned char*)"\342\225\236", 495, 497}, /* ╞ */ +{254496172, (unsigned char*)"\342\224\274", 0, 0}, /* ┼ */ +{254496176, (unsigned char*)"\342\224\244", 482, 515}, /* ┤ */ +{254496182, (unsigned char*)"\342\224\234", 0, 0}, /* ├ */ +{254583289, (unsigned char*)"\313\230", 499, 0}, /* ˘ */ +{254618933, (unsigned char*)"\342\201\217", 500, 502}, /* ⁏ */ +{254623285, (unsigned char*)"\342\213\215", 0, 0}, /* ⋍ */ +{254629783, (unsigned char*)"\342\247\205", 501, 505}, /* ⧅ */ +{254687260, (unsigned char*)"\342\210\214", 0, 0}, /* ∌ */ +{254699582, (unsigned char*)"\342\252\256", 504, 506}, /* ⪮ */ +{254699614, (unsigned char*)"\342\211\217", 0, 0}, /* ≏ */ +{255171892, (unsigned char*)"\342\201\201", 503, 511}, /* ⁁ */ +{255172216, (unsigned char*)"\313\207", 0, 0}, /* ˇ */ +{255225615, (unsigned char*)"\342\251\215", 508, 510}, /* ⩍ */ +{255234377, (unsigned char*)"\304\211", 0, 0}, /* ĉ */ +{255247395, (unsigned char*)"\342\251\214", 509, 513}, /* ⩌ */ +{255300518, (unsigned char*)"\302\270", 0, 0}, /* ¸ */ +{255409219, (unsigned char*)"\342\234\223", 512, 514}, /* ✓ */ +{255570366, (unsigned char*)"\342\231\243", 0, 0}, /* ♣ */ +{255668800, (unsigned char*)"\72", 507, 523}, /* : */ +{255669810, (unsigned char*)"\54", 0, 0}, /* , */ +{255764735, (unsigned char*)"\342\206\265", 516, 518}, /* ↵ */ +{255780015, (unsigned char*)"\342\234\227", 0, 0}, /* ✗ */ +{255821911, (unsigned char*)"\342\253\221", 517, 521}, /* ⫑ */ +{255822373, (unsigned char*)"\342\253\222", 0, 0}, /* ⫒ */ +{255839779, (unsigned char*)"\342\213\257", 520, 522}, /* ⋯ */ +{255876836, (unsigned char*)"\342\213\236", 0, 0}, /* ⋞ */ +{255876920, (unsigned char*)"\342\213\237", 519, 527}, /* ⋟ */ +{255888782, (unsigned char*)"\342\251\205", 0, 0}, /* ⩅ */ +{255894973, (unsigned char*)"\342\213\216", 524, 526}, /* ⋎ */ +{255896061, (unsigned char*)"\342\213\217", 0, 0}, /* ⋏ */ +{255953002, (unsigned char*)"\342\210\261", 525, 529}, /* ∱ */ +{256359003, (unsigned char*)"\342\212\243", 0, 0}, /* ⊣ */ +{256387067, (unsigned char*)"\313\235", 528, 530}, /* ˝ */ +{256447538, (unsigned char*)"\342\207\212", 0, 0}, /* ⇊ */ +{256451797, (unsigned char*)"\342\251\267", 265, 797}, /* ⩷ */ +{256495503, (unsigned char*)"\316\264", 0, 0}, /* δ */ +{256589813, (unsigned char*)"\342\210\223", 532, 0}, /* ∓ */ +{256591280, (unsigned char*)"\342\207\203", 533, 535}, /* ⇃ */ +{256591286, (unsigned char*)"\342\207\202", 0, 0}, /* ⇂ */ +{256627059, (unsigned char*)"\342\231\246", 534, 538}, /* ♦ */ +{256646524, (unsigned char*)"\342\213\262", 0, 0}, /* ⋲ */ +{256863106, (unsigned char*)"\342\211\220", 537, 539}, /* ≐ */ +{257025700, (unsigned char*)"\342\213\261", 0, 0}, /* ⋱ */ +{257040734, (unsigned char*)"\342\226\276", 536, 544}, /* ▾ */ +{257058467, (unsigned char*)"\342\207\265", 0, 0}, /* ⇵ */ +{257065529, (unsigned char*)"\342\245\257", 541, 543}, /* ⥯ */ +{257606219, (unsigned char*)"\303\252", 0, 0}, /* ê */ +{257673655, (unsigned char*)"\342\211\222", 542, 546}, /* ≒ */ +{257956397, (unsigned char*)"\304\223", 0, 0}, /* ē */ +{257973300, (unsigned char*)"\342\210\205", 545, 547}, /* ∅ */ +{258035197, (unsigned char*)"\304\231", 0, 0}, /* ę */ +{258076782, (unsigned char*)"\342\251\261", 540, 557}, /* ⩱ */ +{258084012, (unsigned char*)"\317\265", 0, 0}, /* ϵ */ +{258104899, (unsigned char*)"\342\211\223", 549, 0}, /* ≓ */ +{258119940, (unsigned char*)"\342\211\202", 550, 552}, /* ≂ */ +{258122127, (unsigned char*)"\342\211\241", 0, 0}, /* ≡ */ +{258136577, (unsigned char*)"\342\245\261", 551, 555}, /* ⥱ */ +{258175684, (unsigned char*)"\342\211\220", 0, 0}, /* ≐ */ +{258360946, (unsigned char*)"\342\210\203", 554, 556}, /* ∃ */ +{258902925, (unsigned char*)"\357\254\200", 0, 0}, /* ff */ +{259010736, (unsigned char*)"\357\254\201", 553, 561}, /* fi */ +{259046673, (unsigned char*)"\146\152", 0, 0}, /* fj */ +{259118547, (unsigned char*)"\357\254\202", 558, 560}, /* fl */ +{259127436, (unsigned char*)"\342\226\261", 0, 0}, /* ▱ */ +{259232973, (unsigned char*)"\342\253\231", 559, 563}, /* ⫙ */ +{259322525, (unsigned char*)"\342\201\204", 0, 0}, /* ⁄ */ +{259337905, (unsigned char*)"\342\214\242", 562, 564}, /* ⌢ */ +{259910376, (unsigned char*)"\316\263", 0, 0}, /* γ */ +{259978061, (unsigned char*)"\304\235", 548, 582}, /* ĝ */ +{260060330, (unsigned char*)"\342\252\251", 0, 0}, /* ⪩ */ +{260197619, (unsigned char*)"\342\204\267", 566, 0}, /* ℷ */ +{260368993, (unsigned char*)"\342\211\251", 567, 569}, /* ≩ */ +{260383971, (unsigned char*)"\342\213\247", 0, 0}, /* ⋧ */ +{260508538, (unsigned char*)"\140", 568, 572}, /* ` */ +{260552890, (unsigned char*)"\342\252\216", 0, 0}, /* ⪎ */ +{260552897, (unsigned char*)"\342\252\220", 571, 573}, /* ⪐ */ +{260582174, (unsigned char*)"\342\251\272", 0, 0}, /* ⩺ */ +{260583463, (unsigned char*)"\342\213\227", 570, 578}, /* ⋗ */ +{260705637, (unsigned char*)"\305\204", 0, 0}, /* ń */ +{261101929, (unsigned char*)"\342\206\255", 575, 577}, /* ↭ */ +{261163982, (unsigned char*)"\304\245", 0, 0}, /* ĥ */ +{261586529, (unsigned char*)"\342\207\277", 576, 580}, /* ⇿ */ +{262349903, (unsigned char*)"\303\256", 0, 0}, /* î */ +{262437626, (unsigned char*)"\302\241", 579, 581}, /* ¡ */ +{262529580, (unsigned char*)"\342\211\217\314\270", 0, 0}, /* ≏̸ */ +{262565410, (unsigned char*)"\342\210\255", 574, 590}, /* ∭ */ +{262572123, (unsigned char*)"\342\204\251", 0, 0}, /* ℩ */ +{262604436, (unsigned char*)"\304\263", 583, 585}, /* ij */ +{262700081, (unsigned char*)"\304\253", 0, 0}, /* ī */ +{262700200, (unsigned char*)"\342\204\221", 584, 588}, /* ℑ */ +{262700632, (unsigned char*)"\304\261", 0, 0}, /* ı */ +{262716468, (unsigned char*)"\306\265", 587, 589}, /* Ƶ */ +{262741657, (unsigned char*)"\342\210\236", 0, 0}, /* ∞ */ +{262778881, (unsigned char*)"\304\257", 586, 594}, /* į */ +{262826787, (unsigned char*)"\342\250\274", 0, 0}, /* ⨼ */ +{262924733, (unsigned char*)"\342\213\271", 591, 593}, /* ⋹ */ +{262924779, (unsigned char*)"\342\213\264", 0, 0}, /* ⋴ */ +{262924782, (unsigned char*)"\342\210\210", 592, 596}, /* ∈ */ +{262998474, (unsigned char*)"\321\226", 0, 0}, /* і */ +{263002182, (unsigned char*)"\305\210", 595, 597}, /* ň */ +{263130484, (unsigned char*)"\305\206", 0, 0}, /* ņ */ +{263535824, (unsigned char*)"\304\265", 565, 631}, /* ĵ */ +{263886553, (unsigned char*)"\310\267", 0, 0}, /* ȷ */ +{264184395, (unsigned char*)"\321\224", 599, 0}, /* є */ +{264657426, (unsigned char*)"\316\272", 600, 602}, /* κ */ +{264677111, (unsigned char*)"\342\207\232", 0, 0}, /* ⇚ */ +{264713048, (unsigned char*)"\342\244\216", 601, 605}, /* ⤎ */ +{265373790, (unsigned char*)"\342\244\244", 0, 0}, /* ⤤ */ +{265840875, (unsigned char*)"\342\246\221", 604, 606}, /* ⦑ */ +{265844615, (unsigned char*)"\302\253", 0, 0}, /* « */ +{265845592, (unsigned char*)"\342\207\244", 603, 611}, /* ⇤ */ +{265847358, (unsigned char*)"\342\252\255\357\270\200", 0, 0}, /* ⪭︀ */ +{265863032, (unsigned char*)"\342\244\214", 608, 610}, /* ⤌ */ +{265864114, (unsigned char*)"\342\235\262", 0, 0}, /* ❲ */ +{265881301, (unsigned char*)"\342\246\213", 609, 613}, /* ⦋ */ +{265903022, (unsigned char*)"\342\214\210", 0, 0}, /* ⌈ */ +{265939165, (unsigned char*)"\342\210\272", 612, 614}, /* ∺ */ +{265952093, (unsigned char*)"\342\211\242", 0, 0}, /* ≢ */ +{265952426, (unsigned char*)"\342\200\234", 607, 623}, /* “ */ +{265989935, (unsigned char*)"\342\252\250", 0, 0}, /* ⪨ */ +{266006275, (unsigned char*)"\342\244\250", 616, 618}, /* ⤨ */ +{266078640, (unsigned char*)"\342\206\275", 0, 0}, /* ↽ */ +{266078657, (unsigned char*)"\342\206\274", 617, 621}, /* ↼ */ +{266079538, (unsigned char*)"\342\226\204", 0, 0}, /* ▄ */ +{266190912, (unsigned char*)"\342\210\204", 620, 622}, /* ∄ */ +{266222402, (unsigned char*)"\342\207\207", 0, 0}, /* ⇇ */ +{266243084, (unsigned char*)"\342\227\272", 619, 627}, /* ◺ */ +{266298598, (unsigned char*)"\342\211\250", 0, 0}, /* ≨ */ +{266313576, (unsigned char*)"\342\213\246", 624, 626}, /* ⋦ */ +{266330070, (unsigned char*)"\342\237\254", 0, 0}, /* ⟬ */ +{266330213, (unsigned char*)"\342\207\275", 625, 629}, /* ⇽ */ +{266331295, (unsigned char*)"\342\237\246", 0, 0}, /* ⟦ */ +{266338700, (unsigned char*)"\342\252\206", 628, 630}, /* ⪆ */ +{266345987, (unsigned char*)"\342\246\205", 0, 0}, /* ⦅ */ +{266438024, (unsigned char*)"\342\207\206", 615, 648}, /* ⇆ */ +{266445086, (unsigned char*)"\342\207\213", 0, 0}, /* ⇋ */ +{266458706, (unsigned char*)"\342\212\277", 632, 0}, /* ⊿ */ +{266482495, (unsigned char*)"\342\252\215", 633, 635}, /* ⪍ */ +{266482497, (unsigned char*)"\342\252\217", 0, 0}, /* ⪏ */ +{266491481, (unsigned char*)"\342\200\230", 634, 638}, /* ‘ */ +{266511779, (unsigned char*)"\342\251\271", 0, 0}, /* ⩹ */ +{266513068, (unsigned char*)"\342\213\226", 637, 639}, /* ⋖ */ +{266528101, (unsigned char*)"\342\212\264", 0, 0}, /* ⊴ */ +{266528102, (unsigned char*)"\342\227\202", 636, 644}, /* ◂ */ +{267120850, (unsigned char*)"\342\200\224", 0, 0}, /* — */ +{267302687, (unsigned char*)"\302\265", 641, 643}, /* µ */ +{267314769, (unsigned char*)"\342\210\222", 0, 0}, /* − */ +{267744261, (unsigned char*)"\342\212\270", 642, 646}, /* ⊸ */ +{268199811, (unsigned char*)"\342\210\207", 0, 0}, /* ∇ */ +{268214961, (unsigned char*)"\342\211\213\314\270", 645, 647}, /* ≋̸ */ +{268215174, (unsigned char*)"\305\211", 0, 0}, /* ʼn */ +{268219727, (unsigned char*)"\342\231\256", 640, 656}, /* ♮ */ +{268256487, (unsigned char*)"\342\211\216\314\270", 0, 0}, /* ≎̸ */ +{268285914, (unsigned char*)"\342\211\207", 649, 651}, /* ≇ */ +{268306771, (unsigned char*)"\342\200\223", 0, 0}, /* – */ +{268307837, (unsigned char*)"\342\207\227", 650, 654}, /* ⇗ */ +{268342685, (unsigned char*)"\342\206\227", 0, 0}, /* ↗ */ +{268345855, (unsigned char*)"\342\211\220\314\270", 653, 655}, /* ≐̸ */ +{268361985, (unsigned char*)"\342\211\202\314\270", 0, 0}, /* ≂̸ */ +{268415648, (unsigned char*)"\342\207\216", 652, 660}, /* ⇎ */ +{268418881, (unsigned char*)"\342\211\247\314\270", 0, 0}, /* ≧̸ */ +{268433859, (unsigned char*)"\342\211\265", 657, 659}, /* ≵ */ +{268450496, (unsigned char*)"\342\206\256", 0, 0}, /* ↮ */ +{268466270, (unsigned char*)"\342\253\262", 658, 662}, /* ⫲ */ +{268559396, (unsigned char*)"\342\207\215", 0, 0}, /* ⇍ */ +{268594244, (unsigned char*)"\342\206\232", 661, 663}, /* ↚ */ +{268598566, (unsigned char*)"\342\211\246\314\270", 0, 0}, /* ≦̸ */ +{268598634, (unsigned char*)"\342\211\256", 598, 731}, /* ≮ */ +{268613544, (unsigned char*)"\342\211\264", 0, 0}, /* ≴ */ +{268614926, (unsigned char*)"\342\213\252", 665, 0}, /* ⋪ */ +{268722445, (unsigned char*)"\342\210\211", 666, 668}, /* ∉ */ +{268722605, (unsigned char*)"\342\210\214", 0, 0}, /* ∌ */ +{268737994, (unsigned char*)"\342\210\202\314\270", 667, 671}, /* ∂̸ */ +{268756061, (unsigned char*)"\342\212\200", 0, 0}, /* ⊀ */ +{268775018, (unsigned char*)"\342\207\217", 670, 672}, /* ⇏ */ +{268809866, (unsigned char*)"\342\206\233", 0, 0}, /* ↛ */ +{268830548, (unsigned char*)"\342\213\253", 669, 677}, /* ⋫ */ +{268854337, (unsigned char*)"\342\211\204", 0, 0}, /* ≄ */ +{268858560, (unsigned char*)"\342\210\244", 674, 676}, /* ∤ */ +{268861577, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{268867010, (unsigned char*)"\342\253\205\314\270", 675, 679}, /* ⫅̸ */ +{268867042, (unsigned char*)"\342\212\210", 0, 0}, /* ⊈ */ +{268867073, (unsigned char*)"\342\212\201", 678, 680}, /* ⊁ */ +{268867472, (unsigned char*)"\342\253\206\314\270", 0, 0}, /* ⫆̸ */ +{268867504, (unsigned char*)"\342\212\211", 673, 690}, /* ⊉ */ +{268930776, (unsigned char*)"\342\200\207", 0, 0}, /*   */ +{268954703, (unsigned char*)"\342\207\226", 682, 0}, /* ⇖ */ +{268972914, (unsigned char*)"\342\210\274\342\203\222", 683, 685}, /* ∼⃒ */ +{268989551, (unsigned char*)"\342\206\226", 0, 0}, /* ↖ */ +{269465429, (unsigned char*)"\303\264", 684, 688}, /* ô */ +{269492692, (unsigned char*)"\342\212\235", 0, 0}, /* ⊝ */ +{269540277, (unsigned char*)"\305\223", 687, 689}, /* œ */ +{269566424, (unsigned char*)"\342\246\277", 0, 0}, /* ⦿ */ +{269636945, (unsigned char*)"\342\246\265", 686, 694}, /* ⦵ */ +{269780165, (unsigned char*)"\342\206\272", 0, 0}, /* ↺ */ +{269782046, (unsigned char*)"\342\246\276", 691, 693}, /* ⦾ */ +{269788732, (unsigned char*)"\342\200\276", 0, 0}, /* ‾ */ +{269815607, (unsigned char*)"\305\215", 692, 696}, /* ō */ +{269820078, (unsigned char*)"\317\211", 0, 0}, /* ω */ +{269928267, (unsigned char*)"\342\246\271", 695, 697}, /* ⦹ */ +{269935992, (unsigned char*)"\342\212\225", 0, 0}, /* ⊕ */ +{269995787, (unsigned char*)"\342\206\273", 681, 715}, /* ↻ */ +{269998625, (unsigned char*)"\342\204\264", 0, 0}, /* ℴ */ +{270140063, (unsigned char*)"\342\214\275", 699, 0}, /* ⌽ */ +{270589319, (unsigned char*)"\342\253\275", 700, 702}, /* ⫽ */ +{270837439, (unsigned char*)"\342\230\216", 0, 0}, /* ☎ */ +{270987883, (unsigned char*)"\342\212\236", 701, 705}, /* ⊞ */ +{270987886, (unsigned char*)"\342\251\262", 0, 0}, /* ⩲ */ +{271095531, (unsigned char*)"\302\243", 704, 706}, /* £ */ +{271183972, (unsigned char*)"\342\211\274", 0, 0}, /* ≼ */ +{271190242, (unsigned char*)"\342\200\262", 703, 711}, /* ′ */ +{271195302, (unsigned char*)"\342\252\271", 0, 0}, /* ⪹ */ +{271201008, (unsigned char*)"\342\211\276", 708, 710}, /* ≾ */ +{271792637, (unsigned char*)"\342\207\233", 0, 0}, /* ⇛ */ +{271828574, (unsigned char*)"\342\244\217", 709, 713}, /* ⤏ */ +{272479831, (unsigned char*)"\77", 0, 0}, /* ? */ +{272945576, (unsigned char*)"\342\210\232", 712, 714}, /* √ */ +{272956401, (unsigned char*)"\342\246\222", 0, 0}, /* ⦒ */ +{272956402, (unsigned char*)"\342\246\245", 707, 723}, /* ⦥ */ +{272960141, (unsigned char*)"\302\273", 0, 0}, /* » */ +{272961118, (unsigned char*)"\342\207\245", 716, 718}, /* ⇥ */ +{272961119, (unsigned char*)"\342\244\263", 0, 0}, /* ⤳ */ +{272961139, (unsigned char*)"\342\206\235", 717, 721}, /* ↝ */ +{272963012, (unsigned char*)"\342\210\266", 0, 0}, /* ∶ */ +{272978558, (unsigned char*)"\342\244\215", 720, 722}, /* ⤍ */ +{272979640, (unsigned char*)"\342\235\263", 0, 0}, /* ❳ */ +{272996827, (unsigned char*)"\342\246\214", 719, 727}, /* ⦌ */ +{273018548, (unsigned char*)"\342\214\211", 0, 0}, /* ⌉ */ +{273067952, (unsigned char*)"\342\200\235", 724, 726}, /* ” */ +{273086172, (unsigned char*)"\342\204\235", 0, 0}, /* ℝ */ +{273194166, (unsigned char*)"\342\207\201", 725, 729}, /* ⇁ */ +{273194183, (unsigned char*)"\342\207\200", 0, 0}, /* ⇀ */ +{273337928, (unsigned char*)"\342\207\204", 728, 730}, /* ⇄ */ +{273344990, (unsigned char*)"\342\207\214", 0, 0}, /* ⇌ */ +{273422559, (unsigned char*)"\342\253\256", 698, 764}, /* ⫮ */ +{273445596, (unsigned char*)"\342\237\255", 0, 0}, /* ⟭ */ +{273445739, (unsigned char*)"\342\207\276", 732, 0}, /* ⇾ */ +{273446821, (unsigned char*)"\342\237\247", 733, 735}, /* ⟧ */ +{273461513, (unsigned char*)"\342\246\206", 0, 0}, /* ⦆ */ +{273553550, (unsigned char*)"\342\207\211", 734, 738}, /* ⇉ */ +{273607007, (unsigned char*)"\342\200\231", 0, 0}, /* ’ */ +{273643627, (unsigned char*)"\342\212\265", 737, 739}, /* ⊵ */ +{273643628, (unsigned char*)"\342\226\270", 0, 0}, /* ▸ */ +{274181999, (unsigned char*)"\342\200\232", 736, 744}, /* ‚ */ +{274202680, (unsigned char*)"\342\211\275", 0, 0}, /* ≽ */ +{274209113, (unsigned char*)"\305\235", 741, 743}, /* ŝ */ +{274214010, (unsigned char*)"\342\252\272", 0, 0}, /* ⪺ */ +{274219716, (unsigned char*)"\342\211\277", 742, 746}, /* ≿ */ +{274237442, (unsigned char*)"\342\207\230", 0, 0}, /* ⇘ */ +{274251649, (unsigned char*)"\342\212\241", 745, 747}, /* ⊡ */ +{274251652, (unsigned char*)"\342\251\246", 0, 0}, /* ⩦ */ +{274272290, (unsigned char*)"\342\206\230", 740, 756}, /* ↘ */ +{274292812, (unsigned char*)"\342\210\226", 0, 0}, /* ∖ */ +{274358067, (unsigned char*)"\342\213\254", 749, 751}, /* ⋬ */ +{274380099, (unsigned char*)"\342\231\257", 0, 0}, /* ♯ */ +{274422390, (unsigned char*)"\317\203", 750, 754}, /* σ */ +{274428676, (unsigned char*)"\342\211\203", 0, 0}, /* ≃ */ +{274428698, (unsigned char*)"\342\252\240", 753, 755}, /* ⪠ */ +{274428863, (unsigned char*)"\342\252\237", 0, 0}, /* ⪟ */ +{274428961, (unsigned char*)"\342\211\206", 752, 760}, /* ≆ */ +{274523849, (unsigned char*)"\342\206\220", 0, 0}, /* ← */ +{274568287, (unsigned char*)"\342\214\243", 757, 759}, /* ⌣ */ +{274578221, (unsigned char*)"\342\204\261", 0, 0}, /* ℱ */ +{274580049, (unsigned char*)"\342\252\254\357\270\200", 758, 762}, /* ⪬︀ */ +{274705149, (unsigned char*)"\342\212\223", 0, 0}, /* ⊓ */ +{274705809, (unsigned char*)"\342\212\224", 761, 763}, /* ⊔ */ +{274723219, (unsigned char*)"\342\212\217", 0, 0}, /* ⊏ */ +{274723233, (unsigned char*)"\342\212\220", 748, 781}, /* ⊐ */ +{274739471, (unsigned char*)"\342\206\222", 0, 0}, /* → */ +{274811333, (unsigned char*)"\342\230\205", 765, 0}, /* ★ */ +{274829727, (unsigned char*)"\302\257", 766, 768}, /* ¯ */ +{274848194, (unsigned char*)"\342\253\213", 0, 0}, /* ⫋ */ +{274848226, (unsigned char*)"\342\212\212", 767, 771}, /* ⊊ */ +{274863440, (unsigned char*)"\342\253\214", 0, 0}, /* ⫌ */ +{274863472, (unsigned char*)"\342\212\213", 770, 772}, /* ⊋ */ +{274884308, (unsigned char*)"\342\207\231", 0, 0}, /* ⇙ */ +{274919156, (unsigned char*)"\342\206\231", 769, 777}, /* ↙ */ +{275038638, (unsigned char*)"\303\237", 0, 0}, /* ß */ +{275317205, (unsigned char*)"\342\251\211", 774, 776}, /* ⩉ */ +{275570427, (unsigned char*)"\316\270", 0, 0}, /* θ */ +{275576349, (unsigned char*)"\342\211\210", 775, 779}, /* ≈ */ +{275581264, (unsigned char*)"\303\276", 0, 0}, /* þ */ +{275613463, (unsigned char*)"\313\234", 778, 780}, /* ˜ */ +{275614599, (unsigned char*)"\303\227", 0, 0}, /* × */ +{275924917, (unsigned char*)"\342\204\242", 773, 789}, /* ™ */ +{275934121, (unsigned char*)"\342\247\215", 0, 0}, /* ⧍ */ +{275968464, (unsigned char*)"\321\233", 782, 784}, /* ћ */ +{276113989, (unsigned char*)"\342\211\254", 0, 0}, /* ≬ */ +{276554346, (unsigned char*)"\321\236", 783, 787}, /* ў */ +{276572262, (unsigned char*)"\342\253\251", 0, 0}, /* ⫩ */ +{276580955, (unsigned char*)"\303\273", 786, 788}, /* û */ +{276608195, (unsigned char*)"\342\207\205", 0, 0}, /* ⇅ */ +{276615257, (unsigned char*)"\342\245\256", 785, 793}, /* ⥮ */ +{276644155, (unsigned char*)"\342\212\250", 0, 0}, /* ⊨ */ +{276751937, (unsigned char*)"\342\206\277", 790, 792}, /* ↿ */ +{276751943, (unsigned char*)"\342\206\276", 0, 0}, /* ↾ */ +{276752827, (unsigned char*)"\342\226\200", 791, 795}, /* ▀ */ +{276916373, (unsigned char*)"\342\227\270", 0, 0}, /* ◸ */ +{276931133, (unsigned char*)"\305\253", 794, 796}, /* ū */ +{277009933, (unsigned char*)"\305\263", 0, 0}, /* ų */ +{277051518, (unsigned char*)"\342\212\216", 664, 930}, /* ⊎ */ +{277058734, (unsigned char*)"\317\222", 0, 0}, /* ϒ */ +{277119882, (unsigned char*)"\305\257", 798, 0}, /* ů */ +{277131995, (unsigned char*)"\342\227\271", 799, 801}, /* ◹ */ +{277186357, (unsigned char*)"\342\213\260", 0, 0}, /* ⋰ */ +{277201391, (unsigned char*)"\342\226\264", 800, 804}, /* ▴ */ +{277219124, (unsigned char*)"\342\207\210", 0, 0}, /* ⇈ */ +{277704743, (unsigned char*)"\317\226", 803, 805}, /* ϖ */ +{277794139, (unsigned char*)"\342\212\242", 0, 0}, /* ⊢ */ +{277833979, (unsigned char*)"\342\211\232", 802, 810}, /* ≚ */ +{277906162, (unsigned char*)"\342\213\271\314\270", 0, 0}, /* ⋹̸ */ +{278102294, (unsigned char*)"\342\212\262", 807, 809}, /* ⊲ */ +{278173171, (unsigned char*)"\342\212\202\342\203\222", 0, 0}, /* ⊂⃒ */ +{278173185, (unsigned char*)"\342\212\203\342\203\222", 808, 812}, /* ⊃⃒ */ +{278243772, (unsigned char*)"\342\210\235", 0, 0}, /* ∝ */ +{278317916, (unsigned char*)"\342\212\263", 811, 813}, /* ⊳ */ +{278419285, (unsigned char*)"\342\253\275\342\203\245", 0, 0}, /* ⫽⃥ */ +{278952797, (unsigned char*)"\305\265", 806, 823}, /* ŵ */ +{279013938, (unsigned char*)"\342\213\240", 0, 0}, /* ⋠ */ +{279018865, (unsigned char*)"\342\210\247", 815, 0}, /* ∧ */ +{280138718, (unsigned char*)"\342\227\257", 816, 818}, /* ◯ */ +{280186640, (unsigned char*)"\342\226\275", 0, 0}, /* ▽ */ +{280274858, (unsigned char*)"\342\237\272", 817, 821}, /* ⟺ */ +{280309706, (unsigned char*)"\342\237\267", 0, 0}, /* ⟷ */ +{280418606, (unsigned char*)"\342\237\270", 820, 822}, /* ⟸ */ +{280453454, (unsigned char*)"\342\237\265", 0, 0}, /* ⟵ */ +{280564435, (unsigned char*)"\342\250\200", 819, 827}, /* ⨀ */ +{280634228, (unsigned char*)"\342\237\271", 0, 0}, /* ⟹ */ +{280669076, (unsigned char*)"\342\237\266", 824, 826}, /* ⟶ */ +{280791085, (unsigned char*)"\342\244\263\314\270", 0, 0}, /* ⤳̸ */ +{280791105, (unsigned char*)"\342\206\235\314\270", 825, 829}, /* ↝̸ */ +{280797569, (unsigned char*)"\342\226\263", 0, 0}, /* △ */ +{281324639, (unsigned char*)"\305\267", 828, 830}, /* ŷ */ +{281473593, (unsigned char*)"\342\213\255", 0, 0}, /* ⋭ */ +{282032646, (unsigned char*)"\342\213\241", 814, 848}, /* ⋡ */ +{282258642, (unsigned char*)"\342\211\204", 0, 0}, /* ≄ */ +{283443429, (unsigned char*)"\303\261", 832, 0}, /* ñ */ +{284474121, (unsigned char*)"\342\212\255", 833, 835}, /* ⊭ */ +{284617846, (unsigned char*)"\342\244\204", 0, 0}, /* ⤄ */ +{284765947, (unsigned char*)"\342\204\226", 834, 838}, /* № */ +{285624105, (unsigned char*)"\342\212\254", 0, 0}, /* ⊬ */ +{285876730, (unsigned char*)"\342\244\202", 837, 839}, /* ⤂ */ +{286092352, (unsigned char*)"\342\244\203", 0, 0}, /* ⤃ */ +{286720368, (unsigned char*)"\342\244\243", 836, 844}, /* ⤣ */ +{287173168, (unsigned char*)"\342\244\247", 0, 0}, /* ⤧ */ +{293992385, (unsigned char*)"\342\213\204", 841, 843}, /* ⋄ */ +{299841030, (unsigned char*)"\303\263", 0, 0}, /* ó */ +{300285334, (unsigned char*)"\342\207\220", 842, 846}, /* ⇐ */ +{300674453, (unsigned char*)"\317\235", 0, 0}, /* ϝ */ +{303352426, (unsigned char*)"\305\221", 845, 847}, /* ő */ +{303966986, (unsigned char*)"\342\246\274", 0, 0}, /* ⦼ */ +{307473897, (unsigned char*)"\303\262", 840, 856}, /* ò */ +{310780147, (unsigned char*)"\342\252\241", 0, 0}, /* ⪡ */ +{310784605, (unsigned char*)"\342\210\226", 849, 851}, /* ∖ */ +{314280128, (unsigned char*)"\342\212\226", 0, 0}, /* ⊖ */ +{314968612, (unsigned char*)"\342\252\265", 850, 854}, /* ⪵ */ +{314983590, (unsigned char*)"\342\213\250", 0, 0}, /* ⋨ */ +{319340427, (unsigned char*)"\342\204\220", 853, 855}, /* ℐ */ +{319475610, (unsigned char*)"\342\204\221", 0, 0}, /* ℑ */ +{320201899, (unsigned char*)"\342\212\266", 852, 860}, /* ⊶ */ +{320670692, (unsigned char*)"\342\237\272", 0, 0}, /* ⟺ */ +{321489231, (unsigned char*)"\303\270", 857, 859}, /* ø */ +{322578822, (unsigned char*)"\303\265", 0, 0}, /* õ */ +{322579958, (unsigned char*)"\342\212\227", 858, 862}, /* ⊗ */ +{323169842, (unsigned char*)"\342\251\274", 0, 0}, /* ⩼ */ +{324032329, (unsigned char*)"\342\211\267", 861, 863}, /* ≷ */ +{334872149, (unsigned char*)"\342\251\210", 0, 0}, /* ⩈ */ +{339512945, (unsigned char*)"\342\253\263", 831, 897}, /* ⫳ */ +{340554879, (unsigned char*)"\342\204\255", 0, 0}, /* ℭ */ +{341173234, (unsigned char*)"\342\210\245", 865, 0}, /* ∥ */ +{341609399, (unsigned char*)"\342\200\213", 866, 868}, /* ​ */ +{342697243, (unsigned char*)"\342\252\272", 0, 0}, /* ⪺ */ +{344239377, (unsigned char*)"\45", 867, 871}, /* % */ +{344245928, (unsigned char*)"\56", 0, 0}, /* . */ +{344250094, (unsigned char*)"\342\200\260", 870, 872}, /* ‰ */ +{347627916, (unsigned char*)"\342\204\263", 0, 0}, /* ℳ */ +{351941502, (unsigned char*)"\342\204\217", 869, 877}, /* ℏ */ +{351941777, (unsigned char*)"\342\204\217", 0, 0}, /* ℏ */ +{352665724, (unsigned char*)"\342\210\224", 874, 876}, /* ∔ */ +{352665730, (unsigned char*)"\342\250\245", 0, 0}, /* ⨥ */ +{352666020, (unsigned char*)"\302\261", 875, 879}, /* ± */ +{359188869, (unsigned char*)"\342\252\257", 0, 0}, /* ⪯ */ +{359343509, (unsigned char*)"\342\204\231", 878, 880}, /* ℙ */ +{359529854, (unsigned char*)"\342\213\250", 0, 0}, /* ⋨ */ +{359562889, (unsigned char*)"\342\210\235", 873, 889}, /* ∝ */ +{359780191, (unsigned char*)"\342\212\260", 0, 0}, /* ⊰ */ +{361603609, (unsigned char*)"\342\252\242", 882, 884}, /* ⪢ */ +{363070526, (unsigned char*)"\342\200\210", 0, 0}, /*   */ +{373076555, (unsigned char*)"\342\250\226", 883, 887}, /* ⨖ */ +{377795981, (unsigned char*)"\342\211\237", 0, 0}, /* ≟ */ +{379886530, (unsigned char*)"\342\244\234", 886, 888}, /* ⤜ */ +{387176008, (unsigned char*)"\342\212\212\357\270\200", 0, 0}, /* ⊊︀ */ +{396426387, (unsigned char*)"\342\201\227", 885, 893}, /* ⁗ */ +{398734173, (unsigned char*)"\342\212\217\314\270", 0, 0}, /* ⊏̸ */ +{407042323, (unsigned char*)"\342\210\260", 890, 892}, /* ∰ */ +{417247209, (unsigned char*)"\305\225", 0, 0}, /* ŕ */ +{417627006, (unsigned char*)"\342\237\251", 891, 895}, /* ⟩ */ +{417782381, (unsigned char*)"\342\245\265", 0, 0}, /* ⥵ */ +{417782549, (unsigned char*)"\342\244\236", 894, 896}, /* ⤞ */ +{417782607, (unsigned char*)"\342\206\252", 0, 0}, /* ↪ */ +{417782744, (unsigned char*)"\342\206\254", 881, 914}, /* ↬ */ +{417782872, (unsigned char*)"\342\245\205", 0, 0}, /* ⥅ */ +{417783004, (unsigned char*)"\342\206\243", 898, 0}, /* ↣ */ +{417836002, (unsigned char*)"\342\244\232", 899, 901}, /* ⤚ */ +{418949844, (unsigned char*)"\175", 0, 0}, /* } */ +{418949850, (unsigned char*)"\135", 900, 904}, /* ] */ +{419543754, (unsigned char*)"\305\231", 0, 0}, /* ř */ +{419672056, (unsigned char*)"\305\227", 903, 905}, /* ŗ */ +{421307938, (unsigned char*)"\342\200\235", 0, 0}, /* ” */ +{422752145, (unsigned char*)"\342\206\247", 902, 910}, /* ↧ */ +{423028196, (unsigned char*)"\342\206\244", 0, 0}, /* ↤ */ +{423389877, (unsigned char*)"\342\245\275", 907, 909}, /* ⥽ */ +{423493561, (unsigned char*)"\342\214\213", 0, 0}, /* ⌋ */ +{423908415, (unsigned char*)"\342\213\233", 908, 912}, /* ⋛ */ +{425274516, (unsigned char*)"\342\213\216", 0, 0}, /* ⋎ */ +{425473555, (unsigned char*)"\342\245\254", 911, 913}, /* ⥬ */ +{431909487, (unsigned char*)"\342\216\261", 0, 0}, /* ⎱ */ +{434187999, (unsigned char*)"\342\207\211", 906, 922}, /* ⇉ */ +{434307530, (unsigned char*)"\342\250\256", 0, 0}, /* ⨮ */ +{434960469, (unsigned char*)"\342\246\224", 915, 917}, /* ⦔ */ +{436843863, (unsigned char*)"\342\251\275\314\270", 0, 0}, /* ⩽̸ */ +{438517600, (unsigned char*)"\342\200\272", 916, 920}, /* › */ +{439096753, (unsigned char*)"\342\200\231", 0, 0}, /* ’ */ +{439955631, (unsigned char*)"\342\213\214", 919, 921}, /* ⋌ */ +{439986137, (unsigned char*)"\342\213\212", 0, 0}, /* ⋊ */ +{440485992, (unsigned char*)"\342\207\225", 918, 926}, /* ⇕ */ +{456382602, (unsigned char*)"\305\233", 0, 0}, /* ś */ +{458679147, (unsigned char*)"\305\241", 923, 925}, /* š */ +{458807449, (unsigned char*)"\305\237", 0, 0}, /* ş */ +{459147218, (unsigned char*)"\342\213\251", 924, 928}, /* ⋩ */ +{461050755, (unsigned char*)"\342\244\245", 0, 0}, /* ⤥ */ +{461179665, (unsigned char*)"\342\200\213", 927, 929}, /* ​ */ +{461702842, (unsigned char*)"\342\244\251", 0, 0}, /* ⤩ */ +{462844836, (unsigned char*)"\342\214\242", 864, 996}, /* ⌢ */ +{464669351, (unsigned char*)"\321\211", 0, 0}, /* щ */ +{466004380, (unsigned char*)"\317\202", 931, 0}, /* ς */ +{466004396, (unsigned char*)"\317\202", 932, 934}, /* ς */ +{466210677, (unsigned char*)"\342\251\252", 0, 0}, /* ⩪ */ +{470539217, (unsigned char*)"\342\250\263", 933, 937}, /* ⨳ */ +{472091475, (unsigned char*)"\302\270", 0, 0}, /* ¸ */ +{473091677, (unsigned char*)"\321\214", 936, 938}, /* ь */ +{473287624, (unsigned char*)"\342\214\277", 0, 0}, /* ⌿ */ +{474080549, (unsigned char*)"\342\231\240", 935, 943}, /* ♠ */ +{475335440, (unsigned char*)"\342\212\223\357\270\200", 0, 0}, /* ⊓︀ */ +{475357220, (unsigned char*)"\342\212\224\357\270\200", 940, 942}, /* ⊔︀ */ +{475931736, (unsigned char*)"\342\212\221", 0, 0}, /* ⊑ */ +{475932198, (unsigned char*)"\342\212\222", 941, 945}, /* ⊒ */ +{475982358, (unsigned char*)"\342\226\241", 0, 0}, /* □ */ +{475982359, (unsigned char*)"\342\226\252", 944, 946}, /* ▪ */ +{477799743, (unsigned char*)"\342\210\226", 0, 0}, /* ∖ */ +{478075218, (unsigned char*)"\342\214\243", 939, 955}, /* ⌣ */ +{478318264, (unsigned char*)"\342\213\206", 0, 0}, /* ⋆ */ +{480046422, (unsigned char*)"\342\252\275", 948, 950}, /* ⪽ */ +{480062427, (unsigned char*)"\342\212\202", 0, 0}, /* ⊂ */ +{480062552, (unsigned char*)"\342\253\207", 949, 953}, /* ⫇ */ +{480062937, (unsigned char*)"\342\253\225", 0, 0}, /* ⫕ */ +{480062951, (unsigned char*)"\342\253\223", 952, 954}, /* ⫓ */ +{480080937, (unsigned char*)"\342\252\260", 0, 0}, /* ⪰ */ +{480549540, (unsigned char*)"\342\252\276", 951, 959}, /* ⪾ */ +{480565545, (unsigned char*)"\342\212\203", 0, 0}, /* ⊃ */ +{480565670, (unsigned char*)"\342\253\210", 956, 958}, /* ⫈ */ +{480566055, (unsigned char*)"\342\253\224", 0, 0}, /* ⫔ */ +{480566069, (unsigned char*)"\342\253\226", 957, 961}, /* ⫖ */ +{482397333, (unsigned char*)"\342\244\246", 0, 0}, /* ⤦ */ +{482869735, (unsigned char*)"\342\244\252", 960, 962}, /* ⤪ */ +{496041324, (unsigned char*)"\342\214\226", 0, 0}, /* ⌖ */ +{497814540, (unsigned char*)"\305\245", 947, 980}, /* ť */ +{497942842, (unsigned char*)"\305\243", 0, 0}, /* ţ */ +{500581348, (unsigned char*)"\342\214\225", 964, 0}, /* ⌕ */ +{503887505, (unsigned char*)"\342\210\264", 965, 967}, /* ∴ */ +{503889617, (unsigned char*)"\317\221", 0, 0}, /* ϑ */ +{504027419, (unsigned char*)"\342\200\211", 966, 970}, /*   */ +{504104405, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{505347273, (unsigned char*)"\342\212\240", 969, 971}, /* ⊠ */ +{505347275, (unsigned char*)"\342\250\260", 0, 0}, /* ⨰ */ +{512567229, (unsigned char*)"\342\214\266", 968, 976}, /* ⌶ */ +{512568118, (unsigned char*)"\342\253\261", 0, 0}, /* ⫱ */ +{513832566, (unsigned char*)"\342\200\264", 973, 975}, /* ‴ */ +{515875611, (unsigned char*)"\342\227\254", 0, 0}, /* ◬ */ +{517472076, (unsigned char*)"\305\247", 974, 978}, /* ŧ */ +{534653388, (unsigned char*)"\303\272", 0, 0}, /* ú */ +{536361006, (unsigned char*)"\305\255", 977, 979}, /* ŭ */ +{538164784, (unsigned char*)"\305\261", 0, 0}, /* ű */ +{540796056, (unsigned char*)"\342\245\276", 972, 988}, /* ⥾ */ +{542286255, (unsigned char*)"\303\271", 0, 0}, /* ù */ +{547691928, (unsigned char*)"\342\214\234", 981, 983}, /* ⌜ */ +{547695098, (unsigned char*)"\342\214\217", 0, 0}, /* ⌏ */ +{551442032, (unsigned char*)"\342\210\224", 982, 986}, /* ∔ */ +{554807454, (unsigned char*)"\342\214\235", 0, 0}, /* ⌝ */ +{554810624, (unsigned char*)"\342\214\216", 985, 987}, /* ⌎ */ +{557391180, (unsigned char*)"\305\251", 0, 0}, /* ũ */ +{561528584, (unsigned char*)"\342\206\223", 984, 992}, /* ↓ */ +{562700561, (unsigned char*)"\314\221", 0, 0}, /* ̑ */ +{566767800, (unsigned char*)"\342\206\223", 989, 991}, /* ↓ */ +{567369724, (unsigned char*)"\342\250\261", 0, 0}, /* ⨱ */ +{568274355, (unsigned char*)"\342\211\207", 990, 994}, /* ≇ */ +{569355731, (unsigned char*)"\342\245\217", 0, 0}, /* ⥏ */ +{574168791, (unsigned char*)"\342\246\234", 993, 995}, /* ⦜ */ +{574321999, (unsigned char*)"\317\225", 0, 0}, /* ϕ */ +{574324183, (unsigned char*)"\317\261", 963, 1029}, /* ϱ */ +{575971612, (unsigned char*)"\342\213\202", 0, 0}, /* ⋂ */ +{578408944, (unsigned char*)"\342\245\224", 997, 0}, /* ⥔ */ +{578583034, (unsigned char*)"\342\212\273", 998, 1000}, /* ⊻ */ +{578845745, (unsigned char*)"\342\213\256", 0, 0}, /* ⋮ */ +{579050215, (unsigned char*)"\174", 999, 1003}, /* | */ +{580970468, (unsigned char*)"\342\210\211", 0, 0}, /* ∉ */ +{580970469, (unsigned char*)"\342\213\267", 1002, 1004}, /* ⋷ */ +{580970470, (unsigned char*)"\342\213\266", 0, 0}, /* ⋶ */ +{581144708, (unsigned char*)"\342\210\214", 1001, 1009}, /* ∌ */ +{581144709, (unsigned char*)"\342\213\276", 0, 0}, /* ⋾ */ +{581144710, (unsigned char*)"\342\213\275", 1006, 1008}, /* ⋽ */ +{582607587, (unsigned char*)"\342\212\226", 0, 0}, /* ⊖ */ +{585419272, (unsigned char*)"\342\206\254", 1007, 1011}, /* ↬ */ +{590907417, (unsigned char*)"\342\212\227", 0, 0}, /* ⊗ */ +{595761304, (unsigned char*)"\342\253\213\357\270\200", 1010, 1012}, /* ⫋︀ */ +{595761336, (unsigned char*)"\342\212\212\357\270\200", 0, 0}, /* ⊊︀ */ +{595776550, (unsigned char*)"\342\253\214\357\270\200", 1005, 1021}, /* ⫌︀ */ +{595776582, (unsigned char*)"\342\212\213\357\270\200", 0, 0}, /* ⊋︀ */ +{599478056, (unsigned char*)"\342\207\223", 1014, 1016}, /* ⇓ */ +{602940966, (unsigned char*)"\342\210\217", 0, 0}, /* ∏ */ +{606661950, (unsigned char*)"\342\237\266", 1015, 1019}, /* ⟶ */ +{614278377, (unsigned char*)"\342\250\224", 0, 0}, /* ⨔ */ +{617577747, (unsigned char*)"\342\252\257\314\270", 1018, 1020}, /* ⪯̸ */ +{617682490, (unsigned char*)"\342\251\237", 0, 0}, /* ⩟ */ +{617688066, (unsigned char*)"\342\211\231", 1017, 1025}, /* ≙ */ +{617866001, (unsigned char*)"\342\204\230", 0, 0}, /* ℘ */ +{625068841, (unsigned char*)"\342\210\264", 1022, 1024}, /* ∴ */ +{627945337, (unsigned char*)"\342\252\211", 0, 0}, /* ⪉ */ +{628380225, (unsigned char*)"\342\212\200", 1023, 1027}, /* ⊀ */ +{633134928, (unsigned char*)"\342\211\200", 0, 0}, /* ≀ */ +{651594882, (unsigned char*)"\342\212\263", 1026, 1028}, /* ⊳ */ +{657271117, (unsigned char*)"\342\206\225", 0, 0}, /* ↕ */ +{662809391, (unsigned char*)"\342\200\234", 1013, 1046}, /* “ */ +{664079451, (unsigned char*)"\342\247\217", 0, 0}, /* ⧏ */ +{664623714, (unsigned char*)"\342\211\251\357\270\200", 1030, 0}, /* ≩︀ */ +{669119888, (unsigned char*)"\342\250\201", 1031, 1033}, /* ⨁ */ +{669260091, (unsigned char*)"\342\250\202", 0, 0}, /* ⨂ */ +{673889705, (unsigned char*)"\342\250\206", 1032, 1036}, /* ⨆ */ +{674460267, (unsigned char*)"\342\217\247", 0, 0}, /* ⏧ */ +{676235414, (unsigned char*)"\342\250\204", 1035, 1037}, /* ⨄ */ +{678202761, (unsigned char*)"\342\213\200", 0, 0}, /* ⋀ */ +{680350718, (unsigned char*)"\342\253\214", 1034, 1042}, /* ⫌ */ +{691194960, (unsigned char*)"\303\275", 0, 0}, /* ý */ +{709255750, (unsigned char*)"\342\214\205", 1039, 1041}, /* ⌅ */ +{709420220, (unsigned char*)"\342\214\256", 0, 0}, /* ⌮ */ +{709812676, (unsigned char*)"\342\214\222", 1040, 1044}, /* ⌒ */ +{710077436, (unsigned char*)"\342\214\223", 0, 0}, /* ⌓ */ +{714706988, (unsigned char*)"\342\245\211", 1043, 1045}, /* ⥉ */ +{721896417, (unsigned char*)"\342\245\216", 0, 0}, /* ⥎ */ +{723739728, (unsigned char*)"\342\245\226", 1038, 1054}, /* ⥖ */ +{730330353, (unsigned char*)"\305\272", 0, 0}, /* ź */ +{732626898, (unsigned char*)"\305\276", 1047, 1049}, /* ž */ +{734320614, (unsigned char*)"\342\213\242", 0, 0}, /* ⋢ */ +{734321076, (unsigned char*)"\342\213\243", 1048, 1052}, /* ⋣ */ +{735144757, (unsigned char*)"\342\204\250", 0, 0}, /* ℨ */ +{738451305, (unsigned char*)"\342\212\202\342\203\222", 1051, 1053}, /* ⊂⃒ */ +{738469815, (unsigned char*)"\342\252\260\314\270", 0, 0}, /* ⪰̸ */ +{738954423, (unsigned char*)"\342\212\203\342\203\222", 1050, 1058}, /* ⊃⃒ */ +{747512235, (unsigned char*)"\342\237\265", 0, 0}, /* ⟵ */ +{754169043, (unsigned char*)"\342\212\206", 1055, 1057}, /* ⊆ */ +{768237051, (unsigned char*)"\342\207\203", 0, 0}, /* ⇃ */ +{780580024, (unsigned char*)"\342\211\261", 1056, 1060}, /* ≱ */ +{785582384, (unsigned char*)"\342\207\221", 0, 0}, /* ⇑ */ +{798071634, (unsigned char*)"\342\211\265", 1059, 1061}, /* ≵ */ +{809442366, (unsigned char*)"\342\213\232", 0, 0}, /* ⋚ */ +{813260100, (unsigned char*)"\342\226\253", 531, 1594}, /* ▫ */ +{821833914, (unsigned char*)"\342\211\247", 0, 0}, /* ≧ */ +{826190435, (unsigned char*)"\342\245\225", 1063, 0}, /* ⥕ */ +{830437955, (unsigned char*)"\342\206\274", 1064, 1066}, /* ↼ */ +{831545492, (unsigned char*)"\342\211\273", 0, 0}, /* ≻ */ +{836458806, (unsigned char*)"\342\204\265", 1065, 1069}, /* ℵ */ +{836867337, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{837080726, (unsigned char*)"\342\247\253", 1068, 1070}, /* ⧫ */ +{841915047, (unsigned char*)"\342\246\246", 0, 0}, /* ⦦ */ +{842043645, (unsigned char*)"\342\247\236", 1067, 1075}, /* ⧞ */ +{845830089, (unsigned char*)"\342\212\264\342\203\222", 0, 0}, /* ⊴⃒ */ +{852945615, (unsigned char*)"\342\212\265\342\203\222", 1072, 1074}, /* ⊵⃒ */ +{860116750, (unsigned char*)"\342\206\222", 0, 0}, /* → */ +{871848693, (unsigned char*)"\342\206\226", 1073, 1077}, /* ↖ */ +{872140944, (unsigned char*)"\342\245\210", 0, 0}, /* ⥈ */ +{878608901, (unsigned char*)"\342\226\275", 1076, 1078}, /* ▽ */ +{887116914, (unsigned char*)"\342\204\232", 0, 0}, /* ℚ */ +{891834107, (unsigned char*)"\342\213\240", 1071, 1088}, /* ⋠ */ +{901917559, (unsigned char*)"\342\244\240", 0, 0}, /* ⤠ */ +{901936165, (unsigned char*)"\342\245\264", 1080, 0}, /* ⥴ */ +{904895059, (unsigned char*)"\342\226\277", 1081, 1083}, /* ▿ */ +{905171110, (unsigned char*)"\342\227\203", 0, 0}, /* ◃ */ +{905338586, (unsigned char*)"\342\250\225", 1082, 1086}, /* ⨕ */ +{905799629, (unsigned char*)"\342\250\215", 0, 0}, /* ⨍ */ +{917533657, (unsigned char*)"\342\212\276", 1085, 1087}, /* ⊾ */ +{917735130, (unsigned char*)"\342\216\260", 0, 0}, /* ⎰ */ +{917800346, (unsigned char*)"\342\215\274", 1084, 1092}, /* ⍼ */ +{920002972, (unsigned char*)"\342\206\233", 0, 0}, /* ↛ */ +{932905258, (unsigned char*)"\342\213\254", 1089, 1091}, /* ⋬ */ +{940820089, (unsigned char*)"\342\246\216", 0, 0}, /* ⦎ */ +{940820106, (unsigned char*)"\342\246\220", 1090, 1094}, /* ⦐ */ +{946094580, (unsigned char*)"\342\213\236", 0, 0}, /* ⋞ */ +{946205592, (unsigned char*)"\342\213\237", 1093, 1095}, /* ⋟ */ +{946608062, (unsigned char*)"\342\217\236", 0, 0}, /* ⏞ */ +{948733150, (unsigned char*)"\342\237\266", 1079, 1113}, /* ⟶ */ +{960250128, (unsigned char*)"\342\207\244", 0, 0}, /* ⇤ */ +{960260978, (unsigned char*)"\342\211\210", 1097, 0}, /* ≈ */ +{961579650, (unsigned char*)"\342\212\220\314\270", 1098, 1100}, /* ⊐̸ */ +{966045093, (unsigned char*)"\342\200\213", 0, 0}, /* ​ */ +{986782194, (unsigned char*)"\342\201\237", 1099, 1103}, /*   */ +{1004833897, (unsigned char*)"\342\211\221", 0, 0}, /* ≑ */ +{1011711462, (unsigned char*)"\342\245\251", 1102, 1104}, /* ⥩ */ +{1012110869, (unsigned char*)"\342\247\264", 0, 0}, /* ⧴ */ +{1014044856, (unsigned char*)"\342\210\270", 1101, 1109}, /* ∸ */ +{1014590239, (unsigned char*)"\342\212\210", 0, 0}, /* ⊈ */ +{1022603184, (unsigned char*)"\342\253\213", 1106, 1108}, /* ⫋ */ +{1032612858, (unsigned char*)"\342\251\276\314\270", 0, 0}, /* ⩾̸ */ +{1038090725, (unsigned char*)"\342\204\233", 1107, 1111}, /* ℛ */ +{1041625053, (unsigned char*)"\342\200\213", 0, 0}, /* ​ */ +{1047678075, (unsigned char*)"\342\206\275", 1110, 1112}, /* ↽ */ +{1048242133, (unsigned char*)"\342\206\221", 0, 0}, /* ↑ */ +{1067296237, (unsigned char*)"\342\207\214", 1105, 1121}, /* ⇌ */ +{1067503520, (unsigned char*)"\342\245\221", 0, 0}, /* ⥑ */ +{1069258735, (unsigned char*)"\317\205", 1114, 1116}, /* υ */ +{1078829841, (unsigned char*)"\342\205\207", 0, 0}, /* ⅇ */ +{1085075851, (unsigned char*)"\342\237\270", 1115, 1119}, /* ⟸ */ +{1094246452, (unsigned char*)"\342\211\274", 0, 0}, /* ≼ */ +{1105826287, (unsigned char*)"\342\204\225", 1118, 1120}, /* ℕ */ +{1110241840, (unsigned char*)"\342\252\214", 0, 0}, /* ⪌ */ +{1114698965, (unsigned char*)"\342\204\202", 1117, 1125}, /* ℂ */ +{1134372613, (unsigned char*)"\342\211\215", 0, 0}, /* ≍ */ +{1137538782, (unsigned char*)"\342\204\215", 1122, 1124}, /* ℍ */ +{1158775925, (unsigned char*)"\302\261", 0, 0}, /* ± */ +{1171717239, (unsigned char*)"\342\246\264", 1123, 1127}, /* ⦴ */ +{1172223697, (unsigned char*)"\342\210\226", 0, 0}, /* ∖ */ +{1181816526, (unsigned char*)"\342\234\223", 1126, 1128}, /* ✓ */ +{1182032078, (unsigned char*)"\342\212\270", 0, 0}, /* ⊸ */ +{1217189753, (unsigned char*)"\342\206\224", 1096, 1162}, /* ↔ */ +{1246782313, (unsigned char*)"\342\251\276", 0, 0}, /* ⩾ */ +{1269495274, (unsigned char*)"\342\245\213", 1130, 0}, /* ⥋ */ +{1272170499, (unsigned char*)"\342\204\222", 1131, 1133}, /* ℒ */ +{1273287689, (unsigned char*)"\342\207\213", 0, 0}, /* ⇋ */ +{1278230270, (unsigned char*)"\342\206\245", 1132, 1136}, /* ↥ */ +{1287858390, (unsigned char*)"\342\212\213\357\270\200", 0, 0}, /* ⊋︀ */ +{1311329176, (unsigned char*)"\342\207\205", 1135, 1137}, /* ⇅ */ +{1322034040, (unsigned char*)"\342\246\247", 0, 0}, /* ⦧ */ +{1324543392, (unsigned char*)"\342\216\261", 1134, 1142}, /* ⎱ */ +{1335946027, (unsigned char*)"\342\211\247\314\270", 0, 0}, /* ≧̸ */ +{1341522893, (unsigned char*)"\342\252\270", 1139, 1141}, /* ⪸ */ +{1343159904, (unsigned char*)"\342\212\203", 0, 0}, /* ⊃ */ +{1361466253, (unsigned char*)"\342\212\223", 1140, 1144}, /* ⊓ */ +{1374704544, (unsigned char*)"\342\217\237", 0, 0}, /* ⏟ */ +{1412370969, (unsigned char*)"\342\237\271", 1143, 1145}, /* ⟹ */ +{1414406743, (unsigned char*)"\342\213\252", 0, 0}, /* ⋪ */ +{1417986287, (unsigned char*)"\342\213\254", 1138, 1154}, /* ⋬ */ +{1431774055, (unsigned char*)"\342\211\246", 0, 0}, /* ≦ */ +{1451873416, (unsigned char*)"\342\250\265", 1147, 1149}, /* ⨵ */ +{1468837420, (unsigned char*)"\342\247\244", 0, 0}, /* ⧤ */ +{1483079107, (unsigned char*)"\342\207\245", 1148, 1152}, /* ⇥ */ +{1483147475, (unsigned char*)"\342\206\245", 0, 0}, /* ↥ */ +{1503454322, (unsigned char*)"\342\226\263", 1151, 1153}, /* △ */ +{1512556300, (unsigned char*)"\342\207\206", 0, 0}, /* ⇆ */ +{1534661236, (unsigned char*)"\342\205\205", 1150, 1158}, /* ⅅ */ +{1534801541, (unsigned char*)"\342\211\260", 0, 0}, /* ≰ */ +{1552293151, (unsigned char*)"\342\211\264", 1155, 1157}, /* ≴ */ +{1557558424, (unsigned char*)"\342\206\243", 0, 0}, /* ↣ */ +{1559260953, (unsigned char*)"\342\206\224", 1156, 1160}, /* ↔ */ +{1559699231, (unsigned char*)"\342\207\203", 0, 0}, /* ⇃ */ +{1561915692, (unsigned char*)"\342\206\274", 1159, 1161}, /* ↼ */ +{1562485741, (unsigned char*)"\342\212\211", 0, 0}, /* ⊉ */ +{1572185325, (unsigned char*)"\302\267", 1146, 1179}, /* · */ +{1576001964, (unsigned char*)"\342\214\237", 0, 0}, /* ⌟ */ +{1589202769, (unsigned char*)"\342\205\207", 1163, 0}, /* ⅇ */ +{1590598039, (unsigned char*)"\342\224\200", 1164, 1166}, /* ─ */ +{1619628897, (unsigned char*)"\342\214\206", 0, 0}, /* ⌆ */ +{1630548983, (unsigned char*)"\342\252\271", 1165, 1169}, /* ⪹ */ +{1632155742, (unsigned char*)"\342\212\264", 0, 0}, /* ⊴ */ +{1652415397, (unsigned char*)"\342\210\256", 1168, 1170}, /* ∮ */ +{1656304147, (unsigned char*)"\342\200\235", 0, 0}, /* ” */ +{1660701161, (unsigned char*)"\342\253\244", 1167, 1175}, /* ⫤ */ +{1664917774, (unsigned char*)"\342\211\275", 0, 0}, /* ≽ */ +{1675433358, (unsigned char*)"\342\211\262", 1172, 1174}, /* ≲ */ +{1677624072, (unsigned char*)"\342\245\250", 0, 0}, /* ⥨ */ +{1687486893, (unsigned char*)"\342\206\225", 1173, 1177}, /* ↕ */ +{1695244767, (unsigned char*)"\342\210\275", 0, 0}, /* ∽ */ +{1696757428, (unsigned char*)"\342\213\252", 1176, 1178}, /* ⋪ */ +{1709476789, (unsigned char*)"\342\206\253", 0, 0}, /* ↫ */ +{1724069746, (unsigned char*)"\342\211\255", 1171, 1187}, /* ≭ */ +{1729453610, (unsigned char*)"\342\245\212", 0, 0}, /* ⥊ */ +{1735157173, (unsigned char*)"\342\213\242", 1180, 1182}, /* ⋢ */ +{1735196042, (unsigned char*)"\342\246\273", 0, 0}, /* ⦻ */ +{1743044337, (unsigned char*)"\342\244\237", 1181, 1185}, /* ⤟ */ +{1743062943, (unsigned char*)"\342\245\263", 0, 0}, /* ⥳ */ +{1780911036, (unsigned char*)"\316\277", 1184, 1186}, /* ο */ +{1781946867, (unsigned char*)"\342\246\217", 0, 0}, /* ⦏ */ +{1781946884, (unsigned char*)"\342\246\215", 1183, 1191}, /* ⦍ */ +{1789597159, (unsigned char*)"\342\251\275\314\270", 0, 0}, /* ⩽̸ */ +{1792295088, (unsigned char*)"\342\231\243", 1188, 1190}, /* ♣ */ +{1800766792, (unsigned char*)"\342\250\243", 0, 0}, /* ⨣ */ +{1801278592, (unsigned char*)"\342\211\257", 1189, 1193}, /* ≯ */ +{1805699638, (unsigned char*)"\342\210\204", 0, 0}, /* ∄ */ +{1808940891, (unsigned char*)"\342\247\235", 1192, 1194}, /* ⧝ */ +{1809192765, (unsigned char*)"\342\250\222", 0, 0}, /* ⨒ */ +{1812749833, (unsigned char*)"\342\210\263", 1129, 1262}, /* ∳ */ +{1814824375, (unsigned char*)"\12", 0, 0}, /* */ +{1824044748, (unsigned char*)"\342\211\234", 1196, 0}, /* ≜ */ +{1826118667, (unsigned char*)"\313\235", 1197, 1199}, /* ˝ */ +{1833046394, (unsigned char*)"\342\212\237", 0, 0}, /* ⊟ */ +{1841346224, (unsigned char*)"\342\212\240", 1198, 1202}, /* ⊠ */ +{1846251367, (unsigned char*)"\342\211\250\357\270\200", 0, 0}, /* ≨︀ */ +{1851429469, (unsigned char*)"\342\210\265", 1201, 1203}, /* ∵ */ +{1854412551, (unsigned char*)"\302\250", 0, 0}, /* ¨ */ +{1859953766, (unsigned char*)"\342\245\247", 1200, 1208}, /* ⥧ */ +{1863308051, (unsigned char*)"\342\226\252", 0, 0}, /* ▪ */ +{1863826860, (unsigned char*)"\342\246\260", 1205, 1207}, /* ⦰ */ +{1868071481, (unsigned char*)"\342\245\241", 0, 0}, /* ⥡ */ +{1868748369, (unsigned char*)"\342\250\223", 1206, 1210}, /* ⨓ */ +{1872038252, (unsigned char*)"\342\212\217", 0, 0}, /* ⊏ */ +{1872362863, (unsigned char*)"\342\211\254", 1209, 1211}, /* ≬ */ +{1880607711, (unsigned char*)"\316\265", 0, 0}, /* ε */ +{1882771727, (unsigned char*)"\342\205\210", 1204, 1221}, /* ⅈ */ +{1896441789, (unsigned char*)"\342\244\223", 0, 0}, /* ⤓ */ +{1897994954, (unsigned char*)"\342\237\277", 1213, 0}, /* ⟿ */ +{1900283327, (unsigned char*)"\342\252\201", 1214, 1216}, /* ⪁ */ +{1900810243, (unsigned char*)"\342\213\226", 0, 0}, /* ⋖ */ +{1900813673, (unsigned char*)"\342\211\266", 1215, 1219}, /* ≶ */ +{1900826373, (unsigned char*)"\342\211\262", 0, 0}, /* ≲ */ +{1900983990, (unsigned char*)"\342\211\225", 1218, 1220}, /* ≕ */ +{1913481565, (unsigned char*)"\342\210\244", 0, 0}, /* ∤ */ +{1916690337, (unsigned char*)"\342\213\204", 1217, 1225}, /* ⋄ */ +{1922124375, (unsigned char*)"\342\251\270", 0, 0}, /* ⩸ */ +{1934515027, (unsigned char*)"\342\206\267", 1222, 1224}, /* ↷ */ +{1942807416, (unsigned char*)"\342\200\231", 0, 0}, /* ’ */ +{1948810028, (unsigned char*)"\342\207\204", 1223, 1227}, /* ⇄ */ +{1949326628, (unsigned char*)"\342\212\221", 0, 0}, /* ⊑ */ +{1959376936, (unsigned char*)"\342\250\202", 1226, 1228}, /* ⨂ */ +{1960073481, (unsigned char*)"\342\204\260", 0, 0}, /* ℰ */ +{1970730262, (unsigned char*)"\342\204\264", 1212, 1246}, /* ℴ */ +{1987029913, (unsigned char*)"\342\216\266", 0, 0}, /* ⎶ */ +{1988767401, (unsigned char*)"\342\251\227", 1230, 0}, /* ⩗ */ +{1992137236, (unsigned char*)"\342\213\265\314\270", 1231, 1233}, /* ⋵̸ */ +{2001917072, (unsigned char*)"\342\235\230", 0, 0}, /* ❘ */ +{2011492714, (unsigned char*)"\342\250\201", 1232, 1236}, /* ⨁ */ +{2012773496, (unsigned char*)"\342\227\257", 0, 0}, /* ◯ */ +{2013199213, (unsigned char*)"\342\250\200", 1235, 1237}, /* ⨀ */ +{2013359921, (unsigned char*)"\342\230\205", 0, 0}, /* ★ */ +{2016091416, (unsigned char*)"\342\245\222", 1234, 1242}, /* ⥒ */ +{2016262531, (unsigned char*)"\342\250\206", 0, 0}, /* ⨆ */ +{2018608240, (unsigned char*)"\342\250\204", 1239, 1241}, /* ⨄ */ +{2020575587, (unsigned char*)"\342\213\200", 0, 0}, /* ⋀ */ +{2022898772, (unsigned char*)"\342\207\224", 1240, 1244}, /* ⇔ */ +{2026494504, (unsigned char*)"\342\211\217\314\270", 0, 0}, /* ≏̸ */ +{2036145450, (unsigned char*)"\342\213\253", 1243, 1245}, /* ⋫ */ +{2037412504, (unsigned char*)"\342\207\214", 0, 0}, /* ⇌ */ +{2067139948, (unsigned char*)"\342\206\277", 1238, 1254}, /* ↿ */ +{2083152187, (unsigned char*)"\342\206\220", 0, 0}, /* ← */ +{2088391403, (unsigned char*)"\342\206\220", 1247, 1249}, /* ← */ +{2088862898, (unsigned char*)"\342\214\212", 0, 0}, /* ⌊ */ +{2088934187, (unsigned char*)"\360\235\224\270", 1248, 1252}, /* 𝔸 */ +{2088938126, (unsigned char*)"\360\235\222\234", 0, 0}, /* 𝒜 */ +{2088940628, (unsigned char*)"\303\204", 1251, 1253}, /* Ä */ +{2088954960, (unsigned char*)"\342\253\247", 0, 0}, /* ⫧ */ +{2088959361, (unsigned char*)"\316\222", 1250, 1258}, /* Β */ +{2088963180, (unsigned char*)"\320\247", 0, 0}, /* Ч */ +{2088970124, (unsigned char*)"\360\235\224\271", 1255, 1257}, /* 𝔹 */ +{2088970144, (unsigned char*)"\302\251", 0, 0}, /* © */ +{2088974063, (unsigned char*)"\342\204\254", 1256, 1260}, /* ℬ */ +{2088994063, (unsigned char*)"\304\212", 0, 0}, /* Ċ */ +{2089001295, (unsigned char*)"\320\202", 1259, 1261}, /* Ђ */ +{2089006061, (unsigned char*)"\342\204\202", 0, 0}, /* ℂ */ +{2089010000, (unsigned char*)"\360\235\222\236", 1229, 1295}, /* 𝒞 */ +{2089011096, (unsigned char*)"\320\205", 0, 0}, /* Ѕ */ +{2089018719, (unsigned char*)"\320\217", 1263, 0}, /* Џ */ +{2089026830, (unsigned char*)"\342\206\241", 1264, 1266}, /* ↡ */ +{2089041998, (unsigned char*)"\360\235\224\273", 0, 0}, /* 𝔻 */ +{2089045937, (unsigned char*)"\360\235\222\237", 1265, 1269}, /* 𝒟 */ +{2089065937, (unsigned char*)"\304\226", 0, 0}, /* Ė */ +{2089077935, (unsigned char*)"\360\235\224\274", 1268, 1270}, /* 𝔼 */ +{2089081874, (unsigned char*)"\342\204\260", 0, 0}, /* ℰ */ +{2089082067, (unsigned char*)"\342\251\263", 1267, 1275}, /* ⩳ */ +{2089084376, (unsigned char*)"\303\213", 0, 0}, /* Ë */ +{2089109106, (unsigned char*)"\320\203", 1272, 1274}, /* Ѓ */ +{2089113872, (unsigned char*)"\360\235\224\275", 0, 0}, /* 𝔽 */ +{2089117811, (unsigned char*)"\342\204\261", 1273, 1277}, /* ℱ */ +{2089137811, (unsigned char*)"\304\240", 0, 0}, /* Ġ */ +{2089149809, (unsigned char*)"\360\235\224\276", 1276, 1278}, /* 𝔾 */ +{2089153748, (unsigned char*)"\360\235\222\242", 0, 0}, /* 𝒢 */ +{2089175535, (unsigned char*)"\320\225", 1271, 1287}, /* Е */ +{2089185746, (unsigned char*)"\342\204\215", 0, 0}, /* ℍ */ +{2089186425, (unsigned char*)"\320\201", 1280, 1282}, /* Ё */ +{2089189685, (unsigned char*)"\342\204\213", 0, 0}, /* ℋ */ +{2089209685, (unsigned char*)"\304\260", 1281, 1285}, /* İ */ +{2089221683, (unsigned char*)"\360\235\225\200", 0, 0}, /* 𝕀 */ +{2089221810, (unsigned char*)"\316\231", 1284, 1286}, /* Ι */ +{2089225622, (unsigned char*)"\342\204\220", 0, 0}, /* ℐ */ +{2089228124, (unsigned char*)"\303\217", 1283, 1291}, /* Ï */ +{2089250676, (unsigned char*)"\320\245", 0, 0}, /* Х */ +{2089252854, (unsigned char*)"\320\214", 1288, 1290}, /* Ќ */ +{2089257620, (unsigned char*)"\360\235\225\201", 0, 0}, /* 𝕁 */ +{2089261559, (unsigned char*)"\360\235\222\245", 1289, 1293}, /* 𝒥 */ +{2089288791, (unsigned char*)"\320\211", 0, 0}, /* Љ */ +{2089293557, (unsigned char*)"\360\235\225\202", 1292, 1294}, /* 𝕂 */ +{2089297496, (unsigned char*)"\360\235\222\246", 0, 0}, /* 𝒦 */ +{2089314183, (unsigned char*)"\342\237\252", 1279, 1312}, /* ⟪ */ +{2089314326, (unsigned char*)"\342\206\236", 0, 0}, /* ↞ */ +{2089329494, (unsigned char*)"\360\235\225\203", 1296, 0}, /* 𝕃 */ +{2089333433, (unsigned char*)"\342\204\222", 1297, 1299}, /* ℒ */ +{2089360665, (unsigned char*)"\320\212", 0, 0}, /* Њ */ +{2089365431, (unsigned char*)"\360\235\225\204", 1298, 1302}, /* 𝕄 */ +{2089369370, (unsigned char*)"\342\204\263", 0, 0}, /* ℳ */ +{2089401368, (unsigned char*)"\342\204\225", 1301, 1303}, /* ℕ */ +{2089405307, (unsigned char*)"\360\235\222\251", 0, 0}, /* 𝒩 */ +{2089437305, (unsigned char*)"\360\235\225\206", 1300, 1308}, /* 𝕆 */ +{2089441244, (unsigned char*)"\360\235\222\252", 0, 0}, /* 𝒪 */ +{2089443746, (unsigned char*)"\303\226", 1305, 1307}, /* Ö */ +{2089473242, (unsigned char*)"\342\204\231", 0, 0}, /* ℙ */ +{2089477181, (unsigned char*)"\360\235\222\253", 1306, 1310}, /* 𝒫 */ +{2089479758, (unsigned char*)"\42", 0, 0}, /* " */ +{2089509179, (unsigned char*)"\342\204\232", 1309, 1311}, /* ℚ */ +{2089513118, (unsigned char*)"\360\235\222\254", 0, 0}, /* 𝒬 */ +{2089529805, (unsigned char*)"\342\237\253", 1304, 1320}, /* ⟫ */ +{2089529948, (unsigned char*)"\342\206\240", 0, 0}, /* ↠ */ +{2089538172, (unsigned char*)"\320\250", 1313, 1315}, /* Ш */ +{2089545116, (unsigned char*)"\342\204\235", 0, 0}, /* ℝ */ +{2089549055, (unsigned char*)"\342\204\233", 1314, 1318}, /* ℛ */ +{2089578539, (unsigned char*)"\342\245\223", 0, 0}, /* ⥓ */ +{2089581053, (unsigned char*)"\360\235\225\212", 1317, 1319}, /* 𝕊 */ +{2089583311, (unsigned char*)"\342\210\232", 0, 0}, /* √ */ +{2089584992, (unsigned char*)"\360\235\222\256", 1316, 1324}, /* 𝒮 */ +{2089586015, (unsigned char*)"\342\213\206", 0, 0}, /* ⋆ */ +{2089586088, (unsigned char*)"\320\246", 1321, 1323}, /* Ц */ +{2089616990, (unsigned char*)"\360\235\225\213", 0, 0}, /* 𝕋 */ +{2089620929, (unsigned char*)"\360\235\222\257", 1322, 1326}, /* 𝒯 */ +{2089637759, (unsigned char*)"\342\206\237", 0, 0}, /* ↟ */ +{2089652927, (unsigned char*)"\360\235\225\214", 1325, 1327}, /* 𝕌 */ +{2089654118, (unsigned char*)"\317\222", 0, 0}, /* ϒ */ +{2089656866, (unsigned char*)"\360\235\222\260", 1195, 1461}, /* 𝒰 */ +{2089659368, (unsigned char*)"\303\234", 0, 0}, /* Ü */ +{2089674224, (unsigned char*)"\342\253\253", 1329, 0}, /* ⫫ */ +{2089678054, (unsigned char*)"\342\200\226", 1330, 1332}, /* ‖ */ +{2089688864, (unsigned char*)"\360\235\225\215", 0, 0}, /* 𝕍 */ +{2089692803, (unsigned char*)"\360\235\222\261", 1331, 1335}, /* 𝒱 */ +{2089724801, (unsigned char*)"\360\235\225\216", 0, 0}, /* 𝕎 */ +{2089728740, (unsigned char*)"\360\235\222\262", 1334, 1336}, /* 𝒲 */ +{2089746171, (unsigned char*)"\320\257", 0, 0}, /* Я */ +{2089754883, (unsigned char*)"\320\207", 1333, 1341}, /* Ї */ +{2089760738, (unsigned char*)"\360\235\225\217", 0, 0}, /* 𝕏 */ +{2089764677, (unsigned char*)"\360\235\222\263", 1338, 1340}, /* 𝒳 */ +{2089767951, (unsigned char*)"\320\256", 0, 0}, /* Ю */ +{2089789731, (unsigned char*)"\320\226", 1339, 1343}, /* Ж */ +{2089796675, (unsigned char*)"\360\235\225\220", 0, 0}, /* 𝕐 */ +{2089800614, (unsigned char*)"\360\235\222\264", 1342, 1344}, /* 𝒴 */ +{2089803116, (unsigned char*)"\305\270", 0, 0}, /* Ÿ */ +{2089820614, (unsigned char*)"\305\273", 1337, 1354}, /* Ż */ +{2089821849, (unsigned char*)"\316\226", 0, 0}, /* Ζ */ +{2089832612, (unsigned char*)"\342\204\244", 1346, 0}, /* ℤ */ +{2089836551, (unsigned char*)"\360\235\222\265", 1347, 1349}, /* 𝒵 */ +{2090082684, (unsigned char*)"\342\251\234", 0, 0}, /* ⩜ */ +{2090082702, (unsigned char*)"\342\251\232", 1348, 1352}, /* ⩚ */ +{2090082784, (unsigned char*)"\342\246\244", 0, 0}, /* ⦤ */ +{2090084152, (unsigned char*)"\342\253\255", 1351, 1353}, /* ⫭ */ +{2090084171, (unsigned char*)"\360\235\225\222", 0, 0}, /* 𝕒 */ +{2090085027, (unsigned char*)"\342\211\213", 1350, 1358}, /* ≋ */ +{2090085240, (unsigned char*)"\47", 0, 0}, /* ' */ +{2090088110, (unsigned char*)"\360\235\222\266", 1355, 1357}, /* 𝒶 */ +{2090090612, (unsigned char*)"\303\244", 0, 0}, /* ä */ +{2090106022, (unsigned char*)"\342\216\265", 1356, 1360}, /* ⎵ */ +{2090109345, (unsigned char*)"\316\262", 0, 0}, /* β */ +{2090109352, (unsigned char*)"\342\204\266", 1359, 1361}, /* ℶ */ +{2090119000, (unsigned char*)"\342\214\220", 0, 0}, /* ⌐ */ +{2090120108, (unsigned char*)"\360\235\225\223", 1345, 1379}, /* 𝕓 */ +{2090120342, (unsigned char*)"\342\225\220", 0, 0}, /* ═ */ +{2090120356, (unsigned char*)"\342\225\221", 1363, 0}, /* ║ */ +{2090120374, (unsigned char*)"\342\224\200", 1364, 1366}, /* ─ */ +{2090120388, (unsigned char*)"\342\224\202", 0, 0}, /* │ */ +{2090124047, (unsigned char*)"\360\235\222\267", 1365, 1369}, /* 𝒷 */ +{2090124240, (unsigned char*)"\342\210\275", 0, 0}, /* ∽ */ +{2090124437, (unsigned char*)"\134", 1368, 1370}, /* \ */ +{2090126516, (unsigned char*)"\342\200\242", 0, 0}, /* • */ +{2090126553, (unsigned char*)"\342\211\216", 1367, 1375}, /* ≎ */ +{2090140812, (unsigned char*)"\342\210\251\357\270\200", 0, 0}, /* ∩︀ */ +{2090141966, (unsigned char*)"\342\207\223", 1372, 1374}, /* ⇓ */ +{2090144047, (unsigned char*)"\304\213", 0, 0}, /* ċ */ +{2090145103, (unsigned char*)"\302\242", 1373, 1377}, /* ¢ */ +{2090148012, (unsigned char*)"\321\207", 0, 0}, /* ч */ +{2090149028, (unsigned char*)"\342\245\245", 1376, 1378}, /* ⥥ */ +{2090149544, (unsigned char*)"\342\247\203", 0, 0}, /* ⧃ */ +{2090149574, (unsigned char*)"\313\206", 1371, 1387}, /* ˆ */ +{2090149576, (unsigned char*)"\342\211\227", 0, 0}, /* ≗ */ +{2090155956, (unsigned char*)"\342\210\201", 1380, 1382}, /* ∁ */ +{2090155980, (unsigned char*)"\342\211\205", 0, 0}, /* ≅ */ +{2090156045, (unsigned char*)"\360\235\225\224", 1381, 1385}, /* 𝕔 */ +{2090156064, (unsigned char*)"\302\251", 0, 0}, /* © */ +{2090159984, (unsigned char*)"\360\235\222\270", 1384, 1386}, /* 𝒸 */ +{2090160562, (unsigned char*)"\342\253\217", 0, 0}, /* ⫏ */ +{2090160576, (unsigned char*)"\342\253\220", 1383, 1391}, /* ⫐ */ +{2090162592, (unsigned char*)"\342\210\252\357\270\200", 0, 0}, /* ∪︀ */ +{2090176814, (unsigned char*)"\342\206\223", 1388, 1390}, /* ↓ */ +{2090176837, (unsigned char*)"\342\200\220", 0, 0}, /* ‐ */ +{2090181073, (unsigned char*)"\342\211\221", 1389, 1393}, /* ≑ */ +{2090184960, (unsigned char*)"\342\213\204", 0, 0}, /* ⋄ */ +{2090186127, (unsigned char*)"\321\222", 1392, 1394}, /* ђ */ +{2090191982, (unsigned char*)"\360\235\225\225", 0, 0}, /* 𝕕 */ +{2090195921, (unsigned char*)"\360\235\222\271", 1362, 1428}, /* 𝒹 */ +{2090195928, (unsigned char*)"\321\225", 0, 0}, /* ѕ */ +{2090196311, (unsigned char*)"\342\247\266", 1396, 0}, /* ⧶ */ +{2090197496, (unsigned char*)"\342\226\277", 1397, 1399}, /* ▿ */ +{2090203551, (unsigned char*)"\321\237", 0, 0}, /* џ */ +{2090214632, (unsigned char*)"\342\211\226", 1398, 1402}, /* ≖ */ +{2090215921, (unsigned char*)"\304\227", 0, 0}, /* ė */ +{2090225850, (unsigned char*)"\342\200\203", 1401, 1403}, /*   */ +{2090226939, (unsigned char*)"\342\200\202", 0, 0}, /*   */ +{2090227919, (unsigned char*)"\360\235\225\226", 1400, 1408}, /* 𝕖 */ +{2090228525, (unsigned char*)"\342\213\225", 0, 0}, /* ⋕ */ +{2090229110, (unsigned char*)"\316\265", 1405, 1407}, /* ε */ +{2090231858, (unsigned char*)"\342\204\257", 0, 0}, /* ℯ */ +{2090232051, (unsigned char*)"\342\211\202", 1406, 1410}, /* ≂ */ +{2090234360, (unsigned char*)"\303\253", 0, 0}, /* ë */ +{2090234528, (unsigned char*)"\342\202\254", 1409, 1411}, /* € */ +{2090237297, (unsigned char*)"\41", 0, 0}, /* ! */ +{2090260108, (unsigned char*)"\342\231\255", 1404, 1420}, /* ♭ */ +{2090262734, (unsigned char*)"\306\222", 0, 0}, /* ƒ */ +{2090263856, (unsigned char*)"\360\235\225\227", 1413, 1415}, /* 𝕗 */ +{2090263927, (unsigned char*)"\342\213\224", 0, 0}, /* ⋔ */ +{2090267795, (unsigned char*)"\360\235\222\273", 1414, 1418}, /* 𝒻 */ +{2090285714, (unsigned char*)"\342\207\224", 0, 0}, /* ⇔ */ +{2090287795, (unsigned char*)"\304\241", 1417, 1419}, /* ġ */ +{2090288947, (unsigned char*)"\342\211\247", 0, 0}, /* ≧ */ +{2090289008, (unsigned char*)"\342\213\233\357\270\200", 1416, 1424}, /* ⋛︀ */ +{2090293938, (unsigned char*)"\321\223", 0, 0}, /* ѓ */ +{2090298219, (unsigned char*)"\342\252\212", 1421, 1423}, /* ⪊ */ +{2090298352, (unsigned char*)"\342\252\210", 0, 0}, /* ⪈ */ +{2090299793, (unsigned char*)"\360\235\225\230", 1422, 1426}, /* 𝕘 */ +{2090303732, (unsigned char*)"\342\204\212", 0, 0}, /* ℊ */ +{2090303925, (unsigned char*)"\342\211\263", 1425, 1427}, /* ≳ */ +{2090304806, (unsigned char*)"\342\252\247", 0, 0}, /* ⪧ */ +{2090307317, (unsigned char*)"\342\211\251\357\270\200", 1412, 1445}, /* ≩︀ */ +{2090320352, (unsigned char*)"\302\275", 0, 0}, /* ½ */ +{2090320562, (unsigned char*)"\342\206\224", 1429, 0}, /* ↔ */ +{2090321090, (unsigned char*)"\342\204\217", 1430, 1432}, /* ℏ */ +{2090335730, (unsigned char*)"\360\235\225\231", 0, 0}, /* 𝕙 */ +{2090339669, (unsigned char*)"\360\235\222\275", 1431, 1435}, /* 𝒽 */ +{2090360367, (unsigned char*)"\320\265", 0, 0}, /* е */ +{2090369456, (unsigned char*)"\342\212\267", 1434, 1436}, /* ⊷ */ +{2090371257, (unsigned char*)"\321\221", 0, 0}, /* ё */ +{2090371667, (unsigned char*)"\360\235\225\232", 1433, 1441}, /* 𝕚 */ +{2090371794, (unsigned char*)"\316\271", 0, 0}, /* ι */ +{2090375606, (unsigned char*)"\360\235\222\276", 1438, 1440}, /* 𝒾 */ +{2090375800, (unsigned char*)"\342\210\210", 0, 0}, /* ∈ */ +{2090378108, (unsigned char*)"\303\257", 1439, 1443}, /* ï */ +{2090407604, (unsigned char*)"\360\235\225\233", 0, 0}, /* 𝕛 */ +{2090411543, (unsigned char*)"\360\235\222\277", 1442, 1444}, /* 𝒿 */ +{2090429462, (unsigned char*)"\342\207\220", 0, 0}, /* ⇐ */ +{2090435508, (unsigned char*)"\321\205", 1437, 1453}, /* х */ +{2090436524, (unsigned char*)"\342\245\242", 0, 0}, /* ⥢ */ +{2090437686, (unsigned char*)"\321\234", 1446, 1448}, /* ќ */ +{2090443541, (unsigned char*)"\360\235\225\234", 0, 0}, /* 𝕜 */ +{2090447480, (unsigned char*)"\360\235\223\200", 1447, 1451}, /* 𝓀 */ +{2090464167, (unsigned char*)"\342\237\250", 0, 0}, /* ⟨ */ +{2090464310, (unsigned char*)"\342\206\220", 1450, 1452}, /* ← */ +{2090464363, (unsigned char*)"\342\252\255", 0, 0}, /* ⪭ */ +{2090466571, (unsigned char*)"\173", 1449, 1457}, /* { */ +{2090467065, (unsigned char*)"\342\244\266", 0, 0}, /* ⤶ */ +{2090467600, (unsigned char*)"\342\206\262", 1454, 1456}, /* ↲ */ +{2090468632, (unsigned char*)"\342\211\246", 0, 0}, /* ≦ */ +{2090468688, (unsigned char*)"\342\213\232\357\270\200", 1455, 1459}, /* ⋚︀ */ +{2090473623, (unsigned char*)"\321\231", 0, 0}, /* љ */ +{2090477904, (unsigned char*)"\342\252\211", 1458, 1460}, /* ⪉ */ +{2090478037, (unsigned char*)"\342\252\207", 0, 0}, /* ⪇ */ +{2090479478, (unsigned char*)"\360\235\225\235", 1395, 1528}, /* 𝕝 */ +{2090479808, (unsigned char*)"\342\247\253", 0, 0}, /* ⧫ */ +{2090480084, (unsigned char*)"\50", 1462, 0}, /* ( */ +{2090483417, (unsigned char*)"\360\235\223\201", 1463, 1465}, /* 𝓁 */ +{2090483610, (unsigned char*)"\342\211\262", 0, 0}, /* ≲ */ +{2090483863, (unsigned char*)"\133", 1464, 1468}, /* [ */ +{2090484491, (unsigned char*)"\342\252\246", 0, 0}, /* ⪦ */ +{2090484992, (unsigned char*)"\342\227\203", 1467, 1469}, /* ◃ */ +{2090487002, (unsigned char*)"\342\211\250\357\270\200", 0, 0}, /* ≨︀ */ +{2090499752, (unsigned char*)"\302\257", 1466, 1474}, /* ¯ */ +{2090500036, (unsigned char*)"\342\231\202", 0, 0}, /* ♂ */ +{2090500051, (unsigned char*)"\342\234\240", 1471, 1473}, /* ✠ */ +{2090507940, (unsigned char*)"\342\211\253\314\270", 0, 0}, /* ≫̸ */ +{2090511729, (unsigned char*)"\342\253\233", 1472, 1476}, /* ⫛ */ +{2090511764, (unsigned char*)"\342\200\246", 0, 0}, /* … */ +{2090513385, (unsigned char*)"\342\211\252\314\270", 1475, 1477}, /* ≪̸ */ +{2090515415, (unsigned char*)"\360\235\225\236", 0, 0}, /* 𝕞 */ +{2090519354, (unsigned char*)"\360\235\223\202", 1470, 1487}, /* 𝓂 */ +{2090536041, (unsigned char*)"\342\210\240\342\203\222", 0, 0}, /* ∠⃒ */ +{2090536073, (unsigned char*)"\342\251\260\314\270", 1479, 0}, /* ⩰̸ */ +{2090537304, (unsigned char*)"\302\240", 1480, 1482}, /*   */ +{2090537799, (unsigned char*)"\342\251\203", 0, 0}, /* ⩃ */ +{2090538459, (unsigned char*)"\342\251\202", 1481, 1485}, /* ⩂ */ +{2090542288, (unsigned char*)"\342\211\261", 0, 0}, /* ≱ */ +{2090542290, (unsigned char*)"\342\251\276\314\270", 1484, 1486}, /* ⩾̸ */ +{2090542784, (unsigned char*)"\342\211\257", 0, 0}, /* ≯ */ +{2090544915, (unsigned char*)"\342\213\272", 1483, 1491}, /* ⋺ */ +{2090545497, (unsigned char*)"\321\232", 0, 0}, /* њ */ +{2090547701, (unsigned char*)"\342\200\245", 1488, 1490}, /* ‥ */ +{2090547733, (unsigned char*)"\342\211\260", 0, 0}, /* ≰ */ +{2090547735, (unsigned char*)"\342\251\275\314\270", 1489, 1493}, /* ⩽̸ */ +{2090548941, (unsigned char*)"\342\210\244", 0, 0}, /* ∤ */ +{2090551352, (unsigned char*)"\360\235\225\237", 1492, 1494}, /* 𝕟 */ +{2090551958, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{2090552506, (unsigned char*)"\342\252\257\314\270", 1478, 1512}, /* ⪯̸ */ +{2090555278, (unsigned char*)"\342\252\260\314\270", 0, 0}, /* ⪰̸ */ +{2090555291, (unsigned char*)"\360\235\223\203", 1496, 0}, /* 𝓃 */ +{2090555484, (unsigned char*)"\342\211\201", 1497, 1499}, /* ≁ */ +{2090555869, (unsigned char*)"\342\212\204", 0, 0}, /* ⊄ */ +{2090555883, (unsigned char*)"\342\212\205", 1498, 1502}, /* ⊅ */ +{2090556506, (unsigned char*)"\342\211\271", 0, 0}, /* ≹ */ +{2090556666, (unsigned char*)"\342\211\270", 1501, 1503}, /* ≸ */ +{2090558490, (unsigned char*)"\342\211\215\342\203\222", 0, 0}, /* ≍⃒ */ +{2090558677, (unsigned char*)"\342\211\245\342\203\222", 1500, 1508}, /* ≥⃒ */ +{2090558692, (unsigned char*)"\76\342\203\222", 0, 0}, /* >⃒ */ +{2090558842, (unsigned char*)"\342\211\244\342\203\222", 1505, 1507}, /* ≤⃒ */ +{2090558857, (unsigned char*)"\74\342\203\222", 0, 0}, /* <⃒ */ +{2090572156, (unsigned char*)"\342\212\233", 1506, 1510}, /* ⊛ */ +{2090574002, (unsigned char*)"\342\212\232", 0, 0}, /* ⊚ */ +{2090575095, (unsigned char*)"\342\250\270", 1509, 1511}, /* ⨸ */ +{2090575291, (unsigned char*)"\342\212\231", 0, 0}, /* ⊙ */ +{2090578552, (unsigned char*)"\313\233", 1504, 1520}, /* ˛ */ +{2090580703, (unsigned char*)"\342\210\256", 0, 0}, /* ∮ */ +{2090584878, (unsigned char*)"\342\246\266", 1513, 1515}, /* ⦶ */ +{2090587289, (unsigned char*)"\360\235\225\240", 0, 0}, /* 𝕠 */ +{2090587895, (unsigned char*)"\342\246\267", 1514, 1518}, /* ⦷ */ +{2090590160, (unsigned char*)"\302\252", 0, 0}, /* ª */ +{2090590167, (unsigned char*)"\302\272", 1517, 1519}, /* º */ +{2090590535, (unsigned char*)"\342\251\226", 0, 0}, /* ⩖ */ +{2090591228, (unsigned char*)"\342\204\264", 1516, 1524}, /* ℴ */ +{2090591618, (unsigned char*)"\342\212\230", 0, 0}, /* ⊘ */ +{2090593730, (unsigned char*)"\303\266", 1521, 1523}, /* ö */ +{2090608041, (unsigned char*)"\302\266", 0, 0}, /* ¶ */ +{2090608060, (unsigned char*)"\342\210\202", 1522, 1526}, /* ∂ */ +{2090612412, (unsigned char*)"\342\212\245", 0, 0}, /* ⊥ */ +{2090615388, (unsigned char*)"\317\225", 1525, 1527}, /* ϕ */ +{2090620137, (unsigned char*)"\53", 0, 0}, /* + */ +{2090623226, (unsigned char*)"\360\235\225\241", 1495, 1561}, /* 𝕡 */ +{2090626008, (unsigned char*)"\342\252\267", 0, 0}, /* ⪷ */ +{2090626127, (unsigned char*)"\342\211\272", 1529, 0}, /* ≺ */ +{2090626394, (unsigned char*)"\342\252\265", 1530, 1532}, /* ⪵ */ +{2090626458, (unsigned char*)"\342\210\217", 0, 0}, /* ∏ */ +{2090626470, (unsigned char*)"\342\210\235", 1531, 1535}, /* ∝ */ +{2090627165, (unsigned char*)"\360\235\223\205", 0, 0}, /* 𝓅 */ +{2090645084, (unsigned char*)"\342\207\222", 1534, 1536}, /* ⇒ */ +{2090652146, (unsigned char*)"\342\245\244", 0, 0}, /* ⥤ */ +{2090652577, (unsigned char*)"\342\250\214", 1533, 1541}, /* ⨌ */ +{2090659163, (unsigned char*)"\360\235\225\242", 0, 0}, /* 𝕢 */ +{2090663102, (unsigned char*)"\360\235\223\206", 1538, 1540}, /* 𝓆 */ +{2090665678, (unsigned char*)"\42", 0, 0}, /* " */ +{2090679424, (unsigned char*)"\342\210\275\314\261", 1539, 1543}, /* ∽̱ */ +{2090679789, (unsigned char*)"\342\237\251", 0, 0}, /* ⟩ */ +{2090679932, (unsigned char*)"\342\206\222", 1542, 1544}, /* → */ +{2090682193, (unsigned char*)"\175", 0, 0}, /* } */ +{2090682687, (unsigned char*)"\342\244\267", 1537, 1553}, /* ⤷ */ +{2090683222, (unsigned char*)"\342\206\263", 0, 0}, /* ↳ */ +{2090683721, (unsigned char*)"\342\204\234", 1546, 1548}, /* ℜ */ +{2090683795, (unsigned char*)"\342\226\255", 0, 0}, /* ▭ */ +{2090687460, (unsigned char*)"\317\261", 1547, 1551}, /* ϱ */ +{2090688501, (unsigned char*)"\313\232", 0, 0}, /* ˚ */ +{2090695100, (unsigned char*)"\360\235\225\243", 1550, 1552}, /* 𝕣 */ +{2090695706, (unsigned char*)"\51", 0, 0}, /* ) */ +{2090699039, (unsigned char*)"\360\235\223\207", 1549, 1557}, /* 𝓇 */ +{2090699485, (unsigned char*)"\135", 0, 0}, /* ] */ +{2090700614, (unsigned char*)"\342\226\271", 1554, 1556}, /* ▹ */ +{2090717484, (unsigned char*)"\342\252\270", 0, 0}, /* ⪸ */ +{2090717870, (unsigned char*)"\342\252\266", 1555, 1559}, /* ⪶ */ +{2090719039, (unsigned char*)"\342\213\205", 0, 0}, /* ⋅ */ +{2090719732, (unsigned char*)"\302\247", 1558, 1560}, /* § */ +{2090720051, (unsigned char*)"\73", 0, 0}, /* ; */ +{2090720425, (unsigned char*)"\342\234\266", 1545, 1578}, /* ✶ */ +{2090723004, (unsigned char*)"\321\210", 0, 0}, /* ш */ +{2090724403, (unsigned char*)"\342\211\203", 1562, 0}, /* ≃ */ +{2090724405, (unsigned char*)"\342\252\236", 1563, 1565}, /* ⪞ */ +{2090724410, (unsigned char*)"\342\252\235", 0, 0}, /* ⪝ */ +{2090728626, (unsigned char*)"\342\210\243", 1564, 1568}, /* ∣ */ +{2090728990, (unsigned char*)"\342\252\254", 0, 0}, /* ⪬ */ +{2090730901, (unsigned char*)"\342\247\204", 1567, 1569}, /* ⧄ */ +{2090731037, (unsigned char*)"\360\235\225\244", 0, 0}, /* 𝕤 */ +{2090731643, (unsigned char*)"\342\210\245", 1566, 1574}, /* ∥ */ +{2090733380, (unsigned char*)"\342\226\252", 0, 0}, /* ▪ */ +{2090734976, (unsigned char*)"\360\235\223\210", 1571, 1573}, /* 𝓈 */ +{2090735999, (unsigned char*)"\342\230\206", 0, 0}, /* ☆ */ +{2090737076, (unsigned char*)"\342\253\205", 1572, 1576}, /* ⫅ */ +{2090737108, (unsigned char*)"\342\212\206", 0, 0}, /* ⊆ */ +{2090737139, (unsigned char*)"\342\211\273", 1575, 1577}, /* ≻ */ +{2090737506, (unsigned char*)"\342\231\252", 0, 0}, /* ♪ */ +{2090737518, (unsigned char*)"\302\271", 1570, 1586}, /* ¹ */ +{2090737519, (unsigned char*)"\302\262", 0, 0}, /* ² */ +{2090737520, (unsigned char*)"\302\263", 1579, 1581}, /* ³ */ +{2090737538, (unsigned char*)"\342\253\206", 0, 0}, /* ⫆ */ +{2090737570, (unsigned char*)"\342\212\207", 1580, 1584}, /* ⊇ */ +{2090752888, (unsigned char*)"\342\216\264", 0, 0}, /* ⎴ */ +{2090752895, (unsigned char*)"\342\207\221", 1583, 1585}, /* ⇑ */ +{2090754976, (unsigned char*)"\342\203\233", 0, 0}, /* ⃛ */ +{2090759957, (unsigned char*)"\342\245\243", 1582, 1590}, /* ⥣ */ +{2090760388, (unsigned char*)"\342\210\255", 0, 0}, /* ∭ */ +{2090766606, (unsigned char*)"\342\244\250", 1587, 1589}, /* ⤨ */ +{2090766974, (unsigned char*)"\360\235\225\245", 0, 0}, /* 𝕥 */ +{2090767068, (unsigned char*)"\342\244\251", 1588, 1592}, /* ⤩ */ +{2090770009, (unsigned char*)"\342\211\234", 0, 0}, /* ≜ */ +{2090770913, (unsigned char*)"\360\235\223\211", 1591, 1593}, /* 𝓉 */ +{2090770920, (unsigned char*)"\321\206", 0, 0}, /* ц */ +{2090787743, (unsigned char*)"\342\206\221", 1328, 1860}, /* ↑ */ +{2090788832, (unsigned char*)"\342\207\225", 0, 0}, /* ⇕ */ +{2090789360, (unsigned char*)"\342\253\250", 1595, 0}, /* ⫨ */ +{2090802911, (unsigned char*)"\360\235\225\246", 1596, 1598}, /* 𝕦 */ +{2090804102, (unsigned char*)"\317\205", 0, 0}, /* υ */ +{2090806850, (unsigned char*)"\360\235\223\212", 1597, 1601}, /* 𝓊 */ +{2090808425, (unsigned char*)"\342\226\265", 0, 0}, /* ▵ */ +{2090809352, (unsigned char*)"\303\274", 1600, 1602}, /* ü */ +{2090823680, (unsigned char*)"\342\206\225", 0, 0}, /* ↕ */ +{2090828038, (unsigned char*)"\174", 1599, 1607}, /* | */ +{2090838848, (unsigned char*)"\360\235\225\247", 0, 0}, /* 𝕧 */ +{2090842787, (unsigned char*)"\360\235\223\213", 1604, 1606}, /* 𝓋 */ +{2090874785, (unsigned char*)"\360\235\225\250", 0, 0}, /* 𝕨 */ +{2090878724, (unsigned char*)"\360\235\223\214", 1605, 1609}, /* 𝓌 */ +{2090897169, (unsigned char*)"\342\213\202", 0, 0}, /* ⋂ */ +{2090897829, (unsigned char*)"\342\213\203", 1608, 1610}, /* ⋃ */ +{2090908059, (unsigned char*)"\342\237\274", 0, 0}, /* ⟼ */ +{2090909415, (unsigned char*)"\342\213\273", 1603, 1620}, /* ⋻ */ +{2090910722, (unsigned char*)"\360\235\225\251", 0, 0}, /* 𝕩 */ +{2090914661, (unsigned char*)"\360\235\223\215", 1612, 0}, /* 𝓍 */ +{2090917981, (unsigned char*)"\342\213\201", 1613, 1615}, /* ⋁ */ +{2090931003, (unsigned char*)"\321\217", 0, 0}, /* я */ +{2090939715, (unsigned char*)"\321\227", 1614, 1618}, /* ї */ +{2090946659, (unsigned char*)"\360\235\225\252", 0, 0}, /* 𝕪 */ +{2090950598, (unsigned char*)"\360\235\223\216", 1617, 1619}, /* 𝓎 */ +{2090952783, (unsigned char*)"\321\216", 0, 0}, /* ю */ +{2090953100, (unsigned char*)"\303\277", 1616, 1624}, /* ÿ */ +{2090970598, (unsigned char*)"\305\274", 0, 0}, /* ż */ +{2090971833, (unsigned char*)"\316\266", 1621, 1623}, /* ζ */ +{2090974563, (unsigned char*)"\320\266", 0, 0}, /* ж */ +{2090982596, (unsigned char*)"\360\235\225\253", 1622, 1626}, /* 𝕫 */ +{2090986535, (unsigned char*)"\360\235\223\217", 0, 0}, /* 𝓏 */ +{2090991246, (unsigned char*)"\342\200\214", 1625, 1627}, /* ‌ */ +{2092993778, (unsigned char*)"\342\251\276\314\270", 0, 0}, /* ⩾̸ */ +{2096369037, (unsigned char*)"\302\256", 1611, 1645}, /* ® */ +{2096369038, (unsigned char*)"\342\223\210", 0, 0}, /* Ⓢ */ +{2100003394, (unsigned char*)"\342\250\220", 1629, 0}, /* ⨐ */ +{2100181273, (unsigned char*)"\342\245\220", 1630, 1632}, /* ⥐ */ +{2104021522, (unsigned char*)"\342\210\235", 0, 0}, /* ∝ */ +{2106472735, (unsigned char*)"\342\206\252", 1631, 1635}, /* ↪ */ +{2121101659, (unsigned char*)"\342\207\220", 0, 0}, /* ⇐ */ +{2122916393, (unsigned char*)"\342\207\215", 1634, 1636}, /* ⇍ */ +{2134690458, (unsigned char*)"\342\206\240", 0, 0}, /* ↠ */ +{2141591030, (unsigned char*)"\342\252\205", 1633, 1641}, /* ⪅ */ +{2144685319, (unsigned char*)"\342\201\240", 0, 0}, /* ⁠ */ +{2149491562, (unsigned char*)"\342\200\212", 1638, 1640}, /*   */ +{2149634711, (unsigned char*)"\342\211\217", 0, 0}, /* ≏ */ +{2155310621, (unsigned char*)"\342\245\230", 1639, 1643}, /* ⥘ */ +{2162788206, (unsigned char*)"\342\207\201", 0, 0}, /* ⇁ */ +{2173091356, (unsigned char*)"\342\212\250", 1642, 1644}, /* ⊨ */ +{2175295137, (unsigned char*)"\342\210\267", 0, 0}, /* ∷ */ +{2177599195, (unsigned char*)"\342\212\244", 1637, 1653}, /* ⊤ */ +{2183831452, (unsigned char*)"\342\212\264", 0, 0}, /* ⊴ */ +{2202616365, (unsigned char*)"\342\211\256", 1646, 1648}, /* ≮ */ +{2206594527, (unsigned char*)"\342\211\241\342\203\245", 0, 0}, /* ≡⃥ */ +{2224616812, (unsigned char*)"\342\206\251", 1647, 1651}, /* ↩ */ +{2226125799, (unsigned char*)"\342\207\232", 0, 0}, /* ⇚ */ +{2232084207, (unsigned char*)"\342\212\262", 1650, 1652}, /* ⊲ */ +{2234283796, (unsigned char*)"\342\252\225", 0, 0}, /* ⪕ */ +{2238028310, (unsigned char*)"\342\211\252", 1649, 1657}, /* ≪ */ +{2242588389, (unsigned char*)"\342\210\244", 0, 0}, /* ∤ */ +{2247186016, (unsigned char*)"\342\210\205", 1654, 1656}, /* ∅ */ +{2251230282, (unsigned char*)"\342\211\253\314\270", 0, 0}, /* ≫̸ */ +{2251699570, (unsigned char*)"\342\245\256", 1655, 1659}, /* ⥮ */ +{2253884103, (unsigned char*)"\342\211\245", 0, 0}, /* ≥ */ +{2267324439, (unsigned char*)"\342\200\213", 1658, 1660}, /* ​ */ +{2267952836, (unsigned char*)"\342\201\237\342\200\212", 0, 0}, /*    */ +{2268217074, (unsigned char*)"\342\212\236", 1628, 1694}, /* ⊞ */ +{2271375713, (unsigned char*)"\342\211\263", 0, 0}, /* ≳ */ +{2273834870, (unsigned char*)"\342\226\270", 1662, 0}, /* ▸ */ +{2284095252, (unsigned char*)"\342\252\212", 1663, 1665}, /* ⪊ */ +{2293000194, (unsigned char*)"\342\250\264", 0, 0}, /* ⨴ */ +{2299342640, (unsigned char*)"\342\252\213", 1664, 1668}, /* ⪋ */ +{2299973113, (unsigned char*)"\342\227\212", 0, 0}, /* ◊ */ +{2311432548, (unsigned char*)"\342\204\254", 1667, 1669}, /* ℬ */ +{2313488869, (unsigned char*)"\342\210\205", 0, 0}, /* ∅ */ +{2318267363, (unsigned char*)"\342\212\233", 1666, 1674}, /* ⊛ */ +{2324068560, (unsigned char*)"\342\211\272", 0, 0}, /* ≺ */ +{2329784168, (unsigned char*)"\342\206\230", 1671, 1673}, /* ↘ */ +{2345835453, (unsigned char*)"\342\213\214", 0, 0}, /* ⋌ */ +{2347178782, (unsigned char*)"\342\212\231", 1672, 1676}, /* ⊙ */ +{2349785324, (unsigned char*)"\342\212\202\342\203\222", 0, 0}, /* ⊂⃒ */ +{2350516007, (unsigned char*)"\342\237\210", 1675, 1677}, /* ⟈ */ +{2351825126, (unsigned char*)"\342\204\244", 0, 0}, /* ℤ */ +{2352217687, (unsigned char*)"\342\212\272", 1670, 1686}, /* ⊺ */ +{2359924770, (unsigned char*)"\342\250\227", 0, 0}, /* ⨗ */ +{2361282137, (unsigned char*)"\342\245\234", 1679, 1681}, /* ⥜ */ +{2369427406, (unsigned char*)"\342\210\235", 0, 0}, /* ∝ */ +{2373010998, (unsigned char*)"\342\210\202", 1680, 1684}, /* ∂ */ +{2373147889, (unsigned char*)"\342\212\265", 0, 0}, /* ⊵ */ +{2391645795, (unsigned char*)"\342\245\227", 1683, 1685}, /* ⥗ */ +{2404639391, (unsigned char*)"\342\216\265", 0, 0}, /* ⎵ */ +{2408379192, (unsigned char*)"\342\226\264", 1682, 1690}, /* ▴ */ +{2411113092, (unsigned char*)"\342\207\206", 0, 0}, /* ⇆ */ +{2417128742, (unsigned char*)"\342\214\236", 1687, 1689}, /* ⌞ */ +{2424328170, (unsigned char*)"\342\210\262", 0, 0}, /* ∲ */ +{2424932121, (unsigned char*)"\342\210\201", 1688, 1692}, /* ∁ */ +{2440126227, (unsigned char*)"\342\207\212", 0, 0}, /* ⇊ */ +{2444718873, (unsigned char*)"\342\252\257\314\270", 1691, 1693}, /* ⪯̸ */ +{2464644935, (unsigned char*)"\174", 0, 0}, /* | */ +{2485542391, (unsigned char*)"\342\251\273", 1678, 1711}, /* ⩻ */ +{2500478578, (unsigned char*)"\342\250\244", 0, 0}, /* ⨤ */ +{2500538373, (unsigned char*)"\342\245\262", 1695, 0}, /* ⥲ */ +{2506612921, (unsigned char*)"\342\245\236", 1696, 1698}, /* ⥞ */ +{2511579913, (unsigned char*)"\342\210\264", 0, 0}, /* ∴ */ +{2515928295, (unsigned char*)"\342\207\216", 1697, 1701}, /* ⇎ */ +{2519197257, (unsigned char*)"\342\251\275", 0, 0}, /* ⩽ */ +{2525866376, (unsigned char*)"\342\245\246", 1700, 1702}, /* ⥦ */ +{2534948013, (unsigned char*)"\342\207\210", 0, 0}, /* ⇈ */ +{2545332556, (unsigned char*)"\317\225", 1699, 1707}, /* ϕ */ +{2553787136, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{2562550693, (unsigned char*)"\313\231", 1704, 1706}, /* ˙ */ +{2579807761, (unsigned char*)"\342\252\203", 0, 0}, /* ⪃ */ +{2588013225, (unsigned char*)"\342\212\211", 1705, 1709}, /* ⊉ */ +{2609063628, (unsigned char*)"\342\245\235", 0, 0}, /* ⥝ */ +{2611001758, (unsigned char*)"\342\227\273", 1708, 1710}, /* ◻ */ +{2620259063, (unsigned char*)"\342\206\235", 0, 0}, /* ↝ */ +{2632990613, (unsigned char*)"\342\206\221", 1703, 1719}, /* ↑ */ +{2660027883, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{2660229243, (unsigned char*)"\317\260", 1712, 1714}, /* ϰ */ +{2662435928, (unsigned char*)"\342\210\220", 0, 0}, /* ∐ */ +{2663146703, (unsigned char*)"\342\212\265", 1713, 1717}, /* ⊵ */ +{2669994207, (unsigned char*)"\317\202", 0, 0}, /* ς */ +{2670940085, (unsigned char*)"\342\207\221", 1716, 1718}, /* ⇑ */ +{2671142244, (unsigned char*)"\317\221", 0, 0}, /* ϑ */ +{2674685509, (unsigned char*)"\342\250\274", 1715, 1723}, /* ⨼ */ +{2675200879, (unsigned char*)"\342\213\224", 0, 0}, /* ⋔ */ +{2691956687, (unsigned char*)"\316\245", 1720, 1722}, /* Υ */ +{2696040064, (unsigned char*)"\342\207\233", 0, 0}, /* ⇛ */ +{2728247170, (unsigned char*)"\342\210\241", 1721, 1725}, /* ∡ */ +{2732053530, (unsigned char*)"\342\206\227", 0, 0}, /* ↗ */ +{2740164327, (unsigned char*)"\342\246\232", 1724, 1726}, /* ⦚ */ +{2746073991, (unsigned char*)"\342\206\236", 0, 0}, /* ↞ */ +{2751264705, (unsigned char*)"\342\247\216", 1661, 1794}, /* ⧎ */ +{2767333056, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{2770565886, (unsigned char*)"\342\200\261", 1728, 0}, /* ‱ */ +{2794580248, (unsigned char*)"\303\201", 1729, 1731}, /* Á */ +{2796287866, (unsigned char*)"\304\202", 0, 0}, /* Ă */ +{2801569040, (unsigned char*)"\342\226\276", 1730, 1734}, /* ▾ */ +{2801845091, (unsigned char*)"\342\227\202", 0, 0}, /* ◂ */ +{2802213115, (unsigned char*)"\303\200", 1733, 1735}, /* À */ +{2803305762, (unsigned char*)"\342\211\216\314\270", 0, 0}, /* ≎̸ */ +{2805781853, (unsigned char*)"\342\252\260\314\270", 1732, 1740}, /* ⪰̸ */ +{2811624442, (unsigned char*)"\342\213\243", 0, 0}, /* ⋣ */ +{2816488330, (unsigned char*)"\342\211\224", 1737, 1739}, /* ≔ */ +{2817318040, (unsigned char*)"\303\203", 0, 0}, /* à */ +{2823273463, (unsigned char*)"\342\211\277\314\270", 1738, 1742}, /* ≿̸ */ +{2834256378, (unsigned char*)"\342\214\206", 0, 0}, /* ⌆ */ +{2838562217, (unsigned char*)"\342\237\267", 1741, 1743}, /* ⟷ */ +{2840133630, (unsigned char*)"\342\213\233", 0, 0}, /* ⋛ */ +{2854475369, (unsigned char*)"\342\217\235", 1736, 1753}, /* ⏝ */ +{2857230239, (unsigned char*)"\342\213\265", 0, 0}, /* ⋵ */ +{2857787503, (unsigned char*)"\342\211\216", 1745, 0}, /* ≎ */ +{2872851034, (unsigned char*)"\304\206", 1746, 1748}, /* Ć */ +{2873382571, (unsigned char*)"\342\214\210", 0, 0}, /* ⌈ */ +{2875147579, (unsigned char*)"\304\214", 1747, 1751}, /* Č */ +{2875275881, (unsigned char*)"\303\207", 0, 0}, /* Ç */ +{2887710822, (unsigned char*)"\342\212\262", 1750, 1752}, /* ⊲ */ +{2889352517, (unsigned char*)"\342\206\221", 0, 0}, /* ↑ */ +{2889770629, (unsigned char*)"\342\251\264", 1749, 1757}, /* ⩴ */ +{2889835984, (unsigned char*)"\342\210\257", 0, 0}, /* ∯ */ +{2889899413, (unsigned char*)"\342\214\235", 1754, 1756}, /* ⌝ */ +{2892217516, (unsigned char*)"\342\247\217\314\270", 0, 0}, /* ⧏̸ */ +{2893603679, (unsigned char*)"\342\212\217", 1755, 1759}, /* ⊏ */ +{2894106797, (unsigned char*)"\342\212\220", 0, 0}, /* ⊐ */ +{2896981569, (unsigned char*)"\342\211\215", 1758, 1760}, /* ≍ */ +{2910059108, (unsigned char*)"\342\211\252\314\270", 0, 0}, /* ≪̸ */ +{2912114447, (unsigned char*)"\342\200\241", 1744, 1778}, /* ‡ */ +{2914282972, (unsigned char*)"\304\216", 0, 0}, /* Ď */ +{2923381909, (unsigned char*)"\342\212\221", 1762, 0}, /* ⊑ */ +{2924434811, (unsigned char*)"\342\204\213", 1763, 1765}, /* ℋ */ +{2929146739, (unsigned char*)"\342\203\234", 0, 0}, /* ⃜ */ +{2930550066, (unsigned char*)"\342\204\263", 1764, 1768}, /* ℳ */ +{2933637451, (unsigned char*)"\342\237\265", 0, 0}, /* ⟵ */ +{2933940508, (unsigned char*)"\304\220", 1767, 1769}, /* Đ */ +{2943764038, (unsigned char*)"\342\207\235", 0, 0}, /* ⇝ */ +{2947490510, (unsigned char*)"\342\206\222", 1766, 1774}, /* → */ +{2951121820, (unsigned char*)"\303\211", 0, 0}, /* É */ +{2953153798, (unsigned char*)"\342\204\214", 1771, 1773}, /* ℌ */ +{2953201221, (unsigned char*)"\342\214\213", 0, 0}, /* ⌋ */ +{2953418365, (unsigned char*)"\304\232", 1772, 1776}, /* Ě */ +{2956653947, (unsigned char*)"\342\253\203", 0, 0}, /* ⫃ */ +{2956959857, (unsigned char*)"\342\253\201", 1775, 1777}, /* ⫁ */ +{2957058163, (unsigned char*)"\342\252\277", 0, 0}, /* ⪿ */ +{2957117958, (unsigned char*)"\342\245\271", 1770, 1786}, /* ⥹ */ +{2957784124, (unsigned char*)"\342\211\277", 0, 0}, /* ≿ */ +{2958754687, (unsigned char*)"\303\210", 1779, 1781}, /* È */ +{2973237419, (unsigned char*)"\342\253\230", 0, 0}, /* ⫘ */ +{2973256841, (unsigned char*)"\342\253\204", 1780, 1784}, /* ⫄ */ +{2973380979, (unsigned char*)"\342\237\211", 0, 0}, /* ⟉ */ +{2973381167, (unsigned char*)"\342\253\227", 1783, 1785}, /* ⫗ */ +{2973505230, (unsigned char*)"\342\245\273", 0, 0}, /* ⥻ */ +{2973562751, (unsigned char*)"\342\253\202", 1782, 1790}, /* ⫂ */ +{2973614978, (unsigned char*)"\342\211\205", 0, 0}, /* ≅ */ +{2973661057, (unsigned char*)"\342\253\200", 1787, 1789}, /* ⫀ */ +{2976327332, (unsigned char*)"\342\211\220", 0, 0}, /* ≐ */ +{2978611461, (unsigned char*)"\342\210\203", 1788, 1792}, /* ∃ */ +{2981502511, (unsigned char*)"\342\210\245", 0, 0}, /* ∥ */ +{2985439982, (unsigned char*)"\342\207\222", 1791, 1793}, /* ⇒ */ +{3007342277, (unsigned char*)"\342\210\200", 0, 0}, /* ∀ */ +{3007934280, (unsigned char*)"\342\206\223", 1761, 1827}, /* ↓ */ +{3008020769, (unsigned char*)"\342\212\242", 0, 0}, /* ⊢ */ +{3024135078, (unsigned char*)"\342\204\216", 1795, 0}, /* ℎ */ +{3027472336, (unsigned char*)"\342\234\240", 1796, 1798}, /* ✠ */ +{3029742636, (unsigned char*)"\317\234", 0, 0}, /* Ϝ */ +{3029913696, (unsigned char*)"\320\252", 1797, 1801}, /* Ъ */ +{3031100224, (unsigned char*)"\304\236", 0, 0}, /* Ğ */ +{3031817453, (unsigned char*)"\304\242", 1800, 1802}, /* Ģ */ +{3034221242, (unsigned char*)"\342\206\231", 0, 0}, /* ↙ */ +{3045326204, (unsigned char*)"\342\207\217", 1799, 1807}, /* ⇏ */ +{3048033127, (unsigned char*)"\342\250\242", 0, 0}, /* ⨢ */ +{3048050546, (unsigned char*)"\342\250\246", 1804, 1806}, /* ⨦ */ +{3048052099, (unsigned char*)"\342\250\247", 0, 0}, /* ⨧ */ +{3064281545, (unsigned char*)"\342\244\245", 1805, 1809}, /* ⤥ */ +{3073629027, (unsigned char*)"\342\207\223", 0, 0}, /* ⇓ */ +{3077837606, (unsigned char*)"\342\237\270", 1808, 1810}, /* ⟸ */ +{3084161209, (unsigned char*)"\342\206\244", 0, 0}, /* ↤ */ +{3084170846, (unsigned char*)"\342\231\245", 1803, 1819}, /* ♥ */ +{3085628123, (unsigned char*)"\342\244\246", 0, 0}, /* ⤦ */ +{3086510115, (unsigned char*)"\342\251\220", 1812, 1814}, /* ⩐ */ +{3086788136, (unsigned char*)"\342\210\263", 0, 0}, /* ∳ */ +{3090482080, (unsigned char*)"\304\246", 1813, 1817}, /* Ħ */ +{3096943633, (unsigned char*)"\342\212\206", 0, 0}, /* ⊆ */ +{3101951024, (unsigned char*)"\317\266", 1816, 1818}, /* ϶ */ +{3103676813, (unsigned char*)"\342\207\225", 0, 0}, /* ⇕ */ +{3107663392, (unsigned char*)"\303\215", 1815, 1823}, /* Í */ +{3115296259, (unsigned char*)"\303\214", 0, 0}, /* Ì */ +{3117411784, (unsigned char*)"\342\252\266", 1820, 1822}, /* ⪶ */ +{3117426762, (unsigned char*)"\342\213\251", 0, 0}, /* ⋩ */ +{3120384638, (unsigned char*)"\342\206\222", 1821, 1825}, /* → */ +{3130401184, (unsigned char*)"\304\250", 0, 0}, /* Ĩ */ +{3137855215, (unsigned char*)"\342\244\221", 1824, 1826}, /* ⤑ */ +{3148816789, (unsigned char*)"\342\211\212", 0, 0}, /* ≊ */ +{3155294829, (unsigned char*)"\342\246\262", 1811, 1844}, /* ⦲ */ +{3156326686, (unsigned char*)"\342\237\271", 0, 0}, /* ⟹ */ +{3168213429, (unsigned char*)"\320\210", 1828, 0}, /* Ј */ +{3179945584, (unsigned char*)"\302\264", 1829, 1831}, /* ´ */ +{3187260351, (unsigned char*)"\342\213\241", 0, 0}, /* ⋡ */ +{3187578451, (unsigned char*)"\140", 1830, 1834}, /* ` */ +{3188359025, (unsigned char*)"\304\266", 0, 0}, /* Ķ */ +{3191313194, (unsigned char*)"\342\252\226", 1833, 1835}, /* ⪖ */ +{3192524471, (unsigned char*)"\342\231\240", 0, 0}, /* ♠ */ +{3193312110, (unsigned char*)"\342\207\202", 1832, 1840}, /* ⇂ */ +{3198287636, (unsigned char*)"\342\210\243", 0, 0}, /* ∣ */ +{3202656041, (unsigned char*)"\342\252\267", 1837, 1839}, /* ⪷ */ +{3202683376, (unsigned char*)"\313\234", 0, 0}, /* ˜ */ +{3204939972, (unsigned char*)"\342\200\211", 1838, 1842}, /*   */ +{3205018733, (unsigned char*)"\342\252\242\314\270", 0, 0}, /* ⪢̸ */ +{3225069571, (unsigned char*)"\304\271", 1841, 1843}, /* Ĺ */ +{3225407718, (unsigned char*)"\316\233", 0, 0}, /* Λ */ +{3227366116, (unsigned char*)"\304\275", 1836, 1852}, /* Ľ */ +{3227494418, (unsigned char*)"\304\273", 0, 0}, /* Ļ */ +{3231328636, (unsigned char*)"\342\211\253", 1845, 1847}, /* ≫ */ +{3236753791, (unsigned char*)"\302\240", 0, 0}, /*   */ +{3238091406, (unsigned char*)"\342\245\257", 1846, 1850}, /* ⥯ */ +{3239497582, (unsigned char*)"\304\277", 0, 0}, /* Ŀ */ +{3241890386, (unsigned char*)"\342\212\216", 1849, 1851}, /* ⊎ */ +{3247023652, (unsigned char*)"\305\201", 0, 0}, /* Ł */ +{3259708759, (unsigned char*)"\342\211\270", 1848, 1856}, /* ≸ */ +{3263313176, (unsigned char*)"\342\211\276", 0, 0}, /* ≾ */ +{3269638327, (unsigned char*)"\342\201\243", 1853, 1855}, /* ⁣ */ +{3273188409, (unsigned char*)"\342\213\207", 0, 0}, /* ⋇ */ +{3273823876, (unsigned char*)"\342\206\231", 1854, 1858}, /* ↙ */ +{3274947156, (unsigned char*)"\317\221", 0, 0}, /* ϑ */ +{3278912800, (unsigned char*)"\342\210\211", 1857, 1859}, /* ∉ */ +{3289583116, (unsigned char*)"\342\201\242", 0, 0}, /* ⁢ */ +{3303295621, (unsigned char*)"\342\226\252", 1727, 1993}, /* ▪ */ +{3303340357, (unsigned char*)"\305\203", 0, 0}, /* Ń */ +{3305636902, (unsigned char*)"\305\207", 1861, 0}, /* Ň */ +{3305765204, (unsigned char*)"\305\205", 1862, 1864}, /* Ņ */ +{3312164768, (unsigned char*)"\342\206\266", 0, 0}, /* ↶ */ +{3317854772, (unsigned char*)"\342\247\202", 1863, 1867}, /* ⧂ */ +{3321988818, (unsigned char*)"\342\211\222", 0, 0}, /* ≒ */ +{3326078149, (unsigned char*)"\303\221", 1866, 1868}, /* Ñ */ +{3330297295, (unsigned char*)"\342\210\210", 0, 0}, /* ∈ */ +{3335130386, (unsigned char*)"\342\207\201", 1865, 1873}, /* ⇁ */ +{3342475750, (unsigned char*)"\303\223", 0, 0}, /* Ó */ +{3342978026, (unsigned char*)"\342\250\252", 1870, 1872}, /* ⨪ */ +{3345463188, (unsigned char*)"\342\200\230", 0, 0}, /* ‘ */ +{3345987146, (unsigned char*)"\305\220", 1871, 1875}, /* Ő */ +{3347296147, (unsigned char*)"\342\247\245", 0, 0}, /* ⧥ */ +{3350108617, (unsigned char*)"\303\222", 1874, 1876}, /* Ò */ +{3364123951, (unsigned char*)"\303\230", 0, 0}, /* Ø */ +{3365213542, (unsigned char*)"\303\225", 1869, 1886}, /* Õ */ +{3365214678, (unsigned char*)"\342\250\267", 0, 0}, /* ⨷ */ +{3366920273, (unsigned char*)"\342\212\220", 1878, 0}, /* ⊐ */ +{3382145070, (unsigned char*)"\342\247\220", 1879, 1881}, /* ⧐ */ +{3397226602, (unsigned char*)"\342\250\266", 0, 0}, /* ⨶ */ +{3403608988, (unsigned char*)"\316\237", 1880, 1884}, /* Ο */ +{3407806007, (unsigned char*)"\342\211\271", 0, 0}, /* ≹ */ +{3410539801, (unsigned char*)"\342\212\263", 1883, 1885}, /* ⊳ */ +{3411686913, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{3414892194, (unsigned char*)"\342\253\205", 1882, 1890}, /* ⫅ */ +{3414901599, (unsigned char*)"\342\212\212", 0, 0}, /* ⊊ */ +{3416706928, (unsigned char*)"\342\253\205\314\270", 1887, 1889}, /* ⫅̸ */ +{3428742722, (unsigned char*)"\342\206\255", 0, 0}, /* ↭ */ +{3430824453, (unsigned char*)"\342\212\201", 1888, 1892}, /* ⊁ */ +{3437629897, (unsigned char*)"\342\210\262", 0, 0}, /* ∲ */ +{3439187707, (unsigned char*)"\342\226\265", 1891, 1893}, /* ▵ */ +{3446439536, (unsigned char*)"\342\210\230", 0, 0}, /* ∘ */ +{3453247008, (unsigned char*)"\342\250\272", 1877, 1911}, /* ⨺ */ +{3458661549, (unsigned char*)"\302\267", 0, 0}, /* · */ +{3459881929, (unsigned char*)"\305\224", 1895, 0}, /* Ŕ */ +{3460417724, (unsigned char*)"\342\244\226", 1896, 1898}, /* ⤖ */ +{3462178474, (unsigned char*)"\305\230", 0, 0}, /* Ř */ +{3462306776, (unsigned char*)"\305\226", 1897, 1901}, /* Ŗ */ +{3468169767, (unsigned char*)"\320\251", 0, 0}, /* Щ */ +{3471277411, (unsigned char*)"\342\212\222", 1900, 1902}, /* ⊒ */ +{3474127421, (unsigned char*)"\342\210\265", 0, 0}, /* ∵ */ +{3476592093, (unsigned char*)"\320\254", 1899, 1907}, /* Ь */ +{3479304637, (unsigned char*)"\342\246\263", 0, 0}, /* ⦳ */ +{3482255238, (unsigned char*)"\342\231\246", 1904, 1906}, /* ♦ */ +{3484391873, (unsigned char*)"\342\251\255\314\270", 0, 0}, /* ⩭̸ */ +{3487531781, (unsigned char*)"\317\265", 1905, 1909}, /* ϵ */ +{3488439964, (unsigned char*)"\342\212\232", 0, 0}, /* ⊚ */ +{3488467227, (unsigned char*)"\342\212\235", 1908, 1910}, /* ⊝ */ +{3499017322, (unsigned char*)"\305\232", 0, 0}, /* Ś */ +{3501313867, (unsigned char*)"\305\240", 1903, 1919}, /* Š */ +{3501442169, (unsigned char*)"\305\236", 0, 0}, /* Ş */ +{3503305663, (unsigned char*)"\316\225", 1912, 1914}, /* Ε */ +{3508109390, (unsigned char*)"\342\212\243", 0, 0}, /* ⊣ */ +{3508279559, (unsigned char*)"\342\206\226", 1913, 1917}, /* ↖ */ +{3518617078, (unsigned char*)"\342\226\241", 0, 0}, /* □ */ +{3522697147, (unsigned char*)"\342\213\220", 1916, 1918}, /* ⋐ */ +{3523200265, (unsigned char*)"\342\213\221", 0, 0}, /* ⋑ */ +{3529302376, (unsigned char*)"\342\206\277", 1915, 1923}, /* ↿ */ +{3539978494, (unsigned char*)"\342\214\211", 0, 0}, /* ⌉ */ +{3540449260, (unsigned char*)"\305\244", 1920, 1922}, /* Ť */ +{3540577562, (unsigned char*)"\305\242", 0, 0}, /* Ţ */ +{3545419702, (unsigned char*)"\342\211\224", 1921, 1925}, /* ≔ */ +{3547493491, (unsigned char*)"\342\251\255", 0, 0}, /* ⩭ */ +{3560106796, (unsigned char*)"\305\246", 1924, 1926}, /* Ŧ */ +{3563635584, (unsigned char*)"\342\213\217", 0, 0}, /* ⋏ */ +{3577288108, (unsigned char*)"\303\232", 1894, 1960}, /* Ú */ +{3577346291, (unsigned char*)"\342\200\265", 0, 0}, /* ‵ */ +{3578995726, (unsigned char*)"\305\254", 1928, 0}, /* Ŭ */ +{3580584725, (unsigned char*)"\342\213\215", 1929, 1931}, /* ⋍ */ +{3580799504, (unsigned char*)"\305\260", 0, 0}, /* Ű */ +{3583798838, (unsigned char*)"\342\207\200", 1930, 1934}, /* ⇀ */ +{3584920975, (unsigned char*)"\303\231", 0, 0}, /* Ù */ +{3584950583, (unsigned char*)"\342\206\230", 1933, 1935}, /* ↘ */ +{3600025900, (unsigned char*)"\305\250", 0, 0}, /* Ũ */ +{3606990188, (unsigned char*)"\342\206\246", 1932, 1940}, /* ↦ */ +{3613167752, (unsigned char*)"\317\265", 0, 0}, /* ϵ */ +{3619906823, (unsigned char*)"\342\253\246", 1937, 1939}, /* ⫦ */ +{3621684935, (unsigned char*)"\342\200\226", 0, 0}, /* ‖ */ +{3628923373, (unsigned char*)"\342\206\272", 1938, 1942}, /* ↺ */ +{3641341969, (unsigned char*)"\342\212\252", 0, 0}, /* ⊪ */ +{3643238749, (unsigned char*)"\342\212\241", 1941, 1943}, /* ⊡ */ +{3644839135, (unsigned char*)"\342\212\207", 0, 0}, /* ⊇ */ +{3654203690, (unsigned char*)"\342\244\222", 1936, 1952}, /* ⤒ */ +{3664458826, (unsigned char*)"\342\211\274", 0, 0}, /* ≼ */ +{3667688423, (unsigned char*)"\342\237\246", 1945, 1947}, /* ⟦ */ +{3696172421, (unsigned char*)"\342\206\242", 0, 0}, /* ↢ */ +{3698472568, (unsigned char*)"\342\207\213", 1946, 1950}, /* ⇋ */ +{3702896903, (unsigned char*)"\342\217\234", 0, 0}, /* ⏜ */ +{3717462854, (unsigned char*)"\342\237\251", 1949, 1951}, /* ⟩ */ +{3718268991, (unsigned char*)"\342\207\200", 0, 0}, /* ⇀ */ +{3718312869, (unsigned char*)"\342\217\242", 1948, 1956}, /* ⏢ */ +{3727177825, (unsigned char*)"\342\211\223", 0, 0}, /* ≓ */ +{3731026191, (unsigned char*)"\342\214\234", 1953, 1955}, /* ⌜ */ +{3732195663, (unsigned char*)"\342\211\202", 0, 0}, /* ≂ */ +{3733829680, (unsigned char*)"\303\235", 1954, 1958}, /* Ý */ +{3751570166, (unsigned char*)"\342\200\276", 0, 0}, /* ‾ */ +{3766854489, (unsigned char*)"\342\207\224", 1957, 1959}, /* ⇔ */ +{3770246354, (unsigned char*)"\342\244\270", 0, 0}, /* ⤸ */ +{3770246360, (unsigned char*)"\342\244\265", 1944, 1977}, /* ⤵ */ +{3772965073, (unsigned char*)"\305\271", 0, 0}, /* Ź */ +{3775261618, (unsigned char*)"\305\275", 1961, 0}, /* Ž */ +{3779733726, (unsigned char*)"\342\244\275", 1962, 1964}, /* ⤽ */ +{3786849249, (unsigned char*)"\342\244\274", 0, 0}, /* ⤼ */ +{3797614400, (unsigned char*)"\342\206\273", 1963, 1967}, /* ↻ */ +{3798368927, (unsigned char*)"\342\206\276", 0, 0}, /* ↾ */ +{3798964609, (unsigned char*)"\342\245\232", 1966, 1968}, /* ⥚ */ +{3803595193, (unsigned char*)"\342\207\207", 0, 0}, /* ⇇ */ +{3819113224, (unsigned char*)"\342\252\257", 1965, 1973}, /* ⪯ */ +{3824989387, (unsigned char*)"\342\211\242", 0, 0}, /* ≢ */ +{3828603062, (unsigned char*)"\342\210\226", 1970, 1972}, /* ∖ */ +{3836604834, (unsigned char*)"\342\211\276", 0, 0}, /* ≾ */ +{3844621319, (unsigned char*)"\342\253\214\357\270\200", 1971, 1975}, /* ⫌︀ */ +{3865887113, (unsigned char*)"\342\237\272", 0, 0}, /* ⟺ */ +{3872451732, (unsigned char*)"\342\245\233", 1974, 1976}, /* ⥛ */ +{3881458486, (unsigned char*)"\342\205\206", 0, 0}, /* ⅆ */ +{3895490466, (unsigned char*)"\342\213\255", 1969, 1985}, /* ⋭ */ +{3896257183, (unsigned char*)"\342\247\220\314\270", 0, 0}, /* ⧐̸ */ +{3936475985, (unsigned char*)"\342\201\241", 1978, 1980}, /* ⁡ */ +{3938183814, (unsigned char*)"\342\245\240", 0, 0}, /* ⥠ */ +{3942438865, (unsigned char*)"\342\212\203\342\203\222", 1979, 1983}, /* ⊃⃒ */ +{3948129594, (unsigned char*)"\342\211\241", 0, 0}, /* ≡ */ +{3958994798, (unsigned char*)"\342\211\240", 1982, 1984}, /* ≠ */ +{3962407576, (unsigned char*)"\342\212\207", 0, 0}, /* ⊇ */ +{3963371935, (unsigned char*)"\342\212\224", 1981, 1989}, /* ⊔ */ +{3963536128, (unsigned char*)"\342\211\202\314\270", 0, 0}, /* ≂̸ */ +{3976486408, (unsigned char*)"\342\211\201", 1986, 1988}, /* ≁ */ +{3995834959, (unsigned char*)"\342\210\243", 0, 0}, /* ∣ */ +{4000119657, (unsigned char*)"\342\237\274", 1987, 1991}, /* ⟼ */ +{4020352870, (unsigned char*)"\342\206\247", 0, 0}, /* ↧ */ +{4029960458, (unsigned char*)"\342\253\232", 1990, 1992}, /* ⫚ */ +{4032878074, (unsigned char*)"\342\252\202", 0, 0}, /* ⪂ */ +{4033356785, (unsigned char*)"\342\211\200", 1927, 2059}, /* ≀ */ +{4046912824, (unsigned char*)"\303\241", 0, 0}, /* á */ +{4048620442, (unsigned char*)"\304\203", 1994, 0}, /* ă */ +{4052131355, (unsigned char*)"\342\206\276", 1995, 1997}, /* ↾ */ +{4054545691, (unsigned char*)"\303\240", 0, 0}, /* à */ +{4055647832, (unsigned char*)"\137", 1996, 2000}, /* _ */ +{4062343755, (unsigned char*)"\342\251\225", 0, 0}, /* ⩕ */ +{4062464799, (unsigned char*)"\342\210\241", 1999, 2001}, /* ∡ */ +{4062471238, (unsigned char*)"\342\210\242", 0, 0}, /* ∢ */ +{4064609813, (unsigned char*)"\342\251\257", 1998, 2006}, /* ⩯ */ +{4065165407, (unsigned char*)"\342\211\210", 0, 0}, /* ≈ */ +{4067561536, (unsigned char*)"\342\210\257", 2003, 2005}, /* ∯ */ +{4069650616, (unsigned char*)"\303\243", 0, 0}, /* ã */ +{4086587866, (unsigned char*)"\342\212\275", 2004, 2008}, /* ⊽ */ +{4086588954, (unsigned char*)"\342\214\205", 0, 0}, /* ⌅ */ +{4090770168, (unsigned char*)"\342\210\265", 2007, 2009}, /* ∵ */ +{4091323184, (unsigned char*)"\342\204\254", 0, 0}, /* ℬ */ +{4093437092, (unsigned char*)"\342\212\210", 2002, 2018}, /* ⊈ */ +{4095659115, (unsigned char*)"\342\213\202", 0, 0}, /* ⋂ */ +{4095659775, (unsigned char*)"\342\213\203", 2011, 2013}, /* ⋃ */ +{4095679927, (unsigned char*)"\342\213\201", 0, 0}, /* ⋁ */ +{4097832139, (unsigned char*)"\342\244\215", 2012, 2016}, /* ⤍ */ +{4101362008, (unsigned char*)"\342\211\275", 0, 0}, /* ≽ */ +{4103260794, (unsigned char*)"\342\212\245", 2015, 2017}, /* ⊥ */ +{4103368399, (unsigned char*)"\342\213\210", 0, 0}, /* ⋈ */ +{4103384951, (unsigned char*)"\342\247\211", 2014, 2022}, /* ⧉ */ +{4104332831, (unsigned char*)"\342\213\232", 0, 0}, /* ⋚ */ +{4104362788, (unsigned char*)"\342\200\265", 2019, 2021}, /* ‵ */ +{4106870372, (unsigned char*)"\302\246", 0, 0}, /* ¦ */ +{4108102937, (unsigned char*)"\342\226\271", 2020, 2024}, /* ▹ */ +{4110079789, (unsigned char*)"\342\200\242", 0, 0}, /* • */ +{4110120079, (unsigned char*)"\342\211\217", 2023, 2025}, /* ≏ */ +{4113926953, (unsigned char*)"\342\212\222", 0, 0}, /* ⊒ */ +{4125183610, (unsigned char*)"\304\207", 2010, 2043}, /* ć */ +{4125628812, (unsigned char*)"\342\251\204", 0, 0}, /* ⩄ */ +{4125630573, (unsigned char*)"\342\251\213", 2027, 0}, /* ⩋ */ +{4125631233, (unsigned char*)"\342\251\207", 2028, 2030}, /* ⩇ */ +{4125632128, (unsigned char*)"\342\251\200", 0, 0}, /* ⩀ */ +{4127480155, (unsigned char*)"\304\215", 2029, 2033}, /* č */ +{4127608457, (unsigned char*)"\303\247", 0, 0}, /* ç */ +{4127654983, (unsigned char*)"\342\252\241\314\270", 2032, 2034}, /* ⪡̸ */ +{4133749028, (unsigned char*)"\342\207\204", 0, 0}, /* ⇄ */ +{4135189948, (unsigned char*)"\342\211\227", 2031, 2039}, /* ≗ */ +{4135200957, (unsigned char*)"\342\253\257", 0, 0}, /* ⫯ */ +{4139421400, (unsigned char*)"\342\250\271", 2036, 2038}, /* ⨹ */ +{4139561603, (unsigned char*)"\342\250\273", 0, 0}, /* ⨻ */ +{4142103205, (unsigned char*)"\342\211\224", 2037, 2041}, /* ≔ */ +{4142136550, (unsigned char*)"\100", 0, 0}, /* @ */ +{4142139976, (unsigned char*)"\342\210\230", 2040, 2042}, /* ∘ */ +{4142168560, (unsigned char*)"\342\210\256", 0, 0}, /* ∮ */ +{4142250252, (unsigned char*)"\342\210\220", 2035, 2051}, /* ∐ */ +{4142258021, (unsigned char*)"\342\204\227", 0, 0}, /* ℗ */ +{4149203630, (unsigned char*)"\342\206\266", 2044, 2046}, /* ↶ */ +{4149348993, (unsigned char*)"\342\251\206", 0, 0}, /* ⩆ */ +{4149349653, (unsigned char*)"\342\251\212", 2045, 2049}, /* ⩊ */ +{4149350548, (unsigned char*)"\342\212\215", 0, 0}, /* ⊍ */ +{4149419252, (unsigned char*)"\342\206\267", 2048, 2050}, /* ↷ */ +{4149437332, (unsigned char*)"\302\244", 0, 0}, /* ¤ */ +{4153949565, (unsigned char*)"\342\214\255", 2047, 2055}, /* ⌭ */ +{4164447023, (unsigned char*)"\342\200\240", 0, 0}, /* † */ +{4164625015, (unsigned char*)"\342\204\270", 2052, 2054}, /* ℸ */ +{4166615548, (unsigned char*)"\304\217", 0, 0}, /* ď */ +{4168585154, (unsigned char*)"\342\210\245", 2053, 2057}, /* ∥ */ +{4170461671, (unsigned char*)"\342\245\277", 0, 0}, /* ⥿ */ +{4174475578, (unsigned char*)"\303\267", 2056, 2058}, /* ÷ */ +{4174482461, (unsigned char*)"\342\213\207", 0, 0}, /* ⋇ */ +{4174518988, (unsigned char*)"\342\245\237", 2026, 2092}, /* ⥟ */ +{4175347172, (unsigned char*)"\342\251\276", 0, 0}, /* ⩾ */ +{4177357543, (unsigned char*)"\342\214\236", 2060, 0}, /* ⌞ */ +{4177360713, (unsigned char*)"\342\214\215", 2061, 2063}, /* ⌍ */ +{4179273784, (unsigned char*)"\342\207\265", 0, 0}, /* ⇵ */ +{4180176204, (unsigned char*)"\342\252\260", 2062, 2066}, /* ⪰ */ +{4181234915, (unsigned char*)"\44", 0, 0}, /* $ */ +{4181356513, (unsigned char*)"\342\244\220", 2065, 2067}, /* ⤐ */ +{4182584927, (unsigned char*)"\342\227\274", 0, 0}, /* ◼ */ +{4184473069, (unsigned char*)"\342\214\237", 2064, 2072}, /* ⌟ */ +{4184476239, (unsigned char*)"\342\214\214", 0, 0}, /* ⌌ */ +{4186273084, (unsigned char*)"\304\221", 2069, 2071}, /* đ */ +{4186873785, (unsigned char*)"\342\253\213\357\270\200", 0, 0}, /* ⫋︀ */ +{4192460800, (unsigned char*)"\342\204\234", 2070, 2074}, /* ℜ */ +{4194937782, (unsigned char*)"\342\251\275", 0, 0}, /* ⩽ */ +{4197667814, (unsigned char*)"\342\211\277", 2073, 2075}, /* ≿ */ +{4200620618, (unsigned char*)"\342\213\213", 0, 0}, /* ⋋ */ +{4203454396, (unsigned char*)"\303\251", 2068, 2084}, /* é */ +{4204027817, (unsigned char*)"\342\251\256", 0, 0}, /* ⩮ */ +{4205750941, (unsigned char*)"\304\233", 2077, 2079}, /* ě */ +{4206247525, (unsigned char*)"\342\211\225", 0, 0}, /* ≕ */ +{4207958313, (unsigned char*)"\342\237\267", 2078, 2082}, /* ⟷ */ +{4211087263, (unsigned char*)"\303\250", 0, 0}, /* è */ +{4211126251, (unsigned char*)"\342\252\230", 2081, 2083}, /* ⪘ */ +{4215408006, (unsigned char*)"\342\211\266", 0, 0}, /* ≶ */ +{4215610643, (unsigned char*)"\342\237\250", 2080, 2088}, /* ⟨ */ +{4217055856, (unsigned char*)"\342\252\227", 0, 0}, /* ⪗ */ +{4218151722, (unsigned char*)"\342\210\205", 2085, 2087}, /* ∅ */ +{4218252734, (unsigned char*)"\342\200\204", 0, 0}, /*   */ +{4218252735, (unsigned char*)"\342\200\205", 2086, 2090}, /*   */ +{4221168044, (unsigned char*)"\342\247\243", 0, 0}, /* ⧣ */ +{4222415996, (unsigned char*)"\342\211\226", 2089, 2091}, /* ≖ */ +{4223053968, (unsigned char*)"\75", 0, 0}, /* = */ +{4223058556, (unsigned char*)"\342\211\237", 2076, 2109}, /* ≟ */ +{4232694450, (unsigned char*)"\342\207\202", 0, 0}, /* ⇂ */ +{4235957670, (unsigned char*)"\342\252\204", 2093, 0}, /* ⪄ */ +{4242426505, (unsigned char*)"\342\207\222", 2094, 2096}, /* ⇒ */ +{4247670799, (unsigned char*)"\342\231\200", 0, 0}, /* ♀ */ +{4248724854, (unsigned char*)"\357\254\203", 2095, 2099}, /* ffi */ +{4248832665, (unsigned char*)"\357\254\204", 0, 0}, /* ffl */ +{4253350520, (unsigned char*)"\342\207\222", 2098, 2100}, /* ⇒ */ +{4259709701, (unsigned char*)"\342\210\200", 0, 0}, /* ∀ */ +{4261230855, (unsigned char*)"\342\206\256", 2097, 2105}, /* ↮ */ +{4262656708, (unsigned char*)"\302\275", 0, 0}, /* ½ */ +{4262656709, (unsigned char*)"\342\205\223", 2102, 2104}, /* ⅓ */ +{4262656710, (unsigned char*)"\302\274", 0, 0}, /* ¼ */ +{4262656711, (unsigned char*)"\342\205\225", 2103, 2107}, /* ⅕ */ +{4262656712, (unsigned char*)"\342\205\231", 0, 0}, /* ⅙ */ +{4262656714, (unsigned char*)"\342\205\233", 2106, 2108}, /* ⅛ */ +{4262656742, (unsigned char*)"\342\205\224", 0, 0}, /* ⅔ */ +{4262656744, (unsigned char*)"\342\205\226", 2101, 2117}, /* ⅖ */ +{4262656776, (unsigned char*)"\302\276", 0, 0}, /* ¾ */ +{4262656777, (unsigned char*)"\342\205\227", 2110, 2112}, /* ⅗ */ +{4262656780, (unsigned char*)"\342\205\234", 0, 0}, /* ⅜ */ +{4262656810, (unsigned char*)"\342\205\230", 2111, 2115}, /* ⅘ */ +{4262656844, (unsigned char*)"\342\205\232", 0, 0}, /* ⅚ */ +{4262656846, (unsigned char*)"\342\205\235", 2114, 2116}, /* ⅝ */ +{4262656912, (unsigned char*)"\342\205\236", 0, 0}, /* ⅞ */ +{4268685711, (unsigned char*)"\342\211\203", 2113, 2121}, /* ≃ */ +{4276609841, (unsigned char*)"\342\211\216", 0, 0}, /* ≎ */ +{4281725182, (unsigned char*)"\307\265", 2118, 2120}, /* ǵ */ +{4282075212, (unsigned char*)"\317\235", 0, 0}, /* ϝ */ +{4283432800, (unsigned char*)"\304\237", 2119, 2123}, /* ğ */ +{4286177321, (unsigned char*)"\342\211\210", 0, 0}, /* ≈ */ +{4287025195, (unsigned char*)"\342\252\200", 2122, 2124}, /* ⪀ */ +{4287033576, (unsigned char*)"\342\252\224", 0, 0}, /* ⪔ */ +}; + +static int cmark_entities_root = 1062; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 2362b0405e..6f94c2389a 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -5,7 +5,44 @@ #include "buffer.h" #include "houdini.h" #include "utf8.h" -#include "html_unescape.h" +#include "entities.h" + +/* Binary tree lookup code for entities added by JGM */ + +static unsigned long +S_hash(const unsigned char *str, int len) +{ + unsigned long hash = 5381; + int i; + + for (i = 0; i < len; i++) { + hash = (((hash << 5) + hash) + str[i]) & 0xFFFFFFFF; /* hash * 33 + c */ + } + + return hash; +} + +static unsigned char * +S_lookup(int i, unsigned long key) +{ + if (cmark_entities[i].value == key) { + return cmark_entities[i].bytes; + } else { + int next = key < cmark_entities[i].value ? + cmark_entities[i].less : cmark_entities[i].greater; + if (next == 0) { + return NULL; + } else { + return S_lookup(next, key); + } + } +} + +static unsigned char * +S_lookup_entity(const unsigned char *s, int len) +{ + return S_lookup(cmark_entities_root, S_hash(s, len)); +} bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) @@ -57,22 +94,18 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) } else { - if (size > MAX_WORD_LENGTH) - size = MAX_WORD_LENGTH; + if (size > CMARK_ENTITY_MAX_LENGTH) + size = CMARK_ENTITY_MAX_LENGTH; - for (i = MIN_WORD_LENGTH; i < size; ++i) { + for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) { if (src[i] == ' ') break; if (src[i] == ';') { - const struct html_ent *entity = find_entity((char *)src, i); + const unsigned char *entity = S_lookup_entity(src, i); if (entity != NULL) { - bufsize_t len = 0; - while (len < 8 && entity->utf8[len] != '\0') { - ++len; - } - cmark_strbuf_put(ob, entity->utf8, len); + cmark_strbuf_puts(ob, (const char *)entity); return i + 1; } diff --git a/src/html_unescape.gperf b/src/html_unescape.gperf deleted file mode 100644 index a03b036dd8..0000000000 --- a/src/html_unescape.gperf +++ /dev/null @@ -1,2130 +0,0 @@ -struct html_ent { - int entity; - unsigned char utf8[8]; -}; -%% -"Aacute", {195, 129, 0} -"aacute", {195, 161, 0} -"Abreve", {196, 130, 0} -"abreve", {196, 131, 0} -"ac", {226, 136, 190, 0} -"acd", {226, 136, 191, 0} -"acE", {226, 136, 190, 204, 179, 0} -"Acirc", {195, 130, 0} -"acirc", {195, 162, 0} -"acute", {194, 180, 0} -"Acy", {208, 144, 0} -"acy", {208, 176, 0} -"AElig", {195, 134, 0} -"aelig", {195, 166, 0} -"af", {226, 129, 161, 0} -"Afr", {240, 157, 148, 132, 0} -"afr", {240, 157, 148, 158, 0} -"Agrave", {195, 128, 0} -"agrave", {195, 160, 0} -"alefsym", {226, 132, 181, 0} -"aleph", {226, 132, 181, 0} -"Alpha", {206, 145, 0} -"alpha", {206, 177, 0} -"Amacr", {196, 128, 0} -"amacr", {196, 129, 0} -"amalg", {226, 168, 191, 0} -"AMP", {38, 0} -"amp", {38, 0} -"and", {226, 136, 167, 0} -"And", {226, 169, 147, 0} -"andand", {226, 169, 149, 0} -"andd", {226, 169, 156, 0} -"andslope", {226, 169, 152, 0} -"andv", {226, 169, 154, 0} -"ang", {226, 136, 160, 0} -"ange", {226, 166, 164, 0} -"angle", {226, 136, 160, 0} -"angmsd", {226, 136, 161, 0} -"angmsdaa", {226, 166, 168, 0} -"angmsdab", {226, 166, 169, 0} -"angmsdac", {226, 166, 170, 0} -"angmsdad", {226, 166, 171, 0} -"angmsdae", {226, 166, 172, 0} -"angmsdaf", {226, 166, 173, 0} -"angmsdag", {226, 166, 174, 0} -"angmsdah", {226, 166, 175, 0} -"angrt", {226, 136, 159, 0} -"angrtvb", {226, 138, 190, 0} -"angrtvbd", {226, 166, 157, 0} -"angsph", {226, 136, 162, 0} -"angst", {195, 133, 0} -"angzarr", {226, 141, 188, 0} -"Aogon", {196, 132, 0} -"aogon", {196, 133, 0} -"Aopf", {240, 157, 148, 184, 0} -"aopf", {240, 157, 149, 146, 0} -"ap", {226, 137, 136, 0} -"apacir", {226, 169, 175, 0} -"ape", {226, 137, 138, 0} -"apE", {226, 169, 176, 0} -"apid", {226, 137, 139, 0} -"apos", {39, 0} -"ApplyFunction", {226, 129, 161, 0} -"approx", {226, 137, 136, 0} -"approxeq", {226, 137, 138, 0} -"Aring", {195, 133, 0} -"aring", {195, 165, 0} -"Ascr", {240, 157, 146, 156, 0} -"ascr", {240, 157, 146, 182, 0} -"Assign", {226, 137, 148, 0} -"ast", {42, 0} -"asymp", {226, 137, 136, 0} -"asympeq", {226, 137, 141, 0} -"Atilde", {195, 131, 0} -"atilde", {195, 163, 0} -"Auml", {195, 132, 0} -"auml", {195, 164, 0} -"awconint", {226, 136, 179, 0} -"awint", {226, 168, 145, 0} -"backcong", {226, 137, 140, 0} -"backepsilon", {207, 182, 0} -"backprime", {226, 128, 181, 0} -"backsim", {226, 136, 189, 0} -"backsimeq", {226, 139, 141, 0} -"Backslash", {226, 136, 150, 0} -"Barv", {226, 171, 167, 0} -"barvee", {226, 138, 189, 0} -"barwed", {226, 140, 133, 0} -"Barwed", {226, 140, 134, 0} -"barwedge", {226, 140, 133, 0} -"bbrk", {226, 142, 181, 0} -"bbrktbrk", {226, 142, 182, 0} -"bcong", {226, 137, 140, 0} -"Bcy", {208, 145, 0} -"bcy", {208, 177, 0} -"bdquo", {226, 128, 158, 0} -"becaus", {226, 136, 181, 0} -"Because", {226, 136, 181, 0} -"because", {226, 136, 181, 0} -"bemptyv", {226, 166, 176, 0} -"bepsi", {207, 182, 0} -"bernou", {226, 132, 172, 0} -"Bernoullis", {226, 132, 172, 0} -"Beta", {206, 146, 0} -"beta", {206, 178, 0} -"beth", {226, 132, 182, 0} -"between", {226, 137, 172, 0} -"Bfr", {240, 157, 148, 133, 0} -"bfr", {240, 157, 148, 159, 0} -"bigcap", {226, 139, 130, 0} -"bigcirc", {226, 151, 175, 0} -"bigcup", {226, 139, 131, 0} -"bigodot", {226, 168, 128, 0} -"bigoplus", {226, 168, 129, 0} -"bigotimes", {226, 168, 130, 0} -"bigsqcup", {226, 168, 134, 0} -"bigstar", {226, 152, 133, 0} -"bigtriangledown", {226, 150, 189, 0} -"bigtriangleup", {226, 150, 179, 0} -"biguplus", {226, 168, 132, 0} -"bigvee", {226, 139, 129, 0} -"bigwedge", {226, 139, 128, 0} -"bkarow", {226, 164, 141, 0} -"blacklozenge", {226, 167, 171, 0} -"blacksquare", {226, 150, 170, 0} -"blacktriangle", {226, 150, 180, 0} -"blacktriangledown", {226, 150, 190, 0} -"blacktriangleleft", {226, 151, 130, 0} -"blacktriangleright", {226, 150, 184, 0} -"blank", {226, 144, 163, 0} -"blk12", {226, 150, 146, 0} -"blk14", {226, 150, 145, 0} -"blk34", {226, 150, 147, 0} -"block", {226, 150, 136, 0} -"bne", {61, 226, 131, 165, 0} -"bnequiv", {226, 137, 161, 226, 131, 165, 0} -"bnot", {226, 140, 144, 0} -"bNot", {226, 171, 173, 0} -"Bopf", {240, 157, 148, 185, 0} -"bopf", {240, 157, 149, 147, 0} -"bot", {226, 138, 165, 0} -"bottom", {226, 138, 165, 0} -"bowtie", {226, 139, 136, 0} -"boxbox", {226, 167, 137, 0} -"boxdl", {226, 148, 144, 0} -"boxdL", {226, 149, 149, 0} -"boxDl", {226, 149, 150, 0} -"boxDL", {226, 149, 151, 0} -"boxdr", {226, 148, 140, 0} -"boxdR", {226, 149, 146, 0} -"boxDr", {226, 149, 147, 0} -"boxDR", {226, 149, 148, 0} -"boxh", {226, 148, 128, 0} -"boxH", {226, 149, 144, 0} -"boxhd", {226, 148, 172, 0} -"boxHd", {226, 149, 164, 0} -"boxhD", {226, 149, 165, 0} -"boxHD", {226, 149, 166, 0} -"boxhu", {226, 148, 180, 0} -"boxHu", {226, 149, 167, 0} -"boxhU", {226, 149, 168, 0} -"boxHU", {226, 149, 169, 0} -"boxminus", {226, 138, 159, 0} -"boxplus", {226, 138, 158, 0} -"boxtimes", {226, 138, 160, 0} -"boxul", {226, 148, 152, 0} -"boxuL", {226, 149, 155, 0} -"boxUl", {226, 149, 156, 0} -"boxUL", {226, 149, 157, 0} -"boxur", {226, 148, 148, 0} -"boxuR", {226, 149, 152, 0} -"boxUr", {226, 149, 153, 0} -"boxUR", {226, 149, 154, 0} -"boxv", {226, 148, 130, 0} -"boxV", {226, 149, 145, 0} -"boxvh", {226, 148, 188, 0} -"boxvH", {226, 149, 170, 0} -"boxVh", {226, 149, 171, 0} -"boxVH", {226, 149, 172, 0} -"boxvl", {226, 148, 164, 0} -"boxvL", {226, 149, 161, 0} -"boxVl", {226, 149, 162, 0} -"boxVL", {226, 149, 163, 0} -"boxvr", {226, 148, 156, 0} -"boxvR", {226, 149, 158, 0} -"boxVr", {226, 149, 159, 0} -"boxVR", {226, 149, 160, 0} -"bprime", {226, 128, 181, 0} -"Breve", {203, 152, 0} -"breve", {203, 152, 0} -"brvbar", {194, 166, 0} -"Bscr", {226, 132, 172, 0} -"bscr", {240, 157, 146, 183, 0} -"bsemi", {226, 129, 143, 0} -"bsim", {226, 136, 189, 0} -"bsime", {226, 139, 141, 0} -"bsol", {92, 0} -"bsolb", {226, 167, 133, 0} -"bsolhsub", {226, 159, 136, 0} -"bull", {226, 128, 162, 0} -"bullet", {226, 128, 162, 0} -"bump", {226, 137, 142, 0} -"bumpe", {226, 137, 143, 0} -"bumpE", {226, 170, 174, 0} -"Bumpeq", {226, 137, 142, 0} -"bumpeq", {226, 137, 143, 0} -"Cacute", {196, 134, 0} -"cacute", {196, 135, 0} -"cap", {226, 136, 169, 0} -"Cap", {226, 139, 146, 0} -"capand", {226, 169, 132, 0} -"capbrcup", {226, 169, 137, 0} -"capcap", {226, 169, 139, 0} -"capcup", {226, 169, 135, 0} -"capdot", {226, 169, 128, 0} -"CapitalDifferentialD", {226, 133, 133, 0} -"caps", {226, 136, 169, 239, 184, 128, 0} -"caret", {226, 129, 129, 0} -"caron", {203, 135, 0} -"Cayleys", {226, 132, 173, 0} -"ccaps", {226, 169, 141, 0} -"Ccaron", {196, 140, 0} -"ccaron", {196, 141, 0} -"Ccedil", {195, 135, 0} -"ccedil", {195, 167, 0} -"Ccirc", {196, 136, 0} -"ccirc", {196, 137, 0} -"Cconint", {226, 136, 176, 0} -"ccups", {226, 169, 140, 0} -"ccupssm", {226, 169, 144, 0} -"Cdot", {196, 138, 0} -"cdot", {196, 139, 0} -"cedil", {194, 184, 0} -"Cedilla", {194, 184, 0} -"cemptyv", {226, 166, 178, 0} -"cent", {194, 162, 0} -"CenterDot", {194, 183, 0} -"centerdot", {194, 183, 0} -"Cfr", {226, 132, 173, 0} -"cfr", {240, 157, 148, 160, 0} -"CHcy", {208, 167, 0} -"chcy", {209, 135, 0} -"check", {226, 156, 147, 0} -"checkmark", {226, 156, 147, 0} -"Chi", {206, 167, 0} -"chi", {207, 135, 0} -"cir", {226, 151, 139, 0} -"circ", {203, 134, 0} -"circeq", {226, 137, 151, 0} -"circlearrowleft", {226, 134, 186, 0} -"circlearrowright", {226, 134, 187, 0} -"circledast", {226, 138, 155, 0} -"circledcirc", {226, 138, 154, 0} -"circleddash", {226, 138, 157, 0} -"CircleDot", {226, 138, 153, 0} -"circledR", {194, 174, 0} -"circledS", {226, 147, 136, 0} -"CircleMinus", {226, 138, 150, 0} -"CirclePlus", {226, 138, 149, 0} -"CircleTimes", {226, 138, 151, 0} -"cire", {226, 137, 151, 0} -"cirE", {226, 167, 131, 0} -"cirfnint", {226, 168, 144, 0} -"cirmid", {226, 171, 175, 0} -"cirscir", {226, 167, 130, 0} -"ClockwiseContourIntegral", {226, 136, 178, 0} -"CloseCurlyDoubleQuote", {226, 128, 157, 0} -"CloseCurlyQuote", {226, 128, 153, 0} -"clubs", {226, 153, 163, 0} -"clubsuit", {226, 153, 163, 0} -"Colon", {226, 136, 183, 0} -"colon", {58, 0} -"colone", {226, 137, 148, 0} -"Colone", {226, 169, 180, 0} -"coloneq", {226, 137, 148, 0} -"comma", {44, 0} -"commat", {64, 0} -"comp", {226, 136, 129, 0} -"compfn", {226, 136, 152, 0} -"complement", {226, 136, 129, 0} -"complexes", {226, 132, 130, 0} -"cong", {226, 137, 133, 0} -"congdot", {226, 169, 173, 0} -"Congruent", {226, 137, 161, 0} -"conint", {226, 136, 174, 0} -"Conint", {226, 136, 175, 0} -"ContourIntegral", {226, 136, 174, 0} -"Copf", {226, 132, 130, 0} -"copf", {240, 157, 149, 148, 0} -"coprod", {226, 136, 144, 0} -"Coproduct", {226, 136, 144, 0} -"COPY", {194, 169, 0} -"copy", {194, 169, 0} -"copysr", {226, 132, 151, 0} -"CounterClockwiseContourIntegral", {226, 136, 179, 0} -"crarr", {226, 134, 181, 0} -"cross", {226, 156, 151, 0} -"Cross", {226, 168, 175, 0} -"Cscr", {240, 157, 146, 158, 0} -"cscr", {240, 157, 146, 184, 0} -"csub", {226, 171, 143, 0} -"csube", {226, 171, 145, 0} -"csup", {226, 171, 144, 0} -"csupe", {226, 171, 146, 0} -"ctdot", {226, 139, 175, 0} -"cudarrl", {226, 164, 184, 0} -"cudarrr", {226, 164, 181, 0} -"cuepr", {226, 139, 158, 0} -"cuesc", {226, 139, 159, 0} -"cularr", {226, 134, 182, 0} -"cularrp", {226, 164, 189, 0} -"cup", {226, 136, 170, 0} -"Cup", {226, 139, 147, 0} -"cupbrcap", {226, 169, 136, 0} -"CupCap", {226, 137, 141, 0} -"cupcap", {226, 169, 134, 0} -"cupcup", {226, 169, 138, 0} -"cupdot", {226, 138, 141, 0} -"cupor", {226, 169, 133, 0} -"cups", {226, 136, 170, 239, 184, 128, 0} -"curarr", {226, 134, 183, 0} -"curarrm", {226, 164, 188, 0} -"curlyeqprec", {226, 139, 158, 0} -"curlyeqsucc", {226, 139, 159, 0} -"curlyvee", {226, 139, 142, 0} -"curlywedge", {226, 139, 143, 0} -"curren", {194, 164, 0} -"curvearrowleft", {226, 134, 182, 0} -"curvearrowright", {226, 134, 183, 0} -"cuvee", {226, 139, 142, 0} -"cuwed", {226, 139, 143, 0} -"cwconint", {226, 136, 178, 0} -"cwint", {226, 136, 177, 0} -"cylcty", {226, 140, 173, 0} -"dagger", {226, 128, 160, 0} -"Dagger", {226, 128, 161, 0} -"daleth", {226, 132, 184, 0} -"darr", {226, 134, 147, 0} -"Darr", {226, 134, 161, 0} -"dArr", {226, 135, 147, 0} -"dash", {226, 128, 144, 0} -"dashv", {226, 138, 163, 0} -"Dashv", {226, 171, 164, 0} -"dbkarow", {226, 164, 143, 0} -"dblac", {203, 157, 0} -"Dcaron", {196, 142, 0} -"dcaron", {196, 143, 0} -"Dcy", {208, 148, 0} -"dcy", {208, 180, 0} -"DD", {226, 133, 133, 0} -"dd", {226, 133, 134, 0} -"ddagger", {226, 128, 161, 0} -"ddarr", {226, 135, 138, 0} -"DDotrahd", {226, 164, 145, 0} -"ddotseq", {226, 169, 183, 0} -"deg", {194, 176, 0} -"Del", {226, 136, 135, 0} -"Delta", {206, 148, 0} -"delta", {206, 180, 0} -"demptyv", {226, 166, 177, 0} -"dfisht", {226, 165, 191, 0} -"Dfr", {240, 157, 148, 135, 0} -"dfr", {240, 157, 148, 161, 0} -"dHar", {226, 165, 165, 0} -"dharl", {226, 135, 131, 0} -"dharr", {226, 135, 130, 0} -"DiacriticalAcute", {194, 180, 0} -"DiacriticalDot", {203, 153, 0} -"DiacriticalDoubleAcute", {203, 157, 0} -"DiacriticalGrave", {96, 0} -"DiacriticalTilde", {203, 156, 0} -"diam", {226, 139, 132, 0} -"Diamond", {226, 139, 132, 0} -"diamond", {226, 139, 132, 0} -"diamondsuit", {226, 153, 166, 0} -"diams", {226, 153, 166, 0} -"die", {194, 168, 0} -"DifferentialD", {226, 133, 134, 0} -"digamma", {207, 157, 0} -"disin", {226, 139, 178, 0} -"div", {195, 183, 0} -"divide", {195, 183, 0} -"divideontimes", {226, 139, 135, 0} -"divonx", {226, 139, 135, 0} -"DJcy", {208, 130, 0} -"djcy", {209, 146, 0} -"dlcorn", {226, 140, 158, 0} -"dlcrop", {226, 140, 141, 0} -"dollar", {36, 0} -"Dopf", {240, 157, 148, 187, 0} -"dopf", {240, 157, 149, 149, 0} -"Dot", {194, 168, 0} -"dot", {203, 153, 0} -"DotDot", {226, 131, 156, 0} -"doteq", {226, 137, 144, 0} -"doteqdot", {226, 137, 145, 0} -"DotEqual", {226, 137, 144, 0} -"dotminus", {226, 136, 184, 0} -"dotplus", {226, 136, 148, 0} -"dotsquare", {226, 138, 161, 0} -"doublebarwedge", {226, 140, 134, 0} -"DoubleContourIntegral", {226, 136, 175, 0} -"DoubleDot", {194, 168, 0} -"DoubleDownArrow", {226, 135, 147, 0} -"DoubleLeftArrow", {226, 135, 144, 0} -"DoubleLeftRightArrow", {226, 135, 148, 0} -"DoubleLeftTee", {226, 171, 164, 0} -"DoubleLongLeftArrow", {226, 159, 184, 0} -"DoubleLongLeftRightArrow", {226, 159, 186, 0} -"DoubleLongRightArrow", {226, 159, 185, 0} -"DoubleRightArrow", {226, 135, 146, 0} -"DoubleRightTee", {226, 138, 168, 0} -"DoubleUpArrow", {226, 135, 145, 0} -"DoubleUpDownArrow", {226, 135, 149, 0} -"DoubleVerticalBar", {226, 136, 165, 0} -"DownArrow", {226, 134, 147, 0} -"downarrow", {226, 134, 147, 0} -"Downarrow", {226, 135, 147, 0} -"DownArrowBar", {226, 164, 147, 0} -"DownArrowUpArrow", {226, 135, 181, 0} -"DownBreve", {204, 145, 0} -"downdownarrows", {226, 135, 138, 0} -"downharpoonleft", {226, 135, 131, 0} -"downharpoonright", {226, 135, 130, 0} -"DownLeftRightVector", {226, 165, 144, 0} -"DownLeftTeeVector", {226, 165, 158, 0} -"DownLeftVector", {226, 134, 189, 0} -"DownLeftVectorBar", {226, 165, 150, 0} -"DownRightTeeVector", {226, 165, 159, 0} -"DownRightVector", {226, 135, 129, 0} -"DownRightVectorBar", {226, 165, 151, 0} -"DownTee", {226, 138, 164, 0} -"DownTeeArrow", {226, 134, 167, 0} -"drbkarow", {226, 164, 144, 0} -"drcorn", {226, 140, 159, 0} -"drcrop", {226, 140, 140, 0} -"Dscr", {240, 157, 146, 159, 0} -"dscr", {240, 157, 146, 185, 0} -"DScy", {208, 133, 0} -"dscy", {209, 149, 0} -"dsol", {226, 167, 182, 0} -"Dstrok", {196, 144, 0} -"dstrok", {196, 145, 0} -"dtdot", {226, 139, 177, 0} -"dtri", {226, 150, 191, 0} -"dtrif", {226, 150, 190, 0} -"duarr", {226, 135, 181, 0} -"duhar", {226, 165, 175, 0} -"dwangle", {226, 166, 166, 0} -"DZcy", {208, 143, 0} -"dzcy", {209, 159, 0} -"dzigrarr", {226, 159, 191, 0} -"Eacute", {195, 137, 0} -"eacute", {195, 169, 0} -"easter", {226, 169, 174, 0} -"Ecaron", {196, 154, 0} -"ecaron", {196, 155, 0} -"ecir", {226, 137, 150, 0} -"Ecirc", {195, 138, 0} -"ecirc", {195, 170, 0} -"ecolon", {226, 137, 149, 0} -"Ecy", {208, 173, 0} -"ecy", {209, 141, 0} -"eDDot", {226, 169, 183, 0} -"Edot", {196, 150, 0} -"edot", {196, 151, 0} -"eDot", {226, 137, 145, 0} -"ee", {226, 133, 135, 0} -"efDot", {226, 137, 146, 0} -"Efr", {240, 157, 148, 136, 0} -"efr", {240, 157, 148, 162, 0} -"eg", {226, 170, 154, 0} -"Egrave", {195, 136, 0} -"egrave", {195, 168, 0} -"egs", {226, 170, 150, 0} -"egsdot", {226, 170, 152, 0} -"el", {226, 170, 153, 0} -"Element", {226, 136, 136, 0} -"elinters", {226, 143, 167, 0} -"ell", {226, 132, 147, 0} -"els", {226, 170, 149, 0} -"elsdot", {226, 170, 151, 0} -"Emacr", {196, 146, 0} -"emacr", {196, 147, 0} -"empty", {226, 136, 133, 0} -"emptyset", {226, 136, 133, 0} -"EmptySmallSquare", {226, 151, 187, 0} -"emptyv", {226, 136, 133, 0} -"EmptyVerySmallSquare", {226, 150, 171, 0} -"emsp", {226, 128, 131, 0} -"emsp13", {226, 128, 132, 0} -"emsp14", {226, 128, 133, 0} -"ENG", {197, 138, 0} -"eng", {197, 139, 0} -"ensp", {226, 128, 130, 0} -"Eogon", {196, 152, 0} -"eogon", {196, 153, 0} -"Eopf", {240, 157, 148, 188, 0} -"eopf", {240, 157, 149, 150, 0} -"epar", {226, 139, 149, 0} -"eparsl", {226, 167, 163, 0} -"eplus", {226, 169, 177, 0} -"epsi", {206, 181, 0} -"Epsilon", {206, 149, 0} -"epsilon", {206, 181, 0} -"epsiv", {207, 181, 0} -"eqcirc", {226, 137, 150, 0} -"eqcolon", {226, 137, 149, 0} -"eqsim", {226, 137, 130, 0} -"eqslantgtr", {226, 170, 150, 0} -"eqslantless", {226, 170, 149, 0} -"Equal", {226, 169, 181, 0} -"equals", {61, 0} -"EqualTilde", {226, 137, 130, 0} -"equest", {226, 137, 159, 0} -"Equilibrium", {226, 135, 140, 0} -"equiv", {226, 137, 161, 0} -"equivDD", {226, 169, 184, 0} -"eqvparsl", {226, 167, 165, 0} -"erarr", {226, 165, 177, 0} -"erDot", {226, 137, 147, 0} -"escr", {226, 132, 175, 0} -"Escr", {226, 132, 176, 0} -"esdot", {226, 137, 144, 0} -"esim", {226, 137, 130, 0} -"Esim", {226, 169, 179, 0} -"Eta", {206, 151, 0} -"eta", {206, 183, 0} -"ETH", {195, 144, 0} -"eth", {195, 176, 0} -"Euml", {195, 139, 0} -"euml", {195, 171, 0} -"euro", {226, 130, 172, 0} -"excl", {33, 0} -"exist", {226, 136, 131, 0} -"Exists", {226, 136, 131, 0} -"expectation", {226, 132, 176, 0} -"ExponentialE", {226, 133, 135, 0} -"exponentiale", {226, 133, 135, 0} -"fallingdotseq", {226, 137, 146, 0} -"Fcy", {208, 164, 0} -"fcy", {209, 132, 0} -"female", {226, 153, 128, 0} -"ffilig", {239, 172, 131, 0} -"fflig", {239, 172, 128, 0} -"ffllig", {239, 172, 132, 0} -"Ffr", {240, 157, 148, 137, 0} -"ffr", {240, 157, 148, 163, 0} -"filig", {239, 172, 129, 0} -"FilledSmallSquare", {226, 151, 188, 0} -"FilledVerySmallSquare", {226, 150, 170, 0} -"fjlig", {102, 106, 0} -"flat", {226, 153, 173, 0} -"fllig", {239, 172, 130, 0} -"fltns", {226, 150, 177, 0} -"fnof", {198, 146, 0} -"Fopf", {240, 157, 148, 189, 0} -"fopf", {240, 157, 149, 151, 0} -"ForAll", {226, 136, 128, 0} -"forall", {226, 136, 128, 0} -"fork", {226, 139, 148, 0} -"forkv", {226, 171, 153, 0} -"Fouriertrf", {226, 132, 177, 0} -"fpartint", {226, 168, 141, 0} -"frac12", {194, 189, 0} -"frac13", {226, 133, 147, 0} -"frac14", {194, 188, 0} -"frac15", {226, 133, 149, 0} -"frac16", {226, 133, 153, 0} -"frac18", {226, 133, 155, 0} -"frac23", {226, 133, 148, 0} -"frac25", {226, 133, 150, 0} -"frac34", {194, 190, 0} -"frac35", {226, 133, 151, 0} -"frac38", {226, 133, 156, 0} -"frac45", {226, 133, 152, 0} -"frac56", {226, 133, 154, 0} -"frac58", {226, 133, 157, 0} -"frac78", {226, 133, 158, 0} -"frasl", {226, 129, 132, 0} -"frown", {226, 140, 162, 0} -"Fscr", {226, 132, 177, 0} -"fscr", {240, 157, 146, 187, 0} -"gacute", {199, 181, 0} -"Gamma", {206, 147, 0} -"gamma", {206, 179, 0} -"Gammad", {207, 156, 0} -"gammad", {207, 157, 0} -"gap", {226, 170, 134, 0} -"Gbreve", {196, 158, 0} -"gbreve", {196, 159, 0} -"Gcedil", {196, 162, 0} -"Gcirc", {196, 156, 0} -"gcirc", {196, 157, 0} -"Gcy", {208, 147, 0} -"gcy", {208, 179, 0} -"Gdot", {196, 160, 0} -"gdot", {196, 161, 0} -"ge", {226, 137, 165, 0} -"gE", {226, 137, 167, 0} -"gel", {226, 139, 155, 0} -"gEl", {226, 170, 140, 0} -"geq", {226, 137, 165, 0} -"geqq", {226, 137, 167, 0} -"geqslant", {226, 169, 190, 0} -"ges", {226, 169, 190, 0} -"gescc", {226, 170, 169, 0} -"gesdot", {226, 170, 128, 0} -"gesdoto", {226, 170, 130, 0} -"gesdotol", {226, 170, 132, 0} -"gesl", {226, 139, 155, 239, 184, 128, 0} -"gesles", {226, 170, 148, 0} -"Gfr", {240, 157, 148, 138, 0} -"gfr", {240, 157, 148, 164, 0} -"gg", {226, 137, 171, 0} -"Gg", {226, 139, 153, 0} -"ggg", {226, 139, 153, 0} -"gimel", {226, 132, 183, 0} -"GJcy", {208, 131, 0} -"gjcy", {209, 147, 0} -"gl", {226, 137, 183, 0} -"gla", {226, 170, 165, 0} -"glE", {226, 170, 146, 0} -"glj", {226, 170, 164, 0} -"gnap", {226, 170, 138, 0} -"gnapprox", {226, 170, 138, 0} -"gnE", {226, 137, 169, 0} -"gne", {226, 170, 136, 0} -"gneq", {226, 170, 136, 0} -"gneqq", {226, 137, 169, 0} -"gnsim", {226, 139, 167, 0} -"Gopf", {240, 157, 148, 190, 0} -"gopf", {240, 157, 149, 152, 0} -"grave", {96, 0} -"GreaterEqual", {226, 137, 165, 0} -"GreaterEqualLess", {226, 139, 155, 0} -"GreaterFullEqual", {226, 137, 167, 0} -"GreaterGreater", {226, 170, 162, 0} -"GreaterLess", {226, 137, 183, 0} -"GreaterSlantEqual", {226, 169, 190, 0} -"GreaterTilde", {226, 137, 179, 0} -"gscr", {226, 132, 138, 0} -"Gscr", {240, 157, 146, 162, 0} -"gsim", {226, 137, 179, 0} -"gsime", {226, 170, 142, 0} -"gsiml", {226, 170, 144, 0} -"Gt", {226, 137, 171, 0} -"GT", {62, 0} -"gt", {62, 0} -"gtcc", {226, 170, 167, 0} -"gtcir", {226, 169, 186, 0} -"gtdot", {226, 139, 151, 0} -"gtlPar", {226, 166, 149, 0} -"gtquest", {226, 169, 188, 0} -"gtrapprox", {226, 170, 134, 0} -"gtrarr", {226, 165, 184, 0} -"gtrdot", {226, 139, 151, 0} -"gtreqless", {226, 139, 155, 0} -"gtreqqless", {226, 170, 140, 0} -"gtrless", {226, 137, 183, 0} -"gtrsim", {226, 137, 179, 0} -"gvertneqq", {226, 137, 169, 239, 184, 128, 0} -"gvnE", {226, 137, 169, 239, 184, 128, 0} -"Hacek", {203, 135, 0} -"hairsp", {226, 128, 138, 0} -"half", {194, 189, 0} -"hamilt", {226, 132, 139, 0} -"HARDcy", {208, 170, 0} -"hardcy", {209, 138, 0} -"harr", {226, 134, 148, 0} -"hArr", {226, 135, 148, 0} -"harrcir", {226, 165, 136, 0} -"harrw", {226, 134, 173, 0} -"Hat", {94, 0} -"hbar", {226, 132, 143, 0} -"Hcirc", {196, 164, 0} -"hcirc", {196, 165, 0} -"hearts", {226, 153, 165, 0} -"heartsuit", {226, 153, 165, 0} -"hellip", {226, 128, 166, 0} -"hercon", {226, 138, 185, 0} -"Hfr", {226, 132, 140, 0} -"hfr", {240, 157, 148, 165, 0} -"HilbertSpace", {226, 132, 139, 0} -"hksearow", {226, 164, 165, 0} -"hkswarow", {226, 164, 166, 0} -"hoarr", {226, 135, 191, 0} -"homtht", {226, 136, 187, 0} -"hookleftarrow", {226, 134, 169, 0} -"hookrightarrow", {226, 134, 170, 0} -"Hopf", {226, 132, 141, 0} -"hopf", {240, 157, 149, 153, 0} -"horbar", {226, 128, 149, 0} -"HorizontalLine", {226, 148, 128, 0} -"Hscr", {226, 132, 139, 0} -"hscr", {240, 157, 146, 189, 0} -"hslash", {226, 132, 143, 0} -"Hstrok", {196, 166, 0} -"hstrok", {196, 167, 0} -"HumpDownHump", {226, 137, 142, 0} -"HumpEqual", {226, 137, 143, 0} -"hybull", {226, 129, 131, 0} -"hyphen", {226, 128, 144, 0} -"Iacute", {195, 141, 0} -"iacute", {195, 173, 0} -"ic", {226, 129, 163, 0} -"Icirc", {195, 142, 0} -"icirc", {195, 174, 0} -"Icy", {208, 152, 0} -"icy", {208, 184, 0} -"Idot", {196, 176, 0} -"IEcy", {208, 149, 0} -"iecy", {208, 181, 0} -"iexcl", {194, 161, 0} -"iff", {226, 135, 148, 0} -"Ifr", {226, 132, 145, 0} -"ifr", {240, 157, 148, 166, 0} -"Igrave", {195, 140, 0} -"igrave", {195, 172, 0} -"ii", {226, 133, 136, 0} -"iiiint", {226, 168, 140, 0} -"iiint", {226, 136, 173, 0} -"iinfin", {226, 167, 156, 0} -"iiota", {226, 132, 169, 0} -"IJlig", {196, 178, 0} -"ijlig", {196, 179, 0} -"Im", {226, 132, 145, 0} -"Imacr", {196, 170, 0} -"imacr", {196, 171, 0} -"image", {226, 132, 145, 0} -"ImaginaryI", {226, 133, 136, 0} -"imagline", {226, 132, 144, 0} -"imagpart", {226, 132, 145, 0} -"imath", {196, 177, 0} -"imof", {226, 138, 183, 0} -"imped", {198, 181, 0} -"Implies", {226, 135, 146, 0} -"in", {226, 136, 136, 0} -"incare", {226, 132, 133, 0} -"infin", {226, 136, 158, 0} -"infintie", {226, 167, 157, 0} -"inodot", {196, 177, 0} -"int", {226, 136, 171, 0} -"Int", {226, 136, 172, 0} -"intcal", {226, 138, 186, 0} -"integers", {226, 132, 164, 0} -"Integral", {226, 136, 171, 0} -"intercal", {226, 138, 186, 0} -"Intersection", {226, 139, 130, 0} -"intlarhk", {226, 168, 151, 0} -"intprod", {226, 168, 188, 0} -"InvisibleComma", {226, 129, 163, 0} -"InvisibleTimes", {226, 129, 162, 0} -"IOcy", {208, 129, 0} -"iocy", {209, 145, 0} -"Iogon", {196, 174, 0} -"iogon", {196, 175, 0} -"Iopf", {240, 157, 149, 128, 0} -"iopf", {240, 157, 149, 154, 0} -"Iota", {206, 153, 0} -"iota", {206, 185, 0} -"iprod", {226, 168, 188, 0} -"iquest", {194, 191, 0} -"Iscr", {226, 132, 144, 0} -"iscr", {240, 157, 146, 190, 0} -"isin", {226, 136, 136, 0} -"isindot", {226, 139, 181, 0} -"isinE", {226, 139, 185, 0} -"isins", {226, 139, 180, 0} -"isinsv", {226, 139, 179, 0} -"isinv", {226, 136, 136, 0} -"it", {226, 129, 162, 0} -"Itilde", {196, 168, 0} -"itilde", {196, 169, 0} -"Iukcy", {208, 134, 0} -"iukcy", {209, 150, 0} -"Iuml", {195, 143, 0} -"iuml", {195, 175, 0} -"Jcirc", {196, 180, 0} -"jcirc", {196, 181, 0} -"Jcy", {208, 153, 0} -"jcy", {208, 185, 0} -"Jfr", {240, 157, 148, 141, 0} -"jfr", {240, 157, 148, 167, 0} -"jmath", {200, 183, 0} -"Jopf", {240, 157, 149, 129, 0} -"jopf", {240, 157, 149, 155, 0} -"Jscr", {240, 157, 146, 165, 0} -"jscr", {240, 157, 146, 191, 0} -"Jsercy", {208, 136, 0} -"jsercy", {209, 152, 0} -"Jukcy", {208, 132, 0} -"jukcy", {209, 148, 0} -"Kappa", {206, 154, 0} -"kappa", {206, 186, 0} -"kappav", {207, 176, 0} -"Kcedil", {196, 182, 0} -"kcedil", {196, 183, 0} -"Kcy", {208, 154, 0} -"kcy", {208, 186, 0} -"Kfr", {240, 157, 148, 142, 0} -"kfr", {240, 157, 148, 168, 0} -"kgreen", {196, 184, 0} -"KHcy", {208, 165, 0} -"khcy", {209, 133, 0} -"KJcy", {208, 140, 0} -"kjcy", {209, 156, 0} -"Kopf", {240, 157, 149, 130, 0} -"kopf", {240, 157, 149, 156, 0} -"Kscr", {240, 157, 146, 166, 0} -"kscr", {240, 157, 147, 128, 0} -"lAarr", {226, 135, 154, 0} -"Lacute", {196, 185, 0} -"lacute", {196, 186, 0} -"laemptyv", {226, 166, 180, 0} -"lagran", {226, 132, 146, 0} -"Lambda", {206, 155, 0} -"lambda", {206, 187, 0} -"lang", {226, 159, 168, 0} -"Lang", {226, 159, 170, 0} -"langd", {226, 166, 145, 0} -"langle", {226, 159, 168, 0} -"lap", {226, 170, 133, 0} -"Laplacetrf", {226, 132, 146, 0} -"laquo", {194, 171, 0} -"larr", {226, 134, 144, 0} -"Larr", {226, 134, 158, 0} -"lArr", {226, 135, 144, 0} -"larrb", {226, 135, 164, 0} -"larrbfs", {226, 164, 159, 0} -"larrfs", {226, 164, 157, 0} -"larrhk", {226, 134, 169, 0} -"larrlp", {226, 134, 171, 0} -"larrpl", {226, 164, 185, 0} -"larrsim", {226, 165, 179, 0} -"larrtl", {226, 134, 162, 0} -"lat", {226, 170, 171, 0} -"latail", {226, 164, 153, 0} -"lAtail", {226, 164, 155, 0} -"late", {226, 170, 173, 0} -"lates", {226, 170, 173, 239, 184, 128, 0} -"lbarr", {226, 164, 140, 0} -"lBarr", {226, 164, 142, 0} -"lbbrk", {226, 157, 178, 0} -"lbrace", {123, 0} -"lbrack", {91, 0} -"lbrke", {226, 166, 139, 0} -"lbrksld", {226, 166, 143, 0} -"lbrkslu", {226, 166, 141, 0} -"Lcaron", {196, 189, 0} -"lcaron", {196, 190, 0} -"Lcedil", {196, 187, 0} -"lcedil", {196, 188, 0} -"lceil", {226, 140, 136, 0} -"lcub", {123, 0} -"Lcy", {208, 155, 0} -"lcy", {208, 187, 0} -"ldca", {226, 164, 182, 0} -"ldquo", {226, 128, 156, 0} -"ldquor", {226, 128, 158, 0} -"ldrdhar", {226, 165, 167, 0} -"ldrushar", {226, 165, 139, 0} -"ldsh", {226, 134, 178, 0} -"le", {226, 137, 164, 0} -"lE", {226, 137, 166, 0} -"LeftAngleBracket", {226, 159, 168, 0} -"LeftArrow", {226, 134, 144, 0} -"leftarrow", {226, 134, 144, 0} -"Leftarrow", {226, 135, 144, 0} -"LeftArrowBar", {226, 135, 164, 0} -"LeftArrowRightArrow", {226, 135, 134, 0} -"leftarrowtail", {226, 134, 162, 0} -"LeftCeiling", {226, 140, 136, 0} -"LeftDoubleBracket", {226, 159, 166, 0} -"LeftDownTeeVector", {226, 165, 161, 0} -"LeftDownVector", {226, 135, 131, 0} -"LeftDownVectorBar", {226, 165, 153, 0} -"LeftFloor", {226, 140, 138, 0} -"leftharpoondown", {226, 134, 189, 0} -"leftharpoonup", {226, 134, 188, 0} -"leftleftarrows", {226, 135, 135, 0} -"LeftRightArrow", {226, 134, 148, 0} -"leftrightarrow", {226, 134, 148, 0} -"Leftrightarrow", {226, 135, 148, 0} -"leftrightarrows", {226, 135, 134, 0} -"leftrightharpoons", {226, 135, 139, 0} -"leftrightsquigarrow", {226, 134, 173, 0} -"LeftRightVector", {226, 165, 142, 0} -"LeftTee", {226, 138, 163, 0} -"LeftTeeArrow", {226, 134, 164, 0} -"LeftTeeVector", {226, 165, 154, 0} -"leftthreetimes", {226, 139, 139, 0} -"LeftTriangle", {226, 138, 178, 0} -"LeftTriangleBar", {226, 167, 143, 0} -"LeftTriangleEqual", {226, 138, 180, 0} -"LeftUpDownVector", {226, 165, 145, 0} -"LeftUpTeeVector", {226, 165, 160, 0} -"LeftUpVector", {226, 134, 191, 0} -"LeftUpVectorBar", {226, 165, 152, 0} -"LeftVector", {226, 134, 188, 0} -"LeftVectorBar", {226, 165, 146, 0} -"leg", {226, 139, 154, 0} -"lEg", {226, 170, 139, 0} -"leq", {226, 137, 164, 0} -"leqq", {226, 137, 166, 0} -"leqslant", {226, 169, 189, 0} -"les", {226, 169, 189, 0} -"lescc", {226, 170, 168, 0} -"lesdot", {226, 169, 191, 0} -"lesdoto", {226, 170, 129, 0} -"lesdotor", {226, 170, 131, 0} -"lesg", {226, 139, 154, 239, 184, 128, 0} -"lesges", {226, 170, 147, 0} -"lessapprox", {226, 170, 133, 0} -"lessdot", {226, 139, 150, 0} -"lesseqgtr", {226, 139, 154, 0} -"lesseqqgtr", {226, 170, 139, 0} -"LessEqualGreater", {226, 139, 154, 0} -"LessFullEqual", {226, 137, 166, 0} -"LessGreater", {226, 137, 182, 0} -"lessgtr", {226, 137, 182, 0} -"LessLess", {226, 170, 161, 0} -"lesssim", {226, 137, 178, 0} -"LessSlantEqual", {226, 169, 189, 0} -"LessTilde", {226, 137, 178, 0} -"lfisht", {226, 165, 188, 0} -"lfloor", {226, 140, 138, 0} -"Lfr", {240, 157, 148, 143, 0} -"lfr", {240, 157, 148, 169, 0} -"lg", {226, 137, 182, 0} -"lgE", {226, 170, 145, 0} -"lHar", {226, 165, 162, 0} -"lhard", {226, 134, 189, 0} -"lharu", {226, 134, 188, 0} -"lharul", {226, 165, 170, 0} -"lhblk", {226, 150, 132, 0} -"LJcy", {208, 137, 0} -"ljcy", {209, 153, 0} -"ll", {226, 137, 170, 0} -"Ll", {226, 139, 152, 0} -"llarr", {226, 135, 135, 0} -"llcorner", {226, 140, 158, 0} -"Lleftarrow", {226, 135, 154, 0} -"llhard", {226, 165, 171, 0} -"lltri", {226, 151, 186, 0} -"Lmidot", {196, 191, 0} -"lmidot", {197, 128, 0} -"lmoust", {226, 142, 176, 0} -"lmoustache", {226, 142, 176, 0} -"lnap", {226, 170, 137, 0} -"lnapprox", {226, 170, 137, 0} -"lnE", {226, 137, 168, 0} -"lne", {226, 170, 135, 0} -"lneq", {226, 170, 135, 0} -"lneqq", {226, 137, 168, 0} -"lnsim", {226, 139, 166, 0} -"loang", {226, 159, 172, 0} -"loarr", {226, 135, 189, 0} -"lobrk", {226, 159, 166, 0} -"LongLeftArrow", {226, 159, 181, 0} -"longleftarrow", {226, 159, 181, 0} -"Longleftarrow", {226, 159, 184, 0} -"LongLeftRightArrow", {226, 159, 183, 0} -"longleftrightarrow", {226, 159, 183, 0} -"Longleftrightarrow", {226, 159, 186, 0} -"longmapsto", {226, 159, 188, 0} -"LongRightArrow", {226, 159, 182, 0} -"longrightarrow", {226, 159, 182, 0} -"Longrightarrow", {226, 159, 185, 0} -"looparrowleft", {226, 134, 171, 0} -"looparrowright", {226, 134, 172, 0} -"lopar", {226, 166, 133, 0} -"Lopf", {240, 157, 149, 131, 0} -"lopf", {240, 157, 149, 157, 0} -"loplus", {226, 168, 173, 0} -"lotimes", {226, 168, 180, 0} -"lowast", {226, 136, 151, 0} -"lowbar", {95, 0} -"LowerLeftArrow", {226, 134, 153, 0} -"LowerRightArrow", {226, 134, 152, 0} -"loz", {226, 151, 138, 0} -"lozenge", {226, 151, 138, 0} -"lozf", {226, 167, 171, 0} -"lpar", {40, 0} -"lparlt", {226, 166, 147, 0} -"lrarr", {226, 135, 134, 0} -"lrcorner", {226, 140, 159, 0} -"lrhar", {226, 135, 139, 0} -"lrhard", {226, 165, 173, 0} -"lrm", {226, 128, 142, 0} -"lrtri", {226, 138, 191, 0} -"lsaquo", {226, 128, 185, 0} -"Lscr", {226, 132, 146, 0} -"lscr", {240, 157, 147, 129, 0} -"Lsh", {226, 134, 176, 0} -"lsh", {226, 134, 176, 0} -"lsim", {226, 137, 178, 0} -"lsime", {226, 170, 141, 0} -"lsimg", {226, 170, 143, 0} -"lsqb", {91, 0} -"lsquo", {226, 128, 152, 0} -"lsquor", {226, 128, 154, 0} -"Lstrok", {197, 129, 0} -"lstrok", {197, 130, 0} -"Lt", {226, 137, 170, 0} -"LT", {60, 0} -"lt", {60, 0} -"ltcc", {226, 170, 166, 0} -"ltcir", {226, 169, 185, 0} -"ltdot", {226, 139, 150, 0} -"lthree", {226, 139, 139, 0} -"ltimes", {226, 139, 137, 0} -"ltlarr", {226, 165, 182, 0} -"ltquest", {226, 169, 187, 0} -"ltri", {226, 151, 131, 0} -"ltrie", {226, 138, 180, 0} -"ltrif", {226, 151, 130, 0} -"ltrPar", {226, 166, 150, 0} -"lurdshar", {226, 165, 138, 0} -"luruhar", {226, 165, 166, 0} -"lvertneqq", {226, 137, 168, 239, 184, 128, 0} -"lvnE", {226, 137, 168, 239, 184, 128, 0} -"macr", {194, 175, 0} -"male", {226, 153, 130, 0} -"malt", {226, 156, 160, 0} -"maltese", {226, 156, 160, 0} -"map", {226, 134, 166, 0} -"Map", {226, 164, 133, 0} -"mapsto", {226, 134, 166, 0} -"mapstodown", {226, 134, 167, 0} -"mapstoleft", {226, 134, 164, 0} -"mapstoup", {226, 134, 165, 0} -"marker", {226, 150, 174, 0} -"mcomma", {226, 168, 169, 0} -"Mcy", {208, 156, 0} -"mcy", {208, 188, 0} -"mdash", {226, 128, 148, 0} -"mDDot", {226, 136, 186, 0} -"measuredangle", {226, 136, 161, 0} -"MediumSpace", {226, 129, 159, 0} -"Mellintrf", {226, 132, 179, 0} -"Mfr", {240, 157, 148, 144, 0} -"mfr", {240, 157, 148, 170, 0} -"mho", {226, 132, 167, 0} -"micro", {194, 181, 0} -"mid", {226, 136, 163, 0} -"midast", {42, 0} -"midcir", {226, 171, 176, 0} -"middot", {194, 183, 0} -"minus", {226, 136, 146, 0} -"minusb", {226, 138, 159, 0} -"minusd", {226, 136, 184, 0} -"minusdu", {226, 168, 170, 0} -"MinusPlus", {226, 136, 147, 0} -"mlcp", {226, 171, 155, 0} -"mldr", {226, 128, 166, 0} -"mnplus", {226, 136, 147, 0} -"models", {226, 138, 167, 0} -"Mopf", {240, 157, 149, 132, 0} -"mopf", {240, 157, 149, 158, 0} -"mp", {226, 136, 147, 0} -"Mscr", {226, 132, 179, 0} -"mscr", {240, 157, 147, 130, 0} -"mstpos", {226, 136, 190, 0} -"Mu", {206, 156, 0} -"mu", {206, 188, 0} -"multimap", {226, 138, 184, 0} -"mumap", {226, 138, 184, 0} -"nabla", {226, 136, 135, 0} -"Nacute", {197, 131, 0} -"nacute", {197, 132, 0} -"nang", {226, 136, 160, 226, 131, 146, 0} -"nap", {226, 137, 137, 0} -"napE", {226, 169, 176, 204, 184, 0} -"napid", {226, 137, 139, 204, 184, 0} -"napos", {197, 137, 0} -"napprox", {226, 137, 137, 0} -"natur", {226, 153, 174, 0} -"natural", {226, 153, 174, 0} -"naturals", {226, 132, 149, 0} -"nbsp", {194, 160, 0} -"nbump", {226, 137, 142, 204, 184, 0} -"nbumpe", {226, 137, 143, 204, 184, 0} -"ncap", {226, 169, 131, 0} -"Ncaron", {197, 135, 0} -"ncaron", {197, 136, 0} -"Ncedil", {197, 133, 0} -"ncedil", {197, 134, 0} -"ncong", {226, 137, 135, 0} -"ncongdot", {226, 169, 173, 204, 184, 0} -"ncup", {226, 169, 130, 0} -"Ncy", {208, 157, 0} -"ncy", {208, 189, 0} -"ndash", {226, 128, 147, 0} -"ne", {226, 137, 160, 0} -"nearhk", {226, 164, 164, 0} -"nearr", {226, 134, 151, 0} -"neArr", {226, 135, 151, 0} -"nearrow", {226, 134, 151, 0} -"nedot", {226, 137, 144, 204, 184, 0} -"NegativeMediumSpace", {226, 128, 139, 0} -"NegativeThickSpace", {226, 128, 139, 0} -"NegativeThinSpace", {226, 128, 139, 0} -"NegativeVeryThinSpace", {226, 128, 139, 0} -"nequiv", {226, 137, 162, 0} -"nesear", {226, 164, 168, 0} -"nesim", {226, 137, 130, 204, 184, 0} -"NestedGreaterGreater", {226, 137, 171, 0} -"NestedLessLess", {226, 137, 170, 0} -"NewLine", {10, 0} -"nexist", {226, 136, 132, 0} -"nexists", {226, 136, 132, 0} -"Nfr", {240, 157, 148, 145, 0} -"nfr", {240, 157, 148, 171, 0} -"ngE", {226, 137, 167, 204, 184, 0} -"nge", {226, 137, 177, 0} -"ngeq", {226, 137, 177, 0} -"ngeqq", {226, 137, 167, 204, 184, 0} -"ngeqslant", {226, 169, 190, 204, 184, 0} -"nges", {226, 169, 190, 204, 184, 0} -"nGg", {226, 139, 153, 204, 184, 0} -"ngsim", {226, 137, 181, 0} -"nGt", {226, 137, 171, 226, 131, 146, 0} -"ngt", {226, 137, 175, 0} -"ngtr", {226, 137, 175, 0} -"nGtv", {226, 137, 171, 204, 184, 0} -"nharr", {226, 134, 174, 0} -"nhArr", {226, 135, 142, 0} -"nhpar", {226, 171, 178, 0} -"ni", {226, 136, 139, 0} -"nis", {226, 139, 188, 0} -"nisd", {226, 139, 186, 0} -"niv", {226, 136, 139, 0} -"NJcy", {208, 138, 0} -"njcy", {209, 154, 0} -"nlarr", {226, 134, 154, 0} -"nlArr", {226, 135, 141, 0} -"nldr", {226, 128, 165, 0} -"nlE", {226, 137, 166, 204, 184, 0} -"nle", {226, 137, 176, 0} -"nleftarrow", {226, 134, 154, 0} -"nLeftarrow", {226, 135, 141, 0} -"nleftrightarrow", {226, 134, 174, 0} -"nLeftrightarrow", {226, 135, 142, 0} -"nleq", {226, 137, 176, 0} -"nleqq", {226, 137, 166, 204, 184, 0} -"nleqslant", {226, 169, 189, 204, 184, 0} -"nles", {226, 169, 189, 204, 184, 0} -"nless", {226, 137, 174, 0} -"nLl", {226, 139, 152, 204, 184, 0} -"nlsim", {226, 137, 180, 0} -"nLt", {226, 137, 170, 226, 131, 146, 0} -"nlt", {226, 137, 174, 0} -"nltri", {226, 139, 170, 0} -"nltrie", {226, 139, 172, 0} -"nLtv", {226, 137, 170, 204, 184, 0} -"nmid", {226, 136, 164, 0} -"NoBreak", {226, 129, 160, 0} -"NonBreakingSpace", {194, 160, 0} -"Nopf", {226, 132, 149, 0} -"nopf", {240, 157, 149, 159, 0} -"not", {194, 172, 0} -"Not", {226, 171, 172, 0} -"NotCongruent", {226, 137, 162, 0} -"NotCupCap", {226, 137, 173, 0} -"NotDoubleVerticalBar", {226, 136, 166, 0} -"NotElement", {226, 136, 137, 0} -"NotEqual", {226, 137, 160, 0} -"NotEqualTilde", {226, 137, 130, 204, 184, 0} -"NotExists", {226, 136, 132, 0} -"NotGreater", {226, 137, 175, 0} -"NotGreaterEqual", {226, 137, 177, 0} -"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0} -"NotGreaterGreater", {226, 137, 171, 204, 184, 0} -"NotGreaterLess", {226, 137, 185, 0} -"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0} -"NotGreaterTilde", {226, 137, 181, 0} -"NotHumpDownHump", {226, 137, 142, 204, 184, 0} -"NotHumpEqual", {226, 137, 143, 204, 184, 0} -"notin", {226, 136, 137, 0} -"notindot", {226, 139, 181, 204, 184, 0} -"notinE", {226, 139, 185, 204, 184, 0} -"notinva", {226, 136, 137, 0} -"notinvb", {226, 139, 183, 0} -"notinvc", {226, 139, 182, 0} -"NotLeftTriangle", {226, 139, 170, 0} -"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0} -"NotLeftTriangleEqual", {226, 139, 172, 0} -"NotLess", {226, 137, 174, 0} -"NotLessEqual", {226, 137, 176, 0} -"NotLessGreater", {226, 137, 184, 0} -"NotLessLess", {226, 137, 170, 204, 184, 0} -"NotLessSlantEqual", {226, 169, 189, 204, 184, 0} -"NotLessTilde", {226, 137, 180, 0} -"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0} -"NotNestedLessLess", {226, 170, 161, 204, 184, 0} -"notni", {226, 136, 140, 0} -"notniva", {226, 136, 140, 0} -"notnivb", {226, 139, 190, 0} -"notnivc", {226, 139, 189, 0} -"NotPrecedes", {226, 138, 128, 0} -"NotPrecedesEqual", {226, 170, 175, 204, 184, 0} -"NotPrecedesSlantEqual", {226, 139, 160, 0} -"NotReverseElement", {226, 136, 140, 0} -"NotRightTriangle", {226, 139, 171, 0} -"NotRightTriangleBar", {226, 167, 144, 204, 184, 0} -"NotRightTriangleEqual", {226, 139, 173, 0} -"NotSquareSubset", {226, 138, 143, 204, 184, 0} -"NotSquareSubsetEqual", {226, 139, 162, 0} -"NotSquareSuperset", {226, 138, 144, 204, 184, 0} -"NotSquareSupersetEqual", {226, 139, 163, 0} -"NotSubset", {226, 138, 130, 226, 131, 146, 0} -"NotSubsetEqual", {226, 138, 136, 0} -"NotSucceeds", {226, 138, 129, 0} -"NotSucceedsEqual", {226, 170, 176, 204, 184, 0} -"NotSucceedsSlantEqual", {226, 139, 161, 0} -"NotSucceedsTilde", {226, 137, 191, 204, 184, 0} -"NotSuperset", {226, 138, 131, 226, 131, 146, 0} -"NotSupersetEqual", {226, 138, 137, 0} -"NotTilde", {226, 137, 129, 0} -"NotTildeEqual", {226, 137, 132, 0} -"NotTildeFullEqual", {226, 137, 135, 0} -"NotTildeTilde", {226, 137, 137, 0} -"NotVerticalBar", {226, 136, 164, 0} -"npar", {226, 136, 166, 0} -"nparallel", {226, 136, 166, 0} -"nparsl", {226, 171, 189, 226, 131, 165, 0} -"npart", {226, 136, 130, 204, 184, 0} -"npolint", {226, 168, 148, 0} -"npr", {226, 138, 128, 0} -"nprcue", {226, 139, 160, 0} -"npre", {226, 170, 175, 204, 184, 0} -"nprec", {226, 138, 128, 0} -"npreceq", {226, 170, 175, 204, 184, 0} -"nrarr", {226, 134, 155, 0} -"nrArr", {226, 135, 143, 0} -"nrarrc", {226, 164, 179, 204, 184, 0} -"nrarrw", {226, 134, 157, 204, 184, 0} -"nrightarrow", {226, 134, 155, 0} -"nRightarrow", {226, 135, 143, 0} -"nrtri", {226, 139, 171, 0} -"nrtrie", {226, 139, 173, 0} -"nsc", {226, 138, 129, 0} -"nsccue", {226, 139, 161, 0} -"nsce", {226, 170, 176, 204, 184, 0} -"Nscr", {240, 157, 146, 169, 0} -"nscr", {240, 157, 147, 131, 0} -"nshortmid", {226, 136, 164, 0} -"nshortparallel", {226, 136, 166, 0} -"nsim", {226, 137, 129, 0} -"nsime", {226, 137, 132, 0} -"nsimeq", {226, 137, 132, 0} -"nsmid", {226, 136, 164, 0} -"nspar", {226, 136, 166, 0} -"nsqsube", {226, 139, 162, 0} -"nsqsupe", {226, 139, 163, 0} -"nsub", {226, 138, 132, 0} -"nsube", {226, 138, 136, 0} -"nsubE", {226, 171, 133, 204, 184, 0} -"nsubset", {226, 138, 130, 226, 131, 146, 0} -"nsubseteq", {226, 138, 136, 0} -"nsubseteqq", {226, 171, 133, 204, 184, 0} -"nsucc", {226, 138, 129, 0} -"nsucceq", {226, 170, 176, 204, 184, 0} -"nsup", {226, 138, 133, 0} -"nsupe", {226, 138, 137, 0} -"nsupE", {226, 171, 134, 204, 184, 0} -"nsupset", {226, 138, 131, 226, 131, 146, 0} -"nsupseteq", {226, 138, 137, 0} -"nsupseteqq", {226, 171, 134, 204, 184, 0} -"ntgl", {226, 137, 185, 0} -"Ntilde", {195, 145, 0} -"ntilde", {195, 177, 0} -"ntlg", {226, 137, 184, 0} -"ntriangleleft", {226, 139, 170, 0} -"ntrianglelefteq", {226, 139, 172, 0} -"ntriangleright", {226, 139, 171, 0} -"ntrianglerighteq", {226, 139, 173, 0} -"Nu", {206, 157, 0} -"nu", {206, 189, 0} -"num", {35, 0} -"numero", {226, 132, 150, 0} -"numsp", {226, 128, 135, 0} -"nvap", {226, 137, 141, 226, 131, 146, 0} -"nvdash", {226, 138, 172, 0} -"nvDash", {226, 138, 173, 0} -"nVdash", {226, 138, 174, 0} -"nVDash", {226, 138, 175, 0} -"nvge", {226, 137, 165, 226, 131, 146, 0} -"nvgt", {62, 226, 131, 146, 0} -"nvHarr", {226, 164, 132, 0} -"nvinfin", {226, 167, 158, 0} -"nvlArr", {226, 164, 130, 0} -"nvle", {226, 137, 164, 226, 131, 146, 0} -"nvlt", {60, 226, 131, 146, 0} -"nvltrie", {226, 138, 180, 226, 131, 146, 0} -"nvrArr", {226, 164, 131, 0} -"nvrtrie", {226, 138, 181, 226, 131, 146, 0} -"nvsim", {226, 136, 188, 226, 131, 146, 0} -"nwarhk", {226, 164, 163, 0} -"nwarr", {226, 134, 150, 0} -"nwArr", {226, 135, 150, 0} -"nwarrow", {226, 134, 150, 0} -"nwnear", {226, 164, 167, 0} -"Oacute", {195, 147, 0} -"oacute", {195, 179, 0} -"oast", {226, 138, 155, 0} -"ocir", {226, 138, 154, 0} -"Ocirc", {195, 148, 0} -"ocirc", {195, 180, 0} -"Ocy", {208, 158, 0} -"ocy", {208, 190, 0} -"odash", {226, 138, 157, 0} -"Odblac", {197, 144, 0} -"odblac", {197, 145, 0} -"odiv", {226, 168, 184, 0} -"odot", {226, 138, 153, 0} -"odsold", {226, 166, 188, 0} -"OElig", {197, 146, 0} -"oelig", {197, 147, 0} -"ofcir", {226, 166, 191, 0} -"Ofr", {240, 157, 148, 146, 0} -"ofr", {240, 157, 148, 172, 0} -"ogon", {203, 155, 0} -"Ograve", {195, 146, 0} -"ograve", {195, 178, 0} -"ogt", {226, 167, 129, 0} -"ohbar", {226, 166, 181, 0} -"ohm", {206, 169, 0} -"oint", {226, 136, 174, 0} -"olarr", {226, 134, 186, 0} -"olcir", {226, 166, 190, 0} -"olcross", {226, 166, 187, 0} -"oline", {226, 128, 190, 0} -"olt", {226, 167, 128, 0} -"Omacr", {197, 140, 0} -"omacr", {197, 141, 0} -"Omega", {206, 169, 0} -"omega", {207, 137, 0} -"Omicron", {206, 159, 0} -"omicron", {206, 191, 0} -"omid", {226, 166, 182, 0} -"ominus", {226, 138, 150, 0} -"Oopf", {240, 157, 149, 134, 0} -"oopf", {240, 157, 149, 160, 0} -"opar", {226, 166, 183, 0} -"OpenCurlyDoubleQuote", {226, 128, 156, 0} -"OpenCurlyQuote", {226, 128, 152, 0} -"operp", {226, 166, 185, 0} -"oplus", {226, 138, 149, 0} -"or", {226, 136, 168, 0} -"Or", {226, 169, 148, 0} -"orarr", {226, 134, 187, 0} -"ord", {226, 169, 157, 0} -"order", {226, 132, 180, 0} -"orderof", {226, 132, 180, 0} -"ordf", {194, 170, 0} -"ordm", {194, 186, 0} -"origof", {226, 138, 182, 0} -"oror", {226, 169, 150, 0} -"orslope", {226, 169, 151, 0} -"orv", {226, 169, 155, 0} -"oS", {226, 147, 136, 0} -"oscr", {226, 132, 180, 0} -"Oscr", {240, 157, 146, 170, 0} -"Oslash", {195, 152, 0} -"oslash", {195, 184, 0} -"osol", {226, 138, 152, 0} -"Otilde", {195, 149, 0} -"otilde", {195, 181, 0} -"otimes", {226, 138, 151, 0} -"Otimes", {226, 168, 183, 0} -"otimesas", {226, 168, 182, 0} -"Ouml", {195, 150, 0} -"ouml", {195, 182, 0} -"ovbar", {226, 140, 189, 0} -"OverBar", {226, 128, 190, 0} -"OverBrace", {226, 143, 158, 0} -"OverBracket", {226, 142, 180, 0} -"OverParenthesis", {226, 143, 156, 0} -"par", {226, 136, 165, 0} -"para", {194, 182, 0} -"parallel", {226, 136, 165, 0} -"parsim", {226, 171, 179, 0} -"parsl", {226, 171, 189, 0} -"part", {226, 136, 130, 0} -"PartialD", {226, 136, 130, 0} -"Pcy", {208, 159, 0} -"pcy", {208, 191, 0} -"percnt", {37, 0} -"period", {46, 0} -"permil", {226, 128, 176, 0} -"perp", {226, 138, 165, 0} -"pertenk", {226, 128, 177, 0} -"Pfr", {240, 157, 148, 147, 0} -"pfr", {240, 157, 148, 173, 0} -"Phi", {206, 166, 0} -"phi", {207, 134, 0} -"phiv", {207, 149, 0} -"phmmat", {226, 132, 179, 0} -"phone", {226, 152, 142, 0} -"Pi", {206, 160, 0} -"pi", {207, 128, 0} -"pitchfork", {226, 139, 148, 0} -"piv", {207, 150, 0} -"planck", {226, 132, 143, 0} -"planckh", {226, 132, 142, 0} -"plankv", {226, 132, 143, 0} -"plus", {43, 0} -"plusacir", {226, 168, 163, 0} -"plusb", {226, 138, 158, 0} -"pluscir", {226, 168, 162, 0} -"plusdo", {226, 136, 148, 0} -"plusdu", {226, 168, 165, 0} -"pluse", {226, 169, 178, 0} -"PlusMinus", {194, 177, 0} -"plusmn", {194, 177, 0} -"plussim", {226, 168, 166, 0} -"plustwo", {226, 168, 167, 0} -"pm", {194, 177, 0} -"Poincareplane", {226, 132, 140, 0} -"pointint", {226, 168, 149, 0} -"Popf", {226, 132, 153, 0} -"popf", {240, 157, 149, 161, 0} -"pound", {194, 163, 0} -"pr", {226, 137, 186, 0} -"Pr", {226, 170, 187, 0} -"prap", {226, 170, 183, 0} -"prcue", {226, 137, 188, 0} -"pre", {226, 170, 175, 0} -"prE", {226, 170, 179, 0} -"prec", {226, 137, 186, 0} -"precapprox", {226, 170, 183, 0} -"preccurlyeq", {226, 137, 188, 0} -"Precedes", {226, 137, 186, 0} -"PrecedesEqual", {226, 170, 175, 0} -"PrecedesSlantEqual", {226, 137, 188, 0} -"PrecedesTilde", {226, 137, 190, 0} -"preceq", {226, 170, 175, 0} -"precnapprox", {226, 170, 185, 0} -"precneqq", {226, 170, 181, 0} -"precnsim", {226, 139, 168, 0} -"precsim", {226, 137, 190, 0} -"prime", {226, 128, 178, 0} -"Prime", {226, 128, 179, 0} -"primes", {226, 132, 153, 0} -"prnap", {226, 170, 185, 0} -"prnE", {226, 170, 181, 0} -"prnsim", {226, 139, 168, 0} -"prod", {226, 136, 143, 0} -"Product", {226, 136, 143, 0} -"profalar", {226, 140, 174, 0} -"profline", {226, 140, 146, 0} -"profsurf", {226, 140, 147, 0} -"prop", {226, 136, 157, 0} -"Proportion", {226, 136, 183, 0} -"Proportional", {226, 136, 157, 0} -"propto", {226, 136, 157, 0} -"prsim", {226, 137, 190, 0} -"prurel", {226, 138, 176, 0} -"Pscr", {240, 157, 146, 171, 0} -"pscr", {240, 157, 147, 133, 0} -"Psi", {206, 168, 0} -"psi", {207, 136, 0} -"puncsp", {226, 128, 136, 0} -"Qfr", {240, 157, 148, 148, 0} -"qfr", {240, 157, 148, 174, 0} -"qint", {226, 168, 140, 0} -"Qopf", {226, 132, 154, 0} -"qopf", {240, 157, 149, 162, 0} -"qprime", {226, 129, 151, 0} -"Qscr", {240, 157, 146, 172, 0} -"qscr", {240, 157, 147, 134, 0} -"quaternions", {226, 132, 141, 0} -"quatint", {226, 168, 150, 0} -"quest", {63, 0} -"questeq", {226, 137, 159, 0} -"QUOT", {34, 0} -"quot", {34, 0} -"rAarr", {226, 135, 155, 0} -"race", {226, 136, 189, 204, 177, 0} -"Racute", {197, 148, 0} -"racute", {197, 149, 0} -"radic", {226, 136, 154, 0} -"raemptyv", {226, 166, 179, 0} -"rang", {226, 159, 169, 0} -"Rang", {226, 159, 171, 0} -"rangd", {226, 166, 146, 0} -"range", {226, 166, 165, 0} -"rangle", {226, 159, 169, 0} -"raquo", {194, 187, 0} -"rarr", {226, 134, 146, 0} -"Rarr", {226, 134, 160, 0} -"rArr", {226, 135, 146, 0} -"rarrap", {226, 165, 181, 0} -"rarrb", {226, 135, 165, 0} -"rarrbfs", {226, 164, 160, 0} -"rarrc", {226, 164, 179, 0} -"rarrfs", {226, 164, 158, 0} -"rarrhk", {226, 134, 170, 0} -"rarrlp", {226, 134, 172, 0} -"rarrpl", {226, 165, 133, 0} -"rarrsim", {226, 165, 180, 0} -"rarrtl", {226, 134, 163, 0} -"Rarrtl", {226, 164, 150, 0} -"rarrw", {226, 134, 157, 0} -"ratail", {226, 164, 154, 0} -"rAtail", {226, 164, 156, 0} -"ratio", {226, 136, 182, 0} -"rationals", {226, 132, 154, 0} -"rbarr", {226, 164, 141, 0} -"rBarr", {226, 164, 143, 0} -"RBarr", {226, 164, 144, 0} -"rbbrk", {226, 157, 179, 0} -"rbrace", {125, 0} -"rbrack", {93, 0} -"rbrke", {226, 166, 140, 0} -"rbrksld", {226, 166, 142, 0} -"rbrkslu", {226, 166, 144, 0} -"Rcaron", {197, 152, 0} -"rcaron", {197, 153, 0} -"Rcedil", {197, 150, 0} -"rcedil", {197, 151, 0} -"rceil", {226, 140, 137, 0} -"rcub", {125, 0} -"Rcy", {208, 160, 0} -"rcy", {209, 128, 0} -"rdca", {226, 164, 183, 0} -"rdldhar", {226, 165, 169, 0} -"rdquo", {226, 128, 157, 0} -"rdquor", {226, 128, 157, 0} -"rdsh", {226, 134, 179, 0} -"Re", {226, 132, 156, 0} -"real", {226, 132, 156, 0} -"realine", {226, 132, 155, 0} -"realpart", {226, 132, 156, 0} -"reals", {226, 132, 157, 0} -"rect", {226, 150, 173, 0} -"REG", {194, 174, 0} -"reg", {194, 174, 0} -"ReverseElement", {226, 136, 139, 0} -"ReverseEquilibrium", {226, 135, 139, 0} -"ReverseUpEquilibrium", {226, 165, 175, 0} -"rfisht", {226, 165, 189, 0} -"rfloor", {226, 140, 139, 0} -"Rfr", {226, 132, 156, 0} -"rfr", {240, 157, 148, 175, 0} -"rHar", {226, 165, 164, 0} -"rhard", {226, 135, 129, 0} -"rharu", {226, 135, 128, 0} -"rharul", {226, 165, 172, 0} -"Rho", {206, 161, 0} -"rho", {207, 129, 0} -"rhov", {207, 177, 0} -"RightAngleBracket", {226, 159, 169, 0} -"RightArrow", {226, 134, 146, 0} -"rightarrow", {226, 134, 146, 0} -"Rightarrow", {226, 135, 146, 0} -"RightArrowBar", {226, 135, 165, 0} -"RightArrowLeftArrow", {226, 135, 132, 0} -"rightarrowtail", {226, 134, 163, 0} -"RightCeiling", {226, 140, 137, 0} -"RightDoubleBracket", {226, 159, 167, 0} -"RightDownTeeVector", {226, 165, 157, 0} -"RightDownVector", {226, 135, 130, 0} -"RightDownVectorBar", {226, 165, 149, 0} -"RightFloor", {226, 140, 139, 0} -"rightharpoondown", {226, 135, 129, 0} -"rightharpoonup", {226, 135, 128, 0} -"rightleftarrows", {226, 135, 132, 0} -"rightleftharpoons", {226, 135, 140, 0} -"rightrightarrows", {226, 135, 137, 0} -"rightsquigarrow", {226, 134, 157, 0} -"RightTee", {226, 138, 162, 0} -"RightTeeArrow", {226, 134, 166, 0} -"RightTeeVector", {226, 165, 155, 0} -"rightthreetimes", {226, 139, 140, 0} -"RightTriangle", {226, 138, 179, 0} -"RightTriangleBar", {226, 167, 144, 0} -"RightTriangleEqual", {226, 138, 181, 0} -"RightUpDownVector", {226, 165, 143, 0} -"RightUpTeeVector", {226, 165, 156, 0} -"RightUpVector", {226, 134, 190, 0} -"RightUpVectorBar", {226, 165, 148, 0} -"RightVector", {226, 135, 128, 0} -"RightVectorBar", {226, 165, 147, 0} -"ring", {203, 154, 0} -"risingdotseq", {226, 137, 147, 0} -"rlarr", {226, 135, 132, 0} -"rlhar", {226, 135, 140, 0} -"rlm", {226, 128, 143, 0} -"rmoust", {226, 142, 177, 0} -"rmoustache", {226, 142, 177, 0} -"rnmid", {226, 171, 174, 0} -"roang", {226, 159, 173, 0} -"roarr", {226, 135, 190, 0} -"robrk", {226, 159, 167, 0} -"ropar", {226, 166, 134, 0} -"Ropf", {226, 132, 157, 0} -"ropf", {240, 157, 149, 163, 0} -"roplus", {226, 168, 174, 0} -"rotimes", {226, 168, 181, 0} -"RoundImplies", {226, 165, 176, 0} -"rpar", {41, 0} -"rpargt", {226, 166, 148, 0} -"rppolint", {226, 168, 146, 0} -"rrarr", {226, 135, 137, 0} -"Rrightarrow", {226, 135, 155, 0} -"rsaquo", {226, 128, 186, 0} -"Rscr", {226, 132, 155, 0} -"rscr", {240, 157, 147, 135, 0} -"Rsh", {226, 134, 177, 0} -"rsh", {226, 134, 177, 0} -"rsqb", {93, 0} -"rsquo", {226, 128, 153, 0} -"rsquor", {226, 128, 153, 0} -"rthree", {226, 139, 140, 0} -"rtimes", {226, 139, 138, 0} -"rtri", {226, 150, 185, 0} -"rtrie", {226, 138, 181, 0} -"rtrif", {226, 150, 184, 0} -"rtriltri", {226, 167, 142, 0} -"RuleDelayed", {226, 167, 180, 0} -"ruluhar", {226, 165, 168, 0} -"rx", {226, 132, 158, 0} -"Sacute", {197, 154, 0} -"sacute", {197, 155, 0} -"sbquo", {226, 128, 154, 0} -"sc", {226, 137, 187, 0} -"Sc", {226, 170, 188, 0} -"scap", {226, 170, 184, 0} -"Scaron", {197, 160, 0} -"scaron", {197, 161, 0} -"sccue", {226, 137, 189, 0} -"sce", {226, 170, 176, 0} -"scE", {226, 170, 180, 0} -"Scedil", {197, 158, 0} -"scedil", {197, 159, 0} -"Scirc", {197, 156, 0} -"scirc", {197, 157, 0} -"scnap", {226, 170, 186, 0} -"scnE", {226, 170, 182, 0} -"scnsim", {226, 139, 169, 0} -"scpolint", {226, 168, 147, 0} -"scsim", {226, 137, 191, 0} -"Scy", {208, 161, 0} -"scy", {209, 129, 0} -"sdot", {226, 139, 133, 0} -"sdotb", {226, 138, 161, 0} -"sdote", {226, 169, 166, 0} -"searhk", {226, 164, 165, 0} -"searr", {226, 134, 152, 0} -"seArr", {226, 135, 152, 0} -"searrow", {226, 134, 152, 0} -"sect", {194, 167, 0} -"semi", {59, 0} -"seswar", {226, 164, 169, 0} -"setminus", {226, 136, 150, 0} -"setmn", {226, 136, 150, 0} -"sext", {226, 156, 182, 0} -"Sfr", {240, 157, 148, 150, 0} -"sfr", {240, 157, 148, 176, 0} -"sfrown", {226, 140, 162, 0} -"sharp", {226, 153, 175, 0} -"SHCHcy", {208, 169, 0} -"shchcy", {209, 137, 0} -"SHcy", {208, 168, 0} -"shcy", {209, 136, 0} -"ShortDownArrow", {226, 134, 147, 0} -"ShortLeftArrow", {226, 134, 144, 0} -"shortmid", {226, 136, 163, 0} -"shortparallel", {226, 136, 165, 0} -"ShortRightArrow", {226, 134, 146, 0} -"ShortUpArrow", {226, 134, 145, 0} -"shy", {194, 173, 0} -"Sigma", {206, 163, 0} -"sigma", {207, 131, 0} -"sigmaf", {207, 130, 0} -"sigmav", {207, 130, 0} -"sim", {226, 136, 188, 0} -"simdot", {226, 169, 170, 0} -"sime", {226, 137, 131, 0} -"simeq", {226, 137, 131, 0} -"simg", {226, 170, 158, 0} -"simgE", {226, 170, 160, 0} -"siml", {226, 170, 157, 0} -"simlE", {226, 170, 159, 0} -"simne", {226, 137, 134, 0} -"simplus", {226, 168, 164, 0} -"simrarr", {226, 165, 178, 0} -"slarr", {226, 134, 144, 0} -"SmallCircle", {226, 136, 152, 0} -"smallsetminus", {226, 136, 150, 0} -"smashp", {226, 168, 179, 0} -"smeparsl", {226, 167, 164, 0} -"smid", {226, 136, 163, 0} -"smile", {226, 140, 163, 0} -"smt", {226, 170, 170, 0} -"smte", {226, 170, 172, 0} -"smtes", {226, 170, 172, 239, 184, 128, 0} -"SOFTcy", {208, 172, 0} -"softcy", {209, 140, 0} -"sol", {47, 0} -"solb", {226, 167, 132, 0} -"solbar", {226, 140, 191, 0} -"Sopf", {240, 157, 149, 138, 0} -"sopf", {240, 157, 149, 164, 0} -"spades", {226, 153, 160, 0} -"spadesuit", {226, 153, 160, 0} -"spar", {226, 136, 165, 0} -"sqcap", {226, 138, 147, 0} -"sqcaps", {226, 138, 147, 239, 184, 128, 0} -"sqcup", {226, 138, 148, 0} -"sqcups", {226, 138, 148, 239, 184, 128, 0} -"Sqrt", {226, 136, 154, 0} -"sqsub", {226, 138, 143, 0} -"sqsube", {226, 138, 145, 0} -"sqsubset", {226, 138, 143, 0} -"sqsubseteq", {226, 138, 145, 0} -"sqsup", {226, 138, 144, 0} -"sqsupe", {226, 138, 146, 0} -"sqsupset", {226, 138, 144, 0} -"sqsupseteq", {226, 138, 146, 0} -"squ", {226, 150, 161, 0} -"Square", {226, 150, 161, 0} -"square", {226, 150, 161, 0} -"SquareIntersection", {226, 138, 147, 0} -"SquareSubset", {226, 138, 143, 0} -"SquareSubsetEqual", {226, 138, 145, 0} -"SquareSuperset", {226, 138, 144, 0} -"SquareSupersetEqual", {226, 138, 146, 0} -"SquareUnion", {226, 138, 148, 0} -"squarf", {226, 150, 170, 0} -"squf", {226, 150, 170, 0} -"srarr", {226, 134, 146, 0} -"Sscr", {240, 157, 146, 174, 0} -"sscr", {240, 157, 147, 136, 0} -"ssetmn", {226, 136, 150, 0} -"ssmile", {226, 140, 163, 0} -"sstarf", {226, 139, 134, 0} -"Star", {226, 139, 134, 0} -"star", {226, 152, 134, 0} -"starf", {226, 152, 133, 0} -"straightepsilon", {207, 181, 0} -"straightphi", {207, 149, 0} -"strns", {194, 175, 0} -"sub", {226, 138, 130, 0} -"Sub", {226, 139, 144, 0} -"subdot", {226, 170, 189, 0} -"sube", {226, 138, 134, 0} -"subE", {226, 171, 133, 0} -"subedot", {226, 171, 131, 0} -"submult", {226, 171, 129, 0} -"subne", {226, 138, 138, 0} -"subnE", {226, 171, 139, 0} -"subplus", {226, 170, 191, 0} -"subrarr", {226, 165, 185, 0} -"subset", {226, 138, 130, 0} -"Subset", {226, 139, 144, 0} -"subseteq", {226, 138, 134, 0} -"subseteqq", {226, 171, 133, 0} -"SubsetEqual", {226, 138, 134, 0} -"subsetneq", {226, 138, 138, 0} -"subsetneqq", {226, 171, 139, 0} -"subsim", {226, 171, 135, 0} -"subsub", {226, 171, 149, 0} -"subsup", {226, 171, 147, 0} -"succ", {226, 137, 187, 0} -"succapprox", {226, 170, 184, 0} -"succcurlyeq", {226, 137, 189, 0} -"Succeeds", {226, 137, 187, 0} -"SucceedsEqual", {226, 170, 176, 0} -"SucceedsSlantEqual", {226, 137, 189, 0} -"SucceedsTilde", {226, 137, 191, 0} -"succeq", {226, 170, 176, 0} -"succnapprox", {226, 170, 186, 0} -"succneqq", {226, 170, 182, 0} -"succnsim", {226, 139, 169, 0} -"succsim", {226, 137, 191, 0} -"SuchThat", {226, 136, 139, 0} -"Sum", {226, 136, 145, 0} -"sum", {226, 136, 145, 0} -"sung", {226, 153, 170, 0} -"sup", {226, 138, 131, 0} -"Sup", {226, 139, 145, 0} -"sup1", {194, 185, 0} -"sup2", {194, 178, 0} -"sup3", {194, 179, 0} -"supdot", {226, 170, 190, 0} -"supdsub", {226, 171, 152, 0} -"supe", {226, 138, 135, 0} -"supE", {226, 171, 134, 0} -"supedot", {226, 171, 132, 0} -"Superset", {226, 138, 131, 0} -"SupersetEqual", {226, 138, 135, 0} -"suphsol", {226, 159, 137, 0} -"suphsub", {226, 171, 151, 0} -"suplarr", {226, 165, 187, 0} -"supmult", {226, 171, 130, 0} -"supne", {226, 138, 139, 0} -"supnE", {226, 171, 140, 0} -"supplus", {226, 171, 128, 0} -"supset", {226, 138, 131, 0} -"Supset", {226, 139, 145, 0} -"supseteq", {226, 138, 135, 0} -"supseteqq", {226, 171, 134, 0} -"supsetneq", {226, 138, 139, 0} -"supsetneqq", {226, 171, 140, 0} -"supsim", {226, 171, 136, 0} -"supsub", {226, 171, 148, 0} -"supsup", {226, 171, 150, 0} -"swarhk", {226, 164, 166, 0} -"swarr", {226, 134, 153, 0} -"swArr", {226, 135, 153, 0} -"swarrow", {226, 134, 153, 0} -"swnwar", {226, 164, 170, 0} -"szlig", {195, 159, 0} -"Tab", {9, 0} -"target", {226, 140, 150, 0} -"Tau", {206, 164, 0} -"tau", {207, 132, 0} -"tbrk", {226, 142, 180, 0} -"Tcaron", {197, 164, 0} -"tcaron", {197, 165, 0} -"Tcedil", {197, 162, 0} -"tcedil", {197, 163, 0} -"Tcy", {208, 162, 0} -"tcy", {209, 130, 0} -"tdot", {226, 131, 155, 0} -"telrec", {226, 140, 149, 0} -"Tfr", {240, 157, 148, 151, 0} -"tfr", {240, 157, 148, 177, 0} -"there4", {226, 136, 180, 0} -"Therefore", {226, 136, 180, 0} -"therefore", {226, 136, 180, 0} -"Theta", {206, 152, 0} -"theta", {206, 184, 0} -"thetasym", {207, 145, 0} -"thetav", {207, 145, 0} -"thickapprox", {226, 137, 136, 0} -"thicksim", {226, 136, 188, 0} -"ThickSpace", {226, 129, 159, 226, 128, 138, 0} -"thinsp", {226, 128, 137, 0} -"ThinSpace", {226, 128, 137, 0} -"thkap", {226, 137, 136, 0} -"thksim", {226, 136, 188, 0} -"THORN", {195, 158, 0} -"thorn", {195, 190, 0} -"tilde", {203, 156, 0} -"Tilde", {226, 136, 188, 0} -"TildeEqual", {226, 137, 131, 0} -"TildeFullEqual", {226, 137, 133, 0} -"TildeTilde", {226, 137, 136, 0} -"times", {195, 151, 0} -"timesb", {226, 138, 160, 0} -"timesbar", {226, 168, 177, 0} -"timesd", {226, 168, 176, 0} -"tint", {226, 136, 173, 0} -"toea", {226, 164, 168, 0} -"top", {226, 138, 164, 0} -"topbot", {226, 140, 182, 0} -"topcir", {226, 171, 177, 0} -"Topf", {240, 157, 149, 139, 0} -"topf", {240, 157, 149, 165, 0} -"topfork", {226, 171, 154, 0} -"tosa", {226, 164, 169, 0} -"tprime", {226, 128, 180, 0} -"TRADE", {226, 132, 162, 0} -"trade", {226, 132, 162, 0} -"triangle", {226, 150, 181, 0} -"triangledown", {226, 150, 191, 0} -"triangleleft", {226, 151, 131, 0} -"trianglelefteq", {226, 138, 180, 0} -"triangleq", {226, 137, 156, 0} -"triangleright", {226, 150, 185, 0} -"trianglerighteq", {226, 138, 181, 0} -"tridot", {226, 151, 172, 0} -"trie", {226, 137, 156, 0} -"triminus", {226, 168, 186, 0} -"TripleDot", {226, 131, 155, 0} -"triplus", {226, 168, 185, 0} -"trisb", {226, 167, 141, 0} -"tritime", {226, 168, 187, 0} -"trpezium", {226, 143, 162, 0} -"Tscr", {240, 157, 146, 175, 0} -"tscr", {240, 157, 147, 137, 0} -"TScy", {208, 166, 0} -"tscy", {209, 134, 0} -"TSHcy", {208, 139, 0} -"tshcy", {209, 155, 0} -"Tstrok", {197, 166, 0} -"tstrok", {197, 167, 0} -"twixt", {226, 137, 172, 0} -"twoheadleftarrow", {226, 134, 158, 0} -"twoheadrightarrow", {226, 134, 160, 0} -"Uacute", {195, 154, 0} -"uacute", {195, 186, 0} -"uarr", {226, 134, 145, 0} -"Uarr", {226, 134, 159, 0} -"uArr", {226, 135, 145, 0} -"Uarrocir", {226, 165, 137, 0} -"Ubrcy", {208, 142, 0} -"ubrcy", {209, 158, 0} -"Ubreve", {197, 172, 0} -"ubreve", {197, 173, 0} -"Ucirc", {195, 155, 0} -"ucirc", {195, 187, 0} -"Ucy", {208, 163, 0} -"ucy", {209, 131, 0} -"udarr", {226, 135, 133, 0} -"Udblac", {197, 176, 0} -"udblac", {197, 177, 0} -"udhar", {226, 165, 174, 0} -"ufisht", {226, 165, 190, 0} -"Ufr", {240, 157, 148, 152, 0} -"ufr", {240, 157, 148, 178, 0} -"Ugrave", {195, 153, 0} -"ugrave", {195, 185, 0} -"uHar", {226, 165, 163, 0} -"uharl", {226, 134, 191, 0} -"uharr", {226, 134, 190, 0} -"uhblk", {226, 150, 128, 0} -"ulcorn", {226, 140, 156, 0} -"ulcorner", {226, 140, 156, 0} -"ulcrop", {226, 140, 143, 0} -"ultri", {226, 151, 184, 0} -"Umacr", {197, 170, 0} -"umacr", {197, 171, 0} -"uml", {194, 168, 0} -"UnderBar", {95, 0} -"UnderBrace", {226, 143, 159, 0} -"UnderBracket", {226, 142, 181, 0} -"UnderParenthesis", {226, 143, 157, 0} -"Union", {226, 139, 131, 0} -"UnionPlus", {226, 138, 142, 0} -"Uogon", {197, 178, 0} -"uogon", {197, 179, 0} -"Uopf", {240, 157, 149, 140, 0} -"uopf", {240, 157, 149, 166, 0} -"UpArrow", {226, 134, 145, 0} -"uparrow", {226, 134, 145, 0} -"Uparrow", {226, 135, 145, 0} -"UpArrowBar", {226, 164, 146, 0} -"UpArrowDownArrow", {226, 135, 133, 0} -"UpDownArrow", {226, 134, 149, 0} -"updownarrow", {226, 134, 149, 0} -"Updownarrow", {226, 135, 149, 0} -"UpEquilibrium", {226, 165, 174, 0} -"upharpoonleft", {226, 134, 191, 0} -"upharpoonright", {226, 134, 190, 0} -"uplus", {226, 138, 142, 0} -"UpperLeftArrow", {226, 134, 150, 0} -"UpperRightArrow", {226, 134, 151, 0} -"upsi", {207, 133, 0} -"Upsi", {207, 146, 0} -"upsih", {207, 146, 0} -"Upsilon", {206, 165, 0} -"upsilon", {207, 133, 0} -"UpTee", {226, 138, 165, 0} -"UpTeeArrow", {226, 134, 165, 0} -"upuparrows", {226, 135, 136, 0} -"urcorn", {226, 140, 157, 0} -"urcorner", {226, 140, 157, 0} -"urcrop", {226, 140, 142, 0} -"Uring", {197, 174, 0} -"uring", {197, 175, 0} -"urtri", {226, 151, 185, 0} -"Uscr", {240, 157, 146, 176, 0} -"uscr", {240, 157, 147, 138, 0} -"utdot", {226, 139, 176, 0} -"Utilde", {197, 168, 0} -"utilde", {197, 169, 0} -"utri", {226, 150, 181, 0} -"utrif", {226, 150, 180, 0} -"uuarr", {226, 135, 136, 0} -"Uuml", {195, 156, 0} -"uuml", {195, 188, 0} -"uwangle", {226, 166, 167, 0} -"vangrt", {226, 166, 156, 0} -"varepsilon", {207, 181, 0} -"varkappa", {207, 176, 0} -"varnothing", {226, 136, 133, 0} -"varphi", {207, 149, 0} -"varpi", {207, 150, 0} -"varpropto", {226, 136, 157, 0} -"varr", {226, 134, 149, 0} -"vArr", {226, 135, 149, 0} -"varrho", {207, 177, 0} -"varsigma", {207, 130, 0} -"varsubsetneq", {226, 138, 138, 239, 184, 128, 0} -"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0} -"varsupsetneq", {226, 138, 139, 239, 184, 128, 0} -"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0} -"vartheta", {207, 145, 0} -"vartriangleleft", {226, 138, 178, 0} -"vartriangleright", {226, 138, 179, 0} -"vBar", {226, 171, 168, 0} -"Vbar", {226, 171, 171, 0} -"vBarv", {226, 171, 169, 0} -"Vcy", {208, 146, 0} -"vcy", {208, 178, 0} -"vdash", {226, 138, 162, 0} -"vDash", {226, 138, 168, 0} -"Vdash", {226, 138, 169, 0} -"VDash", {226, 138, 171, 0} -"Vdashl", {226, 171, 166, 0} -"vee", {226, 136, 168, 0} -"Vee", {226, 139, 129, 0} -"veebar", {226, 138, 187, 0} -"veeeq", {226, 137, 154, 0} -"vellip", {226, 139, 174, 0} -"verbar", {124, 0} -"Verbar", {226, 128, 150, 0} -"vert", {124, 0} -"Vert", {226, 128, 150, 0} -"VerticalBar", {226, 136, 163, 0} -"VerticalLine", {124, 0} -"VerticalSeparator", {226, 157, 152, 0} -"VerticalTilde", {226, 137, 128, 0} -"VeryThinSpace", {226, 128, 138, 0} -"Vfr", {240, 157, 148, 153, 0} -"vfr", {240, 157, 148, 179, 0} -"vltri", {226, 138, 178, 0} -"vnsub", {226, 138, 130, 226, 131, 146, 0} -"vnsup", {226, 138, 131, 226, 131, 146, 0} -"Vopf", {240, 157, 149, 141, 0} -"vopf", {240, 157, 149, 167, 0} -"vprop", {226, 136, 157, 0} -"vrtri", {226, 138, 179, 0} -"Vscr", {240, 157, 146, 177, 0} -"vscr", {240, 157, 147, 139, 0} -"vsubne", {226, 138, 138, 239, 184, 128, 0} -"vsubnE", {226, 171, 139, 239, 184, 128, 0} -"vsupne", {226, 138, 139, 239, 184, 128, 0} -"vsupnE", {226, 171, 140, 239, 184, 128, 0} -"Vvdash", {226, 138, 170, 0} -"vzigzag", {226, 166, 154, 0} -"Wcirc", {197, 180, 0} -"wcirc", {197, 181, 0} -"wedbar", {226, 169, 159, 0} -"wedge", {226, 136, 167, 0} -"Wedge", {226, 139, 128, 0} -"wedgeq", {226, 137, 153, 0} -"weierp", {226, 132, 152, 0} -"Wfr", {240, 157, 148, 154, 0} -"wfr", {240, 157, 148, 180, 0} -"Wopf", {240, 157, 149, 142, 0} -"wopf", {240, 157, 149, 168, 0} -"wp", {226, 132, 152, 0} -"wr", {226, 137, 128, 0} -"wreath", {226, 137, 128, 0} -"Wscr", {240, 157, 146, 178, 0} -"wscr", {240, 157, 147, 140, 0} -"xcap", {226, 139, 130, 0} -"xcirc", {226, 151, 175, 0} -"xcup", {226, 139, 131, 0} -"xdtri", {226, 150, 189, 0} -"Xfr", {240, 157, 148, 155, 0} -"xfr", {240, 157, 148, 181, 0} -"xharr", {226, 159, 183, 0} -"xhArr", {226, 159, 186, 0} -"Xi", {206, 158, 0} -"xi", {206, 190, 0} -"xlarr", {226, 159, 181, 0} -"xlArr", {226, 159, 184, 0} -"xmap", {226, 159, 188, 0} -"xnis", {226, 139, 187, 0} -"xodot", {226, 168, 128, 0} -"Xopf", {240, 157, 149, 143, 0} -"xopf", {240, 157, 149, 169, 0} -"xoplus", {226, 168, 129, 0} -"xotime", {226, 168, 130, 0} -"xrarr", {226, 159, 182, 0} -"xrArr", {226, 159, 185, 0} -"Xscr", {240, 157, 146, 179, 0} -"xscr", {240, 157, 147, 141, 0} -"xsqcup", {226, 168, 134, 0} -"xuplus", {226, 168, 132, 0} -"xutri", {226, 150, 179, 0} -"xvee", {226, 139, 129, 0} -"xwedge", {226, 139, 128, 0} -"Yacute", {195, 157, 0} -"yacute", {195, 189, 0} -"YAcy", {208, 175, 0} -"yacy", {209, 143, 0} -"Ycirc", {197, 182, 0} -"ycirc", {197, 183, 0} -"Ycy", {208, 171, 0} -"ycy", {209, 139, 0} -"yen", {194, 165, 0} -"Yfr", {240, 157, 148, 156, 0} -"yfr", {240, 157, 148, 182, 0} -"YIcy", {208, 135, 0} -"yicy", {209, 151, 0} -"Yopf", {240, 157, 149, 144, 0} -"yopf", {240, 157, 149, 170, 0} -"Yscr", {240, 157, 146, 180, 0} -"yscr", {240, 157, 147, 142, 0} -"YUcy", {208, 174, 0} -"yucy", {209, 142, 0} -"yuml", {195, 191, 0} -"Yuml", {197, 184, 0} -"Zacute", {197, 185, 0} -"zacute", {197, 186, 0} -"Zcaron", {197, 189, 0} -"zcaron", {197, 190, 0} -"Zcy", {208, 151, 0} -"zcy", {208, 183, 0} -"Zdot", {197, 187, 0} -"zdot", {197, 188, 0} -"zeetrf", {226, 132, 168, 0} -"ZeroWidthSpace", {226, 128, 139, 0} -"Zeta", {206, 150, 0} -"zeta", {206, 182, 0} -"Zfr", {226, 132, 168, 0} -"zfr", {240, 157, 148, 183, 0} -"ZHcy", {208, 150, 0} -"zhcy", {208, 182, 0} -"zigrarr", {226, 135, 157, 0} -"Zopf", {226, 132, 164, 0} -"zopf", {240, 157, 149, 171, 0} -"Zscr", {240, 157, 146, 181, 0} -"zscr", {240, 157, 147, 143, 0} -"zwj", {226, 128, 141, 0} -"zwnj", {226, 128, 140, 0} diff --git a/src/html_unescape.h b/src/html_unescape.h deleted file mode 100644 index e4c5929f10..0000000000 --- a/src/html_unescape.h +++ /dev/null @@ -1,13375 +0,0 @@ -/* ANSI-C code produced by gperf version 3.0.3 */ -/* Command-line: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gperf -L ANSI-C -I -t -N find_entity -H hash_entity -K entity -C -l -F ',{0}' --null-strings -m5 -P -Q entity_pool src/html_unescape.gperf */ -/* Computed positions: -k'1-7,10,12,$' */ - -#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) -/* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to ." -#endif - -#line 1 "src/html_unescape.gperf" -struct html_ent { - int entity; - unsigned char utf8[8]; -}; -#include -#include - -#define TOTAL_KEYWORDS 2125 -#define MIN_WORD_LENGTH 2 -#define MAX_WORD_LENGTH 31 -#define MIN_HASH_VALUE 39 -#define MAX_HASH_VALUE 16000 -/* maximum key range = 15962, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static unsigned int -hash_entity (register const char *str, register unsigned int len) -{ - static const unsigned short asso_values[] = - { - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 2, - 3, 7, 2, 4, 8, 16001, 10, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 1890, 1538, 220, 165, 1045, - 535, 1971, 1187, 1262, 35, 126, 201, 133, 350, 1487, - 1965, 3, 478, 134, 8, 147, 73, 41, 23, 212, - 9, 16001, 2, 16001, 2, 16001, 16001, 4154, 29, 3168, - 429, 10, 146, 1925, 2307, 280, 1313, 1924, 4, 651, - 27, 1031, 65, 176, 2, 6, 17, 15, 107, 482, - 3207, 3865, 757, 131, 178, 4, 4, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16001 - }; - register unsigned int hval = len; - - switch (hval) - { - default: - hval += asso_values[(unsigned char)str[11]]; - /*FALLTHROUGH*/ - case 11: - case 10: - hval += asso_values[(unsigned char)str[9]]; - /*FALLTHROUGH*/ - case 9: - case 8: - case 7: - hval += asso_values[(unsigned char)str[6]]; - /*FALLTHROUGH*/ - case 6: - hval += asso_values[(unsigned char)str[5]]; - /*FALLTHROUGH*/ - case 5: - hval += asso_values[(unsigned char)str[4]+1]; - /*FALLTHROUGH*/ - case 4: - hval += asso_values[(unsigned char)str[3]+3]; - /*FALLTHROUGH*/ - case 3: - hval += asso_values[(unsigned char)str[2]+1]; - /*FALLTHROUGH*/ - case 2: - hval += asso_values[(unsigned char)str[1]+4]; - /*FALLTHROUGH*/ - case 1: - hval += asso_values[(unsigned char)str[0]]; - break; - } - return hval + asso_values[(unsigned char)str[len - 1]]; -} - -struct entity_pool_t - { - char entity_pool_str39[sizeof("rarr")]; - char entity_pool_str41[sizeof("larr")]; - char entity_pool_str49[sizeof("lat")]; - char entity_pool_str52[sizeof("uarr")]; - char entity_pool_str55[sizeof("npr")]; - char entity_pool_str62[sizeof("rarrtl")]; - char entity_pool_str64[sizeof("larrtl")]; - char entity_pool_str65[sizeof("roarr")]; - char entity_pool_str67[sizeof("loarr")]; - char entity_pool_str68[sizeof("not")]; - char entity_pool_str69[sizeof("rpar")]; - char entity_pool_str70[sizeof("bot")]; - char entity_pool_str71[sizeof("lpar")]; - char entity_pool_str73[sizeof("spar")]; - char entity_pool_str75[sizeof("ll")]; - char entity_pool_str76[sizeof("uharr")]; - char entity_pool_str77[sizeof("epar")]; - char entity_pool_str81[sizeof("el")]; - char entity_pool_str83[sizeof("rotimes")]; - char entity_pool_str85[sizeof("lotimes")]; - char entity_pool_str86[sizeof("par")]; - char entity_pool_str88[sizeof("nharr")]; - char entity_pool_str94[sizeof("npar")]; - char entity_pool_str97[sizeof("tprime")]; - char entity_pool_str101[sizeof("els")]; - char entity_pool_str102[sizeof("eparsl")]; - char entity_pool_str104[sizeof("ensp")]; - char entity_pool_str109[sizeof("bprime")]; - char entity_pool_str110[sizeof("lnap")]; - char entity_pool_str111[sizeof("blk14")]; - char entity_pool_str115[sizeof("blk12")]; - char entity_pool_str117[sizeof("blk34")]; - char entity_pool_str119[sizeof("nparsl")]; - char entity_pool_str123[sizeof("nldr")]; - char entity_pool_str124[sizeof("rlarr")]; - char entity_pool_str125[sizeof("npart")]; - char entity_pool_str126[sizeof("llarr")]; - char entity_pool_str127[sizeof("nlt")]; - char entity_pool_str128[sizeof("slarr")]; - char entity_pool_str138[sizeof("nparallel")]; - char entity_pool_str143[sizeof("Tau")]; - char entity_pool_str144[sizeof("varr")]; - char entity_pool_str146[sizeof("squ")]; - char entity_pool_str149[sizeof("nlarr")]; - char entity_pool_str152[sizeof("tau")]; - char entity_pool_str165[sizeof("lne")]; - char entity_pool_str166[sizeof("rrarr")]; - char entity_pool_str168[sizeof("lrarr")]; - char entity_pool_str170[sizeof("srarr")]; - char entity_pool_str171[sizeof("rharul")]; - char entity_pool_str173[sizeof("lharul")]; - char entity_pool_str174[sizeof("erarr")]; - char entity_pool_str176[sizeof("pr")]; - char entity_pool_str177[sizeof("rharu")]; - char entity_pool_str179[sizeof("lharu")]; - char entity_pool_str184[sizeof("Uarr")]; - char entity_pool_str188[sizeof("nGt")]; - char entity_pool_str190[sizeof("bne")]; - char entity_pool_str191[sizeof("nrarr")]; - char entity_pool_str194[sizeof("swarr")]; - char entity_pool_str198[sizeof("rarrap")]; - char entity_pool_str200[sizeof("upuparrows")]; - char entity_pool_str202[sizeof("Darr")]; - char entity_pool_str205[sizeof("rbarr")]; - char entity_pool_str206[sizeof("Dot")]; - char entity_pool_str207[sizeof("lbarr")]; - char entity_pool_str215[sizeof("nwarr")]; - char entity_pool_str217[sizeof("smt")]; - char entity_pool_str222[sizeof("emsp14")]; - char entity_pool_str223[sizeof("rarrpl")]; - char entity_pool_str225[sizeof("larrpl")]; - char entity_pool_str230[sizeof("phmmat")]; - char entity_pool_str232[sizeof("emsp13")]; - char entity_pool_str234[sizeof("LT")]; - char entity_pool_str238[sizeof("Larr")]; - char entity_pool_str239[sizeof("rbrkslu")]; - char entity_pool_str241[sizeof("lbrkslu")]; - char entity_pool_str243[sizeof("napos")]; - char entity_pool_str251[sizeof("nle")]; - char entity_pool_str253[sizeof("rHar")]; - char entity_pool_str255[sizeof("lHar")]; - char entity_pool_str256[sizeof("qprime")]; - char entity_pool_str258[sizeof("lap")]; - char entity_pool_str265[sizeof("nbsp")]; - char entity_pool_str266[sizeof("uHar")]; - char entity_pool_str267[sizeof("top")]; - char entity_pool_str269[sizeof("Vbar")]; - char entity_pool_str272[sizeof("Ll")]; - char entity_pool_str276[sizeof("prap")]; - char entity_pool_str278[sizeof("emsp")]; - char entity_pool_str281[sizeof("nap")]; - char entity_pool_str294[sizeof("looparrowleft")]; - char entity_pool_str296[sizeof("le")]; - char entity_pool_str300[sizeof("sharp")]; - char entity_pool_str302[sizeof("ee")]; - char entity_pool_str310[sizeof("les")]; - char entity_pool_str311[sizeof("in")]; - char entity_pool_str312[sizeof("prop")]; - char entity_pool_str314[sizeof("topbot")]; - char entity_pool_str317[sizeof("int")]; - char entity_pool_str319[sizeof("ne")]; - char entity_pool_str329[sizeof("nprcue")]; - char entity_pool_str331[sizeof("pre")]; - char entity_pool_str332[sizeof("epsi")]; - char entity_pool_str337[sizeof("upsi")]; - char entity_pool_str338[sizeof("there4")]; - char entity_pool_str342[sizeof("rbrke")]; - char entity_pool_str343[sizeof("searr")]; - char entity_pool_str344[sizeof("lbrke")]; - char entity_pool_str346[sizeof("blacktriangle")]; - char entity_pool_str349[sizeof("lneq")]; - char entity_pool_str352[sizeof("lneqq")]; - char entity_pool_str354[sizeof("plus")]; - char entity_pool_str355[sizeof("nles")]; - char entity_pool_str356[sizeof("nedot")]; - char entity_pool_str357[sizeof("blacktriangleleft")]; - char entity_pool_str358[sizeof("blacktriangleright")]; - char entity_pool_str364[sizeof("nearr")]; - char entity_pool_str367[sizeof("blacktriangledown")]; - char entity_pool_str373[sizeof("nless")]; - char entity_pool_str374[sizeof("emacr")]; - char entity_pool_str378[sizeof("vprop")]; - char entity_pool_str379[sizeof("umacr")]; - char entity_pool_str383[sizeof("smeparsl")]; - char entity_pool_str387[sizeof("Map")]; - char entity_pool_str390[sizeof("plusdu")]; - char entity_pool_str391[sizeof("Not")]; - char entity_pool_str408[sizeof("Verbar")]; - char entity_pool_str426[sizeof("perp")]; - char entity_pool_str430[sizeof("fltns")]; - char entity_pool_str431[sizeof("plusmn")]; - char entity_pool_str435[sizeof("nleq")]; - char entity_pool_str438[sizeof("nleqq")]; - char entity_pool_str440[sizeof("frac34")]; - char entity_pool_str441[sizeof("frac14")]; - char entity_pool_str442[sizeof("verbar")]; - char entity_pool_str443[sizeof("frac12")]; - char entity_pool_str444[sizeof("frac35")]; - char entity_pool_str445[sizeof("frac15")]; - char entity_pool_str446[sizeof("frac45")]; - char entity_pool_str449[sizeof("frac25")]; - char entity_pool_str451[sizeof("frac13")]; - char entity_pool_str453[sizeof("frac16")]; - char entity_pool_str454[sizeof("prurel")]; - char entity_pool_str455[sizeof("frac23")]; - char entity_pool_str456[sizeof("frac38")]; - char entity_pool_str457[sizeof("frac18")]; - char entity_pool_str458[sizeof("frac56")]; - char entity_pool_str462[sizeof("frac58")]; - char entity_pool_str464[sizeof("frac78")]; - char entity_pool_str465[sizeof("leq")]; - char entity_pool_str466[sizeof("darr")]; - char entity_pool_str469[sizeof("Upsi")]; - char entity_pool_str470[sizeof("dot")]; - char entity_pool_str471[sizeof("phone")]; - char entity_pool_str474[sizeof("Cap")]; - char entity_pool_str478[sizeof("blacksquare")]; - char entity_pool_str479[sizeof("rnmid")]; - char entity_pool_str483[sizeof("leqq")]; - char entity_pool_str486[sizeof("intcal")]; - char entity_pool_str490[sizeof("dharr")]; - char entity_pool_str494[sizeof("rhard")]; - char entity_pool_str496[sizeof("lhard")]; - char entity_pool_str505[sizeof("pluse")]; - char entity_pool_str511[sizeof("Umacr")]; - char entity_pool_str512[sizeof("Vee")]; - char entity_pool_str515[sizeof("Rarr")]; - char entity_pool_str527[sizeof("Cross")]; - char entity_pool_str529[sizeof("rsqb")]; - char entity_pool_str531[sizeof("lsqb")]; - char entity_pool_str538[sizeof("Rarrtl")]; - char entity_pool_str541[sizeof("esdot")]; - char entity_pool_str546[sizeof("vee")]; - char entity_pool_str547[sizeof("nbumpe")]; - char entity_pool_str553[sizeof("llcorner")]; - char entity_pool_str554[sizeof("fpartint")]; - char entity_pool_str558[sizeof("squf")]; - char entity_pool_str559[sizeof("plankv")]; - char entity_pool_str562[sizeof("eqvparsl")]; - char entity_pool_str564[sizeof("ulcorner")]; - char entity_pool_str566[sizeof("wp")]; - char entity_pool_str571[sizeof("lozf")]; - char entity_pool_str575[sizeof("COPY")]; - char entity_pool_str577[sizeof("ulcorn")]; - char entity_pool_str582[sizeof("veebar")]; - char entity_pool_str584[sizeof("part")]; - char entity_pool_str589[sizeof("square")]; - char entity_pool_str591[sizeof("nbump")]; - char entity_pool_str592[sizeof("bernou")]; - char entity_pool_str593[sizeof("wr")]; - char entity_pool_str594[sizeof("rBarr")]; - char entity_pool_str595[sizeof("lrcorner")]; - char entity_pool_str596[sizeof("lBarr")]; - char entity_pool_str599[sizeof("bnot")]; - char entity_pool_str601[sizeof("semi")]; - char entity_pool_str606[sizeof("urcorner")]; - char entity_pool_str612[sizeof("NotSubset")]; - char entity_pool_str614[sizeof("ropf")]; - char entity_pool_str615[sizeof("Qopf")]; - char entity_pool_str616[sizeof("lopf")]; - char entity_pool_str618[sizeof("sopf")]; - char entity_pool_str619[sizeof("urcorn")]; - char entity_pool_str620[sizeof("Topf")]; - char entity_pool_str621[sizeof("Zopf")]; - char entity_pool_str622[sizeof("eopf")]; - char entity_pool_str626[sizeof("ropar")]; - char entity_pool_str627[sizeof("uopf")]; - char entity_pool_str628[sizeof("lopar")]; - char entity_pool_str629[sizeof("topf")]; - char entity_pool_str635[sizeof("Xopf")]; - char entity_pool_str639[sizeof("nopf")]; - char entity_pool_str641[sizeof("bopf")]; - char entity_pool_str642[sizeof("epsiv")]; - char entity_pool_str643[sizeof("fnof")]; - char entity_pool_str644[sizeof("imacr")]; - char entity_pool_str647[sizeof("Jopf")]; - char entity_pool_str649[sizeof("nhpar")]; - char entity_pool_str653[sizeof("Wopf")]; - char entity_pool_str658[sizeof("Sqrt")]; - char entity_pool_str659[sizeof("nsub")]; - char entity_pool_str661[sizeof("napid")]; - char entity_pool_str664[sizeof("NotSuperset")]; - char entity_pool_str667[sizeof("brvbar")]; - char entity_pool_str670[sizeof("sol")]; - char entity_pool_str675[sizeof("easter")]; - char entity_pool_str677[sizeof("popf")]; - char entity_pool_str680[sizeof("dHar")]; - char entity_pool_str685[sizeof("Vopf")]; - char entity_pool_str690[sizeof("nsupset")]; - char entity_pool_str691[sizeof("nsup")]; - char entity_pool_str692[sizeof("vBar")]; - char entity_pool_str694[sizeof("nsubset")]; - char entity_pool_str700[sizeof("thkap")]; - char entity_pool_str704[sizeof("nis")]; - char entity_pool_str705[sizeof("profsurf")]; - char entity_pool_str706[sizeof("solb")]; - char entity_pool_str710[sizeof("lnsim")]; - char entity_pool_str712[sizeof("solbar")]; - char entity_pool_str717[sizeof("Square")]; - char entity_pool_str719[sizeof("vopf")]; - char entity_pool_str723[sizeof("uharl")]; - char entity_pool_str725[sizeof("ulcrop")]; - char entity_pool_str729[sizeof("eqsim")]; - char entity_pool_str730[sizeof("equiv")]; - char entity_pool_str733[sizeof("ell")]; - char entity_pool_str734[sizeof("smashp")]; - char entity_pool_str735[sizeof("mp")]; - char entity_pool_str738[sizeof("Kopf")]; - char entity_pool_str741[sizeof("simrarr")]; - char entity_pool_str743[sizeof("flat")]; - char entity_pool_str745[sizeof("Mopf")]; - char entity_pool_str746[sizeof("Sopf")]; - char entity_pool_str747[sizeof("mldr")]; - char entity_pool_str748[sizeof("rlm")]; - char entity_pool_str749[sizeof("iprod")]; - char entity_pool_str756[sizeof("lparlt")]; - char entity_pool_str758[sizeof("fopf")]; - char entity_pool_str759[sizeof("Uopf")]; - char entity_pool_str763[sizeof("varsubsetneq")]; - char entity_pool_str764[sizeof("varsubsetneqq")]; - char entity_pool_str767[sizeof("urcrop")]; - char entity_pool_str768[sizeof("LessLess")]; - char entity_pool_str770[sizeof("Re")]; - char entity_pool_str773[sizeof("NotNestedLessLess")]; - char entity_pool_str777[sizeof("Dopf")]; - char entity_pool_str779[sizeof("forkv")]; - char entity_pool_str781[sizeof("nsqsube")]; - char entity_pool_str783[sizeof("nsupe")]; - char entity_pool_str787[sizeof("nsube")]; - char entity_pool_str788[sizeof("qopf")]; - char entity_pool_str789[sizeof("rlhar")]; - char entity_pool_str792[sizeof("lrm")]; - char entity_pool_str796[sizeof("nlsim")]; - char entity_pool_str798[sizeof("pound")]; - char entity_pool_str799[sizeof("varsupsetneq")]; - char entity_pool_str800[sizeof("varsupsetneqq")]; - char entity_pool_str802[sizeof("bnequiv")]; - char entity_pool_str813[sizeof("Lopf")]; - char entity_pool_str817[sizeof("nsqsupe")]; - char entity_pool_str820[sizeof("rarrlp")]; - char entity_pool_str821[sizeof("wedbar")]; - char entity_pool_str822[sizeof("larrlp")]; - char entity_pool_str824[sizeof("Yopf")]; - char entity_pool_str829[sizeof("NotReverseElement")]; - char entity_pool_str832[sizeof("Copf")]; - char entity_pool_str833[sizeof("lrhar")]; - char entity_pool_str848[sizeof("parsl")]; - char entity_pool_str849[sizeof("uml")]; - char entity_pool_str850[sizeof("marker")]; - char entity_pool_str851[sizeof("nsupseteq")]; - char entity_pool_str855[sizeof("nsubseteq")]; - char entity_pool_str861[sizeof("squarf")]; - char entity_pool_str862[sizeof("Vert")]; - char entity_pool_str874[sizeof("SquareSupersetEqual")]; - char entity_pool_str876[sizeof("prsim")]; - char entity_pool_str879[sizeof("SquareSubsetEqual")]; - char entity_pool_str882[sizeof("SquareSuperset")]; - char entity_pool_str887[sizeof("SquareSubset")]; - char entity_pool_str888[sizeof("nvap")]; - char entity_pool_str892[sizeof("iopf")]; - char entity_pool_str894[sizeof("pm")]; - char entity_pool_str896[sizeof("vert")]; - char entity_pool_str898[sizeof("thetav")]; - char entity_pool_str901[sizeof("loz")]; - char entity_pool_str905[sizeof("map")]; - char entity_pool_str920[sizeof("lesseqqgtr")]; - char entity_pool_str934[sizeof("rscr")]; - char entity_pool_str935[sizeof("Qscr")]; - char entity_pool_str936[sizeof("lscr")]; - char entity_pool_str938[sizeof("sscr")]; - char entity_pool_str940[sizeof("Tscr")]; - char entity_pool_str941[sizeof("Zscr")]; - char entity_pool_str942[sizeof("escr")]; - char entity_pool_str947[sizeof("uscr")]; - char entity_pool_str949[sizeof("tscr")]; - char entity_pool_str951[sizeof("imof")]; - char entity_pool_str952[sizeof("Coproduct")]; - char entity_pool_str955[sizeof("Xscr")]; - char entity_pool_str956[sizeof("Xi")]; - char entity_pool_str959[sizeof("nscr")]; - char entity_pool_str960[sizeof("ni")]; - char entity_pool_str961[sizeof("bscr")]; - char entity_pool_str962[sizeof("Nopf")]; - char entity_pool_str967[sizeof("Jscr")]; - char entity_pool_str968[sizeof("preceq")]; - char entity_pool_str971[sizeof("nvrArr")]; - char entity_pool_str972[sizeof("backprime")]; - char entity_pool_str973[sizeof("Wscr")]; - char entity_pool_str975[sizeof("varphi")]; - char entity_pool_str984[sizeof("nsmid")]; - char entity_pool_str991[sizeof("dlcorn")]; - char entity_pool_str997[sizeof("pscr")]; - char entity_pool_str998[sizeof("pi")]; - char entity_pool_str1005[sizeof("Vscr")]; - char entity_pool_str1011[sizeof("nesim")]; - char entity_pool_str1021[sizeof("simne")]; - char entity_pool_str1028[sizeof("nsupseteqq")]; - char entity_pool_str1032[sizeof("nsubseteqq")]; - char entity_pool_str1033[sizeof("drcorn")]; - char entity_pool_str1038[sizeof("rbrace")]; - char entity_pool_str1039[sizeof("vscr")]; - char entity_pool_str1040[sizeof("lbrace")]; - char entity_pool_str1041[sizeof("dopf")]; - char entity_pool_str1049[sizeof("frasl")]; - char entity_pool_str1055[sizeof("LessTilde")]; - char entity_pool_str1058[sizeof("Kscr")]; - char entity_pool_str1064[sizeof("pluscir")]; - char entity_pool_str1065[sizeof("Mscr")]; - char entity_pool_str1066[sizeof("Sscr")]; - char entity_pool_str1067[sizeof("rbrksld")]; - char entity_pool_str1069[sizeof("lbrksld")]; - char entity_pool_str1070[sizeof("RBarr")]; - char entity_pool_str1073[sizeof("sqcaps")]; - char entity_pool_str1074[sizeof("rArr")]; - char entity_pool_str1075[sizeof("bNot")]; - char entity_pool_str1076[sizeof("lArr")]; - char entity_pool_str1078[sizeof("fscr")]; - char entity_pool_str1079[sizeof("Uscr")]; - char entity_pool_str1087[sizeof("uArr")]; - char entity_pool_str1090[sizeof("Ropf")]; - char entity_pool_str1094[sizeof("wopf")]; - char entity_pool_str1097[sizeof("Dscr")]; - char entity_pool_str1098[sizeof("opar")]; - char entity_pool_str1099[sizeof("seswar")]; - char entity_pool_str1103[sizeof("Del")]; - char entity_pool_str1104[sizeof("rAarr")]; - char entity_pool_str1105[sizeof("rho")]; - char entity_pool_str1106[sizeof("lAarr")]; - char entity_pool_str1107[sizeof("preccurlyeq")]; - char entity_pool_str1108[sizeof("qscr")]; - char entity_pool_str1111[sizeof("macr")]; - char entity_pool_str1115[sizeof("notin")]; - char entity_pool_str1120[sizeof("equivDD")]; - char entity_pool_str1125[sizeof("sqcap")]; - char entity_pool_str1127[sizeof("nspar")]; - char entity_pool_str1131[sizeof("olt")]; - char entity_pool_str1132[sizeof("ratio")]; - char entity_pool_str1133[sizeof("Lscr")]; - char entity_pool_str1137[sizeof("dharl")]; - char entity_pool_str1139[sizeof("dlcrop")]; - char entity_pool_str1140[sizeof("DoubleDot")]; - char entity_pool_str1141[sizeof("dotplus")]; - char entity_pool_str1142[sizeof("or")]; - char entity_pool_str1144[sizeof("Yscr")]; - char entity_pool_str1147[sizeof("Fopf")]; - char entity_pool_str1152[sizeof("Cscr")]; - char entity_pool_str1153[sizeof("olarr")]; - char entity_pool_str1154[sizeof("nrarrw")]; - char entity_pool_str1159[sizeof("lvertneqq")]; - char entity_pool_str1160[sizeof("eqslantgtr")]; - char entity_pool_str1164[sizeof("thorn")]; - char entity_pool_str1169[sizeof("eqslantless")]; - char entity_pool_str1172[sizeof("incare")]; - char entity_pool_str1179[sizeof("vArr")]; - char entity_pool_str1180[sizeof("rppolint")]; - char entity_pool_str1181[sizeof("drcrop")]; - char entity_pool_str1187[sizeof("parallel")]; - char entity_pool_str1195[sizeof("orarr")]; - char entity_pool_str1196[sizeof("ssmile")]; - char entity_pool_str1200[sizeof("DoubleLeftTee")]; - char entity_pool_str1201[sizeof("erDot")]; - char entity_pool_str1202[sizeof("diams")]; - char entity_pool_str1203[sizeof("ssetmn")]; - char entity_pool_str1208[sizeof("oS")]; - char entity_pool_str1212[sizeof("iscr")]; - char entity_pool_str1213[sizeof("ii")]; - char entity_pool_str1214[sizeof("rect")]; - char entity_pool_str1217[sizeof("nsccue")]; - char entity_pool_str1218[sizeof("sect")]; - char entity_pool_str1220[sizeof("mlcp")]; - char entity_pool_str1224[sizeof("oror")]; - char entity_pool_str1226[sizeof("DoubleContourIntegral")]; - char entity_pool_str1230[sizeof("equals")]; - char entity_pool_str1232[sizeof("Hat")]; - char entity_pool_str1236[sizeof("sstarf")]; - char entity_pool_str1237[sizeof("mstpos")]; - char entity_pool_str1239[sizeof("die")]; - char entity_pool_str1240[sizeof("measuredangle")]; - char entity_pool_str1252[sizeof("forall")]; - char entity_pool_str1255[sizeof("notinvb")]; - char entity_pool_str1263[sizeof("mopf")]; - char entity_pool_str1270[sizeof("niv")]; - char entity_pool_str1280[sizeof("vBarv")]; - char entity_pool_str1282[sizeof("Nscr")]; - char entity_pool_str1284[sizeof("period")]; - char entity_pool_str1292[sizeof("becaus")]; - char entity_pool_str1298[sizeof("between")]; - char entity_pool_str1299[sizeof("Int")]; - char entity_pool_str1307[sizeof("because")]; - char entity_pool_str1308[sizeof("piv")]; - char entity_pool_str1326[sizeof("rfr")]; - char entity_pool_str1327[sizeof("Qfr")]; - char entity_pool_str1328[sizeof("lfr")]; - char entity_pool_str1330[sizeof("sfr")]; - char entity_pool_str1331[sizeof("nleftrightarrow")]; - char entity_pool_str1332[sizeof("Tfr")]; - char entity_pool_str1333[sizeof("Zfr")]; - char entity_pool_str1334[sizeof("efr")]; - char entity_pool_str1338[sizeof("sim")]; - char entity_pool_str1339[sizeof("ufr")]; - char entity_pool_str1340[sizeof("roplus")]; - char entity_pool_str1341[sizeof("tfr")]; - char entity_pool_str1342[sizeof("loplus")]; - char entity_pool_str1347[sizeof("Xfr")]; - char entity_pool_str1350[sizeof("real")]; - char entity_pool_str1351[sizeof("nfr")]; - char entity_pool_str1353[sizeof("bfr")]; - char entity_pool_str1355[sizeof("NotHumpEqual")]; - char entity_pool_str1359[sizeof("Jfr")]; - char entity_pool_str1361[sizeof("dscr")]; - char entity_pool_str1365[sizeof("Wfr")]; - char entity_pool_str1367[sizeof("blacklozenge")]; - char entity_pool_str1369[sizeof("zopf")]; - char entity_pool_str1370[sizeof("reals")]; - char entity_pool_str1372[sizeof("NotCupCap")]; - char entity_pool_str1375[sizeof("simplus")]; - char entity_pool_str1377[sizeof("ForAll")]; - char entity_pool_str1389[sizeof("pfr")]; - char entity_pool_str1395[sizeof("omacr")]; - char entity_pool_str1397[sizeof("Vfr")]; - char entity_pool_str1409[sizeof("Emacr")]; - char entity_pool_str1410[sizeof("Rscr")]; - char entity_pool_str1414[sizeof("wscr")]; - char entity_pool_str1423[sizeof("ShortUpArrow")]; - char entity_pool_str1429[sizeof("setmn")]; - char entity_pool_str1431[sizeof("vfr")]; - char entity_pool_str1450[sizeof("Kfr")]; - char entity_pool_str1455[sizeof("operp")]; - char entity_pool_str1457[sizeof("Mfr")]; - char entity_pool_str1458[sizeof("Sfr")]; - char entity_pool_str1461[sizeof("nltrie")]; - char entity_pool_str1467[sizeof("Fscr")]; - char entity_pool_str1470[sizeof("ffr")]; - char entity_pool_str1471[sizeof("Ufr")]; - char entity_pool_str1473[sizeof("shortmid")]; - char entity_pool_str1488[sizeof("nvsim")]; - char entity_pool_str1489[sizeof("Dfr")]; - char entity_pool_str1490[sizeof("lessdot")]; - char entity_pool_str1493[sizeof("profline")]; - char entity_pool_str1500[sizeof("qfr")]; - char entity_pool_str1501[sizeof("dArr")]; - char entity_pool_str1503[sizeof("nrtrie")]; - char entity_pool_str1507[sizeof("ShortRightArrow")]; - char entity_pool_str1515[sizeof("Therefore")]; - char entity_pool_str1519[sizeof("DD")]; - char entity_pool_str1524[sizeof("therefore")]; - char entity_pool_str1525[sizeof("Lfr")]; - char entity_pool_str1532[sizeof("target")]; - char entity_pool_str1535[sizeof("Element")]; - char entity_pool_str1536[sizeof("Yfr")]; - char entity_pool_str1537[sizeof("ClockwiseContourIntegral")]; - char entity_pool_str1542[sizeof("olcir")]; - char entity_pool_str1544[sizeof("Cfr")]; - char entity_pool_str1559[sizeof("female")]; - char entity_pool_str1560[sizeof("nsucceq")]; - char entity_pool_str1561[sizeof("oast")]; - char entity_pool_str1568[sizeof("percnt")]; - char entity_pool_str1578[sizeof("ordf")]; - char entity_pool_str1580[sizeof("ord")]; - char entity_pool_str1581[sizeof("Rho")]; - char entity_pool_str1583[sizeof("mscr")]; - char entity_pool_str1585[sizeof("nvrtrie")]; - char entity_pool_str1589[sizeof("lnE")]; - char entity_pool_str1597[sizeof("nhArr")]; - char entity_pool_str1598[sizeof("Or")]; - char entity_pool_str1602[sizeof("divide")]; - char entity_pool_str1604[sizeof("ifr")]; - char entity_pool_str1605[sizeof("elinters")]; - char entity_pool_str1615[sizeof("bsol")]; - char entity_pool_str1616[sizeof("nvlArr")]; - char entity_pool_str1626[sizeof("Imacr")]; - char entity_pool_str1628[sizeof("backsimeq")]; - char entity_pool_str1629[sizeof("twixt")]; - char entity_pool_str1630[sizeof("olcross")]; - char entity_pool_str1639[sizeof("rarrsim")]; - char entity_pool_str1640[sizeof("DoubleDownArrow")]; - char entity_pool_str1641[sizeof("larrsim")]; - char entity_pool_str1642[sizeof("emptyset")]; - char entity_pool_str1643[sizeof("oopf")]; - char entity_pool_str1645[sizeof("exist")]; - char entity_pool_str1648[sizeof("llhard")]; - char entity_pool_str1656[sizeof("excl")]; - char entity_pool_str1657[sizeof("Eopf")]; - char entity_pool_str1658[sizeof("nlArr")]; - char entity_pool_str1663[sizeof("thinsp")]; - char entity_pool_str1664[sizeof("NotSubsetEqual")]; - char entity_pool_str1665[sizeof("phi")]; - char entity_pool_str1666[sizeof("DoubleLeftArrow")]; - char entity_pool_str1668[sizeof("topcir")]; - char entity_pool_str1672[sizeof("div")]; - char entity_pool_str1674[sizeof("Nfr")]; - char entity_pool_str1675[sizeof("nlE")]; - char entity_pool_str1689[sizeof("zscr")]; - char entity_pool_str1690[sizeof("lrhard")]; - char entity_pool_str1697[sizeof("lltri")]; - char entity_pool_str1700[sizeof("nrArr")]; - char entity_pool_str1701[sizeof("NotSupersetEqual")]; - char entity_pool_str1703[sizeof("swArr")]; - char entity_pool_str1704[sizeof("ThickSpace")]; - char entity_pool_str1708[sizeof("ultri")]; - char entity_pool_str1709[sizeof("notnivb")]; - char entity_pool_str1711[sizeof("prime")]; - char entity_pool_str1714[sizeof("primes")]; - char entity_pool_str1716[sizeof("ohm")]; - char entity_pool_str1719[sizeof("CircleTimes")]; - char entity_pool_str1720[sizeof("nltri")]; - char entity_pool_str1723[sizeof("siml")]; - char entity_pool_str1724[sizeof("nwArr")]; - char entity_pool_str1727[sizeof("varpi")]; - char entity_pool_str1730[sizeof("orv")]; - char entity_pool_str1735[sizeof("setminus")]; - char entity_pool_str1739[sizeof("lrtri")]; - char entity_pool_str1743[sizeof("permil")]; - char entity_pool_str1744[sizeof("mid")]; - char entity_pool_str1750[sizeof("urtri")]; - char entity_pool_str1753[sizeof("dfr")]; - char entity_pool_str1754[sizeof("mho")]; - char entity_pool_str1755[sizeof("prE")]; - char entity_pool_str1759[sizeof("vsupne")]; - char entity_pool_str1762[sizeof("nrtri")]; - char entity_pool_str1763[sizeof("vsubne")]; - char entity_pool_str1765[sizeof("eDot")]; - char entity_pool_str1778[sizeof("lesges")]; - char entity_pool_str1781[sizeof("backepsilon")]; - char entity_pool_str1783[sizeof("ratail")]; - char entity_pool_str1785[sizeof("latail")]; - char entity_pool_str1788[sizeof("UpEquilibrium")]; - char entity_pool_str1791[sizeof("epsilon")]; - char entity_pool_str1796[sizeof("upsilon")]; - char entity_pool_str1798[sizeof("midast")]; - char entity_pool_str1799[sizeof("Hopf")]; - char entity_pool_str1800[sizeof("vltri")]; - char entity_pool_str1802[sizeof("Rfr")]; - char entity_pool_str1805[sizeof("Wedge")]; - char entity_pool_str1806[sizeof("wfr")]; - char entity_pool_str1812[sizeof("barwed")]; - char entity_pool_str1815[sizeof("malt")]; - char entity_pool_str1820[sizeof("Chi")]; - char entity_pool_str1821[sizeof("emptyv")]; - char entity_pool_str1822[sizeof("notni")]; - char entity_pool_str1827[sizeof("LessGreater")]; - char entity_pool_str1829[sizeof("diam")]; - char entity_pool_str1842[sizeof("vrtri")]; - char entity_pool_str1849[sizeof("CircleMinus")]; - char entity_pool_str1851[sizeof("Omacr")]; - char entity_pool_str1852[sizeof("seArr")]; - char entity_pool_str1859[sizeof("Ffr")]; - char entity_pool_str1865[sizeof("precneqq")]; - char entity_pool_str1867[sizeof("Diamond")]; - char entity_pool_str1868[sizeof("ordm")]; - char entity_pool_str1873[sizeof("neArr")]; - char entity_pool_str1874[sizeof("Iopf")]; - char entity_pool_str1875[sizeof("CircleDot")]; - char entity_pool_str1878[sizeof("prnap")]; - char entity_pool_str1884[sizeof("dotminus")]; - char entity_pool_str1903[sizeof("nshortmid")]; - char entity_pool_str1905[sizeof("bottom")]; - char entity_pool_str1907[sizeof("pointint")]; - char entity_pool_str1917[sizeof("SquareUnion")]; - char entity_pool_str1925[sizeof("jopf")]; - char entity_pool_str1928[sizeof("Upsilon")]; - char entity_pool_str1936[sizeof("Colone")]; - char entity_pool_str1938[sizeof("nvlt")]; - char entity_pool_str1941[sizeof("NestedLessLess")]; - char entity_pool_str1942[sizeof("Colon")]; - char entity_pool_str1945[sizeof("bsolhsub")]; - char entity_pool_str1949[sizeof("DoubleLeftRightArrow")]; - char entity_pool_str1950[sizeof("plussim")]; - char entity_pool_str1959[sizeof("image")]; - char entity_pool_str1960[sizeof("egs")]; - char entity_pool_str1963[sizeof("oscr")]; - char entity_pool_str1964[sizeof("swnwar")]; - char entity_pool_str1969[sizeof("zeetrf")]; - char entity_pool_str1973[sizeof("maltese")]; - char entity_pool_str1975[sizeof("mfr")]; - char entity_pool_str1976[sizeof("rarrfs")]; - char entity_pool_str1977[sizeof("Escr")]; - char entity_pool_str1978[sizeof("larrfs")]; - char entity_pool_str1985[sizeof("mnplus")]; - char entity_pool_str1986[sizeof("ngt")]; - char entity_pool_str1987[sizeof("ngtr")]; - char entity_pool_str1996[sizeof("gl")]; - char entity_pool_str2003[sizeof("diamondsuit")]; - char entity_pool_str2004[sizeof("GT")]; - char entity_pool_str2014[sizeof("lesssim")]; - char entity_pool_str2015[sizeof("dsol")]; - char entity_pool_str2023[sizeof("upharpoonleft")]; - char entity_pool_str2024[sizeof("SquareIntersection")]; - char entity_pool_str2025[sizeof("lsime")]; - char entity_pool_str2027[sizeof("nLt")]; - char entity_pool_str2029[sizeof("NotLess")]; - char entity_pool_str2031[sizeof("gnap")]; - char entity_pool_str2035[sizeof("scap")]; - char entity_pool_str2038[sizeof("mapstoleft")]; - char entity_pool_str2039[sizeof("NotLessLess")]; - char entity_pool_str2043[sizeof("rfloor")]; - char entity_pool_str2045[sizeof("lfloor")]; - char entity_pool_str2048[sizeof("nsime")]; - char entity_pool_str2050[sizeof("bsime")]; - char entity_pool_str2051[sizeof("NotLessEqual")]; - char entity_pool_str2052[sizeof("NotLessTilde")]; - char entity_pool_str2056[sizeof("ncap")]; - char entity_pool_str2059[sizeof("NotLessGreater")]; - char entity_pool_str2070[sizeof("precsim")]; - char entity_pool_str2072[sizeof("looparrowright")]; - char entity_pool_str2076[sizeof("Pr")]; - char entity_pool_str2077[sizeof("rcub")]; - char entity_pool_str2078[sizeof("mapstoup")]; - char entity_pool_str2079[sizeof("lcub")]; - char entity_pool_str2081[sizeof("zfr")]; - char entity_pool_str2084[sizeof("uparrow")]; - char entity_pool_str2086[sizeof("gne")]; - char entity_pool_str2090[sizeof("sce")]; - char entity_pool_str2091[sizeof("Im")]; - char entity_pool_str2096[sizeof("rcaron")]; - char entity_pool_str2098[sizeof("lcaron")]; - char entity_pool_str2099[sizeof("Oopf")]; - char entity_pool_str2100[sizeof("scaron")]; - char entity_pool_str2101[sizeof("backsim")]; - char entity_pool_str2102[sizeof("Tcaron")]; - char entity_pool_str2103[sizeof("Zcaron")]; - char entity_pool_str2104[sizeof("ecaron")]; - char entity_pool_str2106[sizeof("Bernoullis")]; - char entity_pool_str2110[sizeof("nge")]; - char entity_pool_str2111[sizeof("tcaron")]; - char entity_pool_str2113[sizeof("fork")]; - char entity_pool_str2119[sizeof("Hscr")]; - char entity_pool_str2121[sizeof("ncaron")]; - char entity_pool_str2122[sizeof("elsdot")]; - char entity_pool_str2124[sizeof("tbrk")]; - char entity_pool_str2128[sizeof("triplus")]; - char entity_pool_str2131[sizeof("diamond")]; - char entity_pool_str2134[sizeof("ncup")]; - char entity_pool_str2136[sizeof("bbrk")]; - char entity_pool_str2138[sizeof("frown")]; - char entity_pool_str2139[sizeof("bkarow")]; - char entity_pool_str2141[sizeof("spades")]; - char entity_pool_str2143[sizeof("psi")]; - char entity_pool_str2150[sizeof("Bopf")]; - char entity_pool_str2156[sizeof("dollar")]; - char entity_pool_str2164[sizeof("disin")]; - char entity_pool_str2170[sizeof("spadesuit")]; - char entity_pool_str2176[sizeof("NotTilde")]; - char entity_pool_str2177[sizeof("doublebarwedge")]; - char entity_pool_str2179[sizeof("gap")]; - char entity_pool_str2186[sizeof("bbrktbrk")]; - char entity_pool_str2189[sizeof("swarrow")]; - char entity_pool_str2190[sizeof("bepsi")]; - char entity_pool_str2194[sizeof("Iscr")]; - char entity_pool_str2198[sizeof("NotTildeFullEqual")]; - char entity_pool_str2199[sizeof("eqcolon")]; - char entity_pool_str2202[sizeof("tint")]; - char entity_pool_str2205[sizeof("intprod")]; - char entity_pool_str2207[sizeof("nsupE")]; - char entity_pool_str2210[sizeof("nwarrow")]; - char entity_pool_str2211[sizeof("nsubE")]; - char entity_pool_str2214[sizeof("nges")]; - char entity_pool_str2216[sizeof("Uparrow")]; - char entity_pool_str2217[sizeof("ge")]; - char entity_pool_str2218[sizeof("OpenCurlyDoubleQuote")]; - char entity_pool_str2223[sizeof("smallsetminus")]; - char entity_pool_str2228[sizeof("Scaron")]; - char entity_pool_str2230[sizeof("nvltrie")]; - char entity_pool_str2231[sizeof("ges")]; - char entity_pool_str2232[sizeof("blank")]; - char entity_pool_str2233[sizeof("QUOT")]; - char entity_pool_str2238[sizeof("block")]; - char entity_pool_str2239[sizeof("trade")]; - char entity_pool_str2245[sizeof("jscr")]; - char entity_pool_str2246[sizeof("wedge")]; - char entity_pool_str2254[sizeof("Amacr")]; - char entity_pool_str2256[sizeof("Equal")]; - char entity_pool_str2259[sizeof("Dcaron")]; - char entity_pool_str2262[sizeof("DotDot")]; - char entity_pool_str2270[sizeof("gneq")]; - char entity_pool_str2271[sizeof("varpropto")]; - char entity_pool_str2273[sizeof("gneqq")]; - char entity_pool_str2274[sizeof("Proportional")]; - char entity_pool_str2279[sizeof("isins")]; - char entity_pool_str2281[sizeof("eDDot")]; - char entity_pool_str2282[sizeof("isin")]; - char entity_pool_str2286[sizeof("TripleDot")]; - char entity_pool_str2290[sizeof("Fouriertrf")]; - char entity_pool_str2291[sizeof("Proportion")]; - char entity_pool_str2294[sizeof("ngeq")]; - char entity_pool_str2295[sizeof("Lcaron")]; - char entity_pool_str2297[sizeof("ngeqq")]; - char entity_pool_str2313[sizeof("lE")]; - char entity_pool_str2314[sizeof("Ccaron")]; - char entity_pool_str2320[sizeof("bsemi")]; - char entity_pool_str2326[sizeof("propto")]; - char entity_pool_str2331[sizeof("lesdot")]; - char entity_pool_str2332[sizeof("Conint")]; - char entity_pool_str2334[sizeof("And")]; - char entity_pool_str2338[sizeof("searrow")]; - char entity_pool_str2343[sizeof("orslope")]; - char entity_pool_str2344[sizeof("harr")]; - char entity_pool_str2350[sizeof("late")]; - char entity_pool_str2352[sizeof("CenterDot")]; - char entity_pool_str2355[sizeof("ofr")]; - char entity_pool_str2359[sizeof("nearrow")]; - char entity_pool_str2361[sizeof("qint")]; - char entity_pool_str2364[sizeof("lates")]; - char entity_pool_str2365[sizeof("kappav")]; - char entity_pool_str2368[sizeof("horbar")]; - char entity_pool_str2369[sizeof("Efr")]; - char entity_pool_str2370[sizeof("hoarr")]; - char entity_pool_str2371[sizeof("npre")]; - char entity_pool_str2377[sizeof("inodot")]; - char entity_pool_str2379[sizeof("udarr")]; - char entity_pool_str2386[sizeof("geq")]; - char entity_pool_str2391[sizeof("nsimeq")]; - char entity_pool_str2404[sizeof("geqq")]; - char entity_pool_str2407[sizeof("efDot")]; - char entity_pool_str2410[sizeof("rpargt")]; - char entity_pool_str2419[sizeof("Oscr")]; - char entity_pool_str2422[sizeof("plusdo")]; - char entity_pool_str2425[sizeof("lagran")]; - char entity_pool_str2429[sizeof("thicksim")]; - char entity_pool_str2440[sizeof("precnsim")]; - char entity_pool_str2444[sizeof("Ncaron")]; - char entity_pool_str2449[sizeof("napE")]; - char entity_pool_str2457[sizeof("iiint")]; - char entity_pool_str2470[sizeof("Bscr")]; - char entity_pool_str2483[sizeof("mapstodown")]; - char entity_pool_str2486[sizeof("varrho")]; - char entity_pool_str2488[sizeof("isinsv")]; - char entity_pool_str2491[sizeof("nvHarr")]; - char entity_pool_str2494[sizeof("NotLeftTriangleBar")]; - char entity_pool_str2496[sizeof("equest")]; - char entity_pool_str2498[sizeof("NotLeftTriangleEqual")]; - char entity_pool_str2499[sizeof("NotLeftTriangle")]; - char entity_pool_str2502[sizeof("Aopf")]; - char entity_pool_str2503[sizeof("hbar")]; - char entity_pool_str2507[sizeof("vangrt")]; - char entity_pool_str2511[sizeof("Hfr")]; - char entity_pool_str2517[sizeof("range")]; - char entity_pool_str2518[sizeof("smte")]; - char entity_pool_str2519[sizeof("lsim")]; - char entity_pool_str2521[sizeof("npolint")]; - char entity_pool_str2523[sizeof("dcaron")]; - char entity_pool_str2525[sizeof("esim")]; - char entity_pool_str2527[sizeof("Union")]; - char entity_pool_str2532[sizeof("smtes")]; - char entity_pool_str2536[sizeof("kopf")]; - char entity_pool_str2537[sizeof("gopf")]; - char entity_pool_str2542[sizeof("nsim")]; - char entity_pool_str2544[sizeof("bsim")]; - char entity_pool_str2546[sizeof("SmallCircle")]; - char entity_pool_str2548[sizeof("NotDoubleVerticalBar")]; - char entity_pool_str2549[sizeof("NotNestedGreaterGreater")]; - char entity_pool_str2565[sizeof("EqualTilde")]; - char entity_pool_str2568[sizeof("notindot")]; - char entity_pool_str2572[sizeof("Rcaron")]; - char entity_pool_str2577[sizeof("Popf")]; - char entity_pool_str2583[sizeof("Gopf")]; - char entity_pool_str2586[sizeof("Ifr")]; - char entity_pool_str2589[sizeof("wedgeq")]; - char entity_pool_str2595[sizeof("prod")]; - char entity_pool_str2617[sizeof("osol")]; - char entity_pool_str2624[sizeof("DoubleUpArrow")]; - char entity_pool_str2627[sizeof("Congruent")]; - char entity_pool_str2631[sizeof("gnsim")]; - char entity_pool_str2635[sizeof("scsim")]; - char entity_pool_str2637[sizeof("jfr")]; - char entity_pool_str2645[sizeof("upsih")]; - char entity_pool_str2650[sizeof("nLl")]; - char entity_pool_str2653[sizeof("DoubleUpDownArrow")]; - char entity_pool_str2655[sizeof("ngsim")]; - char entity_pool_str2664[sizeof("hearts")]; - char entity_pool_str2666[sizeof("lesseqgtr")]; - char entity_pool_str2670[sizeof("nesear")]; - char entity_pool_str2676[sizeof("Exists")]; - char entity_pool_str2687[sizeof("smile")]; - char entity_pool_str2689[sizeof("uwangle")]; - char entity_pool_str2693[sizeof("heartsuit")]; - char entity_pool_str2700[sizeof("HorizontalLine")]; - char entity_pool_str2703[sizeof("GreaterLess")]; - char entity_pool_str2705[sizeof("rsaquo")]; - char entity_pool_str2707[sizeof("lsaquo")]; - char entity_pool_str2709[sizeof("realine")]; - char entity_pool_str2710[sizeof("Dashv")]; - char entity_pool_str2714[sizeof("simdot")]; - char entity_pool_str2715[sizeof("GreaterEqual")]; - char entity_pool_str2716[sizeof("GreaterTilde")]; - char entity_pool_str2721[sizeof("GreaterEqualLess")]; - char entity_pool_str2723[sizeof("GreaterGreater")]; - char entity_pool_str2737[sizeof("rceil")]; - char entity_pool_str2739[sizeof("lceil")]; - char entity_pool_str2743[sizeof("lessgtr")]; - char entity_pool_str2746[sizeof("oline")]; - char entity_pool_str2753[sizeof("thksim")]; - char entity_pool_str2755[sizeof("InvisibleTimes")]; - char entity_pool_str2762[sizeof("race")]; - char entity_pool_str2766[sizeof("iquest")]; - char entity_pool_str2774[sizeof("imagline")]; - char entity_pool_str2779[sizeof("UpTee")]; - char entity_pool_str2781[sizeof("midcir")]; - char entity_pool_str2790[sizeof("ofcir")]; - char entity_pool_str2793[sizeof("ddarr")]; - char entity_pool_str2800[sizeof("rangd")]; - char entity_pool_str2802[sizeof("langd")]; - char entity_pool_str2808[sizeof("Equilibrium")]; - char entity_pool_str2809[sizeof("parsim")]; - char entity_pool_str2810[sizeof("Vdashl")]; - char entity_pool_str2811[sizeof("Ofr")]; - char entity_pool_str2816[sizeof("Because")]; - char entity_pool_str2818[sizeof("rAtail")]; - char entity_pool_str2820[sizeof("lAtail")]; - char entity_pool_str2821[sizeof("ominus")]; - char entity_pool_str2822[sizeof("Ascr")]; - char entity_pool_str2826[sizeof("Epsilon")]; - char entity_pool_str2832[sizeof("ShortLeftArrow")]; - char entity_pool_str2845[sizeof("isinv")]; - char entity_pool_str2847[sizeof("micro")]; - char entity_pool_str2851[sizeof("zcaron")]; - char entity_pool_str2856[sizeof("kscr")]; - char entity_pool_str2857[sizeof("gscr")]; - char entity_pool_str2862[sizeof("Bfr")]; - char entity_pool_str2863[sizeof("gel")]; - char entity_pool_str2864[sizeof("hercon")]; - char entity_pool_str2871[sizeof("triminus")]; - char entity_pool_str2877[sizeof("egrave")]; - char entity_pool_str2881[sizeof("sdot")]; - char entity_pool_str2882[sizeof("ugrave")]; - char entity_pool_str2884[sizeof("Zdot")]; - char entity_pool_str2885[sizeof("edot")]; - char entity_pool_str2890[sizeof("NotTildeTilde")]; - char entity_pool_str2892[sizeof("tdot")]; - char entity_pool_str2897[sizeof("Pscr")]; - char entity_pool_str2898[sizeof("Pi")]; - char entity_pool_str2903[sizeof("Gscr")]; - char entity_pool_str2910[sizeof("plustwo")]; - char entity_pool_str2914[sizeof("NotElement")]; - char entity_pool_str2916[sizeof("PlusMinus")]; - char entity_pool_str2919[sizeof("hopf")]; - char entity_pool_str2920[sizeof("gammad")]; - char entity_pool_str2922[sizeof("mDDot")]; - char entity_pool_str2926[sizeof("divideontimes")]; - char entity_pool_str2940[sizeof("doteq")]; - char entity_pool_str2956[sizeof("varepsilon")]; - char entity_pool_str2963[sizeof("Precedes")]; - char entity_pool_str2966[sizeof("Gammad")]; - char entity_pool_str2974[sizeof("dashv")]; - char entity_pool_str2979[sizeof("NotCongruent")]; - char entity_pool_str2982[sizeof("ubreve")]; - char entity_pool_str2990[sizeof("ogt")]; - char entity_pool_str2994[sizeof("RoundImplies")]; - char entity_pool_str3002[sizeof("PrecedesSlantEqual")]; - char entity_pool_str3005[sizeof("sime")]; - char entity_pool_str3014[sizeof("Ugrave")]; - char entity_pool_str3016[sizeof("dbkarow")]; - char entity_pool_str3021[sizeof("sdote")]; - char entity_pool_str3023[sizeof("veeeq")]; - char entity_pool_str3027[sizeof("mapsto")]; - char entity_pool_str3030[sizeof("times")]; - char entity_pool_str3033[sizeof("rangle")]; - char entity_pool_str3035[sizeof("langle")]; - char entity_pool_str3038[sizeof("leftarrowtail")]; - char entity_pool_str3039[sizeof("hamilt")]; - char entity_pool_str3044[sizeof("udhar")]; - char entity_pool_str3053[sizeof("nisd")]; - char entity_pool_str3055[sizeof("rfisht")]; - char entity_pool_str3057[sizeof("lfisht")]; - char entity_pool_str3058[sizeof("harrcir")]; - char entity_pool_str3066[sizeof("OpenCurlyQuote")]; - char entity_pool_str3068[sizeof("ufisht")]; - char entity_pool_str3069[sizeof("NotHumpDownHump")]; - char entity_pool_str3072[sizeof("LeftTee")]; - char entity_pool_str3074[sizeof("rsh")]; - char entity_pool_str3076[sizeof("lsh")]; - char entity_pool_str3080[sizeof("gvertneqq")]; - char entity_pool_str3083[sizeof("timesb")]; - char entity_pool_str3092[sizeof("scpolint")]; - char entity_pool_str3095[sizeof("Cdot")]; - char entity_pool_str3103[sizeof("dwangle")]; - char entity_pool_str3114[sizeof("Ubreve")]; - char entity_pool_str3132[sizeof("LeftUpVector")]; - char entity_pool_str3135[sizeof("LeftUpVectorBar")]; - char entity_pool_str3139[sizeof("Ecaron")]; - char entity_pool_str3142[sizeof("homtht")]; - char entity_pool_str3147[sizeof("igrave")]; - char entity_pool_str3155[sizeof("npreceq")]; - char entity_pool_str3156[sizeof("ecolon")]; - char entity_pool_str3167[sizeof("dd")]; - char entity_pool_str3174[sizeof("simeq")]; - char entity_pool_str3179[sizeof("notinE")]; - char entity_pool_str3198[sizeof("bigoplus")]; - char entity_pool_str3214[sizeof("Afr")]; - char entity_pool_str3215[sizeof("leftarrow")]; - char entity_pool_str3216[sizeof("oint")]; - char entity_pool_str3218[sizeof("Tab")]; - char entity_pool_str3227[sizeof("ogon")]; - char entity_pool_str3230[sizeof("lt")]; - char entity_pool_str3231[sizeof("nLeftrightarrow")]; - char entity_pool_str3235[sizeof("rarrb")]; - char entity_pool_str3237[sizeof("larrb")]; - char entity_pool_str3239[sizeof("hscr")]; - char entity_pool_str3246[sizeof("LeftUpDownVector")]; - char entity_pool_str3248[sizeof("kfr")]; - char entity_pool_str3249[sizeof("gfr")]; - char entity_pool_str3250[sizeof("UpArrowBar")]; - char entity_pool_str3259[sizeof("nsce")]; - char entity_pool_str3260[sizeof("ltdot")]; - char entity_pool_str3261[sizeof("gesl")]; - char entity_pool_str3262[sizeof("xodot")]; - char entity_pool_str3263[sizeof("star")]; - char entity_pool_str3266[sizeof("lowbar")]; - char entity_pool_str3268[sizeof("xharr")]; - char entity_pool_str3269[sizeof("ecir")]; - char entity_pool_str3271[sizeof("utdot")]; - char entity_pool_str3272[sizeof("natur")]; - char entity_pool_str3273[sizeof("Lsh")]; - char entity_pool_str3274[sizeof("infin")]; - char entity_pool_str3276[sizeof("comp")]; - char entity_pool_str3278[sizeof("sigmav")]; - char entity_pool_str3285[sizeof("xotime")]; - char entity_pool_str3289[sizeof("Pfr")]; - char entity_pool_str3295[sizeof("Gfr")]; - char entity_pool_str3298[sizeof("bigcap")]; - char entity_pool_str3300[sizeof("simlE")]; - char entity_pool_str3319[sizeof("iiiint")]; - char entity_pool_str3320[sizeof("barwedge")]; - char entity_pool_str3321[sizeof("Barwed")]; - char entity_pool_str3329[sizeof("xlarr")]; - char entity_pool_str3330[sizeof("LessEqualGreater")]; - char entity_pool_str3332[sizeof("crarr")]; - char entity_pool_str3333[sizeof("isindot")]; - char entity_pool_str3335[sizeof("commat")]; - char entity_pool_str3342[sizeof("middot")]; - char entity_pool_str3349[sizeof("lesdotor")]; - char entity_pool_str3356[sizeof("sigmaf")]; - char entity_pool_str3366[sizeof("rarrbfs")]; - char entity_pool_str3368[sizeof("larrbfs")]; - char entity_pool_str3371[sizeof("xrarr")]; - char entity_pool_str3376[sizeof("bigcup")]; - char entity_pool_str3378[sizeof("clubs")]; - char entity_pool_str3379[sizeof("hArr")]; - char entity_pool_str3380[sizeof("rtrie")]; - char entity_pool_str3382[sizeof("ltrie")]; - char entity_pool_str3383[sizeof("imped")]; - char entity_pool_str3388[sizeof("eogon")]; - char entity_pool_str3389[sizeof("rx")]; - char entity_pool_str3390[sizeof("ltrPar")]; - char entity_pool_str3391[sizeof("Star")]; - char entity_pool_str3393[sizeof("uogon")]; - char entity_pool_str3396[sizeof("Tilde")]; - char entity_pool_str3398[sizeof("half")]; - char entity_pool_str3405[sizeof("tilde")]; - char entity_pool_str3412[sizeof("Leftarrow")]; - char entity_pool_str3417[sizeof("gesles")]; - char entity_pool_str3422[sizeof("cap")]; - char entity_pool_str3423[sizeof("strns")]; - char entity_pool_str3427[sizeof("Lt")]; - char entity_pool_str3439[sizeof("prnE")]; - char entity_pool_str3447[sizeof("sqsupe")]; - char entity_pool_str3462[sizeof("sqsupset")]; - char entity_pool_str3467[sizeof("tridot")]; - char entity_pool_str3468[sizeof("order")]; - char entity_pool_str3471[sizeof("caps")]; - char entity_pool_str3475[sizeof("cross")]; - char entity_pool_str3482[sizeof("dfisht")]; - char entity_pool_str3487[sizeof("xmap")]; - char entity_pool_str3491[sizeof("sqsup")]; - char entity_pool_str3503[sizeof("rtri")]; - char entity_pool_str3505[sizeof("ltri")]; - char entity_pool_str3506[sizeof("it")]; - char entity_pool_str3507[sizeof("rmoust")]; - char entity_pool_str3509[sizeof("lmoust")]; - char entity_pool_str3510[sizeof("gnE")]; - char entity_pool_str3511[sizeof("lgE")]; - char entity_pool_str3514[sizeof("scE")]; - char entity_pool_str3516[sizeof("utri")]; - char entity_pool_str3518[sizeof("vellip")]; - char entity_pool_str3520[sizeof("ETH")]; - char entity_pool_str3523[sizeof("lmidot")]; - char entity_pool_str3525[sizeof("Uogon")]; - char entity_pool_str3526[sizeof("CounterClockwiseContourIntegral")]; - char entity_pool_str3534[sizeof("ngE")]; - char entity_pool_str3535[sizeof("nwnear")]; - char entity_pool_str3543[sizeof("lesg")]; - char entity_pool_str3546[sizeof("plusb")]; - char entity_pool_str3550[sizeof("Rsh")]; - char entity_pool_str3555[sizeof("copysr")]; - char entity_pool_str3557[sizeof("infintie")]; - char entity_pool_str3559[sizeof("imath")]; - char entity_pool_str3560[sizeof("Esim")]; - char entity_pool_str3565[sizeof("Phi")]; - char entity_pool_str3573[sizeof("glE")]; - char entity_pool_str3579[sizeof("vnsup")]; - char entity_pool_str3582[sizeof("simgE")]; - char entity_pool_str3586[sizeof("DoubleLongLeftArrow")]; - char entity_pool_str3591[sizeof("DoubleLongLeftRightArrow")]; - char entity_pool_str3594[sizeof("nvgt")]; - char entity_pool_str3607[sizeof("Mellintrf")]; - char entity_pool_str3611[sizeof("Prime")]; - char entity_pool_str3615[sizeof("iinfin")]; - char entity_pool_str3620[sizeof("ReverseElement")]; - char entity_pool_str3627[sizeof("EmptySmallSquare")]; - char entity_pool_str3628[sizeof("radic")]; - char entity_pool_str3631[sizeof("hfr")]; - char entity_pool_str3632[sizeof("zdot")]; - char entity_pool_str3633[sizeof("male")]; - char entity_pool_str3635[sizeof("rarrc")]; - char entity_pool_str3636[sizeof("prec")]; - char entity_pool_str3637[sizeof("scnap")]; - char entity_pool_str3641[sizeof("DifferentialD")]; - char entity_pool_str3643[sizeof("models")]; - char entity_pool_str3657[sizeof("ltcir")]; - char entity_pool_str3658[sizeof("iogon")]; - char entity_pool_str3665[sizeof("capcap")]; - char entity_pool_str3667[sizeof("iff")]; - char entity_pool_str3669[sizeof("ddotseq")]; - char entity_pool_str3671[sizeof("CirclePlus")]; - char entity_pool_str3676[sizeof("rthree")]; - char entity_pool_str3678[sizeof("lthree")]; - char entity_pool_str3681[sizeof("PrecedesTilde")]; - char entity_pool_str3685[sizeof("dtdot")]; - char entity_pool_str3687[sizeof("clubsuit")]; - char entity_pool_str3689[sizeof("racute")]; - char entity_pool_str3691[sizeof("lacute")]; - char entity_pool_str3692[sizeof("trpezium")]; - char entity_pool_str3693[sizeof("sacute")]; - char entity_pool_str3696[sizeof("Zacute")]; - char entity_pool_str3697[sizeof("eacute")]; - char entity_pool_str3699[sizeof("TildeTilde")]; - char entity_pool_str3701[sizeof("Uarrocir")]; - char entity_pool_str3702[sizeof("uacute")]; - char entity_pool_str3703[sizeof("lowast")]; - char entity_pool_str3714[sizeof("nacute")]; - char entity_pool_str3716[sizeof("NotPrecedes")]; - char entity_pool_str3720[sizeof("Lmidot")]; - char entity_pool_str3725[sizeof("UpArrow")]; - char entity_pool_str3727[sizeof("rarrw")]; - char entity_pool_str3738[sizeof("DownTee")]; - char entity_pool_str3742[sizeof("FilledSmallSquare")]; - char entity_pool_str3743[sizeof("capcup")]; - char entity_pool_str3749[sizeof("GreaterFullEqual")]; - char entity_pool_str3756[sizeof("nvle")]; - char entity_pool_str3758[sizeof("trie")]; - char entity_pool_str3764[sizeof("omicron")]; - char entity_pool_str3766[sizeof("DoubleRightTee")]; - char entity_pool_str3767[sizeof("Cconint")]; - char entity_pool_str3768[sizeof("rsquor")]; - char entity_pool_str3770[sizeof("lsquor")]; - char entity_pool_str3772[sizeof("zigrarr")]; - char entity_pool_str3780[sizeof("copf")]; - char entity_pool_str3782[sizeof("ContourIntegral")]; - char entity_pool_str3798[sizeof("hairsp")]; - char entity_pool_str3799[sizeof("sqsupseteq")]; - char entity_pool_str3800[sizeof("csub")]; - char entity_pool_str3801[sizeof("upharpoonright")]; - char entity_pool_str3805[sizeof("DownBreve")]; - char entity_pool_str3817[sizeof("ShortDownArrow")]; - char entity_pool_str3819[sizeof("xopf")]; - char entity_pool_str3821[sizeof("Sacute")]; - char entity_pool_str3829[sizeof("vsupnE")]; - char entity_pool_str3830[sizeof("cir")]; - char entity_pool_str3831[sizeof("plusacir")]; - char entity_pool_str3832[sizeof("csup")]; - char entity_pool_str3833[sizeof("vsubnE")]; - char entity_pool_str3834[sizeof("Uacute")]; - char entity_pool_str3836[sizeof("isinE")]; - char entity_pool_str3845[sizeof("gEl")]; - char entity_pool_str3851[sizeof("sqcups")]; - char entity_pool_str3853[sizeof("smid")]; - char entity_pool_str3855[sizeof("lg")]; - char entity_pool_str3857[sizeof("DoubleLongRightArrow")]; - char entity_pool_str3858[sizeof("NotPrecedesSlantEqual")]; - char entity_pool_str3861[sizeof("eg")]; - char entity_pool_str3864[sizeof("AMP")]; - char entity_pool_str3874[sizeof("nmid")]; - char entity_pool_str3883[sizeof("timesd")]; - char entity_pool_str3886[sizeof("DownLeftVector")]; - char entity_pool_str3887[sizeof("zwnj")]; - char entity_pool_str3888[sizeof("Lacute")]; - char entity_pool_str3889[sizeof("DownLeftVectorBar")]; - char entity_pool_str3898[sizeof("ograve")]; - char entity_pool_str3899[sizeof("Yacute")]; - char entity_pool_str3903[sizeof("sqcup")]; - char entity_pool_str3906[sizeof("odot")]; - char entity_pool_str3907[sizeof("Cacute")]; - char entity_pool_str3909[sizeof("nu")]; - char entity_pool_str3910[sizeof("tritime")]; - char entity_pool_str3912[sizeof("Egrave")]; - char entity_pool_str3913[sizeof("eplus")]; - char entity_pool_str3915[sizeof("backcong")]; - char entity_pool_str3918[sizeof("uplus")]; - char entity_pool_str3920[sizeof("Edot")]; - char entity_pool_str3924[sizeof("csupe")]; - char entity_pool_str3926[sizeof("simg")]; - char entity_pool_str3927[sizeof("UpperRightArrow")]; - char entity_pool_str3928[sizeof("csube")]; - char entity_pool_str3930[sizeof("dtri")]; - char entity_pool_str3931[sizeof("prnsim")]; - char entity_pool_str3936[sizeof("boxUr")]; - char entity_pool_str3937[sizeof("uuarr")]; - char entity_pool_str3945[sizeof("DownLeftTeeVector")]; - char entity_pool_str3946[sizeof("gsime")]; - char entity_pool_str3950[sizeof("bigotimes")]; - char entity_pool_str3951[sizeof("Dagger")]; - char entity_pool_str3954[sizeof("Intersection")]; - char entity_pool_str3967[sizeof("iacute")]; - char entity_pool_str3969[sizeof("prcue")]; - char entity_pool_str3981[sizeof("egsdot")]; - char entity_pool_str3987[sizeof("Implies")]; - char entity_pool_str3988[sizeof("VDash")]; - char entity_pool_str3996[sizeof("bump")]; - char entity_pool_str4015[sizeof("Mu")]; - char entity_pool_str4022[sizeof("vDash")]; - char entity_pool_str4028[sizeof("lvnE")]; - char entity_pool_str4033[sizeof("LeftTeeArrow")]; - char entity_pool_str4037[sizeof("Nacute")]; - char entity_pool_str4042[sizeof("UnderBrace")]; - char entity_pool_str4043[sizeof("Psi")]; - char entity_pool_str4047[sizeof("rhov")]; - char entity_pool_str4049[sizeof("lescc")]; - char entity_pool_str4055[sizeof("sup1")]; - char entity_pool_str4058[sizeof("sup2")]; - char entity_pool_str4066[sizeof("sup3")]; - char entity_pool_str4071[sizeof("bigodot")]; - char entity_pool_str4078[sizeof("Downarrow")]; - char entity_pool_str4080[sizeof("xsqcup")]; - char entity_pool_str4082[sizeof("barvee")]; - char entity_pool_str4087[sizeof("NegativeMediumSpace")]; - char entity_pool_str4088[sizeof("bumpe")]; - char entity_pool_str4100[sizeof("cscr")]; - char entity_pool_str4109[sizeof("nsc")]; - char entity_pool_str4115[sizeof("sup")]; - char entity_pool_str4122[sizeof("cedil")]; - char entity_pool_str4125[sizeof("boxVr")]; - char entity_pool_str4127[sizeof("origof")]; - char entity_pool_str4128[sizeof("zwj")]; - char entity_pool_str4129[sizeof("Igrave")]; - char entity_pool_str4137[sizeof("Idot")]; - char entity_pool_str4139[sizeof("xscr")]; - char entity_pool_str4140[sizeof("xi")]; - char entity_pool_str4144[sizeof("nGtv")]; - char entity_pool_str4153[sizeof("boxHu")]; - char entity_pool_str4163[sizeof("THORN")]; - char entity_pool_str4165[sizeof("Racute")]; - char entity_pool_str4167[sizeof("rarrhk")]; - char entity_pool_str4169[sizeof("larrhk")]; - char entity_pool_str4177[sizeof("rtriltri")]; - char entity_pool_str4189[sizeof("boxV")]; - char entity_pool_str4215[sizeof("dagger")]; - char entity_pool_str4220[sizeof("Omicron")]; - char entity_pool_str4226[sizeof("DoubleVerticalBar")]; - char entity_pool_str4229[sizeof("nexists")]; - char entity_pool_str4232[sizeof("Nu")]; - char entity_pool_str4233[sizeof("nexist")]; - char entity_pool_str4234[sizeof("gE")]; - char entity_pool_str4238[sizeof("ap")]; - char entity_pool_str4243[sizeof("Sup")]; - char entity_pool_str4244[sizeof("doteqdot")]; - char entity_pool_str4247[sizeof("eng")]; - char entity_pool_str4249[sizeof("caron")]; - char entity_pool_str4251[sizeof("boxHU")]; - char entity_pool_str4252[sizeof("gesdot")]; - char entity_pool_str4257[sizeof("ReverseEquilibrium")]; - char entity_pool_str4262[sizeof("boxUL")]; - char entity_pool_str4264[sizeof("supmult")]; - char entity_pool_str4267[sizeof("pitchfork")]; - char entity_pool_str4272[sizeof("numsp")]; - char entity_pool_str4285[sizeof("rang")]; - char entity_pool_str4287[sizeof("lang")]; - char entity_pool_str4290[sizeof("ocir")]; - char entity_pool_str4292[sizeof("rationals")]; - char entity_pool_str4294[sizeof("coprod")]; - char entity_pool_str4307[sizeof("ltlarr")]; - char entity_pool_str4308[sizeof("breve")]; - char entity_pool_str4310[sizeof("nang")]; - char entity_pool_str4315[sizeof("swarhk")]; - char entity_pool_str4322[sizeof("raquo")]; - char entity_pool_str4324[sizeof("laquo")]; - char entity_pool_str4325[sizeof("supsub")]; - char entity_pool_str4329[sizeof("Cup")]; - char entity_pool_str4330[sizeof("ape")]; - char entity_pool_str4331[sizeof("quest")]; - char entity_pool_str4336[sizeof("nwarhk")]; - char entity_pool_str4340[sizeof("supset")]; - char entity_pool_str4342[sizeof("downarrow")]; - char entity_pool_str4351[sizeof("duarr")]; - char entity_pool_str4353[sizeof("apos")]; - char entity_pool_str4354[sizeof("Ograve")]; - char entity_pool_str4355[sizeof("shortparallel")]; - char entity_pool_str4364[sizeof("nsucc")]; - char entity_pool_str4368[sizeof("LongLeftArrow")]; - char entity_pool_str4377[sizeof("lesdoto")]; - char entity_pool_str4384[sizeof("supne")]; - char entity_pool_str4388[sizeof("nGg")]; - char entity_pool_str4396[sizeof("raemptyv")]; - char entity_pool_str4397[sizeof("supsup")]; - char entity_pool_str4398[sizeof("laemptyv")]; - char entity_pool_str4401[sizeof("topfork")]; - char entity_pool_str4423[sizeof("Eogon")]; - char entity_pool_str4429[sizeof("risingdotseq")]; - char entity_pool_str4431[sizeof("bumpeq")]; - char entity_pool_str4435[sizeof("lstrok")]; - char entity_pool_str4439[sizeof("Tstrok")]; - char entity_pool_str4440[sizeof("gsim")]; - char entity_pool_str4443[sizeof("bemptyv")]; - char entity_pool_str4444[sizeof("zacute")]; - char entity_pool_str4445[sizeof("gsiml")]; - char entity_pool_str4448[sizeof("tstrok")]; - char entity_pool_str4450[sizeof("roang")]; - char entity_pool_str4451[sizeof("boxVL")]; - char entity_pool_str4452[sizeof("loang")]; - char entity_pool_str4456[sizeof("nleqslant")]; - char entity_pool_str4462[sizeof("sbquo")]; - char entity_pool_str4464[sizeof("searhk")]; - char entity_pool_str4465[sizeof("lnapprox")]; - char entity_pool_str4468[sizeof("Supset")]; - char entity_pool_str4470[sizeof("boxHd")]; - char entity_pool_str4471[sizeof("varkappa")]; - char entity_pool_str4475[sizeof("circeq")]; - char entity_pool_str4477[sizeof("yopf")]; - char entity_pool_str4479[sizeof("UnionPlus")]; - char entity_pool_str4484[sizeof("Lang")]; - char entity_pool_str4485[sizeof("nearhk")]; - char entity_pool_str4486[sizeof("shcy")]; - char entity_pool_str4492[sizeof("cfr")]; - char entity_pool_str4506[sizeof("Kappa")]; - char entity_pool_str4507[sizeof("ljcy")]; - char entity_pool_str4508[sizeof("MediumSpace")]; - char entity_pool_str4511[sizeof("supseteq")]; - char entity_pool_str4512[sizeof("supseteqq")]; - char entity_pool_str4517[sizeof("reg")]; - char entity_pool_str4518[sizeof("amacr")]; - char entity_pool_str4519[sizeof("leg")]; - char entity_pool_str4524[sizeof("weierp")]; - char entity_pool_str4525[sizeof("TScy")]; - char entity_pool_str4529[sizeof("supsetneq")]; - char entity_pool_str4530[sizeof("njcy")]; - char entity_pool_str4531[sizeof("xfr")]; - char entity_pool_str4533[sizeof("mu")]; - char entity_pool_str4539[sizeof("nvinfin")]; - char entity_pool_str4540[sizeof("boxUR")]; - char entity_pool_str4545[sizeof("xoplus")]; - char entity_pool_str4551[sizeof("leftleftarrows")]; - char entity_pool_str4552[sizeof("sum")]; - char entity_pool_str4559[sizeof("beth")]; - char entity_pool_str4563[sizeof("complement")]; - char entity_pool_str4573[sizeof("num")]; - char entity_pool_str4574[sizeof("amp")]; - char entity_pool_str4583[sizeof("boxUl")]; - char entity_pool_str4590[sizeof("NotGreater")]; - char entity_pool_str4591[sizeof("boxplus")]; - char entity_pool_str4592[sizeof("jmath")]; - char entity_pool_str4594[sizeof("sfrown")]; - char entity_pool_str4596[sizeof("Dstrok")]; - char entity_pool_str4598[sizeof("and")]; - char entity_pool_str4599[sizeof("NotGreaterGreater")]; - char entity_pool_str4606[sizeof("NotGreaterSlantEqual")]; - char entity_pool_str4608[sizeof("NotGreaterLess")]; - char entity_pool_str4609[sizeof("quot")]; - char entity_pool_str4616[sizeof("NotGreaterFullEqual")]; - char entity_pool_str4617[sizeof("hyphen")]; - char entity_pool_str4618[sizeof("planck")]; - char entity_pool_str4620[sizeof("TildeEqual")]; - char entity_pool_str4627[sizeof("tosa")]; - char entity_pool_str4632[sizeof("Lstrok")]; - char entity_pool_str4635[sizeof("shy")]; - char entity_pool_str4639[sizeof("xnis")]; - char entity_pool_str4640[sizeof("Iogon")]; - char entity_pool_str4643[sizeof("DZcy")]; - char entity_pool_str4645[sizeof("ohbar")]; - char entity_pool_str4652[sizeof("cirscir")]; - char entity_pool_str4654[sizeof("sext")]; - char entity_pool_str4668[sizeof("para")]; - char entity_pool_str4671[sizeof("ast")]; - char entity_pool_str4678[sizeof("questeq")]; - char entity_pool_str4680[sizeof("Sum")]; - char entity_pool_str4682[sizeof("DScy")]; - char entity_pool_str4684[sizeof("ENG")]; - char entity_pool_str4686[sizeof("ZHcy")]; - char entity_pool_str4689[sizeof("longleftarrow")]; - char entity_pool_str4691[sizeof("dash")]; - char entity_pool_str4699[sizeof("DownTeeArrow")]; - char entity_pool_str4706[sizeof("supsetneqq")]; - char entity_pool_str4714[sizeof("profalar")]; - char entity_pool_str4718[sizeof("oacute")]; - char entity_pool_str4729[sizeof("boxVR")]; - char entity_pool_str4732[sizeof("Eacute")]; - char entity_pool_str4738[sizeof("supplus")]; - char entity_pool_str4740[sizeof("hookleftarrow")]; - char entity_pool_str4743[sizeof("CloseCurlyQuote")]; - char entity_pool_str4746[sizeof("trisb")]; - char entity_pool_str4747[sizeof("dotsquare")]; - char entity_pool_str4751[sizeof("rtimes")]; - char entity_pool_str4753[sizeof("ltimes")]; - char entity_pool_str4756[sizeof("toea")]; - char entity_pool_str4757[sizeof("Agrave")]; - char entity_pool_str4760[sizeof("Assign")]; - char entity_pool_str4761[sizeof("Rang")]; - char entity_pool_str4762[sizeof("iocy")]; - char entity_pool_str4764[sizeof("NotPrecedesEqual")]; - char entity_pool_str4766[sizeof("aopf")]; - char entity_pool_str4768[sizeof("chi")]; - char entity_pool_str4771[sizeof("quaternions")]; - char entity_pool_str4772[sizeof("boxVl")]; - char entity_pool_str4773[sizeof("NotGreaterEqual")]; - char entity_pool_str4777[sizeof("xhArr")]; - char entity_pool_str4791[sizeof("orderof")]; - char entity_pool_str4794[sizeof("rsquo")]; - char entity_pool_str4796[sizeof("lsquo")]; - char entity_pool_str4797[sizeof("yscr")]; - char entity_pool_str4800[sizeof("gdot")]; - char entity_pool_str4802[sizeof("NotSquareSubsetEqual")]; - char entity_pool_str4803[sizeof("KHcy")]; - char entity_pool_str4809[sizeof("bsolb")]; - char entity_pool_str4810[sizeof("NotSquareSubset")]; - char entity_pool_str4811[sizeof("SHcy")]; - char entity_pool_str4821[sizeof("YIcy")]; - char entity_pool_str4825[sizeof("cwint")]; - char entity_pool_str4828[sizeof("Theta")]; - char entity_pool_str4837[sizeof("theta")]; - char entity_pool_str4838[sizeof("xlArr")]; - char entity_pool_str4840[sizeof("NotSquareSupersetEqual")]; - char entity_pool_str4843[sizeof("demptyv")]; - char entity_pool_str4844[sizeof("triangle")]; - char entity_pool_str4846[sizeof("Gdot")]; - char entity_pool_str4848[sizeof("NotSquareSuperset")]; - char entity_pool_str4857[sizeof("Abreve")]; - char entity_pool_str4860[sizeof("dstrok")]; - char entity_pool_str4861[sizeof("pertenk")]; - char entity_pool_str4866[sizeof("rbrack")]; - char entity_pool_str4868[sizeof("lbrack")]; - char entity_pool_str4872[sizeof("odsold")]; - char entity_pool_str4878[sizeof("omid")]; - char entity_pool_str4880[sizeof("xrArr")]; - char entity_pool_str4882[sizeof("triangleleft")]; - char entity_pool_str4883[sizeof("NotGreaterTilde")]; - char entity_pool_str4884[sizeof("colone")]; - char entity_pool_str4886[sizeof("Longleftarrow")]; - char entity_pool_str4888[sizeof("iota")]; - char entity_pool_str4890[sizeof("colon")]; - char entity_pool_str4891[sizeof("Zeta")]; - char entity_pool_str4892[sizeof("gbreve")]; - char entity_pool_str4897[sizeof("CHcy")]; - char entity_pool_str4900[sizeof("YUcy")]; - char entity_pool_str4901[sizeof("REG")]; - char entity_pool_str4902[sizeof("szlig")]; - char entity_pool_str4909[sizeof("dzcy")]; - char entity_pool_str4911[sizeof("beta")]; - char entity_pool_str4918[sizeof("euro")]; - char entity_pool_str4921[sizeof("LeftArrow")]; - char entity_pool_str4924[sizeof("CapitalDifferentialD")]; - char entity_pool_str4926[sizeof("ring")]; - char entity_pool_str4927[sizeof("Laplacetrf")]; - char entity_pool_str4932[sizeof("djcy")]; - char entity_pool_str4934[sizeof("oplus")]; - char entity_pool_str4937[sizeof("integers")]; - char entity_pool_str4938[sizeof("Gbreve")]; - char entity_pool_str4940[sizeof("ubrcy")]; - char entity_pool_str4941[sizeof("euml")]; - char entity_pool_str4944[sizeof("deg")]; - char entity_pool_str4946[sizeof("uuml")]; - char entity_pool_str4949[sizeof("Iacute")]; - char entity_pool_str4950[sizeof("succeq")]; - char entity_pool_str4952[sizeof("KJcy")]; - char entity_pool_str4961[sizeof("CupCap")]; - char entity_pool_str4975[sizeof("tscy")]; - char entity_pool_str4982[sizeof("cent")]; - char entity_pool_str4991[sizeof("DJcy")]; - char entity_pool_str5009[sizeof("TildeFullEqual")]; - char entity_pool_str5011[sizeof("triangleq")]; - char entity_pool_str5016[sizeof("duhar")]; - char entity_pool_str5025[sizeof("LeftDoubleBracket")]; - char entity_pool_str5027[sizeof("LJcy")]; - char entity_pool_str5036[sizeof("iecy")]; - char entity_pool_str5043[sizeof("trianglelefteq")]; - char entity_pool_str5049[sizeof("nequiv")]; - char entity_pool_str5055[sizeof("nshortparallel")]; - char entity_pool_str5062[sizeof("ndash")]; - char entity_pool_str5063[sizeof("bowtie")]; - char entity_pool_str5065[sizeof("fjlig")]; - char entity_pool_str5072[sizeof("Ubrcy")]; - char entity_pool_str5074[sizeof("vartheta")]; - char entity_pool_str5078[sizeof("Uuml")]; - char entity_pool_str5084[sizeof("vartriangleright")]; - char entity_pool_str5085[sizeof("vartriangleleft")]; - char entity_pool_str5086[sizeof("ascr")]; - char entity_pool_str5089[sizeof("succcurlyeq")]; - char entity_pool_str5093[sizeof("cwconint")]; - char entity_pool_str5101[sizeof("sc")]; - char entity_pool_str5103[sizeof("fllig")]; - char entity_pool_str5105[sizeof("circledast")]; - char entity_pool_str5108[sizeof("Vdash")]; - char entity_pool_str5112[sizeof("nVdash")]; - char entity_pool_str5120[sizeof("suplarr")]; - char entity_pool_str5124[sizeof("robrk")]; - char entity_pool_str5126[sizeof("lobrk")]; - char entity_pool_str5142[sizeof("vdash")]; - char entity_pool_str5143[sizeof("Yuml")]; - char entity_pool_str5151[sizeof("gt")]; - char entity_pool_str5156[sizeof("ccaps")]; - char entity_pool_str5173[sizeof("Succeeds")]; - char entity_pool_str5174[sizeof("Oacute")]; - char entity_pool_str5175[sizeof("TRADE")]; - char entity_pool_str5176[sizeof("NJcy")]; - char entity_pool_str5181[sizeof("gtdot")]; - char entity_pool_str5189[sizeof("yfr")]; - char entity_pool_str5192[sizeof("compfn")]; - char entity_pool_str5197[sizeof("Gt")]; - char entity_pool_str5198[sizeof("scnE")]; - char entity_pool_str5199[sizeof("ijlig")]; - char entity_pool_str5203[sizeof("circledS")]; - char entity_pool_str5206[sizeof("yen")]; - char entity_pool_str5208[sizeof("thetasym")]; - char entity_pool_str5211[sizeof("iuml")]; - char entity_pool_str5212[sizeof("SucceedsSlantEqual")]; - char entity_pool_str5217[sizeof("boxH")]; - char entity_pool_str5218[sizeof("mumap")]; - char entity_pool_str5222[sizeof("rightrightarrows")]; - char entity_pool_str5227[sizeof("coloneq")]; - char entity_pool_str5229[sizeof("Sc")]; - char entity_pool_str5230[sizeof("glj")]; - char entity_pool_str5231[sizeof("iexcl")]; - char entity_pool_str5234[sizeof("ccups")]; - char entity_pool_str5236[sizeof("xcap")]; - char entity_pool_str5237[sizeof("zhcy")]; - char entity_pool_str5241[sizeof("boxHD")]; - char entity_pool_str5250[sizeof("leqslant")]; - char entity_pool_str5252[sizeof("UpperLeftArrow")]; - char entity_pool_str5257[sizeof("dblac")]; - char entity_pool_str5260[sizeof("puncsp")]; - char entity_pool_str5262[sizeof("ccaron")]; - char entity_pool_str5264[sizeof("rbbrk")]; - char entity_pool_str5266[sizeof("lbbrk")]; - char entity_pool_str5268[sizeof("Aogon")]; - char entity_pool_str5269[sizeof("LeftTriangleBar")]; - char entity_pool_str5272[sizeof("gesdotol")]; - char entity_pool_str5273[sizeof("LeftTriangleEqual")]; - char entity_pool_str5274[sizeof("LeftTriangle")]; - char entity_pool_str5280[sizeof("conint")]; - char entity_pool_str5283[sizeof("drbkarow")]; - char entity_pool_str5295[sizeof("rtrif")]; - char entity_pool_str5297[sizeof("ltrif")]; - char entity_pool_str5300[sizeof("ReverseUpEquilibrium")]; - char entity_pool_str5306[sizeof("LeftCeiling")]; - char entity_pool_str5308[sizeof("utrif")]; - char entity_pool_str5314[sizeof("xcup")]; - char entity_pool_str5319[sizeof("fallingdotseq")]; - char entity_pool_str5325[sizeof("rcedil")]; - char entity_pool_str5327[sizeof("lcedil")]; - char entity_pool_str5329[sizeof("scedil")]; - char entity_pool_str5331[sizeof("Tcedil")]; - char entity_pool_str5333[sizeof("starf")]; - char entity_pool_str5334[sizeof("boxminus")]; - char entity_pool_str5340[sizeof("tcedil")]; - char entity_pool_str5341[sizeof("ZeroWidthSpace")]; - char entity_pool_str5350[sizeof("ncedil")]; - char entity_pool_str5358[sizeof("phiv")]; - char entity_pool_str5375[sizeof("ic")]; - char entity_pool_str5384[sizeof("capdot")]; - char entity_pool_str5387[sizeof("dscy")]; - char entity_pool_str5397[sizeof("check")]; - char entity_pool_str5398[sizeof("ovbar")]; - char entity_pool_str5405[sizeof("ntriangleleft")]; - char entity_pool_str5411[sizeof("RightTee")]; - char entity_pool_str5412[sizeof("nvge")]; - char entity_pool_str5424[sizeof("leftrightsquigarrow")]; - char entity_pool_str5431[sizeof("lozenge")]; - char entity_pool_str5434[sizeof("RightTriangleBar")]; - char entity_pool_str5436[sizeof("RightTeeVector")]; - char entity_pool_str5438[sizeof("RightTriangleEqual")]; - char entity_pool_str5439[sizeof("RightTriangle")]; - char entity_pool_str5449[sizeof("Kcedil")]; - char entity_pool_str5457[sizeof("Scedil")]; - char entity_pool_str5468[sizeof("cirfnint")]; - char entity_pool_str5471[sizeof("empty")]; - char entity_pool_str5478[sizeof("afr")]; - char entity_pool_str5482[sizeof("DiacriticalTilde")]; - char entity_pool_str5489[sizeof("LeftDownVector")]; - char entity_pool_str5492[sizeof("LeftDownVectorBar")]; - char entity_pool_str5501[sizeof("lEg")]; - char entity_pool_str5509[sizeof("ApplyFunction")]; - char entity_pool_str5512[sizeof("bumpE")]; - char entity_pool_str5524[sizeof("Lcedil")]; - char entity_pool_str5528[sizeof("caret")]; - char entity_pool_str5530[sizeof("Barv")]; - char entity_pool_str5543[sizeof("Ccedil")]; - char entity_pool_str5547[sizeof("circledR")]; - char entity_pool_str5548[sizeof("LeftDownTeeVector")]; - char entity_pool_str5552[sizeof("tshcy")]; - char entity_pool_str5556[sizeof("DotEqual")]; - char entity_pool_str5564[sizeof("centerdot")]; - char entity_pool_str5566[sizeof("ntrianglelefteq")]; - char entity_pool_str5568[sizeof("minus")]; - char entity_pool_str5570[sizeof("gimel")]; - char entity_pool_str5577[sizeof("Aacute")]; - char entity_pool_str5578[sizeof("gtcir")]; - char entity_pool_str5583[sizeof("gtrarr")]; - char entity_pool_str5584[sizeof("bull")]; - char entity_pool_str5587[sizeof("DownArrow")]; - char entity_pool_str5593[sizeof("rdquor")]; - char entity_pool_str5595[sizeof("ldquor")]; - char entity_pool_str5598[sizeof("intlarhk")]; - char entity_pool_str5602[sizeof("utilde")]; - char entity_pool_str5612[sizeof("gacute")]; - char entity_pool_str5614[sizeof("ntilde")]; - char entity_pool_str5615[sizeof("af")]; - char entity_pool_str5618[sizeof("Hstrok")]; - char entity_pool_str5620[sizeof("exponentiale")]; - char entity_pool_str5621[sizeof("minusb")]; - char entity_pool_str5625[sizeof("RightUpTeeVector")]; - char entity_pool_str5630[sizeof("UpTeeArrow")]; - char entity_pool_str5639[sizeof("zeta")]; - char entity_pool_str5644[sizeof("DiacriticalDot")]; - char entity_pool_str5645[sizeof("DiacriticalDoubleAcute")]; - char entity_pool_str5663[sizeof("nleftarrow")]; - char entity_pool_str5664[sizeof("hkswarow")]; - char entity_pool_str5666[sizeof("iiota")]; - char entity_pool_str5669[sizeof("apacir")]; - char entity_pool_str5673[sizeof("Ncedil")]; - char entity_pool_str5678[sizeof("capand")]; - char entity_pool_str5686[sizeof("mdash")]; - char entity_pool_str5689[sizeof("filig")]; - char entity_pool_str5690[sizeof("scnsim")]; - char entity_pool_str5699[sizeof("realpart")]; - char entity_pool_str5703[sizeof("leftthreetimes")]; - char entity_pool_str5704[sizeof("asymp")]; - char entity_pool_str5718[sizeof("hellip")]; - char entity_pool_str5722[sizeof("dtrif")]; - char entity_pool_str5724[sizeof("NotExists")]; - char entity_pool_str5728[sizeof("sccue")]; - char entity_pool_str5733[sizeof("YAcy")]; - char entity_pool_str5734[sizeof("Utilde")]; - char entity_pool_str5741[sizeof("NotEqual")]; - char entity_pool_str5747[sizeof("ThinSpace")]; - char entity_pool_str5754[sizeof("apE")]; - char entity_pool_str5762[sizeof("bullet")]; - char entity_pool_str5765[sizeof("CloseCurlyDoubleQuote")]; - char entity_pool_str5766[sizeof("Delta")]; - char entity_pool_str5776[sizeof("gg")]; - char entity_pool_str5780[sizeof("otimes")]; - char entity_pool_str5799[sizeof("wreath")]; - char entity_pool_str5801[sizeof("Rcedil")]; - char entity_pool_str5807[sizeof("eth")]; - char entity_pool_str5808[sizeof("supnE")]; - char entity_pool_str5811[sizeof("awint")]; - char entity_pool_str5817[sizeof("Breve")]; - char entity_pool_str5822[sizeof("Gg")]; - char entity_pool_str5824[sizeof("HumpEqual")]; - char entity_pool_str5837[sizeof("Lleftarrow")]; - char entity_pool_str5838[sizeof("boxdr")]; - char entity_pool_str5847[sizeof("succneqq")]; - char entity_pool_str5848[sizeof("uring")]; - char entity_pool_str5849[sizeof("LessSlantEqual")]; - char entity_pool_str5860[sizeof("nvdash")]; - char entity_pool_str5866[sizeof("Hacek")]; - char entity_pool_str5867[sizeof("itilde")]; - char entity_pool_str5870[sizeof("Iota")]; - char entity_pool_str5872[sizeof("IOcy")]; - char entity_pool_str5884[sizeof("boxDr")]; - char entity_pool_str5891[sizeof("SucceedsTilde")]; - char entity_pool_str5905[sizeof("LeftFloor")]; - char entity_pool_str5906[sizeof("Vvdash")]; - char entity_pool_str5923[sizeof("triangledown")]; - char entity_pool_str5927[sizeof("LongLeftRightArrow")]; - char entity_pool_str5928[sizeof("RightFloor")]; - char entity_pool_str5931[sizeof("DownRightTeeVector")]; - char entity_pool_str5933[sizeof("quatint")]; - char entity_pool_str5937[sizeof("Ntilde")]; - char entity_pool_str5940[sizeof("Bumpeq")]; - char entity_pool_str5949[sizeof("gvnE")]; - char entity_pool_str5951[sizeof("boxhu")]; - char entity_pool_str5956[sizeof("gtlPar")]; - char entity_pool_str5959[sizeof("nprec")]; - char entity_pool_str5962[sizeof("ouml")]; - char entity_pool_str5970[sizeof("gescc")]; - char entity_pool_str5976[sizeof("Euml")]; - char entity_pool_str5980[sizeof("Uring")]; - char entity_pool_str5982[sizeof("UnderBracket")]; - char entity_pool_str5983[sizeof("nLtv")]; - char entity_pool_str5984[sizeof("LeftArrowBar")]; - char entity_pool_str5985[sizeof("ncongdot")]; - char entity_pool_str6003[sizeof("asympeq")]; - char entity_pool_str6023[sizeof("minusdu")]; - char entity_pool_str6030[sizeof("delta")]; - char entity_pool_str6032[sizeof("harrw")]; - char entity_pool_str6038[sizeof("andslope")]; - char entity_pool_str6043[sizeof("cdot")]; - char entity_pool_str6048[sizeof("Cayleys")]; - char entity_pool_str6049[sizeof("boxhU")]; - char entity_pool_str6052[sizeof("succsim")]; - char entity_pool_str6061[sizeof("cirE")]; - char entity_pool_str6062[sizeof("sdotb")]; - char entity_pool_str6066[sizeof("odash")]; - char entity_pool_str6067[sizeof("cirmid")]; - char entity_pool_str6068[sizeof("suphsub")]; - char entity_pool_str6069[sizeof("supdsub")]; - char entity_pool_str6077[sizeof("supdot")]; - char entity_pool_str6079[sizeof("awconint")]; - char entity_pool_str6084[sizeof("TSHcy")]; - char entity_pool_str6087[sizeof("grave")]; - char entity_pool_str6101[sizeof("lsimg")]; - char entity_pool_str6106[sizeof("UpArrowDownArrow")]; - char entity_pool_str6121[sizeof("LeftVector")]; - char entity_pool_str6122[sizeof("DoubleRightArrow")]; - char entity_pool_str6129[sizeof("NegativeThinSpace")]; - char entity_pool_str6140[sizeof("lhblk")]; - char entity_pool_str6146[sizeof("cire")]; - char entity_pool_str6147[sizeof("nVDash")]; - char entity_pool_str6151[sizeof("uhblk")]; - char entity_pool_str6155[sizeof("imagpart")]; - char entity_pool_str6161[sizeof("RightUpDownVector")]; - char entity_pool_str6164[sizeof("boxdL")]; - char entity_pool_str6176[sizeof("gla")]; - char entity_pool_str6193[sizeof("Iuml")]; - char entity_pool_str6203[sizeof("oelig")]; - char entity_pool_str6208[sizeof("NotLessSlantEqual")]; - char entity_pool_str6210[sizeof("boxDL")]; - char entity_pool_str6215[sizeof("gamma")]; - char entity_pool_str6236[sizeof("Otimes")]; - char entity_pool_str6248[sizeof("longleftrightarrow")]; - char entity_pool_str6261[sizeof("Gamma")]; - char entity_pool_str6262[sizeof("bigwedge")]; - char entity_pool_str6268[sizeof("boxhd")]; - char entity_pool_str6283[sizeof("supE")]; - char entity_pool_str6292[sizeof("LeftUpTeeVector")]; - char entity_pool_str6298[sizeof("gesdoto")]; - char entity_pool_str6304[sizeof("kappa")]; - char entity_pool_str6315[sizeof("ngeqslant")]; - char entity_pool_str6340[sizeof("gtrless")]; - char entity_pool_str6351[sizeof("fflig")]; - char entity_pool_str6352[sizeof("bigsqcup")]; - char entity_pool_str6367[sizeof("kgreen")]; - char entity_pool_str6368[sizeof("supe")]; - char entity_pool_str6370[sizeof("boxtimes")]; - char entity_pool_str6386[sizeof("gnapprox")]; - char entity_pool_str6394[sizeof("downdownarrows")]; - char entity_pool_str6403[sizeof("biguplus")]; - char entity_pool_str6404[sizeof("khcy")]; - char entity_pool_str6406[sizeof("ddagger")]; - char entity_pool_str6418[sizeof("Ouml")]; - char entity_pool_str6420[sizeof("Beta")]; - char entity_pool_str6421[sizeof("minusd")]; - char entity_pool_str6422[sizeof("succnsim")]; - char entity_pool_str6424[sizeof("ctdot")]; - char entity_pool_str6427[sizeof("kjcy")]; - char entity_pool_str6428[sizeof("gjcy")]; - char entity_pool_str6430[sizeof("ncong")]; - char entity_pool_str6431[sizeof("xvee")]; - char entity_pool_str6432[sizeof("bcong")]; - char entity_pool_str6439[sizeof("sqsube")]; - char entity_pool_str6442[sizeof("boxdR")]; - char entity_pool_str6445[sizeof("Longleftrightarrow")]; - char entity_pool_str6447[sizeof("sqsub")]; - char entity_pool_str6451[sizeof("DownLeftRightVector")]; - char entity_pool_str6454[sizeof("sqsubset")]; - char entity_pool_str6456[sizeof("NotVerticalBar")]; - char entity_pool_str6461[sizeof("NotEqualTilde")]; - char entity_pool_str6485[sizeof("boxdl")]; - char entity_pool_str6488[sizeof("boxDR")]; - char entity_pool_str6490[sizeof("andand")]; - char entity_pool_str6502[sizeof("RightVector")]; - char entity_pool_str6504[sizeof("IJlig")]; - char entity_pool_str6505[sizeof("NotTildeEqual")]; - char entity_pool_str6509[sizeof("angzarr")]; - char entity_pool_str6515[sizeof("angrt")]; - char entity_pool_str6521[sizeof("acd")]; - char entity_pool_str6524[sizeof("andd")]; - char entity_pool_str6526[sizeof("nrarrc")]; - char entity_pool_str6527[sizeof("VeryThinSpace")]; - char entity_pool_str6529[sizeof("Superset")]; - char entity_pool_str6531[sizeof("boxDl")]; - char entity_pool_str6535[sizeof("vnsub")]; - char entity_pool_str6538[sizeof("ccupssm")]; - char entity_pool_str6548[sizeof("varnothing")]; - char entity_pool_str6552[sizeof("rcy")]; - char entity_pool_str6554[sizeof("lcy")]; - char entity_pool_str6556[sizeof("scy")]; - char entity_pool_str6558[sizeof("Tcy")]; - char entity_pool_str6559[sizeof("Zcy")]; - char entity_pool_str6560[sizeof("ecy")]; - char entity_pool_str6561[sizeof("rdsh")]; - char entity_pool_str6563[sizeof("ldsh")]; - char entity_pool_str6565[sizeof("ucy")]; - char entity_pool_str6566[sizeof("boxVH")]; - char entity_pool_str6567[sizeof("tcy")]; - char entity_pool_str6577[sizeof("ncy")]; - char entity_pool_str6579[sizeof("bcy")]; - char entity_pool_str6580[sizeof("ntgl")]; - char entity_pool_str6585[sizeof("Jcy")]; - char entity_pool_str6600[sizeof("congdot")]; - char entity_pool_str6607[sizeof("angst")]; - char entity_pool_str6609[sizeof("RightDownTeeVector")]; - char entity_pool_str6612[sizeof("OverParenthesis")]; - char entity_pool_str6613[sizeof("ltquest")]; - char entity_pool_str6615[sizeof("pcy")]; - char entity_pool_str6618[sizeof("otilde")]; - char entity_pool_str6619[sizeof("rdquo")]; - char entity_pool_str6621[sizeof("ldquo")]; - char entity_pool_str6623[sizeof("Vcy")]; - char entity_pool_str6626[sizeof("capbrcup")]; - char entity_pool_str6646[sizeof("bdquo")]; - char entity_pool_str6650[sizeof("DownArrowBar")]; - char entity_pool_str6657[sizeof("vcy")]; - char entity_pool_str6665[sizeof("angrtvb")]; - char entity_pool_str6676[sizeof("Kcy")]; - char entity_pool_str6683[sizeof("Mcy")]; - char entity_pool_str6684[sizeof("Scy")]; - char entity_pool_str6691[sizeof("NewLine")]; - char entity_pool_str6696[sizeof("fcy")]; - char entity_pool_str6697[sizeof("Ucy")]; - char entity_pool_str6704[sizeof("boxVh")]; - char entity_pool_str6715[sizeof("Dcy")]; - char entity_pool_str6738[sizeof("hstrok")]; - char entity_pool_str6751[sizeof("Lcy")]; - char entity_pool_str6762[sizeof("Ycy")]; - char entity_pool_str6775[sizeof("supsim")]; - char entity_pool_str6789[sizeof("NonBreakingSpace")]; - char entity_pool_str6790[sizeof("OverBar")]; - char entity_pool_str6791[sizeof("sqsubseteq")]; - char entity_pool_str6797[sizeof("GJcy")]; - char entity_pool_str6800[sizeof("OverBrace")]; - char entity_pool_str6806[sizeof("eqcirc")]; - char entity_pool_str6819[sizeof("OverBracket")]; - char entity_pool_str6821[sizeof("Auml")]; - char entity_pool_str6829[sizeof("acute")]; - char entity_pool_str6830[sizeof("icy")]; - char entity_pool_str6849[sizeof("Itilde")]; - char entity_pool_str6850[sizeof("HilbertSpace")]; - char entity_pool_str6854[sizeof("omega")]; - char entity_pool_str6855[sizeof("cacute")]; - char entity_pool_str6861[sizeof("scirc")]; - char entity_pool_str6865[sizeof("ecirc")]; - char entity_pool_str6870[sizeof("ucirc")]; - char entity_pool_str6872[sizeof("GreaterSlantEqual")]; - char entity_pool_str6890[sizeof("Jcirc")]; - char entity_pool_str6895[sizeof("nvDash")]; - char entity_pool_str6896[sizeof("Wcirc")]; - char entity_pool_str6900[sizeof("Ncy")]; - char entity_pool_str6921[sizeof("RightTeeArrow")]; - char entity_pool_str6942[sizeof("LessFullEqual")]; - char entity_pool_str6958[sizeof("ltcc")]; - char entity_pool_str6963[sizeof("aleph")]; - char entity_pool_str6979[sizeof("dcy")]; - char entity_pool_str6989[sizeof("Scirc")]; - char entity_pool_str6991[sizeof("lessapprox")]; - char entity_pool_str7000[sizeof("IEcy")]; - char entity_pool_str7001[sizeof("LowerRightArrow")]; - char entity_pool_str7002[sizeof("Ucirc")]; - char entity_pool_str7021[sizeof("agrave")]; - char entity_pool_str7023[sizeof("MinusPlus")]; - char entity_pool_str7024[sizeof("bigvee")]; - char entity_pool_str7028[sizeof("Rcy")]; - char entity_pool_str7034[sizeof("suphsol")]; - char entity_pool_str7037[sizeof("EmptyVerySmallSquare")]; - char entity_pool_str7039[sizeof("boxhD")]; - char entity_pool_str7047[sizeof("precapprox")]; - char entity_pool_str7066[sizeof("angrtvbd")]; - char entity_pool_str7067[sizeof("Ycirc")]; - char entity_pool_str7071[sizeof("sub")]; - char entity_pool_str7074[sizeof("Otilde")]; - char entity_pool_str7075[sizeof("Ccirc")]; - char entity_pool_str7085[sizeof("Fcy")]; - char entity_pool_str7090[sizeof("complexes")]; - char entity_pool_str7096[sizeof("subrarr")]; - char entity_pool_str7115[sizeof("InvisibleComma")]; - char entity_pool_str7120[sizeof("boxur")]; - char entity_pool_str7121[sizeof("abreve")]; - char entity_pool_str7127[sizeof("ntlg")]; - char entity_pool_str7135[sizeof("icirc")]; - char entity_pool_str7142[sizeof("xdtri")]; - char entity_pool_str7143[sizeof("circ")]; - char entity_pool_str7168[sizeof("gtrdot")]; - char entity_pool_str7171[sizeof("geqslant")]; - char entity_pool_str7183[sizeof("ntriangleright")]; - char entity_pool_str7198[sizeof("cuepr")]; - char entity_pool_str7199[sizeof("Sub")]; - char entity_pool_str7201[sizeof("mcy")]; - char entity_pool_str7212[sizeof("timesbar")]; - char entity_pool_str7214[sizeof("hksearow")]; - char entity_pool_str7217[sizeof("sigma")]; - char entity_pool_str7224[sizeof("cupor")]; - char entity_pool_str7230[sizeof("oslash")]; - char entity_pool_str7231[sizeof("dzigrarr")]; - char entity_pool_str7234[sizeof("leftrightharpoons")]; - char entity_pool_str7245[sizeof("rightleftharpoons")]; - char entity_pool_str7247[sizeof("kcedil")]; - char entity_pool_str7256[sizeof("submult")]; - char entity_pool_str7260[sizeof("curren")]; - char entity_pool_str7269[sizeof("LeftTeeVector")]; - char entity_pool_str7274[sizeof("bigstar")]; - char entity_pool_str7277[sizeof("cup")]; - char entity_pool_str7278[sizeof("LongRightArrow")]; - char entity_pool_str7294[sizeof("Gcedil")]; - char entity_pool_str7296[sizeof("PrecedesEqual")]; - char entity_pool_str7307[sizeof("zcy")]; - char entity_pool_str7309[sizeof("planckh")]; - char entity_pool_str7310[sizeof("Omega")]; - char entity_pool_str7317[sizeof("subsub")]; - char entity_pool_str7325[sizeof("rdca")]; - char entity_pool_str7326[sizeof("cups")]; - char entity_pool_str7327[sizeof("ldca")]; - char entity_pool_str7332[sizeof("subset")]; - char entity_pool_str7333[sizeof("NotSucceeds")]; - char entity_pool_str7334[sizeof("LeftArrowRightArrow")]; - char entity_pool_str7337[sizeof("wcirc")]; - char entity_pool_str7338[sizeof("RightAngleBracket")]; - char entity_pool_str7344[sizeof("ntrianglerighteq")]; - char entity_pool_str7345[sizeof("Sigma")]; - char entity_pool_str7350[sizeof("NotSucceedsTilde")]; - char entity_pool_str7364[sizeof("DiacriticalAcute")]; - char entity_pool_str7376[sizeof("subne")]; - char entity_pool_str7378[sizeof("Product")]; - char entity_pool_str7385[sizeof("circleddash")]; - char entity_pool_str7389[sizeof("subsup")]; - char entity_pool_str7397[sizeof("copy")]; - char entity_pool_str7403[sizeof("eta")]; - char entity_pool_str7409[sizeof("angmsd")]; - char entity_pool_str7434[sizeof("natural")]; - char entity_pool_str7436[sizeof("supedot")]; - char entity_pool_str7437[sizeof("naturals")]; - char entity_pool_str7443[sizeof("triangleright")]; - char entity_pool_str7445[sizeof("DiacriticalGrave")]; - char entity_pool_str7446[sizeof("boxuL")]; - char entity_pool_str7447[sizeof("cong")]; - char entity_pool_str7451[sizeof("telrec")]; - char entity_pool_str7454[sizeof("comma")]; - char entity_pool_str7460[sizeof("Subset")]; - char entity_pool_str7475[sizeof("NotSucceedsSlantEqual")]; - char entity_pool_str7476[sizeof("gtreqless")]; - char entity_pool_str7477[sizeof("Atilde")]; - char entity_pool_str7484[sizeof("curarr")]; - char entity_pool_str7491[sizeof("cudarrr")]; - char entity_pool_str7495[sizeof("cudarrl")]; - char entity_pool_str7503[sizeof("subseteq")]; - char entity_pool_str7504[sizeof("subseteqq")]; - char entity_pool_str7505[sizeof("rightsquigarrow")]; - char entity_pool_str7520[sizeof("cupcap")]; - char entity_pool_str7521[sizeof("subsetneq")]; - char entity_pool_str7532[sizeof("aogon")]; - char entity_pool_str7533[sizeof("notinvc")]; - char entity_pool_str7534[sizeof("rightthreetimes")]; - char entity_pool_str7552[sizeof("yacute")]; - char entity_pool_str7563[sizeof("nLeftarrow")]; - char entity_pool_str7581[sizeof("ocy")]; - char entity_pool_str7582[sizeof("cemptyv")]; - char entity_pool_str7595[sizeof("Ecy")]; - char entity_pool_str7598[sizeof("cupcup")]; - char entity_pool_str7604[sizeof("trianglerighteq")]; - char entity_pool_str7615[sizeof("LeftRightArrow")]; - char entity_pool_str7618[sizeof("succ")]; - char entity_pool_str7631[sizeof("DownArrowUpArrow")]; - char entity_pool_str7641[sizeof("OElig")]; - char entity_pool_str7648[sizeof("chcy")]; - char entity_pool_str7649[sizeof("gtreqqless")]; - char entity_pool_str7655[sizeof("angle")]; - char entity_pool_str7662[sizeof("acE")]; - char entity_pool_str7668[sizeof("rmoustache")]; - char entity_pool_str7670[sizeof("lmoustache")]; - char entity_pool_str7674[sizeof("NegativeVeryThinSpace")]; - char entity_pool_str7677[sizeof("napprox")]; - char entity_pool_str7686[sizeof("Oslash")]; - char entity_pool_str7698[sizeof("subsetneqq")]; - char entity_pool_str7723[sizeof("Aring")]; - char entity_pool_str7724[sizeof("boxuR")]; - char entity_pool_str7730[sizeof("subplus")]; - char entity_pool_str7742[sizeof("xwedge")]; - char entity_pool_str7767[sizeof("boxul")]; - char entity_pool_str7778[sizeof("boxvr")]; - char entity_pool_str7800[sizeof("HumpDownHump")]; - char entity_pool_str7812[sizeof("Icy")]; - char entity_pool_str7828[sizeof("approxeq")]; - char entity_pool_str7841[sizeof("aacute")]; - char entity_pool_str7842[sizeof("apid")]; - char entity_pool_str7859[sizeof("UpDownArrow")]; - char entity_pool_str7861[sizeof("NestedGreaterGreater")]; - char entity_pool_str7863[sizeof("jcy")]; - char entity_pool_str7866[sizeof("gtrsim")]; - char entity_pool_str7876[sizeof("boxv")]; - char entity_pool_str7886[sizeof("ocirc")]; - char entity_pool_str7900[sizeof("Ecirc")]; - char entity_pool_str7987[sizeof("notnivc")]; - char entity_pool_str8006[sizeof("bigtriangleup")]; - char entity_pool_str8032[sizeof("daleth")]; - char entity_pool_str8037[sizeof("Ocy")]; - char entity_pool_str8042[sizeof("Hcirc")]; - char entity_pool_str8043[sizeof("RightVectorBar")]; - char entity_pool_str8044[sizeof("AElig")]; - char entity_pool_str8063[sizeof("FilledVerySmallSquare")]; - char entity_pool_str8084[sizeof("ggg")]; - char entity_pool_str8088[sizeof("Bcy")]; - char entity_pool_str8099[sizeof("Poincareplane")]; - char entity_pool_str8104[sizeof("boxvL")]; - char entity_pool_str8107[sizeof("PartialD")]; - char entity_pool_str8117[sizeof("Icirc")]; - char entity_pool_str8129[sizeof("cularr")]; - char entity_pool_str8135[sizeof("boxh")]; - char entity_pool_str8142[sizeof("andv")]; - char entity_pool_str8144[sizeof("sung")]; - char entity_pool_str8148[sizeof("RightDoubleBracket")]; - char entity_pool_str8168[sizeof("jcirc")]; - char entity_pool_str8174[sizeof("UnderBar")]; - char entity_pool_str8241[sizeof("RightArrow")]; - char entity_pool_str8242[sizeof("circledcirc")]; - char entity_pool_str8243[sizeof("Alpha")]; - char entity_pool_str8251[sizeof("leftharpoonup")]; - char entity_pool_str8258[sizeof("cularrp")]; - char entity_pool_str8260[sizeof("RightArrowLeftArrow")]; - char entity_pool_str8281[sizeof("varsigma")]; - char entity_pool_str8300[sizeof("numero")]; - char entity_pool_str8310[sizeof("ffllig")]; - char entity_pool_str8326[sizeof("LowerLeftArrow")]; - char entity_pool_str8340[sizeof("expectation")]; - char entity_pool_str8342[sizeof("Ocirc")]; - char entity_pool_str8351[sizeof("yacy")]; - char entity_pool_str8375[sizeof("lambda")]; - char entity_pool_str8381[sizeof("NotSucceedsEqual")]; - char entity_pool_str8382[sizeof("boxvR")]; - char entity_pool_str8384[sizeof("bigtriangledown")]; - char entity_pool_str8391[sizeof("ang")]; - char entity_pool_str8404[sizeof("xuplus")]; - char entity_pool_str8424[sizeof("nabla")]; - char entity_pool_str8425[sizeof("boxvl")]; - char entity_pool_str8438[sizeof("Eta")]; - char entity_pool_str8440[sizeof("Acy")]; - char entity_pool_str8474[sizeof("kcy")]; - char entity_pool_str8475[sizeof("gcy")]; - char entity_pool_str8485[sizeof("LeftRightVector")]; - char entity_pool_str8491[sizeof("ccedil")]; - char entity_pool_str8495[sizeof("Backslash")]; - char entity_pool_str8506[sizeof("hslash")]; - char entity_pool_str8515[sizeof("Pcy")]; - char entity_pool_str8521[sizeof("Gcy")]; - char entity_pool_str8534[sizeof("gtquest")]; - char entity_pool_str8572[sizeof("Lambda")]; - char entity_pool_str8627[sizeof("odiv")]; - char entity_pool_str8629[sizeof("leftharpoondown")]; - char entity_pool_str8672[sizeof("longmapsto")]; - char entity_pool_str8677[sizeof("Jukcy")]; - char entity_pool_str8687[sizeof("ldrdhar")]; - char entity_pool_str8700[sizeof("xutri")]; - char entity_pool_str8701[sizeof("nRightarrow")]; - char entity_pool_str8725[sizeof("ExponentialE")]; - char entity_pool_str8735[sizeof("nrightarrow")]; - char entity_pool_str8745[sizeof("Acirc")]; - char entity_pool_str8746[sizeof("NoBreak")]; - char entity_pool_str8780[sizeof("gcirc")]; - char entity_pool_str8784[sizeof("ange")]; - char entity_pool_str8785[sizeof("curarrm")]; - char entity_pool_str8791[sizeof("SHCHcy")]; - char entity_pool_str8796[sizeof("yuml")]; - char entity_pool_str8800[sizeof("subnE")]; - char entity_pool_str8803[sizeof("DDotrahd")]; - char entity_pool_str8810[sizeof("RuleDelayed")]; - char entity_pool_str8826[sizeof("Gcirc")]; - char entity_pool_str8843[sizeof("Jsercy")]; - char entity_pool_str8879[sizeof("gtcc")]; - char entity_pool_str8922[sizeof("iukcy")]; - char entity_pool_str8956[sizeof("updownarrow")]; - char entity_pool_str8962[sizeof("curlyvee")]; - char entity_pool_str8972[sizeof("ffilig")]; - char entity_pool_str8992[sizeof("yicy")]; - char entity_pool_str9015[sizeof("divonx")]; - char entity_pool_str9026[sizeof("gtrapprox")]; - char entity_pool_str9069[sizeof("subdot")]; - char entity_pool_str9079[sizeof("leftrightarrows")]; - char entity_pool_str9085[sizeof("auml")]; - char entity_pool_str9088[sizeof("Updownarrow")]; - char entity_pool_str9090[sizeof("rightleftarrows")]; - char entity_pool_str9151[sizeof("DownRightVector")]; - char entity_pool_str9154[sizeof("DownRightVectorBar")]; - char entity_pool_str9162[sizeof("hcirc")]; - char entity_pool_str9186[sizeof("Rrightarrow")]; - char entity_pool_str9217[sizeof("longrightarrow")]; - char entity_pool_str9239[sizeof("cupdot")]; - char entity_pool_str9249[sizeof("ac")]; - char entity_pool_str9268[sizeof("hookrightarrow")]; - char entity_pool_str9271[sizeof("NegativeThickSpace")]; - char entity_pool_str9275[sizeof("subE")]; - char entity_pool_str9307[sizeof("twoheadrightarrow")]; - char entity_pool_str9320[sizeof("downharpoonright")]; - char entity_pool_str9321[sizeof("downharpoonleft")]; - char entity_pool_str9326[sizeof("aelig")]; - char entity_pool_str9330[sizeof("rdldhar")]; - char entity_pool_str9349[sizeof("curlywedge")]; - char entity_pool_str9351[sizeof("hybull")]; - char entity_pool_str9360[sizeof("sube")]; - char entity_pool_str9414[sizeof("Longrightarrow")]; - char entity_pool_str9484[sizeof("Cedilla")]; - char entity_pool_str9505[sizeof("notinva")]; - char entity_pool_str9506[sizeof("SucceedsEqual")]; - char entity_pool_str9554[sizeof("leftrightarrow")]; - char entity_pool_str9580[sizeof("straightepsilon")]; - char entity_pool_str9627[sizeof("amalg")]; - char entity_pool_str9741[sizeof("atilde")]; - char entity_pool_str9747[sizeof("RightCeiling")]; - char entity_pool_str9751[sizeof("Leftrightarrow")]; - char entity_pool_str9767[sizeof("subsim")]; - char entity_pool_str9788[sizeof("VerticalLine")]; - char entity_pool_str9801[sizeof("RightUpVector")]; - char entity_pool_str9804[sizeof("RightUpVectorBar")]; - char entity_pool_str9829[sizeof("RightDownVector")]; - char entity_pool_str9832[sizeof("RightDownVectorBar")]; - char entity_pool_str9836[sizeof("alefsym")]; - char entity_pool_str9852[sizeof("circlearrowright")]; - char entity_pool_str9853[sizeof("circlearrowleft")]; - char entity_pool_str9904[sizeof("Iukcy")]; - char entity_pool_str9936[sizeof("otimesas")]; - char entity_pool_str9944[sizeof("intercal")]; - char entity_pool_str9952[sizeof("thickapprox")]; - char entity_pool_str9955[sizeof("jukcy")]; - char entity_pool_str9959[sizeof("notniva")]; - char entity_pool_str9963[sizeof("precnapprox")]; - char entity_pool_str9983[sizeof("cuvee")]; - char entity_pool_str9987[sizeof("aring")]; - char entity_pool_str10023[sizeof("ccirc")]; - char entity_pool_str10029[sizeof("rightarrow")]; - char entity_pool_str10061[sizeof("Integral")]; - char entity_pool_str10062[sizeof("xcirc")]; - char entity_pool_str10121[sizeof("jsercy")]; - char entity_pool_str10206[sizeof("checkmark")]; - char entity_pool_str10208[sizeof("VerticalTilde")]; - char entity_pool_str10219[sizeof("boxvH")]; - char entity_pool_str10240[sizeof("NotRightTriangleBar")]; - char entity_pool_str10244[sizeof("NotRightTriangleEqual")]; - char entity_pool_str10245[sizeof("NotRightTriangle")]; - char entity_pool_str10278[sizeof("LeftVectorBar")]; - char entity_pool_str10357[sizeof("boxvh")]; - char entity_pool_str10395[sizeof("boxbox")]; - char entity_pool_str10415[sizeof("ycy")]; - char entity_pool_str10428[sizeof("subedot")]; - char entity_pool_str10445[sizeof("SOFTcy")]; - char entity_pool_str10505[sizeof("Rightarrow")]; - char entity_pool_str10507[sizeof("alpha")]; - char entity_pool_str10528[sizeof("shchcy")]; - char entity_pool_str10584[sizeof("softcy")]; - char entity_pool_str10704[sizeof("acy")]; - char entity_pool_str10720[sizeof("ycirc")]; - char entity_pool_str10791[sizeof("bigcirc")]; - char entity_pool_str10808[sizeof("ImaginaryI")]; - char entity_pool_str10847[sizeof("approx")]; - char entity_pool_str10851[sizeof("SupersetEqual")]; - char entity_pool_str10879[sizeof("vzigzag")]; - char entity_pool_str10888[sizeof("cuesc")]; - char entity_pool_str10947[sizeof("UnderParenthesis")]; - char entity_pool_str11009[sizeof("acirc")]; - char entity_pool_str11029[sizeof("succapprox")]; - char entity_pool_str11047[sizeof("mcomma")]; - char entity_pool_str11146[sizeof("angmsdae")]; - char entity_pool_str11165[sizeof("angmsdab")]; - char entity_pool_str11282[sizeof("angmsdaf")]; - char entity_pool_str11366[sizeof("angsph")]; - char entity_pool_str11527[sizeof("luruhar")]; - char entity_pool_str11565[sizeof("angmsdad")]; - char entity_pool_str11664[sizeof("twoheadleftarrow")]; - char entity_pool_str11720[sizeof("cylcty")]; - char entity_pool_str11791[sizeof("straightphi")]; - char entity_pool_str11840[sizeof("multimap")]; - char entity_pool_str11918[sizeof("RightArrowBar")]; - char entity_pool_str12012[sizeof("ldrushar")]; - char entity_pool_str12103[sizeof("LeftAngleBracket")]; - char entity_pool_str12170[sizeof("ruluhar")]; - char entity_pool_str12202[sizeof("curlyeqprec")]; - char entity_pool_str12206[sizeof("yucy")]; - char entity_pool_str12288[sizeof("lurdshar")]; - char entity_pool_str12413[sizeof("hardcy")]; - char entity_pool_str12461[sizeof("rightharpoondown")]; - char entity_pool_str12497[sizeof("rightharpoonup")]; - char entity_pool_str12502[sizeof("HARDcy")]; - char entity_pool_str12651[sizeof("SubsetEqual")]; - char entity_pool_str12809[sizeof("digamma")]; - char entity_pool_str12892[sizeof("udblac")]; - char entity_pool_str12985[sizeof("SuchThat")]; - char entity_pool_str12991[sizeof("cuwed")]; - char entity_pool_str13024[sizeof("Udblac")]; - char entity_pool_str13061[sizeof("angmsdag")]; - char entity_pool_str13443[sizeof("angmsdah")]; - char entity_pool_str13643[sizeof("VerticalBar")]; - char entity_pool_str13659[sizeof("VerticalSeparator")]; - char entity_pool_str13709[sizeof("rightarrowtail")]; - char entity_pool_str13908[sizeof("odblac")]; - char entity_pool_str13945[sizeof("succnapprox")]; - char entity_pool_str14304[sizeof("angmsdac")]; - char entity_pool_str14364[sizeof("Odblac")]; - char entity_pool_str14620[sizeof("cupbrcap")]; - char entity_pool_str15290[sizeof("angmsdaa")]; - char entity_pool_str15360[sizeof("curlyeqsucc")]; - char entity_pool_str15729[sizeof("curvearrowleft")]; - char entity_pool_str16000[sizeof("curvearrowright")]; - }; -static const struct entity_pool_t entity_pool_contents = - { - "rarr", - "larr", - "lat", - "uarr", - "npr", - "rarrtl", - "larrtl", - "roarr", - "loarr", - "not", - "rpar", - "bot", - "lpar", - "spar", - "ll", - "uharr", - "epar", - "el", - "rotimes", - "lotimes", - "par", - "nharr", - "npar", - "tprime", - "els", - "eparsl", - "ensp", - "bprime", - "lnap", - "blk14", - "blk12", - "blk34", - "nparsl", - "nldr", - "rlarr", - "npart", - "llarr", - "nlt", - "slarr", - "nparallel", - "Tau", - "varr", - "squ", - "nlarr", - "tau", - "lne", - "rrarr", - "lrarr", - "srarr", - "rharul", - "lharul", - "erarr", - "pr", - "rharu", - "lharu", - "Uarr", - "nGt", - "bne", - "nrarr", - "swarr", - "rarrap", - "upuparrows", - "Darr", - "rbarr", - "Dot", - "lbarr", - "nwarr", - "smt", - "emsp14", - "rarrpl", - "larrpl", - "phmmat", - "emsp13", - "LT", - "Larr", - "rbrkslu", - "lbrkslu", - "napos", - "nle", - "rHar", - "lHar", - "qprime", - "lap", - "nbsp", - "uHar", - "top", - "Vbar", - "Ll", - "prap", - "emsp", - "nap", - "looparrowleft", - "le", - "sharp", - "ee", - "les", - "in", - "prop", - "topbot", - "int", - "ne", - "nprcue", - "pre", - "epsi", - "upsi", - "there4", - "rbrke", - "searr", - "lbrke", - "blacktriangle", - "lneq", - "lneqq", - "plus", - "nles", - "nedot", - "blacktriangleleft", - "blacktriangleright", - "nearr", - "blacktriangledown", - "nless", - "emacr", - "vprop", - "umacr", - "smeparsl", - "Map", - "plusdu", - "Not", - "Verbar", - "perp", - "fltns", - "plusmn", - "nleq", - "nleqq", - "frac34", - "frac14", - "verbar", - "frac12", - "frac35", - "frac15", - "frac45", - "frac25", - "frac13", - "frac16", - "prurel", - "frac23", - "frac38", - "frac18", - "frac56", - "frac58", - "frac78", - "leq", - "darr", - "Upsi", - "dot", - "phone", - "Cap", - "blacksquare", - "rnmid", - "leqq", - "intcal", - "dharr", - "rhard", - "lhard", - "pluse", - "Umacr", - "Vee", - "Rarr", - "Cross", - "rsqb", - "lsqb", - "Rarrtl", - "esdot", - "vee", - "nbumpe", - "llcorner", - "fpartint", - "squf", - "plankv", - "eqvparsl", - "ulcorner", - "wp", - "lozf", - "COPY", - "ulcorn", - "veebar", - "part", - "square", - "nbump", - "bernou", - "wr", - "rBarr", - "lrcorner", - "lBarr", - "bnot", - "semi", - "urcorner", - "NotSubset", - "ropf", - "Qopf", - "lopf", - "sopf", - "urcorn", - "Topf", - "Zopf", - "eopf", - "ropar", - "uopf", - "lopar", - "topf", - "Xopf", - "nopf", - "bopf", - "epsiv", - "fnof", - "imacr", - "Jopf", - "nhpar", - "Wopf", - "Sqrt", - "nsub", - "napid", - "NotSuperset", - "brvbar", - "sol", - "easter", - "popf", - "dHar", - "Vopf", - "nsupset", - "nsup", - "vBar", - "nsubset", - "thkap", - "nis", - "profsurf", - "solb", - "lnsim", - "solbar", - "Square", - "vopf", - "uharl", - "ulcrop", - "eqsim", - "equiv", - "ell", - "smashp", - "mp", - "Kopf", - "simrarr", - "flat", - "Mopf", - "Sopf", - "mldr", - "rlm", - "iprod", - "lparlt", - "fopf", - "Uopf", - "varsubsetneq", - "varsubsetneqq", - "urcrop", - "LessLess", - "Re", - "NotNestedLessLess", - "Dopf", - "forkv", - "nsqsube", - "nsupe", - "nsube", - "qopf", - "rlhar", - "lrm", - "nlsim", - "pound", - "varsupsetneq", - "varsupsetneqq", - "bnequiv", - "Lopf", - "nsqsupe", - "rarrlp", - "wedbar", - "larrlp", - "Yopf", - "NotReverseElement", - "Copf", - "lrhar", - "parsl", - "uml", - "marker", - "nsupseteq", - "nsubseteq", - "squarf", - "Vert", - "SquareSupersetEqual", - "prsim", - "SquareSubsetEqual", - "SquareSuperset", - "SquareSubset", - "nvap", - "iopf", - "pm", - "vert", - "thetav", - "loz", - "map", - "lesseqqgtr", - "rscr", - "Qscr", - "lscr", - "sscr", - "Tscr", - "Zscr", - "escr", - "uscr", - "tscr", - "imof", - "Coproduct", - "Xscr", - "Xi", - "nscr", - "ni", - "bscr", - "Nopf", - "Jscr", - "preceq", - "nvrArr", - "backprime", - "Wscr", - "varphi", - "nsmid", - "dlcorn", - "pscr", - "pi", - "Vscr", - "nesim", - "simne", - "nsupseteqq", - "nsubseteqq", - "drcorn", - "rbrace", - "vscr", - "lbrace", - "dopf", - "frasl", - "LessTilde", - "Kscr", - "pluscir", - "Mscr", - "Sscr", - "rbrksld", - "lbrksld", - "RBarr", - "sqcaps", - "rArr", - "bNot", - "lArr", - "fscr", - "Uscr", - "uArr", - "Ropf", - "wopf", - "Dscr", - "opar", - "seswar", - "Del", - "rAarr", - "rho", - "lAarr", - "preccurlyeq", - "qscr", - "macr", - "notin", - "equivDD", - "sqcap", - "nspar", - "olt", - "ratio", - "Lscr", - "dharl", - "dlcrop", - "DoubleDot", - "dotplus", - "or", - "Yscr", - "Fopf", - "Cscr", - "olarr", - "nrarrw", - "lvertneqq", - "eqslantgtr", - "thorn", - "eqslantless", - "incare", - "vArr", - "rppolint", - "drcrop", - "parallel", - "orarr", - "ssmile", - "DoubleLeftTee", - "erDot", - "diams", - "ssetmn", - "oS", - "iscr", - "ii", - "rect", - "nsccue", - "sect", - "mlcp", - "oror", - "DoubleContourIntegral", - "equals", - "Hat", - "sstarf", - "mstpos", - "die", - "measuredangle", - "forall", - "notinvb", - "mopf", - "niv", - "vBarv", - "Nscr", - "period", - "becaus", - "between", - "Int", - "because", - "piv", - "rfr", - "Qfr", - "lfr", - "sfr", - "nleftrightarrow", - "Tfr", - "Zfr", - "efr", - "sim", - "ufr", - "roplus", - "tfr", - "loplus", - "Xfr", - "real", - "nfr", - "bfr", - "NotHumpEqual", - "Jfr", - "dscr", - "Wfr", - "blacklozenge", - "zopf", - "reals", - "NotCupCap", - "simplus", - "ForAll", - "pfr", - "omacr", - "Vfr", - "Emacr", - "Rscr", - "wscr", - "ShortUpArrow", - "setmn", - "vfr", - "Kfr", - "operp", - "Mfr", - "Sfr", - "nltrie", - "Fscr", - "ffr", - "Ufr", - "shortmid", - "nvsim", - "Dfr", - "lessdot", - "profline", - "qfr", - "dArr", - "nrtrie", - "ShortRightArrow", - "Therefore", - "DD", - "therefore", - "Lfr", - "target", - "Element", - "Yfr", - "ClockwiseContourIntegral", - "olcir", - "Cfr", - "female", - "nsucceq", - "oast", - "percnt", - "ordf", - "ord", - "Rho", - "mscr", - "nvrtrie", - "lnE", - "nhArr", - "Or", - "divide", - "ifr", - "elinters", - "bsol", - "nvlArr", - "Imacr", - "backsimeq", - "twixt", - "olcross", - "rarrsim", - "DoubleDownArrow", - "larrsim", - "emptyset", - "oopf", - "exist", - "llhard", - "excl", - "Eopf", - "nlArr", - "thinsp", - "NotSubsetEqual", - "phi", - "DoubleLeftArrow", - "topcir", - "div", - "Nfr", - "nlE", - "zscr", - "lrhard", - "lltri", - "nrArr", - "NotSupersetEqual", - "swArr", - "ThickSpace", - "ultri", - "notnivb", - "prime", - "primes", - "ohm", - "CircleTimes", - "nltri", - "siml", - "nwArr", - "varpi", - "orv", - "setminus", - "lrtri", - "permil", - "mid", - "urtri", - "dfr", - "mho", - "prE", - "vsupne", - "nrtri", - "vsubne", - "eDot", - "lesges", - "backepsilon", - "ratail", - "latail", - "UpEquilibrium", - "epsilon", - "upsilon", - "midast", - "Hopf", - "vltri", - "Rfr", - "Wedge", - "wfr", - "barwed", - "malt", - "Chi", - "emptyv", - "notni", - "LessGreater", - "diam", - "vrtri", - "CircleMinus", - "Omacr", - "seArr", - "Ffr", - "precneqq", - "Diamond", - "ordm", - "neArr", - "Iopf", - "CircleDot", - "prnap", - "dotminus", - "nshortmid", - "bottom", - "pointint", - "SquareUnion", - "jopf", - "Upsilon", - "Colone", - "nvlt", - "NestedLessLess", - "Colon", - "bsolhsub", - "DoubleLeftRightArrow", - "plussim", - "image", - "egs", - "oscr", - "swnwar", - "zeetrf", - "maltese", - "mfr", - "rarrfs", - "Escr", - "larrfs", - "mnplus", - "ngt", - "ngtr", - "gl", - "diamondsuit", - "GT", - "lesssim", - "dsol", - "upharpoonleft", - "SquareIntersection", - "lsime", - "nLt", - "NotLess", - "gnap", - "scap", - "mapstoleft", - "NotLessLess", - "rfloor", - "lfloor", - "nsime", - "bsime", - "NotLessEqual", - "NotLessTilde", - "ncap", - "NotLessGreater", - "precsim", - "looparrowright", - "Pr", - "rcub", - "mapstoup", - "lcub", - "zfr", - "uparrow", - "gne", - "sce", - "Im", - "rcaron", - "lcaron", - "Oopf", - "scaron", - "backsim", - "Tcaron", - "Zcaron", - "ecaron", - "Bernoullis", - "nge", - "tcaron", - "fork", - "Hscr", - "ncaron", - "elsdot", - "tbrk", - "triplus", - "diamond", - "ncup", - "bbrk", - "frown", - "bkarow", - "spades", - "psi", - "Bopf", - "dollar", - "disin", - "spadesuit", - "NotTilde", - "doublebarwedge", - "gap", - "bbrktbrk", - "swarrow", - "bepsi", - "Iscr", - "NotTildeFullEqual", - "eqcolon", - "tint", - "intprod", - "nsupE", - "nwarrow", - "nsubE", - "nges", - "Uparrow", - "ge", - "OpenCurlyDoubleQuote", - "smallsetminus", - "Scaron", - "nvltrie", - "ges", - "blank", - "QUOT", - "block", - "trade", - "jscr", - "wedge", - "Amacr", - "Equal", - "Dcaron", - "DotDot", - "gneq", - "varpropto", - "gneqq", - "Proportional", - "isins", - "eDDot", - "isin", - "TripleDot", - "Fouriertrf", - "Proportion", - "ngeq", - "Lcaron", - "ngeqq", - "lE", - "Ccaron", - "bsemi", - "propto", - "lesdot", - "Conint", - "And", - "searrow", - "orslope", - "harr", - "late", - "CenterDot", - "ofr", - "nearrow", - "qint", - "lates", - "kappav", - "horbar", - "Efr", - "hoarr", - "npre", - "inodot", - "udarr", - "geq", - "nsimeq", - "geqq", - "efDot", - "rpargt", - "Oscr", - "plusdo", - "lagran", - "thicksim", - "precnsim", - "Ncaron", - "napE", - "iiint", - "Bscr", - "mapstodown", - "varrho", - "isinsv", - "nvHarr", - "NotLeftTriangleBar", - "equest", - "NotLeftTriangleEqual", - "NotLeftTriangle", - "Aopf", - "hbar", - "vangrt", - "Hfr", - "range", - "smte", - "lsim", - "npolint", - "dcaron", - "esim", - "Union", - "smtes", - "kopf", - "gopf", - "nsim", - "bsim", - "SmallCircle", - "NotDoubleVerticalBar", - "NotNestedGreaterGreater", - "EqualTilde", - "notindot", - "Rcaron", - "Popf", - "Gopf", - "Ifr", - "wedgeq", - "prod", - "osol", - "DoubleUpArrow", - "Congruent", - "gnsim", - "scsim", - "jfr", - "upsih", - "nLl", - "DoubleUpDownArrow", - "ngsim", - "hearts", - "lesseqgtr", - "nesear", - "Exists", - "smile", - "uwangle", - "heartsuit", - "HorizontalLine", - "GreaterLess", - "rsaquo", - "lsaquo", - "realine", - "Dashv", - "simdot", - "GreaterEqual", - "GreaterTilde", - "GreaterEqualLess", - "GreaterGreater", - "rceil", - "lceil", - "lessgtr", - "oline", - "thksim", - "InvisibleTimes", - "race", - "iquest", - "imagline", - "UpTee", - "midcir", - "ofcir", - "ddarr", - "rangd", - "langd", - "Equilibrium", - "parsim", - "Vdashl", - "Ofr", - "Because", - "rAtail", - "lAtail", - "ominus", - "Ascr", - "Epsilon", - "ShortLeftArrow", - "isinv", - "micro", - "zcaron", - "kscr", - "gscr", - "Bfr", - "gel", - "hercon", - "triminus", - "egrave", - "sdot", - "ugrave", - "Zdot", - "edot", - "NotTildeTilde", - "tdot", - "Pscr", - "Pi", - "Gscr", - "plustwo", - "NotElement", - "PlusMinus", - "hopf", - "gammad", - "mDDot", - "divideontimes", - "doteq", - "varepsilon", - "Precedes", - "Gammad", - "dashv", - "NotCongruent", - "ubreve", - "ogt", - "RoundImplies", - "PrecedesSlantEqual", - "sime", - "Ugrave", - "dbkarow", - "sdote", - "veeeq", - "mapsto", - "times", - "rangle", - "langle", - "leftarrowtail", - "hamilt", - "udhar", - "nisd", - "rfisht", - "lfisht", - "harrcir", - "OpenCurlyQuote", - "ufisht", - "NotHumpDownHump", - "LeftTee", - "rsh", - "lsh", - "gvertneqq", - "timesb", - "scpolint", - "Cdot", - "dwangle", - "Ubreve", - "LeftUpVector", - "LeftUpVectorBar", - "Ecaron", - "homtht", - "igrave", - "npreceq", - "ecolon", - "dd", - "simeq", - "notinE", - "bigoplus", - "Afr", - "leftarrow", - "oint", - "Tab", - "ogon", - "lt", - "nLeftrightarrow", - "rarrb", - "larrb", - "hscr", - "LeftUpDownVector", - "kfr", - "gfr", - "UpArrowBar", - "nsce", - "ltdot", - "gesl", - "xodot", - "star", - "lowbar", - "xharr", - "ecir", - "utdot", - "natur", - "Lsh", - "infin", - "comp", - "sigmav", - "xotime", - "Pfr", - "Gfr", - "bigcap", - "simlE", - "iiiint", - "barwedge", - "Barwed", - "xlarr", - "LessEqualGreater", - "crarr", - "isindot", - "commat", - "middot", - "lesdotor", - "sigmaf", - "rarrbfs", - "larrbfs", - "xrarr", - "bigcup", - "clubs", - "hArr", - "rtrie", - "ltrie", - "imped", - "eogon", - "rx", - "ltrPar", - "Star", - "uogon", - "Tilde", - "half", - "tilde", - "Leftarrow", - "gesles", - "cap", - "strns", - "Lt", - "prnE", - "sqsupe", - "sqsupset", - "tridot", - "order", - "caps", - "cross", - "dfisht", - "xmap", - "sqsup", - "rtri", - "ltri", - "it", - "rmoust", - "lmoust", - "gnE", - "lgE", - "scE", - "utri", - "vellip", - "ETH", - "lmidot", - "Uogon", - "CounterClockwiseContourIntegral", - "ngE", - "nwnear", - "lesg", - "plusb", - "Rsh", - "copysr", - "infintie", - "imath", - "Esim", - "Phi", - "glE", - "vnsup", - "simgE", - "DoubleLongLeftArrow", - "DoubleLongLeftRightArrow", - "nvgt", - "Mellintrf", - "Prime", - "iinfin", - "ReverseElement", - "EmptySmallSquare", - "radic", - "hfr", - "zdot", - "male", - "rarrc", - "prec", - "scnap", - "DifferentialD", - "models", - "ltcir", - "iogon", - "capcap", - "iff", - "ddotseq", - "CirclePlus", - "rthree", - "lthree", - "PrecedesTilde", - "dtdot", - "clubsuit", - "racute", - "lacute", - "trpezium", - "sacute", - "Zacute", - "eacute", - "TildeTilde", - "Uarrocir", - "uacute", - "lowast", - "nacute", - "NotPrecedes", - "Lmidot", - "UpArrow", - "rarrw", - "DownTee", - "FilledSmallSquare", - "capcup", - "GreaterFullEqual", - "nvle", - "trie", - "omicron", - "DoubleRightTee", - "Cconint", - "rsquor", - "lsquor", - "zigrarr", - "copf", - "ContourIntegral", - "hairsp", - "sqsupseteq", - "csub", - "upharpoonright", - "DownBreve", - "ShortDownArrow", - "xopf", - "Sacute", - "vsupnE", - "cir", - "plusacir", - "csup", - "vsubnE", - "Uacute", - "isinE", - "gEl", - "sqcups", - "smid", - "lg", - "DoubleLongRightArrow", - "NotPrecedesSlantEqual", - "eg", - "AMP", - "nmid", - "timesd", - "DownLeftVector", - "zwnj", - "Lacute", - "DownLeftVectorBar", - "ograve", - "Yacute", - "sqcup", - "odot", - "Cacute", - "nu", - "tritime", - "Egrave", - "eplus", - "backcong", - "uplus", - "Edot", - "csupe", - "simg", - "UpperRightArrow", - "csube", - "dtri", - "prnsim", - "boxUr", - "uuarr", - "DownLeftTeeVector", - "gsime", - "bigotimes", - "Dagger", - "Intersection", - "iacute", - "prcue", - "egsdot", - "Implies", - "VDash", - "bump", - "Mu", - "vDash", - "lvnE", - "LeftTeeArrow", - "Nacute", - "UnderBrace", - "Psi", - "rhov", - "lescc", - "sup1", - "sup2", - "sup3", - "bigodot", - "Downarrow", - "xsqcup", - "barvee", - "NegativeMediumSpace", - "bumpe", - "cscr", - "nsc", - "sup", - "cedil", - "boxVr", - "origof", - "zwj", - "Igrave", - "Idot", - "xscr", - "xi", - "nGtv", - "boxHu", - "THORN", - "Racute", - "rarrhk", - "larrhk", - "rtriltri", - "boxV", - "dagger", - "Omicron", - "DoubleVerticalBar", - "nexists", - "Nu", - "nexist", - "gE", - "ap", - "Sup", - "doteqdot", - "eng", - "caron", - "boxHU", - "gesdot", - "ReverseEquilibrium", - "boxUL", - "supmult", - "pitchfork", - "numsp", - "rang", - "lang", - "ocir", - "rationals", - "coprod", - "ltlarr", - "breve", - "nang", - "swarhk", - "raquo", - "laquo", - "supsub", - "Cup", - "ape", - "quest", - "nwarhk", - "supset", - "downarrow", - "duarr", - "apos", - "Ograve", - "shortparallel", - "nsucc", - "LongLeftArrow", - "lesdoto", - "supne", - "nGg", - "raemptyv", - "supsup", - "laemptyv", - "topfork", - "Eogon", - "risingdotseq", - "bumpeq", - "lstrok", - "Tstrok", - "gsim", - "bemptyv", - "zacute", - "gsiml", - "tstrok", - "roang", - "boxVL", - "loang", - "nleqslant", - "sbquo", - "searhk", - "lnapprox", - "Supset", - "boxHd", - "varkappa", - "circeq", - "yopf", - "UnionPlus", - "Lang", - "nearhk", - "shcy", - "cfr", - "Kappa", - "ljcy", - "MediumSpace", - "supseteq", - "supseteqq", - "reg", - "amacr", - "leg", - "weierp", - "TScy", - "supsetneq", - "njcy", - "xfr", - "mu", - "nvinfin", - "boxUR", - "xoplus", - "leftleftarrows", - "sum", - "beth", - "complement", - "num", - "amp", - "boxUl", - "NotGreater", - "boxplus", - "jmath", - "sfrown", - "Dstrok", - "and", - "NotGreaterGreater", - "NotGreaterSlantEqual", - "NotGreaterLess", - "quot", - "NotGreaterFullEqual", - "hyphen", - "planck", - "TildeEqual", - "tosa", - "Lstrok", - "shy", - "xnis", - "Iogon", - "DZcy", - "ohbar", - "cirscir", - "sext", - "para", - "ast", - "questeq", - "Sum", - "DScy", - "ENG", - "ZHcy", - "longleftarrow", - "dash", - "DownTeeArrow", - "supsetneqq", - "profalar", - "oacute", - "boxVR", - "Eacute", - "supplus", - "hookleftarrow", - "CloseCurlyQuote", - "trisb", - "dotsquare", - "rtimes", - "ltimes", - "toea", - "Agrave", - "Assign", - "Rang", - "iocy", - "NotPrecedesEqual", - "aopf", - "chi", - "quaternions", - "boxVl", - "NotGreaterEqual", - "xhArr", - "orderof", - "rsquo", - "lsquo", - "yscr", - "gdot", - "NotSquareSubsetEqual", - "KHcy", - "bsolb", - "NotSquareSubset", - "SHcy", - "YIcy", - "cwint", - "Theta", - "theta", - "xlArr", - "NotSquareSupersetEqual", - "demptyv", - "triangle", - "Gdot", - "NotSquareSuperset", - "Abreve", - "dstrok", - "pertenk", - "rbrack", - "lbrack", - "odsold", - "omid", - "xrArr", - "triangleleft", - "NotGreaterTilde", - "colone", - "Longleftarrow", - "iota", - "colon", - "Zeta", - "gbreve", - "CHcy", - "YUcy", - "REG", - "szlig", - "dzcy", - "beta", - "euro", - "LeftArrow", - "CapitalDifferentialD", - "ring", - "Laplacetrf", - "djcy", - "oplus", - "integers", - "Gbreve", - "ubrcy", - "euml", - "deg", - "uuml", - "Iacute", - "succeq", - "KJcy", - "CupCap", - "tscy", - "cent", - "DJcy", - "TildeFullEqual", - "triangleq", - "duhar", - "LeftDoubleBracket", - "LJcy", - "iecy", - "trianglelefteq", - "nequiv", - "nshortparallel", - "ndash", - "bowtie", - "fjlig", - "Ubrcy", - "vartheta", - "Uuml", - "vartriangleright", - "vartriangleleft", - "ascr", - "succcurlyeq", - "cwconint", - "sc", - "fllig", - "circledast", - "Vdash", - "nVdash", - "suplarr", - "robrk", - "lobrk", - "vdash", - "Yuml", - "gt", - "ccaps", - "Succeeds", - "Oacute", - "TRADE", - "NJcy", - "gtdot", - "yfr", - "compfn", - "Gt", - "scnE", - "ijlig", - "circledS", - "yen", - "thetasym", - "iuml", - "SucceedsSlantEqual", - "boxH", - "mumap", - "rightrightarrows", - "coloneq", - "Sc", - "glj", - "iexcl", - "ccups", - "xcap", - "zhcy", - "boxHD", - "leqslant", - "UpperLeftArrow", - "dblac", - "puncsp", - "ccaron", - "rbbrk", - "lbbrk", - "Aogon", - "LeftTriangleBar", - "gesdotol", - "LeftTriangleEqual", - "LeftTriangle", - "conint", - "drbkarow", - "rtrif", - "ltrif", - "ReverseUpEquilibrium", - "LeftCeiling", - "utrif", - "xcup", - "fallingdotseq", - "rcedil", - "lcedil", - "scedil", - "Tcedil", - "starf", - "boxminus", - "tcedil", - "ZeroWidthSpace", - "ncedil", - "phiv", - "ic", - "capdot", - "dscy", - "check", - "ovbar", - "ntriangleleft", - "RightTee", - "nvge", - "leftrightsquigarrow", - "lozenge", - "RightTriangleBar", - "RightTeeVector", - "RightTriangleEqual", - "RightTriangle", - "Kcedil", - "Scedil", - "cirfnint", - "empty", - "afr", - "DiacriticalTilde", - "LeftDownVector", - "LeftDownVectorBar", - "lEg", - "ApplyFunction", - "bumpE", - "Lcedil", - "caret", - "Barv", - "Ccedil", - "circledR", - "LeftDownTeeVector", - "tshcy", - "DotEqual", - "centerdot", - "ntrianglelefteq", - "minus", - "gimel", - "Aacute", - "gtcir", - "gtrarr", - "bull", - "DownArrow", - "rdquor", - "ldquor", - "intlarhk", - "utilde", - "gacute", - "ntilde", - "af", - "Hstrok", - "exponentiale", - "minusb", - "RightUpTeeVector", - "UpTeeArrow", - "zeta", - "DiacriticalDot", - "DiacriticalDoubleAcute", - "nleftarrow", - "hkswarow", - "iiota", - "apacir", - "Ncedil", - "capand", - "mdash", - "filig", - "scnsim", - "realpart", - "leftthreetimes", - "asymp", - "hellip", - "dtrif", - "NotExists", - "sccue", - "YAcy", - "Utilde", - "NotEqual", - "ThinSpace", - "apE", - "bullet", - "CloseCurlyDoubleQuote", - "Delta", - "gg", - "otimes", - "wreath", - "Rcedil", - "eth", - "supnE", - "awint", - "Breve", - "Gg", - "HumpEqual", - "Lleftarrow", - "boxdr", - "succneqq", - "uring", - "LessSlantEqual", - "nvdash", - "Hacek", - "itilde", - "Iota", - "IOcy", - "boxDr", - "SucceedsTilde", - "LeftFloor", - "Vvdash", - "triangledown", - "LongLeftRightArrow", - "RightFloor", - "DownRightTeeVector", - "quatint", - "Ntilde", - "Bumpeq", - "gvnE", - "boxhu", - "gtlPar", - "nprec", - "ouml", - "gescc", - "Euml", - "Uring", - "UnderBracket", - "nLtv", - "LeftArrowBar", - "ncongdot", - "asympeq", - "minusdu", - "delta", - "harrw", - "andslope", - "cdot", - "Cayleys", - "boxhU", - "succsim", - "cirE", - "sdotb", - "odash", - "cirmid", - "suphsub", - "supdsub", - "supdot", - "awconint", - "TSHcy", - "grave", - "lsimg", - "UpArrowDownArrow", - "LeftVector", - "DoubleRightArrow", - "NegativeThinSpace", - "lhblk", - "cire", - "nVDash", - "uhblk", - "imagpart", - "RightUpDownVector", - "boxdL", - "gla", - "Iuml", - "oelig", - "NotLessSlantEqual", - "boxDL", - "gamma", - "Otimes", - "longleftrightarrow", - "Gamma", - "bigwedge", - "boxhd", - "supE", - "LeftUpTeeVector", - "gesdoto", - "kappa", - "ngeqslant", - "gtrless", - "fflig", - "bigsqcup", - "kgreen", - "supe", - "boxtimes", - "gnapprox", - "downdownarrows", - "biguplus", - "khcy", - "ddagger", - "Ouml", - "Beta", - "minusd", - "succnsim", - "ctdot", - "kjcy", - "gjcy", - "ncong", - "xvee", - "bcong", - "sqsube", - "boxdR", - "Longleftrightarrow", - "sqsub", - "DownLeftRightVector", - "sqsubset", - "NotVerticalBar", - "NotEqualTilde", - "boxdl", - "boxDR", - "andand", - "RightVector", - "IJlig", - "NotTildeEqual", - "angzarr", - "angrt", - "acd", - "andd", - "nrarrc", - "VeryThinSpace", - "Superset", - "boxDl", - "vnsub", - "ccupssm", - "varnothing", - "rcy", - "lcy", - "scy", - "Tcy", - "Zcy", - "ecy", - "rdsh", - "ldsh", - "ucy", - "boxVH", - "tcy", - "ncy", - "bcy", - "ntgl", - "Jcy", - "congdot", - "angst", - "RightDownTeeVector", - "OverParenthesis", - "ltquest", - "pcy", - "otilde", - "rdquo", - "ldquo", - "Vcy", - "capbrcup", - "bdquo", - "DownArrowBar", - "vcy", - "angrtvb", - "Kcy", - "Mcy", - "Scy", - "NewLine", - "fcy", - "Ucy", - "boxVh", - "Dcy", - "hstrok", - "Lcy", - "Ycy", - "supsim", - "NonBreakingSpace", - "OverBar", - "sqsubseteq", - "GJcy", - "OverBrace", - "eqcirc", - "OverBracket", - "Auml", - "acute", - "icy", - "Itilde", - "HilbertSpace", - "omega", - "cacute", - "scirc", - "ecirc", - "ucirc", - "GreaterSlantEqual", - "Jcirc", - "nvDash", - "Wcirc", - "Ncy", - "RightTeeArrow", - "LessFullEqual", - "ltcc", - "aleph", - "dcy", - "Scirc", - "lessapprox", - "IEcy", - "LowerRightArrow", - "Ucirc", - "agrave", - "MinusPlus", - "bigvee", - "Rcy", - "suphsol", - "EmptyVerySmallSquare", - "boxhD", - "precapprox", - "angrtvbd", - "Ycirc", - "sub", - "Otilde", - "Ccirc", - "Fcy", - "complexes", - "subrarr", - "InvisibleComma", - "boxur", - "abreve", - "ntlg", - "icirc", - "xdtri", - "circ", - "gtrdot", - "geqslant", - "ntriangleright", - "cuepr", - "Sub", - "mcy", - "timesbar", - "hksearow", - "sigma", - "cupor", - "oslash", - "dzigrarr", - "leftrightharpoons", - "rightleftharpoons", - "kcedil", - "submult", - "curren", - "LeftTeeVector", - "bigstar", - "cup", - "LongRightArrow", - "Gcedil", - "PrecedesEqual", - "zcy", - "planckh", - "Omega", - "subsub", - "rdca", - "cups", - "ldca", - "subset", - "NotSucceeds", - "LeftArrowRightArrow", - "wcirc", - "RightAngleBracket", - "ntrianglerighteq", - "Sigma", - "NotSucceedsTilde", - "DiacriticalAcute", - "subne", - "Product", - "circleddash", - "subsup", - "copy", - "eta", - "angmsd", - "natural", - "supedot", - "naturals", - "triangleright", - "DiacriticalGrave", - "boxuL", - "cong", - "telrec", - "comma", - "Subset", - "NotSucceedsSlantEqual", - "gtreqless", - "Atilde", - "curarr", - "cudarrr", - "cudarrl", - "subseteq", - "subseteqq", - "rightsquigarrow", - "cupcap", - "subsetneq", - "aogon", - "notinvc", - "rightthreetimes", - "yacute", - "nLeftarrow", - "ocy", - "cemptyv", - "Ecy", - "cupcup", - "trianglerighteq", - "LeftRightArrow", - "succ", - "DownArrowUpArrow", - "OElig", - "chcy", - "gtreqqless", - "angle", - "acE", - "rmoustache", - "lmoustache", - "NegativeVeryThinSpace", - "napprox", - "Oslash", - "subsetneqq", - "Aring", - "boxuR", - "subplus", - "xwedge", - "boxul", - "boxvr", - "HumpDownHump", - "Icy", - "approxeq", - "aacute", - "apid", - "UpDownArrow", - "NestedGreaterGreater", - "jcy", - "gtrsim", - "boxv", - "ocirc", - "Ecirc", - "notnivc", - "bigtriangleup", - "daleth", - "Ocy", - "Hcirc", - "RightVectorBar", - "AElig", - "FilledVerySmallSquare", - "ggg", - "Bcy", - "Poincareplane", - "boxvL", - "PartialD", - "Icirc", - "cularr", - "boxh", - "andv", - "sung", - "RightDoubleBracket", - "jcirc", - "UnderBar", - "RightArrow", - "circledcirc", - "Alpha", - "leftharpoonup", - "cularrp", - "RightArrowLeftArrow", - "varsigma", - "numero", - "ffllig", - "LowerLeftArrow", - "expectation", - "Ocirc", - "yacy", - "lambda", - "NotSucceedsEqual", - "boxvR", - "bigtriangledown", - "ang", - "xuplus", - "nabla", - "boxvl", - "Eta", - "Acy", - "kcy", - "gcy", - "LeftRightVector", - "ccedil", - "Backslash", - "hslash", - "Pcy", - "Gcy", - "gtquest", - "Lambda", - "odiv", - "leftharpoondown", - "longmapsto", - "Jukcy", - "ldrdhar", - "xutri", - "nRightarrow", - "ExponentialE", - "nrightarrow", - "Acirc", - "NoBreak", - "gcirc", - "ange", - "curarrm", - "SHCHcy", - "yuml", - "subnE", - "DDotrahd", - "RuleDelayed", - "Gcirc", - "Jsercy", - "gtcc", - "iukcy", - "updownarrow", - "curlyvee", - "ffilig", - "yicy", - "divonx", - "gtrapprox", - "subdot", - "leftrightarrows", - "auml", - "Updownarrow", - "rightleftarrows", - "DownRightVector", - "DownRightVectorBar", - "hcirc", - "Rrightarrow", - "longrightarrow", - "cupdot", - "ac", - "hookrightarrow", - "NegativeThickSpace", - "subE", - "twoheadrightarrow", - "downharpoonright", - "downharpoonleft", - "aelig", - "rdldhar", - "curlywedge", - "hybull", - "sube", - "Longrightarrow", - "Cedilla", - "notinva", - "SucceedsEqual", - "leftrightarrow", - "straightepsilon", - "amalg", - "atilde", - "RightCeiling", - "Leftrightarrow", - "subsim", - "VerticalLine", - "RightUpVector", - "RightUpVectorBar", - "RightDownVector", - "RightDownVectorBar", - "alefsym", - "circlearrowright", - "circlearrowleft", - "Iukcy", - "otimesas", - "intercal", - "thickapprox", - "jukcy", - "notniva", - "precnapprox", - "cuvee", - "aring", - "ccirc", - "rightarrow", - "Integral", - "xcirc", - "jsercy", - "checkmark", - "VerticalTilde", - "boxvH", - "NotRightTriangleBar", - "NotRightTriangleEqual", - "NotRightTriangle", - "LeftVectorBar", - "boxvh", - "boxbox", - "ycy", - "subedot", - "SOFTcy", - "Rightarrow", - "alpha", - "shchcy", - "softcy", - "acy", - "ycirc", - "bigcirc", - "ImaginaryI", - "approx", - "SupersetEqual", - "vzigzag", - "cuesc", - "UnderParenthesis", - "acirc", - "succapprox", - "mcomma", - "angmsdae", - "angmsdab", - "angmsdaf", - "angsph", - "luruhar", - "angmsdad", - "twoheadleftarrow", - "cylcty", - "straightphi", - "multimap", - "RightArrowBar", - "ldrushar", - "LeftAngleBracket", - "ruluhar", - "curlyeqprec", - "yucy", - "lurdshar", - "hardcy", - "rightharpoondown", - "rightharpoonup", - "HARDcy", - "SubsetEqual", - "digamma", - "udblac", - "SuchThat", - "cuwed", - "Udblac", - "angmsdag", - "angmsdah", - "VerticalBar", - "VerticalSeparator", - "rightarrowtail", - "odblac", - "succnapprox", - "angmsdac", - "Odblac", - "cupbrcap", - "angmsdaa", - "curlyeqsucc", - "curvearrowleft", - "curvearrowright" - }; -#define entity_pool ((const char *) &entity_pool_contents) -const struct html_ent * -find_entity (register const char *str, register unsigned int len) -{ - static const unsigned char lengthtable[] = - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 6, 0, 6, 5, 0, 5, 3, 4, - 3, 4, 0, 4, 0, 2, 5, 4, 0, 0, 0, 2, 0, 7, - 0, 7, 3, 0, 5, 0, 0, 0, 0, 0, 4, 0, 0, 6, - 0, 0, 0, 3, 6, 0, 4, 0, 0, 0, 0, 6, 4, 5, - 0, 0, 0, 5, 0, 5, 0, 6, 0, 0, 0, 4, 5, 5, - 5, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 0, 0, 3, 4, 0, 3, 0, 0, 5, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 0, - 5, 0, 5, 6, 0, 6, 5, 0, 2, 5, 0, 5, 0, 0, - 0, 0, 4, 0, 0, 0, 3, 0, 3, 5, 0, 0, 5, 0, - 0, 0, 6, 0, 10, 0, 4, 0, 0, 5, 3, 5, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 3, 0, 0, 0, 0, 6, 6, - 0, 6, 0, 0, 0, 0, 6, 0, 6, 0, 2, 0, 0, 0, - 4, 7, 0, 7, 0, 5, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 4, 0, 4, 6, 0, 3, 0, 0, 0, 0, 0, 0, 4, - 4, 3, 0, 4, 0, 0, 2, 0, 0, 0, 4, 0, 4, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 2, 0, 0, 0, 5, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 3, 2, 4, 0, 6, 0, 0, 3, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 0, 0, 0, - 0, 4, 6, 0, 0, 0, 5, 5, 5, 0, 13, 0, 0, 4, - 0, 0, 5, 0, 4, 4, 5, 17, 18, 0, 0, 0, 0, 0, - 5, 0, 0, 17, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, - 5, 5, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 6, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 6, 0, 0, - 0, 4, 0, 0, 5, 0, 6, 6, 6, 6, 6, 6, 6, 0, - 0, 6, 0, 6, 0, 6, 6, 6, 6, 6, 6, 0, 0, 0, - 6, 0, 6, 3, 4, 0, 0, 4, 3, 5, 0, 0, 3, 0, - 0, 0, 11, 5, 0, 0, 0, 4, 0, 0, 6, 0, 0, 0, - 5, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 5, 3, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 0, 4, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 5, 0, 0, 0, 0, - 3, 6, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 4, 6, - 0, 0, 8, 0, 8, 0, 2, 0, 0, 0, 0, 4, 0, 0, - 0, 4, 0, 6, 0, 0, 0, 0, 6, 0, 4, 0, 0, 0, - 0, 6, 0, 5, 6, 2, 5, 8, 5, 0, 0, 4, 0, 4, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 9, 0, 4, 4, - 4, 0, 4, 6, 4, 4, 4, 0, 0, 0, 5, 4, 5, 4, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 4, 5, 4, - 5, 0, 0, 4, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, - 4, 4, 0, 5, 0, 0, 11, 0, 0, 6, 0, 0, 3, 0, - 0, 0, 0, 6, 0, 4, 0, 0, 4, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 7, 4, 4, 0, 7, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 3, 8, 4, 0, 0, 0, 5, 0, 6, 0, - 0, 0, 0, 6, 0, 4, 0, 0, 0, 5, 0, 6, 0, 0, - 0, 5, 5, 0, 0, 3, 6, 2, 0, 0, 4, 0, 0, 7, - 0, 4, 0, 4, 4, 4, 3, 5, 0, 0, 0, 0, 0, 0, - 6, 0, 4, 4, 0, 0, 0, 12, 13, 0, 0, 6, 8, 0, - 2, 0, 0, 17, 0, 0, 0, 4, 0, 5, 0, 7, 0, 5, - 0, 0, 0, 5, 4, 5, 0, 0, 3, 0, 0, 0, 5, 0, - 5, 12, 13, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 7, 0, 0, 6, 6, 6, 0, 4, 0, - 0, 0, 0, 17, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 6, 9, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 5, 0, 0, 17, 0, 0, - 14, 0, 0, 0, 0, 12, 4, 0, 0, 0, 4, 0, 2, 0, - 4, 0, 6, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, - 4, 0, 4, 4, 4, 0, 0, 0, 0, 4, 0, 4, 0, 4, - 9, 0, 0, 4, 2, 0, 0, 4, 2, 4, 4, 0, 0, 0, - 0, 4, 6, 0, 0, 6, 9, 4, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 6, 0, 0, - 0, 0, 6, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, - 7, 4, 4, 7, 0, 7, 5, 0, 0, 6, 4, 4, 4, 0, - 4, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, - 0, 0, 4, 0, 0, 4, 4, 6, 0, 0, 0, 3, 5, 3, - 5, 11, 4, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 5, 0, 5, 0, 0, 0, 3, 5, 4, - 0, 0, 0, 5, 0, 6, 9, 7, 2, 0, 4, 0, 0, 4, - 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 9, 10, 0, - 0, 0, 5, 0, 0, 0, 0, 11, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 4, 8, 6, 0, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 13, 5, 5, 6, - 0, 0, 0, 0, 2, 0, 0, 0, 4, 2, 4, 0, 0, 6, - 4, 0, 4, 0, 0, 0, 4, 0, 21, 0, 0, 0, 6, 0, - 3, 0, 0, 0, 6, 6, 0, 3, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 4, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 3, 0, 0, - 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, - 3, 15, 3, 3, 3, 0, 0, 0, 3, 3, 6, 3, 6, 0, - 0, 0, 0, 3, 0, 0, 4, 3, 0, 3, 0, 12, 0, 0, - 0, 3, 0, 4, 0, 0, 0, 3, 0, 12, 0, 4, 5, 0, - 9, 0, 0, 7, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 5, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 5, - 0, 3, 3, 0, 0, 6, 0, 0, 0, 0, 0, 4, 0, 0, - 3, 3, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 3, 7, 0, 0, 8, 0, 0, 0, 0, - 0, 0, 3, 4, 0, 6, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 2, 0, 0, 0, 0, 9, 3, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 3, 24, 0, 0, - 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 7, 4, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 3, - 0, 4, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 5, 2, 0, 0, 0, 6, 0, 3, 8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 9, 5, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 15, 7, 8, 4, 0, 5, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 4, 4, 5, 0, 0, 0, 0, 6, 14, 3, - 15, 0, 6, 0, 0, 0, 3, 0, 3, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 5, 16, 0, 5, 10, 0, 0, 0, - 5, 7, 0, 5, 0, 0, 6, 0, 3, 0, 0, 11, 5, 0, - 0, 4, 5, 0, 0, 5, 0, 0, 3, 0, 0, 0, 0, 8, - 0, 0, 0, 5, 0, 0, 0, 6, 3, 0, 0, 0, 0, 0, - 5, 0, 0, 3, 3, 3, 0, 0, 0, 6, 0, 0, 5, 6, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 11, 0, 6, 0, 6, 0, 0, 13, 0, 0, 7, - 0, 0, 0, 0, 7, 0, 6, 4, 5, 0, 3, 0, 0, 5, - 3, 0, 0, 0, 0, 0, 6, 0, 0, 4, 0, 0, 0, 0, - 3, 6, 5, 0, 0, 0, 0, 11, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 0, 11, 0, 5, 5, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 8, 0, 7, 4, 0, 0, 0, 0, 5, 4, 9, - 0, 0, 5, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 6, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 4, 0, 0, 14, 5, 0, 0, 8, - 0, 0, 0, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 3, 0, 0, 4, 6, 0, 0, 0, 0, 6, 0, 0, 0, 7, - 0, 3, 6, 4, 6, 0, 0, 0, 0, 0, 0, 6, 3, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0, 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, - 0, 0, 0, 0, 0, 0, 0, 13, 18, 5, 0, 3, 0, 7, - 0, 4, 0, 0, 0, 4, 0, 0, 10, 11, 0, 0, 0, 6, - 0, 6, 0, 0, 5, 0, 5, 12, 12, 0, 0, 0, 4, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 14, 0, 0, 0, 2, 4, 8, 4, 0, 3, 0, 0, 7, 0, - 3, 0, 0, 0, 3, 2, 0, 0, 0, 0, 6, 0, 6, 4, - 6, 7, 6, 6, 6, 0, 10, 0, 0, 0, 3, 6, 0, 4, - 0, 0, 0, 0, 0, 4, 0, 6, 6, 0, 4, 0, 0, 0, - 7, 0, 0, 7, 0, 0, 4, 0, 4, 0, 5, 6, 0, 6, - 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 8, 14, 0, 3, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 7, 5, 0, 0, 0, 4, 0, 0, 0, - 17, 7, 0, 0, 4, 0, 0, 7, 0, 5, 0, 0, 7, 5, - 0, 0, 4, 0, 7, 2, 20, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 6, 0, 7, 3, 5, 4, 0, 0, 0, 0, 5, 5, - 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 5, 0, 0, 6, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 4, 9, 0, 5, 12, 0, 0, 0, 0, 5, 0, 5, - 4, 0, 0, 0, 9, 0, 0, 0, 10, 10, 0, 0, 4, 6, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 6, 6, 0, 3, 0, 0, 0, - 7, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 4, 0, - 9, 0, 0, 3, 0, 0, 0, 7, 0, 4, 0, 0, 5, 6, - 0, 0, 6, 3, 5, 4, 0, 0, 0, 0, 0, 6, 0, 5, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 6, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 6, 0, 6, 0, 0, 6, - 0, 0, 18, 0, 6, 0, 20, 15, 0, 0, 4, 4, 0, 0, - 0, 6, 0, 0, 0, 3, 0, 0, 0, 0, 0, 5, 4, 4, - 0, 7, 0, 6, 0, 4, 0, 5, 0, 0, 0, 0, 5, 0, - 0, 0, 4, 4, 0, 0, 0, 0, 4, 0, 4, 0, 11, 0, - 20, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 3, 0, 0, 6, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 9, 0, 0, 0, 5, - 0, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 3, 0, 0, 17, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 9, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 11, 0, 6, 0, 6, 0, 7, 5, 0, 0, 0, 6, 12, - 12, 0, 0, 0, 0, 16, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0, 0, 7, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 14, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 5, 0, 5, 0, 0, 0, 0, 0, 11, 6, 6, 3, 0, 0, - 0, 0, 7, 0, 6, 0, 6, 6, 4, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, - 4, 4, 0, 0, 0, 0, 3, 3, 6, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 6, 0, 0, 0, 4, 6, 0, - 4, 4, 0, 0, 0, 0, 13, 0, 4, 0, 0, 0, 0, 4, - 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 10, 0, 9, 0, 0, 4, 6, 0, 5, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 5, 0, 5, - 0, 0, 0, 6, 0, 0, 5, 0, 0, 6, 0, 6, 0, 0, - 13, 6, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 6, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 6, 15, 0, 0, 7, 0, 3, 0, 3, 0, 0, 0, - 9, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 15, - 0, 0, 0, 6, 0, 0, 6, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2, 15, 0, 0, - 0, 5, 0, 5, 0, 4, 0, 0, 0, 0, 0, 0, 16, 0, - 3, 3, 10, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, - 5, 4, 0, 0, 6, 0, 5, 4, 0, 5, 5, 3, 5, 0, - 4, 0, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 3, 0, 0, 6, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 8, 6, 0, 0, 0, 0, 0, 0, 0, 5, 16, 0, - 5, 7, 0, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 5, 0, 0, - 0, 0, 6, 0, 5, 4, 5, 0, 5, 5, 0, 0, 0, 0, - 5, 2, 6, 4, 0, 5, 0, 0, 5, 0, 4, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 3, 5, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 5, 0, 0, 4, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 4, 2, 6, 0, 6, 3, 3, 0, 0, - 3, 0, 4, 0, 6, 0, 3, 0, 0, 6, 0, 5, 31, 0, - 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 6, - 0, 8, 0, 5, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 5, 0, 0, 5, 0, - 0, 0, 19, 0, 0, 0, 0, 24, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 5, - 0, 0, 0, 6, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 16, 5, 0, 0, 3, 4, 4, 0, 5, 4, 5, 0, 0, - 0, 13, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 6, 0, 3, - 0, 7, 0, 10, 0, 0, 0, 0, 6, 0, 6, 0, 0, 13, - 0, 0, 0, 5, 0, 8, 0, 6, 0, 6, 8, 6, 0, 0, - 6, 6, 0, 10, 0, 8, 6, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 11, 0, 0, 0, 6, 0, 0, 0, - 0, 7, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 17, 6, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 7, 0, - 14, 7, 6, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 10, 4, 14, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 4, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 6, 3, 8, 4, 6, 6, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 6, 0, 4, 0, 2, 0, 20, 21, 0, 0, 2, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 14, 4, 6, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 5, 0, 0, - 4, 6, 0, 2, 7, 0, 6, 5, 0, 8, 0, 0, 5, 0, - 4, 0, 0, 0, 5, 0, 4, 15, 5, 0, 4, 6, 0, 0, - 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 17, 5, 0, - 0, 0, 9, 6, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 5, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 10, 3, 0, 0, - 0, 4, 0, 5, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 9, 0, 6, 0, 6, 0, 0, 0, 0, 19, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 0, 6, 3, 6, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 2, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 6, 0, 6, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 17, 0, - 0, 7, 0, 0, 2, 6, 2, 0, 0, 0, 2, 0, 0, 0, - 0, 3, 8, 0, 0, 3, 0, 5, 0, 5, 6, 0, 0, 0, - 0, 18, 0, 0, 0, 0, 5, 0, 7, 0, 0, 9, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 4, 0, 0, 4, 0, 9, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 0, 4, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 5, 0, 5, 6, - 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 6, 0, 0, 0, - 6, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, - 6, 13, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 8, 6, 8, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 12, 0, 6, 0, 0, 0, 6, 0, 0, - 0, 6, 4, 0, 0, 7, 6, 5, 0, 0, 6, 0, 5, 5, - 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 6, 8, - 0, 0, 6, 0, 5, 8, 0, 0, 0, 6, 0, 4, 0, 9, - 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, - 11, 0, 0, 8, 9, 0, 0, 0, 0, 3, 5, 3, 0, 0, - 0, 0, 6, 4, 0, 0, 0, 9, 4, 3, 0, 2, 0, 0, - 0, 0, 0, 7, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 14, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 10, 7, - 5, 0, 6, 0, 6, 0, 3, 17, 0, 0, 0, 0, 0, 0, - 20, 0, 14, 4, 0, 0, 0, 0, 0, 0, 19, 6, 6, 0, - 10, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 6, 0, - 0, 3, 0, 0, 0, 4, 5, 0, 0, 4, 0, 5, 0, 0, - 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 7, 0, 3, 0, 4, 0, 3, 0, 4, 0, 0, 13, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 6, 0, 0, 0, 0, 0, 7, 0, 13, 0, 0, 15, 0, 0, - 5, 9, 0, 0, 0, 6, 0, 6, 0, 0, 4, 6, 0, 0, - 6, 4, 4, 0, 16, 0, 4, 0, 3, 0, 0, 11, 5, 15, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 5, 0, 5, 4, 0, 0, 4, 0, - 20, 4, 0, 0, 0, 0, 0, 5, 15, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 22, 0, 0, 7, - 8, 0, 4, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 6, 7, 0, 0, 0, 0, 6, 0, 6, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 4, 0, 5, 0, 12, 15, 6, 0, - 13, 0, 4, 0, 5, 4, 6, 0, 0, 0, 0, 4, 0, 0, - 4, 3, 5, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 9, 0, 0, 20, 0, 4, 10, - 0, 0, 0, 0, 4, 0, 5, 0, 0, 8, 6, 0, 5, 4, - 0, 0, 3, 0, 4, 0, 0, 6, 6, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 9, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 5, 6, 0, 5, 0, 0, - 0, 0, 0, 0, 5, 0, 8, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 16, 15, 4, 0, 0, 11, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 5, 0, 10, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 6, 5, 4, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 6, 0, - 0, 0, 0, 2, 4, 5, 0, 0, 0, 8, 0, 0, 3, 0, - 8, 0, 0, 4, 18, 0, 0, 0, 0, 4, 5, 0, 0, 0, - 16, 0, 0, 0, 0, 7, 0, 2, 3, 5, 0, 0, 5, 0, - 4, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 14, 0, 0, 0, 0, 5, 0, 0, 6, 0, 6, 0, - 5, 0, 5, 0, 5, 15, 0, 0, 8, 17, 12, 0, 0, 0, - 0, 0, 6, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 5, 0, 0, 20, 0, 0, 0, 0, 0, - 11, 0, 5, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6, 0, 5, - 8, 0, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 16, 0, 14, 0, 18, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 5, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 8, 17, 0, 0, 0, 5, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 15, 0, 5, 0, 5, 0, - 0, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 6, 4, 0, - 0, 9, 0, 0, 0, 0, 0, 6, 0, 6, 0, 0, 8, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 6, 2, 0, 0, 6, 0, 12, 6, 0, 0, 0, 16, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 14, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 8, 0, 5, 0, 0, 6, - 0, 0, 0, 6, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 14, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 5, 0, 9, 0, - 0, 0, 5, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 21, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 6, 0, 0, 0, 0, 0, 3, 5, 0, - 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 2, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 5, 6, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12, 0, 0, 0, 18, 10, 0, 0, 18, 0, 7, 0, 0, - 0, 6, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 5, 0, 0, 0, 0, 6, 0, 0, 5, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 5, 0, 12, 4, 12, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 7, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 5, 0, 0, 0, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 8, 0, 0, 0, 0, 5, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 4, 6, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, - 0, 17, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 17, 0, 5, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 8, 4, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 4, 6, 8, 0, 5, 0, - 0, 4, 4, 0, 5, 4, 5, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 5, 0, 0, 18, 0, 5, 0, 0, 0, 19, 0, 0, - 8, 0, 14, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 5, 13, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 3, 0, 0, - 4, 0, 6, 13, 0, 8, 0, 5, 0, 0, 0, 5, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 3, 0, 3, 0, 3, 0, 3, 3, 3, 4, 0, 4, 0, 3, - 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 5, - 0, 18, 0, 0, 15, 7, 0, 3, 0, 0, 6, 5, 0, 5, - 0, 3, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 7, 10, 0, 0, 0, 0, 0, 4, 0, 0, 9, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 12, 0, 0, 0, 5, 6, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 6, 5, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 15, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 9, 6, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 7, 0, 0, 20, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 0, 0, - 0, 3, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 8, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 6, 8, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 7, 0, 0, 3, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 7, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 6, 11, 19, 0, - 0, 5, 17, 0, 0, 0, 0, 0, 16, 5, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 7, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 7, 8, 0, 0, 0, 0, 0, 13, 0, 16, 5, 4, - 0, 0, 0, 6, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 9, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, - 9, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 7, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 6, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 4, 10, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 10, 0, 10, 0, - 0, 0, 21, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 20, 0, 3, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 5, 14, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 5, 0, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 5, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 7, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 16, 5, 0, 15, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 4, 7, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 4, - 0, 0, 11, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 18, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, - 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 12, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 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, 0, - 0, 15, 0, 0, 18, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 5, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 21, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15 - }; - static const struct html_ent wordlist[] = - { - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1497 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str39), {226, 134, 146, 0}}, - {-1,{0}}, -#line 831 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str41), {226, 134, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 842 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str49), {226, 170, 171, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1903 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str52), {226, 134, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1235 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str55), {226, 138, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1509 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str62), {226, 134, 163, 0}}, - {-1,{0}}, -#line 841 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str64), {226, 134, 162, 0}}, -#line 1601 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str65), {226, 135, 190, 0}}, - {-1,{0}}, -#line 963 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str67), {226, 135, 189, 0}}, -#line 1167 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str68), {194, 172, 0}}, -#line 1609 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str69), {41, 0}}, -#line 146 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str70), {226, 138, 165, 0}}, -#line 989 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str71), {40, 0}}, - {-1,{0}}, -#line 1715 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str73), {226, 136, 165, 0}}, - {-1,{0}}, -#line 944 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str75), {226, 137, 170, 0}}, -#line 1926 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str76), {226, 134, 190, 0}}, -#line 505 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str77), {226, 139, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 482 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str81), {226, 170, 153, 0}}, - {-1,{0}}, -#line 1607 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str83), {226, 168, 181, 0}}, - {-1,{0}}, -#line 981 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str85), {226, 168, 180, 0}}, -#line 1386 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str86), {226, 136, 165, 0}}, - {-1,{0}}, -#line 1132 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str88), {226, 134, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1230 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str94), {226, 136, 166, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1872 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str97), {226, 128, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 486 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str101), {226, 170, 149, 0}}, -#line 506 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str102), {226, 167, 163, 0}}, - {-1,{0}}, -#line 500 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str104), {226, 128, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 193 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str109), {226, 128, 181, 0}}, -#line 955 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str110), {226, 170, 137, 0}}, -#line 137 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str111), {226, 150, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 136 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str115), {226, 150, 146, 0}}, - {-1,{0}}, -#line 138 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str117), {226, 150, 147, 0}}, - {-1,{0}}, -#line 1232 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str119), {226, 171, 189, 226, 131, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1143 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str123), {226, 128, 165, 0}}, -#line 1594 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str124), {226, 135, 132, 0}}, -#line 1233 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str125), {226, 136, 130, 204, 184, 0}}, -#line 946 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str126), {226, 135, 135, 0}}, -#line 1158 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str127), {226, 137, 174, 0}}, -#line 1696 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str128), {226, 134, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1231 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str138), {226, 136, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1825 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str143), {206, 164, 0}}, -#line 1991 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str144), {226, 134, 149, 0}}, - {-1,{0}}, -#line 1729 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str146), {226, 150, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1141 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str149), {226, 134, 154, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1826 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str152), {207, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 958 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str165), {226, 170, 135, 0}}, -#line 1612 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str166), {226, 135, 137, 0}}, - {-1,{0}}, -#line 991 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str168), {226, 135, 134, 0}}, - {-1,{0}}, -#line 1740 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str170), {226, 134, 146, 0}}, -#line 1556 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str171), {226, 165, 172, 0}}, - {-1,{0}}, -#line 940 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str173), {226, 165, 170, 0}}, -#line 525 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str174), {226, 165, 177, 0}}, - {-1,{0}}, -#line 1431 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str176), {226, 137, 186, 0}}, -#line 1555 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str177), {226, 135, 128, 0}}, - {-1,{0}}, -#line 939 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str179), {226, 134, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1904 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str184), {226, 134, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1128 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str188), {226, 137, 171, 226, 131, 146, 0}}, - {-1,{0}}, -#line 140 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str190), {61, 226, 131, 165, 0}}, -#line 1240 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str191), {226, 134, 155, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1818 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str194), {226, 134, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1500 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str198), {226, 165, 181, 0}}, - {-1,{0}}, -#line 1966 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str200), {226, 135, 136, 0}}, - {-1,{0}}, -#line 344 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str202), {226, 134, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1516 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str205), {226, 164, 141, 0}}, -#line 397 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str206), {194, 168, 0}}, -#line 847 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str207), {226, 164, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1306 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str215), {226, 134, 150, 0}}, - {-1,{0}}, -#line 1703 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str217), {226, 170, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 497 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str222), {226, 128, 133, 0}}, -#line 1507 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str223), {226, 165, 133, 0}}, - {-1,{0}}, -#line 839 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str225), {226, 164, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1405 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str230), {226, 132, 179, 0}}, - {-1,{0}}, -#line 496 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str232), {226, 128, 132, 0}}, - {-1,{0}}, -#line 1011 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str234), {60, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 832 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str238), {226, 134, 158, 0}}, -#line 1524 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str239), {226, 166, 144, 0}}, - {-1,{0}}, -#line 854 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str241), {226, 166, 141, 0}}, - {-1,{0}}, -#line 1081 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str243), {197, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1145 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str251), {226, 137, 176, 0}}, - {-1,{0}}, -#line 1553 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str253), {226, 165, 164, 0}}, - {-1,{0}}, -#line 937 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str255), {226, 165, 162, 0}}, -#line 1476 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str256), {226, 129, 151, 0}}, - {-1,{0}}, -#line 828 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str258), {226, 170, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1086 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str265), {194, 160, 0}}, -#line 1924 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str266), {226, 165, 163, 0}}, -#line 1865 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str267), {226, 138, 164, 0}}, - {-1,{0}}, -#line 2003 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str269), {226, 171, 171, 0}}, - {-1,{0}}, {-1,{0}}, -#line 945 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str272), {226, 139, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1433 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str276), {226, 170, 183, 0}}, - {-1,{0}}, -#line 495 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str278), {226, 128, 131, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1078 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str281), {226, 137, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 975 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str294), {226, 134, 171, 0}}, - {-1,{0}}, -#line 869 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str296), {226, 137, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1669 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str300), {226, 153, 175, 0}}, - {-1,{0}}, -#line 473 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str302), {226, 133, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 912 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str310), {226, 169, 189, 0}}, -#line 743 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str311), {226, 136, 136, 0}}, -#line 1460 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str312), {226, 136, 157, 0}}, - {-1,{0}}, -#line 1866 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str314), {226, 140, 182, 0}}, - {-1,{0}}, {-1,{0}}, -#line 748 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str317), {226, 136, 171, 0}}, - {-1,{0}}, -#line 1100 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str319), {226, 137, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1236 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str329), {226, 139, 160, 0}}, - {-1,{0}}, -#line 1435 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str331), {226, 170, 175, 0}}, -#line 508 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str332), {206, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1959 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str337), {207, 133, 0}}, -#line 1838 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str338), {226, 136, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1522 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str342), {226, 166, 140, 0}}, -#line 1657 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str343), {226, 134, 152, 0}}, -#line 852 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str344), {226, 166, 139, 0}}, - {-1,{0}}, -#line 131 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str346), {226, 150, 180, 0}}, - {-1,{0}}, {-1,{0}}, -#line 959 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str349), {226, 170, 135, 0}}, - {-1,{0}}, {-1,{0}}, -#line 960 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str352), {226, 137, 168, 0}}, - {-1,{0}}, -#line 1414 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str354), {43, 0}}, -#line 1153 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str355), {226, 169, 189, 204, 184, 0}}, -#line 1105 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str356), {226, 137, 144, 204, 184, 0}}, -#line 133 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str357), {226, 151, 130, 0}}, -#line 134 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str358), {226, 150, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1102 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str364), {226, 134, 151, 0}}, - {-1,{0}}, {-1,{0}}, -#line 132 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str367), {226, 150, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1154 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str373), {226, 137, 174, 0}}, -#line 489 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str374), {196, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2033 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str378), {226, 136, 157, 0}}, -#line 1933 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str379), {197, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1700 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str383), {226, 167, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1033 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str387), {226, 164, 133, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1419 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str390), {226, 168, 165, 0}}, -#line 1168 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str391), {226, 171, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2018 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str408), {226, 128, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1398 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str426), {226, 138, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 560 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str430), {226, 150, 177, 0}}, -#line 1422 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str431), {194, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1150 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str435), {226, 137, 176, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1151 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str438), {226, 137, 166, 204, 184, 0}}, - {-1,{0}}, -#line 578 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str440), {194, 190, 0}}, -#line 572 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str441), {194, 188, 0}}, -#line 2017 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str442), {124, 0}}, -#line 570 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str443), {194, 189, 0}}, -#line 579 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str444), {226, 133, 151, 0}}, -#line 573 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str445), {226, 133, 149, 0}}, -#line 581 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str446), {226, 133, 152, 0}}, - {-1,{0}}, {-1,{0}}, -#line 577 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str449), {226, 133, 150, 0}}, - {-1,{0}}, -#line 571 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str451), {226, 133, 147, 0}}, - {-1,{0}}, -#line 574 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str453), {226, 133, 153, 0}}, -#line 1465 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str454), {226, 138, 176, 0}}, -#line 576 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str455), {226, 133, 148, 0}}, -#line 580 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str456), {226, 133, 156, 0}}, -#line 575 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str457), {226, 133, 155, 0}}, -#line 582 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str458), {226, 133, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 583 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str462), {226, 133, 157, 0}}, - {-1,{0}}, -#line 584 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str464), {226, 133, 158, 0}}, -#line 909 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str465), {226, 137, 164, 0}}, -#line 343 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str466), {226, 134, 147, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1960 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str469), {207, 146, 0}}, -#line 398 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str470), {203, 153, 0}}, -#line 1406 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str471), {226, 152, 142, 0}}, - {-1,{0}}, {-1,{0}}, -#line 215 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str474), {226, 139, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 130 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str478), {226, 150, 170, 0}}, -#line 1599 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str479), {226, 171, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 910 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str483), {226, 137, 166, 0}}, - {-1,{0}}, {-1,{0}}, -#line 750 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str486), {226, 138, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 371 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str490), {226, 135, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1554 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str494), {226, 135, 129, 0}}, - {-1,{0}}, -#line 938 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str496), {226, 134, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1420 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str505), {226, 169, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1932 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str511), {197, 170, 0}}, -#line 2013 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str512), {226, 139, 129, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1498 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str515), {226, 134, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 303 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str527), {226, 168, 175, 0}}, - {-1,{0}}, -#line 1619 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str529), {93, 0}}, - {-1,{0}}, -#line 1005 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str531), {91, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1510 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str538), {226, 164, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 529 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str541), {226, 137, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2012 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str546), {226, 136, 168, 0}}, -#line 1088 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str547), {226, 137, 143, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 947 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str553), {226, 140, 158, 0}}, -#line 569 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str554), {226, 168, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1739 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str558), {226, 150, 170, 0}}, -#line 1413 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str559), {226, 132, 143, 0}}, - {-1,{0}}, {-1,{0}}, -#line 524 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str562), {226, 167, 165, 0}}, - {-1,{0}}, -#line 1929 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str564), {226, 140, 156, 0}}, - {-1,{0}}, -#line 2054 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str566), {226, 132, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 988 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str571), {226, 167, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 297 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str575), {194, 169, 0}}, - {-1,{0}}, -#line 1928 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str577), {226, 140, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2014 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str582), {226, 138, 187, 0}}, - {-1,{0}}, -#line 1391 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str584), {226, 136, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1731 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str589), {226, 150, 161, 0}}, - {-1,{0}}, -#line 1087 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str591), {226, 137, 142, 204, 184, 0}}, -#line 107 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str592), {226, 132, 172, 0}}, -#line 2055 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str593), {226, 137, 128, 0}}, -#line 1517 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str594), {226, 164, 143, 0}}, -#line 992 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str595), {226, 140, 159, 0}}, -#line 848 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str596), {226, 164, 142, 0}}, - {-1,{0}}, {-1,{0}}, -#line 142 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str599), {226, 140, 144, 0}}, - {-1,{0}}, -#line 1661 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str601), {59, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1968 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str606), {226, 140, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1217 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str612), {226, 138, 130, 226, 131, 146, 0}}, - {-1,{0}}, -#line 1605 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str614), {240, 157, 149, 163, 0}}, -#line 1474 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str615), {226, 132, 154, 0}}, -#line 979 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str616), {240, 157, 149, 157, 0}}, - {-1,{0}}, -#line 1712 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str618), {240, 157, 149, 164, 0}}, -#line 1967 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str619), {226, 140, 157, 0}}, -#line 1868 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str620), {240, 157, 149, 139, 0}}, -#line 2125 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str621), {226, 132, 164, 0}}, -#line 504 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str622), {240, 157, 149, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1603 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str626), {226, 166, 134, 0}}, -#line 1944 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str627), {240, 157, 149, 166, 0}}, -#line 977 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str628), {226, 166, 133, 0}}, -#line 1869 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str629), {240, 157, 149, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2074 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str635), {240, 157, 149, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1166 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str639), {240, 157, 149, 159, 0}}, - {-1,{0}}, -#line 145 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str641), {240, 157, 149, 147, 0}}, -#line 511 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str642), {207, 181, 0}}, -#line 561 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str643), {198, 146, 0}}, -#line 734 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str644), {196, 171, 0}}, - {-1,{0}}, {-1,{0}}, -#line 791 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str647), {240, 157, 149, 129, 0}}, - {-1,{0}}, -#line 1134 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str649), {226, 171, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2052 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str653), {240, 157, 149, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1720 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str658), {226, 136, 154, 0}}, -#line 1262 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str659), {226, 138, 132, 0}}, - {-1,{0}}, -#line 1080 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str661), {226, 137, 139, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1223 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str664), {226, 138, 131, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 196 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str667), {194, 166, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1708 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str670), {47, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 460 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str675), {226, 169, 174, 0}}, - {-1,{0}}, -#line 1429 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str677), {240, 157, 149, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 369 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str680), {226, 165, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2031 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str685), {240, 157, 149, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1273 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str690), {226, 138, 131, 226, 131, 146, 0}}, -#line 1270 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str691), {226, 138, 133, 0}}, -#line 2002 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str692), {226, 171, 168, 0}}, - {-1,{0}}, -#line 1265 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str694), {226, 138, 130, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1850 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str700), {226, 137, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1136 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str704), {226, 139, 188, 0}}, -#line 1459 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str705), {226, 140, 147, 0}}, -#line 1709 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str706), {226, 167, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 961 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str710), {226, 139, 166, 0}}, - {-1,{0}}, -#line 1710 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str712), {226, 140, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1730 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str717), {226, 150, 161, 0}}, - {-1,{0}}, -#line 2032 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str719), {240, 157, 149, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1925 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str723), {226, 134, 191, 0}}, - {-1,{0}}, -#line 1930 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str725), {226, 140, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 514 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str729), {226, 137, 130, 0}}, -#line 522 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str730), {226, 137, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 485 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str733), {226, 132, 147, 0}}, -#line 1699 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str734), {226, 168, 179, 0}}, -#line 1066 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str735), {226, 136, 147, 0}}, - {-1,{0}}, {-1,{0}}, -#line 813 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str738), {240, 157, 149, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1695 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str741), {226, 165, 178, 0}}, - {-1,{0}}, -#line 558 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str743), {226, 153, 173, 0}}, - {-1,{0}}, -#line 1064 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str745), {240, 157, 149, 132, 0}}, -#line 1711 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str746), {240, 157, 149, 138, 0}}, -#line 1061 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str747), {226, 128, 166, 0}}, -#line 1596 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str748), {226, 128, 143, 0}}, -#line 767 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str749), {226, 168, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 990 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str756), {226, 166, 147, 0}}, - {-1,{0}}, -#line 563 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str758), {240, 157, 149, 151, 0}}, -#line 1943 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str759), {240, 157, 149, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1995 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str763), {226, 138, 138, 239, 184, 128, 0}}, -#line 1996 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str764), {226, 171, 139, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1969 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str767), {226, 140, 142, 0}}, -#line 927 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str768), {226, 170, 161, 0}}, - {-1,{0}}, -#line 1538 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str770), {226, 132, 156, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1201 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str773), {226, 170, 161, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 395 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str777), {240, 157, 148, 187, 0}}, - {-1,{0}}, -#line 567 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str779), {226, 171, 153, 0}}, - {-1,{0}}, -#line 1260 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str781), {226, 139, 162, 0}}, - {-1,{0}}, -#line 1271 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str783), {226, 138, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1263 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str787), {226, 138, 136, 0}}, -#line 1475 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str788), {240, 157, 149, 162, 0}}, -#line 1595 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str789), {226, 135, 140, 0}}, - {-1,{0}}, {-1,{0}}, -#line 995 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str792), {226, 128, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1156 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str796), {226, 137, 180, 0}}, - {-1,{0}}, -#line 1430 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str798), {194, 163, 0}}, -#line 1997 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str799), {226, 138, 139, 239, 184, 128, 0}}, -#line 1998 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str800), {226, 171, 140, 239, 184, 128, 0}}, - {-1,{0}}, -#line 141 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str802), {226, 137, 161, 226, 131, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 978 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str813), {240, 157, 149, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1261 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str817), {226, 139, 163, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1506 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str820), {226, 134, 172, 0}}, -#line 2045 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str821), {226, 169, 159, 0}}, -#line 838 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str822), {226, 134, 171, 0}}, - {-1,{0}}, -#line 2100 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str824), {240, 157, 149, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1209 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str829), {226, 136, 140, 0}}, - {-1,{0}}, {-1,{0}}, -#line 293 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str832), {226, 132, 130, 0}}, -#line 993 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str833), {226, 135, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1390 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str848), {226, 171, 189, 0}}, -#line 1934 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str849), {194, 168, 0}}, -#line 1038 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str850), {226, 150, 174, 0}}, -#line 1274 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str851), {226, 138, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1266 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str855), {226, 138, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1738 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str861), {226, 150, 170, 0}}, -#line 2020 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str862), {226, 128, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1736 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str874), {226, 138, 146, 0}}, - {-1,{0}}, -#line 1464 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str876), {226, 137, 190, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1734 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str879), {226, 138, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1735 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str882), {226, 138, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1733 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str887), {226, 138, 143, 0}}, -#line 1289 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str888), {226, 137, 141, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 764 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str892), {240, 157, 149, 154, 0}}, - {-1,{0}}, -#line 1425 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str894), {194, 177, 0}}, - {-1,{0}}, -#line 2019 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str896), {124, 0}}, - {-1,{0}}, -#line 1844 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str898), {207, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 986 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str901), {226, 151, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1032 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str905), {226, 134, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 922 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str920), {226, 170, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1616 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str934), {240, 157, 147, 135, 0}}, -#line 1477 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str935), {240, 157, 146, 172, 0}}, -#line 999 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str936), {240, 157, 147, 129, 0}}, - {-1,{0}}, -#line 1742 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str938), {240, 157, 147, 136, 0}}, - {-1,{0}}, -#line 1890 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str940), {240, 157, 146, 175, 0}}, -#line 2127 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str941), {240, 157, 146, 181, 0}}, -#line 527 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str942), {226, 132, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1974 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str947), {240, 157, 147, 138, 0}}, - {-1,{0}}, -#line 1891 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str949), {240, 157, 147, 137, 0}}, - {-1,{0}}, -#line 740 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str951), {226, 138, 183, 0}}, -#line 296 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str952), {226, 136, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2080 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str955), {240, 157, 146, 179, 0}}, -#line 2067 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str956), {206, 158, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1252 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str959), {240, 157, 147, 131, 0}}, -#line 1135 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str960), {226, 136, 139, 0}}, -#line 198 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str961), {240, 157, 146, 183, 0}}, -#line 1165 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str962), {226, 132, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 793 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str967), {240, 157, 146, 165, 0}}, -#line 1444 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str968), {226, 170, 175, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1302 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str971), {226, 164, 131, 0}}, -#line 87 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str972), {226, 128, 181, 0}}, -#line 2057 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str973), {240, 157, 146, 178, 0}}, - {-1,{0}}, -#line 1988 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str975), {207, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1258 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str984), {226, 136, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 392 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str991), {226, 140, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1467 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str997), {240, 157, 147, 133, 0}}, -#line 1408 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str998), {207, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2035 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1005), {240, 157, 146, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1112 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1011), {226, 137, 130, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1693 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1021), {226, 137, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1275 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1028), {226, 171, 134, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1267 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1032), {226, 171, 133, 204, 184, 0}}, -#line 440 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1033), {226, 140, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1520 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1038), {125, 0}}, -#line 2036 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1039), {240, 157, 147, 139, 0}}, -#line 850 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1040), {123, 0}}, -#line 396 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1041), {240, 157, 149, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 585 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1049), {226, 129, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 930 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1055), {226, 137, 178, 0}}, - {-1,{0}}, {-1,{0}}, -#line 815 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1058), {240, 157, 146, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1417 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1064), {226, 168, 162, 0}}, -#line 1067 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1065), {226, 132, 179, 0}}, -#line 1741 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1066), {240, 157, 146, 174, 0}}, -#line 1523 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1067), {226, 166, 142, 0}}, - {-1,{0}}, -#line 853 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1069), {226, 166, 143, 0}}, -#line 1518 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1070), {226, 164, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1717 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1073), {226, 138, 147, 239, 184, 128, 0}}, -#line 1499 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1074), {226, 135, 146, 0}}, -#line 143 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1075), {226, 171, 173, 0}}, -#line 833 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1076), {226, 135, 144, 0}}, - {-1,{0}}, -#line 588 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1078), {240, 157, 146, 187, 0}}, -#line 1973 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1079), {240, 157, 146, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1905 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1087), {226, 135, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1604 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1090), {226, 132, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2053 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1094), {240, 157, 149, 168, 0}}, - {-1,{0}}, {-1,{0}}, -#line 442 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1097), {240, 157, 146, 159, 0}}, -#line 1351 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1098), {226, 166, 183, 0}}, -#line 1662 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1099), {226, 164, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 362 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1103), {226, 136, 135, 0}}, -#line 1485 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1104), {226, 135, 155, 0}}, -#line 1558 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1105), {207, 129, 0}}, -#line 817 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1106), {226, 135, 154, 0}}, -#line 1439 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1107), {226, 137, 188, 0}}, -#line 1478 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1108), {240, 157, 147, 134, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1028 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1111), {194, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1185 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1115), {226, 136, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 523 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1120), {226, 169, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1716 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1125), {226, 138, 147, 0}}, - {-1,{0}}, -#line 1259 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1127), {226, 136, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1340 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1131), {226, 167, 128, 0}}, -#line 1514 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1132), {226, 136, 182, 0}}, -#line 998 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1133), {226, 132, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 370 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1137), {226, 135, 131, 0}}, - {-1,{0}}, -#line 393 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1139), {226, 140, 141, 0}}, -#line 408 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1140), {194, 168, 0}}, -#line 404 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1141), {226, 136, 148, 0}}, -#line 1356 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1142), {226, 136, 168, 0}}, - {-1,{0}}, -#line 2102 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1144), {240, 157, 146, 180, 0}}, - {-1,{0}}, {-1,{0}}, -#line 562 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1147), {240, 157, 148, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 304 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1152), {240, 157, 146, 158, 0}}, -#line 1336 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1153), {226, 134, 186, 0}}, -#line 1243 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1154), {226, 134, 157, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1026 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1159), {226, 137, 168, 239, 184, 128, 0}}, -#line 515 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1160), {226, 170, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1853 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1164), {195, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 516 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1169), {226, 170, 149, 0}}, - {-1,{0}}, {-1,{0}}, -#line 744 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1172), {226, 132, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1992 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1179), {226, 135, 149, 0}}, -#line 1611 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1180), {226, 168, 146, 0}}, -#line 441 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1181), {226, 140, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1388 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1187), {226, 136, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1358 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1195), {226, 134, 187, 0}}, -#line 1744 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1196), {226, 140, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 412 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1200), {226, 171, 164, 0}}, -#line 526 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1201), {226, 137, 147, 0}}, -#line 381 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1202), {226, 153, 166, 0}}, -#line 1743 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1203), {226, 136, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1368 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1208), {226, 147, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 770 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1212), {240, 157, 146, 190, 0}}, -#line 725 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1213), {226, 133, 136, 0}}, -#line 1543 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1214), {226, 150, 173, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1249 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1217), {226, 139, 161, 0}}, -#line 1660 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1218), {194, 167, 0}}, - {-1,{0}}, -#line 1060 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1220), {226, 171, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1365 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1224), {226, 169, 150, 0}}, - {-1,{0}}, -#line 407 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1226), {226, 136, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 518 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1230), {61, 0}}, - {-1,{0}}, -#line 679 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1232), {94, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1745 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1236), {226, 139, 134, 0}}, -#line 1069 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1237), {226, 136, 190, 0}}, - {-1,{0}}, -#line 382 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1239), {194, 168, 0}}, -#line 1044 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1240), {226, 136, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 565 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1252), {226, 136, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1189 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1255), {226, 139, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1065 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1263), {240, 157, 149, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1138 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1270), {226, 136, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2004 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1280), {226, 171, 169, 0}}, - {-1,{0}}, -#line 1251 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1282), {240, 157, 146, 169, 0}}, - {-1,{0}}, -#line 1396 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1284), {46, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 102 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1292), {226, 136, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 112 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1298), {226, 137, 172, 0}}, -#line 749 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1299), {226, 136, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 104 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1307), {226, 136, 181, 0}}, -#line 1410 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1308), {207, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1552 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1326), {240, 157, 148, 175, 0}}, -#line 1471 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1327), {240, 157, 148, 148, 0}}, -#line 934 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1328), {240, 157, 148, 169, 0}}, - {-1,{0}}, -#line 1667 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1330), {240, 157, 148, 176, 0}}, -#line 1148 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1331), {226, 134, 174, 0}}, -#line 1836 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1332), {240, 157, 148, 151, 0}}, -#line 2120 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1333), {226, 132, 168, 0}}, -#line 476 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1334), {240, 157, 148, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1685 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1338), {226, 136, 188, 0}}, -#line 1921 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1339), {240, 157, 148, 178, 0}}, -#line 1606 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1340), {226, 168, 174, 0}}, -#line 1837 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1341), {240, 157, 148, 177, 0}}, -#line 980 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1342), {226, 168, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2063 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1347), {240, 157, 148, 155, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1539 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1350), {226, 132, 156, 0}}, -#line 1119 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1351), {240, 157, 148, 171, 0}}, - {-1,{0}}, -#line 114 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1353), {240, 157, 148, 159, 0}}, - {-1,{0}}, -#line 1184 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1355), {226, 137, 143, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 788 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1359), {240, 157, 148, 141, 0}}, - {-1,{0}}, -#line 443 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1361), {240, 157, 146, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2050 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1365), {240, 157, 148, 154, 0}}, - {-1,{0}}, -#line 129 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1367), {226, 167, 171, 0}}, - {-1,{0}}, -#line 2126 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1369), {240, 157, 149, 171, 0}}, -#line 1542 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1370), {226, 132, 157, 0}}, - {-1,{0}}, -#line 1170 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1372), {226, 137, 173, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1694 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1375), {226, 168, 164, 0}}, - {-1,{0}}, -#line 564 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1377), {226, 136, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1401 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1389), {240, 157, 148, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1342 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1395), {197, 141, 0}}, - {-1,{0}}, -#line 2026 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1397), {240, 157, 148, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 488 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1409), {196, 146, 0}}, -#line 1615 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1410), {226, 132, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2058 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1414), {240, 157, 147, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1679 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1423), {226, 134, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1664 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1429), {226, 136, 150, 0}}, - {-1,{0}}, -#line 2027 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1431), {240, 157, 148, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 806 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1450), {240, 157, 148, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1354 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1455), {226, 166, 185, 0}}, - {-1,{0}}, -#line 1047 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1457), {240, 157, 148, 144, 0}}, -#line 1666 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1458), {240, 157, 148, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1160 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1461), {226, 139, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 587 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1467), {226, 132, 177, 0}}, - {-1,{0}}, {-1,{0}}, -#line 553 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1470), {240, 157, 148, 163, 0}}, -#line 1920 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1471), {240, 157, 148, 152, 0}}, - {-1,{0}}, -#line 1676 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1473), {226, 136, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1304 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1488), {226, 136, 188, 226, 131, 146, 0}}, -#line 367 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1489), {240, 157, 148, 135, 0}}, -#line 920 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1490), {226, 139, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1458 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1493), {226, 140, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1472 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1500), {240, 157, 148, 174, 0}}, -#line 345 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1501), {226, 135, 147, 0}}, - {-1,{0}}, -#line 1247 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1503), {226, 139, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1678 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1507), {226, 134, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1839 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1515), {226, 136, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 355 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1519), {226, 133, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1840 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1524), {226, 136, 180, 0}}, -#line 933 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1525), {240, 157, 148, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1824 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1532), {226, 140, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 483 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1535), {226, 136, 136, 0}}, -#line 2096 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1536), {240, 157, 148, 156, 0}}, -#line 271 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1537), {226, 136, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1337 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1542), {226, 166, 190, 0}}, - {-1,{0}}, -#line 244 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1544), {226, 132, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 548 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1559), {226, 153, 128, 0}}, -#line 1269 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1560), {226, 170, 176, 204, 184, 0}}, -#line 1312 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1561), {226, 138, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1395 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1568), {37, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1362 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1578), {194, 170, 0}}, - {-1,{0}}, -#line 1359 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1580), {226, 169, 157, 0}}, -#line 1557 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1581), {206, 161, 0}}, - {-1,{0}}, -#line 1068 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1583), {240, 157, 147, 130, 0}}, - {-1,{0}}, -#line 1303 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1585), {226, 138, 181, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 957 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1589), {226, 137, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1133 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1597), {226, 135, 142, 0}}, -#line 1357 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1598), {226, 169, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 387 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1602), {195, 183, 0}}, - {-1,{0}}, -#line 722 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1604), {240, 157, 148, 166, 0}}, -#line 484 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1605), {226, 143, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 202 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1615), {92, 0}}, -#line 1298 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1616), {226, 164, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 733 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1626), {196, 170, 0}}, - {-1,{0}}, -#line 89 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1628), {226, 139, 141, 0}}, -#line 1898 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1629), {226, 137, 172, 0}}, -#line 1338 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1630), {226, 166, 187, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1508 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1639), {226, 165, 180, 0}}, -#line 409 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1640), {226, 135, 147, 0}}, -#line 840 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1641), {226, 165, 179, 0}}, -#line 491 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1642), {226, 136, 133, 0}}, -#line 1350 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1643), {240, 157, 149, 160, 0}}, - {-1,{0}}, -#line 540 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1645), {226, 136, 131, 0}}, - {-1,{0}}, {-1,{0}}, -#line 949 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1648), {226, 165, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 539 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1656), {33, 0}}, -#line 503 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1657), {240, 157, 148, 188, 0}}, -#line 1142 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1658), {226, 135, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1848 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1663), {226, 128, 137, 0}}, -#line 1218 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1664), {226, 138, 136, 0}}, -#line 1403 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1665), {207, 134, 0}}, -#line 410 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1666), {226, 135, 144, 0}}, - {-1,{0}}, -#line 1867 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1668), {226, 171, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 386 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1672), {195, 183, 0}}, - {-1,{0}}, -#line 1118 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1674), {240, 157, 148, 145, 0}}, -#line 1144 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1675), {226, 137, 166, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2128 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1689), {240, 157, 147, 143, 0}}, -#line 994 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1690), {226, 165, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 950 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1697), {226, 151, 186, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1241 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1700), {226, 135, 143, 0}}, -#line 1224 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1701), {226, 138, 137, 0}}, - {-1,{0}}, -#line 1819 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1703), {226, 135, 153, 0}}, -#line 1847 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1704), {226, 129, 159, 226, 128, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1931 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1708), {226, 151, 184, 0}}, -#line 1204 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1709), {226, 139, 190, 0}}, - {-1,{0}}, -#line 1449 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1711), {226, 128, 178, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1451 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1714), {226, 132, 153, 0}}, - {-1,{0}}, -#line 1334 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1716), {206, 169, 0}}, - {-1,{0}}, {-1,{0}}, -#line 265 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1719), {226, 138, 151, 0}}, -#line 1159 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1720), {226, 139, 170, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1691 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1723), {226, 170, 157, 0}}, -#line 1307 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1724), {226, 135, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1989 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1727), {207, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1367 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1730), {226, 169, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1663 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1735), {226, 136, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 996 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1739), {226, 138, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1397 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1743), {226, 128, 176, 0}}, -#line 1051 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1744), {226, 136, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1972 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1750), {226, 151, 185, 0}}, - {-1,{0}}, {-1,{0}}, -#line 368 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1753), {240, 157, 148, 161, 0}}, -#line 1049 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1754), {226, 132, 167, 0}}, -#line 1436 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1755), {226, 170, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2039 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1759), {226, 138, 139, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1246 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1762), {226, 139, 171, 0}}, -#line 2037 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1763), {226, 138, 138, 239, 184, 128, 0}}, - {-1,{0}}, -#line 472 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1765), {226, 137, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 918 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1778), {226, 170, 147, 0}}, - {-1,{0}}, {-1,{0}}, -#line 86 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1781), {207, 182, 0}}, - {-1,{0}}, -#line 1512 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1783), {226, 164, 154, 0}}, - {-1,{0}}, -#line 843 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1785), {226, 164, 153, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1953 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1788), {226, 165, 174, 0}}, - {-1,{0}}, {-1,{0}}, -#line 510 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1791), {206, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1963 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1796), {207, 133, 0}}, - {-1,{0}}, -#line 1052 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1798), {42, 0}}, -#line 696 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1799), {226, 132, 141, 0}}, -#line 2028 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1800), {226, 138, 178, 0}}, - {-1,{0}}, -#line 1551 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1802), {226, 132, 156, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2047 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1805), {226, 139, 128, 0}}, -#line 2051 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1806), {240, 157, 148, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 93 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1812), {226, 140, 133, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1030 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1815), {226, 156, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 250 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1820), {206, 167, 0}}, -#line 493 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1821), {226, 136, 133, 0}}, -#line 1202 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1822), {226, 136, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 925 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1827), {226, 137, 182, 0}}, - {-1,{0}}, -#line 377 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1829), {226, 139, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2034 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1842), {226, 138, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 263 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1849), {226, 138, 150, 0}}, - {-1,{0}}, -#line 1341 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1851), {197, 140, 0}}, -#line 1658 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1852), {226, 135, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 552 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1859), {240, 157, 148, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1446 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1865), {226, 170, 181, 0}}, - {-1,{0}}, -#line 378 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1867), {226, 139, 132, 0}}, -#line 1363 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1868), {194, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1103 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1873), {226, 135, 151, 0}}, -#line 763 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1874), {240, 157, 149, 128, 0}}, -#line 260 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1875), {226, 138, 153, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1452 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1878), {226, 170, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 403 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1884), {226, 136, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1253 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1903), {226, 136, 164, 0}}, - {-1,{0}}, -#line 147 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1905), {226, 138, 165, 0}}, - {-1,{0}}, -#line 1427 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1907), {226, 168, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1737 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1917), {226, 138, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 792 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1925), {240, 157, 149, 155, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1962 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1928), {206, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 279 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1936), {226, 169, 180, 0}}, - {-1,{0}}, -#line 1300 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1938), {60, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1114 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1941), {226, 137, 170, 0}}, -#line 276 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1942), {226, 136, 183, 0}}, - {-1,{0}}, {-1,{0}}, -#line 204 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1945), {226, 159, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 411 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1949), {226, 135, 148, 0}}, -#line 1423 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1950), {226, 168, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 735 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1959), {226, 132, 145, 0}}, -#line 480 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1960), {226, 170, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1369 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1963), {226, 132, 180, 0}}, -#line 1821 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1964), {226, 164, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2116 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1969), {226, 132, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1031 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1973), {226, 156, 160, 0}}, - {-1,{0}}, -#line 1048 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1975), {240, 157, 148, 170, 0}}, -#line 1504 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1976), {226, 164, 158, 0}}, -#line 528 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1977), {226, 132, 176, 0}}, -#line 836 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1978), {226, 164, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1062 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1985), {226, 136, 147, 0}}, -#line 1129 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1986), {226, 137, 175, 0}}, -#line 1130 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1987), {226, 137, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 626 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str1996), {226, 137, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 380 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2003), {226, 153, 166, 0}}, -#line 653 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2004), {62, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 928 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2014), {226, 137, 178, 0}}, -#line 446 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2015), {226, 167, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1954 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2023), {226, 134, 191, 0}}, -#line 1732 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2024), {226, 138, 147, 0}}, -#line 1003 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2025), {226, 170, 141, 0}}, - {-1,{0}}, -#line 1157 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2027), {226, 137, 170, 226, 131, 146, 0}}, - {-1,{0}}, -#line 1194 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2029), {226, 137, 174, 0}}, - {-1,{0}}, -#line 630 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2031), {226, 170, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1636 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2035), {226, 170, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1036 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2038), {226, 134, 164, 0}}, -#line 1197 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2039), {226, 137, 170, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1550 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2043), {226, 140, 139, 0}}, - {-1,{0}}, -#line 932 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2045), {226, 140, 138, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1256 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2048), {226, 137, 132, 0}}, - {-1,{0}}, -#line 201 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2050), {226, 139, 141, 0}}, -#line 1195 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2051), {226, 137, 176, 0}}, -#line 1199 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2052), {226, 137, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1089 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2056), {226, 169, 131, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1196 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2059), {226, 137, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1448 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2070), {226, 137, 190, 0}}, - {-1,{0}}, -#line 976 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2072), {226, 134, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1432 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2076), {226, 170, 187, 0}}, -#line 1530 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2077), {125, 0}}, -#line 1037 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2078), {226, 134, 165, 0}}, -#line 860 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2079), {123, 0}}, - {-1,{0}}, -#line 2121 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2081), {240, 157, 148, 183, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1946 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2084), {226, 134, 145, 0}}, - {-1,{0}}, -#line 633 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2086), {226, 170, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1640 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2090), {226, 170, 176, 0}}, -#line 732 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2091), {226, 132, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1526 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2096), {197, 153, 0}}, - {-1,{0}}, -#line 856 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2098), {196, 190, 0}}, -#line 1349 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2099), {240, 157, 149, 134, 0}}, -#line 1638 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2100), {197, 161, 0}}, -#line 88 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2101), {226, 136, 189, 0}}, -#line 1828 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2102), {197, 164, 0}}, -#line 2110 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2103), {197, 189, 0}}, -#line 462 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2104), {196, 155, 0}}, - {-1,{0}}, -#line 108 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2106), {226, 132, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1121 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2110), {226, 137, 177, 0}}, -#line 1829 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2111), {197, 165, 0}}, - {-1,{0}}, -#line 566 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2113), {226, 139, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 700 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2119), {226, 132, 139, 0}}, - {-1,{0}}, -#line 1091 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2121), {197, 136, 0}}, -#line 487 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2122), {226, 170, 151, 0}}, - {-1,{0}}, -#line 1827 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2124), {226, 142, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1886 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2128), {226, 168, 185, 0}}, - {-1,{0}}, {-1,{0}}, -#line 379 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2131), {226, 139, 132, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1096 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2134), {226, 169, 130, 0}}, - {-1,{0}}, -#line 96 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2136), {226, 142, 181, 0}}, - {-1,{0}}, -#line 586 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2138), {226, 140, 162, 0}}, -#line 128 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2139), {226, 164, 141, 0}}, - {-1,{0}}, -#line 1713 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2141), {226, 153, 160, 0}}, - {-1,{0}}, -#line 1469 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2143), {207, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 144 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2150), {240, 157, 148, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 394 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2156), {36, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 385 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2164), {226, 139, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1714 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2170), {226, 153, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1225 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2176), {226, 137, 129, 0}}, -#line 406 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2177), {226, 140, 134, 0}}, - {-1,{0}}, -#line 594 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2179), {226, 170, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 97 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2186), {226, 142, 182, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1820 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2189), {226, 134, 153, 0}}, -#line 106 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2190), {207, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 769 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2194), {226, 132, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1227 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2198), {226, 137, 135, 0}}, -#line 513 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2199), {226, 137, 149, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1863 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2202), {226, 136, 173, 0}}, - {-1,{0}}, {-1,{0}}, -#line 756 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2205), {226, 168, 188, 0}}, - {-1,{0}}, -#line 1272 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2207), {226, 171, 134, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1308 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2210), {226, 134, 150, 0}}, -#line 1264 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2211), {226, 171, 133, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1125 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2214), {226, 169, 190, 204, 184, 0}}, - {-1,{0}}, -#line 1947 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2216), {226, 135, 145, 0}}, -#line 604 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2217), {226, 137, 165, 0}}, -#line 1352 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2218), {226, 128, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1698 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2223), {226, 136, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1637 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2228), {197, 160, 0}}, - {-1,{0}}, -#line 1301 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2230), {226, 138, 180, 226, 131, 146, 0}}, -#line 611 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2231), {226, 169, 190, 0}}, -#line 135 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2232), {226, 144, 163, 0}}, -#line 1483 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2233), {34, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 139 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2238), {226, 150, 136, 0}}, -#line 1874 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2239), {226, 132, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 794 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2245), {240, 157, 146, 191, 0}}, -#line 2046 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2246), {226, 136, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 29 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2254), {196, 128, 0}}, - {-1,{0}}, -#line 517 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2256), {226, 169, 181, 0}}, - {-1,{0}}, {-1,{0}}, -#line 351 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2259), {196, 142, 0}}, - {-1,{0}}, {-1,{0}}, -#line 399 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2262), {226, 131, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 634 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2270), {226, 170, 136, 0}}, -#line 1990 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2271), {226, 136, 157, 0}}, - {-1,{0}}, -#line 635 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2273), {226, 137, 169, 0}}, -#line 1462 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2274), {226, 136, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 774 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2279), {226, 139, 180, 0}}, - {-1,{0}}, -#line 469 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2281), {226, 169, 183, 0}}, -#line 771 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2282), {226, 136, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1885 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2286), {226, 131, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 568 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2290), {226, 132, 177, 0}}, -#line 1461 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2291), {226, 136, 183, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1122 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2294), {226, 137, 177, 0}}, -#line 855 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2295), {196, 189, 0}}, - {-1,{0}}, -#line 1123 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2297), {226, 137, 167, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 870 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2313), {226, 137, 166, 0}}, -#line 227 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2314), {196, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 199 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2320), {226, 129, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1463 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2326), {226, 136, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 914 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2331), {226, 169, 191, 0}}, -#line 291 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2332), {226, 136, 175, 0}}, - {-1,{0}}, -#line 35 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2334), {226, 169, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1659 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2338), {226, 134, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1366 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2343), {226, 169, 151, 0}}, -#line 675 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2344), {226, 134, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 845 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2350), {226, 170, 173, 0}}, - {-1,{0}}, -#line 242 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2352), {194, 183, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1328 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2355), {240, 157, 148, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1104 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2359), {226, 134, 151, 0}}, - {-1,{0}}, -#line 1473 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2361), {226, 168, 140, 0}}, - {-1,{0}}, {-1,{0}}, -#line 846 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2364), {226, 170, 173, 239, 184, 128, 0}}, -#line 801 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2365), {207, 176, 0}}, - {-1,{0}}, {-1,{0}}, -#line 698 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2368), {226, 128, 149, 0}}, -#line 475 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2369), {240, 157, 148, 136, 0}}, -#line 692 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2370), {226, 135, 191, 0}}, -#line 1237 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2371), {226, 170, 175, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 747 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2377), {196, 177, 0}}, - {-1,{0}}, -#line 1915 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2379), {226, 135, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 608 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2386), {226, 137, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1257 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2391), {226, 137, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 609 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2404), {226, 137, 167, 0}}, - {-1,{0}}, {-1,{0}}, -#line 474 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2407), {226, 137, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1610 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2410), {226, 166, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1370 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2419), {240, 157, 146, 170, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1418 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2422), {226, 136, 148, 0}}, - {-1,{0}}, {-1,{0}}, -#line 821 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2425), {226, 132, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1846 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2429), {226, 136, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1447 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2440), {226, 139, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1090 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2444), {197, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1079 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2449), {226, 169, 176, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 727 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2457), {226, 136, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 197 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2470), {226, 132, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1035 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2483), {226, 134, 167, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1993 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2486), {207, 177, 0}}, - {-1,{0}}, -#line 775 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2488), {226, 139, 179, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1296 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2491), {226, 164, 132, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1192 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2494), {226, 167, 143, 204, 184, 0}}, - {-1,{0}}, -#line 520 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2496), {226, 137, 159, 0}}, - {-1,{0}}, -#line 1193 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2498), {226, 139, 172, 0}}, -#line 1191 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2499), {226, 139, 170, 0}}, - {-1,{0}}, {-1,{0}}, -#line 60 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2502), {240, 157, 148, 184, 0}}, -#line 680 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2503), {226, 132, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1984 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2507), {226, 166, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 687 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2511), {226, 132, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1494 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2517), {226, 166, 165, 0}}, -#line 1704 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2518), {226, 170, 172, 0}}, -#line 1002 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2519), {226, 137, 178, 0}}, - {-1,{0}}, -#line 1234 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2521), {226, 168, 148, 0}}, - {-1,{0}}, -#line 352 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2523), {196, 143, 0}}, - {-1,{0}}, -#line 530 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2525), {226, 137, 130, 0}}, - {-1,{0}}, -#line 1939 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2527), {226, 139, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1705 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2532), {226, 170, 172, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 814 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2536), {240, 157, 149, 156, 0}}, -#line 638 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2537), {240, 157, 149, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1255 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2542), {226, 137, 129, 0}}, - {-1,{0}}, -#line 200 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2544), {226, 136, 189, 0}}, - {-1,{0}}, -#line 1697 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2546), {226, 136, 152, 0}}, - {-1,{0}}, -#line 1171 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2548), {226, 136, 166, 0}}, -#line 1200 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2549), {226, 170, 162, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 519 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2565), {226, 137, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1186 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2568), {226, 139, 181, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1525 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2572), {197, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1428 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2577), {226, 132, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 637 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2583), {240, 157, 148, 190, 0}}, - {-1,{0}}, {-1,{0}}, -#line 721 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2586), {226, 132, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2048 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2589), {226, 137, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1455 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2595), {226, 136, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1373 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2617), {226, 138, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 418 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2624), {226, 135, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 289 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2627), {226, 137, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 636 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2631), {226, 139, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1650 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2635), {226, 137, 191, 0}}, - {-1,{0}}, -#line 789 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2637), {240, 157, 148, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1961 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2645), {207, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1155 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2650), {226, 139, 152, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 419 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2653), {226, 135, 149, 0}}, - {-1,{0}}, -#line 1127 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2655), {226, 137, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 683 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2664), {226, 153, 165, 0}}, - {-1,{0}}, -#line 921 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2666), {226, 139, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1111 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2670), {226, 164, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 541 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2676), {226, 136, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1702 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2687), {226, 140, 163, 0}}, - {-1,{0}}, -#line 1983 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2689), {226, 166, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 684 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2693), {226, 153, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 699 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2700), {226, 148, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 644 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2703), {226, 137, 183, 0}}, - {-1,{0}}, -#line 1614 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2705), {226, 128, 186, 0}}, - {-1,{0}}, -#line 997 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2707), {226, 128, 185, 0}}, - {-1,{0}}, -#line 1540 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2709), {226, 132, 155, 0}}, -#line 348 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2710), {226, 171, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1686 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2714), {226, 169, 170, 0}}, -#line 640 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2715), {226, 137, 165, 0}}, -#line 646 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2716), {226, 137, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 641 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2721), {226, 139, 155, 0}}, - {-1,{0}}, -#line 643 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2723), {226, 170, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1529 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2737), {226, 140, 137, 0}}, - {-1,{0}}, -#line 859 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2739), {226, 140, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 926 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2743), {226, 137, 182, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1339 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2746), {226, 128, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1851 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2753), {226, 136, 188, 0}}, - {-1,{0}}, -#line 758 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2755), {226, 129, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1486 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2762), {226, 136, 189, 204, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 768 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2766), {194, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 737 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2774), {226, 132, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1964 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2779), {226, 138, 165, 0}}, - {-1,{0}}, -#line 1053 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2781), {226, 171, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1326 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2790), {226, 166, 191, 0}}, - {-1,{0}}, {-1,{0}}, -#line 358 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2793), {226, 135, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1493 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2800), {226, 166, 146, 0}}, - {-1,{0}}, -#line 826 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2802), {226, 166, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 521 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2808), {226, 135, 140, 0}}, -#line 1389 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2809), {226, 171, 179, 0}}, -#line 2011 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2810), {226, 171, 166, 0}}, -#line 1327 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2811), {240, 157, 148, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 103 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2816), {226, 136, 181, 0}}, - {-1,{0}}, -#line 1513 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2818), {226, 164, 156, 0}}, - {-1,{0}}, -#line 844 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2820), {226, 164, 155, 0}}, -#line 1348 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2821), {226, 138, 150, 0}}, -#line 73 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2822), {240, 157, 146, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 509 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2826), {206, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1675 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2832), {226, 134, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 776 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2845), {226, 136, 136, 0}}, - {-1,{0}}, -#line 1050 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2847), {194, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2111 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2851), {197, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 816 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2856), {240, 157, 147, 128, 0}}, -#line 647 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2857), {226, 132, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 113 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2862), {240, 157, 148, 133, 0}}, -#line 606 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2863), {226, 139, 155, 0}}, -#line 686 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2864), {226, 138, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1884 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2871), {226, 168, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 479 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2877), {195, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1653 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2881), {226, 139, 133, 0}}, -#line 1923 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2882), {195, 185, 0}}, - {-1,{0}}, -#line 2114 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2884), {197, 187, 0}}, -#line 471 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2885), {196, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1228 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2890), {226, 137, 137, 0}}, - {-1,{0}}, -#line 1834 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2892), {226, 131, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1466 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2897), {240, 157, 146, 171, 0}}, -#line 1407 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2898), {206, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 648 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2903), {240, 157, 146, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1424 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2910), {226, 168, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1172 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2914), {226, 136, 137, 0}}, - {-1,{0}}, -#line 1421 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2916), {194, 177, 0}}, - {-1,{0}}, {-1,{0}}, -#line 697 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2919), {240, 157, 149, 153, 0}}, -#line 593 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2920), {207, 157, 0}}, - {-1,{0}}, -#line 1043 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2922), {226, 136, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 388 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2926), {226, 139, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 400 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2940), {226, 137, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1985 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2956), {207, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1440 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2963), {226, 137, 186, 0}}, - {-1,{0}}, {-1,{0}}, -#line 592 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2966), {207, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 347 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2974), {226, 138, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1169 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2979), {226, 137, 162, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1910 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2982), {197, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1332 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2990), {226, 167, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1608 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str2994), {226, 165, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1442 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3002), {226, 137, 188, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1687 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3005), {226, 137, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1922 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3014), {195, 153, 0}}, - {-1,{0}}, -#line 349 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3016), {226, 164, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1655 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3021), {226, 169, 166, 0}}, - {-1,{0}}, -#line 2015 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3023), {226, 137, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1034 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3027), {226, 134, 166, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1859 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3030), {195, 151, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1495 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3033), {226, 159, 169, 0}}, - {-1,{0}}, -#line 827 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3035), {226, 159, 168, 0}}, - {-1,{0}}, {-1,{0}}, -#line 877 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3038), {226, 134, 162, 0}}, -#line 672 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3039), {226, 132, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1918 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3044), {226, 165, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1137 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3053), {226, 139, 186, 0}}, - {-1,{0}}, -#line 1549 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3055), {226, 165, 189, 0}}, - {-1,{0}}, -#line 931 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3057), {226, 165, 188, 0}}, -#line 677 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3058), {226, 165, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1353 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3066), {226, 128, 152, 0}}, - {-1,{0}}, -#line 1919 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3068), {226, 165, 190, 0}}, -#line 1183 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3069), {226, 137, 142, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 894 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3072), {226, 138, 163, 0}}, - {-1,{0}}, -#line 1618 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3074), {226, 134, 177, 0}}, - {-1,{0}}, -#line 1001 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3076), {226, 134, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 667 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3080), {226, 137, 169, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1860 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3083), {226, 138, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1649 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3092), {226, 168, 147, 0}}, - {-1,{0}}, {-1,{0}}, -#line 236 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3095), {196, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 454 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3103), {226, 166, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1909 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3114), {197, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 903 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3132), {226, 134, 191, 0}}, - {-1,{0}}, {-1,{0}}, -#line 904 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3135), {226, 165, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 461 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3139), {196, 154, 0}}, - {-1,{0}}, {-1,{0}}, -#line 693 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3142), {226, 136, 187, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 724 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3147), {195, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1239 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3155), {226, 170, 175, 204, 184, 0}}, -#line 466 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3156), {226, 137, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 356 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3167), {226, 133, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1688 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3174), {226, 137, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1187 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3179), {226, 139, 185, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 119 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3198), {226, 168, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 21 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3214), {240, 157, 148, 132, 0}}, -#line 873 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3215), {226, 134, 144, 0}}, -#line 1335 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3216), {226, 136, 174, 0}}, - {-1,{0}}, -#line 1823 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3218), {9, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1329 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3227), {203, 155, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1012 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3230), {60, 0}}, -#line 1149 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3231), {226, 135, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1501 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3235), {226, 135, 165, 0}}, - {-1,{0}}, -#line 834 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3237), {226, 135, 164, 0}}, - {-1,{0}}, -#line 701 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3239), {240, 157, 146, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 901 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3246), {226, 165, 145, 0}}, - {-1,{0}}, -#line 807 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3248), {240, 157, 148, 168, 0}}, -#line 619 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3249), {240, 157, 148, 164, 0}}, -#line 1948 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3250), {226, 164, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1250 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3259), {226, 170, 176, 204, 184, 0}}, -#line 1015 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3260), {226, 139, 150, 0}}, -#line 616 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3261), {226, 139, 155, 239, 184, 128, 0}}, -#line 2073 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3262), {226, 168, 128, 0}}, -#line 1747 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3263), {226, 152, 134, 0}}, - {-1,{0}}, {-1,{0}}, -#line 983 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3266), {95, 0}}, - {-1,{0}}, -#line 2065 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3268), {226, 159, 183, 0}}, -#line 463 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3269), {226, 137, 150, 0}}, - {-1,{0}}, -#line 1975 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3271), {226, 139, 176, 0}}, -#line 1083 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3272), {226, 153, 174, 0}}, -#line 1000 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3273), {226, 134, 176, 0}}, -#line 745 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3274), {226, 136, 158, 0}}, - {-1,{0}}, -#line 283 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3276), {226, 136, 129, 0}}, - {-1,{0}}, -#line 1684 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3278), {207, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2077 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3285), {226, 168, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1400 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3289), {240, 157, 148, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 618 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3295), {240, 157, 148, 138, 0}}, - {-1,{0}}, {-1,{0}}, -#line 115 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3298), {226, 139, 130, 0}}, - {-1,{0}}, -#line 1692 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3300), {226, 170, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 726 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3319), {226, 168, 140, 0}}, -#line 95 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3320), {226, 140, 133, 0}}, -#line 94 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3321), {226, 140, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2069 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3329), {226, 159, 181, 0}}, -#line 923 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3330), {226, 139, 154, 0}}, - {-1,{0}}, -#line 301 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3332), {226, 134, 181, 0}}, -#line 772 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3333), {226, 139, 181, 0}}, - {-1,{0}}, -#line 282 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3335), {64, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1054 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3342), {194, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 916 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3349), {226, 170, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1683 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3356), {207, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1502 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3366), {226, 164, 160, 0}}, - {-1,{0}}, -#line 835 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3368), {226, 164, 159, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2078 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3371), {226, 159, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 117 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3376), {226, 139, 131, 0}}, - {-1,{0}}, -#line 274 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3378), {226, 153, 163, 0}}, -#line 676 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3379), {226, 135, 148, 0}}, -#line 1625 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3380), {226, 138, 181, 0}}, - {-1,{0}}, -#line 1021 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3382), {226, 138, 180, 0}}, -#line 741 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3383), {198, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 502 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3388), {196, 153, 0}}, -#line 1630 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3389), {226, 132, 158, 0}}, -#line 1023 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3390), {226, 166, 150, 0}}, -#line 1746 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3391), {226, 139, 134, 0}}, - {-1,{0}}, -#line 1942 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3393), {197, 179, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1855 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3396), {226, 136, 188, 0}}, - {-1,{0}}, -#line 671 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3398), {194, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1854 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3405), {203, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 874 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3412), {226, 135, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 617 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3417), {226, 170, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 214 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3422), {226, 136, 169, 0}}, -#line 1751 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3423), {194, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1010 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3427), {226, 137, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1453 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3439), {226, 170, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1726 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3447), {226, 138, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1727 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3462), {226, 138, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1882 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3467), {226, 151, 172, 0}}, -#line 1360 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3468), {226, 132, 180, 0}}, - {-1,{0}}, {-1,{0}}, -#line 222 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3471), {226, 136, 169, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 302 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3475), {226, 156, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 366 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3482), {226, 165, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2071 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3487), {226, 159, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1725 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3491), {226, 138, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1624 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3503), {226, 150, 185, 0}}, - {-1,{0}}, -#line 1020 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3505), {226, 151, 131, 0}}, -#line 777 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3506), {226, 129, 162, 0}}, -#line 1597 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3507), {226, 142, 177, 0}}, - {-1,{0}}, -#line 953 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3509), {226, 142, 176, 0}}, -#line 632 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3510), {226, 137, 169, 0}}, -#line 936 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3511), {226, 170, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1641 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3514), {226, 170, 180, 0}}, - {-1,{0}}, -#line 1978 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3516), {226, 150, 181, 0}}, - {-1,{0}}, -#line 2016 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3518), {226, 139, 174, 0}}, - {-1,{0}}, -#line 534 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3520), {195, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 952 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3523), {197, 128, 0}}, - {-1,{0}}, -#line 1941 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3525), {197, 178, 0}}, -#line 300 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3526), {226, 136, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1120 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3534), {226, 137, 167, 204, 184, 0}}, -#line 1309 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3535), {226, 164, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 917 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3543), {226, 139, 154, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1416 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3546), {226, 138, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1617 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3550), {226, 134, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 299 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3555), {226, 132, 151, 0}}, - {-1,{0}}, -#line 746 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3557), {226, 167, 157, 0}}, - {-1,{0}}, -#line 739 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3559), {196, 177, 0}}, -#line 531 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3560), {226, 169, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1402 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3565), {206, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 628 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3573), {226, 170, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2030 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3579), {226, 138, 131, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1690 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3582), {226, 170, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 413 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3586), {226, 159, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 414 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3591), {226, 159, 186, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1295 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3594), {62, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1046 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3607), {226, 132, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1450 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3611), {226, 128, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 728 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3615), {226, 167, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1546 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3620), {226, 136, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 492 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3627), {226, 151, 187, 0}}, -#line 1489 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3628), {226, 136, 154, 0}}, - {-1,{0}}, {-1,{0}}, -#line 688 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3631), {240, 157, 148, 165, 0}}, -#line 2115 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3632), {197, 188, 0}}, -#line 1029 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3633), {226, 153, 130, 0}}, - {-1,{0}}, -#line 1503 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3635), {226, 164, 179, 0}}, -#line 1437 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3636), {226, 137, 186, 0}}, -#line 1646 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3637), {226, 170, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 383 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3641), {226, 133, 134, 0}}, - {-1,{0}}, -#line 1063 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3643), {226, 138, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1014 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3657), {226, 169, 185, 0}}, -#line 762 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3658), {196, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 218 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3665), {226, 169, 139, 0}}, - {-1,{0}}, -#line 720 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3667), {226, 135, 148, 0}}, - {-1,{0}}, -#line 360 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3669), {226, 169, 183, 0}}, - {-1,{0}}, -#line 264 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3671), {226, 138, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1622 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3676), {226, 139, 140, 0}}, - {-1,{0}}, -#line 1016 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3678), {226, 139, 139, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1443 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3681), {226, 137, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 449 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3685), {226, 139, 177, 0}}, - {-1,{0}}, -#line 275 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3687), {226, 153, 163, 0}}, - {-1,{0}}, -#line 1488 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3689), {197, 149, 0}}, - {-1,{0}}, -#line 819 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3691), {196, 186, 0}}, -#line 1889 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3692), {226, 143, 162, 0}}, -#line 1632 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3693), {197, 155, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2108 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3696), {197, 185, 0}}, -#line 459 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3697), {195, 169, 0}}, - {-1,{0}}, -#line 1858 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3699), {226, 137, 136, 0}}, - {-1,{0}}, -#line 1906 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3701), {226, 165, 137, 0}}, -#line 1902 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3702), {195, 186, 0}}, -#line 982 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3703), {226, 136, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1076 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3714), {197, 132, 0}}, - {-1,{0}}, -#line 1206 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3716), {226, 138, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 951 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3720), {196, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1945 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3725), {226, 134, 145, 0}}, - {-1,{0}}, -#line 1511 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3727), {226, 134, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 437 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3738), {226, 138, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 555 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3742), {226, 151, 188, 0}}, -#line 219 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3743), {226, 169, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 642 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3749), {226, 137, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1299 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3756), {226, 137, 164, 226, 131, 146, 0}}, - {-1,{0}}, -#line 1883 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3758), {226, 137, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1346 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3764), {206, 191, 0}}, - {-1,{0}}, -#line 417 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3766), {226, 138, 168, 0}}, -#line 233 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3767), {226, 136, 176, 0}}, -#line 1621 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3768), {226, 128, 153, 0}}, - {-1,{0}}, -#line 1007 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3770), {226, 128, 154, 0}}, - {-1,{0}}, -#line 2124 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3772), {226, 135, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 294 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3780), {240, 157, 149, 148, 0}}, - {-1,{0}}, -#line 292 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3782), {226, 136, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 670 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3798), {226, 128, 138, 0}}, -#line 1728 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3799), {226, 138, 146, 0}}, -#line 306 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3800), {226, 171, 143, 0}}, -#line 1955 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3801), {226, 134, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 426 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3805), {204, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1674 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3817), {226, 134, 147, 0}}, - {-1,{0}}, -#line 2075 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3819), {240, 157, 149, 169, 0}}, - {-1,{0}}, -#line 1631 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3821), {197, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2040 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3829), {226, 171, 140, 239, 184, 128, 0}}, -#line 252 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3830), {226, 151, 139, 0}}, -#line 1415 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3831), {226, 168, 163, 0}}, -#line 308 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3832), {226, 171, 144, 0}}, -#line 2038 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3833), {226, 171, 139, 239, 184, 128, 0}}, -#line 1901 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3834), {195, 154, 0}}, - {-1,{0}}, -#line 773 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3836), {226, 139, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 607 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3845), {226, 170, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1719 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3851), {226, 138, 148, 239, 184, 128, 0}}, - {-1,{0}}, -#line 1701 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3853), {226, 136, 163, 0}}, - {-1,{0}}, -#line 935 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3855), {226, 137, 182, 0}}, - {-1,{0}}, -#line 415 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3857), {226, 159, 185, 0}}, -#line 1208 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3858), {226, 139, 160, 0}}, - {-1,{0}}, {-1,{0}}, -#line 477 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3861), {226, 170, 154, 0}}, - {-1,{0}}, {-1,{0}}, -#line 32 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3864), {38, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1162 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3874), {226, 136, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1862 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3883), {226, 168, 176, 0}}, - {-1,{0}}, {-1,{0}}, -#line 432 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3886), {226, 134, 189, 0}}, -#line 2130 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3887), {226, 128, 140, 0}}, -#line 818 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3888), {196, 185, 0}}, -#line 433 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3889), {226, 165, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1331 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3898), {195, 178, 0}}, -#line 2087 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3899), {195, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1718 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3903), {226, 138, 148, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1322 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3906), {226, 138, 153, 0}}, -#line 212 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3907), {196, 134, 0}}, - {-1,{0}}, -#line 1285 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3909), {206, 189, 0}}, -#line 1888 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3910), {226, 168, 187, 0}}, - {-1,{0}}, -#line 478 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3912), {195, 136, 0}}, -#line 507 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3913), {226, 169, 177, 0}}, - {-1,{0}}, -#line 85 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3915), {226, 137, 140, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1956 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3918), {226, 138, 142, 0}}, - {-1,{0}}, -#line 470 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3920), {196, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 309 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3924), {226, 171, 146, 0}}, - {-1,{0}}, -#line 1689 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3926), {226, 170, 158, 0}}, -#line 1958 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3927), {226, 134, 151, 0}}, -#line 307 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3928), {226, 171, 145, 0}}, - {-1,{0}}, -#line 450 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3930), {226, 150, 191, 0}}, -#line 1454 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3931), {226, 139, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 177 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3936), {226, 149, 153, 0}}, -#line 1980 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3937), {226, 135, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 431 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3945), {226, 165, 158, 0}}, -#line 650 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3946), {226, 170, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 120 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3950), {226, 168, 130, 0}}, -#line 341 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3951), {226, 128, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 754 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3954), {226, 139, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 710 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3967), {195, 173, 0}}, - {-1,{0}}, -#line 1434 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3969), {226, 137, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 481 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3981), {226, 170, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 742 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3987), {226, 135, 146, 0}}, -#line 2010 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3988), {226, 138, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 207 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str3996), {226, 137, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1070 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4015), {206, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2008 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4022), {226, 138, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1027 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4028), {226, 137, 168, 239, 184, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 895 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4033), {226, 134, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1075 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4037), {197, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1936 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4042), {226, 143, 159, 0}}, -#line 1468 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4043), {206, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1559 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4047), {207, 177, 0}}, - {-1,{0}}, -#line 913 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4049), {226, 170, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1791 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4055), {194, 185, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1792 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4058), {194, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1793 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4066), {194, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 118 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4071), {226, 168, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 423 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4078), {226, 135, 147, 0}}, - {-1,{0}}, -#line 2082 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4080), {226, 168, 134, 0}}, - {-1,{0}}, -#line 92 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4082), {226, 138, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1106 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4087), {226, 128, 139, 0}}, -#line 208 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4088), {226, 137, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 305 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4100), {240, 157, 146, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1248 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4109), {226, 138, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1789 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4115), {226, 138, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 238 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4122), {194, 184, 0}}, - {-1,{0}}, {-1,{0}}, -#line 191 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4125), {226, 149, 159, 0}}, - {-1,{0}}, -#line 1364 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4127), {226, 138, 182, 0}}, -#line 2129 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4128), {226, 128, 141, 0}}, -#line 723 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4129), {195, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 716 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4137), {196, 176, 0}}, - {-1,{0}}, -#line 2081 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4139), {240, 157, 147, 141, 0}}, -#line 2068 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4140), {206, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1131 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4144), {226, 137, 171, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 165 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4153), {226, 149, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1852 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4163), {195, 158, 0}}, - {-1,{0}}, -#line 1487 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4165), {197, 148, 0}}, - {-1,{0}}, -#line 1505 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4167), {226, 134, 170, 0}}, - {-1,{0}}, -#line 837 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4169), {226, 134, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1627 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4177), {226, 167, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 180 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4189), {226, 149, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 340 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4215), {226, 128, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1345 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4220), {206, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 420 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4226), {226, 136, 165, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1117 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4229), {226, 136, 132, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1284 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4232), {206, 157, 0}}, -#line 1116 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4233), {226, 136, 132, 0}}, -#line 605 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4234), {226, 137, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 62 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4238), {226, 137, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1790 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4243), {226, 139, 145, 0}}, -#line 401 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4244), {226, 137, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 499 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4247), {197, 139, 0}}, - {-1,{0}}, -#line 224 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4249), {203, 135, 0}}, - {-1,{0}}, -#line 167 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4251), {226, 149, 169, 0}}, -#line 613 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4252), {226, 170, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1547 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4257), {226, 135, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 174 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4262), {226, 149, 157, 0}}, - {-1,{0}}, -#line 1804 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4264), {226, 171, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1409 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4267), {226, 139, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1288 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4272), {226, 128, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1491 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4285), {226, 159, 169, 0}}, - {-1,{0}}, -#line 824 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4287), {226, 159, 168, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1313 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4290), {226, 138, 154, 0}}, - {-1,{0}}, -#line 1515 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4292), {226, 132, 154, 0}}, - {-1,{0}}, -#line 295 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4294), {226, 136, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1018 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4307), {226, 165, 182, 0}}, -#line 195 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4308), {203, 152, 0}}, - {-1,{0}}, -#line 1077 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4310), {226, 136, 160, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1817 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4315), {226, 164, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1496 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4322), {194, 187, 0}}, - {-1,{0}}, -#line 830 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4324), {194, 171, 0}}, -#line 1815 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4325), {226, 171, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 318 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4329), {226, 139, 147, 0}}, -#line 64 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4330), {226, 137, 138, 0}}, -#line 1481 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4331), {63, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1305 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4336), {226, 164, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1808 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4340), {226, 138, 131, 0}}, - {-1,{0}}, -#line 422 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4342), {226, 134, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 452 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4351), {226, 135, 181, 0}}, - {-1,{0}}, -#line 67 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4353), {39, 0}}, -#line 1330 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4354), {195, 146, 0}}, -#line 1677 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4355), {226, 136, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1268 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4364), {226, 138, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 965 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4368), {226, 159, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 915 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4377), {226, 170, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1805 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4384), {226, 138, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1126 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4388), {226, 139, 153, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1490 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4396), {226, 166, 179, 0}}, -#line 1816 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4397), {226, 171, 150, 0}}, -#line 820 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4398), {226, 166, 180, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1870 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4401), {226, 171, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 501 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4423), {196, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1593 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4429), {226, 137, 147, 0}}, - {-1,{0}}, -#line 211 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4431), {226, 137, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1009 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4435), {197, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1896 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4439), {197, 166, 0}}, -#line 649 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4440), {226, 137, 179, 0}}, - {-1,{0}}, {-1,{0}}, -#line 105 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4443), {226, 166, 176, 0}}, -#line 2109 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4444), {197, 186, 0}}, -#line 651 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4445), {226, 170, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1897 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4448), {197, 167, 0}}, - {-1,{0}}, -#line 1600 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4450), {226, 159, 173, 0}}, -#line 188 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4451), {226, 149, 163, 0}}, -#line 962 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4452), {226, 159, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1152 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4456), {226, 169, 189, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1633 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4462), {226, 128, 154, 0}}, - {-1,{0}}, -#line 1656 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4464), {226, 164, 165, 0}}, -#line 956 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4465), {226, 170, 137, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1809 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4468), {226, 139, 145, 0}}, - {-1,{0}}, -#line 161 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4470), {226, 149, 164, 0}}, -#line 1986 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4471), {207, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 254 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4475), {226, 137, 151, 0}}, - {-1,{0}}, -#line 2101 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4477), {240, 157, 149, 170, 0}}, - {-1,{0}}, -#line 1940 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4479), {226, 138, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 825 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4484), {226, 159, 170, 0}}, -#line 1101 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4485), {226, 164, 164, 0}}, -#line 1673 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4486), {209, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 245 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4492), {240, 157, 148, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 799 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4506), {206, 154, 0}}, -#line 943 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4507), {209, 153, 0}}, -#line 1045 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4508), {226, 129, 159, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1810 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4511), {226, 138, 135, 0}}, -#line 1811 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4512), {226, 171, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1545 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4517), {194, 174, 0}}, -#line 30 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4518), {196, 129, 0}}, -#line 907 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4519), {226, 139, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2049 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4524), {226, 132, 152, 0}}, -#line 1892 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4525), {208, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1812 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4529), {226, 138, 139, 0}}, -#line 1140 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4530), {209, 154, 0}}, -#line 2064 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4531), {240, 157, 148, 181, 0}}, - {-1,{0}}, -#line 1071 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4533), {206, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1297 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4539), {226, 167, 158, 0}}, -#line 178 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4540), {226, 149, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2076 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4545), {226, 168, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 886 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4551), {226, 135, 135, 0}}, -#line 1787 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4552), {226, 136, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 111 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4559), {226, 132, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 285 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4563), {226, 136, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1286 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4573), {35, 0}}, -#line 33 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4574), {38, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 173 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4583), {226, 149, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1176 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4590), {226, 137, 175, 0}}, -#line 169 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4591), {226, 138, 158, 0}}, -#line 790 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4592), {200, 183, 0}}, - {-1,{0}}, -#line 1668 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4594), {226, 140, 162, 0}}, - {-1,{0}}, -#line 447 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4596), {196, 144, 0}}, - {-1,{0}}, -#line 34 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4598), {226, 136, 167, 0}}, -#line 1179 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4599), {226, 137, 171, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1181 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4606), {226, 169, 190, 204, 184, 0}}, - {-1,{0}}, -#line 1180 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4608), {226, 137, 185, 0}}, -#line 1484 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4609), {34, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1178 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4616), {226, 137, 167, 204, 184, 0}}, -#line 708 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4617), {226, 128, 144, 0}}, -#line 1411 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4618), {226, 132, 143, 0}}, - {-1,{0}}, -#line 1856 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4620), {226, 137, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1871 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4627), {226, 164, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1008 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4632), {197, 129, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1680 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4635), {194, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2072 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4639), {226, 139, 187, 0}}, -#line 761 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4640), {196, 174, 0}}, - {-1,{0}}, {-1,{0}}, -#line 455 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4643), {208, 143, 0}}, - {-1,{0}}, -#line 1333 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4645), {226, 166, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 270 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4652), {226, 167, 130, 0}}, - {-1,{0}}, -#line 1665 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4654), {226, 156, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1387 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4668), {194, 182, 0}}, - {-1,{0}}, {-1,{0}}, -#line 76 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4671), {42, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1482 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4678), {226, 137, 159, 0}}, - {-1,{0}}, -#line 1786 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4680), {226, 136, 145, 0}}, - {-1,{0}}, -#line 444 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4682), {208, 133, 0}}, - {-1,{0}}, -#line 498 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4684), {197, 138, 0}}, - {-1,{0}}, -#line 2122 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4686), {208, 150, 0}}, - {-1,{0}}, {-1,{0}}, -#line 966 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4689), {226, 159, 181, 0}}, - {-1,{0}}, -#line 346 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4691), {226, 128, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 438 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4699), {226, 134, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1813 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4706), {226, 171, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1457 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4714), {226, 140, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1311 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4718), {195, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 192 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4729), {226, 149, 160, 0}}, - {-1,{0}}, {-1,{0}}, -#line 458 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4732), {195, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1807 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4738), {226, 171, 128, 0}}, - {-1,{0}}, -#line 694 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4740), {226, 134, 169, 0}}, - {-1,{0}}, {-1,{0}}, -#line 273 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4743), {226, 128, 153, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1887 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4746), {226, 167, 141, 0}}, -#line 405 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4747), {226, 138, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1623 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4751), {226, 139, 138, 0}}, - {-1,{0}}, -#line 1017 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4753), {226, 139, 137, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1864 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4756), {226, 164, 168, 0}}, -#line 23 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4757), {195, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 75 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4760), {226, 137, 148, 0}}, -#line 1492 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4761), {226, 159, 171, 0}}, -#line 760 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4762), {209, 145, 0}}, - {-1,{0}}, -#line 1207 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4764), {226, 170, 175, 204, 184, 0}}, - {-1,{0}}, -#line 61 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4766), {240, 157, 149, 146, 0}}, - {-1,{0}}, -#line 251 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4768), {207, 135, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1479 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4771), {226, 132, 141, 0}}, -#line 187 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4772), {226, 149, 162, 0}}, -#line 1177 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4773), {226, 137, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2066 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4777), {226, 159, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1361 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4791), {226, 132, 180, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1620 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4794), {226, 128, 153, 0}}, - {-1,{0}}, -#line 1006 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4796), {226, 128, 152, 0}}, -#line 2103 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4797), {240, 157, 147, 142, 0}}, - {-1,{0}}, {-1,{0}}, -#line 603 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4800), {196, 161, 0}}, - {-1,{0}}, -#line 1214 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4802), {226, 139, 162, 0}}, -#line 809 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4803), {208, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 203 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4809), {226, 167, 133, 0}}, -#line 1213 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4810), {226, 138, 143, 204, 184, 0}}, -#line 1672 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4811), {208, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2098 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4821), {208, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 338 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4825), {226, 136, 177, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1841 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4828), {206, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1842 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4837), {206, 184, 0}}, -#line 2070 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4838), {226, 159, 184, 0}}, - {-1,{0}}, -#line 1216 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4840), {226, 139, 163, 0}}, - {-1,{0}}, {-1,{0}}, -#line 365 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4843), {226, 166, 177, 0}}, -#line 1875 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4844), {226, 150, 181, 0}}, - {-1,{0}}, -#line 602 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4846), {196, 160, 0}}, - {-1,{0}}, -#line 1215 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4848), {226, 138, 144, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 8 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4857), {196, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 448 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4860), {196, 145, 0}}, -#line 1399 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4861), {226, 128, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1521 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4866), {93, 0}}, - {-1,{0}}, -#line 851 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4868), {91, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1323 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4872), {226, 166, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1347 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4878), {226, 166, 182, 0}}, - {-1,{0}}, -#line 2079 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4880), {226, 159, 185, 0}}, - {-1,{0}}, -#line 1877 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4882), {226, 151, 131, 0}}, -#line 1182 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4883), {226, 137, 181, 0}}, -#line 278 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4884), {226, 137, 148, 0}}, - {-1,{0}}, -#line 967 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4886), {226, 159, 184, 0}}, - {-1,{0}}, -#line 766 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4888), {206, 185, 0}}, - {-1,{0}}, -#line 277 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4890), {58, 0}}, -#line 2118 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4891), {206, 150, 0}}, -#line 596 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4892), {196, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 246 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4897), {208, 167, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2104 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4900), {208, 174, 0}}, -#line 1544 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4901), {194, 174, 0}}, -#line 1822 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4902), {195, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 456 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4909), {209, 159, 0}}, - {-1,{0}}, -#line 110 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4911), {206, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 538 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4918), {226, 130, 172, 0}}, - {-1,{0}}, {-1,{0}}, -#line 872 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4921), {226, 134, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 221 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4924), {226, 133, 133, 0}}, - {-1,{0}}, -#line 1592 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4926), {203, 154, 0}}, -#line 829 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4927), {226, 132, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 391 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4932), {209, 146, 0}}, - {-1,{0}}, -#line 1355 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4934), {226, 138, 149, 0}}, - {-1,{0}}, {-1,{0}}, -#line 751 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4937), {226, 132, 164, 0}}, -#line 595 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4938), {196, 158, 0}}, - {-1,{0}}, -#line 1908 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4940), {209, 158, 0}}, -#line 537 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4941), {195, 171, 0}}, - {-1,{0}}, {-1,{0}}, -#line 361 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4944), {194, 176, 0}}, - {-1,{0}}, -#line 1982 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4946), {195, 188, 0}}, - {-1,{0}}, {-1,{0}}, -#line 709 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4949), {195, 141, 0}}, -#line 1780 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4950), {226, 170, 176, 0}}, - {-1,{0}}, -#line 811 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4952), {208, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 320 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4961), {226, 137, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1893 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4975), {209, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 241 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4982), {194, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 390 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str4991), {208, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1857 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5009), {226, 137, 133, 0}}, - {-1,{0}}, -#line 1879 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5011), {226, 137, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 453 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5016), {226, 165, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 879 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5025), {226, 159, 166, 0}}, - {-1,{0}}, -#line 942 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5027), {208, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 718 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5036), {208, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1878 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5043), {226, 138, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1110 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5049), {226, 137, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1254 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5055), {226, 136, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1099 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5062), {226, 128, 147, 0}}, -#line 148 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5063), {226, 139, 136, 0}}, - {-1,{0}}, -#line 557 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5065), {102, 106, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1907 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5072), {208, 142, 0}}, - {-1,{0}}, -#line 1999 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5074), {207, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1981 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5078), {195, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2001 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5084), {226, 138, 179, 0}}, -#line 2000 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5085), {226, 138, 178, 0}}, -#line 74 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5086), {240, 157, 146, 182, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1775 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5089), {226, 137, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 337 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5093), {226, 136, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1634 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5101), {226, 137, 187, 0}}, - {-1,{0}}, -#line 559 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5103), {239, 172, 130, 0}}, - {-1,{0}}, -#line 257 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5105), {226, 138, 155, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2009 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5108), {226, 138, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1292 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5112), {226, 138, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1803 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5120), {226, 165, 187, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1602 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5124), {226, 159, 167, 0}}, - {-1,{0}}, -#line 964 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5126), {226, 159, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2007 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5142), {226, 138, 162, 0}}, -#line 2107 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5143), {197, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 654 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5151), {62, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 226 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5156), {226, 169, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1776 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5173), {226, 137, 187, 0}}, -#line 1310 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5174), {195, 147, 0}}, -#line 1873 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5175), {226, 132, 162, 0}}, -#line 1139 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5176), {208, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 657 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5181), {226, 139, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2097 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5189), {240, 157, 148, 182, 0}}, - {-1,{0}}, {-1,{0}}, -#line 284 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5192), {226, 136, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 652 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5197), {226, 137, 171, 0}}, -#line 1647 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5198), {226, 170, 182, 0}}, -#line 731 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5199), {196, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 262 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5203), {226, 147, 136, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2095 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5206), {194, 165, 0}}, - {-1,{0}}, -#line 1843 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5208), {207, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 783 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5211), {195, 175, 0}}, -#line 1778 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5212), {226, 137, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 159 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5217), {226, 149, 144, 0}}, -#line 1073 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5218), {226, 138, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1577 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5222), {226, 135, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 280 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5227), {226, 137, 148, 0}}, - {-1,{0}}, -#line 1635 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5229), {226, 170, 188, 0}}, -#line 629 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5230), {226, 170, 164, 0}}, -#line 719 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5231), {194, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 234 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5234), {226, 169, 140, 0}}, - {-1,{0}}, -#line 2059 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5236), {226, 139, 130, 0}}, -#line 2123 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5237), {208, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 163 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5241), {226, 149, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 911 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5250), {226, 169, 189, 0}}, - {-1,{0}}, -#line 1957 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5252), {226, 134, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 350 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5257), {203, 157, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1470 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5260), {226, 128, 136, 0}}, - {-1,{0}}, -#line 228 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5262), {196, 141, 0}}, - {-1,{0}}, -#line 1519 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5264), {226, 157, 179, 0}}, - {-1,{0}}, -#line 849 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5266), {226, 157, 178, 0}}, - {-1,{0}}, -#line 58 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5268), {196, 132, 0}}, -#line 899 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5269), {226, 167, 143, 0}}, - {-1,{0}}, {-1,{0}}, -#line 615 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5272), {226, 170, 132, 0}}, -#line 900 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5273), {226, 138, 180, 0}}, -#line 898 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5274), {226, 138, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 290 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5280), {226, 136, 174, 0}}, - {-1,{0}}, {-1,{0}}, -#line 439 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5283), {226, 164, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1626 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5295), {226, 150, 184, 0}}, - {-1,{0}}, -#line 1022 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5297), {226, 151, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1548 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5300), {226, 165, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 878 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5306), {226, 140, 136, 0}}, - {-1,{0}}, -#line 1979 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5308), {226, 150, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2061 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5314), {226, 139, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 545 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5319), {226, 137, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1528 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5325), {197, 151, 0}}, - {-1,{0}}, -#line 858 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5327), {196, 188, 0}}, - {-1,{0}}, -#line 1643 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5329), {197, 159, 0}}, - {-1,{0}}, -#line 1830 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5331), {197, 162, 0}}, - {-1,{0}}, -#line 1748 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5333), {226, 152, 133, 0}}, -#line 168 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5334), {226, 138, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1831 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5340), {197, 163, 0}}, -#line 2117 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5341), {226, 128, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1093 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5350), {197, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1404 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5358), {207, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 711 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5375), {226, 129, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 220 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5384), {226, 169, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 445 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5387), {209, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 248 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5397), {226, 156, 147, 0}}, -#line 1381 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5398), {226, 140, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1280 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5405), {226, 139, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1579 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5411), {226, 138, 162, 0}}, -#line 1294 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5412), {226, 137, 165, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 892 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5424), {226, 134, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 987 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5431), {226, 151, 138, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1584 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5434), {226, 167, 144, 0}}, - {-1,{0}}, -#line 1581 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5436), {226, 165, 155, 0}}, - {-1,{0}}, -#line 1585 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5438), {226, 138, 181, 0}}, -#line 1583 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5439), {226, 138, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 802 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5449), {196, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1642 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5457), {197, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 268 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5468), {226, 168, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 490 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5471), {226, 136, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 22 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5478), {240, 157, 148, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 376 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5482), {203, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 881 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5489), {226, 135, 131, 0}}, - {-1,{0}}, {-1,{0}}, -#line 882 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5492), {226, 165, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 908 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5501), {226, 170, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 68 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5509), {226, 129, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 209 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5512), {226, 170, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 857 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5524), {196, 187, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 223 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5528), {226, 129, 129, 0}}, - {-1,{0}}, -#line 91 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5530), {226, 171, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 229 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5543), {195, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 261 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5547), {194, 174, 0}}, -#line 880 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5548), {226, 165, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1895 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5552), {209, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 402 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5556), {226, 137, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 243 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5564), {194, 183, 0}}, - {-1,{0}}, -#line 1281 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5566), {226, 139, 172, 0}}, - {-1,{0}}, -#line 1055 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5568), {226, 136, 146, 0}}, - {-1,{0}}, -#line 623 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5570), {226, 132, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 6 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5577), {195, 129, 0}}, -#line 656 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5578), {226, 169, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 661 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5583), {226, 165, 184, 0}}, -#line 205 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5584), {226, 128, 162, 0}}, - {-1,{0}}, {-1,{0}}, -#line 421 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5587), {226, 134, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1536 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5593), {226, 128, 157, 0}}, - {-1,{0}}, -#line 865 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5595), {226, 128, 158, 0}}, - {-1,{0}}, {-1,{0}}, -#line 755 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5598), {226, 168, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1977 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5602), {197, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 589 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5612), {199, 181, 0}}, - {-1,{0}}, -#line 1278 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5614), {195, 177, 0}}, -#line 20 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5615), {226, 129, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 703 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5618), {196, 166, 0}}, - {-1,{0}}, -#line 544 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5620), {226, 133, 135, 0}}, -#line 1056 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5621), {226, 138, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1587 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5625), {226, 165, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1965 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5630), {226, 134, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2119 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5639), {206, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 373 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5644), {203, 153, 0}}, -#line 374 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5645), {203, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1146 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5663), {226, 134, 154, 0}}, -#line 691 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5664), {226, 164, 166, 0}}, - {-1,{0}}, -#line 729 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5666), {226, 132, 169, 0}}, - {-1,{0}}, {-1,{0}}, -#line 63 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5669), {226, 169, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1092 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5673), {197, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 216 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5678), {226, 169, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1042 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5686), {226, 128, 148, 0}}, - {-1,{0}}, {-1,{0}}, -#line 554 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5689), {239, 172, 129, 0}}, -#line 1648 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5690), {226, 139, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1541 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5699), {226, 132, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 897 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5703), {226, 139, 139, 0}}, -#line 77 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5704), {226, 137, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 685 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5718), {226, 128, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 451 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5722), {226, 150, 190, 0}}, - {-1,{0}}, -#line 1175 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5724), {226, 136, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1639 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5728), {226, 137, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2089 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5733), {208, 175, 0}}, -#line 1976 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5734), {197, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1173 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5741), {226, 137, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1849 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5747), {226, 128, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 65 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5754), {226, 169, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 206 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5762), {226, 128, 162, 0}}, - {-1,{0}}, {-1,{0}}, -#line 272 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5765), {226, 128, 157, 0}}, -#line 363 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5766), {206, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 620 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5776), {226, 137, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1376 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5780), {226, 138, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2056 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5799), {226, 137, 128, 0}}, - {-1,{0}}, -#line 1527 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5801), {197, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 535 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5807), {195, 176, 0}}, -#line 1806 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5808), {226, 171, 140, 0}}, - {-1,{0}}, {-1,{0}}, -#line 84 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5811), {226, 168, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 194 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5817), {203, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 621 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5822), {226, 139, 153, 0}}, - {-1,{0}}, -#line 706 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5824), {226, 137, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 948 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5837), {226, 135, 154, 0}}, -#line 154 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5838), {226, 148, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1782 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5847), {226, 170, 182, 0}}, -#line 1971 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5848), {197, 175, 0}}, -#line 929 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5849), {226, 169, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1290 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5860), {226, 138, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 669 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5866), {203, 135, 0}}, -#line 779 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5867), {196, 169, 0}}, - {-1,{0}}, {-1,{0}}, -#line 765 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5870), {206, 153, 0}}, - {-1,{0}}, -#line 759 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5872), {208, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 156 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5884), {226, 149, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1779 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5891), {226, 137, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 883 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5905), {226, 140, 138, 0}}, -#line 2041 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5906), {226, 138, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1876 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5923), {226, 150, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 968 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5927), {226, 159, 183, 0}}, -#line 1572 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5928), {226, 140, 139, 0}}, - {-1,{0}}, {-1,{0}}, -#line 434 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5931), {226, 165, 159, 0}}, - {-1,{0}}, -#line 1480 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5933), {226, 168, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1277 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5937), {195, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 210 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5940), {226, 137, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 668 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5949), {226, 137, 169, 239, 184, 128, 0}}, - {-1,{0}}, -#line 164 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5951), {226, 148, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 658 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5956), {226, 166, 149, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1238 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5959), {226, 138, 128, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1380 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5962), {195, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 612 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5970), {226, 170, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 536 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5976), {195, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1970 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5980), {197, 174, 0}}, - {-1,{0}}, -#line 1937 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5982), {226, 142, 181, 0}}, -#line 1161 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5983), {226, 137, 170, 204, 184, 0}}, -#line 875 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5984), {226, 135, 164, 0}}, -#line 1095 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str5985), {226, 169, 173, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 78 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6003), {226, 137, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1058 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6023), {226, 168, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 364 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6030), {206, 180, 0}}, - {-1,{0}}, -#line 678 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6032), {226, 134, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 38 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6038), {226, 169, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 237 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6043), {196, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 225 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6048), {226, 132, 173, 0}}, -#line 166 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6049), {226, 149, 168, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1784 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6052), {226, 137, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 267 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6061), {226, 167, 131, 0}}, -#line 1654 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6062), {226, 138, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1318 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6066), {226, 138, 157, 0}}, -#line 269 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6067), {226, 171, 175, 0}}, -#line 1802 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6068), {226, 171, 151, 0}}, -#line 1795 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6069), {226, 171, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1794 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6077), {226, 170, 190, 0}}, - {-1,{0}}, -#line 83 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6079), {226, 136, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1894 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6084), {208, 139, 0}}, - {-1,{0}}, {-1,{0}}, -#line 639 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6087), {96, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1004 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6101), {226, 170, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1949 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6106), {226, 135, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 905 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6121), {226, 134, 188, 0}}, -#line 416 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6122), {226, 135, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1108 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6129), {226, 128, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 941 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6140), {226, 150, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 266 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6146), {226, 137, 151, 0}}, -#line 1293 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6147), {226, 138, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1927 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6151), {226, 150, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 738 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6155), {226, 132, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1586 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6161), {226, 165, 143, 0}}, - {-1,{0}}, {-1,{0}}, -#line 151 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6164), {226, 149, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 627 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6176), {226, 170, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 782 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6193), {195, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1325 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6203), {197, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1198 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6208), {226, 169, 189, 204, 184, 0}}, - {-1,{0}}, -#line 153 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6210), {226, 149, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 591 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6215), {206, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1377 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6236), {226, 168, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 969 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6248), {226, 159, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 590 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6261), {206, 147, 0}}, -#line 127 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6262), {226, 139, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 160 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6268), {226, 148, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1797 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6283), {226, 171, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 902 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6292), {226, 165, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 614 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6298), {226, 170, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 800 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6304), {206, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1124 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6315), {226, 169, 190, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 665 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6340), {226, 137, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 550 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6351), {239, 172, 128, 0}}, -#line 121 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6352), {226, 168, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 808 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6367), {196, 184, 0}}, -#line 1796 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6368), {226, 138, 135, 0}}, - {-1,{0}}, -#line 170 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6370), {226, 138, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 631 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6386), {226, 170, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 427 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6394), {226, 135, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 125 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6403), {226, 168, 132, 0}}, -#line 810 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6404), {209, 133, 0}}, - {-1,{0}}, -#line 357 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6406), {226, 128, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1379 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6418), {195, 150, 0}}, - {-1,{0}}, -#line 109 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6420), {206, 146, 0}}, -#line 1057 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6421), {226, 136, 184, 0}}, -#line 1783 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6422), {226, 139, 169, 0}}, - {-1,{0}}, -#line 310 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6424), {226, 139, 175, 0}}, - {-1,{0}}, {-1,{0}}, -#line 812 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6427), {209, 156, 0}}, -#line 625 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6428), {209, 147, 0}}, - {-1,{0}}, -#line 1094 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6430), {226, 137, 135, 0}}, -#line 2085 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6431), {226, 139, 129, 0}}, -#line 98 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6432), {226, 137, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1722 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6439), {226, 138, 145, 0}}, - {-1,{0}}, {-1,{0}}, -#line 155 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6442), {226, 149, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 970 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6445), {226, 159, 186, 0}}, - {-1,{0}}, -#line 1721 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6447), {226, 138, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 430 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6451), {226, 165, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1723 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6454), {226, 138, 143, 0}}, - {-1,{0}}, -#line 1229 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6456), {226, 136, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1174 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6461), {226, 137, 130, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 150 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6485), {226, 148, 144, 0}}, - {-1,{0}}, {-1,{0}}, -#line 157 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6488), {226, 149, 148, 0}}, - {-1,{0}}, -#line 36 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6490), {226, 169, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1590 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6502), {226, 135, 128, 0}}, - {-1,{0}}, -#line 730 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6504), {196, 178, 0}}, -#line 1226 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6505), {226, 137, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 57 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6509), {226, 141, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 52 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6515), {226, 136, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 11 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6521), {226, 136, 191, 0}}, - {-1,{0}}, {-1,{0}}, -#line 37 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6524), {226, 169, 156, 0}}, - {-1,{0}}, -#line 1242 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6526), {226, 164, 179, 204, 184, 0}}, -#line 2025 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6527), {226, 128, 138, 0}}, - {-1,{0}}, -#line 1799 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6529), {226, 138, 131, 0}}, - {-1,{0}}, -#line 152 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6531), {226, 149, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2029 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6535), {226, 138, 130, 226, 131, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 235 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6538), {226, 169, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1987 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6548), {226, 136, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1532 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6552), {209, 128, 0}}, - {-1,{0}}, -#line 862 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6554), {208, 187, 0}}, - {-1,{0}}, -#line 1652 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6556), {209, 129, 0}}, - {-1,{0}}, -#line 1832 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6558), {208, 162, 0}}, -#line 2112 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6559), {208, 151, 0}}, -#line 468 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6560), {209, 141, 0}}, -#line 1537 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6561), {226, 134, 179, 0}}, - {-1,{0}}, -#line 868 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6563), {226, 134, 178, 0}}, - {-1,{0}}, -#line 1914 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6565), {209, 131, 0}}, -#line 184 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6566), {226, 149, 172, 0}}, -#line 1833 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6567), {209, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1098 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6577), {208, 189, 0}}, - {-1,{0}}, -#line 100 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6579), {208, 177, 0}}, -#line 1276 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6580), {226, 137, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 786 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6585), {208, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 288 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6600), {226, 169, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 56 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6607), {195, 133, 0}}, - {-1,{0}}, -#line 1569 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6609), {226, 165, 157, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1385 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6612), {226, 143, 156, 0}}, -#line 1019 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6613), {226, 169, 187, 0}}, - {-1,{0}}, -#line 1394 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6615), {208, 191, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1375 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6618), {195, 181, 0}}, -#line 1535 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6619), {226, 128, 157, 0}}, - {-1,{0}}, -#line 864 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6621), {226, 128, 156, 0}}, - {-1,{0}}, -#line 2005 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6623), {208, 146, 0}}, - {-1,{0}}, {-1,{0}}, -#line 217 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6626), {226, 169, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 101 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6646), {226, 128, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 424 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6650), {226, 164, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2006 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6657), {208, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 53 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6665), {226, 138, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 804 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6676), {208, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1040 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6683), {208, 156, 0}}, -#line 1651 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6684), {208, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1115 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6691), {10, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 547 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6696), {209, 132, 0}}, -#line 1913 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6697), {208, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 183 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6704), {226, 149, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 353 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6715), {208, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 704 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6738), {196, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 861 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6751), {208, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2093 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6762), {208, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1814 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6775), {226, 171, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1164 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6789), {194, 160, 0}}, -#line 1382 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6790), {226, 128, 190, 0}}, -#line 1724 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6791), {226, 138, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 624 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6797), {208, 131, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1383 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6800), {226, 143, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 512 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6806), {226, 137, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1384 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6819), {226, 142, 180, 0}}, - {-1,{0}}, -#line 81 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6821), {195, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 15 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6829), {194, 180, 0}}, -#line 715 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6830), {208, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 778 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6849), {196, 168, 0}}, -#line 689 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6850), {226, 132, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1344 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6854), {207, 137, 0}}, -#line 213 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6855), {196, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1645 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6861), {197, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 465 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6865), {195, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1912 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6870), {195, 187, 0}}, - {-1,{0}}, -#line 645 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6872), {226, 169, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 784 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6890), {196, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1291 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6895), {226, 138, 173, 0}}, -#line 2043 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6896), {197, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1097 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6900), {208, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1580 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6921), {226, 134, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 924 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6942), {226, 137, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1013 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6958), {226, 170, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 26 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6963), {226, 132, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 354 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6979), {208, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1644 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6989), {197, 156, 0}}, - {-1,{0}}, -#line 919 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str6991), {226, 170, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 717 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7000), {208, 149, 0}}, -#line 985 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7001), {226, 134, 152, 0}}, -#line 1911 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7002), {195, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 24 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7021), {195, 160, 0}}, - {-1,{0}}, -#line 1059 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7023), {226, 136, 147, 0}}, -#line 126 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7024), {226, 139, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1531 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7028), {208, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1801 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7034), {226, 159, 137, 0}}, - {-1,{0}}, {-1,{0}}, -#line 494 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7037), {226, 150, 171, 0}}, - {-1,{0}}, -#line 162 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7039), {226, 149, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1438 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7047), {226, 170, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 54 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7066), {226, 166, 157, 0}}, -#line 2091 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7067), {197, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1752 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7071), {226, 138, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1374 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7074), {195, 149, 0}}, -#line 231 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7075), {196, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 546 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7085), {208, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 286 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7090), {226, 132, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1762 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7096), {226, 165, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 757 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7115), {226, 129, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 175 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7120), {226, 148, 148, 0}}, -#line 9 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7121), {196, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1279 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7127), {226, 137, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 713 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7135), {195, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2062 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7142), {226, 150, 189, 0}}, -#line 253 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7143), {203, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 662 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7168), {226, 139, 151, 0}}, - {-1,{0}}, {-1,{0}}, -#line 610 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7171), {226, 169, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1282 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7183), {226, 139, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 313 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7198), {226, 139, 158, 0}}, -#line 1753 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7199), {226, 139, 144, 0}}, - {-1,{0}}, -#line 1041 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7201), {208, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1861 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7212), {226, 168, 177, 0}}, - {-1,{0}}, -#line 690 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7214), {226, 164, 165, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1682 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7217), {207, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 324 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7224), {226, 169, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1372 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7230), {195, 184, 0}}, -#line 457 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7231), {226, 159, 191, 0}}, - {-1,{0}}, {-1,{0}}, -#line 891 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7234), {226, 135, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1576 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7245), {226, 135, 140, 0}}, - {-1,{0}}, -#line 803 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7247), {196, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1758 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7256), {226, 171, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 332 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7260), {194, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 896 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7269), {226, 165, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 122 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7274), {226, 152, 133, 0}}, - {-1,{0}}, {-1,{0}}, -#line 317 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7277), {226, 136, 170, 0}}, -#line 972 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7278), {226, 159, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 597 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7294), {196, 162, 0}}, - {-1,{0}}, -#line 1441 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7296), {226, 170, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2113 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7307), {208, 183, 0}}, - {-1,{0}}, -#line 1412 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7309), {226, 132, 142, 0}}, -#line 1343 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7310), {206, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1771 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7317), {226, 171, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1533 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7325), {226, 164, 183, 0}}, -#line 325 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7326), {226, 136, 170, 239, 184, 128, 0}}, -#line 863 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7327), {226, 164, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1763 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7332), {226, 138, 130, 0}}, -#line 1219 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7333), {226, 138, 129, 0}}, -#line 876 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7334), {226, 135, 134, 0}}, - {-1,{0}}, {-1,{0}}, -#line 2044 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7337), {197, 181, 0}}, -#line 1560 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7338), {226, 159, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1283 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7344), {226, 139, 173, 0}}, -#line 1681 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7345), {206, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1222 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7350), {226, 137, 191, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 372 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7364), {194, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1759 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7376), {226, 138, 138, 0}}, - {-1,{0}}, -#line 1456 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7378), {226, 136, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 259 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7385), {226, 138, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1772 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7389), {226, 171, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 298 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7397), {194, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 533 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7403), {206, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 43 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7409), {226, 136, 161, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1084 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7434), {226, 153, 174, 0}}, - {-1,{0}}, -#line 1798 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7436), {226, 171, 132, 0}}, -#line 1085 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7437), {226, 132, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1880 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7443), {226, 150, 185, 0}}, - {-1,{0}}, -#line 375 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7445), {96, 0}}, -#line 172 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7446), {226, 149, 155, 0}}, -#line 287 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7447), {226, 137, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1835 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7451), {226, 140, 149, 0}}, - {-1,{0}}, {-1,{0}}, -#line 281 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7454), {44, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1764 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7460), {226, 139, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1221 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7475), {226, 139, 161, 0}}, -#line 663 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7476), {226, 139, 155, 0}}, -#line 79 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7477), {195, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 326 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7484), {226, 134, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 312 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7491), {226, 164, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 311 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7495), {226, 164, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1765 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7503), {226, 138, 134, 0}}, -#line 1766 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7504), {226, 171, 133, 0}}, -#line 1578 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7505), {226, 134, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 321 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7520), {226, 169, 134, 0}}, -#line 1768 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7521), {226, 138, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 59 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7532), {196, 133, 0}}, -#line 1190 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7533), {226, 139, 182, 0}}, -#line 1582 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7534), {226, 139, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2088 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7552), {195, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1147 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7563), {226, 135, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1317 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7581), {208, 190, 0}}, -#line 240 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7582), {226, 166, 178, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 467 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7595), {208, 173, 0}}, - {-1,{0}}, {-1,{0}}, -#line 322 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7598), {226, 169, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1881 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7604), {226, 138, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 887 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7615), {226, 134, 148, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1773 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7618), {226, 137, 187, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 425 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7631), {226, 135, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1324 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7641), {197, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 247 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7648), {209, 135, 0}}, -#line 664 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7649), {226, 170, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 42 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7655), {226, 136, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 12 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7662), {226, 136, 190, 204, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1598 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7668), {226, 142, 177, 0}}, - {-1,{0}}, -#line 954 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7670), {226, 142, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1109 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7674), {226, 128, 139, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1082 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7677), {226, 137, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1371 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7686), {195, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1769 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7698), {226, 171, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 71 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7723), {195, 133, 0}}, -#line 176 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7724), {226, 149, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1761 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7730), {226, 170, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 2086 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7742), {226, 139, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 171 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7767), {226, 148, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 189 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7778), {226, 148, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 705 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7800), {226, 137, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 714 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7812), {208, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 70 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7828), {226, 137, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 7 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7841), {195, 161, 0}}, -#line 66 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7842), {226, 137, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1950 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7859), {226, 134, 149, 0}}, - {-1,{0}}, -#line 1113 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7861), {226, 137, 171, 0}}, - {-1,{0}}, -#line 787 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7863), {208, 185, 0}}, - {-1,{0}}, {-1,{0}}, -#line 666 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7866), {226, 137, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 179 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7876), {226, 148, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1315 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7886), {195, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 464 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7900), {195, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1205 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str7987), {226, 139, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 124 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8006), {226, 150, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 342 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8032), {226, 132, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1316 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8037), {208, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 681 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8042), {196, 164, 0}}, -#line 1591 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8043), {226, 165, 147, 0}}, -#line 18 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8044), {195, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 556 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8063), {226, 150, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 622 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8084), {226, 139, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 99 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8088), {208, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1426 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8099), {226, 132, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 186 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8104), {226, 149, 161, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1392 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8107), {226, 136, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 712 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8117), {195, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 315 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8129), {226, 134, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 158 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8135), {226, 148, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 39 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8142), {226, 169, 154, 0}}, - {-1,{0}}, -#line 1788 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8144), {226, 153, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1568 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8148), {226, 159, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 785 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8168), {196, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1935 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8174), {95, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1561 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8241), {226, 134, 146, 0}}, -#line 258 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8242), {226, 138, 154, 0}}, -#line 27 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8243), {206, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 885 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8251), {226, 134, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 316 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8258), {226, 164, 189, 0}}, - {-1,{0}}, -#line 1565 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8260), {226, 135, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1994 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8281), {207, 130, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1287 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8300), {226, 132, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 551 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8310), {239, 172, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 984 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8326), {226, 134, 153, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 542 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8340), {226, 132, 176, 0}}, - {-1,{0}}, -#line 1314 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8342), {195, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2090 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8351), {209, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 823 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8375), {206, 187, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1220 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8381), {226, 170, 176, 204, 184, 0}}, -#line 190 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8382), {226, 149, 158, 0}}, - {-1,{0}}, -#line 123 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8384), {226, 150, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 40 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8391), {226, 136, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2083 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8404), {226, 168, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1074 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8424), {226, 136, 135, 0}}, -#line 185 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8425), {226, 148, 164, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 532 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8438), {206, 151, 0}}, - {-1,{0}}, -#line 16 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8440), {208, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 805 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8474), {208, 186, 0}}, -#line 601 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8475), {208, 179, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 893 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8485), {226, 165, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 230 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8491), {195, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 90 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8495), {226, 136, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 702 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8506), {226, 132, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1393 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8515), {208, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 600 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8521), {208, 147, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 659 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8534), {226, 169, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 822 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8572), {206, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1321 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8627), {226, 168, 184, 0}}, - {-1,{0}}, -#line 884 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8629), {226, 134, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 971 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8672), {226, 159, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 797 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8677), {208, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 866 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8687), {226, 165, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2084 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8700), {226, 150, 179, 0}}, -#line 1245 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8701), {226, 135, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 543 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8725), {226, 133, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1244 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8735), {226, 134, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 13 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8745), {195, 130, 0}}, -#line 1163 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8746), {226, 129, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 599 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8780), {196, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 41 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8784), {226, 166, 164, 0}}, -#line 327 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8785), {226, 164, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1670 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8791), {208, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2106 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8796), {195, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1760 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8800), {226, 171, 139, 0}}, - {-1,{0}}, {-1,{0}}, -#line 359 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8803), {226, 164, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1628 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8810), {226, 167, 180, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 598 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8826), {196, 156, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 795 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8843), {208, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 655 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8879), {226, 170, 167, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 781 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8922), {209, 150, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1951 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8956), {226, 134, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 330 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8962), {226, 139, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 549 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8972), {239, 172, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2099 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str8992), {209, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 389 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9015), {226, 139, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 660 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9026), {226, 170, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1754 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9069), {226, 170, 189, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 890 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9079), {226, 135, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 82 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9085), {195, 164, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1952 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9088), {226, 135, 149, 0}}, - {-1,{0}}, -#line 1575 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9090), {226, 135, 132, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 435 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9151), {226, 135, 129, 0}}, - {-1,{0}}, {-1,{0}}, -#line 436 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9154), {226, 165, 151, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 682 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9162), {196, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1613 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9186), {226, 135, 155, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 973 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9217), {226, 159, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 323 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9239), {226, 138, 141, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 10 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9249), {226, 136, 190, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 695 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9268), {226, 134, 170, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1107 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9271), {226, 128, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1756 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9275), {226, 171, 133, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1900 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9307), {226, 134, 160, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 429 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9320), {226, 135, 130, 0}}, -#line 428 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9321), {226, 135, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 19 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9326), {195, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1534 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9330), {226, 165, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 331 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9349), {226, 139, 143, 0}}, - {-1,{0}}, -#line 707 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9351), {226, 129, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1755 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9360), {226, 138, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 974 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9414), {226, 159, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 239 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9484), {194, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1188 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9505), {226, 136, 137, 0}}, -#line 1777 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9506), {226, 170, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 888 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9554), {226, 134, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1749 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9580), {207, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 31 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9627), {226, 168, 191, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 80 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9741), {195, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1567 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9747), {226, 140, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 889 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9751), {226, 135, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1770 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9767), {226, 171, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2022 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9788), {124, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1588 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9801), {226, 134, 190, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1589 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9804), {226, 165, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1570 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9829), {226, 135, 130, 0}}, - {-1,{0}}, {-1,{0}}, -#line 1571 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9832), {226, 165, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 25 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9836), {226, 132, 181, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 256 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9852), {226, 134, 187, 0}}, -#line 255 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9853), {226, 134, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 780 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9904), {208, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1378 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9936), {226, 168, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 753 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9944), {226, 138, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1845 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9952), {226, 137, 136, 0}}, - {-1,{0}}, {-1,{0}}, -#line 798 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9955), {209, 148, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1203 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9959), {226, 136, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1445 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9963), {226, 170, 185, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 335 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9983), {226, 139, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 72 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str9987), {195, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 232 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10023), {196, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1562 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10029), {226, 134, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 752 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10061), {226, 136, 171, 0}}, -#line 2060 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10062), {226, 151, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 796 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10121), {209, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 249 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10206), {226, 156, 147, 0}}, - {-1,{0}}, -#line 2024 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10208), {226, 137, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 182 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10219), {226, 149, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1211 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10240), {226, 167, 144, 204, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1212 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10244), {226, 139, 173, 0}}, -#line 1210 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10245), {226, 139, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 906 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10278), {226, 165, 146, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 181 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10357), {226, 148, 188, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 149 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10395), {226, 167, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2094 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10415), {209, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1757 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10428), {226, 171, 131, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1706 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10445), {208, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1563 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10505), {226, 135, 146, 0}}, - {-1,{0}}, -#line 28 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10507), {206, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1671 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10528), {209, 137, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1707 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10584), {209, 140, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 17 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10704), {208, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2092 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10720), {197, 183, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 116 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10791), {226, 151, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 736 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10808), {226, 133, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 69 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10847), {226, 137, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1800 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10851), {226, 138, 135, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 2042 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10879), {226, 166, 154, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 314 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10888), {226, 139, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1938 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str10947), {226, 143, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 14 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11009), {195, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1774 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11029), {226, 170, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1039 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11047), {226, 168, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 48 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11146), {226, 166, 172, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 45 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11165), {226, 166, 169, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 49 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11282), {226, 166, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 55 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11366), {226, 136, 162, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1025 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11527), {226, 165, 166, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 47 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11565), {226, 166, 171, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1899 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11664), {226, 134, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 339 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11720), {226, 140, 173, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1750 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11791), {207, 149, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1072 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11840), {226, 138, 184, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1564 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str11918), {226, 135, 165, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 867 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12012), {226, 165, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 871 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12103), {226, 159, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1629 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12170), {226, 165, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 328 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12202), {226, 139, 158, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2105 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12206), {209, 142, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1024 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12288), {226, 165, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 674 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12413), {209, 138, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1573 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12461), {226, 135, 129, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1574 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12497), {226, 135, 128, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 673 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12502), {208, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1767 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12651), {226, 138, 134, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 384 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12809), {207, 157, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1917 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12892), {197, 177, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1785 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12985), {226, 136, 139, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 336 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str12991), {226, 139, 143, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, -#line 1916 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13024), {197, 176, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 50 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13061), {226, 166, 174, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 51 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13443), {226, 166, 175, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2021 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13643), {226, 136, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 2023 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13659), {226, 157, 152, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1566 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13709), {226, 134, 163, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1320 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13908), {197, 145, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, -#line 1781 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str13945), {226, 170, 186, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 46 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str14304), {226, 166, 170, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 1319 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str14364), {197, 144, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 319 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str14620), {226, 169, 136, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 44 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str15290), {226, 166, 168, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 329 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str15360), {226, 139, 159, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 333 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str15729), {226, 134, 182, 0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, - {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, {-1,{0}}, -#line 334 "src/html_unescape.gperf" - {offsetof(struct entity_pool_t, entity_pool_str16000), {226, 134, 183, 0}} - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - unsigned int key = hash_entity (str, len); - - if (key <= MAX_HASH_VALUE) - if (len == lengthtable[key]) - { - register const char *s = wordlist[key].entity + entity_pool; - - if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) - return &wordlist[key]; - } - } - return 0; -} diff --git a/tools/make_entities_h.py b/tools/make_entities_h.py new file mode 100644 index 0000000000..5c248257ca --- /dev/null +++ b/tools/make_entities_h.py @@ -0,0 +1,107 @@ +# Creates C data structures for binary lookup table of entities, +# using python's html5 entity data. +# Usage: python3 tools/make_entities_h.py > src/entities.h + +import html + +# We use this simple hashing algorithm to convert a string +# to an integer: +def djb2(s): + bs = list(s.encode('utf-8')) + hash = 5381 + for b in bs: + hash = (((hash << 5) + hash) + b) & 0xFFFFFFFF + return hash + +entities5 = html.entities.html5 + +# Note that most entries in the entity table end with ';', but in a few +# cases we have both a version with ';' and one without, so we strip out +# the latter to avoid duplicates: +hashed_data = sorted([[int(djb2(s[:-1])), entities5[s].encode('utf-8'), s] + for s in entities5.keys() if s[-1] == ';']) + +# indices is a dictionary - given a hash it spits out the ordering +# of this entity in the list (the array index) +indices = {} +i = 0 + +for x in hashed_data: + indices[x[0]] = i + i = i + 1 + +# Formats integer as C octal escape. +def toesc(x): + return '\\' + oct(x)[2:] + +# Lines is the list of lines in the array. +# We don't fill them in order, so we initialize the whole array first. +lines = [""] * len(hashed_data) + +# Takes hashed_data or some sublist of it, and a midpoint (array index) +# in this list. Adds to lines a line for the midpoint, then calls +# itself recursively for the earlier and later elements. Each node +# contains indices for elements with a lesser hash and elements with +# a greater hash. An index of 0 means we're at a leaf node. +def to_binary_array(xs, mid): + # divide in half, and form binary array from each half + x = xs[mid] + lesses = xs[0:mid] + greaters = xs[mid+1:] + midlesses = len(lesses) // 2 + midgreaters = len(greaters) // 2 + if len(lesses) == 0: + ml = 0 + else: + ml = indices[lesses[midlesses][0]] + if len(greaters) == 0: + mg = 0 + else: + mg = indices[greaters[midgreaters][0]] + lines[indices[x[0]]] = ("{" + str(x[0]) + ", (unsigned char*)\"" + + ''.join(map(toesc, x[1])) + "\", " + str(ml) + + ", " + str(mg) + "}, /* &" + x[2] + " */") + if len(lesses) > 0: + to_binary_array(lesses, midlesses) + if len(greaters) > 0: + to_binary_array(greaters, midgreaters) + +# Now call this to fill up the array lines: +mid = len(hashed_data) // 2 +to_binary_array(hashed_data, mid) + +# Print out the header: +print("""#ifndef CMARK_ENTITIES_H +#define CMARK_ENTITIES_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct cmark_entity_node { + unsigned long value; + unsigned char *bytes; + int less; + int greater; +}; + +#define CMARK_ENTITY_MIN_LENGTH 2 +#define CMARK_ENTITY_MAX_LENGTH 31 +""") + +print("static struct cmark_entity_node cmark_entities[] = {"); + +for line in lines: + print(line); + +print("};\n"); + +print("static int cmark_entities_root = " + str(mid) + ";"); + +print(""" +#ifdef __cplusplus +} +#endif + +#endif +""") -- cgit 0.0.5-2-1-g0f52 From 0c439ac3ab8c59a90277daad0c2ece5e937a6528 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 13:04:49 -0700 Subject: Added explanatory note about entities.h in Makefile. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 23a6a6c0ad..10d4e98e7a 100644 --- a/Makefile +++ b/Makefile @@ -111,6 +111,8 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re esac re2c --case-insensitive -b -i --no-generation-date -o $@ $< +# We include entities.h in the repository, so normally this +# doesn't need to be regenerated: $(SRCDIR)/entities.h: tools/make_entities_h.py python3 $< > $@ -- cgit 0.0.5-2-1-g0f52 From 9ae4975fc049de433ad8e2399c391d207208233a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 13:18:31 -0700 Subject: astyle formatting changes. --- src/blocks.c | 2 +- src/buffer.c | 20 +++++++++++--------- src/houdini_html_u.c | 2 +- src/html.c | 4 ++-- src/utf8.c | 6 ++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 2a68f75a10..8c3e18c488 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -613,7 +613,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { parser->offset += container->as.list.marker_offset + - container->as.list.padding; + container->as.list.padding; } else if (parser->blank) { parser->offset = parser->first_nonspace; } else { diff --git a/src/buffer.c b/src/buffer.c index 7d16af84d2..e07fba609f 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -29,18 +29,20 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) cmark_strbuf_grow(buf, initial_size); } -void cmark_strbuf_overflow_err() { +void cmark_strbuf_overflow_err() +{ fprintf(stderr, "String buffer overflow"); abort(); } static inline void -S_strbuf_grow_by(cmark_strbuf *buf, size_t add) { +S_strbuf_grow_by(cmark_strbuf *buf, size_t add) +{ size_t target_size = (size_t)buf->size + add; if (target_size < add /* Integer overflow. */ || target_size > BUFSIZE_MAX /* Truncation overflow. */ - ) { + ) { cmark_strbuf_overflow_err(); return; /* unreachable */ } @@ -74,7 +76,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) if (new_size < (size_t)target_size /* Integer overflow. */ || new_size > BUFSIZE_MAX /* Truncation overflow. */ - ) { + ) { if (target_size >= BUFSIZE_MAX) { /* No space for terminating null byte. */ cmark_strbuf_overflow_err(); @@ -160,7 +162,7 @@ void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t le void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { cmark_strbuf_put(buf, (const unsigned char *)string, - cmark_strbuf_safe_strlen(string)); + cmark_strbuf_safe_strlen(string)); } void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) @@ -175,10 +177,10 @@ void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) va_copy(args, ap); int len = vsnprintf( - (char *)buf->ptr + buf->size, - buf->asize - buf->size, - format, args - ); + (char *)buf->ptr + buf->size, + buf->asize - buf->size, + format, args + ); #ifndef HAVE_C99_SNPRINTF // Assume we're on Windows. if (len < 0) { diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 6f94c2389a..c8e4b93314 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -29,7 +29,7 @@ S_lookup(int i, unsigned long key) return cmark_entities[i].bytes; } else { int next = key < cmark_entities[i].value ? - cmark_entities[i].less : cmark_entities[i].greater; + cmark_entities[i].less : cmark_entities[i].greater; if (next == 0) { return NULL; } else { diff --git a/src/html.c b/src/html.c index a30bbca1e2..69e2d23c6f 100644 --- a/src/html.c +++ b/src/html.c @@ -251,7 +251,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { cmark_strbuf_puts(html, "as.link.url.data, - node->as.link.url.len); + node->as.link.url.len); if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); @@ -269,7 +269,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { cmark_strbuf_puts(html, "as.link.url.data, - node->as.link.url.len); + node->as.link.url.len); cmark_strbuf_puts(html, "\" alt=\""); state->plain = node; diff --git a/src/utf8.c b/src/utf8.c index a4449dd256..f572042397 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -134,14 +134,12 @@ void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) break; } i += charlen; - } - else if (line[i] == '\0') { + } else if (line[i] == '\0') { // ASCII NUL is technically valid but rejected // for security reasons. charlen = 1; break; - } - else { + } else { i++; } -- cgit 0.0.5-2-1-g0f52 From 9f1bb45d9b1a43daa229714d4eb83e981a187f92 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 13:24:05 -0700 Subject: entities: Make the first entity in the array (TripleDot) work. We now use -1 instead of 0 to indicate leaf nodes. --- src/entities.h | 2204 +++++++++++++++++++++++----------------------- src/houdini_html_u.c | 2 +- tools/make_entities_h.py | 6 +- 3 files changed, 1106 insertions(+), 1106 deletions(-) diff --git a/src/entities.h b/src/entities.h index 6125f23e08..28e2ccde86 100644 --- a/src/entities.h +++ b/src/entities.h @@ -16,2131 +16,2131 @@ struct cmark_entity_node { #define CMARK_ENTITY_MAX_LENGTH 31 static struct cmark_entity_node cmark_entities[] = { -{132476, (unsigned char*)"\342\203\233", 0, 0}, /* ⃛ */ -{5862221, (unsigned char*)"\342\205\205", 0, 0}, /* ⅅ */ +{132476, (unsigned char*)"\342\203\233", -1, -1}, /* ⃛ */ +{5862221, (unsigned char*)"\342\205\205", 0, -1}, /* ⅅ */ {5862336, (unsigned char*)"\76", 1, 3}, /* > */ -{5862355, (unsigned char*)"\342\213\231", 0, 0}, /* ⋙ */ +{5862355, (unsigned char*)"\342\213\231", -1, -1}, /* ⋙ */ {5862368, (unsigned char*)"\342\211\253", 2, 6}, /* ≫ */ -{5862427, (unsigned char*)"\342\204\221", 0, 0}, /* ℑ */ +{5862427, (unsigned char*)"\342\204\221", -1, -1}, /* ℑ */ {5862501, (unsigned char*)"\74", 5, 7}, /* < */ -{5862525, (unsigned char*)"\342\213\230", 0, 0}, /* ⋘ */ +{5862525, (unsigned char*)"\342\213\230", -1, -1}, /* ⋘ */ {5862533, (unsigned char*)"\342\211\252", 4, 12}, /* ≪ */ -{5862567, (unsigned char*)"\316\234", 0, 0}, /* Μ */ +{5862567, (unsigned char*)"\316\234", -1, -1}, /* Μ */ {5862600, (unsigned char*)"\316\235", 9, 11}, /* Ν */ -{5862630, (unsigned char*)"\342\251\224", 0, 0}, /* ⩔ */ +{5862630, (unsigned char*)"\342\251\224", -1, -1}, /* ⩔ */ {5862654, (unsigned char*)"\316\240", 10, 14}, /* Π */ -{5862663, (unsigned char*)"\342\252\273", 0, 0}, /* ⪻ */ +{5862663, (unsigned char*)"\342\252\273", -1, -1}, /* ⪻ */ {5862716, (unsigned char*)"\342\204\234", 13, 15}, /* ℜ */ -{5862747, (unsigned char*)"\342\252\274", 0, 0}, /* ⪼ */ +{5862747, (unsigned char*)"\342\252\274", -1, -1}, /* ⪼ */ {5862918, (unsigned char*)"\316\236", 8, 25}, /* Ξ */ -{5863209, (unsigned char*)"\342\210\276", 0, 0}, /* ∾ */ -{5863212, (unsigned char*)"\342\201\241", 17, 0}, /* ⁡ */ +{5863209, (unsigned char*)"\342\210\276", -1, -1}, /* ∾ */ +{5863212, (unsigned char*)"\342\201\241", 17, -1}, /* ⁡ */ {5863222, (unsigned char*)"\342\211\210", 18, 20}, /* ≈ */ -{5863309, (unsigned char*)"\342\205\206", 0, 0}, /* ⅆ */ +{5863309, (unsigned char*)"\342\205\206", -1, -1}, /* ⅆ */ {5863343, (unsigned char*)"\342\205\207", 19, 23}, /* ⅇ */ -{5863345, (unsigned char*)"\342\252\232", 0, 0}, /* ⪚ */ +{5863345, (unsigned char*)"\342\252\232", -1, -1}, /* ⪚ */ {5863350, (unsigned char*)"\342\252\231", 22, 24}, /* ⪙ */ -{5863377, (unsigned char*)"\342\211\247", 0, 0}, /* ≧ */ +{5863377, (unsigned char*)"\342\211\247", -1, -1}, /* ≧ */ {5863409, (unsigned char*)"\342\211\245", 21, 29}, /* ≥ */ -{5863411, (unsigned char*)"\342\211\253", 0, 0}, /* ≫ */ +{5863411, (unsigned char*)"\342\211\253", -1, -1}, /* ≫ */ {5863416, (unsigned char*)"\342\211\267", 26, 28}, /* ≷ */ -{5863424, (unsigned char*)"\76", 0, 0}, /* > */ +{5863424, (unsigned char*)"\76", -1, -1}, /* > */ {5863473, (unsigned char*)"\342\201\243", 27, 31}, /* ⁣ */ -{5863479, (unsigned char*)"\342\205\210", 0, 0}, /* ⅈ */ +{5863479, (unsigned char*)"\342\205\210", -1, -1}, /* ⅈ */ {5863484, (unsigned char*)"\342\210\210", 30, 32}, /* ∈ */ -{5863490, (unsigned char*)"\342\201\242", 0, 0}, /* ⁢ */ +{5863490, (unsigned char*)"\342\201\242", -1, -1}, /* ⁢ */ {5863542, (unsigned char*)"\342\211\246", 16, 50}, /* ≦ */ -{5863574, (unsigned char*)"\342\211\244", 0, 0}, /* ≤ */ -{5863576, (unsigned char*)"\342\211\266", 34, 0}, /* ≶ */ +{5863574, (unsigned char*)"\342\211\244", -1, -1}, /* ≤ */ +{5863576, (unsigned char*)"\342\211\266", 34, -1}, /* ≶ */ {5863581, (unsigned char*)"\342\211\252", 35, 37}, /* ≪ */ -{5863589, (unsigned char*)"\74", 0, 0}, /* < */ +{5863589, (unsigned char*)"\74", -1, -1}, /* < */ {5863618, (unsigned char*)"\342\210\223", 36, 40}, /* ∓ */ -{5863623, (unsigned char*)"\316\274", 0, 0}, /* μ */ +{5863623, (unsigned char*)"\316\274", -1, -1}, /* μ */ {5863640, (unsigned char*)"\342\211\240", 39, 41}, /* ≠ */ -{5863644, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{5863644, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ {5863655, (unsigned char*)"\342\223\210", 38, 46}, /* Ⓢ */ -{5863656, (unsigned char*)"\316\275", 0, 0}, /* ν */ +{5863656, (unsigned char*)"\316\275", -1, -1}, /* ν */ {5863686, (unsigned char*)"\342\210\250", 43, 45}, /* ∨ */ -{5863710, (unsigned char*)"\317\200", 0, 0}, /* π */ +{5863710, (unsigned char*)"\317\200", -1, -1}, /* π */ {5863714, (unsigned char*)"\302\261", 44, 48}, /* ± */ -{5863719, (unsigned char*)"\342\211\272", 0, 0}, /* ≺ */ +{5863719, (unsigned char*)"\342\211\272", -1, -1}, /* ≺ */ {5863791, (unsigned char*)"\342\204\236", 47, 49}, /* ℞ */ -{5863803, (unsigned char*)"\342\211\273", 0, 0}, /* ≻ */ +{5863803, (unsigned char*)"\342\211\273", -1, -1}, /* ≻ */ {5863948, (unsigned char*)"\342\204\230", 42, 58}, /* ℘ */ -{5863950, (unsigned char*)"\342\211\200", 0, 0}, /* ≀ */ +{5863950, (unsigned char*)"\342\211\200", -1, -1}, /* ≀ */ {5863974, (unsigned char*)"\316\276", 51, 53}, /* ξ */ -{9572911, (unsigned char*)"\342\246\225", 0, 0}, /* ⦕ */ +{9572911, (unsigned char*)"\342\246\225", -1, -1}, /* ⦕ */ {9807607, (unsigned char*)"\342\245\270", 52, 56}, /* ⥸ */ -{9810777, (unsigned char*)"\342\213\227", 0, 0}, /* ⋗ */ +{9810777, (unsigned char*)"\342\213\227", -1, -1}, /* ⋗ */ {9826907, (unsigned char*)"\342\211\263", 55, 57}, /* ≳ */ -{20607280, (unsigned char*)"\342\253\206", 0, 0}, /* ⫆ */ +{20607280, (unsigned char*)"\342\253\206", -1, -1}, /* ⫆ */ {20616685, (unsigned char*)"\342\212\213", 54, 62}, /* ⊋ */ -{22422014, (unsigned char*)"\342\253\206\314\270", 0, 0}, /* ⫆̸ */ +{22422014, (unsigned char*)"\342\253\206\314\270", -1, -1}, /* ⫆̸ */ {26105612, (unsigned char*)"\342\200\212", 59, 61}, /*   */ -{26239332, (unsigned char*)"\342\204\213", 0, 0}, /* ℋ */ +{26239332, (unsigned char*)"\342\204\213", -1, -1}, /* ℋ */ {26413280, (unsigned char*)"\321\212", 60, 64}, /* ъ */ -{28586989, (unsigned char*)"\342\211\211", 0, 0}, /* ≉ */ +{28586989, (unsigned char*)"\342\211\211", -1, -1}, /* ≉ */ {30561836, (unsigned char*)"\342\231\245", 63, 65}, /* ♥ */ -{30950243, (unsigned char*)"\342\200\246", 0, 0}, /* … */ +{30950243, (unsigned char*)"\342\200\246", -1, -1}, /* … */ {31156260, (unsigned char*)"\342\212\271", 33, 99}, /* ⊹ */ -{31475919, (unsigned char*)"\342\244\217", 0, 0}, /* ⤏ */ -{33509884, (unsigned char*)"\342\231\256", 67, 0}, /* ♮ */ +{31475919, (unsigned char*)"\342\244\217", -1, -1}, /* ⤏ */ +{33509884, (unsigned char*)"\342\231\256", 67, -1}, /* ♮ */ {37287965, (unsigned char*)"\342\213\255", 68, 70}, /* ⋭ */ -{42854073, (unsigned char*)"\342\210\273", 0, 0}, /* ∻ */ +{42854073, (unsigned char*)"\342\210\273", -1, -1}, /* ∻ */ {43013923, (unsigned char*)"\342\200\225", 69, 73}, /* ― */ -{47541480, (unsigned char*)"\342\204\217", 0, 0}, /* ℏ */ +{47541480, (unsigned char*)"\342\204\217", -1, -1}, /* ℏ */ {47847360, (unsigned char*)"\304\247", 72, 74}, /* ħ */ -{54319189, (unsigned char*)"\342\201\203", 0, 0}, /* ⁃ */ +{54319189, (unsigned char*)"\342\201\203", -1, -1}, /* ⁃ */ {54807921, (unsigned char*)"\342\200\220", 71, 79}, /* ‐ */ -{59944000, (unsigned char*)"\342\245\260", 0, 0}, /* ⥰ */ +{59944000, (unsigned char*)"\342\245\260", -1, -1}, /* ⥰ */ {64038461, (unsigned char*)"\342\216\264", 76, 78}, /* ⎴ */ -{65028672, (unsigned char*)"\303\255", 0, 0}, /* í */ +{65028672, (unsigned char*)"\303\255", -1, -1}, /* í */ {66296283, (unsigned char*)"\342\210\253", 77, 81}, /* ∫ */ -{68537958, (unsigned char*)"\342\211\267", 0, 0}, /* ≷ */ +{68537958, (unsigned char*)"\342\211\267", -1, -1}, /* ≷ */ {72661539, (unsigned char*)"\303\254", 80, 82}, /* ì */ -{74718411, (unsigned char*)"\342\250\214", 0, 0}, /* ⨌ */ +{74718411, (unsigned char*)"\342\250\214", -1, -1}, /* ⨌ */ {74894658, (unsigned char*)"\342\247\234", 75, 91}, /* ⧜ */ -{80423799, (unsigned char*)"\342\204\205", 0, 0}, /* ℅ */ +{80423799, (unsigned char*)"\342\204\205", -1, -1}, /* ℅ */ {80858226, (unsigned char*)"\304\261", 84, 86}, /* ı */ -{81036352, (unsigned char*)"\342\212\272", 0, 0}, /* ⊺ */ +{81036352, (unsigned char*)"\342\212\272", -1, -1}, /* ⊺ */ {84632832, (unsigned char*)"\302\277", 85, 89}, /* ¿ */ -{85198288, (unsigned char*)"\342\245\231", 0, 0}, /* ⥙ */ +{85198288, (unsigned char*)"\342\245\231", -1, -1}, /* ⥙ */ {86583233, (unsigned char*)"\342\213\263", 88, 90}, /* ⋳ */ -{87766464, (unsigned char*)"\304\251", 0, 0}, /* ĩ */ +{87766464, (unsigned char*)"\304\251", -1, -1}, /* ĩ */ {97324795, (unsigned char*)"\342\251\230", 87, 95}, /* ⩘ */ -{98090803, (unsigned char*)"\342\200\241", 0, 0}, /* ‡ */ +{98090803, (unsigned char*)"\342\200\241", -1, -1}, /* ‡ */ {107934141, (unsigned char*)"\342\211\214", 92, 94}, /* ≌ */ -{113713274, (unsigned char*)"\342\237\247", 0, 0}, /* ⟧ */ +{113713274, (unsigned char*)"\342\237\247", -1, -1}, /* ⟧ */ {115173945, (unsigned char*)"\342\251\267", 93, 97}, /* ⩷ */ -{118531391, (unsigned char*)"\342\206\275", 0, 0}, /* ↽ */ +{118531391, (unsigned char*)"\342\206\275", -1, -1}, /* ↽ */ {125578709, (unsigned char*)"\321\230", 96, 98}, /* ј */ -{143760584, (unsigned char*)"\317\260", 0, 0}, /* ϰ */ +{143760584, (unsigned char*)"\317\260", -1, -1}, /* ϰ */ {145074172, (unsigned char*)"\342\244\233", 83, 116}, /* ⤛ */ -{145724305, (unsigned char*)"\304\267", 0, 0}, /* ķ */ -{147916603, (unsigned char*)"\342\212\225", 100, 0}, /* ⊕ */ +{145724305, (unsigned char*)"\304\267", -1, -1}, /* ķ */ +{147916603, (unsigned char*)"\342\212\225", 100, -1}, /* ⊕ */ {150936129, (unsigned char*)"\304\270", 101, 103}, /* ĸ */ -{151795502, (unsigned char*)"\342\246\261", 0, 0}, /* ⦱ */ +{151795502, (unsigned char*)"\342\246\261", -1, -1}, /* ⦱ */ {165680359, (unsigned char*)"\342\213\253", 102, 106}, /* ⋫ */ -{167411619, (unsigned char*)"\342\206\227", 0, 0}, /* ↗ */ +{167411619, (unsigned char*)"\342\206\227", -1, -1}, /* ↗ */ {182434851, (unsigned char*)"\304\272", 105, 107}, /* ĺ */ -{182574714, (unsigned char*)"\342\204\222", 0, 0}, /* ℒ */ +{182574714, (unsigned char*)"\342\204\222", -1, -1}, /* ℒ */ {182772998, (unsigned char*)"\316\273", 104, 112}, /* λ */ -{182814648, (unsigned char*)"\342\237\250", 0, 0}, /* ⟨ */ +{182814648, (unsigned char*)"\342\237\250", -1, -1}, /* ⟨ */ {182970191, (unsigned char*)"\342\244\235", 109, 111}, /* ⤝ */ -{182970249, (unsigned char*)"\342\206\251", 0, 0}, /* ↩ */ +{182970249, (unsigned char*)"\342\206\251", -1, -1}, /* ↩ */ {182970386, (unsigned char*)"\342\206\253", 110, 114}, /* ↫ */ -{182970514, (unsigned char*)"\342\244\271", 0, 0}, /* ⤹ */ +{182970514, (unsigned char*)"\342\244\271", -1, -1}, /* ⤹ */ {182970646, (unsigned char*)"\342\206\242", 113, 115}, /* ↢ */ -{183023644, (unsigned char*)"\342\244\231", 0, 0}, /* ⤙ */ +{183023644, (unsigned char*)"\342\244\231", -1, -1}, /* ⤙ */ {184137486, (unsigned char*)"\173", 108, 124}, /* { */ -{184137492, (unsigned char*)"\133", 0, 0}, /* [ */ +{184137492, (unsigned char*)"\133", -1, -1}, /* [ */ {184731396, (unsigned char*)"\304\276", 117, 119}, /* ľ */ -{184859698, (unsigned char*)"\304\274", 0, 0}, /* ļ */ +{184859698, (unsigned char*)"\304\274", -1, -1}, /* ļ */ {186495580, (unsigned char*)"\342\200\236", 118, 122}, /* „ */ -{187734864, (unsigned char*)"\342\251\277", 0, 0}, /* ⩿ */ +{187734864, (unsigned char*)"\342\251\277", -1, -1}, /* ⩿ */ {187737800, (unsigned char*)"\342\252\223", 121, 123}, /* ⪓ */ -{188577519, (unsigned char*)"\342\245\274", 0, 0}, /* ⥼ */ +{188577519, (unsigned char*)"\342\245\274", -1, -1}, /* ⥼ */ {188681203, (unsigned char*)"\342\214\212", 120, 128}, /* ⌊ */ -{190661197, (unsigned char*)"\342\245\252", 0, 0}, /* ⥪ */ +{190661197, (unsigned char*)"\342\245\252", -1, -1}, /* ⥪ */ {193450403, (unsigned char*)"\46", 125, 127}, /* & */ -{193451170, (unsigned char*)"\320\220", 0, 0}, /* А */ +{193451170, (unsigned char*)"\320\220", -1, -1}, /* А */ {193451262, (unsigned char*)"\360\235\224\204", 126, 130}, /* 𝔄 */ -{193451512, (unsigned char*)"\342\251\223", 0, 0}, /* ⩓ */ +{193451512, (unsigned char*)"\342\251\223", -1, -1}, /* ⩓ */ {193452259, (unsigned char*)"\320\221", 129, 131}, /* Б */ -{193452351, (unsigned char*)"\360\235\224\205", 0, 0}, /* 𝔅 */ +{193452351, (unsigned char*)"\360\235\224\205", -1, -1}, /* 𝔅 */ {193453273, (unsigned char*)"\342\213\222", 66, 199}, /* ⋒ */ -{193453440, (unsigned char*)"\342\204\255", 0, 0}, /* ℭ */ -{193453497, (unsigned char*)"\316\247", 133, 0}, /* Χ */ +{193453440, (unsigned char*)"\342\204\255", -1, -1}, /* ℭ */ +{193453497, (unsigned char*)"\316\247", 133, -1}, /* Χ */ {193453933, (unsigned char*)"\342\213\223", 134, 136}, /* ⋓ */ -{193454437, (unsigned char*)"\320\224", 0, 0}, /* Д */ +{193454437, (unsigned char*)"\320\224", -1, -1}, /* Д */ {193454490, (unsigned char*)"\342\210\207", 135, 139}, /* ∇ */ -{193454529, (unsigned char*)"\360\235\224\207", 0, 0}, /* 𝔇 */ +{193454529, (unsigned char*)"\360\235\224\207", -1, -1}, /* 𝔇 */ {193454783, (unsigned char*)"\305\212", 138, 140}, /* Ŋ */ -{193454828, (unsigned char*)"\302\250", 0, 0}, /* ¨ */ +{193454828, (unsigned char*)"\302\250", -1, -1}, /* ¨ */ {193454982, (unsigned char*)"\303\220", 137, 145}, /* Ð */ -{193455526, (unsigned char*)"\320\255", 0, 0}, /* Э */ +{193455526, (unsigned char*)"\320\255", -1, -1}, /* Э */ {193455618, (unsigned char*)"\360\235\224\210", 142, 144}, /* 𝔈 */ -{193456063, (unsigned char*)"\316\227", 0, 0}, /* Η */ +{193456063, (unsigned char*)"\316\227", -1, -1}, /* Η */ {193456615, (unsigned char*)"\320\244", 143, 147}, /* Ф */ -{193456707, (unsigned char*)"\360\235\224\211", 0, 0}, /* 𝔉 */ +{193456707, (unsigned char*)"\360\235\224\211", -1, -1}, /* 𝔉 */ {193457704, (unsigned char*)"\320\223", 146, 148}, /* Г */ -{193457796, (unsigned char*)"\360\235\224\212", 0, 0}, /* 𝔊 */ +{193457796, (unsigned char*)"\360\235\224\212", -1, -1}, /* 𝔊 */ {193458722, (unsigned char*)"\136", 141, 158}, /* ^ */ -{193458885, (unsigned char*)"\342\204\214", 0, 0}, /* ℌ */ -{193459882, (unsigned char*)"\320\230", 150, 0}, /* И */ +{193458885, (unsigned char*)"\342\204\214", -1, -1}, /* ℌ */ +{193459882, (unsigned char*)"\320\230", 150, -1}, /* И */ {193459974, (unsigned char*)"\342\204\221", 151, 153}, /* ℑ */ -{193460240, (unsigned char*)"\342\210\254", 0, 0}, /* ∬ */ +{193460240, (unsigned char*)"\342\210\254", -1, -1}, /* ∬ */ {193460971, (unsigned char*)"\320\231", 152, 156}, /* Й */ -{193461063, (unsigned char*)"\360\235\224\215", 0, 0}, /* 𝔍 */ +{193461063, (unsigned char*)"\360\235\224\215", -1, -1}, /* 𝔍 */ {193462060, (unsigned char*)"\320\232", 155, 157}, /* К */ -{193462152, (unsigned char*)"\360\235\224\216", 0, 0}, /* 𝔎 */ +{193462152, (unsigned char*)"\360\235\224\216", -1, -1}, /* 𝔎 */ {193463149, (unsigned char*)"\320\233", 154, 162}, /* Л */ -{193463241, (unsigned char*)"\360\235\224\217", 0, 0}, /* 𝔏 */ +{193463241, (unsigned char*)"\360\235\224\217", -1, -1}, /* 𝔏 */ {193463660, (unsigned char*)"\342\206\260", 159, 161}, /* ↰ */ -{193464163, (unsigned char*)"\342\244\205", 0, 0}, /* ⤅ */ +{193464163, (unsigned char*)"\342\244\205", -1, -1}, /* ⤅ */ {193464238, (unsigned char*)"\320\234", 160, 164}, /* М */ -{193464330, (unsigned char*)"\360\235\224\220", 0, 0}, /* 𝔐 */ +{193464330, (unsigned char*)"\360\235\224\220", -1, -1}, /* 𝔐 */ {193465327, (unsigned char*)"\320\235", 163, 165}, /* Н */ -{193465419, (unsigned char*)"\360\235\224\221", 0, 0}, /* 𝔑 */ +{193465419, (unsigned char*)"\360\235\224\221", -1, -1}, /* 𝔑 */ {193465718, (unsigned char*)"\342\253\254", 149, 183}, /* ⫬ */ -{193466416, (unsigned char*)"\320\236", 0, 0}, /* О */ -{193466508, (unsigned char*)"\360\235\224\222", 167, 0}, /* 𝔒 */ +{193466416, (unsigned char*)"\320\236", -1, -1}, /* О */ +{193466508, (unsigned char*)"\360\235\224\222", 167, -1}, /* 𝔒 */ {193467505, (unsigned char*)"\320\237", 168, 170}, /* П */ -{193467597, (unsigned char*)"\360\235\224\223", 0, 0}, /* 𝔓 */ +{193467597, (unsigned char*)"\360\235\224\223", -1, -1}, /* 𝔓 */ {193467654, (unsigned char*)"\316\246", 169, 173}, /* Φ */ -{193468017, (unsigned char*)"\316\250", 0, 0}, /* Ψ */ +{193468017, (unsigned char*)"\316\250", -1, -1}, /* Ψ */ {193468643, (unsigned char*)"\302\256", 172, 174}, /* ® */ -{193468686, (unsigned char*)"\360\235\224\224", 0, 0}, /* 𝔔 */ +{193468686, (unsigned char*)"\360\235\224\224", -1, -1}, /* 𝔔 */ {193469683, (unsigned char*)"\320\240", 171, 179}, /* Р */ -{193469775, (unsigned char*)"\342\204\234", 0, 0}, /* ℜ */ +{193469775, (unsigned char*)"\342\204\234", -1, -1}, /* ℜ */ {193469838, (unsigned char*)"\316\241", 176, 178}, /* Ρ */ -{193470194, (unsigned char*)"\342\206\261", 0, 0}, /* ↱ */ +{193470194, (unsigned char*)"\342\206\261", -1, -1}, /* ↱ */ {193470772, (unsigned char*)"\320\241", 177, 181}, /* С */ -{193470864, (unsigned char*)"\360\235\224\226", 0, 0}, /* 𝔖 */ +{193470864, (unsigned char*)"\360\235\224\226", -1, -1}, /* 𝔖 */ {193471343, (unsigned char*)"\342\213\220", 180, 182}, /* ⋐ */ -{193471354, (unsigned char*)"\342\210\221", 0, 0}, /* ∑ */ +{193471354, (unsigned char*)"\342\210\221", -1, -1}, /* ∑ */ {193471357, (unsigned char*)"\342\213\221", 175, 191}, /* ⋑ */ -{193471772, (unsigned char*)"\11", 0, 0}, /* */ +{193471772, (unsigned char*)"\11", -1, -1}, /* */ {193471791, (unsigned char*)"\316\244", 184, 186}, /* Τ */ -{193471861, (unsigned char*)"\320\242", 0, 0}, /* Т */ +{193471861, (unsigned char*)"\320\242", -1, -1}, /* Т */ {193471953, (unsigned char*)"\360\235\224\227", 185, 189}, /* 𝔗 */ -{193472950, (unsigned char*)"\320\243", 0, 0}, /* У */ +{193472950, (unsigned char*)"\320\243", -1, -1}, /* У */ {193473042, (unsigned char*)"\360\235\224\230", 188, 190}, /* 𝔘 */ -{193474039, (unsigned char*)"\320\222", 0, 0}, /* В */ +{193474039, (unsigned char*)"\320\222", -1, -1}, /* В */ {193474085, (unsigned char*)"\342\213\201", 187, 195}, /* ⋁ */ -{193474131, (unsigned char*)"\360\235\224\231", 0, 0}, /* 𝔙 */ +{193474131, (unsigned char*)"\360\235\224\231", -1, -1}, /* 𝔙 */ {193475220, (unsigned char*)"\360\235\224\232", 192, 194}, /* 𝔚 */ -{193476309, (unsigned char*)"\360\235\224\233", 0, 0}, /* 𝔛 */ +{193476309, (unsigned char*)"\360\235\224\233", -1, -1}, /* 𝔛 */ {193477306, (unsigned char*)"\320\253", 193, 197}, /* Ы */ -{193477398, (unsigned char*)"\360\235\224\234", 0, 0}, /* 𝔜 */ +{193477398, (unsigned char*)"\360\235\224\234", -1, -1}, /* 𝔜 */ {193478395, (unsigned char*)"\320\227", 196, 198}, /* З */ -{193478487, (unsigned char*)"\342\204\250", 0, 0}, /* ℨ */ +{193478487, (unsigned char*)"\342\204\250", -1, -1}, /* ℨ */ {193485966, (unsigned char*)"\342\210\276\314\263", 166, 232}, /* ∾̳ */ -{193485997, (unsigned char*)"\342\210\277", 0, 0}, /* ∿ */ -{193486018, (unsigned char*)"\320\260", 200, 0}, /* а */ +{193485997, (unsigned char*)"\342\210\277", -1, -1}, /* ∿ */ +{193486018, (unsigned char*)"\320\260", 200, -1}, /* а */ {193486110, (unsigned char*)"\360\235\224\236", 201, 203}, /* 𝔞 */ -{193486339, (unsigned char*)"\46", 0, 0}, /* & */ +{193486339, (unsigned char*)"\46", -1, -1}, /* & */ {193486360, (unsigned char*)"\342\210\247", 202, 206}, /* ∧ */ -{193486363, (unsigned char*)"\342\210\240", 0, 0}, /* ∠ */ +{193486363, (unsigned char*)"\342\210\240", -1, -1}, /* ∠ */ {193486395, (unsigned char*)"\342\251\260", 205, 207}, /* ⩰ */ -{193486427, (unsigned char*)"\342\211\212", 0, 0}, /* ≊ */ +{193486427, (unsigned char*)"\342\211\212", -1, -1}, /* ≊ */ {193486541, (unsigned char*)"\52", 204, 212}, /* * */ -{193487107, (unsigned char*)"\320\261", 0, 0}, /* б */ +{193487107, (unsigned char*)"\320\261", -1, -1}, /* б */ {193487199, (unsigned char*)"\360\235\224\237", 209, 211}, /* 𝔟 */ -{193487450, (unsigned char*)"\75\342\203\245", 0, 0}, /* =⃥ */ +{193487450, (unsigned char*)"\75\342\203\245", -1, -1}, /* =⃥ */ {193487498, (unsigned char*)"\342\212\245", 210, 214}, /* ⊥ */ -{193488121, (unsigned char*)"\342\210\251", 0, 0}, /* ∩ */ +{193488121, (unsigned char*)"\342\210\251", -1, -1}, /* ∩ */ {193488288, (unsigned char*)"\360\235\224\240", 213, 215}, /* 𝔠 */ -{193488345, (unsigned char*)"\317\207", 0, 0}, /* χ */ +{193488345, (unsigned char*)"\317\207", -1, -1}, /* χ */ {193488387, (unsigned char*)"\342\227\213", 208, 224}, /* ○ */ -{193488781, (unsigned char*)"\342\210\252", 0, 0}, /* ∪ */ +{193488781, (unsigned char*)"\342\210\252", -1, -1}, /* ∪ */ {193489285, (unsigned char*)"\320\264", 217, 219}, /* д */ -{193489333, (unsigned char*)"\302\260", 0, 0}, /* ° */ +{193489333, (unsigned char*)"\302\260", -1, -1}, /* ° */ {193489377, (unsigned char*)"\360\235\224\241", 218, 222}, /* 𝔡 */ -{193489463, (unsigned char*)"\302\250", 0, 0}, /* ¨ */ +{193489463, (unsigned char*)"\302\250", -1, -1}, /* ¨ */ {193489480, (unsigned char*)"\303\267", 221, 223}, /* ÷ */ -{193489676, (unsigned char*)"\313\231", 0, 0}, /* ˙ */ +{193489676, (unsigned char*)"\313\231", -1, -1}, /* ˙ */ {193490374, (unsigned char*)"\321\215", 220, 228}, /* э */ -{193490466, (unsigned char*)"\360\235\224\242", 0, 0}, /* 𝔢 */ +{193490466, (unsigned char*)"\360\235\224\242", -1, -1}, /* 𝔢 */ {193490500, (unsigned char*)"\342\252\226", 225, 227}, /* ⪖ */ -{193490658, (unsigned char*)"\342\204\223", 0, 0}, /* ℓ */ +{193490658, (unsigned char*)"\342\204\223", -1, -1}, /* ℓ */ {193490665, (unsigned char*)"\342\252\225", 226, 230}, /* ⪕ */ -{193490719, (unsigned char*)"\305\213", 0, 0}, /* ŋ */ +{193490719, (unsigned char*)"\305\213", -1, -1}, /* ŋ */ {193490911, (unsigned char*)"\316\267", 229, 231}, /* η */ -{193490918, (unsigned char*)"\303\260", 0, 0}, /* ð */ +{193490918, (unsigned char*)"\303\260", -1, -1}, /* ð */ {193491463, (unsigned char*)"\321\204", 216, 249}, /* ф */ -{193491549, (unsigned char*)"\342\252\214", 0, 0}, /* ⪌ */ -{193491555, (unsigned char*)"\360\235\224\243", 233, 0}, /* 𝔣 */ +{193491549, (unsigned char*)"\342\252\214", -1, -1}, /* ⪌ */ +{193491555, (unsigned char*)"\360\235\224\243", 233, -1}, /* 𝔣 */ {193492477, (unsigned char*)"\342\252\206", 234, 236}, /* ⪆ */ -{193492552, (unsigned char*)"\320\263", 0, 0}, /* г */ +{193492552, (unsigned char*)"\320\263", -1, -1}, /* г */ {193492605, (unsigned char*)"\342\213\233", 235, 239}, /* ⋛ */ -{193492610, (unsigned char*)"\342\211\245", 0, 0}, /* ≥ */ +{193492610, (unsigned char*)"\342\211\245", -1, -1}, /* ≥ */ {193492612, (unsigned char*)"\342\251\276", 238, 240}, /* ⩾ */ -{193492644, (unsigned char*)"\360\235\224\244", 0, 0}, /* 𝔤 */ +{193492644, (unsigned char*)"\360\235\224\244", -1, -1}, /* 𝔤 */ {193492666, (unsigned char*)"\342\213\231", 237, 245}, /* ⋙ */ -{193492797, (unsigned char*)"\342\252\222", 0, 0}, /* ⪒ */ +{193492797, (unsigned char*)"\342\252\222", -1, -1}, /* ⪒ */ {193492825, (unsigned char*)"\342\252\245", 242, 244}, /* ⪥ */ -{193492834, (unsigned char*)"\342\252\244", 0, 0}, /* ⪤ */ +{193492834, (unsigned char*)"\342\252\244", -1, -1}, /* ⪤ */ {193492863, (unsigned char*)"\342\211\251", 243, 247}, /* ≩ */ -{193492895, (unsigned char*)"\342\252\210", 0, 0}, /* ⪈ */ +{193492895, (unsigned char*)"\342\252\210", -1, -1}, /* ⪈ */ {193493733, (unsigned char*)"\360\235\224\245", 246, 248}, /* 𝔥 */ -{193494730, (unsigned char*)"\320\270", 0, 0}, /* и */ +{193494730, (unsigned char*)"\320\270", -1, -1}, /* и */ {193494810, (unsigned char*)"\342\207\224", 241, 257}, /* ⇔ */ -{193494822, (unsigned char*)"\360\235\224\246", 0, 0}, /* 𝔦 */ +{193494822, (unsigned char*)"\360\235\224\246", -1, -1}, /* 𝔦 */ {193495088, (unsigned char*)"\342\210\253", 250, 252}, /* ∫ */ -{193495819, (unsigned char*)"\320\271", 0, 0}, /* й */ +{193495819, (unsigned char*)"\320\271", -1, -1}, /* й */ {193495911, (unsigned char*)"\360\235\224\247", 251, 255}, /* 𝔧 */ -{193496908, (unsigned char*)"\320\272", 0, 0}, /* к */ +{193496908, (unsigned char*)"\320\272", -1, -1}, /* к */ {193496989, (unsigned char*)"\342\252\213", 254, 256}, /* ⪋ */ -{193497000, (unsigned char*)"\360\235\224\250", 0, 0}, /* 𝔨 */ +{193497000, (unsigned char*)"\360\235\224\250", -1, -1}, /* 𝔨 */ {193497922, (unsigned char*)"\342\252\205", 253, 261}, /* ⪅ */ -{193497926, (unsigned char*)"\342\252\253", 0, 0}, /* ⪫ */ +{193497926, (unsigned char*)"\342\252\253", -1, -1}, /* ⪫ */ {193497997, (unsigned char*)"\320\273", 258, 260}, /* л */ -{193498045, (unsigned char*)"\342\213\232", 0, 0}, /* ⋚ */ +{193498045, (unsigned char*)"\342\213\232", -1, -1}, /* ⋚ */ {193498055, (unsigned char*)"\342\211\244", 259, 263}, /* ≤ */ -{193498057, (unsigned char*)"\342\251\275", 0, 0}, /* ⩽ */ +{193498057, (unsigned char*)"\342\251\275", -1, -1}, /* ⩽ */ {193498077, (unsigned char*)"\342\252\221", 262, 264}, /* ⪑ */ -{193498089, (unsigned char*)"\360\235\224\251", 0, 0}, /* 𝔩 */ +{193498089, (unsigned char*)"\360\235\224\251", -1, -1}, /* 𝔩 */ {193498308, (unsigned char*)"\342\211\250", 132, 398}, /* ≨ */ -{193498340, (unsigned char*)"\342\252\207", 0, 0}, /* ⪇ */ -{193498394, (unsigned char*)"\342\227\212", 266, 0}, /* ◊ */ +{193498340, (unsigned char*)"\342\252\207", -1, -1}, /* ⪇ */ +{193498394, (unsigned char*)"\342\227\212", 266, -1}, /* ◊ */ {193498480, (unsigned char*)"\342\200\216", 267, 269}, /* ‎ */ -{193498508, (unsigned char*)"\342\206\260", 0, 0}, /* ↰ */ +{193498508, (unsigned char*)"\342\206\260", -1, -1}, /* ↰ */ {193499011, (unsigned char*)"\342\206\246", 268, 272}, /* ↦ */ -{193499086, (unsigned char*)"\320\274", 0, 0}, /* м */ +{193499086, (unsigned char*)"\320\274", -1, -1}, /* м */ {193499178, (unsigned char*)"\360\235\224\252", 271, 273}, /* 𝔪 */ -{193499233, (unsigned char*)"\342\213\231\314\270", 0, 0}, /* ⋙̸ */ +{193499233, (unsigned char*)"\342\213\231\314\270", -1, -1}, /* ⋙̸ */ {193499241, (unsigned char*)"\342\204\247", 270, 278}, /* ℧ */ -{193499246, (unsigned char*)"\342\211\253\342\203\222", 0, 0}, /* ≫⃒ */ +{193499246, (unsigned char*)"\342\211\253\342\203\222", -1, -1}, /* ≫⃒ */ {193499263, (unsigned char*)"\342\210\243", 275, 277}, /* ∣ */ -{193499403, (unsigned char*)"\342\213\230\314\270", 0, 0}, /* ⋘̸ */ +{193499403, (unsigned char*)"\342\213\230\314\270", -1, -1}, /* ⋘̸ */ {193499411, (unsigned char*)"\342\211\252\342\203\222", 276, 280}, /* ≪⃒ */ -{193500100, (unsigned char*)"\342\211\211", 0, 0}, /* ≉ */ +{193500100, (unsigned char*)"\342\211\211", -1, -1}, /* ≉ */ {193500175, (unsigned char*)"\320\275", 279, 281}, /* н */ -{193500255, (unsigned char*)"\342\211\247\314\270", 0, 0}, /* ≧̸ */ +{193500255, (unsigned char*)"\342\211\247\314\270", -1, -1}, /* ≧̸ */ {193500267, (unsigned char*)"\360\235\224\253", 274, 291}, /* 𝔫 */ -{193500287, (unsigned char*)"\342\211\261", 0, 0}, /* ≱ */ -{193500302, (unsigned char*)"\342\211\257", 283, 0}, /* ≯ */ +{193500287, (unsigned char*)"\342\211\261", -1, -1}, /* ≱ */ +{193500302, (unsigned char*)"\342\211\257", 283, -1}, /* ≯ */ {193500367, (unsigned char*)"\342\213\274", 284, 286}, /* ⋼ */ -{193500370, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{193500370, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ {193500420, (unsigned char*)"\342\211\246\314\270", 285, 289}, /* ≦̸ */ -{193500452, (unsigned char*)"\342\211\260", 0, 0}, /* ≰ */ +{193500452, (unsigned char*)"\342\211\260", -1, -1}, /* ≰ */ {193500467, (unsigned char*)"\342\211\256", 288, 290}, /* ≮ */ -{193500566, (unsigned char*)"\302\254", 0, 0}, /* ¬ */ +{193500566, (unsigned char*)"\302\254", -1, -1}, /* ¬ */ {193500597, (unsigned char*)"\342\212\200", 287, 295}, /* ⊀ */ -{193500681, (unsigned char*)"\342\212\201", 0, 0}, /* ⊁ */ +{193500681, (unsigned char*)"\342\212\201", -1, -1}, /* ⊁ */ {193500757, (unsigned char*)"\43", 292, 294}, /* # */ -{193501264, (unsigned char*)"\320\276", 0, 0}, /* о */ +{193501264, (unsigned char*)"\320\276", -1, -1}, /* о */ {193501356, (unsigned char*)"\360\235\224\254", 293, 297}, /* 𝔬 */ -{193501391, (unsigned char*)"\342\247\201", 0, 0}, /* ⧁ */ +{193501391, (unsigned char*)"\342\247\201", -1, -1}, /* ⧁ */ {193501417, (unsigned char*)"\316\251", 296, 298}, /* Ω */ -{193501556, (unsigned char*)"\342\247\200", 0, 0}, /* ⧀ */ +{193501556, (unsigned char*)"\342\247\200", -1, -1}, /* ⧀ */ {193501738, (unsigned char*)"\342\251\235", 282, 316}, /* ⩝ */ -{193501756, (unsigned char*)"\342\251\233", 0, 0}, /* ⩛ */ -{193502280, (unsigned char*)"\342\210\245", 300, 0}, /* ∥ */ +{193501756, (unsigned char*)"\342\251\233", -1, -1}, /* ⩛ */ +{193502280, (unsigned char*)"\342\210\245", 300, -1}, /* ∥ */ {193502353, (unsigned char*)"\320\277", 301, 303}, /* п */ -{193502445, (unsigned char*)"\360\235\224\255", 0, 0}, /* 𝔭 */ +{193502445, (unsigned char*)"\360\235\224\255", -1, -1}, /* 𝔭 */ {193502502, (unsigned char*)"\317\206", 302, 306}, /* φ */ -{193502548, (unsigned char*)"\317\226", 0, 0}, /* ϖ */ +{193502548, (unsigned char*)"\317\226", -1, -1}, /* ϖ */ {193502796, (unsigned char*)"\342\252\263", 305, 307}, /* ⪳ */ -{193502828, (unsigned char*)"\342\252\257", 0, 0}, /* ⪯ */ +{193502828, (unsigned char*)"\342\252\257", -1, -1}, /* ⪯ */ {193502865, (unsigned char*)"\317\210", 304, 312}, /* ψ */ -{193503534, (unsigned char*)"\360\235\224\256", 0, 0}, /* 𝔮 */ +{193503534, (unsigned char*)"\360\235\224\256", -1, -1}, /* 𝔮 */ {193504531, (unsigned char*)"\321\200", 309, 311}, /* р */ -{193504579, (unsigned char*)"\302\256", 0, 0}, /* ® */ +{193504579, (unsigned char*)"\302\256", -1, -1}, /* ® */ {193504623, (unsigned char*)"\360\235\224\257", 310, 314}, /* 𝔯 */ -{193504686, (unsigned char*)"\317\201", 0, 0}, /* ρ */ +{193504686, (unsigned char*)"\317\201", -1, -1}, /* ρ */ {193504816, (unsigned char*)"\342\200\217", 313, 315}, /* ‏ */ -{193505042, (unsigned char*)"\342\206\261", 0, 0}, /* ↱ */ +{193505042, (unsigned char*)"\342\206\261", -1, -1}, /* ↱ */ {193505568, (unsigned char*)"\342\252\264", 308, 324}, /* ⪴ */ -{193505600, (unsigned char*)"\342\252\260", 0, 0}, /* ⪰ */ +{193505600, (unsigned char*)"\342\252\260", -1, -1}, /* ⪰ */ {193505620, (unsigned char*)"\321\201", 317, 319}, /* с */ -{193505712, (unsigned char*)"\360\235\224\260", 0, 0}, /* 𝔰 */ +{193505712, (unsigned char*)"\360\235\224\260", -1, -1}, /* 𝔰 */ {193505785, (unsigned char*)"\302\255", 318, 322}, /* ­ */ -{193505806, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{193505806, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ {193505945, (unsigned char*)"\342\252\252", 321, 323}, /* ⪪ */ -{193506003, (unsigned char*)"\57", 0, 0}, /* / */ +{193506003, (unsigned char*)"\57", -1, -1}, /* / */ {193506078, (unsigned char*)"\342\226\241", 320, 328}, /* □ */ -{193506191, (unsigned char*)"\342\212\202", 0, 0}, /* ⊂ */ +{193506191, (unsigned char*)"\342\212\202", -1, -1}, /* ⊂ */ {193506202, (unsigned char*)"\342\210\221", 325, 327}, /* ∑ */ -{193506205, (unsigned char*)"\342\212\203", 0, 0}, /* ⊃ */ +{193506205, (unsigned char*)"\342\212\203", -1, -1}, /* ⊃ */ {193506639, (unsigned char*)"\317\204", 326, 330}, /* τ */ -{193506709, (unsigned char*)"\321\202", 0, 0}, /* т */ +{193506709, (unsigned char*)"\321\202", -1, -1}, /* т */ {193506801, (unsigned char*)"\360\235\224\261", 329, 331}, /* 𝔱 */ -{193507096, (unsigned char*)"\342\212\244", 0, 0}, /* ⊤ */ +{193507096, (unsigned char*)"\342\212\244", -1, -1}, /* ⊤ */ {193507798, (unsigned char*)"\321\203", 299, 365}, /* у */ -{193507890, (unsigned char*)"\360\235\224\262", 0, 0}, /* 𝔲 */ -{193508115, (unsigned char*)"\302\250", 333, 0}, /* ¨ */ +{193507890, (unsigned char*)"\360\235\224\262", -1, -1}, /* 𝔲 */ +{193508115, (unsigned char*)"\302\250", 333, -1}, /* ¨ */ {193508887, (unsigned char*)"\320\262", 334, 336}, /* в */ -{193508933, (unsigned char*)"\342\210\250", 0, 0}, /* ∨ */ +{193508933, (unsigned char*)"\342\210\250", -1, -1}, /* ∨ */ {193508979, (unsigned char*)"\360\235\224\263", 335, 339}, /* 𝔳 */ -{193510068, (unsigned char*)"\360\235\224\264", 0, 0}, /* 𝔴 */ +{193510068, (unsigned char*)"\360\235\224\264", -1, -1}, /* 𝔴 */ {193511157, (unsigned char*)"\360\235\224\265", 338, 340}, /* 𝔵 */ -{193512154, (unsigned char*)"\321\213", 0, 0}, /* ы */ +{193512154, (unsigned char*)"\321\213", -1, -1}, /* ы */ {193512209, (unsigned char*)"\302\245", 337, 345}, /* ¥ */ -{193512246, (unsigned char*)"\360\235\224\266", 0, 0}, /* 𝔶 */ +{193512246, (unsigned char*)"\360\235\224\266", -1, -1}, /* 𝔶 */ {193513243, (unsigned char*)"\320\267", 342, 344}, /* з */ -{193513335, (unsigned char*)"\360\235\224\267", 0, 0}, /* 𝔷 */ +{193513335, (unsigned char*)"\360\235\224\267", -1, -1}, /* 𝔷 */ {193513888, (unsigned char*)"\342\200\215", 343, 347}, /* ‍ */ -{194365619, (unsigned char*)"\342\210\204", 0, 0}, /* ∄ */ +{194365619, (unsigned char*)"\342\210\204", -1, -1}, /* ∄ */ {195637820, (unsigned char*)"\342\245\253", 346, 348}, /* ⥫ */ -{196862862, (unsigned char*)"\305\200", 0, 0}, /* ŀ */ +{196862862, (unsigned char*)"\305\200", -1, -1}, /* ŀ */ {197097129, (unsigned char*)"\342\216\260", 341, 357}, /* ⎰ */ -{199495172, (unsigned char*)"\342\250\255", 0, 0}, /* ⨭ */ +{199495172, (unsigned char*)"\342\250\255", -1, -1}, /* ⨭ */ {199734687, (unsigned char*)"\342\210\227", 350, 352}, /* ∗ */ -{199735180, (unsigned char*)"\137", 0, 0}, /* _ */ +{199735180, (unsigned char*)"\137", -1, -1}, /* _ */ {200148276, (unsigned char*)"\342\246\223", 351, 355}, /* ⦓ */ -{202753346, (unsigned char*)"\342\245\255", 0, 0}, /* ⥭ */ +{202753346, (unsigned char*)"\342\245\255", -1, -1}, /* ⥭ */ {203705242, (unsigned char*)"\342\200\271", 354, 356}, /* ‹ */ -{204284395, (unsigned char*)"\342\200\232", 0, 0}, /* ‚ */ +{204284395, (unsigned char*)"\342\200\232", -1, -1}, /* ‚ */ {204388932, (unsigned char*)"\305\202", 353, 361}, /* ł */ -{205058880, (unsigned char*)"\342\211\204", 0, 0}, /* ≄ */ +{205058880, (unsigned char*)"\342\211\204", -1, -1}, /* ≄ */ {205143273, (unsigned char*)"\342\213\213", 358, 360}, /* ⋋ */ -{205173779, (unsigned char*)"\342\213\211", 0, 0}, /* ⋉ */ +{205173779, (unsigned char*)"\342\213\211", -1, -1}, /* ⋉ */ {205268950, (unsigned char*)"\342\245\266", 359, 363}, /* ⥶ */ -{205465498, (unsigned char*)"\342\246\226", 0, 0}, /* ⦖ */ +{205465498, (unsigned char*)"\342\246\226", -1, -1}, /* ⦖ */ {207854529, (unsigned char*)"\342\246\250", 362, 364}, /* ⦨ */ -{207854530, (unsigned char*)"\342\246\251", 0, 0}, /* ⦩ */ +{207854530, (unsigned char*)"\342\246\251", -1, -1}, /* ⦩ */ {207854531, (unsigned char*)"\342\246\252", 349, 382}, /* ⦪ */ -{207854532, (unsigned char*)"\342\246\253", 0, 0}, /* ⦫ */ -{207854533, (unsigned char*)"\342\246\254", 366, 0}, /* ⦬ */ +{207854532, (unsigned char*)"\342\246\253", -1, -1}, /* ⦫ */ +{207854533, (unsigned char*)"\342\246\254", 366, -1}, /* ⦬ */ {207854534, (unsigned char*)"\342\246\255", 367, 369}, /* ⦭ */ -{207854535, (unsigned char*)"\342\246\256", 0, 0}, /* ⦮ */ +{207854535, (unsigned char*)"\342\246\256", -1, -1}, /* ⦮ */ {207854536, (unsigned char*)"\342\246\257", 368, 372}, /* ⦯ */ -{213837927, (unsigned char*)"\303\206", 0, 0}, /* Æ */ +{213837927, (unsigned char*)"\303\206", -1, -1}, /* Æ */ {213839709, (unsigned char*)"\342\246\235", 371, 373}, /* ⦝ */ -{214913063, (unsigned char*)"\303\202", 0, 0}, /*  */ +{214913063, (unsigned char*)"\303\202", -1, -1}, /*  */ {215243787, (unsigned char*)"\316\221", 370, 378}, /* Α */ -{215263241, (unsigned char*)"\304\200", 0, 0}, /* Ā */ +{215263241, (unsigned char*)"\304\200", -1, -1}, /* Ā */ {215342041, (unsigned char*)"\304\204", 375, 377}, /* Ą */ -{215451990, (unsigned char*)"\303\205", 0, 0}, /* Å */ +{215451990, (unsigned char*)"\303\205", -1, -1}, /* Å */ {216633817, (unsigned char*)"\313\230", 376, 380}, /* ˘ */ -{217284905, (unsigned char*)"\304\210", 0, 0}, /* Ĉ */ +{217284905, (unsigned char*)"\304\210", -1, -1}, /* Ĉ */ {217719328, (unsigned char*)"\342\210\267", 379, 381}, /* ∷ */ -{217830543, (unsigned char*)"\342\250\257", 0, 0}, /* ⨯ */ +{217830543, (unsigned char*)"\342\250\257", -1, -1}, /* ⨯ */ {218409531, (unsigned char*)"\342\253\244", 374, 390}, /* ⫤ */ -{218546031, (unsigned char*)"\316\224", 0, 0}, /* Δ */ +{218546031, (unsigned char*)"\316\224", -1, -1}, /* Δ */ {219656747, (unsigned char*)"\303\212", 383, 385}, /* Ê */ -{220006925, (unsigned char*)"\304\222", 0, 0}, /* Ē */ +{220006925, (unsigned char*)"\304\222", -1, -1}, /* Ē */ {220085725, (unsigned char*)"\304\230", 384, 388}, /* Ę */ -{220172381, (unsigned char*)"\342\251\265", 0, 0}, /* ⩵ */ +{220172381, (unsigned char*)"\342\251\265", -1, -1}, /* ⩵ */ {221960904, (unsigned char*)"\316\223", 387, 389}, /* Γ */ -{222028589, (unsigned char*)"\304\234", 0, 0}, /* Ĝ */ +{222028589, (unsigned char*)"\304\234", -1, -1}, /* Ĝ */ {222035257, (unsigned char*)"\342\206\246", 386, 394}, /* ↦ */ -{222097927, (unsigned char*)"\342\226\256", 0, 0}, /* ▮ */ +{222097927, (unsigned char*)"\342\226\256", -1, -1}, /* ▮ */ {222550490, (unsigned char*)"\342\211\211", 391, 393}, /* ≉ */ -{223135681, (unsigned char*)"\313\207", 0, 0}, /* ˇ */ +{223135681, (unsigned char*)"\313\207", -1, -1}, /* ˇ */ {223214510, (unsigned char*)"\304\244", 392, 396}, /* Ĥ */ -{223504980, (unsigned char*)"\304\262", 0, 0}, /* IJ */ +{223504980, (unsigned char*)"\304\262", -1, -1}, /* IJ */ {224364383, (unsigned char*)"\342\250\251", 395, 397}, /* ⨩ */ -{224400431, (unsigned char*)"\303\216", 0, 0}, /* Î */ +{224400431, (unsigned char*)"\303\216", -1, -1}, /* Î */ {224750609, (unsigned char*)"\304\252", 332, 465}, /* Ī */ -{224829409, (unsigned char*)"\304\256", 0, 0}, /* Į */ -{225049002, (unsigned char*)"\320\206", 399, 0}, /* І */ +{224829409, (unsigned char*)"\304\256", -1, -1}, /* Į */ +{225049002, (unsigned char*)"\320\206", 399, -1}, /* І */ {225586352, (unsigned char*)"\304\264", 400, 402}, /* Ĵ */ -{226162576, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{226162576, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ {226234923, (unsigned char*)"\320\204", 401, 405}, /* Є */ -{226707954, (unsigned char*)"\316\232", 0, 0}, /* Κ */ +{226707954, (unsigned char*)"\316\232", -1, -1}, /* Κ */ {230440821, (unsigned char*)"\305\222", 404, 406}, /* Œ */ -{231071751, (unsigned char*)"\52", 0, 0}, /* * */ +{231071751, (unsigned char*)"\52", -1, -1}, /* * */ {231073597, (unsigned char*)"\342\253\260", 403, 411}, /* ⫰ */ -{231074886, (unsigned char*)"\302\267", 0, 0}, /* · */ +{231074886, (unsigned char*)"\302\267", -1, -1}, /* · */ {231452883, (unsigned char*)"\342\212\237", 408, 410}, /* ⊟ */ -{231452885, (unsigned char*)"\342\210\270", 0, 0}, /* ∸ */ +{231452885, (unsigned char*)"\342\210\270", -1, -1}, /* ∸ */ {231515957, (unsigned char*)"\303\224", 409, 413}, /* Ô */ -{231866135, (unsigned char*)"\305\214", 0, 0}, /* Ō */ +{231866135, (unsigned char*)"\305\214", -1, -1}, /* Ō */ {231870606, (unsigned char*)"\316\251", 412, 414}, /* Ω */ -{233240770, (unsigned char*)"\342\200\263", 0, 0}, /* ″ */ +{233240770, (unsigned char*)"\342\200\263", -1, -1}, /* ″ */ {233879102, (unsigned char*)"\342\244\220", 407, 424}, /* ⤐ */ -{234590587, (unsigned char*)"\342\206\220", 0, 0}, /* ← */ -{236259641, (unsigned char*)"\305\234", 416, 0}, /* Ŝ */ +{234590587, (unsigned char*)"\342\206\220", -1, -1}, /* ← */ +{236259641, (unsigned char*)"\305\234", 416, -1}, /* Ŝ */ {236405321, (unsigned char*)"\342\206\232", 417, 419}, /* ↚ */ -{236445872, (unsigned char*)"\303\236", 0, 0}, /* Þ */ +{236445872, (unsigned char*)"\303\236", -1, -1}, /* Þ */ {236472918, (unsigned char*)"\316\243", 418, 422}, /* Σ */ -{236789525, (unsigned char*)"\342\204\242", 0, 0}, /* ™ */ +{236789525, (unsigned char*)"\342\204\242", -1, -1}, /* ™ */ {236834160, (unsigned char*)"\320\213", 421, 423}, /* Ћ */ -{237444644, (unsigned char*)"\342\210\223", 0, 0}, /* ∓ */ +{237444644, (unsigned char*)"\342\210\223", -1, -1}, /* ∓ */ {237620955, (unsigned char*)"\316\230", 420, 428}, /* Θ */ -{237663991, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{237663991, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ {238191401, (unsigned char*)"\342\212\247", 425, 427}, /* ⊧ */ -{238604874, (unsigned char*)"\320\216", 0, 0}, /* Ў */ +{238604874, (unsigned char*)"\320\216", -1, -1}, /* Ў */ {238631483, (unsigned char*)"\303\233", 426, 430}, /* Û */ -{238694683, (unsigned char*)"\342\212\253", 0, 0}, /* ⊫ */ +{238694683, (unsigned char*)"\342\212\253", -1, -1}, /* ⊫ */ {238981661, (unsigned char*)"\305\252", 429, 431}, /* Ū */ -{239026702, (unsigned char*)"\342\213\203", 0, 0}, /* ⋃ */ +{239026702, (unsigned char*)"\342\213\203", -1, -1}, /* ⋃ */ {239060461, (unsigned char*)"\305\262", 415, 449}, /* Ų */ -{239075368, (unsigned char*)"\342\212\245", 0, 0}, /* ⊥ */ -{239170410, (unsigned char*)"\305\256", 433, 0}, /* Ů */ +{239075368, (unsigned char*)"\342\212\245", -1, -1}, /* ⊥ */ +{239170410, (unsigned char*)"\305\256", 433, -1}, /* Ů */ {239844667, (unsigned char*)"\342\212\251", 434, 436}, /* ⊩ */ -{241003325, (unsigned char*)"\305\264", 0, 0}, /* Ŵ */ +{241003325, (unsigned char*)"\305\264", -1, -1}, /* Ŵ */ {241069393, (unsigned char*)"\342\213\200", 435, 439}, /* ⋀ */ -{243375167, (unsigned char*)"\305\266", 0, 0}, /* Ŷ */ +{243375167, (unsigned char*)"\305\266", -1, -1}, /* Ŷ */ {243522155, (unsigned char*)"\342\210\276", 438, 440}, /* ∾ */ -{246524649, (unsigned char*)"\342\212\257", 0, 0}, /* ⊯ */ +{246524649, (unsigned char*)"\342\212\257", -1, -1}, /* ⊯ */ {247674633, (unsigned char*)"\342\212\256", 437, 445}, /* ⊮ */ -{252862535, (unsigned char*)"\303\242", 0, 0}, /* â */ +{252862535, (unsigned char*)"\303\242", -1, -1}, /* â */ {252875671, (unsigned char*)"\302\264", 442, 444}, /* ´ */ -{252937383, (unsigned char*)"\303\246", 0, 0}, /* æ */ +{252937383, (unsigned char*)"\303\246", -1, -1}, /* æ */ {253181551, (unsigned char*)"\342\204\265", 443, 447}, /* ℵ */ -{253193259, (unsigned char*)"\316\261", 0, 0}, /* α */ +{253193259, (unsigned char*)"\316\261", -1, -1}, /* α */ {253212713, (unsigned char*)"\304\201", 446, 448}, /* ā */ -{253212999, (unsigned char*)"\342\250\277", 0, 0}, /* ⨿ */ +{253212999, (unsigned char*)"\342\250\277", -1, -1}, /* ⨿ */ {253255468, (unsigned char*)"\342\210\240", 441, 457}, /* ∠ */ -{253255681, (unsigned char*)"\342\210\237", 0, 0}, /* ∟ */ +{253255681, (unsigned char*)"\342\210\237", -1, -1}, /* ∟ */ {253255714, (unsigned char*)"\303\205", 450, 452}, /* Å */ -{253291513, (unsigned char*)"\304\205", 0, 0}, /* ą */ +{253291513, (unsigned char*)"\304\205", -1, -1}, /* ą */ {253401462, (unsigned char*)"\303\245", 451, 455}, /* å */ -{253454799, (unsigned char*)"\342\211\210", 0, 0}, /* ≈ */ +{253454799, (unsigned char*)"\342\211\210", -1, -1}, /* ≈ */ {253581160, (unsigned char*)"\342\250\221", 454, 456}, /* ⨑ */ -{254054862, (unsigned char*)"\342\211\214", 0, 0}, /* ≌ */ +{254054862, (unsigned char*)"\342\211\214", -1, -1}, /* ≌ */ {254093216, (unsigned char*)"\342\200\236", 453, 461}, /* „ */ -{254127992, (unsigned char*)"\317\266", 0, 0}, /* ϶ */ +{254127992, (unsigned char*)"\317\266", -1, -1}, /* ϶ */ {254363053, (unsigned char*)"\342\220\243", 458, 460}, /* ␣ */ -{254371873, (unsigned char*)"\342\226\222", 0, 0}, /* ▒ */ +{254371873, (unsigned char*)"\342\226\222", -1, -1}, /* ▒ */ {254371875, (unsigned char*)"\342\226\221", 459, 463}, /* ░ */ -{254371941, (unsigned char*)"\342\226\223", 0, 0}, /* ▓ */ +{254371941, (unsigned char*)"\342\226\223", -1, -1}, /* ▓ */ {254377936, (unsigned char*)"\342\226\210", 462, 464}, /* █ */ -{254494494, (unsigned char*)"\342\225\227", 0, 0}, /* ╗ */ +{254494494, (unsigned char*)"\342\225\227", -1, -1}, /* ╗ */ {254494500, (unsigned char*)"\342\225\224", 432, 498}, /* ╔ */ -{254494526, (unsigned char*)"\342\225\226", 0, 0}, /* ╖ */ -{254494532, (unsigned char*)"\342\225\223", 466, 0}, /* ╓ */ +{254494526, (unsigned char*)"\342\225\226", -1, -1}, /* ╖ */ +{254494532, (unsigned char*)"\342\225\223", 466, -1}, /* ╓ */ {254494618, (unsigned char*)"\342\225\246", 467, 469}, /* ╦ */ -{254494635, (unsigned char*)"\342\225\251", 0, 0}, /* ╩ */ +{254494635, (unsigned char*)"\342\225\251", -1, -1}, /* ╩ */ {254494650, (unsigned char*)"\342\225\244", 468, 472}, /* ╤ */ -{254494667, (unsigned char*)"\342\225\247", 0, 0}, /* ╧ */ +{254494667, (unsigned char*)"\342\225\247", -1, -1}, /* ╧ */ {254495055, (unsigned char*)"\342\225\235", 471, 473}, /* ╝ */ -{254495061, (unsigned char*)"\342\225\232", 0, 0}, /* ╚ */ +{254495061, (unsigned char*)"\342\225\232", -1, -1}, /* ╚ */ {254495084, (unsigned char*)"\342\225\254", 470, 478}, /* ╬ */ -{254495087, (unsigned char*)"\342\225\234", 0, 0}, /* ╜ */ +{254495087, (unsigned char*)"\342\225\234", -1, -1}, /* ╜ */ {254495088, (unsigned char*)"\342\225\243", 475, 477}, /* ╣ */ -{254495093, (unsigned char*)"\342\225\231", 0, 0}, /* ╙ */ +{254495093, (unsigned char*)"\342\225\231", -1, -1}, /* ╙ */ {254495094, (unsigned char*)"\342\225\240", 476, 480}, /* ╠ */ -{254495116, (unsigned char*)"\342\225\253", 0, 0}, /* ╫ */ +{254495116, (unsigned char*)"\342\225\253", -1, -1}, /* ╫ */ {254495120, (unsigned char*)"\342\225\242", 479, 481}, /* ╢ */ -{254495126, (unsigned char*)"\342\225\237", 0, 0}, /* ╟ */ +{254495126, (unsigned char*)"\342\225\237", -1, -1}, /* ╟ */ {254495550, (unsigned char*)"\342\225\225", 474, 490}, /* ╕ */ -{254495556, (unsigned char*)"\342\225\222", 0, 0}, /* ╒ */ +{254495556, (unsigned char*)"\342\225\222", -1, -1}, /* ╒ */ {254495582, (unsigned char*)"\342\224\220", 483, 485}, /* ┐ */ -{254495588, (unsigned char*)"\342\224\214", 0, 0}, /* ┌ */ +{254495588, (unsigned char*)"\342\224\214", -1, -1}, /* ┌ */ {254495674, (unsigned char*)"\342\225\245", 484, 488}, /* ╥ */ -{254495691, (unsigned char*)"\342\225\250", 0, 0}, /* ╨ */ +{254495691, (unsigned char*)"\342\225\250", -1, -1}, /* ╨ */ {254495706, (unsigned char*)"\342\224\254", 487, 489}, /* ┬ */ -{254495723, (unsigned char*)"\342\224\264", 0, 0}, /* ┴ */ +{254495723, (unsigned char*)"\342\224\264", -1, -1}, /* ┴ */ {254496111, (unsigned char*)"\342\225\233", 486, 494}, /* ╛ */ -{254496117, (unsigned char*)"\342\225\230", 0, 0}, /* ╘ */ +{254496117, (unsigned char*)"\342\225\230", -1, -1}, /* ╘ */ {254496140, (unsigned char*)"\342\225\252", 491, 493}, /* ╪ */ -{254496143, (unsigned char*)"\342\224\230", 0, 0}, /* ┘ */ +{254496143, (unsigned char*)"\342\224\230", -1, -1}, /* ┘ */ {254496144, (unsigned char*)"\342\225\241", 492, 496}, /* ╡ */ -{254496149, (unsigned char*)"\342\224\224", 0, 0}, /* └ */ +{254496149, (unsigned char*)"\342\224\224", -1, -1}, /* └ */ {254496150, (unsigned char*)"\342\225\236", 495, 497}, /* ╞ */ -{254496172, (unsigned char*)"\342\224\274", 0, 0}, /* ┼ */ +{254496172, (unsigned char*)"\342\224\274", -1, -1}, /* ┼ */ {254496176, (unsigned char*)"\342\224\244", 482, 515}, /* ┤ */ -{254496182, (unsigned char*)"\342\224\234", 0, 0}, /* ├ */ -{254583289, (unsigned char*)"\313\230", 499, 0}, /* ˘ */ +{254496182, (unsigned char*)"\342\224\234", -1, -1}, /* ├ */ +{254583289, (unsigned char*)"\313\230", 499, -1}, /* ˘ */ {254618933, (unsigned char*)"\342\201\217", 500, 502}, /* ⁏ */ -{254623285, (unsigned char*)"\342\213\215", 0, 0}, /* ⋍ */ +{254623285, (unsigned char*)"\342\213\215", -1, -1}, /* ⋍ */ {254629783, (unsigned char*)"\342\247\205", 501, 505}, /* ⧅ */ -{254687260, (unsigned char*)"\342\210\214", 0, 0}, /* ∌ */ +{254687260, (unsigned char*)"\342\210\214", -1, -1}, /* ∌ */ {254699582, (unsigned char*)"\342\252\256", 504, 506}, /* ⪮ */ -{254699614, (unsigned char*)"\342\211\217", 0, 0}, /* ≏ */ +{254699614, (unsigned char*)"\342\211\217", -1, -1}, /* ≏ */ {255171892, (unsigned char*)"\342\201\201", 503, 511}, /* ⁁ */ -{255172216, (unsigned char*)"\313\207", 0, 0}, /* ˇ */ +{255172216, (unsigned char*)"\313\207", -1, -1}, /* ˇ */ {255225615, (unsigned char*)"\342\251\215", 508, 510}, /* ⩍ */ -{255234377, (unsigned char*)"\304\211", 0, 0}, /* ĉ */ +{255234377, (unsigned char*)"\304\211", -1, -1}, /* ĉ */ {255247395, (unsigned char*)"\342\251\214", 509, 513}, /* ⩌ */ -{255300518, (unsigned char*)"\302\270", 0, 0}, /* ¸ */ +{255300518, (unsigned char*)"\302\270", -1, -1}, /* ¸ */ {255409219, (unsigned char*)"\342\234\223", 512, 514}, /* ✓ */ -{255570366, (unsigned char*)"\342\231\243", 0, 0}, /* ♣ */ +{255570366, (unsigned char*)"\342\231\243", -1, -1}, /* ♣ */ {255668800, (unsigned char*)"\72", 507, 523}, /* : */ -{255669810, (unsigned char*)"\54", 0, 0}, /* , */ +{255669810, (unsigned char*)"\54", -1, -1}, /* , */ {255764735, (unsigned char*)"\342\206\265", 516, 518}, /* ↵ */ -{255780015, (unsigned char*)"\342\234\227", 0, 0}, /* ✗ */ +{255780015, (unsigned char*)"\342\234\227", -1, -1}, /* ✗ */ {255821911, (unsigned char*)"\342\253\221", 517, 521}, /* ⫑ */ -{255822373, (unsigned char*)"\342\253\222", 0, 0}, /* ⫒ */ +{255822373, (unsigned char*)"\342\253\222", -1, -1}, /* ⫒ */ {255839779, (unsigned char*)"\342\213\257", 520, 522}, /* ⋯ */ -{255876836, (unsigned char*)"\342\213\236", 0, 0}, /* ⋞ */ +{255876836, (unsigned char*)"\342\213\236", -1, -1}, /* ⋞ */ {255876920, (unsigned char*)"\342\213\237", 519, 527}, /* ⋟ */ -{255888782, (unsigned char*)"\342\251\205", 0, 0}, /* ⩅ */ +{255888782, (unsigned char*)"\342\251\205", -1, -1}, /* ⩅ */ {255894973, (unsigned char*)"\342\213\216", 524, 526}, /* ⋎ */ -{255896061, (unsigned char*)"\342\213\217", 0, 0}, /* ⋏ */ +{255896061, (unsigned char*)"\342\213\217", -1, -1}, /* ⋏ */ {255953002, (unsigned char*)"\342\210\261", 525, 529}, /* ∱ */ -{256359003, (unsigned char*)"\342\212\243", 0, 0}, /* ⊣ */ +{256359003, (unsigned char*)"\342\212\243", -1, -1}, /* ⊣ */ {256387067, (unsigned char*)"\313\235", 528, 530}, /* ˝ */ -{256447538, (unsigned char*)"\342\207\212", 0, 0}, /* ⇊ */ +{256447538, (unsigned char*)"\342\207\212", -1, -1}, /* ⇊ */ {256451797, (unsigned char*)"\342\251\267", 265, 797}, /* ⩷ */ -{256495503, (unsigned char*)"\316\264", 0, 0}, /* δ */ -{256589813, (unsigned char*)"\342\210\223", 532, 0}, /* ∓ */ +{256495503, (unsigned char*)"\316\264", -1, -1}, /* δ */ +{256589813, (unsigned char*)"\342\210\223", 532, -1}, /* ∓ */ {256591280, (unsigned char*)"\342\207\203", 533, 535}, /* ⇃ */ -{256591286, (unsigned char*)"\342\207\202", 0, 0}, /* ⇂ */ +{256591286, (unsigned char*)"\342\207\202", -1, -1}, /* ⇂ */ {256627059, (unsigned char*)"\342\231\246", 534, 538}, /* ♦ */ -{256646524, (unsigned char*)"\342\213\262", 0, 0}, /* ⋲ */ +{256646524, (unsigned char*)"\342\213\262", -1, -1}, /* ⋲ */ {256863106, (unsigned char*)"\342\211\220", 537, 539}, /* ≐ */ -{257025700, (unsigned char*)"\342\213\261", 0, 0}, /* ⋱ */ +{257025700, (unsigned char*)"\342\213\261", -1, -1}, /* ⋱ */ {257040734, (unsigned char*)"\342\226\276", 536, 544}, /* ▾ */ -{257058467, (unsigned char*)"\342\207\265", 0, 0}, /* ⇵ */ +{257058467, (unsigned char*)"\342\207\265", -1, -1}, /* ⇵ */ {257065529, (unsigned char*)"\342\245\257", 541, 543}, /* ⥯ */ -{257606219, (unsigned char*)"\303\252", 0, 0}, /* ê */ +{257606219, (unsigned char*)"\303\252", -1, -1}, /* ê */ {257673655, (unsigned char*)"\342\211\222", 542, 546}, /* ≒ */ -{257956397, (unsigned char*)"\304\223", 0, 0}, /* ē */ +{257956397, (unsigned char*)"\304\223", -1, -1}, /* ē */ {257973300, (unsigned char*)"\342\210\205", 545, 547}, /* ∅ */ -{258035197, (unsigned char*)"\304\231", 0, 0}, /* ę */ +{258035197, (unsigned char*)"\304\231", -1, -1}, /* ę */ {258076782, (unsigned char*)"\342\251\261", 540, 557}, /* ⩱ */ -{258084012, (unsigned char*)"\317\265", 0, 0}, /* ϵ */ -{258104899, (unsigned char*)"\342\211\223", 549, 0}, /* ≓ */ +{258084012, (unsigned char*)"\317\265", -1, -1}, /* ϵ */ +{258104899, (unsigned char*)"\342\211\223", 549, -1}, /* ≓ */ {258119940, (unsigned char*)"\342\211\202", 550, 552}, /* ≂ */ -{258122127, (unsigned char*)"\342\211\241", 0, 0}, /* ≡ */ +{258122127, (unsigned char*)"\342\211\241", -1, -1}, /* ≡ */ {258136577, (unsigned char*)"\342\245\261", 551, 555}, /* ⥱ */ -{258175684, (unsigned char*)"\342\211\220", 0, 0}, /* ≐ */ +{258175684, (unsigned char*)"\342\211\220", -1, -1}, /* ≐ */ {258360946, (unsigned char*)"\342\210\203", 554, 556}, /* ∃ */ -{258902925, (unsigned char*)"\357\254\200", 0, 0}, /* ff */ +{258902925, (unsigned char*)"\357\254\200", -1, -1}, /* ff */ {259010736, (unsigned char*)"\357\254\201", 553, 561}, /* fi */ -{259046673, (unsigned char*)"\146\152", 0, 0}, /* fj */ +{259046673, (unsigned char*)"\146\152", -1, -1}, /* fj */ {259118547, (unsigned char*)"\357\254\202", 558, 560}, /* fl */ -{259127436, (unsigned char*)"\342\226\261", 0, 0}, /* ▱ */ +{259127436, (unsigned char*)"\342\226\261", -1, -1}, /* ▱ */ {259232973, (unsigned char*)"\342\253\231", 559, 563}, /* ⫙ */ -{259322525, (unsigned char*)"\342\201\204", 0, 0}, /* ⁄ */ +{259322525, (unsigned char*)"\342\201\204", -1, -1}, /* ⁄ */ {259337905, (unsigned char*)"\342\214\242", 562, 564}, /* ⌢ */ -{259910376, (unsigned char*)"\316\263", 0, 0}, /* γ */ +{259910376, (unsigned char*)"\316\263", -1, -1}, /* γ */ {259978061, (unsigned char*)"\304\235", 548, 582}, /* ĝ */ -{260060330, (unsigned char*)"\342\252\251", 0, 0}, /* ⪩ */ -{260197619, (unsigned char*)"\342\204\267", 566, 0}, /* ℷ */ +{260060330, (unsigned char*)"\342\252\251", -1, -1}, /* ⪩ */ +{260197619, (unsigned char*)"\342\204\267", 566, -1}, /* ℷ */ {260368993, (unsigned char*)"\342\211\251", 567, 569}, /* ≩ */ -{260383971, (unsigned char*)"\342\213\247", 0, 0}, /* ⋧ */ +{260383971, (unsigned char*)"\342\213\247", -1, -1}, /* ⋧ */ {260508538, (unsigned char*)"\140", 568, 572}, /* ` */ -{260552890, (unsigned char*)"\342\252\216", 0, 0}, /* ⪎ */ +{260552890, (unsigned char*)"\342\252\216", -1, -1}, /* ⪎ */ {260552897, (unsigned char*)"\342\252\220", 571, 573}, /* ⪐ */ -{260582174, (unsigned char*)"\342\251\272", 0, 0}, /* ⩺ */ +{260582174, (unsigned char*)"\342\251\272", -1, -1}, /* ⩺ */ {260583463, (unsigned char*)"\342\213\227", 570, 578}, /* ⋗ */ -{260705637, (unsigned char*)"\305\204", 0, 0}, /* ń */ +{260705637, (unsigned char*)"\305\204", -1, -1}, /* ń */ {261101929, (unsigned char*)"\342\206\255", 575, 577}, /* ↭ */ -{261163982, (unsigned char*)"\304\245", 0, 0}, /* ĥ */ +{261163982, (unsigned char*)"\304\245", -1, -1}, /* ĥ */ {261586529, (unsigned char*)"\342\207\277", 576, 580}, /* ⇿ */ -{262349903, (unsigned char*)"\303\256", 0, 0}, /* î */ +{262349903, (unsigned char*)"\303\256", -1, -1}, /* î */ {262437626, (unsigned char*)"\302\241", 579, 581}, /* ¡ */ -{262529580, (unsigned char*)"\342\211\217\314\270", 0, 0}, /* ≏̸ */ +{262529580, (unsigned char*)"\342\211\217\314\270", -1, -1}, /* ≏̸ */ {262565410, (unsigned char*)"\342\210\255", 574, 590}, /* ∭ */ -{262572123, (unsigned char*)"\342\204\251", 0, 0}, /* ℩ */ +{262572123, (unsigned char*)"\342\204\251", -1, -1}, /* ℩ */ {262604436, (unsigned char*)"\304\263", 583, 585}, /* ij */ -{262700081, (unsigned char*)"\304\253", 0, 0}, /* ī */ +{262700081, (unsigned char*)"\304\253", -1, -1}, /* ī */ {262700200, (unsigned char*)"\342\204\221", 584, 588}, /* ℑ */ -{262700632, (unsigned char*)"\304\261", 0, 0}, /* ı */ +{262700632, (unsigned char*)"\304\261", -1, -1}, /* ı */ {262716468, (unsigned char*)"\306\265", 587, 589}, /* Ƶ */ -{262741657, (unsigned char*)"\342\210\236", 0, 0}, /* ∞ */ +{262741657, (unsigned char*)"\342\210\236", -1, -1}, /* ∞ */ {262778881, (unsigned char*)"\304\257", 586, 594}, /* į */ -{262826787, (unsigned char*)"\342\250\274", 0, 0}, /* ⨼ */ +{262826787, (unsigned char*)"\342\250\274", -1, -1}, /* ⨼ */ {262924733, (unsigned char*)"\342\213\271", 591, 593}, /* ⋹ */ -{262924779, (unsigned char*)"\342\213\264", 0, 0}, /* ⋴ */ +{262924779, (unsigned char*)"\342\213\264", -1, -1}, /* ⋴ */ {262924782, (unsigned char*)"\342\210\210", 592, 596}, /* ∈ */ -{262998474, (unsigned char*)"\321\226", 0, 0}, /* і */ +{262998474, (unsigned char*)"\321\226", -1, -1}, /* і */ {263002182, (unsigned char*)"\305\210", 595, 597}, /* ň */ -{263130484, (unsigned char*)"\305\206", 0, 0}, /* ņ */ +{263130484, (unsigned char*)"\305\206", -1, -1}, /* ņ */ {263535824, (unsigned char*)"\304\265", 565, 631}, /* ĵ */ -{263886553, (unsigned char*)"\310\267", 0, 0}, /* ȷ */ -{264184395, (unsigned char*)"\321\224", 599, 0}, /* є */ +{263886553, (unsigned char*)"\310\267", -1, -1}, /* ȷ */ +{264184395, (unsigned char*)"\321\224", 599, -1}, /* є */ {264657426, (unsigned char*)"\316\272", 600, 602}, /* κ */ -{264677111, (unsigned char*)"\342\207\232", 0, 0}, /* ⇚ */ +{264677111, (unsigned char*)"\342\207\232", -1, -1}, /* ⇚ */ {264713048, (unsigned char*)"\342\244\216", 601, 605}, /* ⤎ */ -{265373790, (unsigned char*)"\342\244\244", 0, 0}, /* ⤤ */ +{265373790, (unsigned char*)"\342\244\244", -1, -1}, /* ⤤ */ {265840875, (unsigned char*)"\342\246\221", 604, 606}, /* ⦑ */ -{265844615, (unsigned char*)"\302\253", 0, 0}, /* « */ +{265844615, (unsigned char*)"\302\253", -1, -1}, /* « */ {265845592, (unsigned char*)"\342\207\244", 603, 611}, /* ⇤ */ -{265847358, (unsigned char*)"\342\252\255\357\270\200", 0, 0}, /* ⪭︀ */ +{265847358, (unsigned char*)"\342\252\255\357\270\200", -1, -1}, /* ⪭︀ */ {265863032, (unsigned char*)"\342\244\214", 608, 610}, /* ⤌ */ -{265864114, (unsigned char*)"\342\235\262", 0, 0}, /* ❲ */ +{265864114, (unsigned char*)"\342\235\262", -1, -1}, /* ❲ */ {265881301, (unsigned char*)"\342\246\213", 609, 613}, /* ⦋ */ -{265903022, (unsigned char*)"\342\214\210", 0, 0}, /* ⌈ */ +{265903022, (unsigned char*)"\342\214\210", -1, -1}, /* ⌈ */ {265939165, (unsigned char*)"\342\210\272", 612, 614}, /* ∺ */ -{265952093, (unsigned char*)"\342\211\242", 0, 0}, /* ≢ */ +{265952093, (unsigned char*)"\342\211\242", -1, -1}, /* ≢ */ {265952426, (unsigned char*)"\342\200\234", 607, 623}, /* “ */ -{265989935, (unsigned char*)"\342\252\250", 0, 0}, /* ⪨ */ +{265989935, (unsigned char*)"\342\252\250", -1, -1}, /* ⪨ */ {266006275, (unsigned char*)"\342\244\250", 616, 618}, /* ⤨ */ -{266078640, (unsigned char*)"\342\206\275", 0, 0}, /* ↽ */ +{266078640, (unsigned char*)"\342\206\275", -1, -1}, /* ↽ */ {266078657, (unsigned char*)"\342\206\274", 617, 621}, /* ↼ */ -{266079538, (unsigned char*)"\342\226\204", 0, 0}, /* ▄ */ +{266079538, (unsigned char*)"\342\226\204", -1, -1}, /* ▄ */ {266190912, (unsigned char*)"\342\210\204", 620, 622}, /* ∄ */ -{266222402, (unsigned char*)"\342\207\207", 0, 0}, /* ⇇ */ +{266222402, (unsigned char*)"\342\207\207", -1, -1}, /* ⇇ */ {266243084, (unsigned char*)"\342\227\272", 619, 627}, /* ◺ */ -{266298598, (unsigned char*)"\342\211\250", 0, 0}, /* ≨ */ +{266298598, (unsigned char*)"\342\211\250", -1, -1}, /* ≨ */ {266313576, (unsigned char*)"\342\213\246", 624, 626}, /* ⋦ */ -{266330070, (unsigned char*)"\342\237\254", 0, 0}, /* ⟬ */ +{266330070, (unsigned char*)"\342\237\254", -1, -1}, /* ⟬ */ {266330213, (unsigned char*)"\342\207\275", 625, 629}, /* ⇽ */ -{266331295, (unsigned char*)"\342\237\246", 0, 0}, /* ⟦ */ +{266331295, (unsigned char*)"\342\237\246", -1, -1}, /* ⟦ */ {266338700, (unsigned char*)"\342\252\206", 628, 630}, /* ⪆ */ -{266345987, (unsigned char*)"\342\246\205", 0, 0}, /* ⦅ */ +{266345987, (unsigned char*)"\342\246\205", -1, -1}, /* ⦅ */ {266438024, (unsigned char*)"\342\207\206", 615, 648}, /* ⇆ */ -{266445086, (unsigned char*)"\342\207\213", 0, 0}, /* ⇋ */ -{266458706, (unsigned char*)"\342\212\277", 632, 0}, /* ⊿ */ +{266445086, (unsigned char*)"\342\207\213", -1, -1}, /* ⇋ */ +{266458706, (unsigned char*)"\342\212\277", 632, -1}, /* ⊿ */ {266482495, (unsigned char*)"\342\252\215", 633, 635}, /* ⪍ */ -{266482497, (unsigned char*)"\342\252\217", 0, 0}, /* ⪏ */ +{266482497, (unsigned char*)"\342\252\217", -1, -1}, /* ⪏ */ {266491481, (unsigned char*)"\342\200\230", 634, 638}, /* ‘ */ -{266511779, (unsigned char*)"\342\251\271", 0, 0}, /* ⩹ */ +{266511779, (unsigned char*)"\342\251\271", -1, -1}, /* ⩹ */ {266513068, (unsigned char*)"\342\213\226", 637, 639}, /* ⋖ */ -{266528101, (unsigned char*)"\342\212\264", 0, 0}, /* ⊴ */ +{266528101, (unsigned char*)"\342\212\264", -1, -1}, /* ⊴ */ {266528102, (unsigned char*)"\342\227\202", 636, 644}, /* ◂ */ -{267120850, (unsigned char*)"\342\200\224", 0, 0}, /* — */ +{267120850, (unsigned char*)"\342\200\224", -1, -1}, /* — */ {267302687, (unsigned char*)"\302\265", 641, 643}, /* µ */ -{267314769, (unsigned char*)"\342\210\222", 0, 0}, /* − */ +{267314769, (unsigned char*)"\342\210\222", -1, -1}, /* − */ {267744261, (unsigned char*)"\342\212\270", 642, 646}, /* ⊸ */ -{268199811, (unsigned char*)"\342\210\207", 0, 0}, /* ∇ */ +{268199811, (unsigned char*)"\342\210\207", -1, -1}, /* ∇ */ {268214961, (unsigned char*)"\342\211\213\314\270", 645, 647}, /* ≋̸ */ -{268215174, (unsigned char*)"\305\211", 0, 0}, /* ʼn */ +{268215174, (unsigned char*)"\305\211", -1, -1}, /* ʼn */ {268219727, (unsigned char*)"\342\231\256", 640, 656}, /* ♮ */ -{268256487, (unsigned char*)"\342\211\216\314\270", 0, 0}, /* ≎̸ */ +{268256487, (unsigned char*)"\342\211\216\314\270", -1, -1}, /* ≎̸ */ {268285914, (unsigned char*)"\342\211\207", 649, 651}, /* ≇ */ -{268306771, (unsigned char*)"\342\200\223", 0, 0}, /* – */ +{268306771, (unsigned char*)"\342\200\223", -1, -1}, /* – */ {268307837, (unsigned char*)"\342\207\227", 650, 654}, /* ⇗ */ -{268342685, (unsigned char*)"\342\206\227", 0, 0}, /* ↗ */ +{268342685, (unsigned char*)"\342\206\227", -1, -1}, /* ↗ */ {268345855, (unsigned char*)"\342\211\220\314\270", 653, 655}, /* ≐̸ */ -{268361985, (unsigned char*)"\342\211\202\314\270", 0, 0}, /* ≂̸ */ +{268361985, (unsigned char*)"\342\211\202\314\270", -1, -1}, /* ≂̸ */ {268415648, (unsigned char*)"\342\207\216", 652, 660}, /* ⇎ */ -{268418881, (unsigned char*)"\342\211\247\314\270", 0, 0}, /* ≧̸ */ +{268418881, (unsigned char*)"\342\211\247\314\270", -1, -1}, /* ≧̸ */ {268433859, (unsigned char*)"\342\211\265", 657, 659}, /* ≵ */ -{268450496, (unsigned char*)"\342\206\256", 0, 0}, /* ↮ */ +{268450496, (unsigned char*)"\342\206\256", -1, -1}, /* ↮ */ {268466270, (unsigned char*)"\342\253\262", 658, 662}, /* ⫲ */ -{268559396, (unsigned char*)"\342\207\215", 0, 0}, /* ⇍ */ +{268559396, (unsigned char*)"\342\207\215", -1, -1}, /* ⇍ */ {268594244, (unsigned char*)"\342\206\232", 661, 663}, /* ↚ */ -{268598566, (unsigned char*)"\342\211\246\314\270", 0, 0}, /* ≦̸ */ +{268598566, (unsigned char*)"\342\211\246\314\270", -1, -1}, /* ≦̸ */ {268598634, (unsigned char*)"\342\211\256", 598, 731}, /* ≮ */ -{268613544, (unsigned char*)"\342\211\264", 0, 0}, /* ≴ */ -{268614926, (unsigned char*)"\342\213\252", 665, 0}, /* ⋪ */ +{268613544, (unsigned char*)"\342\211\264", -1, -1}, /* ≴ */ +{268614926, (unsigned char*)"\342\213\252", 665, -1}, /* ⋪ */ {268722445, (unsigned char*)"\342\210\211", 666, 668}, /* ∉ */ -{268722605, (unsigned char*)"\342\210\214", 0, 0}, /* ∌ */ +{268722605, (unsigned char*)"\342\210\214", -1, -1}, /* ∌ */ {268737994, (unsigned char*)"\342\210\202\314\270", 667, 671}, /* ∂̸ */ -{268756061, (unsigned char*)"\342\212\200", 0, 0}, /* ⊀ */ +{268756061, (unsigned char*)"\342\212\200", -1, -1}, /* ⊀ */ {268775018, (unsigned char*)"\342\207\217", 670, 672}, /* ⇏ */ -{268809866, (unsigned char*)"\342\206\233", 0, 0}, /* ↛ */ +{268809866, (unsigned char*)"\342\206\233", -1, -1}, /* ↛ */ {268830548, (unsigned char*)"\342\213\253", 669, 677}, /* ⋫ */ -{268854337, (unsigned char*)"\342\211\204", 0, 0}, /* ≄ */ +{268854337, (unsigned char*)"\342\211\204", -1, -1}, /* ≄ */ {268858560, (unsigned char*)"\342\210\244", 674, 676}, /* ∤ */ -{268861577, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{268861577, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ {268867010, (unsigned char*)"\342\253\205\314\270", 675, 679}, /* ⫅̸ */ -{268867042, (unsigned char*)"\342\212\210", 0, 0}, /* ⊈ */ +{268867042, (unsigned char*)"\342\212\210", -1, -1}, /* ⊈ */ {268867073, (unsigned char*)"\342\212\201", 678, 680}, /* ⊁ */ -{268867472, (unsigned char*)"\342\253\206\314\270", 0, 0}, /* ⫆̸ */ +{268867472, (unsigned char*)"\342\253\206\314\270", -1, -1}, /* ⫆̸ */ {268867504, (unsigned char*)"\342\212\211", 673, 690}, /* ⊉ */ -{268930776, (unsigned char*)"\342\200\207", 0, 0}, /*   */ -{268954703, (unsigned char*)"\342\207\226", 682, 0}, /* ⇖ */ +{268930776, (unsigned char*)"\342\200\207", -1, -1}, /*   */ +{268954703, (unsigned char*)"\342\207\226", 682, -1}, /* ⇖ */ {268972914, (unsigned char*)"\342\210\274\342\203\222", 683, 685}, /* ∼⃒ */ -{268989551, (unsigned char*)"\342\206\226", 0, 0}, /* ↖ */ +{268989551, (unsigned char*)"\342\206\226", -1, -1}, /* ↖ */ {269465429, (unsigned char*)"\303\264", 684, 688}, /* ô */ -{269492692, (unsigned char*)"\342\212\235", 0, 0}, /* ⊝ */ +{269492692, (unsigned char*)"\342\212\235", -1, -1}, /* ⊝ */ {269540277, (unsigned char*)"\305\223", 687, 689}, /* œ */ -{269566424, (unsigned char*)"\342\246\277", 0, 0}, /* ⦿ */ +{269566424, (unsigned char*)"\342\246\277", -1, -1}, /* ⦿ */ {269636945, (unsigned char*)"\342\246\265", 686, 694}, /* ⦵ */ -{269780165, (unsigned char*)"\342\206\272", 0, 0}, /* ↺ */ +{269780165, (unsigned char*)"\342\206\272", -1, -1}, /* ↺ */ {269782046, (unsigned char*)"\342\246\276", 691, 693}, /* ⦾ */ -{269788732, (unsigned char*)"\342\200\276", 0, 0}, /* ‾ */ +{269788732, (unsigned char*)"\342\200\276", -1, -1}, /* ‾ */ {269815607, (unsigned char*)"\305\215", 692, 696}, /* ō */ -{269820078, (unsigned char*)"\317\211", 0, 0}, /* ω */ +{269820078, (unsigned char*)"\317\211", -1, -1}, /* ω */ {269928267, (unsigned char*)"\342\246\271", 695, 697}, /* ⦹ */ -{269935992, (unsigned char*)"\342\212\225", 0, 0}, /* ⊕ */ +{269935992, (unsigned char*)"\342\212\225", -1, -1}, /* ⊕ */ {269995787, (unsigned char*)"\342\206\273", 681, 715}, /* ↻ */ -{269998625, (unsigned char*)"\342\204\264", 0, 0}, /* ℴ */ -{270140063, (unsigned char*)"\342\214\275", 699, 0}, /* ⌽ */ +{269998625, (unsigned char*)"\342\204\264", -1, -1}, /* ℴ */ +{270140063, (unsigned char*)"\342\214\275", 699, -1}, /* ⌽ */ {270589319, (unsigned char*)"\342\253\275", 700, 702}, /* ⫽ */ -{270837439, (unsigned char*)"\342\230\216", 0, 0}, /* ☎ */ +{270837439, (unsigned char*)"\342\230\216", -1, -1}, /* ☎ */ {270987883, (unsigned char*)"\342\212\236", 701, 705}, /* ⊞ */ -{270987886, (unsigned char*)"\342\251\262", 0, 0}, /* ⩲ */ +{270987886, (unsigned char*)"\342\251\262", -1, -1}, /* ⩲ */ {271095531, (unsigned char*)"\302\243", 704, 706}, /* £ */ -{271183972, (unsigned char*)"\342\211\274", 0, 0}, /* ≼ */ +{271183972, (unsigned char*)"\342\211\274", -1, -1}, /* ≼ */ {271190242, (unsigned char*)"\342\200\262", 703, 711}, /* ′ */ -{271195302, (unsigned char*)"\342\252\271", 0, 0}, /* ⪹ */ +{271195302, (unsigned char*)"\342\252\271", -1, -1}, /* ⪹ */ {271201008, (unsigned char*)"\342\211\276", 708, 710}, /* ≾ */ -{271792637, (unsigned char*)"\342\207\233", 0, 0}, /* ⇛ */ +{271792637, (unsigned char*)"\342\207\233", -1, -1}, /* ⇛ */ {271828574, (unsigned char*)"\342\244\217", 709, 713}, /* ⤏ */ -{272479831, (unsigned char*)"\77", 0, 0}, /* ? */ +{272479831, (unsigned char*)"\77", -1, -1}, /* ? */ {272945576, (unsigned char*)"\342\210\232", 712, 714}, /* √ */ -{272956401, (unsigned char*)"\342\246\222", 0, 0}, /* ⦒ */ +{272956401, (unsigned char*)"\342\246\222", -1, -1}, /* ⦒ */ {272956402, (unsigned char*)"\342\246\245", 707, 723}, /* ⦥ */ -{272960141, (unsigned char*)"\302\273", 0, 0}, /* » */ +{272960141, (unsigned char*)"\302\273", -1, -1}, /* » */ {272961118, (unsigned char*)"\342\207\245", 716, 718}, /* ⇥ */ -{272961119, (unsigned char*)"\342\244\263", 0, 0}, /* ⤳ */ +{272961119, (unsigned char*)"\342\244\263", -1, -1}, /* ⤳ */ {272961139, (unsigned char*)"\342\206\235", 717, 721}, /* ↝ */ -{272963012, (unsigned char*)"\342\210\266", 0, 0}, /* ∶ */ +{272963012, (unsigned char*)"\342\210\266", -1, -1}, /* ∶ */ {272978558, (unsigned char*)"\342\244\215", 720, 722}, /* ⤍ */ -{272979640, (unsigned char*)"\342\235\263", 0, 0}, /* ❳ */ +{272979640, (unsigned char*)"\342\235\263", -1, -1}, /* ❳ */ {272996827, (unsigned char*)"\342\246\214", 719, 727}, /* ⦌ */ -{273018548, (unsigned char*)"\342\214\211", 0, 0}, /* ⌉ */ +{273018548, (unsigned char*)"\342\214\211", -1, -1}, /* ⌉ */ {273067952, (unsigned char*)"\342\200\235", 724, 726}, /* ” */ -{273086172, (unsigned char*)"\342\204\235", 0, 0}, /* ℝ */ +{273086172, (unsigned char*)"\342\204\235", -1, -1}, /* ℝ */ {273194166, (unsigned char*)"\342\207\201", 725, 729}, /* ⇁ */ -{273194183, (unsigned char*)"\342\207\200", 0, 0}, /* ⇀ */ +{273194183, (unsigned char*)"\342\207\200", -1, -1}, /* ⇀ */ {273337928, (unsigned char*)"\342\207\204", 728, 730}, /* ⇄ */ -{273344990, (unsigned char*)"\342\207\214", 0, 0}, /* ⇌ */ +{273344990, (unsigned char*)"\342\207\214", -1, -1}, /* ⇌ */ {273422559, (unsigned char*)"\342\253\256", 698, 764}, /* ⫮ */ -{273445596, (unsigned char*)"\342\237\255", 0, 0}, /* ⟭ */ -{273445739, (unsigned char*)"\342\207\276", 732, 0}, /* ⇾ */ +{273445596, (unsigned char*)"\342\237\255", -1, -1}, /* ⟭ */ +{273445739, (unsigned char*)"\342\207\276", 732, -1}, /* ⇾ */ {273446821, (unsigned char*)"\342\237\247", 733, 735}, /* ⟧ */ -{273461513, (unsigned char*)"\342\246\206", 0, 0}, /* ⦆ */ +{273461513, (unsigned char*)"\342\246\206", -1, -1}, /* ⦆ */ {273553550, (unsigned char*)"\342\207\211", 734, 738}, /* ⇉ */ -{273607007, (unsigned char*)"\342\200\231", 0, 0}, /* ’ */ +{273607007, (unsigned char*)"\342\200\231", -1, -1}, /* ’ */ {273643627, (unsigned char*)"\342\212\265", 737, 739}, /* ⊵ */ -{273643628, (unsigned char*)"\342\226\270", 0, 0}, /* ▸ */ +{273643628, (unsigned char*)"\342\226\270", -1, -1}, /* ▸ */ {274181999, (unsigned char*)"\342\200\232", 736, 744}, /* ‚ */ -{274202680, (unsigned char*)"\342\211\275", 0, 0}, /* ≽ */ +{274202680, (unsigned char*)"\342\211\275", -1, -1}, /* ≽ */ {274209113, (unsigned char*)"\305\235", 741, 743}, /* ŝ */ -{274214010, (unsigned char*)"\342\252\272", 0, 0}, /* ⪺ */ +{274214010, (unsigned char*)"\342\252\272", -1, -1}, /* ⪺ */ {274219716, (unsigned char*)"\342\211\277", 742, 746}, /* ≿ */ -{274237442, (unsigned char*)"\342\207\230", 0, 0}, /* ⇘ */ +{274237442, (unsigned char*)"\342\207\230", -1, -1}, /* ⇘ */ {274251649, (unsigned char*)"\342\212\241", 745, 747}, /* ⊡ */ -{274251652, (unsigned char*)"\342\251\246", 0, 0}, /* ⩦ */ +{274251652, (unsigned char*)"\342\251\246", -1, -1}, /* ⩦ */ {274272290, (unsigned char*)"\342\206\230", 740, 756}, /* ↘ */ -{274292812, (unsigned char*)"\342\210\226", 0, 0}, /* ∖ */ +{274292812, (unsigned char*)"\342\210\226", -1, -1}, /* ∖ */ {274358067, (unsigned char*)"\342\213\254", 749, 751}, /* ⋬ */ -{274380099, (unsigned char*)"\342\231\257", 0, 0}, /* ♯ */ +{274380099, (unsigned char*)"\342\231\257", -1, -1}, /* ♯ */ {274422390, (unsigned char*)"\317\203", 750, 754}, /* σ */ -{274428676, (unsigned char*)"\342\211\203", 0, 0}, /* ≃ */ +{274428676, (unsigned char*)"\342\211\203", -1, -1}, /* ≃ */ {274428698, (unsigned char*)"\342\252\240", 753, 755}, /* ⪠ */ -{274428863, (unsigned char*)"\342\252\237", 0, 0}, /* ⪟ */ +{274428863, (unsigned char*)"\342\252\237", -1, -1}, /* ⪟ */ {274428961, (unsigned char*)"\342\211\206", 752, 760}, /* ≆ */ -{274523849, (unsigned char*)"\342\206\220", 0, 0}, /* ← */ +{274523849, (unsigned char*)"\342\206\220", -1, -1}, /* ← */ {274568287, (unsigned char*)"\342\214\243", 757, 759}, /* ⌣ */ -{274578221, (unsigned char*)"\342\204\261", 0, 0}, /* ℱ */ +{274578221, (unsigned char*)"\342\204\261", -1, -1}, /* ℱ */ {274580049, (unsigned char*)"\342\252\254\357\270\200", 758, 762}, /* ⪬︀ */ -{274705149, (unsigned char*)"\342\212\223", 0, 0}, /* ⊓ */ +{274705149, (unsigned char*)"\342\212\223", -1, -1}, /* ⊓ */ {274705809, (unsigned char*)"\342\212\224", 761, 763}, /* ⊔ */ -{274723219, (unsigned char*)"\342\212\217", 0, 0}, /* ⊏ */ +{274723219, (unsigned char*)"\342\212\217", -1, -1}, /* ⊏ */ {274723233, (unsigned char*)"\342\212\220", 748, 781}, /* ⊐ */ -{274739471, (unsigned char*)"\342\206\222", 0, 0}, /* → */ -{274811333, (unsigned char*)"\342\230\205", 765, 0}, /* ★ */ +{274739471, (unsigned char*)"\342\206\222", -1, -1}, /* → */ +{274811333, (unsigned char*)"\342\230\205", 765, -1}, /* ★ */ {274829727, (unsigned char*)"\302\257", 766, 768}, /* ¯ */ -{274848194, (unsigned char*)"\342\253\213", 0, 0}, /* ⫋ */ +{274848194, (unsigned char*)"\342\253\213", -1, -1}, /* ⫋ */ {274848226, (unsigned char*)"\342\212\212", 767, 771}, /* ⊊ */ -{274863440, (unsigned char*)"\342\253\214", 0, 0}, /* ⫌ */ +{274863440, (unsigned char*)"\342\253\214", -1, -1}, /* ⫌ */ {274863472, (unsigned char*)"\342\212\213", 770, 772}, /* ⊋ */ -{274884308, (unsigned char*)"\342\207\231", 0, 0}, /* ⇙ */ +{274884308, (unsigned char*)"\342\207\231", -1, -1}, /* ⇙ */ {274919156, (unsigned char*)"\342\206\231", 769, 777}, /* ↙ */ -{275038638, (unsigned char*)"\303\237", 0, 0}, /* ß */ +{275038638, (unsigned char*)"\303\237", -1, -1}, /* ß */ {275317205, (unsigned char*)"\342\251\211", 774, 776}, /* ⩉ */ -{275570427, (unsigned char*)"\316\270", 0, 0}, /* θ */ +{275570427, (unsigned char*)"\316\270", -1, -1}, /* θ */ {275576349, (unsigned char*)"\342\211\210", 775, 779}, /* ≈ */ -{275581264, (unsigned char*)"\303\276", 0, 0}, /* þ */ +{275581264, (unsigned char*)"\303\276", -1, -1}, /* þ */ {275613463, (unsigned char*)"\313\234", 778, 780}, /* ˜ */ -{275614599, (unsigned char*)"\303\227", 0, 0}, /* × */ +{275614599, (unsigned char*)"\303\227", -1, -1}, /* × */ {275924917, (unsigned char*)"\342\204\242", 773, 789}, /* ™ */ -{275934121, (unsigned char*)"\342\247\215", 0, 0}, /* ⧍ */ +{275934121, (unsigned char*)"\342\247\215", -1, -1}, /* ⧍ */ {275968464, (unsigned char*)"\321\233", 782, 784}, /* ћ */ -{276113989, (unsigned char*)"\342\211\254", 0, 0}, /* ≬ */ +{276113989, (unsigned char*)"\342\211\254", -1, -1}, /* ≬ */ {276554346, (unsigned char*)"\321\236", 783, 787}, /* ў */ -{276572262, (unsigned char*)"\342\253\251", 0, 0}, /* ⫩ */ +{276572262, (unsigned char*)"\342\253\251", -1, -1}, /* ⫩ */ {276580955, (unsigned char*)"\303\273", 786, 788}, /* û */ -{276608195, (unsigned char*)"\342\207\205", 0, 0}, /* ⇅ */ +{276608195, (unsigned char*)"\342\207\205", -1, -1}, /* ⇅ */ {276615257, (unsigned char*)"\342\245\256", 785, 793}, /* ⥮ */ -{276644155, (unsigned char*)"\342\212\250", 0, 0}, /* ⊨ */ +{276644155, (unsigned char*)"\342\212\250", -1, -1}, /* ⊨ */ {276751937, (unsigned char*)"\342\206\277", 790, 792}, /* ↿ */ -{276751943, (unsigned char*)"\342\206\276", 0, 0}, /* ↾ */ +{276751943, (unsigned char*)"\342\206\276", -1, -1}, /* ↾ */ {276752827, (unsigned char*)"\342\226\200", 791, 795}, /* ▀ */ -{276916373, (unsigned char*)"\342\227\270", 0, 0}, /* ◸ */ +{276916373, (unsigned char*)"\342\227\270", -1, -1}, /* ◸ */ {276931133, (unsigned char*)"\305\253", 794, 796}, /* ū */ -{277009933, (unsigned char*)"\305\263", 0, 0}, /* ų */ +{277009933, (unsigned char*)"\305\263", -1, -1}, /* ų */ {277051518, (unsigned char*)"\342\212\216", 664, 930}, /* ⊎ */ -{277058734, (unsigned char*)"\317\222", 0, 0}, /* ϒ */ -{277119882, (unsigned char*)"\305\257", 798, 0}, /* ů */ +{277058734, (unsigned char*)"\317\222", -1, -1}, /* ϒ */ +{277119882, (unsigned char*)"\305\257", 798, -1}, /* ů */ {277131995, (unsigned char*)"\342\227\271", 799, 801}, /* ◹ */ -{277186357, (unsigned char*)"\342\213\260", 0, 0}, /* ⋰ */ +{277186357, (unsigned char*)"\342\213\260", -1, -1}, /* ⋰ */ {277201391, (unsigned char*)"\342\226\264", 800, 804}, /* ▴ */ -{277219124, (unsigned char*)"\342\207\210", 0, 0}, /* ⇈ */ +{277219124, (unsigned char*)"\342\207\210", -1, -1}, /* ⇈ */ {277704743, (unsigned char*)"\317\226", 803, 805}, /* ϖ */ -{277794139, (unsigned char*)"\342\212\242", 0, 0}, /* ⊢ */ +{277794139, (unsigned char*)"\342\212\242", -1, -1}, /* ⊢ */ {277833979, (unsigned char*)"\342\211\232", 802, 810}, /* ≚ */ -{277906162, (unsigned char*)"\342\213\271\314\270", 0, 0}, /* ⋹̸ */ +{277906162, (unsigned char*)"\342\213\271\314\270", -1, -1}, /* ⋹̸ */ {278102294, (unsigned char*)"\342\212\262", 807, 809}, /* ⊲ */ -{278173171, (unsigned char*)"\342\212\202\342\203\222", 0, 0}, /* ⊂⃒ */ +{278173171, (unsigned char*)"\342\212\202\342\203\222", -1, -1}, /* ⊂⃒ */ {278173185, (unsigned char*)"\342\212\203\342\203\222", 808, 812}, /* ⊃⃒ */ -{278243772, (unsigned char*)"\342\210\235", 0, 0}, /* ∝ */ +{278243772, (unsigned char*)"\342\210\235", -1, -1}, /* ∝ */ {278317916, (unsigned char*)"\342\212\263", 811, 813}, /* ⊳ */ -{278419285, (unsigned char*)"\342\253\275\342\203\245", 0, 0}, /* ⫽⃥ */ +{278419285, (unsigned char*)"\342\253\275\342\203\245", -1, -1}, /* ⫽⃥ */ {278952797, (unsigned char*)"\305\265", 806, 823}, /* ŵ */ -{279013938, (unsigned char*)"\342\213\240", 0, 0}, /* ⋠ */ -{279018865, (unsigned char*)"\342\210\247", 815, 0}, /* ∧ */ +{279013938, (unsigned char*)"\342\213\240", -1, -1}, /* ⋠ */ +{279018865, (unsigned char*)"\342\210\247", 815, -1}, /* ∧ */ {280138718, (unsigned char*)"\342\227\257", 816, 818}, /* ◯ */ -{280186640, (unsigned char*)"\342\226\275", 0, 0}, /* ▽ */ +{280186640, (unsigned char*)"\342\226\275", -1, -1}, /* ▽ */ {280274858, (unsigned char*)"\342\237\272", 817, 821}, /* ⟺ */ -{280309706, (unsigned char*)"\342\237\267", 0, 0}, /* ⟷ */ +{280309706, (unsigned char*)"\342\237\267", -1, -1}, /* ⟷ */ {280418606, (unsigned char*)"\342\237\270", 820, 822}, /* ⟸ */ -{280453454, (unsigned char*)"\342\237\265", 0, 0}, /* ⟵ */ +{280453454, (unsigned char*)"\342\237\265", -1, -1}, /* ⟵ */ {280564435, (unsigned char*)"\342\250\200", 819, 827}, /* ⨀ */ -{280634228, (unsigned char*)"\342\237\271", 0, 0}, /* ⟹ */ +{280634228, (unsigned char*)"\342\237\271", -1, -1}, /* ⟹ */ {280669076, (unsigned char*)"\342\237\266", 824, 826}, /* ⟶ */ -{280791085, (unsigned char*)"\342\244\263\314\270", 0, 0}, /* ⤳̸ */ +{280791085, (unsigned char*)"\342\244\263\314\270", -1, -1}, /* ⤳̸ */ {280791105, (unsigned char*)"\342\206\235\314\270", 825, 829}, /* ↝̸ */ -{280797569, (unsigned char*)"\342\226\263", 0, 0}, /* △ */ +{280797569, (unsigned char*)"\342\226\263", -1, -1}, /* △ */ {281324639, (unsigned char*)"\305\267", 828, 830}, /* ŷ */ -{281473593, (unsigned char*)"\342\213\255", 0, 0}, /* ⋭ */ +{281473593, (unsigned char*)"\342\213\255", -1, -1}, /* ⋭ */ {282032646, (unsigned char*)"\342\213\241", 814, 848}, /* ⋡ */ -{282258642, (unsigned char*)"\342\211\204", 0, 0}, /* ≄ */ -{283443429, (unsigned char*)"\303\261", 832, 0}, /* ñ */ +{282258642, (unsigned char*)"\342\211\204", -1, -1}, /* ≄ */ +{283443429, (unsigned char*)"\303\261", 832, -1}, /* ñ */ {284474121, (unsigned char*)"\342\212\255", 833, 835}, /* ⊭ */ -{284617846, (unsigned char*)"\342\244\204", 0, 0}, /* ⤄ */ +{284617846, (unsigned char*)"\342\244\204", -1, -1}, /* ⤄ */ {284765947, (unsigned char*)"\342\204\226", 834, 838}, /* № */ -{285624105, (unsigned char*)"\342\212\254", 0, 0}, /* ⊬ */ +{285624105, (unsigned char*)"\342\212\254", -1, -1}, /* ⊬ */ {285876730, (unsigned char*)"\342\244\202", 837, 839}, /* ⤂ */ -{286092352, (unsigned char*)"\342\244\203", 0, 0}, /* ⤃ */ +{286092352, (unsigned char*)"\342\244\203", -1, -1}, /* ⤃ */ {286720368, (unsigned char*)"\342\244\243", 836, 844}, /* ⤣ */ -{287173168, (unsigned char*)"\342\244\247", 0, 0}, /* ⤧ */ +{287173168, (unsigned char*)"\342\244\247", -1, -1}, /* ⤧ */ {293992385, (unsigned char*)"\342\213\204", 841, 843}, /* ⋄ */ -{299841030, (unsigned char*)"\303\263", 0, 0}, /* ó */ +{299841030, (unsigned char*)"\303\263", -1, -1}, /* ó */ {300285334, (unsigned char*)"\342\207\220", 842, 846}, /* ⇐ */ -{300674453, (unsigned char*)"\317\235", 0, 0}, /* ϝ */ +{300674453, (unsigned char*)"\317\235", -1, -1}, /* ϝ */ {303352426, (unsigned char*)"\305\221", 845, 847}, /* ő */ -{303966986, (unsigned char*)"\342\246\274", 0, 0}, /* ⦼ */ +{303966986, (unsigned char*)"\342\246\274", -1, -1}, /* ⦼ */ {307473897, (unsigned char*)"\303\262", 840, 856}, /* ò */ -{310780147, (unsigned char*)"\342\252\241", 0, 0}, /* ⪡ */ +{310780147, (unsigned char*)"\342\252\241", -1, -1}, /* ⪡ */ {310784605, (unsigned char*)"\342\210\226", 849, 851}, /* ∖ */ -{314280128, (unsigned char*)"\342\212\226", 0, 0}, /* ⊖ */ +{314280128, (unsigned char*)"\342\212\226", -1, -1}, /* ⊖ */ {314968612, (unsigned char*)"\342\252\265", 850, 854}, /* ⪵ */ -{314983590, (unsigned char*)"\342\213\250", 0, 0}, /* ⋨ */ +{314983590, (unsigned char*)"\342\213\250", -1, -1}, /* ⋨ */ {319340427, (unsigned char*)"\342\204\220", 853, 855}, /* ℐ */ -{319475610, (unsigned char*)"\342\204\221", 0, 0}, /* ℑ */ +{319475610, (unsigned char*)"\342\204\221", -1, -1}, /* ℑ */ {320201899, (unsigned char*)"\342\212\266", 852, 860}, /* ⊶ */ -{320670692, (unsigned char*)"\342\237\272", 0, 0}, /* ⟺ */ +{320670692, (unsigned char*)"\342\237\272", -1, -1}, /* ⟺ */ {321489231, (unsigned char*)"\303\270", 857, 859}, /* ø */ -{322578822, (unsigned char*)"\303\265", 0, 0}, /* õ */ +{322578822, (unsigned char*)"\303\265", -1, -1}, /* õ */ {322579958, (unsigned char*)"\342\212\227", 858, 862}, /* ⊗ */ -{323169842, (unsigned char*)"\342\251\274", 0, 0}, /* ⩼ */ +{323169842, (unsigned char*)"\342\251\274", -1, -1}, /* ⩼ */ {324032329, (unsigned char*)"\342\211\267", 861, 863}, /* ≷ */ -{334872149, (unsigned char*)"\342\251\210", 0, 0}, /* ⩈ */ +{334872149, (unsigned char*)"\342\251\210", -1, -1}, /* ⩈ */ {339512945, (unsigned char*)"\342\253\263", 831, 897}, /* ⫳ */ -{340554879, (unsigned char*)"\342\204\255", 0, 0}, /* ℭ */ -{341173234, (unsigned char*)"\342\210\245", 865, 0}, /* ∥ */ +{340554879, (unsigned char*)"\342\204\255", -1, -1}, /* ℭ */ +{341173234, (unsigned char*)"\342\210\245", 865, -1}, /* ∥ */ {341609399, (unsigned char*)"\342\200\213", 866, 868}, /* ​ */ -{342697243, (unsigned char*)"\342\252\272", 0, 0}, /* ⪺ */ +{342697243, (unsigned char*)"\342\252\272", -1, -1}, /* ⪺ */ {344239377, (unsigned char*)"\45", 867, 871}, /* % */ -{344245928, (unsigned char*)"\56", 0, 0}, /* . */ +{344245928, (unsigned char*)"\56", -1, -1}, /* . */ {344250094, (unsigned char*)"\342\200\260", 870, 872}, /* ‰ */ -{347627916, (unsigned char*)"\342\204\263", 0, 0}, /* ℳ */ +{347627916, (unsigned char*)"\342\204\263", -1, -1}, /* ℳ */ {351941502, (unsigned char*)"\342\204\217", 869, 877}, /* ℏ */ -{351941777, (unsigned char*)"\342\204\217", 0, 0}, /* ℏ */ +{351941777, (unsigned char*)"\342\204\217", -1, -1}, /* ℏ */ {352665724, (unsigned char*)"\342\210\224", 874, 876}, /* ∔ */ -{352665730, (unsigned char*)"\342\250\245", 0, 0}, /* ⨥ */ +{352665730, (unsigned char*)"\342\250\245", -1, -1}, /* ⨥ */ {352666020, (unsigned char*)"\302\261", 875, 879}, /* ± */ -{359188869, (unsigned char*)"\342\252\257", 0, 0}, /* ⪯ */ +{359188869, (unsigned char*)"\342\252\257", -1, -1}, /* ⪯ */ {359343509, (unsigned char*)"\342\204\231", 878, 880}, /* ℙ */ -{359529854, (unsigned char*)"\342\213\250", 0, 0}, /* ⋨ */ +{359529854, (unsigned char*)"\342\213\250", -1, -1}, /* ⋨ */ {359562889, (unsigned char*)"\342\210\235", 873, 889}, /* ∝ */ -{359780191, (unsigned char*)"\342\212\260", 0, 0}, /* ⊰ */ +{359780191, (unsigned char*)"\342\212\260", -1, -1}, /* ⊰ */ {361603609, (unsigned char*)"\342\252\242", 882, 884}, /* ⪢ */ -{363070526, (unsigned char*)"\342\200\210", 0, 0}, /*   */ +{363070526, (unsigned char*)"\342\200\210", -1, -1}, /*   */ {373076555, (unsigned char*)"\342\250\226", 883, 887}, /* ⨖ */ -{377795981, (unsigned char*)"\342\211\237", 0, 0}, /* ≟ */ +{377795981, (unsigned char*)"\342\211\237", -1, -1}, /* ≟ */ {379886530, (unsigned char*)"\342\244\234", 886, 888}, /* ⤜ */ -{387176008, (unsigned char*)"\342\212\212\357\270\200", 0, 0}, /* ⊊︀ */ +{387176008, (unsigned char*)"\342\212\212\357\270\200", -1, -1}, /* ⊊︀ */ {396426387, (unsigned char*)"\342\201\227", 885, 893}, /* ⁗ */ -{398734173, (unsigned char*)"\342\212\217\314\270", 0, 0}, /* ⊏̸ */ +{398734173, (unsigned char*)"\342\212\217\314\270", -1, -1}, /* ⊏̸ */ {407042323, (unsigned char*)"\342\210\260", 890, 892}, /* ∰ */ -{417247209, (unsigned char*)"\305\225", 0, 0}, /* ŕ */ +{417247209, (unsigned char*)"\305\225", -1, -1}, /* ŕ */ {417627006, (unsigned char*)"\342\237\251", 891, 895}, /* ⟩ */ -{417782381, (unsigned char*)"\342\245\265", 0, 0}, /* ⥵ */ +{417782381, (unsigned char*)"\342\245\265", -1, -1}, /* ⥵ */ {417782549, (unsigned char*)"\342\244\236", 894, 896}, /* ⤞ */ -{417782607, (unsigned char*)"\342\206\252", 0, 0}, /* ↪ */ +{417782607, (unsigned char*)"\342\206\252", -1, -1}, /* ↪ */ {417782744, (unsigned char*)"\342\206\254", 881, 914}, /* ↬ */ -{417782872, (unsigned char*)"\342\245\205", 0, 0}, /* ⥅ */ -{417783004, (unsigned char*)"\342\206\243", 898, 0}, /* ↣ */ +{417782872, (unsigned char*)"\342\245\205", -1, -1}, /* ⥅ */ +{417783004, (unsigned char*)"\342\206\243", 898, -1}, /* ↣ */ {417836002, (unsigned char*)"\342\244\232", 899, 901}, /* ⤚ */ -{418949844, (unsigned char*)"\175", 0, 0}, /* } */ +{418949844, (unsigned char*)"\175", -1, -1}, /* } */ {418949850, (unsigned char*)"\135", 900, 904}, /* ] */ -{419543754, (unsigned char*)"\305\231", 0, 0}, /* ř */ +{419543754, (unsigned char*)"\305\231", -1, -1}, /* ř */ {419672056, (unsigned char*)"\305\227", 903, 905}, /* ŗ */ -{421307938, (unsigned char*)"\342\200\235", 0, 0}, /* ” */ +{421307938, (unsigned char*)"\342\200\235", -1, -1}, /* ” */ {422752145, (unsigned char*)"\342\206\247", 902, 910}, /* ↧ */ -{423028196, (unsigned char*)"\342\206\244", 0, 0}, /* ↤ */ +{423028196, (unsigned char*)"\342\206\244", -1, -1}, /* ↤ */ {423389877, (unsigned char*)"\342\245\275", 907, 909}, /* ⥽ */ -{423493561, (unsigned char*)"\342\214\213", 0, 0}, /* ⌋ */ +{423493561, (unsigned char*)"\342\214\213", -1, -1}, /* ⌋ */ {423908415, (unsigned char*)"\342\213\233", 908, 912}, /* ⋛ */ -{425274516, (unsigned char*)"\342\213\216", 0, 0}, /* ⋎ */ +{425274516, (unsigned char*)"\342\213\216", -1, -1}, /* ⋎ */ {425473555, (unsigned char*)"\342\245\254", 911, 913}, /* ⥬ */ -{431909487, (unsigned char*)"\342\216\261", 0, 0}, /* ⎱ */ +{431909487, (unsigned char*)"\342\216\261", -1, -1}, /* ⎱ */ {434187999, (unsigned char*)"\342\207\211", 906, 922}, /* ⇉ */ -{434307530, (unsigned char*)"\342\250\256", 0, 0}, /* ⨮ */ +{434307530, (unsigned char*)"\342\250\256", -1, -1}, /* ⨮ */ {434960469, (unsigned char*)"\342\246\224", 915, 917}, /* ⦔ */ -{436843863, (unsigned char*)"\342\251\275\314\270", 0, 0}, /* ⩽̸ */ +{436843863, (unsigned char*)"\342\251\275\314\270", -1, -1}, /* ⩽̸ */ {438517600, (unsigned char*)"\342\200\272", 916, 920}, /* › */ -{439096753, (unsigned char*)"\342\200\231", 0, 0}, /* ’ */ +{439096753, (unsigned char*)"\342\200\231", -1, -1}, /* ’ */ {439955631, (unsigned char*)"\342\213\214", 919, 921}, /* ⋌ */ -{439986137, (unsigned char*)"\342\213\212", 0, 0}, /* ⋊ */ +{439986137, (unsigned char*)"\342\213\212", -1, -1}, /* ⋊ */ {440485992, (unsigned char*)"\342\207\225", 918, 926}, /* ⇕ */ -{456382602, (unsigned char*)"\305\233", 0, 0}, /* ś */ +{456382602, (unsigned char*)"\305\233", -1, -1}, /* ś */ {458679147, (unsigned char*)"\305\241", 923, 925}, /* š */ -{458807449, (unsigned char*)"\305\237", 0, 0}, /* ş */ +{458807449, (unsigned char*)"\305\237", -1, -1}, /* ş */ {459147218, (unsigned char*)"\342\213\251", 924, 928}, /* ⋩ */ -{461050755, (unsigned char*)"\342\244\245", 0, 0}, /* ⤥ */ +{461050755, (unsigned char*)"\342\244\245", -1, -1}, /* ⤥ */ {461179665, (unsigned char*)"\342\200\213", 927, 929}, /* ​ */ -{461702842, (unsigned char*)"\342\244\251", 0, 0}, /* ⤩ */ +{461702842, (unsigned char*)"\342\244\251", -1, -1}, /* ⤩ */ {462844836, (unsigned char*)"\342\214\242", 864, 996}, /* ⌢ */ -{464669351, (unsigned char*)"\321\211", 0, 0}, /* щ */ -{466004380, (unsigned char*)"\317\202", 931, 0}, /* ς */ +{464669351, (unsigned char*)"\321\211", -1, -1}, /* щ */ +{466004380, (unsigned char*)"\317\202", 931, -1}, /* ς */ {466004396, (unsigned char*)"\317\202", 932, 934}, /* ς */ -{466210677, (unsigned char*)"\342\251\252", 0, 0}, /* ⩪ */ +{466210677, (unsigned char*)"\342\251\252", -1, -1}, /* ⩪ */ {470539217, (unsigned char*)"\342\250\263", 933, 937}, /* ⨳ */ -{472091475, (unsigned char*)"\302\270", 0, 0}, /* ¸ */ +{472091475, (unsigned char*)"\302\270", -1, -1}, /* ¸ */ {473091677, (unsigned char*)"\321\214", 936, 938}, /* ь */ -{473287624, (unsigned char*)"\342\214\277", 0, 0}, /* ⌿ */ +{473287624, (unsigned char*)"\342\214\277", -1, -1}, /* ⌿ */ {474080549, (unsigned char*)"\342\231\240", 935, 943}, /* ♠ */ -{475335440, (unsigned char*)"\342\212\223\357\270\200", 0, 0}, /* ⊓︀ */ +{475335440, (unsigned char*)"\342\212\223\357\270\200", -1, -1}, /* ⊓︀ */ {475357220, (unsigned char*)"\342\212\224\357\270\200", 940, 942}, /* ⊔︀ */ -{475931736, (unsigned char*)"\342\212\221", 0, 0}, /* ⊑ */ +{475931736, (unsigned char*)"\342\212\221", -1, -1}, /* ⊑ */ {475932198, (unsigned char*)"\342\212\222", 941, 945}, /* ⊒ */ -{475982358, (unsigned char*)"\342\226\241", 0, 0}, /* □ */ +{475982358, (unsigned char*)"\342\226\241", -1, -1}, /* □ */ {475982359, (unsigned char*)"\342\226\252", 944, 946}, /* ▪ */ -{477799743, (unsigned char*)"\342\210\226", 0, 0}, /* ∖ */ +{477799743, (unsigned char*)"\342\210\226", -1, -1}, /* ∖ */ {478075218, (unsigned char*)"\342\214\243", 939, 955}, /* ⌣ */ -{478318264, (unsigned char*)"\342\213\206", 0, 0}, /* ⋆ */ +{478318264, (unsigned char*)"\342\213\206", -1, -1}, /* ⋆ */ {480046422, (unsigned char*)"\342\252\275", 948, 950}, /* ⪽ */ -{480062427, (unsigned char*)"\342\212\202", 0, 0}, /* ⊂ */ +{480062427, (unsigned char*)"\342\212\202", -1, -1}, /* ⊂ */ {480062552, (unsigned char*)"\342\253\207", 949, 953}, /* ⫇ */ -{480062937, (unsigned char*)"\342\253\225", 0, 0}, /* ⫕ */ +{480062937, (unsigned char*)"\342\253\225", -1, -1}, /* ⫕ */ {480062951, (unsigned char*)"\342\253\223", 952, 954}, /* ⫓ */ -{480080937, (unsigned char*)"\342\252\260", 0, 0}, /* ⪰ */ +{480080937, (unsigned char*)"\342\252\260", -1, -1}, /* ⪰ */ {480549540, (unsigned char*)"\342\252\276", 951, 959}, /* ⪾ */ -{480565545, (unsigned char*)"\342\212\203", 0, 0}, /* ⊃ */ +{480565545, (unsigned char*)"\342\212\203", -1, -1}, /* ⊃ */ {480565670, (unsigned char*)"\342\253\210", 956, 958}, /* ⫈ */ -{480566055, (unsigned char*)"\342\253\224", 0, 0}, /* ⫔ */ +{480566055, (unsigned char*)"\342\253\224", -1, -1}, /* ⫔ */ {480566069, (unsigned char*)"\342\253\226", 957, 961}, /* ⫖ */ -{482397333, (unsigned char*)"\342\244\246", 0, 0}, /* ⤦ */ +{482397333, (unsigned char*)"\342\244\246", -1, -1}, /* ⤦ */ {482869735, (unsigned char*)"\342\244\252", 960, 962}, /* ⤪ */ -{496041324, (unsigned char*)"\342\214\226", 0, 0}, /* ⌖ */ +{496041324, (unsigned char*)"\342\214\226", -1, -1}, /* ⌖ */ {497814540, (unsigned char*)"\305\245", 947, 980}, /* ť */ -{497942842, (unsigned char*)"\305\243", 0, 0}, /* ţ */ -{500581348, (unsigned char*)"\342\214\225", 964, 0}, /* ⌕ */ +{497942842, (unsigned char*)"\305\243", -1, -1}, /* ţ */ +{500581348, (unsigned char*)"\342\214\225", 964, -1}, /* ⌕ */ {503887505, (unsigned char*)"\342\210\264", 965, 967}, /* ∴ */ -{503889617, (unsigned char*)"\317\221", 0, 0}, /* ϑ */ +{503889617, (unsigned char*)"\317\221", -1, -1}, /* ϑ */ {504027419, (unsigned char*)"\342\200\211", 966, 970}, /*   */ -{504104405, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{504104405, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ {505347273, (unsigned char*)"\342\212\240", 969, 971}, /* ⊠ */ -{505347275, (unsigned char*)"\342\250\260", 0, 0}, /* ⨰ */ +{505347275, (unsigned char*)"\342\250\260", -1, -1}, /* ⨰ */ {512567229, (unsigned char*)"\342\214\266", 968, 976}, /* ⌶ */ -{512568118, (unsigned char*)"\342\253\261", 0, 0}, /* ⫱ */ +{512568118, (unsigned char*)"\342\253\261", -1, -1}, /* ⫱ */ {513832566, (unsigned char*)"\342\200\264", 973, 975}, /* ‴ */ -{515875611, (unsigned char*)"\342\227\254", 0, 0}, /* ◬ */ +{515875611, (unsigned char*)"\342\227\254", -1, -1}, /* ◬ */ {517472076, (unsigned char*)"\305\247", 974, 978}, /* ŧ */ -{534653388, (unsigned char*)"\303\272", 0, 0}, /* ú */ +{534653388, (unsigned char*)"\303\272", -1, -1}, /* ú */ {536361006, (unsigned char*)"\305\255", 977, 979}, /* ŭ */ -{538164784, (unsigned char*)"\305\261", 0, 0}, /* ű */ +{538164784, (unsigned char*)"\305\261", -1, -1}, /* ű */ {540796056, (unsigned char*)"\342\245\276", 972, 988}, /* ⥾ */ -{542286255, (unsigned char*)"\303\271", 0, 0}, /* ù */ +{542286255, (unsigned char*)"\303\271", -1, -1}, /* ù */ {547691928, (unsigned char*)"\342\214\234", 981, 983}, /* ⌜ */ -{547695098, (unsigned char*)"\342\214\217", 0, 0}, /* ⌏ */ +{547695098, (unsigned char*)"\342\214\217", -1, -1}, /* ⌏ */ {551442032, (unsigned char*)"\342\210\224", 982, 986}, /* ∔ */ -{554807454, (unsigned char*)"\342\214\235", 0, 0}, /* ⌝ */ +{554807454, (unsigned char*)"\342\214\235", -1, -1}, /* ⌝ */ {554810624, (unsigned char*)"\342\214\216", 985, 987}, /* ⌎ */ -{557391180, (unsigned char*)"\305\251", 0, 0}, /* ũ */ +{557391180, (unsigned char*)"\305\251", -1, -1}, /* ũ */ {561528584, (unsigned char*)"\342\206\223", 984, 992}, /* ↓ */ -{562700561, (unsigned char*)"\314\221", 0, 0}, /* ̑ */ +{562700561, (unsigned char*)"\314\221", -1, -1}, /* ̑ */ {566767800, (unsigned char*)"\342\206\223", 989, 991}, /* ↓ */ -{567369724, (unsigned char*)"\342\250\261", 0, 0}, /* ⨱ */ +{567369724, (unsigned char*)"\342\250\261", -1, -1}, /* ⨱ */ {568274355, (unsigned char*)"\342\211\207", 990, 994}, /* ≇ */ -{569355731, (unsigned char*)"\342\245\217", 0, 0}, /* ⥏ */ +{569355731, (unsigned char*)"\342\245\217", -1, -1}, /* ⥏ */ {574168791, (unsigned char*)"\342\246\234", 993, 995}, /* ⦜ */ -{574321999, (unsigned char*)"\317\225", 0, 0}, /* ϕ */ +{574321999, (unsigned char*)"\317\225", -1, -1}, /* ϕ */ {574324183, (unsigned char*)"\317\261", 963, 1029}, /* ϱ */ -{575971612, (unsigned char*)"\342\213\202", 0, 0}, /* ⋂ */ -{578408944, (unsigned char*)"\342\245\224", 997, 0}, /* ⥔ */ +{575971612, (unsigned char*)"\342\213\202", -1, -1}, /* ⋂ */ +{578408944, (unsigned char*)"\342\245\224", 997, -1}, /* ⥔ */ {578583034, (unsigned char*)"\342\212\273", 998, 1000}, /* ⊻ */ -{578845745, (unsigned char*)"\342\213\256", 0, 0}, /* ⋮ */ +{578845745, (unsigned char*)"\342\213\256", -1, -1}, /* ⋮ */ {579050215, (unsigned char*)"\174", 999, 1003}, /* | */ -{580970468, (unsigned char*)"\342\210\211", 0, 0}, /* ∉ */ +{580970468, (unsigned char*)"\342\210\211", -1, -1}, /* ∉ */ {580970469, (unsigned char*)"\342\213\267", 1002, 1004}, /* ⋷ */ -{580970470, (unsigned char*)"\342\213\266", 0, 0}, /* ⋶ */ +{580970470, (unsigned char*)"\342\213\266", -1, -1}, /* ⋶ */ {581144708, (unsigned char*)"\342\210\214", 1001, 1009}, /* ∌ */ -{581144709, (unsigned char*)"\342\213\276", 0, 0}, /* ⋾ */ +{581144709, (unsigned char*)"\342\213\276", -1, -1}, /* ⋾ */ {581144710, (unsigned char*)"\342\213\275", 1006, 1008}, /* ⋽ */ -{582607587, (unsigned char*)"\342\212\226", 0, 0}, /* ⊖ */ +{582607587, (unsigned char*)"\342\212\226", -1, -1}, /* ⊖ */ {585419272, (unsigned char*)"\342\206\254", 1007, 1011}, /* ↬ */ -{590907417, (unsigned char*)"\342\212\227", 0, 0}, /* ⊗ */ +{590907417, (unsigned char*)"\342\212\227", -1, -1}, /* ⊗ */ {595761304, (unsigned char*)"\342\253\213\357\270\200", 1010, 1012}, /* ⫋︀ */ -{595761336, (unsigned char*)"\342\212\212\357\270\200", 0, 0}, /* ⊊︀ */ +{595761336, (unsigned char*)"\342\212\212\357\270\200", -1, -1}, /* ⊊︀ */ {595776550, (unsigned char*)"\342\253\214\357\270\200", 1005, 1021}, /* ⫌︀ */ -{595776582, (unsigned char*)"\342\212\213\357\270\200", 0, 0}, /* ⊋︀ */ +{595776582, (unsigned char*)"\342\212\213\357\270\200", -1, -1}, /* ⊋︀ */ {599478056, (unsigned char*)"\342\207\223", 1014, 1016}, /* ⇓ */ -{602940966, (unsigned char*)"\342\210\217", 0, 0}, /* ∏ */ +{602940966, (unsigned char*)"\342\210\217", -1, -1}, /* ∏ */ {606661950, (unsigned char*)"\342\237\266", 1015, 1019}, /* ⟶ */ -{614278377, (unsigned char*)"\342\250\224", 0, 0}, /* ⨔ */ +{614278377, (unsigned char*)"\342\250\224", -1, -1}, /* ⨔ */ {617577747, (unsigned char*)"\342\252\257\314\270", 1018, 1020}, /* ⪯̸ */ -{617682490, (unsigned char*)"\342\251\237", 0, 0}, /* ⩟ */ +{617682490, (unsigned char*)"\342\251\237", -1, -1}, /* ⩟ */ {617688066, (unsigned char*)"\342\211\231", 1017, 1025}, /* ≙ */ -{617866001, (unsigned char*)"\342\204\230", 0, 0}, /* ℘ */ +{617866001, (unsigned char*)"\342\204\230", -1, -1}, /* ℘ */ {625068841, (unsigned char*)"\342\210\264", 1022, 1024}, /* ∴ */ -{627945337, (unsigned char*)"\342\252\211", 0, 0}, /* ⪉ */ +{627945337, (unsigned char*)"\342\252\211", -1, -1}, /* ⪉ */ {628380225, (unsigned char*)"\342\212\200", 1023, 1027}, /* ⊀ */ -{633134928, (unsigned char*)"\342\211\200", 0, 0}, /* ≀ */ +{633134928, (unsigned char*)"\342\211\200", -1, -1}, /* ≀ */ {651594882, (unsigned char*)"\342\212\263", 1026, 1028}, /* ⊳ */ -{657271117, (unsigned char*)"\342\206\225", 0, 0}, /* ↕ */ +{657271117, (unsigned char*)"\342\206\225", -1, -1}, /* ↕ */ {662809391, (unsigned char*)"\342\200\234", 1013, 1046}, /* “ */ -{664079451, (unsigned char*)"\342\247\217", 0, 0}, /* ⧏ */ -{664623714, (unsigned char*)"\342\211\251\357\270\200", 1030, 0}, /* ≩︀ */ +{664079451, (unsigned char*)"\342\247\217", -1, -1}, /* ⧏ */ +{664623714, (unsigned char*)"\342\211\251\357\270\200", 1030, -1}, /* ≩︀ */ {669119888, (unsigned char*)"\342\250\201", 1031, 1033}, /* ⨁ */ -{669260091, (unsigned char*)"\342\250\202", 0, 0}, /* ⨂ */ +{669260091, (unsigned char*)"\342\250\202", -1, -1}, /* ⨂ */ {673889705, (unsigned char*)"\342\250\206", 1032, 1036}, /* ⨆ */ -{674460267, (unsigned char*)"\342\217\247", 0, 0}, /* ⏧ */ +{674460267, (unsigned char*)"\342\217\247", -1, -1}, /* ⏧ */ {676235414, (unsigned char*)"\342\250\204", 1035, 1037}, /* ⨄ */ -{678202761, (unsigned char*)"\342\213\200", 0, 0}, /* ⋀ */ +{678202761, (unsigned char*)"\342\213\200", -1, -1}, /* ⋀ */ {680350718, (unsigned char*)"\342\253\214", 1034, 1042}, /* ⫌ */ -{691194960, (unsigned char*)"\303\275", 0, 0}, /* ý */ +{691194960, (unsigned char*)"\303\275", -1, -1}, /* ý */ {709255750, (unsigned char*)"\342\214\205", 1039, 1041}, /* ⌅ */ -{709420220, (unsigned char*)"\342\214\256", 0, 0}, /* ⌮ */ +{709420220, (unsigned char*)"\342\214\256", -1, -1}, /* ⌮ */ {709812676, (unsigned char*)"\342\214\222", 1040, 1044}, /* ⌒ */ -{710077436, (unsigned char*)"\342\214\223", 0, 0}, /* ⌓ */ +{710077436, (unsigned char*)"\342\214\223", -1, -1}, /* ⌓ */ {714706988, (unsigned char*)"\342\245\211", 1043, 1045}, /* ⥉ */ -{721896417, (unsigned char*)"\342\245\216", 0, 0}, /* ⥎ */ +{721896417, (unsigned char*)"\342\245\216", -1, -1}, /* ⥎ */ {723739728, (unsigned char*)"\342\245\226", 1038, 1054}, /* ⥖ */ -{730330353, (unsigned char*)"\305\272", 0, 0}, /* ź */ +{730330353, (unsigned char*)"\305\272", -1, -1}, /* ź */ {732626898, (unsigned char*)"\305\276", 1047, 1049}, /* ž */ -{734320614, (unsigned char*)"\342\213\242", 0, 0}, /* ⋢ */ +{734320614, (unsigned char*)"\342\213\242", -1, -1}, /* ⋢ */ {734321076, (unsigned char*)"\342\213\243", 1048, 1052}, /* ⋣ */ -{735144757, (unsigned char*)"\342\204\250", 0, 0}, /* ℨ */ +{735144757, (unsigned char*)"\342\204\250", -1, -1}, /* ℨ */ {738451305, (unsigned char*)"\342\212\202\342\203\222", 1051, 1053}, /* ⊂⃒ */ -{738469815, (unsigned char*)"\342\252\260\314\270", 0, 0}, /* ⪰̸ */ +{738469815, (unsigned char*)"\342\252\260\314\270", -1, -1}, /* ⪰̸ */ {738954423, (unsigned char*)"\342\212\203\342\203\222", 1050, 1058}, /* ⊃⃒ */ -{747512235, (unsigned char*)"\342\237\265", 0, 0}, /* ⟵ */ +{747512235, (unsigned char*)"\342\237\265", -1, -1}, /* ⟵ */ {754169043, (unsigned char*)"\342\212\206", 1055, 1057}, /* ⊆ */ -{768237051, (unsigned char*)"\342\207\203", 0, 0}, /* ⇃ */ +{768237051, (unsigned char*)"\342\207\203", -1, -1}, /* ⇃ */ {780580024, (unsigned char*)"\342\211\261", 1056, 1060}, /* ≱ */ -{785582384, (unsigned char*)"\342\207\221", 0, 0}, /* ⇑ */ +{785582384, (unsigned char*)"\342\207\221", -1, -1}, /* ⇑ */ {798071634, (unsigned char*)"\342\211\265", 1059, 1061}, /* ≵ */ -{809442366, (unsigned char*)"\342\213\232", 0, 0}, /* ⋚ */ +{809442366, (unsigned char*)"\342\213\232", -1, -1}, /* ⋚ */ {813260100, (unsigned char*)"\342\226\253", 531, 1594}, /* ▫ */ -{821833914, (unsigned char*)"\342\211\247", 0, 0}, /* ≧ */ -{826190435, (unsigned char*)"\342\245\225", 1063, 0}, /* ⥕ */ +{821833914, (unsigned char*)"\342\211\247", -1, -1}, /* ≧ */ +{826190435, (unsigned char*)"\342\245\225", 1063, -1}, /* ⥕ */ {830437955, (unsigned char*)"\342\206\274", 1064, 1066}, /* ↼ */ -{831545492, (unsigned char*)"\342\211\273", 0, 0}, /* ≻ */ +{831545492, (unsigned char*)"\342\211\273", -1, -1}, /* ≻ */ {836458806, (unsigned char*)"\342\204\265", 1065, 1069}, /* ℵ */ -{836867337, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{836867337, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ {837080726, (unsigned char*)"\342\247\253", 1068, 1070}, /* ⧫ */ -{841915047, (unsigned char*)"\342\246\246", 0, 0}, /* ⦦ */ +{841915047, (unsigned char*)"\342\246\246", -1, -1}, /* ⦦ */ {842043645, (unsigned char*)"\342\247\236", 1067, 1075}, /* ⧞ */ -{845830089, (unsigned char*)"\342\212\264\342\203\222", 0, 0}, /* ⊴⃒ */ +{845830089, (unsigned char*)"\342\212\264\342\203\222", -1, -1}, /* ⊴⃒ */ {852945615, (unsigned char*)"\342\212\265\342\203\222", 1072, 1074}, /* ⊵⃒ */ -{860116750, (unsigned char*)"\342\206\222", 0, 0}, /* → */ +{860116750, (unsigned char*)"\342\206\222", -1, -1}, /* → */ {871848693, (unsigned char*)"\342\206\226", 1073, 1077}, /* ↖ */ -{872140944, (unsigned char*)"\342\245\210", 0, 0}, /* ⥈ */ +{872140944, (unsigned char*)"\342\245\210", -1, -1}, /* ⥈ */ {878608901, (unsigned char*)"\342\226\275", 1076, 1078}, /* ▽ */ -{887116914, (unsigned char*)"\342\204\232", 0, 0}, /* ℚ */ +{887116914, (unsigned char*)"\342\204\232", -1, -1}, /* ℚ */ {891834107, (unsigned char*)"\342\213\240", 1071, 1088}, /* ⋠ */ -{901917559, (unsigned char*)"\342\244\240", 0, 0}, /* ⤠ */ -{901936165, (unsigned char*)"\342\245\264", 1080, 0}, /* ⥴ */ +{901917559, (unsigned char*)"\342\244\240", -1, -1}, /* ⤠ */ +{901936165, (unsigned char*)"\342\245\264", 1080, -1}, /* ⥴ */ {904895059, (unsigned char*)"\342\226\277", 1081, 1083}, /* ▿ */ -{905171110, (unsigned char*)"\342\227\203", 0, 0}, /* ◃ */ +{905171110, (unsigned char*)"\342\227\203", -1, -1}, /* ◃ */ {905338586, (unsigned char*)"\342\250\225", 1082, 1086}, /* ⨕ */ -{905799629, (unsigned char*)"\342\250\215", 0, 0}, /* ⨍ */ +{905799629, (unsigned char*)"\342\250\215", -1, -1}, /* ⨍ */ {917533657, (unsigned char*)"\342\212\276", 1085, 1087}, /* ⊾ */ -{917735130, (unsigned char*)"\342\216\260", 0, 0}, /* ⎰ */ +{917735130, (unsigned char*)"\342\216\260", -1, -1}, /* ⎰ */ {917800346, (unsigned char*)"\342\215\274", 1084, 1092}, /* ⍼ */ -{920002972, (unsigned char*)"\342\206\233", 0, 0}, /* ↛ */ +{920002972, (unsigned char*)"\342\206\233", -1, -1}, /* ↛ */ {932905258, (unsigned char*)"\342\213\254", 1089, 1091}, /* ⋬ */ -{940820089, (unsigned char*)"\342\246\216", 0, 0}, /* ⦎ */ +{940820089, (unsigned char*)"\342\246\216", -1, -1}, /* ⦎ */ {940820106, (unsigned char*)"\342\246\220", 1090, 1094}, /* ⦐ */ -{946094580, (unsigned char*)"\342\213\236", 0, 0}, /* ⋞ */ +{946094580, (unsigned char*)"\342\213\236", -1, -1}, /* ⋞ */ {946205592, (unsigned char*)"\342\213\237", 1093, 1095}, /* ⋟ */ -{946608062, (unsigned char*)"\342\217\236", 0, 0}, /* ⏞ */ +{946608062, (unsigned char*)"\342\217\236", -1, -1}, /* ⏞ */ {948733150, (unsigned char*)"\342\237\266", 1079, 1113}, /* ⟶ */ -{960250128, (unsigned char*)"\342\207\244", 0, 0}, /* ⇤ */ -{960260978, (unsigned char*)"\342\211\210", 1097, 0}, /* ≈ */ +{960250128, (unsigned char*)"\342\207\244", -1, -1}, /* ⇤ */ +{960260978, (unsigned char*)"\342\211\210", 1097, -1}, /* ≈ */ {961579650, (unsigned char*)"\342\212\220\314\270", 1098, 1100}, /* ⊐̸ */ -{966045093, (unsigned char*)"\342\200\213", 0, 0}, /* ​ */ +{966045093, (unsigned char*)"\342\200\213", -1, -1}, /* ​ */ {986782194, (unsigned char*)"\342\201\237", 1099, 1103}, /*   */ -{1004833897, (unsigned char*)"\342\211\221", 0, 0}, /* ≑ */ +{1004833897, (unsigned char*)"\342\211\221", -1, -1}, /* ≑ */ {1011711462, (unsigned char*)"\342\245\251", 1102, 1104}, /* ⥩ */ -{1012110869, (unsigned char*)"\342\247\264", 0, 0}, /* ⧴ */ +{1012110869, (unsigned char*)"\342\247\264", -1, -1}, /* ⧴ */ {1014044856, (unsigned char*)"\342\210\270", 1101, 1109}, /* ∸ */ -{1014590239, (unsigned char*)"\342\212\210", 0, 0}, /* ⊈ */ +{1014590239, (unsigned char*)"\342\212\210", -1, -1}, /* ⊈ */ {1022603184, (unsigned char*)"\342\253\213", 1106, 1108}, /* ⫋ */ -{1032612858, (unsigned char*)"\342\251\276\314\270", 0, 0}, /* ⩾̸ */ +{1032612858, (unsigned char*)"\342\251\276\314\270", -1, -1}, /* ⩾̸ */ {1038090725, (unsigned char*)"\342\204\233", 1107, 1111}, /* ℛ */ -{1041625053, (unsigned char*)"\342\200\213", 0, 0}, /* ​ */ +{1041625053, (unsigned char*)"\342\200\213", -1, -1}, /* ​ */ {1047678075, (unsigned char*)"\342\206\275", 1110, 1112}, /* ↽ */ -{1048242133, (unsigned char*)"\342\206\221", 0, 0}, /* ↑ */ +{1048242133, (unsigned char*)"\342\206\221", -1, -1}, /* ↑ */ {1067296237, (unsigned char*)"\342\207\214", 1105, 1121}, /* ⇌ */ -{1067503520, (unsigned char*)"\342\245\221", 0, 0}, /* ⥑ */ +{1067503520, (unsigned char*)"\342\245\221", -1, -1}, /* ⥑ */ {1069258735, (unsigned char*)"\317\205", 1114, 1116}, /* υ */ -{1078829841, (unsigned char*)"\342\205\207", 0, 0}, /* ⅇ */ +{1078829841, (unsigned char*)"\342\205\207", -1, -1}, /* ⅇ */ {1085075851, (unsigned char*)"\342\237\270", 1115, 1119}, /* ⟸ */ -{1094246452, (unsigned char*)"\342\211\274", 0, 0}, /* ≼ */ +{1094246452, (unsigned char*)"\342\211\274", -1, -1}, /* ≼ */ {1105826287, (unsigned char*)"\342\204\225", 1118, 1120}, /* ℕ */ -{1110241840, (unsigned char*)"\342\252\214", 0, 0}, /* ⪌ */ +{1110241840, (unsigned char*)"\342\252\214", -1, -1}, /* ⪌ */ {1114698965, (unsigned char*)"\342\204\202", 1117, 1125}, /* ℂ */ -{1134372613, (unsigned char*)"\342\211\215", 0, 0}, /* ≍ */ +{1134372613, (unsigned char*)"\342\211\215", -1, -1}, /* ≍ */ {1137538782, (unsigned char*)"\342\204\215", 1122, 1124}, /* ℍ */ -{1158775925, (unsigned char*)"\302\261", 0, 0}, /* ± */ +{1158775925, (unsigned char*)"\302\261", -1, -1}, /* ± */ {1171717239, (unsigned char*)"\342\246\264", 1123, 1127}, /* ⦴ */ -{1172223697, (unsigned char*)"\342\210\226", 0, 0}, /* ∖ */ +{1172223697, (unsigned char*)"\342\210\226", -1, -1}, /* ∖ */ {1181816526, (unsigned char*)"\342\234\223", 1126, 1128}, /* ✓ */ -{1182032078, (unsigned char*)"\342\212\270", 0, 0}, /* ⊸ */ +{1182032078, (unsigned char*)"\342\212\270", -1, -1}, /* ⊸ */ {1217189753, (unsigned char*)"\342\206\224", 1096, 1162}, /* ↔ */ -{1246782313, (unsigned char*)"\342\251\276", 0, 0}, /* ⩾ */ -{1269495274, (unsigned char*)"\342\245\213", 1130, 0}, /* ⥋ */ +{1246782313, (unsigned char*)"\342\251\276", -1, -1}, /* ⩾ */ +{1269495274, (unsigned char*)"\342\245\213", 1130, -1}, /* ⥋ */ {1272170499, (unsigned char*)"\342\204\222", 1131, 1133}, /* ℒ */ -{1273287689, (unsigned char*)"\342\207\213", 0, 0}, /* ⇋ */ +{1273287689, (unsigned char*)"\342\207\213", -1, -1}, /* ⇋ */ {1278230270, (unsigned char*)"\342\206\245", 1132, 1136}, /* ↥ */ -{1287858390, (unsigned char*)"\342\212\213\357\270\200", 0, 0}, /* ⊋︀ */ +{1287858390, (unsigned char*)"\342\212\213\357\270\200", -1, -1}, /* ⊋︀ */ {1311329176, (unsigned char*)"\342\207\205", 1135, 1137}, /* ⇅ */ -{1322034040, (unsigned char*)"\342\246\247", 0, 0}, /* ⦧ */ +{1322034040, (unsigned char*)"\342\246\247", -1, -1}, /* ⦧ */ {1324543392, (unsigned char*)"\342\216\261", 1134, 1142}, /* ⎱ */ -{1335946027, (unsigned char*)"\342\211\247\314\270", 0, 0}, /* ≧̸ */ +{1335946027, (unsigned char*)"\342\211\247\314\270", -1, -1}, /* ≧̸ */ {1341522893, (unsigned char*)"\342\252\270", 1139, 1141}, /* ⪸ */ -{1343159904, (unsigned char*)"\342\212\203", 0, 0}, /* ⊃ */ +{1343159904, (unsigned char*)"\342\212\203", -1, -1}, /* ⊃ */ {1361466253, (unsigned char*)"\342\212\223", 1140, 1144}, /* ⊓ */ -{1374704544, (unsigned char*)"\342\217\237", 0, 0}, /* ⏟ */ +{1374704544, (unsigned char*)"\342\217\237", -1, -1}, /* ⏟ */ {1412370969, (unsigned char*)"\342\237\271", 1143, 1145}, /* ⟹ */ -{1414406743, (unsigned char*)"\342\213\252", 0, 0}, /* ⋪ */ +{1414406743, (unsigned char*)"\342\213\252", -1, -1}, /* ⋪ */ {1417986287, (unsigned char*)"\342\213\254", 1138, 1154}, /* ⋬ */ -{1431774055, (unsigned char*)"\342\211\246", 0, 0}, /* ≦ */ +{1431774055, (unsigned char*)"\342\211\246", -1, -1}, /* ≦ */ {1451873416, (unsigned char*)"\342\250\265", 1147, 1149}, /* ⨵ */ -{1468837420, (unsigned char*)"\342\247\244", 0, 0}, /* ⧤ */ +{1468837420, (unsigned char*)"\342\247\244", -1, -1}, /* ⧤ */ {1483079107, (unsigned char*)"\342\207\245", 1148, 1152}, /* ⇥ */ -{1483147475, (unsigned char*)"\342\206\245", 0, 0}, /* ↥ */ +{1483147475, (unsigned char*)"\342\206\245", -1, -1}, /* ↥ */ {1503454322, (unsigned char*)"\342\226\263", 1151, 1153}, /* △ */ -{1512556300, (unsigned char*)"\342\207\206", 0, 0}, /* ⇆ */ +{1512556300, (unsigned char*)"\342\207\206", -1, -1}, /* ⇆ */ {1534661236, (unsigned char*)"\342\205\205", 1150, 1158}, /* ⅅ */ -{1534801541, (unsigned char*)"\342\211\260", 0, 0}, /* ≰ */ +{1534801541, (unsigned char*)"\342\211\260", -1, -1}, /* ≰ */ {1552293151, (unsigned char*)"\342\211\264", 1155, 1157}, /* ≴ */ -{1557558424, (unsigned char*)"\342\206\243", 0, 0}, /* ↣ */ +{1557558424, (unsigned char*)"\342\206\243", -1, -1}, /* ↣ */ {1559260953, (unsigned char*)"\342\206\224", 1156, 1160}, /* ↔ */ -{1559699231, (unsigned char*)"\342\207\203", 0, 0}, /* ⇃ */ +{1559699231, (unsigned char*)"\342\207\203", -1, -1}, /* ⇃ */ {1561915692, (unsigned char*)"\342\206\274", 1159, 1161}, /* ↼ */ -{1562485741, (unsigned char*)"\342\212\211", 0, 0}, /* ⊉ */ +{1562485741, (unsigned char*)"\342\212\211", -1, -1}, /* ⊉ */ {1572185325, (unsigned char*)"\302\267", 1146, 1179}, /* · */ -{1576001964, (unsigned char*)"\342\214\237", 0, 0}, /* ⌟ */ -{1589202769, (unsigned char*)"\342\205\207", 1163, 0}, /* ⅇ */ +{1576001964, (unsigned char*)"\342\214\237", -1, -1}, /* ⌟ */ +{1589202769, (unsigned char*)"\342\205\207", 1163, -1}, /* ⅇ */ {1590598039, (unsigned char*)"\342\224\200", 1164, 1166}, /* ─ */ -{1619628897, (unsigned char*)"\342\214\206", 0, 0}, /* ⌆ */ +{1619628897, (unsigned char*)"\342\214\206", -1, -1}, /* ⌆ */ {1630548983, (unsigned char*)"\342\252\271", 1165, 1169}, /* ⪹ */ -{1632155742, (unsigned char*)"\342\212\264", 0, 0}, /* ⊴ */ +{1632155742, (unsigned char*)"\342\212\264", -1, -1}, /* ⊴ */ {1652415397, (unsigned char*)"\342\210\256", 1168, 1170}, /* ∮ */ -{1656304147, (unsigned char*)"\342\200\235", 0, 0}, /* ” */ +{1656304147, (unsigned char*)"\342\200\235", -1, -1}, /* ” */ {1660701161, (unsigned char*)"\342\253\244", 1167, 1175}, /* ⫤ */ -{1664917774, (unsigned char*)"\342\211\275", 0, 0}, /* ≽ */ +{1664917774, (unsigned char*)"\342\211\275", -1, -1}, /* ≽ */ {1675433358, (unsigned char*)"\342\211\262", 1172, 1174}, /* ≲ */ -{1677624072, (unsigned char*)"\342\245\250", 0, 0}, /* ⥨ */ +{1677624072, (unsigned char*)"\342\245\250", -1, -1}, /* ⥨ */ {1687486893, (unsigned char*)"\342\206\225", 1173, 1177}, /* ↕ */ -{1695244767, (unsigned char*)"\342\210\275", 0, 0}, /* ∽ */ +{1695244767, (unsigned char*)"\342\210\275", -1, -1}, /* ∽ */ {1696757428, (unsigned char*)"\342\213\252", 1176, 1178}, /* ⋪ */ -{1709476789, (unsigned char*)"\342\206\253", 0, 0}, /* ↫ */ +{1709476789, (unsigned char*)"\342\206\253", -1, -1}, /* ↫ */ {1724069746, (unsigned char*)"\342\211\255", 1171, 1187}, /* ≭ */ -{1729453610, (unsigned char*)"\342\245\212", 0, 0}, /* ⥊ */ +{1729453610, (unsigned char*)"\342\245\212", -1, -1}, /* ⥊ */ {1735157173, (unsigned char*)"\342\213\242", 1180, 1182}, /* ⋢ */ -{1735196042, (unsigned char*)"\342\246\273", 0, 0}, /* ⦻ */ +{1735196042, (unsigned char*)"\342\246\273", -1, -1}, /* ⦻ */ {1743044337, (unsigned char*)"\342\244\237", 1181, 1185}, /* ⤟ */ -{1743062943, (unsigned char*)"\342\245\263", 0, 0}, /* ⥳ */ +{1743062943, (unsigned char*)"\342\245\263", -1, -1}, /* ⥳ */ {1780911036, (unsigned char*)"\316\277", 1184, 1186}, /* ο */ -{1781946867, (unsigned char*)"\342\246\217", 0, 0}, /* ⦏ */ +{1781946867, (unsigned char*)"\342\246\217", -1, -1}, /* ⦏ */ {1781946884, (unsigned char*)"\342\246\215", 1183, 1191}, /* ⦍ */ -{1789597159, (unsigned char*)"\342\251\275\314\270", 0, 0}, /* ⩽̸ */ +{1789597159, (unsigned char*)"\342\251\275\314\270", -1, -1}, /* ⩽̸ */ {1792295088, (unsigned char*)"\342\231\243", 1188, 1190}, /* ♣ */ -{1800766792, (unsigned char*)"\342\250\243", 0, 0}, /* ⨣ */ +{1800766792, (unsigned char*)"\342\250\243", -1, -1}, /* ⨣ */ {1801278592, (unsigned char*)"\342\211\257", 1189, 1193}, /* ≯ */ -{1805699638, (unsigned char*)"\342\210\204", 0, 0}, /* ∄ */ +{1805699638, (unsigned char*)"\342\210\204", -1, -1}, /* ∄ */ {1808940891, (unsigned char*)"\342\247\235", 1192, 1194}, /* ⧝ */ -{1809192765, (unsigned char*)"\342\250\222", 0, 0}, /* ⨒ */ +{1809192765, (unsigned char*)"\342\250\222", -1, -1}, /* ⨒ */ {1812749833, (unsigned char*)"\342\210\263", 1129, 1262}, /* ∳ */ -{1814824375, (unsigned char*)"\12", 0, 0}, /* */ -{1824044748, (unsigned char*)"\342\211\234", 1196, 0}, /* ≜ */ +{1814824375, (unsigned char*)"\12", -1, -1}, /* */ +{1824044748, (unsigned char*)"\342\211\234", 1196, -1}, /* ≜ */ {1826118667, (unsigned char*)"\313\235", 1197, 1199}, /* ˝ */ -{1833046394, (unsigned char*)"\342\212\237", 0, 0}, /* ⊟ */ +{1833046394, (unsigned char*)"\342\212\237", -1, -1}, /* ⊟ */ {1841346224, (unsigned char*)"\342\212\240", 1198, 1202}, /* ⊠ */ -{1846251367, (unsigned char*)"\342\211\250\357\270\200", 0, 0}, /* ≨︀ */ +{1846251367, (unsigned char*)"\342\211\250\357\270\200", -1, -1}, /* ≨︀ */ {1851429469, (unsigned char*)"\342\210\265", 1201, 1203}, /* ∵ */ -{1854412551, (unsigned char*)"\302\250", 0, 0}, /* ¨ */ +{1854412551, (unsigned char*)"\302\250", -1, -1}, /* ¨ */ {1859953766, (unsigned char*)"\342\245\247", 1200, 1208}, /* ⥧ */ -{1863308051, (unsigned char*)"\342\226\252", 0, 0}, /* ▪ */ +{1863308051, (unsigned char*)"\342\226\252", -1, -1}, /* ▪ */ {1863826860, (unsigned char*)"\342\246\260", 1205, 1207}, /* ⦰ */ -{1868071481, (unsigned char*)"\342\245\241", 0, 0}, /* ⥡ */ +{1868071481, (unsigned char*)"\342\245\241", -1, -1}, /* ⥡ */ {1868748369, (unsigned char*)"\342\250\223", 1206, 1210}, /* ⨓ */ -{1872038252, (unsigned char*)"\342\212\217", 0, 0}, /* ⊏ */ +{1872038252, (unsigned char*)"\342\212\217", -1, -1}, /* ⊏ */ {1872362863, (unsigned char*)"\342\211\254", 1209, 1211}, /* ≬ */ -{1880607711, (unsigned char*)"\316\265", 0, 0}, /* ε */ +{1880607711, (unsigned char*)"\316\265", -1, -1}, /* ε */ {1882771727, (unsigned char*)"\342\205\210", 1204, 1221}, /* ⅈ */ -{1896441789, (unsigned char*)"\342\244\223", 0, 0}, /* ⤓ */ -{1897994954, (unsigned char*)"\342\237\277", 1213, 0}, /* ⟿ */ +{1896441789, (unsigned char*)"\342\244\223", -1, -1}, /* ⤓ */ +{1897994954, (unsigned char*)"\342\237\277", 1213, -1}, /* ⟿ */ {1900283327, (unsigned char*)"\342\252\201", 1214, 1216}, /* ⪁ */ -{1900810243, (unsigned char*)"\342\213\226", 0, 0}, /* ⋖ */ +{1900810243, (unsigned char*)"\342\213\226", -1, -1}, /* ⋖ */ {1900813673, (unsigned char*)"\342\211\266", 1215, 1219}, /* ≶ */ -{1900826373, (unsigned char*)"\342\211\262", 0, 0}, /* ≲ */ +{1900826373, (unsigned char*)"\342\211\262", -1, -1}, /* ≲ */ {1900983990, (unsigned char*)"\342\211\225", 1218, 1220}, /* ≕ */ -{1913481565, (unsigned char*)"\342\210\244", 0, 0}, /* ∤ */ +{1913481565, (unsigned char*)"\342\210\244", -1, -1}, /* ∤ */ {1916690337, (unsigned char*)"\342\213\204", 1217, 1225}, /* ⋄ */ -{1922124375, (unsigned char*)"\342\251\270", 0, 0}, /* ⩸ */ +{1922124375, (unsigned char*)"\342\251\270", -1, -1}, /* ⩸ */ {1934515027, (unsigned char*)"\342\206\267", 1222, 1224}, /* ↷ */ -{1942807416, (unsigned char*)"\342\200\231", 0, 0}, /* ’ */ +{1942807416, (unsigned char*)"\342\200\231", -1, -1}, /* ’ */ {1948810028, (unsigned char*)"\342\207\204", 1223, 1227}, /* ⇄ */ -{1949326628, (unsigned char*)"\342\212\221", 0, 0}, /* ⊑ */ +{1949326628, (unsigned char*)"\342\212\221", -1, -1}, /* ⊑ */ {1959376936, (unsigned char*)"\342\250\202", 1226, 1228}, /* ⨂ */ -{1960073481, (unsigned char*)"\342\204\260", 0, 0}, /* ℰ */ +{1960073481, (unsigned char*)"\342\204\260", -1, -1}, /* ℰ */ {1970730262, (unsigned char*)"\342\204\264", 1212, 1246}, /* ℴ */ -{1987029913, (unsigned char*)"\342\216\266", 0, 0}, /* ⎶ */ -{1988767401, (unsigned char*)"\342\251\227", 1230, 0}, /* ⩗ */ +{1987029913, (unsigned char*)"\342\216\266", -1, -1}, /* ⎶ */ +{1988767401, (unsigned char*)"\342\251\227", 1230, -1}, /* ⩗ */ {1992137236, (unsigned char*)"\342\213\265\314\270", 1231, 1233}, /* ⋵̸ */ -{2001917072, (unsigned char*)"\342\235\230", 0, 0}, /* ❘ */ +{2001917072, (unsigned char*)"\342\235\230", -1, -1}, /* ❘ */ {2011492714, (unsigned char*)"\342\250\201", 1232, 1236}, /* ⨁ */ -{2012773496, (unsigned char*)"\342\227\257", 0, 0}, /* ◯ */ +{2012773496, (unsigned char*)"\342\227\257", -1, -1}, /* ◯ */ {2013199213, (unsigned char*)"\342\250\200", 1235, 1237}, /* ⨀ */ -{2013359921, (unsigned char*)"\342\230\205", 0, 0}, /* ★ */ +{2013359921, (unsigned char*)"\342\230\205", -1, -1}, /* ★ */ {2016091416, (unsigned char*)"\342\245\222", 1234, 1242}, /* ⥒ */ -{2016262531, (unsigned char*)"\342\250\206", 0, 0}, /* ⨆ */ +{2016262531, (unsigned char*)"\342\250\206", -1, -1}, /* ⨆ */ {2018608240, (unsigned char*)"\342\250\204", 1239, 1241}, /* ⨄ */ -{2020575587, (unsigned char*)"\342\213\200", 0, 0}, /* ⋀ */ +{2020575587, (unsigned char*)"\342\213\200", -1, -1}, /* ⋀ */ {2022898772, (unsigned char*)"\342\207\224", 1240, 1244}, /* ⇔ */ -{2026494504, (unsigned char*)"\342\211\217\314\270", 0, 0}, /* ≏̸ */ +{2026494504, (unsigned char*)"\342\211\217\314\270", -1, -1}, /* ≏̸ */ {2036145450, (unsigned char*)"\342\213\253", 1243, 1245}, /* ⋫ */ -{2037412504, (unsigned char*)"\342\207\214", 0, 0}, /* ⇌ */ +{2037412504, (unsigned char*)"\342\207\214", -1, -1}, /* ⇌ */ {2067139948, (unsigned char*)"\342\206\277", 1238, 1254}, /* ↿ */ -{2083152187, (unsigned char*)"\342\206\220", 0, 0}, /* ← */ +{2083152187, (unsigned char*)"\342\206\220", -1, -1}, /* ← */ {2088391403, (unsigned char*)"\342\206\220", 1247, 1249}, /* ← */ -{2088862898, (unsigned char*)"\342\214\212", 0, 0}, /* ⌊ */ +{2088862898, (unsigned char*)"\342\214\212", -1, -1}, /* ⌊ */ {2088934187, (unsigned char*)"\360\235\224\270", 1248, 1252}, /* 𝔸 */ -{2088938126, (unsigned char*)"\360\235\222\234", 0, 0}, /* 𝒜 */ +{2088938126, (unsigned char*)"\360\235\222\234", -1, -1}, /* 𝒜 */ {2088940628, (unsigned char*)"\303\204", 1251, 1253}, /* Ä */ -{2088954960, (unsigned char*)"\342\253\247", 0, 0}, /* ⫧ */ +{2088954960, (unsigned char*)"\342\253\247", -1, -1}, /* ⫧ */ {2088959361, (unsigned char*)"\316\222", 1250, 1258}, /* Β */ -{2088963180, (unsigned char*)"\320\247", 0, 0}, /* Ч */ +{2088963180, (unsigned char*)"\320\247", -1, -1}, /* Ч */ {2088970124, (unsigned char*)"\360\235\224\271", 1255, 1257}, /* 𝔹 */ -{2088970144, (unsigned char*)"\302\251", 0, 0}, /* © */ +{2088970144, (unsigned char*)"\302\251", -1, -1}, /* © */ {2088974063, (unsigned char*)"\342\204\254", 1256, 1260}, /* ℬ */ -{2088994063, (unsigned char*)"\304\212", 0, 0}, /* Ċ */ +{2088994063, (unsigned char*)"\304\212", -1, -1}, /* Ċ */ {2089001295, (unsigned char*)"\320\202", 1259, 1261}, /* Ђ */ -{2089006061, (unsigned char*)"\342\204\202", 0, 0}, /* ℂ */ +{2089006061, (unsigned char*)"\342\204\202", -1, -1}, /* ℂ */ {2089010000, (unsigned char*)"\360\235\222\236", 1229, 1295}, /* 𝒞 */ -{2089011096, (unsigned char*)"\320\205", 0, 0}, /* Ѕ */ -{2089018719, (unsigned char*)"\320\217", 1263, 0}, /* Џ */ +{2089011096, (unsigned char*)"\320\205", -1, -1}, /* Ѕ */ +{2089018719, (unsigned char*)"\320\217", 1263, -1}, /* Џ */ {2089026830, (unsigned char*)"\342\206\241", 1264, 1266}, /* ↡ */ -{2089041998, (unsigned char*)"\360\235\224\273", 0, 0}, /* 𝔻 */ +{2089041998, (unsigned char*)"\360\235\224\273", -1, -1}, /* 𝔻 */ {2089045937, (unsigned char*)"\360\235\222\237", 1265, 1269}, /* 𝒟 */ -{2089065937, (unsigned char*)"\304\226", 0, 0}, /* Ė */ +{2089065937, (unsigned char*)"\304\226", -1, -1}, /* Ė */ {2089077935, (unsigned char*)"\360\235\224\274", 1268, 1270}, /* 𝔼 */ -{2089081874, (unsigned char*)"\342\204\260", 0, 0}, /* ℰ */ +{2089081874, (unsigned char*)"\342\204\260", -1, -1}, /* ℰ */ {2089082067, (unsigned char*)"\342\251\263", 1267, 1275}, /* ⩳ */ -{2089084376, (unsigned char*)"\303\213", 0, 0}, /* Ë */ +{2089084376, (unsigned char*)"\303\213", -1, -1}, /* Ë */ {2089109106, (unsigned char*)"\320\203", 1272, 1274}, /* Ѓ */ -{2089113872, (unsigned char*)"\360\235\224\275", 0, 0}, /* 𝔽 */ +{2089113872, (unsigned char*)"\360\235\224\275", -1, -1}, /* 𝔽 */ {2089117811, (unsigned char*)"\342\204\261", 1273, 1277}, /* ℱ */ -{2089137811, (unsigned char*)"\304\240", 0, 0}, /* Ġ */ +{2089137811, (unsigned char*)"\304\240", -1, -1}, /* Ġ */ {2089149809, (unsigned char*)"\360\235\224\276", 1276, 1278}, /* 𝔾 */ -{2089153748, (unsigned char*)"\360\235\222\242", 0, 0}, /* 𝒢 */ +{2089153748, (unsigned char*)"\360\235\222\242", -1, -1}, /* 𝒢 */ {2089175535, (unsigned char*)"\320\225", 1271, 1287}, /* Е */ -{2089185746, (unsigned char*)"\342\204\215", 0, 0}, /* ℍ */ +{2089185746, (unsigned char*)"\342\204\215", -1, -1}, /* ℍ */ {2089186425, (unsigned char*)"\320\201", 1280, 1282}, /* Ё */ -{2089189685, (unsigned char*)"\342\204\213", 0, 0}, /* ℋ */ +{2089189685, (unsigned char*)"\342\204\213", -1, -1}, /* ℋ */ {2089209685, (unsigned char*)"\304\260", 1281, 1285}, /* İ */ -{2089221683, (unsigned char*)"\360\235\225\200", 0, 0}, /* 𝕀 */ +{2089221683, (unsigned char*)"\360\235\225\200", -1, -1}, /* 𝕀 */ {2089221810, (unsigned char*)"\316\231", 1284, 1286}, /* Ι */ -{2089225622, (unsigned char*)"\342\204\220", 0, 0}, /* ℐ */ +{2089225622, (unsigned char*)"\342\204\220", -1, -1}, /* ℐ */ {2089228124, (unsigned char*)"\303\217", 1283, 1291}, /* Ï */ -{2089250676, (unsigned char*)"\320\245", 0, 0}, /* Х */ +{2089250676, (unsigned char*)"\320\245", -1, -1}, /* Х */ {2089252854, (unsigned char*)"\320\214", 1288, 1290}, /* Ќ */ -{2089257620, (unsigned char*)"\360\235\225\201", 0, 0}, /* 𝕁 */ +{2089257620, (unsigned char*)"\360\235\225\201", -1, -1}, /* 𝕁 */ {2089261559, (unsigned char*)"\360\235\222\245", 1289, 1293}, /* 𝒥 */ -{2089288791, (unsigned char*)"\320\211", 0, 0}, /* Љ */ +{2089288791, (unsigned char*)"\320\211", -1, -1}, /* Љ */ {2089293557, (unsigned char*)"\360\235\225\202", 1292, 1294}, /* 𝕂 */ -{2089297496, (unsigned char*)"\360\235\222\246", 0, 0}, /* 𝒦 */ +{2089297496, (unsigned char*)"\360\235\222\246", -1, -1}, /* 𝒦 */ {2089314183, (unsigned char*)"\342\237\252", 1279, 1312}, /* ⟪ */ -{2089314326, (unsigned char*)"\342\206\236", 0, 0}, /* ↞ */ -{2089329494, (unsigned char*)"\360\235\225\203", 1296, 0}, /* 𝕃 */ +{2089314326, (unsigned char*)"\342\206\236", -1, -1}, /* ↞ */ +{2089329494, (unsigned char*)"\360\235\225\203", 1296, -1}, /* 𝕃 */ {2089333433, (unsigned char*)"\342\204\222", 1297, 1299}, /* ℒ */ -{2089360665, (unsigned char*)"\320\212", 0, 0}, /* Њ */ +{2089360665, (unsigned char*)"\320\212", -1, -1}, /* Њ */ {2089365431, (unsigned char*)"\360\235\225\204", 1298, 1302}, /* 𝕄 */ -{2089369370, (unsigned char*)"\342\204\263", 0, 0}, /* ℳ */ +{2089369370, (unsigned char*)"\342\204\263", -1, -1}, /* ℳ */ {2089401368, (unsigned char*)"\342\204\225", 1301, 1303}, /* ℕ */ -{2089405307, (unsigned char*)"\360\235\222\251", 0, 0}, /* 𝒩 */ +{2089405307, (unsigned char*)"\360\235\222\251", -1, -1}, /* 𝒩 */ {2089437305, (unsigned char*)"\360\235\225\206", 1300, 1308}, /* 𝕆 */ -{2089441244, (unsigned char*)"\360\235\222\252", 0, 0}, /* 𝒪 */ +{2089441244, (unsigned char*)"\360\235\222\252", -1, -1}, /* 𝒪 */ {2089443746, (unsigned char*)"\303\226", 1305, 1307}, /* Ö */ -{2089473242, (unsigned char*)"\342\204\231", 0, 0}, /* ℙ */ +{2089473242, (unsigned char*)"\342\204\231", -1, -1}, /* ℙ */ {2089477181, (unsigned char*)"\360\235\222\253", 1306, 1310}, /* 𝒫 */ -{2089479758, (unsigned char*)"\42", 0, 0}, /* " */ +{2089479758, (unsigned char*)"\42", -1, -1}, /* " */ {2089509179, (unsigned char*)"\342\204\232", 1309, 1311}, /* ℚ */ -{2089513118, (unsigned char*)"\360\235\222\254", 0, 0}, /* 𝒬 */ +{2089513118, (unsigned char*)"\360\235\222\254", -1, -1}, /* 𝒬 */ {2089529805, (unsigned char*)"\342\237\253", 1304, 1320}, /* ⟫ */ -{2089529948, (unsigned char*)"\342\206\240", 0, 0}, /* ↠ */ +{2089529948, (unsigned char*)"\342\206\240", -1, -1}, /* ↠ */ {2089538172, (unsigned char*)"\320\250", 1313, 1315}, /* Ш */ -{2089545116, (unsigned char*)"\342\204\235", 0, 0}, /* ℝ */ +{2089545116, (unsigned char*)"\342\204\235", -1, -1}, /* ℝ */ {2089549055, (unsigned char*)"\342\204\233", 1314, 1318}, /* ℛ */ -{2089578539, (unsigned char*)"\342\245\223", 0, 0}, /* ⥓ */ +{2089578539, (unsigned char*)"\342\245\223", -1, -1}, /* ⥓ */ {2089581053, (unsigned char*)"\360\235\225\212", 1317, 1319}, /* 𝕊 */ -{2089583311, (unsigned char*)"\342\210\232", 0, 0}, /* √ */ +{2089583311, (unsigned char*)"\342\210\232", -1, -1}, /* √ */ {2089584992, (unsigned char*)"\360\235\222\256", 1316, 1324}, /* 𝒮 */ -{2089586015, (unsigned char*)"\342\213\206", 0, 0}, /* ⋆ */ +{2089586015, (unsigned char*)"\342\213\206", -1, -1}, /* ⋆ */ {2089586088, (unsigned char*)"\320\246", 1321, 1323}, /* Ц */ -{2089616990, (unsigned char*)"\360\235\225\213", 0, 0}, /* 𝕋 */ +{2089616990, (unsigned char*)"\360\235\225\213", -1, -1}, /* 𝕋 */ {2089620929, (unsigned char*)"\360\235\222\257", 1322, 1326}, /* 𝒯 */ -{2089637759, (unsigned char*)"\342\206\237", 0, 0}, /* ↟ */ +{2089637759, (unsigned char*)"\342\206\237", -1, -1}, /* ↟ */ {2089652927, (unsigned char*)"\360\235\225\214", 1325, 1327}, /* 𝕌 */ -{2089654118, (unsigned char*)"\317\222", 0, 0}, /* ϒ */ +{2089654118, (unsigned char*)"\317\222", -1, -1}, /* ϒ */ {2089656866, (unsigned char*)"\360\235\222\260", 1195, 1461}, /* 𝒰 */ -{2089659368, (unsigned char*)"\303\234", 0, 0}, /* Ü */ -{2089674224, (unsigned char*)"\342\253\253", 1329, 0}, /* ⫫ */ +{2089659368, (unsigned char*)"\303\234", -1, -1}, /* Ü */ +{2089674224, (unsigned char*)"\342\253\253", 1329, -1}, /* ⫫ */ {2089678054, (unsigned char*)"\342\200\226", 1330, 1332}, /* ‖ */ -{2089688864, (unsigned char*)"\360\235\225\215", 0, 0}, /* 𝕍 */ +{2089688864, (unsigned char*)"\360\235\225\215", -1, -1}, /* 𝕍 */ {2089692803, (unsigned char*)"\360\235\222\261", 1331, 1335}, /* 𝒱 */ -{2089724801, (unsigned char*)"\360\235\225\216", 0, 0}, /* 𝕎 */ +{2089724801, (unsigned char*)"\360\235\225\216", -1, -1}, /* 𝕎 */ {2089728740, (unsigned char*)"\360\235\222\262", 1334, 1336}, /* 𝒲 */ -{2089746171, (unsigned char*)"\320\257", 0, 0}, /* Я */ +{2089746171, (unsigned char*)"\320\257", -1, -1}, /* Я */ {2089754883, (unsigned char*)"\320\207", 1333, 1341}, /* Ї */ -{2089760738, (unsigned char*)"\360\235\225\217", 0, 0}, /* 𝕏 */ +{2089760738, (unsigned char*)"\360\235\225\217", -1, -1}, /* 𝕏 */ {2089764677, (unsigned char*)"\360\235\222\263", 1338, 1340}, /* 𝒳 */ -{2089767951, (unsigned char*)"\320\256", 0, 0}, /* Ю */ +{2089767951, (unsigned char*)"\320\256", -1, -1}, /* Ю */ {2089789731, (unsigned char*)"\320\226", 1339, 1343}, /* Ж */ -{2089796675, (unsigned char*)"\360\235\225\220", 0, 0}, /* 𝕐 */ +{2089796675, (unsigned char*)"\360\235\225\220", -1, -1}, /* 𝕐 */ {2089800614, (unsigned char*)"\360\235\222\264", 1342, 1344}, /* 𝒴 */ -{2089803116, (unsigned char*)"\305\270", 0, 0}, /* Ÿ */ +{2089803116, (unsigned char*)"\305\270", -1, -1}, /* Ÿ */ {2089820614, (unsigned char*)"\305\273", 1337, 1354}, /* Ż */ -{2089821849, (unsigned char*)"\316\226", 0, 0}, /* Ζ */ -{2089832612, (unsigned char*)"\342\204\244", 1346, 0}, /* ℤ */ +{2089821849, (unsigned char*)"\316\226", -1, -1}, /* Ζ */ +{2089832612, (unsigned char*)"\342\204\244", 1346, -1}, /* ℤ */ {2089836551, (unsigned char*)"\360\235\222\265", 1347, 1349}, /* 𝒵 */ -{2090082684, (unsigned char*)"\342\251\234", 0, 0}, /* ⩜ */ +{2090082684, (unsigned char*)"\342\251\234", -1, -1}, /* ⩜ */ {2090082702, (unsigned char*)"\342\251\232", 1348, 1352}, /* ⩚ */ -{2090082784, (unsigned char*)"\342\246\244", 0, 0}, /* ⦤ */ +{2090082784, (unsigned char*)"\342\246\244", -1, -1}, /* ⦤ */ {2090084152, (unsigned char*)"\342\253\255", 1351, 1353}, /* ⫭ */ -{2090084171, (unsigned char*)"\360\235\225\222", 0, 0}, /* 𝕒 */ +{2090084171, (unsigned char*)"\360\235\225\222", -1, -1}, /* 𝕒 */ {2090085027, (unsigned char*)"\342\211\213", 1350, 1358}, /* ≋ */ -{2090085240, (unsigned char*)"\47", 0, 0}, /* ' */ +{2090085240, (unsigned char*)"\47", -1, -1}, /* ' */ {2090088110, (unsigned char*)"\360\235\222\266", 1355, 1357}, /* 𝒶 */ -{2090090612, (unsigned char*)"\303\244", 0, 0}, /* ä */ +{2090090612, (unsigned char*)"\303\244", -1, -1}, /* ä */ {2090106022, (unsigned char*)"\342\216\265", 1356, 1360}, /* ⎵ */ -{2090109345, (unsigned char*)"\316\262", 0, 0}, /* β */ +{2090109345, (unsigned char*)"\316\262", -1, -1}, /* β */ {2090109352, (unsigned char*)"\342\204\266", 1359, 1361}, /* ℶ */ -{2090119000, (unsigned char*)"\342\214\220", 0, 0}, /* ⌐ */ +{2090119000, (unsigned char*)"\342\214\220", -1, -1}, /* ⌐ */ {2090120108, (unsigned char*)"\360\235\225\223", 1345, 1379}, /* 𝕓 */ -{2090120342, (unsigned char*)"\342\225\220", 0, 0}, /* ═ */ -{2090120356, (unsigned char*)"\342\225\221", 1363, 0}, /* ║ */ +{2090120342, (unsigned char*)"\342\225\220", -1, -1}, /* ═ */ +{2090120356, (unsigned char*)"\342\225\221", 1363, -1}, /* ║ */ {2090120374, (unsigned char*)"\342\224\200", 1364, 1366}, /* ─ */ -{2090120388, (unsigned char*)"\342\224\202", 0, 0}, /* │ */ +{2090120388, (unsigned char*)"\342\224\202", -1, -1}, /* │ */ {2090124047, (unsigned char*)"\360\235\222\267", 1365, 1369}, /* 𝒷 */ -{2090124240, (unsigned char*)"\342\210\275", 0, 0}, /* ∽ */ +{2090124240, (unsigned char*)"\342\210\275", -1, -1}, /* ∽ */ {2090124437, (unsigned char*)"\134", 1368, 1370}, /* \ */ -{2090126516, (unsigned char*)"\342\200\242", 0, 0}, /* • */ +{2090126516, (unsigned char*)"\342\200\242", -1, -1}, /* • */ {2090126553, (unsigned char*)"\342\211\216", 1367, 1375}, /* ≎ */ -{2090140812, (unsigned char*)"\342\210\251\357\270\200", 0, 0}, /* ∩︀ */ +{2090140812, (unsigned char*)"\342\210\251\357\270\200", -1, -1}, /* ∩︀ */ {2090141966, (unsigned char*)"\342\207\223", 1372, 1374}, /* ⇓ */ -{2090144047, (unsigned char*)"\304\213", 0, 0}, /* ċ */ +{2090144047, (unsigned char*)"\304\213", -1, -1}, /* ċ */ {2090145103, (unsigned char*)"\302\242", 1373, 1377}, /* ¢ */ -{2090148012, (unsigned char*)"\321\207", 0, 0}, /* ч */ +{2090148012, (unsigned char*)"\321\207", -1, -1}, /* ч */ {2090149028, (unsigned char*)"\342\245\245", 1376, 1378}, /* ⥥ */ -{2090149544, (unsigned char*)"\342\247\203", 0, 0}, /* ⧃ */ +{2090149544, (unsigned char*)"\342\247\203", -1, -1}, /* ⧃ */ {2090149574, (unsigned char*)"\313\206", 1371, 1387}, /* ˆ */ -{2090149576, (unsigned char*)"\342\211\227", 0, 0}, /* ≗ */ +{2090149576, (unsigned char*)"\342\211\227", -1, -1}, /* ≗ */ {2090155956, (unsigned char*)"\342\210\201", 1380, 1382}, /* ∁ */ -{2090155980, (unsigned char*)"\342\211\205", 0, 0}, /* ≅ */ +{2090155980, (unsigned char*)"\342\211\205", -1, -1}, /* ≅ */ {2090156045, (unsigned char*)"\360\235\225\224", 1381, 1385}, /* 𝕔 */ -{2090156064, (unsigned char*)"\302\251", 0, 0}, /* © */ +{2090156064, (unsigned char*)"\302\251", -1, -1}, /* © */ {2090159984, (unsigned char*)"\360\235\222\270", 1384, 1386}, /* 𝒸 */ -{2090160562, (unsigned char*)"\342\253\217", 0, 0}, /* ⫏ */ +{2090160562, (unsigned char*)"\342\253\217", -1, -1}, /* ⫏ */ {2090160576, (unsigned char*)"\342\253\220", 1383, 1391}, /* ⫐ */ -{2090162592, (unsigned char*)"\342\210\252\357\270\200", 0, 0}, /* ∪︀ */ +{2090162592, (unsigned char*)"\342\210\252\357\270\200", -1, -1}, /* ∪︀ */ {2090176814, (unsigned char*)"\342\206\223", 1388, 1390}, /* ↓ */ -{2090176837, (unsigned char*)"\342\200\220", 0, 0}, /* ‐ */ +{2090176837, (unsigned char*)"\342\200\220", -1, -1}, /* ‐ */ {2090181073, (unsigned char*)"\342\211\221", 1389, 1393}, /* ≑ */ -{2090184960, (unsigned char*)"\342\213\204", 0, 0}, /* ⋄ */ +{2090184960, (unsigned char*)"\342\213\204", -1, -1}, /* ⋄ */ {2090186127, (unsigned char*)"\321\222", 1392, 1394}, /* ђ */ -{2090191982, (unsigned char*)"\360\235\225\225", 0, 0}, /* 𝕕 */ +{2090191982, (unsigned char*)"\360\235\225\225", -1, -1}, /* 𝕕 */ {2090195921, (unsigned char*)"\360\235\222\271", 1362, 1428}, /* 𝒹 */ -{2090195928, (unsigned char*)"\321\225", 0, 0}, /* ѕ */ -{2090196311, (unsigned char*)"\342\247\266", 1396, 0}, /* ⧶ */ +{2090195928, (unsigned char*)"\321\225", -1, -1}, /* ѕ */ +{2090196311, (unsigned char*)"\342\247\266", 1396, -1}, /* ⧶ */ {2090197496, (unsigned char*)"\342\226\277", 1397, 1399}, /* ▿ */ -{2090203551, (unsigned char*)"\321\237", 0, 0}, /* џ */ +{2090203551, (unsigned char*)"\321\237", -1, -1}, /* џ */ {2090214632, (unsigned char*)"\342\211\226", 1398, 1402}, /* ≖ */ -{2090215921, (unsigned char*)"\304\227", 0, 0}, /* ė */ +{2090215921, (unsigned char*)"\304\227", -1, -1}, /* ė */ {2090225850, (unsigned char*)"\342\200\203", 1401, 1403}, /*   */ -{2090226939, (unsigned char*)"\342\200\202", 0, 0}, /*   */ +{2090226939, (unsigned char*)"\342\200\202", -1, -1}, /*   */ {2090227919, (unsigned char*)"\360\235\225\226", 1400, 1408}, /* 𝕖 */ -{2090228525, (unsigned char*)"\342\213\225", 0, 0}, /* ⋕ */ +{2090228525, (unsigned char*)"\342\213\225", -1, -1}, /* ⋕ */ {2090229110, (unsigned char*)"\316\265", 1405, 1407}, /* ε */ -{2090231858, (unsigned char*)"\342\204\257", 0, 0}, /* ℯ */ +{2090231858, (unsigned char*)"\342\204\257", -1, -1}, /* ℯ */ {2090232051, (unsigned char*)"\342\211\202", 1406, 1410}, /* ≂ */ -{2090234360, (unsigned char*)"\303\253", 0, 0}, /* ë */ +{2090234360, (unsigned char*)"\303\253", -1, -1}, /* ë */ {2090234528, (unsigned char*)"\342\202\254", 1409, 1411}, /* € */ -{2090237297, (unsigned char*)"\41", 0, 0}, /* ! */ +{2090237297, (unsigned char*)"\41", -1, -1}, /* ! */ {2090260108, (unsigned char*)"\342\231\255", 1404, 1420}, /* ♭ */ -{2090262734, (unsigned char*)"\306\222", 0, 0}, /* ƒ */ +{2090262734, (unsigned char*)"\306\222", -1, -1}, /* ƒ */ {2090263856, (unsigned char*)"\360\235\225\227", 1413, 1415}, /* 𝕗 */ -{2090263927, (unsigned char*)"\342\213\224", 0, 0}, /* ⋔ */ +{2090263927, (unsigned char*)"\342\213\224", -1, -1}, /* ⋔ */ {2090267795, (unsigned char*)"\360\235\222\273", 1414, 1418}, /* 𝒻 */ -{2090285714, (unsigned char*)"\342\207\224", 0, 0}, /* ⇔ */ +{2090285714, (unsigned char*)"\342\207\224", -1, -1}, /* ⇔ */ {2090287795, (unsigned char*)"\304\241", 1417, 1419}, /* ġ */ -{2090288947, (unsigned char*)"\342\211\247", 0, 0}, /* ≧ */ +{2090288947, (unsigned char*)"\342\211\247", -1, -1}, /* ≧ */ {2090289008, (unsigned char*)"\342\213\233\357\270\200", 1416, 1424}, /* ⋛︀ */ -{2090293938, (unsigned char*)"\321\223", 0, 0}, /* ѓ */ +{2090293938, (unsigned char*)"\321\223", -1, -1}, /* ѓ */ {2090298219, (unsigned char*)"\342\252\212", 1421, 1423}, /* ⪊ */ -{2090298352, (unsigned char*)"\342\252\210", 0, 0}, /* ⪈ */ +{2090298352, (unsigned char*)"\342\252\210", -1, -1}, /* ⪈ */ {2090299793, (unsigned char*)"\360\235\225\230", 1422, 1426}, /* 𝕘 */ -{2090303732, (unsigned char*)"\342\204\212", 0, 0}, /* ℊ */ +{2090303732, (unsigned char*)"\342\204\212", -1, -1}, /* ℊ */ {2090303925, (unsigned char*)"\342\211\263", 1425, 1427}, /* ≳ */ -{2090304806, (unsigned char*)"\342\252\247", 0, 0}, /* ⪧ */ +{2090304806, (unsigned char*)"\342\252\247", -1, -1}, /* ⪧ */ {2090307317, (unsigned char*)"\342\211\251\357\270\200", 1412, 1445}, /* ≩︀ */ -{2090320352, (unsigned char*)"\302\275", 0, 0}, /* ½ */ -{2090320562, (unsigned char*)"\342\206\224", 1429, 0}, /* ↔ */ +{2090320352, (unsigned char*)"\302\275", -1, -1}, /* ½ */ +{2090320562, (unsigned char*)"\342\206\224", 1429, -1}, /* ↔ */ {2090321090, (unsigned char*)"\342\204\217", 1430, 1432}, /* ℏ */ -{2090335730, (unsigned char*)"\360\235\225\231", 0, 0}, /* 𝕙 */ +{2090335730, (unsigned char*)"\360\235\225\231", -1, -1}, /* 𝕙 */ {2090339669, (unsigned char*)"\360\235\222\275", 1431, 1435}, /* 𝒽 */ -{2090360367, (unsigned char*)"\320\265", 0, 0}, /* е */ +{2090360367, (unsigned char*)"\320\265", -1, -1}, /* е */ {2090369456, (unsigned char*)"\342\212\267", 1434, 1436}, /* ⊷ */ -{2090371257, (unsigned char*)"\321\221", 0, 0}, /* ё */ +{2090371257, (unsigned char*)"\321\221", -1, -1}, /* ё */ {2090371667, (unsigned char*)"\360\235\225\232", 1433, 1441}, /* 𝕚 */ -{2090371794, (unsigned char*)"\316\271", 0, 0}, /* ι */ +{2090371794, (unsigned char*)"\316\271", -1, -1}, /* ι */ {2090375606, (unsigned char*)"\360\235\222\276", 1438, 1440}, /* 𝒾 */ -{2090375800, (unsigned char*)"\342\210\210", 0, 0}, /* ∈ */ +{2090375800, (unsigned char*)"\342\210\210", -1, -1}, /* ∈ */ {2090378108, (unsigned char*)"\303\257", 1439, 1443}, /* ï */ -{2090407604, (unsigned char*)"\360\235\225\233", 0, 0}, /* 𝕛 */ +{2090407604, (unsigned char*)"\360\235\225\233", -1, -1}, /* 𝕛 */ {2090411543, (unsigned char*)"\360\235\222\277", 1442, 1444}, /* 𝒿 */ -{2090429462, (unsigned char*)"\342\207\220", 0, 0}, /* ⇐ */ +{2090429462, (unsigned char*)"\342\207\220", -1, -1}, /* ⇐ */ {2090435508, (unsigned char*)"\321\205", 1437, 1453}, /* х */ -{2090436524, (unsigned char*)"\342\245\242", 0, 0}, /* ⥢ */ +{2090436524, (unsigned char*)"\342\245\242", -1, -1}, /* ⥢ */ {2090437686, (unsigned char*)"\321\234", 1446, 1448}, /* ќ */ -{2090443541, (unsigned char*)"\360\235\225\234", 0, 0}, /* 𝕜 */ +{2090443541, (unsigned char*)"\360\235\225\234", -1, -1}, /* 𝕜 */ {2090447480, (unsigned char*)"\360\235\223\200", 1447, 1451}, /* 𝓀 */ -{2090464167, (unsigned char*)"\342\237\250", 0, 0}, /* ⟨ */ +{2090464167, (unsigned char*)"\342\237\250", -1, -1}, /* ⟨ */ {2090464310, (unsigned char*)"\342\206\220", 1450, 1452}, /* ← */ -{2090464363, (unsigned char*)"\342\252\255", 0, 0}, /* ⪭ */ +{2090464363, (unsigned char*)"\342\252\255", -1, -1}, /* ⪭ */ {2090466571, (unsigned char*)"\173", 1449, 1457}, /* { */ -{2090467065, (unsigned char*)"\342\244\266", 0, 0}, /* ⤶ */ +{2090467065, (unsigned char*)"\342\244\266", -1, -1}, /* ⤶ */ {2090467600, (unsigned char*)"\342\206\262", 1454, 1456}, /* ↲ */ -{2090468632, (unsigned char*)"\342\211\246", 0, 0}, /* ≦ */ +{2090468632, (unsigned char*)"\342\211\246", -1, -1}, /* ≦ */ {2090468688, (unsigned char*)"\342\213\232\357\270\200", 1455, 1459}, /* ⋚︀ */ -{2090473623, (unsigned char*)"\321\231", 0, 0}, /* љ */ +{2090473623, (unsigned char*)"\321\231", -1, -1}, /* љ */ {2090477904, (unsigned char*)"\342\252\211", 1458, 1460}, /* ⪉ */ -{2090478037, (unsigned char*)"\342\252\207", 0, 0}, /* ⪇ */ +{2090478037, (unsigned char*)"\342\252\207", -1, -1}, /* ⪇ */ {2090479478, (unsigned char*)"\360\235\225\235", 1395, 1528}, /* 𝕝 */ -{2090479808, (unsigned char*)"\342\247\253", 0, 0}, /* ⧫ */ -{2090480084, (unsigned char*)"\50", 1462, 0}, /* ( */ +{2090479808, (unsigned char*)"\342\247\253", -1, -1}, /* ⧫ */ +{2090480084, (unsigned char*)"\50", 1462, -1}, /* ( */ {2090483417, (unsigned char*)"\360\235\223\201", 1463, 1465}, /* 𝓁 */ -{2090483610, (unsigned char*)"\342\211\262", 0, 0}, /* ≲ */ +{2090483610, (unsigned char*)"\342\211\262", -1, -1}, /* ≲ */ {2090483863, (unsigned char*)"\133", 1464, 1468}, /* [ */ -{2090484491, (unsigned char*)"\342\252\246", 0, 0}, /* ⪦ */ +{2090484491, (unsigned char*)"\342\252\246", -1, -1}, /* ⪦ */ {2090484992, (unsigned char*)"\342\227\203", 1467, 1469}, /* ◃ */ -{2090487002, (unsigned char*)"\342\211\250\357\270\200", 0, 0}, /* ≨︀ */ +{2090487002, (unsigned char*)"\342\211\250\357\270\200", -1, -1}, /* ≨︀ */ {2090499752, (unsigned char*)"\302\257", 1466, 1474}, /* ¯ */ -{2090500036, (unsigned char*)"\342\231\202", 0, 0}, /* ♂ */ +{2090500036, (unsigned char*)"\342\231\202", -1, -1}, /* ♂ */ {2090500051, (unsigned char*)"\342\234\240", 1471, 1473}, /* ✠ */ -{2090507940, (unsigned char*)"\342\211\253\314\270", 0, 0}, /* ≫̸ */ +{2090507940, (unsigned char*)"\342\211\253\314\270", -1, -1}, /* ≫̸ */ {2090511729, (unsigned char*)"\342\253\233", 1472, 1476}, /* ⫛ */ -{2090511764, (unsigned char*)"\342\200\246", 0, 0}, /* … */ +{2090511764, (unsigned char*)"\342\200\246", -1, -1}, /* … */ {2090513385, (unsigned char*)"\342\211\252\314\270", 1475, 1477}, /* ≪̸ */ -{2090515415, (unsigned char*)"\360\235\225\236", 0, 0}, /* 𝕞 */ +{2090515415, (unsigned char*)"\360\235\225\236", -1, -1}, /* 𝕞 */ {2090519354, (unsigned char*)"\360\235\223\202", 1470, 1487}, /* 𝓂 */ -{2090536041, (unsigned char*)"\342\210\240\342\203\222", 0, 0}, /* ∠⃒ */ -{2090536073, (unsigned char*)"\342\251\260\314\270", 1479, 0}, /* ⩰̸ */ +{2090536041, (unsigned char*)"\342\210\240\342\203\222", -1, -1}, /* ∠⃒ */ +{2090536073, (unsigned char*)"\342\251\260\314\270", 1479, -1}, /* ⩰̸ */ {2090537304, (unsigned char*)"\302\240", 1480, 1482}, /*   */ -{2090537799, (unsigned char*)"\342\251\203", 0, 0}, /* ⩃ */ +{2090537799, (unsigned char*)"\342\251\203", -1, -1}, /* ⩃ */ {2090538459, (unsigned char*)"\342\251\202", 1481, 1485}, /* ⩂ */ -{2090542288, (unsigned char*)"\342\211\261", 0, 0}, /* ≱ */ +{2090542288, (unsigned char*)"\342\211\261", -1, -1}, /* ≱ */ {2090542290, (unsigned char*)"\342\251\276\314\270", 1484, 1486}, /* ⩾̸ */ -{2090542784, (unsigned char*)"\342\211\257", 0, 0}, /* ≯ */ +{2090542784, (unsigned char*)"\342\211\257", -1, -1}, /* ≯ */ {2090544915, (unsigned char*)"\342\213\272", 1483, 1491}, /* ⋺ */ -{2090545497, (unsigned char*)"\321\232", 0, 0}, /* њ */ +{2090545497, (unsigned char*)"\321\232", -1, -1}, /* њ */ {2090547701, (unsigned char*)"\342\200\245", 1488, 1490}, /* ‥ */ -{2090547733, (unsigned char*)"\342\211\260", 0, 0}, /* ≰ */ +{2090547733, (unsigned char*)"\342\211\260", -1, -1}, /* ≰ */ {2090547735, (unsigned char*)"\342\251\275\314\270", 1489, 1493}, /* ⩽̸ */ -{2090548941, (unsigned char*)"\342\210\244", 0, 0}, /* ∤ */ +{2090548941, (unsigned char*)"\342\210\244", -1, -1}, /* ∤ */ {2090551352, (unsigned char*)"\360\235\225\237", 1492, 1494}, /* 𝕟 */ -{2090551958, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{2090551958, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ {2090552506, (unsigned char*)"\342\252\257\314\270", 1478, 1512}, /* ⪯̸ */ -{2090555278, (unsigned char*)"\342\252\260\314\270", 0, 0}, /* ⪰̸ */ -{2090555291, (unsigned char*)"\360\235\223\203", 1496, 0}, /* 𝓃 */ +{2090555278, (unsigned char*)"\342\252\260\314\270", -1, -1}, /* ⪰̸ */ +{2090555291, (unsigned char*)"\360\235\223\203", 1496, -1}, /* 𝓃 */ {2090555484, (unsigned char*)"\342\211\201", 1497, 1499}, /* ≁ */ -{2090555869, (unsigned char*)"\342\212\204", 0, 0}, /* ⊄ */ +{2090555869, (unsigned char*)"\342\212\204", -1, -1}, /* ⊄ */ {2090555883, (unsigned char*)"\342\212\205", 1498, 1502}, /* ⊅ */ -{2090556506, (unsigned char*)"\342\211\271", 0, 0}, /* ≹ */ +{2090556506, (unsigned char*)"\342\211\271", -1, -1}, /* ≹ */ {2090556666, (unsigned char*)"\342\211\270", 1501, 1503}, /* ≸ */ -{2090558490, (unsigned char*)"\342\211\215\342\203\222", 0, 0}, /* ≍⃒ */ +{2090558490, (unsigned char*)"\342\211\215\342\203\222", -1, -1}, /* ≍⃒ */ {2090558677, (unsigned char*)"\342\211\245\342\203\222", 1500, 1508}, /* ≥⃒ */ -{2090558692, (unsigned char*)"\76\342\203\222", 0, 0}, /* >⃒ */ +{2090558692, (unsigned char*)"\76\342\203\222", -1, -1}, /* >⃒ */ {2090558842, (unsigned char*)"\342\211\244\342\203\222", 1505, 1507}, /* ≤⃒ */ -{2090558857, (unsigned char*)"\74\342\203\222", 0, 0}, /* <⃒ */ +{2090558857, (unsigned char*)"\74\342\203\222", -1, -1}, /* <⃒ */ {2090572156, (unsigned char*)"\342\212\233", 1506, 1510}, /* ⊛ */ -{2090574002, (unsigned char*)"\342\212\232", 0, 0}, /* ⊚ */ +{2090574002, (unsigned char*)"\342\212\232", -1, -1}, /* ⊚ */ {2090575095, (unsigned char*)"\342\250\270", 1509, 1511}, /* ⨸ */ -{2090575291, (unsigned char*)"\342\212\231", 0, 0}, /* ⊙ */ +{2090575291, (unsigned char*)"\342\212\231", -1, -1}, /* ⊙ */ {2090578552, (unsigned char*)"\313\233", 1504, 1520}, /* ˛ */ -{2090580703, (unsigned char*)"\342\210\256", 0, 0}, /* ∮ */ +{2090580703, (unsigned char*)"\342\210\256", -1, -1}, /* ∮ */ {2090584878, (unsigned char*)"\342\246\266", 1513, 1515}, /* ⦶ */ -{2090587289, (unsigned char*)"\360\235\225\240", 0, 0}, /* 𝕠 */ +{2090587289, (unsigned char*)"\360\235\225\240", -1, -1}, /* 𝕠 */ {2090587895, (unsigned char*)"\342\246\267", 1514, 1518}, /* ⦷ */ -{2090590160, (unsigned char*)"\302\252", 0, 0}, /* ª */ +{2090590160, (unsigned char*)"\302\252", -1, -1}, /* ª */ {2090590167, (unsigned char*)"\302\272", 1517, 1519}, /* º */ -{2090590535, (unsigned char*)"\342\251\226", 0, 0}, /* ⩖ */ +{2090590535, (unsigned char*)"\342\251\226", -1, -1}, /* ⩖ */ {2090591228, (unsigned char*)"\342\204\264", 1516, 1524}, /* ℴ */ -{2090591618, (unsigned char*)"\342\212\230", 0, 0}, /* ⊘ */ +{2090591618, (unsigned char*)"\342\212\230", -1, -1}, /* ⊘ */ {2090593730, (unsigned char*)"\303\266", 1521, 1523}, /* ö */ -{2090608041, (unsigned char*)"\302\266", 0, 0}, /* ¶ */ +{2090608041, (unsigned char*)"\302\266", -1, -1}, /* ¶ */ {2090608060, (unsigned char*)"\342\210\202", 1522, 1526}, /* ∂ */ -{2090612412, (unsigned char*)"\342\212\245", 0, 0}, /* ⊥ */ +{2090612412, (unsigned char*)"\342\212\245", -1, -1}, /* ⊥ */ {2090615388, (unsigned char*)"\317\225", 1525, 1527}, /* ϕ */ -{2090620137, (unsigned char*)"\53", 0, 0}, /* + */ +{2090620137, (unsigned char*)"\53", -1, -1}, /* + */ {2090623226, (unsigned char*)"\360\235\225\241", 1495, 1561}, /* 𝕡 */ -{2090626008, (unsigned char*)"\342\252\267", 0, 0}, /* ⪷ */ -{2090626127, (unsigned char*)"\342\211\272", 1529, 0}, /* ≺ */ +{2090626008, (unsigned char*)"\342\252\267", -1, -1}, /* ⪷ */ +{2090626127, (unsigned char*)"\342\211\272", 1529, -1}, /* ≺ */ {2090626394, (unsigned char*)"\342\252\265", 1530, 1532}, /* ⪵ */ -{2090626458, (unsigned char*)"\342\210\217", 0, 0}, /* ∏ */ +{2090626458, (unsigned char*)"\342\210\217", -1, -1}, /* ∏ */ {2090626470, (unsigned char*)"\342\210\235", 1531, 1535}, /* ∝ */ -{2090627165, (unsigned char*)"\360\235\223\205", 0, 0}, /* 𝓅 */ +{2090627165, (unsigned char*)"\360\235\223\205", -1, -1}, /* 𝓅 */ {2090645084, (unsigned char*)"\342\207\222", 1534, 1536}, /* ⇒ */ -{2090652146, (unsigned char*)"\342\245\244", 0, 0}, /* ⥤ */ +{2090652146, (unsigned char*)"\342\245\244", -1, -1}, /* ⥤ */ {2090652577, (unsigned char*)"\342\250\214", 1533, 1541}, /* ⨌ */ -{2090659163, (unsigned char*)"\360\235\225\242", 0, 0}, /* 𝕢 */ +{2090659163, (unsigned char*)"\360\235\225\242", -1, -1}, /* 𝕢 */ {2090663102, (unsigned char*)"\360\235\223\206", 1538, 1540}, /* 𝓆 */ -{2090665678, (unsigned char*)"\42", 0, 0}, /* " */ +{2090665678, (unsigned char*)"\42", -1, -1}, /* " */ {2090679424, (unsigned char*)"\342\210\275\314\261", 1539, 1543}, /* ∽̱ */ -{2090679789, (unsigned char*)"\342\237\251", 0, 0}, /* ⟩ */ +{2090679789, (unsigned char*)"\342\237\251", -1, -1}, /* ⟩ */ {2090679932, (unsigned char*)"\342\206\222", 1542, 1544}, /* → */ -{2090682193, (unsigned char*)"\175", 0, 0}, /* } */ +{2090682193, (unsigned char*)"\175", -1, -1}, /* } */ {2090682687, (unsigned char*)"\342\244\267", 1537, 1553}, /* ⤷ */ -{2090683222, (unsigned char*)"\342\206\263", 0, 0}, /* ↳ */ +{2090683222, (unsigned char*)"\342\206\263", -1, -1}, /* ↳ */ {2090683721, (unsigned char*)"\342\204\234", 1546, 1548}, /* ℜ */ -{2090683795, (unsigned char*)"\342\226\255", 0, 0}, /* ▭ */ +{2090683795, (unsigned char*)"\342\226\255", -1, -1}, /* ▭ */ {2090687460, (unsigned char*)"\317\261", 1547, 1551}, /* ϱ */ -{2090688501, (unsigned char*)"\313\232", 0, 0}, /* ˚ */ +{2090688501, (unsigned char*)"\313\232", -1, -1}, /* ˚ */ {2090695100, (unsigned char*)"\360\235\225\243", 1550, 1552}, /* 𝕣 */ -{2090695706, (unsigned char*)"\51", 0, 0}, /* ) */ +{2090695706, (unsigned char*)"\51", -1, -1}, /* ) */ {2090699039, (unsigned char*)"\360\235\223\207", 1549, 1557}, /* 𝓇 */ -{2090699485, (unsigned char*)"\135", 0, 0}, /* ] */ +{2090699485, (unsigned char*)"\135", -1, -1}, /* ] */ {2090700614, (unsigned char*)"\342\226\271", 1554, 1556}, /* ▹ */ -{2090717484, (unsigned char*)"\342\252\270", 0, 0}, /* ⪸ */ +{2090717484, (unsigned char*)"\342\252\270", -1, -1}, /* ⪸ */ {2090717870, (unsigned char*)"\342\252\266", 1555, 1559}, /* ⪶ */ -{2090719039, (unsigned char*)"\342\213\205", 0, 0}, /* ⋅ */ +{2090719039, (unsigned char*)"\342\213\205", -1, -1}, /* ⋅ */ {2090719732, (unsigned char*)"\302\247", 1558, 1560}, /* § */ -{2090720051, (unsigned char*)"\73", 0, 0}, /* ; */ +{2090720051, (unsigned char*)"\73", -1, -1}, /* ; */ {2090720425, (unsigned char*)"\342\234\266", 1545, 1578}, /* ✶ */ -{2090723004, (unsigned char*)"\321\210", 0, 0}, /* ш */ -{2090724403, (unsigned char*)"\342\211\203", 1562, 0}, /* ≃ */ +{2090723004, (unsigned char*)"\321\210", -1, -1}, /* ш */ +{2090724403, (unsigned char*)"\342\211\203", 1562, -1}, /* ≃ */ {2090724405, (unsigned char*)"\342\252\236", 1563, 1565}, /* ⪞ */ -{2090724410, (unsigned char*)"\342\252\235", 0, 0}, /* ⪝ */ +{2090724410, (unsigned char*)"\342\252\235", -1, -1}, /* ⪝ */ {2090728626, (unsigned char*)"\342\210\243", 1564, 1568}, /* ∣ */ -{2090728990, (unsigned char*)"\342\252\254", 0, 0}, /* ⪬ */ +{2090728990, (unsigned char*)"\342\252\254", -1, -1}, /* ⪬ */ {2090730901, (unsigned char*)"\342\247\204", 1567, 1569}, /* ⧄ */ -{2090731037, (unsigned char*)"\360\235\225\244", 0, 0}, /* 𝕤 */ +{2090731037, (unsigned char*)"\360\235\225\244", -1, -1}, /* 𝕤 */ {2090731643, (unsigned char*)"\342\210\245", 1566, 1574}, /* ∥ */ -{2090733380, (unsigned char*)"\342\226\252", 0, 0}, /* ▪ */ +{2090733380, (unsigned char*)"\342\226\252", -1, -1}, /* ▪ */ {2090734976, (unsigned char*)"\360\235\223\210", 1571, 1573}, /* 𝓈 */ -{2090735999, (unsigned char*)"\342\230\206", 0, 0}, /* ☆ */ +{2090735999, (unsigned char*)"\342\230\206", -1, -1}, /* ☆ */ {2090737076, (unsigned char*)"\342\253\205", 1572, 1576}, /* ⫅ */ -{2090737108, (unsigned char*)"\342\212\206", 0, 0}, /* ⊆ */ +{2090737108, (unsigned char*)"\342\212\206", -1, -1}, /* ⊆ */ {2090737139, (unsigned char*)"\342\211\273", 1575, 1577}, /* ≻ */ -{2090737506, (unsigned char*)"\342\231\252", 0, 0}, /* ♪ */ +{2090737506, (unsigned char*)"\342\231\252", -1, -1}, /* ♪ */ {2090737518, (unsigned char*)"\302\271", 1570, 1586}, /* ¹ */ -{2090737519, (unsigned char*)"\302\262", 0, 0}, /* ² */ +{2090737519, (unsigned char*)"\302\262", -1, -1}, /* ² */ {2090737520, (unsigned char*)"\302\263", 1579, 1581}, /* ³ */ -{2090737538, (unsigned char*)"\342\253\206", 0, 0}, /* ⫆ */ +{2090737538, (unsigned char*)"\342\253\206", -1, -1}, /* ⫆ */ {2090737570, (unsigned char*)"\342\212\207", 1580, 1584}, /* ⊇ */ -{2090752888, (unsigned char*)"\342\216\264", 0, 0}, /* ⎴ */ +{2090752888, (unsigned char*)"\342\216\264", -1, -1}, /* ⎴ */ {2090752895, (unsigned char*)"\342\207\221", 1583, 1585}, /* ⇑ */ -{2090754976, (unsigned char*)"\342\203\233", 0, 0}, /* ⃛ */ +{2090754976, (unsigned char*)"\342\203\233", -1, -1}, /* ⃛ */ {2090759957, (unsigned char*)"\342\245\243", 1582, 1590}, /* ⥣ */ -{2090760388, (unsigned char*)"\342\210\255", 0, 0}, /* ∭ */ +{2090760388, (unsigned char*)"\342\210\255", -1, -1}, /* ∭ */ {2090766606, (unsigned char*)"\342\244\250", 1587, 1589}, /* ⤨ */ -{2090766974, (unsigned char*)"\360\235\225\245", 0, 0}, /* 𝕥 */ +{2090766974, (unsigned char*)"\360\235\225\245", -1, -1}, /* 𝕥 */ {2090767068, (unsigned char*)"\342\244\251", 1588, 1592}, /* ⤩ */ -{2090770009, (unsigned char*)"\342\211\234", 0, 0}, /* ≜ */ +{2090770009, (unsigned char*)"\342\211\234", -1, -1}, /* ≜ */ {2090770913, (unsigned char*)"\360\235\223\211", 1591, 1593}, /* 𝓉 */ -{2090770920, (unsigned char*)"\321\206", 0, 0}, /* ц */ +{2090770920, (unsigned char*)"\321\206", -1, -1}, /* ц */ {2090787743, (unsigned char*)"\342\206\221", 1328, 1860}, /* ↑ */ -{2090788832, (unsigned char*)"\342\207\225", 0, 0}, /* ⇕ */ -{2090789360, (unsigned char*)"\342\253\250", 1595, 0}, /* ⫨ */ +{2090788832, (unsigned char*)"\342\207\225", -1, -1}, /* ⇕ */ +{2090789360, (unsigned char*)"\342\253\250", 1595, -1}, /* ⫨ */ {2090802911, (unsigned char*)"\360\235\225\246", 1596, 1598}, /* 𝕦 */ -{2090804102, (unsigned char*)"\317\205", 0, 0}, /* υ */ +{2090804102, (unsigned char*)"\317\205", -1, -1}, /* υ */ {2090806850, (unsigned char*)"\360\235\223\212", 1597, 1601}, /* 𝓊 */ -{2090808425, (unsigned char*)"\342\226\265", 0, 0}, /* ▵ */ +{2090808425, (unsigned char*)"\342\226\265", -1, -1}, /* ▵ */ {2090809352, (unsigned char*)"\303\274", 1600, 1602}, /* ü */ -{2090823680, (unsigned char*)"\342\206\225", 0, 0}, /* ↕ */ +{2090823680, (unsigned char*)"\342\206\225", -1, -1}, /* ↕ */ {2090828038, (unsigned char*)"\174", 1599, 1607}, /* | */ -{2090838848, (unsigned char*)"\360\235\225\247", 0, 0}, /* 𝕧 */ +{2090838848, (unsigned char*)"\360\235\225\247", -1, -1}, /* 𝕧 */ {2090842787, (unsigned char*)"\360\235\223\213", 1604, 1606}, /* 𝓋 */ -{2090874785, (unsigned char*)"\360\235\225\250", 0, 0}, /* 𝕨 */ +{2090874785, (unsigned char*)"\360\235\225\250", -1, -1}, /* 𝕨 */ {2090878724, (unsigned char*)"\360\235\223\214", 1605, 1609}, /* 𝓌 */ -{2090897169, (unsigned char*)"\342\213\202", 0, 0}, /* ⋂ */ +{2090897169, (unsigned char*)"\342\213\202", -1, -1}, /* ⋂ */ {2090897829, (unsigned char*)"\342\213\203", 1608, 1610}, /* ⋃ */ -{2090908059, (unsigned char*)"\342\237\274", 0, 0}, /* ⟼ */ +{2090908059, (unsigned char*)"\342\237\274", -1, -1}, /* ⟼ */ {2090909415, (unsigned char*)"\342\213\273", 1603, 1620}, /* ⋻ */ -{2090910722, (unsigned char*)"\360\235\225\251", 0, 0}, /* 𝕩 */ -{2090914661, (unsigned char*)"\360\235\223\215", 1612, 0}, /* 𝓍 */ +{2090910722, (unsigned char*)"\360\235\225\251", -1, -1}, /* 𝕩 */ +{2090914661, (unsigned char*)"\360\235\223\215", 1612, -1}, /* 𝓍 */ {2090917981, (unsigned char*)"\342\213\201", 1613, 1615}, /* ⋁ */ -{2090931003, (unsigned char*)"\321\217", 0, 0}, /* я */ +{2090931003, (unsigned char*)"\321\217", -1, -1}, /* я */ {2090939715, (unsigned char*)"\321\227", 1614, 1618}, /* ї */ -{2090946659, (unsigned char*)"\360\235\225\252", 0, 0}, /* 𝕪 */ +{2090946659, (unsigned char*)"\360\235\225\252", -1, -1}, /* 𝕪 */ {2090950598, (unsigned char*)"\360\235\223\216", 1617, 1619}, /* 𝓎 */ -{2090952783, (unsigned char*)"\321\216", 0, 0}, /* ю */ +{2090952783, (unsigned char*)"\321\216", -1, -1}, /* ю */ {2090953100, (unsigned char*)"\303\277", 1616, 1624}, /* ÿ */ -{2090970598, (unsigned char*)"\305\274", 0, 0}, /* ż */ +{2090970598, (unsigned char*)"\305\274", -1, -1}, /* ż */ {2090971833, (unsigned char*)"\316\266", 1621, 1623}, /* ζ */ -{2090974563, (unsigned char*)"\320\266", 0, 0}, /* ж */ +{2090974563, (unsigned char*)"\320\266", -1, -1}, /* ж */ {2090982596, (unsigned char*)"\360\235\225\253", 1622, 1626}, /* 𝕫 */ -{2090986535, (unsigned char*)"\360\235\223\217", 0, 0}, /* 𝓏 */ +{2090986535, (unsigned char*)"\360\235\223\217", -1, -1}, /* 𝓏 */ {2090991246, (unsigned char*)"\342\200\214", 1625, 1627}, /* ‌ */ -{2092993778, (unsigned char*)"\342\251\276\314\270", 0, 0}, /* ⩾̸ */ +{2092993778, (unsigned char*)"\342\251\276\314\270", -1, -1}, /* ⩾̸ */ {2096369037, (unsigned char*)"\302\256", 1611, 1645}, /* ® */ -{2096369038, (unsigned char*)"\342\223\210", 0, 0}, /* Ⓢ */ -{2100003394, (unsigned char*)"\342\250\220", 1629, 0}, /* ⨐ */ +{2096369038, (unsigned char*)"\342\223\210", -1, -1}, /* Ⓢ */ +{2100003394, (unsigned char*)"\342\250\220", 1629, -1}, /* ⨐ */ {2100181273, (unsigned char*)"\342\245\220", 1630, 1632}, /* ⥐ */ -{2104021522, (unsigned char*)"\342\210\235", 0, 0}, /* ∝ */ +{2104021522, (unsigned char*)"\342\210\235", -1, -1}, /* ∝ */ {2106472735, (unsigned char*)"\342\206\252", 1631, 1635}, /* ↪ */ -{2121101659, (unsigned char*)"\342\207\220", 0, 0}, /* ⇐ */ +{2121101659, (unsigned char*)"\342\207\220", -1, -1}, /* ⇐ */ {2122916393, (unsigned char*)"\342\207\215", 1634, 1636}, /* ⇍ */ -{2134690458, (unsigned char*)"\342\206\240", 0, 0}, /* ↠ */ +{2134690458, (unsigned char*)"\342\206\240", -1, -1}, /* ↠ */ {2141591030, (unsigned char*)"\342\252\205", 1633, 1641}, /* ⪅ */ -{2144685319, (unsigned char*)"\342\201\240", 0, 0}, /* ⁠ */ +{2144685319, (unsigned char*)"\342\201\240", -1, -1}, /* ⁠ */ {2149491562, (unsigned char*)"\342\200\212", 1638, 1640}, /*   */ -{2149634711, (unsigned char*)"\342\211\217", 0, 0}, /* ≏ */ +{2149634711, (unsigned char*)"\342\211\217", -1, -1}, /* ≏ */ {2155310621, (unsigned char*)"\342\245\230", 1639, 1643}, /* ⥘ */ -{2162788206, (unsigned char*)"\342\207\201", 0, 0}, /* ⇁ */ +{2162788206, (unsigned char*)"\342\207\201", -1, -1}, /* ⇁ */ {2173091356, (unsigned char*)"\342\212\250", 1642, 1644}, /* ⊨ */ -{2175295137, (unsigned char*)"\342\210\267", 0, 0}, /* ∷ */ +{2175295137, (unsigned char*)"\342\210\267", -1, -1}, /* ∷ */ {2177599195, (unsigned char*)"\342\212\244", 1637, 1653}, /* ⊤ */ -{2183831452, (unsigned char*)"\342\212\264", 0, 0}, /* ⊴ */ +{2183831452, (unsigned char*)"\342\212\264", -1, -1}, /* ⊴ */ {2202616365, (unsigned char*)"\342\211\256", 1646, 1648}, /* ≮ */ -{2206594527, (unsigned char*)"\342\211\241\342\203\245", 0, 0}, /* ≡⃥ */ +{2206594527, (unsigned char*)"\342\211\241\342\203\245", -1, -1}, /* ≡⃥ */ {2224616812, (unsigned char*)"\342\206\251", 1647, 1651}, /* ↩ */ -{2226125799, (unsigned char*)"\342\207\232", 0, 0}, /* ⇚ */ +{2226125799, (unsigned char*)"\342\207\232", -1, -1}, /* ⇚ */ {2232084207, (unsigned char*)"\342\212\262", 1650, 1652}, /* ⊲ */ -{2234283796, (unsigned char*)"\342\252\225", 0, 0}, /* ⪕ */ +{2234283796, (unsigned char*)"\342\252\225", -1, -1}, /* ⪕ */ {2238028310, (unsigned char*)"\342\211\252", 1649, 1657}, /* ≪ */ -{2242588389, (unsigned char*)"\342\210\244", 0, 0}, /* ∤ */ +{2242588389, (unsigned char*)"\342\210\244", -1, -1}, /* ∤ */ {2247186016, (unsigned char*)"\342\210\205", 1654, 1656}, /* ∅ */ -{2251230282, (unsigned char*)"\342\211\253\314\270", 0, 0}, /* ≫̸ */ +{2251230282, (unsigned char*)"\342\211\253\314\270", -1, -1}, /* ≫̸ */ {2251699570, (unsigned char*)"\342\245\256", 1655, 1659}, /* ⥮ */ -{2253884103, (unsigned char*)"\342\211\245", 0, 0}, /* ≥ */ +{2253884103, (unsigned char*)"\342\211\245", -1, -1}, /* ≥ */ {2267324439, (unsigned char*)"\342\200\213", 1658, 1660}, /* ​ */ -{2267952836, (unsigned char*)"\342\201\237\342\200\212", 0, 0}, /*    */ +{2267952836, (unsigned char*)"\342\201\237\342\200\212", -1, -1}, /*    */ {2268217074, (unsigned char*)"\342\212\236", 1628, 1694}, /* ⊞ */ -{2271375713, (unsigned char*)"\342\211\263", 0, 0}, /* ≳ */ -{2273834870, (unsigned char*)"\342\226\270", 1662, 0}, /* ▸ */ +{2271375713, (unsigned char*)"\342\211\263", -1, -1}, /* ≳ */ +{2273834870, (unsigned char*)"\342\226\270", 1662, -1}, /* ▸ */ {2284095252, (unsigned char*)"\342\252\212", 1663, 1665}, /* ⪊ */ -{2293000194, (unsigned char*)"\342\250\264", 0, 0}, /* ⨴ */ +{2293000194, (unsigned char*)"\342\250\264", -1, -1}, /* ⨴ */ {2299342640, (unsigned char*)"\342\252\213", 1664, 1668}, /* ⪋ */ -{2299973113, (unsigned char*)"\342\227\212", 0, 0}, /* ◊ */ +{2299973113, (unsigned char*)"\342\227\212", -1, -1}, /* ◊ */ {2311432548, (unsigned char*)"\342\204\254", 1667, 1669}, /* ℬ */ -{2313488869, (unsigned char*)"\342\210\205", 0, 0}, /* ∅ */ +{2313488869, (unsigned char*)"\342\210\205", -1, -1}, /* ∅ */ {2318267363, (unsigned char*)"\342\212\233", 1666, 1674}, /* ⊛ */ -{2324068560, (unsigned char*)"\342\211\272", 0, 0}, /* ≺ */ +{2324068560, (unsigned char*)"\342\211\272", -1, -1}, /* ≺ */ {2329784168, (unsigned char*)"\342\206\230", 1671, 1673}, /* ↘ */ -{2345835453, (unsigned char*)"\342\213\214", 0, 0}, /* ⋌ */ +{2345835453, (unsigned char*)"\342\213\214", -1, -1}, /* ⋌ */ {2347178782, (unsigned char*)"\342\212\231", 1672, 1676}, /* ⊙ */ -{2349785324, (unsigned char*)"\342\212\202\342\203\222", 0, 0}, /* ⊂⃒ */ +{2349785324, (unsigned char*)"\342\212\202\342\203\222", -1, -1}, /* ⊂⃒ */ {2350516007, (unsigned char*)"\342\237\210", 1675, 1677}, /* ⟈ */ -{2351825126, (unsigned char*)"\342\204\244", 0, 0}, /* ℤ */ +{2351825126, (unsigned char*)"\342\204\244", -1, -1}, /* ℤ */ {2352217687, (unsigned char*)"\342\212\272", 1670, 1686}, /* ⊺ */ -{2359924770, (unsigned char*)"\342\250\227", 0, 0}, /* ⨗ */ +{2359924770, (unsigned char*)"\342\250\227", -1, -1}, /* ⨗ */ {2361282137, (unsigned char*)"\342\245\234", 1679, 1681}, /* ⥜ */ -{2369427406, (unsigned char*)"\342\210\235", 0, 0}, /* ∝ */ +{2369427406, (unsigned char*)"\342\210\235", -1, -1}, /* ∝ */ {2373010998, (unsigned char*)"\342\210\202", 1680, 1684}, /* ∂ */ -{2373147889, (unsigned char*)"\342\212\265", 0, 0}, /* ⊵ */ +{2373147889, (unsigned char*)"\342\212\265", -1, -1}, /* ⊵ */ {2391645795, (unsigned char*)"\342\245\227", 1683, 1685}, /* ⥗ */ -{2404639391, (unsigned char*)"\342\216\265", 0, 0}, /* ⎵ */ +{2404639391, (unsigned char*)"\342\216\265", -1, -1}, /* ⎵ */ {2408379192, (unsigned char*)"\342\226\264", 1682, 1690}, /* ▴ */ -{2411113092, (unsigned char*)"\342\207\206", 0, 0}, /* ⇆ */ +{2411113092, (unsigned char*)"\342\207\206", -1, -1}, /* ⇆ */ {2417128742, (unsigned char*)"\342\214\236", 1687, 1689}, /* ⌞ */ -{2424328170, (unsigned char*)"\342\210\262", 0, 0}, /* ∲ */ +{2424328170, (unsigned char*)"\342\210\262", -1, -1}, /* ∲ */ {2424932121, (unsigned char*)"\342\210\201", 1688, 1692}, /* ∁ */ -{2440126227, (unsigned char*)"\342\207\212", 0, 0}, /* ⇊ */ +{2440126227, (unsigned char*)"\342\207\212", -1, -1}, /* ⇊ */ {2444718873, (unsigned char*)"\342\252\257\314\270", 1691, 1693}, /* ⪯̸ */ -{2464644935, (unsigned char*)"\174", 0, 0}, /* | */ +{2464644935, (unsigned char*)"\174", -1, -1}, /* | */ {2485542391, (unsigned char*)"\342\251\273", 1678, 1711}, /* ⩻ */ -{2500478578, (unsigned char*)"\342\250\244", 0, 0}, /* ⨤ */ -{2500538373, (unsigned char*)"\342\245\262", 1695, 0}, /* ⥲ */ +{2500478578, (unsigned char*)"\342\250\244", -1, -1}, /* ⨤ */ +{2500538373, (unsigned char*)"\342\245\262", 1695, -1}, /* ⥲ */ {2506612921, (unsigned char*)"\342\245\236", 1696, 1698}, /* ⥞ */ -{2511579913, (unsigned char*)"\342\210\264", 0, 0}, /* ∴ */ +{2511579913, (unsigned char*)"\342\210\264", -1, -1}, /* ∴ */ {2515928295, (unsigned char*)"\342\207\216", 1697, 1701}, /* ⇎ */ -{2519197257, (unsigned char*)"\342\251\275", 0, 0}, /* ⩽ */ +{2519197257, (unsigned char*)"\342\251\275", -1, -1}, /* ⩽ */ {2525866376, (unsigned char*)"\342\245\246", 1700, 1702}, /* ⥦ */ -{2534948013, (unsigned char*)"\342\207\210", 0, 0}, /* ⇈ */ +{2534948013, (unsigned char*)"\342\207\210", -1, -1}, /* ⇈ */ {2545332556, (unsigned char*)"\317\225", 1699, 1707}, /* ϕ */ -{2553787136, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ +{2553787136, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ {2562550693, (unsigned char*)"\313\231", 1704, 1706}, /* ˙ */ -{2579807761, (unsigned char*)"\342\252\203", 0, 0}, /* ⪃ */ +{2579807761, (unsigned char*)"\342\252\203", -1, -1}, /* ⪃ */ {2588013225, (unsigned char*)"\342\212\211", 1705, 1709}, /* ⊉ */ -{2609063628, (unsigned char*)"\342\245\235", 0, 0}, /* ⥝ */ +{2609063628, (unsigned char*)"\342\245\235", -1, -1}, /* ⥝ */ {2611001758, (unsigned char*)"\342\227\273", 1708, 1710}, /* ◻ */ -{2620259063, (unsigned char*)"\342\206\235", 0, 0}, /* ↝ */ +{2620259063, (unsigned char*)"\342\206\235", -1, -1}, /* ↝ */ {2632990613, (unsigned char*)"\342\206\221", 1703, 1719}, /* ↑ */ -{2660027883, (unsigned char*)"\342\210\213", 0, 0}, /* ∋ */ +{2660027883, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ {2660229243, (unsigned char*)"\317\260", 1712, 1714}, /* ϰ */ -{2662435928, (unsigned char*)"\342\210\220", 0, 0}, /* ∐ */ +{2662435928, (unsigned char*)"\342\210\220", -1, -1}, /* ∐ */ {2663146703, (unsigned char*)"\342\212\265", 1713, 1717}, /* ⊵ */ -{2669994207, (unsigned char*)"\317\202", 0, 0}, /* ς */ +{2669994207, (unsigned char*)"\317\202", -1, -1}, /* ς */ {2670940085, (unsigned char*)"\342\207\221", 1716, 1718}, /* ⇑ */ -{2671142244, (unsigned char*)"\317\221", 0, 0}, /* ϑ */ +{2671142244, (unsigned char*)"\317\221", -1, -1}, /* ϑ */ {2674685509, (unsigned char*)"\342\250\274", 1715, 1723}, /* ⨼ */ -{2675200879, (unsigned char*)"\342\213\224", 0, 0}, /* ⋔ */ +{2675200879, (unsigned char*)"\342\213\224", -1, -1}, /* ⋔ */ {2691956687, (unsigned char*)"\316\245", 1720, 1722}, /* Υ */ -{2696040064, (unsigned char*)"\342\207\233", 0, 0}, /* ⇛ */ +{2696040064, (unsigned char*)"\342\207\233", -1, -1}, /* ⇛ */ {2728247170, (unsigned char*)"\342\210\241", 1721, 1725}, /* ∡ */ -{2732053530, (unsigned char*)"\342\206\227", 0, 0}, /* ↗ */ +{2732053530, (unsigned char*)"\342\206\227", -1, -1}, /* ↗ */ {2740164327, (unsigned char*)"\342\246\232", 1724, 1726}, /* ⦚ */ -{2746073991, (unsigned char*)"\342\206\236", 0, 0}, /* ↞ */ +{2746073991, (unsigned char*)"\342\206\236", -1, -1}, /* ↞ */ {2751264705, (unsigned char*)"\342\247\216", 1661, 1794}, /* ⧎ */ -{2767333056, (unsigned char*)"\342\210\246", 0, 0}, /* ∦ */ -{2770565886, (unsigned char*)"\342\200\261", 1728, 0}, /* ‱ */ +{2767333056, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ +{2770565886, (unsigned char*)"\342\200\261", 1728, -1}, /* ‱ */ {2794580248, (unsigned char*)"\303\201", 1729, 1731}, /* Á */ -{2796287866, (unsigned char*)"\304\202", 0, 0}, /* Ă */ +{2796287866, (unsigned char*)"\304\202", -1, -1}, /* Ă */ {2801569040, (unsigned char*)"\342\226\276", 1730, 1734}, /* ▾ */ -{2801845091, (unsigned char*)"\342\227\202", 0, 0}, /* ◂ */ +{2801845091, (unsigned char*)"\342\227\202", -1, -1}, /* ◂ */ {2802213115, (unsigned char*)"\303\200", 1733, 1735}, /* À */ -{2803305762, (unsigned char*)"\342\211\216\314\270", 0, 0}, /* ≎̸ */ +{2803305762, (unsigned char*)"\342\211\216\314\270", -1, -1}, /* ≎̸ */ {2805781853, (unsigned char*)"\342\252\260\314\270", 1732, 1740}, /* ⪰̸ */ -{2811624442, (unsigned char*)"\342\213\243", 0, 0}, /* ⋣ */ +{2811624442, (unsigned char*)"\342\213\243", -1, -1}, /* ⋣ */ {2816488330, (unsigned char*)"\342\211\224", 1737, 1739}, /* ≔ */ -{2817318040, (unsigned char*)"\303\203", 0, 0}, /* à */ +{2817318040, (unsigned char*)"\303\203", -1, -1}, /* à */ {2823273463, (unsigned char*)"\342\211\277\314\270", 1738, 1742}, /* ≿̸ */ -{2834256378, (unsigned char*)"\342\214\206", 0, 0}, /* ⌆ */ +{2834256378, (unsigned char*)"\342\214\206", -1, -1}, /* ⌆ */ {2838562217, (unsigned char*)"\342\237\267", 1741, 1743}, /* ⟷ */ -{2840133630, (unsigned char*)"\342\213\233", 0, 0}, /* ⋛ */ +{2840133630, (unsigned char*)"\342\213\233", -1, -1}, /* ⋛ */ {2854475369, (unsigned char*)"\342\217\235", 1736, 1753}, /* ⏝ */ -{2857230239, (unsigned char*)"\342\213\265", 0, 0}, /* ⋵ */ -{2857787503, (unsigned char*)"\342\211\216", 1745, 0}, /* ≎ */ +{2857230239, (unsigned char*)"\342\213\265", -1, -1}, /* ⋵ */ +{2857787503, (unsigned char*)"\342\211\216", 1745, -1}, /* ≎ */ {2872851034, (unsigned char*)"\304\206", 1746, 1748}, /* Ć */ -{2873382571, (unsigned char*)"\342\214\210", 0, 0}, /* ⌈ */ +{2873382571, (unsigned char*)"\342\214\210", -1, -1}, /* ⌈ */ {2875147579, (unsigned char*)"\304\214", 1747, 1751}, /* Č */ -{2875275881, (unsigned char*)"\303\207", 0, 0}, /* Ç */ +{2875275881, (unsigned char*)"\303\207", -1, -1}, /* Ç */ {2887710822, (unsigned char*)"\342\212\262", 1750, 1752}, /* ⊲ */ -{2889352517, (unsigned char*)"\342\206\221", 0, 0}, /* ↑ */ +{2889352517, (unsigned char*)"\342\206\221", -1, -1}, /* ↑ */ {2889770629, (unsigned char*)"\342\251\264", 1749, 1757}, /* ⩴ */ -{2889835984, (unsigned char*)"\342\210\257", 0, 0}, /* ∯ */ +{2889835984, (unsigned char*)"\342\210\257", -1, -1}, /* ∯ */ {2889899413, (unsigned char*)"\342\214\235", 1754, 1756}, /* ⌝ */ -{2892217516, (unsigned char*)"\342\247\217\314\270", 0, 0}, /* ⧏̸ */ +{2892217516, (unsigned char*)"\342\247\217\314\270", -1, -1}, /* ⧏̸ */ {2893603679, (unsigned char*)"\342\212\217", 1755, 1759}, /* ⊏ */ -{2894106797, (unsigned char*)"\342\212\220", 0, 0}, /* ⊐ */ +{2894106797, (unsigned char*)"\342\212\220", -1, -1}, /* ⊐ */ {2896981569, (unsigned char*)"\342\211\215", 1758, 1760}, /* ≍ */ -{2910059108, (unsigned char*)"\342\211\252\314\270", 0, 0}, /* ≪̸ */ +{2910059108, (unsigned char*)"\342\211\252\314\270", -1, -1}, /* ≪̸ */ {2912114447, (unsigned char*)"\342\200\241", 1744, 1778}, /* ‡ */ -{2914282972, (unsigned char*)"\304\216", 0, 0}, /* Ď */ -{2923381909, (unsigned char*)"\342\212\221", 1762, 0}, /* ⊑ */ +{2914282972, (unsigned char*)"\304\216", -1, -1}, /* Ď */ +{2923381909, (unsigned char*)"\342\212\221", 1762, -1}, /* ⊑ */ {2924434811, (unsigned char*)"\342\204\213", 1763, 1765}, /* ℋ */ -{2929146739, (unsigned char*)"\342\203\234", 0, 0}, /* ⃜ */ +{2929146739, (unsigned char*)"\342\203\234", -1, -1}, /* ⃜ */ {2930550066, (unsigned char*)"\342\204\263", 1764, 1768}, /* ℳ */ -{2933637451, (unsigned char*)"\342\237\265", 0, 0}, /* ⟵ */ +{2933637451, (unsigned char*)"\342\237\265", -1, -1}, /* ⟵ */ {2933940508, (unsigned char*)"\304\220", 1767, 1769}, /* Đ */ -{2943764038, (unsigned char*)"\342\207\235", 0, 0}, /* ⇝ */ +{2943764038, (unsigned char*)"\342\207\235", -1, -1}, /* ⇝ */ {2947490510, (unsigned char*)"\342\206\222", 1766, 1774}, /* → */ -{2951121820, (unsigned char*)"\303\211", 0, 0}, /* É */ +{2951121820, (unsigned char*)"\303\211", -1, -1}, /* É */ {2953153798, (unsigned char*)"\342\204\214", 1771, 1773}, /* ℌ */ -{2953201221, (unsigned char*)"\342\214\213", 0, 0}, /* ⌋ */ +{2953201221, (unsigned char*)"\342\214\213", -1, -1}, /* ⌋ */ {2953418365, (unsigned char*)"\304\232", 1772, 1776}, /* Ě */ -{2956653947, (unsigned char*)"\342\253\203", 0, 0}, /* ⫃ */ +{2956653947, (unsigned char*)"\342\253\203", -1, -1}, /* ⫃ */ {2956959857, (unsigned char*)"\342\253\201", 1775, 1777}, /* ⫁ */ -{2957058163, (unsigned char*)"\342\252\277", 0, 0}, /* ⪿ */ +{2957058163, (unsigned char*)"\342\252\277", -1, -1}, /* ⪿ */ {2957117958, (unsigned char*)"\342\245\271", 1770, 1786}, /* ⥹ */ -{2957784124, (unsigned char*)"\342\211\277", 0, 0}, /* ≿ */ +{2957784124, (unsigned char*)"\342\211\277", -1, -1}, /* ≿ */ {2958754687, (unsigned char*)"\303\210", 1779, 1781}, /* È */ -{2973237419, (unsigned char*)"\342\253\230", 0, 0}, /* ⫘ */ +{2973237419, (unsigned char*)"\342\253\230", -1, -1}, /* ⫘ */ {2973256841, (unsigned char*)"\342\253\204", 1780, 1784}, /* ⫄ */ -{2973380979, (unsigned char*)"\342\237\211", 0, 0}, /* ⟉ */ +{2973380979, (unsigned char*)"\342\237\211", -1, -1}, /* ⟉ */ {2973381167, (unsigned char*)"\342\253\227", 1783, 1785}, /* ⫗ */ -{2973505230, (unsigned char*)"\342\245\273", 0, 0}, /* ⥻ */ +{2973505230, (unsigned char*)"\342\245\273", -1, -1}, /* ⥻ */ {2973562751, (unsigned char*)"\342\253\202", 1782, 1790}, /* ⫂ */ -{2973614978, (unsigned char*)"\342\211\205", 0, 0}, /* ≅ */ +{2973614978, (unsigned char*)"\342\211\205", -1, -1}, /* ≅ */ {2973661057, (unsigned char*)"\342\253\200", 1787, 1789}, /* ⫀ */ -{2976327332, (unsigned char*)"\342\211\220", 0, 0}, /* ≐ */ +{2976327332, (unsigned char*)"\342\211\220", -1, -1}, /* ≐ */ {2978611461, (unsigned char*)"\342\210\203", 1788, 1792}, /* ∃ */ -{2981502511, (unsigned char*)"\342\210\245", 0, 0}, /* ∥ */ +{2981502511, (unsigned char*)"\342\210\245", -1, -1}, /* ∥ */ {2985439982, (unsigned char*)"\342\207\222", 1791, 1793}, /* ⇒ */ -{3007342277, (unsigned char*)"\342\210\200", 0, 0}, /* ∀ */ +{3007342277, (unsigned char*)"\342\210\200", -1, -1}, /* ∀ */ {3007934280, (unsigned char*)"\342\206\223", 1761, 1827}, /* ↓ */ -{3008020769, (unsigned char*)"\342\212\242", 0, 0}, /* ⊢ */ -{3024135078, (unsigned char*)"\342\204\216", 1795, 0}, /* ℎ */ +{3008020769, (unsigned char*)"\342\212\242", -1, -1}, /* ⊢ */ +{3024135078, (unsigned char*)"\342\204\216", 1795, -1}, /* ℎ */ {3027472336, (unsigned char*)"\342\234\240", 1796, 1798}, /* ✠ */ -{3029742636, (unsigned char*)"\317\234", 0, 0}, /* Ϝ */ +{3029742636, (unsigned char*)"\317\234", -1, -1}, /* Ϝ */ {3029913696, (unsigned char*)"\320\252", 1797, 1801}, /* Ъ */ -{3031100224, (unsigned char*)"\304\236", 0, 0}, /* Ğ */ +{3031100224, (unsigned char*)"\304\236", -1, -1}, /* Ğ */ {3031817453, (unsigned char*)"\304\242", 1800, 1802}, /* Ģ */ -{3034221242, (unsigned char*)"\342\206\231", 0, 0}, /* ↙ */ +{3034221242, (unsigned char*)"\342\206\231", -1, -1}, /* ↙ */ {3045326204, (unsigned char*)"\342\207\217", 1799, 1807}, /* ⇏ */ -{3048033127, (unsigned char*)"\342\250\242", 0, 0}, /* ⨢ */ +{3048033127, (unsigned char*)"\342\250\242", -1, -1}, /* ⨢ */ {3048050546, (unsigned char*)"\342\250\246", 1804, 1806}, /* ⨦ */ -{3048052099, (unsigned char*)"\342\250\247", 0, 0}, /* ⨧ */ +{3048052099, (unsigned char*)"\342\250\247", -1, -1}, /* ⨧ */ {3064281545, (unsigned char*)"\342\244\245", 1805, 1809}, /* ⤥ */ -{3073629027, (unsigned char*)"\342\207\223", 0, 0}, /* ⇓ */ +{3073629027, (unsigned char*)"\342\207\223", -1, -1}, /* ⇓ */ {3077837606, (unsigned char*)"\342\237\270", 1808, 1810}, /* ⟸ */ -{3084161209, (unsigned char*)"\342\206\244", 0, 0}, /* ↤ */ +{3084161209, (unsigned char*)"\342\206\244", -1, -1}, /* ↤ */ {3084170846, (unsigned char*)"\342\231\245", 1803, 1819}, /* ♥ */ -{3085628123, (unsigned char*)"\342\244\246", 0, 0}, /* ⤦ */ +{3085628123, (unsigned char*)"\342\244\246", -1, -1}, /* ⤦ */ {3086510115, (unsigned char*)"\342\251\220", 1812, 1814}, /* ⩐ */ -{3086788136, (unsigned char*)"\342\210\263", 0, 0}, /* ∳ */ +{3086788136, (unsigned char*)"\342\210\263", -1, -1}, /* ∳ */ {3090482080, (unsigned char*)"\304\246", 1813, 1817}, /* Ħ */ -{3096943633, (unsigned char*)"\342\212\206", 0, 0}, /* ⊆ */ +{3096943633, (unsigned char*)"\342\212\206", -1, -1}, /* ⊆ */ {3101951024, (unsigned char*)"\317\266", 1816, 1818}, /* ϶ */ -{3103676813, (unsigned char*)"\342\207\225", 0, 0}, /* ⇕ */ +{3103676813, (unsigned char*)"\342\207\225", -1, -1}, /* ⇕ */ {3107663392, (unsigned char*)"\303\215", 1815, 1823}, /* Í */ -{3115296259, (unsigned char*)"\303\214", 0, 0}, /* Ì */ +{3115296259, (unsigned char*)"\303\214", -1, -1}, /* Ì */ {3117411784, (unsigned char*)"\342\252\266", 1820, 1822}, /* ⪶ */ -{3117426762, (unsigned char*)"\342\213\251", 0, 0}, /* ⋩ */ +{3117426762, (unsigned char*)"\342\213\251", -1, -1}, /* ⋩ */ {3120384638, (unsigned char*)"\342\206\222", 1821, 1825}, /* → */ -{3130401184, (unsigned char*)"\304\250", 0, 0}, /* Ĩ */ +{3130401184, (unsigned char*)"\304\250", -1, -1}, /* Ĩ */ {3137855215, (unsigned char*)"\342\244\221", 1824, 1826}, /* ⤑ */ -{3148816789, (unsigned char*)"\342\211\212", 0, 0}, /* ≊ */ +{3148816789, (unsigned char*)"\342\211\212", -1, -1}, /* ≊ */ {3155294829, (unsigned char*)"\342\246\262", 1811, 1844}, /* ⦲ */ -{3156326686, (unsigned char*)"\342\237\271", 0, 0}, /* ⟹ */ -{3168213429, (unsigned char*)"\320\210", 1828, 0}, /* Ј */ +{3156326686, (unsigned char*)"\342\237\271", -1, -1}, /* ⟹ */ +{3168213429, (unsigned char*)"\320\210", 1828, -1}, /* Ј */ {3179945584, (unsigned char*)"\302\264", 1829, 1831}, /* ´ */ -{3187260351, (unsigned char*)"\342\213\241", 0, 0}, /* ⋡ */ +{3187260351, (unsigned char*)"\342\213\241", -1, -1}, /* ⋡ */ {3187578451, (unsigned char*)"\140", 1830, 1834}, /* ` */ -{3188359025, (unsigned char*)"\304\266", 0, 0}, /* Ķ */ +{3188359025, (unsigned char*)"\304\266", -1, -1}, /* Ķ */ {3191313194, (unsigned char*)"\342\252\226", 1833, 1835}, /* ⪖ */ -{3192524471, (unsigned char*)"\342\231\240", 0, 0}, /* ♠ */ +{3192524471, (unsigned char*)"\342\231\240", -1, -1}, /* ♠ */ {3193312110, (unsigned char*)"\342\207\202", 1832, 1840}, /* ⇂ */ -{3198287636, (unsigned char*)"\342\210\243", 0, 0}, /* ∣ */ +{3198287636, (unsigned char*)"\342\210\243", -1, -1}, /* ∣ */ {3202656041, (unsigned char*)"\342\252\267", 1837, 1839}, /* ⪷ */ -{3202683376, (unsigned char*)"\313\234", 0, 0}, /* ˜ */ +{3202683376, (unsigned char*)"\313\234", -1, -1}, /* ˜ */ {3204939972, (unsigned char*)"\342\200\211", 1838, 1842}, /*   */ -{3205018733, (unsigned char*)"\342\252\242\314\270", 0, 0}, /* ⪢̸ */ +{3205018733, (unsigned char*)"\342\252\242\314\270", -1, -1}, /* ⪢̸ */ {3225069571, (unsigned char*)"\304\271", 1841, 1843}, /* Ĺ */ -{3225407718, (unsigned char*)"\316\233", 0, 0}, /* Λ */ +{3225407718, (unsigned char*)"\316\233", -1, -1}, /* Λ */ {3227366116, (unsigned char*)"\304\275", 1836, 1852}, /* Ľ */ -{3227494418, (unsigned char*)"\304\273", 0, 0}, /* Ļ */ +{3227494418, (unsigned char*)"\304\273", -1, -1}, /* Ļ */ {3231328636, (unsigned char*)"\342\211\253", 1845, 1847}, /* ≫ */ -{3236753791, (unsigned char*)"\302\240", 0, 0}, /*   */ +{3236753791, (unsigned char*)"\302\240", -1, -1}, /*   */ {3238091406, (unsigned char*)"\342\245\257", 1846, 1850}, /* ⥯ */ -{3239497582, (unsigned char*)"\304\277", 0, 0}, /* Ŀ */ +{3239497582, (unsigned char*)"\304\277", -1, -1}, /* Ŀ */ {3241890386, (unsigned char*)"\342\212\216", 1849, 1851}, /* ⊎ */ -{3247023652, (unsigned char*)"\305\201", 0, 0}, /* Ł */ +{3247023652, (unsigned char*)"\305\201", -1, -1}, /* Ł */ {3259708759, (unsigned char*)"\342\211\270", 1848, 1856}, /* ≸ */ -{3263313176, (unsigned char*)"\342\211\276", 0, 0}, /* ≾ */ +{3263313176, (unsigned char*)"\342\211\276", -1, -1}, /* ≾ */ {3269638327, (unsigned char*)"\342\201\243", 1853, 1855}, /* ⁣ */ -{3273188409, (unsigned char*)"\342\213\207", 0, 0}, /* ⋇ */ +{3273188409, (unsigned char*)"\342\213\207", -1, -1}, /* ⋇ */ {3273823876, (unsigned char*)"\342\206\231", 1854, 1858}, /* ↙ */ -{3274947156, (unsigned char*)"\317\221", 0, 0}, /* ϑ */ +{3274947156, (unsigned char*)"\317\221", -1, -1}, /* ϑ */ {3278912800, (unsigned char*)"\342\210\211", 1857, 1859}, /* ∉ */ -{3289583116, (unsigned char*)"\342\201\242", 0, 0}, /* ⁢ */ +{3289583116, (unsigned char*)"\342\201\242", -1, -1}, /* ⁢ */ {3303295621, (unsigned char*)"\342\226\252", 1727, 1993}, /* ▪ */ -{3303340357, (unsigned char*)"\305\203", 0, 0}, /* Ń */ -{3305636902, (unsigned char*)"\305\207", 1861, 0}, /* Ň */ +{3303340357, (unsigned char*)"\305\203", -1, -1}, /* Ń */ +{3305636902, (unsigned char*)"\305\207", 1861, -1}, /* Ň */ {3305765204, (unsigned char*)"\305\205", 1862, 1864}, /* Ņ */ -{3312164768, (unsigned char*)"\342\206\266", 0, 0}, /* ↶ */ +{3312164768, (unsigned char*)"\342\206\266", -1, -1}, /* ↶ */ {3317854772, (unsigned char*)"\342\247\202", 1863, 1867}, /* ⧂ */ -{3321988818, (unsigned char*)"\342\211\222", 0, 0}, /* ≒ */ +{3321988818, (unsigned char*)"\342\211\222", -1, -1}, /* ≒ */ {3326078149, (unsigned char*)"\303\221", 1866, 1868}, /* Ñ */ -{3330297295, (unsigned char*)"\342\210\210", 0, 0}, /* ∈ */ +{3330297295, (unsigned char*)"\342\210\210", -1, -1}, /* ∈ */ {3335130386, (unsigned char*)"\342\207\201", 1865, 1873}, /* ⇁ */ -{3342475750, (unsigned char*)"\303\223", 0, 0}, /* Ó */ +{3342475750, (unsigned char*)"\303\223", -1, -1}, /* Ó */ {3342978026, (unsigned char*)"\342\250\252", 1870, 1872}, /* ⨪ */ -{3345463188, (unsigned char*)"\342\200\230", 0, 0}, /* ‘ */ +{3345463188, (unsigned char*)"\342\200\230", -1, -1}, /* ‘ */ {3345987146, (unsigned char*)"\305\220", 1871, 1875}, /* Ő */ -{3347296147, (unsigned char*)"\342\247\245", 0, 0}, /* ⧥ */ +{3347296147, (unsigned char*)"\342\247\245", -1, -1}, /* ⧥ */ {3350108617, (unsigned char*)"\303\222", 1874, 1876}, /* Ò */ -{3364123951, (unsigned char*)"\303\230", 0, 0}, /* Ø */ +{3364123951, (unsigned char*)"\303\230", -1, -1}, /* Ø */ {3365213542, (unsigned char*)"\303\225", 1869, 1886}, /* Õ */ -{3365214678, (unsigned char*)"\342\250\267", 0, 0}, /* ⨷ */ -{3366920273, (unsigned char*)"\342\212\220", 1878, 0}, /* ⊐ */ +{3365214678, (unsigned char*)"\342\250\267", -1, -1}, /* ⨷ */ +{3366920273, (unsigned char*)"\342\212\220", 1878, -1}, /* ⊐ */ {3382145070, (unsigned char*)"\342\247\220", 1879, 1881}, /* ⧐ */ -{3397226602, (unsigned char*)"\342\250\266", 0, 0}, /* ⨶ */ +{3397226602, (unsigned char*)"\342\250\266", -1, -1}, /* ⨶ */ {3403608988, (unsigned char*)"\316\237", 1880, 1884}, /* Ο */ -{3407806007, (unsigned char*)"\342\211\271", 0, 0}, /* ≹ */ +{3407806007, (unsigned char*)"\342\211\271", -1, -1}, /* ≹ */ {3410539801, (unsigned char*)"\342\212\263", 1883, 1885}, /* ⊳ */ -{3411686913, (unsigned char*)"\342\210\274", 0, 0}, /* ∼ */ +{3411686913, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ {3414892194, (unsigned char*)"\342\253\205", 1882, 1890}, /* ⫅ */ -{3414901599, (unsigned char*)"\342\212\212", 0, 0}, /* ⊊ */ +{3414901599, (unsigned char*)"\342\212\212", -1, -1}, /* ⊊ */ {3416706928, (unsigned char*)"\342\253\205\314\270", 1887, 1889}, /* ⫅̸ */ -{3428742722, (unsigned char*)"\342\206\255", 0, 0}, /* ↭ */ +{3428742722, (unsigned char*)"\342\206\255", -1, -1}, /* ↭ */ {3430824453, (unsigned char*)"\342\212\201", 1888, 1892}, /* ⊁ */ -{3437629897, (unsigned char*)"\342\210\262", 0, 0}, /* ∲ */ +{3437629897, (unsigned char*)"\342\210\262", -1, -1}, /* ∲ */ {3439187707, (unsigned char*)"\342\226\265", 1891, 1893}, /* ▵ */ -{3446439536, (unsigned char*)"\342\210\230", 0, 0}, /* ∘ */ +{3446439536, (unsigned char*)"\342\210\230", -1, -1}, /* ∘ */ {3453247008, (unsigned char*)"\342\250\272", 1877, 1911}, /* ⨺ */ -{3458661549, (unsigned char*)"\302\267", 0, 0}, /* · */ -{3459881929, (unsigned char*)"\305\224", 1895, 0}, /* Ŕ */ +{3458661549, (unsigned char*)"\302\267", -1, -1}, /* · */ +{3459881929, (unsigned char*)"\305\224", 1895, -1}, /* Ŕ */ {3460417724, (unsigned char*)"\342\244\226", 1896, 1898}, /* ⤖ */ -{3462178474, (unsigned char*)"\305\230", 0, 0}, /* Ř */ +{3462178474, (unsigned char*)"\305\230", -1, -1}, /* Ř */ {3462306776, (unsigned char*)"\305\226", 1897, 1901}, /* Ŗ */ -{3468169767, (unsigned char*)"\320\251", 0, 0}, /* Щ */ +{3468169767, (unsigned char*)"\320\251", -1, -1}, /* Щ */ {3471277411, (unsigned char*)"\342\212\222", 1900, 1902}, /* ⊒ */ -{3474127421, (unsigned char*)"\342\210\265", 0, 0}, /* ∵ */ +{3474127421, (unsigned char*)"\342\210\265", -1, -1}, /* ∵ */ {3476592093, (unsigned char*)"\320\254", 1899, 1907}, /* Ь */ -{3479304637, (unsigned char*)"\342\246\263", 0, 0}, /* ⦳ */ +{3479304637, (unsigned char*)"\342\246\263", -1, -1}, /* ⦳ */ {3482255238, (unsigned char*)"\342\231\246", 1904, 1906}, /* ♦ */ -{3484391873, (unsigned char*)"\342\251\255\314\270", 0, 0}, /* ⩭̸ */ +{3484391873, (unsigned char*)"\342\251\255\314\270", -1, -1}, /* ⩭̸ */ {3487531781, (unsigned char*)"\317\265", 1905, 1909}, /* ϵ */ -{3488439964, (unsigned char*)"\342\212\232", 0, 0}, /* ⊚ */ +{3488439964, (unsigned char*)"\342\212\232", -1, -1}, /* ⊚ */ {3488467227, (unsigned char*)"\342\212\235", 1908, 1910}, /* ⊝ */ -{3499017322, (unsigned char*)"\305\232", 0, 0}, /* Ś */ +{3499017322, (unsigned char*)"\305\232", -1, -1}, /* Ś */ {3501313867, (unsigned char*)"\305\240", 1903, 1919}, /* Š */ -{3501442169, (unsigned char*)"\305\236", 0, 0}, /* Ş */ +{3501442169, (unsigned char*)"\305\236", -1, -1}, /* Ş */ {3503305663, (unsigned char*)"\316\225", 1912, 1914}, /* Ε */ -{3508109390, (unsigned char*)"\342\212\243", 0, 0}, /* ⊣ */ +{3508109390, (unsigned char*)"\342\212\243", -1, -1}, /* ⊣ */ {3508279559, (unsigned char*)"\342\206\226", 1913, 1917}, /* ↖ */ -{3518617078, (unsigned char*)"\342\226\241", 0, 0}, /* □ */ +{3518617078, (unsigned char*)"\342\226\241", -1, -1}, /* □ */ {3522697147, (unsigned char*)"\342\213\220", 1916, 1918}, /* ⋐ */ -{3523200265, (unsigned char*)"\342\213\221", 0, 0}, /* ⋑ */ +{3523200265, (unsigned char*)"\342\213\221", -1, -1}, /* ⋑ */ {3529302376, (unsigned char*)"\342\206\277", 1915, 1923}, /* ↿ */ -{3539978494, (unsigned char*)"\342\214\211", 0, 0}, /* ⌉ */ +{3539978494, (unsigned char*)"\342\214\211", -1, -1}, /* ⌉ */ {3540449260, (unsigned char*)"\305\244", 1920, 1922}, /* Ť */ -{3540577562, (unsigned char*)"\305\242", 0, 0}, /* Ţ */ +{3540577562, (unsigned char*)"\305\242", -1, -1}, /* Ţ */ {3545419702, (unsigned char*)"\342\211\224", 1921, 1925}, /* ≔ */ -{3547493491, (unsigned char*)"\342\251\255", 0, 0}, /* ⩭ */ +{3547493491, (unsigned char*)"\342\251\255", -1, -1}, /* ⩭ */ {3560106796, (unsigned char*)"\305\246", 1924, 1926}, /* Ŧ */ -{3563635584, (unsigned char*)"\342\213\217", 0, 0}, /* ⋏ */ +{3563635584, (unsigned char*)"\342\213\217", -1, -1}, /* ⋏ */ {3577288108, (unsigned char*)"\303\232", 1894, 1960}, /* Ú */ -{3577346291, (unsigned char*)"\342\200\265", 0, 0}, /* ‵ */ -{3578995726, (unsigned char*)"\305\254", 1928, 0}, /* Ŭ */ +{3577346291, (unsigned char*)"\342\200\265", -1, -1}, /* ‵ */ +{3578995726, (unsigned char*)"\305\254", 1928, -1}, /* Ŭ */ {3580584725, (unsigned char*)"\342\213\215", 1929, 1931}, /* ⋍ */ -{3580799504, (unsigned char*)"\305\260", 0, 0}, /* Ű */ +{3580799504, (unsigned char*)"\305\260", -1, -1}, /* Ű */ {3583798838, (unsigned char*)"\342\207\200", 1930, 1934}, /* ⇀ */ -{3584920975, (unsigned char*)"\303\231", 0, 0}, /* Ù */ +{3584920975, (unsigned char*)"\303\231", -1, -1}, /* Ù */ {3584950583, (unsigned char*)"\342\206\230", 1933, 1935}, /* ↘ */ -{3600025900, (unsigned char*)"\305\250", 0, 0}, /* Ũ */ +{3600025900, (unsigned char*)"\305\250", -1, -1}, /* Ũ */ {3606990188, (unsigned char*)"\342\206\246", 1932, 1940}, /* ↦ */ -{3613167752, (unsigned char*)"\317\265", 0, 0}, /* ϵ */ +{3613167752, (unsigned char*)"\317\265", -1, -1}, /* ϵ */ {3619906823, (unsigned char*)"\342\253\246", 1937, 1939}, /* ⫦ */ -{3621684935, (unsigned char*)"\342\200\226", 0, 0}, /* ‖ */ +{3621684935, (unsigned char*)"\342\200\226", -1, -1}, /* ‖ */ {3628923373, (unsigned char*)"\342\206\272", 1938, 1942}, /* ↺ */ -{3641341969, (unsigned char*)"\342\212\252", 0, 0}, /* ⊪ */ +{3641341969, (unsigned char*)"\342\212\252", -1, -1}, /* ⊪ */ {3643238749, (unsigned char*)"\342\212\241", 1941, 1943}, /* ⊡ */ -{3644839135, (unsigned char*)"\342\212\207", 0, 0}, /* ⊇ */ +{3644839135, (unsigned char*)"\342\212\207", -1, -1}, /* ⊇ */ {3654203690, (unsigned char*)"\342\244\222", 1936, 1952}, /* ⤒ */ -{3664458826, (unsigned char*)"\342\211\274", 0, 0}, /* ≼ */ +{3664458826, (unsigned char*)"\342\211\274", -1, -1}, /* ≼ */ {3667688423, (unsigned char*)"\342\237\246", 1945, 1947}, /* ⟦ */ -{3696172421, (unsigned char*)"\342\206\242", 0, 0}, /* ↢ */ +{3696172421, (unsigned char*)"\342\206\242", -1, -1}, /* ↢ */ {3698472568, (unsigned char*)"\342\207\213", 1946, 1950}, /* ⇋ */ -{3702896903, (unsigned char*)"\342\217\234", 0, 0}, /* ⏜ */ +{3702896903, (unsigned char*)"\342\217\234", -1, -1}, /* ⏜ */ {3717462854, (unsigned char*)"\342\237\251", 1949, 1951}, /* ⟩ */ -{3718268991, (unsigned char*)"\342\207\200", 0, 0}, /* ⇀ */ +{3718268991, (unsigned char*)"\342\207\200", -1, -1}, /* ⇀ */ {3718312869, (unsigned char*)"\342\217\242", 1948, 1956}, /* ⏢ */ -{3727177825, (unsigned char*)"\342\211\223", 0, 0}, /* ≓ */ +{3727177825, (unsigned char*)"\342\211\223", -1, -1}, /* ≓ */ {3731026191, (unsigned char*)"\342\214\234", 1953, 1955}, /* ⌜ */ -{3732195663, (unsigned char*)"\342\211\202", 0, 0}, /* ≂ */ +{3732195663, (unsigned char*)"\342\211\202", -1, -1}, /* ≂ */ {3733829680, (unsigned char*)"\303\235", 1954, 1958}, /* Ý */ -{3751570166, (unsigned char*)"\342\200\276", 0, 0}, /* ‾ */ +{3751570166, (unsigned char*)"\342\200\276", -1, -1}, /* ‾ */ {3766854489, (unsigned char*)"\342\207\224", 1957, 1959}, /* ⇔ */ -{3770246354, (unsigned char*)"\342\244\270", 0, 0}, /* ⤸ */ +{3770246354, (unsigned char*)"\342\244\270", -1, -1}, /* ⤸ */ {3770246360, (unsigned char*)"\342\244\265", 1944, 1977}, /* ⤵ */ -{3772965073, (unsigned char*)"\305\271", 0, 0}, /* Ź */ -{3775261618, (unsigned char*)"\305\275", 1961, 0}, /* Ž */ +{3772965073, (unsigned char*)"\305\271", -1, -1}, /* Ź */ +{3775261618, (unsigned char*)"\305\275", 1961, -1}, /* Ž */ {3779733726, (unsigned char*)"\342\244\275", 1962, 1964}, /* ⤽ */ -{3786849249, (unsigned char*)"\342\244\274", 0, 0}, /* ⤼ */ +{3786849249, (unsigned char*)"\342\244\274", -1, -1}, /* ⤼ */ {3797614400, (unsigned char*)"\342\206\273", 1963, 1967}, /* ↻ */ -{3798368927, (unsigned char*)"\342\206\276", 0, 0}, /* ↾ */ +{3798368927, (unsigned char*)"\342\206\276", -1, -1}, /* ↾ */ {3798964609, (unsigned char*)"\342\245\232", 1966, 1968}, /* ⥚ */ -{3803595193, (unsigned char*)"\342\207\207", 0, 0}, /* ⇇ */ +{3803595193, (unsigned char*)"\342\207\207", -1, -1}, /* ⇇ */ {3819113224, (unsigned char*)"\342\252\257", 1965, 1973}, /* ⪯ */ -{3824989387, (unsigned char*)"\342\211\242", 0, 0}, /* ≢ */ +{3824989387, (unsigned char*)"\342\211\242", -1, -1}, /* ≢ */ {3828603062, (unsigned char*)"\342\210\226", 1970, 1972}, /* ∖ */ -{3836604834, (unsigned char*)"\342\211\276", 0, 0}, /* ≾ */ +{3836604834, (unsigned char*)"\342\211\276", -1, -1}, /* ≾ */ {3844621319, (unsigned char*)"\342\253\214\357\270\200", 1971, 1975}, /* ⫌︀ */ -{3865887113, (unsigned char*)"\342\237\272", 0, 0}, /* ⟺ */ +{3865887113, (unsigned char*)"\342\237\272", -1, -1}, /* ⟺ */ {3872451732, (unsigned char*)"\342\245\233", 1974, 1976}, /* ⥛ */ -{3881458486, (unsigned char*)"\342\205\206", 0, 0}, /* ⅆ */ +{3881458486, (unsigned char*)"\342\205\206", -1, -1}, /* ⅆ */ {3895490466, (unsigned char*)"\342\213\255", 1969, 1985}, /* ⋭ */ -{3896257183, (unsigned char*)"\342\247\220\314\270", 0, 0}, /* ⧐̸ */ +{3896257183, (unsigned char*)"\342\247\220\314\270", -1, -1}, /* ⧐̸ */ {3936475985, (unsigned char*)"\342\201\241", 1978, 1980}, /* ⁡ */ -{3938183814, (unsigned char*)"\342\245\240", 0, 0}, /* ⥠ */ +{3938183814, (unsigned char*)"\342\245\240", -1, -1}, /* ⥠ */ {3942438865, (unsigned char*)"\342\212\203\342\203\222", 1979, 1983}, /* ⊃⃒ */ -{3948129594, (unsigned char*)"\342\211\241", 0, 0}, /* ≡ */ +{3948129594, (unsigned char*)"\342\211\241", -1, -1}, /* ≡ */ {3958994798, (unsigned char*)"\342\211\240", 1982, 1984}, /* ≠ */ -{3962407576, (unsigned char*)"\342\212\207", 0, 0}, /* ⊇ */ +{3962407576, (unsigned char*)"\342\212\207", -1, -1}, /* ⊇ */ {3963371935, (unsigned char*)"\342\212\224", 1981, 1989}, /* ⊔ */ -{3963536128, (unsigned char*)"\342\211\202\314\270", 0, 0}, /* ≂̸ */ +{3963536128, (unsigned char*)"\342\211\202\314\270", -1, -1}, /* ≂̸ */ {3976486408, (unsigned char*)"\342\211\201", 1986, 1988}, /* ≁ */ -{3995834959, (unsigned char*)"\342\210\243", 0, 0}, /* ∣ */ +{3995834959, (unsigned char*)"\342\210\243", -1, -1}, /* ∣ */ {4000119657, (unsigned char*)"\342\237\274", 1987, 1991}, /* ⟼ */ -{4020352870, (unsigned char*)"\342\206\247", 0, 0}, /* ↧ */ +{4020352870, (unsigned char*)"\342\206\247", -1, -1}, /* ↧ */ {4029960458, (unsigned char*)"\342\253\232", 1990, 1992}, /* ⫚ */ -{4032878074, (unsigned char*)"\342\252\202", 0, 0}, /* ⪂ */ +{4032878074, (unsigned char*)"\342\252\202", -1, -1}, /* ⪂ */ {4033356785, (unsigned char*)"\342\211\200", 1927, 2059}, /* ≀ */ -{4046912824, (unsigned char*)"\303\241", 0, 0}, /* á */ -{4048620442, (unsigned char*)"\304\203", 1994, 0}, /* ă */ +{4046912824, (unsigned char*)"\303\241", -1, -1}, /* á */ +{4048620442, (unsigned char*)"\304\203", 1994, -1}, /* ă */ {4052131355, (unsigned char*)"\342\206\276", 1995, 1997}, /* ↾ */ -{4054545691, (unsigned char*)"\303\240", 0, 0}, /* à */ +{4054545691, (unsigned char*)"\303\240", -1, -1}, /* à */ {4055647832, (unsigned char*)"\137", 1996, 2000}, /* _ */ -{4062343755, (unsigned char*)"\342\251\225", 0, 0}, /* ⩕ */ +{4062343755, (unsigned char*)"\342\251\225", -1, -1}, /* ⩕ */ {4062464799, (unsigned char*)"\342\210\241", 1999, 2001}, /* ∡ */ -{4062471238, (unsigned char*)"\342\210\242", 0, 0}, /* ∢ */ +{4062471238, (unsigned char*)"\342\210\242", -1, -1}, /* ∢ */ {4064609813, (unsigned char*)"\342\251\257", 1998, 2006}, /* ⩯ */ -{4065165407, (unsigned char*)"\342\211\210", 0, 0}, /* ≈ */ +{4065165407, (unsigned char*)"\342\211\210", -1, -1}, /* ≈ */ {4067561536, (unsigned char*)"\342\210\257", 2003, 2005}, /* ∯ */ -{4069650616, (unsigned char*)"\303\243", 0, 0}, /* ã */ +{4069650616, (unsigned char*)"\303\243", -1, -1}, /* ã */ {4086587866, (unsigned char*)"\342\212\275", 2004, 2008}, /* ⊽ */ -{4086588954, (unsigned char*)"\342\214\205", 0, 0}, /* ⌅ */ +{4086588954, (unsigned char*)"\342\214\205", -1, -1}, /* ⌅ */ {4090770168, (unsigned char*)"\342\210\265", 2007, 2009}, /* ∵ */ -{4091323184, (unsigned char*)"\342\204\254", 0, 0}, /* ℬ */ +{4091323184, (unsigned char*)"\342\204\254", -1, -1}, /* ℬ */ {4093437092, (unsigned char*)"\342\212\210", 2002, 2018}, /* ⊈ */ -{4095659115, (unsigned char*)"\342\213\202", 0, 0}, /* ⋂ */ +{4095659115, (unsigned char*)"\342\213\202", -1, -1}, /* ⋂ */ {4095659775, (unsigned char*)"\342\213\203", 2011, 2013}, /* ⋃ */ -{4095679927, (unsigned char*)"\342\213\201", 0, 0}, /* ⋁ */ +{4095679927, (unsigned char*)"\342\213\201", -1, -1}, /* ⋁ */ {4097832139, (unsigned char*)"\342\244\215", 2012, 2016}, /* ⤍ */ -{4101362008, (unsigned char*)"\342\211\275", 0, 0}, /* ≽ */ +{4101362008, (unsigned char*)"\342\211\275", -1, -1}, /* ≽ */ {4103260794, (unsigned char*)"\342\212\245", 2015, 2017}, /* ⊥ */ -{4103368399, (unsigned char*)"\342\213\210", 0, 0}, /* ⋈ */ +{4103368399, (unsigned char*)"\342\213\210", -1, -1}, /* ⋈ */ {4103384951, (unsigned char*)"\342\247\211", 2014, 2022}, /* ⧉ */ -{4104332831, (unsigned char*)"\342\213\232", 0, 0}, /* ⋚ */ +{4104332831, (unsigned char*)"\342\213\232", -1, -1}, /* ⋚ */ {4104362788, (unsigned char*)"\342\200\265", 2019, 2021}, /* ‵ */ -{4106870372, (unsigned char*)"\302\246", 0, 0}, /* ¦ */ +{4106870372, (unsigned char*)"\302\246", -1, -1}, /* ¦ */ {4108102937, (unsigned char*)"\342\226\271", 2020, 2024}, /* ▹ */ -{4110079789, (unsigned char*)"\342\200\242", 0, 0}, /* • */ +{4110079789, (unsigned char*)"\342\200\242", -1, -1}, /* • */ {4110120079, (unsigned char*)"\342\211\217", 2023, 2025}, /* ≏ */ -{4113926953, (unsigned char*)"\342\212\222", 0, 0}, /* ⊒ */ +{4113926953, (unsigned char*)"\342\212\222", -1, -1}, /* ⊒ */ {4125183610, (unsigned char*)"\304\207", 2010, 2043}, /* ć */ -{4125628812, (unsigned char*)"\342\251\204", 0, 0}, /* ⩄ */ -{4125630573, (unsigned char*)"\342\251\213", 2027, 0}, /* ⩋ */ +{4125628812, (unsigned char*)"\342\251\204", -1, -1}, /* ⩄ */ +{4125630573, (unsigned char*)"\342\251\213", 2027, -1}, /* ⩋ */ {4125631233, (unsigned char*)"\342\251\207", 2028, 2030}, /* ⩇ */ -{4125632128, (unsigned char*)"\342\251\200", 0, 0}, /* ⩀ */ +{4125632128, (unsigned char*)"\342\251\200", -1, -1}, /* ⩀ */ {4127480155, (unsigned char*)"\304\215", 2029, 2033}, /* č */ -{4127608457, (unsigned char*)"\303\247", 0, 0}, /* ç */ +{4127608457, (unsigned char*)"\303\247", -1, -1}, /* ç */ {4127654983, (unsigned char*)"\342\252\241\314\270", 2032, 2034}, /* ⪡̸ */ -{4133749028, (unsigned char*)"\342\207\204", 0, 0}, /* ⇄ */ +{4133749028, (unsigned char*)"\342\207\204", -1, -1}, /* ⇄ */ {4135189948, (unsigned char*)"\342\211\227", 2031, 2039}, /* ≗ */ -{4135200957, (unsigned char*)"\342\253\257", 0, 0}, /* ⫯ */ +{4135200957, (unsigned char*)"\342\253\257", -1, -1}, /* ⫯ */ {4139421400, (unsigned char*)"\342\250\271", 2036, 2038}, /* ⨹ */ -{4139561603, (unsigned char*)"\342\250\273", 0, 0}, /* ⨻ */ +{4139561603, (unsigned char*)"\342\250\273", -1, -1}, /* ⨻ */ {4142103205, (unsigned char*)"\342\211\224", 2037, 2041}, /* ≔ */ -{4142136550, (unsigned char*)"\100", 0, 0}, /* @ */ +{4142136550, (unsigned char*)"\100", -1, -1}, /* @ */ {4142139976, (unsigned char*)"\342\210\230", 2040, 2042}, /* ∘ */ -{4142168560, (unsigned char*)"\342\210\256", 0, 0}, /* ∮ */ +{4142168560, (unsigned char*)"\342\210\256", -1, -1}, /* ∮ */ {4142250252, (unsigned char*)"\342\210\220", 2035, 2051}, /* ∐ */ -{4142258021, (unsigned char*)"\342\204\227", 0, 0}, /* ℗ */ +{4142258021, (unsigned char*)"\342\204\227", -1, -1}, /* ℗ */ {4149203630, (unsigned char*)"\342\206\266", 2044, 2046}, /* ↶ */ -{4149348993, (unsigned char*)"\342\251\206", 0, 0}, /* ⩆ */ +{4149348993, (unsigned char*)"\342\251\206", -1, -1}, /* ⩆ */ {4149349653, (unsigned char*)"\342\251\212", 2045, 2049}, /* ⩊ */ -{4149350548, (unsigned char*)"\342\212\215", 0, 0}, /* ⊍ */ +{4149350548, (unsigned char*)"\342\212\215", -1, -1}, /* ⊍ */ {4149419252, (unsigned char*)"\342\206\267", 2048, 2050}, /* ↷ */ -{4149437332, (unsigned char*)"\302\244", 0, 0}, /* ¤ */ +{4149437332, (unsigned char*)"\302\244", -1, -1}, /* ¤ */ {4153949565, (unsigned char*)"\342\214\255", 2047, 2055}, /* ⌭ */ -{4164447023, (unsigned char*)"\342\200\240", 0, 0}, /* † */ +{4164447023, (unsigned char*)"\342\200\240", -1, -1}, /* † */ {4164625015, (unsigned char*)"\342\204\270", 2052, 2054}, /* ℸ */ -{4166615548, (unsigned char*)"\304\217", 0, 0}, /* ď */ +{4166615548, (unsigned char*)"\304\217", -1, -1}, /* ď */ {4168585154, (unsigned char*)"\342\210\245", 2053, 2057}, /* ∥ */ -{4170461671, (unsigned char*)"\342\245\277", 0, 0}, /* ⥿ */ +{4170461671, (unsigned char*)"\342\245\277", -1, -1}, /* ⥿ */ {4174475578, (unsigned char*)"\303\267", 2056, 2058}, /* ÷ */ -{4174482461, (unsigned char*)"\342\213\207", 0, 0}, /* ⋇ */ +{4174482461, (unsigned char*)"\342\213\207", -1, -1}, /* ⋇ */ {4174518988, (unsigned char*)"\342\245\237", 2026, 2092}, /* ⥟ */ -{4175347172, (unsigned char*)"\342\251\276", 0, 0}, /* ⩾ */ -{4177357543, (unsigned char*)"\342\214\236", 2060, 0}, /* ⌞ */ +{4175347172, (unsigned char*)"\342\251\276", -1, -1}, /* ⩾ */ +{4177357543, (unsigned char*)"\342\214\236", 2060, -1}, /* ⌞ */ {4177360713, (unsigned char*)"\342\214\215", 2061, 2063}, /* ⌍ */ -{4179273784, (unsigned char*)"\342\207\265", 0, 0}, /* ⇵ */ +{4179273784, (unsigned char*)"\342\207\265", -1, -1}, /* ⇵ */ {4180176204, (unsigned char*)"\342\252\260", 2062, 2066}, /* ⪰ */ -{4181234915, (unsigned char*)"\44", 0, 0}, /* $ */ +{4181234915, (unsigned char*)"\44", -1, -1}, /* $ */ {4181356513, (unsigned char*)"\342\244\220", 2065, 2067}, /* ⤐ */ -{4182584927, (unsigned char*)"\342\227\274", 0, 0}, /* ◼ */ +{4182584927, (unsigned char*)"\342\227\274", -1, -1}, /* ◼ */ {4184473069, (unsigned char*)"\342\214\237", 2064, 2072}, /* ⌟ */ -{4184476239, (unsigned char*)"\342\214\214", 0, 0}, /* ⌌ */ +{4184476239, (unsigned char*)"\342\214\214", -1, -1}, /* ⌌ */ {4186273084, (unsigned char*)"\304\221", 2069, 2071}, /* đ */ -{4186873785, (unsigned char*)"\342\253\213\357\270\200", 0, 0}, /* ⫋︀ */ +{4186873785, (unsigned char*)"\342\253\213\357\270\200", -1, -1}, /* ⫋︀ */ {4192460800, (unsigned char*)"\342\204\234", 2070, 2074}, /* ℜ */ -{4194937782, (unsigned char*)"\342\251\275", 0, 0}, /* ⩽ */ +{4194937782, (unsigned char*)"\342\251\275", -1, -1}, /* ⩽ */ {4197667814, (unsigned char*)"\342\211\277", 2073, 2075}, /* ≿ */ -{4200620618, (unsigned char*)"\342\213\213", 0, 0}, /* ⋋ */ +{4200620618, (unsigned char*)"\342\213\213", -1, -1}, /* ⋋ */ {4203454396, (unsigned char*)"\303\251", 2068, 2084}, /* é */ -{4204027817, (unsigned char*)"\342\251\256", 0, 0}, /* ⩮ */ +{4204027817, (unsigned char*)"\342\251\256", -1, -1}, /* ⩮ */ {4205750941, (unsigned char*)"\304\233", 2077, 2079}, /* ě */ -{4206247525, (unsigned char*)"\342\211\225", 0, 0}, /* ≕ */ +{4206247525, (unsigned char*)"\342\211\225", -1, -1}, /* ≕ */ {4207958313, (unsigned char*)"\342\237\267", 2078, 2082}, /* ⟷ */ -{4211087263, (unsigned char*)"\303\250", 0, 0}, /* è */ +{4211087263, (unsigned char*)"\303\250", -1, -1}, /* è */ {4211126251, (unsigned char*)"\342\252\230", 2081, 2083}, /* ⪘ */ -{4215408006, (unsigned char*)"\342\211\266", 0, 0}, /* ≶ */ +{4215408006, (unsigned char*)"\342\211\266", -1, -1}, /* ≶ */ {4215610643, (unsigned char*)"\342\237\250", 2080, 2088}, /* ⟨ */ -{4217055856, (unsigned char*)"\342\252\227", 0, 0}, /* ⪗ */ +{4217055856, (unsigned char*)"\342\252\227", -1, -1}, /* ⪗ */ {4218151722, (unsigned char*)"\342\210\205", 2085, 2087}, /* ∅ */ -{4218252734, (unsigned char*)"\342\200\204", 0, 0}, /*   */ +{4218252734, (unsigned char*)"\342\200\204", -1, -1}, /*   */ {4218252735, (unsigned char*)"\342\200\205", 2086, 2090}, /*   */ -{4221168044, (unsigned char*)"\342\247\243", 0, 0}, /* ⧣ */ +{4221168044, (unsigned char*)"\342\247\243", -1, -1}, /* ⧣ */ {4222415996, (unsigned char*)"\342\211\226", 2089, 2091}, /* ≖ */ -{4223053968, (unsigned char*)"\75", 0, 0}, /* = */ +{4223053968, (unsigned char*)"\75", -1, -1}, /* = */ {4223058556, (unsigned char*)"\342\211\237", 2076, 2109}, /* ≟ */ -{4232694450, (unsigned char*)"\342\207\202", 0, 0}, /* ⇂ */ -{4235957670, (unsigned char*)"\342\252\204", 2093, 0}, /* ⪄ */ +{4232694450, (unsigned char*)"\342\207\202", -1, -1}, /* ⇂ */ +{4235957670, (unsigned char*)"\342\252\204", 2093, -1}, /* ⪄ */ {4242426505, (unsigned char*)"\342\207\222", 2094, 2096}, /* ⇒ */ -{4247670799, (unsigned char*)"\342\231\200", 0, 0}, /* ♀ */ +{4247670799, (unsigned char*)"\342\231\200", -1, -1}, /* ♀ */ {4248724854, (unsigned char*)"\357\254\203", 2095, 2099}, /* ffi */ -{4248832665, (unsigned char*)"\357\254\204", 0, 0}, /* ffl */ +{4248832665, (unsigned char*)"\357\254\204", -1, -1}, /* ffl */ {4253350520, (unsigned char*)"\342\207\222", 2098, 2100}, /* ⇒ */ -{4259709701, (unsigned char*)"\342\210\200", 0, 0}, /* ∀ */ +{4259709701, (unsigned char*)"\342\210\200", -1, -1}, /* ∀ */ {4261230855, (unsigned char*)"\342\206\256", 2097, 2105}, /* ↮ */ -{4262656708, (unsigned char*)"\302\275", 0, 0}, /* ½ */ +{4262656708, (unsigned char*)"\302\275", -1, -1}, /* ½ */ {4262656709, (unsigned char*)"\342\205\223", 2102, 2104}, /* ⅓ */ -{4262656710, (unsigned char*)"\302\274", 0, 0}, /* ¼ */ +{4262656710, (unsigned char*)"\302\274", -1, -1}, /* ¼ */ {4262656711, (unsigned char*)"\342\205\225", 2103, 2107}, /* ⅕ */ -{4262656712, (unsigned char*)"\342\205\231", 0, 0}, /* ⅙ */ +{4262656712, (unsigned char*)"\342\205\231", -1, -1}, /* ⅙ */ {4262656714, (unsigned char*)"\342\205\233", 2106, 2108}, /* ⅛ */ -{4262656742, (unsigned char*)"\342\205\224", 0, 0}, /* ⅔ */ +{4262656742, (unsigned char*)"\342\205\224", -1, -1}, /* ⅔ */ {4262656744, (unsigned char*)"\342\205\226", 2101, 2117}, /* ⅖ */ -{4262656776, (unsigned char*)"\302\276", 0, 0}, /* ¾ */ +{4262656776, (unsigned char*)"\302\276", -1, -1}, /* ¾ */ {4262656777, (unsigned char*)"\342\205\227", 2110, 2112}, /* ⅗ */ -{4262656780, (unsigned char*)"\342\205\234", 0, 0}, /* ⅜ */ +{4262656780, (unsigned char*)"\342\205\234", -1, -1}, /* ⅜ */ {4262656810, (unsigned char*)"\342\205\230", 2111, 2115}, /* ⅘ */ -{4262656844, (unsigned char*)"\342\205\232", 0, 0}, /* ⅚ */ +{4262656844, (unsigned char*)"\342\205\232", -1, -1}, /* ⅚ */ {4262656846, (unsigned char*)"\342\205\235", 2114, 2116}, /* ⅝ */ -{4262656912, (unsigned char*)"\342\205\236", 0, 0}, /* ⅞ */ +{4262656912, (unsigned char*)"\342\205\236", -1, -1}, /* ⅞ */ {4268685711, (unsigned char*)"\342\211\203", 2113, 2121}, /* ≃ */ -{4276609841, (unsigned char*)"\342\211\216", 0, 0}, /* ≎ */ +{4276609841, (unsigned char*)"\342\211\216", -1, -1}, /* ≎ */ {4281725182, (unsigned char*)"\307\265", 2118, 2120}, /* ǵ */ -{4282075212, (unsigned char*)"\317\235", 0, 0}, /* ϝ */ +{4282075212, (unsigned char*)"\317\235", -1, -1}, /* ϝ */ {4283432800, (unsigned char*)"\304\237", 2119, 2123}, /* ğ */ -{4286177321, (unsigned char*)"\342\211\210", 0, 0}, /* ≈ */ +{4286177321, (unsigned char*)"\342\211\210", -1, -1}, /* ≈ */ {4287025195, (unsigned char*)"\342\252\200", 2122, 2124}, /* ⪀ */ -{4287033576, (unsigned char*)"\342\252\224", 0, 0}, /* ⪔ */ +{4287033576, (unsigned char*)"\342\252\224", -1, -1}, /* ⪔ */ }; static int cmark_entities_root = 1062; diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index c8e4b93314..51e3565b01 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -30,7 +30,7 @@ S_lookup(int i, unsigned long key) } else { int next = key < cmark_entities[i].value ? cmark_entities[i].less : cmark_entities[i].greater; - if (next == 0) { + if (next == -1) { // leaf node return NULL; } else { return S_lookup(next, key); diff --git a/tools/make_entities_h.py b/tools/make_entities_h.py index 5c248257ca..90831a953c 100644 --- a/tools/make_entities_h.py +++ b/tools/make_entities_h.py @@ -42,7 +42,7 @@ lines = [""] * len(hashed_data) # in this list. Adds to lines a line for the midpoint, then calls # itself recursively for the earlier and later elements. Each node # contains indices for elements with a lesser hash and elements with -# a greater hash. An index of 0 means we're at a leaf node. +# a greater hash. An index of -1 means we're at a leaf node. def to_binary_array(xs, mid): # divide in half, and form binary array from each half x = xs[mid] @@ -51,11 +51,11 @@ def to_binary_array(xs, mid): midlesses = len(lesses) // 2 midgreaters = len(greaters) // 2 if len(lesses) == 0: - ml = 0 + ml = -1 else: ml = indices[lesses[midlesses][0]] if len(greaters) == 0: - mg = 0 + mg = -1 else: mg = indices[greaters[midgreaters][0]] lines[indices[x[0]]] = ("{" + str(x[0]) + ", (unsigned char*)\"" + -- cgit 0.0.5-2-1-g0f52 From 76ed9a65b03b2477628c0bf72855cc4686642574 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 14:15:32 -0700 Subject: Mark entity data structures as const. --- src/entities.h | 4 ++-- tools/make_entities_h.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/entities.h b/src/entities.h index 28e2ccde86..2637c7ff8a 100644 --- a/src/entities.h +++ b/src/entities.h @@ -15,7 +15,7 @@ struct cmark_entity_node { #define CMARK_ENTITY_MIN_LENGTH 2 #define CMARK_ENTITY_MAX_LENGTH 31 -static struct cmark_entity_node cmark_entities[] = { +static const struct cmark_entity_node cmark_entities[] = { {132476, (unsigned char*)"\342\203\233", -1, -1}, /* ⃛ */ {5862221, (unsigned char*)"\342\205\205", 0, -1}, /* ⅅ */ {5862336, (unsigned char*)"\76", 1, 3}, /* > */ @@ -2143,7 +2143,7 @@ static struct cmark_entity_node cmark_entities[] = { {4287033576, (unsigned char*)"\342\252\224", -1, -1}, /* ⪔ */ }; -static int cmark_entities_root = 1062; +static const int cmark_entities_root = 1062; #ifdef __cplusplus } diff --git a/tools/make_entities_h.py b/tools/make_entities_h.py index 90831a953c..a9932467e8 100644 --- a/tools/make_entities_h.py +++ b/tools/make_entities_h.py @@ -89,14 +89,14 @@ struct cmark_entity_node { #define CMARK_ENTITY_MAX_LENGTH 31 """) -print("static struct cmark_entity_node cmark_entities[] = {"); +print("static const struct cmark_entity_node cmark_entities[] = {"); for line in lines: print(line); print("};\n"); -print("static int cmark_entities_root = " + str(mid) + ";"); +print("static const int cmark_entities_root = " + str(mid) + ";"); print(""" #ifdef __cplusplus -- cgit 0.0.5-2-1-g0f52 From e113185554c4d775e6fca0596011b405fa1700a5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 14:13:53 -0700 Subject: Rebuild src/entities.h when the generating python program changes. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 10d4e98e7a..6b1c6ac94c 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ INSTALL_PREFIX?=/usr/local .PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl -all: cmake_build man/man3/cmark.3 +all: src/entities.h cmake_build man/man3/cmark.3 $(CMARK): cmake_build -- cgit 0.0.5-2-1-g0f52 From 8418191a26b970c32c0396bf3580c0c7a374fb35 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 14:50:27 -0700 Subject: Revert "Rebuild src/entities.h when the generating python program changes." This reverts commit e113185554c4d775e6fca0596011b405fa1700a5. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6b1c6ac94c..10d4e98e7a 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ INSTALL_PREFIX?=/usr/local .PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl -all: src/entities.h cmake_build man/man3/cmark.3 +all: cmake_build man/man3/cmark.3 $(CMARK): cmake_build -- cgit 0.0.5-2-1-g0f52 From 54c087d1272b4ce756e56de68e8e6dfac6d159fc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 16:31:52 -0700 Subject: make_entities_h.py: confirm there are no hash collisions. At least with valid data. --- tools/make_entities_h.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tools/make_entities_h.py b/tools/make_entities_h.py index a9932467e8..9342286c6f 100644 --- a/tools/make_entities_h.py +++ b/tools/make_entities_h.py @@ -15,11 +15,19 @@ def djb2(s): entities5 = html.entities.html5 +# remove keys without semicolons. For some reason the list +# has duplicates of a few things, like auml, one with and one +# without a semicolon. +entities = [(k[:-1], entities5[k]) for k in entities5.keys() if k[-1] == ';'] + # Note that most entries in the entity table end with ';', but in a few # cases we have both a version with ';' and one without, so we strip out # the latter to avoid duplicates: -hashed_data = sorted([[int(djb2(s[:-1])), entities5[s].encode('utf-8'), s] - for s in entities5.keys() if s[-1] == ';']) +hashed_data = sorted([[int(djb2(k)), v.encode('utf-8'), k] for (k,v) in entities]) + +# Confirm no hash collisions +hashes = [x for [x,_,_] in hashed_data] +assert(len(hashes) == len(set(hashes))) # indices is a dictionary - given a hash it spits out the ordering # of this entity in the list (the array index) @@ -60,7 +68,7 @@ def to_binary_array(xs, mid): mg = indices[greaters[midgreaters][0]] lines[indices[x[0]]] = ("{" + str(x[0]) + ", (unsigned char*)\"" + ''.join(map(toesc, x[1])) + "\", " + str(ml) + - ", " + str(mg) + "}, /* &" + x[2] + " */") + ", " + str(mg) + "}, /* &" + x[2] + "; */") if len(lesses) > 0: to_binary_array(lesses, midlesses) if len(greaters) > 0: -- cgit 0.0.5-2-1-g0f52 From 7e7819e05ec91bc7ca7859d119f1274cf3a83913 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 17:28:53 -0700 Subject: Simpler approach for entity lookup. We dispense with the hashes and just do string comparsions. Since the array is in order, we can search intelligently and should never need to do more than 8 or so comparisons. This reduces binary size even further, at a small cost in performance. (This shouldn't matter too much, as it's only detectable in really entity-heavy sources.) --- src/entities.h | 4258 +++++++++++++++++++++++----------------------- src/houdini_html_u.c | 39 +- tools/make_entities_h.py | 88 +- 3 files changed, 2152 insertions(+), 2233 deletions(-) diff --git a/src/entities.h b/src/entities.h index 2637c7ff8a..765f1b8793 100644 --- a/src/entities.h +++ b/src/entities.h @@ -6,2144 +6,2142 @@ extern "C" { #endif struct cmark_entity_node { - unsigned long value; - unsigned char *bytes; - int less; - int greater; + unsigned char *entity; + unsigned char bytes[8]; }; #define CMARK_ENTITY_MIN_LENGTH 2 #define CMARK_ENTITY_MAX_LENGTH 31 +#define CMARK_NUM_ENTITIES 2125 static const struct cmark_entity_node cmark_entities[] = { -{132476, (unsigned char*)"\342\203\233", -1, -1}, /* ⃛ */ -{5862221, (unsigned char*)"\342\205\205", 0, -1}, /* ⅅ */ -{5862336, (unsigned char*)"\76", 1, 3}, /* > */ -{5862355, (unsigned char*)"\342\213\231", -1, -1}, /* ⋙ */ -{5862368, (unsigned char*)"\342\211\253", 2, 6}, /* ≫ */ -{5862427, (unsigned char*)"\342\204\221", -1, -1}, /* ℑ */ -{5862501, (unsigned char*)"\74", 5, 7}, /* < */ -{5862525, (unsigned char*)"\342\213\230", -1, -1}, /* ⋘ */ -{5862533, (unsigned char*)"\342\211\252", 4, 12}, /* ≪ */ -{5862567, (unsigned char*)"\316\234", -1, -1}, /* Μ */ -{5862600, (unsigned char*)"\316\235", 9, 11}, /* Ν */ -{5862630, (unsigned char*)"\342\251\224", -1, -1}, /* ⩔ */ -{5862654, (unsigned char*)"\316\240", 10, 14}, /* Π */ -{5862663, (unsigned char*)"\342\252\273", -1, -1}, /* ⪻ */ -{5862716, (unsigned char*)"\342\204\234", 13, 15}, /* ℜ */ -{5862747, (unsigned char*)"\342\252\274", -1, -1}, /* ⪼ */ -{5862918, (unsigned char*)"\316\236", 8, 25}, /* Ξ */ -{5863209, (unsigned char*)"\342\210\276", -1, -1}, /* ∾ */ -{5863212, (unsigned char*)"\342\201\241", 17, -1}, /* ⁡ */ -{5863222, (unsigned char*)"\342\211\210", 18, 20}, /* ≈ */ -{5863309, (unsigned char*)"\342\205\206", -1, -1}, /* ⅆ */ -{5863343, (unsigned char*)"\342\205\207", 19, 23}, /* ⅇ */ -{5863345, (unsigned char*)"\342\252\232", -1, -1}, /* ⪚ */ -{5863350, (unsigned char*)"\342\252\231", 22, 24}, /* ⪙ */ -{5863377, (unsigned char*)"\342\211\247", -1, -1}, /* ≧ */ -{5863409, (unsigned char*)"\342\211\245", 21, 29}, /* ≥ */ -{5863411, (unsigned char*)"\342\211\253", -1, -1}, /* ≫ */ -{5863416, (unsigned char*)"\342\211\267", 26, 28}, /* ≷ */ -{5863424, (unsigned char*)"\76", -1, -1}, /* > */ -{5863473, (unsigned char*)"\342\201\243", 27, 31}, /* ⁣ */ -{5863479, (unsigned char*)"\342\205\210", -1, -1}, /* ⅈ */ -{5863484, (unsigned char*)"\342\210\210", 30, 32}, /* ∈ */ -{5863490, (unsigned char*)"\342\201\242", -1, -1}, /* ⁢ */ -{5863542, (unsigned char*)"\342\211\246", 16, 50}, /* ≦ */ -{5863574, (unsigned char*)"\342\211\244", -1, -1}, /* ≤ */ -{5863576, (unsigned char*)"\342\211\266", 34, -1}, /* ≶ */ -{5863581, (unsigned char*)"\342\211\252", 35, 37}, /* ≪ */ -{5863589, (unsigned char*)"\74", -1, -1}, /* < */ -{5863618, (unsigned char*)"\342\210\223", 36, 40}, /* ∓ */ -{5863623, (unsigned char*)"\316\274", -1, -1}, /* μ */ -{5863640, (unsigned char*)"\342\211\240", 39, 41}, /* ≠ */ -{5863644, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ -{5863655, (unsigned char*)"\342\223\210", 38, 46}, /* Ⓢ */ -{5863656, (unsigned char*)"\316\275", -1, -1}, /* ν */ -{5863686, (unsigned char*)"\342\210\250", 43, 45}, /* ∨ */ -{5863710, (unsigned char*)"\317\200", -1, -1}, /* π */ -{5863714, (unsigned char*)"\302\261", 44, 48}, /* ± */ -{5863719, (unsigned char*)"\342\211\272", -1, -1}, /* ≺ */ -{5863791, (unsigned char*)"\342\204\236", 47, 49}, /* ℞ */ -{5863803, (unsigned char*)"\342\211\273", -1, -1}, /* ≻ */ -{5863948, (unsigned char*)"\342\204\230", 42, 58}, /* ℘ */ -{5863950, (unsigned char*)"\342\211\200", -1, -1}, /* ≀ */ -{5863974, (unsigned char*)"\316\276", 51, 53}, /* ξ */ -{9572911, (unsigned char*)"\342\246\225", -1, -1}, /* ⦕ */ -{9807607, (unsigned char*)"\342\245\270", 52, 56}, /* ⥸ */ -{9810777, (unsigned char*)"\342\213\227", -1, -1}, /* ⋗ */ -{9826907, (unsigned char*)"\342\211\263", 55, 57}, /* ≳ */ -{20607280, (unsigned char*)"\342\253\206", -1, -1}, /* ⫆ */ -{20616685, (unsigned char*)"\342\212\213", 54, 62}, /* ⊋ */ -{22422014, (unsigned char*)"\342\253\206\314\270", -1, -1}, /* ⫆̸ */ -{26105612, (unsigned char*)"\342\200\212", 59, 61}, /*   */ -{26239332, (unsigned char*)"\342\204\213", -1, -1}, /* ℋ */ -{26413280, (unsigned char*)"\321\212", 60, 64}, /* ъ */ -{28586989, (unsigned char*)"\342\211\211", -1, -1}, /* ≉ */ -{30561836, (unsigned char*)"\342\231\245", 63, 65}, /* ♥ */ -{30950243, (unsigned char*)"\342\200\246", -1, -1}, /* … */ -{31156260, (unsigned char*)"\342\212\271", 33, 99}, /* ⊹ */ -{31475919, (unsigned char*)"\342\244\217", -1, -1}, /* ⤏ */ -{33509884, (unsigned char*)"\342\231\256", 67, -1}, /* ♮ */ -{37287965, (unsigned char*)"\342\213\255", 68, 70}, /* ⋭ */ -{42854073, (unsigned char*)"\342\210\273", -1, -1}, /* ∻ */ -{43013923, (unsigned char*)"\342\200\225", 69, 73}, /* ― */ -{47541480, (unsigned char*)"\342\204\217", -1, -1}, /* ℏ */ -{47847360, (unsigned char*)"\304\247", 72, 74}, /* ħ */ -{54319189, (unsigned char*)"\342\201\203", -1, -1}, /* ⁃ */ -{54807921, (unsigned char*)"\342\200\220", 71, 79}, /* ‐ */ -{59944000, (unsigned char*)"\342\245\260", -1, -1}, /* ⥰ */ -{64038461, (unsigned char*)"\342\216\264", 76, 78}, /* ⎴ */ -{65028672, (unsigned char*)"\303\255", -1, -1}, /* í */ -{66296283, (unsigned char*)"\342\210\253", 77, 81}, /* ∫ */ -{68537958, (unsigned char*)"\342\211\267", -1, -1}, /* ≷ */ -{72661539, (unsigned char*)"\303\254", 80, 82}, /* ì */ -{74718411, (unsigned char*)"\342\250\214", -1, -1}, /* ⨌ */ -{74894658, (unsigned char*)"\342\247\234", 75, 91}, /* ⧜ */ -{80423799, (unsigned char*)"\342\204\205", -1, -1}, /* ℅ */ -{80858226, (unsigned char*)"\304\261", 84, 86}, /* ı */ -{81036352, (unsigned char*)"\342\212\272", -1, -1}, /* ⊺ */ -{84632832, (unsigned char*)"\302\277", 85, 89}, /* ¿ */ -{85198288, (unsigned char*)"\342\245\231", -1, -1}, /* ⥙ */ -{86583233, (unsigned char*)"\342\213\263", 88, 90}, /* ⋳ */ -{87766464, (unsigned char*)"\304\251", -1, -1}, /* ĩ */ -{97324795, (unsigned char*)"\342\251\230", 87, 95}, /* ⩘ */ -{98090803, (unsigned char*)"\342\200\241", -1, -1}, /* ‡ */ -{107934141, (unsigned char*)"\342\211\214", 92, 94}, /* ≌ */ -{113713274, (unsigned char*)"\342\237\247", -1, -1}, /* ⟧ */ -{115173945, (unsigned char*)"\342\251\267", 93, 97}, /* ⩷ */ -{118531391, (unsigned char*)"\342\206\275", -1, -1}, /* ↽ */ -{125578709, (unsigned char*)"\321\230", 96, 98}, /* ј */ -{143760584, (unsigned char*)"\317\260", -1, -1}, /* ϰ */ -{145074172, (unsigned char*)"\342\244\233", 83, 116}, /* ⤛ */ -{145724305, (unsigned char*)"\304\267", -1, -1}, /* ķ */ -{147916603, (unsigned char*)"\342\212\225", 100, -1}, /* ⊕ */ -{150936129, (unsigned char*)"\304\270", 101, 103}, /* ĸ */ -{151795502, (unsigned char*)"\342\246\261", -1, -1}, /* ⦱ */ -{165680359, (unsigned char*)"\342\213\253", 102, 106}, /* ⋫ */ -{167411619, (unsigned char*)"\342\206\227", -1, -1}, /* ↗ */ -{182434851, (unsigned char*)"\304\272", 105, 107}, /* ĺ */ -{182574714, (unsigned char*)"\342\204\222", -1, -1}, /* ℒ */ -{182772998, (unsigned char*)"\316\273", 104, 112}, /* λ */ -{182814648, (unsigned char*)"\342\237\250", -1, -1}, /* ⟨ */ -{182970191, (unsigned char*)"\342\244\235", 109, 111}, /* ⤝ */ -{182970249, (unsigned char*)"\342\206\251", -1, -1}, /* ↩ */ -{182970386, (unsigned char*)"\342\206\253", 110, 114}, /* ↫ */ -{182970514, (unsigned char*)"\342\244\271", -1, -1}, /* ⤹ */ -{182970646, (unsigned char*)"\342\206\242", 113, 115}, /* ↢ */ -{183023644, (unsigned char*)"\342\244\231", -1, -1}, /* ⤙ */ -{184137486, (unsigned char*)"\173", 108, 124}, /* { */ -{184137492, (unsigned char*)"\133", -1, -1}, /* [ */ -{184731396, (unsigned char*)"\304\276", 117, 119}, /* ľ */ -{184859698, (unsigned char*)"\304\274", -1, -1}, /* ļ */ -{186495580, (unsigned char*)"\342\200\236", 118, 122}, /* „ */ -{187734864, (unsigned char*)"\342\251\277", -1, -1}, /* ⩿ */ -{187737800, (unsigned char*)"\342\252\223", 121, 123}, /* ⪓ */ -{188577519, (unsigned char*)"\342\245\274", -1, -1}, /* ⥼ */ -{188681203, (unsigned char*)"\342\214\212", 120, 128}, /* ⌊ */ -{190661197, (unsigned char*)"\342\245\252", -1, -1}, /* ⥪ */ -{193450403, (unsigned char*)"\46", 125, 127}, /* & */ -{193451170, (unsigned char*)"\320\220", -1, -1}, /* А */ -{193451262, (unsigned char*)"\360\235\224\204", 126, 130}, /* 𝔄 */ -{193451512, (unsigned char*)"\342\251\223", -1, -1}, /* ⩓ */ -{193452259, (unsigned char*)"\320\221", 129, 131}, /* Б */ -{193452351, (unsigned char*)"\360\235\224\205", -1, -1}, /* 𝔅 */ -{193453273, (unsigned char*)"\342\213\222", 66, 199}, /* ⋒ */ -{193453440, (unsigned char*)"\342\204\255", -1, -1}, /* ℭ */ -{193453497, (unsigned char*)"\316\247", 133, -1}, /* Χ */ -{193453933, (unsigned char*)"\342\213\223", 134, 136}, /* ⋓ */ -{193454437, (unsigned char*)"\320\224", -1, -1}, /* Д */ -{193454490, (unsigned char*)"\342\210\207", 135, 139}, /* ∇ */ -{193454529, (unsigned char*)"\360\235\224\207", -1, -1}, /* 𝔇 */ -{193454783, (unsigned char*)"\305\212", 138, 140}, /* Ŋ */ -{193454828, (unsigned char*)"\302\250", -1, -1}, /* ¨ */ -{193454982, (unsigned char*)"\303\220", 137, 145}, /* Ð */ -{193455526, (unsigned char*)"\320\255", -1, -1}, /* Э */ -{193455618, (unsigned char*)"\360\235\224\210", 142, 144}, /* 𝔈 */ -{193456063, (unsigned char*)"\316\227", -1, -1}, /* Η */ -{193456615, (unsigned char*)"\320\244", 143, 147}, /* Ф */ -{193456707, (unsigned char*)"\360\235\224\211", -1, -1}, /* 𝔉 */ -{193457704, (unsigned char*)"\320\223", 146, 148}, /* Г */ -{193457796, (unsigned char*)"\360\235\224\212", -1, -1}, /* 𝔊 */ -{193458722, (unsigned char*)"\136", 141, 158}, /* ^ */ -{193458885, (unsigned char*)"\342\204\214", -1, -1}, /* ℌ */ -{193459882, (unsigned char*)"\320\230", 150, -1}, /* И */ -{193459974, (unsigned char*)"\342\204\221", 151, 153}, /* ℑ */ -{193460240, (unsigned char*)"\342\210\254", -1, -1}, /* ∬ */ -{193460971, (unsigned char*)"\320\231", 152, 156}, /* Й */ -{193461063, (unsigned char*)"\360\235\224\215", -1, -1}, /* 𝔍 */ -{193462060, (unsigned char*)"\320\232", 155, 157}, /* К */ -{193462152, (unsigned char*)"\360\235\224\216", -1, -1}, /* 𝔎 */ -{193463149, (unsigned char*)"\320\233", 154, 162}, /* Л */ -{193463241, (unsigned char*)"\360\235\224\217", -1, -1}, /* 𝔏 */ -{193463660, (unsigned char*)"\342\206\260", 159, 161}, /* ↰ */ -{193464163, (unsigned char*)"\342\244\205", -1, -1}, /* ⤅ */ -{193464238, (unsigned char*)"\320\234", 160, 164}, /* М */ -{193464330, (unsigned char*)"\360\235\224\220", -1, -1}, /* 𝔐 */ -{193465327, (unsigned char*)"\320\235", 163, 165}, /* Н */ -{193465419, (unsigned char*)"\360\235\224\221", -1, -1}, /* 𝔑 */ -{193465718, (unsigned char*)"\342\253\254", 149, 183}, /* ⫬ */ -{193466416, (unsigned char*)"\320\236", -1, -1}, /* О */ -{193466508, (unsigned char*)"\360\235\224\222", 167, -1}, /* 𝔒 */ -{193467505, (unsigned char*)"\320\237", 168, 170}, /* П */ -{193467597, (unsigned char*)"\360\235\224\223", -1, -1}, /* 𝔓 */ -{193467654, (unsigned char*)"\316\246", 169, 173}, /* Φ */ -{193468017, (unsigned char*)"\316\250", -1, -1}, /* Ψ */ -{193468643, (unsigned char*)"\302\256", 172, 174}, /* ® */ -{193468686, (unsigned char*)"\360\235\224\224", -1, -1}, /* 𝔔 */ -{193469683, (unsigned char*)"\320\240", 171, 179}, /* Р */ -{193469775, (unsigned char*)"\342\204\234", -1, -1}, /* ℜ */ -{193469838, (unsigned char*)"\316\241", 176, 178}, /* Ρ */ -{193470194, (unsigned char*)"\342\206\261", -1, -1}, /* ↱ */ -{193470772, (unsigned char*)"\320\241", 177, 181}, /* С */ -{193470864, (unsigned char*)"\360\235\224\226", -1, -1}, /* 𝔖 */ -{193471343, (unsigned char*)"\342\213\220", 180, 182}, /* ⋐ */ -{193471354, (unsigned char*)"\342\210\221", -1, -1}, /* ∑ */ -{193471357, (unsigned char*)"\342\213\221", 175, 191}, /* ⋑ */ -{193471772, (unsigned char*)"\11", -1, -1}, /* */ -{193471791, (unsigned char*)"\316\244", 184, 186}, /* Τ */ -{193471861, (unsigned char*)"\320\242", -1, -1}, /* Т */ -{193471953, (unsigned char*)"\360\235\224\227", 185, 189}, /* 𝔗 */ -{193472950, (unsigned char*)"\320\243", -1, -1}, /* У */ -{193473042, (unsigned char*)"\360\235\224\230", 188, 190}, /* 𝔘 */ -{193474039, (unsigned char*)"\320\222", -1, -1}, /* В */ -{193474085, (unsigned char*)"\342\213\201", 187, 195}, /* ⋁ */ -{193474131, (unsigned char*)"\360\235\224\231", -1, -1}, /* 𝔙 */ -{193475220, (unsigned char*)"\360\235\224\232", 192, 194}, /* 𝔚 */ -{193476309, (unsigned char*)"\360\235\224\233", -1, -1}, /* 𝔛 */ -{193477306, (unsigned char*)"\320\253", 193, 197}, /* Ы */ -{193477398, (unsigned char*)"\360\235\224\234", -1, -1}, /* 𝔜 */ -{193478395, (unsigned char*)"\320\227", 196, 198}, /* З */ -{193478487, (unsigned char*)"\342\204\250", -1, -1}, /* ℨ */ -{193485966, (unsigned char*)"\342\210\276\314\263", 166, 232}, /* ∾̳ */ -{193485997, (unsigned char*)"\342\210\277", -1, -1}, /* ∿ */ -{193486018, (unsigned char*)"\320\260", 200, -1}, /* а */ -{193486110, (unsigned char*)"\360\235\224\236", 201, 203}, /* 𝔞 */ -{193486339, (unsigned char*)"\46", -1, -1}, /* & */ -{193486360, (unsigned char*)"\342\210\247", 202, 206}, /* ∧ */ -{193486363, (unsigned char*)"\342\210\240", -1, -1}, /* ∠ */ -{193486395, (unsigned char*)"\342\251\260", 205, 207}, /* ⩰ */ -{193486427, (unsigned char*)"\342\211\212", -1, -1}, /* ≊ */ -{193486541, (unsigned char*)"\52", 204, 212}, /* * */ -{193487107, (unsigned char*)"\320\261", -1, -1}, /* б */ -{193487199, (unsigned char*)"\360\235\224\237", 209, 211}, /* 𝔟 */ -{193487450, (unsigned char*)"\75\342\203\245", -1, -1}, /* =⃥ */ -{193487498, (unsigned char*)"\342\212\245", 210, 214}, /* ⊥ */ -{193488121, (unsigned char*)"\342\210\251", -1, -1}, /* ∩ */ -{193488288, (unsigned char*)"\360\235\224\240", 213, 215}, /* 𝔠 */ -{193488345, (unsigned char*)"\317\207", -1, -1}, /* χ */ -{193488387, (unsigned char*)"\342\227\213", 208, 224}, /* ○ */ -{193488781, (unsigned char*)"\342\210\252", -1, -1}, /* ∪ */ -{193489285, (unsigned char*)"\320\264", 217, 219}, /* д */ -{193489333, (unsigned char*)"\302\260", -1, -1}, /* ° */ -{193489377, (unsigned char*)"\360\235\224\241", 218, 222}, /* 𝔡 */ -{193489463, (unsigned char*)"\302\250", -1, -1}, /* ¨ */ -{193489480, (unsigned char*)"\303\267", 221, 223}, /* ÷ */ -{193489676, (unsigned char*)"\313\231", -1, -1}, /* ˙ */ -{193490374, (unsigned char*)"\321\215", 220, 228}, /* э */ -{193490466, (unsigned char*)"\360\235\224\242", -1, -1}, /* 𝔢 */ -{193490500, (unsigned char*)"\342\252\226", 225, 227}, /* ⪖ */ -{193490658, (unsigned char*)"\342\204\223", -1, -1}, /* ℓ */ -{193490665, (unsigned char*)"\342\252\225", 226, 230}, /* ⪕ */ -{193490719, (unsigned char*)"\305\213", -1, -1}, /* ŋ */ -{193490911, (unsigned char*)"\316\267", 229, 231}, /* η */ -{193490918, (unsigned char*)"\303\260", -1, -1}, /* ð */ -{193491463, (unsigned char*)"\321\204", 216, 249}, /* ф */ -{193491549, (unsigned char*)"\342\252\214", -1, -1}, /* ⪌ */ -{193491555, (unsigned char*)"\360\235\224\243", 233, -1}, /* 𝔣 */ -{193492477, (unsigned char*)"\342\252\206", 234, 236}, /* ⪆ */ -{193492552, (unsigned char*)"\320\263", -1, -1}, /* г */ -{193492605, (unsigned char*)"\342\213\233", 235, 239}, /* ⋛ */ -{193492610, (unsigned char*)"\342\211\245", -1, -1}, /* ≥ */ -{193492612, (unsigned char*)"\342\251\276", 238, 240}, /* ⩾ */ -{193492644, (unsigned char*)"\360\235\224\244", -1, -1}, /* 𝔤 */ -{193492666, (unsigned char*)"\342\213\231", 237, 245}, /* ⋙ */ -{193492797, (unsigned char*)"\342\252\222", -1, -1}, /* ⪒ */ -{193492825, (unsigned char*)"\342\252\245", 242, 244}, /* ⪥ */ -{193492834, (unsigned char*)"\342\252\244", -1, -1}, /* ⪤ */ -{193492863, (unsigned char*)"\342\211\251", 243, 247}, /* ≩ */ -{193492895, (unsigned char*)"\342\252\210", -1, -1}, /* ⪈ */ -{193493733, (unsigned char*)"\360\235\224\245", 246, 248}, /* 𝔥 */ -{193494730, (unsigned char*)"\320\270", -1, -1}, /* и */ -{193494810, (unsigned char*)"\342\207\224", 241, 257}, /* ⇔ */ -{193494822, (unsigned char*)"\360\235\224\246", -1, -1}, /* 𝔦 */ -{193495088, (unsigned char*)"\342\210\253", 250, 252}, /* ∫ */ -{193495819, (unsigned char*)"\320\271", -1, -1}, /* й */ -{193495911, (unsigned char*)"\360\235\224\247", 251, 255}, /* 𝔧 */ -{193496908, (unsigned char*)"\320\272", -1, -1}, /* к */ -{193496989, (unsigned char*)"\342\252\213", 254, 256}, /* ⪋ */ -{193497000, (unsigned char*)"\360\235\224\250", -1, -1}, /* 𝔨 */ -{193497922, (unsigned char*)"\342\252\205", 253, 261}, /* ⪅ */ -{193497926, (unsigned char*)"\342\252\253", -1, -1}, /* ⪫ */ -{193497997, (unsigned char*)"\320\273", 258, 260}, /* л */ -{193498045, (unsigned char*)"\342\213\232", -1, -1}, /* ⋚ */ -{193498055, (unsigned char*)"\342\211\244", 259, 263}, /* ≤ */ -{193498057, (unsigned char*)"\342\251\275", -1, -1}, /* ⩽ */ -{193498077, (unsigned char*)"\342\252\221", 262, 264}, /* ⪑ */ -{193498089, (unsigned char*)"\360\235\224\251", -1, -1}, /* 𝔩 */ -{193498308, (unsigned char*)"\342\211\250", 132, 398}, /* ≨ */ -{193498340, (unsigned char*)"\342\252\207", -1, -1}, /* ⪇ */ -{193498394, (unsigned char*)"\342\227\212", 266, -1}, /* ◊ */ -{193498480, (unsigned char*)"\342\200\216", 267, 269}, /* ‎ */ -{193498508, (unsigned char*)"\342\206\260", -1, -1}, /* ↰ */ -{193499011, (unsigned char*)"\342\206\246", 268, 272}, /* ↦ */ -{193499086, (unsigned char*)"\320\274", -1, -1}, /* м */ -{193499178, (unsigned char*)"\360\235\224\252", 271, 273}, /* 𝔪 */ -{193499233, (unsigned char*)"\342\213\231\314\270", -1, -1}, /* ⋙̸ */ -{193499241, (unsigned char*)"\342\204\247", 270, 278}, /* ℧ */ -{193499246, (unsigned char*)"\342\211\253\342\203\222", -1, -1}, /* ≫⃒ */ -{193499263, (unsigned char*)"\342\210\243", 275, 277}, /* ∣ */ -{193499403, (unsigned char*)"\342\213\230\314\270", -1, -1}, /* ⋘̸ */ -{193499411, (unsigned char*)"\342\211\252\342\203\222", 276, 280}, /* ≪⃒ */ -{193500100, (unsigned char*)"\342\211\211", -1, -1}, /* ≉ */ -{193500175, (unsigned char*)"\320\275", 279, 281}, /* н */ -{193500255, (unsigned char*)"\342\211\247\314\270", -1, -1}, /* ≧̸ */ -{193500267, (unsigned char*)"\360\235\224\253", 274, 291}, /* 𝔫 */ -{193500287, (unsigned char*)"\342\211\261", -1, -1}, /* ≱ */ -{193500302, (unsigned char*)"\342\211\257", 283, -1}, /* ≯ */ -{193500367, (unsigned char*)"\342\213\274", 284, 286}, /* ⋼ */ -{193500370, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ -{193500420, (unsigned char*)"\342\211\246\314\270", 285, 289}, /* ≦̸ */ -{193500452, (unsigned char*)"\342\211\260", -1, -1}, /* ≰ */ -{193500467, (unsigned char*)"\342\211\256", 288, 290}, /* ≮ */ -{193500566, (unsigned char*)"\302\254", -1, -1}, /* ¬ */ -{193500597, (unsigned char*)"\342\212\200", 287, 295}, /* ⊀ */ -{193500681, (unsigned char*)"\342\212\201", -1, -1}, /* ⊁ */ -{193500757, (unsigned char*)"\43", 292, 294}, /* # */ -{193501264, (unsigned char*)"\320\276", -1, -1}, /* о */ -{193501356, (unsigned char*)"\360\235\224\254", 293, 297}, /* 𝔬 */ -{193501391, (unsigned char*)"\342\247\201", -1, -1}, /* ⧁ */ -{193501417, (unsigned char*)"\316\251", 296, 298}, /* Ω */ -{193501556, (unsigned char*)"\342\247\200", -1, -1}, /* ⧀ */ -{193501738, (unsigned char*)"\342\251\235", 282, 316}, /* ⩝ */ -{193501756, (unsigned char*)"\342\251\233", -1, -1}, /* ⩛ */ -{193502280, (unsigned char*)"\342\210\245", 300, -1}, /* ∥ */ -{193502353, (unsigned char*)"\320\277", 301, 303}, /* п */ -{193502445, (unsigned char*)"\360\235\224\255", -1, -1}, /* 𝔭 */ -{193502502, (unsigned char*)"\317\206", 302, 306}, /* φ */ -{193502548, (unsigned char*)"\317\226", -1, -1}, /* ϖ */ -{193502796, (unsigned char*)"\342\252\263", 305, 307}, /* ⪳ */ -{193502828, (unsigned char*)"\342\252\257", -1, -1}, /* ⪯ */ -{193502865, (unsigned char*)"\317\210", 304, 312}, /* ψ */ -{193503534, (unsigned char*)"\360\235\224\256", -1, -1}, /* 𝔮 */ -{193504531, (unsigned char*)"\321\200", 309, 311}, /* р */ -{193504579, (unsigned char*)"\302\256", -1, -1}, /* ® */ -{193504623, (unsigned char*)"\360\235\224\257", 310, 314}, /* 𝔯 */ -{193504686, (unsigned char*)"\317\201", -1, -1}, /* ρ */ -{193504816, (unsigned char*)"\342\200\217", 313, 315}, /* ‏ */ -{193505042, (unsigned char*)"\342\206\261", -1, -1}, /* ↱ */ -{193505568, (unsigned char*)"\342\252\264", 308, 324}, /* ⪴ */ -{193505600, (unsigned char*)"\342\252\260", -1, -1}, /* ⪰ */ -{193505620, (unsigned char*)"\321\201", 317, 319}, /* с */ -{193505712, (unsigned char*)"\360\235\224\260", -1, -1}, /* 𝔰 */ -{193505785, (unsigned char*)"\302\255", 318, 322}, /* ­ */ -{193505806, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ -{193505945, (unsigned char*)"\342\252\252", 321, 323}, /* ⪪ */ -{193506003, (unsigned char*)"\57", -1, -1}, /* / */ -{193506078, (unsigned char*)"\342\226\241", 320, 328}, /* □ */ -{193506191, (unsigned char*)"\342\212\202", -1, -1}, /* ⊂ */ -{193506202, (unsigned char*)"\342\210\221", 325, 327}, /* ∑ */ -{193506205, (unsigned char*)"\342\212\203", -1, -1}, /* ⊃ */ -{193506639, (unsigned char*)"\317\204", 326, 330}, /* τ */ -{193506709, (unsigned char*)"\321\202", -1, -1}, /* т */ -{193506801, (unsigned char*)"\360\235\224\261", 329, 331}, /* 𝔱 */ -{193507096, (unsigned char*)"\342\212\244", -1, -1}, /* ⊤ */ -{193507798, (unsigned char*)"\321\203", 299, 365}, /* у */ -{193507890, (unsigned char*)"\360\235\224\262", -1, -1}, /* 𝔲 */ -{193508115, (unsigned char*)"\302\250", 333, -1}, /* ¨ */ -{193508887, (unsigned char*)"\320\262", 334, 336}, /* в */ -{193508933, (unsigned char*)"\342\210\250", -1, -1}, /* ∨ */ -{193508979, (unsigned char*)"\360\235\224\263", 335, 339}, /* 𝔳 */ -{193510068, (unsigned char*)"\360\235\224\264", -1, -1}, /* 𝔴 */ -{193511157, (unsigned char*)"\360\235\224\265", 338, 340}, /* 𝔵 */ -{193512154, (unsigned char*)"\321\213", -1, -1}, /* ы */ -{193512209, (unsigned char*)"\302\245", 337, 345}, /* ¥ */ -{193512246, (unsigned char*)"\360\235\224\266", -1, -1}, /* 𝔶 */ -{193513243, (unsigned char*)"\320\267", 342, 344}, /* з */ -{193513335, (unsigned char*)"\360\235\224\267", -1, -1}, /* 𝔷 */ -{193513888, (unsigned char*)"\342\200\215", 343, 347}, /* ‍ */ -{194365619, (unsigned char*)"\342\210\204", -1, -1}, /* ∄ */ -{195637820, (unsigned char*)"\342\245\253", 346, 348}, /* ⥫ */ -{196862862, (unsigned char*)"\305\200", -1, -1}, /* ŀ */ -{197097129, (unsigned char*)"\342\216\260", 341, 357}, /* ⎰ */ -{199495172, (unsigned char*)"\342\250\255", -1, -1}, /* ⨭ */ -{199734687, (unsigned char*)"\342\210\227", 350, 352}, /* ∗ */ -{199735180, (unsigned char*)"\137", -1, -1}, /* _ */ -{200148276, (unsigned char*)"\342\246\223", 351, 355}, /* ⦓ */ -{202753346, (unsigned char*)"\342\245\255", -1, -1}, /* ⥭ */ -{203705242, (unsigned char*)"\342\200\271", 354, 356}, /* ‹ */ -{204284395, (unsigned char*)"\342\200\232", -1, -1}, /* ‚ */ -{204388932, (unsigned char*)"\305\202", 353, 361}, /* ł */ -{205058880, (unsigned char*)"\342\211\204", -1, -1}, /* ≄ */ -{205143273, (unsigned char*)"\342\213\213", 358, 360}, /* ⋋ */ -{205173779, (unsigned char*)"\342\213\211", -1, -1}, /* ⋉ */ -{205268950, (unsigned char*)"\342\245\266", 359, 363}, /* ⥶ */ -{205465498, (unsigned char*)"\342\246\226", -1, -1}, /* ⦖ */ -{207854529, (unsigned char*)"\342\246\250", 362, 364}, /* ⦨ */ -{207854530, (unsigned char*)"\342\246\251", -1, -1}, /* ⦩ */ -{207854531, (unsigned char*)"\342\246\252", 349, 382}, /* ⦪ */ -{207854532, (unsigned char*)"\342\246\253", -1, -1}, /* ⦫ */ -{207854533, (unsigned char*)"\342\246\254", 366, -1}, /* ⦬ */ -{207854534, (unsigned char*)"\342\246\255", 367, 369}, /* ⦭ */ -{207854535, (unsigned char*)"\342\246\256", -1, -1}, /* ⦮ */ -{207854536, (unsigned char*)"\342\246\257", 368, 372}, /* ⦯ */ -{213837927, (unsigned char*)"\303\206", -1, -1}, /* Æ */ -{213839709, (unsigned char*)"\342\246\235", 371, 373}, /* ⦝ */ -{214913063, (unsigned char*)"\303\202", -1, -1}, /*  */ -{215243787, (unsigned char*)"\316\221", 370, 378}, /* Α */ -{215263241, (unsigned char*)"\304\200", -1, -1}, /* Ā */ -{215342041, (unsigned char*)"\304\204", 375, 377}, /* Ą */ -{215451990, (unsigned char*)"\303\205", -1, -1}, /* Å */ -{216633817, (unsigned char*)"\313\230", 376, 380}, /* ˘ */ -{217284905, (unsigned char*)"\304\210", -1, -1}, /* Ĉ */ -{217719328, (unsigned char*)"\342\210\267", 379, 381}, /* ∷ */ -{217830543, (unsigned char*)"\342\250\257", -1, -1}, /* ⨯ */ -{218409531, (unsigned char*)"\342\253\244", 374, 390}, /* ⫤ */ -{218546031, (unsigned char*)"\316\224", -1, -1}, /* Δ */ -{219656747, (unsigned char*)"\303\212", 383, 385}, /* Ê */ -{220006925, (unsigned char*)"\304\222", -1, -1}, /* Ē */ -{220085725, (unsigned char*)"\304\230", 384, 388}, /* Ę */ -{220172381, (unsigned char*)"\342\251\265", -1, -1}, /* ⩵ */ -{221960904, (unsigned char*)"\316\223", 387, 389}, /* Γ */ -{222028589, (unsigned char*)"\304\234", -1, -1}, /* Ĝ */ -{222035257, (unsigned char*)"\342\206\246", 386, 394}, /* ↦ */ -{222097927, (unsigned char*)"\342\226\256", -1, -1}, /* ▮ */ -{222550490, (unsigned char*)"\342\211\211", 391, 393}, /* ≉ */ -{223135681, (unsigned char*)"\313\207", -1, -1}, /* ˇ */ -{223214510, (unsigned char*)"\304\244", 392, 396}, /* Ĥ */ -{223504980, (unsigned char*)"\304\262", -1, -1}, /* IJ */ -{224364383, (unsigned char*)"\342\250\251", 395, 397}, /* ⨩ */ -{224400431, (unsigned char*)"\303\216", -1, -1}, /* Î */ -{224750609, (unsigned char*)"\304\252", 332, 465}, /* Ī */ -{224829409, (unsigned char*)"\304\256", -1, -1}, /* Į */ -{225049002, (unsigned char*)"\320\206", 399, -1}, /* І */ -{225586352, (unsigned char*)"\304\264", 400, 402}, /* Ĵ */ -{226162576, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ -{226234923, (unsigned char*)"\320\204", 401, 405}, /* Є */ -{226707954, (unsigned char*)"\316\232", -1, -1}, /* Κ */ -{230440821, (unsigned char*)"\305\222", 404, 406}, /* Œ */ -{231071751, (unsigned char*)"\52", -1, -1}, /* * */ -{231073597, (unsigned char*)"\342\253\260", 403, 411}, /* ⫰ */ -{231074886, (unsigned char*)"\302\267", -1, -1}, /* · */ -{231452883, (unsigned char*)"\342\212\237", 408, 410}, /* ⊟ */ -{231452885, (unsigned char*)"\342\210\270", -1, -1}, /* ∸ */ -{231515957, (unsigned char*)"\303\224", 409, 413}, /* Ô */ -{231866135, (unsigned char*)"\305\214", -1, -1}, /* Ō */ -{231870606, (unsigned char*)"\316\251", 412, 414}, /* Ω */ -{233240770, (unsigned char*)"\342\200\263", -1, -1}, /* ″ */ -{233879102, (unsigned char*)"\342\244\220", 407, 424}, /* ⤐ */ -{234590587, (unsigned char*)"\342\206\220", -1, -1}, /* ← */ -{236259641, (unsigned char*)"\305\234", 416, -1}, /* Ŝ */ -{236405321, (unsigned char*)"\342\206\232", 417, 419}, /* ↚ */ -{236445872, (unsigned char*)"\303\236", -1, -1}, /* Þ */ -{236472918, (unsigned char*)"\316\243", 418, 422}, /* Σ */ -{236789525, (unsigned char*)"\342\204\242", -1, -1}, /* ™ */ -{236834160, (unsigned char*)"\320\213", 421, 423}, /* Ћ */ -{237444644, (unsigned char*)"\342\210\223", -1, -1}, /* ∓ */ -{237620955, (unsigned char*)"\316\230", 420, 428}, /* Θ */ -{237663991, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ -{238191401, (unsigned char*)"\342\212\247", 425, 427}, /* ⊧ */ -{238604874, (unsigned char*)"\320\216", -1, -1}, /* Ў */ -{238631483, (unsigned char*)"\303\233", 426, 430}, /* Û */ -{238694683, (unsigned char*)"\342\212\253", -1, -1}, /* ⊫ */ -{238981661, (unsigned char*)"\305\252", 429, 431}, /* Ū */ -{239026702, (unsigned char*)"\342\213\203", -1, -1}, /* ⋃ */ -{239060461, (unsigned char*)"\305\262", 415, 449}, /* Ų */ -{239075368, (unsigned char*)"\342\212\245", -1, -1}, /* ⊥ */ -{239170410, (unsigned char*)"\305\256", 433, -1}, /* Ů */ -{239844667, (unsigned char*)"\342\212\251", 434, 436}, /* ⊩ */ -{241003325, (unsigned char*)"\305\264", -1, -1}, /* Ŵ */ -{241069393, (unsigned char*)"\342\213\200", 435, 439}, /* ⋀ */ -{243375167, (unsigned char*)"\305\266", -1, -1}, /* Ŷ */ -{243522155, (unsigned char*)"\342\210\276", 438, 440}, /* ∾ */ -{246524649, (unsigned char*)"\342\212\257", -1, -1}, /* ⊯ */ -{247674633, (unsigned char*)"\342\212\256", 437, 445}, /* ⊮ */ -{252862535, (unsigned char*)"\303\242", -1, -1}, /* â */ -{252875671, (unsigned char*)"\302\264", 442, 444}, /* ´ */ -{252937383, (unsigned char*)"\303\246", -1, -1}, /* æ */ -{253181551, (unsigned char*)"\342\204\265", 443, 447}, /* ℵ */ -{253193259, (unsigned char*)"\316\261", -1, -1}, /* α */ -{253212713, (unsigned char*)"\304\201", 446, 448}, /* ā */ -{253212999, (unsigned char*)"\342\250\277", -1, -1}, /* ⨿ */ -{253255468, (unsigned char*)"\342\210\240", 441, 457}, /* ∠ */ -{253255681, (unsigned char*)"\342\210\237", -1, -1}, /* ∟ */ -{253255714, (unsigned char*)"\303\205", 450, 452}, /* Å */ -{253291513, (unsigned char*)"\304\205", -1, -1}, /* ą */ -{253401462, (unsigned char*)"\303\245", 451, 455}, /* å */ -{253454799, (unsigned char*)"\342\211\210", -1, -1}, /* ≈ */ -{253581160, (unsigned char*)"\342\250\221", 454, 456}, /* ⨑ */ -{254054862, (unsigned char*)"\342\211\214", -1, -1}, /* ≌ */ -{254093216, (unsigned char*)"\342\200\236", 453, 461}, /* „ */ -{254127992, (unsigned char*)"\317\266", -1, -1}, /* ϶ */ -{254363053, (unsigned char*)"\342\220\243", 458, 460}, /* ␣ */ -{254371873, (unsigned char*)"\342\226\222", -1, -1}, /* ▒ */ -{254371875, (unsigned char*)"\342\226\221", 459, 463}, /* ░ */ -{254371941, (unsigned char*)"\342\226\223", -1, -1}, /* ▓ */ -{254377936, (unsigned char*)"\342\226\210", 462, 464}, /* █ */ -{254494494, (unsigned char*)"\342\225\227", -1, -1}, /* ╗ */ -{254494500, (unsigned char*)"\342\225\224", 432, 498}, /* ╔ */ -{254494526, (unsigned char*)"\342\225\226", -1, -1}, /* ╖ */ -{254494532, (unsigned char*)"\342\225\223", 466, -1}, /* ╓ */ -{254494618, (unsigned char*)"\342\225\246", 467, 469}, /* ╦ */ -{254494635, (unsigned char*)"\342\225\251", -1, -1}, /* ╩ */ -{254494650, (unsigned char*)"\342\225\244", 468, 472}, /* ╤ */ -{254494667, (unsigned char*)"\342\225\247", -1, -1}, /* ╧ */ -{254495055, (unsigned char*)"\342\225\235", 471, 473}, /* ╝ */ -{254495061, (unsigned char*)"\342\225\232", -1, -1}, /* ╚ */ -{254495084, (unsigned char*)"\342\225\254", 470, 478}, /* ╬ */ -{254495087, (unsigned char*)"\342\225\234", -1, -1}, /* ╜ */ -{254495088, (unsigned char*)"\342\225\243", 475, 477}, /* ╣ */ -{254495093, (unsigned char*)"\342\225\231", -1, -1}, /* ╙ */ -{254495094, (unsigned char*)"\342\225\240", 476, 480}, /* ╠ */ -{254495116, (unsigned char*)"\342\225\253", -1, -1}, /* ╫ */ -{254495120, (unsigned char*)"\342\225\242", 479, 481}, /* ╢ */ -{254495126, (unsigned char*)"\342\225\237", -1, -1}, /* ╟ */ -{254495550, (unsigned char*)"\342\225\225", 474, 490}, /* ╕ */ -{254495556, (unsigned char*)"\342\225\222", -1, -1}, /* ╒ */ -{254495582, (unsigned char*)"\342\224\220", 483, 485}, /* ┐ */ -{254495588, (unsigned char*)"\342\224\214", -1, -1}, /* ┌ */ -{254495674, (unsigned char*)"\342\225\245", 484, 488}, /* ╥ */ -{254495691, (unsigned char*)"\342\225\250", -1, -1}, /* ╨ */ -{254495706, (unsigned char*)"\342\224\254", 487, 489}, /* ┬ */ -{254495723, (unsigned char*)"\342\224\264", -1, -1}, /* ┴ */ -{254496111, (unsigned char*)"\342\225\233", 486, 494}, /* ╛ */ -{254496117, (unsigned char*)"\342\225\230", -1, -1}, /* ╘ */ -{254496140, (unsigned char*)"\342\225\252", 491, 493}, /* ╪ */ -{254496143, (unsigned char*)"\342\224\230", -1, -1}, /* ┘ */ -{254496144, (unsigned char*)"\342\225\241", 492, 496}, /* ╡ */ -{254496149, (unsigned char*)"\342\224\224", -1, -1}, /* └ */ -{254496150, (unsigned char*)"\342\225\236", 495, 497}, /* ╞ */ -{254496172, (unsigned char*)"\342\224\274", -1, -1}, /* ┼ */ -{254496176, (unsigned char*)"\342\224\244", 482, 515}, /* ┤ */ -{254496182, (unsigned char*)"\342\224\234", -1, -1}, /* ├ */ -{254583289, (unsigned char*)"\313\230", 499, -1}, /* ˘ */ -{254618933, (unsigned char*)"\342\201\217", 500, 502}, /* ⁏ */ -{254623285, (unsigned char*)"\342\213\215", -1, -1}, /* ⋍ */ -{254629783, (unsigned char*)"\342\247\205", 501, 505}, /* ⧅ */ -{254687260, (unsigned char*)"\342\210\214", -1, -1}, /* ∌ */ -{254699582, (unsigned char*)"\342\252\256", 504, 506}, /* ⪮ */ -{254699614, (unsigned char*)"\342\211\217", -1, -1}, /* ≏ */ -{255171892, (unsigned char*)"\342\201\201", 503, 511}, /* ⁁ */ -{255172216, (unsigned char*)"\313\207", -1, -1}, /* ˇ */ -{255225615, (unsigned char*)"\342\251\215", 508, 510}, /* ⩍ */ -{255234377, (unsigned char*)"\304\211", -1, -1}, /* ĉ */ -{255247395, (unsigned char*)"\342\251\214", 509, 513}, /* ⩌ */ -{255300518, (unsigned char*)"\302\270", -1, -1}, /* ¸ */ -{255409219, (unsigned char*)"\342\234\223", 512, 514}, /* ✓ */ -{255570366, (unsigned char*)"\342\231\243", -1, -1}, /* ♣ */ -{255668800, (unsigned char*)"\72", 507, 523}, /* : */ -{255669810, (unsigned char*)"\54", -1, -1}, /* , */ -{255764735, (unsigned char*)"\342\206\265", 516, 518}, /* ↵ */ -{255780015, (unsigned char*)"\342\234\227", -1, -1}, /* ✗ */ -{255821911, (unsigned char*)"\342\253\221", 517, 521}, /* ⫑ */ -{255822373, (unsigned char*)"\342\253\222", -1, -1}, /* ⫒ */ -{255839779, (unsigned char*)"\342\213\257", 520, 522}, /* ⋯ */ -{255876836, (unsigned char*)"\342\213\236", -1, -1}, /* ⋞ */ -{255876920, (unsigned char*)"\342\213\237", 519, 527}, /* ⋟ */ -{255888782, (unsigned char*)"\342\251\205", -1, -1}, /* ⩅ */ -{255894973, (unsigned char*)"\342\213\216", 524, 526}, /* ⋎ */ -{255896061, (unsigned char*)"\342\213\217", -1, -1}, /* ⋏ */ -{255953002, (unsigned char*)"\342\210\261", 525, 529}, /* ∱ */ -{256359003, (unsigned char*)"\342\212\243", -1, -1}, /* ⊣ */ -{256387067, (unsigned char*)"\313\235", 528, 530}, /* ˝ */ -{256447538, (unsigned char*)"\342\207\212", -1, -1}, /* ⇊ */ -{256451797, (unsigned char*)"\342\251\267", 265, 797}, /* ⩷ */ -{256495503, (unsigned char*)"\316\264", -1, -1}, /* δ */ -{256589813, (unsigned char*)"\342\210\223", 532, -1}, /* ∓ */ -{256591280, (unsigned char*)"\342\207\203", 533, 535}, /* ⇃ */ -{256591286, (unsigned char*)"\342\207\202", -1, -1}, /* ⇂ */ -{256627059, (unsigned char*)"\342\231\246", 534, 538}, /* ♦ */ -{256646524, (unsigned char*)"\342\213\262", -1, -1}, /* ⋲ */ -{256863106, (unsigned char*)"\342\211\220", 537, 539}, /* ≐ */ -{257025700, (unsigned char*)"\342\213\261", -1, -1}, /* ⋱ */ -{257040734, (unsigned char*)"\342\226\276", 536, 544}, /* ▾ */ -{257058467, (unsigned char*)"\342\207\265", -1, -1}, /* ⇵ */ -{257065529, (unsigned char*)"\342\245\257", 541, 543}, /* ⥯ */ -{257606219, (unsigned char*)"\303\252", -1, -1}, /* ê */ -{257673655, (unsigned char*)"\342\211\222", 542, 546}, /* ≒ */ -{257956397, (unsigned char*)"\304\223", -1, -1}, /* ē */ -{257973300, (unsigned char*)"\342\210\205", 545, 547}, /* ∅ */ -{258035197, (unsigned char*)"\304\231", -1, -1}, /* ę */ -{258076782, (unsigned char*)"\342\251\261", 540, 557}, /* ⩱ */ -{258084012, (unsigned char*)"\317\265", -1, -1}, /* ϵ */ -{258104899, (unsigned char*)"\342\211\223", 549, -1}, /* ≓ */ -{258119940, (unsigned char*)"\342\211\202", 550, 552}, /* ≂ */ -{258122127, (unsigned char*)"\342\211\241", -1, -1}, /* ≡ */ -{258136577, (unsigned char*)"\342\245\261", 551, 555}, /* ⥱ */ -{258175684, (unsigned char*)"\342\211\220", -1, -1}, /* ≐ */ -{258360946, (unsigned char*)"\342\210\203", 554, 556}, /* ∃ */ -{258902925, (unsigned char*)"\357\254\200", -1, -1}, /* ff */ -{259010736, (unsigned char*)"\357\254\201", 553, 561}, /* fi */ -{259046673, (unsigned char*)"\146\152", -1, -1}, /* fj */ -{259118547, (unsigned char*)"\357\254\202", 558, 560}, /* fl */ -{259127436, (unsigned char*)"\342\226\261", -1, -1}, /* ▱ */ -{259232973, (unsigned char*)"\342\253\231", 559, 563}, /* ⫙ */ -{259322525, (unsigned char*)"\342\201\204", -1, -1}, /* ⁄ */ -{259337905, (unsigned char*)"\342\214\242", 562, 564}, /* ⌢ */ -{259910376, (unsigned char*)"\316\263", -1, -1}, /* γ */ -{259978061, (unsigned char*)"\304\235", 548, 582}, /* ĝ */ -{260060330, (unsigned char*)"\342\252\251", -1, -1}, /* ⪩ */ -{260197619, (unsigned char*)"\342\204\267", 566, -1}, /* ℷ */ -{260368993, (unsigned char*)"\342\211\251", 567, 569}, /* ≩ */ -{260383971, (unsigned char*)"\342\213\247", -1, -1}, /* ⋧ */ -{260508538, (unsigned char*)"\140", 568, 572}, /* ` */ -{260552890, (unsigned char*)"\342\252\216", -1, -1}, /* ⪎ */ -{260552897, (unsigned char*)"\342\252\220", 571, 573}, /* ⪐ */ -{260582174, (unsigned char*)"\342\251\272", -1, -1}, /* ⩺ */ -{260583463, (unsigned char*)"\342\213\227", 570, 578}, /* ⋗ */ -{260705637, (unsigned char*)"\305\204", -1, -1}, /* ń */ -{261101929, (unsigned char*)"\342\206\255", 575, 577}, /* ↭ */ -{261163982, (unsigned char*)"\304\245", -1, -1}, /* ĥ */ -{261586529, (unsigned char*)"\342\207\277", 576, 580}, /* ⇿ */ -{262349903, (unsigned char*)"\303\256", -1, -1}, /* î */ -{262437626, (unsigned char*)"\302\241", 579, 581}, /* ¡ */ -{262529580, (unsigned char*)"\342\211\217\314\270", -1, -1}, /* ≏̸ */ -{262565410, (unsigned char*)"\342\210\255", 574, 590}, /* ∭ */ -{262572123, (unsigned char*)"\342\204\251", -1, -1}, /* ℩ */ -{262604436, (unsigned char*)"\304\263", 583, 585}, /* ij */ -{262700081, (unsigned char*)"\304\253", -1, -1}, /* ī */ -{262700200, (unsigned char*)"\342\204\221", 584, 588}, /* ℑ */ -{262700632, (unsigned char*)"\304\261", -1, -1}, /* ı */ -{262716468, (unsigned char*)"\306\265", 587, 589}, /* Ƶ */ -{262741657, (unsigned char*)"\342\210\236", -1, -1}, /* ∞ */ -{262778881, (unsigned char*)"\304\257", 586, 594}, /* į */ -{262826787, (unsigned char*)"\342\250\274", -1, -1}, /* ⨼ */ -{262924733, (unsigned char*)"\342\213\271", 591, 593}, /* ⋹ */ -{262924779, (unsigned char*)"\342\213\264", -1, -1}, /* ⋴ */ -{262924782, (unsigned char*)"\342\210\210", 592, 596}, /* ∈ */ -{262998474, (unsigned char*)"\321\226", -1, -1}, /* і */ -{263002182, (unsigned char*)"\305\210", 595, 597}, /* ň */ -{263130484, (unsigned char*)"\305\206", -1, -1}, /* ņ */ -{263535824, (unsigned char*)"\304\265", 565, 631}, /* ĵ */ -{263886553, (unsigned char*)"\310\267", -1, -1}, /* ȷ */ -{264184395, (unsigned char*)"\321\224", 599, -1}, /* є */ -{264657426, (unsigned char*)"\316\272", 600, 602}, /* κ */ -{264677111, (unsigned char*)"\342\207\232", -1, -1}, /* ⇚ */ -{264713048, (unsigned char*)"\342\244\216", 601, 605}, /* ⤎ */ -{265373790, (unsigned char*)"\342\244\244", -1, -1}, /* ⤤ */ -{265840875, (unsigned char*)"\342\246\221", 604, 606}, /* ⦑ */ -{265844615, (unsigned char*)"\302\253", -1, -1}, /* « */ -{265845592, (unsigned char*)"\342\207\244", 603, 611}, /* ⇤ */ -{265847358, (unsigned char*)"\342\252\255\357\270\200", -1, -1}, /* ⪭︀ */ -{265863032, (unsigned char*)"\342\244\214", 608, 610}, /* ⤌ */ -{265864114, (unsigned char*)"\342\235\262", -1, -1}, /* ❲ */ -{265881301, (unsigned char*)"\342\246\213", 609, 613}, /* ⦋ */ -{265903022, (unsigned char*)"\342\214\210", -1, -1}, /* ⌈ */ -{265939165, (unsigned char*)"\342\210\272", 612, 614}, /* ∺ */ -{265952093, (unsigned char*)"\342\211\242", -1, -1}, /* ≢ */ -{265952426, (unsigned char*)"\342\200\234", 607, 623}, /* “ */ -{265989935, (unsigned char*)"\342\252\250", -1, -1}, /* ⪨ */ -{266006275, (unsigned char*)"\342\244\250", 616, 618}, /* ⤨ */ -{266078640, (unsigned char*)"\342\206\275", -1, -1}, /* ↽ */ -{266078657, (unsigned char*)"\342\206\274", 617, 621}, /* ↼ */ -{266079538, (unsigned char*)"\342\226\204", -1, -1}, /* ▄ */ -{266190912, (unsigned char*)"\342\210\204", 620, 622}, /* ∄ */ -{266222402, (unsigned char*)"\342\207\207", -1, -1}, /* ⇇ */ -{266243084, (unsigned char*)"\342\227\272", 619, 627}, /* ◺ */ -{266298598, (unsigned char*)"\342\211\250", -1, -1}, /* ≨ */ -{266313576, (unsigned char*)"\342\213\246", 624, 626}, /* ⋦ */ -{266330070, (unsigned char*)"\342\237\254", -1, -1}, /* ⟬ */ -{266330213, (unsigned char*)"\342\207\275", 625, 629}, /* ⇽ */ -{266331295, (unsigned char*)"\342\237\246", -1, -1}, /* ⟦ */ -{266338700, (unsigned char*)"\342\252\206", 628, 630}, /* ⪆ */ -{266345987, (unsigned char*)"\342\246\205", -1, -1}, /* ⦅ */ -{266438024, (unsigned char*)"\342\207\206", 615, 648}, /* ⇆ */ -{266445086, (unsigned char*)"\342\207\213", -1, -1}, /* ⇋ */ -{266458706, (unsigned char*)"\342\212\277", 632, -1}, /* ⊿ */ -{266482495, (unsigned char*)"\342\252\215", 633, 635}, /* ⪍ */ -{266482497, (unsigned char*)"\342\252\217", -1, -1}, /* ⪏ */ -{266491481, (unsigned char*)"\342\200\230", 634, 638}, /* ‘ */ -{266511779, (unsigned char*)"\342\251\271", -1, -1}, /* ⩹ */ -{266513068, (unsigned char*)"\342\213\226", 637, 639}, /* ⋖ */ -{266528101, (unsigned char*)"\342\212\264", -1, -1}, /* ⊴ */ -{266528102, (unsigned char*)"\342\227\202", 636, 644}, /* ◂ */ -{267120850, (unsigned char*)"\342\200\224", -1, -1}, /* — */ -{267302687, (unsigned char*)"\302\265", 641, 643}, /* µ */ -{267314769, (unsigned char*)"\342\210\222", -1, -1}, /* − */ -{267744261, (unsigned char*)"\342\212\270", 642, 646}, /* ⊸ */ -{268199811, (unsigned char*)"\342\210\207", -1, -1}, /* ∇ */ -{268214961, (unsigned char*)"\342\211\213\314\270", 645, 647}, /* ≋̸ */ -{268215174, (unsigned char*)"\305\211", -1, -1}, /* ʼn */ -{268219727, (unsigned char*)"\342\231\256", 640, 656}, /* ♮ */ -{268256487, (unsigned char*)"\342\211\216\314\270", -1, -1}, /* ≎̸ */ -{268285914, (unsigned char*)"\342\211\207", 649, 651}, /* ≇ */ -{268306771, (unsigned char*)"\342\200\223", -1, -1}, /* – */ -{268307837, (unsigned char*)"\342\207\227", 650, 654}, /* ⇗ */ -{268342685, (unsigned char*)"\342\206\227", -1, -1}, /* ↗ */ -{268345855, (unsigned char*)"\342\211\220\314\270", 653, 655}, /* ≐̸ */ -{268361985, (unsigned char*)"\342\211\202\314\270", -1, -1}, /* ≂̸ */ -{268415648, (unsigned char*)"\342\207\216", 652, 660}, /* ⇎ */ -{268418881, (unsigned char*)"\342\211\247\314\270", -1, -1}, /* ≧̸ */ -{268433859, (unsigned char*)"\342\211\265", 657, 659}, /* ≵ */ -{268450496, (unsigned char*)"\342\206\256", -1, -1}, /* ↮ */ -{268466270, (unsigned char*)"\342\253\262", 658, 662}, /* ⫲ */ -{268559396, (unsigned char*)"\342\207\215", -1, -1}, /* ⇍ */ -{268594244, (unsigned char*)"\342\206\232", 661, 663}, /* ↚ */ -{268598566, (unsigned char*)"\342\211\246\314\270", -1, -1}, /* ≦̸ */ -{268598634, (unsigned char*)"\342\211\256", 598, 731}, /* ≮ */ -{268613544, (unsigned char*)"\342\211\264", -1, -1}, /* ≴ */ -{268614926, (unsigned char*)"\342\213\252", 665, -1}, /* ⋪ */ -{268722445, (unsigned char*)"\342\210\211", 666, 668}, /* ∉ */ -{268722605, (unsigned char*)"\342\210\214", -1, -1}, /* ∌ */ -{268737994, (unsigned char*)"\342\210\202\314\270", 667, 671}, /* ∂̸ */ -{268756061, (unsigned char*)"\342\212\200", -1, -1}, /* ⊀ */ -{268775018, (unsigned char*)"\342\207\217", 670, 672}, /* ⇏ */ -{268809866, (unsigned char*)"\342\206\233", -1, -1}, /* ↛ */ -{268830548, (unsigned char*)"\342\213\253", 669, 677}, /* ⋫ */ -{268854337, (unsigned char*)"\342\211\204", -1, -1}, /* ≄ */ -{268858560, (unsigned char*)"\342\210\244", 674, 676}, /* ∤ */ -{268861577, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ -{268867010, (unsigned char*)"\342\253\205\314\270", 675, 679}, /* ⫅̸ */ -{268867042, (unsigned char*)"\342\212\210", -1, -1}, /* ⊈ */ -{268867073, (unsigned char*)"\342\212\201", 678, 680}, /* ⊁ */ -{268867472, (unsigned char*)"\342\253\206\314\270", -1, -1}, /* ⫆̸ */ -{268867504, (unsigned char*)"\342\212\211", 673, 690}, /* ⊉ */ -{268930776, (unsigned char*)"\342\200\207", -1, -1}, /*   */ -{268954703, (unsigned char*)"\342\207\226", 682, -1}, /* ⇖ */ -{268972914, (unsigned char*)"\342\210\274\342\203\222", 683, 685}, /* ∼⃒ */ -{268989551, (unsigned char*)"\342\206\226", -1, -1}, /* ↖ */ -{269465429, (unsigned char*)"\303\264", 684, 688}, /* ô */ -{269492692, (unsigned char*)"\342\212\235", -1, -1}, /* ⊝ */ -{269540277, (unsigned char*)"\305\223", 687, 689}, /* œ */ -{269566424, (unsigned char*)"\342\246\277", -1, -1}, /* ⦿ */ -{269636945, (unsigned char*)"\342\246\265", 686, 694}, /* ⦵ */ -{269780165, (unsigned char*)"\342\206\272", -1, -1}, /* ↺ */ -{269782046, (unsigned char*)"\342\246\276", 691, 693}, /* ⦾ */ -{269788732, (unsigned char*)"\342\200\276", -1, -1}, /* ‾ */ -{269815607, (unsigned char*)"\305\215", 692, 696}, /* ō */ -{269820078, (unsigned char*)"\317\211", -1, -1}, /* ω */ -{269928267, (unsigned char*)"\342\246\271", 695, 697}, /* ⦹ */ -{269935992, (unsigned char*)"\342\212\225", -1, -1}, /* ⊕ */ -{269995787, (unsigned char*)"\342\206\273", 681, 715}, /* ↻ */ -{269998625, (unsigned char*)"\342\204\264", -1, -1}, /* ℴ */ -{270140063, (unsigned char*)"\342\214\275", 699, -1}, /* ⌽ */ -{270589319, (unsigned char*)"\342\253\275", 700, 702}, /* ⫽ */ -{270837439, (unsigned char*)"\342\230\216", -1, -1}, /* ☎ */ -{270987883, (unsigned char*)"\342\212\236", 701, 705}, /* ⊞ */ -{270987886, (unsigned char*)"\342\251\262", -1, -1}, /* ⩲ */ -{271095531, (unsigned char*)"\302\243", 704, 706}, /* £ */ -{271183972, (unsigned char*)"\342\211\274", -1, -1}, /* ≼ */ -{271190242, (unsigned char*)"\342\200\262", 703, 711}, /* ′ */ -{271195302, (unsigned char*)"\342\252\271", -1, -1}, /* ⪹ */ -{271201008, (unsigned char*)"\342\211\276", 708, 710}, /* ≾ */ -{271792637, (unsigned char*)"\342\207\233", -1, -1}, /* ⇛ */ -{271828574, (unsigned char*)"\342\244\217", 709, 713}, /* ⤏ */ -{272479831, (unsigned char*)"\77", -1, -1}, /* ? */ -{272945576, (unsigned char*)"\342\210\232", 712, 714}, /* √ */ -{272956401, (unsigned char*)"\342\246\222", -1, -1}, /* ⦒ */ -{272956402, (unsigned char*)"\342\246\245", 707, 723}, /* ⦥ */ -{272960141, (unsigned char*)"\302\273", -1, -1}, /* » */ -{272961118, (unsigned char*)"\342\207\245", 716, 718}, /* ⇥ */ -{272961119, (unsigned char*)"\342\244\263", -1, -1}, /* ⤳ */ -{272961139, (unsigned char*)"\342\206\235", 717, 721}, /* ↝ */ -{272963012, (unsigned char*)"\342\210\266", -1, -1}, /* ∶ */ -{272978558, (unsigned char*)"\342\244\215", 720, 722}, /* ⤍ */ -{272979640, (unsigned char*)"\342\235\263", -1, -1}, /* ❳ */ -{272996827, (unsigned char*)"\342\246\214", 719, 727}, /* ⦌ */ -{273018548, (unsigned char*)"\342\214\211", -1, -1}, /* ⌉ */ -{273067952, (unsigned char*)"\342\200\235", 724, 726}, /* ” */ -{273086172, (unsigned char*)"\342\204\235", -1, -1}, /* ℝ */ -{273194166, (unsigned char*)"\342\207\201", 725, 729}, /* ⇁ */ -{273194183, (unsigned char*)"\342\207\200", -1, -1}, /* ⇀ */ -{273337928, (unsigned char*)"\342\207\204", 728, 730}, /* ⇄ */ -{273344990, (unsigned char*)"\342\207\214", -1, -1}, /* ⇌ */ -{273422559, (unsigned char*)"\342\253\256", 698, 764}, /* ⫮ */ -{273445596, (unsigned char*)"\342\237\255", -1, -1}, /* ⟭ */ -{273445739, (unsigned char*)"\342\207\276", 732, -1}, /* ⇾ */ -{273446821, (unsigned char*)"\342\237\247", 733, 735}, /* ⟧ */ -{273461513, (unsigned char*)"\342\246\206", -1, -1}, /* ⦆ */ -{273553550, (unsigned char*)"\342\207\211", 734, 738}, /* ⇉ */ -{273607007, (unsigned char*)"\342\200\231", -1, -1}, /* ’ */ -{273643627, (unsigned char*)"\342\212\265", 737, 739}, /* ⊵ */ -{273643628, (unsigned char*)"\342\226\270", -1, -1}, /* ▸ */ -{274181999, (unsigned char*)"\342\200\232", 736, 744}, /* ‚ */ -{274202680, (unsigned char*)"\342\211\275", -1, -1}, /* ≽ */ -{274209113, (unsigned char*)"\305\235", 741, 743}, /* ŝ */ -{274214010, (unsigned char*)"\342\252\272", -1, -1}, /* ⪺ */ -{274219716, (unsigned char*)"\342\211\277", 742, 746}, /* ≿ */ -{274237442, (unsigned char*)"\342\207\230", -1, -1}, /* ⇘ */ -{274251649, (unsigned char*)"\342\212\241", 745, 747}, /* ⊡ */ -{274251652, (unsigned char*)"\342\251\246", -1, -1}, /* ⩦ */ -{274272290, (unsigned char*)"\342\206\230", 740, 756}, /* ↘ */ -{274292812, (unsigned char*)"\342\210\226", -1, -1}, /* ∖ */ -{274358067, (unsigned char*)"\342\213\254", 749, 751}, /* ⋬ */ -{274380099, (unsigned char*)"\342\231\257", -1, -1}, /* ♯ */ -{274422390, (unsigned char*)"\317\203", 750, 754}, /* σ */ -{274428676, (unsigned char*)"\342\211\203", -1, -1}, /* ≃ */ -{274428698, (unsigned char*)"\342\252\240", 753, 755}, /* ⪠ */ -{274428863, (unsigned char*)"\342\252\237", -1, -1}, /* ⪟ */ -{274428961, (unsigned char*)"\342\211\206", 752, 760}, /* ≆ */ -{274523849, (unsigned char*)"\342\206\220", -1, -1}, /* ← */ -{274568287, (unsigned char*)"\342\214\243", 757, 759}, /* ⌣ */ -{274578221, (unsigned char*)"\342\204\261", -1, -1}, /* ℱ */ -{274580049, (unsigned char*)"\342\252\254\357\270\200", 758, 762}, /* ⪬︀ */ -{274705149, (unsigned char*)"\342\212\223", -1, -1}, /* ⊓ */ -{274705809, (unsigned char*)"\342\212\224", 761, 763}, /* ⊔ */ -{274723219, (unsigned char*)"\342\212\217", -1, -1}, /* ⊏ */ -{274723233, (unsigned char*)"\342\212\220", 748, 781}, /* ⊐ */ -{274739471, (unsigned char*)"\342\206\222", -1, -1}, /* → */ -{274811333, (unsigned char*)"\342\230\205", 765, -1}, /* ★ */ -{274829727, (unsigned char*)"\302\257", 766, 768}, /* ¯ */ -{274848194, (unsigned char*)"\342\253\213", -1, -1}, /* ⫋ */ -{274848226, (unsigned char*)"\342\212\212", 767, 771}, /* ⊊ */ -{274863440, (unsigned char*)"\342\253\214", -1, -1}, /* ⫌ */ -{274863472, (unsigned char*)"\342\212\213", 770, 772}, /* ⊋ */ -{274884308, (unsigned char*)"\342\207\231", -1, -1}, /* ⇙ */ -{274919156, (unsigned char*)"\342\206\231", 769, 777}, /* ↙ */ -{275038638, (unsigned char*)"\303\237", -1, -1}, /* ß */ -{275317205, (unsigned char*)"\342\251\211", 774, 776}, /* ⩉ */ -{275570427, (unsigned char*)"\316\270", -1, -1}, /* θ */ -{275576349, (unsigned char*)"\342\211\210", 775, 779}, /* ≈ */ -{275581264, (unsigned char*)"\303\276", -1, -1}, /* þ */ -{275613463, (unsigned char*)"\313\234", 778, 780}, /* ˜ */ -{275614599, (unsigned char*)"\303\227", -1, -1}, /* × */ -{275924917, (unsigned char*)"\342\204\242", 773, 789}, /* ™ */ -{275934121, (unsigned char*)"\342\247\215", -1, -1}, /* ⧍ */ -{275968464, (unsigned char*)"\321\233", 782, 784}, /* ћ */ -{276113989, (unsigned char*)"\342\211\254", -1, -1}, /* ≬ */ -{276554346, (unsigned char*)"\321\236", 783, 787}, /* ў */ -{276572262, (unsigned char*)"\342\253\251", -1, -1}, /* ⫩ */ -{276580955, (unsigned char*)"\303\273", 786, 788}, /* û */ -{276608195, (unsigned char*)"\342\207\205", -1, -1}, /* ⇅ */ -{276615257, (unsigned char*)"\342\245\256", 785, 793}, /* ⥮ */ -{276644155, (unsigned char*)"\342\212\250", -1, -1}, /* ⊨ */ -{276751937, (unsigned char*)"\342\206\277", 790, 792}, /* ↿ */ -{276751943, (unsigned char*)"\342\206\276", -1, -1}, /* ↾ */ -{276752827, (unsigned char*)"\342\226\200", 791, 795}, /* ▀ */ -{276916373, (unsigned char*)"\342\227\270", -1, -1}, /* ◸ */ -{276931133, (unsigned char*)"\305\253", 794, 796}, /* ū */ -{277009933, (unsigned char*)"\305\263", -1, -1}, /* ų */ -{277051518, (unsigned char*)"\342\212\216", 664, 930}, /* ⊎ */ -{277058734, (unsigned char*)"\317\222", -1, -1}, /* ϒ */ -{277119882, (unsigned char*)"\305\257", 798, -1}, /* ů */ -{277131995, (unsigned char*)"\342\227\271", 799, 801}, /* ◹ */ -{277186357, (unsigned char*)"\342\213\260", -1, -1}, /* ⋰ */ -{277201391, (unsigned char*)"\342\226\264", 800, 804}, /* ▴ */ -{277219124, (unsigned char*)"\342\207\210", -1, -1}, /* ⇈ */ -{277704743, (unsigned char*)"\317\226", 803, 805}, /* ϖ */ -{277794139, (unsigned char*)"\342\212\242", -1, -1}, /* ⊢ */ -{277833979, (unsigned char*)"\342\211\232", 802, 810}, /* ≚ */ -{277906162, (unsigned char*)"\342\213\271\314\270", -1, -1}, /* ⋹̸ */ -{278102294, (unsigned char*)"\342\212\262", 807, 809}, /* ⊲ */ -{278173171, (unsigned char*)"\342\212\202\342\203\222", -1, -1}, /* ⊂⃒ */ -{278173185, (unsigned char*)"\342\212\203\342\203\222", 808, 812}, /* ⊃⃒ */ -{278243772, (unsigned char*)"\342\210\235", -1, -1}, /* ∝ */ -{278317916, (unsigned char*)"\342\212\263", 811, 813}, /* ⊳ */ -{278419285, (unsigned char*)"\342\253\275\342\203\245", -1, -1}, /* ⫽⃥ */ -{278952797, (unsigned char*)"\305\265", 806, 823}, /* ŵ */ -{279013938, (unsigned char*)"\342\213\240", -1, -1}, /* ⋠ */ -{279018865, (unsigned char*)"\342\210\247", 815, -1}, /* ∧ */ -{280138718, (unsigned char*)"\342\227\257", 816, 818}, /* ◯ */ -{280186640, (unsigned char*)"\342\226\275", -1, -1}, /* ▽ */ -{280274858, (unsigned char*)"\342\237\272", 817, 821}, /* ⟺ */ -{280309706, (unsigned char*)"\342\237\267", -1, -1}, /* ⟷ */ -{280418606, (unsigned char*)"\342\237\270", 820, 822}, /* ⟸ */ -{280453454, (unsigned char*)"\342\237\265", -1, -1}, /* ⟵ */ -{280564435, (unsigned char*)"\342\250\200", 819, 827}, /* ⨀ */ -{280634228, (unsigned char*)"\342\237\271", -1, -1}, /* ⟹ */ -{280669076, (unsigned char*)"\342\237\266", 824, 826}, /* ⟶ */ -{280791085, (unsigned char*)"\342\244\263\314\270", -1, -1}, /* ⤳̸ */ -{280791105, (unsigned char*)"\342\206\235\314\270", 825, 829}, /* ↝̸ */ -{280797569, (unsigned char*)"\342\226\263", -1, -1}, /* △ */ -{281324639, (unsigned char*)"\305\267", 828, 830}, /* ŷ */ -{281473593, (unsigned char*)"\342\213\255", -1, -1}, /* ⋭ */ -{282032646, (unsigned char*)"\342\213\241", 814, 848}, /* ⋡ */ -{282258642, (unsigned char*)"\342\211\204", -1, -1}, /* ≄ */ -{283443429, (unsigned char*)"\303\261", 832, -1}, /* ñ */ -{284474121, (unsigned char*)"\342\212\255", 833, 835}, /* ⊭ */ -{284617846, (unsigned char*)"\342\244\204", -1, -1}, /* ⤄ */ -{284765947, (unsigned char*)"\342\204\226", 834, 838}, /* № */ -{285624105, (unsigned char*)"\342\212\254", -1, -1}, /* ⊬ */ -{285876730, (unsigned char*)"\342\244\202", 837, 839}, /* ⤂ */ -{286092352, (unsigned char*)"\342\244\203", -1, -1}, /* ⤃ */ -{286720368, (unsigned char*)"\342\244\243", 836, 844}, /* ⤣ */ -{287173168, (unsigned char*)"\342\244\247", -1, -1}, /* ⤧ */ -{293992385, (unsigned char*)"\342\213\204", 841, 843}, /* ⋄ */ -{299841030, (unsigned char*)"\303\263", -1, -1}, /* ó */ -{300285334, (unsigned char*)"\342\207\220", 842, 846}, /* ⇐ */ -{300674453, (unsigned char*)"\317\235", -1, -1}, /* ϝ */ -{303352426, (unsigned char*)"\305\221", 845, 847}, /* ő */ -{303966986, (unsigned char*)"\342\246\274", -1, -1}, /* ⦼ */ -{307473897, (unsigned char*)"\303\262", 840, 856}, /* ò */ -{310780147, (unsigned char*)"\342\252\241", -1, -1}, /* ⪡ */ -{310784605, (unsigned char*)"\342\210\226", 849, 851}, /* ∖ */ -{314280128, (unsigned char*)"\342\212\226", -1, -1}, /* ⊖ */ -{314968612, (unsigned char*)"\342\252\265", 850, 854}, /* ⪵ */ -{314983590, (unsigned char*)"\342\213\250", -1, -1}, /* ⋨ */ -{319340427, (unsigned char*)"\342\204\220", 853, 855}, /* ℐ */ -{319475610, (unsigned char*)"\342\204\221", -1, -1}, /* ℑ */ -{320201899, (unsigned char*)"\342\212\266", 852, 860}, /* ⊶ */ -{320670692, (unsigned char*)"\342\237\272", -1, -1}, /* ⟺ */ -{321489231, (unsigned char*)"\303\270", 857, 859}, /* ø */ -{322578822, (unsigned char*)"\303\265", -1, -1}, /* õ */ -{322579958, (unsigned char*)"\342\212\227", 858, 862}, /* ⊗ */ -{323169842, (unsigned char*)"\342\251\274", -1, -1}, /* ⩼ */ -{324032329, (unsigned char*)"\342\211\267", 861, 863}, /* ≷ */ -{334872149, (unsigned char*)"\342\251\210", -1, -1}, /* ⩈ */ -{339512945, (unsigned char*)"\342\253\263", 831, 897}, /* ⫳ */ -{340554879, (unsigned char*)"\342\204\255", -1, -1}, /* ℭ */ -{341173234, (unsigned char*)"\342\210\245", 865, -1}, /* ∥ */ -{341609399, (unsigned char*)"\342\200\213", 866, 868}, /* ​ */ -{342697243, (unsigned char*)"\342\252\272", -1, -1}, /* ⪺ */ -{344239377, (unsigned char*)"\45", 867, 871}, /* % */ -{344245928, (unsigned char*)"\56", -1, -1}, /* . */ -{344250094, (unsigned char*)"\342\200\260", 870, 872}, /* ‰ */ -{347627916, (unsigned char*)"\342\204\263", -1, -1}, /* ℳ */ -{351941502, (unsigned char*)"\342\204\217", 869, 877}, /* ℏ */ -{351941777, (unsigned char*)"\342\204\217", -1, -1}, /* ℏ */ -{352665724, (unsigned char*)"\342\210\224", 874, 876}, /* ∔ */ -{352665730, (unsigned char*)"\342\250\245", -1, -1}, /* ⨥ */ -{352666020, (unsigned char*)"\302\261", 875, 879}, /* ± */ -{359188869, (unsigned char*)"\342\252\257", -1, -1}, /* ⪯ */ -{359343509, (unsigned char*)"\342\204\231", 878, 880}, /* ℙ */ -{359529854, (unsigned char*)"\342\213\250", -1, -1}, /* ⋨ */ -{359562889, (unsigned char*)"\342\210\235", 873, 889}, /* ∝ */ -{359780191, (unsigned char*)"\342\212\260", -1, -1}, /* ⊰ */ -{361603609, (unsigned char*)"\342\252\242", 882, 884}, /* ⪢ */ -{363070526, (unsigned char*)"\342\200\210", -1, -1}, /*   */ -{373076555, (unsigned char*)"\342\250\226", 883, 887}, /* ⨖ */ -{377795981, (unsigned char*)"\342\211\237", -1, -1}, /* ≟ */ -{379886530, (unsigned char*)"\342\244\234", 886, 888}, /* ⤜ */ -{387176008, (unsigned char*)"\342\212\212\357\270\200", -1, -1}, /* ⊊︀ */ -{396426387, (unsigned char*)"\342\201\227", 885, 893}, /* ⁗ */ -{398734173, (unsigned char*)"\342\212\217\314\270", -1, -1}, /* ⊏̸ */ -{407042323, (unsigned char*)"\342\210\260", 890, 892}, /* ∰ */ -{417247209, (unsigned char*)"\305\225", -1, -1}, /* ŕ */ -{417627006, (unsigned char*)"\342\237\251", 891, 895}, /* ⟩ */ -{417782381, (unsigned char*)"\342\245\265", -1, -1}, /* ⥵ */ -{417782549, (unsigned char*)"\342\244\236", 894, 896}, /* ⤞ */ -{417782607, (unsigned char*)"\342\206\252", -1, -1}, /* ↪ */ -{417782744, (unsigned char*)"\342\206\254", 881, 914}, /* ↬ */ -{417782872, (unsigned char*)"\342\245\205", -1, -1}, /* ⥅ */ -{417783004, (unsigned char*)"\342\206\243", 898, -1}, /* ↣ */ -{417836002, (unsigned char*)"\342\244\232", 899, 901}, /* ⤚ */ -{418949844, (unsigned char*)"\175", -1, -1}, /* } */ -{418949850, (unsigned char*)"\135", 900, 904}, /* ] */ -{419543754, (unsigned char*)"\305\231", -1, -1}, /* ř */ -{419672056, (unsigned char*)"\305\227", 903, 905}, /* ŗ */ -{421307938, (unsigned char*)"\342\200\235", -1, -1}, /* ” */ -{422752145, (unsigned char*)"\342\206\247", 902, 910}, /* ↧ */ -{423028196, (unsigned char*)"\342\206\244", -1, -1}, /* ↤ */ -{423389877, (unsigned char*)"\342\245\275", 907, 909}, /* ⥽ */ -{423493561, (unsigned char*)"\342\214\213", -1, -1}, /* ⌋ */ -{423908415, (unsigned char*)"\342\213\233", 908, 912}, /* ⋛ */ -{425274516, (unsigned char*)"\342\213\216", -1, -1}, /* ⋎ */ -{425473555, (unsigned char*)"\342\245\254", 911, 913}, /* ⥬ */ -{431909487, (unsigned char*)"\342\216\261", -1, -1}, /* ⎱ */ -{434187999, (unsigned char*)"\342\207\211", 906, 922}, /* ⇉ */ -{434307530, (unsigned char*)"\342\250\256", -1, -1}, /* ⨮ */ -{434960469, (unsigned char*)"\342\246\224", 915, 917}, /* ⦔ */ -{436843863, (unsigned char*)"\342\251\275\314\270", -1, -1}, /* ⩽̸ */ -{438517600, (unsigned char*)"\342\200\272", 916, 920}, /* › */ -{439096753, (unsigned char*)"\342\200\231", -1, -1}, /* ’ */ -{439955631, (unsigned char*)"\342\213\214", 919, 921}, /* ⋌ */ -{439986137, (unsigned char*)"\342\213\212", -1, -1}, /* ⋊ */ -{440485992, (unsigned char*)"\342\207\225", 918, 926}, /* ⇕ */ -{456382602, (unsigned char*)"\305\233", -1, -1}, /* ś */ -{458679147, (unsigned char*)"\305\241", 923, 925}, /* š */ -{458807449, (unsigned char*)"\305\237", -1, -1}, /* ş */ -{459147218, (unsigned char*)"\342\213\251", 924, 928}, /* ⋩ */ -{461050755, (unsigned char*)"\342\244\245", -1, -1}, /* ⤥ */ -{461179665, (unsigned char*)"\342\200\213", 927, 929}, /* ​ */ -{461702842, (unsigned char*)"\342\244\251", -1, -1}, /* ⤩ */ -{462844836, (unsigned char*)"\342\214\242", 864, 996}, /* ⌢ */ -{464669351, (unsigned char*)"\321\211", -1, -1}, /* щ */ -{466004380, (unsigned char*)"\317\202", 931, -1}, /* ς */ -{466004396, (unsigned char*)"\317\202", 932, 934}, /* ς */ -{466210677, (unsigned char*)"\342\251\252", -1, -1}, /* ⩪ */ -{470539217, (unsigned char*)"\342\250\263", 933, 937}, /* ⨳ */ -{472091475, (unsigned char*)"\302\270", -1, -1}, /* ¸ */ -{473091677, (unsigned char*)"\321\214", 936, 938}, /* ь */ -{473287624, (unsigned char*)"\342\214\277", -1, -1}, /* ⌿ */ -{474080549, (unsigned char*)"\342\231\240", 935, 943}, /* ♠ */ -{475335440, (unsigned char*)"\342\212\223\357\270\200", -1, -1}, /* ⊓︀ */ -{475357220, (unsigned char*)"\342\212\224\357\270\200", 940, 942}, /* ⊔︀ */ -{475931736, (unsigned char*)"\342\212\221", -1, -1}, /* ⊑ */ -{475932198, (unsigned char*)"\342\212\222", 941, 945}, /* ⊒ */ -{475982358, (unsigned char*)"\342\226\241", -1, -1}, /* □ */ -{475982359, (unsigned char*)"\342\226\252", 944, 946}, /* ▪ */ -{477799743, (unsigned char*)"\342\210\226", -1, -1}, /* ∖ */ -{478075218, (unsigned char*)"\342\214\243", 939, 955}, /* ⌣ */ -{478318264, (unsigned char*)"\342\213\206", -1, -1}, /* ⋆ */ -{480046422, (unsigned char*)"\342\252\275", 948, 950}, /* ⪽ */ -{480062427, (unsigned char*)"\342\212\202", -1, -1}, /* ⊂ */ -{480062552, (unsigned char*)"\342\253\207", 949, 953}, /* ⫇ */ -{480062937, (unsigned char*)"\342\253\225", -1, -1}, /* ⫕ */ -{480062951, (unsigned char*)"\342\253\223", 952, 954}, /* ⫓ */ -{480080937, (unsigned char*)"\342\252\260", -1, -1}, /* ⪰ */ -{480549540, (unsigned char*)"\342\252\276", 951, 959}, /* ⪾ */ -{480565545, (unsigned char*)"\342\212\203", -1, -1}, /* ⊃ */ -{480565670, (unsigned char*)"\342\253\210", 956, 958}, /* ⫈ */ -{480566055, (unsigned char*)"\342\253\224", -1, -1}, /* ⫔ */ -{480566069, (unsigned char*)"\342\253\226", 957, 961}, /* ⫖ */ -{482397333, (unsigned char*)"\342\244\246", -1, -1}, /* ⤦ */ -{482869735, (unsigned char*)"\342\244\252", 960, 962}, /* ⤪ */ -{496041324, (unsigned char*)"\342\214\226", -1, -1}, /* ⌖ */ -{497814540, (unsigned char*)"\305\245", 947, 980}, /* ť */ -{497942842, (unsigned char*)"\305\243", -1, -1}, /* ţ */ -{500581348, (unsigned char*)"\342\214\225", 964, -1}, /* ⌕ */ -{503887505, (unsigned char*)"\342\210\264", 965, 967}, /* ∴ */ -{503889617, (unsigned char*)"\317\221", -1, -1}, /* ϑ */ -{504027419, (unsigned char*)"\342\200\211", 966, 970}, /*   */ -{504104405, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ -{505347273, (unsigned char*)"\342\212\240", 969, 971}, /* ⊠ */ -{505347275, (unsigned char*)"\342\250\260", -1, -1}, /* ⨰ */ -{512567229, (unsigned char*)"\342\214\266", 968, 976}, /* ⌶ */ -{512568118, (unsigned char*)"\342\253\261", -1, -1}, /* ⫱ */ -{513832566, (unsigned char*)"\342\200\264", 973, 975}, /* ‴ */ -{515875611, (unsigned char*)"\342\227\254", -1, -1}, /* ◬ */ -{517472076, (unsigned char*)"\305\247", 974, 978}, /* ŧ */ -{534653388, (unsigned char*)"\303\272", -1, -1}, /* ú */ -{536361006, (unsigned char*)"\305\255", 977, 979}, /* ŭ */ -{538164784, (unsigned char*)"\305\261", -1, -1}, /* ű */ -{540796056, (unsigned char*)"\342\245\276", 972, 988}, /* ⥾ */ -{542286255, (unsigned char*)"\303\271", -1, -1}, /* ù */ -{547691928, (unsigned char*)"\342\214\234", 981, 983}, /* ⌜ */ -{547695098, (unsigned char*)"\342\214\217", -1, -1}, /* ⌏ */ -{551442032, (unsigned char*)"\342\210\224", 982, 986}, /* ∔ */ -{554807454, (unsigned char*)"\342\214\235", -1, -1}, /* ⌝ */ -{554810624, (unsigned char*)"\342\214\216", 985, 987}, /* ⌎ */ -{557391180, (unsigned char*)"\305\251", -1, -1}, /* ũ */ -{561528584, (unsigned char*)"\342\206\223", 984, 992}, /* ↓ */ -{562700561, (unsigned char*)"\314\221", -1, -1}, /* ̑ */ -{566767800, (unsigned char*)"\342\206\223", 989, 991}, /* ↓ */ -{567369724, (unsigned char*)"\342\250\261", -1, -1}, /* ⨱ */ -{568274355, (unsigned char*)"\342\211\207", 990, 994}, /* ≇ */ -{569355731, (unsigned char*)"\342\245\217", -1, -1}, /* ⥏ */ -{574168791, (unsigned char*)"\342\246\234", 993, 995}, /* ⦜ */ -{574321999, (unsigned char*)"\317\225", -1, -1}, /* ϕ */ -{574324183, (unsigned char*)"\317\261", 963, 1029}, /* ϱ */ -{575971612, (unsigned char*)"\342\213\202", -1, -1}, /* ⋂ */ -{578408944, (unsigned char*)"\342\245\224", 997, -1}, /* ⥔ */ -{578583034, (unsigned char*)"\342\212\273", 998, 1000}, /* ⊻ */ -{578845745, (unsigned char*)"\342\213\256", -1, -1}, /* ⋮ */ -{579050215, (unsigned char*)"\174", 999, 1003}, /* | */ -{580970468, (unsigned char*)"\342\210\211", -1, -1}, /* ∉ */ -{580970469, (unsigned char*)"\342\213\267", 1002, 1004}, /* ⋷ */ -{580970470, (unsigned char*)"\342\213\266", -1, -1}, /* ⋶ */ -{581144708, (unsigned char*)"\342\210\214", 1001, 1009}, /* ∌ */ -{581144709, (unsigned char*)"\342\213\276", -1, -1}, /* ⋾ */ -{581144710, (unsigned char*)"\342\213\275", 1006, 1008}, /* ⋽ */ -{582607587, (unsigned char*)"\342\212\226", -1, -1}, /* ⊖ */ -{585419272, (unsigned char*)"\342\206\254", 1007, 1011}, /* ↬ */ -{590907417, (unsigned char*)"\342\212\227", -1, -1}, /* ⊗ */ -{595761304, (unsigned char*)"\342\253\213\357\270\200", 1010, 1012}, /* ⫋︀ */ -{595761336, (unsigned char*)"\342\212\212\357\270\200", -1, -1}, /* ⊊︀ */ -{595776550, (unsigned char*)"\342\253\214\357\270\200", 1005, 1021}, /* ⫌︀ */ -{595776582, (unsigned char*)"\342\212\213\357\270\200", -1, -1}, /* ⊋︀ */ -{599478056, (unsigned char*)"\342\207\223", 1014, 1016}, /* ⇓ */ -{602940966, (unsigned char*)"\342\210\217", -1, -1}, /* ∏ */ -{606661950, (unsigned char*)"\342\237\266", 1015, 1019}, /* ⟶ */ -{614278377, (unsigned char*)"\342\250\224", -1, -1}, /* ⨔ */ -{617577747, (unsigned char*)"\342\252\257\314\270", 1018, 1020}, /* ⪯̸ */ -{617682490, (unsigned char*)"\342\251\237", -1, -1}, /* ⩟ */ -{617688066, (unsigned char*)"\342\211\231", 1017, 1025}, /* ≙ */ -{617866001, (unsigned char*)"\342\204\230", -1, -1}, /* ℘ */ -{625068841, (unsigned char*)"\342\210\264", 1022, 1024}, /* ∴ */ -{627945337, (unsigned char*)"\342\252\211", -1, -1}, /* ⪉ */ -{628380225, (unsigned char*)"\342\212\200", 1023, 1027}, /* ⊀ */ -{633134928, (unsigned char*)"\342\211\200", -1, -1}, /* ≀ */ -{651594882, (unsigned char*)"\342\212\263", 1026, 1028}, /* ⊳ */ -{657271117, (unsigned char*)"\342\206\225", -1, -1}, /* ↕ */ -{662809391, (unsigned char*)"\342\200\234", 1013, 1046}, /* “ */ -{664079451, (unsigned char*)"\342\247\217", -1, -1}, /* ⧏ */ -{664623714, (unsigned char*)"\342\211\251\357\270\200", 1030, -1}, /* ≩︀ */ -{669119888, (unsigned char*)"\342\250\201", 1031, 1033}, /* ⨁ */ -{669260091, (unsigned char*)"\342\250\202", -1, -1}, /* ⨂ */ -{673889705, (unsigned char*)"\342\250\206", 1032, 1036}, /* ⨆ */ -{674460267, (unsigned char*)"\342\217\247", -1, -1}, /* ⏧ */ -{676235414, (unsigned char*)"\342\250\204", 1035, 1037}, /* ⨄ */ -{678202761, (unsigned char*)"\342\213\200", -1, -1}, /* ⋀ */ -{680350718, (unsigned char*)"\342\253\214", 1034, 1042}, /* ⫌ */ -{691194960, (unsigned char*)"\303\275", -1, -1}, /* ý */ -{709255750, (unsigned char*)"\342\214\205", 1039, 1041}, /* ⌅ */ -{709420220, (unsigned char*)"\342\214\256", -1, -1}, /* ⌮ */ -{709812676, (unsigned char*)"\342\214\222", 1040, 1044}, /* ⌒ */ -{710077436, (unsigned char*)"\342\214\223", -1, -1}, /* ⌓ */ -{714706988, (unsigned char*)"\342\245\211", 1043, 1045}, /* ⥉ */ -{721896417, (unsigned char*)"\342\245\216", -1, -1}, /* ⥎ */ -{723739728, (unsigned char*)"\342\245\226", 1038, 1054}, /* ⥖ */ -{730330353, (unsigned char*)"\305\272", -1, -1}, /* ź */ -{732626898, (unsigned char*)"\305\276", 1047, 1049}, /* ž */ -{734320614, (unsigned char*)"\342\213\242", -1, -1}, /* ⋢ */ -{734321076, (unsigned char*)"\342\213\243", 1048, 1052}, /* ⋣ */ -{735144757, (unsigned char*)"\342\204\250", -1, -1}, /* ℨ */ -{738451305, (unsigned char*)"\342\212\202\342\203\222", 1051, 1053}, /* ⊂⃒ */ -{738469815, (unsigned char*)"\342\252\260\314\270", -1, -1}, /* ⪰̸ */ -{738954423, (unsigned char*)"\342\212\203\342\203\222", 1050, 1058}, /* ⊃⃒ */ -{747512235, (unsigned char*)"\342\237\265", -1, -1}, /* ⟵ */ -{754169043, (unsigned char*)"\342\212\206", 1055, 1057}, /* ⊆ */ -{768237051, (unsigned char*)"\342\207\203", -1, -1}, /* ⇃ */ -{780580024, (unsigned char*)"\342\211\261", 1056, 1060}, /* ≱ */ -{785582384, (unsigned char*)"\342\207\221", -1, -1}, /* ⇑ */ -{798071634, (unsigned char*)"\342\211\265", 1059, 1061}, /* ≵ */ -{809442366, (unsigned char*)"\342\213\232", -1, -1}, /* ⋚ */ -{813260100, (unsigned char*)"\342\226\253", 531, 1594}, /* ▫ */ -{821833914, (unsigned char*)"\342\211\247", -1, -1}, /* ≧ */ -{826190435, (unsigned char*)"\342\245\225", 1063, -1}, /* ⥕ */ -{830437955, (unsigned char*)"\342\206\274", 1064, 1066}, /* ↼ */ -{831545492, (unsigned char*)"\342\211\273", -1, -1}, /* ≻ */ -{836458806, (unsigned char*)"\342\204\265", 1065, 1069}, /* ℵ */ -{836867337, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ -{837080726, (unsigned char*)"\342\247\253", 1068, 1070}, /* ⧫ */ -{841915047, (unsigned char*)"\342\246\246", -1, -1}, /* ⦦ */ -{842043645, (unsigned char*)"\342\247\236", 1067, 1075}, /* ⧞ */ -{845830089, (unsigned char*)"\342\212\264\342\203\222", -1, -1}, /* ⊴⃒ */ -{852945615, (unsigned char*)"\342\212\265\342\203\222", 1072, 1074}, /* ⊵⃒ */ -{860116750, (unsigned char*)"\342\206\222", -1, -1}, /* → */ -{871848693, (unsigned char*)"\342\206\226", 1073, 1077}, /* ↖ */ -{872140944, (unsigned char*)"\342\245\210", -1, -1}, /* ⥈ */ -{878608901, (unsigned char*)"\342\226\275", 1076, 1078}, /* ▽ */ -{887116914, (unsigned char*)"\342\204\232", -1, -1}, /* ℚ */ -{891834107, (unsigned char*)"\342\213\240", 1071, 1088}, /* ⋠ */ -{901917559, (unsigned char*)"\342\244\240", -1, -1}, /* ⤠ */ -{901936165, (unsigned char*)"\342\245\264", 1080, -1}, /* ⥴ */ -{904895059, (unsigned char*)"\342\226\277", 1081, 1083}, /* ▿ */ -{905171110, (unsigned char*)"\342\227\203", -1, -1}, /* ◃ */ -{905338586, (unsigned char*)"\342\250\225", 1082, 1086}, /* ⨕ */ -{905799629, (unsigned char*)"\342\250\215", -1, -1}, /* ⨍ */ -{917533657, (unsigned char*)"\342\212\276", 1085, 1087}, /* ⊾ */ -{917735130, (unsigned char*)"\342\216\260", -1, -1}, /* ⎰ */ -{917800346, (unsigned char*)"\342\215\274", 1084, 1092}, /* ⍼ */ -{920002972, (unsigned char*)"\342\206\233", -1, -1}, /* ↛ */ -{932905258, (unsigned char*)"\342\213\254", 1089, 1091}, /* ⋬ */ -{940820089, (unsigned char*)"\342\246\216", -1, -1}, /* ⦎ */ -{940820106, (unsigned char*)"\342\246\220", 1090, 1094}, /* ⦐ */ -{946094580, (unsigned char*)"\342\213\236", -1, -1}, /* ⋞ */ -{946205592, (unsigned char*)"\342\213\237", 1093, 1095}, /* ⋟ */ -{946608062, (unsigned char*)"\342\217\236", -1, -1}, /* ⏞ */ -{948733150, (unsigned char*)"\342\237\266", 1079, 1113}, /* ⟶ */ -{960250128, (unsigned char*)"\342\207\244", -1, -1}, /* ⇤ */ -{960260978, (unsigned char*)"\342\211\210", 1097, -1}, /* ≈ */ -{961579650, (unsigned char*)"\342\212\220\314\270", 1098, 1100}, /* ⊐̸ */ -{966045093, (unsigned char*)"\342\200\213", -1, -1}, /* ​ */ -{986782194, (unsigned char*)"\342\201\237", 1099, 1103}, /*   */ -{1004833897, (unsigned char*)"\342\211\221", -1, -1}, /* ≑ */ -{1011711462, (unsigned char*)"\342\245\251", 1102, 1104}, /* ⥩ */ -{1012110869, (unsigned char*)"\342\247\264", -1, -1}, /* ⧴ */ -{1014044856, (unsigned char*)"\342\210\270", 1101, 1109}, /* ∸ */ -{1014590239, (unsigned char*)"\342\212\210", -1, -1}, /* ⊈ */ -{1022603184, (unsigned char*)"\342\253\213", 1106, 1108}, /* ⫋ */ -{1032612858, (unsigned char*)"\342\251\276\314\270", -1, -1}, /* ⩾̸ */ -{1038090725, (unsigned char*)"\342\204\233", 1107, 1111}, /* ℛ */ -{1041625053, (unsigned char*)"\342\200\213", -1, -1}, /* ​ */ -{1047678075, (unsigned char*)"\342\206\275", 1110, 1112}, /* ↽ */ -{1048242133, (unsigned char*)"\342\206\221", -1, -1}, /* ↑ */ -{1067296237, (unsigned char*)"\342\207\214", 1105, 1121}, /* ⇌ */ -{1067503520, (unsigned char*)"\342\245\221", -1, -1}, /* ⥑ */ -{1069258735, (unsigned char*)"\317\205", 1114, 1116}, /* υ */ -{1078829841, (unsigned char*)"\342\205\207", -1, -1}, /* ⅇ */ -{1085075851, (unsigned char*)"\342\237\270", 1115, 1119}, /* ⟸ */ -{1094246452, (unsigned char*)"\342\211\274", -1, -1}, /* ≼ */ -{1105826287, (unsigned char*)"\342\204\225", 1118, 1120}, /* ℕ */ -{1110241840, (unsigned char*)"\342\252\214", -1, -1}, /* ⪌ */ -{1114698965, (unsigned char*)"\342\204\202", 1117, 1125}, /* ℂ */ -{1134372613, (unsigned char*)"\342\211\215", -1, -1}, /* ≍ */ -{1137538782, (unsigned char*)"\342\204\215", 1122, 1124}, /* ℍ */ -{1158775925, (unsigned char*)"\302\261", -1, -1}, /* ± */ -{1171717239, (unsigned char*)"\342\246\264", 1123, 1127}, /* ⦴ */ -{1172223697, (unsigned char*)"\342\210\226", -1, -1}, /* ∖ */ -{1181816526, (unsigned char*)"\342\234\223", 1126, 1128}, /* ✓ */ -{1182032078, (unsigned char*)"\342\212\270", -1, -1}, /* ⊸ */ -{1217189753, (unsigned char*)"\342\206\224", 1096, 1162}, /* ↔ */ -{1246782313, (unsigned char*)"\342\251\276", -1, -1}, /* ⩾ */ -{1269495274, (unsigned char*)"\342\245\213", 1130, -1}, /* ⥋ */ -{1272170499, (unsigned char*)"\342\204\222", 1131, 1133}, /* ℒ */ -{1273287689, (unsigned char*)"\342\207\213", -1, -1}, /* ⇋ */ -{1278230270, (unsigned char*)"\342\206\245", 1132, 1136}, /* ↥ */ -{1287858390, (unsigned char*)"\342\212\213\357\270\200", -1, -1}, /* ⊋︀ */ -{1311329176, (unsigned char*)"\342\207\205", 1135, 1137}, /* ⇅ */ -{1322034040, (unsigned char*)"\342\246\247", -1, -1}, /* ⦧ */ -{1324543392, (unsigned char*)"\342\216\261", 1134, 1142}, /* ⎱ */ -{1335946027, (unsigned char*)"\342\211\247\314\270", -1, -1}, /* ≧̸ */ -{1341522893, (unsigned char*)"\342\252\270", 1139, 1141}, /* ⪸ */ -{1343159904, (unsigned char*)"\342\212\203", -1, -1}, /* ⊃ */ -{1361466253, (unsigned char*)"\342\212\223", 1140, 1144}, /* ⊓ */ -{1374704544, (unsigned char*)"\342\217\237", -1, -1}, /* ⏟ */ -{1412370969, (unsigned char*)"\342\237\271", 1143, 1145}, /* ⟹ */ -{1414406743, (unsigned char*)"\342\213\252", -1, -1}, /* ⋪ */ -{1417986287, (unsigned char*)"\342\213\254", 1138, 1154}, /* ⋬ */ -{1431774055, (unsigned char*)"\342\211\246", -1, -1}, /* ≦ */ -{1451873416, (unsigned char*)"\342\250\265", 1147, 1149}, /* ⨵ */ -{1468837420, (unsigned char*)"\342\247\244", -1, -1}, /* ⧤ */ -{1483079107, (unsigned char*)"\342\207\245", 1148, 1152}, /* ⇥ */ -{1483147475, (unsigned char*)"\342\206\245", -1, -1}, /* ↥ */ -{1503454322, (unsigned char*)"\342\226\263", 1151, 1153}, /* △ */ -{1512556300, (unsigned char*)"\342\207\206", -1, -1}, /* ⇆ */ -{1534661236, (unsigned char*)"\342\205\205", 1150, 1158}, /* ⅅ */ -{1534801541, (unsigned char*)"\342\211\260", -1, -1}, /* ≰ */ -{1552293151, (unsigned char*)"\342\211\264", 1155, 1157}, /* ≴ */ -{1557558424, (unsigned char*)"\342\206\243", -1, -1}, /* ↣ */ -{1559260953, (unsigned char*)"\342\206\224", 1156, 1160}, /* ↔ */ -{1559699231, (unsigned char*)"\342\207\203", -1, -1}, /* ⇃ */ -{1561915692, (unsigned char*)"\342\206\274", 1159, 1161}, /* ↼ */ -{1562485741, (unsigned char*)"\342\212\211", -1, -1}, /* ⊉ */ -{1572185325, (unsigned char*)"\302\267", 1146, 1179}, /* · */ -{1576001964, (unsigned char*)"\342\214\237", -1, -1}, /* ⌟ */ -{1589202769, (unsigned char*)"\342\205\207", 1163, -1}, /* ⅇ */ -{1590598039, (unsigned char*)"\342\224\200", 1164, 1166}, /* ─ */ -{1619628897, (unsigned char*)"\342\214\206", -1, -1}, /* ⌆ */ -{1630548983, (unsigned char*)"\342\252\271", 1165, 1169}, /* ⪹ */ -{1632155742, (unsigned char*)"\342\212\264", -1, -1}, /* ⊴ */ -{1652415397, (unsigned char*)"\342\210\256", 1168, 1170}, /* ∮ */ -{1656304147, (unsigned char*)"\342\200\235", -1, -1}, /* ” */ -{1660701161, (unsigned char*)"\342\253\244", 1167, 1175}, /* ⫤ */ -{1664917774, (unsigned char*)"\342\211\275", -1, -1}, /* ≽ */ -{1675433358, (unsigned char*)"\342\211\262", 1172, 1174}, /* ≲ */ -{1677624072, (unsigned char*)"\342\245\250", -1, -1}, /* ⥨ */ -{1687486893, (unsigned char*)"\342\206\225", 1173, 1177}, /* ↕ */ -{1695244767, (unsigned char*)"\342\210\275", -1, -1}, /* ∽ */ -{1696757428, (unsigned char*)"\342\213\252", 1176, 1178}, /* ⋪ */ -{1709476789, (unsigned char*)"\342\206\253", -1, -1}, /* ↫ */ -{1724069746, (unsigned char*)"\342\211\255", 1171, 1187}, /* ≭ */ -{1729453610, (unsigned char*)"\342\245\212", -1, -1}, /* ⥊ */ -{1735157173, (unsigned char*)"\342\213\242", 1180, 1182}, /* ⋢ */ -{1735196042, (unsigned char*)"\342\246\273", -1, -1}, /* ⦻ */ -{1743044337, (unsigned char*)"\342\244\237", 1181, 1185}, /* ⤟ */ -{1743062943, (unsigned char*)"\342\245\263", -1, -1}, /* ⥳ */ -{1780911036, (unsigned char*)"\316\277", 1184, 1186}, /* ο */ -{1781946867, (unsigned char*)"\342\246\217", -1, -1}, /* ⦏ */ -{1781946884, (unsigned char*)"\342\246\215", 1183, 1191}, /* ⦍ */ -{1789597159, (unsigned char*)"\342\251\275\314\270", -1, -1}, /* ⩽̸ */ -{1792295088, (unsigned char*)"\342\231\243", 1188, 1190}, /* ♣ */ -{1800766792, (unsigned char*)"\342\250\243", -1, -1}, /* ⨣ */ -{1801278592, (unsigned char*)"\342\211\257", 1189, 1193}, /* ≯ */ -{1805699638, (unsigned char*)"\342\210\204", -1, -1}, /* ∄ */ -{1808940891, (unsigned char*)"\342\247\235", 1192, 1194}, /* ⧝ */ -{1809192765, (unsigned char*)"\342\250\222", -1, -1}, /* ⨒ */ -{1812749833, (unsigned char*)"\342\210\263", 1129, 1262}, /* ∳ */ -{1814824375, (unsigned char*)"\12", -1, -1}, /* */ -{1824044748, (unsigned char*)"\342\211\234", 1196, -1}, /* ≜ */ -{1826118667, (unsigned char*)"\313\235", 1197, 1199}, /* ˝ */ -{1833046394, (unsigned char*)"\342\212\237", -1, -1}, /* ⊟ */ -{1841346224, (unsigned char*)"\342\212\240", 1198, 1202}, /* ⊠ */ -{1846251367, (unsigned char*)"\342\211\250\357\270\200", -1, -1}, /* ≨︀ */ -{1851429469, (unsigned char*)"\342\210\265", 1201, 1203}, /* ∵ */ -{1854412551, (unsigned char*)"\302\250", -1, -1}, /* ¨ */ -{1859953766, (unsigned char*)"\342\245\247", 1200, 1208}, /* ⥧ */ -{1863308051, (unsigned char*)"\342\226\252", -1, -1}, /* ▪ */ -{1863826860, (unsigned char*)"\342\246\260", 1205, 1207}, /* ⦰ */ -{1868071481, (unsigned char*)"\342\245\241", -1, -1}, /* ⥡ */ -{1868748369, (unsigned char*)"\342\250\223", 1206, 1210}, /* ⨓ */ -{1872038252, (unsigned char*)"\342\212\217", -1, -1}, /* ⊏ */ -{1872362863, (unsigned char*)"\342\211\254", 1209, 1211}, /* ≬ */ -{1880607711, (unsigned char*)"\316\265", -1, -1}, /* ε */ -{1882771727, (unsigned char*)"\342\205\210", 1204, 1221}, /* ⅈ */ -{1896441789, (unsigned char*)"\342\244\223", -1, -1}, /* ⤓ */ -{1897994954, (unsigned char*)"\342\237\277", 1213, -1}, /* ⟿ */ -{1900283327, (unsigned char*)"\342\252\201", 1214, 1216}, /* ⪁ */ -{1900810243, (unsigned char*)"\342\213\226", -1, -1}, /* ⋖ */ -{1900813673, (unsigned char*)"\342\211\266", 1215, 1219}, /* ≶ */ -{1900826373, (unsigned char*)"\342\211\262", -1, -1}, /* ≲ */ -{1900983990, (unsigned char*)"\342\211\225", 1218, 1220}, /* ≕ */ -{1913481565, (unsigned char*)"\342\210\244", -1, -1}, /* ∤ */ -{1916690337, (unsigned char*)"\342\213\204", 1217, 1225}, /* ⋄ */ -{1922124375, (unsigned char*)"\342\251\270", -1, -1}, /* ⩸ */ -{1934515027, (unsigned char*)"\342\206\267", 1222, 1224}, /* ↷ */ -{1942807416, (unsigned char*)"\342\200\231", -1, -1}, /* ’ */ -{1948810028, (unsigned char*)"\342\207\204", 1223, 1227}, /* ⇄ */ -{1949326628, (unsigned char*)"\342\212\221", -1, -1}, /* ⊑ */ -{1959376936, (unsigned char*)"\342\250\202", 1226, 1228}, /* ⨂ */ -{1960073481, (unsigned char*)"\342\204\260", -1, -1}, /* ℰ */ -{1970730262, (unsigned char*)"\342\204\264", 1212, 1246}, /* ℴ */ -{1987029913, (unsigned char*)"\342\216\266", -1, -1}, /* ⎶ */ -{1988767401, (unsigned char*)"\342\251\227", 1230, -1}, /* ⩗ */ -{1992137236, (unsigned char*)"\342\213\265\314\270", 1231, 1233}, /* ⋵̸ */ -{2001917072, (unsigned char*)"\342\235\230", -1, -1}, /* ❘ */ -{2011492714, (unsigned char*)"\342\250\201", 1232, 1236}, /* ⨁ */ -{2012773496, (unsigned char*)"\342\227\257", -1, -1}, /* ◯ */ -{2013199213, (unsigned char*)"\342\250\200", 1235, 1237}, /* ⨀ */ -{2013359921, (unsigned char*)"\342\230\205", -1, -1}, /* ★ */ -{2016091416, (unsigned char*)"\342\245\222", 1234, 1242}, /* ⥒ */ -{2016262531, (unsigned char*)"\342\250\206", -1, -1}, /* ⨆ */ -{2018608240, (unsigned char*)"\342\250\204", 1239, 1241}, /* ⨄ */ -{2020575587, (unsigned char*)"\342\213\200", -1, -1}, /* ⋀ */ -{2022898772, (unsigned char*)"\342\207\224", 1240, 1244}, /* ⇔ */ -{2026494504, (unsigned char*)"\342\211\217\314\270", -1, -1}, /* ≏̸ */ -{2036145450, (unsigned char*)"\342\213\253", 1243, 1245}, /* ⋫ */ -{2037412504, (unsigned char*)"\342\207\214", -1, -1}, /* ⇌ */ -{2067139948, (unsigned char*)"\342\206\277", 1238, 1254}, /* ↿ */ -{2083152187, (unsigned char*)"\342\206\220", -1, -1}, /* ← */ -{2088391403, (unsigned char*)"\342\206\220", 1247, 1249}, /* ← */ -{2088862898, (unsigned char*)"\342\214\212", -1, -1}, /* ⌊ */ -{2088934187, (unsigned char*)"\360\235\224\270", 1248, 1252}, /* 𝔸 */ -{2088938126, (unsigned char*)"\360\235\222\234", -1, -1}, /* 𝒜 */ -{2088940628, (unsigned char*)"\303\204", 1251, 1253}, /* Ä */ -{2088954960, (unsigned char*)"\342\253\247", -1, -1}, /* ⫧ */ -{2088959361, (unsigned char*)"\316\222", 1250, 1258}, /* Β */ -{2088963180, (unsigned char*)"\320\247", -1, -1}, /* Ч */ -{2088970124, (unsigned char*)"\360\235\224\271", 1255, 1257}, /* 𝔹 */ -{2088970144, (unsigned char*)"\302\251", -1, -1}, /* © */ -{2088974063, (unsigned char*)"\342\204\254", 1256, 1260}, /* ℬ */ -{2088994063, (unsigned char*)"\304\212", -1, -1}, /* Ċ */ -{2089001295, (unsigned char*)"\320\202", 1259, 1261}, /* Ђ */ -{2089006061, (unsigned char*)"\342\204\202", -1, -1}, /* ℂ */ -{2089010000, (unsigned char*)"\360\235\222\236", 1229, 1295}, /* 𝒞 */ -{2089011096, (unsigned char*)"\320\205", -1, -1}, /* Ѕ */ -{2089018719, (unsigned char*)"\320\217", 1263, -1}, /* Џ */ -{2089026830, (unsigned char*)"\342\206\241", 1264, 1266}, /* ↡ */ -{2089041998, (unsigned char*)"\360\235\224\273", -1, -1}, /* 𝔻 */ -{2089045937, (unsigned char*)"\360\235\222\237", 1265, 1269}, /* 𝒟 */ -{2089065937, (unsigned char*)"\304\226", -1, -1}, /* Ė */ -{2089077935, (unsigned char*)"\360\235\224\274", 1268, 1270}, /* 𝔼 */ -{2089081874, (unsigned char*)"\342\204\260", -1, -1}, /* ℰ */ -{2089082067, (unsigned char*)"\342\251\263", 1267, 1275}, /* ⩳ */ -{2089084376, (unsigned char*)"\303\213", -1, -1}, /* Ë */ -{2089109106, (unsigned char*)"\320\203", 1272, 1274}, /* Ѓ */ -{2089113872, (unsigned char*)"\360\235\224\275", -1, -1}, /* 𝔽 */ -{2089117811, (unsigned char*)"\342\204\261", 1273, 1277}, /* ℱ */ -{2089137811, (unsigned char*)"\304\240", -1, -1}, /* Ġ */ -{2089149809, (unsigned char*)"\360\235\224\276", 1276, 1278}, /* 𝔾 */ -{2089153748, (unsigned char*)"\360\235\222\242", -1, -1}, /* 𝒢 */ -{2089175535, (unsigned char*)"\320\225", 1271, 1287}, /* Е */ -{2089185746, (unsigned char*)"\342\204\215", -1, -1}, /* ℍ */ -{2089186425, (unsigned char*)"\320\201", 1280, 1282}, /* Ё */ -{2089189685, (unsigned char*)"\342\204\213", -1, -1}, /* ℋ */ -{2089209685, (unsigned char*)"\304\260", 1281, 1285}, /* İ */ -{2089221683, (unsigned char*)"\360\235\225\200", -1, -1}, /* 𝕀 */ -{2089221810, (unsigned char*)"\316\231", 1284, 1286}, /* Ι */ -{2089225622, (unsigned char*)"\342\204\220", -1, -1}, /* ℐ */ -{2089228124, (unsigned char*)"\303\217", 1283, 1291}, /* Ï */ -{2089250676, (unsigned char*)"\320\245", -1, -1}, /* Х */ -{2089252854, (unsigned char*)"\320\214", 1288, 1290}, /* Ќ */ -{2089257620, (unsigned char*)"\360\235\225\201", -1, -1}, /* 𝕁 */ -{2089261559, (unsigned char*)"\360\235\222\245", 1289, 1293}, /* 𝒥 */ -{2089288791, (unsigned char*)"\320\211", -1, -1}, /* Љ */ -{2089293557, (unsigned char*)"\360\235\225\202", 1292, 1294}, /* 𝕂 */ -{2089297496, (unsigned char*)"\360\235\222\246", -1, -1}, /* 𝒦 */ -{2089314183, (unsigned char*)"\342\237\252", 1279, 1312}, /* ⟪ */ -{2089314326, (unsigned char*)"\342\206\236", -1, -1}, /* ↞ */ -{2089329494, (unsigned char*)"\360\235\225\203", 1296, -1}, /* 𝕃 */ -{2089333433, (unsigned char*)"\342\204\222", 1297, 1299}, /* ℒ */ -{2089360665, (unsigned char*)"\320\212", -1, -1}, /* Њ */ -{2089365431, (unsigned char*)"\360\235\225\204", 1298, 1302}, /* 𝕄 */ -{2089369370, (unsigned char*)"\342\204\263", -1, -1}, /* ℳ */ -{2089401368, (unsigned char*)"\342\204\225", 1301, 1303}, /* ℕ */ -{2089405307, (unsigned char*)"\360\235\222\251", -1, -1}, /* 𝒩 */ -{2089437305, (unsigned char*)"\360\235\225\206", 1300, 1308}, /* 𝕆 */ -{2089441244, (unsigned char*)"\360\235\222\252", -1, -1}, /* 𝒪 */ -{2089443746, (unsigned char*)"\303\226", 1305, 1307}, /* Ö */ -{2089473242, (unsigned char*)"\342\204\231", -1, -1}, /* ℙ */ -{2089477181, (unsigned char*)"\360\235\222\253", 1306, 1310}, /* 𝒫 */ -{2089479758, (unsigned char*)"\42", -1, -1}, /* " */ -{2089509179, (unsigned char*)"\342\204\232", 1309, 1311}, /* ℚ */ -{2089513118, (unsigned char*)"\360\235\222\254", -1, -1}, /* 𝒬 */ -{2089529805, (unsigned char*)"\342\237\253", 1304, 1320}, /* ⟫ */ -{2089529948, (unsigned char*)"\342\206\240", -1, -1}, /* ↠ */ -{2089538172, (unsigned char*)"\320\250", 1313, 1315}, /* Ш */ -{2089545116, (unsigned char*)"\342\204\235", -1, -1}, /* ℝ */ -{2089549055, (unsigned char*)"\342\204\233", 1314, 1318}, /* ℛ */ -{2089578539, (unsigned char*)"\342\245\223", -1, -1}, /* ⥓ */ -{2089581053, (unsigned char*)"\360\235\225\212", 1317, 1319}, /* 𝕊 */ -{2089583311, (unsigned char*)"\342\210\232", -1, -1}, /* √ */ -{2089584992, (unsigned char*)"\360\235\222\256", 1316, 1324}, /* 𝒮 */ -{2089586015, (unsigned char*)"\342\213\206", -1, -1}, /* ⋆ */ -{2089586088, (unsigned char*)"\320\246", 1321, 1323}, /* Ц */ -{2089616990, (unsigned char*)"\360\235\225\213", -1, -1}, /* 𝕋 */ -{2089620929, (unsigned char*)"\360\235\222\257", 1322, 1326}, /* 𝒯 */ -{2089637759, (unsigned char*)"\342\206\237", -1, -1}, /* ↟ */ -{2089652927, (unsigned char*)"\360\235\225\214", 1325, 1327}, /* 𝕌 */ -{2089654118, (unsigned char*)"\317\222", -1, -1}, /* ϒ */ -{2089656866, (unsigned char*)"\360\235\222\260", 1195, 1461}, /* 𝒰 */ -{2089659368, (unsigned char*)"\303\234", -1, -1}, /* Ü */ -{2089674224, (unsigned char*)"\342\253\253", 1329, -1}, /* ⫫ */ -{2089678054, (unsigned char*)"\342\200\226", 1330, 1332}, /* ‖ */ -{2089688864, (unsigned char*)"\360\235\225\215", -1, -1}, /* 𝕍 */ -{2089692803, (unsigned char*)"\360\235\222\261", 1331, 1335}, /* 𝒱 */ -{2089724801, (unsigned char*)"\360\235\225\216", -1, -1}, /* 𝕎 */ -{2089728740, (unsigned char*)"\360\235\222\262", 1334, 1336}, /* 𝒲 */ -{2089746171, (unsigned char*)"\320\257", -1, -1}, /* Я */ -{2089754883, (unsigned char*)"\320\207", 1333, 1341}, /* Ї */ -{2089760738, (unsigned char*)"\360\235\225\217", -1, -1}, /* 𝕏 */ -{2089764677, (unsigned char*)"\360\235\222\263", 1338, 1340}, /* 𝒳 */ -{2089767951, (unsigned char*)"\320\256", -1, -1}, /* Ю */ -{2089789731, (unsigned char*)"\320\226", 1339, 1343}, /* Ж */ -{2089796675, (unsigned char*)"\360\235\225\220", -1, -1}, /* 𝕐 */ -{2089800614, (unsigned char*)"\360\235\222\264", 1342, 1344}, /* 𝒴 */ -{2089803116, (unsigned char*)"\305\270", -1, -1}, /* Ÿ */ -{2089820614, (unsigned char*)"\305\273", 1337, 1354}, /* Ż */ -{2089821849, (unsigned char*)"\316\226", -1, -1}, /* Ζ */ -{2089832612, (unsigned char*)"\342\204\244", 1346, -1}, /* ℤ */ -{2089836551, (unsigned char*)"\360\235\222\265", 1347, 1349}, /* 𝒵 */ -{2090082684, (unsigned char*)"\342\251\234", -1, -1}, /* ⩜ */ -{2090082702, (unsigned char*)"\342\251\232", 1348, 1352}, /* ⩚ */ -{2090082784, (unsigned char*)"\342\246\244", -1, -1}, /* ⦤ */ -{2090084152, (unsigned char*)"\342\253\255", 1351, 1353}, /* ⫭ */ -{2090084171, (unsigned char*)"\360\235\225\222", -1, -1}, /* 𝕒 */ -{2090085027, (unsigned char*)"\342\211\213", 1350, 1358}, /* ≋ */ -{2090085240, (unsigned char*)"\47", -1, -1}, /* ' */ -{2090088110, (unsigned char*)"\360\235\222\266", 1355, 1357}, /* 𝒶 */ -{2090090612, (unsigned char*)"\303\244", -1, -1}, /* ä */ -{2090106022, (unsigned char*)"\342\216\265", 1356, 1360}, /* ⎵ */ -{2090109345, (unsigned char*)"\316\262", -1, -1}, /* β */ -{2090109352, (unsigned char*)"\342\204\266", 1359, 1361}, /* ℶ */ -{2090119000, (unsigned char*)"\342\214\220", -1, -1}, /* ⌐ */ -{2090120108, (unsigned char*)"\360\235\225\223", 1345, 1379}, /* 𝕓 */ -{2090120342, (unsigned char*)"\342\225\220", -1, -1}, /* ═ */ -{2090120356, (unsigned char*)"\342\225\221", 1363, -1}, /* ║ */ -{2090120374, (unsigned char*)"\342\224\200", 1364, 1366}, /* ─ */ -{2090120388, (unsigned char*)"\342\224\202", -1, -1}, /* │ */ -{2090124047, (unsigned char*)"\360\235\222\267", 1365, 1369}, /* 𝒷 */ -{2090124240, (unsigned char*)"\342\210\275", -1, -1}, /* ∽ */ -{2090124437, (unsigned char*)"\134", 1368, 1370}, /* \ */ -{2090126516, (unsigned char*)"\342\200\242", -1, -1}, /* • */ -{2090126553, (unsigned char*)"\342\211\216", 1367, 1375}, /* ≎ */ -{2090140812, (unsigned char*)"\342\210\251\357\270\200", -1, -1}, /* ∩︀ */ -{2090141966, (unsigned char*)"\342\207\223", 1372, 1374}, /* ⇓ */ -{2090144047, (unsigned char*)"\304\213", -1, -1}, /* ċ */ -{2090145103, (unsigned char*)"\302\242", 1373, 1377}, /* ¢ */ -{2090148012, (unsigned char*)"\321\207", -1, -1}, /* ч */ -{2090149028, (unsigned char*)"\342\245\245", 1376, 1378}, /* ⥥ */ -{2090149544, (unsigned char*)"\342\247\203", -1, -1}, /* ⧃ */ -{2090149574, (unsigned char*)"\313\206", 1371, 1387}, /* ˆ */ -{2090149576, (unsigned char*)"\342\211\227", -1, -1}, /* ≗ */ -{2090155956, (unsigned char*)"\342\210\201", 1380, 1382}, /* ∁ */ -{2090155980, (unsigned char*)"\342\211\205", -1, -1}, /* ≅ */ -{2090156045, (unsigned char*)"\360\235\225\224", 1381, 1385}, /* 𝕔 */ -{2090156064, (unsigned char*)"\302\251", -1, -1}, /* © */ -{2090159984, (unsigned char*)"\360\235\222\270", 1384, 1386}, /* 𝒸 */ -{2090160562, (unsigned char*)"\342\253\217", -1, -1}, /* ⫏ */ -{2090160576, (unsigned char*)"\342\253\220", 1383, 1391}, /* ⫐ */ -{2090162592, (unsigned char*)"\342\210\252\357\270\200", -1, -1}, /* ∪︀ */ -{2090176814, (unsigned char*)"\342\206\223", 1388, 1390}, /* ↓ */ -{2090176837, (unsigned char*)"\342\200\220", -1, -1}, /* ‐ */ -{2090181073, (unsigned char*)"\342\211\221", 1389, 1393}, /* ≑ */ -{2090184960, (unsigned char*)"\342\213\204", -1, -1}, /* ⋄ */ -{2090186127, (unsigned char*)"\321\222", 1392, 1394}, /* ђ */ -{2090191982, (unsigned char*)"\360\235\225\225", -1, -1}, /* 𝕕 */ -{2090195921, (unsigned char*)"\360\235\222\271", 1362, 1428}, /* 𝒹 */ -{2090195928, (unsigned char*)"\321\225", -1, -1}, /* ѕ */ -{2090196311, (unsigned char*)"\342\247\266", 1396, -1}, /* ⧶ */ -{2090197496, (unsigned char*)"\342\226\277", 1397, 1399}, /* ▿ */ -{2090203551, (unsigned char*)"\321\237", -1, -1}, /* џ */ -{2090214632, (unsigned char*)"\342\211\226", 1398, 1402}, /* ≖ */ -{2090215921, (unsigned char*)"\304\227", -1, -1}, /* ė */ -{2090225850, (unsigned char*)"\342\200\203", 1401, 1403}, /*   */ -{2090226939, (unsigned char*)"\342\200\202", -1, -1}, /*   */ -{2090227919, (unsigned char*)"\360\235\225\226", 1400, 1408}, /* 𝕖 */ -{2090228525, (unsigned char*)"\342\213\225", -1, -1}, /* ⋕ */ -{2090229110, (unsigned char*)"\316\265", 1405, 1407}, /* ε */ -{2090231858, (unsigned char*)"\342\204\257", -1, -1}, /* ℯ */ -{2090232051, (unsigned char*)"\342\211\202", 1406, 1410}, /* ≂ */ -{2090234360, (unsigned char*)"\303\253", -1, -1}, /* ë */ -{2090234528, (unsigned char*)"\342\202\254", 1409, 1411}, /* € */ -{2090237297, (unsigned char*)"\41", -1, -1}, /* ! */ -{2090260108, (unsigned char*)"\342\231\255", 1404, 1420}, /* ♭ */ -{2090262734, (unsigned char*)"\306\222", -1, -1}, /* ƒ */ -{2090263856, (unsigned char*)"\360\235\225\227", 1413, 1415}, /* 𝕗 */ -{2090263927, (unsigned char*)"\342\213\224", -1, -1}, /* ⋔ */ -{2090267795, (unsigned char*)"\360\235\222\273", 1414, 1418}, /* 𝒻 */ -{2090285714, (unsigned char*)"\342\207\224", -1, -1}, /* ⇔ */ -{2090287795, (unsigned char*)"\304\241", 1417, 1419}, /* ġ */ -{2090288947, (unsigned char*)"\342\211\247", -1, -1}, /* ≧ */ -{2090289008, (unsigned char*)"\342\213\233\357\270\200", 1416, 1424}, /* ⋛︀ */ -{2090293938, (unsigned char*)"\321\223", -1, -1}, /* ѓ */ -{2090298219, (unsigned char*)"\342\252\212", 1421, 1423}, /* ⪊ */ -{2090298352, (unsigned char*)"\342\252\210", -1, -1}, /* ⪈ */ -{2090299793, (unsigned char*)"\360\235\225\230", 1422, 1426}, /* 𝕘 */ -{2090303732, (unsigned char*)"\342\204\212", -1, -1}, /* ℊ */ -{2090303925, (unsigned char*)"\342\211\263", 1425, 1427}, /* ≳ */ -{2090304806, (unsigned char*)"\342\252\247", -1, -1}, /* ⪧ */ -{2090307317, (unsigned char*)"\342\211\251\357\270\200", 1412, 1445}, /* ≩︀ */ -{2090320352, (unsigned char*)"\302\275", -1, -1}, /* ½ */ -{2090320562, (unsigned char*)"\342\206\224", 1429, -1}, /* ↔ */ -{2090321090, (unsigned char*)"\342\204\217", 1430, 1432}, /* ℏ */ -{2090335730, (unsigned char*)"\360\235\225\231", -1, -1}, /* 𝕙 */ -{2090339669, (unsigned char*)"\360\235\222\275", 1431, 1435}, /* 𝒽 */ -{2090360367, (unsigned char*)"\320\265", -1, -1}, /* е */ -{2090369456, (unsigned char*)"\342\212\267", 1434, 1436}, /* ⊷ */ -{2090371257, (unsigned char*)"\321\221", -1, -1}, /* ё */ -{2090371667, (unsigned char*)"\360\235\225\232", 1433, 1441}, /* 𝕚 */ -{2090371794, (unsigned char*)"\316\271", -1, -1}, /* ι */ -{2090375606, (unsigned char*)"\360\235\222\276", 1438, 1440}, /* 𝒾 */ -{2090375800, (unsigned char*)"\342\210\210", -1, -1}, /* ∈ */ -{2090378108, (unsigned char*)"\303\257", 1439, 1443}, /* ï */ -{2090407604, (unsigned char*)"\360\235\225\233", -1, -1}, /* 𝕛 */ -{2090411543, (unsigned char*)"\360\235\222\277", 1442, 1444}, /* 𝒿 */ -{2090429462, (unsigned char*)"\342\207\220", -1, -1}, /* ⇐ */ -{2090435508, (unsigned char*)"\321\205", 1437, 1453}, /* х */ -{2090436524, (unsigned char*)"\342\245\242", -1, -1}, /* ⥢ */ -{2090437686, (unsigned char*)"\321\234", 1446, 1448}, /* ќ */ -{2090443541, (unsigned char*)"\360\235\225\234", -1, -1}, /* 𝕜 */ -{2090447480, (unsigned char*)"\360\235\223\200", 1447, 1451}, /* 𝓀 */ -{2090464167, (unsigned char*)"\342\237\250", -1, -1}, /* ⟨ */ -{2090464310, (unsigned char*)"\342\206\220", 1450, 1452}, /* ← */ -{2090464363, (unsigned char*)"\342\252\255", -1, -1}, /* ⪭ */ -{2090466571, (unsigned char*)"\173", 1449, 1457}, /* { */ -{2090467065, (unsigned char*)"\342\244\266", -1, -1}, /* ⤶ */ -{2090467600, (unsigned char*)"\342\206\262", 1454, 1456}, /* ↲ */ -{2090468632, (unsigned char*)"\342\211\246", -1, -1}, /* ≦ */ -{2090468688, (unsigned char*)"\342\213\232\357\270\200", 1455, 1459}, /* ⋚︀ */ -{2090473623, (unsigned char*)"\321\231", -1, -1}, /* љ */ -{2090477904, (unsigned char*)"\342\252\211", 1458, 1460}, /* ⪉ */ -{2090478037, (unsigned char*)"\342\252\207", -1, -1}, /* ⪇ */ -{2090479478, (unsigned char*)"\360\235\225\235", 1395, 1528}, /* 𝕝 */ -{2090479808, (unsigned char*)"\342\247\253", -1, -1}, /* ⧫ */ -{2090480084, (unsigned char*)"\50", 1462, -1}, /* ( */ -{2090483417, (unsigned char*)"\360\235\223\201", 1463, 1465}, /* 𝓁 */ -{2090483610, (unsigned char*)"\342\211\262", -1, -1}, /* ≲ */ -{2090483863, (unsigned char*)"\133", 1464, 1468}, /* [ */ -{2090484491, (unsigned char*)"\342\252\246", -1, -1}, /* ⪦ */ -{2090484992, (unsigned char*)"\342\227\203", 1467, 1469}, /* ◃ */ -{2090487002, (unsigned char*)"\342\211\250\357\270\200", -1, -1}, /* ≨︀ */ -{2090499752, (unsigned char*)"\302\257", 1466, 1474}, /* ¯ */ -{2090500036, (unsigned char*)"\342\231\202", -1, -1}, /* ♂ */ -{2090500051, (unsigned char*)"\342\234\240", 1471, 1473}, /* ✠ */ -{2090507940, (unsigned char*)"\342\211\253\314\270", -1, -1}, /* ≫̸ */ -{2090511729, (unsigned char*)"\342\253\233", 1472, 1476}, /* ⫛ */ -{2090511764, (unsigned char*)"\342\200\246", -1, -1}, /* … */ -{2090513385, (unsigned char*)"\342\211\252\314\270", 1475, 1477}, /* ≪̸ */ -{2090515415, (unsigned char*)"\360\235\225\236", -1, -1}, /* 𝕞 */ -{2090519354, (unsigned char*)"\360\235\223\202", 1470, 1487}, /* 𝓂 */ -{2090536041, (unsigned char*)"\342\210\240\342\203\222", -1, -1}, /* ∠⃒ */ -{2090536073, (unsigned char*)"\342\251\260\314\270", 1479, -1}, /* ⩰̸ */ -{2090537304, (unsigned char*)"\302\240", 1480, 1482}, /*   */ -{2090537799, (unsigned char*)"\342\251\203", -1, -1}, /* ⩃ */ -{2090538459, (unsigned char*)"\342\251\202", 1481, 1485}, /* ⩂ */ -{2090542288, (unsigned char*)"\342\211\261", -1, -1}, /* ≱ */ -{2090542290, (unsigned char*)"\342\251\276\314\270", 1484, 1486}, /* ⩾̸ */ -{2090542784, (unsigned char*)"\342\211\257", -1, -1}, /* ≯ */ -{2090544915, (unsigned char*)"\342\213\272", 1483, 1491}, /* ⋺ */ -{2090545497, (unsigned char*)"\321\232", -1, -1}, /* њ */ -{2090547701, (unsigned char*)"\342\200\245", 1488, 1490}, /* ‥ */ -{2090547733, (unsigned char*)"\342\211\260", -1, -1}, /* ≰ */ -{2090547735, (unsigned char*)"\342\251\275\314\270", 1489, 1493}, /* ⩽̸ */ -{2090548941, (unsigned char*)"\342\210\244", -1, -1}, /* ∤ */ -{2090551352, (unsigned char*)"\360\235\225\237", 1492, 1494}, /* 𝕟 */ -{2090551958, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ -{2090552506, (unsigned char*)"\342\252\257\314\270", 1478, 1512}, /* ⪯̸ */ -{2090555278, (unsigned char*)"\342\252\260\314\270", -1, -1}, /* ⪰̸ */ -{2090555291, (unsigned char*)"\360\235\223\203", 1496, -1}, /* 𝓃 */ -{2090555484, (unsigned char*)"\342\211\201", 1497, 1499}, /* ≁ */ -{2090555869, (unsigned char*)"\342\212\204", -1, -1}, /* ⊄ */ -{2090555883, (unsigned char*)"\342\212\205", 1498, 1502}, /* ⊅ */ -{2090556506, (unsigned char*)"\342\211\271", -1, -1}, /* ≹ */ -{2090556666, (unsigned char*)"\342\211\270", 1501, 1503}, /* ≸ */ -{2090558490, (unsigned char*)"\342\211\215\342\203\222", -1, -1}, /* ≍⃒ */ -{2090558677, (unsigned char*)"\342\211\245\342\203\222", 1500, 1508}, /* ≥⃒ */ -{2090558692, (unsigned char*)"\76\342\203\222", -1, -1}, /* >⃒ */ -{2090558842, (unsigned char*)"\342\211\244\342\203\222", 1505, 1507}, /* ≤⃒ */ -{2090558857, (unsigned char*)"\74\342\203\222", -1, -1}, /* <⃒ */ -{2090572156, (unsigned char*)"\342\212\233", 1506, 1510}, /* ⊛ */ -{2090574002, (unsigned char*)"\342\212\232", -1, -1}, /* ⊚ */ -{2090575095, (unsigned char*)"\342\250\270", 1509, 1511}, /* ⨸ */ -{2090575291, (unsigned char*)"\342\212\231", -1, -1}, /* ⊙ */ -{2090578552, (unsigned char*)"\313\233", 1504, 1520}, /* ˛ */ -{2090580703, (unsigned char*)"\342\210\256", -1, -1}, /* ∮ */ -{2090584878, (unsigned char*)"\342\246\266", 1513, 1515}, /* ⦶ */ -{2090587289, (unsigned char*)"\360\235\225\240", -1, -1}, /* 𝕠 */ -{2090587895, (unsigned char*)"\342\246\267", 1514, 1518}, /* ⦷ */ -{2090590160, (unsigned char*)"\302\252", -1, -1}, /* ª */ -{2090590167, (unsigned char*)"\302\272", 1517, 1519}, /* º */ -{2090590535, (unsigned char*)"\342\251\226", -1, -1}, /* ⩖ */ -{2090591228, (unsigned char*)"\342\204\264", 1516, 1524}, /* ℴ */ -{2090591618, (unsigned char*)"\342\212\230", -1, -1}, /* ⊘ */ -{2090593730, (unsigned char*)"\303\266", 1521, 1523}, /* ö */ -{2090608041, (unsigned char*)"\302\266", -1, -1}, /* ¶ */ -{2090608060, (unsigned char*)"\342\210\202", 1522, 1526}, /* ∂ */ -{2090612412, (unsigned char*)"\342\212\245", -1, -1}, /* ⊥ */ -{2090615388, (unsigned char*)"\317\225", 1525, 1527}, /* ϕ */ -{2090620137, (unsigned char*)"\53", -1, -1}, /* + */ -{2090623226, (unsigned char*)"\360\235\225\241", 1495, 1561}, /* 𝕡 */ -{2090626008, (unsigned char*)"\342\252\267", -1, -1}, /* ⪷ */ -{2090626127, (unsigned char*)"\342\211\272", 1529, -1}, /* ≺ */ -{2090626394, (unsigned char*)"\342\252\265", 1530, 1532}, /* ⪵ */ -{2090626458, (unsigned char*)"\342\210\217", -1, -1}, /* ∏ */ -{2090626470, (unsigned char*)"\342\210\235", 1531, 1535}, /* ∝ */ -{2090627165, (unsigned char*)"\360\235\223\205", -1, -1}, /* 𝓅 */ -{2090645084, (unsigned char*)"\342\207\222", 1534, 1536}, /* ⇒ */ -{2090652146, (unsigned char*)"\342\245\244", -1, -1}, /* ⥤ */ -{2090652577, (unsigned char*)"\342\250\214", 1533, 1541}, /* ⨌ */ -{2090659163, (unsigned char*)"\360\235\225\242", -1, -1}, /* 𝕢 */ -{2090663102, (unsigned char*)"\360\235\223\206", 1538, 1540}, /* 𝓆 */ -{2090665678, (unsigned char*)"\42", -1, -1}, /* " */ -{2090679424, (unsigned char*)"\342\210\275\314\261", 1539, 1543}, /* ∽̱ */ -{2090679789, (unsigned char*)"\342\237\251", -1, -1}, /* ⟩ */ -{2090679932, (unsigned char*)"\342\206\222", 1542, 1544}, /* → */ -{2090682193, (unsigned char*)"\175", -1, -1}, /* } */ -{2090682687, (unsigned char*)"\342\244\267", 1537, 1553}, /* ⤷ */ -{2090683222, (unsigned char*)"\342\206\263", -1, -1}, /* ↳ */ -{2090683721, (unsigned char*)"\342\204\234", 1546, 1548}, /* ℜ */ -{2090683795, (unsigned char*)"\342\226\255", -1, -1}, /* ▭ */ -{2090687460, (unsigned char*)"\317\261", 1547, 1551}, /* ϱ */ -{2090688501, (unsigned char*)"\313\232", -1, -1}, /* ˚ */ -{2090695100, (unsigned char*)"\360\235\225\243", 1550, 1552}, /* 𝕣 */ -{2090695706, (unsigned char*)"\51", -1, -1}, /* ) */ -{2090699039, (unsigned char*)"\360\235\223\207", 1549, 1557}, /* 𝓇 */ -{2090699485, (unsigned char*)"\135", -1, -1}, /* ] */ -{2090700614, (unsigned char*)"\342\226\271", 1554, 1556}, /* ▹ */ -{2090717484, (unsigned char*)"\342\252\270", -1, -1}, /* ⪸ */ -{2090717870, (unsigned char*)"\342\252\266", 1555, 1559}, /* ⪶ */ -{2090719039, (unsigned char*)"\342\213\205", -1, -1}, /* ⋅ */ -{2090719732, (unsigned char*)"\302\247", 1558, 1560}, /* § */ -{2090720051, (unsigned char*)"\73", -1, -1}, /* ; */ -{2090720425, (unsigned char*)"\342\234\266", 1545, 1578}, /* ✶ */ -{2090723004, (unsigned char*)"\321\210", -1, -1}, /* ш */ -{2090724403, (unsigned char*)"\342\211\203", 1562, -1}, /* ≃ */ -{2090724405, (unsigned char*)"\342\252\236", 1563, 1565}, /* ⪞ */ -{2090724410, (unsigned char*)"\342\252\235", -1, -1}, /* ⪝ */ -{2090728626, (unsigned char*)"\342\210\243", 1564, 1568}, /* ∣ */ -{2090728990, (unsigned char*)"\342\252\254", -1, -1}, /* ⪬ */ -{2090730901, (unsigned char*)"\342\247\204", 1567, 1569}, /* ⧄ */ -{2090731037, (unsigned char*)"\360\235\225\244", -1, -1}, /* 𝕤 */ -{2090731643, (unsigned char*)"\342\210\245", 1566, 1574}, /* ∥ */ -{2090733380, (unsigned char*)"\342\226\252", -1, -1}, /* ▪ */ -{2090734976, (unsigned char*)"\360\235\223\210", 1571, 1573}, /* 𝓈 */ -{2090735999, (unsigned char*)"\342\230\206", -1, -1}, /* ☆ */ -{2090737076, (unsigned char*)"\342\253\205", 1572, 1576}, /* ⫅ */ -{2090737108, (unsigned char*)"\342\212\206", -1, -1}, /* ⊆ */ -{2090737139, (unsigned char*)"\342\211\273", 1575, 1577}, /* ≻ */ -{2090737506, (unsigned char*)"\342\231\252", -1, -1}, /* ♪ */ -{2090737518, (unsigned char*)"\302\271", 1570, 1586}, /* ¹ */ -{2090737519, (unsigned char*)"\302\262", -1, -1}, /* ² */ -{2090737520, (unsigned char*)"\302\263", 1579, 1581}, /* ³ */ -{2090737538, (unsigned char*)"\342\253\206", -1, -1}, /* ⫆ */ -{2090737570, (unsigned char*)"\342\212\207", 1580, 1584}, /* ⊇ */ -{2090752888, (unsigned char*)"\342\216\264", -1, -1}, /* ⎴ */ -{2090752895, (unsigned char*)"\342\207\221", 1583, 1585}, /* ⇑ */ -{2090754976, (unsigned char*)"\342\203\233", -1, -1}, /* ⃛ */ -{2090759957, (unsigned char*)"\342\245\243", 1582, 1590}, /* ⥣ */ -{2090760388, (unsigned char*)"\342\210\255", -1, -1}, /* ∭ */ -{2090766606, (unsigned char*)"\342\244\250", 1587, 1589}, /* ⤨ */ -{2090766974, (unsigned char*)"\360\235\225\245", -1, -1}, /* 𝕥 */ -{2090767068, (unsigned char*)"\342\244\251", 1588, 1592}, /* ⤩ */ -{2090770009, (unsigned char*)"\342\211\234", -1, -1}, /* ≜ */ -{2090770913, (unsigned char*)"\360\235\223\211", 1591, 1593}, /* 𝓉 */ -{2090770920, (unsigned char*)"\321\206", -1, -1}, /* ц */ -{2090787743, (unsigned char*)"\342\206\221", 1328, 1860}, /* ↑ */ -{2090788832, (unsigned char*)"\342\207\225", -1, -1}, /* ⇕ */ -{2090789360, (unsigned char*)"\342\253\250", 1595, -1}, /* ⫨ */ -{2090802911, (unsigned char*)"\360\235\225\246", 1596, 1598}, /* 𝕦 */ -{2090804102, (unsigned char*)"\317\205", -1, -1}, /* υ */ -{2090806850, (unsigned char*)"\360\235\223\212", 1597, 1601}, /* 𝓊 */ -{2090808425, (unsigned char*)"\342\226\265", -1, -1}, /* ▵ */ -{2090809352, (unsigned char*)"\303\274", 1600, 1602}, /* ü */ -{2090823680, (unsigned char*)"\342\206\225", -1, -1}, /* ↕ */ -{2090828038, (unsigned char*)"\174", 1599, 1607}, /* | */ -{2090838848, (unsigned char*)"\360\235\225\247", -1, -1}, /* 𝕧 */ -{2090842787, (unsigned char*)"\360\235\223\213", 1604, 1606}, /* 𝓋 */ -{2090874785, (unsigned char*)"\360\235\225\250", -1, -1}, /* 𝕨 */ -{2090878724, (unsigned char*)"\360\235\223\214", 1605, 1609}, /* 𝓌 */ -{2090897169, (unsigned char*)"\342\213\202", -1, -1}, /* ⋂ */ -{2090897829, (unsigned char*)"\342\213\203", 1608, 1610}, /* ⋃ */ -{2090908059, (unsigned char*)"\342\237\274", -1, -1}, /* ⟼ */ -{2090909415, (unsigned char*)"\342\213\273", 1603, 1620}, /* ⋻ */ -{2090910722, (unsigned char*)"\360\235\225\251", -1, -1}, /* 𝕩 */ -{2090914661, (unsigned char*)"\360\235\223\215", 1612, -1}, /* 𝓍 */ -{2090917981, (unsigned char*)"\342\213\201", 1613, 1615}, /* ⋁ */ -{2090931003, (unsigned char*)"\321\217", -1, -1}, /* я */ -{2090939715, (unsigned char*)"\321\227", 1614, 1618}, /* ї */ -{2090946659, (unsigned char*)"\360\235\225\252", -1, -1}, /* 𝕪 */ -{2090950598, (unsigned char*)"\360\235\223\216", 1617, 1619}, /* 𝓎 */ -{2090952783, (unsigned char*)"\321\216", -1, -1}, /* ю */ -{2090953100, (unsigned char*)"\303\277", 1616, 1624}, /* ÿ */ -{2090970598, (unsigned char*)"\305\274", -1, -1}, /* ż */ -{2090971833, (unsigned char*)"\316\266", 1621, 1623}, /* ζ */ -{2090974563, (unsigned char*)"\320\266", -1, -1}, /* ж */ -{2090982596, (unsigned char*)"\360\235\225\253", 1622, 1626}, /* 𝕫 */ -{2090986535, (unsigned char*)"\360\235\223\217", -1, -1}, /* 𝓏 */ -{2090991246, (unsigned char*)"\342\200\214", 1625, 1627}, /* ‌ */ -{2092993778, (unsigned char*)"\342\251\276\314\270", -1, -1}, /* ⩾̸ */ -{2096369037, (unsigned char*)"\302\256", 1611, 1645}, /* ® */ -{2096369038, (unsigned char*)"\342\223\210", -1, -1}, /* Ⓢ */ -{2100003394, (unsigned char*)"\342\250\220", 1629, -1}, /* ⨐ */ -{2100181273, (unsigned char*)"\342\245\220", 1630, 1632}, /* ⥐ */ -{2104021522, (unsigned char*)"\342\210\235", -1, -1}, /* ∝ */ -{2106472735, (unsigned char*)"\342\206\252", 1631, 1635}, /* ↪ */ -{2121101659, (unsigned char*)"\342\207\220", -1, -1}, /* ⇐ */ -{2122916393, (unsigned char*)"\342\207\215", 1634, 1636}, /* ⇍ */ -{2134690458, (unsigned char*)"\342\206\240", -1, -1}, /* ↠ */ -{2141591030, (unsigned char*)"\342\252\205", 1633, 1641}, /* ⪅ */ -{2144685319, (unsigned char*)"\342\201\240", -1, -1}, /* ⁠ */ -{2149491562, (unsigned char*)"\342\200\212", 1638, 1640}, /*   */ -{2149634711, (unsigned char*)"\342\211\217", -1, -1}, /* ≏ */ -{2155310621, (unsigned char*)"\342\245\230", 1639, 1643}, /* ⥘ */ -{2162788206, (unsigned char*)"\342\207\201", -1, -1}, /* ⇁ */ -{2173091356, (unsigned char*)"\342\212\250", 1642, 1644}, /* ⊨ */ -{2175295137, (unsigned char*)"\342\210\267", -1, -1}, /* ∷ */ -{2177599195, (unsigned char*)"\342\212\244", 1637, 1653}, /* ⊤ */ -{2183831452, (unsigned char*)"\342\212\264", -1, -1}, /* ⊴ */ -{2202616365, (unsigned char*)"\342\211\256", 1646, 1648}, /* ≮ */ -{2206594527, (unsigned char*)"\342\211\241\342\203\245", -1, -1}, /* ≡⃥ */ -{2224616812, (unsigned char*)"\342\206\251", 1647, 1651}, /* ↩ */ -{2226125799, (unsigned char*)"\342\207\232", -1, -1}, /* ⇚ */ -{2232084207, (unsigned char*)"\342\212\262", 1650, 1652}, /* ⊲ */ -{2234283796, (unsigned char*)"\342\252\225", -1, -1}, /* ⪕ */ -{2238028310, (unsigned char*)"\342\211\252", 1649, 1657}, /* ≪ */ -{2242588389, (unsigned char*)"\342\210\244", -1, -1}, /* ∤ */ -{2247186016, (unsigned char*)"\342\210\205", 1654, 1656}, /* ∅ */ -{2251230282, (unsigned char*)"\342\211\253\314\270", -1, -1}, /* ≫̸ */ -{2251699570, (unsigned char*)"\342\245\256", 1655, 1659}, /* ⥮ */ -{2253884103, (unsigned char*)"\342\211\245", -1, -1}, /* ≥ */ -{2267324439, (unsigned char*)"\342\200\213", 1658, 1660}, /* ​ */ -{2267952836, (unsigned char*)"\342\201\237\342\200\212", -1, -1}, /*    */ -{2268217074, (unsigned char*)"\342\212\236", 1628, 1694}, /* ⊞ */ -{2271375713, (unsigned char*)"\342\211\263", -1, -1}, /* ≳ */ -{2273834870, (unsigned char*)"\342\226\270", 1662, -1}, /* ▸ */ -{2284095252, (unsigned char*)"\342\252\212", 1663, 1665}, /* ⪊ */ -{2293000194, (unsigned char*)"\342\250\264", -1, -1}, /* ⨴ */ -{2299342640, (unsigned char*)"\342\252\213", 1664, 1668}, /* ⪋ */ -{2299973113, (unsigned char*)"\342\227\212", -1, -1}, /* ◊ */ -{2311432548, (unsigned char*)"\342\204\254", 1667, 1669}, /* ℬ */ -{2313488869, (unsigned char*)"\342\210\205", -1, -1}, /* ∅ */ -{2318267363, (unsigned char*)"\342\212\233", 1666, 1674}, /* ⊛ */ -{2324068560, (unsigned char*)"\342\211\272", -1, -1}, /* ≺ */ -{2329784168, (unsigned char*)"\342\206\230", 1671, 1673}, /* ↘ */ -{2345835453, (unsigned char*)"\342\213\214", -1, -1}, /* ⋌ */ -{2347178782, (unsigned char*)"\342\212\231", 1672, 1676}, /* ⊙ */ -{2349785324, (unsigned char*)"\342\212\202\342\203\222", -1, -1}, /* ⊂⃒ */ -{2350516007, (unsigned char*)"\342\237\210", 1675, 1677}, /* ⟈ */ -{2351825126, (unsigned char*)"\342\204\244", -1, -1}, /* ℤ */ -{2352217687, (unsigned char*)"\342\212\272", 1670, 1686}, /* ⊺ */ -{2359924770, (unsigned char*)"\342\250\227", -1, -1}, /* ⨗ */ -{2361282137, (unsigned char*)"\342\245\234", 1679, 1681}, /* ⥜ */ -{2369427406, (unsigned char*)"\342\210\235", -1, -1}, /* ∝ */ -{2373010998, (unsigned char*)"\342\210\202", 1680, 1684}, /* ∂ */ -{2373147889, (unsigned char*)"\342\212\265", -1, -1}, /* ⊵ */ -{2391645795, (unsigned char*)"\342\245\227", 1683, 1685}, /* ⥗ */ -{2404639391, (unsigned char*)"\342\216\265", -1, -1}, /* ⎵ */ -{2408379192, (unsigned char*)"\342\226\264", 1682, 1690}, /* ▴ */ -{2411113092, (unsigned char*)"\342\207\206", -1, -1}, /* ⇆ */ -{2417128742, (unsigned char*)"\342\214\236", 1687, 1689}, /* ⌞ */ -{2424328170, (unsigned char*)"\342\210\262", -1, -1}, /* ∲ */ -{2424932121, (unsigned char*)"\342\210\201", 1688, 1692}, /* ∁ */ -{2440126227, (unsigned char*)"\342\207\212", -1, -1}, /* ⇊ */ -{2444718873, (unsigned char*)"\342\252\257\314\270", 1691, 1693}, /* ⪯̸ */ -{2464644935, (unsigned char*)"\174", -1, -1}, /* | */ -{2485542391, (unsigned char*)"\342\251\273", 1678, 1711}, /* ⩻ */ -{2500478578, (unsigned char*)"\342\250\244", -1, -1}, /* ⨤ */ -{2500538373, (unsigned char*)"\342\245\262", 1695, -1}, /* ⥲ */ -{2506612921, (unsigned char*)"\342\245\236", 1696, 1698}, /* ⥞ */ -{2511579913, (unsigned char*)"\342\210\264", -1, -1}, /* ∴ */ -{2515928295, (unsigned char*)"\342\207\216", 1697, 1701}, /* ⇎ */ -{2519197257, (unsigned char*)"\342\251\275", -1, -1}, /* ⩽ */ -{2525866376, (unsigned char*)"\342\245\246", 1700, 1702}, /* ⥦ */ -{2534948013, (unsigned char*)"\342\207\210", -1, -1}, /* ⇈ */ -{2545332556, (unsigned char*)"\317\225", 1699, 1707}, /* ϕ */ -{2553787136, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ -{2562550693, (unsigned char*)"\313\231", 1704, 1706}, /* ˙ */ -{2579807761, (unsigned char*)"\342\252\203", -1, -1}, /* ⪃ */ -{2588013225, (unsigned char*)"\342\212\211", 1705, 1709}, /* ⊉ */ -{2609063628, (unsigned char*)"\342\245\235", -1, -1}, /* ⥝ */ -{2611001758, (unsigned char*)"\342\227\273", 1708, 1710}, /* ◻ */ -{2620259063, (unsigned char*)"\342\206\235", -1, -1}, /* ↝ */ -{2632990613, (unsigned char*)"\342\206\221", 1703, 1719}, /* ↑ */ -{2660027883, (unsigned char*)"\342\210\213", -1, -1}, /* ∋ */ -{2660229243, (unsigned char*)"\317\260", 1712, 1714}, /* ϰ */ -{2662435928, (unsigned char*)"\342\210\220", -1, -1}, /* ∐ */ -{2663146703, (unsigned char*)"\342\212\265", 1713, 1717}, /* ⊵ */ -{2669994207, (unsigned char*)"\317\202", -1, -1}, /* ς */ -{2670940085, (unsigned char*)"\342\207\221", 1716, 1718}, /* ⇑ */ -{2671142244, (unsigned char*)"\317\221", -1, -1}, /* ϑ */ -{2674685509, (unsigned char*)"\342\250\274", 1715, 1723}, /* ⨼ */ -{2675200879, (unsigned char*)"\342\213\224", -1, -1}, /* ⋔ */ -{2691956687, (unsigned char*)"\316\245", 1720, 1722}, /* Υ */ -{2696040064, (unsigned char*)"\342\207\233", -1, -1}, /* ⇛ */ -{2728247170, (unsigned char*)"\342\210\241", 1721, 1725}, /* ∡ */ -{2732053530, (unsigned char*)"\342\206\227", -1, -1}, /* ↗ */ -{2740164327, (unsigned char*)"\342\246\232", 1724, 1726}, /* ⦚ */ -{2746073991, (unsigned char*)"\342\206\236", -1, -1}, /* ↞ */ -{2751264705, (unsigned char*)"\342\247\216", 1661, 1794}, /* ⧎ */ -{2767333056, (unsigned char*)"\342\210\246", -1, -1}, /* ∦ */ -{2770565886, (unsigned char*)"\342\200\261", 1728, -1}, /* ‱ */ -{2794580248, (unsigned char*)"\303\201", 1729, 1731}, /* Á */ -{2796287866, (unsigned char*)"\304\202", -1, -1}, /* Ă */ -{2801569040, (unsigned char*)"\342\226\276", 1730, 1734}, /* ▾ */ -{2801845091, (unsigned char*)"\342\227\202", -1, -1}, /* ◂ */ -{2802213115, (unsigned char*)"\303\200", 1733, 1735}, /* À */ -{2803305762, (unsigned char*)"\342\211\216\314\270", -1, -1}, /* ≎̸ */ -{2805781853, (unsigned char*)"\342\252\260\314\270", 1732, 1740}, /* ⪰̸ */ -{2811624442, (unsigned char*)"\342\213\243", -1, -1}, /* ⋣ */ -{2816488330, (unsigned char*)"\342\211\224", 1737, 1739}, /* ≔ */ -{2817318040, (unsigned char*)"\303\203", -1, -1}, /* à */ -{2823273463, (unsigned char*)"\342\211\277\314\270", 1738, 1742}, /* ≿̸ */ -{2834256378, (unsigned char*)"\342\214\206", -1, -1}, /* ⌆ */ -{2838562217, (unsigned char*)"\342\237\267", 1741, 1743}, /* ⟷ */ -{2840133630, (unsigned char*)"\342\213\233", -1, -1}, /* ⋛ */ -{2854475369, (unsigned char*)"\342\217\235", 1736, 1753}, /* ⏝ */ -{2857230239, (unsigned char*)"\342\213\265", -1, -1}, /* ⋵ */ -{2857787503, (unsigned char*)"\342\211\216", 1745, -1}, /* ≎ */ -{2872851034, (unsigned char*)"\304\206", 1746, 1748}, /* Ć */ -{2873382571, (unsigned char*)"\342\214\210", -1, -1}, /* ⌈ */ -{2875147579, (unsigned char*)"\304\214", 1747, 1751}, /* Č */ -{2875275881, (unsigned char*)"\303\207", -1, -1}, /* Ç */ -{2887710822, (unsigned char*)"\342\212\262", 1750, 1752}, /* ⊲ */ -{2889352517, (unsigned char*)"\342\206\221", -1, -1}, /* ↑ */ -{2889770629, (unsigned char*)"\342\251\264", 1749, 1757}, /* ⩴ */ -{2889835984, (unsigned char*)"\342\210\257", -1, -1}, /* ∯ */ -{2889899413, (unsigned char*)"\342\214\235", 1754, 1756}, /* ⌝ */ -{2892217516, (unsigned char*)"\342\247\217\314\270", -1, -1}, /* ⧏̸ */ -{2893603679, (unsigned char*)"\342\212\217", 1755, 1759}, /* ⊏ */ -{2894106797, (unsigned char*)"\342\212\220", -1, -1}, /* ⊐ */ -{2896981569, (unsigned char*)"\342\211\215", 1758, 1760}, /* ≍ */ -{2910059108, (unsigned char*)"\342\211\252\314\270", -1, -1}, /* ≪̸ */ -{2912114447, (unsigned char*)"\342\200\241", 1744, 1778}, /* ‡ */ -{2914282972, (unsigned char*)"\304\216", -1, -1}, /* Ď */ -{2923381909, (unsigned char*)"\342\212\221", 1762, -1}, /* ⊑ */ -{2924434811, (unsigned char*)"\342\204\213", 1763, 1765}, /* ℋ */ -{2929146739, (unsigned char*)"\342\203\234", -1, -1}, /* ⃜ */ -{2930550066, (unsigned char*)"\342\204\263", 1764, 1768}, /* ℳ */ -{2933637451, (unsigned char*)"\342\237\265", -1, -1}, /* ⟵ */ -{2933940508, (unsigned char*)"\304\220", 1767, 1769}, /* Đ */ -{2943764038, (unsigned char*)"\342\207\235", -1, -1}, /* ⇝ */ -{2947490510, (unsigned char*)"\342\206\222", 1766, 1774}, /* → */ -{2951121820, (unsigned char*)"\303\211", -1, -1}, /* É */ -{2953153798, (unsigned char*)"\342\204\214", 1771, 1773}, /* ℌ */ -{2953201221, (unsigned char*)"\342\214\213", -1, -1}, /* ⌋ */ -{2953418365, (unsigned char*)"\304\232", 1772, 1776}, /* Ě */ -{2956653947, (unsigned char*)"\342\253\203", -1, -1}, /* ⫃ */ -{2956959857, (unsigned char*)"\342\253\201", 1775, 1777}, /* ⫁ */ -{2957058163, (unsigned char*)"\342\252\277", -1, -1}, /* ⪿ */ -{2957117958, (unsigned char*)"\342\245\271", 1770, 1786}, /* ⥹ */ -{2957784124, (unsigned char*)"\342\211\277", -1, -1}, /* ≿ */ -{2958754687, (unsigned char*)"\303\210", 1779, 1781}, /* È */ -{2973237419, (unsigned char*)"\342\253\230", -1, -1}, /* ⫘ */ -{2973256841, (unsigned char*)"\342\253\204", 1780, 1784}, /* ⫄ */ -{2973380979, (unsigned char*)"\342\237\211", -1, -1}, /* ⟉ */ -{2973381167, (unsigned char*)"\342\253\227", 1783, 1785}, /* ⫗ */ -{2973505230, (unsigned char*)"\342\245\273", -1, -1}, /* ⥻ */ -{2973562751, (unsigned char*)"\342\253\202", 1782, 1790}, /* ⫂ */ -{2973614978, (unsigned char*)"\342\211\205", -1, -1}, /* ≅ */ -{2973661057, (unsigned char*)"\342\253\200", 1787, 1789}, /* ⫀ */ -{2976327332, (unsigned char*)"\342\211\220", -1, -1}, /* ≐ */ -{2978611461, (unsigned char*)"\342\210\203", 1788, 1792}, /* ∃ */ -{2981502511, (unsigned char*)"\342\210\245", -1, -1}, /* ∥ */ -{2985439982, (unsigned char*)"\342\207\222", 1791, 1793}, /* ⇒ */ -{3007342277, (unsigned char*)"\342\210\200", -1, -1}, /* ∀ */ -{3007934280, (unsigned char*)"\342\206\223", 1761, 1827}, /* ↓ */ -{3008020769, (unsigned char*)"\342\212\242", -1, -1}, /* ⊢ */ -{3024135078, (unsigned char*)"\342\204\216", 1795, -1}, /* ℎ */ -{3027472336, (unsigned char*)"\342\234\240", 1796, 1798}, /* ✠ */ -{3029742636, (unsigned char*)"\317\234", -1, -1}, /* Ϝ */ -{3029913696, (unsigned char*)"\320\252", 1797, 1801}, /* Ъ */ -{3031100224, (unsigned char*)"\304\236", -1, -1}, /* Ğ */ -{3031817453, (unsigned char*)"\304\242", 1800, 1802}, /* Ģ */ -{3034221242, (unsigned char*)"\342\206\231", -1, -1}, /* ↙ */ -{3045326204, (unsigned char*)"\342\207\217", 1799, 1807}, /* ⇏ */ -{3048033127, (unsigned char*)"\342\250\242", -1, -1}, /* ⨢ */ -{3048050546, (unsigned char*)"\342\250\246", 1804, 1806}, /* ⨦ */ -{3048052099, (unsigned char*)"\342\250\247", -1, -1}, /* ⨧ */ -{3064281545, (unsigned char*)"\342\244\245", 1805, 1809}, /* ⤥ */ -{3073629027, (unsigned char*)"\342\207\223", -1, -1}, /* ⇓ */ -{3077837606, (unsigned char*)"\342\237\270", 1808, 1810}, /* ⟸ */ -{3084161209, (unsigned char*)"\342\206\244", -1, -1}, /* ↤ */ -{3084170846, (unsigned char*)"\342\231\245", 1803, 1819}, /* ♥ */ -{3085628123, (unsigned char*)"\342\244\246", -1, -1}, /* ⤦ */ -{3086510115, (unsigned char*)"\342\251\220", 1812, 1814}, /* ⩐ */ -{3086788136, (unsigned char*)"\342\210\263", -1, -1}, /* ∳ */ -{3090482080, (unsigned char*)"\304\246", 1813, 1817}, /* Ħ */ -{3096943633, (unsigned char*)"\342\212\206", -1, -1}, /* ⊆ */ -{3101951024, (unsigned char*)"\317\266", 1816, 1818}, /* ϶ */ -{3103676813, (unsigned char*)"\342\207\225", -1, -1}, /* ⇕ */ -{3107663392, (unsigned char*)"\303\215", 1815, 1823}, /* Í */ -{3115296259, (unsigned char*)"\303\214", -1, -1}, /* Ì */ -{3117411784, (unsigned char*)"\342\252\266", 1820, 1822}, /* ⪶ */ -{3117426762, (unsigned char*)"\342\213\251", -1, -1}, /* ⋩ */ -{3120384638, (unsigned char*)"\342\206\222", 1821, 1825}, /* → */ -{3130401184, (unsigned char*)"\304\250", -1, -1}, /* Ĩ */ -{3137855215, (unsigned char*)"\342\244\221", 1824, 1826}, /* ⤑ */ -{3148816789, (unsigned char*)"\342\211\212", -1, -1}, /* ≊ */ -{3155294829, (unsigned char*)"\342\246\262", 1811, 1844}, /* ⦲ */ -{3156326686, (unsigned char*)"\342\237\271", -1, -1}, /* ⟹ */ -{3168213429, (unsigned char*)"\320\210", 1828, -1}, /* Ј */ -{3179945584, (unsigned char*)"\302\264", 1829, 1831}, /* ´ */ -{3187260351, (unsigned char*)"\342\213\241", -1, -1}, /* ⋡ */ -{3187578451, (unsigned char*)"\140", 1830, 1834}, /* ` */ -{3188359025, (unsigned char*)"\304\266", -1, -1}, /* Ķ */ -{3191313194, (unsigned char*)"\342\252\226", 1833, 1835}, /* ⪖ */ -{3192524471, (unsigned char*)"\342\231\240", -1, -1}, /* ♠ */ -{3193312110, (unsigned char*)"\342\207\202", 1832, 1840}, /* ⇂ */ -{3198287636, (unsigned char*)"\342\210\243", -1, -1}, /* ∣ */ -{3202656041, (unsigned char*)"\342\252\267", 1837, 1839}, /* ⪷ */ -{3202683376, (unsigned char*)"\313\234", -1, -1}, /* ˜ */ -{3204939972, (unsigned char*)"\342\200\211", 1838, 1842}, /*   */ -{3205018733, (unsigned char*)"\342\252\242\314\270", -1, -1}, /* ⪢̸ */ -{3225069571, (unsigned char*)"\304\271", 1841, 1843}, /* Ĺ */ -{3225407718, (unsigned char*)"\316\233", -1, -1}, /* Λ */ -{3227366116, (unsigned char*)"\304\275", 1836, 1852}, /* Ľ */ -{3227494418, (unsigned char*)"\304\273", -1, -1}, /* Ļ */ -{3231328636, (unsigned char*)"\342\211\253", 1845, 1847}, /* ≫ */ -{3236753791, (unsigned char*)"\302\240", -1, -1}, /*   */ -{3238091406, (unsigned char*)"\342\245\257", 1846, 1850}, /* ⥯ */ -{3239497582, (unsigned char*)"\304\277", -1, -1}, /* Ŀ */ -{3241890386, (unsigned char*)"\342\212\216", 1849, 1851}, /* ⊎ */ -{3247023652, (unsigned char*)"\305\201", -1, -1}, /* Ł */ -{3259708759, (unsigned char*)"\342\211\270", 1848, 1856}, /* ≸ */ -{3263313176, (unsigned char*)"\342\211\276", -1, -1}, /* ≾ */ -{3269638327, (unsigned char*)"\342\201\243", 1853, 1855}, /* ⁣ */ -{3273188409, (unsigned char*)"\342\213\207", -1, -1}, /* ⋇ */ -{3273823876, (unsigned char*)"\342\206\231", 1854, 1858}, /* ↙ */ -{3274947156, (unsigned char*)"\317\221", -1, -1}, /* ϑ */ -{3278912800, (unsigned char*)"\342\210\211", 1857, 1859}, /* ∉ */ -{3289583116, (unsigned char*)"\342\201\242", -1, -1}, /* ⁢ */ -{3303295621, (unsigned char*)"\342\226\252", 1727, 1993}, /* ▪ */ -{3303340357, (unsigned char*)"\305\203", -1, -1}, /* Ń */ -{3305636902, (unsigned char*)"\305\207", 1861, -1}, /* Ň */ -{3305765204, (unsigned char*)"\305\205", 1862, 1864}, /* Ņ */ -{3312164768, (unsigned char*)"\342\206\266", -1, -1}, /* ↶ */ -{3317854772, (unsigned char*)"\342\247\202", 1863, 1867}, /* ⧂ */ -{3321988818, (unsigned char*)"\342\211\222", -1, -1}, /* ≒ */ -{3326078149, (unsigned char*)"\303\221", 1866, 1868}, /* Ñ */ -{3330297295, (unsigned char*)"\342\210\210", -1, -1}, /* ∈ */ -{3335130386, (unsigned char*)"\342\207\201", 1865, 1873}, /* ⇁ */ -{3342475750, (unsigned char*)"\303\223", -1, -1}, /* Ó */ -{3342978026, (unsigned char*)"\342\250\252", 1870, 1872}, /* ⨪ */ -{3345463188, (unsigned char*)"\342\200\230", -1, -1}, /* ‘ */ -{3345987146, (unsigned char*)"\305\220", 1871, 1875}, /* Ő */ -{3347296147, (unsigned char*)"\342\247\245", -1, -1}, /* ⧥ */ -{3350108617, (unsigned char*)"\303\222", 1874, 1876}, /* Ò */ -{3364123951, (unsigned char*)"\303\230", -1, -1}, /* Ø */ -{3365213542, (unsigned char*)"\303\225", 1869, 1886}, /* Õ */ -{3365214678, (unsigned char*)"\342\250\267", -1, -1}, /* ⨷ */ -{3366920273, (unsigned char*)"\342\212\220", 1878, -1}, /* ⊐ */ -{3382145070, (unsigned char*)"\342\247\220", 1879, 1881}, /* ⧐ */ -{3397226602, (unsigned char*)"\342\250\266", -1, -1}, /* ⨶ */ -{3403608988, (unsigned char*)"\316\237", 1880, 1884}, /* Ο */ -{3407806007, (unsigned char*)"\342\211\271", -1, -1}, /* ≹ */ -{3410539801, (unsigned char*)"\342\212\263", 1883, 1885}, /* ⊳ */ -{3411686913, (unsigned char*)"\342\210\274", -1, -1}, /* ∼ */ -{3414892194, (unsigned char*)"\342\253\205", 1882, 1890}, /* ⫅ */ -{3414901599, (unsigned char*)"\342\212\212", -1, -1}, /* ⊊ */ -{3416706928, (unsigned char*)"\342\253\205\314\270", 1887, 1889}, /* ⫅̸ */ -{3428742722, (unsigned char*)"\342\206\255", -1, -1}, /* ↭ */ -{3430824453, (unsigned char*)"\342\212\201", 1888, 1892}, /* ⊁ */ -{3437629897, (unsigned char*)"\342\210\262", -1, -1}, /* ∲ */ -{3439187707, (unsigned char*)"\342\226\265", 1891, 1893}, /* ▵ */ -{3446439536, (unsigned char*)"\342\210\230", -1, -1}, /* ∘ */ -{3453247008, (unsigned char*)"\342\250\272", 1877, 1911}, /* ⨺ */ -{3458661549, (unsigned char*)"\302\267", -1, -1}, /* · */ -{3459881929, (unsigned char*)"\305\224", 1895, -1}, /* Ŕ */ -{3460417724, (unsigned char*)"\342\244\226", 1896, 1898}, /* ⤖ */ -{3462178474, (unsigned char*)"\305\230", -1, -1}, /* Ř */ -{3462306776, (unsigned char*)"\305\226", 1897, 1901}, /* Ŗ */ -{3468169767, (unsigned char*)"\320\251", -1, -1}, /* Щ */ -{3471277411, (unsigned char*)"\342\212\222", 1900, 1902}, /* ⊒ */ -{3474127421, (unsigned char*)"\342\210\265", -1, -1}, /* ∵ */ -{3476592093, (unsigned char*)"\320\254", 1899, 1907}, /* Ь */ -{3479304637, (unsigned char*)"\342\246\263", -1, -1}, /* ⦳ */ -{3482255238, (unsigned char*)"\342\231\246", 1904, 1906}, /* ♦ */ -{3484391873, (unsigned char*)"\342\251\255\314\270", -1, -1}, /* ⩭̸ */ -{3487531781, (unsigned char*)"\317\265", 1905, 1909}, /* ϵ */ -{3488439964, (unsigned char*)"\342\212\232", -1, -1}, /* ⊚ */ -{3488467227, (unsigned char*)"\342\212\235", 1908, 1910}, /* ⊝ */ -{3499017322, (unsigned char*)"\305\232", -1, -1}, /* Ś */ -{3501313867, (unsigned char*)"\305\240", 1903, 1919}, /* Š */ -{3501442169, (unsigned char*)"\305\236", -1, -1}, /* Ş */ -{3503305663, (unsigned char*)"\316\225", 1912, 1914}, /* Ε */ -{3508109390, (unsigned char*)"\342\212\243", -1, -1}, /* ⊣ */ -{3508279559, (unsigned char*)"\342\206\226", 1913, 1917}, /* ↖ */ -{3518617078, (unsigned char*)"\342\226\241", -1, -1}, /* □ */ -{3522697147, (unsigned char*)"\342\213\220", 1916, 1918}, /* ⋐ */ -{3523200265, (unsigned char*)"\342\213\221", -1, -1}, /* ⋑ */ -{3529302376, (unsigned char*)"\342\206\277", 1915, 1923}, /* ↿ */ -{3539978494, (unsigned char*)"\342\214\211", -1, -1}, /* ⌉ */ -{3540449260, (unsigned char*)"\305\244", 1920, 1922}, /* Ť */ -{3540577562, (unsigned char*)"\305\242", -1, -1}, /* Ţ */ -{3545419702, (unsigned char*)"\342\211\224", 1921, 1925}, /* ≔ */ -{3547493491, (unsigned char*)"\342\251\255", -1, -1}, /* ⩭ */ -{3560106796, (unsigned char*)"\305\246", 1924, 1926}, /* Ŧ */ -{3563635584, (unsigned char*)"\342\213\217", -1, -1}, /* ⋏ */ -{3577288108, (unsigned char*)"\303\232", 1894, 1960}, /* Ú */ -{3577346291, (unsigned char*)"\342\200\265", -1, -1}, /* ‵ */ -{3578995726, (unsigned char*)"\305\254", 1928, -1}, /* Ŭ */ -{3580584725, (unsigned char*)"\342\213\215", 1929, 1931}, /* ⋍ */ -{3580799504, (unsigned char*)"\305\260", -1, -1}, /* Ű */ -{3583798838, (unsigned char*)"\342\207\200", 1930, 1934}, /* ⇀ */ -{3584920975, (unsigned char*)"\303\231", -1, -1}, /* Ù */ -{3584950583, (unsigned char*)"\342\206\230", 1933, 1935}, /* ↘ */ -{3600025900, (unsigned char*)"\305\250", -1, -1}, /* Ũ */ -{3606990188, (unsigned char*)"\342\206\246", 1932, 1940}, /* ↦ */ -{3613167752, (unsigned char*)"\317\265", -1, -1}, /* ϵ */ -{3619906823, (unsigned char*)"\342\253\246", 1937, 1939}, /* ⫦ */ -{3621684935, (unsigned char*)"\342\200\226", -1, -1}, /* ‖ */ -{3628923373, (unsigned char*)"\342\206\272", 1938, 1942}, /* ↺ */ -{3641341969, (unsigned char*)"\342\212\252", -1, -1}, /* ⊪ */ -{3643238749, (unsigned char*)"\342\212\241", 1941, 1943}, /* ⊡ */ -{3644839135, (unsigned char*)"\342\212\207", -1, -1}, /* ⊇ */ -{3654203690, (unsigned char*)"\342\244\222", 1936, 1952}, /* ⤒ */ -{3664458826, (unsigned char*)"\342\211\274", -1, -1}, /* ≼ */ -{3667688423, (unsigned char*)"\342\237\246", 1945, 1947}, /* ⟦ */ -{3696172421, (unsigned char*)"\342\206\242", -1, -1}, /* ↢ */ -{3698472568, (unsigned char*)"\342\207\213", 1946, 1950}, /* ⇋ */ -{3702896903, (unsigned char*)"\342\217\234", -1, -1}, /* ⏜ */ -{3717462854, (unsigned char*)"\342\237\251", 1949, 1951}, /* ⟩ */ -{3718268991, (unsigned char*)"\342\207\200", -1, -1}, /* ⇀ */ -{3718312869, (unsigned char*)"\342\217\242", 1948, 1956}, /* ⏢ */ -{3727177825, (unsigned char*)"\342\211\223", -1, -1}, /* ≓ */ -{3731026191, (unsigned char*)"\342\214\234", 1953, 1955}, /* ⌜ */ -{3732195663, (unsigned char*)"\342\211\202", -1, -1}, /* ≂ */ -{3733829680, (unsigned char*)"\303\235", 1954, 1958}, /* Ý */ -{3751570166, (unsigned char*)"\342\200\276", -1, -1}, /* ‾ */ -{3766854489, (unsigned char*)"\342\207\224", 1957, 1959}, /* ⇔ */ -{3770246354, (unsigned char*)"\342\244\270", -1, -1}, /* ⤸ */ -{3770246360, (unsigned char*)"\342\244\265", 1944, 1977}, /* ⤵ */ -{3772965073, (unsigned char*)"\305\271", -1, -1}, /* Ź */ -{3775261618, (unsigned char*)"\305\275", 1961, -1}, /* Ž */ -{3779733726, (unsigned char*)"\342\244\275", 1962, 1964}, /* ⤽ */ -{3786849249, (unsigned char*)"\342\244\274", -1, -1}, /* ⤼ */ -{3797614400, (unsigned char*)"\342\206\273", 1963, 1967}, /* ↻ */ -{3798368927, (unsigned char*)"\342\206\276", -1, -1}, /* ↾ */ -{3798964609, (unsigned char*)"\342\245\232", 1966, 1968}, /* ⥚ */ -{3803595193, (unsigned char*)"\342\207\207", -1, -1}, /* ⇇ */ -{3819113224, (unsigned char*)"\342\252\257", 1965, 1973}, /* ⪯ */ -{3824989387, (unsigned char*)"\342\211\242", -1, -1}, /* ≢ */ -{3828603062, (unsigned char*)"\342\210\226", 1970, 1972}, /* ∖ */ -{3836604834, (unsigned char*)"\342\211\276", -1, -1}, /* ≾ */ -{3844621319, (unsigned char*)"\342\253\214\357\270\200", 1971, 1975}, /* ⫌︀ */ -{3865887113, (unsigned char*)"\342\237\272", -1, -1}, /* ⟺ */ -{3872451732, (unsigned char*)"\342\245\233", 1974, 1976}, /* ⥛ */ -{3881458486, (unsigned char*)"\342\205\206", -1, -1}, /* ⅆ */ -{3895490466, (unsigned char*)"\342\213\255", 1969, 1985}, /* ⋭ */ -{3896257183, (unsigned char*)"\342\247\220\314\270", -1, -1}, /* ⧐̸ */ -{3936475985, (unsigned char*)"\342\201\241", 1978, 1980}, /* ⁡ */ -{3938183814, (unsigned char*)"\342\245\240", -1, -1}, /* ⥠ */ -{3942438865, (unsigned char*)"\342\212\203\342\203\222", 1979, 1983}, /* ⊃⃒ */ -{3948129594, (unsigned char*)"\342\211\241", -1, -1}, /* ≡ */ -{3958994798, (unsigned char*)"\342\211\240", 1982, 1984}, /* ≠ */ -{3962407576, (unsigned char*)"\342\212\207", -1, -1}, /* ⊇ */ -{3963371935, (unsigned char*)"\342\212\224", 1981, 1989}, /* ⊔ */ -{3963536128, (unsigned char*)"\342\211\202\314\270", -1, -1}, /* ≂̸ */ -{3976486408, (unsigned char*)"\342\211\201", 1986, 1988}, /* ≁ */ -{3995834959, (unsigned char*)"\342\210\243", -1, -1}, /* ∣ */ -{4000119657, (unsigned char*)"\342\237\274", 1987, 1991}, /* ⟼ */ -{4020352870, (unsigned char*)"\342\206\247", -1, -1}, /* ↧ */ -{4029960458, (unsigned char*)"\342\253\232", 1990, 1992}, /* ⫚ */ -{4032878074, (unsigned char*)"\342\252\202", -1, -1}, /* ⪂ */ -{4033356785, (unsigned char*)"\342\211\200", 1927, 2059}, /* ≀ */ -{4046912824, (unsigned char*)"\303\241", -1, -1}, /* á */ -{4048620442, (unsigned char*)"\304\203", 1994, -1}, /* ă */ -{4052131355, (unsigned char*)"\342\206\276", 1995, 1997}, /* ↾ */ -{4054545691, (unsigned char*)"\303\240", -1, -1}, /* à */ -{4055647832, (unsigned char*)"\137", 1996, 2000}, /* _ */ -{4062343755, (unsigned char*)"\342\251\225", -1, -1}, /* ⩕ */ -{4062464799, (unsigned char*)"\342\210\241", 1999, 2001}, /* ∡ */ -{4062471238, (unsigned char*)"\342\210\242", -1, -1}, /* ∢ */ -{4064609813, (unsigned char*)"\342\251\257", 1998, 2006}, /* ⩯ */ -{4065165407, (unsigned char*)"\342\211\210", -1, -1}, /* ≈ */ -{4067561536, (unsigned char*)"\342\210\257", 2003, 2005}, /* ∯ */ -{4069650616, (unsigned char*)"\303\243", -1, -1}, /* ã */ -{4086587866, (unsigned char*)"\342\212\275", 2004, 2008}, /* ⊽ */ -{4086588954, (unsigned char*)"\342\214\205", -1, -1}, /* ⌅ */ -{4090770168, (unsigned char*)"\342\210\265", 2007, 2009}, /* ∵ */ -{4091323184, (unsigned char*)"\342\204\254", -1, -1}, /* ℬ */ -{4093437092, (unsigned char*)"\342\212\210", 2002, 2018}, /* ⊈ */ -{4095659115, (unsigned char*)"\342\213\202", -1, -1}, /* ⋂ */ -{4095659775, (unsigned char*)"\342\213\203", 2011, 2013}, /* ⋃ */ -{4095679927, (unsigned char*)"\342\213\201", -1, -1}, /* ⋁ */ -{4097832139, (unsigned char*)"\342\244\215", 2012, 2016}, /* ⤍ */ -{4101362008, (unsigned char*)"\342\211\275", -1, -1}, /* ≽ */ -{4103260794, (unsigned char*)"\342\212\245", 2015, 2017}, /* ⊥ */ -{4103368399, (unsigned char*)"\342\213\210", -1, -1}, /* ⋈ */ -{4103384951, (unsigned char*)"\342\247\211", 2014, 2022}, /* ⧉ */ -{4104332831, (unsigned char*)"\342\213\232", -1, -1}, /* ⋚ */ -{4104362788, (unsigned char*)"\342\200\265", 2019, 2021}, /* ‵ */ -{4106870372, (unsigned char*)"\302\246", -1, -1}, /* ¦ */ -{4108102937, (unsigned char*)"\342\226\271", 2020, 2024}, /* ▹ */ -{4110079789, (unsigned char*)"\342\200\242", -1, -1}, /* • */ -{4110120079, (unsigned char*)"\342\211\217", 2023, 2025}, /* ≏ */ -{4113926953, (unsigned char*)"\342\212\222", -1, -1}, /* ⊒ */ -{4125183610, (unsigned char*)"\304\207", 2010, 2043}, /* ć */ -{4125628812, (unsigned char*)"\342\251\204", -1, -1}, /* ⩄ */ -{4125630573, (unsigned char*)"\342\251\213", 2027, -1}, /* ⩋ */ -{4125631233, (unsigned char*)"\342\251\207", 2028, 2030}, /* ⩇ */ -{4125632128, (unsigned char*)"\342\251\200", -1, -1}, /* ⩀ */ -{4127480155, (unsigned char*)"\304\215", 2029, 2033}, /* č */ -{4127608457, (unsigned char*)"\303\247", -1, -1}, /* ç */ -{4127654983, (unsigned char*)"\342\252\241\314\270", 2032, 2034}, /* ⪡̸ */ -{4133749028, (unsigned char*)"\342\207\204", -1, -1}, /* ⇄ */ -{4135189948, (unsigned char*)"\342\211\227", 2031, 2039}, /* ≗ */ -{4135200957, (unsigned char*)"\342\253\257", -1, -1}, /* ⫯ */ -{4139421400, (unsigned char*)"\342\250\271", 2036, 2038}, /* ⨹ */ -{4139561603, (unsigned char*)"\342\250\273", -1, -1}, /* ⨻ */ -{4142103205, (unsigned char*)"\342\211\224", 2037, 2041}, /* ≔ */ -{4142136550, (unsigned char*)"\100", -1, -1}, /* @ */ -{4142139976, (unsigned char*)"\342\210\230", 2040, 2042}, /* ∘ */ -{4142168560, (unsigned char*)"\342\210\256", -1, -1}, /* ∮ */ -{4142250252, (unsigned char*)"\342\210\220", 2035, 2051}, /* ∐ */ -{4142258021, (unsigned char*)"\342\204\227", -1, -1}, /* ℗ */ -{4149203630, (unsigned char*)"\342\206\266", 2044, 2046}, /* ↶ */ -{4149348993, (unsigned char*)"\342\251\206", -1, -1}, /* ⩆ */ -{4149349653, (unsigned char*)"\342\251\212", 2045, 2049}, /* ⩊ */ -{4149350548, (unsigned char*)"\342\212\215", -1, -1}, /* ⊍ */ -{4149419252, (unsigned char*)"\342\206\267", 2048, 2050}, /* ↷ */ -{4149437332, (unsigned char*)"\302\244", -1, -1}, /* ¤ */ -{4153949565, (unsigned char*)"\342\214\255", 2047, 2055}, /* ⌭ */ -{4164447023, (unsigned char*)"\342\200\240", -1, -1}, /* † */ -{4164625015, (unsigned char*)"\342\204\270", 2052, 2054}, /* ℸ */ -{4166615548, (unsigned char*)"\304\217", -1, -1}, /* ď */ -{4168585154, (unsigned char*)"\342\210\245", 2053, 2057}, /* ∥ */ -{4170461671, (unsigned char*)"\342\245\277", -1, -1}, /* ⥿ */ -{4174475578, (unsigned char*)"\303\267", 2056, 2058}, /* ÷ */ -{4174482461, (unsigned char*)"\342\213\207", -1, -1}, /* ⋇ */ -{4174518988, (unsigned char*)"\342\245\237", 2026, 2092}, /* ⥟ */ -{4175347172, (unsigned char*)"\342\251\276", -1, -1}, /* ⩾ */ -{4177357543, (unsigned char*)"\342\214\236", 2060, -1}, /* ⌞ */ -{4177360713, (unsigned char*)"\342\214\215", 2061, 2063}, /* ⌍ */ -{4179273784, (unsigned char*)"\342\207\265", -1, -1}, /* ⇵ */ -{4180176204, (unsigned char*)"\342\252\260", 2062, 2066}, /* ⪰ */ -{4181234915, (unsigned char*)"\44", -1, -1}, /* $ */ -{4181356513, (unsigned char*)"\342\244\220", 2065, 2067}, /* ⤐ */ -{4182584927, (unsigned char*)"\342\227\274", -1, -1}, /* ◼ */ -{4184473069, (unsigned char*)"\342\214\237", 2064, 2072}, /* ⌟ */ -{4184476239, (unsigned char*)"\342\214\214", -1, -1}, /* ⌌ */ -{4186273084, (unsigned char*)"\304\221", 2069, 2071}, /* đ */ -{4186873785, (unsigned char*)"\342\253\213\357\270\200", -1, -1}, /* ⫋︀ */ -{4192460800, (unsigned char*)"\342\204\234", 2070, 2074}, /* ℜ */ -{4194937782, (unsigned char*)"\342\251\275", -1, -1}, /* ⩽ */ -{4197667814, (unsigned char*)"\342\211\277", 2073, 2075}, /* ≿ */ -{4200620618, (unsigned char*)"\342\213\213", -1, -1}, /* ⋋ */ -{4203454396, (unsigned char*)"\303\251", 2068, 2084}, /* é */ -{4204027817, (unsigned char*)"\342\251\256", -1, -1}, /* ⩮ */ -{4205750941, (unsigned char*)"\304\233", 2077, 2079}, /* ě */ -{4206247525, (unsigned char*)"\342\211\225", -1, -1}, /* ≕ */ -{4207958313, (unsigned char*)"\342\237\267", 2078, 2082}, /* ⟷ */ -{4211087263, (unsigned char*)"\303\250", -1, -1}, /* è */ -{4211126251, (unsigned char*)"\342\252\230", 2081, 2083}, /* ⪘ */ -{4215408006, (unsigned char*)"\342\211\266", -1, -1}, /* ≶ */ -{4215610643, (unsigned char*)"\342\237\250", 2080, 2088}, /* ⟨ */ -{4217055856, (unsigned char*)"\342\252\227", -1, -1}, /* ⪗ */ -{4218151722, (unsigned char*)"\342\210\205", 2085, 2087}, /* ∅ */ -{4218252734, (unsigned char*)"\342\200\204", -1, -1}, /*   */ -{4218252735, (unsigned char*)"\342\200\205", 2086, 2090}, /*   */ -{4221168044, (unsigned char*)"\342\247\243", -1, -1}, /* ⧣ */ -{4222415996, (unsigned char*)"\342\211\226", 2089, 2091}, /* ≖ */ -{4223053968, (unsigned char*)"\75", -1, -1}, /* = */ -{4223058556, (unsigned char*)"\342\211\237", 2076, 2109}, /* ≟ */ -{4232694450, (unsigned char*)"\342\207\202", -1, -1}, /* ⇂ */ -{4235957670, (unsigned char*)"\342\252\204", 2093, -1}, /* ⪄ */ -{4242426505, (unsigned char*)"\342\207\222", 2094, 2096}, /* ⇒ */ -{4247670799, (unsigned char*)"\342\231\200", -1, -1}, /* ♀ */ -{4248724854, (unsigned char*)"\357\254\203", 2095, 2099}, /* ffi */ -{4248832665, (unsigned char*)"\357\254\204", -1, -1}, /* ffl */ -{4253350520, (unsigned char*)"\342\207\222", 2098, 2100}, /* ⇒ */ -{4259709701, (unsigned char*)"\342\210\200", -1, -1}, /* ∀ */ -{4261230855, (unsigned char*)"\342\206\256", 2097, 2105}, /* ↮ */ -{4262656708, (unsigned char*)"\302\275", -1, -1}, /* ½ */ -{4262656709, (unsigned char*)"\342\205\223", 2102, 2104}, /* ⅓ */ -{4262656710, (unsigned char*)"\302\274", -1, -1}, /* ¼ */ -{4262656711, (unsigned char*)"\342\205\225", 2103, 2107}, /* ⅕ */ -{4262656712, (unsigned char*)"\342\205\231", -1, -1}, /* ⅙ */ -{4262656714, (unsigned char*)"\342\205\233", 2106, 2108}, /* ⅛ */ -{4262656742, (unsigned char*)"\342\205\224", -1, -1}, /* ⅔ */ -{4262656744, (unsigned char*)"\342\205\226", 2101, 2117}, /* ⅖ */ -{4262656776, (unsigned char*)"\302\276", -1, -1}, /* ¾ */ -{4262656777, (unsigned char*)"\342\205\227", 2110, 2112}, /* ⅗ */ -{4262656780, (unsigned char*)"\342\205\234", -1, -1}, /* ⅜ */ -{4262656810, (unsigned char*)"\342\205\230", 2111, 2115}, /* ⅘ */ -{4262656844, (unsigned char*)"\342\205\232", -1, -1}, /* ⅚ */ -{4262656846, (unsigned char*)"\342\205\235", 2114, 2116}, /* ⅝ */ -{4262656912, (unsigned char*)"\342\205\236", -1, -1}, /* ⅞ */ -{4268685711, (unsigned char*)"\342\211\203", 2113, 2121}, /* ≃ */ -{4276609841, (unsigned char*)"\342\211\216", -1, -1}, /* ≎ */ -{4281725182, (unsigned char*)"\307\265", 2118, 2120}, /* ǵ */ -{4282075212, (unsigned char*)"\317\235", -1, -1}, /* ϝ */ -{4283432800, (unsigned char*)"\304\237", 2119, 2123}, /* ğ */ -{4286177321, (unsigned char*)"\342\211\210", -1, -1}, /* ≈ */ -{4287025195, (unsigned char*)"\342\252\200", 2122, 2124}, /* ⪀ */ -{4287033576, (unsigned char*)"\342\252\224", -1, -1}, /* ⪔ */ +{(unsigned char*)"AElig", {195, 134, 0}}, +{(unsigned char*)"AMP", {38, 0}}, +{(unsigned char*)"Aacute", {195, 129, 0}}, +{(unsigned char*)"Abreve", {196, 130, 0}}, +{(unsigned char*)"Acirc", {195, 130, 0}}, +{(unsigned char*)"Acy", {208, 144, 0}}, +{(unsigned char*)"Afr", {240, 157, 148, 132, 0}}, +{(unsigned char*)"Agrave", {195, 128, 0}}, +{(unsigned char*)"Alpha", {206, 145, 0}}, +{(unsigned char*)"Amacr", {196, 128, 0}}, +{(unsigned char*)"And", {226, 169, 147, 0}}, +{(unsigned char*)"Aogon", {196, 132, 0}}, +{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}}, +{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}}, +{(unsigned char*)"Aring", {195, 133, 0}}, +{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}}, +{(unsigned char*)"Assign", {226, 137, 148, 0}}, +{(unsigned char*)"Atilde", {195, 131, 0}}, +{(unsigned char*)"Auml", {195, 132, 0}}, +{(unsigned char*)"Backslash", {226, 136, 150, 0}}, +{(unsigned char*)"Barv", {226, 171, 167, 0}}, +{(unsigned char*)"Barwed", {226, 140, 134, 0}}, +{(unsigned char*)"Bcy", {208, 145, 0}}, +{(unsigned char*)"Because", {226, 136, 181, 0}}, +{(unsigned char*)"Bernoullis", {226, 132, 172, 0}}, +{(unsigned char*)"Beta", {206, 146, 0}}, +{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}}, +{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}}, +{(unsigned char*)"Breve", {203, 152, 0}}, +{(unsigned char*)"Bscr", {226, 132, 172, 0}}, +{(unsigned char*)"Bumpeq", {226, 137, 142, 0}}, +{(unsigned char*)"CHcy", {208, 167, 0}}, +{(unsigned char*)"COPY", {194, 169, 0}}, +{(unsigned char*)"Cacute", {196, 134, 0}}, +{(unsigned char*)"Cap", {226, 139, 146, 0}}, +{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}}, +{(unsigned char*)"Cayleys", {226, 132, 173, 0}}, +{(unsigned char*)"Ccaron", {196, 140, 0}}, +{(unsigned char*)"Ccedil", {195, 135, 0}}, +{(unsigned char*)"Ccirc", {196, 136, 0}}, +{(unsigned char*)"Cconint", {226, 136, 176, 0}}, +{(unsigned char*)"Cdot", {196, 138, 0}}, +{(unsigned char*)"Cedilla", {194, 184, 0}}, +{(unsigned char*)"CenterDot", {194, 183, 0}}, +{(unsigned char*)"Cfr", {226, 132, 173, 0}}, +{(unsigned char*)"Chi", {206, 167, 0}}, +{(unsigned char*)"CircleDot", {226, 138, 153, 0}}, +{(unsigned char*)"CircleMinus", {226, 138, 150, 0}}, +{(unsigned char*)"CirclePlus", {226, 138, 149, 0}}, +{(unsigned char*)"CircleTimes", {226, 138, 151, 0}}, +{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}}, +{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}}, +{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}}, +{(unsigned char*)"Colon", {226, 136, 183, 0}}, +{(unsigned char*)"Colone", {226, 169, 180, 0}}, +{(unsigned char*)"Congruent", {226, 137, 161, 0}}, +{(unsigned char*)"Conint", {226, 136, 175, 0}}, +{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}}, +{(unsigned char*)"Copf", {226, 132, 130, 0}}, +{(unsigned char*)"Coproduct", {226, 136, 144, 0}}, +{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}}, +{(unsigned char*)"Cross", {226, 168, 175, 0}}, +{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}}, +{(unsigned char*)"Cup", {226, 139, 147, 0}}, +{(unsigned char*)"CupCap", {226, 137, 141, 0}}, +{(unsigned char*)"DD", {226, 133, 133, 0}}, +{(unsigned char*)"DDotrahd", {226, 164, 145, 0}}, +{(unsigned char*)"DJcy", {208, 130, 0}}, +{(unsigned char*)"DScy", {208, 133, 0}}, +{(unsigned char*)"DZcy", {208, 143, 0}}, +{(unsigned char*)"Dagger", {226, 128, 161, 0}}, +{(unsigned char*)"Darr", {226, 134, 161, 0}}, +{(unsigned char*)"Dashv", {226, 171, 164, 0}}, +{(unsigned char*)"Dcaron", {196, 142, 0}}, +{(unsigned char*)"Dcy", {208, 148, 0}}, +{(unsigned char*)"Del", {226, 136, 135, 0}}, +{(unsigned char*)"Delta", {206, 148, 0}}, +{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}}, +{(unsigned char*)"DiacriticalAcute", {194, 180, 0}}, +{(unsigned char*)"DiacriticalDot", {203, 153, 0}}, +{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}}, +{(unsigned char*)"DiacriticalGrave", {96, 0}}, +{(unsigned char*)"DiacriticalTilde", {203, 156, 0}}, +{(unsigned char*)"Diamond", {226, 139, 132, 0}}, +{(unsigned char*)"DifferentialD", {226, 133, 134, 0}}, +{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}}, +{(unsigned char*)"Dot", {194, 168, 0}}, +{(unsigned char*)"DotDot", {226, 131, 156, 0}}, +{(unsigned char*)"DotEqual", {226, 137, 144, 0}}, +{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}}, +{(unsigned char*)"DoubleDot", {194, 168, 0}}, +{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}}, +{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}}, +{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}}, +{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}}, +{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}}, +{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}}, +{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}}, +{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}}, +{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}}, +{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}}, +{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}}, +{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}}, +{(unsigned char*)"DownArrow", {226, 134, 147, 0}}, +{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}}, +{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}}, +{(unsigned char*)"DownBreve", {204, 145, 0}}, +{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}}, +{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}}, +{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}}, +{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}}, +{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}}, +{(unsigned char*)"DownRightVector", {226, 135, 129, 0}}, +{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}}, +{(unsigned char*)"DownTee", {226, 138, 164, 0}}, +{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}}, +{(unsigned char*)"Downarrow", {226, 135, 147, 0}}, +{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}}, +{(unsigned char*)"Dstrok", {196, 144, 0}}, +{(unsigned char*)"ENG", {197, 138, 0}}, +{(unsigned char*)"ETH", {195, 144, 0}}, +{(unsigned char*)"Eacute", {195, 137, 0}}, +{(unsigned char*)"Ecaron", {196, 154, 0}}, +{(unsigned char*)"Ecirc", {195, 138, 0}}, +{(unsigned char*)"Ecy", {208, 173, 0}}, +{(unsigned char*)"Edot", {196, 150, 0}}, +{(unsigned char*)"Efr", {240, 157, 148, 136, 0}}, +{(unsigned char*)"Egrave", {195, 136, 0}}, +{(unsigned char*)"Element", {226, 136, 136, 0}}, +{(unsigned char*)"Emacr", {196, 146, 0}}, +{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}}, +{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}}, +{(unsigned char*)"Eogon", {196, 152, 0}}, +{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}}, +{(unsigned char*)"Epsilon", {206, 149, 0}}, +{(unsigned char*)"Equal", {226, 169, 181, 0}}, +{(unsigned char*)"EqualTilde", {226, 137, 130, 0}}, +{(unsigned char*)"Equilibrium", {226, 135, 140, 0}}, +{(unsigned char*)"Escr", {226, 132, 176, 0}}, +{(unsigned char*)"Esim", {226, 169, 179, 0}}, +{(unsigned char*)"Eta", {206, 151, 0}}, +{(unsigned char*)"Euml", {195, 139, 0}}, +{(unsigned char*)"Exists", {226, 136, 131, 0}}, +{(unsigned char*)"ExponentialE", {226, 133, 135, 0}}, +{(unsigned char*)"Fcy", {208, 164, 0}}, +{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}}, +{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}}, +{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}}, +{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}}, +{(unsigned char*)"ForAll", {226, 136, 128, 0}}, +{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}}, +{(unsigned char*)"Fscr", {226, 132, 177, 0}}, +{(unsigned char*)"GJcy", {208, 131, 0}}, +{(unsigned char*)"GT", {62, 0}}, +{(unsigned char*)"Gamma", {206, 147, 0}}, +{(unsigned char*)"Gammad", {207, 156, 0}}, +{(unsigned char*)"Gbreve", {196, 158, 0}}, +{(unsigned char*)"Gcedil", {196, 162, 0}}, +{(unsigned char*)"Gcirc", {196, 156, 0}}, +{(unsigned char*)"Gcy", {208, 147, 0}}, +{(unsigned char*)"Gdot", {196, 160, 0}}, +{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}}, +{(unsigned char*)"Gg", {226, 139, 153, 0}}, +{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}}, +{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}}, +{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}}, +{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}}, +{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}}, +{(unsigned char*)"GreaterLess", {226, 137, 183, 0}}, +{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}}, +{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}}, +{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}}, +{(unsigned char*)"Gt", {226, 137, 171, 0}}, +{(unsigned char*)"HARDcy", {208, 170, 0}}, +{(unsigned char*)"Hacek", {203, 135, 0}}, +{(unsigned char*)"Hat", {94, 0}}, +{(unsigned char*)"Hcirc", {196, 164, 0}}, +{(unsigned char*)"Hfr", {226, 132, 140, 0}}, +{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}}, +{(unsigned char*)"Hopf", {226, 132, 141, 0}}, +{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}}, +{(unsigned char*)"Hscr", {226, 132, 139, 0}}, +{(unsigned char*)"Hstrok", {196, 166, 0}}, +{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}}, +{(unsigned char*)"HumpEqual", {226, 137, 143, 0}}, +{(unsigned char*)"IEcy", {208, 149, 0}}, +{(unsigned char*)"IJlig", {196, 178, 0}}, +{(unsigned char*)"IOcy", {208, 129, 0}}, +{(unsigned char*)"Iacute", {195, 141, 0}}, +{(unsigned char*)"Icirc", {195, 142, 0}}, +{(unsigned char*)"Icy", {208, 152, 0}}, +{(unsigned char*)"Idot", {196, 176, 0}}, +{(unsigned char*)"Ifr", {226, 132, 145, 0}}, +{(unsigned char*)"Igrave", {195, 140, 0}}, +{(unsigned char*)"Im", {226, 132, 145, 0}}, +{(unsigned char*)"Imacr", {196, 170, 0}}, +{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}}, +{(unsigned char*)"Implies", {226, 135, 146, 0}}, +{(unsigned char*)"Int", {226, 136, 172, 0}}, +{(unsigned char*)"Integral", {226, 136, 171, 0}}, +{(unsigned char*)"Intersection", {226, 139, 130, 0}}, +{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}}, +{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}}, +{(unsigned char*)"Iogon", {196, 174, 0}}, +{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}}, +{(unsigned char*)"Iota", {206, 153, 0}}, +{(unsigned char*)"Iscr", {226, 132, 144, 0}}, +{(unsigned char*)"Itilde", {196, 168, 0}}, +{(unsigned char*)"Iukcy", {208, 134, 0}}, +{(unsigned char*)"Iuml", {195, 143, 0}}, +{(unsigned char*)"Jcirc", {196, 180, 0}}, +{(unsigned char*)"Jcy", {208, 153, 0}}, +{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}}, +{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}}, +{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}}, +{(unsigned char*)"Jsercy", {208, 136, 0}}, +{(unsigned char*)"Jukcy", {208, 132, 0}}, +{(unsigned char*)"KHcy", {208, 165, 0}}, +{(unsigned char*)"KJcy", {208, 140, 0}}, +{(unsigned char*)"Kappa", {206, 154, 0}}, +{(unsigned char*)"Kcedil", {196, 182, 0}}, +{(unsigned char*)"Kcy", {208, 154, 0}}, +{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}}, +{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}}, +{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}}, +{(unsigned char*)"LJcy", {208, 137, 0}}, +{(unsigned char*)"LT", {60, 0}}, +{(unsigned char*)"Lacute", {196, 185, 0}}, +{(unsigned char*)"Lambda", {206, 155, 0}}, +{(unsigned char*)"Lang", {226, 159, 170, 0}}, +{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}}, +{(unsigned char*)"Larr", {226, 134, 158, 0}}, +{(unsigned char*)"Lcaron", {196, 189, 0}}, +{(unsigned char*)"Lcedil", {196, 187, 0}}, +{(unsigned char*)"Lcy", {208, 155, 0}}, +{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}}, +{(unsigned char*)"LeftArrow", {226, 134, 144, 0}}, +{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}}, +{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}}, +{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}}, +{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}}, +{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}}, +{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}}, +{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}}, +{(unsigned char*)"LeftFloor", {226, 140, 138, 0}}, +{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}}, +{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}}, +{(unsigned char*)"LeftTee", {226, 138, 163, 0}}, +{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}}, +{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}}, +{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}}, +{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}}, +{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}}, +{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}}, +{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}}, +{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}}, +{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}}, +{(unsigned char*)"LeftVector", {226, 134, 188, 0}}, +{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}}, +{(unsigned char*)"Leftarrow", {226, 135, 144, 0}}, +{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}}, +{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}}, +{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}}, +{(unsigned char*)"LessGreater", {226, 137, 182, 0}}, +{(unsigned char*)"LessLess", {226, 170, 161, 0}}, +{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}}, +{(unsigned char*)"LessTilde", {226, 137, 178, 0}}, +{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}}, +{(unsigned char*)"Ll", {226, 139, 152, 0}}, +{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}}, +{(unsigned char*)"Lmidot", {196, 191, 0}}, +{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}}, +{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}}, +{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}}, +{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}}, +{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}}, +{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}}, +{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}}, +{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}}, +{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}}, +{(unsigned char*)"Lscr", {226, 132, 146, 0}}, +{(unsigned char*)"Lsh", {226, 134, 176, 0}}, +{(unsigned char*)"Lstrok", {197, 129, 0}}, +{(unsigned char*)"Lt", {226, 137, 170, 0}}, +{(unsigned char*)"Map", {226, 164, 133, 0}}, +{(unsigned char*)"Mcy", {208, 156, 0}}, +{(unsigned char*)"MediumSpace", {226, 129, 159, 0}}, +{(unsigned char*)"Mellintrf", {226, 132, 179, 0}}, +{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}}, +{(unsigned char*)"MinusPlus", {226, 136, 147, 0}}, +{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}}, +{(unsigned char*)"Mscr", {226, 132, 179, 0}}, +{(unsigned char*)"Mu", {206, 156, 0}}, +{(unsigned char*)"NJcy", {208, 138, 0}}, +{(unsigned char*)"Nacute", {197, 131, 0}}, +{(unsigned char*)"Ncaron", {197, 135, 0}}, +{(unsigned char*)"Ncedil", {197, 133, 0}}, +{(unsigned char*)"Ncy", {208, 157, 0}}, +{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}}, +{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}}, +{(unsigned char*)"NewLine", {10, 0}}, +{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}}, +{(unsigned char*)"NoBreak", {226, 129, 160, 0}}, +{(unsigned char*)"NonBreakingSpace", {194, 160, 0}}, +{(unsigned char*)"Nopf", {226, 132, 149, 0}}, +{(unsigned char*)"Not", {226, 171, 172, 0}}, +{(unsigned char*)"NotCongruent", {226, 137, 162, 0}}, +{(unsigned char*)"NotCupCap", {226, 137, 173, 0}}, +{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}}, +{(unsigned char*)"NotElement", {226, 136, 137, 0}}, +{(unsigned char*)"NotEqual", {226, 137, 160, 0}}, +{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}}, +{(unsigned char*)"NotExists", {226, 136, 132, 0}}, +{(unsigned char*)"NotGreater", {226, 137, 175, 0}}, +{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}}, +{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}}, +{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}}, +{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}}, +{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}}, +{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}}, +{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}}, +{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}}, +{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}}, +{(unsigned char*)"NotLess", {226, 137, 174, 0}}, +{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}}, +{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}}, +{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}}, +{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}}, +{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}}, +{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}}, +{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}}, +{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}}, +{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}}, +{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}}, +{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}}, +{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}}, +{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}}, +{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}}, +{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}}, +{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}}, +{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}}, +{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}}, +{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}}, +{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}}, +{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}}, +{(unsigned char*)"NotTilde", {226, 137, 129, 0}}, +{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}}, +{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}}, +{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}}, +{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}}, +{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}}, +{(unsigned char*)"Ntilde", {195, 145, 0}}, +{(unsigned char*)"Nu", {206, 157, 0}}, +{(unsigned char*)"OElig", {197, 146, 0}}, +{(unsigned char*)"Oacute", {195, 147, 0}}, +{(unsigned char*)"Ocirc", {195, 148, 0}}, +{(unsigned char*)"Ocy", {208, 158, 0}}, +{(unsigned char*)"Odblac", {197, 144, 0}}, +{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}}, +{(unsigned char*)"Ograve", {195, 146, 0}}, +{(unsigned char*)"Omacr", {197, 140, 0}}, +{(unsigned char*)"Omega", {206, 169, 0}}, +{(unsigned char*)"Omicron", {206, 159, 0}}, +{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}}, +{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}}, +{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}}, +{(unsigned char*)"Or", {226, 169, 148, 0}}, +{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}}, +{(unsigned char*)"Oslash", {195, 152, 0}}, +{(unsigned char*)"Otilde", {195, 149, 0}}, +{(unsigned char*)"Otimes", {226, 168, 183, 0}}, +{(unsigned char*)"Ouml", {195, 150, 0}}, +{(unsigned char*)"OverBar", {226, 128, 190, 0}}, +{(unsigned char*)"OverBrace", {226, 143, 158, 0}}, +{(unsigned char*)"OverBracket", {226, 142, 180, 0}}, +{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}}, +{(unsigned char*)"PartialD", {226, 136, 130, 0}}, +{(unsigned char*)"Pcy", {208, 159, 0}}, +{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}}, +{(unsigned char*)"Phi", {206, 166, 0}}, +{(unsigned char*)"Pi", {206, 160, 0}}, +{(unsigned char*)"PlusMinus", {194, 177, 0}}, +{(unsigned char*)"Poincareplane", {226, 132, 140, 0}}, +{(unsigned char*)"Popf", {226, 132, 153, 0}}, +{(unsigned char*)"Pr", {226, 170, 187, 0}}, +{(unsigned char*)"Precedes", {226, 137, 186, 0}}, +{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}}, +{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}}, +{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}}, +{(unsigned char*)"Prime", {226, 128, 179, 0}}, +{(unsigned char*)"Product", {226, 136, 143, 0}}, +{(unsigned char*)"Proportion", {226, 136, 183, 0}}, +{(unsigned char*)"Proportional", {226, 136, 157, 0}}, +{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}}, +{(unsigned char*)"Psi", {206, 168, 0}}, +{(unsigned char*)"QUOT", {34, 0}}, +{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}}, +{(unsigned char*)"Qopf", {226, 132, 154, 0}}, +{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}}, +{(unsigned char*)"RBarr", {226, 164, 144, 0}}, +{(unsigned char*)"REG", {194, 174, 0}}, +{(unsigned char*)"Racute", {197, 148, 0}}, +{(unsigned char*)"Rang", {226, 159, 171, 0}}, +{(unsigned char*)"Rarr", {226, 134, 160, 0}}, +{(unsigned char*)"Rarrtl", {226, 164, 150, 0}}, +{(unsigned char*)"Rcaron", {197, 152, 0}}, +{(unsigned char*)"Rcedil", {197, 150, 0}}, +{(unsigned char*)"Rcy", {208, 160, 0}}, +{(unsigned char*)"Re", {226, 132, 156, 0}}, +{(unsigned char*)"ReverseElement", {226, 136, 139, 0}}, +{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}}, +{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}}, +{(unsigned char*)"Rfr", {226, 132, 156, 0}}, +{(unsigned char*)"Rho", {206, 161, 0}}, +{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}}, +{(unsigned char*)"RightArrow", {226, 134, 146, 0}}, +{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}}, +{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}}, +{(unsigned char*)"RightCeiling", {226, 140, 137, 0}}, +{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}}, +{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}}, +{(unsigned char*)"RightDownVector", {226, 135, 130, 0}}, +{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}}, +{(unsigned char*)"RightFloor", {226, 140, 139, 0}}, +{(unsigned char*)"RightTee", {226, 138, 162, 0}}, +{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}}, +{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}}, +{(unsigned char*)"RightTriangle", {226, 138, 179, 0}}, +{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}}, +{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}}, +{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}}, +{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}}, +{(unsigned char*)"RightUpVector", {226, 134, 190, 0}}, +{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}}, +{(unsigned char*)"RightVector", {226, 135, 128, 0}}, +{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}}, +{(unsigned char*)"Rightarrow", {226, 135, 146, 0}}, +{(unsigned char*)"Ropf", {226, 132, 157, 0}}, +{(unsigned char*)"RoundImplies", {226, 165, 176, 0}}, +{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}}, +{(unsigned char*)"Rscr", {226, 132, 155, 0}}, +{(unsigned char*)"Rsh", {226, 134, 177, 0}}, +{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}}, +{(unsigned char*)"SHCHcy", {208, 169, 0}}, +{(unsigned char*)"SHcy", {208, 168, 0}}, +{(unsigned char*)"SOFTcy", {208, 172, 0}}, +{(unsigned char*)"Sacute", {197, 154, 0}}, +{(unsigned char*)"Sc", {226, 170, 188, 0}}, +{(unsigned char*)"Scaron", {197, 160, 0}}, +{(unsigned char*)"Scedil", {197, 158, 0}}, +{(unsigned char*)"Scirc", {197, 156, 0}}, +{(unsigned char*)"Scy", {208, 161, 0}}, +{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}}, +{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}}, +{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}}, +{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}}, +{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}}, +{(unsigned char*)"Sigma", {206, 163, 0}}, +{(unsigned char*)"SmallCircle", {226, 136, 152, 0}}, +{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}}, +{(unsigned char*)"Sqrt", {226, 136, 154, 0}}, +{(unsigned char*)"Square", {226, 150, 161, 0}}, +{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}}, +{(unsigned char*)"SquareSubset", {226, 138, 143, 0}}, +{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}}, +{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}}, +{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}}, +{(unsigned char*)"SquareUnion", {226, 138, 148, 0}}, +{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}}, +{(unsigned char*)"Star", {226, 139, 134, 0}}, +{(unsigned char*)"Sub", {226, 139, 144, 0}}, +{(unsigned char*)"Subset", {226, 139, 144, 0}}, +{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}}, +{(unsigned char*)"Succeeds", {226, 137, 187, 0}}, +{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}}, +{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}}, +{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}}, +{(unsigned char*)"SuchThat", {226, 136, 139, 0}}, +{(unsigned char*)"Sum", {226, 136, 145, 0}}, +{(unsigned char*)"Sup", {226, 139, 145, 0}}, +{(unsigned char*)"Superset", {226, 138, 131, 0}}, +{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}}, +{(unsigned char*)"Supset", {226, 139, 145, 0}}, +{(unsigned char*)"THORN", {195, 158, 0}}, +{(unsigned char*)"TRADE", {226, 132, 162, 0}}, +{(unsigned char*)"TSHcy", {208, 139, 0}}, +{(unsigned char*)"TScy", {208, 166, 0}}, +{(unsigned char*)"Tab", {9, 0}}, +{(unsigned char*)"Tau", {206, 164, 0}}, +{(unsigned char*)"Tcaron", {197, 164, 0}}, +{(unsigned char*)"Tcedil", {197, 162, 0}}, +{(unsigned char*)"Tcy", {208, 162, 0}}, +{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}}, +{(unsigned char*)"Therefore", {226, 136, 180, 0}}, +{(unsigned char*)"Theta", {206, 152, 0}}, +{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}}, +{(unsigned char*)"ThinSpace", {226, 128, 137, 0}}, +{(unsigned char*)"Tilde", {226, 136, 188, 0}}, +{(unsigned char*)"TildeEqual", {226, 137, 131, 0}}, +{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}}, +{(unsigned char*)"TildeTilde", {226, 137, 136, 0}}, +{(unsigned char*)"Topf", {240, 157, 149, 139, 0}}, +{(unsigned char*)"TripleDot", {226, 131, 155, 0}}, +{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}}, +{(unsigned char*)"Tstrok", {197, 166, 0}}, +{(unsigned char*)"Uacute", {195, 154, 0}}, +{(unsigned char*)"Uarr", {226, 134, 159, 0}}, +{(unsigned char*)"Uarrocir", {226, 165, 137, 0}}, +{(unsigned char*)"Ubrcy", {208, 142, 0}}, +{(unsigned char*)"Ubreve", {197, 172, 0}}, +{(unsigned char*)"Ucirc", {195, 155, 0}}, +{(unsigned char*)"Ucy", {208, 163, 0}}, +{(unsigned char*)"Udblac", {197, 176, 0}}, +{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}}, +{(unsigned char*)"Ugrave", {195, 153, 0}}, +{(unsigned char*)"Umacr", {197, 170, 0}}, +{(unsigned char*)"UnderBar", {95, 0}}, +{(unsigned char*)"UnderBrace", {226, 143, 159, 0}}, +{(unsigned char*)"UnderBracket", {226, 142, 181, 0}}, +{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}}, +{(unsigned char*)"Union", {226, 139, 131, 0}}, +{(unsigned char*)"UnionPlus", {226, 138, 142, 0}}, +{(unsigned char*)"Uogon", {197, 178, 0}}, +{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}}, +{(unsigned char*)"UpArrow", {226, 134, 145, 0}}, +{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}}, +{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}}, +{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}}, +{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}}, +{(unsigned char*)"UpTee", {226, 138, 165, 0}}, +{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}}, +{(unsigned char*)"Uparrow", {226, 135, 145, 0}}, +{(unsigned char*)"Updownarrow", {226, 135, 149, 0}}, +{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}}, +{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}}, +{(unsigned char*)"Upsi", {207, 146, 0}}, +{(unsigned char*)"Upsilon", {206, 165, 0}}, +{(unsigned char*)"Uring", {197, 174, 0}}, +{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}}, +{(unsigned char*)"Utilde", {197, 168, 0}}, +{(unsigned char*)"Uuml", {195, 156, 0}}, +{(unsigned char*)"VDash", {226, 138, 171, 0}}, +{(unsigned char*)"Vbar", {226, 171, 171, 0}}, +{(unsigned char*)"Vcy", {208, 146, 0}}, +{(unsigned char*)"Vdash", {226, 138, 169, 0}}, +{(unsigned char*)"Vdashl", {226, 171, 166, 0}}, +{(unsigned char*)"Vee", {226, 139, 129, 0}}, +{(unsigned char*)"Verbar", {226, 128, 150, 0}}, +{(unsigned char*)"Vert", {226, 128, 150, 0}}, +{(unsigned char*)"VerticalBar", {226, 136, 163, 0}}, +{(unsigned char*)"VerticalLine", {124, 0}}, +{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}}, +{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}}, +{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}}, +{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}}, +{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}}, +{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}}, +{(unsigned char*)"Vvdash", {226, 138, 170, 0}}, +{(unsigned char*)"Wcirc", {197, 180, 0}}, +{(unsigned char*)"Wedge", {226, 139, 128, 0}}, +{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}}, +{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}}, +{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}}, +{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}}, +{(unsigned char*)"Xi", {206, 158, 0}}, +{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}}, +{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}}, +{(unsigned char*)"YAcy", {208, 175, 0}}, +{(unsigned char*)"YIcy", {208, 135, 0}}, +{(unsigned char*)"YUcy", {208, 174, 0}}, +{(unsigned char*)"Yacute", {195, 157, 0}}, +{(unsigned char*)"Ycirc", {197, 182, 0}}, +{(unsigned char*)"Ycy", {208, 171, 0}}, +{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}}, +{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}}, +{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}}, +{(unsigned char*)"Yuml", {197, 184, 0}}, +{(unsigned char*)"ZHcy", {208, 150, 0}}, +{(unsigned char*)"Zacute", {197, 185, 0}}, +{(unsigned char*)"Zcaron", {197, 189, 0}}, +{(unsigned char*)"Zcy", {208, 151, 0}}, +{(unsigned char*)"Zdot", {197, 187, 0}}, +{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}}, +{(unsigned char*)"Zeta", {206, 150, 0}}, +{(unsigned char*)"Zfr", {226, 132, 168, 0}}, +{(unsigned char*)"Zopf", {226, 132, 164, 0}}, +{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}}, +{(unsigned char*)"aacute", {195, 161, 0}}, +{(unsigned char*)"abreve", {196, 131, 0}}, +{(unsigned char*)"ac", {226, 136, 190, 0}}, +{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}}, +{(unsigned char*)"acd", {226, 136, 191, 0}}, +{(unsigned char*)"acirc", {195, 162, 0}}, +{(unsigned char*)"acute", {194, 180, 0}}, +{(unsigned char*)"acy", {208, 176, 0}}, +{(unsigned char*)"aelig", {195, 166, 0}}, +{(unsigned char*)"af", {226, 129, 161, 0}}, +{(unsigned char*)"afr", {240, 157, 148, 158, 0}}, +{(unsigned char*)"agrave", {195, 160, 0}}, +{(unsigned char*)"alefsym", {226, 132, 181, 0}}, +{(unsigned char*)"aleph", {226, 132, 181, 0}}, +{(unsigned char*)"alpha", {206, 177, 0}}, +{(unsigned char*)"amacr", {196, 129, 0}}, +{(unsigned char*)"amalg", {226, 168, 191, 0}}, +{(unsigned char*)"amp", {38, 0}}, +{(unsigned char*)"and", {226, 136, 167, 0}}, +{(unsigned char*)"andand", {226, 169, 149, 0}}, +{(unsigned char*)"andd", {226, 169, 156, 0}}, +{(unsigned char*)"andslope", {226, 169, 152, 0}}, +{(unsigned char*)"andv", {226, 169, 154, 0}}, +{(unsigned char*)"ang", {226, 136, 160, 0}}, +{(unsigned char*)"ange", {226, 166, 164, 0}}, +{(unsigned char*)"angle", {226, 136, 160, 0}}, +{(unsigned char*)"angmsd", {226, 136, 161, 0}}, +{(unsigned char*)"angmsdaa", {226, 166, 168, 0}}, +{(unsigned char*)"angmsdab", {226, 166, 169, 0}}, +{(unsigned char*)"angmsdac", {226, 166, 170, 0}}, +{(unsigned char*)"angmsdad", {226, 166, 171, 0}}, +{(unsigned char*)"angmsdae", {226, 166, 172, 0}}, +{(unsigned char*)"angmsdaf", {226, 166, 173, 0}}, +{(unsigned char*)"angmsdag", {226, 166, 174, 0}}, +{(unsigned char*)"angmsdah", {226, 166, 175, 0}}, +{(unsigned char*)"angrt", {226, 136, 159, 0}}, +{(unsigned char*)"angrtvb", {226, 138, 190, 0}}, +{(unsigned char*)"angrtvbd", {226, 166, 157, 0}}, +{(unsigned char*)"angsph", {226, 136, 162, 0}}, +{(unsigned char*)"angst", {195, 133, 0}}, +{(unsigned char*)"angzarr", {226, 141, 188, 0}}, +{(unsigned char*)"aogon", {196, 133, 0}}, +{(unsigned char*)"aopf", {240, 157, 149, 146, 0}}, +{(unsigned char*)"ap", {226, 137, 136, 0}}, +{(unsigned char*)"apE", {226, 169, 176, 0}}, +{(unsigned char*)"apacir", {226, 169, 175, 0}}, +{(unsigned char*)"ape", {226, 137, 138, 0}}, +{(unsigned char*)"apid", {226, 137, 139, 0}}, +{(unsigned char*)"apos", {39, 0}}, +{(unsigned char*)"approx", {226, 137, 136, 0}}, +{(unsigned char*)"approxeq", {226, 137, 138, 0}}, +{(unsigned char*)"aring", {195, 165, 0}}, +{(unsigned char*)"ascr", {240, 157, 146, 182, 0}}, +{(unsigned char*)"ast", {42, 0}}, +{(unsigned char*)"asymp", {226, 137, 136, 0}}, +{(unsigned char*)"asympeq", {226, 137, 141, 0}}, +{(unsigned char*)"atilde", {195, 163, 0}}, +{(unsigned char*)"auml", {195, 164, 0}}, +{(unsigned char*)"awconint", {226, 136, 179, 0}}, +{(unsigned char*)"awint", {226, 168, 145, 0}}, +{(unsigned char*)"bNot", {226, 171, 173, 0}}, +{(unsigned char*)"backcong", {226, 137, 140, 0}}, +{(unsigned char*)"backepsilon", {207, 182, 0}}, +{(unsigned char*)"backprime", {226, 128, 181, 0}}, +{(unsigned char*)"backsim", {226, 136, 189, 0}}, +{(unsigned char*)"backsimeq", {226, 139, 141, 0}}, +{(unsigned char*)"barvee", {226, 138, 189, 0}}, +{(unsigned char*)"barwed", {226, 140, 133, 0}}, +{(unsigned char*)"barwedge", {226, 140, 133, 0}}, +{(unsigned char*)"bbrk", {226, 142, 181, 0}}, +{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}}, +{(unsigned char*)"bcong", {226, 137, 140, 0}}, +{(unsigned char*)"bcy", {208, 177, 0}}, +{(unsigned char*)"bdquo", {226, 128, 158, 0}}, +{(unsigned char*)"becaus", {226, 136, 181, 0}}, +{(unsigned char*)"because", {226, 136, 181, 0}}, +{(unsigned char*)"bemptyv", {226, 166, 176, 0}}, +{(unsigned char*)"bepsi", {207, 182, 0}}, +{(unsigned char*)"bernou", {226, 132, 172, 0}}, +{(unsigned char*)"beta", {206, 178, 0}}, +{(unsigned char*)"beth", {226, 132, 182, 0}}, +{(unsigned char*)"between", {226, 137, 172, 0}}, +{(unsigned char*)"bfr", {240, 157, 148, 159, 0}}, +{(unsigned char*)"bigcap", {226, 139, 130, 0}}, +{(unsigned char*)"bigcirc", {226, 151, 175, 0}}, +{(unsigned char*)"bigcup", {226, 139, 131, 0}}, +{(unsigned char*)"bigodot", {226, 168, 128, 0}}, +{(unsigned char*)"bigoplus", {226, 168, 129, 0}}, +{(unsigned char*)"bigotimes", {226, 168, 130, 0}}, +{(unsigned char*)"bigsqcup", {226, 168, 134, 0}}, +{(unsigned char*)"bigstar", {226, 152, 133, 0}}, +{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}}, +{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}}, +{(unsigned char*)"biguplus", {226, 168, 132, 0}}, +{(unsigned char*)"bigvee", {226, 139, 129, 0}}, +{(unsigned char*)"bigwedge", {226, 139, 128, 0}}, +{(unsigned char*)"bkarow", {226, 164, 141, 0}}, +{(unsigned char*)"blacklozenge", {226, 167, 171, 0}}, +{(unsigned char*)"blacksquare", {226, 150, 170, 0}}, +{(unsigned char*)"blacktriangle", {226, 150, 180, 0}}, +{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}}, +{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}}, +{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}}, +{(unsigned char*)"blank", {226, 144, 163, 0}}, +{(unsigned char*)"blk12", {226, 150, 146, 0}}, +{(unsigned char*)"blk14", {226, 150, 145, 0}}, +{(unsigned char*)"blk34", {226, 150, 147, 0}}, +{(unsigned char*)"block", {226, 150, 136, 0}}, +{(unsigned char*)"bne", {61, 226, 131, 165, 0}}, +{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}}, +{(unsigned char*)"bnot", {226, 140, 144, 0}}, +{(unsigned char*)"bopf", {240, 157, 149, 147, 0}}, +{(unsigned char*)"bot", {226, 138, 165, 0}}, +{(unsigned char*)"bottom", {226, 138, 165, 0}}, +{(unsigned char*)"bowtie", {226, 139, 136, 0}}, +{(unsigned char*)"boxDL", {226, 149, 151, 0}}, +{(unsigned char*)"boxDR", {226, 149, 148, 0}}, +{(unsigned char*)"boxDl", {226, 149, 150, 0}}, +{(unsigned char*)"boxDr", {226, 149, 147, 0}}, +{(unsigned char*)"boxH", {226, 149, 144, 0}}, +{(unsigned char*)"boxHD", {226, 149, 166, 0}}, +{(unsigned char*)"boxHU", {226, 149, 169, 0}}, +{(unsigned char*)"boxHd", {226, 149, 164, 0}}, +{(unsigned char*)"boxHu", {226, 149, 167, 0}}, +{(unsigned char*)"boxUL", {226, 149, 157, 0}}, +{(unsigned char*)"boxUR", {226, 149, 154, 0}}, +{(unsigned char*)"boxUl", {226, 149, 156, 0}}, +{(unsigned char*)"boxUr", {226, 149, 153, 0}}, +{(unsigned char*)"boxV", {226, 149, 145, 0}}, +{(unsigned char*)"boxVH", {226, 149, 172, 0}}, +{(unsigned char*)"boxVL", {226, 149, 163, 0}}, +{(unsigned char*)"boxVR", {226, 149, 160, 0}}, +{(unsigned char*)"boxVh", {226, 149, 171, 0}}, +{(unsigned char*)"boxVl", {226, 149, 162, 0}}, +{(unsigned char*)"boxVr", {226, 149, 159, 0}}, +{(unsigned char*)"boxbox", {226, 167, 137, 0}}, +{(unsigned char*)"boxdL", {226, 149, 149, 0}}, +{(unsigned char*)"boxdR", {226, 149, 146, 0}}, +{(unsigned char*)"boxdl", {226, 148, 144, 0}}, +{(unsigned char*)"boxdr", {226, 148, 140, 0}}, +{(unsigned char*)"boxh", {226, 148, 128, 0}}, +{(unsigned char*)"boxhD", {226, 149, 165, 0}}, +{(unsigned char*)"boxhU", {226, 149, 168, 0}}, +{(unsigned char*)"boxhd", {226, 148, 172, 0}}, +{(unsigned char*)"boxhu", {226, 148, 180, 0}}, +{(unsigned char*)"boxminus", {226, 138, 159, 0}}, +{(unsigned char*)"boxplus", {226, 138, 158, 0}}, +{(unsigned char*)"boxtimes", {226, 138, 160, 0}}, +{(unsigned char*)"boxuL", {226, 149, 155, 0}}, +{(unsigned char*)"boxuR", {226, 149, 152, 0}}, +{(unsigned char*)"boxul", {226, 148, 152, 0}}, +{(unsigned char*)"boxur", {226, 148, 148, 0}}, +{(unsigned char*)"boxv", {226, 148, 130, 0}}, +{(unsigned char*)"boxvH", {226, 149, 170, 0}}, +{(unsigned char*)"boxvL", {226, 149, 161, 0}}, +{(unsigned char*)"boxvR", {226, 149, 158, 0}}, +{(unsigned char*)"boxvh", {226, 148, 188, 0}}, +{(unsigned char*)"boxvl", {226, 148, 164, 0}}, +{(unsigned char*)"boxvr", {226, 148, 156, 0}}, +{(unsigned char*)"bprime", {226, 128, 181, 0}}, +{(unsigned char*)"breve", {203, 152, 0}}, +{(unsigned char*)"brvbar", {194, 166, 0}}, +{(unsigned char*)"bscr", {240, 157, 146, 183, 0}}, +{(unsigned char*)"bsemi", {226, 129, 143, 0}}, +{(unsigned char*)"bsim", {226, 136, 189, 0}}, +{(unsigned char*)"bsime", {226, 139, 141, 0}}, +{(unsigned char*)"bsol", {92, 0}}, +{(unsigned char*)"bsolb", {226, 167, 133, 0}}, +{(unsigned char*)"bsolhsub", {226, 159, 136, 0}}, +{(unsigned char*)"bull", {226, 128, 162, 0}}, +{(unsigned char*)"bullet", {226, 128, 162, 0}}, +{(unsigned char*)"bump", {226, 137, 142, 0}}, +{(unsigned char*)"bumpE", {226, 170, 174, 0}}, +{(unsigned char*)"bumpe", {226, 137, 143, 0}}, +{(unsigned char*)"bumpeq", {226, 137, 143, 0}}, +{(unsigned char*)"cacute", {196, 135, 0}}, +{(unsigned char*)"cap", {226, 136, 169, 0}}, +{(unsigned char*)"capand", {226, 169, 132, 0}}, +{(unsigned char*)"capbrcup", {226, 169, 137, 0}}, +{(unsigned char*)"capcap", {226, 169, 139, 0}}, +{(unsigned char*)"capcup", {226, 169, 135, 0}}, +{(unsigned char*)"capdot", {226, 169, 128, 0}}, +{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}}, +{(unsigned char*)"caret", {226, 129, 129, 0}}, +{(unsigned char*)"caron", {203, 135, 0}}, +{(unsigned char*)"ccaps", {226, 169, 141, 0}}, +{(unsigned char*)"ccaron", {196, 141, 0}}, +{(unsigned char*)"ccedil", {195, 167, 0}}, +{(unsigned char*)"ccirc", {196, 137, 0}}, +{(unsigned char*)"ccups", {226, 169, 140, 0}}, +{(unsigned char*)"ccupssm", {226, 169, 144, 0}}, +{(unsigned char*)"cdot", {196, 139, 0}}, +{(unsigned char*)"cedil", {194, 184, 0}}, +{(unsigned char*)"cemptyv", {226, 166, 178, 0}}, +{(unsigned char*)"cent", {194, 162, 0}}, +{(unsigned char*)"centerdot", {194, 183, 0}}, +{(unsigned char*)"cfr", {240, 157, 148, 160, 0}}, +{(unsigned char*)"chcy", {209, 135, 0}}, +{(unsigned char*)"check", {226, 156, 147, 0}}, +{(unsigned char*)"checkmark", {226, 156, 147, 0}}, +{(unsigned char*)"chi", {207, 135, 0}}, +{(unsigned char*)"cir", {226, 151, 139, 0}}, +{(unsigned char*)"cirE", {226, 167, 131, 0}}, +{(unsigned char*)"circ", {203, 134, 0}}, +{(unsigned char*)"circeq", {226, 137, 151, 0}}, +{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}}, +{(unsigned char*)"circlearrowright", {226, 134, 187, 0}}, +{(unsigned char*)"circledR", {194, 174, 0}}, +{(unsigned char*)"circledS", {226, 147, 136, 0}}, +{(unsigned char*)"circledast", {226, 138, 155, 0}}, +{(unsigned char*)"circledcirc", {226, 138, 154, 0}}, +{(unsigned char*)"circleddash", {226, 138, 157, 0}}, +{(unsigned char*)"cire", {226, 137, 151, 0}}, +{(unsigned char*)"cirfnint", {226, 168, 144, 0}}, +{(unsigned char*)"cirmid", {226, 171, 175, 0}}, +{(unsigned char*)"cirscir", {226, 167, 130, 0}}, +{(unsigned char*)"clubs", {226, 153, 163, 0}}, +{(unsigned char*)"clubsuit", {226, 153, 163, 0}}, +{(unsigned char*)"colon", {58, 0}}, +{(unsigned char*)"colone", {226, 137, 148, 0}}, +{(unsigned char*)"coloneq", {226, 137, 148, 0}}, +{(unsigned char*)"comma", {44, 0}}, +{(unsigned char*)"commat", {64, 0}}, +{(unsigned char*)"comp", {226, 136, 129, 0}}, +{(unsigned char*)"compfn", {226, 136, 152, 0}}, +{(unsigned char*)"complement", {226, 136, 129, 0}}, +{(unsigned char*)"complexes", {226, 132, 130, 0}}, +{(unsigned char*)"cong", {226, 137, 133, 0}}, +{(unsigned char*)"congdot", {226, 169, 173, 0}}, +{(unsigned char*)"conint", {226, 136, 174, 0}}, +{(unsigned char*)"copf", {240, 157, 149, 148, 0}}, +{(unsigned char*)"coprod", {226, 136, 144, 0}}, +{(unsigned char*)"copy", {194, 169, 0}}, +{(unsigned char*)"copysr", {226, 132, 151, 0}}, +{(unsigned char*)"crarr", {226, 134, 181, 0}}, +{(unsigned char*)"cross", {226, 156, 151, 0}}, +{(unsigned char*)"cscr", {240, 157, 146, 184, 0}}, +{(unsigned char*)"csub", {226, 171, 143, 0}}, +{(unsigned char*)"csube", {226, 171, 145, 0}}, +{(unsigned char*)"csup", {226, 171, 144, 0}}, +{(unsigned char*)"csupe", {226, 171, 146, 0}}, +{(unsigned char*)"ctdot", {226, 139, 175, 0}}, +{(unsigned char*)"cudarrl", {226, 164, 184, 0}}, +{(unsigned char*)"cudarrr", {226, 164, 181, 0}}, +{(unsigned char*)"cuepr", {226, 139, 158, 0}}, +{(unsigned char*)"cuesc", {226, 139, 159, 0}}, +{(unsigned char*)"cularr", {226, 134, 182, 0}}, +{(unsigned char*)"cularrp", {226, 164, 189, 0}}, +{(unsigned char*)"cup", {226, 136, 170, 0}}, +{(unsigned char*)"cupbrcap", {226, 169, 136, 0}}, +{(unsigned char*)"cupcap", {226, 169, 134, 0}}, +{(unsigned char*)"cupcup", {226, 169, 138, 0}}, +{(unsigned char*)"cupdot", {226, 138, 141, 0}}, +{(unsigned char*)"cupor", {226, 169, 133, 0}}, +{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}}, +{(unsigned char*)"curarr", {226, 134, 183, 0}}, +{(unsigned char*)"curarrm", {226, 164, 188, 0}}, +{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}}, +{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}}, +{(unsigned char*)"curlyvee", {226, 139, 142, 0}}, +{(unsigned char*)"curlywedge", {226, 139, 143, 0}}, +{(unsigned char*)"curren", {194, 164, 0}}, +{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}}, +{(unsigned char*)"curvearrowright", {226, 134, 183, 0}}, +{(unsigned char*)"cuvee", {226, 139, 142, 0}}, +{(unsigned char*)"cuwed", {226, 139, 143, 0}}, +{(unsigned char*)"cwconint", {226, 136, 178, 0}}, +{(unsigned char*)"cwint", {226, 136, 177, 0}}, +{(unsigned char*)"cylcty", {226, 140, 173, 0}}, +{(unsigned char*)"dArr", {226, 135, 147, 0}}, +{(unsigned char*)"dHar", {226, 165, 165, 0}}, +{(unsigned char*)"dagger", {226, 128, 160, 0}}, +{(unsigned char*)"daleth", {226, 132, 184, 0}}, +{(unsigned char*)"darr", {226, 134, 147, 0}}, +{(unsigned char*)"dash", {226, 128, 144, 0}}, +{(unsigned char*)"dashv", {226, 138, 163, 0}}, +{(unsigned char*)"dbkarow", {226, 164, 143, 0}}, +{(unsigned char*)"dblac", {203, 157, 0}}, +{(unsigned char*)"dcaron", {196, 143, 0}}, +{(unsigned char*)"dcy", {208, 180, 0}}, +{(unsigned char*)"dd", {226, 133, 134, 0}}, +{(unsigned char*)"ddagger", {226, 128, 161, 0}}, +{(unsigned char*)"ddarr", {226, 135, 138, 0}}, +{(unsigned char*)"ddotseq", {226, 169, 183, 0}}, +{(unsigned char*)"deg", {194, 176, 0}}, +{(unsigned char*)"delta", {206, 180, 0}}, +{(unsigned char*)"demptyv", {226, 166, 177, 0}}, +{(unsigned char*)"dfisht", {226, 165, 191, 0}}, +{(unsigned char*)"dfr", {240, 157, 148, 161, 0}}, +{(unsigned char*)"dharl", {226, 135, 131, 0}}, +{(unsigned char*)"dharr", {226, 135, 130, 0}}, +{(unsigned char*)"diam", {226, 139, 132, 0}}, +{(unsigned char*)"diamond", {226, 139, 132, 0}}, +{(unsigned char*)"diamondsuit", {226, 153, 166, 0}}, +{(unsigned char*)"diams", {226, 153, 166, 0}}, +{(unsigned char*)"die", {194, 168, 0}}, +{(unsigned char*)"digamma", {207, 157, 0}}, +{(unsigned char*)"disin", {226, 139, 178, 0}}, +{(unsigned char*)"div", {195, 183, 0}}, +{(unsigned char*)"divide", {195, 183, 0}}, +{(unsigned char*)"divideontimes", {226, 139, 135, 0}}, +{(unsigned char*)"divonx", {226, 139, 135, 0}}, +{(unsigned char*)"djcy", {209, 146, 0}}, +{(unsigned char*)"dlcorn", {226, 140, 158, 0}}, +{(unsigned char*)"dlcrop", {226, 140, 141, 0}}, +{(unsigned char*)"dollar", {36, 0}}, +{(unsigned char*)"dopf", {240, 157, 149, 149, 0}}, +{(unsigned char*)"dot", {203, 153, 0}}, +{(unsigned char*)"doteq", {226, 137, 144, 0}}, +{(unsigned char*)"doteqdot", {226, 137, 145, 0}}, +{(unsigned char*)"dotminus", {226, 136, 184, 0}}, +{(unsigned char*)"dotplus", {226, 136, 148, 0}}, +{(unsigned char*)"dotsquare", {226, 138, 161, 0}}, +{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}}, +{(unsigned char*)"downarrow", {226, 134, 147, 0}}, +{(unsigned char*)"downdownarrows", {226, 135, 138, 0}}, +{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}}, +{(unsigned char*)"downharpoonright", {226, 135, 130, 0}}, +{(unsigned char*)"drbkarow", {226, 164, 144, 0}}, +{(unsigned char*)"drcorn", {226, 140, 159, 0}}, +{(unsigned char*)"drcrop", {226, 140, 140, 0}}, +{(unsigned char*)"dscr", {240, 157, 146, 185, 0}}, +{(unsigned char*)"dscy", {209, 149, 0}}, +{(unsigned char*)"dsol", {226, 167, 182, 0}}, +{(unsigned char*)"dstrok", {196, 145, 0}}, +{(unsigned char*)"dtdot", {226, 139, 177, 0}}, +{(unsigned char*)"dtri", {226, 150, 191, 0}}, +{(unsigned char*)"dtrif", {226, 150, 190, 0}}, +{(unsigned char*)"duarr", {226, 135, 181, 0}}, +{(unsigned char*)"duhar", {226, 165, 175, 0}}, +{(unsigned char*)"dwangle", {226, 166, 166, 0}}, +{(unsigned char*)"dzcy", {209, 159, 0}}, +{(unsigned char*)"dzigrarr", {226, 159, 191, 0}}, +{(unsigned char*)"eDDot", {226, 169, 183, 0}}, +{(unsigned char*)"eDot", {226, 137, 145, 0}}, +{(unsigned char*)"eacute", {195, 169, 0}}, +{(unsigned char*)"easter", {226, 169, 174, 0}}, +{(unsigned char*)"ecaron", {196, 155, 0}}, +{(unsigned char*)"ecir", {226, 137, 150, 0}}, +{(unsigned char*)"ecirc", {195, 170, 0}}, +{(unsigned char*)"ecolon", {226, 137, 149, 0}}, +{(unsigned char*)"ecy", {209, 141, 0}}, +{(unsigned char*)"edot", {196, 151, 0}}, +{(unsigned char*)"ee", {226, 133, 135, 0}}, +{(unsigned char*)"efDot", {226, 137, 146, 0}}, +{(unsigned char*)"efr", {240, 157, 148, 162, 0}}, +{(unsigned char*)"eg", {226, 170, 154, 0}}, +{(unsigned char*)"egrave", {195, 168, 0}}, +{(unsigned char*)"egs", {226, 170, 150, 0}}, +{(unsigned char*)"egsdot", {226, 170, 152, 0}}, +{(unsigned char*)"el", {226, 170, 153, 0}}, +{(unsigned char*)"elinters", {226, 143, 167, 0}}, +{(unsigned char*)"ell", {226, 132, 147, 0}}, +{(unsigned char*)"els", {226, 170, 149, 0}}, +{(unsigned char*)"elsdot", {226, 170, 151, 0}}, +{(unsigned char*)"emacr", {196, 147, 0}}, +{(unsigned char*)"empty", {226, 136, 133, 0}}, +{(unsigned char*)"emptyset", {226, 136, 133, 0}}, +{(unsigned char*)"emptyv", {226, 136, 133, 0}}, +{(unsigned char*)"emsp", {226, 128, 131, 0}}, +{(unsigned char*)"emsp13", {226, 128, 132, 0}}, +{(unsigned char*)"emsp14", {226, 128, 133, 0}}, +{(unsigned char*)"eng", {197, 139, 0}}, +{(unsigned char*)"ensp", {226, 128, 130, 0}}, +{(unsigned char*)"eogon", {196, 153, 0}}, +{(unsigned char*)"eopf", {240, 157, 149, 150, 0}}, +{(unsigned char*)"epar", {226, 139, 149, 0}}, +{(unsigned char*)"eparsl", {226, 167, 163, 0}}, +{(unsigned char*)"eplus", {226, 169, 177, 0}}, +{(unsigned char*)"epsi", {206, 181, 0}}, +{(unsigned char*)"epsilon", {206, 181, 0}}, +{(unsigned char*)"epsiv", {207, 181, 0}}, +{(unsigned char*)"eqcirc", {226, 137, 150, 0}}, +{(unsigned char*)"eqcolon", {226, 137, 149, 0}}, +{(unsigned char*)"eqsim", {226, 137, 130, 0}}, +{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}}, +{(unsigned char*)"eqslantless", {226, 170, 149, 0}}, +{(unsigned char*)"equals", {61, 0}}, +{(unsigned char*)"equest", {226, 137, 159, 0}}, +{(unsigned char*)"equiv", {226, 137, 161, 0}}, +{(unsigned char*)"equivDD", {226, 169, 184, 0}}, +{(unsigned char*)"eqvparsl", {226, 167, 165, 0}}, +{(unsigned char*)"erDot", {226, 137, 147, 0}}, +{(unsigned char*)"erarr", {226, 165, 177, 0}}, +{(unsigned char*)"escr", {226, 132, 175, 0}}, +{(unsigned char*)"esdot", {226, 137, 144, 0}}, +{(unsigned char*)"esim", {226, 137, 130, 0}}, +{(unsigned char*)"eta", {206, 183, 0}}, +{(unsigned char*)"eth", {195, 176, 0}}, +{(unsigned char*)"euml", {195, 171, 0}}, +{(unsigned char*)"euro", {226, 130, 172, 0}}, +{(unsigned char*)"excl", {33, 0}}, +{(unsigned char*)"exist", {226, 136, 131, 0}}, +{(unsigned char*)"expectation", {226, 132, 176, 0}}, +{(unsigned char*)"exponentiale", {226, 133, 135, 0}}, +{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}}, +{(unsigned char*)"fcy", {209, 132, 0}}, +{(unsigned char*)"female", {226, 153, 128, 0}}, +{(unsigned char*)"ffilig", {239, 172, 131, 0}}, +{(unsigned char*)"fflig", {239, 172, 128, 0}}, +{(unsigned char*)"ffllig", {239, 172, 132, 0}}, +{(unsigned char*)"ffr", {240, 157, 148, 163, 0}}, +{(unsigned char*)"filig", {239, 172, 129, 0}}, +{(unsigned char*)"fjlig", {102, 106, 0}}, +{(unsigned char*)"flat", {226, 153, 173, 0}}, +{(unsigned char*)"fllig", {239, 172, 130, 0}}, +{(unsigned char*)"fltns", {226, 150, 177, 0}}, +{(unsigned char*)"fnof", {198, 146, 0}}, +{(unsigned char*)"fopf", {240, 157, 149, 151, 0}}, +{(unsigned char*)"forall", {226, 136, 128, 0}}, +{(unsigned char*)"fork", {226, 139, 148, 0}}, +{(unsigned char*)"forkv", {226, 171, 153, 0}}, +{(unsigned char*)"fpartint", {226, 168, 141, 0}}, +{(unsigned char*)"frac12", {194, 189, 0}}, +{(unsigned char*)"frac13", {226, 133, 147, 0}}, +{(unsigned char*)"frac14", {194, 188, 0}}, +{(unsigned char*)"frac15", {226, 133, 149, 0}}, +{(unsigned char*)"frac16", {226, 133, 153, 0}}, +{(unsigned char*)"frac18", {226, 133, 155, 0}}, +{(unsigned char*)"frac23", {226, 133, 148, 0}}, +{(unsigned char*)"frac25", {226, 133, 150, 0}}, +{(unsigned char*)"frac34", {194, 190, 0}}, +{(unsigned char*)"frac35", {226, 133, 151, 0}}, +{(unsigned char*)"frac38", {226, 133, 156, 0}}, +{(unsigned char*)"frac45", {226, 133, 152, 0}}, +{(unsigned char*)"frac56", {226, 133, 154, 0}}, +{(unsigned char*)"frac58", {226, 133, 157, 0}}, +{(unsigned char*)"frac78", {226, 133, 158, 0}}, +{(unsigned char*)"frasl", {226, 129, 132, 0}}, +{(unsigned char*)"frown", {226, 140, 162, 0}}, +{(unsigned char*)"fscr", {240, 157, 146, 187, 0}}, +{(unsigned char*)"gE", {226, 137, 167, 0}}, +{(unsigned char*)"gEl", {226, 170, 140, 0}}, +{(unsigned char*)"gacute", {199, 181, 0}}, +{(unsigned char*)"gamma", {206, 179, 0}}, +{(unsigned char*)"gammad", {207, 157, 0}}, +{(unsigned char*)"gap", {226, 170, 134, 0}}, +{(unsigned char*)"gbreve", {196, 159, 0}}, +{(unsigned char*)"gcirc", {196, 157, 0}}, +{(unsigned char*)"gcy", {208, 179, 0}}, +{(unsigned char*)"gdot", {196, 161, 0}}, +{(unsigned char*)"ge", {226, 137, 165, 0}}, +{(unsigned char*)"gel", {226, 139, 155, 0}}, +{(unsigned char*)"geq", {226, 137, 165, 0}}, +{(unsigned char*)"geqq", {226, 137, 167, 0}}, +{(unsigned char*)"geqslant", {226, 169, 190, 0}}, +{(unsigned char*)"ges", {226, 169, 190, 0}}, +{(unsigned char*)"gescc", {226, 170, 169, 0}}, +{(unsigned char*)"gesdot", {226, 170, 128, 0}}, +{(unsigned char*)"gesdoto", {226, 170, 130, 0}}, +{(unsigned char*)"gesdotol", {226, 170, 132, 0}}, +{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}}, +{(unsigned char*)"gesles", {226, 170, 148, 0}}, +{(unsigned char*)"gfr", {240, 157, 148, 164, 0}}, +{(unsigned char*)"gg", {226, 137, 171, 0}}, +{(unsigned char*)"ggg", {226, 139, 153, 0}}, +{(unsigned char*)"gimel", {226, 132, 183, 0}}, +{(unsigned char*)"gjcy", {209, 147, 0}}, +{(unsigned char*)"gl", {226, 137, 183, 0}}, +{(unsigned char*)"glE", {226, 170, 146, 0}}, +{(unsigned char*)"gla", {226, 170, 165, 0}}, +{(unsigned char*)"glj", {226, 170, 164, 0}}, +{(unsigned char*)"gnE", {226, 137, 169, 0}}, +{(unsigned char*)"gnap", {226, 170, 138, 0}}, +{(unsigned char*)"gnapprox", {226, 170, 138, 0}}, +{(unsigned char*)"gne", {226, 170, 136, 0}}, +{(unsigned char*)"gneq", {226, 170, 136, 0}}, +{(unsigned char*)"gneqq", {226, 137, 169, 0}}, +{(unsigned char*)"gnsim", {226, 139, 167, 0}}, +{(unsigned char*)"gopf", {240, 157, 149, 152, 0}}, +{(unsigned char*)"grave", {96, 0}}, +{(unsigned char*)"gscr", {226, 132, 138, 0}}, +{(unsigned char*)"gsim", {226, 137, 179, 0}}, +{(unsigned char*)"gsime", {226, 170, 142, 0}}, +{(unsigned char*)"gsiml", {226, 170, 144, 0}}, +{(unsigned char*)"gt", {62, 0}}, +{(unsigned char*)"gtcc", {226, 170, 167, 0}}, +{(unsigned char*)"gtcir", {226, 169, 186, 0}}, +{(unsigned char*)"gtdot", {226, 139, 151, 0}}, +{(unsigned char*)"gtlPar", {226, 166, 149, 0}}, +{(unsigned char*)"gtquest", {226, 169, 188, 0}}, +{(unsigned char*)"gtrapprox", {226, 170, 134, 0}}, +{(unsigned char*)"gtrarr", {226, 165, 184, 0}}, +{(unsigned char*)"gtrdot", {226, 139, 151, 0}}, +{(unsigned char*)"gtreqless", {226, 139, 155, 0}}, +{(unsigned char*)"gtreqqless", {226, 170, 140, 0}}, +{(unsigned char*)"gtrless", {226, 137, 183, 0}}, +{(unsigned char*)"gtrsim", {226, 137, 179, 0}}, +{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}}, +{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}}, +{(unsigned char*)"hArr", {226, 135, 148, 0}}, +{(unsigned char*)"hairsp", {226, 128, 138, 0}}, +{(unsigned char*)"half", {194, 189, 0}}, +{(unsigned char*)"hamilt", {226, 132, 139, 0}}, +{(unsigned char*)"hardcy", {209, 138, 0}}, +{(unsigned char*)"harr", {226, 134, 148, 0}}, +{(unsigned char*)"harrcir", {226, 165, 136, 0}}, +{(unsigned char*)"harrw", {226, 134, 173, 0}}, +{(unsigned char*)"hbar", {226, 132, 143, 0}}, +{(unsigned char*)"hcirc", {196, 165, 0}}, +{(unsigned char*)"hearts", {226, 153, 165, 0}}, +{(unsigned char*)"heartsuit", {226, 153, 165, 0}}, +{(unsigned char*)"hellip", {226, 128, 166, 0}}, +{(unsigned char*)"hercon", {226, 138, 185, 0}}, +{(unsigned char*)"hfr", {240, 157, 148, 165, 0}}, +{(unsigned char*)"hksearow", {226, 164, 165, 0}}, +{(unsigned char*)"hkswarow", {226, 164, 166, 0}}, +{(unsigned char*)"hoarr", {226, 135, 191, 0}}, +{(unsigned char*)"homtht", {226, 136, 187, 0}}, +{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}}, +{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}}, +{(unsigned char*)"hopf", {240, 157, 149, 153, 0}}, +{(unsigned char*)"horbar", {226, 128, 149, 0}}, +{(unsigned char*)"hscr", {240, 157, 146, 189, 0}}, +{(unsigned char*)"hslash", {226, 132, 143, 0}}, +{(unsigned char*)"hstrok", {196, 167, 0}}, +{(unsigned char*)"hybull", {226, 129, 131, 0}}, +{(unsigned char*)"hyphen", {226, 128, 144, 0}}, +{(unsigned char*)"iacute", {195, 173, 0}}, +{(unsigned char*)"ic", {226, 129, 163, 0}}, +{(unsigned char*)"icirc", {195, 174, 0}}, +{(unsigned char*)"icy", {208, 184, 0}}, +{(unsigned char*)"iecy", {208, 181, 0}}, +{(unsigned char*)"iexcl", {194, 161, 0}}, +{(unsigned char*)"iff", {226, 135, 148, 0}}, +{(unsigned char*)"ifr", {240, 157, 148, 166, 0}}, +{(unsigned char*)"igrave", {195, 172, 0}}, +{(unsigned char*)"ii", {226, 133, 136, 0}}, +{(unsigned char*)"iiiint", {226, 168, 140, 0}}, +{(unsigned char*)"iiint", {226, 136, 173, 0}}, +{(unsigned char*)"iinfin", {226, 167, 156, 0}}, +{(unsigned char*)"iiota", {226, 132, 169, 0}}, +{(unsigned char*)"ijlig", {196, 179, 0}}, +{(unsigned char*)"imacr", {196, 171, 0}}, +{(unsigned char*)"image", {226, 132, 145, 0}}, +{(unsigned char*)"imagline", {226, 132, 144, 0}}, +{(unsigned char*)"imagpart", {226, 132, 145, 0}}, +{(unsigned char*)"imath", {196, 177, 0}}, +{(unsigned char*)"imof", {226, 138, 183, 0}}, +{(unsigned char*)"imped", {198, 181, 0}}, +{(unsigned char*)"in", {226, 136, 136, 0}}, +{(unsigned char*)"incare", {226, 132, 133, 0}}, +{(unsigned char*)"infin", {226, 136, 158, 0}}, +{(unsigned char*)"infintie", {226, 167, 157, 0}}, +{(unsigned char*)"inodot", {196, 177, 0}}, +{(unsigned char*)"int", {226, 136, 171, 0}}, +{(unsigned char*)"intcal", {226, 138, 186, 0}}, +{(unsigned char*)"integers", {226, 132, 164, 0}}, +{(unsigned char*)"intercal", {226, 138, 186, 0}}, +{(unsigned char*)"intlarhk", {226, 168, 151, 0}}, +{(unsigned char*)"intprod", {226, 168, 188, 0}}, +{(unsigned char*)"iocy", {209, 145, 0}}, +{(unsigned char*)"iogon", {196, 175, 0}}, +{(unsigned char*)"iopf", {240, 157, 149, 154, 0}}, +{(unsigned char*)"iota", {206, 185, 0}}, +{(unsigned char*)"iprod", {226, 168, 188, 0}}, +{(unsigned char*)"iquest", {194, 191, 0}}, +{(unsigned char*)"iscr", {240, 157, 146, 190, 0}}, +{(unsigned char*)"isin", {226, 136, 136, 0}}, +{(unsigned char*)"isinE", {226, 139, 185, 0}}, +{(unsigned char*)"isindot", {226, 139, 181, 0}}, +{(unsigned char*)"isins", {226, 139, 180, 0}}, +{(unsigned char*)"isinsv", {226, 139, 179, 0}}, +{(unsigned char*)"isinv", {226, 136, 136, 0}}, +{(unsigned char*)"it", {226, 129, 162, 0}}, +{(unsigned char*)"itilde", {196, 169, 0}}, +{(unsigned char*)"iukcy", {209, 150, 0}}, +{(unsigned char*)"iuml", {195, 175, 0}}, +{(unsigned char*)"jcirc", {196, 181, 0}}, +{(unsigned char*)"jcy", {208, 185, 0}}, +{(unsigned char*)"jfr", {240, 157, 148, 167, 0}}, +{(unsigned char*)"jmath", {200, 183, 0}}, +{(unsigned char*)"jopf", {240, 157, 149, 155, 0}}, +{(unsigned char*)"jscr", {240, 157, 146, 191, 0}}, +{(unsigned char*)"jsercy", {209, 152, 0}}, +{(unsigned char*)"jukcy", {209, 148, 0}}, +{(unsigned char*)"kappa", {206, 186, 0}}, +{(unsigned char*)"kappav", {207, 176, 0}}, +{(unsigned char*)"kcedil", {196, 183, 0}}, +{(unsigned char*)"kcy", {208, 186, 0}}, +{(unsigned char*)"kfr", {240, 157, 148, 168, 0}}, +{(unsigned char*)"kgreen", {196, 184, 0}}, +{(unsigned char*)"khcy", {209, 133, 0}}, +{(unsigned char*)"kjcy", {209, 156, 0}}, +{(unsigned char*)"kopf", {240, 157, 149, 156, 0}}, +{(unsigned char*)"kscr", {240, 157, 147, 128, 0}}, +{(unsigned char*)"lAarr", {226, 135, 154, 0}}, +{(unsigned char*)"lArr", {226, 135, 144, 0}}, +{(unsigned char*)"lAtail", {226, 164, 155, 0}}, +{(unsigned char*)"lBarr", {226, 164, 142, 0}}, +{(unsigned char*)"lE", {226, 137, 166, 0}}, +{(unsigned char*)"lEg", {226, 170, 139, 0}}, +{(unsigned char*)"lHar", {226, 165, 162, 0}}, +{(unsigned char*)"lacute", {196, 186, 0}}, +{(unsigned char*)"laemptyv", {226, 166, 180, 0}}, +{(unsigned char*)"lagran", {226, 132, 146, 0}}, +{(unsigned char*)"lambda", {206, 187, 0}}, +{(unsigned char*)"lang", {226, 159, 168, 0}}, +{(unsigned char*)"langd", {226, 166, 145, 0}}, +{(unsigned char*)"langle", {226, 159, 168, 0}}, +{(unsigned char*)"lap", {226, 170, 133, 0}}, +{(unsigned char*)"laquo", {194, 171, 0}}, +{(unsigned char*)"larr", {226, 134, 144, 0}}, +{(unsigned char*)"larrb", {226, 135, 164, 0}}, +{(unsigned char*)"larrbfs", {226, 164, 159, 0}}, +{(unsigned char*)"larrfs", {226, 164, 157, 0}}, +{(unsigned char*)"larrhk", {226, 134, 169, 0}}, +{(unsigned char*)"larrlp", {226, 134, 171, 0}}, +{(unsigned char*)"larrpl", {226, 164, 185, 0}}, +{(unsigned char*)"larrsim", {226, 165, 179, 0}}, +{(unsigned char*)"larrtl", {226, 134, 162, 0}}, +{(unsigned char*)"lat", {226, 170, 171, 0}}, +{(unsigned char*)"latail", {226, 164, 153, 0}}, +{(unsigned char*)"late", {226, 170, 173, 0}}, +{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}}, +{(unsigned char*)"lbarr", {226, 164, 140, 0}}, +{(unsigned char*)"lbbrk", {226, 157, 178, 0}}, +{(unsigned char*)"lbrace", {123, 0}}, +{(unsigned char*)"lbrack", {91, 0}}, +{(unsigned char*)"lbrke", {226, 166, 139, 0}}, +{(unsigned char*)"lbrksld", {226, 166, 143, 0}}, +{(unsigned char*)"lbrkslu", {226, 166, 141, 0}}, +{(unsigned char*)"lcaron", {196, 190, 0}}, +{(unsigned char*)"lcedil", {196, 188, 0}}, +{(unsigned char*)"lceil", {226, 140, 136, 0}}, +{(unsigned char*)"lcub", {123, 0}}, +{(unsigned char*)"lcy", {208, 187, 0}}, +{(unsigned char*)"ldca", {226, 164, 182, 0}}, +{(unsigned char*)"ldquo", {226, 128, 156, 0}}, +{(unsigned char*)"ldquor", {226, 128, 158, 0}}, +{(unsigned char*)"ldrdhar", {226, 165, 167, 0}}, +{(unsigned char*)"ldrushar", {226, 165, 139, 0}}, +{(unsigned char*)"ldsh", {226, 134, 178, 0}}, +{(unsigned char*)"le", {226, 137, 164, 0}}, +{(unsigned char*)"leftarrow", {226, 134, 144, 0}}, +{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}}, +{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}}, +{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}}, +{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}}, +{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}}, +{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}}, +{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}}, +{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}}, +{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}}, +{(unsigned char*)"leg", {226, 139, 154, 0}}, +{(unsigned char*)"leq", {226, 137, 164, 0}}, +{(unsigned char*)"leqq", {226, 137, 166, 0}}, +{(unsigned char*)"leqslant", {226, 169, 189, 0}}, +{(unsigned char*)"les", {226, 169, 189, 0}}, +{(unsigned char*)"lescc", {226, 170, 168, 0}}, +{(unsigned char*)"lesdot", {226, 169, 191, 0}}, +{(unsigned char*)"lesdoto", {226, 170, 129, 0}}, +{(unsigned char*)"lesdotor", {226, 170, 131, 0}}, +{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}}, +{(unsigned char*)"lesges", {226, 170, 147, 0}}, +{(unsigned char*)"lessapprox", {226, 170, 133, 0}}, +{(unsigned char*)"lessdot", {226, 139, 150, 0}}, +{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}}, +{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}}, +{(unsigned char*)"lessgtr", {226, 137, 182, 0}}, +{(unsigned char*)"lesssim", {226, 137, 178, 0}}, +{(unsigned char*)"lfisht", {226, 165, 188, 0}}, +{(unsigned char*)"lfloor", {226, 140, 138, 0}}, +{(unsigned char*)"lfr", {240, 157, 148, 169, 0}}, +{(unsigned char*)"lg", {226, 137, 182, 0}}, +{(unsigned char*)"lgE", {226, 170, 145, 0}}, +{(unsigned char*)"lhard", {226, 134, 189, 0}}, +{(unsigned char*)"lharu", {226, 134, 188, 0}}, +{(unsigned char*)"lharul", {226, 165, 170, 0}}, +{(unsigned char*)"lhblk", {226, 150, 132, 0}}, +{(unsigned char*)"ljcy", {209, 153, 0}}, +{(unsigned char*)"ll", {226, 137, 170, 0}}, +{(unsigned char*)"llarr", {226, 135, 135, 0}}, +{(unsigned char*)"llcorner", {226, 140, 158, 0}}, +{(unsigned char*)"llhard", {226, 165, 171, 0}}, +{(unsigned char*)"lltri", {226, 151, 186, 0}}, +{(unsigned char*)"lmidot", {197, 128, 0}}, +{(unsigned char*)"lmoust", {226, 142, 176, 0}}, +{(unsigned char*)"lmoustache", {226, 142, 176, 0}}, +{(unsigned char*)"lnE", {226, 137, 168, 0}}, +{(unsigned char*)"lnap", {226, 170, 137, 0}}, +{(unsigned char*)"lnapprox", {226, 170, 137, 0}}, +{(unsigned char*)"lne", {226, 170, 135, 0}}, +{(unsigned char*)"lneq", {226, 170, 135, 0}}, +{(unsigned char*)"lneqq", {226, 137, 168, 0}}, +{(unsigned char*)"lnsim", {226, 139, 166, 0}}, +{(unsigned char*)"loang", {226, 159, 172, 0}}, +{(unsigned char*)"loarr", {226, 135, 189, 0}}, +{(unsigned char*)"lobrk", {226, 159, 166, 0}}, +{(unsigned char*)"longleftarrow", {226, 159, 181, 0}}, +{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}}, +{(unsigned char*)"longmapsto", {226, 159, 188, 0}}, +{(unsigned char*)"longrightarrow", {226, 159, 182, 0}}, +{(unsigned char*)"looparrowleft", {226, 134, 171, 0}}, +{(unsigned char*)"looparrowright", {226, 134, 172, 0}}, +{(unsigned char*)"lopar", {226, 166, 133, 0}}, +{(unsigned char*)"lopf", {240, 157, 149, 157, 0}}, +{(unsigned char*)"loplus", {226, 168, 173, 0}}, +{(unsigned char*)"lotimes", {226, 168, 180, 0}}, +{(unsigned char*)"lowast", {226, 136, 151, 0}}, +{(unsigned char*)"lowbar", {95, 0}}, +{(unsigned char*)"loz", {226, 151, 138, 0}}, +{(unsigned char*)"lozenge", {226, 151, 138, 0}}, +{(unsigned char*)"lozf", {226, 167, 171, 0}}, +{(unsigned char*)"lpar", {40, 0}}, +{(unsigned char*)"lparlt", {226, 166, 147, 0}}, +{(unsigned char*)"lrarr", {226, 135, 134, 0}}, +{(unsigned char*)"lrcorner", {226, 140, 159, 0}}, +{(unsigned char*)"lrhar", {226, 135, 139, 0}}, +{(unsigned char*)"lrhard", {226, 165, 173, 0}}, +{(unsigned char*)"lrm", {226, 128, 142, 0}}, +{(unsigned char*)"lrtri", {226, 138, 191, 0}}, +{(unsigned char*)"lsaquo", {226, 128, 185, 0}}, +{(unsigned char*)"lscr", {240, 157, 147, 129, 0}}, +{(unsigned char*)"lsh", {226, 134, 176, 0}}, +{(unsigned char*)"lsim", {226, 137, 178, 0}}, +{(unsigned char*)"lsime", {226, 170, 141, 0}}, +{(unsigned char*)"lsimg", {226, 170, 143, 0}}, +{(unsigned char*)"lsqb", {91, 0}}, +{(unsigned char*)"lsquo", {226, 128, 152, 0}}, +{(unsigned char*)"lsquor", {226, 128, 154, 0}}, +{(unsigned char*)"lstrok", {197, 130, 0}}, +{(unsigned char*)"lt", {60, 0}}, +{(unsigned char*)"ltcc", {226, 170, 166, 0}}, +{(unsigned char*)"ltcir", {226, 169, 185, 0}}, +{(unsigned char*)"ltdot", {226, 139, 150, 0}}, +{(unsigned char*)"lthree", {226, 139, 139, 0}}, +{(unsigned char*)"ltimes", {226, 139, 137, 0}}, +{(unsigned char*)"ltlarr", {226, 165, 182, 0}}, +{(unsigned char*)"ltquest", {226, 169, 187, 0}}, +{(unsigned char*)"ltrPar", {226, 166, 150, 0}}, +{(unsigned char*)"ltri", {226, 151, 131, 0}}, +{(unsigned char*)"ltrie", {226, 138, 180, 0}}, +{(unsigned char*)"ltrif", {226, 151, 130, 0}}, +{(unsigned char*)"lurdshar", {226, 165, 138, 0}}, +{(unsigned char*)"luruhar", {226, 165, 166, 0}}, +{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}}, +{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}}, +{(unsigned char*)"mDDot", {226, 136, 186, 0}}, +{(unsigned char*)"macr", {194, 175, 0}}, +{(unsigned char*)"male", {226, 153, 130, 0}}, +{(unsigned char*)"malt", {226, 156, 160, 0}}, +{(unsigned char*)"maltese", {226, 156, 160, 0}}, +{(unsigned char*)"map", {226, 134, 166, 0}}, +{(unsigned char*)"mapsto", {226, 134, 166, 0}}, +{(unsigned char*)"mapstodown", {226, 134, 167, 0}}, +{(unsigned char*)"mapstoleft", {226, 134, 164, 0}}, +{(unsigned char*)"mapstoup", {226, 134, 165, 0}}, +{(unsigned char*)"marker", {226, 150, 174, 0}}, +{(unsigned char*)"mcomma", {226, 168, 169, 0}}, +{(unsigned char*)"mcy", {208, 188, 0}}, +{(unsigned char*)"mdash", {226, 128, 148, 0}}, +{(unsigned char*)"measuredangle", {226, 136, 161, 0}}, +{(unsigned char*)"mfr", {240, 157, 148, 170, 0}}, +{(unsigned char*)"mho", {226, 132, 167, 0}}, +{(unsigned char*)"micro", {194, 181, 0}}, +{(unsigned char*)"mid", {226, 136, 163, 0}}, +{(unsigned char*)"midast", {42, 0}}, +{(unsigned char*)"midcir", {226, 171, 176, 0}}, +{(unsigned char*)"middot", {194, 183, 0}}, +{(unsigned char*)"minus", {226, 136, 146, 0}}, +{(unsigned char*)"minusb", {226, 138, 159, 0}}, +{(unsigned char*)"minusd", {226, 136, 184, 0}}, +{(unsigned char*)"minusdu", {226, 168, 170, 0}}, +{(unsigned char*)"mlcp", {226, 171, 155, 0}}, +{(unsigned char*)"mldr", {226, 128, 166, 0}}, +{(unsigned char*)"mnplus", {226, 136, 147, 0}}, +{(unsigned char*)"models", {226, 138, 167, 0}}, +{(unsigned char*)"mopf", {240, 157, 149, 158, 0}}, +{(unsigned char*)"mp", {226, 136, 147, 0}}, +{(unsigned char*)"mscr", {240, 157, 147, 130, 0}}, +{(unsigned char*)"mstpos", {226, 136, 190, 0}}, +{(unsigned char*)"mu", {206, 188, 0}}, +{(unsigned char*)"multimap", {226, 138, 184, 0}}, +{(unsigned char*)"mumap", {226, 138, 184, 0}}, +{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}}, +{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}}, +{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}}, +{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}}, +{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}}, +{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}}, +{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}}, +{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}}, +{(unsigned char*)"nRightarrow", {226, 135, 143, 0}}, +{(unsigned char*)"nVDash", {226, 138, 175, 0}}, +{(unsigned char*)"nVdash", {226, 138, 174, 0}}, +{(unsigned char*)"nabla", {226, 136, 135, 0}}, +{(unsigned char*)"nacute", {197, 132, 0}}, +{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}}, +{(unsigned char*)"nap", {226, 137, 137, 0}}, +{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}}, +{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}}, +{(unsigned char*)"napos", {197, 137, 0}}, +{(unsigned char*)"napprox", {226, 137, 137, 0}}, +{(unsigned char*)"natur", {226, 153, 174, 0}}, +{(unsigned char*)"natural", {226, 153, 174, 0}}, +{(unsigned char*)"naturals", {226, 132, 149, 0}}, +{(unsigned char*)"nbsp", {194, 160, 0}}, +{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}}, +{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}}, +{(unsigned char*)"ncap", {226, 169, 131, 0}}, +{(unsigned char*)"ncaron", {197, 136, 0}}, +{(unsigned char*)"ncedil", {197, 134, 0}}, +{(unsigned char*)"ncong", {226, 137, 135, 0}}, +{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}}, +{(unsigned char*)"ncup", {226, 169, 130, 0}}, +{(unsigned char*)"ncy", {208, 189, 0}}, +{(unsigned char*)"ndash", {226, 128, 147, 0}}, +{(unsigned char*)"ne", {226, 137, 160, 0}}, +{(unsigned char*)"neArr", {226, 135, 151, 0}}, +{(unsigned char*)"nearhk", {226, 164, 164, 0}}, +{(unsigned char*)"nearr", {226, 134, 151, 0}}, +{(unsigned char*)"nearrow", {226, 134, 151, 0}}, +{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}}, +{(unsigned char*)"nequiv", {226, 137, 162, 0}}, +{(unsigned char*)"nesear", {226, 164, 168, 0}}, +{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}}, +{(unsigned char*)"nexist", {226, 136, 132, 0}}, +{(unsigned char*)"nexists", {226, 136, 132, 0}}, +{(unsigned char*)"nfr", {240, 157, 148, 171, 0}}, +{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"nge", {226, 137, 177, 0}}, +{(unsigned char*)"ngeq", {226, 137, 177, 0}}, +{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"ngsim", {226, 137, 181, 0}}, +{(unsigned char*)"ngt", {226, 137, 175, 0}}, +{(unsigned char*)"ngtr", {226, 137, 175, 0}}, +{(unsigned char*)"nhArr", {226, 135, 142, 0}}, +{(unsigned char*)"nharr", {226, 134, 174, 0}}, +{(unsigned char*)"nhpar", {226, 171, 178, 0}}, +{(unsigned char*)"ni", {226, 136, 139, 0}}, +{(unsigned char*)"nis", {226, 139, 188, 0}}, +{(unsigned char*)"nisd", {226, 139, 186, 0}}, +{(unsigned char*)"niv", {226, 136, 139, 0}}, +{(unsigned char*)"njcy", {209, 154, 0}}, +{(unsigned char*)"nlArr", {226, 135, 141, 0}}, +{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}}, +{(unsigned char*)"nlarr", {226, 134, 154, 0}}, +{(unsigned char*)"nldr", {226, 128, 165, 0}}, +{(unsigned char*)"nle", {226, 137, 176, 0}}, +{(unsigned char*)"nleftarrow", {226, 134, 154, 0}}, +{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}}, +{(unsigned char*)"nleq", {226, 137, 176, 0}}, +{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}}, +{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"nless", {226, 137, 174, 0}}, +{(unsigned char*)"nlsim", {226, 137, 180, 0}}, +{(unsigned char*)"nlt", {226, 137, 174, 0}}, +{(unsigned char*)"nltri", {226, 139, 170, 0}}, +{(unsigned char*)"nltrie", {226, 139, 172, 0}}, +{(unsigned char*)"nmid", {226, 136, 164, 0}}, +{(unsigned char*)"nopf", {240, 157, 149, 159, 0}}, +{(unsigned char*)"not", {194, 172, 0}}, +{(unsigned char*)"notin", {226, 136, 137, 0}}, +{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}}, +{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}}, +{(unsigned char*)"notinva", {226, 136, 137, 0}}, +{(unsigned char*)"notinvb", {226, 139, 183, 0}}, +{(unsigned char*)"notinvc", {226, 139, 182, 0}}, +{(unsigned char*)"notni", {226, 136, 140, 0}}, +{(unsigned char*)"notniva", {226, 136, 140, 0}}, +{(unsigned char*)"notnivb", {226, 139, 190, 0}}, +{(unsigned char*)"notnivc", {226, 139, 189, 0}}, +{(unsigned char*)"npar", {226, 136, 166, 0}}, +{(unsigned char*)"nparallel", {226, 136, 166, 0}}, +{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}}, +{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}}, +{(unsigned char*)"npolint", {226, 168, 148, 0}}, +{(unsigned char*)"npr", {226, 138, 128, 0}}, +{(unsigned char*)"nprcue", {226, 139, 160, 0}}, +{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"nprec", {226, 138, 128, 0}}, +{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"nrArr", {226, 135, 143, 0}}, +{(unsigned char*)"nrarr", {226, 134, 155, 0}}, +{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}}, +{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}}, +{(unsigned char*)"nrightarrow", {226, 134, 155, 0}}, +{(unsigned char*)"nrtri", {226, 139, 171, 0}}, +{(unsigned char*)"nrtrie", {226, 139, 173, 0}}, +{(unsigned char*)"nsc", {226, 138, 129, 0}}, +{(unsigned char*)"nsccue", {226, 139, 161, 0}}, +{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"nscr", {240, 157, 147, 131, 0}}, +{(unsigned char*)"nshortmid", {226, 136, 164, 0}}, +{(unsigned char*)"nshortparallel", {226, 136, 166, 0}}, +{(unsigned char*)"nsim", {226, 137, 129, 0}}, +{(unsigned char*)"nsime", {226, 137, 132, 0}}, +{(unsigned char*)"nsimeq", {226, 137, 132, 0}}, +{(unsigned char*)"nsmid", {226, 136, 164, 0}}, +{(unsigned char*)"nspar", {226, 136, 166, 0}}, +{(unsigned char*)"nsqsube", {226, 139, 162, 0}}, +{(unsigned char*)"nsqsupe", {226, 139, 163, 0}}, +{(unsigned char*)"nsub", {226, 138, 132, 0}}, +{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}}, +{(unsigned char*)"nsube", {226, 138, 136, 0}}, +{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"nsubseteq", {226, 138, 136, 0}}, +{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}}, +{(unsigned char*)"nsucc", {226, 138, 129, 0}}, +{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"nsup", {226, 138, 133, 0}}, +{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}}, +{(unsigned char*)"nsupe", {226, 138, 137, 0}}, +{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"nsupseteq", {226, 138, 137, 0}}, +{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}}, +{(unsigned char*)"ntgl", {226, 137, 185, 0}}, +{(unsigned char*)"ntilde", {195, 177, 0}}, +{(unsigned char*)"ntlg", {226, 137, 184, 0}}, +{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}}, +{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}}, +{(unsigned char*)"ntriangleright", {226, 139, 171, 0}}, +{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}}, +{(unsigned char*)"nu", {206, 189, 0}}, +{(unsigned char*)"num", {35, 0}}, +{(unsigned char*)"numero", {226, 132, 150, 0}}, +{(unsigned char*)"numsp", {226, 128, 135, 0}}, +{(unsigned char*)"nvDash", {226, 138, 173, 0}}, +{(unsigned char*)"nvHarr", {226, 164, 132, 0}}, +{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}}, +{(unsigned char*)"nvdash", {226, 138, 172, 0}}, +{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}}, +{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}}, +{(unsigned char*)"nvinfin", {226, 167, 158, 0}}, +{(unsigned char*)"nvlArr", {226, 164, 130, 0}}, +{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}}, +{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}}, +{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}}, +{(unsigned char*)"nvrArr", {226, 164, 131, 0}}, +{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}}, +{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}}, +{(unsigned char*)"nwArr", {226, 135, 150, 0}}, +{(unsigned char*)"nwarhk", {226, 164, 163, 0}}, +{(unsigned char*)"nwarr", {226, 134, 150, 0}}, +{(unsigned char*)"nwarrow", {226, 134, 150, 0}}, +{(unsigned char*)"nwnear", {226, 164, 167, 0}}, +{(unsigned char*)"oS", {226, 147, 136, 0}}, +{(unsigned char*)"oacute", {195, 179, 0}}, +{(unsigned char*)"oast", {226, 138, 155, 0}}, +{(unsigned char*)"ocir", {226, 138, 154, 0}}, +{(unsigned char*)"ocirc", {195, 180, 0}}, +{(unsigned char*)"ocy", {208, 190, 0}}, +{(unsigned char*)"odash", {226, 138, 157, 0}}, +{(unsigned char*)"odblac", {197, 145, 0}}, +{(unsigned char*)"odiv", {226, 168, 184, 0}}, +{(unsigned char*)"odot", {226, 138, 153, 0}}, +{(unsigned char*)"odsold", {226, 166, 188, 0}}, +{(unsigned char*)"oelig", {197, 147, 0}}, +{(unsigned char*)"ofcir", {226, 166, 191, 0}}, +{(unsigned char*)"ofr", {240, 157, 148, 172, 0}}, +{(unsigned char*)"ogon", {203, 155, 0}}, +{(unsigned char*)"ograve", {195, 178, 0}}, +{(unsigned char*)"ogt", {226, 167, 129, 0}}, +{(unsigned char*)"ohbar", {226, 166, 181, 0}}, +{(unsigned char*)"ohm", {206, 169, 0}}, +{(unsigned char*)"oint", {226, 136, 174, 0}}, +{(unsigned char*)"olarr", {226, 134, 186, 0}}, +{(unsigned char*)"olcir", {226, 166, 190, 0}}, +{(unsigned char*)"olcross", {226, 166, 187, 0}}, +{(unsigned char*)"oline", {226, 128, 190, 0}}, +{(unsigned char*)"olt", {226, 167, 128, 0}}, +{(unsigned char*)"omacr", {197, 141, 0}}, +{(unsigned char*)"omega", {207, 137, 0}}, +{(unsigned char*)"omicron", {206, 191, 0}}, +{(unsigned char*)"omid", {226, 166, 182, 0}}, +{(unsigned char*)"ominus", {226, 138, 150, 0}}, +{(unsigned char*)"oopf", {240, 157, 149, 160, 0}}, +{(unsigned char*)"opar", {226, 166, 183, 0}}, +{(unsigned char*)"operp", {226, 166, 185, 0}}, +{(unsigned char*)"oplus", {226, 138, 149, 0}}, +{(unsigned char*)"or", {226, 136, 168, 0}}, +{(unsigned char*)"orarr", {226, 134, 187, 0}}, +{(unsigned char*)"ord", {226, 169, 157, 0}}, +{(unsigned char*)"order", {226, 132, 180, 0}}, +{(unsigned char*)"orderof", {226, 132, 180, 0}}, +{(unsigned char*)"ordf", {194, 170, 0}}, +{(unsigned char*)"ordm", {194, 186, 0}}, +{(unsigned char*)"origof", {226, 138, 182, 0}}, +{(unsigned char*)"oror", {226, 169, 150, 0}}, +{(unsigned char*)"orslope", {226, 169, 151, 0}}, +{(unsigned char*)"orv", {226, 169, 155, 0}}, +{(unsigned char*)"oscr", {226, 132, 180, 0}}, +{(unsigned char*)"oslash", {195, 184, 0}}, +{(unsigned char*)"osol", {226, 138, 152, 0}}, +{(unsigned char*)"otilde", {195, 181, 0}}, +{(unsigned char*)"otimes", {226, 138, 151, 0}}, +{(unsigned char*)"otimesas", {226, 168, 182, 0}}, +{(unsigned char*)"ouml", {195, 182, 0}}, +{(unsigned char*)"ovbar", {226, 140, 189, 0}}, +{(unsigned char*)"par", {226, 136, 165, 0}}, +{(unsigned char*)"para", {194, 182, 0}}, +{(unsigned char*)"parallel", {226, 136, 165, 0}}, +{(unsigned char*)"parsim", {226, 171, 179, 0}}, +{(unsigned char*)"parsl", {226, 171, 189, 0}}, +{(unsigned char*)"part", {226, 136, 130, 0}}, +{(unsigned char*)"pcy", {208, 191, 0}}, +{(unsigned char*)"percnt", {37, 0}}, +{(unsigned char*)"period", {46, 0}}, +{(unsigned char*)"permil", {226, 128, 176, 0}}, +{(unsigned char*)"perp", {226, 138, 165, 0}}, +{(unsigned char*)"pertenk", {226, 128, 177, 0}}, +{(unsigned char*)"pfr", {240, 157, 148, 173, 0}}, +{(unsigned char*)"phi", {207, 134, 0}}, +{(unsigned char*)"phiv", {207, 149, 0}}, +{(unsigned char*)"phmmat", {226, 132, 179, 0}}, +{(unsigned char*)"phone", {226, 152, 142, 0}}, +{(unsigned char*)"pi", {207, 128, 0}}, +{(unsigned char*)"pitchfork", {226, 139, 148, 0}}, +{(unsigned char*)"piv", {207, 150, 0}}, +{(unsigned char*)"planck", {226, 132, 143, 0}}, +{(unsigned char*)"planckh", {226, 132, 142, 0}}, +{(unsigned char*)"plankv", {226, 132, 143, 0}}, +{(unsigned char*)"plus", {43, 0}}, +{(unsigned char*)"plusacir", {226, 168, 163, 0}}, +{(unsigned char*)"plusb", {226, 138, 158, 0}}, +{(unsigned char*)"pluscir", {226, 168, 162, 0}}, +{(unsigned char*)"plusdo", {226, 136, 148, 0}}, +{(unsigned char*)"plusdu", {226, 168, 165, 0}}, +{(unsigned char*)"pluse", {226, 169, 178, 0}}, +{(unsigned char*)"plusmn", {194, 177, 0}}, +{(unsigned char*)"plussim", {226, 168, 166, 0}}, +{(unsigned char*)"plustwo", {226, 168, 167, 0}}, +{(unsigned char*)"pm", {194, 177, 0}}, +{(unsigned char*)"pointint", {226, 168, 149, 0}}, +{(unsigned char*)"popf", {240, 157, 149, 161, 0}}, +{(unsigned char*)"pound", {194, 163, 0}}, +{(unsigned char*)"pr", {226, 137, 186, 0}}, +{(unsigned char*)"prE", {226, 170, 179, 0}}, +{(unsigned char*)"prap", {226, 170, 183, 0}}, +{(unsigned char*)"prcue", {226, 137, 188, 0}}, +{(unsigned char*)"pre", {226, 170, 175, 0}}, +{(unsigned char*)"prec", {226, 137, 186, 0}}, +{(unsigned char*)"precapprox", {226, 170, 183, 0}}, +{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}}, +{(unsigned char*)"preceq", {226, 170, 175, 0}}, +{(unsigned char*)"precnapprox", {226, 170, 185, 0}}, +{(unsigned char*)"precneqq", {226, 170, 181, 0}}, +{(unsigned char*)"precnsim", {226, 139, 168, 0}}, +{(unsigned char*)"precsim", {226, 137, 190, 0}}, +{(unsigned char*)"prime", {226, 128, 178, 0}}, +{(unsigned char*)"primes", {226, 132, 153, 0}}, +{(unsigned char*)"prnE", {226, 170, 181, 0}}, +{(unsigned char*)"prnap", {226, 170, 185, 0}}, +{(unsigned char*)"prnsim", {226, 139, 168, 0}}, +{(unsigned char*)"prod", {226, 136, 143, 0}}, +{(unsigned char*)"profalar", {226, 140, 174, 0}}, +{(unsigned char*)"profline", {226, 140, 146, 0}}, +{(unsigned char*)"profsurf", {226, 140, 147, 0}}, +{(unsigned char*)"prop", {226, 136, 157, 0}}, +{(unsigned char*)"propto", {226, 136, 157, 0}}, +{(unsigned char*)"prsim", {226, 137, 190, 0}}, +{(unsigned char*)"prurel", {226, 138, 176, 0}}, +{(unsigned char*)"pscr", {240, 157, 147, 133, 0}}, +{(unsigned char*)"psi", {207, 136, 0}}, +{(unsigned char*)"puncsp", {226, 128, 136, 0}}, +{(unsigned char*)"qfr", {240, 157, 148, 174, 0}}, +{(unsigned char*)"qint", {226, 168, 140, 0}}, +{(unsigned char*)"qopf", {240, 157, 149, 162, 0}}, +{(unsigned char*)"qprime", {226, 129, 151, 0}}, +{(unsigned char*)"qscr", {240, 157, 147, 134, 0}}, +{(unsigned char*)"quaternions", {226, 132, 141, 0}}, +{(unsigned char*)"quatint", {226, 168, 150, 0}}, +{(unsigned char*)"quest", {63, 0}}, +{(unsigned char*)"questeq", {226, 137, 159, 0}}, +{(unsigned char*)"quot", {34, 0}}, +{(unsigned char*)"rAarr", {226, 135, 155, 0}}, +{(unsigned char*)"rArr", {226, 135, 146, 0}}, +{(unsigned char*)"rAtail", {226, 164, 156, 0}}, +{(unsigned char*)"rBarr", {226, 164, 143, 0}}, +{(unsigned char*)"rHar", {226, 165, 164, 0}}, +{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}}, +{(unsigned char*)"racute", {197, 149, 0}}, +{(unsigned char*)"radic", {226, 136, 154, 0}}, +{(unsigned char*)"raemptyv", {226, 166, 179, 0}}, +{(unsigned char*)"rang", {226, 159, 169, 0}}, +{(unsigned char*)"rangd", {226, 166, 146, 0}}, +{(unsigned char*)"range", {226, 166, 165, 0}}, +{(unsigned char*)"rangle", {226, 159, 169, 0}}, +{(unsigned char*)"raquo", {194, 187, 0}}, +{(unsigned char*)"rarr", {226, 134, 146, 0}}, +{(unsigned char*)"rarrap", {226, 165, 181, 0}}, +{(unsigned char*)"rarrb", {226, 135, 165, 0}}, +{(unsigned char*)"rarrbfs", {226, 164, 160, 0}}, +{(unsigned char*)"rarrc", {226, 164, 179, 0}}, +{(unsigned char*)"rarrfs", {226, 164, 158, 0}}, +{(unsigned char*)"rarrhk", {226, 134, 170, 0}}, +{(unsigned char*)"rarrlp", {226, 134, 172, 0}}, +{(unsigned char*)"rarrpl", {226, 165, 133, 0}}, +{(unsigned char*)"rarrsim", {226, 165, 180, 0}}, +{(unsigned char*)"rarrtl", {226, 134, 163, 0}}, +{(unsigned char*)"rarrw", {226, 134, 157, 0}}, +{(unsigned char*)"ratail", {226, 164, 154, 0}}, +{(unsigned char*)"ratio", {226, 136, 182, 0}}, +{(unsigned char*)"rationals", {226, 132, 154, 0}}, +{(unsigned char*)"rbarr", {226, 164, 141, 0}}, +{(unsigned char*)"rbbrk", {226, 157, 179, 0}}, +{(unsigned char*)"rbrace", {125, 0}}, +{(unsigned char*)"rbrack", {93, 0}}, +{(unsigned char*)"rbrke", {226, 166, 140, 0}}, +{(unsigned char*)"rbrksld", {226, 166, 142, 0}}, +{(unsigned char*)"rbrkslu", {226, 166, 144, 0}}, +{(unsigned char*)"rcaron", {197, 153, 0}}, +{(unsigned char*)"rcedil", {197, 151, 0}}, +{(unsigned char*)"rceil", {226, 140, 137, 0}}, +{(unsigned char*)"rcub", {125, 0}}, +{(unsigned char*)"rcy", {209, 128, 0}}, +{(unsigned char*)"rdca", {226, 164, 183, 0}}, +{(unsigned char*)"rdldhar", {226, 165, 169, 0}}, +{(unsigned char*)"rdquo", {226, 128, 157, 0}}, +{(unsigned char*)"rdquor", {226, 128, 157, 0}}, +{(unsigned char*)"rdsh", {226, 134, 179, 0}}, +{(unsigned char*)"real", {226, 132, 156, 0}}, +{(unsigned char*)"realine", {226, 132, 155, 0}}, +{(unsigned char*)"realpart", {226, 132, 156, 0}}, +{(unsigned char*)"reals", {226, 132, 157, 0}}, +{(unsigned char*)"rect", {226, 150, 173, 0}}, +{(unsigned char*)"reg", {194, 174, 0}}, +{(unsigned char*)"rfisht", {226, 165, 189, 0}}, +{(unsigned char*)"rfloor", {226, 140, 139, 0}}, +{(unsigned char*)"rfr", {240, 157, 148, 175, 0}}, +{(unsigned char*)"rhard", {226, 135, 129, 0}}, +{(unsigned char*)"rharu", {226, 135, 128, 0}}, +{(unsigned char*)"rharul", {226, 165, 172, 0}}, +{(unsigned char*)"rho", {207, 129, 0}}, +{(unsigned char*)"rhov", {207, 177, 0}}, +{(unsigned char*)"rightarrow", {226, 134, 146, 0}}, +{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}}, +{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}}, +{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}}, +{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}}, +{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}}, +{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}}, +{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}}, +{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}}, +{(unsigned char*)"ring", {203, 154, 0}}, +{(unsigned char*)"risingdotseq", {226, 137, 147, 0}}, +{(unsigned char*)"rlarr", {226, 135, 132, 0}}, +{(unsigned char*)"rlhar", {226, 135, 140, 0}}, +{(unsigned char*)"rlm", {226, 128, 143, 0}}, +{(unsigned char*)"rmoust", {226, 142, 177, 0}}, +{(unsigned char*)"rmoustache", {226, 142, 177, 0}}, +{(unsigned char*)"rnmid", {226, 171, 174, 0}}, +{(unsigned char*)"roang", {226, 159, 173, 0}}, +{(unsigned char*)"roarr", {226, 135, 190, 0}}, +{(unsigned char*)"robrk", {226, 159, 167, 0}}, +{(unsigned char*)"ropar", {226, 166, 134, 0}}, +{(unsigned char*)"ropf", {240, 157, 149, 163, 0}}, +{(unsigned char*)"roplus", {226, 168, 174, 0}}, +{(unsigned char*)"rotimes", {226, 168, 181, 0}}, +{(unsigned char*)"rpar", {41, 0}}, +{(unsigned char*)"rpargt", {226, 166, 148, 0}}, +{(unsigned char*)"rppolint", {226, 168, 146, 0}}, +{(unsigned char*)"rrarr", {226, 135, 137, 0}}, +{(unsigned char*)"rsaquo", {226, 128, 186, 0}}, +{(unsigned char*)"rscr", {240, 157, 147, 135, 0}}, +{(unsigned char*)"rsh", {226, 134, 177, 0}}, +{(unsigned char*)"rsqb", {93, 0}}, +{(unsigned char*)"rsquo", {226, 128, 153, 0}}, +{(unsigned char*)"rsquor", {226, 128, 153, 0}}, +{(unsigned char*)"rthree", {226, 139, 140, 0}}, +{(unsigned char*)"rtimes", {226, 139, 138, 0}}, +{(unsigned char*)"rtri", {226, 150, 185, 0}}, +{(unsigned char*)"rtrie", {226, 138, 181, 0}}, +{(unsigned char*)"rtrif", {226, 150, 184, 0}}, +{(unsigned char*)"rtriltri", {226, 167, 142, 0}}, +{(unsigned char*)"ruluhar", {226, 165, 168, 0}}, +{(unsigned char*)"rx", {226, 132, 158, 0}}, +{(unsigned char*)"sacute", {197, 155, 0}}, +{(unsigned char*)"sbquo", {226, 128, 154, 0}}, +{(unsigned char*)"sc", {226, 137, 187, 0}}, +{(unsigned char*)"scE", {226, 170, 180, 0}}, +{(unsigned char*)"scap", {226, 170, 184, 0}}, +{(unsigned char*)"scaron", {197, 161, 0}}, +{(unsigned char*)"sccue", {226, 137, 189, 0}}, +{(unsigned char*)"sce", {226, 170, 176, 0}}, +{(unsigned char*)"scedil", {197, 159, 0}}, +{(unsigned char*)"scirc", {197, 157, 0}}, +{(unsigned char*)"scnE", {226, 170, 182, 0}}, +{(unsigned char*)"scnap", {226, 170, 186, 0}}, +{(unsigned char*)"scnsim", {226, 139, 169, 0}}, +{(unsigned char*)"scpolint", {226, 168, 147, 0}}, +{(unsigned char*)"scsim", {226, 137, 191, 0}}, +{(unsigned char*)"scy", {209, 129, 0}}, +{(unsigned char*)"sdot", {226, 139, 133, 0}}, +{(unsigned char*)"sdotb", {226, 138, 161, 0}}, +{(unsigned char*)"sdote", {226, 169, 166, 0}}, +{(unsigned char*)"seArr", {226, 135, 152, 0}}, +{(unsigned char*)"searhk", {226, 164, 165, 0}}, +{(unsigned char*)"searr", {226, 134, 152, 0}}, +{(unsigned char*)"searrow", {226, 134, 152, 0}}, +{(unsigned char*)"sect", {194, 167, 0}}, +{(unsigned char*)"semi", {59, 0}}, +{(unsigned char*)"seswar", {226, 164, 169, 0}}, +{(unsigned char*)"setminus", {226, 136, 150, 0}}, +{(unsigned char*)"setmn", {226, 136, 150, 0}}, +{(unsigned char*)"sext", {226, 156, 182, 0}}, +{(unsigned char*)"sfr", {240, 157, 148, 176, 0}}, +{(unsigned char*)"sfrown", {226, 140, 162, 0}}, +{(unsigned char*)"sharp", {226, 153, 175, 0}}, +{(unsigned char*)"shchcy", {209, 137, 0}}, +{(unsigned char*)"shcy", {209, 136, 0}}, +{(unsigned char*)"shortmid", {226, 136, 163, 0}}, +{(unsigned char*)"shortparallel", {226, 136, 165, 0}}, +{(unsigned char*)"shy", {194, 173, 0}}, +{(unsigned char*)"sigma", {207, 131, 0}}, +{(unsigned char*)"sigmaf", {207, 130, 0}}, +{(unsigned char*)"sigmav", {207, 130, 0}}, +{(unsigned char*)"sim", {226, 136, 188, 0}}, +{(unsigned char*)"simdot", {226, 169, 170, 0}}, +{(unsigned char*)"sime", {226, 137, 131, 0}}, +{(unsigned char*)"simeq", {226, 137, 131, 0}}, +{(unsigned char*)"simg", {226, 170, 158, 0}}, +{(unsigned char*)"simgE", {226, 170, 160, 0}}, +{(unsigned char*)"siml", {226, 170, 157, 0}}, +{(unsigned char*)"simlE", {226, 170, 159, 0}}, +{(unsigned char*)"simne", {226, 137, 134, 0}}, +{(unsigned char*)"simplus", {226, 168, 164, 0}}, +{(unsigned char*)"simrarr", {226, 165, 178, 0}}, +{(unsigned char*)"slarr", {226, 134, 144, 0}}, +{(unsigned char*)"smallsetminus", {226, 136, 150, 0}}, +{(unsigned char*)"smashp", {226, 168, 179, 0}}, +{(unsigned char*)"smeparsl", {226, 167, 164, 0}}, +{(unsigned char*)"smid", {226, 136, 163, 0}}, +{(unsigned char*)"smile", {226, 140, 163, 0}}, +{(unsigned char*)"smt", {226, 170, 170, 0}}, +{(unsigned char*)"smte", {226, 170, 172, 0}}, +{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}}, +{(unsigned char*)"softcy", {209, 140, 0}}, +{(unsigned char*)"sol", {47, 0}}, +{(unsigned char*)"solb", {226, 167, 132, 0}}, +{(unsigned char*)"solbar", {226, 140, 191, 0}}, +{(unsigned char*)"sopf", {240, 157, 149, 164, 0}}, +{(unsigned char*)"spades", {226, 153, 160, 0}}, +{(unsigned char*)"spadesuit", {226, 153, 160, 0}}, +{(unsigned char*)"spar", {226, 136, 165, 0}}, +{(unsigned char*)"sqcap", {226, 138, 147, 0}}, +{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}}, +{(unsigned char*)"sqcup", {226, 138, 148, 0}}, +{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}}, +{(unsigned char*)"sqsub", {226, 138, 143, 0}}, +{(unsigned char*)"sqsube", {226, 138, 145, 0}}, +{(unsigned char*)"sqsubset", {226, 138, 143, 0}}, +{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}}, +{(unsigned char*)"sqsup", {226, 138, 144, 0}}, +{(unsigned char*)"sqsupe", {226, 138, 146, 0}}, +{(unsigned char*)"sqsupset", {226, 138, 144, 0}}, +{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}}, +{(unsigned char*)"squ", {226, 150, 161, 0}}, +{(unsigned char*)"square", {226, 150, 161, 0}}, +{(unsigned char*)"squarf", {226, 150, 170, 0}}, +{(unsigned char*)"squf", {226, 150, 170, 0}}, +{(unsigned char*)"srarr", {226, 134, 146, 0}}, +{(unsigned char*)"sscr", {240, 157, 147, 136, 0}}, +{(unsigned char*)"ssetmn", {226, 136, 150, 0}}, +{(unsigned char*)"ssmile", {226, 140, 163, 0}}, +{(unsigned char*)"sstarf", {226, 139, 134, 0}}, +{(unsigned char*)"star", {226, 152, 134, 0}}, +{(unsigned char*)"starf", {226, 152, 133, 0}}, +{(unsigned char*)"straightepsilon", {207, 181, 0}}, +{(unsigned char*)"straightphi", {207, 149, 0}}, +{(unsigned char*)"strns", {194, 175, 0}}, +{(unsigned char*)"sub", {226, 138, 130, 0}}, +{(unsigned char*)"subE", {226, 171, 133, 0}}, +{(unsigned char*)"subdot", {226, 170, 189, 0}}, +{(unsigned char*)"sube", {226, 138, 134, 0}}, +{(unsigned char*)"subedot", {226, 171, 131, 0}}, +{(unsigned char*)"submult", {226, 171, 129, 0}}, +{(unsigned char*)"subnE", {226, 171, 139, 0}}, +{(unsigned char*)"subne", {226, 138, 138, 0}}, +{(unsigned char*)"subplus", {226, 170, 191, 0}}, +{(unsigned char*)"subrarr", {226, 165, 185, 0}}, +{(unsigned char*)"subset", {226, 138, 130, 0}}, +{(unsigned char*)"subseteq", {226, 138, 134, 0}}, +{(unsigned char*)"subseteqq", {226, 171, 133, 0}}, +{(unsigned char*)"subsetneq", {226, 138, 138, 0}}, +{(unsigned char*)"subsetneqq", {226, 171, 139, 0}}, +{(unsigned char*)"subsim", {226, 171, 135, 0}}, +{(unsigned char*)"subsub", {226, 171, 149, 0}}, +{(unsigned char*)"subsup", {226, 171, 147, 0}}, +{(unsigned char*)"succ", {226, 137, 187, 0}}, +{(unsigned char*)"succapprox", {226, 170, 184, 0}}, +{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}}, +{(unsigned char*)"succeq", {226, 170, 176, 0}}, +{(unsigned char*)"succnapprox", {226, 170, 186, 0}}, +{(unsigned char*)"succneqq", {226, 170, 182, 0}}, +{(unsigned char*)"succnsim", {226, 139, 169, 0}}, +{(unsigned char*)"succsim", {226, 137, 191, 0}}, +{(unsigned char*)"sum", {226, 136, 145, 0}}, +{(unsigned char*)"sung", {226, 153, 170, 0}}, +{(unsigned char*)"sup", {226, 138, 131, 0}}, +{(unsigned char*)"sup1", {194, 185, 0}}, +{(unsigned char*)"sup2", {194, 178, 0}}, +{(unsigned char*)"sup3", {194, 179, 0}}, +{(unsigned char*)"supE", {226, 171, 134, 0}}, +{(unsigned char*)"supdot", {226, 170, 190, 0}}, +{(unsigned char*)"supdsub", {226, 171, 152, 0}}, +{(unsigned char*)"supe", {226, 138, 135, 0}}, +{(unsigned char*)"supedot", {226, 171, 132, 0}}, +{(unsigned char*)"suphsol", {226, 159, 137, 0}}, +{(unsigned char*)"suphsub", {226, 171, 151, 0}}, +{(unsigned char*)"suplarr", {226, 165, 187, 0}}, +{(unsigned char*)"supmult", {226, 171, 130, 0}}, +{(unsigned char*)"supnE", {226, 171, 140, 0}}, +{(unsigned char*)"supne", {226, 138, 139, 0}}, +{(unsigned char*)"supplus", {226, 171, 128, 0}}, +{(unsigned char*)"supset", {226, 138, 131, 0}}, +{(unsigned char*)"supseteq", {226, 138, 135, 0}}, +{(unsigned char*)"supseteqq", {226, 171, 134, 0}}, +{(unsigned char*)"supsetneq", {226, 138, 139, 0}}, +{(unsigned char*)"supsetneqq", {226, 171, 140, 0}}, +{(unsigned char*)"supsim", {226, 171, 136, 0}}, +{(unsigned char*)"supsub", {226, 171, 148, 0}}, +{(unsigned char*)"supsup", {226, 171, 150, 0}}, +{(unsigned char*)"swArr", {226, 135, 153, 0}}, +{(unsigned char*)"swarhk", {226, 164, 166, 0}}, +{(unsigned char*)"swarr", {226, 134, 153, 0}}, +{(unsigned char*)"swarrow", {226, 134, 153, 0}}, +{(unsigned char*)"swnwar", {226, 164, 170, 0}}, +{(unsigned char*)"szlig", {195, 159, 0}}, +{(unsigned char*)"target", {226, 140, 150, 0}}, +{(unsigned char*)"tau", {207, 132, 0}}, +{(unsigned char*)"tbrk", {226, 142, 180, 0}}, +{(unsigned char*)"tcaron", {197, 165, 0}}, +{(unsigned char*)"tcedil", {197, 163, 0}}, +{(unsigned char*)"tcy", {209, 130, 0}}, +{(unsigned char*)"tdot", {226, 131, 155, 0}}, +{(unsigned char*)"telrec", {226, 140, 149, 0}}, +{(unsigned char*)"tfr", {240, 157, 148, 177, 0}}, +{(unsigned char*)"there4", {226, 136, 180, 0}}, +{(unsigned char*)"therefore", {226, 136, 180, 0}}, +{(unsigned char*)"theta", {206, 184, 0}}, +{(unsigned char*)"thetasym", {207, 145, 0}}, +{(unsigned char*)"thetav", {207, 145, 0}}, +{(unsigned char*)"thickapprox", {226, 137, 136, 0}}, +{(unsigned char*)"thicksim", {226, 136, 188, 0}}, +{(unsigned char*)"thinsp", {226, 128, 137, 0}}, +{(unsigned char*)"thkap", {226, 137, 136, 0}}, +{(unsigned char*)"thksim", {226, 136, 188, 0}}, +{(unsigned char*)"thorn", {195, 190, 0}}, +{(unsigned char*)"tilde", {203, 156, 0}}, +{(unsigned char*)"times", {195, 151, 0}}, +{(unsigned char*)"timesb", {226, 138, 160, 0}}, +{(unsigned char*)"timesbar", {226, 168, 177, 0}}, +{(unsigned char*)"timesd", {226, 168, 176, 0}}, +{(unsigned char*)"tint", {226, 136, 173, 0}}, +{(unsigned char*)"toea", {226, 164, 168, 0}}, +{(unsigned char*)"top", {226, 138, 164, 0}}, +{(unsigned char*)"topbot", {226, 140, 182, 0}}, +{(unsigned char*)"topcir", {226, 171, 177, 0}}, +{(unsigned char*)"topf", {240, 157, 149, 165, 0}}, +{(unsigned char*)"topfork", {226, 171, 154, 0}}, +{(unsigned char*)"tosa", {226, 164, 169, 0}}, +{(unsigned char*)"tprime", {226, 128, 180, 0}}, +{(unsigned char*)"trade", {226, 132, 162, 0}}, +{(unsigned char*)"triangle", {226, 150, 181, 0}}, +{(unsigned char*)"triangledown", {226, 150, 191, 0}}, +{(unsigned char*)"triangleleft", {226, 151, 131, 0}}, +{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}}, +{(unsigned char*)"triangleq", {226, 137, 156, 0}}, +{(unsigned char*)"triangleright", {226, 150, 185, 0}}, +{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}}, +{(unsigned char*)"tridot", {226, 151, 172, 0}}, +{(unsigned char*)"trie", {226, 137, 156, 0}}, +{(unsigned char*)"triminus", {226, 168, 186, 0}}, +{(unsigned char*)"triplus", {226, 168, 185, 0}}, +{(unsigned char*)"trisb", {226, 167, 141, 0}}, +{(unsigned char*)"tritime", {226, 168, 187, 0}}, +{(unsigned char*)"trpezium", {226, 143, 162, 0}}, +{(unsigned char*)"tscr", {240, 157, 147, 137, 0}}, +{(unsigned char*)"tscy", {209, 134, 0}}, +{(unsigned char*)"tshcy", {209, 155, 0}}, +{(unsigned char*)"tstrok", {197, 167, 0}}, +{(unsigned char*)"twixt", {226, 137, 172, 0}}, +{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}}, +{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}}, +{(unsigned char*)"uArr", {226, 135, 145, 0}}, +{(unsigned char*)"uHar", {226, 165, 163, 0}}, +{(unsigned char*)"uacute", {195, 186, 0}}, +{(unsigned char*)"uarr", {226, 134, 145, 0}}, +{(unsigned char*)"ubrcy", {209, 158, 0}}, +{(unsigned char*)"ubreve", {197, 173, 0}}, +{(unsigned char*)"ucirc", {195, 187, 0}}, +{(unsigned char*)"ucy", {209, 131, 0}}, +{(unsigned char*)"udarr", {226, 135, 133, 0}}, +{(unsigned char*)"udblac", {197, 177, 0}}, +{(unsigned char*)"udhar", {226, 165, 174, 0}}, +{(unsigned char*)"ufisht", {226, 165, 190, 0}}, +{(unsigned char*)"ufr", {240, 157, 148, 178, 0}}, +{(unsigned char*)"ugrave", {195, 185, 0}}, +{(unsigned char*)"uharl", {226, 134, 191, 0}}, +{(unsigned char*)"uharr", {226, 134, 190, 0}}, +{(unsigned char*)"uhblk", {226, 150, 128, 0}}, +{(unsigned char*)"ulcorn", {226, 140, 156, 0}}, +{(unsigned char*)"ulcorner", {226, 140, 156, 0}}, +{(unsigned char*)"ulcrop", {226, 140, 143, 0}}, +{(unsigned char*)"ultri", {226, 151, 184, 0}}, +{(unsigned char*)"umacr", {197, 171, 0}}, +{(unsigned char*)"uml", {194, 168, 0}}, +{(unsigned char*)"uogon", {197, 179, 0}}, +{(unsigned char*)"uopf", {240, 157, 149, 166, 0}}, +{(unsigned char*)"uparrow", {226, 134, 145, 0}}, +{(unsigned char*)"updownarrow", {226, 134, 149, 0}}, +{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}}, +{(unsigned char*)"upharpoonright", {226, 134, 190, 0}}, +{(unsigned char*)"uplus", {226, 138, 142, 0}}, +{(unsigned char*)"upsi", {207, 133, 0}}, +{(unsigned char*)"upsih", {207, 146, 0}}, +{(unsigned char*)"upsilon", {207, 133, 0}}, +{(unsigned char*)"upuparrows", {226, 135, 136, 0}}, +{(unsigned char*)"urcorn", {226, 140, 157, 0}}, +{(unsigned char*)"urcorner", {226, 140, 157, 0}}, +{(unsigned char*)"urcrop", {226, 140, 142, 0}}, +{(unsigned char*)"uring", {197, 175, 0}}, +{(unsigned char*)"urtri", {226, 151, 185, 0}}, +{(unsigned char*)"uscr", {240, 157, 147, 138, 0}}, +{(unsigned char*)"utdot", {226, 139, 176, 0}}, +{(unsigned char*)"utilde", {197, 169, 0}}, +{(unsigned char*)"utri", {226, 150, 181, 0}}, +{(unsigned char*)"utrif", {226, 150, 180, 0}}, +{(unsigned char*)"uuarr", {226, 135, 136, 0}}, +{(unsigned char*)"uuml", {195, 188, 0}}, +{(unsigned char*)"uwangle", {226, 166, 167, 0}}, +{(unsigned char*)"vArr", {226, 135, 149, 0}}, +{(unsigned char*)"vBar", {226, 171, 168, 0}}, +{(unsigned char*)"vBarv", {226, 171, 169, 0}}, +{(unsigned char*)"vDash", {226, 138, 168, 0}}, +{(unsigned char*)"vangrt", {226, 166, 156, 0}}, +{(unsigned char*)"varepsilon", {207, 181, 0}}, +{(unsigned char*)"varkappa", {207, 176, 0}}, +{(unsigned char*)"varnothing", {226, 136, 133, 0}}, +{(unsigned char*)"varphi", {207, 149, 0}}, +{(unsigned char*)"varpi", {207, 150, 0}}, +{(unsigned char*)"varpropto", {226, 136, 157, 0}}, +{(unsigned char*)"varr", {226, 134, 149, 0}}, +{(unsigned char*)"varrho", {207, 177, 0}}, +{(unsigned char*)"varsigma", {207, 130, 0}}, +{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}}, +{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}}, +{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}}, +{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}}, +{(unsigned char*)"vartheta", {207, 145, 0}}, +{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}}, +{(unsigned char*)"vartriangleright", {226, 138, 179, 0}}, +{(unsigned char*)"vcy", {208, 178, 0}}, +{(unsigned char*)"vdash", {226, 138, 162, 0}}, +{(unsigned char*)"vee", {226, 136, 168, 0}}, +{(unsigned char*)"veebar", {226, 138, 187, 0}}, +{(unsigned char*)"veeeq", {226, 137, 154, 0}}, +{(unsigned char*)"vellip", {226, 139, 174, 0}}, +{(unsigned char*)"verbar", {124, 0}}, +{(unsigned char*)"vert", {124, 0}}, +{(unsigned char*)"vfr", {240, 157, 148, 179, 0}}, +{(unsigned char*)"vltri", {226, 138, 178, 0}}, +{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"vopf", {240, 157, 149, 167, 0}}, +{(unsigned char*)"vprop", {226, 136, 157, 0}}, +{(unsigned char*)"vrtri", {226, 138, 179, 0}}, +{(unsigned char*)"vscr", {240, 157, 147, 139, 0}}, +{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}}, +{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}}, +{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}}, +{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}}, +{(unsigned char*)"vzigzag", {226, 166, 154, 0}}, +{(unsigned char*)"wcirc", {197, 181, 0}}, +{(unsigned char*)"wedbar", {226, 169, 159, 0}}, +{(unsigned char*)"wedge", {226, 136, 167, 0}}, +{(unsigned char*)"wedgeq", {226, 137, 153, 0}}, +{(unsigned char*)"weierp", {226, 132, 152, 0}}, +{(unsigned char*)"wfr", {240, 157, 148, 180, 0}}, +{(unsigned char*)"wopf", {240, 157, 149, 168, 0}}, +{(unsigned char*)"wp", {226, 132, 152, 0}}, +{(unsigned char*)"wr", {226, 137, 128, 0}}, +{(unsigned char*)"wreath", {226, 137, 128, 0}}, +{(unsigned char*)"wscr", {240, 157, 147, 140, 0}}, +{(unsigned char*)"xcap", {226, 139, 130, 0}}, +{(unsigned char*)"xcirc", {226, 151, 175, 0}}, +{(unsigned char*)"xcup", {226, 139, 131, 0}}, +{(unsigned char*)"xdtri", {226, 150, 189, 0}}, +{(unsigned char*)"xfr", {240, 157, 148, 181, 0}}, +{(unsigned char*)"xhArr", {226, 159, 186, 0}}, +{(unsigned char*)"xharr", {226, 159, 183, 0}}, +{(unsigned char*)"xi", {206, 190, 0}}, +{(unsigned char*)"xlArr", {226, 159, 184, 0}}, +{(unsigned char*)"xlarr", {226, 159, 181, 0}}, +{(unsigned char*)"xmap", {226, 159, 188, 0}}, +{(unsigned char*)"xnis", {226, 139, 187, 0}}, +{(unsigned char*)"xodot", {226, 168, 128, 0}}, +{(unsigned char*)"xopf", {240, 157, 149, 169, 0}}, +{(unsigned char*)"xoplus", {226, 168, 129, 0}}, +{(unsigned char*)"xotime", {226, 168, 130, 0}}, +{(unsigned char*)"xrArr", {226, 159, 185, 0}}, +{(unsigned char*)"xrarr", {226, 159, 182, 0}}, +{(unsigned char*)"xscr", {240, 157, 147, 141, 0}}, +{(unsigned char*)"xsqcup", {226, 168, 134, 0}}, +{(unsigned char*)"xuplus", {226, 168, 132, 0}}, +{(unsigned char*)"xutri", {226, 150, 179, 0}}, +{(unsigned char*)"xvee", {226, 139, 129, 0}}, +{(unsigned char*)"xwedge", {226, 139, 128, 0}}, +{(unsigned char*)"yacute", {195, 189, 0}}, +{(unsigned char*)"yacy", {209, 143, 0}}, +{(unsigned char*)"ycirc", {197, 183, 0}}, +{(unsigned char*)"ycy", {209, 139, 0}}, +{(unsigned char*)"yen", {194, 165, 0}}, +{(unsigned char*)"yfr", {240, 157, 148, 182, 0}}, +{(unsigned char*)"yicy", {209, 151, 0}}, +{(unsigned char*)"yopf", {240, 157, 149, 170, 0}}, +{(unsigned char*)"yscr", {240, 157, 147, 142, 0}}, +{(unsigned char*)"yucy", {209, 142, 0}}, +{(unsigned char*)"yuml", {195, 191, 0}}, +{(unsigned char*)"zacute", {197, 186, 0}}, +{(unsigned char*)"zcaron", {197, 190, 0}}, +{(unsigned char*)"zcy", {208, 183, 0}}, +{(unsigned char*)"zdot", {197, 188, 0}}, +{(unsigned char*)"zeetrf", {226, 132, 168, 0}}, +{(unsigned char*)"zeta", {206, 182, 0}}, +{(unsigned char*)"zfr", {240, 157, 148, 183, 0}}, +{(unsigned char*)"zhcy", {208, 182, 0}}, +{(unsigned char*)"zigrarr", {226, 135, 157, 0}}, +{(unsigned char*)"zopf", {240, 157, 149, 171, 0}}, +{(unsigned char*)"zscr", {240, 157, 147, 143, 0}}, +{(unsigned char*)"zwj", {226, 128, 141, 0}}, +{(unsigned char*)"zwnj", {226, 128, 140, 0}}, }; -static const int cmark_entities_root = 1062; #ifdef __cplusplus } diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 51e3565b01..e4cf8fe78b 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -9,39 +9,30 @@ /* Binary tree lookup code for entities added by JGM */ -static unsigned long -S_hash(const unsigned char *str, int len) -{ - unsigned long hash = 5381; - int i; - - for (i = 0; i < len; i++) { - hash = (((hash << 5) + hash) + str[i]) & 0xFFFFFFFF; /* hash * 33 + c */ - } - - return hash; -} - static unsigned char * -S_lookup(int i, unsigned long key) +S_lookup(int i, int low, int hi, const unsigned char *s, int len) { - if (cmark_entities[i].value == key) { - return cmark_entities[i].bytes; + int j; + int cmp = strncmp((char *)s, (char *)cmark_entities[i].entity, len); + if (cmp == 0 && cmark_entities[i].entity[len] == 0) { + return (unsigned char *)cmark_entities[i].bytes; + } else if (cmp < 0 && i > low) { + j = i - ((i - low) / 2); + if (j == i) j -= 1; + return S_lookup(j, low, i - 1, s, len); + } else if (cmp > 0 && i < hi) { + j = i + ((hi - i) / 2); + if (j == i) j += 1; + return S_lookup(j, i + 1, hi, s, len); } else { - int next = key < cmark_entities[i].value ? - cmark_entities[i].less : cmark_entities[i].greater; - if (next == -1) { // leaf node - return NULL; - } else { - return S_lookup(next, key); - } + return NULL; } } static unsigned char * S_lookup_entity(const unsigned char *s, int len) { - return S_lookup(cmark_entities_root, S_hash(s, len)); + return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len); } bufsize_t diff --git a/tools/make_entities_h.py b/tools/make_entities_h.py index 9342286c6f..48492c7680 100644 --- a/tools/make_entities_h.py +++ b/tools/make_entities_h.py @@ -4,79 +4,12 @@ import html -# We use this simple hashing algorithm to convert a string -# to an integer: -def djb2(s): - bs = list(s.encode('utf-8')) - hash = 5381 - for b in bs: - hash = (((hash << 5) + hash) + b) & 0xFFFFFFFF - return hash - entities5 = html.entities.html5 # remove keys without semicolons. For some reason the list # has duplicates of a few things, like auml, one with and one # without a semicolon. -entities = [(k[:-1], entities5[k]) for k in entities5.keys() if k[-1] == ';'] - -# Note that most entries in the entity table end with ';', but in a few -# cases we have both a version with ';' and one without, so we strip out -# the latter to avoid duplicates: -hashed_data = sorted([[int(djb2(k)), v.encode('utf-8'), k] for (k,v) in entities]) - -# Confirm no hash collisions -hashes = [x for [x,_,_] in hashed_data] -assert(len(hashes) == len(set(hashes))) - -# indices is a dictionary - given a hash it spits out the ordering -# of this entity in the list (the array index) -indices = {} -i = 0 - -for x in hashed_data: - indices[x[0]] = i - i = i + 1 - -# Formats integer as C octal escape. -def toesc(x): - return '\\' + oct(x)[2:] - -# Lines is the list of lines in the array. -# We don't fill them in order, so we initialize the whole array first. -lines = [""] * len(hashed_data) - -# Takes hashed_data or some sublist of it, and a midpoint (array index) -# in this list. Adds to lines a line for the midpoint, then calls -# itself recursively for the earlier and later elements. Each node -# contains indices for elements with a lesser hash and elements with -# a greater hash. An index of -1 means we're at a leaf node. -def to_binary_array(xs, mid): - # divide in half, and form binary array from each half - x = xs[mid] - lesses = xs[0:mid] - greaters = xs[mid+1:] - midlesses = len(lesses) // 2 - midgreaters = len(greaters) // 2 - if len(lesses) == 0: - ml = -1 - else: - ml = indices[lesses[midlesses][0]] - if len(greaters) == 0: - mg = -1 - else: - mg = indices[greaters[midgreaters][0]] - lines[indices[x[0]]] = ("{" + str(x[0]) + ", (unsigned char*)\"" + - ''.join(map(toesc, x[1])) + "\", " + str(ml) + - ", " + str(mg) + "}, /* &" + x[2] + "; */") - if len(lesses) > 0: - to_binary_array(lesses, midlesses) - if len(greaters) > 0: - to_binary_array(greaters, midgreaters) - -# Now call this to fill up the array lines: -mid = len(hashed_data) // 2 -to_binary_array(hashed_data, mid) +entities = sorted([(k[:-1], entities5[k].encode('utf-8')) for k in entities5.keys() if k[-1] == ';']) # Print out the header: print("""#ifndef CMARK_ENTITIES_H @@ -87,24 +20,21 @@ extern "C" { #endif struct cmark_entity_node { - unsigned long value; - unsigned char *bytes; - int less; - int greater; + unsigned char *entity; + unsigned char bytes[8]; }; #define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 31 -""") +#define CMARK_ENTITY_MAX_LENGTH 31""") -print("static const struct cmark_entity_node cmark_entities[] = {"); +print("#define CMARK_NUM_ENTITIES " + str(len(entities))); -for line in lines: - print(line); +print("\nstatic const struct cmark_entity_node cmark_entities[] = {"); -print("};\n"); +for (ent, bs) in entities: + print('{(unsigned char*)"' + ent + '", {' + ', '.join(map(str, bs)) + ', 0}},') -print("static const int cmark_entities_root = " + str(mid) + ";"); +print("};\n"); print(""" #ifdef __cplusplus -- cgit 0.0.5-2-1-g0f52 From 50d3b871ad9f63907c5b19bb478aae0b6c1247a4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 17:17:02 -0700 Subject: normalize.py: don't collapse whitespace in pre contexts. --- test/normalize.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/normalize.py b/test/normalize.py index 03d958ef41..70bee46993 100644 --- a/test/normalize.py +++ b/test/normalize.py @@ -21,7 +21,8 @@ class MyHTMLParser(HTMLParser): after_block_tag = after_tag and self.is_block_tag(self.last_tag) if after_tag and self.last_tag == "br": data = data.lstrip('\n') - data = whitespace_re.sub(' ', data) + if not self.in_pre: + data = whitespace_re.sub(' ', data) if after_block_tag and not self.in_pre: if self.last == "starttag": data = data.lstrip() -- cgit 0.0.5-2-1-g0f52 From ef77d908553bfdd37b83ae4832d7e6ff36874f24 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 17:16:30 -0700 Subject: spec_tests.py: allow → for tab in HTML examples. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/spec_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index b1b0373130..2ca4b607d8 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -96,7 +96,7 @@ def get_tests(specfile): end_line = line_number tests.append({ "markdown":''.join(markdown_lines).replace('→',"\t"), - "html":''.join(html_lines), + "html":''.join(html_lines).replace('→',"\t"), "example": example_number, "start_line": start_line, "end_line": end_line, -- cgit 0.0.5-2-1-g0f52 From 7f491b0bdf8e206458d284938efa8a0890c9d352 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 14:32:22 -0700 Subject: Preliminary changes for new tab handling. We no longer preprocess tabs to spaces before parsing. Instead, we keep track of both the byte offset and the (virtual) column as we parse block starts. This allows us to handle tabs without converting to spaces first. Tabs are left as tabs in the output. Added `column` and `first_nonspace_column` fields to `parser`. Added utility function to advance the offset, computing the virtual column too. Note that we don't need to deal with UTF-8 here at all. Only ASCII occurs in block starts. Significant performance improvement due to the fact that we're not doing UTF-8 validation -- though we might want to add that back in. --- src/blocks.c | 92 +++++++++++++++++++++++++++++++++++++++++++++--------------- src/parser.h | 2 ++ 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 8c3e18c488..06f6dcbeb8 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -16,6 +16,8 @@ #include "debug.h" #define CODE_INDENT 4 +#define TAB_STOP 4 + #define peek_at(i, n) (i)->data[n] static inline bool @@ -70,7 +72,9 @@ cmark_parser *cmark_parser_new(int options) parser->current = document; parser->line_number = 0; parser->offset = 0; + parser->column = 0; parser->first_nonspace = 0; + parser->first_nonspace_column = 0; parser->indent = 0; parser->blank = false; parser->curline = line; @@ -555,15 +559,52 @@ static void chop_trailing_hashtags(cmark_chunk *ch) static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { + char c; + int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); + parser->first_nonspace = parser->offset; - while (peek_at(input, parser->first_nonspace) == ' ') { - parser->first_nonspace++; + parser->first_nonspace_column = parser->column; + while ((c = peek_at(input, parser->first_nonspace))) { + if (c == ' ') { + parser->first_nonspace += 1; + parser->first_nonspace_column += 1; + chars_to_tab = chars_to_tab - 1; + if (chars_to_tab == 0) { + chars_to_tab = TAB_STOP; + } + } else if (c == '\t') { + parser->first_nonspace += 1; + parser->first_nonspace_column += chars_to_tab; + chars_to_tab = TAB_STOP; + } else { + break; + } } - parser->indent = parser->first_nonspace - parser->offset; + parser->indent = parser->first_nonspace_column - parser->column; parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); } +static void +S_advance_offset(cmark_parser *parser, cmark_chunk *input, bufsize_t count, bool columns) +{ + char c; + int chars_to_tab; + while (count > 0 && (c = peek_at(input, parser->offset))) { + if (c == '\t') { + chars_to_tab = 4 - (parser->column % TAB_STOP); + parser->column += chars_to_tab; + parser->offset += 1; + count -= (columns ? chars_to_tab : 1); + } else { + parser->offset += 1; + parser->column += 1; // assume ascii; block starts are ascii + count -= 1; + } + } +} + + static void S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t bytes) { @@ -578,8 +619,9 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte cmark_chunk input; bool maybe_lazy; - utf8proc_detab(parser->curline, buffer, bytes); + cmark_strbuf_put(parser->curline, buffer, bytes); parser->offset = 0; + parser->column = 0; parser->blank = false; input.data = parser->curline->ptr; @@ -601,7 +643,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte if (container->type == NODE_BLOCK_QUOTE) { matched = parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; if (matched) { - parser->offset = parser->first_nonspace + 1; + S_advance_offset(parser, &input, parser->indent + 1, true); if (peek_at(&input, parser->offset) == ' ') parser->offset++; } else { @@ -609,13 +651,14 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte } } else if (container->type == NODE_ITEM) { - if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { - parser->offset += container->as.list.marker_offset + - container->as.list.padding; + S_advance_offset(parser, &input, + container->as.list.marker_offset + + container->as.list.padding, true); } else if (parser->blank) { - parser->offset = parser->first_nonspace; + S_advance_offset(parser, &input, + parser->first_nonspace - parser->offset, false); } else { all_matched = false; } @@ -624,9 +667,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte if (!container->as.code.fenced) { // indented if (parser->indent >= CODE_INDENT) { - parser->offset += CODE_INDENT; + S_advance_offset(parser, &input, CODE_INDENT, true); } else if (parser->blank) { - parser->offset = parser->first_nonspace; + S_advance_offset(parser, &input, + parser->first_nonspace - parser->offset, + false); } else { all_matched = false; } @@ -642,7 +687,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte // closing fence - and since we're at // the end of a line, we can return: all_matched = false; - parser->offset += matched; + S_advance_offset(parser, &input, matched, false); parser->current = finalize(parser, container); goto finished; } else { @@ -650,7 +695,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte i = container->as.code.fence_offset; while (i > 0 && peek_at(&input, parser->offset) == ' ') { - parser->offset++; + S_advance_offset(parser, &input, 1, false); i--; } } @@ -697,15 +742,16 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte if (!indented && peek_at(&input, parser->first_nonspace) == '>') { - parser->offset = parser->first_nonspace + 1; + S_advance_offset(parser, &input, parser->first_nonspace + 1 - parser->offset, false); // optional following character if (peek_at(&input, parser->offset) == ' ') - parser->offset++; + S_advance_offset(parser, &input, 1, false); container = add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1); } else if (!indented && (matched = scan_atx_header_start(&input, parser->first_nonspace))) { - parser->offset = parser->first_nonspace + matched; + S_advance_offset(parser, &input, + parser->first_nonspace + matched - parser->offset, false); container = add_child(parser, container, NODE_HEADER, parser->offset + 1); bufsize_t hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); @@ -726,7 +772,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte container->as.code.fence_length = matched; container->as.code.fence_offset = parser->first_nonspace - parser->offset; container->as.code.info = cmark_chunk_literal(""); - parser->offset = parser->first_nonspace + matched; + S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); } else if (!indented && (matched = scan_html_block_tag(&input, parser->first_nonspace))) { @@ -743,7 +789,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte container->type = NODE_HEADER; container->as.header.level = lev; container->as.header.setext = true; - parser->offset = input.len - 1; + S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); } else if (!indented && !(container->type == NODE_PARAGRAPH && @@ -753,7 +799,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte // it's only now that we know the line is not part of a setext header: container = add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); container = finalize(parser, container); - parser->offset = input.len - 1; + S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); } else if ((matched = parse_list_marker(&input, parser->first_nonspace, &data)) && (!indented || container->type == NODE_LIST)) { @@ -761,7 +807,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte // spaces indent, as long as the list container is still open. // compute padding: - parser->offset = parser->first_nonspace + matched; + S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); i = 0; while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') { i++; @@ -771,11 +817,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte S_is_line_end_char(peek_at(&input, parser->offset))) { data->padding = matched + 1; if (i > 0) { - parser->offset += 1; + S_advance_offset(parser, &input, 1, false); } } else { data->padding = matched + i; - parser->offset += i; + S_advance_offset(parser, &input, i, true); } // check container; if it's a list, see if this list item @@ -799,7 +845,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte free(data); } else if (indented && !maybe_lazy && !parser->blank) { - parser->offset += CODE_INDENT; + S_advance_offset(parser, &input, CODE_INDENT, true); container = add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1); container->as.code.fenced = false; container->as.code.fence_char = 0; diff --git a/src/parser.h b/src/parser.h index 6e18c6765b..01a7aeb57d 100644 --- a/src/parser.h +++ b/src/parser.h @@ -17,7 +17,9 @@ struct cmark_parser { struct cmark_node* current; int line_number; bufsize_t offset; + bufsize_t column; bufsize_t first_nonspace; + bufsize_t first_nonspace_column; int indent; bool blank; cmark_strbuf *curline; -- cgit 0.0.5-2-1-g0f52 From 26537124a4070f7869db67317b90e08916050c8f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 16:43:34 -0700 Subject: Renamed utf8proc_detab as utf8proc_check, removed detabbing function. Now it just replaces bad UTF-8 sequences and NULLs. This restores benchmarks to near their previous levels. --- src/blocks.c | 2 +- src/utf8.c | 31 ++++++++++--------------------- src/utf8.h | 2 +- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 06f6dcbeb8..08f2e63521 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -619,7 +619,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte cmark_chunk input; bool maybe_lazy; - cmark_strbuf_put(parser->curline, buffer, bytes); + utf8proc_check(parser->curline, buffer, bytes); parser->offset = 0; parser->column = 0; parser->blank = false; diff --git a/src/utf8.c b/src/utf8.c index f572042397..ffe6652f0d 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -116,53 +116,42 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) return length; } -void utf8proc_detab(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) +void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { - static const uint8_t whitespace[] = " "; - - bufsize_t i = 0, tab = 0; + bufsize_t i = 0; while (i < size) { bufsize_t org = i; int charlen = 0; - while (i < size && line[i] != '\t') { - if (line[i] >= 0x80) { + while (i < size) { + if (line[i] < 0x80 && line[i] != 0) { + i++; + } else if (line[i] >= 0x80) { charlen = utf8proc_valid(line + i, size - i); if (charlen < 0) { charlen = -charlen; break; } i += charlen; - } else if (line[i] == '\0') { + } else if (line[i] == 0) { // ASCII NUL is technically valid but rejected // for security reasons. charlen = 1; break; - } else { - i++; } - - tab++; } - if (i > org) + if (i > org) { cmark_strbuf_put(ob, line + org, i - org); + } - if (i >= size) + if (i >= size) { break; - - if (line[i] == '\t') { - int numspaces = 4 - (tab % 4); - cmark_strbuf_put(ob, whitespace, numspaces); - i += 1; - tab += numspaces; } else { // Invalid UTF-8 encode_unknown(ob); - i += charlen; - tab += 1; } } } diff --git a/src/utf8.h b/src/utf8.h index ed1d7eeeb1..9f1a4ecef2 100644 --- a/src/utf8.h +++ b/src/utf8.h @@ -11,7 +11,7 @@ extern "C" { void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len); void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); -void utf8proc_detab(cmark_strbuf *dest, const uint8_t *line, bufsize_t size); +void utf8proc_check(cmark_strbuf *dest, const uint8_t *line, bufsize_t size); int utf8proc_is_space(int32_t uc); int utf8proc_is_punctuation(int32_t uc); -- cgit 0.0.5-2-1-g0f52 From f0a685206e08f12919d3fefaac807e0ea840f2fe Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 11 Jun 2015 17:17:16 -0700 Subject: Updated spec for new tab behavior. This change will need to be ported to CommonMark if we do this. We no longer replace spaces with tabs. Rather, we treat tabs as equivalent spaces for purposes of determining structure. Tab stop is still 4. Tabs in the text remain in the text. --- test/spec.txt | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index f6ea79399b..0c42aae7a0 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -249,15 +249,24 @@ A [punctuation character](@punctuation-character) is an [ASCII punctuation character] or anything in the unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. -## Preprocessing +## Tabs -Tabs in lines are immediately expanded to [spaces][space], with a tab -stop of 4 characters: +Tabs in lines are not expanded to [spaces][space]. 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. . →foo→baz→→bim . -
                            foo baz     bim
                            +
                            foo→baz→→bim
                            +
                            +. + +. + →foo→baz→→bim +. +
                            foo→baz→→bim
                             
                            . @@ -265,11 +274,33 @@ stop of 4 characters: a→a ὐ→a . -
                            a   a
                            -ὐ   a
                            +
                            a→a
                            +ὐ→a
                             
                            . +. + - foo + +→bar +. +
                              +
                            • +

                              foo

                              +

                              bar

                              +
                            • +
                            +. + +. +>→foo→bar +. +
                            +

                            foo→bar

                            +
                            +. + + ## Insecure characters For security reasons, the Unicode character `U+0000` must be replaced @@ -4251,7 +4282,7 @@ backslashes: . \→\A\a\ \3\φ\« . -

                            \ \A\a\ \3\φ\«

                            +

                            \→\A\a\ \3\φ\«

                            . Escaped characters are treated as regular characters and do -- cgit 0.0.5-2-1-g0f52 From 33d0a4bc9b70b53cc7e107b77f582233b36ca1b2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 12 Jun 2015 13:38:24 -0700 Subject: Removed utf8 validation. We now replace null characters in the line splitting code. --- src/blocks.c | 63 ++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 08f2e63521..4de59241ae 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -497,44 +497,53 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, bool eof) { const unsigned char *end = buffer + len; + static const uint8_t repl[] = {239, 191, 189}; while (buffer < end) { const unsigned char *eol; - size_t line_len; - bufsize_t bufsize; + bufsize_t chunk_len; + bool process = false; for (eol = buffer; eol < end; ++eol) { - if (S_is_line_end_char(*eol)) + if (S_is_line_end_char(*eol)) { + if (eol < end && *eol == '\r') + eol++; + if (eol < end && *eol == '\n') + eol++; + process = true; break; + } + if (*eol == '\0' && eol < end - 1) { + break; + } } - if (eol >= end) - eol = NULL; - - if (eol) { - if (eol < end && *eol == '\r') - eol++; - if (eol < end && *eol == '\n') - eol++; - line_len = eol - buffer; - } else if (eof) { - line_len = end - buffer; - } else { - bufsize = cmark_strbuf_check_bufsize(end - buffer); - cmark_strbuf_put(parser->linebuf, buffer, bufsize); - break; + if (eol >= end && eof) { + process = true; } - bufsize = cmark_strbuf_check_bufsize(line_len); - if (parser->linebuf->size > 0) { - cmark_strbuf_put(parser->linebuf, buffer, bufsize); - S_process_line(parser, parser->linebuf->ptr, - parser->linebuf->size); - cmark_strbuf_clear(parser->linebuf); + chunk_len = cmark_strbuf_check_bufsize(eol - buffer); + if (process) { + if (parser->linebuf->size > 0) { + cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + S_process_line(parser, parser->linebuf->ptr, + parser->linebuf->size); + cmark_strbuf_clear(parser->linebuf); + } else { + S_process_line(parser, buffer, chunk_len); + } } else { - S_process_line(parser, buffer, bufsize); + if (eol < end && *eol == '\0') { + // omit NULL byte + cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + // add replacement character + cmark_strbuf_put(parser->linebuf, repl, 3); + chunk_len += 1; // so we advance the buffer past NULL + } else { + cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + } } - buffer += line_len; + buffer += chunk_len; } } @@ -619,7 +628,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte cmark_chunk input; bool maybe_lazy; - utf8proc_check(parser->curline, buffer, bytes); + cmark_strbuf_put(parser->curline, buffer, bytes); parser->offset = 0; parser->column = 0; parser->blank = false; -- cgit 0.0.5-2-1-g0f52 From 3a75c999e475fde5e66b3990484ea0fd71dc41a9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 12 Jun 2015 13:38:44 -0700 Subject: Removed utf8 validation tests. We no longer validate utf8 before parsing. --- api_test/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_test/main.c b/api_test/main.c index 132d48c9cb..871b3a5c5a 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -737,7 +737,7 @@ int main() { hierarchy(runner); parser(runner); render_html(runner); - utf8(runner); + // utf8(runner); line_endings(runner); numeric_entities(runner); test_cplusplus(runner); -- cgit 0.0.5-2-1-g0f52 From 7bedf7d6b7dfae9681ac5d2c1631eb92d0c68e55 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 15 Jun 2015 12:07:38 -0700 Subject: Don't rtrim in subject_from_buffer. This gives bad results in parsing reference links, where we might have trailing blanks. (finalize in blocks.c removes the bytes parsed as a reference definition; before this change, some blank bytes might remain on the line.) --- src/inlines.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f4daeb1fea..c5b72ba0d2 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -169,8 +169,6 @@ static void subject_from_buf(subject *e, cmark_strbuf *buffer, e->pos = 0; e->refmap = refmap; e->last_delim = NULL; - - cmark_chunk_rtrim(&e->input); } static inline int isbacktick(int c) @@ -1129,6 +1127,7 @@ extern void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, { subject subj; subject_from_buf(&subj, &parent->string_content, refmap); + cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) ; -- cgit 0.0.5-2-1-g0f52 From baf5d11e04dc93ae12127faa727daeb5d0b6a63e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 15 Jun 2015 12:09:21 -0700 Subject: skip_spaces: skip tabs too. --- src/inlines.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index c5b72ba0d2..f41a62a9b1 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -199,7 +199,7 @@ static inline bool skip_spaces(subject *subj) { bool skipped = false; - while (peek_char(subj) == ' ') { + while (peek_char(subj) == ' ' || peek_char(subj) == '\t') { advance(subj); skipped = true; } @@ -1192,6 +1192,7 @@ bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map subj.pos = beforetitle; title = cmark_chunk_literal(""); } + // parse final spaces and newline: skip_spaces(&subj); if (!skip_line_end(&subj)) { -- cgit 0.0.5-2-1-g0f52 From ea343e83b173fd7c4a9dc9762a6502d788e65313 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 15 Jun 2015 12:10:00 -0700 Subject: is_blank: recognize tab as a blank character. --- src/blocks.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/blocks.c b/src/blocks.c index 4de59241ae..95a87c34e4 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -109,6 +109,9 @@ static bool is_blank(cmark_strbuf *s, bufsize_t offset) case ' ': offset++; break; + case '\t': + offset++; + break; default: return false; } -- cgit 0.0.5-2-1-g0f52 From fb7af2f0d6ca845b33364c6ce9a704a458e31ff9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 20:54:11 -0700 Subject: Small code simplification in inlines.c. Use S_is_line_end_char. --- src/inlines.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f41a62a9b1..b43f774708 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1108,8 +1108,7 @@ static int parse_inline(subject* subj, cmark_node * parent, int options) subj->pos = endpos; // if we're at a newline, strip trailing spaces. - if (peek_char(subj) == '\r' || - peek_char(subj) == '\n') { + if (S_is_line_end_char(peek_char(subj))) { cmark_chunk_rtrim(&contents); } -- cgit 0.0.5-2-1-g0f52 From 04726a7089e44e7ff4e6c552524841579a1053da Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 22:21:55 -0700 Subject: Added `CMARK_OPT_VALIDATE_UTF8` option. Also command line option `--validate-utf8`. This option causes cmark to check for valid UTF-8, replacing invalid sequences with the replacement character, U+FFFD. Reinstated api tests for utf8. --- api_test/main.c | 6 +++--- man/man1/cmark.1 | 3 +++ man/man3/cmark.3 | 23 ++++++++++++++++++----- src/blocks.c | 6 +++++- src/cmark.h | 5 +++++ src/main.c | 2 ++ 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 871b3a5c5a..666af4d9e1 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -658,7 +658,7 @@ test_continuation_byte(test_batch_runner *runner, const char *utf8) strcat(expected, "))))

                            \n"); char *html = cmark_markdown_to_html(buf, strlen(buf), - CMARK_OPT_DEFAULT); + CMARK_OPT_VALIDATE_UTF8); STR_EQ(runner, html, expected, "invalid utf8 continuation byte %d/%d", pos, len); free(html); @@ -718,7 +718,7 @@ test_md_to_html(test_batch_runner *runner, const char *markdown, const char *expected_html, const char *msg) { char *html = cmark_markdown_to_html(markdown, strlen(markdown), - CMARK_OPT_DEFAULT); + CMARK_OPT_VALIDATE_UTF8); STR_EQ(runner, html, expected_html, msg); free(html); } @@ -737,7 +737,7 @@ int main() { hierarchy(runner); parser(runner); render_html(runner); - // utf8(runner); + utf8(runner); line_endings(runner); numeric_entities(runner); test_cplusplus(runner); diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 2e08b3812a..8c1c2c7d2f 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -35,6 +35,9 @@ hard wrapping is disabled, regardless of the value given with \-\-width. .B \-\-normalize Consolidate adjacent text nodes. .TP 12n +.B \-\-validate-utf8 +Validate UTF-8, replacing illegal sequences with U+FFFD. +.TP 12n .B \-\-smart Use smart punctuation. Straight double and single quotes will be rendered as curly quotes, depending on their position. diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 82c34cd58f..aa254b0252 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "June 07, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 16, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -403,10 +403,10 @@ Streaming interface: cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); FILE *fp = fopen("myfile.md", "r"); while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { - cmark_parser_feed(parser, buffer, bytes); - if (bytes < sizeof(buffer)) { - break; - } + cmark_parser_feed(parser, buffer, bytes); + if (bytes < sizeof(buffer)) { + break; + } } document = cmark_parser_finish(parser); cmark_parser_free(parser); @@ -539,6 +539,19 @@ Normalize tree by consolidating adjacent text nodes. .PP Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en dashes. +.PP +.nf +\fC +.RS 0n +#define CMARK_OPT_VALIDATE_UTF8 16 +.RE +\f[] +.fi + +.PP +Validate UTF\-8 in the input before parsing, replacing illegal +sequences with the replacement character U+FFFD. + .SS Version information diff --git a/src/blocks.c b/src/blocks.c index 95a87c34e4..17288dfbe0 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -631,7 +631,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte cmark_chunk input; bool maybe_lazy; - cmark_strbuf_put(parser->curline, buffer, bytes); + if (parser->options & CMARK_OPT_VALIDATE_UTF8) { + utf8proc_check(parser->curline, buffer, bytes); + } else { + cmark_strbuf_put(parser->curline, buffer, bytes); + } parser->offset = 0; parser->column = 0; parser->blank = false; diff --git a/src/cmark.h b/src/cmark.h index d86e13e7d5..4ff1ca0d77 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -506,6 +506,11 @@ char *cmark_render_commonmark(cmark_node *root, int options, int width); */ #define CMARK_OPT_SMART 8 +/** Validate UTF-8 in the input before parsing, replacing illegal + * sequences with the replacement character U+FFFD. + */ +#define CMARK_OPT_VALIDATE_UTF8 16 + /** * ## Version information */ diff --git a/src/main.c b/src/main.c index c23071fec6..5dc97b2fdb 100644 --- a/src/main.c +++ b/src/main.c @@ -92,6 +92,8 @@ int main(int argc, char *argv[]) options |= CMARK_OPT_SMART; } else if (strcmp(argv[i], "--normalize") == 0) { options |= CMARK_OPT_NORMALIZE; + } else if (strcmp(argv[i], "--validate-utf8") == 0) { + options |= CMARK_OPT_VALIDATE_UTF8; } else if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { print_usage(); -- cgit 0.0.5-2-1-g0f52 From 027a3153256fe9647bf13e28f1faa9ee8806f942 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 16 Jun 2015 23:12:11 -0700 Subject: Updated benchmarks. --- benchmarks.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index e43435dbde..5f6bed1239 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -11,11 +11,11 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. | cheapskate | 8.24 | | peg-markdown | 5.45 | | parsedown | 5.06 | -| marked | 1.94 | -| **commonmark.js** | 1.93 | -| discount | 1.86 | -| **cmark** | 0.32 | -| hoedown | 0.21 | +| **commonmark.js** | 2.20 | +| marked | 2.13 | +| discount | 1.90 | +| **cmark** | 0.29 | +| hoedown | 0.23 | To run these benchmarks, use `make bench PROG=/path/to/program`. -- cgit 0.0.5-2-1-g0f52 From 2fa54428e2910d4f8d96e6a548db650d50613535 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 08:05:57 -0700 Subject: Renamed entities.h -> entities.inc. Also tools/make_entities_h.py -> tools/make_entitis_inc.py. --- Makefile | 4 +- src/CMakeLists.txt | 1 - src/entities.h | 2151 -------------------------------------------- src/entities.inc | 2138 +++++++++++++++++++++++++++++++++++++++++++ src/houdini_html_u.c | 2 +- tools/make_entities_h.py | 45 - tools/make_entities_inc.py | 32 + 7 files changed, 2173 insertions(+), 2200 deletions(-) delete mode 100644 src/entities.h create mode 100644 src/entities.inc delete mode 100644 tools/make_entities_h.py create mode 100644 tools/make_entities_inc.py diff --git a/Makefile b/Makefile index 10d4e98e7a..d1dc9ae2e9 100644 --- a/Makefile +++ b/Makefile @@ -111,9 +111,9 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re esac re2c --case-insensitive -b -i --no-generation-date -o $@ $< -# We include entities.h in the repository, so normally this +# We include entities.inc in the repository, so normally this # doesn't need to be regenerated: -$(SRCDIR)/entities.h: tools/make_entities_h.py +$(SRCDIR)/entities.inc: tools/make_entities_inc.py python3 $< > $@ update-spec: diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 06de9ef15e..37a46d3cc1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,6 @@ set(HEADERS inlines.h houdini.h cmark_ctype.h - entities.h ) set(LIBRARY_SOURCES cmark.c diff --git a/src/entities.h b/src/entities.h deleted file mode 100644 index 765f1b8793..0000000000 --- a/src/entities.h +++ /dev/null @@ -1,2151 +0,0 @@ -#ifndef CMARK_ENTITIES_H -#define CMARK_ENTITIES_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct cmark_entity_node { - unsigned char *entity; - unsigned char bytes[8]; -}; - -#define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 31 -#define CMARK_NUM_ENTITIES 2125 - -static const struct cmark_entity_node cmark_entities[] = { -{(unsigned char*)"AElig", {195, 134, 0}}, -{(unsigned char*)"AMP", {38, 0}}, -{(unsigned char*)"Aacute", {195, 129, 0}}, -{(unsigned char*)"Abreve", {196, 130, 0}}, -{(unsigned char*)"Acirc", {195, 130, 0}}, -{(unsigned char*)"Acy", {208, 144, 0}}, -{(unsigned char*)"Afr", {240, 157, 148, 132, 0}}, -{(unsigned char*)"Agrave", {195, 128, 0}}, -{(unsigned char*)"Alpha", {206, 145, 0}}, -{(unsigned char*)"Amacr", {196, 128, 0}}, -{(unsigned char*)"And", {226, 169, 147, 0}}, -{(unsigned char*)"Aogon", {196, 132, 0}}, -{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}}, -{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}}, -{(unsigned char*)"Aring", {195, 133, 0}}, -{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}}, -{(unsigned char*)"Assign", {226, 137, 148, 0}}, -{(unsigned char*)"Atilde", {195, 131, 0}}, -{(unsigned char*)"Auml", {195, 132, 0}}, -{(unsigned char*)"Backslash", {226, 136, 150, 0}}, -{(unsigned char*)"Barv", {226, 171, 167, 0}}, -{(unsigned char*)"Barwed", {226, 140, 134, 0}}, -{(unsigned char*)"Bcy", {208, 145, 0}}, -{(unsigned char*)"Because", {226, 136, 181, 0}}, -{(unsigned char*)"Bernoullis", {226, 132, 172, 0}}, -{(unsigned char*)"Beta", {206, 146, 0}}, -{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}}, -{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}}, -{(unsigned char*)"Breve", {203, 152, 0}}, -{(unsigned char*)"Bscr", {226, 132, 172, 0}}, -{(unsigned char*)"Bumpeq", {226, 137, 142, 0}}, -{(unsigned char*)"CHcy", {208, 167, 0}}, -{(unsigned char*)"COPY", {194, 169, 0}}, -{(unsigned char*)"Cacute", {196, 134, 0}}, -{(unsigned char*)"Cap", {226, 139, 146, 0}}, -{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}}, -{(unsigned char*)"Cayleys", {226, 132, 173, 0}}, -{(unsigned char*)"Ccaron", {196, 140, 0}}, -{(unsigned char*)"Ccedil", {195, 135, 0}}, -{(unsigned char*)"Ccirc", {196, 136, 0}}, -{(unsigned char*)"Cconint", {226, 136, 176, 0}}, -{(unsigned char*)"Cdot", {196, 138, 0}}, -{(unsigned char*)"Cedilla", {194, 184, 0}}, -{(unsigned char*)"CenterDot", {194, 183, 0}}, -{(unsigned char*)"Cfr", {226, 132, 173, 0}}, -{(unsigned char*)"Chi", {206, 167, 0}}, -{(unsigned char*)"CircleDot", {226, 138, 153, 0}}, -{(unsigned char*)"CircleMinus", {226, 138, 150, 0}}, -{(unsigned char*)"CirclePlus", {226, 138, 149, 0}}, -{(unsigned char*)"CircleTimes", {226, 138, 151, 0}}, -{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}}, -{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}}, -{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}}, -{(unsigned char*)"Colon", {226, 136, 183, 0}}, -{(unsigned char*)"Colone", {226, 169, 180, 0}}, -{(unsigned char*)"Congruent", {226, 137, 161, 0}}, -{(unsigned char*)"Conint", {226, 136, 175, 0}}, -{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}}, -{(unsigned char*)"Copf", {226, 132, 130, 0}}, -{(unsigned char*)"Coproduct", {226, 136, 144, 0}}, -{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}}, -{(unsigned char*)"Cross", {226, 168, 175, 0}}, -{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}}, -{(unsigned char*)"Cup", {226, 139, 147, 0}}, -{(unsigned char*)"CupCap", {226, 137, 141, 0}}, -{(unsigned char*)"DD", {226, 133, 133, 0}}, -{(unsigned char*)"DDotrahd", {226, 164, 145, 0}}, -{(unsigned char*)"DJcy", {208, 130, 0}}, -{(unsigned char*)"DScy", {208, 133, 0}}, -{(unsigned char*)"DZcy", {208, 143, 0}}, -{(unsigned char*)"Dagger", {226, 128, 161, 0}}, -{(unsigned char*)"Darr", {226, 134, 161, 0}}, -{(unsigned char*)"Dashv", {226, 171, 164, 0}}, -{(unsigned char*)"Dcaron", {196, 142, 0}}, -{(unsigned char*)"Dcy", {208, 148, 0}}, -{(unsigned char*)"Del", {226, 136, 135, 0}}, -{(unsigned char*)"Delta", {206, 148, 0}}, -{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}}, -{(unsigned char*)"DiacriticalAcute", {194, 180, 0}}, -{(unsigned char*)"DiacriticalDot", {203, 153, 0}}, -{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}}, -{(unsigned char*)"DiacriticalGrave", {96, 0}}, -{(unsigned char*)"DiacriticalTilde", {203, 156, 0}}, -{(unsigned char*)"Diamond", {226, 139, 132, 0}}, -{(unsigned char*)"DifferentialD", {226, 133, 134, 0}}, -{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}}, -{(unsigned char*)"Dot", {194, 168, 0}}, -{(unsigned char*)"DotDot", {226, 131, 156, 0}}, -{(unsigned char*)"DotEqual", {226, 137, 144, 0}}, -{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}}, -{(unsigned char*)"DoubleDot", {194, 168, 0}}, -{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}}, -{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}}, -{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}}, -{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}}, -{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}}, -{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}}, -{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}}, -{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}}, -{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}}, -{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}}, -{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}}, -{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}}, -{(unsigned char*)"DownArrow", {226, 134, 147, 0}}, -{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}}, -{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}}, -{(unsigned char*)"DownBreve", {204, 145, 0}}, -{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}}, -{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}}, -{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}}, -{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}}, -{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}}, -{(unsigned char*)"DownRightVector", {226, 135, 129, 0}}, -{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}}, -{(unsigned char*)"DownTee", {226, 138, 164, 0}}, -{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}}, -{(unsigned char*)"Downarrow", {226, 135, 147, 0}}, -{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}}, -{(unsigned char*)"Dstrok", {196, 144, 0}}, -{(unsigned char*)"ENG", {197, 138, 0}}, -{(unsigned char*)"ETH", {195, 144, 0}}, -{(unsigned char*)"Eacute", {195, 137, 0}}, -{(unsigned char*)"Ecaron", {196, 154, 0}}, -{(unsigned char*)"Ecirc", {195, 138, 0}}, -{(unsigned char*)"Ecy", {208, 173, 0}}, -{(unsigned char*)"Edot", {196, 150, 0}}, -{(unsigned char*)"Efr", {240, 157, 148, 136, 0}}, -{(unsigned char*)"Egrave", {195, 136, 0}}, -{(unsigned char*)"Element", {226, 136, 136, 0}}, -{(unsigned char*)"Emacr", {196, 146, 0}}, -{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}}, -{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}}, -{(unsigned char*)"Eogon", {196, 152, 0}}, -{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}}, -{(unsigned char*)"Epsilon", {206, 149, 0}}, -{(unsigned char*)"Equal", {226, 169, 181, 0}}, -{(unsigned char*)"EqualTilde", {226, 137, 130, 0}}, -{(unsigned char*)"Equilibrium", {226, 135, 140, 0}}, -{(unsigned char*)"Escr", {226, 132, 176, 0}}, -{(unsigned char*)"Esim", {226, 169, 179, 0}}, -{(unsigned char*)"Eta", {206, 151, 0}}, -{(unsigned char*)"Euml", {195, 139, 0}}, -{(unsigned char*)"Exists", {226, 136, 131, 0}}, -{(unsigned char*)"ExponentialE", {226, 133, 135, 0}}, -{(unsigned char*)"Fcy", {208, 164, 0}}, -{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}}, -{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}}, -{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}}, -{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}}, -{(unsigned char*)"ForAll", {226, 136, 128, 0}}, -{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}}, -{(unsigned char*)"Fscr", {226, 132, 177, 0}}, -{(unsigned char*)"GJcy", {208, 131, 0}}, -{(unsigned char*)"GT", {62, 0}}, -{(unsigned char*)"Gamma", {206, 147, 0}}, -{(unsigned char*)"Gammad", {207, 156, 0}}, -{(unsigned char*)"Gbreve", {196, 158, 0}}, -{(unsigned char*)"Gcedil", {196, 162, 0}}, -{(unsigned char*)"Gcirc", {196, 156, 0}}, -{(unsigned char*)"Gcy", {208, 147, 0}}, -{(unsigned char*)"Gdot", {196, 160, 0}}, -{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}}, -{(unsigned char*)"Gg", {226, 139, 153, 0}}, -{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}}, -{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}}, -{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}}, -{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}}, -{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}}, -{(unsigned char*)"GreaterLess", {226, 137, 183, 0}}, -{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}}, -{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}}, -{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}}, -{(unsigned char*)"Gt", {226, 137, 171, 0}}, -{(unsigned char*)"HARDcy", {208, 170, 0}}, -{(unsigned char*)"Hacek", {203, 135, 0}}, -{(unsigned char*)"Hat", {94, 0}}, -{(unsigned char*)"Hcirc", {196, 164, 0}}, -{(unsigned char*)"Hfr", {226, 132, 140, 0}}, -{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}}, -{(unsigned char*)"Hopf", {226, 132, 141, 0}}, -{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}}, -{(unsigned char*)"Hscr", {226, 132, 139, 0}}, -{(unsigned char*)"Hstrok", {196, 166, 0}}, -{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}}, -{(unsigned char*)"HumpEqual", {226, 137, 143, 0}}, -{(unsigned char*)"IEcy", {208, 149, 0}}, -{(unsigned char*)"IJlig", {196, 178, 0}}, -{(unsigned char*)"IOcy", {208, 129, 0}}, -{(unsigned char*)"Iacute", {195, 141, 0}}, -{(unsigned char*)"Icirc", {195, 142, 0}}, -{(unsigned char*)"Icy", {208, 152, 0}}, -{(unsigned char*)"Idot", {196, 176, 0}}, -{(unsigned char*)"Ifr", {226, 132, 145, 0}}, -{(unsigned char*)"Igrave", {195, 140, 0}}, -{(unsigned char*)"Im", {226, 132, 145, 0}}, -{(unsigned char*)"Imacr", {196, 170, 0}}, -{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}}, -{(unsigned char*)"Implies", {226, 135, 146, 0}}, -{(unsigned char*)"Int", {226, 136, 172, 0}}, -{(unsigned char*)"Integral", {226, 136, 171, 0}}, -{(unsigned char*)"Intersection", {226, 139, 130, 0}}, -{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}}, -{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}}, -{(unsigned char*)"Iogon", {196, 174, 0}}, -{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}}, -{(unsigned char*)"Iota", {206, 153, 0}}, -{(unsigned char*)"Iscr", {226, 132, 144, 0}}, -{(unsigned char*)"Itilde", {196, 168, 0}}, -{(unsigned char*)"Iukcy", {208, 134, 0}}, -{(unsigned char*)"Iuml", {195, 143, 0}}, -{(unsigned char*)"Jcirc", {196, 180, 0}}, -{(unsigned char*)"Jcy", {208, 153, 0}}, -{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}}, -{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}}, -{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}}, -{(unsigned char*)"Jsercy", {208, 136, 0}}, -{(unsigned char*)"Jukcy", {208, 132, 0}}, -{(unsigned char*)"KHcy", {208, 165, 0}}, -{(unsigned char*)"KJcy", {208, 140, 0}}, -{(unsigned char*)"Kappa", {206, 154, 0}}, -{(unsigned char*)"Kcedil", {196, 182, 0}}, -{(unsigned char*)"Kcy", {208, 154, 0}}, -{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}}, -{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}}, -{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}}, -{(unsigned char*)"LJcy", {208, 137, 0}}, -{(unsigned char*)"LT", {60, 0}}, -{(unsigned char*)"Lacute", {196, 185, 0}}, -{(unsigned char*)"Lambda", {206, 155, 0}}, -{(unsigned char*)"Lang", {226, 159, 170, 0}}, -{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}}, -{(unsigned char*)"Larr", {226, 134, 158, 0}}, -{(unsigned char*)"Lcaron", {196, 189, 0}}, -{(unsigned char*)"Lcedil", {196, 187, 0}}, -{(unsigned char*)"Lcy", {208, 155, 0}}, -{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}}, -{(unsigned char*)"LeftArrow", {226, 134, 144, 0}}, -{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}}, -{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}}, -{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}}, -{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}}, -{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}}, -{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}}, -{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}}, -{(unsigned char*)"LeftFloor", {226, 140, 138, 0}}, -{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}}, -{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}}, -{(unsigned char*)"LeftTee", {226, 138, 163, 0}}, -{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}}, -{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}}, -{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}}, -{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}}, -{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}}, -{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}}, -{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}}, -{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}}, -{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}}, -{(unsigned char*)"LeftVector", {226, 134, 188, 0}}, -{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}}, -{(unsigned char*)"Leftarrow", {226, 135, 144, 0}}, -{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}}, -{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}}, -{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}}, -{(unsigned char*)"LessGreater", {226, 137, 182, 0}}, -{(unsigned char*)"LessLess", {226, 170, 161, 0}}, -{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}}, -{(unsigned char*)"LessTilde", {226, 137, 178, 0}}, -{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}}, -{(unsigned char*)"Ll", {226, 139, 152, 0}}, -{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}}, -{(unsigned char*)"Lmidot", {196, 191, 0}}, -{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}}, -{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}}, -{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}}, -{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}}, -{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}}, -{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}}, -{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}}, -{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}}, -{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}}, -{(unsigned char*)"Lscr", {226, 132, 146, 0}}, -{(unsigned char*)"Lsh", {226, 134, 176, 0}}, -{(unsigned char*)"Lstrok", {197, 129, 0}}, -{(unsigned char*)"Lt", {226, 137, 170, 0}}, -{(unsigned char*)"Map", {226, 164, 133, 0}}, -{(unsigned char*)"Mcy", {208, 156, 0}}, -{(unsigned char*)"MediumSpace", {226, 129, 159, 0}}, -{(unsigned char*)"Mellintrf", {226, 132, 179, 0}}, -{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}}, -{(unsigned char*)"MinusPlus", {226, 136, 147, 0}}, -{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}}, -{(unsigned char*)"Mscr", {226, 132, 179, 0}}, -{(unsigned char*)"Mu", {206, 156, 0}}, -{(unsigned char*)"NJcy", {208, 138, 0}}, -{(unsigned char*)"Nacute", {197, 131, 0}}, -{(unsigned char*)"Ncaron", {197, 135, 0}}, -{(unsigned char*)"Ncedil", {197, 133, 0}}, -{(unsigned char*)"Ncy", {208, 157, 0}}, -{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}}, -{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}}, -{(unsigned char*)"NewLine", {10, 0}}, -{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}}, -{(unsigned char*)"NoBreak", {226, 129, 160, 0}}, -{(unsigned char*)"NonBreakingSpace", {194, 160, 0}}, -{(unsigned char*)"Nopf", {226, 132, 149, 0}}, -{(unsigned char*)"Not", {226, 171, 172, 0}}, -{(unsigned char*)"NotCongruent", {226, 137, 162, 0}}, -{(unsigned char*)"NotCupCap", {226, 137, 173, 0}}, -{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}}, -{(unsigned char*)"NotElement", {226, 136, 137, 0}}, -{(unsigned char*)"NotEqual", {226, 137, 160, 0}}, -{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}}, -{(unsigned char*)"NotExists", {226, 136, 132, 0}}, -{(unsigned char*)"NotGreater", {226, 137, 175, 0}}, -{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}}, -{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}}, -{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}}, -{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}}, -{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}}, -{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}}, -{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}}, -{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}}, -{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}}, -{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}}, -{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}}, -{(unsigned char*)"NotLess", {226, 137, 174, 0}}, -{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}}, -{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}}, -{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}}, -{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}}, -{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}}, -{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}}, -{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}}, -{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}}, -{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}}, -{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}}, -{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}}, -{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}}, -{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}}, -{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}}, -{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}}, -{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}}, -{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}}, -{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}}, -{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}}, -{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}}, -{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}}, -{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}}, -{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}}, -{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}}, -{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}}, -{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}}, -{(unsigned char*)"NotTilde", {226, 137, 129, 0}}, -{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}}, -{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}}, -{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}}, -{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}}, -{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}}, -{(unsigned char*)"Ntilde", {195, 145, 0}}, -{(unsigned char*)"Nu", {206, 157, 0}}, -{(unsigned char*)"OElig", {197, 146, 0}}, -{(unsigned char*)"Oacute", {195, 147, 0}}, -{(unsigned char*)"Ocirc", {195, 148, 0}}, -{(unsigned char*)"Ocy", {208, 158, 0}}, -{(unsigned char*)"Odblac", {197, 144, 0}}, -{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}}, -{(unsigned char*)"Ograve", {195, 146, 0}}, -{(unsigned char*)"Omacr", {197, 140, 0}}, -{(unsigned char*)"Omega", {206, 169, 0}}, -{(unsigned char*)"Omicron", {206, 159, 0}}, -{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}}, -{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}}, -{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}}, -{(unsigned char*)"Or", {226, 169, 148, 0}}, -{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}}, -{(unsigned char*)"Oslash", {195, 152, 0}}, -{(unsigned char*)"Otilde", {195, 149, 0}}, -{(unsigned char*)"Otimes", {226, 168, 183, 0}}, -{(unsigned char*)"Ouml", {195, 150, 0}}, -{(unsigned char*)"OverBar", {226, 128, 190, 0}}, -{(unsigned char*)"OverBrace", {226, 143, 158, 0}}, -{(unsigned char*)"OverBracket", {226, 142, 180, 0}}, -{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}}, -{(unsigned char*)"PartialD", {226, 136, 130, 0}}, -{(unsigned char*)"Pcy", {208, 159, 0}}, -{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}}, -{(unsigned char*)"Phi", {206, 166, 0}}, -{(unsigned char*)"Pi", {206, 160, 0}}, -{(unsigned char*)"PlusMinus", {194, 177, 0}}, -{(unsigned char*)"Poincareplane", {226, 132, 140, 0}}, -{(unsigned char*)"Popf", {226, 132, 153, 0}}, -{(unsigned char*)"Pr", {226, 170, 187, 0}}, -{(unsigned char*)"Precedes", {226, 137, 186, 0}}, -{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}}, -{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}}, -{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}}, -{(unsigned char*)"Prime", {226, 128, 179, 0}}, -{(unsigned char*)"Product", {226, 136, 143, 0}}, -{(unsigned char*)"Proportion", {226, 136, 183, 0}}, -{(unsigned char*)"Proportional", {226, 136, 157, 0}}, -{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}}, -{(unsigned char*)"Psi", {206, 168, 0}}, -{(unsigned char*)"QUOT", {34, 0}}, -{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}}, -{(unsigned char*)"Qopf", {226, 132, 154, 0}}, -{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}}, -{(unsigned char*)"RBarr", {226, 164, 144, 0}}, -{(unsigned char*)"REG", {194, 174, 0}}, -{(unsigned char*)"Racute", {197, 148, 0}}, -{(unsigned char*)"Rang", {226, 159, 171, 0}}, -{(unsigned char*)"Rarr", {226, 134, 160, 0}}, -{(unsigned char*)"Rarrtl", {226, 164, 150, 0}}, -{(unsigned char*)"Rcaron", {197, 152, 0}}, -{(unsigned char*)"Rcedil", {197, 150, 0}}, -{(unsigned char*)"Rcy", {208, 160, 0}}, -{(unsigned char*)"Re", {226, 132, 156, 0}}, -{(unsigned char*)"ReverseElement", {226, 136, 139, 0}}, -{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}}, -{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}}, -{(unsigned char*)"Rfr", {226, 132, 156, 0}}, -{(unsigned char*)"Rho", {206, 161, 0}}, -{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}}, -{(unsigned char*)"RightArrow", {226, 134, 146, 0}}, -{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}}, -{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}}, -{(unsigned char*)"RightCeiling", {226, 140, 137, 0}}, -{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}}, -{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}}, -{(unsigned char*)"RightDownVector", {226, 135, 130, 0}}, -{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}}, -{(unsigned char*)"RightFloor", {226, 140, 139, 0}}, -{(unsigned char*)"RightTee", {226, 138, 162, 0}}, -{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}}, -{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}}, -{(unsigned char*)"RightTriangle", {226, 138, 179, 0}}, -{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}}, -{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}}, -{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}}, -{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}}, -{(unsigned char*)"RightUpVector", {226, 134, 190, 0}}, -{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}}, -{(unsigned char*)"RightVector", {226, 135, 128, 0}}, -{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}}, -{(unsigned char*)"Rightarrow", {226, 135, 146, 0}}, -{(unsigned char*)"Ropf", {226, 132, 157, 0}}, -{(unsigned char*)"RoundImplies", {226, 165, 176, 0}}, -{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}}, -{(unsigned char*)"Rscr", {226, 132, 155, 0}}, -{(unsigned char*)"Rsh", {226, 134, 177, 0}}, -{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}}, -{(unsigned char*)"SHCHcy", {208, 169, 0}}, -{(unsigned char*)"SHcy", {208, 168, 0}}, -{(unsigned char*)"SOFTcy", {208, 172, 0}}, -{(unsigned char*)"Sacute", {197, 154, 0}}, -{(unsigned char*)"Sc", {226, 170, 188, 0}}, -{(unsigned char*)"Scaron", {197, 160, 0}}, -{(unsigned char*)"Scedil", {197, 158, 0}}, -{(unsigned char*)"Scirc", {197, 156, 0}}, -{(unsigned char*)"Scy", {208, 161, 0}}, -{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}}, -{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}}, -{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}}, -{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}}, -{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}}, -{(unsigned char*)"Sigma", {206, 163, 0}}, -{(unsigned char*)"SmallCircle", {226, 136, 152, 0}}, -{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}}, -{(unsigned char*)"Sqrt", {226, 136, 154, 0}}, -{(unsigned char*)"Square", {226, 150, 161, 0}}, -{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}}, -{(unsigned char*)"SquareSubset", {226, 138, 143, 0}}, -{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}}, -{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}}, -{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}}, -{(unsigned char*)"SquareUnion", {226, 138, 148, 0}}, -{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}}, -{(unsigned char*)"Star", {226, 139, 134, 0}}, -{(unsigned char*)"Sub", {226, 139, 144, 0}}, -{(unsigned char*)"Subset", {226, 139, 144, 0}}, -{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}}, -{(unsigned char*)"Succeeds", {226, 137, 187, 0}}, -{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}}, -{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}}, -{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}}, -{(unsigned char*)"SuchThat", {226, 136, 139, 0}}, -{(unsigned char*)"Sum", {226, 136, 145, 0}}, -{(unsigned char*)"Sup", {226, 139, 145, 0}}, -{(unsigned char*)"Superset", {226, 138, 131, 0}}, -{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}}, -{(unsigned char*)"Supset", {226, 139, 145, 0}}, -{(unsigned char*)"THORN", {195, 158, 0}}, -{(unsigned char*)"TRADE", {226, 132, 162, 0}}, -{(unsigned char*)"TSHcy", {208, 139, 0}}, -{(unsigned char*)"TScy", {208, 166, 0}}, -{(unsigned char*)"Tab", {9, 0}}, -{(unsigned char*)"Tau", {206, 164, 0}}, -{(unsigned char*)"Tcaron", {197, 164, 0}}, -{(unsigned char*)"Tcedil", {197, 162, 0}}, -{(unsigned char*)"Tcy", {208, 162, 0}}, -{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}}, -{(unsigned char*)"Therefore", {226, 136, 180, 0}}, -{(unsigned char*)"Theta", {206, 152, 0}}, -{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}}, -{(unsigned char*)"ThinSpace", {226, 128, 137, 0}}, -{(unsigned char*)"Tilde", {226, 136, 188, 0}}, -{(unsigned char*)"TildeEqual", {226, 137, 131, 0}}, -{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}}, -{(unsigned char*)"TildeTilde", {226, 137, 136, 0}}, -{(unsigned char*)"Topf", {240, 157, 149, 139, 0}}, -{(unsigned char*)"TripleDot", {226, 131, 155, 0}}, -{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}}, -{(unsigned char*)"Tstrok", {197, 166, 0}}, -{(unsigned char*)"Uacute", {195, 154, 0}}, -{(unsigned char*)"Uarr", {226, 134, 159, 0}}, -{(unsigned char*)"Uarrocir", {226, 165, 137, 0}}, -{(unsigned char*)"Ubrcy", {208, 142, 0}}, -{(unsigned char*)"Ubreve", {197, 172, 0}}, -{(unsigned char*)"Ucirc", {195, 155, 0}}, -{(unsigned char*)"Ucy", {208, 163, 0}}, -{(unsigned char*)"Udblac", {197, 176, 0}}, -{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}}, -{(unsigned char*)"Ugrave", {195, 153, 0}}, -{(unsigned char*)"Umacr", {197, 170, 0}}, -{(unsigned char*)"UnderBar", {95, 0}}, -{(unsigned char*)"UnderBrace", {226, 143, 159, 0}}, -{(unsigned char*)"UnderBracket", {226, 142, 181, 0}}, -{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}}, -{(unsigned char*)"Union", {226, 139, 131, 0}}, -{(unsigned char*)"UnionPlus", {226, 138, 142, 0}}, -{(unsigned char*)"Uogon", {197, 178, 0}}, -{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}}, -{(unsigned char*)"UpArrow", {226, 134, 145, 0}}, -{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}}, -{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}}, -{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}}, -{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}}, -{(unsigned char*)"UpTee", {226, 138, 165, 0}}, -{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}}, -{(unsigned char*)"Uparrow", {226, 135, 145, 0}}, -{(unsigned char*)"Updownarrow", {226, 135, 149, 0}}, -{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}}, -{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}}, -{(unsigned char*)"Upsi", {207, 146, 0}}, -{(unsigned char*)"Upsilon", {206, 165, 0}}, -{(unsigned char*)"Uring", {197, 174, 0}}, -{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}}, -{(unsigned char*)"Utilde", {197, 168, 0}}, -{(unsigned char*)"Uuml", {195, 156, 0}}, -{(unsigned char*)"VDash", {226, 138, 171, 0}}, -{(unsigned char*)"Vbar", {226, 171, 171, 0}}, -{(unsigned char*)"Vcy", {208, 146, 0}}, -{(unsigned char*)"Vdash", {226, 138, 169, 0}}, -{(unsigned char*)"Vdashl", {226, 171, 166, 0}}, -{(unsigned char*)"Vee", {226, 139, 129, 0}}, -{(unsigned char*)"Verbar", {226, 128, 150, 0}}, -{(unsigned char*)"Vert", {226, 128, 150, 0}}, -{(unsigned char*)"VerticalBar", {226, 136, 163, 0}}, -{(unsigned char*)"VerticalLine", {124, 0}}, -{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}}, -{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}}, -{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}}, -{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}}, -{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}}, -{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}}, -{(unsigned char*)"Vvdash", {226, 138, 170, 0}}, -{(unsigned char*)"Wcirc", {197, 180, 0}}, -{(unsigned char*)"Wedge", {226, 139, 128, 0}}, -{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}}, -{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}}, -{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}}, -{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}}, -{(unsigned char*)"Xi", {206, 158, 0}}, -{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}}, -{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}}, -{(unsigned char*)"YAcy", {208, 175, 0}}, -{(unsigned char*)"YIcy", {208, 135, 0}}, -{(unsigned char*)"YUcy", {208, 174, 0}}, -{(unsigned char*)"Yacute", {195, 157, 0}}, -{(unsigned char*)"Ycirc", {197, 182, 0}}, -{(unsigned char*)"Ycy", {208, 171, 0}}, -{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}}, -{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}}, -{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}}, -{(unsigned char*)"Yuml", {197, 184, 0}}, -{(unsigned char*)"ZHcy", {208, 150, 0}}, -{(unsigned char*)"Zacute", {197, 185, 0}}, -{(unsigned char*)"Zcaron", {197, 189, 0}}, -{(unsigned char*)"Zcy", {208, 151, 0}}, -{(unsigned char*)"Zdot", {197, 187, 0}}, -{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}}, -{(unsigned char*)"Zeta", {206, 150, 0}}, -{(unsigned char*)"Zfr", {226, 132, 168, 0}}, -{(unsigned char*)"Zopf", {226, 132, 164, 0}}, -{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}}, -{(unsigned char*)"aacute", {195, 161, 0}}, -{(unsigned char*)"abreve", {196, 131, 0}}, -{(unsigned char*)"ac", {226, 136, 190, 0}}, -{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}}, -{(unsigned char*)"acd", {226, 136, 191, 0}}, -{(unsigned char*)"acirc", {195, 162, 0}}, -{(unsigned char*)"acute", {194, 180, 0}}, -{(unsigned char*)"acy", {208, 176, 0}}, -{(unsigned char*)"aelig", {195, 166, 0}}, -{(unsigned char*)"af", {226, 129, 161, 0}}, -{(unsigned char*)"afr", {240, 157, 148, 158, 0}}, -{(unsigned char*)"agrave", {195, 160, 0}}, -{(unsigned char*)"alefsym", {226, 132, 181, 0}}, -{(unsigned char*)"aleph", {226, 132, 181, 0}}, -{(unsigned char*)"alpha", {206, 177, 0}}, -{(unsigned char*)"amacr", {196, 129, 0}}, -{(unsigned char*)"amalg", {226, 168, 191, 0}}, -{(unsigned char*)"amp", {38, 0}}, -{(unsigned char*)"and", {226, 136, 167, 0}}, -{(unsigned char*)"andand", {226, 169, 149, 0}}, -{(unsigned char*)"andd", {226, 169, 156, 0}}, -{(unsigned char*)"andslope", {226, 169, 152, 0}}, -{(unsigned char*)"andv", {226, 169, 154, 0}}, -{(unsigned char*)"ang", {226, 136, 160, 0}}, -{(unsigned char*)"ange", {226, 166, 164, 0}}, -{(unsigned char*)"angle", {226, 136, 160, 0}}, -{(unsigned char*)"angmsd", {226, 136, 161, 0}}, -{(unsigned char*)"angmsdaa", {226, 166, 168, 0}}, -{(unsigned char*)"angmsdab", {226, 166, 169, 0}}, -{(unsigned char*)"angmsdac", {226, 166, 170, 0}}, -{(unsigned char*)"angmsdad", {226, 166, 171, 0}}, -{(unsigned char*)"angmsdae", {226, 166, 172, 0}}, -{(unsigned char*)"angmsdaf", {226, 166, 173, 0}}, -{(unsigned char*)"angmsdag", {226, 166, 174, 0}}, -{(unsigned char*)"angmsdah", {226, 166, 175, 0}}, -{(unsigned char*)"angrt", {226, 136, 159, 0}}, -{(unsigned char*)"angrtvb", {226, 138, 190, 0}}, -{(unsigned char*)"angrtvbd", {226, 166, 157, 0}}, -{(unsigned char*)"angsph", {226, 136, 162, 0}}, -{(unsigned char*)"angst", {195, 133, 0}}, -{(unsigned char*)"angzarr", {226, 141, 188, 0}}, -{(unsigned char*)"aogon", {196, 133, 0}}, -{(unsigned char*)"aopf", {240, 157, 149, 146, 0}}, -{(unsigned char*)"ap", {226, 137, 136, 0}}, -{(unsigned char*)"apE", {226, 169, 176, 0}}, -{(unsigned char*)"apacir", {226, 169, 175, 0}}, -{(unsigned char*)"ape", {226, 137, 138, 0}}, -{(unsigned char*)"apid", {226, 137, 139, 0}}, -{(unsigned char*)"apos", {39, 0}}, -{(unsigned char*)"approx", {226, 137, 136, 0}}, -{(unsigned char*)"approxeq", {226, 137, 138, 0}}, -{(unsigned char*)"aring", {195, 165, 0}}, -{(unsigned char*)"ascr", {240, 157, 146, 182, 0}}, -{(unsigned char*)"ast", {42, 0}}, -{(unsigned char*)"asymp", {226, 137, 136, 0}}, -{(unsigned char*)"asympeq", {226, 137, 141, 0}}, -{(unsigned char*)"atilde", {195, 163, 0}}, -{(unsigned char*)"auml", {195, 164, 0}}, -{(unsigned char*)"awconint", {226, 136, 179, 0}}, -{(unsigned char*)"awint", {226, 168, 145, 0}}, -{(unsigned char*)"bNot", {226, 171, 173, 0}}, -{(unsigned char*)"backcong", {226, 137, 140, 0}}, -{(unsigned char*)"backepsilon", {207, 182, 0}}, -{(unsigned char*)"backprime", {226, 128, 181, 0}}, -{(unsigned char*)"backsim", {226, 136, 189, 0}}, -{(unsigned char*)"backsimeq", {226, 139, 141, 0}}, -{(unsigned char*)"barvee", {226, 138, 189, 0}}, -{(unsigned char*)"barwed", {226, 140, 133, 0}}, -{(unsigned char*)"barwedge", {226, 140, 133, 0}}, -{(unsigned char*)"bbrk", {226, 142, 181, 0}}, -{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}}, -{(unsigned char*)"bcong", {226, 137, 140, 0}}, -{(unsigned char*)"bcy", {208, 177, 0}}, -{(unsigned char*)"bdquo", {226, 128, 158, 0}}, -{(unsigned char*)"becaus", {226, 136, 181, 0}}, -{(unsigned char*)"because", {226, 136, 181, 0}}, -{(unsigned char*)"bemptyv", {226, 166, 176, 0}}, -{(unsigned char*)"bepsi", {207, 182, 0}}, -{(unsigned char*)"bernou", {226, 132, 172, 0}}, -{(unsigned char*)"beta", {206, 178, 0}}, -{(unsigned char*)"beth", {226, 132, 182, 0}}, -{(unsigned char*)"between", {226, 137, 172, 0}}, -{(unsigned char*)"bfr", {240, 157, 148, 159, 0}}, -{(unsigned char*)"bigcap", {226, 139, 130, 0}}, -{(unsigned char*)"bigcirc", {226, 151, 175, 0}}, -{(unsigned char*)"bigcup", {226, 139, 131, 0}}, -{(unsigned char*)"bigodot", {226, 168, 128, 0}}, -{(unsigned char*)"bigoplus", {226, 168, 129, 0}}, -{(unsigned char*)"bigotimes", {226, 168, 130, 0}}, -{(unsigned char*)"bigsqcup", {226, 168, 134, 0}}, -{(unsigned char*)"bigstar", {226, 152, 133, 0}}, -{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}}, -{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}}, -{(unsigned char*)"biguplus", {226, 168, 132, 0}}, -{(unsigned char*)"bigvee", {226, 139, 129, 0}}, -{(unsigned char*)"bigwedge", {226, 139, 128, 0}}, -{(unsigned char*)"bkarow", {226, 164, 141, 0}}, -{(unsigned char*)"blacklozenge", {226, 167, 171, 0}}, -{(unsigned char*)"blacksquare", {226, 150, 170, 0}}, -{(unsigned char*)"blacktriangle", {226, 150, 180, 0}}, -{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}}, -{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}}, -{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}}, -{(unsigned char*)"blank", {226, 144, 163, 0}}, -{(unsigned char*)"blk12", {226, 150, 146, 0}}, -{(unsigned char*)"blk14", {226, 150, 145, 0}}, -{(unsigned char*)"blk34", {226, 150, 147, 0}}, -{(unsigned char*)"block", {226, 150, 136, 0}}, -{(unsigned char*)"bne", {61, 226, 131, 165, 0}}, -{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}}, -{(unsigned char*)"bnot", {226, 140, 144, 0}}, -{(unsigned char*)"bopf", {240, 157, 149, 147, 0}}, -{(unsigned char*)"bot", {226, 138, 165, 0}}, -{(unsigned char*)"bottom", {226, 138, 165, 0}}, -{(unsigned char*)"bowtie", {226, 139, 136, 0}}, -{(unsigned char*)"boxDL", {226, 149, 151, 0}}, -{(unsigned char*)"boxDR", {226, 149, 148, 0}}, -{(unsigned char*)"boxDl", {226, 149, 150, 0}}, -{(unsigned char*)"boxDr", {226, 149, 147, 0}}, -{(unsigned char*)"boxH", {226, 149, 144, 0}}, -{(unsigned char*)"boxHD", {226, 149, 166, 0}}, -{(unsigned char*)"boxHU", {226, 149, 169, 0}}, -{(unsigned char*)"boxHd", {226, 149, 164, 0}}, -{(unsigned char*)"boxHu", {226, 149, 167, 0}}, -{(unsigned char*)"boxUL", {226, 149, 157, 0}}, -{(unsigned char*)"boxUR", {226, 149, 154, 0}}, -{(unsigned char*)"boxUl", {226, 149, 156, 0}}, -{(unsigned char*)"boxUr", {226, 149, 153, 0}}, -{(unsigned char*)"boxV", {226, 149, 145, 0}}, -{(unsigned char*)"boxVH", {226, 149, 172, 0}}, -{(unsigned char*)"boxVL", {226, 149, 163, 0}}, -{(unsigned char*)"boxVR", {226, 149, 160, 0}}, -{(unsigned char*)"boxVh", {226, 149, 171, 0}}, -{(unsigned char*)"boxVl", {226, 149, 162, 0}}, -{(unsigned char*)"boxVr", {226, 149, 159, 0}}, -{(unsigned char*)"boxbox", {226, 167, 137, 0}}, -{(unsigned char*)"boxdL", {226, 149, 149, 0}}, -{(unsigned char*)"boxdR", {226, 149, 146, 0}}, -{(unsigned char*)"boxdl", {226, 148, 144, 0}}, -{(unsigned char*)"boxdr", {226, 148, 140, 0}}, -{(unsigned char*)"boxh", {226, 148, 128, 0}}, -{(unsigned char*)"boxhD", {226, 149, 165, 0}}, -{(unsigned char*)"boxhU", {226, 149, 168, 0}}, -{(unsigned char*)"boxhd", {226, 148, 172, 0}}, -{(unsigned char*)"boxhu", {226, 148, 180, 0}}, -{(unsigned char*)"boxminus", {226, 138, 159, 0}}, -{(unsigned char*)"boxplus", {226, 138, 158, 0}}, -{(unsigned char*)"boxtimes", {226, 138, 160, 0}}, -{(unsigned char*)"boxuL", {226, 149, 155, 0}}, -{(unsigned char*)"boxuR", {226, 149, 152, 0}}, -{(unsigned char*)"boxul", {226, 148, 152, 0}}, -{(unsigned char*)"boxur", {226, 148, 148, 0}}, -{(unsigned char*)"boxv", {226, 148, 130, 0}}, -{(unsigned char*)"boxvH", {226, 149, 170, 0}}, -{(unsigned char*)"boxvL", {226, 149, 161, 0}}, -{(unsigned char*)"boxvR", {226, 149, 158, 0}}, -{(unsigned char*)"boxvh", {226, 148, 188, 0}}, -{(unsigned char*)"boxvl", {226, 148, 164, 0}}, -{(unsigned char*)"boxvr", {226, 148, 156, 0}}, -{(unsigned char*)"bprime", {226, 128, 181, 0}}, -{(unsigned char*)"breve", {203, 152, 0}}, -{(unsigned char*)"brvbar", {194, 166, 0}}, -{(unsigned char*)"bscr", {240, 157, 146, 183, 0}}, -{(unsigned char*)"bsemi", {226, 129, 143, 0}}, -{(unsigned char*)"bsim", {226, 136, 189, 0}}, -{(unsigned char*)"bsime", {226, 139, 141, 0}}, -{(unsigned char*)"bsol", {92, 0}}, -{(unsigned char*)"bsolb", {226, 167, 133, 0}}, -{(unsigned char*)"bsolhsub", {226, 159, 136, 0}}, -{(unsigned char*)"bull", {226, 128, 162, 0}}, -{(unsigned char*)"bullet", {226, 128, 162, 0}}, -{(unsigned char*)"bump", {226, 137, 142, 0}}, -{(unsigned char*)"bumpE", {226, 170, 174, 0}}, -{(unsigned char*)"bumpe", {226, 137, 143, 0}}, -{(unsigned char*)"bumpeq", {226, 137, 143, 0}}, -{(unsigned char*)"cacute", {196, 135, 0}}, -{(unsigned char*)"cap", {226, 136, 169, 0}}, -{(unsigned char*)"capand", {226, 169, 132, 0}}, -{(unsigned char*)"capbrcup", {226, 169, 137, 0}}, -{(unsigned char*)"capcap", {226, 169, 139, 0}}, -{(unsigned char*)"capcup", {226, 169, 135, 0}}, -{(unsigned char*)"capdot", {226, 169, 128, 0}}, -{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}}, -{(unsigned char*)"caret", {226, 129, 129, 0}}, -{(unsigned char*)"caron", {203, 135, 0}}, -{(unsigned char*)"ccaps", {226, 169, 141, 0}}, -{(unsigned char*)"ccaron", {196, 141, 0}}, -{(unsigned char*)"ccedil", {195, 167, 0}}, -{(unsigned char*)"ccirc", {196, 137, 0}}, -{(unsigned char*)"ccups", {226, 169, 140, 0}}, -{(unsigned char*)"ccupssm", {226, 169, 144, 0}}, -{(unsigned char*)"cdot", {196, 139, 0}}, -{(unsigned char*)"cedil", {194, 184, 0}}, -{(unsigned char*)"cemptyv", {226, 166, 178, 0}}, -{(unsigned char*)"cent", {194, 162, 0}}, -{(unsigned char*)"centerdot", {194, 183, 0}}, -{(unsigned char*)"cfr", {240, 157, 148, 160, 0}}, -{(unsigned char*)"chcy", {209, 135, 0}}, -{(unsigned char*)"check", {226, 156, 147, 0}}, -{(unsigned char*)"checkmark", {226, 156, 147, 0}}, -{(unsigned char*)"chi", {207, 135, 0}}, -{(unsigned char*)"cir", {226, 151, 139, 0}}, -{(unsigned char*)"cirE", {226, 167, 131, 0}}, -{(unsigned char*)"circ", {203, 134, 0}}, -{(unsigned char*)"circeq", {226, 137, 151, 0}}, -{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}}, -{(unsigned char*)"circlearrowright", {226, 134, 187, 0}}, -{(unsigned char*)"circledR", {194, 174, 0}}, -{(unsigned char*)"circledS", {226, 147, 136, 0}}, -{(unsigned char*)"circledast", {226, 138, 155, 0}}, -{(unsigned char*)"circledcirc", {226, 138, 154, 0}}, -{(unsigned char*)"circleddash", {226, 138, 157, 0}}, -{(unsigned char*)"cire", {226, 137, 151, 0}}, -{(unsigned char*)"cirfnint", {226, 168, 144, 0}}, -{(unsigned char*)"cirmid", {226, 171, 175, 0}}, -{(unsigned char*)"cirscir", {226, 167, 130, 0}}, -{(unsigned char*)"clubs", {226, 153, 163, 0}}, -{(unsigned char*)"clubsuit", {226, 153, 163, 0}}, -{(unsigned char*)"colon", {58, 0}}, -{(unsigned char*)"colone", {226, 137, 148, 0}}, -{(unsigned char*)"coloneq", {226, 137, 148, 0}}, -{(unsigned char*)"comma", {44, 0}}, -{(unsigned char*)"commat", {64, 0}}, -{(unsigned char*)"comp", {226, 136, 129, 0}}, -{(unsigned char*)"compfn", {226, 136, 152, 0}}, -{(unsigned char*)"complement", {226, 136, 129, 0}}, -{(unsigned char*)"complexes", {226, 132, 130, 0}}, -{(unsigned char*)"cong", {226, 137, 133, 0}}, -{(unsigned char*)"congdot", {226, 169, 173, 0}}, -{(unsigned char*)"conint", {226, 136, 174, 0}}, -{(unsigned char*)"copf", {240, 157, 149, 148, 0}}, -{(unsigned char*)"coprod", {226, 136, 144, 0}}, -{(unsigned char*)"copy", {194, 169, 0}}, -{(unsigned char*)"copysr", {226, 132, 151, 0}}, -{(unsigned char*)"crarr", {226, 134, 181, 0}}, -{(unsigned char*)"cross", {226, 156, 151, 0}}, -{(unsigned char*)"cscr", {240, 157, 146, 184, 0}}, -{(unsigned char*)"csub", {226, 171, 143, 0}}, -{(unsigned char*)"csube", {226, 171, 145, 0}}, -{(unsigned char*)"csup", {226, 171, 144, 0}}, -{(unsigned char*)"csupe", {226, 171, 146, 0}}, -{(unsigned char*)"ctdot", {226, 139, 175, 0}}, -{(unsigned char*)"cudarrl", {226, 164, 184, 0}}, -{(unsigned char*)"cudarrr", {226, 164, 181, 0}}, -{(unsigned char*)"cuepr", {226, 139, 158, 0}}, -{(unsigned char*)"cuesc", {226, 139, 159, 0}}, -{(unsigned char*)"cularr", {226, 134, 182, 0}}, -{(unsigned char*)"cularrp", {226, 164, 189, 0}}, -{(unsigned char*)"cup", {226, 136, 170, 0}}, -{(unsigned char*)"cupbrcap", {226, 169, 136, 0}}, -{(unsigned char*)"cupcap", {226, 169, 134, 0}}, -{(unsigned char*)"cupcup", {226, 169, 138, 0}}, -{(unsigned char*)"cupdot", {226, 138, 141, 0}}, -{(unsigned char*)"cupor", {226, 169, 133, 0}}, -{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}}, -{(unsigned char*)"curarr", {226, 134, 183, 0}}, -{(unsigned char*)"curarrm", {226, 164, 188, 0}}, -{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}}, -{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}}, -{(unsigned char*)"curlyvee", {226, 139, 142, 0}}, -{(unsigned char*)"curlywedge", {226, 139, 143, 0}}, -{(unsigned char*)"curren", {194, 164, 0}}, -{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}}, -{(unsigned char*)"curvearrowright", {226, 134, 183, 0}}, -{(unsigned char*)"cuvee", {226, 139, 142, 0}}, -{(unsigned char*)"cuwed", {226, 139, 143, 0}}, -{(unsigned char*)"cwconint", {226, 136, 178, 0}}, -{(unsigned char*)"cwint", {226, 136, 177, 0}}, -{(unsigned char*)"cylcty", {226, 140, 173, 0}}, -{(unsigned char*)"dArr", {226, 135, 147, 0}}, -{(unsigned char*)"dHar", {226, 165, 165, 0}}, -{(unsigned char*)"dagger", {226, 128, 160, 0}}, -{(unsigned char*)"daleth", {226, 132, 184, 0}}, -{(unsigned char*)"darr", {226, 134, 147, 0}}, -{(unsigned char*)"dash", {226, 128, 144, 0}}, -{(unsigned char*)"dashv", {226, 138, 163, 0}}, -{(unsigned char*)"dbkarow", {226, 164, 143, 0}}, -{(unsigned char*)"dblac", {203, 157, 0}}, -{(unsigned char*)"dcaron", {196, 143, 0}}, -{(unsigned char*)"dcy", {208, 180, 0}}, -{(unsigned char*)"dd", {226, 133, 134, 0}}, -{(unsigned char*)"ddagger", {226, 128, 161, 0}}, -{(unsigned char*)"ddarr", {226, 135, 138, 0}}, -{(unsigned char*)"ddotseq", {226, 169, 183, 0}}, -{(unsigned char*)"deg", {194, 176, 0}}, -{(unsigned char*)"delta", {206, 180, 0}}, -{(unsigned char*)"demptyv", {226, 166, 177, 0}}, -{(unsigned char*)"dfisht", {226, 165, 191, 0}}, -{(unsigned char*)"dfr", {240, 157, 148, 161, 0}}, -{(unsigned char*)"dharl", {226, 135, 131, 0}}, -{(unsigned char*)"dharr", {226, 135, 130, 0}}, -{(unsigned char*)"diam", {226, 139, 132, 0}}, -{(unsigned char*)"diamond", {226, 139, 132, 0}}, -{(unsigned char*)"diamondsuit", {226, 153, 166, 0}}, -{(unsigned char*)"diams", {226, 153, 166, 0}}, -{(unsigned char*)"die", {194, 168, 0}}, -{(unsigned char*)"digamma", {207, 157, 0}}, -{(unsigned char*)"disin", {226, 139, 178, 0}}, -{(unsigned char*)"div", {195, 183, 0}}, -{(unsigned char*)"divide", {195, 183, 0}}, -{(unsigned char*)"divideontimes", {226, 139, 135, 0}}, -{(unsigned char*)"divonx", {226, 139, 135, 0}}, -{(unsigned char*)"djcy", {209, 146, 0}}, -{(unsigned char*)"dlcorn", {226, 140, 158, 0}}, -{(unsigned char*)"dlcrop", {226, 140, 141, 0}}, -{(unsigned char*)"dollar", {36, 0}}, -{(unsigned char*)"dopf", {240, 157, 149, 149, 0}}, -{(unsigned char*)"dot", {203, 153, 0}}, -{(unsigned char*)"doteq", {226, 137, 144, 0}}, -{(unsigned char*)"doteqdot", {226, 137, 145, 0}}, -{(unsigned char*)"dotminus", {226, 136, 184, 0}}, -{(unsigned char*)"dotplus", {226, 136, 148, 0}}, -{(unsigned char*)"dotsquare", {226, 138, 161, 0}}, -{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}}, -{(unsigned char*)"downarrow", {226, 134, 147, 0}}, -{(unsigned char*)"downdownarrows", {226, 135, 138, 0}}, -{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}}, -{(unsigned char*)"downharpoonright", {226, 135, 130, 0}}, -{(unsigned char*)"drbkarow", {226, 164, 144, 0}}, -{(unsigned char*)"drcorn", {226, 140, 159, 0}}, -{(unsigned char*)"drcrop", {226, 140, 140, 0}}, -{(unsigned char*)"dscr", {240, 157, 146, 185, 0}}, -{(unsigned char*)"dscy", {209, 149, 0}}, -{(unsigned char*)"dsol", {226, 167, 182, 0}}, -{(unsigned char*)"dstrok", {196, 145, 0}}, -{(unsigned char*)"dtdot", {226, 139, 177, 0}}, -{(unsigned char*)"dtri", {226, 150, 191, 0}}, -{(unsigned char*)"dtrif", {226, 150, 190, 0}}, -{(unsigned char*)"duarr", {226, 135, 181, 0}}, -{(unsigned char*)"duhar", {226, 165, 175, 0}}, -{(unsigned char*)"dwangle", {226, 166, 166, 0}}, -{(unsigned char*)"dzcy", {209, 159, 0}}, -{(unsigned char*)"dzigrarr", {226, 159, 191, 0}}, -{(unsigned char*)"eDDot", {226, 169, 183, 0}}, -{(unsigned char*)"eDot", {226, 137, 145, 0}}, -{(unsigned char*)"eacute", {195, 169, 0}}, -{(unsigned char*)"easter", {226, 169, 174, 0}}, -{(unsigned char*)"ecaron", {196, 155, 0}}, -{(unsigned char*)"ecir", {226, 137, 150, 0}}, -{(unsigned char*)"ecirc", {195, 170, 0}}, -{(unsigned char*)"ecolon", {226, 137, 149, 0}}, -{(unsigned char*)"ecy", {209, 141, 0}}, -{(unsigned char*)"edot", {196, 151, 0}}, -{(unsigned char*)"ee", {226, 133, 135, 0}}, -{(unsigned char*)"efDot", {226, 137, 146, 0}}, -{(unsigned char*)"efr", {240, 157, 148, 162, 0}}, -{(unsigned char*)"eg", {226, 170, 154, 0}}, -{(unsigned char*)"egrave", {195, 168, 0}}, -{(unsigned char*)"egs", {226, 170, 150, 0}}, -{(unsigned char*)"egsdot", {226, 170, 152, 0}}, -{(unsigned char*)"el", {226, 170, 153, 0}}, -{(unsigned char*)"elinters", {226, 143, 167, 0}}, -{(unsigned char*)"ell", {226, 132, 147, 0}}, -{(unsigned char*)"els", {226, 170, 149, 0}}, -{(unsigned char*)"elsdot", {226, 170, 151, 0}}, -{(unsigned char*)"emacr", {196, 147, 0}}, -{(unsigned char*)"empty", {226, 136, 133, 0}}, -{(unsigned char*)"emptyset", {226, 136, 133, 0}}, -{(unsigned char*)"emptyv", {226, 136, 133, 0}}, -{(unsigned char*)"emsp", {226, 128, 131, 0}}, -{(unsigned char*)"emsp13", {226, 128, 132, 0}}, -{(unsigned char*)"emsp14", {226, 128, 133, 0}}, -{(unsigned char*)"eng", {197, 139, 0}}, -{(unsigned char*)"ensp", {226, 128, 130, 0}}, -{(unsigned char*)"eogon", {196, 153, 0}}, -{(unsigned char*)"eopf", {240, 157, 149, 150, 0}}, -{(unsigned char*)"epar", {226, 139, 149, 0}}, -{(unsigned char*)"eparsl", {226, 167, 163, 0}}, -{(unsigned char*)"eplus", {226, 169, 177, 0}}, -{(unsigned char*)"epsi", {206, 181, 0}}, -{(unsigned char*)"epsilon", {206, 181, 0}}, -{(unsigned char*)"epsiv", {207, 181, 0}}, -{(unsigned char*)"eqcirc", {226, 137, 150, 0}}, -{(unsigned char*)"eqcolon", {226, 137, 149, 0}}, -{(unsigned char*)"eqsim", {226, 137, 130, 0}}, -{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}}, -{(unsigned char*)"eqslantless", {226, 170, 149, 0}}, -{(unsigned char*)"equals", {61, 0}}, -{(unsigned char*)"equest", {226, 137, 159, 0}}, -{(unsigned char*)"equiv", {226, 137, 161, 0}}, -{(unsigned char*)"equivDD", {226, 169, 184, 0}}, -{(unsigned char*)"eqvparsl", {226, 167, 165, 0}}, -{(unsigned char*)"erDot", {226, 137, 147, 0}}, -{(unsigned char*)"erarr", {226, 165, 177, 0}}, -{(unsigned char*)"escr", {226, 132, 175, 0}}, -{(unsigned char*)"esdot", {226, 137, 144, 0}}, -{(unsigned char*)"esim", {226, 137, 130, 0}}, -{(unsigned char*)"eta", {206, 183, 0}}, -{(unsigned char*)"eth", {195, 176, 0}}, -{(unsigned char*)"euml", {195, 171, 0}}, -{(unsigned char*)"euro", {226, 130, 172, 0}}, -{(unsigned char*)"excl", {33, 0}}, -{(unsigned char*)"exist", {226, 136, 131, 0}}, -{(unsigned char*)"expectation", {226, 132, 176, 0}}, -{(unsigned char*)"exponentiale", {226, 133, 135, 0}}, -{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}}, -{(unsigned char*)"fcy", {209, 132, 0}}, -{(unsigned char*)"female", {226, 153, 128, 0}}, -{(unsigned char*)"ffilig", {239, 172, 131, 0}}, -{(unsigned char*)"fflig", {239, 172, 128, 0}}, -{(unsigned char*)"ffllig", {239, 172, 132, 0}}, -{(unsigned char*)"ffr", {240, 157, 148, 163, 0}}, -{(unsigned char*)"filig", {239, 172, 129, 0}}, -{(unsigned char*)"fjlig", {102, 106, 0}}, -{(unsigned char*)"flat", {226, 153, 173, 0}}, -{(unsigned char*)"fllig", {239, 172, 130, 0}}, -{(unsigned char*)"fltns", {226, 150, 177, 0}}, -{(unsigned char*)"fnof", {198, 146, 0}}, -{(unsigned char*)"fopf", {240, 157, 149, 151, 0}}, -{(unsigned char*)"forall", {226, 136, 128, 0}}, -{(unsigned char*)"fork", {226, 139, 148, 0}}, -{(unsigned char*)"forkv", {226, 171, 153, 0}}, -{(unsigned char*)"fpartint", {226, 168, 141, 0}}, -{(unsigned char*)"frac12", {194, 189, 0}}, -{(unsigned char*)"frac13", {226, 133, 147, 0}}, -{(unsigned char*)"frac14", {194, 188, 0}}, -{(unsigned char*)"frac15", {226, 133, 149, 0}}, -{(unsigned char*)"frac16", {226, 133, 153, 0}}, -{(unsigned char*)"frac18", {226, 133, 155, 0}}, -{(unsigned char*)"frac23", {226, 133, 148, 0}}, -{(unsigned char*)"frac25", {226, 133, 150, 0}}, -{(unsigned char*)"frac34", {194, 190, 0}}, -{(unsigned char*)"frac35", {226, 133, 151, 0}}, -{(unsigned char*)"frac38", {226, 133, 156, 0}}, -{(unsigned char*)"frac45", {226, 133, 152, 0}}, -{(unsigned char*)"frac56", {226, 133, 154, 0}}, -{(unsigned char*)"frac58", {226, 133, 157, 0}}, -{(unsigned char*)"frac78", {226, 133, 158, 0}}, -{(unsigned char*)"frasl", {226, 129, 132, 0}}, -{(unsigned char*)"frown", {226, 140, 162, 0}}, -{(unsigned char*)"fscr", {240, 157, 146, 187, 0}}, -{(unsigned char*)"gE", {226, 137, 167, 0}}, -{(unsigned char*)"gEl", {226, 170, 140, 0}}, -{(unsigned char*)"gacute", {199, 181, 0}}, -{(unsigned char*)"gamma", {206, 179, 0}}, -{(unsigned char*)"gammad", {207, 157, 0}}, -{(unsigned char*)"gap", {226, 170, 134, 0}}, -{(unsigned char*)"gbreve", {196, 159, 0}}, -{(unsigned char*)"gcirc", {196, 157, 0}}, -{(unsigned char*)"gcy", {208, 179, 0}}, -{(unsigned char*)"gdot", {196, 161, 0}}, -{(unsigned char*)"ge", {226, 137, 165, 0}}, -{(unsigned char*)"gel", {226, 139, 155, 0}}, -{(unsigned char*)"geq", {226, 137, 165, 0}}, -{(unsigned char*)"geqq", {226, 137, 167, 0}}, -{(unsigned char*)"geqslant", {226, 169, 190, 0}}, -{(unsigned char*)"ges", {226, 169, 190, 0}}, -{(unsigned char*)"gescc", {226, 170, 169, 0}}, -{(unsigned char*)"gesdot", {226, 170, 128, 0}}, -{(unsigned char*)"gesdoto", {226, 170, 130, 0}}, -{(unsigned char*)"gesdotol", {226, 170, 132, 0}}, -{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}}, -{(unsigned char*)"gesles", {226, 170, 148, 0}}, -{(unsigned char*)"gfr", {240, 157, 148, 164, 0}}, -{(unsigned char*)"gg", {226, 137, 171, 0}}, -{(unsigned char*)"ggg", {226, 139, 153, 0}}, -{(unsigned char*)"gimel", {226, 132, 183, 0}}, -{(unsigned char*)"gjcy", {209, 147, 0}}, -{(unsigned char*)"gl", {226, 137, 183, 0}}, -{(unsigned char*)"glE", {226, 170, 146, 0}}, -{(unsigned char*)"gla", {226, 170, 165, 0}}, -{(unsigned char*)"glj", {226, 170, 164, 0}}, -{(unsigned char*)"gnE", {226, 137, 169, 0}}, -{(unsigned char*)"gnap", {226, 170, 138, 0}}, -{(unsigned char*)"gnapprox", {226, 170, 138, 0}}, -{(unsigned char*)"gne", {226, 170, 136, 0}}, -{(unsigned char*)"gneq", {226, 170, 136, 0}}, -{(unsigned char*)"gneqq", {226, 137, 169, 0}}, -{(unsigned char*)"gnsim", {226, 139, 167, 0}}, -{(unsigned char*)"gopf", {240, 157, 149, 152, 0}}, -{(unsigned char*)"grave", {96, 0}}, -{(unsigned char*)"gscr", {226, 132, 138, 0}}, -{(unsigned char*)"gsim", {226, 137, 179, 0}}, -{(unsigned char*)"gsime", {226, 170, 142, 0}}, -{(unsigned char*)"gsiml", {226, 170, 144, 0}}, -{(unsigned char*)"gt", {62, 0}}, -{(unsigned char*)"gtcc", {226, 170, 167, 0}}, -{(unsigned char*)"gtcir", {226, 169, 186, 0}}, -{(unsigned char*)"gtdot", {226, 139, 151, 0}}, -{(unsigned char*)"gtlPar", {226, 166, 149, 0}}, -{(unsigned char*)"gtquest", {226, 169, 188, 0}}, -{(unsigned char*)"gtrapprox", {226, 170, 134, 0}}, -{(unsigned char*)"gtrarr", {226, 165, 184, 0}}, -{(unsigned char*)"gtrdot", {226, 139, 151, 0}}, -{(unsigned char*)"gtreqless", {226, 139, 155, 0}}, -{(unsigned char*)"gtreqqless", {226, 170, 140, 0}}, -{(unsigned char*)"gtrless", {226, 137, 183, 0}}, -{(unsigned char*)"gtrsim", {226, 137, 179, 0}}, -{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}}, -{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}}, -{(unsigned char*)"hArr", {226, 135, 148, 0}}, -{(unsigned char*)"hairsp", {226, 128, 138, 0}}, -{(unsigned char*)"half", {194, 189, 0}}, -{(unsigned char*)"hamilt", {226, 132, 139, 0}}, -{(unsigned char*)"hardcy", {209, 138, 0}}, -{(unsigned char*)"harr", {226, 134, 148, 0}}, -{(unsigned char*)"harrcir", {226, 165, 136, 0}}, -{(unsigned char*)"harrw", {226, 134, 173, 0}}, -{(unsigned char*)"hbar", {226, 132, 143, 0}}, -{(unsigned char*)"hcirc", {196, 165, 0}}, -{(unsigned char*)"hearts", {226, 153, 165, 0}}, -{(unsigned char*)"heartsuit", {226, 153, 165, 0}}, -{(unsigned char*)"hellip", {226, 128, 166, 0}}, -{(unsigned char*)"hercon", {226, 138, 185, 0}}, -{(unsigned char*)"hfr", {240, 157, 148, 165, 0}}, -{(unsigned char*)"hksearow", {226, 164, 165, 0}}, -{(unsigned char*)"hkswarow", {226, 164, 166, 0}}, -{(unsigned char*)"hoarr", {226, 135, 191, 0}}, -{(unsigned char*)"homtht", {226, 136, 187, 0}}, -{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}}, -{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}}, -{(unsigned char*)"hopf", {240, 157, 149, 153, 0}}, -{(unsigned char*)"horbar", {226, 128, 149, 0}}, -{(unsigned char*)"hscr", {240, 157, 146, 189, 0}}, -{(unsigned char*)"hslash", {226, 132, 143, 0}}, -{(unsigned char*)"hstrok", {196, 167, 0}}, -{(unsigned char*)"hybull", {226, 129, 131, 0}}, -{(unsigned char*)"hyphen", {226, 128, 144, 0}}, -{(unsigned char*)"iacute", {195, 173, 0}}, -{(unsigned char*)"ic", {226, 129, 163, 0}}, -{(unsigned char*)"icirc", {195, 174, 0}}, -{(unsigned char*)"icy", {208, 184, 0}}, -{(unsigned char*)"iecy", {208, 181, 0}}, -{(unsigned char*)"iexcl", {194, 161, 0}}, -{(unsigned char*)"iff", {226, 135, 148, 0}}, -{(unsigned char*)"ifr", {240, 157, 148, 166, 0}}, -{(unsigned char*)"igrave", {195, 172, 0}}, -{(unsigned char*)"ii", {226, 133, 136, 0}}, -{(unsigned char*)"iiiint", {226, 168, 140, 0}}, -{(unsigned char*)"iiint", {226, 136, 173, 0}}, -{(unsigned char*)"iinfin", {226, 167, 156, 0}}, -{(unsigned char*)"iiota", {226, 132, 169, 0}}, -{(unsigned char*)"ijlig", {196, 179, 0}}, -{(unsigned char*)"imacr", {196, 171, 0}}, -{(unsigned char*)"image", {226, 132, 145, 0}}, -{(unsigned char*)"imagline", {226, 132, 144, 0}}, -{(unsigned char*)"imagpart", {226, 132, 145, 0}}, -{(unsigned char*)"imath", {196, 177, 0}}, -{(unsigned char*)"imof", {226, 138, 183, 0}}, -{(unsigned char*)"imped", {198, 181, 0}}, -{(unsigned char*)"in", {226, 136, 136, 0}}, -{(unsigned char*)"incare", {226, 132, 133, 0}}, -{(unsigned char*)"infin", {226, 136, 158, 0}}, -{(unsigned char*)"infintie", {226, 167, 157, 0}}, -{(unsigned char*)"inodot", {196, 177, 0}}, -{(unsigned char*)"int", {226, 136, 171, 0}}, -{(unsigned char*)"intcal", {226, 138, 186, 0}}, -{(unsigned char*)"integers", {226, 132, 164, 0}}, -{(unsigned char*)"intercal", {226, 138, 186, 0}}, -{(unsigned char*)"intlarhk", {226, 168, 151, 0}}, -{(unsigned char*)"intprod", {226, 168, 188, 0}}, -{(unsigned char*)"iocy", {209, 145, 0}}, -{(unsigned char*)"iogon", {196, 175, 0}}, -{(unsigned char*)"iopf", {240, 157, 149, 154, 0}}, -{(unsigned char*)"iota", {206, 185, 0}}, -{(unsigned char*)"iprod", {226, 168, 188, 0}}, -{(unsigned char*)"iquest", {194, 191, 0}}, -{(unsigned char*)"iscr", {240, 157, 146, 190, 0}}, -{(unsigned char*)"isin", {226, 136, 136, 0}}, -{(unsigned char*)"isinE", {226, 139, 185, 0}}, -{(unsigned char*)"isindot", {226, 139, 181, 0}}, -{(unsigned char*)"isins", {226, 139, 180, 0}}, -{(unsigned char*)"isinsv", {226, 139, 179, 0}}, -{(unsigned char*)"isinv", {226, 136, 136, 0}}, -{(unsigned char*)"it", {226, 129, 162, 0}}, -{(unsigned char*)"itilde", {196, 169, 0}}, -{(unsigned char*)"iukcy", {209, 150, 0}}, -{(unsigned char*)"iuml", {195, 175, 0}}, -{(unsigned char*)"jcirc", {196, 181, 0}}, -{(unsigned char*)"jcy", {208, 185, 0}}, -{(unsigned char*)"jfr", {240, 157, 148, 167, 0}}, -{(unsigned char*)"jmath", {200, 183, 0}}, -{(unsigned char*)"jopf", {240, 157, 149, 155, 0}}, -{(unsigned char*)"jscr", {240, 157, 146, 191, 0}}, -{(unsigned char*)"jsercy", {209, 152, 0}}, -{(unsigned char*)"jukcy", {209, 148, 0}}, -{(unsigned char*)"kappa", {206, 186, 0}}, -{(unsigned char*)"kappav", {207, 176, 0}}, -{(unsigned char*)"kcedil", {196, 183, 0}}, -{(unsigned char*)"kcy", {208, 186, 0}}, -{(unsigned char*)"kfr", {240, 157, 148, 168, 0}}, -{(unsigned char*)"kgreen", {196, 184, 0}}, -{(unsigned char*)"khcy", {209, 133, 0}}, -{(unsigned char*)"kjcy", {209, 156, 0}}, -{(unsigned char*)"kopf", {240, 157, 149, 156, 0}}, -{(unsigned char*)"kscr", {240, 157, 147, 128, 0}}, -{(unsigned char*)"lAarr", {226, 135, 154, 0}}, -{(unsigned char*)"lArr", {226, 135, 144, 0}}, -{(unsigned char*)"lAtail", {226, 164, 155, 0}}, -{(unsigned char*)"lBarr", {226, 164, 142, 0}}, -{(unsigned char*)"lE", {226, 137, 166, 0}}, -{(unsigned char*)"lEg", {226, 170, 139, 0}}, -{(unsigned char*)"lHar", {226, 165, 162, 0}}, -{(unsigned char*)"lacute", {196, 186, 0}}, -{(unsigned char*)"laemptyv", {226, 166, 180, 0}}, -{(unsigned char*)"lagran", {226, 132, 146, 0}}, -{(unsigned char*)"lambda", {206, 187, 0}}, -{(unsigned char*)"lang", {226, 159, 168, 0}}, -{(unsigned char*)"langd", {226, 166, 145, 0}}, -{(unsigned char*)"langle", {226, 159, 168, 0}}, -{(unsigned char*)"lap", {226, 170, 133, 0}}, -{(unsigned char*)"laquo", {194, 171, 0}}, -{(unsigned char*)"larr", {226, 134, 144, 0}}, -{(unsigned char*)"larrb", {226, 135, 164, 0}}, -{(unsigned char*)"larrbfs", {226, 164, 159, 0}}, -{(unsigned char*)"larrfs", {226, 164, 157, 0}}, -{(unsigned char*)"larrhk", {226, 134, 169, 0}}, -{(unsigned char*)"larrlp", {226, 134, 171, 0}}, -{(unsigned char*)"larrpl", {226, 164, 185, 0}}, -{(unsigned char*)"larrsim", {226, 165, 179, 0}}, -{(unsigned char*)"larrtl", {226, 134, 162, 0}}, -{(unsigned char*)"lat", {226, 170, 171, 0}}, -{(unsigned char*)"latail", {226, 164, 153, 0}}, -{(unsigned char*)"late", {226, 170, 173, 0}}, -{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}}, -{(unsigned char*)"lbarr", {226, 164, 140, 0}}, -{(unsigned char*)"lbbrk", {226, 157, 178, 0}}, -{(unsigned char*)"lbrace", {123, 0}}, -{(unsigned char*)"lbrack", {91, 0}}, -{(unsigned char*)"lbrke", {226, 166, 139, 0}}, -{(unsigned char*)"lbrksld", {226, 166, 143, 0}}, -{(unsigned char*)"lbrkslu", {226, 166, 141, 0}}, -{(unsigned char*)"lcaron", {196, 190, 0}}, -{(unsigned char*)"lcedil", {196, 188, 0}}, -{(unsigned char*)"lceil", {226, 140, 136, 0}}, -{(unsigned char*)"lcub", {123, 0}}, -{(unsigned char*)"lcy", {208, 187, 0}}, -{(unsigned char*)"ldca", {226, 164, 182, 0}}, -{(unsigned char*)"ldquo", {226, 128, 156, 0}}, -{(unsigned char*)"ldquor", {226, 128, 158, 0}}, -{(unsigned char*)"ldrdhar", {226, 165, 167, 0}}, -{(unsigned char*)"ldrushar", {226, 165, 139, 0}}, -{(unsigned char*)"ldsh", {226, 134, 178, 0}}, -{(unsigned char*)"le", {226, 137, 164, 0}}, -{(unsigned char*)"leftarrow", {226, 134, 144, 0}}, -{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}}, -{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}}, -{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}}, -{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}}, -{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}}, -{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}}, -{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}}, -{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}}, -{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}}, -{(unsigned char*)"leg", {226, 139, 154, 0}}, -{(unsigned char*)"leq", {226, 137, 164, 0}}, -{(unsigned char*)"leqq", {226, 137, 166, 0}}, -{(unsigned char*)"leqslant", {226, 169, 189, 0}}, -{(unsigned char*)"les", {226, 169, 189, 0}}, -{(unsigned char*)"lescc", {226, 170, 168, 0}}, -{(unsigned char*)"lesdot", {226, 169, 191, 0}}, -{(unsigned char*)"lesdoto", {226, 170, 129, 0}}, -{(unsigned char*)"lesdotor", {226, 170, 131, 0}}, -{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}}, -{(unsigned char*)"lesges", {226, 170, 147, 0}}, -{(unsigned char*)"lessapprox", {226, 170, 133, 0}}, -{(unsigned char*)"lessdot", {226, 139, 150, 0}}, -{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}}, -{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}}, -{(unsigned char*)"lessgtr", {226, 137, 182, 0}}, -{(unsigned char*)"lesssim", {226, 137, 178, 0}}, -{(unsigned char*)"lfisht", {226, 165, 188, 0}}, -{(unsigned char*)"lfloor", {226, 140, 138, 0}}, -{(unsigned char*)"lfr", {240, 157, 148, 169, 0}}, -{(unsigned char*)"lg", {226, 137, 182, 0}}, -{(unsigned char*)"lgE", {226, 170, 145, 0}}, -{(unsigned char*)"lhard", {226, 134, 189, 0}}, -{(unsigned char*)"lharu", {226, 134, 188, 0}}, -{(unsigned char*)"lharul", {226, 165, 170, 0}}, -{(unsigned char*)"lhblk", {226, 150, 132, 0}}, -{(unsigned char*)"ljcy", {209, 153, 0}}, -{(unsigned char*)"ll", {226, 137, 170, 0}}, -{(unsigned char*)"llarr", {226, 135, 135, 0}}, -{(unsigned char*)"llcorner", {226, 140, 158, 0}}, -{(unsigned char*)"llhard", {226, 165, 171, 0}}, -{(unsigned char*)"lltri", {226, 151, 186, 0}}, -{(unsigned char*)"lmidot", {197, 128, 0}}, -{(unsigned char*)"lmoust", {226, 142, 176, 0}}, -{(unsigned char*)"lmoustache", {226, 142, 176, 0}}, -{(unsigned char*)"lnE", {226, 137, 168, 0}}, -{(unsigned char*)"lnap", {226, 170, 137, 0}}, -{(unsigned char*)"lnapprox", {226, 170, 137, 0}}, -{(unsigned char*)"lne", {226, 170, 135, 0}}, -{(unsigned char*)"lneq", {226, 170, 135, 0}}, -{(unsigned char*)"lneqq", {226, 137, 168, 0}}, -{(unsigned char*)"lnsim", {226, 139, 166, 0}}, -{(unsigned char*)"loang", {226, 159, 172, 0}}, -{(unsigned char*)"loarr", {226, 135, 189, 0}}, -{(unsigned char*)"lobrk", {226, 159, 166, 0}}, -{(unsigned char*)"longleftarrow", {226, 159, 181, 0}}, -{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}}, -{(unsigned char*)"longmapsto", {226, 159, 188, 0}}, -{(unsigned char*)"longrightarrow", {226, 159, 182, 0}}, -{(unsigned char*)"looparrowleft", {226, 134, 171, 0}}, -{(unsigned char*)"looparrowright", {226, 134, 172, 0}}, -{(unsigned char*)"lopar", {226, 166, 133, 0}}, -{(unsigned char*)"lopf", {240, 157, 149, 157, 0}}, -{(unsigned char*)"loplus", {226, 168, 173, 0}}, -{(unsigned char*)"lotimes", {226, 168, 180, 0}}, -{(unsigned char*)"lowast", {226, 136, 151, 0}}, -{(unsigned char*)"lowbar", {95, 0}}, -{(unsigned char*)"loz", {226, 151, 138, 0}}, -{(unsigned char*)"lozenge", {226, 151, 138, 0}}, -{(unsigned char*)"lozf", {226, 167, 171, 0}}, -{(unsigned char*)"lpar", {40, 0}}, -{(unsigned char*)"lparlt", {226, 166, 147, 0}}, -{(unsigned char*)"lrarr", {226, 135, 134, 0}}, -{(unsigned char*)"lrcorner", {226, 140, 159, 0}}, -{(unsigned char*)"lrhar", {226, 135, 139, 0}}, -{(unsigned char*)"lrhard", {226, 165, 173, 0}}, -{(unsigned char*)"lrm", {226, 128, 142, 0}}, -{(unsigned char*)"lrtri", {226, 138, 191, 0}}, -{(unsigned char*)"lsaquo", {226, 128, 185, 0}}, -{(unsigned char*)"lscr", {240, 157, 147, 129, 0}}, -{(unsigned char*)"lsh", {226, 134, 176, 0}}, -{(unsigned char*)"lsim", {226, 137, 178, 0}}, -{(unsigned char*)"lsime", {226, 170, 141, 0}}, -{(unsigned char*)"lsimg", {226, 170, 143, 0}}, -{(unsigned char*)"lsqb", {91, 0}}, -{(unsigned char*)"lsquo", {226, 128, 152, 0}}, -{(unsigned char*)"lsquor", {226, 128, 154, 0}}, -{(unsigned char*)"lstrok", {197, 130, 0}}, -{(unsigned char*)"lt", {60, 0}}, -{(unsigned char*)"ltcc", {226, 170, 166, 0}}, -{(unsigned char*)"ltcir", {226, 169, 185, 0}}, -{(unsigned char*)"ltdot", {226, 139, 150, 0}}, -{(unsigned char*)"lthree", {226, 139, 139, 0}}, -{(unsigned char*)"ltimes", {226, 139, 137, 0}}, -{(unsigned char*)"ltlarr", {226, 165, 182, 0}}, -{(unsigned char*)"ltquest", {226, 169, 187, 0}}, -{(unsigned char*)"ltrPar", {226, 166, 150, 0}}, -{(unsigned char*)"ltri", {226, 151, 131, 0}}, -{(unsigned char*)"ltrie", {226, 138, 180, 0}}, -{(unsigned char*)"ltrif", {226, 151, 130, 0}}, -{(unsigned char*)"lurdshar", {226, 165, 138, 0}}, -{(unsigned char*)"luruhar", {226, 165, 166, 0}}, -{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}}, -{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}}, -{(unsigned char*)"mDDot", {226, 136, 186, 0}}, -{(unsigned char*)"macr", {194, 175, 0}}, -{(unsigned char*)"male", {226, 153, 130, 0}}, -{(unsigned char*)"malt", {226, 156, 160, 0}}, -{(unsigned char*)"maltese", {226, 156, 160, 0}}, -{(unsigned char*)"map", {226, 134, 166, 0}}, -{(unsigned char*)"mapsto", {226, 134, 166, 0}}, -{(unsigned char*)"mapstodown", {226, 134, 167, 0}}, -{(unsigned char*)"mapstoleft", {226, 134, 164, 0}}, -{(unsigned char*)"mapstoup", {226, 134, 165, 0}}, -{(unsigned char*)"marker", {226, 150, 174, 0}}, -{(unsigned char*)"mcomma", {226, 168, 169, 0}}, -{(unsigned char*)"mcy", {208, 188, 0}}, -{(unsigned char*)"mdash", {226, 128, 148, 0}}, -{(unsigned char*)"measuredangle", {226, 136, 161, 0}}, -{(unsigned char*)"mfr", {240, 157, 148, 170, 0}}, -{(unsigned char*)"mho", {226, 132, 167, 0}}, -{(unsigned char*)"micro", {194, 181, 0}}, -{(unsigned char*)"mid", {226, 136, 163, 0}}, -{(unsigned char*)"midast", {42, 0}}, -{(unsigned char*)"midcir", {226, 171, 176, 0}}, -{(unsigned char*)"middot", {194, 183, 0}}, -{(unsigned char*)"minus", {226, 136, 146, 0}}, -{(unsigned char*)"minusb", {226, 138, 159, 0}}, -{(unsigned char*)"minusd", {226, 136, 184, 0}}, -{(unsigned char*)"minusdu", {226, 168, 170, 0}}, -{(unsigned char*)"mlcp", {226, 171, 155, 0}}, -{(unsigned char*)"mldr", {226, 128, 166, 0}}, -{(unsigned char*)"mnplus", {226, 136, 147, 0}}, -{(unsigned char*)"models", {226, 138, 167, 0}}, -{(unsigned char*)"mopf", {240, 157, 149, 158, 0}}, -{(unsigned char*)"mp", {226, 136, 147, 0}}, -{(unsigned char*)"mscr", {240, 157, 147, 130, 0}}, -{(unsigned char*)"mstpos", {226, 136, 190, 0}}, -{(unsigned char*)"mu", {206, 188, 0}}, -{(unsigned char*)"multimap", {226, 138, 184, 0}}, -{(unsigned char*)"mumap", {226, 138, 184, 0}}, -{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}}, -{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}}, -{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}}, -{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}}, -{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}}, -{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}}, -{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}}, -{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}}, -{(unsigned char*)"nRightarrow", {226, 135, 143, 0}}, -{(unsigned char*)"nVDash", {226, 138, 175, 0}}, -{(unsigned char*)"nVdash", {226, 138, 174, 0}}, -{(unsigned char*)"nabla", {226, 136, 135, 0}}, -{(unsigned char*)"nacute", {197, 132, 0}}, -{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}}, -{(unsigned char*)"nap", {226, 137, 137, 0}}, -{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}}, -{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}}, -{(unsigned char*)"napos", {197, 137, 0}}, -{(unsigned char*)"napprox", {226, 137, 137, 0}}, -{(unsigned char*)"natur", {226, 153, 174, 0}}, -{(unsigned char*)"natural", {226, 153, 174, 0}}, -{(unsigned char*)"naturals", {226, 132, 149, 0}}, -{(unsigned char*)"nbsp", {194, 160, 0}}, -{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}}, -{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}}, -{(unsigned char*)"ncap", {226, 169, 131, 0}}, -{(unsigned char*)"ncaron", {197, 136, 0}}, -{(unsigned char*)"ncedil", {197, 134, 0}}, -{(unsigned char*)"ncong", {226, 137, 135, 0}}, -{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}}, -{(unsigned char*)"ncup", {226, 169, 130, 0}}, -{(unsigned char*)"ncy", {208, 189, 0}}, -{(unsigned char*)"ndash", {226, 128, 147, 0}}, -{(unsigned char*)"ne", {226, 137, 160, 0}}, -{(unsigned char*)"neArr", {226, 135, 151, 0}}, -{(unsigned char*)"nearhk", {226, 164, 164, 0}}, -{(unsigned char*)"nearr", {226, 134, 151, 0}}, -{(unsigned char*)"nearrow", {226, 134, 151, 0}}, -{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}}, -{(unsigned char*)"nequiv", {226, 137, 162, 0}}, -{(unsigned char*)"nesear", {226, 164, 168, 0}}, -{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}}, -{(unsigned char*)"nexist", {226, 136, 132, 0}}, -{(unsigned char*)"nexists", {226, 136, 132, 0}}, -{(unsigned char*)"nfr", {240, 157, 148, 171, 0}}, -{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}}, -{(unsigned char*)"nge", {226, 137, 177, 0}}, -{(unsigned char*)"ngeq", {226, 137, 177, 0}}, -{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}}, -{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}}, -{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}}, -{(unsigned char*)"ngsim", {226, 137, 181, 0}}, -{(unsigned char*)"ngt", {226, 137, 175, 0}}, -{(unsigned char*)"ngtr", {226, 137, 175, 0}}, -{(unsigned char*)"nhArr", {226, 135, 142, 0}}, -{(unsigned char*)"nharr", {226, 134, 174, 0}}, -{(unsigned char*)"nhpar", {226, 171, 178, 0}}, -{(unsigned char*)"ni", {226, 136, 139, 0}}, -{(unsigned char*)"nis", {226, 139, 188, 0}}, -{(unsigned char*)"nisd", {226, 139, 186, 0}}, -{(unsigned char*)"niv", {226, 136, 139, 0}}, -{(unsigned char*)"njcy", {209, 154, 0}}, -{(unsigned char*)"nlArr", {226, 135, 141, 0}}, -{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}}, -{(unsigned char*)"nlarr", {226, 134, 154, 0}}, -{(unsigned char*)"nldr", {226, 128, 165, 0}}, -{(unsigned char*)"nle", {226, 137, 176, 0}}, -{(unsigned char*)"nleftarrow", {226, 134, 154, 0}}, -{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}}, -{(unsigned char*)"nleq", {226, 137, 176, 0}}, -{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}}, -{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}}, -{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}}, -{(unsigned char*)"nless", {226, 137, 174, 0}}, -{(unsigned char*)"nlsim", {226, 137, 180, 0}}, -{(unsigned char*)"nlt", {226, 137, 174, 0}}, -{(unsigned char*)"nltri", {226, 139, 170, 0}}, -{(unsigned char*)"nltrie", {226, 139, 172, 0}}, -{(unsigned char*)"nmid", {226, 136, 164, 0}}, -{(unsigned char*)"nopf", {240, 157, 149, 159, 0}}, -{(unsigned char*)"not", {194, 172, 0}}, -{(unsigned char*)"notin", {226, 136, 137, 0}}, -{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}}, -{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}}, -{(unsigned char*)"notinva", {226, 136, 137, 0}}, -{(unsigned char*)"notinvb", {226, 139, 183, 0}}, -{(unsigned char*)"notinvc", {226, 139, 182, 0}}, -{(unsigned char*)"notni", {226, 136, 140, 0}}, -{(unsigned char*)"notniva", {226, 136, 140, 0}}, -{(unsigned char*)"notnivb", {226, 139, 190, 0}}, -{(unsigned char*)"notnivc", {226, 139, 189, 0}}, -{(unsigned char*)"npar", {226, 136, 166, 0}}, -{(unsigned char*)"nparallel", {226, 136, 166, 0}}, -{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}}, -{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}}, -{(unsigned char*)"npolint", {226, 168, 148, 0}}, -{(unsigned char*)"npr", {226, 138, 128, 0}}, -{(unsigned char*)"nprcue", {226, 139, 160, 0}}, -{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}}, -{(unsigned char*)"nprec", {226, 138, 128, 0}}, -{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}}, -{(unsigned char*)"nrArr", {226, 135, 143, 0}}, -{(unsigned char*)"nrarr", {226, 134, 155, 0}}, -{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}}, -{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}}, -{(unsigned char*)"nrightarrow", {226, 134, 155, 0}}, -{(unsigned char*)"nrtri", {226, 139, 171, 0}}, -{(unsigned char*)"nrtrie", {226, 139, 173, 0}}, -{(unsigned char*)"nsc", {226, 138, 129, 0}}, -{(unsigned char*)"nsccue", {226, 139, 161, 0}}, -{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}}, -{(unsigned char*)"nscr", {240, 157, 147, 131, 0}}, -{(unsigned char*)"nshortmid", {226, 136, 164, 0}}, -{(unsigned char*)"nshortparallel", {226, 136, 166, 0}}, -{(unsigned char*)"nsim", {226, 137, 129, 0}}, -{(unsigned char*)"nsime", {226, 137, 132, 0}}, -{(unsigned char*)"nsimeq", {226, 137, 132, 0}}, -{(unsigned char*)"nsmid", {226, 136, 164, 0}}, -{(unsigned char*)"nspar", {226, 136, 166, 0}}, -{(unsigned char*)"nsqsube", {226, 139, 162, 0}}, -{(unsigned char*)"nsqsupe", {226, 139, 163, 0}}, -{(unsigned char*)"nsub", {226, 138, 132, 0}}, -{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}}, -{(unsigned char*)"nsube", {226, 138, 136, 0}}, -{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}}, -{(unsigned char*)"nsubseteq", {226, 138, 136, 0}}, -{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}}, -{(unsigned char*)"nsucc", {226, 138, 129, 0}}, -{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}}, -{(unsigned char*)"nsup", {226, 138, 133, 0}}, -{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}}, -{(unsigned char*)"nsupe", {226, 138, 137, 0}}, -{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}}, -{(unsigned char*)"nsupseteq", {226, 138, 137, 0}}, -{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}}, -{(unsigned char*)"ntgl", {226, 137, 185, 0}}, -{(unsigned char*)"ntilde", {195, 177, 0}}, -{(unsigned char*)"ntlg", {226, 137, 184, 0}}, -{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}}, -{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}}, -{(unsigned char*)"ntriangleright", {226, 139, 171, 0}}, -{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}}, -{(unsigned char*)"nu", {206, 189, 0}}, -{(unsigned char*)"num", {35, 0}}, -{(unsigned char*)"numero", {226, 132, 150, 0}}, -{(unsigned char*)"numsp", {226, 128, 135, 0}}, -{(unsigned char*)"nvDash", {226, 138, 173, 0}}, -{(unsigned char*)"nvHarr", {226, 164, 132, 0}}, -{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}}, -{(unsigned char*)"nvdash", {226, 138, 172, 0}}, -{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}}, -{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}}, -{(unsigned char*)"nvinfin", {226, 167, 158, 0}}, -{(unsigned char*)"nvlArr", {226, 164, 130, 0}}, -{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}}, -{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}}, -{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}}, -{(unsigned char*)"nvrArr", {226, 164, 131, 0}}, -{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}}, -{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}}, -{(unsigned char*)"nwArr", {226, 135, 150, 0}}, -{(unsigned char*)"nwarhk", {226, 164, 163, 0}}, -{(unsigned char*)"nwarr", {226, 134, 150, 0}}, -{(unsigned char*)"nwarrow", {226, 134, 150, 0}}, -{(unsigned char*)"nwnear", {226, 164, 167, 0}}, -{(unsigned char*)"oS", {226, 147, 136, 0}}, -{(unsigned char*)"oacute", {195, 179, 0}}, -{(unsigned char*)"oast", {226, 138, 155, 0}}, -{(unsigned char*)"ocir", {226, 138, 154, 0}}, -{(unsigned char*)"ocirc", {195, 180, 0}}, -{(unsigned char*)"ocy", {208, 190, 0}}, -{(unsigned char*)"odash", {226, 138, 157, 0}}, -{(unsigned char*)"odblac", {197, 145, 0}}, -{(unsigned char*)"odiv", {226, 168, 184, 0}}, -{(unsigned char*)"odot", {226, 138, 153, 0}}, -{(unsigned char*)"odsold", {226, 166, 188, 0}}, -{(unsigned char*)"oelig", {197, 147, 0}}, -{(unsigned char*)"ofcir", {226, 166, 191, 0}}, -{(unsigned char*)"ofr", {240, 157, 148, 172, 0}}, -{(unsigned char*)"ogon", {203, 155, 0}}, -{(unsigned char*)"ograve", {195, 178, 0}}, -{(unsigned char*)"ogt", {226, 167, 129, 0}}, -{(unsigned char*)"ohbar", {226, 166, 181, 0}}, -{(unsigned char*)"ohm", {206, 169, 0}}, -{(unsigned char*)"oint", {226, 136, 174, 0}}, -{(unsigned char*)"olarr", {226, 134, 186, 0}}, -{(unsigned char*)"olcir", {226, 166, 190, 0}}, -{(unsigned char*)"olcross", {226, 166, 187, 0}}, -{(unsigned char*)"oline", {226, 128, 190, 0}}, -{(unsigned char*)"olt", {226, 167, 128, 0}}, -{(unsigned char*)"omacr", {197, 141, 0}}, -{(unsigned char*)"omega", {207, 137, 0}}, -{(unsigned char*)"omicron", {206, 191, 0}}, -{(unsigned char*)"omid", {226, 166, 182, 0}}, -{(unsigned char*)"ominus", {226, 138, 150, 0}}, -{(unsigned char*)"oopf", {240, 157, 149, 160, 0}}, -{(unsigned char*)"opar", {226, 166, 183, 0}}, -{(unsigned char*)"operp", {226, 166, 185, 0}}, -{(unsigned char*)"oplus", {226, 138, 149, 0}}, -{(unsigned char*)"or", {226, 136, 168, 0}}, -{(unsigned char*)"orarr", {226, 134, 187, 0}}, -{(unsigned char*)"ord", {226, 169, 157, 0}}, -{(unsigned char*)"order", {226, 132, 180, 0}}, -{(unsigned char*)"orderof", {226, 132, 180, 0}}, -{(unsigned char*)"ordf", {194, 170, 0}}, -{(unsigned char*)"ordm", {194, 186, 0}}, -{(unsigned char*)"origof", {226, 138, 182, 0}}, -{(unsigned char*)"oror", {226, 169, 150, 0}}, -{(unsigned char*)"orslope", {226, 169, 151, 0}}, -{(unsigned char*)"orv", {226, 169, 155, 0}}, -{(unsigned char*)"oscr", {226, 132, 180, 0}}, -{(unsigned char*)"oslash", {195, 184, 0}}, -{(unsigned char*)"osol", {226, 138, 152, 0}}, -{(unsigned char*)"otilde", {195, 181, 0}}, -{(unsigned char*)"otimes", {226, 138, 151, 0}}, -{(unsigned char*)"otimesas", {226, 168, 182, 0}}, -{(unsigned char*)"ouml", {195, 182, 0}}, -{(unsigned char*)"ovbar", {226, 140, 189, 0}}, -{(unsigned char*)"par", {226, 136, 165, 0}}, -{(unsigned char*)"para", {194, 182, 0}}, -{(unsigned char*)"parallel", {226, 136, 165, 0}}, -{(unsigned char*)"parsim", {226, 171, 179, 0}}, -{(unsigned char*)"parsl", {226, 171, 189, 0}}, -{(unsigned char*)"part", {226, 136, 130, 0}}, -{(unsigned char*)"pcy", {208, 191, 0}}, -{(unsigned char*)"percnt", {37, 0}}, -{(unsigned char*)"period", {46, 0}}, -{(unsigned char*)"permil", {226, 128, 176, 0}}, -{(unsigned char*)"perp", {226, 138, 165, 0}}, -{(unsigned char*)"pertenk", {226, 128, 177, 0}}, -{(unsigned char*)"pfr", {240, 157, 148, 173, 0}}, -{(unsigned char*)"phi", {207, 134, 0}}, -{(unsigned char*)"phiv", {207, 149, 0}}, -{(unsigned char*)"phmmat", {226, 132, 179, 0}}, -{(unsigned char*)"phone", {226, 152, 142, 0}}, -{(unsigned char*)"pi", {207, 128, 0}}, -{(unsigned char*)"pitchfork", {226, 139, 148, 0}}, -{(unsigned char*)"piv", {207, 150, 0}}, -{(unsigned char*)"planck", {226, 132, 143, 0}}, -{(unsigned char*)"planckh", {226, 132, 142, 0}}, -{(unsigned char*)"plankv", {226, 132, 143, 0}}, -{(unsigned char*)"plus", {43, 0}}, -{(unsigned char*)"plusacir", {226, 168, 163, 0}}, -{(unsigned char*)"plusb", {226, 138, 158, 0}}, -{(unsigned char*)"pluscir", {226, 168, 162, 0}}, -{(unsigned char*)"plusdo", {226, 136, 148, 0}}, -{(unsigned char*)"plusdu", {226, 168, 165, 0}}, -{(unsigned char*)"pluse", {226, 169, 178, 0}}, -{(unsigned char*)"plusmn", {194, 177, 0}}, -{(unsigned char*)"plussim", {226, 168, 166, 0}}, -{(unsigned char*)"plustwo", {226, 168, 167, 0}}, -{(unsigned char*)"pm", {194, 177, 0}}, -{(unsigned char*)"pointint", {226, 168, 149, 0}}, -{(unsigned char*)"popf", {240, 157, 149, 161, 0}}, -{(unsigned char*)"pound", {194, 163, 0}}, -{(unsigned char*)"pr", {226, 137, 186, 0}}, -{(unsigned char*)"prE", {226, 170, 179, 0}}, -{(unsigned char*)"prap", {226, 170, 183, 0}}, -{(unsigned char*)"prcue", {226, 137, 188, 0}}, -{(unsigned char*)"pre", {226, 170, 175, 0}}, -{(unsigned char*)"prec", {226, 137, 186, 0}}, -{(unsigned char*)"precapprox", {226, 170, 183, 0}}, -{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}}, -{(unsigned char*)"preceq", {226, 170, 175, 0}}, -{(unsigned char*)"precnapprox", {226, 170, 185, 0}}, -{(unsigned char*)"precneqq", {226, 170, 181, 0}}, -{(unsigned char*)"precnsim", {226, 139, 168, 0}}, -{(unsigned char*)"precsim", {226, 137, 190, 0}}, -{(unsigned char*)"prime", {226, 128, 178, 0}}, -{(unsigned char*)"primes", {226, 132, 153, 0}}, -{(unsigned char*)"prnE", {226, 170, 181, 0}}, -{(unsigned char*)"prnap", {226, 170, 185, 0}}, -{(unsigned char*)"prnsim", {226, 139, 168, 0}}, -{(unsigned char*)"prod", {226, 136, 143, 0}}, -{(unsigned char*)"profalar", {226, 140, 174, 0}}, -{(unsigned char*)"profline", {226, 140, 146, 0}}, -{(unsigned char*)"profsurf", {226, 140, 147, 0}}, -{(unsigned char*)"prop", {226, 136, 157, 0}}, -{(unsigned char*)"propto", {226, 136, 157, 0}}, -{(unsigned char*)"prsim", {226, 137, 190, 0}}, -{(unsigned char*)"prurel", {226, 138, 176, 0}}, -{(unsigned char*)"pscr", {240, 157, 147, 133, 0}}, -{(unsigned char*)"psi", {207, 136, 0}}, -{(unsigned char*)"puncsp", {226, 128, 136, 0}}, -{(unsigned char*)"qfr", {240, 157, 148, 174, 0}}, -{(unsigned char*)"qint", {226, 168, 140, 0}}, -{(unsigned char*)"qopf", {240, 157, 149, 162, 0}}, -{(unsigned char*)"qprime", {226, 129, 151, 0}}, -{(unsigned char*)"qscr", {240, 157, 147, 134, 0}}, -{(unsigned char*)"quaternions", {226, 132, 141, 0}}, -{(unsigned char*)"quatint", {226, 168, 150, 0}}, -{(unsigned char*)"quest", {63, 0}}, -{(unsigned char*)"questeq", {226, 137, 159, 0}}, -{(unsigned char*)"quot", {34, 0}}, -{(unsigned char*)"rAarr", {226, 135, 155, 0}}, -{(unsigned char*)"rArr", {226, 135, 146, 0}}, -{(unsigned char*)"rAtail", {226, 164, 156, 0}}, -{(unsigned char*)"rBarr", {226, 164, 143, 0}}, -{(unsigned char*)"rHar", {226, 165, 164, 0}}, -{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}}, -{(unsigned char*)"racute", {197, 149, 0}}, -{(unsigned char*)"radic", {226, 136, 154, 0}}, -{(unsigned char*)"raemptyv", {226, 166, 179, 0}}, -{(unsigned char*)"rang", {226, 159, 169, 0}}, -{(unsigned char*)"rangd", {226, 166, 146, 0}}, -{(unsigned char*)"range", {226, 166, 165, 0}}, -{(unsigned char*)"rangle", {226, 159, 169, 0}}, -{(unsigned char*)"raquo", {194, 187, 0}}, -{(unsigned char*)"rarr", {226, 134, 146, 0}}, -{(unsigned char*)"rarrap", {226, 165, 181, 0}}, -{(unsigned char*)"rarrb", {226, 135, 165, 0}}, -{(unsigned char*)"rarrbfs", {226, 164, 160, 0}}, -{(unsigned char*)"rarrc", {226, 164, 179, 0}}, -{(unsigned char*)"rarrfs", {226, 164, 158, 0}}, -{(unsigned char*)"rarrhk", {226, 134, 170, 0}}, -{(unsigned char*)"rarrlp", {226, 134, 172, 0}}, -{(unsigned char*)"rarrpl", {226, 165, 133, 0}}, -{(unsigned char*)"rarrsim", {226, 165, 180, 0}}, -{(unsigned char*)"rarrtl", {226, 134, 163, 0}}, -{(unsigned char*)"rarrw", {226, 134, 157, 0}}, -{(unsigned char*)"ratail", {226, 164, 154, 0}}, -{(unsigned char*)"ratio", {226, 136, 182, 0}}, -{(unsigned char*)"rationals", {226, 132, 154, 0}}, -{(unsigned char*)"rbarr", {226, 164, 141, 0}}, -{(unsigned char*)"rbbrk", {226, 157, 179, 0}}, -{(unsigned char*)"rbrace", {125, 0}}, -{(unsigned char*)"rbrack", {93, 0}}, -{(unsigned char*)"rbrke", {226, 166, 140, 0}}, -{(unsigned char*)"rbrksld", {226, 166, 142, 0}}, -{(unsigned char*)"rbrkslu", {226, 166, 144, 0}}, -{(unsigned char*)"rcaron", {197, 153, 0}}, -{(unsigned char*)"rcedil", {197, 151, 0}}, -{(unsigned char*)"rceil", {226, 140, 137, 0}}, -{(unsigned char*)"rcub", {125, 0}}, -{(unsigned char*)"rcy", {209, 128, 0}}, -{(unsigned char*)"rdca", {226, 164, 183, 0}}, -{(unsigned char*)"rdldhar", {226, 165, 169, 0}}, -{(unsigned char*)"rdquo", {226, 128, 157, 0}}, -{(unsigned char*)"rdquor", {226, 128, 157, 0}}, -{(unsigned char*)"rdsh", {226, 134, 179, 0}}, -{(unsigned char*)"real", {226, 132, 156, 0}}, -{(unsigned char*)"realine", {226, 132, 155, 0}}, -{(unsigned char*)"realpart", {226, 132, 156, 0}}, -{(unsigned char*)"reals", {226, 132, 157, 0}}, -{(unsigned char*)"rect", {226, 150, 173, 0}}, -{(unsigned char*)"reg", {194, 174, 0}}, -{(unsigned char*)"rfisht", {226, 165, 189, 0}}, -{(unsigned char*)"rfloor", {226, 140, 139, 0}}, -{(unsigned char*)"rfr", {240, 157, 148, 175, 0}}, -{(unsigned char*)"rhard", {226, 135, 129, 0}}, -{(unsigned char*)"rharu", {226, 135, 128, 0}}, -{(unsigned char*)"rharul", {226, 165, 172, 0}}, -{(unsigned char*)"rho", {207, 129, 0}}, -{(unsigned char*)"rhov", {207, 177, 0}}, -{(unsigned char*)"rightarrow", {226, 134, 146, 0}}, -{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}}, -{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}}, -{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}}, -{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}}, -{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}}, -{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}}, -{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}}, -{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}}, -{(unsigned char*)"ring", {203, 154, 0}}, -{(unsigned char*)"risingdotseq", {226, 137, 147, 0}}, -{(unsigned char*)"rlarr", {226, 135, 132, 0}}, -{(unsigned char*)"rlhar", {226, 135, 140, 0}}, -{(unsigned char*)"rlm", {226, 128, 143, 0}}, -{(unsigned char*)"rmoust", {226, 142, 177, 0}}, -{(unsigned char*)"rmoustache", {226, 142, 177, 0}}, -{(unsigned char*)"rnmid", {226, 171, 174, 0}}, -{(unsigned char*)"roang", {226, 159, 173, 0}}, -{(unsigned char*)"roarr", {226, 135, 190, 0}}, -{(unsigned char*)"robrk", {226, 159, 167, 0}}, -{(unsigned char*)"ropar", {226, 166, 134, 0}}, -{(unsigned char*)"ropf", {240, 157, 149, 163, 0}}, -{(unsigned char*)"roplus", {226, 168, 174, 0}}, -{(unsigned char*)"rotimes", {226, 168, 181, 0}}, -{(unsigned char*)"rpar", {41, 0}}, -{(unsigned char*)"rpargt", {226, 166, 148, 0}}, -{(unsigned char*)"rppolint", {226, 168, 146, 0}}, -{(unsigned char*)"rrarr", {226, 135, 137, 0}}, -{(unsigned char*)"rsaquo", {226, 128, 186, 0}}, -{(unsigned char*)"rscr", {240, 157, 147, 135, 0}}, -{(unsigned char*)"rsh", {226, 134, 177, 0}}, -{(unsigned char*)"rsqb", {93, 0}}, -{(unsigned char*)"rsquo", {226, 128, 153, 0}}, -{(unsigned char*)"rsquor", {226, 128, 153, 0}}, -{(unsigned char*)"rthree", {226, 139, 140, 0}}, -{(unsigned char*)"rtimes", {226, 139, 138, 0}}, -{(unsigned char*)"rtri", {226, 150, 185, 0}}, -{(unsigned char*)"rtrie", {226, 138, 181, 0}}, -{(unsigned char*)"rtrif", {226, 150, 184, 0}}, -{(unsigned char*)"rtriltri", {226, 167, 142, 0}}, -{(unsigned char*)"ruluhar", {226, 165, 168, 0}}, -{(unsigned char*)"rx", {226, 132, 158, 0}}, -{(unsigned char*)"sacute", {197, 155, 0}}, -{(unsigned char*)"sbquo", {226, 128, 154, 0}}, -{(unsigned char*)"sc", {226, 137, 187, 0}}, -{(unsigned char*)"scE", {226, 170, 180, 0}}, -{(unsigned char*)"scap", {226, 170, 184, 0}}, -{(unsigned char*)"scaron", {197, 161, 0}}, -{(unsigned char*)"sccue", {226, 137, 189, 0}}, -{(unsigned char*)"sce", {226, 170, 176, 0}}, -{(unsigned char*)"scedil", {197, 159, 0}}, -{(unsigned char*)"scirc", {197, 157, 0}}, -{(unsigned char*)"scnE", {226, 170, 182, 0}}, -{(unsigned char*)"scnap", {226, 170, 186, 0}}, -{(unsigned char*)"scnsim", {226, 139, 169, 0}}, -{(unsigned char*)"scpolint", {226, 168, 147, 0}}, -{(unsigned char*)"scsim", {226, 137, 191, 0}}, -{(unsigned char*)"scy", {209, 129, 0}}, -{(unsigned char*)"sdot", {226, 139, 133, 0}}, -{(unsigned char*)"sdotb", {226, 138, 161, 0}}, -{(unsigned char*)"sdote", {226, 169, 166, 0}}, -{(unsigned char*)"seArr", {226, 135, 152, 0}}, -{(unsigned char*)"searhk", {226, 164, 165, 0}}, -{(unsigned char*)"searr", {226, 134, 152, 0}}, -{(unsigned char*)"searrow", {226, 134, 152, 0}}, -{(unsigned char*)"sect", {194, 167, 0}}, -{(unsigned char*)"semi", {59, 0}}, -{(unsigned char*)"seswar", {226, 164, 169, 0}}, -{(unsigned char*)"setminus", {226, 136, 150, 0}}, -{(unsigned char*)"setmn", {226, 136, 150, 0}}, -{(unsigned char*)"sext", {226, 156, 182, 0}}, -{(unsigned char*)"sfr", {240, 157, 148, 176, 0}}, -{(unsigned char*)"sfrown", {226, 140, 162, 0}}, -{(unsigned char*)"sharp", {226, 153, 175, 0}}, -{(unsigned char*)"shchcy", {209, 137, 0}}, -{(unsigned char*)"shcy", {209, 136, 0}}, -{(unsigned char*)"shortmid", {226, 136, 163, 0}}, -{(unsigned char*)"shortparallel", {226, 136, 165, 0}}, -{(unsigned char*)"shy", {194, 173, 0}}, -{(unsigned char*)"sigma", {207, 131, 0}}, -{(unsigned char*)"sigmaf", {207, 130, 0}}, -{(unsigned char*)"sigmav", {207, 130, 0}}, -{(unsigned char*)"sim", {226, 136, 188, 0}}, -{(unsigned char*)"simdot", {226, 169, 170, 0}}, -{(unsigned char*)"sime", {226, 137, 131, 0}}, -{(unsigned char*)"simeq", {226, 137, 131, 0}}, -{(unsigned char*)"simg", {226, 170, 158, 0}}, -{(unsigned char*)"simgE", {226, 170, 160, 0}}, -{(unsigned char*)"siml", {226, 170, 157, 0}}, -{(unsigned char*)"simlE", {226, 170, 159, 0}}, -{(unsigned char*)"simne", {226, 137, 134, 0}}, -{(unsigned char*)"simplus", {226, 168, 164, 0}}, -{(unsigned char*)"simrarr", {226, 165, 178, 0}}, -{(unsigned char*)"slarr", {226, 134, 144, 0}}, -{(unsigned char*)"smallsetminus", {226, 136, 150, 0}}, -{(unsigned char*)"smashp", {226, 168, 179, 0}}, -{(unsigned char*)"smeparsl", {226, 167, 164, 0}}, -{(unsigned char*)"smid", {226, 136, 163, 0}}, -{(unsigned char*)"smile", {226, 140, 163, 0}}, -{(unsigned char*)"smt", {226, 170, 170, 0}}, -{(unsigned char*)"smte", {226, 170, 172, 0}}, -{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}}, -{(unsigned char*)"softcy", {209, 140, 0}}, -{(unsigned char*)"sol", {47, 0}}, -{(unsigned char*)"solb", {226, 167, 132, 0}}, -{(unsigned char*)"solbar", {226, 140, 191, 0}}, -{(unsigned char*)"sopf", {240, 157, 149, 164, 0}}, -{(unsigned char*)"spades", {226, 153, 160, 0}}, -{(unsigned char*)"spadesuit", {226, 153, 160, 0}}, -{(unsigned char*)"spar", {226, 136, 165, 0}}, -{(unsigned char*)"sqcap", {226, 138, 147, 0}}, -{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}}, -{(unsigned char*)"sqcup", {226, 138, 148, 0}}, -{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}}, -{(unsigned char*)"sqsub", {226, 138, 143, 0}}, -{(unsigned char*)"sqsube", {226, 138, 145, 0}}, -{(unsigned char*)"sqsubset", {226, 138, 143, 0}}, -{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}}, -{(unsigned char*)"sqsup", {226, 138, 144, 0}}, -{(unsigned char*)"sqsupe", {226, 138, 146, 0}}, -{(unsigned char*)"sqsupset", {226, 138, 144, 0}}, -{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}}, -{(unsigned char*)"squ", {226, 150, 161, 0}}, -{(unsigned char*)"square", {226, 150, 161, 0}}, -{(unsigned char*)"squarf", {226, 150, 170, 0}}, -{(unsigned char*)"squf", {226, 150, 170, 0}}, -{(unsigned char*)"srarr", {226, 134, 146, 0}}, -{(unsigned char*)"sscr", {240, 157, 147, 136, 0}}, -{(unsigned char*)"ssetmn", {226, 136, 150, 0}}, -{(unsigned char*)"ssmile", {226, 140, 163, 0}}, -{(unsigned char*)"sstarf", {226, 139, 134, 0}}, -{(unsigned char*)"star", {226, 152, 134, 0}}, -{(unsigned char*)"starf", {226, 152, 133, 0}}, -{(unsigned char*)"straightepsilon", {207, 181, 0}}, -{(unsigned char*)"straightphi", {207, 149, 0}}, -{(unsigned char*)"strns", {194, 175, 0}}, -{(unsigned char*)"sub", {226, 138, 130, 0}}, -{(unsigned char*)"subE", {226, 171, 133, 0}}, -{(unsigned char*)"subdot", {226, 170, 189, 0}}, -{(unsigned char*)"sube", {226, 138, 134, 0}}, -{(unsigned char*)"subedot", {226, 171, 131, 0}}, -{(unsigned char*)"submult", {226, 171, 129, 0}}, -{(unsigned char*)"subnE", {226, 171, 139, 0}}, -{(unsigned char*)"subne", {226, 138, 138, 0}}, -{(unsigned char*)"subplus", {226, 170, 191, 0}}, -{(unsigned char*)"subrarr", {226, 165, 185, 0}}, -{(unsigned char*)"subset", {226, 138, 130, 0}}, -{(unsigned char*)"subseteq", {226, 138, 134, 0}}, -{(unsigned char*)"subseteqq", {226, 171, 133, 0}}, -{(unsigned char*)"subsetneq", {226, 138, 138, 0}}, -{(unsigned char*)"subsetneqq", {226, 171, 139, 0}}, -{(unsigned char*)"subsim", {226, 171, 135, 0}}, -{(unsigned char*)"subsub", {226, 171, 149, 0}}, -{(unsigned char*)"subsup", {226, 171, 147, 0}}, -{(unsigned char*)"succ", {226, 137, 187, 0}}, -{(unsigned char*)"succapprox", {226, 170, 184, 0}}, -{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}}, -{(unsigned char*)"succeq", {226, 170, 176, 0}}, -{(unsigned char*)"succnapprox", {226, 170, 186, 0}}, -{(unsigned char*)"succneqq", {226, 170, 182, 0}}, -{(unsigned char*)"succnsim", {226, 139, 169, 0}}, -{(unsigned char*)"succsim", {226, 137, 191, 0}}, -{(unsigned char*)"sum", {226, 136, 145, 0}}, -{(unsigned char*)"sung", {226, 153, 170, 0}}, -{(unsigned char*)"sup", {226, 138, 131, 0}}, -{(unsigned char*)"sup1", {194, 185, 0}}, -{(unsigned char*)"sup2", {194, 178, 0}}, -{(unsigned char*)"sup3", {194, 179, 0}}, -{(unsigned char*)"supE", {226, 171, 134, 0}}, -{(unsigned char*)"supdot", {226, 170, 190, 0}}, -{(unsigned char*)"supdsub", {226, 171, 152, 0}}, -{(unsigned char*)"supe", {226, 138, 135, 0}}, -{(unsigned char*)"supedot", {226, 171, 132, 0}}, -{(unsigned char*)"suphsol", {226, 159, 137, 0}}, -{(unsigned char*)"suphsub", {226, 171, 151, 0}}, -{(unsigned char*)"suplarr", {226, 165, 187, 0}}, -{(unsigned char*)"supmult", {226, 171, 130, 0}}, -{(unsigned char*)"supnE", {226, 171, 140, 0}}, -{(unsigned char*)"supne", {226, 138, 139, 0}}, -{(unsigned char*)"supplus", {226, 171, 128, 0}}, -{(unsigned char*)"supset", {226, 138, 131, 0}}, -{(unsigned char*)"supseteq", {226, 138, 135, 0}}, -{(unsigned char*)"supseteqq", {226, 171, 134, 0}}, -{(unsigned char*)"supsetneq", {226, 138, 139, 0}}, -{(unsigned char*)"supsetneqq", {226, 171, 140, 0}}, -{(unsigned char*)"supsim", {226, 171, 136, 0}}, -{(unsigned char*)"supsub", {226, 171, 148, 0}}, -{(unsigned char*)"supsup", {226, 171, 150, 0}}, -{(unsigned char*)"swArr", {226, 135, 153, 0}}, -{(unsigned char*)"swarhk", {226, 164, 166, 0}}, -{(unsigned char*)"swarr", {226, 134, 153, 0}}, -{(unsigned char*)"swarrow", {226, 134, 153, 0}}, -{(unsigned char*)"swnwar", {226, 164, 170, 0}}, -{(unsigned char*)"szlig", {195, 159, 0}}, -{(unsigned char*)"target", {226, 140, 150, 0}}, -{(unsigned char*)"tau", {207, 132, 0}}, -{(unsigned char*)"tbrk", {226, 142, 180, 0}}, -{(unsigned char*)"tcaron", {197, 165, 0}}, -{(unsigned char*)"tcedil", {197, 163, 0}}, -{(unsigned char*)"tcy", {209, 130, 0}}, -{(unsigned char*)"tdot", {226, 131, 155, 0}}, -{(unsigned char*)"telrec", {226, 140, 149, 0}}, -{(unsigned char*)"tfr", {240, 157, 148, 177, 0}}, -{(unsigned char*)"there4", {226, 136, 180, 0}}, -{(unsigned char*)"therefore", {226, 136, 180, 0}}, -{(unsigned char*)"theta", {206, 184, 0}}, -{(unsigned char*)"thetasym", {207, 145, 0}}, -{(unsigned char*)"thetav", {207, 145, 0}}, -{(unsigned char*)"thickapprox", {226, 137, 136, 0}}, -{(unsigned char*)"thicksim", {226, 136, 188, 0}}, -{(unsigned char*)"thinsp", {226, 128, 137, 0}}, -{(unsigned char*)"thkap", {226, 137, 136, 0}}, -{(unsigned char*)"thksim", {226, 136, 188, 0}}, -{(unsigned char*)"thorn", {195, 190, 0}}, -{(unsigned char*)"tilde", {203, 156, 0}}, -{(unsigned char*)"times", {195, 151, 0}}, -{(unsigned char*)"timesb", {226, 138, 160, 0}}, -{(unsigned char*)"timesbar", {226, 168, 177, 0}}, -{(unsigned char*)"timesd", {226, 168, 176, 0}}, -{(unsigned char*)"tint", {226, 136, 173, 0}}, -{(unsigned char*)"toea", {226, 164, 168, 0}}, -{(unsigned char*)"top", {226, 138, 164, 0}}, -{(unsigned char*)"topbot", {226, 140, 182, 0}}, -{(unsigned char*)"topcir", {226, 171, 177, 0}}, -{(unsigned char*)"topf", {240, 157, 149, 165, 0}}, -{(unsigned char*)"topfork", {226, 171, 154, 0}}, -{(unsigned char*)"tosa", {226, 164, 169, 0}}, -{(unsigned char*)"tprime", {226, 128, 180, 0}}, -{(unsigned char*)"trade", {226, 132, 162, 0}}, -{(unsigned char*)"triangle", {226, 150, 181, 0}}, -{(unsigned char*)"triangledown", {226, 150, 191, 0}}, -{(unsigned char*)"triangleleft", {226, 151, 131, 0}}, -{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}}, -{(unsigned char*)"triangleq", {226, 137, 156, 0}}, -{(unsigned char*)"triangleright", {226, 150, 185, 0}}, -{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}}, -{(unsigned char*)"tridot", {226, 151, 172, 0}}, -{(unsigned char*)"trie", {226, 137, 156, 0}}, -{(unsigned char*)"triminus", {226, 168, 186, 0}}, -{(unsigned char*)"triplus", {226, 168, 185, 0}}, -{(unsigned char*)"trisb", {226, 167, 141, 0}}, -{(unsigned char*)"tritime", {226, 168, 187, 0}}, -{(unsigned char*)"trpezium", {226, 143, 162, 0}}, -{(unsigned char*)"tscr", {240, 157, 147, 137, 0}}, -{(unsigned char*)"tscy", {209, 134, 0}}, -{(unsigned char*)"tshcy", {209, 155, 0}}, -{(unsigned char*)"tstrok", {197, 167, 0}}, -{(unsigned char*)"twixt", {226, 137, 172, 0}}, -{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}}, -{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}}, -{(unsigned char*)"uArr", {226, 135, 145, 0}}, -{(unsigned char*)"uHar", {226, 165, 163, 0}}, -{(unsigned char*)"uacute", {195, 186, 0}}, -{(unsigned char*)"uarr", {226, 134, 145, 0}}, -{(unsigned char*)"ubrcy", {209, 158, 0}}, -{(unsigned char*)"ubreve", {197, 173, 0}}, -{(unsigned char*)"ucirc", {195, 187, 0}}, -{(unsigned char*)"ucy", {209, 131, 0}}, -{(unsigned char*)"udarr", {226, 135, 133, 0}}, -{(unsigned char*)"udblac", {197, 177, 0}}, -{(unsigned char*)"udhar", {226, 165, 174, 0}}, -{(unsigned char*)"ufisht", {226, 165, 190, 0}}, -{(unsigned char*)"ufr", {240, 157, 148, 178, 0}}, -{(unsigned char*)"ugrave", {195, 185, 0}}, -{(unsigned char*)"uharl", {226, 134, 191, 0}}, -{(unsigned char*)"uharr", {226, 134, 190, 0}}, -{(unsigned char*)"uhblk", {226, 150, 128, 0}}, -{(unsigned char*)"ulcorn", {226, 140, 156, 0}}, -{(unsigned char*)"ulcorner", {226, 140, 156, 0}}, -{(unsigned char*)"ulcrop", {226, 140, 143, 0}}, -{(unsigned char*)"ultri", {226, 151, 184, 0}}, -{(unsigned char*)"umacr", {197, 171, 0}}, -{(unsigned char*)"uml", {194, 168, 0}}, -{(unsigned char*)"uogon", {197, 179, 0}}, -{(unsigned char*)"uopf", {240, 157, 149, 166, 0}}, -{(unsigned char*)"uparrow", {226, 134, 145, 0}}, -{(unsigned char*)"updownarrow", {226, 134, 149, 0}}, -{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}}, -{(unsigned char*)"upharpoonright", {226, 134, 190, 0}}, -{(unsigned char*)"uplus", {226, 138, 142, 0}}, -{(unsigned char*)"upsi", {207, 133, 0}}, -{(unsigned char*)"upsih", {207, 146, 0}}, -{(unsigned char*)"upsilon", {207, 133, 0}}, -{(unsigned char*)"upuparrows", {226, 135, 136, 0}}, -{(unsigned char*)"urcorn", {226, 140, 157, 0}}, -{(unsigned char*)"urcorner", {226, 140, 157, 0}}, -{(unsigned char*)"urcrop", {226, 140, 142, 0}}, -{(unsigned char*)"uring", {197, 175, 0}}, -{(unsigned char*)"urtri", {226, 151, 185, 0}}, -{(unsigned char*)"uscr", {240, 157, 147, 138, 0}}, -{(unsigned char*)"utdot", {226, 139, 176, 0}}, -{(unsigned char*)"utilde", {197, 169, 0}}, -{(unsigned char*)"utri", {226, 150, 181, 0}}, -{(unsigned char*)"utrif", {226, 150, 180, 0}}, -{(unsigned char*)"uuarr", {226, 135, 136, 0}}, -{(unsigned char*)"uuml", {195, 188, 0}}, -{(unsigned char*)"uwangle", {226, 166, 167, 0}}, -{(unsigned char*)"vArr", {226, 135, 149, 0}}, -{(unsigned char*)"vBar", {226, 171, 168, 0}}, -{(unsigned char*)"vBarv", {226, 171, 169, 0}}, -{(unsigned char*)"vDash", {226, 138, 168, 0}}, -{(unsigned char*)"vangrt", {226, 166, 156, 0}}, -{(unsigned char*)"varepsilon", {207, 181, 0}}, -{(unsigned char*)"varkappa", {207, 176, 0}}, -{(unsigned char*)"varnothing", {226, 136, 133, 0}}, -{(unsigned char*)"varphi", {207, 149, 0}}, -{(unsigned char*)"varpi", {207, 150, 0}}, -{(unsigned char*)"varpropto", {226, 136, 157, 0}}, -{(unsigned char*)"varr", {226, 134, 149, 0}}, -{(unsigned char*)"varrho", {207, 177, 0}}, -{(unsigned char*)"varsigma", {207, 130, 0}}, -{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}}, -{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}}, -{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}}, -{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}}, -{(unsigned char*)"vartheta", {207, 145, 0}}, -{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}}, -{(unsigned char*)"vartriangleright", {226, 138, 179, 0}}, -{(unsigned char*)"vcy", {208, 178, 0}}, -{(unsigned char*)"vdash", {226, 138, 162, 0}}, -{(unsigned char*)"vee", {226, 136, 168, 0}}, -{(unsigned char*)"veebar", {226, 138, 187, 0}}, -{(unsigned char*)"veeeq", {226, 137, 154, 0}}, -{(unsigned char*)"vellip", {226, 139, 174, 0}}, -{(unsigned char*)"verbar", {124, 0}}, -{(unsigned char*)"vert", {124, 0}}, -{(unsigned char*)"vfr", {240, 157, 148, 179, 0}}, -{(unsigned char*)"vltri", {226, 138, 178, 0}}, -{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}}, -{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}}, -{(unsigned char*)"vopf", {240, 157, 149, 167, 0}}, -{(unsigned char*)"vprop", {226, 136, 157, 0}}, -{(unsigned char*)"vrtri", {226, 138, 179, 0}}, -{(unsigned char*)"vscr", {240, 157, 147, 139, 0}}, -{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}}, -{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}}, -{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}}, -{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}}, -{(unsigned char*)"vzigzag", {226, 166, 154, 0}}, -{(unsigned char*)"wcirc", {197, 181, 0}}, -{(unsigned char*)"wedbar", {226, 169, 159, 0}}, -{(unsigned char*)"wedge", {226, 136, 167, 0}}, -{(unsigned char*)"wedgeq", {226, 137, 153, 0}}, -{(unsigned char*)"weierp", {226, 132, 152, 0}}, -{(unsigned char*)"wfr", {240, 157, 148, 180, 0}}, -{(unsigned char*)"wopf", {240, 157, 149, 168, 0}}, -{(unsigned char*)"wp", {226, 132, 152, 0}}, -{(unsigned char*)"wr", {226, 137, 128, 0}}, -{(unsigned char*)"wreath", {226, 137, 128, 0}}, -{(unsigned char*)"wscr", {240, 157, 147, 140, 0}}, -{(unsigned char*)"xcap", {226, 139, 130, 0}}, -{(unsigned char*)"xcirc", {226, 151, 175, 0}}, -{(unsigned char*)"xcup", {226, 139, 131, 0}}, -{(unsigned char*)"xdtri", {226, 150, 189, 0}}, -{(unsigned char*)"xfr", {240, 157, 148, 181, 0}}, -{(unsigned char*)"xhArr", {226, 159, 186, 0}}, -{(unsigned char*)"xharr", {226, 159, 183, 0}}, -{(unsigned char*)"xi", {206, 190, 0}}, -{(unsigned char*)"xlArr", {226, 159, 184, 0}}, -{(unsigned char*)"xlarr", {226, 159, 181, 0}}, -{(unsigned char*)"xmap", {226, 159, 188, 0}}, -{(unsigned char*)"xnis", {226, 139, 187, 0}}, -{(unsigned char*)"xodot", {226, 168, 128, 0}}, -{(unsigned char*)"xopf", {240, 157, 149, 169, 0}}, -{(unsigned char*)"xoplus", {226, 168, 129, 0}}, -{(unsigned char*)"xotime", {226, 168, 130, 0}}, -{(unsigned char*)"xrArr", {226, 159, 185, 0}}, -{(unsigned char*)"xrarr", {226, 159, 182, 0}}, -{(unsigned char*)"xscr", {240, 157, 147, 141, 0}}, -{(unsigned char*)"xsqcup", {226, 168, 134, 0}}, -{(unsigned char*)"xuplus", {226, 168, 132, 0}}, -{(unsigned char*)"xutri", {226, 150, 179, 0}}, -{(unsigned char*)"xvee", {226, 139, 129, 0}}, -{(unsigned char*)"xwedge", {226, 139, 128, 0}}, -{(unsigned char*)"yacute", {195, 189, 0}}, -{(unsigned char*)"yacy", {209, 143, 0}}, -{(unsigned char*)"ycirc", {197, 183, 0}}, -{(unsigned char*)"ycy", {209, 139, 0}}, -{(unsigned char*)"yen", {194, 165, 0}}, -{(unsigned char*)"yfr", {240, 157, 148, 182, 0}}, -{(unsigned char*)"yicy", {209, 151, 0}}, -{(unsigned char*)"yopf", {240, 157, 149, 170, 0}}, -{(unsigned char*)"yscr", {240, 157, 147, 142, 0}}, -{(unsigned char*)"yucy", {209, 142, 0}}, -{(unsigned char*)"yuml", {195, 191, 0}}, -{(unsigned char*)"zacute", {197, 186, 0}}, -{(unsigned char*)"zcaron", {197, 190, 0}}, -{(unsigned char*)"zcy", {208, 183, 0}}, -{(unsigned char*)"zdot", {197, 188, 0}}, -{(unsigned char*)"zeetrf", {226, 132, 168, 0}}, -{(unsigned char*)"zeta", {206, 182, 0}}, -{(unsigned char*)"zfr", {240, 157, 148, 183, 0}}, -{(unsigned char*)"zhcy", {208, 182, 0}}, -{(unsigned char*)"zigrarr", {226, 135, 157, 0}}, -{(unsigned char*)"zopf", {240, 157, 149, 171, 0}}, -{(unsigned char*)"zscr", {240, 157, 147, 143, 0}}, -{(unsigned char*)"zwj", {226, 128, 141, 0}}, -{(unsigned char*)"zwnj", {226, 128, 140, 0}}, -}; - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/src/entities.inc b/src/entities.inc new file mode 100644 index 0000000000..ec3d2a9f76 --- /dev/null +++ b/src/entities.inc @@ -0,0 +1,2138 @@ +/* Autogenerated by tools/make_headers_inc.py */ + +struct cmark_entity_node { + unsigned char *entity; + unsigned char bytes[8]; +}; + +#define CMARK_ENTITY_MIN_LENGTH 2 +#define CMARK_ENTITY_MAX_LENGTH 31 +#define CMARK_NUM_ENTITIES 2125 + +static const struct cmark_entity_node cmark_entities[] = { +{(unsigned char*)"AElig", {195, 134, 0}}, +{(unsigned char*)"AMP", {38, 0}}, +{(unsigned char*)"Aacute", {195, 129, 0}}, +{(unsigned char*)"Abreve", {196, 130, 0}}, +{(unsigned char*)"Acirc", {195, 130, 0}}, +{(unsigned char*)"Acy", {208, 144, 0}}, +{(unsigned char*)"Afr", {240, 157, 148, 132, 0}}, +{(unsigned char*)"Agrave", {195, 128, 0}}, +{(unsigned char*)"Alpha", {206, 145, 0}}, +{(unsigned char*)"Amacr", {196, 128, 0}}, +{(unsigned char*)"And", {226, 169, 147, 0}}, +{(unsigned char*)"Aogon", {196, 132, 0}}, +{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}}, +{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}}, +{(unsigned char*)"Aring", {195, 133, 0}}, +{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}}, +{(unsigned char*)"Assign", {226, 137, 148, 0}}, +{(unsigned char*)"Atilde", {195, 131, 0}}, +{(unsigned char*)"Auml", {195, 132, 0}}, +{(unsigned char*)"Backslash", {226, 136, 150, 0}}, +{(unsigned char*)"Barv", {226, 171, 167, 0}}, +{(unsigned char*)"Barwed", {226, 140, 134, 0}}, +{(unsigned char*)"Bcy", {208, 145, 0}}, +{(unsigned char*)"Because", {226, 136, 181, 0}}, +{(unsigned char*)"Bernoullis", {226, 132, 172, 0}}, +{(unsigned char*)"Beta", {206, 146, 0}}, +{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}}, +{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}}, +{(unsigned char*)"Breve", {203, 152, 0}}, +{(unsigned char*)"Bscr", {226, 132, 172, 0}}, +{(unsigned char*)"Bumpeq", {226, 137, 142, 0}}, +{(unsigned char*)"CHcy", {208, 167, 0}}, +{(unsigned char*)"COPY", {194, 169, 0}}, +{(unsigned char*)"Cacute", {196, 134, 0}}, +{(unsigned char*)"Cap", {226, 139, 146, 0}}, +{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}}, +{(unsigned char*)"Cayleys", {226, 132, 173, 0}}, +{(unsigned char*)"Ccaron", {196, 140, 0}}, +{(unsigned char*)"Ccedil", {195, 135, 0}}, +{(unsigned char*)"Ccirc", {196, 136, 0}}, +{(unsigned char*)"Cconint", {226, 136, 176, 0}}, +{(unsigned char*)"Cdot", {196, 138, 0}}, +{(unsigned char*)"Cedilla", {194, 184, 0}}, +{(unsigned char*)"CenterDot", {194, 183, 0}}, +{(unsigned char*)"Cfr", {226, 132, 173, 0}}, +{(unsigned char*)"Chi", {206, 167, 0}}, +{(unsigned char*)"CircleDot", {226, 138, 153, 0}}, +{(unsigned char*)"CircleMinus", {226, 138, 150, 0}}, +{(unsigned char*)"CirclePlus", {226, 138, 149, 0}}, +{(unsigned char*)"CircleTimes", {226, 138, 151, 0}}, +{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}}, +{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}}, +{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}}, +{(unsigned char*)"Colon", {226, 136, 183, 0}}, +{(unsigned char*)"Colone", {226, 169, 180, 0}}, +{(unsigned char*)"Congruent", {226, 137, 161, 0}}, +{(unsigned char*)"Conint", {226, 136, 175, 0}}, +{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}}, +{(unsigned char*)"Copf", {226, 132, 130, 0}}, +{(unsigned char*)"Coproduct", {226, 136, 144, 0}}, +{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}}, +{(unsigned char*)"Cross", {226, 168, 175, 0}}, +{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}}, +{(unsigned char*)"Cup", {226, 139, 147, 0}}, +{(unsigned char*)"CupCap", {226, 137, 141, 0}}, +{(unsigned char*)"DD", {226, 133, 133, 0}}, +{(unsigned char*)"DDotrahd", {226, 164, 145, 0}}, +{(unsigned char*)"DJcy", {208, 130, 0}}, +{(unsigned char*)"DScy", {208, 133, 0}}, +{(unsigned char*)"DZcy", {208, 143, 0}}, +{(unsigned char*)"Dagger", {226, 128, 161, 0}}, +{(unsigned char*)"Darr", {226, 134, 161, 0}}, +{(unsigned char*)"Dashv", {226, 171, 164, 0}}, +{(unsigned char*)"Dcaron", {196, 142, 0}}, +{(unsigned char*)"Dcy", {208, 148, 0}}, +{(unsigned char*)"Del", {226, 136, 135, 0}}, +{(unsigned char*)"Delta", {206, 148, 0}}, +{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}}, +{(unsigned char*)"DiacriticalAcute", {194, 180, 0}}, +{(unsigned char*)"DiacriticalDot", {203, 153, 0}}, +{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}}, +{(unsigned char*)"DiacriticalGrave", {96, 0}}, +{(unsigned char*)"DiacriticalTilde", {203, 156, 0}}, +{(unsigned char*)"Diamond", {226, 139, 132, 0}}, +{(unsigned char*)"DifferentialD", {226, 133, 134, 0}}, +{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}}, +{(unsigned char*)"Dot", {194, 168, 0}}, +{(unsigned char*)"DotDot", {226, 131, 156, 0}}, +{(unsigned char*)"DotEqual", {226, 137, 144, 0}}, +{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}}, +{(unsigned char*)"DoubleDot", {194, 168, 0}}, +{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}}, +{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}}, +{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}}, +{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}}, +{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}}, +{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}}, +{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}}, +{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}}, +{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}}, +{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}}, +{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}}, +{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}}, +{(unsigned char*)"DownArrow", {226, 134, 147, 0}}, +{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}}, +{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}}, +{(unsigned char*)"DownBreve", {204, 145, 0}}, +{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}}, +{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}}, +{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}}, +{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}}, +{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}}, +{(unsigned char*)"DownRightVector", {226, 135, 129, 0}}, +{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}}, +{(unsigned char*)"DownTee", {226, 138, 164, 0}}, +{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}}, +{(unsigned char*)"Downarrow", {226, 135, 147, 0}}, +{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}}, +{(unsigned char*)"Dstrok", {196, 144, 0}}, +{(unsigned char*)"ENG", {197, 138, 0}}, +{(unsigned char*)"ETH", {195, 144, 0}}, +{(unsigned char*)"Eacute", {195, 137, 0}}, +{(unsigned char*)"Ecaron", {196, 154, 0}}, +{(unsigned char*)"Ecirc", {195, 138, 0}}, +{(unsigned char*)"Ecy", {208, 173, 0}}, +{(unsigned char*)"Edot", {196, 150, 0}}, +{(unsigned char*)"Efr", {240, 157, 148, 136, 0}}, +{(unsigned char*)"Egrave", {195, 136, 0}}, +{(unsigned char*)"Element", {226, 136, 136, 0}}, +{(unsigned char*)"Emacr", {196, 146, 0}}, +{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}}, +{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}}, +{(unsigned char*)"Eogon", {196, 152, 0}}, +{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}}, +{(unsigned char*)"Epsilon", {206, 149, 0}}, +{(unsigned char*)"Equal", {226, 169, 181, 0}}, +{(unsigned char*)"EqualTilde", {226, 137, 130, 0}}, +{(unsigned char*)"Equilibrium", {226, 135, 140, 0}}, +{(unsigned char*)"Escr", {226, 132, 176, 0}}, +{(unsigned char*)"Esim", {226, 169, 179, 0}}, +{(unsigned char*)"Eta", {206, 151, 0}}, +{(unsigned char*)"Euml", {195, 139, 0}}, +{(unsigned char*)"Exists", {226, 136, 131, 0}}, +{(unsigned char*)"ExponentialE", {226, 133, 135, 0}}, +{(unsigned char*)"Fcy", {208, 164, 0}}, +{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}}, +{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}}, +{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}}, +{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}}, +{(unsigned char*)"ForAll", {226, 136, 128, 0}}, +{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}}, +{(unsigned char*)"Fscr", {226, 132, 177, 0}}, +{(unsigned char*)"GJcy", {208, 131, 0}}, +{(unsigned char*)"GT", {62, 0}}, +{(unsigned char*)"Gamma", {206, 147, 0}}, +{(unsigned char*)"Gammad", {207, 156, 0}}, +{(unsigned char*)"Gbreve", {196, 158, 0}}, +{(unsigned char*)"Gcedil", {196, 162, 0}}, +{(unsigned char*)"Gcirc", {196, 156, 0}}, +{(unsigned char*)"Gcy", {208, 147, 0}}, +{(unsigned char*)"Gdot", {196, 160, 0}}, +{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}}, +{(unsigned char*)"Gg", {226, 139, 153, 0}}, +{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}}, +{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}}, +{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}}, +{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}}, +{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}}, +{(unsigned char*)"GreaterLess", {226, 137, 183, 0}}, +{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}}, +{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}}, +{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}}, +{(unsigned char*)"Gt", {226, 137, 171, 0}}, +{(unsigned char*)"HARDcy", {208, 170, 0}}, +{(unsigned char*)"Hacek", {203, 135, 0}}, +{(unsigned char*)"Hat", {94, 0}}, +{(unsigned char*)"Hcirc", {196, 164, 0}}, +{(unsigned char*)"Hfr", {226, 132, 140, 0}}, +{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}}, +{(unsigned char*)"Hopf", {226, 132, 141, 0}}, +{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}}, +{(unsigned char*)"Hscr", {226, 132, 139, 0}}, +{(unsigned char*)"Hstrok", {196, 166, 0}}, +{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}}, +{(unsigned char*)"HumpEqual", {226, 137, 143, 0}}, +{(unsigned char*)"IEcy", {208, 149, 0}}, +{(unsigned char*)"IJlig", {196, 178, 0}}, +{(unsigned char*)"IOcy", {208, 129, 0}}, +{(unsigned char*)"Iacute", {195, 141, 0}}, +{(unsigned char*)"Icirc", {195, 142, 0}}, +{(unsigned char*)"Icy", {208, 152, 0}}, +{(unsigned char*)"Idot", {196, 176, 0}}, +{(unsigned char*)"Ifr", {226, 132, 145, 0}}, +{(unsigned char*)"Igrave", {195, 140, 0}}, +{(unsigned char*)"Im", {226, 132, 145, 0}}, +{(unsigned char*)"Imacr", {196, 170, 0}}, +{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}}, +{(unsigned char*)"Implies", {226, 135, 146, 0}}, +{(unsigned char*)"Int", {226, 136, 172, 0}}, +{(unsigned char*)"Integral", {226, 136, 171, 0}}, +{(unsigned char*)"Intersection", {226, 139, 130, 0}}, +{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}}, +{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}}, +{(unsigned char*)"Iogon", {196, 174, 0}}, +{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}}, +{(unsigned char*)"Iota", {206, 153, 0}}, +{(unsigned char*)"Iscr", {226, 132, 144, 0}}, +{(unsigned char*)"Itilde", {196, 168, 0}}, +{(unsigned char*)"Iukcy", {208, 134, 0}}, +{(unsigned char*)"Iuml", {195, 143, 0}}, +{(unsigned char*)"Jcirc", {196, 180, 0}}, +{(unsigned char*)"Jcy", {208, 153, 0}}, +{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}}, +{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}}, +{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}}, +{(unsigned char*)"Jsercy", {208, 136, 0}}, +{(unsigned char*)"Jukcy", {208, 132, 0}}, +{(unsigned char*)"KHcy", {208, 165, 0}}, +{(unsigned char*)"KJcy", {208, 140, 0}}, +{(unsigned char*)"Kappa", {206, 154, 0}}, +{(unsigned char*)"Kcedil", {196, 182, 0}}, +{(unsigned char*)"Kcy", {208, 154, 0}}, +{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}}, +{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}}, +{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}}, +{(unsigned char*)"LJcy", {208, 137, 0}}, +{(unsigned char*)"LT", {60, 0}}, +{(unsigned char*)"Lacute", {196, 185, 0}}, +{(unsigned char*)"Lambda", {206, 155, 0}}, +{(unsigned char*)"Lang", {226, 159, 170, 0}}, +{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}}, +{(unsigned char*)"Larr", {226, 134, 158, 0}}, +{(unsigned char*)"Lcaron", {196, 189, 0}}, +{(unsigned char*)"Lcedil", {196, 187, 0}}, +{(unsigned char*)"Lcy", {208, 155, 0}}, +{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}}, +{(unsigned char*)"LeftArrow", {226, 134, 144, 0}}, +{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}}, +{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}}, +{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}}, +{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}}, +{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}}, +{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}}, +{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}}, +{(unsigned char*)"LeftFloor", {226, 140, 138, 0}}, +{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}}, +{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}}, +{(unsigned char*)"LeftTee", {226, 138, 163, 0}}, +{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}}, +{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}}, +{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}}, +{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}}, +{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}}, +{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}}, +{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}}, +{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}}, +{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}}, +{(unsigned char*)"LeftVector", {226, 134, 188, 0}}, +{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}}, +{(unsigned char*)"Leftarrow", {226, 135, 144, 0}}, +{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}}, +{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}}, +{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}}, +{(unsigned char*)"LessGreater", {226, 137, 182, 0}}, +{(unsigned char*)"LessLess", {226, 170, 161, 0}}, +{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}}, +{(unsigned char*)"LessTilde", {226, 137, 178, 0}}, +{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}}, +{(unsigned char*)"Ll", {226, 139, 152, 0}}, +{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}}, +{(unsigned char*)"Lmidot", {196, 191, 0}}, +{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}}, +{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}}, +{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}}, +{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}}, +{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}}, +{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}}, +{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}}, +{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}}, +{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}}, +{(unsigned char*)"Lscr", {226, 132, 146, 0}}, +{(unsigned char*)"Lsh", {226, 134, 176, 0}}, +{(unsigned char*)"Lstrok", {197, 129, 0}}, +{(unsigned char*)"Lt", {226, 137, 170, 0}}, +{(unsigned char*)"Map", {226, 164, 133, 0}}, +{(unsigned char*)"Mcy", {208, 156, 0}}, +{(unsigned char*)"MediumSpace", {226, 129, 159, 0}}, +{(unsigned char*)"Mellintrf", {226, 132, 179, 0}}, +{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}}, +{(unsigned char*)"MinusPlus", {226, 136, 147, 0}}, +{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}}, +{(unsigned char*)"Mscr", {226, 132, 179, 0}}, +{(unsigned char*)"Mu", {206, 156, 0}}, +{(unsigned char*)"NJcy", {208, 138, 0}}, +{(unsigned char*)"Nacute", {197, 131, 0}}, +{(unsigned char*)"Ncaron", {197, 135, 0}}, +{(unsigned char*)"Ncedil", {197, 133, 0}}, +{(unsigned char*)"Ncy", {208, 157, 0}}, +{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}}, +{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}}, +{(unsigned char*)"NewLine", {10, 0}}, +{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}}, +{(unsigned char*)"NoBreak", {226, 129, 160, 0}}, +{(unsigned char*)"NonBreakingSpace", {194, 160, 0}}, +{(unsigned char*)"Nopf", {226, 132, 149, 0}}, +{(unsigned char*)"Not", {226, 171, 172, 0}}, +{(unsigned char*)"NotCongruent", {226, 137, 162, 0}}, +{(unsigned char*)"NotCupCap", {226, 137, 173, 0}}, +{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}}, +{(unsigned char*)"NotElement", {226, 136, 137, 0}}, +{(unsigned char*)"NotEqual", {226, 137, 160, 0}}, +{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}}, +{(unsigned char*)"NotExists", {226, 136, 132, 0}}, +{(unsigned char*)"NotGreater", {226, 137, 175, 0}}, +{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}}, +{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}}, +{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}}, +{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}}, +{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}}, +{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}}, +{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}}, +{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}}, +{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}}, +{(unsigned char*)"NotLess", {226, 137, 174, 0}}, +{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}}, +{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}}, +{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}}, +{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}}, +{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}}, +{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}}, +{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}}, +{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}}, +{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}}, +{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}}, +{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}}, +{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}}, +{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}}, +{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}}, +{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}}, +{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}}, +{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}}, +{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}}, +{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}}, +{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}}, +{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}}, +{(unsigned char*)"NotTilde", {226, 137, 129, 0}}, +{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}}, +{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}}, +{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}}, +{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}}, +{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}}, +{(unsigned char*)"Ntilde", {195, 145, 0}}, +{(unsigned char*)"Nu", {206, 157, 0}}, +{(unsigned char*)"OElig", {197, 146, 0}}, +{(unsigned char*)"Oacute", {195, 147, 0}}, +{(unsigned char*)"Ocirc", {195, 148, 0}}, +{(unsigned char*)"Ocy", {208, 158, 0}}, +{(unsigned char*)"Odblac", {197, 144, 0}}, +{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}}, +{(unsigned char*)"Ograve", {195, 146, 0}}, +{(unsigned char*)"Omacr", {197, 140, 0}}, +{(unsigned char*)"Omega", {206, 169, 0}}, +{(unsigned char*)"Omicron", {206, 159, 0}}, +{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}}, +{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}}, +{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}}, +{(unsigned char*)"Or", {226, 169, 148, 0}}, +{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}}, +{(unsigned char*)"Oslash", {195, 152, 0}}, +{(unsigned char*)"Otilde", {195, 149, 0}}, +{(unsigned char*)"Otimes", {226, 168, 183, 0}}, +{(unsigned char*)"Ouml", {195, 150, 0}}, +{(unsigned char*)"OverBar", {226, 128, 190, 0}}, +{(unsigned char*)"OverBrace", {226, 143, 158, 0}}, +{(unsigned char*)"OverBracket", {226, 142, 180, 0}}, +{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}}, +{(unsigned char*)"PartialD", {226, 136, 130, 0}}, +{(unsigned char*)"Pcy", {208, 159, 0}}, +{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}}, +{(unsigned char*)"Phi", {206, 166, 0}}, +{(unsigned char*)"Pi", {206, 160, 0}}, +{(unsigned char*)"PlusMinus", {194, 177, 0}}, +{(unsigned char*)"Poincareplane", {226, 132, 140, 0}}, +{(unsigned char*)"Popf", {226, 132, 153, 0}}, +{(unsigned char*)"Pr", {226, 170, 187, 0}}, +{(unsigned char*)"Precedes", {226, 137, 186, 0}}, +{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}}, +{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}}, +{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}}, +{(unsigned char*)"Prime", {226, 128, 179, 0}}, +{(unsigned char*)"Product", {226, 136, 143, 0}}, +{(unsigned char*)"Proportion", {226, 136, 183, 0}}, +{(unsigned char*)"Proportional", {226, 136, 157, 0}}, +{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}}, +{(unsigned char*)"Psi", {206, 168, 0}}, +{(unsigned char*)"QUOT", {34, 0}}, +{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}}, +{(unsigned char*)"Qopf", {226, 132, 154, 0}}, +{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}}, +{(unsigned char*)"RBarr", {226, 164, 144, 0}}, +{(unsigned char*)"REG", {194, 174, 0}}, +{(unsigned char*)"Racute", {197, 148, 0}}, +{(unsigned char*)"Rang", {226, 159, 171, 0}}, +{(unsigned char*)"Rarr", {226, 134, 160, 0}}, +{(unsigned char*)"Rarrtl", {226, 164, 150, 0}}, +{(unsigned char*)"Rcaron", {197, 152, 0}}, +{(unsigned char*)"Rcedil", {197, 150, 0}}, +{(unsigned char*)"Rcy", {208, 160, 0}}, +{(unsigned char*)"Re", {226, 132, 156, 0}}, +{(unsigned char*)"ReverseElement", {226, 136, 139, 0}}, +{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}}, +{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}}, +{(unsigned char*)"Rfr", {226, 132, 156, 0}}, +{(unsigned char*)"Rho", {206, 161, 0}}, +{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}}, +{(unsigned char*)"RightArrow", {226, 134, 146, 0}}, +{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}}, +{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}}, +{(unsigned char*)"RightCeiling", {226, 140, 137, 0}}, +{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}}, +{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}}, +{(unsigned char*)"RightDownVector", {226, 135, 130, 0}}, +{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}}, +{(unsigned char*)"RightFloor", {226, 140, 139, 0}}, +{(unsigned char*)"RightTee", {226, 138, 162, 0}}, +{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}}, +{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}}, +{(unsigned char*)"RightTriangle", {226, 138, 179, 0}}, +{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}}, +{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}}, +{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}}, +{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}}, +{(unsigned char*)"RightUpVector", {226, 134, 190, 0}}, +{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}}, +{(unsigned char*)"RightVector", {226, 135, 128, 0}}, +{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}}, +{(unsigned char*)"Rightarrow", {226, 135, 146, 0}}, +{(unsigned char*)"Ropf", {226, 132, 157, 0}}, +{(unsigned char*)"RoundImplies", {226, 165, 176, 0}}, +{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}}, +{(unsigned char*)"Rscr", {226, 132, 155, 0}}, +{(unsigned char*)"Rsh", {226, 134, 177, 0}}, +{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}}, +{(unsigned char*)"SHCHcy", {208, 169, 0}}, +{(unsigned char*)"SHcy", {208, 168, 0}}, +{(unsigned char*)"SOFTcy", {208, 172, 0}}, +{(unsigned char*)"Sacute", {197, 154, 0}}, +{(unsigned char*)"Sc", {226, 170, 188, 0}}, +{(unsigned char*)"Scaron", {197, 160, 0}}, +{(unsigned char*)"Scedil", {197, 158, 0}}, +{(unsigned char*)"Scirc", {197, 156, 0}}, +{(unsigned char*)"Scy", {208, 161, 0}}, +{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}}, +{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}}, +{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}}, +{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}}, +{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}}, +{(unsigned char*)"Sigma", {206, 163, 0}}, +{(unsigned char*)"SmallCircle", {226, 136, 152, 0}}, +{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}}, +{(unsigned char*)"Sqrt", {226, 136, 154, 0}}, +{(unsigned char*)"Square", {226, 150, 161, 0}}, +{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}}, +{(unsigned char*)"SquareSubset", {226, 138, 143, 0}}, +{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}}, +{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}}, +{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}}, +{(unsigned char*)"SquareUnion", {226, 138, 148, 0}}, +{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}}, +{(unsigned char*)"Star", {226, 139, 134, 0}}, +{(unsigned char*)"Sub", {226, 139, 144, 0}}, +{(unsigned char*)"Subset", {226, 139, 144, 0}}, +{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}}, +{(unsigned char*)"Succeeds", {226, 137, 187, 0}}, +{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}}, +{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}}, +{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}}, +{(unsigned char*)"SuchThat", {226, 136, 139, 0}}, +{(unsigned char*)"Sum", {226, 136, 145, 0}}, +{(unsigned char*)"Sup", {226, 139, 145, 0}}, +{(unsigned char*)"Superset", {226, 138, 131, 0}}, +{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}}, +{(unsigned char*)"Supset", {226, 139, 145, 0}}, +{(unsigned char*)"THORN", {195, 158, 0}}, +{(unsigned char*)"TRADE", {226, 132, 162, 0}}, +{(unsigned char*)"TSHcy", {208, 139, 0}}, +{(unsigned char*)"TScy", {208, 166, 0}}, +{(unsigned char*)"Tab", {9, 0}}, +{(unsigned char*)"Tau", {206, 164, 0}}, +{(unsigned char*)"Tcaron", {197, 164, 0}}, +{(unsigned char*)"Tcedil", {197, 162, 0}}, +{(unsigned char*)"Tcy", {208, 162, 0}}, +{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}}, +{(unsigned char*)"Therefore", {226, 136, 180, 0}}, +{(unsigned char*)"Theta", {206, 152, 0}}, +{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}}, +{(unsigned char*)"ThinSpace", {226, 128, 137, 0}}, +{(unsigned char*)"Tilde", {226, 136, 188, 0}}, +{(unsigned char*)"TildeEqual", {226, 137, 131, 0}}, +{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}}, +{(unsigned char*)"TildeTilde", {226, 137, 136, 0}}, +{(unsigned char*)"Topf", {240, 157, 149, 139, 0}}, +{(unsigned char*)"TripleDot", {226, 131, 155, 0}}, +{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}}, +{(unsigned char*)"Tstrok", {197, 166, 0}}, +{(unsigned char*)"Uacute", {195, 154, 0}}, +{(unsigned char*)"Uarr", {226, 134, 159, 0}}, +{(unsigned char*)"Uarrocir", {226, 165, 137, 0}}, +{(unsigned char*)"Ubrcy", {208, 142, 0}}, +{(unsigned char*)"Ubreve", {197, 172, 0}}, +{(unsigned char*)"Ucirc", {195, 155, 0}}, +{(unsigned char*)"Ucy", {208, 163, 0}}, +{(unsigned char*)"Udblac", {197, 176, 0}}, +{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}}, +{(unsigned char*)"Ugrave", {195, 153, 0}}, +{(unsigned char*)"Umacr", {197, 170, 0}}, +{(unsigned char*)"UnderBar", {95, 0}}, +{(unsigned char*)"UnderBrace", {226, 143, 159, 0}}, +{(unsigned char*)"UnderBracket", {226, 142, 181, 0}}, +{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}}, +{(unsigned char*)"Union", {226, 139, 131, 0}}, +{(unsigned char*)"UnionPlus", {226, 138, 142, 0}}, +{(unsigned char*)"Uogon", {197, 178, 0}}, +{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}}, +{(unsigned char*)"UpArrow", {226, 134, 145, 0}}, +{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}}, +{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}}, +{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}}, +{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}}, +{(unsigned char*)"UpTee", {226, 138, 165, 0}}, +{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}}, +{(unsigned char*)"Uparrow", {226, 135, 145, 0}}, +{(unsigned char*)"Updownarrow", {226, 135, 149, 0}}, +{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}}, +{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}}, +{(unsigned char*)"Upsi", {207, 146, 0}}, +{(unsigned char*)"Upsilon", {206, 165, 0}}, +{(unsigned char*)"Uring", {197, 174, 0}}, +{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}}, +{(unsigned char*)"Utilde", {197, 168, 0}}, +{(unsigned char*)"Uuml", {195, 156, 0}}, +{(unsigned char*)"VDash", {226, 138, 171, 0}}, +{(unsigned char*)"Vbar", {226, 171, 171, 0}}, +{(unsigned char*)"Vcy", {208, 146, 0}}, +{(unsigned char*)"Vdash", {226, 138, 169, 0}}, +{(unsigned char*)"Vdashl", {226, 171, 166, 0}}, +{(unsigned char*)"Vee", {226, 139, 129, 0}}, +{(unsigned char*)"Verbar", {226, 128, 150, 0}}, +{(unsigned char*)"Vert", {226, 128, 150, 0}}, +{(unsigned char*)"VerticalBar", {226, 136, 163, 0}}, +{(unsigned char*)"VerticalLine", {124, 0}}, +{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}}, +{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}}, +{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}}, +{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}}, +{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}}, +{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}}, +{(unsigned char*)"Vvdash", {226, 138, 170, 0}}, +{(unsigned char*)"Wcirc", {197, 180, 0}}, +{(unsigned char*)"Wedge", {226, 139, 128, 0}}, +{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}}, +{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}}, +{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}}, +{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}}, +{(unsigned char*)"Xi", {206, 158, 0}}, +{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}}, +{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}}, +{(unsigned char*)"YAcy", {208, 175, 0}}, +{(unsigned char*)"YIcy", {208, 135, 0}}, +{(unsigned char*)"YUcy", {208, 174, 0}}, +{(unsigned char*)"Yacute", {195, 157, 0}}, +{(unsigned char*)"Ycirc", {197, 182, 0}}, +{(unsigned char*)"Ycy", {208, 171, 0}}, +{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}}, +{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}}, +{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}}, +{(unsigned char*)"Yuml", {197, 184, 0}}, +{(unsigned char*)"ZHcy", {208, 150, 0}}, +{(unsigned char*)"Zacute", {197, 185, 0}}, +{(unsigned char*)"Zcaron", {197, 189, 0}}, +{(unsigned char*)"Zcy", {208, 151, 0}}, +{(unsigned char*)"Zdot", {197, 187, 0}}, +{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}}, +{(unsigned char*)"Zeta", {206, 150, 0}}, +{(unsigned char*)"Zfr", {226, 132, 168, 0}}, +{(unsigned char*)"Zopf", {226, 132, 164, 0}}, +{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}}, +{(unsigned char*)"aacute", {195, 161, 0}}, +{(unsigned char*)"abreve", {196, 131, 0}}, +{(unsigned char*)"ac", {226, 136, 190, 0}}, +{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}}, +{(unsigned char*)"acd", {226, 136, 191, 0}}, +{(unsigned char*)"acirc", {195, 162, 0}}, +{(unsigned char*)"acute", {194, 180, 0}}, +{(unsigned char*)"acy", {208, 176, 0}}, +{(unsigned char*)"aelig", {195, 166, 0}}, +{(unsigned char*)"af", {226, 129, 161, 0}}, +{(unsigned char*)"afr", {240, 157, 148, 158, 0}}, +{(unsigned char*)"agrave", {195, 160, 0}}, +{(unsigned char*)"alefsym", {226, 132, 181, 0}}, +{(unsigned char*)"aleph", {226, 132, 181, 0}}, +{(unsigned char*)"alpha", {206, 177, 0}}, +{(unsigned char*)"amacr", {196, 129, 0}}, +{(unsigned char*)"amalg", {226, 168, 191, 0}}, +{(unsigned char*)"amp", {38, 0}}, +{(unsigned char*)"and", {226, 136, 167, 0}}, +{(unsigned char*)"andand", {226, 169, 149, 0}}, +{(unsigned char*)"andd", {226, 169, 156, 0}}, +{(unsigned char*)"andslope", {226, 169, 152, 0}}, +{(unsigned char*)"andv", {226, 169, 154, 0}}, +{(unsigned char*)"ang", {226, 136, 160, 0}}, +{(unsigned char*)"ange", {226, 166, 164, 0}}, +{(unsigned char*)"angle", {226, 136, 160, 0}}, +{(unsigned char*)"angmsd", {226, 136, 161, 0}}, +{(unsigned char*)"angmsdaa", {226, 166, 168, 0}}, +{(unsigned char*)"angmsdab", {226, 166, 169, 0}}, +{(unsigned char*)"angmsdac", {226, 166, 170, 0}}, +{(unsigned char*)"angmsdad", {226, 166, 171, 0}}, +{(unsigned char*)"angmsdae", {226, 166, 172, 0}}, +{(unsigned char*)"angmsdaf", {226, 166, 173, 0}}, +{(unsigned char*)"angmsdag", {226, 166, 174, 0}}, +{(unsigned char*)"angmsdah", {226, 166, 175, 0}}, +{(unsigned char*)"angrt", {226, 136, 159, 0}}, +{(unsigned char*)"angrtvb", {226, 138, 190, 0}}, +{(unsigned char*)"angrtvbd", {226, 166, 157, 0}}, +{(unsigned char*)"angsph", {226, 136, 162, 0}}, +{(unsigned char*)"angst", {195, 133, 0}}, +{(unsigned char*)"angzarr", {226, 141, 188, 0}}, +{(unsigned char*)"aogon", {196, 133, 0}}, +{(unsigned char*)"aopf", {240, 157, 149, 146, 0}}, +{(unsigned char*)"ap", {226, 137, 136, 0}}, +{(unsigned char*)"apE", {226, 169, 176, 0}}, +{(unsigned char*)"apacir", {226, 169, 175, 0}}, +{(unsigned char*)"ape", {226, 137, 138, 0}}, +{(unsigned char*)"apid", {226, 137, 139, 0}}, +{(unsigned char*)"apos", {39, 0}}, +{(unsigned char*)"approx", {226, 137, 136, 0}}, +{(unsigned char*)"approxeq", {226, 137, 138, 0}}, +{(unsigned char*)"aring", {195, 165, 0}}, +{(unsigned char*)"ascr", {240, 157, 146, 182, 0}}, +{(unsigned char*)"ast", {42, 0}}, +{(unsigned char*)"asymp", {226, 137, 136, 0}}, +{(unsigned char*)"asympeq", {226, 137, 141, 0}}, +{(unsigned char*)"atilde", {195, 163, 0}}, +{(unsigned char*)"auml", {195, 164, 0}}, +{(unsigned char*)"awconint", {226, 136, 179, 0}}, +{(unsigned char*)"awint", {226, 168, 145, 0}}, +{(unsigned char*)"bNot", {226, 171, 173, 0}}, +{(unsigned char*)"backcong", {226, 137, 140, 0}}, +{(unsigned char*)"backepsilon", {207, 182, 0}}, +{(unsigned char*)"backprime", {226, 128, 181, 0}}, +{(unsigned char*)"backsim", {226, 136, 189, 0}}, +{(unsigned char*)"backsimeq", {226, 139, 141, 0}}, +{(unsigned char*)"barvee", {226, 138, 189, 0}}, +{(unsigned char*)"barwed", {226, 140, 133, 0}}, +{(unsigned char*)"barwedge", {226, 140, 133, 0}}, +{(unsigned char*)"bbrk", {226, 142, 181, 0}}, +{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}}, +{(unsigned char*)"bcong", {226, 137, 140, 0}}, +{(unsigned char*)"bcy", {208, 177, 0}}, +{(unsigned char*)"bdquo", {226, 128, 158, 0}}, +{(unsigned char*)"becaus", {226, 136, 181, 0}}, +{(unsigned char*)"because", {226, 136, 181, 0}}, +{(unsigned char*)"bemptyv", {226, 166, 176, 0}}, +{(unsigned char*)"bepsi", {207, 182, 0}}, +{(unsigned char*)"bernou", {226, 132, 172, 0}}, +{(unsigned char*)"beta", {206, 178, 0}}, +{(unsigned char*)"beth", {226, 132, 182, 0}}, +{(unsigned char*)"between", {226, 137, 172, 0}}, +{(unsigned char*)"bfr", {240, 157, 148, 159, 0}}, +{(unsigned char*)"bigcap", {226, 139, 130, 0}}, +{(unsigned char*)"bigcirc", {226, 151, 175, 0}}, +{(unsigned char*)"bigcup", {226, 139, 131, 0}}, +{(unsigned char*)"bigodot", {226, 168, 128, 0}}, +{(unsigned char*)"bigoplus", {226, 168, 129, 0}}, +{(unsigned char*)"bigotimes", {226, 168, 130, 0}}, +{(unsigned char*)"bigsqcup", {226, 168, 134, 0}}, +{(unsigned char*)"bigstar", {226, 152, 133, 0}}, +{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}}, +{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}}, +{(unsigned char*)"biguplus", {226, 168, 132, 0}}, +{(unsigned char*)"bigvee", {226, 139, 129, 0}}, +{(unsigned char*)"bigwedge", {226, 139, 128, 0}}, +{(unsigned char*)"bkarow", {226, 164, 141, 0}}, +{(unsigned char*)"blacklozenge", {226, 167, 171, 0}}, +{(unsigned char*)"blacksquare", {226, 150, 170, 0}}, +{(unsigned char*)"blacktriangle", {226, 150, 180, 0}}, +{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}}, +{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}}, +{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}}, +{(unsigned char*)"blank", {226, 144, 163, 0}}, +{(unsigned char*)"blk12", {226, 150, 146, 0}}, +{(unsigned char*)"blk14", {226, 150, 145, 0}}, +{(unsigned char*)"blk34", {226, 150, 147, 0}}, +{(unsigned char*)"block", {226, 150, 136, 0}}, +{(unsigned char*)"bne", {61, 226, 131, 165, 0}}, +{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}}, +{(unsigned char*)"bnot", {226, 140, 144, 0}}, +{(unsigned char*)"bopf", {240, 157, 149, 147, 0}}, +{(unsigned char*)"bot", {226, 138, 165, 0}}, +{(unsigned char*)"bottom", {226, 138, 165, 0}}, +{(unsigned char*)"bowtie", {226, 139, 136, 0}}, +{(unsigned char*)"boxDL", {226, 149, 151, 0}}, +{(unsigned char*)"boxDR", {226, 149, 148, 0}}, +{(unsigned char*)"boxDl", {226, 149, 150, 0}}, +{(unsigned char*)"boxDr", {226, 149, 147, 0}}, +{(unsigned char*)"boxH", {226, 149, 144, 0}}, +{(unsigned char*)"boxHD", {226, 149, 166, 0}}, +{(unsigned char*)"boxHU", {226, 149, 169, 0}}, +{(unsigned char*)"boxHd", {226, 149, 164, 0}}, +{(unsigned char*)"boxHu", {226, 149, 167, 0}}, +{(unsigned char*)"boxUL", {226, 149, 157, 0}}, +{(unsigned char*)"boxUR", {226, 149, 154, 0}}, +{(unsigned char*)"boxUl", {226, 149, 156, 0}}, +{(unsigned char*)"boxUr", {226, 149, 153, 0}}, +{(unsigned char*)"boxV", {226, 149, 145, 0}}, +{(unsigned char*)"boxVH", {226, 149, 172, 0}}, +{(unsigned char*)"boxVL", {226, 149, 163, 0}}, +{(unsigned char*)"boxVR", {226, 149, 160, 0}}, +{(unsigned char*)"boxVh", {226, 149, 171, 0}}, +{(unsigned char*)"boxVl", {226, 149, 162, 0}}, +{(unsigned char*)"boxVr", {226, 149, 159, 0}}, +{(unsigned char*)"boxbox", {226, 167, 137, 0}}, +{(unsigned char*)"boxdL", {226, 149, 149, 0}}, +{(unsigned char*)"boxdR", {226, 149, 146, 0}}, +{(unsigned char*)"boxdl", {226, 148, 144, 0}}, +{(unsigned char*)"boxdr", {226, 148, 140, 0}}, +{(unsigned char*)"boxh", {226, 148, 128, 0}}, +{(unsigned char*)"boxhD", {226, 149, 165, 0}}, +{(unsigned char*)"boxhU", {226, 149, 168, 0}}, +{(unsigned char*)"boxhd", {226, 148, 172, 0}}, +{(unsigned char*)"boxhu", {226, 148, 180, 0}}, +{(unsigned char*)"boxminus", {226, 138, 159, 0}}, +{(unsigned char*)"boxplus", {226, 138, 158, 0}}, +{(unsigned char*)"boxtimes", {226, 138, 160, 0}}, +{(unsigned char*)"boxuL", {226, 149, 155, 0}}, +{(unsigned char*)"boxuR", {226, 149, 152, 0}}, +{(unsigned char*)"boxul", {226, 148, 152, 0}}, +{(unsigned char*)"boxur", {226, 148, 148, 0}}, +{(unsigned char*)"boxv", {226, 148, 130, 0}}, +{(unsigned char*)"boxvH", {226, 149, 170, 0}}, +{(unsigned char*)"boxvL", {226, 149, 161, 0}}, +{(unsigned char*)"boxvR", {226, 149, 158, 0}}, +{(unsigned char*)"boxvh", {226, 148, 188, 0}}, +{(unsigned char*)"boxvl", {226, 148, 164, 0}}, +{(unsigned char*)"boxvr", {226, 148, 156, 0}}, +{(unsigned char*)"bprime", {226, 128, 181, 0}}, +{(unsigned char*)"breve", {203, 152, 0}}, +{(unsigned char*)"brvbar", {194, 166, 0}}, +{(unsigned char*)"bscr", {240, 157, 146, 183, 0}}, +{(unsigned char*)"bsemi", {226, 129, 143, 0}}, +{(unsigned char*)"bsim", {226, 136, 189, 0}}, +{(unsigned char*)"bsime", {226, 139, 141, 0}}, +{(unsigned char*)"bsol", {92, 0}}, +{(unsigned char*)"bsolb", {226, 167, 133, 0}}, +{(unsigned char*)"bsolhsub", {226, 159, 136, 0}}, +{(unsigned char*)"bull", {226, 128, 162, 0}}, +{(unsigned char*)"bullet", {226, 128, 162, 0}}, +{(unsigned char*)"bump", {226, 137, 142, 0}}, +{(unsigned char*)"bumpE", {226, 170, 174, 0}}, +{(unsigned char*)"bumpe", {226, 137, 143, 0}}, +{(unsigned char*)"bumpeq", {226, 137, 143, 0}}, +{(unsigned char*)"cacute", {196, 135, 0}}, +{(unsigned char*)"cap", {226, 136, 169, 0}}, +{(unsigned char*)"capand", {226, 169, 132, 0}}, +{(unsigned char*)"capbrcup", {226, 169, 137, 0}}, +{(unsigned char*)"capcap", {226, 169, 139, 0}}, +{(unsigned char*)"capcup", {226, 169, 135, 0}}, +{(unsigned char*)"capdot", {226, 169, 128, 0}}, +{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}}, +{(unsigned char*)"caret", {226, 129, 129, 0}}, +{(unsigned char*)"caron", {203, 135, 0}}, +{(unsigned char*)"ccaps", {226, 169, 141, 0}}, +{(unsigned char*)"ccaron", {196, 141, 0}}, +{(unsigned char*)"ccedil", {195, 167, 0}}, +{(unsigned char*)"ccirc", {196, 137, 0}}, +{(unsigned char*)"ccups", {226, 169, 140, 0}}, +{(unsigned char*)"ccupssm", {226, 169, 144, 0}}, +{(unsigned char*)"cdot", {196, 139, 0}}, +{(unsigned char*)"cedil", {194, 184, 0}}, +{(unsigned char*)"cemptyv", {226, 166, 178, 0}}, +{(unsigned char*)"cent", {194, 162, 0}}, +{(unsigned char*)"centerdot", {194, 183, 0}}, +{(unsigned char*)"cfr", {240, 157, 148, 160, 0}}, +{(unsigned char*)"chcy", {209, 135, 0}}, +{(unsigned char*)"check", {226, 156, 147, 0}}, +{(unsigned char*)"checkmark", {226, 156, 147, 0}}, +{(unsigned char*)"chi", {207, 135, 0}}, +{(unsigned char*)"cir", {226, 151, 139, 0}}, +{(unsigned char*)"cirE", {226, 167, 131, 0}}, +{(unsigned char*)"circ", {203, 134, 0}}, +{(unsigned char*)"circeq", {226, 137, 151, 0}}, +{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}}, +{(unsigned char*)"circlearrowright", {226, 134, 187, 0}}, +{(unsigned char*)"circledR", {194, 174, 0}}, +{(unsigned char*)"circledS", {226, 147, 136, 0}}, +{(unsigned char*)"circledast", {226, 138, 155, 0}}, +{(unsigned char*)"circledcirc", {226, 138, 154, 0}}, +{(unsigned char*)"circleddash", {226, 138, 157, 0}}, +{(unsigned char*)"cire", {226, 137, 151, 0}}, +{(unsigned char*)"cirfnint", {226, 168, 144, 0}}, +{(unsigned char*)"cirmid", {226, 171, 175, 0}}, +{(unsigned char*)"cirscir", {226, 167, 130, 0}}, +{(unsigned char*)"clubs", {226, 153, 163, 0}}, +{(unsigned char*)"clubsuit", {226, 153, 163, 0}}, +{(unsigned char*)"colon", {58, 0}}, +{(unsigned char*)"colone", {226, 137, 148, 0}}, +{(unsigned char*)"coloneq", {226, 137, 148, 0}}, +{(unsigned char*)"comma", {44, 0}}, +{(unsigned char*)"commat", {64, 0}}, +{(unsigned char*)"comp", {226, 136, 129, 0}}, +{(unsigned char*)"compfn", {226, 136, 152, 0}}, +{(unsigned char*)"complement", {226, 136, 129, 0}}, +{(unsigned char*)"complexes", {226, 132, 130, 0}}, +{(unsigned char*)"cong", {226, 137, 133, 0}}, +{(unsigned char*)"congdot", {226, 169, 173, 0}}, +{(unsigned char*)"conint", {226, 136, 174, 0}}, +{(unsigned char*)"copf", {240, 157, 149, 148, 0}}, +{(unsigned char*)"coprod", {226, 136, 144, 0}}, +{(unsigned char*)"copy", {194, 169, 0}}, +{(unsigned char*)"copysr", {226, 132, 151, 0}}, +{(unsigned char*)"crarr", {226, 134, 181, 0}}, +{(unsigned char*)"cross", {226, 156, 151, 0}}, +{(unsigned char*)"cscr", {240, 157, 146, 184, 0}}, +{(unsigned char*)"csub", {226, 171, 143, 0}}, +{(unsigned char*)"csube", {226, 171, 145, 0}}, +{(unsigned char*)"csup", {226, 171, 144, 0}}, +{(unsigned char*)"csupe", {226, 171, 146, 0}}, +{(unsigned char*)"ctdot", {226, 139, 175, 0}}, +{(unsigned char*)"cudarrl", {226, 164, 184, 0}}, +{(unsigned char*)"cudarrr", {226, 164, 181, 0}}, +{(unsigned char*)"cuepr", {226, 139, 158, 0}}, +{(unsigned char*)"cuesc", {226, 139, 159, 0}}, +{(unsigned char*)"cularr", {226, 134, 182, 0}}, +{(unsigned char*)"cularrp", {226, 164, 189, 0}}, +{(unsigned char*)"cup", {226, 136, 170, 0}}, +{(unsigned char*)"cupbrcap", {226, 169, 136, 0}}, +{(unsigned char*)"cupcap", {226, 169, 134, 0}}, +{(unsigned char*)"cupcup", {226, 169, 138, 0}}, +{(unsigned char*)"cupdot", {226, 138, 141, 0}}, +{(unsigned char*)"cupor", {226, 169, 133, 0}}, +{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}}, +{(unsigned char*)"curarr", {226, 134, 183, 0}}, +{(unsigned char*)"curarrm", {226, 164, 188, 0}}, +{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}}, +{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}}, +{(unsigned char*)"curlyvee", {226, 139, 142, 0}}, +{(unsigned char*)"curlywedge", {226, 139, 143, 0}}, +{(unsigned char*)"curren", {194, 164, 0}}, +{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}}, +{(unsigned char*)"curvearrowright", {226, 134, 183, 0}}, +{(unsigned char*)"cuvee", {226, 139, 142, 0}}, +{(unsigned char*)"cuwed", {226, 139, 143, 0}}, +{(unsigned char*)"cwconint", {226, 136, 178, 0}}, +{(unsigned char*)"cwint", {226, 136, 177, 0}}, +{(unsigned char*)"cylcty", {226, 140, 173, 0}}, +{(unsigned char*)"dArr", {226, 135, 147, 0}}, +{(unsigned char*)"dHar", {226, 165, 165, 0}}, +{(unsigned char*)"dagger", {226, 128, 160, 0}}, +{(unsigned char*)"daleth", {226, 132, 184, 0}}, +{(unsigned char*)"darr", {226, 134, 147, 0}}, +{(unsigned char*)"dash", {226, 128, 144, 0}}, +{(unsigned char*)"dashv", {226, 138, 163, 0}}, +{(unsigned char*)"dbkarow", {226, 164, 143, 0}}, +{(unsigned char*)"dblac", {203, 157, 0}}, +{(unsigned char*)"dcaron", {196, 143, 0}}, +{(unsigned char*)"dcy", {208, 180, 0}}, +{(unsigned char*)"dd", {226, 133, 134, 0}}, +{(unsigned char*)"ddagger", {226, 128, 161, 0}}, +{(unsigned char*)"ddarr", {226, 135, 138, 0}}, +{(unsigned char*)"ddotseq", {226, 169, 183, 0}}, +{(unsigned char*)"deg", {194, 176, 0}}, +{(unsigned char*)"delta", {206, 180, 0}}, +{(unsigned char*)"demptyv", {226, 166, 177, 0}}, +{(unsigned char*)"dfisht", {226, 165, 191, 0}}, +{(unsigned char*)"dfr", {240, 157, 148, 161, 0}}, +{(unsigned char*)"dharl", {226, 135, 131, 0}}, +{(unsigned char*)"dharr", {226, 135, 130, 0}}, +{(unsigned char*)"diam", {226, 139, 132, 0}}, +{(unsigned char*)"diamond", {226, 139, 132, 0}}, +{(unsigned char*)"diamondsuit", {226, 153, 166, 0}}, +{(unsigned char*)"diams", {226, 153, 166, 0}}, +{(unsigned char*)"die", {194, 168, 0}}, +{(unsigned char*)"digamma", {207, 157, 0}}, +{(unsigned char*)"disin", {226, 139, 178, 0}}, +{(unsigned char*)"div", {195, 183, 0}}, +{(unsigned char*)"divide", {195, 183, 0}}, +{(unsigned char*)"divideontimes", {226, 139, 135, 0}}, +{(unsigned char*)"divonx", {226, 139, 135, 0}}, +{(unsigned char*)"djcy", {209, 146, 0}}, +{(unsigned char*)"dlcorn", {226, 140, 158, 0}}, +{(unsigned char*)"dlcrop", {226, 140, 141, 0}}, +{(unsigned char*)"dollar", {36, 0}}, +{(unsigned char*)"dopf", {240, 157, 149, 149, 0}}, +{(unsigned char*)"dot", {203, 153, 0}}, +{(unsigned char*)"doteq", {226, 137, 144, 0}}, +{(unsigned char*)"doteqdot", {226, 137, 145, 0}}, +{(unsigned char*)"dotminus", {226, 136, 184, 0}}, +{(unsigned char*)"dotplus", {226, 136, 148, 0}}, +{(unsigned char*)"dotsquare", {226, 138, 161, 0}}, +{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}}, +{(unsigned char*)"downarrow", {226, 134, 147, 0}}, +{(unsigned char*)"downdownarrows", {226, 135, 138, 0}}, +{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}}, +{(unsigned char*)"downharpoonright", {226, 135, 130, 0}}, +{(unsigned char*)"drbkarow", {226, 164, 144, 0}}, +{(unsigned char*)"drcorn", {226, 140, 159, 0}}, +{(unsigned char*)"drcrop", {226, 140, 140, 0}}, +{(unsigned char*)"dscr", {240, 157, 146, 185, 0}}, +{(unsigned char*)"dscy", {209, 149, 0}}, +{(unsigned char*)"dsol", {226, 167, 182, 0}}, +{(unsigned char*)"dstrok", {196, 145, 0}}, +{(unsigned char*)"dtdot", {226, 139, 177, 0}}, +{(unsigned char*)"dtri", {226, 150, 191, 0}}, +{(unsigned char*)"dtrif", {226, 150, 190, 0}}, +{(unsigned char*)"duarr", {226, 135, 181, 0}}, +{(unsigned char*)"duhar", {226, 165, 175, 0}}, +{(unsigned char*)"dwangle", {226, 166, 166, 0}}, +{(unsigned char*)"dzcy", {209, 159, 0}}, +{(unsigned char*)"dzigrarr", {226, 159, 191, 0}}, +{(unsigned char*)"eDDot", {226, 169, 183, 0}}, +{(unsigned char*)"eDot", {226, 137, 145, 0}}, +{(unsigned char*)"eacute", {195, 169, 0}}, +{(unsigned char*)"easter", {226, 169, 174, 0}}, +{(unsigned char*)"ecaron", {196, 155, 0}}, +{(unsigned char*)"ecir", {226, 137, 150, 0}}, +{(unsigned char*)"ecirc", {195, 170, 0}}, +{(unsigned char*)"ecolon", {226, 137, 149, 0}}, +{(unsigned char*)"ecy", {209, 141, 0}}, +{(unsigned char*)"edot", {196, 151, 0}}, +{(unsigned char*)"ee", {226, 133, 135, 0}}, +{(unsigned char*)"efDot", {226, 137, 146, 0}}, +{(unsigned char*)"efr", {240, 157, 148, 162, 0}}, +{(unsigned char*)"eg", {226, 170, 154, 0}}, +{(unsigned char*)"egrave", {195, 168, 0}}, +{(unsigned char*)"egs", {226, 170, 150, 0}}, +{(unsigned char*)"egsdot", {226, 170, 152, 0}}, +{(unsigned char*)"el", {226, 170, 153, 0}}, +{(unsigned char*)"elinters", {226, 143, 167, 0}}, +{(unsigned char*)"ell", {226, 132, 147, 0}}, +{(unsigned char*)"els", {226, 170, 149, 0}}, +{(unsigned char*)"elsdot", {226, 170, 151, 0}}, +{(unsigned char*)"emacr", {196, 147, 0}}, +{(unsigned char*)"empty", {226, 136, 133, 0}}, +{(unsigned char*)"emptyset", {226, 136, 133, 0}}, +{(unsigned char*)"emptyv", {226, 136, 133, 0}}, +{(unsigned char*)"emsp", {226, 128, 131, 0}}, +{(unsigned char*)"emsp13", {226, 128, 132, 0}}, +{(unsigned char*)"emsp14", {226, 128, 133, 0}}, +{(unsigned char*)"eng", {197, 139, 0}}, +{(unsigned char*)"ensp", {226, 128, 130, 0}}, +{(unsigned char*)"eogon", {196, 153, 0}}, +{(unsigned char*)"eopf", {240, 157, 149, 150, 0}}, +{(unsigned char*)"epar", {226, 139, 149, 0}}, +{(unsigned char*)"eparsl", {226, 167, 163, 0}}, +{(unsigned char*)"eplus", {226, 169, 177, 0}}, +{(unsigned char*)"epsi", {206, 181, 0}}, +{(unsigned char*)"epsilon", {206, 181, 0}}, +{(unsigned char*)"epsiv", {207, 181, 0}}, +{(unsigned char*)"eqcirc", {226, 137, 150, 0}}, +{(unsigned char*)"eqcolon", {226, 137, 149, 0}}, +{(unsigned char*)"eqsim", {226, 137, 130, 0}}, +{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}}, +{(unsigned char*)"eqslantless", {226, 170, 149, 0}}, +{(unsigned char*)"equals", {61, 0}}, +{(unsigned char*)"equest", {226, 137, 159, 0}}, +{(unsigned char*)"equiv", {226, 137, 161, 0}}, +{(unsigned char*)"equivDD", {226, 169, 184, 0}}, +{(unsigned char*)"eqvparsl", {226, 167, 165, 0}}, +{(unsigned char*)"erDot", {226, 137, 147, 0}}, +{(unsigned char*)"erarr", {226, 165, 177, 0}}, +{(unsigned char*)"escr", {226, 132, 175, 0}}, +{(unsigned char*)"esdot", {226, 137, 144, 0}}, +{(unsigned char*)"esim", {226, 137, 130, 0}}, +{(unsigned char*)"eta", {206, 183, 0}}, +{(unsigned char*)"eth", {195, 176, 0}}, +{(unsigned char*)"euml", {195, 171, 0}}, +{(unsigned char*)"euro", {226, 130, 172, 0}}, +{(unsigned char*)"excl", {33, 0}}, +{(unsigned char*)"exist", {226, 136, 131, 0}}, +{(unsigned char*)"expectation", {226, 132, 176, 0}}, +{(unsigned char*)"exponentiale", {226, 133, 135, 0}}, +{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}}, +{(unsigned char*)"fcy", {209, 132, 0}}, +{(unsigned char*)"female", {226, 153, 128, 0}}, +{(unsigned char*)"ffilig", {239, 172, 131, 0}}, +{(unsigned char*)"fflig", {239, 172, 128, 0}}, +{(unsigned char*)"ffllig", {239, 172, 132, 0}}, +{(unsigned char*)"ffr", {240, 157, 148, 163, 0}}, +{(unsigned char*)"filig", {239, 172, 129, 0}}, +{(unsigned char*)"fjlig", {102, 106, 0}}, +{(unsigned char*)"flat", {226, 153, 173, 0}}, +{(unsigned char*)"fllig", {239, 172, 130, 0}}, +{(unsigned char*)"fltns", {226, 150, 177, 0}}, +{(unsigned char*)"fnof", {198, 146, 0}}, +{(unsigned char*)"fopf", {240, 157, 149, 151, 0}}, +{(unsigned char*)"forall", {226, 136, 128, 0}}, +{(unsigned char*)"fork", {226, 139, 148, 0}}, +{(unsigned char*)"forkv", {226, 171, 153, 0}}, +{(unsigned char*)"fpartint", {226, 168, 141, 0}}, +{(unsigned char*)"frac12", {194, 189, 0}}, +{(unsigned char*)"frac13", {226, 133, 147, 0}}, +{(unsigned char*)"frac14", {194, 188, 0}}, +{(unsigned char*)"frac15", {226, 133, 149, 0}}, +{(unsigned char*)"frac16", {226, 133, 153, 0}}, +{(unsigned char*)"frac18", {226, 133, 155, 0}}, +{(unsigned char*)"frac23", {226, 133, 148, 0}}, +{(unsigned char*)"frac25", {226, 133, 150, 0}}, +{(unsigned char*)"frac34", {194, 190, 0}}, +{(unsigned char*)"frac35", {226, 133, 151, 0}}, +{(unsigned char*)"frac38", {226, 133, 156, 0}}, +{(unsigned char*)"frac45", {226, 133, 152, 0}}, +{(unsigned char*)"frac56", {226, 133, 154, 0}}, +{(unsigned char*)"frac58", {226, 133, 157, 0}}, +{(unsigned char*)"frac78", {226, 133, 158, 0}}, +{(unsigned char*)"frasl", {226, 129, 132, 0}}, +{(unsigned char*)"frown", {226, 140, 162, 0}}, +{(unsigned char*)"fscr", {240, 157, 146, 187, 0}}, +{(unsigned char*)"gE", {226, 137, 167, 0}}, +{(unsigned char*)"gEl", {226, 170, 140, 0}}, +{(unsigned char*)"gacute", {199, 181, 0}}, +{(unsigned char*)"gamma", {206, 179, 0}}, +{(unsigned char*)"gammad", {207, 157, 0}}, +{(unsigned char*)"gap", {226, 170, 134, 0}}, +{(unsigned char*)"gbreve", {196, 159, 0}}, +{(unsigned char*)"gcirc", {196, 157, 0}}, +{(unsigned char*)"gcy", {208, 179, 0}}, +{(unsigned char*)"gdot", {196, 161, 0}}, +{(unsigned char*)"ge", {226, 137, 165, 0}}, +{(unsigned char*)"gel", {226, 139, 155, 0}}, +{(unsigned char*)"geq", {226, 137, 165, 0}}, +{(unsigned char*)"geqq", {226, 137, 167, 0}}, +{(unsigned char*)"geqslant", {226, 169, 190, 0}}, +{(unsigned char*)"ges", {226, 169, 190, 0}}, +{(unsigned char*)"gescc", {226, 170, 169, 0}}, +{(unsigned char*)"gesdot", {226, 170, 128, 0}}, +{(unsigned char*)"gesdoto", {226, 170, 130, 0}}, +{(unsigned char*)"gesdotol", {226, 170, 132, 0}}, +{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}}, +{(unsigned char*)"gesles", {226, 170, 148, 0}}, +{(unsigned char*)"gfr", {240, 157, 148, 164, 0}}, +{(unsigned char*)"gg", {226, 137, 171, 0}}, +{(unsigned char*)"ggg", {226, 139, 153, 0}}, +{(unsigned char*)"gimel", {226, 132, 183, 0}}, +{(unsigned char*)"gjcy", {209, 147, 0}}, +{(unsigned char*)"gl", {226, 137, 183, 0}}, +{(unsigned char*)"glE", {226, 170, 146, 0}}, +{(unsigned char*)"gla", {226, 170, 165, 0}}, +{(unsigned char*)"glj", {226, 170, 164, 0}}, +{(unsigned char*)"gnE", {226, 137, 169, 0}}, +{(unsigned char*)"gnap", {226, 170, 138, 0}}, +{(unsigned char*)"gnapprox", {226, 170, 138, 0}}, +{(unsigned char*)"gne", {226, 170, 136, 0}}, +{(unsigned char*)"gneq", {226, 170, 136, 0}}, +{(unsigned char*)"gneqq", {226, 137, 169, 0}}, +{(unsigned char*)"gnsim", {226, 139, 167, 0}}, +{(unsigned char*)"gopf", {240, 157, 149, 152, 0}}, +{(unsigned char*)"grave", {96, 0}}, +{(unsigned char*)"gscr", {226, 132, 138, 0}}, +{(unsigned char*)"gsim", {226, 137, 179, 0}}, +{(unsigned char*)"gsime", {226, 170, 142, 0}}, +{(unsigned char*)"gsiml", {226, 170, 144, 0}}, +{(unsigned char*)"gt", {62, 0}}, +{(unsigned char*)"gtcc", {226, 170, 167, 0}}, +{(unsigned char*)"gtcir", {226, 169, 186, 0}}, +{(unsigned char*)"gtdot", {226, 139, 151, 0}}, +{(unsigned char*)"gtlPar", {226, 166, 149, 0}}, +{(unsigned char*)"gtquest", {226, 169, 188, 0}}, +{(unsigned char*)"gtrapprox", {226, 170, 134, 0}}, +{(unsigned char*)"gtrarr", {226, 165, 184, 0}}, +{(unsigned char*)"gtrdot", {226, 139, 151, 0}}, +{(unsigned char*)"gtreqless", {226, 139, 155, 0}}, +{(unsigned char*)"gtreqqless", {226, 170, 140, 0}}, +{(unsigned char*)"gtrless", {226, 137, 183, 0}}, +{(unsigned char*)"gtrsim", {226, 137, 179, 0}}, +{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}}, +{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}}, +{(unsigned char*)"hArr", {226, 135, 148, 0}}, +{(unsigned char*)"hairsp", {226, 128, 138, 0}}, +{(unsigned char*)"half", {194, 189, 0}}, +{(unsigned char*)"hamilt", {226, 132, 139, 0}}, +{(unsigned char*)"hardcy", {209, 138, 0}}, +{(unsigned char*)"harr", {226, 134, 148, 0}}, +{(unsigned char*)"harrcir", {226, 165, 136, 0}}, +{(unsigned char*)"harrw", {226, 134, 173, 0}}, +{(unsigned char*)"hbar", {226, 132, 143, 0}}, +{(unsigned char*)"hcirc", {196, 165, 0}}, +{(unsigned char*)"hearts", {226, 153, 165, 0}}, +{(unsigned char*)"heartsuit", {226, 153, 165, 0}}, +{(unsigned char*)"hellip", {226, 128, 166, 0}}, +{(unsigned char*)"hercon", {226, 138, 185, 0}}, +{(unsigned char*)"hfr", {240, 157, 148, 165, 0}}, +{(unsigned char*)"hksearow", {226, 164, 165, 0}}, +{(unsigned char*)"hkswarow", {226, 164, 166, 0}}, +{(unsigned char*)"hoarr", {226, 135, 191, 0}}, +{(unsigned char*)"homtht", {226, 136, 187, 0}}, +{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}}, +{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}}, +{(unsigned char*)"hopf", {240, 157, 149, 153, 0}}, +{(unsigned char*)"horbar", {226, 128, 149, 0}}, +{(unsigned char*)"hscr", {240, 157, 146, 189, 0}}, +{(unsigned char*)"hslash", {226, 132, 143, 0}}, +{(unsigned char*)"hstrok", {196, 167, 0}}, +{(unsigned char*)"hybull", {226, 129, 131, 0}}, +{(unsigned char*)"hyphen", {226, 128, 144, 0}}, +{(unsigned char*)"iacute", {195, 173, 0}}, +{(unsigned char*)"ic", {226, 129, 163, 0}}, +{(unsigned char*)"icirc", {195, 174, 0}}, +{(unsigned char*)"icy", {208, 184, 0}}, +{(unsigned char*)"iecy", {208, 181, 0}}, +{(unsigned char*)"iexcl", {194, 161, 0}}, +{(unsigned char*)"iff", {226, 135, 148, 0}}, +{(unsigned char*)"ifr", {240, 157, 148, 166, 0}}, +{(unsigned char*)"igrave", {195, 172, 0}}, +{(unsigned char*)"ii", {226, 133, 136, 0}}, +{(unsigned char*)"iiiint", {226, 168, 140, 0}}, +{(unsigned char*)"iiint", {226, 136, 173, 0}}, +{(unsigned char*)"iinfin", {226, 167, 156, 0}}, +{(unsigned char*)"iiota", {226, 132, 169, 0}}, +{(unsigned char*)"ijlig", {196, 179, 0}}, +{(unsigned char*)"imacr", {196, 171, 0}}, +{(unsigned char*)"image", {226, 132, 145, 0}}, +{(unsigned char*)"imagline", {226, 132, 144, 0}}, +{(unsigned char*)"imagpart", {226, 132, 145, 0}}, +{(unsigned char*)"imath", {196, 177, 0}}, +{(unsigned char*)"imof", {226, 138, 183, 0}}, +{(unsigned char*)"imped", {198, 181, 0}}, +{(unsigned char*)"in", {226, 136, 136, 0}}, +{(unsigned char*)"incare", {226, 132, 133, 0}}, +{(unsigned char*)"infin", {226, 136, 158, 0}}, +{(unsigned char*)"infintie", {226, 167, 157, 0}}, +{(unsigned char*)"inodot", {196, 177, 0}}, +{(unsigned char*)"int", {226, 136, 171, 0}}, +{(unsigned char*)"intcal", {226, 138, 186, 0}}, +{(unsigned char*)"integers", {226, 132, 164, 0}}, +{(unsigned char*)"intercal", {226, 138, 186, 0}}, +{(unsigned char*)"intlarhk", {226, 168, 151, 0}}, +{(unsigned char*)"intprod", {226, 168, 188, 0}}, +{(unsigned char*)"iocy", {209, 145, 0}}, +{(unsigned char*)"iogon", {196, 175, 0}}, +{(unsigned char*)"iopf", {240, 157, 149, 154, 0}}, +{(unsigned char*)"iota", {206, 185, 0}}, +{(unsigned char*)"iprod", {226, 168, 188, 0}}, +{(unsigned char*)"iquest", {194, 191, 0}}, +{(unsigned char*)"iscr", {240, 157, 146, 190, 0}}, +{(unsigned char*)"isin", {226, 136, 136, 0}}, +{(unsigned char*)"isinE", {226, 139, 185, 0}}, +{(unsigned char*)"isindot", {226, 139, 181, 0}}, +{(unsigned char*)"isins", {226, 139, 180, 0}}, +{(unsigned char*)"isinsv", {226, 139, 179, 0}}, +{(unsigned char*)"isinv", {226, 136, 136, 0}}, +{(unsigned char*)"it", {226, 129, 162, 0}}, +{(unsigned char*)"itilde", {196, 169, 0}}, +{(unsigned char*)"iukcy", {209, 150, 0}}, +{(unsigned char*)"iuml", {195, 175, 0}}, +{(unsigned char*)"jcirc", {196, 181, 0}}, +{(unsigned char*)"jcy", {208, 185, 0}}, +{(unsigned char*)"jfr", {240, 157, 148, 167, 0}}, +{(unsigned char*)"jmath", {200, 183, 0}}, +{(unsigned char*)"jopf", {240, 157, 149, 155, 0}}, +{(unsigned char*)"jscr", {240, 157, 146, 191, 0}}, +{(unsigned char*)"jsercy", {209, 152, 0}}, +{(unsigned char*)"jukcy", {209, 148, 0}}, +{(unsigned char*)"kappa", {206, 186, 0}}, +{(unsigned char*)"kappav", {207, 176, 0}}, +{(unsigned char*)"kcedil", {196, 183, 0}}, +{(unsigned char*)"kcy", {208, 186, 0}}, +{(unsigned char*)"kfr", {240, 157, 148, 168, 0}}, +{(unsigned char*)"kgreen", {196, 184, 0}}, +{(unsigned char*)"khcy", {209, 133, 0}}, +{(unsigned char*)"kjcy", {209, 156, 0}}, +{(unsigned char*)"kopf", {240, 157, 149, 156, 0}}, +{(unsigned char*)"kscr", {240, 157, 147, 128, 0}}, +{(unsigned char*)"lAarr", {226, 135, 154, 0}}, +{(unsigned char*)"lArr", {226, 135, 144, 0}}, +{(unsigned char*)"lAtail", {226, 164, 155, 0}}, +{(unsigned char*)"lBarr", {226, 164, 142, 0}}, +{(unsigned char*)"lE", {226, 137, 166, 0}}, +{(unsigned char*)"lEg", {226, 170, 139, 0}}, +{(unsigned char*)"lHar", {226, 165, 162, 0}}, +{(unsigned char*)"lacute", {196, 186, 0}}, +{(unsigned char*)"laemptyv", {226, 166, 180, 0}}, +{(unsigned char*)"lagran", {226, 132, 146, 0}}, +{(unsigned char*)"lambda", {206, 187, 0}}, +{(unsigned char*)"lang", {226, 159, 168, 0}}, +{(unsigned char*)"langd", {226, 166, 145, 0}}, +{(unsigned char*)"langle", {226, 159, 168, 0}}, +{(unsigned char*)"lap", {226, 170, 133, 0}}, +{(unsigned char*)"laquo", {194, 171, 0}}, +{(unsigned char*)"larr", {226, 134, 144, 0}}, +{(unsigned char*)"larrb", {226, 135, 164, 0}}, +{(unsigned char*)"larrbfs", {226, 164, 159, 0}}, +{(unsigned char*)"larrfs", {226, 164, 157, 0}}, +{(unsigned char*)"larrhk", {226, 134, 169, 0}}, +{(unsigned char*)"larrlp", {226, 134, 171, 0}}, +{(unsigned char*)"larrpl", {226, 164, 185, 0}}, +{(unsigned char*)"larrsim", {226, 165, 179, 0}}, +{(unsigned char*)"larrtl", {226, 134, 162, 0}}, +{(unsigned char*)"lat", {226, 170, 171, 0}}, +{(unsigned char*)"latail", {226, 164, 153, 0}}, +{(unsigned char*)"late", {226, 170, 173, 0}}, +{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}}, +{(unsigned char*)"lbarr", {226, 164, 140, 0}}, +{(unsigned char*)"lbbrk", {226, 157, 178, 0}}, +{(unsigned char*)"lbrace", {123, 0}}, +{(unsigned char*)"lbrack", {91, 0}}, +{(unsigned char*)"lbrke", {226, 166, 139, 0}}, +{(unsigned char*)"lbrksld", {226, 166, 143, 0}}, +{(unsigned char*)"lbrkslu", {226, 166, 141, 0}}, +{(unsigned char*)"lcaron", {196, 190, 0}}, +{(unsigned char*)"lcedil", {196, 188, 0}}, +{(unsigned char*)"lceil", {226, 140, 136, 0}}, +{(unsigned char*)"lcub", {123, 0}}, +{(unsigned char*)"lcy", {208, 187, 0}}, +{(unsigned char*)"ldca", {226, 164, 182, 0}}, +{(unsigned char*)"ldquo", {226, 128, 156, 0}}, +{(unsigned char*)"ldquor", {226, 128, 158, 0}}, +{(unsigned char*)"ldrdhar", {226, 165, 167, 0}}, +{(unsigned char*)"ldrushar", {226, 165, 139, 0}}, +{(unsigned char*)"ldsh", {226, 134, 178, 0}}, +{(unsigned char*)"le", {226, 137, 164, 0}}, +{(unsigned char*)"leftarrow", {226, 134, 144, 0}}, +{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}}, +{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}}, +{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}}, +{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}}, +{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}}, +{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}}, +{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}}, +{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}}, +{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}}, +{(unsigned char*)"leg", {226, 139, 154, 0}}, +{(unsigned char*)"leq", {226, 137, 164, 0}}, +{(unsigned char*)"leqq", {226, 137, 166, 0}}, +{(unsigned char*)"leqslant", {226, 169, 189, 0}}, +{(unsigned char*)"les", {226, 169, 189, 0}}, +{(unsigned char*)"lescc", {226, 170, 168, 0}}, +{(unsigned char*)"lesdot", {226, 169, 191, 0}}, +{(unsigned char*)"lesdoto", {226, 170, 129, 0}}, +{(unsigned char*)"lesdotor", {226, 170, 131, 0}}, +{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}}, +{(unsigned char*)"lesges", {226, 170, 147, 0}}, +{(unsigned char*)"lessapprox", {226, 170, 133, 0}}, +{(unsigned char*)"lessdot", {226, 139, 150, 0}}, +{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}}, +{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}}, +{(unsigned char*)"lessgtr", {226, 137, 182, 0}}, +{(unsigned char*)"lesssim", {226, 137, 178, 0}}, +{(unsigned char*)"lfisht", {226, 165, 188, 0}}, +{(unsigned char*)"lfloor", {226, 140, 138, 0}}, +{(unsigned char*)"lfr", {240, 157, 148, 169, 0}}, +{(unsigned char*)"lg", {226, 137, 182, 0}}, +{(unsigned char*)"lgE", {226, 170, 145, 0}}, +{(unsigned char*)"lhard", {226, 134, 189, 0}}, +{(unsigned char*)"lharu", {226, 134, 188, 0}}, +{(unsigned char*)"lharul", {226, 165, 170, 0}}, +{(unsigned char*)"lhblk", {226, 150, 132, 0}}, +{(unsigned char*)"ljcy", {209, 153, 0}}, +{(unsigned char*)"ll", {226, 137, 170, 0}}, +{(unsigned char*)"llarr", {226, 135, 135, 0}}, +{(unsigned char*)"llcorner", {226, 140, 158, 0}}, +{(unsigned char*)"llhard", {226, 165, 171, 0}}, +{(unsigned char*)"lltri", {226, 151, 186, 0}}, +{(unsigned char*)"lmidot", {197, 128, 0}}, +{(unsigned char*)"lmoust", {226, 142, 176, 0}}, +{(unsigned char*)"lmoustache", {226, 142, 176, 0}}, +{(unsigned char*)"lnE", {226, 137, 168, 0}}, +{(unsigned char*)"lnap", {226, 170, 137, 0}}, +{(unsigned char*)"lnapprox", {226, 170, 137, 0}}, +{(unsigned char*)"lne", {226, 170, 135, 0}}, +{(unsigned char*)"lneq", {226, 170, 135, 0}}, +{(unsigned char*)"lneqq", {226, 137, 168, 0}}, +{(unsigned char*)"lnsim", {226, 139, 166, 0}}, +{(unsigned char*)"loang", {226, 159, 172, 0}}, +{(unsigned char*)"loarr", {226, 135, 189, 0}}, +{(unsigned char*)"lobrk", {226, 159, 166, 0}}, +{(unsigned char*)"longleftarrow", {226, 159, 181, 0}}, +{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}}, +{(unsigned char*)"longmapsto", {226, 159, 188, 0}}, +{(unsigned char*)"longrightarrow", {226, 159, 182, 0}}, +{(unsigned char*)"looparrowleft", {226, 134, 171, 0}}, +{(unsigned char*)"looparrowright", {226, 134, 172, 0}}, +{(unsigned char*)"lopar", {226, 166, 133, 0}}, +{(unsigned char*)"lopf", {240, 157, 149, 157, 0}}, +{(unsigned char*)"loplus", {226, 168, 173, 0}}, +{(unsigned char*)"lotimes", {226, 168, 180, 0}}, +{(unsigned char*)"lowast", {226, 136, 151, 0}}, +{(unsigned char*)"lowbar", {95, 0}}, +{(unsigned char*)"loz", {226, 151, 138, 0}}, +{(unsigned char*)"lozenge", {226, 151, 138, 0}}, +{(unsigned char*)"lozf", {226, 167, 171, 0}}, +{(unsigned char*)"lpar", {40, 0}}, +{(unsigned char*)"lparlt", {226, 166, 147, 0}}, +{(unsigned char*)"lrarr", {226, 135, 134, 0}}, +{(unsigned char*)"lrcorner", {226, 140, 159, 0}}, +{(unsigned char*)"lrhar", {226, 135, 139, 0}}, +{(unsigned char*)"lrhard", {226, 165, 173, 0}}, +{(unsigned char*)"lrm", {226, 128, 142, 0}}, +{(unsigned char*)"lrtri", {226, 138, 191, 0}}, +{(unsigned char*)"lsaquo", {226, 128, 185, 0}}, +{(unsigned char*)"lscr", {240, 157, 147, 129, 0}}, +{(unsigned char*)"lsh", {226, 134, 176, 0}}, +{(unsigned char*)"lsim", {226, 137, 178, 0}}, +{(unsigned char*)"lsime", {226, 170, 141, 0}}, +{(unsigned char*)"lsimg", {226, 170, 143, 0}}, +{(unsigned char*)"lsqb", {91, 0}}, +{(unsigned char*)"lsquo", {226, 128, 152, 0}}, +{(unsigned char*)"lsquor", {226, 128, 154, 0}}, +{(unsigned char*)"lstrok", {197, 130, 0}}, +{(unsigned char*)"lt", {60, 0}}, +{(unsigned char*)"ltcc", {226, 170, 166, 0}}, +{(unsigned char*)"ltcir", {226, 169, 185, 0}}, +{(unsigned char*)"ltdot", {226, 139, 150, 0}}, +{(unsigned char*)"lthree", {226, 139, 139, 0}}, +{(unsigned char*)"ltimes", {226, 139, 137, 0}}, +{(unsigned char*)"ltlarr", {226, 165, 182, 0}}, +{(unsigned char*)"ltquest", {226, 169, 187, 0}}, +{(unsigned char*)"ltrPar", {226, 166, 150, 0}}, +{(unsigned char*)"ltri", {226, 151, 131, 0}}, +{(unsigned char*)"ltrie", {226, 138, 180, 0}}, +{(unsigned char*)"ltrif", {226, 151, 130, 0}}, +{(unsigned char*)"lurdshar", {226, 165, 138, 0}}, +{(unsigned char*)"luruhar", {226, 165, 166, 0}}, +{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}}, +{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}}, +{(unsigned char*)"mDDot", {226, 136, 186, 0}}, +{(unsigned char*)"macr", {194, 175, 0}}, +{(unsigned char*)"male", {226, 153, 130, 0}}, +{(unsigned char*)"malt", {226, 156, 160, 0}}, +{(unsigned char*)"maltese", {226, 156, 160, 0}}, +{(unsigned char*)"map", {226, 134, 166, 0}}, +{(unsigned char*)"mapsto", {226, 134, 166, 0}}, +{(unsigned char*)"mapstodown", {226, 134, 167, 0}}, +{(unsigned char*)"mapstoleft", {226, 134, 164, 0}}, +{(unsigned char*)"mapstoup", {226, 134, 165, 0}}, +{(unsigned char*)"marker", {226, 150, 174, 0}}, +{(unsigned char*)"mcomma", {226, 168, 169, 0}}, +{(unsigned char*)"mcy", {208, 188, 0}}, +{(unsigned char*)"mdash", {226, 128, 148, 0}}, +{(unsigned char*)"measuredangle", {226, 136, 161, 0}}, +{(unsigned char*)"mfr", {240, 157, 148, 170, 0}}, +{(unsigned char*)"mho", {226, 132, 167, 0}}, +{(unsigned char*)"micro", {194, 181, 0}}, +{(unsigned char*)"mid", {226, 136, 163, 0}}, +{(unsigned char*)"midast", {42, 0}}, +{(unsigned char*)"midcir", {226, 171, 176, 0}}, +{(unsigned char*)"middot", {194, 183, 0}}, +{(unsigned char*)"minus", {226, 136, 146, 0}}, +{(unsigned char*)"minusb", {226, 138, 159, 0}}, +{(unsigned char*)"minusd", {226, 136, 184, 0}}, +{(unsigned char*)"minusdu", {226, 168, 170, 0}}, +{(unsigned char*)"mlcp", {226, 171, 155, 0}}, +{(unsigned char*)"mldr", {226, 128, 166, 0}}, +{(unsigned char*)"mnplus", {226, 136, 147, 0}}, +{(unsigned char*)"models", {226, 138, 167, 0}}, +{(unsigned char*)"mopf", {240, 157, 149, 158, 0}}, +{(unsigned char*)"mp", {226, 136, 147, 0}}, +{(unsigned char*)"mscr", {240, 157, 147, 130, 0}}, +{(unsigned char*)"mstpos", {226, 136, 190, 0}}, +{(unsigned char*)"mu", {206, 188, 0}}, +{(unsigned char*)"multimap", {226, 138, 184, 0}}, +{(unsigned char*)"mumap", {226, 138, 184, 0}}, +{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}}, +{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}}, +{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}}, +{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}}, +{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}}, +{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}}, +{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}}, +{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}}, +{(unsigned char*)"nRightarrow", {226, 135, 143, 0}}, +{(unsigned char*)"nVDash", {226, 138, 175, 0}}, +{(unsigned char*)"nVdash", {226, 138, 174, 0}}, +{(unsigned char*)"nabla", {226, 136, 135, 0}}, +{(unsigned char*)"nacute", {197, 132, 0}}, +{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}}, +{(unsigned char*)"nap", {226, 137, 137, 0}}, +{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}}, +{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}}, +{(unsigned char*)"napos", {197, 137, 0}}, +{(unsigned char*)"napprox", {226, 137, 137, 0}}, +{(unsigned char*)"natur", {226, 153, 174, 0}}, +{(unsigned char*)"natural", {226, 153, 174, 0}}, +{(unsigned char*)"naturals", {226, 132, 149, 0}}, +{(unsigned char*)"nbsp", {194, 160, 0}}, +{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}}, +{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}}, +{(unsigned char*)"ncap", {226, 169, 131, 0}}, +{(unsigned char*)"ncaron", {197, 136, 0}}, +{(unsigned char*)"ncedil", {197, 134, 0}}, +{(unsigned char*)"ncong", {226, 137, 135, 0}}, +{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}}, +{(unsigned char*)"ncup", {226, 169, 130, 0}}, +{(unsigned char*)"ncy", {208, 189, 0}}, +{(unsigned char*)"ndash", {226, 128, 147, 0}}, +{(unsigned char*)"ne", {226, 137, 160, 0}}, +{(unsigned char*)"neArr", {226, 135, 151, 0}}, +{(unsigned char*)"nearhk", {226, 164, 164, 0}}, +{(unsigned char*)"nearr", {226, 134, 151, 0}}, +{(unsigned char*)"nearrow", {226, 134, 151, 0}}, +{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}}, +{(unsigned char*)"nequiv", {226, 137, 162, 0}}, +{(unsigned char*)"nesear", {226, 164, 168, 0}}, +{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}}, +{(unsigned char*)"nexist", {226, 136, 132, 0}}, +{(unsigned char*)"nexists", {226, 136, 132, 0}}, +{(unsigned char*)"nfr", {240, 157, 148, 171, 0}}, +{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"nge", {226, 137, 177, 0}}, +{(unsigned char*)"ngeq", {226, 137, 177, 0}}, +{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"ngsim", {226, 137, 181, 0}}, +{(unsigned char*)"ngt", {226, 137, 175, 0}}, +{(unsigned char*)"ngtr", {226, 137, 175, 0}}, +{(unsigned char*)"nhArr", {226, 135, 142, 0}}, +{(unsigned char*)"nharr", {226, 134, 174, 0}}, +{(unsigned char*)"nhpar", {226, 171, 178, 0}}, +{(unsigned char*)"ni", {226, 136, 139, 0}}, +{(unsigned char*)"nis", {226, 139, 188, 0}}, +{(unsigned char*)"nisd", {226, 139, 186, 0}}, +{(unsigned char*)"niv", {226, 136, 139, 0}}, +{(unsigned char*)"njcy", {209, 154, 0}}, +{(unsigned char*)"nlArr", {226, 135, 141, 0}}, +{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}}, +{(unsigned char*)"nlarr", {226, 134, 154, 0}}, +{(unsigned char*)"nldr", {226, 128, 165, 0}}, +{(unsigned char*)"nle", {226, 137, 176, 0}}, +{(unsigned char*)"nleftarrow", {226, 134, 154, 0}}, +{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}}, +{(unsigned char*)"nleq", {226, 137, 176, 0}}, +{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}}, +{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"nless", {226, 137, 174, 0}}, +{(unsigned char*)"nlsim", {226, 137, 180, 0}}, +{(unsigned char*)"nlt", {226, 137, 174, 0}}, +{(unsigned char*)"nltri", {226, 139, 170, 0}}, +{(unsigned char*)"nltrie", {226, 139, 172, 0}}, +{(unsigned char*)"nmid", {226, 136, 164, 0}}, +{(unsigned char*)"nopf", {240, 157, 149, 159, 0}}, +{(unsigned char*)"not", {194, 172, 0}}, +{(unsigned char*)"notin", {226, 136, 137, 0}}, +{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}}, +{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}}, +{(unsigned char*)"notinva", {226, 136, 137, 0}}, +{(unsigned char*)"notinvb", {226, 139, 183, 0}}, +{(unsigned char*)"notinvc", {226, 139, 182, 0}}, +{(unsigned char*)"notni", {226, 136, 140, 0}}, +{(unsigned char*)"notniva", {226, 136, 140, 0}}, +{(unsigned char*)"notnivb", {226, 139, 190, 0}}, +{(unsigned char*)"notnivc", {226, 139, 189, 0}}, +{(unsigned char*)"npar", {226, 136, 166, 0}}, +{(unsigned char*)"nparallel", {226, 136, 166, 0}}, +{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}}, +{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}}, +{(unsigned char*)"npolint", {226, 168, 148, 0}}, +{(unsigned char*)"npr", {226, 138, 128, 0}}, +{(unsigned char*)"nprcue", {226, 139, 160, 0}}, +{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"nprec", {226, 138, 128, 0}}, +{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"nrArr", {226, 135, 143, 0}}, +{(unsigned char*)"nrarr", {226, 134, 155, 0}}, +{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}}, +{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}}, +{(unsigned char*)"nrightarrow", {226, 134, 155, 0}}, +{(unsigned char*)"nrtri", {226, 139, 171, 0}}, +{(unsigned char*)"nrtrie", {226, 139, 173, 0}}, +{(unsigned char*)"nsc", {226, 138, 129, 0}}, +{(unsigned char*)"nsccue", {226, 139, 161, 0}}, +{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"nscr", {240, 157, 147, 131, 0}}, +{(unsigned char*)"nshortmid", {226, 136, 164, 0}}, +{(unsigned char*)"nshortparallel", {226, 136, 166, 0}}, +{(unsigned char*)"nsim", {226, 137, 129, 0}}, +{(unsigned char*)"nsime", {226, 137, 132, 0}}, +{(unsigned char*)"nsimeq", {226, 137, 132, 0}}, +{(unsigned char*)"nsmid", {226, 136, 164, 0}}, +{(unsigned char*)"nspar", {226, 136, 166, 0}}, +{(unsigned char*)"nsqsube", {226, 139, 162, 0}}, +{(unsigned char*)"nsqsupe", {226, 139, 163, 0}}, +{(unsigned char*)"nsub", {226, 138, 132, 0}}, +{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}}, +{(unsigned char*)"nsube", {226, 138, 136, 0}}, +{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"nsubseteq", {226, 138, 136, 0}}, +{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}}, +{(unsigned char*)"nsucc", {226, 138, 129, 0}}, +{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"nsup", {226, 138, 133, 0}}, +{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}}, +{(unsigned char*)"nsupe", {226, 138, 137, 0}}, +{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"nsupseteq", {226, 138, 137, 0}}, +{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}}, +{(unsigned char*)"ntgl", {226, 137, 185, 0}}, +{(unsigned char*)"ntilde", {195, 177, 0}}, +{(unsigned char*)"ntlg", {226, 137, 184, 0}}, +{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}}, +{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}}, +{(unsigned char*)"ntriangleright", {226, 139, 171, 0}}, +{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}}, +{(unsigned char*)"nu", {206, 189, 0}}, +{(unsigned char*)"num", {35, 0}}, +{(unsigned char*)"numero", {226, 132, 150, 0}}, +{(unsigned char*)"numsp", {226, 128, 135, 0}}, +{(unsigned char*)"nvDash", {226, 138, 173, 0}}, +{(unsigned char*)"nvHarr", {226, 164, 132, 0}}, +{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}}, +{(unsigned char*)"nvdash", {226, 138, 172, 0}}, +{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}}, +{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}}, +{(unsigned char*)"nvinfin", {226, 167, 158, 0}}, +{(unsigned char*)"nvlArr", {226, 164, 130, 0}}, +{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}}, +{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}}, +{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}}, +{(unsigned char*)"nvrArr", {226, 164, 131, 0}}, +{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}}, +{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}}, +{(unsigned char*)"nwArr", {226, 135, 150, 0}}, +{(unsigned char*)"nwarhk", {226, 164, 163, 0}}, +{(unsigned char*)"nwarr", {226, 134, 150, 0}}, +{(unsigned char*)"nwarrow", {226, 134, 150, 0}}, +{(unsigned char*)"nwnear", {226, 164, 167, 0}}, +{(unsigned char*)"oS", {226, 147, 136, 0}}, +{(unsigned char*)"oacute", {195, 179, 0}}, +{(unsigned char*)"oast", {226, 138, 155, 0}}, +{(unsigned char*)"ocir", {226, 138, 154, 0}}, +{(unsigned char*)"ocirc", {195, 180, 0}}, +{(unsigned char*)"ocy", {208, 190, 0}}, +{(unsigned char*)"odash", {226, 138, 157, 0}}, +{(unsigned char*)"odblac", {197, 145, 0}}, +{(unsigned char*)"odiv", {226, 168, 184, 0}}, +{(unsigned char*)"odot", {226, 138, 153, 0}}, +{(unsigned char*)"odsold", {226, 166, 188, 0}}, +{(unsigned char*)"oelig", {197, 147, 0}}, +{(unsigned char*)"ofcir", {226, 166, 191, 0}}, +{(unsigned char*)"ofr", {240, 157, 148, 172, 0}}, +{(unsigned char*)"ogon", {203, 155, 0}}, +{(unsigned char*)"ograve", {195, 178, 0}}, +{(unsigned char*)"ogt", {226, 167, 129, 0}}, +{(unsigned char*)"ohbar", {226, 166, 181, 0}}, +{(unsigned char*)"ohm", {206, 169, 0}}, +{(unsigned char*)"oint", {226, 136, 174, 0}}, +{(unsigned char*)"olarr", {226, 134, 186, 0}}, +{(unsigned char*)"olcir", {226, 166, 190, 0}}, +{(unsigned char*)"olcross", {226, 166, 187, 0}}, +{(unsigned char*)"oline", {226, 128, 190, 0}}, +{(unsigned char*)"olt", {226, 167, 128, 0}}, +{(unsigned char*)"omacr", {197, 141, 0}}, +{(unsigned char*)"omega", {207, 137, 0}}, +{(unsigned char*)"omicron", {206, 191, 0}}, +{(unsigned char*)"omid", {226, 166, 182, 0}}, +{(unsigned char*)"ominus", {226, 138, 150, 0}}, +{(unsigned char*)"oopf", {240, 157, 149, 160, 0}}, +{(unsigned char*)"opar", {226, 166, 183, 0}}, +{(unsigned char*)"operp", {226, 166, 185, 0}}, +{(unsigned char*)"oplus", {226, 138, 149, 0}}, +{(unsigned char*)"or", {226, 136, 168, 0}}, +{(unsigned char*)"orarr", {226, 134, 187, 0}}, +{(unsigned char*)"ord", {226, 169, 157, 0}}, +{(unsigned char*)"order", {226, 132, 180, 0}}, +{(unsigned char*)"orderof", {226, 132, 180, 0}}, +{(unsigned char*)"ordf", {194, 170, 0}}, +{(unsigned char*)"ordm", {194, 186, 0}}, +{(unsigned char*)"origof", {226, 138, 182, 0}}, +{(unsigned char*)"oror", {226, 169, 150, 0}}, +{(unsigned char*)"orslope", {226, 169, 151, 0}}, +{(unsigned char*)"orv", {226, 169, 155, 0}}, +{(unsigned char*)"oscr", {226, 132, 180, 0}}, +{(unsigned char*)"oslash", {195, 184, 0}}, +{(unsigned char*)"osol", {226, 138, 152, 0}}, +{(unsigned char*)"otilde", {195, 181, 0}}, +{(unsigned char*)"otimes", {226, 138, 151, 0}}, +{(unsigned char*)"otimesas", {226, 168, 182, 0}}, +{(unsigned char*)"ouml", {195, 182, 0}}, +{(unsigned char*)"ovbar", {226, 140, 189, 0}}, +{(unsigned char*)"par", {226, 136, 165, 0}}, +{(unsigned char*)"para", {194, 182, 0}}, +{(unsigned char*)"parallel", {226, 136, 165, 0}}, +{(unsigned char*)"parsim", {226, 171, 179, 0}}, +{(unsigned char*)"parsl", {226, 171, 189, 0}}, +{(unsigned char*)"part", {226, 136, 130, 0}}, +{(unsigned char*)"pcy", {208, 191, 0}}, +{(unsigned char*)"percnt", {37, 0}}, +{(unsigned char*)"period", {46, 0}}, +{(unsigned char*)"permil", {226, 128, 176, 0}}, +{(unsigned char*)"perp", {226, 138, 165, 0}}, +{(unsigned char*)"pertenk", {226, 128, 177, 0}}, +{(unsigned char*)"pfr", {240, 157, 148, 173, 0}}, +{(unsigned char*)"phi", {207, 134, 0}}, +{(unsigned char*)"phiv", {207, 149, 0}}, +{(unsigned char*)"phmmat", {226, 132, 179, 0}}, +{(unsigned char*)"phone", {226, 152, 142, 0}}, +{(unsigned char*)"pi", {207, 128, 0}}, +{(unsigned char*)"pitchfork", {226, 139, 148, 0}}, +{(unsigned char*)"piv", {207, 150, 0}}, +{(unsigned char*)"planck", {226, 132, 143, 0}}, +{(unsigned char*)"planckh", {226, 132, 142, 0}}, +{(unsigned char*)"plankv", {226, 132, 143, 0}}, +{(unsigned char*)"plus", {43, 0}}, +{(unsigned char*)"plusacir", {226, 168, 163, 0}}, +{(unsigned char*)"plusb", {226, 138, 158, 0}}, +{(unsigned char*)"pluscir", {226, 168, 162, 0}}, +{(unsigned char*)"plusdo", {226, 136, 148, 0}}, +{(unsigned char*)"plusdu", {226, 168, 165, 0}}, +{(unsigned char*)"pluse", {226, 169, 178, 0}}, +{(unsigned char*)"plusmn", {194, 177, 0}}, +{(unsigned char*)"plussim", {226, 168, 166, 0}}, +{(unsigned char*)"plustwo", {226, 168, 167, 0}}, +{(unsigned char*)"pm", {194, 177, 0}}, +{(unsigned char*)"pointint", {226, 168, 149, 0}}, +{(unsigned char*)"popf", {240, 157, 149, 161, 0}}, +{(unsigned char*)"pound", {194, 163, 0}}, +{(unsigned char*)"pr", {226, 137, 186, 0}}, +{(unsigned char*)"prE", {226, 170, 179, 0}}, +{(unsigned char*)"prap", {226, 170, 183, 0}}, +{(unsigned char*)"prcue", {226, 137, 188, 0}}, +{(unsigned char*)"pre", {226, 170, 175, 0}}, +{(unsigned char*)"prec", {226, 137, 186, 0}}, +{(unsigned char*)"precapprox", {226, 170, 183, 0}}, +{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}}, +{(unsigned char*)"preceq", {226, 170, 175, 0}}, +{(unsigned char*)"precnapprox", {226, 170, 185, 0}}, +{(unsigned char*)"precneqq", {226, 170, 181, 0}}, +{(unsigned char*)"precnsim", {226, 139, 168, 0}}, +{(unsigned char*)"precsim", {226, 137, 190, 0}}, +{(unsigned char*)"prime", {226, 128, 178, 0}}, +{(unsigned char*)"primes", {226, 132, 153, 0}}, +{(unsigned char*)"prnE", {226, 170, 181, 0}}, +{(unsigned char*)"prnap", {226, 170, 185, 0}}, +{(unsigned char*)"prnsim", {226, 139, 168, 0}}, +{(unsigned char*)"prod", {226, 136, 143, 0}}, +{(unsigned char*)"profalar", {226, 140, 174, 0}}, +{(unsigned char*)"profline", {226, 140, 146, 0}}, +{(unsigned char*)"profsurf", {226, 140, 147, 0}}, +{(unsigned char*)"prop", {226, 136, 157, 0}}, +{(unsigned char*)"propto", {226, 136, 157, 0}}, +{(unsigned char*)"prsim", {226, 137, 190, 0}}, +{(unsigned char*)"prurel", {226, 138, 176, 0}}, +{(unsigned char*)"pscr", {240, 157, 147, 133, 0}}, +{(unsigned char*)"psi", {207, 136, 0}}, +{(unsigned char*)"puncsp", {226, 128, 136, 0}}, +{(unsigned char*)"qfr", {240, 157, 148, 174, 0}}, +{(unsigned char*)"qint", {226, 168, 140, 0}}, +{(unsigned char*)"qopf", {240, 157, 149, 162, 0}}, +{(unsigned char*)"qprime", {226, 129, 151, 0}}, +{(unsigned char*)"qscr", {240, 157, 147, 134, 0}}, +{(unsigned char*)"quaternions", {226, 132, 141, 0}}, +{(unsigned char*)"quatint", {226, 168, 150, 0}}, +{(unsigned char*)"quest", {63, 0}}, +{(unsigned char*)"questeq", {226, 137, 159, 0}}, +{(unsigned char*)"quot", {34, 0}}, +{(unsigned char*)"rAarr", {226, 135, 155, 0}}, +{(unsigned char*)"rArr", {226, 135, 146, 0}}, +{(unsigned char*)"rAtail", {226, 164, 156, 0}}, +{(unsigned char*)"rBarr", {226, 164, 143, 0}}, +{(unsigned char*)"rHar", {226, 165, 164, 0}}, +{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}}, +{(unsigned char*)"racute", {197, 149, 0}}, +{(unsigned char*)"radic", {226, 136, 154, 0}}, +{(unsigned char*)"raemptyv", {226, 166, 179, 0}}, +{(unsigned char*)"rang", {226, 159, 169, 0}}, +{(unsigned char*)"rangd", {226, 166, 146, 0}}, +{(unsigned char*)"range", {226, 166, 165, 0}}, +{(unsigned char*)"rangle", {226, 159, 169, 0}}, +{(unsigned char*)"raquo", {194, 187, 0}}, +{(unsigned char*)"rarr", {226, 134, 146, 0}}, +{(unsigned char*)"rarrap", {226, 165, 181, 0}}, +{(unsigned char*)"rarrb", {226, 135, 165, 0}}, +{(unsigned char*)"rarrbfs", {226, 164, 160, 0}}, +{(unsigned char*)"rarrc", {226, 164, 179, 0}}, +{(unsigned char*)"rarrfs", {226, 164, 158, 0}}, +{(unsigned char*)"rarrhk", {226, 134, 170, 0}}, +{(unsigned char*)"rarrlp", {226, 134, 172, 0}}, +{(unsigned char*)"rarrpl", {226, 165, 133, 0}}, +{(unsigned char*)"rarrsim", {226, 165, 180, 0}}, +{(unsigned char*)"rarrtl", {226, 134, 163, 0}}, +{(unsigned char*)"rarrw", {226, 134, 157, 0}}, +{(unsigned char*)"ratail", {226, 164, 154, 0}}, +{(unsigned char*)"ratio", {226, 136, 182, 0}}, +{(unsigned char*)"rationals", {226, 132, 154, 0}}, +{(unsigned char*)"rbarr", {226, 164, 141, 0}}, +{(unsigned char*)"rbbrk", {226, 157, 179, 0}}, +{(unsigned char*)"rbrace", {125, 0}}, +{(unsigned char*)"rbrack", {93, 0}}, +{(unsigned char*)"rbrke", {226, 166, 140, 0}}, +{(unsigned char*)"rbrksld", {226, 166, 142, 0}}, +{(unsigned char*)"rbrkslu", {226, 166, 144, 0}}, +{(unsigned char*)"rcaron", {197, 153, 0}}, +{(unsigned char*)"rcedil", {197, 151, 0}}, +{(unsigned char*)"rceil", {226, 140, 137, 0}}, +{(unsigned char*)"rcub", {125, 0}}, +{(unsigned char*)"rcy", {209, 128, 0}}, +{(unsigned char*)"rdca", {226, 164, 183, 0}}, +{(unsigned char*)"rdldhar", {226, 165, 169, 0}}, +{(unsigned char*)"rdquo", {226, 128, 157, 0}}, +{(unsigned char*)"rdquor", {226, 128, 157, 0}}, +{(unsigned char*)"rdsh", {226, 134, 179, 0}}, +{(unsigned char*)"real", {226, 132, 156, 0}}, +{(unsigned char*)"realine", {226, 132, 155, 0}}, +{(unsigned char*)"realpart", {226, 132, 156, 0}}, +{(unsigned char*)"reals", {226, 132, 157, 0}}, +{(unsigned char*)"rect", {226, 150, 173, 0}}, +{(unsigned char*)"reg", {194, 174, 0}}, +{(unsigned char*)"rfisht", {226, 165, 189, 0}}, +{(unsigned char*)"rfloor", {226, 140, 139, 0}}, +{(unsigned char*)"rfr", {240, 157, 148, 175, 0}}, +{(unsigned char*)"rhard", {226, 135, 129, 0}}, +{(unsigned char*)"rharu", {226, 135, 128, 0}}, +{(unsigned char*)"rharul", {226, 165, 172, 0}}, +{(unsigned char*)"rho", {207, 129, 0}}, +{(unsigned char*)"rhov", {207, 177, 0}}, +{(unsigned char*)"rightarrow", {226, 134, 146, 0}}, +{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}}, +{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}}, +{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}}, +{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}}, +{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}}, +{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}}, +{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}}, +{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}}, +{(unsigned char*)"ring", {203, 154, 0}}, +{(unsigned char*)"risingdotseq", {226, 137, 147, 0}}, +{(unsigned char*)"rlarr", {226, 135, 132, 0}}, +{(unsigned char*)"rlhar", {226, 135, 140, 0}}, +{(unsigned char*)"rlm", {226, 128, 143, 0}}, +{(unsigned char*)"rmoust", {226, 142, 177, 0}}, +{(unsigned char*)"rmoustache", {226, 142, 177, 0}}, +{(unsigned char*)"rnmid", {226, 171, 174, 0}}, +{(unsigned char*)"roang", {226, 159, 173, 0}}, +{(unsigned char*)"roarr", {226, 135, 190, 0}}, +{(unsigned char*)"robrk", {226, 159, 167, 0}}, +{(unsigned char*)"ropar", {226, 166, 134, 0}}, +{(unsigned char*)"ropf", {240, 157, 149, 163, 0}}, +{(unsigned char*)"roplus", {226, 168, 174, 0}}, +{(unsigned char*)"rotimes", {226, 168, 181, 0}}, +{(unsigned char*)"rpar", {41, 0}}, +{(unsigned char*)"rpargt", {226, 166, 148, 0}}, +{(unsigned char*)"rppolint", {226, 168, 146, 0}}, +{(unsigned char*)"rrarr", {226, 135, 137, 0}}, +{(unsigned char*)"rsaquo", {226, 128, 186, 0}}, +{(unsigned char*)"rscr", {240, 157, 147, 135, 0}}, +{(unsigned char*)"rsh", {226, 134, 177, 0}}, +{(unsigned char*)"rsqb", {93, 0}}, +{(unsigned char*)"rsquo", {226, 128, 153, 0}}, +{(unsigned char*)"rsquor", {226, 128, 153, 0}}, +{(unsigned char*)"rthree", {226, 139, 140, 0}}, +{(unsigned char*)"rtimes", {226, 139, 138, 0}}, +{(unsigned char*)"rtri", {226, 150, 185, 0}}, +{(unsigned char*)"rtrie", {226, 138, 181, 0}}, +{(unsigned char*)"rtrif", {226, 150, 184, 0}}, +{(unsigned char*)"rtriltri", {226, 167, 142, 0}}, +{(unsigned char*)"ruluhar", {226, 165, 168, 0}}, +{(unsigned char*)"rx", {226, 132, 158, 0}}, +{(unsigned char*)"sacute", {197, 155, 0}}, +{(unsigned char*)"sbquo", {226, 128, 154, 0}}, +{(unsigned char*)"sc", {226, 137, 187, 0}}, +{(unsigned char*)"scE", {226, 170, 180, 0}}, +{(unsigned char*)"scap", {226, 170, 184, 0}}, +{(unsigned char*)"scaron", {197, 161, 0}}, +{(unsigned char*)"sccue", {226, 137, 189, 0}}, +{(unsigned char*)"sce", {226, 170, 176, 0}}, +{(unsigned char*)"scedil", {197, 159, 0}}, +{(unsigned char*)"scirc", {197, 157, 0}}, +{(unsigned char*)"scnE", {226, 170, 182, 0}}, +{(unsigned char*)"scnap", {226, 170, 186, 0}}, +{(unsigned char*)"scnsim", {226, 139, 169, 0}}, +{(unsigned char*)"scpolint", {226, 168, 147, 0}}, +{(unsigned char*)"scsim", {226, 137, 191, 0}}, +{(unsigned char*)"scy", {209, 129, 0}}, +{(unsigned char*)"sdot", {226, 139, 133, 0}}, +{(unsigned char*)"sdotb", {226, 138, 161, 0}}, +{(unsigned char*)"sdote", {226, 169, 166, 0}}, +{(unsigned char*)"seArr", {226, 135, 152, 0}}, +{(unsigned char*)"searhk", {226, 164, 165, 0}}, +{(unsigned char*)"searr", {226, 134, 152, 0}}, +{(unsigned char*)"searrow", {226, 134, 152, 0}}, +{(unsigned char*)"sect", {194, 167, 0}}, +{(unsigned char*)"semi", {59, 0}}, +{(unsigned char*)"seswar", {226, 164, 169, 0}}, +{(unsigned char*)"setminus", {226, 136, 150, 0}}, +{(unsigned char*)"setmn", {226, 136, 150, 0}}, +{(unsigned char*)"sext", {226, 156, 182, 0}}, +{(unsigned char*)"sfr", {240, 157, 148, 176, 0}}, +{(unsigned char*)"sfrown", {226, 140, 162, 0}}, +{(unsigned char*)"sharp", {226, 153, 175, 0}}, +{(unsigned char*)"shchcy", {209, 137, 0}}, +{(unsigned char*)"shcy", {209, 136, 0}}, +{(unsigned char*)"shortmid", {226, 136, 163, 0}}, +{(unsigned char*)"shortparallel", {226, 136, 165, 0}}, +{(unsigned char*)"shy", {194, 173, 0}}, +{(unsigned char*)"sigma", {207, 131, 0}}, +{(unsigned char*)"sigmaf", {207, 130, 0}}, +{(unsigned char*)"sigmav", {207, 130, 0}}, +{(unsigned char*)"sim", {226, 136, 188, 0}}, +{(unsigned char*)"simdot", {226, 169, 170, 0}}, +{(unsigned char*)"sime", {226, 137, 131, 0}}, +{(unsigned char*)"simeq", {226, 137, 131, 0}}, +{(unsigned char*)"simg", {226, 170, 158, 0}}, +{(unsigned char*)"simgE", {226, 170, 160, 0}}, +{(unsigned char*)"siml", {226, 170, 157, 0}}, +{(unsigned char*)"simlE", {226, 170, 159, 0}}, +{(unsigned char*)"simne", {226, 137, 134, 0}}, +{(unsigned char*)"simplus", {226, 168, 164, 0}}, +{(unsigned char*)"simrarr", {226, 165, 178, 0}}, +{(unsigned char*)"slarr", {226, 134, 144, 0}}, +{(unsigned char*)"smallsetminus", {226, 136, 150, 0}}, +{(unsigned char*)"smashp", {226, 168, 179, 0}}, +{(unsigned char*)"smeparsl", {226, 167, 164, 0}}, +{(unsigned char*)"smid", {226, 136, 163, 0}}, +{(unsigned char*)"smile", {226, 140, 163, 0}}, +{(unsigned char*)"smt", {226, 170, 170, 0}}, +{(unsigned char*)"smte", {226, 170, 172, 0}}, +{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}}, +{(unsigned char*)"softcy", {209, 140, 0}}, +{(unsigned char*)"sol", {47, 0}}, +{(unsigned char*)"solb", {226, 167, 132, 0}}, +{(unsigned char*)"solbar", {226, 140, 191, 0}}, +{(unsigned char*)"sopf", {240, 157, 149, 164, 0}}, +{(unsigned char*)"spades", {226, 153, 160, 0}}, +{(unsigned char*)"spadesuit", {226, 153, 160, 0}}, +{(unsigned char*)"spar", {226, 136, 165, 0}}, +{(unsigned char*)"sqcap", {226, 138, 147, 0}}, +{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}}, +{(unsigned char*)"sqcup", {226, 138, 148, 0}}, +{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}}, +{(unsigned char*)"sqsub", {226, 138, 143, 0}}, +{(unsigned char*)"sqsube", {226, 138, 145, 0}}, +{(unsigned char*)"sqsubset", {226, 138, 143, 0}}, +{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}}, +{(unsigned char*)"sqsup", {226, 138, 144, 0}}, +{(unsigned char*)"sqsupe", {226, 138, 146, 0}}, +{(unsigned char*)"sqsupset", {226, 138, 144, 0}}, +{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}}, +{(unsigned char*)"squ", {226, 150, 161, 0}}, +{(unsigned char*)"square", {226, 150, 161, 0}}, +{(unsigned char*)"squarf", {226, 150, 170, 0}}, +{(unsigned char*)"squf", {226, 150, 170, 0}}, +{(unsigned char*)"srarr", {226, 134, 146, 0}}, +{(unsigned char*)"sscr", {240, 157, 147, 136, 0}}, +{(unsigned char*)"ssetmn", {226, 136, 150, 0}}, +{(unsigned char*)"ssmile", {226, 140, 163, 0}}, +{(unsigned char*)"sstarf", {226, 139, 134, 0}}, +{(unsigned char*)"star", {226, 152, 134, 0}}, +{(unsigned char*)"starf", {226, 152, 133, 0}}, +{(unsigned char*)"straightepsilon", {207, 181, 0}}, +{(unsigned char*)"straightphi", {207, 149, 0}}, +{(unsigned char*)"strns", {194, 175, 0}}, +{(unsigned char*)"sub", {226, 138, 130, 0}}, +{(unsigned char*)"subE", {226, 171, 133, 0}}, +{(unsigned char*)"subdot", {226, 170, 189, 0}}, +{(unsigned char*)"sube", {226, 138, 134, 0}}, +{(unsigned char*)"subedot", {226, 171, 131, 0}}, +{(unsigned char*)"submult", {226, 171, 129, 0}}, +{(unsigned char*)"subnE", {226, 171, 139, 0}}, +{(unsigned char*)"subne", {226, 138, 138, 0}}, +{(unsigned char*)"subplus", {226, 170, 191, 0}}, +{(unsigned char*)"subrarr", {226, 165, 185, 0}}, +{(unsigned char*)"subset", {226, 138, 130, 0}}, +{(unsigned char*)"subseteq", {226, 138, 134, 0}}, +{(unsigned char*)"subseteqq", {226, 171, 133, 0}}, +{(unsigned char*)"subsetneq", {226, 138, 138, 0}}, +{(unsigned char*)"subsetneqq", {226, 171, 139, 0}}, +{(unsigned char*)"subsim", {226, 171, 135, 0}}, +{(unsigned char*)"subsub", {226, 171, 149, 0}}, +{(unsigned char*)"subsup", {226, 171, 147, 0}}, +{(unsigned char*)"succ", {226, 137, 187, 0}}, +{(unsigned char*)"succapprox", {226, 170, 184, 0}}, +{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}}, +{(unsigned char*)"succeq", {226, 170, 176, 0}}, +{(unsigned char*)"succnapprox", {226, 170, 186, 0}}, +{(unsigned char*)"succneqq", {226, 170, 182, 0}}, +{(unsigned char*)"succnsim", {226, 139, 169, 0}}, +{(unsigned char*)"succsim", {226, 137, 191, 0}}, +{(unsigned char*)"sum", {226, 136, 145, 0}}, +{(unsigned char*)"sung", {226, 153, 170, 0}}, +{(unsigned char*)"sup", {226, 138, 131, 0}}, +{(unsigned char*)"sup1", {194, 185, 0}}, +{(unsigned char*)"sup2", {194, 178, 0}}, +{(unsigned char*)"sup3", {194, 179, 0}}, +{(unsigned char*)"supE", {226, 171, 134, 0}}, +{(unsigned char*)"supdot", {226, 170, 190, 0}}, +{(unsigned char*)"supdsub", {226, 171, 152, 0}}, +{(unsigned char*)"supe", {226, 138, 135, 0}}, +{(unsigned char*)"supedot", {226, 171, 132, 0}}, +{(unsigned char*)"suphsol", {226, 159, 137, 0}}, +{(unsigned char*)"suphsub", {226, 171, 151, 0}}, +{(unsigned char*)"suplarr", {226, 165, 187, 0}}, +{(unsigned char*)"supmult", {226, 171, 130, 0}}, +{(unsigned char*)"supnE", {226, 171, 140, 0}}, +{(unsigned char*)"supne", {226, 138, 139, 0}}, +{(unsigned char*)"supplus", {226, 171, 128, 0}}, +{(unsigned char*)"supset", {226, 138, 131, 0}}, +{(unsigned char*)"supseteq", {226, 138, 135, 0}}, +{(unsigned char*)"supseteqq", {226, 171, 134, 0}}, +{(unsigned char*)"supsetneq", {226, 138, 139, 0}}, +{(unsigned char*)"supsetneqq", {226, 171, 140, 0}}, +{(unsigned char*)"supsim", {226, 171, 136, 0}}, +{(unsigned char*)"supsub", {226, 171, 148, 0}}, +{(unsigned char*)"supsup", {226, 171, 150, 0}}, +{(unsigned char*)"swArr", {226, 135, 153, 0}}, +{(unsigned char*)"swarhk", {226, 164, 166, 0}}, +{(unsigned char*)"swarr", {226, 134, 153, 0}}, +{(unsigned char*)"swarrow", {226, 134, 153, 0}}, +{(unsigned char*)"swnwar", {226, 164, 170, 0}}, +{(unsigned char*)"szlig", {195, 159, 0}}, +{(unsigned char*)"target", {226, 140, 150, 0}}, +{(unsigned char*)"tau", {207, 132, 0}}, +{(unsigned char*)"tbrk", {226, 142, 180, 0}}, +{(unsigned char*)"tcaron", {197, 165, 0}}, +{(unsigned char*)"tcedil", {197, 163, 0}}, +{(unsigned char*)"tcy", {209, 130, 0}}, +{(unsigned char*)"tdot", {226, 131, 155, 0}}, +{(unsigned char*)"telrec", {226, 140, 149, 0}}, +{(unsigned char*)"tfr", {240, 157, 148, 177, 0}}, +{(unsigned char*)"there4", {226, 136, 180, 0}}, +{(unsigned char*)"therefore", {226, 136, 180, 0}}, +{(unsigned char*)"theta", {206, 184, 0}}, +{(unsigned char*)"thetasym", {207, 145, 0}}, +{(unsigned char*)"thetav", {207, 145, 0}}, +{(unsigned char*)"thickapprox", {226, 137, 136, 0}}, +{(unsigned char*)"thicksim", {226, 136, 188, 0}}, +{(unsigned char*)"thinsp", {226, 128, 137, 0}}, +{(unsigned char*)"thkap", {226, 137, 136, 0}}, +{(unsigned char*)"thksim", {226, 136, 188, 0}}, +{(unsigned char*)"thorn", {195, 190, 0}}, +{(unsigned char*)"tilde", {203, 156, 0}}, +{(unsigned char*)"times", {195, 151, 0}}, +{(unsigned char*)"timesb", {226, 138, 160, 0}}, +{(unsigned char*)"timesbar", {226, 168, 177, 0}}, +{(unsigned char*)"timesd", {226, 168, 176, 0}}, +{(unsigned char*)"tint", {226, 136, 173, 0}}, +{(unsigned char*)"toea", {226, 164, 168, 0}}, +{(unsigned char*)"top", {226, 138, 164, 0}}, +{(unsigned char*)"topbot", {226, 140, 182, 0}}, +{(unsigned char*)"topcir", {226, 171, 177, 0}}, +{(unsigned char*)"topf", {240, 157, 149, 165, 0}}, +{(unsigned char*)"topfork", {226, 171, 154, 0}}, +{(unsigned char*)"tosa", {226, 164, 169, 0}}, +{(unsigned char*)"tprime", {226, 128, 180, 0}}, +{(unsigned char*)"trade", {226, 132, 162, 0}}, +{(unsigned char*)"triangle", {226, 150, 181, 0}}, +{(unsigned char*)"triangledown", {226, 150, 191, 0}}, +{(unsigned char*)"triangleleft", {226, 151, 131, 0}}, +{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}}, +{(unsigned char*)"triangleq", {226, 137, 156, 0}}, +{(unsigned char*)"triangleright", {226, 150, 185, 0}}, +{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}}, +{(unsigned char*)"tridot", {226, 151, 172, 0}}, +{(unsigned char*)"trie", {226, 137, 156, 0}}, +{(unsigned char*)"triminus", {226, 168, 186, 0}}, +{(unsigned char*)"triplus", {226, 168, 185, 0}}, +{(unsigned char*)"trisb", {226, 167, 141, 0}}, +{(unsigned char*)"tritime", {226, 168, 187, 0}}, +{(unsigned char*)"trpezium", {226, 143, 162, 0}}, +{(unsigned char*)"tscr", {240, 157, 147, 137, 0}}, +{(unsigned char*)"tscy", {209, 134, 0}}, +{(unsigned char*)"tshcy", {209, 155, 0}}, +{(unsigned char*)"tstrok", {197, 167, 0}}, +{(unsigned char*)"twixt", {226, 137, 172, 0}}, +{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}}, +{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}}, +{(unsigned char*)"uArr", {226, 135, 145, 0}}, +{(unsigned char*)"uHar", {226, 165, 163, 0}}, +{(unsigned char*)"uacute", {195, 186, 0}}, +{(unsigned char*)"uarr", {226, 134, 145, 0}}, +{(unsigned char*)"ubrcy", {209, 158, 0}}, +{(unsigned char*)"ubreve", {197, 173, 0}}, +{(unsigned char*)"ucirc", {195, 187, 0}}, +{(unsigned char*)"ucy", {209, 131, 0}}, +{(unsigned char*)"udarr", {226, 135, 133, 0}}, +{(unsigned char*)"udblac", {197, 177, 0}}, +{(unsigned char*)"udhar", {226, 165, 174, 0}}, +{(unsigned char*)"ufisht", {226, 165, 190, 0}}, +{(unsigned char*)"ufr", {240, 157, 148, 178, 0}}, +{(unsigned char*)"ugrave", {195, 185, 0}}, +{(unsigned char*)"uharl", {226, 134, 191, 0}}, +{(unsigned char*)"uharr", {226, 134, 190, 0}}, +{(unsigned char*)"uhblk", {226, 150, 128, 0}}, +{(unsigned char*)"ulcorn", {226, 140, 156, 0}}, +{(unsigned char*)"ulcorner", {226, 140, 156, 0}}, +{(unsigned char*)"ulcrop", {226, 140, 143, 0}}, +{(unsigned char*)"ultri", {226, 151, 184, 0}}, +{(unsigned char*)"umacr", {197, 171, 0}}, +{(unsigned char*)"uml", {194, 168, 0}}, +{(unsigned char*)"uogon", {197, 179, 0}}, +{(unsigned char*)"uopf", {240, 157, 149, 166, 0}}, +{(unsigned char*)"uparrow", {226, 134, 145, 0}}, +{(unsigned char*)"updownarrow", {226, 134, 149, 0}}, +{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}}, +{(unsigned char*)"upharpoonright", {226, 134, 190, 0}}, +{(unsigned char*)"uplus", {226, 138, 142, 0}}, +{(unsigned char*)"upsi", {207, 133, 0}}, +{(unsigned char*)"upsih", {207, 146, 0}}, +{(unsigned char*)"upsilon", {207, 133, 0}}, +{(unsigned char*)"upuparrows", {226, 135, 136, 0}}, +{(unsigned char*)"urcorn", {226, 140, 157, 0}}, +{(unsigned char*)"urcorner", {226, 140, 157, 0}}, +{(unsigned char*)"urcrop", {226, 140, 142, 0}}, +{(unsigned char*)"uring", {197, 175, 0}}, +{(unsigned char*)"urtri", {226, 151, 185, 0}}, +{(unsigned char*)"uscr", {240, 157, 147, 138, 0}}, +{(unsigned char*)"utdot", {226, 139, 176, 0}}, +{(unsigned char*)"utilde", {197, 169, 0}}, +{(unsigned char*)"utri", {226, 150, 181, 0}}, +{(unsigned char*)"utrif", {226, 150, 180, 0}}, +{(unsigned char*)"uuarr", {226, 135, 136, 0}}, +{(unsigned char*)"uuml", {195, 188, 0}}, +{(unsigned char*)"uwangle", {226, 166, 167, 0}}, +{(unsigned char*)"vArr", {226, 135, 149, 0}}, +{(unsigned char*)"vBar", {226, 171, 168, 0}}, +{(unsigned char*)"vBarv", {226, 171, 169, 0}}, +{(unsigned char*)"vDash", {226, 138, 168, 0}}, +{(unsigned char*)"vangrt", {226, 166, 156, 0}}, +{(unsigned char*)"varepsilon", {207, 181, 0}}, +{(unsigned char*)"varkappa", {207, 176, 0}}, +{(unsigned char*)"varnothing", {226, 136, 133, 0}}, +{(unsigned char*)"varphi", {207, 149, 0}}, +{(unsigned char*)"varpi", {207, 150, 0}}, +{(unsigned char*)"varpropto", {226, 136, 157, 0}}, +{(unsigned char*)"varr", {226, 134, 149, 0}}, +{(unsigned char*)"varrho", {207, 177, 0}}, +{(unsigned char*)"varsigma", {207, 130, 0}}, +{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}}, +{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}}, +{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}}, +{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}}, +{(unsigned char*)"vartheta", {207, 145, 0}}, +{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}}, +{(unsigned char*)"vartriangleright", {226, 138, 179, 0}}, +{(unsigned char*)"vcy", {208, 178, 0}}, +{(unsigned char*)"vdash", {226, 138, 162, 0}}, +{(unsigned char*)"vee", {226, 136, 168, 0}}, +{(unsigned char*)"veebar", {226, 138, 187, 0}}, +{(unsigned char*)"veeeq", {226, 137, 154, 0}}, +{(unsigned char*)"vellip", {226, 139, 174, 0}}, +{(unsigned char*)"verbar", {124, 0}}, +{(unsigned char*)"vert", {124, 0}}, +{(unsigned char*)"vfr", {240, 157, 148, 179, 0}}, +{(unsigned char*)"vltri", {226, 138, 178, 0}}, +{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"vopf", {240, 157, 149, 167, 0}}, +{(unsigned char*)"vprop", {226, 136, 157, 0}}, +{(unsigned char*)"vrtri", {226, 138, 179, 0}}, +{(unsigned char*)"vscr", {240, 157, 147, 139, 0}}, +{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}}, +{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}}, +{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}}, +{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}}, +{(unsigned char*)"vzigzag", {226, 166, 154, 0}}, +{(unsigned char*)"wcirc", {197, 181, 0}}, +{(unsigned char*)"wedbar", {226, 169, 159, 0}}, +{(unsigned char*)"wedge", {226, 136, 167, 0}}, +{(unsigned char*)"wedgeq", {226, 137, 153, 0}}, +{(unsigned char*)"weierp", {226, 132, 152, 0}}, +{(unsigned char*)"wfr", {240, 157, 148, 180, 0}}, +{(unsigned char*)"wopf", {240, 157, 149, 168, 0}}, +{(unsigned char*)"wp", {226, 132, 152, 0}}, +{(unsigned char*)"wr", {226, 137, 128, 0}}, +{(unsigned char*)"wreath", {226, 137, 128, 0}}, +{(unsigned char*)"wscr", {240, 157, 147, 140, 0}}, +{(unsigned char*)"xcap", {226, 139, 130, 0}}, +{(unsigned char*)"xcirc", {226, 151, 175, 0}}, +{(unsigned char*)"xcup", {226, 139, 131, 0}}, +{(unsigned char*)"xdtri", {226, 150, 189, 0}}, +{(unsigned char*)"xfr", {240, 157, 148, 181, 0}}, +{(unsigned char*)"xhArr", {226, 159, 186, 0}}, +{(unsigned char*)"xharr", {226, 159, 183, 0}}, +{(unsigned char*)"xi", {206, 190, 0}}, +{(unsigned char*)"xlArr", {226, 159, 184, 0}}, +{(unsigned char*)"xlarr", {226, 159, 181, 0}}, +{(unsigned char*)"xmap", {226, 159, 188, 0}}, +{(unsigned char*)"xnis", {226, 139, 187, 0}}, +{(unsigned char*)"xodot", {226, 168, 128, 0}}, +{(unsigned char*)"xopf", {240, 157, 149, 169, 0}}, +{(unsigned char*)"xoplus", {226, 168, 129, 0}}, +{(unsigned char*)"xotime", {226, 168, 130, 0}}, +{(unsigned char*)"xrArr", {226, 159, 185, 0}}, +{(unsigned char*)"xrarr", {226, 159, 182, 0}}, +{(unsigned char*)"xscr", {240, 157, 147, 141, 0}}, +{(unsigned char*)"xsqcup", {226, 168, 134, 0}}, +{(unsigned char*)"xuplus", {226, 168, 132, 0}}, +{(unsigned char*)"xutri", {226, 150, 179, 0}}, +{(unsigned char*)"xvee", {226, 139, 129, 0}}, +{(unsigned char*)"xwedge", {226, 139, 128, 0}}, +{(unsigned char*)"yacute", {195, 189, 0}}, +{(unsigned char*)"yacy", {209, 143, 0}}, +{(unsigned char*)"ycirc", {197, 183, 0}}, +{(unsigned char*)"ycy", {209, 139, 0}}, +{(unsigned char*)"yen", {194, 165, 0}}, +{(unsigned char*)"yfr", {240, 157, 148, 182, 0}}, +{(unsigned char*)"yicy", {209, 151, 0}}, +{(unsigned char*)"yopf", {240, 157, 149, 170, 0}}, +{(unsigned char*)"yscr", {240, 157, 147, 142, 0}}, +{(unsigned char*)"yucy", {209, 142, 0}}, +{(unsigned char*)"yuml", {195, 191, 0}}, +{(unsigned char*)"zacute", {197, 186, 0}}, +{(unsigned char*)"zcaron", {197, 190, 0}}, +{(unsigned char*)"zcy", {208, 183, 0}}, +{(unsigned char*)"zdot", {197, 188, 0}}, +{(unsigned char*)"zeetrf", {226, 132, 168, 0}}, +{(unsigned char*)"zeta", {206, 182, 0}}, +{(unsigned char*)"zfr", {240, 157, 148, 183, 0}}, +{(unsigned char*)"zhcy", {208, 182, 0}}, +{(unsigned char*)"zigrarr", {226, 135, 157, 0}}, +{(unsigned char*)"zopf", {240, 157, 149, 171, 0}}, +{(unsigned char*)"zscr", {240, 157, 147, 143, 0}}, +{(unsigned char*)"zwj", {226, 128, 141, 0}}, +{(unsigned char*)"zwnj", {226, 128, 140, 0}}, +}; diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index e4cf8fe78b..002357d2e1 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -5,7 +5,7 @@ #include "buffer.h" #include "houdini.h" #include "utf8.h" -#include "entities.h" +#include "entities.inc" /* Binary tree lookup code for entities added by JGM */ diff --git a/tools/make_entities_h.py b/tools/make_entities_h.py deleted file mode 100644 index 48492c7680..0000000000 --- a/tools/make_entities_h.py +++ /dev/null @@ -1,45 +0,0 @@ -# Creates C data structures for binary lookup table of entities, -# using python's html5 entity data. -# Usage: python3 tools/make_entities_h.py > src/entities.h - -import html - -entities5 = html.entities.html5 - -# remove keys without semicolons. For some reason the list -# has duplicates of a few things, like auml, one with and one -# without a semicolon. -entities = sorted([(k[:-1], entities5[k].encode('utf-8')) for k in entities5.keys() if k[-1] == ';']) - -# Print out the header: -print("""#ifndef CMARK_ENTITIES_H -#define CMARK_ENTITIES_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct cmark_entity_node { - unsigned char *entity; - unsigned char bytes[8]; -}; - -#define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 31""") - -print("#define CMARK_NUM_ENTITIES " + str(len(entities))); - -print("\nstatic const struct cmark_entity_node cmark_entities[] = {"); - -for (ent, bs) in entities: - print('{(unsigned char*)"' + ent + '", {' + ', '.join(map(str, bs)) + ', 0}},') - -print("};\n"); - -print(""" -#ifdef __cplusplus -} -#endif - -#endif -""") diff --git a/tools/make_entities_inc.py b/tools/make_entities_inc.py new file mode 100644 index 0000000000..7ed307be5e --- /dev/null +++ b/tools/make_entities_inc.py @@ -0,0 +1,32 @@ +# Creates C data structures for binary lookup table of entities, +# using python's html5 entity data. +# Usage: python3 tools/make_entities_inc.py > src/entities.inc + +import html + +entities5 = html.entities.html5 + +# remove keys without semicolons. For some reason the list +# has duplicates of a few things, like auml, one with and one +# without a semicolon. +entities = sorted([(k[:-1], entities5[k].encode('utf-8')) for k in entities5.keys() if k[-1] == ';']) + +# Print out the header: +print("""/* Autogenerated by tools/make_headers_inc.py */ + +struct cmark_entity_node { + unsigned char *entity; + unsigned char bytes[8]; +}; + +#define CMARK_ENTITY_MIN_LENGTH 2 +#define CMARK_ENTITY_MAX_LENGTH 31""") + +print("#define CMARK_NUM_ENTITIES " + str(len(entities))); + +print("\nstatic const struct cmark_entity_node cmark_entities[] = {"); + +for (ent, bs) in entities: + print('{(unsigned char*)"' + ent + '", {' + ', '.join(map(str, bs)) + ', 0}},') + +print("};") -- cgit 0.0.5-2-1-g0f52 From 1632a5a121c531c1b4fafb1c2058e964174c95ad Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 09:13:50 -0700 Subject: Small changes to README and benchmark files. --- README.md | 9 ++++++--- benchmarks.md | 11 ++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ff0fa3f669..019493ac3a 100644 --- a/README.md +++ b/README.md @@ -19,11 +19,14 @@ documents. Advantages of this library: - **Portable.** The library and program are written in standard - C99 and have no external dependencies. It has been tested with + C99 and have no external dependencies. They have been tested with MSVC, gcc, tcc, and clang. -- **Fast.** Performance is very good, on par with the fastest - Markdown processors: see the [benchmarks]. +- **Fast.** cmark can render a Markdown version of *War and Peace* in + the blink of an eye (127 milliseconds on a ten year old laptop, + vs. 100-400 milliseconds for an eye blink). In our [benchmarks], + cmark is 10,000 times faster than the original `Markdown.pl`, and + on par with the very fastest available Markdown processors. - **Accurate.** The library passes all CommonMark conformance tests. diff --git a/benchmarks.md b/benchmarks.md index 5f6bed1239..df3fc9322d 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -1,6 +1,11 @@ # Benchmarks -Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. +Here are some benchmarks, run on an ancient Thinkpad running Intel +Core 2 Duo at 2GHz. The input text is a 11MB Markdown file built by +concatenating the Markdown sources of all the localizations of the +first edition of +[*Pro Git*](https://github.com/progit/progit/tree/master/en) by Scott +Chacon. |Implementation | Time (sec)| |-------------------|-----------:| @@ -19,10 +24,6 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz. To run these benchmarks, use `make bench PROG=/path/to/program`. -The input text is a 11MB Markdown file built by concatenating the -Markdown sources of all the localizations of the first edition of -[*Pro Git*](https://github.com/progit/progit/tree/master/en) by Scott Chacon. - `time` is used to measure execution speed. The reported time is the *difference* between the time to run the program with the benchmark input and the time to run it with no input. -- cgit 0.0.5-2-1-g0f52 From cc2effd9aca0eb3cc78810d10b99d3d7b7424ad9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 09:20:30 -0700 Subject: README: added 'make afl' instructions. --- README.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 019493ac3a..b9be9b1f18 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Advantages of this library: will be rendered on the server using `cmark`. - **Robust.** The library has been extensively fuzz-tested using - american fuzzy lop. The test suite includes pathological cases + [american fuzzy lop]. The test suite includes pathological cases that bring many other Markdown parsers to a crawl (for example, thousands-deep nested bracketed text or block quotes). @@ -99,10 +99,6 @@ To run a benchmark: make bench -To run a "fuzz test" against ten long randomly generated inputs: - - make fuzztest - To run a test for memory leaks using `valgrind`: make leakcheck @@ -111,6 +107,14 @@ To reformat source code using `astyle`: make astyle +To run a "fuzz test" against ten long randomly generated inputs: + + make fuzztest + +To do a more systematic fuzz test with [american fuzzy lop]: + + AFL_PATH=/path/to/afl_directory make afl + To make a release tarball and zip archive: make archive @@ -172,3 +176,4 @@ most of the C library's API and its test harness. [commonmark.js]: https://github.com/jgm/commonmark.js [Build Status]: https://img.shields.io/travis/jgm/cmark/master.svg?style=flat [Windows Build Status]: https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true +[american fuzzy lop]: http://lcamtuf.coredump.cx/afl/ -- cgit 0.0.5-2-1-g0f52 From 67ad9d17dfbe26e3ac526715d283e2667f28998c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 10:09:04 -0700 Subject: Added assertion to peek_char to catch any stray NULLs. Note that our current procedure for removing nulls is not working properly. --- src/inlines.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/inlines.c b/src/inlines.c index b43f774708..19e650c23f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -178,6 +178,9 @@ static inline int isbacktick(int c) static inline unsigned char peek_char(subject *subj) { + // NULL bytes should have been stripped out by now. If they're + // present, it's a programming error: + assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0)); return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; } -- cgit 0.0.5-2-1-g0f52 From a804ce024b8fdc849b59a74826e6aa4774f7ddd1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 10:15:57 -0700 Subject: Fixed off-by-one error in line splitting routine. This caused certain NULLs not to be replaced. Found my 'make fuzztest'. --- src/blocks.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 17288dfbe0..637385c9c1 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -506,7 +506,6 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, const unsigned char *eol; bufsize_t chunk_len; bool process = false; - for (eol = buffer; eol < end; ++eol) { if (S_is_line_end_char(*eol)) { if (eol < end && *eol == '\r') @@ -516,7 +515,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, process = true; break; } - if (*eol == '\0' && eol < end - 1) { + if (*eol == '\0' && eol < end) { break; } } -- cgit 0.0.5-2-1-g0f52 From 4459a62c666c6c4b4f46a093f7c9fe7a476534aa Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 12:29:03 -0700 Subject: Fixed emphasis/link parsing bug. Closes #59. --- src/inlines.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 19e650c23f..0eb24eb99f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -359,10 +359,10 @@ static void print_delimiters(subject *subj) delimiter *delim; delim = subj->last_delim; while (delim != NULL) { - printf("Item at %p: %d %d %d next(%p) prev(%p)\n", - delim, delim->delim_char, + printf("Item at stack pos %p, text pos %d: %d %d %d next(%p) prev(%p)\n", + (void*)delim, delim->position, delim->delim_char, delim->can_open, delim->can_close, - delim->next, delim->previous); + (void*)delim->next, (void*)delim->previous); delim = delim->previous; } } @@ -495,7 +495,8 @@ static void process_emphasis(subject *subj, delimiter *start_delim) // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; - while (opener != NULL && opener != potential_openers[closer->delim_char]) { + while (opener != NULL && opener != start_delim && + opener != potential_openers[closer->delim_char]) { if (opener->delim_char == closer->delim_char && opener->can_open) { opener_found = true; @@ -936,7 +937,7 @@ match: inl->type = is_image ? NODE_IMAGE : NODE_LINK; cmark_chunk_free(&inl->as.literal); inl->first_child = link_text; - process_emphasis(subj, opener->previous); + process_emphasis(subj, opener); inl->as.link.url = url; inl->as.link.title = title; inl->next = NULL; @@ -951,10 +952,10 @@ match: } parent->last_child = inl; - // process_emphasis will remove this delimiter and all later ones. // Now, if we have a link, we also want to deactivate earlier link // delimiters. (This code can be removed if we decide to allow links // inside links.) + remove_delimiter(subj, opener); if (!is_image) { opener = subj->last_delim; while (opener != NULL) { -- cgit 0.0.5-2-1-g0f52 From 54cf0c7d7d46b1cd90fa8f0ad0daf79ac9684978 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 17 Jun 2015 12:35:40 -0700 Subject: Added case for #59 to pathological_test.py. --- test/pathological_tests.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index fe5d2e42b6..f3aa5a2959 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -41,6 +41,9 @@ pathological = { "link openers and emph closers": (("[ a_" * 50000), re.compile("(\[ a_){50000}")), + "hard link/emph case": + ("**x [a*b**c*](d)", + re.compile("\\*\\*x
                            abc")), "nested brackets": (("[" * 50000) + "a" + ("]" * 50000), re.compile("\[{50000}a\]{50000}")), -- cgit 0.0.5-2-1-g0f52 From 4282352c5ee73bc7591306557143d9e908800f15 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 18 Jun 2015 10:58:47 -0700 Subject: Minor astyle reformatting. --- src/blocks.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 637385c9c1..43375a4c62 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -528,7 +528,7 @@ S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, if (parser->linebuf->size > 0) { cmark_strbuf_put(parser->linebuf, buffer, chunk_len); S_process_line(parser, parser->linebuf->ptr, - parser->linebuf->size); + parser->linebuf->size); cmark_strbuf_clear(parser->linebuf); } else { S_process_line(parser, buffer, chunk_len); @@ -669,11 +669,11 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { S_advance_offset(parser, &input, - container->as.list.marker_offset + - container->as.list.padding, true); + container->as.list.marker_offset + + container->as.list.padding, true); } else if (parser->blank) { S_advance_offset(parser, &input, - parser->first_nonspace - parser->offset, false); + parser->first_nonspace - parser->offset, false); } else { all_matched = false; } @@ -685,8 +685,8 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte S_advance_offset(parser, &input, CODE_INDENT, true); } else if (parser->blank) { S_advance_offset(parser, &input, - parser->first_nonspace - parser->offset, - false); + parser->first_nonspace - parser->offset, + false); } else { all_matched = false; } @@ -766,7 +766,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte } else if (!indented && (matched = scan_atx_header_start(&input, parser->first_nonspace))) { S_advance_offset(parser, &input, - parser->first_nonspace + matched - parser->offset, false); + parser->first_nonspace + matched - parser->offset, false); container = add_child(parser, container, NODE_HEADER, parser->offset + 1); bufsize_t hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); @@ -814,7 +814,7 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte // it's only now that we know the line is not part of a setext header: container = add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); container = finalize(parser, container); - S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); + S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); } else if ((matched = parse_list_marker(&input, parser->first_nonspace, &data)) && (!indented || container->type == NODE_LIST)) { -- cgit 0.0.5-2-1-g0f52 From 0a6a5181154cfaef300b6794f71388513a1e1281 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 18 Jun 2015 11:46:23 -0700 Subject: Rename start_delim -> stack_bottom. --- src/inlines.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 0eb24eb99f..48b1e22f2f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -468,7 +468,7 @@ static cmark_node* handle_period(subject* subj, bool smart) } } -static void process_emphasis(subject *subj, delimiter *start_delim) +static void process_emphasis(subject *subj, delimiter *stack_bottom) { delimiter *closer = subj->last_delim; delimiter *opener; @@ -477,13 +477,13 @@ static void process_emphasis(subject *subj, delimiter *start_delim) delimiter *potential_openers[128]; // initialize potential_openers: - potential_openers['*'] = start_delim; - potential_openers['_'] = start_delim; - potential_openers['\''] = start_delim; - potential_openers['"'] = start_delim; + potential_openers['*'] = stack_bottom; + potential_openers['_'] = stack_bottom; + potential_openers['\''] = stack_bottom; + potential_openers['"'] = stack_bottom; // move back to first relevant delim. - while (closer != NULL && closer->previous != start_delim) { + while (closer != NULL && closer->previous != stack_bottom) { closer = closer->previous; } @@ -495,7 +495,7 @@ static void process_emphasis(subject *subj, delimiter *start_delim) // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; - while (opener != NULL && opener != start_delim && + while (opener != NULL && opener != stack_bottom && opener != potential_openers[closer->delim_char]) { if (opener->delim_char == closer->delim_char && opener->can_open) { @@ -546,8 +546,8 @@ static void process_emphasis(subject *subj, delimiter *start_delim) closer = closer->next; } } - // free all delimiters in list until start_delim: - while (subj->last_delim != start_delim) { + // free all delimiters in list until stack_bottom: + while (subj->last_delim != stack_bottom) { remove_delimiter(subj, subj->last_delim); } } -- cgit 0.0.5-2-1-g0f52 From 0d8609cb073e86e0ec5511f54df663c7b7876391 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 18 Jun 2015 11:52:32 -0700 Subject: Rename potential_openers -> openers_bottom. --- src/inlines.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 48b1e22f2f..33220ff5e3 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -474,13 +474,13 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) delimiter *opener; delimiter *old_closer; bool opener_found; - delimiter *potential_openers[128]; + delimiter *openers_bottom[128]; - // initialize potential_openers: - potential_openers['*'] = stack_bottom; - potential_openers['_'] = stack_bottom; - potential_openers['\''] = stack_bottom; - potential_openers['"'] = stack_bottom; + // initialize openers_bottom: + openers_bottom['*'] = stack_bottom; + openers_bottom['_'] = stack_bottom; + openers_bottom['\''] = stack_bottom; + openers_bottom['"'] = stack_bottom; // move back to first relevant delim. while (closer != NULL && closer->previous != stack_bottom) { @@ -496,7 +496,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) opener = closer->previous; opener_found = false; while (opener != NULL && opener != stack_bottom && - opener != potential_openers[closer->delim_char]) { + opener != openers_bottom[closer->delim_char]) { if (opener->delim_char == closer->delim_char && opener->can_open) { opener_found = true; @@ -534,7 +534,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) } if (!opener_found) { // set lower bound for future searches for openers: - potential_openers[old_closer->delim_char] = closer; + openers_bottom[old_closer->delim_char] = closer; if (!old_closer->can_open) { // we can remove a closer that can't be an // opener, once we've seen there's no -- cgit 0.0.5-2-1-g0f52 From 04f9b7d03ea9a79f8b6f9a35deb4d703d80870f3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 18 Jun 2015 12:31:28 -0700 Subject: process_emphasis: Fixed setting lower bound to potential openers. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 33220ff5e3..f08e9ebcaa 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -534,7 +534,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) } if (!opener_found) { // set lower bound for future searches for openers: - openers_bottom[old_closer->delim_char] = closer; + openers_bottom[old_closer->delim_char] = old_closer->previous; if (!old_closer->can_open) { // we can remove a closer that can't be an // opener, once we've seen there's no -- cgit 0.0.5-2-1-g0f52 From 2f945071616d226296068e3c61b6de2e64c813cf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 18 Jun 2015 12:32:37 -0700 Subject: Added algorithm.md, informal explanation of emph/link parsing. --- algorithm.md | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 algorithm.md diff --git a/algorithm.md b/algorithm.md new file mode 100644 index 0000000000..88fe96e05c --- /dev/null +++ b/algorithm.md @@ -0,0 +1,116 @@ +Algorithm for parsing nested links, images, emphasis, and quotes +================================================================ + +When we're parsing inlines and we hit + +- a run of `*` or `_` characters +- a `[` or `![` + +we insert a text node with the literal content, and add a pointer +to this text node to the **delimiter stack.** + +The **delimiter stack** is a doubly linked list. Each +element contains a pointer to a text node, plus information about + +- the type of delimiter (`[`, `![`, `*`, `_`) +- the number of delimiters, +- whether the delimiter is "active" (all are active to start), and +- whether the delimiter is a potential opener, a potential closer, + or both. + +When we hit a `]` character, we call the `look_for_link_or_image` +procedure (see below). + +When we hit the end of the input, we call the `process_emphasis` +procedure (see below), with `stack_bottom` = NULL. + +`look_for_link_or_image` +------------------------ + +Starting at the top of the delimiter stack, we look backwards +through the stack for a `[` or `![` delimiter. + +If we don't find one, we return a literal text node `]`. + +If we do find one, but it's not *active*, we remove the inactive +delimiter from the stack, and return a literal text node `]`. + +If we find one and it's active, then we parse ahead to see if +we have an inline link/image, reference link/image, compact reference +link/image, or shortcut reference link/image. + +If we don't, then we remove the `[` or `![` delimiter from the +delimiter stack and return a literal text node `]`. + +If we do, then + +- We return a link or image node whose children are the inlines + after the text node pointed to by the opening delimiter. + +- We run `process_emphasis` on these inlines, with the `[` opener + as `stack_bottom`. + +- We remove the opening delimiter. + +- If we have a link (and not an image), we also set all + `[` delimiters before the opening delimiter to *inactive*. (This + will prevent us from getting links within links.) + + +`process_emphasis` +------------------ + +Parameter `stack_bottom` sets a lower bound to how far we +descend in the **delimiter stack**. If it is NULL, we can +go all the way to the bottom. Otherwise, we stop before +visiting `stack_bottom`. + +Let `current_position` point to the element on the delimiter +just above `stack_bottom` (or the first element if `stack_bottom` +is NULL). + +We keep track of the `openers_bottom` for each delimiter +type (`*`, `_`). Initialize this to `stack_bottom`. + +Then we repeat the following until we run out of potential +closers: + +- Move `current_position` forward in the delimiter stack (if needed) + until we find the first potential closer with delimiter `*` or `_`. + (This will be the potential closer closest + to the beginning of the input -- the first one in parse order.) + +- Now, look back in the stack (staying above `stack_bottom` and + the `openers_bottom` for this delimiter type) for the + first matching potential opener ("matching" means same delimiter). + +- If one is found: + + - Figure out whether we have emphasis or strong emphasis: + if both closer and opener spans have length >= 2, we have + strong, otherwise regular. + - Insert an emph or strong emph node accordingly, after + the text node corresponding to the opener. + - Remove delimiters between opener and closer from the delimiter + stack. + - Remove 1 (for regular emph) or 2 (for strong emph) delimiters + from the opening and closing text nodes. If they become empty + as a result, remove them and remove the corresponding element + of the delimiter stack. If the closing node is removed, reset + `current_position` to the next element in the stack. + +- If none in found: + + - Set `openers_bottom` to the element before `current_position`. + (We know that there are no openers for this kind of closer up to and + including this point, so this puts a lower bound on future searches.) + - If the closer at `current_position` is not a potential opener, + remove it from the delimiter stack (since we know it can't + be a closer either). + - Advance `current_position` to the next element in the stack. + +- Repeat. + +- After we're done, remove all delimiters above `stack_bottom` from the + delimiter stack. + -- cgit 0.0.5-2-1-g0f52 From 06b355f5a97bd5fb19cfad7e8065d5e8a6c37bce Mon Sep 17 00:00:00 2001 From: Andrius Bentkus Date: Thu, 25 Jun 2015 11:14:00 +0200 Subject: Changed version variables to functions. This is easier to access using ffi, since some languages, like C# like to use only function interfaces for accessing library functionality. fixes #60 --- api_test/main.c | 4 ++-- man/man3/cmark.3 | 18 +++--------------- src/cmark.c | 11 +++++++++-- src/cmark.h | 4 ++-- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 666af4d9e1..104371c543 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -55,8 +55,8 @@ test_continuation_byte(test_batch_runner *runner, const char *utf8); static void version(test_batch_runner *runner) { - INT_EQ(runner, cmark_version, CMARK_VERSION, "cmark_version"); - STR_EQ(runner, cmark_version_string, CMARK_VERSION_STRING, + INT_EQ(runner, cmark_version(), CMARK_VERSION, "cmark_version"); + STR_EQ(runner, cmark_version_string(), CMARK_VERSION_STRING, "cmark_version_string"); } diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index aa254b0252..6edac7bea9 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "June 16, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 25, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -556,13 +556,7 @@ sequences with the replacement character U+FFFD. Version information .PP -.nf -\fC -.RS 0n -extern const int cmark_version; -.RE -\f[] -.fi +\fIint\f[] \fBcmark_version\f[](\fI\f[]) .PP The library version as integer for runtime checks. Also available as @@ -577,13 +571,7 @@ Bits 0\-7 contain the patchlevel. In hexadecimal format, the number 0x010203 represents version 1.2.3. .PP -.nf -\fC -.RS 0n -extern const char cmark_version_string[]; -.RE -\f[] -.fi +\fIconst char *\f[] \fBcmark_version_string\f[](\fI\f[]) .PP The library version string for runtime checks. Also available as diff --git a/src/cmark.c b/src/cmark.c index 35765b17a6..ca9807b725 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -6,8 +6,15 @@ #include "cmark.h" #include "buffer.h" -const int cmark_version = CMARK_VERSION; -const char cmark_version_string[] = CMARK_VERSION_STRING; +int cmark_version() +{ + return CMARK_VERSION; +} + +const char *cmark_version_string() +{ + return CMARK_VERSION_STRING; +} char *cmark_markdown_to_html(const char *text, size_t len, int options) { diff --git a/src/cmark.h b/src/cmark.h index 4ff1ca0d77..192290c125 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -525,13 +525,13 @@ char *cmark_render_commonmark(cmark_node *root, int options, int width); * In hexadecimal format, the number 0x010203 represents version 1.2.3. */ CMARK_EXPORT -extern const int cmark_version; +int cmark_version(); /** The library version string for runtime checks. Also available as * macro CMARK_VERSION_STRING for compile time checks. */ CMARK_EXPORT -extern const char cmark_version_string[]; +const char *cmark_version_string(); /** # AUTHORS * -- cgit 0.0.5-2-1-g0f52 From 496cfe0330300f9c6c214d376f12fb9f3eb9632a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 1 Jul 2015 15:23:36 -0700 Subject: html renderer: properly split info on first space char. See jgm/commonmark.js#54. --- src/html.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/html.c b/src/html.c index 69e2d23c6f..8cf883565a 100644 --- a/src/html.c +++ b/src/html.c @@ -2,7 +2,7 @@ #include #include #include - +#include "cmark_ctype.h" #include "config.h" #include "cmark.h" #include "node.h" @@ -156,7 +156,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } else { bufsize_t first_tag = 0; while (first_tag < node->as.code.info.len && - node->as.code.info.data[first_tag] != ' ') { + !cmark_isspace(node->as.code.info.data[first_tag])) { first_tag += 1; } -- cgit 0.0.5-2-1-g0f52 From 4e6e6b185c73075309a676fa8cc8535e9b28cde1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 3 Jul 2015 20:41:16 -0700 Subject: `spec_test.py`: changed default to `spec.txt` (not `test/spec.txt`). This doesn't matter, since we specify the argument anyway. But it brings this into sync with the version in CommonMark. --- test/spec_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index 2ca4b607d8..be11f121cb 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -13,7 +13,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description='Run cmark tests.') parser.add_argument('-p', '--program', dest='program', nargs='?', default=None, help='program to test') - parser.add_argument('-s', '--spec', dest='spec', nargs='?', default='test/spec.txt', + parser.add_argument('-s', '--spec', dest='spec', nargs='?', default='spec.txt', help='path to spec') parser.add_argument('-P', '--pattern', dest='pattern', nargs='?', default=None, help='limit to sections matching regex pattern') -- cgit 0.0.5-2-1-g0f52 From 61999187556690dbb837f4049d14d51760978a97 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 3 Jul 2015 21:25:29 -0700 Subject: Use utf-8 aware re2c. --- Makefile | 3 +- src/scanners.c | 20396 +++++++++++++++++++++++++++++++----------------------- src/scanners.re | 1 + 3 files changed, 11637 insertions(+), 8763 deletions(-) diff --git a/Makefile b/Makefile index d1dc9ae2e9..f11431c554 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,8 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re false; \ ;; \ esac - re2c --case-insensitive -b -i --no-generation-date -o $@ $< + re2c --case-insensitive -b -i --no-generation-date -8 \ + --encoding-policy substitute -o $@ $< # We include entities.inc in the repository, so normally this # doesn't need to be regenerated: diff --git a/src/scanners.c b/src/scanners.c index 10af6d98f4..6355ebcccb 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.6 */ +/* Generated by re2c 0.14.3 */ #include #include "chunk.h" #include "scanners.h" @@ -27,62 +27,124 @@ bufsize_t _scan_scheme(const unsigned char *p) { unsigned char yych; - yych = *p; - switch (yych) { - case '\n': goto yy2; - case 'A': - case 'a': goto yy6; - case 'B': - case 'b': goto yy24; - case 'C': - case 'c': goto yy3; - case 'D': - case 'd': goto yy4; - case 'E': - case 'e': goto yy25; - case 'F': - case 'f': goto yy7; - case 'G': - case 'g': goto yy8; - case 'H': - case 'h': goto yy9; - case 'I': - case 'i': goto yy10; - case 'J': - case 'j': goto yy5; - case 'K': - case 'k': goto yy26; - case 'L': - case 'l': goto yy11; - case 'M': - case 'm': goto yy12; - case 'N': - case 'n': goto yy13; - case 'O': - case 'o': goto yy14; - case 'P': - case 'p': goto yy15; - case 'Q': - case 'q': goto yy27; - case 'R': - case 'r': goto yy16; - case 'S': - case 's': goto yy17; - case 'T': - case 't': goto yy18; - case 'U': - case 'u': goto yy19; - case 'V': - case 'v': goto yy20; - case 'W': - case 'w': goto yy21; - case 'X': - case 'x': goto yy22; - case 'Y': - case 'y': goto yy28; - case 'Z': - case 'z': goto yy23; - default: goto yy29; + yych = *(marker = p); + if (yych <= 'c') { + if (yych <= 'M') { + if (yych <= 'E') { + if (yych <= 'A') { + if (yych == '\n') goto yy2; + if (yych <= '@') goto yy29; + goto yy6; + } else { + if (yych <= 'B') goto yy24; + if (yych <= 'C') goto yy3; + if (yych <= 'D') goto yy4; + goto yy25; + } + } else { + if (yych <= 'I') { + if (yych <= 'F') goto yy7; + if (yych <= 'G') goto yy8; + if (yych <= 'H') goto yy9; + goto yy10; + } else { + if (yych <= 'J') goto yy5; + if (yych <= 'K') goto yy26; + if (yych <= 'L') goto yy11; + goto yy12; + } + } + } else { + if (yych <= 'U') { + if (yych <= 'Q') { + if (yych <= 'N') goto yy13; + if (yych <= 'O') goto yy14; + if (yych <= 'P') goto yy15; + goto yy27; + } else { + if (yych <= 'R') goto yy16; + if (yych <= 'S') goto yy17; + if (yych <= 'T') goto yy18; + goto yy19; + } + } else { + if (yych <= 'Y') { + if (yych <= 'V') goto yy20; + if (yych <= 'W') goto yy21; + if (yych <= 'X') goto yy22; + goto yy28; + } else { + if (yych <= '`') { + if (yych <= 'Z') goto yy23; + goto yy29; + } else { + if (yych <= 'a') goto yy6; + if (yych <= 'b') goto yy24; + goto yy3; + } + } + } + } + } else { + if (yych <= 't') { + if (yych <= 'k') { + if (yych <= 'g') { + if (yych <= 'd') goto yy4; + if (yych <= 'e') goto yy25; + if (yych <= 'f') goto yy7; + goto yy8; + } else { + if (yych <= 'h') goto yy9; + if (yych <= 'i') goto yy10; + if (yych <= 'j') goto yy5; + goto yy26; + } + } else { + if (yych <= 'o') { + if (yych <= 'l') goto yy11; + if (yych <= 'm') goto yy12; + if (yych <= 'n') goto yy13; + goto yy14; + } else { + if (yych <= 'q') { + if (yych <= 'p') goto yy15; + goto yy27; + } else { + if (yych <= 'r') goto yy16; + if (yych <= 's') goto yy17; + goto yy18; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= 'x') { + if (yych <= 'u') goto yy19; + if (yych <= 'v') goto yy20; + if (yych <= 'w') goto yy21; + goto yy22; + } else { + if (yych <= 'y') goto yy28; + if (yych <= 'z') goto yy23; + if (yych <= 0x7F) goto yy29; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy30; + if (yych <= 0xE0) goto yy32; + if (yych <= 0xEC) goto yy33; + goto yy37; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy33; + goto yy34; + } else { + if (yych <= 0xF3) goto yy35; + if (yych <= 0xF4) goto yy36; + } + } + } + } } yy2: { return 0; } @@ -90,50 +152,50 @@ yy3: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy440; + case 'a': goto yy447; case 'H': - case 'h': goto yy439; + case 'h': goto yy446; case 'I': - case 'i': goto yy442; + case 'i': goto yy449; case 'O': - case 'o': goto yy438; + case 'o': goto yy445; case 'R': - case 'r': goto yy441; + case 'r': goto yy448; case 'V': - case 'v': goto yy437; + case 'v': goto yy444; default: goto yy2; } yy4: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy413; + case 'a': goto yy420; case 'I': - case 'i': goto yy412; + case 'i': goto yy419; case 'L': - case 'l': goto yy410; + case 'l': goto yy417; case 'N': - case 'n': goto yy411; + case 'n': goto yy418; case 'O': - case 'o': goto yy414; + case 'o': goto yy421; case 'T': - case 't': goto yy409; + case 't': goto yy416; case 'V': - case 'v': goto yy408; + case 'v': goto yy415; default: goto yy2; } yy5: yych = *(marker = ++p); if (yych <= 'M') { - if (yych == 'A') goto yy400; + if (yych == 'A') goto yy407; if (yych <= 'L') goto yy2; - goto yy399; + goto yy406; } else { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy400; + goto yy407; } else { - if (yych == 'm') goto yy399; + if (yych == 'm') goto yy406; goto yy2; } } @@ -141,48 +203,48 @@ yy6: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy381; + case 'a': goto yy388; case 'B': - case 'b': goto yy380; + case 'b': goto yy387; case 'C': - case 'c': goto yy379; + case 'c': goto yy386; case 'D': - case 'd': goto yy378; + case 'd': goto yy385; case 'F': - case 'f': goto yy377; + case 'f': goto yy384; case 'I': - case 'i': goto yy376; + case 'i': goto yy383; case 'P': - case 'p': goto yy375; + case 'p': goto yy382; case 'T': - case 't': goto yy374; + case 't': goto yy381; case 'W': - case 'w': goto yy34; + case 'w': goto yy41; default: goto yy2; } yy7: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'E') { - if (yych == 'A') goto yy361; + if (yych == 'A') goto yy368; if (yych <= 'D') goto yy2; - goto yy360; + goto yy367; } else { - if (yych == 'I') goto yy359; + if (yych == 'I') goto yy366; if (yych <= 'S') goto yy2; - goto yy362; + goto yy369; } } else { if (yych <= 'e') { - if (yych == 'a') goto yy361; + if (yych == 'a') goto yy368; if (yych <= 'd') goto yy2; - goto yy360; + goto yy367; } else { if (yych <= 'i') { if (yych <= 'h') goto yy2; - goto yy359; + goto yy366; } else { - if (yych == 't') goto yy362; + if (yych == 't') goto yy369; goto yy2; } } @@ -191,15 +253,15 @@ yy8: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy344; + case 'e': goto yy351; case 'G': - case 'g': goto yy34; + case 'g': goto yy41; case 'I': - case 'i': goto yy342; + case 'i': goto yy349; case 'O': - case 'o': goto yy343; + case 'o': goto yy350; case 'T': - case 't': goto yy341; + case 't': goto yy348; default: goto yy2; } yy9: @@ -207,18 +269,18 @@ yy9: if (yych <= 'S') { if (yych <= '3') { if (yych <= '2') goto yy2; - goto yy337; + goto yy344; } else { - if (yych == 'C') goto yy335; + if (yych == 'C') goto yy342; goto yy2; } } else { if (yych <= 'c') { - if (yych <= 'T') goto yy336; + if (yych <= 'T') goto yy343; if (yych <= 'b') goto yy2; - goto yy335; + goto yy342; } else { - if (yych == 't') goto yy336; + if (yych == 't') goto yy343; goto yy2; } } @@ -226,33 +288,33 @@ yy10: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy317; + case 'a': goto yy324; case 'C': - case 'c': goto yy314; + case 'c': goto yy321; case 'M': - case 'm': goto yy316; + case 'm': goto yy323; case 'N': - case 'n': goto yy315; + case 'n': goto yy322; case 'P': - case 'p': goto yy313; + case 'p': goto yy320; case 'R': - case 'r': goto yy312; + case 'r': goto yy319; case 'T': - case 't': goto yy311; + case 't': goto yy318; default: goto yy2; } yy11: yych = *(marker = ++p); if (yych <= 'D') { - if (yych == 'A') goto yy305; + if (yych == 'A') goto yy312; if (yych <= 'C') goto yy2; - goto yy304; + goto yy311; } else { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy305; + goto yy312; } else { - if (yych == 'd') goto yy304; + if (yych == 'd') goto yy311; goto yy2; } } @@ -260,50 +322,50 @@ yy12: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy271; + case 'a': goto yy278; case 'E': - case 'e': goto yy270; + case 'e': goto yy277; case 'I': - case 'i': goto yy273; + case 'i': goto yy280; case 'M': - case 'm': goto yy269; + case 'm': goto yy276; case 'S': - case 's': goto yy268; + case 's': goto yy275; case 'T': - case 't': goto yy272; + case 't': goto yy279; case 'U': - case 'u': goto yy267; + case 'u': goto yy274; case 'V': - case 'v': goto yy266; + case 'v': goto yy273; default: goto yy2; } yy13: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy261; + case 'e': goto yy268; case 'F': - case 'f': goto yy260; + case 'f': goto yy267; case 'I': - case 'i': goto yy259; + case 'i': goto yy266; case 'N': - case 'n': goto yy258; + case 'n': goto yy265; case 'O': - case 'o': goto yy257; + case 'o': goto yy264; default: goto yy2; } yy14: yych = *(marker = ++p); if (yych <= 'P') { - if (yych == 'I') goto yy243; + if (yych == 'I') goto yy250; if (yych <= 'O') goto yy2; - goto yy244; + goto yy251; } else { if (yych <= 'i') { if (yych <= 'h') goto yy2; - goto yy243; + goto yy250; } else { - if (yych == 'p') goto yy244; + if (yych == 'p') goto yy251; goto yy2; } } @@ -311,35 +373,35 @@ yy15: yych = *(marker = ++p); if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'A') goto yy225; + if (yych == 'A') goto yy232; if (yych <= 'K') goto yy2; - goto yy224; + goto yy231; } else { if (yych <= 'O') { if (yych <= 'N') goto yy2; - goto yy226; + goto yy233; } else { if (yych <= 'Q') goto yy2; - if (yych <= 'R') goto yy223; - goto yy222; + if (yych <= 'R') goto yy230; + goto yy229; } } } else { if (yych <= 'n') { if (yych <= 'a') { if (yych <= '`') goto yy2; - goto yy225; + goto yy232; } else { - if (yych == 'l') goto yy224; + if (yych == 'l') goto yy231; goto yy2; } } else { if (yych <= 'q') { - if (yych <= 'o') goto yy226; + if (yych <= 'o') goto yy233; goto yy2; } else { - if (yych <= 'r') goto yy223; - if (yych <= 's') goto yy222; + if (yych <= 'r') goto yy230; + if (yych <= 's') goto yy229; goto yy2; } } @@ -348,23 +410,23 @@ yy16: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'L') { - if (yych == 'E') goto yy212; + if (yych == 'E') goto yy219; goto yy2; } else { - if (yych <= 'M') goto yy211; + if (yych <= 'M') goto yy218; if (yych <= 'R') goto yy2; - if (yych <= 'S') goto yy210; - goto yy209; + if (yych <= 'S') goto yy217; + goto yy216; } } else { if (yych <= 'm') { - if (yych == 'e') goto yy212; + if (yych == 'e') goto yy219; if (yych <= 'l') goto yy2; - goto yy211; + goto yy218; } else { if (yych <= 'r') goto yy2; - if (yych <= 's') goto yy210; - if (yych <= 't') goto yy209; + if (yych <= 's') goto yy217; + if (yych <= 't') goto yy216; goto yy2; } } @@ -372,75 +434,75 @@ yy17: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy165; + case 'e': goto yy172; case 'F': - case 'f': goto yy164; + case 'f': goto yy171; case 'G': - case 'g': goto yy163; + case 'g': goto yy170; case 'H': - case 'h': goto yy168; + case 'h': goto yy175; case 'I': - case 'i': goto yy167; + case 'i': goto yy174; case 'K': - case 'k': goto yy162; + case 'k': goto yy169; case 'M': - case 'm': goto yy161; + case 'm': goto yy168; case 'N': - case 'n': goto yy166; + case 'n': goto yy173; case 'O': - case 'o': goto yy160; + case 'o': goto yy167; case 'P': - case 'p': goto yy159; + case 'p': goto yy166; case 'S': - case 's': goto yy158; + case 's': goto yy165; case 'T': - case 't': goto yy157; + case 't': goto yy164; case 'V': - case 'v': goto yy156; + case 'v': goto yy163; default: goto yy2; } yy18: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy132; + case 'a': goto yy139; case 'E': - case 'e': goto yy128; + case 'e': goto yy135; case 'F': - case 'f': goto yy131; + case 'f': goto yy138; case 'H': - case 'h': goto yy127; + case 'h': goto yy134; case 'I': - case 'i': goto yy129; + case 'i': goto yy136; case 'N': - case 'n': goto yy130; + case 'n': goto yy137; case 'V': - case 'v': goto yy34; + case 'v': goto yy41; default: goto yy2; } yy19: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'N') { - if (yych == 'D') goto yy119; + if (yych == 'D') goto yy126; if (yych <= 'M') goto yy2; - goto yy118; + goto yy125; } else { - if (yych == 'R') goto yy120; + if (yych == 'R') goto yy127; if (yych <= 'S') goto yy2; - goto yy117; + goto yy124; } } else { if (yych <= 'n') { - if (yych == 'd') goto yy119; + if (yych == 'd') goto yy126; if (yych <= 'm') goto yy2; - goto yy118; + goto yy125; } else { if (yych <= 'r') { if (yych <= 'q') goto yy2; - goto yy120; + goto yy127; } else { - if (yych == 't') goto yy117; + if (yych == 't') goto yy124; goto yy2; } } @@ -448,15 +510,15 @@ yy19: yy20: yych = *(marker = ++p); if (yych <= 'I') { - if (yych == 'E') goto yy101; + if (yych == 'E') goto yy108; if (yych <= 'H') goto yy2; - goto yy100; + goto yy107; } else { if (yych <= 'e') { if (yych <= 'd') goto yy2; - goto yy101; + goto yy108; } else { - if (yych == 'i') goto yy100; + if (yych == 'i') goto yy107; goto yy2; } } @@ -464,22 +526,22 @@ yy21: yych = *(marker = ++p); if (yych <= 'Y') { if (yych <= 'R') { - if (yych == 'E') goto yy90; + if (yych == 'E') goto yy97; goto yy2; } else { - if (yych <= 'S') goto yy91; - if (yych <= 'T') goto yy89; + if (yych <= 'S') goto yy98; + if (yych <= 'T') goto yy96; if (yych <= 'X') goto yy2; - goto yy88; + goto yy95; } } else { if (yych <= 's') { - if (yych == 'e') goto yy90; + if (yych == 'e') goto yy97; if (yych <= 'r') goto yy2; - goto yy91; + goto yy98; } else { - if (yych <= 't') goto yy89; - if (yych == 'y') goto yy88; + if (yych <= 't') goto yy96; + if (yych == 'y') goto yy95; goto yy2; } } @@ -487,193 +549,227 @@ yy22: yych = *(marker = ++p); if (yych <= 'R') { if (yych <= 'F') { - if (yych == 'C') goto yy67; + if (yych == 'C') goto yy74; if (yych <= 'E') goto yy2; - goto yy65; + goto yy72; } else { - if (yych == 'M') goto yy66; + if (yych == 'M') goto yy73; if (yych <= 'Q') goto yy2; - goto yy64; + goto yy71; } } else { if (yych <= 'f') { - if (yych == 'c') goto yy67; + if (yych == 'c') goto yy74; if (yych <= 'e') goto yy2; - goto yy65; + goto yy72; } else { if (yych <= 'm') { if (yych <= 'l') goto yy2; - goto yy66; + goto yy73; } else { - if (yych == 'r') goto yy64; + if (yych == 'r') goto yy71; goto yy2; } } } yy23: yych = *(marker = ++p); - if (yych == '3') goto yy59; + if (yych == '3') goto yy66; goto yy2; yy24: yych = *(marker = ++p); if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy49; + if (yych == 'E') goto yy56; goto yy2; } else { - if (yych <= 'I') goto yy48; + if (yych <= 'I') goto yy55; if (yych <= 'N') goto yy2; - goto yy47; + goto yy54; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy49; + if (yych == 'e') goto yy56; goto yy2; } else { - if (yych <= 'i') goto yy48; - if (yych == 'o') goto yy47; + if (yych <= 'i') goto yy55; + if (yych == 'o') goto yy54; goto yy2; } } yy25: yych = *(marker = ++p); - if (yych == 'D') goto yy45; - if (yych == 'd') goto yy45; + if (yych == 'D') goto yy52; + if (yych == 'd') goto yy52; goto yy2; yy26: yych = *(marker = ++p); - if (yych == 'E') goto yy40; - if (yych == 'e') goto yy40; + if (yych == 'E') goto yy47; + if (yych == 'e') goto yy47; goto yy2; yy27: yych = *(marker = ++p); - if (yych == 'U') goto yy37; - if (yych == 'u') goto yy37; + if (yych == 'U') goto yy44; + if (yych == 'u') goto yy44; goto yy2; yy28: yych = *(marker = ++p); - if (yych == 'M') goto yy30; - if (yych == 'm') goto yy30; + if (yych == 'M') goto yy38; + if (yych == 'm') goto yy38; goto yy2; yy29: yych = *++p; goto yy2; yy30: yych = *++p; - if (yych == 'S') goto yy32; - if (yych == 's') goto yy32; + if (yych <= 0x7F) goto yy31; + if (yych <= 0xBF) goto yy29; yy31: p = marker; goto yy2; yy32: yych = *++p; - if (yych == 'G') goto yy33; - if (yych != 'g') goto yy31; + if (yych <= 0x9F) goto yy31; + if (yych <= 0xBF) goto yy30; + goto yy31; yy33: yych = *++p; - if (yych == 'R') goto yy34; - if (yych != 'r') goto yy31; + if (yych <= 0x7F) goto yy31; + if (yych <= 0xBF) goto yy30; + goto yy31; yy34: yych = *++p; - if (yych != ':') goto yy31; + if (yych <= 0x8F) goto yy31; + if (yych <= 0xBF) goto yy33; + goto yy31; yy35: - ++p; - { return (bufsize_t)(p - start); } + yych = *++p; + if (yych <= 0x7F) goto yy31; + if (yych <= 0xBF) goto yy33; + goto yy31; +yy36: + yych = *++p; + if (yych <= 0x7F) goto yy31; + if (yych <= 0x8F) goto yy33; + goto yy31; yy37: yych = *++p; - if (yych == 'E') goto yy38; - if (yych != 'e') goto yy31; + if (yych <= 0x7F) goto yy31; + if (yych <= 0x9F) goto yy30; + goto yy31; yy38: yych = *++p; - if (yych == 'R') goto yy39; - if (yych != 'r') goto yy31; + if (yych == 'S') goto yy39; + if (yych != 's') goto yy31; yy39: yych = *++p; - if (yych == 'Y') goto yy34; - if (yych == 'y') goto yy34; - goto yy31; + if (yych == 'G') goto yy40; + if (yych != 'g') goto yy31; yy40: + yych = *++p; + if (yych == 'R') goto yy41; + if (yych != 'r') goto yy31; +yy41: + yych = *++p; + if (yych != ':') goto yy31; +yy42: + ++p; + { return (bufsize_t)(p - start); } +yy44: + yych = *++p; + if (yych == 'E') goto yy45; + if (yych != 'e') goto yy31; +yy45: + yych = *++p; + if (yych == 'R') goto yy46; + if (yych != 'r') goto yy31; +yy46: yych = *++p; if (yych == 'Y') goto yy41; + if (yych == 'y') goto yy41; + goto yy31; +yy47: + yych = *++p; + if (yych == 'Y') goto yy48; if (yych != 'y') goto yy31; -yy41: +yy48: yych = *++p; - if (yych == 'P') goto yy42; + if (yych == 'P') goto yy49; if (yych != 'p') goto yy31; -yy42: +yy49: yych = *++p; - if (yych == 'A') goto yy43; + if (yych == 'A') goto yy50; if (yych != 'a') goto yy31; -yy43: +yy50: yych = *++p; - if (yych == 'R') goto yy44; + if (yych == 'R') goto yy51; if (yych != 'r') goto yy31; -yy44: +yy51: yych = *++p; - if (yych == 'C') goto yy34; - if (yych == 'c') goto yy34; + if (yych == 'C') goto yy41; + if (yych == 'c') goto yy41; goto yy31; -yy45: +yy52: yych = *++p; if (yych != '2') goto yy31; yych = *++p; - if (yych == 'K') goto yy34; - if (yych == 'k') goto yy34; + if (yych == 'K') goto yy41; + if (yych == 'k') goto yy41; goto yy31; -yy47: +yy54: yych = *++p; - if (yych == 'L') goto yy58; - if (yych == 'l') goto yy58; + if (yych == 'L') goto yy65; + if (yych == 'l') goto yy65; goto yy31; -yy48: +yy55: yych = *++p; - if (yych == 'T') goto yy54; - if (yych == 't') goto yy54; + if (yych == 'T') goto yy61; + if (yych == 't') goto yy61; goto yy31; -yy49: +yy56: yych = *++p; - if (yych == 'S') goto yy50; + if (yych == 'S') goto yy57; if (yych != 's') goto yy31; -yy50: +yy57: yych = *++p; - if (yych == 'H') goto yy51; + if (yych == 'H') goto yy58; if (yych != 'h') goto yy31; -yy51: +yy58: yych = *++p; - if (yych == 'A') goto yy52; + if (yych == 'A') goto yy59; if (yych != 'a') goto yy31; -yy52: +yy59: yych = *++p; - if (yych == 'R') goto yy53; + if (yych == 'R') goto yy60; if (yych != 'r') goto yy31; -yy53: +yy60: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy54: +yy61: yych = *++p; - if (yych == 'C') goto yy55; + if (yych == 'C') goto yy62; if (yych != 'c') goto yy31; -yy55: +yy62: yych = *++p; - if (yych == 'O') goto yy56; + if (yych == 'O') goto yy63; if (yych != 'o') goto yy31; -yy56: +yy63: yych = *++p; - if (yych == 'I') goto yy57; + if (yych == 'I') goto yy64; if (yych != 'i') goto yy31; -yy57: +yy64: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy58: +yy65: yych = *++p; - if (yych == 'O') goto yy34; - if (yych == 'o') goto yy34; + if (yych == 'O') goto yy41; + if (yych == 'o') goto yy41; goto yy31; -yy59: +yy66: yych = *++p; if (yych != '9') goto yy31; yych = *++p; @@ -684,2235 +780,2235 @@ yy59: if (yych != '0') goto yy31; yych = *++p; if (yych <= 'Q') goto yy31; - if (yych <= 'S') goto yy34; + if (yych <= 'S') goto yy41; if (yych <= 'q') goto yy31; - if (yych <= 's') goto yy34; + if (yych <= 's') goto yy41; goto yy31; -yy64: +yy71: yych = *++p; - if (yych == 'I') goto yy34; - if (yych == 'i') goto yy34; + if (yych == 'I') goto yy41; + if (yych == 'i') goto yy41; goto yy31; -yy65: +yy72: yych = *++p; - if (yych == 'I') goto yy86; - if (yych == 'i') goto yy86; + if (yych == 'I') goto yy93; + if (yych == 'i') goto yy93; goto yy31; -yy66: +yy73: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy76; + if (yych == 'L') goto yy83; if (yych <= 'O') goto yy31; - goto yy77; + goto yy84; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy76; + goto yy83; } else { - if (yych == 'p') goto yy77; + if (yych == 'p') goto yy84; goto yy31; } } -yy67: +yy74: yych = *++p; - if (yych == 'O') goto yy68; + if (yych == 'O') goto yy75; if (yych != 'o') goto yy31; -yy68: +yy75: yych = *++p; - if (yych == 'N') goto yy69; + if (yych == 'N') goto yy76; if (yych != 'n') goto yy31; -yy69: +yy76: yych = *++p; - if (yych == '-') goto yy70; - if (yych == ':') goto yy35; + if (yych == '-') goto yy77; + if (yych == ':') goto yy42; goto yy31; -yy70: +yy77: yych = *++p; - if (yych == 'U') goto yy71; + if (yych == 'U') goto yy78; if (yych != 'u') goto yy31; -yy71: +yy78: yych = *++p; - if (yych == 'S') goto yy72; + if (yych == 'S') goto yy79; if (yych != 's') goto yy31; -yy72: +yy79: yych = *++p; - if (yych == 'E') goto yy73; + if (yych == 'E') goto yy80; if (yych != 'e') goto yy31; -yy73: +yy80: yych = *++p; - if (yych == 'R') goto yy74; + if (yych == 'R') goto yy81; if (yych != 'r') goto yy31; -yy74: +yy81: yych = *++p; - if (yych == 'I') goto yy75; + if (yych == 'I') goto yy82; if (yych != 'i') goto yy31; -yy75: +yy82: yych = *++p; - if (yych == 'D') goto yy34; - if (yych == 'd') goto yy34; + if (yych == 'D') goto yy41; + if (yych == 'd') goto yy41; goto yy31; -yy76: +yy83: yych = *++p; - if (yych == 'R') goto yy78; - if (yych == 'r') goto yy78; + if (yych == 'R') goto yy85; + if (yych == 'r') goto yy85; goto yy31; -yy77: +yy84: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy78: +yy85: yych = *++p; - if (yych == 'P') goto yy79; + if (yych == 'P') goto yy86; if (yych != 'p') goto yy31; -yy79: +yy86: yych = *++p; - if (yych == 'C') goto yy80; + if (yych == 'C') goto yy87; if (yych != 'c') goto yy31; -yy80: +yy87: yych = *++p; if (yych != '.') goto yy31; yych = *++p; - if (yych == 'B') goto yy82; + if (yych == 'B') goto yy89; if (yych != 'b') goto yy31; -yy82: +yy89: yych = *++p; - if (yych == 'E') goto yy83; + if (yych == 'E') goto yy90; if (yych != 'e') goto yy31; -yy83: +yy90: yych = *++p; - if (yych == 'E') goto yy84; + if (yych == 'E') goto yy91; if (yych != 'e') goto yy31; -yy84: +yy91: yych = *++p; - if (yych == 'P') goto yy85; + if (yych == 'P') goto yy92; if (yych != 'p') goto yy31; -yy85: +yy92: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy86: +yy93: yych = *++p; - if (yych == 'R') goto yy87; + if (yych == 'R') goto yy94; if (yych != 'r') goto yy31; -yy87: +yy94: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy88: +yy95: yych = *++p; - if (yych == 'C') goto yy96; - if (yych == 'c') goto yy96; + if (yych == 'C') goto yy103; + if (yych == 'c') goto yy103; goto yy31; -yy89: +yy96: yych = *++p; - if (yych == 'A') goto yy95; - if (yych == 'a') goto yy95; + if (yych == 'A') goto yy102; + if (yych == 'a') goto yy102; goto yy31; -yy90: +yy97: yych = *++p; - if (yych == 'B') goto yy92; - if (yych == 'b') goto yy92; + if (yych == 'B') goto yy99; + if (yych == 'b') goto yy99; goto yy31; -yy91: +yy98: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy92: +yy99: yych = *++p; - if (yych == 'C') goto yy93; + if (yych == 'C') goto yy100; if (yych != 'c') goto yy31; -yy93: +yy100: yych = *++p; - if (yych == 'A') goto yy94; + if (yych == 'A') goto yy101; if (yych != 'a') goto yy31; -yy94: +yy101: yych = *++p; - if (yych == 'L') goto yy34; - if (yych == 'l') goto yy34; + if (yych == 'L') goto yy41; + if (yych == 'l') goto yy41; goto yy31; -yy95: +yy102: yych = *++p; - if (yych == 'I') goto yy34; - if (yych == 'i') goto yy34; + if (yych == 'I') goto yy41; + if (yych == 'i') goto yy41; goto yy31; -yy96: +yy103: yych = *++p; - if (yych == 'I') goto yy97; + if (yych == 'I') goto yy104; if (yych != 'i') goto yy31; -yy97: +yy104: yych = *++p; - if (yych == 'W') goto yy98; + if (yych == 'W') goto yy105; if (yych != 'w') goto yy31; -yy98: +yy105: yych = *++p; - if (yych == 'Y') goto yy99; + if (yych == 'Y') goto yy106; if (yych != 'y') goto yy31; -yy99: +yy106: yych = *++p; - if (yych == 'G') goto yy34; - if (yych == 'g') goto yy34; + if (yych == 'G') goto yy41; + if (yych == 'g') goto yy41; goto yy31; -yy100: +yy107: yych = *++p; - if (yych == 'E') goto yy109; - if (yych == 'e') goto yy109; + if (yych == 'E') goto yy116; + if (yych == 'e') goto yy116; goto yy31; -yy101: +yy108: yych = *++p; if (yych <= 'N') { if (yych <= 'L') goto yy31; - if (yych >= 'N') goto yy103; + if (yych >= 'N') goto yy110; } else { if (yych <= 'l') goto yy31; - if (yych <= 'm') goto yy102; - if (yych <= 'n') goto yy103; + if (yych <= 'm') goto yy109; + if (yych <= 'n') goto yy110; goto yy31; } -yy102: +yy109: yych = *++p; - if (yych == 'M') goto yy108; - if (yych == 'm') goto yy108; + if (yych == 'M') goto yy115; + if (yych == 'm') goto yy115; goto yy31; -yy103: +yy110: yych = *++p; - if (yych == 'T') goto yy104; + if (yych == 'T') goto yy111; if (yych != 't') goto yy31; -yy104: +yy111: yych = *++p; - if (yych == 'R') goto yy105; + if (yych == 'R') goto yy112; if (yych != 'r') goto yy31; -yy105: +yy112: yych = *++p; - if (yych == 'I') goto yy106; + if (yych == 'I') goto yy113; if (yych != 'i') goto yy31; -yy106: +yy113: yych = *++p; - if (yych == 'L') goto yy107; + if (yych == 'L') goto yy114; if (yych != 'l') goto yy31; -yy107: +yy114: yych = *++p; - if (yych == 'O') goto yy34; - if (yych == 'o') goto yy34; + if (yych == 'O') goto yy41; + if (yych == 'o') goto yy41; goto yy31; -yy108: +yy115: yych = *++p; - if (yych == 'I') goto yy34; - if (yych == 'i') goto yy34; + if (yych == 'I') goto yy41; + if (yych == 'i') goto yy41; goto yy31; -yy109: +yy116: yych = *++p; - if (yych == 'W') goto yy110; + if (yych == 'W') goto yy117; if (yych != 'w') goto yy31; -yy110: +yy117: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'S') goto yy112; + if (yych == 'S') goto yy119; if (yych != 's') goto yy31; -yy112: +yy119: yych = *++p; - if (yych == 'O') goto yy113; + if (yych == 'O') goto yy120; if (yych != 'o') goto yy31; -yy113: +yy120: yych = *++p; - if (yych == 'U') goto yy114; + if (yych == 'U') goto yy121; if (yych != 'u') goto yy31; -yy114: +yy121: yych = *++p; - if (yych == 'R') goto yy115; + if (yych == 'R') goto yy122; if (yych != 'r') goto yy31; -yy115: +yy122: yych = *++p; - if (yych == 'C') goto yy116; + if (yych == 'C') goto yy123; if (yych != 'c') goto yy31; -yy116: +yy123: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy117: +yy124: yych = *++p; - if (yych == '2') goto yy124; + if (yych == '2') goto yy131; goto yy31; -yy118: +yy125: yych = *++p; - if (yych == 'R') goto yy121; - if (yych == 'r') goto yy121; + if (yych == 'R') goto yy128; + if (yych == 'r') goto yy128; goto yy31; -yy119: +yy126: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy120: +yy127: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy121: +yy128: yych = *++p; - if (yych == 'E') goto yy122; + if (yych == 'E') goto yy129; if (yych != 'e') goto yy31; -yy122: +yy129: yych = *++p; - if (yych == 'A') goto yy123; + if (yych == 'A') goto yy130; if (yych != 'a') goto yy31; -yy123: +yy130: yych = *++p; - if (yych == 'L') goto yy34; - if (yych == 'l') goto yy34; + if (yych == 'L') goto yy41; + if (yych == 'l') goto yy41; goto yy31; -yy124: +yy131: yych = *++p; if (yych != '0') goto yy31; yych = *++p; if (yych != '0') goto yy31; yych = *++p; - if (yych == '4') goto yy34; + if (yych == '4') goto yy41; goto yy31; -yy127: +yy134: yych = *++p; - if (yych == 'I') goto yy146; - if (yych == 'i') goto yy146; + if (yych == 'I') goto yy153; + if (yych == 'i') goto yy153; goto yy31; -yy128: +yy135: yych = *++p; if (yych <= 'L') { - if (yych == 'A') goto yy138; + if (yych == 'A') goto yy145; if (yych <= 'K') goto yy31; - goto yy137; + goto yy144; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy138; + goto yy145; } else { - if (yych == 'l') goto yy137; + if (yych == 'l') goto yy144; goto yy31; } } -yy129: +yy136: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy130: +yy137: yych = *++p; - if (yych == '3') goto yy134; + if (yych == '3') goto yy141; goto yy31; -yy131: +yy138: yych = *++p; - if (yych == 'T') goto yy133; - if (yych == 't') goto yy133; + if (yych == 'T') goto yy140; + if (yych == 't') goto yy140; goto yy31; -yy132: +yy139: yych = *++p; - if (yych == 'G') goto yy34; - if (yych == 'g') goto yy34; + if (yych == 'G') goto yy41; + if (yych == 'g') goto yy41; goto yy31; -yy133: +yy140: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy134: +yy141: yych = *++p; if (yych != '2') goto yy31; yych = *++p; if (yych != '7') goto yy31; yych = *++p; - if (yych == '0') goto yy34; + if (yych == '0') goto yy41; goto yy31; -yy137: +yy144: yych = *++p; if (yych <= 'M') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'N') goto yy144; - if (yych == 'n') goto yy144; + if (yych <= 'N') goto yy151; + if (yych == 'n') goto yy151; goto yy31; } -yy138: +yy145: yych = *++p; - if (yych == 'M') goto yy139; + if (yych == 'M') goto yy146; if (yych != 'm') goto yy31; -yy139: +yy146: yych = *++p; - if (yych == 'S') goto yy140; + if (yych == 'S') goto yy147; if (yych != 's') goto yy31; -yy140: +yy147: yych = *++p; - if (yych == 'P') goto yy141; + if (yych == 'P') goto yy148; if (yych != 'p') goto yy31; -yy141: +yy148: yych = *++p; - if (yych == 'E') goto yy142; + if (yych == 'E') goto yy149; if (yych != 'e') goto yy31; -yy142: +yy149: yych = *++p; - if (yych == 'A') goto yy143; + if (yych == 'A') goto yy150; if (yych != 'a') goto yy31; -yy143: +yy150: yych = *++p; - if (yych == 'K') goto yy34; - if (yych == 'k') goto yy34; + if (yych == 'K') goto yy41; + if (yych == 'k') goto yy41; goto yy31; -yy144: +yy151: yych = *++p; - if (yych == 'E') goto yy145; + if (yych == 'E') goto yy152; if (yych != 'e') goto yy31; -yy145: +yy152: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy146: +yy153: yych = *++p; if (yych <= 'S') { - if (yych == 'N') goto yy147; + if (yych == 'N') goto yy154; if (yych <= 'R') goto yy31; - goto yy148; + goto yy155; } else { if (yych <= 'n') { if (yych <= 'm') goto yy31; } else { - if (yych == 's') goto yy148; + if (yych == 's') goto yy155; goto yy31; } } -yy147: +yy154: yych = *++p; - if (yych == 'G') goto yy155; - if (yych == 'g') goto yy155; + if (yych == 'G') goto yy162; + if (yych == 'g') goto yy162; goto yy31; -yy148: +yy155: yych = *++p; - if (yych == 'M') goto yy149; + if (yych == 'M') goto yy156; if (yych != 'm') goto yy31; -yy149: +yy156: yych = *++p; - if (yych == 'E') goto yy150; + if (yych == 'E') goto yy157; if (yych != 'e') goto yy31; -yy150: +yy157: yych = *++p; - if (yych == 'S') goto yy151; + if (yych == 'S') goto yy158; if (yych != 's') goto yy31; -yy151: +yy158: yych = *++p; - if (yych == 'S') goto yy152; + if (yych == 'S') goto yy159; if (yych != 's') goto yy31; -yy152: +yy159: yych = *++p; - if (yych == 'A') goto yy153; + if (yych == 'A') goto yy160; if (yych != 'a') goto yy31; -yy153: +yy160: yych = *++p; - if (yych == 'G') goto yy154; + if (yych == 'G') goto yy161; if (yych != 'g') goto yy31; -yy154: +yy161: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy155: +yy162: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy156: +yy163: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy157: +yy164: yych = *++p; - if (yych == 'E') goto yy207; - if (yych == 'e') goto yy207; + if (yych == 'E') goto yy214; + if (yych == 'e') goto yy214; goto yy31; -yy158: +yy165: yych = *++p; - if (yych == 'H') goto yy34; - if (yych == 'h') goto yy34; + if (yych == 'H') goto yy41; + if (yych == 'h') goto yy41; goto yy31; -yy159: +yy166: yych = *++p; - if (yych == 'O') goto yy203; - if (yych == 'o') goto yy203; + if (yych == 'O') goto yy210; + if (yych == 'o') goto yy210; goto yy31; -yy160: +yy167: yych = *++p; if (yych <= 'L') { - if (yych == 'A') goto yy193; + if (yych == 'A') goto yy200; if (yych <= 'K') goto yy31; - goto yy194; + goto yy201; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy193; + goto yy200; } else { - if (yych == 'l') goto yy194; + if (yych == 'l') goto yy201; goto yy31; } } -yy161: +yy168: yych = *++p; if (yych <= 'S') { - if (yych == 'B') goto yy34; + if (yych == 'B') goto yy41; if (yych <= 'R') goto yy31; - goto yy34; + goto yy41; } else { if (yych <= 'b') { if (yych <= 'a') goto yy31; - goto yy34; + goto yy41; } else { - if (yych == 's') goto yy34; + if (yych == 's') goto yy41; goto yy31; } } -yy162: +yy169: yych = *++p; - if (yych == 'Y') goto yy191; - if (yych == 'y') goto yy191; + if (yych == 'Y') goto yy198; + if (yych == 'y') goto yy198; goto yy31; -yy163: +yy170: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy164: +yy171: yych = *++p; - if (yych == 'T') goto yy190; - if (yych == 't') goto yy190; + if (yych == 'T') goto yy197; + if (yych == 't') goto yy197; goto yy31; -yy165: +yy172: yych = *++p; if (yych <= 'S') { if (yych <= 'C') { if (yych <= 'B') goto yy31; - goto yy177; + goto yy184; } else { if (yych <= 'Q') goto yy31; - if (yych <= 'R') goto yy175; - goto yy176; + if (yych <= 'R') goto yy182; + goto yy183; } } else { if (yych <= 'q') { - if (yych == 'c') goto yy177; + if (yych == 'c') goto yy184; goto yy31; } else { - if (yych <= 'r') goto yy175; - if (yych <= 's') goto yy176; + if (yych <= 'r') goto yy182; + if (yych <= 's') goto yy183; goto yy31; } } -yy166: +yy173: yych = *++p; - if (yych == 'M') goto yy174; - if (yych == 'm') goto yy174; + if (yych == 'M') goto yy181; + if (yych == 'm') goto yy181; goto yy31; -yy167: +yy174: yych = *++p; if (yych <= 'P') { - if (yych == 'E') goto yy171; + if (yych == 'E') goto yy178; if (yych <= 'O') goto yy31; - goto yy172; + goto yy179; } else { if (yych <= 'e') { if (yych <= 'd') goto yy31; - goto yy171; + goto yy178; } else { - if (yych == 'p') goto yy172; + if (yych == 'p') goto yy179; goto yy31; } } -yy168: +yy175: yych = *++p; - if (yych == 'T') goto yy169; + if (yych == 'T') goto yy176; if (yych != 't') goto yy31; -yy169: +yy176: yych = *++p; - if (yych == 'T') goto yy170; + if (yych == 'T') goto yy177; if (yych != 't') goto yy31; -yy170: +yy177: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy171: +yy178: yych = *++p; - if (yych == 'V') goto yy173; - if (yych == 'v') goto yy173; + if (yych == 'V') goto yy180; + if (yych == 'v') goto yy180; goto yy31; -yy172: +yy179: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy173: +yy180: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy174: +yy181: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy175: +yy182: yych = *++p; - if (yych == 'V') goto yy187; - if (yych == 'v') goto yy187; + if (yych == 'V') goto yy194; + if (yych == 'v') goto yy194; goto yy31; -yy176: +yy183: yych = *++p; - if (yych == 'S') goto yy184; - if (yych == 's') goto yy184; + if (yych == 'S') goto yy191; + if (yych == 's') goto yy191; goto yy31; -yy177: +yy184: yych = *++p; - if (yych == 'O') goto yy178; + if (yych == 'O') goto yy185; if (yych != 'o') goto yy31; -yy178: +yy185: yych = *++p; - if (yych == 'N') goto yy179; + if (yych == 'N') goto yy186; if (yych != 'n') goto yy31; -yy179: +yy186: yych = *++p; - if (yych == 'D') goto yy180; + if (yych == 'D') goto yy187; if (yych != 'd') goto yy31; -yy180: +yy187: yych = *++p; - if (yych == 'L') goto yy181; + if (yych == 'L') goto yy188; if (yych != 'l') goto yy31; -yy181: +yy188: yych = *++p; - if (yych == 'I') goto yy182; + if (yych == 'I') goto yy189; if (yych != 'i') goto yy31; -yy182: +yy189: yych = *++p; - if (yych == 'F') goto yy183; + if (yych == 'F') goto yy190; if (yych != 'f') goto yy31; -yy183: +yy190: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy184: +yy191: yych = *++p; - if (yych == 'I') goto yy185; + if (yych == 'I') goto yy192; if (yych != 'i') goto yy31; -yy185: +yy192: yych = *++p; - if (yych == 'O') goto yy186; + if (yych == 'O') goto yy193; if (yych != 'o') goto yy31; -yy186: +yy193: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy187: +yy194: yych = *++p; - if (yych == 'I') goto yy188; + if (yych == 'I') goto yy195; if (yych != 'i') goto yy31; -yy188: +yy195: yych = *++p; - if (yych == 'C') goto yy189; + if (yych == 'C') goto yy196; if (yych != 'c') goto yy31; -yy189: +yy196: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy190: +yy197: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy191: +yy198: yych = *++p; - if (yych == 'P') goto yy192; + if (yych == 'P') goto yy199; if (yych != 'p') goto yy31; -yy192: +yy199: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy193: +yy200: yych = *++p; - if (yych == 'P') goto yy197; - if (yych == 'p') goto yy197; + if (yych == 'P') goto yy204; + if (yych == 'p') goto yy204; goto yy31; -yy194: +yy201: yych = *++p; - if (yych == 'D') goto yy195; + if (yych == 'D') goto yy202; if (yych != 'd') goto yy31; -yy195: +yy202: yych = *++p; - if (yych == 'A') goto yy196; + if (yych == 'A') goto yy203; if (yych != 'a') goto yy31; -yy196: +yy203: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy197: +yy204: yych = *++p; if (yych != '.') goto yy31; yych = *++p; - if (yych == 'B') goto yy199; + if (yych == 'B') goto yy206; if (yych != 'b') goto yy31; -yy199: +yy206: yych = *++p; - if (yych == 'E') goto yy200; + if (yych == 'E') goto yy207; if (yych != 'e') goto yy31; -yy200: +yy207: yych = *++p; - if (yych == 'E') goto yy201; + if (yych == 'E') goto yy208; if (yych != 'e') goto yy31; -yy201: +yy208: yych = *++p; - if (yych == 'P') goto yy202; + if (yych == 'P') goto yy209; if (yych != 'p') goto yy31; -yy202: +yy209: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy203: +yy210: yych = *++p; - if (yych == 'T') goto yy204; + if (yych == 'T') goto yy211; if (yych != 't') goto yy31; -yy204: +yy211: yych = *++p; - if (yych == 'I') goto yy205; + if (yych == 'I') goto yy212; if (yych != 'i') goto yy31; -yy205: +yy212: yych = *++p; - if (yych == 'F') goto yy206; + if (yych == 'F') goto yy213; if (yych != 'f') goto yy31; -yy206: +yy213: yych = *++p; - if (yych == 'Y') goto yy34; - if (yych == 'y') goto yy34; + if (yych == 'Y') goto yy41; + if (yych == 'y') goto yy41; goto yy31; -yy207: +yy214: yych = *++p; - if (yych == 'A') goto yy208; + if (yych == 'A') goto yy215; if (yych != 'a') goto yy31; -yy208: +yy215: yych = *++p; - if (yych == 'M') goto yy34; - if (yych == 'm') goto yy34; + if (yych == 'M') goto yy41; + if (yych == 'm') goto yy41; goto yy31; -yy209: +yy216: yych = *++p; if (yych <= 'S') { - if (yych == 'M') goto yy221; + if (yych == 'M') goto yy228; if (yych <= 'R') goto yy31; - goto yy220; + goto yy227; } else { if (yych <= 'm') { if (yych <= 'l') goto yy31; - goto yy221; + goto yy228; } else { - if (yych == 's') goto yy220; + if (yych == 's') goto yy227; goto yy31; } } -yy210: +yy217: yych = *++p; - if (yych == 'Y') goto yy218; - if (yych == 'y') goto yy218; + if (yych == 'Y') goto yy225; + if (yych == 'y') goto yy225; goto yy31; -yy211: +yy218: yych = *++p; - if (yych == 'I') goto yy34; - if (yych == 'i') goto yy34; + if (yych == 'I') goto yy41; + if (yych == 'i') goto yy41; goto yy31; -yy212: +yy219: yych = *++p; - if (yych == 'S') goto yy213; + if (yych == 'S') goto yy220; if (yych != 's') goto yy31; -yy213: +yy220: yych = *++p; if (yych <= 'N') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'O') goto yy214; + if (yych <= 'O') goto yy221; if (yych != 'o') goto yy31; } -yy214: +yy221: yych = *++p; - if (yych == 'U') goto yy215; + if (yych == 'U') goto yy222; if (yych != 'u') goto yy31; -yy215: +yy222: yych = *++p; - if (yych == 'R') goto yy216; + if (yych == 'R') goto yy223; if (yych != 'r') goto yy31; -yy216: +yy223: yych = *++p; - if (yych == 'C') goto yy217; + if (yych == 'C') goto yy224; if (yych != 'c') goto yy31; -yy217: +yy224: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy218: +yy225: yych = *++p; - if (yych == 'N') goto yy219; + if (yych == 'N') goto yy226; if (yych != 'n') goto yy31; -yy219: +yy226: yych = *++p; - if (yych == 'C') goto yy34; - if (yych == 'c') goto yy34; + if (yych == 'C') goto yy41; + if (yych == 'c') goto yy41; goto yy31; -yy220: +yy227: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy221: +yy228: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy222: +yy229: yych = *++p; - if (yych == 'Y') goto yy242; - if (yych == 'y') goto yy242; + if (yych == 'Y') goto yy249; + if (yych == 'y') goto yy249; goto yy31; -yy223: +yy230: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy239; + if (yych == 'E') goto yy246; if (yych <= 'N') goto yy31; - goto yy240; + goto yy247; } else { if (yych <= 'e') { if (yych <= 'd') goto yy31; - goto yy239; + goto yy246; } else { - if (yych == 'o') goto yy240; + if (yych == 'o') goto yy247; goto yy31; } } -yy224: +yy231: yych = *++p; - if (yych == 'A') goto yy234; - if (yych == 'a') goto yy234; + if (yych == 'A') goto yy241; + if (yych == 'a') goto yy241; goto yy31; -yy225: +yy232: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy227; + if (yych == 'L') goto yy234; if (yych <= 'O') goto yy31; - goto yy228; + goto yy235; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy227; + goto yy234; } else { - if (yych == 'p') goto yy228; + if (yych == 'p') goto yy235; goto yy31; } } -yy226: +yy233: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy227: +yy234: yych = *++p; - if (yych == 'M') goto yy34; - if (yych == 'm') goto yy34; + if (yych == 'M') goto yy41; + if (yych == 'm') goto yy41; goto yy31; -yy228: +yy235: yych = *++p; - if (yych == 'A') goto yy229; + if (yych == 'A') goto yy236; if (yych != 'a') goto yy31; -yy229: +yy236: yych = *++p; - if (yych == 'R') goto yy230; + if (yych == 'R') goto yy237; if (yych != 'r') goto yy31; -yy230: +yy237: yych = *++p; - if (yych == 'A') goto yy231; + if (yych == 'A') goto yy238; if (yych != 'a') goto yy31; -yy231: +yy238: yych = *++p; - if (yych == 'Z') goto yy232; + if (yych == 'Z') goto yy239; if (yych != 'z') goto yy31; -yy232: +yy239: yych = *++p; - if (yych == 'Z') goto yy233; + if (yych == 'Z') goto yy240; if (yych != 'z') goto yy31; -yy233: +yy240: yych = *++p; - if (yych == 'I') goto yy34; - if (yych == 'i') goto yy34; + if (yych == 'I') goto yy41; + if (yych == 'i') goto yy41; goto yy31; -yy234: +yy241: yych = *++p; - if (yych == 'T') goto yy235; + if (yych == 'T') goto yy242; if (yych != 't') goto yy31; -yy235: +yy242: yych = *++p; - if (yych == 'F') goto yy236; + if (yych == 'F') goto yy243; if (yych != 'f') goto yy31; -yy236: +yy243: yych = *++p; - if (yych == 'O') goto yy237; + if (yych == 'O') goto yy244; if (yych != 'o') goto yy31; -yy237: +yy244: yych = *++p; - if (yych == 'R') goto yy238; + if (yych == 'R') goto yy245; if (yych != 'r') goto yy31; -yy238: +yy245: yych = *++p; - if (yych == 'M') goto yy34; - if (yych == 'm') goto yy34; + if (yych == 'M') goto yy41; + if (yych == 'm') goto yy41; goto yy31; -yy239: +yy246: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy240: +yy247: yych = *++p; - if (yych == 'X') goto yy241; + if (yych == 'X') goto yy248; if (yych != 'x') goto yy31; -yy241: +yy248: yych = *++p; - if (yych == 'Y') goto yy34; - if (yych == 'y') goto yy34; + if (yych == 'Y') goto yy41; + if (yych == 'y') goto yy41; goto yy31; -yy242: +yy249: yych = *++p; - if (yych == 'C') goto yy34; - if (yych == 'c') goto yy34; + if (yych == 'C') goto yy41; + if (yych == 'c') goto yy41; goto yy31; -yy243: +yy250: yych = *++p; - if (yych == 'D') goto yy34; - if (yych == 'd') goto yy34; + if (yych == 'D') goto yy41; + if (yych == 'd') goto yy41; goto yy31; -yy244: +yy251: yych = *++p; - if (yych == 'A') goto yy245; + if (yych == 'A') goto yy252; if (yych != 'a') goto yy31; -yy245: +yy252: yych = *++p; - if (yych == 'Q') goto yy246; + if (yych == 'Q') goto yy253; if (yych != 'q') goto yy31; -yy246: +yy253: yych = *++p; - if (yych == 'U') goto yy247; + if (yych == 'U') goto yy254; if (yych != 'u') goto yy31; -yy247: +yy254: yych = *++p; - if (yych == 'E') goto yy248; + if (yych == 'E') goto yy255; if (yych != 'e') goto yy31; -yy248: +yy255: yych = *++p; - if (yych == 'L') goto yy249; + if (yych == 'L') goto yy256; if (yych != 'l') goto yy31; -yy249: +yy256: yych = *++p; - if (yych == 'O') goto yy250; + if (yych == 'O') goto yy257; if (yych != 'o') goto yy31; -yy250: +yy257: yych = *++p; - if (yych == 'C') goto yy251; + if (yych == 'C') goto yy258; if (yych != 'c') goto yy31; -yy251: +yy258: yych = *++p; - if (yych == 'K') goto yy252; + if (yych == 'K') goto yy259; if (yych != 'k') goto yy31; -yy252: +yy259: yych = *++p; - if (yych == 'T') goto yy253; + if (yych == 'T') goto yy260; if (yych != 't') goto yy31; -yy253: +yy260: yych = *++p; - if (yych == 'O') goto yy254; + if (yych == 'O') goto yy261; if (yych != 'o') goto yy31; -yy254: +yy261: yych = *++p; - if (yych == 'K') goto yy255; + if (yych == 'K') goto yy262; if (yych != 'k') goto yy31; -yy255: +yy262: yych = *++p; - if (yych == 'E') goto yy256; + if (yych == 'E') goto yy263; if (yych != 'e') goto yy31; -yy256: +yy263: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy257: +yy264: yych = *++p; - if (yych == 'T') goto yy264; - if (yych == 't') goto yy264; + if (yych == 'T') goto yy271; + if (yych == 't') goto yy271; goto yy31; -yy258: +yy265: yych = *++p; - if (yych == 'T') goto yy263; - if (yych == 't') goto yy263; + if (yych == 'T') goto yy270; + if (yych == 't') goto yy270; goto yy31; -yy259: +yy266: yych = *++p; if (yych <= 'G') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'H') goto yy34; - if (yych == 'h') goto yy34; + if (yych <= 'H') goto yy41; + if (yych == 'h') goto yy41; goto yy31; } -yy260: +yy267: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy261: +yy268: yych = *++p; - if (yych == 'W') goto yy262; + if (yych == 'W') goto yy269; if (yych != 'w') goto yy31; -yy262: +yy269: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy263: +yy270: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy264: +yy271: yych = *++p; - if (yych == 'E') goto yy265; + if (yych == 'E') goto yy272; if (yych != 'e') goto yy31; -yy265: +yy272: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy266: +yy273: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy267: +yy274: yych = *++p; if (yych <= 'P') { - if (yych == 'M') goto yy298; + if (yych == 'M') goto yy305; if (yych <= 'O') goto yy31; - goto yy297; + goto yy304; } else { if (yych <= 'm') { if (yych <= 'l') goto yy31; - goto yy298; + goto yy305; } else { - if (yych == 'p') goto yy297; + if (yych == 'p') goto yy304; goto yy31; } } -yy268: +yy275: yych = *++p; if (yych <= 'Q') { if (yych <= '-') { if (yych <= ',') goto yy31; - goto yy290; + goto yy297; } else { - if (yych == 'N') goto yy291; + if (yych == 'N') goto yy298; goto yy31; } } else { if (yych <= 'n') { - if (yych <= 'R') goto yy289; + if (yych <= 'R') goto yy296; if (yych <= 'm') goto yy31; - goto yy291; + goto yy298; } else { - if (yych == 'r') goto yy289; + if (yych == 'r') goto yy296; goto yy31; } } -yy269: +yy276: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy270: +yy277: yych = *++p; - if (yych == 'S') goto yy285; - if (yych == 's') goto yy285; + if (yych == 'S') goto yy292; + if (yych == 's') goto yy292; goto yy31; -yy271: +yy278: yych = *++p; switch (yych) { case 'G': - case 'g': goto yy276; + case 'g': goto yy283; case 'I': - case 'i': goto yy275; + case 'i': goto yy282; case 'P': - case 'p': goto yy277; + case 'p': goto yy284; case 'R': - case 'r': goto yy278; + case 'r': goto yy285; default: goto yy31; } -yy272: +yy279: yych = *++p; - if (yych == 'Q') goto yy274; - if (yych == 'q') goto yy274; + if (yych == 'Q') goto yy281; + if (yych == 'q') goto yy281; goto yy31; -yy273: +yy280: yych = *++p; - if (yych == 'D') goto yy34; - if (yych == 'd') goto yy34; + if (yych == 'D') goto yy41; + if (yych == 'd') goto yy41; goto yy31; -yy274: +yy281: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy275: +yy282: yych = *++p; - if (yych == 'L') goto yy283; - if (yych == 'l') goto yy283; + if (yych == 'L') goto yy290; + if (yych == 'l') goto yy290; goto yy31; -yy276: +yy283: yych = *++p; - if (yych == 'N') goto yy281; - if (yych == 'n') goto yy281; + if (yych == 'N') goto yy288; + if (yych == 'n') goto yy288; goto yy31; -yy277: +yy284: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy278: +yy285: yych = *++p; - if (yych == 'K') goto yy279; + if (yych == 'K') goto yy286; if (yych != 'k') goto yy31; -yy279: +yy286: yych = *++p; - if (yych == 'E') goto yy280; + if (yych == 'E') goto yy287; if (yych != 'e') goto yy31; -yy280: +yy287: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy281: +yy288: yych = *++p; - if (yych == 'E') goto yy282; + if (yych == 'E') goto yy289; if (yych != 'e') goto yy31; -yy282: +yy289: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy283: +yy290: yych = *++p; - if (yych == 'T') goto yy284; + if (yych == 'T') goto yy291; if (yych != 't') goto yy31; -yy284: +yy291: yych = *++p; - if (yych == 'O') goto yy34; - if (yych == 'o') goto yy34; + if (yych == 'O') goto yy41; + if (yych == 'o') goto yy41; goto yy31; -yy285: +yy292: yych = *++p; - if (yych == 'S') goto yy286; + if (yych == 'S') goto yy293; if (yych != 's') goto yy31; -yy286: +yy293: yych = *++p; - if (yych == 'A') goto yy287; + if (yych == 'A') goto yy294; if (yych != 'a') goto yy31; -yy287: +yy294: yych = *++p; - if (yych == 'G') goto yy288; + if (yych == 'G') goto yy295; if (yych != 'g') goto yy31; -yy288: +yy295: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy289: +yy296: yych = *++p; - if (yych == 'P') goto yy296; - if (yych == 'p') goto yy296; + if (yych == 'P') goto yy303; + if (yych == 'p') goto yy303; goto yy31; -yy290: +yy297: yych = *++p; - if (yych == 'H') goto yy293; - if (yych == 'h') goto yy293; + if (yych == 'H') goto yy300; + if (yych == 'h') goto yy300; goto yy31; -yy291: +yy298: yych = *++p; - if (yych == 'I') goto yy292; + if (yych == 'I') goto yy299; if (yych != 'i') goto yy31; -yy292: +yy299: yych = *++p; - if (yych == 'M') goto yy34; - if (yych == 'm') goto yy34; + if (yych == 'M') goto yy41; + if (yych == 'm') goto yy41; goto yy31; -yy293: +yy300: yych = *++p; - if (yych == 'E') goto yy294; + if (yych == 'E') goto yy301; if (yych != 'e') goto yy31; -yy294: +yy301: yych = *++p; - if (yych == 'L') goto yy295; + if (yych == 'L') goto yy302; if (yych != 'l') goto yy31; -yy295: +yy302: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy296: +yy303: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy297: +yy304: yych = *++p; - if (yych == 'D') goto yy301; - if (yych == 'd') goto yy301; + if (yych == 'D') goto yy308; + if (yych == 'd') goto yy308; goto yy31; -yy298: +yy305: yych = *++p; - if (yych == 'B') goto yy299; + if (yych == 'B') goto yy306; if (yych != 'b') goto yy31; -yy299: +yy306: yych = *++p; - if (yych == 'L') goto yy300; + if (yych == 'L') goto yy307; if (yych != 'l') goto yy31; -yy300: +yy307: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy301: +yy308: yych = *++p; - if (yych == 'A') goto yy302; + if (yych == 'A') goto yy309; if (yych != 'a') goto yy31; -yy302: +yy309: yych = *++p; - if (yych == 'T') goto yy303; + if (yych == 'T') goto yy310; if (yych != 't') goto yy31; -yy303: +yy310: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy304: +yy311: yych = *++p; - if (yych == 'A') goto yy309; - if (yych == 'a') goto yy309; + if (yych == 'A') goto yy316; + if (yych == 'a') goto yy316; goto yy31; -yy305: +yy312: yych = *++p; - if (yych == 'S') goto yy306; + if (yych == 'S') goto yy313; if (yych != 's') goto yy31; -yy306: +yy313: yych = *++p; - if (yych == 'T') goto yy307; + if (yych == 'T') goto yy314; if (yych != 't') goto yy31; -yy307: +yy314: yych = *++p; - if (yych == 'F') goto yy308; + if (yych == 'F') goto yy315; if (yych != 'f') goto yy31; -yy308: +yy315: yych = *++p; - if (yych == 'M') goto yy34; - if (yych == 'm') goto yy34; + if (yych == 'M') goto yy41; + if (yych == 'm') goto yy41; goto yy31; -yy309: +yy316: yych = *++p; - if (yych == 'P') goto yy310; + if (yych == 'P') goto yy317; if (yych != 'p') goto yy31; -yy310: +yy317: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy311: +yy318: yych = *++p; - if (yych == 'M') goto yy334; - if (yych == 'm') goto yy334; + if (yych == 'M') goto yy341; + if (yych == 'm') goto yy341; goto yy31; -yy312: +yy319: yych = *++p; if (yych <= 'I') { - if (yych == 'C') goto yy323; + if (yych == 'C') goto yy330; if (yych <= 'H') goto yy31; - goto yy322; + goto yy329; } else { if (yych <= 'c') { if (yych <= 'b') goto yy31; - goto yy323; + goto yy330; } else { - if (yych == 'i') goto yy322; + if (yych == 'i') goto yy329; goto yy31; } } -yy313: +yy320: yych = *++p; if (yych <= 'P') { - if (yych == 'N') goto yy34; + if (yych == 'N') goto yy41; if (yych <= 'O') goto yy31; - goto yy34; + goto yy41; } else { if (yych <= 'n') { if (yych <= 'm') goto yy31; - goto yy34; + goto yy41; } else { - if (yych == 'p') goto yy34; + if (yych == 'p') goto yy41; goto yy31; } } -yy314: +yy321: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy320; + if (yych == 'A') goto yy327; if (yych <= 'N') goto yy31; - goto yy321; + goto yy328; } else { if (yych <= 'a') { if (yych <= '`') goto yy31; - goto yy320; + goto yy327; } else { - if (yych == 'o') goto yy321; + if (yych == 'o') goto yy328; goto yy31; } } -yy315: +yy322: yych = *++p; - if (yych == 'F') goto yy319; - if (yych == 'f') goto yy319; + if (yych == 'F') goto yy326; + if (yych == 'f') goto yy326; goto yy31; -yy316: +yy323: yych = *++p; if (yych <= '@') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'A') goto yy318; - if (yych == 'a') goto yy318; + if (yych <= 'A') goto yy325; + if (yych == 'a') goto yy325; goto yy31; } -yy317: +yy324: yych = *++p; - if (yych == 'X') goto yy34; - if (yych == 'x') goto yy34; + if (yych == 'X') goto yy41; + if (yych == 'x') goto yy41; goto yy31; -yy318: +yy325: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy319: +yy326: yych = *++p; - if (yych == 'O') goto yy34; - if (yych == 'o') goto yy34; + if (yych == 'O') goto yy41; + if (yych == 'o') goto yy41; goto yy31; -yy320: +yy327: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy321: +yy328: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy322: +yy329: yych = *++p; - if (yych == 'S') goto yy324; - if (yych == 's') goto yy324; + if (yych == 'S') goto yy331; + if (yych == 's') goto yy331; goto yy31; -yy323: +yy330: yych = *++p; if (yych <= ':') { - if (yych == '6') goto yy34; + if (yych == '6') goto yy41; if (yych <= '9') goto yy31; - goto yy35; + goto yy42; } else { if (yych <= 'S') { if (yych <= 'R') goto yy31; - goto yy34; + goto yy41; } else { - if (yych == 's') goto yy34; + if (yych == 's') goto yy41; goto yy31; } } -yy324: +yy331: yych = *++p; - if (yych == '.') goto yy325; - if (yych == ':') goto yy35; + if (yych == '.') goto yy332; + if (yych == ':') goto yy42; goto yy31; -yy325: +yy332: yych = *++p; if (yych <= 'X') { if (yych <= 'K') { - if (yych == 'B') goto yy328; + if (yych == 'B') goto yy335; goto yy31; } else { - if (yych <= 'L') goto yy326; + if (yych <= 'L') goto yy333; if (yych <= 'W') goto yy31; - goto yy327; + goto yy334; } } else { if (yych <= 'k') { - if (yych == 'b') goto yy328; + if (yych == 'b') goto yy335; goto yy31; } else { - if (yych <= 'l') goto yy326; - if (yych == 'x') goto yy327; + if (yych <= 'l') goto yy333; + if (yych == 'x') goto yy334; goto yy31; } } -yy326: +yy333: yych = *++p; - if (yych == 'W') goto yy333; - if (yych == 'w') goto yy333; + if (yych == 'W') goto yy340; + if (yych == 'w') goto yy340; goto yy31; -yy327: +yy334: yych = *++p; - if (yych == 'P') goto yy331; - if (yych == 'p') goto yy331; + if (yych == 'P') goto yy338; + if (yych == 'p') goto yy338; goto yy31; -yy328: +yy335: yych = *++p; - if (yych == 'E') goto yy329; + if (yych == 'E') goto yy336; if (yych != 'e') goto yy31; -yy329: +yy336: yych = *++p; - if (yych == 'E') goto yy330; + if (yych == 'E') goto yy337; if (yych != 'e') goto yy31; -yy330: +yy337: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy331: +yy338: yych = *++p; - if (yych == 'C') goto yy332; + if (yych == 'C') goto yy339; if (yych != 'c') goto yy31; -yy332: +yy339: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy333: +yy340: yych = *++p; - if (yych == 'Z') goto yy34; - if (yych == 'z') goto yy34; + if (yych == 'Z') goto yy41; + if (yych == 'z') goto yy41; goto yy31; -yy334: +yy341: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy335: +yy342: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy336: +yy343: yych = *++p; - if (yych == 'T') goto yy339; - if (yych == 't') goto yy339; + if (yych == 'T') goto yy346; + if (yych == 't') goto yy346; goto yy31; -yy337: +yy344: yych = *++p; if (yych != '2') goto yy31; yych = *++p; - if (yych == '3') goto yy34; + if (yych == '3') goto yy41; goto yy31; -yy339: +yy346: yych = *++p; - if (yych == 'P') goto yy340; + if (yych == 'P') goto yy347; if (yych != 'p') goto yy31; -yy340: +yy347: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy341: +yy348: yych = *++p; - if (yych == 'A') goto yy357; - if (yych == 'a') goto yy357; + if (yych == 'A') goto yy364; + if (yych == 'a') goto yy364; goto yy31; -yy342: +yy349: yych = *++p; if (yych <= 'Z') { - if (yych == 'T') goto yy34; + if (yych == 'T') goto yy41; if (yych <= 'Y') goto yy31; - goto yy348; + goto yy355; } else { if (yych <= 't') { if (yych <= 's') goto yy31; - goto yy34; + goto yy41; } else { - if (yych == 'z') goto yy348; + if (yych == 'z') goto yy355; goto yy31; } } -yy343: +yy350: yych = *++p; if (yych <= 'O') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'P') goto yy345; - if (yych == 'p') goto yy345; + if (yych <= 'P') goto yy352; + if (yych == 'p') goto yy352; goto yy31; } -yy344: +yy351: yych = *++p; - if (yych == 'O') goto yy34; - if (yych == 'o') goto yy34; + if (yych == 'O') goto yy41; + if (yych == 'o') goto yy41; goto yy31; -yy345: +yy352: yych = *++p; - if (yych == 'H') goto yy346; + if (yych == 'H') goto yy353; if (yych != 'h') goto yy31; -yy346: +yy353: yych = *++p; - if (yych == 'E') goto yy347; + if (yych == 'E') goto yy354; if (yych != 'e') goto yy31; -yy347: +yy354: yych = *++p; - if (yych == 'R') goto yy34; - if (yych == 'r') goto yy34; + if (yych == 'R') goto yy41; + if (yych == 'r') goto yy41; goto yy31; -yy348: +yy355: yych = *++p; - if (yych == 'M') goto yy349; + if (yych == 'M') goto yy356; if (yych != 'm') goto yy31; -yy349: +yy356: yych = *++p; - if (yych == 'O') goto yy350; + if (yych == 'O') goto yy357; if (yych != 'o') goto yy31; -yy350: +yy357: yych = *++p; - if (yych == 'P') goto yy351; + if (yych == 'P') goto yy358; if (yych != 'p') goto yy31; -yy351: +yy358: yych = *++p; - if (yych == 'R') goto yy352; + if (yych == 'R') goto yy359; if (yych != 'r') goto yy31; -yy352: +yy359: yych = *++p; - if (yych == 'O') goto yy353; + if (yych == 'O') goto yy360; if (yych != 'o') goto yy31; -yy353: +yy360: yych = *++p; - if (yych == 'J') goto yy354; + if (yych == 'J') goto yy361; if (yych != 'j') goto yy31; -yy354: +yy361: yych = *++p; - if (yych == 'E') goto yy355; + if (yych == 'E') goto yy362; if (yych != 'e') goto yy31; -yy355: +yy362: yych = *++p; - if (yych == 'C') goto yy356; + if (yych == 'C') goto yy363; if (yych != 'c') goto yy31; -yy356: +yy363: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy357: +yy364: yych = *++p; - if (yych == 'L') goto yy358; + if (yych == 'L') goto yy365; if (yych != 'l') goto yy31; -yy358: +yy365: yych = *++p; - if (yych == 'K') goto yy34; - if (yych == 'k') goto yy34; + if (yych == 'K') goto yy41; + if (yych == 'k') goto yy41; goto yy31; -yy359: +yy366: yych = *++p; if (yych <= 'S') { if (yych <= 'M') { - if (yych == 'L') goto yy369; + if (yych == 'L') goto yy376; goto yy31; } else { - if (yych <= 'N') goto yy370; + if (yych <= 'N') goto yy377; if (yych <= 'R') goto yy31; - goto yy371; + goto yy378; } } else { if (yych <= 'm') { - if (yych == 'l') goto yy369; + if (yych == 'l') goto yy376; goto yy31; } else { - if (yych <= 'n') goto yy370; - if (yych == 's') goto yy371; + if (yych <= 'n') goto yy377; + if (yych == 's') goto yy378; goto yy31; } } -yy360: +yy367: yych = *++p; - if (yych == 'E') goto yy368; - if (yych == 'e') goto yy368; + if (yych == 'E') goto yy375; + if (yych == 'e') goto yy375; goto yy31; -yy361: +yy368: yych = *++p; - if (yych == 'C') goto yy363; - if (yych == 'c') goto yy363; + if (yych == 'C') goto yy370; + if (yych == 'c') goto yy370; goto yy31; -yy362: +yy369: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy363: +yy370: yych = *++p; - if (yych == 'E') goto yy364; + if (yych == 'E') goto yy371; if (yych != 'e') goto yy31; -yy364: +yy371: yych = *++p; - if (yych == 'T') goto yy365; + if (yych == 'T') goto yy372; if (yych != 't') goto yy31; -yy365: +yy372: yych = *++p; - if (yych == 'I') goto yy366; + if (yych == 'I') goto yy373; if (yych != 'i') goto yy31; -yy366: +yy373: yych = *++p; - if (yych == 'M') goto yy367; + if (yych == 'M') goto yy374; if (yych != 'm') goto yy31; -yy367: +yy374: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy368: +yy375: yych = *++p; - if (yych == 'D') goto yy34; - if (yych == 'd') goto yy34; + if (yych == 'D') goto yy41; + if (yych == 'd') goto yy41; goto yy31; -yy369: +yy376: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy370: +yy377: yych = *++p; - if (yych == 'G') goto yy372; - if (yych == 'g') goto yy372; + if (yych == 'G') goto yy379; + if (yych == 'g') goto yy379; goto yy31; -yy371: +yy378: yych = *++p; - if (yych == 'H') goto yy34; - if (yych == 'h') goto yy34; + if (yych == 'H') goto yy41; + if (yych == 'h') goto yy41; goto yy31; -yy372: +yy379: yych = *++p; - if (yych == 'E') goto yy373; + if (yych == 'E') goto yy380; if (yych != 'e') goto yy31; -yy373: +yy380: yych = *++p; - if (yych == 'R') goto yy34; - if (yych == 'r') goto yy34; + if (yych == 'R') goto yy41; + if (yych == 'r') goto yy41; goto yy31; -yy374: +yy381: yych = *++p; - if (yych == 'T') goto yy392; - if (yych == 't') goto yy392; + if (yych == 'T') goto yy399; + if (yych == 't') goto yy399; goto yy31; -yy375: +yy382: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy376: +yy383: yych = *++p; - if (yych == 'M') goto yy34; - if (yych == 'm') goto yy34; + if (yych == 'M') goto yy41; + if (yych == 'm') goto yy41; goto yy31; -yy377: +yy384: yych = *++p; if (yych <= 'S') { - if (yych == 'P') goto yy34; + if (yych == 'P') goto yy41; if (yych <= 'R') goto yy31; - goto yy34; + goto yy41; } else { if (yych <= 'p') { if (yych <= 'o') goto yy31; - goto yy34; + goto yy41; } else { - if (yych == 's') goto yy34; + if (yych == 's') goto yy41; goto yy31; } } -yy378: +yy385: yych = *++p; - if (yych == 'I') goto yy386; - if (yych == 'i') goto yy386; + if (yych == 'I') goto yy393; + if (yych == 'i') goto yy393; goto yy31; -yy379: +yy386: yych = *++p; - if (yych == 'A') goto yy385; - if (yych == 'a') goto yy385; + if (yych == 'A') goto yy392; + if (yych == 'a') goto yy392; goto yy31; -yy380: +yy387: yych = *++p; - if (yych == 'O') goto yy383; - if (yych == 'o') goto yy383; + if (yych == 'O') goto yy390; + if (yych == 'o') goto yy390; goto yy31; -yy381: +yy388: yych = *++p; - if (yych == 'A') goto yy382; + if (yych == 'A') goto yy389; if (yych != 'a') goto yy31; -yy382: +yy389: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy35; + if (yych == ':') goto yy42; goto yy31; } else { - if (yych <= 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych <= 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; } -yy383: +yy390: yych = *++p; - if (yych == 'U') goto yy384; + if (yych == 'U') goto yy391; if (yych != 'u') goto yy31; -yy384: +yy391: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy385: +yy392: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy386: +yy393: yych = *++p; - if (yych == 'U') goto yy387; + if (yych == 'U') goto yy394; if (yych != 'u') goto yy31; -yy387: +yy394: yych = *++p; - if (yych == 'M') goto yy388; + if (yych == 'M') goto yy395; if (yych != 'm') goto yy31; -yy388: +yy395: yych = *++p; - if (yych == 'X') goto yy389; + if (yych == 'X') goto yy396; if (yych != 'x') goto yy31; -yy389: +yy396: yych = *++p; - if (yych == 'T') goto yy390; + if (yych == 'T') goto yy397; if (yych != 't') goto yy31; -yy390: +yy397: yych = *++p; - if (yych == 'R') goto yy391; + if (yych == 'R') goto yy398; if (yych != 'r') goto yy31; -yy391: +yy398: yych = *++p; - if (yych == 'A') goto yy34; - if (yych == 'a') goto yy34; + if (yych == 'A') goto yy41; + if (yych == 'a') goto yy41; goto yy31; -yy392: +yy399: yych = *++p; - if (yych == 'A') goto yy393; + if (yych == 'A') goto yy400; if (yych != 'a') goto yy31; -yy393: +yy400: yych = *++p; - if (yych == 'C') goto yy394; + if (yych == 'C') goto yy401; if (yych != 'c') goto yy31; -yy394: +yy401: yych = *++p; - if (yych == 'H') goto yy395; + if (yych == 'H') goto yy402; if (yych != 'h') goto yy31; -yy395: +yy402: yych = *++p; - if (yych == 'M') goto yy396; + if (yych == 'M') goto yy403; if (yych != 'm') goto yy31; -yy396: +yy403: yych = *++p; - if (yych == 'E') goto yy397; + if (yych == 'E') goto yy404; if (yych != 'e') goto yy31; -yy397: +yy404: yych = *++p; - if (yych == 'N') goto yy398; + if (yych == 'N') goto yy405; if (yych != 'n') goto yy31; -yy398: +yy405: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy399: +yy406: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy400: +yy407: yych = *++p; if (yych <= 'V') { - if (yych == 'R') goto yy34; + if (yych == 'R') goto yy41; if (yych <= 'U') goto yy31; } else { if (yych <= 'r') { if (yych <= 'q') goto yy31; - goto yy34; + goto yy41; } else { if (yych != 'v') goto yy31; } } yych = *++p; - if (yych == 'A') goto yy402; + if (yych == 'A') goto yy409; if (yych != 'a') goto yy31; -yy402: +yy409: yych = *++p; - if (yych == 'S') goto yy403; + if (yych == 'S') goto yy410; if (yych != 's') goto yy31; -yy403: +yy410: yych = *++p; - if (yych == 'C') goto yy404; + if (yych == 'C') goto yy411; if (yych != 'c') goto yy31; -yy404: +yy411: yych = *++p; - if (yych == 'R') goto yy405; + if (yych == 'R') goto yy412; if (yych != 'r') goto yy31; -yy405: +yy412: yych = *++p; - if (yych == 'I') goto yy406; + if (yych == 'I') goto yy413; if (yych != 'i') goto yy31; -yy406: +yy413: yych = *++p; - if (yych == 'P') goto yy407; + if (yych == 'P') goto yy414; if (yych != 'p') goto yy31; -yy407: +yy414: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy408: +yy415: yych = *++p; - if (yych == 'B') goto yy34; - if (yych == 'b') goto yy34; + if (yych == 'B') goto yy41; + if (yych == 'b') goto yy41; goto yy31; -yy409: +yy416: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy410: +yy417: yych = *++p; - if (yych == 'N') goto yy417; - if (yych == 'n') goto yy417; + if (yych == 'N') goto yy424; + if (yych == 'n') goto yy424; goto yy31; -yy411: +yy418: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy412: +yy419: yych = *++p; - if (yych == 'C') goto yy416; - if (yych == 'c') goto yy416; + if (yych == 'C') goto yy423; + if (yych == 'c') goto yy423; goto yy31; -yy413: +yy420: yych = *++p; if (yych <= 'V') { - if (yych == 'T') goto yy415; + if (yych == 'T') goto yy422; if (yych <= 'U') goto yy31; - goto yy34; + goto yy41; } else { if (yych <= 't') { if (yych <= 's') goto yy31; - goto yy415; + goto yy422; } else { - if (yych == 'v') goto yy34; + if (yych == 'v') goto yy41; goto yy31; } } -yy414: +yy421: yych = *++p; - if (yych == 'I') goto yy34; - if (yych == 'i') goto yy34; + if (yych == 'I') goto yy41; + if (yych == 'i') goto yy41; goto yy31; -yy415: +yy422: yych = *++p; - if (yych == 'A') goto yy34; - if (yych == 'a') goto yy34; + if (yych == 'A') goto yy41; + if (yych == 'a') goto yy41; goto yy31; -yy416: +yy423: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy417: +yy424: yych = *++p; - if (yych == 'A') goto yy418; + if (yych == 'A') goto yy425; if (yych != 'a') goto yy31; -yy418: +yy425: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'P') goto yy420; + if (yych == 'P') goto yy427; if (yych != 'p') goto yy31; -yy420: +yy427: yych = *++p; - if (yych == 'L') goto yy421; + if (yych == 'L') goto yy428; if (yych != 'l') goto yy31; -yy421: +yy428: yych = *++p; - if (yych == 'A') goto yy422; + if (yych == 'A') goto yy429; if (yych != 'a') goto yy31; -yy422: +yy429: yych = *++p; - if (yych == 'Y') goto yy423; + if (yych == 'Y') goto yy430; if (yych != 'y') goto yy31; -yy423: +yy430: yych = *++p; if (yych <= 'S') { - if (yych == 'C') goto yy424; + if (yych == 'C') goto yy431; if (yych <= 'R') goto yy31; - goto yy425; + goto yy432; } else { if (yych <= 'c') { if (yych <= 'b') goto yy31; } else { - if (yych == 's') goto yy425; + if (yych == 's') goto yy432; goto yy31; } } -yy424: +yy431: yych = *++p; - if (yych == 'O') goto yy430; - if (yych == 'o') goto yy430; + if (yych == 'O') goto yy437; + if (yych == 'o') goto yy437; goto yy31; -yy425: +yy432: yych = *++p; - if (yych == 'I') goto yy426; + if (yych == 'I') goto yy433; if (yych != 'i') goto yy31; -yy426: +yy433: yych = *++p; - if (yych == 'N') goto yy427; + if (yych == 'N') goto yy434; if (yych != 'n') goto yy31; -yy427: +yy434: yych = *++p; - if (yych == 'G') goto yy428; + if (yych == 'G') goto yy435; if (yych != 'g') goto yy31; -yy428: +yy435: yych = *++p; - if (yych == 'L') goto yy429; + if (yych == 'L') goto yy436; if (yych != 'l') goto yy31; -yy429: +yy436: yych = *++p; - if (yych == 'E') goto yy34; - if (yych == 'e') goto yy34; + if (yych == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; -yy430: +yy437: yych = *++p; - if (yych == 'N') goto yy431; + if (yych == 'N') goto yy438; if (yych != 'n') goto yy31; -yy431: +yy438: yych = *++p; - if (yych == 'T') goto yy432; + if (yych == 'T') goto yy439; if (yych != 't') goto yy31; -yy432: +yy439: yych = *++p; - if (yych == 'A') goto yy433; + if (yych == 'A') goto yy440; if (yych != 'a') goto yy31; -yy433: +yy440: yych = *++p; - if (yych == 'I') goto yy434; + if (yych == 'I') goto yy441; if (yych != 'i') goto yy31; -yy434: +yy441: yych = *++p; - if (yych == 'N') goto yy435; + if (yych == 'N') goto yy442; if (yych != 'n') goto yy31; -yy435: +yy442: yych = *++p; - if (yych == 'E') goto yy436; + if (yych == 'E') goto yy443; if (yych != 'e') goto yy31; -yy436: +yy443: yych = *++p; - if (yych == 'R') goto yy34; - if (yych == 'r') goto yy34; + if (yych == 'R') goto yy41; + if (yych == 'r') goto yy41; goto yy31; -yy437: +yy444: yych = *++p; - if (yych == 'S') goto yy34; - if (yych == 's') goto yy34; + if (yych == 'S') goto yy41; + if (yych == 's') goto yy41; goto yy31; -yy438: +yy445: yych = *++p; if (yych <= 'N') { if (yych <= 'A') { if (yych <= '@') goto yy31; - goto yy460; + goto yy467; } else { if (yych <= 'L') goto yy31; - if (yych <= 'M') goto yy461; - goto yy462; + if (yych <= 'M') goto yy468; + goto yy469; } } else { if (yych <= 'l') { - if (yych == 'a') goto yy460; + if (yych == 'a') goto yy467; goto yy31; } else { - if (yych <= 'm') goto yy461; - if (yych <= 'n') goto yy462; + if (yych <= 'm') goto yy468; + if (yych <= 'n') goto yy469; goto yy31; } } -yy439: +yy446: yych = *++p; - if (yych == 'R') goto yy447; - if (yych == 'r') goto yy447; + if (yych == 'R') goto yy454; + if (yych == 'r') goto yy454; goto yy31; -yy440: +yy447: yych = *++p; if (yych <= 'P') { - if (yych == 'L') goto yy444; + if (yych == 'L') goto yy451; if (yych <= 'O') goto yy31; - goto yy34; + goto yy41; } else { if (yych <= 'l') { if (yych <= 'k') goto yy31; - goto yy444; + goto yy451; } else { - if (yych == 'p') goto yy34; + if (yych == 'p') goto yy41; goto yy31; } } -yy441: +yy448: yych = *++p; - if (yych == 'I') goto yy443; - if (yych == 'i') goto yy443; + if (yych == 'I') goto yy450; + if (yych == 'i') goto yy450; goto yy31; -yy442: +yy449: yych = *++p; - if (yych == 'D') goto yy34; - if (yych == 'd') goto yy34; + if (yych == 'D') goto yy41; + if (yych == 'd') goto yy41; goto yy31; -yy443: +yy450: yych = *++p; - if (yych == 'D') goto yy34; - if (yych == 'd') goto yy34; + if (yych == 'D') goto yy41; + if (yych == 'd') goto yy41; goto yy31; -yy444: +yy451: yych = *++p; - if (yych == 'L') goto yy445; + if (yych == 'L') goto yy452; if (yych != 'l') goto yy31; -yy445: +yy452: yych = *++p; - if (yych == 'T') goto yy446; + if (yych == 'T') goto yy453; if (yych != 't') goto yy31; -yy446: +yy453: yych = *++p; - if (yych == 'O') goto yy34; - if (yych == 'o') goto yy34; + if (yych == 'O') goto yy41; + if (yych == 'o') goto yy41; goto yy31; -yy447: +yy454: yych = *++p; - if (yych == 'O') goto yy448; + if (yych == 'O') goto yy455; if (yych != 'o') goto yy31; -yy448: +yy455: yych = *++p; - if (yych == 'M') goto yy449; + if (yych == 'M') goto yy456; if (yych != 'm') goto yy31; -yy449: +yy456: yych = *++p; - if (yych == 'E') goto yy450; + if (yych == 'E') goto yy457; if (yych != 'e') goto yy31; -yy450: +yy457: yych = *++p; - if (yych == '-') goto yy451; - if (yych == ':') goto yy35; + if (yych == '-') goto yy458; + if (yych == ':') goto yy42; goto yy31; -yy451: +yy458: yych = *++p; - if (yych == 'E') goto yy452; + if (yych == 'E') goto yy459; if (yych != 'e') goto yy31; -yy452: +yy459: yych = *++p; - if (yych == 'X') goto yy453; + if (yych == 'X') goto yy460; if (yych != 'x') goto yy31; -yy453: +yy460: yych = *++p; - if (yych == 'T') goto yy454; + if (yych == 'T') goto yy461; if (yych != 't') goto yy31; -yy454: +yy461: yych = *++p; - if (yych == 'E') goto yy455; + if (yych == 'E') goto yy462; if (yych != 'e') goto yy31; -yy455: +yy462: yych = *++p; - if (yych == 'N') goto yy456; + if (yych == 'N') goto yy463; if (yych != 'n') goto yy31; -yy456: +yy463: yych = *++p; - if (yych == 'S') goto yy457; + if (yych == 'S') goto yy464; if (yych != 's') goto yy31; -yy457: +yy464: yych = *++p; - if (yych == 'I') goto yy458; + if (yych == 'I') goto yy465; if (yych != 'i') goto yy31; -yy458: +yy465: yych = *++p; - if (yych == 'O') goto yy459; + if (yych == 'O') goto yy466; if (yych != 'o') goto yy31; -yy459: +yy466: yych = *++p; - if (yych == 'N') goto yy34; - if (yych == 'n') goto yy34; + if (yych == 'N') goto yy41; + if (yych == 'n') goto yy41; goto yy31; -yy460: +yy467: yych = *++p; - if (yych == 'P') goto yy34; - if (yych == 'p') goto yy34; + if (yych == 'P') goto yy41; + if (yych == 'p') goto yy41; goto yy31; -yy461: +yy468: yych = *++p; - if (yych == '-') goto yy466; + if (yych == '-') goto yy473; goto yy31; -yy462: +yy469: yych = *++p; - if (yych == 'T') goto yy463; + if (yych == 'T') goto yy470; if (yych != 't') goto yy31; -yy463: +yy470: yych = *++p; - if (yych == 'E') goto yy464; + if (yych == 'E') goto yy471; if (yych != 'e') goto yy31; -yy464: +yy471: yych = *++p; - if (yych == 'N') goto yy465; + if (yych == 'N') goto yy472; if (yych != 'n') goto yy31; -yy465: +yy472: yych = *++p; - if (yych == 'T') goto yy34; - if (yych == 't') goto yy34; + if (yych == 'T') goto yy41; + if (yych == 't') goto yy41; goto yy31; -yy466: +yy473: yych = *++p; - if (yych == 'E') goto yy467; + if (yych == 'E') goto yy474; if (yych != 'e') goto yy31; -yy467: +yy474: yych = *++p; - if (yych == 'V') goto yy468; + if (yych == 'V') goto yy475; if (yych != 'v') goto yy31; -yy468: +yy475: yych = *++p; - if (yych == 'E') goto yy469; + if (yych == 'E') goto yy476; if (yych != 'e') goto yy31; -yy469: +yy476: yych = *++p; - if (yych == 'N') goto yy470; + if (yych == 'N') goto yy477; if (yych != 'n') goto yy31; -yy470: +yy477: yych = *++p; - if (yych == 'T') goto yy471; + if (yych == 'T') goto yy478; if (yych != 't') goto yy31; -yy471: +yy478: yych = *++p; - if (yych == 'B') goto yy472; + if (yych == 'B') goto yy479; if (yych != 'b') goto yy31; -yy472: +yy479: yych = *++p; - if (yych == 'R') goto yy473; + if (yych == 'R') goto yy480; if (yych != 'r') goto yy31; -yy473: +yy480: yych = *++p; - if (yych == 'I') goto yy474; + if (yych == 'I') goto yy481; if (yych != 'i') goto yy31; -yy474: +yy481: yych = *++p; - if (yych == 'T') goto yy475; + if (yych == 'T') goto yy482; if (yych != 't') goto yy31; -yy475: +yy482: yych = *++p; - if (yych == 'E') goto yy476; + if (yych == 'E') goto yy483; if (yych != 'e') goto yy31; -yy476: +yy483: yych = *++p; if (yych != '-') goto yy31; yych = *++p; - if (yych == 'A') goto yy478; + if (yych == 'A') goto yy485; if (yych != 'a') goto yy31; -yy478: +yy485: yych = *++p; - if (yych == 'T') goto yy479; + if (yych == 'T') goto yy486; if (yych != 't') goto yy31; -yy479: +yy486: yych = *++p; - if (yych == 'T') goto yy480; + if (yych == 'T') goto yy487; if (yych != 't') goto yy31; -yy480: +yy487: yych = *++p; - if (yych == 'E') goto yy481; + if (yych == 'E') goto yy488; if (yych != 'e') goto yy31; -yy481: +yy488: yych = *++p; - if (yych == 'N') goto yy482; + if (yych == 'N') goto yy489; if (yych != 'n') goto yy31; -yy482: +yy489: yych = *++p; - if (yych == 'D') goto yy483; + if (yych == 'D') goto yy490; if (yych != 'd') goto yy31; -yy483: +yy490: yych = *++p; - if (yych == 'E') goto yy484; + if (yych == 'E') goto yy491; if (yych != 'e') goto yy31; -yy484: +yy491: ++p; - if ((yych = *p) == 'E') goto yy34; - if (yych == 'e') goto yy34; + if ((yych = *p) == 'E') goto yy41; + if (yych == 'e') goto yy41; goto yy31; } @@ -2943,2929 +3039,3088 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, }; - yych = *p; - switch (yych) { - case '\n': goto yy487; - case 'A': - case 'a': goto yy491; - case 'B': - case 'b': goto yy509; - case 'C': - case 'c': goto yy488; - case 'D': - case 'd': goto yy489; - case 'E': - case 'e': goto yy510; - case 'F': - case 'f': goto yy492; - case 'G': - case 'g': goto yy493; - case 'H': - case 'h': goto yy494; - case 'I': - case 'i': goto yy495; - case 'J': - case 'j': goto yy490; - case 'K': - case 'k': goto yy511; - case 'L': - case 'l': goto yy496; - case 'M': - case 'm': goto yy497; - case 'N': - case 'n': goto yy498; - case 'O': - case 'o': goto yy499; - case 'P': - case 'p': goto yy500; - case 'Q': - case 'q': goto yy512; - case 'R': - case 'r': goto yy501; - case 'S': - case 's': goto yy502; - case 'T': - case 't': goto yy503; - case 'U': - case 'u': goto yy504; - case 'V': - case 'v': goto yy505; - case 'W': - case 'w': goto yy506; - case 'X': - case 'x': goto yy507; - case 'Y': - case 'y': goto yy513; - case 'Z': - case 'z': goto yy508; - default: goto yy514; + yych = *(marker = p); + if (yych <= 'c') { + if (yych <= 'M') { + if (yych <= 'E') { + if (yych <= 'A') { + if (yych == '\n') goto yy494; + if (yych <= '@') goto yy521; + goto yy498; + } else { + if (yych <= 'B') goto yy516; + if (yych <= 'C') goto yy495; + if (yych <= 'D') goto yy496; + goto yy517; + } + } else { + if (yych <= 'I') { + if (yych <= 'F') goto yy499; + if (yych <= 'G') goto yy500; + if (yych <= 'H') goto yy501; + goto yy502; + } else { + if (yych <= 'J') goto yy497; + if (yych <= 'K') goto yy518; + if (yych <= 'L') goto yy503; + goto yy504; + } + } + } else { + if (yych <= 'U') { + if (yych <= 'Q') { + if (yych <= 'N') goto yy505; + if (yych <= 'O') goto yy506; + if (yych <= 'P') goto yy507; + goto yy519; + } else { + if (yych <= 'R') goto yy508; + if (yych <= 'S') goto yy509; + if (yych <= 'T') goto yy510; + goto yy511; + } + } else { + if (yych <= 'Y') { + if (yych <= 'V') goto yy512; + if (yych <= 'W') goto yy513; + if (yych <= 'X') goto yy514; + goto yy520; + } else { + if (yych <= '`') { + if (yych <= 'Z') goto yy515; + goto yy521; + } else { + if (yych <= 'a') goto yy498; + if (yych <= 'b') goto yy516; + goto yy495; + } + } + } + } + } else { + if (yych <= 't') { + if (yych <= 'k') { + if (yych <= 'g') { + if (yych <= 'd') goto yy496; + if (yych <= 'e') goto yy517; + if (yych <= 'f') goto yy499; + goto yy500; + } else { + if (yych <= 'h') goto yy501; + if (yych <= 'i') goto yy502; + if (yych <= 'j') goto yy497; + goto yy518; + } + } else { + if (yych <= 'o') { + if (yych <= 'l') goto yy503; + if (yych <= 'm') goto yy504; + if (yych <= 'n') goto yy505; + goto yy506; + } else { + if (yych <= 'q') { + if (yych <= 'p') goto yy507; + goto yy519; + } else { + if (yych <= 'r') goto yy508; + if (yych <= 's') goto yy509; + goto yy510; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= 'x') { + if (yych <= 'u') goto yy511; + if (yych <= 'v') goto yy512; + if (yych <= 'w') goto yy513; + goto yy514; + } else { + if (yych <= 'y') goto yy520; + if (yych <= 'z') goto yy515; + if (yych <= 0x7F) goto yy521; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy522; + if (yych <= 0xE0) goto yy524; + if (yych <= 0xEC) goto yy525; + goto yy529; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy525; + goto yy526; + } else { + if (yych <= 0xF3) goto yy527; + if (yych <= 0xF4) goto yy528; + } + } + } + } } -yy487: +yy494: { return 0; } -yy488: +yy495: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy927; + case 'a': goto yy948; case 'H': - case 'h': goto yy926; + case 'h': goto yy947; case 'I': - case 'i': goto yy929; + case 'i': goto yy950; case 'O': - case 'o': goto yy925; + case 'o': goto yy946; case 'R': - case 'r': goto yy928; + case 'r': goto yy949; case 'V': - case 'v': goto yy924; - default: goto yy487; + case 'v': goto yy945; + default: goto yy494; } -yy489: +yy496: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy900; + case 'a': goto yy921; case 'I': - case 'i': goto yy899; + case 'i': goto yy920; case 'L': - case 'l': goto yy897; + case 'l': goto yy918; case 'N': - case 'n': goto yy898; + case 'n': goto yy919; case 'O': - case 'o': goto yy901; + case 'o': goto yy922; case 'T': - case 't': goto yy896; + case 't': goto yy917; case 'V': - case 'v': goto yy895; - default: goto yy487; + case 'v': goto yy916; + default: goto yy494; } -yy490: +yy497: yych = *(marker = ++p); if (yych <= 'M') { - if (yych == 'A') goto yy887; - if (yych <= 'L') goto yy487; - goto yy886; + if (yych == 'A') goto yy908; + if (yych <= 'L') goto yy494; + goto yy907; } else { if (yych <= 'a') { - if (yych <= '`') goto yy487; - goto yy887; + if (yych <= '`') goto yy494; + goto yy908; } else { - if (yych == 'm') goto yy886; - goto yy487; + if (yych == 'm') goto yy907; + goto yy494; } } -yy491: +yy498: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy868; + case 'a': goto yy889; case 'B': - case 'b': goto yy867; + case 'b': goto yy888; case 'C': - case 'c': goto yy866; + case 'c': goto yy887; case 'D': - case 'd': goto yy865; + case 'd': goto yy886; case 'F': - case 'f': goto yy864; + case 'f': goto yy885; case 'I': - case 'i': goto yy863; + case 'i': goto yy884; case 'P': - case 'p': goto yy862; + case 'p': goto yy883; case 'T': - case 't': goto yy861; + case 't': goto yy882; case 'W': - case 'w': goto yy519; - default: goto yy487; + case 'w': goto yy533; + default: goto yy494; } -yy492: +yy499: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'E') { - if (yych == 'A') goto yy848; - if (yych <= 'D') goto yy487; - goto yy847; + if (yych == 'A') goto yy869; + if (yych <= 'D') goto yy494; + goto yy868; } else { - if (yych == 'I') goto yy846; - if (yych <= 'S') goto yy487; - goto yy849; + if (yych == 'I') goto yy867; + if (yych <= 'S') goto yy494; + goto yy870; } } else { if (yych <= 'e') { - if (yych == 'a') goto yy848; - if (yych <= 'd') goto yy487; - goto yy847; + if (yych == 'a') goto yy869; + if (yych <= 'd') goto yy494; + goto yy868; } else { if (yych <= 'i') { - if (yych <= 'h') goto yy487; - goto yy846; + if (yych <= 'h') goto yy494; + goto yy867; } else { - if (yych == 't') goto yy849; - goto yy487; + if (yych == 't') goto yy870; + goto yy494; } } } -yy493: +yy500: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy831; + case 'e': goto yy852; case 'G': - case 'g': goto yy519; + case 'g': goto yy533; case 'I': - case 'i': goto yy829; + case 'i': goto yy850; case 'O': - case 'o': goto yy830; + case 'o': goto yy851; case 'T': - case 't': goto yy828; - default: goto yy487; + case 't': goto yy849; + default: goto yy494; } -yy494: +yy501: yych = *(marker = ++p); if (yych <= 'S') { if (yych <= '3') { - if (yych <= '2') goto yy487; - goto yy824; + if (yych <= '2') goto yy494; + goto yy845; } else { - if (yych == 'C') goto yy822; - goto yy487; + if (yych == 'C') goto yy843; + goto yy494; } } else { if (yych <= 'c') { - if (yych <= 'T') goto yy823; - if (yych <= 'b') goto yy487; - goto yy822; + if (yych <= 'T') goto yy844; + if (yych <= 'b') goto yy494; + goto yy843; } else { - if (yych == 't') goto yy823; - goto yy487; + if (yych == 't') goto yy844; + goto yy494; } } -yy495: +yy502: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy804; + case 'a': goto yy825; case 'C': - case 'c': goto yy801; + case 'c': goto yy822; case 'M': - case 'm': goto yy803; + case 'm': goto yy824; case 'N': - case 'n': goto yy802; + case 'n': goto yy823; case 'P': - case 'p': goto yy800; + case 'p': goto yy821; case 'R': - case 'r': goto yy799; + case 'r': goto yy820; case 'T': - case 't': goto yy798; - default: goto yy487; + case 't': goto yy819; + default: goto yy494; } -yy496: +yy503: yych = *(marker = ++p); if (yych <= 'D') { - if (yych == 'A') goto yy792; - if (yych <= 'C') goto yy487; - goto yy791; + if (yych == 'A') goto yy813; + if (yych <= 'C') goto yy494; + goto yy812; } else { if (yych <= 'a') { - if (yych <= '`') goto yy487; - goto yy792; + if (yych <= '`') goto yy494; + goto yy813; } else { - if (yych == 'd') goto yy791; - goto yy487; + if (yych == 'd') goto yy812; + goto yy494; } } -yy497: +yy504: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy758; + case 'a': goto yy779; case 'E': - case 'e': goto yy757; + case 'e': goto yy778; case 'I': - case 'i': goto yy760; + case 'i': goto yy781; case 'M': - case 'm': goto yy756; + case 'm': goto yy777; case 'S': - case 's': goto yy755; + case 's': goto yy776; case 'T': - case 't': goto yy759; + case 't': goto yy780; case 'U': - case 'u': goto yy754; + case 'u': goto yy775; case 'V': - case 'v': goto yy753; - default: goto yy487; + case 'v': goto yy774; + default: goto yy494; } -yy498: +yy505: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy748; + case 'e': goto yy769; case 'F': - case 'f': goto yy747; + case 'f': goto yy768; case 'I': - case 'i': goto yy746; + case 'i': goto yy767; case 'N': - case 'n': goto yy745; + case 'n': goto yy766; case 'O': - case 'o': goto yy744; - default: goto yy487; + case 'o': goto yy765; + default: goto yy494; } -yy499: +yy506: yych = *(marker = ++p); if (yych <= 'P') { - if (yych == 'I') goto yy730; - if (yych <= 'O') goto yy487; - goto yy731; + if (yych == 'I') goto yy751; + if (yych <= 'O') goto yy494; + goto yy752; } else { if (yych <= 'i') { - if (yych <= 'h') goto yy487; - goto yy730; + if (yych <= 'h') goto yy494; + goto yy751; } else { - if (yych == 'p') goto yy731; - goto yy487; + if (yych == 'p') goto yy752; + goto yy494; } } -yy500: +yy507: yych = *(marker = ++p); if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'A') goto yy712; - if (yych <= 'K') goto yy487; - goto yy711; + if (yych == 'A') goto yy733; + if (yych <= 'K') goto yy494; + goto yy732; } else { if (yych <= 'O') { - if (yych <= 'N') goto yy487; - goto yy713; + if (yych <= 'N') goto yy494; + goto yy734; } else { - if (yych <= 'Q') goto yy487; - if (yych <= 'R') goto yy710; - goto yy709; + if (yych <= 'Q') goto yy494; + if (yych <= 'R') goto yy731; + goto yy730; } } } else { if (yych <= 'n') { if (yych <= 'a') { - if (yych <= '`') goto yy487; - goto yy712; + if (yych <= '`') goto yy494; + goto yy733; } else { - if (yych == 'l') goto yy711; - goto yy487; + if (yych == 'l') goto yy732; + goto yy494; } } else { if (yych <= 'q') { - if (yych <= 'o') goto yy713; - goto yy487; + if (yych <= 'o') goto yy734; + goto yy494; } else { - if (yych <= 'r') goto yy710; - if (yych <= 's') goto yy709; - goto yy487; + if (yych <= 'r') goto yy731; + if (yych <= 's') goto yy730; + goto yy494; } } } -yy501: +yy508: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'L') { - if (yych == 'E') goto yy699; - goto yy487; + if (yych == 'E') goto yy720; + goto yy494; } else { - if (yych <= 'M') goto yy698; - if (yych <= 'R') goto yy487; - if (yych <= 'S') goto yy697; - goto yy696; + if (yych <= 'M') goto yy719; + if (yych <= 'R') goto yy494; + if (yych <= 'S') goto yy718; + goto yy717; } } else { if (yych <= 'm') { - if (yych == 'e') goto yy699; - if (yych <= 'l') goto yy487; - goto yy698; + if (yych == 'e') goto yy720; + if (yych <= 'l') goto yy494; + goto yy719; } else { - if (yych <= 'r') goto yy487; - if (yych <= 's') goto yy697; - if (yych <= 't') goto yy696; - goto yy487; + if (yych <= 'r') goto yy494; + if (yych <= 's') goto yy718; + if (yych <= 't') goto yy717; + goto yy494; } } -yy502: +yy509: yych = *(marker = ++p); switch (yych) { case 'E': - case 'e': goto yy652; + case 'e': goto yy673; case 'F': - case 'f': goto yy651; + case 'f': goto yy672; case 'G': - case 'g': goto yy650; + case 'g': goto yy671; case 'H': - case 'h': goto yy655; + case 'h': goto yy676; case 'I': - case 'i': goto yy654; + case 'i': goto yy675; case 'K': - case 'k': goto yy649; + case 'k': goto yy670; case 'M': - case 'm': goto yy648; + case 'm': goto yy669; case 'N': - case 'n': goto yy653; + case 'n': goto yy674; case 'O': - case 'o': goto yy647; + case 'o': goto yy668; case 'P': - case 'p': goto yy646; + case 'p': goto yy667; case 'S': - case 's': goto yy645; + case 's': goto yy666; case 'T': - case 't': goto yy644; + case 't': goto yy665; case 'V': - case 'v': goto yy643; - default: goto yy487; + case 'v': goto yy664; + default: goto yy494; } -yy503: +yy510: yych = *(marker = ++p); switch (yych) { case 'A': - case 'a': goto yy619; + case 'a': goto yy640; case 'E': - case 'e': goto yy615; + case 'e': goto yy636; case 'F': - case 'f': goto yy618; + case 'f': goto yy639; case 'H': - case 'h': goto yy614; + case 'h': goto yy635; case 'I': - case 'i': goto yy616; + case 'i': goto yy637; case 'N': - case 'n': goto yy617; + case 'n': goto yy638; case 'V': - case 'v': goto yy519; - default: goto yy487; + case 'v': goto yy533; + default: goto yy494; } -yy504: +yy511: yych = *(marker = ++p); if (yych <= 'T') { if (yych <= 'N') { - if (yych == 'D') goto yy606; - if (yych <= 'M') goto yy487; - goto yy605; + if (yych == 'D') goto yy627; + if (yych <= 'M') goto yy494; + goto yy626; } else { - if (yych == 'R') goto yy607; - if (yych <= 'S') goto yy487; - goto yy604; + if (yych == 'R') goto yy628; + if (yych <= 'S') goto yy494; + goto yy625; } } else { if (yych <= 'n') { - if (yych == 'd') goto yy606; - if (yych <= 'm') goto yy487; - goto yy605; + if (yych == 'd') goto yy627; + if (yych <= 'm') goto yy494; + goto yy626; } else { if (yych <= 'r') { - if (yych <= 'q') goto yy487; - goto yy607; + if (yych <= 'q') goto yy494; + goto yy628; } else { - if (yych == 't') goto yy604; - goto yy487; + if (yych == 't') goto yy625; + goto yy494; } } } -yy505: +yy512: yych = *(marker = ++p); if (yych <= 'I') { - if (yych == 'E') goto yy588; - if (yych <= 'H') goto yy487; - goto yy587; + if (yych == 'E') goto yy609; + if (yych <= 'H') goto yy494; + goto yy608; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy487; - goto yy588; + if (yych <= 'd') goto yy494; + goto yy609; } else { - if (yych == 'i') goto yy587; - goto yy487; + if (yych == 'i') goto yy608; + goto yy494; } } -yy506: +yy513: yych = *(marker = ++p); if (yych <= 'Y') { if (yych <= 'R') { - if (yych == 'E') goto yy577; - goto yy487; + if (yych == 'E') goto yy598; + goto yy494; } else { - if (yych <= 'S') goto yy578; - if (yych <= 'T') goto yy576; - if (yych <= 'X') goto yy487; - goto yy575; + if (yych <= 'S') goto yy599; + if (yych <= 'T') goto yy597; + if (yych <= 'X') goto yy494; + goto yy596; } } else { if (yych <= 's') { - if (yych == 'e') goto yy577; - if (yych <= 'r') goto yy487; - goto yy578; + if (yych == 'e') goto yy598; + if (yych <= 'r') goto yy494; + goto yy599; } else { - if (yych <= 't') goto yy576; - if (yych == 'y') goto yy575; - goto yy487; + if (yych <= 't') goto yy597; + if (yych == 'y') goto yy596; + goto yy494; } } -yy507: +yy514: yych = *(marker = ++p); if (yych <= 'R') { if (yych <= 'F') { - if (yych == 'C') goto yy554; - if (yych <= 'E') goto yy487; - goto yy552; + if (yych == 'C') goto yy575; + if (yych <= 'E') goto yy494; + goto yy573; } else { - if (yych == 'M') goto yy553; - if (yych <= 'Q') goto yy487; - goto yy551; + if (yych == 'M') goto yy574; + if (yych <= 'Q') goto yy494; + goto yy572; } } else { if (yych <= 'f') { - if (yych == 'c') goto yy554; - if (yych <= 'e') goto yy487; - goto yy552; + if (yych == 'c') goto yy575; + if (yych <= 'e') goto yy494; + goto yy573; } else { if (yych <= 'm') { - if (yych <= 'l') goto yy487; - goto yy553; + if (yych <= 'l') goto yy494; + goto yy574; } else { - if (yych == 'r') goto yy551; - goto yy487; + if (yych == 'r') goto yy572; + goto yy494; } } } -yy508: +yy515: yych = *(marker = ++p); - if (yych == '3') goto yy546; - goto yy487; -yy509: + if (yych == '3') goto yy567; + goto yy494; +yy516: yych = *(marker = ++p); if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy536; - goto yy487; + if (yych == 'E') goto yy557; + goto yy494; } else { - if (yych <= 'I') goto yy535; - if (yych <= 'N') goto yy487; - goto yy534; + if (yych <= 'I') goto yy556; + if (yych <= 'N') goto yy494; + goto yy555; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy536; - goto yy487; + if (yych == 'e') goto yy557; + goto yy494; } else { - if (yych <= 'i') goto yy535; - if (yych == 'o') goto yy534; - goto yy487; + if (yych <= 'i') goto yy556; + if (yych == 'o') goto yy555; + goto yy494; } } -yy510: +yy517: yych = *(marker = ++p); - if (yych == 'D') goto yy532; - if (yych == 'd') goto yy532; - goto yy487; -yy511: + if (yych == 'D') goto yy553; + if (yych == 'd') goto yy553; + goto yy494; +yy518: yych = *(marker = ++p); - if (yych == 'E') goto yy527; - if (yych == 'e') goto yy527; - goto yy487; -yy512: + if (yych == 'E') goto yy548; + if (yych == 'e') goto yy548; + goto yy494; +yy519: yych = *(marker = ++p); - if (yych == 'U') goto yy524; - if (yych == 'u') goto yy524; - goto yy487; -yy513: + if (yych == 'U') goto yy545; + if (yych == 'u') goto yy545; + goto yy494; +yy520: yych = *(marker = ++p); - if (yych == 'M') goto yy515; - if (yych == 'm') goto yy515; - goto yy487; -yy514: + if (yych == 'M') goto yy530; + if (yych == 'm') goto yy530; + goto yy494; +yy521: yych = *++p; - goto yy487; -yy515: + goto yy494; +yy522: yych = *++p; - if (yych == 'S') goto yy517; - if (yych == 's') goto yy517; -yy516: + if (yych <= 0x7F) goto yy523; + if (yych <= 0xBF) goto yy521; +yy523: p = marker; - goto yy487; -yy517: - yych = *++p; - if (yych == 'G') goto yy518; - if (yych != 'g') goto yy516; -yy518: - yych = *++p; - if (yych == 'R') goto yy519; - if (yych != 'r') goto yy516; -yy519: - yych = *++p; - if (yych != ':') goto yy516; -yy520: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy520; - } - if (yych <= '=') goto yy516; - ++p; - { return (bufsize_t)(p - start); } + goto yy494; yy524: yych = *++p; - if (yych == 'E') goto yy525; - if (yych != 'e') goto yy516; + if (yych <= 0x9F) goto yy523; + if (yych <= 0xBF) goto yy522; + goto yy523; yy525: yych = *++p; - if (yych == 'R') goto yy526; - if (yych != 'r') goto yy516; + if (yych <= 0x7F) goto yy523; + if (yych <= 0xBF) goto yy522; + goto yy523; yy526: yych = *++p; - if (yych == 'Y') goto yy519; - if (yych == 'y') goto yy519; - goto yy516; + if (yych <= 0x8F) goto yy523; + if (yych <= 0xBF) goto yy525; + goto yy523; yy527: yych = *++p; - if (yych == 'Y') goto yy528; - if (yych != 'y') goto yy516; + if (yych <= 0x7F) goto yy523; + if (yych <= 0xBF) goto yy525; + goto yy523; yy528: yych = *++p; - if (yych == 'P') goto yy529; - if (yych != 'p') goto yy516; + if (yych <= 0x7F) goto yy523; + if (yych <= 0x8F) goto yy525; + goto yy523; yy529: yych = *++p; - if (yych == 'A') goto yy530; - if (yych != 'a') goto yy516; + if (yych <= 0x7F) goto yy523; + if (yych <= 0x9F) goto yy522; + goto yy523; yy530: yych = *++p; - if (yych == 'R') goto yy531; - if (yych != 'r') goto yy516; + if (yych == 'S') goto yy531; + if (yych != 's') goto yy523; yy531: yych = *++p; - if (yych == 'C') goto yy519; - if (yych == 'c') goto yy519; - goto yy516; + if (yych == 'G') goto yy532; + if (yych != 'g') goto yy523; yy532: yych = *++p; - if (yych != '2') goto yy516; + if (yych == 'R') goto yy533; + if (yych != 'r') goto yy523; +yy533: yych = *++p; - if (yych == 'K') goto yy519; - if (yych == 'k') goto yy519; - goto yy516; + if (yych != ':') goto yy523; yy534: - yych = *++p; - if (yych == 'L') goto yy545; - if (yych == 'l') goto yy545; - goto yy516; -yy535: - yych = *++p; - if (yych == 'T') goto yy541; - if (yych == 't') goto yy541; - goto yy516; + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy534; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '<') goto yy523; + if (yych <= '>') goto yy543; + goto yy523; + } else { + if (yych <= 0xDF) goto yy536; + if (yych <= 0xE0) goto yy537; + goto yy538; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy542; + if (yych <= 0xEF) goto yy538; + goto yy539; + } else { + if (yych <= 0xF3) goto yy540; + if (yych <= 0xF4) goto yy541; + goto yy523; + } + } yy536: - yych = *++p; - if (yych == 'S') goto yy537; - if (yych != 's') goto yy516; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy523; + if (yych <= 0xBF) goto yy534; + goto yy523; yy537: - yych = *++p; - if (yych == 'H') goto yy538; - if (yych != 'h') goto yy516; + ++p; + yych = *p; + if (yych <= 0x9F) goto yy523; + if (yych <= 0xBF) goto yy536; + goto yy523; yy538: - yych = *++p; - if (yych == 'A') goto yy539; - if (yych != 'a') goto yy516; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy523; + if (yych <= 0xBF) goto yy536; + goto yy523; yy539: - yych = *++p; - if (yych == 'R') goto yy540; - if (yych != 'r') goto yy516; + ++p; + yych = *p; + if (yych <= 0x8F) goto yy523; + if (yych <= 0xBF) goto yy538; + goto yy523; yy540: - yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy523; + if (yych <= 0xBF) goto yy538; + goto yy523; yy541: - yych = *++p; - if (yych == 'C') goto yy542; - if (yych != 'c') goto yy516; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy523; + if (yych <= 0x8F) goto yy538; + goto yy523; yy542: - yych = *++p; - if (yych == 'O') goto yy543; - if (yych != 'o') goto yy516; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy523; + if (yych <= 0x9F) goto yy536; + goto yy523; yy543: - yych = *++p; - if (yych == 'I') goto yy544; - if (yych != 'i') goto yy516; -yy544: - yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + ++p; + { return (bufsize_t)(p - start); } yy545: yych = *++p; - if (yych == 'O') goto yy519; - if (yych == 'o') goto yy519; - goto yy516; + if (yych == 'E') goto yy546; + if (yych != 'e') goto yy523; yy546: yych = *++p; - if (yych != '9') goto yy516; + if (yych == 'R') goto yy547; + if (yych != 'r') goto yy523; +yy547: yych = *++p; - if (yych != '.') goto yy516; + if (yych == 'Y') goto yy533; + if (yych == 'y') goto yy533; + goto yy523; +yy548: yych = *++p; - if (yych != '5') goto yy516; + if (yych == 'Y') goto yy549; + if (yych != 'y') goto yy523; +yy549: yych = *++p; - if (yych != '0') goto yy516; + if (yych == 'P') goto yy550; + if (yych != 'p') goto yy523; +yy550: yych = *++p; - if (yych <= 'Q') goto yy516; - if (yych <= 'S') goto yy519; - if (yych <= 'q') goto yy516; - if (yych <= 's') goto yy519; - goto yy516; + if (yych == 'A') goto yy551; + if (yych != 'a') goto yy523; yy551: yych = *++p; - if (yych == 'I') goto yy519; - if (yych == 'i') goto yy519; - goto yy516; + if (yych == 'R') goto yy552; + if (yych != 'r') goto yy523; yy552: yych = *++p; - if (yych == 'I') goto yy573; - if (yych == 'i') goto yy573; - goto yy516; + if (yych == 'C') goto yy533; + if (yych == 'c') goto yy533; + goto yy523; yy553: yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy563; - if (yych <= 'O') goto yy516; - goto yy564; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy516; - goto yy563; - } else { - if (yych == 'p') goto yy564; - goto yy516; - } - } -yy554: + if (yych != '2') goto yy523; yych = *++p; - if (yych == 'O') goto yy555; - if (yych != 'o') goto yy516; + if (yych == 'K') goto yy533; + if (yych == 'k') goto yy533; + goto yy523; yy555: yych = *++p; - if (yych == 'N') goto yy556; - if (yych != 'n') goto yy516; + if (yych == 'L') goto yy566; + if (yych == 'l') goto yy566; + goto yy523; yy556: yych = *++p; - if (yych == '-') goto yy557; - if (yych == ':') goto yy520; - goto yy516; + if (yych == 'T') goto yy562; + if (yych == 't') goto yy562; + goto yy523; yy557: yych = *++p; - if (yych == 'U') goto yy558; - if (yych != 'u') goto yy516; + if (yych == 'S') goto yy558; + if (yych != 's') goto yy523; yy558: yych = *++p; - if (yych == 'S') goto yy559; - if (yych != 's') goto yy516; + if (yych == 'H') goto yy559; + if (yych != 'h') goto yy523; yy559: yych = *++p; - if (yych == 'E') goto yy560; - if (yych != 'e') goto yy516; + if (yych == 'A') goto yy560; + if (yych != 'a') goto yy523; yy560: yych = *++p; if (yych == 'R') goto yy561; - if (yych != 'r') goto yy516; + if (yych != 'r') goto yy523; yy561: yych = *++p; - if (yych == 'I') goto yy562; - if (yych != 'i') goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy562: yych = *++p; - if (yych == 'D') goto yy519; - if (yych == 'd') goto yy519; - goto yy516; + if (yych == 'C') goto yy563; + if (yych != 'c') goto yy523; yy563: yych = *++p; - if (yych == 'R') goto yy565; - if (yych == 'r') goto yy565; - goto yy516; + if (yych == 'O') goto yy564; + if (yych != 'o') goto yy523; yy564: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'I') goto yy565; + if (yych != 'i') goto yy523; yy565: yych = *++p; - if (yych == 'P') goto yy566; - if (yych != 'p') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy566: yych = *++p; - if (yych == 'C') goto yy567; - if (yych != 'c') goto yy516; + if (yych == 'O') goto yy533; + if (yych == 'o') goto yy533; + goto yy523; yy567: yych = *++p; - if (yych != '.') goto yy516; + if (yych != '9') goto yy523; yych = *++p; - if (yych == 'B') goto yy569; - if (yych != 'b') goto yy516; -yy569: + if (yych != '.') goto yy523; yych = *++p; - if (yych == 'E') goto yy570; - if (yych != 'e') goto yy516; -yy570: + if (yych != '5') goto yy523; yych = *++p; - if (yych == 'E') goto yy571; - if (yych != 'e') goto yy516; -yy571: + if (yych != '0') goto yy523; yych = *++p; - if (yych == 'P') goto yy572; - if (yych != 'p') goto yy516; + if (yych <= 'Q') goto yy523; + if (yych <= 'S') goto yy533; + if (yych <= 'q') goto yy523; + if (yych <= 's') goto yy533; + goto yy523; yy572: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'I') goto yy533; + if (yych == 'i') goto yy533; + goto yy523; yy573: yych = *++p; - if (yych == 'R') goto yy574; - if (yych != 'r') goto yy516; + if (yych == 'I') goto yy594; + if (yych == 'i') goto yy594; + goto yy523; yy574: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych <= 'P') { + if (yych == 'L') goto yy584; + if (yych <= 'O') goto yy523; + goto yy585; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy523; + goto yy584; + } else { + if (yych == 'p') goto yy585; + goto yy523; + } + } yy575: yych = *++p; - if (yych == 'C') goto yy583; - if (yych == 'c') goto yy583; - goto yy516; + if (yych == 'O') goto yy576; + if (yych != 'o') goto yy523; yy576: yych = *++p; - if (yych == 'A') goto yy582; - if (yych == 'a') goto yy582; - goto yy516; + if (yych == 'N') goto yy577; + if (yych != 'n') goto yy523; yy577: yych = *++p; - if (yych == 'B') goto yy579; - if (yych == 'b') goto yy579; - goto yy516; + if (yych == '-') goto yy578; + if (yych == ':') goto yy534; + goto yy523; yy578: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'U') goto yy579; + if (yych != 'u') goto yy523; yy579: yych = *++p; - if (yych == 'C') goto yy580; - if (yych != 'c') goto yy516; + if (yych == 'S') goto yy580; + if (yych != 's') goto yy523; yy580: yych = *++p; - if (yych == 'A') goto yy581; - if (yych != 'a') goto yy516; + if (yych == 'E') goto yy581; + if (yych != 'e') goto yy523; yy581: yych = *++p; - if (yych == 'L') goto yy519; - if (yych == 'l') goto yy519; - goto yy516; + if (yych == 'R') goto yy582; + if (yych != 'r') goto yy523; yy582: yych = *++p; - if (yych == 'I') goto yy519; - if (yych == 'i') goto yy519; - goto yy516; + if (yych == 'I') goto yy583; + if (yych != 'i') goto yy523; yy583: yych = *++p; - if (yych == 'I') goto yy584; - if (yych != 'i') goto yy516; + if (yych == 'D') goto yy533; + if (yych == 'd') goto yy533; + goto yy523; yy584: yych = *++p; - if (yych == 'W') goto yy585; - if (yych != 'w') goto yy516; + if (yych == 'R') goto yy586; + if (yych == 'r') goto yy586; + goto yy523; yy585: yych = *++p; - if (yych == 'Y') goto yy586; - if (yych != 'y') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy586: yych = *++p; - if (yych == 'G') goto yy519; - if (yych == 'g') goto yy519; - goto yy516; + if (yych == 'P') goto yy587; + if (yych != 'p') goto yy523; yy587: yych = *++p; - if (yych == 'E') goto yy596; - if (yych == 'e') goto yy596; - goto yy516; + if (yych == 'C') goto yy588; + if (yych != 'c') goto yy523; yy588: yych = *++p; - if (yych <= 'N') { - if (yych <= 'L') goto yy516; - if (yych >= 'N') goto yy590; - } else { - if (yych <= 'l') goto yy516; - if (yych <= 'm') goto yy589; - if (yych <= 'n') goto yy590; - goto yy516; - } -yy589: + if (yych != '.') goto yy523; yych = *++p; - if (yych == 'M') goto yy595; - if (yych == 'm') goto yy595; - goto yy516; + if (yych == 'B') goto yy590; + if (yych != 'b') goto yy523; yy590: yych = *++p; - if (yych == 'T') goto yy591; - if (yych != 't') goto yy516; + if (yych == 'E') goto yy591; + if (yych != 'e') goto yy523; yy591: yych = *++p; - if (yych == 'R') goto yy592; - if (yych != 'r') goto yy516; + if (yych == 'E') goto yy592; + if (yych != 'e') goto yy523; yy592: yych = *++p; - if (yych == 'I') goto yy593; - if (yych != 'i') goto yy516; + if (yych == 'P') goto yy593; + if (yych != 'p') goto yy523; yy593: yych = *++p; - if (yych == 'L') goto yy594; - if (yych != 'l') goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy594: yych = *++p; - if (yych == 'O') goto yy519; - if (yych == 'o') goto yy519; - goto yy516; + if (yych == 'R') goto yy595; + if (yych != 'r') goto yy523; yy595: yych = *++p; - if (yych == 'I') goto yy519; - if (yych == 'i') goto yy519; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy596: yych = *++p; - if (yych == 'W') goto yy597; - if (yych != 'w') goto yy516; + if (yych == 'C') goto yy604; + if (yych == 'c') goto yy604; + goto yy523; yy597: yych = *++p; - if (yych != '-') goto yy516; + if (yych == 'A') goto yy603; + if (yych == 'a') goto yy603; + goto yy523; +yy598: yych = *++p; - if (yych == 'S') goto yy599; - if (yych != 's') goto yy516; + if (yych == 'B') goto yy600; + if (yych == 'b') goto yy600; + goto yy523; yy599: yych = *++p; - if (yych == 'O') goto yy600; - if (yych != 'o') goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy600: yych = *++p; - if (yych == 'U') goto yy601; - if (yych != 'u') goto yy516; + if (yych == 'C') goto yy601; + if (yych != 'c') goto yy523; yy601: yych = *++p; - if (yych == 'R') goto yy602; - if (yych != 'r') goto yy516; + if (yych == 'A') goto yy602; + if (yych != 'a') goto yy523; yy602: yych = *++p; - if (yych == 'C') goto yy603; - if (yych != 'c') goto yy516; + if (yych == 'L') goto yy533; + if (yych == 'l') goto yy533; + goto yy523; yy603: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'I') goto yy533; + if (yych == 'i') goto yy533; + goto yy523; yy604: yych = *++p; - if (yych == '2') goto yy611; - goto yy516; + if (yych == 'I') goto yy605; + if (yych != 'i') goto yy523; yy605: yych = *++p; - if (yych == 'R') goto yy608; - if (yych == 'r') goto yy608; - goto yy516; + if (yych == 'W') goto yy606; + if (yych != 'w') goto yy523; yy606: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'Y') goto yy607; + if (yych != 'y') goto yy523; yy607: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych == 'G') goto yy533; + if (yych == 'g') goto yy533; + goto yy523; yy608: yych = *++p; - if (yych == 'E') goto yy609; - if (yych != 'e') goto yy516; + if (yych == 'E') goto yy617; + if (yych == 'e') goto yy617; + goto yy523; yy609: yych = *++p; - if (yych == 'A') goto yy610; - if (yych != 'a') goto yy516; + if (yych <= 'N') { + if (yych <= 'L') goto yy523; + if (yych >= 'N') goto yy611; + } else { + if (yych <= 'l') goto yy523; + if (yych <= 'm') goto yy610; + if (yych <= 'n') goto yy611; + goto yy523; + } yy610: yych = *++p; - if (yych == 'L') goto yy519; - if (yych == 'l') goto yy519; - goto yy516; + if (yych == 'M') goto yy616; + if (yych == 'm') goto yy616; + goto yy523; yy611: yych = *++p; - if (yych != '0') goto yy516; + if (yych == 'T') goto yy612; + if (yych != 't') goto yy523; +yy612: yych = *++p; - if (yych != '0') goto yy516; + if (yych == 'R') goto yy613; + if (yych != 'r') goto yy523; +yy613: yych = *++p; - if (yych == '4') goto yy519; - goto yy516; + if (yych == 'I') goto yy614; + if (yych != 'i') goto yy523; yy614: yych = *++p; - if (yych == 'I') goto yy633; - if (yych == 'i') goto yy633; - goto yy516; + if (yych == 'L') goto yy615; + if (yych != 'l') goto yy523; yy615: yych = *++p; - if (yych <= 'L') { - if (yych == 'A') goto yy625; - if (yych <= 'K') goto yy516; - goto yy624; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy516; - goto yy625; - } else { - if (yych == 'l') goto yy624; - goto yy516; - } - } + if (yych == 'O') goto yy533; + if (yych == 'o') goto yy533; + goto yy523; yy616: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'I') goto yy533; + if (yych == 'i') goto yy533; + goto yy523; yy617: yych = *++p; - if (yych == '3') goto yy621; - goto yy516; + if (yych == 'W') goto yy618; + if (yych != 'w') goto yy523; yy618: yych = *++p; - if (yych == 'T') goto yy620; - if (yych == 't') goto yy620; - goto yy516; -yy619: + if (yych != '-') goto yy523; yych = *++p; - if (yych == 'G') goto yy519; - if (yych == 'g') goto yy519; - goto yy516; + if (yych == 'S') goto yy620; + if (yych != 's') goto yy523; yy620: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'O') goto yy621; + if (yych != 'o') goto yy523; yy621: yych = *++p; - if (yych != '2') goto yy516; + if (yych == 'U') goto yy622; + if (yych != 'u') goto yy523; +yy622: yych = *++p; - if (yych != '7') goto yy516; + if (yych == 'R') goto yy623; + if (yych != 'r') goto yy523; +yy623: yych = *++p; - if (yych == '0') goto yy519; - goto yy516; + if (yych == 'C') goto yy624; + if (yych != 'c') goto yy523; yy624: yych = *++p; - if (yych <= 'M') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'N') goto yy631; - if (yych == 'n') goto yy631; - goto yy516; - } + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy625: yych = *++p; - if (yych == 'M') goto yy626; - if (yych != 'm') goto yy516; + if (yych == '2') goto yy632; + goto yy523; yy626: yych = *++p; - if (yych == 'S') goto yy627; - if (yych != 's') goto yy516; + if (yych == 'R') goto yy629; + if (yych == 'r') goto yy629; + goto yy523; yy627: yych = *++p; - if (yych == 'P') goto yy628; - if (yych != 'p') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy628: yych = *++p; - if (yych == 'E') goto yy629; - if (yych != 'e') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy629: yych = *++p; - if (yych == 'A') goto yy630; - if (yych != 'a') goto yy516; + if (yych == 'E') goto yy630; + if (yych != 'e') goto yy523; yy630: yych = *++p; - if (yych == 'K') goto yy519; - if (yych == 'k') goto yy519; - goto yy516; + if (yych == 'A') goto yy631; + if (yych != 'a') goto yy523; yy631: yych = *++p; - if (yych == 'E') goto yy632; - if (yych != 'e') goto yy516; + if (yych == 'L') goto yy533; + if (yych == 'l') goto yy533; + goto yy523; yy632: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; -yy633: + if (yych != '0') goto yy523; yych = *++p; - if (yych <= 'S') { - if (yych == 'N') goto yy634; - if (yych <= 'R') goto yy516; - goto yy635; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy516; - } else { - if (yych == 's') goto yy635; - goto yy516; - } - } -yy634: + if (yych != '0') goto yy523; yych = *++p; - if (yych == 'G') goto yy642; - if (yych == 'g') goto yy642; - goto yy516; + if (yych == '4') goto yy533; + goto yy523; yy635: yych = *++p; - if (yych == 'M') goto yy636; - if (yych != 'm') goto yy516; + if (yych == 'I') goto yy654; + if (yych == 'i') goto yy654; + goto yy523; yy636: yych = *++p; - if (yych == 'E') goto yy637; - if (yych != 'e') goto yy516; + if (yych <= 'L') { + if (yych == 'A') goto yy646; + if (yych <= 'K') goto yy523; + goto yy645; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy523; + goto yy646; + } else { + if (yych == 'l') goto yy645; + goto yy523; + } + } yy637: yych = *++p; - if (yych == 'S') goto yy638; - if (yych != 's') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy638: yych = *++p; - if (yych == 'S') goto yy639; - if (yych != 's') goto yy516; + if (yych == '3') goto yy642; + goto yy523; yy639: yych = *++p; - if (yych == 'A') goto yy640; - if (yych != 'a') goto yy516; + if (yych == 'T') goto yy641; + if (yych == 't') goto yy641; + goto yy523; yy640: yych = *++p; - if (yych == 'G') goto yy641; - if (yych != 'g') goto yy516; + if (yych == 'G') goto yy533; + if (yych == 'g') goto yy533; + goto yy523; yy641: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy642: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; -yy643: + if (yych != '2') goto yy523; yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; -yy644: + if (yych != '7') goto yy523; yych = *++p; - if (yych == 'E') goto yy694; - if (yych == 'e') goto yy694; - goto yy516; + if (yych == '0') goto yy533; + goto yy523; yy645: yych = *++p; - if (yych == 'H') goto yy519; - if (yych == 'h') goto yy519; - goto yy516; + if (yych <= 'M') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'N') goto yy652; + if (yych == 'n') goto yy652; + goto yy523; + } yy646: yych = *++p; - if (yych == 'O') goto yy690; - if (yych == 'o') goto yy690; - goto yy516; + if (yych == 'M') goto yy647; + if (yych != 'm') goto yy523; yy647: yych = *++p; - if (yych <= 'L') { - if (yych == 'A') goto yy680; - if (yych <= 'K') goto yy516; - goto yy681; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy516; - goto yy680; - } else { - if (yych == 'l') goto yy681; - goto yy516; - } - } + if (yych == 'S') goto yy648; + if (yych != 's') goto yy523; yy648: yych = *++p; - if (yych <= 'S') { - if (yych == 'B') goto yy519; - if (yych <= 'R') goto yy516; - goto yy519; - } else { - if (yych <= 'b') { - if (yych <= 'a') goto yy516; - goto yy519; - } else { - if (yych == 's') goto yy519; - goto yy516; - } - } + if (yych == 'P') goto yy649; + if (yych != 'p') goto yy523; yy649: yych = *++p; - if (yych == 'Y') goto yy678; - if (yych == 'y') goto yy678; - goto yy516; + if (yych == 'E') goto yy650; + if (yych != 'e') goto yy523; yy650: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych == 'A') goto yy651; + if (yych != 'a') goto yy523; yy651: yych = *++p; - if (yych == 'T') goto yy677; - if (yych == 't') goto yy677; - goto yy516; + if (yych == 'K') goto yy533; + if (yych == 'k') goto yy533; + goto yy523; yy652: yych = *++p; - if (yych <= 'S') { - if (yych <= 'C') { - if (yych <= 'B') goto yy516; - goto yy664; - } else { - if (yych <= 'Q') goto yy516; - if (yych <= 'R') goto yy662; - goto yy663; - } - } else { - if (yych <= 'q') { - if (yych == 'c') goto yy664; - goto yy516; - } else { - if (yych <= 'r') goto yy662; - if (yych <= 's') goto yy663; - goto yy516; - } - } + if (yych == 'E') goto yy653; + if (yych != 'e') goto yy523; yy653: yych = *++p; - if (yych == 'M') goto yy661; - if (yych == 'm') goto yy661; - goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy654: yych = *++p; - if (yych <= 'P') { - if (yych == 'E') goto yy658; - if (yych <= 'O') goto yy516; - goto yy659; + if (yych <= 'S') { + if (yych == 'N') goto yy655; + if (yych <= 'R') goto yy523; + goto yy656; } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy516; - goto yy658; + if (yych <= 'n') { + if (yych <= 'm') goto yy523; } else { - if (yych == 'p') goto yy659; - goto yy516; + if (yych == 's') goto yy656; + goto yy523; } } yy655: yych = *++p; - if (yych == 'T') goto yy656; - if (yych != 't') goto yy516; + if (yych == 'G') goto yy663; + if (yych == 'g') goto yy663; + goto yy523; yy656: yych = *++p; - if (yych == 'T') goto yy657; - if (yych != 't') goto yy516; + if (yych == 'M') goto yy657; + if (yych != 'm') goto yy523; yy657: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'E') goto yy658; + if (yych != 'e') goto yy523; yy658: yych = *++p; - if (yych == 'V') goto yy660; - if (yych == 'v') goto yy660; - goto yy516; + if (yych == 'S') goto yy659; + if (yych != 's') goto yy523; yy659: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'S') goto yy660; + if (yych != 's') goto yy523; yy660: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'A') goto yy661; + if (yych != 'a') goto yy523; yy661: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'G') goto yy662; + if (yych != 'g') goto yy523; yy662: yych = *++p; - if (yych == 'V') goto yy674; - if (yych == 'v') goto yy674; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy663: yych = *++p; - if (yych == 'S') goto yy671; - if (yych == 's') goto yy671; - goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy664: yych = *++p; - if (yych == 'O') goto yy665; - if (yych != 'o') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy665: yych = *++p; - if (yych == 'N') goto yy666; - if (yych != 'n') goto yy516; + if (yych == 'E') goto yy715; + if (yych == 'e') goto yy715; + goto yy523; yy666: yych = *++p; - if (yych == 'D') goto yy667; - if (yych != 'd') goto yy516; + if (yych == 'H') goto yy533; + if (yych == 'h') goto yy533; + goto yy523; yy667: yych = *++p; - if (yych == 'L') goto yy668; - if (yych != 'l') goto yy516; + if (yych == 'O') goto yy711; + if (yych == 'o') goto yy711; + goto yy523; yy668: yych = *++p; - if (yych == 'I') goto yy669; - if (yych != 'i') goto yy516; + if (yych <= 'L') { + if (yych == 'A') goto yy701; + if (yych <= 'K') goto yy523; + goto yy702; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy523; + goto yy701; + } else { + if (yych == 'l') goto yy702; + goto yy523; + } + } yy669: yych = *++p; - if (yych == 'F') goto yy670; - if (yych != 'f') goto yy516; + if (yych <= 'S') { + if (yych == 'B') goto yy533; + if (yych <= 'R') goto yy523; + goto yy533; + } else { + if (yych <= 'b') { + if (yych <= 'a') goto yy523; + goto yy533; + } else { + if (yych == 's') goto yy533; + goto yy523; + } + } yy670: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'Y') goto yy699; + if (yych == 'y') goto yy699; + goto yy523; yy671: yych = *++p; - if (yych == 'I') goto yy672; - if (yych != 'i') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy672: yych = *++p; - if (yych == 'O') goto yy673; - if (yych != 'o') goto yy516; + if (yych == 'T') goto yy698; + if (yych == 't') goto yy698; + goto yy523; yy673: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych <= 'S') { + if (yych <= 'C') { + if (yych <= 'B') goto yy523; + goto yy685; + } else { + if (yych <= 'Q') goto yy523; + if (yych <= 'R') goto yy683; + goto yy684; + } + } else { + if (yych <= 'q') { + if (yych == 'c') goto yy685; + goto yy523; + } else { + if (yych <= 'r') goto yy683; + if (yych <= 's') goto yy684; + goto yy523; + } + } yy674: yych = *++p; - if (yych == 'I') goto yy675; - if (yych != 'i') goto yy516; + if (yych == 'M') goto yy682; + if (yych == 'm') goto yy682; + goto yy523; yy675: yych = *++p; - if (yych == 'C') goto yy676; - if (yych != 'c') goto yy516; + if (yych <= 'P') { + if (yych == 'E') goto yy679; + if (yych <= 'O') goto yy523; + goto yy680; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy523; + goto yy679; + } else { + if (yych == 'p') goto yy680; + goto yy523; + } + } yy676: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'T') goto yy677; + if (yych != 't') goto yy523; yy677: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'T') goto yy678; + if (yych != 't') goto yy523; yy678: yych = *++p; - if (yych == 'P') goto yy679; - if (yych != 'p') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy679: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'V') goto yy681; + if (yych == 'v') goto yy681; + goto yy523; yy680: yych = *++p; - if (yych == 'P') goto yy684; - if (yych == 'p') goto yy684; - goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy681: yych = *++p; - if (yych == 'D') goto yy682; - if (yych != 'd') goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy682: yych = *++p; - if (yych == 'A') goto yy683; - if (yych != 'a') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy683: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'V') goto yy695; + if (yych == 'v') goto yy695; + goto yy523; yy684: yych = *++p; - if (yych != '.') goto yy516; + if (yych == 'S') goto yy692; + if (yych == 's') goto yy692; + goto yy523; +yy685: yych = *++p; - if (yych == 'B') goto yy686; - if (yych != 'b') goto yy516; + if (yych == 'O') goto yy686; + if (yych != 'o') goto yy523; yy686: yych = *++p; - if (yych == 'E') goto yy687; - if (yych != 'e') goto yy516; + if (yych == 'N') goto yy687; + if (yych != 'n') goto yy523; yy687: yych = *++p; - if (yych == 'E') goto yy688; - if (yych != 'e') goto yy516; + if (yych == 'D') goto yy688; + if (yych != 'd') goto yy523; yy688: yych = *++p; - if (yych == 'P') goto yy689; - if (yych != 'p') goto yy516; + if (yych == 'L') goto yy689; + if (yych != 'l') goto yy523; yy689: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'I') goto yy690; + if (yych != 'i') goto yy523; yy690: yych = *++p; - if (yych == 'T') goto yy691; - if (yych != 't') goto yy516; + if (yych == 'F') goto yy691; + if (yych != 'f') goto yy523; yy691: yych = *++p; - if (yych == 'I') goto yy692; - if (yych != 'i') goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy692: yych = *++p; - if (yych == 'F') goto yy693; - if (yych != 'f') goto yy516; + if (yych == 'I') goto yy693; + if (yych != 'i') goto yy523; yy693: yych = *++p; - if (yych == 'Y') goto yy519; - if (yych == 'y') goto yy519; - goto yy516; + if (yych == 'O') goto yy694; + if (yych != 'o') goto yy523; yy694: yych = *++p; - if (yych == 'A') goto yy695; - if (yych != 'a') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy695: yych = *++p; - if (yych == 'M') goto yy519; - if (yych == 'm') goto yy519; - goto yy516; + if (yych == 'I') goto yy696; + if (yych != 'i') goto yy523; yy696: yych = *++p; - if (yych <= 'S') { - if (yych == 'M') goto yy708; - if (yych <= 'R') goto yy516; - goto yy707; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy516; - goto yy708; - } else { - if (yych == 's') goto yy707; - goto yy516; - } - } + if (yych == 'C') goto yy697; + if (yych != 'c') goto yy523; yy697: yych = *++p; - if (yych == 'Y') goto yy705; - if (yych == 'y') goto yy705; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy698: yych = *++p; - if (yych == 'I') goto yy519; - if (yych == 'i') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy699: yych = *++p; - if (yych == 'S') goto yy700; - if (yych != 's') goto yy516; + if (yych == 'P') goto yy700; + if (yych != 'p') goto yy523; yy700: yych = *++p; - if (yych <= 'N') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'O') goto yy701; - if (yych != 'o') goto yy516; - } + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy701: yych = *++p; - if (yych == 'U') goto yy702; - if (yych != 'u') goto yy516; + if (yych == 'P') goto yy705; + if (yych == 'p') goto yy705; + goto yy523; yy702: yych = *++p; - if (yych == 'R') goto yy703; - if (yych != 'r') goto yy516; + if (yych == 'D') goto yy703; + if (yych != 'd') goto yy523; yy703: yych = *++p; - if (yych == 'C') goto yy704; - if (yych != 'c') goto yy516; + if (yych == 'A') goto yy704; + if (yych != 'a') goto yy523; yy704: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy705: yych = *++p; - if (yych == 'N') goto yy706; - if (yych != 'n') goto yy516; -yy706: + if (yych != '.') goto yy523; yych = *++p; - if (yych == 'C') goto yy519; - if (yych == 'c') goto yy519; - goto yy516; + if (yych == 'B') goto yy707; + if (yych != 'b') goto yy523; yy707: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'E') goto yy708; + if (yych != 'e') goto yy523; yy708: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'E') goto yy709; + if (yych != 'e') goto yy523; yy709: yych = *++p; - if (yych == 'Y') goto yy729; - if (yych == 'y') goto yy729; - goto yy516; + if (yych == 'P') goto yy710; + if (yych != 'p') goto yy523; yy710: yych = *++p; - if (yych <= 'O') { - if (yych == 'E') goto yy726; - if (yych <= 'N') goto yy516; - goto yy727; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy516; - goto yy726; - } else { - if (yych == 'o') goto yy727; - goto yy516; - } + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; } yy711: yych = *++p; - if (yych == 'A') goto yy721; - if (yych == 'a') goto yy721; - goto yy516; + if (yych == 'T') goto yy712; + if (yych != 't') goto yy523; yy712: yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy714; - if (yych <= 'O') goto yy516; - goto yy715; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy516; - goto yy714; - } else { - if (yych == 'p') goto yy715; - goto yy516; - } - } + if (yych == 'I') goto yy713; + if (yych != 'i') goto yy523; yy713: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'F') goto yy714; + if (yych != 'f') goto yy523; yy714: yych = *++p; - if (yych == 'M') goto yy519; - if (yych == 'm') goto yy519; - goto yy516; + if (yych == 'Y') goto yy533; + if (yych == 'y') goto yy533; + goto yy523; yy715: yych = *++p; if (yych == 'A') goto yy716; - if (yych != 'a') goto yy516; + if (yych != 'a') goto yy523; yy716: yych = *++p; - if (yych == 'R') goto yy717; - if (yych != 'r') goto yy516; + if (yych == 'M') goto yy533; + if (yych == 'm') goto yy533; + goto yy523; yy717: yych = *++p; - if (yych == 'A') goto yy718; - if (yych != 'a') goto yy516; + if (yych <= 'S') { + if (yych == 'M') goto yy729; + if (yych <= 'R') goto yy523; + goto yy728; + } else { + if (yych <= 'm') { + if (yych <= 'l') goto yy523; + goto yy729; + } else { + if (yych == 's') goto yy728; + goto yy523; + } + } yy718: yych = *++p; - if (yych == 'Z') goto yy719; - if (yych != 'z') goto yy516; + if (yych == 'Y') goto yy726; + if (yych == 'y') goto yy726; + goto yy523; yy719: yych = *++p; - if (yych == 'Z') goto yy720; - if (yych != 'z') goto yy516; + if (yych == 'I') goto yy533; + if (yych == 'i') goto yy533; + goto yy523; yy720: yych = *++p; - if (yych == 'I') goto yy519; - if (yych == 'i') goto yy519; - goto yy516; + if (yych == 'S') goto yy721; + if (yych != 's') goto yy523; yy721: yych = *++p; - if (yych == 'T') goto yy722; - if (yych != 't') goto yy516; + if (yych <= 'N') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'O') goto yy722; + if (yych != 'o') goto yy523; + } yy722: yych = *++p; - if (yych == 'F') goto yy723; - if (yych != 'f') goto yy516; + if (yych == 'U') goto yy723; + if (yych != 'u') goto yy523; yy723: yych = *++p; - if (yych == 'O') goto yy724; - if (yych != 'o') goto yy516; + if (yych == 'R') goto yy724; + if (yych != 'r') goto yy523; yy724: yych = *++p; - if (yych == 'R') goto yy725; - if (yych != 'r') goto yy516; + if (yych == 'C') goto yy725; + if (yych != 'c') goto yy523; yy725: yych = *++p; - if (yych == 'M') goto yy519; - if (yych == 'm') goto yy519; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy726: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'N') goto yy727; + if (yych != 'n') goto yy523; yy727: yych = *++p; - if (yych == 'X') goto yy728; - if (yych != 'x') goto yy516; + if (yych == 'C') goto yy533; + if (yych == 'c') goto yy533; + goto yy523; yy728: yych = *++p; - if (yych == 'Y') goto yy519; - if (yych == 'y') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy729: yych = *++p; - if (yych == 'C') goto yy519; - if (yych == 'c') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy730: yych = *++p; - if (yych == 'D') goto yy519; - if (yych == 'd') goto yy519; - goto yy516; + if (yych == 'Y') goto yy750; + if (yych == 'y') goto yy750; + goto yy523; yy731: yych = *++p; - if (yych == 'A') goto yy732; - if (yych != 'a') goto yy516; + if (yych <= 'O') { + if (yych == 'E') goto yy747; + if (yych <= 'N') goto yy523; + goto yy748; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy523; + goto yy747; + } else { + if (yych == 'o') goto yy748; + goto yy523; + } + } yy732: yych = *++p; - if (yych == 'Q') goto yy733; - if (yych != 'q') goto yy516; + if (yych == 'A') goto yy742; + if (yych == 'a') goto yy742; + goto yy523; yy733: yych = *++p; - if (yych == 'U') goto yy734; - if (yych != 'u') goto yy516; + if (yych <= 'P') { + if (yych == 'L') goto yy735; + if (yych <= 'O') goto yy523; + goto yy736; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy523; + goto yy735; + } else { + if (yych == 'p') goto yy736; + goto yy523; + } + } yy734: yych = *++p; - if (yych == 'E') goto yy735; - if (yych != 'e') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy735: yych = *++p; - if (yych == 'L') goto yy736; - if (yych != 'l') goto yy516; + if (yych == 'M') goto yy533; + if (yych == 'm') goto yy533; + goto yy523; yy736: yych = *++p; - if (yych == 'O') goto yy737; - if (yych != 'o') goto yy516; + if (yych == 'A') goto yy737; + if (yych != 'a') goto yy523; yy737: yych = *++p; - if (yych == 'C') goto yy738; - if (yych != 'c') goto yy516; + if (yych == 'R') goto yy738; + if (yych != 'r') goto yy523; yy738: yych = *++p; - if (yych == 'K') goto yy739; - if (yych != 'k') goto yy516; + if (yych == 'A') goto yy739; + if (yych != 'a') goto yy523; yy739: yych = *++p; - if (yych == 'T') goto yy740; - if (yych != 't') goto yy516; + if (yych == 'Z') goto yy740; + if (yych != 'z') goto yy523; yy740: yych = *++p; - if (yych == 'O') goto yy741; - if (yych != 'o') goto yy516; + if (yych == 'Z') goto yy741; + if (yych != 'z') goto yy523; yy741: yych = *++p; - if (yych == 'K') goto yy742; - if (yych != 'k') goto yy516; + if (yych == 'I') goto yy533; + if (yych == 'i') goto yy533; + goto yy523; yy742: yych = *++p; - if (yych == 'E') goto yy743; - if (yych != 'e') goto yy516; + if (yych == 'T') goto yy743; + if (yych != 't') goto yy523; yy743: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych == 'F') goto yy744; + if (yych != 'f') goto yy523; yy744: yych = *++p; - if (yych == 'T') goto yy751; - if (yych == 't') goto yy751; - goto yy516; + if (yych == 'O') goto yy745; + if (yych != 'o') goto yy523; yy745: yych = *++p; - if (yych == 'T') goto yy750; - if (yych == 't') goto yy750; - goto yy516; + if (yych == 'R') goto yy746; + if (yych != 'r') goto yy523; yy746: yych = *++p; - if (yych <= 'G') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'H') goto yy519; - if (yych == 'h') goto yy519; - goto yy516; - } + if (yych == 'M') goto yy533; + if (yych == 'm') goto yy533; + goto yy523; yy747: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy748: yych = *++p; - if (yych == 'W') goto yy749; - if (yych != 'w') goto yy516; + if (yych == 'X') goto yy749; + if (yych != 'x') goto yy523; yy749: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'Y') goto yy533; + if (yych == 'y') goto yy533; + goto yy523; yy750: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'C') goto yy533; + if (yych == 'c') goto yy533; + goto yy523; yy751: yych = *++p; - if (yych == 'E') goto yy752; - if (yych != 'e') goto yy516; + if (yych == 'D') goto yy533; + if (yych == 'd') goto yy533; + goto yy523; yy752: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'A') goto yy753; + if (yych != 'a') goto yy523; yy753: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych == 'Q') goto yy754; + if (yych != 'q') goto yy523; yy754: yych = *++p; - if (yych <= 'P') { - if (yych == 'M') goto yy785; - if (yych <= 'O') goto yy516; - goto yy784; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy516; - goto yy785; - } else { - if (yych == 'p') goto yy784; - goto yy516; - } - } + if (yych == 'U') goto yy755; + if (yych != 'u') goto yy523; yy755: yych = *++p; - if (yych <= 'Q') { - if (yych <= '-') { - if (yych <= ',') goto yy516; - goto yy777; - } else { - if (yych == 'N') goto yy778; - goto yy516; - } - } else { - if (yych <= 'n') { - if (yych <= 'R') goto yy776; - if (yych <= 'm') goto yy516; - goto yy778; - } else { - if (yych == 'r') goto yy776; - goto yy516; - } - } + if (yych == 'E') goto yy756; + if (yych != 'e') goto yy523; yy756: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'L') goto yy757; + if (yych != 'l') goto yy523; yy757: yych = *++p; - if (yych == 'S') goto yy772; - if (yych == 's') goto yy772; - goto yy516; + if (yych == 'O') goto yy758; + if (yych != 'o') goto yy523; yy758: yych = *++p; - switch (yych) { - case 'G': - case 'g': goto yy763; - case 'I': - case 'i': goto yy762; - case 'P': - case 'p': goto yy764; - case 'R': - case 'r': goto yy765; - default: goto yy516; - } + if (yych == 'C') goto yy759; + if (yych != 'c') goto yy523; yy759: yych = *++p; - if (yych == 'Q') goto yy761; - if (yych == 'q') goto yy761; - goto yy516; + if (yych == 'K') goto yy760; + if (yych != 'k') goto yy523; yy760: yych = *++p; - if (yych == 'D') goto yy519; - if (yych == 'd') goto yy519; - goto yy516; + if (yych == 'T') goto yy761; + if (yych != 't') goto yy523; yy761: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'O') goto yy762; + if (yych != 'o') goto yy523; yy762: yych = *++p; - if (yych == 'L') goto yy770; - if (yych == 'l') goto yy770; - goto yy516; + if (yych == 'K') goto yy763; + if (yych != 'k') goto yy523; yy763: yych = *++p; - if (yych == 'N') goto yy768; - if (yych == 'n') goto yy768; - goto yy516; + if (yych == 'E') goto yy764; + if (yych != 'e') goto yy523; yy764: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy765: yych = *++p; - if (yych == 'K') goto yy766; - if (yych != 'k') goto yy516; + if (yych == 'T') goto yy772; + if (yych == 't') goto yy772; + goto yy523; yy766: yych = *++p; - if (yych == 'E') goto yy767; - if (yych != 'e') goto yy516; + if (yych == 'T') goto yy771; + if (yych == 't') goto yy771; + goto yy523; yy767: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych <= 'G') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'H') goto yy533; + if (yych == 'h') goto yy533; + goto yy523; + } yy768: yych = *++p; - if (yych == 'E') goto yy769; - if (yych != 'e') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy769: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'W') goto yy770; + if (yych != 'w') goto yy523; yy770: yych = *++p; - if (yych == 'T') goto yy771; - if (yych != 't') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy771: yych = *++p; - if (yych == 'O') goto yy519; - if (yych == 'o') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy772: yych = *++p; - if (yych == 'S') goto yy773; - if (yych != 's') goto yy516; + if (yych == 'E') goto yy773; + if (yych != 'e') goto yy523; yy773: yych = *++p; - if (yych == 'A') goto yy774; - if (yych != 'a') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy774: yych = *++p; - if (yych == 'G') goto yy775; - if (yych != 'g') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy775: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; -yy776: - yych = *++p; - if (yych == 'P') goto yy783; - if (yych == 'p') goto yy783; - goto yy516; -yy777: + if (yych <= 'P') { + if (yych == 'M') goto yy806; + if (yych <= 'O') goto yy523; + goto yy805; + } else { + if (yych <= 'm') { + if (yych <= 'l') goto yy523; + goto yy806; + } else { + if (yych == 'p') goto yy805; + goto yy523; + } + } +yy776: + yych = *++p; + if (yych <= 'Q') { + if (yych <= '-') { + if (yych <= ',') goto yy523; + goto yy798; + } else { + if (yych == 'N') goto yy799; + goto yy523; + } + } else { + if (yych <= 'n') { + if (yych <= 'R') goto yy797; + if (yych <= 'm') goto yy523; + goto yy799; + } else { + if (yych == 'r') goto yy797; + goto yy523; + } + } +yy777: yych = *++p; - if (yych == 'H') goto yy780; - if (yych == 'h') goto yy780; - goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy778: yych = *++p; - if (yych == 'I') goto yy779; - if (yych != 'i') goto yy516; + if (yych == 'S') goto yy793; + if (yych == 's') goto yy793; + goto yy523; yy779: yych = *++p; - if (yych == 'M') goto yy519; - if (yych == 'm') goto yy519; - goto yy516; + switch (yych) { + case 'G': + case 'g': goto yy784; + case 'I': + case 'i': goto yy783; + case 'P': + case 'p': goto yy785; + case 'R': + case 'r': goto yy786; + default: goto yy523; + } yy780: yych = *++p; - if (yych == 'E') goto yy781; - if (yych != 'e') goto yy516; + if (yych == 'Q') goto yy782; + if (yych == 'q') goto yy782; + goto yy523; yy781: yych = *++p; - if (yych == 'L') goto yy782; - if (yych != 'l') goto yy516; + if (yych == 'D') goto yy533; + if (yych == 'd') goto yy533; + goto yy523; yy782: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy783: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'L') goto yy791; + if (yych == 'l') goto yy791; + goto yy523; yy784: yych = *++p; - if (yych == 'D') goto yy788; - if (yych == 'd') goto yy788; - goto yy516; + if (yych == 'N') goto yy789; + if (yych == 'n') goto yy789; + goto yy523; yy785: yych = *++p; - if (yych == 'B') goto yy786; - if (yych != 'b') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy786: yych = *++p; - if (yych == 'L') goto yy787; - if (yych != 'l') goto yy516; + if (yych == 'K') goto yy787; + if (yych != 'k') goto yy523; yy787: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'E') goto yy788; + if (yych != 'e') goto yy523; yy788: yych = *++p; - if (yych == 'A') goto yy789; - if (yych != 'a') goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy789: yych = *++p; - if (yych == 'T') goto yy790; - if (yych != 't') goto yy516; + if (yych == 'E') goto yy790; + if (yych != 'e') goto yy523; yy790: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy791: yych = *++p; - if (yych == 'A') goto yy796; - if (yych == 'a') goto yy796; - goto yy516; + if (yych == 'T') goto yy792; + if (yych != 't') goto yy523; yy792: yych = *++p; - if (yych == 'S') goto yy793; - if (yych != 's') goto yy516; + if (yych == 'O') goto yy533; + if (yych == 'o') goto yy533; + goto yy523; yy793: yych = *++p; - if (yych == 'T') goto yy794; - if (yych != 't') goto yy516; + if (yych == 'S') goto yy794; + if (yych != 's') goto yy523; yy794: yych = *++p; - if (yych == 'F') goto yy795; - if (yych != 'f') goto yy516; + if (yych == 'A') goto yy795; + if (yych != 'a') goto yy523; yy795: yych = *++p; - if (yych == 'M') goto yy519; - if (yych == 'm') goto yy519; - goto yy516; + if (yych == 'G') goto yy796; + if (yych != 'g') goto yy523; yy796: yych = *++p; - if (yych == 'P') goto yy797; - if (yych != 'p') goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy797: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'P') goto yy804; + if (yych == 'p') goto yy804; + goto yy523; yy798: yych = *++p; - if (yych == 'M') goto yy821; - if (yych == 'm') goto yy821; - goto yy516; + if (yych == 'H') goto yy801; + if (yych == 'h') goto yy801; + goto yy523; yy799: yych = *++p; - if (yych <= 'I') { - if (yych == 'C') goto yy810; - if (yych <= 'H') goto yy516; - goto yy809; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy516; - goto yy810; - } else { - if (yych == 'i') goto yy809; - goto yy516; - } - } + if (yych == 'I') goto yy800; + if (yych != 'i') goto yy523; yy800: yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy519; - if (yych <= 'O') goto yy516; - goto yy519; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy516; - goto yy519; - } else { - if (yych == 'p') goto yy519; - goto yy516; - } - } + if (yych == 'M') goto yy533; + if (yych == 'm') goto yy533; + goto yy523; yy801: yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy807; - if (yych <= 'N') goto yy516; - goto yy808; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy516; - goto yy807; - } else { - if (yych == 'o') goto yy808; - goto yy516; - } - } + if (yych == 'E') goto yy802; + if (yych != 'e') goto yy523; yy802: yych = *++p; - if (yych == 'F') goto yy806; - if (yych == 'f') goto yy806; - goto yy516; + if (yych == 'L') goto yy803; + if (yych != 'l') goto yy523; yy803: yych = *++p; - if (yych <= '@') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'A') goto yy805; - if (yych == 'a') goto yy805; - goto yy516; - } + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy804: yych = *++p; - if (yych == 'X') goto yy519; - if (yych == 'x') goto yy519; - goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy805: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'D') goto yy809; + if (yych == 'd') goto yy809; + goto yy523; yy806: yych = *++p; - if (yych == 'O') goto yy519; - if (yych == 'o') goto yy519; - goto yy516; + if (yych == 'B') goto yy807; + if (yych != 'b') goto yy523; yy807: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'L') goto yy808; + if (yych != 'l') goto yy523; yy808: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy809: yych = *++p; - if (yych == 'S') goto yy811; - if (yych == 's') goto yy811; - goto yy516; + if (yych == 'A') goto yy810; + if (yych != 'a') goto yy523; yy810: yych = *++p; - if (yych <= ':') { - if (yych == '6') goto yy519; - if (yych <= '9') goto yy516; - goto yy520; - } else { - if (yych <= 'S') { - if (yych <= 'R') goto yy516; - goto yy519; - } else { - if (yych == 's') goto yy519; - goto yy516; - } - } + if (yych == 'T') goto yy811; + if (yych != 't') goto yy523; yy811: yych = *++p; - if (yych == '.') goto yy812; - if (yych == ':') goto yy520; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy812: yych = *++p; - if (yych <= 'X') { - if (yych <= 'K') { - if (yych == 'B') goto yy815; - goto yy516; - } else { - if (yych <= 'L') goto yy813; - if (yych <= 'W') goto yy516; - goto yy814; - } - } else { - if (yych <= 'k') { - if (yych == 'b') goto yy815; - goto yy516; - } else { - if (yych <= 'l') goto yy813; - if (yych == 'x') goto yy814; - goto yy516; - } - } + if (yych == 'A') goto yy817; + if (yych == 'a') goto yy817; + goto yy523; yy813: yych = *++p; - if (yych == 'W') goto yy820; - if (yych == 'w') goto yy820; - goto yy516; + if (yych == 'S') goto yy814; + if (yych != 's') goto yy523; yy814: yych = *++p; - if (yych == 'P') goto yy818; - if (yych == 'p') goto yy818; - goto yy516; + if (yych == 'T') goto yy815; + if (yych != 't') goto yy523; yy815: yych = *++p; - if (yych == 'E') goto yy816; - if (yych != 'e') goto yy516; + if (yych == 'F') goto yy816; + if (yych != 'f') goto yy523; yy816: yych = *++p; - if (yych == 'E') goto yy817; - if (yych != 'e') goto yy516; + if (yych == 'M') goto yy533; + if (yych == 'm') goto yy533; + goto yy523; yy817: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'P') goto yy818; + if (yych != 'p') goto yy523; yy818: - yych = *++p; - if (yych == 'C') goto yy819; - if (yych != 'c') goto yy516; -yy819: yych = *++p; if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; + if (yych == ':') goto yy534; + goto yy523; } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; } +yy819: + yych = *++p; + if (yych == 'M') goto yy842; + if (yych == 'm') goto yy842; + goto yy523; yy820: yych = *++p; - if (yych == 'Z') goto yy519; - if (yych == 'z') goto yy519; - goto yy516; + if (yych <= 'I') { + if (yych == 'C') goto yy831; + if (yych <= 'H') goto yy523; + goto yy830; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy523; + goto yy831; + } else { + if (yych == 'i') goto yy830; + goto yy523; + } + } yy821: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych <= 'P') { + if (yych == 'N') goto yy533; + if (yych <= 'O') goto yy523; + goto yy533; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy523; + goto yy533; + } else { + if (yych == 'p') goto yy533; + goto yy523; + } + } yy822: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych <= 'O') { + if (yych == 'A') goto yy828; + if (yych <= 'N') goto yy523; + goto yy829; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy523; + goto yy828; + } else { + if (yych == 'o') goto yy829; + goto yy523; + } + } yy823: yych = *++p; - if (yych == 'T') goto yy826; - if (yych == 't') goto yy826; - goto yy516; + if (yych == 'F') goto yy827; + if (yych == 'f') goto yy827; + goto yy523; yy824: yych = *++p; - if (yych != '2') goto yy516; + if (yych <= '@') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'A') goto yy826; + if (yych == 'a') goto yy826; + goto yy523; + } +yy825: yych = *++p; - if (yych == '3') goto yy519; - goto yy516; + if (yych == 'X') goto yy533; + if (yych == 'x') goto yy533; + goto yy523; yy826: yych = *++p; - if (yych == 'P') goto yy827; - if (yych != 'p') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy827: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'O') goto yy533; + if (yych == 'o') goto yy533; + goto yy523; yy828: yych = *++p; - if (yych == 'A') goto yy844; - if (yych == 'a') goto yy844; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy829: yych = *++p; - if (yych <= 'Z') { - if (yych == 'T') goto yy519; - if (yych <= 'Y') goto yy516; - goto yy835; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy516; - goto yy519; - } else { - if (yych == 'z') goto yy835; - goto yy516; - } - } + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy830: yych = *++p; - if (yych <= 'O') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'P') goto yy832; - if (yych == 'p') goto yy832; - goto yy516; - } + if (yych == 'S') goto yy832; + if (yych == 's') goto yy832; + goto yy523; yy831: yych = *++p; - if (yych == 'O') goto yy519; - if (yych == 'o') goto yy519; - goto yy516; + if (yych <= ':') { + if (yych == '6') goto yy533; + if (yych <= '9') goto yy523; + goto yy534; + } else { + if (yych <= 'S') { + if (yych <= 'R') goto yy523; + goto yy533; + } else { + if (yych == 's') goto yy533; + goto yy523; + } + } yy832: yych = *++p; - if (yych == 'H') goto yy833; - if (yych != 'h') goto yy516; + if (yych == '.') goto yy833; + if (yych == ':') goto yy534; + goto yy523; yy833: yych = *++p; - if (yych == 'E') goto yy834; - if (yych != 'e') goto yy516; + if (yych <= 'X') { + if (yych <= 'K') { + if (yych == 'B') goto yy836; + goto yy523; + } else { + if (yych <= 'L') goto yy834; + if (yych <= 'W') goto yy523; + goto yy835; + } + } else { + if (yych <= 'k') { + if (yych == 'b') goto yy836; + goto yy523; + } else { + if (yych <= 'l') goto yy834; + if (yych == 'x') goto yy835; + goto yy523; + } + } yy834: yych = *++p; - if (yych == 'R') goto yy519; - if (yych == 'r') goto yy519; - goto yy516; + if (yych == 'W') goto yy841; + if (yych == 'w') goto yy841; + goto yy523; yy835: yych = *++p; - if (yych == 'M') goto yy836; - if (yych != 'm') goto yy516; + if (yych == 'P') goto yy839; + if (yych == 'p') goto yy839; + goto yy523; yy836: yych = *++p; - if (yych == 'O') goto yy837; - if (yych != 'o') goto yy516; + if (yych == 'E') goto yy837; + if (yych != 'e') goto yy523; yy837: yych = *++p; - if (yych == 'P') goto yy838; - if (yych != 'p') goto yy516; + if (yych == 'E') goto yy838; + if (yych != 'e') goto yy523; yy838: yych = *++p; - if (yych == 'R') goto yy839; - if (yych != 'r') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy839: yych = *++p; - if (yych == 'O') goto yy840; - if (yych != 'o') goto yy516; + if (yych == 'C') goto yy840; + if (yych != 'c') goto yy523; yy840: yych = *++p; - if (yych == 'J') goto yy841; - if (yych != 'j') goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy841: yych = *++p; - if (yych == 'E') goto yy842; - if (yych != 'e') goto yy516; + if (yych == 'Z') goto yy533; + if (yych == 'z') goto yy533; + goto yy523; yy842: yych = *++p; - if (yych == 'C') goto yy843; - if (yych != 'c') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy843: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy844: yych = *++p; - if (yych == 'L') goto yy845; - if (yych != 'l') goto yy516; + if (yych == 'T') goto yy847; + if (yych == 't') goto yy847; + goto yy523; yy845: yych = *++p; - if (yych == 'K') goto yy519; - if (yych == 'k') goto yy519; - goto yy516; -yy846: + if (yych != '2') goto yy523; yych = *++p; - if (yych <= 'S') { - if (yych <= 'M') { - if (yych == 'L') goto yy856; - goto yy516; - } else { - if (yych <= 'N') goto yy857; - if (yych <= 'R') goto yy516; - goto yy858; - } - } else { - if (yych <= 'm') { - if (yych == 'l') goto yy856; - goto yy516; - } else { - if (yych <= 'n') goto yy857; - if (yych == 's') goto yy858; - goto yy516; - } - } + if (yych == '3') goto yy533; + goto yy523; yy847: yych = *++p; - if (yych == 'E') goto yy855; - if (yych == 'e') goto yy855; - goto yy516; + if (yych == 'P') goto yy848; + if (yych != 'p') goto yy523; yy848: yych = *++p; - if (yych == 'C') goto yy850; - if (yych == 'c') goto yy850; - goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy849: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'A') goto yy865; + if (yych == 'a') goto yy865; + goto yy523; yy850: yych = *++p; - if (yych == 'E') goto yy851; - if (yych != 'e') goto yy516; + if (yych <= 'Z') { + if (yych == 'T') goto yy533; + if (yych <= 'Y') goto yy523; + goto yy856; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy523; + goto yy533; + } else { + if (yych == 'z') goto yy856; + goto yy523; + } + } yy851: yych = *++p; - if (yych == 'T') goto yy852; - if (yych != 't') goto yy516; + if (yych <= 'O') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'P') goto yy853; + if (yych == 'p') goto yy853; + goto yy523; + } yy852: yych = *++p; - if (yych == 'I') goto yy853; - if (yych != 'i') goto yy516; + if (yych == 'O') goto yy533; + if (yych == 'o') goto yy533; + goto yy523; yy853: yych = *++p; - if (yych == 'M') goto yy854; - if (yych != 'm') goto yy516; + if (yych == 'H') goto yy854; + if (yych != 'h') goto yy523; yy854: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'E') goto yy855; + if (yych != 'e') goto yy523; yy855: yych = *++p; - if (yych == 'D') goto yy519; - if (yych == 'd') goto yy519; - goto yy516; + if (yych == 'R') goto yy533; + if (yych == 'r') goto yy533; + goto yy523; yy856: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'M') goto yy857; + if (yych != 'm') goto yy523; yy857: yych = *++p; - if (yych == 'G') goto yy859; - if (yych == 'g') goto yy859; - goto yy516; + if (yych == 'O') goto yy858; + if (yych != 'o') goto yy523; yy858: yych = *++p; - if (yych == 'H') goto yy519; - if (yych == 'h') goto yy519; - goto yy516; + if (yych == 'P') goto yy859; + if (yych != 'p') goto yy523; yy859: yych = *++p; - if (yych == 'E') goto yy860; - if (yych != 'e') goto yy516; + if (yych == 'R') goto yy860; + if (yych != 'r') goto yy523; yy860: yych = *++p; - if (yych == 'R') goto yy519; - if (yych == 'r') goto yy519; - goto yy516; + if (yych == 'O') goto yy861; + if (yych != 'o') goto yy523; yy861: yych = *++p; - if (yych == 'T') goto yy879; - if (yych == 't') goto yy879; - goto yy516; + if (yych == 'J') goto yy862; + if (yych != 'j') goto yy523; yy862: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'E') goto yy863; + if (yych != 'e') goto yy523; yy863: yych = *++p; - if (yych == 'M') goto yy519; - if (yych == 'm') goto yy519; - goto yy516; + if (yych == 'C') goto yy864; + if (yych != 'c') goto yy523; yy864: yych = *++p; - if (yych <= 'S') { - if (yych == 'P') goto yy519; - if (yych <= 'R') goto yy516; - goto yy519; - } else { - if (yych <= 'p') { - if (yych <= 'o') goto yy516; - goto yy519; - } else { - if (yych == 's') goto yy519; - goto yy516; - } - } + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy865: yych = *++p; - if (yych == 'I') goto yy873; - if (yych == 'i') goto yy873; - goto yy516; + if (yych == 'L') goto yy866; + if (yych != 'l') goto yy523; yy866: yych = *++p; - if (yych == 'A') goto yy872; - if (yych == 'a') goto yy872; - goto yy516; + if (yych == 'K') goto yy533; + if (yych == 'k') goto yy533; + goto yy523; yy867: yych = *++p; - if (yych == 'O') goto yy870; - if (yych == 'o') goto yy870; - goto yy516; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'L') goto yy877; + goto yy523; + } else { + if (yych <= 'N') goto yy878; + if (yych <= 'R') goto yy523; + goto yy879; + } + } else { + if (yych <= 'm') { + if (yych == 'l') goto yy877; + goto yy523; + } else { + if (yych <= 'n') goto yy878; + if (yych == 's') goto yy879; + goto yy523; + } + } yy868: yych = *++p; - if (yych == 'A') goto yy869; - if (yych != 'a') goto yy516; + if (yych == 'E') goto yy876; + if (yych == 'e') goto yy876; + goto yy523; yy869: yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy520; - goto yy516; - } else { - if (yych <= 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; - } + if (yych == 'C') goto yy871; + if (yych == 'c') goto yy871; + goto yy523; yy870: yych = *++p; - if (yych == 'U') goto yy871; - if (yych != 'u') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy871: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'E') goto yy872; + if (yych != 'e') goto yy523; yy872: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'T') goto yy873; + if (yych != 't') goto yy523; yy873: yych = *++p; - if (yych == 'U') goto yy874; - if (yych != 'u') goto yy516; + if (yych == 'I') goto yy874; + if (yych != 'i') goto yy523; yy874: yych = *++p; if (yych == 'M') goto yy875; - if (yych != 'm') goto yy516; + if (yych != 'm') goto yy523; yy875: yych = *++p; - if (yych == 'X') goto yy876; - if (yych != 'x') goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy876: yych = *++p; - if (yych == 'T') goto yy877; - if (yych != 't') goto yy516; + if (yych == 'D') goto yy533; + if (yych == 'd') goto yy533; + goto yy523; yy877: yych = *++p; - if (yych == 'R') goto yy878; - if (yych != 'r') goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy878: yych = *++p; - if (yych == 'A') goto yy519; - if (yych == 'a') goto yy519; - goto yy516; + if (yych == 'G') goto yy880; + if (yych == 'g') goto yy880; + goto yy523; yy879: yych = *++p; - if (yych == 'A') goto yy880; - if (yych != 'a') goto yy516; + if (yych == 'H') goto yy533; + if (yych == 'h') goto yy533; + goto yy523; yy880: yych = *++p; - if (yych == 'C') goto yy881; - if (yych != 'c') goto yy516; + if (yych == 'E') goto yy881; + if (yych != 'e') goto yy523; yy881: yych = *++p; - if (yych == 'H') goto yy882; - if (yych != 'h') goto yy516; + if (yych == 'R') goto yy533; + if (yych == 'r') goto yy533; + goto yy523; yy882: yych = *++p; - if (yych == 'M') goto yy883; - if (yych != 'm') goto yy516; + if (yych == 'T') goto yy900; + if (yych == 't') goto yy900; + goto yy523; yy883: yych = *++p; - if (yych == 'E') goto yy884; - if (yych != 'e') goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy884: yych = *++p; - if (yych == 'N') goto yy885; - if (yych != 'n') goto yy516; + if (yych == 'M') goto yy533; + if (yych == 'm') goto yy533; + goto yy523; yy885: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; -yy886: - yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; -yy887: - yych = *++p; - if (yych <= 'V') { - if (yych == 'R') goto yy519; - if (yych <= 'U') goto yy516; + if (yych <= 'S') { + if (yych == 'P') goto yy533; + if (yych <= 'R') goto yy523; + goto yy533; } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy516; - goto yy519; + if (yych <= 'p') { + if (yych <= 'o') goto yy523; + goto yy533; } else { - if (yych != 'v') goto yy516; + if (yych == 's') goto yy533; + goto yy523; } } +yy886: + yych = *++p; + if (yych == 'I') goto yy894; + if (yych == 'i') goto yy894; + goto yy523; +yy887: yych = *++p; - if (yych == 'A') goto yy889; - if (yych != 'a') goto yy516; + if (yych == 'A') goto yy893; + if (yych == 'a') goto yy893; + goto yy523; +yy888: + yych = *++p; + if (yych == 'O') goto yy891; + if (yych == 'o') goto yy891; + goto yy523; yy889: yych = *++p; - if (yych == 'S') goto yy890; - if (yych != 's') goto yy516; + if (yych == 'A') goto yy890; + if (yych != 'a') goto yy523; yy890: yych = *++p; - if (yych == 'C') goto yy891; - if (yych != 'c') goto yy516; + if (yych <= 'R') { + if (yych == ':') goto yy534; + goto yy523; + } else { + if (yych <= 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; + } yy891: yych = *++p; - if (yych == 'R') goto yy892; - if (yych != 'r') goto yy516; + if (yych == 'U') goto yy892; + if (yych != 'u') goto yy523; yy892: yych = *++p; - if (yych == 'I') goto yy893; - if (yych != 'i') goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy893: yych = *++p; - if (yych == 'P') goto yy894; - if (yych != 'p') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy894: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'U') goto yy895; + if (yych != 'u') goto yy523; yy895: yych = *++p; - if (yych == 'B') goto yy519; - if (yych == 'b') goto yy519; - goto yy516; + if (yych == 'M') goto yy896; + if (yych != 'm') goto yy523; yy896: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych == 'X') goto yy897; + if (yych != 'x') goto yy523; yy897: yych = *++p; - if (yych == 'N') goto yy904; - if (yych == 'n') goto yy904; - goto yy516; + if (yych == 'T') goto yy898; + if (yych != 't') goto yy523; yy898: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'R') goto yy899; + if (yych != 'r') goto yy523; yy899: yych = *++p; - if (yych == 'C') goto yy903; - if (yych == 'c') goto yy903; - goto yy516; + if (yych == 'A') goto yy533; + if (yych == 'a') goto yy533; + goto yy523; yy900: yych = *++p; - if (yych <= 'V') { - if (yych == 'T') goto yy902; - if (yych <= 'U') goto yy516; - goto yy519; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy516; - goto yy902; - } else { - if (yych == 'v') goto yy519; - goto yy516; - } - } + if (yych == 'A') goto yy901; + if (yych != 'a') goto yy523; yy901: yych = *++p; - if (yych == 'I') goto yy519; - if (yych == 'i') goto yy519; - goto yy516; + if (yych == 'C') goto yy902; + if (yych != 'c') goto yy523; yy902: yych = *++p; - if (yych == 'A') goto yy519; - if (yych == 'a') goto yy519; - goto yy516; + if (yych == 'H') goto yy903; + if (yych != 'h') goto yy523; yy903: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'M') goto yy904; + if (yych != 'm') goto yy523; yy904: yych = *++p; - if (yych == 'A') goto yy905; - if (yych != 'a') goto yy516; + if (yych == 'E') goto yy905; + if (yych != 'e') goto yy523; yy905: yych = *++p; - if (yych != '-') goto yy516; + if (yych == 'N') goto yy906; + if (yych != 'n') goto yy523; +yy906: yych = *++p; - if (yych == 'P') goto yy907; - if (yych != 'p') goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy907: yych = *++p; - if (yych == 'L') goto yy908; - if (yych != 'l') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy908: yych = *++p; - if (yych == 'A') goto yy909; - if (yych != 'a') goto yy516; -yy909: - yych = *++p; - if (yych == 'Y') goto yy910; - if (yych != 'y') goto yy516; -yy910: - yych = *++p; - if (yych <= 'S') { - if (yych == 'C') goto yy911; - if (yych <= 'R') goto yy516; - goto yy912; + if (yych <= 'V') { + if (yych == 'R') goto yy533; + if (yych <= 'U') goto yy523; } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy516; + if (yych <= 'r') { + if (yych <= 'q') goto yy523; + goto yy533; } else { - if (yych == 's') goto yy912; - goto yy516; + if (yych != 'v') goto yy523; } } + yych = *++p; + if (yych == 'A') goto yy910; + if (yych != 'a') goto yy523; +yy910: + yych = *++p; + if (yych == 'S') goto yy911; + if (yych != 's') goto yy523; yy911: yych = *++p; - if (yych == 'O') goto yy917; - if (yych == 'o') goto yy917; - goto yy516; + if (yych == 'C') goto yy912; + if (yych != 'c') goto yy523; yy912: yych = *++p; - if (yych == 'I') goto yy913; - if (yych != 'i') goto yy516; + if (yych == 'R') goto yy913; + if (yych != 'r') goto yy523; yy913: yych = *++p; - if (yych == 'N') goto yy914; - if (yych != 'n') goto yy516; + if (yych == 'I') goto yy914; + if (yych != 'i') goto yy523; yy914: yych = *++p; - if (yych == 'G') goto yy915; - if (yych != 'g') goto yy516; + if (yych == 'P') goto yy915; + if (yych != 'p') goto yy523; yy915: yych = *++p; - if (yych == 'L') goto yy916; - if (yych != 'l') goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy916: yych = *++p; - if (yych == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; + if (yych == 'B') goto yy533; + if (yych == 'b') goto yy533; + goto yy523; yy917: yych = *++p; - if (yych == 'N') goto yy918; - if (yych != 'n') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy918: yych = *++p; - if (yych == 'T') goto yy919; - if (yych != 't') goto yy516; + if (yych == 'N') goto yy925; + if (yych == 'n') goto yy925; + goto yy523; yy919: yych = *++p; - if (yych == 'A') goto yy920; - if (yych != 'a') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy920: yych = *++p; - if (yych == 'I') goto yy921; - if (yych != 'i') goto yy516; + if (yych == 'C') goto yy924; + if (yych == 'c') goto yy924; + goto yy523; yy921: yych = *++p; - if (yych == 'N') goto yy922; - if (yych != 'n') goto yy516; + if (yych <= 'V') { + if (yych == 'T') goto yy923; + if (yych <= 'U') goto yy523; + goto yy533; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy523; + goto yy923; + } else { + if (yych == 'v') goto yy533; + goto yy523; + } + } yy922: yych = *++p; - if (yych == 'E') goto yy923; - if (yych != 'e') goto yy516; + if (yych == 'I') goto yy533; + if (yych == 'i') goto yy533; + goto yy523; yy923: yych = *++p; - if (yych == 'R') goto yy519; - if (yych == 'r') goto yy519; - goto yy516; + if (yych == 'A') goto yy533; + if (yych == 'a') goto yy533; + goto yy523; yy924: yych = *++p; - if (yych == 'S') goto yy519; - if (yych == 's') goto yy519; - goto yy516; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; yy925: yych = *++p; - if (yych <= 'N') { - if (yych <= 'A') { - if (yych <= '@') goto yy516; - goto yy947; - } else { - if (yych <= 'L') goto yy516; - if (yych <= 'M') goto yy948; - goto yy949; - } - } else { - if (yych <= 'l') { - if (yych == 'a') goto yy947; - goto yy516; - } else { - if (yych <= 'm') goto yy948; - if (yych <= 'n') goto yy949; - goto yy516; - } - } + if (yych == 'A') goto yy926; + if (yych != 'a') goto yy523; yy926: yych = *++p; - if (yych == 'R') goto yy934; - if (yych == 'r') goto yy934; - goto yy516; -yy927: + if (yych != '-') goto yy523; yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy931; - if (yych <= 'O') goto yy516; - goto yy519; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy516; - goto yy931; - } else { - if (yych == 'p') goto yy519; - goto yy516; - } - } + if (yych == 'P') goto yy928; + if (yych != 'p') goto yy523; yy928: yych = *++p; - if (yych == 'I') goto yy930; - if (yych == 'i') goto yy930; - goto yy516; + if (yych == 'L') goto yy929; + if (yych != 'l') goto yy523; yy929: yych = *++p; - if (yych == 'D') goto yy519; - if (yych == 'd') goto yy519; - goto yy516; + if (yych == 'A') goto yy930; + if (yych != 'a') goto yy523; yy930: yych = *++p; - if (yych == 'D') goto yy519; - if (yych == 'd') goto yy519; - goto yy516; + if (yych == 'Y') goto yy931; + if (yych != 'y') goto yy523; yy931: yych = *++p; - if (yych == 'L') goto yy932; - if (yych != 'l') goto yy516; + if (yych <= 'S') { + if (yych == 'C') goto yy932; + if (yych <= 'R') goto yy523; + goto yy933; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy523; + } else { + if (yych == 's') goto yy933; + goto yy523; + } + } yy932: yych = *++p; - if (yych == 'T') goto yy933; - if (yych != 't') goto yy516; + if (yych == 'O') goto yy938; + if (yych == 'o') goto yy938; + goto yy523; yy933: yych = *++p; - if (yych == 'O') goto yy519; - if (yych == 'o') goto yy519; - goto yy516; + if (yych == 'I') goto yy934; + if (yych != 'i') goto yy523; yy934: yych = *++p; - if (yych == 'O') goto yy935; - if (yych != 'o') goto yy516; + if (yych == 'N') goto yy935; + if (yych != 'n') goto yy523; yy935: yych = *++p; - if (yych == 'M') goto yy936; - if (yych != 'm') goto yy516; + if (yych == 'G') goto yy936; + if (yych != 'g') goto yy523; yy936: yych = *++p; - if (yych == 'E') goto yy937; - if (yych != 'e') goto yy516; + if (yych == 'L') goto yy937; + if (yych != 'l') goto yy523; yy937: yych = *++p; - if (yych == '-') goto yy938; - if (yych == ':') goto yy520; - goto yy516; + if (yych == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; yy938: yych = *++p; - if (yych == 'E') goto yy939; - if (yych != 'e') goto yy516; + if (yych == 'N') goto yy939; + if (yych != 'n') goto yy523; yy939: yych = *++p; - if (yych == 'X') goto yy940; - if (yych != 'x') goto yy516; + if (yych == 'T') goto yy940; + if (yych != 't') goto yy523; yy940: yych = *++p; - if (yych == 'T') goto yy941; - if (yych != 't') goto yy516; + if (yych == 'A') goto yy941; + if (yych != 'a') goto yy523; yy941: yych = *++p; - if (yych == 'E') goto yy942; - if (yych != 'e') goto yy516; + if (yych == 'I') goto yy942; + if (yych != 'i') goto yy523; yy942: yych = *++p; if (yych == 'N') goto yy943; - if (yych != 'n') goto yy516; + if (yych != 'n') goto yy523; yy943: yych = *++p; - if (yych == 'S') goto yy944; - if (yych != 's') goto yy516; + if (yych == 'E') goto yy944; + if (yych != 'e') goto yy523; yy944: yych = *++p; - if (yych == 'I') goto yy945; - if (yych != 'i') goto yy516; + if (yych == 'R') goto yy533; + if (yych == 'r') goto yy533; + goto yy523; yy945: yych = *++p; - if (yych == 'O') goto yy946; - if (yych != 'o') goto yy516; + if (yych == 'S') goto yy533; + if (yych == 's') goto yy533; + goto yy523; yy946: yych = *++p; - if (yych == 'N') goto yy519; - if (yych == 'n') goto yy519; - goto yy516; + if (yych <= 'N') { + if (yych <= 'A') { + if (yych <= '@') goto yy523; + goto yy968; + } else { + if (yych <= 'L') goto yy523; + if (yych <= 'M') goto yy969; + goto yy970; + } + } else { + if (yych <= 'l') { + if (yych == 'a') goto yy968; + goto yy523; + } else { + if (yych <= 'm') goto yy969; + if (yych <= 'n') goto yy970; + goto yy523; + } + } yy947: yych = *++p; - if (yych == 'P') goto yy519; - if (yych == 'p') goto yy519; - goto yy516; + if (yych == 'R') goto yy955; + if (yych == 'r') goto yy955; + goto yy523; yy948: yych = *++p; - if (yych == '-') goto yy953; - goto yy516; + if (yych <= 'P') { + if (yych == 'L') goto yy952; + if (yych <= 'O') goto yy523; + goto yy533; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy523; + goto yy952; + } else { + if (yych == 'p') goto yy533; + goto yy523; + } + } yy949: yych = *++p; - if (yych == 'T') goto yy950; - if (yych != 't') goto yy516; + if (yych == 'I') goto yy951; + if (yych == 'i') goto yy951; + goto yy523; yy950: yych = *++p; - if (yych == 'E') goto yy951; - if (yych != 'e') goto yy516; + if (yych == 'D') goto yy533; + if (yych == 'd') goto yy533; + goto yy523; yy951: yych = *++p; - if (yych == 'N') goto yy952; - if (yych != 'n') goto yy516; + if (yych == 'D') goto yy533; + if (yych == 'd') goto yy533; + goto yy523; yy952: yych = *++p; - if (yych == 'T') goto yy519; - if (yych == 't') goto yy519; - goto yy516; + if (yych == 'L') goto yy953; + if (yych != 'l') goto yy523; yy953: yych = *++p; - if (yych == 'E') goto yy954; - if (yych != 'e') goto yy516; + if (yych == 'T') goto yy954; + if (yych != 't') goto yy523; yy954: yych = *++p; - if (yych == 'V') goto yy955; - if (yych != 'v') goto yy516; + if (yych == 'O') goto yy533; + if (yych == 'o') goto yy533; + goto yy523; yy955: yych = *++p; - if (yych == 'E') goto yy956; - if (yych != 'e') goto yy516; + if (yych == 'O') goto yy956; + if (yych != 'o') goto yy523; yy956: yych = *++p; - if (yych == 'N') goto yy957; - if (yych != 'n') goto yy516; + if (yych == 'M') goto yy957; + if (yych != 'm') goto yy523; yy957: yych = *++p; - if (yych == 'T') goto yy958; - if (yych != 't') goto yy516; + if (yych == 'E') goto yy958; + if (yych != 'e') goto yy523; yy958: yych = *++p; - if (yych == 'B') goto yy959; - if (yych != 'b') goto yy516; + if (yych == '-') goto yy959; + if (yych == ':') goto yy534; + goto yy523; yy959: yych = *++p; - if (yych == 'R') goto yy960; - if (yych != 'r') goto yy516; + if (yych == 'E') goto yy960; + if (yych != 'e') goto yy523; yy960: yych = *++p; - if (yych == 'I') goto yy961; - if (yych != 'i') goto yy516; + if (yych == 'X') goto yy961; + if (yych != 'x') goto yy523; yy961: yych = *++p; if (yych == 'T') goto yy962; - if (yych != 't') goto yy516; + if (yych != 't') goto yy523; yy962: yych = *++p; if (yych == 'E') goto yy963; - if (yych != 'e') goto yy516; + if (yych != 'e') goto yy523; yy963: yych = *++p; - if (yych != '-') goto yy516; + if (yych == 'N') goto yy964; + if (yych != 'n') goto yy523; +yy964: yych = *++p; - if (yych == 'A') goto yy965; - if (yych != 'a') goto yy516; + if (yych == 'S') goto yy965; + if (yych != 's') goto yy523; yy965: yych = *++p; - if (yych == 'T') goto yy966; - if (yych != 't') goto yy516; + if (yych == 'I') goto yy966; + if (yych != 'i') goto yy523; yy966: yych = *++p; - if (yych == 'T') goto yy967; - if (yych != 't') goto yy516; + if (yych == 'O') goto yy967; + if (yych != 'o') goto yy523; yy967: yych = *++p; - if (yych == 'E') goto yy968; - if (yych != 'e') goto yy516; + if (yych == 'N') goto yy533; + if (yych == 'n') goto yy533; + goto yy523; yy968: yych = *++p; - if (yych == 'N') goto yy969; - if (yych != 'n') goto yy516; + if (yych == 'P') goto yy533; + if (yych == 'p') goto yy533; + goto yy523; yy969: yych = *++p; - if (yych == 'D') goto yy970; - if (yych != 'd') goto yy516; + if (yych == '-') goto yy974; + goto yy523; yy970: yych = *++p; - if (yych == 'E') goto yy971; - if (yych != 'e') goto yy516; + if (yych == 'T') goto yy971; + if (yych != 't') goto yy523; yy971: - ++p; - if ((yych = *p) == 'E') goto yy519; - if (yych == 'e') goto yy519; - goto yy516; -} - -} - -// Try to match email autolink after first <, returning num of chars matched. -bufsize_t _scan_autolink_email(const unsigned char *p) -{ - const unsigned char *marker = NULL; - const unsigned char *start = p; - -{ - unsigned char yych; - static const unsigned char yybm[] = { + yych = *++p; + if (yych == 'E') goto yy972; + if (yych != 'e') goto yy523; +yy972: + yych = *++p; + if (yych == 'N') goto yy973; + if (yych != 'n') goto yy523; +yy973: + yych = *++p; + if (yych == 'T') goto yy533; + if (yych == 't') goto yy533; + goto yy523; +yy974: + yych = *++p; + if (yych == 'E') goto yy975; + if (yych != 'e') goto yy523; +yy975: + yych = *++p; + if (yych == 'V') goto yy976; + if (yych != 'v') goto yy523; +yy976: + yych = *++p; + if (yych == 'E') goto yy977; + if (yych != 'e') goto yy523; +yy977: + yych = *++p; + if (yych == 'N') goto yy978; + if (yych != 'n') goto yy523; +yy978: + yych = *++p; + if (yych == 'T') goto yy979; + if (yych != 't') goto yy523; +yy979: + yych = *++p; + if (yych == 'B') goto yy980; + if (yych != 'b') goto yy523; +yy980: + yych = *++p; + if (yych == 'R') goto yy981; + if (yych != 'r') goto yy523; +yy981: + yych = *++p; + if (yych == 'I') goto yy982; + if (yych != 'i') goto yy523; +yy982: + yych = *++p; + if (yych == 'T') goto yy983; + if (yych != 't') goto yy523; +yy983: + yych = *++p; + if (yych == 'E') goto yy984; + if (yych != 'e') goto yy523; +yy984: + yych = *++p; + if (yych != '-') goto yy523; + yych = *++p; + if (yych == 'A') goto yy986; + if (yych != 'a') goto yy523; +yy986: + yych = *++p; + if (yych == 'T') goto yy987; + if (yych != 't') goto yy523; +yy987: + yych = *++p; + if (yych == 'T') goto yy988; + if (yych != 't') goto yy523; +yy988: + yych = *++p; + if (yych == 'E') goto yy989; + if (yych != 'e') goto yy523; +yy989: + yych = *++p; + if (yych == 'N') goto yy990; + if (yych != 'n') goto yy523; +yy990: + yych = *++p; + if (yych == 'D') goto yy991; + if (yych != 'd') goto yy523; +yy991: + yych = *++p; + if (yych == 'E') goto yy992; + if (yych != 'e') goto yy523; +yy992: + ++p; + if ((yych = *p) == 'E') goto yy533; + if (yych == 'e') goto yy533; + goto yy523; +} + +} + +// Try to match email autolink after first <, returning num of chars matched. +bufsize_t _scan_autolink_email(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = 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, @@ -5899,4903 +6154,4947 @@ bufsize_t _scan_autolink_email(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *p; - if (yych <= ',') { - if (yych <= '!') { - if (yych == '\n') goto yy974; - if (yych <= ' ') goto yy976; - goto yy975; + yych = *(marker = p); + if (yych <= '?') { + if (yych <= ')') { + if (yych <= ' ') { + if (yych != '\n') goto yy997; + } else { + if (yych == '"') goto yy997; + if (yych <= '\'') goto yy996; + goto yy997; + } } else { - if (yych <= '\'') { - if (yych <= '"') goto yy976; - goto yy975; + if (yych <= '9') { + if (yych == ',') goto yy997; + goto yy996; } else { - if (yych <= ')') goto yy976; - if (yych <= '+') goto yy975; - goto yy976; + if (yych == '=') goto yy996; + if (yych <= '>') goto yy997; + goto yy996; } } } else { - if (yych <= '?') { - if (yych <= '<') { - if (yych <= '9') goto yy975; - goto yy976; + if (yych <= 0xDF) { + if (yych <= ']') { + if (yych <= '@') goto yy997; + if (yych <= 'Z') goto yy996; + goto yy997; } else { - if (yych == '>') goto yy976; - goto yy975; + if (yych <= '~') goto yy996; + if (yych <= 0x7F) goto yy997; + if (yych >= 0xC2) goto yy998; } } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy976; - goto yy975; + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1000; + if (yych == 0xED) goto yy1005; + goto yy1001; } else { - if (yych <= ']') goto yy976; - if (yych <= '~') goto yy975; - goto yy976; + if (yych <= 0xF0) goto yy1002; + if (yych <= 0xF3) goto yy1003; + if (yych <= 0xF4) goto yy1004; } } } -yy974: +yy995: { return 0; } -yy975: +yy996: yych = *(marker = ++p); if (yych <= ',') { if (yych <= '"') { - if (yych == '!') goto yy980; - goto yy974; + if (yych == '!') goto yy1008; + goto yy995; } else { - if (yych <= '\'') goto yy980; - if (yych <= ')') goto yy974; - if (yych <= '+') goto yy980; - goto yy974; + if (yych <= '\'') goto yy1008; + if (yych <= ')') goto yy995; + if (yych <= '+') goto yy1008; + goto yy995; } } else { if (yych <= '>') { - if (yych <= '9') goto yy980; - if (yych == '=') goto yy980; - goto yy974; + if (yych <= '9') goto yy1008; + if (yych == '=') goto yy1008; + goto yy995; } else { - if (yych <= 'Z') goto yy980; - if (yych <= ']') goto yy974; - if (yych <= '~') goto yy980; - goto yy974; + if (yych <= 'Z') goto yy1008; + if (yych <= ']') goto yy995; + if (yych <= '~') goto yy1008; + goto yy995; } } -yy976: +yy997: yych = *++p; - goto yy974; -yy977: + goto yy995; +yy998: + yych = *++p; + if (yych <= 0x7F) goto yy999; + if (yych <= 0xBF) goto yy997; +yy999: + p = marker; + goto yy995; +yy1000: + yych = *++p; + if (yych <= 0x9F) goto yy999; + if (yych <= 0xBF) goto yy998; + goto yy999; +yy1001: + yych = *++p; + if (yych <= 0x7F) goto yy999; + if (yych <= 0xBF) goto yy998; + goto yy999; +yy1002: + yych = *++p; + if (yych <= 0x8F) goto yy999; + if (yych <= 0xBF) goto yy1001; + goto yy999; +yy1003: + yych = *++p; + if (yych <= 0x7F) goto yy999; + if (yych <= 0xBF) goto yy1001; + goto yy999; +yy1004: + yych = *++p; + if (yych <= 0x7F) goto yy999; + if (yych <= 0x8F) goto yy1001; + goto yy999; +yy1005: + yych = *++p; + if (yych <= 0x7F) goto yy999; + if (yych <= 0x9F) goto yy998; + goto yy999; +yy1006: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy981; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1009; + goto yy999; } else { - if (yych <= 'Z') goto yy981; - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy981; + if (yych <= 'Z') goto yy1009; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1009; + goto yy999; } -yy978: - p = marker; - goto yy974; -yy979: +yy1007: ++p; yych = *p; -yy980: +yy1008: if (yybm[0+yych] & 128) { - goto yy979; + goto yy1007; } - if (yych == '@') goto yy977; - goto yy978; -yy981: + if (yych <= '>') goto yy999; + if (yych <= '@') goto yy1006; + goto yy999; +yy1009: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy983; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1011; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy983; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1011; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy983; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1011; + goto yy999; } } yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1111; - if (yych <= '/') goto yy978; - goto yy1112; + if (yych == '-') goto yy1139; + if (yych <= '/') goto yy999; + goto yy1140; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1112; + if (yych <= '@') goto yy999; + goto yy1140; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1112; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1140; + goto yy999; } } -yy983: +yy1011: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych <= '-') goto yy1111; + if (yych <= ',') goto yy999; + if (yych <= '-') goto yy1139; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1112; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1140; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1112; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1140; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1112; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1140; + goto yy999; } } -yy984: +yy1012: ++p; yych = *p; if (yych <= '@') { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy987; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1015; + goto yy999; } else { - if (yych <= 'Z') goto yy987; - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy987; - goto yy978; + if (yych <= 'Z') goto yy1015; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1015; + goto yy999; } -yy985: +yy1013: ++p; { return (bufsize_t)(p - start); } -yy987: +yy1015: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy989; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1017; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy989; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1017; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy989; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1017; + goto yy999; } } ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy990; - if (yych <= '/') goto yy978; - goto yy991; + if (yych == '-') goto yy1018; + if (yych <= '/') goto yy999; + goto yy1019; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy991; + if (yych <= '@') goto yy999; + goto yy1019; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy991; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1019; + goto yy999; } } -yy989: +yy1017: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy991; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1019; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy991; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1019; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy991; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1019; + goto yy999; } } -yy990: +yy1018: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy992; - if (yych <= '/') goto yy978; - goto yy993; + if (yych == '-') goto yy1020; + if (yych <= '/') goto yy999; + goto yy1021; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy993; + if (yych <= '@') goto yy999; + goto yy1021; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy993; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1021; + goto yy999; } } -yy991: +yy1019: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy993; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1021; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy993; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1021; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy993; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1021; + goto yy999; } } -yy992: +yy1020: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy994; - if (yych <= '/') goto yy978; - goto yy995; + if (yych == '-') goto yy1022; + if (yych <= '/') goto yy999; + goto yy1023; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy995; + if (yych <= '@') goto yy999; + goto yy1023; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy995; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1023; + goto yy999; } } -yy993: +yy1021: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy995; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1023; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy995; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1023; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy995; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1023; + goto yy999; } } -yy994: +yy1022: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy996; - if (yych <= '/') goto yy978; - goto yy997; + if (yych == '-') goto yy1024; + if (yych <= '/') goto yy999; + goto yy1025; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy997; + if (yych <= '@') goto yy999; + goto yy1025; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy997; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1025; + goto yy999; } } -yy995: +yy1023: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy997; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1025; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy997; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1025; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy997; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1025; + goto yy999; } } -yy996: +yy1024: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy998; - if (yych <= '/') goto yy978; - goto yy999; + if (yych == '-') goto yy1026; + if (yych <= '/') goto yy999; + goto yy1027; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy999; + if (yych <= '@') goto yy999; + goto yy1027; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy999; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1027; + goto yy999; } } -yy997: +yy1025: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy999; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1027; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy999; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1027; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy999; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1027; + goto yy999; } } -yy998: +yy1026: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1000; - if (yych <= '/') goto yy978; - goto yy1001; + if (yych == '-') goto yy1028; + if (yych <= '/') goto yy999; + goto yy1029; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1001; + if (yych <= '@') goto yy999; + goto yy1029; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1001; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1029; + goto yy999; } } -yy999: +yy1027: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1001; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1029; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1001; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1029; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1001; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1029; + goto yy999; } } -yy1000: +yy1028: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1002; - if (yych <= '/') goto yy978; - goto yy1003; + if (yych == '-') goto yy1030; + if (yych <= '/') goto yy999; + goto yy1031; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1003; + if (yych <= '@') goto yy999; + goto yy1031; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1003; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1031; + goto yy999; } } -yy1001: +yy1029: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1003; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1031; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1003; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1031; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1003; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1031; + goto yy999; } } -yy1002: +yy1030: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1004; - if (yych <= '/') goto yy978; - goto yy1005; + if (yych == '-') goto yy1032; + if (yych <= '/') goto yy999; + goto yy1033; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1005; + if (yych <= '@') goto yy999; + goto yy1033; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1005; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1033; + goto yy999; } } -yy1003: +yy1031: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1005; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1033; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1005; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1033; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1005; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1033; + goto yy999; } } -yy1004: +yy1032: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1006; - if (yych <= '/') goto yy978; - goto yy1007; + if (yych == '-') goto yy1034; + if (yych <= '/') goto yy999; + goto yy1035; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1007; + if (yych <= '@') goto yy999; + goto yy1035; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1007; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1035; + goto yy999; } } -yy1005: +yy1033: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1007; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1035; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1007; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1035; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1007; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1035; + goto yy999; } } -yy1006: +yy1034: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1008; - if (yych <= '/') goto yy978; - goto yy1009; - } else { + if (yych == '-') goto yy1036; + if (yych <= '/') goto yy999; + goto yy1037; + } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1009; + if (yych <= '@') goto yy999; + goto yy1037; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1009; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1037; + goto yy999; } } -yy1007: +yy1035: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1009; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1037; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1009; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1037; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1009; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1037; + goto yy999; } } -yy1008: +yy1036: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1010; - if (yych <= '/') goto yy978; - goto yy1011; + if (yych == '-') goto yy1038; + if (yych <= '/') goto yy999; + goto yy1039; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1011; + if (yych <= '@') goto yy999; + goto yy1039; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1011; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1039; + goto yy999; } } -yy1009: +yy1037: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1011; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1039; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1011; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1039; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1011; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1039; + goto yy999; } } -yy1010: +yy1038: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1012; - if (yych <= '/') goto yy978; - goto yy1013; + if (yych == '-') goto yy1040; + if (yych <= '/') goto yy999; + goto yy1041; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1013; + if (yych <= '@') goto yy999; + goto yy1041; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1013; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1041; + goto yy999; } } -yy1011: +yy1039: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1013; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1041; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1013; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1041; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1013; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1041; + goto yy999; } } -yy1012: +yy1040: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1014; - if (yych <= '/') goto yy978; - goto yy1015; + if (yych == '-') goto yy1042; + if (yych <= '/') goto yy999; + goto yy1043; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1015; + if (yych <= '@') goto yy999; + goto yy1043; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1015; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1043; + goto yy999; } } -yy1013: +yy1041: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1015; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1043; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1015; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1043; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1015; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1043; + goto yy999; } } -yy1014: +yy1042: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1016; - if (yych <= '/') goto yy978; - goto yy1017; + if (yych == '-') goto yy1044; + if (yych <= '/') goto yy999; + goto yy1045; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1017; + if (yych <= '@') goto yy999; + goto yy1045; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1017; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1045; + goto yy999; } } -yy1015: +yy1043: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1017; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1045; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1017; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1045; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1017; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1045; + goto yy999; } } -yy1016: +yy1044: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1018; - if (yych <= '/') goto yy978; - goto yy1019; + if (yych == '-') goto yy1046; + if (yych <= '/') goto yy999; + goto yy1047; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1019; + if (yych <= '@') goto yy999; + goto yy1047; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1019; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1047; + goto yy999; } } -yy1017: +yy1045: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1019; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1047; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1019; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1047; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1019; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1047; + goto yy999; } } -yy1018: +yy1046: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1020; - if (yych <= '/') goto yy978; - goto yy1021; + if (yych == '-') goto yy1048; + if (yych <= '/') goto yy999; + goto yy1049; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1021; + if (yych <= '@') goto yy999; + goto yy1049; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1021; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1049; + goto yy999; } } -yy1019: +yy1047: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1021; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1049; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1021; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1049; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1021; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1049; + goto yy999; } } -yy1020: +yy1048: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1022; - if (yych <= '/') goto yy978; - goto yy1023; + if (yych == '-') goto yy1050; + if (yych <= '/') goto yy999; + goto yy1051; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1023; + if (yych <= '@') goto yy999; + goto yy1051; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1023; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1051; + goto yy999; } } -yy1021: +yy1049: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1023; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1051; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1023; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1051; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1023; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1051; + goto yy999; } } -yy1022: +yy1050: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1024; - if (yych <= '/') goto yy978; - goto yy1025; + if (yych == '-') goto yy1052; + if (yych <= '/') goto yy999; + goto yy1053; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1025; + if (yych <= '@') goto yy999; + goto yy1053; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1025; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1053; + goto yy999; } } -yy1023: +yy1051: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1025; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1053; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1025; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1053; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1025; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1053; + goto yy999; } } -yy1024: +yy1052: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1026; - if (yych <= '/') goto yy978; - goto yy1027; + if (yych == '-') goto yy1054; + if (yych <= '/') goto yy999; + goto yy1055; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1027; + if (yych <= '@') goto yy999; + goto yy1055; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1027; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1055; + goto yy999; } } -yy1025: +yy1053: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1027; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1055; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1027; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1055; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1027; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1055; + goto yy999; } } -yy1026: +yy1054: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1028; - if (yych <= '/') goto yy978; - goto yy1029; + if (yych == '-') goto yy1056; + if (yych <= '/') goto yy999; + goto yy1057; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1029; + if (yych <= '@') goto yy999; + goto yy1057; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1029; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1057; + goto yy999; } } -yy1027: +yy1055: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1029; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1057; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1029; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1057; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1029; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1057; + goto yy999; } } -yy1028: +yy1056: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1030; - if (yych <= '/') goto yy978; - goto yy1031; + if (yych == '-') goto yy1058; + if (yych <= '/') goto yy999; + goto yy1059; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1031; + if (yych <= '@') goto yy999; + goto yy1059; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1031; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1059; + goto yy999; } } -yy1029: +yy1057: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1031; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1059; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1031; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1059; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1031; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1059; + goto yy999; } } -yy1030: +yy1058: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1032; - if (yych <= '/') goto yy978; - goto yy1033; + if (yych == '-') goto yy1060; + if (yych <= '/') goto yy999; + goto yy1061; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1033; + if (yych <= '@') goto yy999; + goto yy1061; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1033; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1061; + goto yy999; } } -yy1031: +yy1059: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1033; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1061; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1033; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1061; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1033; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1061; + goto yy999; } } -yy1032: +yy1060: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1034; - if (yych <= '/') goto yy978; - goto yy1035; + if (yych == '-') goto yy1062; + if (yych <= '/') goto yy999; + goto yy1063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1035; + if (yych <= '@') goto yy999; + goto yy1063; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1035; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1063; + goto yy999; } } -yy1033: +yy1061: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1035; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1063; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1035; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1063; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1035; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1063; + goto yy999; } } -yy1034: +yy1062: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1036; - if (yych <= '/') goto yy978; - goto yy1037; + if (yych == '-') goto yy1064; + if (yych <= '/') goto yy999; + goto yy1065; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1037; + if (yych <= '@') goto yy999; + goto yy1065; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1037; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1065; + goto yy999; } } -yy1035: +yy1063: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1037; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1065; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1037; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1065; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1037; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1065; + goto yy999; } } -yy1036: +yy1064: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1038; - if (yych <= '/') goto yy978; - goto yy1039; + if (yych == '-') goto yy1066; + if (yych <= '/') goto yy999; + goto yy1067; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1039; + if (yych <= '@') goto yy999; + goto yy1067; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1039; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1067; + goto yy999; } } -yy1037: +yy1065: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1039; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1067; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1039; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1067; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1039; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1067; + goto yy999; } } -yy1038: +yy1066: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1040; - if (yych <= '/') goto yy978; - goto yy1041; + if (yych == '-') goto yy1068; + if (yych <= '/') goto yy999; + goto yy1069; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1041; + if (yych <= '@') goto yy999; + goto yy1069; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1041; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1069; + goto yy999; } } -yy1039: +yy1067: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1041; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1069; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1041; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1069; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1041; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1069; + goto yy999; } } -yy1040: +yy1068: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1042; - if (yych <= '/') goto yy978; - goto yy1043; + if (yych == '-') goto yy1070; + if (yych <= '/') goto yy999; + goto yy1071; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1043; + if (yych <= '@') goto yy999; + goto yy1071; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1043; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1071; + goto yy999; } } -yy1041: +yy1069: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1043; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1071; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1043; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1071; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1043; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1071; + goto yy999; } } -yy1042: +yy1070: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1044; - if (yych <= '/') goto yy978; - goto yy1045; + if (yych == '-') goto yy1072; + if (yych <= '/') goto yy999; + goto yy1073; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1045; + if (yych <= '@') goto yy999; + goto yy1073; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1045; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1073; + goto yy999; } } -yy1043: +yy1071: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1045; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1073; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1045; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1073; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1045; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1073; + goto yy999; } } -yy1044: +yy1072: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1046; - if (yych <= '/') goto yy978; - goto yy1047; + if (yych == '-') goto yy1074; + if (yych <= '/') goto yy999; + goto yy1075; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1047; + if (yych <= '@') goto yy999; + goto yy1075; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1047; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1075; + goto yy999; } } -yy1045: +yy1073: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1047; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1075; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1047; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1075; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1047; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1075; + goto yy999; } } -yy1046: +yy1074: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1048; - if (yych <= '/') goto yy978; - goto yy1049; + if (yych == '-') goto yy1076; + if (yych <= '/') goto yy999; + goto yy1077; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1049; + if (yych <= '@') goto yy999; + goto yy1077; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1049; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1077; + goto yy999; } } -yy1047: +yy1075: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1049; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1077; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1049; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1077; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1049; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1077; + goto yy999; } } -yy1048: +yy1076: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1050; - if (yych <= '/') goto yy978; - goto yy1051; + if (yych == '-') goto yy1078; + if (yych <= '/') goto yy999; + goto yy1079; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1051; + if (yych <= '@') goto yy999; + goto yy1079; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1051; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1079; + goto yy999; } } -yy1049: +yy1077: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1051; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1079; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1051; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1079; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1051; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1079; + goto yy999; } } -yy1050: +yy1078: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1052; - if (yych <= '/') goto yy978; - goto yy1053; + if (yych == '-') goto yy1080; + if (yych <= '/') goto yy999; + goto yy1081; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1053; + if (yych <= '@') goto yy999; + goto yy1081; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1053; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1081; + goto yy999; } } -yy1051: +yy1079: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1053; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1081; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1053; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1081; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1053; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1081; + goto yy999; } } -yy1052: +yy1080: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1054; - if (yych <= '/') goto yy978; - goto yy1055; + if (yych == '-') goto yy1082; + if (yych <= '/') goto yy999; + goto yy1083; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1055; + if (yych <= '@') goto yy999; + goto yy1083; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1055; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1083; + goto yy999; } } -yy1053: +yy1081: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1055; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1083; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1055; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1083; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1055; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1083; + goto yy999; } } -yy1054: +yy1082: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1056; - if (yych <= '/') goto yy978; - goto yy1057; + if (yych == '-') goto yy1084; + if (yych <= '/') goto yy999; + goto yy1085; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1057; + if (yych <= '@') goto yy999; + goto yy1085; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1057; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1085; + goto yy999; } } -yy1055: +yy1083: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1057; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1085; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1057; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1085; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1057; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1085; + goto yy999; } } -yy1056: +yy1084: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1058; - if (yych <= '/') goto yy978; - goto yy1059; + if (yych == '-') goto yy1086; + if (yych <= '/') goto yy999; + goto yy1087; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1059; + if (yych <= '@') goto yy999; + goto yy1087; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1059; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1087; + goto yy999; } } -yy1057: +yy1085: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1059; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1087; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1059; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1087; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1059; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1087; + goto yy999; } } -yy1058: +yy1086: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1060; - if (yych <= '/') goto yy978; - goto yy1061; + if (yych == '-') goto yy1088; + if (yych <= '/') goto yy999; + goto yy1089; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1061; + if (yych <= '@') goto yy999; + goto yy1089; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1061; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1089; + goto yy999; } } -yy1059: +yy1087: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1061; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1089; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1061; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1089; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1061; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1089; + goto yy999; } } -yy1060: +yy1088: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1062; - if (yych <= '/') goto yy978; - goto yy1063; + if (yych == '-') goto yy1090; + if (yych <= '/') goto yy999; + goto yy1091; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1063; + if (yych <= '@') goto yy999; + goto yy1091; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1063; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1091; + goto yy999; } } -yy1061: +yy1089: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1063; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1091; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1063; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1091; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1063; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1091; + goto yy999; } } -yy1062: +yy1090: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1064; - if (yych <= '/') goto yy978; - goto yy1065; + if (yych == '-') goto yy1092; + if (yych <= '/') goto yy999; + goto yy1093; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1065; + if (yych <= '@') goto yy999; + goto yy1093; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1065; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1093; + goto yy999; } } -yy1063: +yy1091: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1065; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1093; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1065; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1093; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1065; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1093; + goto yy999; } } -yy1064: +yy1092: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1066; - if (yych <= '/') goto yy978; - goto yy1067; + if (yych == '-') goto yy1094; + if (yych <= '/') goto yy999; + goto yy1095; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1067; + if (yych <= '@') goto yy999; + goto yy1095; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1067; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1095; + goto yy999; } } -yy1065: +yy1093: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1067; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1095; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1067; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1095; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1067; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1095; + goto yy999; } } -yy1066: +yy1094: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1068; - if (yych <= '/') goto yy978; - goto yy1069; + if (yych == '-') goto yy1096; + if (yych <= '/') goto yy999; + goto yy1097; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1069; + if (yych <= '@') goto yy999; + goto yy1097; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1069; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1097; + goto yy999; } } -yy1067: +yy1095: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1069; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1097; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1069; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1097; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1069; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1097; + goto yy999; } } -yy1068: +yy1096: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1070; - if (yych <= '/') goto yy978; - goto yy1071; + if (yych == '-') goto yy1098; + if (yych <= '/') goto yy999; + goto yy1099; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1071; + if (yych <= '@') goto yy999; + goto yy1099; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1071; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1099; + goto yy999; } } -yy1069: +yy1097: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1071; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1099; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1071; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1099; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1071; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1099; + goto yy999; } } -yy1070: +yy1098: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1072; - if (yych <= '/') goto yy978; - goto yy1073; + if (yych == '-') goto yy1100; + if (yych <= '/') goto yy999; + goto yy1101; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1073; + if (yych <= '@') goto yy999; + goto yy1101; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1073; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1101; + goto yy999; } } -yy1071: +yy1099: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1073; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1101; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1073; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1101; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1073; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1101; + goto yy999; } } -yy1072: +yy1100: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1074; - if (yych <= '/') goto yy978; - goto yy1075; + if (yych == '-') goto yy1102; + if (yych <= '/') goto yy999; + goto yy1103; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1075; + if (yych <= '@') goto yy999; + goto yy1103; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1075; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1103; + goto yy999; } } -yy1073: +yy1101: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1075; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1103; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1075; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1103; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1075; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1103; + goto yy999; } } -yy1074: +yy1102: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1076; - if (yych <= '/') goto yy978; - goto yy1077; + if (yych == '-') goto yy1104; + if (yych <= '/') goto yy999; + goto yy1105; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1077; + if (yych <= '@') goto yy999; + goto yy1105; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1077; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1105; + goto yy999; } } -yy1075: +yy1103: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1077; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1105; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1077; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1105; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1077; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1105; + goto yy999; } } -yy1076: +yy1104: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1078; - if (yych <= '/') goto yy978; - goto yy1079; + if (yych == '-') goto yy1106; + if (yych <= '/') goto yy999; + goto yy1107; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1079; + if (yych <= '@') goto yy999; + goto yy1107; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1079; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1107; + goto yy999; } } -yy1077: +yy1105: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1079; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1107; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1079; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1107; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1079; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1107; + goto yy999; } } -yy1078: +yy1106: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1080; - if (yych <= '/') goto yy978; - goto yy1081; + if (yych == '-') goto yy1108; + if (yych <= '/') goto yy999; + goto yy1109; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1081; + if (yych <= '@') goto yy999; + goto yy1109; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1081; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1109; + goto yy999; } } -yy1079: +yy1107: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1081; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1109; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1081; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1109; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1081; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1109; + goto yy999; } } -yy1080: +yy1108: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1082; - if (yych <= '/') goto yy978; - goto yy1083; + if (yych == '-') goto yy1110; + if (yych <= '/') goto yy999; + goto yy1111; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1083; + if (yych <= '@') goto yy999; + goto yy1111; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1083; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1111; + goto yy999; } } -yy1081: +yy1109: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1083; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1111; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1083; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1111; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1083; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1111; + goto yy999; } } -yy1082: +yy1110: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1084; - if (yych <= '/') goto yy978; - goto yy1085; + if (yych == '-') goto yy1112; + if (yych <= '/') goto yy999; + goto yy1113; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1085; + if (yych <= '@') goto yy999; + goto yy1113; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1085; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1113; + goto yy999; } } -yy1083: +yy1111: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1085; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1113; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1085; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1113; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1085; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1113; + goto yy999; } } -yy1084: +yy1112: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1086; - if (yych <= '/') goto yy978; - goto yy1087; + if (yych == '-') goto yy1114; + if (yych <= '/') goto yy999; + goto yy1115; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1087; + if (yych <= '@') goto yy999; + goto yy1115; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1087; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1115; + goto yy999; } } -yy1085: +yy1113: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1087; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1115; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1087; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1115; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1087; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1115; + goto yy999; } } -yy1086: +yy1114: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1088; - if (yych <= '/') goto yy978; - goto yy1089; + if (yych == '-') goto yy1116; + if (yych <= '/') goto yy999; + goto yy1117; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1089; + if (yych <= '@') goto yy999; + goto yy1117; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1089; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1117; + goto yy999; } } -yy1087: +yy1115: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1089; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1117; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1089; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1117; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1089; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1117; + goto yy999; } } -yy1088: +yy1116: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1090; - if (yych <= '/') goto yy978; - goto yy1091; + if (yych == '-') goto yy1118; + if (yych <= '/') goto yy999; + goto yy1119; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1091; + if (yych <= '@') goto yy999; + goto yy1119; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1091; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1119; + goto yy999; } } -yy1089: +yy1117: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1091; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1119; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1091; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1119; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1091; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1119; + goto yy999; } } -yy1090: +yy1118: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1092; - if (yych <= '/') goto yy978; - goto yy1093; + if (yych == '-') goto yy1120; + if (yych <= '/') goto yy999; + goto yy1121; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1093; + if (yych <= '@') goto yy999; + goto yy1121; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1093; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1121; + goto yy999; } } -yy1091: +yy1119: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1093; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1121; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1093; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1121; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1093; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1121; + goto yy999; } } -yy1092: +yy1120: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1094; - if (yych <= '/') goto yy978; - goto yy1095; + if (yych == '-') goto yy1122; + if (yych <= '/') goto yy999; + goto yy1123; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1095; + if (yych <= '@') goto yy999; + goto yy1123; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1095; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1123; + goto yy999; } } -yy1093: +yy1121: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1095; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1123; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1095; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1123; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1095; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1123; + goto yy999; } } -yy1094: +yy1122: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1096; - if (yych <= '/') goto yy978; - goto yy1097; + if (yych == '-') goto yy1124; + if (yych <= '/') goto yy999; + goto yy1125; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1097; + if (yych <= '@') goto yy999; + goto yy1125; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1097; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1125; + goto yy999; } } -yy1095: +yy1123: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1097; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1125; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1097; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1125; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1097; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1125; + goto yy999; } } -yy1096: +yy1124: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1098; - if (yych <= '/') goto yy978; - goto yy1099; + if (yych == '-') goto yy1126; + if (yych <= '/') goto yy999; + goto yy1127; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1099; + if (yych <= '@') goto yy999; + goto yy1127; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1099; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1127; + goto yy999; } } -yy1097: +yy1125: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1099; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1127; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1099; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1127; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1099; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1127; + goto yy999; } } -yy1098: +yy1126: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1100; - if (yych <= '/') goto yy978; - goto yy1101; + if (yych == '-') goto yy1128; + if (yych <= '/') goto yy999; + goto yy1129; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1101; + if (yych <= '@') goto yy999; + goto yy1129; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1101; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1129; + goto yy999; } } -yy1099: +yy1127: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1101; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1129; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1101; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1129; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1101; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1129; + goto yy999; } } -yy1100: +yy1128: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1102; - if (yych <= '/') goto yy978; - goto yy1103; + if (yych == '-') goto yy1130; + if (yych <= '/') goto yy999; + goto yy1131; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1103; + if (yych <= '@') goto yy999; + goto yy1131; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1103; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1131; + goto yy999; } } -yy1101: +yy1129: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1103; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1131; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1103; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1131; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1103; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1131; + goto yy999; } } -yy1102: +yy1130: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1104; - if (yych <= '/') goto yy978; - goto yy1105; + if (yych == '-') goto yy1132; + if (yych <= '/') goto yy999; + goto yy1133; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1105; + if (yych <= '@') goto yy999; + goto yy1133; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1105; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1133; + goto yy999; } } -yy1103: +yy1131: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1105; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1133; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1105; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1133; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1105; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1133; + goto yy999; } } -yy1104: +yy1132: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1106; - if (yych <= '/') goto yy978; - goto yy1107; + if (yych == '-') goto yy1134; + if (yych <= '/') goto yy999; + goto yy1135; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1107; + if (yych <= '@') goto yy999; + goto yy1135; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1107; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1135; + goto yy999; } } -yy1105: +yy1133: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1107; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1135; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1107; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1135; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1107; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1135; + goto yy999; } } -yy1106: +yy1134: ++p; yych = *p; if (yych <= '9') { - if (yych == '-') goto yy1108; - if (yych <= '/') goto yy978; - goto yy1109; + if (yych == '-') goto yy1136; + if (yych <= '/') goto yy999; + goto yy1137; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1109; + if (yych <= '@') goto yy999; + goto yy1137; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1109; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1137; + goto yy999; } } -yy1107: +yy1135: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1109; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1137; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1109; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1137; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1109; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1137; + goto yy999; } } -yy1108: +yy1136: ++p; yych = *p; if (yych <= '@') { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1110; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1138; + goto yy999; } else { - if (yych <= 'Z') goto yy1110; - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1110; - goto yy978; + if (yych <= 'Z') goto yy1138; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1138; + goto yy999; } -yy1109: +yy1137: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= '-') goto yy978; - goto yy984; + if (yych <= '-') goto yy999; + goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych >= ':') goto yy978; + if (yych <= '/') goto yy999; + if (yych >= ':') goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; } else { - if (yych <= '`') goto yy978; - if (yych >= '{') goto yy978; + if (yych <= '`') goto yy999; + if (yych >= '{') goto yy999; } } -yy1110: +yy1138: ++p; yych = *p; - if (yych == '.') goto yy984; - if (yych == '>') goto yy985; - goto yy978; -yy1111: + if (yych == '.') goto yy1012; + if (yych == '>') goto yy1013; + goto yy999; +yy1139: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1113; - if (yych <= '/') goto yy978; - goto yy1114; + if (yych == '-') goto yy1141; + if (yych <= '/') goto yy999; + goto yy1142; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1114; + if (yych <= '@') goto yy999; + goto yy1142; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1114; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1142; + goto yy999; } } -yy1112: +yy1140: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1114; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1142; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1114; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1142; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1114; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1142; + goto yy999; } } -yy1113: +yy1141: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1115; - if (yych <= '/') goto yy978; - goto yy1116; + if (yych == '-') goto yy1143; + if (yych <= '/') goto yy999; + goto yy1144; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1116; + if (yych <= '@') goto yy999; + goto yy1144; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1116; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1144; + goto yy999; } } -yy1114: +yy1142: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1116; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1144; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1116; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1144; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1116; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1144; + goto yy999; } } -yy1115: +yy1143: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1117; - if (yych <= '/') goto yy978; - goto yy1118; + if (yych == '-') goto yy1145; + if (yych <= '/') goto yy999; + goto yy1146; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1118; + if (yych <= '@') goto yy999; + goto yy1146; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1118; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1146; + goto yy999; } } -yy1116: +yy1144: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1118; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1146; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1118; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1146; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1118; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1146; + goto yy999; } } -yy1117: +yy1145: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1119; - if (yych <= '/') goto yy978; - goto yy1120; + if (yych == '-') goto yy1147; + if (yych <= '/') goto yy999; + goto yy1148; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1120; + if (yych <= '@') goto yy999; + goto yy1148; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1120; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1148; + goto yy999; } } -yy1118: +yy1146: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1120; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1148; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1120; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1148; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1120; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1148; + goto yy999; } } -yy1119: +yy1147: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1121; - if (yych <= '/') goto yy978; - goto yy1122; + if (yych == '-') goto yy1149; + if (yych <= '/') goto yy999; + goto yy1150; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1122; + if (yych <= '@') goto yy999; + goto yy1150; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1122; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1150; + goto yy999; } } -yy1120: +yy1148: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1122; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1150; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1122; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1150; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1122; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1150; + goto yy999; } } -yy1121: +yy1149: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1123; - if (yych <= '/') goto yy978; - goto yy1124; + if (yych == '-') goto yy1151; + if (yych <= '/') goto yy999; + goto yy1152; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1124; + if (yych <= '@') goto yy999; + goto yy1152; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1124; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1152; + goto yy999; } } -yy1122: +yy1150: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1124; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1152; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1124; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1152; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1124; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1152; + goto yy999; } } -yy1123: +yy1151: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1125; - if (yych <= '/') goto yy978; - goto yy1126; + if (yych == '-') goto yy1153; + if (yych <= '/') goto yy999; + goto yy1154; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1126; + if (yych <= '@') goto yy999; + goto yy1154; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1126; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1154; + goto yy999; } } -yy1124: +yy1152: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1126; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1154; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1126; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1154; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1126; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1154; + goto yy999; } } -yy1125: +yy1153: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1127; - if (yych <= '/') goto yy978; - goto yy1128; + if (yych == '-') goto yy1155; + if (yych <= '/') goto yy999; + goto yy1156; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1128; + if (yych <= '@') goto yy999; + goto yy1156; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1128; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1156; + goto yy999; } } -yy1126: +yy1154: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1128; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1156; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1128; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1156; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1128; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1156; + goto yy999; } } -yy1127: +yy1155: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1129; - if (yych <= '/') goto yy978; - goto yy1130; + if (yych == '-') goto yy1157; + if (yych <= '/') goto yy999; + goto yy1158; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1130; + if (yych <= '@') goto yy999; + goto yy1158; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1130; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1158; + goto yy999; } } -yy1128: +yy1156: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1130; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1158; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1130; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1158; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1130; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1158; + goto yy999; } } -yy1129: +yy1157: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1131; - if (yych <= '/') goto yy978; - goto yy1132; + if (yych == '-') goto yy1159; + if (yych <= '/') goto yy999; + goto yy1160; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1132; + if (yych <= '@') goto yy999; + goto yy1160; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1132; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1160; + goto yy999; } } -yy1130: +yy1158: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1132; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1160; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1132; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1160; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1132; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1160; + goto yy999; } } -yy1131: +yy1159: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1133; - if (yych <= '/') goto yy978; - goto yy1134; + if (yych == '-') goto yy1161; + if (yych <= '/') goto yy999; + goto yy1162; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1134; + if (yych <= '@') goto yy999; + goto yy1162; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1134; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1162; + goto yy999; } } -yy1132: +yy1160: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1134; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1162; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1134; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1162; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1134; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1162; + goto yy999; } } -yy1133: +yy1161: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1135; - if (yych <= '/') goto yy978; - goto yy1136; + if (yych == '-') goto yy1163; + if (yych <= '/') goto yy999; + goto yy1164; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1136; + if (yych <= '@') goto yy999; + goto yy1164; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1136; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1164; + goto yy999; } } -yy1134: +yy1162: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1136; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1164; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1136; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1164; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1136; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1164; + goto yy999; } } -yy1135: +yy1163: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1137; - if (yych <= '/') goto yy978; - goto yy1138; + if (yych == '-') goto yy1165; + if (yych <= '/') goto yy999; + goto yy1166; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1138; + if (yych <= '@') goto yy999; + goto yy1166; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1138; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1166; + goto yy999; } } -yy1136: +yy1164: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1138; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1166; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1138; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1166; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1138; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1166; + goto yy999; } } -yy1137: +yy1165: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1139; - if (yych <= '/') goto yy978; - goto yy1140; + if (yych == '-') goto yy1167; + if (yych <= '/') goto yy999; + goto yy1168; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1140; + if (yych <= '@') goto yy999; + goto yy1168; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1140; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1168; + goto yy999; } } -yy1138: +yy1166: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1140; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1168; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1140; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1168; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1140; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1168; + goto yy999; } } -yy1139: +yy1167: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1141; - if (yych <= '/') goto yy978; - goto yy1142; + if (yych == '-') goto yy1169; + if (yych <= '/') goto yy999; + goto yy1170; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1142; + if (yych <= '@') goto yy999; + goto yy1170; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1142; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1170; + goto yy999; } } -yy1140: +yy1168: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1142; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1170; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1142; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1170; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1142; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1170; + goto yy999; } } -yy1141: +yy1169: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1143; - if (yych <= '/') goto yy978; - goto yy1144; + if (yych == '-') goto yy1171; + if (yych <= '/') goto yy999; + goto yy1172; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1144; + if (yych <= '@') goto yy999; + goto yy1172; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1144; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1172; + goto yy999; } } -yy1142: +yy1170: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1144; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1172; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1144; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1172; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1144; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1172; + goto yy999; } } -yy1143: +yy1171: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1145; - if (yych <= '/') goto yy978; - goto yy1146; + if (yych == '-') goto yy1173; + if (yych <= '/') goto yy999; + goto yy1174; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1146; + if (yych <= '@') goto yy999; + goto yy1174; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1146; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1174; + goto yy999; } } -yy1144: +yy1172: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1146; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1174; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1146; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1174; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1146; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1174; + goto yy999; } } -yy1145: +yy1173: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1147; - if (yych <= '/') goto yy978; - goto yy1148; + if (yych == '-') goto yy1175; + if (yych <= '/') goto yy999; + goto yy1176; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1148; + if (yych <= '@') goto yy999; + goto yy1176; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1148; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1176; + goto yy999; } } -yy1146: +yy1174: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1148; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1176; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1148; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1176; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1148; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1176; + goto yy999; } } -yy1147: +yy1175: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1149; - if (yych <= '/') goto yy978; - goto yy1150; + if (yych == '-') goto yy1177; + if (yych <= '/') goto yy999; + goto yy1178; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1150; + if (yych <= '@') goto yy999; + goto yy1178; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1150; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1178; + goto yy999; } } -yy1148: +yy1176: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1150; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1178; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1150; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1178; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1150; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1178; + goto yy999; } } -yy1149: +yy1177: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1151; - if (yych <= '/') goto yy978; - goto yy1152; + if (yych == '-') goto yy1179; + if (yych <= '/') goto yy999; + goto yy1180; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1152; + if (yych <= '@') goto yy999; + goto yy1180; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1152; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1180; + goto yy999; } } -yy1150: +yy1178: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1152; - goto yy978; - } + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1180; + goto yy999; + } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1152; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1180; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1152; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1180; + goto yy999; } } -yy1151: +yy1179: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1153; - if (yych <= '/') goto yy978; - goto yy1154; + if (yych == '-') goto yy1181; + if (yych <= '/') goto yy999; + goto yy1182; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1154; + if (yych <= '@') goto yy999; + goto yy1182; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1154; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1182; + goto yy999; } } -yy1152: +yy1180: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1154; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1182; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1154; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1182; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1154; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1182; + goto yy999; } } -yy1153: +yy1181: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1155; - if (yych <= '/') goto yy978; - goto yy1156; + if (yych == '-') goto yy1183; + if (yych <= '/') goto yy999; + goto yy1184; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1156; + if (yych <= '@') goto yy999; + goto yy1184; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1156; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1184; + goto yy999; } } -yy1154: +yy1182: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1156; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1184; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1156; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1184; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1156; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1184; + goto yy999; } } -yy1155: +yy1183: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1157; - if (yych <= '/') goto yy978; - goto yy1158; + if (yych == '-') goto yy1185; + if (yych <= '/') goto yy999; + goto yy1186; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1158; + if (yych <= '@') goto yy999; + goto yy1186; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1158; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1186; + goto yy999; } } -yy1156: +yy1184: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1158; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1186; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1158; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1186; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1158; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1186; + goto yy999; } } -yy1157: +yy1185: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1159; - if (yych <= '/') goto yy978; - goto yy1160; + if (yych == '-') goto yy1187; + if (yych <= '/') goto yy999; + goto yy1188; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1160; + if (yych <= '@') goto yy999; + goto yy1188; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1160; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1188; + goto yy999; } } -yy1158: +yy1186: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1160; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1188; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1160; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1188; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1160; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1188; + goto yy999; } } -yy1159: +yy1187: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1161; - if (yych <= '/') goto yy978; - goto yy1162; + if (yych == '-') goto yy1189; + if (yych <= '/') goto yy999; + goto yy1190; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1162; + if (yych <= '@') goto yy999; + goto yy1190; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1162; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1190; + goto yy999; } } -yy1160: +yy1188: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1162; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1190; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1162; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1190; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1162; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1190; + goto yy999; } } -yy1161: +yy1189: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1163; - if (yych <= '/') goto yy978; - goto yy1164; + if (yych == '-') goto yy1191; + if (yych <= '/') goto yy999; + goto yy1192; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1164; + if (yych <= '@') goto yy999; + goto yy1192; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1164; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1192; + goto yy999; } } -yy1162: +yy1190: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1164; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1192; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1164; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1192; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1164; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1192; + goto yy999; } } -yy1163: +yy1191: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1165; - if (yych <= '/') goto yy978; - goto yy1166; + if (yych == '-') goto yy1193; + if (yych <= '/') goto yy999; + goto yy1194; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1166; + if (yych <= '@') goto yy999; + goto yy1194; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1166; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1194; + goto yy999; } } -yy1164: +yy1192: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1166; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1194; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1166; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1194; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1166; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1194; + goto yy999; } } -yy1165: +yy1193: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1167; - if (yych <= '/') goto yy978; - goto yy1168; + if (yych == '-') goto yy1195; + if (yych <= '/') goto yy999; + goto yy1196; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1168; + if (yych <= '@') goto yy999; + goto yy1196; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1168; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1196; + goto yy999; } } -yy1166: +yy1194: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1168; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1196; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1168; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1196; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1168; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1196; + goto yy999; } } -yy1167: +yy1195: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1169; - if (yych <= '/') goto yy978; - goto yy1170; + if (yych == '-') goto yy1197; + if (yych <= '/') goto yy999; + goto yy1198; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1170; + if (yych <= '@') goto yy999; + goto yy1198; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1170; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1198; + goto yy999; } } -yy1168: +yy1196: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1170; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1198; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1170; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1198; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1170; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1198; + goto yy999; } } -yy1169: +yy1197: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1171; - if (yych <= '/') goto yy978; - goto yy1172; + if (yych == '-') goto yy1199; + if (yych <= '/') goto yy999; + goto yy1200; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1172; + if (yych <= '@') goto yy999; + goto yy1200; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1172; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1200; + goto yy999; } } -yy1170: +yy1198: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1172; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1200; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1172; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1200; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1172; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1200; + goto yy999; } } -yy1171: +yy1199: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1173; - if (yych <= '/') goto yy978; - goto yy1174; + if (yych == '-') goto yy1201; + if (yych <= '/') goto yy999; + goto yy1202; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1174; + if (yych <= '@') goto yy999; + goto yy1202; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1174; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1202; + goto yy999; } } -yy1172: +yy1200: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1174; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1202; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1174; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1202; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1174; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1202; + goto yy999; } } -yy1173: +yy1201: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1175; - if (yych <= '/') goto yy978; - goto yy1176; + if (yych == '-') goto yy1203; + if (yych <= '/') goto yy999; + goto yy1204; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1176; + if (yych <= '@') goto yy999; + goto yy1204; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1176; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1204; + goto yy999; } } -yy1174: +yy1202: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1176; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1204; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1176; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1204; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1176; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1204; + goto yy999; } } -yy1175: +yy1203: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1177; - if (yych <= '/') goto yy978; - goto yy1178; + if (yych == '-') goto yy1205; + if (yych <= '/') goto yy999; + goto yy1206; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1178; + if (yych <= '@') goto yy999; + goto yy1206; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1178; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1206; + goto yy999; } } -yy1176: +yy1204: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1178; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1206; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1178; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1206; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1178; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1206; + goto yy999; } } -yy1177: +yy1205: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1179; - if (yych <= '/') goto yy978; - goto yy1180; + if (yych == '-') goto yy1207; + if (yych <= '/') goto yy999; + goto yy1208; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1180; + if (yych <= '@') goto yy999; + goto yy1208; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1180; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1208; + goto yy999; } } -yy1178: +yy1206: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1180; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1208; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1180; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1208; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1180; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1208; + goto yy999; } } -yy1179: +yy1207: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1181; - if (yych <= '/') goto yy978; - goto yy1182; + if (yych == '-') goto yy1209; + if (yych <= '/') goto yy999; + goto yy1210; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1182; + if (yych <= '@') goto yy999; + goto yy1210; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1182; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1210; + goto yy999; } } -yy1180: +yy1208: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1182; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1210; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1182; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1210; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1182; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1210; + goto yy999; } } -yy1181: +yy1209: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1183; - if (yych <= '/') goto yy978; - goto yy1184; + if (yych == '-') goto yy1211; + if (yych <= '/') goto yy999; + goto yy1212; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1184; + if (yych <= '@') goto yy999; + goto yy1212; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1184; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1212; + goto yy999; } } -yy1182: +yy1210: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1184; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1212; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1184; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1212; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1184; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1212; + goto yy999; } } -yy1183: +yy1211: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1185; - if (yych <= '/') goto yy978; - goto yy1186; + if (yych == '-') goto yy1213; + if (yych <= '/') goto yy999; + goto yy1214; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1186; + if (yych <= '@') goto yy999; + goto yy1214; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1186; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1214; + goto yy999; } } -yy1184: +yy1212: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1186; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1214; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1186; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1214; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1186; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1214; + goto yy999; } } -yy1185: +yy1213: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1187; - if (yych <= '/') goto yy978; - goto yy1188; + if (yych == '-') goto yy1215; + if (yych <= '/') goto yy999; + goto yy1216; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1188; + if (yych <= '@') goto yy999; + goto yy1216; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1188; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1216; + goto yy999; } } -yy1186: +yy1214: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1188; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1216; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1188; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1216; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1188; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1216; + goto yy999; } } -yy1187: +yy1215: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1189; - if (yych <= '/') goto yy978; - goto yy1190; + if (yych == '-') goto yy1217; + if (yych <= '/') goto yy999; + goto yy1218; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1190; + if (yych <= '@') goto yy999; + goto yy1218; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1190; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1218; + goto yy999; } } -yy1188: +yy1216: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1190; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1218; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1190; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1218; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1190; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1218; + goto yy999; } } -yy1189: +yy1217: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1191; - if (yych <= '/') goto yy978; - goto yy1192; + if (yych == '-') goto yy1219; + if (yych <= '/') goto yy999; + goto yy1220; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1192; + if (yych <= '@') goto yy999; + goto yy1220; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1192; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1220; + goto yy999; } } -yy1190: +yy1218: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1192; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1220; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1192; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1220; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1192; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1220; + goto yy999; } } -yy1191: +yy1219: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1193; - if (yych <= '/') goto yy978; - goto yy1194; + if (yych == '-') goto yy1221; + if (yych <= '/') goto yy999; + goto yy1222; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1194; + if (yych <= '@') goto yy999; + goto yy1222; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1194; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1222; + goto yy999; } } -yy1192: +yy1220: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1194; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1222; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1194; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1222; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1194; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1222; + goto yy999; } } -yy1193: +yy1221: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1195; - if (yych <= '/') goto yy978; - goto yy1196; + if (yych == '-') goto yy1223; + if (yych <= '/') goto yy999; + goto yy1224; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1196; + if (yych <= '@') goto yy999; + goto yy1224; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1196; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1224; + goto yy999; } } -yy1194: +yy1222: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1196; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1224; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1196; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1224; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1196; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1224; + goto yy999; } } -yy1195: +yy1223: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1197; - if (yych <= '/') goto yy978; - goto yy1198; + if (yych == '-') goto yy1225; + if (yych <= '/') goto yy999; + goto yy1226; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1198; + if (yych <= '@') goto yy999; + goto yy1226; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1198; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1226; + goto yy999; } } -yy1196: +yy1224: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1198; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1226; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1198; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1226; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1198; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1226; + goto yy999; } } -yy1197: +yy1225: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1199; - if (yych <= '/') goto yy978; - goto yy1200; + if (yych == '-') goto yy1227; + if (yych <= '/') goto yy999; + goto yy1228; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1200; + if (yych <= '@') goto yy999; + goto yy1228; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1200; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1228; + goto yy999; } } -yy1198: +yy1226: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1200; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1228; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1200; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1228; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1200; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1228; + goto yy999; } } -yy1199: +yy1227: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1201; - if (yych <= '/') goto yy978; - goto yy1202; + if (yych == '-') goto yy1229; + if (yych <= '/') goto yy999; + goto yy1230; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1202; + if (yych <= '@') goto yy999; + goto yy1230; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1202; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1230; + goto yy999; } } -yy1200: +yy1228: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1202; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1230; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1202; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1230; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1202; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1230; + goto yy999; } } -yy1201: +yy1229: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1203; - if (yych <= '/') goto yy978; - goto yy1204; + if (yych == '-') goto yy1231; + if (yych <= '/') goto yy999; + goto yy1232; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1204; + if (yych <= '@') goto yy999; + goto yy1232; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1204; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1232; + goto yy999; } } -yy1202: +yy1230: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1204; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1232; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1204; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1232; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1204; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1232; + goto yy999; } } -yy1203: +yy1231: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1205; - if (yych <= '/') goto yy978; - goto yy1206; + if (yych == '-') goto yy1233; + if (yych <= '/') goto yy999; + goto yy1234; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1206; + if (yych <= '@') goto yy999; + goto yy1234; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1206; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1234; + goto yy999; } } -yy1204: +yy1232: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1206; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1234; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1206; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1234; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1206; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1234; + goto yy999; } } -yy1205: +yy1233: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1207; - if (yych <= '/') goto yy978; - goto yy1208; + if (yych == '-') goto yy1235; + if (yych <= '/') goto yy999; + goto yy1236; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1208; + if (yych <= '@') goto yy999; + goto yy1236; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1208; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1236; + goto yy999; } } -yy1206: +yy1234: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1208; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1236; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1208; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1236; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1208; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1236; + goto yy999; } } -yy1207: +yy1235: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1209; - if (yych <= '/') goto yy978; - goto yy1210; + if (yych == '-') goto yy1237; + if (yych <= '/') goto yy999; + goto yy1238; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1210; + if (yych <= '@') goto yy999; + goto yy1238; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1210; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1238; + goto yy999; } } -yy1208: +yy1236: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1210; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1238; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1210; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1238; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1210; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1238; + goto yy999; } } -yy1209: +yy1237: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1211; - if (yych <= '/') goto yy978; - goto yy1212; + if (yych == '-') goto yy1239; + if (yych <= '/') goto yy999; + goto yy1240; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1212; + if (yych <= '@') goto yy999; + goto yy1240; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1212; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1240; + goto yy999; } } -yy1210: +yy1238: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1212; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1240; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1212; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1240; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1212; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1240; + goto yy999; } } -yy1211: +yy1239: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1213; - if (yych <= '/') goto yy978; - goto yy1214; + if (yych == '-') goto yy1241; + if (yych <= '/') goto yy999; + goto yy1242; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1214; + if (yych <= '@') goto yy999; + goto yy1242; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1214; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1242; + goto yy999; } } -yy1212: +yy1240: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1214; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1242; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1214; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1242; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1214; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1242; + goto yy999; } } -yy1213: +yy1241: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1215; - if (yych <= '/') goto yy978; - goto yy1216; + if (yych == '-') goto yy1243; + if (yych <= '/') goto yy999; + goto yy1244; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1216; + if (yych <= '@') goto yy999; + goto yy1244; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1216; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1244; + goto yy999; } } -yy1214: +yy1242: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1216; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1244; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1216; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1244; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1216; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1244; + goto yy999; } } -yy1215: +yy1243: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1217; - if (yych <= '/') goto yy978; - goto yy1218; + if (yych == '-') goto yy1245; + if (yych <= '/') goto yy999; + goto yy1246; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1218; + if (yych <= '@') goto yy999; + goto yy1246; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1218; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1246; + goto yy999; } } -yy1216: +yy1244: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1218; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1246; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1218; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1246; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1218; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1246; + goto yy999; } } -yy1217: +yy1245: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1219; - if (yych <= '/') goto yy978; - goto yy1220; + if (yych == '-') goto yy1247; + if (yych <= '/') goto yy999; + goto yy1248; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1220; + if (yych <= '@') goto yy999; + goto yy1248; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1220; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1248; + goto yy999; } } -yy1218: +yy1246: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1220; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1248; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1220; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1248; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1220; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1248; + goto yy999; } } -yy1219: +yy1247: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1221; - if (yych <= '/') goto yy978; - goto yy1222; + if (yych == '-') goto yy1249; + if (yych <= '/') goto yy999; + goto yy1250; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1222; + if (yych <= '@') goto yy999; + goto yy1250; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1222; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1250; + goto yy999; } } -yy1220: +yy1248: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1222; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1250; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1222; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1250; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1222; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1250; + goto yy999; } } -yy1221: +yy1249: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1223; - if (yych <= '/') goto yy978; - goto yy1224; + if (yych == '-') goto yy1251; + if (yych <= '/') goto yy999; + goto yy1252; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1224; + if (yych <= '@') goto yy999; + goto yy1252; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1224; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1252; + goto yy999; } } -yy1222: +yy1250: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1224; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1252; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1224; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1252; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1224; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1252; + goto yy999; } } -yy1223: +yy1251: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1225; - if (yych <= '/') goto yy978; - goto yy1226; + if (yych == '-') goto yy1253; + if (yych <= '/') goto yy999; + goto yy1254; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1226; + if (yych <= '@') goto yy999; + goto yy1254; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1226; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1254; + goto yy999; } } -yy1224: +yy1252: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1226; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1254; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1226; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1254; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1226; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1254; + goto yy999; } } -yy1225: +yy1253: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1227; - if (yych <= '/') goto yy978; - goto yy1228; + if (yych == '-') goto yy1255; + if (yych <= '/') goto yy999; + goto yy1256; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1228; + if (yych <= '@') goto yy999; + goto yy1256; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1228; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1256; + goto yy999; } } -yy1226: +yy1254: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1228; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1256; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1228; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1256; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1228; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1256; + goto yy999; } } -yy1227: +yy1255: yych = *++p; if (yych <= '9') { - if (yych == '-') goto yy1229; - if (yych <= '/') goto yy978; - goto yy1230; + if (yych == '-') goto yy1257; + if (yych <= '/') goto yy999; + goto yy1258; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy978; - goto yy1230; + if (yych <= '@') goto yy999; + goto yy1258; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1230; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1258; + goto yy999; } } -yy1228: +yy1256: yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') goto yy978; - if (yych >= '.') goto yy984; + if (yych <= ',') goto yy999; + if (yych >= '.') goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1230; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1258; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1230; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1258; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1230; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1258; + goto yy999; } } -yy1229: +yy1257: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1110; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1138; + goto yy999; } else { - if (yych <= 'Z') goto yy1110; - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1110; - goto yy978; + if (yych <= 'Z') goto yy1138; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1138; + goto yy999; } -yy1230: +yy1258: ++p; if ((yych = *p) <= '=') { if (yych <= '.') { - if (yych <= '-') goto yy978; - goto yy984; + if (yych <= '-') goto yy999; + goto yy1012; } else { - if (yych <= '/') goto yy978; - if (yych <= '9') goto yy1110; - goto yy978; + if (yych <= '/') goto yy999; + if (yych <= '9') goto yy1138; + goto yy999; } } else { if (yych <= 'Z') { - if (yych <= '>') goto yy985; - if (yych <= '@') goto yy978; - goto yy1110; + if (yych <= '>') goto yy1013; + if (yych <= '@') goto yy999; + goto yy1138; } else { - if (yych <= '`') goto yy978; - if (yych <= 'z') goto yy1110; - goto yy978; + if (yych <= '`') goto yy999; + if (yych <= 'z') goto yy1138; + goto yy999; } } } @@ -10828,2413 +11127,3320 @@ bufsize_t _scan_html_tag(const unsigned char *p) 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 32, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 128, - 160, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + /* table 9 .. 11: 256 */ + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 128, + 160, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 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 = *p; - if (yych <= '/') { - if (yych <= ' ') { - if (yych != '\n') goto yy1238; + yych = *(marker = p); + if (yych <= '`') { + if (yych <= '.') { + if (yych <= '\n') { + if (yych <= '\t') goto yy1266; + } else { + if (yych == '!') goto yy1264; + goto yy1266; + } } else { - if (yych <= '!') goto yy1236; - if (yych <= '.') goto yy1238; - goto yy1235; + if (yych <= '?') { + if (yych <= '/') goto yy1263; + if (yych <= '>') goto yy1266; + goto yy1265; + } else { + if (yych <= '@') goto yy1266; + if (yych <= 'Z') goto yy1262; + goto yy1266; + } } } else { - if (yych <= '@') { - if (yych == '?') goto yy1237; - goto yy1238; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 'z') goto yy1262; + if (yych <= 0x7F) goto yy1266; + } else { + if (yych <= 0xDF) goto yy1267; + if (yych <= 0xE0) goto yy1269; + goto yy1270; + } } else { - if (yych <= 'Z') goto yy1234; - if (yych <= '`') goto yy1238; - if (yych <= 'z') goto yy1234; - goto yy1238; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1274; + if (yych <= 0xEF) goto yy1270; + goto yy1271; + } else { + if (yych <= 0xF3) goto yy1272; + if (yych <= 0xF4) goto yy1273; + } } } -yy1233: +yy1261: { return 0; } -yy1234: +yy1262: yych = *(marker = ++p); if (yych <= '9') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1233; - if (yych <= '\r') goto yy1275; - goto yy1233; + if (yych <= 0x08) goto yy1261; + if (yych <= '\r') goto yy1366; + goto yy1261; } else { - if (yych <= ' ') goto yy1275; - if (yych <= '.') goto yy1233; - if (yych <= '/') goto yy1277; - goto yy1273; + if (yych <= ' ') goto yy1366; + if (yych <= '.') goto yy1261; + if (yych <= '/') goto yy1368; + goto yy1364; } } else { if (yych <= '@') { - if (yych == '>') goto yy1243; - goto yy1233; + if (yych == '>') goto yy1285; + goto yy1261; } else { - if (yych <= 'Z') goto yy1273; - if (yych <= '`') goto yy1233; - if (yych <= 'z') goto yy1273; - goto yy1233; + if (yych <= 'Z') goto yy1364; + if (yych <= '`') goto yy1261; + if (yych <= 'z') goto yy1364; + goto yy1261; } } -yy1235: +yy1263: yych = *(marker = ++p); - if (yych <= '@') goto yy1233; - if (yych <= 'Z') goto yy1269; - if (yych <= '`') goto yy1233; - if (yych <= 'z') goto yy1269; - goto yy1233; -yy1236: + if (yych <= '@') goto yy1261; + if (yych <= 'Z') goto yy1360; + if (yych <= '`') goto yy1261; + if (yych <= 'z') goto yy1360; + goto yy1261; +yy1264: yych = *(marker = ++p); if (yybm[256+yych] & 64) { - goto yy1246; + goto yy1295; } - if (yych == '-') goto yy1248; - if (yych == '[') goto yy1245; - goto yy1233; -yy1237: + if (yych == '-') goto yy1297; + if (yych <= '@') goto yy1261; + if (yych <= '[') goto yy1294; + goto yy1261; +yy1265: yych = *(marker = ++p); - if (yych <= 0x00) goto yy1233; - goto yy1240; -yy1238: + if (yych <= 0x00) goto yy1261; + if (yych <= 0x7F) goto yy1276; + if (yych <= 0xC1) goto yy1261; + if (yych <= 0xF4) goto yy1276; + goto yy1261; +yy1266: + yych = *++p; + goto yy1261; +yy1267: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1266; +yy1268: + p = marker; + goto yy1261; +yy1269: yych = *++p; - goto yy1233; -yy1239: + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1267; + goto yy1268; +yy1270: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1267; + goto yy1268; +yy1271: + yych = *++p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1270; + goto yy1268; +yy1272: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1270; + goto yy1268; +yy1273: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1270; + goto yy1268; +yy1274: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1267; + goto yy1268; +yy1275: ++p; yych = *p; -yy1240: +yy1276: if (yybm[256+yych] & 32) { - goto yy1239; + goto yy1275; } - if (yych >= 0x01) goto yy1242; -yy1241: - p = marker; - goto yy1233; -yy1242: + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= '?') goto yy1284; + goto yy1268; + } else { + if (yych <= 0xDF) goto yy1277; + if (yych <= 0xE0) goto yy1278; + goto yy1279; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1283; + if (yych <= 0xEF) goto yy1279; + goto yy1280; + } else { + if (yych <= 0xF3) goto yy1281; + if (yych <= 0xF4) goto yy1282; + goto yy1268; + } + } +yy1277: ++p; yych = *p; - if (yych <= 0x00) goto yy1241; - if (yych != '>') goto yy1239; -yy1243: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1275; + goto yy1268; +yy1278: ++p; - { return (bufsize_t)(p - start); } -yy1245: - yych = *++p; - if (yych == 'C') goto yy1260; - if (yych == 'c') goto yy1260; - goto yy1241; -yy1246: + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1277; + goto yy1268; +yy1279: ++p; yych = *p; - if (yybm[0+yych] & 1) { - goto yy1256; - } - if (yych <= '@') goto yy1241; - if (yych <= 'Z') goto yy1246; - goto yy1241; -yy1248: - yych = *++p; - if (yych != '-') goto yy1241; - yych = *++p; - if (yych == '-') goto yy1250; - if (yych == '>') goto yy1241; - goto yy1252; -yy1250: - yych = *++p; - if (yych == '-') goto yy1255; - if (yych == '>') goto yy1241; - goto yy1252; -yy1251: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1277; + goto yy1268; +yy1280: ++p; yych = *p; -yy1252: - if (yybm[256+yych] & 128) { - goto yy1251; - } - if (yych <= 0x00) goto yy1241; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1279; + goto yy1268; +yy1281: ++p; yych = *p; - if (yybm[256+yych] & 128) { - goto yy1251; - } - if (yych <= 0x00) goto yy1241; - yych = *++p; - if (yych == '>') goto yy1243; - goto yy1241; -yy1255: - yych = *++p; - if (yych == '>') goto yy1243; - goto yy1241; -yy1256: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1279; + goto yy1268; +yy1282: ++p; yych = *p; - if (yybm[0+yych] & 1) { - goto yy1256; - } - if (yych <= 0x00) goto yy1241; - if (yych == '>') goto yy1243; -yy1258: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1279; + goto yy1268; +yy1283: ++p; yych = *p; - if (yybm[0+yych] & 2) { - goto yy1258; - } - if (yych <= 0x00) goto yy1241; - goto yy1243; -yy1260: - yych = *++p; - if (yych == 'D') goto yy1261; - if (yych != 'd') goto yy1241; -yy1261: - yych = *++p; - if (yych == 'A') goto yy1262; - if (yych != 'a') goto yy1241; -yy1262: - yych = *++p; - if (yych == 'T') goto yy1263; - if (yych != 't') goto yy1241; -yy1263: - yych = *++p; - if (yych == 'A') goto yy1264; - if (yych != 'a') goto yy1241; -yy1264: - yych = *++p; - if (yych != '[') goto yy1241; -yy1265: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1277; + goto yy1268; +yy1284: ++p; yych = *p; - if (yybm[0+yych] & 4) { - goto yy1265; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy1268; + if (yych <= '=') goto yy1275; + } else { + if (yych <= 0x7F) goto yy1275; + if (yych <= 0xC1) goto yy1268; + if (yych <= 0xDF) goto yy1287; + goto yy1288; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1293; + goto yy1289; + } else { + if (yych <= 0xF0) goto yy1290; + if (yych <= 0xF3) goto yy1291; + if (yych <= 0xF4) goto yy1292; + goto yy1268; + } } - if (yych <= 0x00) goto yy1241; +yy1285: + ++p; + { return (bufsize_t)(p - start); } +yy1287: ++p; yych = *p; - if (yybm[0+yych] & 4) { - goto yy1265; - } - if (yych <= 0x00) goto yy1241; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1275; + goto yy1268; +yy1288: ++p; yych = *p; - if (yych <= 0x00) goto yy1241; - if (yych == '>') goto yy1243; - goto yy1265; -yy1269: + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1287; + goto yy1268; +yy1289: ++p; yych = *p; - if (yybm[0+yych] & 8) { - goto yy1269; - } - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1241; - if (yych >= 0x0E) goto yy1241; - } else { - if (yych <= ' ') goto yy1271; - if (yych == '>') goto yy1243; - goto yy1241; - } -yy1271: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1287; + goto yy1268; +yy1290: ++p; yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1241; - if (yych <= '\r') goto yy1271; - goto yy1241; - } else { - if (yych <= ' ') goto yy1271; - if (yych == '>') goto yy1243; - goto yy1241; - } -yy1273: + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1289; + goto yy1268; +yy1291: ++p; yych = *p; - if (yych <= '9') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1241; - if (yych >= 0x0E) goto yy1241; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1289; + goto yy1268; +yy1292: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1289; + goto yy1268; +yy1293: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1287; + goto yy1268; +yy1294: + yych = *++p; + if (yych == 'C') goto yy1330; + if (yych == 'c') goto yy1330; + goto yy1268; +yy1295: + ++p; + yych = *p; + if (yybm[0+yych] & 1) { + goto yy1319; + } + if (yych <= '@') goto yy1268; + if (yych <= 'Z') goto yy1295; + goto yy1268; +yy1297: + yych = *++p; + if (yych != '-') goto yy1268; + yych = *++p; + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych != '-') goto yy1301; } else { - if (yych <= ' ') goto yy1275; - if (yych <= '.') goto yy1241; - if (yych <= '/') goto yy1277; - goto yy1273; + if (yych <= '>') goto yy1268; + if (yych <= 0xC1) goto yy1301; + if (yych <= 0xDF) goto yy1302; + goto yy1303; } } else { - if (yych <= '@') { - if (yych == '>') goto yy1243; - goto yy1241; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1308; + goto yy1304; } else { - if (yych <= 'Z') goto yy1273; - if (yych <= '`') goto yy1241; - if (yych <= 'z') goto yy1273; - goto yy1241; + if (yych <= 0xF0) goto yy1305; + if (yych <= 0xF3) goto yy1306; + if (yych <= 0xF4) goto yy1307; + goto yy1301; } } -yy1275: - ++p; - yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1241; - if (yych <= '\r') goto yy1275; - if (yych <= 0x1F) goto yy1241; - goto yy1275; + yych = *++p; + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych == '-') goto yy1318; + goto yy1301; } else { - if (yych == '/') goto yy1277; - if (yych <= '9') goto yy1241; - goto yy1278; + if (yych <= '>') goto yy1268; + if (yych <= 0xC1) goto yy1301; + if (yych <= 0xDF) goto yy1302; + goto yy1303; } } else { - if (yych <= 'Z') { - if (yych == '>') goto yy1243; - if (yych <= '@') goto yy1241; - goto yy1278; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1308; + goto yy1304; } else { - if (yych <= '_') { - if (yych <= '^') goto yy1241; - goto yy1278; - } else { - if (yych <= '`') goto yy1241; - if (yych <= 'z') goto yy1278; - goto yy1241; - } + if (yych <= 0xF0) goto yy1305; + if (yych <= 0xF3) goto yy1306; + if (yych <= 0xF4) goto yy1307; + goto yy1301; } } -yy1277: - yych = *++p; - if (yych == '>') goto yy1243; - goto yy1241; -yy1278: +yy1300: ++p; yych = *p; - if (yybm[0+yych] & 16) { - goto yy1278; +yy1301: + if (yybm[256+yych] & 128) { + goto yy1300; } - if (yych <= '.') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy1241; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= '-') goto yy1309; + goto yy1268; } else { - if (yych != ' ') goto yy1241; + if (yych <= 0xDF) goto yy1310; + if (yych <= 0xE0) goto yy1311; + goto yy1312; } } else { - if (yych <= '<') { - if (yych <= '/') goto yy1277; - goto yy1241; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1316; + if (yych <= 0xEF) goto yy1312; + goto yy1313; } else { - if (yych <= '=') goto yy1282; - if (yych <= '>') goto yy1243; - goto yy1241; + if (yych <= 0xF3) goto yy1314; + if (yych <= 0xF4) goto yy1315; + goto yy1268; } } -yy1280: +yy1302: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1300; + goto yy1268; +yy1303: + yych = *++p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1302; + goto yy1268; +yy1304: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1302; + goto yy1268; +yy1305: + yych = *++p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1304; + goto yy1268; +yy1306: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1304; + goto yy1268; +yy1307: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1304; + goto yy1268; +yy1308: + yych = *++p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1302; + goto yy1268; +yy1309: ++p; yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1241; - if (yych <= '\r') goto yy1280; - if (yych <= 0x1F) goto yy1241; - goto yy1280; + if (yybm[256+yych] & 128) { + goto yy1300; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= '-') goto yy1317; + goto yy1268; } else { - if (yych <= '/') { - if (yych <= '.') goto yy1241; - goto yy1277; - } else { - if (yych == ':') goto yy1278; - goto yy1241; - } + if (yych <= 0xDF) goto yy1310; + if (yych <= 0xE0) goto yy1311; + goto yy1312; } } else { - if (yych <= 'Z') { - if (yych <= '=') goto yy1282; - if (yych <= '>') goto yy1243; - if (yych <= '@') goto yy1241; - goto yy1278; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1316; + if (yych <= 0xEF) goto yy1312; + goto yy1313; } else { - if (yych <= '_') { - if (yych <= '^') goto yy1241; - goto yy1278; - } else { - if (yych <= '`') goto yy1241; - if (yych <= 'z') goto yy1278; - goto yy1241; - } + if (yych <= 0xF3) goto yy1314; + if (yych <= 0xF4) goto yy1315; + goto yy1268; } } -yy1282: +yy1310: ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy1284; - } - if (yych <= 0x00) goto yy1241; - if (yych <= '!') goto yy1283; - if (yych <= '"') goto yy1288; - if (yych <= ';') goto yy1286; - goto yy1241; -yy1283: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1300; + goto yy1268; +yy1311: ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy1284; - } - if (yych <= '"') { - if (yych <= 0x00) goto yy1241; - if (yych <= '!') goto yy1297; - goto yy1288; - } else { - if (yych <= ';') goto yy1286; - if (yych == '>') goto yy1243; - goto yy1241; - } -yy1284: + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1310; + goto yy1268; +yy1312: ++p; yych = *p; - if (yybm[0+yych] & 32) { - goto yy1284; - } - if (yych <= 0x00) goto yy1241; - if (yych <= '!') goto yy1291; - if (yych == '>') goto yy1243; - goto yy1241; -yy1286: + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1310; + goto yy1268; +yy1313: ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy1286; - } - if (yych <= 0x00) goto yy1241; - goto yy1290; -yy1288: + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1312; + goto yy1268; +yy1314: ++p; yych = *p; - if (yybm[0+yych] & 128) { - goto yy1288; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1312; + goto yy1268; +yy1315: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1312; + goto yy1268; +yy1316: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1310; + goto yy1268; +yy1317: + yych = *++p; + if (yych == '>') goto yy1285; + goto yy1268; +yy1318: + yych = *++p; + if (yych == '>') goto yy1285; + goto yy1268; +yy1319: + ++p; + yych = *p; + if (yybm[0+yych] & 1) { + goto yy1319; } - if (yych <= 0x00) goto yy1241; -yy1290: + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy1268; + if (yych >= '>') goto yy1285; + } else { + if (yych <= 0x7F) goto yy1321; + if (yych <= 0xC1) goto yy1268; + if (yych <= 0xDF) goto yy1323; + goto yy1324; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1329; + goto yy1325; + } else { + if (yych <= 0xF0) goto yy1326; + if (yych <= 0xF3) goto yy1327; + if (yych <= 0xF4) goto yy1328; + goto yy1268; + } + } +yy1321: ++p; yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy1241; - if (yych <= '\r') goto yy1275; - if (yych <= 0x1F) goto yy1241; - goto yy1275; + if (yybm[0+yych] & 2) { + goto yy1321; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= '>') goto yy1285; + goto yy1268; + } else { + if (yych <= 0xDF) goto yy1323; + if (yych <= 0xE0) goto yy1324; + goto yy1325; + } } else { - if (yych <= '/') { - if (yych <= '.') goto yy1241; - goto yy1277; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1329; + if (yych <= 0xEF) goto yy1325; + goto yy1326; } else { - if (yych == '>') goto yy1243; - goto yy1241; + if (yych <= 0xF3) goto yy1327; + if (yych <= 0xF4) goto yy1328; + goto yy1268; } } -yy1291: +yy1323: ++p; yych = *p; - if (yych <= '9') { - if (yych <= ' ') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy1241; - goto yy1284; - } else { - if (yych <= '\r') goto yy1291; - if (yych <= 0x1F) goto yy1284; - goto yy1291; - } + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1321; + goto yy1268; +yy1324: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1323; + goto yy1268; +yy1325: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1323; + goto yy1268; +yy1326: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1325; + goto yy1268; +yy1327: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1325; + goto yy1268; +yy1328: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1325; + goto yy1268; +yy1329: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1323; + goto yy1268; +yy1330: + yych = *++p; + if (yych == 'D') goto yy1331; + if (yych != 'd') goto yy1268; +yy1331: + yych = *++p; + if (yych == 'A') goto yy1332; + if (yych != 'a') goto yy1268; +yy1332: + yych = *++p; + if (yych == 'T') goto yy1333; + if (yych != 't') goto yy1268; +yy1333: + yych = *++p; + if (yych == 'A') goto yy1334; + if (yych != 'a') goto yy1268; +yy1334: + yych = *++p; + if (yych != '[') goto yy1268; +yy1335: + ++p; + yych = *p; + if (yybm[0+yych] & 4) { + goto yy1335; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= ']') goto yy1344; + goto yy1268; } else { - if (yych <= '"') { - if (yych <= '!') goto yy1284; - goto yy1241; - } else { - if (yych == '\'') goto yy1241; - goto yy1284; - } + if (yych <= 0xDF) goto yy1337; + if (yych <= 0xE0) goto yy1338; + goto yy1339; } } else { - if (yych <= '@') { - if (yych <= ';') { - if (yych >= ';') goto yy1284; - } else { - if (yych <= '=') goto yy1241; - if (yych <= '>') goto yy1243; - goto yy1284; - } + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1343; + if (yych <= 0xEF) goto yy1339; + goto yy1340; } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy1293; - if (yych <= '^') goto yy1284; - } else { - if (yych <= '`') goto yy1241; - if (yych >= '{') goto yy1284; - } + if (yych <= 0xF3) goto yy1341; + if (yych <= 0xF4) goto yy1342; + goto yy1268; } } -yy1293: +yy1337: ++p; yych = *p; - if (yych <= '/') { - if (yych <= '!') { - if (yych <= '\r') { - if (yych <= 0x00) goto yy1241; - if (yych <= 0x08) goto yy1284; - } else { - if (yych != ' ') goto yy1284; - } + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1335; + goto yy1268; +yy1338: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1337; + goto yy1268; +yy1339: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1337; + goto yy1268; +yy1340: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1339; + goto yy1268; +yy1341: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1339; + goto yy1268; +yy1342: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1339; + goto yy1268; +yy1343: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1337; + goto yy1268; +yy1344: + ++p; + yych = *p; + if (yybm[0+yych] & 4) { + goto yy1335; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych >= '^') goto yy1268; } else { - if (yych <= '\'') { - if (yych <= '"') goto yy1241; - if (yych <= '&') goto yy1284; - goto yy1241; - } else { - if (yych <= ',') goto yy1284; - if (yych <= '.') goto yy1293; - goto yy1284; - } + if (yych <= 0xDF) goto yy1346; + if (yych <= 0xE0) goto yy1347; + goto yy1348; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1352; + if (yych <= 0xEF) goto yy1348; + goto yy1349; + } else { + if (yych <= 0xF3) goto yy1350; + if (yych <= 0xF4) goto yy1351; + goto yy1268; + } + } + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy1268; + if (yych <= '=') goto yy1335; + goto yy1285; + } else { + if (yych <= 0x7F) goto yy1335; + if (yych <= 0xC1) goto yy1268; + if (yych <= 0xDF) goto yy1353; + goto yy1354; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1359; + goto yy1355; + } else { + if (yych <= 0xF0) goto yy1356; + if (yych <= 0xF3) goto yy1357; + if (yych <= 0xF4) goto yy1358; + goto yy1268; + } + } +yy1346: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1335; + goto yy1268; +yy1347: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1346; + goto yy1268; +yy1348: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1346; + goto yy1268; +yy1349: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1348; + goto yy1268; +yy1350: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1348; + goto yy1268; +yy1351: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1348; + goto yy1268; +yy1352: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1346; + goto yy1268; +yy1353: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1335; + goto yy1268; +yy1354: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1353; + goto yy1268; +yy1355: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1353; + goto yy1268; +yy1356: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1355; + goto yy1268; +yy1357: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1355; + goto yy1268; +yy1358: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1355; + goto yy1268; +yy1359: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1353; + goto yy1268; +yy1360: + ++p; + yych = *p; + if (yybm[0+yych] & 8) { + goto yy1360; + } + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1268; + if (yych >= 0x0E) goto yy1268; + } else { + if (yych <= ' ') goto yy1362; + if (yych == '>') goto yy1285; + goto yy1268; + } +yy1362: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1268; + if (yych <= '\r') goto yy1362; + goto yy1268; + } else { + if (yych <= ' ') goto yy1362; + if (yych == '>') goto yy1285; + goto yy1268; + } +yy1364: + ++p; + yych = *p; + if (yych <= '9') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1268; + if (yych >= 0x0E) goto yy1268; + } else { + if (yych <= ' ') goto yy1366; + if (yych <= '.') goto yy1268; + if (yych <= '/') goto yy1368; + goto yy1364; } } else { if (yych <= '@') { - if (yych <= '<') { - if (yych <= ':') goto yy1293; - if (yych <= ';') goto yy1284; - goto yy1241; - } else { - if (yych <= '=') goto yy1282; - if (yych <= '>') goto yy1243; - goto yy1284; - } + if (yych == '>') goto yy1285; + goto yy1268; } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy1293; - if (yych <= '^') goto yy1284; - goto yy1293; - } else { - if (yych <= '`') goto yy1241; - if (yych <= 'z') goto yy1293; - goto yy1284; - } + if (yych <= 'Z') goto yy1364; + if (yych <= '`') goto yy1268; + if (yych <= 'z') goto yy1364; + goto yy1268; } } -yy1295: +yy1366: ++p; yych = *p; if (yych <= ':') { if (yych <= ' ') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy1241; - goto yy1284; - } else { - if (yych <= '\r') goto yy1295; - if (yych <= 0x1F) goto yy1284; - goto yy1295; - } + if (yych <= 0x08) goto yy1268; + if (yych <= '\r') goto yy1366; + if (yych <= 0x1F) goto yy1268; + goto yy1366; } else { - if (yych <= '&') { - if (yych == '"') goto yy1241; - goto yy1284; - } else { - if (yych <= '\'') goto yy1241; - if (yych <= '9') goto yy1284; - goto yy1293; - } + if (yych == '/') goto yy1368; + if (yych <= '9') goto yy1268; + goto yy1369; } } else { - if (yych <= '@') { - if (yych <= '<') { - if (yych <= ';') goto yy1284; - goto yy1241; - } else { - if (yych <= '=') goto yy1282; - if (yych <= '>') goto yy1243; - goto yy1284; - } + if (yych <= 'Z') { + if (yych == '>') goto yy1285; + if (yych <= '@') goto yy1268; + goto yy1369; } else { if (yych <= '_') { - if (yych <= 'Z') goto yy1293; - if (yych <= '^') goto yy1284; - goto yy1293; + if (yych <= '^') goto yy1268; + goto yy1369; } else { - if (yych <= '`') goto yy1241; - if (yych <= 'z') goto yy1293; - goto yy1284; + if (yych <= '`') goto yy1268; + if (yych <= 'z') goto yy1369; + goto yy1268; } } } -yy1297: +yy1368: + yych = *++p; + if (yych == '>') goto yy1285; + goto yy1268; +yy1369: ++p; yych = *p; - if (yych <= '9') { + if (yybm[0+yych] & 16) { + goto yy1369; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1268; + } else { + if (yych != ' ') goto yy1268; + } + } else { + if (yych <= '<') { + if (yych <= '/') goto yy1368; + goto yy1268; + } else { + if (yych <= '=') goto yy1373; + if (yych <= '>') goto yy1285; + goto yy1268; + } + } +yy1371: + ++p; + yych = *p; + if (yych <= '<') { if (yych <= ' ') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy1241; - goto yy1284; - } else { - if (yych <= '\r') goto yy1297; - if (yych <= 0x1F) goto yy1284; - goto yy1297; - } + if (yych <= 0x08) goto yy1268; + if (yych <= '\r') goto yy1371; + if (yych <= 0x1F) goto yy1268; + goto yy1371; } else { - if (yych <= '"') { - if (yych <= '!') goto yy1284; - goto yy1288; + if (yych <= '/') { + if (yych <= '.') goto yy1268; + goto yy1368; } else { - if (yych == '\'') goto yy1286; - goto yy1284; + if (yych == ':') goto yy1369; + goto yy1268; } } } else { - if (yych <= '@') { - if (yych <= ';') { - if (yych <= ':') goto yy1293; - goto yy1284; - } else { - if (yych <= '=') goto yy1241; - if (yych <= '>') goto yy1243; - goto yy1284; - } + if (yych <= 'Z') { + if (yych <= '=') goto yy1373; + if (yych <= '>') goto yy1285; + if (yych <= '@') goto yy1268; + goto yy1369; } else { if (yych <= '_') { - if (yych <= 'Z') goto yy1293; - if (yych <= '^') goto yy1284; - goto yy1293; + if (yych <= '^') goto yy1268; + goto yy1369; } else { - if (yych <= '`') goto yy1241; - if (yych <= 'z') goto yy1293; - goto yy1284; + if (yych <= '`') goto yy1268; + if (yych <= 'z') goto yy1369; + goto yy1268; } } } -} - -} - -// Try to match an HTML block tag including first <, -// returning num of chars matched. -bufsize_t _scan_html_block_tag(const unsigned char *p) -{ - const unsigned char *marker = NULL; - const unsigned char *start = p; - -{ - unsigned char yych; +yy1373: + ++p; yych = *p; - if (yych == '\n') goto yy1301; - if (yych == '<') goto yy1302; - goto yy1303; -yy1301: - { return 0; } -yy1302: - yych = *(marker = ++p); - switch (yych) { - case '!': - case '?': goto yy1304; - case '/': goto yy1323; - case 'A': - case 'a': goto yy1308; - case 'B': - case 'b': goto yy1311; - case 'C': - case 'c': goto yy1315; - case 'D': - case 'd': goto yy1316; - case 'E': - case 'e': goto yy1319; - case 'F': - case 'f': goto yy1320; - case 'H': - case 'h': goto yy1309; - case 'I': - case 'i': goto yy1310; - case 'L': - case 'l': goto yy1312; - case 'M': - case 'm': goto yy1313; - case 'O': - case 'o': goto yy1314; - case 'P': - case 'p': goto yy1306; - case 'S': - case 's': goto yy1317; - case 'T': - case 't': goto yy1318; - case 'U': - case 'u': goto yy1321; - case 'V': - case 'v': goto yy1322; - default: goto yy1301; + if (yybm[0+yych] & 32) { + goto yy1375; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) goto yy1268; + if (yych >= '!') goto yy1386; + } else { + if (yych <= '\'') goto yy1384; + if (yych <= 0xC1) goto yy1268; + if (yych <= 0xDF) goto yy1377; + goto yy1378; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) goto yy1380; + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; + } } -yy1303: - yych = *++p; - goto yy1301; -yy1304: ++p; - { return (bufsize_t)(p - start); } -yy1306: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1307; - if (yych <= '\r') goto yy1467; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1375; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) goto yy1268; + if (yych <= ' ') goto yy1409; + if (yych <= '"') goto yy1386; + goto yy1384; } else { - if (yych <= ' ') goto yy1467; - if (yych >= '/') goto yy1467; + if (yych == '>') goto yy1285; + if (yych <= 0xC1) goto yy1268; + goto yy1377; } } else { - if (yych <= 'Q') { - if (yych == '>') goto yy1467; + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1378; + if (yych == 0xED) goto yy1383; + goto yy1379; } else { - if (yych <= 'R') goto yy1580; - if (yych == 'r') goto yy1580; + if (yych <= 0xF0) goto yy1380; + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; } } -yy1307: - p = marker; - goto yy1301; -yy1308: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'Q') goto yy1307; - if (yych <= 'R') goto yy1573; - goto yy1572; +yy1375: + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1375; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) goto yy1268; + if (yych <= ' ') goto yy1403; + goto yy1268; + } else { + if (yych <= '>') goto yy1285; + if (yych <= 0xC1) goto yy1268; + if (yych >= 0xE0) goto yy1378; + } } else { - if (yych <= 'q') goto yy1307; - if (yych <= 'r') goto yy1573; - if (yych <= 's') goto yy1572; - goto yy1307; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) goto yy1380; + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; + } } -yy1309: - yych = *++p; - if (yych <= 'Q') { - if (yych <= 'D') { - if (yych <= '0') goto yy1307; - if (yych <= '6') goto yy1466; - goto yy1307; +yy1377: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1375; + goto yy1268; +yy1378: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1377; + goto yy1268; +yy1379: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1377; + goto yy1268; +yy1380: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1379; + goto yy1268; +yy1381: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1379; + goto yy1268; +yy1382: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1379; + goto yy1268; +yy1383: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1377; + goto yy1268; +yy1384: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1384; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= '\'') goto yy1395; + goto yy1268; } else { - if (yych <= 'E') goto yy1565; - if (yych == 'G') goto yy1564; - goto yy1307; + if (yych <= 0xDF) goto yy1396; + if (yych <= 0xE0) goto yy1397; + goto yy1398; } } else { - if (yych <= 'f') { - if (yych <= 'R') goto yy1466; - if (yych == 'e') goto yy1565; - goto yy1307; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1402; + if (yych <= 0xEF) goto yy1398; + goto yy1399; } else { - if (yych <= 'g') goto yy1564; - if (yych == 'r') goto yy1466; - goto yy1307; + if (yych <= 0xF3) goto yy1400; + if (yych <= 0xF4) goto yy1401; + goto yy1268; } } -yy1310: - yych = *++p; - if (yych == 'F') goto yy1560; - if (yych == 'f') goto yy1560; - goto yy1307; -yy1311: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'L') goto yy1548; - goto yy1307; +yy1386: + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1386; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1268; + if (yych <= '"') goto yy1395; + goto yy1268; } else { - if (yych <= 'O') goto yy1547; - if (yych <= 'T') goto yy1307; - goto yy1546; + if (yych <= 0xDF) goto yy1388; + if (yych <= 0xE0) goto yy1389; + goto yy1390; } } else { - if (yych <= 'n') { - if (yych == 'l') goto yy1548; - goto yy1307; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1394; + if (yych <= 0xEF) goto yy1390; + goto yy1391; } else { - if (yych <= 'o') goto yy1547; - if (yych == 'u') goto yy1546; - goto yy1307; + if (yych <= 0xF3) goto yy1392; + if (yych <= 0xF4) goto yy1393; + goto yy1268; } } -yy1312: - yych = *++p; - if (yych == 'I') goto yy1466; - if (yych == 'i') goto yy1466; - goto yy1307; -yy1313: - yych = *++p; - if (yych == 'A') goto yy1545; - if (yych == 'a') goto yy1545; - goto yy1307; -yy1314: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'K') { - if (yych == 'B') goto yy1538; - goto yy1307; +yy1388: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1386; + goto yy1268; +yy1389: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1388; + goto yy1268; +yy1390: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1388; + goto yy1268; +yy1391: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1390; + goto yy1268; +yy1392: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1390; + goto yy1268; +yy1393: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1390; + goto yy1268; +yy1394: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1388; + goto yy1268; +yy1395: + ++p; + yych = *p; + if (yych <= ' ') { + if (yych <= 0x08) goto yy1268; + if (yych <= '\r') goto yy1366; + if (yych <= 0x1F) goto yy1268; + goto yy1366; + } else { + if (yych <= '/') { + if (yych <= '.') goto yy1268; + goto yy1368; + } else { + if (yych == '>') goto yy1285; + goto yy1268; + } + } +yy1396: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1384; + goto yy1268; +yy1397: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1268; + if (yych <= 0xBF) goto yy1396; + goto yy1268; +yy1398: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1396; + goto yy1268; +yy1399: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1268; + if (yych <= 0xBF) goto yy1398; + goto yy1268; +yy1400: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0xBF) goto yy1398; + goto yy1268; +yy1401: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x8F) goto yy1398; + goto yy1268; +yy1402: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1268; + if (yych <= 0x9F) goto yy1396; + goto yy1268; +yy1403: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) goto yy1268; + if (yych <= 0x08) goto yy1375; + goto yy1403; + } else { + if (yych == ' ') goto yy1403; + if (yych <= '!') goto yy1375; + goto yy1268; + } } else { - if (yych <= 'L') goto yy1466; - if (yych <= 'T') goto yy1307; - goto yy1537; + if (yych <= ':') { + if (yych == '\'') goto yy1268; + if (yych <= '9') goto yy1375; + } else { + if (yych <= ';') goto yy1375; + if (yych <= '=') goto yy1268; + if (yych <= '>') goto yy1285; + goto yy1375; + } } } else { - if (yych <= 'k') { - if (yych == 'b') goto yy1538; - goto yy1307; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') goto yy1405; + if (yych <= '^') goto yy1375; + if (yych >= '`') goto yy1268; + } else { + if (yych <= 'z') goto yy1405; + if (yych <= 0x7F) goto yy1375; + if (yych <= 0xC1) goto yy1268; + goto yy1377; + } } else { - if (yych <= 'l') goto yy1466; - if (yych == 'u') goto yy1537; - goto yy1307; + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1378; + if (yych == 0xED) goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) goto yy1380; + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; + } } } -yy1315: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy1524; - if (yych <= 'N') goto yy1307; - goto yy1523; +yy1405: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) goto yy1268; + if (yych <= 0x08) goto yy1375; + if (yych >= 0x0E) goto yy1375; + } else { + if (yych <= ' ') goto yy1407; + if (yych == '"') goto yy1268; + goto yy1375; + } + } else { + if (yych <= '/') { + if (yych <= '\'') goto yy1268; + if (yych <= ',') goto yy1375; + if (yych <= '.') goto yy1405; + goto yy1375; + } else { + if (yych <= ';') { + if (yych <= ':') goto yy1405; + goto yy1375; + } else { + if (yych <= '<') goto yy1268; + if (yych <= '=') goto yy1373; + goto yy1285; + } + } + } } else { - if (yych <= 'a') { - if (yych <= '`') goto yy1307; - goto yy1524; + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') goto yy1375; + if (yych <= 'Z') goto yy1405; + if (yych <= '^') goto yy1375; + goto yy1405; + } else { + if (yych <= '`') goto yy1268; + if (yych <= 'z') goto yy1405; + if (yych <= 0x7F) goto yy1375; + goto yy1268; + } } else { - if (yych == 'o') goto yy1523; - goto yy1307; + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1377; + if (yych <= 0xE0) goto yy1378; + if (yych <= 0xEC) goto yy1379; + goto yy1383; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1379; + goto yy1380; + } else { + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; + } + } } } -yy1316: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'I') { - if (yych == 'D') goto yy1466; - if (yych <= 'H') goto yy1307; - goto yy1522; +yy1407: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) goto yy1268; + if (yych <= 0x08) goto yy1375; + if (yych <= '\r') goto yy1407; + goto yy1375; + } else { + if (yych <= ' ') goto yy1407; + if (yych == '"') goto yy1268; + goto yy1375; + } } else { - if (yych == 'L') goto yy1466; - if (yych <= 'S') goto yy1307; - goto yy1466; + if (yych <= ';') { + if (yych <= '\'') goto yy1268; + if (yych == ':') goto yy1405; + goto yy1375; + } else { + if (yych <= '<') goto yy1268; + if (yych <= '=') goto yy1373; + if (yych <= '>') goto yy1285; + goto yy1375; + } } } else { - if (yych <= 'i') { - if (yych == 'd') goto yy1466; - if (yych <= 'h') goto yy1307; - goto yy1522; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') goto yy1405; + if (yych <= '^') goto yy1375; + if (yych <= '_') goto yy1405; + goto yy1268; + } else { + if (yych <= 'z') goto yy1405; + if (yych <= 0x7F) goto yy1375; + if (yych <= 0xC1) goto yy1268; + goto yy1377; + } } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy1307; - goto yy1466; + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1378; + if (yych == 0xED) goto yy1383; + goto yy1379; } else { - if (yych == 't') goto yy1466; - goto yy1307; + if (yych <= 0xF0) goto yy1380; + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; } } } -yy1317: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'D') { - if (yych == 'C') goto yy1511; - goto yy1307; +yy1409: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) goto yy1268; + if (yych <= 0x08) goto yy1375; + goto yy1409; + } else { + if (yych == ' ') goto yy1409; + if (yych <= '!') goto yy1375; + goto yy1386; + } } else { - if (yych <= 'E') goto yy1512; - if (yych <= 'S') goto yy1307; - goto yy1510; + if (yych <= ':') { + if (yych == '\'') goto yy1384; + if (yych <= '9') goto yy1375; + goto yy1405; + } else { + if (yych <= ';') goto yy1375; + if (yych <= '=') goto yy1268; + if (yych <= '>') goto yy1285; + goto yy1375; + } } } else { - if (yych <= 'd') { - if (yych == 'c') goto yy1511; - goto yy1307; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') goto yy1405; + if (yych <= '^') goto yy1375; + if (yych <= '_') goto yy1405; + goto yy1268; + } else { + if (yych <= 'z') goto yy1405; + if (yych <= 0x7F) goto yy1375; + if (yych <= 0xC1) goto yy1268; + goto yy1377; + } } else { - if (yych <= 'e') goto yy1512; - if (yych == 't') goto yy1510; - goto yy1307; + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1378; + if (yych == 0xED) goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) goto yy1380; + if (yych <= 0xF3) goto yy1381; + if (yych <= 0xF4) goto yy1382; + goto yy1268; + } } } -yy1318: - yych = *++p; +} + +} + +// Try to match an HTML block tag including first <, +// returning num of chars matched. +bufsize_t _scan_html_block_tag(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= ';') { + if (yych != '\n') goto yy1415; + } else { + if (yych <= '<') goto yy1414; + if (yych <= 0x7F) goto yy1415; + if (yych >= 0xC2) goto yy1416; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1418; + if (yych == 0xED) goto yy1423; + goto yy1419; + } else { + if (yych <= 0xF0) goto yy1420; + if (yych <= 0xF3) goto yy1421; + if (yych <= 0xF4) goto yy1422; + } + } +yy1413: + { return 0; } +yy1414: + yych = *(marker = ++p); switch (yych) { + case '!': + case '?': goto yy1424; + case '/': goto yy1442; case 'A': - case 'a': goto yy1496; + case 'a': goto yy1427; case 'B': - case 'b': goto yy1495; + case 'b': goto yy1430; + case 'C': + case 'c': goto yy1434; case 'D': - case 'R': - case 'd': - case 'r': goto yy1466; + case 'd': goto yy1435; case 'E': - case 'e': goto yy1494; + case 'e': goto yy1438; case 'F': - case 'f': goto yy1493; + case 'f': goto yy1439; case 'H': - case 'h': goto yy1492; - default: goto yy1307; - } -yy1319: - yych = *++p; - if (yych == 'M') goto yy1489; - if (yych == 'm') goto yy1489; - goto yy1307; -yy1320: - yych = *++p; - if (yych <= 'O') { - if (yych == 'I') goto yy1470; - if (yych <= 'N') goto yy1307; - goto yy1469; + case 'h': goto yy1428; + case 'I': + case 'i': goto yy1429; + case 'L': + case 'l': goto yy1431; + case 'M': + case 'm': goto yy1432; + case 'O': + case 'o': goto yy1433; + case 'P': + case 'p': goto yy1426; + case 'S': + case 's': goto yy1436; + case 'T': + case 't': goto yy1437; + case 'U': + case 'u': goto yy1440; + case 'V': + case 'v': goto yy1441; + default: goto yy1413; + } +yy1415: + yych = *++p; + goto yy1413; +yy1416: + yych = *++p; + if (yych <= 0x7F) goto yy1417; + if (yych <= 0xBF) goto yy1415; +yy1417: + p = marker; + goto yy1413; +yy1418: + yych = *++p; + if (yych <= 0x9F) goto yy1417; + if (yych <= 0xBF) goto yy1416; + goto yy1417; +yy1419: + yych = *++p; + if (yych <= 0x7F) goto yy1417; + if (yych <= 0xBF) goto yy1416; + goto yy1417; +yy1420: + yych = *++p; + if (yych <= 0x8F) goto yy1417; + if (yych <= 0xBF) goto yy1419; + goto yy1417; +yy1421: + yych = *++p; + if (yych <= 0x7F) goto yy1417; + if (yych <= 0xBF) goto yy1419; + goto yy1417; +yy1422: + yych = *++p; + if (yych <= 0x7F) goto yy1417; + if (yych <= 0x8F) goto yy1419; + goto yy1417; +yy1423: + yych = *++p; + if (yych <= 0x7F) goto yy1417; + if (yych <= 0x9F) goto yy1416; + goto yy1417; +yy1424: + ++p; + { return (bufsize_t)(p - start); } +yy1426: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1586; + goto yy1417; + } else { + if (yych <= ' ') goto yy1586; + if (yych <= '.') goto yy1417; + goto yy1586; + } + } else { + if (yych <= 'Q') { + if (yych == '>') goto yy1586; + goto yy1417; + } else { + if (yych <= 'R') goto yy1699; + if (yych == 'r') goto yy1699; + goto yy1417; + } + } +yy1427: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'Q') goto yy1417; + if (yych <= 'R') goto yy1692; + goto yy1691; + } else { + if (yych <= 'q') goto yy1417; + if (yych <= 'r') goto yy1692; + if (yych <= 's') goto yy1691; + goto yy1417; + } +yy1428: + yych = *++p; + if (yych <= 'Q') { + if (yych <= 'D') { + if (yych <= '0') goto yy1417; + if (yych <= '6') goto yy1585; + goto yy1417; + } else { + if (yych <= 'E') goto yy1684; + if (yych == 'G') goto yy1683; + goto yy1417; + } + } else { + if (yych <= 'f') { + if (yych <= 'R') goto yy1585; + if (yych == 'e') goto yy1684; + goto yy1417; + } else { + if (yych <= 'g') goto yy1683; + if (yych == 'r') goto yy1585; + goto yy1417; + } + } +yy1429: + yych = *++p; + if (yych == 'F') goto yy1679; + if (yych == 'f') goto yy1679; + goto yy1417; +yy1430: + yych = *++p; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'L') goto yy1667; + goto yy1417; + } else { + if (yych <= 'O') goto yy1666; + if (yych <= 'T') goto yy1417; + goto yy1665; + } + } else { + if (yych <= 'n') { + if (yych == 'l') goto yy1667; + goto yy1417; + } else { + if (yych <= 'o') goto yy1666; + if (yych == 'u') goto yy1665; + goto yy1417; + } + } +yy1431: + yych = *++p; + if (yych == 'I') goto yy1585; + if (yych == 'i') goto yy1585; + goto yy1417; +yy1432: + yych = *++p; + if (yych == 'A') goto yy1664; + if (yych == 'a') goto yy1664; + goto yy1417; +yy1433: + yych = *++p; + if (yych <= 'U') { + if (yych <= 'K') { + if (yych == 'B') goto yy1657; + goto yy1417; + } else { + if (yych <= 'L') goto yy1585; + if (yych <= 'T') goto yy1417; + goto yy1656; + } + } else { + if (yych <= 'k') { + if (yych == 'b') goto yy1657; + goto yy1417; + } else { + if (yych <= 'l') goto yy1585; + if (yych == 'u') goto yy1656; + goto yy1417; + } + } +yy1434: + yych = *++p; + if (yych <= 'O') { + if (yych == 'A') goto yy1643; + if (yych <= 'N') goto yy1417; + goto yy1642; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy1417; + goto yy1643; + } else { + if (yych == 'o') goto yy1642; + goto yy1417; + } + } +yy1435: + yych = *++p; + if (yych <= 'T') { + if (yych <= 'I') { + if (yych == 'D') goto yy1585; + if (yych <= 'H') goto yy1417; + goto yy1641; + } else { + if (yych == 'L') goto yy1585; + if (yych <= 'S') goto yy1417; + goto yy1585; + } } else { if (yych <= 'i') { - if (yych <= 'h') goto yy1307; - goto yy1470; + if (yych == 'd') goto yy1585; + if (yych <= 'h') goto yy1417; + goto yy1641; } else { - if (yych == 'o') goto yy1469; - goto yy1307; + if (yych <= 'l') { + if (yych <= 'k') goto yy1417; + goto yy1585; + } else { + if (yych == 't') goto yy1585; + goto yy1417; + } } } -yy1321: +yy1436: yych = *++p; - if (yych == 'L') goto yy1466; - if (yych == 'l') goto yy1466; - goto yy1307; -yy1322: + if (yych <= 'T') { + if (yych <= 'D') { + if (yych == 'C') goto yy1630; + goto yy1417; + } else { + if (yych <= 'E') goto yy1631; + if (yych <= 'S') goto yy1417; + goto yy1629; + } + } else { + if (yych <= 'd') { + if (yych == 'c') goto yy1630; + goto yy1417; + } else { + if (yych <= 'e') goto yy1631; + if (yych == 't') goto yy1629; + goto yy1417; + } + } +yy1437: yych = *++p; - if (yych == 'I') goto yy1463; - if (yych == 'i') goto yy1463; - goto yy1307; -yy1323: + switch (yych) { + case 'A': + case 'a': goto yy1615; + case 'B': + case 'b': goto yy1614; + case 'D': + case 'R': + case 'd': + case 'r': goto yy1585; + case 'E': + case 'e': goto yy1613; + case 'F': + case 'f': goto yy1612; + case 'H': + case 'h': goto yy1611; + default: goto yy1417; + } +yy1438: + yych = *++p; + if (yych == 'M') goto yy1608; + if (yych == 'm') goto yy1608; + goto yy1417; +yy1439: + yych = *++p; + if (yych <= 'O') { + if (yych == 'I') goto yy1589; + if (yych <= 'N') goto yy1417; + goto yy1588; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy1417; + goto yy1589; + } else { + if (yych == 'o') goto yy1588; + goto yy1417; + } + } +yy1440: + yych = *++p; + if (yych == 'L') goto yy1585; + if (yych == 'l') goto yy1585; + goto yy1417; +yy1441: + yych = *++p; + if (yych == 'I') goto yy1582; + if (yych == 'i') goto yy1582; + goto yy1417; +yy1442: yych = *++p; switch (yych) { case 'A': - case 'a': goto yy1325; + case 'a': goto yy1444; case 'B': - case 'b': goto yy1328; + case 'b': goto yy1447; case 'C': - case 'c': goto yy1332; + case 'c': goto yy1451; case 'D': - case 'd': goto yy1333; + case 'd': goto yy1452; case 'E': - case 'e': goto yy1336; + case 'e': goto yy1455; case 'F': - case 'f': goto yy1337; + case 'f': goto yy1456; case 'H': - case 'h': goto yy1326; + case 'h': goto yy1445; case 'I': - case 'i': goto yy1327; + case 'i': goto yy1446; case 'L': - case 'l': goto yy1329; + case 'l': goto yy1448; case 'M': - case 'm': goto yy1330; + case 'm': goto yy1449; case 'O': - case 'o': goto yy1331; + case 'o': goto yy1450; case 'P': - case 'p': goto yy1324; + case 'p': goto yy1443; case 'S': - case 's': goto yy1334; + case 's': goto yy1453; case 'T': - case 't': goto yy1335; + case 't': goto yy1454; case 'U': - case 'u': goto yy1338; + case 'u': goto yy1457; case 'V': - case 'v': goto yy1339; - default: goto yy1307; + case 'v': goto yy1458; + default: goto yy1417; } -yy1324: +yy1443: yych = *++p; if (yych <= '=') { if (yych <= '\r') { - if (yych <= 0x08) goto yy1307; - goto yy1344; + if (yych <= 0x08) goto yy1417; + goto yy1463; } else { - if (yych == ' ') goto yy1344; - goto yy1307; + if (yych == ' ') goto yy1463; + goto yy1417; } } else { if (yych <= 'R') { - if (yych <= '>') goto yy1344; - if (yych <= 'Q') goto yy1307; - goto yy1457; + if (yych <= '>') goto yy1463; + if (yych <= 'Q') goto yy1417; + goto yy1576; } else { - if (yych == 'r') goto yy1457; - goto yy1307; + if (yych == 'r') goto yy1576; + goto yy1417; } } -yy1325: +yy1444: yych = *++p; if (yych <= 'S') { - if (yych <= 'Q') goto yy1307; - if (yych <= 'R') goto yy1450; - goto yy1449; + if (yych <= 'Q') goto yy1417; + if (yych <= 'R') goto yy1569; + goto yy1568; } else { - if (yych <= 'q') goto yy1307; - if (yych <= 'r') goto yy1450; - if (yych <= 's') goto yy1449; - goto yy1307; + if (yych <= 'q') goto yy1417; + if (yych <= 'r') goto yy1569; + if (yych <= 's') goto yy1568; + goto yy1417; } -yy1326: +yy1445: yych = *++p; if (yych <= 'Q') { if (yych <= 'D') { - if (yych <= '0') goto yy1307; - if (yych <= '6') goto yy1343; - goto yy1307; + if (yych <= '0') goto yy1417; + if (yych <= '6') goto yy1462; + goto yy1417; } else { - if (yych <= 'E') goto yy1442; - if (yych == 'G') goto yy1441; - goto yy1307; + if (yych <= 'E') goto yy1561; + if (yych == 'G') goto yy1560; + goto yy1417; } } else { if (yych <= 'f') { - if (yych <= 'R') goto yy1343; - if (yych == 'e') goto yy1442; - goto yy1307; + if (yych <= 'R') goto yy1462; + if (yych == 'e') goto yy1561; + goto yy1417; } else { - if (yych <= 'g') goto yy1441; - if (yych == 'r') goto yy1343; - goto yy1307; + if (yych <= 'g') goto yy1560; + if (yych == 'r') goto yy1462; + goto yy1417; } } -yy1327: +yy1446: yych = *++p; - if (yych == 'F') goto yy1437; - if (yych == 'f') goto yy1437; - goto yy1307; -yy1328: + if (yych == 'F') goto yy1556; + if (yych == 'f') goto yy1556; + goto yy1417; +yy1447: yych = *++p; if (yych <= 'U') { if (yych <= 'N') { - if (yych == 'L') goto yy1425; - goto yy1307; + if (yych == 'L') goto yy1544; + goto yy1417; } else { - if (yych <= 'O') goto yy1424; - if (yych <= 'T') goto yy1307; - goto yy1423; + if (yych <= 'O') goto yy1543; + if (yych <= 'T') goto yy1417; + goto yy1542; } } else { if (yych <= 'n') { - if (yych == 'l') goto yy1425; - goto yy1307; + if (yych == 'l') goto yy1544; + goto yy1417; } else { - if (yych <= 'o') goto yy1424; - if (yych == 'u') goto yy1423; - goto yy1307; + if (yych <= 'o') goto yy1543; + if (yych == 'u') goto yy1542; + goto yy1417; } } -yy1329: +yy1448: yych = *++p; - if (yych == 'I') goto yy1343; - if (yych == 'i') goto yy1343; - goto yy1307; -yy1330: + if (yych == 'I') goto yy1462; + if (yych == 'i') goto yy1462; + goto yy1417; +yy1449: yych = *++p; - if (yych == 'A') goto yy1422; - if (yych == 'a') goto yy1422; - goto yy1307; -yy1331: + if (yych == 'A') goto yy1541; + if (yych == 'a') goto yy1541; + goto yy1417; +yy1450: yych = *++p; if (yych <= 'U') { if (yych <= 'K') { - if (yych == 'B') goto yy1415; - goto yy1307; + if (yych == 'B') goto yy1534; + goto yy1417; } else { - if (yych <= 'L') goto yy1343; - if (yych <= 'T') goto yy1307; - goto yy1414; + if (yych <= 'L') goto yy1462; + if (yych <= 'T') goto yy1417; + goto yy1533; } } else { if (yych <= 'k') { - if (yych == 'b') goto yy1415; - goto yy1307; + if (yych == 'b') goto yy1534; + goto yy1417; } else { - if (yych <= 'l') goto yy1343; - if (yych == 'u') goto yy1414; - goto yy1307; + if (yych <= 'l') goto yy1462; + if (yych == 'u') goto yy1533; + goto yy1417; } } -yy1332: +yy1451: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy1401; - if (yych <= 'N') goto yy1307; - goto yy1400; + if (yych == 'A') goto yy1520; + if (yych <= 'N') goto yy1417; + goto yy1519; } else { if (yych <= 'a') { - if (yych <= '`') goto yy1307; - goto yy1401; + if (yych <= '`') goto yy1417; + goto yy1520; } else { - if (yych == 'o') goto yy1400; - goto yy1307; + if (yych == 'o') goto yy1519; + goto yy1417; } } -yy1333: +yy1452: yych = *++p; if (yych <= 'T') { if (yych <= 'I') { - if (yych == 'D') goto yy1343; - if (yych <= 'H') goto yy1307; - goto yy1399; + if (yych == 'D') goto yy1462; + if (yych <= 'H') goto yy1417; + goto yy1518; } else { - if (yych == 'L') goto yy1343; - if (yych <= 'S') goto yy1307; - goto yy1343; + if (yych == 'L') goto yy1462; + if (yych <= 'S') goto yy1417; + goto yy1462; } } else { if (yych <= 'i') { - if (yych == 'd') goto yy1343; - if (yych <= 'h') goto yy1307; - goto yy1399; + if (yych == 'd') goto yy1462; + if (yych <= 'h') goto yy1417; + goto yy1518; } else { if (yych <= 'l') { - if (yych <= 'k') goto yy1307; - goto yy1343; + if (yych <= 'k') goto yy1417; + goto yy1462; } else { - if (yych == 't') goto yy1343; - goto yy1307; + if (yych == 't') goto yy1462; + goto yy1417; } } } -yy1334: +yy1453: yych = *++p; if (yych <= 'T') { if (yych <= 'D') { - if (yych == 'C') goto yy1388; - goto yy1307; + if (yych == 'C') goto yy1507; + goto yy1417; } else { - if (yych <= 'E') goto yy1389; - if (yych <= 'S') goto yy1307; - goto yy1387; + if (yych <= 'E') goto yy1508; + if (yych <= 'S') goto yy1417; + goto yy1506; } } else { if (yych <= 'd') { - if (yych == 'c') goto yy1388; - goto yy1307; + if (yych == 'c') goto yy1507; + goto yy1417; } else { - if (yych <= 'e') goto yy1389; - if (yych == 't') goto yy1387; - goto yy1307; + if (yych <= 'e') goto yy1508; + if (yych == 't') goto yy1506; + goto yy1417; } } -yy1335: +yy1454: yych = *++p; switch (yych) { case 'A': - case 'a': goto yy1373; + case 'a': goto yy1492; case 'B': - case 'b': goto yy1372; + case 'b': goto yy1491; case 'D': case 'R': case 'd': - case 'r': goto yy1343; + case 'r': goto yy1462; case 'E': - case 'e': goto yy1371; + case 'e': goto yy1490; case 'F': - case 'f': goto yy1370; + case 'f': goto yy1489; case 'H': - case 'h': goto yy1369; - default: goto yy1307; + case 'h': goto yy1488; + default: goto yy1417; } -yy1336: +yy1455: yych = *++p; - if (yych == 'M') goto yy1366; - if (yych == 'm') goto yy1366; - goto yy1307; -yy1337: + if (yych == 'M') goto yy1485; + if (yych == 'm') goto yy1485; + goto yy1417; +yy1456: yych = *++p; if (yych <= 'O') { - if (yych == 'I') goto yy1347; - if (yych <= 'N') goto yy1307; - goto yy1346; + if (yych == 'I') goto yy1466; + if (yych <= 'N') goto yy1417; + goto yy1465; } else { if (yych <= 'i') { - if (yych <= 'h') goto yy1307; - goto yy1347; + if (yych <= 'h') goto yy1417; + goto yy1466; } else { - if (yych == 'o') goto yy1346; - goto yy1307; + if (yych == 'o') goto yy1465; + goto yy1417; } } -yy1338: +yy1457: yych = *++p; - if (yych == 'L') goto yy1343; - if (yych == 'l') goto yy1343; - goto yy1307; -yy1339: + if (yych == 'L') goto yy1462; + if (yych == 'l') goto yy1462; + goto yy1417; +yy1458: yych = *++p; - if (yych == 'I') goto yy1340; - if (yych != 'i') goto yy1307; -yy1340: + if (yych == 'I') goto yy1459; + if (yych != 'i') goto yy1417; +yy1459: yych = *++p; - if (yych == 'D') goto yy1341; - if (yych != 'd') goto yy1307; -yy1341: + if (yych == 'D') goto yy1460; + if (yych != 'd') goto yy1417; +yy1460: yych = *++p; - if (yych == 'E') goto yy1342; - if (yych != 'e') goto yy1307; -yy1342: + if (yych == 'E') goto yy1461; + if (yych != 'e') goto yy1417; +yy1461: yych = *++p; - if (yych == 'O') goto yy1343; - if (yych != 'o') goto yy1307; -yy1343: + if (yych == 'O') goto yy1462; + if (yych != 'o') goto yy1417; +yy1462: yych = *++p; if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1307; - if (yych >= 0x0E) goto yy1307; + if (yych <= 0x08) goto yy1417; + if (yych >= 0x0E) goto yy1417; } else { - if (yych <= ' ') goto yy1344; - if (yych != '>') goto yy1307; + if (yych <= ' ') goto yy1463; + if (yych != '>') goto yy1417; } -yy1344: +yy1463: ++p; { return (bufsize_t)(p - start); } -yy1346: +yy1465: yych = *++p; if (yych <= 'R') { - if (yych == 'O') goto yy1362; - if (yych <= 'Q') goto yy1307; - goto yy1363; + if (yych == 'O') goto yy1481; + if (yych <= 'Q') goto yy1417; + goto yy1482; } else { if (yych <= 'o') { - if (yych <= 'n') goto yy1307; - goto yy1362; + if (yych <= 'n') goto yy1417; + goto yy1481; } else { - if (yych == 'r') goto yy1363; - goto yy1307; + if (yych == 'r') goto yy1482; + goto yy1417; } } -yy1347: +yy1466: yych = *++p; if (yych <= 'G') { - if (yych == 'E') goto yy1348; - if (yych <= 'F') goto yy1307; - goto yy1349; + if (yych == 'E') goto yy1467; + if (yych <= 'F') goto yy1417; + goto yy1468; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy1307; + if (yych <= 'd') goto yy1417; } else { - if (yych == 'g') goto yy1349; - goto yy1307; + if (yych == 'g') goto yy1468; + goto yy1417; } } -yy1348: +yy1467: yych = *++p; - if (yych == 'L') goto yy1358; - if (yych == 'l') goto yy1358; - goto yy1307; -yy1349: + if (yych == 'L') goto yy1477; + if (yych == 'l') goto yy1477; + goto yy1417; +yy1468: yych = *++p; if (yych <= 'U') { - if (yych == 'C') goto yy1351; - if (yych <= 'T') goto yy1307; + if (yych == 'C') goto yy1470; + if (yych <= 'T') goto yy1417; } else { if (yych <= 'c') { - if (yych <= 'b') goto yy1307; - goto yy1351; + if (yych <= 'b') goto yy1417; + goto yy1470; } else { - if (yych != 'u') goto yy1307; + if (yych != 'u') goto yy1417; } } yych = *++p; - if (yych == 'R') goto yy1357; - if (yych == 'r') goto yy1357; - goto yy1307; -yy1351: + if (yych == 'R') goto yy1476; + if (yych == 'r') goto yy1476; + goto yy1417; +yy1470: yych = *++p; - if (yych == 'A') goto yy1352; - if (yych != 'a') goto yy1307; -yy1352: + if (yych == 'A') goto yy1471; + if (yych != 'a') goto yy1417; +yy1471: yych = *++p; - if (yych == 'P') goto yy1353; - if (yych != 'p') goto yy1307; -yy1353: + if (yych == 'P') goto yy1472; + if (yych != 'p') goto yy1417; +yy1472: yych = *++p; - if (yych == 'T') goto yy1354; - if (yych != 't') goto yy1307; -yy1354: + if (yych == 'T') goto yy1473; + if (yych != 't') goto yy1417; +yy1473: yych = *++p; - if (yych == 'I') goto yy1355; - if (yych != 'i') goto yy1307; -yy1355: + if (yych == 'I') goto yy1474; + if (yych != 'i') goto yy1417; +yy1474: yych = *++p; - if (yych == 'O') goto yy1356; - if (yych != 'o') goto yy1307; -yy1356: + if (yych == 'O') goto yy1475; + if (yych != 'o') goto yy1417; +yy1475: yych = *++p; - if (yych == 'N') goto yy1343; - if (yych == 'n') goto yy1343; - goto yy1307; -yy1357: + if (yych == 'N') goto yy1462; + if (yych == 'n') goto yy1462; + goto yy1417; +yy1476: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1358: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1477: yych = *++p; - if (yych == 'D') goto yy1359; - if (yych != 'd') goto yy1307; -yy1359: + if (yych == 'D') goto yy1478; + if (yych != 'd') goto yy1417; +yy1478: yych = *++p; - if (yych == 'S') goto yy1360; - if (yych != 's') goto yy1307; -yy1360: + if (yych == 'S') goto yy1479; + if (yych != 's') goto yy1417; +yy1479: yych = *++p; - if (yych == 'E') goto yy1361; - if (yych != 'e') goto yy1307; -yy1361: + if (yych == 'E') goto yy1480; + if (yych != 'e') goto yy1417; +yy1480: yych = *++p; - if (yych == 'T') goto yy1343; - if (yych == 't') goto yy1343; - goto yy1307; -yy1362: + if (yych == 'T') goto yy1462; + if (yych == 't') goto yy1462; + goto yy1417; +yy1481: yych = *++p; - if (yych == 'T') goto yy1364; - if (yych == 't') goto yy1364; - goto yy1307; -yy1363: + if (yych == 'T') goto yy1483; + if (yych == 't') goto yy1483; + goto yy1417; +yy1482: yych = *++p; - if (yych == 'M') goto yy1343; - if (yych == 'm') goto yy1343; - goto yy1307; -yy1364: + if (yych == 'M') goto yy1462; + if (yych == 'm') goto yy1462; + goto yy1417; +yy1483: yych = *++p; - if (yych == 'E') goto yy1365; - if (yych != 'e') goto yy1307; -yy1365: + if (yych == 'E') goto yy1484; + if (yych != 'e') goto yy1417; +yy1484: yych = *++p; - if (yych == 'R') goto yy1343; - if (yych == 'r') goto yy1343; - goto yy1307; -yy1366: + if (yych == 'R') goto yy1462; + if (yych == 'r') goto yy1462; + goto yy1417; +yy1485: yych = *++p; - if (yych == 'B') goto yy1367; - if (yych != 'b') goto yy1307; -yy1367: + if (yych == 'B') goto yy1486; + if (yych != 'b') goto yy1417; +yy1486: yych = *++p; - if (yych == 'E') goto yy1368; - if (yych != 'e') goto yy1307; -yy1368: + if (yych == 'E') goto yy1487; + if (yych != 'e') goto yy1417; +yy1487: yych = *++p; - if (yych == 'D') goto yy1343; - if (yych == 'd') goto yy1343; - goto yy1307; -yy1369: + if (yych == 'D') goto yy1462; + if (yych == 'd') goto yy1462; + goto yy1417; +yy1488: yych = *++p; if (yych <= '=') { if (yych <= '\r') { - if (yych <= 0x08) goto yy1307; - goto yy1344; + if (yych <= 0x08) goto yy1417; + goto yy1463; } else { - if (yych == ' ') goto yy1344; - goto yy1307; + if (yych == ' ') goto yy1463; + goto yy1417; } } else { if (yych <= 'E') { - if (yych <= '>') goto yy1344; - if (yych <= 'D') goto yy1307; - goto yy1385; + if (yych <= '>') goto yy1463; + if (yych <= 'D') goto yy1417; + goto yy1504; } else { - if (yych == 'e') goto yy1385; - goto yy1307; + if (yych == 'e') goto yy1504; + goto yy1417; } } -yy1370: +yy1489: yych = *++p; - if (yych == 'O') goto yy1383; - if (yych == 'o') goto yy1383; - goto yy1307; -yy1371: + if (yych == 'O') goto yy1502; + if (yych == 'o') goto yy1502; + goto yy1417; +yy1490: yych = *++p; - if (yych == 'X') goto yy1378; - if (yych == 'x') goto yy1378; - goto yy1307; -yy1372: + if (yych == 'X') goto yy1497; + if (yych == 'x') goto yy1497; + goto yy1417; +yy1491: yych = *++p; - if (yych == 'O') goto yy1376; - if (yych == 'o') goto yy1376; - goto yy1307; -yy1373: + if (yych == 'O') goto yy1495; + if (yych == 'o') goto yy1495; + goto yy1417; +yy1492: yych = *++p; - if (yych == 'B') goto yy1374; - if (yych != 'b') goto yy1307; -yy1374: + if (yych == 'B') goto yy1493; + if (yych != 'b') goto yy1417; +yy1493: yych = *++p; - if (yych == 'L') goto yy1375; - if (yych != 'l') goto yy1307; -yy1375: + if (yych == 'L') goto yy1494; + if (yych != 'l') goto yy1417; +yy1494: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1376: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1495: yych = *++p; - if (yych == 'D') goto yy1377; - if (yych != 'd') goto yy1307; -yy1377: + if (yych == 'D') goto yy1496; + if (yych != 'd') goto yy1417; +yy1496: yych = *++p; - if (yych == 'Y') goto yy1343; - if (yych == 'y') goto yy1343; - goto yy1307; -yy1378: + if (yych == 'Y') goto yy1462; + if (yych == 'y') goto yy1462; + goto yy1417; +yy1497: yych = *++p; - if (yych == 'T') goto yy1379; - if (yych != 't') goto yy1307; -yy1379: + if (yych == 'T') goto yy1498; + if (yych != 't') goto yy1417; +yy1498: yych = *++p; - if (yych == 'A') goto yy1380; - if (yych != 'a') goto yy1307; -yy1380: + if (yych == 'A') goto yy1499; + if (yych != 'a') goto yy1417; +yy1499: yych = *++p; - if (yych == 'R') goto yy1381; - if (yych != 'r') goto yy1307; -yy1381: + if (yych == 'R') goto yy1500; + if (yych != 'r') goto yy1417; +yy1500: yych = *++p; - if (yych == 'E') goto yy1382; - if (yych != 'e') goto yy1307; -yy1382: + if (yych == 'E') goto yy1501; + if (yych != 'e') goto yy1417; +yy1501: yych = *++p; - if (yych == 'A') goto yy1343; - if (yych == 'a') goto yy1343; - goto yy1307; -yy1383: + if (yych == 'A') goto yy1462; + if (yych == 'a') goto yy1462; + goto yy1417; +yy1502: yych = *++p; - if (yych == 'O') goto yy1384; - if (yych != 'o') goto yy1307; -yy1384: + if (yych == 'O') goto yy1503; + if (yych != 'o') goto yy1417; +yy1503: yych = *++p; - if (yych == 'T') goto yy1343; - if (yych == 't') goto yy1343; - goto yy1307; -yy1385: + if (yych == 'T') goto yy1462; + if (yych == 't') goto yy1462; + goto yy1417; +yy1504: yych = *++p; - if (yych == 'A') goto yy1386; - if (yych != 'a') goto yy1307; -yy1386: + if (yych == 'A') goto yy1505; + if (yych != 'a') goto yy1417; +yy1505: yych = *++p; - if (yych == 'D') goto yy1343; - if (yych == 'd') goto yy1343; - goto yy1307; -yy1387: + if (yych == 'D') goto yy1462; + if (yych == 'd') goto yy1462; + goto yy1417; +yy1506: yych = *++p; - if (yych == 'Y') goto yy1397; - if (yych == 'y') goto yy1397; - goto yy1307; -yy1388: + if (yych == 'Y') goto yy1516; + if (yych == 'y') goto yy1516; + goto yy1417; +yy1507: yych = *++p; - if (yych == 'R') goto yy1394; - if (yych == 'r') goto yy1394; - goto yy1307; -yy1389: + if (yych == 'R') goto yy1513; + if (yych == 'r') goto yy1513; + goto yy1417; +yy1508: yych = *++p; - if (yych == 'C') goto yy1390; - if (yych != 'c') goto yy1307; -yy1390: + if (yych == 'C') goto yy1509; + if (yych != 'c') goto yy1417; +yy1509: yych = *++p; - if (yych == 'T') goto yy1391; - if (yych != 't') goto yy1307; -yy1391: + if (yych == 'T') goto yy1510; + if (yych != 't') goto yy1417; +yy1510: yych = *++p; - if (yych == 'I') goto yy1392; - if (yych != 'i') goto yy1307; -yy1392: + if (yych == 'I') goto yy1511; + if (yych != 'i') goto yy1417; +yy1511: yych = *++p; - if (yych == 'O') goto yy1393; - if (yych != 'o') goto yy1307; -yy1393: + if (yych == 'O') goto yy1512; + if (yych != 'o') goto yy1417; +yy1512: yych = *++p; - if (yych == 'N') goto yy1343; - if (yych == 'n') goto yy1343; - goto yy1307; -yy1394: + if (yych == 'N') goto yy1462; + if (yych == 'n') goto yy1462; + goto yy1417; +yy1513: yych = *++p; - if (yych == 'I') goto yy1395; - if (yych != 'i') goto yy1307; -yy1395: + if (yych == 'I') goto yy1514; + if (yych != 'i') goto yy1417; +yy1514: yych = *++p; - if (yych == 'P') goto yy1396; - if (yych != 'p') goto yy1307; -yy1396: + if (yych == 'P') goto yy1515; + if (yych != 'p') goto yy1417; +yy1515: yych = *++p; - if (yych == 'T') goto yy1343; - if (yych == 't') goto yy1343; - goto yy1307; -yy1397: + if (yych == 'T') goto yy1462; + if (yych == 't') goto yy1462; + goto yy1417; +yy1516: yych = *++p; - if (yych == 'L') goto yy1398; - if (yych != 'l') goto yy1307; -yy1398: + if (yych == 'L') goto yy1517; + if (yych != 'l') goto yy1417; +yy1517: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1399: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1518: yych = *++p; - if (yych == 'V') goto yy1343; - if (yych == 'v') goto yy1343; - goto yy1307; -yy1400: + if (yych == 'V') goto yy1462; + if (yych == 'v') goto yy1462; + goto yy1417; +yy1519: yych = *++p; - if (yych == 'L') goto yy1409; - if (yych == 'l') goto yy1409; - goto yy1307; -yy1401: + if (yych == 'L') goto yy1528; + if (yych == 'l') goto yy1528; + goto yy1417; +yy1520: yych = *++p; if (yych <= 'P') { - if (yych == 'N') goto yy1402; - if (yych <= 'O') goto yy1307; - goto yy1403; + if (yych == 'N') goto yy1521; + if (yych <= 'O') goto yy1417; + goto yy1522; } else { if (yych <= 'n') { - if (yych <= 'm') goto yy1307; + if (yych <= 'm') goto yy1417; } else { - if (yych == 'p') goto yy1403; - goto yy1307; + if (yych == 'p') goto yy1522; + goto yy1417; } } -yy1402: +yy1521: yych = *++p; - if (yych == 'V') goto yy1407; - if (yych == 'v') goto yy1407; - goto yy1307; -yy1403: + if (yych == 'V') goto yy1526; + if (yych == 'v') goto yy1526; + goto yy1417; +yy1522: yych = *++p; - if (yych == 'T') goto yy1404; - if (yych != 't') goto yy1307; -yy1404: + if (yych == 'T') goto yy1523; + if (yych != 't') goto yy1417; +yy1523: yych = *++p; - if (yych == 'I') goto yy1405; - if (yych != 'i') goto yy1307; -yy1405: + if (yych == 'I') goto yy1524; + if (yych != 'i') goto yy1417; +yy1524: yych = *++p; - if (yych == 'O') goto yy1406; - if (yych != 'o') goto yy1307; -yy1406: + if (yych == 'O') goto yy1525; + if (yych != 'o') goto yy1417; +yy1525: yych = *++p; - if (yych == 'N') goto yy1343; - if (yych == 'n') goto yy1343; - goto yy1307; -yy1407: + if (yych == 'N') goto yy1462; + if (yych == 'n') goto yy1462; + goto yy1417; +yy1526: yych = *++p; - if (yych == 'A') goto yy1408; - if (yych != 'a') goto yy1307; -yy1408: + if (yych == 'A') goto yy1527; + if (yych != 'a') goto yy1417; +yy1527: yych = *++p; - if (yych == 'S') goto yy1343; - if (yych == 's') goto yy1343; - goto yy1307; -yy1409: + if (yych == 'S') goto yy1462; + if (yych == 's') goto yy1462; + goto yy1417; +yy1528: yych = *++p; if (yych <= '=') { if (yych <= '\r') { - if (yych <= 0x08) goto yy1307; - goto yy1344; + if (yych <= 0x08) goto yy1417; + goto yy1463; } else { - if (yych == ' ') goto yy1344; - goto yy1307; + if (yych == ' ') goto yy1463; + goto yy1417; } } else { if (yych <= 'G') { - if (yych <= '>') goto yy1344; - if (yych <= 'F') goto yy1307; + if (yych <= '>') goto yy1463; + if (yych <= 'F') goto yy1417; } else { - if (yych != 'g') goto yy1307; + if (yych != 'g') goto yy1417; } } yych = *++p; - if (yych == 'R') goto yy1411; - if (yych != 'r') goto yy1307; -yy1411: + if (yych == 'R') goto yy1530; + if (yych != 'r') goto yy1417; +yy1530: yych = *++p; - if (yych == 'O') goto yy1412; - if (yych != 'o') goto yy1307; -yy1412: + if (yych == 'O') goto yy1531; + if (yych != 'o') goto yy1417; +yy1531: yych = *++p; - if (yych == 'U') goto yy1413; - if (yych != 'u') goto yy1307; -yy1413: + if (yych == 'U') goto yy1532; + if (yych != 'u') goto yy1417; +yy1532: yych = *++p; - if (yych == 'P') goto yy1343; - if (yych == 'p') goto yy1343; - goto yy1307; -yy1414: + if (yych == 'P') goto yy1462; + if (yych == 'p') goto yy1462; + goto yy1417; +yy1533: yych = *++p; - if (yych == 'T') goto yy1419; - if (yych == 't') goto yy1419; - goto yy1307; -yy1415: + if (yych == 'T') goto yy1538; + if (yych == 't') goto yy1538; + goto yy1417; +yy1534: yych = *++p; - if (yych == 'J') goto yy1416; - if (yych != 'j') goto yy1307; -yy1416: + if (yych == 'J') goto yy1535; + if (yych != 'j') goto yy1417; +yy1535: yych = *++p; - if (yych == 'E') goto yy1417; - if (yych != 'e') goto yy1307; -yy1417: + if (yych == 'E') goto yy1536; + if (yych != 'e') goto yy1417; +yy1536: yych = *++p; - if (yych == 'C') goto yy1418; - if (yych != 'c') goto yy1307; -yy1418: + if (yych == 'C') goto yy1537; + if (yych != 'c') goto yy1417; +yy1537: yych = *++p; - if (yych == 'T') goto yy1343; - if (yych == 't') goto yy1343; - goto yy1307; -yy1419: + if (yych == 'T') goto yy1462; + if (yych == 't') goto yy1462; + goto yy1417; +yy1538: yych = *++p; - if (yych == 'P') goto yy1420; - if (yych != 'p') goto yy1307; -yy1420: + if (yych == 'P') goto yy1539; + if (yych != 'p') goto yy1417; +yy1539: yych = *++p; - if (yych == 'U') goto yy1421; - if (yych != 'u') goto yy1307; -yy1421: + if (yych == 'U') goto yy1540; + if (yych != 'u') goto yy1417; +yy1540: yych = *++p; - if (yych == 'T') goto yy1343; - if (yych == 't') goto yy1343; - goto yy1307; -yy1422: + if (yych == 'T') goto yy1462; + if (yych == 't') goto yy1462; + goto yy1417; +yy1541: yych = *++p; - if (yych == 'P') goto yy1343; - if (yych == 'p') goto yy1343; - goto yy1307; -yy1423: + if (yych == 'P') goto yy1462; + if (yych == 'p') goto yy1462; + goto yy1417; +yy1542: yych = *++p; - if (yych == 'T') goto yy1434; - if (yych == 't') goto yy1434; - goto yy1307; -yy1424: + if (yych == 'T') goto yy1553; + if (yych == 't') goto yy1553; + goto yy1417; +yy1543: yych = *++p; - if (yych == 'D') goto yy1433; - if (yych == 'd') goto yy1433; - goto yy1307; -yy1425: + if (yych == 'D') goto yy1552; + if (yych == 'd') goto yy1552; + goto yy1417; +yy1544: yych = *++p; - if (yych == 'O') goto yy1426; - if (yych != 'o') goto yy1307; -yy1426: + if (yych == 'O') goto yy1545; + if (yych != 'o') goto yy1417; +yy1545: yych = *++p; - if (yych == 'C') goto yy1427; - if (yych != 'c') goto yy1307; -yy1427: + if (yych == 'C') goto yy1546; + if (yych != 'c') goto yy1417; +yy1546: yych = *++p; - if (yych == 'K') goto yy1428; - if (yych != 'k') goto yy1307; -yy1428: + if (yych == 'K') goto yy1547; + if (yych != 'k') goto yy1417; +yy1547: yych = *++p; - if (yych == 'Q') goto yy1429; - if (yych != 'q') goto yy1307; -yy1429: + if (yych == 'Q') goto yy1548; + if (yych != 'q') goto yy1417; +yy1548: yych = *++p; - if (yych == 'U') goto yy1430; - if (yych != 'u') goto yy1307; -yy1430: + if (yych == 'U') goto yy1549; + if (yych != 'u') goto yy1417; +yy1549: yych = *++p; - if (yych == 'O') goto yy1431; - if (yych != 'o') goto yy1307; -yy1431: + if (yych == 'O') goto yy1550; + if (yych != 'o') goto yy1417; +yy1550: yych = *++p; - if (yych == 'T') goto yy1432; - if (yych != 't') goto yy1307; -yy1432: + if (yych == 'T') goto yy1551; + if (yych != 't') goto yy1417; +yy1551: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1433: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1552: yych = *++p; - if (yych == 'Y') goto yy1343; - if (yych == 'y') goto yy1343; - goto yy1307; -yy1434: + if (yych == 'Y') goto yy1462; + if (yych == 'y') goto yy1462; + goto yy1417; +yy1553: yych = *++p; - if (yych == 'T') goto yy1435; - if (yych != 't') goto yy1307; -yy1435: + if (yych == 'T') goto yy1554; + if (yych != 't') goto yy1417; +yy1554: yych = *++p; - if (yych == 'O') goto yy1436; - if (yych != 'o') goto yy1307; -yy1436: + if (yych == 'O') goto yy1555; + if (yych != 'o') goto yy1417; +yy1555: yych = *++p; - if (yych == 'N') goto yy1343; - if (yych == 'n') goto yy1343; - goto yy1307; -yy1437: + if (yych == 'N') goto yy1462; + if (yych == 'n') goto yy1462; + goto yy1417; +yy1556: yych = *++p; - if (yych == 'R') goto yy1438; - if (yych != 'r') goto yy1307; -yy1438: + if (yych == 'R') goto yy1557; + if (yych != 'r') goto yy1417; +yy1557: yych = *++p; - if (yych == 'A') goto yy1439; - if (yych != 'a') goto yy1307; -yy1439: + if (yych == 'A') goto yy1558; + if (yych != 'a') goto yy1417; +yy1558: yych = *++p; - if (yych == 'M') goto yy1440; - if (yych != 'm') goto yy1307; -yy1440: + if (yych == 'M') goto yy1559; + if (yych != 'm') goto yy1417; +yy1559: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1441: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1560: yych = *++p; - if (yych == 'R') goto yy1446; - if (yych == 'r') goto yy1446; - goto yy1307; -yy1442: + if (yych == 'R') goto yy1565; + if (yych == 'r') goto yy1565; + goto yy1417; +yy1561: yych = *++p; - if (yych == 'A') goto yy1443; - if (yych != 'a') goto yy1307; -yy1443: + if (yych == 'A') goto yy1562; + if (yych != 'a') goto yy1417; +yy1562: yych = *++p; - if (yych == 'D') goto yy1444; - if (yych != 'd') goto yy1307; -yy1444: + if (yych == 'D') goto yy1563; + if (yych != 'd') goto yy1417; +yy1563: yych = *++p; - if (yych == 'E') goto yy1445; - if (yych != 'e') goto yy1307; -yy1445: + if (yych == 'E') goto yy1564; + if (yych != 'e') goto yy1417; +yy1564: yych = *++p; - if (yych == 'R') goto yy1343; - if (yych == 'r') goto yy1343; - goto yy1307; -yy1446: + if (yych == 'R') goto yy1462; + if (yych == 'r') goto yy1462; + goto yy1417; +yy1565: yych = *++p; - if (yych == 'O') goto yy1447; - if (yych != 'o') goto yy1307; -yy1447: + if (yych == 'O') goto yy1566; + if (yych != 'o') goto yy1417; +yy1566: yych = *++p; - if (yych == 'U') goto yy1448; - if (yych != 'u') goto yy1307; -yy1448: + if (yych == 'U') goto yy1567; + if (yych != 'u') goto yy1417; +yy1567: yych = *++p; - if (yych == 'P') goto yy1343; - if (yych == 'p') goto yy1343; - goto yy1307; -yy1449: + if (yych == 'P') goto yy1462; + if (yych == 'p') goto yy1462; + goto yy1417; +yy1568: yych = *++p; - if (yych == 'I') goto yy1455; - if (yych == 'i') goto yy1455; - goto yy1307; -yy1450: + if (yych == 'I') goto yy1574; + if (yych == 'i') goto yy1574; + goto yy1417; +yy1569: yych = *++p; - if (yych == 'T') goto yy1451; - if (yych != 't') goto yy1307; -yy1451: + if (yych == 'T') goto yy1570; + if (yych != 't') goto yy1417; +yy1570: yych = *++p; - if (yych == 'I') goto yy1452; - if (yych != 'i') goto yy1307; -yy1452: + if (yych == 'I') goto yy1571; + if (yych != 'i') goto yy1417; +yy1571: yych = *++p; - if (yych == 'C') goto yy1453; - if (yych != 'c') goto yy1307; -yy1453: + if (yych == 'C') goto yy1572; + if (yych != 'c') goto yy1417; +yy1572: yych = *++p; - if (yych == 'L') goto yy1454; - if (yych != 'l') goto yy1307; -yy1454: + if (yych == 'L') goto yy1573; + if (yych != 'l') goto yy1417; +yy1573: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1455: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1574: yych = *++p; - if (yych == 'D') goto yy1456; - if (yych != 'd') goto yy1307; -yy1456: + if (yych == 'D') goto yy1575; + if (yych != 'd') goto yy1417; +yy1575: yych = *++p; - if (yych == 'E') goto yy1343; - if (yych == 'e') goto yy1343; - goto yy1307; -yy1457: + if (yych == 'E') goto yy1462; + if (yych == 'e') goto yy1462; + goto yy1417; +yy1576: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy1343; - if (yych <= 'N') goto yy1307; + if (yych == 'E') goto yy1462; + if (yych <= 'N') goto yy1417; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy1307; - goto yy1343; + if (yych <= 'd') goto yy1417; + goto yy1462; } else { - if (yych != 'o') goto yy1307; + if (yych != 'o') goto yy1417; } } yych = *++p; - if (yych == 'G') goto yy1459; - if (yych != 'g') goto yy1307; -yy1459: + if (yych == 'G') goto yy1578; + if (yych != 'g') goto yy1417; +yy1578: yych = *++p; - if (yych == 'R') goto yy1460; - if (yych != 'r') goto yy1307; -yy1460: + if (yych == 'R') goto yy1579; + if (yych != 'r') goto yy1417; +yy1579: yych = *++p; - if (yych == 'E') goto yy1461; - if (yych != 'e') goto yy1307; -yy1461: + if (yych == 'E') goto yy1580; + if (yych != 'e') goto yy1417; +yy1580: yych = *++p; - if (yych == 'S') goto yy1462; - if (yych != 's') goto yy1307; -yy1462: + if (yych == 'S') goto yy1581; + if (yych != 's') goto yy1417; +yy1581: yych = *++p; - if (yych == 'S') goto yy1343; - if (yych == 's') goto yy1343; - goto yy1307; -yy1463: + if (yych == 'S') goto yy1462; + if (yych == 's') goto yy1462; + goto yy1417; +yy1582: yych = *++p; - if (yych == 'D') goto yy1464; - if (yych != 'd') goto yy1307; -yy1464: + if (yych == 'D') goto yy1583; + if (yych != 'd') goto yy1417; +yy1583: yych = *++p; - if (yych == 'E') goto yy1465; - if (yych != 'e') goto yy1307; -yy1465: + if (yych == 'E') goto yy1584; + if (yych != 'e') goto yy1417; +yy1584: yych = *++p; - if (yych == 'O') goto yy1466; - if (yych != 'o') goto yy1307; -yy1466: + if (yych == 'O') goto yy1585; + if (yych != 'o') goto yy1417; +yy1585: yych = *++p; if (yych <= ' ') { - if (yych <= 0x08) goto yy1307; - if (yych <= '\r') goto yy1467; - if (yych <= 0x1F) goto yy1307; + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1586; + if (yych <= 0x1F) goto yy1417; } else { if (yych <= '/') { - if (yych <= '.') goto yy1307; + if (yych <= '.') goto yy1417; } else { - if (yych != '>') goto yy1307; + if (yych != '>') goto yy1417; } } -yy1467: +yy1586: ++p; { return (bufsize_t)(p - start); } -yy1469: +yy1588: yych = *++p; if (yych <= 'R') { - if (yych == 'O') goto yy1485; - if (yych <= 'Q') goto yy1307; - goto yy1486; + if (yych == 'O') goto yy1604; + if (yych <= 'Q') goto yy1417; + goto yy1605; } else { if (yych <= 'o') { - if (yych <= 'n') goto yy1307; - goto yy1485; + if (yych <= 'n') goto yy1417; + goto yy1604; } else { - if (yych == 'r') goto yy1486; - goto yy1307; + if (yych == 'r') goto yy1605; + goto yy1417; } } -yy1470: +yy1589: yych = *++p; if (yych <= 'G') { - if (yych == 'E') goto yy1471; - if (yych <= 'F') goto yy1307; - goto yy1472; + if (yych == 'E') goto yy1590; + if (yych <= 'F') goto yy1417; + goto yy1591; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy1307; + if (yych <= 'd') goto yy1417; } else { - if (yych == 'g') goto yy1472; - goto yy1307; + if (yych == 'g') goto yy1591; + goto yy1417; } } -yy1471: +yy1590: yych = *++p; - if (yych == 'L') goto yy1481; - if (yych == 'l') goto yy1481; - goto yy1307; -yy1472: + if (yych == 'L') goto yy1600; + if (yych == 'l') goto yy1600; + goto yy1417; +yy1591: yych = *++p; if (yych <= 'U') { - if (yych == 'C') goto yy1474; - if (yych <= 'T') goto yy1307; + if (yych == 'C') goto yy1593; + if (yych <= 'T') goto yy1417; } else { if (yych <= 'c') { - if (yych <= 'b') goto yy1307; - goto yy1474; + if (yych <= 'b') goto yy1417; + goto yy1593; } else { - if (yych != 'u') goto yy1307; + if (yych != 'u') goto yy1417; } } yych = *++p; - if (yych == 'R') goto yy1480; - if (yych == 'r') goto yy1480; - goto yy1307; -yy1474: + if (yych == 'R') goto yy1599; + if (yych == 'r') goto yy1599; + goto yy1417; +yy1593: yych = *++p; - if (yych == 'A') goto yy1475; - if (yych != 'a') goto yy1307; -yy1475: + if (yych == 'A') goto yy1594; + if (yych != 'a') goto yy1417; +yy1594: yych = *++p; - if (yych == 'P') goto yy1476; - if (yych != 'p') goto yy1307; -yy1476: + if (yych == 'P') goto yy1595; + if (yych != 'p') goto yy1417; +yy1595: yych = *++p; - if (yych == 'T') goto yy1477; - if (yych != 't') goto yy1307; -yy1477: + if (yych == 'T') goto yy1596; + if (yych != 't') goto yy1417; +yy1596: yych = *++p; - if (yych == 'I') goto yy1478; - if (yych != 'i') goto yy1307; -yy1478: + if (yych == 'I') goto yy1597; + if (yych != 'i') goto yy1417; +yy1597: yych = *++p; - if (yych == 'O') goto yy1479; - if (yych != 'o') goto yy1307; -yy1479: + if (yych == 'O') goto yy1598; + if (yych != 'o') goto yy1417; +yy1598: yych = *++p; - if (yych == 'N') goto yy1466; - if (yych == 'n') goto yy1466; - goto yy1307; -yy1480: + if (yych == 'N') goto yy1585; + if (yych == 'n') goto yy1585; + goto yy1417; +yy1599: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1481: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1600: yych = *++p; - if (yych == 'D') goto yy1482; - if (yych != 'd') goto yy1307; -yy1482: + if (yych == 'D') goto yy1601; + if (yych != 'd') goto yy1417; +yy1601: yych = *++p; - if (yych == 'S') goto yy1483; - if (yych != 's') goto yy1307; -yy1483: + if (yych == 'S') goto yy1602; + if (yych != 's') goto yy1417; +yy1602: yych = *++p; - if (yych == 'E') goto yy1484; - if (yych != 'e') goto yy1307; -yy1484: + if (yych == 'E') goto yy1603; + if (yych != 'e') goto yy1417; +yy1603: yych = *++p; - if (yych == 'T') goto yy1466; - if (yych == 't') goto yy1466; - goto yy1307; -yy1485: + if (yych == 'T') goto yy1585; + if (yych == 't') goto yy1585; + goto yy1417; +yy1604: yych = *++p; - if (yych == 'T') goto yy1487; - if (yych == 't') goto yy1487; - goto yy1307; -yy1486: + if (yych == 'T') goto yy1606; + if (yych == 't') goto yy1606; + goto yy1417; +yy1605: yych = *++p; - if (yych == 'M') goto yy1466; - if (yych == 'm') goto yy1466; - goto yy1307; -yy1487: + if (yych == 'M') goto yy1585; + if (yych == 'm') goto yy1585; + goto yy1417; +yy1606: yych = *++p; - if (yych == 'E') goto yy1488; - if (yych != 'e') goto yy1307; -yy1488: + if (yych == 'E') goto yy1607; + if (yych != 'e') goto yy1417; +yy1607: yych = *++p; - if (yych == 'R') goto yy1466; - if (yych == 'r') goto yy1466; - goto yy1307; -yy1489: + if (yych == 'R') goto yy1585; + if (yych == 'r') goto yy1585; + goto yy1417; +yy1608: yych = *++p; - if (yych == 'B') goto yy1490; - if (yych != 'b') goto yy1307; -yy1490: + if (yych == 'B') goto yy1609; + if (yych != 'b') goto yy1417; +yy1609: yych = *++p; - if (yych == 'E') goto yy1491; - if (yych != 'e') goto yy1307; -yy1491: + if (yych == 'E') goto yy1610; + if (yych != 'e') goto yy1417; +yy1610: yych = *++p; - if (yych == 'D') goto yy1466; - if (yych == 'd') goto yy1466; - goto yy1307; -yy1492: + if (yych == 'D') goto yy1585; + if (yych == 'd') goto yy1585; + goto yy1417; +yy1611: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1307; - if (yych <= '\r') goto yy1467; - goto yy1307; + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1586; + goto yy1417; } else { - if (yych <= ' ') goto yy1467; - if (yych <= '.') goto yy1307; - goto yy1467; + if (yych <= ' ') goto yy1586; + if (yych <= '.') goto yy1417; + goto yy1586; } } else { if (yych <= 'D') { - if (yych == '>') goto yy1467; - goto yy1307; + if (yych == '>') goto yy1586; + goto yy1417; } else { - if (yych <= 'E') goto yy1508; - if (yych == 'e') goto yy1508; - goto yy1307; + if (yych <= 'E') goto yy1627; + if (yych == 'e') goto yy1627; + goto yy1417; } } -yy1493: +yy1612: yych = *++p; - if (yych == 'O') goto yy1506; - if (yych == 'o') goto yy1506; - goto yy1307; -yy1494: + if (yych == 'O') goto yy1625; + if (yych == 'o') goto yy1625; + goto yy1417; +yy1613: yych = *++p; - if (yych == 'X') goto yy1501; - if (yych == 'x') goto yy1501; - goto yy1307; -yy1495: + if (yych == 'X') goto yy1620; + if (yych == 'x') goto yy1620; + goto yy1417; +yy1614: yych = *++p; - if (yych == 'O') goto yy1499; - if (yych == 'o') goto yy1499; - goto yy1307; -yy1496: + if (yych == 'O') goto yy1618; + if (yych == 'o') goto yy1618; + goto yy1417; +yy1615: yych = *++p; - if (yych == 'B') goto yy1497; - if (yych != 'b') goto yy1307; -yy1497: + if (yych == 'B') goto yy1616; + if (yych != 'b') goto yy1417; +yy1616: yych = *++p; - if (yych == 'L') goto yy1498; - if (yych != 'l') goto yy1307; -yy1498: + if (yych == 'L') goto yy1617; + if (yych != 'l') goto yy1417; +yy1617: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1499: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1618: yych = *++p; - if (yych == 'D') goto yy1500; - if (yych != 'd') goto yy1307; -yy1500: + if (yych == 'D') goto yy1619; + if (yych != 'd') goto yy1417; +yy1619: yych = *++p; - if (yych == 'Y') goto yy1466; - if (yych == 'y') goto yy1466; - goto yy1307; -yy1501: + if (yych == 'Y') goto yy1585; + if (yych == 'y') goto yy1585; + goto yy1417; +yy1620: yych = *++p; - if (yych == 'T') goto yy1502; - if (yych != 't') goto yy1307; -yy1502: + if (yych == 'T') goto yy1621; + if (yych != 't') goto yy1417; +yy1621: yych = *++p; - if (yych == 'A') goto yy1503; - if (yych != 'a') goto yy1307; -yy1503: + if (yych == 'A') goto yy1622; + if (yych != 'a') goto yy1417; +yy1622: yych = *++p; - if (yych == 'R') goto yy1504; - if (yych != 'r') goto yy1307; -yy1504: + if (yych == 'R') goto yy1623; + if (yych != 'r') goto yy1417; +yy1623: yych = *++p; - if (yych == 'E') goto yy1505; - if (yych != 'e') goto yy1307; -yy1505: + if (yych == 'E') goto yy1624; + if (yych != 'e') goto yy1417; +yy1624: yych = *++p; - if (yych == 'A') goto yy1466; - if (yych == 'a') goto yy1466; - goto yy1307; -yy1506: + if (yych == 'A') goto yy1585; + if (yych == 'a') goto yy1585; + goto yy1417; +yy1625: yych = *++p; - if (yych == 'O') goto yy1507; - if (yych != 'o') goto yy1307; -yy1507: + if (yych == 'O') goto yy1626; + if (yych != 'o') goto yy1417; +yy1626: yych = *++p; - if (yych == 'T') goto yy1466; - if (yych == 't') goto yy1466; - goto yy1307; -yy1508: + if (yych == 'T') goto yy1585; + if (yych == 't') goto yy1585; + goto yy1417; +yy1627: yych = *++p; - if (yych == 'A') goto yy1509; - if (yych != 'a') goto yy1307; -yy1509: + if (yych == 'A') goto yy1628; + if (yych != 'a') goto yy1417; +yy1628: yych = *++p; - if (yych == 'D') goto yy1466; - if (yych == 'd') goto yy1466; - goto yy1307; -yy1510: + if (yych == 'D') goto yy1585; + if (yych == 'd') goto yy1585; + goto yy1417; +yy1629: yych = *++p; - if (yych == 'Y') goto yy1520; - if (yych == 'y') goto yy1520; - goto yy1307; -yy1511: + if (yych == 'Y') goto yy1639; + if (yych == 'y') goto yy1639; + goto yy1417; +yy1630: yych = *++p; - if (yych == 'R') goto yy1517; - if (yych == 'r') goto yy1517; - goto yy1307; -yy1512: + if (yych == 'R') goto yy1636; + if (yych == 'r') goto yy1636; + goto yy1417; +yy1631: yych = *++p; - if (yych == 'C') goto yy1513; - if (yych != 'c') goto yy1307; -yy1513: + if (yych == 'C') goto yy1632; + if (yych != 'c') goto yy1417; +yy1632: yych = *++p; - if (yych == 'T') goto yy1514; - if (yych != 't') goto yy1307; -yy1514: + if (yych == 'T') goto yy1633; + if (yych != 't') goto yy1417; +yy1633: yych = *++p; - if (yych == 'I') goto yy1515; - if (yych != 'i') goto yy1307; -yy1515: + if (yych == 'I') goto yy1634; + if (yych != 'i') goto yy1417; +yy1634: yych = *++p; - if (yych == 'O') goto yy1516; - if (yych != 'o') goto yy1307; -yy1516: + if (yych == 'O') goto yy1635; + if (yych != 'o') goto yy1417; +yy1635: yych = *++p; - if (yych == 'N') goto yy1466; - if (yych == 'n') goto yy1466; - goto yy1307; -yy1517: + if (yych == 'N') goto yy1585; + if (yych == 'n') goto yy1585; + goto yy1417; +yy1636: yych = *++p; - if (yych == 'I') goto yy1518; - if (yych != 'i') goto yy1307; -yy1518: + if (yych == 'I') goto yy1637; + if (yych != 'i') goto yy1417; +yy1637: yych = *++p; - if (yych == 'P') goto yy1519; - if (yych != 'p') goto yy1307; -yy1519: + if (yych == 'P') goto yy1638; + if (yych != 'p') goto yy1417; +yy1638: yych = *++p; - if (yych == 'T') goto yy1466; - if (yych == 't') goto yy1466; - goto yy1307; -yy1520: + if (yych == 'T') goto yy1585; + if (yych == 't') goto yy1585; + goto yy1417; +yy1639: yych = *++p; - if (yych == 'L') goto yy1521; - if (yych != 'l') goto yy1307; -yy1521: + if (yych == 'L') goto yy1640; + if (yych != 'l') goto yy1417; +yy1640: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1522: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1641: yych = *++p; - if (yych == 'V') goto yy1466; - if (yych == 'v') goto yy1466; - goto yy1307; -yy1523: + if (yych == 'V') goto yy1585; + if (yych == 'v') goto yy1585; + goto yy1417; +yy1642: yych = *++p; - if (yych == 'L') goto yy1532; - if (yych == 'l') goto yy1532; - goto yy1307; -yy1524: + if (yych == 'L') goto yy1651; + if (yych == 'l') goto yy1651; + goto yy1417; +yy1643: yych = *++p; if (yych <= 'P') { - if (yych == 'N') goto yy1525; - if (yych <= 'O') goto yy1307; - goto yy1526; + if (yych == 'N') goto yy1644; + if (yych <= 'O') goto yy1417; + goto yy1645; } else { if (yych <= 'n') { - if (yych <= 'm') goto yy1307; + if (yych <= 'm') goto yy1417; } else { - if (yych == 'p') goto yy1526; - goto yy1307; + if (yych == 'p') goto yy1645; + goto yy1417; } } -yy1525: +yy1644: yych = *++p; - if (yych == 'V') goto yy1530; - if (yych == 'v') goto yy1530; - goto yy1307; -yy1526: + if (yych == 'V') goto yy1649; + if (yych == 'v') goto yy1649; + goto yy1417; +yy1645: yych = *++p; - if (yych == 'T') goto yy1527; - if (yych != 't') goto yy1307; -yy1527: + if (yych == 'T') goto yy1646; + if (yych != 't') goto yy1417; +yy1646: yych = *++p; - if (yych == 'I') goto yy1528; - if (yych != 'i') goto yy1307; -yy1528: + if (yych == 'I') goto yy1647; + if (yych != 'i') goto yy1417; +yy1647: yych = *++p; - if (yych == 'O') goto yy1529; - if (yych != 'o') goto yy1307; -yy1529: + if (yych == 'O') goto yy1648; + if (yych != 'o') goto yy1417; +yy1648: yych = *++p; - if (yych == 'N') goto yy1466; - if (yych == 'n') goto yy1466; - goto yy1307; -yy1530: + if (yych == 'N') goto yy1585; + if (yych == 'n') goto yy1585; + goto yy1417; +yy1649: yych = *++p; - if (yych == 'A') goto yy1531; - if (yych != 'a') goto yy1307; -yy1531: + if (yych == 'A') goto yy1650; + if (yych != 'a') goto yy1417; +yy1650: yych = *++p; - if (yych == 'S') goto yy1466; - if (yych == 's') goto yy1466; - goto yy1307; -yy1532: + if (yych == 'S') goto yy1585; + if (yych == 's') goto yy1585; + goto yy1417; +yy1651: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1307; - if (yych <= '\r') goto yy1467; - goto yy1307; + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1586; + goto yy1417; } else { - if (yych <= ' ') goto yy1467; - if (yych <= '.') goto yy1307; - goto yy1467; + if (yych <= ' ') goto yy1586; + if (yych <= '.') goto yy1417; + goto yy1586; } } else { if (yych <= 'F') { - if (yych == '>') goto yy1467; - goto yy1307; + if (yych == '>') goto yy1586; + goto yy1417; } else { - if (yych <= 'G') goto yy1533; - if (yych != 'g') goto yy1307; + if (yych <= 'G') goto yy1652; + if (yych != 'g') goto yy1417; } } -yy1533: +yy1652: yych = *++p; - if (yych == 'R') goto yy1534; - if (yych != 'r') goto yy1307; -yy1534: + if (yych == 'R') goto yy1653; + if (yych != 'r') goto yy1417; +yy1653: yych = *++p; - if (yych == 'O') goto yy1535; - if (yych != 'o') goto yy1307; -yy1535: + if (yych == 'O') goto yy1654; + if (yych != 'o') goto yy1417; +yy1654: yych = *++p; - if (yych == 'U') goto yy1536; - if (yych != 'u') goto yy1307; -yy1536: + if (yych == 'U') goto yy1655; + if (yych != 'u') goto yy1417; +yy1655: yych = *++p; - if (yych == 'P') goto yy1466; - if (yych == 'p') goto yy1466; - goto yy1307; -yy1537: + if (yych == 'P') goto yy1585; + if (yych == 'p') goto yy1585; + goto yy1417; +yy1656: yych = *++p; - if (yych == 'T') goto yy1542; - if (yych == 't') goto yy1542; - goto yy1307; -yy1538: + if (yych == 'T') goto yy1661; + if (yych == 't') goto yy1661; + goto yy1417; +yy1657: yych = *++p; - if (yych == 'J') goto yy1539; - if (yych != 'j') goto yy1307; -yy1539: + if (yych == 'J') goto yy1658; + if (yych != 'j') goto yy1417; +yy1658: yych = *++p; - if (yych == 'E') goto yy1540; - if (yych != 'e') goto yy1307; -yy1540: + if (yych == 'E') goto yy1659; + if (yych != 'e') goto yy1417; +yy1659: yych = *++p; - if (yych == 'C') goto yy1541; - if (yych != 'c') goto yy1307; -yy1541: + if (yych == 'C') goto yy1660; + if (yych != 'c') goto yy1417; +yy1660: yych = *++p; - if (yych == 'T') goto yy1466; - if (yych == 't') goto yy1466; - goto yy1307; -yy1542: + if (yych == 'T') goto yy1585; + if (yych == 't') goto yy1585; + goto yy1417; +yy1661: yych = *++p; - if (yych == 'P') goto yy1543; - if (yych != 'p') goto yy1307; -yy1543: + if (yych == 'P') goto yy1662; + if (yych != 'p') goto yy1417; +yy1662: yych = *++p; - if (yych == 'U') goto yy1544; - if (yych != 'u') goto yy1307; -yy1544: + if (yych == 'U') goto yy1663; + if (yych != 'u') goto yy1417; +yy1663: yych = *++p; - if (yych == 'T') goto yy1466; - if (yych == 't') goto yy1466; - goto yy1307; -yy1545: + if (yych == 'T') goto yy1585; + if (yych == 't') goto yy1585; + goto yy1417; +yy1664: yych = *++p; - if (yych == 'P') goto yy1466; - if (yych == 'p') goto yy1466; - goto yy1307; -yy1546: + if (yych == 'P') goto yy1585; + if (yych == 'p') goto yy1585; + goto yy1417; +yy1665: yych = *++p; - if (yych == 'T') goto yy1557; - if (yych == 't') goto yy1557; - goto yy1307; -yy1547: + if (yych == 'T') goto yy1676; + if (yych == 't') goto yy1676; + goto yy1417; +yy1666: yych = *++p; - if (yych == 'D') goto yy1556; - if (yych == 'd') goto yy1556; - goto yy1307; -yy1548: + if (yych == 'D') goto yy1675; + if (yych == 'd') goto yy1675; + goto yy1417; +yy1667: yych = *++p; - if (yych == 'O') goto yy1549; - if (yych != 'o') goto yy1307; -yy1549: + if (yych == 'O') goto yy1668; + if (yych != 'o') goto yy1417; +yy1668: yych = *++p; - if (yych == 'C') goto yy1550; - if (yych != 'c') goto yy1307; -yy1550: + if (yych == 'C') goto yy1669; + if (yych != 'c') goto yy1417; +yy1669: yych = *++p; - if (yych == 'K') goto yy1551; - if (yych != 'k') goto yy1307; -yy1551: + if (yych == 'K') goto yy1670; + if (yych != 'k') goto yy1417; +yy1670: yych = *++p; - if (yych == 'Q') goto yy1552; - if (yych != 'q') goto yy1307; -yy1552: + if (yych == 'Q') goto yy1671; + if (yych != 'q') goto yy1417; +yy1671: yych = *++p; - if (yych == 'U') goto yy1553; - if (yych != 'u') goto yy1307; -yy1553: + if (yych == 'U') goto yy1672; + if (yych != 'u') goto yy1417; +yy1672: yych = *++p; - if (yych == 'O') goto yy1554; - if (yych != 'o') goto yy1307; -yy1554: + if (yych == 'O') goto yy1673; + if (yych != 'o') goto yy1417; +yy1673: yych = *++p; - if (yych == 'T') goto yy1555; - if (yych != 't') goto yy1307; -yy1555: + if (yych == 'T') goto yy1674; + if (yych != 't') goto yy1417; +yy1674: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1556: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1675: yych = *++p; - if (yych == 'Y') goto yy1466; - if (yych == 'y') goto yy1466; - goto yy1307; -yy1557: + if (yych == 'Y') goto yy1585; + if (yych == 'y') goto yy1585; + goto yy1417; +yy1676: yych = *++p; - if (yych == 'T') goto yy1558; - if (yych != 't') goto yy1307; -yy1558: + if (yych == 'T') goto yy1677; + if (yych != 't') goto yy1417; +yy1677: yych = *++p; - if (yych == 'O') goto yy1559; - if (yych != 'o') goto yy1307; -yy1559: + if (yych == 'O') goto yy1678; + if (yych != 'o') goto yy1417; +yy1678: yych = *++p; - if (yych == 'N') goto yy1466; - if (yych == 'n') goto yy1466; - goto yy1307; -yy1560: + if (yych == 'N') goto yy1585; + if (yych == 'n') goto yy1585; + goto yy1417; +yy1679: yych = *++p; - if (yych == 'R') goto yy1561; - if (yych != 'r') goto yy1307; -yy1561: + if (yych == 'R') goto yy1680; + if (yych != 'r') goto yy1417; +yy1680: yych = *++p; - if (yych == 'A') goto yy1562; - if (yych != 'a') goto yy1307; -yy1562: + if (yych == 'A') goto yy1681; + if (yych != 'a') goto yy1417; +yy1681: yych = *++p; - if (yych == 'M') goto yy1563; - if (yych != 'm') goto yy1307; -yy1563: + if (yych == 'M') goto yy1682; + if (yych != 'm') goto yy1417; +yy1682: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1564: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1683: yych = *++p; - if (yych == 'R') goto yy1569; - if (yych == 'r') goto yy1569; - goto yy1307; -yy1565: + if (yych == 'R') goto yy1688; + if (yych == 'r') goto yy1688; + goto yy1417; +yy1684: yych = *++p; - if (yych == 'A') goto yy1566; - if (yych != 'a') goto yy1307; -yy1566: + if (yych == 'A') goto yy1685; + if (yych != 'a') goto yy1417; +yy1685: yych = *++p; - if (yych == 'D') goto yy1567; - if (yych != 'd') goto yy1307; -yy1567: + if (yych == 'D') goto yy1686; + if (yych != 'd') goto yy1417; +yy1686: yych = *++p; - if (yych == 'E') goto yy1568; - if (yych != 'e') goto yy1307; -yy1568: + if (yych == 'E') goto yy1687; + if (yych != 'e') goto yy1417; +yy1687: yych = *++p; - if (yych == 'R') goto yy1466; - if (yych == 'r') goto yy1466; - goto yy1307; -yy1569: + if (yych == 'R') goto yy1585; + if (yych == 'r') goto yy1585; + goto yy1417; +yy1688: yych = *++p; - if (yych == 'O') goto yy1570; - if (yych != 'o') goto yy1307; -yy1570: + if (yych == 'O') goto yy1689; + if (yych != 'o') goto yy1417; +yy1689: yych = *++p; - if (yych == 'U') goto yy1571; - if (yych != 'u') goto yy1307; -yy1571: + if (yych == 'U') goto yy1690; + if (yych != 'u') goto yy1417; +yy1690: yych = *++p; - if (yych == 'P') goto yy1466; - if (yych == 'p') goto yy1466; - goto yy1307; -yy1572: + if (yych == 'P') goto yy1585; + if (yych == 'p') goto yy1585; + goto yy1417; +yy1691: yych = *++p; - if (yych == 'I') goto yy1578; - if (yych == 'i') goto yy1578; - goto yy1307; -yy1573: + if (yych == 'I') goto yy1697; + if (yych == 'i') goto yy1697; + goto yy1417; +yy1692: yych = *++p; - if (yych == 'T') goto yy1574; - if (yych != 't') goto yy1307; -yy1574: + if (yych == 'T') goto yy1693; + if (yych != 't') goto yy1417; +yy1693: yych = *++p; - if (yych == 'I') goto yy1575; - if (yych != 'i') goto yy1307; -yy1575: + if (yych == 'I') goto yy1694; + if (yych != 'i') goto yy1417; +yy1694: yych = *++p; - if (yych == 'C') goto yy1576; - if (yych != 'c') goto yy1307; -yy1576: + if (yych == 'C') goto yy1695; + if (yych != 'c') goto yy1417; +yy1695: yych = *++p; - if (yych == 'L') goto yy1577; - if (yych != 'l') goto yy1307; -yy1577: + if (yych == 'L') goto yy1696; + if (yych != 'l') goto yy1417; +yy1696: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1578: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1697: yych = *++p; - if (yych == 'D') goto yy1579; - if (yych != 'd') goto yy1307; -yy1579: + if (yych == 'D') goto yy1698; + if (yych != 'd') goto yy1417; +yy1698: yych = *++p; - if (yych == 'E') goto yy1466; - if (yych == 'e') goto yy1466; - goto yy1307; -yy1580: + if (yych == 'E') goto yy1585; + if (yych == 'e') goto yy1585; + goto yy1417; +yy1699: yych = *++p; if (yych <= 'O') { - if (yych == 'E') goto yy1466; - if (yych <= 'N') goto yy1307; + if (yych == 'E') goto yy1585; + if (yych <= 'N') goto yy1417; } else { if (yych <= 'e') { - if (yych <= 'd') goto yy1307; - goto yy1466; + if (yych <= 'd') goto yy1417; + goto yy1585; } else { - if (yych != 'o') goto yy1307; + if (yych != 'o') goto yy1417; } } yych = *++p; - if (yych == 'G') goto yy1582; - if (yych != 'g') goto yy1307; -yy1582: + if (yych == 'G') goto yy1701; + if (yych != 'g') goto yy1417; +yy1701: yych = *++p; - if (yych == 'R') goto yy1583; - if (yych != 'r') goto yy1307; -yy1583: + if (yych == 'R') goto yy1702; + if (yych != 'r') goto yy1417; +yy1702: yych = *++p; - if (yych == 'E') goto yy1584; - if (yych != 'e') goto yy1307; -yy1584: + if (yych == 'E') goto yy1703; + if (yych != 'e') goto yy1417; +yy1703: yych = *++p; - if (yych == 'S') goto yy1585; - if (yych != 's') goto yy1307; -yy1585: + if (yych == 'S') goto yy1704; + if (yych != 's') goto yy1417; +yy1704: ++p; - if ((yych = *p) == 'S') goto yy1466; - if (yych == 's') goto yy1466; - goto yy1307; + if ((yych = *p) == 'S') goto yy1585; + if (yych == 's') goto yy1585; + goto yy1417; } } @@ -13256,667 +14462,1804 @@ bufsize_t _scan_link_url(const unsigned char *p) 128, 128, 8, 128, 128, 8, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 136, 208, 208, 208, 208, 208, 208, 208, - 128, 128, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 16, 208, 16, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 32, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, + 136, 224, 224, 224, 224, 224, 224, 224, + 128, 128, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 32, 224, 32, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 16, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 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 = *p; - if (yych <= '\'') { - if (yych <= '\f') { - if (yych == '\n') goto yy1589; - goto yy1597; + yych = *(marker = p); + if (yych <= '[') { + if (yych <= ' ') { + if (yych <= '\f') { + if (yych == '\n') goto yy1708; + goto yy1724; + } else { + if (yych <= '\r') goto yy1710; + if (yych <= 0x1F) goto yy1724; + goto yy1710; + } } else { - if (yych <= '\r') goto yy1591; - if (yych <= 0x1F) goto yy1597; - if (yych <= ' ') goto yy1591; - goto yy1594; + if (yych <= ')') { + if (yych <= '\'') goto yy1713; + if (yych <= '(') goto yy1722; + goto yy1724; + } else { + if (yych == '<') goto yy1711; + goto yy1713; + } } } else { - if (yych <= ';') { - if (yych <= '(') goto yy1595; - if (yych <= ')') goto yy1597; - goto yy1594; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') goto yy1712; + if (yych <= 0x7F) goto yy1713; + } else { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1716; + goto yy1717; + } } else { - if (yych <= '<') goto yy1592; - if (yych == '\\') goto yy1593; - goto yy1594; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1721; + if (yych <= 0xEF) goto yy1717; + goto yy1718; + } else { + if (yych <= 0xF3) goto yy1719; + if (yych <= 0xF4) goto yy1720; + } } } -yy1588: +yy1707: { return (bufsize_t)(p - start); } -yy1589: +yy1708: yyaccept = 0; marker = ++p; yych = *p; -yy1590: +yy1709: if (yybm[0+yych] & 8) { - goto yy1589; + goto yy1708; } - if (yych <= ')') { - if (yych <= ' ') goto yy1588; - if (yych <= '\'') goto yy1603; - if (yych <= '(') goto yy1598; - goto yy1588; + if (yych <= 0x7F) { + if (yych <= ')') { + if (yych <= 0x1F) goto yy1707; + if (yych <= '\'') goto yy1736; + if (yych <= '(') goto yy1727; + goto yy1707; + } else { + if (yych <= '<') { + if (yych <= ';') goto yy1736; + goto yy1760; + } else { + if (yych == '\\') goto yy1738; + goto yy1736; + } + } } else { - if (yych <= '<') { - if (yych <= ';') goto yy1603; - goto yy1613; + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) goto yy1707; + goto yy1740; + } else { + if (yych <= 0xE0) goto yy1741; + if (yych <= 0xEC) goto yy1742; + goto yy1746; + } } else { - if (yych == '\\') goto yy1605; - goto yy1603; + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1742; + goto yy1743; + } else { + if (yych <= 0xF3) goto yy1744; + if (yych <= 0xF4) goto yy1745; + goto yy1707; + } } } -yy1591: +yy1710: yyaccept = 0; yych = *(marker = ++p); - goto yy1590; -yy1592: + goto yy1709; +yy1711: yyaccept = 0; yych = *(marker = ++p); if (yybm[0+yych] & 64) { - goto yy1613; + goto yy1760; } - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1588; - goto yy1619; + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1707; + goto yy1773; + } else { + if (yych <= '\n') goto yy1707; + if (yych <= '\f') goto yy1773; + goto yy1707; + } } else { - if (yych <= '\n') goto yy1588; - if (yych <= '\f') goto yy1619; - goto yy1588; + if (yych <= '(') { + if (yych <= ' ') goto yy1773; + goto yy1771; + } else { + if (yych <= ')') goto yy1773; + if (yych <= '<') goto yy1736; + goto yy1762; + } } } else { - if (yych <= ')') { - if (yych == '(') goto yy1617; - goto yy1619; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') goto yy1758; + goto yy1707; + } else { + if (yych <= 0xDF) goto yy1764; + if (yych <= 0xE0) goto yy1765; + goto yy1766; + } } else { - if (yych <= '=') goto yy1603; - if (yych <= '>') goto yy1615; - goto yy1611; + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1770; + if (yych <= 0xEF) goto yy1766; + goto yy1767; + } else { + if (yych <= 0xF3) goto yy1768; + if (yych <= 0xF4) goto yy1769; + goto yy1707; + } } } -yy1593: - yych = *++p; - if (yych <= '\'') goto yy1604; - if (yych <= '(') goto yy1607; - if (yych <= ')') goto yy1603; - goto yy1604; -yy1594: +yy1712: yyaccept = 0; yych = *(marker = ++p); - goto yy1604; -yy1595: + if (yych <= '\'') goto yy1737; + if (yych <= '(') goto yy1747; + if (yych <= ')') goto yy1736; + goto yy1737; +yy1713: + yyaccept = 0; + yych = *(marker = ++p); + goto yy1737; +yy1714: + yych = *++p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1713; +yy1715: + p = marker; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy1707; + } else { + goto yy1723; + } + } else { + goto yy1763; + } +yy1716: + yych = *++p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1714; + goto yy1715; +yy1717: + yych = *++p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1714; + goto yy1715; +yy1718: + yych = *++p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1717; + goto yy1715; +yy1719: + yych = *++p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1717; + goto yy1715; +yy1720: + yych = *++p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1717; + goto yy1715; +yy1721: + yych = *++p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1714; + goto yy1715; +yy1722: yyaccept = 1; yych = *(marker = ++p); - if (yych <= ' ') goto yy1596; - if (yych != '(') goto yy1599; -yy1596: + if (yych <= '(') { + if (yych <= ' ') goto yy1723; + if (yych <= '\'') goto yy1728; + } else { + if (yych <= 0x7F) goto yy1728; + if (yych <= 0xC1) goto yy1723; + if (yych <= 0xF4) goto yy1728; + } +yy1723: { return 0; } -yy1597: +yy1724: yych = *++p; - goto yy1596; -yy1598: + goto yy1723; +yy1725: ++p; yych = *p; -yy1599: if (yybm[0+yych] & 16) { - goto yy1598; + goto yy1725; } - if (yych <= '(') goto yy1600; - if (yych <= ')') goto yy1603; - goto yy1601; -yy1600: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy1588; + if (yych <= 0xE0) { + if (yych <= ')') { + if (yych <= ' ') goto yy1715; + if (yych >= ')') goto yy1747; } else { - goto yy1596; + if (yych <= 0x7F) goto yy1727; + if (yych <= 0xC1) goto yy1715; + if (yych <= 0xDF) goto yy1729; + goto yy1730; } } else { - goto yy1616; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1735; + goto yy1731; + } else { + if (yych <= 0xF0) goto yy1732; + if (yych <= 0xF3) goto yy1733; + if (yych <= 0xF4) goto yy1734; + goto yy1715; + } } -yy1601: +yy1727: ++p; yych = *p; +yy1728: if (yybm[0+yych] & 32) { - goto yy1601; + goto yy1727; } - if (yych <= ' ') goto yy1600; - if (yych == ')') goto yy1607; - goto yy1598; -yy1603: - yyaccept = 0; - marker = ++p; - yych = *p; -yy1604: - if (yych <= '(') { - if (yych <= ' ') goto yy1588; - if (yych <= '\'') goto yy1603; - goto yy1598; + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= '(') goto yy1715; + if (yych <= ')') goto yy1736; + goto yy1725; + } else { + if (yych <= 0xC1) goto yy1715; + if (yych >= 0xE0) goto yy1730; + } } else { - if (yych <= ')') goto yy1588; - if (yych != '\\') goto yy1603; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1735; + goto yy1731; + } else { + if (yych <= 0xF0) goto yy1732; + if (yych <= 0xF3) goto yy1733; + if (yych <= 0xF4) goto yy1734; + goto yy1715; + } } -yy1605: +yy1729: ++p; yych = *p; - if (yych <= '(') { - if (yych <= ' ') goto yy1588; - if (yych <= '\'') goto yy1603; - } else { - if (yych == '\\') goto yy1605; - goto yy1603; - } -yy1607: - yyaccept = 0; - marker = ++p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1727; + goto yy1715; +yy1730: + ++p; yych = *p; -yy1608: - if (yych <= '(') { - if (yych <= ' ') goto yy1588; - if (yych <= '\'') goto yy1607; - goto yy1598; - } else { - if (yych <= ')') goto yy1603; - if (yych != '\\') goto yy1607; - } -yy1609: + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1729; + goto yy1715; +yy1731: ++p; yych = *p; - if (yych <= ' ') goto yy1588; - if (yych == '\\') goto yy1609; - goto yy1607; -yy1611: + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1729; + goto yy1715; +yy1732: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1731; + goto yy1715; +yy1733: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1731; + goto yy1715; +yy1734: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1731; + goto yy1715; +yy1735: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1729; + goto yy1715; +yy1736: yyaccept = 0; marker = ++p; yych = *p; - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1588; - if (yych <= '\t') goto yy1619; - goto yy1588; +yy1737: + if (yych <= 0xC1) { + if (yych <= ')') { + if (yych <= ' ') goto yy1707; + if (yych <= '\'') goto yy1736; + if (yych <= '(') goto yy1727; + goto yy1707; } else { - if (yych == '\r') goto yy1588; - goto yy1619; + if (yych == '\\') goto yy1738; + if (yych <= 0x7F) goto yy1736; + goto yy1707; } } else { - if (yych <= '=') { - if (yych == '(') goto yy1628; + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1740; + if (yych <= 0xE0) goto yy1741; + if (yych <= 0xEC) goto yy1742; + goto yy1746; } else { - if (yych <= '>') goto yy1635; - if (yych == '\\') goto yy1611; + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1742; + goto yy1743; + } else { + if (yych <= 0xF3) goto yy1744; + if (yych <= 0xF4) goto yy1745; + goto yy1707; + } } } -yy1613: +yy1738: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= 0xDF) { + if (yych <= '[') { + if (yych <= ' ') goto yy1707; + if (yych == '(') goto yy1747; + goto yy1736; + } else { + if (yych <= '\\') goto yy1738; + if (yych <= 0x7F) goto yy1736; + if (yych <= 0xC1) goto yy1707; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1741; + if (yych == 0xED) goto yy1746; + goto yy1742; + } else { + if (yych <= 0xF0) goto yy1743; + if (yych <= 0xF3) goto yy1744; + if (yych <= 0xF4) goto yy1745; + goto yy1707; + } + } +yy1740: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1736; + goto yy1715; +yy1741: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1740; + goto yy1715; +yy1742: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1740; + goto yy1715; +yy1743: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1742; + goto yy1715; +yy1744: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1742; + goto yy1715; +yy1745: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1742; + goto yy1715; +yy1746: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1740; + goto yy1715; +yy1747: + yyaccept = 0; + marker = ++p; + yych = *p; +yy1748: + if (yych <= 0xC1) { + if (yych <= ')') { + if (yych <= ' ') goto yy1707; + if (yych <= '\'') goto yy1747; + if (yych <= '(') goto yy1727; + goto yy1736; + } else { + if (yych == '\\') goto yy1749; + if (yych <= 0x7F) goto yy1747; + goto yy1707; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1751; + if (yych <= 0xE0) goto yy1752; + if (yych <= 0xEC) goto yy1753; + goto yy1757; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) goto yy1755; + if (yych <= 0xF4) goto yy1756; + goto yy1707; + } + } + } +yy1749: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= ' ') goto yy1707; + if (yych <= '[') goto yy1747; + goto yy1749; + } else { + if (yych <= 0x7F) goto yy1747; + if (yych <= 0xC1) goto yy1707; + if (yych >= 0xE0) goto yy1752; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1757; + goto yy1753; + } else { + if (yych <= 0xF0) goto yy1754; + if (yych <= 0xF3) goto yy1755; + if (yych <= 0xF4) goto yy1756; + goto yy1707; + } + } +yy1751: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1747; + goto yy1715; +yy1752: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1751; + goto yy1715; +yy1753: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1751; + goto yy1715; +yy1754: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1753; + goto yy1715; +yy1755: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1753; + goto yy1715; +yy1756: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1753; + goto yy1715; +yy1757: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1751; + goto yy1715; +yy1758: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '[') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1707; + goto yy1773; + } else { + if (yych <= '\n') goto yy1707; + if (yych <= '\f') goto yy1773; + goto yy1707; + } + } else { + if (yych <= '(') { + if (yych <= ' ') goto yy1773; + if (yych >= '(') goto yy1796; + } else { + if (yych == '>') goto yy1810; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') goto yy1758; + if (yych >= 0x80) goto yy1707; + } else { + if (yych <= 0xDF) goto yy1764; + if (yych <= 0xE0) goto yy1765; + goto yy1766; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1770; + if (yych <= 0xEF) goto yy1766; + goto yy1767; + } else { + if (yych <= 0xF3) goto yy1768; + if (yych <= 0xF4) goto yy1769; + goto yy1707; + } + } + } +yy1760: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1760; + } + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1707; + goto yy1773; + } else { + if (yych <= '\n') goto yy1707; + if (yych <= '\f') goto yy1773; + goto yy1707; + } + } else { + if (yych <= '(') { + if (yych <= ' ') goto yy1773; + goto yy1771; + } else { + if (yych <= ')') goto yy1773; + if (yych <= '<') goto yy1736; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') goto yy1758; + goto yy1707; + } else { + if (yych <= 0xDF) goto yy1764; + if (yych <= 0xE0) goto yy1765; + goto yy1766; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1770; + if (yych <= 0xEF) goto yy1766; + goto yy1767; + } else { + if (yych <= 0xF3) goto yy1768; + if (yych <= 0xF4) goto yy1769; + goto yy1707; + } + } + } +yy1762: + yyaccept = 2; + yych = *(marker = ++p); + if (yych <= ')') { + if (yych <= ' ') goto yy1763; + if (yych <= '(') goto yy1737; + } else { + if (yych <= 0x7F) goto yy1737; + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xF4) goto yy1737; + } +yy1763: + { return (bufsize_t)(p - start); } +yy1764: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1760; + goto yy1715; +yy1765: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1764; + goto yy1715; +yy1766: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1764; + goto yy1715; +yy1767: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1766; + goto yy1715; +yy1768: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1766; + goto yy1715; +yy1769: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1766; + goto yy1715; +yy1770: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1764; + goto yy1715; +yy1771: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy1715; + if (yych >= '\n') goto yy1715; + } else { + if (yych == '\r') goto yy1715; + } + } else { + if (yych <= ')') { + if (yych <= '\'') goto yy1771; + if (yych >= ')') goto yy1760; + } else { + if (yych == '<') goto yy1727; + if (yych <= '=') goto yy1771; + goto yy1786; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') goto yy1787; + goto yy1771; + } else { + if (yych <= 0xC1) goto yy1715; + if (yych <= 0xDF) goto yy1789; + goto yy1790; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1795; + goto yy1791; + } else { + if (yych <= 0xF0) goto yy1792; + if (yych <= 0xF3) goto yy1793; + if (yych <= 0xF4) goto yy1794; + goto yy1715; + } + } + } +yy1773: + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1773; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= '<') goto yy1715; + if (yych >= '?') goto yy1776; + } else { + if (yych <= 0xC1) goto yy1715; + if (yych <= 0xDF) goto yy1778; + goto yy1779; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1784; + goto yy1780; + } else { + if (yych <= 0xF0) goto yy1781; + if (yych <= 0xF3) goto yy1782; + if (yych <= 0xF4) goto yy1783; + goto yy1715; + } + } +yy1775: + yych = *++p; + goto yy1763; +yy1776: + ++p; + yych = *p; + if (yych <= 0x7F) { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1715; + goto yy1773; + } else { + if (yych <= '\n') goto yy1715; + if (yych <= '\f') goto yy1773; + goto yy1715; + } + } else { + if (yych <= '>') { + if (yych <= '=') goto yy1773; + goto yy1785; + } else { + if (yych == '\\') goto yy1776; + goto yy1773; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) goto yy1715; + } else { + if (yych <= 0xE0) goto yy1779; + if (yych <= 0xEC) goto yy1780; + goto yy1784; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1780; + goto yy1781; + } else { + if (yych <= 0xF3) goto yy1782; + if (yych <= 0xF4) goto yy1783; + goto yy1715; + } + } + } +yy1778: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1773; + goto yy1715; +yy1779: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1778; + goto yy1715; +yy1780: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1778; + goto yy1715; +yy1781: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1780; + goto yy1715; +yy1782: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1780; + goto yy1715; +yy1783: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1780; + goto yy1715; +yy1784: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1778; + goto yy1715; +yy1785: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1773; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= '<') goto yy1763; + if (yych <= '>') goto yy1775; + goto yy1776; + } else { + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xDF) goto yy1778; + goto yy1779; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1784; + goto yy1780; + } else { + if (yych <= 0xF0) goto yy1781; + if (yych <= 0xF3) goto yy1782; + if (yych <= 0xF4) goto yy1783; + goto yy1763; + } + } +yy1786: + yyaccept = 2; + yych = *(marker = ++p); + if (yych <= '(') { + if (yych <= ' ') goto yy1763; + if (yych <= '\'') goto yy1728; + goto yy1763; + } else { + if (yych <= 0x7F) goto yy1728; + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xF4) goto yy1728; + goto yy1763; + } +yy1787: + ++p; + yych = *p; + if (yych <= '[') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1715; + goto yy1773; + } else { + if (yych <= '\n') goto yy1715; + if (yych <= '\f') goto yy1773; + goto yy1715; + } + } else { + if (yych <= ')') { + if (yych <= ' ') goto yy1773; + if (yych <= '(') goto yy1771; + goto yy1796; + } else { + if (yych == '>') goto yy1798; + goto yy1771; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') goto yy1787; + if (yych <= 0x7F) goto yy1771; + goto yy1715; + } else { + if (yych <= 0xDF) goto yy1789; + if (yych <= 0xE0) goto yy1790; + goto yy1791; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1795; + if (yych <= 0xEF) goto yy1791; + goto yy1792; + } else { + if (yych <= 0xF3) goto yy1793; + if (yych <= 0xF4) goto yy1794; + goto yy1715; + } + } + } +yy1789: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1771; + goto yy1715; +yy1790: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1789; + goto yy1715; +yy1791: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1789; + goto yy1715; +yy1792: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1791; + goto yy1715; +yy1793: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1791; + goto yy1715; +yy1794: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1791; + goto yy1715; +yy1795: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1789; + goto yy1715; +yy1796: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy1707; + if (yych <= '\t') goto yy1773; + goto yy1707; + } else { + if (yych == '\r') goto yy1707; + goto yy1773; + } + } else { + if (yych <= ')') { + if (yych <= '\'') goto yy1796; + if (yych <= '(') goto yy1771; + goto yy1760; + } else { + if (yych == '<') goto yy1747; + if (yych <= '=') goto yy1796; + goto yy1799; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') goto yy1800; + goto yy1796; + } else { + if (yych <= 0xC1) goto yy1707; + if (yych <= 0xDF) goto yy1802; + goto yy1803; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1808; + goto yy1804; + } else { + if (yych <= 0xF0) goto yy1805; + if (yych <= 0xF3) goto yy1806; + if (yych <= 0xF4) goto yy1807; + goto yy1707; + } + } + } +yy1798: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy1763; + if (yych <= '\t') goto yy1773; + goto yy1763; + } else { + if (yych == '\r') goto yy1763; + goto yy1773; + } + } else { + if (yych <= ')') { + if (yych <= '\'') goto yy1771; + if (yych <= '(') goto yy1773; + goto yy1760; + } else { + if (yych == '<') goto yy1727; + if (yych <= '=') goto yy1771; + goto yy1786; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') goto yy1787; + goto yy1771; + } else { + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xDF) goto yy1789; + goto yy1790; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1795; + goto yy1791; + } else { + if (yych <= 0xF0) goto yy1792; + if (yych <= 0xF3) goto yy1793; + if (yych <= 0xF4) goto yy1794; + goto yy1763; + } + } + } +yy1799: + yyaccept = 2; + yych = *(marker = ++p); + if (yych <= ' ') goto yy1763; + if (yych <= 0x7F) goto yy1748; + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xF4) goto yy1748; + goto yy1763; +yy1800: yyaccept = 0; marker = ++p; yych = *p; + if (yych <= '\\') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1707; + goto yy1773; + } else { + if (yych <= '\n') goto yy1707; + if (yych <= '\f') goto yy1773; + goto yy1707; + } + } else { + if (yych <= '=') { + if (yych <= ' ') goto yy1773; + goto yy1796; + } else { + if (yych <= '>') goto yy1809; + if (yych <= '[') goto yy1796; + goto yy1800; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) goto yy1796; + goto yy1707; + } else { + if (yych <= 0xDF) goto yy1802; + if (yych <= 0xE0) goto yy1803; + goto yy1804; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1808; + if (yych <= 0xEF) goto yy1804; + goto yy1805; + } else { + if (yych <= 0xF3) goto yy1806; + if (yych <= 0xF4) goto yy1807; + goto yy1707; + } + } + } +yy1802: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1796; + goto yy1715; +yy1803: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1715; + if (yych <= 0xBF) goto yy1802; + goto yy1715; +yy1804: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1802; + goto yy1715; +yy1805: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1715; + if (yych <= 0xBF) goto yy1804; + goto yy1715; +yy1806: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0xBF) goto yy1804; + goto yy1715; +yy1807: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x8F) goto yy1804; + goto yy1715; +yy1808: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1715; + if (yych <= 0x9F) goto yy1802; + goto yy1715; +yy1809: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy1763; + if (yych <= '\t') goto yy1773; + goto yy1763; + } else { + if (yych == '\r') goto yy1763; + goto yy1773; + } + } else { + if (yych <= ')') { + if (yych <= '\'') goto yy1796; + if (yych <= '(') goto yy1771; + goto yy1760; + } else { + if (yych == '<') goto yy1747; + if (yych <= '=') goto yy1796; + goto yy1799; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') goto yy1800; + goto yy1796; + } else { + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xDF) goto yy1802; + goto yy1803; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1808; + goto yy1804; + } else { + if (yych <= 0xF0) goto yy1805; + if (yych <= 0xF3) goto yy1806; + if (yych <= 0xF4) goto yy1807; + goto yy1763; + } + } + } +yy1810: + yyaccept = 2; + marker = ++p; + yych = *p; if (yybm[0+yych] & 64) { - goto yy1613; + goto yy1760; + } + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) goto yy1763; + goto yy1773; + } else { + if (yych <= '\n') goto yy1763; + if (yych <= '\f') goto yy1773; + goto yy1763; + } + } else { + if (yych <= '(') { + if (yych <= ' ') goto yy1773; + goto yy1771; + } else { + if (yych <= ')') goto yy1773; + if (yych <= '<') goto yy1736; + goto yy1762; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') goto yy1758; + goto yy1763; + } else { + if (yych <= 0xDF) goto yy1764; + if (yych <= 0xE0) goto yy1765; + goto yy1766; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1770; + if (yych <= 0xEF) goto yy1766; + goto yy1767; + } else { + if (yych <= 0xF3) goto yy1768; + if (yych <= 0xF4) goto yy1769; + goto yy1763; + } + } } - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1588; - goto yy1619; +} + +} + +// Try to match a link title (in single quotes, in double quotes, or +// in parentheses), returning number of chars matched. Allow one +// level of internal nesting (quotes within quotes). +bufsize_t _scan_link_title(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 96, 224, 224, 224, 224, 160, + 224, 192, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 16, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 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 <= 0xC1) { + if (yych <= '"') { + if (yych == '\n') goto yy1813; + if (yych <= '!') goto yy1817; + goto yy1814; + } else { + if (yych <= '\'') { + if (yych <= '&') goto yy1817; + goto yy1815; + } else { + if (yych <= '(') goto yy1816; + if (yych <= 0x7F) goto yy1817; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1818; + if (yych <= 0xE0) goto yy1820; + if (yych <= 0xEC) goto yy1821; + goto yy1825; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1821; + goto yy1822; + } else { + if (yych <= 0xF3) goto yy1823; + if (yych <= 0xF4) goto yy1824; + } + } + } +yy1813: + { return 0; } +yy1814: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) goto yy1813; + if (yych <= 0x7F) goto yy1857; + if (yych <= 0xC1) goto yy1813; + if (yych <= 0xF4) goto yy1857; + goto yy1813; +yy1815: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) goto yy1813; + if (yych <= 0x7F) goto yy1843; + if (yych <= 0xC1) goto yy1813; + if (yych <= 0xF4) goto yy1843; + goto yy1813; +yy1816: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) goto yy1813; + if (yych <= 0x7F) goto yy1829; + if (yych <= 0xC1) goto yy1813; + if (yych <= 0xF4) goto yy1829; + goto yy1813; +yy1817: + yych = *++p; + goto yy1813; +yy1818: + yych = *++p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1817; +yy1819: + p = marker; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy1813; } else { - if (yych <= '\n') goto yy1588; - if (yych <= '\f') goto yy1619; - goto yy1588; + goto yy1838; } } else { - if (yych <= ')') { - if (yych == '(') goto yy1617; - goto yy1619; + if (yyaccept == 2) { + goto yy1852; } else { - if (yych <= '=') goto yy1603; - if (yych >= '?') goto yy1611; + goto yy1866; } } -yy1615: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ' ') goto yy1616; - if (yych != ')') goto yy1604; -yy1616: - { return (bufsize_t)(p - start); } -yy1617: +yy1820: + yych = *++p; + if (yych <= 0x9F) goto yy1819; + if (yych <= 0xBF) goto yy1818; + goto yy1819; +yy1821: + yych = *++p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1818; + goto yy1819; +yy1822: + yych = *++p; + if (yych <= 0x8F) goto yy1819; + if (yych <= 0xBF) goto yy1821; + goto yy1819; +yy1823: + yych = *++p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1821; + goto yy1819; +yy1824: + yych = *++p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x8F) goto yy1821; + goto yy1819; +yy1825: + yych = *++p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x9F) goto yy1818; + goto yy1819; +yy1826: ++p; yych = *p; - if (yych <= '(') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy1600; - if (yych == '\n') goto yy1600; + if (yybm[0+yych] & 32) { + goto yy1828; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1819; + if (yych <= ')') goto yy1839; + goto yy1826; } else { - if (yych <= '\r') goto yy1600; - if (yych <= ' ') goto yy1619; - if (yych <= '\'') goto yy1617; + if (yych <= 0xC1) goto yy1819; + if (yych <= 0xDF) goto yy1830; + goto yy1831; } } else { - if (yych <= '=') { - if (yych <= ')') goto yy1613; - if (yych == '<') goto yy1598; - goto yy1617; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1836; + goto yy1832; } else { - if (yych <= '>') goto yy1625; - if (yych == '\\') goto yy1626; - goto yy1617; + if (yych <= 0xF0) goto yy1833; + if (yych <= 0xF3) goto yy1834; + if (yych <= 0xF4) goto yy1835; + goto yy1819; } } -yy1619: +yy1828: ++p; yych = *p; - if (yybm[0+yych] & 128) { - goto yy1619; +yy1829: + if (yybm[0+yych] & 32) { + goto yy1828; } - if (yych <= '=') goto yy1600; - if (yych >= '?') goto yy1622; -yy1621: - yych = *++p; - goto yy1616; -yy1622: - ++p; - yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1600; - goto yy1619; + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1819; + if (yych <= ')') goto yy1837; + goto yy1826; } else { - if (yych <= '\n') goto yy1600; - if (yych <= '\f') goto yy1619; - goto yy1600; + if (yych <= 0xC1) goto yy1819; + if (yych >= 0xE0) goto yy1831; } } else { - if (yych <= '>') { - if (yych <= '=') goto yy1619; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1836; + goto yy1832; } else { - if (yych == '\\') goto yy1622; - goto yy1619; + if (yych <= 0xF0) goto yy1833; + if (yych <= 0xF3) goto yy1834; + if (yych <= 0xF4) goto yy1835; + goto yy1819; } } - yyaccept = 2; - marker = ++p; +yy1830: + ++p; yych = *p; - if (yybm[0+yych] & 128) { - goto yy1619; - } - if (yych <= '=') goto yy1616; - if (yych <= '>') goto yy1621; - goto yy1622; -yy1625: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ' ') goto yy1616; - if (yych == '(') goto yy1616; - goto yy1599; -yy1626: + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1828; + goto yy1819; +yy1831: ++p; yych = *p; - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1600; - if (yych <= '\t') goto yy1619; - goto yy1600; - } else { - if (yych == '\r') goto yy1600; - goto yy1619; - } - } else { - if (yych <= '=') { - if (yych != ')') goto yy1617; - } else { - if (yych <= '>') goto yy1630; - if (yych == '\\') goto yy1626; - goto yy1617; - } - } -yy1628: - yyaccept = 0; + if (yych <= 0x9F) goto yy1819; + if (yych <= 0xBF) goto yy1830; + goto yy1819; +yy1832: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1830; + goto yy1819; +yy1833: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1819; + if (yych <= 0xBF) goto yy1832; + goto yy1819; +yy1834: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1832; + goto yy1819; +yy1835: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x8F) goto yy1832; + goto yy1819; +yy1836: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x9F) goto yy1830; + goto yy1819; +yy1837: + ++p; +yy1838: + { return (bufsize_t)(p - start); } +yy1839: + yyaccept = 1; marker = ++p; yych = *p; - if (yych <= '(') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy1588; - if (yych == '\n') goto yy1588; - goto yy1619; + if (yybm[0+yych] & 32) { + goto yy1828; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1838; + if (yych <= ')') goto yy1837; + goto yy1826; } else { - if (yych <= '\r') goto yy1588; - if (yych <= ' ') goto yy1619; - if (yych <= '\'') goto yy1628; - goto yy1617; + if (yych <= 0xC1) goto yy1838; + if (yych <= 0xDF) goto yy1830; + goto yy1831; } } else { - if (yych <= '=') { - if (yych <= ')') goto yy1613; - if (yych == '<') goto yy1607; - goto yy1628; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1836; + goto yy1832; } else { - if (yych <= '>') goto yy1631; - if (yych == '\\') goto yy1632; - goto yy1628; + if (yych <= 0xF0) goto yy1833; + if (yych <= 0xF3) goto yy1834; + if (yych <= 0xF4) goto yy1835; + goto yy1838; } } -yy1630: - yyaccept = 2; - marker = ++p; +yy1840: + ++p; yych = *p; - if (yych <= '(') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy1616; - if (yych == '\n') goto yy1616; - goto yy1619; + if (yybm[0+yych] & 64) { + goto yy1842; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1819; + if (yych <= '\'') goto yy1853; + goto yy1840; } else { - if (yych <= '\r') goto yy1616; - if (yych <= ' ') goto yy1619; - if (yych <= '\'') goto yy1617; - goto yy1619; + if (yych <= 0xC1) goto yy1819; + if (yych <= 0xDF) goto yy1844; + goto yy1845; } } else { - if (yych <= '=') { - if (yych <= ')') goto yy1613; - if (yych == '<') goto yy1598; - goto yy1617; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1850; + goto yy1846; } else { - if (yych <= '>') goto yy1625; - if (yych == '\\') goto yy1626; - goto yy1617; + if (yych <= 0xF0) goto yy1847; + if (yych <= 0xF3) goto yy1848; + if (yych <= 0xF4) goto yy1849; + goto yy1819; } } -yy1631: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ' ') goto yy1616; - goto yy1608; -yy1632: - yyaccept = 0; - marker = ++p; +yy1842: + ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1588; - goto yy1619; +yy1843: + if (yybm[0+yych] & 64) { + goto yy1842; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1819; + if (yych <= '\'') goto yy1851; + goto yy1840; } else { - if (yych <= '\n') goto yy1588; - if (yych <= '\f') goto yy1619; - goto yy1588; + if (yych <= 0xC1) goto yy1819; + if (yych >= 0xE0) goto yy1845; } } else { - if (yych <= '>') { - if (yych <= ' ') goto yy1619; - if (yych <= '=') goto yy1628; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1850; + goto yy1846; } else { - if (yych == '\\') goto yy1632; - goto yy1628; + if (yych <= 0xF0) goto yy1847; + if (yych <= 0xF3) goto yy1848; + if (yych <= 0xF4) goto yy1849; + goto yy1819; } } +yy1844: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1842; + goto yy1819; +yy1845: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1819; + if (yych <= 0xBF) goto yy1844; + goto yy1819; +yy1846: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1844; + goto yy1819; +yy1847: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1819; + if (yych <= 0xBF) goto yy1846; + goto yy1819; +yy1848: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1846; + goto yy1819; +yy1849: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x8F) goto yy1846; + goto yy1819; +yy1850: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x9F) goto yy1844; + goto yy1819; +yy1851: + ++p; +yy1852: + { return (bufsize_t)(p - start); } +yy1853: yyaccept = 2; marker = ++p; yych = *p; - if (yych <= '(') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy1616; - if (yych == '\n') goto yy1616; - goto yy1619; + if (yybm[0+yych] & 64) { + goto yy1842; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1852; + if (yych <= '\'') goto yy1851; + goto yy1840; } else { - if (yych <= '\r') goto yy1616; - if (yych <= ' ') goto yy1619; - if (yych <= '\'') goto yy1628; - goto yy1617; + if (yych <= 0xC1) goto yy1852; + if (yych <= 0xDF) goto yy1844; + goto yy1845; } } else { - if (yych <= '=') { - if (yych <= ')') goto yy1613; - if (yych == '<') goto yy1607; - goto yy1628; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1850; + goto yy1846; } else { - if (yych <= '>') goto yy1631; - if (yych == '\\') goto yy1632; - goto yy1628; + if (yych <= 0xF0) goto yy1847; + if (yych <= 0xF3) goto yy1848; + if (yych <= 0xF4) goto yy1849; + goto yy1852; } } -yy1635: - yyaccept = 2; - marker = ++p; +yy1854: + ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy1613; + if (yybm[0+yych] & 128) { + goto yy1856; } - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1616; - goto yy1619; + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1819; + if (yych <= '"') goto yy1867; + goto yy1854; } else { - if (yych <= '\n') goto yy1616; - if (yych <= '\f') goto yy1619; - goto yy1616; + if (yych <= 0xC1) goto yy1819; + if (yych <= 0xDF) goto yy1858; + goto yy1859; } } else { - if (yych <= ')') { - if (yych == '(') goto yy1617; - goto yy1619; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1864; + goto yy1860; } else { - if (yych <= '=') goto yy1603; - if (yych <= '>') goto yy1615; - goto yy1611; + if (yych <= 0xF0) goto yy1861; + if (yych <= 0xF3) goto yy1862; + if (yych <= 0xF4) goto yy1863; + goto yy1819; } } -} - -} - -// Try to match a link title (in single quotes, in double quotes, or -// in parentheses), returning number of chars matched. Allow one -// level of internal nesting (quotes within quotes). -bufsize_t _scan_link_title(const unsigned char *p) -{ - const unsigned char *marker = NULL; - const unsigned char *start = p; - -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 80, 208, 208, 208, 208, 144, - 208, 192, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 32, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - }; - yych = *p; - if (yych <= '"') { - if (yych == '\n') goto yy1638; - if (yych <= '!') goto yy1642; - goto yy1639; - } else { - if (yych <= '&') goto yy1642; - if (yych <= '\'') goto yy1640; - if (yych <= '(') goto yy1641; - goto yy1642; - } -yy1638: - { return 0; } -yy1639: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1638; - goto yy1659; -yy1640: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1638; - goto yy1652; -yy1641: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1638; - goto yy1644; -yy1642: - yych = *++p; - goto yy1638; -yy1643: +yy1856: ++p; yych = *p; -yy1644: - if (yybm[0+yych] & 16) { - goto yy1643; +yy1857: + if (yybm[0+yych] & 128) { + goto yy1856; } - if (yych <= 0x00) goto yy1645; - if (yych <= '[') goto yy1648; - goto yy1646; -yy1645: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy1638; + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1819; + if (yych <= '"') goto yy1865; + goto yy1854; } else { - goto yy1649; + if (yych <= 0xC1) goto yy1819; + if (yych >= 0xE0) goto yy1859; } } else { - if (yyaccept == 2) { - goto yy1656; + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1864; + goto yy1860; } else { - goto yy1663; + if (yych <= 0xF0) goto yy1861; + if (yych <= 0xF3) goto yy1862; + if (yych <= 0xF4) goto yy1863; + goto yy1819; } } -yy1646: +yy1858: ++p; yych = *p; - if (yybm[0+yych] & 16) { - goto yy1643; - } - if (yych <= 0x00) goto yy1645; - if (yych <= '[') goto yy1650; - goto yy1646; -yy1648: + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1856; + goto yy1819; +yy1859: ++p; -yy1649: - { return (bufsize_t)(p - start); } -yy1650: - yyaccept = 1; - marker = ++p; yych = *p; - if (yybm[0+yych] & 16) { - goto yy1643; - } - if (yych <= 0x00) goto yy1649; - if (yych <= '[') goto yy1648; - goto yy1646; -yy1651: + if (yych <= 0x9F) goto yy1819; + if (yych <= 0xBF) goto yy1858; + goto yy1819; +yy1860: ++p; yych = *p; -yy1652: - if (yybm[0+yych] & 64) { - goto yy1651; - } - if (yych <= 0x00) goto yy1645; - if (yych <= '[') goto yy1655; -yy1653: + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1858; + goto yy1819; +yy1861: ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy1651; - } - if (yych <= 0x00) goto yy1645; - if (yych <= '[') goto yy1657; - goto yy1653; -yy1655: + if (yych <= 0x8F) goto yy1819; + if (yych <= 0xBF) goto yy1860; + goto yy1819; +yy1862: ++p; -yy1656: - { return (bufsize_t)(p - start); } -yy1657: - yyaccept = 2; - marker = ++p; yych = *p; - if (yybm[0+yych] & 64) { - goto yy1651; - } - if (yych <= 0x00) goto yy1656; - if (yych <= '[') goto yy1655; - goto yy1653; -yy1658: + if (yych <= 0x7F) goto yy1819; + if (yych <= 0xBF) goto yy1860; + goto yy1819; +yy1863: ++p; yych = *p; -yy1659: - if (yybm[0+yych] & 128) { - goto yy1658; - } - if (yych <= 0x00) goto yy1645; - if (yych <= '[') goto yy1662; -yy1660: + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x8F) goto yy1860; + goto yy1819; +yy1864: ++p; yych = *p; - if (yybm[0+yych] & 128) { - goto yy1658; - } - if (yych <= 0x00) goto yy1645; - if (yych <= '[') goto yy1664; - goto yy1660; -yy1662: + if (yych <= 0x7F) goto yy1819; + if (yych <= 0x9F) goto yy1858; + goto yy1819; +yy1865: ++p; -yy1663: +yy1866: { return (bufsize_t)(p - start); } -yy1664: +yy1867: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1658; + goto yy1856; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) goto yy1866; + if (yych <= '"') goto yy1865; + goto yy1854; + } else { + if (yych <= 0xC1) goto yy1866; + if (yych <= 0xDF) goto yy1858; + goto yy1859; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1864; + goto yy1860; + } else { + if (yych <= 0xF0) goto yy1861; + if (yych <= 0xF3) goto yy1862; + if (yych <= 0xF4) goto yy1863; + goto yy1866; + } } - if (yych <= 0x00) goto yy1663; - if (yych <= '[') goto yy1662; - goto yy1660; } } @@ -13924,6 +16267,7 @@ yy1664: // Match space characters, including newlines. bufsize_t _scan_spacechars(const unsigned char *p) { + const unsigned char *marker = NULL; const unsigned char *start = p; \ { @@ -13962,32 +16306,85 @@ bufsize_t _scan_spacechars(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *p; - if (yych <= '\n') { - if (yych <= 0x08) goto yy1671; - if (yych <= '\t') goto yy1668; - goto yy1669; + yych = *(marker = p); + if (yych <= 0xC1) { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1874; + if (yych == '\n') goto yy1872; + goto yy1871; + } else { + if (yych == ' ') goto yy1871; + if (yych <= 0x7F) goto yy1874; + } } else { - if (yych <= '\r') goto yy1668; - if (yych == ' ') goto yy1668; - goto yy1671; + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1876; + if (yych <= 0xE0) goto yy1878; + if (yych <= 0xEC) goto yy1879; + goto yy1883; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1879; + goto yy1880; + } else { + if (yych <= 0xF3) goto yy1881; + if (yych <= 0xF4) goto yy1882; + } + } } -yy1667: +yy1870: { return (bufsize_t)(p - start); } -yy1668: +yy1871: yych = *++p; - goto yy1670; -yy1669: + goto yy1873; +yy1872: ++p; yych = *p; -yy1670: +yy1873: if (yybm[0+yych] & 128) { - goto yy1669; + goto yy1872; } - goto yy1667; -yy1671: + goto yy1870; +yy1874: ++p; { return 0; } +yy1876: + yych = *++p; + if (yych <= 0x7F) goto yy1877; + if (yych <= 0xBF) goto yy1874; +yy1877: + p = marker; + goto yy1870; +yy1878: + yych = *++p; + if (yych <= 0x9F) goto yy1877; + if (yych <= 0xBF) goto yy1876; + goto yy1877; +yy1879: + yych = *++p; + if (yych <= 0x7F) goto yy1877; + if (yych <= 0xBF) goto yy1876; + goto yy1877; +yy1880: + yych = *++p; + if (yych <= 0x8F) goto yy1877; + if (yych <= 0xBF) goto yy1879; + goto yy1877; +yy1881: + yych = *++p; + if (yych <= 0x7F) goto yy1877; + if (yych <= 0xBF) goto yy1879; + goto yy1877; +yy1882: + yych = *++p; + if (yych <= 0x7F) goto yy1877; + if (yych <= 0x8F) goto yy1879; + goto yy1877; +yy1883: + ++p; + if ((yych = *p) <= 0x7F) goto yy1877; + if (yych <= 0x9F) goto yy1876; + goto yy1877; } } @@ -14034,94 +16431,144 @@ bufsize_t _scan_atx_header_start(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *p; - if (yych == '\n') goto yy1675; - if (yych == '#') goto yy1676; - goto yy1677; -yy1675: + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '"') { + if (yych != '\n') goto yy1888; + } else { + if (yych <= '#') goto yy1887; + if (yych <= 0x7F) goto yy1888; + if (yych >= 0xC2) goto yy1889; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1891; + if (yych == 0xED) goto yy1896; + goto yy1892; + } else { + if (yych <= 0xF0) goto yy1893; + if (yych <= 0xF3) goto yy1894; + if (yych <= 0xF4) goto yy1895; + } + } +yy1886: { return 0; } -yy1676: +yy1887: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1680; + goto yy1899; } if (yych <= '\f') { - if (yych == '\n') goto yy1678; - goto yy1675; + if (yych == '\n') goto yy1897; + goto yy1886; } else { - if (yych <= '\r') goto yy1678; - if (yych == '#') goto yy1682; - goto yy1675; + if (yych <= '\r') goto yy1897; + if (yych == '#') goto yy1901; + goto yy1886; } -yy1677: +yy1888: yych = *++p; - goto yy1675; -yy1678: + goto yy1886; +yy1889: + yych = *++p; + if (yych <= 0x7F) goto yy1890; + if (yych <= 0xBF) goto yy1888; +yy1890: + p = marker; + goto yy1886; +yy1891: + yych = *++p; + if (yych <= 0x9F) goto yy1890; + if (yych <= 0xBF) goto yy1889; + goto yy1890; +yy1892: + yych = *++p; + if (yych <= 0x7F) goto yy1890; + if (yych <= 0xBF) goto yy1889; + goto yy1890; +yy1893: + yych = *++p; + if (yych <= 0x8F) goto yy1890; + if (yych <= 0xBF) goto yy1892; + goto yy1890; +yy1894: + yych = *++p; + if (yych <= 0x7F) goto yy1890; + if (yych <= 0xBF) goto yy1892; + goto yy1890; +yy1895: + yych = *++p; + if (yych <= 0x7F) goto yy1890; + if (yych <= 0x8F) goto yy1892; + goto yy1890; +yy1896: + yych = *++p; + if (yych <= 0x7F) goto yy1890; + if (yych <= 0x9F) goto yy1889; + goto yy1890; +yy1897: ++p; -yy1679: +yy1898: { return (bufsize_t)(p - start); } -yy1680: +yy1899: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1680; + goto yy1899; } - goto yy1679; -yy1682: + goto yy1898; +yy1901: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1680; + goto yy1899; } if (yych <= '\f') { - if (yych == '\n') goto yy1678; + if (yych == '\n') goto yy1897; + goto yy1890; } else { - if (yych <= '\r') goto yy1678; - if (yych == '#') goto yy1684; + if (yych <= '\r') goto yy1897; + if (yych != '#') goto yy1890; } -yy1683: - p = marker; - goto yy1675; -yy1684: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1680; + goto yy1899; } if (yych <= '\f') { - if (yych == '\n') goto yy1678; - goto yy1683; + if (yych == '\n') goto yy1897; + goto yy1890; } else { - if (yych <= '\r') goto yy1678; - if (yych != '#') goto yy1683; + if (yych <= '\r') goto yy1897; + if (yych != '#') goto yy1890; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1680; + goto yy1899; } if (yych <= '\f') { - if (yych == '\n') goto yy1678; - goto yy1683; + if (yych == '\n') goto yy1897; + goto yy1890; } else { - if (yych <= '\r') goto yy1678; - if (yych != '#') goto yy1683; + if (yych <= '\r') goto yy1897; + if (yych != '#') goto yy1890; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1680; + goto yy1899; } if (yych <= '\f') { - if (yych == '\n') goto yy1678; - goto yy1683; + if (yych == '\n') goto yy1897; + goto yy1890; } else { - if (yych <= '\r') goto yy1678; - if (yych != '#') goto yy1683; + if (yych <= '\r') goto yy1897; + if (yych != '#') goto yy1890; } ++p; if (yybm[0+(yych = *p)] & 128) { - goto yy1680; + goto yy1899; } - if (yych == '\n') goto yy1678; - if (yych == '\r') goto yy1678; - goto yy1683; + if (yych == '\n') goto yy1897; + if (yych == '\r') goto yy1897; + goto yy1890; } } @@ -14168,99 +16615,151 @@ bufsize_t _scan_setext_header_line(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *p; - if (yych <= ',') { - if (yych != '\n') goto yy1693; + yych = *(marker = p); + if (yych <= 0xC1) { + if (yych <= '-') { + if (yych == '\n') goto yy1908; + if (yych <= ',') goto yy1911; + goto yy1910; + } else { + if (yych == '=') goto yy1909; + if (yych <= 0x7F) goto yy1911; + } } else { - if (yych <= '-') goto yy1692; - if (yych == '=') goto yy1691; - goto yy1693; + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1912; + if (yych <= 0xE0) goto yy1914; + if (yych <= 0xEC) goto yy1915; + goto yy1919; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1915; + goto yy1916; + } else { + if (yych <= 0xF3) goto yy1917; + if (yych <= 0xF4) goto yy1918; + } + } } -yy1690: +yy1908: { return 0; } -yy1691: +yy1909: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1705; + goto yy1930; } if (yych <= '\f') { - if (yych == '\n') goto yy1703; - goto yy1690; + if (yych == '\n') goto yy1928; + goto yy1908; } else { - if (yych <= '\r') goto yy1703; - if (yych == ' ') goto yy1701; - goto yy1690; + if (yych <= '\r') goto yy1928; + if (yych == ' ') goto yy1926; + goto yy1908; } -yy1692: +yy1910: yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1694; + goto yy1920; } if (yych <= '\f') { - if (yych == '\n') goto yy1697; - goto yy1690; + if (yych == '\n') goto yy1922; + goto yy1908; } else { - if (yych <= '\r') goto yy1697; - if (yych == '-') goto yy1699; - goto yy1690; + if (yych <= '\r') goto yy1922; + if (yych == '-') goto yy1924; + goto yy1908; } -yy1693: +yy1911: yych = *++p; - goto yy1690; -yy1694: + goto yy1908; +yy1912: + yych = *++p; + if (yych <= 0x7F) goto yy1913; + if (yych <= 0xBF) goto yy1911; +yy1913: + p = marker; + goto yy1908; +yy1914: + yych = *++p; + if (yych <= 0x9F) goto yy1913; + if (yych <= 0xBF) goto yy1912; + goto yy1913; +yy1915: + yych = *++p; + if (yych <= 0x7F) goto yy1913; + if (yych <= 0xBF) goto yy1912; + goto yy1913; +yy1916: + yych = *++p; + if (yych <= 0x8F) goto yy1913; + if (yych <= 0xBF) goto yy1915; + goto yy1913; +yy1917: + yych = *++p; + if (yych <= 0x7F) goto yy1913; + if (yych <= 0xBF) goto yy1915; + goto yy1913; +yy1918: + yych = *++p; + if (yych <= 0x7F) goto yy1913; + if (yych <= 0x8F) goto yy1915; + goto yy1913; +yy1919: + yych = *++p; + if (yych <= 0x7F) goto yy1913; + if (yych <= 0x9F) goto yy1912; + goto yy1913; +yy1920: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1694; + goto yy1920; } - if (yych == '\n') goto yy1697; - if (yych == '\r') goto yy1697; -yy1696: - p = marker; - goto yy1690; -yy1697: + if (yych == '\n') goto yy1922; + if (yych != '\r') goto yy1913; +yy1922: ++p; { return 2; } -yy1699: +yy1924: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1694; + goto yy1920; } if (yych <= '\f') { - if (yych == '\n') goto yy1697; - goto yy1696; + if (yych == '\n') goto yy1922; + goto yy1913; } else { - if (yych <= '\r') goto yy1697; - if (yych == '-') goto yy1699; - goto yy1696; + if (yych <= '\r') goto yy1922; + if (yych == '-') goto yy1924; + goto yy1913; } -yy1701: +yy1926: ++p; yych = *p; if (yych <= '\f') { - if (yych != '\n') goto yy1696; + if (yych != '\n') goto yy1913; } else { - if (yych <= '\r') goto yy1703; - if (yych == ' ') goto yy1701; - goto yy1696; + if (yych <= '\r') goto yy1928; + if (yych == ' ') goto yy1926; + goto yy1913; } -yy1703: +yy1928: ++p; { return 1; } -yy1705: +yy1930: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1705; + goto yy1930; } if (yych <= '\f') { - if (yych == '\n') goto yy1703; - goto yy1696; + if (yych == '\n') goto yy1928; + goto yy1913; } else { - if (yych <= '\r') goto yy1703; - if (yych == ' ') goto yy1701; - goto yy1696; + if (yych <= '\r') goto yy1928; + if (yych == ' ') goto yy1926; + goto yy1913; } } @@ -14310,155 +16809,210 @@ bufsize_t _scan_hrule(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *p; - if (yych <= '*') { - if (yych == '\n') goto yy1709; - if (yych <= ')') goto yy1713; - goto yy1710; + yych = *(marker = p); + if (yych <= 0x7F) { + if (yych <= '*') { + if (yych == '\n') goto yy1934; + if (yych <= ')') goto yy1938; + goto yy1935; + } else { + if (yych <= '-') { + if (yych <= ',') goto yy1938; + goto yy1937; + } else { + if (yych == '_') goto yy1936; + goto yy1938; + } + } } else { - if (yych <= '-') { - if (yych <= ',') goto yy1713; - goto yy1712; + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych >= 0xC2) goto yy1939; + } else { + if (yych <= 0xE0) goto yy1941; + if (yych <= 0xEC) goto yy1942; + goto yy1946; + } } else { - if (yych == '_') goto yy1711; - goto yy1713; + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1942; + goto yy1943; + } else { + if (yych <= 0xF3) goto yy1944; + if (yych <= 0xF4) goto yy1945; + } } } -yy1709: +yy1934: { return 0; } -yy1710: +yy1935: yych = *(marker = ++p); - if (yych == ' ') goto yy1735; - if (yych == '*') goto yy1737; - goto yy1709; -yy1711: + if (yych == ' ') goto yy1967; + if (yych == '*') goto yy1969; + goto yy1934; +yy1936: yych = *(marker = ++p); - if (yych == ' ') goto yy1725; - if (yych == '_') goto yy1727; - goto yy1709; -yy1712: + if (yych == ' ') goto yy1957; + if (yych == '_') goto yy1959; + goto yy1934; +yy1937: yych = *(marker = ++p); if (yybm[0+yych] & 8) { - goto yy1714; + goto yy1947; } - if (yych == '-') goto yy1717; - goto yy1709; -yy1713: + if (yych == '-') goto yy1949; + goto yy1934; +yy1938: yych = *++p; - goto yy1709; -yy1714: + goto yy1934; +yy1939: + yych = *++p; + if (yych <= 0x7F) goto yy1940; + if (yych <= 0xBF) goto yy1938; +yy1940: + p = marker; + goto yy1934; +yy1941: + yych = *++p; + if (yych <= 0x9F) goto yy1940; + if (yych <= 0xBF) goto yy1939; + goto yy1940; +yy1942: + yych = *++p; + if (yych <= 0x7F) goto yy1940; + if (yych <= 0xBF) goto yy1939; + goto yy1940; +yy1943: + yych = *++p; + if (yych <= 0x8F) goto yy1940; + if (yych <= 0xBF) goto yy1942; + goto yy1940; +yy1944: + yych = *++p; + if (yych <= 0x7F) goto yy1940; + if (yych <= 0xBF) goto yy1942; + goto yy1940; +yy1945: + yych = *++p; + if (yych <= 0x7F) goto yy1940; + if (yych <= 0x8F) goto yy1942; + goto yy1940; +yy1946: + yych = *++p; + if (yych <= 0x7F) goto yy1940; + if (yych <= 0x9F) goto yy1939; + goto yy1940; +yy1947: ++p; yych = *p; if (yybm[0+yych] & 8) { - goto yy1714; + goto yy1947; } - if (yych == '-') goto yy1717; -yy1716: - p = marker; - goto yy1709; -yy1717: + if (yych != '-') goto yy1940; +yy1949: ++p; yych = *p; - if (yych == ' ') goto yy1717; - if (yych != '-') goto yy1716; -yy1719: + if (yych == ' ') goto yy1949; + if (yych != '-') goto yy1940; +yy1951: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1719; + goto yy1951; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1716; - if (yych >= '\n') goto yy1723; + if (yych <= 0x08) goto yy1940; + if (yych >= '\n') goto yy1955; } else { - if (yych == '\r') goto yy1723; - goto yy1716; + if (yych == '\r') goto yy1955; + goto yy1940; } -yy1721: +yy1953: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1721; + goto yy1953; } - if (yych == '\n') goto yy1723; - if (yych != '\r') goto yy1716; -yy1723: + if (yych <= 0x08) goto yy1940; + if (yych <= '\n') goto yy1955; + if (yych != '\r') goto yy1940; +yy1955: ++p; { return (bufsize_t)(p - start); } -yy1725: +yy1957: ++p; yych = *p; - if (yych == ' ') goto yy1725; - if (yych != '_') goto yy1716; -yy1727: + if (yych == ' ') goto yy1957; + if (yych != '_') goto yy1940; +yy1959: ++p; yych = *p; - if (yych == ' ') goto yy1727; - if (yych != '_') goto yy1716; -yy1729: + if (yych == ' ') goto yy1959; + if (yych != '_') goto yy1940; +yy1961: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1729; + goto yy1961; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1716; - if (yych >= '\n') goto yy1733; + if (yych <= 0x08) goto yy1940; + if (yych >= '\n') goto yy1965; } else { - if (yych == '\r') goto yy1733; - goto yy1716; + if (yych == '\r') goto yy1965; + goto yy1940; } -yy1731: +yy1963: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1716; - if (yych <= '\t') goto yy1731; - if (yych >= '\v') goto yy1716; + if (yych <= 0x08) goto yy1940; + if (yych <= '\t') goto yy1963; + if (yych >= '\v') goto yy1940; } else { - if (yych <= '\r') goto yy1733; - if (yych == ' ') goto yy1731; - goto yy1716; + if (yych <= '\r') goto yy1965; + if (yych == ' ') goto yy1963; + goto yy1940; } -yy1733: +yy1965: ++p; { return (bufsize_t)(p - start); } -yy1735: +yy1967: ++p; yych = *p; - if (yych == ' ') goto yy1735; - if (yych != '*') goto yy1716; -yy1737: + if (yych == ' ') goto yy1967; + if (yych != '*') goto yy1940; +yy1969: ++p; yych = *p; - if (yych == ' ') goto yy1737; - if (yych != '*') goto yy1716; -yy1739: + if (yych == ' ') goto yy1969; + if (yych != '*') goto yy1940; +yy1971: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1739; + goto yy1971; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1716; - if (yych >= '\n') goto yy1743; + if (yych <= 0x08) goto yy1940; + if (yych >= '\n') goto yy1975; } else { - if (yych == '\r') goto yy1743; - goto yy1716; + if (yych == '\r') goto yy1975; + goto yy1940; } -yy1741: +yy1973: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1716; - if (yych <= '\t') goto yy1741; - if (yych >= '\v') goto yy1716; + if (yych <= 0x08) goto yy1940; + if (yych <= '\t') goto yy1973; + if (yych >= '\v') goto yy1940; } else { - if (yych <= '\r') goto yy1743; - if (yych == ' ') goto yy1741; - goto yy1716; + if (yych <= '\r') goto yy1975; + if (yych == ' ') goto yy1973; + goto yy1940; } -yy1743: +yy1975: ++p; { return (bufsize_t)(p - start); } } @@ -14490,99 +17044,310 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 144, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 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 = *p; - if (yych <= '_') { - if (yych != '\n') goto yy1750; - } else { - if (yych <= '`') goto yy1748; - if (yych == '~') goto yy1749; - goto yy1750; + yych = *(marker = p); + if (yych <= 0xC1) { + if (yych <= '`') { + if (yych == '\n') goto yy1979; + if (yych <= '_') goto yy1982; + goto yy1980; + } else { + if (yych == '~') goto yy1981; + if (yych <= 0x7F) goto yy1982; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1983; + if (yych <= 0xE0) goto yy1985; + if (yych <= 0xEC) goto yy1986; + goto yy1990; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1986; + goto yy1987; + } else { + if (yych <= 0xF3) goto yy1988; + if (yych <= 0xF4) goto yy1989; + } + } } -yy1747: +yy1979: { return 0; } -yy1748: +yy1980: yych = *(marker = ++p); - if (yych == '`') goto yy1759; - goto yy1747; -yy1749: + if (yych == '`') goto yy2005; + goto yy1979; +yy1981: yych = *(marker = ++p); - if (yych == '~') goto yy1751; - goto yy1747; -yy1750: + if (yych == '~') goto yy1991; + goto yy1979; +yy1982: yych = *++p; - goto yy1747; -yy1751: + goto yy1979; +yy1983: + yych = *++p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy1982; +yy1984: + p = marker; + goto yy1979; +yy1985: + yych = *++p; + if (yych <= 0x9F) goto yy1984; + if (yych <= 0xBF) goto yy1983; + goto yy1984; +yy1986: + yych = *++p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy1983; + goto yy1984; +yy1987: + yych = *++p; + if (yych <= 0x8F) goto yy1984; + if (yych <= 0xBF) goto yy1986; + goto yy1984; +yy1988: + yych = *++p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy1986; + goto yy1984; +yy1989: + yych = *++p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0x8F) goto yy1986; + goto yy1984; +yy1990: + yych = *++p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0x9F) goto yy1983; + goto yy1984; +yy1991: yych = *++p; if (yybm[0+yych] & 16) { - goto yy1753; + goto yy1992; } -yy1752: - p = marker; - goto yy1747; -yy1753: + goto yy1984; +yy1992: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1755; + goto yy1994; } - if (yych <= 0x00) goto yy1752; - if (yych <= '}') goto yy1757; - goto yy1753; -yy1755: + if (yych <= 0xE0) { + if (yych <= '~') { + if (yych <= 0x00) goto yy1984; + if (yych <= '\r') goto yy2003; + goto yy1992; + } else { + if (yych <= 0xC1) goto yy1984; + if (yych <= 0xDF) goto yy1996; + goto yy1997; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy2002; + goto yy1998; + } else { + if (yych <= 0xF0) goto yy1999; + if (yych <= 0xF3) goto yy2000; + if (yych <= 0xF4) goto yy2001; + goto yy1984; + } + } +yy1994: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1755; + goto yy1994; } - if (yych <= 0x00) goto yy1752; - if (yych >= '~') goto yy1752; -yy1757: + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1984; + if (yych <= '\r') goto yy2003; + goto yy1984; + } else { + if (yych <= 0xDF) goto yy1996; + if (yych <= 0xE0) goto yy1997; + goto yy1998; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy2002; + if (yych <= 0xEF) goto yy1998; + goto yy1999; + } else { + if (yych <= 0xF3) goto yy2000; + if (yych <= 0xF4) goto yy2001; + goto yy1984; + } + } +yy1996: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy1994; + goto yy1984; +yy1997: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1984; + if (yych <= 0xBF) goto yy1996; + goto yy1984; +yy1998: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy1996; + goto yy1984; +yy1999: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1984; + if (yych <= 0xBF) goto yy1998; + goto yy1984; +yy2000: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy1998; + goto yy1984; +yy2001: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0x8F) goto yy1998; + goto yy1984; +yy2002: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0x9F) goto yy1996; + goto yy1984; +yy2003: ++p; p = marker; { return (bufsize_t)(p - start); } -yy1759: +yy2005: yych = *++p; if (yybm[0+yych] & 64) { - goto yy1760; + goto yy2006; } - goto yy1752; -yy1760: + goto yy1984; +yy2006: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1762; + goto yy2008; } - if (yych <= 0x00) goto yy1752; - if (yych <= '_') goto yy1764; - goto yy1760; -yy1762: + if (yych <= 0xE0) { + if (yych <= '`') { + if (yych <= 0x00) goto yy1984; + if (yych <= '\r') goto yy2017; + goto yy2006; + } else { + if (yych <= 0xC1) goto yy1984; + if (yych <= 0xDF) goto yy2010; + goto yy2011; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy2016; + goto yy2012; + } else { + if (yych <= 0xF0) goto yy2013; + if (yych <= 0xF3) goto yy2014; + if (yych <= 0xF4) goto yy2015; + goto yy1984; + } + } +yy2008: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1762; + goto yy2008; } - if (yych <= 0x00) goto yy1752; - if (yych >= '`') goto yy1752; -yy1764: + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1984; + if (yych <= '\r') goto yy2017; + goto yy1984; + } else { + if (yych <= 0xDF) goto yy2010; + if (yych <= 0xE0) goto yy2011; + goto yy2012; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy2016; + if (yych <= 0xEF) goto yy2012; + goto yy2013; + } else { + if (yych <= 0xF3) goto yy2014; + if (yych <= 0xF4) goto yy2015; + goto yy1984; + } + } +yy2010: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy2008; + goto yy1984; +yy2011: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1984; + if (yych <= 0xBF) goto yy2010; + goto yy1984; +yy2012: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy2010; + goto yy1984; +yy2013: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1984; + if (yych <= 0xBF) goto yy2012; + goto yy1984; +yy2014: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0xBF) goto yy2012; + goto yy1984; +yy2015: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0x8F) goto yy2012; + goto yy1984; +yy2016: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1984; + if (yych <= 0x9F) goto yy2010; + goto yy1984; +yy2017: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -14632,97 +17397,152 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *p; - if (yych <= '_') { - if (yych != '\n') goto yy1771; - } else { - if (yych <= '`') goto yy1769; - if (yych == '~') goto yy1770; - goto yy1771; + yych = *(marker = p); + if (yych <= 0xC1) { + if (yych <= '`') { + if (yych == '\n') goto yy2021; + if (yych <= '_') goto yy2024; + goto yy2022; + } else { + if (yych == '~') goto yy2023; + if (yych <= 0x7F) goto yy2024; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy2025; + if (yych <= 0xE0) goto yy2027; + if (yych <= 0xEC) goto yy2028; + goto yy2032; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy2028; + goto yy2029; + } else { + if (yych <= 0xF3) goto yy2030; + if (yych <= 0xF4) goto yy2031; + } + } } -yy1768: +yy2021: { return 0; } -yy1769: +yy2022: yych = *(marker = ++p); - if (yych == '`') goto yy1780; - goto yy1768; -yy1770: + if (yych == '`') goto yy2040; + goto yy2021; +yy2023: yych = *(marker = ++p); - if (yych == '~') goto yy1772; - goto yy1768; -yy1771: + if (yych == '~') goto yy2033; + goto yy2021; +yy2024: + yych = *++p; + goto yy2021; +yy2025: yych = *++p; - goto yy1768; -yy1772: + if (yych <= 0x7F) goto yy2026; + if (yych <= 0xBF) goto yy2024; +yy2026: + p = marker; + goto yy2021; +yy2027: + yych = *++p; + if (yych <= 0x9F) goto yy2026; + if (yych <= 0xBF) goto yy2025; + goto yy2026; +yy2028: + yych = *++p; + if (yych <= 0x7F) goto yy2026; + if (yych <= 0xBF) goto yy2025; + goto yy2026; +yy2029: + yych = *++p; + if (yych <= 0x8F) goto yy2026; + if (yych <= 0xBF) goto yy2028; + goto yy2026; +yy2030: + yych = *++p; + if (yych <= 0x7F) goto yy2026; + if (yych <= 0xBF) goto yy2028; + goto yy2026; +yy2031: + yych = *++p; + if (yych <= 0x7F) goto yy2026; + if (yych <= 0x8F) goto yy2028; + goto yy2026; +yy2032: + yych = *++p; + if (yych <= 0x7F) goto yy2026; + if (yych <= 0x9F) goto yy2025; + goto yy2026; +yy2033: yych = *++p; if (yybm[0+yych] & 32) { - goto yy1774; + goto yy2034; } -yy1773: - p = marker; - goto yy1768; -yy1774: + goto yy2026; +yy2034: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1776; + goto yy2036; } if (yych <= '\f') { - if (yych == '\n') goto yy1778; - goto yy1773; + if (yych <= 0x08) goto yy2026; + if (yych <= '\n') goto yy2038; + goto yy2026; } else { - if (yych <= '\r') goto yy1778; - if (yych == '~') goto yy1774; - goto yy1773; + if (yych <= '\r') goto yy2038; + if (yych == '~') goto yy2034; + goto yy2026; } -yy1776: +yy2036: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1776; + goto yy2036; } - if (yych == '\n') goto yy1778; - if (yych != '\r') goto yy1773; -yy1778: + if (yych <= 0x08) goto yy2026; + if (yych <= '\n') goto yy2038; + if (yych != '\r') goto yy2026; +yy2038: ++p; p = marker; { return (bufsize_t)(p - start); } -yy1780: +yy2040: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1781; + goto yy2041; } - goto yy1773; -yy1781: + goto yy2026; +yy2041: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1781; + goto yy2041; } if (yych <= '\f') { - if (yych <= 0x08) goto yy1773; - if (yych <= '\t') goto yy1783; - if (yych <= '\n') goto yy1785; - goto yy1773; + if (yych <= 0x08) goto yy2026; + if (yych <= '\t') goto yy2043; + if (yych <= '\n') goto yy2045; + goto yy2026; } else { - if (yych <= '\r') goto yy1785; - if (yych != ' ') goto yy1773; + if (yych <= '\r') goto yy2045; + if (yych != ' ') goto yy2026; } -yy1783: +yy2043: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1773; - if (yych <= '\t') goto yy1783; - if (yych >= '\v') goto yy1773; + if (yych <= 0x08) goto yy2026; + if (yych <= '\t') goto yy2043; + if (yych >= '\v') goto yy2026; } else { - if (yych <= '\r') goto yy1785; - if (yych == ' ') goto yy1783; - goto yy1773; + if (yych <= '\r') goto yy2045; + if (yych == ' ') goto yy2043; + goto yy2026; } -yy1785: +yy2045: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -14739,665 +17559,717 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; - yych = *p; - if (yych == '\n') goto yy1789; - if (yych == '&') goto yy1790; - goto yy1791; -yy1789: + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '%') { + if (yych != '\n') goto yy2051; + } else { + if (yych <= '&') goto yy2050; + if (yych <= 0x7F) goto yy2051; + if (yych >= 0xC2) goto yy2052; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy2054; + if (yych == 0xED) goto yy2059; + goto yy2055; + } else { + if (yych <= 0xF0) goto yy2056; + if (yych <= 0xF3) goto yy2057; + if (yych <= 0xF4) goto yy2058; + } + } +yy2049: { return 0; } -yy1790: +yy2050: yych = *(marker = ++p); if (yych <= '@') { - if (yych == '#') goto yy1792; - goto yy1789; + if (yych == '#') goto yy2060; + goto yy2049; } else { - if (yych <= 'Z') goto yy1794; - if (yych <= '`') goto yy1789; - if (yych <= 'z') goto yy1794; - goto yy1789; + if (yych <= 'Z') goto yy2061; + if (yych <= '`') goto yy2049; + if (yych <= 'z') goto yy2061; + goto yy2049; } -yy1791: +yy2051: yych = *++p; - goto yy1789; -yy1792: + goto yy2049; +yy2052: + yych = *++p; + if (yych <= 0x7F) goto yy2053; + if (yych <= 0xBF) goto yy2051; +yy2053: + p = marker; + goto yy2049; +yy2054: + yych = *++p; + if (yych <= 0x9F) goto yy2053; + if (yych <= 0xBF) goto yy2052; + goto yy2053; +yy2055: + yych = *++p; + if (yych <= 0x7F) goto yy2053; + if (yych <= 0xBF) goto yy2052; + goto yy2053; +yy2056: + yych = *++p; + if (yych <= 0x8F) goto yy2053; + if (yych <= 0xBF) goto yy2055; + goto yy2053; +yy2057: + yych = *++p; + if (yych <= 0x7F) goto yy2053; + if (yych <= 0xBF) goto yy2055; + goto yy2053; +yy2058: + yych = *++p; + if (yych <= 0x7F) goto yy2053; + if (yych <= 0x8F) goto yy2055; + goto yy2053; +yy2059: + yych = *++p; + if (yych <= 0x7F) goto yy2053; + if (yych <= 0x9F) goto yy2052; + goto yy2053; +yy2060: yych = *++p; if (yych <= 'W') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1829; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2096; + goto yy2053; } else { - if (yych <= 'X') goto yy1828; - if (yych == 'x') goto yy1828; + if (yych <= 'X') goto yy2095; + if (yych == 'x') goto yy2095; + goto yy2053; } -yy1793: - p = marker; - goto yy1789; -yy1794: +yy2061: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1793; - if (yych >= ':') goto yy1793; + if (yych <= '/') goto yy2053; + if (yych >= ':') goto yy2053; } else { - if (yych <= 'Z') goto yy1795; - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= 'Z') goto yy2062; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } -yy1795: +yy2062: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1798; - if (yych <= ':') goto yy1793; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2065; + if (yych <= ':') goto yy2053; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; - goto yy1798; + if (yych <= '@') goto yy2053; + goto yy2065; } else { - if (yych <= '`') goto yy1793; - if (yych <= 'z') goto yy1798; - goto yy1793; + if (yych <= '`') goto yy2053; + if (yych <= 'z') goto yy2065; + goto yy2053; } } -yy1796: +yy2063: ++p; { return (bufsize_t)(p - start); } -yy1798: +yy2065: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1799; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2066; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1799: +yy2066: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1800; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2067; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1800: +yy2067: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1801; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2068; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1801: +yy2068: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1802; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2069; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1802: +yy2069: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1803; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2070; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1803: +yy2070: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1804; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2071; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1804: +yy2071: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1805; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2072; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1805: +yy2072: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1806; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2073; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1806: +yy2073: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1807; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2074; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1807: +yy2074: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1808; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2075; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1808: +yy2075: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1809; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2076; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1809: +yy2076: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1810; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2077; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1810: +yy2077: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1811; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2078; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1811: +yy2078: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1812; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2079; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1812: +yy2079: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1813; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2080; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1813: +yy2080: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1814; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2081; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1814: +yy2081: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1815; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2082; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1815: +yy2082: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1816; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2083; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1816: +yy2083: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1817; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2084; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1817: +yy2084: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1818; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2085; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1818: +yy2085: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1819; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2086; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1819: +yy2086: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1820; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2087; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1820: +yy2087: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1821; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2088; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1821: +yy2088: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1822; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2089; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1822: +yy2089: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1823; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2090; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1823: +yy2090: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1824; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2091; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1824: +yy2091: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1825; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2092; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1825: +yy2092: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1826; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2093; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1826: +yy2093: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1827; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2094; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= '{') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= '{') goto yy2053; } } -yy1827: +yy2094: yych = *++p; - if (yych == ';') goto yy1796; - goto yy1793; -yy1828: + if (yych == ';') goto yy2063; + goto yy2053; +yy2095: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1836; - goto yy1793; - } else { - if (yych <= 'F') goto yy1836; - if (yych <= '`') goto yy1793; - if (yych <= 'f') goto yy1836; - goto yy1793; - } -yy1829: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1830; - if (yych == ';') goto yy1796; - goto yy1793; -yy1830: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1831; - if (yych == ';') goto yy1796; - goto yy1793; -yy1831: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1832; - if (yych == ';') goto yy1796; - goto yy1793; -yy1832: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1833; - if (yych == ';') goto yy1796; - goto yy1793; -yy1833: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1834; - if (yych == ';') goto yy1796; - goto yy1793; -yy1834: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1835; - if (yych == ';') goto yy1796; - goto yy1793; -yy1835: - yych = *++p; - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1827; - if (yych == ';') goto yy1796; - goto yy1793; -yy1836: + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2103; + goto yy2053; + } else { + if (yych <= 'F') goto yy2103; + if (yych <= '`') goto yy2053; + if (yych <= 'f') goto yy2103; + goto yy2053; + } +yy2096: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2097; + if (yych == ';') goto yy2063; + goto yy2053; +yy2097: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2098; + if (yych == ';') goto yy2063; + goto yy2053; +yy2098: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2099; + if (yych == ';') goto yy2063; + goto yy2053; +yy2099: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2100; + if (yych == ';') goto yy2063; + goto yy2053; +yy2100: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2101; + if (yych == ';') goto yy2063; + goto yy2053; +yy2101: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2102; + if (yych == ';') goto yy2063; + goto yy2053; +yy2102: + yych = *++p; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2094; + if (yych == ';') goto yy2063; + goto yy2053; +yy2103: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1837; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2104; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= 'g') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= 'g') goto yy2053; } } -yy1837: +yy2104: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1838; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2105; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= 'g') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= 'g') goto yy2053; } } -yy1838: +yy2105: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1839; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2106; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= 'g') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= 'g') goto yy2053; } } -yy1839: +yy2106: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1840; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2107; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= 'g') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= 'g') goto yy2053; } } -yy1840: +yy2107: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1841; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2108; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= 'g') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= 'g') goto yy2053; } } -yy1841: +yy2108: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1842; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2109; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; + if (yych <= '@') goto yy2053; } else { - if (yych <= '`') goto yy1793; - if (yych >= 'g') goto yy1793; + if (yych <= '`') goto yy2053; + if (yych >= 'g') goto yy2053; } } -yy1842: +yy2109: ++p; if ((yych = *p) <= ';') { - if (yych <= '/') goto yy1793; - if (yych <= '9') goto yy1827; - if (yych <= ':') goto yy1793; - goto yy1796; + if (yych <= '/') goto yy2053; + if (yych <= '9') goto yy2094; + if (yych <= ':') goto yy2053; + goto yy2063; } else { if (yych <= 'F') { - if (yych <= '@') goto yy1793; - goto yy1827; + if (yych <= '@') goto yy2053; + goto yy2094; } else { - if (yych <= '`') goto yy1793; - if (yych <= 'f') goto yy1827; - goto yy1793; + if (yych <= '`') goto yy2053; + if (yych <= 'f') goto yy2094; + goto yy2053; } } } diff --git a/src/scanners.re b/src/scanners.re index dfe15872fe..8707a8d040 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -164,6 +164,7 @@ bufsize_t _scan_link_title(const unsigned char *p) // Match space characters, including newlines. bufsize_t _scan_spacechars(const unsigned char *p) { + const unsigned char *marker = NULL; const unsigned char *start = p; \ /*!re2c [ \t\v\f\r\n]* { return (bufsize_t)(p - start); } -- cgit 0.0.5-2-1-g0f52 From 46e9ed6e0c118dc6b6a4a4833d6c960701849fdb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 12:46:37 -0700 Subject: commonmark writer: correctly handle email autolinks. --- src/commonmark.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 4594748138..07377a0ab5 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -240,6 +240,8 @@ is_autolink(cmark_node *node) cmark_chunk *title; cmark_chunk *url; cmark_node *link_text; + char *realurl; + int realurllen; if (node->type != CMARK_NODE_LINK) { return false; @@ -258,8 +260,14 @@ is_autolink(cmark_node *node) link_text = node->first_child; cmark_consolidate_text_nodes(link_text); - return (url->len == link_text->as.literal.len && - strncmp((char*)url->data, + realurl = (char*)url->data; + realurllen = url->len; + if (strncmp(realurl, "mailto:", 7) == 0) { + realurl += 7; + realurllen -= 7; + } + return (realurllen == link_text->as.literal.len && + strncmp(realurl, (char*)link_text->as.literal.data, link_text->as.literal.len) == 0); } -- cgit 0.0.5-2-1-g0f52 From afc1b89ac71b642a841c8b79ea0ec6b70d2adae5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 3 Jul 2015 22:12:49 -0700 Subject: Added LaTeX renderer. * New exported function in API: `cmark_render_latex`. * Added src/latex.hs. * Updated README and man page. * Closes #31. --- Makefile | 2 +- README.md | 4 +- man/man1/cmark.1 | 4 +- man/man3/cmark.3 | 8 +- src/CMakeLists.txt | 1 + src/cmark.h | 5 + src/latex.c | 609 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 10 +- 8 files changed, 635 insertions(+), 8 deletions(-) create mode 100644 src/latex.c diff --git a/Makefile b/Makefile index f11431c554..ddcd105850 100644 --- a/Makefile +++ b/Makefile @@ -132,7 +132,7 @@ $(ALLTESTS): $(SPEC) leakcheck: $(ALLTESTS) rc=0; \ - for format in html man xml commonmark; do \ + 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; \ diff --git a/README.md b/README.md index b9be9b1f18..c0ca22d8ff 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ rationalized version of Markdown syntax with a [spec][the spec]. It provides a shared library (`libcmark`) with functions for parsing CommonMark documents to an abstract syntax tree (AST), manipulating -the AST, and rendering the document to HTML, groff man, +the AST, and rendering the document to HTML, groff man, LaTeX, CommonMark, or an XML representation of the AST. It also provides a command-line program (`cmark`) for parsing and rendering CommonMark documents. @@ -43,7 +43,7 @@ Advantages of this library: - **Flexible.** CommonMark input is parsed to an AST which can be manipulated programatically prior to rendering. -- **Multiple renderers.** Output in HTML, groff man, CommonMark, +- **Multiple renderers.** Output in HTML, groff man, LaTeX, CommonMark, and a custom XML format is supported. And it is easy to write new renderers to support other formats. diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 8c1c2c7d2f..64fa69710b 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -10,7 +10,7 @@ file* .SH "DESCRIPTION" \fBcmark\fR converts Markdown formatted plain text to either HTML, groff man, -CommonMark XML, or CommonMark, using the conventions +CommonMark XML, LaTeX, or CommonMark, using the conventions described in the CommonMark spec. It reads input from \fIstdin\fR or the specified files (concatenating their contents) and writes output to \fIstdout\fR. @@ -18,7 +18,7 @@ output to \fIstdout\fR. .TP 12n .B \-\-to, \-t \f[I]FORMAT\f[] Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]xml\f[], -\f[C]commonmark\f[]). +\f[C]latex\f[], \f[C]commonmark\f[]). .TP 12n .B \-\-width \f[I]WIDTH\f[] Specify a column width to which to wrap the output. For no wrapping, use diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 6edac7bea9..6521126376 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "June 25, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "July 03, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -479,6 +479,12 @@ Render a \f[I]node\f[] tree as a groff man page, without the header. .PP Render a \f[I]node\f[] tree as a commonmark document. +.PP +\fIchar *\f[] \fBcmark_render_latex\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) + +.PP +Render a \f[I]node\f[] tree as a LaTeX document. + .PP .nf \fC diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 37a46d3cc1..0324fb4515 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,6 +32,7 @@ set(LIBRARY_SOURCES xml.c html.c commonmark.c + latex.c houdini_href_e.c houdini_html_e.c houdini_html_u.c diff --git a/src/cmark.h b/src/cmark.h index 192290c125..6618301a99 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -486,6 +486,11 @@ char *cmark_render_man(cmark_node *root, int options); CMARK_EXPORT char *cmark_render_commonmark(cmark_node *root, int options, int width); +/** Render a 'node' tree as a LaTeX document. + */ +CMARK_EXPORT +char *cmark_render_latex(cmark_node *root, int options, int width); + /** Default writer options. */ #define CMARK_OPT_DEFAULT 0 diff --git a/src/latex.c b/src/latex.c new file mode 100644 index 0000000000..5eea3a0d39 --- /dev/null +++ b/src/latex.c @@ -0,0 +1,609 @@ +#include +#include +#include +#include +#include + +#include "config.h" +#include "cmark.h" +#include "node.h" +#include "buffer.h" +#include "utf8.h" +#include "scanners.h" + +// Functions to convert cmark_nodes to commonmark strings. + +struct render_state { + int options; + cmark_strbuf* buffer; + cmark_strbuf* prefix; + int column; + int width; + int need_cr; + int enumlevel; + bufsize_t last_breakable; + bool begin_line; + bool no_wrap; + bool in_tight_list_item; + bool silence; +}; + +static inline void cr(struct render_state *state) +{ + if (state->need_cr < 1) { + state->need_cr = 1; + } +} + +static inline void blankline(struct render_state *state) +{ + if (state->need_cr < 2) { + state->need_cr = 2; + } +} + +typedef enum { + LITERAL, + NORMAL, + URL +} escaping; + +static inline void out(struct render_state *state, + cmark_chunk str, + bool wrap, + escaping escape) +{ + unsigned char* source = str.data; + int length = str.len; + unsigned char nextc; + int32_t c; + int i = 0; + int len; + cmark_chunk remainder = cmark_chunk_literal(""); + int k = state->buffer->size - 1; + + if (state->silence) + return; + + wrap = wrap && !state->no_wrap; + + if (state->in_tight_list_item && state->need_cr > 1) { + state->need_cr = 1; + } + while (state->need_cr) { + if (k < 0 || state->buffer->ptr[k] == '\n') { + k -= 1; + } else { + cmark_strbuf_putc(state->buffer, '\n'); + if (state->need_cr > 1) { + cmark_strbuf_put(state->buffer, state->prefix->ptr, + state->prefix->size); + } + } + state->column = 0; + state->begin_line = true; + state->need_cr -= 1; + } + + while (i < length) { + if (state->begin_line) { + cmark_strbuf_put(state->buffer, state->prefix->ptr, + state->prefix->size); + // note: this assumes prefix is ascii: + state->column = state->prefix->size; + } + + len = utf8proc_iterate(source + i, length - i, &c); + if (len == -1) { // error condition + return; // return without rendering rest of string + } + nextc = source[i + len]; + if (c == 32 && wrap) { + if (!state->begin_line) { + cmark_strbuf_putc(state->buffer, ' '); + state->column += 1; + state->begin_line = false; + state->last_breakable = state->buffer->size - + 1; + // skip following spaces + while (source[i + 1] == ' ') { + i++; + } + } + + } else if (c == 10) { + cmark_strbuf_putc(state->buffer, '\n'); + state->column = 0; + state->begin_line = true; + state->last_breakable = 0; + } else if (escape == LITERAL) { + utf8proc_encode_char(c, state->buffer); + state->column += 2; + } else { + switch(c) { + case 123: // '{' + case 125: // '}' + case 35: // '#' + case 37: // '%' + case 38: // '&' + cmark_strbuf_putc(state->buffer, '\\'); + utf8proc_encode_char(c, state->buffer); + state->column += 2; + break; + case 36: // '$' + case 95: // '_' + if (escape == NORMAL) { + cmark_strbuf_putc(state->buffer, '\\'); + } + utf8proc_encode_char(c, state->buffer); + break; + case 45 : // '-' + if (nextc == 45) { // prevent ligature + cmark_strbuf_putc(state->buffer, '\\'); + } + utf8proc_encode_char(c, state->buffer); + break; + case 126: // '~' + if (escape == NORMAL) { + cmark_strbuf_puts(state->buffer, + "\\textasciitilde{}"); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + case 94: // '^' + cmark_strbuf_puts(state->buffer, + "\\^{}"); + break; + case 92: // '\\' + if (escape == URL) { + // / acts as path sep even on windows: + cmark_strbuf_puts(state->buffer, "/"); + } else { + cmark_strbuf_puts(state->buffer, + "\\textbackslash{}"); + } + break; + case 124: // '|' + cmark_strbuf_puts(state->buffer, + "\\textbar{}"); + break; + case 60: // '<' + cmark_strbuf_puts(state->buffer, + "\\textless{}"); + break; + case 62: // '>' + cmark_strbuf_puts(state->buffer, + "\\textgreater{}"); + break; + case 91: // '[' + case 93: // ']' + cmark_strbuf_putc(state->buffer, '{'); + utf8proc_encode_char(c, state->buffer); + cmark_strbuf_putc(state->buffer, '}'); + break; + case 39: // '\'' + cmark_strbuf_puts(state->buffer, + "\\textquotesingle{}"); + break; + case 160: // nbsp + cmark_strbuf_putc(state->buffer, '~'); + break; + case 8230: // hellip + cmark_strbuf_puts(state->buffer, "\\ldots{}"); + break; + case 8216: // lsquo + if (escape == NORMAL) { + cmark_strbuf_putc(state->buffer, '`'); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + case 8217: // rsquo + if (escape == NORMAL) { + cmark_strbuf_putc(state->buffer, '\''); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + case 8220: // ldquo + if (escape == NORMAL) { + cmark_strbuf_puts(state->buffer, "``"); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + case 8221: // rdquo + if (escape == NORMAL) { + cmark_strbuf_puts(state->buffer, "''"); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + case 8212: // emdash + if (escape == NORMAL) { + cmark_strbuf_puts(state->buffer, "---"); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + case 8211: // endash + if (escape == NORMAL) { + cmark_strbuf_puts(state->buffer, "--"); + } else { + utf8proc_encode_char(c, state->buffer); + } + break; + default: + utf8proc_encode_char(c, state->buffer); + state->column += 1; + state->begin_line = false; + } + } + + // If adding the character went beyond width, look for an + // earlier place where the line could be broken: + if (state->width > 0 && + state->column > state->width && + !state->begin_line && + state->last_breakable > 0) { + + // copy from last_breakable to remainder + cmark_chunk_set_cstr(&remainder, (char *) state->buffer->ptr + state->last_breakable + 1); + // truncate at last_breakable + cmark_strbuf_truncate(state->buffer, state->last_breakable); + // add newline, prefix, and remainder + cmark_strbuf_putc(state->buffer, '\n'); + cmark_strbuf_put(state->buffer, state->prefix->ptr, + state->prefix->size); + cmark_strbuf_put(state->buffer, remainder.data, remainder.len); + state->column = state->prefix->size + remainder.len; + cmark_chunk_free(&remainder); + state->last_breakable = 0; + state->begin_line = false; + } + + i += len; + } +} + +static void lit(struct render_state *state, char *s, bool wrap) +{ + cmark_chunk str = cmark_chunk_literal(s); + out(state, str, wrap, LITERAL); +} + +typedef enum { + NO_LINK, + URL_AUTOLINK, + EMAIL_AUTOLINK, + NORMAL_LINK +} link_type; + +static link_type +get_link_type(cmark_node *node) +{ + cmark_chunk *title; + cmark_chunk *url; + cmark_node *link_text; + char *realurl; + int realurllen; + bool isemail = false; + + if (node->type != CMARK_NODE_LINK) { + return NO_LINK; + } + + url = &node->as.link.url; + if (url->len == 0 || scan_scheme(url, 0) == 0) { + return NO_LINK; + } + + title = &node->as.link.title; + // if it has a title, we can't treat it as an autolink: + if (title->len > 0) { + return NORMAL_LINK; + } + + link_text = node->first_child; + cmark_consolidate_text_nodes(link_text); + realurl = (char*)url->data; + realurllen = url->len; + if (strncmp(realurl, "mailto:", 7) == 0) { + realurl += 7; + realurllen -= 7; + isemail = true; + } + if (realurllen == link_text->as.literal.len && + strncmp(realurl, + (char*)link_text->as.literal.data, + link_text->as.literal.len) == 0) { + if (isemail) { + return EMAIL_AUTOLINK; + } else { + return URL_AUTOLINK; + } + } else { + return NORMAL_LINK; + } +} + +// if node is a block node, returns node. +// otherwise returns first block-level node that is an ancestor of node. +static cmark_node* +get_containing_block(cmark_node *node) +{ + while (node && + (node->type < CMARK_NODE_FIRST_BLOCK || + node->type > CMARK_NODE_LAST_BLOCK)) { + node = node->parent; + } + return node; +} + +static int +S_render_node(cmark_node *node, cmark_event_type ev_type, + struct render_state *state) +{ + cmark_node *tmp; + cmark_chunk *code; + int list_number; + char list_number_string[20]; + bool entering = (ev_type == CMARK_EVENT_ENTER); + cmark_list_type list_type; + cmark_chunk list_name; + cmark_chunk url; + const char* roman_numerals[] = { "", "i", "ii", "iii", "iv", "v", + "vi", "vii", "viii", "ix", "x" }; + + // Don't adjust tight list status til we've started the list. + // Otherwise we loose the blank line between a paragraph and + // a following list. + if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && + entering)) { + tmp = get_containing_block(node); + state->in_tight_list_item = + (tmp->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent)) || + (tmp && + tmp->parent && + tmp->parent->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent->parent)); + } + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + if (!entering) { + cmark_strbuf_putc(state->buffer, '\n'); + } + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + lit(state, "\\begin{quote}", false); + cr(state); + } else { + lit(state, "\\end{quote}", false); + blankline(state); + } + break; + + case CMARK_NODE_LIST: + list_type = cmark_node_get_list_type(node); + list_name = cmark_chunk_literal( + list_type == CMARK_ORDERED_LIST ? + "enumerate" : "itemize"); + if (entering) { + if (list_type == CMARK_ORDERED_LIST) { + state->enumlevel++; + } + lit(state, "\\begin{", false); + out(state, list_name, false, false); + lit(state, "}", false); + cr(state); + list_number = cmark_node_get_list_start(node); + if (list_number > 1) { + snprintf(list_number_string, 19, + "%d", list_number); + lit(state, "\\setcounter{enum", false); + lit(state, (char *)roman_numerals[state->enumlevel], + false); + lit(state, "}{", false); + out(state, + cmark_chunk_literal(list_number_string), + false, NORMAL); + lit(state, "}", false); + cr(state); + } + } else { + if (list_type == CMARK_ORDERED_LIST) { + state->enumlevel--; + } + lit(state, "\\end{", false); + out(state, list_name, false, false); + lit(state, "}", false); + blankline(state); + } + cmark_chunk_free(&list_name); + break; + + case CMARK_NODE_ITEM: + if (entering) { + lit(state, "\\item ", false); + } else { + cr(state); + } + break; + + case CMARK_NODE_HEADER: + if (entering) { + switch (cmark_node_get_header_level(node)) { + case 1: + lit(state, "\\section", false); + break; + case 2: + lit(state, "\\subsection", false); + break; + case 3: + lit(state, "\\subsubsection", false); + break; + case 4: + lit(state, "\\paragraph", false); + break; + case 5: + lit(state, "\\subparagraph", false); + break; + } + lit(state, "{", false); + } else { + lit(state, "}", false); + blankline(state); + } + break; + + case CMARK_NODE_CODE_BLOCK: + cr(state); + lit(state, "\\begin{verbatim}", false); + cr(state); + code = &node->as.code.literal; + out(state, node->as.code.literal, false, LITERAL); + cr(state); + lit(state, "\\end{verbatim}", false); + blankline(state); + break; + + case CMARK_NODE_HTML: + break; + + case CMARK_NODE_HRULE: + blankline(state); + lit(state, "\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}", false); + blankline(state); + break; + + case CMARK_NODE_PARAGRAPH: + if (!entering) { + blankline(state); + } + break; + + case CMARK_NODE_TEXT: + out(state, node->as.literal, true, NORMAL); + break; + + case CMARK_NODE_LINEBREAK: + lit(state, "\\\\", false); + cr(state); + break; + + case CMARK_NODE_SOFTBREAK: + if (state->width == 0) { + cr(state); + } else { + lit(state, " ", true); + } + break; + + case CMARK_NODE_CODE: + lit(state, "\\texttt{", false); + out(state, node->as.literal, false, NORMAL); + lit(state, "}", false); + break; + + case CMARK_NODE_INLINE_HTML: + break; + + case CMARK_NODE_STRONG: + if (entering) { + lit(state, "\\strong{", false); + } else { + lit(state, "}", false); + } + break; + + case CMARK_NODE_EMPH: + if (entering) { + lit(state, "\\emph{", false); + } else { + lit(state, "}", false); + } + break; + + case CMARK_NODE_LINK: + if (entering) { + url = cmark_chunk_literal(cmark_node_get_url(node)); + switch(get_link_type(node)) { + case URL_AUTOLINK: + lit(state, "\\url{", false); + out(state, url, false, URL); + break; + case EMAIL_AUTOLINK: + lit(state, "\\href{", false); + out(state, url, false, URL); + lit(state, "}\\nolinkurl{", false); + break; + case NORMAL_LINK: + lit(state, "\\href{", false); + out(state, url, false, URL); + lit(state, "}{", false); + break; + case NO_LINK: + lit(state, "{", false); // error? + } + } else { + lit(state, "}", false); + } + + break; + + case CMARK_NODE_IMAGE: + if (entering) { + url = cmark_chunk_literal(cmark_node_get_url(node)); + lit(state, "\\protect\\includegraphics{", false); + out(state, url, false, URL); + lit(state, "}", false); + state->silence = true; // don't print the alt text + } else { + state->silence = false; + } + break; + + default: + assert(false); + break; + } + + return 1; +} + +char *cmark_render_latex(cmark_node *root, int options, int width) +{ + char *result; + cmark_strbuf commonmark = GH_BUF_INIT; + cmark_strbuf prefix = GH_BUF_INIT; + if (CMARK_OPT_HARDBREAKS & options) { + width = 0; + } + struct render_state state = { + options, &commonmark, &prefix, 0, width, + 0, 0, 0, true, false, false, false + }; + cmark_node *cur; + cmark_event_type ev_type; + cmark_iter *iter = cmark_iter_new(root); + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (!S_render_node(cur, ev_type, &state)) { + // a false value causes us to skip processing + // the node's contents. this is used for + // autolinks. + cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT); + } + } + result = (char *)cmark_strbuf_detach(&commonmark); + + cmark_strbuf_free(&prefix); + cmark_iter_free(iter); + return result; +} diff --git a/src/main.c b/src/main.c index 5dc97b2fdb..e20b0dc57e 100644 --- a/src/main.c +++ b/src/main.c @@ -17,14 +17,15 @@ typedef enum { FORMAT_HTML, FORMAT_XML, FORMAT_MAN, - FORMAT_COMMONMARK + FORMAT_COMMONMARK, + FORMAT_LATEX } writer_format; void print_usage() { printf("Usage: cmark [FILE*]\n"); printf("Options:\n"); - printf(" --to, -t FORMAT Specify output format (html, xml, man, commonmark)\n"); + printf(" --to, -t FORMAT Specify output format (html, xml, man, commonmark, latex)\n"); printf(" --width WIDTH Specify wrap width (default 0 = nowrap)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); @@ -52,6 +53,9 @@ static void print_document(cmark_node *document, writer_format writer, case FORMAT_COMMONMARK: result = cmark_render_commonmark(document, options, width); break; + case FORMAT_LATEX: + result = cmark_render_latex(document, options, width); + break; default: fprintf(stderr, "Unknown format %d\n", writer); exit(1); @@ -125,6 +129,8 @@ int main(int argc, char *argv[]) writer = FORMAT_XML; } else if (strcmp(argv[i], "commonmark") == 0) { writer = FORMAT_COMMONMARK; + } else if (strcmp(argv[i], "latex") == 0) { + writer = FORMAT_LATEX; } else { fprintf(stderr, "Unknown format %s\n", argv[i]); -- cgit 0.0.5-2-1-g0f52 From bbfab9f82ac8c1cabc6cbc9ed3d9e41c7473cab5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 16:31:04 -0700 Subject: astyle formatting improvements. --- src/commonmark.c | 2 +- src/latex.c | 35 ++++++++++++++++++----------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 07377a0ab5..9ad9137e38 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -260,7 +260,7 @@ is_autolink(cmark_node *node) link_text = node->first_child; cmark_consolidate_text_nodes(link_text); - realurl = (char*)url->data; + realurl = (char*)url->data; realurllen = url->len; if (strncmp(realurl, "mailto:", 7) == 0) { realurl += 7; diff --git a/src/latex.c b/src/latex.c index 5eea3a0d39..a7e74953ba 100644 --- a/src/latex.c +++ b/src/latex.c @@ -117,8 +117,8 @@ static inline void out(struct render_state *state, state->begin_line = true; state->last_breakable = 0; } else if (escape == LITERAL) { - utf8proc_encode_char(c, state->buffer); - state->column += 2; + utf8proc_encode_char(c, state->buffer); + state->column += 2; } else { switch(c) { case 123: // '{' @@ -146,14 +146,14 @@ static inline void out(struct render_state *state, case 126: // '~' if (escape == NORMAL) { cmark_strbuf_puts(state->buffer, - "\\textasciitilde{}"); + "\\textasciitilde{}"); } else { utf8proc_encode_char(c, state->buffer); } break; case 94: // '^' cmark_strbuf_puts(state->buffer, - "\\^{}"); + "\\^{}"); break; case 92: // '\\' if (escape == URL) { @@ -161,20 +161,20 @@ static inline void out(struct render_state *state, cmark_strbuf_puts(state->buffer, "/"); } else { cmark_strbuf_puts(state->buffer, - "\\textbackslash{}"); + "\\textbackslash{}"); } break; case 124: // '|' cmark_strbuf_puts(state->buffer, - "\\textbar{}"); + "\\textbar{}"); break; case 60: // '<' cmark_strbuf_puts(state->buffer, - "\\textless{}"); + "\\textless{}"); break; case 62: // '>' cmark_strbuf_puts(state->buffer, - "\\textgreater{}"); + "\\textgreater{}"); break; case 91: // '[' case 93: // ']' @@ -184,7 +184,7 @@ static inline void out(struct render_state *state, break; case 39: // '\'' cmark_strbuf_puts(state->buffer, - "\\textquotesingle{}"); + "\\textquotesingle{}"); break; case 160: // nbsp cmark_strbuf_putc(state->buffer, '~'); @@ -307,7 +307,7 @@ get_link_type(cmark_node *node) link_text = node->first_child; cmark_consolidate_text_nodes(link_text); - realurl = (char*)url->data; + realurl = (char*)url->data; realurllen = url->len; if (strncmp(realurl, "mailto:", 7) == 0) { realurl += 7; @@ -315,9 +315,9 @@ get_link_type(cmark_node *node) isemail = true; } if (realurllen == link_text->as.literal.len && - strncmp(realurl, - (char*)link_text->as.literal.data, - link_text->as.literal.len) == 0) { + strncmp(realurl, + (char*)link_text->as.literal.data, + link_text->as.literal.len) == 0) { if (isemail) { return EMAIL_AUTOLINK; } else { @@ -354,7 +354,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_chunk list_name; cmark_chunk url; const char* roman_numerals[] = { "", "i", "ii", "iii", "iv", "v", - "vi", "vii", "viii", "ix", "x" }; + "vi", "vii", "viii", "ix", "x" + }; // Don't adjust tight list status til we've started the list. // Otherwise we loose the blank line between a paragraph and @@ -391,8 +392,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LIST: list_type = cmark_node_get_list_type(node); list_name = cmark_chunk_literal( - list_type == CMARK_ORDERED_LIST ? - "enumerate" : "itemize"); + list_type == CMARK_ORDERED_LIST ? + "enumerate" : "itemize"); if (entering) { if (list_type == CMARK_ORDERED_LIST) { state->enumlevel++; @@ -404,7 +405,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, list_number = cmark_node_get_list_start(node); if (list_number > 1) { snprintf(list_number_string, 19, - "%d", list_number); + "%d", list_number); lit(state, "\\setcounter{enum", false); lit(state, (char *)roman_numerals[state->enumlevel], false); -- cgit 0.0.5-2-1-g0f52 From 497c4cc9b562ad0be09c2c2ebd901c4b937ef654 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 16:37:51 -0700 Subject: LaTeX renderer: \textbf for strong. --- src/latex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/latex.c b/src/latex.c index a7e74953ba..abaab10fb9 100644 --- a/src/latex.c +++ b/src/latex.c @@ -516,7 +516,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_STRONG: if (entering) { - lit(state, "\\strong{", false); + lit(state, "\\textbf{", false); } else { lit(state, "}", false); } -- cgit 0.0.5-2-1-g0f52 From 05177ec8b76ff095dfd58a469984a8c5bc3cd882 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 16:52:53 -0700 Subject: LaTeX writer: Fixed straight single, double quote. Added comments about required packages. --- src/latex.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/latex.c b/src/latex.c index abaab10fb9..5be0698128 100644 --- a/src/latex.c +++ b/src/latex.c @@ -182,9 +182,15 @@ static inline void out(struct render_state *state, utf8proc_encode_char(c, state->buffer); cmark_strbuf_putc(state->buffer, '}'); break; + case 34: // '"' + cmark_strbuf_puts(state->buffer, + "\\textquotedbl{}"); + // requires \usepackage[T1]{fontenc} + break; case 39: // '\'' cmark_strbuf_puts(state->buffer, "\\textquotesingle{}"); + // requires \usepackage{textcomp} break; case 160: // nbsp cmark_strbuf_putc(state->buffer, '~'); @@ -533,6 +539,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LINK: if (entering) { url = cmark_chunk_literal(cmark_node_get_url(node)); + // requires \usepackage{hyperref} switch(get_link_type(node)) { case URL_AUTOLINK: lit(state, "\\url{", false); @@ -561,6 +568,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { url = cmark_chunk_literal(cmark_node_get_url(node)); lit(state, "\\protect\\includegraphics{", false); + // requires \include{graphicx} out(state, url, false, URL); lit(state, "}", false); state->silence = true; // don't print the alt text -- cgit 0.0.5-2-1-g0f52 From 2f17435eb14c331a504611fbe5b47fd476950883 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 17:10:09 -0700 Subject: LaTeX writer: fixed some compile errors on MSVC. --- src/latex.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/latex.c b/src/latex.c index 5be0698128..50134bd54b 100644 --- a/src/latex.c +++ b/src/latex.c @@ -354,10 +354,10 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_node *tmp; cmark_chunk *code; int list_number; + int len; char list_number_string[20]; bool entering = (ev_type == CMARK_EVENT_ENTER); cmark_list_type list_type; - cmark_chunk list_name; cmark_chunk url; const char* roman_numerals[] = { "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix", "x" @@ -397,21 +397,26 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LIST: list_type = cmark_node_get_list_type(node); - list_name = cmark_chunk_literal( - list_type == CMARK_ORDERED_LIST ? - "enumerate" : "itemize"); if (entering) { if (list_type == CMARK_ORDERED_LIST) { state->enumlevel++; } lit(state, "\\begin{", false); - out(state, list_name, false, false); + lit(state, + list_type == CMARK_ORDERED_LIST ? + "enumerate" : "itemize", false); lit(state, "}", false); cr(state); list_number = cmark_node_get_list_start(node); if (list_number > 1) { - snprintf(list_number_string, 19, + len = snprintf(list_number_string, 19, "%d", list_number); +#ifndef HAVE_C99_SNPRINTF + // Assume we're on Windows. + if (len < 0) { + len = _vscprintf("%d", list_number); + } +#endif lit(state, "\\setcounter{enum", false); lit(state, (char *)roman_numerals[state->enumlevel], false); @@ -427,11 +432,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, state->enumlevel--; } lit(state, "\\end{", false); - out(state, list_name, false, false); + lit(state, + list_type == CMARK_ORDERED_LIST ? + "enumerate" : "itemize", false); lit(state, "}", false); blankline(state); } - cmark_chunk_free(&list_name); break; case CMARK_NODE_ITEM: -- cgit 0.0.5-2-1-g0f52 From 44ed9b5cb575883ba605632ac0db36b9aa99813b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 20:58:30 -0700 Subject: Fixed typo in Windows fix. --- src/latex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/latex.c b/src/latex.c index 50134bd54b..b9500bd62c 100644 --- a/src/latex.c +++ b/src/latex.c @@ -414,7 +414,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, #ifndef HAVE_C99_SNPRINTF // Assume we're on Windows. if (len < 0) { - len = _vscprintf("%d", list_number); + len = _snprintf("%d", list_number); } #endif lit(state, "\\setcounter{enum", false); -- cgit 0.0.5-2-1-g0f52 From 09e312abd6dca9e2e55050d3d4eacfd52fea8d73 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Jul 2015 22:16:23 -0700 Subject: Another try at getting snprintf part to compile on Windows. --- src/latex.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/latex.c b/src/latex.c index b9500bd62c..0148ec35d4 100644 --- a/src/latex.c +++ b/src/latex.c @@ -409,13 +409,13 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cr(state); list_number = cmark_node_get_list_start(node); if (list_number > 1) { +#ifdef HAVE_C99_SNPRINTF len = snprintf(list_number_string, 19, "%d", list_number); -#ifndef HAVE_C99_SNPRINTF +#else // Assume we're on Windows. - if (len < 0) { - len = _snprintf("%d", list_number); - } + len = _snprintf("%d", 19, + "%d", list_number); #endif lit(state, "\\setcounter{enum", false); lit(state, (char *)roman_numerals[state->enumlevel], -- cgit 0.0.5-2-1-g0f52 From 6aebde8f56e3f62cab95c601b9d608da4a9e2dc2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 6 Jul 2015 09:24:07 -0700 Subject: Use sprintf rather than snprintf because we know it won't overflow. A rendered int can't be 20 digits. --- src/latex.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/latex.c b/src/latex.c index 0148ec35d4..5a249e5f96 100644 --- a/src/latex.c +++ b/src/latex.c @@ -409,14 +409,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cr(state); list_number = cmark_node_get_list_start(node); if (list_number > 1) { -#ifdef HAVE_C99_SNPRINTF - len = snprintf(list_number_string, 19, + len = sprintf(list_number_string, "%d", list_number); -#else - // Assume we're on Windows. - len = _snprintf("%d", 19, - "%d", list_number); -#endif lit(state, "\\setcounter{enum", false); lit(state, (char *)roman_numerals[state->enumlevel], false); -- cgit 0.0.5-2-1-g0f52 From 8011e3a9e68262db3a05977d58be25fe2d171954 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 7 Jul 2015 14:30:49 -0700 Subject: Fixed compiler warnings. --- src/latex.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/latex.c b/src/latex.c index 5a249e5f96..6eaabce705 100644 --- a/src/latex.c +++ b/src/latex.c @@ -352,9 +352,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, struct render_state *state) { cmark_node *tmp; - cmark_chunk *code; int list_number; - int len; char list_number_string[20]; bool entering = (ev_type == CMARK_EVENT_ENTER); cmark_list_type list_type; @@ -409,7 +407,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cr(state); list_number = cmark_node_get_list_start(node); if (list_number > 1) { - len = sprintf(list_number_string, + sprintf(list_number_string, "%d", list_number); lit(state, "\\setcounter{enum", false); lit(state, (char *)roman_numerals[state->enumlevel], @@ -472,7 +470,6 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cr(state); lit(state, "\\begin{verbatim}", false); cr(state); - code = &node->as.code.literal; out(state, node->as.code.literal, false, LITERAL); cr(state); lit(state, "\\end{verbatim}", false); -- cgit 0.0.5-2-1-g0f52 From 7bd74a60747c2c49f5bd498707be5c4a3313842e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 7 Jul 2015 14:33:25 -0700 Subject: Updated spec_tests.py from jgm/CommonMark. This forces utf-8 encoding. --- test/spec_tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index be11f121cb..11b271cce1 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -52,7 +52,7 @@ def do_test(test, normalize, result_counts): result_counts['pass'] += 1 else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) - sys.stdout.write(test['markdown']) + sys.stdout.buffer.write(test['markdown'].encode('utf-8')) if unicode_error: print("Unicode error: " + str(unicode_error)) print("Expected: " + repr(expected_html)) @@ -62,7 +62,7 @@ def do_test(test, normalize, result_counts): actual_html_lines = actual_html.splitlines(True) for diffline in unified_diff(expected_html_lines, actual_html_lines, "expected HTML", "actual HTML"): - sys.stdout.write(diffline) + sys.stdout.buffer.write(diffline.encode('utf-8')) sys.stdout.write('\n') result_counts['fail'] += 1 else: @@ -124,7 +124,7 @@ if __name__ == "__main__": pattern_re = re.compile('.') tests = [ test for test in all_tests if re.search(pattern_re, test['section']) and (not args.number or test['example'] == args.number) ] if args.dump_tests: - print(json.dumps(tests, ensure_ascii=False, indent=2)) + sys.stdout.buffer.write(json.dumps(tests, ensure_ascii=False, indent=2).encode('utf-8')) exit(0) else: skipped = len(all_tests) - len(tests) -- cgit 0.0.5-2-1-g0f52 From e6acb7e7a43ac64d83c410b9f83c13743b934d6f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 8 Jul 2015 17:49:21 -0700 Subject: spec_tests.py: use stdout.out.buffer.write instead of print throughout. Mixing them didn't work well; results were out of order. --- test/spec_tests.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index 11b271cce1..182368ba8e 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -32,8 +32,11 @@ if __name__ == "__main__": help='only consider the test with the given number') args = parser.parse_args(sys.argv[1:]) +def out(str): + sys.stdout.buffer.write(str.encode('utf-8')) + def print_test_header(headertext, example_number, start_line, end_line): - print("Example %d (lines %d-%d) %s" % (example_number,start_line,end_line,headertext)) + out("Example %d (lines %d-%d) %s\n" % (example_number,start_line,end_line,headertext)) def do_test(test, normalize, result_counts): [retcode, actual_html, err] = cmark.to_html(test['markdown']) @@ -52,23 +55,23 @@ def do_test(test, normalize, result_counts): result_counts['pass'] += 1 else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) - sys.stdout.buffer.write(test['markdown'].encode('utf-8')) + out(test['markdown'] + '\n') if unicode_error: - print("Unicode error: " + str(unicode_error)) - print("Expected: " + repr(expected_html)) - print("Got: " + repr(actual_html)) + out("Unicode error: " + str(unicode_error) + '\n') + out("Expected: " + repr(expected_html) + '\n') + out("Got: " + repr(actual_html) + '\n') else: expected_html_lines = expected_html.splitlines(True) actual_html_lines = actual_html.splitlines(True) for diffline in unified_diff(expected_html_lines, actual_html_lines, "expected HTML", "actual HTML"): - sys.stdout.buffer.write(diffline.encode('utf-8')) - sys.stdout.write('\n') + out(diffline) + out('\n') result_counts['fail'] += 1 else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) - print("program returned error code %d" % retcode) - print(err) + out("program returned error code %d\n" % retcode) + out(err + '\n') result_counts['error'] += 1 def get_tests(specfile): @@ -114,7 +117,7 @@ def get_tests(specfile): if __name__ == "__main__": if args.debug_normalization: - print(normalize_html(sys.stdin.read())) + out(normalize_html(sys.stdin.read())) exit(0) all_tests = get_tests(args.spec) @@ -124,7 +127,7 @@ if __name__ == "__main__": pattern_re = re.compile('.') tests = [ test for test in all_tests if re.search(pattern_re, test['section']) and (not args.number or test['example'] == args.number) ] if args.dump_tests: - sys.stdout.buffer.write(json.dumps(tests, ensure_ascii=False, indent=2).encode('utf-8')) + out(json.dumps(tests, ensure_ascii=False, indent=2)) exit(0) else: skipped = len(all_tests) - len(tests) @@ -132,7 +135,7 @@ if __name__ == "__main__": result_counts = {'pass': 0, 'fail': 0, 'error': 0, 'skip': skipped} for test in tests: do_test(test, args.normalize, result_counts) - print("{pass} passed, {fail} failed, {error} errored, {skip} skipped".format(**result_counts)) + out("{pass} passed, {fail} failed, {error} errored, {skip} skipped\n".format(**result_counts)) if result_counts['fail'] == 0 and result_counts['error'] == 0: exit(0) else: -- cgit 0.0.5-2-1-g0f52 From 0ac1d6a242c3bb5a43a8131c9fe8c00c977fe5ca Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 9 Jul 2015 12:38:19 -0700 Subject: Fixed small bug in test runner. (Error printing errors from the test program.) --- test/spec_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index 182368ba8e..c6950fbb46 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -71,7 +71,7 @@ def do_test(test, normalize, result_counts): else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) out("program returned error code %d\n" % retcode) - out(err + '\n') + sys.stdout.buffer.write(err) result_counts['error'] += 1 def get_tests(specfile): -- cgit 0.0.5-2-1-g0f52 From 46a98104de76f0bd0b88a3c06f016e2c2b08ac18 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 9 Jul 2015 15:57:29 -0700 Subject: Updated test/smart_punct.txt. This incorporates the changes in jgm/commonmark.js#58. Sequences of hyphens are converted to sequences of em and en dashes, with no hyphens. Currently this test fails. --- test/smart_punct.txt | 84 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 10 deletions(-) diff --git a/test/smart_punct.txt b/test/smart_punct.txt index 14da741e79..ac13a26eb3 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -1,5 +1,9 @@ ## Smart punctuation +Open quotes are matched with closed quotes. +The same method is used for matching openers and closers +as is used in emphasis parsing: + . "Hello," said the spider. "'Shelob' is my name." @@ -28,6 +32,10 @@ So is ‘pine.’

                            ‘He said, “I want to go.”’

                            . +A single quote that isn't an open quote matched +with a close quote will be treated as an +apostrophe: + . Were you alive in the 70's? . @@ -40,12 +48,19 @@ Here is some quoted '`code`' and a "[quoted link](url)".

                            Here is some quoted ‘code’ and a “quoted link”.

                            . +Here the first `'` is treated as an apostrophe, not +an open quote, because the final single quote is matched +by the single quote before `jolly`: + . 'tis the season to be 'jolly' .

                            ’tis the season to be ‘jolly’

                            . +An unmatched double quote will be interpreted as a +left double quote, to facilitate this style: + . "A paragraph with no closing quote. @@ -55,40 +70,89 @@ Here is some quoted '`code`' and a "[quoted link](url)".

                            “Second paragraph by same speaker, in fiction.”

                            . +Quotes that are escaped come out as literal straight +quotes: + . \"This is not smart.\" This isn\'t either. +5\'8\" .

                            "This is not smart." -This isn't either.

                            +This isn't either. +5'8"

                            . +Two hyphens form an en-dash, three an em-dash. + . -Some dashes: one---two --- -three---four --- five. +Some dashes: em---em +en--en +em --- em +en -- en +2--3 . -

                            Some dashes: one—two — -three—four — five.

                            +

                            Some dashes: em—em +en–en +em — em +en – en +2–3

                            . +A sequence of more than three hyphens is +parsed as a sequence of em and/or en dashes, +with no hyphens. If possible, a homogeneous +sequence of dashes is used (so, 10 hyphens += 5 en dashes, and 9 hyphens = 3 em dashes). +When a heterogeneous sequence must be used, +the em dashes come first, followed by the en +dashes, and as few en dashes as possible are +used (so, 7 hyphens = 2 em dashes an 1 en +dash). + . -Escaped dashes: \-- \-\-\-. -. -

                            Escaped dashes: -- ---.

                            +one- +two-- +three--- +four---- +five----- +six------ +seven------- +eight-------- +nine--------- +thirteen-------------. +. +

                            one- +two– +three— +four–– +five—– +six—— +seven—–– +eight–––– +nine——— +thirteen———––.

                            . +Hyphens can be escaped: + . -Dashes between numbers: 5--7, 255--66, 1987--1999. +Escaped hyphens: \-- \-\-\-. . -

                            Dashes between numbers: 5–7, 255–66, 1987–1999.

                            +

                            Escaped hyphens: -- ---.

                            . +Three periods form an ellipsis: + . Ellipses...and...and.... .

                            Ellipses…and…and….

                            . +Periods can be escaped if ellipsis-formation +is not wanted: + . No ellipses\.\.\. . -- cgit 0.0.5-2-1-g0f52 From 039098095da3a31dd338f2a1137e673d914489ea Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 9 Jul 2015 16:18:51 -0700 Subject: Implemented new treatment of dashes with `--smart`. --- src/inlines.c | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f08e9ebcaa..c4cd7339d0 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -437,18 +437,47 @@ static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart) // Assumes we have a hyphen at the current position. static cmark_node* handle_hyphen(subject* subj, bool smart) { + int startpos = subj->pos; + advance(subj); - if (smart && peek_char(subj) == '-') { - advance(subj); - if (peek_char(subj) == '-') { - advance(subj); - return make_str(cmark_chunk_literal(EMDASH)); - } else { - return make_str(cmark_chunk_literal(ENDASH)); - } - } else { + + if (!smart || peek_char(subj) != '-') { return make_str(cmark_chunk_literal("-")); } + + while (smart && peek_char(subj) == '-') { + advance(subj); + } + + int numhyphens = subj->pos - startpos; + int en_count = 0; + int em_count = 0; + int i; + cmark_strbuf buf = GH_BUF_INIT; + + assert(numyphens > 1); + + if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes + em_count = numhyphens / 3; + } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes + en_count = numhyphens / 2; + } else if (numhyphens % 3 == 2) { // use one en dash at end + en_count = 1; + em_count = (numhyphens - 2) / 3; + } else { // use two en dashes at the end + en_count = 2; + em_count = (numhyphens - 4) / 3; + } + + for (i = em_count; i > 0; i--) { + cmark_strbuf_puts(&buf, EMDASH); + } + + for (i = en_count; i > 0; i--) { + cmark_strbuf_puts(&buf, ENDASH); + } + + return make_str(cmark_chunk_buf_detach(&buf)); } // Assumes we have a period at the current position. -- cgit 0.0.5-2-1-g0f52 From 17e6720dd9b5d25aeb906bb23915a6ee13a07e3d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 8 Jul 2015 17:42:22 -0700 Subject: Updates for new HTML block spec. * Rewrote spec for HTML blocks. A few other spec examples also changed as a result. * Removed old `html_block_tag` scanner. Added new `html_block_start` and `html_block_start_7`, as well as `html_block_end_n` for n = 1-5. * Rewrote block parser for new HTML block spec. --- src/blocks.c | 69 +- src/node.h | 1 + src/scanners.c | 8486 ++++++++++++++++++++++++++++++++++--------------------- src/scanners.h | 16 +- src/scanners.re | 83 +- test/spec.txt | 544 +++- 6 files changed, 5937 insertions(+), 3262 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 43375a4c62..61672aeae3 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -722,8 +722,23 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte } else if (container->type == NODE_HTML) { - if (parser->blank) { - all_matched = false; + switch (container->as.html_block_type) { + case 1: + case 2: + case 3: + case 4: + case 5: + // these types of blocks can accept blanks + break; + case 6: + case 7: + if (parser->blank) { + all_matched = false; + } + break; + default: + log_err("Unknown HTML block type %d", container->as.html_block_type); + exit(1); } } else if (container->type == NODE_PARAGRAPH) { @@ -789,9 +804,13 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte container->as.code.info = cmark_chunk_literal(""); S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); - } else if (!indented && (matched = scan_html_block_tag(&input, parser->first_nonspace))) { + } else if (!indented && + ((matched = scan_html_block_start(&input, parser->first_nonspace)) || + (container->type != NODE_PARAGRAPH && + (matched = scan_html_block_start_7(&input, parser->first_nonspace))))) { container = add_child(parser, container, NODE_HTML, parser->first_nonspace + 1); + container->as.html_block_type = matched; // note, we don't adjust parser->offset because the tag is part of the text } else if (!indented && @@ -923,11 +942,51 @@ S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t byte assert(parser->current != NULL); } - if (container->type == NODE_CODE_BLOCK || - container->type == NODE_HTML) { + if (container->type == NODE_CODE_BLOCK) { + + add_line(container, &input, parser->offset); + + } else if (container->type == NODE_HTML) { add_line(container, &input, parser->offset); + int matches_end_condition; + switch (container->as.html_block_type) { + case 1: + // , ,
                            + matches_end_condition = + scan_html_block_end_1(&input, parser->first_nonspace); + break; + case 2: + // --> + matches_end_condition = + scan_html_block_end_2(&input, parser->first_nonspace); + break; + case 3: + // ?> + matches_end_condition = + scan_html_block_end_3(&input, parser->first_nonspace); + break; + case 4: + // > + matches_end_condition = + scan_html_block_end_4(&input, parser->first_nonspace); + break; + case 5: + // ]]> + matches_end_condition = + scan_html_block_end_5(&input, parser->first_nonspace); + break; + default: + matches_end_condition = 0; + break; + } + + if (matches_end_condition) { + container = finalize(parser, container); + assert(parser->current != NULL); + } + } else if (parser->blank) { // ??? do nothing diff --git a/src/node.h b/src/node.h index 911a18f5c3..b57940892a 100644 --- a/src/node.h +++ b/src/node.h @@ -69,6 +69,7 @@ struct cmark_node { cmark_code code; cmark_header header; cmark_link link; + int html_block_type; } as; }; diff --git a/src/scanners.c b/src/scanners.c index 6355ebcccb..1dada6426f 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -12605,12 +12605,12 @@ yy1409: } -// Try to match an HTML block tag including first <, -// returning num of chars matched. -bufsize_t _scan_html_block_tag(const unsigned char *p) +// Try to match an HTML block tag start line, returning +// an integer code for the type of block (1-6, matching the spec). +// #7 is handled by a separate function, below. +bufsize_t _scan_html_block_start(const unsigned char *p) { const unsigned char *marker = NULL; - const unsigned char *start = p; { unsigned char yych; @@ -12639,41 +12639,37 @@ yy1413: yy1414: yych = *(marker = ++p); switch (yych) { - case '!': - case '?': goto yy1424; - case '/': goto yy1442; + case '!': goto yy1439; + case '/': goto yy1424; + case '?': goto yy1440; case 'A': - case 'a': goto yy1427; + case 'a': goto yy1426; case 'B': - case 'b': goto yy1430; + case 'b': goto yy1427; case 'C': - case 'c': goto yy1434; + case 'c': goto yy1428; case 'D': - case 'd': goto yy1435; - case 'E': - case 'e': goto yy1438; + case 'd': goto yy1429; case 'F': - case 'f': goto yy1439; + case 'f': goto yy1430; case 'H': - case 'h': goto yy1428; - case 'I': - case 'i': goto yy1429; + case 'h': goto yy1431; case 'L': - case 'l': goto yy1431; + case 'l': goto yy1432; case 'M': - case 'm': goto yy1432; + case 'm': goto yy1433; + case 'N': + case 'n': goto yy1434; case 'O': - case 'o': goto yy1433; + case 'o': goto yy1435; case 'P': - case 'p': goto yy1426; + case 'p': goto yy1425; case 'S': case 's': goto yy1436; case 'T': case 't': goto yy1437; case 'U': - case 'u': goto yy1440; - case 'V': - case 'v': goto yy1441; + case 'u': goto yy1438; default: goto yy1413; } yy1415: @@ -12717,1730 +12713,3884 @@ yy1423: if (yych <= 0x9F) goto yy1416; goto yy1417; yy1424: - ++p; - { return (bufsize_t)(p - start); } -yy1426: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { + switch (yych) { + case 'A': + case 'a': goto yy1426; + case 'B': + case 'b': goto yy1427; + case 'C': + case 'c': goto yy1428; + case 'D': + case 'd': goto yy1429; + case 'F': + case 'f': goto yy1430; + case 'H': + case 'h': goto yy1431; + case 'L': + case 'l': goto yy1432; + case 'M': + case 'm': goto yy1433; + case 'N': + case 'n': goto yy1434; + case 'O': + case 'o': goto yy1435; + case 'P': + case 'p': goto yy1622; + case 'S': + case 's': goto yy1623; + case 'T': + case 't': goto yy1437; + case 'U': + case 'u': goto yy1438; + default: goto yy1417; + } +yy1425: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1586; - goto yy1417; + if (yych <= '\r') goto yy1456; + if (yych <= 0x1F) goto yy1417; + goto yy1456; } else { - if (yych <= ' ') goto yy1586; - if (yych <= '.') goto yy1417; - goto yy1586; + if (yych == '/') goto yy1458; + if (yych <= '=') goto yy1417; + goto yy1456; } } else { - if (yych <= 'Q') { - if (yych == '>') goto yy1586; + if (yych <= 'R') { + if (yych == 'A') goto yy1617; + if (yych <= 'Q') goto yy1417; + goto yy1616; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy1417; + goto yy1617; + } else { + if (yych == 'r') goto yy1616; + goto yy1417; + } + } + } +yy1426: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych <= 'C') goto yy1417; + goto yy1605; + } else { + if (yych <= 'Q') goto yy1417; + if (yych <= 'R') goto yy1604; + goto yy1603; + } + } else { + if (yych <= 'q') { + if (yych == 'd') goto yy1605; goto yy1417; } else { - if (yych <= 'R') goto yy1699; - if (yych == 'r') goto yy1699; + if (yych <= 'r') goto yy1604; + if (yych <= 's') goto yy1603; goto yy1417; } } yy1427: yych = *++p; - if (yych <= 'S') { - if (yych <= 'Q') goto yy1417; - if (yych <= 'R') goto yy1692; - goto yy1691; + if (yych <= 'O') { + if (yych <= 'K') { + if (yych == 'A') goto yy1589; + goto yy1417; + } else { + if (yych <= 'L') goto yy1588; + if (yych <= 'N') goto yy1417; + goto yy1587; + } } else { - if (yych <= 'q') goto yy1417; - if (yych <= 'r') goto yy1692; - if (yych <= 's') goto yy1691; - goto yy1417; + if (yych <= 'k') { + if (yych == 'a') goto yy1589; + goto yy1417; + } else { + if (yych <= 'l') goto yy1588; + if (yych == 'o') goto yy1587; + goto yy1417; + } } yy1428: yych = *++p; - if (yych <= 'Q') { + if (yych <= 'O') { if (yych <= 'D') { - if (yych <= '0') goto yy1417; - if (yych <= '6') goto yy1585; + if (yych == 'A') goto yy1574; goto yy1417; } else { - if (yych <= 'E') goto yy1684; - if (yych == 'G') goto yy1683; - goto yy1417; + if (yych <= 'E') goto yy1573; + if (yych <= 'N') goto yy1417; + goto yy1572; } } else { - if (yych <= 'f') { - if (yych <= 'R') goto yy1585; - if (yych == 'e') goto yy1684; + if (yych <= 'd') { + if (yych == 'a') goto yy1574; goto yy1417; } else { - if (yych <= 'g') goto yy1683; - if (yych == 'r') goto yy1585; + if (yych <= 'e') goto yy1573; + if (yych == 'o') goto yy1572; goto yy1417; } } yy1429: yych = *++p; - if (yych == 'F') goto yy1679; - if (yych == 'f') goto yy1679; - goto yy1417; + switch (yych) { + case 'D': + case 'L': + case 'T': + case 'd': + case 'l': + case 't': goto yy1455; + case 'E': + case 'e': goto yy1564; + case 'I': + case 'i': goto yy1563; + default: goto yy1417; + } yy1430: yych = *++p; - if (yych <= 'U') { + if (yych <= 'R') { if (yych <= 'N') { - if (yych == 'L') goto yy1667; + if (yych == 'I') goto yy1539; goto yy1417; } else { - if (yych <= 'O') goto yy1666; - if (yych <= 'T') goto yy1417; - goto yy1665; + if (yych <= 'O') goto yy1538; + if (yych <= 'Q') goto yy1417; + goto yy1537; } } else { if (yych <= 'n') { - if (yych == 'l') goto yy1667; + if (yych == 'i') goto yy1539; goto yy1417; } else { - if (yych <= 'o') goto yy1666; - if (yych == 'u') goto yy1665; + if (yych <= 'o') goto yy1538; + if (yych == 'r') goto yy1537; goto yy1417; } } yy1431: yych = *++p; - if (yych == 'I') goto yy1585; - if (yych == 'i') goto yy1585; - goto yy1417; -yy1432: - yych = *++p; - if (yych == 'A') goto yy1664; - if (yych == 'a') goto yy1664; - goto yy1417; -yy1433: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'K') { - if (yych == 'B') goto yy1657; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych == '1') goto yy1455; goto yy1417; } else { - if (yych <= 'L') goto yy1585; - if (yych <= 'T') goto yy1417; - goto yy1656; + if (yych <= 'E') goto yy1532; + if (yych == 'R') goto yy1455; + goto yy1417; } } else { - if (yych <= 'k') { - if (yych == 'b') goto yy1657; + if (yych <= 'q') { + if (yych <= 'T') goto yy1531; + if (yych == 'e') goto yy1532; + goto yy1417; + } else { + if (yych <= 'r') goto yy1455; + if (yych == 't') goto yy1531; + goto yy1417; + } + } +yy1432: + yych = *++p; + if (yych <= 'I') { + if (yych == 'E') goto yy1526; + if (yych <= 'H') goto yy1417; + goto yy1525; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy1417; + goto yy1526; + } else { + if (yych == 'i') goto yy1525; goto yy1417; + } + } +yy1433: + yych = *++p; + if (yych <= 'E') { + if (yych == 'A') goto yy1517; + if (yych <= 'D') goto yy1417; + goto yy1516; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy1417; + goto yy1517; } else { - if (yych <= 'l') goto yy1585; - if (yych == 'u') goto yy1656; + if (yych == 'e') goto yy1516; goto yy1417; } } yy1434: yych = *++p; if (yych <= 'O') { - if (yych == 'A') goto yy1643; + if (yych == 'A') goto yy1510; if (yych <= 'N') goto yy1417; - goto yy1642; + goto yy1509; } else { if (yych <= 'a') { if (yych <= '`') goto yy1417; - goto yy1643; + goto yy1510; } else { - if (yych == 'o') goto yy1642; + if (yych == 'o') goto yy1509; goto yy1417; } } yy1435: yych = *++p; - if (yych <= 'T') { - if (yych <= 'I') { - if (yych == 'D') goto yy1585; - if (yych <= 'H') goto yy1417; - goto yy1641; - } else { - if (yych == 'L') goto yy1585; - if (yych <= 'S') goto yy1417; - goto yy1585; - } + if (yych <= 'P') { + if (yych == 'L') goto yy1455; + if (yych <= 'O') goto yy1417; + goto yy1501; } else { - if (yych <= 'i') { - if (yych == 'd') goto yy1585; - if (yych <= 'h') goto yy1417; - goto yy1641; + if (yych <= 'l') { + if (yych <= 'k') goto yy1417; + goto yy1455; } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy1417; - goto yy1585; - } else { - if (yych == 't') goto yy1585; - goto yy1417; - } + if (yych == 'p') goto yy1501; + goto yy1417; } } yy1436: yych = *++p; - if (yych <= 'T') { - if (yych <= 'D') { - if (yych == 'C') goto yy1630; - goto yy1417; + if (yych <= 'U') { + if (yych <= 'E') { + if (yych == 'C') goto yy1478; + if (yych <= 'D') goto yy1417; + goto yy1481; } else { - if (yych <= 'E') goto yy1631; - if (yych <= 'S') goto yy1417; - goto yy1629; + if (yych <= 'O') { + if (yych <= 'N') goto yy1417; + goto yy1480; + } else { + if (yych <= 'S') goto yy1417; + if (yych <= 'T') goto yy1477; + goto yy1479; + } } } else { - if (yych <= 'd') { - if (yych == 'c') goto yy1630; - goto yy1417; + if (yych <= 'n') { + if (yych <= 'c') { + if (yych <= 'b') goto yy1417; + goto yy1478; + } else { + if (yych == 'e') goto yy1481; + goto yy1417; + } } else { - if (yych <= 'e') goto yy1631; - if (yych == 't') goto yy1629; - goto yy1417; + if (yych <= 's') { + if (yych <= 'o') goto yy1480; + goto yy1417; + } else { + if (yych <= 't') goto yy1477; + if (yych <= 'u') goto yy1479; + goto yy1417; + } } } yy1437: yych = *++p; switch (yych) { case 'A': - case 'a': goto yy1615; + case 'a': goto yy1464; case 'B': - case 'b': goto yy1614; + case 'b': goto yy1463; case 'D': - case 'R': - case 'd': - case 'r': goto yy1585; - case 'E': - case 'e': goto yy1613; + case 'd': goto yy1455; case 'F': - case 'f': goto yy1612; + case 'f': goto yy1462; case 'H': - case 'h': goto yy1611; + case 'h': goto yy1461; + case 'I': + case 'i': goto yy1460; + case 'R': + case 'r': goto yy1459; default: goto yy1417; } yy1438: yych = *++p; - if (yych == 'M') goto yy1608; - if (yych == 'm') goto yy1608; + if (yych == 'L') goto yy1455; + if (yych == 'l') goto yy1455; goto yy1417; yy1439: yych = *++p; - if (yych <= 'O') { - if (yych == 'I') goto yy1589; - if (yych <= 'N') goto yy1417; - goto yy1588; + if (yych <= '@') { + if (yych == '-') goto yy1442; + goto yy1417; } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy1417; - goto yy1589; - } else { - if (yych == 'o') goto yy1588; - goto yy1417; - } + if (yych <= 'Z') goto yy1443; + if (yych <= '[') goto yy1445; + goto yy1417; } yy1440: + ++p; + { return 3; } +yy1442: yych = *++p; - if (yych == 'L') goto yy1585; - if (yych == 'l') goto yy1585; + if (yych == '-') goto yy1453; goto yy1417; -yy1441: +yy1443: + ++p; + { return 4; } +yy1445: yych = *++p; - if (yych == 'I') goto yy1582; - if (yych == 'i') goto yy1582; - goto yy1417; -yy1442: + if (yych == 'C') goto yy1446; + if (yych != 'c') goto yy1417; +yy1446: yych = *++p; - switch (yych) { - case 'A': - case 'a': goto yy1444; - case 'B': - case 'b': goto yy1447; - case 'C': - case 'c': goto yy1451; - case 'D': - case 'd': goto yy1452; - case 'E': - case 'e': goto yy1455; - case 'F': - case 'f': goto yy1456; - case 'H': - case 'h': goto yy1445; - case 'I': - case 'i': goto yy1446; - case 'L': - case 'l': goto yy1448; - case 'M': - case 'm': goto yy1449; - case 'O': - case 'o': goto yy1450; - case 'P': - case 'p': goto yy1443; - case 'S': - case 's': goto yy1453; - case 'T': - case 't': goto yy1454; - case 'U': - case 'u': goto yy1457; - case 'V': - case 'v': goto yy1458; - default: goto yy1417; - } -yy1443: + if (yych == 'D') goto yy1447; + if (yych != 'd') goto yy1417; +yy1447: yych = *++p; - if (yych <= '=') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy1417; - goto yy1463; - } else { - if (yych == ' ') goto yy1463; - goto yy1417; - } + if (yych == 'A') goto yy1448; + if (yych != 'a') goto yy1417; +yy1448: + yych = *++p; + if (yych == 'T') goto yy1449; + if (yych != 't') goto yy1417; +yy1449: + yych = *++p; + if (yych == 'A') goto yy1450; + if (yych != 'a') goto yy1417; +yy1450: + yych = *++p; + if (yych != '[') goto yy1417; + ++p; + { return 5; } +yy1453: + ++p; + { return 2; } +yy1455: + yych = *++p; + if (yych <= ' ') { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + if (yych <= 0x1F) goto yy1417; } else { - if (yych <= 'R') { - if (yych <= '>') goto yy1463; - if (yych <= 'Q') goto yy1417; - goto yy1576; + if (yych <= '/') { + if (yych <= '.') goto yy1417; + goto yy1458; } else { - if (yych == 'r') goto yy1576; - goto yy1417; + if (yych != '>') goto yy1417; } } -yy1444: +yy1456: + ++p; + { return 6; } +yy1458: yych = *++p; - if (yych <= 'S') { - if (yych <= 'Q') goto yy1417; - if (yych <= 'R') goto yy1569; - goto yy1568; - } else { - if (yych <= 'q') goto yy1417; - if (yych <= 'r') goto yy1569; - if (yych <= 's') goto yy1568; - goto yy1417; - } -yy1445: + if (yych == '>') goto yy1456; + goto yy1417; +yy1459: yych = *++p; - if (yych <= 'Q') { - if (yych <= 'D') { - if (yych <= '0') goto yy1417; - if (yych <= '6') goto yy1462; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; goto yy1417; } else { - if (yych <= 'E') goto yy1561; - if (yych == 'G') goto yy1560; - goto yy1417; + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; } } else { - if (yych <= 'f') { - if (yych <= 'R') goto yy1462; - if (yych == 'e') goto yy1561; + if (yych <= '@') { + if (yych == '>') goto yy1456; goto yy1417; } else { - if (yych <= 'g') goto yy1560; - if (yych == 'r') goto yy1462; + if (yych <= 'A') goto yy1475; + if (yych == 'a') goto yy1475; goto yy1417; } } -yy1446: +yy1460: yych = *++p; - if (yych == 'F') goto yy1556; - if (yych == 'f') goto yy1556; + if (yych == 'T') goto yy1473; + if (yych == 't') goto yy1473; goto yy1417; -yy1447: +yy1461: yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'L') goto yy1544; - goto yy1417; - } else { - if (yych <= 'O') goto yy1543; - if (yych <= 'T') goto yy1417; - goto yy1542; - } - } else { - if (yych <= 'n') { - if (yych == 'l') goto yy1544; - goto yy1417; - } else { - if (yych <= 'o') goto yy1543; - if (yych == 'u') goto yy1542; - goto yy1417; - } - } -yy1448: - yych = *++p; - if (yych == 'I') goto yy1462; - if (yych == 'i') goto yy1462; - goto yy1417; -yy1449: - yych = *++p; - if (yych == 'A') goto yy1541; - if (yych == 'a') goto yy1541; - goto yy1417; -yy1450: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'K') { - if (yych == 'B') goto yy1534; - goto yy1417; - } else { - if (yych <= 'L') goto yy1462; - if (yych <= 'T') goto yy1417; - goto yy1533; - } - } else { - if (yych <= 'k') { - if (yych == 'b') goto yy1534; - goto yy1417; - } else { - if (yych <= 'l') goto yy1462; - if (yych == 'u') goto yy1533; - goto yy1417; - } - } -yy1451: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy1520; - if (yych <= 'N') goto yy1417; - goto yy1519; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy1417; - goto yy1520; - } else { - if (yych == 'o') goto yy1519; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; goto yy1417; - } - } -yy1452: - yych = *++p; - if (yych <= 'T') { - if (yych <= 'I') { - if (yych == 'D') goto yy1462; - if (yych <= 'H') goto yy1417; - goto yy1518; } else { - if (yych == 'L') goto yy1462; - if (yych <= 'S') goto yy1417; - goto yy1462; + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; } } else { - if (yych <= 'i') { - if (yych == 'd') goto yy1462; - if (yych <= 'h') goto yy1417; - goto yy1518; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy1417; - goto yy1462; - } else { - if (yych == 't') goto yy1462; - goto yy1417; - } - } - } -yy1453: - yych = *++p; - if (yych <= 'T') { if (yych <= 'D') { - if (yych == 'C') goto yy1507; - goto yy1417; - } else { - if (yych <= 'E') goto yy1508; - if (yych <= 'S') goto yy1417; - goto yy1506; - } - } else { - if (yych <= 'd') { - if (yych == 'c') goto yy1507; + if (yych == '>') goto yy1456; goto yy1417; } else { - if (yych <= 'e') goto yy1508; - if (yych == 't') goto yy1506; + if (yych <= 'E') goto yy1471; + if (yych == 'e') goto yy1471; goto yy1417; } } -yy1454: - yych = *++p; - switch (yych) { - case 'A': - case 'a': goto yy1492; - case 'B': - case 'b': goto yy1491; - case 'D': - case 'R': - case 'd': - case 'r': goto yy1462; - case 'E': - case 'e': goto yy1490; - case 'F': - case 'f': goto yy1489; - case 'H': - case 'h': goto yy1488; - default: goto yy1417; - } -yy1455: +yy1462: yych = *++p; - if (yych == 'M') goto yy1485; - if (yych == 'm') goto yy1485; + if (yych == 'O') goto yy1469; + if (yych == 'o') goto yy1469; goto yy1417; -yy1456: - yych = *++p; - if (yych <= 'O') { - if (yych == 'I') goto yy1466; - if (yych <= 'N') goto yy1417; - goto yy1465; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy1417; - goto yy1466; - } else { - if (yych == 'o') goto yy1465; - goto yy1417; - } - } -yy1457: +yy1463: yych = *++p; - if (yych == 'L') goto yy1462; - if (yych == 'l') goto yy1462; + if (yych == 'O') goto yy1467; + if (yych == 'o') goto yy1467; goto yy1417; -yy1458: - yych = *++p; - if (yych == 'I') goto yy1459; - if (yych != 'i') goto yy1417; -yy1459: - yych = *++p; - if (yych == 'D') goto yy1460; - if (yych != 'd') goto yy1417; -yy1460: - yych = *++p; - if (yych == 'E') goto yy1461; - if (yych != 'e') goto yy1417; -yy1461: - yych = *++p; - if (yych == 'O') goto yy1462; - if (yych != 'o') goto yy1417; -yy1462: +yy1464: yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych >= 0x0E) goto yy1417; - } else { - if (yych <= ' ') goto yy1463; - if (yych != '>') goto yy1417; - } -yy1463: - ++p; - { return (bufsize_t)(p - start); } + if (yych == 'B') goto yy1465; + if (yych != 'b') goto yy1417; yy1465: yych = *++p; - if (yych <= 'R') { - if (yych == 'O') goto yy1481; - if (yych <= 'Q') goto yy1417; - goto yy1482; - } else { - if (yych <= 'o') { - if (yych <= 'n') goto yy1417; - goto yy1481; - } else { - if (yych == 'r') goto yy1482; - goto yy1417; - } - } + if (yych == 'L') goto yy1466; + if (yych != 'l') goto yy1417; yy1466: yych = *++p; - if (yych <= 'G') { - if (yych == 'E') goto yy1467; - if (yych <= 'F') goto yy1417; - goto yy1468; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy1417; - } else { - if (yych == 'g') goto yy1468; - goto yy1417; - } - } + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; + goto yy1417; yy1467: yych = *++p; - if (yych == 'L') goto yy1477; - if (yych == 'l') goto yy1477; - goto yy1417; + if (yych == 'D') goto yy1468; + if (yych != 'd') goto yy1417; yy1468: yych = *++p; - if (yych <= 'U') { - if (yych == 'C') goto yy1470; - if (yych <= 'T') goto yy1417; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy1417; - goto yy1470; - } else { - if (yych != 'u') goto yy1417; - } - } - yych = *++p; - if (yych == 'R') goto yy1476; - if (yych == 'r') goto yy1476; + if (yych == 'Y') goto yy1455; + if (yych == 'y') goto yy1455; goto yy1417; +yy1469: + yych = *++p; + if (yych == 'O') goto yy1470; + if (yych != 'o') goto yy1417; yy1470: yych = *++p; - if (yych == 'A') goto yy1471; - if (yych != 'a') goto yy1417; + if (yych == 'T') goto yy1455; + if (yych == 't') goto yy1455; + goto yy1417; yy1471: yych = *++p; - if (yych == 'P') goto yy1472; - if (yych != 'p') goto yy1417; + if (yych == 'A') goto yy1472; + if (yych != 'a') goto yy1417; yy1472: yych = *++p; - if (yych == 'T') goto yy1473; - if (yych != 't') goto yy1417; + if (yych == 'D') goto yy1455; + if (yych == 'd') goto yy1455; + goto yy1417; yy1473: yych = *++p; - if (yych == 'I') goto yy1474; - if (yych != 'i') goto yy1417; + if (yych == 'L') goto yy1474; + if (yych != 'l') goto yy1417; yy1474: yych = *++p; - if (yych == 'O') goto yy1475; - if (yych != 'o') goto yy1417; + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; + goto yy1417; yy1475: yych = *++p; - if (yych == 'N') goto yy1462; - if (yych == 'n') goto yy1462; - goto yy1417; + if (yych == 'C') goto yy1476; + if (yych != 'c') goto yy1417; yy1476: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; + if (yych == 'K') goto yy1455; + if (yych == 'k') goto yy1455; goto yy1417; yy1477: yych = *++p; - if (yych == 'D') goto yy1478; - if (yych != 'd') goto yy1417; + if (yych == 'Y') goto yy1499; + if (yych == 'y') goto yy1499; + goto yy1417; yy1478: yych = *++p; - if (yych == 'S') goto yy1479; - if (yych != 's') goto yy1417; + if (yych == 'R') goto yy1493; + if (yych == 'r') goto yy1493; + goto yy1417; yy1479: yych = *++p; - if (yych == 'E') goto yy1480; - if (yych != 'e') goto yy1417; + if (yych == 'M') goto yy1489; + if (yych == 'm') goto yy1489; + goto yy1417; yy1480: yych = *++p; - if (yych == 'T') goto yy1462; - if (yych == 't') goto yy1462; + if (yych == 'U') goto yy1486; + if (yych == 'u') goto yy1486; goto yy1417; yy1481: yych = *++p; - if (yych == 'T') goto yy1483; - if (yych == 't') goto yy1483; - goto yy1417; + if (yych == 'C') goto yy1482; + if (yych != 'c') goto yy1417; yy1482: yych = *++p; - if (yych == 'M') goto yy1462; - if (yych == 'm') goto yy1462; - goto yy1417; + if (yych == 'T') goto yy1483; + if (yych != 't') goto yy1417; yy1483: yych = *++p; - if (yych == 'E') goto yy1484; - if (yych != 'e') goto yy1417; + if (yych == 'I') goto yy1484; + if (yych != 'i') goto yy1417; yy1484: yych = *++p; - if (yych == 'R') goto yy1462; - if (yych == 'r') goto yy1462; - goto yy1417; + if (yych == 'O') goto yy1485; + if (yych != 'o') goto yy1417; yy1485: yych = *++p; - if (yych == 'B') goto yy1486; - if (yych != 'b') goto yy1417; + if (yych == 'N') goto yy1455; + if (yych == 'n') goto yy1455; + goto yy1417; yy1486: yych = *++p; - if (yych == 'E') goto yy1487; - if (yych != 'e') goto yy1417; + if (yych == 'R') goto yy1487; + if (yych != 'r') goto yy1417; yy1487: yych = *++p; - if (yych == 'D') goto yy1462; - if (yych == 'd') goto yy1462; - goto yy1417; + if (yych == 'C') goto yy1488; + if (yych != 'c') goto yy1417; yy1488: yych = *++p; - if (yych <= '=') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy1417; - goto yy1463; - } else { - if (yych == ' ') goto yy1463; - goto yy1417; - } - } else { - if (yych <= 'E') { - if (yych <= '>') goto yy1463; - if (yych <= 'D') goto yy1417; - goto yy1504; - } else { - if (yych == 'e') goto yy1504; - goto yy1417; - } - } + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; + goto yy1417; yy1489: yych = *++p; - if (yych == 'O') goto yy1502; - if (yych == 'o') goto yy1502; - goto yy1417; + if (yych == 'M') goto yy1490; + if (yych != 'm') goto yy1417; yy1490: yych = *++p; - if (yych == 'X') goto yy1497; - if (yych == 'x') goto yy1497; - goto yy1417; + if (yych == 'A') goto yy1491; + if (yych != 'a') goto yy1417; yy1491: yych = *++p; - if (yych == 'O') goto yy1495; - if (yych == 'o') goto yy1495; - goto yy1417; + if (yych == 'R') goto yy1492; + if (yych != 'r') goto yy1417; yy1492: yych = *++p; - if (yych == 'B') goto yy1493; - if (yych != 'b') goto yy1417; + if (yych == 'Y') goto yy1455; + if (yych == 'y') goto yy1455; + goto yy1417; yy1493: yych = *++p; - if (yych == 'L') goto yy1494; - if (yych != 'l') goto yy1417; + if (yych == 'I') goto yy1494; + if (yych != 'i') goto yy1417; yy1494: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; - goto yy1417; + if (yych == 'P') goto yy1495; + if (yych != 'p') goto yy1417; yy1495: yych = *++p; - if (yych == 'D') goto yy1496; - if (yych != 'd') goto yy1417; + if (yych == 'T') goto yy1496; + if (yych != 't') goto yy1417; yy1496: yych = *++p; - if (yych == 'Y') goto yy1462; - if (yych == 'y') goto yy1462; - goto yy1417; + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych >= 0x0E) goto yy1417; + } else { + if (yych <= ' ') goto yy1497; + if (yych != '>') goto yy1417; + } yy1497: - yych = *++p; - if (yych == 'T') goto yy1498; - if (yych != 't') goto yy1417; + ++p; yy1498: - yych = *++p; - if (yych == 'A') goto yy1499; - if (yych != 'a') goto yy1417; + { return 1; } yy1499: yych = *++p; - if (yych == 'R') goto yy1500; - if (yych != 'r') goto yy1417; + if (yych == 'L') goto yy1500; + if (yych != 'l') goto yy1417; yy1500: yych = *++p; - if (yych == 'E') goto yy1501; - if (yych != 'e') goto yy1417; + if (yych == 'E') goto yy1496; + if (yych == 'e') goto yy1496; + goto yy1417; yy1501: yych = *++p; - if (yych == 'A') goto yy1462; - if (yych == 'a') goto yy1462; - goto yy1417; + if (yych == 'T') goto yy1502; + if (yych != 't') goto yy1417; yy1502: yych = *++p; - if (yych == 'O') goto yy1503; - if (yych != 'o') goto yy1417; -yy1503: + if (yych <= 'I') { + if (yych == 'G') goto yy1504; + if (yych <= 'H') goto yy1417; + } else { + if (yych <= 'g') { + if (yych <= 'f') goto yy1417; + goto yy1504; + } else { + if (yych != 'i') goto yy1417; + } + } yych = *++p; - if (yych == 'T') goto yy1462; - if (yych == 't') goto yy1462; + if (yych == 'O') goto yy1508; + if (yych == 'o') goto yy1508; goto yy1417; yy1504: yych = *++p; - if (yych == 'A') goto yy1505; - if (yych != 'a') goto yy1417; + if (yych == 'R') goto yy1505; + if (yych != 'r') goto yy1417; yy1505: yych = *++p; - if (yych == 'D') goto yy1462; - if (yych == 'd') goto yy1462; - goto yy1417; + if (yych == 'O') goto yy1506; + if (yych != 'o') goto yy1417; yy1506: yych = *++p; - if (yych == 'Y') goto yy1516; - if (yych == 'y') goto yy1516; - goto yy1417; + if (yych == 'U') goto yy1507; + if (yych != 'u') goto yy1417; yy1507: yych = *++p; - if (yych == 'R') goto yy1513; - if (yych == 'r') goto yy1513; + if (yych == 'P') goto yy1455; + if (yych == 'p') goto yy1455; goto yy1417; yy1508: yych = *++p; - if (yych == 'C') goto yy1509; - if (yych != 'c') goto yy1417; + if (yych == 'N') goto yy1455; + if (yych == 'n') goto yy1455; + goto yy1417; yy1509: yych = *++p; - if (yych == 'T') goto yy1510; - if (yych != 't') goto yy1417; + if (yych == 'F') goto yy1511; + if (yych == 'f') goto yy1511; + goto yy1417; yy1510: yych = *++p; - if (yych == 'I') goto yy1511; - if (yych != 'i') goto yy1417; + if (yych == 'V') goto yy1455; + if (yych == 'v') goto yy1455; + goto yy1417; yy1511: yych = *++p; - if (yych == 'O') goto yy1512; - if (yych != 'o') goto yy1417; + if (yych == 'R') goto yy1512; + if (yych != 'r') goto yy1417; yy1512: yych = *++p; - if (yych == 'N') goto yy1462; - if (yych == 'n') goto yy1462; - goto yy1417; + if (yych == 'A') goto yy1513; + if (yych != 'a') goto yy1417; yy1513: yych = *++p; - if (yych == 'I') goto yy1514; - if (yych != 'i') goto yy1417; + if (yych == 'M') goto yy1514; + if (yych != 'm') goto yy1417; yy1514: yych = *++p; - if (yych == 'P') goto yy1515; - if (yych != 'p') goto yy1417; + if (yych == 'E') goto yy1515; + if (yych != 'e') goto yy1417; yy1515: yych = *++p; - if (yych == 'T') goto yy1462; - if (yych == 't') goto yy1462; + if (yych == 'S') goto yy1455; + if (yych == 's') goto yy1455; goto yy1417; yy1516: yych = *++p; - if (yych == 'L') goto yy1517; - if (yych != 'l') goto yy1417; + if (yych <= 'T') { + if (yych == 'N') goto yy1519; + if (yych <= 'S') goto yy1417; + goto yy1520; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy1417; + goto yy1519; + } else { + if (yych == 't') goto yy1520; + goto yy1417; + } + } yy1517: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; - goto yy1417; + if (yych == 'I') goto yy1518; + if (yych != 'i') goto yy1417; yy1518: yych = *++p; - if (yych == 'V') goto yy1462; - if (yych == 'v') goto yy1462; + if (yych == 'N') goto yy1455; + if (yych == 'n') goto yy1455; goto yy1417; yy1519: yych = *++p; - if (yych == 'L') goto yy1528; - if (yych == 'l') goto yy1528; + if (yych == 'U') goto yy1521; + if (yych == 'u') goto yy1521; goto yy1417; yy1520: yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy1521; - if (yych <= 'O') goto yy1417; - goto yy1522; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy1417; + if (yych == 'A') goto yy1455; + if (yych == 'a') goto yy1455; + goto yy1417; +yy1521: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + goto yy1417; } else { - if (yych == 'p') goto yy1522; + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'H') { + if (yych == '>') goto yy1456; goto yy1417; + } else { + if (yych <= 'I') goto yy1522; + if (yych != 'i') goto yy1417; } } -yy1521: - yych = *++p; - if (yych == 'V') goto yy1526; - if (yych == 'v') goto yy1526; - goto yy1417; yy1522: yych = *++p; if (yych == 'T') goto yy1523; if (yych != 't') goto yy1417; yy1523: yych = *++p; - if (yych == 'I') goto yy1524; - if (yych != 'i') goto yy1417; + if (yych == 'E') goto yy1524; + if (yych != 'e') goto yy1417; yy1524: yych = *++p; - if (yych == 'O') goto yy1525; - if (yych != 'o') goto yy1417; -yy1525: - yych = *++p; - if (yych == 'N') goto yy1462; - if (yych == 'n') goto yy1462; - goto yy1417; -yy1526: - yych = *++p; - if (yych == 'A') goto yy1527; - if (yych != 'a') goto yy1417; -yy1527: - yych = *++p; - if (yych == 'S') goto yy1462; - if (yych == 's') goto yy1462; + if (yych == 'M') goto yy1455; + if (yych == 'm') goto yy1455; goto yy1417; -yy1528: +yy1525: yych = *++p; - if (yych <= '=') { - if (yych <= '\r') { + if (yych <= '/') { + if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; - goto yy1463; - } else { - if (yych == ' ') goto yy1463; + if (yych <= '\r') goto yy1456; goto yy1417; + } else { + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; } } else { - if (yych <= 'G') { - if (yych <= '>') goto yy1463; - if (yych <= 'F') goto yy1417; + if (yych <= 'M') { + if (yych == '>') goto yy1456; + goto yy1417; } else { - if (yych != 'g') goto yy1417; + if (yych <= 'N') goto yy1530; + if (yych == 'n') goto yy1530; + goto yy1417; } } +yy1526: yych = *++p; - if (yych == 'R') goto yy1530; - if (yych != 'r') goto yy1417; + if (yych == 'G') goto yy1527; + if (yych != 'g') goto yy1417; +yy1527: + yych = *++p; + if (yych == 'E') goto yy1528; + if (yych != 'e') goto yy1417; +yy1528: + yych = *++p; + if (yych == 'N') goto yy1529; + if (yych != 'n') goto yy1417; +yy1529: + yych = *++p; + if (yych == 'D') goto yy1455; + if (yych == 'd') goto yy1455; + goto yy1417; yy1530: yych = *++p; - if (yych == 'O') goto yy1531; - if (yych != 'o') goto yy1417; + if (yych == 'K') goto yy1455; + if (yych == 'k') goto yy1455; + goto yy1417; yy1531: yych = *++p; - if (yych == 'U') goto yy1532; - if (yych != 'u') goto yy1417; + if (yych == 'M') goto yy1536; + if (yych == 'm') goto yy1536; + goto yy1417; yy1532: yych = *++p; - if (yych == 'P') goto yy1462; - if (yych == 'p') goto yy1462; - goto yy1417; + if (yych == 'A') goto yy1533; + if (yych != 'a') goto yy1417; yy1533: yych = *++p; - if (yych == 'T') goto yy1538; - if (yych == 't') goto yy1538; - goto yy1417; + if (yych == 'D') goto yy1534; + if (yych != 'd') goto yy1417; yy1534: yych = *++p; - if (yych == 'J') goto yy1535; - if (yych != 'j') goto yy1417; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'D') { + if (yych == '>') goto yy1456; + goto yy1417; + } else { + if (yych <= 'E') goto yy1535; + if (yych != 'e') goto yy1417; + } + } yy1535: yych = *++p; - if (yych == 'E') goto yy1536; - if (yych != 'e') goto yy1417; + if (yych == 'R') goto yy1455; + if (yych == 'r') goto yy1455; + goto yy1417; yy1536: yych = *++p; - if (yych == 'C') goto yy1537; - if (yych != 'c') goto yy1417; + if (yych == 'L') goto yy1455; + if (yych == 'l') goto yy1455; + goto yy1417; yy1537: yych = *++p; - if (yych == 'T') goto yy1462; - if (yych == 't') goto yy1462; + if (yych == 'A') goto yy1558; + if (yych == 'a') goto yy1558; goto yy1417; yy1538: yych = *++p; - if (yych == 'P') goto yy1539; - if (yych != 'p') goto yy1417; + if (yych <= 'R') { + if (yych == 'O') goto yy1554; + if (yych <= 'Q') goto yy1417; + goto yy1555; + } else { + if (yych <= 'o') { + if (yych <= 'n') goto yy1417; + goto yy1554; + } else { + if (yych == 'r') goto yy1555; + goto yy1417; + } + } yy1539: yych = *++p; - if (yych == 'U') goto yy1540; - if (yych != 'u') goto yy1417; + if (yych <= 'G') { + if (yych == 'E') goto yy1540; + if (yych <= 'F') goto yy1417; + goto yy1541; + } else { + if (yych <= 'e') { + if (yych <= 'd') goto yy1417; + } else { + if (yych == 'g') goto yy1541; + goto yy1417; + } + } yy1540: yych = *++p; - if (yych == 'T') goto yy1462; - if (yych == 't') goto yy1462; + if (yych == 'L') goto yy1550; + if (yych == 'l') goto yy1550; goto yy1417; yy1541: yych = *++p; - if (yych == 'P') goto yy1462; - if (yych == 'p') goto yy1462; - goto yy1417; -yy1542: + if (yych <= 'U') { + if (yych == 'C') goto yy1543; + if (yych <= 'T') goto yy1417; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy1417; + goto yy1543; + } else { + if (yych != 'u') goto yy1417; + } + } yych = *++p; - if (yych == 'T') goto yy1553; - if (yych == 't') goto yy1553; + if (yych == 'R') goto yy1549; + if (yych == 'r') goto yy1549; goto yy1417; yy1543: yych = *++p; - if (yych == 'D') goto yy1552; - if (yych == 'd') goto yy1552; - goto yy1417; + if (yych == 'A') goto yy1544; + if (yych != 'a') goto yy1417; yy1544: yych = *++p; - if (yych == 'O') goto yy1545; - if (yych != 'o') goto yy1417; + if (yych == 'P') goto yy1545; + if (yych != 'p') goto yy1417; yy1545: yych = *++p; - if (yych == 'C') goto yy1546; - if (yych != 'c') goto yy1417; + if (yych == 'T') goto yy1546; + if (yych != 't') goto yy1417; yy1546: yych = *++p; - if (yych == 'K') goto yy1547; - if (yych != 'k') goto yy1417; + if (yych == 'I') goto yy1547; + if (yych != 'i') goto yy1417; yy1547: yych = *++p; - if (yych == 'Q') goto yy1548; - if (yych != 'q') goto yy1417; + if (yych == 'O') goto yy1548; + if (yych != 'o') goto yy1417; yy1548: yych = *++p; - if (yych == 'U') goto yy1549; - if (yych != 'u') goto yy1417; + if (yych == 'N') goto yy1455; + if (yych == 'n') goto yy1455; + goto yy1417; yy1549: yych = *++p; - if (yych == 'O') goto yy1550; - if (yych != 'o') goto yy1417; + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; + goto yy1417; yy1550: yych = *++p; - if (yych == 'T') goto yy1551; - if (yych != 't') goto yy1417; + if (yych == 'D') goto yy1551; + if (yych != 'd') goto yy1417; yy1551: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; - goto yy1417; + if (yych == 'S') goto yy1552; + if (yych != 's') goto yy1417; yy1552: yych = *++p; - if (yych == 'Y') goto yy1462; - if (yych == 'y') goto yy1462; - goto yy1417; + if (yych == 'E') goto yy1553; + if (yych != 'e') goto yy1417; yy1553: yych = *++p; - if (yych == 'T') goto yy1554; - if (yych != 't') goto yy1417; + if (yych == 'T') goto yy1455; + if (yych == 't') goto yy1455; + goto yy1417; yy1554: yych = *++p; - if (yych == 'O') goto yy1555; - if (yych != 'o') goto yy1417; + if (yych == 'T') goto yy1556; + if (yych == 't') goto yy1556; + goto yy1417; yy1555: yych = *++p; - if (yych == 'N') goto yy1462; - if (yych == 'n') goto yy1462; + if (yych == 'M') goto yy1455; + if (yych == 'm') goto yy1455; goto yy1417; yy1556: yych = *++p; - if (yych == 'R') goto yy1557; - if (yych != 'r') goto yy1417; + if (yych == 'E') goto yy1557; + if (yych != 'e') goto yy1417; yy1557: yych = *++p; - if (yych == 'A') goto yy1558; - if (yych != 'a') goto yy1417; + if (yych == 'R') goto yy1455; + if (yych == 'r') goto yy1455; + goto yy1417; yy1558: yych = *++p; if (yych == 'M') goto yy1559; if (yych != 'm') goto yy1417; yy1559: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; - goto yy1417; + if (yych == 'E') goto yy1560; + if (yych != 'e') goto yy1417; yy1560: yych = *++p; - if (yych == 'R') goto yy1565; - if (yych == 'r') goto yy1565; - goto yy1417; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'R') { + if (yych == '>') goto yy1456; + goto yy1417; + } else { + if (yych <= 'S') goto yy1561; + if (yych != 's') goto yy1417; + } + } yy1561: yych = *++p; - if (yych == 'A') goto yy1562; - if (yych != 'a') goto yy1417; + if (yych == 'E') goto yy1562; + if (yych != 'e') goto yy1417; yy1562: yych = *++p; - if (yych == 'D') goto yy1563; - if (yych != 'd') goto yy1417; + if (yych == 'T') goto yy1455; + if (yych == 't') goto yy1455; + goto yy1417; yy1563: yych = *++p; - if (yych == 'E') goto yy1564; - if (yych != 'e') goto yy1417; + if (yych <= 'V') { + if (yych <= 'Q') { + if (yych == 'A') goto yy1569; + goto yy1417; + } else { + if (yych <= 'R') goto yy1455; + if (yych <= 'U') goto yy1417; + goto yy1455; + } + } else { + if (yych <= 'q') { + if (yych == 'a') goto yy1569; + goto yy1417; + } else { + if (yych <= 'r') goto yy1455; + if (yych == 'v') goto yy1455; + goto yy1417; + } + } yy1564: yych = *++p; - if (yych == 'R') goto yy1462; - if (yych == 'r') goto yy1462; - goto yy1417; + if (yych == 'T') goto yy1565; + if (yych != 't') goto yy1417; yy1565: yych = *++p; - if (yych == 'O') goto yy1566; - if (yych != 'o') goto yy1417; + if (yych == 'A') goto yy1566; + if (yych != 'a') goto yy1417; yy1566: yych = *++p; - if (yych == 'U') goto yy1567; - if (yych != 'u') goto yy1417; + if (yych == 'I') goto yy1567; + if (yych != 'i') goto yy1417; yy1567: yych = *++p; - if (yych == 'P') goto yy1462; - if (yych == 'p') goto yy1462; - goto yy1417; + if (yych == 'L') goto yy1568; + if (yych != 'l') goto yy1417; yy1568: yych = *++p; - if (yych == 'I') goto yy1574; - if (yych == 'i') goto yy1574; + if (yych == 'S') goto yy1455; + if (yych == 's') goto yy1455; goto yy1417; yy1569: yych = *++p; - if (yych == 'T') goto yy1570; - if (yych != 't') goto yy1417; + if (yych == 'L') goto yy1570; + if (yych != 'l') goto yy1417; yy1570: yych = *++p; - if (yych == 'I') goto yy1571; - if (yych != 'i') goto yy1417; + if (yych == 'O') goto yy1571; + if (yych != 'o') goto yy1417; yy1571: yych = *++p; - if (yych == 'C') goto yy1572; - if (yych != 'c') goto yy1417; + if (yych == 'G') goto yy1455; + if (yych == 'g') goto yy1455; + goto yy1417; yy1572: yych = *++p; - if (yych == 'L') goto yy1573; - if (yych != 'l') goto yy1417; + if (yych == 'L') goto yy1582; + if (yych == 'l') goto yy1582; + goto yy1417; yy1573: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; + if (yych == 'N') goto yy1579; + if (yych == 'n') goto yy1579; goto yy1417; yy1574: yych = *++p; - if (yych == 'D') goto yy1575; - if (yych != 'd') goto yy1417; + if (yych == 'P') goto yy1575; + if (yych != 'p') goto yy1417; yy1575: yych = *++p; - if (yych == 'E') goto yy1462; - if (yych == 'e') goto yy1462; - goto yy1417; + if (yych == 'T') goto yy1576; + if (yych != 't') goto yy1417; yy1576: yych = *++p; - if (yych <= 'O') { - if (yych == 'E') goto yy1462; - if (yych <= 'N') goto yy1417; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy1417; - goto yy1462; - } else { - if (yych != 'o') goto yy1417; - } - } + if (yych == 'I') goto yy1577; + if (yych != 'i') goto yy1417; +yy1577: yych = *++p; - if (yych == 'G') goto yy1578; - if (yych != 'g') goto yy1417; + if (yych == 'O') goto yy1578; + if (yych != 'o') goto yy1417; yy1578: yych = *++p; - if (yych == 'R') goto yy1579; - if (yych != 'r') goto yy1417; + if (yych == 'N') goto yy1455; + if (yych == 'n') goto yy1455; + goto yy1417; yy1579: yych = *++p; - if (yych == 'E') goto yy1580; - if (yych != 'e') goto yy1417; + if (yych == 'T') goto yy1580; + if (yych != 't') goto yy1417; yy1580: yych = *++p; - if (yych == 'S') goto yy1581; - if (yych != 's') goto yy1417; + if (yych == 'E') goto yy1581; + if (yych != 'e') goto yy1417; yy1581: yych = *++p; - if (yych == 'S') goto yy1462; - if (yych == 's') goto yy1462; + if (yych == 'R') goto yy1455; + if (yych == 'r') goto yy1455; goto yy1417; yy1582: yych = *++p; - if (yych == 'D') goto yy1583; - if (yych != 'd') goto yy1417; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'F') { + if (yych == '>') goto yy1456; + goto yy1417; + } else { + if (yych <= 'G') goto yy1583; + if (yych != 'g') goto yy1417; + } + } yy1583: yych = *++p; - if (yych == 'E') goto yy1584; - if (yych != 'e') goto yy1417; + if (yych == 'R') goto yy1584; + if (yych != 'r') goto yy1417; yy1584: yych = *++p; if (yych == 'O') goto yy1585; if (yych != 'o') goto yy1417; yy1585: yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1586; - if (yych <= 0x1F) goto yy1417; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1417; - } else { - if (yych != '>') goto yy1417; - } - } + if (yych == 'U') goto yy1586; + if (yych != 'u') goto yy1417; yy1586: - ++p; - { return (bufsize_t)(p - start); } + yych = *++p; + if (yych == 'P') goto yy1455; + if (yych == 'p') goto yy1455; + goto yy1417; +yy1587: + yych = *++p; + if (yych == 'D') goto yy1602; + if (yych == 'd') goto yy1602; + goto yy1417; yy1588: yych = *++p; - if (yych <= 'R') { - if (yych == 'O') goto yy1604; - if (yych <= 'Q') goto yy1417; - goto yy1605; - } else { - if (yych <= 'o') { - if (yych <= 'n') goto yy1417; - goto yy1604; - } else { - if (yych == 'r') goto yy1605; - goto yy1417; - } - } + if (yych == 'O') goto yy1595; + if (yych == 'o') goto yy1595; + goto yy1417; yy1589: yych = *++p; - if (yych <= 'G') { - if (yych == 'E') goto yy1590; - if (yych <= 'F') goto yy1417; - goto yy1591; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy1417; - } else { - if (yych == 'g') goto yy1591; - goto yy1417; - } - } + if (yych == 'S') goto yy1590; + if (yych != 's') goto yy1417; yy1590: yych = *++p; - if (yych == 'L') goto yy1600; - if (yych == 'l') goto yy1600; - goto yy1417; + if (yych == 'E') goto yy1591; + if (yych != 'e') goto yy1417; yy1591: yych = *++p; - if (yych <= 'U') { - if (yych == 'C') goto yy1593; - if (yych <= 'T') goto yy1417; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') goto yy1456; + if (yych <= '.') goto yy1417; + goto yy1458; + } } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy1417; - goto yy1593; + if (yych <= 'E') { + if (yych == '>') goto yy1456; + goto yy1417; } else { - if (yych != 'u') goto yy1417; + if (yych <= 'F') goto yy1592; + if (yych != 'f') goto yy1417; } } +yy1592: yych = *++p; - if (yych == 'R') goto yy1599; - if (yych == 'r') goto yy1599; - goto yy1417; + if (yych == 'O') goto yy1593; + if (yych != 'o') goto yy1417; yy1593: yych = *++p; - if (yych == 'A') goto yy1594; - if (yych != 'a') goto yy1417; + if (yych == 'N') goto yy1594; + if (yych != 'n') goto yy1417; yy1594: yych = *++p; - if (yych == 'P') goto yy1595; - if (yych != 'p') goto yy1417; + if (yych == 'T') goto yy1455; + if (yych == 't') goto yy1455; + goto yy1417; yy1595: yych = *++p; - if (yych == 'T') goto yy1596; - if (yych != 't') goto yy1417; + if (yych == 'C') goto yy1596; + if (yych != 'c') goto yy1417; yy1596: yych = *++p; - if (yych == 'I') goto yy1597; - if (yych != 'i') goto yy1417; + if (yych == 'K') goto yy1597; + if (yych != 'k') goto yy1417; yy1597: yych = *++p; - if (yych == 'O') goto yy1598; - if (yych != 'o') goto yy1417; + if (yych == 'Q') goto yy1598; + if (yych != 'q') goto yy1417; yy1598: yych = *++p; - if (yych == 'N') goto yy1585; - if (yych == 'n') goto yy1585; - goto yy1417; + if (yych == 'U') goto yy1599; + if (yych != 'u') goto yy1417; yy1599: yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; + if (yych == 'O') goto yy1600; + if (yych != 'o') goto yy1417; yy1600: yych = *++p; - if (yych == 'D') goto yy1601; - if (yych != 'd') goto yy1417; + if (yych == 'T') goto yy1601; + if (yych != 't') goto yy1417; yy1601: yych = *++p; - if (yych == 'S') goto yy1602; - if (yych != 's') goto yy1417; + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; + goto yy1417; yy1602: yych = *++p; - if (yych == 'E') goto yy1603; - if (yych != 'e') goto yy1417; + if (yych == 'Y') goto yy1455; + if (yych == 'y') goto yy1455; + goto yy1417; yy1603: yych = *++p; - if (yych == 'T') goto yy1585; - if (yych == 't') goto yy1585; + if (yych == 'I') goto yy1614; + if (yych == 'i') goto yy1614; goto yy1417; yy1604: yych = *++p; - if (yych == 'T') goto yy1606; - if (yych == 't') goto yy1606; + if (yych == 'T') goto yy1610; + if (yych == 't') goto yy1610; goto yy1417; yy1605: yych = *++p; - if (yych == 'M') goto yy1585; - if (yych == 'm') goto yy1585; - goto yy1417; + if (yych == 'D') goto yy1606; + if (yych != 'd') goto yy1417; yy1606: yych = *++p; - if (yych == 'E') goto yy1607; - if (yych != 'e') goto yy1417; + if (yych == 'R') goto yy1607; + if (yych != 'r') goto yy1417; yy1607: yych = *++p; - if (yych == 'R') goto yy1585; - if (yych == 'r') goto yy1585; - goto yy1417; + if (yych == 'E') goto yy1608; + if (yych != 'e') goto yy1417; yy1608: yych = *++p; - if (yych == 'B') goto yy1609; - if (yych != 'b') goto yy1417; + if (yych == 'S') goto yy1609; + if (yych != 's') goto yy1417; yy1609: yych = *++p; - if (yych == 'E') goto yy1610; - if (yych != 'e') goto yy1417; + if (yych == 'S') goto yy1455; + if (yych == 's') goto yy1455; + goto yy1417; yy1610: yych = *++p; - if (yych == 'D') goto yy1585; - if (yych == 'd') goto yy1585; - goto yy1417; + if (yych == 'I') goto yy1611; + if (yych != 'i') goto yy1417; yy1611: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1586; - goto yy1417; - } else { - if (yych <= ' ') goto yy1586; - if (yych <= '.') goto yy1417; - goto yy1586; - } - } else { - if (yych <= 'D') { - if (yych == '>') goto yy1586; - goto yy1417; - } else { - if (yych <= 'E') goto yy1627; - if (yych == 'e') goto yy1627; - goto yy1417; - } - } + if (yych == 'C') goto yy1612; + if (yych != 'c') goto yy1417; yy1612: yych = *++p; - if (yych == 'O') goto yy1625; - if (yych == 'o') goto yy1625; - goto yy1417; + if (yych == 'L') goto yy1613; + if (yych != 'l') goto yy1417; yy1613: yych = *++p; - if (yych == 'X') goto yy1620; - if (yych == 'x') goto yy1620; + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; goto yy1417; yy1614: yych = *++p; - if (yych == 'O') goto yy1618; - if (yych == 'o') goto yy1618; - goto yy1417; + if (yych == 'D') goto yy1615; + if (yych != 'd') goto yy1417; yy1615: yych = *++p; - if (yych == 'B') goto yy1616; - if (yych != 'b') goto yy1417; + if (yych == 'E') goto yy1455; + if (yych == 'e') goto yy1455; + goto yy1417; yy1616: yych = *++p; - if (yych == 'L') goto yy1617; - if (yych != 'l') goto yy1417; + if (yych == 'E') goto yy1620; + if (yych == 'e') goto yy1620; + goto yy1417; yy1617: yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; + if (yych == 'R') goto yy1618; + if (yych != 'r') goto yy1417; yy1618: yych = *++p; - if (yych == 'D') goto yy1619; - if (yych != 'd') goto yy1417; + if (yych == 'A') goto yy1619; + if (yych != 'a') goto yy1417; yy1619: yych = *++p; - if (yych == 'Y') goto yy1585; - if (yych == 'y') goto yy1585; + if (yych == 'M') goto yy1455; + if (yych == 'm') goto yy1455; goto yy1417; yy1620: yych = *++p; - if (yych == 'T') goto yy1621; - if (yych != 't') goto yy1417; + if (yych <= ' ') { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1621; + if (yych <= 0x1F) goto yy1417; + } else { + if (yych <= '/') { + if (yych <= '.') goto yy1417; + goto yy1458; + } else { + if (yych != '>') goto yy1417; + } + } yy1621: yych = *++p; - if (yych == 'A') goto yy1622; - if (yych != 'a') goto yy1417; + goto yy1498; yy1622: yych = *++p; - if (yych == 'R') goto yy1623; - if (yych != 'r') goto yy1417; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) goto yy1417; + if (yych <= '\r') goto yy1456; + if (yych <= 0x1F) goto yy1417; + goto yy1456; + } else { + if (yych == '/') goto yy1458; + if (yych <= '=') goto yy1417; + goto yy1456; + } + } else { + if (yych <= 'R') { + if (yych == 'A') goto yy1617; + if (yych <= 'Q') goto yy1417; + goto yy1624; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy1417; + goto yy1617; + } else { + if (yych == 'r') goto yy1624; + goto yy1417; + } + } + } yy1623: yych = *++p; - if (yych == 'E') goto yy1624; - if (yych != 'e') goto yy1417; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'E') goto yy1481; + goto yy1417; + } else { + if (yych <= 'O') goto yy1480; + if (yych <= 'T') goto yy1417; + goto yy1479; + } + } else { + if (yych <= 'n') { + if (yych == 'e') goto yy1481; + goto yy1417; + } else { + if (yych <= 'o') goto yy1480; + if (yych == 'u') goto yy1479; + goto yy1417; + } + } yy1624: - yych = *++p; - if (yych == 'A') goto yy1585; - if (yych == 'a') goto yy1585; - goto yy1417; -yy1625: - yych = *++p; - if (yych == 'O') goto yy1626; - if (yych != 'o') goto yy1417; -yy1626: - yych = *++p; - if (yych == 'T') goto yy1585; - if (yych == 't') goto yy1585; + ++p; + if ((yych = *p) == 'E') goto yy1455; + if (yych == 'e') goto yy1455; goto yy1417; +} + +} + +// Try to match an HTML block tag start line of type 7, returning +// 7 if successful, 0 if not. +bufsize_t _scan_html_block_start_7(const unsigned char *p) +{ + const unsigned char *marker = NULL; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 224, 224, 224, 224, 224, 224, 224, + 224, 198, 202, 194, 198, 194, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, + 198, 224, 64, 224, 224, 224, 224, 128, + 224, 224, 224, 224, 224, 240, 240, 224, + 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 240, 224, 192, 192, 192, 224, + 224, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 224, 224, 224, 224, 240, + 192, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 224, 224, 224, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 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) { + if (yych <= ';') { + if (yych != '\n') goto yy1629; + } else { + if (yych <= '<') goto yy1628; + if (yych <= 0x7F) goto yy1629; + if (yych >= 0xC2) goto yy1630; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1632; + if (yych == 0xED) goto yy1637; + goto yy1633; + } else { + if (yych <= 0xF0) goto yy1634; + if (yych <= 0xF3) goto yy1635; + if (yych <= 0xF4) goto yy1636; + } + } yy1627: - yych = *++p; - if (yych == 'A') goto yy1628; - if (yych != 'a') goto yy1417; + { return 0; } yy1628: - yych = *++p; - if (yych == 'D') goto yy1585; - if (yych == 'd') goto yy1585; - goto yy1417; + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '@') { + if (yych == '/') goto yy1640; + goto yy1627; + } else { + if (yych <= 'Z') goto yy1638; + if (yych <= '`') goto yy1627; + if (yych <= 'z') goto yy1638; + goto yy1627; + } yy1629: yych = *++p; - if (yych == 'Y') goto yy1639; - if (yych == 'y') goto yy1639; - goto yy1417; + goto yy1627; yy1630: yych = *++p; - if (yych == 'R') goto yy1636; - if (yych == 'r') goto yy1636; - goto yy1417; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1629; yy1631: - yych = *++p; - if (yych == 'C') goto yy1632; - if (yych != 'c') goto yy1417; + p = marker; + if (yyaccept == 0) { + goto yy1627; + } else { + goto yy1649; + } yy1632: yych = *++p; - if (yych == 'T') goto yy1633; - if (yych != 't') goto yy1417; + if (yych <= 0x9F) goto yy1631; + if (yych <= 0xBF) goto yy1630; + goto yy1631; yy1633: yych = *++p; - if (yych == 'I') goto yy1634; - if (yych != 'i') goto yy1417; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1630; + goto yy1631; yy1634: yych = *++p; - if (yych == 'O') goto yy1635; - if (yych != 'o') goto yy1417; + if (yych <= 0x8F) goto yy1631; + if (yych <= 0xBF) goto yy1633; + goto yy1631; yy1635: yych = *++p; - if (yych == 'N') goto yy1585; - if (yych == 'n') goto yy1585; - goto yy1417; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1633; + goto yy1631; yy1636: yych = *++p; - if (yych == 'I') goto yy1637; - if (yych != 'i') goto yy1417; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x8F) goto yy1633; + goto yy1631; yy1637: yych = *++p; - if (yych == 'P') goto yy1638; - if (yych != 'p') goto yy1417; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x9F) goto yy1630; + goto yy1631; yy1638: - yych = *++p; - if (yych == 'T') goto yy1585; - if (yych == 't') goto yy1585; - goto yy1417; -yy1639: - yych = *++p; - if (yych == 'L') goto yy1640; - if (yych != 'l') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 1) { + goto yy1638; + } + if (yych <= ' ') { + if (yych <= 0x08) goto yy1631; + if (yych <= '\r') goto yy1651; + if (yych <= 0x1F) goto yy1631; + goto yy1651; + } else { + if (yych <= '/') { + if (yych <= '.') goto yy1631; + goto yy1653; + } else { + if (yych == '>') goto yy1645; + goto yy1631; + } + } yy1640: yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; + if (yych <= '@') goto yy1631; + if (yych <= 'Z') goto yy1641; + if (yych <= '`') goto yy1631; + if (yych >= '{') goto yy1631; yy1641: - yych = *++p; - if (yych == 'V') goto yy1585; - if (yych == 'v') goto yy1585; - goto yy1417; -yy1642: - yych = *++p; - if (yych == 'L') goto yy1651; - if (yych == 'l') goto yy1651; - goto yy1417; -yy1643: - yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy1644; - if (yych <= 'O') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 2) { + goto yy1643; + } + if (yych <= '>') { + if (yych <= '/') goto yy1631; + if (yych <= '9') goto yy1641; + if (yych <= '=') goto yy1631; goto yy1645; } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy1417; + if (yych <= 'Z') { + if (yych <= '@') goto yy1631; + goto yy1641; } else { - if (yych == 'p') goto yy1645; - goto yy1417; + if (yych <= '`') goto yy1631; + if (yych <= 'z') goto yy1641; + goto yy1631; } } -yy1644: - yych = *++p; - if (yych == 'V') goto yy1649; - if (yych == 'v') goto yy1649; - goto yy1417; +yy1643: + ++p; + yych = *p; + if (yybm[0+yych] & 2) { + goto yy1643; + } + if (yych != '>') goto yy1631; yy1645: - yych = *++p; - if (yych == 'T') goto yy1646; - if (yych != 't') goto yy1417; -yy1646: - yych = *++p; - if (yych == 'I') goto yy1647; - if (yych != 'i') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 4) { + goto yy1645; + } + if (yych <= 0x08) goto yy1631; + if (yych <= '\n') goto yy1647; + if (yych <= '\v') goto yy1631; + if (yych <= '\r') goto yy1650; + goto yy1631; yy1647: - yych = *++p; - if (yych == 'O') goto yy1648; - if (yych != 'o') goto yy1417; -yy1648: - yych = *++p; - if (yych == 'N') goto yy1585; - if (yych == 'n') goto yy1585; - goto yy1417; + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 4) { + goto yy1645; + } + if (yych <= 0x08) goto yy1649; + if (yych <= '\n') goto yy1647; + if (yych <= '\v') goto yy1649; + if (yych <= '\r') goto yy1650; yy1649: - yych = *++p; - if (yych == 'A') goto yy1650; - if (yych != 'a') goto yy1417; + { return 7; } yy1650: yych = *++p; - if (yych == 'S') goto yy1585; - if (yych == 's') goto yy1585; - goto yy1417; + goto yy1649; yy1651: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1586; - goto yy1417; + ++p; + yych = *p; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= 0x08) goto yy1631; + if (yych <= '\r') goto yy1651; + if (yych <= 0x1F) goto yy1631; + goto yy1651; } else { - if (yych <= ' ') goto yy1586; - if (yych <= '.') goto yy1417; - goto yy1586; + if (yych == '/') goto yy1653; + if (yych <= '9') goto yy1631; + goto yy1654; } } else { - if (yych <= 'F') { - if (yych == '>') goto yy1586; - goto yy1417; + if (yych <= 'Z') { + if (yych == '>') goto yy1645; + if (yych <= '@') goto yy1631; + goto yy1654; } else { - if (yych <= 'G') goto yy1652; - if (yych != 'g') goto yy1417; + if (yych <= '_') { + if (yych <= '^') goto yy1631; + goto yy1654; + } else { + if (yych <= '`') goto yy1631; + if (yych <= 'z') goto yy1654; + goto yy1631; + } } } -yy1652: - yych = *++p; - if (yych == 'R') goto yy1653; - if (yych != 'r') goto yy1417; yy1653: yych = *++p; - if (yych == 'O') goto yy1654; - if (yych != 'o') goto yy1417; + if (yych == '>') goto yy1645; + goto yy1631; yy1654: - yych = *++p; - if (yych == 'U') goto yy1655; - if (yych != 'u') goto yy1417; -yy1655: - yych = *++p; - if (yych == 'P') goto yy1585; - if (yych == 'p') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 16) { + goto yy1654; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy1631; + } else { + if (yych != ' ') goto yy1631; + } + } else { + if (yych <= '<') { + if (yych <= '/') goto yy1653; + goto yy1631; + } else { + if (yych <= '=') goto yy1658; + if (yych <= '>') goto yy1645; + goto yy1631; + } + } yy1656: - yych = *++p; - if (yych == 'T') goto yy1661; - if (yych == 't') goto yy1661; - goto yy1417; -yy1657: - yych = *++p; - if (yych == 'J') goto yy1658; - if (yych != 'j') goto yy1417; + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) goto yy1631; + if (yych <= '\r') goto yy1656; + if (yych <= 0x1F) goto yy1631; + goto yy1656; + } else { + if (yych <= '/') { + if (yych <= '.') goto yy1631; + goto yy1653; + } else { + if (yych == ':') goto yy1654; + goto yy1631; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') goto yy1658; + if (yych <= '>') goto yy1645; + if (yych <= '@') goto yy1631; + goto yy1654; + } else { + if (yych <= '_') { + if (yych <= '^') goto yy1631; + goto yy1654; + } else { + if (yych <= '`') goto yy1631; + if (yych <= 'z') goto yy1654; + goto yy1631; + } + } + } yy1658: - yych = *++p; - if (yych == 'E') goto yy1659; - if (yych != 'e') goto yy1417; -yy1659: - yych = *++p; - if (yych == 'C') goto yy1660; - if (yych != 'c') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1660; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) goto yy1631; + if (yych >= '!') goto yy1671; + } else { + if (yych <= '\'') goto yy1669; + if (yych <= 0xC1) goto yy1631; + if (yych <= 0xDF) goto yy1662; + goto yy1663; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) goto yy1665; + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1660; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) goto yy1631; + if (yych <= ' ') goto yy1694; + if (yych <= '"') goto yy1671; + goto yy1669; + } else { + if (yych == '>') goto yy1645; + if (yych <= 0xC1) goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1663; + if (yych == 0xED) goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) goto yy1665; + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } yy1660: - yych = *++p; - if (yych == 'T') goto yy1585; - if (yych == 't') goto yy1585; - goto yy1417; -yy1661: - yych = *++p; - if (yych == 'P') goto yy1662; - if (yych != 'p') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 32) { + goto yy1660; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) goto yy1631; + if (yych <= ' ') goto yy1688; + goto yy1631; + } else { + if (yych <= '>') goto yy1645; + if (yych <= 0xC1) goto yy1631; + if (yych >= 0xE0) goto yy1663; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) goto yy1665; + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } yy1662: - yych = *++p; - if (yych == 'U') goto yy1663; - if (yych != 'u') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1660; + goto yy1631; yy1663: - yych = *++p; - if (yych == 'T') goto yy1585; - if (yych == 't') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1631; + if (yych <= 0xBF) goto yy1662; + goto yy1631; yy1664: - yych = *++p; - if (yych == 'P') goto yy1585; - if (yych == 'p') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1662; + goto yy1631; yy1665: - yych = *++p; - if (yych == 'T') goto yy1676; - if (yych == 't') goto yy1676; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1631; + if (yych <= 0xBF) goto yy1664; + goto yy1631; yy1666: - yych = *++p; - if (yych == 'D') goto yy1675; - if (yych == 'd') goto yy1675; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1664; + goto yy1631; yy1667: - yych = *++p; - if (yych == 'O') goto yy1668; - if (yych != 'o') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x8F) goto yy1664; + goto yy1631; yy1668: - yych = *++p; - if (yych == 'C') goto yy1669; - if (yych != 'c') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x9F) goto yy1662; + goto yy1631; yy1669: - yych = *++p; - if (yych == 'K') goto yy1670; - if (yych != 'k') goto yy1417; -yy1670: - yych = *++p; - if (yych == 'Q') goto yy1671; - if (yych != 'q') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1669; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1631; + if (yych <= '\'') goto yy1680; + goto yy1631; + } else { + if (yych <= 0xDF) goto yy1681; + if (yych <= 0xE0) goto yy1682; + goto yy1683; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1687; + if (yych <= 0xEF) goto yy1683; + goto yy1684; + } else { + if (yych <= 0xF3) goto yy1685; + if (yych <= 0xF4) goto yy1686; + goto yy1631; + } + } yy1671: - yych = *++p; - if (yych == 'U') goto yy1672; - if (yych != 'u') goto yy1417; -yy1672: - yych = *++p; - if (yych == 'O') goto yy1673; - if (yych != 'o') goto yy1417; + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1671; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) goto yy1631; + if (yych <= '"') goto yy1680; + goto yy1631; + } else { + if (yych <= 0xDF) goto yy1673; + if (yych <= 0xE0) goto yy1674; + goto yy1675; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1679; + if (yych <= 0xEF) goto yy1675; + goto yy1676; + } else { + if (yych <= 0xF3) goto yy1677; + if (yych <= 0xF4) goto yy1678; + goto yy1631; + } + } yy1673: - yych = *++p; - if (yych == 'T') goto yy1674; - if (yych != 't') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1671; + goto yy1631; yy1674: - yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1631; + if (yych <= 0xBF) goto yy1673; + goto yy1631; yy1675: - yych = *++p; - if (yych == 'Y') goto yy1585; - if (yych == 'y') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1673; + goto yy1631; yy1676: - yych = *++p; - if (yych == 'T') goto yy1677; - if (yych != 't') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1631; + if (yych <= 0xBF) goto yy1675; + goto yy1631; yy1677: - yych = *++p; - if (yych == 'O') goto yy1678; - if (yych != 'o') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1675; + goto yy1631; yy1678: - yych = *++p; - if (yych == 'N') goto yy1585; - if (yych == 'n') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x8F) goto yy1675; + goto yy1631; yy1679: - yych = *++p; - if (yych == 'R') goto yy1680; - if (yych != 'r') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x9F) goto yy1673; + goto yy1631; yy1680: - yych = *++p; - if (yych == 'A') goto yy1681; - if (yych != 'a') goto yy1417; + ++p; + yych = *p; + if (yych <= ' ') { + if (yych <= 0x08) goto yy1631; + if (yych <= '\r') goto yy1651; + if (yych <= 0x1F) goto yy1631; + goto yy1651; + } else { + if (yych <= '/') { + if (yych <= '.') goto yy1631; + goto yy1653; + } else { + if (yych == '>') goto yy1645; + goto yy1631; + } + } yy1681: - yych = *++p; - if (yych == 'M') goto yy1682; - if (yych != 'm') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1669; + goto yy1631; yy1682: - yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1631; + if (yych <= 0xBF) goto yy1681; + goto yy1631; yy1683: - yych = *++p; - if (yych == 'R') goto yy1688; - if (yych == 'r') goto yy1688; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1681; + goto yy1631; yy1684: - yych = *++p; - if (yych == 'A') goto yy1685; - if (yych != 'a') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1631; + if (yych <= 0xBF) goto yy1683; + goto yy1631; yy1685: - yych = *++p; - if (yych == 'D') goto yy1686; - if (yych != 'd') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0xBF) goto yy1683; + goto yy1631; yy1686: - yych = *++p; - if (yych == 'E') goto yy1687; - if (yych != 'e') goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x8F) goto yy1683; + goto yy1631; yy1687: - yych = *++p; - if (yych == 'R') goto yy1585; - if (yych == 'r') goto yy1585; - goto yy1417; + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1631; + if (yych <= 0x9F) goto yy1681; + goto yy1631; yy1688: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) goto yy1631; + if (yych <= 0x08) goto yy1660; + goto yy1688; + } else { + if (yych == ' ') goto yy1688; + if (yych <= '!') goto yy1660; + goto yy1631; + } + } else { + if (yych <= ':') { + if (yych == '\'') goto yy1631; + if (yych <= '9') goto yy1660; + } else { + if (yych <= ';') goto yy1660; + if (yych <= '=') goto yy1631; + if (yych <= '>') goto yy1645; + goto yy1660; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') goto yy1690; + if (yych <= '^') goto yy1660; + if (yych >= '`') goto yy1631; + } else { + if (yych <= 'z') goto yy1690; + if (yych <= 0x7F) goto yy1660; + if (yych <= 0xC1) goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1663; + if (yych == 0xED) goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) goto yy1665; + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } + } +yy1690: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) goto yy1631; + if (yych <= 0x08) goto yy1660; + if (yych >= 0x0E) goto yy1660; + } else { + if (yych <= ' ') goto yy1692; + if (yych == '"') goto yy1631; + goto yy1660; + } + } else { + if (yych <= '/') { + if (yych <= '\'') goto yy1631; + if (yych <= ',') goto yy1660; + if (yych <= '.') goto yy1690; + goto yy1660; + } else { + if (yych <= ';') { + if (yych <= ':') goto yy1690; + goto yy1660; + } else { + if (yych <= '<') goto yy1631; + if (yych <= '=') goto yy1658; + goto yy1645; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') goto yy1660; + if (yych <= 'Z') goto yy1690; + if (yych <= '^') goto yy1660; + goto yy1690; + } else { + if (yych <= '`') goto yy1631; + if (yych <= 'z') goto yy1690; + if (yych <= 0x7F) goto yy1660; + goto yy1631; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1662; + if (yych <= 0xE0) goto yy1663; + if (yych <= 0xEC) goto yy1664; + goto yy1668; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1664; + goto yy1665; + } else { + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } + } + } +yy1692: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) goto yy1631; + if (yych <= 0x08) goto yy1660; + if (yych <= '\r') goto yy1692; + goto yy1660; + } else { + if (yych <= ' ') goto yy1692; + if (yych == '"') goto yy1631; + goto yy1660; + } + } else { + if (yych <= ';') { + if (yych <= '\'') goto yy1631; + if (yych == ':') goto yy1690; + goto yy1660; + } else { + if (yych <= '<') goto yy1631; + if (yych <= '=') goto yy1658; + if (yych <= '>') goto yy1645; + goto yy1660; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') goto yy1690; + if (yych <= '^') goto yy1660; + if (yych <= '_') goto yy1690; + goto yy1631; + } else { + if (yych <= 'z') goto yy1690; + if (yych <= 0x7F) goto yy1660; + if (yych <= 0xC1) goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1663; + if (yych == 0xED) goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) goto yy1665; + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } + } +yy1694: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) goto yy1631; + if (yych <= 0x08) goto yy1660; + goto yy1694; + } else { + if (yych == ' ') goto yy1694; + if (yych <= '!') goto yy1660; + goto yy1671; + } + } else { + if (yych <= ':') { + if (yych == '\'') goto yy1669; + if (yych <= '9') goto yy1660; + goto yy1690; + } else { + if (yych <= ';') goto yy1660; + if (yych <= '=') goto yy1631; + if (yych <= '>') goto yy1645; + goto yy1660; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') goto yy1690; + if (yych <= '^') goto yy1660; + if (yych <= '_') goto yy1690; + goto yy1631; + } else { + if (yych <= 'z') goto yy1690; + if (yych <= 0x7F) goto yy1660; + if (yych <= 0xC1) goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1663; + if (yych == 0xED) goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) goto yy1665; + if (yych <= 0xF3) goto yy1666; + if (yych <= 0xF4) goto yy1667; + goto yy1631; + } + } + } +} + +} + +// Try to match an HTML block end line of type 1 +bufsize_t _scan_html_block_end_1(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 64, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= ';') { + if (yych != '\n') goto yy1699; + } else { + if (yych <= '<') goto yy1700; + if (yych <= 0x7F) goto yy1699; + if (yych >= 0xC2) goto yy1701; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1703; + if (yych == 0xED) goto yy1708; + goto yy1704; + } else { + if (yych <= 0xF0) goto yy1705; + if (yych <= 0xF3) goto yy1706; + if (yych <= 0xF4) goto yy1707; + } + } +yy1698: + { return 0; } +yy1699: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') goto yy1698; + goto yy1713; + } else { + if (yych <= 0xC1) goto yy1698; + if (yych <= 0xF4) goto yy1713; + goto yy1698; + } +yy1700: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '/') { + if (yych == '\n') goto yy1698; + if (yych <= '.') goto yy1713; + goto yy1709; + } else { + if (yych <= 0x7F) goto yy1713; + if (yych <= 0xC1) goto yy1698; + if (yych <= 0xF4) goto yy1713; + goto yy1698; + } +yy1701: + yych = *++p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0xBF) goto yy1699; +yy1702: + p = marker; + if (yyaccept == 0) { + goto yy1698; + } else { + goto yy1730; + } +yy1703: + yych = *++p; + if (yych <= 0x9F) goto yy1702; + if (yych <= 0xBF) goto yy1701; + goto yy1702; +yy1704: + yych = *++p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0xBF) goto yy1701; + goto yy1702; +yy1705: + yych = *++p; + if (yych <= 0x8F) goto yy1702; + if (yych <= 0xBF) goto yy1704; + goto yy1702; +yy1706: + yych = *++p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0xBF) goto yy1704; + goto yy1702; +yy1707: + yych = *++p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0x8F) goto yy1704; + goto yy1702; +yy1708: + yych = *++p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0x9F) goto yy1701; + goto yy1702; +yy1709: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 's') { + if (yych <= 'R') { + if (yych <= '\n') { + if (yych <= '\t') goto yy1712; + goto yy1702; + } else { + if (yych == 'P') goto yy1721; + goto yy1712; + } + } else { + if (yych <= 'o') { + if (yych <= 'S') goto yy1722; + goto yy1712; + } else { + if (yych <= 'p') goto yy1721; + if (yych <= 'r') goto yy1712; + goto yy1722; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } else { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1720; + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1710: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xDF) { + if (yych <= '.') { + if (yych == '\n') goto yy1702; + } else { + if (yych <= '/') goto yy1709; + if (yych <= 0x7F) goto yy1712; + if (yych <= 0xC1) goto yy1702; + goto yy1714; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1715; + if (yych == 0xED) goto yy1720; + goto yy1716; + } else { + if (yych <= 0xF0) goto yy1717; + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } +yy1712: + ++p; + yych = *p; +yy1713: + if (yybm[0+yych] & 128) { + goto yy1712; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1702; + if (yych <= '<') goto yy1710; + goto yy1702; + } else { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1720; + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } +yy1714: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0xBF) goto yy1712; + goto yy1702; +yy1715: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1702; + if (yych <= 0xBF) goto yy1714; + goto yy1702; +yy1716: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0xBF) goto yy1714; + goto yy1702; +yy1717: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1702; + if (yych <= 0xBF) goto yy1716; + goto yy1702; +yy1718: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0xBF) goto yy1716; + goto yy1702; +yy1719: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0x8F) goto yy1716; + goto yy1702; +yy1720: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1702; + if (yych <= 0x9F) goto yy1714; + goto yy1702; +yy1721: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') goto yy1702; + if (yych <= 'Q') goto yy1712; + goto yy1733; + } else { + if (yych == 'r') goto yy1733; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1722: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 't') { + if (yych <= 'S') { + if (yych <= '\n') { + if (yych <= '\t') goto yy1712; + goto yy1702; + } else { + if (yych == 'C') goto yy1724; + goto yy1712; + } + } else { + if (yych <= 'b') { + if (yych >= 'U') goto yy1712; + } else { + if (yych <= 'c') goto yy1724; + if (yych <= 's') goto yy1712; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } else { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1720; + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'Y') { + if (yych == '\n') goto yy1702; + if (yych <= 'X') goto yy1712; + goto yy1731; + } else { + if (yych == 'y') goto yy1731; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1724: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') goto yy1702; + if (yych <= 'Q') goto yy1712; + } else { + if (yych == 'r') goto yy1725; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1725: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'I') { + if (yych == '\n') goto yy1702; + if (yych <= 'H') goto yy1712; + } else { + if (yych == 'i') goto yy1726; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1726: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'P') { + if (yych == '\n') goto yy1702; + if (yych <= 'O') goto yy1712; + } else { + if (yych == 'p') goto yy1727; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1727: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'T') { + if (yych == '\n') goto yy1702; + if (yych <= 'S') goto yy1712; + } else { + if (yych == 't') goto yy1728; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1728: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') goto yy1702; + goto yy1712; + } else { + if (yych <= '>') goto yy1729; + if (yych <= 0x7F) goto yy1712; + if (yych <= 0xC1) goto yy1702; + goto yy1714; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1715; + if (yych == 0xED) goto yy1720; + goto yy1716; + } else { + if (yych <= 0xF0) goto yy1717; + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } +yy1729: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1712; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1730; + if (yych <= '<') goto yy1710; + } else { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1720; + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + } + } +yy1730: + { return (bufsize_t)(p - start); } +yy1731: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'L') { + if (yych == '\n') goto yy1702; + if (yych <= 'K') goto yy1712; + } else { + if (yych == 'l') goto yy1732; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1732: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'E') { + if (yych == '\n') goto yy1702; + if (yych <= 'D') goto yy1712; + goto yy1728; + } else { + if (yych == 'e') goto yy1728; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +yy1733: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'E') { + if (yych == '\n') goto yy1702; + if (yych <= 'D') goto yy1712; + goto yy1728; + } else { + if (yych == 'e') goto yy1728; + if (yych <= 0x7F) goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) goto yy1714; + if (yych <= 0xE0) goto yy1715; + if (yych <= 0xEC) goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) goto yy1718; + if (yych <= 0xF4) goto yy1719; + goto yy1702; + } + } + } +} + +} + +// Try to match an HTML block end line of type 2 +bufsize_t _scan_html_block_end_2(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 64, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= ',') { + if (yych != '\n') goto yy1737; + } else { + if (yych <= '-') goto yy1738; + if (yych <= 0x7F) goto yy1737; + if (yych >= 0xC2) goto yy1739; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1741; + if (yych == 0xED) goto yy1746; + goto yy1742; + } else { + if (yych <= 0xF0) goto yy1743; + if (yych <= 0xF3) goto yy1744; + if (yych <= 0xF4) goto yy1745; + } + } +yy1736: + { return 0; } +yy1737: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') goto yy1736; + goto yy1750; + } else { + if (yych <= 0xC1) goto yy1736; + if (yych <= 0xF4) goto yy1750; + goto yy1736; + } +yy1738: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0+yych] & 64) { + goto yy1747; + } + if (yych <= 0x7F) { + if (yych == '\n') goto yy1736; + goto yy1750; + } else { + if (yych <= 0xC1) goto yy1736; + if (yych <= 0xF4) goto yy1750; + goto yy1736; + } +yy1739: + yych = *++p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0xBF) goto yy1737; +yy1740: + p = marker; + if (yyaccept == 0) { + goto yy1736; + } else { + goto yy1760; + } +yy1741: + yych = *++p; + if (yych <= 0x9F) goto yy1740; + if (yych <= 0xBF) goto yy1739; + goto yy1740; +yy1742: + yych = *++p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0xBF) goto yy1739; + goto yy1740; +yy1743: + yych = *++p; + if (yych <= 0x8F) goto yy1740; + if (yych <= 0xBF) goto yy1742; + goto yy1740; +yy1744: + yych = *++p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0xBF) goto yy1742; + goto yy1740; +yy1745: + yych = *++p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0x8F) goto yy1742; + goto yy1740; +yy1746: + yych = *++p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0x9F) goto yy1739; + goto yy1740; +yy1747: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1747; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') goto yy1740; + } else { + if (yych <= '>') goto yy1759; + if (yych <= 0x7F) goto yy1749; + if (yych <= 0xC1) goto yy1740; + goto yy1751; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1752; + if (yych == 0xED) goto yy1757; + goto yy1753; + } else { + if (yych <= 0xF0) goto yy1754; + if (yych <= 0xF3) goto yy1755; + if (yych <= 0xF4) goto yy1756; + goto yy1740; + } + } +yy1749: + ++p; + yych = *p; +yy1750: + if (yybm[0+yych] & 128) { + goto yy1749; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1740; + if (yych <= '-') goto yy1758; + goto yy1740; + } else { + if (yych <= 0xDF) goto yy1751; + if (yych <= 0xE0) goto yy1752; + goto yy1753; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1757; + if (yych <= 0xEF) goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) goto yy1755; + if (yych <= 0xF4) goto yy1756; + goto yy1740; + } + } +yy1751: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0xBF) goto yy1749; + goto yy1740; +yy1752: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1740; + if (yych <= 0xBF) goto yy1751; + goto yy1740; +yy1753: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0xBF) goto yy1751; + goto yy1740; +yy1754: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1740; + if (yych <= 0xBF) goto yy1753; + goto yy1740; +yy1755: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0xBF) goto yy1753; + goto yy1740; +yy1756: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0x8F) goto yy1753; + goto yy1740; +yy1757: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1740; + if (yych <= 0x9F) goto yy1751; + goto yy1740; +yy1758: + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1749; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1740; + if (yych <= '-') goto yy1747; + goto yy1740; + } else { + if (yych <= 0xDF) goto yy1751; + if (yych <= 0xE0) goto yy1752; + goto yy1753; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1757; + if (yych <= 0xEF) goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) goto yy1755; + if (yych <= 0xF4) goto yy1756; + goto yy1740; + } + } +yy1759: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1749; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1760; + if (yych <= '-') goto yy1758; + } else { + if (yych <= 0xDF) goto yy1751; + if (yych <= 0xE0) goto yy1752; + goto yy1753; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1757; + if (yych <= 0xEF) goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) goto yy1755; + if (yych <= 0xF4) goto yy1756; + } + } +yy1760: + { return (bufsize_t)(p - start); } +} + +} + +// Try to match an HTML block end line of type 3 +bufsize_t _scan_html_block_end_3(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 64, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '>') { + if (yych != '\n') goto yy1764; + } else { + if (yych <= '?') goto yy1765; + if (yych <= 0x7F) goto yy1764; + if (yych >= 0xC2) goto yy1766; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1768; + if (yych == 0xED) goto yy1773; + goto yy1769; + } else { + if (yych <= 0xF0) goto yy1770; + if (yych <= 0xF3) goto yy1771; + if (yych <= 0xF4) goto yy1772; + } + } +yy1763: + { return 0; } +yy1764: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') goto yy1763; + goto yy1779; + } else { + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xF4) goto yy1779; + goto yy1763; + } +yy1765: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '>') { + if (yych == '\n') goto yy1763; + if (yych <= '=') goto yy1779; + goto yy1774; + } else { + if (yych <= 0x7F) goto yy1779; + if (yych <= 0xC1) goto yy1763; + if (yych <= 0xF4) goto yy1779; + goto yy1763; + } +yy1766: + yych = *++p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0xBF) goto yy1764; +yy1767: + p = marker; + if (yyaccept == 0) { + goto yy1763; + } else { + goto yy1775; + } +yy1768: + yych = *++p; + if (yych <= 0x9F) goto yy1767; + if (yych <= 0xBF) goto yy1766; + goto yy1767; +yy1769: + yych = *++p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0xBF) goto yy1766; + goto yy1767; +yy1770: + yych = *++p; + if (yych <= 0x8F) goto yy1767; + if (yych <= 0xBF) goto yy1769; + goto yy1767; +yy1771: + yych = *++p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0xBF) goto yy1769; + goto yy1767; +yy1772: + yych = *++p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0x8F) goto yy1769; + goto yy1767; +yy1773: + yych = *++p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0x9F) goto yy1766; + goto yy1767; +yy1774: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1778; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1775; + if (yych <= '?') goto yy1776; + } else { + if (yych <= 0xDF) goto yy1780; + if (yych <= 0xE0) goto yy1781; + goto yy1782; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1786; + if (yych <= 0xEF) goto yy1782; + goto yy1783; + } else { + if (yych <= 0xF3) goto yy1784; + if (yych <= 0xF4) goto yy1785; + } + } +yy1775: + { return (bufsize_t)(p - start); } +yy1776: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1776; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') goto yy1767; + } else { + if (yych <= '>') goto yy1774; + if (yych <= 0x7F) goto yy1778; + if (yych <= 0xC1) goto yy1767; + goto yy1780; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1781; + if (yych == 0xED) goto yy1786; + goto yy1782; + } else { + if (yych <= 0xF0) goto yy1783; + if (yych <= 0xF3) goto yy1784; + if (yych <= 0xF4) goto yy1785; + goto yy1767; + } + } +yy1778: + ++p; + yych = *p; +yy1779: + if (yybm[0+yych] & 128) { + goto yy1778; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1767; + if (yych <= '?') goto yy1776; + goto yy1767; + } else { + if (yych <= 0xDF) goto yy1780; + if (yych <= 0xE0) goto yy1781; + goto yy1782; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1786; + if (yych <= 0xEF) goto yy1782; + goto yy1783; + } else { + if (yych <= 0xF3) goto yy1784; + if (yych <= 0xF4) goto yy1785; + goto yy1767; + } + } +yy1780: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0xBF) goto yy1778; + goto yy1767; +yy1781: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1767; + if (yych <= 0xBF) goto yy1780; + goto yy1767; +yy1782: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0xBF) goto yy1780; + goto yy1767; +yy1783: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1767; + if (yych <= 0xBF) goto yy1782; + goto yy1767; +yy1784: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0xBF) goto yy1782; + goto yy1767; +yy1785: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0x8F) goto yy1782; + goto yy1767; +yy1786: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1767; + if (yych <= 0x9F) goto yy1780; + goto yy1767; +} + +} + +// Try to match an HTML block end line of type 4 +bufsize_t _scan_html_block_end_4(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 64, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych != '\n') goto yy1790; + } else { + if (yych <= '>') goto yy1791; + if (yych <= 0x7F) goto yy1790; + if (yych >= 0xC2) goto yy1793; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1795; + if (yych == 0xED) goto yy1800; + goto yy1796; + } else { + if (yych <= 0xF0) goto yy1797; + if (yych <= 0xF3) goto yy1798; + if (yych <= 0xF4) goto yy1799; + } + } +yy1789: + { return 0; } +yy1790: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') goto yy1789; + goto yy1804; + } else { + if (yych <= 0xC1) goto yy1789; + if (yych <= 0xF4) goto yy1804; + goto yy1789; + } +yy1791: + yyaccept = 1; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') goto yy1804; + } else { + if (yych <= 0xC1) goto yy1792; + if (yych <= 0xF4) goto yy1804; + } +yy1792: + { return (bufsize_t)(p - start); } +yy1793: + yych = *++p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0xBF) goto yy1790; +yy1794: + p = marker; + if (yyaccept == 0) { + goto yy1789; + } else { + goto yy1792; + } +yy1795: + yych = *++p; + if (yych <= 0x9F) goto yy1794; + if (yych <= 0xBF) goto yy1793; + goto yy1794; +yy1796: + yych = *++p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0xBF) goto yy1793; + goto yy1794; +yy1797: + yych = *++p; + if (yych <= 0x8F) goto yy1794; + if (yych <= 0xBF) goto yy1796; + goto yy1794; +yy1798: + yych = *++p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0xBF) goto yy1796; + goto yy1794; +yy1799: + yych = *++p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0x8F) goto yy1796; + goto yy1794; +yy1800: + yych = *++p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0x9F) goto yy1793; + goto yy1794; +yy1801: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1803; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1792; + if (yych <= '>') goto yy1801; + goto yy1792; + } else { + if (yych <= 0xDF) goto yy1805; + if (yych <= 0xE0) goto yy1806; + goto yy1807; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1811; + if (yych <= 0xEF) goto yy1807; + goto yy1808; + } else { + if (yych <= 0xF3) goto yy1809; + if (yych <= 0xF4) goto yy1810; + goto yy1792; + } + } +yy1803: + ++p; + yych = *p; +yy1804: + if (yybm[0+yych] & 128) { + goto yy1803; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1794; + if (yych <= '>') goto yy1801; + goto yy1794; + } else { + if (yych <= 0xDF) goto yy1805; + if (yych <= 0xE0) goto yy1806; + goto yy1807; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1811; + if (yych <= 0xEF) goto yy1807; + goto yy1808; + } else { + if (yych <= 0xF3) goto yy1809; + if (yych <= 0xF4) goto yy1810; + goto yy1794; + } + } +yy1805: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0xBF) goto yy1803; + goto yy1794; +yy1806: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1794; + if (yych <= 0xBF) goto yy1805; + goto yy1794; +yy1807: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0xBF) goto yy1805; + goto yy1794; +yy1808: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1794; + if (yych <= 0xBF) goto yy1807; + goto yy1794; +yy1809: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0xBF) goto yy1807; + goto yy1794; +yy1810: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0x8F) goto yy1807; + goto yy1794; +yy1811: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1794; + if (yych <= 0x9F) goto yy1805; + goto yy1794; +} + +} + +// Try to match an HTML block end line of type 5 +bufsize_t _scan_html_block_end_5(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; + +{ + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 64, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '\\') { + if (yych != '\n') goto yy1815; + } else { + if (yych <= ']') goto yy1816; + if (yych <= 0x7F) goto yy1815; + if (yych >= 0xC2) goto yy1817; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1819; + if (yych == 0xED) goto yy1824; + goto yy1820; + } else { + if (yych <= 0xF0) goto yy1821; + if (yych <= 0xF3) goto yy1822; + if (yych <= 0xF4) goto yy1823; + } + } +yy1814: + { return 0; } +yy1815: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') goto yy1814; + goto yy1828; + } else { + if (yych <= 0xC1) goto yy1814; + if (yych <= 0xF4) goto yy1828; + goto yy1814; + } +yy1816: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0+yych] & 64) { + goto yy1825; + } + if (yych <= 0x7F) { + if (yych == '\n') goto yy1814; + goto yy1828; + } else { + if (yych <= 0xC1) goto yy1814; + if (yych <= 0xF4) goto yy1828; + goto yy1814; + } +yy1817: yych = *++p; - if (yych == 'O') goto yy1689; - if (yych != 'o') goto yy1417; -yy1689: - yych = *++p; - if (yych == 'U') goto yy1690; - if (yych != 'u') goto yy1417; -yy1690: - yych = *++p; - if (yych == 'P') goto yy1585; - if (yych == 'p') goto yy1585; - goto yy1417; -yy1691: - yych = *++p; - if (yych == 'I') goto yy1697; - if (yych == 'i') goto yy1697; - goto yy1417; -yy1692: - yych = *++p; - if (yych == 'T') goto yy1693; - if (yych != 't') goto yy1417; -yy1693: - yych = *++p; - if (yych == 'I') goto yy1694; - if (yych != 'i') goto yy1417; -yy1694: + if (yych <= 0x7F) goto yy1818; + if (yych <= 0xBF) goto yy1815; +yy1818: + p = marker; + if (yyaccept == 0) { + goto yy1814; + } else { + goto yy1838; + } +yy1819: yych = *++p; - if (yych == 'C') goto yy1695; - if (yych != 'c') goto yy1417; -yy1695: + if (yych <= 0x9F) goto yy1818; + if (yych <= 0xBF) goto yy1817; + goto yy1818; +yy1820: yych = *++p; - if (yych == 'L') goto yy1696; - if (yych != 'l') goto yy1417; -yy1696: + if (yych <= 0x7F) goto yy1818; + if (yych <= 0xBF) goto yy1817; + goto yy1818; +yy1821: yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; -yy1697: + if (yych <= 0x8F) goto yy1818; + if (yych <= 0xBF) goto yy1820; + goto yy1818; +yy1822: yych = *++p; - if (yych == 'D') goto yy1698; - if (yych != 'd') goto yy1417; -yy1698: + if (yych <= 0x7F) goto yy1818; + if (yych <= 0xBF) goto yy1820; + goto yy1818; +yy1823: yych = *++p; - if (yych == 'E') goto yy1585; - if (yych == 'e') goto yy1585; - goto yy1417; -yy1699: + if (yych <= 0x7F) goto yy1818; + if (yych <= 0x8F) goto yy1820; + goto yy1818; +yy1824: yych = *++p; - if (yych <= 'O') { - if (yych == 'E') goto yy1585; - if (yych <= 'N') goto yy1417; + if (yych <= 0x7F) goto yy1818; + if (yych <= 0x9F) goto yy1817; + goto yy1818; +yy1825: + ++p; + yych = *p; + if (yybm[0+yych] & 64) { + goto yy1825; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') goto yy1818; + } else { + if (yych <= '>') goto yy1837; + if (yych <= 0x7F) goto yy1827; + if (yych <= 0xC1) goto yy1818; + goto yy1829; + } } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy1417; - goto yy1585; + if (yych <= 0xEF) { + if (yych <= 0xE0) goto yy1830; + if (yych == 0xED) goto yy1835; + goto yy1831; } else { - if (yych != 'o') goto yy1417; + if (yych <= 0xF0) goto yy1832; + if (yych <= 0xF3) goto yy1833; + if (yych <= 0xF4) goto yy1834; + goto yy1818; } } - yych = *++p; - if (yych == 'G') goto yy1701; - if (yych != 'g') goto yy1417; -yy1701: - yych = *++p; - if (yych == 'R') goto yy1702; - if (yych != 'r') goto yy1417; -yy1702: - yych = *++p; - if (yych == 'E') goto yy1703; - if (yych != 'e') goto yy1417; -yy1703: - yych = *++p; - if (yych == 'S') goto yy1704; - if (yych != 's') goto yy1417; -yy1704: +yy1827: ++p; - if ((yych = *p) == 'S') goto yy1585; - if (yych == 's') goto yy1585; - goto yy1417; + yych = *p; +yy1828: + if (yybm[0+yych] & 128) { + goto yy1827; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1818; + if (yych <= ']') goto yy1836; + goto yy1818; + } else { + if (yych <= 0xDF) goto yy1829; + if (yych <= 0xE0) goto yy1830; + goto yy1831; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1835; + if (yych <= 0xEF) goto yy1831; + goto yy1832; + } else { + if (yych <= 0xF3) goto yy1833; + if (yych <= 0xF4) goto yy1834; + goto yy1818; + } + } +yy1829: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1818; + if (yych <= 0xBF) goto yy1827; + goto yy1818; +yy1830: + ++p; + yych = *p; + if (yych <= 0x9F) goto yy1818; + if (yych <= 0xBF) goto yy1829; + goto yy1818; +yy1831: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1818; + if (yych <= 0xBF) goto yy1829; + goto yy1818; +yy1832: + ++p; + yych = *p; + if (yych <= 0x8F) goto yy1818; + if (yych <= 0xBF) goto yy1831; + goto yy1818; +yy1833: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1818; + if (yych <= 0xBF) goto yy1831; + goto yy1818; +yy1834: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1818; + if (yych <= 0x8F) goto yy1831; + goto yy1818; +yy1835: + ++p; + yych = *p; + if (yych <= 0x7F) goto yy1818; + if (yych <= 0x9F) goto yy1829; + goto yy1818; +yy1836: + ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1827; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1818; + if (yych <= ']') goto yy1825; + goto yy1818; + } else { + if (yych <= 0xDF) goto yy1829; + if (yych <= 0xE0) goto yy1830; + goto yy1831; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1835; + if (yych <= 0xEF) goto yy1831; + goto yy1832; + } else { + if (yych <= 0xF3) goto yy1833; + if (yych <= 0xF4) goto yy1834; + goto yy1818; + } + } +yy1837: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0+yych] & 128) { + goto yy1827; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') goto yy1838; + if (yych <= ']') goto yy1836; + } else { + if (yych <= 0xDF) goto yy1829; + if (yych <= 0xE0) goto yy1830; + goto yy1831; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy1835; + if (yych <= 0xEF) goto yy1831; + goto yy1832; + } else { + if (yych <= 0xF3) goto yy1833; + if (yych <= 0xF4) goto yy1834; + } + } +yy1838: + { return (bufsize_t)(p - start); } } } @@ -14495,1226 +16645,1226 @@ bufsize_t _scan_link_url(const unsigned char *p) if (yych <= '[') { if (yych <= ' ') { if (yych <= '\f') { - if (yych == '\n') goto yy1708; - goto yy1724; + if (yych == '\n') goto yy1842; + goto yy1858; } else { - if (yych <= '\r') goto yy1710; - if (yych <= 0x1F) goto yy1724; - goto yy1710; + if (yych <= '\r') goto yy1844; + if (yych <= 0x1F) goto yy1858; + goto yy1844; } } else { if (yych <= ')') { - if (yych <= '\'') goto yy1713; - if (yych <= '(') goto yy1722; - goto yy1724; + if (yych <= '\'') goto yy1847; + if (yych <= '(') goto yy1856; + goto yy1858; } else { - if (yych == '<') goto yy1711; - goto yy1713; + if (yych == '<') goto yy1845; + goto yy1847; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy1712; - if (yych <= 0x7F) goto yy1713; + if (yych <= '\\') goto yy1846; + if (yych <= 0x7F) goto yy1847; } else { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1716; - goto yy1717; + if (yych <= 0xDF) goto yy1848; + if (yych <= 0xE0) goto yy1850; + goto yy1851; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1721; - if (yych <= 0xEF) goto yy1717; - goto yy1718; + if (yych <= 0xED) goto yy1855; + if (yych <= 0xEF) goto yy1851; + goto yy1852; } else { - if (yych <= 0xF3) goto yy1719; - if (yych <= 0xF4) goto yy1720; + if (yych <= 0xF3) goto yy1853; + if (yych <= 0xF4) goto yy1854; } } } -yy1707: +yy1841: { return (bufsize_t)(p - start); } -yy1708: +yy1842: yyaccept = 0; marker = ++p; yych = *p; -yy1709: +yy1843: if (yybm[0+yych] & 8) { - goto yy1708; + goto yy1842; } if (yych <= 0x7F) { if (yych <= ')') { - if (yych <= 0x1F) goto yy1707; - if (yych <= '\'') goto yy1736; - if (yych <= '(') goto yy1727; - goto yy1707; + if (yych <= 0x1F) goto yy1841; + if (yych <= '\'') goto yy1870; + if (yych <= '(') goto yy1861; + goto yy1841; } else { if (yych <= '<') { - if (yych <= ';') goto yy1736; - goto yy1760; + if (yych <= ';') goto yy1870; + goto yy1894; } else { - if (yych == '\\') goto yy1738; - goto yy1736; + if (yych == '\\') goto yy1872; + goto yy1870; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { - if (yych <= 0xC1) goto yy1707; - goto yy1740; + if (yych <= 0xC1) goto yy1841; + goto yy1874; } else { - if (yych <= 0xE0) goto yy1741; - if (yych <= 0xEC) goto yy1742; - goto yy1746; + if (yych <= 0xE0) goto yy1875; + if (yych <= 0xEC) goto yy1876; + goto yy1880; } } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1742; - goto yy1743; + if (yych <= 0xEF) goto yy1876; + goto yy1877; } else { - if (yych <= 0xF3) goto yy1744; - if (yych <= 0xF4) goto yy1745; - goto yy1707; + if (yych <= 0xF3) goto yy1878; + if (yych <= 0xF4) goto yy1879; + goto yy1841; } } } -yy1710: +yy1844: yyaccept = 0; yych = *(marker = ++p); - goto yy1709; -yy1711: + goto yy1843; +yy1845: yyaccept = 0; yych = *(marker = ++p); if (yybm[0+yych] & 64) { - goto yy1760; + goto yy1894; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1707; - goto yy1773; + if (yych <= 0x00) goto yy1841; + goto yy1907; } else { - if (yych <= '\n') goto yy1707; - if (yych <= '\f') goto yy1773; - goto yy1707; + if (yych <= '\n') goto yy1841; + if (yych <= '\f') goto yy1907; + goto yy1841; } } else { if (yych <= '(') { - if (yych <= ' ') goto yy1773; - goto yy1771; + if (yych <= ' ') goto yy1907; + goto yy1905; } else { - if (yych <= ')') goto yy1773; - if (yych <= '<') goto yy1736; - goto yy1762; + if (yych <= ')') goto yy1907; + if (yych <= '<') goto yy1870; + goto yy1896; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy1758; - goto yy1707; + if (yych <= '\\') goto yy1892; + goto yy1841; } else { - if (yych <= 0xDF) goto yy1764; - if (yych <= 0xE0) goto yy1765; - goto yy1766; + if (yych <= 0xDF) goto yy1898; + if (yych <= 0xE0) goto yy1899; + goto yy1900; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1770; - if (yych <= 0xEF) goto yy1766; - goto yy1767; + if (yych <= 0xED) goto yy1904; + if (yych <= 0xEF) goto yy1900; + goto yy1901; } else { - if (yych <= 0xF3) goto yy1768; - if (yych <= 0xF4) goto yy1769; - goto yy1707; + if (yych <= 0xF3) goto yy1902; + if (yych <= 0xF4) goto yy1903; + goto yy1841; } } } -yy1712: +yy1846: yyaccept = 0; yych = *(marker = ++p); - if (yych <= '\'') goto yy1737; - if (yych <= '(') goto yy1747; - if (yych <= ')') goto yy1736; - goto yy1737; -yy1713: + if (yych <= '\'') goto yy1871; + if (yych <= '(') goto yy1881; + if (yych <= ')') goto yy1870; + goto yy1871; +yy1847: yyaccept = 0; yych = *(marker = ++p); - goto yy1737; -yy1714: + goto yy1871; +yy1848: yych = *++p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1713; -yy1715: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1847; +yy1849: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1707; + goto yy1841; } else { - goto yy1723; + goto yy1857; } } else { - goto yy1763; + goto yy1897; } -yy1716: +yy1850: yych = *++p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1714; - goto yy1715; -yy1717: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1848; + goto yy1849; +yy1851: yych = *++p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1714; - goto yy1715; -yy1718: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1848; + goto yy1849; +yy1852: yych = *++p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1717; - goto yy1715; -yy1719: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1851; + goto yy1849; +yy1853: yych = *++p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1717; - goto yy1715; -yy1720: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1851; + goto yy1849; +yy1854: yych = *++p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1717; - goto yy1715; -yy1721: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1851; + goto yy1849; +yy1855: yych = *++p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1714; - goto yy1715; -yy1722: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1848; + goto yy1849; +yy1856: yyaccept = 1; yych = *(marker = ++p); if (yych <= '(') { - if (yych <= ' ') goto yy1723; - if (yych <= '\'') goto yy1728; + if (yych <= ' ') goto yy1857; + if (yych <= '\'') goto yy1862; } else { - if (yych <= 0x7F) goto yy1728; - if (yych <= 0xC1) goto yy1723; - if (yych <= 0xF4) goto yy1728; + if (yych <= 0x7F) goto yy1862; + if (yych <= 0xC1) goto yy1857; + if (yych <= 0xF4) goto yy1862; } -yy1723: +yy1857: { return 0; } -yy1724: +yy1858: yych = *++p; - goto yy1723; -yy1725: + goto yy1857; +yy1859: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1725; + goto yy1859; } if (yych <= 0xE0) { if (yych <= ')') { - if (yych <= ' ') goto yy1715; - if (yych >= ')') goto yy1747; + if (yych <= ' ') goto yy1849; + if (yych >= ')') goto yy1881; } else { - if (yych <= 0x7F) goto yy1727; - if (yych <= 0xC1) goto yy1715; - if (yych <= 0xDF) goto yy1729; - goto yy1730; + if (yych <= 0x7F) goto yy1861; + if (yych <= 0xC1) goto yy1849; + if (yych <= 0xDF) goto yy1863; + goto yy1864; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1735; - goto yy1731; + if (yych == 0xED) goto yy1869; + goto yy1865; } else { - if (yych <= 0xF0) goto yy1732; - if (yych <= 0xF3) goto yy1733; - if (yych <= 0xF4) goto yy1734; - goto yy1715; + if (yych <= 0xF0) goto yy1866; + if (yych <= 0xF3) goto yy1867; + if (yych <= 0xF4) goto yy1868; + goto yy1849; } } -yy1727: +yy1861: ++p; yych = *p; -yy1728: +yy1862: if (yybm[0+yych] & 32) { - goto yy1727; + goto yy1861; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= '(') goto yy1715; - if (yych <= ')') goto yy1736; - goto yy1725; + if (yych <= '(') goto yy1849; + if (yych <= ')') goto yy1870; + goto yy1859; } else { - if (yych <= 0xC1) goto yy1715; - if (yych >= 0xE0) goto yy1730; + if (yych <= 0xC1) goto yy1849; + if (yych >= 0xE0) goto yy1864; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1735; - goto yy1731; + if (yych == 0xED) goto yy1869; + goto yy1865; } else { - if (yych <= 0xF0) goto yy1732; - if (yych <= 0xF3) goto yy1733; - if (yych <= 0xF4) goto yy1734; - goto yy1715; + if (yych <= 0xF0) goto yy1866; + if (yych <= 0xF3) goto yy1867; + if (yych <= 0xF4) goto yy1868; + goto yy1849; } } -yy1729: +yy1863: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1727; - goto yy1715; -yy1730: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1861; + goto yy1849; +yy1864: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1729; - goto yy1715; -yy1731: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1863; + goto yy1849; +yy1865: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1729; - goto yy1715; -yy1732: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1863; + goto yy1849; +yy1866: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1731; - goto yy1715; -yy1733: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1865; + goto yy1849; +yy1867: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1731; - goto yy1715; -yy1734: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1865; + goto yy1849; +yy1868: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1731; - goto yy1715; -yy1735: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1865; + goto yy1849; +yy1869: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1729; - goto yy1715; -yy1736: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1863; + goto yy1849; +yy1870: yyaccept = 0; marker = ++p; yych = *p; -yy1737: +yy1871: if (yych <= 0xC1) { if (yych <= ')') { - if (yych <= ' ') goto yy1707; - if (yych <= '\'') goto yy1736; - if (yych <= '(') goto yy1727; - goto yy1707; + if (yych <= ' ') goto yy1841; + if (yych <= '\'') goto yy1870; + if (yych <= '(') goto yy1861; + goto yy1841; } else { - if (yych == '\\') goto yy1738; - if (yych <= 0x7F) goto yy1736; - goto yy1707; + if (yych == '\\') goto yy1872; + if (yych <= 0x7F) goto yy1870; + goto yy1841; } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1740; - if (yych <= 0xE0) goto yy1741; - if (yych <= 0xEC) goto yy1742; - goto yy1746; + if (yych <= 0xDF) goto yy1874; + if (yych <= 0xE0) goto yy1875; + if (yych <= 0xEC) goto yy1876; + goto yy1880; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1742; - goto yy1743; + if (yych <= 0xEF) goto yy1876; + goto yy1877; } else { - if (yych <= 0xF3) goto yy1744; - if (yych <= 0xF4) goto yy1745; - goto yy1707; + if (yych <= 0xF3) goto yy1878; + if (yych <= 0xF4) goto yy1879; + goto yy1841; } } } -yy1738: +yy1872: yyaccept = 0; marker = ++p; yych = *p; if (yych <= 0xDF) { if (yych <= '[') { - if (yych <= ' ') goto yy1707; - if (yych == '(') goto yy1747; - goto yy1736; + if (yych <= ' ') goto yy1841; + if (yych == '(') goto yy1881; + goto yy1870; } else { - if (yych <= '\\') goto yy1738; - if (yych <= 0x7F) goto yy1736; - if (yych <= 0xC1) goto yy1707; + if (yych <= '\\') goto yy1872; + if (yych <= 0x7F) goto yy1870; + if (yych <= 0xC1) goto yy1841; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1741; - if (yych == 0xED) goto yy1746; - goto yy1742; + if (yych <= 0xE0) goto yy1875; + if (yych == 0xED) goto yy1880; + goto yy1876; } else { - if (yych <= 0xF0) goto yy1743; - if (yych <= 0xF3) goto yy1744; - if (yych <= 0xF4) goto yy1745; - goto yy1707; + if (yych <= 0xF0) goto yy1877; + if (yych <= 0xF3) goto yy1878; + if (yych <= 0xF4) goto yy1879; + goto yy1841; } } -yy1740: +yy1874: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1736; - goto yy1715; -yy1741: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1870; + goto yy1849; +yy1875: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1740; - goto yy1715; -yy1742: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1874; + goto yy1849; +yy1876: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1740; - goto yy1715; -yy1743: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1874; + goto yy1849; +yy1877: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1742; - goto yy1715; -yy1744: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1876; + goto yy1849; +yy1878: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1742; - goto yy1715; -yy1745: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1876; + goto yy1849; +yy1879: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1742; - goto yy1715; -yy1746: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1876; + goto yy1849; +yy1880: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1740; - goto yy1715; -yy1747: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1874; + goto yy1849; +yy1881: yyaccept = 0; marker = ++p; yych = *p; -yy1748: +yy1882: if (yych <= 0xC1) { if (yych <= ')') { - if (yych <= ' ') goto yy1707; - if (yych <= '\'') goto yy1747; - if (yych <= '(') goto yy1727; - goto yy1736; + if (yych <= ' ') goto yy1841; + if (yych <= '\'') goto yy1881; + if (yych <= '(') goto yy1861; + goto yy1870; } else { - if (yych == '\\') goto yy1749; - if (yych <= 0x7F) goto yy1747; - goto yy1707; + if (yych == '\\') goto yy1883; + if (yych <= 0x7F) goto yy1881; + goto yy1841; } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1751; - if (yych <= 0xE0) goto yy1752; - if (yych <= 0xEC) goto yy1753; - goto yy1757; + if (yych <= 0xDF) goto yy1885; + if (yych <= 0xE0) goto yy1886; + if (yych <= 0xEC) goto yy1887; + goto yy1891; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1753; - goto yy1754; + if (yych <= 0xEF) goto yy1887; + goto yy1888; } else { - if (yych <= 0xF3) goto yy1755; - if (yych <= 0xF4) goto yy1756; - goto yy1707; + if (yych <= 0xF3) goto yy1889; + if (yych <= 0xF4) goto yy1890; + goto yy1841; } } } -yy1749: +yy1883: yyaccept = 0; marker = ++p; yych = *p; if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= ' ') goto yy1707; - if (yych <= '[') goto yy1747; - goto yy1749; + if (yych <= ' ') goto yy1841; + if (yych <= '[') goto yy1881; + goto yy1883; } else { - if (yych <= 0x7F) goto yy1747; - if (yych <= 0xC1) goto yy1707; - if (yych >= 0xE0) goto yy1752; + if (yych <= 0x7F) goto yy1881; + if (yych <= 0xC1) goto yy1841; + if (yych >= 0xE0) goto yy1886; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1757; - goto yy1753; + if (yych == 0xED) goto yy1891; + goto yy1887; } else { - if (yych <= 0xF0) goto yy1754; - if (yych <= 0xF3) goto yy1755; - if (yych <= 0xF4) goto yy1756; - goto yy1707; + if (yych <= 0xF0) goto yy1888; + if (yych <= 0xF3) goto yy1889; + if (yych <= 0xF4) goto yy1890; + goto yy1841; } } -yy1751: +yy1885: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1747; - goto yy1715; -yy1752: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1881; + goto yy1849; +yy1886: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1751; - goto yy1715; -yy1753: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1885; + goto yy1849; +yy1887: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1751; - goto yy1715; -yy1754: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1885; + goto yy1849; +yy1888: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1753; - goto yy1715; -yy1755: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1887; + goto yy1849; +yy1889: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1753; - goto yy1715; -yy1756: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1887; + goto yy1849; +yy1890: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1753; - goto yy1715; -yy1757: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1887; + goto yy1849; +yy1891: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1751; - goto yy1715; -yy1758: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1885; + goto yy1849; +yy1892: yyaccept = 0; marker = ++p; yych = *p; if (yych <= '[') { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1707; - goto yy1773; + if (yych <= 0x00) goto yy1841; + goto yy1907; } else { - if (yych <= '\n') goto yy1707; - if (yych <= '\f') goto yy1773; - goto yy1707; + if (yych <= '\n') goto yy1841; + if (yych <= '\f') goto yy1907; + goto yy1841; } } else { if (yych <= '(') { - if (yych <= ' ') goto yy1773; - if (yych >= '(') goto yy1796; + if (yych <= ' ') goto yy1907; + if (yych >= '(') goto yy1930; } else { - if (yych == '>') goto yy1810; + if (yych == '>') goto yy1944; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy1758; - if (yych >= 0x80) goto yy1707; + if (yych <= '\\') goto yy1892; + if (yych >= 0x80) goto yy1841; } else { - if (yych <= 0xDF) goto yy1764; - if (yych <= 0xE0) goto yy1765; - goto yy1766; + if (yych <= 0xDF) goto yy1898; + if (yych <= 0xE0) goto yy1899; + goto yy1900; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1770; - if (yych <= 0xEF) goto yy1766; - goto yy1767; + if (yych <= 0xED) goto yy1904; + if (yych <= 0xEF) goto yy1900; + goto yy1901; } else { - if (yych <= 0xF3) goto yy1768; - if (yych <= 0xF4) goto yy1769; - goto yy1707; + if (yych <= 0xF3) goto yy1902; + if (yych <= 0xF4) goto yy1903; + goto yy1841; } } } -yy1760: +yy1894: yyaccept = 0; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1760; + goto yy1894; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1707; - goto yy1773; + if (yych <= 0x00) goto yy1841; + goto yy1907; } else { - if (yych <= '\n') goto yy1707; - if (yych <= '\f') goto yy1773; - goto yy1707; + if (yych <= '\n') goto yy1841; + if (yych <= '\f') goto yy1907; + goto yy1841; } } else { if (yych <= '(') { - if (yych <= ' ') goto yy1773; - goto yy1771; + if (yych <= ' ') goto yy1907; + goto yy1905; } else { - if (yych <= ')') goto yy1773; - if (yych <= '<') goto yy1736; + if (yych <= ')') goto yy1907; + if (yych <= '<') goto yy1870; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy1758; - goto yy1707; + if (yych <= '\\') goto yy1892; + goto yy1841; } else { - if (yych <= 0xDF) goto yy1764; - if (yych <= 0xE0) goto yy1765; - goto yy1766; + if (yych <= 0xDF) goto yy1898; + if (yych <= 0xE0) goto yy1899; + goto yy1900; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1770; - if (yych <= 0xEF) goto yy1766; - goto yy1767; + if (yych <= 0xED) goto yy1904; + if (yych <= 0xEF) goto yy1900; + goto yy1901; } else { - if (yych <= 0xF3) goto yy1768; - if (yych <= 0xF4) goto yy1769; - goto yy1707; + if (yych <= 0xF3) goto yy1902; + if (yych <= 0xF4) goto yy1903; + goto yy1841; } } } -yy1762: +yy1896: yyaccept = 2; yych = *(marker = ++p); if (yych <= ')') { - if (yych <= ' ') goto yy1763; - if (yych <= '(') goto yy1737; + if (yych <= ' ') goto yy1897; + if (yych <= '(') goto yy1871; } else { - if (yych <= 0x7F) goto yy1737; - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xF4) goto yy1737; + if (yych <= 0x7F) goto yy1871; + if (yych <= 0xC1) goto yy1897; + if (yych <= 0xF4) goto yy1871; } -yy1763: +yy1897: { return (bufsize_t)(p - start); } -yy1764: +yy1898: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1760; - goto yy1715; -yy1765: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1894; + goto yy1849; +yy1899: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1764; - goto yy1715; -yy1766: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1898; + goto yy1849; +yy1900: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1764; - goto yy1715; -yy1767: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1898; + goto yy1849; +yy1901: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1766; - goto yy1715; -yy1768: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1900; + goto yy1849; +yy1902: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1766; - goto yy1715; -yy1769: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1900; + goto yy1849; +yy1903: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1766; - goto yy1715; -yy1770: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1900; + goto yy1849; +yy1904: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1764; - goto yy1715; -yy1771: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1898; + goto yy1849; +yy1905: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1715; - if (yych >= '\n') goto yy1715; + if (yych <= 0x00) goto yy1849; + if (yych >= '\n') goto yy1849; } else { - if (yych == '\r') goto yy1715; + if (yych == '\r') goto yy1849; } } else { if (yych <= ')') { - if (yych <= '\'') goto yy1771; - if (yych >= ')') goto yy1760; + if (yych <= '\'') goto yy1905; + if (yych >= ')') goto yy1894; } else { - if (yych == '<') goto yy1727; - if (yych <= '=') goto yy1771; - goto yy1786; + if (yych == '<') goto yy1861; + if (yych <= '=') goto yy1905; + goto yy1920; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { - if (yych == '\\') goto yy1787; - goto yy1771; + if (yych == '\\') goto yy1921; + goto yy1905; } else { - if (yych <= 0xC1) goto yy1715; - if (yych <= 0xDF) goto yy1789; - goto yy1790; + if (yych <= 0xC1) goto yy1849; + if (yych <= 0xDF) goto yy1923; + goto yy1924; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1795; - goto yy1791; + if (yych == 0xED) goto yy1929; + goto yy1925; } else { - if (yych <= 0xF0) goto yy1792; - if (yych <= 0xF3) goto yy1793; - if (yych <= 0xF4) goto yy1794; - goto yy1715; + if (yych <= 0xF0) goto yy1926; + if (yych <= 0xF3) goto yy1927; + if (yych <= 0xF4) goto yy1928; + goto yy1849; } } } -yy1773: +yy1907: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1773; + goto yy1907; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= '<') goto yy1715; - if (yych >= '?') goto yy1776; + if (yych <= '<') goto yy1849; + if (yych >= '?') goto yy1910; } else { - if (yych <= 0xC1) goto yy1715; - if (yych <= 0xDF) goto yy1778; - goto yy1779; + if (yych <= 0xC1) goto yy1849; + if (yych <= 0xDF) goto yy1912; + goto yy1913; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1784; - goto yy1780; + if (yych == 0xED) goto yy1918; + goto yy1914; } else { - if (yych <= 0xF0) goto yy1781; - if (yych <= 0xF3) goto yy1782; - if (yych <= 0xF4) goto yy1783; - goto yy1715; + if (yych <= 0xF0) goto yy1915; + if (yych <= 0xF3) goto yy1916; + if (yych <= 0xF4) goto yy1917; + goto yy1849; } } -yy1775: +yy1909: yych = *++p; - goto yy1763; -yy1776: + goto yy1897; +yy1910: ++p; yych = *p; if (yych <= 0x7F) { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1715; - goto yy1773; + if (yych <= 0x00) goto yy1849; + goto yy1907; } else { - if (yych <= '\n') goto yy1715; - if (yych <= '\f') goto yy1773; - goto yy1715; + if (yych <= '\n') goto yy1849; + if (yych <= '\f') goto yy1907; + goto yy1849; } } else { if (yych <= '>') { - if (yych <= '=') goto yy1773; - goto yy1785; + if (yych <= '=') goto yy1907; + goto yy1919; } else { - if (yych == '\\') goto yy1776; - goto yy1773; + if (yych == '\\') goto yy1910; + goto yy1907; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { - if (yych <= 0xC1) goto yy1715; + if (yych <= 0xC1) goto yy1849; } else { - if (yych <= 0xE0) goto yy1779; - if (yych <= 0xEC) goto yy1780; - goto yy1784; + if (yych <= 0xE0) goto yy1913; + if (yych <= 0xEC) goto yy1914; + goto yy1918; } } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1780; - goto yy1781; + if (yych <= 0xEF) goto yy1914; + goto yy1915; } else { - if (yych <= 0xF3) goto yy1782; - if (yych <= 0xF4) goto yy1783; - goto yy1715; + if (yych <= 0xF3) goto yy1916; + if (yych <= 0xF4) goto yy1917; + goto yy1849; } } } -yy1778: +yy1912: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1773; - goto yy1715; -yy1779: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1907; + goto yy1849; +yy1913: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1778; - goto yy1715; -yy1780: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1912; + goto yy1849; +yy1914: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1778; - goto yy1715; -yy1781: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1912; + goto yy1849; +yy1915: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1780; - goto yy1715; -yy1782: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1914; + goto yy1849; +yy1916: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1780; - goto yy1715; -yy1783: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1914; + goto yy1849; +yy1917: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1780; - goto yy1715; -yy1784: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1914; + goto yy1849; +yy1918: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1778; - goto yy1715; -yy1785: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1912; + goto yy1849; +yy1919: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1773; + goto yy1907; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= '<') goto yy1763; - if (yych <= '>') goto yy1775; - goto yy1776; + if (yych <= '<') goto yy1897; + if (yych <= '>') goto yy1909; + goto yy1910; } else { - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xDF) goto yy1778; - goto yy1779; + if (yych <= 0xC1) goto yy1897; + if (yych <= 0xDF) goto yy1912; + goto yy1913; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1784; - goto yy1780; + if (yych == 0xED) goto yy1918; + goto yy1914; } else { - if (yych <= 0xF0) goto yy1781; - if (yych <= 0xF3) goto yy1782; - if (yych <= 0xF4) goto yy1783; - goto yy1763; + if (yych <= 0xF0) goto yy1915; + if (yych <= 0xF3) goto yy1916; + if (yych <= 0xF4) goto yy1917; + goto yy1897; } } -yy1786: +yy1920: yyaccept = 2; yych = *(marker = ++p); if (yych <= '(') { - if (yych <= ' ') goto yy1763; - if (yych <= '\'') goto yy1728; - goto yy1763; + if (yych <= ' ') goto yy1897; + if (yych <= '\'') goto yy1862; + goto yy1897; } else { - if (yych <= 0x7F) goto yy1728; - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xF4) goto yy1728; - goto yy1763; + if (yych <= 0x7F) goto yy1862; + if (yych <= 0xC1) goto yy1897; + if (yych <= 0xF4) goto yy1862; + goto yy1897; } -yy1787: +yy1921: ++p; yych = *p; if (yych <= '[') { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1715; - goto yy1773; + if (yych <= 0x00) goto yy1849; + goto yy1907; } else { - if (yych <= '\n') goto yy1715; - if (yych <= '\f') goto yy1773; - goto yy1715; + if (yych <= '\n') goto yy1849; + if (yych <= '\f') goto yy1907; + goto yy1849; } } else { if (yych <= ')') { - if (yych <= ' ') goto yy1773; - if (yych <= '(') goto yy1771; - goto yy1796; + if (yych <= ' ') goto yy1907; + if (yych <= '(') goto yy1905; + goto yy1930; } else { - if (yych == '>') goto yy1798; - goto yy1771; + if (yych == '>') goto yy1932; + goto yy1905; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy1787; - if (yych <= 0x7F) goto yy1771; - goto yy1715; + if (yych <= '\\') goto yy1921; + if (yych <= 0x7F) goto yy1905; + goto yy1849; } else { - if (yych <= 0xDF) goto yy1789; - if (yych <= 0xE0) goto yy1790; - goto yy1791; + if (yych <= 0xDF) goto yy1923; + if (yych <= 0xE0) goto yy1924; + goto yy1925; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1795; - if (yych <= 0xEF) goto yy1791; - goto yy1792; + if (yych <= 0xED) goto yy1929; + if (yych <= 0xEF) goto yy1925; + goto yy1926; } else { - if (yych <= 0xF3) goto yy1793; - if (yych <= 0xF4) goto yy1794; - goto yy1715; + if (yych <= 0xF3) goto yy1927; + if (yych <= 0xF4) goto yy1928; + goto yy1849; } } } -yy1789: +yy1923: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1771; - goto yy1715; -yy1790: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1905; + goto yy1849; +yy1924: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1789; - goto yy1715; -yy1791: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1923; + goto yy1849; +yy1925: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1789; - goto yy1715; -yy1792: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1923; + goto yy1849; +yy1926: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1791; - goto yy1715; -yy1793: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1925; + goto yy1849; +yy1927: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1791; - goto yy1715; -yy1794: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1925; + goto yy1849; +yy1928: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1791; - goto yy1715; -yy1795: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1925; + goto yy1849; +yy1929: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1789; - goto yy1715; -yy1796: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1923; + goto yy1849; +yy1930: yyaccept = 0; marker = ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1707; - if (yych <= '\t') goto yy1773; - goto yy1707; + if (yych <= 0x00) goto yy1841; + if (yych <= '\t') goto yy1907; + goto yy1841; } else { - if (yych == '\r') goto yy1707; - goto yy1773; + if (yych == '\r') goto yy1841; + goto yy1907; } } else { if (yych <= ')') { - if (yych <= '\'') goto yy1796; - if (yych <= '(') goto yy1771; - goto yy1760; + if (yych <= '\'') goto yy1930; + if (yych <= '(') goto yy1905; + goto yy1894; } else { - if (yych == '<') goto yy1747; - if (yych <= '=') goto yy1796; - goto yy1799; + if (yych == '<') goto yy1881; + if (yych <= '=') goto yy1930; + goto yy1933; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { - if (yych == '\\') goto yy1800; - goto yy1796; + if (yych == '\\') goto yy1934; + goto yy1930; } else { - if (yych <= 0xC1) goto yy1707; - if (yych <= 0xDF) goto yy1802; - goto yy1803; + if (yych <= 0xC1) goto yy1841; + if (yych <= 0xDF) goto yy1936; + goto yy1937; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1808; - goto yy1804; + if (yych == 0xED) goto yy1942; + goto yy1938; } else { - if (yych <= 0xF0) goto yy1805; - if (yych <= 0xF3) goto yy1806; - if (yych <= 0xF4) goto yy1807; - goto yy1707; + if (yych <= 0xF0) goto yy1939; + if (yych <= 0xF3) goto yy1940; + if (yych <= 0xF4) goto yy1941; + goto yy1841; } } } -yy1798: +yy1932: yyaccept = 2; marker = ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1763; - if (yych <= '\t') goto yy1773; - goto yy1763; + if (yych <= 0x00) goto yy1897; + if (yych <= '\t') goto yy1907; + goto yy1897; } else { - if (yych == '\r') goto yy1763; - goto yy1773; + if (yych == '\r') goto yy1897; + goto yy1907; } } else { if (yych <= ')') { - if (yych <= '\'') goto yy1771; - if (yych <= '(') goto yy1773; - goto yy1760; + if (yych <= '\'') goto yy1905; + if (yych <= '(') goto yy1907; + goto yy1894; } else { - if (yych == '<') goto yy1727; - if (yych <= '=') goto yy1771; - goto yy1786; + if (yych == '<') goto yy1861; + if (yych <= '=') goto yy1905; + goto yy1920; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { - if (yych == '\\') goto yy1787; - goto yy1771; + if (yych == '\\') goto yy1921; + goto yy1905; } else { - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xDF) goto yy1789; - goto yy1790; + if (yych <= 0xC1) goto yy1897; + if (yych <= 0xDF) goto yy1923; + goto yy1924; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1795; - goto yy1791; + if (yych == 0xED) goto yy1929; + goto yy1925; } else { - if (yych <= 0xF0) goto yy1792; - if (yych <= 0xF3) goto yy1793; - if (yych <= 0xF4) goto yy1794; - goto yy1763; + if (yych <= 0xF0) goto yy1926; + if (yych <= 0xF3) goto yy1927; + if (yych <= 0xF4) goto yy1928; + goto yy1897; } } } -yy1799: +yy1933: yyaccept = 2; yych = *(marker = ++p); - if (yych <= ' ') goto yy1763; - if (yych <= 0x7F) goto yy1748; - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xF4) goto yy1748; - goto yy1763; -yy1800: + if (yych <= ' ') goto yy1897; + if (yych <= 0x7F) goto yy1882; + if (yych <= 0xC1) goto yy1897; + if (yych <= 0xF4) goto yy1882; + goto yy1897; +yy1934: yyaccept = 0; marker = ++p; yych = *p; if (yych <= '\\') { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1707; - goto yy1773; + if (yych <= 0x00) goto yy1841; + goto yy1907; } else { - if (yych <= '\n') goto yy1707; - if (yych <= '\f') goto yy1773; - goto yy1707; + if (yych <= '\n') goto yy1841; + if (yych <= '\f') goto yy1907; + goto yy1841; } } else { if (yych <= '=') { - if (yych <= ' ') goto yy1773; - goto yy1796; + if (yych <= ' ') goto yy1907; + goto yy1930; } else { - if (yych <= '>') goto yy1809; - if (yych <= '[') goto yy1796; - goto yy1800; + if (yych <= '>') goto yy1943; + if (yych <= '[') goto yy1930; + goto yy1934; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x7F) goto yy1796; - goto yy1707; + if (yych <= 0x7F) goto yy1930; + goto yy1841; } else { - if (yych <= 0xDF) goto yy1802; - if (yych <= 0xE0) goto yy1803; - goto yy1804; + if (yych <= 0xDF) goto yy1936; + if (yych <= 0xE0) goto yy1937; + goto yy1938; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1808; - if (yych <= 0xEF) goto yy1804; - goto yy1805; + if (yych <= 0xED) goto yy1942; + if (yych <= 0xEF) goto yy1938; + goto yy1939; } else { - if (yych <= 0xF3) goto yy1806; - if (yych <= 0xF4) goto yy1807; - goto yy1707; + if (yych <= 0xF3) goto yy1940; + if (yych <= 0xF4) goto yy1941; + goto yy1841; } } } -yy1802: +yy1936: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1796; - goto yy1715; -yy1803: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1930; + goto yy1849; +yy1937: ++p; yych = *p; - if (yych <= 0x9F) goto yy1715; - if (yych <= 0xBF) goto yy1802; - goto yy1715; -yy1804: + if (yych <= 0x9F) goto yy1849; + if (yych <= 0xBF) goto yy1936; + goto yy1849; +yy1938: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1802; - goto yy1715; -yy1805: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1936; + goto yy1849; +yy1939: ++p; yych = *p; - if (yych <= 0x8F) goto yy1715; - if (yych <= 0xBF) goto yy1804; - goto yy1715; -yy1806: + if (yych <= 0x8F) goto yy1849; + if (yych <= 0xBF) goto yy1938; + goto yy1849; +yy1940: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0xBF) goto yy1804; - goto yy1715; -yy1807: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0xBF) goto yy1938; + goto yy1849; +yy1941: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x8F) goto yy1804; - goto yy1715; -yy1808: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x8F) goto yy1938; + goto yy1849; +yy1942: ++p; yych = *p; - if (yych <= 0x7F) goto yy1715; - if (yych <= 0x9F) goto yy1802; - goto yy1715; -yy1809: + if (yych <= 0x7F) goto yy1849; + if (yych <= 0x9F) goto yy1936; + goto yy1849; +yy1943: yyaccept = 2; marker = ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy1763; - if (yych <= '\t') goto yy1773; - goto yy1763; + if (yych <= 0x00) goto yy1897; + if (yych <= '\t') goto yy1907; + goto yy1897; } else { - if (yych == '\r') goto yy1763; - goto yy1773; + if (yych == '\r') goto yy1897; + goto yy1907; } } else { if (yych <= ')') { - if (yych <= '\'') goto yy1796; - if (yych <= '(') goto yy1771; - goto yy1760; + if (yych <= '\'') goto yy1930; + if (yych <= '(') goto yy1905; + goto yy1894; } else { - if (yych == '<') goto yy1747; - if (yych <= '=') goto yy1796; - goto yy1799; + if (yych == '<') goto yy1881; + if (yych <= '=') goto yy1930; + goto yy1933; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { - if (yych == '\\') goto yy1800; - goto yy1796; + if (yych == '\\') goto yy1934; + goto yy1930; } else { - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xDF) goto yy1802; - goto yy1803; + if (yych <= 0xC1) goto yy1897; + if (yych <= 0xDF) goto yy1936; + goto yy1937; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1808; - goto yy1804; + if (yych == 0xED) goto yy1942; + goto yy1938; } else { - if (yych <= 0xF0) goto yy1805; - if (yych <= 0xF3) goto yy1806; - if (yych <= 0xF4) goto yy1807; - goto yy1763; + if (yych <= 0xF0) goto yy1939; + if (yych <= 0xF3) goto yy1940; + if (yych <= 0xF4) goto yy1941; + goto yy1897; } } } -yy1810: +yy1944: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1760; + goto yy1894; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x00) goto yy1763; - goto yy1773; + if (yych <= 0x00) goto yy1897; + goto yy1907; } else { - if (yych <= '\n') goto yy1763; - if (yych <= '\f') goto yy1773; - goto yy1763; + if (yych <= '\n') goto yy1897; + if (yych <= '\f') goto yy1907; + goto yy1897; } } else { if (yych <= '(') { - if (yych <= ' ') goto yy1773; - goto yy1771; + if (yych <= ' ') goto yy1907; + goto yy1905; } else { - if (yych <= ')') goto yy1773; - if (yych <= '<') goto yy1736; - goto yy1762; + if (yych <= ')') goto yy1907; + if (yych <= '<') goto yy1870; + goto yy1896; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy1758; - goto yy1763; + if (yych <= '\\') goto yy1892; + goto yy1897; } else { - if (yych <= 0xDF) goto yy1764; - if (yych <= 0xE0) goto yy1765; - goto yy1766; + if (yych <= 0xDF) goto yy1898; + if (yych <= 0xE0) goto yy1899; + goto yy1900; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1770; - if (yych <= 0xEF) goto yy1766; - goto yy1767; + if (yych <= 0xED) goto yy1904; + if (yych <= 0xEF) goto yy1900; + goto yy1901; } else { - if (yych <= 0xF3) goto yy1768; - if (yych <= 0xF4) goto yy1769; - goto yy1763; + if (yych <= 0xF3) goto yy1902; + if (yych <= 0xF4) goto yy1903; + goto yy1897; } } } @@ -15770,494 +17920,494 @@ bufsize_t _scan_link_title(const unsigned char *p) yych = *(marker = p); if (yych <= 0xC1) { if (yych <= '"') { - if (yych == '\n') goto yy1813; - if (yych <= '!') goto yy1817; - goto yy1814; + if (yych == '\n') goto yy1947; + if (yych <= '!') goto yy1951; + goto yy1948; } else { if (yych <= '\'') { - if (yych <= '&') goto yy1817; - goto yy1815; + if (yych <= '&') goto yy1951; + goto yy1949; } else { - if (yych <= '(') goto yy1816; - if (yych <= 0x7F) goto yy1817; + if (yych <= '(') goto yy1950; + if (yych <= 0x7F) goto yy1951; } } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1818; - if (yych <= 0xE0) goto yy1820; - if (yych <= 0xEC) goto yy1821; - goto yy1825; + if (yych <= 0xDF) goto yy1952; + if (yych <= 0xE0) goto yy1954; + if (yych <= 0xEC) goto yy1955; + goto yy1959; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1821; - goto yy1822; + if (yych <= 0xEF) goto yy1955; + goto yy1956; } else { - if (yych <= 0xF3) goto yy1823; - if (yych <= 0xF4) goto yy1824; + if (yych <= 0xF3) goto yy1957; + if (yych <= 0xF4) goto yy1958; } } } -yy1813: +yy1947: { return 0; } -yy1814: +yy1948: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1813; - if (yych <= 0x7F) goto yy1857; - if (yych <= 0xC1) goto yy1813; - if (yych <= 0xF4) goto yy1857; - goto yy1813; -yy1815: + if (yych <= 0x00) goto yy1947; + if (yych <= 0x7F) goto yy1991; + if (yych <= 0xC1) goto yy1947; + if (yych <= 0xF4) goto yy1991; + goto yy1947; +yy1949: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1813; - if (yych <= 0x7F) goto yy1843; - if (yych <= 0xC1) goto yy1813; - if (yych <= 0xF4) goto yy1843; - goto yy1813; -yy1816: + if (yych <= 0x00) goto yy1947; + if (yych <= 0x7F) goto yy1977; + if (yych <= 0xC1) goto yy1947; + if (yych <= 0xF4) goto yy1977; + goto yy1947; +yy1950: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) goto yy1813; - if (yych <= 0x7F) goto yy1829; - if (yych <= 0xC1) goto yy1813; - if (yych <= 0xF4) goto yy1829; - goto yy1813; -yy1817: + if (yych <= 0x00) goto yy1947; + if (yych <= 0x7F) goto yy1963; + if (yych <= 0xC1) goto yy1947; + if (yych <= 0xF4) goto yy1963; + goto yy1947; +yy1951: yych = *++p; - goto yy1813; -yy1818: + goto yy1947; +yy1952: yych = *++p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1817; -yy1819: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1951; +yy1953: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1813; + goto yy1947; } else { - goto yy1838; + goto yy1972; } } else { if (yyaccept == 2) { - goto yy1852; + goto yy1986; } else { - goto yy1866; + goto yy2000; } } -yy1820: +yy1954: yych = *++p; - if (yych <= 0x9F) goto yy1819; - if (yych <= 0xBF) goto yy1818; - goto yy1819; -yy1821: + if (yych <= 0x9F) goto yy1953; + if (yych <= 0xBF) goto yy1952; + goto yy1953; +yy1955: yych = *++p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1818; - goto yy1819; -yy1822: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1952; + goto yy1953; +yy1956: yych = *++p; - if (yych <= 0x8F) goto yy1819; - if (yych <= 0xBF) goto yy1821; - goto yy1819; -yy1823: + if (yych <= 0x8F) goto yy1953; + if (yych <= 0xBF) goto yy1955; + goto yy1953; +yy1957: yych = *++p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1821; - goto yy1819; -yy1824: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1955; + goto yy1953; +yy1958: yych = *++p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x8F) goto yy1821; - goto yy1819; -yy1825: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x8F) goto yy1955; + goto yy1953; +yy1959: yych = *++p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x9F) goto yy1818; - goto yy1819; -yy1826: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x9F) goto yy1952; + goto yy1953; +yy1960: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1828; + goto yy1962; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1819; - if (yych <= ')') goto yy1839; - goto yy1826; + if (yych <= 0x00) goto yy1953; + if (yych <= ')') goto yy1973; + goto yy1960; } else { - if (yych <= 0xC1) goto yy1819; - if (yych <= 0xDF) goto yy1830; - goto yy1831; + if (yych <= 0xC1) goto yy1953; + if (yych <= 0xDF) goto yy1964; + goto yy1965; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1836; - goto yy1832; + if (yych == 0xED) goto yy1970; + goto yy1966; } else { - if (yych <= 0xF0) goto yy1833; - if (yych <= 0xF3) goto yy1834; - if (yych <= 0xF4) goto yy1835; - goto yy1819; + if (yych <= 0xF0) goto yy1967; + if (yych <= 0xF3) goto yy1968; + if (yych <= 0xF4) goto yy1969; + goto yy1953; } } -yy1828: +yy1962: ++p; yych = *p; -yy1829: +yy1963: if (yybm[0+yych] & 32) { - goto yy1828; + goto yy1962; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1819; - if (yych <= ')') goto yy1837; - goto yy1826; + if (yych <= 0x00) goto yy1953; + if (yych <= ')') goto yy1971; + goto yy1960; } else { - if (yych <= 0xC1) goto yy1819; - if (yych >= 0xE0) goto yy1831; + if (yych <= 0xC1) goto yy1953; + if (yych >= 0xE0) goto yy1965; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1836; - goto yy1832; + if (yych == 0xED) goto yy1970; + goto yy1966; } else { - if (yych <= 0xF0) goto yy1833; - if (yych <= 0xF3) goto yy1834; - if (yych <= 0xF4) goto yy1835; - goto yy1819; + if (yych <= 0xF0) goto yy1967; + if (yych <= 0xF3) goto yy1968; + if (yych <= 0xF4) goto yy1969; + goto yy1953; } } -yy1830: +yy1964: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1828; - goto yy1819; -yy1831: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1962; + goto yy1953; +yy1965: ++p; yych = *p; - if (yych <= 0x9F) goto yy1819; - if (yych <= 0xBF) goto yy1830; - goto yy1819; -yy1832: + if (yych <= 0x9F) goto yy1953; + if (yych <= 0xBF) goto yy1964; + goto yy1953; +yy1966: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1830; - goto yy1819; -yy1833: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1964; + goto yy1953; +yy1967: ++p; yych = *p; - if (yych <= 0x8F) goto yy1819; - if (yych <= 0xBF) goto yy1832; - goto yy1819; -yy1834: + if (yych <= 0x8F) goto yy1953; + if (yych <= 0xBF) goto yy1966; + goto yy1953; +yy1968: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1832; - goto yy1819; -yy1835: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1966; + goto yy1953; +yy1969: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x8F) goto yy1832; - goto yy1819; -yy1836: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x8F) goto yy1966; + goto yy1953; +yy1970: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x9F) goto yy1830; - goto yy1819; -yy1837: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x9F) goto yy1964; + goto yy1953; +yy1971: ++p; -yy1838: +yy1972: { return (bufsize_t)(p - start); } -yy1839: +yy1973: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1828; + goto yy1962; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1838; - if (yych <= ')') goto yy1837; - goto yy1826; + if (yych <= 0x00) goto yy1972; + if (yych <= ')') goto yy1971; + goto yy1960; } else { - if (yych <= 0xC1) goto yy1838; - if (yych <= 0xDF) goto yy1830; - goto yy1831; + if (yych <= 0xC1) goto yy1972; + if (yych <= 0xDF) goto yy1964; + goto yy1965; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1836; - goto yy1832; + if (yych == 0xED) goto yy1970; + goto yy1966; } else { - if (yych <= 0xF0) goto yy1833; - if (yych <= 0xF3) goto yy1834; - if (yych <= 0xF4) goto yy1835; - goto yy1838; + if (yych <= 0xF0) goto yy1967; + if (yych <= 0xF3) goto yy1968; + if (yych <= 0xF4) goto yy1969; + goto yy1972; } } -yy1840: +yy1974: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1842; + goto yy1976; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1819; - if (yych <= '\'') goto yy1853; - goto yy1840; + if (yych <= 0x00) goto yy1953; + if (yych <= '\'') goto yy1987; + goto yy1974; } else { - if (yych <= 0xC1) goto yy1819; - if (yych <= 0xDF) goto yy1844; - goto yy1845; + if (yych <= 0xC1) goto yy1953; + if (yych <= 0xDF) goto yy1978; + goto yy1979; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1850; - goto yy1846; + if (yych == 0xED) goto yy1984; + goto yy1980; } else { - if (yych <= 0xF0) goto yy1847; - if (yych <= 0xF3) goto yy1848; - if (yych <= 0xF4) goto yy1849; - goto yy1819; + if (yych <= 0xF0) goto yy1981; + if (yych <= 0xF3) goto yy1982; + if (yych <= 0xF4) goto yy1983; + goto yy1953; } } -yy1842: +yy1976: ++p; yych = *p; -yy1843: +yy1977: if (yybm[0+yych] & 64) { - goto yy1842; + goto yy1976; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1819; - if (yych <= '\'') goto yy1851; - goto yy1840; + if (yych <= 0x00) goto yy1953; + if (yych <= '\'') goto yy1985; + goto yy1974; } else { - if (yych <= 0xC1) goto yy1819; - if (yych >= 0xE0) goto yy1845; + if (yych <= 0xC1) goto yy1953; + if (yych >= 0xE0) goto yy1979; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1850; - goto yy1846; + if (yych == 0xED) goto yy1984; + goto yy1980; } else { - if (yych <= 0xF0) goto yy1847; - if (yych <= 0xF3) goto yy1848; - if (yych <= 0xF4) goto yy1849; - goto yy1819; + if (yych <= 0xF0) goto yy1981; + if (yych <= 0xF3) goto yy1982; + if (yych <= 0xF4) goto yy1983; + goto yy1953; } } -yy1844: +yy1978: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1842; - goto yy1819; -yy1845: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1976; + goto yy1953; +yy1979: ++p; yych = *p; - if (yych <= 0x9F) goto yy1819; - if (yych <= 0xBF) goto yy1844; - goto yy1819; -yy1846: + if (yych <= 0x9F) goto yy1953; + if (yych <= 0xBF) goto yy1978; + goto yy1953; +yy1980: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1844; - goto yy1819; -yy1847: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1978; + goto yy1953; +yy1981: ++p; yych = *p; - if (yych <= 0x8F) goto yy1819; - if (yych <= 0xBF) goto yy1846; - goto yy1819; -yy1848: + if (yych <= 0x8F) goto yy1953; + if (yych <= 0xBF) goto yy1980; + goto yy1953; +yy1982: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1846; - goto yy1819; -yy1849: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1980; + goto yy1953; +yy1983: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x8F) goto yy1846; - goto yy1819; -yy1850: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x8F) goto yy1980; + goto yy1953; +yy1984: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x9F) goto yy1844; - goto yy1819; -yy1851: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x9F) goto yy1978; + goto yy1953; +yy1985: ++p; -yy1852: +yy1986: { return (bufsize_t)(p - start); } -yy1853: +yy1987: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1842; + goto yy1976; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1852; - if (yych <= '\'') goto yy1851; - goto yy1840; + if (yych <= 0x00) goto yy1986; + if (yych <= '\'') goto yy1985; + goto yy1974; } else { - if (yych <= 0xC1) goto yy1852; - if (yych <= 0xDF) goto yy1844; - goto yy1845; + if (yych <= 0xC1) goto yy1986; + if (yych <= 0xDF) goto yy1978; + goto yy1979; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1850; - goto yy1846; + if (yych == 0xED) goto yy1984; + goto yy1980; } else { - if (yych <= 0xF0) goto yy1847; - if (yych <= 0xF3) goto yy1848; - if (yych <= 0xF4) goto yy1849; - goto yy1852; + if (yych <= 0xF0) goto yy1981; + if (yych <= 0xF3) goto yy1982; + if (yych <= 0xF4) goto yy1983; + goto yy1986; } } -yy1854: +yy1988: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1856; + goto yy1990; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1819; - if (yych <= '"') goto yy1867; - goto yy1854; + if (yych <= 0x00) goto yy1953; + if (yych <= '"') goto yy2001; + goto yy1988; } else { - if (yych <= 0xC1) goto yy1819; - if (yych <= 0xDF) goto yy1858; - goto yy1859; + if (yych <= 0xC1) goto yy1953; + if (yych <= 0xDF) goto yy1992; + goto yy1993; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1864; - goto yy1860; + if (yych == 0xED) goto yy1998; + goto yy1994; } else { - if (yych <= 0xF0) goto yy1861; - if (yych <= 0xF3) goto yy1862; - if (yych <= 0xF4) goto yy1863; - goto yy1819; + if (yych <= 0xF0) goto yy1995; + if (yych <= 0xF3) goto yy1996; + if (yych <= 0xF4) goto yy1997; + goto yy1953; } } -yy1856: +yy1990: ++p; yych = *p; -yy1857: +yy1991: if (yybm[0+yych] & 128) { - goto yy1856; + goto yy1990; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1819; - if (yych <= '"') goto yy1865; - goto yy1854; + if (yych <= 0x00) goto yy1953; + if (yych <= '"') goto yy1999; + goto yy1988; } else { - if (yych <= 0xC1) goto yy1819; - if (yych >= 0xE0) goto yy1859; + if (yych <= 0xC1) goto yy1953; + if (yych >= 0xE0) goto yy1993; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1864; - goto yy1860; + if (yych == 0xED) goto yy1998; + goto yy1994; } else { - if (yych <= 0xF0) goto yy1861; - if (yych <= 0xF3) goto yy1862; - if (yych <= 0xF4) goto yy1863; - goto yy1819; + if (yych <= 0xF0) goto yy1995; + if (yych <= 0xF3) goto yy1996; + if (yych <= 0xF4) goto yy1997; + goto yy1953; } } -yy1858: +yy1992: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1856; - goto yy1819; -yy1859: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1990; + goto yy1953; +yy1993: ++p; yych = *p; - if (yych <= 0x9F) goto yy1819; - if (yych <= 0xBF) goto yy1858; - goto yy1819; -yy1860: + if (yych <= 0x9F) goto yy1953; + if (yych <= 0xBF) goto yy1992; + goto yy1953; +yy1994: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1858; - goto yy1819; -yy1861: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1992; + goto yy1953; +yy1995: ++p; yych = *p; - if (yych <= 0x8F) goto yy1819; - if (yych <= 0xBF) goto yy1860; - goto yy1819; -yy1862: + if (yych <= 0x8F) goto yy1953; + if (yych <= 0xBF) goto yy1994; + goto yy1953; +yy1996: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0xBF) goto yy1860; - goto yy1819; -yy1863: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0xBF) goto yy1994; + goto yy1953; +yy1997: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x8F) goto yy1860; - goto yy1819; -yy1864: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x8F) goto yy1994; + goto yy1953; +yy1998: ++p; yych = *p; - if (yych <= 0x7F) goto yy1819; - if (yych <= 0x9F) goto yy1858; - goto yy1819; -yy1865: + if (yych <= 0x7F) goto yy1953; + if (yych <= 0x9F) goto yy1992; + goto yy1953; +yy1999: ++p; -yy1866: +yy2000: { return (bufsize_t)(p - start); } -yy1867: +yy2001: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1856; + goto yy1990; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) goto yy1866; - if (yych <= '"') goto yy1865; - goto yy1854; + if (yych <= 0x00) goto yy2000; + if (yych <= '"') goto yy1999; + goto yy1988; } else { - if (yych <= 0xC1) goto yy1866; - if (yych <= 0xDF) goto yy1858; - goto yy1859; + if (yych <= 0xC1) goto yy2000; + if (yych <= 0xDF) goto yy1992; + goto yy1993; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy1864; - goto yy1860; + if (yych == 0xED) goto yy1998; + goto yy1994; } else { - if (yych <= 0xF0) goto yy1861; - if (yych <= 0xF3) goto yy1862; - if (yych <= 0xF4) goto yy1863; - goto yy1866; + if (yych <= 0xF0) goto yy1995; + if (yych <= 0xF3) goto yy1996; + if (yych <= 0xF4) goto yy1997; + goto yy2000; } } } @@ -16309,82 +18459,82 @@ bufsize_t _scan_spacechars(const unsigned char *p) yych = *(marker = p); if (yych <= 0xC1) { if (yych <= '\r') { - if (yych <= 0x08) goto yy1874; - if (yych == '\n') goto yy1872; - goto yy1871; + if (yych <= 0x08) goto yy2008; + if (yych == '\n') goto yy2006; + goto yy2005; } else { - if (yych == ' ') goto yy1871; - if (yych <= 0x7F) goto yy1874; + if (yych == ' ') goto yy2005; + if (yych <= 0x7F) goto yy2008; } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1876; - if (yych <= 0xE0) goto yy1878; - if (yych <= 0xEC) goto yy1879; - goto yy1883; + if (yych <= 0xDF) goto yy2010; + if (yych <= 0xE0) goto yy2012; + if (yych <= 0xEC) goto yy2013; + goto yy2017; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1879; - goto yy1880; + if (yych <= 0xEF) goto yy2013; + goto yy2014; } else { - if (yych <= 0xF3) goto yy1881; - if (yych <= 0xF4) goto yy1882; + if (yych <= 0xF3) goto yy2015; + if (yych <= 0xF4) goto yy2016; } } } -yy1870: +yy2004: { return (bufsize_t)(p - start); } -yy1871: +yy2005: yych = *++p; - goto yy1873; -yy1872: + goto yy2007; +yy2006: ++p; yych = *p; -yy1873: +yy2007: if (yybm[0+yych] & 128) { - goto yy1872; + goto yy2006; } - goto yy1870; -yy1874: + goto yy2004; +yy2008: ++p; { return 0; } -yy1876: +yy2010: yych = *++p; - if (yych <= 0x7F) goto yy1877; - if (yych <= 0xBF) goto yy1874; -yy1877: + if (yych <= 0x7F) goto yy2011; + if (yych <= 0xBF) goto yy2008; +yy2011: p = marker; - goto yy1870; -yy1878: + goto yy2004; +yy2012: yych = *++p; - if (yych <= 0x9F) goto yy1877; - if (yych <= 0xBF) goto yy1876; - goto yy1877; -yy1879: + if (yych <= 0x9F) goto yy2011; + if (yych <= 0xBF) goto yy2010; + goto yy2011; +yy2013: yych = *++p; - if (yych <= 0x7F) goto yy1877; - if (yych <= 0xBF) goto yy1876; - goto yy1877; -yy1880: + if (yych <= 0x7F) goto yy2011; + if (yych <= 0xBF) goto yy2010; + goto yy2011; +yy2014: yych = *++p; - if (yych <= 0x8F) goto yy1877; - if (yych <= 0xBF) goto yy1879; - goto yy1877; -yy1881: + if (yych <= 0x8F) goto yy2011; + if (yych <= 0xBF) goto yy2013; + goto yy2011; +yy2015: yych = *++p; - if (yych <= 0x7F) goto yy1877; - if (yych <= 0xBF) goto yy1879; - goto yy1877; -yy1882: + if (yych <= 0x7F) goto yy2011; + if (yych <= 0xBF) goto yy2013; + goto yy2011; +yy2016: yych = *++p; - if (yych <= 0x7F) goto yy1877; - if (yych <= 0x8F) goto yy1879; - goto yy1877; -yy1883: + if (yych <= 0x7F) goto yy2011; + if (yych <= 0x8F) goto yy2013; + goto yy2011; +yy2017: ++p; - if ((yych = *p) <= 0x7F) goto yy1877; - if (yych <= 0x9F) goto yy1876; - goto yy1877; + if ((yych = *p) <= 0x7F) goto yy2011; + if (yych <= 0x9F) goto yy2010; + goto yy2011; } } @@ -16434,141 +18584,141 @@ bufsize_t _scan_atx_header_start(const unsigned char *p) yych = *(marker = p); if (yych <= 0xDF) { if (yych <= '"') { - if (yych != '\n') goto yy1888; + if (yych != '\n') goto yy2022; } else { - if (yych <= '#') goto yy1887; - if (yych <= 0x7F) goto yy1888; - if (yych >= 0xC2) goto yy1889; + if (yych <= '#') goto yy2021; + if (yych <= 0x7F) goto yy2022; + if (yych >= 0xC2) goto yy2023; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1891; - if (yych == 0xED) goto yy1896; - goto yy1892; + if (yych <= 0xE0) goto yy2025; + if (yych == 0xED) goto yy2030; + goto yy2026; } else { - if (yych <= 0xF0) goto yy1893; - if (yych <= 0xF3) goto yy1894; - if (yych <= 0xF4) goto yy1895; + if (yych <= 0xF0) goto yy2027; + if (yych <= 0xF3) goto yy2028; + if (yych <= 0xF4) goto yy2029; } } -yy1886: +yy2020: { return 0; } -yy1887: +yy2021: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1899; + goto yy2033; } if (yych <= '\f') { - if (yych == '\n') goto yy1897; - goto yy1886; + if (yych == '\n') goto yy2031; + goto yy2020; } else { - if (yych <= '\r') goto yy1897; - if (yych == '#') goto yy1901; - goto yy1886; + if (yych <= '\r') goto yy2031; + if (yych == '#') goto yy2035; + goto yy2020; } -yy1888: +yy2022: yych = *++p; - goto yy1886; -yy1889: + goto yy2020; +yy2023: yych = *++p; - if (yych <= 0x7F) goto yy1890; - if (yych <= 0xBF) goto yy1888; -yy1890: + if (yych <= 0x7F) goto yy2024; + if (yych <= 0xBF) goto yy2022; +yy2024: p = marker; - goto yy1886; -yy1891: + goto yy2020; +yy2025: yych = *++p; - if (yych <= 0x9F) goto yy1890; - if (yych <= 0xBF) goto yy1889; - goto yy1890; -yy1892: + if (yych <= 0x9F) goto yy2024; + if (yych <= 0xBF) goto yy2023; + goto yy2024; +yy2026: yych = *++p; - if (yych <= 0x7F) goto yy1890; - if (yych <= 0xBF) goto yy1889; - goto yy1890; -yy1893: + if (yych <= 0x7F) goto yy2024; + if (yych <= 0xBF) goto yy2023; + goto yy2024; +yy2027: yych = *++p; - if (yych <= 0x8F) goto yy1890; - if (yych <= 0xBF) goto yy1892; - goto yy1890; -yy1894: + if (yych <= 0x8F) goto yy2024; + if (yych <= 0xBF) goto yy2026; + goto yy2024; +yy2028: yych = *++p; - if (yych <= 0x7F) goto yy1890; - if (yych <= 0xBF) goto yy1892; - goto yy1890; -yy1895: + if (yych <= 0x7F) goto yy2024; + if (yych <= 0xBF) goto yy2026; + goto yy2024; +yy2029: yych = *++p; - if (yych <= 0x7F) goto yy1890; - if (yych <= 0x8F) goto yy1892; - goto yy1890; -yy1896: + if (yych <= 0x7F) goto yy2024; + if (yych <= 0x8F) goto yy2026; + goto yy2024; +yy2030: yych = *++p; - if (yych <= 0x7F) goto yy1890; - if (yych <= 0x9F) goto yy1889; - goto yy1890; -yy1897: + if (yych <= 0x7F) goto yy2024; + if (yych <= 0x9F) goto yy2023; + goto yy2024; +yy2031: ++p; -yy1898: +yy2032: { return (bufsize_t)(p - start); } -yy1899: +yy2033: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1899; + goto yy2033; } - goto yy1898; -yy1901: + goto yy2032; +yy2035: yych = *++p; if (yybm[0+yych] & 128) { - goto yy1899; + goto yy2033; } if (yych <= '\f') { - if (yych == '\n') goto yy1897; - goto yy1890; + if (yych == '\n') goto yy2031; + goto yy2024; } else { - if (yych <= '\r') goto yy1897; - if (yych != '#') goto yy1890; + if (yych <= '\r') goto yy2031; + if (yych != '#') goto yy2024; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1899; + goto yy2033; } if (yych <= '\f') { - if (yych == '\n') goto yy1897; - goto yy1890; + if (yych == '\n') goto yy2031; + goto yy2024; } else { - if (yych <= '\r') goto yy1897; - if (yych != '#') goto yy1890; + if (yych <= '\r') goto yy2031; + if (yych != '#') goto yy2024; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1899; + goto yy2033; } if (yych <= '\f') { - if (yych == '\n') goto yy1897; - goto yy1890; + if (yych == '\n') goto yy2031; + goto yy2024; } else { - if (yych <= '\r') goto yy1897; - if (yych != '#') goto yy1890; + if (yych <= '\r') goto yy2031; + if (yych != '#') goto yy2024; } yych = *++p; if (yybm[0+yych] & 128) { - goto yy1899; + goto yy2033; } if (yych <= '\f') { - if (yych == '\n') goto yy1897; - goto yy1890; + if (yych == '\n') goto yy2031; + goto yy2024; } else { - if (yych <= '\r') goto yy1897; - if (yych != '#') goto yy1890; + if (yych <= '\r') goto yy2031; + if (yych != '#') goto yy2024; } ++p; if (yybm[0+(yych = *p)] & 128) { - goto yy1899; + goto yy2033; } - if (yych == '\n') goto yy1897; - if (yych == '\r') goto yy1897; - goto yy1890; + if (yych == '\n') goto yy2031; + if (yych == '\r') goto yy2031; + goto yy2024; } } @@ -16618,148 +18768,148 @@ bufsize_t _scan_setext_header_line(const unsigned char *p) yych = *(marker = p); if (yych <= 0xC1) { if (yych <= '-') { - if (yych == '\n') goto yy1908; - if (yych <= ',') goto yy1911; - goto yy1910; + if (yych == '\n') goto yy2042; + if (yych <= ',') goto yy2045; + goto yy2044; } else { - if (yych == '=') goto yy1909; - if (yych <= 0x7F) goto yy1911; + if (yych == '=') goto yy2043; + if (yych <= 0x7F) goto yy2045; } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1912; - if (yych <= 0xE0) goto yy1914; - if (yych <= 0xEC) goto yy1915; - goto yy1919; + if (yych <= 0xDF) goto yy2046; + if (yych <= 0xE0) goto yy2048; + if (yych <= 0xEC) goto yy2049; + goto yy2053; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1915; - goto yy1916; + if (yych <= 0xEF) goto yy2049; + goto yy2050; } else { - if (yych <= 0xF3) goto yy1917; - if (yych <= 0xF4) goto yy1918; + if (yych <= 0xF3) goto yy2051; + if (yych <= 0xF4) goto yy2052; } } } -yy1908: +yy2042: { return 0; } -yy1909: +yy2043: yych = *(marker = ++p); if (yybm[0+yych] & 128) { - goto yy1930; + goto yy2064; } if (yych <= '\f') { - if (yych == '\n') goto yy1928; - goto yy1908; + if (yych == '\n') goto yy2062; + goto yy2042; } else { - if (yych <= '\r') goto yy1928; - if (yych == ' ') goto yy1926; - goto yy1908; + if (yych <= '\r') goto yy2062; + if (yych == ' ') goto yy2060; + goto yy2042; } -yy1910: +yy2044: yych = *(marker = ++p); if (yybm[0+yych] & 32) { - goto yy1920; + goto yy2054; } if (yych <= '\f') { - if (yych == '\n') goto yy1922; - goto yy1908; + if (yych == '\n') goto yy2056; + goto yy2042; } else { - if (yych <= '\r') goto yy1922; - if (yych == '-') goto yy1924; - goto yy1908; + if (yych <= '\r') goto yy2056; + if (yych == '-') goto yy2058; + goto yy2042; } -yy1911: +yy2045: yych = *++p; - goto yy1908; -yy1912: + goto yy2042; +yy2046: yych = *++p; - if (yych <= 0x7F) goto yy1913; - if (yych <= 0xBF) goto yy1911; -yy1913: + if (yych <= 0x7F) goto yy2047; + if (yych <= 0xBF) goto yy2045; +yy2047: p = marker; - goto yy1908; -yy1914: + goto yy2042; +yy2048: yych = *++p; - if (yych <= 0x9F) goto yy1913; - if (yych <= 0xBF) goto yy1912; - goto yy1913; -yy1915: + if (yych <= 0x9F) goto yy2047; + if (yych <= 0xBF) goto yy2046; + goto yy2047; +yy2049: yych = *++p; - if (yych <= 0x7F) goto yy1913; - if (yych <= 0xBF) goto yy1912; - goto yy1913; -yy1916: + if (yych <= 0x7F) goto yy2047; + if (yych <= 0xBF) goto yy2046; + goto yy2047; +yy2050: yych = *++p; - if (yych <= 0x8F) goto yy1913; - if (yych <= 0xBF) goto yy1915; - goto yy1913; -yy1917: + if (yych <= 0x8F) goto yy2047; + if (yych <= 0xBF) goto yy2049; + goto yy2047; +yy2051: yych = *++p; - if (yych <= 0x7F) goto yy1913; - if (yych <= 0xBF) goto yy1915; - goto yy1913; -yy1918: + if (yych <= 0x7F) goto yy2047; + if (yych <= 0xBF) goto yy2049; + goto yy2047; +yy2052: yych = *++p; - if (yych <= 0x7F) goto yy1913; - if (yych <= 0x8F) goto yy1915; - goto yy1913; -yy1919: + if (yych <= 0x7F) goto yy2047; + if (yych <= 0x8F) goto yy2049; + goto yy2047; +yy2053: yych = *++p; - if (yych <= 0x7F) goto yy1913; - if (yych <= 0x9F) goto yy1912; - goto yy1913; -yy1920: + if (yych <= 0x7F) goto yy2047; + if (yych <= 0x9F) goto yy2046; + goto yy2047; +yy2054: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1920; + goto yy2054; } - if (yych == '\n') goto yy1922; - if (yych != '\r') goto yy1913; -yy1922: + if (yych == '\n') goto yy2056; + if (yych != '\r') goto yy2047; +yy2056: ++p; { return 2; } -yy1924: +yy2058: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1920; + goto yy2054; } if (yych <= '\f') { - if (yych == '\n') goto yy1922; - goto yy1913; + if (yych == '\n') goto yy2056; + goto yy2047; } else { - if (yych <= '\r') goto yy1922; - if (yych == '-') goto yy1924; - goto yy1913; + if (yych <= '\r') goto yy2056; + if (yych == '-') goto yy2058; + goto yy2047; } -yy1926: +yy2060: ++p; yych = *p; if (yych <= '\f') { - if (yych != '\n') goto yy1913; + if (yych != '\n') goto yy2047; } else { - if (yych <= '\r') goto yy1928; - if (yych == ' ') goto yy1926; - goto yy1913; + if (yych <= '\r') goto yy2062; + if (yych == ' ') goto yy2060; + goto yy2047; } -yy1928: +yy2062: ++p; { return 1; } -yy1930: +yy2064: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1930; + goto yy2064; } if (yych <= '\f') { - if (yych == '\n') goto yy1928; - goto yy1913; + if (yych == '\n') goto yy2062; + goto yy2047; } else { - if (yych <= '\r') goto yy1928; - if (yych == ' ') goto yy1926; - goto yy1913; + if (yych <= '\r') goto yy2062; + if (yych == ' ') goto yy2060; + goto yy2047; } } @@ -16812,207 +18962,207 @@ bufsize_t _scan_hrule(const unsigned char *p) yych = *(marker = p); if (yych <= 0x7F) { if (yych <= '*') { - if (yych == '\n') goto yy1934; - if (yych <= ')') goto yy1938; - goto yy1935; + if (yych == '\n') goto yy2068; + if (yych <= ')') goto yy2072; + goto yy2069; } else { if (yych <= '-') { - if (yych <= ',') goto yy1938; - goto yy1937; + if (yych <= ',') goto yy2072; + goto yy2071; } else { - if (yych == '_') goto yy1936; - goto yy1938; + if (yych == '_') goto yy2070; + goto yy2072; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { - if (yych >= 0xC2) goto yy1939; + if (yych >= 0xC2) goto yy2073; } else { - if (yych <= 0xE0) goto yy1941; - if (yych <= 0xEC) goto yy1942; - goto yy1946; + if (yych <= 0xE0) goto yy2075; + if (yych <= 0xEC) goto yy2076; + goto yy2080; } } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1942; - goto yy1943; + if (yych <= 0xEF) goto yy2076; + goto yy2077; } else { - if (yych <= 0xF3) goto yy1944; - if (yych <= 0xF4) goto yy1945; + if (yych <= 0xF3) goto yy2078; + if (yych <= 0xF4) goto yy2079; } } } -yy1934: +yy2068: { return 0; } -yy1935: +yy2069: yych = *(marker = ++p); - if (yych == ' ') goto yy1967; - if (yych == '*') goto yy1969; - goto yy1934; -yy1936: + if (yych == ' ') goto yy2101; + if (yych == '*') goto yy2103; + goto yy2068; +yy2070: yych = *(marker = ++p); - if (yych == ' ') goto yy1957; - if (yych == '_') goto yy1959; - goto yy1934; -yy1937: + if (yych == ' ') goto yy2091; + if (yych == '_') goto yy2093; + goto yy2068; +yy2071: yych = *(marker = ++p); if (yybm[0+yych] & 8) { - goto yy1947; + goto yy2081; } - if (yych == '-') goto yy1949; - goto yy1934; -yy1938: + if (yych == '-') goto yy2083; + goto yy2068; +yy2072: yych = *++p; - goto yy1934; -yy1939: + goto yy2068; +yy2073: yych = *++p; - if (yych <= 0x7F) goto yy1940; - if (yych <= 0xBF) goto yy1938; -yy1940: + if (yych <= 0x7F) goto yy2074; + if (yych <= 0xBF) goto yy2072; +yy2074: p = marker; - goto yy1934; -yy1941: + goto yy2068; +yy2075: yych = *++p; - if (yych <= 0x9F) goto yy1940; - if (yych <= 0xBF) goto yy1939; - goto yy1940; -yy1942: + if (yych <= 0x9F) goto yy2074; + if (yych <= 0xBF) goto yy2073; + goto yy2074; +yy2076: yych = *++p; - if (yych <= 0x7F) goto yy1940; - if (yych <= 0xBF) goto yy1939; - goto yy1940; -yy1943: + if (yych <= 0x7F) goto yy2074; + if (yych <= 0xBF) goto yy2073; + goto yy2074; +yy2077: yych = *++p; - if (yych <= 0x8F) goto yy1940; - if (yych <= 0xBF) goto yy1942; - goto yy1940; -yy1944: + if (yych <= 0x8F) goto yy2074; + if (yych <= 0xBF) goto yy2076; + goto yy2074; +yy2078: yych = *++p; - if (yych <= 0x7F) goto yy1940; - if (yych <= 0xBF) goto yy1942; - goto yy1940; -yy1945: + if (yych <= 0x7F) goto yy2074; + if (yych <= 0xBF) goto yy2076; + goto yy2074; +yy2079: yych = *++p; - if (yych <= 0x7F) goto yy1940; - if (yych <= 0x8F) goto yy1942; - goto yy1940; -yy1946: + if (yych <= 0x7F) goto yy2074; + if (yych <= 0x8F) goto yy2076; + goto yy2074; +yy2080: yych = *++p; - if (yych <= 0x7F) goto yy1940; - if (yych <= 0x9F) goto yy1939; - goto yy1940; -yy1947: + if (yych <= 0x7F) goto yy2074; + if (yych <= 0x9F) goto yy2073; + goto yy2074; +yy2081: ++p; yych = *p; if (yybm[0+yych] & 8) { - goto yy1947; + goto yy2081; } - if (yych != '-') goto yy1940; -yy1949: + if (yych != '-') goto yy2074; +yy2083: ++p; yych = *p; - if (yych == ' ') goto yy1949; - if (yych != '-') goto yy1940; -yy1951: + if (yych == ' ') goto yy2083; + if (yych != '-') goto yy2074; +yy2085: ++p; yych = *p; if (yybm[0+yych] & 16) { - goto yy1951; + goto yy2085; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1940; - if (yych >= '\n') goto yy1955; + if (yych <= 0x08) goto yy2074; + if (yych >= '\n') goto yy2089; } else { - if (yych == '\r') goto yy1955; - goto yy1940; + if (yych == '\r') goto yy2089; + goto yy2074; } -yy1953: +yy2087: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1953; + goto yy2087; } - if (yych <= 0x08) goto yy1940; - if (yych <= '\n') goto yy1955; - if (yych != '\r') goto yy1940; -yy1955: + if (yych <= 0x08) goto yy2074; + if (yych <= '\n') goto yy2089; + if (yych != '\r') goto yy2074; +yy2089: ++p; { return (bufsize_t)(p - start); } -yy1957: +yy2091: ++p; yych = *p; - if (yych == ' ') goto yy1957; - if (yych != '_') goto yy1940; -yy1959: + if (yych == ' ') goto yy2091; + if (yych != '_') goto yy2074; +yy2093: ++p; yych = *p; - if (yych == ' ') goto yy1959; - if (yych != '_') goto yy1940; -yy1961: + if (yych == ' ') goto yy2093; + if (yych != '_') goto yy2074; +yy2095: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy1961; + goto yy2095; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1940; - if (yych >= '\n') goto yy1965; + if (yych <= 0x08) goto yy2074; + if (yych >= '\n') goto yy2099; } else { - if (yych == '\r') goto yy1965; - goto yy1940; + if (yych == '\r') goto yy2099; + goto yy2074; } -yy1963: +yy2097: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1940; - if (yych <= '\t') goto yy1963; - if (yych >= '\v') goto yy1940; + if (yych <= 0x08) goto yy2074; + if (yych <= '\t') goto yy2097; + if (yych >= '\v') goto yy2074; } else { - if (yych <= '\r') goto yy1965; - if (yych == ' ') goto yy1963; - goto yy1940; + if (yych <= '\r') goto yy2099; + if (yych == ' ') goto yy2097; + goto yy2074; } -yy1965: +yy2099: ++p; { return (bufsize_t)(p - start); } -yy1967: +yy2101: ++p; yych = *p; - if (yych == ' ') goto yy1967; - if (yych != '*') goto yy1940; -yy1969: + if (yych == ' ') goto yy2101; + if (yych != '*') goto yy2074; +yy2103: ++p; yych = *p; - if (yych == ' ') goto yy1969; - if (yych != '*') goto yy1940; -yy1971: + if (yych == ' ') goto yy2103; + if (yych != '*') goto yy2074; +yy2105: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy1971; + goto yy2105; } if (yych <= '\n') { - if (yych <= 0x08) goto yy1940; - if (yych >= '\n') goto yy1975; + if (yych <= 0x08) goto yy2074; + if (yych >= '\n') goto yy2109; } else { - if (yych == '\r') goto yy1975; - goto yy1940; + if (yych == '\r') goto yy2109; + goto yy2074; } -yy1973: +yy2107: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy1940; - if (yych <= '\t') goto yy1973; - if (yych >= '\v') goto yy1940; + if (yych <= 0x08) goto yy2074; + if (yych <= '\t') goto yy2107; + if (yych >= '\v') goto yy2074; } else { - if (yych <= '\r') goto yy1975; - if (yych == ' ') goto yy1973; - goto yy1940; + if (yych <= '\r') goto yy2109; + if (yych == ' ') goto yy2107; + goto yy2074; } -yy1975: +yy2109: ++p; { return (bufsize_t)(p - start); } } @@ -17064,290 +19214,290 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) yych = *(marker = p); if (yych <= 0xC1) { if (yych <= '`') { - if (yych == '\n') goto yy1979; - if (yych <= '_') goto yy1982; - goto yy1980; + if (yych == '\n') goto yy2113; + if (yych <= '_') goto yy2116; + goto yy2114; } else { - if (yych == '~') goto yy1981; - if (yych <= 0x7F) goto yy1982; + if (yych == '~') goto yy2115; + if (yych <= 0x7F) goto yy2116; } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1983; - if (yych <= 0xE0) goto yy1985; - if (yych <= 0xEC) goto yy1986; - goto yy1990; + if (yych <= 0xDF) goto yy2117; + if (yych <= 0xE0) goto yy2119; + if (yych <= 0xEC) goto yy2120; + goto yy2124; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1986; - goto yy1987; + if (yych <= 0xEF) goto yy2120; + goto yy2121; } else { - if (yych <= 0xF3) goto yy1988; - if (yych <= 0xF4) goto yy1989; + if (yych <= 0xF3) goto yy2122; + if (yych <= 0xF4) goto yy2123; } } } -yy1979: +yy2113: { return 0; } -yy1980: +yy2114: yych = *(marker = ++p); - if (yych == '`') goto yy2005; - goto yy1979; -yy1981: + if (yych == '`') goto yy2139; + goto yy2113; +yy2115: yych = *(marker = ++p); - if (yych == '~') goto yy1991; - goto yy1979; -yy1982: + if (yych == '~') goto yy2125; + goto yy2113; +yy2116: yych = *++p; - goto yy1979; -yy1983: + goto yy2113; +yy2117: yych = *++p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy1982; -yy1984: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2116; +yy2118: p = marker; - goto yy1979; -yy1985: - yych = *++p; - if (yych <= 0x9F) goto yy1984; - if (yych <= 0xBF) goto yy1983; - goto yy1984; -yy1986: - yych = *++p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy1983; - goto yy1984; -yy1987: - yych = *++p; - if (yych <= 0x8F) goto yy1984; - if (yych <= 0xBF) goto yy1986; - goto yy1984; -yy1988: - yych = *++p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy1986; - goto yy1984; -yy1989: - yych = *++p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0x8F) goto yy1986; - goto yy1984; -yy1990: - yych = *++p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0x9F) goto yy1983; - goto yy1984; -yy1991: + goto yy2113; +yy2119: + yych = *++p; + if (yych <= 0x9F) goto yy2118; + if (yych <= 0xBF) goto yy2117; + goto yy2118; +yy2120: + yych = *++p; + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2117; + goto yy2118; +yy2121: + yych = *++p; + if (yych <= 0x8F) goto yy2118; + if (yych <= 0xBF) goto yy2120; + goto yy2118; +yy2122: + yych = *++p; + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2120; + goto yy2118; +yy2123: + yych = *++p; + if (yych <= 0x7F) goto yy2118; + if (yych <= 0x8F) goto yy2120; + goto yy2118; +yy2124: + yych = *++p; + if (yych <= 0x7F) goto yy2118; + if (yych <= 0x9F) goto yy2117; + goto yy2118; +yy2125: yych = *++p; if (yybm[0+yych] & 16) { - goto yy1992; + goto yy2126; } - goto yy1984; -yy1992: + goto yy2118; +yy2126: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1994; + goto yy2128; } if (yych <= 0xE0) { if (yych <= '~') { - if (yych <= 0x00) goto yy1984; - if (yych <= '\r') goto yy2003; - goto yy1992; + if (yych <= 0x00) goto yy2118; + if (yych <= '\r') goto yy2137; + goto yy2126; } else { - if (yych <= 0xC1) goto yy1984; - if (yych <= 0xDF) goto yy1996; - goto yy1997; + if (yych <= 0xC1) goto yy2118; + if (yych <= 0xDF) goto yy2130; + goto yy2131; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy2002; - goto yy1998; + if (yych == 0xED) goto yy2136; + goto yy2132; } else { - if (yych <= 0xF0) goto yy1999; - if (yych <= 0xF3) goto yy2000; - if (yych <= 0xF4) goto yy2001; - goto yy1984; + if (yych <= 0xF0) goto yy2133; + if (yych <= 0xF3) goto yy2134; + if (yych <= 0xF4) goto yy2135; + goto yy2118; } } -yy1994: +yy2128: ++p; yych = *p; if (yybm[0+yych] & 32) { - goto yy1994; + goto yy2128; } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1984; - if (yych <= '\r') goto yy2003; - goto yy1984; + if (yych <= 0x00) goto yy2118; + if (yych <= '\r') goto yy2137; + goto yy2118; } else { - if (yych <= 0xDF) goto yy1996; - if (yych <= 0xE0) goto yy1997; - goto yy1998; + if (yych <= 0xDF) goto yy2130; + if (yych <= 0xE0) goto yy2131; + goto yy2132; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy2002; - if (yych <= 0xEF) goto yy1998; - goto yy1999; + if (yych <= 0xED) goto yy2136; + if (yych <= 0xEF) goto yy2132; + goto yy2133; } else { - if (yych <= 0xF3) goto yy2000; - if (yych <= 0xF4) goto yy2001; - goto yy1984; + if (yych <= 0xF3) goto yy2134; + if (yych <= 0xF4) goto yy2135; + goto yy2118; } } -yy1996: +yy2130: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy1994; - goto yy1984; -yy1997: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2128; + goto yy2118; +yy2131: ++p; yych = *p; - if (yych <= 0x9F) goto yy1984; - if (yych <= 0xBF) goto yy1996; - goto yy1984; -yy1998: + if (yych <= 0x9F) goto yy2118; + if (yych <= 0xBF) goto yy2130; + goto yy2118; +yy2132: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy1996; - goto yy1984; -yy1999: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2130; + goto yy2118; +yy2133: ++p; yych = *p; - if (yych <= 0x8F) goto yy1984; - if (yych <= 0xBF) goto yy1998; - goto yy1984; -yy2000: + if (yych <= 0x8F) goto yy2118; + if (yych <= 0xBF) goto yy2132; + goto yy2118; +yy2134: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy1998; - goto yy1984; -yy2001: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2132; + goto yy2118; +yy2135: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0x8F) goto yy1998; - goto yy1984; -yy2002: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0x8F) goto yy2132; + goto yy2118; +yy2136: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0x9F) goto yy1996; - goto yy1984; -yy2003: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0x9F) goto yy2130; + goto yy2118; +yy2137: ++p; p = marker; { return (bufsize_t)(p - start); } -yy2005: +yy2139: yych = *++p; if (yybm[0+yych] & 64) { - goto yy2006; + goto yy2140; } - goto yy1984; -yy2006: + goto yy2118; +yy2140: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy2008; + goto yy2142; } if (yych <= 0xE0) { if (yych <= '`') { - if (yych <= 0x00) goto yy1984; - if (yych <= '\r') goto yy2017; - goto yy2006; + if (yych <= 0x00) goto yy2118; + if (yych <= '\r') goto yy2151; + goto yy2140; } else { - if (yych <= 0xC1) goto yy1984; - if (yych <= 0xDF) goto yy2010; - goto yy2011; + if (yych <= 0xC1) goto yy2118; + if (yych <= 0xDF) goto yy2144; + goto yy2145; } } else { if (yych <= 0xEF) { - if (yych == 0xED) goto yy2016; - goto yy2012; + if (yych == 0xED) goto yy2150; + goto yy2146; } else { - if (yych <= 0xF0) goto yy2013; - if (yych <= 0xF3) goto yy2014; - if (yych <= 0xF4) goto yy2015; - goto yy1984; + if (yych <= 0xF0) goto yy2147; + if (yych <= 0xF3) goto yy2148; + if (yych <= 0xF4) goto yy2149; + goto yy2118; } } -yy2008: +yy2142: ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy2008; + goto yy2142; } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1984; - if (yych <= '\r') goto yy2017; - goto yy1984; + if (yych <= 0x00) goto yy2118; + if (yych <= '\r') goto yy2151; + goto yy2118; } else { - if (yych <= 0xDF) goto yy2010; - if (yych <= 0xE0) goto yy2011; - goto yy2012; + if (yych <= 0xDF) goto yy2144; + if (yych <= 0xE0) goto yy2145; + goto yy2146; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy2016; - if (yych <= 0xEF) goto yy2012; - goto yy2013; + if (yych <= 0xED) goto yy2150; + if (yych <= 0xEF) goto yy2146; + goto yy2147; } else { - if (yych <= 0xF3) goto yy2014; - if (yych <= 0xF4) goto yy2015; - goto yy1984; + if (yych <= 0xF3) goto yy2148; + if (yych <= 0xF4) goto yy2149; + goto yy2118; } } -yy2010: +yy2144: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy2008; - goto yy1984; -yy2011: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2142; + goto yy2118; +yy2145: ++p; yych = *p; - if (yych <= 0x9F) goto yy1984; - if (yych <= 0xBF) goto yy2010; - goto yy1984; -yy2012: + if (yych <= 0x9F) goto yy2118; + if (yych <= 0xBF) goto yy2144; + goto yy2118; +yy2146: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy2010; - goto yy1984; -yy2013: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2144; + goto yy2118; +yy2147: ++p; yych = *p; - if (yych <= 0x8F) goto yy1984; - if (yych <= 0xBF) goto yy2012; - goto yy1984; -yy2014: + if (yych <= 0x8F) goto yy2118; + if (yych <= 0xBF) goto yy2146; + goto yy2118; +yy2148: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0xBF) goto yy2012; - goto yy1984; -yy2015: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0xBF) goto yy2146; + goto yy2118; +yy2149: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0x8F) goto yy2012; - goto yy1984; -yy2016: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0x8F) goto yy2146; + goto yy2118; +yy2150: ++p; yych = *p; - if (yych <= 0x7F) goto yy1984; - if (yych <= 0x9F) goto yy2010; - goto yy1984; -yy2017: + if (yych <= 0x7F) goto yy2118; + if (yych <= 0x9F) goto yy2144; + goto yy2118; +yy2151: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -17400,149 +19550,149 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) yych = *(marker = p); if (yych <= 0xC1) { if (yych <= '`') { - if (yych == '\n') goto yy2021; - if (yych <= '_') goto yy2024; - goto yy2022; + if (yych == '\n') goto yy2155; + if (yych <= '_') goto yy2158; + goto yy2156; } else { - if (yych == '~') goto yy2023; - if (yych <= 0x7F) goto yy2024; + if (yych == '~') goto yy2157; + if (yych <= 0x7F) goto yy2158; } } else { if (yych <= 0xED) { - if (yych <= 0xDF) goto yy2025; - if (yych <= 0xE0) goto yy2027; - if (yych <= 0xEC) goto yy2028; - goto yy2032; + if (yych <= 0xDF) goto yy2159; + if (yych <= 0xE0) goto yy2161; + if (yych <= 0xEC) goto yy2162; + goto yy2166; } else { if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy2028; - goto yy2029; + if (yych <= 0xEF) goto yy2162; + goto yy2163; } else { - if (yych <= 0xF3) goto yy2030; - if (yych <= 0xF4) goto yy2031; + if (yych <= 0xF3) goto yy2164; + if (yych <= 0xF4) goto yy2165; } } } -yy2021: +yy2155: { return 0; } -yy2022: +yy2156: yych = *(marker = ++p); - if (yych == '`') goto yy2040; - goto yy2021; -yy2023: + if (yych == '`') goto yy2174; + goto yy2155; +yy2157: yych = *(marker = ++p); - if (yych == '~') goto yy2033; - goto yy2021; -yy2024: + if (yych == '~') goto yy2167; + goto yy2155; +yy2158: yych = *++p; - goto yy2021; -yy2025: + goto yy2155; +yy2159: yych = *++p; - if (yych <= 0x7F) goto yy2026; - if (yych <= 0xBF) goto yy2024; -yy2026: + if (yych <= 0x7F) goto yy2160; + if (yych <= 0xBF) goto yy2158; +yy2160: p = marker; - goto yy2021; -yy2027: - yych = *++p; - if (yych <= 0x9F) goto yy2026; - if (yych <= 0xBF) goto yy2025; - goto yy2026; -yy2028: - yych = *++p; - if (yych <= 0x7F) goto yy2026; - if (yych <= 0xBF) goto yy2025; - goto yy2026; -yy2029: - yych = *++p; - if (yych <= 0x8F) goto yy2026; - if (yych <= 0xBF) goto yy2028; - goto yy2026; -yy2030: - yych = *++p; - if (yych <= 0x7F) goto yy2026; - if (yych <= 0xBF) goto yy2028; - goto yy2026; -yy2031: - yych = *++p; - if (yych <= 0x7F) goto yy2026; - if (yych <= 0x8F) goto yy2028; - goto yy2026; -yy2032: - yych = *++p; - if (yych <= 0x7F) goto yy2026; - if (yych <= 0x9F) goto yy2025; - goto yy2026; -yy2033: + goto yy2155; +yy2161: + yych = *++p; + if (yych <= 0x9F) goto yy2160; + if (yych <= 0xBF) goto yy2159; + goto yy2160; +yy2162: + yych = *++p; + if (yych <= 0x7F) goto yy2160; + if (yych <= 0xBF) goto yy2159; + goto yy2160; +yy2163: + yych = *++p; + if (yych <= 0x8F) goto yy2160; + if (yych <= 0xBF) goto yy2162; + goto yy2160; +yy2164: + yych = *++p; + if (yych <= 0x7F) goto yy2160; + if (yych <= 0xBF) goto yy2162; + goto yy2160; +yy2165: + yych = *++p; + if (yych <= 0x7F) goto yy2160; + if (yych <= 0x8F) goto yy2162; + goto yy2160; +yy2166: + yych = *++p; + if (yych <= 0x7F) goto yy2160; + if (yych <= 0x9F) goto yy2159; + goto yy2160; +yy2167: yych = *++p; if (yybm[0+yych] & 32) { - goto yy2034; + goto yy2168; } - goto yy2026; -yy2034: + goto yy2160; +yy2168: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy2036; + goto yy2170; } if (yych <= '\f') { - if (yych <= 0x08) goto yy2026; - if (yych <= '\n') goto yy2038; - goto yy2026; + if (yych <= 0x08) goto yy2160; + if (yych <= '\n') goto yy2172; + goto yy2160; } else { - if (yych <= '\r') goto yy2038; - if (yych == '~') goto yy2034; - goto yy2026; + if (yych <= '\r') goto yy2172; + if (yych == '~') goto yy2168; + goto yy2160; } -yy2036: +yy2170: ++p; yych = *p; if (yybm[0+yych] & 64) { - goto yy2036; + goto yy2170; } - if (yych <= 0x08) goto yy2026; - if (yych <= '\n') goto yy2038; - if (yych != '\r') goto yy2026; -yy2038: + if (yych <= 0x08) goto yy2160; + if (yych <= '\n') goto yy2172; + if (yych != '\r') goto yy2160; +yy2172: ++p; p = marker; { return (bufsize_t)(p - start); } -yy2040: +yy2174: yych = *++p; if (yybm[0+yych] & 128) { - goto yy2041; + goto yy2175; } - goto yy2026; -yy2041: + goto yy2160; +yy2175: marker = p + 1; ++p; yych = *p; if (yybm[0+yych] & 128) { - goto yy2041; + goto yy2175; } if (yych <= '\f') { - if (yych <= 0x08) goto yy2026; - if (yych <= '\t') goto yy2043; - if (yych <= '\n') goto yy2045; - goto yy2026; + if (yych <= 0x08) goto yy2160; + if (yych <= '\t') goto yy2177; + if (yych <= '\n') goto yy2179; + goto yy2160; } else { - if (yych <= '\r') goto yy2045; - if (yych != ' ') goto yy2026; + if (yych <= '\r') goto yy2179; + if (yych != ' ') goto yy2160; } -yy2043: +yy2177: ++p; yych = *p; if (yych <= '\f') { - if (yych <= 0x08) goto yy2026; - if (yych <= '\t') goto yy2043; - if (yych >= '\v') goto yy2026; + if (yych <= 0x08) goto yy2160; + if (yych <= '\t') goto yy2177; + if (yych >= '\v') goto yy2160; } else { - if (yych <= '\r') goto yy2045; - if (yych == ' ') goto yy2043; - goto yy2026; + if (yych <= '\r') goto yy2179; + if (yych == ' ') goto yy2177; + goto yy2160; } -yy2045: +yy2179: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -17562,714 +19712,714 @@ bufsize_t _scan_entity(const unsigned char *p) yych = *(marker = p); if (yych <= 0xDF) { if (yych <= '%') { - if (yych != '\n') goto yy2051; + if (yych != '\n') goto yy2185; } else { - if (yych <= '&') goto yy2050; - if (yych <= 0x7F) goto yy2051; - if (yych >= 0xC2) goto yy2052; + if (yych <= '&') goto yy2184; + if (yych <= 0x7F) goto yy2185; + if (yych >= 0xC2) goto yy2186; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy2054; - if (yych == 0xED) goto yy2059; - goto yy2055; + if (yych <= 0xE0) goto yy2188; + if (yych == 0xED) goto yy2193; + goto yy2189; } else { - if (yych <= 0xF0) goto yy2056; - if (yych <= 0xF3) goto yy2057; - if (yych <= 0xF4) goto yy2058; + if (yych <= 0xF0) goto yy2190; + if (yych <= 0xF3) goto yy2191; + if (yych <= 0xF4) goto yy2192; } } -yy2049: +yy2183: { return 0; } -yy2050: +yy2184: yych = *(marker = ++p); if (yych <= '@') { - if (yych == '#') goto yy2060; - goto yy2049; + if (yych == '#') goto yy2194; + goto yy2183; } else { - if (yych <= 'Z') goto yy2061; - if (yych <= '`') goto yy2049; - if (yych <= 'z') goto yy2061; - goto yy2049; + if (yych <= 'Z') goto yy2195; + if (yych <= '`') goto yy2183; + if (yych <= 'z') goto yy2195; + goto yy2183; } -yy2051: +yy2185: yych = *++p; - goto yy2049; -yy2052: + goto yy2183; +yy2186: yych = *++p; - if (yych <= 0x7F) goto yy2053; - if (yych <= 0xBF) goto yy2051; -yy2053: + if (yych <= 0x7F) goto yy2187; + if (yych <= 0xBF) goto yy2185; +yy2187: p = marker; - goto yy2049; -yy2054: - yych = *++p; - if (yych <= 0x9F) goto yy2053; - if (yych <= 0xBF) goto yy2052; - goto yy2053; -yy2055: - yych = *++p; - if (yych <= 0x7F) goto yy2053; - if (yych <= 0xBF) goto yy2052; - goto yy2053; -yy2056: - yych = *++p; - if (yych <= 0x8F) goto yy2053; - if (yych <= 0xBF) goto yy2055; - goto yy2053; -yy2057: - yych = *++p; - if (yych <= 0x7F) goto yy2053; - if (yych <= 0xBF) goto yy2055; - goto yy2053; -yy2058: - yych = *++p; - if (yych <= 0x7F) goto yy2053; - if (yych <= 0x8F) goto yy2055; - goto yy2053; -yy2059: - yych = *++p; - if (yych <= 0x7F) goto yy2053; - if (yych <= 0x9F) goto yy2052; - goto yy2053; -yy2060: + goto yy2183; +yy2188: + yych = *++p; + if (yych <= 0x9F) goto yy2187; + if (yych <= 0xBF) goto yy2186; + goto yy2187; +yy2189: + yych = *++p; + if (yych <= 0x7F) goto yy2187; + if (yych <= 0xBF) goto yy2186; + goto yy2187; +yy2190: + yych = *++p; + if (yych <= 0x8F) goto yy2187; + if (yych <= 0xBF) goto yy2189; + goto yy2187; +yy2191: + yych = *++p; + if (yych <= 0x7F) goto yy2187; + if (yych <= 0xBF) goto yy2189; + goto yy2187; +yy2192: + yych = *++p; + if (yych <= 0x7F) goto yy2187; + if (yych <= 0x8F) goto yy2189; + goto yy2187; +yy2193: + yych = *++p; + if (yych <= 0x7F) goto yy2187; + if (yych <= 0x9F) goto yy2186; + goto yy2187; +yy2194: yych = *++p; if (yych <= 'W') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2096; - goto yy2053; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2230; + goto yy2187; } else { - if (yych <= 'X') goto yy2095; - if (yych == 'x') goto yy2095; - goto yy2053; + if (yych <= 'X') goto yy2229; + if (yych == 'x') goto yy2229; + goto yy2187; } -yy2061: +yy2195: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy2053; - if (yych >= ':') goto yy2053; + if (yych <= '/') goto yy2187; + if (yych >= ':') goto yy2187; } else { - if (yych <= 'Z') goto yy2062; - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= 'Z') goto yy2196; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } -yy2062: +yy2196: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2065; - if (yych <= ':') goto yy2053; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2199; + if (yych <= ':') goto yy2187; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; - goto yy2065; + if (yych <= '@') goto yy2187; + goto yy2199; } else { - if (yych <= '`') goto yy2053; - if (yych <= 'z') goto yy2065; - goto yy2053; + if (yych <= '`') goto yy2187; + if (yych <= 'z') goto yy2199; + goto yy2187; } } -yy2063: +yy2197: ++p; { return (bufsize_t)(p - start); } -yy2065: +yy2199: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2066; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2200; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2066: +yy2200: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2067; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2201; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2067: +yy2201: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2068; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2202; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2068: +yy2202: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2069; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2203; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2069: +yy2203: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2070; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2204; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2070: +yy2204: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2071; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2205; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2071: +yy2205: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2072; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2206; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2072: +yy2206: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2073; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2207; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2073: +yy2207: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2074; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2208; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2074: +yy2208: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2075; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2209; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2075: +yy2209: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2076; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2210; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2076: +yy2210: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2077; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2211; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2077: +yy2211: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2078; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2212; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2078: +yy2212: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2079; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2213; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2079: +yy2213: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2080; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2214; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2080: +yy2214: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2081; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2215; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2081: +yy2215: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2082; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2216; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2082: +yy2216: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2083; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2217; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2083: +yy2217: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2084; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2218; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2084: +yy2218: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2085; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2219; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2085: +yy2219: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2086; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2220; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2086: +yy2220: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2087; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2221; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2087: +yy2221: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2088; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2222; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2088: +yy2222: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2089; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2223; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2089: +yy2223: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2090; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2224; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2090: +yy2224: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2091; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2225; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2091: +yy2225: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2092; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2226; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2092: +yy2226: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2093; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2227; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2093: +yy2227: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2094; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2228; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'Z') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= '{') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= '{') goto yy2187; } } -yy2094: +yy2228: yych = *++p; - if (yych == ';') goto yy2063; - goto yy2053; -yy2095: + if (yych == ';') goto yy2197; + goto yy2187; +yy2229: yych = *++p; if (yych <= '@') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2103; - goto yy2053; - } else { - if (yych <= 'F') goto yy2103; - if (yych <= '`') goto yy2053; - if (yych <= 'f') goto yy2103; - goto yy2053; - } -yy2096: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2097; - if (yych == ';') goto yy2063; - goto yy2053; -yy2097: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2098; - if (yych == ';') goto yy2063; - goto yy2053; -yy2098: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2099; - if (yych == ';') goto yy2063; - goto yy2053; -yy2099: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2100; - if (yych == ';') goto yy2063; - goto yy2053; -yy2100: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2101; - if (yych == ';') goto yy2063; - goto yy2053; -yy2101: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2102; - if (yych == ';') goto yy2063; - goto yy2053; -yy2102: - yych = *++p; - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2094; - if (yych == ';') goto yy2063; - goto yy2053; -yy2103: + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2237; + goto yy2187; + } else { + if (yych <= 'F') goto yy2237; + if (yych <= '`') goto yy2187; + if (yych <= 'f') goto yy2237; + goto yy2187; + } +yy2230: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2231; + if (yych == ';') goto yy2197; + goto yy2187; +yy2231: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2232; + if (yych == ';') goto yy2197; + goto yy2187; +yy2232: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2233; + if (yych == ';') goto yy2197; + goto yy2187; +yy2233: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2234; + if (yych == ';') goto yy2197; + goto yy2187; +yy2234: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2235; + if (yych == ';') goto yy2197; + goto yy2187; +yy2235: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2236; + if (yych == ';') goto yy2197; + goto yy2187; +yy2236: + yych = *++p; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2228; + if (yych == ';') goto yy2197; + goto yy2187; +yy2237: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2104; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2238; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= 'g') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= 'g') goto yy2187; } } -yy2104: +yy2238: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2105; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2239; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= 'g') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= 'g') goto yy2187; } } -yy2105: +yy2239: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2106; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2240; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= 'g') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= 'g') goto yy2187; } } -yy2106: +yy2240: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2107; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2241; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= 'g') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= 'g') goto yy2187; } } -yy2107: +yy2241: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2108; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2242; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= 'g') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= 'g') goto yy2187; } } -yy2108: +yy2242: yych = *++p; if (yych <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2109; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2243; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; + if (yych <= '@') goto yy2187; } else { - if (yych <= '`') goto yy2053; - if (yych >= 'g') goto yy2053; + if (yych <= '`') goto yy2187; + if (yych >= 'g') goto yy2187; } } -yy2109: +yy2243: ++p; if ((yych = *p) <= ';') { - if (yych <= '/') goto yy2053; - if (yych <= '9') goto yy2094; - if (yych <= ':') goto yy2053; - goto yy2063; + if (yych <= '/') goto yy2187; + if (yych <= '9') goto yy2228; + if (yych <= ':') goto yy2187; + goto yy2197; } else { if (yych <= 'F') { - if (yych <= '@') goto yy2053; - goto yy2094; + if (yych <= '@') goto yy2187; + goto yy2228; } else { - if (yych <= '`') goto yy2053; - if (yych <= 'f') goto yy2094; - goto yy2053; + if (yych <= '`') goto yy2187; + if (yych <= 'f') goto yy2228; + goto yy2187; } } } diff --git a/src/scanners.h b/src/scanners.h index bc5134ea6f..db8eeb8b17 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -10,7 +10,13 @@ bufsize_t _scan_scheme(const unsigned char *p); bufsize_t _scan_autolink_uri(const unsigned char *p); bufsize_t _scan_autolink_email(const unsigned char *p); bufsize_t _scan_html_tag(const unsigned char *p); -bufsize_t _scan_html_block_tag(const unsigned char *p); +bufsize_t _scan_html_block_start(const unsigned char *p); +bufsize_t _scan_html_block_start_7(const unsigned char *p); +bufsize_t _scan_html_block_end_1(const unsigned char *p); +bufsize_t _scan_html_block_end_2(const unsigned char *p); +bufsize_t _scan_html_block_end_3(const unsigned char *p); +bufsize_t _scan_html_block_end_4(const unsigned char *p); +bufsize_t _scan_html_block_end_5(const unsigned char *p); bufsize_t _scan_link_url(const unsigned char *p); bufsize_t _scan_link_title(const unsigned char *p); bufsize_t _scan_spacechars(const unsigned char *p); @@ -25,7 +31,13 @@ bufsize_t _scan_entity(const unsigned char *p); #define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n) #define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n) #define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n) -#define scan_html_block_tag(c, n) _scan_at(&_scan_html_block_tag, c, n) +#define scan_html_block_start(c, n) _scan_at(&_scan_html_block_start, c, n) +#define scan_html_block_start_7(c, n) _scan_at(&_scan_html_block_start_7, c, n) +#define scan_html_block_end_1(c, n) _scan_at(&_scan_html_block_end_1, c, n) +#define scan_html_block_end_2(c, n) _scan_at(&_scan_html_block_end_2, c, n) +#define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n) +#define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n) +#define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n) #define scan_link_url(c, n) _scan_at(&_scan_link_url, c, n) #define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n) #define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n) diff --git a/src/scanners.re b/src/scanners.re index 8707a8d040..40a0f92a7c 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -32,7 +32,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, tagname = [A-Za-z][A-Za-z0-9]*; - blocktagname = 'article'|'header'|'aside'|'hgroup'|'iframe'|'blockquote'|'hr'|'body'|'li'|'map'|'button'|'object'|'canvas'|'ol'|'caption'|'output'|'col'|'p'|'colgroup'|'pre'|'dd'|'progress'|'div'|'section'|'dl'|'table'|'td'|'dt'|'tbody'|'embed'|'textarea'|'fieldset'|'tfoot'|'figcaption'|'th'|'figure'|'thead'|'footer'|'footer'|'tr'|'form'|'ul'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'video'|'script'|'style'; + blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'head'|'header'|'hr'|'html'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'pre'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; @@ -117,16 +117,85 @@ bufsize_t _scan_html_tag(const unsigned char *p) */ } -// Try to match an HTML block tag including first <, -// returning num of chars matched. -bufsize_t _scan_html_block_tag(const unsigned char *p) +// Try to match an HTML block tag start line, returning +// an integer code for the type of block (1-6, matching the spec). +// #7 is handled by a separate function, below. +bufsize_t _scan_html_block_start(const unsigned char *p) +{ + const unsigned char *marker = NULL; +/*!re2c + [<] ('script'|'pre'|'style') (spacechar | [>]) { return 1; } + '' { return (bufsize_t)(p - start); } + .? { return 0; } +*/ +} + +// Try to match an HTML block end line of type 3 +bufsize_t _scan_html_block_end_3(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; +/*!re2c + .* '?>' { return (bufsize_t)(p - start); } + .? { return 0; } +*/ +} + +// Try to match an HTML block end line of type 4 +bufsize_t _scan_html_block_end_4(const unsigned char *p) +{ + const unsigned char *marker = NULL; + const unsigned char *start = p; +/*!re2c + .* '>' { return (bufsize_t)(p - start); } + .? { return 0; } +*/ +} + +// Try to match an HTML block end line of type 5 +bufsize_t _scan_html_block_end_5(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [<] [/] blocktagname (spacechar | [>]) { return (bufsize_t)(p - start); } - [<] blocktagname (spacechar | [/>]) { return (bufsize_t)(p - start); } - [<] [!?] { return (bufsize_t)(p - start); } + .* ']]>' { return (bufsize_t)(p - start); } .? { return 0; } */ } diff --git a/test/spec.txt b/test/spec.txt index 0c42aae7a0..ed9b8e22c8 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.20 -date: 2015-06-08 +version: 0.21-dev +date: license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -237,7 +237,7 @@ or more [unicode whitespace character]s. A [space](@space) is `U+0020`. -A [non-space character](@non-space-character) is any character +A [non-whitespace character](@non-space-character) is any character that is not a [whitespace character]. An [ASCII punctuation character](@ascii-punctuation-character) @@ -474,7 +474,7 @@ a------

                            ---a---

                            . -It is required that all of the [non-space character]s be the same. +It is required that all of the [non-whitespace character]s be the same. So, this is not a horizontal rule: . @@ -564,7 +564,7 @@ consists of a string of characters, parsed as inline content, between an opening sequence of 1--6 unescaped `#` characters and an optional closing sequence of any number of `#` characters. The opening sequence of `#` characters cannot be followed directly by a -[non-space character]. The optional closing sequence of `#`s must be +[non-whitespace character]. The optional closing sequence of `#`s must be preceded by a [space] and may be followed by spaces only. The opening `#` character may be indented 0-3 spaces. The raw contents of the header are stripped of leading and trailing spaces before being parsed @@ -696,7 +696,7 @@ Spaces are allowed after the closing sequence: . A sequence of `#` characters with a -[non-space character] following it +[non-whitespace character] following it is not a closing sequence, but counts as part of the contents of the header: @@ -765,7 +765,7 @@ ATX headers can be empty: ## Setext headers A [setext header](@setext-header) -consists of a line of text, containing at least one [non-space character], +consists of a line of text, containing at least one [non-whitespace character], with no more than 3 spaces indentation, followed by a [setext header underline]. The line of text must be one that, were it not followed by the setext header underline, @@ -1593,27 +1593,65 @@ Closing code fences cannot have [info string]s: ## HTML blocks -An [HTML block tag](@html-block-tag) is -an [open tag] or [closing tag] whose tag -name is one of the following (case-insensitive): -`article`, `header`, `aside`, `hgroup`, `blockquote`, `hr`, `iframe`, -`body`, `li`, `map`, `button`, `object`, `canvas`, `ol`, `caption`, -`output`, `col`, `p`, `colgroup`, `pre`, `dd`, `progress`, `div`, -`section`, `dl`, `table`, `td`, `dt`, `tbody`, `embed`, `textarea`, -`fieldset`, `tfoot`, `figcaption`, `th`, `figure`, `thead`, `footer`, -`tr`, `form`, `ul`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `video`, -`script`, `style`. - -An [HTML block](@html-block) begins with an -[HTML block tag], [HTML comment], [processing instruction], -[declaration], or [CDATA section]. -It ends when a [blank line] or the end of the -input is encountered. The initial line may be indented up to three -spaces, and subsequent lines may have any indentation. The contents -of the HTML block are interpreted as raw HTML, and will not be escaped -in HTML output. - -Some simple examples: +An [HTML block](@html-block) is a group of lines that is treated +as raw HTML (and will not be escaped in HTML output). + +There are seven kinds of [HTML block], which can be defined +by their start and end conditions. The block begins with a line that +meets a [start condition](@start-condition) (after up to three spaces +optional indentation). It ends with the first subsequent line that +meets a matching [end condition](@end-condition), or the last line of +the document, 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. + +1. **Start condition:** line begins with the string ``, or the end of the line.\ +**End condition:** line contains an end tag +``, `
                            `, or `` (case-insensitive; it +need not match the start tag). + +2. **Start condition:** line begins with the string ``. + +3. **Start condition:** line begins with the string ``. + +4. **Start condition:** line begins with the string ``. + +5. **Start condition:** line begins with the string +``. + +6. **Start condition:** line begins the string `<` or ``, or +the string `/>`.\ +**End condition:** line is followed by a [blank line]. + +7. **Start condition:** line begins with an [open tag] +(with any [tag name]) followed only by [whitespace] or the end +of the line.\ +**End condition:** line is followed by a [blank line]. + +All types of [HTML blocks] except type 7 may interrupt +a paragraph. Blocks of type 7 may not interrupt a paragraph. +(This restricted is intended to prevent unwanted interpretation +of long tags inside a wrapped paragraph as starting HTML blocks.) + +Some simple examples follow. Here are some basic HTML blocks +of type 6: . @@ -1646,6 +1684,16 @@ okay. . +A block can also start with a closing tag: + +. + +*foo* +. + +*foo* +. + Here we have two HTML blocks with a Markdown paragraph between them: . @@ -1660,7 +1708,94 @@ Here we have two HTML blocks with a Markdown paragraph between them: . -In the following example, what looks like a Markdown code block +The tag on the first line can be partial, as long +as it is split where there would be whitespace: + +. +
                            +
                            +. +
                            +
                            +. + +. +
                            +
                            +. +
                            +
                            +. + +An open tag need not be closed: +. +
                            +foo +
                            +. +
                            +foo +
                            +. + +Everything until the next blank line or end of document +gets included in the HTML block. So, in the following +example, what looks like a Markdown code block is actually part of the HTML block, which continues until a blank line or the end of the document is reached: @@ -1676,43 +1811,241 @@ int x = 33; ``` . -A comment: +To start an [HTML block] with a tag that is *not* in the +list of block-level tags in (6), you must put the tag by +itself on the first line (and it must be complete): + +. + +*bar* + +. + +*bar* + +. + +In type 7 blocks, the [tag name] can be anything: + +. + +*bar* + +. + +*bar* + +. + +. + +*bar* + +. + +*bar* + +. + +These rules are designed to allow us to work with tags that +can function as either block-level or inline-level tags. +The `` tag is a nice example. We can surround content with +`` tags in three different ways. In this case, we get a raw +HTML block, because the `` tag is on a line by itself: + +. + +*foo* + +. + +*foo* + +. + +In this case, we get a raw HTML block that just includes +the `` tag (because it ends with the following blank +line). So the contents get interpreted as CommonMark: + +. + + +*foo* + + +. + +

                            foo

                            +
                            +. + +Finally, in this case, the `` tags are interpreted +as [raw HTML] *inside* the CommonMark paragraph. (Because +the tag is not on a line by itself, we get inline HTML +rather than an [HTML block].) + +. +*foo* +. +

                            foo

                            +. + +HTML tags designed to contain literal content +(`script`, `style`, `pre`), comments, processing instructions, +and declarations are treated somewhat differently. +Instead of ending at the first blank line, these blocks +end at the first line containing a corresponding end tag. +As a result, these blocks can contain blank lines: + +A pre tag (type 1): + +. +
                            
                            +import Text.HTML.TagSoup
                            +
                            +main :: IO ()
                            +main = print $ parseTags "bar"
                            +
                            +. +
                            
                            +import Text.HTML.TagSoup
                            +
                            +main :: IO ()
                            +main = print $ parseTags "bar"
                            +
                            +. + +A script tag (type 1): + +. + +. + +. + +A style tag (type 1): + +. + +. + +. + +If there is no matching end tag, the block will end at the +end of the document: + +. + +*foo* +. + +

                            foo

                            +. + +. +*bar* +*baz* +. +*bar* +

                            baz

                            +. + +Note that anything on the last line after the +end tag will be included in the [HTML block]: + +. +1. *bar* +. +1. *bar* +. + +A comment (type 2): . . . -A processing instruction: + +A processing instruction (type 3): . '; + ?> . '; + ?> . -CDATA: +A declaration (type 4): + +. + +. + +. + +CDATA (type 5): . @@ -1720,13 +2053,12 @@ else @@ -1744,8 +2076,18 @@ The opening tag can be indented 1-3 spaces, but not 4:
                            . -An HTML block can interrupt a paragraph, and need not be preceded -by a blank line. +. +
                            + +
                            +. +
                            +
                            <div>
                            +
                            +. + +An HTML block of types 1--6 can interrupt a paragraph, and need not be +preceded by a blank line. . Foo @@ -1759,8 +2101,8 @@ bar
                            . -However, a following blank line is always needed, except at the end of -a document: +However, a following blank line is needed, except at the end of +a document, and except for blocks of types 1--5, above: .
                            @@ -1774,14 +2116,16 @@ bar *foo* . -An incomplete HTML block tag may also start an HTML block: +HTML blocks of type 7 cannot interrupt a paragraph: . -
                            +baz . -
                            Foo + +baz

                            . This rule differs from John Gruber's original Markdown syntax @@ -1800,8 +2144,8 @@ here: - It requires a matching end tag, which it also does not allow to be indented. -Indeed, most Markdown implementations, including some of Gruber's -own perl implementations, do not impose these restrictions. +Most Markdown implementations (including some of Gruber's own) do not +respect all of these restrictions. There is one respect, however, in which Gruber's rule is more liberal than the one given here, since it allows blank lines to occur inside @@ -1812,6 +2156,8 @@ if no matching end tag is found. Second, it provides a very simple and flexible way of including Markdown content inside HTML tags: simply separate the Markdown from the HTML using blank lines: +Compare: + .
                            @@ -1824,8 +2170,6 @@ simply separate the Markdown from the HTML using blank lines:
                            . -Compare: - .
                            *Emphasized* text. @@ -1869,11 +2213,37 @@ Hi . -Moreover, blank lines are usually not necessary and can be -deleted. The exception is inside `
                            ` tags; here, one can
                            -replace the blank lines with `
                            ` entities.
                            +There are problems, however, if the inner tags are indented
                            +*and* separated by spaces, as then they will be interpreted as
                            +an indented code block:
                            +
                            +.
                            +
                            +
                            +  
                            +
                            +    
                            +
                            +  
                            +
                            +
                            + Hi +
                            +. + + +
                            <td>
                            +  Hi
                            +</td>
                            +
                            + +
                            +. -So there is no important loss of expressive power with the new rule. +Fortunately, blank lines are usually not necessary and can be +deleted. The exception is inside `
                            ` tags, but as described
                            +above, raw HTML blocks starting with `
                            ` *can* contain blank
                            +lines.
                             
                             ## Link reference definitions
                             
                            @@ -1885,7 +2255,7 @@ optional [whitespace] (including up to one
                             [line ending]), and an optional [link
                             title], which if it is present must be separated
                             from the [link destination] by [whitespace].
                            -No further [non-space character]s may occur on the line.
                            +No further [non-whitespace character]s may occur on the line.
                             
                             A [link reference definition]
                             does not correspond to a structural element of a document.  Instead, it
                            @@ -2056,7 +2426,7 @@ bar
                             .
                             
                             This is not a link reference definition, because there are
                            -[non-space character]s after the title:
                            +[non-whitespace character]s after the title:
                             
                             .
                             [foo]: /url "title" ok
                            @@ -2323,7 +2693,7 @@ The following rules define [block quotes]:
                             2.  **Laziness.**  If a string of lines *Ls* constitute a [block
                                 quote](#block-quotes) with contents *Bs*, then the result of deleting
                                 the initial [block quote marker] from one or
                            -    more lines in which the next [non-space character] after the [block
                            +    more lines in which the next [non-whitespace character] after the [block
                                 quote marker] is [paragraph continuation
                                 text] is a block quote with *Bs* as its content.
                                 [Paragraph continuation text](@paragraph-continuation-text) is text
                            @@ -2700,7 +3070,7 @@ is a sequence of one of more digits (`0-9`), followed by either a
                             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-space character] and not separated
                            +    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
                                 of prepending *M* and the following spaces to the first line of
                            @@ -2758,7 +3128,7 @@ The most important thing to notice is that the position of
                             the text after the list marker determines how much indentation
                             is needed in subsequent blocks in the list item.  If the list
                             marker takes up two spaces, and there are three spaces between
                            -the list marker and the next [non-space character], then blocks
                            +the list marker and the next [non-whitespace character], then blocks
                             must be indented five spaces in order to fall under the list
                             item.
                             
                            @@ -2816,7 +3186,7 @@ put under the list item:
                             
                             It is tempting to think of this in terms of columns:  the continuation
                             blocks must be indented at least to the column of the first
                            -[non-space character] after the list marker. However, that is not quite right.
                            +[non-whitespace character] after the list marker. However, that is not quite right.
                             The spaces after the list marker determine how much relative indentation
                             is needed.  Which column this indentation reaches will depend on
                             how the list item is embedded in other constructions, as shown by
                            @@ -3069,7 +3439,7 @@ inside the code block:
                             
                             Note that rules #1 and #2 only apply to two cases:  (a) cases
                             in which the lines to be included in a list item begin with a
                            -[non-space character], and (b) cases in which
                            +[non-whitespace character], and (b) cases in which
                             they begin with an indented code
                             block.  In a case like the following, where the first block begins with
                             a three-space indent, the rules do not allow us to form a list item by
                            @@ -3301,7 +3671,7 @@ Four spaces indent gives a code block:
                             5.  **Laziness.**  If a string of lines *Ls* constitute a [list
                                 item](#list-items) with contents *Bs*, then the result of deleting
                                 some or all of the indentation from one or more lines in which the
                            -    next [non-space character] after the indentation is
                            +    next [non-whitespace character] after the indentation is
                                 [paragraph continuation text] is a
                                 list item with the same contents and attributes.  The unindented
                                 lines are called
                            @@ -4360,7 +4730,7 @@ raw HTML:
                             .
                             
                             .
                            -

                            + . But they work in all other contexts, including URLs and link titles, @@ -4474,7 +4844,7 @@ code blocks, including raw HTML, URLs, [link title]s, and . . -

                            + . . @@ -6031,6 +6401,20 @@ in Markdown:

                            link

                            . +A link can contain fragment identifiers and queries: + +. +[link](#fragment) + +[link](http://example.com#fragment) + +[link](http://example.com?foo=bar&baz#fragment) +. +

                            link

                            +

                            link

                            +

                            link

                            +. + Note that a backslash before a non-escapable character is just a backslash: @@ -6245,7 +6629,7 @@ that [matches] a [link reference definition] elsewhere in the document. A [link label](@link-label) begins with a left bracket (`[`) and ends with the first right bracket (`]`) that is not backslash-escaped. -Between these brackets there must be at least one non-[whitespace character]. +Between these brackets there must be at least one [non-whitespace character]. Unescaped square bracket characters are not allowed in [link label]s. A link label can have at most 999 characters inside the square brackets. @@ -6492,7 +6876,7 @@ backslash-escaped:

                            foo

                            . -A [link label] must contain at least one non-[whitespace character]: +A [link label] must contain at least one [non-whitespace character]: . [] @@ -7107,7 +7491,7 @@ consists of `"`, zero or more characters not including `"`, and a final `"`. An [open tag](@open-tag) consists of a `<` character, a [tag name], -zero or more [attributes], optional [whitespace], an optional `/` +zero or more [attributes](@attribute], optional [whitespace], an optional `/` character, and a `>` character. A [closing tag](@closing-tag) consists of the string ` . -

                            -

                            + + . Illegal attributes in closing tag: @@ -7288,7 +7672,7 @@ Entities are preserved in HTML attributes: . . -

                            + . Backslash escapes do not work in HTML attributes: @@ -7296,7 +7680,7 @@ Backslash escapes do not work in HTML attributes: . . -

                            + . . -- cgit 0.0.5-2-1-g0f52 From c210285ad91e3aeaf75e36e53785d49e5e275bff Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 10 Jul 2015 14:59:39 -0700 Subject: Updated spec.txt. --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index ed9b8e22c8..bf8674ab02 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1904,14 +1904,14 @@ A pre tag (type 1): import Text.HTML.TagSoup main :: IO () -main = print $ parseTags "bar" +main = print $ parseTags tags
                            .
                            
                             import Text.HTML.TagSoup
                             
                             main :: IO ()
                            -main = print $ parseTags "bar"
                            +main = print $ parseTags tags
                             
                            . -- cgit 0.0.5-2-1-g0f52 From 0978e3eb42cd5e67e31f19796975f5dc524344ba Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 11 Jul 2015 08:34:07 -0700 Subject: Updated spec.txt. --- test/spec.txt | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index bf8674ab02..49086f88fa 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1348,7 +1348,8 @@ aaa
                            . -Unclosed code blocks are closed by the end of the document: +Unclosed code blocks are closed by the end of the document +(or the enclosing [block quote] or [list item]): . ``` @@ -1368,6 +1369,19 @@ aaa
                            . +. +> ``` +> aaa + +bbb +. +
                            +
                            aaa
                            +
                            +
                            +

                            bbb

                            +. + A code block can have all empty lines as its content: . @@ -1950,7 +1964,8 @@ p {color:blue;} . If there is no matching end tag, the block will end at the -end of the document: +end of the document (or the enclosing [block quote] or +[list item]): . , matches_end_condition = - scan_html_block_end_1(&input, parser->first_nonspace); + scan_html_block_end_1(&input, parser->first_nonspace); break; case 2: // --> matches_end_condition = - scan_html_block_end_2(&input, parser->first_nonspace); + scan_html_block_end_2(&input, parser->first_nonspace); break; case 3: // ?> matches_end_condition = - scan_html_block_end_3(&input, parser->first_nonspace); + scan_html_block_end_3(&input, parser->first_nonspace); break; case 4: // > matches_end_condition = - scan_html_block_end_4(&input, parser->first_nonspace); + scan_html_block_end_4(&input, parser->first_nonspace); break; case 5: // ]]> matches_end_condition = - scan_html_block_end_5(&input, parser->first_nonspace); + scan_html_block_end_5(&input, parser->first_nonspace); break; default: matches_end_condition = 0; diff --git a/src/commonmark.c b/src/commonmark.c index 60565d2a08..0f4c2bc3c5 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -21,28 +21,28 @@ // Functions to convert cmark_nodes to commonmark strings. static inline void outc(cmark_renderer *renderer, - cmark_escaping escape, - int32_t c, - unsigned char nextc) + cmark_escaping escape, + int32_t c, + unsigned char nextc) { bool needs_escaping = false; needs_escaping = - escape != LITERAL && - ((escape == NORMAL && - (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || - c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || - (c == '&' && isalpha(nextc)) || - (c == '!' && nextc == '[') || - (renderer->begin_line && - (c == '-' || c == '+' || c == '=')) || - ((c == '.' || c == ')') && - isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) || - (escape == URL && - (c == '`' || c == '<' || c == '>' || isspace(c) || - c == '\\' || c == ')' || c == '(')) || - (escape == TITLE && - (c == '`' || c == '<' || c == '>' || c == '"' || - c == '\\'))); + escape != LITERAL && + ((escape == NORMAL && + (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || + c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || + (c == '&' && isalpha(nextc)) || + (c == '!' && nextc == '[') || + (renderer->begin_line && + (c == '-' || c == '+' || c == '=')) || + ((c == '.' || c == ')') && + isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) || + (escape == URL && + (c == '`' || c == '<' || c == '>' || isspace(c) || + c == '\\' || c == ')' || c == '(')) || + (escape == TITLE && + (c == '`' || c == '<' || c == '>' || c == '"' || + c == '\\'))); if (needs_escaping) { if (isspace(c)) { @@ -159,9 +159,9 @@ get_containing_block(cmark_node *node) static int S_render_node(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options) + cmark_node *node, + cmark_event_type ev_type, + int options) { cmark_node *tmp; int list_number; diff --git a/src/html.c b/src/html.c index 48a80d6953..c6bbea6964 100644 --- a/src/html.c +++ b/src/html.c @@ -179,7 +179,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(html, ""); } else { cmark_strbuf_put(html, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); } cr(html); break; @@ -239,7 +239,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(html, ""); } else { cmark_strbuf_put(html, node->as.literal.data, - node->as.literal.len); + node->as.literal.len); } break; @@ -265,15 +265,15 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (!((options & CMARK_OPT_SAFE) && scan_dangerous_url(&node->as.link.url, 0))) { houdini_escape_href(html, - node->as.link.url.data, - node->as.link.url.len); + node->as.link.url.data, + node->as.link.url.len); } if (node->as.link.title.len) { cmark_strbuf_puts(html, "\" title=\""); escape_html(html, - node->as.link.title.data, - node->as.link.title.len); + node->as.link.title.data, + node->as.link.title.len); } cmark_strbuf_puts(html, "\">"); } else { @@ -287,8 +287,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (!((options & CMARK_OPT_SAFE) && scan_dangerous_url(&node->as.link.url, 0))) { houdini_escape_href(html, - node->as.link.url.data, - node->as.link.url.len); + node->as.link.url.data, + node->as.link.url.len); } cmark_strbuf_puts(html, "\" alt=\""); diff --git a/src/latex.c b/src/latex.c index 34dffc74a2..782b0c07f3 100644 --- a/src/latex.c +++ b/src/latex.c @@ -19,9 +19,9 @@ #define BLANKLINE() renderer->blankline(renderer) static inline void outc(cmark_renderer *renderer, - cmark_escaping escape, - int32_t c, - unsigned char nextc) + cmark_escaping escape, + int32_t c, + unsigned char nextc) { if (escape == LITERAL) { cmark_render_code_point(renderer, c); @@ -220,9 +220,9 @@ S_get_enumlevel(cmark_node *node) static int S_render_node(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options) + cmark_node *node, + cmark_event_type ev_type, + int options) { int list_number; char list_number_string[20]; @@ -260,7 +260,7 @@ S_render_node(cmark_renderer *renderer, list_number = cmark_node_get_list_start(node); if (list_number > 1) { sprintf(list_number_string, - "%d", list_number); + "%d", list_number); LIT("\\setcounter{enum"); LIT((char *)roman_numerals[S_get_enumlevel(node)]); LIT("}{"); diff --git a/src/man.c b/src/man.c index 4a49441c85..6ff33f5837 100644 --- a/src/man.c +++ b/src/man.c @@ -18,9 +18,9 @@ // Functions to convert cmark_nodes to groff man strings. static void S_outc(cmark_renderer *renderer, - cmark_escaping escape, - int32_t c, - unsigned char nextc) + cmark_escaping escape, + int32_t c, + unsigned char nextc) { (void)(nextc); @@ -75,8 +75,8 @@ void S_outc(cmark_renderer *renderer, static int S_render_node(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, + cmark_node *node, + cmark_event_type ev_type, int options) { cmark_node *tmp; @@ -133,7 +133,7 @@ S_render_node(cmark_renderer *renderer, if (entering) { CR(); LIT(cmark_node_get_header_level(node) == 1 ? - ".SH" : ".SS"); + ".SH" : ".SS"); CR(); } else { CR(); diff --git a/src/render.c b/src/render.c index ab53558625..2f1faac4d2 100644 --- a/src/render.c +++ b/src/render.c @@ -23,9 +23,9 @@ void S_blankline(cmark_renderer *renderer) static void S_out(cmark_renderer *renderer, - const char *source, - bool wrap, - cmark_escaping escape) + const char *source, + bool wrap, + cmark_escaping escape) { int length = cmark_strbuf_safe_strlen(source); unsigned char nextc; @@ -74,7 +74,7 @@ void S_out(cmark_renderer *renderer, renderer->column += 1; renderer->begin_line = false; renderer->last_breakable = renderer->buffer->size - - 1; + 1; // skip following spaces while (source[i + 1] == ' ') { i++; @@ -138,16 +138,16 @@ cmark_render_code_point(cmark_renderer *renderer, uint32_t c) char* cmark_render(cmark_node *root, - int options, - int width, - void (*outc)(cmark_renderer*, - cmark_escaping, - int32_t, - unsigned char), - int (*render_node)(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options)) + int options, + int width, + void (*outc)(cmark_renderer*, + cmark_escaping, + int32_t, + unsigned char), + int (*render_node)(cmark_renderer *renderer, + cmark_node *node, + cmark_event_type ev_type, + int options)) { cmark_strbuf pref = GH_BUF_INIT; cmark_strbuf buf = GH_BUF_INIT; @@ -157,8 +157,9 @@ cmark_render(cmark_node *root, cmark_iter *iter = cmark_iter_new(root); cmark_renderer renderer = { &buf, &pref, 0, width, - 0, 0, true, false, false, - outc, S_cr, S_blankline, S_out }; + 0, 0, true, false, false, + outc, S_cr, S_blankline, S_out + }; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); -- cgit 0.0.5-2-1-g0f52 From feabcd3a5d431f5bbc577e87d70a3e2bf3c39e70 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 14:49:37 -0700 Subject: Updated spec. --- test/spec.txt | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 9b5e9dc78d..4062998711 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3104,8 +3104,10 @@ A [bullet list marker](@bullet-list-marker) is a `-`, `+`, or `*` character. An [ordered list marker](@ordered-list-marker) -is a sequence of one of more digits (`0-9`), followed by either a -`.` character or a `)` character. +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.) The following rules define [list items]: @@ -3374,6 +3376,49 @@ A list item may contain any kind of block: . +Note that ordered list start numbers must be nine digits or less: + +. +123456789. ok +. +
                              +
                            1. ok
                            2. +
                            +. + +. +1234567890. not ok +. +

                            1234567890. not ok

                            +. + +A start number may begin with 0s: + +. +0. ok +. +
                              +
                            1. ok
                            2. +
                            +. + +. +003. ok +. +
                              +
                            1. ok
                            2. +
                            +. + +A start number may not be negative: + +. +-1. not ok +. +

                            -1. not ok

                            +. + + 2. **Item starting with indented code.** If a sequence of lines *Ls* constitute a sequence of blocks *Bs* starting with an indented code block and not separated from each other by more than one blank line, -- cgit 0.0.5-2-1-g0f52 From bf93f0f667c5e2a8f0d39b2981932abae67cef84 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 15:31:07 -0700 Subject: Updated spec. --- test/spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 4062998711..bdb9569d2d 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,7 +1,7 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.21-dev +version: 0.21 date: license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 643b4f5fe012752bf004597faefa8c778a7aa9ca Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 15:33:28 -0700 Subject: Bump version to 0.21.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7813ca194f..a58f105e24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 20) +set(PROJECT_VERSION_MINOR 21) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From 5561e9c754c5a1324741261a9acbdbe92e7a108c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 15:45:05 -0700 Subject: Removed algorithm.md; it has been added to spec as appendix. --- algorithm.md | 116 ----------------------------------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 algorithm.md diff --git a/algorithm.md b/algorithm.md deleted file mode 100644 index 88fe96e05c..0000000000 --- a/algorithm.md +++ /dev/null @@ -1,116 +0,0 @@ -Algorithm for parsing nested links, images, emphasis, and quotes -================================================================ - -When we're parsing inlines and we hit - -- a run of `*` or `_` characters -- a `[` or `![` - -we insert a text node with the literal content, and add a pointer -to this text node to the **delimiter stack.** - -The **delimiter stack** is a doubly linked list. Each -element contains a pointer to a text node, plus information about - -- the type of delimiter (`[`, `![`, `*`, `_`) -- the number of delimiters, -- whether the delimiter is "active" (all are active to start), and -- whether the delimiter is a potential opener, a potential closer, - or both. - -When we hit a `]` character, we call the `look_for_link_or_image` -procedure (see below). - -When we hit the end of the input, we call the `process_emphasis` -procedure (see below), with `stack_bottom` = NULL. - -`look_for_link_or_image` ------------------------- - -Starting at the top of the delimiter stack, we look backwards -through the stack for a `[` or `![` delimiter. - -If we don't find one, we return a literal text node `]`. - -If we do find one, but it's not *active*, we remove the inactive -delimiter from the stack, and return a literal text node `]`. - -If we find one and it's active, then we parse ahead to see if -we have an inline link/image, reference link/image, compact reference -link/image, or shortcut reference link/image. - -If we don't, then we remove the `[` or `![` delimiter from the -delimiter stack and return a literal text node `]`. - -If we do, then - -- We return a link or image node whose children are the inlines - after the text node pointed to by the opening delimiter. - -- We run `process_emphasis` on these inlines, with the `[` opener - as `stack_bottom`. - -- We remove the opening delimiter. - -- If we have a link (and not an image), we also set all - `[` delimiters before the opening delimiter to *inactive*. (This - will prevent us from getting links within links.) - - -`process_emphasis` ------------------- - -Parameter `stack_bottom` sets a lower bound to how far we -descend in the **delimiter stack**. If it is NULL, we can -go all the way to the bottom. Otherwise, we stop before -visiting `stack_bottom`. - -Let `current_position` point to the element on the delimiter -just above `stack_bottom` (or the first element if `stack_bottom` -is NULL). - -We keep track of the `openers_bottom` for each delimiter -type (`*`, `_`). Initialize this to `stack_bottom`. - -Then we repeat the following until we run out of potential -closers: - -- Move `current_position` forward in the delimiter stack (if needed) - until we find the first potential closer with delimiter `*` or `_`. - (This will be the potential closer closest - to the beginning of the input -- the first one in parse order.) - -- Now, look back in the stack (staying above `stack_bottom` and - the `openers_bottom` for this delimiter type) for the - first matching potential opener ("matching" means same delimiter). - -- If one is found: - - - Figure out whether we have emphasis or strong emphasis: - if both closer and opener spans have length >= 2, we have - strong, otherwise regular. - - Insert an emph or strong emph node accordingly, after - the text node corresponding to the opener. - - Remove delimiters between opener and closer from the delimiter - stack. - - Remove 1 (for regular emph) or 2 (for strong emph) delimiters - from the opening and closing text nodes. If they become empty - as a result, remove them and remove the corresponding element - of the delimiter stack. If the closing node is removed, reset - `current_position` to the next element in the stack. - -- If none in found: - - - Set `openers_bottom` to the element before `current_position`. - (We know that there are no openers for this kind of closer up to and - including this point, so this puts a lower bound on future searches.) - - If the closer at `current_position` is not a potential opener, - remove it from the delimiter stack (since we know it can't - be a closer either). - - Advance `current_position` to the next element in the stack. - -- Repeat. - -- After we're done, remove all delimiters above `stack_bottom` from the - delimiter stack. - -- cgit 0.0.5-2-1-g0f52 From 46f7f2c99f98690f6f63aecf87d7d820bd8dc5d8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 16:04:49 -0700 Subject: Updated benchmarks. --- benchmarks.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index df3fc9322d..ec96f6efe4 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -16,11 +16,11 @@ Chacon. | cheapskate | 8.24 | | peg-markdown | 5.45 | | parsedown | 5.06 | -| **commonmark.js** | 2.20 | -| marked | 2.13 | -| discount | 1.90 | +| **commonmark.js** | 2.09 | +| marked | 1.99 | +| discount | 1.85 | | **cmark** | 0.29 | -| hoedown | 0.23 | +| hoedown | 0.21 | To run these benchmarks, use `make bench PROG=/path/to/program`. -- cgit 0.0.5-2-1-g0f52 From fc2b1494e0b35951517261e635a1b700507e140f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 17:03:17 -0700 Subject: Removed unused ref link defn from README. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 5cfbb10f34..4b73cb2635 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,6 @@ eliminating several worst-case performance issues. Nick Wellnhofer contributed many improvements, including most of the C library's API and its test harness. -[sundown]: https://github.com/vmg/sundown [benchmarks]: benchmarks.md [the spec]: http://spec.commonmark.org [CommonMark]: http://commonmark.org -- cgit 0.0.5-2-1-g0f52 From eb2fe43c5b0bdf11d8b526441b777fb456f108e2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 17:03:27 -0700 Subject: Updated changelog. --- changelog.txt | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/changelog.txt b/changelog.txt index b4ee8eadba..9605c28e2c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,147 @@ +[0.21.0] + + * Updated to version 0.21 of spec. + * Added latex renderer (#31). New exported function in API: + `cmark_render_latex`. New source file: `src/latex.hs`. + * Updates for new HTML block spec. Removed old `html_block_tag` scanner. + Added new `html_block_start` and `html_block_start_7`, as well + as `html_block_end_n` for n = 1-5. Rewrote block parser for new HTML + block spec. + * We no longer preprocess tabs to spaces before parsing. + Instead, we keep track of both the byte offset and + the (virtual) column as we parse block starts. + This allows us to handle tabs without converting + to spaces first. Tabs are left as tabs in the output, as + per the revised spec. + * Removed utf8 validation by default. We now replace null characters + in the line splitting code. + * Added `CMARK_OPT_VALIDATE_UTF8` option and command-line option + `--validate-utf8`. This option causes cmark to check for valid + UTF-8, replacing invalid sequences with the replacement + character, U+FFFD. Previously this was done by default in + connection with tab expansion, but we no longer do it by + default with the new tab treatment. (Many applications will + know that the input is valid UTF-8, so validation will not + be necessary.) + * Added `CMARK_OPT_SAFE` option and `--safe` command-line flag. + + Added `CMARK_OPT_SAFE`. This option disables rendering of raw HTML + and potentially dangerous links. + + Added `--safe` option in command-line program. + + Updated `cmark.3` man page. + + Added `scan_dangerous_url` to scanners. + + In HTML, suppress rendering of raw HTML and potentially dangerous + links if `CMARK_OPT_SAFE`. Dangerous URLs are those that begin + with `javascript:`, `vbscript:`, `file:`, or `data:` (except for + `image/png`, `image/gif`, `image/jpeg`, or `image/webp` mime types). + + Added `api_test` for `OPT_CMARK_SAFE`. + + Rewrote `README.md` on security. + * Limit ordered list start to 9 digits, per spec. + * Added width parameter to `render_man` (API change). + * Extracted common renderer code from latex, man, and commonmark + renderers into a separate module, `renderer.[ch]` (#63). To write a + renderer now, you only need to write a character escaping function + and a node rendering function. You pass these to `cmark_render` + and it handles all the plumbing (including line wrapping) for you. + So far this is an internal module, but we might consider adding + it to the API in the future. + * commonmark writer: correctly handle email autolinks. + * commonmark writer: escape `!`. + * Fixed soft breaks in commonmark renderer. + * Fixed scanner for link url. re2c returns the longest match, so we + were getting bad results with `[link](foo\(and\(bar\)\))` + which it would parse as containing a bare `\` followed by + an in-parens chunk ending with the final paren. + * Allow non-initial hyphens in html tag names. This allows for + custom tags, see jgm/CommonMark#239. + * Updated `test/smart_punct.txt`. + * Implemented new treatment of hyphens with `--smart`, converting + sequences of hyphens to sequences of em and en dashes that contain no + hyphens. + * HTML renderer: properly split info on first space char (see + jgm/commonmark.js#54). + * Changed version variables to functions (#60, Andrius Bentkus). + This is easier to access using ffi, since some languages, like C# + like to use only function interfaces for accessing library + functionality. + * `process_emphasis`: Fixed setting lower bound to potential openers. + Renamed `potential_openers` -> `openers_bottom`. + Renamed `start_delim` -> `stack_bottom`. + * Added case for #59 to `pathological_test.py`. + * Fixed emphasis/link parsing bug (#59). + * Fixed off-by-one error in line splitting routine. + This caused certain NULLs not to be replaced. + * Don't rtrim in `subject_from_buffer`. This gives bad results in + parsing reference links, where we might have trailing blanks + (`finalize` removes the bytes parsed as a reference definition; + before this change, some blank bytes might remain on the line). + + Added `column` and `first_nonspace_column` fields to `parser`. + + Added utility function to advance the offset, computing + the virtual column too. Note that we don't need to deal with + UTF-8 here at all. Only ASCII occurs in block starts. + + Significant performance improvement due to the fact that + we're not doing UTF-8 validation. + * Fixed entity lookup table. The old one had many errors. + The new one is derived from the list in the npm entities package. + Since the sequences can now be longer (multi-code-point), we + have bumped the length limit from 4 to 8, which also affects + `houdini_html_u.c`. An example of the kind of error that was fixed: + `≧̸` should be rendered as "≧̸" (U+02267 U+00338), but it was + being rendered as "≧" (which is the same as `≧`). + * Replace gperf-based entity lookup with binary tree lookup. + The primary advantage is a big reduction in the size of + the compiled library and executable (> 100K). + There should be no measurable performance difference in + normal documents. I detected only a slight performance + hit in a file containing 1,000,000 entities. + + Removed `src/html_unescape.gperf` and `src/html_unescape.h`. + + Added `src/entities.h` (generated by `tools/make_entities_h.py`). + + Added binary tree lookup functions to `houdini_html_u.c`, and + use the data in `src/entities.h`. + * Renamed `entities.h` -> `entities.inc`, and + `tools/make_entities_h.py` -> `tools/make_entitis_inc.py`. + * Fixed cases like + ``` + [ref]: url + "title" ok + ``` + Here we should parse the first line as a reference. + * `inlines.c`: Added utility functions to skip spaces and line endings. + * Fixed backslashes in link destinations that are not part of escapes + (jgm/commonmark#45). + * `process_line`: Removed "add newline if line doesn't have one." + This isn't actually needed. + * Small logic fixes and a simplification in `process_emphasis`. + * Added more pathological tests: + + Many link closers with no openers. + + Many link openers with no closers. + + Many emph openers with no closers. + + Many closers with no openers. + + `"*a_ " * 20000`. + * Fixed `process_emphasis` to handle new pathological cases. + Now we have an array of pointers (`potential_openers`), + keyed to the delim char. When we've failed to match a potential opener + prior to point X in the delimiter stack, we reset `potential_openers` + for that opener type to X, and thus avoid having to look again through + all the openers we've already rejected. + * `process_inlines`: remove closers from delim stack when possible. + When they have no matching openers and cannot be openers themselves, + we can safely remove them. This helps with a performance case: + `"a_ " * 20000` (jgm/commonmark.js#43). + * Roll utf8proc_charlen into utf8proc_valid (Nick Wellnhofer). + Speeds up "make bench" by another percent. + * `spec_tests.py`: allow `→` for tab in HTML examples. + * `normalize.py`: don't collapse whitespace in pre contexts. + * Use utf-8 aware re2c. + * Makefile afl target: removed `-m none`, added `CMARK_OPTS`. + * README: added `make afl` instructions. + * Limit generated generated `cmark.3` to 72 character line width. + * Travis: switched to containerized build system. + * Removed `debug.h`. (It uses GNU extensions, and we don't need it anyway.) + * Removed sundown from benchmarks, because the reading was anomalous. + sundown had an arbitrary 16MB limit on buffers, and the benchmark + input exceeded that. So who knows what we were actually testing? + Added hoedown, sundown's successor, which is a better comparison. + [0.20.0] * Fixed bug in list item parsing when items indented >= 4 spaces (#52). -- cgit 0.0.5-2-1-g0f52 From 09bebcb1de0fea76be8653bed427712fb615a610 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 23:51:44 -0700 Subject: Added clang-check target. --- Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8b8aebcb80..4c8577c7d2 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl clang-check all: cmake_build man/man3/cmark.3 @@ -36,7 +36,8 @@ $(BUILDDIR): cmake .. \ -G "$(GENERATOR)" \ -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \ - -DCMAKE_INSTALL_PREFIX=$(INSTALL_PREFIX) + -DCMAKE_INSTALL_PREFIX=$(INSTALL_PREFIX) \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON install: $(BUILDDIR) make -C $(BUILDDIR) install @@ -77,6 +78,9 @@ afl: -t 100 \ $(CMARK) $(CMARK_OPTS) +clang-check: + find src -name '*.c' | xargs $$CLANG_CHECK_PATH/bin/clang-check -p build -analyze + mingw: mkdir -p $(MINGW_BUILDDIR); \ cd $(MINGW_BUILDDIR); \ -- cgit 0.0.5-2-1-g0f52 From 14d00e76a984ed79afc09589c4c49e5deba1cec4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 15 Jul 2015 07:43:33 -0700 Subject: Use full CMARK_NODE_x instead of NODE_x alias. --- src/inlines.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 7ea308deb5..f97aee99fe 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -620,7 +620,8 @@ S_insert_emph(subject *subj, delimiter *opener, delimiter *closer) // replace empty opener inline with emph cmark_chunk_free(&(opener_inl->as.literal)); emph = opener_inl; - emph->type = use_delims == 1 ? NODE_EMPH : NODE_STRONG; + emph->type = use_delims == 1 ? + CMARK_NODE_EMPH : CMARK_NODE_STRONG; // remove opener from list remove_delimiter(subj, opener); } else { @@ -961,7 +962,7 @@ noMatch: match: inl = opener->inl_text; - inl->type = is_image ? NODE_IMAGE : NODE_LINK; + inl->type = is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK; cmark_chunk_free(&inl->as.literal); inl->first_child = link_text; process_emphasis(subj, opener); -- cgit 0.0.5-2-1-g0f52 From a5c3cda8acf1cb22f04b41c9edcc06938468b12a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 15 Jul 2015 08:01:58 -0700 Subject: Improved `make_autolink`. Ensures that title is chunk with empty string rather than NULL, as with other links. Avoids "potential memory leak" warning from clang static analyzer (though I couldn't measure one with valgrind). --- src/inlines.c | 102 +++++++++++++++++++++++----------------------------------- 1 file changed, 41 insertions(+), 61 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f97aee99fe..c3d860aeab 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -65,46 +65,6 @@ static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); static bufsize_t subject_find_special_char(subject *subj, int options); -static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) -{ - cmark_strbuf buf = GH_BUF_INIT; - - cmark_chunk_trim(url); - - if (url->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } - - if (is_email) - cmark_strbuf_puts(&buf, "mailto:"); - - houdini_unescape_html_f(&buf, url->data, url->len); - return cmark_chunk_buf_detach(&buf); -} - -static inline cmark_node *make_link(cmark_node *label, cmark_chunk *url, cmark_chunk *title) -{ - cmark_node* e = (cmark_node *)calloc(1, sizeof(*e)); - if(e != NULL) { - e->type = CMARK_NODE_LINK; - e->first_child = label; - e->last_child = label; - e->as.link.url = *url; - e->as.link.title = *title; - e->next = NULL; - label->parent = e; - } - return e; -} - -static inline cmark_node* make_autolink(cmark_node* label, cmark_chunk url, int is_email) -{ - cmark_chunk clean_url = cmark_clean_autolink(&url, is_email); - cmark_chunk title = CMARK_CHUNK_EMPTY; - return make_link(label, &clean_url, &title); -} - // Create an inline with a literal string value. static inline cmark_node* make_literal(cmark_node_type t, cmark_chunk s) { @@ -144,6 +104,18 @@ static inline cmark_node* make_simple(cmark_node_type t) return e; } +// Like make_str, but parses entities. +static cmark_node *make_str_with_entities(cmark_chunk *content) +{ + cmark_strbuf unescaped = GH_BUF_INIT; + + if (houdini_unescape_html(&unescaped, content->data, content->len)) { + return make_str(cmark_chunk_buf_detach(&unescaped)); + } else { + return make_str(*content); + } +} + // Duplicate a chunk by creating a copy of the buffer not by reusing the // buffer like cmark_chunk_dup does. static cmark_chunk chunk_clone(cmark_chunk *src) @@ -160,6 +132,33 @@ static cmark_chunk chunk_clone(cmark_chunk *src) return c; } +static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) +{ + cmark_strbuf buf = GH_BUF_INIT; + + cmark_chunk_trim(url); + + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } + + if (is_email) + cmark_strbuf_puts(&buf, "mailto:"); + + houdini_unescape_html_f(&buf, url->data, url->len); + return cmark_chunk_buf_detach(&buf); +} + +static inline cmark_node* make_autolink(cmark_chunk url, int is_email) +{ + cmark_node *link = make_simple(CMARK_NODE_LINK); + link->as.link.url = cmark_clean_autolink(&url, is_email); + link->as.link.title = cmark_chunk_literal(""); + cmark_node_append_child(link, make_str_with_entities(&url)); + return link; +} + static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap) { @@ -695,19 +694,6 @@ static cmark_node* handle_entity(subject* subj) return make_str(cmark_chunk_buf_detach(&ent)); } -// Like make_str, but parses entities. -// Returns an inline sequence consisting of str and entity elements. -static cmark_node *make_str_with_entities(cmark_chunk *content) -{ - cmark_strbuf unescaped = GH_BUF_INIT; - - if (houdini_unescape_html(&unescaped, content->data, content->len)) { - return make_str(cmark_chunk_buf_detach(&unescaped)); - } else { - return make_str(*content); - } -} - // Clean a URL: remove surrounding whitespace and surrounding <>, // and remove \ that escape punctuation. cmark_chunk cmark_clean_url(cmark_chunk *url) @@ -772,10 +758,7 @@ static cmark_node* handle_pointy_brace(subject* subj) contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); subj->pos += matchlen; - return make_autolink( - make_str_with_entities(&contents), - contents, 0 - ); + return make_autolink(contents, 0); } // next try to match an email autolink @@ -784,10 +767,7 @@ static cmark_node* handle_pointy_brace(subject* subj) contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); subj->pos += matchlen; - return make_autolink( - make_str_with_entities(&contents), - contents, 1 - ); + return make_autolink(contents, 1); } // finally, try to match an html tag -- cgit 0.0.5-2-1-g0f52 From 6f039027f8ebff929d6ee1bf4a357832154a9ad3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 15 Jul 2015 13:39:32 -0700 Subject: Improved clang-check target. --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4c8577c7d2..c29093f9fe 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ BENCHINP?=README.md VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local +CLANG_CHECK?=clang-check .PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl clang-check @@ -78,8 +79,8 @@ afl: -t 100 \ $(CMARK) $(CMARK_OPTS) -clang-check: - find src -name '*.c' | xargs $$CLANG_CHECK_PATH/bin/clang-check -p build -analyze +clang-check: all + ${CLANG_CHECK} -p build -analyze src/*.c mingw: mkdir -p $(MINGW_BUILDDIR); \ -- cgit 0.0.5-2-1-g0f52 From 4b172b6be03de83157d3e2aab07efe40de8ee736 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 15 Jul 2015 16:48:49 -0700 Subject: make bench: allow overriding BENCHFILE. Previously if you did this, it would clopper BENCHFILE with the default bench file. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c29093f9fe..6ff8b88f95 100644 --- a/Makefile +++ b/Makefile @@ -153,7 +153,7 @@ fuzztest: progit: git clone https://github.com/progit/progit.git -$(BENCHFILE): progit +$(BENCHDIR)/benchinput.md: progit echo "" > $@ for lang in ar az be ca cs de en eo es es-ni fa fi fr hi hu id it ja ko mk nl no-nb pl pt-br ro ru sr th tr uk vi zh zh-tw; do \ cat progit/$$lang/*/*.markdown >> $@; \ -- cgit 0.0.5-2-1-g0f52 From 03f73146e79981bb5cf23695c46235e688a32541 Mon Sep 17 00:00:00 2001 From: OGINO Masanori Date: Thu, 16 Jul 2015 08:50:27 +0900 Subject: Split roundtrip_test and leakcheck. CI status became green even if roundtrip_test failed, since `then` block was not suspended when $? was non-zero. Splitting roundtrip_test and leakcheck addresses this problem. With this change, builds checks ``${TRAVIS_OS_NAME}`` twice, but checking a variable is cheap enough. Signed-off-by: OGINO Masanori --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5de56321ae..5ffc63bf90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,10 @@ script: - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] then - make roundtrip_test - make leakcheck + make roundtrip_test + fi + - | + if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] + then + make leakcheck fi -- cgit 0.0.5-2-1-g0f52 From 16374c5e66fe44774665b33120b98526f5499940 Mon Sep 17 00:00:00 2001 From: OGINO Masanori Date: Thu, 16 Jul 2015 09:07:53 +0900 Subject: Fix indentations. Signed-off-by: OGINO Masanori --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5ffc63bf90..25c3ec14de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,10 +29,10 @@ script: - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] then - make roundtrip_test + make roundtrip_test fi - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] then - make leakcheck + make leakcheck fi -- cgit 0.0.5-2-1-g0f52 From f474ac349069ad5c07050a54fbd0a10262acd23c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 15 Jul 2015 17:45:40 -0700 Subject: Set POSITION_INDEPENDENT_CODE ON for static library. See discussion in #39. --- src/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index eee931616a..b40c1ace29 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -88,7 +88,8 @@ set_target_properties(${LIBRARY} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} VERSION ${PROJECT_VERSION}) set_target_properties(${STATICLIBRARY} PROPERTIES - COMPILE_FLAGS -DCMARK_STATIC_DEFINE) + COMPILE_FLAGS -DCMARK_STATIC_DEFINE + POSITION_INDEPENDENT_CODE ON) if (MSVC) set_target_properties(${STATICLIBRARY} PROPERTIES -- cgit 0.0.5-2-1-g0f52 From bd70a7a2495ae538fe9abceb907a86874cf9c8e1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 16 Jul 2015 13:12:27 -0700 Subject: Allow tabs before closing ##s in ATX header --- src/blocks.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index f8b7495beb..8828a1146d 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -564,8 +564,9 @@ static void chop_trailing_hashtags(cmark_chunk *ch) while (n >= 0 && peek_at(ch, n) == '#') n--; - // Check for a be a space before the final #s: - if (n != orig_n && n >= 0 && peek_at(ch, n) == ' ') { + // Check for a space before the final #s: + if (n != orig_n && n >= 0 && + (peek_at(ch, n) == ' ' || peek_at(ch, n) == '\t')) { ch->len = n; cmark_chunk_rtrim(ch); } -- cgit 0.0.5-2-1-g0f52 From 48c87076d442b4c525d7831e7481cea8affa8c5d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jul 2015 23:13:57 -0700 Subject: Improved smart_punct.txt. See jgm/commonmark.js#61 --- test/smart_punct.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/smart_punct.txt b/test/smart_punct.txt index ac13a26eb3..7dd93940af 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -58,6 +58,14 @@ by the single quote before `jolly`:

                            ’tis the season to be ‘jolly’

                            . +Multiple apostrophes should not be marked as open/closing quotes. + +. +'We'll use Jane's boat and John's truck,' Jenna said. +. +

                            ‘We’ll use Jane’s boat and John’s truck,’ Jenna said.

                            +. + An unmatched double quote will be interpreted as a left double quote, to facilitate this style: -- cgit 0.0.5-2-1-g0f52 From 7bfb3ad4fa39e1461f0579d2fd8aaaab293996e8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 15:45:33 -0700 Subject: Avoid using strbuf_printf when not needed. --- src/xml.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/xml.c b/src/xml.c index 7eec5a69db..815afa5a00 100644 --- a/src/xml.c +++ b/src/xml.c @@ -40,8 +40,8 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, if (entering) { indent(state); - cmark_strbuf_printf(xml, "<%s", - cmark_node_get_type_string(node)); + cmark_strbuf_putc(xml, '<'); + cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { cmark_strbuf_printf(xml, " sourcepos=\"%d:%d-%d:%d\"", @@ -135,8 +135,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, } else if (node->first_child) { state->indent -= 2; indent(state); - cmark_strbuf_printf(xml, "\n", - cmark_node_get_type_string(node)); + cmark_strbuf_puts(xml, "\n"); } return 1; -- cgit 0.0.5-2-1-g0f52 From 2c8ce48a3c75a28ac2f5bee5a2d3b8cfda5e66b3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 15:50:55 -0700 Subject: commonmark renderer - use regular sprintf for list markers. This avoids an allocation and use of strbuf_printf. --- src/commonmark.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 0f4c2bc3c5..6462db9e57 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -171,7 +171,7 @@ S_render_node(cmark_renderer *renderer, bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info, *code, *title; size_t info_len, code_len; - cmark_strbuf listmarker = GH_BUF_INIT; + char listmarker[20]; char *emph_delim; bufsize_t marker_width; @@ -230,12 +230,12 @@ S_render_node(cmark_renderer *renderer, // we ensure a width of at least 4 so // we get nice transition from single digits // to double - cmark_strbuf_printf(&listmarker, - "%d%s%s", list_number, - list_delim == CMARK_PAREN_DELIM ? - ")" : ".", - list_number < 10 ? " " : " "); - marker_width = listmarker.size; + sprintf(listmarker, + "%d%s%s", list_number, + list_delim == CMARK_PAREN_DELIM ? + ")" : ".", + list_number < 10 ? " " : " "); + marker_width = safe_strlen(listmarker); } if (entering) { if (cmark_node_get_list_type(node->parent) == @@ -243,7 +243,7 @@ S_render_node(cmark_renderer *renderer, LIT("* "); cmark_strbuf_puts(renderer->prefix, " "); } else { - LIT((char *)listmarker.ptr); + LIT(listmarker); for (i = marker_width; i--;) { cmark_strbuf_putc(renderer->prefix, ' '); } @@ -254,7 +254,6 @@ S_render_node(cmark_renderer *renderer, marker_width); CR(); } - cmark_strbuf_free(&listmarker); break; case CMARK_NODE_HEADER: -- cgit 0.0.5-2-1-g0f52 From cdc1730336ee8d335e086cf69ff0f46912261b59 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 15:57:19 -0700 Subject: Avoided another use of strbuf_printf. --- src/commonmark.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 6462db9e57..5964c60193 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -26,6 +26,8 @@ static inline void outc(cmark_renderer *renderer, unsigned char nextc) { bool needs_escaping = false; + char encoded[20]; + needs_escaping = escape != LITERAL && ((escape == NORMAL && @@ -47,7 +49,8 @@ static inline void outc(cmark_renderer *renderer, if (needs_escaping) { if (isspace(c)) { // use percent encoding for spaces - cmark_strbuf_printf(renderer->buffer, "%%%2x", c); + sprintf(encoded, "%%%2x", c); + cmark_strbuf_puts(renderer->buffer, encoded); renderer->column += 3; } else { cmark_render_ascii(renderer, "\\"); -- cgit 0.0.5-2-1-g0f52 From 20ffc3898f02964356e05bb0063904c363e9582d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 16:04:44 -0700 Subject: html renderer - use sprintf to avoid strbuf_printf. --- src/html.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/html.c b/src/html.c index c6bbea6964..7c4548d01a 100644 --- a/src/html.c +++ b/src/html.c @@ -31,12 +31,14 @@ struct render_state { static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) { + char buffer[100]; if (CMARK_OPT_SOURCEPOS & options) { - cmark_strbuf_printf(html, " data-sourcepos=\"%d:%d-%d:%d\"", - cmark_node_get_start_line(node), - cmark_node_get_start_column(node), - cmark_node_get_end_line(node), - cmark_node_get_end_column(node)); + sprintf(buffer, " data-sourcepos=\"%d:%d-%d:%d\"", + cmark_node_get_start_line(node), + cmark_node_get_start_column(node), + cmark_node_get_end_line(node), + cmark_node_get_end_column(node)); + cmark_strbuf_puts(html, buffer); } } @@ -50,6 +52,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, char start_header[] = "\n"); } else { - cmark_strbuf_printf(html, - "
                              \n"); } -- cgit 0.0.5-2-1-g0f52 From b018c01fad3b0c6dd9c180b3ba804baee326d9dd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 16:08:00 -0700 Subject: xml renderer - use sprintf to avoid strbuf_sprintf. --- src/xml.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/xml.c b/src/xml.c index 815afa5a00..2882f50011 100644 --- a/src/xml.c +++ b/src/xml.c @@ -37,6 +37,7 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, bool literal = false; cmark_delim_type delim; bool entering = (ev_type == CMARK_EVENT_ENTER); + char buffer[100]; if (entering) { indent(state); @@ -44,11 +45,12 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { - cmark_strbuf_printf(xml, " sourcepos=\"%d:%d-%d:%d\"", - node->start_line, - node->start_column, - node->end_line, - node->end_column); + sprintf(buffer, " sourcepos=\"%d:%d-%d:%d\"", + node->start_line, + node->start_column, + node->end_line, + node->end_column); + cmark_strbuf_puts(xml, buffer); } literal = false; @@ -70,8 +72,9 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, switch (cmark_node_get_list_type(node)) { case CMARK_ORDERED_LIST: cmark_strbuf_puts(xml, " type=\"ordered\""); - cmark_strbuf_printf(xml, " start=\"%d\"", - cmark_node_get_list_start(node)); + sprintf(buffer," start=\"%d\"", + cmark_node_get_list_start(node)); + cmark_strbuf_puts(xml, buffer); delim = cmark_node_get_list_delim(node); if (delim == CMARK_PAREN_DELIM) { cmark_strbuf_puts(xml, @@ -87,13 +90,15 @@ S_render_node(cmark_node *node, cmark_event_type ev_type, default: break; } - cmark_strbuf_printf(xml, " tight=\"%s\"", - (cmark_node_get_list_tight(node) ? - "true" : "false")); + sprintf(buffer, " tight=\"%s\"", + (cmark_node_get_list_tight(node) ? + "true" : "false")); + cmark_strbuf_puts(xml, buffer); break; case CMARK_NODE_HEADER: - cmark_strbuf_printf(xml, " level=\"%d\"", - node->as.header.level); + sprintf(buffer, " level=\"%d\"", + node->as.header.level); + cmark_strbuf_puts(xml, buffer); break; case CMARK_NODE_CODE_BLOCK: if (node->as.code.info.len > 0) { -- cgit 0.0.5-2-1-g0f52 From 2a9409f587eec1acd7a98cbd5dacc31ac3525812 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 16:11:19 -0700 Subject: Removed cmark_strbuf_printf and cmark_strbuf_vprintf. These are no longer needed, and cause complications for MSVC. Also removed HAVE_VA_COPY and HAVE_C99_SNPRINTF feature tests. --- src/CMakeLists.txt | 5 ----- src/buffer.c | 48 ------------------------------------------------ src/buffer.h | 3 --- src/config.h.in | 8 -------- 4 files changed, 64 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b40c1ace29..80ecfc212b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -139,11 +139,6 @@ CHECK_C_SOURCE_COMPILES(" int f(void) __attribute__ (()); int main() { return 0; } " HAVE___ATTRIBUTE__) -CHECK_C_SOURCE_RUNS(" - #include - int main() { return snprintf(NULL, 0, \"123\") == 3 ? 0 : 1; } -" HAVE_C99_SNPRINTF) -CHECK_SYMBOL_EXISTS(va_copy stdarg.h HAVE_VA_COPY) CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in diff --git a/src/buffer.c b/src/buffer.c index e07fba609f..509eb6c08d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -165,54 +165,6 @@ void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) cmark_strbuf_safe_strlen(string)); } -void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap) -{ - size_t expected_size = strlen(format); - if (expected_size <= SIZE_MAX / 2) - expected_size *= 2; - S_strbuf_grow_by(buf, expected_size); - - while (1) { - va_list args; - va_copy(args, ap); - - int len = vsnprintf( - (char *)buf->ptr + buf->size, - buf->asize - buf->size, - format, args - ); -#ifndef HAVE_C99_SNPRINTF - // Assume we're on Windows. - if (len < 0) { - len = _vscprintf(format, args); - } -#endif - - va_end(args); - - if (len < 0) { - perror("vsnprintf in cmark_strbuf_vprintf"); - abort(); - } - - if ((size_t)len < (size_t)(buf->asize - buf->size)) { - buf->size += len; - break; - } - - S_strbuf_grow_by(buf, len); - } -} - -void cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - cmark_strbuf_vprintf(buf, format, ap); - va_end(ap); -} - void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf) { bufsize_t copylen; diff --git a/src/buffer.h b/src/buffer.h index babd051305..36ae0a14d1 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -58,9 +58,6 @@ void cmark_strbuf_sets(cmark_strbuf *buf, const char *string); void cmark_strbuf_putc(cmark_strbuf *buf, int c); void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len); void cmark_strbuf_puts(cmark_strbuf *buf, const char *string); -void cmark_strbuf_printf(cmark_strbuf *buf, const char *format, ...) - CMARK_ATTRIBUTE((format (printf, 2, 3))); -void cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap); void cmark_strbuf_clear(cmark_strbuf *buf); bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos); diff --git a/src/config.h.in b/src/config.h.in index 5960928353..5294bc9b6a 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -15,11 +15,3 @@ #else #define CMARK_ATTRIBUTE(list) #endif - -#cmakedefine HAVE_VA_COPY - -#ifndef HAVE_VA_COPY - #define va_copy(dest, src) ((dest) = (src)) -#endif - -#cmakedefine HAVE_C99_SNPRINTF -- cgit 0.0.5-2-1-g0f52 From d16cc15572d97c5360d66332ea56b9c6ec295f7f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 21:52:24 -0700 Subject: Updated test/spec.txt. --- test/spec.txt | 84 +++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 28 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index bdb9569d2d..3aa4ee47f5 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2,7 +2,7 @@ title: CommonMark Spec author: John MacFarlane version: 0.21 -date: +date: 2015-07-14 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -204,9 +204,13 @@ In the examples, the `→` character is used to represent tabs. Any sequence of [character]s is a valid CommonMark document. -A [character](@character) is a unicode code point. +A [character](@character) is a Unicode code point. Although some +code points (for example, combining accents) do not correspond to +characters in an intuitive sense, all code points count as characters +for purposes of this spec. + This spec does not specify an encoding; it thinks of lines as composed -of characters rather than bytes. A conforming parser may be limited +of [character]s rather than bytes. A conforming parser may be limited to a certain encoding. A [line](@line) is a sequence of zero or more [character]s @@ -227,13 +231,13 @@ form feed (`U+000C`), or carriage return (`U+000D`). [Whitespace](@whitespace) is a sequence of one or more [whitespace character]s. -A [unicode whitespace character](@unicode-whitespace-character) is -any code point in the unicode `Zs` class, or a tab (`U+0009`), +A [Unicode whitespace character](@unicode-whitespace-character) is +any code point in the Unicode `Zs` class, or a tab (`U+0009`), carriage return (`U+000D`), newline (`U+000A`), or form feed (`U+000C`). [Unicode whitespace](@unicode-whitespace) is a sequence of one -or more [unicode whitespace character]s. +or more [Unicode whitespace character]s. A [space](@space) is `U+0020`. @@ -247,7 +251,7 @@ is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, A [punctuation character](@punctuation-character) is an [ASCII punctuation character] or anything in -the unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. +the Unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. ## Tabs @@ -1648,7 +1652,7 @@ followed by one of the strings (case-insensitive) `address`, `footer`, `form`, `frame`, `frameset`, `h1`, `head`, `header`, `hr`, `html`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`, `meta`, `nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`, `pre`, -`section`, `source`, `title`, `summary`, `table`, `tbody`, `td`, +`section`, `source`, `summary`, `table`, `tbody`, `td`, `tfoot`, `th`, `thead`, `title`, `tr`, `track`, `ul`, followed by [whitespace], the end of the line, the string `>`, or the string `/>`.\ @@ -2831,8 +2835,8 @@ foo

                              . Laziness only applies to lines that would have been continuations of -paragraphs had they been prepended with `>`. For example, the -`>` cannot be omitted in the second line of +paragraphs had they been prepended with [block quote marker]s. +For example, the `> ` cannot be omitted in the second line of ``` markdown > foo @@ -2851,7 +2855,7 @@ without changing the meaning:
                              . -Similarly, if we omit the `>` in the second line of +Similarly, if we omit the `> ` in the second line of ``` markdown > - foo @@ -2874,7 +2878,7 @@ then the block quote ends after the first line: . -For the same reason, we can't omit the `>` in front of +For the same reason, we can't omit the `> ` in front of subsequent lines of an indented or fenced code block: . @@ -2901,6 +2905,30 @@ foo
                              . +Note that in the following case, we have a paragraph +continuation line: + +. +> foo + - bar +. +
                              +

                              foo +- bar

                              +
                              +. + +To see why, note that in + +```markdown +> foo +> - bar +``` + +the `- bar` is indented too far to start a list, and can't +be an indented code block because indented code blocks cannot +interrupt paragraphs, so it is a [paragraph continuation line]. + A block quote can be empty: . @@ -4849,17 +4877,17 @@ foo With the goal of making this standard as HTML-agnostic as possible, all valid HTML entities (except in code blocks and code spans) -are recognized as such and converted into unicode characters before +are recognized as such and converted into Unicode characters before they are stored in the AST. This means that renderers to formats other than HTML need not be HTML-entity aware. HTML renderers may either escape -unicode characters as entities or leave them as they are. (However, +Unicode characters as entities or leave them as they are. (However, `"`, `&`, `<`, and `>` must always be rendered as entities.) [Named entities](@name-entities) consist of `&` + any of the valid HTML5 entity names + `;`. The [following document](https://html.spec.whatwg.org/multipage/entities.json) is used as an authoritative source of the valid entity names and their -corresponding codepoints. +corresponding code points. .   & © Æ Ď @@ -4874,9 +4902,9 @@ corresponding codepoints. [Decimal entities](@decimal-entities) consist of `&#` + a string of 1--8 arabic digits + `;`. Again, these entities need to be recognised and transformed into their corresponding -unicode codepoints. Invalid unicode codepoints will be replaced by -the "unknown codepoint" character (`U+FFFD`). For security reasons, -the codepoint `U+0000` will also be replaced by `U+FFFD`. +Unicode code points. Invalid Unicode code points will be replaced by +the "unknown code point" character (`U+FFFD`). For security reasons, +the code point `U+0000` will also be replaced by `U+FFFD`. . # Ӓ Ϡ � � @@ -4887,7 +4915,7 @@ the codepoint `U+0000` will also be replaced by `U+FFFD`. [Hexadecimal entities](@hexadecimal-entities) consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits + `;`. They will also be parsed and turned into the corresponding -unicode codepoints in the AST. +Unicode code points in the AST. . " ആ ಫ @@ -5179,18 +5207,18 @@ followed by a `*` character, or a sequence of one or more `_` characters that is not preceded or followed by a `_` character. A [left-flanking delimiter run](@left-flanking-delimiter-run) is -a [delimiter run] that is (a) not followed by [unicode whitespace], +a [delimiter run] that is (a) not followed by [Unicode whitespace], and (b) either not followed by a [punctuation character], or -preceded by [unicode whitespace] or a [punctuation character]. +preceded by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of -the line count as unicode whitespace. +the line count as Unicode whitespace. A [right-flanking delimiter run](@right-flanking-delimiter-run) is -a [delimiter run] that is (a) not preceded by [unicode whitespace], +a [delimiter run] that is (a) not preceded by [Unicode whitespace], and (b) either not preceded by a [punctuation character], or -followed by [unicode whitespace] or a [punctuation character]. +followed by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of -the line count as unicode whitespace. +the line count as Unicode whitespace. Here are some examples of delimiter runs. @@ -6511,8 +6539,8 @@ just a backslash: URL-escaping should be left alone inside the destination, as all URL-escaped characters are also valid URL characters. HTML entities in -the destination will be parsed into the corresponding unicode -codepoints, as usual, and optionally URL-escaped when written as HTML. +the destination will be parsed into the corresponding Unicode +code points, as usual, and optionally URL-escaped when written as HTML. . [link](foo%20bä) @@ -6721,7 +6749,7 @@ characters inside the square brackets. One label [matches](@matches) another just in case their normalized forms are equal. To normalize a -label, perform the *unicode case fold* and collapse consecutive internal +label, perform the *Unicode case fold* and collapse consecutive internal [whitespace] to a single space. If there are multiple matching reference link definitions, the one that comes first in the document is used. (It is desirable in such cases to emit a warning.) -- cgit 0.0.5-2-1-g0f52 From ef1f7f5870782471d12fdd784a15ea71cb267348 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 22:06:21 -0700 Subject: Updated test/spec.txt. --- test/spec.txt | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 3aa4ee47f5..2a9b061ff8 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1658,9 +1658,9 @@ by [whitespace], the end of the line, the string `>`, or the string `/>`.\ **End condition:** line is followed by a [blank line]. -7. **Start condition:** line begins with an [open tag] -(with any [tag name]) followed only by [whitespace] or the end -of the line.\ +7. **Start condition:** line begins with a complete [open tag] +or [closing tag] (with any [tag name]) followed only by [whitespace] +or the end of the line.\ **End condition:** line is followed by a [blank line]. All types of [HTML blocks] except type 7 may interrupt @@ -1865,6 +1865,22 @@ In type 7 blocks, the [tag name] can be anything: . +. + +*bar* + +*bar* + + +*bar* +. + +*bar* +

                              bar

                              +
                              +*bar* +. + These rules are designed to allow us to work with tags that can function as either block-level or inline-level tags. The `` tag is a nice example. We can surround content with -- cgit 0.0.5-2-1-g0f52 From aca7161e53ec40f6979d024d84afeb36fa911292 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Jul 2015 22:09:00 -0700 Subject: Updated spec.txt. --- test/spec.txt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 2a9b061ff8..984ae52ae4 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1866,18 +1866,10 @@ In type 7 blocks, the [tag name] can be anything: . . - -*bar* - -*bar* - - + *bar* . - -*bar* -

                              bar

                              -
                              + *bar* . -- cgit 0.0.5-2-1-g0f52 From 62cb38bf8a826125fba0034221343aa70dd3d415 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Jul 2015 21:35:54 -0700 Subject: Use clang-format, llvm style, for formatting. * Reformatted all source files. * Added 'format' target to Makefile. * Removed 'astyle' target. * Updated .editorconfig. --- .editorconfig | 4 +- Makefile | 8 +- man/man3/cmark.3 | 32 +- src/bench.h | 16 +- src/blocks.c | 1856 +- src/buffer.c | 460 +- src/buffer.h | 37 +- src/chunk.h | 158 +- src/cmark.c | 26 +- src/cmark.h | 270 +- src/cmark_ctype.c | 59 +- src/commonmark.c | 817 +- src/houdini.h | 36 +- src/houdini_href_e.c | 107 +- src/houdini_html_e.c | 87 +- src/houdini_html_u.c | 243 +- src/html.c | 598 +- src/inlines.c | 1999 +- src/inlines.h | 6 +- src/iterator.c | 222 +- src/iterator.h | 10 +- src/latex.c | 780 +- src/main.c | 343 +- src/man.c | 438 +- src/node.c | 1585 +- src/node.h | 95 +- src/parser.h | 28 +- src/references.c | 212 +- src/references.h | 18 +- src/render.c | 311 +- src/render.h | 63 +- src/scanners.c | 48597 ++++++++++++++++++++++++++++--------------------- src/scanners.h | 3 +- src/utf8.c | 695 +- src/xml.c | 279 +- 35 files changed, 33323 insertions(+), 27175 deletions(-) diff --git a/.editorconfig b/.editorconfig index 915ad661f1..12032e6475 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,8 +9,8 @@ insert_final_newline = true [*.{c,h}] trim_trailing_whitespace = true -indent_style = tab -indent_size = 8 +indent_style = space +indent_size = 2 [Makefile] trim_trailing_whitespace = true diff --git a/Makefile b/Makefile index 6ff8b88f95..cc7d9b26cc 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local CLANG_CHECK?=clang-check -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl clang-check +.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench format update-spec afl clang-check all: cmake_build man/man3/cmark.3 @@ -115,6 +115,7 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re esac re2c --case-insensitive -b -i --no-generation-date -8 \ --encoding-policy substitute -o $@ $< + clang-format -style llvm -i $@ # We include entities.inc in the repository, so normally this # doesn't need to be regenerated: @@ -167,9 +168,8 @@ bench: $(BENCHFILE) done \ } 2>&1 | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py' -astyle: - astyle --style=linux -t -p -r 'src/*.c' --exclude=scanners.c - astyle --style=linux -t -p -r 'src/*.h' --exclude=html_unescape.h +format: + clang-format -style llvm -i src/*.c src/*.h operf: $(CMARK) operf $< < $(BENCHINP) > /dev/null diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 1359fcc776..4c539e811d 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "July 13, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "July 27, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -24,7 +24,7 @@ Node Structure Creating and Destroying Nodes .PP -\fIcmark_node*\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[]) +\fIcmark_node *\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[]) .PP Creates a new node of type \f[I]type\f[]. Note that the node may have @@ -41,34 +41,34 @@ Frees the memory allocated for a node. Tree Traversal .PP -\fIcmark_node*\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[]) +\fIcmark_node *\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[]) .PP Returns the next node in the sequence after \f[I]node\f[], or NULL if there is none. .PP -\fIcmark_node*\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[]) +\fIcmark_node *\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[]) .PP Returns the previous node in the sequence after \f[I]node\f[], or NULL if there is none. .PP -\fIcmark_node*\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[]) +\fIcmark_node *\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[]) .PP Returns the parent of \f[I]node\f[], or NULL if there is none. .PP -\fIcmark_node*\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[]) +\fIcmark_node *\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[]) .PP Returns the first child of \f[I]node\f[], or NULL if \f[I]node\f[] has no children. .PP -\fIcmark_node*\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[]) +\fIcmark_node *\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[]) .PP Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] has no @@ -130,7 +130,7 @@ Nodes must only be modified after an \f[C]EXIT\f[] event, or an \f[C]ENTER\f[] event for leaf nodes. .PP -\fIcmark_iter*\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[]) +\fIcmark_iter *\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[]) .PP Creates a new iterator starting at \f[I]root\f[]. The current node and @@ -152,7 +152,7 @@ Advances to the next node and returns the event type \f[C]CMARK_EVENT_DONE\f[]). .PP -\fIcmark_node*\f[] \fBcmark_iter_get_node\f[](\fIcmark_iter *iter\f[]) +\fIcmark_node *\f[] \fBcmark_iter_get_node\f[](\fIcmark_iter *iter\f[]) .PP Returns the current node. @@ -164,7 +164,7 @@ Returns the current node. Returns the current event type. .PP -\fIcmark_node*\f[] \fBcmark_iter_get_root\f[](\fIcmark_iter *iter\f[]) +\fIcmark_node *\f[] \fBcmark_iter_get_root\f[](\fIcmark_iter *iter\f[]) .PP Returns the root node. @@ -181,7 +181,7 @@ descendant of the root node or the root node itself. Accessors .PP -\fIvoid*\f[] \fBcmark_node_get_user_data\f[](\fIcmark_node *node\f[]) +\fIvoid *\f[] \fBcmark_node_get_user_data\f[](\fIcmark_node *node\f[]) .PP Returns the user data of \f[I]node\f[]. @@ -200,14 +200,14 @@ failure. Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on error. .PP -\fIconst char*\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[]) +\fIconst char *\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[]) .PP Like \f[I]cmark_node_get_type\f[], but returns a string representation of the type, or \f[C]""\f[]. .PP -\fIconst char*\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[]) +\fIconst char *\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[]) .PP Returns the string contents of \f[I]node\f[], or NULL if none. @@ -288,7 +288,7 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. Sets the "tightness" of a list. Returns 1 on success, 0 on failure. .PP -\fIconst char*\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) +\fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) .PP Returns the info string from a fenced code block, or NULL if none. @@ -301,7 +301,7 @@ Sets the info string in a fenced code block, returning 1 on success and 0 on failure. .PP -\fIconst char*\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[]) +\fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[]) .PP Gets the URL of a link or image \f[I]node\f[], or NULL if none. @@ -314,7 +314,7 @@ Sets the URL of a link or image \f[I]node\f[]. Returns 1 on success, 0 on failure. .PP -\fIconst char*\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[]) +\fIconst char *\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[]) .PP Gets the title of a link or image \f[I]node\f[], or NULL if none. diff --git a/src/bench.h b/src/bench.h index bbea2c67b0..744dea3d6f 100644 --- a/src/bench.h +++ b/src/bench.h @@ -9,15 +9,15 @@ float _cmark_start_time; float _cmark_end_time; float _cmark_save_time; -#define start_timer() \ - _cmark_save_time = _cmark_start_time; \ - _cmark_start_time = (float)clock()/CLOCKS_PER_SEC +#define start_timer() \ + _cmark_save_time = _cmark_start_time; \ + _cmark_start_time = (float)clock() / CLOCKS_PER_SEC -#define end_timer(M) \ - _cmark_end_time = (float)clock()/CLOCKS_PER_SEC; \ - fprintf(stderr, "[TIME] (%s:%d) %4.f ns " M "\n", __FILE__, \ - __LINE__, (_cmark_end_time - _cmark_start_time) * 1000000); \ - _cmark_start_time = _cmark_save_time; +#define end_timer(M) \ + _cmark_end_time = (float)clock() / CLOCKS_PER_SEC; \ + fprintf(stderr, "[TIME] (%s:%d) %4.f ns " M "\n", __FILE__, __LINE__, \ + (_cmark_end_time - _cmark_start_time) * 1000000); \ + _cmark_start_time = _cmark_save_time; #else #define start_timer() diff --git a/src/blocks.c b/src/blocks.c index 8828a1146d..c466fc2f84 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -19,1036 +19,998 @@ #define peek_at(i, n) (i)->data[n] -static inline bool -S_is_line_end_char(char c) -{ - return (c == '\n' || c == '\r'); +static inline bool S_is_line_end_char(char c) { + return (c == '\n' || c == '\r'); } -static void -S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, - bool eof); - -static void -S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes); - -static cmark_node* make_block(cmark_node_type tag, int start_line, int start_column) -{ - cmark_node* e; - - e = (cmark_node *)calloc(1, sizeof(*e)); - if(e != NULL) { - e->type = tag; - e->open = true; - e->start_line = start_line; - e->start_column = start_column; - e->end_line = start_line; - cmark_strbuf_init(&e->string_content, 32); - } - - return e; +static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, + size_t len, bool eof); + +static void S_process_line(cmark_parser *parser, const unsigned char *buffer, + bufsize_t bytes); + +static cmark_node *make_block(cmark_node_type tag, int start_line, + int start_column) { + cmark_node *e; + + e = (cmark_node *)calloc(1, sizeof(*e)); + if (e != NULL) { + e->type = tag; + e->open = true; + e->start_line = start_line; + e->start_column = start_column; + e->end_line = start_line; + cmark_strbuf_init(&e->string_content, 32); + } + + return e; } // Create a root document node. -static cmark_node* make_document() -{ - cmark_node *e = make_block(NODE_DOCUMENT, 1, 1); - return e; +static cmark_node *make_document() { + cmark_node *e = make_block(NODE_DOCUMENT, 1, 1); + return e; } -cmark_parser *cmark_parser_new(int options) -{ - cmark_parser *parser = (cmark_parser*)malloc(sizeof(cmark_parser)); - cmark_node *document = make_document(); - cmark_strbuf *line = (cmark_strbuf*)malloc(sizeof(cmark_strbuf)); - cmark_strbuf *buf = (cmark_strbuf*)malloc(sizeof(cmark_strbuf)); - cmark_strbuf_init(line, 256); - cmark_strbuf_init(buf, 0); - - parser->refmap = cmark_reference_map_new(); - parser->root = document; - parser->current = document; - parser->line_number = 0; - parser->offset = 0; - parser->column = 0; - parser->first_nonspace = 0; - parser->first_nonspace_column = 0; - parser->indent = 0; - parser->blank = false; - parser->curline = line; - parser->last_line_length = 0; - parser->linebuf = buf; - parser->options = options; - - return parser; +cmark_parser *cmark_parser_new(int options) { + cmark_parser *parser = (cmark_parser *)malloc(sizeof(cmark_parser)); + cmark_node *document = make_document(); + cmark_strbuf *line = (cmark_strbuf *)malloc(sizeof(cmark_strbuf)); + cmark_strbuf *buf = (cmark_strbuf *)malloc(sizeof(cmark_strbuf)); + cmark_strbuf_init(line, 256); + cmark_strbuf_init(buf, 0); + + parser->refmap = cmark_reference_map_new(); + parser->root = document; + parser->current = document; + parser->line_number = 0; + parser->offset = 0; + parser->column = 0; + parser->first_nonspace = 0; + parser->first_nonspace_column = 0; + parser->indent = 0; + parser->blank = false; + parser->curline = line; + parser->last_line_length = 0; + parser->linebuf = buf; + parser->options = options; + + return parser; } -void cmark_parser_free(cmark_parser *parser) -{ - cmark_strbuf_free(parser->curline); - free(parser->curline); - cmark_strbuf_free(parser->linebuf); - free(parser->linebuf); - cmark_reference_map_free(parser->refmap); - free(parser); +void cmark_parser_free(cmark_parser *parser) { + cmark_strbuf_free(parser->curline); + free(parser->curline); + cmark_strbuf_free(parser->linebuf); + free(parser->linebuf); + cmark_reference_map_free(parser->refmap); + free(parser); } -static cmark_node* -finalize(cmark_parser *parser, cmark_node* b); +static cmark_node *finalize(cmark_parser *parser, cmark_node *b); // Returns true if line has only space characters, else false. -static bool is_blank(cmark_strbuf *s, bufsize_t offset) -{ - while (offset < s->size) { - switch (s->ptr[offset]) { - case '\r': - case '\n': - return true; - case ' ': - offset++; - break; - case '\t': - offset++; - break; - default: - return false; - } - } - - return true; +static bool is_blank(cmark_strbuf *s, bufsize_t offset) { + while (offset < s->size) { + switch (s->ptr[offset]) { + case '\r': + case '\n': + return true; + case ' ': + offset++; + break; + case '\t': + offset++; + break; + default: + return false; + } + } + + return true; } -static inline bool can_contain(cmark_node_type parent_type, cmark_node_type child_type) -{ - return ( parent_type == NODE_DOCUMENT || - parent_type == NODE_BLOCK_QUOTE || - parent_type == NODE_ITEM || - (parent_type == NODE_LIST && child_type == NODE_ITEM) ); +static inline bool can_contain(cmark_node_type parent_type, + cmark_node_type child_type) { + return (parent_type == NODE_DOCUMENT || parent_type == NODE_BLOCK_QUOTE || + parent_type == NODE_ITEM || + (parent_type == NODE_LIST && child_type == NODE_ITEM)); } -static inline bool accepts_lines(cmark_node_type block_type) -{ - return (block_type == NODE_PARAGRAPH || - block_type == NODE_HEADER || - block_type == NODE_CODE_BLOCK); +static inline bool accepts_lines(cmark_node_type block_type) { + return (block_type == NODE_PARAGRAPH || block_type == NODE_HEADER || + block_type == NODE_CODE_BLOCK); } -static void add_line(cmark_node* node, cmark_chunk *ch, bufsize_t offset) -{ - assert(node->open); - cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset); +static void add_line(cmark_node *node, cmark_chunk *ch, bufsize_t offset) { + assert(node->open); + cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset); } -static void remove_trailing_blank_lines(cmark_strbuf *ln) -{ - bufsize_t i; - unsigned char c; - - for (i = ln->size - 1; i >= 0; --i) { - c = ln->ptr[i]; +static void remove_trailing_blank_lines(cmark_strbuf *ln) { + bufsize_t i; + unsigned char c; - if (c != ' ' && c != '\t' && !S_is_line_end_char(c)) - break; - } + for (i = ln->size - 1; i >= 0; --i) { + c = ln->ptr[i]; - if (i < 0) { - cmark_strbuf_clear(ln); - return; - } + if (c != ' ' && c != '\t' && !S_is_line_end_char(c)) + break; + } + if (i < 0) { + cmark_strbuf_clear(ln); + return; + } - for(; i < ln->size; ++i) { - c = ln->ptr[i]; + for (; i < ln->size; ++i) { + c = ln->ptr[i]; - if (!S_is_line_end_char(c)) - continue; + if (!S_is_line_end_char(c)) + continue; - cmark_strbuf_truncate(ln, i); - break; - } + cmark_strbuf_truncate(ln, i); + break; + } } // Check to see if a node ends with a blank line, descending // if needed into lists and sublists. -static bool ends_with_blank_line(cmark_node* node) -{ - cmark_node *cur = node; - while (cur != NULL) { - if (cur->last_line_blank) { - return true; - } - if (cur->type == NODE_LIST || cur->type == NODE_ITEM) { - cur = cur->last_child; - } else { - cur = NULL; - } - } - return false; +static bool ends_with_blank_line(cmark_node *node) { + cmark_node *cur = node; + while (cur != NULL) { + if (cur->last_line_blank) { + return true; + } + if (cur->type == NODE_LIST || cur->type == NODE_ITEM) { + cur = cur->last_child; + } else { + cur = NULL; + } + } + 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 && b->type != 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 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 && b->type != 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; - cmark_node* subitem; - cmark_node* parent; - - parent = b->parent; - - assert(b->open); // shouldn't call finalize on closed blocks - b->open = false; - - if (parser->curline->size == 0) { - // end of input - line number has not been incremented - b->end_line = parser->line_number; - b->end_column = parser->last_line_length; - } else if (b->type == NODE_DOCUMENT || - (b->type == NODE_CODE_BLOCK && b->as.code.fenced) || - (b->type == NODE_HEADER && b->as.header.setext)) { - b->end_line = parser->line_number; - b->end_column = parser->curline->size; - if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n') - b->end_column -= 1; - if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r') - b->end_column -= 1; - } else { - b->end_line = parser->line_number - 1; - b->end_column = parser->last_line_length; - } - - switch (b->type) { - case NODE_PARAGRAPH: - while (cmark_strbuf_at(&b->string_content, 0) == '[' && - (pos = cmark_parse_reference_inline(&b->string_content, parser->refmap))) { - - cmark_strbuf_drop(&b->string_content, pos); - } - if (is_blank(&b->string_content, 0)) { - // remove blank node (former reference def) - cmark_node_free(b); - } - break; - - case NODE_CODE_BLOCK: - if (!b->as.code.fenced) { // indented code - remove_trailing_blank_lines(&b->string_content); - cmark_strbuf_putc(&b->string_content, '\n'); - } else { - - // first line of contents becomes info - for (pos = 0; pos < b->string_content.size; ++pos) { - if (S_is_line_end_char(b->string_content.ptr[pos])) - break; - } - assert(pos < b->string_content.size); - - cmark_strbuf tmp = GH_BUF_INIT; - houdini_unescape_html_f( - &tmp, - b->string_content.ptr, - pos - ); - cmark_strbuf_trim(&tmp); - cmark_strbuf_unescape(&tmp); - b->as.code.info = cmark_chunk_buf_detach(&tmp); - - if (b->string_content.ptr[pos] == '\r') - pos += 1; - if (b->string_content.ptr[pos] == '\n') - pos += 1; - cmark_strbuf_drop(&b->string_content, pos); - } - b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); - break; - - case NODE_HTML: - b->as.literal = cmark_chunk_buf_detach(&b->string_content); - break; - - case NODE_LIST: // determine tight/loose status - b->as.list.tight = true; // tight by default - item = b->first_child; - - while (item) { - // check for non-final non-empty list item ending with blank line: - if (item->last_line_blank && item->next) { - b->as.list.tight = false; - break; - } - // recurse into children of list item, to see if there are - // spaces between them: - subitem = item->first_child; - while (subitem) { - if (ends_with_blank_line(subitem) && - (item->next || subitem->next)) { - b->as.list.tight = false; - break; - } - subitem = subitem->next; - } - if (!(b->as.list.tight)) { - break; - } - item = item->next; - } - - break; - - default: - break; - } - return parent; +static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { + bufsize_t pos; + cmark_node *item; + cmark_node *subitem; + cmark_node *parent; + + parent = b->parent; + + assert(b->open); // shouldn't call finalize on closed blocks + b->open = false; + + if (parser->curline->size == 0) { + // end of input - line number has not been incremented + b->end_line = parser->line_number; + b->end_column = parser->last_line_length; + } else if (b->type == NODE_DOCUMENT || + (b->type == NODE_CODE_BLOCK && b->as.code.fenced) || + (b->type == NODE_HEADER && b->as.header.setext)) { + b->end_line = parser->line_number; + b->end_column = parser->curline->size; + if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n') + b->end_column -= 1; + if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r') + b->end_column -= 1; + } else { + b->end_line = parser->line_number - 1; + b->end_column = parser->last_line_length; + } + + switch (b->type) { + case NODE_PARAGRAPH: + while (cmark_strbuf_at(&b->string_content, 0) == '[' && + (pos = cmark_parse_reference_inline(&b->string_content, + parser->refmap))) { + + cmark_strbuf_drop(&b->string_content, pos); + } + if (is_blank(&b->string_content, 0)) { + // remove blank node (former reference def) + cmark_node_free(b); + } + break; + + case NODE_CODE_BLOCK: + if (!b->as.code.fenced) { // indented code + remove_trailing_blank_lines(&b->string_content); + cmark_strbuf_putc(&b->string_content, '\n'); + } else { + + // first line of contents becomes info + for (pos = 0; pos < b->string_content.size; ++pos) { + if (S_is_line_end_char(b->string_content.ptr[pos])) + break; + } + assert(pos < b->string_content.size); + + cmark_strbuf tmp = GH_BUF_INIT; + houdini_unescape_html_f(&tmp, b->string_content.ptr, pos); + cmark_strbuf_trim(&tmp); + cmark_strbuf_unescape(&tmp); + b->as.code.info = cmark_chunk_buf_detach(&tmp); + + if (b->string_content.ptr[pos] == '\r') + pos += 1; + if (b->string_content.ptr[pos] == '\n') + pos += 1; + cmark_strbuf_drop(&b->string_content, pos); + } + b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); + break; + + case NODE_HTML: + b->as.literal = cmark_chunk_buf_detach(&b->string_content); + break; + + case NODE_LIST: // determine tight/loose status + b->as.list.tight = true; // tight by default + item = b->first_child; + + while (item) { + // check for non-final non-empty list item ending with blank line: + if (item->last_line_blank && item->next) { + b->as.list.tight = false; + break; + } + // recurse into children of list item, to see if there are + // spaces between them: + subitem = item->first_child; + while (subitem) { + if (ends_with_blank_line(subitem) && (item->next || subitem->next)) { + b->as.list.tight = false; + break; + } + subitem = subitem->next; + } + if (!(b->as.list.tight)) { + break; + } + item = item->next; + } + + break; + + default: + break; + } + return parent; } // Add a node as child of another. Return pointer to child. -static cmark_node* add_child(cmark_parser *parser, cmark_node* parent, - cmark_node_type block_type, int start_column) -{ - assert(parent); - - // if 'parent' isn't the kind of node that can accept this child, - // then back up til we hit a node that can. - while (!can_contain(parent->type, block_type)) { - parent = finalize(parser, parent); - } - - cmark_node* child = make_block(block_type, parser->line_number, start_column); - child->parent = parent; - - if (parent->last_child) { - parent->last_child->next = child; - child->prev = parent->last_child; - } else { - parent->first_child = child; - child->prev = NULL; - } - parent->last_child = child; - return child; +static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, + cmark_node_type block_type, int start_column) { + assert(parent); + + // if 'parent' isn't the kind of node that can accept this child, + // then back up til we hit a node that can. + while (!can_contain(parent->type, block_type)) { + parent = finalize(parser, parent); + } + + cmark_node *child = make_block(block_type, parser->line_number, start_column); + child->parent = parent; + + if (parent->last_child) { + parent->last_child->next = child; + child->prev = parent->last_child; + } else { + parent->first_child = child; + child->prev = NULL; + } + parent->last_child = child; + return child; } - // Walk through node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_node* root, cmark_reference_map *refmap, int options) -{ - cmark_iter *iter = cmark_iter_new(root); - cmark_node *cur; - cmark_event_type ev_type; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_ENTER) { - if (cur->type == NODE_PARAGRAPH || - cur->type == NODE_HEADER) { - cmark_parse_inlines(cur, refmap, options); - } - } - } - - cmark_iter_free(iter); +static void process_inlines(cmark_node *root, cmark_reference_map *refmap, + int options) { + cmark_iter *iter = cmark_iter_new(root); + cmark_node *cur; + cmark_event_type ev_type; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (ev_type == CMARK_EVENT_ENTER) { + if (cur->type == NODE_PARAGRAPH || cur->type == NODE_HEADER) { + cmark_parse_inlines(cur, refmap, options); + } + } + } + + cmark_iter_free(iter); } // Attempts to parse a list item marker (bullet or enumerated). // On success, returns length of the marker, and populates // data with the details. On failure, returns 0. -static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, cmark_list **dataptr) -{ - unsigned char c; - bufsize_t startpos; - cmark_list *data; - - startpos = pos; - c = peek_at(input, pos); - - if (c == '*' || c == '-' || c == '+') { - pos++; - if (!cmark_isspace(peek_at(input, pos))) { - return 0; - } - data = (cmark_list *)calloc(1, sizeof(*data)); - if(data == NULL) { - return 0; - } else { - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_BULLET_LIST; - data->bullet_char = c; - data->start = 1; - data->delimiter = CMARK_PERIOD_DELIM; - data->tight = false; - } - } else if (cmark_isdigit(c)) { - int start = 0; - int digits = 0; - - do { - start = (10 * start) + (peek_at(input, pos) - '0'); - pos++; - digits++; - // We limit to 9 digits to avoid overflow, - // assuming max int is 2^31 - 1 - // This also seems to be the limit for 'start' in some browsers. - } while (digits < 9 && cmark_isdigit(peek_at(input, pos))); - - c = peek_at(input, pos); - if (c == '.' || c == ')') { - pos++; - if (!cmark_isspace(peek_at(input, pos))) { - return 0; - } - data = (cmark_list *)calloc(1, sizeof(*data)); - if(data == NULL) { - return 0; - } else { - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_ORDERED_LIST; - data->bullet_char = 0; - data->start = start; - data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); - data->tight = false; - } - } else { - return 0; - } - - } else { - return 0; - } - - *dataptr = data; - return (pos - startpos); +static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, + cmark_list **dataptr) { + unsigned char c; + bufsize_t startpos; + cmark_list *data; + + startpos = pos; + c = peek_at(input, pos); + + if (c == '*' || c == '-' || c == '+') { + pos++; + if (!cmark_isspace(peek_at(input, pos))) { + return 0; + } + data = (cmark_list *)calloc(1, sizeof(*data)); + if (data == NULL) { + return 0; + } else { + data->marker_offset = 0; // will be adjusted later + data->list_type = CMARK_BULLET_LIST; + data->bullet_char = c; + data->start = 1; + data->delimiter = CMARK_PERIOD_DELIM; + data->tight = false; + } + } else if (cmark_isdigit(c)) { + int start = 0; + int digits = 0; + + do { + start = (10 * start) + (peek_at(input, pos) - '0'); + pos++; + digits++; + // We limit to 9 digits to avoid overflow, + // assuming max int is 2^31 - 1 + // This also seems to be the limit for 'start' in some browsers. + } while (digits < 9 && cmark_isdigit(peek_at(input, pos))); + + c = peek_at(input, pos); + if (c == '.' || c == ')') { + pos++; + if (!cmark_isspace(peek_at(input, pos))) { + return 0; + } + data = (cmark_list *)calloc(1, sizeof(*data)); + if (data == NULL) { + return 0; + } else { + data->marker_offset = 0; // will be adjusted later + data->list_type = CMARK_ORDERED_LIST; + data->bullet_char = 0; + data->start = start; + data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); + data->tight = false; + } + } else { + return 0; + } + + } else { + return 0; + } + + *dataptr = data; + return (pos - startpos); } // Return 1 if list item belongs in list, else 0. -static int lists_match(cmark_list *list_data, cmark_list *item_data) -{ - return (list_data->list_type == item_data->list_type && - list_data->delimiter == item_data->delimiter && - // list_data->marker_offset == item_data.marker_offset && - list_data->bullet_char == item_data->bullet_char); +static int lists_match(cmark_list *list_data, cmark_list *item_data) { + return (list_data->list_type == item_data->list_type && + list_data->delimiter == item_data->delimiter && + // list_data->marker_offset == item_data.marker_offset && + list_data->bullet_char == item_data->bullet_char); } -static cmark_node *finalize_document(cmark_parser *parser) -{ - while (parser->current != parser->root) { - parser->current = finalize(parser, parser->current); - } +static cmark_node *finalize_document(cmark_parser *parser) { + while (parser->current != parser->root) { + parser->current = finalize(parser, parser->current); + } - finalize(parser, parser->root); - process_inlines(parser->root, parser->refmap, parser->options); + finalize(parser, parser->root); + process_inlines(parser->root, parser->refmap, parser->options); - return parser->root; + return parser->root; } -cmark_node *cmark_parse_file(FILE *f, int options) -{ - unsigned char buffer[4096]; - cmark_parser *parser = cmark_parser_new(options); - size_t bytes; - cmark_node *document; - - while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) { - bool eof = bytes < sizeof(buffer); - S_parser_feed(parser, buffer, bytes, eof); - if (eof) { - break; - } - } - - document = cmark_parser_finish(parser); - cmark_parser_free(parser); - return document; +cmark_node *cmark_parse_file(FILE *f, int options) { + unsigned char buffer[4096]; + cmark_parser *parser = cmark_parser_new(options); + size_t bytes; + cmark_node *document; + + while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) { + bool eof = bytes < sizeof(buffer); + S_parser_feed(parser, buffer, bytes, eof); + if (eof) { + break; + } + } + + document = cmark_parser_finish(parser); + cmark_parser_free(parser); + return document; } -cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) -{ - cmark_parser *parser = cmark_parser_new(options); - cmark_node *document; +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) { + cmark_parser *parser = cmark_parser_new(options); + cmark_node *document; - S_parser_feed(parser, (const unsigned char *)buffer, len, true); + S_parser_feed(parser, (const unsigned char *)buffer, len, true); - document = cmark_parser_finish(parser); - cmark_parser_free(parser); - return document; + document = cmark_parser_finish(parser); + cmark_parser_free(parser); + return document; } -void -cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) -{ - S_parser_feed(parser, (const unsigned char *)buffer, len, false); +void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) { + S_parser_feed(parser, (const unsigned char *)buffer, len, false); } -static void -S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, - bool eof) -{ - const unsigned char *end = buffer + len; - static const uint8_t repl[] = {239, 191, 189}; - - while (buffer < end) { - const unsigned char *eol; - bufsize_t chunk_len; - bool process = false; - for (eol = buffer; eol < end; ++eol) { - if (S_is_line_end_char(*eol)) { - if (eol < end && *eol == '\r') - eol++; - if (eol < end && *eol == '\n') - eol++; - process = true; - break; - } - if (*eol == '\0' && eol < end) { - break; - } - } - if (eol >= end && eof) { - process = true; - } - - chunk_len = cmark_strbuf_check_bufsize(eol - buffer); - if (process) { - if (parser->linebuf->size > 0) { - cmark_strbuf_put(parser->linebuf, buffer, chunk_len); - S_process_line(parser, parser->linebuf->ptr, - parser->linebuf->size); - cmark_strbuf_clear(parser->linebuf); - } else { - S_process_line(parser, buffer, chunk_len); - } - } else { - if (eol < end && *eol == '\0') { - // omit NULL byte - cmark_strbuf_put(parser->linebuf, buffer, chunk_len); - // add replacement character - cmark_strbuf_put(parser->linebuf, repl, 3); - chunk_len += 1; // so we advance the buffer past NULL - } else { - cmark_strbuf_put(parser->linebuf, buffer, chunk_len); - } - } - - buffer += chunk_len; - } +static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, + size_t len, bool eof) { + const unsigned char *end = buffer + len; + static const uint8_t repl[] = {239, 191, 189}; + + while (buffer < end) { + const unsigned char *eol; + bufsize_t chunk_len; + bool process = false; + for (eol = buffer; eol < end; ++eol) { + if (S_is_line_end_char(*eol)) { + if (eol < end && *eol == '\r') + eol++; + if (eol < end && *eol == '\n') + eol++; + process = true; + break; + } + if (*eol == '\0' && eol < end) { + break; + } + } + if (eol >= end && eof) { + process = true; + } + + chunk_len = cmark_strbuf_check_bufsize(eol - buffer); + if (process) { + if (parser->linebuf->size > 0) { + cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size); + cmark_strbuf_clear(parser->linebuf); + } else { + S_process_line(parser, buffer, chunk_len); + } + } else { + if (eol < end && *eol == '\0') { + // omit NULL byte + cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + // add replacement character + cmark_strbuf_put(parser->linebuf, repl, 3); + chunk_len += 1; // so we advance the buffer past NULL + } else { + cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + } + } + + buffer += chunk_len; + } } -static void chop_trailing_hashtags(cmark_chunk *ch) -{ - bufsize_t n, orig_n; +static void chop_trailing_hashtags(cmark_chunk *ch) { + bufsize_t n, orig_n; - cmark_chunk_rtrim(ch); - orig_n = n = ch->len - 1; + cmark_chunk_rtrim(ch); + orig_n = n = ch->len - 1; - // if string ends in space followed by #s, remove these: - while (n >= 0 && peek_at(ch, n) == '#') - n--; + // if string ends in space followed by #s, remove these: + while (n >= 0 && peek_at(ch, n) == '#') + n--; - // Check for a space before the final #s: - if (n != orig_n && n >= 0 && - (peek_at(ch, n) == ' ' || peek_at(ch, n) == '\t')) { - ch->len = n; - cmark_chunk_rtrim(ch); - } + // Check for a space before the final #s: + if (n != orig_n && n >= 0 && + (peek_at(ch, n) == ' ' || peek_at(ch, n) == '\t')) { + ch->len = n; + cmark_chunk_rtrim(ch); + } } -static void -S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) -{ - char c; - int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - - parser->first_nonspace = parser->offset; - parser->first_nonspace_column = parser->column; - while ((c = peek_at(input, parser->first_nonspace))) { - if (c == ' ') { - parser->first_nonspace += 1; - parser->first_nonspace_column += 1; - chars_to_tab = chars_to_tab - 1; - if (chars_to_tab == 0) { - chars_to_tab = TAB_STOP; - } - } else if (c == '\t') { - parser->first_nonspace += 1; - parser->first_nonspace_column += chars_to_tab; - chars_to_tab = TAB_STOP; - } else { - break; - } - } - - parser->indent = parser->first_nonspace_column - parser->column; - parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); +static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { + char c; + int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); + + parser->first_nonspace = parser->offset; + parser->first_nonspace_column = parser->column; + while ((c = peek_at(input, parser->first_nonspace))) { + if (c == ' ') { + parser->first_nonspace += 1; + parser->first_nonspace_column += 1; + chars_to_tab = chars_to_tab - 1; + if (chars_to_tab == 0) { + chars_to_tab = TAB_STOP; + } + } else if (c == '\t') { + parser->first_nonspace += 1; + parser->first_nonspace_column += chars_to_tab; + chars_to_tab = TAB_STOP; + } else { + break; + } + } + + parser->indent = parser->first_nonspace_column - parser->column; + parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); } -static void -S_advance_offset(cmark_parser *parser, cmark_chunk *input, bufsize_t count, bool columns) -{ - char c; - int chars_to_tab; - while (count > 0 && (c = peek_at(input, parser->offset))) { - if (c == '\t') { - chars_to_tab = 4 - (parser->column % TAB_STOP); - parser->column += chars_to_tab; - parser->offset += 1; - count -= (columns ? chars_to_tab : 1); - } else { - parser->offset += 1; - parser->column += 1; // assume ascii; block starts are ascii - count -= 1; - } - } +static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, + bufsize_t count, bool columns) { + char c; + int chars_to_tab; + while (count > 0 && (c = peek_at(input, parser->offset))) { + if (c == '\t') { + chars_to_tab = 4 - (parser->column % TAB_STOP); + parser->column += chars_to_tab; + parser->offset += 1; + count -= (columns ? chars_to_tab : 1); + } else { + parser->offset += 1; + parser->column += 1; // assume ascii; block starts are ascii + count -= 1; + } + } } - -static void -S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t bytes) -{ - cmark_node* last_matched_container; - bufsize_t matched = 0; - int lev = 0; - int i; - cmark_list *data = NULL; - bool all_matched = true; - cmark_node* container; - bool indented; - cmark_chunk input; - bool maybe_lazy; - - if (parser->options & CMARK_OPT_VALIDATE_UTF8) { - utf8proc_check(parser->curline, buffer, bytes); - } else { - cmark_strbuf_put(parser->curline, buffer, bytes); - } - parser->offset = 0; - parser->column = 0; - parser->blank = false; - - input.data = parser->curline->ptr; - input.len = parser->curline->size; - - // container starts at the document root. - container = parser->root; - - parser->line_number++; - - // for each containing node, try to parse the associated line start. - // bail out on failure: container will point to the last matching node. - - while (container->last_child && container->last_child->open) { - container = container->last_child; - - S_find_first_nonspace(parser, &input); - - if (container->type == NODE_BLOCK_QUOTE) { - matched = parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; - if (matched) { - S_advance_offset(parser, &input, parser->indent + 1, true); - if (peek_at(&input, parser->offset) == ' ') - parser->offset++; - } else { - all_matched = false; - } - - } else if (container->type == NODE_ITEM) { - if (parser->indent >= container->as.list.marker_offset + - container->as.list.padding) { - S_advance_offset(parser, &input, - container->as.list.marker_offset + - container->as.list.padding, true); - } else if (parser->blank) { - S_advance_offset(parser, &input, - parser->first_nonspace - parser->offset, false); - } else { - all_matched = false; - } - - } else if (container->type == NODE_CODE_BLOCK) { - - if (!container->as.code.fenced) { // indented - if (parser->indent >= CODE_INDENT) { - S_advance_offset(parser, &input, CODE_INDENT, true); - } else if (parser->blank) { - S_advance_offset(parser, &input, - parser->first_nonspace - parser->offset, - false); - } else { - all_matched = false; - } - } else { // fenced - matched = 0; - if (parser->indent <= 3 && - (peek_at(&input, parser->first_nonspace) == - container->as.code.fence_char)) { - matched = scan_close_code_fence(&input, - parser->first_nonspace); - } - if (matched >= container->as.code.fence_length) { - // closing fence - and since we're at - // the end of a line, we can return: - all_matched = false; - S_advance_offset(parser, &input, matched, false); - parser->current = finalize(parser, container); - goto finished; - } else { - // skip opt. spaces of fence parser->offset - i = container->as.code.fence_offset; - while (i > 0 && - peek_at(&input, parser->offset) == ' ') { - S_advance_offset(parser, &input, 1, false); - i--; - } - } - } - } else if (container->type == NODE_HEADER) { - - // a header can never contain more than one line - all_matched = false; - - } else if (container->type == NODE_HTML) { - - switch (container->as.html_block_type) { - case 1: - case 2: - case 3: - case 4: - case 5: - // these types of blocks can accept blanks - break; - case 6: - case 7: - if (parser->blank) { - all_matched = false; - } - break; - default: - fprintf(stderr, - "Error (%s:%d): Unknown HTML block type %d\n", - __FILE__, __LINE__, - container->as.html_block_type); - exit(1); - } - - } else if (container->type == NODE_PARAGRAPH) { - - if (parser->blank) { - all_matched = false; - } - - } - - if (!all_matched) { - container = container->parent; // back up to last matching node - break; - } - } - - last_matched_container = container; - - // check to see if we've hit 2nd blank line, break out of list: - if (parser->blank && container->last_line_blank) { - break_out_of_lists(parser, &container); - } - - maybe_lazy = parser->current->type == NODE_PARAGRAPH; - // try new container starts: - while (container->type != NODE_CODE_BLOCK && - container->type != NODE_HTML) { - - S_find_first_nonspace(parser, &input); - indented = parser->indent >= CODE_INDENT; - - if (!indented && peek_at(&input, parser->first_nonspace) == '>') { - - S_advance_offset(parser, &input, parser->first_nonspace + 1 - parser->offset, false); - // optional following character - if (peek_at(&input, parser->offset) == ' ') - S_advance_offset(parser, &input, 1, false); - container = add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1); - - } else if (!indented && (matched = scan_atx_header_start(&input, parser->first_nonspace))) { - - S_advance_offset(parser, &input, - parser->first_nonspace + matched - parser->offset, false); - container = add_child(parser, container, NODE_HEADER, parser->offset + 1); - - bufsize_t hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); - int level = 0; - - while (peek_at(&input, hashpos) == '#') { - level++; - hashpos++; - } - container->as.header.level = level; - container->as.header.setext = false; - - } else if (!indented && (matched = scan_open_code_fence(&input, parser->first_nonspace))) { - - container = add_child(parser, container, NODE_CODE_BLOCK, parser->first_nonspace + 1); - container->as.code.fenced = true; - container->as.code.fence_char = peek_at(&input, parser->first_nonspace); - container->as.code.fence_length = matched; - container->as.code.fence_offset = parser->first_nonspace - parser->offset; - container->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); - - } else if (!indented && - ((matched = scan_html_block_start(&input, parser->first_nonspace)) || - (container->type != NODE_PARAGRAPH && - (matched = scan_html_block_start_7(&input, parser->first_nonspace))))) { - - container = add_child(parser, container, NODE_HTML, parser->first_nonspace + 1); - container->as.html_block_type = matched; - // note, we don't adjust parser->offset because the tag is part of the text - - } else if (!indented && - container->type == NODE_PARAGRAPH && - (lev = scan_setext_header_line(&input, parser->first_nonspace)) && - // check that there is only one line in the paragraph: - (cmark_strbuf_strrchr(&container->string_content, '\n', - cmark_strbuf_len(&container->string_content) - 2) < 0)) { - - container->type = NODE_HEADER; - container->as.header.level = lev; - container->as.header.setext = true; - S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); - - } else if (!indented && - !(container->type == NODE_PARAGRAPH && - !all_matched) && - (matched = scan_hrule(&input, parser->first_nonspace))) { - - // it's only now that we know the line is not part of a setext header: - container = add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); - container = finalize(parser, container); - S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); - - } else if ((matched = parse_list_marker(&input, parser->first_nonspace, &data)) && - (!indented || container->type == NODE_LIST)) { - // Note that we can have new list items starting with >= 4 - // spaces indent, as long as the list container is still open. - - // compute padding: - S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); - i = 0; - while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') { - i++; - } - // i = number of spaces after marker, up to 5 - if (i >= 5 || i < 1 || - S_is_line_end_char(peek_at(&input, parser->offset))) { - data->padding = matched + 1; - if (i > 0) { - S_advance_offset(parser, &input, 1, false); - } - } else { - data->padding = matched + i; - S_advance_offset(parser, &input, i, true); - } - - // check container; if it's a list, see if this list item - // can continue the list; otherwise, create a list container. - - data->marker_offset = parser->indent; - - if (container->type != NODE_LIST || - !lists_match(&container->as.list, data)) { - container = add_child(parser, container, NODE_LIST, - parser->first_nonspace + 1); - - memcpy(&container->as.list, data, sizeof(*data)); - } - - // add the list item - container = add_child(parser, container, NODE_ITEM, - parser->first_nonspace + 1); - /* TODO: static */ - memcpy(&container->as.list, data, sizeof(*data)); - free(data); - - } else if (indented && !maybe_lazy && !parser->blank) { - S_advance_offset(parser, &input, CODE_INDENT, true); - container = add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1); - container->as.code.fenced = false; - container->as.code.fence_char = 0; - container->as.code.fence_length = 0; - container->as.code.fence_offset = 0; - container->as.code.info = cmark_chunk_literal(""); - - } else { - break; - } - - if (accepts_lines(container->type)) { - // if it's a line container, it can't contain other containers - break; - } - maybe_lazy = false; - } - - // what remains at parser->offset is a text line. add the text to the - // appropriate container. - - S_find_first_nonspace(parser, &input); - - if (parser->blank && container->last_child) { - container->last_child->last_line_blank = true; - } - - // block quote lines are never blank as they start with > - // and we don't count blanks in fenced code for purposes of tight/loose - // lists or breaking out of lists. we also don't set last_line_blank - // on an empty list item. - container->last_line_blank = (parser->blank && - container->type != NODE_BLOCK_QUOTE && - container->type != NODE_HEADER && - !(container->type == NODE_CODE_BLOCK && - container->as.code.fenced) && - !(container->type == NODE_ITEM && - container->first_child == NULL && - container->start_line == parser->line_number)); - - cmark_node *cont = container; - while (cont->parent) { - cont->parent->last_line_blank = false; - cont = cont->parent; - } - - if (parser->current != last_matched_container && - container == last_matched_container && - !parser->blank && - parser->current->type == NODE_PARAGRAPH && - cmark_strbuf_len(&parser->current->string_content) > 0) { - - add_line(parser->current, &input, parser->offset); - - } else { // not a lazy continuation - - // finalize any blocks that were not matched and set cur to container: - while (parser->current != last_matched_container) { - parser->current = finalize(parser, parser->current); - assert(parser->current != NULL); - } - - if (container->type == NODE_CODE_BLOCK) { - - add_line(container, &input, parser->offset); - - } else if (container->type == NODE_HTML) { - - add_line(container, &input, parser->offset); - - int matches_end_condition; - switch (container->as.html_block_type) { - case 1: - // , , - matches_end_condition = - scan_html_block_end_1(&input, parser->first_nonspace); - break; - case 2: - // --> - matches_end_condition = - scan_html_block_end_2(&input, parser->first_nonspace); - break; - case 3: - // ?> - matches_end_condition = - scan_html_block_end_3(&input, parser->first_nonspace); - break; - case 4: - // > - matches_end_condition = - scan_html_block_end_4(&input, parser->first_nonspace); - break; - case 5: - // ]]> - matches_end_condition = - scan_html_block_end_5(&input, parser->first_nonspace); - break; - default: - matches_end_condition = 0; - break; - } - - if (matches_end_condition) { - container = finalize(parser, container); - assert(parser->current != NULL); - } - - } else if (parser->blank) { - - // ??? do nothing - - } else if (accepts_lines(container->type)) { - - if (container->type == NODE_HEADER && - container->as.header.setext == false) { - chop_trailing_hashtags(&input); - } - add_line(container, &input, parser->first_nonspace); - - } else { - // create paragraph container for line - container = add_child(parser, container, NODE_PARAGRAPH, parser->first_nonspace + 1); - add_line(container, &input, parser->first_nonspace); - - } - - parser->current = container; - } +static void S_process_line(cmark_parser *parser, const unsigned char *buffer, + bufsize_t bytes) { + cmark_node *last_matched_container; + bufsize_t matched = 0; + int lev = 0; + int i; + cmark_list *data = NULL; + bool all_matched = true; + cmark_node *container; + bool indented; + cmark_chunk input; + bool maybe_lazy; + + if (parser->options & CMARK_OPT_VALIDATE_UTF8) { + utf8proc_check(parser->curline, buffer, bytes); + } else { + cmark_strbuf_put(parser->curline, buffer, bytes); + } + parser->offset = 0; + parser->column = 0; + parser->blank = false; + + input.data = parser->curline->ptr; + input.len = parser->curline->size; + + // container starts at the document root. + container = parser->root; + + parser->line_number++; + + // for each containing node, try to parse the associated line start. + // bail out on failure: container will point to the last matching node. + + while (container->last_child && container->last_child->open) { + container = container->last_child; + + S_find_first_nonspace(parser, &input); + + if (container->type == NODE_BLOCK_QUOTE) { + matched = + parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; + if (matched) { + S_advance_offset(parser, &input, parser->indent + 1, true); + if (peek_at(&input, parser->offset) == ' ') + parser->offset++; + } else { + all_matched = false; + } + + } else if (container->type == NODE_ITEM) { + if (parser->indent >= + container->as.list.marker_offset + container->as.list.padding) { + S_advance_offset(parser, &input, container->as.list.marker_offset + + container->as.list.padding, + true); + } else if (parser->blank) { + S_advance_offset(parser, &input, + parser->first_nonspace - parser->offset, false); + } else { + all_matched = false; + } + + } else if (container->type == NODE_CODE_BLOCK) { + + if (!container->as.code.fenced) { // indented + if (parser->indent >= CODE_INDENT) { + S_advance_offset(parser, &input, CODE_INDENT, true); + } else if (parser->blank) { + S_advance_offset(parser, &input, + parser->first_nonspace - parser->offset, false); + } else { + all_matched = false; + } + } else { // fenced + matched = 0; + if (parser->indent <= 3 && (peek_at(&input, parser->first_nonspace) == + container->as.code.fence_char)) { + matched = scan_close_code_fence(&input, parser->first_nonspace); + } + if (matched >= container->as.code.fence_length) { + // closing fence - and since we're at + // the end of a line, we can return: + all_matched = false; + S_advance_offset(parser, &input, matched, false); + parser->current = finalize(parser, container); + goto finished; + } else { + // skip opt. spaces of fence parser->offset + i = container->as.code.fence_offset; + while (i > 0 && peek_at(&input, parser->offset) == ' ') { + S_advance_offset(parser, &input, 1, false); + i--; + } + } + } + } else if (container->type == NODE_HEADER) { + + // a header can never contain more than one line + all_matched = false; + + } else if (container->type == NODE_HTML) { + + switch (container->as.html_block_type) { + case 1: + case 2: + case 3: + case 4: + case 5: + // these types of blocks can accept blanks + break; + case 6: + case 7: + if (parser->blank) { + all_matched = false; + } + break; + default: + fprintf(stderr, "Error (%s:%d): Unknown HTML block type %d\n", __FILE__, + __LINE__, container->as.html_block_type); + exit(1); + } + + } else if (container->type == NODE_PARAGRAPH) { + + if (parser->blank) { + all_matched = false; + } + } + + if (!all_matched) { + container = container->parent; // back up to last matching node + break; + } + } + + last_matched_container = container; + + // check to see if we've hit 2nd blank line, break out of list: + if (parser->blank && container->last_line_blank) { + break_out_of_lists(parser, &container); + } + + maybe_lazy = parser->current->type == NODE_PARAGRAPH; + // try new container starts: + while (container->type != NODE_CODE_BLOCK && container->type != NODE_HTML) { + + S_find_first_nonspace(parser, &input); + indented = parser->indent >= CODE_INDENT; + + if (!indented && peek_at(&input, parser->first_nonspace) == '>') { + + S_advance_offset(parser, &input, + parser->first_nonspace + 1 - parser->offset, false); + // optional following character + if (peek_at(&input, parser->offset) == ' ') + S_advance_offset(parser, &input, 1, false); + container = + add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1); + + } else if (!indented && (matched = scan_atx_header_start( + &input, parser->first_nonspace))) { + + S_advance_offset(parser, &input, + parser->first_nonspace + matched - parser->offset, + false); + container = add_child(parser, container, NODE_HEADER, parser->offset + 1); + + bufsize_t hashpos = + cmark_chunk_strchr(&input, '#', parser->first_nonspace); + int level = 0; + + while (peek_at(&input, hashpos) == '#') { + level++; + hashpos++; + } + container->as.header.level = level; + container->as.header.setext = false; + + } else if (!indented && (matched = scan_open_code_fence( + &input, parser->first_nonspace))) { + + container = add_child(parser, container, NODE_CODE_BLOCK, + parser->first_nonspace + 1); + container->as.code.fenced = true; + container->as.code.fence_char = peek_at(&input, parser->first_nonspace); + container->as.code.fence_length = matched; + container->as.code.fence_offset = parser->first_nonspace - parser->offset; + container->as.code.info = cmark_chunk_literal(""); + S_advance_offset(parser, &input, + parser->first_nonspace + matched - parser->offset, + false); + + } else if (!indented && ((matched = scan_html_block_start( + &input, parser->first_nonspace)) || + (container->type != NODE_PARAGRAPH && + (matched = scan_html_block_start_7( + &input, parser->first_nonspace))))) { + + container = + add_child(parser, container, NODE_HTML, parser->first_nonspace + 1); + container->as.html_block_type = matched; + // note, we don't adjust parser->offset because the tag is part of the + // text + + } else if (!indented && container->type == NODE_PARAGRAPH && + (lev = + scan_setext_header_line(&input, parser->first_nonspace)) && + // check that there is only one line in the paragraph: + (cmark_strbuf_strrchr( + &container->string_content, '\n', + cmark_strbuf_len(&container->string_content) - 2) < 0)) { + + container->type = NODE_HEADER; + container->as.header.level = lev; + container->as.header.setext = true; + S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); + + } else if (!indented && + !(container->type == NODE_PARAGRAPH && !all_matched) && + (matched = scan_hrule(&input, parser->first_nonspace))) { + + // it's only now that we know the line is not part of a setext header: + container = + add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); + container = finalize(parser, container); + S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); + + } else if ((matched = + parse_list_marker(&input, parser->first_nonspace, &data)) && + (!indented || container->type == NODE_LIST)) { + // Note that we can have new list items starting with >= 4 + // spaces indent, as long as the list container is still open. + + // compute padding: + S_advance_offset(parser, &input, + parser->first_nonspace + matched - parser->offset, + false); + i = 0; + while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') { + i++; + } + // i = number of spaces after marker, up to 5 + if (i >= 5 || i < 1 || + S_is_line_end_char(peek_at(&input, parser->offset))) { + data->padding = matched + 1; + if (i > 0) { + S_advance_offset(parser, &input, 1, false); + } + } else { + data->padding = matched + i; + S_advance_offset(parser, &input, i, true); + } + + // check container; if it's a list, see if this list item + // can continue the list; otherwise, create a list container. + + data->marker_offset = parser->indent; + + if (container->type != NODE_LIST || + !lists_match(&container->as.list, data)) { + container = + add_child(parser, container, NODE_LIST, parser->first_nonspace + 1); + + memcpy(&container->as.list, data, sizeof(*data)); + } + + // add the list item + container = + add_child(parser, container, NODE_ITEM, parser->first_nonspace + 1); + /* TODO: static */ + memcpy(&container->as.list, data, sizeof(*data)); + free(data); + + } else if (indented && !maybe_lazy && !parser->blank) { + S_advance_offset(parser, &input, CODE_INDENT, true); + container = + add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1); + container->as.code.fenced = false; + container->as.code.fence_char = 0; + container->as.code.fence_length = 0; + container->as.code.fence_offset = 0; + container->as.code.info = cmark_chunk_literal(""); + + } else { + break; + } + + if (accepts_lines(container->type)) { + // if it's a line container, it can't contain other containers + break; + } + maybe_lazy = false; + } + + // what remains at parser->offset is a text line. add the text to the + // appropriate container. + + S_find_first_nonspace(parser, &input); + + if (parser->blank && container->last_child) { + container->last_child->last_line_blank = true; + } + + // block quote lines are never blank as they start with > + // and we don't count blanks in fenced code for purposes of tight/loose + // lists or breaking out of lists. we also don't set last_line_blank + // on an empty list item. + container->last_line_blank = + (parser->blank && container->type != NODE_BLOCK_QUOTE && + container->type != NODE_HEADER && + !(container->type == NODE_CODE_BLOCK && container->as.code.fenced) && + !(container->type == NODE_ITEM && container->first_child == NULL && + container->start_line == parser->line_number)); + + cmark_node *cont = container; + while (cont->parent) { + cont->parent->last_line_blank = false; + cont = cont->parent; + } + + if (parser->current != last_matched_container && + container == last_matched_container && !parser->blank && + parser->current->type == NODE_PARAGRAPH && + cmark_strbuf_len(&parser->current->string_content) > 0) { + + add_line(parser->current, &input, parser->offset); + + } else { // not a lazy continuation + + // finalize any blocks that were not matched and set cur to container: + while (parser->current != last_matched_container) { + parser->current = finalize(parser, parser->current); + assert(parser->current != NULL); + } + + if (container->type == NODE_CODE_BLOCK) { + + add_line(container, &input, parser->offset); + + } else if (container->type == NODE_HTML) { + + add_line(container, &input, parser->offset); + + int matches_end_condition; + switch (container->as.html_block_type) { + case 1: + // , , + matches_end_condition = + scan_html_block_end_1(&input, parser->first_nonspace); + break; + case 2: + // --> + matches_end_condition = + scan_html_block_end_2(&input, parser->first_nonspace); + break; + case 3: + // ?> + matches_end_condition = + scan_html_block_end_3(&input, parser->first_nonspace); + break; + case 4: + // > + matches_end_condition = + scan_html_block_end_4(&input, parser->first_nonspace); + break; + case 5: + // ]]> + matches_end_condition = + scan_html_block_end_5(&input, parser->first_nonspace); + break; + default: + matches_end_condition = 0; + break; + } + + if (matches_end_condition) { + container = finalize(parser, container); + assert(parser->current != NULL); + } + + } else if (parser->blank) { + + // ??? do nothing + + } else if (accepts_lines(container->type)) { + + if (container->type == NODE_HEADER && + container->as.header.setext == false) { + chop_trailing_hashtags(&input); + } + add_line(container, &input, parser->first_nonspace); + + } else { + // create paragraph container for line + container = add_child(parser, container, NODE_PARAGRAPH, + parser->first_nonspace + 1); + add_line(container, &input, parser->first_nonspace); + } + + parser->current = container; + } finished: - parser->last_line_length = parser->curline->size; - if (parser->last_line_length && - parser->curline->ptr[parser->last_line_length - 1] == '\n') - parser->last_line_length -= 1; - if (parser->last_line_length && - parser->curline->ptr[parser->last_line_length - 1] == '\r') - parser->last_line_length -= 1; - - cmark_strbuf_clear(parser->curline); - + parser->last_line_length = parser->curline->size; + if (parser->last_line_length && + parser->curline->ptr[parser->last_line_length - 1] == '\n') + parser->last_line_length -= 1; + if (parser->last_line_length && + parser->curline->ptr[parser->last_line_length - 1] == '\r') + parser->last_line_length -= 1; + + cmark_strbuf_clear(parser->curline); } -cmark_node *cmark_parser_finish(cmark_parser *parser) -{ - if (parser->linebuf->size) { - S_process_line(parser, parser->linebuf->ptr, - parser->linebuf->size); - cmark_strbuf_clear(parser->linebuf); - } +cmark_node *cmark_parser_finish(cmark_parser *parser) { + if (parser->linebuf->size) { + S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size); + cmark_strbuf_clear(parser->linebuf); + } - finalize_document(parser); + finalize_document(parser); - if (parser->options & CMARK_OPT_NORMALIZE) { - cmark_consolidate_text_nodes(parser->root); - } + if (parser->options & CMARK_OPT_NORMALIZE) { + cmark_consolidate_text_nodes(parser->root); + } - cmark_strbuf_free(parser->curline); + cmark_strbuf_free(parser->curline); #if CMARK_DEBUG_NODES - if (cmark_node_check(parser->root, stderr)) { - abort(); - } + if (cmark_node_check(parser->root, stderr)) { + abort(); + } #endif - return parser->root; + return parser->root; } diff --git a/src/buffer.c b/src/buffer.c index 509eb6c08d..9d31881c25 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -16,323 +16,301 @@ unsigned char cmark_strbuf__initbuf[1]; #ifndef MIN -#define MIN(x,y) ((xasize = 0; - buf->size = 0; - buf->ptr = cmark_strbuf__initbuf; +void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) { + buf->asize = 0; + buf->size = 0; + buf->ptr = cmark_strbuf__initbuf; - if (initial_size > 0) - cmark_strbuf_grow(buf, initial_size); + if (initial_size > 0) + cmark_strbuf_grow(buf, initial_size); } -void cmark_strbuf_overflow_err() -{ - fprintf(stderr, "String buffer overflow"); - abort(); +void cmark_strbuf_overflow_err() { + fprintf(stderr, "String buffer overflow"); + abort(); } -static inline void -S_strbuf_grow_by(cmark_strbuf *buf, size_t add) -{ - size_t target_size = (size_t)buf->size + add; +static inline void S_strbuf_grow_by(cmark_strbuf *buf, size_t add) { + size_t target_size = (size_t)buf->size + add; - if (target_size < add /* Integer overflow. */ - || target_size > BUFSIZE_MAX /* Truncation overflow. */ - ) { - cmark_strbuf_overflow_err(); - return; /* unreachable */ - } + if (target_size < add /* Integer overflow. */ + || target_size > BUFSIZE_MAX /* Truncation overflow. */ + ) { + cmark_strbuf_overflow_err(); + return; /* unreachable */ + } - if ((bufsize_t)target_size >= buf->asize) - cmark_strbuf_grow(buf, (bufsize_t)target_size); + if ((bufsize_t)target_size >= buf->asize) + cmark_strbuf_grow(buf, (bufsize_t)target_size); } -void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) -{ - unsigned char *new_ptr; - - if (target_size < buf->asize) - return; - - if (buf->asize == 0) { - new_ptr = NULL; - } else { - new_ptr = buf->ptr; - } - - /* Oversize the buffer by 50% to guarantee amortized linear time - * complexity on append operations. */ - size_t new_size = (size_t)target_size + (size_t)target_size / 2; - - /* Account for terminating null byte. */ - new_size += 1; - - /* round allocation up to multiple of 8 */ - new_size = (new_size + 7) & ~7; - - if (new_size < (size_t)target_size /* Integer overflow. */ - || new_size > BUFSIZE_MAX /* Truncation overflow. */ - ) { - if (target_size >= BUFSIZE_MAX) { - /* No space for terminating null byte. */ - cmark_strbuf_overflow_err(); - return; /* unreachable */ - } - /* Oversize by the maximum possible amount. */ - new_size = BUFSIZE_MAX; - } - - new_ptr = (unsigned char *)realloc(new_ptr, new_size); - - if (!new_ptr) { - perror("realloc in cmark_strbuf_grow"); - abort(); - } - - buf->asize = (bufsize_t)new_size; - buf->ptr = new_ptr; +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { + unsigned char *new_ptr; + + if (target_size < buf->asize) + return; + + if (buf->asize == 0) { + new_ptr = NULL; + } else { + new_ptr = buf->ptr; + } + + /* Oversize the buffer by 50% to guarantee amortized linear time + * complexity on append operations. */ + size_t new_size = (size_t)target_size + (size_t)target_size / 2; + + /* Account for terminating null byte. */ + new_size += 1; + + /* round allocation up to multiple of 8 */ + new_size = (new_size + 7) & ~7; + + if (new_size < (size_t)target_size /* Integer overflow. */ + || new_size > BUFSIZE_MAX /* Truncation overflow. */ + ) { + if (target_size >= BUFSIZE_MAX) { + /* No space for terminating null byte. */ + cmark_strbuf_overflow_err(); + return; /* unreachable */ + } + /* Oversize by the maximum possible amount. */ + new_size = BUFSIZE_MAX; + } + + new_ptr = (unsigned char *)realloc(new_ptr, new_size); + + if (!new_ptr) { + perror("realloc in cmark_strbuf_grow"); + abort(); + } + + buf->asize = (bufsize_t)new_size; + buf->ptr = new_ptr; } -bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) -{ - return buf->size; -} +bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } -void cmark_strbuf_free(cmark_strbuf *buf) -{ - if (!buf) return; +void cmark_strbuf_free(cmark_strbuf *buf) { + if (!buf) + return; - if (buf->ptr != cmark_strbuf__initbuf) - free(buf->ptr); + if (buf->ptr != cmark_strbuf__initbuf) + free(buf->ptr); - cmark_strbuf_init(buf, 0); + cmark_strbuf_init(buf, 0); } -void cmark_strbuf_clear(cmark_strbuf *buf) -{ - buf->size = 0; +void cmark_strbuf_clear(cmark_strbuf *buf) { + buf->size = 0; - if (buf->asize > 0) - buf->ptr[0] = '\0'; + if (buf->asize > 0) + buf->ptr[0] = '\0'; } -void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t len) -{ - if (len <= 0 || data == NULL) { - cmark_strbuf_clear(buf); - } else { - if (data != buf->ptr) { - if (len >= buf->asize) - cmark_strbuf_grow(buf, len); - memmove(buf->ptr, data, len); - } - buf->size = len; - buf->ptr[buf->size] = '\0'; - } +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len) { + if (len <= 0 || data == NULL) { + cmark_strbuf_clear(buf); + } else { + if (data != buf->ptr) { + if (len >= buf->asize) + cmark_strbuf_grow(buf, len); + memmove(buf->ptr, data, len); + } + buf->size = len; + buf->ptr[buf->size] = '\0'; + } } -void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) -{ - cmark_strbuf_set(buf, (const unsigned char *)string, - string ? cmark_strbuf_safe_strlen(string) : 0); +void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { + cmark_strbuf_set(buf, (const unsigned char *)string, + string ? cmark_strbuf_safe_strlen(string) : 0); } -void cmark_strbuf_putc(cmark_strbuf *buf, int c) -{ - S_strbuf_grow_by(buf, 1); - buf->ptr[buf->size++] = c; - buf->ptr[buf->size] = '\0'; +void cmark_strbuf_putc(cmark_strbuf *buf, int c) { + S_strbuf_grow_by(buf, 1); + buf->ptr[buf->size++] = c; + buf->ptr[buf->size] = '\0'; } -void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len) -{ - if (len <= 0) - return; +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len) { + if (len <= 0) + return; - S_strbuf_grow_by(buf, len); - memmove(buf->ptr + buf->size, data, len); - buf->size += len; - buf->ptr[buf->size] = '\0'; + S_strbuf_grow_by(buf, len); + memmove(buf->ptr + buf->size, data, len); + buf->size += len; + buf->ptr[buf->size] = '\0'; } -void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) -{ - cmark_strbuf_put(buf, (const unsigned char *)string, - cmark_strbuf_safe_strlen(string)); +void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { + cmark_strbuf_put(buf, (const unsigned char *)string, + cmark_strbuf_safe_strlen(string)); } -void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf) -{ - bufsize_t copylen; +void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, + const cmark_strbuf *buf) { + bufsize_t copylen; - assert(buf); - if (!data || datasize <= 0) - return; + assert(buf); + if (!data || datasize <= 0) + return; - data[0] = '\0'; + data[0] = '\0'; - if (buf->size == 0 || buf->asize <= 0) - return; + if (buf->size == 0 || buf->asize <= 0) + return; - copylen = buf->size; - if (copylen > datasize - 1) - copylen = datasize - 1; - memmove(data, buf->ptr, copylen); - data[copylen] = '\0'; + copylen = buf->size; + if (copylen > datasize - 1) + copylen = datasize - 1; + memmove(data, buf->ptr, copylen); + data[copylen] = '\0'; } -void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) -{ - cmark_strbuf t = *buf_a; - *buf_a = *buf_b; - *buf_b = t; +void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) { + cmark_strbuf t = *buf_a; + *buf_a = *buf_b; + *buf_b = t; } -unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) -{ - unsigned char *data = buf->ptr; +unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { + unsigned char *data = buf->ptr; - if (buf->asize == 0) { - /* return an empty string */ - return (unsigned char *)calloc(1, 1); - } + if (buf->asize == 0) { + /* return an empty string */ + return (unsigned char *)calloc(1, 1); + } - cmark_strbuf_init(buf, 0); - return data; + cmark_strbuf_init(buf, 0); + return data; } -int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) -{ - int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size)); - return (result != 0) ? result : - (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; +int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) { + int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size)); + return (result != 0) ? result + : (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; } -bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) -{ - if (pos >= buf->size) - return -1; - if (pos < 0) - pos = 0; +bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) { + if (pos >= buf->size) + return -1; + if (pos < 0) + pos = 0; - const unsigned char *p = (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos); - if (!p) - return -1; + const unsigned char *p = + (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos); + if (!p) + return -1; - return (bufsize_t)(p - (const unsigned char *)buf->ptr); + return (bufsize_t)(p - (const unsigned char *)buf->ptr); } -bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) -{ - if (pos < 0 || buf->size == 0) - return -1; - if (pos >= buf->size) - pos = buf->size - 1; +bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) { + if (pos < 0 || buf->size == 0) + return -1; + if (pos >= buf->size) + pos = buf->size - 1; - for (bufsize_t i = pos; i >= 0; i--) { - if (buf->ptr[i] == (unsigned char) c) - return i; - } + for (bufsize_t i = pos; i >= 0; i--) { + if (buf->ptr[i] == (unsigned char)c) + return i; + } - return -1; + return -1; } -void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) -{ - if (len < 0) - len = 0; +void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) { + if (len < 0) + len = 0; - if (len < buf->size) { - buf->size = len; - buf->ptr[buf->size] = '\0'; - } + if (len < buf->size) { + buf->size = len; + buf->ptr[buf->size] = '\0'; + } } -void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) -{ - if (n > 0) { - if (n > buf->size) - n = buf->size; - buf->size = buf->size - n; - if (buf->size) - memmove(buf->ptr, buf->ptr + n, buf->size); - - buf->ptr[buf->size] = '\0'; - } +void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) { + if (n > 0) { + if (n > buf->size) + n = buf->size; + buf->size = buf->size - n; + if (buf->size) + memmove(buf->ptr, buf->ptr + n, buf->size); + + buf->ptr[buf->size] = '\0'; + } } -void cmark_strbuf_rtrim(cmark_strbuf *buf) -{ - if (!buf->size) - return; +void cmark_strbuf_rtrim(cmark_strbuf *buf) { + if (!buf->size) + return; - while (buf->size > 0) { - if (!cmark_isspace(buf->ptr[buf->size - 1])) - break; + while (buf->size > 0) { + if (!cmark_isspace(buf->ptr[buf->size - 1])) + break; - buf->size--; - } + buf->size--; + } - buf->ptr[buf->size] = '\0'; + buf->ptr[buf->size] = '\0'; } -void cmark_strbuf_trim(cmark_strbuf *buf) -{ - bufsize_t i = 0; +void cmark_strbuf_trim(cmark_strbuf *buf) { + bufsize_t i = 0; - if (!buf->size) - return; + if (!buf->size) + return; - while (i < buf->size && cmark_isspace(buf->ptr[i])) - i++; + while (i < buf->size && cmark_isspace(buf->ptr[i])) + i++; - cmark_strbuf_drop(buf, i); + cmark_strbuf_drop(buf, i); - cmark_strbuf_rtrim(buf); + cmark_strbuf_rtrim(buf); } // Destructively modify string, collapsing consecutive // space and newline characters into a single space. -void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) -{ - bool last_char_was_space = false; - bufsize_t r, w; - - for (r = 0, w = 0; r < s->size; ++r) { - switch (s->ptr[r]) { - case ' ': - case '\n': - if (last_char_was_space) - break; - - s->ptr[w++] = ' '; - last_char_was_space = true; - break; - - default: - s->ptr[w++] = s->ptr[r]; - last_char_was_space = false; - } - } - - cmark_strbuf_truncate(s, w); +void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) { + bool last_char_was_space = false; + bufsize_t r, w; + + for (r = 0, w = 0; r < s->size; ++r) { + switch (s->ptr[r]) { + case ' ': + case '\n': + if (last_char_was_space) + break; + + s->ptr[w++] = ' '; + last_char_was_space = true; + break; + + default: + s->ptr[w++] = s->ptr[r]; + last_char_was_space = false; + } + } + + cmark_strbuf_truncate(s, w); } // Destructively unescape a string: remove backslashes before punctuation chars. -extern void cmark_strbuf_unescape(cmark_strbuf *buf) -{ - bufsize_t r, w; +extern void cmark_strbuf_unescape(cmark_strbuf *buf) { + bufsize_t r, w; - for (r = 0, w = 0; r < buf->size; ++r) { - if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1])) - r++; + for (r = 0, w = 0; r < buf->size; ++r) { + if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1])) + r++; - buf->ptr[w++] = buf->ptr[r]; - } + buf->ptr[w++] = buf->ptr[r]; + } - cmark_strbuf_truncate(buf, w); + cmark_strbuf_truncate(buf, w); } diff --git a/src/buffer.h b/src/buffer.h index 36ae0a14d1..e99db72026 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -14,13 +14,14 @@ extern "C" { typedef int bufsize_t; typedef struct { - unsigned char *ptr; - bufsize_t asize, size; + unsigned char *ptr; + bufsize_t asize, size; } cmark_strbuf; extern unsigned char cmark_strbuf__initbuf[]; -#define GH_BUF_INIT { cmark_strbuf__initbuf, 0, 0 } +#define GH_BUF_INIT \ + { cmark_strbuf__initbuf, 0, 0 } #define BUFSIZE_MAX INT_MAX /** @@ -44,19 +45,21 @@ bufsize_t cmark_strbuf_len(const cmark_strbuf *buf); int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); -void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf); +void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, + const cmark_strbuf *buf); -static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) -{ - return (char *)buf->ptr; +static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { + return (char *)buf->ptr; } #define cmark_strbuf_at(buf, n) ((buf)->ptr[n]) -void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t len); +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len); void cmark_strbuf_sets(cmark_strbuf *buf, const char *string); void cmark_strbuf_putc(cmark_strbuf *buf, int c); -void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len); +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len); void cmark_strbuf_puts(cmark_strbuf *buf, const char *string); void cmark_strbuf_clear(cmark_strbuf *buf); @@ -72,17 +75,15 @@ void cmark_strbuf_unescape(cmark_strbuf *s); /* Print error and abort. */ void cmark_strbuf_overflow_err(void); -static inline bufsize_t -cmark_strbuf_check_bufsize(size_t size) { - if (size > BUFSIZE_MAX) { - cmark_strbuf_overflow_err(); - } - return (bufsize_t)size; +static inline bufsize_t cmark_strbuf_check_bufsize(size_t size) { + if (size > BUFSIZE_MAX) { + cmark_strbuf_overflow_err(); + } + return (bufsize_t)size; } -static inline bufsize_t -cmark_strbuf_safe_strlen(const char *str) { - return cmark_strbuf_check_bufsize(strlen(str)); +static inline bufsize_t cmark_strbuf_safe_strlen(const char *str) { + return cmark_strbuf_check_bufsize(strlen(str)); } #ifdef __cplusplus diff --git a/src/chunk.h b/src/chunk.h index f23a02d4b4..db1bf0d218 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -7,115 +7,109 @@ #include "cmark_ctype.h" #include "buffer.h" -#define CMARK_CHUNK_EMPTY { NULL, 0, 0 } +#define CMARK_CHUNK_EMPTY \ + { NULL, 0, 0 } typedef struct { - unsigned char *data; - bufsize_t len; - bufsize_t alloc; // also implies a NULL-terminated string + unsigned char *data; + bufsize_t len; + bufsize_t alloc; // also implies a NULL-terminated string } cmark_chunk; -static inline void cmark_chunk_free(cmark_chunk *c) -{ - if (c->alloc) - free(c->data); +static inline void cmark_chunk_free(cmark_chunk *c) { + if (c->alloc) + free(c->data); - c->data = NULL; - c->alloc = 0; - c->len = 0; + c->data = NULL; + c->alloc = 0; + c->len = 0; } -static inline void cmark_chunk_ltrim(cmark_chunk *c) -{ - assert(!c->alloc); +static inline void cmark_chunk_ltrim(cmark_chunk *c) { + assert(!c->alloc); - while (c->len && cmark_isspace(c->data[0])) { - c->data++; - c->len--; - } + while (c->len && cmark_isspace(c->data[0])) { + c->data++; + c->len--; + } } -static inline void cmark_chunk_rtrim(cmark_chunk *c) -{ - while (c->len > 0) { - if (!cmark_isspace(c->data[c->len - 1])) - break; +static inline void cmark_chunk_rtrim(cmark_chunk *c) { + while (c->len > 0) { + if (!cmark_isspace(c->data[c->len - 1])) + break; - c->len--; - } + c->len--; + } } -static inline void cmark_chunk_trim(cmark_chunk *c) -{ - cmark_chunk_ltrim(c); - cmark_chunk_rtrim(c); +static inline void cmark_chunk_trim(cmark_chunk *c) { + cmark_chunk_ltrim(c); + cmark_chunk_rtrim(c); } -static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) -{ - const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); - return p ? (bufsize_t)(p - ch->data) : ch->len; +static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, + bufsize_t offset) { + const unsigned char *p = + (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); + return p ? (bufsize_t)(p - ch->data) : ch->len; } -static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) -{ - unsigned char *str; - - if (c->alloc) { - return (char *)c->data; - } - str = (unsigned char *)malloc(c->len + 1); - if(str != NULL) { - if(c->len > 0) { - memcpy(str, c->data, c->len); - } - str[c->len] = 0; - } - c->data = str; - c->alloc = 1; - - return (char *)str; +static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) { + unsigned char *str; + + if (c->alloc) { + return (char *)c->data; + } + str = (unsigned char *)malloc(c->len + 1); + if (str != NULL) { + if (c->len > 0) { + memcpy(str, c->data, c->len); + } + str[c->len] = 0; + } + c->data = str; + c->alloc = 1; + + return (char *)str; } -static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) -{ - if (c->alloc) { - free(c->data); - } - if (str == NULL) { - c->len = 0; - c->data = NULL; - c->alloc = 0; - } else { - c->len = cmark_strbuf_safe_strlen(str); - c->data = (unsigned char *)malloc(c->len + 1); - c->alloc = 1; - memcpy(c->data, str, c->len + 1); - } +static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { + if (c->alloc) { + free(c->data); + } + if (str == NULL) { + c->len = 0; + c->data = NULL; + c->alloc = 0; + } else { + c->len = cmark_strbuf_safe_strlen(str); + c->data = (unsigned char *)malloc(c->len + 1); + c->alloc = 1; + memcpy(c->data, str, c->len + 1); + } } -static inline cmark_chunk cmark_chunk_literal(const char *data) -{ - bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0; - cmark_chunk c = {(unsigned char *)data, len, 0}; - return c; +static inline cmark_chunk cmark_chunk_literal(const char *data) { + bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0; + cmark_chunk c = {(unsigned char *)data, len, 0}; + return c; } -static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) -{ - cmark_chunk c = {ch->data + pos, len, 0}; - return c; +static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, + bufsize_t len) { + cmark_chunk c = {ch->data + pos, len, 0}; + return c; } -static inline cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) -{ - cmark_chunk c; +static inline cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { + cmark_chunk c; - c.len = buf->size; - c.data = cmark_strbuf_detach(buf); - c.alloc = 1; + c.len = buf->size; + c.data = cmark_strbuf_detach(buf); + c.alloc = 1; - return c; + return c; } #endif diff --git a/src/cmark.c b/src/cmark.c index ca9807b725..3491199736 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -6,26 +6,18 @@ #include "cmark.h" #include "buffer.h" -int cmark_version() -{ - return CMARK_VERSION; -} +int cmark_version() { return CMARK_VERSION; } -const char *cmark_version_string() -{ - return CMARK_VERSION_STRING; -} +const char *cmark_version_string() { return CMARK_VERSION_STRING; } -char *cmark_markdown_to_html(const char *text, size_t len, int options) -{ - cmark_node *doc; - char *result; +char *cmark_markdown_to_html(const char *text, size_t len, int options) { + cmark_node *doc; + char *result; - doc = cmark_parse_document(text, len, options); + doc = cmark_parse_document(text, len, options); - result = cmark_render_html(doc, options); - cmark_node_free(doc); + result = cmark_render_html(doc, options); + cmark_node_free(doc); - return result; + return result; } - diff --git a/src/cmark.h b/src/cmark.h index 4a85f260d0..3ad44862ba 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -30,49 +30,48 @@ char *cmark_markdown_to_html(const char *text, size_t len, int options); */ typedef enum { - /* Error status */ - CMARK_NODE_NONE, - - /* Block */ - CMARK_NODE_DOCUMENT, - CMARK_NODE_BLOCK_QUOTE, - CMARK_NODE_LIST, - CMARK_NODE_ITEM, - CMARK_NODE_CODE_BLOCK, - CMARK_NODE_HTML, - CMARK_NODE_PARAGRAPH, - CMARK_NODE_HEADER, - CMARK_NODE_HRULE, - - CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, - CMARK_NODE_LAST_BLOCK = CMARK_NODE_HRULE, - - /* Inline */ - CMARK_NODE_TEXT, - CMARK_NODE_SOFTBREAK, - CMARK_NODE_LINEBREAK, - CMARK_NODE_CODE, - CMARK_NODE_INLINE_HTML, - CMARK_NODE_EMPH, - CMARK_NODE_STRONG, - CMARK_NODE_LINK, - CMARK_NODE_IMAGE, - - CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, - CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, + /* Error status */ + CMARK_NODE_NONE, + + /* Block */ + CMARK_NODE_DOCUMENT, + CMARK_NODE_BLOCK_QUOTE, + CMARK_NODE_LIST, + CMARK_NODE_ITEM, + CMARK_NODE_CODE_BLOCK, + CMARK_NODE_HTML, + CMARK_NODE_PARAGRAPH, + CMARK_NODE_HEADER, + CMARK_NODE_HRULE, + + CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_HRULE, + + /* Inline */ + CMARK_NODE_TEXT, + CMARK_NODE_SOFTBREAK, + CMARK_NODE_LINEBREAK, + CMARK_NODE_CODE, + CMARK_NODE_INLINE_HTML, + CMARK_NODE_EMPH, + CMARK_NODE_STRONG, + CMARK_NODE_LINK, + CMARK_NODE_IMAGE, + + CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, + CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, } cmark_node_type; - typedef enum { - CMARK_NO_LIST, - CMARK_BULLET_LIST, - CMARK_ORDERED_LIST -} cmark_list_type; + CMARK_NO_LIST, + CMARK_BULLET_LIST, + CMARK_ORDERED_LIST +} cmark_list_type; typedef enum { - CMARK_NO_DELIM, - CMARK_PERIOD_DELIM, - CMARK_PAREN_DELIM + CMARK_NO_DELIM, + CMARK_PERIOD_DELIM, + CMARK_PAREN_DELIM } cmark_delim_type; typedef struct cmark_node cmark_node; @@ -80,10 +79,10 @@ typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; typedef enum { - CMARK_EVENT_NONE, - CMARK_EVENT_DONE, - CMARK_EVENT_ENTER, - CMARK_EVENT_EXIT + CMARK_EVENT_NONE, + CMARK_EVENT_DONE, + CMARK_EVENT_ENTER, + CMARK_EVENT_EXIT } cmark_event_type; /** @@ -94,13 +93,11 @@ typedef enum { * other required properties, which it is the caller's responsibility * to assign. */ -CMARK_EXPORT cmark_node* -cmark_node_new(cmark_node_type type); +CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); /** Frees the memory allocated for a node. */ -CMARK_EXPORT void -cmark_node_free(cmark_node *node); +CMARK_EXPORT void cmark_node_free(cmark_node *node); /** * ## Tree Traversal @@ -109,29 +106,24 @@ cmark_node_free(cmark_node *node); /** Returns the next node in the sequence after 'node', or NULL if * there is none. */ -CMARK_EXPORT cmark_node* -cmark_node_next(cmark_node *node); +CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node); /** Returns the previous node in the sequence after 'node', or NULL if * there is none. */ -CMARK_EXPORT cmark_node* -cmark_node_previous(cmark_node *node); +CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node); /** Returns the parent of 'node', or NULL if there is none. */ -CMARK_EXPORT cmark_node* -cmark_node_parent(cmark_node *node); +CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node); /** Returns the first child of 'node', or NULL if 'node' has no children. */ -CMARK_EXPORT cmark_node* -cmark_node_first_child(cmark_node *node); +CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node); /** Returns the last child of 'node', or NULL if 'node' has no children. */ -CMARK_EXPORT cmark_node* -cmark_node_last_child(cmark_node *node); +CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); /** * ## Iterator @@ -182,48 +174,41 @@ cmark_node_last_child(cmark_node *node); * type are undefined until `cmark_iter_next` is called for the first time. */ CMARK_EXPORT -cmark_iter* -cmark_iter_new(cmark_node *root); +cmark_iter *cmark_iter_new(cmark_node *root); /** Frees the memory allocated for an iterator. */ CMARK_EXPORT -void -cmark_iter_free(cmark_iter *iter); +void cmark_iter_free(cmark_iter *iter); /** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`, * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`). */ CMARK_EXPORT -cmark_event_type -cmark_iter_next(cmark_iter *iter); +cmark_event_type cmark_iter_next(cmark_iter *iter); /** Returns the current node. */ CMARK_EXPORT -cmark_node* -cmark_iter_get_node(cmark_iter *iter); +cmark_node *cmark_iter_get_node(cmark_iter *iter); /** Returns the current event type. */ CMARK_EXPORT -cmark_event_type -cmark_iter_get_event_type(cmark_iter *iter); +cmark_event_type cmark_iter_get_event_type(cmark_iter *iter); /** Returns the root node. */ CMARK_EXPORT -cmark_node* -cmark_iter_get_root(cmark_iter *iter); +cmark_node *cmark_iter_get_root(cmark_iter *iter); /** Resets the iterator so that the current node is 'current' and * the event type is 'event_type'. The new current node must be a * descendant of the root node or the root node itself. */ CMARK_EXPORT -void -cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type); +void cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type); /** * ## Accessors @@ -231,144 +216,120 @@ cmark_iter_reset(cmark_iter *iter, cmark_node *current, /** Returns the user data of 'node'. */ -CMARK_EXPORT void* -cmark_node_get_user_data(cmark_node *node); +CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node); /** Sets arbitrary user data for 'node'. Returns 1 on success, * 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_user_data(cmark_node *node, void *user_data); +CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data); /** Returns the type of 'node', or `CMARK_NODE_NONE` on error. */ -CMARK_EXPORT cmark_node_type -cmark_node_get_type(cmark_node *node); +CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node); /** Like 'cmark_node_get_type', but returns a string representation of the type, or `""`. */ CMARK_EXPORT -const char* -cmark_node_get_type_string(cmark_node *node); +const char *cmark_node_get_type_string(cmark_node *node); /** Returns the string contents of 'node', or NULL if none. */ -CMARK_EXPORT const char* -cmark_node_get_literal(cmark_node *node); +CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node); /** Sets the string contents of 'node'. Returns 1 on success, * 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_literal(cmark_node *node, const char *content); +CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content); /** Returns the header level of 'node', or 0 if 'node' is not a header. */ -CMARK_EXPORT int -cmark_node_get_header_level(cmark_node *node); +CMARK_EXPORT int cmark_node_get_header_level(cmark_node *node); /** Sets the header level of 'node', returning 1 on success and 0 on error. */ -CMARK_EXPORT int -cmark_node_set_header_level(cmark_node *node, int level); +CMARK_EXPORT int cmark_node_set_header_level(cmark_node *node, int level); /** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node' * is not a list. */ -CMARK_EXPORT cmark_list_type -cmark_node_get_list_type(cmark_node *node); +CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node); /** Sets the list type of 'node', returning 1 on success and 0 on error. */ -CMARK_EXPORT int -cmark_node_set_list_type(cmark_node *node, cmark_list_type type); +CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node, + cmark_list_type type); /** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node' * is not a list. */ -CMARK_EXPORT cmark_delim_type -cmark_node_get_list_delim(cmark_node *node); +CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node); /** Sets the list delimiter type of 'node', returning 1 on success and 0 * on error. */ -CMARK_EXPORT int -cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim); +CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node, + cmark_delim_type delim); /** Returns starting number of 'node', if it is an ordered list, otherwise 0. */ -CMARK_EXPORT int -cmark_node_get_list_start(cmark_node *node); +CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node); /** Sets starting number of 'node', if it is an ordered list. Returns 1 * on success, 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_list_start(cmark_node *node, int start); +CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start); /** Returns 1 if 'node' is a tight list, 0 otherwise. */ -CMARK_EXPORT int -cmark_node_get_list_tight(cmark_node *node); +CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node); /** Sets the "tightness" of a list. Returns 1 on success, 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_list_tight(cmark_node *node, int tight); +CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight); /** Returns the info string from a fenced code block, or NULL if none. */ -CMARK_EXPORT const char* -cmark_node_get_fence_info(cmark_node *node); +CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); /** Sets the info string in a fenced code block, returning 1 on * success and 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_fence_info(cmark_node *node, const char *info); +CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info); /** Gets the URL of a link or image 'node', or NULL if none. */ -CMARK_EXPORT const char* -cmark_node_get_url(cmark_node *node); +CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); /** Sets the URL of a link or image 'node'. Returns 1 on success, * 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_url(cmark_node *node, const char *url); +CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url); /** Gets the title of a link or image 'node', or NULL if none. */ -CMARK_EXPORT const char* -cmark_node_get_title(cmark_node *node); +CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); /** Sets the title of a link or image 'node'. Returns 1 on success, * 0 on failure. */ -CMARK_EXPORT int -cmark_node_set_title(cmark_node *node, const char *title); +CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); /** Returns the line on which 'node' begins. */ -CMARK_EXPORT int -cmark_node_get_start_line(cmark_node *node); +CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node); /** Returns the column at which 'node' begins. */ -CMARK_EXPORT int -cmark_node_get_start_column(cmark_node *node); +CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node); /** Returns the line on which 'node' ends. */ -CMARK_EXPORT int -cmark_node_get_end_line(cmark_node *node); +CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node); /** Returns the column at which 'node' ends. */ -CMARK_EXPORT int -cmark_node_get_end_column(cmark_node *node); +CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node); /** * ## Tree Manipulation @@ -377,35 +338,30 @@ cmark_node_get_end_column(cmark_node *node); /** Unlinks a 'node', removing it from the tree, but not freeing its * memory. (Use 'cmark_node_free' for that.) */ -CMARK_EXPORT void -cmark_node_unlink(cmark_node *node); +CMARK_EXPORT void cmark_node_unlink(cmark_node *node); /** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure. */ -CMARK_EXPORT int -cmark_node_insert_before(cmark_node *node, cmark_node *sibling); +CMARK_EXPORT int cmark_node_insert_before(cmark_node *node, + cmark_node *sibling); /** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure. */ -CMARK_EXPORT int -cmark_node_insert_after(cmark_node *node, cmark_node *sibling); +CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); /** Adds 'child' to the beginning of the children of 'node'. * Returns 1 on success, 0 on failure. */ -CMARK_EXPORT int -cmark_node_prepend_child(cmark_node *node, cmark_node *child); +CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child); /** Adds 'child' to the end of the children of 'node'. * Returns 1 on success, 0 on failure. */ -CMARK_EXPORT int -cmark_node_append_child(cmark_node *node, cmark_node *child); +CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child); /** Consolidates adjacent text nodes. */ -CMARK_EXPORT void -cmark_consolidate_text_nodes(cmark_node *root); +CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); /** * ## Parsing @@ -552,28 +508,28 @@ const char *cmark_version_string(); */ #ifndef CMARK_NO_SHORT_NAMES -#define NODE_DOCUMENT CMARK_NODE_DOCUMENT -#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE -#define NODE_LIST CMARK_NODE_LIST -#define NODE_ITEM CMARK_NODE_ITEM -#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK -#define NODE_HTML CMARK_NODE_HTML -#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH -#define NODE_HEADER CMARK_NODE_HEADER -#define NODE_HRULE CMARK_NODE_HRULE -#define NODE_TEXT CMARK_NODE_TEXT -#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK -#define NODE_LINEBREAK CMARK_NODE_LINEBREAK -#define NODE_CODE CMARK_NODE_CODE -#define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML -#define NODE_EMPH CMARK_NODE_EMPH -#define NODE_STRONG CMARK_NODE_STRONG -#define NODE_LINK CMARK_NODE_LINK -#define NODE_IMAGE CMARK_NODE_IMAGE -#define BULLET_LIST CMARK_BULLET_LIST -#define ORDERED_LIST CMARK_ORDERED_LIST -#define PERIOD_DELIM CMARK_PERIOD_DELIM -#define PAREN_DELIM CMARK_PAREN_DELIM +#define NODE_DOCUMENT CMARK_NODE_DOCUMENT +#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE +#define NODE_LIST CMARK_NODE_LIST +#define NODE_ITEM CMARK_NODE_ITEM +#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK +#define NODE_HTML CMARK_NODE_HTML +#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH +#define NODE_HEADER CMARK_NODE_HEADER +#define NODE_HRULE CMARK_NODE_HRULE +#define NODE_TEXT CMARK_NODE_TEXT +#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK +#define NODE_LINEBREAK CMARK_NODE_LINEBREAK +#define NODE_CODE CMARK_NODE_CODE +#define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML +#define NODE_EMPH CMARK_NODE_EMPH +#define NODE_STRONG CMARK_NODE_STRONG +#define NODE_LINK CMARK_NODE_LINK +#define NODE_IMAGE CMARK_NODE_IMAGE +#define BULLET_LIST CMARK_BULLET_LIST +#define ORDERED_LIST CMARK_ORDERED_LIST +#define PERIOD_DELIM CMARK_PERIOD_DELIM +#define PAREN_DELIM CMARK_PAREN_DELIM #endif #ifdef __cplusplus diff --git a/src/cmark_ctype.c b/src/cmark_ctype.c index 5de8199c28..863c35e06e 100644 --- a/src/cmark_ctype.c +++ b/src/cmark_ctype.c @@ -5,49 +5,38 @@ /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other */ static const int8_t cmark_ctype_class[256] = { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, - /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, - /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, - /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, - /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, + /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, + /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, + /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /** * Returns 1 if c is a "whitespace" character as defined by the spec. */ -int cmark_isspace(char c) -{ - return cmark_ctype_class[(int8_t)c] == 1; -} +int cmark_isspace(char c) { return cmark_ctype_class[(int8_t)c] == 1; } /** * Returns 1 if c is an ascii punctuation character. */ -int cmark_ispunct(char c) -{ - return cmark_ctype_class[(int8_t)c] == 2; -} +int cmark_ispunct(char c) { return cmark_ctype_class[(int8_t)c] == 2; } -int cmark_isalnum(char c) -{ - int8_t result; - result = cmark_ctype_class[(int8_t)c]; - return (result == 3 || result == 4); +int cmark_isalnum(char c) { + int8_t result; + result = cmark_ctype_class[(int8_t)c]; + return (result == 3 || result == 4); } -int cmark_isdigit(char c) -{ - return cmark_ctype_class[(int8_t)c] == 3; -} +int cmark_isdigit(char c) { return cmark_ctype_class[(int8_t)c] == 3; } diff --git a/src/commonmark.c b/src/commonmark.c index 5964c60193..da816237ef 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -20,445 +20,408 @@ // Functions to convert cmark_nodes to commonmark strings. -static inline void outc(cmark_renderer *renderer, - cmark_escaping escape, - int32_t c, - unsigned char nextc) -{ - bool needs_escaping = false; - char encoded[20]; - - needs_escaping = - escape != LITERAL && - ((escape == NORMAL && - (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || - c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || - (c == '&' && isalpha(nextc)) || - (c == '!' && nextc == '[') || - (renderer->begin_line && - (c == '-' || c == '+' || c == '=')) || - ((c == '.' || c == ')') && - isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) || - (escape == URL && - (c == '`' || c == '<' || c == '>' || isspace(c) || - c == '\\' || c == ')' || c == '(')) || - (escape == TITLE && - (c == '`' || c == '<' || c == '>' || c == '"' || - c == '\\'))); - - if (needs_escaping) { - if (isspace(c)) { - // use percent encoding for spaces - sprintf(encoded, "%%%2x", c); - cmark_strbuf_puts(renderer->buffer, encoded); - renderer->column += 3; - } else { - cmark_render_ascii(renderer, "\\"); - cmark_render_code_point(renderer, c); - } - } else { - cmark_render_code_point(renderer, c); - } +static inline void outc(cmark_renderer *renderer, cmark_escaping escape, + int32_t c, unsigned char nextc) { + bool needs_escaping = false; + char encoded[20]; + + needs_escaping = + escape != LITERAL && + ((escape == NORMAL && + (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || + c == '>' || c == '\\' || c == '`' || c == '!' || + (c == '&' && isalpha(nextc)) || (c == '!' && nextc == '[') || + (renderer->begin_line && (c == '-' || c == '+' || c == '=')) || + ((c == '.' || c == ')') && + isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) || + (escape == URL && (c == '`' || c == '<' || c == '>' || isspace(c) || + c == '\\' || c == ')' || c == '(')) || + (escape == TITLE && + (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\'))); + + if (needs_escaping) { + if (isspace(c)) { + // use percent encoding for spaces + sprintf(encoded, "%%%2x", c); + cmark_strbuf_puts(renderer->buffer, encoded); + renderer->column += 3; + } else { + cmark_render_ascii(renderer, "\\"); + cmark_render_code_point(renderer, c); + } + } else { + cmark_render_code_point(renderer, c); + } } -static int -longest_backtick_sequence(const char *code) -{ - int longest = 0; - int current = 0; - size_t i = 0; - size_t code_len = safe_strlen(code); - while (i <= code_len) { - if (code[i] == '`') { - current++; - } else { - if (current > longest) { - longest = current; - } - current = 0; - } - i++; - } - return longest; +static int longest_backtick_sequence(const char *code) { + int longest = 0; + int current = 0; + size_t i = 0; + size_t code_len = safe_strlen(code); + while (i <= code_len) { + if (code[i] == '`') { + current++; + } else { + if (current > longest) { + longest = current; + } + current = 0; + } + i++; + } + return longest; } -static int -shortest_unused_backtick_sequence(const char *code) -{ - int32_t used = 1; - int current = 0; - size_t i = 0; - size_t code_len = safe_strlen(code); - while (i <= code_len) { - if (code[i] == '`') { - current++; - } else { - if (current) { - used |= (1 << current); - } - current = 0; - } - i++; - } - // return number of first bit that is 0: - i = 0; - while (used & 1) { - used = used >> 1; - i++; - } - return i; +static int shortest_unused_backtick_sequence(const char *code) { + int32_t used = 1; + int current = 0; + size_t i = 0; + size_t code_len = safe_strlen(code); + while (i <= code_len) { + if (code[i] == '`') { + current++; + } else { + if (current) { + used |= (1 << current); + } + current = 0; + } + i++; + } + // return number of first bit that is 0: + i = 0; + while (used & 1) { + used = used >> 1; + i++; + } + return i; } -static bool -is_autolink(cmark_node *node) -{ - cmark_chunk *title; - cmark_chunk *url; - cmark_node *link_text; - char *realurl; - int realurllen; - - if (node->type != CMARK_NODE_LINK) { - return false; - } - - url = &node->as.link.url; - if (url->len == 0 || scan_scheme(url, 0) == 0) { - return false; - } - - title = &node->as.link.title; - // if it has a title, we can't treat it as an autolink: - if (title->len > 0) { - return false; - } - - link_text = node->first_child; - cmark_consolidate_text_nodes(link_text); - realurl = (char*)url->data; - realurllen = url->len; - if (strncmp(realurl, "mailto:", 7) == 0) { - realurl += 7; - realurllen -= 7; - } - return (realurllen == link_text->as.literal.len && - strncmp(realurl, - (char*)link_text->as.literal.data, - link_text->as.literal.len) == 0); +static bool is_autolink(cmark_node *node) { + cmark_chunk *title; + cmark_chunk *url; + cmark_node *link_text; + char *realurl; + int realurllen; + + if (node->type != CMARK_NODE_LINK) { + return false; + } + + url = &node->as.link.url; + if (url->len == 0 || scan_scheme(url, 0) == 0) { + return false; + } + + title = &node->as.link.title; + // if it has a title, we can't treat it as an autolink: + if (title->len > 0) { + return false; + } + + link_text = node->first_child; + cmark_consolidate_text_nodes(link_text); + realurl = (char *)url->data; + realurllen = url->len; + if (strncmp(realurl, "mailto:", 7) == 0) { + realurl += 7; + realurllen -= 7; + } + return (realurllen == link_text->as.literal.len && + strncmp(realurl, (char *)link_text->as.literal.data, + link_text->as.literal.len) == 0); } // if node is a block node, returns node. // otherwise returns first block-level node that is an ancestor of node. -static cmark_node* -get_containing_block(cmark_node *node) -{ - while (node && - (node->type < CMARK_NODE_FIRST_BLOCK || - node->type > CMARK_NODE_LAST_BLOCK)) { - node = node->parent; - } - return node; +static cmark_node *get_containing_block(cmark_node *node) { + while (node && (node->type < CMARK_NODE_FIRST_BLOCK || + node->type > CMARK_NODE_LAST_BLOCK)) { + node = node->parent; + } + return node; } -static int -S_render_node(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options) -{ - cmark_node *tmp; - int list_number; - cmark_delim_type list_delim; - int numticks; - int i; - bool entering = (ev_type == CMARK_EVENT_ENTER); - const char *info, *code, *title; - size_t info_len, code_len; - char listmarker[20]; - char *emph_delim; - bufsize_t marker_width; - - // Don't adjust tight list status til we've started the list. - // Otherwise we loose the blank line between a paragraph and - // a following list. - if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && - entering)) { - tmp = get_containing_block(node); - renderer->in_tight_list_item = - (tmp->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(tmp->parent)) || - (tmp && - tmp->parent && - tmp->parent->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(tmp->parent->parent)); - } - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - LIT("> "); - cmark_strbuf_puts(renderer->prefix, "> "); - } else { - cmark_strbuf_truncate(renderer->prefix, - renderer->prefix->size - 2); - BLANKLINE(); - } - break; - - case CMARK_NODE_LIST: - if (!entering && node->next && - (node->next->type == CMARK_NODE_CODE_BLOCK || - node->next->type == CMARK_NODE_LIST)) { - // this ensures 2 blank lines after list, - // if before code block or list: - LIT("\n"); - } - break; - - case CMARK_NODE_ITEM: - if (cmark_node_get_list_type(node->parent) == - CMARK_BULLET_LIST) { - marker_width = 2; - } else { - list_number = cmark_node_get_list_start(node->parent); - list_delim = cmark_node_get_list_delim(node->parent); - tmp = node; - while (tmp->prev) { - tmp = tmp->prev; - list_number += 1; - } - // we ensure a width of at least 4 so - // we get nice transition from single digits - // to double - sprintf(listmarker, - "%d%s%s", list_number, - list_delim == CMARK_PAREN_DELIM ? - ")" : ".", - list_number < 10 ? " " : " "); - marker_width = safe_strlen(listmarker); - } - if (entering) { - if (cmark_node_get_list_type(node->parent) == - CMARK_BULLET_LIST) { - LIT("* "); - cmark_strbuf_puts(renderer->prefix, " "); - } else { - LIT(listmarker); - for (i = marker_width; i--;) { - cmark_strbuf_putc(renderer->prefix, ' '); - } - } - } else { - cmark_strbuf_truncate(renderer->prefix, - renderer->prefix->size - - marker_width); - CR(); - } - break; - - case CMARK_NODE_HEADER: - if (entering) { - for (int i = cmark_node_get_header_level(node); i > 0; i--) { - LIT("#"); - } - LIT(" "); - renderer->no_wrap = true; - } else { - renderer->no_wrap = false; - BLANKLINE(); - } - break; - - case CMARK_NODE_CODE_BLOCK: - BLANKLINE(); - info = cmark_node_get_fence_info(node); - info_len = safe_strlen(info); - code = cmark_node_get_literal(node); - code_len = safe_strlen(code); - // use indented form if no info, and code doesn't - // begin or end with a blank line, and code isn't - // first thing in a list item - if (info_len == 0 && - (code_len > 2 && - !isspace(code[0]) && - !(isspace(code[code_len - 1]) && - isspace(code[code_len - 2]))) && - !(node->prev == NULL && node->parent && - node->parent->type == CMARK_NODE_ITEM)) { - LIT(" "); - cmark_strbuf_puts(renderer->prefix, " "); - OUT(cmark_node_get_literal(node), false, LITERAL); - cmark_strbuf_truncate(renderer->prefix, - renderer->prefix->size - 4); - } else { - numticks = longest_backtick_sequence(code) + 1; - if (numticks < 3) { - numticks = 3; - } - for (i = 0; i < numticks; i++) { - LIT("`"); - } - LIT(" "); - OUT(info, false, LITERAL); - CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); - CR(); - for (i = 0; i < numticks; i++) { - LIT("`"); - } - } - BLANKLINE(); - break; - - case CMARK_NODE_HTML: - BLANKLINE(); - OUT(cmark_node_get_literal(node), false, LITERAL); - BLANKLINE(); - break; - - case CMARK_NODE_HRULE: - BLANKLINE(); - LIT("-----"); - BLANKLINE(); - break; - - case CMARK_NODE_PARAGRAPH: - if (!entering) { - BLANKLINE(); - } - break; - - case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), true, NORMAL); - break; - - case CMARK_NODE_LINEBREAK: - if (!(CMARK_OPT_HARDBREAKS & options)) { - LIT("\\"); - } - CR(); - break; - - case CMARK_NODE_SOFTBREAK: - if (renderer->width == 0 && - !(CMARK_OPT_HARDBREAKS & options)) { - CR(); - } else { - OUT(" ", true, LITERAL); - } - break; - - case CMARK_NODE_CODE: - code = cmark_node_get_literal(node); - code_len = safe_strlen(code); - numticks = shortest_unused_backtick_sequence(code); - for (i = 0; i < numticks; i++) { - LIT("`"); - } - if (code_len == 0 || code[0] == '`') { - LIT(" "); - } - OUT(cmark_node_get_literal(node), true, LITERAL); - if (code_len == 0 || code[code_len - 1] == '`') { - LIT(" "); - } - for (i = 0; i < numticks; i++) { - LIT("`"); - } - break; - - case CMARK_NODE_INLINE_HTML: - OUT(cmark_node_get_literal(node), false, LITERAL); - break; - - case CMARK_NODE_STRONG: - if (entering) { - LIT("**"); - } else { - LIT("**"); - } - break; - - case CMARK_NODE_EMPH: - // If we have EMPH(EMPH(x)), we need to use *_x_* - // because **x** is STRONG(x): - if (node->parent && node->parent->type == CMARK_NODE_EMPH && - node->next == NULL && node->prev == NULL) { - emph_delim = "_"; - } else { - emph_delim = "*"; - } - if (entering) { - LIT(emph_delim); - } else { - LIT(emph_delim); - } - break; - - case CMARK_NODE_LINK: - if (is_autolink(node)) { - if (entering) { - LIT("<"); - if (strncmp(cmark_node_get_url(node), - "mailto:", 7) == 0) { - LIT((char *)cmark_node_get_url(node) + 7); - } else { - LIT((char *)cmark_node_get_url(node)); - } - LIT(">"); - // return signal to skip contents of node... - return 0; - } - } else { - if (entering) { - LIT("["); - } else { - LIT("]("); - OUT(cmark_node_get_url(node), false, URL); - title = cmark_node_get_title(node); - if (safe_strlen(title) > 0) { - LIT(" \""); - OUT(title, false, TITLE); - LIT("\""); - } - LIT(")"); - } - } - break; - - case CMARK_NODE_IMAGE: - if (entering) { - LIT("!["); - } else { - LIT("]("); - OUT(cmark_node_get_url(node), false, URL); - title = cmark_node_get_title(node); - if (safe_strlen(title) > 0) { - OUT(" \"", true, LITERAL); - OUT(title, false, TITLE); - LIT("\""); - } - LIT(")"); - } - break; - - default: - assert(false); - break; - } - - return 1; +static int S_render_node(cmark_renderer *renderer, cmark_node *node, + cmark_event_type ev_type, int options) { + cmark_node *tmp; + int list_number; + cmark_delim_type list_delim; + int numticks; + int i; + bool entering = (ev_type == CMARK_EVENT_ENTER); + const char *info, *code, *title; + size_t info_len, code_len; + char listmarker[20]; + char *emph_delim; + bufsize_t marker_width; + + // Don't adjust tight list status til we've started the list. + // Otherwise we loose the blank line between a paragraph and + // a following list. + if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) { + tmp = get_containing_block(node); + renderer->in_tight_list_item = + (tmp->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent)) || + (tmp && tmp->parent && tmp->parent->type == CMARK_NODE_ITEM && + cmark_node_get_list_tight(tmp->parent->parent)); + } + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + LIT("> "); + cmark_strbuf_puts(renderer->prefix, "> "); + } else { + cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 2); + BLANKLINE(); + } + break; + + case CMARK_NODE_LIST: + if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK || + node->next->type == CMARK_NODE_LIST)) { + // this ensures 2 blank lines after list, + // if before code block or list: + LIT("\n"); + } + break; + + case CMARK_NODE_ITEM: + if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { + marker_width = 2; + } else { + list_number = cmark_node_get_list_start(node->parent); + list_delim = cmark_node_get_list_delim(node->parent); + tmp = node; + while (tmp->prev) { + tmp = tmp->prev; + list_number += 1; + } + // we ensure a width of at least 4 so + // we get nice transition from single digits + // to double + sprintf(listmarker, "%d%s%s", list_number, + list_delim == CMARK_PAREN_DELIM ? ")" : ".", + list_number < 10 ? " " : " "); + marker_width = safe_strlen(listmarker); + } + if (entering) { + if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { + LIT("* "); + cmark_strbuf_puts(renderer->prefix, " "); + } else { + LIT(listmarker); + for (i = marker_width; i--;) { + cmark_strbuf_putc(renderer->prefix, ' '); + } + } + } else { + cmark_strbuf_truncate(renderer->prefix, + renderer->prefix->size - marker_width); + CR(); + } + break; + + case CMARK_NODE_HEADER: + if (entering) { + for (int i = cmark_node_get_header_level(node); i > 0; i--) { + LIT("#"); + } + LIT(" "); + renderer->no_wrap = true; + } else { + renderer->no_wrap = false; + BLANKLINE(); + } + break; + + case CMARK_NODE_CODE_BLOCK: + BLANKLINE(); + info = cmark_node_get_fence_info(node); + info_len = safe_strlen(info); + code = cmark_node_get_literal(node); + code_len = safe_strlen(code); + // use indented form if no info, and code doesn't + // begin or end with a blank line, and code isn't + // first thing in a list item + if (info_len == 0 && + (code_len > 2 && !isspace(code[0]) && + !(isspace(code[code_len - 1]) && isspace(code[code_len - 2]))) && + !(node->prev == NULL && node->parent && + node->parent->type == CMARK_NODE_ITEM)) { + LIT(" "); + cmark_strbuf_puts(renderer->prefix, " "); + OUT(cmark_node_get_literal(node), false, LITERAL); + cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4); + } else { + numticks = longest_backtick_sequence(code) + 1; + if (numticks < 3) { + numticks = 3; + } + for (i = 0; i < numticks; i++) { + LIT("`"); + } + LIT(" "); + OUT(info, false, LITERAL); + CR(); + OUT(cmark_node_get_literal(node), false, LITERAL); + CR(); + for (i = 0; i < numticks; i++) { + LIT("`"); + } + } + BLANKLINE(); + break; + + case CMARK_NODE_HTML: + BLANKLINE(); + OUT(cmark_node_get_literal(node), false, LITERAL); + BLANKLINE(); + break; + + case CMARK_NODE_HRULE: + BLANKLINE(); + LIT("-----"); + BLANKLINE(); + break; + + case CMARK_NODE_PARAGRAPH: + if (!entering) { + BLANKLINE(); + } + break; + + case CMARK_NODE_TEXT: + OUT(cmark_node_get_literal(node), true, NORMAL); + break; + + case CMARK_NODE_LINEBREAK: + if (!(CMARK_OPT_HARDBREAKS & options)) { + LIT("\\"); + } + CR(); + break; + + case CMARK_NODE_SOFTBREAK: + if (renderer->width == 0 && !(CMARK_OPT_HARDBREAKS & options)) { + CR(); + } else { + OUT(" ", true, LITERAL); + } + break; + + case CMARK_NODE_CODE: + code = cmark_node_get_literal(node); + code_len = safe_strlen(code); + numticks = shortest_unused_backtick_sequence(code); + for (i = 0; i < numticks; i++) { + LIT("`"); + } + if (code_len == 0 || code[0] == '`') { + LIT(" "); + } + OUT(cmark_node_get_literal(node), true, LITERAL); + if (code_len == 0 || code[code_len - 1] == '`') { + LIT(" "); + } + for (i = 0; i < numticks; i++) { + LIT("`"); + } + break; + + case CMARK_NODE_INLINE_HTML: + OUT(cmark_node_get_literal(node), false, LITERAL); + break; + + case CMARK_NODE_STRONG: + if (entering) { + LIT("**"); + } else { + LIT("**"); + } + break; + + case CMARK_NODE_EMPH: + // If we have EMPH(EMPH(x)), we need to use *_x_* + // because **x** is STRONG(x): + if (node->parent && node->parent->type == CMARK_NODE_EMPH && + node->next == NULL && node->prev == NULL) { + emph_delim = "_"; + } else { + emph_delim = "*"; + } + if (entering) { + LIT(emph_delim); + } else { + LIT(emph_delim); + } + break; + + case CMARK_NODE_LINK: + if (is_autolink(node)) { + if (entering) { + LIT("<"); + if (strncmp(cmark_node_get_url(node), "mailto:", 7) == 0) { + LIT((char *)cmark_node_get_url(node) + 7); + } else { + LIT((char *)cmark_node_get_url(node)); + } + LIT(">"); + // return signal to skip contents of node... + return 0; + } + } else { + if (entering) { + LIT("["); + } else { + LIT("]("); + OUT(cmark_node_get_url(node), false, URL); + title = cmark_node_get_title(node); + if (safe_strlen(title) > 0) { + LIT(" \""); + OUT(title, false, TITLE); + LIT("\""); + } + LIT(")"); + } + } + break; + + case CMARK_NODE_IMAGE: + if (entering) { + LIT("!["); + } else { + LIT("]("); + OUT(cmark_node_get_url(node), false, URL); + title = cmark_node_get_title(node); + if (safe_strlen(title) > 0) { + OUT(" \"", true, LITERAL); + OUT(title, false, TITLE); + LIT("\""); + } + LIT(")"); + } + break; + + default: + assert(false); + break; + } + + return 1; } -char *cmark_render_commonmark(cmark_node *root, int options, int width) -{ - if (options & CMARK_OPT_HARDBREAKS) { - // disable breaking on width, since it has - // a different meaning with OPT_HARDBREAKS - width = 0; - } - return cmark_render(root, options, width, outc, S_render_node); +char *cmark_render_commonmark(cmark_node *root, int options, int width) { + if (options & CMARK_OPT_HARDBREAKS) { + // disable breaking on width, since it has + // a different meaning with OPT_HARDBREAKS + width = 0; + } + return cmark_render(root, options, width, outc, S_render_node); } diff --git a/src/houdini.h b/src/houdini.h index b926cf362b..f738e82432 100644 --- a/src/houdini.h +++ b/src/houdini.h @@ -10,33 +10,39 @@ extern "C" { #include "buffer.h" #ifdef HAVE___BUILTIN_EXPECT -# define likely(x) __builtin_expect((x),1) -# define unlikely(x) __builtin_expect((x),0) +#define likely(x) __builtin_expect((x), 1) +#define unlikely(x) __builtin_expect((x), 0) #else -# define likely(x) (x) -# define unlikely(x) (x) +#define likely(x) (x) +#define unlikely(x) (x) #endif #ifdef HOUDINI_USE_LOCALE -# define _isxdigit(c) isxdigit(c) -# define _isdigit(c) isdigit(c) +#define _isxdigit(c) isxdigit(c) +#define _isdigit(c) isdigit(c) #else /* * Helper _isdigit methods -- do not trust the current locale * */ -# define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL) -# define _isdigit(c) ((c) >= '0' && (c) <= '9') +#define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL) +#define _isdigit(c) ((c) >= '0' && (c) <= '9') #endif -#define HOUDINI_ESCAPED_SIZE(x) (((x) * 12) / 10) +#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10) #define HOUDINI_UNESCAPED_SIZE(x) (x) -extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); -extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); -extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure); -extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); -extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); -extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size); +extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size, int secure); +extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); #ifdef __cplusplus } diff --git a/src/houdini_href_e.c b/src/houdini_href_e.c index 7fb958a8ef..9152803df8 100644 --- a/src/houdini_href_e.c +++ b/src/houdini_href_e.c @@ -30,78 +30,71 @@ * */ static const char HREF_SAFE[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -int -houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) -{ - static const uint8_t hex_chars[] = "0123456789ABCDEF"; - bufsize_t i = 0, org; - uint8_t hex_str[3]; +int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { + static const uint8_t hex_chars[] = "0123456789ABCDEF"; + bufsize_t i = 0, org; + uint8_t hex_str[3]; - hex_str[0] = '%'; + hex_str[0] = '%'; - while (i < size) { - org = i; - while (i < size && HREF_SAFE[src[i]] != 0) - i++; + while (i < size) { + org = i; + while (i < size && HREF_SAFE[src[i]] != 0) + i++; - if (likely(i > org)) - cmark_strbuf_put(ob, src + org, i - org); + if (likely(i > org)) + cmark_strbuf_put(ob, src + org, i - org); - /* escaping */ - if (i >= size) - break; + /* escaping */ + if (i >= size) + break; - switch (src[i]) { - /* amp appears all the time in URLs, but needs - * HTML-entity escaping to be inside an href */ - case '&': - cmark_strbuf_puts(ob, "&"); - break; + switch (src[i]) { + /* amp appears all the time in URLs, but needs + * HTML-entity escaping to be inside an href */ + case '&': + cmark_strbuf_puts(ob, "&"); + break; - /* the single quote is a valid URL character - * according to the standard; it needs HTML - * entity escaping too */ - case '\'': - cmark_strbuf_puts(ob, "'"); - break; + /* the single quote is a valid URL character + * according to the standard; it needs HTML + * entity escaping too */ + case '\'': + cmark_strbuf_puts(ob, "'"); + break; - /* the space can be escaped to %20 or a plus - * sign. we're going with the generic escape - * for now. the plus thing is more commonly seen - * when building GET strings */ +/* the space can be escaped to %20 or a plus + * sign. we're going with the generic escape + * for now. the plus thing is more commonly seen + * when building GET strings */ #if 0 case ' ': cmark_strbuf_putc(ob, '+'); break; #endif - /* every other character goes with a %XX escaping */ - default: - hex_str[1] = hex_chars[(src[i] >> 4) & 0xF]; - hex_str[2] = hex_chars[src[i] & 0xF]; - cmark_strbuf_put(ob, hex_str, 3); - } + /* every other character goes with a %XX escaping */ + default: + hex_str[1] = hex_chars[(src[i] >> 4) & 0xF]; + hex_str[2] = hex_chars[src[i] & 0xF]; + cmark_strbuf_put(ob, hex_str, 3); + } - i++; - } + i++; + } - return 1; + return 1; } diff --git a/src/houdini_html_e.c b/src/houdini_html_e.c index 7f4b91fcc8..0e539f0376 100644 --- a/src/houdini_html_e.c +++ b/src/houdini_html_e.c @@ -16,66 +16,51 @@ * */ static const char HTML_ESCAPE_TABLE[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -static const char *HTML_ESCAPES[] = { - "", - """, - "&", - "'", - "/", - "<", - ">" -}; +static const char *HTML_ESCAPES[] = {"", """, "&", "'", + "/", "<", ">"}; -int -houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure) -{ - bufsize_t i = 0, org, esc = 0; +int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, + int secure) { + bufsize_t i = 0, org, esc = 0; - while (i < size) { - org = i; - while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0) - i++; + while (i < size) { + org = i; + while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0) + i++; - if (i > org) - cmark_strbuf_put(ob, src + org, i - org); + if (i > org) + cmark_strbuf_put(ob, src + org, i - org); - /* escaping */ - if (unlikely(i >= size)) - break; + /* escaping */ + if (unlikely(i >= size)) + break; - /* The forward slash is only escaped in secure mode */ - if ((src[i] == '/' || src[i] == '\'') && !secure) { - cmark_strbuf_putc(ob, src[i]); - } else { - cmark_strbuf_puts(ob, HTML_ESCAPES[esc]); - } + /* The forward slash is only escaped in secure mode */ + if ((src[i] == '/' || src[i] == '\'') && !secure) { + cmark_strbuf_putc(ob, src[i]); + } else { + cmark_strbuf_puts(ob, HTML_ESCAPES[esc]); + } - i++; - } + i++; + } - return 1; + return 1; } -int -houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) -{ - return houdini_escape_html0(ob, src, size, 1); +int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { + return houdini_escape_html0(ob, src, size, 1); } diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 002357d2e1..7bb1f50bae 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -9,145 +9,140 @@ /* Binary tree lookup code for entities added by JGM */ -static unsigned char * -S_lookup(int i, int low, int hi, const unsigned char *s, int len) -{ - int j; - int cmp = strncmp((char *)s, (char *)cmark_entities[i].entity, len); - if (cmp == 0 && cmark_entities[i].entity[len] == 0) { - return (unsigned char *)cmark_entities[i].bytes; - } else if (cmp < 0 && i > low) { - j = i - ((i - low) / 2); - if (j == i) j -= 1; - return S_lookup(j, low, i - 1, s, len); - } else if (cmp > 0 && i < hi) { - j = i + ((hi - i) / 2); - if (j == i) j += 1; - return S_lookup(j, i + 1, hi, s, len); - } else { - return NULL; - } +static unsigned char *S_lookup(int i, int low, int hi, const unsigned char *s, + int len) { + int j; + int cmp = strncmp((char *)s, (char *)cmark_entities[i].entity, len); + if (cmp == 0 && cmark_entities[i].entity[len] == 0) { + return (unsigned char *)cmark_entities[i].bytes; + } else if (cmp < 0 && i > low) { + j = i - ((i - low) / 2); + if (j == i) + j -= 1; + return S_lookup(j, low, i - 1, s, len); + } else if (cmp > 0 && i < hi) { + j = i + ((hi - i) / 2); + if (j == i) + j += 1; + return S_lookup(j, i + 1, hi, s, len); + } else { + return NULL; + } } -static unsigned char * -S_lookup_entity(const unsigned char *s, int len) -{ - return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len); +static unsigned char *S_lookup_entity(const unsigned char *s, int len) { + return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len); } -bufsize_t -houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) -{ - bufsize_t i = 0; - - if (size >= 3 && src[0] == '#') { - int codepoint = 0; - int num_digits = 0; - - if (_isdigit(src[1])) { - for (i = 1; i < size && _isdigit(src[i]); ++i) { - codepoint = (codepoint * 10) + (src[i] - '0'); - - if (codepoint >= 0x110000) { - // Keep counting digits but - // avoid integer overflow. - codepoint = 0x110000; - } - } - - num_digits = i - 1; - } - - else if (src[1] == 'x' || src[1] == 'X') { - for (i = 2; i < size && _isxdigit(src[i]); ++i) { - codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9); - - if (codepoint >= 0x110000) { - // Keep counting digits but - // avoid integer overflow. - codepoint = 0x110000; - } - } - - num_digits = i - 2; - } - - if (num_digits >= 1 && num_digits <= 8 && - i < size && src[i] == ';') { - if (codepoint == 0 || - (codepoint >= 0xD800 && codepoint < 0xE000) || - codepoint >= 0x110000) { - codepoint = 0xFFFD; - } - utf8proc_encode_char(codepoint, ob); - return i + 1; - } - } - - else { - if (size > CMARK_ENTITY_MAX_LENGTH) - size = CMARK_ENTITY_MAX_LENGTH; - - for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) { - if (src[i] == ' ') - break; - - if (src[i] == ';') { - const unsigned char *entity = S_lookup_entity(src, i); - - if (entity != NULL) { - cmark_strbuf_puts(ob, (const char *)entity); - return i + 1; - } - - break; - } - } - } - - return 0; +bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size) { + bufsize_t i = 0; + + if (size >= 3 && src[0] == '#') { + int codepoint = 0; + int num_digits = 0; + + if (_isdigit(src[1])) { + for (i = 1; i < size && _isdigit(src[i]); ++i) { + codepoint = (codepoint * 10) + (src[i] - '0'); + + if (codepoint >= 0x110000) { + // Keep counting digits but + // avoid integer overflow. + codepoint = 0x110000; + } + } + + num_digits = i - 1; + } + + else if (src[1] == 'x' || src[1] == 'X') { + for (i = 2; i < size && _isxdigit(src[i]); ++i) { + codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9); + + if (codepoint >= 0x110000) { + // Keep counting digits but + // avoid integer overflow. + codepoint = 0x110000; + } + } + + num_digits = i - 2; + } + + if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') { + if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) || + codepoint >= 0x110000) { + codepoint = 0xFFFD; + } + utf8proc_encode_char(codepoint, ob); + return i + 1; + } + } + + else { + if (size > CMARK_ENTITY_MAX_LENGTH) + size = CMARK_ENTITY_MAX_LENGTH; + + for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) { + if (src[i] == ' ') + break; + + if (src[i] == ';') { + const unsigned char *entity = S_lookup_entity(src, i); + + if (entity != NULL) { + cmark_strbuf_puts(ob, (const char *)entity); + return i + 1; + } + + break; + } + } + } + + return 0; } -int -houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) -{ - bufsize_t i = 0, org, ent; +int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size) { + bufsize_t i = 0, org, ent; - while (i < size) { - org = i; - while (i < size && src[i] != '&') - i++; + while (i < size) { + org = i; + while (i < size && src[i] != '&') + i++; - if (likely(i > org)) { - if (unlikely(org == 0)) { - if (i >= size) - return 0; + if (likely(i > org)) { + if (unlikely(org == 0)) { + if (i >= size) + return 0; - cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size)); - } + cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size)); + } - cmark_strbuf_put(ob, src + org, i - org); - } + cmark_strbuf_put(ob, src + org, i - org); + } - /* escaping */ - if (i >= size) - break; + /* escaping */ + if (i >= size) + break; - i++; + i++; - ent = houdini_unescape_ent(ob, src + i, size - i); - i += ent; + ent = houdini_unescape_ent(ob, src + i, size - i); + i += ent; - /* not really an entity */ - if (ent == 0) - cmark_strbuf_putc(ob, '&'); - } + /* not really an entity */ + if (ent == 0) + cmark_strbuf_putc(ob, '&'); + } - return 1; + return 1; } -void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) -{ - if (!houdini_unescape_html(ob, src, size)) - cmark_strbuf_put(ob, src, size); +void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size) { + if (!houdini_unescape_html(ob, src, size)) + cmark_strbuf_put(ob, src, size); } diff --git a/src/html.c b/src/html.c index 7c4548d01a..e365c8cc20 100644 --- a/src/html.c +++ b/src/html.c @@ -12,324 +12,304 @@ // Functions to convert cmark_nodes to HTML strings. -static void escape_html(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) -{ - houdini_escape_html0(dest, source, length, 0); +static void escape_html(cmark_strbuf *dest, const unsigned char *source, + bufsize_t length) { + houdini_escape_html0(dest, source, length, 0); } -static inline void cr(cmark_strbuf *html) -{ - if (html->size && html->ptr[html->size - 1] != '\n') - cmark_strbuf_putc(html, '\n'); +static inline void cr(cmark_strbuf *html) { + if (html->size && html->ptr[html->size - 1] != '\n') + cmark_strbuf_putc(html, '\n'); } struct render_state { - cmark_strbuf* html; - cmark_node *plain; + cmark_strbuf *html; + cmark_node *plain; }; -static void -S_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) -{ - char buffer[100]; - if (CMARK_OPT_SOURCEPOS & options) { - sprintf(buffer, " data-sourcepos=\"%d:%d-%d:%d\"", - cmark_node_get_start_line(node), - cmark_node_get_start_column(node), - cmark_node_get_end_line(node), - cmark_node_get_end_column(node)); - cmark_strbuf_puts(html, buffer); - } +static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html, + int options) { + char buffer[100]; + if (CMARK_OPT_SOURCEPOS & options) { + sprintf(buffer, " data-sourcepos=\"%d:%d-%d:%d\"", + cmark_node_get_start_line(node), cmark_node_get_start_column(node), + cmark_node_get_end_line(node), cmark_node_get_end_column(node)); + cmark_strbuf_puts(html, buffer); + } } -static int -S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, int options) -{ - cmark_node *parent; - cmark_node *grandparent; - cmark_strbuf *html = state->html; - char start_header[] = "plain == node) { // back at original node - state->plain = NULL; - } - - if (state->plain != NULL) { - switch(node->type) { - case CMARK_NODE_TEXT: - case CMARK_NODE_CODE: - case CMARK_NODE_INLINE_HTML: - escape_html(html, node->as.literal.data, - node->as.literal.len); - break; - - case CMARK_NODE_LINEBREAK: - case CMARK_NODE_SOFTBREAK: - cmark_strbuf_putc(html, ' '); - break; - - default: - break; - } - return 1; - } - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - cr(html); - cmark_strbuf_puts(html, "\n"); - } else { - cr(html); - cmark_strbuf_puts(html, "\n"); - } - break; - - case CMARK_NODE_LIST: { - cmark_list_type list_type = node->as.list.list_type; - int start = node->as.list.start; - - if (entering) { - cr(html); - if (list_type == CMARK_BULLET_LIST) { - cmark_strbuf_puts(html, "\n"); - } else if (start == 1) { - cmark_strbuf_puts(html, "\n"); - } else { - sprintf(buffer, "
                                \n"); - } - } else { - cmark_strbuf_puts(html, - list_type == CMARK_BULLET_LIST ? - "\n" : "
                              \n"); - } - break; - } - - case CMARK_NODE_ITEM: - if (entering) { - cr(html); - cmark_strbuf_puts(html, "'); - } else { - cmark_strbuf_puts(html, "\n"); - } - break; - - case CMARK_NODE_HEADER: - if (entering) { - cr(html); - start_header[2] = '0' + node->as.header.level; - cmark_strbuf_puts(html, start_header); - S_render_sourcepos(node, html, options); - cmark_strbuf_putc(html, '>'); - } else { - end_header[3] = '0' + node->as.header.level; - cmark_strbuf_puts(html, end_header); - cmark_strbuf_puts(html, ">\n"); - } - break; - - case CMARK_NODE_CODE_BLOCK: - cr(html); - - if (!node->as.code.fenced || node->as.code.info.len == 0) { - cmark_strbuf_puts(html, ""); - } else { - bufsize_t first_tag = 0; - while (first_tag < node->as.code.info.len && - !cmark_isspace(node->as.code.info.data[first_tag])) { - first_tag += 1; - } - - cmark_strbuf_puts(html, "as.code.info.data, first_tag); - cmark_strbuf_puts(html, "\">"); - } - - escape_html(html, node->as.code.literal.data, - node->as.code.literal.len); - cmark_strbuf_puts(html, "\n"); - break; - - case CMARK_NODE_HTML: - cr(html); - if (options & CMARK_OPT_SAFE) { - cmark_strbuf_puts(html, ""); - } else { - cmark_strbuf_put(html, node->as.literal.data, - node->as.literal.len); - } - cr(html); - break; - - case CMARK_NODE_HRULE: - cr(html); - cmark_strbuf_puts(html, "\n"); - break; - - case CMARK_NODE_PARAGRAPH: - parent = cmark_node_parent(node); - grandparent = cmark_node_parent(parent); - if (grandparent != NULL && - grandparent->type == CMARK_NODE_LIST) { - tight = grandparent->as.list.tight; - } else { - tight = false; - } - if (!tight) { - if (entering) { - cr(html); - cmark_strbuf_puts(html, "'); - } else { - cmark_strbuf_puts(html, "

                              \n"); - } - } - break; - - case CMARK_NODE_TEXT: - escape_html(html, node->as.literal.data, node->as.literal.len); - break; - - case CMARK_NODE_LINEBREAK: - cmark_strbuf_puts(html, "
                              \n"); - break; - - case CMARK_NODE_SOFTBREAK: - if (options & CMARK_OPT_HARDBREAKS) { - cmark_strbuf_puts(html, "
                              \n"); - } else { - cmark_strbuf_putc(html, '\n'); - } - break; - - case CMARK_NODE_CODE: - cmark_strbuf_puts(html, ""); - escape_html(html, node->as.literal.data, node->as.literal.len); - cmark_strbuf_puts(html, ""); - break; - - case CMARK_NODE_INLINE_HTML: - if (options & CMARK_OPT_SAFE) { - cmark_strbuf_puts(html, ""); - } else { - cmark_strbuf_put(html, node->as.literal.data, - node->as.literal.len); - } - break; - - case CMARK_NODE_STRONG: - if (entering) { - cmark_strbuf_puts(html, ""); - } else { - cmark_strbuf_puts(html, ""); - } - break; - - case CMARK_NODE_EMPH: - if (entering) { - cmark_strbuf_puts(html, ""); - } else { - cmark_strbuf_puts(html, ""); - } - break; - - case CMARK_NODE_LINK: - if (entering) { - cmark_strbuf_puts(html, "as.link.url, 0))) { - houdini_escape_href(html, - node->as.link.url.data, - node->as.link.url.len); - - } - if (node->as.link.title.len) { - cmark_strbuf_puts(html, "\" title=\""); - escape_html(html, - node->as.link.title.data, - node->as.link.title.len); - } - cmark_strbuf_puts(html, "\">"); - } else { - cmark_strbuf_puts(html, ""); - } - break; - - case CMARK_NODE_IMAGE: - if (entering) { - cmark_strbuf_puts(html, "as.link.url, 0))) { - houdini_escape_href(html, - node->as.link.url.data, - node->as.link.url.len); - - } - cmark_strbuf_puts(html, "\" alt=\""); - state->plain = node; - } else { - if (node->as.link.title.len) { - cmark_strbuf_puts(html, "\" title=\""); - escape_html(html, node->as.link.title.data, - node->as.link.title.len); - } - - cmark_strbuf_puts(html, "\" />"); - } - break; - - default: - assert(false); - break; - } - - // cmark_strbuf_putc(html, 'x'); - return 1; +static int S_render_node(cmark_node *node, cmark_event_type ev_type, + struct render_state *state, int options) { + cmark_node *parent; + cmark_node *grandparent; + cmark_strbuf *html = state->html; + char start_header[] = "plain == node) { // back at original node + state->plain = NULL; + } + + if (state->plain != NULL) { + switch (node->type) { + case CMARK_NODE_TEXT: + case CMARK_NODE_CODE: + case CMARK_NODE_INLINE_HTML: + escape_html(html, node->as.literal.data, node->as.literal.len); + break; + + case CMARK_NODE_LINEBREAK: + case CMARK_NODE_SOFTBREAK: + cmark_strbuf_putc(html, ' '); + break; + + default: + break; + } + return 1; + } + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + cr(html); + cmark_strbuf_puts(html, "\n"); + } else { + cr(html); + cmark_strbuf_puts(html, "\n"); + } + break; + + case CMARK_NODE_LIST: { + cmark_list_type list_type = node->as.list.list_type; + int start = node->as.list.start; + + if (entering) { + cr(html); + if (list_type == CMARK_BULLET_LIST) { + cmark_strbuf_puts(html, "\n"); + } else if (start == 1) { + cmark_strbuf_puts(html, "\n"); + } else { + sprintf(buffer, "
                                \n"); + } + } else { + cmark_strbuf_puts(html, + list_type == CMARK_BULLET_LIST ? "\n" : "
                              \n"); + } + break; + } + + case CMARK_NODE_ITEM: + if (entering) { + cr(html); + cmark_strbuf_puts(html, "'); + } else { + cmark_strbuf_puts(html, "\n"); + } + break; + + case CMARK_NODE_HEADER: + if (entering) { + cr(html); + start_header[2] = '0' + node->as.header.level; + cmark_strbuf_puts(html, start_header); + S_render_sourcepos(node, html, options); + cmark_strbuf_putc(html, '>'); + } else { + end_header[3] = '0' + node->as.header.level; + cmark_strbuf_puts(html, end_header); + cmark_strbuf_puts(html, ">\n"); + } + break; + + case CMARK_NODE_CODE_BLOCK: + cr(html); + + if (!node->as.code.fenced || node->as.code.info.len == 0) { + cmark_strbuf_puts(html, ""); + } else { + bufsize_t first_tag = 0; + while (first_tag < node->as.code.info.len && + !cmark_isspace(node->as.code.info.data[first_tag])) { + first_tag += 1; + } + + cmark_strbuf_puts(html, "as.code.info.data, first_tag); + cmark_strbuf_puts(html, "\">"); + } + + escape_html(html, node->as.code.literal.data, node->as.code.literal.len); + cmark_strbuf_puts(html, "\n"); + break; + + case CMARK_NODE_HTML: + cr(html); + if (options & CMARK_OPT_SAFE) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + } + cr(html); + break; + + case CMARK_NODE_HRULE: + cr(html); + cmark_strbuf_puts(html, "\n"); + break; + + case CMARK_NODE_PARAGRAPH: + parent = cmark_node_parent(node); + grandparent = cmark_node_parent(parent); + if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) { + tight = grandparent->as.list.tight; + } else { + tight = false; + } + if (!tight) { + if (entering) { + cr(html); + cmark_strbuf_puts(html, "'); + } else { + cmark_strbuf_puts(html, "

                              \n"); + } + } + break; + + case CMARK_NODE_TEXT: + escape_html(html, node->as.literal.data, node->as.literal.len); + break; + + case CMARK_NODE_LINEBREAK: + cmark_strbuf_puts(html, "
                              \n"); + break; + + case CMARK_NODE_SOFTBREAK: + if (options & CMARK_OPT_HARDBREAKS) { + cmark_strbuf_puts(html, "
                              \n"); + } else { + cmark_strbuf_putc(html, '\n'); + } + break; + + case CMARK_NODE_CODE: + cmark_strbuf_puts(html, ""); + escape_html(html, node->as.literal.data, node->as.literal.len); + cmark_strbuf_puts(html, ""); + break; + + case CMARK_NODE_INLINE_HTML: + if (options & CMARK_OPT_SAFE) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + } + break; + + case CMARK_NODE_STRONG: + if (entering) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_puts(html, ""); + } + break; + + case CMARK_NODE_EMPH: + if (entering) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_puts(html, ""); + } + break; + + case CMARK_NODE_LINK: + if (entering) { + cmark_strbuf_puts(html, "as.link.url, 0))) { + houdini_escape_href(html, node->as.link.url.data, + node->as.link.url.len); + } + if (node->as.link.title.len) { + cmark_strbuf_puts(html, "\" title=\""); + escape_html(html, node->as.link.title.data, node->as.link.title.len); + } + cmark_strbuf_puts(html, "\">"); + } else { + cmark_strbuf_puts(html, ""); + } + break; + + case CMARK_NODE_IMAGE: + if (entering) { + cmark_strbuf_puts(html, "as.link.url, 0))) { + houdini_escape_href(html, node->as.link.url.data, + node->as.link.url.len); + } + cmark_strbuf_puts(html, "\" alt=\""); + state->plain = node; + } else { + if (node->as.link.title.len) { + cmark_strbuf_puts(html, "\" title=\""); + escape_html(html, node->as.link.title.data, node->as.link.title.len); + } + + cmark_strbuf_puts(html, "\" />"); + } + break; + + default: + assert(false); + break; + } + + // cmark_strbuf_putc(html, 'x'); + return 1; } -char *cmark_render_html(cmark_node *root, int options) -{ - char *result; - cmark_strbuf html = GH_BUF_INIT; - cmark_event_type ev_type; - cmark_node *cur; - struct render_state state = { &html, NULL }; - cmark_iter *iter = cmark_iter_new(root); - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state, options); - } - result = (char *)cmark_strbuf_detach(&html); - - cmark_iter_free(iter); - return result; +char *cmark_render_html(cmark_node *root, int options) { + char *result; + cmark_strbuf html = GH_BUF_INIT; + cmark_event_type ev_type; + cmark_node *cur; + struct render_state state = {&html, NULL}; + cmark_iter *iter = cmark_iter_new(root); + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + S_render_node(cur, ev_type, &state, options); + } + result = (char *)cmark_strbuf_detach(&html); + + cmark_iter_free(iter); + return result; } diff --git a/src/inlines.c b/src/inlines.c index c3d860aeab..ba78278877 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -13,7 +13,6 @@ #include "scanners.h" #include "inlines.h" - static const char *EMDASH = "\xE2\x80\x94"; static const char *ENDASH = "\xE2\x80\x93"; static const char *ELLIPSES = "\xE2\x80\xA6"; @@ -22,7 +21,6 @@ static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D"; static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98"; static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; - // Macros for creating various kinds of simple. #define make_str(s) make_literal(CMARK_NODE_TEXT, s) #define make_code(s) make_literal(CMARK_NODE_CODE, s) @@ -33,209 +31,189 @@ static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; #define make_strong() make_simple(CMARK_NODE_STRONG) typedef struct delimiter { - struct delimiter *previous; - struct delimiter *next; - cmark_node *inl_text; - bufsize_t position; - unsigned char delim_char; - bool can_open; - bool can_close; - bool active; + struct delimiter *previous; + struct delimiter *next; + cmark_node *inl_text; + bufsize_t position; + unsigned char delim_char; + bool can_open; + bool can_close; + bool active; } delimiter; typedef struct { - cmark_chunk input; - bufsize_t pos; - cmark_reference_map *refmap; - delimiter *last_delim; + cmark_chunk input; + bufsize_t pos; + cmark_reference_map *refmap; + delimiter *last_delim; } subject; -static inline bool -S_is_line_end_char(char c) -{ - return (c == '\n' || c == '\r'); +static inline bool S_is_line_end_char(char c) { + return (c == '\n' || c == '\r'); } -static delimiter* -S_insert_emph(subject *subj, delimiter *opener, delimiter *closer); +static delimiter *S_insert_emph(subject *subj, delimiter *opener, + delimiter *closer); -static int parse_inline(subject* subj, cmark_node * parent, int options); +static int parse_inline(subject *subj, cmark_node *parent, int options); static void subject_from_buf(subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. -static inline cmark_node* make_literal(cmark_node_type t, cmark_chunk s) -{ - cmark_node * e = (cmark_node *)calloc(1, sizeof(*e)); - if(e != NULL) { - e->type = t; - e->as.literal = s; - e->next = NULL; - e->prev = NULL; - e->parent = NULL; - e->first_child = NULL; - e->last_child = NULL; - // These fields aren't used for inlines: - e->start_line = 0; - e->start_column = 0; - e->end_line = 0; - } - return e; +static inline cmark_node *make_literal(cmark_node_type t, cmark_chunk s) { + cmark_node *e = (cmark_node *)calloc(1, sizeof(*e)); + if (e != NULL) { + e->type = t; + e->as.literal = s; + e->next = NULL; + e->prev = NULL; + e->parent = NULL; + e->first_child = NULL; + e->last_child = NULL; + // These fields aren't used for inlines: + e->start_line = 0; + e->start_column = 0; + e->end_line = 0; + } + return e; } // Create an inline with no value. -static inline cmark_node* make_simple(cmark_node_type t) -{ - cmark_node* e = (cmark_node *)calloc(1, sizeof(*e)); - if(e != NULL) { - e->type = t; - e->next = NULL; - e->prev = NULL; - e->parent = NULL; - e->first_child = NULL; - e->last_child = NULL; - // These fields aren't used for inlines: - e->start_line = 0; - e->start_column = 0; - e->end_line = 0; - } - return e; +static inline cmark_node *make_simple(cmark_node_type t) { + cmark_node *e = (cmark_node *)calloc(1, sizeof(*e)); + if (e != NULL) { + e->type = t; + e->next = NULL; + e->prev = NULL; + e->parent = NULL; + e->first_child = NULL; + e->last_child = NULL; + // These fields aren't used for inlines: + e->start_line = 0; + e->start_column = 0; + e->end_line = 0; + } + return e; } // Like make_str, but parses entities. -static cmark_node *make_str_with_entities(cmark_chunk *content) -{ - cmark_strbuf unescaped = GH_BUF_INIT; - - if (houdini_unescape_html(&unescaped, content->data, content->len)) { - return make_str(cmark_chunk_buf_detach(&unescaped)); - } else { - return make_str(*content); - } +static cmark_node *make_str_with_entities(cmark_chunk *content) { + cmark_strbuf unescaped = GH_BUF_INIT; + + if (houdini_unescape_html(&unescaped, content->data, content->len)) { + return make_str(cmark_chunk_buf_detach(&unescaped)); + } else { + return make_str(*content); + } } // Duplicate a chunk by creating a copy of the buffer not by reusing the // buffer like cmark_chunk_dup does. -static cmark_chunk chunk_clone(cmark_chunk *src) -{ - cmark_chunk c; - bufsize_t len = src->len; +static cmark_chunk chunk_clone(cmark_chunk *src) { + cmark_chunk c; + bufsize_t len = src->len; - c.len = len; - c.data = (unsigned char *)malloc(len + 1); - c.alloc = 1; - memcpy(c.data, src->data, len); - c.data[len] = '\0'; + c.len = len; + c.data = (unsigned char *)malloc(len + 1); + c.alloc = 1; + memcpy(c.data, src->data, len); + c.data[len] = '\0'; - return c; + return c; } -static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) -{ - cmark_strbuf buf = GH_BUF_INIT; +static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) { + cmark_strbuf buf = GH_BUF_INIT; - cmark_chunk_trim(url); + cmark_chunk_trim(url); - if (url->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } - if (is_email) - cmark_strbuf_puts(&buf, "mailto:"); + if (is_email) + cmark_strbuf_puts(&buf, "mailto:"); - houdini_unescape_html_f(&buf, url->data, url->len); - return cmark_chunk_buf_detach(&buf); + houdini_unescape_html_f(&buf, url->data, url->len); + return cmark_chunk_buf_detach(&buf); } -static inline cmark_node* make_autolink(cmark_chunk url, int is_email) -{ - cmark_node *link = make_simple(CMARK_NODE_LINK); - link->as.link.url = cmark_clean_autolink(&url, is_email); - link->as.link.title = cmark_chunk_literal(""); - cmark_node_append_child(link, make_str_with_entities(&url)); - return link; +static inline cmark_node *make_autolink(cmark_chunk url, int is_email) { + cmark_node *link = make_simple(CMARK_NODE_LINK); + link->as.link.url = cmark_clean_autolink(&url, is_email); + link->as.link.title = cmark_chunk_literal(""); + cmark_node_append_child(link, make_str_with_entities(&url)); + return link; } static void subject_from_buf(subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap) -{ - e->input.data = buffer->ptr; - e->input.len = buffer->size; - e->input.alloc = 0; - e->pos = 0; - e->refmap = refmap; - e->last_delim = NULL; + cmark_reference_map *refmap) { + e->input.data = buffer->ptr; + e->input.len = buffer->size; + e->input.alloc = 0; + e->pos = 0; + e->refmap = refmap; + e->last_delim = NULL; } -static inline int isbacktick(int c) -{ - return (c == '`'); -} +static inline int isbacktick(int c) { return (c == '`'); } -static inline unsigned char peek_char(subject *subj) -{ - // NULL bytes should have been stripped out by now. If they're - // present, it's a programming error: - assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0)); - return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; +static inline unsigned char peek_char(subject *subj) { + // NULL bytes should have been stripped out by now. If they're + // present, it's a programming error: + assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0)); + return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; } -static inline unsigned char peek_at(subject *subj, bufsize_t pos) -{ - return subj->input.data[pos]; +static inline unsigned char peek_at(subject *subj, bufsize_t pos) { + return subj->input.data[pos]; } // Return true if there are more characters in the subject. -static inline int is_eof(subject* subj) -{ - return (subj->pos >= subj->input.len); +static inline int is_eof(subject *subj) { + return (subj->pos >= subj->input.len); } // Advance the subject. Doesn't check for eof. #define advance(subj) (subj)->pos += 1 -static inline bool -skip_spaces(subject *subj) -{ - bool skipped = false; - while (peek_char(subj) == ' ' || peek_char(subj) == '\t') { - advance(subj); - skipped = true; - } - return skipped; +static inline bool skip_spaces(subject *subj) { + bool skipped = false; + while (peek_char(subj) == ' ' || peek_char(subj) == '\t') { + advance(subj); + skipped = true; + } + return skipped; } -static inline bool -skip_line_end(subject *subj) -{ - bool seen_line_end_char = false; - if (peek_char(subj) == '\r') { - advance(subj); - seen_line_end_char = true; - } - if (peek_char(subj) == '\n') { - advance(subj); - seen_line_end_char = true; - } - return seen_line_end_char || is_eof(subj); +static inline bool skip_line_end(subject *subj) { + bool seen_line_end_char = false; + if (peek_char(subj) == '\r') { + advance(subj); + seen_line_end_char = true; + } + if (peek_char(subj) == '\n') { + advance(subj); + seen_line_end_char = true; + } + return seen_line_end_char || is_eof(subj); } // Take characters while a predicate holds, and return a string. -static inline cmark_chunk take_while(subject* subj, int (*f)(int)) -{ - unsigned char c; - bufsize_t startpos = subj->pos; - bufsize_t len = 0; +static inline cmark_chunk take_while(subject *subj, int (*f)(int)) { + unsigned char c; + bufsize_t startpos = subj->pos; + bufsize_t len = 0; - while ((c = peek_char(subj)) && (*f)(c)) { - advance(subj); - len++; - } + while ((c = peek_char(subj)) && (*f)(c)) { + advance(subj); + len++; + } - return cmark_chunk_dup(&subj->input, startpos, len); + return cmark_chunk_dup(&subj->input, startpos, len); } // Try to process a backtick code span that began with a @@ -243,981 +221,944 @@ static inline cmark_chunk take_while(subject* subj, int (*f)(int)) // parsed). Return 0 if you don't find matching closing // backticks, otherwise return the position in the subject // after the closing backticks. -static bufsize_t scan_to_closing_backticks(subject* subj, bufsize_t openticklength) -{ - // read non backticks - unsigned char c; - while ((c = peek_char(subj)) && c != '`') { - advance(subj); - } - if (is_eof(subj)) { - return 0; // did not find closing ticks, return 0 - } - bufsize_t numticks = 0; - while (peek_char(subj) == '`') { - advance(subj); - numticks++; - } - if (numticks != openticklength) { - return(scan_to_closing_backticks(subj, openticklength)); - } - return (subj->pos); +static bufsize_t scan_to_closing_backticks(subject *subj, + bufsize_t openticklength) { + // read non backticks + unsigned char c; + while ((c = peek_char(subj)) && c != '`') { + advance(subj); + } + if (is_eof(subj)) { + return 0; // did not find closing ticks, return 0 + } + bufsize_t numticks = 0; + while (peek_char(subj) == '`') { + advance(subj); + numticks++; + } + if (numticks != openticklength) { + return (scan_to_closing_backticks(subj, openticklength)); + } + return (subj->pos); } // Parse backtick code section or raw backticks, return an inline. // Assumes that the subject has a backtick at the current position. -static cmark_node* handle_backticks(subject *subj) -{ - cmark_chunk openticks = take_while(subj, isbacktick); - bufsize_t startpos = subj->pos; - bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len); - - if (endpos == 0) { // not found - subj->pos = startpos; // rewind - return make_str(openticks); - } else { - cmark_strbuf buf = GH_BUF_INIT; - - cmark_strbuf_set(&buf, subj->input.data + startpos, endpos - startpos - openticks.len); - cmark_strbuf_trim(&buf); - cmark_strbuf_normalize_whitespace(&buf); - - return make_code(cmark_chunk_buf_detach(&buf)); - } +static cmark_node *handle_backticks(subject *subj) { + cmark_chunk openticks = take_while(subj, isbacktick); + bufsize_t startpos = subj->pos; + bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len); + + if (endpos == 0) { // not found + subj->pos = startpos; // rewind + return make_str(openticks); + } else { + cmark_strbuf buf = GH_BUF_INIT; + + cmark_strbuf_set(&buf, subj->input.data + startpos, + endpos - startpos - openticks.len); + cmark_strbuf_trim(&buf); + cmark_strbuf_normalize_whitespace(&buf); + + return make_code(cmark_chunk_buf_detach(&buf)); + } } // Scan ***, **, or * and return number scanned, or 0. // Advances position. -static int -scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close) -{ - int numdelims = 0; - bufsize_t before_char_pos; - int32_t after_char = 0; - int32_t before_char = 0; - int len; - bool left_flanking, right_flanking; - - if (subj->pos == 0) { - before_char = 10; - } else { - before_char_pos = subj->pos - 1; - // walk back to the beginning of the UTF_8 sequence: - while (peek_at(subj, before_char_pos) >> 6 == 2 && - before_char_pos > 0) { - before_char_pos -= 1; - } - len = utf8proc_iterate(subj->input.data + before_char_pos, - subj->pos - before_char_pos, &before_char); - if (len == -1) { - before_char = 10; - } - } - - if (c == '\'' || c == '"') { - numdelims++; - advance(subj); // limit to 1 delim for quotes - } else { - while (peek_char(subj) == c) { - numdelims++; - advance(subj); - } - } - - len = utf8proc_iterate(subj->input.data + subj->pos, - subj->input.len - subj->pos, &after_char); - if (len == -1) { - after_char = 10; - } - left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); - right_flanking = numdelims > 0 && !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && - !utf8proc_is_punctuation(after_char)); - if (c == '_') { - *can_open = left_flanking && - (!right_flanking || utf8proc_is_punctuation(before_char)); - *can_close = right_flanking && - (!left_flanking || utf8proc_is_punctuation(after_char)); - } else if (c == '\'' || c == '"') { - *can_open = left_flanking && !right_flanking; - *can_close = right_flanking; - } else { - *can_open = left_flanking; - *can_close = right_flanking; - } - return numdelims; +static int scan_delims(subject *subj, unsigned char c, bool *can_open, + bool *can_close) { + int numdelims = 0; + bufsize_t before_char_pos; + int32_t after_char = 0; + int32_t before_char = 0; + int len; + bool left_flanking, right_flanking; + + if (subj->pos == 0) { + before_char = 10; + } else { + before_char_pos = subj->pos - 1; + // walk back to the beginning of the UTF_8 sequence: + while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) { + before_char_pos -= 1; + } + len = utf8proc_iterate(subj->input.data + before_char_pos, + subj->pos - before_char_pos, &before_char); + if (len == -1) { + before_char = 10; + } + } + + if (c == '\'' || c == '"') { + numdelims++; + advance(subj); // limit to 1 delim for quotes + } else { + while (peek_char(subj) == c) { + numdelims++; + advance(subj); + } + } + + len = utf8proc_iterate(subj->input.data + subj->pos, + subj->input.len - subj->pos, &after_char); + if (len == -1) { + after_char = 10; + } + left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) && + !(utf8proc_is_punctuation(after_char) && + !utf8proc_is_space(before_char) && + !utf8proc_is_punctuation(before_char)); + right_flanking = + numdelims > 0 && !utf8proc_is_space(before_char) && + !(utf8proc_is_punctuation(before_char) && + !utf8proc_is_space(after_char) && !utf8proc_is_punctuation(after_char)); + if (c == '_') { + *can_open = left_flanking && + (!right_flanking || utf8proc_is_punctuation(before_char)); + *can_close = right_flanking && + (!left_flanking || utf8proc_is_punctuation(after_char)); + } else if (c == '\'' || c == '"') { + *can_open = left_flanking && !right_flanking; + *can_close = right_flanking; + } else { + *can_open = left_flanking; + *can_close = right_flanking; + } + return numdelims; } /* static void print_delimiters(subject *subj) { - delimiter *delim; - delim = subj->last_delim; - while (delim != NULL) { - printf("Item at stack pos %p, text pos %d: %d %d %d next(%p) prev(%p)\n", - (void*)delim, delim->position, delim->delim_char, - delim->can_open, delim->can_close, - (void*)delim->next, (void*)delim->previous); - delim = delim->previous; - } + delimiter *delim; + delim = subj->last_delim; + while (delim != NULL) { + printf("Item at stack pos %p, text pos %d: %d %d %d next(%p) +prev(%p)\n", + (void*)delim, delim->position, delim->delim_char, + delim->can_open, delim->can_close, + (void*)delim->next, (void*)delim->previous); + delim = delim->previous; + } } */ -static void remove_delimiter(subject *subj, delimiter *delim) -{ - if (delim == NULL) return; - if (delim->next == NULL) { - // end of list: - assert(delim == subj->last_delim); - subj->last_delim = delim->previous; - } else { - delim->next->previous = delim->previous; - } - if (delim->previous != NULL) { - delim->previous->next = delim->next; - } - free(delim); +static void remove_delimiter(subject *subj, delimiter *delim) { + if (delim == NULL) + return; + if (delim->next == NULL) { + // end of list: + assert(delim == subj->last_delim); + subj->last_delim = delim->previous; + } else { + delim->next->previous = delim->previous; + } + if (delim->previous != NULL) { + delim->previous->next = delim->next; + } + free(delim); } static void push_delimiter(subject *subj, unsigned char c, bool can_open, - bool can_close, cmark_node *inl_text) -{ - delimiter *delim = - (delimiter*)malloc(sizeof(delimiter)); - if (delim == NULL) { - return; - } - delim->delim_char = c; - delim->can_open = can_open; - delim->can_close = can_close; - delim->inl_text = inl_text; - delim->previous = subj->last_delim; - delim->next = NULL; - if (delim->previous != NULL) { - delim->previous->next = delim; - } - delim->position = subj->pos; - delim->active = true; - subj->last_delim = delim; + bool can_close, cmark_node *inl_text) { + delimiter *delim = (delimiter *)malloc(sizeof(delimiter)); + if (delim == NULL) { + return; + } + delim->delim_char = c; + delim->can_open = can_open; + delim->can_close = can_close; + delim->inl_text = inl_text; + delim->previous = subj->last_delim; + delim->next = NULL; + if (delim->previous != NULL) { + delim->previous->next = delim; + } + delim->position = subj->pos; + delim->active = true; + subj->last_delim = delim; } // Assumes the subject has a c at the current position. -static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart) -{ - bufsize_t numdelims; - cmark_node * inl_text; - bool can_open, can_close; - cmark_chunk contents; - - numdelims = scan_delims(subj, c, &can_open, &can_close); - - if (c == '\'' && smart) { - contents = cmark_chunk_literal(RIGHTSINGLEQUOTE); - } else if (c == '"' && smart) { - contents = cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE); - } else { - contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); - } - - inl_text = make_str(contents); - - if ((can_open || can_close) && - (!(c == '\'' || c == '"') || smart)) { - push_delimiter(subj, c, can_open, can_close, inl_text); - } - - return inl_text; +static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { + bufsize_t numdelims; + cmark_node *inl_text; + bool can_open, can_close; + cmark_chunk contents; + + numdelims = scan_delims(subj, c, &can_open, &can_close); + + if (c == '\'' && smart) { + contents = cmark_chunk_literal(RIGHTSINGLEQUOTE); + } else if (c == '"' && smart) { + contents = + cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE); + } else { + contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); + } + + inl_text = make_str(contents); + + if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { + push_delimiter(subj, c, can_open, can_close, inl_text); + } + + return inl_text; } // Assumes we have a hyphen at the current position. -static cmark_node* handle_hyphen(subject* subj, bool smart) -{ - int startpos = subj->pos; - - advance(subj); - - if (!smart || peek_char(subj) != '-') { - return make_str(cmark_chunk_literal("-")); - } - - while (smart && peek_char(subj) == '-') { - advance(subj); - } - - int numhyphens = subj->pos - startpos; - int en_count = 0; - int em_count = 0; - int i; - cmark_strbuf buf = GH_BUF_INIT; - - if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes - em_count = numhyphens / 3; - } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes - en_count = numhyphens / 2; - } else if (numhyphens % 3 == 2) { // use one en dash at end - en_count = 1; - em_count = (numhyphens - 2) / 3; - } else { // use two en dashes at the end - en_count = 2; - em_count = (numhyphens - 4) / 3; - } - - for (i = em_count; i > 0; i--) { - cmark_strbuf_puts(&buf, EMDASH); - } - - for (i = en_count; i > 0; i--) { - cmark_strbuf_puts(&buf, ENDASH); - } - - return make_str(cmark_chunk_buf_detach(&buf)); +static cmark_node *handle_hyphen(subject *subj, bool smart) { + int startpos = subj->pos; + + advance(subj); + + if (!smart || peek_char(subj) != '-') { + return make_str(cmark_chunk_literal("-")); + } + + while (smart && peek_char(subj) == '-') { + advance(subj); + } + + int numhyphens = subj->pos - startpos; + int en_count = 0; + int em_count = 0; + int i; + cmark_strbuf buf = GH_BUF_INIT; + + if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes + em_count = numhyphens / 3; + } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes + en_count = numhyphens / 2; + } else if (numhyphens % 3 == 2) { // use one en dash at end + en_count = 1; + em_count = (numhyphens - 2) / 3; + } else { // use two en dashes at the end + en_count = 2; + em_count = (numhyphens - 4) / 3; + } + + for (i = em_count; i > 0; i--) { + cmark_strbuf_puts(&buf, EMDASH); + } + + for (i = en_count; i > 0; i--) { + cmark_strbuf_puts(&buf, ENDASH); + } + + return make_str(cmark_chunk_buf_detach(&buf)); } // Assumes we have a period at the current position. -static cmark_node* handle_period(subject* subj, bool smart) -{ - advance(subj); - if (smart && peek_char(subj) == '.') { - advance(subj); - if (peek_char(subj) == '.') { - advance(subj); - return make_str(cmark_chunk_literal(ELLIPSES)); - } else { - return make_str(cmark_chunk_literal("..")); - } - } else { - return make_str(cmark_chunk_literal(".")); - } +static cmark_node *handle_period(subject *subj, bool smart) { + advance(subj); + if (smart && peek_char(subj) == '.') { + advance(subj); + if (peek_char(subj) == '.') { + advance(subj); + return make_str(cmark_chunk_literal(ELLIPSES)); + } else { + return make_str(cmark_chunk_literal("..")); + } + } else { + return make_str(cmark_chunk_literal(".")); + } } -static void process_emphasis(subject *subj, delimiter *stack_bottom) -{ - delimiter *closer = subj->last_delim; - delimiter *opener; - delimiter *old_closer; - bool opener_found; - delimiter *openers_bottom[128]; - - // initialize openers_bottom: - openers_bottom['*'] = stack_bottom; - openers_bottom['_'] = stack_bottom; - openers_bottom['\''] = stack_bottom; - openers_bottom['"'] = stack_bottom; - - // move back to first relevant delim. - while (closer != NULL && closer->previous != stack_bottom) { - closer = closer->previous; - } - - // now move forward, looking for closers, and handling each - while (closer != NULL) { - if (closer->can_close && - (closer->delim_char == '*' || closer->delim_char == '_' || - closer->delim_char == '"' || closer->delim_char == '\'')) { - // Now look backwards for first matching opener: - opener = closer->previous; - opener_found = false; - while (opener != NULL && opener != stack_bottom && - opener != openers_bottom[closer->delim_char]) { - if (opener->delim_char == closer->delim_char && - opener->can_open) { - opener_found = true; - break; - } - opener = opener->previous; - } - old_closer = closer; - if (closer->delim_char == '*' || closer->delim_char == '_') { - if (opener_found) { - closer = S_insert_emph(subj, opener, closer); - } else { - closer = closer->next; - } - } else if (closer->delim_char == '\'') { - cmark_chunk_free(&closer->inl_text->as.literal); - closer->inl_text->as.literal = - cmark_chunk_literal(RIGHTSINGLEQUOTE); - if (opener_found) { - cmark_chunk_free(&opener->inl_text->as.literal); - opener->inl_text->as.literal = - cmark_chunk_literal(LEFTSINGLEQUOTE); - } - closer = closer->next; - } else if (closer->delim_char == '"') { - cmark_chunk_free(&closer->inl_text->as.literal); - closer->inl_text->as.literal = - cmark_chunk_literal(RIGHTDOUBLEQUOTE); - if (opener_found) { - cmark_chunk_free(&opener->inl_text->as.literal); - opener->inl_text->as.literal = - cmark_chunk_literal(LEFTDOUBLEQUOTE); - } - closer = closer->next; - } - if (!opener_found) { - // set lower bound for future searches for openers: - openers_bottom[old_closer->delim_char] = old_closer->previous; - if (!old_closer->can_open) { - // we can remove a closer that can't be an - // opener, once we've seen there's no - // matching opener: - remove_delimiter(subj, old_closer); - } - } - } else { - closer = closer->next; - } - } - // free all delimiters in list until stack_bottom: - while (subj->last_delim != stack_bottom) { - remove_delimiter(subj, subj->last_delim); - } +static void process_emphasis(subject *subj, delimiter *stack_bottom) { + delimiter *closer = subj->last_delim; + delimiter *opener; + delimiter *old_closer; + bool opener_found; + delimiter *openers_bottom[128]; + + // initialize openers_bottom: + openers_bottom['*'] = stack_bottom; + openers_bottom['_'] = stack_bottom; + openers_bottom['\''] = stack_bottom; + openers_bottom['"'] = stack_bottom; + + // move back to first relevant delim. + while (closer != NULL && closer->previous != stack_bottom) { + closer = closer->previous; + } + + // now move forward, looking for closers, and handling each + while (closer != NULL) { + if (closer->can_close && + (closer->delim_char == '*' || closer->delim_char == '_' || + closer->delim_char == '"' || closer->delim_char == '\'')) { + // Now look backwards for first matching opener: + opener = closer->previous; + opener_found = false; + while (opener != NULL && opener != stack_bottom && + opener != openers_bottom[closer->delim_char]) { + if (opener->delim_char == closer->delim_char && opener->can_open) { + opener_found = true; + break; + } + opener = opener->previous; + } + old_closer = closer; + if (closer->delim_char == '*' || closer->delim_char == '_') { + if (opener_found) { + closer = S_insert_emph(subj, opener, closer); + } else { + closer = closer->next; + } + } else if (closer->delim_char == '\'') { + cmark_chunk_free(&closer->inl_text->as.literal); + closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE); + if (opener_found) { + cmark_chunk_free(&opener->inl_text->as.literal); + opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE); + } + closer = closer->next; + } else if (closer->delim_char == '"') { + cmark_chunk_free(&closer->inl_text->as.literal); + closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE); + if (opener_found) { + cmark_chunk_free(&opener->inl_text->as.literal); + opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE); + } + closer = closer->next; + } + if (!opener_found) { + // set lower bound for future searches for openers: + openers_bottom[old_closer->delim_char] = old_closer->previous; + if (!old_closer->can_open) { + // we can remove a closer that can't be an + // opener, once we've seen there's no + // matching opener: + remove_delimiter(subj, old_closer); + } + } + } else { + closer = closer->next; + } + } + // free all delimiters in list until stack_bottom: + while (subj->last_delim != stack_bottom) { + remove_delimiter(subj, subj->last_delim); + } } -static delimiter* -S_insert_emph(subject *subj, delimiter *opener, delimiter *closer) -{ - delimiter *delim, *tmp_delim; - bufsize_t use_delims; - cmark_node *opener_inl = opener->inl_text; - cmark_node *closer_inl = closer->inl_text; - bufsize_t opener_num_chars = opener_inl->as.literal.len; - bufsize_t closer_num_chars = closer_inl->as.literal.len; - cmark_node *tmp, *emph, *first_child, *last_child; - - // calculate the actual number of characters used from this closer - if (closer_num_chars < 3 || opener_num_chars < 3) { - use_delims = closer_num_chars <= opener_num_chars ? - closer_num_chars : opener_num_chars; - } else { // closer and opener both have >= 3 characters - use_delims = closer_num_chars % 2 == 0 ? 2 : 1; - } - - // remove used characters from associated inlines. - opener_num_chars -= use_delims; - closer_num_chars -= use_delims; - opener_inl->as.literal.len = opener_num_chars; - closer_inl->as.literal.len = closer_num_chars; - - // free delimiters between opener and closer - delim = closer->previous; - while (delim != NULL && delim != opener) { - tmp_delim = delim->previous; - remove_delimiter(subj, delim); - delim = tmp_delim; - } - - first_child = opener_inl->next; - last_child = closer_inl->prev; - - // if opener has 0 characters, remove it and its associated inline - if (opener_num_chars == 0) { - // replace empty opener inline with emph - cmark_chunk_free(&(opener_inl->as.literal)); - emph = opener_inl; - emph->type = use_delims == 1 ? - CMARK_NODE_EMPH : CMARK_NODE_STRONG; - // remove opener from list - remove_delimiter(subj, opener); - } else { - // create new emph or strong, and splice it in to our inlines - // between the opener and closer - emph = use_delims == 1 ? make_emph() : make_strong(); - emph->parent = opener_inl->parent; - emph->prev = opener_inl; - opener_inl->next = emph; - } - - // push children below emph - emph->next = closer_inl; - closer_inl->prev = emph; - emph->first_child = first_child; - emph->last_child = last_child; - - // fix children pointers - first_child->prev = NULL; - last_child->next = NULL; - for (tmp = first_child; tmp != NULL; tmp = tmp->next) { - tmp->parent = emph; - } - - // if closer has 0 characters, remove it and its associated inline - if (closer_num_chars == 0) { - // remove empty closer inline - cmark_node_free(closer_inl); - // remove closer from list - tmp_delim = closer->next; - remove_delimiter(subj, closer); - closer = tmp_delim; - } - - return closer; +static delimiter *S_insert_emph(subject *subj, delimiter *opener, + delimiter *closer) { + delimiter *delim, *tmp_delim; + bufsize_t use_delims; + cmark_node *opener_inl = opener->inl_text; + cmark_node *closer_inl = closer->inl_text; + bufsize_t opener_num_chars = opener_inl->as.literal.len; + bufsize_t closer_num_chars = closer_inl->as.literal.len; + cmark_node *tmp, *emph, *first_child, *last_child; + + // calculate the actual number of characters used from this closer + if (closer_num_chars < 3 || opener_num_chars < 3) { + use_delims = closer_num_chars <= opener_num_chars ? closer_num_chars + : opener_num_chars; + } else { // closer and opener both have >= 3 characters + use_delims = closer_num_chars % 2 == 0 ? 2 : 1; + } + + // remove used characters from associated inlines. + opener_num_chars -= use_delims; + closer_num_chars -= use_delims; + opener_inl->as.literal.len = opener_num_chars; + closer_inl->as.literal.len = closer_num_chars; + + // free delimiters between opener and closer + delim = closer->previous; + while (delim != NULL && delim != opener) { + tmp_delim = delim->previous; + remove_delimiter(subj, delim); + delim = tmp_delim; + } + + first_child = opener_inl->next; + last_child = closer_inl->prev; + + // if opener has 0 characters, remove it and its associated inline + if (opener_num_chars == 0) { + // replace empty opener inline with emph + cmark_chunk_free(&(opener_inl->as.literal)); + emph = opener_inl; + emph->type = use_delims == 1 ? CMARK_NODE_EMPH : CMARK_NODE_STRONG; + // remove opener from list + remove_delimiter(subj, opener); + } else { + // create new emph or strong, and splice it in to our inlines + // between the opener and closer + emph = use_delims == 1 ? make_emph() : make_strong(); + emph->parent = opener_inl->parent; + emph->prev = opener_inl; + opener_inl->next = emph; + } + + // push children below emph + emph->next = closer_inl; + closer_inl->prev = emph; + emph->first_child = first_child; + emph->last_child = last_child; + + // fix children pointers + first_child->prev = NULL; + last_child->next = NULL; + for (tmp = first_child; tmp != NULL; tmp = tmp->next) { + tmp->parent = emph; + } + + // if closer has 0 characters, remove it and its associated inline + if (closer_num_chars == 0) { + // remove empty closer inline + cmark_node_free(closer_inl); + // remove closer from list + tmp_delim = closer->next; + remove_delimiter(subj, closer); + closer = tmp_delim; + } + + return closer; } // Parse backslash-escape or just a backslash, returning an inline. -static cmark_node* handle_backslash(subject *subj) -{ - advance(subj); - unsigned char nextchar = peek_char(subj); - if (cmark_ispunct(nextchar)) { // only ascii symbols and newline can be escaped - advance(subj); - return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); - } else if (!is_eof(subj) && skip_line_end(subj)) { - return make_linebreak(); - } else { - return make_str(cmark_chunk_literal("\\")); - } +static cmark_node *handle_backslash(subject *subj) { + advance(subj); + unsigned char nextchar = peek_char(subj); + if (cmark_ispunct( + nextchar)) { // only ascii symbols and newline can be escaped + advance(subj); + return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); + } else if (!is_eof(subj) && skip_line_end(subj)) { + return make_linebreak(); + } else { + return make_str(cmark_chunk_literal("\\")); + } } // Parse an entity or a regular "&" string. // Assumes the subject has an '&' character at the current position. -static cmark_node* handle_entity(subject* subj) -{ - cmark_strbuf ent = GH_BUF_INIT; - bufsize_t len; +static cmark_node *handle_entity(subject *subj) { + cmark_strbuf ent = GH_BUF_INIT; + bufsize_t len; - advance(subj); + advance(subj); - len = houdini_unescape_ent(&ent, - subj->input.data + subj->pos, - subj->input.len - subj->pos - ); + len = houdini_unescape_ent(&ent, subj->input.data + subj->pos, + subj->input.len - subj->pos); - if (len == 0) - return make_str(cmark_chunk_literal("&")); + if (len == 0) + return make_str(cmark_chunk_literal("&")); - subj->pos += len; - return make_str(cmark_chunk_buf_detach(&ent)); + subj->pos += len; + return make_str(cmark_chunk_buf_detach(&ent)); } // Clean a URL: remove surrounding whitespace and surrounding <>, // and remove \ that escape punctuation. -cmark_chunk cmark_clean_url(cmark_chunk *url) -{ - cmark_strbuf buf = GH_BUF_INIT; +cmark_chunk cmark_clean_url(cmark_chunk *url) { + cmark_strbuf buf = GH_BUF_INIT; - cmark_chunk_trim(url); + cmark_chunk_trim(url); - if (url->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } - if (url->data[0] == '<' && url->data[url->len - 1] == '>') { - houdini_unescape_html_f(&buf, url->data + 1, url->len - 2); - } else { - houdini_unescape_html_f(&buf, url->data, url->len); - } + if (url->data[0] == '<' && url->data[url->len - 1] == '>') { + houdini_unescape_html_f(&buf, url->data + 1, url->len - 2); + } else { + houdini_unescape_html_f(&buf, url->data, url->len); + } - cmark_strbuf_unescape(&buf); - return cmark_chunk_buf_detach(&buf); + cmark_strbuf_unescape(&buf); + return cmark_chunk_buf_detach(&buf); } -cmark_chunk cmark_clean_title(cmark_chunk *title) -{ - cmark_strbuf buf = GH_BUF_INIT; - unsigned char first, last; - - if (title->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } - - first = title->data[0]; - last = title->data[title->len - 1]; - - // remove surrounding quotes if any: - if ((first == '\'' && last == '\'') || - (first == '(' && last == ')') || - (first == '"' && last == '"')) { - houdini_unescape_html_f(&buf, title->data + 1, title->len - 2); - } else { - houdini_unescape_html_f(&buf, title->data, title->len); - } - - cmark_strbuf_unescape(&buf); - return cmark_chunk_buf_detach(&buf); +cmark_chunk cmark_clean_title(cmark_chunk *title) { + cmark_strbuf buf = GH_BUF_INIT; + unsigned char first, last; + + if (title->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } + + first = title->data[0]; + last = title->data[title->len - 1]; + + // remove surrounding quotes if any: + if ((first == '\'' && last == '\'') || (first == '(' && last == ')') || + (first == '"' && last == '"')) { + houdini_unescape_html_f(&buf, title->data + 1, title->len - 2); + } else { + houdini_unescape_html_f(&buf, title->data, title->len); + } + + cmark_strbuf_unescape(&buf); + return cmark_chunk_buf_detach(&buf); } // Parse an autolink or HTML tag. // Assumes the subject has a '<' character at the current position. -static cmark_node* handle_pointy_brace(subject* subj) -{ - bufsize_t matchlen = 0; - cmark_chunk contents; - - advance(subj); // advance past first < - - // first try to match a URL autolink - matchlen = scan_autolink_uri(&subj->input, subj->pos); - if (matchlen > 0) { - contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); - subj->pos += matchlen; - - return make_autolink(contents, 0); - } - - // next try to match an email autolink - matchlen = scan_autolink_email(&subj->input, subj->pos); - if (matchlen > 0) { - contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); - subj->pos += matchlen; - - return make_autolink(contents, 1); - } - - // finally, try to match an html tag - matchlen = scan_html_tag(&subj->input, subj->pos); - if (matchlen > 0) { - contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); - subj->pos += matchlen; - return make_raw_html(contents); - } - - // if nothing matches, just return the opening <: - return make_str(cmark_chunk_literal("<")); +static cmark_node *handle_pointy_brace(subject *subj) { + bufsize_t matchlen = 0; + cmark_chunk contents; + + advance(subj); // advance past first < + + // first try to match a URL autolink + matchlen = scan_autolink_uri(&subj->input, subj->pos); + if (matchlen > 0) { + contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); + subj->pos += matchlen; + + return make_autolink(contents, 0); + } + + // next try to match an email autolink + matchlen = scan_autolink_email(&subj->input, subj->pos); + if (matchlen > 0) { + contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); + subj->pos += matchlen; + + return make_autolink(contents, 1); + } + + // finally, try to match an html tag + matchlen = scan_html_tag(&subj->input, subj->pos); + if (matchlen > 0) { + contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); + subj->pos += matchlen; + return make_raw_html(contents); + } + + // if nothing matches, just return the opening <: + return make_str(cmark_chunk_literal("<")); } // Parse a link label. Returns 1 if successful. // Note: unescaped brackets are not allowed in labels. // The label begins with `[` and ends with the first `]` character // encountered. Backticks in labels do not start code spans. -static int link_label(subject* subj, cmark_chunk *raw_label) -{ - bufsize_t startpos = subj->pos; - int length = 0; - unsigned char c; - - // advance past [ - if (peek_char(subj) == '[') { - advance(subj); - } else { - return 0; - } - - while ((c = peek_char(subj)) && c != '[' && c != ']') { - if (c == '\\') { - advance(subj); - length++; - if (cmark_ispunct(peek_char(subj))) { - advance(subj); - length++; - } - } else { - advance(subj); - length++; - } - if (length > MAX_LINK_LABEL_LENGTH) { - goto noMatch; - } - } - - if (c == ']') { // match found - *raw_label = cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1)); - cmark_chunk_trim(raw_label); - advance(subj); // advance past ] - return 1; - } +static int link_label(subject *subj, cmark_chunk *raw_label) { + bufsize_t startpos = subj->pos; + int length = 0; + unsigned char c; + + // advance past [ + if (peek_char(subj) == '[') { + advance(subj); + } else { + return 0; + } + + while ((c = peek_char(subj)) && c != '[' && c != ']') { + if (c == '\\') { + advance(subj); + length++; + if (cmark_ispunct(peek_char(subj))) { + advance(subj); + length++; + } + } else { + advance(subj); + length++; + } + if (length > MAX_LINK_LABEL_LENGTH) { + goto noMatch; + } + } + + if (c == ']') { // match found + *raw_label = + cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1)); + cmark_chunk_trim(raw_label); + advance(subj); // advance past ] + return 1; + } noMatch: - subj->pos = startpos; // rewind - return 0; - + subj->pos = startpos; // rewind + return 0; } // Return a link, an image, or a literal close bracket. -static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent) -{ - bufsize_t initial_pos; - bufsize_t starturl, endurl, starttitle, endtitle, endall; - bufsize_t n; - bufsize_t sps; - cmark_reference *ref; - bool is_image = false; - cmark_chunk url_chunk, title_chunk; - cmark_chunk url, title; - delimiter *opener; - cmark_node *link_text; - cmark_node *inl; - cmark_chunk raw_label; - int found_label; - - advance(subj); // advance past ] - initial_pos = subj->pos; - - // look through list of delimiters for a [ or ! - opener = subj->last_delim; - while (opener) { - if (opener->delim_char == '[' || opener->delim_char == '!') { - break; - } - opener = opener->previous; - } - - if (opener == NULL) { - return make_str(cmark_chunk_literal("]")); - } - - if (!opener->active) { - // take delimiter off stack - remove_delimiter(subj, opener); - return make_str(cmark_chunk_literal("]")); - } - - // If we got here, we matched a potential link/image text. - is_image = opener->delim_char == '!'; - link_text = opener->inl_text->next; - - // Now we check to see if it's a link/image. - - // First, look for an inline link. - if (peek_char(subj) == '(' && - ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && - ((n = scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) { - - // try to parse an explicit link: - starturl = subj->pos + 1 + sps; // after ( - endurl = starturl + n; - starttitle = endurl + scan_spacechars(&subj->input, endurl); - - // ensure there are spaces btw url and title - endtitle = (starttitle == endurl) ? starttitle : - starttitle + scan_link_title(&subj->input, starttitle); - - endall = endtitle + scan_spacechars(&subj->input, endtitle); - - if (peek_at(subj, endall) == ')') { - subj->pos = endall + 1; - - url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl); - title_chunk = cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle); - url = cmark_clean_url(&url_chunk); - title = cmark_clean_title(&title_chunk); - cmark_chunk_free(&url_chunk); - cmark_chunk_free(&title_chunk); - goto match; - - } else { - goto noMatch; - } - } - - // Next, look for a following [link label] that matches in refmap. - // skip spaces - subj->pos = subj->pos + scan_spacechars(&subj->input, subj->pos); - raw_label = cmark_chunk_literal(""); - found_label = link_label(subj, &raw_label); - if (!found_label || raw_label.len == 0) { - cmark_chunk_free(&raw_label); - raw_label = cmark_chunk_dup(&subj->input, opener->position, - initial_pos - opener->position - 1); - } - - if (!found_label) { - // If we have a shortcut reference link, back up - // to before the spacse we skipped. - subj->pos = initial_pos; - } - - ref = cmark_reference_lookup(subj->refmap, &raw_label); - cmark_chunk_free(&raw_label); - - if (ref != NULL) { // found - url = chunk_clone(&ref->url); - title = chunk_clone(&ref->title); - goto match; - } else { - goto noMatch; - } +static cmark_node *handle_close_bracket(subject *subj, cmark_node *parent) { + bufsize_t initial_pos; + bufsize_t starturl, endurl, starttitle, endtitle, endall; + bufsize_t n; + bufsize_t sps; + cmark_reference *ref; + bool is_image = false; + cmark_chunk url_chunk, title_chunk; + cmark_chunk url, title; + delimiter *opener; + cmark_node *link_text; + cmark_node *inl; + cmark_chunk raw_label; + int found_label; + + advance(subj); // advance past ] + initial_pos = subj->pos; + + // look through list of delimiters for a [ or ! + opener = subj->last_delim; + while (opener) { + if (opener->delim_char == '[' || opener->delim_char == '!') { + break; + } + opener = opener->previous; + } + + if (opener == NULL) { + return make_str(cmark_chunk_literal("]")); + } + + if (!opener->active) { + // take delimiter off stack + remove_delimiter(subj, opener); + return make_str(cmark_chunk_literal("]")); + } + + // If we got here, we matched a potential link/image text. + is_image = opener->delim_char == '!'; + link_text = opener->inl_text->next; + + // Now we check to see if it's a link/image. + + // First, look for an inline link. + if (peek_char(subj) == '(' && + ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && + ((n = scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) { + + // try to parse an explicit link: + starturl = subj->pos + 1 + sps; // after ( + endurl = starturl + n; + starttitle = endurl + scan_spacechars(&subj->input, endurl); + + // ensure there are spaces btw url and title + endtitle = (starttitle == endurl) + ? starttitle + : starttitle + scan_link_title(&subj->input, starttitle); + + endall = endtitle + scan_spacechars(&subj->input, endtitle); + + if (peek_at(subj, endall) == ')') { + subj->pos = endall + 1; + + url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl); + title_chunk = + cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle); + url = cmark_clean_url(&url_chunk); + title = cmark_clean_title(&title_chunk); + cmark_chunk_free(&url_chunk); + cmark_chunk_free(&title_chunk); + goto match; + + } else { + goto noMatch; + } + } + + // Next, look for a following [link label] that matches in refmap. + // skip spaces + subj->pos = subj->pos + scan_spacechars(&subj->input, subj->pos); + raw_label = cmark_chunk_literal(""); + found_label = link_label(subj, &raw_label); + if (!found_label || raw_label.len == 0) { + cmark_chunk_free(&raw_label); + raw_label = cmark_chunk_dup(&subj->input, opener->position, + initial_pos - opener->position - 1); + } + + if (!found_label) { + // If we have a shortcut reference link, back up + // to before the spacse we skipped. + subj->pos = initial_pos; + } + + ref = cmark_reference_lookup(subj->refmap, &raw_label); + cmark_chunk_free(&raw_label); + + if (ref != NULL) { // found + url = chunk_clone(&ref->url); + title = chunk_clone(&ref->title); + goto match; + } else { + goto noMatch; + } noMatch: - // If we fall through to here, it means we didn't match a link: - remove_delimiter(subj, opener); // remove this opener from delimiter list - subj->pos = initial_pos; - return make_str(cmark_chunk_literal("]")); + // If we fall through to here, it means we didn't match a link: + remove_delimiter(subj, opener); // remove this opener from delimiter list + subj->pos = initial_pos; + return make_str(cmark_chunk_literal("]")); match: - inl = opener->inl_text; - inl->type = is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK; - cmark_chunk_free(&inl->as.literal); - inl->first_child = link_text; - process_emphasis(subj, opener); - inl->as.link.url = url; - inl->as.link.title = title; - inl->next = NULL; - if (link_text) { - cmark_node *tmp; - link_text->prev = NULL; - for (tmp = link_text; tmp->next != NULL; tmp = tmp->next) { - tmp->parent = inl; - } - tmp->parent = inl; - inl->last_child = tmp; - } - parent->last_child = inl; - - // Now, if we have a link, we also want to deactivate earlier link - // delimiters. (This code can be removed if we decide to allow links - // inside links.) - remove_delimiter(subj, opener); - if (!is_image) { - opener = subj->last_delim; - while (opener != NULL) { - if (opener->delim_char == '[') { - if (!opener->active) { - break; - } else { - opener->active = false; - } - } - opener = opener->previous; - } - } - - return NULL; + inl = opener->inl_text; + inl->type = is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK; + cmark_chunk_free(&inl->as.literal); + inl->first_child = link_text; + process_emphasis(subj, opener); + inl->as.link.url = url; + inl->as.link.title = title; + inl->next = NULL; + if (link_text) { + cmark_node *tmp; + link_text->prev = NULL; + for (tmp = link_text; tmp->next != NULL; tmp = tmp->next) { + tmp->parent = inl; + } + tmp->parent = inl; + inl->last_child = tmp; + } + parent->last_child = inl; + + // Now, if we have a link, we also want to deactivate earlier link + // delimiters. (This code can be removed if we decide to allow links + // inside links.) + remove_delimiter(subj, opener); + if (!is_image) { + opener = subj->last_delim; + while (opener != NULL) { + if (opener->delim_char == '[') { + if (!opener->active) { + break; + } else { + opener->active = false; + } + } + opener = opener->previous; + } + } + + return NULL; } // Parse a hard or soft linebreak, returning an inline. // Assumes the subject has a newline at the current position. -static cmark_node* handle_newline(subject *subj) -{ - bufsize_t nlpos = subj->pos; - // skip over newline - advance(subj); - // skip spaces at beginning of line - skip_spaces(subj); - if (nlpos > 1 && - peek_at(subj, nlpos - 1) == ' ' && - peek_at(subj, nlpos - 2) == ' ') { - return make_linebreak(); - } else { - return make_softbreak(); - } +static cmark_node *handle_newline(subject *subj) { + bufsize_t nlpos = subj->pos; + // skip over newline + advance(subj); + // skip spaces at beginning of line + skip_spaces(subj); + if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && + peek_at(subj, nlpos - 2) == ' ') { + return make_linebreak(); + } else { + return make_softbreak(); + } } -static bufsize_t subject_find_special_char(subject *subj, int options) -{ - // "\r\n\\`&_*[]pos + 1; - - while (n < subj->input.len) { - if (SPECIAL_CHARS[subj->input.data[n]]) - return n; - if (options & CMARK_OPT_SMART && - SMART_PUNCT_CHARS[subj->input.data[n]]) - return n; - n++; - } - - return subj->input.len; +static bufsize_t subject_find_special_char(subject *subj, int options) { + // "\r\n\\`&_*[]pos + 1; + + while (n < subj->input.len) { + if (SPECIAL_CHARS[subj->input.data[n]]) + return n; + if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]]) + return n; + n++; + } + + return subj->input.len; } // Parse an inline, advancing subject, and add it as a child of parent. // Return 0 if no inline can be parsed, 1 otherwise. -static int parse_inline(subject* subj, cmark_node * parent, int options) -{ - cmark_node* new_inl = NULL; - cmark_chunk contents; - unsigned char c; - bufsize_t endpos; - c = peek_char(subj); - if (c == 0) { - return 0; - } - switch(c) { - case '\r': - case '\n': - new_inl = handle_newline(subj); - break; - case '`': - new_inl = handle_backticks(subj); - break; - case '\\': - new_inl = handle_backslash(subj); - break; - case '&': - new_inl = handle_entity(subj); - break; - case '<': - new_inl = handle_pointy_brace(subj); - break; - case '*': - case '_': - case '\'': - case '"': - new_inl = handle_delim(subj, c, options & CMARK_OPT_SMART); - break; - case '-': - new_inl = handle_hyphen(subj, options & CMARK_OPT_SMART); - break; - case '.': - new_inl = handle_period(subj, options & CMARK_OPT_SMART); - break; - case '[': - advance(subj); - new_inl = make_str(cmark_chunk_literal("[")); - push_delimiter(subj, '[', true, false, new_inl); - break; - case ']': - new_inl = handle_close_bracket(subj, parent); - break; - case '!': - advance(subj); - if (peek_char(subj) == '[') { - advance(subj); - new_inl = make_str(cmark_chunk_literal("![")); - push_delimiter(subj, '!', false, true, new_inl); - } else { - new_inl = make_str(cmark_chunk_literal("!")); - } - break; - default: - endpos = subject_find_special_char(subj, options); - contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos); - subj->pos = endpos; - - // if we're at a newline, strip trailing spaces. - if (S_is_line_end_char(peek_char(subj))) { - cmark_chunk_rtrim(&contents); - } - - new_inl = make_str(contents); - } - if (new_inl != NULL) { - cmark_node_append_child(parent, new_inl); - } - - return 1; +static int parse_inline(subject *subj, cmark_node *parent, int options) { + cmark_node *new_inl = NULL; + cmark_chunk contents; + unsigned char c; + bufsize_t endpos; + c = peek_char(subj); + if (c == 0) { + return 0; + } + switch (c) { + case '\r': + case '\n': + new_inl = handle_newline(subj); + break; + case '`': + new_inl = handle_backticks(subj); + break; + case '\\': + new_inl = handle_backslash(subj); + break; + case '&': + new_inl = handle_entity(subj); + break; + case '<': + new_inl = handle_pointy_brace(subj); + break; + case '*': + case '_': + case '\'': + case '"': + new_inl = handle_delim(subj, c, options & CMARK_OPT_SMART); + break; + case '-': + new_inl = handle_hyphen(subj, options & CMARK_OPT_SMART); + break; + case '.': + new_inl = handle_period(subj, options & CMARK_OPT_SMART); + break; + case '[': + advance(subj); + new_inl = make_str(cmark_chunk_literal("[")); + push_delimiter(subj, '[', true, false, new_inl); + break; + case ']': + new_inl = handle_close_bracket(subj, parent); + break; + case '!': + advance(subj); + if (peek_char(subj) == '[') { + advance(subj); + new_inl = make_str(cmark_chunk_literal("![")); + push_delimiter(subj, '!', false, true, new_inl); + } else { + new_inl = make_str(cmark_chunk_literal("!")); + } + break; + default: + endpos = subject_find_special_char(subj, options); + contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos); + subj->pos = endpos; + + // if we're at a newline, strip trailing spaces. + if (S_is_line_end_char(peek_char(subj))) { + cmark_chunk_rtrim(&contents); + } + + new_inl = make_str(contents); + } + if (new_inl != NULL) { + cmark_node_append_child(parent, new_inl); + } + + return 1; } // Parse inlines from parent's string_content, adding as children of parent. -extern void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options) -{ - subject subj; - subject_from_buf(&subj, &parent->string_content, refmap); - cmark_chunk_rtrim(&subj.input); +extern void cmark_parse_inlines(cmark_node *parent, cmark_reference_map *refmap, + int options) { + subject subj; + subject_from_buf(&subj, &parent->string_content, refmap); + cmark_chunk_rtrim(&subj.input); - while (!is_eof(&subj) && parse_inline(&subj, parent, options)) ; + while (!is_eof(&subj) && parse_inline(&subj, parent, options)) + ; - process_emphasis(&subj, NULL); + process_emphasis(&subj, NULL); } // Parse zero or more space characters, including at most one newline. -static void spnl(subject* subj) -{ - skip_spaces(subj); - if (skip_line_end(subj)) { - skip_spaces(subj); - } +static void spnl(subject *subj) { + skip_spaces(subj); + if (skip_line_end(subj)) { + skip_spaces(subj); + } } // Parse reference. Assumes string begins with '[' character. // Modify refmap if a reference is encountered. // Return 0 if no reference found, otherwise position of subject // after reference is parsed. -bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap) -{ - subject subj; - - cmark_chunk lab; - cmark_chunk url; - cmark_chunk title; - - bufsize_t matchlen = 0; - bufsize_t beforetitle; - - subject_from_buf(&subj, input, NULL); - - // parse label: - if (!link_label(&subj, &lab) || lab.len == 0) - return 0; - - // colon: - if (peek_char(&subj) == ':') { - advance(&subj); - } else { - return 0; - } - - // parse link url: - spnl(&subj); - matchlen = scan_link_url(&subj.input, subj.pos); - if (matchlen) { - url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); - subj.pos += matchlen; - } else { - return 0; - } - - // parse optional link_title - beforetitle = subj.pos; - spnl(&subj); - matchlen = scan_link_title(&subj.input, subj.pos); - if (matchlen) { - title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); - subj.pos += matchlen; - } else { - subj.pos = beforetitle; - title = cmark_chunk_literal(""); - } - - // parse final spaces and newline: - skip_spaces(&subj); - if (!skip_line_end(&subj)) { - if (matchlen) { // try rewinding before title - subj.pos = beforetitle; - skip_spaces(&subj); - if (!skip_line_end(&subj)) { - return 0; - } - } else { - return 0; - } - } - // insert reference into refmap - cmark_reference_create(refmap, &lab, &url, &title); - return subj.pos; +bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, + cmark_reference_map *refmap) { + subject subj; + + cmark_chunk lab; + cmark_chunk url; + cmark_chunk title; + + bufsize_t matchlen = 0; + bufsize_t beforetitle; + + subject_from_buf(&subj, input, NULL); + + // parse label: + if (!link_label(&subj, &lab) || lab.len == 0) + return 0; + + // colon: + if (peek_char(&subj) == ':') { + advance(&subj); + } else { + return 0; + } + + // parse link url: + spnl(&subj); + matchlen = scan_link_url(&subj.input, subj.pos); + if (matchlen) { + url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); + subj.pos += matchlen; + } else { + return 0; + } + + // parse optional link_title + beforetitle = subj.pos; + spnl(&subj); + matchlen = scan_link_title(&subj.input, subj.pos); + if (matchlen) { + title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); + subj.pos += matchlen; + } else { + subj.pos = beforetitle; + title = cmark_chunk_literal(""); + } + + // parse final spaces and newline: + skip_spaces(&subj); + if (!skip_line_end(&subj)) { + if (matchlen) { // try rewinding before title + subj.pos = beforetitle; + skip_spaces(&subj); + if (!skip_line_end(&subj)) { + return 0; + } + } else { + return 0; + } + } + // insert reference into refmap + cmark_reference_create(refmap, &lab, &url, &title); + return subj.pos; } diff --git a/src/inlines.h b/src/inlines.h index f8847fc881..7e7ee45c6c 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -8,9 +8,11 @@ extern "C" { cmark_chunk cmark_clean_url(cmark_chunk *url); cmark_chunk cmark_clean_title(cmark_chunk *title); -void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options); +void cmark_parse_inlines(cmark_node *parent, cmark_reference_map *refmap, + int options); -bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap); +bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, + cmark_reference_map *refmap); #ifdef __cplusplus } diff --git a/src/iterator.c b/src/iterator.c index f18e3bfe6f..81b6f48e21 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -7,142 +7,112 @@ #include "iterator.h" static const int S_leaf_mask = - (1 << CMARK_NODE_HTML) | - (1 << CMARK_NODE_HRULE) | - (1 << CMARK_NODE_CODE_BLOCK) | - (1 << CMARK_NODE_TEXT) | - (1 << CMARK_NODE_SOFTBREAK) | - (1 << CMARK_NODE_LINEBREAK) | - (1 << CMARK_NODE_CODE) | - (1 << CMARK_NODE_INLINE_HTML); - -cmark_iter* -cmark_iter_new(cmark_node *root) -{ - if (root == NULL) { - return NULL; - } - cmark_iter *iter = (cmark_iter*)malloc(sizeof(cmark_iter)); - if (iter == NULL) { - return NULL; - } - iter->root = root; - iter->cur.ev_type = CMARK_EVENT_NONE; - iter->cur.node = NULL; - iter->next.ev_type = CMARK_EVENT_ENTER; - iter->next.node = root; - return iter; + (1 << CMARK_NODE_HTML) | (1 << CMARK_NODE_HRULE) | + (1 << CMARK_NODE_CODE_BLOCK) | (1 << CMARK_NODE_TEXT) | + (1 << CMARK_NODE_SOFTBREAK) | (1 << CMARK_NODE_LINEBREAK) | + (1 << CMARK_NODE_CODE) | (1 << CMARK_NODE_INLINE_HTML); + +cmark_iter *cmark_iter_new(cmark_node *root) { + if (root == NULL) { + return NULL; + } + cmark_iter *iter = (cmark_iter *)malloc(sizeof(cmark_iter)); + if (iter == NULL) { + return NULL; + } + iter->root = root; + iter->cur.ev_type = CMARK_EVENT_NONE; + iter->cur.node = NULL; + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = root; + return iter; } -void -cmark_iter_free(cmark_iter *iter) -{ - free(iter); -} +void cmark_iter_free(cmark_iter *iter) { free(iter); } -static bool -S_is_leaf(cmark_node *node) -{ - return (1 << node->type) & S_leaf_mask; +static bool S_is_leaf(cmark_node *node) { + return (1 << node->type) & S_leaf_mask; } -cmark_event_type -cmark_iter_next(cmark_iter *iter) -{ - cmark_event_type ev_type = iter->next.ev_type; - cmark_node *node = iter->next.node; - - iter->cur.ev_type = ev_type; - iter->cur.node = node; - - if (ev_type == CMARK_EVENT_DONE) { - return ev_type; - } - - /* roll forward to next item, setting both fields */ - if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) { - if (node->first_child == NULL) { - /* stay on this node but exit */ - iter->next.ev_type = CMARK_EVENT_EXIT; - } else { - iter->next.ev_type = CMARK_EVENT_ENTER; - iter->next.node = node->first_child; - } - } else if (node == iter->root) { - /* don't move past root */ - iter->next.ev_type = CMARK_EVENT_DONE; - iter->next.node = NULL; - } else if (node->next) { - iter->next.ev_type = CMARK_EVENT_ENTER; - iter->next.node = node->next; - } else if (node->parent) { - iter->next.ev_type = CMARK_EVENT_EXIT; - iter->next.node = node->parent; - } else { - assert(false); - iter->next.ev_type = CMARK_EVENT_DONE; - iter->next.node = NULL; - } - - return ev_type; +cmark_event_type cmark_iter_next(cmark_iter *iter) { + cmark_event_type ev_type = iter->next.ev_type; + cmark_node *node = iter->next.node; + + iter->cur.ev_type = ev_type; + iter->cur.node = node; + + if (ev_type == CMARK_EVENT_DONE) { + return ev_type; + } + + /* roll forward to next item, setting both fields */ + if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) { + if (node->first_child == NULL) { + /* stay on this node but exit */ + iter->next.ev_type = CMARK_EVENT_EXIT; + } else { + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = node->first_child; + } + } else if (node == iter->root) { + /* don't move past root */ + iter->next.ev_type = CMARK_EVENT_DONE; + iter->next.node = NULL; + } else if (node->next) { + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = node->next; + } else if (node->parent) { + iter->next.ev_type = CMARK_EVENT_EXIT; + iter->next.node = node->parent; + } else { + assert(false); + iter->next.ev_type = CMARK_EVENT_DONE; + iter->next.node = NULL; + } + + return ev_type; } -void -cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type) -{ - iter->next.ev_type = event_type; - iter->next.node = current; - cmark_iter_next(iter); +void cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type) { + iter->next.ev_type = event_type; + iter->next.node = current; + cmark_iter_next(iter); } -cmark_node* -cmark_iter_get_node(cmark_iter *iter) -{ - return iter->cur.node; -} +cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; } -cmark_event_type -cmark_iter_get_event_type(cmark_iter *iter) -{ - return iter->cur.ev_type; +cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) { + return iter->cur.ev_type; } -cmark_node* -cmark_iter_get_root(cmark_iter *iter) -{ - return iter->root; -} - - -void cmark_consolidate_text_nodes(cmark_node *root) -{ - cmark_iter *iter = cmark_iter_new(root); - cmark_strbuf buf = GH_BUF_INIT; - cmark_event_type ev_type; - cmark_node *cur, *tmp, *next; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_ENTER && - cur->type == CMARK_NODE_TEXT && - cur->next && - cur->next->type == CMARK_NODE_TEXT) { - cmark_strbuf_clear(&buf); - cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len); - tmp = cur->next; - while (tmp && tmp->type == CMARK_NODE_TEXT) { - cmark_iter_next(iter); // advance pointer - cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len); - next = tmp->next; - cmark_node_free(tmp); - tmp = next; - } - cmark_chunk_free(&cur->as.literal); - cur->as.literal = cmark_chunk_buf_detach(&buf); - } - } - - cmark_strbuf_free(&buf); - cmark_iter_free(iter); +cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; } + +void cmark_consolidate_text_nodes(cmark_node *root) { + cmark_iter *iter = cmark_iter_new(root); + cmark_strbuf buf = GH_BUF_INIT; + cmark_event_type ev_type; + cmark_node *cur, *tmp, *next; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT && + cur->next && cur->next->type == CMARK_NODE_TEXT) { + cmark_strbuf_clear(&buf); + cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len); + tmp = cur->next; + while (tmp && tmp->type == CMARK_NODE_TEXT) { + cmark_iter_next(iter); // advance pointer + cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len); + next = tmp->next; + cmark_node_free(tmp); + tmp = next; + } + cmark_chunk_free(&cur->as.literal); + cur->as.literal = cmark_chunk_buf_detach(&buf); + } + } + + cmark_strbuf_free(&buf); + cmark_iter_free(iter); } diff --git a/src/iterator.h b/src/iterator.h index 027b10bd9a..9c6bca6635 100644 --- a/src/iterator.h +++ b/src/iterator.h @@ -8,14 +8,14 @@ extern "C" { #include "cmark.h" typedef struct { - cmark_event_type ev_type; - cmark_node *node; + cmark_event_type ev_type; + cmark_node *node; } cmark_iter_state; struct cmark_iter { - cmark_node *root; - cmark_iter_state cur; - cmark_iter_state next; + cmark_node *root; + cmark_iter_state cur; + cmark_iter_state next; }; #ifdef __cplusplus diff --git a/src/latex.c b/src/latex.c index 782b0c07f3..146062e20c 100644 --- a/src/latex.c +++ b/src/latex.c @@ -18,413 +18,391 @@ #define CR() renderer->cr(renderer) #define BLANKLINE() renderer->blankline(renderer) -static inline void outc(cmark_renderer *renderer, - cmark_escaping escape, - int32_t c, - unsigned char nextc) -{ - if (escape == LITERAL) { - cmark_render_code_point(renderer, c); - return; - } - - switch(c) { - case 123: // '{' - case 125: // '}' - case 35: // '#' - case 37: // '%' - case 38: // '&' - cmark_render_ascii(renderer, "\\"); - cmark_render_code_point(renderer, c); - break; - case 36: // '$' - case 95: // '_' - if (escape == NORMAL) { - cmark_render_ascii(renderer, "\\"); - } - cmark_render_code_point(renderer, c); - break; - case 45 : // '-' - if (nextc == 45) { // prevent ligature - cmark_render_ascii(renderer, "\\-"); - } else { - cmark_render_ascii(renderer, "-"); - } - break; - case 126: // '~' - if (escape == NORMAL) { - cmark_render_ascii(renderer, "\\textasciitilde{}"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 94: // '^' - cmark_render_ascii(renderer, "\\^{}"); - break; - case 92: // '\\' - if (escape == URL) { - // / acts as path sep even on windows: - cmark_render_ascii(renderer, "/"); - } else { - cmark_render_ascii(renderer, "\\textbackslash{}"); - } - break; - case 124: // '|' - cmark_render_ascii(renderer, "\\textbar{}"); - break; - case 60: // '<' - cmark_render_ascii(renderer, "\\textless{}"); - break; - case 62: // '>' - cmark_render_ascii(renderer, "\\textgreater{}"); - break; - case 91: // '[' - case 93: // ']' - cmark_render_ascii(renderer, "{"); - cmark_render_code_point(renderer, c); - cmark_render_ascii(renderer, "}"); - break; - case 34: // '"' - cmark_render_ascii(renderer, "\\textquotedbl{}"); - // requires \usepackage[T1]{fontenc} - break; - case 39: // '\'' - cmark_render_ascii(renderer, "\\textquotesingle{}"); - // requires \usepackage{textcomp} - break; - case 160: // nbsp - cmark_render_ascii(renderer, "~"); - break; - case 8230: // hellip - cmark_render_ascii(renderer, "\\ldots{}"); - break; - case 8216: // lsquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "`"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8217: // rsquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "\'"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8220: // ldquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "``"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8221: // rdquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "''"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8212: // emdash - if (escape == NORMAL) { - cmark_render_ascii(renderer, "---"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8211: // endash - if (escape == NORMAL) { - cmark_render_ascii(renderer, "--"); - } else { - cmark_render_code_point(renderer, c); - } - break; - default: - cmark_render_code_point(renderer, c); - } +static inline void outc(cmark_renderer *renderer, cmark_escaping escape, + int32_t c, unsigned char nextc) { + if (escape == LITERAL) { + cmark_render_code_point(renderer, c); + return; + } + + switch (c) { + case 123: // '{' + case 125: // '}' + case 35: // '#' + case 37: // '%' + case 38: // '&' + cmark_render_ascii(renderer, "\\"); + cmark_render_code_point(renderer, c); + break; + case 36: // '$' + case 95: // '_' + if (escape == NORMAL) { + cmark_render_ascii(renderer, "\\"); + } + cmark_render_code_point(renderer, c); + break; + case 45: // '-' + if (nextc == 45) { // prevent ligature + cmark_render_ascii(renderer, "\\-"); + } else { + cmark_render_ascii(renderer, "-"); + } + break; + case 126: // '~' + if (escape == NORMAL) { + cmark_render_ascii(renderer, "\\textasciitilde{}"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 94: // '^' + cmark_render_ascii(renderer, "\\^{}"); + break; + case 92: // '\\' + if (escape == URL) { + // / acts as path sep even on windows: + cmark_render_ascii(renderer, "/"); + } else { + cmark_render_ascii(renderer, "\\textbackslash{}"); + } + break; + case 124: // '|' + cmark_render_ascii(renderer, "\\textbar{}"); + break; + case 60: // '<' + cmark_render_ascii(renderer, "\\textless{}"); + break; + case 62: // '>' + cmark_render_ascii(renderer, "\\textgreater{}"); + break; + case 91: // '[' + case 93: // ']' + cmark_render_ascii(renderer, "{"); + cmark_render_code_point(renderer, c); + cmark_render_ascii(renderer, "}"); + break; + case 34: // '"' + cmark_render_ascii(renderer, "\\textquotedbl{}"); + // requires \usepackage[T1]{fontenc} + break; + case 39: // '\'' + cmark_render_ascii(renderer, "\\textquotesingle{}"); + // requires \usepackage{textcomp} + break; + case 160: // nbsp + cmark_render_ascii(renderer, "~"); + break; + case 8230: // hellip + cmark_render_ascii(renderer, "\\ldots{}"); + break; + case 8216: // lsquo + if (escape == NORMAL) { + cmark_render_ascii(renderer, "`"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 8217: // rsquo + if (escape == NORMAL) { + cmark_render_ascii(renderer, "\'"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 8220: // ldquo + if (escape == NORMAL) { + cmark_render_ascii(renderer, "``"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 8221: // rdquo + if (escape == NORMAL) { + cmark_render_ascii(renderer, "''"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 8212: // emdash + if (escape == NORMAL) { + cmark_render_ascii(renderer, "---"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 8211: // endash + if (escape == NORMAL) { + cmark_render_ascii(renderer, "--"); + } else { + cmark_render_code_point(renderer, c); + } + break; + default: + cmark_render_code_point(renderer, c); + } } -typedef enum { - NO_LINK, - URL_AUTOLINK, - EMAIL_AUTOLINK, - NORMAL_LINK -} link_type; - -static link_type -get_link_type(cmark_node *node) -{ - size_t title_len, url_len; - cmark_node *link_text; - char *realurl; - int realurllen; - bool isemail = false; - - if (node->type != CMARK_NODE_LINK) { - return NO_LINK; - } - - const char* url = cmark_node_get_url(node); - cmark_chunk url_chunk = cmark_chunk_literal(url); - - url_len = safe_strlen(url); - if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) { - return NO_LINK; - } - - const char* title = cmark_node_get_title(node); - title_len = safe_strlen(title); - // if it has a title, we can't treat it as an autolink: - if (title_len > 0) { - return NORMAL_LINK; - } - - link_text = node->first_child; - cmark_consolidate_text_nodes(link_text); - realurl = (char*)url; - realurllen = url_len; - if (strncmp(realurl, "mailto:", 7) == 0) { - realurl += 7; - realurllen -= 7; - isemail = true; - } - if (realurllen == link_text->as.literal.len && - strncmp(realurl, - (char*)link_text->as.literal.data, - link_text->as.literal.len) == 0) { - if (isemail) { - return EMAIL_AUTOLINK; - } else { - return URL_AUTOLINK; - } - } else { - return NORMAL_LINK; - } +typedef enum { NO_LINK, URL_AUTOLINK, EMAIL_AUTOLINK, NORMAL_LINK } link_type; + +static link_type get_link_type(cmark_node *node) { + size_t title_len, url_len; + cmark_node *link_text; + char *realurl; + int realurllen; + bool isemail = false; + + if (node->type != CMARK_NODE_LINK) { + return NO_LINK; + } + + const char *url = cmark_node_get_url(node); + cmark_chunk url_chunk = cmark_chunk_literal(url); + + url_len = safe_strlen(url); + if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) { + return NO_LINK; + } + + const char *title = cmark_node_get_title(node); + title_len = safe_strlen(title); + // if it has a title, we can't treat it as an autolink: + if (title_len > 0) { + return NORMAL_LINK; + } + + link_text = node->first_child; + cmark_consolidate_text_nodes(link_text); + realurl = (char *)url; + realurllen = url_len; + if (strncmp(realurl, "mailto:", 7) == 0) { + realurl += 7; + realurllen -= 7; + isemail = true; + } + if (realurllen == link_text->as.literal.len && + strncmp(realurl, (char *)link_text->as.literal.data, + link_text->as.literal.len) == 0) { + if (isemail) { + return EMAIL_AUTOLINK; + } else { + return URL_AUTOLINK; + } + } else { + return NORMAL_LINK; + } } -static int -S_get_enumlevel(cmark_node *node) -{ - int enumlevel = 0; - cmark_node *tmp = node; - while (tmp) { - if (tmp->type == CMARK_NODE_LIST && - cmark_node_get_list_type(node) == CMARK_ORDERED_LIST) { - enumlevel++; - } - tmp = tmp->parent; - } - return enumlevel; +static int S_get_enumlevel(cmark_node *node) { + int enumlevel = 0; + cmark_node *tmp = node; + while (tmp) { + if (tmp->type == CMARK_NODE_LIST && + cmark_node_get_list_type(node) == CMARK_ORDERED_LIST) { + enumlevel++; + } + tmp = tmp->parent; + } + return enumlevel; } -static int -S_render_node(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options) -{ - int list_number; - char list_number_string[20]; - bool entering = (ev_type == CMARK_EVENT_ENTER); - cmark_list_type list_type; - const char* roman_numerals[] = { "", "i", "ii", "iii", "iv", "v", - "vi", "vii", "viii", "ix", "x" - }; - - // avoid warning about unused parameter: - (void)(options); - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - LIT("\\begin{quote}"); - CR(); - } else { - LIT("\\end{quote}"); - BLANKLINE(); - } - break; - - case CMARK_NODE_LIST: - list_type = cmark_node_get_list_type(node); - if (entering) { - LIT("\\begin{"); - LIT(list_type == CMARK_ORDERED_LIST ? - "enumerate" : "itemize"); - LIT("}"); - CR(); - list_number = cmark_node_get_list_start(node); - if (list_number > 1) { - sprintf(list_number_string, - "%d", list_number); - LIT("\\setcounter{enum"); - LIT((char *)roman_numerals[S_get_enumlevel(node)]); - LIT("}{"); - OUT(list_number_string, false, NORMAL); - LIT("}"); - CR(); - } - } else { - LIT("\\end{"); - LIT(list_type == CMARK_ORDERED_LIST ? - "enumerate" : "itemize"); - LIT("}"); - BLANKLINE(); - } - break; - - case CMARK_NODE_ITEM: - if (entering) { - LIT("\\item "); - } else { - CR(); - } - break; - - case CMARK_NODE_HEADER: - if (entering) { - switch (cmark_node_get_header_level(node)) { - case 1: - LIT("\\section"); - break; - case 2: - LIT("\\subsection"); - break; - case 3: - LIT("\\subsubsection"); - break; - case 4: - LIT("\\paragraph"); - break; - case 5: - LIT("\\subparagraph"); - break; - } - LIT("{"); - } else { - LIT("}"); - BLANKLINE(); - } - break; - - case CMARK_NODE_CODE_BLOCK: - CR(); - LIT("\\begin{verbatim}"); - CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); - CR(); - LIT("\\end{verbatim}"); - BLANKLINE(); - break; - - case CMARK_NODE_HTML: - break; - - case CMARK_NODE_HRULE: - BLANKLINE(); - LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}"); - BLANKLINE(); - break; - - case CMARK_NODE_PARAGRAPH: - if (!entering) { - BLANKLINE(); - } - break; - - case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), true, NORMAL); - break; - - case CMARK_NODE_LINEBREAK: - LIT("\\\\"); - CR(); - break; - - case CMARK_NODE_SOFTBREAK: - if (renderer->width == 0) { - CR(); - } else { - OUT(" ", true, NORMAL); - } - break; - - case CMARK_NODE_CODE: - LIT("\\texttt{"); - OUT(cmark_node_get_literal(node), false, NORMAL); - LIT("}"); - break; - - case CMARK_NODE_INLINE_HTML: - break; - - case CMARK_NODE_STRONG: - if (entering) { - LIT("\\textbf{"); - } else { - LIT("}"); - } - break; - - case CMARK_NODE_EMPH: - if (entering) { - LIT("\\emph{"); - } else { - LIT("}"); - } - break; - - case CMARK_NODE_LINK: - if (entering) { - const char* url = cmark_node_get_url(node); - // requires \usepackage{hyperref} - switch(get_link_type(node)) { - case URL_AUTOLINK: - LIT("\\url{"); - OUT(url, false, URL); - break; - case EMAIL_AUTOLINK: - LIT("\\href{"); - OUT(url, false, URL); - LIT("}\\nolinkurl{"); - break; - case NORMAL_LINK: - LIT("\\href{"); - OUT(url, false, URL); - LIT("}{"); - break; - case NO_LINK: - LIT("{"); // error? - } - } else { - LIT("}"); - } - - break; - - case CMARK_NODE_IMAGE: - if (entering) { - LIT("\\protect\\includegraphics{"); - // requires \include{graphicx} - OUT(cmark_node_get_url(node), false, URL); - LIT("}"); - return 0; - } - break; - - default: - assert(false); - break; - } - - return 1; +static int S_render_node(cmark_renderer *renderer, cmark_node *node, + cmark_event_type ev_type, int options) { + int list_number; + char list_number_string[20]; + bool entering = (ev_type == CMARK_EVENT_ENTER); + cmark_list_type list_type; + const char *roman_numerals[] = {"", "i", "ii", "iii", "iv", "v", + "vi", "vii", "viii", "ix", "x"}; + + // avoid warning about unused parameter: + (void)(options); + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + LIT("\\begin{quote}"); + CR(); + } else { + LIT("\\end{quote}"); + BLANKLINE(); + } + break; + + case CMARK_NODE_LIST: + list_type = cmark_node_get_list_type(node); + if (entering) { + LIT("\\begin{"); + LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize"); + LIT("}"); + CR(); + list_number = cmark_node_get_list_start(node); + if (list_number > 1) { + sprintf(list_number_string, "%d", list_number); + LIT("\\setcounter{enum"); + LIT((char *)roman_numerals[S_get_enumlevel(node)]); + LIT("}{"); + OUT(list_number_string, false, NORMAL); + LIT("}"); + CR(); + } + } else { + LIT("\\end{"); + LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize"); + LIT("}"); + BLANKLINE(); + } + break; + + case CMARK_NODE_ITEM: + if (entering) { + LIT("\\item "); + } else { + CR(); + } + break; + + case CMARK_NODE_HEADER: + if (entering) { + switch (cmark_node_get_header_level(node)) { + case 1: + LIT("\\section"); + break; + case 2: + LIT("\\subsection"); + break; + case 3: + LIT("\\subsubsection"); + break; + case 4: + LIT("\\paragraph"); + break; + case 5: + LIT("\\subparagraph"); + break; + } + LIT("{"); + } else { + LIT("}"); + BLANKLINE(); + } + break; + + case CMARK_NODE_CODE_BLOCK: + CR(); + LIT("\\begin{verbatim}"); + CR(); + OUT(cmark_node_get_literal(node), false, LITERAL); + CR(); + LIT("\\end{verbatim}"); + BLANKLINE(); + break; + + case CMARK_NODE_HTML: + break; + + case CMARK_NODE_HRULE: + BLANKLINE(); + LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}"); + BLANKLINE(); + break; + + case CMARK_NODE_PARAGRAPH: + if (!entering) { + BLANKLINE(); + } + break; + + case CMARK_NODE_TEXT: + OUT(cmark_node_get_literal(node), true, NORMAL); + break; + + case CMARK_NODE_LINEBREAK: + LIT("\\\\"); + CR(); + break; + + case CMARK_NODE_SOFTBREAK: + if (renderer->width == 0) { + CR(); + } else { + OUT(" ", true, NORMAL); + } + break; + + case CMARK_NODE_CODE: + LIT("\\texttt{"); + OUT(cmark_node_get_literal(node), false, NORMAL); + LIT("}"); + break; + + case CMARK_NODE_INLINE_HTML: + break; + + case CMARK_NODE_STRONG: + if (entering) { + LIT("\\textbf{"); + } else { + LIT("}"); + } + break; + + case CMARK_NODE_EMPH: + if (entering) { + LIT("\\emph{"); + } else { + LIT("}"); + } + break; + + case CMARK_NODE_LINK: + if (entering) { + const char *url = cmark_node_get_url(node); + // requires \usepackage{hyperref} + switch (get_link_type(node)) { + case URL_AUTOLINK: + LIT("\\url{"); + OUT(url, false, URL); + break; + case EMAIL_AUTOLINK: + LIT("\\href{"); + OUT(url, false, URL); + LIT("}\\nolinkurl{"); + break; + case NORMAL_LINK: + LIT("\\href{"); + OUT(url, false, URL); + LIT("}{"); + break; + case NO_LINK: + LIT("{"); // error? + } + } else { + LIT("}"); + } + + break; + + case CMARK_NODE_IMAGE: + if (entering) { + LIT("\\protect\\includegraphics{"); + // requires \include{graphicx} + OUT(cmark_node_get_url(node), false, URL); + LIT("}"); + return 0; + } + break; + + default: + assert(false); + break; + } + + return 1; } -char *cmark_render_latex(cmark_node *root, int options, int width) -{ - return cmark_render(root, options, width, outc, S_render_node); +char *cmark_render_latex(cmark_node *root, int options, int width) { + return cmark_render(root, options, width, outc, S_render_node); } diff --git a/src/main.c b/src/main.c index 7fae7e423b..239d7938ea 100644 --- a/src/main.c +++ b/src/main.c @@ -12,190 +12,183 @@ #endif typedef enum { - FORMAT_NONE, - FORMAT_HTML, - FORMAT_XML, - FORMAT_MAN, - FORMAT_COMMONMARK, - FORMAT_LATEX + FORMAT_NONE, + FORMAT_HTML, + FORMAT_XML, + FORMAT_MAN, + FORMAT_COMMONMARK, + FORMAT_LATEX } writer_format; -void print_usage() -{ - printf("Usage: cmark [FILE*]\n"); - printf("Options:\n"); - printf(" --to, -t FORMAT Specify output format (html, xml, man, commonmark, latex)\n"); - printf(" --width WIDTH Specify wrap width (default 0 = nowrap)\n"); - printf(" --sourcepos Include source position attribute\n"); - printf(" --hardbreaks Treat newlines as hard line breaks\n"); - printf(" --safe Suppress raw HTML and dangerous URLs\n"); - printf(" --smart Use smart punctuation\n"); - printf(" --normalize Consolidate adjacent text nodes\n"); - printf(" --help, -h Print usage information\n"); - printf(" --version Print version\n"); +void print_usage() { + printf("Usage: cmark [FILE*]\n"); + printf("Options:\n"); + printf(" --to, -t FORMAT Specify output format (html, xml, man, " + "commonmark, latex)\n"); + printf(" --width WIDTH Specify wrap width (default 0 = nowrap)\n"); + printf(" --sourcepos Include source position attribute\n"); + printf(" --hardbreaks Treat newlines as hard line breaks\n"); + printf(" --safe Suppress raw HTML and dangerous URLs\n"); + printf(" --smart Use smart punctuation\n"); + printf(" --normalize Consolidate adjacent text nodes\n"); + printf(" --help, -h Print usage information\n"); + printf(" --version Print version\n"); } static void print_document(cmark_node *document, writer_format writer, - int options, int width) -{ - char *result; - - switch (writer) { - case FORMAT_HTML: - result = cmark_render_html(document, options); - break; - case FORMAT_XML: - result = cmark_render_xml(document, options); - break; - case FORMAT_MAN: - result = cmark_render_man(document, options, width); - break; - case FORMAT_COMMONMARK: - result = cmark_render_commonmark(document, options, width); - break; - case FORMAT_LATEX: - result = cmark_render_latex(document, options, width); - break; - default: - fprintf(stderr, "Unknown format %d\n", writer); - exit(1); - } - printf("%s", result); - free(result); + int options, int width) { + char *result; + + switch (writer) { + case FORMAT_HTML: + result = cmark_render_html(document, options); + break; + case FORMAT_XML: + result = cmark_render_xml(document, options); + break; + case FORMAT_MAN: + result = cmark_render_man(document, options, width); + break; + case FORMAT_COMMONMARK: + result = cmark_render_commonmark(document, options, width); + break; + case FORMAT_LATEX: + result = cmark_render_latex(document, options, width); + break; + default: + fprintf(stderr, "Unknown format %d\n", writer); + exit(1); + } + printf("%s", result); + free(result); } -int main(int argc, char *argv[]) -{ - int i, numfps = 0; - int *files; - char buffer[4096]; - cmark_parser *parser; - size_t bytes; - cmark_node *document; - int width = 0; - char *unparsed; - writer_format writer = FORMAT_HTML; - int options = CMARK_OPT_DEFAULT; +int main(int argc, char *argv[]) { + int i, numfps = 0; + int *files; + char buffer[4096]; + cmark_parser *parser; + size_t bytes; + cmark_node *document; + int width = 0; + char *unparsed; + writer_format writer = FORMAT_HTML; + int options = CMARK_OPT_DEFAULT; #if defined(_WIN32) && !defined(__CYGWIN__) - _setmode(_fileno(stdout), _O_BINARY); + _setmode(_fileno(stdout), _O_BINARY); #endif - files = (int *)malloc(argc * sizeof(*files)); - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "--version") == 0) { - printf("cmark %s", CMARK_VERSION_STRING); - printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n"); - exit(0); - } else if (strcmp(argv[i], "--sourcepos") == 0) { - options |= CMARK_OPT_SOURCEPOS; - } else if (strcmp(argv[i], "--hardbreaks") == 0) { - options |= CMARK_OPT_HARDBREAKS; - } else if (strcmp(argv[i], "--smart") == 0) { - options |= CMARK_OPT_SMART; - } else if (strcmp(argv[i], "--safe") == 0) { - options |= CMARK_OPT_SAFE; - } else if (strcmp(argv[i], "--normalize") == 0) { - options |= CMARK_OPT_NORMALIZE; - } else if (strcmp(argv[i], "--validate-utf8") == 0) { - options |= CMARK_OPT_VALIDATE_UTF8; - } else if ((strcmp(argv[i], "--help") == 0) || - (strcmp(argv[i], "-h") == 0)) { - print_usage(); - exit(0); - } else if (strcmp(argv[i], "--width") == 0) { - i += 1; - if (i < argc) { - width = (int)strtol(argv[i], &unparsed, 10); - if (unparsed && strlen(unparsed) > 0) { - fprintf(stderr, - "failed parsing width '%s' at '%s'\n", - argv[i], unparsed); - exit(1); - } - } else { - fprintf(stderr, - "--width requires an argument\n"); - exit(1); - } - } else if ((strcmp(argv[i], "-t") == 0) || - (strcmp(argv[i], "--to") == 0)) { - i += 1; - if (i < argc) { - if (strcmp(argv[i], "man") == 0) { - writer = FORMAT_MAN; - } else if (strcmp(argv[i], "html") == 0) { - writer = FORMAT_HTML; - } else if (strcmp(argv[i], "xml") == 0) { - writer = FORMAT_XML; - } else if (strcmp(argv[i], "commonmark") == 0) { - writer = FORMAT_COMMONMARK; - } else if (strcmp(argv[i], "latex") == 0) { - writer = FORMAT_LATEX; - } else { - fprintf(stderr, - "Unknown format %s\n", argv[i]); - exit(1); - } - } else { - fprintf(stderr, "No argument provided for %s\n", - argv[i - 1]); - exit(1); - } - } else if (*argv[i] == '-') { - print_usage(); - exit(1); - } else { // treat as file argument - files[numfps++] = i; - } - } - - parser = cmark_parser_new(options); - for (i = 0; i < numfps; i++) { - FILE *fp = fopen(argv[files[i]], "r"); - if (fp == NULL) { - fprintf(stderr, "Error opening file %s: %s\n", - argv[files[i]], strerror(errno)); - exit(1); - } - - start_timer(); - while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { - cmark_parser_feed(parser, buffer, bytes); - if (bytes < sizeof(buffer)) { - break; - } - } - end_timer("processing lines"); - - fclose(fp); - } - - if (numfps == 0) { - - while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { - cmark_parser_feed(parser, buffer, bytes); - if (bytes < sizeof(buffer)) { - break; - } - } - } - - start_timer(); - document = cmark_parser_finish(parser); - end_timer("finishing document"); - cmark_parser_free(parser); - - start_timer(); - print_document(document, writer, options, width); - end_timer("print_document"); - - start_timer(); - cmark_node_free(document); - end_timer("free_blocks"); - - free(files); - - return 0; + files = (int *)malloc(argc * sizeof(*files)); + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "--version") == 0) { + printf("cmark %s", CMARK_VERSION_STRING); + printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n"); + exit(0); + } else if (strcmp(argv[i], "--sourcepos") == 0) { + options |= CMARK_OPT_SOURCEPOS; + } else if (strcmp(argv[i], "--hardbreaks") == 0) { + options |= CMARK_OPT_HARDBREAKS; + } else if (strcmp(argv[i], "--smart") == 0) { + options |= CMARK_OPT_SMART; + } else if (strcmp(argv[i], "--safe") == 0) { + options |= CMARK_OPT_SAFE; + } else if (strcmp(argv[i], "--normalize") == 0) { + options |= CMARK_OPT_NORMALIZE; + } else if (strcmp(argv[i], "--validate-utf8") == 0) { + options |= CMARK_OPT_VALIDATE_UTF8; + } else if ((strcmp(argv[i], "--help") == 0) || + (strcmp(argv[i], "-h") == 0)) { + print_usage(); + exit(0); + } else if (strcmp(argv[i], "--width") == 0) { + i += 1; + if (i < argc) { + width = (int)strtol(argv[i], &unparsed, 10); + if (unparsed && strlen(unparsed) > 0) { + fprintf(stderr, "failed parsing width '%s' at '%s'\n", argv[i], + unparsed); + exit(1); + } + } else { + fprintf(stderr, "--width requires an argument\n"); + exit(1); + } + } else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "--to") == 0)) { + i += 1; + if (i < argc) { + if (strcmp(argv[i], "man") == 0) { + writer = FORMAT_MAN; + } else if (strcmp(argv[i], "html") == 0) { + writer = FORMAT_HTML; + } else if (strcmp(argv[i], "xml") == 0) { + writer = FORMAT_XML; + } else if (strcmp(argv[i], "commonmark") == 0) { + writer = FORMAT_COMMONMARK; + } else if (strcmp(argv[i], "latex") == 0) { + writer = FORMAT_LATEX; + } else { + fprintf(stderr, "Unknown format %s\n", argv[i]); + exit(1); + } + } else { + fprintf(stderr, "No argument provided for %s\n", argv[i - 1]); + exit(1); + } + } else if (*argv[i] == '-') { + print_usage(); + exit(1); + } else { // treat as file argument + files[numfps++] = i; + } + } + + parser = cmark_parser_new(options); + for (i = 0; i < numfps; i++) { + FILE *fp = fopen(argv[files[i]], "r"); + if (fp == NULL) { + fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]], + strerror(errno)); + exit(1); + } + + start_timer(); + while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { + cmark_parser_feed(parser, buffer, bytes); + if (bytes < sizeof(buffer)) { + break; + } + } + end_timer("processing lines"); + + fclose(fp); + } + + if (numfps == 0) { + + while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { + cmark_parser_feed(parser, buffer, bytes); + if (bytes < sizeof(buffer)) { + break; + } + } + } + + start_timer(); + document = cmark_parser_finish(parser); + end_timer("finishing document"); + cmark_parser_free(parser); + + start_timer(); + print_document(document, writer, options, width); + end_timer("print_document"); + + start_timer(); + cmark_node_free(document); + end_timer("free_blocks"); + + free(files); + + return 0; } diff --git a/src/man.c b/src/man.c index 6ff33f5837..8e3913e9bc 100644 --- a/src/man.c +++ b/src/man.c @@ -16,234 +16,220 @@ #define BLANKLINE() renderer->blankline(renderer) // Functions to convert cmark_nodes to groff man strings. -static -void S_outc(cmark_renderer *renderer, - cmark_escaping escape, - int32_t c, - unsigned char nextc) -{ - (void)(nextc); - - if (escape == LITERAL) { - cmark_render_code_point(renderer, c); - return; - } - - switch(c) { - case 46: - if (renderer->begin_line) { - cmark_render_ascii(renderer, "\\&."); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 39: - if (renderer->begin_line) { - cmark_render_ascii(renderer, "\\&'"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 45: - cmark_render_ascii(renderer, "\\-"); - break; - case 92: - cmark_render_ascii(renderer, "\\e"); - break; - case 8216: // left single quote - cmark_render_ascii(renderer, "\\[oq]"); - break; - case 8217: // right single quote - cmark_render_ascii(renderer, "\\[cq]"); - break; - case 8220: // left double quote - cmark_render_ascii(renderer, "\\[lq]"); - break; - case 8221: // right double quote - cmark_render_ascii(renderer, "\\[rq]"); - break; - case 8212: // em dash - cmark_render_ascii(renderer, "\\[em]"); - break; - case 8211: // en dash - cmark_render_ascii(renderer, "\\[en]"); - break; - default: - cmark_render_code_point(renderer, c); - } +static void S_outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, + unsigned char nextc) { + (void)(nextc); + + if (escape == LITERAL) { + cmark_render_code_point(renderer, c); + return; + } + + switch (c) { + case 46: + if (renderer->begin_line) { + cmark_render_ascii(renderer, "\\&."); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 39: + if (renderer->begin_line) { + cmark_render_ascii(renderer, "\\&'"); + } else { + cmark_render_code_point(renderer, c); + } + break; + case 45: + cmark_render_ascii(renderer, "\\-"); + break; + case 92: + cmark_render_ascii(renderer, "\\e"); + break; + case 8216: // left single quote + cmark_render_ascii(renderer, "\\[oq]"); + break; + case 8217: // right single quote + cmark_render_ascii(renderer, "\\[cq]"); + break; + case 8220: // left double quote + cmark_render_ascii(renderer, "\\[lq]"); + break; + case 8221: // right double quote + cmark_render_ascii(renderer, "\\[rq]"); + break; + case 8212: // em dash + cmark_render_ascii(renderer, "\\[em]"); + break; + case 8211: // en dash + cmark_render_ascii(renderer, "\\[en]"); + break; + default: + cmark_render_code_point(renderer, c); + } } -static int -S_render_node(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options) -{ - cmark_node *tmp; - int list_number; - bool entering = (ev_type == CMARK_EVENT_ENTER); - - // avoid unused parameter error: - (void)(options); - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - CR(); - LIT(".RS"); - CR(); - } else { - CR(); - LIT(".RE"); - CR(); - } - break; - - case CMARK_NODE_LIST: - break; - - case CMARK_NODE_ITEM: - if (entering) { - CR(); - LIT(".IP "); - if (cmark_node_get_list_type(node->parent) == - CMARK_BULLET_LIST) { - LIT("\\[bu] 2"); - } else { - list_number = cmark_node_get_list_start(node->parent); - tmp = node; - while (tmp->prev) { - tmp = tmp->prev; - list_number += 1; - } - char list_number_s[20]; - sprintf(list_number_s, "\"%d.\" 4", list_number); - LIT(list_number_s); - } - CR(); - } else { - CR(); - } - break; - - case CMARK_NODE_HEADER: - if (entering) { - CR(); - LIT(cmark_node_get_header_level(node) == 1 ? - ".SH" : ".SS"); - CR(); - } else { - CR(); - } - break; - - case CMARK_NODE_CODE_BLOCK: - CR(); - LIT(".IP\n.nf\n\\f[C]\n"); - OUT(cmark_node_get_literal(node), - false, - NORMAL); - CR(); - LIT("\\f[]\n.fi"); - CR(); - break; - - case CMARK_NODE_HTML: - break; - - case CMARK_NODE_HRULE: - CR(); - LIT(".PP\n * * * * *"); - CR(); - break; - - case CMARK_NODE_PARAGRAPH: - if (entering) { - // no blank line if first paragraph in list: - if (node->parent && - node->parent->type == CMARK_NODE_ITEM && - node->prev == NULL) { - // no blank line or .PP - } else { - CR(); - LIT(".PP"); - CR(); - } - } else { - CR(); - } - break; - - case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), true, NORMAL); - break; - - case CMARK_NODE_LINEBREAK: - LIT(".PD 0\n.P\n.PD"); - CR(); - break; - - case CMARK_NODE_SOFTBREAK: - if (renderer->width == 0) { - CR(); - } else { - OUT(" ", true, LITERAL); - } - break; - - case CMARK_NODE_CODE: - LIT("\\f[C]"); - OUT(cmark_node_get_literal(node), true, NORMAL); - LIT("\\f[]"); - break; - - case CMARK_NODE_INLINE_HTML: - break; - - case CMARK_NODE_STRONG: - if (entering) { - LIT("\\f[B]"); - } else { - LIT("\\f[]"); - } - break; - - case CMARK_NODE_EMPH: - if (entering) { - LIT("\\f[I]"); - } else { - LIT("\\f[]"); - } - break; - - case CMARK_NODE_LINK: - if (!entering) { - LIT(" ("); - OUT(cmark_node_get_url(node), true, URL); - LIT(")"); - } - break; - - case CMARK_NODE_IMAGE: - if (entering) { - LIT("[IMAGE: "); - } else { - LIT("]"); - } - break; - - default: - assert(false); - break; - } - - return 1; +static int S_render_node(cmark_renderer *renderer, cmark_node *node, + cmark_event_type ev_type, int options) { + cmark_node *tmp; + int list_number; + bool entering = (ev_type == CMARK_EVENT_ENTER); + + // avoid unused parameter error: + (void)(options); + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + CR(); + LIT(".RS"); + CR(); + } else { + CR(); + LIT(".RE"); + CR(); + } + break; + + case CMARK_NODE_LIST: + break; + + case CMARK_NODE_ITEM: + if (entering) { + CR(); + LIT(".IP "); + if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { + LIT("\\[bu] 2"); + } else { + list_number = cmark_node_get_list_start(node->parent); + tmp = node; + while (tmp->prev) { + tmp = tmp->prev; + list_number += 1; + } + char list_number_s[20]; + sprintf(list_number_s, "\"%d.\" 4", list_number); + LIT(list_number_s); + } + CR(); + } else { + CR(); + } + break; + + case CMARK_NODE_HEADER: + if (entering) { + CR(); + LIT(cmark_node_get_header_level(node) == 1 ? ".SH" : ".SS"); + CR(); + } else { + CR(); + } + break; + + case CMARK_NODE_CODE_BLOCK: + CR(); + LIT(".IP\n.nf\n\\f[C]\n"); + OUT(cmark_node_get_literal(node), false, NORMAL); + CR(); + LIT("\\f[]\n.fi"); + CR(); + break; + + case CMARK_NODE_HTML: + break; + + case CMARK_NODE_HRULE: + CR(); + LIT(".PP\n * * * * *"); + CR(); + break; + + case CMARK_NODE_PARAGRAPH: + if (entering) { + // no blank line if first paragraph in list: + if (node->parent && node->parent->type == CMARK_NODE_ITEM && + node->prev == NULL) { + // no blank line or .PP + } else { + CR(); + LIT(".PP"); + CR(); + } + } else { + CR(); + } + break; + + case CMARK_NODE_TEXT: + OUT(cmark_node_get_literal(node), true, NORMAL); + break; + + case CMARK_NODE_LINEBREAK: + LIT(".PD 0\n.P\n.PD"); + CR(); + break; + + case CMARK_NODE_SOFTBREAK: + if (renderer->width == 0) { + CR(); + } else { + OUT(" ", true, LITERAL); + } + break; + + case CMARK_NODE_CODE: + LIT("\\f[C]"); + OUT(cmark_node_get_literal(node), true, NORMAL); + LIT("\\f[]"); + break; + + case CMARK_NODE_INLINE_HTML: + break; + + case CMARK_NODE_STRONG: + if (entering) { + LIT("\\f[B]"); + } else { + LIT("\\f[]"); + } + break; + + case CMARK_NODE_EMPH: + if (entering) { + LIT("\\f[I]"); + } else { + LIT("\\f[]"); + } + break; + + case CMARK_NODE_LINK: + if (!entering) { + LIT(" ("); + OUT(cmark_node_get_url(node), true, URL); + LIT(")"); + } + break; + + case CMARK_NODE_IMAGE: + if (entering) { + LIT("[IMAGE: "); + } else { + LIT("]"); + } + break; + + default: + assert(false); + break; + } + + return 1; } -char *cmark_render_man(cmark_node *root, int options, int width) -{ - return cmark_render(root, options, width, S_outc, S_render_node); +char *cmark_render_man(cmark_node *root, int options, int width) { + return cmark_render(root, options, width, S_outc, S_render_node); } diff --git a/src/node.c b/src/node.c index 7b1bb10e28..ad12d63fb8 100644 --- a/src/node.c +++ b/src/node.c @@ -4,855 +4,762 @@ #include "config.h" #include "node.h" -static void -S_node_unlink(cmark_node *node); - -static inline bool -S_is_block(cmark_node *node) -{ - if (node == NULL) { - return false; - } - return node->type >= CMARK_NODE_FIRST_BLOCK - && node->type <= CMARK_NODE_LAST_BLOCK; -} - -static inline bool -S_is_inline(cmark_node *node) -{ - if (node == NULL) { - return false; - } - return node->type >= CMARK_NODE_FIRST_INLINE - && node->type <= CMARK_NODE_LAST_INLINE; -} - -static bool -S_can_contain(cmark_node *node, cmark_node *child) -{ - cmark_node *cur; - - if (node == NULL || child == NULL) { - return false; - } - - // Verify that child is not an ancestor of node or equal to node. - cur = node; - do { - if (cur == child) { - return false; - } - cur = cur->parent; - } while (cur != NULL); - - if (child->type == CMARK_NODE_DOCUMENT) { - return false; - } - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - case CMARK_NODE_BLOCK_QUOTE: - case CMARK_NODE_ITEM: - return S_is_block(child) - && child->type != CMARK_NODE_ITEM; - - case CMARK_NODE_LIST: - return child->type == CMARK_NODE_ITEM; - - case CMARK_NODE_PARAGRAPH: - case CMARK_NODE_HEADER: - case CMARK_NODE_EMPH: - case CMARK_NODE_STRONG: - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - return S_is_inline(child); - - default: - break; - } - - return false; -} - -cmark_node* -cmark_node_new(cmark_node_type type) -{ - cmark_node *node = (cmark_node *)calloc(1, sizeof(*node)); - node->type = type; - - switch (node->type) { - case CMARK_NODE_HEADER: - node->as.header.level = 1; - break; - - case CMARK_NODE_LIST: { - cmark_list *list = &node->as.list; - list->list_type = CMARK_BULLET_LIST; - list->start = 1; - list->tight = false; - break; - } - - default: - break; - } - - return node; +static void S_node_unlink(cmark_node *node); + +static inline bool S_is_block(cmark_node *node) { + if (node == NULL) { + return false; + } + return node->type >= CMARK_NODE_FIRST_BLOCK && + node->type <= CMARK_NODE_LAST_BLOCK; +} + +static inline bool S_is_inline(cmark_node *node) { + if (node == NULL) { + return false; + } + return node->type >= CMARK_NODE_FIRST_INLINE && + node->type <= CMARK_NODE_LAST_INLINE; +} + +static bool S_can_contain(cmark_node *node, cmark_node *child) { + cmark_node *cur; + + if (node == NULL || child == NULL) { + return false; + } + + // Verify that child is not an ancestor of node or equal to node. + cur = node; + do { + if (cur == child) { + return false; + } + cur = cur->parent; + } while (cur != NULL); + + if (child->type == CMARK_NODE_DOCUMENT) { + return false; + } + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + case CMARK_NODE_BLOCK_QUOTE: + case CMARK_NODE_ITEM: + return S_is_block(child) && child->type != CMARK_NODE_ITEM; + + case CMARK_NODE_LIST: + return child->type == CMARK_NODE_ITEM; + + case CMARK_NODE_PARAGRAPH: + case CMARK_NODE_HEADER: + case CMARK_NODE_EMPH: + case CMARK_NODE_STRONG: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + return S_is_inline(child); + + default: + break; + } + + return false; +} + +cmark_node *cmark_node_new(cmark_node_type type) { + cmark_node *node = (cmark_node *)calloc(1, sizeof(*node)); + node->type = type; + + switch (node->type) { + case CMARK_NODE_HEADER: + node->as.header.level = 1; + break; + + case CMARK_NODE_LIST: { + cmark_list *list = &node->as.list; + list->list_type = CMARK_BULLET_LIST; + list->start = 1; + list->tight = false; + break; + } + + default: + break; + } + + return node; } // Free a cmark_node list and any children. -static -void S_free_nodes(cmark_node *e) -{ - cmark_node *next; - while (e != NULL) { - if (S_is_block(e)) { - cmark_strbuf_free(&e->string_content); - } - switch (e->type) { - case NODE_CODE_BLOCK: - cmark_chunk_free(&e->as.code.info); - cmark_chunk_free(&e->as.code.literal); - break; - case NODE_TEXT: - case NODE_INLINE_HTML: - case NODE_CODE: - case NODE_HTML: - cmark_chunk_free(&e->as.literal); - break; - case NODE_LINK: - case NODE_IMAGE: - cmark_chunk_free(&e->as.link.url); - cmark_chunk_free(&e->as.link.title); - break; - default: - break; - } - if (e->last_child) { - // Splice children into list - e->last_child->next = e->next; - e->next = e->first_child; - } - next = e->next; - free(e); - e = next; - } -} - -void -cmark_node_free(cmark_node *node) -{ - S_node_unlink(node); - node->next = NULL; - S_free_nodes(node); -} - -cmark_node_type -cmark_node_get_type(cmark_node *node) -{ - if (node == NULL) { - return CMARK_NODE_NONE; - } else { - return node->type; - } -} - -const char* -cmark_node_get_type_string(cmark_node *node) -{ - if (node == NULL) { - return "NONE"; - } - - switch (node->type) { - case CMARK_NODE_NONE: - return "none"; - case CMARK_NODE_DOCUMENT: - return "document"; - case CMARK_NODE_BLOCK_QUOTE: - return "block_quote"; - case CMARK_NODE_LIST: - return "list"; - case CMARK_NODE_ITEM: - return "item"; - case CMARK_NODE_CODE_BLOCK: - return "code_block"; - case CMARK_NODE_HTML: - return "html"; - case CMARK_NODE_PARAGRAPH: - return "paragraph"; - case CMARK_NODE_HEADER: - return "header"; - case CMARK_NODE_HRULE: - return "hrule"; - case CMARK_NODE_TEXT: - return "text"; - case CMARK_NODE_SOFTBREAK: - return "softbreak"; - case CMARK_NODE_LINEBREAK: - return "linebreak"; - case CMARK_NODE_CODE: - return "code"; - case CMARK_NODE_INLINE_HTML: - return "inline_html"; - case CMARK_NODE_EMPH: - return "emph"; - case CMARK_NODE_STRONG: - return "strong"; - case CMARK_NODE_LINK: - return "link"; - case CMARK_NODE_IMAGE: - return "image"; - } - - return ""; -} - -cmark_node* -cmark_node_next(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } else { - return node->next; - } -} - -cmark_node* -cmark_node_previous(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } else { - return node->prev; - } -} - -cmark_node* -cmark_node_parent(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } else { - return node->parent; - } -} - -cmark_node* -cmark_node_first_child(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } else { - return node->first_child; - } -} - -cmark_node* -cmark_node_last_child(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } else { - return node->last_child; - } -} - -void* -cmark_node_get_user_data(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } else { - return node->user_data; - } -} - -int -cmark_node_set_user_data(cmark_node *node, void *user_data) -{ - if (node == NULL) { - return 0; - } - node->user_data = user_data; - return 1; -} - -const char* -cmark_node_get_literal(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case NODE_HTML: - case NODE_TEXT: - case NODE_INLINE_HTML: - case NODE_CODE: - return cmark_chunk_to_cstr(&node->as.literal); - - case NODE_CODE_BLOCK: - return cmark_chunk_to_cstr(&node->as.code.literal); - - default: - break; - } - - return NULL; -} - -int -cmark_node_set_literal(cmark_node *node, const char *content) -{ - if (node == NULL) { - return 0; - } - - switch (node->type) { - case NODE_HTML: - case NODE_TEXT: - case NODE_INLINE_HTML: - case NODE_CODE: - cmark_chunk_set_cstr(&node->as.literal, content); - return 1; - - case NODE_CODE_BLOCK: - cmark_chunk_set_cstr(&node->as.code.literal, content); - return 1; - - default: - break; - } - - return 0; -} - -int -cmark_node_get_header_level(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_HEADER: - return node->as.header.level; - - default: - break; - } - - return 0; -} - -int -cmark_node_set_header_level(cmark_node *node, int level) -{ - if (node == NULL || level < 1 || level > 6) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_HEADER: - node->as.header.level = level; - return 1; - - default: - break; - } - - return 0; -} - -cmark_list_type -cmark_node_get_list_type(cmark_node *node) -{ - if (node == NULL) { - return CMARK_NO_LIST; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.list_type; - } else { - return CMARK_NO_LIST; - } -} - -int -cmark_node_set_list_type(cmark_node *node, cmark_list_type type) -{ - if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) { - return 0; - } - - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.list_type = type; - return 1; - } else { - return 0; - } -} - -cmark_delim_type -cmark_node_get_list_delim(cmark_node *node) -{ - if (node == NULL) { - return CMARK_NO_DELIM; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.delimiter; - } else { - return CMARK_NO_DELIM; - } -} - -int -cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) -{ - if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) { - return 0; - } - - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.delimiter = delim; - return 1; - } else { - return 0; - } -} - -int -cmark_node_get_list_start(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.start; - } else { - return 0; - } -} - -int -cmark_node_set_list_start(cmark_node *node, int start) -{ - if (node == NULL || start < 0) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.start = start; - return 1; - } else { - return 0; - } -} - -int -cmark_node_get_list_tight(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.tight; - } else { - return 0; - } -} - -int -cmark_node_set_list_tight(cmark_node *node, int tight) -{ - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.tight = tight; - return 1; - } else { - return 0; - } -} - -const char* -cmark_node_get_fence_info(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } - - if (node->type == NODE_CODE_BLOCK) { - return cmark_chunk_to_cstr(&node->as.code.info); - } else { - return NULL; - } -} - -int -cmark_node_set_fence_info(cmark_node *node, const char *info) -{ - if (node == NULL) { - return 0; - } - - if (node->type == NODE_CODE_BLOCK) { - cmark_chunk_set_cstr(&node->as.code.info, info); - return 1; - } else { - return 0; - } -} - -const char* -cmark_node_get_url(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: - return cmark_chunk_to_cstr(&node->as.link.url); - default: - break; - } - - return NULL; -} - -int -cmark_node_set_url(cmark_node *node, const char *url) -{ - if (node == NULL) { - return 0; - } - - switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: - cmark_chunk_set_cstr(&node->as.link.url, url); - return 1; - default: - break; - } - - return 0; -} - -const char* -cmark_node_get_title(cmark_node *node) -{ - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: - return cmark_chunk_to_cstr(&node->as.link.title); - default: - break; - } - - return NULL; -} - -int -cmark_node_set_title(cmark_node *node, const char *title) -{ - if (node == NULL) { - return 0; - } - - switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: - cmark_chunk_set_cstr(&node->as.link.title, title); - return 1; - default: - break; - } - - return 0; -} - -int -cmark_node_get_start_line(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - return node->start_line; -} - -int -cmark_node_get_start_column(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - return node->start_column; -} - -int -cmark_node_get_end_line(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - return node->end_line; -} - -int -cmark_node_get_end_column(cmark_node *node) -{ - if (node == NULL) { - return 0; - } - return node->end_column; +static void S_free_nodes(cmark_node *e) { + cmark_node *next; + while (e != NULL) { + if (S_is_block(e)) { + cmark_strbuf_free(&e->string_content); + } + switch (e->type) { + case NODE_CODE_BLOCK: + cmark_chunk_free(&e->as.code.info); + cmark_chunk_free(&e->as.code.literal); + break; + case NODE_TEXT: + case NODE_INLINE_HTML: + case NODE_CODE: + case NODE_HTML: + cmark_chunk_free(&e->as.literal); + break; + case NODE_LINK: + case NODE_IMAGE: + cmark_chunk_free(&e->as.link.url); + cmark_chunk_free(&e->as.link.title); + break; + default: + break; + } + if (e->last_child) { + // Splice children into list + e->last_child->next = e->next; + e->next = e->first_child; + } + next = e->next; + free(e); + e = next; + } +} + +void cmark_node_free(cmark_node *node) { + S_node_unlink(node); + node->next = NULL; + S_free_nodes(node); +} + +cmark_node_type cmark_node_get_type(cmark_node *node) { + if (node == NULL) { + return CMARK_NODE_NONE; + } else { + return node->type; + } +} + +const char *cmark_node_get_type_string(cmark_node *node) { + if (node == NULL) { + return "NONE"; + } + + switch (node->type) { + case CMARK_NODE_NONE: + return "none"; + case CMARK_NODE_DOCUMENT: + return "document"; + case CMARK_NODE_BLOCK_QUOTE: + return "block_quote"; + case CMARK_NODE_LIST: + return "list"; + case CMARK_NODE_ITEM: + return "item"; + case CMARK_NODE_CODE_BLOCK: + return "code_block"; + case CMARK_NODE_HTML: + return "html"; + case CMARK_NODE_PARAGRAPH: + return "paragraph"; + case CMARK_NODE_HEADER: + return "header"; + case CMARK_NODE_HRULE: + return "hrule"; + case CMARK_NODE_TEXT: + return "text"; + case CMARK_NODE_SOFTBREAK: + return "softbreak"; + case CMARK_NODE_LINEBREAK: + return "linebreak"; + case CMARK_NODE_CODE: + return "code"; + case CMARK_NODE_INLINE_HTML: + return "inline_html"; + case CMARK_NODE_EMPH: + return "emph"; + case CMARK_NODE_STRONG: + return "strong"; + case CMARK_NODE_LINK: + return "link"; + case CMARK_NODE_IMAGE: + return "image"; + } + + return ""; +} + +cmark_node *cmark_node_next(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->next; + } +} + +cmark_node *cmark_node_previous(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->prev; + } +} + +cmark_node *cmark_node_parent(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->parent; + } +} + +cmark_node *cmark_node_first_child(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->first_child; + } +} + +cmark_node *cmark_node_last_child(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->last_child; + } +} + +void *cmark_node_get_user_data(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->user_data; + } +} + +int cmark_node_set_user_data(cmark_node *node, void *user_data) { + if (node == NULL) { + return 0; + } + node->user_data = user_data; + return 1; +} + +const char *cmark_node_get_literal(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case NODE_HTML: + case NODE_TEXT: + case NODE_INLINE_HTML: + case NODE_CODE: + return cmark_chunk_to_cstr(&node->as.literal); + + case NODE_CODE_BLOCK: + return cmark_chunk_to_cstr(&node->as.code.literal); + + default: + break; + } + + return NULL; +} + +int cmark_node_set_literal(cmark_node *node, const char *content) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case NODE_HTML: + case NODE_TEXT: + case NODE_INLINE_HTML: + case NODE_CODE: + cmark_chunk_set_cstr(&node->as.literal, content); + return 1; + + case NODE_CODE_BLOCK: + cmark_chunk_set_cstr(&node->as.code.literal, content); + return 1; + + default: + break; + } + + return 0; +} + +int cmark_node_get_header_level(cmark_node *node) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_HEADER: + return node->as.header.level; + + default: + break; + } + + return 0; +} + +int cmark_node_set_header_level(cmark_node *node, int level) { + if (node == NULL || level < 1 || level > 6) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_HEADER: + node->as.header.level = level; + return 1; + + default: + break; + } + + return 0; +} + +cmark_list_type cmark_node_get_list_type(cmark_node *node) { + if (node == NULL) { + return CMARK_NO_LIST; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.list_type; + } else { + return CMARK_NO_LIST; + } +} + +int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { + if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) { + return 0; + } + + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.list_type = type; + return 1; + } else { + return 0; + } +} + +cmark_delim_type cmark_node_get_list_delim(cmark_node *node) { + if (node == NULL) { + return CMARK_NO_DELIM; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.delimiter; + } else { + return CMARK_NO_DELIM; + } +} + +int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) { + if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) { + return 0; + } + + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.delimiter = delim; + return 1; + } else { + return 0; + } +} + +int cmark_node_get_list_start(cmark_node *node) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.start; + } else { + return 0; + } +} + +int cmark_node_set_list_start(cmark_node *node, int start) { + if (node == NULL || start < 0) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.start = start; + return 1; + } else { + return 0; + } +} + +int cmark_node_get_list_tight(cmark_node *node) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.tight; + } else { + return 0; + } +} + +int cmark_node_set_list_tight(cmark_node *node, int tight) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.tight = tight; + return 1; + } else { + return 0; + } +} + +const char *cmark_node_get_fence_info(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + if (node->type == NODE_CODE_BLOCK) { + return cmark_chunk_to_cstr(&node->as.code.info); + } else { + return NULL; + } +} + +int cmark_node_set_fence_info(cmark_node *node, const char *info) { + if (node == NULL) { + return 0; + } + + if (node->type == NODE_CODE_BLOCK) { + cmark_chunk_set_cstr(&node->as.code.info, info); + return 1; + } else { + return 0; + } +} + +const char *cmark_node_get_url(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case NODE_LINK: + case NODE_IMAGE: + return cmark_chunk_to_cstr(&node->as.link.url); + default: + break; + } + + return NULL; +} + +int cmark_node_set_url(cmark_node *node, const char *url) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case NODE_LINK: + case NODE_IMAGE: + cmark_chunk_set_cstr(&node->as.link.url, url); + return 1; + default: + break; + } + + return 0; +} + +const char *cmark_node_get_title(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case NODE_LINK: + case NODE_IMAGE: + return cmark_chunk_to_cstr(&node->as.link.title); + default: + break; + } + + return NULL; +} + +int cmark_node_set_title(cmark_node *node, const char *title) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case NODE_LINK: + case NODE_IMAGE: + cmark_chunk_set_cstr(&node->as.link.title, title); + return 1; + default: + break; + } + + return 0; +} + +int cmark_node_get_start_line(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->start_line; +} + +int cmark_node_get_start_column(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->start_column; +} + +int cmark_node_get_end_line(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->end_line; +} + +int cmark_node_get_end_column(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->end_column; } // Unlink a node without adjusting its next, prev, and parent pointers. -static void -S_node_unlink(cmark_node *node) -{ - if (node == NULL) { - return; - } +static void S_node_unlink(cmark_node *node) { + if (node == NULL) { + return; + } - if (node->prev) { - node->prev->next = node->next; - } - if (node->next) { - node->next->prev = node->prev; - } - - // Adjust first_child and last_child of parent. - cmark_node *parent = node->parent; - if (parent) { - if (parent->first_child == node) { - parent->first_child = node->next; - } - if (parent->last_child == node) { - parent->last_child = node->prev; - } - } -} - -void -cmark_node_unlink(cmark_node *node) -{ - S_node_unlink(node); - - node->next = NULL; - node->prev = NULL; - node->parent = NULL; + if (node->prev) { + node->prev->next = node->next; + } + if (node->next) { + node->next->prev = node->prev; + } -} - -int -cmark_node_insert_before(cmark_node *node, cmark_node *sibling) -{ - if (node == NULL || sibling == NULL) { - return 0; - } + // Adjust first_child and last_child of parent. + cmark_node *parent = node->parent; + if (parent) { + if (parent->first_child == node) { + parent->first_child = node->next; + } + if (parent->last_child == node) { + parent->last_child = node->prev; + } + } +} - if (!node->parent || !S_can_contain(node->parent, sibling)) { - return 0; - } - - S_node_unlink(sibling); +void cmark_node_unlink(cmark_node *node) { + S_node_unlink(node); - cmark_node *old_prev = node->prev; - - // Insert 'sibling' between 'old_prev' and 'node'. - if (old_prev) { - old_prev->next = sibling; - } - sibling->prev = old_prev; - sibling->next = node; - node->prev = sibling; + node->next = NULL; + node->prev = NULL; + node->parent = NULL; +} + +int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) { + if (node == NULL || sibling == NULL) { + return 0; + } + + if (!node->parent || !S_can_contain(node->parent, sibling)) { + return 0; + } + + S_node_unlink(sibling); + + cmark_node *old_prev = node->prev; + + // Insert 'sibling' between 'old_prev' and 'node'. + if (old_prev) { + old_prev->next = sibling; + } + sibling->prev = old_prev; + sibling->next = node; + node->prev = sibling; - // Set new parent. - cmark_node *parent = node->parent; - sibling->parent = parent; - - // Adjust first_child of parent if inserted as first child. - if (parent && !old_prev) { - parent->first_child = sibling; - } - - return 1; + // Set new parent. + cmark_node *parent = node->parent; + sibling->parent = parent; + + // Adjust first_child of parent if inserted as first child. + if (parent && !old_prev) { + parent->first_child = sibling; + } + + return 1; } - -int -cmark_node_insert_after(cmark_node *node, cmark_node *sibling) -{ - if (node == NULL || sibling == NULL) { - return 0; - } - - if (!node->parent || !S_can_contain(node->parent, sibling)) { - return 0; - } - - S_node_unlink(sibling); - - cmark_node *old_next = node->next; - - // Insert 'sibling' between 'node' and 'old_next'. - if (old_next) { - old_next->prev = sibling; - } - sibling->next = old_next; - sibling->prev = node; - node->next = sibling; - - // Set new parent. - cmark_node *parent = node->parent; - sibling->parent = parent; - - // Adjust last_child of parent if inserted as last child. - if (parent && !old_next) { - parent->last_child = sibling; - } - - return 1; -} - -int -cmark_node_prepend_child(cmark_node *node, cmark_node *child) -{ - if (!S_can_contain(node, child)) { - return 0; - } - - S_node_unlink(child); - - cmark_node *old_first_child = node->first_child; - - child->next = old_first_child; - child->prev = NULL; - child->parent = node; - node->first_child = child; - - if (old_first_child) { - old_first_child->prev = child; - } else { - // Also set last_child if node previously had no children. - node->last_child = child; - } - - return 1; -} - -int -cmark_node_append_child(cmark_node *node, cmark_node *child) -{ - if (!S_can_contain(node, child)) { - return 0; - } - - S_node_unlink(child); - - cmark_node *old_last_child = node->last_child; - - child->next = NULL; - child->prev = old_last_child; - child->parent = node; - node->last_child = child; - - if (old_last_child) { - old_last_child->next = child; - } else { - // Also set first_child if node previously had no children. - node->first_child = child; - } - - return 1; -} - -static void -S_print_error(FILE *out, cmark_node *node, const char *elem) -{ - if (out == NULL) { - return; - } - fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem, - cmark_node_get_type_string(node), node->start_line, - node->start_column); -} - -int -cmark_node_check(cmark_node *node, FILE *out) -{ - cmark_node *cur; - int errors = 0; - - if (!node) { - return 0; - } - - cur = node; - while (true) { - if (cur->first_child) { - if (cur->first_child->prev != NULL) { - S_print_error(out, cur->first_child, "prev"); - cur->first_child->prev = NULL; - ++errors; - } - if (cur->first_child->parent != cur) { - S_print_error(out, cur->first_child, "parent"); - cur->first_child->parent = cur; - ++errors; - } - cur = cur->first_child; - continue; - } - -next_sibling: - if (cur == node) { - break; - } - if (cur->next) { - if (cur->next->prev != cur) { - S_print_error(out, cur->next, "prev"); - cur->next->prev = cur; - ++errors; - } - if (cur->next->parent != cur->parent) { - S_print_error(out, cur->next, "parent"); - cur->next->parent = cur->parent; - ++errors; - } - cur = cur->next; - continue; - } - - if (cur->parent->last_child != cur) { - S_print_error(out, cur->parent, "last_child"); - cur->parent->last_child = cur; - ++errors; - } - cur = cur->parent; - goto next_sibling; - } - - return errors; + +int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) { + if (node == NULL || sibling == NULL) { + return 0; + } + + if (!node->parent || !S_can_contain(node->parent, sibling)) { + return 0; + } + + S_node_unlink(sibling); + + cmark_node *old_next = node->next; + + // Insert 'sibling' between 'node' and 'old_next'. + if (old_next) { + old_next->prev = sibling; + } + sibling->next = old_next; + sibling->prev = node; + node->next = sibling; + + // Set new parent. + cmark_node *parent = node->parent; + sibling->parent = parent; + + // Adjust last_child of parent if inserted as last child. + if (parent && !old_next) { + parent->last_child = sibling; + } + + return 1; +} + +int cmark_node_prepend_child(cmark_node *node, cmark_node *child) { + if (!S_can_contain(node, child)) { + return 0; + } + + S_node_unlink(child); + + cmark_node *old_first_child = node->first_child; + + child->next = old_first_child; + child->prev = NULL; + child->parent = node; + node->first_child = child; + + if (old_first_child) { + old_first_child->prev = child; + } else { + // Also set last_child if node previously had no children. + node->last_child = child; + } + + return 1; +} + +int cmark_node_append_child(cmark_node *node, cmark_node *child) { + if (!S_can_contain(node, child)) { + return 0; + } + + S_node_unlink(child); + + cmark_node *old_last_child = node->last_child; + + child->next = NULL; + child->prev = old_last_child; + child->parent = node; + node->last_child = child; + + if (old_last_child) { + old_last_child->next = child; + } else { + // Also set first_child if node previously had no children. + node->first_child = child; + } + + return 1; +} + +static void S_print_error(FILE *out, cmark_node *node, const char *elem) { + if (out == NULL) { + return; + } + fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem, + cmark_node_get_type_string(node), node->start_line, + node->start_column); +} + +int cmark_node_check(cmark_node *node, FILE *out) { + cmark_node *cur; + int errors = 0; + + if (!node) { + return 0; + } + + cur = node; + while (true) { + if (cur->first_child) { + if (cur->first_child->prev != NULL) { + S_print_error(out, cur->first_child, "prev"); + cur->first_child->prev = NULL; + ++errors; + } + if (cur->first_child->parent != cur) { + S_print_error(out, cur->first_child, "parent"); + cur->first_child->parent = cur; + ++errors; + } + cur = cur->first_child; + continue; + } + + next_sibling: + if (cur == node) { + break; + } + if (cur->next) { + if (cur->next->prev != cur) { + S_print_error(out, cur->next, "prev"); + cur->next->prev = cur; + ++errors; + } + if (cur->next->parent != cur->parent) { + S_print_error(out, cur->next, "parent"); + cur->next->parent = cur->parent; + ++errors; + } + cur = cur->next; + continue; + } + + if (cur->parent->last_child != cur) { + S_print_error(out, cur->parent, "last_child"); + cur->parent->last_child = cur; + ++errors; + } + cur = cur->parent; + goto next_sibling; + } + + return errors; } diff --git a/src/node.h b/src/node.h index b57940892a..48d12dfe99 100644 --- a/src/node.h +++ b/src/node.h @@ -13,68 +13,67 @@ extern "C" { #include "chunk.h" typedef struct { - cmark_list_type list_type; - int marker_offset; - int padding; - int start; - cmark_delim_type delimiter; - unsigned char bullet_char; - bool tight; + cmark_list_type list_type; + int marker_offset; + int padding; + int start; + cmark_delim_type delimiter; + unsigned char bullet_char; + bool tight; } cmark_list; typedef struct { - cmark_chunk info; - cmark_chunk literal; - int fence_length; - /* fence_offset must be 0-3, so we can use int8_t */ - int8_t fence_offset; - unsigned char fence_char; - bool fenced; + cmark_chunk info; + cmark_chunk literal; + int fence_length; + /* fence_offset must be 0-3, so we can use int8_t */ + int8_t fence_offset; + unsigned char fence_char; + bool fenced; } cmark_code; typedef struct { - int level; - bool setext; + int level; + bool setext; } cmark_header; typedef struct { - cmark_chunk url; - cmark_chunk title; + cmark_chunk url; + cmark_chunk title; } cmark_link; struct cmark_node { - struct cmark_node *next; - struct cmark_node *prev; - struct cmark_node *parent; - struct cmark_node *first_child; - struct cmark_node *last_child; - - void *user_data; - - int start_line; - int start_column; - int end_line; - int end_column; - - cmark_node_type type; - - bool open; - bool last_line_blank; - - cmark_strbuf string_content; - - union { - cmark_chunk literal; - cmark_list list; - cmark_code code; - cmark_header header; - cmark_link link; - int html_block_type; - } as; + struct cmark_node *next; + struct cmark_node *prev; + struct cmark_node *parent; + struct cmark_node *first_child; + struct cmark_node *last_child; + + void *user_data; + + int start_line; + int start_column; + int end_line; + int end_column; + + cmark_node_type type; + + bool open; + bool last_line_blank; + + cmark_strbuf string_content; + + union { + cmark_chunk literal; + cmark_list list; + cmark_code code; + cmark_header header; + cmark_link link; + int html_block_type; + } as; }; -CMARK_EXPORT int -cmark_node_check(cmark_node *node, FILE *out); +CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out); #ifdef __cplusplus } diff --git a/src/parser.h b/src/parser.h index 01a7aeb57d..f359e10adb 100644 --- a/src/parser.h +++ b/src/parser.h @@ -12,20 +12,20 @@ extern "C" { #define MAX_LINK_LABEL_LENGTH 1000 struct cmark_parser { - struct cmark_reference_map *refmap; - struct cmark_node* root; - struct cmark_node* current; - int line_number; - bufsize_t offset; - bufsize_t column; - bufsize_t first_nonspace; - bufsize_t first_nonspace_column; - int indent; - bool blank; - cmark_strbuf *curline; - bufsize_t last_line_length; - cmark_strbuf *linebuf; - int options; + struct cmark_reference_map *refmap; + struct cmark_node *root; + struct cmark_node *current; + int line_number; + bufsize_t offset; + bufsize_t column; + bufsize_t first_nonspace; + bufsize_t first_nonspace_column; + int indent; + bool blank; + cmark_strbuf *curline; + bufsize_t last_line_length; + cmark_strbuf *linebuf; + int options; }; #ifdef __cplusplus diff --git a/src/references.c b/src/references.c index 1d3d56d1b2..980a948f7b 100644 --- a/src/references.c +++ b/src/references.c @@ -5,150 +5,140 @@ #include "inlines.h" #include "chunk.h" -static unsigned int -refhash(const unsigned char *link_ref) -{ - unsigned int hash = 0; +static unsigned int refhash(const unsigned char *link_ref) { + unsigned int hash = 0; - while (*link_ref) - hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash; + while (*link_ref) + hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash; - return hash; + return hash; } -static void reference_free(cmark_reference *ref) -{ - if(ref != NULL) { - free(ref->label); - cmark_chunk_free(&ref->url); - cmark_chunk_free(&ref->title); - free(ref); - } +static void reference_free(cmark_reference *ref) { + if (ref != NULL) { + free(ref->label); + cmark_chunk_free(&ref->url); + cmark_chunk_free(&ref->title); + free(ref); + } } // normalize reference: collapse internal whitespace to single space, // remove leading/trailing whitespace, case fold // Return NULL if the reference name is actually empty (i.e. composed // solely from whitespace) -static unsigned char *normalize_reference(cmark_chunk *ref) -{ - cmark_strbuf normalized = GH_BUF_INIT; - unsigned char *result; +static unsigned char *normalize_reference(cmark_chunk *ref) { + cmark_strbuf normalized = GH_BUF_INIT; + unsigned char *result; - if(ref == NULL) - return NULL; + if (ref == NULL) + return NULL; - if (ref->len == 0) - return NULL; + if (ref->len == 0) + return NULL; - utf8proc_case_fold(&normalized, ref->data, ref->len); - cmark_strbuf_trim(&normalized); - cmark_strbuf_normalize_whitespace(&normalized); + utf8proc_case_fold(&normalized, ref->data, ref->len); + cmark_strbuf_trim(&normalized); + cmark_strbuf_normalize_whitespace(&normalized); - result = cmark_strbuf_detach(&normalized); - assert(result); + result = cmark_strbuf_detach(&normalized); + assert(result); - if (result[0] == '\0') { - free(result); - return NULL; - } + if (result[0] == '\0') { + free(result); + return NULL; + } - return result; + return result; } -static void add_reference(cmark_reference_map *map, cmark_reference* ref) -{ - cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE]; +static void add_reference(cmark_reference_map *map, cmark_reference *ref) { + cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE]; - while (t) { - if (t->hash == ref->hash && - !strcmp((char *)t->label, (char *)ref->label)) { - reference_free(ref); - return; - } + while (t) { + if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) { + reference_free(ref); + return; + } - t = t->next; - } + t = t->next; + } - map->table[ref->hash % REFMAP_SIZE] = ref; + map->table[ref->hash % REFMAP_SIZE] = ref; } -void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, cmark_chunk *url, - cmark_chunk *title) -{ - cmark_reference *ref; - unsigned char *reflabel = normalize_reference(label); - - /* empty reference name, or composed from only whitespace */ - if (reflabel == NULL) - return; - - ref = (cmark_reference *)calloc(1, sizeof(*ref)); - if(ref != NULL) { - ref->label = reflabel; - ref->hash = refhash(ref->label); - ref->url = cmark_clean_url(url); - ref->title = cmark_clean_title(title); - ref->next = NULL; - - add_reference(map, ref); - } +void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, + cmark_chunk *url, cmark_chunk *title) { + cmark_reference *ref; + unsigned char *reflabel = normalize_reference(label); + + /* empty reference name, or composed from only whitespace */ + if (reflabel == NULL) + return; + + ref = (cmark_reference *)calloc(1, sizeof(*ref)); + if (ref != NULL) { + ref->label = reflabel; + ref->hash = refhash(ref->label); + ref->url = cmark_clean_url(url); + ref->title = cmark_clean_title(title); + ref->next = NULL; + + add_reference(map, ref); + } } // Returns reference if refmap contains a reference with matching // label, otherwise NULL. -cmark_reference* cmark_reference_lookup(cmark_reference_map *map, cmark_chunk *label) -{ - cmark_reference *ref = NULL; - unsigned char *norm; - unsigned int hash; - - if (label->len > MAX_LINK_LABEL_LENGTH) - return NULL; - - if (map == NULL) - return NULL; - - norm = normalize_reference(label); - if (norm == NULL) - return NULL; - - hash = refhash(norm); - ref = map->table[hash % REFMAP_SIZE]; - - while (ref) { - if (ref->hash == hash && - !strcmp((char *)ref->label, (char *)norm)) - break; - ref = ref->next; - } - - free(norm); - return ref; +cmark_reference *cmark_reference_lookup(cmark_reference_map *map, + cmark_chunk *label) { + cmark_reference *ref = NULL; + unsigned char *norm; + unsigned int hash; + + if (label->len > MAX_LINK_LABEL_LENGTH) + return NULL; + + if (map == NULL) + return NULL; + + norm = normalize_reference(label); + if (norm == NULL) + return NULL; + + hash = refhash(norm); + ref = map->table[hash % REFMAP_SIZE]; + + while (ref) { + if (ref->hash == hash && !strcmp((char *)ref->label, (char *)norm)) + break; + ref = ref->next; + } + + free(norm); + return ref; } -void cmark_reference_map_free(cmark_reference_map *map) -{ - unsigned int i; +void cmark_reference_map_free(cmark_reference_map *map) { + unsigned int i; - if(map == NULL) - return; + if (map == NULL) + return; - for (i = 0; i < REFMAP_SIZE; ++i) { - cmark_reference *ref = map->table[i]; - cmark_reference *next; + for (i = 0; i < REFMAP_SIZE; ++i) { + cmark_reference *ref = map->table[i]; + cmark_reference *next; - while (ref) { - next = ref->next; - reference_free(ref); - ref = next; - } - } + while (ref) { + next = ref->next; + reference_free(ref); + ref = next; + } + } - free(map); + free(map); } -cmark_reference_map *cmark_reference_map_new(void) -{ - return (cmark_reference_map *)calloc(1, sizeof(cmark_reference_map)); +cmark_reference_map *cmark_reference_map_new(void) { + return (cmark_reference_map *)calloc(1, sizeof(cmark_reference_map)); } diff --git a/src/references.h b/src/references.h index a360cd5e79..310ff9fee1 100644 --- a/src/references.h +++ b/src/references.h @@ -10,25 +10,27 @@ extern "C" { #define REFMAP_SIZE 16 struct cmark_reference { - struct cmark_reference *next; - unsigned char *label; - cmark_chunk url; - cmark_chunk title; - unsigned int hash; + struct cmark_reference *next; + unsigned char *label; + cmark_chunk url; + cmark_chunk title; + unsigned int hash; }; typedef struct cmark_reference cmark_reference; struct cmark_reference_map { - cmark_reference *table[REFMAP_SIZE]; + cmark_reference *table[REFMAP_SIZE]; }; typedef struct cmark_reference_map cmark_reference_map; cmark_reference_map *cmark_reference_map_new(void); void cmark_reference_map_free(cmark_reference_map *map); -cmark_reference* cmark_reference_lookup(cmark_reference_map *map, cmark_chunk *label); -extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, cmark_chunk *url, cmark_chunk *title); +cmark_reference *cmark_reference_lookup(cmark_reference_map *map, + cmark_chunk *label); +extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, + cmark_chunk *url, cmark_chunk *title); #ifdef __cplusplus } diff --git a/src/render.c b/src/render.c index 2f1faac4d2..4912615fda 100644 --- a/src/render.c +++ b/src/render.c @@ -5,182 +5,159 @@ #include "utf8.h" #include "render.h" -static inline -void S_cr(cmark_renderer *renderer) -{ - if (renderer->need_cr < 1) { - renderer->need_cr = 1; - } +static inline void S_cr(cmark_renderer *renderer) { + if (renderer->need_cr < 1) { + renderer->need_cr = 1; + } } -static inline -void S_blankline(cmark_renderer *renderer) -{ - if (renderer->need_cr < 2) { - renderer->need_cr = 2; - } +static inline void S_blankline(cmark_renderer *renderer) { + if (renderer->need_cr < 2) { + renderer->need_cr = 2; + } } -static -void S_out(cmark_renderer *renderer, - const char *source, - bool wrap, - cmark_escaping escape) -{ - int length = cmark_strbuf_safe_strlen(source); - unsigned char nextc; - int32_t c; - int i = 0; - int len; - cmark_chunk remainder = cmark_chunk_literal(""); - int k = renderer->buffer->size - 1; - - wrap = wrap && !renderer->no_wrap; - - if (renderer->in_tight_list_item && renderer->need_cr > 1) { - renderer->need_cr = 1; - } - while (renderer->need_cr) { - if (k < 0 || renderer->buffer->ptr[k] == '\n') { - k -= 1; - } else { - cmark_strbuf_putc(renderer->buffer, '\n'); - if (renderer->need_cr > 1) { - cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, - renderer->prefix->size); - } - } - renderer->column = 0; - renderer->begin_line = true; - renderer->need_cr -= 1; - } - - while (i < length) { - if (renderer->begin_line) { - cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, - renderer->prefix->size); - // note: this assumes prefix is ascii: - renderer->column = renderer->prefix->size; - } - - len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c); - if (len == -1) { // error condition - return; // return without rendering rest of string - } - nextc = source[i + len]; - if (c == 32 && wrap) { - if (!renderer->begin_line) { - cmark_strbuf_putc(renderer->buffer, ' '); - renderer->column += 1; - renderer->begin_line = false; - renderer->last_breakable = renderer->buffer->size - - 1; - // skip following spaces - while (source[i + 1] == ' ') { - i++; - } - } - - } else if (c == 10) { - cmark_strbuf_putc(renderer->buffer, '\n'); - renderer->column = 0; - renderer->begin_line = true; - renderer->last_breakable = 0; - } else if (escape == LITERAL) { - cmark_render_code_point(renderer, c); - renderer->begin_line = false; - } else { - (renderer->outc)(renderer, escape, c, nextc); - renderer->begin_line = false; - } - - // If adding the character went beyond width, look for an - // earlier place where the line could be broken: - if (renderer->width > 0 && - renderer->column > renderer->width && - !renderer->begin_line && - renderer->last_breakable > 0) { - - // copy from last_breakable to remainder - cmark_chunk_set_cstr(&remainder, (char *) renderer->buffer->ptr + renderer->last_breakable + 1); - // truncate at last_breakable - cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable); - // add newline, prefix, and remainder - cmark_strbuf_putc(renderer->buffer, '\n'); - cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, - renderer->prefix->size); - cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len); - renderer->column = renderer->prefix->size + remainder.len; - cmark_chunk_free(&remainder); - renderer->last_breakable = 0; - renderer->begin_line = false; - } - - i += len; - } +static void S_out(cmark_renderer *renderer, const char *source, bool wrap, + cmark_escaping escape) { + int length = cmark_strbuf_safe_strlen(source); + unsigned char nextc; + int32_t c; + int i = 0; + int len; + cmark_chunk remainder = cmark_chunk_literal(""); + int k = renderer->buffer->size - 1; + + wrap = wrap && !renderer->no_wrap; + + if (renderer->in_tight_list_item && renderer->need_cr > 1) { + renderer->need_cr = 1; + } + while (renderer->need_cr) { + if (k < 0 || renderer->buffer->ptr[k] == '\n') { + k -= 1; + } else { + cmark_strbuf_putc(renderer->buffer, '\n'); + if (renderer->need_cr > 1) { + cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, + renderer->prefix->size); + } + } + renderer->column = 0; + renderer->begin_line = true; + renderer->need_cr -= 1; + } + + while (i < length) { + if (renderer->begin_line) { + cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, + renderer->prefix->size); + // note: this assumes prefix is ascii: + renderer->column = renderer->prefix->size; + } + + len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c); + if (len == -1) { // error condition + return; // return without rendering rest of string + } + nextc = source[i + len]; + if (c == 32 && wrap) { + if (!renderer->begin_line) { + cmark_strbuf_putc(renderer->buffer, ' '); + renderer->column += 1; + renderer->begin_line = false; + renderer->last_breakable = renderer->buffer->size - 1; + // skip following spaces + while (source[i + 1] == ' ') { + i++; + } + } + + } else if (c == 10) { + cmark_strbuf_putc(renderer->buffer, '\n'); + renderer->column = 0; + renderer->begin_line = true; + renderer->last_breakable = 0; + } else if (escape == LITERAL) { + cmark_render_code_point(renderer, c); + renderer->begin_line = false; + } else { + (renderer->outc)(renderer, escape, c, nextc); + renderer->begin_line = false; + } + + // If adding the character went beyond width, look for an + // earlier place where the line could be broken: + if (renderer->width > 0 && renderer->column > renderer->width && + !renderer->begin_line && renderer->last_breakable > 0) { + + // copy from last_breakable to remainder + cmark_chunk_set_cstr(&remainder, (char *)renderer->buffer->ptr + + renderer->last_breakable + 1); + // truncate at last_breakable + cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable); + // add newline, prefix, and remainder + cmark_strbuf_putc(renderer->buffer, '\n'); + cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, + renderer->prefix->size); + cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len); + renderer->column = renderer->prefix->size + remainder.len; + cmark_chunk_free(&remainder); + renderer->last_breakable = 0; + renderer->begin_line = false; + } + + i += len; + } } // Assumes no newlines, assumes ascii content: -void -cmark_render_ascii(cmark_renderer* renderer, const char* s) -{ - int origsize = renderer->buffer->size; - cmark_strbuf_puts(renderer->buffer, s); - renderer->column += renderer->buffer->size - origsize; +void cmark_render_ascii(cmark_renderer *renderer, const char *s) { + int origsize = renderer->buffer->size; + cmark_strbuf_puts(renderer->buffer, s); + renderer->column += renderer->buffer->size - origsize; } -void -cmark_render_code_point(cmark_renderer *renderer, uint32_t c) -{ - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; +void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) { + utf8proc_encode_char(c, renderer->buffer); + renderer->column += 1; } -char* -cmark_render(cmark_node *root, - int options, - int width, - void (*outc)(cmark_renderer*, - cmark_escaping, - int32_t, - unsigned char), - int (*render_node)(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options)) -{ - cmark_strbuf pref = GH_BUF_INIT; - cmark_strbuf buf = GH_BUF_INIT; - cmark_node *cur; - cmark_event_type ev_type; - char *result; - cmark_iter *iter = cmark_iter_new(root); - - cmark_renderer renderer = { &buf, &pref, 0, width, - 0, 0, true, false, false, - outc, S_cr, S_blankline, S_out - }; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (!render_node(&renderer, cur, ev_type, options)) { - // a false value causes us to skip processing - // the node's contents. this is used for - // autolinks. - cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT); - } - } - - // ensure final newline - if (renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') { - cmark_strbuf_putc(renderer.buffer, '\n'); - } - - result = (char *)cmark_strbuf_detach(renderer.buffer); - - cmark_iter_free(iter); - cmark_strbuf_free(renderer.prefix); - cmark_strbuf_free(renderer.buffer); - - return result; +char *cmark_render(cmark_node *root, int options, int width, + void (*outc)(cmark_renderer *, cmark_escaping, int32_t, + unsigned char), + int (*render_node)(cmark_renderer *renderer, + cmark_node *node, + cmark_event_type ev_type, int options)) { + cmark_strbuf pref = GH_BUF_INIT; + cmark_strbuf buf = GH_BUF_INIT; + cmark_node *cur; + cmark_event_type ev_type; + char *result; + cmark_iter *iter = cmark_iter_new(root); + + cmark_renderer renderer = {&buf, &pref, 0, width, 0, 0, true, + false, false, outc, S_cr, S_blankline, S_out}; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (!render_node(&renderer, cur, ev_type, options)) { + // a false value causes us to skip processing + // the node's contents. this is used for + // autolinks. + cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT); + } + } + + // ensure final newline + if (renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') { + cmark_strbuf_putc(renderer.buffer, '\n'); + } + + result = (char *)cmark_strbuf_detach(renderer.buffer); + + cmark_iter_free(iter); + cmark_strbuf_free(renderer.prefix); + cmark_strbuf_free(renderer.buffer); + + return result; } diff --git a/src/render.h b/src/render.h index ca541bc1b6..9ab347b114 100644 --- a/src/render.h +++ b/src/render.h @@ -9,55 +9,36 @@ extern "C" { #include "buffer.h" #include "chunk.h" -typedef enum { - LITERAL, - NORMAL, - TITLE, - URL -} cmark_escaping; +typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping; struct cmark_renderer { - cmark_strbuf* buffer; - cmark_strbuf* prefix; - int column; - int width; - int need_cr; - bufsize_t last_breakable; - bool begin_line; - bool no_wrap; - bool in_tight_list_item; - void (*outc)(struct cmark_renderer*, - cmark_escaping, - int32_t, - unsigned char); - void (*cr)(struct cmark_renderer*); - void (*blankline)(struct cmark_renderer*); - void (*out)(struct cmark_renderer*, - const char *, - bool, - cmark_escaping); + cmark_strbuf *buffer; + cmark_strbuf *prefix; + int column; + int width; + int need_cr; + bufsize_t last_breakable; + bool begin_line; + bool no_wrap; + bool in_tight_list_item; + void (*outc)(struct cmark_renderer *, cmark_escaping, int32_t, unsigned char); + void (*cr)(struct cmark_renderer *); + void (*blankline)(struct cmark_renderer *); + void (*out)(struct cmark_renderer *, const char *, bool, cmark_escaping); }; typedef struct cmark_renderer cmark_renderer; -void -cmark_render_ascii(cmark_renderer *renderer, const char* s); +void cmark_render_ascii(cmark_renderer *renderer, const char *s); -void -cmark_render_code_point(cmark_renderer *renderer, uint32_t c); +void cmark_render_code_point(cmark_renderer *renderer, uint32_t c); -char* -cmark_render(cmark_node *root, - int options, - int width, - void (*outc)(cmark_renderer*, - cmark_escaping, - int32_t, - unsigned char), - int (*render_node)(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, - int options)); +char *cmark_render(cmark_node *root, int options, int width, + void (*outc)(cmark_renderer *, cmark_escaping, int32_t, + unsigned char), + int (*render_node)(cmark_renderer *renderer, + cmark_node *node, + cmark_event_type ev_type, int options)); #ifdef __cplusplus } diff --git a/src/scanners.c b/src/scanners.c index 75fdb46113..9237c7ff6b 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -3,21045 +3,27836 @@ #include "chunk.h" #include "scanners.h" -bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset) -{ - bufsize_t res; - unsigned char *ptr = (unsigned char *)c->data; - unsigned char lim = ptr[c->len]; +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, + bufsize_t offset) { + bufsize_t res; + unsigned char *ptr = (unsigned char *)c->data; + unsigned char lim = ptr[c->len]; - ptr[c->len] = '\0'; - res = scanner(ptr + offset); - ptr[c->len] = lim; + ptr[c->len] = '\0'; + res = scanner(ptr + offset); + ptr[c->len] = lim; - return res; + return res; } - - // Try to match a scheme including colon. -bufsize_t _scan_scheme(const unsigned char *p) -{ +bufsize_t _scan_scheme(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - - yych = *(marker = p); - if (yych <= 'c') { - if (yych <= 'M') { - if (yych <= 'E') { - if (yych <= 'A') { - if (yych == '\n') goto yy2; - if (yych <= '@') goto yy29; - goto yy6; - } else { - if (yych <= 'B') goto yy24; - if (yych <= 'C') goto yy3; - if (yych <= 'D') goto yy4; - goto yy25; - } - } else { - if (yych <= 'I') { - if (yych <= 'F') goto yy7; - if (yych <= 'G') goto yy8; - if (yych <= 'H') goto yy9; - goto yy10; - } else { - if (yych <= 'J') goto yy5; - if (yych <= 'K') goto yy26; - if (yych <= 'L') goto yy11; - goto yy12; - } - } - } else { - if (yych <= 'U') { - if (yych <= 'Q') { - if (yych <= 'N') goto yy13; - if (yych <= 'O') goto yy14; - if (yych <= 'P') goto yy15; - goto yy27; - } else { - if (yych <= 'R') goto yy16; - if (yych <= 'S') goto yy17; - if (yych <= 'T') goto yy18; - goto yy19; - } - } else { - if (yych <= 'Y') { - if (yych <= 'V') goto yy20; - if (yych <= 'W') goto yy21; - if (yych <= 'X') goto yy22; - goto yy28; - } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy23; - goto yy29; - } else { - if (yych <= 'a') goto yy6; - if (yych <= 'b') goto yy24; - goto yy3; - } - } - } - } - } else { - if (yych <= 't') { - if (yych <= 'k') { - if (yych <= 'g') { - if (yych <= 'd') goto yy4; - if (yych <= 'e') goto yy25; - if (yych <= 'f') goto yy7; - goto yy8; - } else { - if (yych <= 'h') goto yy9; - if (yych <= 'i') goto yy10; - if (yych <= 'j') goto yy5; - goto yy26; - } - } else { - if (yych <= 'o') { - if (yych <= 'l') goto yy11; - if (yych <= 'm') goto yy12; - if (yych <= 'n') goto yy13; - goto yy14; - } else { - if (yych <= 'q') { - if (yych <= 'p') goto yy15; - goto yy27; - } else { - if (yych <= 'r') goto yy16; - if (yych <= 's') goto yy17; - goto yy18; - } - } - } - } else { - if (yych <= 0xC1) { - if (yych <= 'x') { - if (yych <= 'u') goto yy19; - if (yych <= 'v') goto yy20; - if (yych <= 'w') goto yy21; - goto yy22; - } else { - if (yych <= 'y') goto yy28; - if (yych <= 'z') goto yy23; - if (yych <= 0x7F) goto yy29; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy30; - if (yych <= 0xE0) goto yy32; - if (yych <= 0xEC) goto yy33; - goto yy37; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy33; - goto yy34; - } else { - if (yych <= 0xF3) goto yy35; - if (yych <= 0xF4) goto yy36; - } - } - } - } - } -yy2: - { return 0; } -yy3: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy447; - case 'H': - case 'h': goto yy446; - case 'I': - case 'i': goto yy449; - case 'O': - case 'o': goto yy445; - case 'R': - case 'r': goto yy448; - case 'V': - case 'v': goto yy444; - default: goto yy2; - } -yy4: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy420; - case 'I': - case 'i': goto yy419; - case 'L': - case 'l': goto yy417; - case 'N': - case 'n': goto yy418; - case 'O': - case 'o': goto yy421; - case 'T': - case 't': goto yy416; - case 'V': - case 'v': goto yy415; - default: goto yy2; - } -yy5: - yych = *(marker = ++p); - if (yych <= 'M') { - if (yych == 'A') goto yy407; - if (yych <= 'L') goto yy2; - goto yy406; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy2; - goto yy407; - } else { - if (yych == 'm') goto yy406; - goto yy2; - } - } -yy6: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy388; - case 'B': - case 'b': goto yy387; - case 'C': - case 'c': goto yy386; - case 'D': - case 'd': goto yy385; - case 'F': - case 'f': goto yy384; - case 'I': - case 'i': goto yy383; - case 'P': - case 'p': goto yy382; - case 'T': - case 't': goto yy381; - case 'W': - case 'w': goto yy41; - default: goto yy2; - } -yy7: - yych = *(marker = ++p); - if (yych <= 'T') { - if (yych <= 'E') { - if (yych == 'A') goto yy368; - if (yych <= 'D') goto yy2; - goto yy367; - } else { - if (yych == 'I') goto yy366; - if (yych <= 'S') goto yy2; - goto yy369; - } - } else { - if (yych <= 'e') { - if (yych == 'a') goto yy368; - if (yych <= 'd') goto yy2; - goto yy367; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy2; - goto yy366; - } else { - if (yych == 't') goto yy369; - goto yy2; - } - } - } -yy8: - yych = *(marker = ++p); - switch (yych) { - case 'E': - case 'e': goto yy351; - case 'G': - case 'g': goto yy41; - case 'I': - case 'i': goto yy349; - case 'O': - case 'o': goto yy350; - case 'T': - case 't': goto yy348; - default: goto yy2; - } -yy9: - yych = *(marker = ++p); - if (yych <= 'S') { - if (yych <= '3') { - if (yych <= '2') goto yy2; - goto yy344; - } else { - if (yych == 'C') goto yy342; - goto yy2; - } - } else { - if (yych <= 'c') { - if (yych <= 'T') goto yy343; - if (yych <= 'b') goto yy2; - goto yy342; - } else { - if (yych == 't') goto yy343; - goto yy2; - } - } -yy10: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy324; - case 'C': - case 'c': goto yy321; - case 'M': - case 'm': goto yy323; - case 'N': - case 'n': goto yy322; - case 'P': - case 'p': goto yy320; - case 'R': - case 'r': goto yy319; - case 'T': - case 't': goto yy318; - default: goto yy2; - } -yy11: - yych = *(marker = ++p); - if (yych <= 'D') { - if (yych == 'A') goto yy312; - if (yych <= 'C') goto yy2; - goto yy311; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy2; - goto yy312; - } else { - if (yych == 'd') goto yy311; - goto yy2; - } - } -yy12: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy278; - case 'E': - case 'e': goto yy277; - case 'I': - case 'i': goto yy280; - case 'M': - case 'm': goto yy276; - case 'S': - case 's': goto yy275; - case 'T': - case 't': goto yy279; - case 'U': - case 'u': goto yy274; - case 'V': - case 'v': goto yy273; - default: goto yy2; - } -yy13: - yych = *(marker = ++p); - switch (yych) { - case 'E': - case 'e': goto yy268; - case 'F': - case 'f': goto yy267; - case 'I': - case 'i': goto yy266; - case 'N': - case 'n': goto yy265; - case 'O': - case 'o': goto yy264; - default: goto yy2; - } -yy14: - yych = *(marker = ++p); - if (yych <= 'P') { - if (yych == 'I') goto yy250; - if (yych <= 'O') goto yy2; - goto yy251; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy2; - goto yy250; - } else { - if (yych == 'p') goto yy251; - goto yy2; - } - } -yy15: - yych = *(marker = ++p); - if (yych <= 'S') { - if (yych <= 'L') { - if (yych == 'A') goto yy232; - if (yych <= 'K') goto yy2; - goto yy231; - } else { - if (yych <= 'O') { - if (yych <= 'N') goto yy2; - goto yy233; - } else { - if (yych <= 'Q') goto yy2; - if (yych <= 'R') goto yy230; - goto yy229; - } - } - } else { - if (yych <= 'n') { - if (yych <= 'a') { - if (yych <= '`') goto yy2; - goto yy232; - } else { - if (yych == 'l') goto yy231; - goto yy2; - } - } else { - if (yych <= 'q') { - if (yych <= 'o') goto yy233; - goto yy2; - } else { - if (yych <= 'r') goto yy230; - if (yych <= 's') goto yy229; - goto yy2; - } - } - } -yy16: - yych = *(marker = ++p); - if (yych <= 'T') { - if (yych <= 'L') { - if (yych == 'E') goto yy219; - goto yy2; - } else { - if (yych <= 'M') goto yy218; - if (yych <= 'R') goto yy2; - if (yych <= 'S') goto yy217; - goto yy216; - } - } else { - if (yych <= 'm') { - if (yych == 'e') goto yy219; - if (yych <= 'l') goto yy2; - goto yy218; - } else { - if (yych <= 'r') goto yy2; - if (yych <= 's') goto yy217; - if (yych <= 't') goto yy216; - goto yy2; - } - } -yy17: - yych = *(marker = ++p); - switch (yych) { - case 'E': - case 'e': goto yy172; - case 'F': - case 'f': goto yy171; - case 'G': - case 'g': goto yy170; - case 'H': - case 'h': goto yy175; - case 'I': - case 'i': goto yy174; - case 'K': - case 'k': goto yy169; - case 'M': - case 'm': goto yy168; - case 'N': - case 'n': goto yy173; - case 'O': - case 'o': goto yy167; - case 'P': - case 'p': goto yy166; - case 'S': - case 's': goto yy165; - case 'T': - case 't': goto yy164; - case 'V': - case 'v': goto yy163; - default: goto yy2; - } -yy18: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy139; - case 'E': - case 'e': goto yy135; - case 'F': - case 'f': goto yy138; - case 'H': - case 'h': goto yy134; - case 'I': - case 'i': goto yy136; - case 'N': - case 'n': goto yy137; - case 'V': - case 'v': goto yy41; - default: goto yy2; - } -yy19: - yych = *(marker = ++p); - if (yych <= 'T') { - if (yych <= 'N') { - if (yych == 'D') goto yy126; - if (yych <= 'M') goto yy2; - goto yy125; - } else { - if (yych == 'R') goto yy127; - if (yych <= 'S') goto yy2; - goto yy124; - } - } else { - if (yych <= 'n') { - if (yych == 'd') goto yy126; - if (yych <= 'm') goto yy2; - goto yy125; - } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy2; - goto yy127; - } else { - if (yych == 't') goto yy124; - goto yy2; - } - } - } -yy20: - yych = *(marker = ++p); - if (yych <= 'I') { - if (yych == 'E') goto yy108; - if (yych <= 'H') goto yy2; - goto yy107; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy2; - goto yy108; - } else { - if (yych == 'i') goto yy107; - goto yy2; - } - } -yy21: - yych = *(marker = ++p); - if (yych <= 'Y') { - if (yych <= 'R') { - if (yych == 'E') goto yy97; - goto yy2; - } else { - if (yych <= 'S') goto yy98; - if (yych <= 'T') goto yy96; - if (yych <= 'X') goto yy2; - goto yy95; - } - } else { - if (yych <= 's') { - if (yych == 'e') goto yy97; - if (yych <= 'r') goto yy2; - goto yy98; - } else { - if (yych <= 't') goto yy96; - if (yych == 'y') goto yy95; - goto yy2; - } - } -yy22: - yych = *(marker = ++p); - if (yych <= 'R') { - if (yych <= 'F') { - if (yych == 'C') goto yy74; - if (yych <= 'E') goto yy2; - goto yy72; - } else { - if (yych == 'M') goto yy73; - if (yych <= 'Q') goto yy2; - goto yy71; - } - } else { - if (yych <= 'f') { - if (yych == 'c') goto yy74; - if (yych <= 'e') goto yy2; - goto yy72; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy2; - goto yy73; - } else { - if (yych == 'r') goto yy71; - goto yy2; - } - } - } -yy23: - yych = *(marker = ++p); - if (yych == '3') goto yy66; - goto yy2; -yy24: - yych = *(marker = ++p); - if (yych <= 'O') { - if (yych <= 'H') { - if (yych == 'E') goto yy56; - goto yy2; - } else { - if (yych <= 'I') goto yy55; - if (yych <= 'N') goto yy2; - goto yy54; - } - } else { - if (yych <= 'h') { - if (yych == 'e') goto yy56; - goto yy2; - } else { - if (yych <= 'i') goto yy55; - if (yych == 'o') goto yy54; - goto yy2; - } - } -yy25: - yych = *(marker = ++p); - if (yych == 'D') goto yy52; - if (yych == 'd') goto yy52; - goto yy2; -yy26: - yych = *(marker = ++p); - if (yych == 'E') goto yy47; - if (yych == 'e') goto yy47; - goto yy2; -yy27: - yych = *(marker = ++p); - if (yych == 'U') goto yy44; - if (yych == 'u') goto yy44; - goto yy2; -yy28: - yych = *(marker = ++p); - if (yych == 'M') goto yy38; - if (yych == 'm') goto yy38; - goto yy2; -yy29: - yych = *++p; - goto yy2; -yy30: - yych = *++p; - if (yych <= 0x7F) goto yy31; - if (yych <= 0xBF) goto yy29; -yy31: - p = marker; - goto yy2; -yy32: - yych = *++p; - if (yych <= 0x9F) goto yy31; - if (yych <= 0xBF) goto yy30; - goto yy31; -yy33: - yych = *++p; - if (yych <= 0x7F) goto yy31; - if (yych <= 0xBF) goto yy30; - goto yy31; -yy34: - yych = *++p; - if (yych <= 0x8F) goto yy31; - if (yych <= 0xBF) goto yy33; - goto yy31; -yy35: - yych = *++p; - if (yych <= 0x7F) goto yy31; - if (yych <= 0xBF) goto yy33; - goto yy31; -yy36: - yych = *++p; - if (yych <= 0x7F) goto yy31; - if (yych <= 0x8F) goto yy33; - goto yy31; -yy37: - yych = *++p; - if (yych <= 0x7F) goto yy31; - if (yych <= 0x9F) goto yy30; - goto yy31; -yy38: - yych = *++p; - if (yych == 'S') goto yy39; - if (yych != 's') goto yy31; -yy39: - yych = *++p; - if (yych == 'G') goto yy40; - if (yych != 'g') goto yy31; -yy40: - yych = *++p; - if (yych == 'R') goto yy41; - if (yych != 'r') goto yy31; -yy41: - yych = *++p; - if (yych != ':') goto yy31; -yy42: - ++p; - { return (bufsize_t)(p - start); } -yy44: - yych = *++p; - if (yych == 'E') goto yy45; - if (yych != 'e') goto yy31; -yy45: - yych = *++p; - if (yych == 'R') goto yy46; - if (yych != 'r') goto yy31; -yy46: - yych = *++p; - if (yych == 'Y') goto yy41; - if (yych == 'y') goto yy41; - goto yy31; -yy47: - yych = *++p; - if (yych == 'Y') goto yy48; - if (yych != 'y') goto yy31; -yy48: - yych = *++p; - if (yych == 'P') goto yy49; - if (yych != 'p') goto yy31; -yy49: - yych = *++p; - if (yych == 'A') goto yy50; - if (yych != 'a') goto yy31; -yy50: - yych = *++p; - if (yych == 'R') goto yy51; - if (yych != 'r') goto yy31; -yy51: - yych = *++p; - if (yych == 'C') goto yy41; - if (yych == 'c') goto yy41; - goto yy31; -yy52: - yych = *++p; - if (yych != '2') goto yy31; - yych = *++p; - if (yych == 'K') goto yy41; - if (yych == 'k') goto yy41; - goto yy31; -yy54: - yych = *++p; - if (yych == 'L') goto yy65; - if (yych == 'l') goto yy65; - goto yy31; -yy55: - yych = *++p; - if (yych == 'T') goto yy61; - if (yych == 't') goto yy61; - goto yy31; -yy56: - yych = *++p; - if (yych == 'S') goto yy57; - if (yych != 's') goto yy31; -yy57: - yych = *++p; - if (yych == 'H') goto yy58; - if (yych != 'h') goto yy31; -yy58: - yych = *++p; - if (yych == 'A') goto yy59; - if (yych != 'a') goto yy31; -yy59: - yych = *++p; - if (yych == 'R') goto yy60; - if (yych != 'r') goto yy31; -yy60: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy61: - yych = *++p; - if (yych == 'C') goto yy62; - if (yych != 'c') goto yy31; -yy62: - yych = *++p; - if (yych == 'O') goto yy63; - if (yych != 'o') goto yy31; -yy63: - yych = *++p; - if (yych == 'I') goto yy64; - if (yych != 'i') goto yy31; -yy64: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy65: - yych = *++p; - if (yych == 'O') goto yy41; - if (yych == 'o') goto yy41; - goto yy31; -yy66: - yych = *++p; - if (yych != '9') goto yy31; - yych = *++p; - if (yych != '.') goto yy31; - yych = *++p; - if (yych != '5') goto yy31; - yych = *++p; - if (yych != '0') goto yy31; - yych = *++p; - if (yych <= 'Q') goto yy31; - if (yych <= 'S') goto yy41; - if (yych <= 'q') goto yy31; - if (yych <= 's') goto yy41; - goto yy31; -yy71: - yych = *++p; - if (yych == 'I') goto yy41; - if (yych == 'i') goto yy41; - goto yy31; -yy72: - yych = *++p; - if (yych == 'I') goto yy93; - if (yych == 'i') goto yy93; - goto yy31; -yy73: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy83; - if (yych <= 'O') goto yy31; - goto yy84; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy31; - goto yy83; - } else { - if (yych == 'p') goto yy84; - goto yy31; - } - } -yy74: - yych = *++p; - if (yych == 'O') goto yy75; - if (yych != 'o') goto yy31; -yy75: - yych = *++p; - if (yych == 'N') goto yy76; - if (yych != 'n') goto yy31; -yy76: - yych = *++p; - if (yych == '-') goto yy77; - if (yych == ':') goto yy42; - goto yy31; -yy77: - yych = *++p; - if (yych == 'U') goto yy78; - if (yych != 'u') goto yy31; -yy78: - yych = *++p; - if (yych == 'S') goto yy79; - if (yych != 's') goto yy31; -yy79: - yych = *++p; - if (yych == 'E') goto yy80; - if (yych != 'e') goto yy31; -yy80: - yych = *++p; - if (yych == 'R') goto yy81; - if (yych != 'r') goto yy31; -yy81: - yych = *++p; - if (yych == 'I') goto yy82; - if (yych != 'i') goto yy31; -yy82: - yych = *++p; - if (yych == 'D') goto yy41; - if (yych == 'd') goto yy41; - goto yy31; -yy83: - yych = *++p; - if (yych == 'R') goto yy85; - if (yych == 'r') goto yy85; - goto yy31; -yy84: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy85: - yych = *++p; - if (yych == 'P') goto yy86; - if (yych != 'p') goto yy31; -yy86: - yych = *++p; - if (yych == 'C') goto yy87; - if (yych != 'c') goto yy31; -yy87: - yych = *++p; - if (yych != '.') goto yy31; - yych = *++p; - if (yych == 'B') goto yy89; - if (yych != 'b') goto yy31; -yy89: - yych = *++p; - if (yych == 'E') goto yy90; - if (yych != 'e') goto yy31; -yy90: - yych = *++p; - if (yych == 'E') goto yy91; - if (yych != 'e') goto yy31; -yy91: - yych = *++p; - if (yych == 'P') goto yy92; - if (yych != 'p') goto yy31; -yy92: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy93: - yych = *++p; - if (yych == 'R') goto yy94; - if (yych != 'r') goto yy31; -yy94: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy95: - yych = *++p; - if (yych == 'C') goto yy103; - if (yych == 'c') goto yy103; - goto yy31; -yy96: - yych = *++p; - if (yych == 'A') goto yy102; - if (yych == 'a') goto yy102; - goto yy31; -yy97: - yych = *++p; - if (yych == 'B') goto yy99; - if (yych == 'b') goto yy99; - goto yy31; -yy98: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy99: - yych = *++p; - if (yych == 'C') goto yy100; - if (yych != 'c') goto yy31; -yy100: - yych = *++p; - if (yych == 'A') goto yy101; - if (yych != 'a') goto yy31; -yy101: - yych = *++p; - if (yych == 'L') goto yy41; - if (yych == 'l') goto yy41; - goto yy31; -yy102: - yych = *++p; - if (yych == 'I') goto yy41; - if (yych == 'i') goto yy41; - goto yy31; -yy103: - yych = *++p; - if (yych == 'I') goto yy104; - if (yych != 'i') goto yy31; -yy104: - yych = *++p; - if (yych == 'W') goto yy105; - if (yych != 'w') goto yy31; -yy105: - yych = *++p; - if (yych == 'Y') goto yy106; - if (yych != 'y') goto yy31; -yy106: - yych = *++p; - if (yych == 'G') goto yy41; - if (yych == 'g') goto yy41; - goto yy31; -yy107: - yych = *++p; - if (yych == 'E') goto yy116; - if (yych == 'e') goto yy116; - goto yy31; -yy108: - yych = *++p; - if (yych <= 'N') { - if (yych <= 'L') goto yy31; - if (yych >= 'N') goto yy110; - } else { - if (yych <= 'l') goto yy31; - if (yych <= 'm') goto yy109; - if (yych <= 'n') goto yy110; - goto yy31; - } -yy109: - yych = *++p; - if (yych == 'M') goto yy115; - if (yych == 'm') goto yy115; - goto yy31; -yy110: - yych = *++p; - if (yych == 'T') goto yy111; - if (yych != 't') goto yy31; -yy111: - yych = *++p; - if (yych == 'R') goto yy112; - if (yych != 'r') goto yy31; -yy112: - yych = *++p; - if (yych == 'I') goto yy113; - if (yych != 'i') goto yy31; -yy113: - yych = *++p; - if (yych == 'L') goto yy114; - if (yych != 'l') goto yy31; -yy114: - yych = *++p; - if (yych == 'O') goto yy41; - if (yych == 'o') goto yy41; - goto yy31; -yy115: - yych = *++p; - if (yych == 'I') goto yy41; - if (yych == 'i') goto yy41; - goto yy31; -yy116: - yych = *++p; - if (yych == 'W') goto yy117; - if (yych != 'w') goto yy31; -yy117: - yych = *++p; - if (yych != '-') goto yy31; - yych = *++p; - if (yych == 'S') goto yy119; - if (yych != 's') goto yy31; -yy119: - yych = *++p; - if (yych == 'O') goto yy120; - if (yych != 'o') goto yy31; -yy120: - yych = *++p; - if (yych == 'U') goto yy121; - if (yych != 'u') goto yy31; -yy121: - yych = *++p; - if (yych == 'R') goto yy122; - if (yych != 'r') goto yy31; -yy122: - yych = *++p; - if (yych == 'C') goto yy123; - if (yych != 'c') goto yy31; -yy123: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy124: - yych = *++p; - if (yych == '2') goto yy131; - goto yy31; -yy125: - yych = *++p; - if (yych == 'R') goto yy128; - if (yych == 'r') goto yy128; - goto yy31; -yy126: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy127: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy128: - yych = *++p; - if (yych == 'E') goto yy129; - if (yych != 'e') goto yy31; -yy129: - yych = *++p; - if (yych == 'A') goto yy130; - if (yych != 'a') goto yy31; -yy130: - yych = *++p; - if (yych == 'L') goto yy41; - if (yych == 'l') goto yy41; - goto yy31; -yy131: - yych = *++p; - if (yych != '0') goto yy31; - yych = *++p; - if (yych != '0') goto yy31; - yych = *++p; - if (yych == '4') goto yy41; - goto yy31; -yy134: - yych = *++p; - if (yych == 'I') goto yy153; - if (yych == 'i') goto yy153; - goto yy31; -yy135: - yych = *++p; - if (yych <= 'L') { - if (yych == 'A') goto yy145; - if (yych <= 'K') goto yy31; - goto yy144; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy31; - goto yy145; - } else { - if (yych == 'l') goto yy144; - goto yy31; - } - } -yy136: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy137: - yych = *++p; - if (yych == '3') goto yy141; - goto yy31; -yy138: - yych = *++p; - if (yych == 'T') goto yy140; - if (yych == 't') goto yy140; - goto yy31; -yy139: - yych = *++p; - if (yych == 'G') goto yy41; - if (yych == 'g') goto yy41; - goto yy31; -yy140: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy141: - yych = *++p; - if (yych != '2') goto yy31; - yych = *++p; - if (yych != '7') goto yy31; - yych = *++p; - if (yych == '0') goto yy41; - goto yy31; -yy144: - yych = *++p; - if (yych <= 'M') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'N') goto yy151; - if (yych == 'n') goto yy151; - goto yy31; - } -yy145: - yych = *++p; - if (yych == 'M') goto yy146; - if (yych != 'm') goto yy31; -yy146: - yych = *++p; - if (yych == 'S') goto yy147; - if (yych != 's') goto yy31; -yy147: - yych = *++p; - if (yych == 'P') goto yy148; - if (yych != 'p') goto yy31; -yy148: - yych = *++p; - if (yych == 'E') goto yy149; - if (yych != 'e') goto yy31; -yy149: - yych = *++p; - if (yych == 'A') goto yy150; - if (yych != 'a') goto yy31; -yy150: - yych = *++p; - if (yych == 'K') goto yy41; - if (yych == 'k') goto yy41; - goto yy31; -yy151: - yych = *++p; - if (yych == 'E') goto yy152; - if (yych != 'e') goto yy31; -yy152: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy153: - yych = *++p; - if (yych <= 'S') { - if (yych == 'N') goto yy154; - if (yych <= 'R') goto yy31; - goto yy155; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy31; - } else { - if (yych == 's') goto yy155; - goto yy31; - } - } -yy154: - yych = *++p; - if (yych == 'G') goto yy162; - if (yych == 'g') goto yy162; - goto yy31; -yy155: - yych = *++p; - if (yych == 'M') goto yy156; - if (yych != 'm') goto yy31; -yy156: - yych = *++p; - if (yych == 'E') goto yy157; - if (yych != 'e') goto yy31; -yy157: - yych = *++p; - if (yych == 'S') goto yy158; - if (yych != 's') goto yy31; -yy158: - yych = *++p; - if (yych == 'S') goto yy159; - if (yych != 's') goto yy31; -yy159: - yych = *++p; - if (yych == 'A') goto yy160; - if (yych != 'a') goto yy31; -yy160: - yych = *++p; - if (yych == 'G') goto yy161; - if (yych != 'g') goto yy31; -yy161: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy162: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy163: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy164: - yych = *++p; - if (yych == 'E') goto yy214; - if (yych == 'e') goto yy214; - goto yy31; -yy165: - yych = *++p; - if (yych == 'H') goto yy41; - if (yych == 'h') goto yy41; - goto yy31; -yy166: - yych = *++p; - if (yych == 'O') goto yy210; - if (yych == 'o') goto yy210; - goto yy31; -yy167: - yych = *++p; - if (yych <= 'L') { - if (yych == 'A') goto yy200; - if (yych <= 'K') goto yy31; - goto yy201; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy31; - goto yy200; - } else { - if (yych == 'l') goto yy201; - goto yy31; - } - } -yy168: - yych = *++p; - if (yych <= 'S') { - if (yych == 'B') goto yy41; - if (yych <= 'R') goto yy31; - goto yy41; - } else { - if (yych <= 'b') { - if (yych <= 'a') goto yy31; - goto yy41; - } else { - if (yych == 's') goto yy41; - goto yy31; - } - } -yy169: - yych = *++p; - if (yych == 'Y') goto yy198; - if (yych == 'y') goto yy198; - goto yy31; -yy170: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy171: - yych = *++p; - if (yych == 'T') goto yy197; - if (yych == 't') goto yy197; - goto yy31; -yy172: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'C') { - if (yych <= 'B') goto yy31; - goto yy184; - } else { - if (yych <= 'Q') goto yy31; - if (yych <= 'R') goto yy182; - goto yy183; - } - } else { - if (yych <= 'q') { - if (yych == 'c') goto yy184; - goto yy31; - } else { - if (yych <= 'r') goto yy182; - if (yych <= 's') goto yy183; - goto yy31; - } - } -yy173: - yych = *++p; - if (yych == 'M') goto yy181; - if (yych == 'm') goto yy181; - goto yy31; -yy174: - yych = *++p; - if (yych <= 'P') { - if (yych == 'E') goto yy178; - if (yych <= 'O') goto yy31; - goto yy179; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy31; - goto yy178; - } else { - if (yych == 'p') goto yy179; - goto yy31; - } - } -yy175: - yych = *++p; - if (yych == 'T') goto yy176; - if (yych != 't') goto yy31; -yy176: - yych = *++p; - if (yych == 'T') goto yy177; - if (yych != 't') goto yy31; -yy177: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy178: - yych = *++p; - if (yych == 'V') goto yy180; - if (yych == 'v') goto yy180; - goto yy31; -yy179: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy180: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy181: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy182: - yych = *++p; - if (yych == 'V') goto yy194; - if (yych == 'v') goto yy194; - goto yy31; -yy183: - yych = *++p; - if (yych == 'S') goto yy191; - if (yych == 's') goto yy191; - goto yy31; -yy184: - yych = *++p; - if (yych == 'O') goto yy185; - if (yych != 'o') goto yy31; -yy185: - yych = *++p; - if (yych == 'N') goto yy186; - if (yych != 'n') goto yy31; -yy186: - yych = *++p; - if (yych == 'D') goto yy187; - if (yych != 'd') goto yy31; -yy187: - yych = *++p; - if (yych == 'L') goto yy188; - if (yych != 'l') goto yy31; -yy188: - yych = *++p; - if (yych == 'I') goto yy189; - if (yych != 'i') goto yy31; -yy189: - yych = *++p; - if (yych == 'F') goto yy190; - if (yych != 'f') goto yy31; -yy190: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy191: - yych = *++p; - if (yych == 'I') goto yy192; - if (yych != 'i') goto yy31; -yy192: - yych = *++p; - if (yych == 'O') goto yy193; - if (yych != 'o') goto yy31; -yy193: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy194: - yych = *++p; - if (yych == 'I') goto yy195; - if (yych != 'i') goto yy31; -yy195: - yych = *++p; - if (yych == 'C') goto yy196; - if (yych != 'c') goto yy31; -yy196: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy197: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy198: - yych = *++p; - if (yych == 'P') goto yy199; - if (yych != 'p') goto yy31; -yy199: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy200: - yych = *++p; - if (yych == 'P') goto yy204; - if (yych == 'p') goto yy204; - goto yy31; -yy201: - yych = *++p; - if (yych == 'D') goto yy202; - if (yych != 'd') goto yy31; -yy202: - yych = *++p; - if (yych == 'A') goto yy203; - if (yych != 'a') goto yy31; -yy203: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy204: - yych = *++p; - if (yych != '.') goto yy31; - yych = *++p; - if (yych == 'B') goto yy206; - if (yych != 'b') goto yy31; -yy206: - yych = *++p; - if (yych == 'E') goto yy207; - if (yych != 'e') goto yy31; -yy207: - yych = *++p; - if (yych == 'E') goto yy208; - if (yych != 'e') goto yy31; -yy208: - yych = *++p; - if (yych == 'P') goto yy209; - if (yych != 'p') goto yy31; -yy209: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy210: - yych = *++p; - if (yych == 'T') goto yy211; - if (yych != 't') goto yy31; -yy211: - yych = *++p; - if (yych == 'I') goto yy212; - if (yych != 'i') goto yy31; -yy212: - yych = *++p; - if (yych == 'F') goto yy213; - if (yych != 'f') goto yy31; -yy213: - yych = *++p; - if (yych == 'Y') goto yy41; - if (yych == 'y') goto yy41; - goto yy31; -yy214: - yych = *++p; - if (yych == 'A') goto yy215; - if (yych != 'a') goto yy31; -yy215: - yych = *++p; - if (yych == 'M') goto yy41; - if (yych == 'm') goto yy41; - goto yy31; -yy216: - yych = *++p; - if (yych <= 'S') { - if (yych == 'M') goto yy228; - if (yych <= 'R') goto yy31; - goto yy227; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy31; - goto yy228; - } else { - if (yych == 's') goto yy227; - goto yy31; - } - } -yy217: - yych = *++p; - if (yych == 'Y') goto yy225; - if (yych == 'y') goto yy225; - goto yy31; -yy218: - yych = *++p; - if (yych == 'I') goto yy41; - if (yych == 'i') goto yy41; - goto yy31; -yy219: - yych = *++p; - if (yych == 'S') goto yy220; - if (yych != 's') goto yy31; -yy220: - yych = *++p; - if (yych <= 'N') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'O') goto yy221; - if (yych != 'o') goto yy31; - } -yy221: - yych = *++p; - if (yych == 'U') goto yy222; - if (yych != 'u') goto yy31; -yy222: - yych = *++p; - if (yych == 'R') goto yy223; - if (yych != 'r') goto yy31; -yy223: - yych = *++p; - if (yych == 'C') goto yy224; - if (yych != 'c') goto yy31; -yy224: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy225: - yych = *++p; - if (yych == 'N') goto yy226; - if (yych != 'n') goto yy31; -yy226: - yych = *++p; - if (yych == 'C') goto yy41; - if (yych == 'c') goto yy41; - goto yy31; -yy227: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy228: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy229: - yych = *++p; - if (yych == 'Y') goto yy249; - if (yych == 'y') goto yy249; - goto yy31; -yy230: - yych = *++p; - if (yych <= 'O') { - if (yych == 'E') goto yy246; - if (yych <= 'N') goto yy31; - goto yy247; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy31; - goto yy246; - } else { - if (yych == 'o') goto yy247; - goto yy31; - } - } -yy231: - yych = *++p; - if (yych == 'A') goto yy241; - if (yych == 'a') goto yy241; - goto yy31; -yy232: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy234; - if (yych <= 'O') goto yy31; - goto yy235; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy31; - goto yy234; - } else { - if (yych == 'p') goto yy235; - goto yy31; - } - } -yy233: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy234: - yych = *++p; - if (yych == 'M') goto yy41; - if (yych == 'm') goto yy41; - goto yy31; -yy235: - yych = *++p; - if (yych == 'A') goto yy236; - if (yych != 'a') goto yy31; -yy236: - yych = *++p; - if (yych == 'R') goto yy237; - if (yych != 'r') goto yy31; -yy237: - yych = *++p; - if (yych == 'A') goto yy238; - if (yych != 'a') goto yy31; -yy238: - yych = *++p; - if (yych == 'Z') goto yy239; - if (yych != 'z') goto yy31; -yy239: - yych = *++p; - if (yych == 'Z') goto yy240; - if (yych != 'z') goto yy31; -yy240: - yych = *++p; - if (yych == 'I') goto yy41; - if (yych == 'i') goto yy41; - goto yy31; -yy241: - yych = *++p; - if (yych == 'T') goto yy242; - if (yych != 't') goto yy31; -yy242: - yych = *++p; - if (yych == 'F') goto yy243; - if (yych != 'f') goto yy31; -yy243: - yych = *++p; - if (yych == 'O') goto yy244; - if (yych != 'o') goto yy31; -yy244: - yych = *++p; - if (yych == 'R') goto yy245; - if (yych != 'r') goto yy31; -yy245: - yych = *++p; - if (yych == 'M') goto yy41; - if (yych == 'm') goto yy41; - goto yy31; -yy246: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy247: - yych = *++p; - if (yych == 'X') goto yy248; - if (yych != 'x') goto yy31; -yy248: - yych = *++p; - if (yych == 'Y') goto yy41; - if (yych == 'y') goto yy41; - goto yy31; -yy249: - yych = *++p; - if (yych == 'C') goto yy41; - if (yych == 'c') goto yy41; - goto yy31; -yy250: - yych = *++p; - if (yych == 'D') goto yy41; - if (yych == 'd') goto yy41; - goto yy31; -yy251: - yych = *++p; - if (yych == 'A') goto yy252; - if (yych != 'a') goto yy31; -yy252: - yych = *++p; - if (yych == 'Q') goto yy253; - if (yych != 'q') goto yy31; -yy253: - yych = *++p; - if (yych == 'U') goto yy254; - if (yych != 'u') goto yy31; -yy254: - yych = *++p; - if (yych == 'E') goto yy255; - if (yych != 'e') goto yy31; -yy255: - yych = *++p; - if (yych == 'L') goto yy256; - if (yych != 'l') goto yy31; -yy256: - yych = *++p; - if (yych == 'O') goto yy257; - if (yych != 'o') goto yy31; -yy257: - yych = *++p; - if (yych == 'C') goto yy258; - if (yych != 'c') goto yy31; -yy258: - yych = *++p; - if (yych == 'K') goto yy259; - if (yych != 'k') goto yy31; -yy259: - yych = *++p; - if (yych == 'T') goto yy260; - if (yych != 't') goto yy31; -yy260: - yych = *++p; - if (yych == 'O') goto yy261; - if (yych != 'o') goto yy31; -yy261: - yych = *++p; - if (yych == 'K') goto yy262; - if (yych != 'k') goto yy31; -yy262: - yych = *++p; - if (yych == 'E') goto yy263; - if (yych != 'e') goto yy31; -yy263: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy264: - yych = *++p; - if (yych == 'T') goto yy271; - if (yych == 't') goto yy271; - goto yy31; -yy265: - yych = *++p; - if (yych == 'T') goto yy270; - if (yych == 't') goto yy270; - goto yy31; -yy266: - yych = *++p; - if (yych <= 'G') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'H') goto yy41; - if (yych == 'h') goto yy41; - goto yy31; - } -yy267: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy268: - yych = *++p; - if (yych == 'W') goto yy269; - if (yych != 'w') goto yy31; -yy269: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy270: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy271: - yych = *++p; - if (yych == 'E') goto yy272; - if (yych != 'e') goto yy31; -yy272: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy273: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy274: - yych = *++p; - if (yych <= 'P') { - if (yych == 'M') goto yy305; - if (yych <= 'O') goto yy31; - goto yy304; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy31; - goto yy305; - } else { - if (yych == 'p') goto yy304; - goto yy31; - } - } -yy275: - yych = *++p; - if (yych <= 'Q') { - if (yych <= '-') { - if (yych <= ',') goto yy31; - goto yy297; - } else { - if (yych == 'N') goto yy298; - goto yy31; - } - } else { - if (yych <= 'n') { - if (yych <= 'R') goto yy296; - if (yych <= 'm') goto yy31; - goto yy298; - } else { - if (yych == 'r') goto yy296; - goto yy31; - } - } -yy276: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy277: - yych = *++p; - if (yych == 'S') goto yy292; - if (yych == 's') goto yy292; - goto yy31; -yy278: - yych = *++p; - switch (yych) { - case 'G': - case 'g': goto yy283; - case 'I': - case 'i': goto yy282; - case 'P': - case 'p': goto yy284; - case 'R': - case 'r': goto yy285; - default: goto yy31; - } -yy279: - yych = *++p; - if (yych == 'Q') goto yy281; - if (yych == 'q') goto yy281; - goto yy31; -yy280: - yych = *++p; - if (yych == 'D') goto yy41; - if (yych == 'd') goto yy41; - goto yy31; -yy281: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy282: - yych = *++p; - if (yych == 'L') goto yy290; - if (yych == 'l') goto yy290; - goto yy31; -yy283: - yych = *++p; - if (yych == 'N') goto yy288; - if (yych == 'n') goto yy288; - goto yy31; -yy284: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy285: - yych = *++p; - if (yych == 'K') goto yy286; - if (yych != 'k') goto yy31; -yy286: - yych = *++p; - if (yych == 'E') goto yy287; - if (yych != 'e') goto yy31; -yy287: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy288: - yych = *++p; - if (yych == 'E') goto yy289; - if (yych != 'e') goto yy31; -yy289: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy290: - yych = *++p; - if (yych == 'T') goto yy291; - if (yych != 't') goto yy31; -yy291: - yych = *++p; - if (yych == 'O') goto yy41; - if (yych == 'o') goto yy41; - goto yy31; -yy292: - yych = *++p; - if (yych == 'S') goto yy293; - if (yych != 's') goto yy31; -yy293: - yych = *++p; - if (yych == 'A') goto yy294; - if (yych != 'a') goto yy31; -yy294: - yych = *++p; - if (yych == 'G') goto yy295; - if (yych != 'g') goto yy31; -yy295: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy296: - yych = *++p; - if (yych == 'P') goto yy303; - if (yych == 'p') goto yy303; - goto yy31; -yy297: - yych = *++p; - if (yych == 'H') goto yy300; - if (yych == 'h') goto yy300; - goto yy31; -yy298: - yych = *++p; - if (yych == 'I') goto yy299; - if (yych != 'i') goto yy31; -yy299: - yych = *++p; - if (yych == 'M') goto yy41; - if (yych == 'm') goto yy41; - goto yy31; -yy300: - yych = *++p; - if (yych == 'E') goto yy301; - if (yych != 'e') goto yy31; -yy301: - yych = *++p; - if (yych == 'L') goto yy302; - if (yych != 'l') goto yy31; -yy302: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy303: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy304: - yych = *++p; - if (yych == 'D') goto yy308; - if (yych == 'd') goto yy308; - goto yy31; -yy305: - yych = *++p; - if (yych == 'B') goto yy306; - if (yych != 'b') goto yy31; -yy306: - yych = *++p; - if (yych == 'L') goto yy307; - if (yych != 'l') goto yy31; -yy307: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy308: - yych = *++p; - if (yych == 'A') goto yy309; - if (yych != 'a') goto yy31; -yy309: - yych = *++p; - if (yych == 'T') goto yy310; - if (yych != 't') goto yy31; -yy310: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy311: - yych = *++p; - if (yych == 'A') goto yy316; - if (yych == 'a') goto yy316; - goto yy31; -yy312: - yych = *++p; - if (yych == 'S') goto yy313; - if (yych != 's') goto yy31; -yy313: - yych = *++p; - if (yych == 'T') goto yy314; - if (yych != 't') goto yy31; -yy314: - yych = *++p; - if (yych == 'F') goto yy315; - if (yych != 'f') goto yy31; -yy315: - yych = *++p; - if (yych == 'M') goto yy41; - if (yych == 'm') goto yy41; - goto yy31; -yy316: - yych = *++p; - if (yych == 'P') goto yy317; - if (yych != 'p') goto yy31; -yy317: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy318: - yych = *++p; - if (yych == 'M') goto yy341; - if (yych == 'm') goto yy341; - goto yy31; -yy319: - yych = *++p; - if (yych <= 'I') { - if (yych == 'C') goto yy330; - if (yych <= 'H') goto yy31; - goto yy329; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy31; - goto yy330; - } else { - if (yych == 'i') goto yy329; - goto yy31; - } - } -yy320: - yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy41; - if (yych <= 'O') goto yy31; - goto yy41; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy31; - goto yy41; - } else { - if (yych == 'p') goto yy41; - goto yy31; - } - } -yy321: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy327; - if (yych <= 'N') goto yy31; - goto yy328; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy31; - goto yy327; - } else { - if (yych == 'o') goto yy328; - goto yy31; - } - } -yy322: - yych = *++p; - if (yych == 'F') goto yy326; - if (yych == 'f') goto yy326; - goto yy31; -yy323: - yych = *++p; - if (yych <= '@') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'A') goto yy325; - if (yych == 'a') goto yy325; - goto yy31; - } -yy324: - yych = *++p; - if (yych == 'X') goto yy41; - if (yych == 'x') goto yy41; - goto yy31; -yy325: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy326: - yych = *++p; - if (yych == 'O') goto yy41; - if (yych == 'o') goto yy41; - goto yy31; -yy327: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy328: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy329: - yych = *++p; - if (yych == 'S') goto yy331; - if (yych == 's') goto yy331; - goto yy31; -yy330: - yych = *++p; - if (yych <= ':') { - if (yych == '6') goto yy41; - if (yych <= '9') goto yy31; - goto yy42; - } else { - if (yych <= 'S') { - if (yych <= 'R') goto yy31; - goto yy41; - } else { - if (yych == 's') goto yy41; - goto yy31; - } - } -yy331: - yych = *++p; - if (yych == '.') goto yy332; - if (yych == ':') goto yy42; - goto yy31; -yy332: - yych = *++p; - if (yych <= 'X') { - if (yych <= 'K') { - if (yych == 'B') goto yy335; - goto yy31; - } else { - if (yych <= 'L') goto yy333; - if (yych <= 'W') goto yy31; - goto yy334; - } - } else { - if (yych <= 'k') { - if (yych == 'b') goto yy335; - goto yy31; - } else { - if (yych <= 'l') goto yy333; - if (yych == 'x') goto yy334; - goto yy31; - } - } -yy333: - yych = *++p; - if (yych == 'W') goto yy340; - if (yych == 'w') goto yy340; - goto yy31; -yy334: - yych = *++p; - if (yych == 'P') goto yy338; - if (yych == 'p') goto yy338; - goto yy31; -yy335: - yych = *++p; - if (yych == 'E') goto yy336; - if (yych != 'e') goto yy31; -yy336: - yych = *++p; - if (yych == 'E') goto yy337; - if (yych != 'e') goto yy31; -yy337: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy338: - yych = *++p; - if (yych == 'C') goto yy339; - if (yych != 'c') goto yy31; -yy339: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy340: - yych = *++p; - if (yych == 'Z') goto yy41; - if (yych == 'z') goto yy41; - goto yy31; -yy341: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy342: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy343: - yych = *++p; - if (yych == 'T') goto yy346; - if (yych == 't') goto yy346; - goto yy31; -yy344: - yych = *++p; - if (yych != '2') goto yy31; - yych = *++p; - if (yych == '3') goto yy41; - goto yy31; -yy346: - yych = *++p; - if (yych == 'P') goto yy347; - if (yych != 'p') goto yy31; -yy347: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy348: - yych = *++p; - if (yych == 'A') goto yy364; - if (yych == 'a') goto yy364; - goto yy31; -yy349: - yych = *++p; - if (yych <= 'Z') { - if (yych == 'T') goto yy41; - if (yych <= 'Y') goto yy31; - goto yy355; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy31; - goto yy41; - } else { - if (yych == 'z') goto yy355; - goto yy31; - } - } -yy350: - yych = *++p; - if (yych <= 'O') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'P') goto yy352; - if (yych == 'p') goto yy352; - goto yy31; - } -yy351: - yych = *++p; - if (yych == 'O') goto yy41; - if (yych == 'o') goto yy41; - goto yy31; -yy352: - yych = *++p; - if (yych == 'H') goto yy353; - if (yych != 'h') goto yy31; -yy353: - yych = *++p; - if (yych == 'E') goto yy354; - if (yych != 'e') goto yy31; -yy354: - yych = *++p; - if (yych == 'R') goto yy41; - if (yych == 'r') goto yy41; - goto yy31; -yy355: - yych = *++p; - if (yych == 'M') goto yy356; - if (yych != 'm') goto yy31; -yy356: - yych = *++p; - if (yych == 'O') goto yy357; - if (yych != 'o') goto yy31; -yy357: - yych = *++p; - if (yych == 'P') goto yy358; - if (yych != 'p') goto yy31; -yy358: - yych = *++p; - if (yych == 'R') goto yy359; - if (yych != 'r') goto yy31; -yy359: - yych = *++p; - if (yych == 'O') goto yy360; - if (yych != 'o') goto yy31; -yy360: - yych = *++p; - if (yych == 'J') goto yy361; - if (yych != 'j') goto yy31; -yy361: - yych = *++p; - if (yych == 'E') goto yy362; - if (yych != 'e') goto yy31; -yy362: - yych = *++p; - if (yych == 'C') goto yy363; - if (yych != 'c') goto yy31; -yy363: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy364: - yych = *++p; - if (yych == 'L') goto yy365; - if (yych != 'l') goto yy31; -yy365: - yych = *++p; - if (yych == 'K') goto yy41; - if (yych == 'k') goto yy41; - goto yy31; -yy366: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'M') { - if (yych == 'L') goto yy376; - goto yy31; - } else { - if (yych <= 'N') goto yy377; - if (yych <= 'R') goto yy31; - goto yy378; - } - } else { - if (yych <= 'm') { - if (yych == 'l') goto yy376; - goto yy31; - } else { - if (yych <= 'n') goto yy377; - if (yych == 's') goto yy378; - goto yy31; - } - } -yy367: - yych = *++p; - if (yych == 'E') goto yy375; - if (yych == 'e') goto yy375; - goto yy31; -yy368: - yych = *++p; - if (yych == 'C') goto yy370; - if (yych == 'c') goto yy370; - goto yy31; -yy369: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy370: - yych = *++p; - if (yych == 'E') goto yy371; - if (yych != 'e') goto yy31; -yy371: - yych = *++p; - if (yych == 'T') goto yy372; - if (yych != 't') goto yy31; -yy372: - yych = *++p; - if (yych == 'I') goto yy373; - if (yych != 'i') goto yy31; -yy373: - yych = *++p; - if (yych == 'M') goto yy374; - if (yych != 'm') goto yy31; -yy374: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy375: - yych = *++p; - if (yych == 'D') goto yy41; - if (yych == 'd') goto yy41; - goto yy31; -yy376: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy377: - yych = *++p; - if (yych == 'G') goto yy379; - if (yych == 'g') goto yy379; - goto yy31; -yy378: - yych = *++p; - if (yych == 'H') goto yy41; - if (yych == 'h') goto yy41; - goto yy31; -yy379: - yych = *++p; - if (yych == 'E') goto yy380; - if (yych != 'e') goto yy31; -yy380: - yych = *++p; - if (yych == 'R') goto yy41; - if (yych == 'r') goto yy41; - goto yy31; -yy381: - yych = *++p; - if (yych == 'T') goto yy399; - if (yych == 't') goto yy399; - goto yy31; -yy382: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy383: - yych = *++p; - if (yych == 'M') goto yy41; - if (yych == 'm') goto yy41; - goto yy31; -yy384: - yych = *++p; - if (yych <= 'S') { - if (yych == 'P') goto yy41; - if (yych <= 'R') goto yy31; - goto yy41; - } else { - if (yych <= 'p') { - if (yych <= 'o') goto yy31; - goto yy41; - } else { - if (yych == 's') goto yy41; - goto yy31; - } - } -yy385: - yych = *++p; - if (yych == 'I') goto yy393; - if (yych == 'i') goto yy393; - goto yy31; -yy386: - yych = *++p; - if (yych == 'A') goto yy392; - if (yych == 'a') goto yy392; - goto yy31; -yy387: - yych = *++p; - if (yych == 'O') goto yy390; - if (yych == 'o') goto yy390; - goto yy31; -yy388: - yych = *++p; - if (yych == 'A') goto yy389; - if (yych != 'a') goto yy31; -yy389: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy42; - goto yy31; - } else { - if (yych <= 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; - } -yy390: - yych = *++p; - if (yych == 'U') goto yy391; - if (yych != 'u') goto yy31; -yy391: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy392: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy393: - yych = *++p; - if (yych == 'U') goto yy394; - if (yych != 'u') goto yy31; -yy394: - yych = *++p; - if (yych == 'M') goto yy395; - if (yych != 'm') goto yy31; -yy395: - yych = *++p; - if (yych == 'X') goto yy396; - if (yych != 'x') goto yy31; -yy396: - yych = *++p; - if (yych == 'T') goto yy397; - if (yych != 't') goto yy31; -yy397: - yych = *++p; - if (yych == 'R') goto yy398; - if (yych != 'r') goto yy31; -yy398: - yych = *++p; - if (yych == 'A') goto yy41; - if (yych == 'a') goto yy41; - goto yy31; -yy399: - yych = *++p; - if (yych == 'A') goto yy400; - if (yych != 'a') goto yy31; -yy400: - yych = *++p; - if (yych == 'C') goto yy401; - if (yych != 'c') goto yy31; -yy401: - yych = *++p; - if (yych == 'H') goto yy402; - if (yych != 'h') goto yy31; -yy402: - yych = *++p; - if (yych == 'M') goto yy403; - if (yych != 'm') goto yy31; -yy403: - yych = *++p; - if (yych == 'E') goto yy404; - if (yych != 'e') goto yy31; -yy404: - yych = *++p; - if (yych == 'N') goto yy405; - if (yych != 'n') goto yy31; -yy405: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy406: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy407: - yych = *++p; - if (yych <= 'V') { - if (yych == 'R') goto yy41; - if (yych <= 'U') goto yy31; - } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy31; - goto yy41; - } else { - if (yych != 'v') goto yy31; - } - } - yych = *++p; - if (yych == 'A') goto yy409; - if (yych != 'a') goto yy31; -yy409: - yych = *++p; - if (yych == 'S') goto yy410; - if (yych != 's') goto yy31; -yy410: - yych = *++p; - if (yych == 'C') goto yy411; - if (yych != 'c') goto yy31; -yy411: - yych = *++p; - if (yych == 'R') goto yy412; - if (yych != 'r') goto yy31; -yy412: - yych = *++p; - if (yych == 'I') goto yy413; - if (yych != 'i') goto yy31; -yy413: - yych = *++p; - if (yych == 'P') goto yy414; - if (yych != 'p') goto yy31; -yy414: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy415: - yych = *++p; - if (yych == 'B') goto yy41; - if (yych == 'b') goto yy41; - goto yy31; -yy416: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy417: - yych = *++p; - if (yych == 'N') goto yy424; - if (yych == 'n') goto yy424; - goto yy31; -yy418: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy419: - yych = *++p; - if (yych == 'C') goto yy423; - if (yych == 'c') goto yy423; - goto yy31; -yy420: - yych = *++p; - if (yych <= 'V') { - if (yych == 'T') goto yy422; - if (yych <= 'U') goto yy31; - goto yy41; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy31; - goto yy422; - } else { - if (yych == 'v') goto yy41; - goto yy31; - } - } -yy421: - yych = *++p; - if (yych == 'I') goto yy41; - if (yych == 'i') goto yy41; - goto yy31; -yy422: - yych = *++p; - if (yych == 'A') goto yy41; - if (yych == 'a') goto yy41; - goto yy31; -yy423: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy424: - yych = *++p; - if (yych == 'A') goto yy425; - if (yych != 'a') goto yy31; -yy425: - yych = *++p; - if (yych != '-') goto yy31; - yych = *++p; - if (yych == 'P') goto yy427; - if (yych != 'p') goto yy31; -yy427: - yych = *++p; - if (yych == 'L') goto yy428; - if (yych != 'l') goto yy31; -yy428: - yych = *++p; - if (yych == 'A') goto yy429; - if (yych != 'a') goto yy31; -yy429: - yych = *++p; - if (yych == 'Y') goto yy430; - if (yych != 'y') goto yy31; -yy430: - yych = *++p; - if (yych <= 'S') { - if (yych == 'C') goto yy431; - if (yych <= 'R') goto yy31; - goto yy432; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy31; - } else { - if (yych == 's') goto yy432; - goto yy31; - } - } -yy431: - yych = *++p; - if (yych == 'O') goto yy437; - if (yych == 'o') goto yy437; - goto yy31; -yy432: - yych = *++p; - if (yych == 'I') goto yy433; - if (yych != 'i') goto yy31; -yy433: - yych = *++p; - if (yych == 'N') goto yy434; - if (yych != 'n') goto yy31; -yy434: - yych = *++p; - if (yych == 'G') goto yy435; - if (yych != 'g') goto yy31; -yy435: - yych = *++p; - if (yych == 'L') goto yy436; - if (yych != 'l') goto yy31; -yy436: - yych = *++p; - if (yych == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -yy437: - yych = *++p; - if (yych == 'N') goto yy438; - if (yych != 'n') goto yy31; -yy438: - yych = *++p; - if (yych == 'T') goto yy439; - if (yych != 't') goto yy31; -yy439: - yych = *++p; - if (yych == 'A') goto yy440; - if (yych != 'a') goto yy31; -yy440: - yych = *++p; - if (yych == 'I') goto yy441; - if (yych != 'i') goto yy31; -yy441: - yych = *++p; - if (yych == 'N') goto yy442; - if (yych != 'n') goto yy31; -yy442: - yych = *++p; - if (yych == 'E') goto yy443; - if (yych != 'e') goto yy31; -yy443: - yych = *++p; - if (yych == 'R') goto yy41; - if (yych == 'r') goto yy41; - goto yy31; -yy444: - yych = *++p; - if (yych == 'S') goto yy41; - if (yych == 's') goto yy41; - goto yy31; -yy445: - yych = *++p; - if (yych <= 'N') { - if (yych <= 'A') { - if (yych <= '@') goto yy31; - goto yy467; - } else { - if (yych <= 'L') goto yy31; - if (yych <= 'M') goto yy468; - goto yy469; - } - } else { - if (yych <= 'l') { - if (yych == 'a') goto yy467; - goto yy31; - } else { - if (yych <= 'm') goto yy468; - if (yych <= 'n') goto yy469; - goto yy31; - } - } -yy446: - yych = *++p; - if (yych == 'R') goto yy454; - if (yych == 'r') goto yy454; - goto yy31; -yy447: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy451; - if (yych <= 'O') goto yy31; - goto yy41; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy31; - goto yy451; - } else { - if (yych == 'p') goto yy41; - goto yy31; - } - } -yy448: - yych = *++p; - if (yych == 'I') goto yy450; - if (yych == 'i') goto yy450; - goto yy31; -yy449: - yych = *++p; - if (yych == 'D') goto yy41; - if (yych == 'd') goto yy41; - goto yy31; -yy450: - yych = *++p; - if (yych == 'D') goto yy41; - if (yych == 'd') goto yy41; - goto yy31; -yy451: - yych = *++p; - if (yych == 'L') goto yy452; - if (yych != 'l') goto yy31; -yy452: - yych = *++p; - if (yych == 'T') goto yy453; - if (yych != 't') goto yy31; -yy453: - yych = *++p; - if (yych == 'O') goto yy41; - if (yych == 'o') goto yy41; - goto yy31; -yy454: - yych = *++p; - if (yych == 'O') goto yy455; - if (yych != 'o') goto yy31; -yy455: - yych = *++p; - if (yych == 'M') goto yy456; - if (yych != 'm') goto yy31; -yy456: - yych = *++p; - if (yych == 'E') goto yy457; - if (yych != 'e') goto yy31; -yy457: - yych = *++p; - if (yych == '-') goto yy458; - if (yych == ':') goto yy42; - goto yy31; -yy458: - yych = *++p; - if (yych == 'E') goto yy459; - if (yych != 'e') goto yy31; -yy459: - yych = *++p; - if (yych == 'X') goto yy460; - if (yych != 'x') goto yy31; -yy460: - yych = *++p; - if (yych == 'T') goto yy461; - if (yych != 't') goto yy31; -yy461: - yych = *++p; - if (yych == 'E') goto yy462; - if (yych != 'e') goto yy31; -yy462: - yych = *++p; - if (yych == 'N') goto yy463; - if (yych != 'n') goto yy31; -yy463: - yych = *++p; - if (yych == 'S') goto yy464; - if (yych != 's') goto yy31; -yy464: - yych = *++p; - if (yych == 'I') goto yy465; - if (yych != 'i') goto yy31; -yy465: - yych = *++p; - if (yych == 'O') goto yy466; - if (yych != 'o') goto yy31; -yy466: - yych = *++p; - if (yych == 'N') goto yy41; - if (yych == 'n') goto yy41; - goto yy31; -yy467: - yych = *++p; - if (yych == 'P') goto yy41; - if (yych == 'p') goto yy41; - goto yy31; -yy468: - yych = *++p; - if (yych == '-') goto yy473; - goto yy31; -yy469: - yych = *++p; - if (yych == 'T') goto yy470; - if (yych != 't') goto yy31; -yy470: - yych = *++p; - if (yych == 'E') goto yy471; - if (yych != 'e') goto yy31; -yy471: - yych = *++p; - if (yych == 'N') goto yy472; - if (yych != 'n') goto yy31; -yy472: - yych = *++p; - if (yych == 'T') goto yy41; - if (yych == 't') goto yy41; - goto yy31; -yy473: - yych = *++p; - if (yych == 'E') goto yy474; - if (yych != 'e') goto yy31; -yy474: - yych = *++p; - if (yych == 'V') goto yy475; - if (yych != 'v') goto yy31; -yy475: - yych = *++p; - if (yych == 'E') goto yy476; - if (yych != 'e') goto yy31; -yy476: - yych = *++p; - if (yych == 'N') goto yy477; - if (yych != 'n') goto yy31; -yy477: - yych = *++p; - if (yych == 'T') goto yy478; - if (yych != 't') goto yy31; -yy478: - yych = *++p; - if (yych == 'B') goto yy479; - if (yych != 'b') goto yy31; -yy479: - yych = *++p; - if (yych == 'R') goto yy480; - if (yych != 'r') goto yy31; -yy480: - yych = *++p; - if (yych == 'I') goto yy481; - if (yych != 'i') goto yy31; -yy481: - yych = *++p; - if (yych == 'T') goto yy482; - if (yych != 't') goto yy31; -yy482: - yych = *++p; - if (yych == 'E') goto yy483; - if (yych != 'e') goto yy31; -yy483: - yych = *++p; - if (yych != '-') goto yy31; - yych = *++p; - if (yych == 'A') goto yy485; - if (yych != 'a') goto yy31; -yy485: - yych = *++p; - if (yych == 'T') goto yy486; - if (yych != 't') goto yy31; -yy486: - yych = *++p; - if (yych == 'T') goto yy487; - if (yych != 't') goto yy31; -yy487: - yych = *++p; - if (yych == 'E') goto yy488; - if (yych != 'e') goto yy31; -yy488: - yych = *++p; - if (yych == 'N') goto yy489; - if (yych != 'n') goto yy31; -yy489: - yych = *++p; - if (yych == 'D') goto yy490; - if (yych != 'd') goto yy31; -yy490: - yych = *++p; - if (yych == 'E') goto yy491; - if (yych != 'e') goto yy31; -yy491: - ++p; - if ((yych = *p) == 'E') goto yy41; - if (yych == 'e') goto yy41; - goto yy31; -} + { + unsigned char yych; + yych = *(marker = p); + if (yych <= 'c') { + if (yych <= 'M') { + if (yych <= 'E') { + if (yych <= 'A') { + if (yych == '\n') + goto yy2; + if (yych <= '@') + goto yy29; + goto yy6; + } else { + if (yych <= 'B') + goto yy24; + if (yych <= 'C') + goto yy3; + if (yych <= 'D') + goto yy4; + goto yy25; + } + } else { + if (yych <= 'I') { + if (yych <= 'F') + goto yy7; + if (yych <= 'G') + goto yy8; + if (yych <= 'H') + goto yy9; + goto yy10; + } else { + if (yych <= 'J') + goto yy5; + if (yych <= 'K') + goto yy26; + if (yych <= 'L') + goto yy11; + goto yy12; + } + } + } else { + if (yych <= 'U') { + if (yych <= 'Q') { + if (yych <= 'N') + goto yy13; + if (yych <= 'O') + goto yy14; + if (yych <= 'P') + goto yy15; + goto yy27; + } else { + if (yych <= 'R') + goto yy16; + if (yych <= 'S') + goto yy17; + if (yych <= 'T') + goto yy18; + goto yy19; + } + } else { + if (yych <= 'Y') { + if (yych <= 'V') + goto yy20; + if (yych <= 'W') + goto yy21; + if (yych <= 'X') + goto yy22; + goto yy28; + } else { + if (yych <= '`') { + if (yych <= 'Z') + goto yy23; + goto yy29; + } else { + if (yych <= 'a') + goto yy6; + if (yych <= 'b') + goto yy24; + goto yy3; + } + } + } + } + } else { + if (yych <= 't') { + if (yych <= 'k') { + if (yych <= 'g') { + if (yych <= 'd') + goto yy4; + if (yych <= 'e') + goto yy25; + if (yych <= 'f') + goto yy7; + goto yy8; + } else { + if (yych <= 'h') + goto yy9; + if (yych <= 'i') + goto yy10; + if (yych <= 'j') + goto yy5; + goto yy26; + } + } else { + if (yych <= 'o') { + if (yych <= 'l') + goto yy11; + if (yych <= 'm') + goto yy12; + if (yych <= 'n') + goto yy13; + goto yy14; + } else { + if (yych <= 'q') { + if (yych <= 'p') + goto yy15; + goto yy27; + } else { + if (yych <= 'r') + goto yy16; + if (yych <= 's') + goto yy17; + goto yy18; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= 'x') { + if (yych <= 'u') + goto yy19; + if (yych <= 'v') + goto yy20; + if (yych <= 'w') + goto yy21; + goto yy22; + } else { + if (yych <= 'y') + goto yy28; + if (yych <= 'z') + goto yy23; + if (yych <= 0x7F) + goto yy29; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy30; + if (yych <= 0xE0) + goto yy32; + if (yych <= 0xEC) + goto yy33; + goto yy37; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy33; + goto yy34; + } else { + if (yych <= 0xF3) + goto yy35; + if (yych <= 0xF4) + goto yy36; + } + } + } + } + } + yy2 : { return 0; } + yy3: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy447; + case 'H': + case 'h': + goto yy446; + case 'I': + case 'i': + goto yy449; + case 'O': + case 'o': + goto yy445; + case 'R': + case 'r': + goto yy448; + case 'V': + case 'v': + goto yy444; + default: + goto yy2; + } + yy4: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy420; + case 'I': + case 'i': + goto yy419; + case 'L': + case 'l': + goto yy417; + case 'N': + case 'n': + goto yy418; + case 'O': + case 'o': + goto yy421; + case 'T': + case 't': + goto yy416; + case 'V': + case 'v': + goto yy415; + default: + goto yy2; + } + yy5: + yych = *(marker = ++p); + if (yych <= 'M') { + if (yych == 'A') + goto yy407; + if (yych <= 'L') + goto yy2; + goto yy406; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy2; + goto yy407; + } else { + if (yych == 'm') + goto yy406; + goto yy2; + } + } + yy6: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy388; + case 'B': + case 'b': + goto yy387; + case 'C': + case 'c': + goto yy386; + case 'D': + case 'd': + goto yy385; + case 'F': + case 'f': + goto yy384; + case 'I': + case 'i': + goto yy383; + case 'P': + case 'p': + goto yy382; + case 'T': + case 't': + goto yy381; + case 'W': + case 'w': + goto yy41; + default: + goto yy2; + } + yy7: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'E') { + if (yych == 'A') + goto yy368; + if (yych <= 'D') + goto yy2; + goto yy367; + } else { + if (yych == 'I') + goto yy366; + if (yych <= 'S') + goto yy2; + goto yy369; + } + } else { + if (yych <= 'e') { + if (yych == 'a') + goto yy368; + if (yych <= 'd') + goto yy2; + goto yy367; + } else { + if (yych <= 'i') { + if (yych <= 'h') + goto yy2; + goto yy366; + } else { + if (yych == 't') + goto yy369; + goto yy2; + } + } + } + yy8: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': + goto yy351; + case 'G': + case 'g': + goto yy41; + case 'I': + case 'i': + goto yy349; + case 'O': + case 'o': + goto yy350; + case 'T': + case 't': + goto yy348; + default: + goto yy2; + } + yy9: + yych = *(marker = ++p); + if (yych <= 'S') { + if (yych <= '3') { + if (yych <= '2') + goto yy2; + goto yy344; + } else { + if (yych == 'C') + goto yy342; + goto yy2; + } + } else { + if (yych <= 'c') { + if (yych <= 'T') + goto yy343; + if (yych <= 'b') + goto yy2; + goto yy342; + } else { + if (yych == 't') + goto yy343; + goto yy2; + } + } + yy10: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy324; + case 'C': + case 'c': + goto yy321; + case 'M': + case 'm': + goto yy323; + case 'N': + case 'n': + goto yy322; + case 'P': + case 'p': + goto yy320; + case 'R': + case 'r': + goto yy319; + case 'T': + case 't': + goto yy318; + default: + goto yy2; + } + yy11: + yych = *(marker = ++p); + if (yych <= 'D') { + if (yych == 'A') + goto yy312; + if (yych <= 'C') + goto yy2; + goto yy311; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy2; + goto yy312; + } else { + if (yych == 'd') + goto yy311; + goto yy2; + } + } + yy12: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy278; + case 'E': + case 'e': + goto yy277; + case 'I': + case 'i': + goto yy280; + case 'M': + case 'm': + goto yy276; + case 'S': + case 's': + goto yy275; + case 'T': + case 't': + goto yy279; + case 'U': + case 'u': + goto yy274; + case 'V': + case 'v': + goto yy273; + default: + goto yy2; + } + yy13: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': + goto yy268; + case 'F': + case 'f': + goto yy267; + case 'I': + case 'i': + goto yy266; + case 'N': + case 'n': + goto yy265; + case 'O': + case 'o': + goto yy264; + default: + goto yy2; + } + yy14: + yych = *(marker = ++p); + if (yych <= 'P') { + if (yych == 'I') + goto yy250; + if (yych <= 'O') + goto yy2; + goto yy251; + } else { + if (yych <= 'i') { + if (yych <= 'h') + goto yy2; + goto yy250; + } else { + if (yych == 'p') + goto yy251; + goto yy2; + } + } + yy15: + yych = *(marker = ++p); + if (yych <= 'S') { + if (yych <= 'L') { + if (yych == 'A') + goto yy232; + if (yych <= 'K') + goto yy2; + goto yy231; + } else { + if (yych <= 'O') { + if (yych <= 'N') + goto yy2; + goto yy233; + } else { + if (yych <= 'Q') + goto yy2; + if (yych <= 'R') + goto yy230; + goto yy229; + } + } + } else { + if (yych <= 'n') { + if (yych <= 'a') { + if (yych <= '`') + goto yy2; + goto yy232; + } else { + if (yych == 'l') + goto yy231; + goto yy2; + } + } else { + if (yych <= 'q') { + if (yych <= 'o') + goto yy233; + goto yy2; + } else { + if (yych <= 'r') + goto yy230; + if (yych <= 's') + goto yy229; + goto yy2; + } + } + } + yy16: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'L') { + if (yych == 'E') + goto yy219; + goto yy2; + } else { + if (yych <= 'M') + goto yy218; + if (yych <= 'R') + goto yy2; + if (yych <= 'S') + goto yy217; + goto yy216; + } + } else { + if (yych <= 'm') { + if (yych == 'e') + goto yy219; + if (yych <= 'l') + goto yy2; + goto yy218; + } else { + if (yych <= 'r') + goto yy2; + if (yych <= 's') + goto yy217; + if (yych <= 't') + goto yy216; + goto yy2; + } + } + yy17: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': + goto yy172; + case 'F': + case 'f': + goto yy171; + case 'G': + case 'g': + goto yy170; + case 'H': + case 'h': + goto yy175; + case 'I': + case 'i': + goto yy174; + case 'K': + case 'k': + goto yy169; + case 'M': + case 'm': + goto yy168; + case 'N': + case 'n': + goto yy173; + case 'O': + case 'o': + goto yy167; + case 'P': + case 'p': + goto yy166; + case 'S': + case 's': + goto yy165; + case 'T': + case 't': + goto yy164; + case 'V': + case 'v': + goto yy163; + default: + goto yy2; + } + yy18: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy139; + case 'E': + case 'e': + goto yy135; + case 'F': + case 'f': + goto yy138; + case 'H': + case 'h': + goto yy134; + case 'I': + case 'i': + goto yy136; + case 'N': + case 'n': + goto yy137; + case 'V': + case 'v': + goto yy41; + default: + goto yy2; + } + yy19: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'N') { + if (yych == 'D') + goto yy126; + if (yych <= 'M') + goto yy2; + goto yy125; + } else { + if (yych == 'R') + goto yy127; + if (yych <= 'S') + goto yy2; + goto yy124; + } + } else { + if (yych <= 'n') { + if (yych == 'd') + goto yy126; + if (yych <= 'm') + goto yy2; + goto yy125; + } else { + if (yych <= 'r') { + if (yych <= 'q') + goto yy2; + goto yy127; + } else { + if (yych == 't') + goto yy124; + goto yy2; + } + } + } + yy20: + yych = *(marker = ++p); + if (yych <= 'I') { + if (yych == 'E') + goto yy108; + if (yych <= 'H') + goto yy2; + goto yy107; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy2; + goto yy108; + } else { + if (yych == 'i') + goto yy107; + goto yy2; + } + } + yy21: + yych = *(marker = ++p); + if (yych <= 'Y') { + if (yych <= 'R') { + if (yych == 'E') + goto yy97; + goto yy2; + } else { + if (yych <= 'S') + goto yy98; + if (yych <= 'T') + goto yy96; + if (yych <= 'X') + goto yy2; + goto yy95; + } + } else { + if (yych <= 's') { + if (yych == 'e') + goto yy97; + if (yych <= 'r') + goto yy2; + goto yy98; + } else { + if (yych <= 't') + goto yy96; + if (yych == 'y') + goto yy95; + goto yy2; + } + } + yy22: + yych = *(marker = ++p); + if (yych <= 'R') { + if (yych <= 'F') { + if (yych == 'C') + goto yy74; + if (yych <= 'E') + goto yy2; + goto yy72; + } else { + if (yych == 'M') + goto yy73; + if (yych <= 'Q') + goto yy2; + goto yy71; + } + } else { + if (yych <= 'f') { + if (yych == 'c') + goto yy74; + if (yych <= 'e') + goto yy2; + goto yy72; + } else { + if (yych <= 'm') { + if (yych <= 'l') + goto yy2; + goto yy73; + } else { + if (yych == 'r') + goto yy71; + goto yy2; + } + } + } + yy23: + yych = *(marker = ++p); + if (yych == '3') + goto yy66; + goto yy2; + yy24: + yych = *(marker = ++p); + if (yych <= 'O') { + if (yych <= 'H') { + if (yych == 'E') + goto yy56; + goto yy2; + } else { + if (yych <= 'I') + goto yy55; + if (yych <= 'N') + goto yy2; + goto yy54; + } + } else { + if (yych <= 'h') { + if (yych == 'e') + goto yy56; + goto yy2; + } else { + if (yych <= 'i') + goto yy55; + if (yych == 'o') + goto yy54; + goto yy2; + } + } + yy25: + yych = *(marker = ++p); + if (yych == 'D') + goto yy52; + if (yych == 'd') + goto yy52; + goto yy2; + yy26: + yych = *(marker = ++p); + if (yych == 'E') + goto yy47; + if (yych == 'e') + goto yy47; + goto yy2; + yy27: + yych = *(marker = ++p); + if (yych == 'U') + goto yy44; + if (yych == 'u') + goto yy44; + goto yy2; + yy28: + yych = *(marker = ++p); + if (yych == 'M') + goto yy38; + if (yych == 'm') + goto yy38; + goto yy2; + yy29: + yych = *++p; + goto yy2; + yy30: + yych = *++p; + if (yych <= 0x7F) + goto yy31; + if (yych <= 0xBF) + goto yy29; + yy31: + p = marker; + goto yy2; + yy32: + yych = *++p; + if (yych <= 0x9F) + goto yy31; + if (yych <= 0xBF) + goto yy30; + goto yy31; + yy33: + yych = *++p; + if (yych <= 0x7F) + goto yy31; + if (yych <= 0xBF) + goto yy30; + goto yy31; + yy34: + yych = *++p; + if (yych <= 0x8F) + goto yy31; + if (yych <= 0xBF) + goto yy33; + goto yy31; + yy35: + yych = *++p; + if (yych <= 0x7F) + goto yy31; + if (yych <= 0xBF) + goto yy33; + goto yy31; + yy36: + yych = *++p; + if (yych <= 0x7F) + goto yy31; + if (yych <= 0x8F) + goto yy33; + goto yy31; + yy37: + yych = *++p; + if (yych <= 0x7F) + goto yy31; + if (yych <= 0x9F) + goto yy30; + goto yy31; + yy38: + yych = *++p; + if (yych == 'S') + goto yy39; + if (yych != 's') + goto yy31; + yy39: + yych = *++p; + if (yych == 'G') + goto yy40; + if (yych != 'g') + goto yy31; + yy40: + yych = *++p; + if (yych == 'R') + goto yy41; + if (yych != 'r') + goto yy31; + yy41: + yych = *++p; + if (yych != ':') + goto yy31; + yy42: + ++p; + { return (bufsize_t)(p - start); } + yy44: + yych = *++p; + if (yych == 'E') + goto yy45; + if (yych != 'e') + goto yy31; + yy45: + yych = *++p; + if (yych == 'R') + goto yy46; + if (yych != 'r') + goto yy31; + yy46: + yych = *++p; + if (yych == 'Y') + goto yy41; + if (yych == 'y') + goto yy41; + goto yy31; + yy47: + yych = *++p; + if (yych == 'Y') + goto yy48; + if (yych != 'y') + goto yy31; + yy48: + yych = *++p; + if (yych == 'P') + goto yy49; + if (yych != 'p') + goto yy31; + yy49: + yych = *++p; + if (yych == 'A') + goto yy50; + if (yych != 'a') + goto yy31; + yy50: + yych = *++p; + if (yych == 'R') + goto yy51; + if (yych != 'r') + goto yy31; + yy51: + yych = *++p; + if (yych == 'C') + goto yy41; + if (yych == 'c') + goto yy41; + goto yy31; + yy52: + yych = *++p; + if (yych != '2') + goto yy31; + yych = *++p; + if (yych == 'K') + goto yy41; + if (yych == 'k') + goto yy41; + goto yy31; + yy54: + yych = *++p; + if (yych == 'L') + goto yy65; + if (yych == 'l') + goto yy65; + goto yy31; + yy55: + yych = *++p; + if (yych == 'T') + goto yy61; + if (yych == 't') + goto yy61; + goto yy31; + yy56: + yych = *++p; + if (yych == 'S') + goto yy57; + if (yych != 's') + goto yy31; + yy57: + yych = *++p; + if (yych == 'H') + goto yy58; + if (yych != 'h') + goto yy31; + yy58: + yych = *++p; + if (yych == 'A') + goto yy59; + if (yych != 'a') + goto yy31; + yy59: + yych = *++p; + if (yych == 'R') + goto yy60; + if (yych != 'r') + goto yy31; + yy60: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy61: + yych = *++p; + if (yych == 'C') + goto yy62; + if (yych != 'c') + goto yy31; + yy62: + yych = *++p; + if (yych == 'O') + goto yy63; + if (yych != 'o') + goto yy31; + yy63: + yych = *++p; + if (yych == 'I') + goto yy64; + if (yych != 'i') + goto yy31; + yy64: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy65: + yych = *++p; + if (yych == 'O') + goto yy41; + if (yych == 'o') + goto yy41; + goto yy31; + yy66: + yych = *++p; + if (yych != '9') + goto yy31; + yych = *++p; + if (yych != '.') + goto yy31; + yych = *++p; + if (yych != '5') + goto yy31; + yych = *++p; + if (yych != '0') + goto yy31; + yych = *++p; + if (yych <= 'Q') + goto yy31; + if (yych <= 'S') + goto yy41; + if (yych <= 'q') + goto yy31; + if (yych <= 's') + goto yy41; + goto yy31; + yy71: + yych = *++p; + if (yych == 'I') + goto yy41; + if (yych == 'i') + goto yy41; + goto yy31; + yy72: + yych = *++p; + if (yych == 'I') + goto yy93; + if (yych == 'i') + goto yy93; + goto yy31; + yy73: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy83; + if (yych <= 'O') + goto yy31; + goto yy84; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy31; + goto yy83; + } else { + if (yych == 'p') + goto yy84; + goto yy31; + } + } + yy74: + yych = *++p; + if (yych == 'O') + goto yy75; + if (yych != 'o') + goto yy31; + yy75: + yych = *++p; + if (yych == 'N') + goto yy76; + if (yych != 'n') + goto yy31; + yy76: + yych = *++p; + if (yych == '-') + goto yy77; + if (yych == ':') + goto yy42; + goto yy31; + yy77: + yych = *++p; + if (yych == 'U') + goto yy78; + if (yych != 'u') + goto yy31; + yy78: + yych = *++p; + if (yych == 'S') + goto yy79; + if (yych != 's') + goto yy31; + yy79: + yych = *++p; + if (yych == 'E') + goto yy80; + if (yych != 'e') + goto yy31; + yy80: + yych = *++p; + if (yych == 'R') + goto yy81; + if (yych != 'r') + goto yy31; + yy81: + yych = *++p; + if (yych == 'I') + goto yy82; + if (yych != 'i') + goto yy31; + yy82: + yych = *++p; + if (yych == 'D') + goto yy41; + if (yych == 'd') + goto yy41; + goto yy31; + yy83: + yych = *++p; + if (yych == 'R') + goto yy85; + if (yych == 'r') + goto yy85; + goto yy31; + yy84: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy85: + yych = *++p; + if (yych == 'P') + goto yy86; + if (yych != 'p') + goto yy31; + yy86: + yych = *++p; + if (yych == 'C') + goto yy87; + if (yych != 'c') + goto yy31; + yy87: + yych = *++p; + if (yych != '.') + goto yy31; + yych = *++p; + if (yych == 'B') + goto yy89; + if (yych != 'b') + goto yy31; + yy89: + yych = *++p; + if (yych == 'E') + goto yy90; + if (yych != 'e') + goto yy31; + yy90: + yych = *++p; + if (yych == 'E') + goto yy91; + if (yych != 'e') + goto yy31; + yy91: + yych = *++p; + if (yych == 'P') + goto yy92; + if (yych != 'p') + goto yy31; + yy92: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy93: + yych = *++p; + if (yych == 'R') + goto yy94; + if (yych != 'r') + goto yy31; + yy94: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy95: + yych = *++p; + if (yych == 'C') + goto yy103; + if (yych == 'c') + goto yy103; + goto yy31; + yy96: + yych = *++p; + if (yych == 'A') + goto yy102; + if (yych == 'a') + goto yy102; + goto yy31; + yy97: + yych = *++p; + if (yych == 'B') + goto yy99; + if (yych == 'b') + goto yy99; + goto yy31; + yy98: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy99: + yych = *++p; + if (yych == 'C') + goto yy100; + if (yych != 'c') + goto yy31; + yy100: + yych = *++p; + if (yych == 'A') + goto yy101; + if (yych != 'a') + goto yy31; + yy101: + yych = *++p; + if (yych == 'L') + goto yy41; + if (yych == 'l') + goto yy41; + goto yy31; + yy102: + yych = *++p; + if (yych == 'I') + goto yy41; + if (yych == 'i') + goto yy41; + goto yy31; + yy103: + yych = *++p; + if (yych == 'I') + goto yy104; + if (yych != 'i') + goto yy31; + yy104: + yych = *++p; + if (yych == 'W') + goto yy105; + if (yych != 'w') + goto yy31; + yy105: + yych = *++p; + if (yych == 'Y') + goto yy106; + if (yych != 'y') + goto yy31; + yy106: + yych = *++p; + if (yych == 'G') + goto yy41; + if (yych == 'g') + goto yy41; + goto yy31; + yy107: + yych = *++p; + if (yych == 'E') + goto yy116; + if (yych == 'e') + goto yy116; + goto yy31; + yy108: + yych = *++p; + if (yych <= 'N') { + if (yych <= 'L') + goto yy31; + if (yych >= 'N') + goto yy110; + } else { + if (yych <= 'l') + goto yy31; + if (yych <= 'm') + goto yy109; + if (yych <= 'n') + goto yy110; + goto yy31; + } + yy109: + yych = *++p; + if (yych == 'M') + goto yy115; + if (yych == 'm') + goto yy115; + goto yy31; + yy110: + yych = *++p; + if (yych == 'T') + goto yy111; + if (yych != 't') + goto yy31; + yy111: + yych = *++p; + if (yych == 'R') + goto yy112; + if (yych != 'r') + goto yy31; + yy112: + yych = *++p; + if (yych == 'I') + goto yy113; + if (yych != 'i') + goto yy31; + yy113: + yych = *++p; + if (yych == 'L') + goto yy114; + if (yych != 'l') + goto yy31; + yy114: + yych = *++p; + if (yych == 'O') + goto yy41; + if (yych == 'o') + goto yy41; + goto yy31; + yy115: + yych = *++p; + if (yych == 'I') + goto yy41; + if (yych == 'i') + goto yy41; + goto yy31; + yy116: + yych = *++p; + if (yych == 'W') + goto yy117; + if (yych != 'w') + goto yy31; + yy117: + yych = *++p; + if (yych != '-') + goto yy31; + yych = *++p; + if (yych == 'S') + goto yy119; + if (yych != 's') + goto yy31; + yy119: + yych = *++p; + if (yych == 'O') + goto yy120; + if (yych != 'o') + goto yy31; + yy120: + yych = *++p; + if (yych == 'U') + goto yy121; + if (yych != 'u') + goto yy31; + yy121: + yych = *++p; + if (yych == 'R') + goto yy122; + if (yych != 'r') + goto yy31; + yy122: + yych = *++p; + if (yych == 'C') + goto yy123; + if (yych != 'c') + goto yy31; + yy123: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy124: + yych = *++p; + if (yych == '2') + goto yy131; + goto yy31; + yy125: + yych = *++p; + if (yych == 'R') + goto yy128; + if (yych == 'r') + goto yy128; + goto yy31; + yy126: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy127: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy128: + yych = *++p; + if (yych == 'E') + goto yy129; + if (yych != 'e') + goto yy31; + yy129: + yych = *++p; + if (yych == 'A') + goto yy130; + if (yych != 'a') + goto yy31; + yy130: + yych = *++p; + if (yych == 'L') + goto yy41; + if (yych == 'l') + goto yy41; + goto yy31; + yy131: + yych = *++p; + if (yych != '0') + goto yy31; + yych = *++p; + if (yych != '0') + goto yy31; + yych = *++p; + if (yych == '4') + goto yy41; + goto yy31; + yy134: + yych = *++p; + if (yych == 'I') + goto yy153; + if (yych == 'i') + goto yy153; + goto yy31; + yy135: + yych = *++p; + if (yych <= 'L') { + if (yych == 'A') + goto yy145; + if (yych <= 'K') + goto yy31; + goto yy144; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy31; + goto yy145; + } else { + if (yych == 'l') + goto yy144; + goto yy31; + } + } + yy136: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy137: + yych = *++p; + if (yych == '3') + goto yy141; + goto yy31; + yy138: + yych = *++p; + if (yych == 'T') + goto yy140; + if (yych == 't') + goto yy140; + goto yy31; + yy139: + yych = *++p; + if (yych == 'G') + goto yy41; + if (yych == 'g') + goto yy41; + goto yy31; + yy140: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy141: + yych = *++p; + if (yych != '2') + goto yy31; + yych = *++p; + if (yych != '7') + goto yy31; + yych = *++p; + if (yych == '0') + goto yy41; + goto yy31; + yy144: + yych = *++p; + if (yych <= 'M') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'N') + goto yy151; + if (yych == 'n') + goto yy151; + goto yy31; + } + yy145: + yych = *++p; + if (yych == 'M') + goto yy146; + if (yych != 'm') + goto yy31; + yy146: + yych = *++p; + if (yych == 'S') + goto yy147; + if (yych != 's') + goto yy31; + yy147: + yych = *++p; + if (yych == 'P') + goto yy148; + if (yych != 'p') + goto yy31; + yy148: + yych = *++p; + if (yych == 'E') + goto yy149; + if (yych != 'e') + goto yy31; + yy149: + yych = *++p; + if (yych == 'A') + goto yy150; + if (yych != 'a') + goto yy31; + yy150: + yych = *++p; + if (yych == 'K') + goto yy41; + if (yych == 'k') + goto yy41; + goto yy31; + yy151: + yych = *++p; + if (yych == 'E') + goto yy152; + if (yych != 'e') + goto yy31; + yy152: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy153: + yych = *++p; + if (yych <= 'S') { + if (yych == 'N') + goto yy154; + if (yych <= 'R') + goto yy31; + goto yy155; + } else { + if (yych <= 'n') { + if (yych <= 'm') + goto yy31; + } else { + if (yych == 's') + goto yy155; + goto yy31; + } + } + yy154: + yych = *++p; + if (yych == 'G') + goto yy162; + if (yych == 'g') + goto yy162; + goto yy31; + yy155: + yych = *++p; + if (yych == 'M') + goto yy156; + if (yych != 'm') + goto yy31; + yy156: + yych = *++p; + if (yych == 'E') + goto yy157; + if (yych != 'e') + goto yy31; + yy157: + yych = *++p; + if (yych == 'S') + goto yy158; + if (yych != 's') + goto yy31; + yy158: + yych = *++p; + if (yych == 'S') + goto yy159; + if (yych != 's') + goto yy31; + yy159: + yych = *++p; + if (yych == 'A') + goto yy160; + if (yych != 'a') + goto yy31; + yy160: + yych = *++p; + if (yych == 'G') + goto yy161; + if (yych != 'g') + goto yy31; + yy161: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy162: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy163: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy164: + yych = *++p; + if (yych == 'E') + goto yy214; + if (yych == 'e') + goto yy214; + goto yy31; + yy165: + yych = *++p; + if (yych == 'H') + goto yy41; + if (yych == 'h') + goto yy41; + goto yy31; + yy166: + yych = *++p; + if (yych == 'O') + goto yy210; + if (yych == 'o') + goto yy210; + goto yy31; + yy167: + yych = *++p; + if (yych <= 'L') { + if (yych == 'A') + goto yy200; + if (yych <= 'K') + goto yy31; + goto yy201; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy31; + goto yy200; + } else { + if (yych == 'l') + goto yy201; + goto yy31; + } + } + yy168: + yych = *++p; + if (yych <= 'S') { + if (yych == 'B') + goto yy41; + if (yych <= 'R') + goto yy31; + goto yy41; + } else { + if (yych <= 'b') { + if (yych <= 'a') + goto yy31; + goto yy41; + } else { + if (yych == 's') + goto yy41; + goto yy31; + } + } + yy169: + yych = *++p; + if (yych == 'Y') + goto yy198; + if (yych == 'y') + goto yy198; + goto yy31; + yy170: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy171: + yych = *++p; + if (yych == 'T') + goto yy197; + if (yych == 't') + goto yy197; + goto yy31; + yy172: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'C') { + if (yych <= 'B') + goto yy31; + goto yy184; + } else { + if (yych <= 'Q') + goto yy31; + if (yych <= 'R') + goto yy182; + goto yy183; + } + } else { + if (yych <= 'q') { + if (yych == 'c') + goto yy184; + goto yy31; + } else { + if (yych <= 'r') + goto yy182; + if (yych <= 's') + goto yy183; + goto yy31; + } + } + yy173: + yych = *++p; + if (yych == 'M') + goto yy181; + if (yych == 'm') + goto yy181; + goto yy31; + yy174: + yych = *++p; + if (yych <= 'P') { + if (yych == 'E') + goto yy178; + if (yych <= 'O') + goto yy31; + goto yy179; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy31; + goto yy178; + } else { + if (yych == 'p') + goto yy179; + goto yy31; + } + } + yy175: + yych = *++p; + if (yych == 'T') + goto yy176; + if (yych != 't') + goto yy31; + yy176: + yych = *++p; + if (yych == 'T') + goto yy177; + if (yych != 't') + goto yy31; + yy177: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy178: + yych = *++p; + if (yych == 'V') + goto yy180; + if (yych == 'v') + goto yy180; + goto yy31; + yy179: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy180: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy181: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy182: + yych = *++p; + if (yych == 'V') + goto yy194; + if (yych == 'v') + goto yy194; + goto yy31; + yy183: + yych = *++p; + if (yych == 'S') + goto yy191; + if (yych == 's') + goto yy191; + goto yy31; + yy184: + yych = *++p; + if (yych == 'O') + goto yy185; + if (yych != 'o') + goto yy31; + yy185: + yych = *++p; + if (yych == 'N') + goto yy186; + if (yych != 'n') + goto yy31; + yy186: + yych = *++p; + if (yych == 'D') + goto yy187; + if (yych != 'd') + goto yy31; + yy187: + yych = *++p; + if (yych == 'L') + goto yy188; + if (yych != 'l') + goto yy31; + yy188: + yych = *++p; + if (yych == 'I') + goto yy189; + if (yych != 'i') + goto yy31; + yy189: + yych = *++p; + if (yych == 'F') + goto yy190; + if (yych != 'f') + goto yy31; + yy190: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy191: + yych = *++p; + if (yych == 'I') + goto yy192; + if (yych != 'i') + goto yy31; + yy192: + yych = *++p; + if (yych == 'O') + goto yy193; + if (yych != 'o') + goto yy31; + yy193: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy194: + yych = *++p; + if (yych == 'I') + goto yy195; + if (yych != 'i') + goto yy31; + yy195: + yych = *++p; + if (yych == 'C') + goto yy196; + if (yych != 'c') + goto yy31; + yy196: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy197: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy198: + yych = *++p; + if (yych == 'P') + goto yy199; + if (yych != 'p') + goto yy31; + yy199: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy200: + yych = *++p; + if (yych == 'P') + goto yy204; + if (yych == 'p') + goto yy204; + goto yy31; + yy201: + yych = *++p; + if (yych == 'D') + goto yy202; + if (yych != 'd') + goto yy31; + yy202: + yych = *++p; + if (yych == 'A') + goto yy203; + if (yych != 'a') + goto yy31; + yy203: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy204: + yych = *++p; + if (yych != '.') + goto yy31; + yych = *++p; + if (yych == 'B') + goto yy206; + if (yych != 'b') + goto yy31; + yy206: + yych = *++p; + if (yych == 'E') + goto yy207; + if (yych != 'e') + goto yy31; + yy207: + yych = *++p; + if (yych == 'E') + goto yy208; + if (yych != 'e') + goto yy31; + yy208: + yych = *++p; + if (yych == 'P') + goto yy209; + if (yych != 'p') + goto yy31; + yy209: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy210: + yych = *++p; + if (yych == 'T') + goto yy211; + if (yych != 't') + goto yy31; + yy211: + yych = *++p; + if (yych == 'I') + goto yy212; + if (yych != 'i') + goto yy31; + yy212: + yych = *++p; + if (yych == 'F') + goto yy213; + if (yych != 'f') + goto yy31; + yy213: + yych = *++p; + if (yych == 'Y') + goto yy41; + if (yych == 'y') + goto yy41; + goto yy31; + yy214: + yych = *++p; + if (yych == 'A') + goto yy215; + if (yych != 'a') + goto yy31; + yy215: + yych = *++p; + if (yych == 'M') + goto yy41; + if (yych == 'm') + goto yy41; + goto yy31; + yy216: + yych = *++p; + if (yych <= 'S') { + if (yych == 'M') + goto yy228; + if (yych <= 'R') + goto yy31; + goto yy227; + } else { + if (yych <= 'm') { + if (yych <= 'l') + goto yy31; + goto yy228; + } else { + if (yych == 's') + goto yy227; + goto yy31; + } + } + yy217: + yych = *++p; + if (yych == 'Y') + goto yy225; + if (yych == 'y') + goto yy225; + goto yy31; + yy218: + yych = *++p; + if (yych == 'I') + goto yy41; + if (yych == 'i') + goto yy41; + goto yy31; + yy219: + yych = *++p; + if (yych == 'S') + goto yy220; + if (yych != 's') + goto yy31; + yy220: + yych = *++p; + if (yych <= 'N') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'O') + goto yy221; + if (yych != 'o') + goto yy31; + } + yy221: + yych = *++p; + if (yych == 'U') + goto yy222; + if (yych != 'u') + goto yy31; + yy222: + yych = *++p; + if (yych == 'R') + goto yy223; + if (yych != 'r') + goto yy31; + yy223: + yych = *++p; + if (yych == 'C') + goto yy224; + if (yych != 'c') + goto yy31; + yy224: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy225: + yych = *++p; + if (yych == 'N') + goto yy226; + if (yych != 'n') + goto yy31; + yy226: + yych = *++p; + if (yych == 'C') + goto yy41; + if (yych == 'c') + goto yy41; + goto yy31; + yy227: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy228: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy229: + yych = *++p; + if (yych == 'Y') + goto yy249; + if (yych == 'y') + goto yy249; + goto yy31; + yy230: + yych = *++p; + if (yych <= 'O') { + if (yych == 'E') + goto yy246; + if (yych <= 'N') + goto yy31; + goto yy247; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy31; + goto yy246; + } else { + if (yych == 'o') + goto yy247; + goto yy31; + } + } + yy231: + yych = *++p; + if (yych == 'A') + goto yy241; + if (yych == 'a') + goto yy241; + goto yy31; + yy232: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy234; + if (yych <= 'O') + goto yy31; + goto yy235; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy31; + goto yy234; + } else { + if (yych == 'p') + goto yy235; + goto yy31; + } + } + yy233: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy234: + yych = *++p; + if (yych == 'M') + goto yy41; + if (yych == 'm') + goto yy41; + goto yy31; + yy235: + yych = *++p; + if (yych == 'A') + goto yy236; + if (yych != 'a') + goto yy31; + yy236: + yych = *++p; + if (yych == 'R') + goto yy237; + if (yych != 'r') + goto yy31; + yy237: + yych = *++p; + if (yych == 'A') + goto yy238; + if (yych != 'a') + goto yy31; + yy238: + yych = *++p; + if (yych == 'Z') + goto yy239; + if (yych != 'z') + goto yy31; + yy239: + yych = *++p; + if (yych == 'Z') + goto yy240; + if (yych != 'z') + goto yy31; + yy240: + yych = *++p; + if (yych == 'I') + goto yy41; + if (yych == 'i') + goto yy41; + goto yy31; + yy241: + yych = *++p; + if (yych == 'T') + goto yy242; + if (yych != 't') + goto yy31; + yy242: + yych = *++p; + if (yych == 'F') + goto yy243; + if (yych != 'f') + goto yy31; + yy243: + yych = *++p; + if (yych == 'O') + goto yy244; + if (yych != 'o') + goto yy31; + yy244: + yych = *++p; + if (yych == 'R') + goto yy245; + if (yych != 'r') + goto yy31; + yy245: + yych = *++p; + if (yych == 'M') + goto yy41; + if (yych == 'm') + goto yy41; + goto yy31; + yy246: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy247: + yych = *++p; + if (yych == 'X') + goto yy248; + if (yych != 'x') + goto yy31; + yy248: + yych = *++p; + if (yych == 'Y') + goto yy41; + if (yych == 'y') + goto yy41; + goto yy31; + yy249: + yych = *++p; + if (yych == 'C') + goto yy41; + if (yych == 'c') + goto yy41; + goto yy31; + yy250: + yych = *++p; + if (yych == 'D') + goto yy41; + if (yych == 'd') + goto yy41; + goto yy31; + yy251: + yych = *++p; + if (yych == 'A') + goto yy252; + if (yych != 'a') + goto yy31; + yy252: + yych = *++p; + if (yych == 'Q') + goto yy253; + if (yych != 'q') + goto yy31; + yy253: + yych = *++p; + if (yych == 'U') + goto yy254; + if (yych != 'u') + goto yy31; + yy254: + yych = *++p; + if (yych == 'E') + goto yy255; + if (yych != 'e') + goto yy31; + yy255: + yych = *++p; + if (yych == 'L') + goto yy256; + if (yych != 'l') + goto yy31; + yy256: + yych = *++p; + if (yych == 'O') + goto yy257; + if (yych != 'o') + goto yy31; + yy257: + yych = *++p; + if (yych == 'C') + goto yy258; + if (yych != 'c') + goto yy31; + yy258: + yych = *++p; + if (yych == 'K') + goto yy259; + if (yych != 'k') + goto yy31; + yy259: + yych = *++p; + if (yych == 'T') + goto yy260; + if (yych != 't') + goto yy31; + yy260: + yych = *++p; + if (yych == 'O') + goto yy261; + if (yych != 'o') + goto yy31; + yy261: + yych = *++p; + if (yych == 'K') + goto yy262; + if (yych != 'k') + goto yy31; + yy262: + yych = *++p; + if (yych == 'E') + goto yy263; + if (yych != 'e') + goto yy31; + yy263: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy264: + yych = *++p; + if (yych == 'T') + goto yy271; + if (yych == 't') + goto yy271; + goto yy31; + yy265: + yych = *++p; + if (yych == 'T') + goto yy270; + if (yych == 't') + goto yy270; + goto yy31; + yy266: + yych = *++p; + if (yych <= 'G') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'H') + goto yy41; + if (yych == 'h') + goto yy41; + goto yy31; + } + yy267: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy268: + yych = *++p; + if (yych == 'W') + goto yy269; + if (yych != 'w') + goto yy31; + yy269: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy270: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy271: + yych = *++p; + if (yych == 'E') + goto yy272; + if (yych != 'e') + goto yy31; + yy272: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy273: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy274: + yych = *++p; + if (yych <= 'P') { + if (yych == 'M') + goto yy305; + if (yych <= 'O') + goto yy31; + goto yy304; + } else { + if (yych <= 'm') { + if (yych <= 'l') + goto yy31; + goto yy305; + } else { + if (yych == 'p') + goto yy304; + goto yy31; + } + } + yy275: + yych = *++p; + if (yych <= 'Q') { + if (yych <= '-') { + if (yych <= ',') + goto yy31; + goto yy297; + } else { + if (yych == 'N') + goto yy298; + goto yy31; + } + } else { + if (yych <= 'n') { + if (yych <= 'R') + goto yy296; + if (yych <= 'm') + goto yy31; + goto yy298; + } else { + if (yych == 'r') + goto yy296; + goto yy31; + } + } + yy276: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy277: + yych = *++p; + if (yych == 'S') + goto yy292; + if (yych == 's') + goto yy292; + goto yy31; + yy278: + yych = *++p; + switch (yych) { + case 'G': + case 'g': + goto yy283; + case 'I': + case 'i': + goto yy282; + case 'P': + case 'p': + goto yy284; + case 'R': + case 'r': + goto yy285; + default: + goto yy31; + } + yy279: + yych = *++p; + if (yych == 'Q') + goto yy281; + if (yych == 'q') + goto yy281; + goto yy31; + yy280: + yych = *++p; + if (yych == 'D') + goto yy41; + if (yych == 'd') + goto yy41; + goto yy31; + yy281: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy282: + yych = *++p; + if (yych == 'L') + goto yy290; + if (yych == 'l') + goto yy290; + goto yy31; + yy283: + yych = *++p; + if (yych == 'N') + goto yy288; + if (yych == 'n') + goto yy288; + goto yy31; + yy284: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy285: + yych = *++p; + if (yych == 'K') + goto yy286; + if (yych != 'k') + goto yy31; + yy286: + yych = *++p; + if (yych == 'E') + goto yy287; + if (yych != 'e') + goto yy31; + yy287: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy288: + yych = *++p; + if (yych == 'E') + goto yy289; + if (yych != 'e') + goto yy31; + yy289: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy290: + yych = *++p; + if (yych == 'T') + goto yy291; + if (yych != 't') + goto yy31; + yy291: + yych = *++p; + if (yych == 'O') + goto yy41; + if (yych == 'o') + goto yy41; + goto yy31; + yy292: + yych = *++p; + if (yych == 'S') + goto yy293; + if (yych != 's') + goto yy31; + yy293: + yych = *++p; + if (yych == 'A') + goto yy294; + if (yych != 'a') + goto yy31; + yy294: + yych = *++p; + if (yych == 'G') + goto yy295; + if (yych != 'g') + goto yy31; + yy295: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy296: + yych = *++p; + if (yych == 'P') + goto yy303; + if (yych == 'p') + goto yy303; + goto yy31; + yy297: + yych = *++p; + if (yych == 'H') + goto yy300; + if (yych == 'h') + goto yy300; + goto yy31; + yy298: + yych = *++p; + if (yych == 'I') + goto yy299; + if (yych != 'i') + goto yy31; + yy299: + yych = *++p; + if (yych == 'M') + goto yy41; + if (yych == 'm') + goto yy41; + goto yy31; + yy300: + yych = *++p; + if (yych == 'E') + goto yy301; + if (yych != 'e') + goto yy31; + yy301: + yych = *++p; + if (yych == 'L') + goto yy302; + if (yych != 'l') + goto yy31; + yy302: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy303: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy304: + yych = *++p; + if (yych == 'D') + goto yy308; + if (yych == 'd') + goto yy308; + goto yy31; + yy305: + yych = *++p; + if (yych == 'B') + goto yy306; + if (yych != 'b') + goto yy31; + yy306: + yych = *++p; + if (yych == 'L') + goto yy307; + if (yych != 'l') + goto yy31; + yy307: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy308: + yych = *++p; + if (yych == 'A') + goto yy309; + if (yych != 'a') + goto yy31; + yy309: + yych = *++p; + if (yych == 'T') + goto yy310; + if (yych != 't') + goto yy31; + yy310: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy311: + yych = *++p; + if (yych == 'A') + goto yy316; + if (yych == 'a') + goto yy316; + goto yy31; + yy312: + yych = *++p; + if (yych == 'S') + goto yy313; + if (yych != 's') + goto yy31; + yy313: + yych = *++p; + if (yych == 'T') + goto yy314; + if (yych != 't') + goto yy31; + yy314: + yych = *++p; + if (yych == 'F') + goto yy315; + if (yych != 'f') + goto yy31; + yy315: + yych = *++p; + if (yych == 'M') + goto yy41; + if (yych == 'm') + goto yy41; + goto yy31; + yy316: + yych = *++p; + if (yych == 'P') + goto yy317; + if (yych != 'p') + goto yy31; + yy317: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy318: + yych = *++p; + if (yych == 'M') + goto yy341; + if (yych == 'm') + goto yy341; + goto yy31; + yy319: + yych = *++p; + if (yych <= 'I') { + if (yych == 'C') + goto yy330; + if (yych <= 'H') + goto yy31; + goto yy329; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy31; + goto yy330; + } else { + if (yych == 'i') + goto yy329; + goto yy31; + } + } + yy320: + yych = *++p; + if (yych <= 'P') { + if (yych == 'N') + goto yy41; + if (yych <= 'O') + goto yy31; + goto yy41; + } else { + if (yych <= 'n') { + if (yych <= 'm') + goto yy31; + goto yy41; + } else { + if (yych == 'p') + goto yy41; + goto yy31; + } + } + yy321: + yych = *++p; + if (yych <= 'O') { + if (yych == 'A') + goto yy327; + if (yych <= 'N') + goto yy31; + goto yy328; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy31; + goto yy327; + } else { + if (yych == 'o') + goto yy328; + goto yy31; + } + } + yy322: + yych = *++p; + if (yych == 'F') + goto yy326; + if (yych == 'f') + goto yy326; + goto yy31; + yy323: + yych = *++p; + if (yych <= '@') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'A') + goto yy325; + if (yych == 'a') + goto yy325; + goto yy31; + } + yy324: + yych = *++p; + if (yych == 'X') + goto yy41; + if (yych == 'x') + goto yy41; + goto yy31; + yy325: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy326: + yych = *++p; + if (yych == 'O') + goto yy41; + if (yych == 'o') + goto yy41; + goto yy31; + yy327: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy328: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy329: + yych = *++p; + if (yych == 'S') + goto yy331; + if (yych == 's') + goto yy331; + goto yy31; + yy330: + yych = *++p; + if (yych <= ':') { + if (yych == '6') + goto yy41; + if (yych <= '9') + goto yy31; + goto yy42; + } else { + if (yych <= 'S') { + if (yych <= 'R') + goto yy31; + goto yy41; + } else { + if (yych == 's') + goto yy41; + goto yy31; + } + } + yy331: + yych = *++p; + if (yych == '.') + goto yy332; + if (yych == ':') + goto yy42; + goto yy31; + yy332: + yych = *++p; + if (yych <= 'X') { + if (yych <= 'K') { + if (yych == 'B') + goto yy335; + goto yy31; + } else { + if (yych <= 'L') + goto yy333; + if (yych <= 'W') + goto yy31; + goto yy334; + } + } else { + if (yych <= 'k') { + if (yych == 'b') + goto yy335; + goto yy31; + } else { + if (yych <= 'l') + goto yy333; + if (yych == 'x') + goto yy334; + goto yy31; + } + } + yy333: + yych = *++p; + if (yych == 'W') + goto yy340; + if (yych == 'w') + goto yy340; + goto yy31; + yy334: + yych = *++p; + if (yych == 'P') + goto yy338; + if (yych == 'p') + goto yy338; + goto yy31; + yy335: + yych = *++p; + if (yych == 'E') + goto yy336; + if (yych != 'e') + goto yy31; + yy336: + yych = *++p; + if (yych == 'E') + goto yy337; + if (yych != 'e') + goto yy31; + yy337: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy338: + yych = *++p; + if (yych == 'C') + goto yy339; + if (yych != 'c') + goto yy31; + yy339: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy340: + yych = *++p; + if (yych == 'Z') + goto yy41; + if (yych == 'z') + goto yy41; + goto yy31; + yy341: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy342: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy343: + yych = *++p; + if (yych == 'T') + goto yy346; + if (yych == 't') + goto yy346; + goto yy31; + yy344: + yych = *++p; + if (yych != '2') + goto yy31; + yych = *++p; + if (yych == '3') + goto yy41; + goto yy31; + yy346: + yych = *++p; + if (yych == 'P') + goto yy347; + if (yych != 'p') + goto yy31; + yy347: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy348: + yych = *++p; + if (yych == 'A') + goto yy364; + if (yych == 'a') + goto yy364; + goto yy31; + yy349: + yych = *++p; + if (yych <= 'Z') { + if (yych == 'T') + goto yy41; + if (yych <= 'Y') + goto yy31; + goto yy355; + } else { + if (yych <= 't') { + if (yych <= 's') + goto yy31; + goto yy41; + } else { + if (yych == 'z') + goto yy355; + goto yy31; + } + } + yy350: + yych = *++p; + if (yych <= 'O') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'P') + goto yy352; + if (yych == 'p') + goto yy352; + goto yy31; + } + yy351: + yych = *++p; + if (yych == 'O') + goto yy41; + if (yych == 'o') + goto yy41; + goto yy31; + yy352: + yych = *++p; + if (yych == 'H') + goto yy353; + if (yych != 'h') + goto yy31; + yy353: + yych = *++p; + if (yych == 'E') + goto yy354; + if (yych != 'e') + goto yy31; + yy354: + yych = *++p; + if (yych == 'R') + goto yy41; + if (yych == 'r') + goto yy41; + goto yy31; + yy355: + yych = *++p; + if (yych == 'M') + goto yy356; + if (yych != 'm') + goto yy31; + yy356: + yych = *++p; + if (yych == 'O') + goto yy357; + if (yych != 'o') + goto yy31; + yy357: + yych = *++p; + if (yych == 'P') + goto yy358; + if (yych != 'p') + goto yy31; + yy358: + yych = *++p; + if (yych == 'R') + goto yy359; + if (yych != 'r') + goto yy31; + yy359: + yych = *++p; + if (yych == 'O') + goto yy360; + if (yych != 'o') + goto yy31; + yy360: + yych = *++p; + if (yych == 'J') + goto yy361; + if (yych != 'j') + goto yy31; + yy361: + yych = *++p; + if (yych == 'E') + goto yy362; + if (yych != 'e') + goto yy31; + yy362: + yych = *++p; + if (yych == 'C') + goto yy363; + if (yych != 'c') + goto yy31; + yy363: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy364: + yych = *++p; + if (yych == 'L') + goto yy365; + if (yych != 'l') + goto yy31; + yy365: + yych = *++p; + if (yych == 'K') + goto yy41; + if (yych == 'k') + goto yy41; + goto yy31; + yy366: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'L') + goto yy376; + goto yy31; + } else { + if (yych <= 'N') + goto yy377; + if (yych <= 'R') + goto yy31; + goto yy378; + } + } else { + if (yych <= 'm') { + if (yych == 'l') + goto yy376; + goto yy31; + } else { + if (yych <= 'n') + goto yy377; + if (yych == 's') + goto yy378; + goto yy31; + } + } + yy367: + yych = *++p; + if (yych == 'E') + goto yy375; + if (yych == 'e') + goto yy375; + goto yy31; + yy368: + yych = *++p; + if (yych == 'C') + goto yy370; + if (yych == 'c') + goto yy370; + goto yy31; + yy369: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy370: + yych = *++p; + if (yych == 'E') + goto yy371; + if (yych != 'e') + goto yy31; + yy371: + yych = *++p; + if (yych == 'T') + goto yy372; + if (yych != 't') + goto yy31; + yy372: + yych = *++p; + if (yych == 'I') + goto yy373; + if (yych != 'i') + goto yy31; + yy373: + yych = *++p; + if (yych == 'M') + goto yy374; + if (yych != 'm') + goto yy31; + yy374: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy375: + yych = *++p; + if (yych == 'D') + goto yy41; + if (yych == 'd') + goto yy41; + goto yy31; + yy376: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy377: + yych = *++p; + if (yych == 'G') + goto yy379; + if (yych == 'g') + goto yy379; + goto yy31; + yy378: + yych = *++p; + if (yych == 'H') + goto yy41; + if (yych == 'h') + goto yy41; + goto yy31; + yy379: + yych = *++p; + if (yych == 'E') + goto yy380; + if (yych != 'e') + goto yy31; + yy380: + yych = *++p; + if (yych == 'R') + goto yy41; + if (yych == 'r') + goto yy41; + goto yy31; + yy381: + yych = *++p; + if (yych == 'T') + goto yy399; + if (yych == 't') + goto yy399; + goto yy31; + yy382: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy383: + yych = *++p; + if (yych == 'M') + goto yy41; + if (yych == 'm') + goto yy41; + goto yy31; + yy384: + yych = *++p; + if (yych <= 'S') { + if (yych == 'P') + goto yy41; + if (yych <= 'R') + goto yy31; + goto yy41; + } else { + if (yych <= 'p') { + if (yych <= 'o') + goto yy31; + goto yy41; + } else { + if (yych == 's') + goto yy41; + goto yy31; + } + } + yy385: + yych = *++p; + if (yych == 'I') + goto yy393; + if (yych == 'i') + goto yy393; + goto yy31; + yy386: + yych = *++p; + if (yych == 'A') + goto yy392; + if (yych == 'a') + goto yy392; + goto yy31; + yy387: + yych = *++p; + if (yych == 'O') + goto yy390; + if (yych == 'o') + goto yy390; + goto yy31; + yy388: + yych = *++p; + if (yych == 'A') + goto yy389; + if (yych != 'a') + goto yy31; + yy389: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy42; + goto yy31; + } else { + if (yych <= 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + } + yy390: + yych = *++p; + if (yych == 'U') + goto yy391; + if (yych != 'u') + goto yy31; + yy391: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy392: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy393: + yych = *++p; + if (yych == 'U') + goto yy394; + if (yych != 'u') + goto yy31; + yy394: + yych = *++p; + if (yych == 'M') + goto yy395; + if (yych != 'm') + goto yy31; + yy395: + yych = *++p; + if (yych == 'X') + goto yy396; + if (yych != 'x') + goto yy31; + yy396: + yych = *++p; + if (yych == 'T') + goto yy397; + if (yych != 't') + goto yy31; + yy397: + yych = *++p; + if (yych == 'R') + goto yy398; + if (yych != 'r') + goto yy31; + yy398: + yych = *++p; + if (yych == 'A') + goto yy41; + if (yych == 'a') + goto yy41; + goto yy31; + yy399: + yych = *++p; + if (yych == 'A') + goto yy400; + if (yych != 'a') + goto yy31; + yy400: + yych = *++p; + if (yych == 'C') + goto yy401; + if (yych != 'c') + goto yy31; + yy401: + yych = *++p; + if (yych == 'H') + goto yy402; + if (yych != 'h') + goto yy31; + yy402: + yych = *++p; + if (yych == 'M') + goto yy403; + if (yych != 'm') + goto yy31; + yy403: + yych = *++p; + if (yych == 'E') + goto yy404; + if (yych != 'e') + goto yy31; + yy404: + yych = *++p; + if (yych == 'N') + goto yy405; + if (yych != 'n') + goto yy31; + yy405: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy406: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy407: + yych = *++p; + if (yych <= 'V') { + if (yych == 'R') + goto yy41; + if (yych <= 'U') + goto yy31; + } else { + if (yych <= 'r') { + if (yych <= 'q') + goto yy31; + goto yy41; + } else { + if (yych != 'v') + goto yy31; + } + } + yych = *++p; + if (yych == 'A') + goto yy409; + if (yych != 'a') + goto yy31; + yy409: + yych = *++p; + if (yych == 'S') + goto yy410; + if (yych != 's') + goto yy31; + yy410: + yych = *++p; + if (yych == 'C') + goto yy411; + if (yych != 'c') + goto yy31; + yy411: + yych = *++p; + if (yych == 'R') + goto yy412; + if (yych != 'r') + goto yy31; + yy412: + yych = *++p; + if (yych == 'I') + goto yy413; + if (yych != 'i') + goto yy31; + yy413: + yych = *++p; + if (yych == 'P') + goto yy414; + if (yych != 'p') + goto yy31; + yy414: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy415: + yych = *++p; + if (yych == 'B') + goto yy41; + if (yych == 'b') + goto yy41; + goto yy31; + yy416: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy417: + yych = *++p; + if (yych == 'N') + goto yy424; + if (yych == 'n') + goto yy424; + goto yy31; + yy418: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy419: + yych = *++p; + if (yych == 'C') + goto yy423; + if (yych == 'c') + goto yy423; + goto yy31; + yy420: + yych = *++p; + if (yych <= 'V') { + if (yych == 'T') + goto yy422; + if (yych <= 'U') + goto yy31; + goto yy41; + } else { + if (yych <= 't') { + if (yych <= 's') + goto yy31; + goto yy422; + } else { + if (yych == 'v') + goto yy41; + goto yy31; + } + } + yy421: + yych = *++p; + if (yych == 'I') + goto yy41; + if (yych == 'i') + goto yy41; + goto yy31; + yy422: + yych = *++p; + if (yych == 'A') + goto yy41; + if (yych == 'a') + goto yy41; + goto yy31; + yy423: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy424: + yych = *++p; + if (yych == 'A') + goto yy425; + if (yych != 'a') + goto yy31; + yy425: + yych = *++p; + if (yych != '-') + goto yy31; + yych = *++p; + if (yych == 'P') + goto yy427; + if (yych != 'p') + goto yy31; + yy427: + yych = *++p; + if (yych == 'L') + goto yy428; + if (yych != 'l') + goto yy31; + yy428: + yych = *++p; + if (yych == 'A') + goto yy429; + if (yych != 'a') + goto yy31; + yy429: + yych = *++p; + if (yych == 'Y') + goto yy430; + if (yych != 'y') + goto yy31; + yy430: + yych = *++p; + if (yych <= 'S') { + if (yych == 'C') + goto yy431; + if (yych <= 'R') + goto yy31; + goto yy432; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy31; + } else { + if (yych == 's') + goto yy432; + goto yy31; + } + } + yy431: + yych = *++p; + if (yych == 'O') + goto yy437; + if (yych == 'o') + goto yy437; + goto yy31; + yy432: + yych = *++p; + if (yych == 'I') + goto yy433; + if (yych != 'i') + goto yy31; + yy433: + yych = *++p; + if (yych == 'N') + goto yy434; + if (yych != 'n') + goto yy31; + yy434: + yych = *++p; + if (yych == 'G') + goto yy435; + if (yych != 'g') + goto yy31; + yy435: + yych = *++p; + if (yych == 'L') + goto yy436; + if (yych != 'l') + goto yy31; + yy436: + yych = *++p; + if (yych == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + yy437: + yych = *++p; + if (yych == 'N') + goto yy438; + if (yych != 'n') + goto yy31; + yy438: + yych = *++p; + if (yych == 'T') + goto yy439; + if (yych != 't') + goto yy31; + yy439: + yych = *++p; + if (yych == 'A') + goto yy440; + if (yych != 'a') + goto yy31; + yy440: + yych = *++p; + if (yych == 'I') + goto yy441; + if (yych != 'i') + goto yy31; + yy441: + yych = *++p; + if (yych == 'N') + goto yy442; + if (yych != 'n') + goto yy31; + yy442: + yych = *++p; + if (yych == 'E') + goto yy443; + if (yych != 'e') + goto yy31; + yy443: + yych = *++p; + if (yych == 'R') + goto yy41; + if (yych == 'r') + goto yy41; + goto yy31; + yy444: + yych = *++p; + if (yych == 'S') + goto yy41; + if (yych == 's') + goto yy41; + goto yy31; + yy445: + yych = *++p; + if (yych <= 'N') { + if (yych <= 'A') { + if (yych <= '@') + goto yy31; + goto yy467; + } else { + if (yych <= 'L') + goto yy31; + if (yych <= 'M') + goto yy468; + goto yy469; + } + } else { + if (yych <= 'l') { + if (yych == 'a') + goto yy467; + goto yy31; + } else { + if (yych <= 'm') + goto yy468; + if (yych <= 'n') + goto yy469; + goto yy31; + } + } + yy446: + yych = *++p; + if (yych == 'R') + goto yy454; + if (yych == 'r') + goto yy454; + goto yy31; + yy447: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy451; + if (yych <= 'O') + goto yy31; + goto yy41; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy31; + goto yy451; + } else { + if (yych == 'p') + goto yy41; + goto yy31; + } + } + yy448: + yych = *++p; + if (yych == 'I') + goto yy450; + if (yych == 'i') + goto yy450; + goto yy31; + yy449: + yych = *++p; + if (yych == 'D') + goto yy41; + if (yych == 'd') + goto yy41; + goto yy31; + yy450: + yych = *++p; + if (yych == 'D') + goto yy41; + if (yych == 'd') + goto yy41; + goto yy31; + yy451: + yych = *++p; + if (yych == 'L') + goto yy452; + if (yych != 'l') + goto yy31; + yy452: + yych = *++p; + if (yych == 'T') + goto yy453; + if (yych != 't') + goto yy31; + yy453: + yych = *++p; + if (yych == 'O') + goto yy41; + if (yych == 'o') + goto yy41; + goto yy31; + yy454: + yych = *++p; + if (yych == 'O') + goto yy455; + if (yych != 'o') + goto yy31; + yy455: + yych = *++p; + if (yych == 'M') + goto yy456; + if (yych != 'm') + goto yy31; + yy456: + yych = *++p; + if (yych == 'E') + goto yy457; + if (yych != 'e') + goto yy31; + yy457: + yych = *++p; + if (yych == '-') + goto yy458; + if (yych == ':') + goto yy42; + goto yy31; + yy458: + yych = *++p; + if (yych == 'E') + goto yy459; + if (yych != 'e') + goto yy31; + yy459: + yych = *++p; + if (yych == 'X') + goto yy460; + if (yych != 'x') + goto yy31; + yy460: + yych = *++p; + if (yych == 'T') + goto yy461; + if (yych != 't') + goto yy31; + yy461: + yych = *++p; + if (yych == 'E') + goto yy462; + if (yych != 'e') + goto yy31; + yy462: + yych = *++p; + if (yych == 'N') + goto yy463; + if (yych != 'n') + goto yy31; + yy463: + yych = *++p; + if (yych == 'S') + goto yy464; + if (yych != 's') + goto yy31; + yy464: + yych = *++p; + if (yych == 'I') + goto yy465; + if (yych != 'i') + goto yy31; + yy465: + yych = *++p; + if (yych == 'O') + goto yy466; + if (yych != 'o') + goto yy31; + yy466: + yych = *++p; + if (yych == 'N') + goto yy41; + if (yych == 'n') + goto yy41; + goto yy31; + yy467: + yych = *++p; + if (yych == 'P') + goto yy41; + if (yych == 'p') + goto yy41; + goto yy31; + yy468: + yych = *++p; + if (yych == '-') + goto yy473; + goto yy31; + yy469: + yych = *++p; + if (yych == 'T') + goto yy470; + if (yych != 't') + goto yy31; + yy470: + yych = *++p; + if (yych == 'E') + goto yy471; + if (yych != 'e') + goto yy31; + yy471: + yych = *++p; + if (yych == 'N') + goto yy472; + if (yych != 'n') + goto yy31; + yy472: + yych = *++p; + if (yych == 'T') + goto yy41; + if (yych == 't') + goto yy41; + goto yy31; + yy473: + yych = *++p; + if (yych == 'E') + goto yy474; + if (yych != 'e') + goto yy31; + yy474: + yych = *++p; + if (yych == 'V') + goto yy475; + if (yych != 'v') + goto yy31; + yy475: + yych = *++p; + if (yych == 'E') + goto yy476; + if (yych != 'e') + goto yy31; + yy476: + yych = *++p; + if (yych == 'N') + goto yy477; + if (yych != 'n') + goto yy31; + yy477: + yych = *++p; + if (yych == 'T') + goto yy478; + if (yych != 't') + goto yy31; + yy478: + yych = *++p; + if (yych == 'B') + goto yy479; + if (yych != 'b') + goto yy31; + yy479: + yych = *++p; + if (yych == 'R') + goto yy480; + if (yych != 'r') + goto yy31; + yy480: + yych = *++p; + if (yych == 'I') + goto yy481; + if (yych != 'i') + goto yy31; + yy481: + yych = *++p; + if (yych == 'T') + goto yy482; + if (yych != 't') + goto yy31; + yy482: + yych = *++p; + if (yych == 'E') + goto yy483; + if (yych != 'e') + goto yy31; + yy483: + yych = *++p; + if (yych != '-') + goto yy31; + yych = *++p; + if (yych == 'A') + goto yy485; + if (yych != 'a') + goto yy31; + yy485: + yych = *++p; + if (yych == 'T') + goto yy486; + if (yych != 't') + goto yy31; + yy486: + yych = *++p; + if (yych == 'T') + goto yy487; + if (yych != 't') + goto yy31; + yy487: + yych = *++p; + if (yych == 'E') + goto yy488; + if (yych != 'e') + goto yy31; + yy488: + yych = *++p; + if (yych == 'N') + goto yy489; + if (yych != 'n') + goto yy31; + yy489: + yych = *++p; + if (yych == 'D') + goto yy490; + if (yych != 'd') + goto yy31; + yy490: + yych = *++p; + if (yych == 'E') + goto yy491; + if (yych != 'e') + goto yy31; + yy491: + ++p; + if ((yych = *p) == 'E') + goto yy41; + if (yych == 'e') + goto yy41; + goto yy31; + } } // Try to match URI autolink after first <, returning number of chars matched. -bufsize_t _scan_autolink_uri(const unsigned char *p) -{ +bufsize_t _scan_autolink_uri(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = 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, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 0, 128, 0, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= 'c') { - if (yych <= 'M') { - if (yych <= 'E') { - if (yych <= 'A') { - if (yych == '\n') goto yy494; - if (yych <= '@') goto yy521; - goto yy498; - } else { - if (yych <= 'B') goto yy516; - if (yych <= 'C') goto yy495; - if (yych <= 'D') goto yy496; - goto yy517; - } - } else { - if (yych <= 'I') { - if (yych <= 'F') goto yy499; - if (yych <= 'G') goto yy500; - if (yych <= 'H') goto yy501; - goto yy502; - } else { - if (yych <= 'J') goto yy497; - if (yych <= 'K') goto yy518; - if (yych <= 'L') goto yy503; - goto yy504; - } - } - } else { - if (yych <= 'U') { - if (yych <= 'Q') { - if (yych <= 'N') goto yy505; - if (yych <= 'O') goto yy506; - if (yych <= 'P') goto yy507; - goto yy519; - } else { - if (yych <= 'R') goto yy508; - if (yych <= 'S') goto yy509; - if (yych <= 'T') goto yy510; - goto yy511; - } - } else { - if (yych <= 'Y') { - if (yych <= 'V') goto yy512; - if (yych <= 'W') goto yy513; - if (yych <= 'X') goto yy514; - goto yy520; - } else { - if (yych <= '`') { - if (yych <= 'Z') goto yy515; - goto yy521; - } else { - if (yych <= 'a') goto yy498; - if (yych <= 'b') goto yy516; - goto yy495; - } - } - } - } - } else { - if (yych <= 't') { - if (yych <= 'k') { - if (yych <= 'g') { - if (yych <= 'd') goto yy496; - if (yych <= 'e') goto yy517; - if (yych <= 'f') goto yy499; - goto yy500; - } else { - if (yych <= 'h') goto yy501; - if (yych <= 'i') goto yy502; - if (yych <= 'j') goto yy497; - goto yy518; - } - } else { - if (yych <= 'o') { - if (yych <= 'l') goto yy503; - if (yych <= 'm') goto yy504; - if (yych <= 'n') goto yy505; - goto yy506; - } else { - if (yych <= 'q') { - if (yych <= 'p') goto yy507; - goto yy519; - } else { - if (yych <= 'r') goto yy508; - if (yych <= 's') goto yy509; - goto yy510; - } - } - } - } else { - if (yych <= 0xC1) { - if (yych <= 'x') { - if (yych <= 'u') goto yy511; - if (yych <= 'v') goto yy512; - if (yych <= 'w') goto yy513; - goto yy514; - } else { - if (yych <= 'y') goto yy520; - if (yych <= 'z') goto yy515; - if (yych <= 0x7F) goto yy521; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy522; - if (yych <= 0xE0) goto yy524; - if (yych <= 0xEC) goto yy525; - goto yy529; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy525; - goto yy526; - } else { - if (yych <= 0xF3) goto yy527; - if (yych <= 0xF4) goto yy528; - } - } - } - } - } -yy494: - { return 0; } -yy495: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy948; - case 'H': - case 'h': goto yy947; - case 'I': - case 'i': goto yy950; - case 'O': - case 'o': goto yy946; - case 'R': - case 'r': goto yy949; - case 'V': - case 'v': goto yy945; - default: goto yy494; - } -yy496: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy921; - case 'I': - case 'i': goto yy920; - case 'L': - case 'l': goto yy918; - case 'N': - case 'n': goto yy919; - case 'O': - case 'o': goto yy922; - case 'T': - case 't': goto yy917; - case 'V': - case 'v': goto yy916; - default: goto yy494; - } -yy497: - yych = *(marker = ++p); - if (yych <= 'M') { - if (yych == 'A') goto yy908; - if (yych <= 'L') goto yy494; - goto yy907; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy494; - goto yy908; - } else { - if (yych == 'm') goto yy907; - goto yy494; - } - } -yy498: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy889; - case 'B': - case 'b': goto yy888; - case 'C': - case 'c': goto yy887; - case 'D': - case 'd': goto yy886; - case 'F': - case 'f': goto yy885; - case 'I': - case 'i': goto yy884; - case 'P': - case 'p': goto yy883; - case 'T': - case 't': goto yy882; - case 'W': - case 'w': goto yy533; - default: goto yy494; - } -yy499: - yych = *(marker = ++p); - if (yych <= 'T') { - if (yych <= 'E') { - if (yych == 'A') goto yy869; - if (yych <= 'D') goto yy494; - goto yy868; - } else { - if (yych == 'I') goto yy867; - if (yych <= 'S') goto yy494; - goto yy870; - } - } else { - if (yych <= 'e') { - if (yych == 'a') goto yy869; - if (yych <= 'd') goto yy494; - goto yy868; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy494; - goto yy867; - } else { - if (yych == 't') goto yy870; - goto yy494; - } - } - } -yy500: - yych = *(marker = ++p); - switch (yych) { - case 'E': - case 'e': goto yy852; - case 'G': - case 'g': goto yy533; - case 'I': - case 'i': goto yy850; - case 'O': - case 'o': goto yy851; - case 'T': - case 't': goto yy849; - default: goto yy494; - } -yy501: - yych = *(marker = ++p); - if (yych <= 'S') { - if (yych <= '3') { - if (yych <= '2') goto yy494; - goto yy845; - } else { - if (yych == 'C') goto yy843; - goto yy494; - } - } else { - if (yych <= 'c') { - if (yych <= 'T') goto yy844; - if (yych <= 'b') goto yy494; - goto yy843; - } else { - if (yych == 't') goto yy844; - goto yy494; - } - } -yy502: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy825; - case 'C': - case 'c': goto yy822; - case 'M': - case 'm': goto yy824; - case 'N': - case 'n': goto yy823; - case 'P': - case 'p': goto yy821; - case 'R': - case 'r': goto yy820; - case 'T': - case 't': goto yy819; - default: goto yy494; - } -yy503: - yych = *(marker = ++p); - if (yych <= 'D') { - if (yych == 'A') goto yy813; - if (yych <= 'C') goto yy494; - goto yy812; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy494; - goto yy813; - } else { - if (yych == 'd') goto yy812; - goto yy494; - } - } -yy504: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy779; - case 'E': - case 'e': goto yy778; - case 'I': - case 'i': goto yy781; - case 'M': - case 'm': goto yy777; - case 'S': - case 's': goto yy776; - case 'T': - case 't': goto yy780; - case 'U': - case 'u': goto yy775; - case 'V': - case 'v': goto yy774; - default: goto yy494; - } -yy505: - yych = *(marker = ++p); - switch (yych) { - case 'E': - case 'e': goto yy769; - case 'F': - case 'f': goto yy768; - case 'I': - case 'i': goto yy767; - case 'N': - case 'n': goto yy766; - case 'O': - case 'o': goto yy765; - default: goto yy494; - } -yy506: - yych = *(marker = ++p); - if (yych <= 'P') { - if (yych == 'I') goto yy751; - if (yych <= 'O') goto yy494; - goto yy752; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy494; - goto yy751; - } else { - if (yych == 'p') goto yy752; - goto yy494; - } - } -yy507: - yych = *(marker = ++p); - if (yych <= 'S') { - if (yych <= 'L') { - if (yych == 'A') goto yy733; - if (yych <= 'K') goto yy494; - goto yy732; - } else { - if (yych <= 'O') { - if (yych <= 'N') goto yy494; - goto yy734; - } else { - if (yych <= 'Q') goto yy494; - if (yych <= 'R') goto yy731; - goto yy730; - } - } - } else { - if (yych <= 'n') { - if (yych <= 'a') { - if (yych <= '`') goto yy494; - goto yy733; - } else { - if (yych == 'l') goto yy732; - goto yy494; - } - } else { - if (yych <= 'q') { - if (yych <= 'o') goto yy734; - goto yy494; - } else { - if (yych <= 'r') goto yy731; - if (yych <= 's') goto yy730; - goto yy494; - } - } - } -yy508: - yych = *(marker = ++p); - if (yych <= 'T') { - if (yych <= 'L') { - if (yych == 'E') goto yy720; - goto yy494; - } else { - if (yych <= 'M') goto yy719; - if (yych <= 'R') goto yy494; - if (yych <= 'S') goto yy718; - goto yy717; - } - } else { - if (yych <= 'm') { - if (yych == 'e') goto yy720; - if (yych <= 'l') goto yy494; - goto yy719; - } else { - if (yych <= 'r') goto yy494; - if (yych <= 's') goto yy718; - if (yych <= 't') goto yy717; - goto yy494; - } - } -yy509: - yych = *(marker = ++p); - switch (yych) { - case 'E': - case 'e': goto yy673; - case 'F': - case 'f': goto yy672; - case 'G': - case 'g': goto yy671; - case 'H': - case 'h': goto yy676; - case 'I': - case 'i': goto yy675; - case 'K': - case 'k': goto yy670; - case 'M': - case 'm': goto yy669; - case 'N': - case 'n': goto yy674; - case 'O': - case 'o': goto yy668; - case 'P': - case 'p': goto yy667; - case 'S': - case 's': goto yy666; - case 'T': - case 't': goto yy665; - case 'V': - case 'v': goto yy664; - default: goto yy494; - } -yy510: - yych = *(marker = ++p); - switch (yych) { - case 'A': - case 'a': goto yy640; - case 'E': - case 'e': goto yy636; - case 'F': - case 'f': goto yy639; - case 'H': - case 'h': goto yy635; - case 'I': - case 'i': goto yy637; - case 'N': - case 'n': goto yy638; - case 'V': - case 'v': goto yy533; - default: goto yy494; - } -yy511: - yych = *(marker = ++p); - if (yych <= 'T') { - if (yych <= 'N') { - if (yych == 'D') goto yy627; - if (yych <= 'M') goto yy494; - goto yy626; - } else { - if (yych == 'R') goto yy628; - if (yych <= 'S') goto yy494; - goto yy625; - } - } else { - if (yych <= 'n') { - if (yych == 'd') goto yy627; - if (yych <= 'm') goto yy494; - goto yy626; - } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy494; - goto yy628; - } else { - if (yych == 't') goto yy625; - goto yy494; - } - } - } -yy512: - yych = *(marker = ++p); - if (yych <= 'I') { - if (yych == 'E') goto yy609; - if (yych <= 'H') goto yy494; - goto yy608; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy494; - goto yy609; - } else { - if (yych == 'i') goto yy608; - goto yy494; - } - } -yy513: - yych = *(marker = ++p); - if (yych <= 'Y') { - if (yych <= 'R') { - if (yych == 'E') goto yy598; - goto yy494; - } else { - if (yych <= 'S') goto yy599; - if (yych <= 'T') goto yy597; - if (yych <= 'X') goto yy494; - goto yy596; - } - } else { - if (yych <= 's') { - if (yych == 'e') goto yy598; - if (yych <= 'r') goto yy494; - goto yy599; - } else { - if (yych <= 't') goto yy597; - if (yych == 'y') goto yy596; - goto yy494; - } - } -yy514: - yych = *(marker = ++p); - if (yych <= 'R') { - if (yych <= 'F') { - if (yych == 'C') goto yy575; - if (yych <= 'E') goto yy494; - goto yy573; - } else { - if (yych == 'M') goto yy574; - if (yych <= 'Q') goto yy494; - goto yy572; - } - } else { - if (yych <= 'f') { - if (yych == 'c') goto yy575; - if (yych <= 'e') goto yy494; - goto yy573; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy494; - goto yy574; - } else { - if (yych == 'r') goto yy572; - goto yy494; - } - } - } -yy515: - yych = *(marker = ++p); - if (yych == '3') goto yy567; - goto yy494; -yy516: - yych = *(marker = ++p); - if (yych <= 'O') { - if (yych <= 'H') { - if (yych == 'E') goto yy557; - goto yy494; - } else { - if (yych <= 'I') goto yy556; - if (yych <= 'N') goto yy494; - goto yy555; - } - } else { - if (yych <= 'h') { - if (yych == 'e') goto yy557; - goto yy494; - } else { - if (yych <= 'i') goto yy556; - if (yych == 'o') goto yy555; - goto yy494; - } - } -yy517: - yych = *(marker = ++p); - if (yych == 'D') goto yy553; - if (yych == 'd') goto yy553; - goto yy494; -yy518: - yych = *(marker = ++p); - if (yych == 'E') goto yy548; - if (yych == 'e') goto yy548; - goto yy494; -yy519: - yych = *(marker = ++p); - if (yych == 'U') goto yy545; - if (yych == 'u') goto yy545; - goto yy494; -yy520: - yych = *(marker = ++p); - if (yych == 'M') goto yy530; - if (yych == 'm') goto yy530; - goto yy494; -yy521: - yych = *++p; - goto yy494; -yy522: - yych = *++p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0xBF) goto yy521; -yy523: - p = marker; - goto yy494; -yy524: - yych = *++p; - if (yych <= 0x9F) goto yy523; - if (yych <= 0xBF) goto yy522; - goto yy523; -yy525: - yych = *++p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0xBF) goto yy522; - goto yy523; -yy526: - yych = *++p; - if (yych <= 0x8F) goto yy523; - if (yych <= 0xBF) goto yy525; - goto yy523; -yy527: - yych = *++p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0xBF) goto yy525; - goto yy523; -yy528: - yych = *++p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0x8F) goto yy525; - goto yy523; -yy529: - yych = *++p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0x9F) goto yy522; - goto yy523; -yy530: - yych = *++p; - if (yych == 'S') goto yy531; - if (yych != 's') goto yy523; -yy531: - yych = *++p; - if (yych == 'G') goto yy532; - if (yych != 'g') goto yy523; -yy532: - yych = *++p; - if (yych == 'R') goto yy533; - if (yych != 'r') goto yy523; -yy533: - yych = *++p; - if (yych != ':') goto yy523; -yy534: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy534; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '<') goto yy523; - if (yych <= '>') goto yy543; - goto yy523; - } else { - if (yych <= 0xDF) goto yy536; - if (yych <= 0xE0) goto yy537; - goto yy538; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy542; - if (yych <= 0xEF) goto yy538; - goto yy539; - } else { - if (yych <= 0xF3) goto yy540; - if (yych <= 0xF4) goto yy541; - goto yy523; - } - } -yy536: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0xBF) goto yy534; - goto yy523; -yy537: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy523; - if (yych <= 0xBF) goto yy536; - goto yy523; -yy538: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0xBF) goto yy536; - goto yy523; -yy539: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy523; - if (yych <= 0xBF) goto yy538; - goto yy523; -yy540: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0xBF) goto yy538; - goto yy523; -yy541: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0x8F) goto yy538; - goto yy523; -yy542: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy523; - if (yych <= 0x9F) goto yy536; - goto yy523; -yy543: - ++p; - { return (bufsize_t)(p - start); } -yy545: - yych = *++p; - if (yych == 'E') goto yy546; - if (yych != 'e') goto yy523; -yy546: - yych = *++p; - if (yych == 'R') goto yy547; - if (yych != 'r') goto yy523; -yy547: - yych = *++p; - if (yych == 'Y') goto yy533; - if (yych == 'y') goto yy533; - goto yy523; -yy548: - yych = *++p; - if (yych == 'Y') goto yy549; - if (yych != 'y') goto yy523; -yy549: - yych = *++p; - if (yych == 'P') goto yy550; - if (yych != 'p') goto yy523; -yy550: - yych = *++p; - if (yych == 'A') goto yy551; - if (yych != 'a') goto yy523; -yy551: - yych = *++p; - if (yych == 'R') goto yy552; - if (yych != 'r') goto yy523; -yy552: - yych = *++p; - if (yych == 'C') goto yy533; - if (yych == 'c') goto yy533; - goto yy523; -yy553: - yych = *++p; - if (yych != '2') goto yy523; - yych = *++p; - if (yych == 'K') goto yy533; - if (yych == 'k') goto yy533; - goto yy523; -yy555: - yych = *++p; - if (yych == 'L') goto yy566; - if (yych == 'l') goto yy566; - goto yy523; -yy556: - yych = *++p; - if (yych == 'T') goto yy562; - if (yych == 't') goto yy562; - goto yy523; -yy557: - yych = *++p; - if (yych == 'S') goto yy558; - if (yych != 's') goto yy523; -yy558: - yych = *++p; - if (yych == 'H') goto yy559; - if (yych != 'h') goto yy523; -yy559: - yych = *++p; - if (yych == 'A') goto yy560; - if (yych != 'a') goto yy523; -yy560: - yych = *++p; - if (yych == 'R') goto yy561; - if (yych != 'r') goto yy523; -yy561: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy562: - yych = *++p; - if (yych == 'C') goto yy563; - if (yych != 'c') goto yy523; -yy563: - yych = *++p; - if (yych == 'O') goto yy564; - if (yych != 'o') goto yy523; -yy564: - yych = *++p; - if (yych == 'I') goto yy565; - if (yych != 'i') goto yy523; -yy565: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy566: - yych = *++p; - if (yych == 'O') goto yy533; - if (yych == 'o') goto yy533; - goto yy523; -yy567: - yych = *++p; - if (yych != '9') goto yy523; - yych = *++p; - if (yych != '.') goto yy523; - yych = *++p; - if (yych != '5') goto yy523; - yych = *++p; - if (yych != '0') goto yy523; - yych = *++p; - if (yych <= 'Q') goto yy523; - if (yych <= 'S') goto yy533; - if (yych <= 'q') goto yy523; - if (yych <= 's') goto yy533; - goto yy523; -yy572: - yych = *++p; - if (yych == 'I') goto yy533; - if (yych == 'i') goto yy533; - goto yy523; -yy573: - yych = *++p; - if (yych == 'I') goto yy594; - if (yych == 'i') goto yy594; - goto yy523; -yy574: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy584; - if (yych <= 'O') goto yy523; - goto yy585; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy523; - goto yy584; - } else { - if (yych == 'p') goto yy585; - goto yy523; - } - } -yy575: - yych = *++p; - if (yych == 'O') goto yy576; - if (yych != 'o') goto yy523; -yy576: - yych = *++p; - if (yych == 'N') goto yy577; - if (yych != 'n') goto yy523; -yy577: - yych = *++p; - if (yych == '-') goto yy578; - if (yych == ':') goto yy534; - goto yy523; -yy578: - yych = *++p; - if (yych == 'U') goto yy579; - if (yych != 'u') goto yy523; -yy579: - yych = *++p; - if (yych == 'S') goto yy580; - if (yych != 's') goto yy523; -yy580: - yych = *++p; - if (yych == 'E') goto yy581; - if (yych != 'e') goto yy523; -yy581: - yych = *++p; - if (yych == 'R') goto yy582; - if (yych != 'r') goto yy523; -yy582: - yych = *++p; - if (yych == 'I') goto yy583; - if (yych != 'i') goto yy523; -yy583: - yych = *++p; - if (yych == 'D') goto yy533; - if (yych == 'd') goto yy533; - goto yy523; -yy584: - yych = *++p; - if (yych == 'R') goto yy586; - if (yych == 'r') goto yy586; - goto yy523; -yy585: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy586: - yych = *++p; - if (yych == 'P') goto yy587; - if (yych != 'p') goto yy523; -yy587: - yych = *++p; - if (yych == 'C') goto yy588; - if (yych != 'c') goto yy523; -yy588: - yych = *++p; - if (yych != '.') goto yy523; - yych = *++p; - if (yych == 'B') goto yy590; - if (yych != 'b') goto yy523; -yy590: - yych = *++p; - if (yych == 'E') goto yy591; - if (yych != 'e') goto yy523; -yy591: - yych = *++p; - if (yych == 'E') goto yy592; - if (yych != 'e') goto yy523; -yy592: - yych = *++p; - if (yych == 'P') goto yy593; - if (yych != 'p') goto yy523; -yy593: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy594: - yych = *++p; - if (yych == 'R') goto yy595; - if (yych != 'r') goto yy523; -yy595: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy596: - yych = *++p; - if (yych == 'C') goto yy604; - if (yych == 'c') goto yy604; - goto yy523; -yy597: - yych = *++p; - if (yych == 'A') goto yy603; - if (yych == 'a') goto yy603; - goto yy523; -yy598: - yych = *++p; - if (yych == 'B') goto yy600; - if (yych == 'b') goto yy600; - goto yy523; -yy599: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy600: - yych = *++p; - if (yych == 'C') goto yy601; - if (yych != 'c') goto yy523; -yy601: - yych = *++p; - if (yych == 'A') goto yy602; - if (yych != 'a') goto yy523; -yy602: - yych = *++p; - if (yych == 'L') goto yy533; - if (yych == 'l') goto yy533; - goto yy523; -yy603: - yych = *++p; - if (yych == 'I') goto yy533; - if (yych == 'i') goto yy533; - goto yy523; -yy604: - yych = *++p; - if (yych == 'I') goto yy605; - if (yych != 'i') goto yy523; -yy605: - yych = *++p; - if (yych == 'W') goto yy606; - if (yych != 'w') goto yy523; -yy606: - yych = *++p; - if (yych == 'Y') goto yy607; - if (yych != 'y') goto yy523; -yy607: - yych = *++p; - if (yych == 'G') goto yy533; - if (yych == 'g') goto yy533; - goto yy523; -yy608: - yych = *++p; - if (yych == 'E') goto yy617; - if (yych == 'e') goto yy617; - goto yy523; -yy609: - yych = *++p; - if (yych <= 'N') { - if (yych <= 'L') goto yy523; - if (yych >= 'N') goto yy611; - } else { - if (yych <= 'l') goto yy523; - if (yych <= 'm') goto yy610; - if (yych <= 'n') goto yy611; - goto yy523; - } -yy610: - yych = *++p; - if (yych == 'M') goto yy616; - if (yych == 'm') goto yy616; - goto yy523; -yy611: - yych = *++p; - if (yych == 'T') goto yy612; - if (yych != 't') goto yy523; -yy612: - yych = *++p; - if (yych == 'R') goto yy613; - if (yych != 'r') goto yy523; -yy613: - yych = *++p; - if (yych == 'I') goto yy614; - if (yych != 'i') goto yy523; -yy614: - yych = *++p; - if (yych == 'L') goto yy615; - if (yych != 'l') goto yy523; -yy615: - yych = *++p; - if (yych == 'O') goto yy533; - if (yych == 'o') goto yy533; - goto yy523; -yy616: - yych = *++p; - if (yych == 'I') goto yy533; - if (yych == 'i') goto yy533; - goto yy523; -yy617: - yych = *++p; - if (yych == 'W') goto yy618; - if (yych != 'w') goto yy523; -yy618: - yych = *++p; - if (yych != '-') goto yy523; - yych = *++p; - if (yych == 'S') goto yy620; - if (yych != 's') goto yy523; -yy620: - yych = *++p; - if (yych == 'O') goto yy621; - if (yych != 'o') goto yy523; -yy621: - yych = *++p; - if (yych == 'U') goto yy622; - if (yych != 'u') goto yy523; -yy622: - yych = *++p; - if (yych == 'R') goto yy623; - if (yych != 'r') goto yy523; -yy623: - yych = *++p; - if (yych == 'C') goto yy624; - if (yych != 'c') goto yy523; -yy624: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy625: - yych = *++p; - if (yych == '2') goto yy632; - goto yy523; -yy626: - yych = *++p; - if (yych == 'R') goto yy629; - if (yych == 'r') goto yy629; - goto yy523; -yy627: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy628: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy629: - yych = *++p; - if (yych == 'E') goto yy630; - if (yych != 'e') goto yy523; -yy630: - yych = *++p; - if (yych == 'A') goto yy631; - if (yych != 'a') goto yy523; -yy631: - yych = *++p; - if (yych == 'L') goto yy533; - if (yych == 'l') goto yy533; - goto yy523; -yy632: - yych = *++p; - if (yych != '0') goto yy523; - yych = *++p; - if (yych != '0') goto yy523; - yych = *++p; - if (yych == '4') goto yy533; - goto yy523; -yy635: - yych = *++p; - if (yych == 'I') goto yy654; - if (yych == 'i') goto yy654; - goto yy523; -yy636: - yych = *++p; - if (yych <= 'L') { - if (yych == 'A') goto yy646; - if (yych <= 'K') goto yy523; - goto yy645; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy523; - goto yy646; - } else { - if (yych == 'l') goto yy645; - goto yy523; - } - } -yy637: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy638: - yych = *++p; - if (yych == '3') goto yy642; - goto yy523; -yy639: - yych = *++p; - if (yych == 'T') goto yy641; - if (yych == 't') goto yy641; - goto yy523; -yy640: - yych = *++p; - if (yych == 'G') goto yy533; - if (yych == 'g') goto yy533; - goto yy523; -yy641: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy642: - yych = *++p; - if (yych != '2') goto yy523; - yych = *++p; - if (yych != '7') goto yy523; - yych = *++p; - if (yych == '0') goto yy533; - goto yy523; -yy645: - yych = *++p; - if (yych <= 'M') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'N') goto yy652; - if (yych == 'n') goto yy652; - goto yy523; - } -yy646: - yych = *++p; - if (yych == 'M') goto yy647; - if (yych != 'm') goto yy523; -yy647: - yych = *++p; - if (yych == 'S') goto yy648; - if (yych != 's') goto yy523; -yy648: - yych = *++p; - if (yych == 'P') goto yy649; - if (yych != 'p') goto yy523; -yy649: - yych = *++p; - if (yych == 'E') goto yy650; - if (yych != 'e') goto yy523; -yy650: - yych = *++p; - if (yych == 'A') goto yy651; - if (yych != 'a') goto yy523; -yy651: - yych = *++p; - if (yych == 'K') goto yy533; - if (yych == 'k') goto yy533; - goto yy523; -yy652: - yych = *++p; - if (yych == 'E') goto yy653; - if (yych != 'e') goto yy523; -yy653: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy654: - yych = *++p; - if (yych <= 'S') { - if (yych == 'N') goto yy655; - if (yych <= 'R') goto yy523; - goto yy656; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy523; - } else { - if (yych == 's') goto yy656; - goto yy523; - } - } -yy655: - yych = *++p; - if (yych == 'G') goto yy663; - if (yych == 'g') goto yy663; - goto yy523; -yy656: - yych = *++p; - if (yych == 'M') goto yy657; - if (yych != 'm') goto yy523; -yy657: - yych = *++p; - if (yych == 'E') goto yy658; - if (yych != 'e') goto yy523; -yy658: - yych = *++p; - if (yych == 'S') goto yy659; - if (yych != 's') goto yy523; -yy659: - yych = *++p; - if (yych == 'S') goto yy660; - if (yych != 's') goto yy523; -yy660: - yych = *++p; - if (yych == 'A') goto yy661; - if (yych != 'a') goto yy523; -yy661: - yych = *++p; - if (yych == 'G') goto yy662; - if (yych != 'g') goto yy523; -yy662: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy663: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy664: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy665: - yych = *++p; - if (yych == 'E') goto yy715; - if (yych == 'e') goto yy715; - goto yy523; -yy666: - yych = *++p; - if (yych == 'H') goto yy533; - if (yych == 'h') goto yy533; - goto yy523; -yy667: - yych = *++p; - if (yych == 'O') goto yy711; - if (yych == 'o') goto yy711; - goto yy523; -yy668: - yych = *++p; - if (yych <= 'L') { - if (yych == 'A') goto yy701; - if (yych <= 'K') goto yy523; - goto yy702; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy523; - goto yy701; - } else { - if (yych == 'l') goto yy702; - goto yy523; - } - } -yy669: - yych = *++p; - if (yych <= 'S') { - if (yych == 'B') goto yy533; - if (yych <= 'R') goto yy523; - goto yy533; - } else { - if (yych <= 'b') { - if (yych <= 'a') goto yy523; - goto yy533; - } else { - if (yych == 's') goto yy533; - goto yy523; - } - } -yy670: - yych = *++p; - if (yych == 'Y') goto yy699; - if (yych == 'y') goto yy699; - goto yy523; -yy671: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy672: - yych = *++p; - if (yych == 'T') goto yy698; - if (yych == 't') goto yy698; - goto yy523; -yy673: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'C') { - if (yych <= 'B') goto yy523; - goto yy685; - } else { - if (yych <= 'Q') goto yy523; - if (yych <= 'R') goto yy683; - goto yy684; - } - } else { - if (yych <= 'q') { - if (yych == 'c') goto yy685; - goto yy523; - } else { - if (yych <= 'r') goto yy683; - if (yych <= 's') goto yy684; - goto yy523; - } - } -yy674: - yych = *++p; - if (yych == 'M') goto yy682; - if (yych == 'm') goto yy682; - goto yy523; -yy675: - yych = *++p; - if (yych <= 'P') { - if (yych == 'E') goto yy679; - if (yych <= 'O') goto yy523; - goto yy680; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy523; - goto yy679; - } else { - if (yych == 'p') goto yy680; - goto yy523; - } - } -yy676: - yych = *++p; - if (yych == 'T') goto yy677; - if (yych != 't') goto yy523; -yy677: - yych = *++p; - if (yych == 'T') goto yy678; - if (yych != 't') goto yy523; -yy678: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy679: - yych = *++p; - if (yych == 'V') goto yy681; - if (yych == 'v') goto yy681; - goto yy523; -yy680: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy681: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy682: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy683: - yych = *++p; - if (yych == 'V') goto yy695; - if (yych == 'v') goto yy695; - goto yy523; -yy684: - yych = *++p; - if (yych == 'S') goto yy692; - if (yych == 's') goto yy692; - goto yy523; -yy685: - yych = *++p; - if (yych == 'O') goto yy686; - if (yych != 'o') goto yy523; -yy686: - yych = *++p; - if (yych == 'N') goto yy687; - if (yych != 'n') goto yy523; -yy687: - yych = *++p; - if (yych == 'D') goto yy688; - if (yych != 'd') goto yy523; -yy688: - yych = *++p; - if (yych == 'L') goto yy689; - if (yych != 'l') goto yy523; -yy689: - yych = *++p; - if (yych == 'I') goto yy690; - if (yych != 'i') goto yy523; -yy690: - yych = *++p; - if (yych == 'F') goto yy691; - if (yych != 'f') goto yy523; -yy691: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy692: - yych = *++p; - if (yych == 'I') goto yy693; - if (yych != 'i') goto yy523; -yy693: - yych = *++p; - if (yych == 'O') goto yy694; - if (yych != 'o') goto yy523; -yy694: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy695: - yych = *++p; - if (yych == 'I') goto yy696; - if (yych != 'i') goto yy523; -yy696: - yych = *++p; - if (yych == 'C') goto yy697; - if (yych != 'c') goto yy523; -yy697: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy698: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy699: - yych = *++p; - if (yych == 'P') goto yy700; - if (yych != 'p') goto yy523; -yy700: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy701: - yych = *++p; - if (yych == 'P') goto yy705; - if (yych == 'p') goto yy705; - goto yy523; -yy702: - yych = *++p; - if (yych == 'D') goto yy703; - if (yych != 'd') goto yy523; -yy703: - yych = *++p; - if (yych == 'A') goto yy704; - if (yych != 'a') goto yy523; -yy704: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy705: - yych = *++p; - if (yych != '.') goto yy523; - yych = *++p; - if (yych == 'B') goto yy707; - if (yych != 'b') goto yy523; -yy707: - yych = *++p; - if (yych == 'E') goto yy708; - if (yych != 'e') goto yy523; -yy708: - yych = *++p; - if (yych == 'E') goto yy709; - if (yych != 'e') goto yy523; -yy709: - yych = *++p; - if (yych == 'P') goto yy710; - if (yych != 'p') goto yy523; -yy710: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy711: - yych = *++p; - if (yych == 'T') goto yy712; - if (yych != 't') goto yy523; -yy712: - yych = *++p; - if (yych == 'I') goto yy713; - if (yych != 'i') goto yy523; -yy713: - yych = *++p; - if (yych == 'F') goto yy714; - if (yych != 'f') goto yy523; -yy714: - yych = *++p; - if (yych == 'Y') goto yy533; - if (yych == 'y') goto yy533; - goto yy523; -yy715: - yych = *++p; - if (yych == 'A') goto yy716; - if (yych != 'a') goto yy523; -yy716: - yych = *++p; - if (yych == 'M') goto yy533; - if (yych == 'm') goto yy533; - goto yy523; -yy717: - yych = *++p; - if (yych <= 'S') { - if (yych == 'M') goto yy729; - if (yych <= 'R') goto yy523; - goto yy728; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy523; - goto yy729; - } else { - if (yych == 's') goto yy728; - goto yy523; - } - } -yy718: - yych = *++p; - if (yych == 'Y') goto yy726; - if (yych == 'y') goto yy726; - goto yy523; -yy719: - yych = *++p; - if (yych == 'I') goto yy533; - if (yych == 'i') goto yy533; - goto yy523; -yy720: - yych = *++p; - if (yych == 'S') goto yy721; - if (yych != 's') goto yy523; -yy721: - yych = *++p; - if (yych <= 'N') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'O') goto yy722; - if (yych != 'o') goto yy523; - } -yy722: - yych = *++p; - if (yych == 'U') goto yy723; - if (yych != 'u') goto yy523; -yy723: - yych = *++p; - if (yych == 'R') goto yy724; - if (yych != 'r') goto yy523; -yy724: - yych = *++p; - if (yych == 'C') goto yy725; - if (yych != 'c') goto yy523; -yy725: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy726: - yych = *++p; - if (yych == 'N') goto yy727; - if (yych != 'n') goto yy523; -yy727: - yych = *++p; - if (yych == 'C') goto yy533; - if (yych == 'c') goto yy533; - goto yy523; -yy728: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy729: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy730: - yych = *++p; - if (yych == 'Y') goto yy750; - if (yych == 'y') goto yy750; - goto yy523; -yy731: - yych = *++p; - if (yych <= 'O') { - if (yych == 'E') goto yy747; - if (yych <= 'N') goto yy523; - goto yy748; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy523; - goto yy747; - } else { - if (yych == 'o') goto yy748; - goto yy523; - } - } -yy732: - yych = *++p; - if (yych == 'A') goto yy742; - if (yych == 'a') goto yy742; - goto yy523; -yy733: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy735; - if (yych <= 'O') goto yy523; - goto yy736; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy523; - goto yy735; - } else { - if (yych == 'p') goto yy736; - goto yy523; - } - } -yy734: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy735: - yych = *++p; - if (yych == 'M') goto yy533; - if (yych == 'm') goto yy533; - goto yy523; -yy736: - yych = *++p; - if (yych == 'A') goto yy737; - if (yych != 'a') goto yy523; -yy737: - yych = *++p; - if (yych == 'R') goto yy738; - if (yych != 'r') goto yy523; -yy738: - yych = *++p; - if (yych == 'A') goto yy739; - if (yych != 'a') goto yy523; -yy739: - yych = *++p; - if (yych == 'Z') goto yy740; - if (yych != 'z') goto yy523; -yy740: - yych = *++p; - if (yych == 'Z') goto yy741; - if (yych != 'z') goto yy523; -yy741: - yych = *++p; - if (yych == 'I') goto yy533; - if (yych == 'i') goto yy533; - goto yy523; -yy742: - yych = *++p; - if (yych == 'T') goto yy743; - if (yych != 't') goto yy523; -yy743: - yych = *++p; - if (yych == 'F') goto yy744; - if (yych != 'f') goto yy523; -yy744: - yych = *++p; - if (yych == 'O') goto yy745; - if (yych != 'o') goto yy523; -yy745: - yych = *++p; - if (yych == 'R') goto yy746; - if (yych != 'r') goto yy523; -yy746: - yych = *++p; - if (yych == 'M') goto yy533; - if (yych == 'm') goto yy533; - goto yy523; -yy747: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy748: - yych = *++p; - if (yych == 'X') goto yy749; - if (yych != 'x') goto yy523; -yy749: - yych = *++p; - if (yych == 'Y') goto yy533; - if (yych == 'y') goto yy533; - goto yy523; -yy750: - yych = *++p; - if (yych == 'C') goto yy533; - if (yych == 'c') goto yy533; - goto yy523; -yy751: - yych = *++p; - if (yych == 'D') goto yy533; - if (yych == 'd') goto yy533; - goto yy523; -yy752: - yych = *++p; - if (yych == 'A') goto yy753; - if (yych != 'a') goto yy523; -yy753: - yych = *++p; - if (yych == 'Q') goto yy754; - if (yych != 'q') goto yy523; -yy754: - yych = *++p; - if (yych == 'U') goto yy755; - if (yych != 'u') goto yy523; -yy755: - yych = *++p; - if (yych == 'E') goto yy756; - if (yych != 'e') goto yy523; -yy756: - yych = *++p; - if (yych == 'L') goto yy757; - if (yych != 'l') goto yy523; -yy757: - yych = *++p; - if (yych == 'O') goto yy758; - if (yych != 'o') goto yy523; -yy758: - yych = *++p; - if (yych == 'C') goto yy759; - if (yych != 'c') goto yy523; -yy759: - yych = *++p; - if (yych == 'K') goto yy760; - if (yych != 'k') goto yy523; -yy760: - yych = *++p; - if (yych == 'T') goto yy761; - if (yych != 't') goto yy523; -yy761: - yych = *++p; - if (yych == 'O') goto yy762; - if (yych != 'o') goto yy523; -yy762: - yych = *++p; - if (yych == 'K') goto yy763; - if (yych != 'k') goto yy523; -yy763: - yych = *++p; - if (yych == 'E') goto yy764; - if (yych != 'e') goto yy523; -yy764: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy765: - yych = *++p; - if (yych == 'T') goto yy772; - if (yych == 't') goto yy772; - goto yy523; -yy766: - yych = *++p; - if (yych == 'T') goto yy771; - if (yych == 't') goto yy771; - goto yy523; -yy767: - yych = *++p; - if (yych <= 'G') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'H') goto yy533; - if (yych == 'h') goto yy533; - goto yy523; - } -yy768: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy769: - yych = *++p; - if (yych == 'W') goto yy770; - if (yych != 'w') goto yy523; -yy770: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy771: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy772: - yych = *++p; - if (yych == 'E') goto yy773; - if (yych != 'e') goto yy523; -yy773: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy774: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy775: - yych = *++p; - if (yych <= 'P') { - if (yych == 'M') goto yy806; - if (yych <= 'O') goto yy523; - goto yy805; - } else { - if (yych <= 'm') { - if (yych <= 'l') goto yy523; - goto yy806; - } else { - if (yych == 'p') goto yy805; - goto yy523; - } - } -yy776: - yych = *++p; - if (yych <= 'Q') { - if (yych <= '-') { - if (yych <= ',') goto yy523; - goto yy798; - } else { - if (yych == 'N') goto yy799; - goto yy523; - } - } else { - if (yych <= 'n') { - if (yych <= 'R') goto yy797; - if (yych <= 'm') goto yy523; - goto yy799; - } else { - if (yych == 'r') goto yy797; - goto yy523; - } - } -yy777: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy778: - yych = *++p; - if (yych == 'S') goto yy793; - if (yych == 's') goto yy793; - goto yy523; -yy779: - yych = *++p; - switch (yych) { - case 'G': - case 'g': goto yy784; - case 'I': - case 'i': goto yy783; - case 'P': - case 'p': goto yy785; - case 'R': - case 'r': goto yy786; - default: goto yy523; - } -yy780: - yych = *++p; - if (yych == 'Q') goto yy782; - if (yych == 'q') goto yy782; - goto yy523; -yy781: - yych = *++p; - if (yych == 'D') goto yy533; - if (yych == 'd') goto yy533; - goto yy523; -yy782: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy783: - yych = *++p; - if (yych == 'L') goto yy791; - if (yych == 'l') goto yy791; - goto yy523; -yy784: - yych = *++p; - if (yych == 'N') goto yy789; - if (yych == 'n') goto yy789; - goto yy523; -yy785: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy786: - yych = *++p; - if (yych == 'K') goto yy787; - if (yych != 'k') goto yy523; -yy787: - yych = *++p; - if (yych == 'E') goto yy788; - if (yych != 'e') goto yy523; -yy788: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy789: - yych = *++p; - if (yych == 'E') goto yy790; - if (yych != 'e') goto yy523; -yy790: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy791: - yych = *++p; - if (yych == 'T') goto yy792; - if (yych != 't') goto yy523; -yy792: - yych = *++p; - if (yych == 'O') goto yy533; - if (yych == 'o') goto yy533; - goto yy523; -yy793: - yych = *++p; - if (yych == 'S') goto yy794; - if (yych != 's') goto yy523; -yy794: - yych = *++p; - if (yych == 'A') goto yy795; - if (yych != 'a') goto yy523; -yy795: - yych = *++p; - if (yych == 'G') goto yy796; - if (yych != 'g') goto yy523; -yy796: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy797: - yych = *++p; - if (yych == 'P') goto yy804; - if (yych == 'p') goto yy804; - goto yy523; -yy798: - yych = *++p; - if (yych == 'H') goto yy801; - if (yych == 'h') goto yy801; - goto yy523; -yy799: - yych = *++p; - if (yych == 'I') goto yy800; - if (yych != 'i') goto yy523; -yy800: - yych = *++p; - if (yych == 'M') goto yy533; - if (yych == 'm') goto yy533; - goto yy523; -yy801: - yych = *++p; - if (yych == 'E') goto yy802; - if (yych != 'e') goto yy523; -yy802: - yych = *++p; - if (yych == 'L') goto yy803; - if (yych != 'l') goto yy523; -yy803: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy804: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy805: - yych = *++p; - if (yych == 'D') goto yy809; - if (yych == 'd') goto yy809; - goto yy523; -yy806: - yych = *++p; - if (yych == 'B') goto yy807; - if (yych != 'b') goto yy523; -yy807: - yych = *++p; - if (yych == 'L') goto yy808; - if (yych != 'l') goto yy523; -yy808: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy809: - yych = *++p; - if (yych == 'A') goto yy810; - if (yych != 'a') goto yy523; -yy810: - yych = *++p; - if (yych == 'T') goto yy811; - if (yych != 't') goto yy523; -yy811: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy812: - yych = *++p; - if (yych == 'A') goto yy817; - if (yych == 'a') goto yy817; - goto yy523; -yy813: - yych = *++p; - if (yych == 'S') goto yy814; - if (yych != 's') goto yy523; -yy814: - yych = *++p; - if (yych == 'T') goto yy815; - if (yych != 't') goto yy523; -yy815: - yych = *++p; - if (yych == 'F') goto yy816; - if (yych != 'f') goto yy523; -yy816: - yych = *++p; - if (yych == 'M') goto yy533; - if (yych == 'm') goto yy533; - goto yy523; -yy817: - yych = *++p; - if (yych == 'P') goto yy818; - if (yych != 'p') goto yy523; -yy818: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy819: - yych = *++p; - if (yych == 'M') goto yy842; - if (yych == 'm') goto yy842; - goto yy523; -yy820: - yych = *++p; - if (yych <= 'I') { - if (yych == 'C') goto yy831; - if (yych <= 'H') goto yy523; - goto yy830; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy523; - goto yy831; - } else { - if (yych == 'i') goto yy830; - goto yy523; - } - } -yy821: - yych = *++p; - if (yych <= 'P') { - if (yych == 'N') goto yy533; - if (yych <= 'O') goto yy523; - goto yy533; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy523; - goto yy533; - } else { - if (yych == 'p') goto yy533; - goto yy523; - } - } -yy822: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy828; - if (yych <= 'N') goto yy523; - goto yy829; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy523; - goto yy828; - } else { - if (yych == 'o') goto yy829; - goto yy523; - } - } -yy823: - yych = *++p; - if (yych == 'F') goto yy827; - if (yych == 'f') goto yy827; - goto yy523; -yy824: - yych = *++p; - if (yych <= '@') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'A') goto yy826; - if (yych == 'a') goto yy826; - goto yy523; - } -yy825: - yych = *++p; - if (yych == 'X') goto yy533; - if (yych == 'x') goto yy533; - goto yy523; -yy826: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy827: - yych = *++p; - if (yych == 'O') goto yy533; - if (yych == 'o') goto yy533; - goto yy523; -yy828: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy829: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy830: - yych = *++p; - if (yych == 'S') goto yy832; - if (yych == 's') goto yy832; - goto yy523; -yy831: - yych = *++p; - if (yych <= ':') { - if (yych == '6') goto yy533; - if (yych <= '9') goto yy523; - goto yy534; - } else { - if (yych <= 'S') { - if (yych <= 'R') goto yy523; - goto yy533; - } else { - if (yych == 's') goto yy533; - goto yy523; - } - } -yy832: - yych = *++p; - if (yych == '.') goto yy833; - if (yych == ':') goto yy534; - goto yy523; -yy833: - yych = *++p; - if (yych <= 'X') { - if (yych <= 'K') { - if (yych == 'B') goto yy836; - goto yy523; - } else { - if (yych <= 'L') goto yy834; - if (yych <= 'W') goto yy523; - goto yy835; - } - } else { - if (yych <= 'k') { - if (yych == 'b') goto yy836; - goto yy523; - } else { - if (yych <= 'l') goto yy834; - if (yych == 'x') goto yy835; - goto yy523; - } - } -yy834: - yych = *++p; - if (yych == 'W') goto yy841; - if (yych == 'w') goto yy841; - goto yy523; -yy835: - yych = *++p; - if (yych == 'P') goto yy839; - if (yych == 'p') goto yy839; - goto yy523; -yy836: - yych = *++p; - if (yych == 'E') goto yy837; - if (yych != 'e') goto yy523; -yy837: - yych = *++p; - if (yych == 'E') goto yy838; - if (yych != 'e') goto yy523; -yy838: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy839: - yych = *++p; - if (yych == 'C') goto yy840; - if (yych != 'c') goto yy523; -yy840: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy841: - yych = *++p; - if (yych == 'Z') goto yy533; - if (yych == 'z') goto yy533; - goto yy523; -yy842: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy843: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy844: - yych = *++p; - if (yych == 'T') goto yy847; - if (yych == 't') goto yy847; - goto yy523; -yy845: - yych = *++p; - if (yych != '2') goto yy523; - yych = *++p; - if (yych == '3') goto yy533; - goto yy523; -yy847: - yych = *++p; - if (yych == 'P') goto yy848; - if (yych != 'p') goto yy523; -yy848: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy849: - yych = *++p; - if (yych == 'A') goto yy865; - if (yych == 'a') goto yy865; - goto yy523; -yy850: - yych = *++p; - if (yych <= 'Z') { - if (yych == 'T') goto yy533; - if (yych <= 'Y') goto yy523; - goto yy856; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy523; - goto yy533; - } else { - if (yych == 'z') goto yy856; - goto yy523; - } - } -yy851: - yych = *++p; - if (yych <= 'O') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'P') goto yy853; - if (yych == 'p') goto yy853; - goto yy523; - } -yy852: - yych = *++p; - if (yych == 'O') goto yy533; - if (yych == 'o') goto yy533; - goto yy523; -yy853: - yych = *++p; - if (yych == 'H') goto yy854; - if (yych != 'h') goto yy523; -yy854: - yych = *++p; - if (yych == 'E') goto yy855; - if (yych != 'e') goto yy523; -yy855: - yych = *++p; - if (yych == 'R') goto yy533; - if (yych == 'r') goto yy533; - goto yy523; -yy856: - yych = *++p; - if (yych == 'M') goto yy857; - if (yych != 'm') goto yy523; -yy857: - yych = *++p; - if (yych == 'O') goto yy858; - if (yych != 'o') goto yy523; -yy858: - yych = *++p; - if (yych == 'P') goto yy859; - if (yych != 'p') goto yy523; -yy859: - yych = *++p; - if (yych == 'R') goto yy860; - if (yych != 'r') goto yy523; -yy860: - yych = *++p; - if (yych == 'O') goto yy861; - if (yych != 'o') goto yy523; -yy861: - yych = *++p; - if (yych == 'J') goto yy862; - if (yych != 'j') goto yy523; -yy862: - yych = *++p; - if (yych == 'E') goto yy863; - if (yych != 'e') goto yy523; -yy863: - yych = *++p; - if (yych == 'C') goto yy864; - if (yych != 'c') goto yy523; -yy864: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy865: - yych = *++p; - if (yych == 'L') goto yy866; - if (yych != 'l') goto yy523; -yy866: - yych = *++p; - if (yych == 'K') goto yy533; - if (yych == 'k') goto yy533; - goto yy523; -yy867: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'M') { - if (yych == 'L') goto yy877; - goto yy523; - } else { - if (yych <= 'N') goto yy878; - if (yych <= 'R') goto yy523; - goto yy879; - } - } else { - if (yych <= 'm') { - if (yych == 'l') goto yy877; - goto yy523; - } else { - if (yych <= 'n') goto yy878; - if (yych == 's') goto yy879; - goto yy523; - } - } -yy868: - yych = *++p; - if (yych == 'E') goto yy876; - if (yych == 'e') goto yy876; - goto yy523; -yy869: - yych = *++p; - if (yych == 'C') goto yy871; - if (yych == 'c') goto yy871; - goto yy523; -yy870: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy871: - yych = *++p; - if (yych == 'E') goto yy872; - if (yych != 'e') goto yy523; -yy872: - yych = *++p; - if (yych == 'T') goto yy873; - if (yych != 't') goto yy523; -yy873: - yych = *++p; - if (yych == 'I') goto yy874; - if (yych != 'i') goto yy523; -yy874: - yych = *++p; - if (yych == 'M') goto yy875; - if (yych != 'm') goto yy523; -yy875: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy876: - yych = *++p; - if (yych == 'D') goto yy533; - if (yych == 'd') goto yy533; - goto yy523; -yy877: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy878: - yych = *++p; - if (yych == 'G') goto yy880; - if (yych == 'g') goto yy880; - goto yy523; -yy879: - yych = *++p; - if (yych == 'H') goto yy533; - if (yych == 'h') goto yy533; - goto yy523; -yy880: - yych = *++p; - if (yych == 'E') goto yy881; - if (yych != 'e') goto yy523; -yy881: - yych = *++p; - if (yych == 'R') goto yy533; - if (yych == 'r') goto yy533; - goto yy523; -yy882: - yych = *++p; - if (yych == 'T') goto yy900; - if (yych == 't') goto yy900; - goto yy523; -yy883: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy884: - yych = *++p; - if (yych == 'M') goto yy533; - if (yych == 'm') goto yy533; - goto yy523; -yy885: - yych = *++p; - if (yych <= 'S') { - if (yych == 'P') goto yy533; - if (yych <= 'R') goto yy523; - goto yy533; - } else { - if (yych <= 'p') { - if (yych <= 'o') goto yy523; - goto yy533; - } else { - if (yych == 's') goto yy533; - goto yy523; - } - } -yy886: - yych = *++p; - if (yych == 'I') goto yy894; - if (yych == 'i') goto yy894; - goto yy523; -yy887: - yych = *++p; - if (yych == 'A') goto yy893; - if (yych == 'a') goto yy893; - goto yy523; -yy888: - yych = *++p; - if (yych == 'O') goto yy891; - if (yych == 'o') goto yy891; - goto yy523; -yy889: - yych = *++p; - if (yych == 'A') goto yy890; - if (yych != 'a') goto yy523; -yy890: - yych = *++p; - if (yych <= 'R') { - if (yych == ':') goto yy534; - goto yy523; - } else { - if (yych <= 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; - } -yy891: - yych = *++p; - if (yych == 'U') goto yy892; - if (yych != 'u') goto yy523; -yy892: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy893: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy894: - yych = *++p; - if (yych == 'U') goto yy895; - if (yych != 'u') goto yy523; -yy895: - yych = *++p; - if (yych == 'M') goto yy896; - if (yych != 'm') goto yy523; -yy896: - yych = *++p; - if (yych == 'X') goto yy897; - if (yych != 'x') goto yy523; -yy897: - yych = *++p; - if (yych == 'T') goto yy898; - if (yych != 't') goto yy523; -yy898: - yych = *++p; - if (yych == 'R') goto yy899; - if (yych != 'r') goto yy523; -yy899: - yych = *++p; - if (yych == 'A') goto yy533; - if (yych == 'a') goto yy533; - goto yy523; -yy900: - yych = *++p; - if (yych == 'A') goto yy901; - if (yych != 'a') goto yy523; -yy901: - yych = *++p; - if (yych == 'C') goto yy902; - if (yych != 'c') goto yy523; -yy902: - yych = *++p; - if (yych == 'H') goto yy903; - if (yych != 'h') goto yy523; -yy903: - yych = *++p; - if (yych == 'M') goto yy904; - if (yych != 'm') goto yy523; -yy904: - yych = *++p; - if (yych == 'E') goto yy905; - if (yych != 'e') goto yy523; -yy905: - yych = *++p; - if (yych == 'N') goto yy906; - if (yych != 'n') goto yy523; -yy906: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy907: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy908: - yych = *++p; - if (yych <= 'V') { - if (yych == 'R') goto yy533; - if (yych <= 'U') goto yy523; - } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy523; - goto yy533; - } else { - if (yych != 'v') goto yy523; - } - } - yych = *++p; - if (yych == 'A') goto yy910; - if (yych != 'a') goto yy523; -yy910: - yych = *++p; - if (yych == 'S') goto yy911; - if (yych != 's') goto yy523; -yy911: - yych = *++p; - if (yych == 'C') goto yy912; - if (yych != 'c') goto yy523; -yy912: - yych = *++p; - if (yych == 'R') goto yy913; - if (yych != 'r') goto yy523; -yy913: - yych = *++p; - if (yych == 'I') goto yy914; - if (yych != 'i') goto yy523; -yy914: - yych = *++p; - if (yych == 'P') goto yy915; - if (yych != 'p') goto yy523; -yy915: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy916: - yych = *++p; - if (yych == 'B') goto yy533; - if (yych == 'b') goto yy533; - goto yy523; -yy917: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy918: - yych = *++p; - if (yych == 'N') goto yy925; - if (yych == 'n') goto yy925; - goto yy523; -yy919: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy920: - yych = *++p; - if (yych == 'C') goto yy924; - if (yych == 'c') goto yy924; - goto yy523; -yy921: - yych = *++p; - if (yych <= 'V') { - if (yych == 'T') goto yy923; - if (yych <= 'U') goto yy523; - goto yy533; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy523; - goto yy923; - } else { - if (yych == 'v') goto yy533; - goto yy523; - } - } -yy922: - yych = *++p; - if (yych == 'I') goto yy533; - if (yych == 'i') goto yy533; - goto yy523; -yy923: - yych = *++p; - if (yych == 'A') goto yy533; - if (yych == 'a') goto yy533; - goto yy523; -yy924: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy925: - yych = *++p; - if (yych == 'A') goto yy926; - if (yych != 'a') goto yy523; -yy926: - yych = *++p; - if (yych != '-') goto yy523; - yych = *++p; - if (yych == 'P') goto yy928; - if (yych != 'p') goto yy523; -yy928: - yych = *++p; - if (yych == 'L') goto yy929; - if (yych != 'l') goto yy523; -yy929: - yych = *++p; - if (yych == 'A') goto yy930; - if (yych != 'a') goto yy523; -yy930: - yych = *++p; - if (yych == 'Y') goto yy931; - if (yych != 'y') goto yy523; -yy931: - yych = *++p; - if (yych <= 'S') { - if (yych == 'C') goto yy932; - if (yych <= 'R') goto yy523; - goto yy933; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy523; - } else { - if (yych == 's') goto yy933; - goto yy523; - } - } -yy932: - yych = *++p; - if (yych == 'O') goto yy938; - if (yych == 'o') goto yy938; - goto yy523; -yy933: - yych = *++p; - if (yych == 'I') goto yy934; - if (yych != 'i') goto yy523; -yy934: - yych = *++p; - if (yych == 'N') goto yy935; - if (yych != 'n') goto yy523; -yy935: - yych = *++p; - if (yych == 'G') goto yy936; - if (yych != 'g') goto yy523; -yy936: - yych = *++p; - if (yych == 'L') goto yy937; - if (yych != 'l') goto yy523; -yy937: - yych = *++p; - if (yych == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -yy938: - yych = *++p; - if (yych == 'N') goto yy939; - if (yych != 'n') goto yy523; -yy939: - yych = *++p; - if (yych == 'T') goto yy940; - if (yych != 't') goto yy523; -yy940: - yych = *++p; - if (yych == 'A') goto yy941; - if (yych != 'a') goto yy523; -yy941: - yych = *++p; - if (yych == 'I') goto yy942; - if (yych != 'i') goto yy523; -yy942: - yych = *++p; - if (yych == 'N') goto yy943; - if (yych != 'n') goto yy523; -yy943: - yych = *++p; - if (yych == 'E') goto yy944; - if (yych != 'e') goto yy523; -yy944: - yych = *++p; - if (yych == 'R') goto yy533; - if (yych == 'r') goto yy533; - goto yy523; -yy945: - yych = *++p; - if (yych == 'S') goto yy533; - if (yych == 's') goto yy533; - goto yy523; -yy946: - yych = *++p; - if (yych <= 'N') { - if (yych <= 'A') { - if (yych <= '@') goto yy523; - goto yy968; - } else { - if (yych <= 'L') goto yy523; - if (yych <= 'M') goto yy969; - goto yy970; - } - } else { - if (yych <= 'l') { - if (yych == 'a') goto yy968; - goto yy523; - } else { - if (yych <= 'm') goto yy969; - if (yych <= 'n') goto yy970; - goto yy523; - } - } -yy947: - yych = *++p; - if (yych == 'R') goto yy955; - if (yych == 'r') goto yy955; - goto yy523; -yy948: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy952; - if (yych <= 'O') goto yy523; - goto yy533; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy523; - goto yy952; - } else { - if (yych == 'p') goto yy533; - goto yy523; - } - } -yy949: - yych = *++p; - if (yych == 'I') goto yy951; - if (yych == 'i') goto yy951; - goto yy523; -yy950: - yych = *++p; - if (yych == 'D') goto yy533; - if (yych == 'd') goto yy533; - goto yy523; -yy951: - yych = *++p; - if (yych == 'D') goto yy533; - if (yych == 'd') goto yy533; - goto yy523; -yy952: - yych = *++p; - if (yych == 'L') goto yy953; - if (yych != 'l') goto yy523; -yy953: - yych = *++p; - if (yych == 'T') goto yy954; - if (yych != 't') goto yy523; -yy954: - yych = *++p; - if (yych == 'O') goto yy533; - if (yych == 'o') goto yy533; - goto yy523; -yy955: - yych = *++p; - if (yych == 'O') goto yy956; - if (yych != 'o') goto yy523; -yy956: - yych = *++p; - if (yych == 'M') goto yy957; - if (yych != 'm') goto yy523; -yy957: - yych = *++p; - if (yych == 'E') goto yy958; - if (yych != 'e') goto yy523; -yy958: - yych = *++p; - if (yych == '-') goto yy959; - if (yych == ':') goto yy534; - goto yy523; -yy959: - yych = *++p; - if (yych == 'E') goto yy960; - if (yych != 'e') goto yy523; -yy960: - yych = *++p; - if (yych == 'X') goto yy961; - if (yych != 'x') goto yy523; -yy961: - yych = *++p; - if (yych == 'T') goto yy962; - if (yych != 't') goto yy523; -yy962: - yych = *++p; - if (yych == 'E') goto yy963; - if (yych != 'e') goto yy523; -yy963: - yych = *++p; - if (yych == 'N') goto yy964; - if (yych != 'n') goto yy523; -yy964: - yych = *++p; - if (yych == 'S') goto yy965; - if (yych != 's') goto yy523; -yy965: - yych = *++p; - if (yych == 'I') goto yy966; - if (yych != 'i') goto yy523; -yy966: - yych = *++p; - if (yych == 'O') goto yy967; - if (yych != 'o') goto yy523; -yy967: - yych = *++p; - if (yych == 'N') goto yy533; - if (yych == 'n') goto yy533; - goto yy523; -yy968: - yych = *++p; - if (yych == 'P') goto yy533; - if (yych == 'p') goto yy533; - goto yy523; -yy969: - yych = *++p; - if (yych == '-') goto yy974; - goto yy523; -yy970: - yych = *++p; - if (yych == 'T') goto yy971; - if (yych != 't') goto yy523; -yy971: - yych = *++p; - if (yych == 'E') goto yy972; - if (yych != 'e') goto yy523; -yy972: - yych = *++p; - if (yych == 'N') goto yy973; - if (yych != 'n') goto yy523; -yy973: - yych = *++p; - if (yych == 'T') goto yy533; - if (yych == 't') goto yy533; - goto yy523; -yy974: - yych = *++p; - if (yych == 'E') goto yy975; - if (yych != 'e') goto yy523; -yy975: - yych = *++p; - if (yych == 'V') goto yy976; - if (yych != 'v') goto yy523; -yy976: - yych = *++p; - if (yych == 'E') goto yy977; - if (yych != 'e') goto yy523; -yy977: - yych = *++p; - if (yych == 'N') goto yy978; - if (yych != 'n') goto yy523; -yy978: - yych = *++p; - if (yych == 'T') goto yy979; - if (yych != 't') goto yy523; -yy979: - yych = *++p; - if (yych == 'B') goto yy980; - if (yych != 'b') goto yy523; -yy980: - yych = *++p; - if (yych == 'R') goto yy981; - if (yych != 'r') goto yy523; -yy981: - yych = *++p; - if (yych == 'I') goto yy982; - if (yych != 'i') goto yy523; -yy982: - yych = *++p; - if (yych == 'T') goto yy983; - if (yych != 't') goto yy523; -yy983: - yych = *++p; - if (yych == 'E') goto yy984; - if (yych != 'e') goto yy523; -yy984: - yych = *++p; - if (yych != '-') goto yy523; - yych = *++p; - if (yych == 'A') goto yy986; - if (yych != 'a') goto yy523; -yy986: - yych = *++p; - if (yych == 'T') goto yy987; - if (yych != 't') goto yy523; -yy987: - yych = *++p; - if (yych == 'T') goto yy988; - if (yych != 't') goto yy523; -yy988: - yych = *++p; - if (yych == 'E') goto yy989; - if (yych != 'e') goto yy523; -yy989: - yych = *++p; - if (yych == 'N') goto yy990; - if (yych != 'n') goto yy523; -yy990: - yych = *++p; - if (yych == 'D') goto yy991; - if (yych != 'd') goto yy523; -yy991: - yych = *++p; - if (yych == 'E') goto yy992; - if (yych != 'e') goto yy523; -yy992: - ++p; - if ((yych = *p) == 'E') goto yy533; - if (yych == 'e') goto yy533; - goto yy523; -} - + { + 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, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, + }; + yych = *(marker = p); + if (yych <= 'c') { + if (yych <= 'M') { + if (yych <= 'E') { + if (yych <= 'A') { + if (yych == '\n') + goto yy494; + if (yych <= '@') + goto yy521; + goto yy498; + } else { + if (yych <= 'B') + goto yy516; + if (yych <= 'C') + goto yy495; + if (yych <= 'D') + goto yy496; + goto yy517; + } + } else { + if (yych <= 'I') { + if (yych <= 'F') + goto yy499; + if (yych <= 'G') + goto yy500; + if (yych <= 'H') + goto yy501; + goto yy502; + } else { + if (yych <= 'J') + goto yy497; + if (yych <= 'K') + goto yy518; + if (yych <= 'L') + goto yy503; + goto yy504; + } + } + } else { + if (yych <= 'U') { + if (yych <= 'Q') { + if (yych <= 'N') + goto yy505; + if (yych <= 'O') + goto yy506; + if (yych <= 'P') + goto yy507; + goto yy519; + } else { + if (yych <= 'R') + goto yy508; + if (yych <= 'S') + goto yy509; + if (yych <= 'T') + goto yy510; + goto yy511; + } + } else { + if (yych <= 'Y') { + if (yych <= 'V') + goto yy512; + if (yych <= 'W') + goto yy513; + if (yych <= 'X') + goto yy514; + goto yy520; + } else { + if (yych <= '`') { + if (yych <= 'Z') + goto yy515; + goto yy521; + } else { + if (yych <= 'a') + goto yy498; + if (yych <= 'b') + goto yy516; + goto yy495; + } + } + } + } + } else { + if (yych <= 't') { + if (yych <= 'k') { + if (yych <= 'g') { + if (yych <= 'd') + goto yy496; + if (yych <= 'e') + goto yy517; + if (yych <= 'f') + goto yy499; + goto yy500; + } else { + if (yych <= 'h') + goto yy501; + if (yych <= 'i') + goto yy502; + if (yych <= 'j') + goto yy497; + goto yy518; + } + } else { + if (yych <= 'o') { + if (yych <= 'l') + goto yy503; + if (yych <= 'm') + goto yy504; + if (yych <= 'n') + goto yy505; + goto yy506; + } else { + if (yych <= 'q') { + if (yych <= 'p') + goto yy507; + goto yy519; + } else { + if (yych <= 'r') + goto yy508; + if (yych <= 's') + goto yy509; + goto yy510; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= 'x') { + if (yych <= 'u') + goto yy511; + if (yych <= 'v') + goto yy512; + if (yych <= 'w') + goto yy513; + goto yy514; + } else { + if (yych <= 'y') + goto yy520; + if (yych <= 'z') + goto yy515; + if (yych <= 0x7F) + goto yy521; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy522; + if (yych <= 0xE0) + goto yy524; + if (yych <= 0xEC) + goto yy525; + goto yy529; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy525; + goto yy526; + } else { + if (yych <= 0xF3) + goto yy527; + if (yych <= 0xF4) + goto yy528; + } + } + } + } + } + yy494 : { return 0; } + yy495: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy948; + case 'H': + case 'h': + goto yy947; + case 'I': + case 'i': + goto yy950; + case 'O': + case 'o': + goto yy946; + case 'R': + case 'r': + goto yy949; + case 'V': + case 'v': + goto yy945; + default: + goto yy494; + } + yy496: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy921; + case 'I': + case 'i': + goto yy920; + case 'L': + case 'l': + goto yy918; + case 'N': + case 'n': + goto yy919; + case 'O': + case 'o': + goto yy922; + case 'T': + case 't': + goto yy917; + case 'V': + case 'v': + goto yy916; + default: + goto yy494; + } + yy497: + yych = *(marker = ++p); + if (yych <= 'M') { + if (yych == 'A') + goto yy908; + if (yych <= 'L') + goto yy494; + goto yy907; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy494; + goto yy908; + } else { + if (yych == 'm') + goto yy907; + goto yy494; + } + } + yy498: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy889; + case 'B': + case 'b': + goto yy888; + case 'C': + case 'c': + goto yy887; + case 'D': + case 'd': + goto yy886; + case 'F': + case 'f': + goto yy885; + case 'I': + case 'i': + goto yy884; + case 'P': + case 'p': + goto yy883; + case 'T': + case 't': + goto yy882; + case 'W': + case 'w': + goto yy533; + default: + goto yy494; + } + yy499: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'E') { + if (yych == 'A') + goto yy869; + if (yych <= 'D') + goto yy494; + goto yy868; + } else { + if (yych == 'I') + goto yy867; + if (yych <= 'S') + goto yy494; + goto yy870; + } + } else { + if (yych <= 'e') { + if (yych == 'a') + goto yy869; + if (yych <= 'd') + goto yy494; + goto yy868; + } else { + if (yych <= 'i') { + if (yych <= 'h') + goto yy494; + goto yy867; + } else { + if (yych == 't') + goto yy870; + goto yy494; + } + } + } + yy500: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': + goto yy852; + case 'G': + case 'g': + goto yy533; + case 'I': + case 'i': + goto yy850; + case 'O': + case 'o': + goto yy851; + case 'T': + case 't': + goto yy849; + default: + goto yy494; + } + yy501: + yych = *(marker = ++p); + if (yych <= 'S') { + if (yych <= '3') { + if (yych <= '2') + goto yy494; + goto yy845; + } else { + if (yych == 'C') + goto yy843; + goto yy494; + } + } else { + if (yych <= 'c') { + if (yych <= 'T') + goto yy844; + if (yych <= 'b') + goto yy494; + goto yy843; + } else { + if (yych == 't') + goto yy844; + goto yy494; + } + } + yy502: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy825; + case 'C': + case 'c': + goto yy822; + case 'M': + case 'm': + goto yy824; + case 'N': + case 'n': + goto yy823; + case 'P': + case 'p': + goto yy821; + case 'R': + case 'r': + goto yy820; + case 'T': + case 't': + goto yy819; + default: + goto yy494; + } + yy503: + yych = *(marker = ++p); + if (yych <= 'D') { + if (yych == 'A') + goto yy813; + if (yych <= 'C') + goto yy494; + goto yy812; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy494; + goto yy813; + } else { + if (yych == 'd') + goto yy812; + goto yy494; + } + } + yy504: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy779; + case 'E': + case 'e': + goto yy778; + case 'I': + case 'i': + goto yy781; + case 'M': + case 'm': + goto yy777; + case 'S': + case 's': + goto yy776; + case 'T': + case 't': + goto yy780; + case 'U': + case 'u': + goto yy775; + case 'V': + case 'v': + goto yy774; + default: + goto yy494; + } + yy505: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': + goto yy769; + case 'F': + case 'f': + goto yy768; + case 'I': + case 'i': + goto yy767; + case 'N': + case 'n': + goto yy766; + case 'O': + case 'o': + goto yy765; + default: + goto yy494; + } + yy506: + yych = *(marker = ++p); + if (yych <= 'P') { + if (yych == 'I') + goto yy751; + if (yych <= 'O') + goto yy494; + goto yy752; + } else { + if (yych <= 'i') { + if (yych <= 'h') + goto yy494; + goto yy751; + } else { + if (yych == 'p') + goto yy752; + goto yy494; + } + } + yy507: + yych = *(marker = ++p); + if (yych <= 'S') { + if (yych <= 'L') { + if (yych == 'A') + goto yy733; + if (yych <= 'K') + goto yy494; + goto yy732; + } else { + if (yych <= 'O') { + if (yych <= 'N') + goto yy494; + goto yy734; + } else { + if (yych <= 'Q') + goto yy494; + if (yych <= 'R') + goto yy731; + goto yy730; + } + } + } else { + if (yych <= 'n') { + if (yych <= 'a') { + if (yych <= '`') + goto yy494; + goto yy733; + } else { + if (yych == 'l') + goto yy732; + goto yy494; + } + } else { + if (yych <= 'q') { + if (yych <= 'o') + goto yy734; + goto yy494; + } else { + if (yych <= 'r') + goto yy731; + if (yych <= 's') + goto yy730; + goto yy494; + } + } + } + yy508: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'L') { + if (yych == 'E') + goto yy720; + goto yy494; + } else { + if (yych <= 'M') + goto yy719; + if (yych <= 'R') + goto yy494; + if (yych <= 'S') + goto yy718; + goto yy717; + } + } else { + if (yych <= 'm') { + if (yych == 'e') + goto yy720; + if (yych <= 'l') + goto yy494; + goto yy719; + } else { + if (yych <= 'r') + goto yy494; + if (yych <= 's') + goto yy718; + if (yych <= 't') + goto yy717; + goto yy494; + } + } + yy509: + yych = *(marker = ++p); + switch (yych) { + case 'E': + case 'e': + goto yy673; + case 'F': + case 'f': + goto yy672; + case 'G': + case 'g': + goto yy671; + case 'H': + case 'h': + goto yy676; + case 'I': + case 'i': + goto yy675; + case 'K': + case 'k': + goto yy670; + case 'M': + case 'm': + goto yy669; + case 'N': + case 'n': + goto yy674; + case 'O': + case 'o': + goto yy668; + case 'P': + case 'p': + goto yy667; + case 'S': + case 's': + goto yy666; + case 'T': + case 't': + goto yy665; + case 'V': + case 'v': + goto yy664; + default: + goto yy494; + } + yy510: + yych = *(marker = ++p); + switch (yych) { + case 'A': + case 'a': + goto yy640; + case 'E': + case 'e': + goto yy636; + case 'F': + case 'f': + goto yy639; + case 'H': + case 'h': + goto yy635; + case 'I': + case 'i': + goto yy637; + case 'N': + case 'n': + goto yy638; + case 'V': + case 'v': + goto yy533; + default: + goto yy494; + } + yy511: + yych = *(marker = ++p); + if (yych <= 'T') { + if (yych <= 'N') { + if (yych == 'D') + goto yy627; + if (yych <= 'M') + goto yy494; + goto yy626; + } else { + if (yych == 'R') + goto yy628; + if (yych <= 'S') + goto yy494; + goto yy625; + } + } else { + if (yych <= 'n') { + if (yych == 'd') + goto yy627; + if (yych <= 'm') + goto yy494; + goto yy626; + } else { + if (yych <= 'r') { + if (yych <= 'q') + goto yy494; + goto yy628; + } else { + if (yych == 't') + goto yy625; + goto yy494; + } + } + } + yy512: + yych = *(marker = ++p); + if (yych <= 'I') { + if (yych == 'E') + goto yy609; + if (yych <= 'H') + goto yy494; + goto yy608; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy494; + goto yy609; + } else { + if (yych == 'i') + goto yy608; + goto yy494; + } + } + yy513: + yych = *(marker = ++p); + if (yych <= 'Y') { + if (yych <= 'R') { + if (yych == 'E') + goto yy598; + goto yy494; + } else { + if (yych <= 'S') + goto yy599; + if (yych <= 'T') + goto yy597; + if (yych <= 'X') + goto yy494; + goto yy596; + } + } else { + if (yych <= 's') { + if (yych == 'e') + goto yy598; + if (yych <= 'r') + goto yy494; + goto yy599; + } else { + if (yych <= 't') + goto yy597; + if (yych == 'y') + goto yy596; + goto yy494; + } + } + yy514: + yych = *(marker = ++p); + if (yych <= 'R') { + if (yych <= 'F') { + if (yych == 'C') + goto yy575; + if (yych <= 'E') + goto yy494; + goto yy573; + } else { + if (yych == 'M') + goto yy574; + if (yych <= 'Q') + goto yy494; + goto yy572; + } + } else { + if (yych <= 'f') { + if (yych == 'c') + goto yy575; + if (yych <= 'e') + goto yy494; + goto yy573; + } else { + if (yych <= 'm') { + if (yych <= 'l') + goto yy494; + goto yy574; + } else { + if (yych == 'r') + goto yy572; + goto yy494; + } + } + } + yy515: + yych = *(marker = ++p); + if (yych == '3') + goto yy567; + goto yy494; + yy516: + yych = *(marker = ++p); + if (yych <= 'O') { + if (yych <= 'H') { + if (yych == 'E') + goto yy557; + goto yy494; + } else { + if (yych <= 'I') + goto yy556; + if (yych <= 'N') + goto yy494; + goto yy555; + } + } else { + if (yych <= 'h') { + if (yych == 'e') + goto yy557; + goto yy494; + } else { + if (yych <= 'i') + goto yy556; + if (yych == 'o') + goto yy555; + goto yy494; + } + } + yy517: + yych = *(marker = ++p); + if (yych == 'D') + goto yy553; + if (yych == 'd') + goto yy553; + goto yy494; + yy518: + yych = *(marker = ++p); + if (yych == 'E') + goto yy548; + if (yych == 'e') + goto yy548; + goto yy494; + yy519: + yych = *(marker = ++p); + if (yych == 'U') + goto yy545; + if (yych == 'u') + goto yy545; + goto yy494; + yy520: + yych = *(marker = ++p); + if (yych == 'M') + goto yy530; + if (yych == 'm') + goto yy530; + goto yy494; + yy521: + yych = *++p; + goto yy494; + yy522: + yych = *++p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0xBF) + goto yy521; + yy523: + p = marker; + goto yy494; + yy524: + yych = *++p; + if (yych <= 0x9F) + goto yy523; + if (yych <= 0xBF) + goto yy522; + goto yy523; + yy525: + yych = *++p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0xBF) + goto yy522; + goto yy523; + yy526: + yych = *++p; + if (yych <= 0x8F) + goto yy523; + if (yych <= 0xBF) + goto yy525; + goto yy523; + yy527: + yych = *++p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0xBF) + goto yy525; + goto yy523; + yy528: + yych = *++p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0x8F) + goto yy525; + goto yy523; + yy529: + yych = *++p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0x9F) + goto yy522; + goto yy523; + yy530: + yych = *++p; + if (yych == 'S') + goto yy531; + if (yych != 's') + goto yy523; + yy531: + yych = *++p; + if (yych == 'G') + goto yy532; + if (yych != 'g') + goto yy523; + yy532: + yych = *++p; + if (yych == 'R') + goto yy533; + if (yych != 'r') + goto yy523; + yy533: + yych = *++p; + if (yych != ':') + goto yy523; + yy534: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy534; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '<') + goto yy523; + if (yych <= '>') + goto yy543; + goto yy523; + } else { + if (yych <= 0xDF) + goto yy536; + if (yych <= 0xE0) + goto yy537; + goto yy538; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy542; + if (yych <= 0xEF) + goto yy538; + goto yy539; + } else { + if (yych <= 0xF3) + goto yy540; + if (yych <= 0xF4) + goto yy541; + goto yy523; + } + } + yy536: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0xBF) + goto yy534; + goto yy523; + yy537: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy523; + if (yych <= 0xBF) + goto yy536; + goto yy523; + yy538: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0xBF) + goto yy536; + goto yy523; + yy539: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy523; + if (yych <= 0xBF) + goto yy538; + goto yy523; + yy540: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0xBF) + goto yy538; + goto yy523; + yy541: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0x8F) + goto yy538; + goto yy523; + yy542: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy523; + if (yych <= 0x9F) + goto yy536; + goto yy523; + yy543: + ++p; + { return (bufsize_t)(p - start); } + yy545: + yych = *++p; + if (yych == 'E') + goto yy546; + if (yych != 'e') + goto yy523; + yy546: + yych = *++p; + if (yych == 'R') + goto yy547; + if (yych != 'r') + goto yy523; + yy547: + yych = *++p; + if (yych == 'Y') + goto yy533; + if (yych == 'y') + goto yy533; + goto yy523; + yy548: + yych = *++p; + if (yych == 'Y') + goto yy549; + if (yych != 'y') + goto yy523; + yy549: + yych = *++p; + if (yych == 'P') + goto yy550; + if (yych != 'p') + goto yy523; + yy550: + yych = *++p; + if (yych == 'A') + goto yy551; + if (yych != 'a') + goto yy523; + yy551: + yych = *++p; + if (yych == 'R') + goto yy552; + if (yych != 'r') + goto yy523; + yy552: + yych = *++p; + if (yych == 'C') + goto yy533; + if (yych == 'c') + goto yy533; + goto yy523; + yy553: + yych = *++p; + if (yych != '2') + goto yy523; + yych = *++p; + if (yych == 'K') + goto yy533; + if (yych == 'k') + goto yy533; + goto yy523; + yy555: + yych = *++p; + if (yych == 'L') + goto yy566; + if (yych == 'l') + goto yy566; + goto yy523; + yy556: + yych = *++p; + if (yych == 'T') + goto yy562; + if (yych == 't') + goto yy562; + goto yy523; + yy557: + yych = *++p; + if (yych == 'S') + goto yy558; + if (yych != 's') + goto yy523; + yy558: + yych = *++p; + if (yych == 'H') + goto yy559; + if (yych != 'h') + goto yy523; + yy559: + yych = *++p; + if (yych == 'A') + goto yy560; + if (yych != 'a') + goto yy523; + yy560: + yych = *++p; + if (yych == 'R') + goto yy561; + if (yych != 'r') + goto yy523; + yy561: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy562: + yych = *++p; + if (yych == 'C') + goto yy563; + if (yych != 'c') + goto yy523; + yy563: + yych = *++p; + if (yych == 'O') + goto yy564; + if (yych != 'o') + goto yy523; + yy564: + yych = *++p; + if (yych == 'I') + goto yy565; + if (yych != 'i') + goto yy523; + yy565: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy566: + yych = *++p; + if (yych == 'O') + goto yy533; + if (yych == 'o') + goto yy533; + goto yy523; + yy567: + yych = *++p; + if (yych != '9') + goto yy523; + yych = *++p; + if (yych != '.') + goto yy523; + yych = *++p; + if (yych != '5') + goto yy523; + yych = *++p; + if (yych != '0') + goto yy523; + yych = *++p; + if (yych <= 'Q') + goto yy523; + if (yych <= 'S') + goto yy533; + if (yych <= 'q') + goto yy523; + if (yych <= 's') + goto yy533; + goto yy523; + yy572: + yych = *++p; + if (yych == 'I') + goto yy533; + if (yych == 'i') + goto yy533; + goto yy523; + yy573: + yych = *++p; + if (yych == 'I') + goto yy594; + if (yych == 'i') + goto yy594; + goto yy523; + yy574: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy584; + if (yych <= 'O') + goto yy523; + goto yy585; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy523; + goto yy584; + } else { + if (yych == 'p') + goto yy585; + goto yy523; + } + } + yy575: + yych = *++p; + if (yych == 'O') + goto yy576; + if (yych != 'o') + goto yy523; + yy576: + yych = *++p; + if (yych == 'N') + goto yy577; + if (yych != 'n') + goto yy523; + yy577: + yych = *++p; + if (yych == '-') + goto yy578; + if (yych == ':') + goto yy534; + goto yy523; + yy578: + yych = *++p; + if (yych == 'U') + goto yy579; + if (yych != 'u') + goto yy523; + yy579: + yych = *++p; + if (yych == 'S') + goto yy580; + if (yych != 's') + goto yy523; + yy580: + yych = *++p; + if (yych == 'E') + goto yy581; + if (yych != 'e') + goto yy523; + yy581: + yych = *++p; + if (yych == 'R') + goto yy582; + if (yych != 'r') + goto yy523; + yy582: + yych = *++p; + if (yych == 'I') + goto yy583; + if (yych != 'i') + goto yy523; + yy583: + yych = *++p; + if (yych == 'D') + goto yy533; + if (yych == 'd') + goto yy533; + goto yy523; + yy584: + yych = *++p; + if (yych == 'R') + goto yy586; + if (yych == 'r') + goto yy586; + goto yy523; + yy585: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy586: + yych = *++p; + if (yych == 'P') + goto yy587; + if (yych != 'p') + goto yy523; + yy587: + yych = *++p; + if (yych == 'C') + goto yy588; + if (yych != 'c') + goto yy523; + yy588: + yych = *++p; + if (yych != '.') + goto yy523; + yych = *++p; + if (yych == 'B') + goto yy590; + if (yych != 'b') + goto yy523; + yy590: + yych = *++p; + if (yych == 'E') + goto yy591; + if (yych != 'e') + goto yy523; + yy591: + yych = *++p; + if (yych == 'E') + goto yy592; + if (yych != 'e') + goto yy523; + yy592: + yych = *++p; + if (yych == 'P') + goto yy593; + if (yych != 'p') + goto yy523; + yy593: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy594: + yych = *++p; + if (yych == 'R') + goto yy595; + if (yych != 'r') + goto yy523; + yy595: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy596: + yych = *++p; + if (yych == 'C') + goto yy604; + if (yych == 'c') + goto yy604; + goto yy523; + yy597: + yych = *++p; + if (yych == 'A') + goto yy603; + if (yych == 'a') + goto yy603; + goto yy523; + yy598: + yych = *++p; + if (yych == 'B') + goto yy600; + if (yych == 'b') + goto yy600; + goto yy523; + yy599: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy600: + yych = *++p; + if (yych == 'C') + goto yy601; + if (yych != 'c') + goto yy523; + yy601: + yych = *++p; + if (yych == 'A') + goto yy602; + if (yych != 'a') + goto yy523; + yy602: + yych = *++p; + if (yych == 'L') + goto yy533; + if (yych == 'l') + goto yy533; + goto yy523; + yy603: + yych = *++p; + if (yych == 'I') + goto yy533; + if (yych == 'i') + goto yy533; + goto yy523; + yy604: + yych = *++p; + if (yych == 'I') + goto yy605; + if (yych != 'i') + goto yy523; + yy605: + yych = *++p; + if (yych == 'W') + goto yy606; + if (yych != 'w') + goto yy523; + yy606: + yych = *++p; + if (yych == 'Y') + goto yy607; + if (yych != 'y') + goto yy523; + yy607: + yych = *++p; + if (yych == 'G') + goto yy533; + if (yych == 'g') + goto yy533; + goto yy523; + yy608: + yych = *++p; + if (yych == 'E') + goto yy617; + if (yych == 'e') + goto yy617; + goto yy523; + yy609: + yych = *++p; + if (yych <= 'N') { + if (yych <= 'L') + goto yy523; + if (yych >= 'N') + goto yy611; + } else { + if (yych <= 'l') + goto yy523; + if (yych <= 'm') + goto yy610; + if (yych <= 'n') + goto yy611; + goto yy523; + } + yy610: + yych = *++p; + if (yych == 'M') + goto yy616; + if (yych == 'm') + goto yy616; + goto yy523; + yy611: + yych = *++p; + if (yych == 'T') + goto yy612; + if (yych != 't') + goto yy523; + yy612: + yych = *++p; + if (yych == 'R') + goto yy613; + if (yych != 'r') + goto yy523; + yy613: + yych = *++p; + if (yych == 'I') + goto yy614; + if (yych != 'i') + goto yy523; + yy614: + yych = *++p; + if (yych == 'L') + goto yy615; + if (yych != 'l') + goto yy523; + yy615: + yych = *++p; + if (yych == 'O') + goto yy533; + if (yych == 'o') + goto yy533; + goto yy523; + yy616: + yych = *++p; + if (yych == 'I') + goto yy533; + if (yych == 'i') + goto yy533; + goto yy523; + yy617: + yych = *++p; + if (yych == 'W') + goto yy618; + if (yych != 'w') + goto yy523; + yy618: + yych = *++p; + if (yych != '-') + goto yy523; + yych = *++p; + if (yych == 'S') + goto yy620; + if (yych != 's') + goto yy523; + yy620: + yych = *++p; + if (yych == 'O') + goto yy621; + if (yych != 'o') + goto yy523; + yy621: + yych = *++p; + if (yych == 'U') + goto yy622; + if (yych != 'u') + goto yy523; + yy622: + yych = *++p; + if (yych == 'R') + goto yy623; + if (yych != 'r') + goto yy523; + yy623: + yych = *++p; + if (yych == 'C') + goto yy624; + if (yych != 'c') + goto yy523; + yy624: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy625: + yych = *++p; + if (yych == '2') + goto yy632; + goto yy523; + yy626: + yych = *++p; + if (yych == 'R') + goto yy629; + if (yych == 'r') + goto yy629; + goto yy523; + yy627: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy628: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy629: + yych = *++p; + if (yych == 'E') + goto yy630; + if (yych != 'e') + goto yy523; + yy630: + yych = *++p; + if (yych == 'A') + goto yy631; + if (yych != 'a') + goto yy523; + yy631: + yych = *++p; + if (yych == 'L') + goto yy533; + if (yych == 'l') + goto yy533; + goto yy523; + yy632: + yych = *++p; + if (yych != '0') + goto yy523; + yych = *++p; + if (yych != '0') + goto yy523; + yych = *++p; + if (yych == '4') + goto yy533; + goto yy523; + yy635: + yych = *++p; + if (yych == 'I') + goto yy654; + if (yych == 'i') + goto yy654; + goto yy523; + yy636: + yych = *++p; + if (yych <= 'L') { + if (yych == 'A') + goto yy646; + if (yych <= 'K') + goto yy523; + goto yy645; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy523; + goto yy646; + } else { + if (yych == 'l') + goto yy645; + goto yy523; + } + } + yy637: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy638: + yych = *++p; + if (yych == '3') + goto yy642; + goto yy523; + yy639: + yych = *++p; + if (yych == 'T') + goto yy641; + if (yych == 't') + goto yy641; + goto yy523; + yy640: + yych = *++p; + if (yych == 'G') + goto yy533; + if (yych == 'g') + goto yy533; + goto yy523; + yy641: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy642: + yych = *++p; + if (yych != '2') + goto yy523; + yych = *++p; + if (yych != '7') + goto yy523; + yych = *++p; + if (yych == '0') + goto yy533; + goto yy523; + yy645: + yych = *++p; + if (yych <= 'M') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'N') + goto yy652; + if (yych == 'n') + goto yy652; + goto yy523; + } + yy646: + yych = *++p; + if (yych == 'M') + goto yy647; + if (yych != 'm') + goto yy523; + yy647: + yych = *++p; + if (yych == 'S') + goto yy648; + if (yych != 's') + goto yy523; + yy648: + yych = *++p; + if (yych == 'P') + goto yy649; + if (yych != 'p') + goto yy523; + yy649: + yych = *++p; + if (yych == 'E') + goto yy650; + if (yych != 'e') + goto yy523; + yy650: + yych = *++p; + if (yych == 'A') + goto yy651; + if (yych != 'a') + goto yy523; + yy651: + yych = *++p; + if (yych == 'K') + goto yy533; + if (yych == 'k') + goto yy533; + goto yy523; + yy652: + yych = *++p; + if (yych == 'E') + goto yy653; + if (yych != 'e') + goto yy523; + yy653: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy654: + yych = *++p; + if (yych <= 'S') { + if (yych == 'N') + goto yy655; + if (yych <= 'R') + goto yy523; + goto yy656; + } else { + if (yych <= 'n') { + if (yych <= 'm') + goto yy523; + } else { + if (yych == 's') + goto yy656; + goto yy523; + } + } + yy655: + yych = *++p; + if (yych == 'G') + goto yy663; + if (yych == 'g') + goto yy663; + goto yy523; + yy656: + yych = *++p; + if (yych == 'M') + goto yy657; + if (yych != 'm') + goto yy523; + yy657: + yych = *++p; + if (yych == 'E') + goto yy658; + if (yych != 'e') + goto yy523; + yy658: + yych = *++p; + if (yych == 'S') + goto yy659; + if (yych != 's') + goto yy523; + yy659: + yych = *++p; + if (yych == 'S') + goto yy660; + if (yych != 's') + goto yy523; + yy660: + yych = *++p; + if (yych == 'A') + goto yy661; + if (yych != 'a') + goto yy523; + yy661: + yych = *++p; + if (yych == 'G') + goto yy662; + if (yych != 'g') + goto yy523; + yy662: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy663: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy664: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy665: + yych = *++p; + if (yych == 'E') + goto yy715; + if (yych == 'e') + goto yy715; + goto yy523; + yy666: + yych = *++p; + if (yych == 'H') + goto yy533; + if (yych == 'h') + goto yy533; + goto yy523; + yy667: + yych = *++p; + if (yych == 'O') + goto yy711; + if (yych == 'o') + goto yy711; + goto yy523; + yy668: + yych = *++p; + if (yych <= 'L') { + if (yych == 'A') + goto yy701; + if (yych <= 'K') + goto yy523; + goto yy702; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy523; + goto yy701; + } else { + if (yych == 'l') + goto yy702; + goto yy523; + } + } + yy669: + yych = *++p; + if (yych <= 'S') { + if (yych == 'B') + goto yy533; + if (yych <= 'R') + goto yy523; + goto yy533; + } else { + if (yych <= 'b') { + if (yych <= 'a') + goto yy523; + goto yy533; + } else { + if (yych == 's') + goto yy533; + goto yy523; + } + } + yy670: + yych = *++p; + if (yych == 'Y') + goto yy699; + if (yych == 'y') + goto yy699; + goto yy523; + yy671: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy672: + yych = *++p; + if (yych == 'T') + goto yy698; + if (yych == 't') + goto yy698; + goto yy523; + yy673: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'C') { + if (yych <= 'B') + goto yy523; + goto yy685; + } else { + if (yych <= 'Q') + goto yy523; + if (yych <= 'R') + goto yy683; + goto yy684; + } + } else { + if (yych <= 'q') { + if (yych == 'c') + goto yy685; + goto yy523; + } else { + if (yych <= 'r') + goto yy683; + if (yych <= 's') + goto yy684; + goto yy523; + } + } + yy674: + yych = *++p; + if (yych == 'M') + goto yy682; + if (yych == 'm') + goto yy682; + goto yy523; + yy675: + yych = *++p; + if (yych <= 'P') { + if (yych == 'E') + goto yy679; + if (yych <= 'O') + goto yy523; + goto yy680; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy523; + goto yy679; + } else { + if (yych == 'p') + goto yy680; + goto yy523; + } + } + yy676: + yych = *++p; + if (yych == 'T') + goto yy677; + if (yych != 't') + goto yy523; + yy677: + yych = *++p; + if (yych == 'T') + goto yy678; + if (yych != 't') + goto yy523; + yy678: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy679: + yych = *++p; + if (yych == 'V') + goto yy681; + if (yych == 'v') + goto yy681; + goto yy523; + yy680: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy681: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy682: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy683: + yych = *++p; + if (yych == 'V') + goto yy695; + if (yych == 'v') + goto yy695; + goto yy523; + yy684: + yych = *++p; + if (yych == 'S') + goto yy692; + if (yych == 's') + goto yy692; + goto yy523; + yy685: + yych = *++p; + if (yych == 'O') + goto yy686; + if (yych != 'o') + goto yy523; + yy686: + yych = *++p; + if (yych == 'N') + goto yy687; + if (yych != 'n') + goto yy523; + yy687: + yych = *++p; + if (yych == 'D') + goto yy688; + if (yych != 'd') + goto yy523; + yy688: + yych = *++p; + if (yych == 'L') + goto yy689; + if (yych != 'l') + goto yy523; + yy689: + yych = *++p; + if (yych == 'I') + goto yy690; + if (yych != 'i') + goto yy523; + yy690: + yych = *++p; + if (yych == 'F') + goto yy691; + if (yych != 'f') + goto yy523; + yy691: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy692: + yych = *++p; + if (yych == 'I') + goto yy693; + if (yych != 'i') + goto yy523; + yy693: + yych = *++p; + if (yych == 'O') + goto yy694; + if (yych != 'o') + goto yy523; + yy694: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy695: + yych = *++p; + if (yych == 'I') + goto yy696; + if (yych != 'i') + goto yy523; + yy696: + yych = *++p; + if (yych == 'C') + goto yy697; + if (yych != 'c') + goto yy523; + yy697: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy698: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy699: + yych = *++p; + if (yych == 'P') + goto yy700; + if (yych != 'p') + goto yy523; + yy700: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy701: + yych = *++p; + if (yych == 'P') + goto yy705; + if (yych == 'p') + goto yy705; + goto yy523; + yy702: + yych = *++p; + if (yych == 'D') + goto yy703; + if (yych != 'd') + goto yy523; + yy703: + yych = *++p; + if (yych == 'A') + goto yy704; + if (yych != 'a') + goto yy523; + yy704: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy705: + yych = *++p; + if (yych != '.') + goto yy523; + yych = *++p; + if (yych == 'B') + goto yy707; + if (yych != 'b') + goto yy523; + yy707: + yych = *++p; + if (yych == 'E') + goto yy708; + if (yych != 'e') + goto yy523; + yy708: + yych = *++p; + if (yych == 'E') + goto yy709; + if (yych != 'e') + goto yy523; + yy709: + yych = *++p; + if (yych == 'P') + goto yy710; + if (yych != 'p') + goto yy523; + yy710: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy711: + yych = *++p; + if (yych == 'T') + goto yy712; + if (yych != 't') + goto yy523; + yy712: + yych = *++p; + if (yych == 'I') + goto yy713; + if (yych != 'i') + goto yy523; + yy713: + yych = *++p; + if (yych == 'F') + goto yy714; + if (yych != 'f') + goto yy523; + yy714: + yych = *++p; + if (yych == 'Y') + goto yy533; + if (yych == 'y') + goto yy533; + goto yy523; + yy715: + yych = *++p; + if (yych == 'A') + goto yy716; + if (yych != 'a') + goto yy523; + yy716: + yych = *++p; + if (yych == 'M') + goto yy533; + if (yych == 'm') + goto yy533; + goto yy523; + yy717: + yych = *++p; + if (yych <= 'S') { + if (yych == 'M') + goto yy729; + if (yych <= 'R') + goto yy523; + goto yy728; + } else { + if (yych <= 'm') { + if (yych <= 'l') + goto yy523; + goto yy729; + } else { + if (yych == 's') + goto yy728; + goto yy523; + } + } + yy718: + yych = *++p; + if (yych == 'Y') + goto yy726; + if (yych == 'y') + goto yy726; + goto yy523; + yy719: + yych = *++p; + if (yych == 'I') + goto yy533; + if (yych == 'i') + goto yy533; + goto yy523; + yy720: + yych = *++p; + if (yych == 'S') + goto yy721; + if (yych != 's') + goto yy523; + yy721: + yych = *++p; + if (yych <= 'N') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'O') + goto yy722; + if (yych != 'o') + goto yy523; + } + yy722: + yych = *++p; + if (yych == 'U') + goto yy723; + if (yych != 'u') + goto yy523; + yy723: + yych = *++p; + if (yych == 'R') + goto yy724; + if (yych != 'r') + goto yy523; + yy724: + yych = *++p; + if (yych == 'C') + goto yy725; + if (yych != 'c') + goto yy523; + yy725: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy726: + yych = *++p; + if (yych == 'N') + goto yy727; + if (yych != 'n') + goto yy523; + yy727: + yych = *++p; + if (yych == 'C') + goto yy533; + if (yych == 'c') + goto yy533; + goto yy523; + yy728: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy729: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy730: + yych = *++p; + if (yych == 'Y') + goto yy750; + if (yych == 'y') + goto yy750; + goto yy523; + yy731: + yych = *++p; + if (yych <= 'O') { + if (yych == 'E') + goto yy747; + if (yych <= 'N') + goto yy523; + goto yy748; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy523; + goto yy747; + } else { + if (yych == 'o') + goto yy748; + goto yy523; + } + } + yy732: + yych = *++p; + if (yych == 'A') + goto yy742; + if (yych == 'a') + goto yy742; + goto yy523; + yy733: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy735; + if (yych <= 'O') + goto yy523; + goto yy736; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy523; + goto yy735; + } else { + if (yych == 'p') + goto yy736; + goto yy523; + } + } + yy734: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy735: + yych = *++p; + if (yych == 'M') + goto yy533; + if (yych == 'm') + goto yy533; + goto yy523; + yy736: + yych = *++p; + if (yych == 'A') + goto yy737; + if (yych != 'a') + goto yy523; + yy737: + yych = *++p; + if (yych == 'R') + goto yy738; + if (yych != 'r') + goto yy523; + yy738: + yych = *++p; + if (yych == 'A') + goto yy739; + if (yych != 'a') + goto yy523; + yy739: + yych = *++p; + if (yych == 'Z') + goto yy740; + if (yych != 'z') + goto yy523; + yy740: + yych = *++p; + if (yych == 'Z') + goto yy741; + if (yych != 'z') + goto yy523; + yy741: + yych = *++p; + if (yych == 'I') + goto yy533; + if (yych == 'i') + goto yy533; + goto yy523; + yy742: + yych = *++p; + if (yych == 'T') + goto yy743; + if (yych != 't') + goto yy523; + yy743: + yych = *++p; + if (yych == 'F') + goto yy744; + if (yych != 'f') + goto yy523; + yy744: + yych = *++p; + if (yych == 'O') + goto yy745; + if (yych != 'o') + goto yy523; + yy745: + yych = *++p; + if (yych == 'R') + goto yy746; + if (yych != 'r') + goto yy523; + yy746: + yych = *++p; + if (yych == 'M') + goto yy533; + if (yych == 'm') + goto yy533; + goto yy523; + yy747: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy748: + yych = *++p; + if (yych == 'X') + goto yy749; + if (yych != 'x') + goto yy523; + yy749: + yych = *++p; + if (yych == 'Y') + goto yy533; + if (yych == 'y') + goto yy533; + goto yy523; + yy750: + yych = *++p; + if (yych == 'C') + goto yy533; + if (yych == 'c') + goto yy533; + goto yy523; + yy751: + yych = *++p; + if (yych == 'D') + goto yy533; + if (yych == 'd') + goto yy533; + goto yy523; + yy752: + yych = *++p; + if (yych == 'A') + goto yy753; + if (yych != 'a') + goto yy523; + yy753: + yych = *++p; + if (yych == 'Q') + goto yy754; + if (yych != 'q') + goto yy523; + yy754: + yych = *++p; + if (yych == 'U') + goto yy755; + if (yych != 'u') + goto yy523; + yy755: + yych = *++p; + if (yych == 'E') + goto yy756; + if (yych != 'e') + goto yy523; + yy756: + yych = *++p; + if (yych == 'L') + goto yy757; + if (yych != 'l') + goto yy523; + yy757: + yych = *++p; + if (yych == 'O') + goto yy758; + if (yych != 'o') + goto yy523; + yy758: + yych = *++p; + if (yych == 'C') + goto yy759; + if (yych != 'c') + goto yy523; + yy759: + yych = *++p; + if (yych == 'K') + goto yy760; + if (yych != 'k') + goto yy523; + yy760: + yych = *++p; + if (yych == 'T') + goto yy761; + if (yych != 't') + goto yy523; + yy761: + yych = *++p; + if (yych == 'O') + goto yy762; + if (yych != 'o') + goto yy523; + yy762: + yych = *++p; + if (yych == 'K') + goto yy763; + if (yych != 'k') + goto yy523; + yy763: + yych = *++p; + if (yych == 'E') + goto yy764; + if (yych != 'e') + goto yy523; + yy764: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy765: + yych = *++p; + if (yych == 'T') + goto yy772; + if (yych == 't') + goto yy772; + goto yy523; + yy766: + yych = *++p; + if (yych == 'T') + goto yy771; + if (yych == 't') + goto yy771; + goto yy523; + yy767: + yych = *++p; + if (yych <= 'G') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'H') + goto yy533; + if (yych == 'h') + goto yy533; + goto yy523; + } + yy768: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy769: + yych = *++p; + if (yych == 'W') + goto yy770; + if (yych != 'w') + goto yy523; + yy770: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy771: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy772: + yych = *++p; + if (yych == 'E') + goto yy773; + if (yych != 'e') + goto yy523; + yy773: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy774: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy775: + yych = *++p; + if (yych <= 'P') { + if (yych == 'M') + goto yy806; + if (yych <= 'O') + goto yy523; + goto yy805; + } else { + if (yych <= 'm') { + if (yych <= 'l') + goto yy523; + goto yy806; + } else { + if (yych == 'p') + goto yy805; + goto yy523; + } + } + yy776: + yych = *++p; + if (yych <= 'Q') { + if (yych <= '-') { + if (yych <= ',') + goto yy523; + goto yy798; + } else { + if (yych == 'N') + goto yy799; + goto yy523; + } + } else { + if (yych <= 'n') { + if (yych <= 'R') + goto yy797; + if (yych <= 'm') + goto yy523; + goto yy799; + } else { + if (yych == 'r') + goto yy797; + goto yy523; + } + } + yy777: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy778: + yych = *++p; + if (yych == 'S') + goto yy793; + if (yych == 's') + goto yy793; + goto yy523; + yy779: + yych = *++p; + switch (yych) { + case 'G': + case 'g': + goto yy784; + case 'I': + case 'i': + goto yy783; + case 'P': + case 'p': + goto yy785; + case 'R': + case 'r': + goto yy786; + default: + goto yy523; + } + yy780: + yych = *++p; + if (yych == 'Q') + goto yy782; + if (yych == 'q') + goto yy782; + goto yy523; + yy781: + yych = *++p; + if (yych == 'D') + goto yy533; + if (yych == 'd') + goto yy533; + goto yy523; + yy782: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy783: + yych = *++p; + if (yych == 'L') + goto yy791; + if (yych == 'l') + goto yy791; + goto yy523; + yy784: + yych = *++p; + if (yych == 'N') + goto yy789; + if (yych == 'n') + goto yy789; + goto yy523; + yy785: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy786: + yych = *++p; + if (yych == 'K') + goto yy787; + if (yych != 'k') + goto yy523; + yy787: + yych = *++p; + if (yych == 'E') + goto yy788; + if (yych != 'e') + goto yy523; + yy788: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy789: + yych = *++p; + if (yych == 'E') + goto yy790; + if (yych != 'e') + goto yy523; + yy790: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy791: + yych = *++p; + if (yych == 'T') + goto yy792; + if (yych != 't') + goto yy523; + yy792: + yych = *++p; + if (yych == 'O') + goto yy533; + if (yych == 'o') + goto yy533; + goto yy523; + yy793: + yych = *++p; + if (yych == 'S') + goto yy794; + if (yych != 's') + goto yy523; + yy794: + yych = *++p; + if (yych == 'A') + goto yy795; + if (yych != 'a') + goto yy523; + yy795: + yych = *++p; + if (yych == 'G') + goto yy796; + if (yych != 'g') + goto yy523; + yy796: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy797: + yych = *++p; + if (yych == 'P') + goto yy804; + if (yych == 'p') + goto yy804; + goto yy523; + yy798: + yych = *++p; + if (yych == 'H') + goto yy801; + if (yych == 'h') + goto yy801; + goto yy523; + yy799: + yych = *++p; + if (yych == 'I') + goto yy800; + if (yych != 'i') + goto yy523; + yy800: + yych = *++p; + if (yych == 'M') + goto yy533; + if (yych == 'm') + goto yy533; + goto yy523; + yy801: + yych = *++p; + if (yych == 'E') + goto yy802; + if (yych != 'e') + goto yy523; + yy802: + yych = *++p; + if (yych == 'L') + goto yy803; + if (yych != 'l') + goto yy523; + yy803: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy804: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy805: + yych = *++p; + if (yych == 'D') + goto yy809; + if (yych == 'd') + goto yy809; + goto yy523; + yy806: + yych = *++p; + if (yych == 'B') + goto yy807; + if (yych != 'b') + goto yy523; + yy807: + yych = *++p; + if (yych == 'L') + goto yy808; + if (yych != 'l') + goto yy523; + yy808: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy809: + yych = *++p; + if (yych == 'A') + goto yy810; + if (yych != 'a') + goto yy523; + yy810: + yych = *++p; + if (yych == 'T') + goto yy811; + if (yych != 't') + goto yy523; + yy811: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy812: + yych = *++p; + if (yych == 'A') + goto yy817; + if (yych == 'a') + goto yy817; + goto yy523; + yy813: + yych = *++p; + if (yych == 'S') + goto yy814; + if (yych != 's') + goto yy523; + yy814: + yych = *++p; + if (yych == 'T') + goto yy815; + if (yych != 't') + goto yy523; + yy815: + yych = *++p; + if (yych == 'F') + goto yy816; + if (yych != 'f') + goto yy523; + yy816: + yych = *++p; + if (yych == 'M') + goto yy533; + if (yych == 'm') + goto yy533; + goto yy523; + yy817: + yych = *++p; + if (yych == 'P') + goto yy818; + if (yych != 'p') + goto yy523; + yy818: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy819: + yych = *++p; + if (yych == 'M') + goto yy842; + if (yych == 'm') + goto yy842; + goto yy523; + yy820: + yych = *++p; + if (yych <= 'I') { + if (yych == 'C') + goto yy831; + if (yych <= 'H') + goto yy523; + goto yy830; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy523; + goto yy831; + } else { + if (yych == 'i') + goto yy830; + goto yy523; + } + } + yy821: + yych = *++p; + if (yych <= 'P') { + if (yych == 'N') + goto yy533; + if (yych <= 'O') + goto yy523; + goto yy533; + } else { + if (yych <= 'n') { + if (yych <= 'm') + goto yy523; + goto yy533; + } else { + if (yych == 'p') + goto yy533; + goto yy523; + } + } + yy822: + yych = *++p; + if (yych <= 'O') { + if (yych == 'A') + goto yy828; + if (yych <= 'N') + goto yy523; + goto yy829; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy523; + goto yy828; + } else { + if (yych == 'o') + goto yy829; + goto yy523; + } + } + yy823: + yych = *++p; + if (yych == 'F') + goto yy827; + if (yych == 'f') + goto yy827; + goto yy523; + yy824: + yych = *++p; + if (yych <= '@') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'A') + goto yy826; + if (yych == 'a') + goto yy826; + goto yy523; + } + yy825: + yych = *++p; + if (yych == 'X') + goto yy533; + if (yych == 'x') + goto yy533; + goto yy523; + yy826: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy827: + yych = *++p; + if (yych == 'O') + goto yy533; + if (yych == 'o') + goto yy533; + goto yy523; + yy828: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy829: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy830: + yych = *++p; + if (yych == 'S') + goto yy832; + if (yych == 's') + goto yy832; + goto yy523; + yy831: + yych = *++p; + if (yych <= ':') { + if (yych == '6') + goto yy533; + if (yych <= '9') + goto yy523; + goto yy534; + } else { + if (yych <= 'S') { + if (yych <= 'R') + goto yy523; + goto yy533; + } else { + if (yych == 's') + goto yy533; + goto yy523; + } + } + yy832: + yych = *++p; + if (yych == '.') + goto yy833; + if (yych == ':') + goto yy534; + goto yy523; + yy833: + yych = *++p; + if (yych <= 'X') { + if (yych <= 'K') { + if (yych == 'B') + goto yy836; + goto yy523; + } else { + if (yych <= 'L') + goto yy834; + if (yych <= 'W') + goto yy523; + goto yy835; + } + } else { + if (yych <= 'k') { + if (yych == 'b') + goto yy836; + goto yy523; + } else { + if (yych <= 'l') + goto yy834; + if (yych == 'x') + goto yy835; + goto yy523; + } + } + yy834: + yych = *++p; + if (yych == 'W') + goto yy841; + if (yych == 'w') + goto yy841; + goto yy523; + yy835: + yych = *++p; + if (yych == 'P') + goto yy839; + if (yych == 'p') + goto yy839; + goto yy523; + yy836: + yych = *++p; + if (yych == 'E') + goto yy837; + if (yych != 'e') + goto yy523; + yy837: + yych = *++p; + if (yych == 'E') + goto yy838; + if (yych != 'e') + goto yy523; + yy838: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy839: + yych = *++p; + if (yych == 'C') + goto yy840; + if (yych != 'c') + goto yy523; + yy840: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy841: + yych = *++p; + if (yych == 'Z') + goto yy533; + if (yych == 'z') + goto yy533; + goto yy523; + yy842: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy843: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy844: + yych = *++p; + if (yych == 'T') + goto yy847; + if (yych == 't') + goto yy847; + goto yy523; + yy845: + yych = *++p; + if (yych != '2') + goto yy523; + yych = *++p; + if (yych == '3') + goto yy533; + goto yy523; + yy847: + yych = *++p; + if (yych == 'P') + goto yy848; + if (yych != 'p') + goto yy523; + yy848: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy849: + yych = *++p; + if (yych == 'A') + goto yy865; + if (yych == 'a') + goto yy865; + goto yy523; + yy850: + yych = *++p; + if (yych <= 'Z') { + if (yych == 'T') + goto yy533; + if (yych <= 'Y') + goto yy523; + goto yy856; + } else { + if (yych <= 't') { + if (yych <= 's') + goto yy523; + goto yy533; + } else { + if (yych == 'z') + goto yy856; + goto yy523; + } + } + yy851: + yych = *++p; + if (yych <= 'O') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'P') + goto yy853; + if (yych == 'p') + goto yy853; + goto yy523; + } + yy852: + yych = *++p; + if (yych == 'O') + goto yy533; + if (yych == 'o') + goto yy533; + goto yy523; + yy853: + yych = *++p; + if (yych == 'H') + goto yy854; + if (yych != 'h') + goto yy523; + yy854: + yych = *++p; + if (yych == 'E') + goto yy855; + if (yych != 'e') + goto yy523; + yy855: + yych = *++p; + if (yych == 'R') + goto yy533; + if (yych == 'r') + goto yy533; + goto yy523; + yy856: + yych = *++p; + if (yych == 'M') + goto yy857; + if (yych != 'm') + goto yy523; + yy857: + yych = *++p; + if (yych == 'O') + goto yy858; + if (yych != 'o') + goto yy523; + yy858: + yych = *++p; + if (yych == 'P') + goto yy859; + if (yych != 'p') + goto yy523; + yy859: + yych = *++p; + if (yych == 'R') + goto yy860; + if (yych != 'r') + goto yy523; + yy860: + yych = *++p; + if (yych == 'O') + goto yy861; + if (yych != 'o') + goto yy523; + yy861: + yych = *++p; + if (yych == 'J') + goto yy862; + if (yych != 'j') + goto yy523; + yy862: + yych = *++p; + if (yych == 'E') + goto yy863; + if (yych != 'e') + goto yy523; + yy863: + yych = *++p; + if (yych == 'C') + goto yy864; + if (yych != 'c') + goto yy523; + yy864: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy865: + yych = *++p; + if (yych == 'L') + goto yy866; + if (yych != 'l') + goto yy523; + yy866: + yych = *++p; + if (yych == 'K') + goto yy533; + if (yych == 'k') + goto yy533; + goto yy523; + yy867: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'L') + goto yy877; + goto yy523; + } else { + if (yych <= 'N') + goto yy878; + if (yych <= 'R') + goto yy523; + goto yy879; + } + } else { + if (yych <= 'm') { + if (yych == 'l') + goto yy877; + goto yy523; + } else { + if (yych <= 'n') + goto yy878; + if (yych == 's') + goto yy879; + goto yy523; + } + } + yy868: + yych = *++p; + if (yych == 'E') + goto yy876; + if (yych == 'e') + goto yy876; + goto yy523; + yy869: + yych = *++p; + if (yych == 'C') + goto yy871; + if (yych == 'c') + goto yy871; + goto yy523; + yy870: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy871: + yych = *++p; + if (yych == 'E') + goto yy872; + if (yych != 'e') + goto yy523; + yy872: + yych = *++p; + if (yych == 'T') + goto yy873; + if (yych != 't') + goto yy523; + yy873: + yych = *++p; + if (yych == 'I') + goto yy874; + if (yych != 'i') + goto yy523; + yy874: + yych = *++p; + if (yych == 'M') + goto yy875; + if (yych != 'm') + goto yy523; + yy875: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy876: + yych = *++p; + if (yych == 'D') + goto yy533; + if (yych == 'd') + goto yy533; + goto yy523; + yy877: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy878: + yych = *++p; + if (yych == 'G') + goto yy880; + if (yych == 'g') + goto yy880; + goto yy523; + yy879: + yych = *++p; + if (yych == 'H') + goto yy533; + if (yych == 'h') + goto yy533; + goto yy523; + yy880: + yych = *++p; + if (yych == 'E') + goto yy881; + if (yych != 'e') + goto yy523; + yy881: + yych = *++p; + if (yych == 'R') + goto yy533; + if (yych == 'r') + goto yy533; + goto yy523; + yy882: + yych = *++p; + if (yych == 'T') + goto yy900; + if (yych == 't') + goto yy900; + goto yy523; + yy883: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy884: + yych = *++p; + if (yych == 'M') + goto yy533; + if (yych == 'm') + goto yy533; + goto yy523; + yy885: + yych = *++p; + if (yych <= 'S') { + if (yych == 'P') + goto yy533; + if (yych <= 'R') + goto yy523; + goto yy533; + } else { + if (yych <= 'p') { + if (yych <= 'o') + goto yy523; + goto yy533; + } else { + if (yych == 's') + goto yy533; + goto yy523; + } + } + yy886: + yych = *++p; + if (yych == 'I') + goto yy894; + if (yych == 'i') + goto yy894; + goto yy523; + yy887: + yych = *++p; + if (yych == 'A') + goto yy893; + if (yych == 'a') + goto yy893; + goto yy523; + yy888: + yych = *++p; + if (yych == 'O') + goto yy891; + if (yych == 'o') + goto yy891; + goto yy523; + yy889: + yych = *++p; + if (yych == 'A') + goto yy890; + if (yych != 'a') + goto yy523; + yy890: + yych = *++p; + if (yych <= 'R') { + if (yych == ':') + goto yy534; + goto yy523; + } else { + if (yych <= 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + } + yy891: + yych = *++p; + if (yych == 'U') + goto yy892; + if (yych != 'u') + goto yy523; + yy892: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy893: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy894: + yych = *++p; + if (yych == 'U') + goto yy895; + if (yych != 'u') + goto yy523; + yy895: + yych = *++p; + if (yych == 'M') + goto yy896; + if (yych != 'm') + goto yy523; + yy896: + yych = *++p; + if (yych == 'X') + goto yy897; + if (yych != 'x') + goto yy523; + yy897: + yych = *++p; + if (yych == 'T') + goto yy898; + if (yych != 't') + goto yy523; + yy898: + yych = *++p; + if (yych == 'R') + goto yy899; + if (yych != 'r') + goto yy523; + yy899: + yych = *++p; + if (yych == 'A') + goto yy533; + if (yych == 'a') + goto yy533; + goto yy523; + yy900: + yych = *++p; + if (yych == 'A') + goto yy901; + if (yych != 'a') + goto yy523; + yy901: + yych = *++p; + if (yych == 'C') + goto yy902; + if (yych != 'c') + goto yy523; + yy902: + yych = *++p; + if (yych == 'H') + goto yy903; + if (yych != 'h') + goto yy523; + yy903: + yych = *++p; + if (yych == 'M') + goto yy904; + if (yych != 'm') + goto yy523; + yy904: + yych = *++p; + if (yych == 'E') + goto yy905; + if (yych != 'e') + goto yy523; + yy905: + yych = *++p; + if (yych == 'N') + goto yy906; + if (yych != 'n') + goto yy523; + yy906: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy907: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy908: + yych = *++p; + if (yych <= 'V') { + if (yych == 'R') + goto yy533; + if (yych <= 'U') + goto yy523; + } else { + if (yych <= 'r') { + if (yych <= 'q') + goto yy523; + goto yy533; + } else { + if (yych != 'v') + goto yy523; + } + } + yych = *++p; + if (yych == 'A') + goto yy910; + if (yych != 'a') + goto yy523; + yy910: + yych = *++p; + if (yych == 'S') + goto yy911; + if (yych != 's') + goto yy523; + yy911: + yych = *++p; + if (yych == 'C') + goto yy912; + if (yych != 'c') + goto yy523; + yy912: + yych = *++p; + if (yych == 'R') + goto yy913; + if (yych != 'r') + goto yy523; + yy913: + yych = *++p; + if (yych == 'I') + goto yy914; + if (yych != 'i') + goto yy523; + yy914: + yych = *++p; + if (yych == 'P') + goto yy915; + if (yych != 'p') + goto yy523; + yy915: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy916: + yych = *++p; + if (yych == 'B') + goto yy533; + if (yych == 'b') + goto yy533; + goto yy523; + yy917: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy918: + yych = *++p; + if (yych == 'N') + goto yy925; + if (yych == 'n') + goto yy925; + goto yy523; + yy919: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy920: + yych = *++p; + if (yych == 'C') + goto yy924; + if (yych == 'c') + goto yy924; + goto yy523; + yy921: + yych = *++p; + if (yych <= 'V') { + if (yych == 'T') + goto yy923; + if (yych <= 'U') + goto yy523; + goto yy533; + } else { + if (yych <= 't') { + if (yych <= 's') + goto yy523; + goto yy923; + } else { + if (yych == 'v') + goto yy533; + goto yy523; + } + } + yy922: + yych = *++p; + if (yych == 'I') + goto yy533; + if (yych == 'i') + goto yy533; + goto yy523; + yy923: + yych = *++p; + if (yych == 'A') + goto yy533; + if (yych == 'a') + goto yy533; + goto yy523; + yy924: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy925: + yych = *++p; + if (yych == 'A') + goto yy926; + if (yych != 'a') + goto yy523; + yy926: + yych = *++p; + if (yych != '-') + goto yy523; + yych = *++p; + if (yych == 'P') + goto yy928; + if (yych != 'p') + goto yy523; + yy928: + yych = *++p; + if (yych == 'L') + goto yy929; + if (yych != 'l') + goto yy523; + yy929: + yych = *++p; + if (yych == 'A') + goto yy930; + if (yych != 'a') + goto yy523; + yy930: + yych = *++p; + if (yych == 'Y') + goto yy931; + if (yych != 'y') + goto yy523; + yy931: + yych = *++p; + if (yych <= 'S') { + if (yych == 'C') + goto yy932; + if (yych <= 'R') + goto yy523; + goto yy933; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy523; + } else { + if (yych == 's') + goto yy933; + goto yy523; + } + } + yy932: + yych = *++p; + if (yych == 'O') + goto yy938; + if (yych == 'o') + goto yy938; + goto yy523; + yy933: + yych = *++p; + if (yych == 'I') + goto yy934; + if (yych != 'i') + goto yy523; + yy934: + yych = *++p; + if (yych == 'N') + goto yy935; + if (yych != 'n') + goto yy523; + yy935: + yych = *++p; + if (yych == 'G') + goto yy936; + if (yych != 'g') + goto yy523; + yy936: + yych = *++p; + if (yych == 'L') + goto yy937; + if (yych != 'l') + goto yy523; + yy937: + yych = *++p; + if (yych == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + yy938: + yych = *++p; + if (yych == 'N') + goto yy939; + if (yych != 'n') + goto yy523; + yy939: + yych = *++p; + if (yych == 'T') + goto yy940; + if (yych != 't') + goto yy523; + yy940: + yych = *++p; + if (yych == 'A') + goto yy941; + if (yych != 'a') + goto yy523; + yy941: + yych = *++p; + if (yych == 'I') + goto yy942; + if (yych != 'i') + goto yy523; + yy942: + yych = *++p; + if (yych == 'N') + goto yy943; + if (yych != 'n') + goto yy523; + yy943: + yych = *++p; + if (yych == 'E') + goto yy944; + if (yych != 'e') + goto yy523; + yy944: + yych = *++p; + if (yych == 'R') + goto yy533; + if (yych == 'r') + goto yy533; + goto yy523; + yy945: + yych = *++p; + if (yych == 'S') + goto yy533; + if (yych == 's') + goto yy533; + goto yy523; + yy946: + yych = *++p; + if (yych <= 'N') { + if (yych <= 'A') { + if (yych <= '@') + goto yy523; + goto yy968; + } else { + if (yych <= 'L') + goto yy523; + if (yych <= 'M') + goto yy969; + goto yy970; + } + } else { + if (yych <= 'l') { + if (yych == 'a') + goto yy968; + goto yy523; + } else { + if (yych <= 'm') + goto yy969; + if (yych <= 'n') + goto yy970; + goto yy523; + } + } + yy947: + yych = *++p; + if (yych == 'R') + goto yy955; + if (yych == 'r') + goto yy955; + goto yy523; + yy948: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy952; + if (yych <= 'O') + goto yy523; + goto yy533; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy523; + goto yy952; + } else { + if (yych == 'p') + goto yy533; + goto yy523; + } + } + yy949: + yych = *++p; + if (yych == 'I') + goto yy951; + if (yych == 'i') + goto yy951; + goto yy523; + yy950: + yych = *++p; + if (yych == 'D') + goto yy533; + if (yych == 'd') + goto yy533; + goto yy523; + yy951: + yych = *++p; + if (yych == 'D') + goto yy533; + if (yych == 'd') + goto yy533; + goto yy523; + yy952: + yych = *++p; + if (yych == 'L') + goto yy953; + if (yych != 'l') + goto yy523; + yy953: + yych = *++p; + if (yych == 'T') + goto yy954; + if (yych != 't') + goto yy523; + yy954: + yych = *++p; + if (yych == 'O') + goto yy533; + if (yych == 'o') + goto yy533; + goto yy523; + yy955: + yych = *++p; + if (yych == 'O') + goto yy956; + if (yych != 'o') + goto yy523; + yy956: + yych = *++p; + if (yych == 'M') + goto yy957; + if (yych != 'm') + goto yy523; + yy957: + yych = *++p; + if (yych == 'E') + goto yy958; + if (yych != 'e') + goto yy523; + yy958: + yych = *++p; + if (yych == '-') + goto yy959; + if (yych == ':') + goto yy534; + goto yy523; + yy959: + yych = *++p; + if (yych == 'E') + goto yy960; + if (yych != 'e') + goto yy523; + yy960: + yych = *++p; + if (yych == 'X') + goto yy961; + if (yych != 'x') + goto yy523; + yy961: + yych = *++p; + if (yych == 'T') + goto yy962; + if (yych != 't') + goto yy523; + yy962: + yych = *++p; + if (yych == 'E') + goto yy963; + if (yych != 'e') + goto yy523; + yy963: + yych = *++p; + if (yych == 'N') + goto yy964; + if (yych != 'n') + goto yy523; + yy964: + yych = *++p; + if (yych == 'S') + goto yy965; + if (yych != 's') + goto yy523; + yy965: + yych = *++p; + if (yych == 'I') + goto yy966; + if (yych != 'i') + goto yy523; + yy966: + yych = *++p; + if (yych == 'O') + goto yy967; + if (yych != 'o') + goto yy523; + yy967: + yych = *++p; + if (yych == 'N') + goto yy533; + if (yych == 'n') + goto yy533; + goto yy523; + yy968: + yych = *++p; + if (yych == 'P') + goto yy533; + if (yych == 'p') + goto yy533; + goto yy523; + yy969: + yych = *++p; + if (yych == '-') + goto yy974; + goto yy523; + yy970: + yych = *++p; + if (yych == 'T') + goto yy971; + if (yych != 't') + goto yy523; + yy971: + yych = *++p; + if (yych == 'E') + goto yy972; + if (yych != 'e') + goto yy523; + yy972: + yych = *++p; + if (yych == 'N') + goto yy973; + if (yych != 'n') + goto yy523; + yy973: + yych = *++p; + if (yych == 'T') + goto yy533; + if (yych == 't') + goto yy533; + goto yy523; + yy974: + yych = *++p; + if (yych == 'E') + goto yy975; + if (yych != 'e') + goto yy523; + yy975: + yych = *++p; + if (yych == 'V') + goto yy976; + if (yych != 'v') + goto yy523; + yy976: + yych = *++p; + if (yych == 'E') + goto yy977; + if (yych != 'e') + goto yy523; + yy977: + yych = *++p; + if (yych == 'N') + goto yy978; + if (yych != 'n') + goto yy523; + yy978: + yych = *++p; + if (yych == 'T') + goto yy979; + if (yych != 't') + goto yy523; + yy979: + yych = *++p; + if (yych == 'B') + goto yy980; + if (yych != 'b') + goto yy523; + yy980: + yych = *++p; + if (yych == 'R') + goto yy981; + if (yych != 'r') + goto yy523; + yy981: + yych = *++p; + if (yych == 'I') + goto yy982; + if (yych != 'i') + goto yy523; + yy982: + yych = *++p; + if (yych == 'T') + goto yy983; + if (yych != 't') + goto yy523; + yy983: + yych = *++p; + if (yych == 'E') + goto yy984; + if (yych != 'e') + goto yy523; + yy984: + yych = *++p; + if (yych != '-') + goto yy523; + yych = *++p; + if (yych == 'A') + goto yy986; + if (yych != 'a') + goto yy523; + yy986: + yych = *++p; + if (yych == 'T') + goto yy987; + if (yych != 't') + goto yy523; + yy987: + yych = *++p; + if (yych == 'T') + goto yy988; + if (yych != 't') + goto yy523; + yy988: + yych = *++p; + if (yych == 'E') + goto yy989; + if (yych != 'e') + goto yy523; + yy989: + yych = *++p; + if (yych == 'N') + goto yy990; + if (yych != 'n') + goto yy523; + yy990: + yych = *++p; + if (yych == 'D') + goto yy991; + if (yych != 'd') + goto yy523; + yy991: + yych = *++p; + if (yych == 'E') + goto yy992; + if (yych != 'e') + goto yy523; + yy992: + ++p; + if ((yych = *p) == 'E') + goto yy533; + if (yych == 'e') + goto yy533; + goto yy523; + } } // Try to match email autolink after first <, returning num of chars matched. -bufsize_t _scan_autolink_email(const unsigned char *p) -{ +bufsize_t _scan_autolink_email(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = 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, - 0, 128, 0, 128, 128, 128, 128, 128, - 0, 0, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 128, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= '?') { - if (yych <= ')') { - if (yych <= ' ') { - if (yych != '\n') goto yy997; - } else { - if (yych == '"') goto yy997; - if (yych <= '\'') goto yy996; - goto yy997; - } - } else { - if (yych <= '9') { - if (yych == ',') goto yy997; - goto yy996; - } else { - if (yych == '=') goto yy996; - if (yych <= '>') goto yy997; - goto yy996; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= ']') { - if (yych <= '@') goto yy997; - if (yych <= 'Z') goto yy996; - goto yy997; - } else { - if (yych <= '~') goto yy996; - if (yych <= 0x7F) goto yy997; - if (yych >= 0xC2) goto yy998; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1000; - if (yych == 0xED) goto yy1005; - goto yy1001; - } else { - if (yych <= 0xF0) goto yy1002; - if (yych <= 0xF3) goto yy1003; - if (yych <= 0xF4) goto yy1004; - } - } - } -yy995: - { return 0; } -yy996: - yych = *(marker = ++p); - if (yych <= ',') { - if (yych <= '"') { - if (yych == '!') goto yy1008; - goto yy995; - } else { - if (yych <= '\'') goto yy1008; - if (yych <= ')') goto yy995; - if (yych <= '+') goto yy1008; - goto yy995; - } - } else { - if (yych <= '>') { - if (yych <= '9') goto yy1008; - if (yych == '=') goto yy1008; - goto yy995; - } else { - if (yych <= 'Z') goto yy1008; - if (yych <= ']') goto yy995; - if (yych <= '~') goto yy1008; - goto yy995; - } - } -yy997: - yych = *++p; - goto yy995; -yy998: - yych = *++p; - if (yych <= 0x7F) goto yy999; - if (yych <= 0xBF) goto yy997; -yy999: - p = marker; - goto yy995; -yy1000: - yych = *++p; - if (yych <= 0x9F) goto yy999; - if (yych <= 0xBF) goto yy998; - goto yy999; -yy1001: - yych = *++p; - if (yych <= 0x7F) goto yy999; - if (yych <= 0xBF) goto yy998; - goto yy999; -yy1002: - yych = *++p; - if (yych <= 0x8F) goto yy999; - if (yych <= 0xBF) goto yy1001; - goto yy999; -yy1003: - yych = *++p; - if (yych <= 0x7F) goto yy999; - if (yych <= 0xBF) goto yy1001; - goto yy999; -yy1004: - yych = *++p; - if (yych <= 0x7F) goto yy999; - if (yych <= 0x8F) goto yy1001; - goto yy999; -yy1005: - yych = *++p; - if (yych <= 0x7F) goto yy999; - if (yych <= 0x9F) goto yy998; - goto yy999; -yy1006: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1009; - goto yy999; - } else { - if (yych <= 'Z') goto yy1009; - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1009; - goto yy999; - } -yy1007: - ++p; - yych = *p; -yy1008: - if (yybm[0+yych] & 128) { - goto yy1007; - } - if (yych <= '>') goto yy999; - if (yych <= '@') goto yy1006; - goto yy999; -yy1009: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1011; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1011; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1011; - goto yy999; - } - } - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1139; - if (yych <= '/') goto yy999; - goto yy1140; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1140; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1140; - goto yy999; - } - } -yy1011: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych <= '-') goto yy1139; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1140; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1140; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1140; - goto yy999; - } - } -yy1012: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1015; - goto yy999; - } else { - if (yych <= 'Z') goto yy1015; - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1015; - goto yy999; - } -yy1013: - ++p; - { return (bufsize_t)(p - start); } -yy1015: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1017; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1017; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1017; - goto yy999; - } - } - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1018; - if (yych <= '/') goto yy999; - goto yy1019; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1019; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1019; - goto yy999; - } - } -yy1017: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1019; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1019; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1019; - goto yy999; - } - } -yy1018: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1020; - if (yych <= '/') goto yy999; - goto yy1021; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1021; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1021; - goto yy999; - } - } -yy1019: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1021; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1021; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1021; - goto yy999; - } - } -yy1020: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1022; - if (yych <= '/') goto yy999; - goto yy1023; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1023; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1023; - goto yy999; - } - } -yy1021: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1023; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1023; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1023; - goto yy999; - } - } -yy1022: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1024; - if (yych <= '/') goto yy999; - goto yy1025; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1025; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1025; - goto yy999; - } - } -yy1023: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1025; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1025; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1025; - goto yy999; - } - } -yy1024: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1026; - if (yych <= '/') goto yy999; - goto yy1027; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1027; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1027; - goto yy999; - } - } -yy1025: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1027; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1027; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1027; - goto yy999; - } - } -yy1026: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1028; - if (yych <= '/') goto yy999; - goto yy1029; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1029; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1029; - goto yy999; - } - } -yy1027: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1029; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1029; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1029; - goto yy999; - } - } -yy1028: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1030; - if (yych <= '/') goto yy999; - goto yy1031; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1031; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1031; - goto yy999; - } - } -yy1029: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1031; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1031; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1031; - goto yy999; - } - } -yy1030: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1032; - if (yych <= '/') goto yy999; - goto yy1033; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1033; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1033; - goto yy999; - } - } -yy1031: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1033; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1033; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1033; - goto yy999; - } - } -yy1032: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1034; - if (yych <= '/') goto yy999; - goto yy1035; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1035; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1035; - goto yy999; - } - } -yy1033: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1035; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1035; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1035; - goto yy999; - } - } -yy1034: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1036; - if (yych <= '/') goto yy999; - goto yy1037; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1037; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1037; - goto yy999; - } - } -yy1035: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1037; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1037; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1037; - goto yy999; - } - } -yy1036: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1038; - if (yych <= '/') goto yy999; - goto yy1039; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1039; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1039; - goto yy999; - } - } -yy1037: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1039; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1039; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1039; - goto yy999; - } - } -yy1038: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1040; - if (yych <= '/') goto yy999; - goto yy1041; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1041; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1041; - goto yy999; - } - } -yy1039: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1041; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1041; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1041; - goto yy999; - } - } -yy1040: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1042; - if (yych <= '/') goto yy999; - goto yy1043; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1043; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1043; - goto yy999; - } - } -yy1041: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1043; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1043; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1043; - goto yy999; - } - } -yy1042: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1044; - if (yych <= '/') goto yy999; - goto yy1045; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1045; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1045; - goto yy999; - } - } -yy1043: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1045; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1045; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1045; - goto yy999; - } - } -yy1044: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1046; - if (yych <= '/') goto yy999; - goto yy1047; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1047; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1047; - goto yy999; - } - } -yy1045: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1047; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1047; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1047; - goto yy999; - } - } -yy1046: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1048; - if (yych <= '/') goto yy999; - goto yy1049; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1049; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1049; - goto yy999; - } - } -yy1047: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1049; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1049; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1049; - goto yy999; - } - } -yy1048: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1050; - if (yych <= '/') goto yy999; - goto yy1051; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1051; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1051; - goto yy999; - } - } -yy1049: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1051; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1051; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1051; - goto yy999; - } - } -yy1050: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1052; - if (yych <= '/') goto yy999; - goto yy1053; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1053; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1053; - goto yy999; - } - } -yy1051: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1053; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1053; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1053; - goto yy999; - } - } -yy1052: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1054; - if (yych <= '/') goto yy999; - goto yy1055; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1055; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1055; - goto yy999; - } - } -yy1053: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1055; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1055; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1055; - goto yy999; - } - } -yy1054: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1056; - if (yych <= '/') goto yy999; - goto yy1057; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1057; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1057; - goto yy999; - } - } -yy1055: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1057; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1057; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1057; - goto yy999; - } - } -yy1056: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1058; - if (yych <= '/') goto yy999; - goto yy1059; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1059; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1059; - goto yy999; - } - } -yy1057: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1059; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1059; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1059; - goto yy999; - } - } -yy1058: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1060; - if (yych <= '/') goto yy999; - goto yy1061; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1061; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1061; - goto yy999; - } - } -yy1059: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1061; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1061; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1061; - goto yy999; - } - } -yy1060: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1062; - if (yych <= '/') goto yy999; - goto yy1063; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1063; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1063; - goto yy999; - } - } -yy1061: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1063; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1063; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1063; - goto yy999; - } - } -yy1062: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1064; - if (yych <= '/') goto yy999; - goto yy1065; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1065; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1065; - goto yy999; - } - } -yy1063: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1065; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1065; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1065; - goto yy999; - } - } -yy1064: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1066; - if (yych <= '/') goto yy999; - goto yy1067; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1067; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1067; - goto yy999; - } - } -yy1065: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1067; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1067; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1067; - goto yy999; - } - } -yy1066: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1068; - if (yych <= '/') goto yy999; - goto yy1069; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1069; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1069; - goto yy999; - } - } -yy1067: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1069; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1069; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1069; - goto yy999; - } - } -yy1068: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1070; - if (yych <= '/') goto yy999; - goto yy1071; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1071; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1071; - goto yy999; - } - } -yy1069: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1071; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1071; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1071; - goto yy999; - } - } -yy1070: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1072; - if (yych <= '/') goto yy999; - goto yy1073; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1073; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1073; - goto yy999; - } - } -yy1071: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1073; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1073; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1073; - goto yy999; - } - } -yy1072: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1074; - if (yych <= '/') goto yy999; - goto yy1075; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1075; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1075; - goto yy999; - } - } -yy1073: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1075; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1075; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1075; - goto yy999; - } - } -yy1074: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1076; - if (yych <= '/') goto yy999; - goto yy1077; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1077; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1077; - goto yy999; - } - } -yy1075: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1077; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1077; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1077; - goto yy999; - } - } -yy1076: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1078; - if (yych <= '/') goto yy999; - goto yy1079; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1079; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1079; - goto yy999; - } - } -yy1077: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1079; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1079; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1079; - goto yy999; - } - } -yy1078: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1080; - if (yych <= '/') goto yy999; - goto yy1081; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1081; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1081; - goto yy999; - } - } -yy1079: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1081; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1081; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1081; - goto yy999; - } - } -yy1080: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1082; - if (yych <= '/') goto yy999; - goto yy1083; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1083; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1083; - goto yy999; - } - } -yy1081: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1083; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1083; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1083; - goto yy999; - } - } -yy1082: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1084; - if (yych <= '/') goto yy999; - goto yy1085; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1085; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1085; - goto yy999; - } - } -yy1083: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1085; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1085; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1085; - goto yy999; - } - } -yy1084: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1086; - if (yych <= '/') goto yy999; - goto yy1087; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1087; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1087; - goto yy999; - } - } -yy1085: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1087; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1087; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1087; - goto yy999; - } - } -yy1086: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1088; - if (yych <= '/') goto yy999; - goto yy1089; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1089; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1089; - goto yy999; - } - } -yy1087: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1089; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1089; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1089; - goto yy999; - } - } -yy1088: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1090; - if (yych <= '/') goto yy999; - goto yy1091; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1091; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1091; - goto yy999; - } - } -yy1089: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1091; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1091; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1091; - goto yy999; - } - } -yy1090: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1092; - if (yych <= '/') goto yy999; - goto yy1093; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1093; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1093; - goto yy999; - } - } -yy1091: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1093; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1093; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1093; - goto yy999; - } - } -yy1092: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1094; - if (yych <= '/') goto yy999; - goto yy1095; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1095; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1095; - goto yy999; - } - } -yy1093: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1095; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1095; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1095; - goto yy999; - } - } -yy1094: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1096; - if (yych <= '/') goto yy999; - goto yy1097; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1097; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1097; - goto yy999; - } - } -yy1095: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1097; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1097; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1097; - goto yy999; - } - } -yy1096: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1098; - if (yych <= '/') goto yy999; - goto yy1099; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1099; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1099; - goto yy999; - } - } -yy1097: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1099; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1099; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1099; - goto yy999; - } - } -yy1098: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1100; - if (yych <= '/') goto yy999; - goto yy1101; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1101; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1101; - goto yy999; - } - } -yy1099: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1101; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1101; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1101; - goto yy999; - } - } -yy1100: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1102; - if (yych <= '/') goto yy999; - goto yy1103; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1103; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1103; - goto yy999; - } - } -yy1101: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1103; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1103; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1103; - goto yy999; - } - } -yy1102: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1104; - if (yych <= '/') goto yy999; - goto yy1105; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1105; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1105; - goto yy999; - } - } -yy1103: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1105; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1105; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1105; - goto yy999; - } - } -yy1104: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1106; - if (yych <= '/') goto yy999; - goto yy1107; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1107; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1107; - goto yy999; - } - } -yy1105: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1107; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1107; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1107; - goto yy999; - } - } -yy1106: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1108; - if (yych <= '/') goto yy999; - goto yy1109; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1109; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1109; - goto yy999; - } - } -yy1107: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1109; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1109; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1109; - goto yy999; - } - } -yy1108: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1110; - if (yych <= '/') goto yy999; - goto yy1111; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1111; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1111; - goto yy999; - } - } -yy1109: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1111; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1111; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1111; - goto yy999; - } - } -yy1110: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1112; - if (yych <= '/') goto yy999; - goto yy1113; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1113; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1113; - goto yy999; - } - } -yy1111: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1113; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1113; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1113; - goto yy999; - } - } -yy1112: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1114; - if (yych <= '/') goto yy999; - goto yy1115; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1115; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1115; - goto yy999; - } - } -yy1113: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1115; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1115; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1115; - goto yy999; - } - } -yy1114: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1116; - if (yych <= '/') goto yy999; - goto yy1117; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1117; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1117; - goto yy999; - } - } -yy1115: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1117; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1117; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1117; - goto yy999; - } - } -yy1116: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1118; - if (yych <= '/') goto yy999; - goto yy1119; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1119; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1119; - goto yy999; - } - } -yy1117: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1119; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1119; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1119; - goto yy999; - } - } -yy1118: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1120; - if (yych <= '/') goto yy999; - goto yy1121; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1121; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1121; - goto yy999; - } - } -yy1119: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1121; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1121; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1121; - goto yy999; - } - } -yy1120: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1122; - if (yych <= '/') goto yy999; - goto yy1123; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1123; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1123; - goto yy999; - } - } -yy1121: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1123; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1123; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1123; - goto yy999; - } - } -yy1122: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1124; - if (yych <= '/') goto yy999; - goto yy1125; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1125; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1125; - goto yy999; - } - } -yy1123: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1125; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1125; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1125; - goto yy999; - } - } -yy1124: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1126; - if (yych <= '/') goto yy999; - goto yy1127; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1127; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1127; - goto yy999; - } - } -yy1125: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1127; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1127; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1127; - goto yy999; - } - } -yy1126: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1128; - if (yych <= '/') goto yy999; - goto yy1129; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1129; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1129; - goto yy999; - } - } -yy1127: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1129; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1129; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1129; - goto yy999; - } - } -yy1128: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1130; - if (yych <= '/') goto yy999; - goto yy1131; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1131; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1131; - goto yy999; - } - } -yy1129: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1131; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1131; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1131; - goto yy999; - } - } -yy1130: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1132; - if (yych <= '/') goto yy999; - goto yy1133; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1133; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1133; - goto yy999; - } - } -yy1131: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1133; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1133; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1133; - goto yy999; - } - } -yy1132: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1134; - if (yych <= '/') goto yy999; - goto yy1135; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1135; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1135; - goto yy999; - } - } -yy1133: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1135; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1135; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1135; - goto yy999; - } - } -yy1134: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') goto yy1136; - if (yych <= '/') goto yy999; - goto yy1137; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1137; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1137; - goto yy999; - } - } -yy1135: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1137; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1137; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1137; - goto yy999; - } - } -yy1136: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1138; - goto yy999; - } else { - if (yych <= 'Z') goto yy1138; - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1138; - goto yy999; - } -yy1137: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= '-') goto yy999; - goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych >= ':') goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - } else { - if (yych <= '`') goto yy999; - if (yych >= '{') goto yy999; - } - } -yy1138: - ++p; - yych = *p; - if (yych == '.') goto yy1012; - if (yych == '>') goto yy1013; - goto yy999; -yy1139: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1141; - if (yych <= '/') goto yy999; - goto yy1142; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1142; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1142; - goto yy999; - } - } -yy1140: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1142; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1142; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1142; - goto yy999; - } - } -yy1141: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1143; - if (yych <= '/') goto yy999; - goto yy1144; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1144; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1144; - goto yy999; - } - } -yy1142: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1144; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1144; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1144; - goto yy999; - } - } -yy1143: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1145; - if (yych <= '/') goto yy999; - goto yy1146; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1146; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1146; - goto yy999; - } - } -yy1144: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1146; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1146; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1146; - goto yy999; - } - } -yy1145: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1147; - if (yych <= '/') goto yy999; - goto yy1148; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1148; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1148; - goto yy999; - } - } -yy1146: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1148; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1148; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1148; - goto yy999; - } - } -yy1147: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1149; - if (yych <= '/') goto yy999; - goto yy1150; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1150; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1150; - goto yy999; - } - } -yy1148: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1150; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1150; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1150; - goto yy999; - } - } -yy1149: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1151; - if (yych <= '/') goto yy999; - goto yy1152; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1152; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1152; - goto yy999; - } - } -yy1150: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1152; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1152; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1152; - goto yy999; - } - } -yy1151: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1153; - if (yych <= '/') goto yy999; - goto yy1154; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1154; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1154; - goto yy999; - } - } -yy1152: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1154; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1154; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1154; - goto yy999; - } - } -yy1153: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1155; - if (yych <= '/') goto yy999; - goto yy1156; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1156; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1156; - goto yy999; - } - } -yy1154: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1156; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1156; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1156; - goto yy999; - } - } -yy1155: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1157; - if (yych <= '/') goto yy999; - goto yy1158; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1158; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1158; - goto yy999; - } - } -yy1156: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1158; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1158; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1158; - goto yy999; - } - } -yy1157: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1159; - if (yych <= '/') goto yy999; - goto yy1160; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1160; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1160; - goto yy999; - } - } -yy1158: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1160; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1160; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1160; - goto yy999; - } - } -yy1159: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1161; - if (yych <= '/') goto yy999; - goto yy1162; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1162; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1162; - goto yy999; - } - } -yy1160: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1162; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1162; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1162; - goto yy999; - } - } -yy1161: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1163; - if (yych <= '/') goto yy999; - goto yy1164; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1164; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1164; - goto yy999; - } - } -yy1162: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1164; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1164; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1164; - goto yy999; - } - } -yy1163: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1165; - if (yych <= '/') goto yy999; - goto yy1166; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1166; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1166; - goto yy999; - } - } -yy1164: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1166; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1166; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1166; - goto yy999; - } - } -yy1165: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1167; - if (yych <= '/') goto yy999; - goto yy1168; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1168; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1168; - goto yy999; - } - } -yy1166: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1168; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1168; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1168; - goto yy999; - } - } -yy1167: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1169; - if (yych <= '/') goto yy999; - goto yy1170; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1170; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1170; - goto yy999; - } - } -yy1168: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1170; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1170; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1170; - goto yy999; - } - } -yy1169: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1171; - if (yych <= '/') goto yy999; - goto yy1172; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1172; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1172; - goto yy999; - } - } -yy1170: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1172; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1172; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1172; - goto yy999; - } - } -yy1171: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1173; - if (yych <= '/') goto yy999; - goto yy1174; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1174; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1174; - goto yy999; - } - } -yy1172: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1174; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1174; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1174; - goto yy999; - } - } -yy1173: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1175; - if (yych <= '/') goto yy999; - goto yy1176; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1176; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1176; - goto yy999; - } - } -yy1174: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1176; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1176; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1176; - goto yy999; - } - } -yy1175: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1177; - if (yych <= '/') goto yy999; - goto yy1178; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1178; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1178; - goto yy999; - } - } -yy1176: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1178; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1178; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1178; - goto yy999; - } - } -yy1177: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1179; - if (yych <= '/') goto yy999; - goto yy1180; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1180; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1180; - goto yy999; - } - } -yy1178: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1180; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1180; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1180; - goto yy999; - } - } -yy1179: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1181; - if (yych <= '/') goto yy999; - goto yy1182; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1182; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1182; - goto yy999; - } - } -yy1180: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1182; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1182; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1182; - goto yy999; - } - } -yy1181: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1183; - if (yych <= '/') goto yy999; - goto yy1184; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1184; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1184; - goto yy999; - } - } -yy1182: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1184; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1184; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1184; - goto yy999; - } - } -yy1183: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1185; - if (yych <= '/') goto yy999; - goto yy1186; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1186; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1186; - goto yy999; - } - } -yy1184: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1186; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1186; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1186; - goto yy999; - } - } -yy1185: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1187; - if (yych <= '/') goto yy999; - goto yy1188; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1188; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1188; - goto yy999; - } - } -yy1186: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1188; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1188; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1188; - goto yy999; - } - } -yy1187: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1189; - if (yych <= '/') goto yy999; - goto yy1190; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1190; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1190; - goto yy999; - } - } -yy1188: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1190; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1190; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1190; - goto yy999; - } - } -yy1189: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1191; - if (yych <= '/') goto yy999; - goto yy1192; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1192; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1192; - goto yy999; - } - } -yy1190: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1192; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1192; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1192; - goto yy999; - } - } -yy1191: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1193; - if (yych <= '/') goto yy999; - goto yy1194; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1194; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1194; - goto yy999; - } - } -yy1192: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1194; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1194; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1194; - goto yy999; - } - } -yy1193: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1195; - if (yych <= '/') goto yy999; - goto yy1196; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1196; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1196; - goto yy999; - } - } -yy1194: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1196; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1196; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1196; - goto yy999; - } - } -yy1195: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1197; - if (yych <= '/') goto yy999; - goto yy1198; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1198; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1198; - goto yy999; - } - } -yy1196: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1198; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1198; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1198; - goto yy999; - } - } -yy1197: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1199; - if (yych <= '/') goto yy999; - goto yy1200; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1200; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1200; - goto yy999; - } - } -yy1198: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1200; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1200; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1200; - goto yy999; - } - } -yy1199: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1201; - if (yych <= '/') goto yy999; - goto yy1202; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1202; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1202; - goto yy999; - } - } -yy1200: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1202; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1202; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1202; - goto yy999; - } - } -yy1201: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1203; - if (yych <= '/') goto yy999; - goto yy1204; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1204; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1204; - goto yy999; - } - } -yy1202: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1204; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1204; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1204; - goto yy999; - } - } -yy1203: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1205; - if (yych <= '/') goto yy999; - goto yy1206; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1206; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1206; - goto yy999; - } - } -yy1204: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1206; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1206; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1206; - goto yy999; - } - } -yy1205: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1207; - if (yych <= '/') goto yy999; - goto yy1208; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1208; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1208; - goto yy999; - } - } -yy1206: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1208; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1208; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1208; - goto yy999; - } - } -yy1207: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1209; - if (yych <= '/') goto yy999; - goto yy1210; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1210; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1210; - goto yy999; - } - } -yy1208: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1210; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1210; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1210; - goto yy999; - } - } -yy1209: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1211; - if (yych <= '/') goto yy999; - goto yy1212; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1212; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1212; - goto yy999; - } - } -yy1210: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1212; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1212; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1212; - goto yy999; - } - } -yy1211: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1213; - if (yych <= '/') goto yy999; - goto yy1214; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1214; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1214; - goto yy999; - } - } -yy1212: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1214; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1214; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1214; - goto yy999; - } - } -yy1213: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1215; - if (yych <= '/') goto yy999; - goto yy1216; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1216; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1216; - goto yy999; - } - } -yy1214: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1216; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1216; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1216; - goto yy999; - } - } -yy1215: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1217; - if (yych <= '/') goto yy999; - goto yy1218; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1218; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1218; - goto yy999; - } - } -yy1216: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1218; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1218; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1218; - goto yy999; - } - } -yy1217: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1219; - if (yych <= '/') goto yy999; - goto yy1220; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1220; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1220; - goto yy999; - } - } -yy1218: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1220; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1220; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1220; - goto yy999; - } - } -yy1219: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1221; - if (yych <= '/') goto yy999; - goto yy1222; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1222; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1222; - goto yy999; - } - } -yy1220: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1222; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1222; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1222; - goto yy999; - } - } -yy1221: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1223; - if (yych <= '/') goto yy999; - goto yy1224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1224; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1224; - goto yy999; - } - } -yy1222: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1224; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1224; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1224; - goto yy999; - } - } -yy1223: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1225; - if (yych <= '/') goto yy999; - goto yy1226; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1226; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1226; - goto yy999; - } - } -yy1224: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1226; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1226; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1226; - goto yy999; - } - } -yy1225: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1227; - if (yych <= '/') goto yy999; - goto yy1228; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1228; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1228; - goto yy999; - } - } -yy1226: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1228; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1228; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1228; - goto yy999; - } - } -yy1227: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1229; - if (yych <= '/') goto yy999; - goto yy1230; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1230; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1230; - goto yy999; - } - } -yy1228: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1230; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1230; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1230; - goto yy999; - } - } -yy1229: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1231; - if (yych <= '/') goto yy999; - goto yy1232; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1232; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1232; - goto yy999; - } - } -yy1230: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1232; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1232; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1232; - goto yy999; - } - } -yy1231: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1233; - if (yych <= '/') goto yy999; - goto yy1234; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1234; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1234; - goto yy999; - } - } -yy1232: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1234; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1234; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1234; - goto yy999; - } - } -yy1233: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1235; - if (yych <= '/') goto yy999; - goto yy1236; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1236; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1236; - goto yy999; - } - } -yy1234: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1236; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1236; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1236; - goto yy999; - } - } -yy1235: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1237; - if (yych <= '/') goto yy999; - goto yy1238; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1238; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1238; - goto yy999; - } - } -yy1236: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1238; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1238; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1238; - goto yy999; - } - } -yy1237: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1239; - if (yych <= '/') goto yy999; - goto yy1240; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1240; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1240; - goto yy999; - } - } -yy1238: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1240; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1240; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1240; - goto yy999; - } - } -yy1239: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1241; - if (yych <= '/') goto yy999; - goto yy1242; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1242; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1242; - goto yy999; - } - } -yy1240: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1242; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1242; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1242; - goto yy999; - } - } -yy1241: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1243; - if (yych <= '/') goto yy999; - goto yy1244; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1244; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1244; - goto yy999; - } - } -yy1242: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1244; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1244; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1244; - goto yy999; - } - } -yy1243: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1245; - if (yych <= '/') goto yy999; - goto yy1246; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1246; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1246; - goto yy999; - } - } -yy1244: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1246; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1246; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1246; - goto yy999; - } - } -yy1245: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1247; - if (yych <= '/') goto yy999; - goto yy1248; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1248; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1248; - goto yy999; - } - } -yy1246: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1248; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1248; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1248; - goto yy999; - } - } -yy1247: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1249; - if (yych <= '/') goto yy999; - goto yy1250; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1250; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1250; - goto yy999; - } - } -yy1248: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1250; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1250; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1250; - goto yy999; - } - } -yy1249: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1251; - if (yych <= '/') goto yy999; - goto yy1252; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1252; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1252; - goto yy999; - } - } -yy1250: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1252; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1252; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1252; - goto yy999; - } - } -yy1251: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1253; - if (yych <= '/') goto yy999; - goto yy1254; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1254; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1254; - goto yy999; - } - } -yy1252: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1254; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1254; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1254; - goto yy999; - } - } -yy1253: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1255; - if (yych <= '/') goto yy999; - goto yy1256; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1256; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1256; - goto yy999; - } - } -yy1254: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1256; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1256; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1256; - goto yy999; - } - } -yy1255: - yych = *++p; - if (yych <= '9') { - if (yych == '-') goto yy1257; - if (yych <= '/') goto yy999; - goto yy1258; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy999; - goto yy1258; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1258; - goto yy999; - } - } -yy1256: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') goto yy999; - if (yych >= '.') goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1258; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1258; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1258; - goto yy999; - } - } -yy1257: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1138; - goto yy999; - } else { - if (yych <= 'Z') goto yy1138; - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1138; - goto yy999; - } -yy1258: - ++p; - if ((yych = *p) <= '=') { - if (yych <= '.') { - if (yych <= '-') goto yy999; - goto yy1012; - } else { - if (yych <= '/') goto yy999; - if (yych <= '9') goto yy1138; - goto yy999; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1013; - if (yych <= '@') goto yy999; - goto yy1138; - } else { - if (yych <= '`') goto yy999; - if (yych <= 'z') goto yy1138; - goto yy999; - } - } -} - + { + 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, 0, 128, 0, 128, 128, 128, 128, 128, 0, 0, + 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 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, + }; + yych = *(marker = p); + if (yych <= '?') { + if (yych <= ')') { + if (yych <= ' ') { + if (yych != '\n') + goto yy997; + } else { + if (yych == '"') + goto yy997; + if (yych <= '\'') + goto yy996; + goto yy997; + } + } else { + if (yych <= '9') { + if (yych == ',') + goto yy997; + goto yy996; + } else { + if (yych == '=') + goto yy996; + if (yych <= '>') + goto yy997; + goto yy996; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= ']') { + if (yych <= '@') + goto yy997; + if (yych <= 'Z') + goto yy996; + goto yy997; + } else { + if (yych <= '~') + goto yy996; + if (yych <= 0x7F) + goto yy997; + if (yych >= 0xC2) + goto yy998; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1000; + if (yych == 0xED) + goto yy1005; + goto yy1001; + } else { + if (yych <= 0xF0) + goto yy1002; + if (yych <= 0xF3) + goto yy1003; + if (yych <= 0xF4) + goto yy1004; + } + } + } + yy995 : { return 0; } + yy996: + yych = *(marker = ++p); + if (yych <= ',') { + if (yych <= '"') { + if (yych == '!') + goto yy1008; + goto yy995; + } else { + if (yych <= '\'') + goto yy1008; + if (yych <= ')') + goto yy995; + if (yych <= '+') + goto yy1008; + goto yy995; + } + } else { + if (yych <= '>') { + if (yych <= '9') + goto yy1008; + if (yych == '=') + goto yy1008; + goto yy995; + } else { + if (yych <= 'Z') + goto yy1008; + if (yych <= ']') + goto yy995; + if (yych <= '~') + goto yy1008; + goto yy995; + } + } + yy997: + yych = *++p; + goto yy995; + yy998: + yych = *++p; + if (yych <= 0x7F) + goto yy999; + if (yych <= 0xBF) + goto yy997; + yy999: + p = marker; + goto yy995; + yy1000: + yych = *++p; + if (yych <= 0x9F) + goto yy999; + if (yych <= 0xBF) + goto yy998; + goto yy999; + yy1001: + yych = *++p; + if (yych <= 0x7F) + goto yy999; + if (yych <= 0xBF) + goto yy998; + goto yy999; + yy1002: + yych = *++p; + if (yych <= 0x8F) + goto yy999; + if (yych <= 0xBF) + goto yy1001; + goto yy999; + yy1003: + yych = *++p; + if (yych <= 0x7F) + goto yy999; + if (yych <= 0xBF) + goto yy1001; + goto yy999; + yy1004: + yych = *++p; + if (yych <= 0x7F) + goto yy999; + if (yych <= 0x8F) + goto yy1001; + goto yy999; + yy1005: + yych = *++p; + if (yych <= 0x7F) + goto yy999; + if (yych <= 0x9F) + goto yy998; + goto yy999; + yy1006: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1009; + goto yy999; + } else { + if (yych <= 'Z') + goto yy1009; + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1009; + goto yy999; + } + yy1007: + ++p; + yych = *p; + yy1008: + if (yybm[0 + yych] & 128) { + goto yy1007; + } + if (yych <= '>') + goto yy999; + if (yych <= '@') + goto yy1006; + goto yy999; + yy1009: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1011; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1011; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1011; + goto yy999; + } + } + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1139; + if (yych <= '/') + goto yy999; + goto yy1140; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1140; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1140; + goto yy999; + } + } + yy1011: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych <= '-') + goto yy1139; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1140; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1140; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1140; + goto yy999; + } + } + yy1012: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1015; + goto yy999; + } else { + if (yych <= 'Z') + goto yy1015; + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1015; + goto yy999; + } + yy1013: + ++p; + { return (bufsize_t)(p - start); } + yy1015: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1017; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1017; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1017; + goto yy999; + } + } + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1018; + if (yych <= '/') + goto yy999; + goto yy1019; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1019; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1019; + goto yy999; + } + } + yy1017: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1019; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1019; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1019; + goto yy999; + } + } + yy1018: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1020; + if (yych <= '/') + goto yy999; + goto yy1021; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1021; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1021; + goto yy999; + } + } + yy1019: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1021; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1021; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1021; + goto yy999; + } + } + yy1020: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1022; + if (yych <= '/') + goto yy999; + goto yy1023; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1023; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1023; + goto yy999; + } + } + yy1021: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1023; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1023; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1023; + goto yy999; + } + } + yy1022: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1024; + if (yych <= '/') + goto yy999; + goto yy1025; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1025; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1025; + goto yy999; + } + } + yy1023: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1025; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1025; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1025; + goto yy999; + } + } + yy1024: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1026; + if (yych <= '/') + goto yy999; + goto yy1027; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1027; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1027; + goto yy999; + } + } + yy1025: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1027; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1027; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1027; + goto yy999; + } + } + yy1026: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1028; + if (yych <= '/') + goto yy999; + goto yy1029; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1029; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1029; + goto yy999; + } + } + yy1027: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1029; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1029; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1029; + goto yy999; + } + } + yy1028: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1030; + if (yych <= '/') + goto yy999; + goto yy1031; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1031; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1031; + goto yy999; + } + } + yy1029: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1031; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1031; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1031; + goto yy999; + } + } + yy1030: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1032; + if (yych <= '/') + goto yy999; + goto yy1033; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1033; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1033; + goto yy999; + } + } + yy1031: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1033; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1033; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1033; + goto yy999; + } + } + yy1032: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1034; + if (yych <= '/') + goto yy999; + goto yy1035; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1035; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1035; + goto yy999; + } + } + yy1033: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1035; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1035; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1035; + goto yy999; + } + } + yy1034: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1036; + if (yych <= '/') + goto yy999; + goto yy1037; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1037; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1037; + goto yy999; + } + } + yy1035: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1037; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1037; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1037; + goto yy999; + } + } + yy1036: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1038; + if (yych <= '/') + goto yy999; + goto yy1039; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1039; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1039; + goto yy999; + } + } + yy1037: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1039; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1039; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1039; + goto yy999; + } + } + yy1038: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1040; + if (yych <= '/') + goto yy999; + goto yy1041; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1041; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1041; + goto yy999; + } + } + yy1039: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1041; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1041; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1041; + goto yy999; + } + } + yy1040: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1042; + if (yych <= '/') + goto yy999; + goto yy1043; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1043; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1043; + goto yy999; + } + } + yy1041: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1043; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1043; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1043; + goto yy999; + } + } + yy1042: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1044; + if (yych <= '/') + goto yy999; + goto yy1045; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1045; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1045; + goto yy999; + } + } + yy1043: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1045; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1045; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1045; + goto yy999; + } + } + yy1044: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1046; + if (yych <= '/') + goto yy999; + goto yy1047; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1047; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1047; + goto yy999; + } + } + yy1045: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1047; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1047; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1047; + goto yy999; + } + } + yy1046: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1048; + if (yych <= '/') + goto yy999; + goto yy1049; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1049; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1049; + goto yy999; + } + } + yy1047: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1049; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1049; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1049; + goto yy999; + } + } + yy1048: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1050; + if (yych <= '/') + goto yy999; + goto yy1051; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1051; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1051; + goto yy999; + } + } + yy1049: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1051; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1051; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1051; + goto yy999; + } + } + yy1050: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1052; + if (yych <= '/') + goto yy999; + goto yy1053; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1053; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1053; + goto yy999; + } + } + yy1051: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1053; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1053; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1053; + goto yy999; + } + } + yy1052: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1054; + if (yych <= '/') + goto yy999; + goto yy1055; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1055; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1055; + goto yy999; + } + } + yy1053: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1055; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1055; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1055; + goto yy999; + } + } + yy1054: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1056; + if (yych <= '/') + goto yy999; + goto yy1057; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1057; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1057; + goto yy999; + } + } + yy1055: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1057; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1057; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1057; + goto yy999; + } + } + yy1056: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1058; + if (yych <= '/') + goto yy999; + goto yy1059; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1059; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1059; + goto yy999; + } + } + yy1057: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1059; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1059; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1059; + goto yy999; + } + } + yy1058: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1060; + if (yych <= '/') + goto yy999; + goto yy1061; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1061; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1061; + goto yy999; + } + } + yy1059: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1061; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1061; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1061; + goto yy999; + } + } + yy1060: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1062; + if (yych <= '/') + goto yy999; + goto yy1063; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1063; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1063; + goto yy999; + } + } + yy1061: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1063; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1063; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1063; + goto yy999; + } + } + yy1062: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1064; + if (yych <= '/') + goto yy999; + goto yy1065; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1065; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1065; + goto yy999; + } + } + yy1063: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1065; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1065; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1065; + goto yy999; + } + } + yy1064: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1066; + if (yych <= '/') + goto yy999; + goto yy1067; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1067; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1067; + goto yy999; + } + } + yy1065: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1067; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1067; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1067; + goto yy999; + } + } + yy1066: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1068; + if (yych <= '/') + goto yy999; + goto yy1069; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1069; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1069; + goto yy999; + } + } + yy1067: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1069; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1069; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1069; + goto yy999; + } + } + yy1068: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1070; + if (yych <= '/') + goto yy999; + goto yy1071; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1071; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1071; + goto yy999; + } + } + yy1069: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1071; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1071; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1071; + goto yy999; + } + } + yy1070: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1072; + if (yych <= '/') + goto yy999; + goto yy1073; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1073; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1073; + goto yy999; + } + } + yy1071: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1073; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1073; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1073; + goto yy999; + } + } + yy1072: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1074; + if (yych <= '/') + goto yy999; + goto yy1075; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1075; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1075; + goto yy999; + } + } + yy1073: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1075; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1075; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1075; + goto yy999; + } + } + yy1074: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1076; + if (yych <= '/') + goto yy999; + goto yy1077; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1077; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1077; + goto yy999; + } + } + yy1075: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1077; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1077; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1077; + goto yy999; + } + } + yy1076: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1078; + if (yych <= '/') + goto yy999; + goto yy1079; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1079; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1079; + goto yy999; + } + } + yy1077: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1079; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1079; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1079; + goto yy999; + } + } + yy1078: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1080; + if (yych <= '/') + goto yy999; + goto yy1081; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1081; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1081; + goto yy999; + } + } + yy1079: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1081; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1081; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1081; + goto yy999; + } + } + yy1080: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1082; + if (yych <= '/') + goto yy999; + goto yy1083; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1083; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1083; + goto yy999; + } + } + yy1081: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1083; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1083; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1083; + goto yy999; + } + } + yy1082: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1084; + if (yych <= '/') + goto yy999; + goto yy1085; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1085; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1085; + goto yy999; + } + } + yy1083: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1085; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1085; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1085; + goto yy999; + } + } + yy1084: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1086; + if (yych <= '/') + goto yy999; + goto yy1087; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1087; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1087; + goto yy999; + } + } + yy1085: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1087; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1087; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1087; + goto yy999; + } + } + yy1086: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1088; + if (yych <= '/') + goto yy999; + goto yy1089; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1089; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1089; + goto yy999; + } + } + yy1087: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1089; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1089; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1089; + goto yy999; + } + } + yy1088: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1090; + if (yych <= '/') + goto yy999; + goto yy1091; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1091; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1091; + goto yy999; + } + } + yy1089: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1091; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1091; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1091; + goto yy999; + } + } + yy1090: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1092; + if (yych <= '/') + goto yy999; + goto yy1093; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1093; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1093; + goto yy999; + } + } + yy1091: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1093; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1093; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1093; + goto yy999; + } + } + yy1092: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1094; + if (yych <= '/') + goto yy999; + goto yy1095; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1095; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1095; + goto yy999; + } + } + yy1093: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1095; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1095; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1095; + goto yy999; + } + } + yy1094: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1096; + if (yych <= '/') + goto yy999; + goto yy1097; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1097; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1097; + goto yy999; + } + } + yy1095: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1097; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1097; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1097; + goto yy999; + } + } + yy1096: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1098; + if (yych <= '/') + goto yy999; + goto yy1099; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1099; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1099; + goto yy999; + } + } + yy1097: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1099; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1099; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1099; + goto yy999; + } + } + yy1098: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1100; + if (yych <= '/') + goto yy999; + goto yy1101; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1101; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1101; + goto yy999; + } + } + yy1099: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1101; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1101; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1101; + goto yy999; + } + } + yy1100: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1102; + if (yych <= '/') + goto yy999; + goto yy1103; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1103; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1103; + goto yy999; + } + } + yy1101: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1103; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1103; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1103; + goto yy999; + } + } + yy1102: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1104; + if (yych <= '/') + goto yy999; + goto yy1105; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1105; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1105; + goto yy999; + } + } + yy1103: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1105; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1105; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1105; + goto yy999; + } + } + yy1104: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1106; + if (yych <= '/') + goto yy999; + goto yy1107; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1107; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1107; + goto yy999; + } + } + yy1105: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1107; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1107; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1107; + goto yy999; + } + } + yy1106: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1108; + if (yych <= '/') + goto yy999; + goto yy1109; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1109; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1109; + goto yy999; + } + } + yy1107: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1109; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1109; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1109; + goto yy999; + } + } + yy1108: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1110; + if (yych <= '/') + goto yy999; + goto yy1111; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1111; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1111; + goto yy999; + } + } + yy1109: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1111; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1111; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1111; + goto yy999; + } + } + yy1110: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1112; + if (yych <= '/') + goto yy999; + goto yy1113; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1113; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1113; + goto yy999; + } + } + yy1111: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1113; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1113; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1113; + goto yy999; + } + } + yy1112: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1114; + if (yych <= '/') + goto yy999; + goto yy1115; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1115; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1115; + goto yy999; + } + } + yy1113: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1115; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1115; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1115; + goto yy999; + } + } + yy1114: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1116; + if (yych <= '/') + goto yy999; + goto yy1117; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1117; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1117; + goto yy999; + } + } + yy1115: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1117; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1117; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1117; + goto yy999; + } + } + yy1116: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1118; + if (yych <= '/') + goto yy999; + goto yy1119; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1119; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1119; + goto yy999; + } + } + yy1117: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1119; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1119; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1119; + goto yy999; + } + } + yy1118: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1120; + if (yych <= '/') + goto yy999; + goto yy1121; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1121; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1121; + goto yy999; + } + } + yy1119: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1121; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1121; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1121; + goto yy999; + } + } + yy1120: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1122; + if (yych <= '/') + goto yy999; + goto yy1123; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1123; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1123; + goto yy999; + } + } + yy1121: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1123; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1123; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1123; + goto yy999; + } + } + yy1122: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1124; + if (yych <= '/') + goto yy999; + goto yy1125; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1125; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1125; + goto yy999; + } + } + yy1123: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1125; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1125; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1125; + goto yy999; + } + } + yy1124: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1126; + if (yych <= '/') + goto yy999; + goto yy1127; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1127; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1127; + goto yy999; + } + } + yy1125: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1127; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1127; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1127; + goto yy999; + } + } + yy1126: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1128; + if (yych <= '/') + goto yy999; + goto yy1129; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1129; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1129; + goto yy999; + } + } + yy1127: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1129; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1129; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1129; + goto yy999; + } + } + yy1128: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1130; + if (yych <= '/') + goto yy999; + goto yy1131; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1131; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1131; + goto yy999; + } + } + yy1129: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1131; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1131; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1131; + goto yy999; + } + } + yy1130: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1132; + if (yych <= '/') + goto yy999; + goto yy1133; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1133; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1133; + goto yy999; + } + } + yy1131: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1133; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1133; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1133; + goto yy999; + } + } + yy1132: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1134; + if (yych <= '/') + goto yy999; + goto yy1135; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1135; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1135; + goto yy999; + } + } + yy1133: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1135; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1135; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1135; + goto yy999; + } + } + yy1134: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy1136; + if (yych <= '/') + goto yy999; + goto yy1137; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1137; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1137; + goto yy999; + } + } + yy1135: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1137; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1137; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1137; + goto yy999; + } + } + yy1136: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1138; + goto yy999; + } else { + if (yych <= 'Z') + goto yy1138; + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1138; + goto yy999; + } + yy1137: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= '-') + goto yy999; + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych >= ':') + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + } else { + if (yych <= '`') + goto yy999; + if (yych >= '{') + goto yy999; + } + } + yy1138: + ++p; + yych = *p; + if (yych == '.') + goto yy1012; + if (yych == '>') + goto yy1013; + goto yy999; + yy1139: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1141; + if (yych <= '/') + goto yy999; + goto yy1142; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1142; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1142; + goto yy999; + } + } + yy1140: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1142; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1142; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1142; + goto yy999; + } + } + yy1141: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1143; + if (yych <= '/') + goto yy999; + goto yy1144; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1144; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1144; + goto yy999; + } + } + yy1142: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1144; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1144; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1144; + goto yy999; + } + } + yy1143: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1145; + if (yych <= '/') + goto yy999; + goto yy1146; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1146; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1146; + goto yy999; + } + } + yy1144: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1146; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1146; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1146; + goto yy999; + } + } + yy1145: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1147; + if (yych <= '/') + goto yy999; + goto yy1148; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1148; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1148; + goto yy999; + } + } + yy1146: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1148; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1148; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1148; + goto yy999; + } + } + yy1147: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1149; + if (yych <= '/') + goto yy999; + goto yy1150; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1150; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1150; + goto yy999; + } + } + yy1148: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1150; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1150; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1150; + goto yy999; + } + } + yy1149: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1151; + if (yych <= '/') + goto yy999; + goto yy1152; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1152; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1152; + goto yy999; + } + } + yy1150: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1152; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1152; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1152; + goto yy999; + } + } + yy1151: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1153; + if (yych <= '/') + goto yy999; + goto yy1154; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1154; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1154; + goto yy999; + } + } + yy1152: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1154; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1154; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1154; + goto yy999; + } + } + yy1153: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1155; + if (yych <= '/') + goto yy999; + goto yy1156; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1156; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1156; + goto yy999; + } + } + yy1154: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1156; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1156; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1156; + goto yy999; + } + } + yy1155: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1157; + if (yych <= '/') + goto yy999; + goto yy1158; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1158; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1158; + goto yy999; + } + } + yy1156: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1158; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1158; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1158; + goto yy999; + } + } + yy1157: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1159; + if (yych <= '/') + goto yy999; + goto yy1160; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1160; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1160; + goto yy999; + } + } + yy1158: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1160; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1160; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1160; + goto yy999; + } + } + yy1159: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1161; + if (yych <= '/') + goto yy999; + goto yy1162; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1162; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1162; + goto yy999; + } + } + yy1160: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1162; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1162; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1162; + goto yy999; + } + } + yy1161: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1163; + if (yych <= '/') + goto yy999; + goto yy1164; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1164; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1164; + goto yy999; + } + } + yy1162: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1164; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1164; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1164; + goto yy999; + } + } + yy1163: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1165; + if (yych <= '/') + goto yy999; + goto yy1166; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1166; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1166; + goto yy999; + } + } + yy1164: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1166; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1166; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1166; + goto yy999; + } + } + yy1165: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1167; + if (yych <= '/') + goto yy999; + goto yy1168; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1168; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1168; + goto yy999; + } + } + yy1166: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1168; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1168; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1168; + goto yy999; + } + } + yy1167: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1169; + if (yych <= '/') + goto yy999; + goto yy1170; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1170; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1170; + goto yy999; + } + } + yy1168: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1170; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1170; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1170; + goto yy999; + } + } + yy1169: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1171; + if (yych <= '/') + goto yy999; + goto yy1172; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1172; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1172; + goto yy999; + } + } + yy1170: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1172; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1172; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1172; + goto yy999; + } + } + yy1171: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1173; + if (yych <= '/') + goto yy999; + goto yy1174; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1174; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1174; + goto yy999; + } + } + yy1172: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1174; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1174; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1174; + goto yy999; + } + } + yy1173: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1175; + if (yych <= '/') + goto yy999; + goto yy1176; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1176; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1176; + goto yy999; + } + } + yy1174: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1176; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1176; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1176; + goto yy999; + } + } + yy1175: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1177; + if (yych <= '/') + goto yy999; + goto yy1178; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1178; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1178; + goto yy999; + } + } + yy1176: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1178; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1178; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1178; + goto yy999; + } + } + yy1177: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1179; + if (yych <= '/') + goto yy999; + goto yy1180; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1180; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1180; + goto yy999; + } + } + yy1178: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1180; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1180; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1180; + goto yy999; + } + } + yy1179: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1181; + if (yych <= '/') + goto yy999; + goto yy1182; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1182; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1182; + goto yy999; + } + } + yy1180: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1182; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1182; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1182; + goto yy999; + } + } + yy1181: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1183; + if (yych <= '/') + goto yy999; + goto yy1184; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1184; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1184; + goto yy999; + } + } + yy1182: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1184; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1184; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1184; + goto yy999; + } + } + yy1183: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1185; + if (yych <= '/') + goto yy999; + goto yy1186; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1186; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1186; + goto yy999; + } + } + yy1184: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1186; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1186; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1186; + goto yy999; + } + } + yy1185: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1187; + if (yych <= '/') + goto yy999; + goto yy1188; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1188; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1188; + goto yy999; + } + } + yy1186: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1188; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1188; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1188; + goto yy999; + } + } + yy1187: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1189; + if (yych <= '/') + goto yy999; + goto yy1190; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1190; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1190; + goto yy999; + } + } + yy1188: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1190; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1190; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1190; + goto yy999; + } + } + yy1189: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1191; + if (yych <= '/') + goto yy999; + goto yy1192; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1192; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1192; + goto yy999; + } + } + yy1190: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1192; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1192; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1192; + goto yy999; + } + } + yy1191: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1193; + if (yych <= '/') + goto yy999; + goto yy1194; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1194; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1194; + goto yy999; + } + } + yy1192: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1194; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1194; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1194; + goto yy999; + } + } + yy1193: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1195; + if (yych <= '/') + goto yy999; + goto yy1196; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1196; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1196; + goto yy999; + } + } + yy1194: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1196; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1196; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1196; + goto yy999; + } + } + yy1195: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1197; + if (yych <= '/') + goto yy999; + goto yy1198; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1198; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1198; + goto yy999; + } + } + yy1196: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1198; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1198; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1198; + goto yy999; + } + } + yy1197: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1199; + if (yych <= '/') + goto yy999; + goto yy1200; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1200; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1200; + goto yy999; + } + } + yy1198: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1200; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1200; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1200; + goto yy999; + } + } + yy1199: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1201; + if (yych <= '/') + goto yy999; + goto yy1202; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1202; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1202; + goto yy999; + } + } + yy1200: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1202; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1202; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1202; + goto yy999; + } + } + yy1201: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1203; + if (yych <= '/') + goto yy999; + goto yy1204; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1204; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1204; + goto yy999; + } + } + yy1202: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1204; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1204; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1204; + goto yy999; + } + } + yy1203: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1205; + if (yych <= '/') + goto yy999; + goto yy1206; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1206; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1206; + goto yy999; + } + } + yy1204: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1206; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1206; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1206; + goto yy999; + } + } + yy1205: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1207; + if (yych <= '/') + goto yy999; + goto yy1208; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1208; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1208; + goto yy999; + } + } + yy1206: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1208; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1208; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1208; + goto yy999; + } + } + yy1207: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1209; + if (yych <= '/') + goto yy999; + goto yy1210; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1210; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1210; + goto yy999; + } + } + yy1208: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1210; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1210; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1210; + goto yy999; + } + } + yy1209: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1211; + if (yych <= '/') + goto yy999; + goto yy1212; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1212; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1212; + goto yy999; + } + } + yy1210: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1212; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1212; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1212; + goto yy999; + } + } + yy1211: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1213; + if (yych <= '/') + goto yy999; + goto yy1214; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1214; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1214; + goto yy999; + } + } + yy1212: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1214; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1214; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1214; + goto yy999; + } + } + yy1213: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1215; + if (yych <= '/') + goto yy999; + goto yy1216; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1216; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1216; + goto yy999; + } + } + yy1214: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1216; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1216; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1216; + goto yy999; + } + } + yy1215: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1217; + if (yych <= '/') + goto yy999; + goto yy1218; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1218; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1218; + goto yy999; + } + } + yy1216: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1218; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1218; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1218; + goto yy999; + } + } + yy1217: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1219; + if (yych <= '/') + goto yy999; + goto yy1220; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1220; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1220; + goto yy999; + } + } + yy1218: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1220; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1220; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1220; + goto yy999; + } + } + yy1219: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1221; + if (yych <= '/') + goto yy999; + goto yy1222; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1222; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1222; + goto yy999; + } + } + yy1220: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1222; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1222; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1222; + goto yy999; + } + } + yy1221: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1223; + if (yych <= '/') + goto yy999; + goto yy1224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1224; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1224; + goto yy999; + } + } + yy1222: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1224; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1224; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1224; + goto yy999; + } + } + yy1223: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1225; + if (yych <= '/') + goto yy999; + goto yy1226; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1226; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1226; + goto yy999; + } + } + yy1224: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1226; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1226; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1226; + goto yy999; + } + } + yy1225: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1227; + if (yych <= '/') + goto yy999; + goto yy1228; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1228; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1228; + goto yy999; + } + } + yy1226: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1228; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1228; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1228; + goto yy999; + } + } + yy1227: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1229; + if (yych <= '/') + goto yy999; + goto yy1230; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1230; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1230; + goto yy999; + } + } + yy1228: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1230; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1230; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1230; + goto yy999; + } + } + yy1229: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1231; + if (yych <= '/') + goto yy999; + goto yy1232; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1232; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1232; + goto yy999; + } + } + yy1230: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1232; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1232; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1232; + goto yy999; + } + } + yy1231: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1233; + if (yych <= '/') + goto yy999; + goto yy1234; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1234; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1234; + goto yy999; + } + } + yy1232: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1234; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1234; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1234; + goto yy999; + } + } + yy1233: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1235; + if (yych <= '/') + goto yy999; + goto yy1236; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1236; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1236; + goto yy999; + } + } + yy1234: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1236; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1236; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1236; + goto yy999; + } + } + yy1235: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1237; + if (yych <= '/') + goto yy999; + goto yy1238; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1238; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1238; + goto yy999; + } + } + yy1236: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1238; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1238; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1238; + goto yy999; + } + } + yy1237: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1239; + if (yych <= '/') + goto yy999; + goto yy1240; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1240; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1240; + goto yy999; + } + } + yy1238: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1240; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1240; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1240; + goto yy999; + } + } + yy1239: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1241; + if (yych <= '/') + goto yy999; + goto yy1242; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1242; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1242; + goto yy999; + } + } + yy1240: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1242; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1242; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1242; + goto yy999; + } + } + yy1241: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1243; + if (yych <= '/') + goto yy999; + goto yy1244; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1244; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1244; + goto yy999; + } + } + yy1242: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1244; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1244; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1244; + goto yy999; + } + } + yy1243: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1245; + if (yych <= '/') + goto yy999; + goto yy1246; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1246; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1246; + goto yy999; + } + } + yy1244: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1246; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1246; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1246; + goto yy999; + } + } + yy1245: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1247; + if (yych <= '/') + goto yy999; + goto yy1248; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1248; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1248; + goto yy999; + } + } + yy1246: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1248; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1248; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1248; + goto yy999; + } + } + yy1247: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1249; + if (yych <= '/') + goto yy999; + goto yy1250; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1250; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1250; + goto yy999; + } + } + yy1248: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1250; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1250; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1250; + goto yy999; + } + } + yy1249: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1251; + if (yych <= '/') + goto yy999; + goto yy1252; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1252; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1252; + goto yy999; + } + } + yy1250: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1252; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1252; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1252; + goto yy999; + } + } + yy1251: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1253; + if (yych <= '/') + goto yy999; + goto yy1254; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1254; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1254; + goto yy999; + } + } + yy1252: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1254; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1254; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1254; + goto yy999; + } + } + yy1253: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1255; + if (yych <= '/') + goto yy999; + goto yy1256; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1256; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1256; + goto yy999; + } + } + yy1254: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1256; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1256; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1256; + goto yy999; + } + } + yy1255: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy1257; + if (yych <= '/') + goto yy999; + goto yy1258; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy999; + goto yy1258; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1258; + goto yy999; + } + } + yy1256: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy999; + if (yych >= '.') + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1258; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1258; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1258; + goto yy999; + } + } + yy1257: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1138; + goto yy999; + } else { + if (yych <= 'Z') + goto yy1138; + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1138; + goto yy999; + } + yy1258: + ++p; + if ((yych = *p) <= '=') { + if (yych <= '.') { + if (yych <= '-') + goto yy999; + goto yy1012; + } else { + if (yych <= '/') + goto yy999; + if (yych <= '9') + goto yy1138; + goto yy999; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1013; + if (yych <= '@') + goto yy999; + goto yy1138; + } else { + if (yych <= '`') + goto yy999; + if (yych <= 'z') + goto yy1138; + goto yy999; + } + } + } } // Try to match an HTML tag after first <, returning num of chars matched. -bufsize_t _scan_html_tag(const unsigned char *p) -{ +bufsize_t _scan_html_tag(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - static const unsigned char yybm[] = { - /* table 1 .. 8: 0 */ - 0, 230, 230, 230, 230, 230, 230, 230, - 230, 199, 199, 199, 199, 199, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 199, 230, 70, 230, 230, 230, 230, 134, - 230, 230, 230, 230, 230, 254, 246, 230, - 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 246, 230, 198, 198, 196, 230, - 230, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 230, 230, 226, 230, 246, - 198, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 230, 230, 230, 230, 230, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 32, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 128, - 160, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 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 <= '`') { - if (yych <= '.') { - if (yych <= '\n') { - if (yych <= '\t') goto yy1266; - } else { - if (yych == '!') goto yy1264; - goto yy1266; - } - } else { - if (yych <= '?') { - if (yych <= '/') goto yy1263; - if (yych <= '>') goto yy1266; - goto yy1265; - } else { - if (yych <= '@') goto yy1266; - if (yych <= 'Z') goto yy1262; - goto yy1266; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 'z') goto yy1262; - if (yych <= 0x7F) goto yy1266; - } else { - if (yych <= 0xDF) goto yy1267; - if (yych <= 0xE0) goto yy1269; - goto yy1270; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1274; - if (yych <= 0xEF) goto yy1270; - goto yy1271; - } else { - if (yych <= 0xF3) goto yy1272; - if (yych <= 0xF4) goto yy1273; - } - } - } -yy1261: - { return 0; } -yy1262: - yych = *(marker = ++p); - if (yych <= '/') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1261; - if (yych <= '\r') goto yy1366; - if (yych <= 0x1F) goto yy1261; - goto yy1366; - } else { - if (yych == '-') goto yy1364; - if (yych <= '.') goto yy1261; - goto yy1368; - } - } else { - if (yych <= '@') { - if (yych <= '9') goto yy1364; - if (yych == '>') goto yy1285; - goto yy1261; - } else { - if (yych <= 'Z') goto yy1364; - if (yych <= '`') goto yy1261; - if (yych <= 'z') goto yy1364; - goto yy1261; - } - } -yy1263: - yych = *(marker = ++p); - if (yych <= '@') goto yy1261; - if (yych <= 'Z') goto yy1360; - if (yych <= '`') goto yy1261; - if (yych <= 'z') goto yy1360; - goto yy1261; -yy1264: - yych = *(marker = ++p); - if (yybm[256+yych] & 64) { - goto yy1295; - } - if (yych == '-') goto yy1297; - if (yych <= '@') goto yy1261; - if (yych <= '[') goto yy1294; - goto yy1261; -yy1265: - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1261; - if (yych <= 0x7F) goto yy1276; - if (yych <= 0xC1) goto yy1261; - if (yych <= 0xF4) goto yy1276; - goto yy1261; -yy1266: - yych = *++p; - goto yy1261; -yy1267: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1266; -yy1268: - p = marker; - goto yy1261; -yy1269: - yych = *++p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1267; - goto yy1268; -yy1270: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1267; - goto yy1268; -yy1271: - yych = *++p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1270; - goto yy1268; -yy1272: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1270; - goto yy1268; -yy1273: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1270; - goto yy1268; -yy1274: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1267; - goto yy1268; -yy1275: - ++p; - yych = *p; -yy1276: - if (yybm[256+yych] & 32) { - goto yy1275; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= '?') goto yy1284; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1277; - if (yych <= 0xE0) goto yy1278; - goto yy1279; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1283; - if (yych <= 0xEF) goto yy1279; - goto yy1280; - } else { - if (yych <= 0xF3) goto yy1281; - if (yych <= 0xF4) goto yy1282; - goto yy1268; - } - } -yy1277: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1275; - goto yy1268; -yy1278: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1277; - goto yy1268; -yy1279: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1277; - goto yy1268; -yy1280: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1279; - goto yy1268; -yy1281: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1279; - goto yy1268; -yy1282: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1279; - goto yy1268; -yy1283: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1277; - goto yy1268; -yy1284: - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) goto yy1268; - if (yych <= '=') goto yy1275; - } else { - if (yych <= 0x7F) goto yy1275; - if (yych <= 0xC1) goto yy1268; - if (yych <= 0xDF) goto yy1287; - goto yy1288; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1293; - goto yy1289; - } else { - if (yych <= 0xF0) goto yy1290; - if (yych <= 0xF3) goto yy1291; - if (yych <= 0xF4) goto yy1292; - goto yy1268; - } - } -yy1285: - ++p; - { return (bufsize_t)(p - start); } -yy1287: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1275; - goto yy1268; -yy1288: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1287; - goto yy1268; -yy1289: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1287; - goto yy1268; -yy1290: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1289; - goto yy1268; -yy1291: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1289; - goto yy1268; -yy1292: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1289; - goto yy1268; -yy1293: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1287; - goto yy1268; -yy1294: - yych = *++p; - if (yych == 'C') goto yy1330; - if (yych == 'c') goto yy1330; - goto yy1268; -yy1295: - ++p; - yych = *p; - if (yybm[0+yych] & 1) { - goto yy1319; - } - if (yych <= '@') goto yy1268; - if (yych <= 'Z') goto yy1295; - goto yy1268; -yy1297: - yych = *++p; - if (yych != '-') goto yy1268; - yych = *++p; - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych != '-') goto yy1301; - } else { - if (yych <= '>') goto yy1268; - if (yych <= 0xC1) goto yy1301; - if (yych <= 0xDF) goto yy1302; - goto yy1303; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1308; - goto yy1304; - } else { - if (yych <= 0xF0) goto yy1305; - if (yych <= 0xF3) goto yy1306; - if (yych <= 0xF4) goto yy1307; - goto yy1301; - } - } - yych = *++p; - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych == '-') goto yy1318; - goto yy1301; - } else { - if (yych <= '>') goto yy1268; - if (yych <= 0xC1) goto yy1301; - if (yych <= 0xDF) goto yy1302; - goto yy1303; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1308; - goto yy1304; - } else { - if (yych <= 0xF0) goto yy1305; - if (yych <= 0xF3) goto yy1306; - if (yych <= 0xF4) goto yy1307; - goto yy1301; - } - } -yy1300: - ++p; - yych = *p; -yy1301: - if (yybm[256+yych] & 128) { - goto yy1300; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= '-') goto yy1309; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1310; - if (yych <= 0xE0) goto yy1311; - goto yy1312; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1316; - if (yych <= 0xEF) goto yy1312; - goto yy1313; - } else { - if (yych <= 0xF3) goto yy1314; - if (yych <= 0xF4) goto yy1315; - goto yy1268; - } - } -yy1302: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1300; - goto yy1268; -yy1303: - yych = *++p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1302; - goto yy1268; -yy1304: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1302; - goto yy1268; -yy1305: - yych = *++p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1304; - goto yy1268; -yy1306: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1304; - goto yy1268; -yy1307: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1304; - goto yy1268; -yy1308: - yych = *++p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1302; - goto yy1268; -yy1309: - ++p; - yych = *p; - if (yybm[256+yych] & 128) { - goto yy1300; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= '-') goto yy1317; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1310; - if (yych <= 0xE0) goto yy1311; - goto yy1312; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1316; - if (yych <= 0xEF) goto yy1312; - goto yy1313; - } else { - if (yych <= 0xF3) goto yy1314; - if (yych <= 0xF4) goto yy1315; - goto yy1268; - } - } -yy1310: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1300; - goto yy1268; -yy1311: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1310; - goto yy1268; -yy1312: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1310; - goto yy1268; -yy1313: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1312; - goto yy1268; -yy1314: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1312; - goto yy1268; -yy1315: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1312; - goto yy1268; -yy1316: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1310; - goto yy1268; -yy1317: - yych = *++p; - if (yych == '>') goto yy1285; - goto yy1268; -yy1318: - yych = *++p; - if (yych == '>') goto yy1285; - goto yy1268; -yy1319: - ++p; - yych = *p; - if (yybm[0+yych] & 1) { - goto yy1319; - } - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) goto yy1268; - if (yych >= '>') goto yy1285; - } else { - if (yych <= 0x7F) goto yy1321; - if (yych <= 0xC1) goto yy1268; - if (yych <= 0xDF) goto yy1323; - goto yy1324; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1329; - goto yy1325; - } else { - if (yych <= 0xF0) goto yy1326; - if (yych <= 0xF3) goto yy1327; - if (yych <= 0xF4) goto yy1328; - goto yy1268; - } - } -yy1321: - ++p; - yych = *p; - if (yybm[0+yych] & 2) { - goto yy1321; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= '>') goto yy1285; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1323; - if (yych <= 0xE0) goto yy1324; - goto yy1325; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1329; - if (yych <= 0xEF) goto yy1325; - goto yy1326; - } else { - if (yych <= 0xF3) goto yy1327; - if (yych <= 0xF4) goto yy1328; - goto yy1268; - } - } -yy1323: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1321; - goto yy1268; -yy1324: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1323; - goto yy1268; -yy1325: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1323; - goto yy1268; -yy1326: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1325; - goto yy1268; -yy1327: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1325; - goto yy1268; -yy1328: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1325; - goto yy1268; -yy1329: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1323; - goto yy1268; -yy1330: - yych = *++p; - if (yych == 'D') goto yy1331; - if (yych != 'd') goto yy1268; -yy1331: - yych = *++p; - if (yych == 'A') goto yy1332; - if (yych != 'a') goto yy1268; -yy1332: - yych = *++p; - if (yych == 'T') goto yy1333; - if (yych != 't') goto yy1268; -yy1333: - yych = *++p; - if (yych == 'A') goto yy1334; - if (yych != 'a') goto yy1268; -yy1334: - yych = *++p; - if (yych != '[') goto yy1268; -yy1335: - ++p; - yych = *p; - if (yybm[0+yych] & 4) { - goto yy1335; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= ']') goto yy1344; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1337; - if (yych <= 0xE0) goto yy1338; - goto yy1339; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1343; - if (yych <= 0xEF) goto yy1339; - goto yy1340; - } else { - if (yych <= 0xF3) goto yy1341; - if (yych <= 0xF4) goto yy1342; - goto yy1268; - } - } -yy1337: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1335; - goto yy1268; -yy1338: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1337; - goto yy1268; -yy1339: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1337; - goto yy1268; -yy1340: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1339; - goto yy1268; -yy1341: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1339; - goto yy1268; -yy1342: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1339; - goto yy1268; -yy1343: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1337; - goto yy1268; -yy1344: - ++p; - yych = *p; - if (yybm[0+yych] & 4) { - goto yy1335; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych >= '^') goto yy1268; - } else { - if (yych <= 0xDF) goto yy1346; - if (yych <= 0xE0) goto yy1347; - goto yy1348; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1352; - if (yych <= 0xEF) goto yy1348; - goto yy1349; - } else { - if (yych <= 0xF3) goto yy1350; - if (yych <= 0xF4) goto yy1351; - goto yy1268; - } - } - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) goto yy1268; - if (yych <= '=') goto yy1335; - goto yy1285; - } else { - if (yych <= 0x7F) goto yy1335; - if (yych <= 0xC1) goto yy1268; - if (yych <= 0xDF) goto yy1353; - goto yy1354; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1359; - goto yy1355; - } else { - if (yych <= 0xF0) goto yy1356; - if (yych <= 0xF3) goto yy1357; - if (yych <= 0xF4) goto yy1358; - goto yy1268; - } - } -yy1346: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1335; - goto yy1268; -yy1347: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1346; - goto yy1268; -yy1348: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1346; - goto yy1268; -yy1349: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1348; - goto yy1268; -yy1350: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1348; - goto yy1268; -yy1351: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1348; - goto yy1268; -yy1352: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1346; - goto yy1268; -yy1353: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1335; - goto yy1268; -yy1354: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1353; - goto yy1268; -yy1355: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1353; - goto yy1268; -yy1356: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1355; - goto yy1268; -yy1357: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1355; - goto yy1268; -yy1358: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1355; - goto yy1268; -yy1359: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1353; - goto yy1268; -yy1360: - ++p; - yych = *p; - if (yybm[0+yych] & 8) { - goto yy1360; - } - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1268; - if (yych >= 0x0E) goto yy1268; - } else { - if (yych <= ' ') goto yy1362; - if (yych == '>') goto yy1285; - goto yy1268; - } -yy1362: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1268; - if (yych <= '\r') goto yy1362; - goto yy1268; - } else { - if (yych <= ' ') goto yy1362; - if (yych == '>') goto yy1285; - goto yy1268; - } -yy1364: - ++p; - yych = *p; - if (yych <= '/') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1268; - if (yych <= '\r') goto yy1366; - if (yych <= 0x1F) goto yy1268; - } else { - if (yych == '-') goto yy1364; - if (yych <= '.') goto yy1268; - goto yy1368; - } - } else { - if (yych <= '@') { - if (yych <= '9') goto yy1364; - if (yych == '>') goto yy1285; - goto yy1268; - } else { - if (yych <= 'Z') goto yy1364; - if (yych <= '`') goto yy1268; - if (yych <= 'z') goto yy1364; - goto yy1268; - } - } -yy1366: - ++p; - yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1268; - if (yych <= '\r') goto yy1366; - if (yych <= 0x1F) goto yy1268; - goto yy1366; - } else { - if (yych == '/') goto yy1368; - if (yych <= '9') goto yy1268; - goto yy1369; - } - } else { - if (yych <= 'Z') { - if (yych == '>') goto yy1285; - if (yych <= '@') goto yy1268; - goto yy1369; - } else { - if (yych <= '_') { - if (yych <= '^') goto yy1268; - goto yy1369; - } else { - if (yych <= '`') goto yy1268; - if (yych <= 'z') goto yy1369; - goto yy1268; - } - } - } -yy1368: - yych = *++p; - if (yych == '>') goto yy1285; - goto yy1268; -yy1369: - ++p; - yych = *p; - if (yybm[0+yych] & 16) { - goto yy1369; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy1268; - } else { - if (yych != ' ') goto yy1268; - } - } else { - if (yych <= '<') { - if (yych <= '/') goto yy1368; - goto yy1268; - } else { - if (yych <= '=') goto yy1373; - if (yych <= '>') goto yy1285; - goto yy1268; - } - } -yy1371: - ++p; - yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1268; - if (yych <= '\r') goto yy1371; - if (yych <= 0x1F) goto yy1268; - goto yy1371; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1268; - goto yy1368; - } else { - if (yych == ':') goto yy1369; - goto yy1268; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') goto yy1373; - if (yych <= '>') goto yy1285; - if (yych <= '@') goto yy1268; - goto yy1369; - } else { - if (yych <= '_') { - if (yych <= '^') goto yy1268; - goto yy1369; - } else { - if (yych <= '`') goto yy1268; - if (yych <= 'z') goto yy1369; - goto yy1268; - } - } - } -yy1373: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1375; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) goto yy1268; - if (yych >= '!') goto yy1386; - } else { - if (yych <= '\'') goto yy1384; - if (yych <= 0xC1) goto yy1268; - if (yych <= 0xDF) goto yy1377; - goto yy1378; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1383; - goto yy1379; - } else { - if (yych <= 0xF0) goto yy1380; - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1375; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) goto yy1268; - if (yych <= ' ') goto yy1409; - if (yych <= '"') goto yy1386; - goto yy1384; - } else { - if (yych == '>') goto yy1285; - if (yych <= 0xC1) goto yy1268; - goto yy1377; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1378; - if (yych == 0xED) goto yy1383; - goto yy1379; - } else { - if (yych <= 0xF0) goto yy1380; - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } -yy1375: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1375; - } - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych <= 0x00) goto yy1268; - if (yych <= ' ') goto yy1403; - goto yy1268; - } else { - if (yych <= '>') goto yy1285; - if (yych <= 0xC1) goto yy1268; - if (yych >= 0xE0) goto yy1378; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1383; - goto yy1379; - } else { - if (yych <= 0xF0) goto yy1380; - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } -yy1377: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1375; - goto yy1268; -yy1378: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1377; - goto yy1268; -yy1379: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1377; - goto yy1268; -yy1380: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1379; - goto yy1268; -yy1381: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1379; - goto yy1268; -yy1382: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1379; - goto yy1268; -yy1383: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1377; - goto yy1268; -yy1384: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1384; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= '\'') goto yy1395; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1396; - if (yych <= 0xE0) goto yy1397; - goto yy1398; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1402; - if (yych <= 0xEF) goto yy1398; - goto yy1399; - } else { - if (yych <= 0xF3) goto yy1400; - if (yych <= 0xF4) goto yy1401; - goto yy1268; - } - } -yy1386: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1386; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1268; - if (yych <= '"') goto yy1395; - goto yy1268; - } else { - if (yych <= 0xDF) goto yy1388; - if (yych <= 0xE0) goto yy1389; - goto yy1390; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1394; - if (yych <= 0xEF) goto yy1390; - goto yy1391; - } else { - if (yych <= 0xF3) goto yy1392; - if (yych <= 0xF4) goto yy1393; - goto yy1268; - } - } -yy1388: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1386; - goto yy1268; -yy1389: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1388; - goto yy1268; -yy1390: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1388; - goto yy1268; -yy1391: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1390; - goto yy1268; -yy1392: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1390; - goto yy1268; -yy1393: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1390; - goto yy1268; -yy1394: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1388; - goto yy1268; -yy1395: - ++p; - yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy1268; - if (yych <= '\r') goto yy1366; - if (yych <= 0x1F) goto yy1268; - goto yy1366; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1268; - goto yy1368; - } else { - if (yych == '>') goto yy1285; - goto yy1268; - } - } -yy1396: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1384; - goto yy1268; -yy1397: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1268; - if (yych <= 0xBF) goto yy1396; - goto yy1268; -yy1398: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1396; - goto yy1268; -yy1399: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1268; - if (yych <= 0xBF) goto yy1398; - goto yy1268; -yy1400: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0xBF) goto yy1398; - goto yy1268; -yy1401: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x8F) goto yy1398; - goto yy1268; -yy1402: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1268; - if (yych <= 0x9F) goto yy1396; - goto yy1268; -yy1403: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) goto yy1268; - if (yych <= 0x08) goto yy1375; - goto yy1403; - } else { - if (yych == ' ') goto yy1403; - if (yych <= '!') goto yy1375; - goto yy1268; - } - } else { - if (yych <= ':') { - if (yych == '\'') goto yy1268; - if (yych <= '9') goto yy1375; - } else { - if (yych <= ';') goto yy1375; - if (yych <= '=') goto yy1268; - if (yych <= '>') goto yy1285; - goto yy1375; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') goto yy1405; - if (yych <= '^') goto yy1375; - if (yych >= '`') goto yy1268; - } else { - if (yych <= 'z') goto yy1405; - if (yych <= 0x7F) goto yy1375; - if (yych <= 0xC1) goto yy1268; - goto yy1377; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1378; - if (yych == 0xED) goto yy1383; - goto yy1379; - } else { - if (yych <= 0xF0) goto yy1380; - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } - } -yy1405: - ++p; - yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) goto yy1268; - if (yych <= 0x08) goto yy1375; - if (yych >= 0x0E) goto yy1375; - } else { - if (yych <= ' ') goto yy1407; - if (yych == '"') goto yy1268; - goto yy1375; - } - } else { - if (yych <= '/') { - if (yych <= '\'') goto yy1268; - if (yych <= ',') goto yy1375; - if (yych <= '.') goto yy1405; - goto yy1375; - } else { - if (yych <= ';') { - if (yych <= ':') goto yy1405; - goto yy1375; - } else { - if (yych <= '<') goto yy1268; - if (yych <= '=') goto yy1373; - goto yy1285; - } - } - } - } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') goto yy1375; - if (yych <= 'Z') goto yy1405; - if (yych <= '^') goto yy1375; - goto yy1405; - } else { - if (yych <= '`') goto yy1268; - if (yych <= 'z') goto yy1405; - if (yych <= 0x7F) goto yy1375; - goto yy1268; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1377; - if (yych <= 0xE0) goto yy1378; - if (yych <= 0xEC) goto yy1379; - goto yy1383; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1379; - goto yy1380; - } else { - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } - } - } -yy1407: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) goto yy1268; - if (yych <= 0x08) goto yy1375; - if (yych <= '\r') goto yy1407; - goto yy1375; - } else { - if (yych <= ' ') goto yy1407; - if (yych == '"') goto yy1268; - goto yy1375; - } - } else { - if (yych <= ';') { - if (yych <= '\'') goto yy1268; - if (yych == ':') goto yy1405; - goto yy1375; - } else { - if (yych <= '<') goto yy1268; - if (yych <= '=') goto yy1373; - if (yych <= '>') goto yy1285; - goto yy1375; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') goto yy1405; - if (yych <= '^') goto yy1375; - if (yych <= '_') goto yy1405; - goto yy1268; - } else { - if (yych <= 'z') goto yy1405; - if (yych <= 0x7F) goto yy1375; - if (yych <= 0xC1) goto yy1268; - goto yy1377; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1378; - if (yych == 0xED) goto yy1383; - goto yy1379; - } else { - if (yych <= 0xF0) goto yy1380; - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } - } -yy1409: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) goto yy1268; - if (yych <= 0x08) goto yy1375; - goto yy1409; - } else { - if (yych == ' ') goto yy1409; - if (yych <= '!') goto yy1375; - goto yy1386; - } - } else { - if (yych <= ':') { - if (yych == '\'') goto yy1384; - if (yych <= '9') goto yy1375; - goto yy1405; - } else { - if (yych <= ';') goto yy1375; - if (yych <= '=') goto yy1268; - if (yych <= '>') goto yy1285; - goto yy1375; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') goto yy1405; - if (yych <= '^') goto yy1375; - if (yych <= '_') goto yy1405; - goto yy1268; - } else { - if (yych <= 'z') goto yy1405; - if (yych <= 0x7F) goto yy1375; - if (yych <= 0xC1) goto yy1268; - goto yy1377; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1378; - if (yych == 0xED) goto yy1383; - goto yy1379; - } else { - if (yych <= 0xF0) goto yy1380; - if (yych <= 0xF3) goto yy1381; - if (yych <= 0xF4) goto yy1382; - goto yy1268; - } - } - } -} - + { + unsigned char yych; + static const unsigned char yybm[] = { + /* table 1 .. 8: 0 */ + 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, + 230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* table 9 .. 11: 256 */ + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 <= '`') { + if (yych <= '.') { + if (yych <= '\n') { + if (yych <= '\t') + goto yy1266; + } else { + if (yych == '!') + goto yy1264; + goto yy1266; + } + } else { + if (yych <= '?') { + if (yych <= '/') + goto yy1263; + if (yych <= '>') + goto yy1266; + goto yy1265; + } else { + if (yych <= '@') + goto yy1266; + if (yych <= 'Z') + goto yy1262; + goto yy1266; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 'z') + goto yy1262; + if (yych <= 0x7F) + goto yy1266; + } else { + if (yych <= 0xDF) + goto yy1267; + if (yych <= 0xE0) + goto yy1269; + goto yy1270; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1274; + if (yych <= 0xEF) + goto yy1270; + goto yy1271; + } else { + if (yych <= 0xF3) + goto yy1272; + if (yych <= 0xF4) + goto yy1273; + } + } + } + yy1261 : { return 0; } + yy1262: + yych = *(marker = ++p); + if (yych <= '/') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1261; + if (yych <= '\r') + goto yy1366; + if (yych <= 0x1F) + goto yy1261; + goto yy1366; + } else { + if (yych == '-') + goto yy1364; + if (yych <= '.') + goto yy1261; + goto yy1368; + } + } else { + if (yych <= '@') { + if (yych <= '9') + goto yy1364; + if (yych == '>') + goto yy1285; + goto yy1261; + } else { + if (yych <= 'Z') + goto yy1364; + if (yych <= '`') + goto yy1261; + if (yych <= 'z') + goto yy1364; + goto yy1261; + } + } + yy1263: + yych = *(marker = ++p); + if (yych <= '@') + goto yy1261; + if (yych <= 'Z') + goto yy1360; + if (yych <= '`') + goto yy1261; + if (yych <= 'z') + goto yy1360; + goto yy1261; + yy1264: + yych = *(marker = ++p); + if (yybm[256 + yych] & 64) { + goto yy1295; + } + if (yych == '-') + goto yy1297; + if (yych <= '@') + goto yy1261; + if (yych <= '[') + goto yy1294; + goto yy1261; + yy1265: + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy1261; + if (yych <= 0x7F) + goto yy1276; + if (yych <= 0xC1) + goto yy1261; + if (yych <= 0xF4) + goto yy1276; + goto yy1261; + yy1266: + yych = *++p; + goto yy1261; + yy1267: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1266; + yy1268: + p = marker; + goto yy1261; + yy1269: + yych = *++p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1267; + goto yy1268; + yy1270: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1267; + goto yy1268; + yy1271: + yych = *++p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1270; + goto yy1268; + yy1272: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1270; + goto yy1268; + yy1273: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1270; + goto yy1268; + yy1274: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1267; + goto yy1268; + yy1275: + ++p; + yych = *p; + yy1276: + if (yybm[256 + yych] & 32) { + goto yy1275; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= '?') + goto yy1284; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1277; + if (yych <= 0xE0) + goto yy1278; + goto yy1279; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1283; + if (yych <= 0xEF) + goto yy1279; + goto yy1280; + } else { + if (yych <= 0xF3) + goto yy1281; + if (yych <= 0xF4) + goto yy1282; + goto yy1268; + } + } + yy1277: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1275; + goto yy1268; + yy1278: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1277; + goto yy1268; + yy1279: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1277; + goto yy1268; + yy1280: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1279; + goto yy1268; + yy1281: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1279; + goto yy1268; + yy1282: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1279; + goto yy1268; + yy1283: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1277; + goto yy1268; + yy1284: + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy1268; + if (yych <= '=') + goto yy1275; + } else { + if (yych <= 0x7F) + goto yy1275; + if (yych <= 0xC1) + goto yy1268; + if (yych <= 0xDF) + goto yy1287; + goto yy1288; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1293; + goto yy1289; + } else { + if (yych <= 0xF0) + goto yy1290; + if (yych <= 0xF3) + goto yy1291; + if (yych <= 0xF4) + goto yy1292; + goto yy1268; + } + } + yy1285: + ++p; + { return (bufsize_t)(p - start); } + yy1287: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1275; + goto yy1268; + yy1288: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1287; + goto yy1268; + yy1289: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1287; + goto yy1268; + yy1290: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1289; + goto yy1268; + yy1291: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1289; + goto yy1268; + yy1292: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1289; + goto yy1268; + yy1293: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1287; + goto yy1268; + yy1294: + yych = *++p; + if (yych == 'C') + goto yy1330; + if (yych == 'c') + goto yy1330; + goto yy1268; + yy1295: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy1319; + } + if (yych <= '@') + goto yy1268; + if (yych <= 'Z') + goto yy1295; + goto yy1268; + yy1297: + yych = *++p; + if (yych != '-') + goto yy1268; + yych = *++p; + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych != '-') + goto yy1301; + } else { + if (yych <= '>') + goto yy1268; + if (yych <= 0xC1) + goto yy1301; + if (yych <= 0xDF) + goto yy1302; + goto yy1303; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1308; + goto yy1304; + } else { + if (yych <= 0xF0) + goto yy1305; + if (yych <= 0xF3) + goto yy1306; + if (yych <= 0xF4) + goto yy1307; + goto yy1301; + } + } + yych = *++p; + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych == '-') + goto yy1318; + goto yy1301; + } else { + if (yych <= '>') + goto yy1268; + if (yych <= 0xC1) + goto yy1301; + if (yych <= 0xDF) + goto yy1302; + goto yy1303; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1308; + goto yy1304; + } else { + if (yych <= 0xF0) + goto yy1305; + if (yych <= 0xF3) + goto yy1306; + if (yych <= 0xF4) + goto yy1307; + goto yy1301; + } + } + yy1300: + ++p; + yych = *p; + yy1301: + if (yybm[256 + yych] & 128) { + goto yy1300; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= '-') + goto yy1309; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1310; + if (yych <= 0xE0) + goto yy1311; + goto yy1312; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1316; + if (yych <= 0xEF) + goto yy1312; + goto yy1313; + } else { + if (yych <= 0xF3) + goto yy1314; + if (yych <= 0xF4) + goto yy1315; + goto yy1268; + } + } + yy1302: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1300; + goto yy1268; + yy1303: + yych = *++p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1302; + goto yy1268; + yy1304: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1302; + goto yy1268; + yy1305: + yych = *++p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1304; + goto yy1268; + yy1306: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1304; + goto yy1268; + yy1307: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1304; + goto yy1268; + yy1308: + yych = *++p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1302; + goto yy1268; + yy1309: + ++p; + yych = *p; + if (yybm[256 + yych] & 128) { + goto yy1300; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= '-') + goto yy1317; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1310; + if (yych <= 0xE0) + goto yy1311; + goto yy1312; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1316; + if (yych <= 0xEF) + goto yy1312; + goto yy1313; + } else { + if (yych <= 0xF3) + goto yy1314; + if (yych <= 0xF4) + goto yy1315; + goto yy1268; + } + } + yy1310: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1300; + goto yy1268; + yy1311: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1310; + goto yy1268; + yy1312: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1310; + goto yy1268; + yy1313: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1312; + goto yy1268; + yy1314: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1312; + goto yy1268; + yy1315: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1312; + goto yy1268; + yy1316: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1310; + goto yy1268; + yy1317: + yych = *++p; + if (yych == '>') + goto yy1285; + goto yy1268; + yy1318: + yych = *++p; + if (yych == '>') + goto yy1285; + goto yy1268; + yy1319: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy1319; + } + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy1268; + if (yych >= '>') + goto yy1285; + } else { + if (yych <= 0x7F) + goto yy1321; + if (yych <= 0xC1) + goto yy1268; + if (yych <= 0xDF) + goto yy1323; + goto yy1324; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1329; + goto yy1325; + } else { + if (yych <= 0xF0) + goto yy1326; + if (yych <= 0xF3) + goto yy1327; + if (yych <= 0xF4) + goto yy1328; + goto yy1268; + } + } + yy1321: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy1321; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= '>') + goto yy1285; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1323; + if (yych <= 0xE0) + goto yy1324; + goto yy1325; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1329; + if (yych <= 0xEF) + goto yy1325; + goto yy1326; + } else { + if (yych <= 0xF3) + goto yy1327; + if (yych <= 0xF4) + goto yy1328; + goto yy1268; + } + } + yy1323: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1321; + goto yy1268; + yy1324: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1323; + goto yy1268; + yy1325: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1323; + goto yy1268; + yy1326: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1325; + goto yy1268; + yy1327: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1325; + goto yy1268; + yy1328: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1325; + goto yy1268; + yy1329: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1323; + goto yy1268; + yy1330: + yych = *++p; + if (yych == 'D') + goto yy1331; + if (yych != 'd') + goto yy1268; + yy1331: + yych = *++p; + if (yych == 'A') + goto yy1332; + if (yych != 'a') + goto yy1268; + yy1332: + yych = *++p; + if (yych == 'T') + goto yy1333; + if (yych != 't') + goto yy1268; + yy1333: + yych = *++p; + if (yych == 'A') + goto yy1334; + if (yych != 'a') + goto yy1268; + yy1334: + yych = *++p; + if (yych != '[') + goto yy1268; + yy1335: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy1335; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= ']') + goto yy1344; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1337; + if (yych <= 0xE0) + goto yy1338; + goto yy1339; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1343; + if (yych <= 0xEF) + goto yy1339; + goto yy1340; + } else { + if (yych <= 0xF3) + goto yy1341; + if (yych <= 0xF4) + goto yy1342; + goto yy1268; + } + } + yy1337: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1335; + goto yy1268; + yy1338: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1337; + goto yy1268; + yy1339: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1337; + goto yy1268; + yy1340: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1339; + goto yy1268; + yy1341: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1339; + goto yy1268; + yy1342: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1339; + goto yy1268; + yy1343: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1337; + goto yy1268; + yy1344: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy1335; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych >= '^') + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1346; + if (yych <= 0xE0) + goto yy1347; + goto yy1348; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1352; + if (yych <= 0xEF) + goto yy1348; + goto yy1349; + } else { + if (yych <= 0xF3) + goto yy1350; + if (yych <= 0xF4) + goto yy1351; + goto yy1268; + } + } + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy1268; + if (yych <= '=') + goto yy1335; + goto yy1285; + } else { + if (yych <= 0x7F) + goto yy1335; + if (yych <= 0xC1) + goto yy1268; + if (yych <= 0xDF) + goto yy1353; + goto yy1354; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1359; + goto yy1355; + } else { + if (yych <= 0xF0) + goto yy1356; + if (yych <= 0xF3) + goto yy1357; + if (yych <= 0xF4) + goto yy1358; + goto yy1268; + } + } + yy1346: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1335; + goto yy1268; + yy1347: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1346; + goto yy1268; + yy1348: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1346; + goto yy1268; + yy1349: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1348; + goto yy1268; + yy1350: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1348; + goto yy1268; + yy1351: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1348; + goto yy1268; + yy1352: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1346; + goto yy1268; + yy1353: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1335; + goto yy1268; + yy1354: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1353; + goto yy1268; + yy1355: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1353; + goto yy1268; + yy1356: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1355; + goto yy1268; + yy1357: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1355; + goto yy1268; + yy1358: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1355; + goto yy1268; + yy1359: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1353; + goto yy1268; + yy1360: + ++p; + yych = *p; + if (yybm[0 + yych] & 8) { + goto yy1360; + } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1268; + if (yych >= 0x0E) + goto yy1268; + } else { + if (yych <= ' ') + goto yy1362; + if (yych == '>') + goto yy1285; + goto yy1268; + } + yy1362: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1268; + if (yych <= '\r') + goto yy1362; + goto yy1268; + } else { + if (yych <= ' ') + goto yy1362; + if (yych == '>') + goto yy1285; + goto yy1268; + } + yy1364: + ++p; + yych = *p; + if (yych <= '/') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1268; + if (yych <= '\r') + goto yy1366; + if (yych <= 0x1F) + goto yy1268; + } else { + if (yych == '-') + goto yy1364; + if (yych <= '.') + goto yy1268; + goto yy1368; + } + } else { + if (yych <= '@') { + if (yych <= '9') + goto yy1364; + if (yych == '>') + goto yy1285; + goto yy1268; + } else { + if (yych <= 'Z') + goto yy1364; + if (yych <= '`') + goto yy1268; + if (yych <= 'z') + goto yy1364; + goto yy1268; + } + } + yy1366: + ++p; + yych = *p; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1268; + if (yych <= '\r') + goto yy1366; + if (yych <= 0x1F) + goto yy1268; + goto yy1366; + } else { + if (yych == '/') + goto yy1368; + if (yych <= '9') + goto yy1268; + goto yy1369; + } + } else { + if (yych <= 'Z') { + if (yych == '>') + goto yy1285; + if (yych <= '@') + goto yy1268; + goto yy1369; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy1268; + goto yy1369; + } else { + if (yych <= '`') + goto yy1268; + if (yych <= 'z') + goto yy1369; + goto yy1268; + } + } + } + yy1368: + yych = *++p; + if (yych == '>') + goto yy1285; + goto yy1268; + yy1369: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy1369; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy1268; + } else { + if (yych != ' ') + goto yy1268; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy1368; + goto yy1268; + } else { + if (yych <= '=') + goto yy1373; + if (yych <= '>') + goto yy1285; + goto yy1268; + } + } + yy1371: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1268; + if (yych <= '\r') + goto yy1371; + if (yych <= 0x1F) + goto yy1268; + goto yy1371; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1268; + goto yy1368; + } else { + if (yych == ':') + goto yy1369; + goto yy1268; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') + goto yy1373; + if (yych <= '>') + goto yy1285; + if (yych <= '@') + goto yy1268; + goto yy1369; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy1268; + goto yy1369; + } else { + if (yych <= '`') + goto yy1268; + if (yych <= 'z') + goto yy1369; + goto yy1268; + } + } + } + yy1373: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1375; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy1268; + if (yych >= '!') + goto yy1386; + } else { + if (yych <= '\'') + goto yy1384; + if (yych <= 0xC1) + goto yy1268; + if (yych <= 0xDF) + goto yy1377; + goto yy1378; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) + goto yy1380; + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1375; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy1268; + if (yych <= ' ') + goto yy1409; + if (yych <= '"') + goto yy1386; + goto yy1384; + } else { + if (yych == '>') + goto yy1285; + if (yych <= 0xC1) + goto yy1268; + goto yy1377; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1378; + if (yych == 0xED) + goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) + goto yy1380; + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + yy1375: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1375; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy1268; + if (yych <= ' ') + goto yy1403; + goto yy1268; + } else { + if (yych <= '>') + goto yy1285; + if (yych <= 0xC1) + goto yy1268; + if (yych >= 0xE0) + goto yy1378; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) + goto yy1380; + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + yy1377: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1375; + goto yy1268; + yy1378: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1377; + goto yy1268; + yy1379: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1377; + goto yy1268; + yy1380: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1379; + goto yy1268; + yy1381: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1379; + goto yy1268; + yy1382: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1379; + goto yy1268; + yy1383: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1377; + goto yy1268; + yy1384: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1384; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= '\'') + goto yy1395; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1396; + if (yych <= 0xE0) + goto yy1397; + goto yy1398; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1402; + if (yych <= 0xEF) + goto yy1398; + goto yy1399; + } else { + if (yych <= 0xF3) + goto yy1400; + if (yych <= 0xF4) + goto yy1401; + goto yy1268; + } + } + yy1386: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1386; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1268; + if (yych <= '"') + goto yy1395; + goto yy1268; + } else { + if (yych <= 0xDF) + goto yy1388; + if (yych <= 0xE0) + goto yy1389; + goto yy1390; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1394; + if (yych <= 0xEF) + goto yy1390; + goto yy1391; + } else { + if (yych <= 0xF3) + goto yy1392; + if (yych <= 0xF4) + goto yy1393; + goto yy1268; + } + } + yy1388: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1386; + goto yy1268; + yy1389: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1388; + goto yy1268; + yy1390: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1388; + goto yy1268; + yy1391: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1390; + goto yy1268; + yy1392: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1390; + goto yy1268; + yy1393: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1390; + goto yy1268; + yy1394: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1388; + goto yy1268; + yy1395: + ++p; + yych = *p; + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1268; + if (yych <= '\r') + goto yy1366; + if (yych <= 0x1F) + goto yy1268; + goto yy1366; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1268; + goto yy1368; + } else { + if (yych == '>') + goto yy1285; + goto yy1268; + } + } + yy1396: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1384; + goto yy1268; + yy1397: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1268; + if (yych <= 0xBF) + goto yy1396; + goto yy1268; + yy1398: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1396; + goto yy1268; + yy1399: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1268; + if (yych <= 0xBF) + goto yy1398; + goto yy1268; + yy1400: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0xBF) + goto yy1398; + goto yy1268; + yy1401: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x8F) + goto yy1398; + goto yy1268; + yy1402: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1268; + if (yych <= 0x9F) + goto yy1396; + goto yy1268; + yy1403: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy1268; + if (yych <= 0x08) + goto yy1375; + goto yy1403; + } else { + if (yych == ' ') + goto yy1403; + if (yych <= '!') + goto yy1375; + goto yy1268; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy1268; + if (yych <= '9') + goto yy1375; + } else { + if (yych <= ';') + goto yy1375; + if (yych <= '=') + goto yy1268; + if (yych <= '>') + goto yy1285; + goto yy1375; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy1405; + if (yych <= '^') + goto yy1375; + if (yych >= '`') + goto yy1268; + } else { + if (yych <= 'z') + goto yy1405; + if (yych <= 0x7F) + goto yy1375; + if (yych <= 0xC1) + goto yy1268; + goto yy1377; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1378; + if (yych == 0xED) + goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) + goto yy1380; + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + } + yy1405: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy1268; + if (yych <= 0x08) + goto yy1375; + if (yych >= 0x0E) + goto yy1375; + } else { + if (yych <= ' ') + goto yy1407; + if (yych == '"') + goto yy1268; + goto yy1375; + } + } else { + if (yych <= '/') { + if (yych <= '\'') + goto yy1268; + if (yych <= ',') + goto yy1375; + if (yych <= '.') + goto yy1405; + goto yy1375; + } else { + if (yych <= ';') { + if (yych <= ':') + goto yy1405; + goto yy1375; + } else { + if (yych <= '<') + goto yy1268; + if (yych <= '=') + goto yy1373; + goto yy1285; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy1375; + if (yych <= 'Z') + goto yy1405; + if (yych <= '^') + goto yy1375; + goto yy1405; + } else { + if (yych <= '`') + goto yy1268; + if (yych <= 'z') + goto yy1405; + if (yych <= 0x7F) + goto yy1375; + goto yy1268; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1377; + if (yych <= 0xE0) + goto yy1378; + if (yych <= 0xEC) + goto yy1379; + goto yy1383; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1379; + goto yy1380; + } else { + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + } + } + yy1407: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy1268; + if (yych <= 0x08) + goto yy1375; + if (yych <= '\r') + goto yy1407; + goto yy1375; + } else { + if (yych <= ' ') + goto yy1407; + if (yych == '"') + goto yy1268; + goto yy1375; + } + } else { + if (yych <= ';') { + if (yych <= '\'') + goto yy1268; + if (yych == ':') + goto yy1405; + goto yy1375; + } else { + if (yych <= '<') + goto yy1268; + if (yych <= '=') + goto yy1373; + if (yych <= '>') + goto yy1285; + goto yy1375; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy1405; + if (yych <= '^') + goto yy1375; + if (yych <= '_') + goto yy1405; + goto yy1268; + } else { + if (yych <= 'z') + goto yy1405; + if (yych <= 0x7F) + goto yy1375; + if (yych <= 0xC1) + goto yy1268; + goto yy1377; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1378; + if (yych == 0xED) + goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) + goto yy1380; + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + } + yy1409: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy1268; + if (yych <= 0x08) + goto yy1375; + goto yy1409; + } else { + if (yych == ' ') + goto yy1409; + if (yych <= '!') + goto yy1375; + goto yy1386; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy1384; + if (yych <= '9') + goto yy1375; + goto yy1405; + } else { + if (yych <= ';') + goto yy1375; + if (yych <= '=') + goto yy1268; + if (yych <= '>') + goto yy1285; + goto yy1375; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy1405; + if (yych <= '^') + goto yy1375; + if (yych <= '_') + goto yy1405; + goto yy1268; + } else { + if (yych <= 'z') + goto yy1405; + if (yych <= 0x7F) + goto yy1375; + if (yych <= 0xC1) + goto yy1268; + goto yy1377; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1378; + if (yych == 0xED) + goto yy1383; + goto yy1379; + } else { + if (yych <= 0xF0) + goto yy1380; + if (yych <= 0xF3) + goto yy1381; + if (yych <= 0xF4) + goto yy1382; + goto yy1268; + } + } + } + } } // Try to match an HTML block tag start line, returning // an integer code for the type of block (1-6, matching the spec). // #7 is handled by a separate function, below. -bufsize_t _scan_html_block_start(const unsigned char *p) -{ +bufsize_t _scan_html_block_start(const unsigned char *p) { const unsigned char *marker = NULL; -{ - unsigned char yych; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= ';') { - if (yych != '\n') goto yy1415; - } else { - if (yych <= '<') goto yy1414; - if (yych <= 0x7F) goto yy1415; - if (yych >= 0xC2) goto yy1416; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1418; - if (yych == 0xED) goto yy1423; - goto yy1419; - } else { - if (yych <= 0xF0) goto yy1420; - if (yych <= 0xF3) goto yy1421; - if (yych <= 0xF4) goto yy1422; - } - } -yy1413: - { return 0; } -yy1414: - yych = *(marker = ++p); - switch (yych) { - case '!': goto yy1439; - case '/': goto yy1424; - case '?': goto yy1440; - case 'A': - case 'a': goto yy1426; - case 'B': - case 'b': goto yy1427; - case 'C': - case 'c': goto yy1428; - case 'D': - case 'd': goto yy1429; - case 'F': - case 'f': goto yy1430; - case 'H': - case 'h': goto yy1431; - case 'L': - case 'l': goto yy1432; - case 'M': - case 'm': goto yy1433; - case 'N': - case 'n': goto yy1434; - case 'O': - case 'o': goto yy1435; - case 'P': - case 'p': goto yy1425; - case 'S': - case 's': goto yy1436; - case 'T': - case 't': goto yy1437; - case 'U': - case 'u': goto yy1438; - default: goto yy1413; - } -yy1415: - yych = *++p; - goto yy1413; -yy1416: - yych = *++p; - if (yych <= 0x7F) goto yy1417; - if (yych <= 0xBF) goto yy1415; -yy1417: - p = marker; - goto yy1413; -yy1418: - yych = *++p; - if (yych <= 0x9F) goto yy1417; - if (yych <= 0xBF) goto yy1416; - goto yy1417; -yy1419: - yych = *++p; - if (yych <= 0x7F) goto yy1417; - if (yych <= 0xBF) goto yy1416; - goto yy1417; -yy1420: - yych = *++p; - if (yych <= 0x8F) goto yy1417; - if (yych <= 0xBF) goto yy1419; - goto yy1417; -yy1421: - yych = *++p; - if (yych <= 0x7F) goto yy1417; - if (yych <= 0xBF) goto yy1419; - goto yy1417; -yy1422: - yych = *++p; - if (yych <= 0x7F) goto yy1417; - if (yych <= 0x8F) goto yy1419; - goto yy1417; -yy1423: - yych = *++p; - if (yych <= 0x7F) goto yy1417; - if (yych <= 0x9F) goto yy1416; - goto yy1417; -yy1424: - yych = *++p; - switch (yych) { - case 'A': - case 'a': goto yy1426; - case 'B': - case 'b': goto yy1427; - case 'C': - case 'c': goto yy1428; - case 'D': - case 'd': goto yy1429; - case 'F': - case 'f': goto yy1430; - case 'H': - case 'h': goto yy1431; - case 'L': - case 'l': goto yy1432; - case 'M': - case 'm': goto yy1433; - case 'N': - case 'n': goto yy1434; - case 'O': - case 'o': goto yy1435; - case 'P': - case 'p': goto yy1622; - case 'S': - case 's': goto yy1623; - case 'T': - case 't': goto yy1437; - case 'U': - case 'u': goto yy1438; - default: goto yy1417; - } -yy1425: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - if (yych <= 0x1F) goto yy1417; - goto yy1456; - } else { - if (yych == '/') goto yy1458; - if (yych <= '=') goto yy1417; - goto yy1456; - } - } else { - if (yych <= 'R') { - if (yych == 'A') goto yy1617; - if (yych <= 'Q') goto yy1417; - goto yy1616; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy1417; - goto yy1617; - } else { - if (yych == 'r') goto yy1616; - goto yy1417; - } - } - } -yy1426: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'D') { - if (yych <= 'C') goto yy1417; - goto yy1605; - } else { - if (yych <= 'Q') goto yy1417; - if (yych <= 'R') goto yy1604; - goto yy1603; - } - } else { - if (yych <= 'q') { - if (yych == 'd') goto yy1605; - goto yy1417; - } else { - if (yych <= 'r') goto yy1604; - if (yych <= 's') goto yy1603; - goto yy1417; - } - } -yy1427: - yych = *++p; - if (yych <= 'O') { - if (yych <= 'K') { - if (yych == 'A') goto yy1589; - goto yy1417; - } else { - if (yych <= 'L') goto yy1588; - if (yych <= 'N') goto yy1417; - goto yy1587; - } - } else { - if (yych <= 'k') { - if (yych == 'a') goto yy1589; - goto yy1417; - } else { - if (yych <= 'l') goto yy1588; - if (yych == 'o') goto yy1587; - goto yy1417; - } - } -yy1428: - yych = *++p; - if (yych <= 'O') { - if (yych <= 'D') { - if (yych == 'A') goto yy1574; - goto yy1417; - } else { - if (yych <= 'E') goto yy1573; - if (yych <= 'N') goto yy1417; - goto yy1572; - } - } else { - if (yych <= 'd') { - if (yych == 'a') goto yy1574; - goto yy1417; - } else { - if (yych <= 'e') goto yy1573; - if (yych == 'o') goto yy1572; - goto yy1417; - } - } -yy1429: - yych = *++p; - switch (yych) { - case 'D': - case 'L': - case 'T': - case 'd': - case 'l': - case 't': goto yy1455; - case 'E': - case 'e': goto yy1564; - case 'I': - case 'i': goto yy1563; - default: goto yy1417; - } -yy1430: - yych = *++p; - if (yych <= 'R') { - if (yych <= 'N') { - if (yych == 'I') goto yy1539; - goto yy1417; - } else { - if (yych <= 'O') goto yy1538; - if (yych <= 'Q') goto yy1417; - goto yy1537; - } - } else { - if (yych <= 'n') { - if (yych == 'i') goto yy1539; - goto yy1417; - } else { - if (yych <= 'o') goto yy1538; - if (yych == 'r') goto yy1537; - goto yy1417; - } - } -yy1431: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'D') { - if (yych == '1') goto yy1455; - goto yy1417; - } else { - if (yych <= 'E') goto yy1532; - if (yych == 'R') goto yy1455; - goto yy1417; - } - } else { - if (yych <= 'q') { - if (yych <= 'T') goto yy1531; - if (yych == 'e') goto yy1532; - goto yy1417; - } else { - if (yych <= 'r') goto yy1455; - if (yych == 't') goto yy1531; - goto yy1417; - } - } -yy1432: - yych = *++p; - if (yych <= 'I') { - if (yych == 'E') goto yy1526; - if (yych <= 'H') goto yy1417; - goto yy1525; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy1417; - goto yy1526; - } else { - if (yych == 'i') goto yy1525; - goto yy1417; - } - } -yy1433: - yych = *++p; - if (yych <= 'E') { - if (yych == 'A') goto yy1517; - if (yych <= 'D') goto yy1417; - goto yy1516; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy1417; - goto yy1517; - } else { - if (yych == 'e') goto yy1516; - goto yy1417; - } - } -yy1434: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') goto yy1510; - if (yych <= 'N') goto yy1417; - goto yy1509; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy1417; - goto yy1510; - } else { - if (yych == 'o') goto yy1509; - goto yy1417; - } - } -yy1435: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') goto yy1455; - if (yych <= 'O') goto yy1417; - goto yy1501; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy1417; - goto yy1455; - } else { - if (yych == 'p') goto yy1501; - goto yy1417; - } - } -yy1436: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'E') { - if (yych == 'C') goto yy1478; - if (yych <= 'D') goto yy1417; - goto yy1481; - } else { - if (yych <= 'O') { - if (yych <= 'N') goto yy1417; - goto yy1480; - } else { - if (yych <= 'S') goto yy1417; - if (yych <= 'T') goto yy1477; - goto yy1479; - } - } - } else { - if (yych <= 'n') { - if (yych <= 'c') { - if (yych <= 'b') goto yy1417; - goto yy1478; - } else { - if (yych == 'e') goto yy1481; - goto yy1417; - } - } else { - if (yych <= 's') { - if (yych <= 'o') goto yy1480; - goto yy1417; - } else { - if (yych <= 't') goto yy1477; - if (yych <= 'u') goto yy1479; - goto yy1417; - } - } - } -yy1437: - yych = *++p; - switch (yych) { - case 'A': - case 'a': goto yy1464; - case 'B': - case 'b': goto yy1463; - case 'D': - case 'd': goto yy1455; - case 'F': - case 'f': goto yy1462; - case 'H': - case 'h': goto yy1461; - case 'I': - case 'i': goto yy1460; - case 'R': - case 'r': goto yy1459; - default: goto yy1417; - } -yy1438: - yych = *++p; - if (yych == 'L') goto yy1455; - if (yych == 'l') goto yy1455; - goto yy1417; -yy1439: - yych = *++p; - if (yych <= '@') { - if (yych == '-') goto yy1442; - goto yy1417; - } else { - if (yych <= 'Z') goto yy1443; - if (yych <= '[') goto yy1445; - goto yy1417; - } -yy1440: - ++p; - { return 3; } -yy1442: - yych = *++p; - if (yych == '-') goto yy1453; - goto yy1417; -yy1443: - ++p; - { return 4; } -yy1445: - yych = *++p; - if (yych == 'C') goto yy1446; - if (yych != 'c') goto yy1417; -yy1446: - yych = *++p; - if (yych == 'D') goto yy1447; - if (yych != 'd') goto yy1417; -yy1447: - yych = *++p; - if (yych == 'A') goto yy1448; - if (yych != 'a') goto yy1417; -yy1448: - yych = *++p; - if (yych == 'T') goto yy1449; - if (yych != 't') goto yy1417; -yy1449: - yych = *++p; - if (yych == 'A') goto yy1450; - if (yych != 'a') goto yy1417; -yy1450: - yych = *++p; - if (yych != '[') goto yy1417; - ++p; - { return 5; } -yy1453: - ++p; - { return 2; } -yy1455: - yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - if (yych <= 0x1F) goto yy1417; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1417; - goto yy1458; - } else { - if (yych != '>') goto yy1417; - } - } -yy1456: - ++p; - { return 6; } -yy1458: - yych = *++p; - if (yych == '>') goto yy1456; - goto yy1417; -yy1459: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= '@') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'A') goto yy1475; - if (yych == 'a') goto yy1475; - goto yy1417; - } - } -yy1460: - yych = *++p; - if (yych == 'T') goto yy1473; - if (yych == 't') goto yy1473; - goto yy1417; -yy1461: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'D') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'E') goto yy1471; - if (yych == 'e') goto yy1471; - goto yy1417; - } - } -yy1462: - yych = *++p; - if (yych == 'O') goto yy1469; - if (yych == 'o') goto yy1469; - goto yy1417; -yy1463: - yych = *++p; - if (yych == 'O') goto yy1467; - if (yych == 'o') goto yy1467; - goto yy1417; -yy1464: - yych = *++p; - if (yych == 'B') goto yy1465; - if (yych != 'b') goto yy1417; -yy1465: - yych = *++p; - if (yych == 'L') goto yy1466; - if (yych != 'l') goto yy1417; -yy1466: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1467: - yych = *++p; - if (yych == 'D') goto yy1468; - if (yych != 'd') goto yy1417; -yy1468: - yych = *++p; - if (yych == 'Y') goto yy1455; - if (yych == 'y') goto yy1455; - goto yy1417; -yy1469: - yych = *++p; - if (yych == 'O') goto yy1470; - if (yych != 'o') goto yy1417; -yy1470: - yych = *++p; - if (yych == 'T') goto yy1455; - if (yych == 't') goto yy1455; - goto yy1417; -yy1471: - yych = *++p; - if (yych == 'A') goto yy1472; - if (yych != 'a') goto yy1417; -yy1472: - yych = *++p; - if (yych == 'D') goto yy1455; - if (yych == 'd') goto yy1455; - goto yy1417; -yy1473: - yych = *++p; - if (yych == 'L') goto yy1474; - if (yych != 'l') goto yy1417; -yy1474: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1475: - yych = *++p; - if (yych == 'C') goto yy1476; - if (yych != 'c') goto yy1417; -yy1476: - yych = *++p; - if (yych == 'K') goto yy1455; - if (yych == 'k') goto yy1455; - goto yy1417; -yy1477: - yych = *++p; - if (yych == 'Y') goto yy1499; - if (yych == 'y') goto yy1499; - goto yy1417; -yy1478: - yych = *++p; - if (yych == 'R') goto yy1493; - if (yych == 'r') goto yy1493; - goto yy1417; -yy1479: - yych = *++p; - if (yych == 'M') goto yy1489; - if (yych == 'm') goto yy1489; - goto yy1417; -yy1480: - yych = *++p; - if (yych == 'U') goto yy1486; - if (yych == 'u') goto yy1486; - goto yy1417; -yy1481: - yych = *++p; - if (yych == 'C') goto yy1482; - if (yych != 'c') goto yy1417; -yy1482: - yych = *++p; - if (yych == 'T') goto yy1483; - if (yych != 't') goto yy1417; -yy1483: - yych = *++p; - if (yych == 'I') goto yy1484; - if (yych != 'i') goto yy1417; -yy1484: - yych = *++p; - if (yych == 'O') goto yy1485; - if (yych != 'o') goto yy1417; -yy1485: - yych = *++p; - if (yych == 'N') goto yy1455; - if (yych == 'n') goto yy1455; - goto yy1417; -yy1486: - yych = *++p; - if (yych == 'R') goto yy1487; - if (yych != 'r') goto yy1417; -yy1487: - yych = *++p; - if (yych == 'C') goto yy1488; - if (yych != 'c') goto yy1417; -yy1488: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1489: - yych = *++p; - if (yych == 'M') goto yy1490; - if (yych != 'm') goto yy1417; -yy1490: - yych = *++p; - if (yych == 'A') goto yy1491; - if (yych != 'a') goto yy1417; -yy1491: - yych = *++p; - if (yych == 'R') goto yy1492; - if (yych != 'r') goto yy1417; -yy1492: - yych = *++p; - if (yych == 'Y') goto yy1455; - if (yych == 'y') goto yy1455; - goto yy1417; -yy1493: - yych = *++p; - if (yych == 'I') goto yy1494; - if (yych != 'i') goto yy1417; -yy1494: - yych = *++p; - if (yych == 'P') goto yy1495; - if (yych != 'p') goto yy1417; -yy1495: - yych = *++p; - if (yych == 'T') goto yy1496; - if (yych != 't') goto yy1417; -yy1496: - yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych >= 0x0E) goto yy1417; - } else { - if (yych <= ' ') goto yy1497; - if (yych != '>') goto yy1417; - } -yy1497: - ++p; -yy1498: - { return 1; } -yy1499: - yych = *++p; - if (yych == 'L') goto yy1500; - if (yych != 'l') goto yy1417; -yy1500: - yych = *++p; - if (yych == 'E') goto yy1496; - if (yych == 'e') goto yy1496; - goto yy1417; -yy1501: - yych = *++p; - if (yych == 'T') goto yy1502; - if (yych != 't') goto yy1417; -yy1502: - yych = *++p; - if (yych <= 'I') { - if (yych == 'G') goto yy1504; - if (yych <= 'H') goto yy1417; - } else { - if (yych <= 'g') { - if (yych <= 'f') goto yy1417; - goto yy1504; - } else { - if (yych != 'i') goto yy1417; - } - } - yych = *++p; - if (yych == 'O') goto yy1508; - if (yych == 'o') goto yy1508; - goto yy1417; -yy1504: - yych = *++p; - if (yych == 'R') goto yy1505; - if (yych != 'r') goto yy1417; -yy1505: - yych = *++p; - if (yych == 'O') goto yy1506; - if (yych != 'o') goto yy1417; -yy1506: - yych = *++p; - if (yych == 'U') goto yy1507; - if (yych != 'u') goto yy1417; -yy1507: - yych = *++p; - if (yych == 'P') goto yy1455; - if (yych == 'p') goto yy1455; - goto yy1417; -yy1508: - yych = *++p; - if (yych == 'N') goto yy1455; - if (yych == 'n') goto yy1455; - goto yy1417; -yy1509: - yych = *++p; - if (yych == 'F') goto yy1511; - if (yych == 'f') goto yy1511; - goto yy1417; -yy1510: - yych = *++p; - if (yych == 'V') goto yy1455; - if (yych == 'v') goto yy1455; - goto yy1417; -yy1511: - yych = *++p; - if (yych == 'R') goto yy1512; - if (yych != 'r') goto yy1417; -yy1512: - yych = *++p; - if (yych == 'A') goto yy1513; - if (yych != 'a') goto yy1417; -yy1513: - yych = *++p; - if (yych == 'M') goto yy1514; - if (yych != 'm') goto yy1417; -yy1514: - yych = *++p; - if (yych == 'E') goto yy1515; - if (yych != 'e') goto yy1417; -yy1515: - yych = *++p; - if (yych == 'S') goto yy1455; - if (yych == 's') goto yy1455; - goto yy1417; -yy1516: - yych = *++p; - if (yych <= 'T') { - if (yych == 'N') goto yy1519; - if (yych <= 'S') goto yy1417; - goto yy1520; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy1417; - goto yy1519; - } else { - if (yych == 't') goto yy1520; - goto yy1417; - } - } -yy1517: - yych = *++p; - if (yych == 'I') goto yy1518; - if (yych != 'i') goto yy1417; -yy1518: - yych = *++p; - if (yych == 'N') goto yy1455; - if (yych == 'n') goto yy1455; - goto yy1417; -yy1519: - yych = *++p; - if (yych == 'U') goto yy1521; - if (yych == 'u') goto yy1521; - goto yy1417; -yy1520: - yych = *++p; - if (yych == 'A') goto yy1455; - if (yych == 'a') goto yy1455; - goto yy1417; -yy1521: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'H') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'I') goto yy1522; - if (yych != 'i') goto yy1417; - } - } -yy1522: - yych = *++p; - if (yych == 'T') goto yy1523; - if (yych != 't') goto yy1417; -yy1523: - yych = *++p; - if (yych == 'E') goto yy1524; - if (yych != 'e') goto yy1417; -yy1524: - yych = *++p; - if (yych == 'M') goto yy1455; - if (yych == 'm') goto yy1455; - goto yy1417; -yy1525: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'M') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'N') goto yy1530; - if (yych == 'n') goto yy1530; - goto yy1417; - } - } -yy1526: - yych = *++p; - if (yych == 'G') goto yy1527; - if (yych != 'g') goto yy1417; -yy1527: - yych = *++p; - if (yych == 'E') goto yy1528; - if (yych != 'e') goto yy1417; -yy1528: - yych = *++p; - if (yych == 'N') goto yy1529; - if (yych != 'n') goto yy1417; -yy1529: - yych = *++p; - if (yych == 'D') goto yy1455; - if (yych == 'd') goto yy1455; - goto yy1417; -yy1530: - yych = *++p; - if (yych == 'K') goto yy1455; - if (yych == 'k') goto yy1455; - goto yy1417; -yy1531: - yych = *++p; - if (yych == 'M') goto yy1536; - if (yych == 'm') goto yy1536; - goto yy1417; -yy1532: - yych = *++p; - if (yych == 'A') goto yy1533; - if (yych != 'a') goto yy1417; -yy1533: - yych = *++p; - if (yych == 'D') goto yy1534; - if (yych != 'd') goto yy1417; -yy1534: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'D') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'E') goto yy1535; - if (yych != 'e') goto yy1417; - } - } -yy1535: - yych = *++p; - if (yych == 'R') goto yy1455; - if (yych == 'r') goto yy1455; - goto yy1417; -yy1536: - yych = *++p; - if (yych == 'L') goto yy1455; - if (yych == 'l') goto yy1455; - goto yy1417; -yy1537: - yych = *++p; - if (yych == 'A') goto yy1558; - if (yych == 'a') goto yy1558; - goto yy1417; -yy1538: - yych = *++p; - if (yych <= 'R') { - if (yych == 'O') goto yy1554; - if (yych <= 'Q') goto yy1417; - goto yy1555; - } else { - if (yych <= 'o') { - if (yych <= 'n') goto yy1417; - goto yy1554; - } else { - if (yych == 'r') goto yy1555; - goto yy1417; - } - } -yy1539: - yych = *++p; - if (yych <= 'G') { - if (yych == 'E') goto yy1540; - if (yych <= 'F') goto yy1417; - goto yy1541; - } else { - if (yych <= 'e') { - if (yych <= 'd') goto yy1417; - } else { - if (yych == 'g') goto yy1541; - goto yy1417; - } - } -yy1540: - yych = *++p; - if (yych == 'L') goto yy1550; - if (yych == 'l') goto yy1550; - goto yy1417; -yy1541: - yych = *++p; - if (yych <= 'U') { - if (yych == 'C') goto yy1543; - if (yych <= 'T') goto yy1417; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy1417; - goto yy1543; - } else { - if (yych != 'u') goto yy1417; - } - } - yych = *++p; - if (yych == 'R') goto yy1549; - if (yych == 'r') goto yy1549; - goto yy1417; -yy1543: - yych = *++p; - if (yych == 'A') goto yy1544; - if (yych != 'a') goto yy1417; -yy1544: - yych = *++p; - if (yych == 'P') goto yy1545; - if (yych != 'p') goto yy1417; -yy1545: - yych = *++p; - if (yych == 'T') goto yy1546; - if (yych != 't') goto yy1417; -yy1546: - yych = *++p; - if (yych == 'I') goto yy1547; - if (yych != 'i') goto yy1417; -yy1547: - yych = *++p; - if (yych == 'O') goto yy1548; - if (yych != 'o') goto yy1417; -yy1548: - yych = *++p; - if (yych == 'N') goto yy1455; - if (yych == 'n') goto yy1455; - goto yy1417; -yy1549: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1550: - yych = *++p; - if (yych == 'D') goto yy1551; - if (yych != 'd') goto yy1417; -yy1551: - yych = *++p; - if (yych == 'S') goto yy1552; - if (yych != 's') goto yy1417; -yy1552: - yych = *++p; - if (yych == 'E') goto yy1553; - if (yych != 'e') goto yy1417; -yy1553: - yych = *++p; - if (yych == 'T') goto yy1455; - if (yych == 't') goto yy1455; - goto yy1417; -yy1554: - yych = *++p; - if (yych == 'T') goto yy1556; - if (yych == 't') goto yy1556; - goto yy1417; -yy1555: - yych = *++p; - if (yych == 'M') goto yy1455; - if (yych == 'm') goto yy1455; - goto yy1417; -yy1556: - yych = *++p; - if (yych == 'E') goto yy1557; - if (yych != 'e') goto yy1417; -yy1557: - yych = *++p; - if (yych == 'R') goto yy1455; - if (yych == 'r') goto yy1455; - goto yy1417; -yy1558: - yych = *++p; - if (yych == 'M') goto yy1559; - if (yych != 'm') goto yy1417; -yy1559: - yych = *++p; - if (yych == 'E') goto yy1560; - if (yych != 'e') goto yy1417; -yy1560: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'R') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'S') goto yy1561; - if (yych != 's') goto yy1417; - } - } -yy1561: - yych = *++p; - if (yych == 'E') goto yy1562; - if (yych != 'e') goto yy1417; -yy1562: - yych = *++p; - if (yych == 'T') goto yy1455; - if (yych == 't') goto yy1455; - goto yy1417; -yy1563: - yych = *++p; - if (yych <= 'V') { - if (yych <= 'Q') { - if (yych == 'A') goto yy1569; - goto yy1417; - } else { - if (yych <= 'R') goto yy1455; - if (yych <= 'U') goto yy1417; - goto yy1455; - } - } else { - if (yych <= 'q') { - if (yych == 'a') goto yy1569; - goto yy1417; - } else { - if (yych <= 'r') goto yy1455; - if (yych == 'v') goto yy1455; - goto yy1417; - } - } -yy1564: - yych = *++p; - if (yych == 'T') goto yy1565; - if (yych != 't') goto yy1417; -yy1565: - yych = *++p; - if (yych == 'A') goto yy1566; - if (yych != 'a') goto yy1417; -yy1566: - yych = *++p; - if (yych == 'I') goto yy1567; - if (yych != 'i') goto yy1417; -yy1567: - yych = *++p; - if (yych == 'L') goto yy1568; - if (yych != 'l') goto yy1417; -yy1568: - yych = *++p; - if (yych == 'S') goto yy1455; - if (yych == 's') goto yy1455; - goto yy1417; -yy1569: - yych = *++p; - if (yych == 'L') goto yy1570; - if (yych != 'l') goto yy1417; -yy1570: - yych = *++p; - if (yych == 'O') goto yy1571; - if (yych != 'o') goto yy1417; -yy1571: - yych = *++p; - if (yych == 'G') goto yy1455; - if (yych == 'g') goto yy1455; - goto yy1417; -yy1572: - yych = *++p; - if (yych == 'L') goto yy1582; - if (yych == 'l') goto yy1582; - goto yy1417; -yy1573: - yych = *++p; - if (yych == 'N') goto yy1579; - if (yych == 'n') goto yy1579; - goto yy1417; -yy1574: - yych = *++p; - if (yych == 'P') goto yy1575; - if (yych != 'p') goto yy1417; -yy1575: - yych = *++p; - if (yych == 'T') goto yy1576; - if (yych != 't') goto yy1417; -yy1576: - yych = *++p; - if (yych == 'I') goto yy1577; - if (yych != 'i') goto yy1417; -yy1577: - yych = *++p; - if (yych == 'O') goto yy1578; - if (yych != 'o') goto yy1417; -yy1578: - yych = *++p; - if (yych == 'N') goto yy1455; - if (yych == 'n') goto yy1455; - goto yy1417; -yy1579: - yych = *++p; - if (yych == 'T') goto yy1580; - if (yych != 't') goto yy1417; -yy1580: - yych = *++p; - if (yych == 'E') goto yy1581; - if (yych != 'e') goto yy1417; -yy1581: - yych = *++p; - if (yych == 'R') goto yy1455; - if (yych == 'r') goto yy1455; - goto yy1417; -yy1582: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'F') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'G') goto yy1583; - if (yych != 'g') goto yy1417; - } - } -yy1583: - yych = *++p; - if (yych == 'R') goto yy1584; - if (yych != 'r') goto yy1417; -yy1584: - yych = *++p; - if (yych == 'O') goto yy1585; - if (yych != 'o') goto yy1417; -yy1585: - yych = *++p; - if (yych == 'U') goto yy1586; - if (yych != 'u') goto yy1417; -yy1586: - yych = *++p; - if (yych == 'P') goto yy1455; - if (yych == 'p') goto yy1455; - goto yy1417; -yy1587: - yych = *++p; - if (yych == 'D') goto yy1602; - if (yych == 'd') goto yy1602; - goto yy1417; -yy1588: - yych = *++p; - if (yych == 'O') goto yy1595; - if (yych == 'o') goto yy1595; - goto yy1417; -yy1589: - yych = *++p; - if (yych == 'S') goto yy1590; - if (yych != 's') goto yy1417; -yy1590: - yych = *++p; - if (yych == 'E') goto yy1591; - if (yych != 'e') goto yy1417; -yy1591: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - goto yy1417; - } else { - if (yych <= ' ') goto yy1456; - if (yych <= '.') goto yy1417; - goto yy1458; - } - } else { - if (yych <= 'E') { - if (yych == '>') goto yy1456; - goto yy1417; - } else { - if (yych <= 'F') goto yy1592; - if (yych != 'f') goto yy1417; - } - } -yy1592: - yych = *++p; - if (yych == 'O') goto yy1593; - if (yych != 'o') goto yy1417; -yy1593: - yych = *++p; - if (yych == 'N') goto yy1594; - if (yych != 'n') goto yy1417; -yy1594: - yych = *++p; - if (yych == 'T') goto yy1455; - if (yych == 't') goto yy1455; - goto yy1417; -yy1595: - yych = *++p; - if (yych == 'C') goto yy1596; - if (yych != 'c') goto yy1417; -yy1596: - yych = *++p; - if (yych == 'K') goto yy1597; - if (yych != 'k') goto yy1417; -yy1597: - yych = *++p; - if (yych == 'Q') goto yy1598; - if (yych != 'q') goto yy1417; -yy1598: - yych = *++p; - if (yych == 'U') goto yy1599; - if (yych != 'u') goto yy1417; -yy1599: - yych = *++p; - if (yych == 'O') goto yy1600; - if (yych != 'o') goto yy1417; -yy1600: - yych = *++p; - if (yych == 'T') goto yy1601; - if (yych != 't') goto yy1417; -yy1601: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1602: - yych = *++p; - if (yych == 'Y') goto yy1455; - if (yych == 'y') goto yy1455; - goto yy1417; -yy1603: - yych = *++p; - if (yych == 'I') goto yy1614; - if (yych == 'i') goto yy1614; - goto yy1417; -yy1604: - yych = *++p; - if (yych == 'T') goto yy1610; - if (yych == 't') goto yy1610; - goto yy1417; -yy1605: - yych = *++p; - if (yych == 'D') goto yy1606; - if (yych != 'd') goto yy1417; -yy1606: - yych = *++p; - if (yych == 'R') goto yy1607; - if (yych != 'r') goto yy1417; -yy1607: - yych = *++p; - if (yych == 'E') goto yy1608; - if (yych != 'e') goto yy1417; -yy1608: - yych = *++p; - if (yych == 'S') goto yy1609; - if (yych != 's') goto yy1417; -yy1609: - yych = *++p; - if (yych == 'S') goto yy1455; - if (yych == 's') goto yy1455; - goto yy1417; -yy1610: - yych = *++p; - if (yych == 'I') goto yy1611; - if (yych != 'i') goto yy1417; -yy1611: - yych = *++p; - if (yych == 'C') goto yy1612; - if (yych != 'c') goto yy1417; -yy1612: - yych = *++p; - if (yych == 'L') goto yy1613; - if (yych != 'l') goto yy1417; -yy1613: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1614: - yych = *++p; - if (yych == 'D') goto yy1615; - if (yych != 'd') goto yy1417; -yy1615: - yych = *++p; - if (yych == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -yy1616: - yych = *++p; - if (yych == 'E') goto yy1620; - if (yych == 'e') goto yy1620; - goto yy1417; -yy1617: - yych = *++p; - if (yych == 'R') goto yy1618; - if (yych != 'r') goto yy1417; -yy1618: - yych = *++p; - if (yych == 'A') goto yy1619; - if (yych != 'a') goto yy1417; -yy1619: - yych = *++p; - if (yych == 'M') goto yy1455; - if (yych == 'm') goto yy1455; - goto yy1417; -yy1620: - yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1621; - if (yych <= 0x1F) goto yy1417; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1417; - goto yy1458; - } else { - if (yych != '>') goto yy1417; - } - } -yy1621: - yych = *++p; - goto yy1498; -yy1622: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1417; - if (yych <= '\r') goto yy1456; - if (yych <= 0x1F) goto yy1417; - goto yy1456; - } else { - if (yych == '/') goto yy1458; - if (yych <= '=') goto yy1417; - goto yy1456; - } - } else { - if (yych <= 'R') { - if (yych == 'A') goto yy1617; - if (yych <= 'Q') goto yy1417; - goto yy1624; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy1417; - goto yy1617; - } else { - if (yych == 'r') goto yy1624; - goto yy1417; - } - } - } -yy1623: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'E') goto yy1481; - goto yy1417; - } else { - if (yych <= 'O') goto yy1480; - if (yych <= 'T') goto yy1417; - goto yy1479; - } - } else { - if (yych <= 'n') { - if (yych == 'e') goto yy1481; - goto yy1417; - } else { - if (yych <= 'o') goto yy1480; - if (yych == 'u') goto yy1479; - goto yy1417; - } - } -yy1624: - ++p; - if ((yych = *p) == 'E') goto yy1455; - if (yych == 'e') goto yy1455; - goto yy1417; -} - + { + unsigned char yych; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= ';') { + if (yych != '\n') + goto yy1415; + } else { + if (yych <= '<') + goto yy1414; + if (yych <= 0x7F) + goto yy1415; + if (yych >= 0xC2) + goto yy1416; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1418; + if (yych == 0xED) + goto yy1423; + goto yy1419; + } else { + if (yych <= 0xF0) + goto yy1420; + if (yych <= 0xF3) + goto yy1421; + if (yych <= 0xF4) + goto yy1422; + } + } + yy1413 : { return 0; } + yy1414: + yych = *(marker = ++p); + switch (yych) { + case '!': + goto yy1439; + case '/': + goto yy1424; + case '?': + goto yy1440; + case 'A': + case 'a': + goto yy1426; + case 'B': + case 'b': + goto yy1427; + case 'C': + case 'c': + goto yy1428; + case 'D': + case 'd': + goto yy1429; + case 'F': + case 'f': + goto yy1430; + case 'H': + case 'h': + goto yy1431; + case 'L': + case 'l': + goto yy1432; + case 'M': + case 'm': + goto yy1433; + case 'N': + case 'n': + goto yy1434; + case 'O': + case 'o': + goto yy1435; + case 'P': + case 'p': + goto yy1425; + case 'S': + case 's': + goto yy1436; + case 'T': + case 't': + goto yy1437; + case 'U': + case 'u': + goto yy1438; + default: + goto yy1413; + } + yy1415: + yych = *++p; + goto yy1413; + yy1416: + yych = *++p; + if (yych <= 0x7F) + goto yy1417; + if (yych <= 0xBF) + goto yy1415; + yy1417: + p = marker; + goto yy1413; + yy1418: + yych = *++p; + if (yych <= 0x9F) + goto yy1417; + if (yych <= 0xBF) + goto yy1416; + goto yy1417; + yy1419: + yych = *++p; + if (yych <= 0x7F) + goto yy1417; + if (yych <= 0xBF) + goto yy1416; + goto yy1417; + yy1420: + yych = *++p; + if (yych <= 0x8F) + goto yy1417; + if (yych <= 0xBF) + goto yy1419; + goto yy1417; + yy1421: + yych = *++p; + if (yych <= 0x7F) + goto yy1417; + if (yych <= 0xBF) + goto yy1419; + goto yy1417; + yy1422: + yych = *++p; + if (yych <= 0x7F) + goto yy1417; + if (yych <= 0x8F) + goto yy1419; + goto yy1417; + yy1423: + yych = *++p; + if (yych <= 0x7F) + goto yy1417; + if (yych <= 0x9F) + goto yy1416; + goto yy1417; + yy1424: + yych = *++p; + switch (yych) { + case 'A': + case 'a': + goto yy1426; + case 'B': + case 'b': + goto yy1427; + case 'C': + case 'c': + goto yy1428; + case 'D': + case 'd': + goto yy1429; + case 'F': + case 'f': + goto yy1430; + case 'H': + case 'h': + goto yy1431; + case 'L': + case 'l': + goto yy1432; + case 'M': + case 'm': + goto yy1433; + case 'N': + case 'n': + goto yy1434; + case 'O': + case 'o': + goto yy1435; + case 'P': + case 'p': + goto yy1622; + case 'S': + case 's': + goto yy1623; + case 'T': + case 't': + goto yy1437; + case 'U': + case 'u': + goto yy1438; + default: + goto yy1417; + } + yy1425: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + if (yych <= 0x1F) + goto yy1417; + goto yy1456; + } else { + if (yych == '/') + goto yy1458; + if (yych <= '=') + goto yy1417; + goto yy1456; + } + } else { + if (yych <= 'R') { + if (yych == 'A') + goto yy1617; + if (yych <= 'Q') + goto yy1417; + goto yy1616; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy1417; + goto yy1617; + } else { + if (yych == 'r') + goto yy1616; + goto yy1417; + } + } + } + yy1426: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych <= 'C') + goto yy1417; + goto yy1605; + } else { + if (yych <= 'Q') + goto yy1417; + if (yych <= 'R') + goto yy1604; + goto yy1603; + } + } else { + if (yych <= 'q') { + if (yych == 'd') + goto yy1605; + goto yy1417; + } else { + if (yych <= 'r') + goto yy1604; + if (yych <= 's') + goto yy1603; + goto yy1417; + } + } + yy1427: + yych = *++p; + if (yych <= 'O') { + if (yych <= 'K') { + if (yych == 'A') + goto yy1589; + goto yy1417; + } else { + if (yych <= 'L') + goto yy1588; + if (yych <= 'N') + goto yy1417; + goto yy1587; + } + } else { + if (yych <= 'k') { + if (yych == 'a') + goto yy1589; + goto yy1417; + } else { + if (yych <= 'l') + goto yy1588; + if (yych == 'o') + goto yy1587; + goto yy1417; + } + } + yy1428: + yych = *++p; + if (yych <= 'O') { + if (yych <= 'D') { + if (yych == 'A') + goto yy1574; + goto yy1417; + } else { + if (yych <= 'E') + goto yy1573; + if (yych <= 'N') + goto yy1417; + goto yy1572; + } + } else { + if (yych <= 'd') { + if (yych == 'a') + goto yy1574; + goto yy1417; + } else { + if (yych <= 'e') + goto yy1573; + if (yych == 'o') + goto yy1572; + goto yy1417; + } + } + yy1429: + yych = *++p; + switch (yych) { + case 'D': + case 'L': + case 'T': + case 'd': + case 'l': + case 't': + goto yy1455; + case 'E': + case 'e': + goto yy1564; + case 'I': + case 'i': + goto yy1563; + default: + goto yy1417; + } + yy1430: + yych = *++p; + if (yych <= 'R') { + if (yych <= 'N') { + if (yych == 'I') + goto yy1539; + goto yy1417; + } else { + if (yych <= 'O') + goto yy1538; + if (yych <= 'Q') + goto yy1417; + goto yy1537; + } + } else { + if (yych <= 'n') { + if (yych == 'i') + goto yy1539; + goto yy1417; + } else { + if (yych <= 'o') + goto yy1538; + if (yych == 'r') + goto yy1537; + goto yy1417; + } + } + yy1431: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych == '1') + goto yy1455; + goto yy1417; + } else { + if (yych <= 'E') + goto yy1532; + if (yych == 'R') + goto yy1455; + goto yy1417; + } + } else { + if (yych <= 'q') { + if (yych <= 'T') + goto yy1531; + if (yych == 'e') + goto yy1532; + goto yy1417; + } else { + if (yych <= 'r') + goto yy1455; + if (yych == 't') + goto yy1531; + goto yy1417; + } + } + yy1432: + yych = *++p; + if (yych <= 'I') { + if (yych == 'E') + goto yy1526; + if (yych <= 'H') + goto yy1417; + goto yy1525; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy1417; + goto yy1526; + } else { + if (yych == 'i') + goto yy1525; + goto yy1417; + } + } + yy1433: + yych = *++p; + if (yych <= 'E') { + if (yych == 'A') + goto yy1517; + if (yych <= 'D') + goto yy1417; + goto yy1516; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy1417; + goto yy1517; + } else { + if (yych == 'e') + goto yy1516; + goto yy1417; + } + } + yy1434: + yych = *++p; + if (yych <= 'O') { + if (yych == 'A') + goto yy1510; + if (yych <= 'N') + goto yy1417; + goto yy1509; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy1417; + goto yy1510; + } else { + if (yych == 'o') + goto yy1509; + goto yy1417; + } + } + yy1435: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy1455; + if (yych <= 'O') + goto yy1417; + goto yy1501; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy1417; + goto yy1455; + } else { + if (yych == 'p') + goto yy1501; + goto yy1417; + } + } + yy1436: + yych = *++p; + if (yych <= 'U') { + if (yych <= 'E') { + if (yych == 'C') + goto yy1478; + if (yych <= 'D') + goto yy1417; + goto yy1481; + } else { + if (yych <= 'O') { + if (yych <= 'N') + goto yy1417; + goto yy1480; + } else { + if (yych <= 'S') + goto yy1417; + if (yych <= 'T') + goto yy1477; + goto yy1479; + } + } + } else { + if (yych <= 'n') { + if (yych <= 'c') { + if (yych <= 'b') + goto yy1417; + goto yy1478; + } else { + if (yych == 'e') + goto yy1481; + goto yy1417; + } + } else { + if (yych <= 's') { + if (yych <= 'o') + goto yy1480; + goto yy1417; + } else { + if (yych <= 't') + goto yy1477; + if (yych <= 'u') + goto yy1479; + goto yy1417; + } + } + } + yy1437: + yych = *++p; + switch (yych) { + case 'A': + case 'a': + goto yy1464; + case 'B': + case 'b': + goto yy1463; + case 'D': + case 'd': + goto yy1455; + case 'F': + case 'f': + goto yy1462; + case 'H': + case 'h': + goto yy1461; + case 'I': + case 'i': + goto yy1460; + case 'R': + case 'r': + goto yy1459; + default: + goto yy1417; + } + yy1438: + yych = *++p; + if (yych == 'L') + goto yy1455; + if (yych == 'l') + goto yy1455; + goto yy1417; + yy1439: + yych = *++p; + if (yych <= '@') { + if (yych == '-') + goto yy1442; + goto yy1417; + } else { + if (yych <= 'Z') + goto yy1443; + if (yych <= '[') + goto yy1445; + goto yy1417; + } + yy1440: + ++p; + { return 3; } + yy1442: + yych = *++p; + if (yych == '-') + goto yy1453; + goto yy1417; + yy1443: + ++p; + { return 4; } + yy1445: + yych = *++p; + if (yych == 'C') + goto yy1446; + if (yych != 'c') + goto yy1417; + yy1446: + yych = *++p; + if (yych == 'D') + goto yy1447; + if (yych != 'd') + goto yy1417; + yy1447: + yych = *++p; + if (yych == 'A') + goto yy1448; + if (yych != 'a') + goto yy1417; + yy1448: + yych = *++p; + if (yych == 'T') + goto yy1449; + if (yych != 't') + goto yy1417; + yy1449: + yych = *++p; + if (yych == 'A') + goto yy1450; + if (yych != 'a') + goto yy1417; + yy1450: + yych = *++p; + if (yych != '[') + goto yy1417; + ++p; + { return 5; } + yy1453: + ++p; + { return 2; } + yy1455: + yych = *++p; + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + if (yych <= 0x1F) + goto yy1417; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1417; + goto yy1458; + } else { + if (yych != '>') + goto yy1417; + } + } + yy1456: + ++p; + { return 6; } + yy1458: + yych = *++p; + if (yych == '>') + goto yy1456; + goto yy1417; + yy1459: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= '@') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'A') + goto yy1475; + if (yych == 'a') + goto yy1475; + goto yy1417; + } + } + yy1460: + yych = *++p; + if (yych == 'T') + goto yy1473; + if (yych == 't') + goto yy1473; + goto yy1417; + yy1461: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'D') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'E') + goto yy1471; + if (yych == 'e') + goto yy1471; + goto yy1417; + } + } + yy1462: + yych = *++p; + if (yych == 'O') + goto yy1469; + if (yych == 'o') + goto yy1469; + goto yy1417; + yy1463: + yych = *++p; + if (yych == 'O') + goto yy1467; + if (yych == 'o') + goto yy1467; + goto yy1417; + yy1464: + yych = *++p; + if (yych == 'B') + goto yy1465; + if (yych != 'b') + goto yy1417; + yy1465: + yych = *++p; + if (yych == 'L') + goto yy1466; + if (yych != 'l') + goto yy1417; + yy1466: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1467: + yych = *++p; + if (yych == 'D') + goto yy1468; + if (yych != 'd') + goto yy1417; + yy1468: + yych = *++p; + if (yych == 'Y') + goto yy1455; + if (yych == 'y') + goto yy1455; + goto yy1417; + yy1469: + yych = *++p; + if (yych == 'O') + goto yy1470; + if (yych != 'o') + goto yy1417; + yy1470: + yych = *++p; + if (yych == 'T') + goto yy1455; + if (yych == 't') + goto yy1455; + goto yy1417; + yy1471: + yych = *++p; + if (yych == 'A') + goto yy1472; + if (yych != 'a') + goto yy1417; + yy1472: + yych = *++p; + if (yych == 'D') + goto yy1455; + if (yych == 'd') + goto yy1455; + goto yy1417; + yy1473: + yych = *++p; + if (yych == 'L') + goto yy1474; + if (yych != 'l') + goto yy1417; + yy1474: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1475: + yych = *++p; + if (yych == 'C') + goto yy1476; + if (yych != 'c') + goto yy1417; + yy1476: + yych = *++p; + if (yych == 'K') + goto yy1455; + if (yych == 'k') + goto yy1455; + goto yy1417; + yy1477: + yych = *++p; + if (yych == 'Y') + goto yy1499; + if (yych == 'y') + goto yy1499; + goto yy1417; + yy1478: + yych = *++p; + if (yych == 'R') + goto yy1493; + if (yych == 'r') + goto yy1493; + goto yy1417; + yy1479: + yych = *++p; + if (yych == 'M') + goto yy1489; + if (yych == 'm') + goto yy1489; + goto yy1417; + yy1480: + yych = *++p; + if (yych == 'U') + goto yy1486; + if (yych == 'u') + goto yy1486; + goto yy1417; + yy1481: + yych = *++p; + if (yych == 'C') + goto yy1482; + if (yych != 'c') + goto yy1417; + yy1482: + yych = *++p; + if (yych == 'T') + goto yy1483; + if (yych != 't') + goto yy1417; + yy1483: + yych = *++p; + if (yych == 'I') + goto yy1484; + if (yych != 'i') + goto yy1417; + yy1484: + yych = *++p; + if (yych == 'O') + goto yy1485; + if (yych != 'o') + goto yy1417; + yy1485: + yych = *++p; + if (yych == 'N') + goto yy1455; + if (yych == 'n') + goto yy1455; + goto yy1417; + yy1486: + yych = *++p; + if (yych == 'R') + goto yy1487; + if (yych != 'r') + goto yy1417; + yy1487: + yych = *++p; + if (yych == 'C') + goto yy1488; + if (yych != 'c') + goto yy1417; + yy1488: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1489: + yych = *++p; + if (yych == 'M') + goto yy1490; + if (yych != 'm') + goto yy1417; + yy1490: + yych = *++p; + if (yych == 'A') + goto yy1491; + if (yych != 'a') + goto yy1417; + yy1491: + yych = *++p; + if (yych == 'R') + goto yy1492; + if (yych != 'r') + goto yy1417; + yy1492: + yych = *++p; + if (yych == 'Y') + goto yy1455; + if (yych == 'y') + goto yy1455; + goto yy1417; + yy1493: + yych = *++p; + if (yych == 'I') + goto yy1494; + if (yych != 'i') + goto yy1417; + yy1494: + yych = *++p; + if (yych == 'P') + goto yy1495; + if (yych != 'p') + goto yy1417; + yy1495: + yych = *++p; + if (yych == 'T') + goto yy1496; + if (yych != 't') + goto yy1417; + yy1496: + yych = *++p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych >= 0x0E) + goto yy1417; + } else { + if (yych <= ' ') + goto yy1497; + if (yych != '>') + goto yy1417; + } + yy1497: + ++p; + yy1498 : { return 1; } + yy1499: + yych = *++p; + if (yych == 'L') + goto yy1500; + if (yych != 'l') + goto yy1417; + yy1500: + yych = *++p; + if (yych == 'E') + goto yy1496; + if (yych == 'e') + goto yy1496; + goto yy1417; + yy1501: + yych = *++p; + if (yych == 'T') + goto yy1502; + if (yych != 't') + goto yy1417; + yy1502: + yych = *++p; + if (yych <= 'I') { + if (yych == 'G') + goto yy1504; + if (yych <= 'H') + goto yy1417; + } else { + if (yych <= 'g') { + if (yych <= 'f') + goto yy1417; + goto yy1504; + } else { + if (yych != 'i') + goto yy1417; + } + } + yych = *++p; + if (yych == 'O') + goto yy1508; + if (yych == 'o') + goto yy1508; + goto yy1417; + yy1504: + yych = *++p; + if (yych == 'R') + goto yy1505; + if (yych != 'r') + goto yy1417; + yy1505: + yych = *++p; + if (yych == 'O') + goto yy1506; + if (yych != 'o') + goto yy1417; + yy1506: + yych = *++p; + if (yych == 'U') + goto yy1507; + if (yych != 'u') + goto yy1417; + yy1507: + yych = *++p; + if (yych == 'P') + goto yy1455; + if (yych == 'p') + goto yy1455; + goto yy1417; + yy1508: + yych = *++p; + if (yych == 'N') + goto yy1455; + if (yych == 'n') + goto yy1455; + goto yy1417; + yy1509: + yych = *++p; + if (yych == 'F') + goto yy1511; + if (yych == 'f') + goto yy1511; + goto yy1417; + yy1510: + yych = *++p; + if (yych == 'V') + goto yy1455; + if (yych == 'v') + goto yy1455; + goto yy1417; + yy1511: + yych = *++p; + if (yych == 'R') + goto yy1512; + if (yych != 'r') + goto yy1417; + yy1512: + yych = *++p; + if (yych == 'A') + goto yy1513; + if (yych != 'a') + goto yy1417; + yy1513: + yych = *++p; + if (yych == 'M') + goto yy1514; + if (yych != 'm') + goto yy1417; + yy1514: + yych = *++p; + if (yych == 'E') + goto yy1515; + if (yych != 'e') + goto yy1417; + yy1515: + yych = *++p; + if (yych == 'S') + goto yy1455; + if (yych == 's') + goto yy1455; + goto yy1417; + yy1516: + yych = *++p; + if (yych <= 'T') { + if (yych == 'N') + goto yy1519; + if (yych <= 'S') + goto yy1417; + goto yy1520; + } else { + if (yych <= 'n') { + if (yych <= 'm') + goto yy1417; + goto yy1519; + } else { + if (yych == 't') + goto yy1520; + goto yy1417; + } + } + yy1517: + yych = *++p; + if (yych == 'I') + goto yy1518; + if (yych != 'i') + goto yy1417; + yy1518: + yych = *++p; + if (yych == 'N') + goto yy1455; + if (yych == 'n') + goto yy1455; + goto yy1417; + yy1519: + yych = *++p; + if (yych == 'U') + goto yy1521; + if (yych == 'u') + goto yy1521; + goto yy1417; + yy1520: + yych = *++p; + if (yych == 'A') + goto yy1455; + if (yych == 'a') + goto yy1455; + goto yy1417; + yy1521: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'H') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'I') + goto yy1522; + if (yych != 'i') + goto yy1417; + } + } + yy1522: + yych = *++p; + if (yych == 'T') + goto yy1523; + if (yych != 't') + goto yy1417; + yy1523: + yych = *++p; + if (yych == 'E') + goto yy1524; + if (yych != 'e') + goto yy1417; + yy1524: + yych = *++p; + if (yych == 'M') + goto yy1455; + if (yych == 'm') + goto yy1455; + goto yy1417; + yy1525: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'M') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'N') + goto yy1530; + if (yych == 'n') + goto yy1530; + goto yy1417; + } + } + yy1526: + yych = *++p; + if (yych == 'G') + goto yy1527; + if (yych != 'g') + goto yy1417; + yy1527: + yych = *++p; + if (yych == 'E') + goto yy1528; + if (yych != 'e') + goto yy1417; + yy1528: + yych = *++p; + if (yych == 'N') + goto yy1529; + if (yych != 'n') + goto yy1417; + yy1529: + yych = *++p; + if (yych == 'D') + goto yy1455; + if (yych == 'd') + goto yy1455; + goto yy1417; + yy1530: + yych = *++p; + if (yych == 'K') + goto yy1455; + if (yych == 'k') + goto yy1455; + goto yy1417; + yy1531: + yych = *++p; + if (yych == 'M') + goto yy1536; + if (yych == 'm') + goto yy1536; + goto yy1417; + yy1532: + yych = *++p; + if (yych == 'A') + goto yy1533; + if (yych != 'a') + goto yy1417; + yy1533: + yych = *++p; + if (yych == 'D') + goto yy1534; + if (yych != 'd') + goto yy1417; + yy1534: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'D') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'E') + goto yy1535; + if (yych != 'e') + goto yy1417; + } + } + yy1535: + yych = *++p; + if (yych == 'R') + goto yy1455; + if (yych == 'r') + goto yy1455; + goto yy1417; + yy1536: + yych = *++p; + if (yych == 'L') + goto yy1455; + if (yych == 'l') + goto yy1455; + goto yy1417; + yy1537: + yych = *++p; + if (yych == 'A') + goto yy1558; + if (yych == 'a') + goto yy1558; + goto yy1417; + yy1538: + yych = *++p; + if (yych <= 'R') { + if (yych == 'O') + goto yy1554; + if (yych <= 'Q') + goto yy1417; + goto yy1555; + } else { + if (yych <= 'o') { + if (yych <= 'n') + goto yy1417; + goto yy1554; + } else { + if (yych == 'r') + goto yy1555; + goto yy1417; + } + } + yy1539: + yych = *++p; + if (yych <= 'G') { + if (yych == 'E') + goto yy1540; + if (yych <= 'F') + goto yy1417; + goto yy1541; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy1417; + } else { + if (yych == 'g') + goto yy1541; + goto yy1417; + } + } + yy1540: + yych = *++p; + if (yych == 'L') + goto yy1550; + if (yych == 'l') + goto yy1550; + goto yy1417; + yy1541: + yych = *++p; + if (yych <= 'U') { + if (yych == 'C') + goto yy1543; + if (yych <= 'T') + goto yy1417; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy1417; + goto yy1543; + } else { + if (yych != 'u') + goto yy1417; + } + } + yych = *++p; + if (yych == 'R') + goto yy1549; + if (yych == 'r') + goto yy1549; + goto yy1417; + yy1543: + yych = *++p; + if (yych == 'A') + goto yy1544; + if (yych != 'a') + goto yy1417; + yy1544: + yych = *++p; + if (yych == 'P') + goto yy1545; + if (yych != 'p') + goto yy1417; + yy1545: + yych = *++p; + if (yych == 'T') + goto yy1546; + if (yych != 't') + goto yy1417; + yy1546: + yych = *++p; + if (yych == 'I') + goto yy1547; + if (yych != 'i') + goto yy1417; + yy1547: + yych = *++p; + if (yych == 'O') + goto yy1548; + if (yych != 'o') + goto yy1417; + yy1548: + yych = *++p; + if (yych == 'N') + goto yy1455; + if (yych == 'n') + goto yy1455; + goto yy1417; + yy1549: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1550: + yych = *++p; + if (yych == 'D') + goto yy1551; + if (yych != 'd') + goto yy1417; + yy1551: + yych = *++p; + if (yych == 'S') + goto yy1552; + if (yych != 's') + goto yy1417; + yy1552: + yych = *++p; + if (yych == 'E') + goto yy1553; + if (yych != 'e') + goto yy1417; + yy1553: + yych = *++p; + if (yych == 'T') + goto yy1455; + if (yych == 't') + goto yy1455; + goto yy1417; + yy1554: + yych = *++p; + if (yych == 'T') + goto yy1556; + if (yych == 't') + goto yy1556; + goto yy1417; + yy1555: + yych = *++p; + if (yych == 'M') + goto yy1455; + if (yych == 'm') + goto yy1455; + goto yy1417; + yy1556: + yych = *++p; + if (yych == 'E') + goto yy1557; + if (yych != 'e') + goto yy1417; + yy1557: + yych = *++p; + if (yych == 'R') + goto yy1455; + if (yych == 'r') + goto yy1455; + goto yy1417; + yy1558: + yych = *++p; + if (yych == 'M') + goto yy1559; + if (yych != 'm') + goto yy1417; + yy1559: + yych = *++p; + if (yych == 'E') + goto yy1560; + if (yych != 'e') + goto yy1417; + yy1560: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'R') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'S') + goto yy1561; + if (yych != 's') + goto yy1417; + } + } + yy1561: + yych = *++p; + if (yych == 'E') + goto yy1562; + if (yych != 'e') + goto yy1417; + yy1562: + yych = *++p; + if (yych == 'T') + goto yy1455; + if (yych == 't') + goto yy1455; + goto yy1417; + yy1563: + yych = *++p; + if (yych <= 'V') { + if (yych <= 'Q') { + if (yych == 'A') + goto yy1569; + goto yy1417; + } else { + if (yych <= 'R') + goto yy1455; + if (yych <= 'U') + goto yy1417; + goto yy1455; + } + } else { + if (yych <= 'q') { + if (yych == 'a') + goto yy1569; + goto yy1417; + } else { + if (yych <= 'r') + goto yy1455; + if (yych == 'v') + goto yy1455; + goto yy1417; + } + } + yy1564: + yych = *++p; + if (yych == 'T') + goto yy1565; + if (yych != 't') + goto yy1417; + yy1565: + yych = *++p; + if (yych == 'A') + goto yy1566; + if (yych != 'a') + goto yy1417; + yy1566: + yych = *++p; + if (yych == 'I') + goto yy1567; + if (yych != 'i') + goto yy1417; + yy1567: + yych = *++p; + if (yych == 'L') + goto yy1568; + if (yych != 'l') + goto yy1417; + yy1568: + yych = *++p; + if (yych == 'S') + goto yy1455; + if (yych == 's') + goto yy1455; + goto yy1417; + yy1569: + yych = *++p; + if (yych == 'L') + goto yy1570; + if (yych != 'l') + goto yy1417; + yy1570: + yych = *++p; + if (yych == 'O') + goto yy1571; + if (yych != 'o') + goto yy1417; + yy1571: + yych = *++p; + if (yych == 'G') + goto yy1455; + if (yych == 'g') + goto yy1455; + goto yy1417; + yy1572: + yych = *++p; + if (yych == 'L') + goto yy1582; + if (yych == 'l') + goto yy1582; + goto yy1417; + yy1573: + yych = *++p; + if (yych == 'N') + goto yy1579; + if (yych == 'n') + goto yy1579; + goto yy1417; + yy1574: + yych = *++p; + if (yych == 'P') + goto yy1575; + if (yych != 'p') + goto yy1417; + yy1575: + yych = *++p; + if (yych == 'T') + goto yy1576; + if (yych != 't') + goto yy1417; + yy1576: + yych = *++p; + if (yych == 'I') + goto yy1577; + if (yych != 'i') + goto yy1417; + yy1577: + yych = *++p; + if (yych == 'O') + goto yy1578; + if (yych != 'o') + goto yy1417; + yy1578: + yych = *++p; + if (yych == 'N') + goto yy1455; + if (yych == 'n') + goto yy1455; + goto yy1417; + yy1579: + yych = *++p; + if (yych == 'T') + goto yy1580; + if (yych != 't') + goto yy1417; + yy1580: + yych = *++p; + if (yych == 'E') + goto yy1581; + if (yych != 'e') + goto yy1417; + yy1581: + yych = *++p; + if (yych == 'R') + goto yy1455; + if (yych == 'r') + goto yy1455; + goto yy1417; + yy1582: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'F') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'G') + goto yy1583; + if (yych != 'g') + goto yy1417; + } + } + yy1583: + yych = *++p; + if (yych == 'R') + goto yy1584; + if (yych != 'r') + goto yy1417; + yy1584: + yych = *++p; + if (yych == 'O') + goto yy1585; + if (yych != 'o') + goto yy1417; + yy1585: + yych = *++p; + if (yych == 'U') + goto yy1586; + if (yych != 'u') + goto yy1417; + yy1586: + yych = *++p; + if (yych == 'P') + goto yy1455; + if (yych == 'p') + goto yy1455; + goto yy1417; + yy1587: + yych = *++p; + if (yych == 'D') + goto yy1602; + if (yych == 'd') + goto yy1602; + goto yy1417; + yy1588: + yych = *++p; + if (yych == 'O') + goto yy1595; + if (yych == 'o') + goto yy1595; + goto yy1417; + yy1589: + yych = *++p; + if (yych == 'S') + goto yy1590; + if (yych != 's') + goto yy1417; + yy1590: + yych = *++p; + if (yych == 'E') + goto yy1591; + if (yych != 'e') + goto yy1417; + yy1591: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + goto yy1417; + } else { + if (yych <= ' ') + goto yy1456; + if (yych <= '.') + goto yy1417; + goto yy1458; + } + } else { + if (yych <= 'E') { + if (yych == '>') + goto yy1456; + goto yy1417; + } else { + if (yych <= 'F') + goto yy1592; + if (yych != 'f') + goto yy1417; + } + } + yy1592: + yych = *++p; + if (yych == 'O') + goto yy1593; + if (yych != 'o') + goto yy1417; + yy1593: + yych = *++p; + if (yych == 'N') + goto yy1594; + if (yych != 'n') + goto yy1417; + yy1594: + yych = *++p; + if (yych == 'T') + goto yy1455; + if (yych == 't') + goto yy1455; + goto yy1417; + yy1595: + yych = *++p; + if (yych == 'C') + goto yy1596; + if (yych != 'c') + goto yy1417; + yy1596: + yych = *++p; + if (yych == 'K') + goto yy1597; + if (yych != 'k') + goto yy1417; + yy1597: + yych = *++p; + if (yych == 'Q') + goto yy1598; + if (yych != 'q') + goto yy1417; + yy1598: + yych = *++p; + if (yych == 'U') + goto yy1599; + if (yych != 'u') + goto yy1417; + yy1599: + yych = *++p; + if (yych == 'O') + goto yy1600; + if (yych != 'o') + goto yy1417; + yy1600: + yych = *++p; + if (yych == 'T') + goto yy1601; + if (yych != 't') + goto yy1417; + yy1601: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1602: + yych = *++p; + if (yych == 'Y') + goto yy1455; + if (yych == 'y') + goto yy1455; + goto yy1417; + yy1603: + yych = *++p; + if (yych == 'I') + goto yy1614; + if (yych == 'i') + goto yy1614; + goto yy1417; + yy1604: + yych = *++p; + if (yych == 'T') + goto yy1610; + if (yych == 't') + goto yy1610; + goto yy1417; + yy1605: + yych = *++p; + if (yych == 'D') + goto yy1606; + if (yych != 'd') + goto yy1417; + yy1606: + yych = *++p; + if (yych == 'R') + goto yy1607; + if (yych != 'r') + goto yy1417; + yy1607: + yych = *++p; + if (yych == 'E') + goto yy1608; + if (yych != 'e') + goto yy1417; + yy1608: + yych = *++p; + if (yych == 'S') + goto yy1609; + if (yych != 's') + goto yy1417; + yy1609: + yych = *++p; + if (yych == 'S') + goto yy1455; + if (yych == 's') + goto yy1455; + goto yy1417; + yy1610: + yych = *++p; + if (yych == 'I') + goto yy1611; + if (yych != 'i') + goto yy1417; + yy1611: + yych = *++p; + if (yych == 'C') + goto yy1612; + if (yych != 'c') + goto yy1417; + yy1612: + yych = *++p; + if (yych == 'L') + goto yy1613; + if (yych != 'l') + goto yy1417; + yy1613: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1614: + yych = *++p; + if (yych == 'D') + goto yy1615; + if (yych != 'd') + goto yy1417; + yy1615: + yych = *++p; + if (yych == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + yy1616: + yych = *++p; + if (yych == 'E') + goto yy1620; + if (yych == 'e') + goto yy1620; + goto yy1417; + yy1617: + yych = *++p; + if (yych == 'R') + goto yy1618; + if (yych != 'r') + goto yy1417; + yy1618: + yych = *++p; + if (yych == 'A') + goto yy1619; + if (yych != 'a') + goto yy1417; + yy1619: + yych = *++p; + if (yych == 'M') + goto yy1455; + if (yych == 'm') + goto yy1455; + goto yy1417; + yy1620: + yych = *++p; + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1621; + if (yych <= 0x1F) + goto yy1417; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1417; + goto yy1458; + } else { + if (yych != '>') + goto yy1417; + } + } + yy1621: + yych = *++p; + goto yy1498; + yy1622: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1417; + if (yych <= '\r') + goto yy1456; + if (yych <= 0x1F) + goto yy1417; + goto yy1456; + } else { + if (yych == '/') + goto yy1458; + if (yych <= '=') + goto yy1417; + goto yy1456; + } + } else { + if (yych <= 'R') { + if (yych == 'A') + goto yy1617; + if (yych <= 'Q') + goto yy1417; + goto yy1624; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy1417; + goto yy1617; + } else { + if (yych == 'r') + goto yy1624; + goto yy1417; + } + } + } + yy1623: + yych = *++p; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'E') + goto yy1481; + goto yy1417; + } else { + if (yych <= 'O') + goto yy1480; + if (yych <= 'T') + goto yy1417; + goto yy1479; + } + } else { + if (yych <= 'n') { + if (yych == 'e') + goto yy1481; + goto yy1417; + } else { + if (yych <= 'o') + goto yy1480; + if (yych == 'u') + goto yy1479; + goto yy1417; + } + } + yy1624: + ++p; + if ((yych = *p) == 'E') + goto yy1455; + if (yych == 'e') + goto yy1455; + goto yy1417; + } } // Try to match an HTML block tag start line of type 7, returning // 7 if successful, 0 if not. -bufsize_t _scan_html_block_start_7(const unsigned char *p) -{ +bufsize_t _scan_html_block_start_7(const unsigned char *p) { const unsigned char *marker = NULL; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, - 224, 198, 202, 194, 198, 194, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 198, 224, 64, 224, 224, 224, 224, 128, - 224, 224, 224, 224, 224, 241, 240, 224, - 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 240, 224, 192, 192, 192, 224, - 224, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 224, 224, 224, 224, 240, - 192, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 224, 224, 224, 224, 224, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 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) { - if (yych <= ';') { - if (yych != '\n') goto yy1629; - } else { - if (yych <= '<') goto yy1628; - if (yych <= 0x7F) goto yy1629; - if (yych >= 0xC2) goto yy1630; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1632; - if (yych == 0xED) goto yy1637; - goto yy1633; - } else { - if (yych <= 0xF0) goto yy1634; - if (yych <= 0xF3) goto yy1635; - if (yych <= 0xF4) goto yy1636; - } - } -yy1627: - { return 0; } -yy1628: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '@') { - if (yych == '/') goto yy1640; - goto yy1627; - } else { - if (yych <= 'Z') goto yy1638; - if (yych <= '`') goto yy1627; - if (yych <= 'z') goto yy1638; - goto yy1627; - } -yy1629: - yych = *++p; - goto yy1627; -yy1630: - yych = *++p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1629; -yy1631: - p = marker; - if (yyaccept == 0) { - goto yy1627; - } else { - goto yy1649; - } -yy1632: - yych = *++p; - if (yych <= 0x9F) goto yy1631; - if (yych <= 0xBF) goto yy1630; - goto yy1631; -yy1633: - yych = *++p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1630; - goto yy1631; -yy1634: - yych = *++p; - if (yych <= 0x8F) goto yy1631; - if (yych <= 0xBF) goto yy1633; - goto yy1631; -yy1635: - yych = *++p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1633; - goto yy1631; -yy1636: - yych = *++p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x8F) goto yy1633; - goto yy1631; -yy1637: - yych = *++p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x9F) goto yy1630; - goto yy1631; -yy1638: - ++p; - yych = *p; - if (yybm[0+yych] & 1) { - goto yy1638; - } - if (yych <= ' ') { - if (yych <= 0x08) goto yy1631; - if (yych <= '\r') goto yy1651; - if (yych <= 0x1F) goto yy1631; - goto yy1651; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1631; - goto yy1653; - } else { - if (yych == '>') goto yy1645; - goto yy1631; - } - } -yy1640: - yych = *++p; - if (yych <= '@') goto yy1631; - if (yych <= 'Z') goto yy1641; - if (yych <= '`') goto yy1631; - if (yych >= '{') goto yy1631; -yy1641: - ++p; - yych = *p; - if (yybm[0+yych] & 2) { - goto yy1643; - } - if (yych <= '=') { - if (yych <= '-') { - if (yych <= ',') goto yy1631; - goto yy1641; - } else { - if (yych <= '/') goto yy1631; - if (yych <= '9') goto yy1641; - goto yy1631; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') goto yy1645; - if (yych <= '@') goto yy1631; - goto yy1641; - } else { - if (yych <= '`') goto yy1631; - if (yych <= 'z') goto yy1641; - goto yy1631; - } - } -yy1643: - ++p; - yych = *p; - if (yybm[0+yych] & 2) { - goto yy1643; - } - if (yych != '>') goto yy1631; -yy1645: - ++p; - yych = *p; - if (yybm[0+yych] & 4) { - goto yy1645; - } - if (yych <= 0x08) goto yy1631; - if (yych <= '\n') goto yy1647; - if (yych <= '\v') goto yy1631; - if (yych <= '\r') goto yy1650; - goto yy1631; -yy1647: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 4) { - goto yy1645; - } - if (yych <= 0x08) goto yy1649; - if (yych <= '\n') goto yy1647; - if (yych <= '\v') goto yy1649; - if (yych <= '\r') goto yy1650; -yy1649: - { return 7; } -yy1650: - yych = *++p; - goto yy1649; -yy1651: - ++p; - yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1631; - if (yych <= '\r') goto yy1651; - if (yych <= 0x1F) goto yy1631; - goto yy1651; - } else { - if (yych == '/') goto yy1653; - if (yych <= '9') goto yy1631; - goto yy1654; - } - } else { - if (yych <= 'Z') { - if (yych == '>') goto yy1645; - if (yych <= '@') goto yy1631; - goto yy1654; - } else { - if (yych <= '_') { - if (yych <= '^') goto yy1631; - goto yy1654; - } else { - if (yych <= '`') goto yy1631; - if (yych <= 'z') goto yy1654; - goto yy1631; - } - } - } -yy1653: - yych = *++p; - if (yych == '>') goto yy1645; - goto yy1631; -yy1654: - ++p; - yych = *p; - if (yybm[0+yych] & 16) { - goto yy1654; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy1631; - } else { - if (yych != ' ') goto yy1631; - } - } else { - if (yych <= '<') { - if (yych <= '/') goto yy1653; - goto yy1631; - } else { - if (yych <= '=') goto yy1658; - if (yych <= '>') goto yy1645; - goto yy1631; - } - } -yy1656: - ++p; - yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) goto yy1631; - if (yych <= '\r') goto yy1656; - if (yych <= 0x1F) goto yy1631; - goto yy1656; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1631; - goto yy1653; - } else { - if (yych == ':') goto yy1654; - goto yy1631; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') goto yy1658; - if (yych <= '>') goto yy1645; - if (yych <= '@') goto yy1631; - goto yy1654; - } else { - if (yych <= '_') { - if (yych <= '^') goto yy1631; - goto yy1654; - } else { - if (yych <= '`') goto yy1631; - if (yych <= 'z') goto yy1654; - goto yy1631; - } - } - } -yy1658: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1660; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) goto yy1631; - if (yych >= '!') goto yy1671; - } else { - if (yych <= '\'') goto yy1669; - if (yych <= 0xC1) goto yy1631; - if (yych <= 0xDF) goto yy1662; - goto yy1663; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1668; - goto yy1664; - } else { - if (yych <= 0xF0) goto yy1665; - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1660; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) goto yy1631; - if (yych <= ' ') goto yy1694; - if (yych <= '"') goto yy1671; - goto yy1669; - } else { - if (yych == '>') goto yy1645; - if (yych <= 0xC1) goto yy1631; - goto yy1662; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1663; - if (yych == 0xED) goto yy1668; - goto yy1664; - } else { - if (yych <= 0xF0) goto yy1665; - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } -yy1660: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1660; - } - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych <= 0x00) goto yy1631; - if (yych <= ' ') goto yy1688; - goto yy1631; - } else { - if (yych <= '>') goto yy1645; - if (yych <= 0xC1) goto yy1631; - if (yych >= 0xE0) goto yy1663; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1668; - goto yy1664; - } else { - if (yych <= 0xF0) goto yy1665; - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } -yy1662: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1660; - goto yy1631; -yy1663: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1631; - if (yych <= 0xBF) goto yy1662; - goto yy1631; -yy1664: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1662; - goto yy1631; -yy1665: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1631; - if (yych <= 0xBF) goto yy1664; - goto yy1631; -yy1666: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1664; - goto yy1631; -yy1667: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x8F) goto yy1664; - goto yy1631; -yy1668: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x9F) goto yy1662; - goto yy1631; -yy1669: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1669; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1631; - if (yych <= '\'') goto yy1680; - goto yy1631; - } else { - if (yych <= 0xDF) goto yy1681; - if (yych <= 0xE0) goto yy1682; - goto yy1683; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1687; - if (yych <= 0xEF) goto yy1683; - goto yy1684; - } else { - if (yych <= 0xF3) goto yy1685; - if (yych <= 0xF4) goto yy1686; - goto yy1631; - } - } -yy1671: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1671; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy1631; - if (yych <= '"') goto yy1680; - goto yy1631; - } else { - if (yych <= 0xDF) goto yy1673; - if (yych <= 0xE0) goto yy1674; - goto yy1675; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1679; - if (yych <= 0xEF) goto yy1675; - goto yy1676; - } else { - if (yych <= 0xF3) goto yy1677; - if (yych <= 0xF4) goto yy1678; - goto yy1631; - } - } -yy1673: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1671; - goto yy1631; -yy1674: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1631; - if (yych <= 0xBF) goto yy1673; - goto yy1631; -yy1675: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1673; - goto yy1631; -yy1676: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1631; - if (yych <= 0xBF) goto yy1675; - goto yy1631; -yy1677: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1675; - goto yy1631; -yy1678: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x8F) goto yy1675; - goto yy1631; -yy1679: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x9F) goto yy1673; - goto yy1631; -yy1680: - ++p; - yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) goto yy1631; - if (yych <= '\r') goto yy1651; - if (yych <= 0x1F) goto yy1631; - goto yy1651; - } else { - if (yych <= '/') { - if (yych <= '.') goto yy1631; - goto yy1653; - } else { - if (yych == '>') goto yy1645; - goto yy1631; - } - } -yy1681: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1669; - goto yy1631; -yy1682: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1631; - if (yych <= 0xBF) goto yy1681; - goto yy1631; -yy1683: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1681; - goto yy1631; -yy1684: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1631; - if (yych <= 0xBF) goto yy1683; - goto yy1631; -yy1685: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0xBF) goto yy1683; - goto yy1631; -yy1686: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x8F) goto yy1683; - goto yy1631; -yy1687: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1631; - if (yych <= 0x9F) goto yy1681; - goto yy1631; -yy1688: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) goto yy1631; - if (yych <= 0x08) goto yy1660; - goto yy1688; - } else { - if (yych == ' ') goto yy1688; - if (yych <= '!') goto yy1660; - goto yy1631; - } - } else { - if (yych <= ':') { - if (yych == '\'') goto yy1631; - if (yych <= '9') goto yy1660; - } else { - if (yych <= ';') goto yy1660; - if (yych <= '=') goto yy1631; - if (yych <= '>') goto yy1645; - goto yy1660; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') goto yy1690; - if (yych <= '^') goto yy1660; - if (yych >= '`') goto yy1631; - } else { - if (yych <= 'z') goto yy1690; - if (yych <= 0x7F) goto yy1660; - if (yych <= 0xC1) goto yy1631; - goto yy1662; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1663; - if (yych == 0xED) goto yy1668; - goto yy1664; - } else { - if (yych <= 0xF0) goto yy1665; - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } - } -yy1690: - ++p; - yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) goto yy1631; - if (yych <= 0x08) goto yy1660; - if (yych >= 0x0E) goto yy1660; - } else { - if (yych <= ' ') goto yy1692; - if (yych == '"') goto yy1631; - goto yy1660; - } - } else { - if (yych <= '/') { - if (yych <= '\'') goto yy1631; - if (yych <= ',') goto yy1660; - if (yych <= '.') goto yy1690; - goto yy1660; - } else { - if (yych <= ';') { - if (yych <= ':') goto yy1690; - goto yy1660; - } else { - if (yych <= '<') goto yy1631; - if (yych <= '=') goto yy1658; - goto yy1645; - } - } - } - } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') goto yy1660; - if (yych <= 'Z') goto yy1690; - if (yych <= '^') goto yy1660; - goto yy1690; - } else { - if (yych <= '`') goto yy1631; - if (yych <= 'z') goto yy1690; - if (yych <= 0x7F) goto yy1660; - goto yy1631; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1662; - if (yych <= 0xE0) goto yy1663; - if (yych <= 0xEC) goto yy1664; - goto yy1668; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1664; - goto yy1665; - } else { - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } - } - } -yy1692: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) goto yy1631; - if (yych <= 0x08) goto yy1660; - if (yych <= '\r') goto yy1692; - goto yy1660; - } else { - if (yych <= ' ') goto yy1692; - if (yych == '"') goto yy1631; - goto yy1660; - } - } else { - if (yych <= ';') { - if (yych <= '\'') goto yy1631; - if (yych == ':') goto yy1690; - goto yy1660; - } else { - if (yych <= '<') goto yy1631; - if (yych <= '=') goto yy1658; - if (yych <= '>') goto yy1645; - goto yy1660; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') goto yy1690; - if (yych <= '^') goto yy1660; - if (yych <= '_') goto yy1690; - goto yy1631; - } else { - if (yych <= 'z') goto yy1690; - if (yych <= 0x7F) goto yy1660; - if (yych <= 0xC1) goto yy1631; - goto yy1662; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1663; - if (yych == 0xED) goto yy1668; - goto yy1664; - } else { - if (yych <= 0xF0) goto yy1665; - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } - } -yy1694: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) goto yy1631; - if (yych <= 0x08) goto yy1660; - goto yy1694; - } else { - if (yych == ' ') goto yy1694; - if (yych <= '!') goto yy1660; - goto yy1671; - } - } else { - if (yych <= ':') { - if (yych == '\'') goto yy1669; - if (yych <= '9') goto yy1660; - goto yy1690; - } else { - if (yych <= ';') goto yy1660; - if (yych <= '=') goto yy1631; - if (yych <= '>') goto yy1645; - goto yy1660; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') goto yy1690; - if (yych <= '^') goto yy1660; - if (yych <= '_') goto yy1690; - goto yy1631; - } else { - if (yych <= 'z') goto yy1690; - if (yych <= 0x7F) goto yy1660; - if (yych <= 0xC1) goto yy1631; - goto yy1662; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1663; - if (yych == 0xED) goto yy1668; - goto yy1664; - } else { - if (yych <= 0xF0) goto yy1665; - if (yych <= 0xF3) goto yy1666; - if (yych <= 0xF4) goto yy1667; - goto yy1631; - } - } - } -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 202, 194, 198, 194, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 198, 224, 64, 224, 224, 224, 224, 128, 224, 224, + 224, 224, 224, 241, 240, 224, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 240, 224, 192, 192, 192, 224, 224, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, 224, 240, 192, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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) { + if (yych <= ';') { + if (yych != '\n') + goto yy1629; + } else { + if (yych <= '<') + goto yy1628; + if (yych <= 0x7F) + goto yy1629; + if (yych >= 0xC2) + goto yy1630; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1632; + if (yych == 0xED) + goto yy1637; + goto yy1633; + } else { + if (yych <= 0xF0) + goto yy1634; + if (yych <= 0xF3) + goto yy1635; + if (yych <= 0xF4) + goto yy1636; + } + } + yy1627 : { return 0; } + yy1628: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '@') { + if (yych == '/') + goto yy1640; + goto yy1627; + } else { + if (yych <= 'Z') + goto yy1638; + if (yych <= '`') + goto yy1627; + if (yych <= 'z') + goto yy1638; + goto yy1627; + } + yy1629: + yych = *++p; + goto yy1627; + yy1630: + yych = *++p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1629; + yy1631: + p = marker; + if (yyaccept == 0) { + goto yy1627; + } else { + goto yy1649; + } + yy1632: + yych = *++p; + if (yych <= 0x9F) + goto yy1631; + if (yych <= 0xBF) + goto yy1630; + goto yy1631; + yy1633: + yych = *++p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1630; + goto yy1631; + yy1634: + yych = *++p; + if (yych <= 0x8F) + goto yy1631; + if (yych <= 0xBF) + goto yy1633; + goto yy1631; + yy1635: + yych = *++p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1633; + goto yy1631; + yy1636: + yych = *++p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x8F) + goto yy1633; + goto yy1631; + yy1637: + yych = *++p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x9F) + goto yy1630; + goto yy1631; + yy1638: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy1638; + } + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1631; + if (yych <= '\r') + goto yy1651; + if (yych <= 0x1F) + goto yy1631; + goto yy1651; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1631; + goto yy1653; + } else { + if (yych == '>') + goto yy1645; + goto yy1631; + } + } + yy1640: + yych = *++p; + if (yych <= '@') + goto yy1631; + if (yych <= 'Z') + goto yy1641; + if (yych <= '`') + goto yy1631; + if (yych >= '{') + goto yy1631; + yy1641: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy1643; + } + if (yych <= '=') { + if (yych <= '-') { + if (yych <= ',') + goto yy1631; + goto yy1641; + } else { + if (yych <= '/') + goto yy1631; + if (yych <= '9') + goto yy1641; + goto yy1631; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy1645; + if (yych <= '@') + goto yy1631; + goto yy1641; + } else { + if (yych <= '`') + goto yy1631; + if (yych <= 'z') + goto yy1641; + goto yy1631; + } + } + yy1643: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy1643; + } + if (yych != '>') + goto yy1631; + yy1645: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy1645; + } + if (yych <= 0x08) + goto yy1631; + if (yych <= '\n') + goto yy1647; + if (yych <= '\v') + goto yy1631; + if (yych <= '\r') + goto yy1650; + goto yy1631; + yy1647: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy1645; + } + if (yych <= 0x08) + goto yy1649; + if (yych <= '\n') + goto yy1647; + if (yych <= '\v') + goto yy1649; + if (yych <= '\r') + goto yy1650; + yy1649 : { return 7; } + yy1650: + yych = *++p; + goto yy1649; + yy1651: + ++p; + yych = *p; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1631; + if (yych <= '\r') + goto yy1651; + if (yych <= 0x1F) + goto yy1631; + goto yy1651; + } else { + if (yych == '/') + goto yy1653; + if (yych <= '9') + goto yy1631; + goto yy1654; + } + } else { + if (yych <= 'Z') { + if (yych == '>') + goto yy1645; + if (yych <= '@') + goto yy1631; + goto yy1654; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy1631; + goto yy1654; + } else { + if (yych <= '`') + goto yy1631; + if (yych <= 'z') + goto yy1654; + goto yy1631; + } + } + } + yy1653: + yych = *++p; + if (yych == '>') + goto yy1645; + goto yy1631; + yy1654: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy1654; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy1631; + } else { + if (yych != ' ') + goto yy1631; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy1653; + goto yy1631; + } else { + if (yych <= '=') + goto yy1658; + if (yych <= '>') + goto yy1645; + goto yy1631; + } + } + yy1656: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1631; + if (yych <= '\r') + goto yy1656; + if (yych <= 0x1F) + goto yy1631; + goto yy1656; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1631; + goto yy1653; + } else { + if (yych == ':') + goto yy1654; + goto yy1631; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') + goto yy1658; + if (yych <= '>') + goto yy1645; + if (yych <= '@') + goto yy1631; + goto yy1654; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy1631; + goto yy1654; + } else { + if (yych <= '`') + goto yy1631; + if (yych <= 'z') + goto yy1654; + goto yy1631; + } + } + } + yy1658: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1660; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy1631; + if (yych >= '!') + goto yy1671; + } else { + if (yych <= '\'') + goto yy1669; + if (yych <= 0xC1) + goto yy1631; + if (yych <= 0xDF) + goto yy1662; + goto yy1663; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) + goto yy1665; + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1660; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy1631; + if (yych <= ' ') + goto yy1694; + if (yych <= '"') + goto yy1671; + goto yy1669; + } else { + if (yych == '>') + goto yy1645; + if (yych <= 0xC1) + goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1663; + if (yych == 0xED) + goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) + goto yy1665; + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + yy1660: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1660; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy1631; + if (yych <= ' ') + goto yy1688; + goto yy1631; + } else { + if (yych <= '>') + goto yy1645; + if (yych <= 0xC1) + goto yy1631; + if (yych >= 0xE0) + goto yy1663; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) + goto yy1665; + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + yy1662: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1660; + goto yy1631; + yy1663: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1631; + if (yych <= 0xBF) + goto yy1662; + goto yy1631; + yy1664: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1662; + goto yy1631; + yy1665: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1631; + if (yych <= 0xBF) + goto yy1664; + goto yy1631; + yy1666: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1664; + goto yy1631; + yy1667: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x8F) + goto yy1664; + goto yy1631; + yy1668: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x9F) + goto yy1662; + goto yy1631; + yy1669: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1669; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1631; + if (yych <= '\'') + goto yy1680; + goto yy1631; + } else { + if (yych <= 0xDF) + goto yy1681; + if (yych <= 0xE0) + goto yy1682; + goto yy1683; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1687; + if (yych <= 0xEF) + goto yy1683; + goto yy1684; + } else { + if (yych <= 0xF3) + goto yy1685; + if (yych <= 0xF4) + goto yy1686; + goto yy1631; + } + } + yy1671: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1671; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy1631; + if (yych <= '"') + goto yy1680; + goto yy1631; + } else { + if (yych <= 0xDF) + goto yy1673; + if (yych <= 0xE0) + goto yy1674; + goto yy1675; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1679; + if (yych <= 0xEF) + goto yy1675; + goto yy1676; + } else { + if (yych <= 0xF3) + goto yy1677; + if (yych <= 0xF4) + goto yy1678; + goto yy1631; + } + } + yy1673: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1671; + goto yy1631; + yy1674: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1631; + if (yych <= 0xBF) + goto yy1673; + goto yy1631; + yy1675: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1673; + goto yy1631; + yy1676: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1631; + if (yych <= 0xBF) + goto yy1675; + goto yy1631; + yy1677: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1675; + goto yy1631; + yy1678: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x8F) + goto yy1675; + goto yy1631; + yy1679: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x9F) + goto yy1673; + goto yy1631; + yy1680: + ++p; + yych = *p; + if (yych <= ' ') { + if (yych <= 0x08) + goto yy1631; + if (yych <= '\r') + goto yy1651; + if (yych <= 0x1F) + goto yy1631; + goto yy1651; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy1631; + goto yy1653; + } else { + if (yych == '>') + goto yy1645; + goto yy1631; + } + } + yy1681: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1669; + goto yy1631; + yy1682: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1631; + if (yych <= 0xBF) + goto yy1681; + goto yy1631; + yy1683: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1681; + goto yy1631; + yy1684: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1631; + if (yych <= 0xBF) + goto yy1683; + goto yy1631; + yy1685: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0xBF) + goto yy1683; + goto yy1631; + yy1686: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x8F) + goto yy1683; + goto yy1631; + yy1687: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1631; + if (yych <= 0x9F) + goto yy1681; + goto yy1631; + yy1688: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy1631; + if (yych <= 0x08) + goto yy1660; + goto yy1688; + } else { + if (yych == ' ') + goto yy1688; + if (yych <= '!') + goto yy1660; + goto yy1631; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy1631; + if (yych <= '9') + goto yy1660; + } else { + if (yych <= ';') + goto yy1660; + if (yych <= '=') + goto yy1631; + if (yych <= '>') + goto yy1645; + goto yy1660; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy1690; + if (yych <= '^') + goto yy1660; + if (yych >= '`') + goto yy1631; + } else { + if (yych <= 'z') + goto yy1690; + if (yych <= 0x7F) + goto yy1660; + if (yych <= 0xC1) + goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1663; + if (yych == 0xED) + goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) + goto yy1665; + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + } + yy1690: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy1631; + if (yych <= 0x08) + goto yy1660; + if (yych >= 0x0E) + goto yy1660; + } else { + if (yych <= ' ') + goto yy1692; + if (yych == '"') + goto yy1631; + goto yy1660; + } + } else { + if (yych <= '/') { + if (yych <= '\'') + goto yy1631; + if (yych <= ',') + goto yy1660; + if (yych <= '.') + goto yy1690; + goto yy1660; + } else { + if (yych <= ';') { + if (yych <= ':') + goto yy1690; + goto yy1660; + } else { + if (yych <= '<') + goto yy1631; + if (yych <= '=') + goto yy1658; + goto yy1645; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy1660; + if (yych <= 'Z') + goto yy1690; + if (yych <= '^') + goto yy1660; + goto yy1690; + } else { + if (yych <= '`') + goto yy1631; + if (yych <= 'z') + goto yy1690; + if (yych <= 0x7F) + goto yy1660; + goto yy1631; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1662; + if (yych <= 0xE0) + goto yy1663; + if (yych <= 0xEC) + goto yy1664; + goto yy1668; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1664; + goto yy1665; + } else { + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + } + } + yy1692: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy1631; + if (yych <= 0x08) + goto yy1660; + if (yych <= '\r') + goto yy1692; + goto yy1660; + } else { + if (yych <= ' ') + goto yy1692; + if (yych == '"') + goto yy1631; + goto yy1660; + } + } else { + if (yych <= ';') { + if (yych <= '\'') + goto yy1631; + if (yych == ':') + goto yy1690; + goto yy1660; + } else { + if (yych <= '<') + goto yy1631; + if (yych <= '=') + goto yy1658; + if (yych <= '>') + goto yy1645; + goto yy1660; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy1690; + if (yych <= '^') + goto yy1660; + if (yych <= '_') + goto yy1690; + goto yy1631; + } else { + if (yych <= 'z') + goto yy1690; + if (yych <= 0x7F) + goto yy1660; + if (yych <= 0xC1) + goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1663; + if (yych == 0xED) + goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) + goto yy1665; + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + } + yy1694: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy1631; + if (yych <= 0x08) + goto yy1660; + goto yy1694; + } else { + if (yych == ' ') + goto yy1694; + if (yych <= '!') + goto yy1660; + goto yy1671; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy1669; + if (yych <= '9') + goto yy1660; + goto yy1690; + } else { + if (yych <= ';') + goto yy1660; + if (yych <= '=') + goto yy1631; + if (yych <= '>') + goto yy1645; + goto yy1660; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy1690; + if (yych <= '^') + goto yy1660; + if (yych <= '_') + goto yy1690; + goto yy1631; + } else { + if (yych <= 'z') + goto yy1690; + if (yych <= 0x7F) + goto yy1660; + if (yych <= 0xC1) + goto yy1631; + goto yy1662; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1663; + if (yych == 0xED) + goto yy1668; + goto yy1664; + } else { + if (yych <= 0xF0) + goto yy1665; + if (yych <= 0xF3) + goto yy1666; + if (yych <= 0xF4) + goto yy1667; + goto yy1631; + } + } + } + } } // Try to match an HTML block end line of type 1 -bufsize_t _scan_html_block_end_1(const unsigned char *p) -{ +bufsize_t _scan_html_block_end_1(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 64, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= ';') { - if (yych != '\n') goto yy1699; - } else { - if (yych <= '<') goto yy1700; - if (yych <= 0x7F) goto yy1699; - if (yych >= 0xC2) goto yy1701; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1703; - if (yych == 0xED) goto yy1708; - goto yy1704; - } else { - if (yych <= 0xF0) goto yy1705; - if (yych <= 0xF3) goto yy1706; - if (yych <= 0xF4) goto yy1707; - } - } -yy1698: - { return 0; } -yy1699: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych == '\n') goto yy1698; - goto yy1713; - } else { - if (yych <= 0xC1) goto yy1698; - if (yych <= 0xF4) goto yy1713; - goto yy1698; - } -yy1700: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '/') { - if (yych == '\n') goto yy1698; - if (yych <= '.') goto yy1713; - goto yy1709; - } else { - if (yych <= 0x7F) goto yy1713; - if (yych <= 0xC1) goto yy1698; - if (yych <= 0xF4) goto yy1713; - goto yy1698; - } -yy1701: - yych = *++p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0xBF) goto yy1699; -yy1702: - p = marker; - if (yyaccept == 0) { - goto yy1698; - } else { - goto yy1730; - } -yy1703: - yych = *++p; - if (yych <= 0x9F) goto yy1702; - if (yych <= 0xBF) goto yy1701; - goto yy1702; -yy1704: - yych = *++p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0xBF) goto yy1701; - goto yy1702; -yy1705: - yych = *++p; - if (yych <= 0x8F) goto yy1702; - if (yych <= 0xBF) goto yy1704; - goto yy1702; -yy1706: - yych = *++p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0xBF) goto yy1704; - goto yy1702; -yy1707: - yych = *++p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0x8F) goto yy1704; - goto yy1702; -yy1708: - yych = *++p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0x9F) goto yy1701; - goto yy1702; -yy1709: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 's') { - if (yych <= 'R') { - if (yych <= '\n') { - if (yych <= '\t') goto yy1712; - goto yy1702; - } else { - if (yych == 'P') goto yy1721; - goto yy1712; - } - } else { - if (yych <= 'o') { - if (yych <= 'S') goto yy1722; - goto yy1712; - } else { - if (yych <= 'p') goto yy1721; - if (yych <= 'r') goto yy1712; - goto yy1722; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } else { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - goto yy1716; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1720; - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1710: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xDF) { - if (yych <= '.') { - if (yych == '\n') goto yy1702; - } else { - if (yych <= '/') goto yy1709; - if (yych <= 0x7F) goto yy1712; - if (yych <= 0xC1) goto yy1702; - goto yy1714; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1715; - if (yych == 0xED) goto yy1720; - goto yy1716; - } else { - if (yych <= 0xF0) goto yy1717; - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } -yy1712: - ++p; - yych = *p; -yy1713: - if (yybm[0+yych] & 128) { - goto yy1712; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1702; - if (yych <= '<') goto yy1710; - goto yy1702; - } else { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - goto yy1716; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1720; - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } -yy1714: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0xBF) goto yy1712; - goto yy1702; -yy1715: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1702; - if (yych <= 0xBF) goto yy1714; - goto yy1702; -yy1716: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0xBF) goto yy1714; - goto yy1702; -yy1717: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1702; - if (yych <= 0xBF) goto yy1716; - goto yy1702; -yy1718: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0xBF) goto yy1716; - goto yy1702; -yy1719: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0x8F) goto yy1716; - goto yy1702; -yy1720: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1702; - if (yych <= 0x9F) goto yy1714; - goto yy1702; -yy1721: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'R') { - if (yych == '\n') goto yy1702; - if (yych <= 'Q') goto yy1712; - goto yy1733; - } else { - if (yych == 'r') goto yy1733; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1722: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 't') { - if (yych <= 'S') { - if (yych <= '\n') { - if (yych <= '\t') goto yy1712; - goto yy1702; - } else { - if (yych == 'C') goto yy1724; - goto yy1712; - } - } else { - if (yych <= 'b') { - if (yych >= 'U') goto yy1712; - } else { - if (yych <= 'c') goto yy1724; - if (yych <= 's') goto yy1712; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } else { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - goto yy1716; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1720; - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'Y') { - if (yych == '\n') goto yy1702; - if (yych <= 'X') goto yy1712; - goto yy1731; - } else { - if (yych == 'y') goto yy1731; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1724: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'R') { - if (yych == '\n') goto yy1702; - if (yych <= 'Q') goto yy1712; - } else { - if (yych == 'r') goto yy1725; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1725: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'I') { - if (yych == '\n') goto yy1702; - if (yych <= 'H') goto yy1712; - } else { - if (yych == 'i') goto yy1726; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1726: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'P') { - if (yych == '\n') goto yy1702; - if (yych <= 'O') goto yy1712; - } else { - if (yych == 'p') goto yy1727; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1727: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'T') { - if (yych == '\n') goto yy1702; - if (yych <= 'S') goto yy1712; - } else { - if (yych == 't') goto yy1728; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1728: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') goto yy1702; - goto yy1712; - } else { - if (yych <= '>') goto yy1729; - if (yych <= 0x7F) goto yy1712; - if (yych <= 0xC1) goto yy1702; - goto yy1714; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1715; - if (yych == 0xED) goto yy1720; - goto yy1716; - } else { - if (yych <= 0xF0) goto yy1717; - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } -yy1729: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1712; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1730; - if (yych <= '<') goto yy1710; - } else { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - goto yy1716; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1720; - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - } - } -yy1730: - { return (bufsize_t)(p - start); } -yy1731: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'L') { - if (yych == '\n') goto yy1702; - if (yych <= 'K') goto yy1712; - } else { - if (yych == 'l') goto yy1732; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1732: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'E') { - if (yych == '\n') goto yy1702; - if (yych <= 'D') goto yy1712; - goto yy1728; - } else { - if (yych == 'e') goto yy1728; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -yy1733: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1710; - } - if (yych <= 0xC1) { - if (yych <= 'E') { - if (yych == '\n') goto yy1702; - if (yych <= 'D') goto yy1712; - goto yy1728; - } else { - if (yych == 'e') goto yy1728; - if (yych <= 0x7F) goto yy1712; - goto yy1702; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1714; - if (yych <= 0xE0) goto yy1715; - if (yych <= 0xEC) goto yy1716; - goto yy1720; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1716; - goto yy1717; - } else { - if (yych <= 0xF3) goto yy1718; - if (yych <= 0xF4) goto yy1719; - goto yy1702; - } - } - } -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= ';') { + if (yych != '\n') + goto yy1699; + } else { + if (yych <= '<') + goto yy1700; + if (yych <= 0x7F) + goto yy1699; + if (yych >= 0xC2) + goto yy1701; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1703; + if (yych == 0xED) + goto yy1708; + goto yy1704; + } else { + if (yych <= 0xF0) + goto yy1705; + if (yych <= 0xF3) + goto yy1706; + if (yych <= 0xF4) + goto yy1707; + } + } + yy1698 : { return 0; } + yy1699: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1698; + goto yy1713; + } else { + if (yych <= 0xC1) + goto yy1698; + if (yych <= 0xF4) + goto yy1713; + goto yy1698; + } + yy1700: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '/') { + if (yych == '\n') + goto yy1698; + if (yych <= '.') + goto yy1713; + goto yy1709; + } else { + if (yych <= 0x7F) + goto yy1713; + if (yych <= 0xC1) + goto yy1698; + if (yych <= 0xF4) + goto yy1713; + goto yy1698; + } + yy1701: + yych = *++p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0xBF) + goto yy1699; + yy1702: + p = marker; + if (yyaccept == 0) { + goto yy1698; + } else { + goto yy1730; + } + yy1703: + yych = *++p; + if (yych <= 0x9F) + goto yy1702; + if (yych <= 0xBF) + goto yy1701; + goto yy1702; + yy1704: + yych = *++p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0xBF) + goto yy1701; + goto yy1702; + yy1705: + yych = *++p; + if (yych <= 0x8F) + goto yy1702; + if (yych <= 0xBF) + goto yy1704; + goto yy1702; + yy1706: + yych = *++p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0xBF) + goto yy1704; + goto yy1702; + yy1707: + yych = *++p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0x8F) + goto yy1704; + goto yy1702; + yy1708: + yych = *++p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0x9F) + goto yy1701; + goto yy1702; + yy1709: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 's') { + if (yych <= 'R') { + if (yych <= '\n') { + if (yych <= '\t') + goto yy1712; + goto yy1702; + } else { + if (yych == 'P') + goto yy1721; + goto yy1712; + } + } else { + if (yych <= 'o') { + if (yych <= 'S') + goto yy1722; + goto yy1712; + } else { + if (yych <= 'p') + goto yy1721; + if (yych <= 'r') + goto yy1712; + goto yy1722; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } else { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1720; + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1710: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xDF) { + if (yych <= '.') { + if (yych == '\n') + goto yy1702; + } else { + if (yych <= '/') + goto yy1709; + if (yych <= 0x7F) + goto yy1712; + if (yych <= 0xC1) + goto yy1702; + goto yy1714; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1715; + if (yych == 0xED) + goto yy1720; + goto yy1716; + } else { + if (yych <= 0xF0) + goto yy1717; + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + yy1712: + ++p; + yych = *p; + yy1713: + if (yybm[0 + yych] & 128) { + goto yy1712; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1702; + if (yych <= '<') + goto yy1710; + goto yy1702; + } else { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1720; + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + yy1714: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0xBF) + goto yy1712; + goto yy1702; + yy1715: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1702; + if (yych <= 0xBF) + goto yy1714; + goto yy1702; + yy1716: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0xBF) + goto yy1714; + goto yy1702; + yy1717: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1702; + if (yych <= 0xBF) + goto yy1716; + goto yy1702; + yy1718: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0xBF) + goto yy1716; + goto yy1702; + yy1719: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0x8F) + goto yy1716; + goto yy1702; + yy1720: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1702; + if (yych <= 0x9F) + goto yy1714; + goto yy1702; + yy1721: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') + goto yy1702; + if (yych <= 'Q') + goto yy1712; + goto yy1733; + } else { + if (yych == 'r') + goto yy1733; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1722: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 't') { + if (yych <= 'S') { + if (yych <= '\n') { + if (yych <= '\t') + goto yy1712; + goto yy1702; + } else { + if (yych == 'C') + goto yy1724; + goto yy1712; + } + } else { + if (yych <= 'b') { + if (yych >= 'U') + goto yy1712; + } else { + if (yych <= 'c') + goto yy1724; + if (yych <= 's') + goto yy1712; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } else { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1720; + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'Y') { + if (yych == '\n') + goto yy1702; + if (yych <= 'X') + goto yy1712; + goto yy1731; + } else { + if (yych == 'y') + goto yy1731; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1724: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') + goto yy1702; + if (yych <= 'Q') + goto yy1712; + } else { + if (yych == 'r') + goto yy1725; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1725: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'I') { + if (yych == '\n') + goto yy1702; + if (yych <= 'H') + goto yy1712; + } else { + if (yych == 'i') + goto yy1726; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1726: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'P') { + if (yych == '\n') + goto yy1702; + if (yych <= 'O') + goto yy1712; + } else { + if (yych == 'p') + goto yy1727; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1727: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'T') { + if (yych == '\n') + goto yy1702; + if (yych <= 'S') + goto yy1712; + } else { + if (yych == 't') + goto yy1728; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1728: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy1702; + goto yy1712; + } else { + if (yych <= '>') + goto yy1729; + if (yych <= 0x7F) + goto yy1712; + if (yych <= 0xC1) + goto yy1702; + goto yy1714; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1715; + if (yych == 0xED) + goto yy1720; + goto yy1716; + } else { + if (yych <= 0xF0) + goto yy1717; + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + yy1729: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1712; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1730; + if (yych <= '<') + goto yy1710; + } else { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + goto yy1716; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1720; + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + } + } + yy1730 : { return (bufsize_t)(p - start); } + yy1731: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'L') { + if (yych == '\n') + goto yy1702; + if (yych <= 'K') + goto yy1712; + } else { + if (yych == 'l') + goto yy1732; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1732: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'E') { + if (yych == '\n') + goto yy1702; + if (yych <= 'D') + goto yy1712; + goto yy1728; + } else { + if (yych == 'e') + goto yy1728; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + yy1733: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1710; + } + if (yych <= 0xC1) { + if (yych <= 'E') { + if (yych == '\n') + goto yy1702; + if (yych <= 'D') + goto yy1712; + goto yy1728; + } else { + if (yych == 'e') + goto yy1728; + if (yych <= 0x7F) + goto yy1712; + goto yy1702; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1714; + if (yych <= 0xE0) + goto yy1715; + if (yych <= 0xEC) + goto yy1716; + goto yy1720; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1716; + goto yy1717; + } else { + if (yych <= 0xF3) + goto yy1718; + if (yych <= 0xF4) + goto yy1719; + goto yy1702; + } + } + } + } } // Try to match an HTML block end line of type 2 -bufsize_t _scan_html_block_end_2(const unsigned char *p) -{ +bufsize_t _scan_html_block_end_2(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 64, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= ',') { - if (yych != '\n') goto yy1737; - } else { - if (yych <= '-') goto yy1738; - if (yych <= 0x7F) goto yy1737; - if (yych >= 0xC2) goto yy1739; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1741; - if (yych == 0xED) goto yy1746; - goto yy1742; - } else { - if (yych <= 0xF0) goto yy1743; - if (yych <= 0xF3) goto yy1744; - if (yych <= 0xF4) goto yy1745; - } - } -yy1736: - { return 0; } -yy1737: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych == '\n') goto yy1736; - goto yy1750; - } else { - if (yych <= 0xC1) goto yy1736; - if (yych <= 0xF4) goto yy1750; - goto yy1736; - } -yy1738: - yyaccept = 0; - yych = *(marker = ++p); - if (yybm[0+yych] & 64) { - goto yy1747; - } - if (yych <= 0x7F) { - if (yych == '\n') goto yy1736; - goto yy1750; - } else { - if (yych <= 0xC1) goto yy1736; - if (yych <= 0xF4) goto yy1750; - goto yy1736; - } -yy1739: - yych = *++p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0xBF) goto yy1737; -yy1740: - p = marker; - if (yyaccept == 0) { - goto yy1736; - } else { - goto yy1760; - } -yy1741: - yych = *++p; - if (yych <= 0x9F) goto yy1740; - if (yych <= 0xBF) goto yy1739; - goto yy1740; -yy1742: - yych = *++p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0xBF) goto yy1739; - goto yy1740; -yy1743: - yych = *++p; - if (yych <= 0x8F) goto yy1740; - if (yych <= 0xBF) goto yy1742; - goto yy1740; -yy1744: - yych = *++p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0xBF) goto yy1742; - goto yy1740; -yy1745: - yych = *++p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0x8F) goto yy1742; - goto yy1740; -yy1746: - yych = *++p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0x9F) goto yy1739; - goto yy1740; -yy1747: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1747; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') goto yy1740; - } else { - if (yych <= '>') goto yy1759; - if (yych <= 0x7F) goto yy1749; - if (yych <= 0xC1) goto yy1740; - goto yy1751; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1752; - if (yych == 0xED) goto yy1757; - goto yy1753; - } else { - if (yych <= 0xF0) goto yy1754; - if (yych <= 0xF3) goto yy1755; - if (yych <= 0xF4) goto yy1756; - goto yy1740; - } - } -yy1749: - ++p; - yych = *p; -yy1750: - if (yybm[0+yych] & 128) { - goto yy1749; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1740; - if (yych <= '-') goto yy1758; - goto yy1740; - } else { - if (yych <= 0xDF) goto yy1751; - if (yych <= 0xE0) goto yy1752; - goto yy1753; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1757; - if (yych <= 0xEF) goto yy1753; - goto yy1754; - } else { - if (yych <= 0xF3) goto yy1755; - if (yych <= 0xF4) goto yy1756; - goto yy1740; - } - } -yy1751: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0xBF) goto yy1749; - goto yy1740; -yy1752: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1740; - if (yych <= 0xBF) goto yy1751; - goto yy1740; -yy1753: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0xBF) goto yy1751; - goto yy1740; -yy1754: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1740; - if (yych <= 0xBF) goto yy1753; - goto yy1740; -yy1755: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0xBF) goto yy1753; - goto yy1740; -yy1756: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0x8F) goto yy1753; - goto yy1740; -yy1757: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1740; - if (yych <= 0x9F) goto yy1751; - goto yy1740; -yy1758: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1749; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1740; - if (yych <= '-') goto yy1747; - goto yy1740; - } else { - if (yych <= 0xDF) goto yy1751; - if (yych <= 0xE0) goto yy1752; - goto yy1753; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1757; - if (yych <= 0xEF) goto yy1753; - goto yy1754; - } else { - if (yych <= 0xF3) goto yy1755; - if (yych <= 0xF4) goto yy1756; - goto yy1740; - } - } -yy1759: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1749; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1760; - if (yych <= '-') goto yy1758; - } else { - if (yych <= 0xDF) goto yy1751; - if (yych <= 0xE0) goto yy1752; - goto yy1753; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1757; - if (yych <= 0xEF) goto yy1753; - goto yy1754; - } else { - if (yych <= 0xF3) goto yy1755; - if (yych <= 0xF4) goto yy1756; - } - } -yy1760: - { return (bufsize_t)(p - start); } -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= ',') { + if (yych != '\n') + goto yy1737; + } else { + if (yych <= '-') + goto yy1738; + if (yych <= 0x7F) + goto yy1737; + if (yych >= 0xC2) + goto yy1739; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1741; + if (yych == 0xED) + goto yy1746; + goto yy1742; + } else { + if (yych <= 0xF0) + goto yy1743; + if (yych <= 0xF3) + goto yy1744; + if (yych <= 0xF4) + goto yy1745; + } + } + yy1736 : { return 0; } + yy1737: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1736; + goto yy1750; + } else { + if (yych <= 0xC1) + goto yy1736; + if (yych <= 0xF4) + goto yy1750; + goto yy1736; + } + yy1738: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0 + yych] & 64) { + goto yy1747; + } + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1736; + goto yy1750; + } else { + if (yych <= 0xC1) + goto yy1736; + if (yych <= 0xF4) + goto yy1750; + goto yy1736; + } + yy1739: + yych = *++p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0xBF) + goto yy1737; + yy1740: + p = marker; + if (yyaccept == 0) { + goto yy1736; + } else { + goto yy1760; + } + yy1741: + yych = *++p; + if (yych <= 0x9F) + goto yy1740; + if (yych <= 0xBF) + goto yy1739; + goto yy1740; + yy1742: + yych = *++p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0xBF) + goto yy1739; + goto yy1740; + yy1743: + yych = *++p; + if (yych <= 0x8F) + goto yy1740; + if (yych <= 0xBF) + goto yy1742; + goto yy1740; + yy1744: + yych = *++p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0xBF) + goto yy1742; + goto yy1740; + yy1745: + yych = *++p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0x8F) + goto yy1742; + goto yy1740; + yy1746: + yych = *++p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0x9F) + goto yy1739; + goto yy1740; + yy1747: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1747; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy1740; + } else { + if (yych <= '>') + goto yy1759; + if (yych <= 0x7F) + goto yy1749; + if (yych <= 0xC1) + goto yy1740; + goto yy1751; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1752; + if (yych == 0xED) + goto yy1757; + goto yy1753; + } else { + if (yych <= 0xF0) + goto yy1754; + if (yych <= 0xF3) + goto yy1755; + if (yych <= 0xF4) + goto yy1756; + goto yy1740; + } + } + yy1749: + ++p; + yych = *p; + yy1750: + if (yybm[0 + yych] & 128) { + goto yy1749; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1740; + if (yych <= '-') + goto yy1758; + goto yy1740; + } else { + if (yych <= 0xDF) + goto yy1751; + if (yych <= 0xE0) + goto yy1752; + goto yy1753; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1757; + if (yych <= 0xEF) + goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) + goto yy1755; + if (yych <= 0xF4) + goto yy1756; + goto yy1740; + } + } + yy1751: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0xBF) + goto yy1749; + goto yy1740; + yy1752: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1740; + if (yych <= 0xBF) + goto yy1751; + goto yy1740; + yy1753: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0xBF) + goto yy1751; + goto yy1740; + yy1754: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1740; + if (yych <= 0xBF) + goto yy1753; + goto yy1740; + yy1755: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0xBF) + goto yy1753; + goto yy1740; + yy1756: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0x8F) + goto yy1753; + goto yy1740; + yy1757: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1740; + if (yych <= 0x9F) + goto yy1751; + goto yy1740; + yy1758: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1749; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1740; + if (yych <= '-') + goto yy1747; + goto yy1740; + } else { + if (yych <= 0xDF) + goto yy1751; + if (yych <= 0xE0) + goto yy1752; + goto yy1753; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1757; + if (yych <= 0xEF) + goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) + goto yy1755; + if (yych <= 0xF4) + goto yy1756; + goto yy1740; + } + } + yy1759: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1749; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1760; + if (yych <= '-') + goto yy1758; + } else { + if (yych <= 0xDF) + goto yy1751; + if (yych <= 0xE0) + goto yy1752; + goto yy1753; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1757; + if (yych <= 0xEF) + goto yy1753; + goto yy1754; + } else { + if (yych <= 0xF3) + goto yy1755; + if (yych <= 0xF4) + goto yy1756; + } + } + yy1760 : { return (bufsize_t)(p - start); } + } } // Try to match an HTML block end line of type 3 -bufsize_t _scan_html_block_end_3(const unsigned char *p) -{ +bufsize_t _scan_html_block_end_3(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 64, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= '>') { - if (yych != '\n') goto yy1764; - } else { - if (yych <= '?') goto yy1765; - if (yych <= 0x7F) goto yy1764; - if (yych >= 0xC2) goto yy1766; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1768; - if (yych == 0xED) goto yy1773; - goto yy1769; - } else { - if (yych <= 0xF0) goto yy1770; - if (yych <= 0xF3) goto yy1771; - if (yych <= 0xF4) goto yy1772; - } - } -yy1763: - { return 0; } -yy1764: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych == '\n') goto yy1763; - goto yy1779; - } else { - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xF4) goto yy1779; - goto yy1763; - } -yy1765: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '>') { - if (yych == '\n') goto yy1763; - if (yych <= '=') goto yy1779; - goto yy1774; - } else { - if (yych <= 0x7F) goto yy1779; - if (yych <= 0xC1) goto yy1763; - if (yych <= 0xF4) goto yy1779; - goto yy1763; - } -yy1766: - yych = *++p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0xBF) goto yy1764; -yy1767: - p = marker; - if (yyaccept == 0) { - goto yy1763; - } else { - goto yy1775; - } -yy1768: - yych = *++p; - if (yych <= 0x9F) goto yy1767; - if (yych <= 0xBF) goto yy1766; - goto yy1767; -yy1769: - yych = *++p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0xBF) goto yy1766; - goto yy1767; -yy1770: - yych = *++p; - if (yych <= 0x8F) goto yy1767; - if (yych <= 0xBF) goto yy1769; - goto yy1767; -yy1771: - yych = *++p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0xBF) goto yy1769; - goto yy1767; -yy1772: - yych = *++p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0x8F) goto yy1769; - goto yy1767; -yy1773: - yych = *++p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0x9F) goto yy1766; - goto yy1767; -yy1774: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1778; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1775; - if (yych <= '?') goto yy1776; - } else { - if (yych <= 0xDF) goto yy1780; - if (yych <= 0xE0) goto yy1781; - goto yy1782; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1786; - if (yych <= 0xEF) goto yy1782; - goto yy1783; - } else { - if (yych <= 0xF3) goto yy1784; - if (yych <= 0xF4) goto yy1785; - } - } -yy1775: - { return (bufsize_t)(p - start); } -yy1776: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1776; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') goto yy1767; - } else { - if (yych <= '>') goto yy1774; - if (yych <= 0x7F) goto yy1778; - if (yych <= 0xC1) goto yy1767; - goto yy1780; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1781; - if (yych == 0xED) goto yy1786; - goto yy1782; - } else { - if (yych <= 0xF0) goto yy1783; - if (yych <= 0xF3) goto yy1784; - if (yych <= 0xF4) goto yy1785; - goto yy1767; - } - } -yy1778: - ++p; - yych = *p; -yy1779: - if (yybm[0+yych] & 128) { - goto yy1778; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1767; - if (yych <= '?') goto yy1776; - goto yy1767; - } else { - if (yych <= 0xDF) goto yy1780; - if (yych <= 0xE0) goto yy1781; - goto yy1782; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1786; - if (yych <= 0xEF) goto yy1782; - goto yy1783; - } else { - if (yych <= 0xF3) goto yy1784; - if (yych <= 0xF4) goto yy1785; - goto yy1767; - } - } -yy1780: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0xBF) goto yy1778; - goto yy1767; -yy1781: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1767; - if (yych <= 0xBF) goto yy1780; - goto yy1767; -yy1782: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0xBF) goto yy1780; - goto yy1767; -yy1783: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1767; - if (yych <= 0xBF) goto yy1782; - goto yy1767; -yy1784: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0xBF) goto yy1782; - goto yy1767; -yy1785: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0x8F) goto yy1782; - goto yy1767; -yy1786: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1767; - if (yych <= 0x9F) goto yy1780; - goto yy1767; -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '>') { + if (yych != '\n') + goto yy1764; + } else { + if (yych <= '?') + goto yy1765; + if (yych <= 0x7F) + goto yy1764; + if (yych >= 0xC2) + goto yy1766; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1768; + if (yych == 0xED) + goto yy1773; + goto yy1769; + } else { + if (yych <= 0xF0) + goto yy1770; + if (yych <= 0xF3) + goto yy1771; + if (yych <= 0xF4) + goto yy1772; + } + } + yy1763 : { return 0; } + yy1764: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1763; + goto yy1779; + } else { + if (yych <= 0xC1) + goto yy1763; + if (yych <= 0xF4) + goto yy1779; + goto yy1763; + } + yy1765: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '>') { + if (yych == '\n') + goto yy1763; + if (yych <= '=') + goto yy1779; + goto yy1774; + } else { + if (yych <= 0x7F) + goto yy1779; + if (yych <= 0xC1) + goto yy1763; + if (yych <= 0xF4) + goto yy1779; + goto yy1763; + } + yy1766: + yych = *++p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0xBF) + goto yy1764; + yy1767: + p = marker; + if (yyaccept == 0) { + goto yy1763; + } else { + goto yy1775; + } + yy1768: + yych = *++p; + if (yych <= 0x9F) + goto yy1767; + if (yych <= 0xBF) + goto yy1766; + goto yy1767; + yy1769: + yych = *++p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0xBF) + goto yy1766; + goto yy1767; + yy1770: + yych = *++p; + if (yych <= 0x8F) + goto yy1767; + if (yych <= 0xBF) + goto yy1769; + goto yy1767; + yy1771: + yych = *++p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0xBF) + goto yy1769; + goto yy1767; + yy1772: + yych = *++p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0x8F) + goto yy1769; + goto yy1767; + yy1773: + yych = *++p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0x9F) + goto yy1766; + goto yy1767; + yy1774: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1778; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1775; + if (yych <= '?') + goto yy1776; + } else { + if (yych <= 0xDF) + goto yy1780; + if (yych <= 0xE0) + goto yy1781; + goto yy1782; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1786; + if (yych <= 0xEF) + goto yy1782; + goto yy1783; + } else { + if (yych <= 0xF3) + goto yy1784; + if (yych <= 0xF4) + goto yy1785; + } + } + yy1775 : { return (bufsize_t)(p - start); } + yy1776: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1776; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy1767; + } else { + if (yych <= '>') + goto yy1774; + if (yych <= 0x7F) + goto yy1778; + if (yych <= 0xC1) + goto yy1767; + goto yy1780; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1781; + if (yych == 0xED) + goto yy1786; + goto yy1782; + } else { + if (yych <= 0xF0) + goto yy1783; + if (yych <= 0xF3) + goto yy1784; + if (yych <= 0xF4) + goto yy1785; + goto yy1767; + } + } + yy1778: + ++p; + yych = *p; + yy1779: + if (yybm[0 + yych] & 128) { + goto yy1778; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1767; + if (yych <= '?') + goto yy1776; + goto yy1767; + } else { + if (yych <= 0xDF) + goto yy1780; + if (yych <= 0xE0) + goto yy1781; + goto yy1782; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1786; + if (yych <= 0xEF) + goto yy1782; + goto yy1783; + } else { + if (yych <= 0xF3) + goto yy1784; + if (yych <= 0xF4) + goto yy1785; + goto yy1767; + } + } + yy1780: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0xBF) + goto yy1778; + goto yy1767; + yy1781: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1767; + if (yych <= 0xBF) + goto yy1780; + goto yy1767; + yy1782: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0xBF) + goto yy1780; + goto yy1767; + yy1783: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1767; + if (yych <= 0xBF) + goto yy1782; + goto yy1767; + yy1784: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0xBF) + goto yy1782; + goto yy1767; + yy1785: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0x8F) + goto yy1782; + goto yy1767; + yy1786: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1767; + if (yych <= 0x9F) + goto yy1780; + goto yy1767; + } } // Try to match an HTML block end line of type 4 -bufsize_t _scan_html_block_end_4(const unsigned char *p) -{ +bufsize_t _scan_html_block_end_4(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 64, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych != '\n') goto yy1790; - } else { - if (yych <= '>') goto yy1791; - if (yych <= 0x7F) goto yy1790; - if (yych >= 0xC2) goto yy1793; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1795; - if (yych == 0xED) goto yy1800; - goto yy1796; - } else { - if (yych <= 0xF0) goto yy1797; - if (yych <= 0xF3) goto yy1798; - if (yych <= 0xF4) goto yy1799; - } - } -yy1789: - { return 0; } -yy1790: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych == '\n') goto yy1789; - goto yy1804; - } else { - if (yych <= 0xC1) goto yy1789; - if (yych <= 0xF4) goto yy1804; - goto yy1789; - } -yy1791: - yyaccept = 1; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') goto yy1804; - } else { - if (yych <= 0xC1) goto yy1792; - if (yych <= 0xF4) goto yy1804; - } -yy1792: - { return (bufsize_t)(p - start); } -yy1793: - yych = *++p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0xBF) goto yy1790; -yy1794: - p = marker; - if (yyaccept == 0) { - goto yy1789; - } else { - goto yy1792; - } -yy1795: - yych = *++p; - if (yych <= 0x9F) goto yy1794; - if (yych <= 0xBF) goto yy1793; - goto yy1794; -yy1796: - yych = *++p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0xBF) goto yy1793; - goto yy1794; -yy1797: - yych = *++p; - if (yych <= 0x8F) goto yy1794; - if (yych <= 0xBF) goto yy1796; - goto yy1794; -yy1798: - yych = *++p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0xBF) goto yy1796; - goto yy1794; -yy1799: - yych = *++p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0x8F) goto yy1796; - goto yy1794; -yy1800: - yych = *++p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0x9F) goto yy1793; - goto yy1794; -yy1801: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1803; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1792; - if (yych <= '>') goto yy1801; - goto yy1792; - } else { - if (yych <= 0xDF) goto yy1805; - if (yych <= 0xE0) goto yy1806; - goto yy1807; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1811; - if (yych <= 0xEF) goto yy1807; - goto yy1808; - } else { - if (yych <= 0xF3) goto yy1809; - if (yych <= 0xF4) goto yy1810; - goto yy1792; - } - } -yy1803: - ++p; - yych = *p; -yy1804: - if (yybm[0+yych] & 128) { - goto yy1803; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1794; - if (yych <= '>') goto yy1801; - goto yy1794; - } else { - if (yych <= 0xDF) goto yy1805; - if (yych <= 0xE0) goto yy1806; - goto yy1807; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1811; - if (yych <= 0xEF) goto yy1807; - goto yy1808; - } else { - if (yych <= 0xF3) goto yy1809; - if (yych <= 0xF4) goto yy1810; - goto yy1794; - } - } -yy1805: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0xBF) goto yy1803; - goto yy1794; -yy1806: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1794; - if (yych <= 0xBF) goto yy1805; - goto yy1794; -yy1807: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0xBF) goto yy1805; - goto yy1794; -yy1808: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1794; - if (yych <= 0xBF) goto yy1807; - goto yy1794; -yy1809: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0xBF) goto yy1807; - goto yy1794; -yy1810: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0x8F) goto yy1807; - goto yy1794; -yy1811: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1794; - if (yych <= 0x9F) goto yy1805; - goto yy1794; -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych != '\n') + goto yy1790; + } else { + if (yych <= '>') + goto yy1791; + if (yych <= 0x7F) + goto yy1790; + if (yych >= 0xC2) + goto yy1793; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1795; + if (yych == 0xED) + goto yy1800; + goto yy1796; + } else { + if (yych <= 0xF0) + goto yy1797; + if (yych <= 0xF3) + goto yy1798; + if (yych <= 0xF4) + goto yy1799; + } + } + yy1789 : { return 0; } + yy1790: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1789; + goto yy1804; + } else { + if (yych <= 0xC1) + goto yy1789; + if (yych <= 0xF4) + goto yy1804; + goto yy1789; + } + yy1791: + yyaccept = 1; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy1804; + } else { + if (yych <= 0xC1) + goto yy1792; + if (yych <= 0xF4) + goto yy1804; + } + yy1792 : { return (bufsize_t)(p - start); } + yy1793: + yych = *++p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0xBF) + goto yy1790; + yy1794: + p = marker; + if (yyaccept == 0) { + goto yy1789; + } else { + goto yy1792; + } + yy1795: + yych = *++p; + if (yych <= 0x9F) + goto yy1794; + if (yych <= 0xBF) + goto yy1793; + goto yy1794; + yy1796: + yych = *++p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0xBF) + goto yy1793; + goto yy1794; + yy1797: + yych = *++p; + if (yych <= 0x8F) + goto yy1794; + if (yych <= 0xBF) + goto yy1796; + goto yy1794; + yy1798: + yych = *++p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0xBF) + goto yy1796; + goto yy1794; + yy1799: + yych = *++p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0x8F) + goto yy1796; + goto yy1794; + yy1800: + yych = *++p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0x9F) + goto yy1793; + goto yy1794; + yy1801: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1803; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1792; + if (yych <= '>') + goto yy1801; + goto yy1792; + } else { + if (yych <= 0xDF) + goto yy1805; + if (yych <= 0xE0) + goto yy1806; + goto yy1807; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1811; + if (yych <= 0xEF) + goto yy1807; + goto yy1808; + } else { + if (yych <= 0xF3) + goto yy1809; + if (yych <= 0xF4) + goto yy1810; + goto yy1792; + } + } + yy1803: + ++p; + yych = *p; + yy1804: + if (yybm[0 + yych] & 128) { + goto yy1803; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1794; + if (yych <= '>') + goto yy1801; + goto yy1794; + } else { + if (yych <= 0xDF) + goto yy1805; + if (yych <= 0xE0) + goto yy1806; + goto yy1807; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1811; + if (yych <= 0xEF) + goto yy1807; + goto yy1808; + } else { + if (yych <= 0xF3) + goto yy1809; + if (yych <= 0xF4) + goto yy1810; + goto yy1794; + } + } + yy1805: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0xBF) + goto yy1803; + goto yy1794; + yy1806: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1794; + if (yych <= 0xBF) + goto yy1805; + goto yy1794; + yy1807: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0xBF) + goto yy1805; + goto yy1794; + yy1808: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1794; + if (yych <= 0xBF) + goto yy1807; + goto yy1794; + yy1809: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0xBF) + goto yy1807; + goto yy1794; + yy1810: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0x8F) + goto yy1807; + goto yy1794; + yy1811: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1794; + if (yych <= 0x9F) + goto yy1805; + goto yy1794; + } } // Try to match an HTML block end line of type 5 -bufsize_t _scan_html_block_end_5(const unsigned char *p) -{ +bufsize_t _scan_html_block_end_5(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 64, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 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, - }; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= '\\') { - if (yych != '\n') goto yy1815; - } else { - if (yych <= ']') goto yy1816; - if (yych <= 0x7F) goto yy1815; - if (yych >= 0xC2) goto yy1817; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1819; - if (yych == 0xED) goto yy1824; - goto yy1820; - } else { - if (yych <= 0xF0) goto yy1821; - if (yych <= 0xF3) goto yy1822; - if (yych <= 0xF4) goto yy1823; - } - } -yy1814: - { return 0; } -yy1815: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych == '\n') goto yy1814; - goto yy1828; - } else { - if (yych <= 0xC1) goto yy1814; - if (yych <= 0xF4) goto yy1828; - goto yy1814; - } -yy1816: - yyaccept = 0; - yych = *(marker = ++p); - if (yybm[0+yych] & 64) { - goto yy1825; - } - if (yych <= 0x7F) { - if (yych == '\n') goto yy1814; - goto yy1828; - } else { - if (yych <= 0xC1) goto yy1814; - if (yych <= 0xF4) goto yy1828; - goto yy1814; - } -yy1817: - yych = *++p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0xBF) goto yy1815; -yy1818: - p = marker; - if (yyaccept == 0) { - goto yy1814; - } else { - goto yy1838; - } -yy1819: - yych = *++p; - if (yych <= 0x9F) goto yy1818; - if (yych <= 0xBF) goto yy1817; - goto yy1818; -yy1820: - yych = *++p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0xBF) goto yy1817; - goto yy1818; -yy1821: - yych = *++p; - if (yych <= 0x8F) goto yy1818; - if (yych <= 0xBF) goto yy1820; - goto yy1818; -yy1822: - yych = *++p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0xBF) goto yy1820; - goto yy1818; -yy1823: - yych = *++p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0x8F) goto yy1820; - goto yy1818; -yy1824: - yych = *++p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0x9F) goto yy1817; - goto yy1818; -yy1825: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1825; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') goto yy1818; - } else { - if (yych <= '>') goto yy1837; - if (yych <= 0x7F) goto yy1827; - if (yych <= 0xC1) goto yy1818; - goto yy1829; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1830; - if (yych == 0xED) goto yy1835; - goto yy1831; - } else { - if (yych <= 0xF0) goto yy1832; - if (yych <= 0xF3) goto yy1833; - if (yych <= 0xF4) goto yy1834; - goto yy1818; - } - } -yy1827: - ++p; - yych = *p; -yy1828: - if (yybm[0+yych] & 128) { - goto yy1827; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1818; - if (yych <= ']') goto yy1836; - goto yy1818; - } else { - if (yych <= 0xDF) goto yy1829; - if (yych <= 0xE0) goto yy1830; - goto yy1831; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1835; - if (yych <= 0xEF) goto yy1831; - goto yy1832; - } else { - if (yych <= 0xF3) goto yy1833; - if (yych <= 0xF4) goto yy1834; - goto yy1818; - } - } -yy1829: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0xBF) goto yy1827; - goto yy1818; -yy1830: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1818; - if (yych <= 0xBF) goto yy1829; - goto yy1818; -yy1831: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0xBF) goto yy1829; - goto yy1818; -yy1832: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1818; - if (yych <= 0xBF) goto yy1831; - goto yy1818; -yy1833: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0xBF) goto yy1831; - goto yy1818; -yy1834: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0x8F) goto yy1831; - goto yy1818; -yy1835: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1818; - if (yych <= 0x9F) goto yy1829; - goto yy1818; -yy1836: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1827; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1818; - if (yych <= ']') goto yy1825; - goto yy1818; - } else { - if (yych <= 0xDF) goto yy1829; - if (yych <= 0xE0) goto yy1830; - goto yy1831; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1835; - if (yych <= 0xEF) goto yy1831; - goto yy1832; - } else { - if (yych <= 0xF3) goto yy1833; - if (yych <= 0xF4) goto yy1834; - goto yy1818; - } - } -yy1837: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1827; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') goto yy1838; - if (yych <= ']') goto yy1836; - } else { - if (yych <= 0xDF) goto yy1829; - if (yych <= 0xE0) goto yy1830; - goto yy1831; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1835; - if (yych <= 0xEF) goto yy1831; - goto yy1832; - } else { - if (yych <= 0xF3) goto yy1833; - if (yych <= 0xF4) goto yy1834; - } - } -yy1838: - { return (bufsize_t)(p - start); } -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '\\') { + if (yych != '\n') + goto yy1815; + } else { + if (yych <= ']') + goto yy1816; + if (yych <= 0x7F) + goto yy1815; + if (yych >= 0xC2) + goto yy1817; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1819; + if (yych == 0xED) + goto yy1824; + goto yy1820; + } else { + if (yych <= 0xF0) + goto yy1821; + if (yych <= 0xF3) + goto yy1822; + if (yych <= 0xF4) + goto yy1823; + } + } + yy1814 : { return 0; } + yy1815: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1814; + goto yy1828; + } else { + if (yych <= 0xC1) + goto yy1814; + if (yych <= 0xF4) + goto yy1828; + goto yy1814; + } + yy1816: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0 + yych] & 64) { + goto yy1825; + } + if (yych <= 0x7F) { + if (yych == '\n') + goto yy1814; + goto yy1828; + } else { + if (yych <= 0xC1) + goto yy1814; + if (yych <= 0xF4) + goto yy1828; + goto yy1814; + } + yy1817: + yych = *++p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0xBF) + goto yy1815; + yy1818: + p = marker; + if (yyaccept == 0) { + goto yy1814; + } else { + goto yy1838; + } + yy1819: + yych = *++p; + if (yych <= 0x9F) + goto yy1818; + if (yych <= 0xBF) + goto yy1817; + goto yy1818; + yy1820: + yych = *++p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0xBF) + goto yy1817; + goto yy1818; + yy1821: + yych = *++p; + if (yych <= 0x8F) + goto yy1818; + if (yych <= 0xBF) + goto yy1820; + goto yy1818; + yy1822: + yych = *++p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0xBF) + goto yy1820; + goto yy1818; + yy1823: + yych = *++p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0x8F) + goto yy1820; + goto yy1818; + yy1824: + yych = *++p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0x9F) + goto yy1817; + goto yy1818; + yy1825: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1825; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy1818; + } else { + if (yych <= '>') + goto yy1837; + if (yych <= 0x7F) + goto yy1827; + if (yych <= 0xC1) + goto yy1818; + goto yy1829; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1830; + if (yych == 0xED) + goto yy1835; + goto yy1831; + } else { + if (yych <= 0xF0) + goto yy1832; + if (yych <= 0xF3) + goto yy1833; + if (yych <= 0xF4) + goto yy1834; + goto yy1818; + } + } + yy1827: + ++p; + yych = *p; + yy1828: + if (yybm[0 + yych] & 128) { + goto yy1827; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1818; + if (yych <= ']') + goto yy1836; + goto yy1818; + } else { + if (yych <= 0xDF) + goto yy1829; + if (yych <= 0xE0) + goto yy1830; + goto yy1831; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1835; + if (yych <= 0xEF) + goto yy1831; + goto yy1832; + } else { + if (yych <= 0xF3) + goto yy1833; + if (yych <= 0xF4) + goto yy1834; + goto yy1818; + } + } + yy1829: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0xBF) + goto yy1827; + goto yy1818; + yy1830: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1818; + if (yych <= 0xBF) + goto yy1829; + goto yy1818; + yy1831: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0xBF) + goto yy1829; + goto yy1818; + yy1832: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1818; + if (yych <= 0xBF) + goto yy1831; + goto yy1818; + yy1833: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0xBF) + goto yy1831; + goto yy1818; + yy1834: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0x8F) + goto yy1831; + goto yy1818; + yy1835: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1818; + if (yych <= 0x9F) + goto yy1829; + goto yy1818; + yy1836: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1827; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1818; + if (yych <= ']') + goto yy1825; + goto yy1818; + } else { + if (yych <= 0xDF) + goto yy1829; + if (yych <= 0xE0) + goto yy1830; + goto yy1831; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1835; + if (yych <= 0xEF) + goto yy1831; + goto yy1832; + } else { + if (yych <= 0xF3) + goto yy1833; + if (yych <= 0xF4) + goto yy1834; + goto yy1818; + } + } + yy1837: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1827; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy1838; + if (yych <= ']') + goto yy1836; + } else { + if (yych <= 0xDF) + goto yy1829; + if (yych <= 0xE0) + goto yy1830; + goto yy1831; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1835; + if (yych <= 0xEF) + goto yy1831; + goto yy1832; + } else { + if (yych <= 0xF3) + goto yy1833; + if (yych <= 0xF4) + goto yy1834; + } + } + yy1838 : { return (bufsize_t)(p - start); } + } } // Try to match a URL in a link or reference, return number of chars matched. // This may optionally be contained in <..>; otherwise // whitespace and unbalanced right parentheses aren't allowed. // Newlines aren't ever allowed. -bufsize_t _scan_link_url(const unsigned char *p) -{ +bufsize_t _scan_link_url(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 8, 128, 128, 8, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 136, 224, 224, 224, 224, 224, 224, 224, - 128, 128, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 32, 224, 32, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 16, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 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 <= '[') { - if (yych <= ' ') { - if (yych <= '\f') { - if (yych == '\n') goto yy1842; - goto yy1858; - } else { - if (yych <= '\r') goto yy1844; - if (yych <= 0x1F) goto yy1858; - goto yy1844; - } - } else { - if (yych <= ')') { - if (yych <= '\'') goto yy1846; - if (yych <= '(') goto yy1857; - goto yy1858; - } else { - if (yych == '<') goto yy1845; - goto yy1846; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1855; - if (yych <= 0x7F) goto yy1846; - } else { - if (yych <= 0xDF) goto yy1847; - if (yych <= 0xE0) goto yy1849; - goto yy1850; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1854; - if (yych <= 0xEF) goto yy1850; - goto yy1851; - } else { - if (yych <= 0xF3) goto yy1852; - if (yych <= 0xF4) goto yy1853; - } - } - } -yy1841: - { return (bufsize_t)(p - start); } -yy1842: - yyaccept = 0; - marker = ++p; - yych = *p; -yy1843: - if (yybm[0+yych] & 8) { - goto yy1842; - } - if (yych <= 0x7F) { - if (yych <= ')') { - if (yych <= 0x1F) goto yy1841; - if (yych <= '\'') goto yy1870; - if (yych <= '(') goto yy1861; - goto yy1841; - } else { - if (yych <= '<') { - if (yych <= ';') goto yy1870; - goto yy1905; - } else { - if (yych == '\\') goto yy1879; - goto yy1870; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych <= 0xC1) goto yy1841; - goto yy1872; - } else { - if (yych <= 0xE0) goto yy1873; - if (yych <= 0xEC) goto yy1874; - goto yy1878; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1874; - goto yy1875; - } else { - if (yych <= 0xF3) goto yy1876; - if (yych <= 0xF4) goto yy1877; - goto yy1841; - } - } - } -yy1844: - yyaccept = 0; - yych = *(marker = ++p); - goto yy1843; -yy1845: - yyaccept = 0; - yych = *(marker = ++p); - if (yybm[0+yych] & 64) { - goto yy1905; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1841; - goto yy1919; - } else { - if (yych <= '\n') goto yy1841; - if (yych <= '\f') goto yy1919; - goto yy1841; - } - } else { - if (yych <= '(') { - if (yych <= ' ') goto yy1919; - goto yy1917; - } else { - if (yych <= ')') goto yy1919; - if (yych <= '<') goto yy1870; - goto yy1907; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1916; - goto yy1841; - } else { - if (yych <= 0xDF) goto yy1909; - if (yych <= 0xE0) goto yy1910; - goto yy1911; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1915; - if (yych <= 0xEF) goto yy1911; - goto yy1912; - } else { - if (yych <= 0xF3) goto yy1913; - if (yych <= 0xF4) goto yy1914; - goto yy1841; - } - } - } -yy1846: - yyaccept = 0; - yych = *(marker = ++p); - goto yy1871; -yy1847: - yych = *++p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1846; -yy1848: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy1841; - } else { - goto yy1856; - } - } else { - goto yy1908; - } -yy1849: - yych = *++p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1847; - goto yy1848; -yy1850: - yych = *++p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1847; - goto yy1848; -yy1851: - yych = *++p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1850; - goto yy1848; -yy1852: - yych = *++p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1850; - goto yy1848; -yy1853: - yych = *++p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1850; - goto yy1848; -yy1854: - yych = *++p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1847; - goto yy1848; -yy1855: - yyaccept = 1; - yych = *(marker = ++p); - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) goto yy1870; - } else { - if (yych <= 0xDF) goto yy1880; - if (yych <= 0xE0) goto yy1881; - goto yy1882; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1886; - if (yych <= 0xEF) goto yy1882; - goto yy1883; - } else { - if (yych <= 0xF3) goto yy1884; - if (yych <= 0xF4) goto yy1885; - } - } -yy1856: - { return 0; } -yy1857: - yyaccept = 1; - yych = *(marker = ++p); - if (yych <= '(') { - if (yych <= ' ') goto yy1856; - if (yych <= '\'') goto yy1862; - goto yy1856; - } else { - if (yych <= 0x7F) goto yy1862; - if (yych <= 0xC1) goto yy1856; - if (yych <= 0xF4) goto yy1862; - goto yy1856; - } -yy1858: - yych = *++p; - goto yy1856; -yy1859: - ++p; - yych = *p; - if (yybm[0+yych] & 16) { - goto yy1859; - } - if (yych <= 0xE0) { - if (yych <= ')') { - if (yych <= ' ') goto yy1848; - if (yych >= ')') goto yy1887; - } else { - if (yych <= 0x7F) goto yy1861; - if (yych <= 0xC1) goto yy1848; - if (yych <= 0xDF) goto yy1863; - goto yy1864; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1869; - goto yy1865; - } else { - if (yych <= 0xF0) goto yy1866; - if (yych <= 0xF3) goto yy1867; - if (yych <= 0xF4) goto yy1868; - goto yy1848; - } - } -yy1861: - ++p; - yych = *p; -yy1862: - if (yybm[0+yych] & 32) { - goto yy1861; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '(') goto yy1848; - if (yych <= ')') goto yy1870; - goto yy1859; - } else { - if (yych <= 0xC1) goto yy1848; - if (yych >= 0xE0) goto yy1864; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1869; - goto yy1865; - } else { - if (yych <= 0xF0) goto yy1866; - if (yych <= 0xF3) goto yy1867; - if (yych <= 0xF4) goto yy1868; - goto yy1848; - } - } -yy1863: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1861; - goto yy1848; -yy1864: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1863; - goto yy1848; -yy1865: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1863; - goto yy1848; -yy1866: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1865; - goto yy1848; -yy1867: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1865; - goto yy1848; -yy1868: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1865; - goto yy1848; -yy1869: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1863; - goto yy1848; -yy1870: - yyaccept = 0; - marker = ++p; - yych = *p; -yy1871: - if (yych <= 0xC1) { - if (yych <= ')') { - if (yych <= ' ') goto yy1841; - if (yych <= '\'') goto yy1870; - if (yych <= '(') goto yy1861; - goto yy1841; - } else { - if (yych == '\\') goto yy1879; - if (yych <= 0x7F) goto yy1870; - goto yy1841; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1872; - if (yych <= 0xE0) goto yy1873; - if (yych <= 0xEC) goto yy1874; - goto yy1878; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1874; - goto yy1875; - } else { - if (yych <= 0xF3) goto yy1876; - if (yych <= 0xF4) goto yy1877; - goto yy1841; - } - } - } -yy1872: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1870; - goto yy1848; -yy1873: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1872; - goto yy1848; -yy1874: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1872; - goto yy1848; -yy1875: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1874; - goto yy1848; -yy1876: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1874; - goto yy1848; -yy1877: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1874; - goto yy1848; -yy1878: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1872; - goto yy1848; -yy1879: - ++p; - yych = *p; - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) goto yy1870; - goto yy1848; - } else { - if (yych <= 0xDF) goto yy1880; - if (yych <= 0xE0) goto yy1881; - goto yy1882; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1886; - if (yych <= 0xEF) goto yy1882; - goto yy1883; - } else { - if (yych <= 0xF3) goto yy1884; - if (yych <= 0xF4) goto yy1885; - goto yy1848; - } - } -yy1880: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1870; - goto yy1848; -yy1881: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1880; - goto yy1848; -yy1882: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1880; - goto yy1848; -yy1883: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1882; - goto yy1848; -yy1884: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1882; - goto yy1848; -yy1885: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1882; - goto yy1848; -yy1886: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1880; - goto yy1848; -yy1887: - yyaccept = 0; - marker = ++p; - yych = *p; -yy1888: - if (yych <= 0xC1) { - if (yych <= ')') { - if (yych <= ' ') goto yy1841; - if (yych <= '\'') goto yy1887; - if (yych <= '(') goto yy1861; - goto yy1870; - } else { - if (yych == '\\') goto yy1896; - if (yych <= 0x7F) goto yy1887; - goto yy1841; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1889; - if (yych <= 0xE0) goto yy1890; - if (yych <= 0xEC) goto yy1891; - goto yy1895; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1891; - goto yy1892; - } else { - if (yych <= 0xF3) goto yy1893; - if (yych <= 0xF4) goto yy1894; - goto yy1841; - } - } - } -yy1889: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1887; - goto yy1848; -yy1890: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1889; - goto yy1848; -yy1891: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1889; - goto yy1848; -yy1892: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1891; - goto yy1848; -yy1893: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1891; - goto yy1848; -yy1894: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1891; - goto yy1848; -yy1895: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1889; - goto yy1848; -yy1896: - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= ' ') goto yy1870; - if (yych <= '[') goto yy1887; - } else { - if (yych <= 0x7F) goto yy1887; - if (yych <= 0xC1) goto yy1848; - if (yych <= 0xDF) goto yy1898; - goto yy1899; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1904; - goto yy1900; - } else { - if (yych <= 0xF0) goto yy1901; - if (yych <= 0xF3) goto yy1902; - if (yych <= 0xF4) goto yy1903; - goto yy1848; - } - } - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= 0xDF) { - if (yych <= '[') { - if (yych <= ' ') goto yy1841; - if (yych == '(') goto yy1861; - goto yy1887; - } else { - if (yych <= '\\') goto yy1896; - if (yych <= 0x7F) goto yy1887; - if (yych <= 0xC1) goto yy1841; - goto yy1889; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy1890; - if (yych == 0xED) goto yy1895; - goto yy1891; - } else { - if (yych <= 0xF0) goto yy1892; - if (yych <= 0xF3) goto yy1893; - if (yych <= 0xF4) goto yy1894; - goto yy1841; - } - } -yy1898: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1887; - goto yy1848; -yy1899: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1898; - goto yy1848; -yy1900: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1898; - goto yy1848; -yy1901: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1900; - goto yy1848; -yy1902: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1900; - goto yy1848; -yy1903: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1900; - goto yy1848; -yy1904: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1898; - goto yy1848; -yy1905: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1905; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1841; - goto yy1919; - } else { - if (yych <= '\n') goto yy1841; - if (yych <= '\f') goto yy1919; - goto yy1841; - } - } else { - if (yych <= '(') { - if (yych <= ' ') goto yy1919; - goto yy1917; - } else { - if (yych <= ')') goto yy1919; - if (yych <= '<') goto yy1870; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1916; - goto yy1841; - } else { - if (yych <= 0xDF) goto yy1909; - if (yych <= 0xE0) goto yy1910; - goto yy1911; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1915; - if (yych <= 0xEF) goto yy1911; - goto yy1912; - } else { - if (yych <= 0xF3) goto yy1913; - if (yych <= 0xF4) goto yy1914; - goto yy1841; - } - } - } -yy1907: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ')') { - if (yych <= ' ') goto yy1908; - if (yych <= '(') goto yy1871; - } else { - if (yych <= 0x7F) goto yy1871; - if (yych <= 0xC1) goto yy1908; - if (yych <= 0xF4) goto yy1871; - } -yy1908: - { return (bufsize_t)(p - start); } -yy1909: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1905; - goto yy1848; -yy1910: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1909; - goto yy1848; -yy1911: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1909; - goto yy1848; -yy1912: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1911; - goto yy1848; -yy1913: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1911; - goto yy1848; -yy1914: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1911; - goto yy1848; -yy1915: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1909; - goto yy1848; -yy1916: - ++p; - yych = *p; - if (yych <= 0x7F) { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1870; - goto yy1905; - } else { - if (yych <= '\n') goto yy1870; - if (yych <= '\f') goto yy1905; - goto yy1870; - } - } else { - if (yych <= '>') { - if (yych <= '=') goto yy1905; - goto yy1963; - } else { - if (yych == '\\') goto yy1964; - goto yy1905; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych <= 0xC1) goto yy1848; - goto yy1965; - } else { - if (yych <= 0xE0) goto yy1966; - if (yych <= 0xEC) goto yy1967; - goto yy1971; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1967; - goto yy1968; - } else { - if (yych <= 0xF3) goto yy1969; - if (yych <= 0xF4) goto yy1970; - goto yy1848; - } - } - } -yy1917: - ++p; - yych = *p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1848; - if (yych >= '\n') goto yy1848; - } else { - if (yych == '\r') goto yy1848; - } - } else { - if (yych <= ')') { - if (yych <= '\'') goto yy1917; - if (yych >= ')') goto yy1905; - } else { - if (yych == '<') goto yy1861; - if (yych <= '=') goto yy1917; - goto yy1932; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= 0x7F) { - if (yych == '\\') goto yy1933; - goto yy1917; - } else { - if (yych <= 0xC1) goto yy1848; - if (yych <= 0xDF) goto yy1935; - goto yy1936; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1941; - goto yy1937; - } else { - if (yych <= 0xF0) goto yy1938; - if (yych <= 0xF3) goto yy1939; - if (yych <= 0xF4) goto yy1940; - goto yy1848; - } - } - } -yy1919: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1919; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '<') goto yy1848; - if (yych >= '?') goto yy1922; - } else { - if (yych <= 0xC1) goto yy1848; - if (yych <= 0xDF) goto yy1924; - goto yy1925; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1930; - goto yy1926; - } else { - if (yych <= 0xF0) goto yy1927; - if (yych <= 0xF3) goto yy1928; - if (yych <= 0xF4) goto yy1929; - goto yy1848; - } - } -yy1921: - yych = *++p; - goto yy1908; -yy1922: - ++p; - yych = *p; - if (yych <= 0x7F) { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1848; - goto yy1919; - } else { - if (yych <= '\n') goto yy1848; - if (yych <= '\f') goto yy1919; - goto yy1848; - } - } else { - if (yych <= '>') { - if (yych <= '=') goto yy1919; - goto yy1931; - } else { - if (yych == '\\') goto yy1922; - goto yy1919; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych <= 0xC1) goto yy1848; - } else { - if (yych <= 0xE0) goto yy1925; - if (yych <= 0xEC) goto yy1926; - goto yy1930; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1926; - goto yy1927; - } else { - if (yych <= 0xF3) goto yy1928; - if (yych <= 0xF4) goto yy1929; - goto yy1848; - } - } - } -yy1924: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1919; - goto yy1848; -yy1925: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1924; - goto yy1848; -yy1926: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1924; - goto yy1848; -yy1927: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1926; - goto yy1848; -yy1928: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1926; - goto yy1848; -yy1929: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1926; - goto yy1848; -yy1930: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1924; - goto yy1848; -yy1931: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy1919; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '<') goto yy1908; - if (yych <= '>') goto yy1921; - goto yy1922; - } else { - if (yych <= 0xC1) goto yy1908; - if (yych <= 0xDF) goto yy1924; - goto yy1925; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1930; - goto yy1926; - } else { - if (yych <= 0xF0) goto yy1927; - if (yych <= 0xF3) goto yy1928; - if (yych <= 0xF4) goto yy1929; - goto yy1908; - } - } -yy1932: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= '(') { - if (yych <= ' ') goto yy1908; - if (yych <= '\'') goto yy1862; - goto yy1908; - } else { - if (yych <= 0x7F) goto yy1862; - if (yych <= 0xC1) goto yy1908; - if (yych <= 0xF4) goto yy1862; - goto yy1908; - } -yy1933: - ++p; - yych = *p; - if (yych <= '[') { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1848; - goto yy1919; - } else { - if (yych <= '\n') goto yy1848; - if (yych <= '\f') goto yy1919; - goto yy1848; - } - } else { - if (yych <= ')') { - if (yych <= ' ') goto yy1919; - if (yych <= '(') goto yy1917; - goto yy1942; - } else { - if (yych == '>') goto yy1944; - goto yy1917; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1933; - if (yych <= 0x7F) goto yy1917; - goto yy1848; - } else { - if (yych <= 0xDF) goto yy1935; - if (yych <= 0xE0) goto yy1936; - goto yy1937; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1941; - if (yych <= 0xEF) goto yy1937; - goto yy1938; - } else { - if (yych <= 0xF3) goto yy1939; - if (yych <= 0xF4) goto yy1940; - goto yy1848; - } - } - } -yy1935: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1917; - goto yy1848; -yy1936: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1935; - goto yy1848; -yy1937: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1935; - goto yy1848; -yy1938: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1937; - goto yy1848; -yy1939: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1937; - goto yy1848; -yy1940: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1937; - goto yy1848; -yy1941: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1935; - goto yy1848; -yy1942: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1841; - if (yych <= '\t') goto yy1919; - goto yy1841; - } else { - if (yych == '\r') goto yy1841; - goto yy1919; - } - } else { - if (yych <= ')') { - if (yych <= '\'') goto yy1942; - if (yych <= '(') goto yy1917; - goto yy1905; - } else { - if (yych == '<') goto yy1887; - if (yych <= '=') goto yy1942; - goto yy1945; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= 0x7F) { - if (yych == '\\') goto yy1946; - goto yy1942; - } else { - if (yych <= 0xC1) goto yy1841; - if (yych <= 0xDF) goto yy1947; - goto yy1948; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1953; - goto yy1949; - } else { - if (yych <= 0xF0) goto yy1950; - if (yych <= 0xF3) goto yy1951; - if (yych <= 0xF4) goto yy1952; - goto yy1841; - } - } - } -yy1944: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1908; - if (yych <= '\t') goto yy1919; - goto yy1908; - } else { - if (yych == '\r') goto yy1908; - goto yy1919; - } - } else { - if (yych <= ')') { - if (yych <= '\'') goto yy1917; - if (yych <= '(') goto yy1919; - goto yy1905; - } else { - if (yych == '<') goto yy1861; - if (yych <= '=') goto yy1917; - goto yy1932; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= 0x7F) { - if (yych == '\\') goto yy1933; - goto yy1917; - } else { - if (yych <= 0xC1) goto yy1908; - if (yych <= 0xDF) goto yy1935; - goto yy1936; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1941; - goto yy1937; - } else { - if (yych <= 0xF0) goto yy1938; - if (yych <= 0xF3) goto yy1939; - if (yych <= 0xF4) goto yy1940; - goto yy1908; - } - } - } -yy1945: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ' ') goto yy1908; - if (yych <= 0x7F) goto yy1888; - if (yych <= 0xC1) goto yy1908; - if (yych <= 0xF4) goto yy1888; - goto yy1908; -yy1946: - ++p; - yych = *p; - if (yych <= '\\') { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1870; - goto yy1905; - } else { - if (yych <= '\n') goto yy1870; - if (yych <= '\f') goto yy1905; - goto yy1870; - } - } else { - if (yych <= '=') { - if (yych <= ' ') goto yy1905; - goto yy1942; - } else { - if (yych <= '>') goto yy1954; - if (yych <= '[') goto yy1942; - goto yy1955; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) goto yy1942; - goto yy1848; - } else { - if (yych <= 0xDF) goto yy1956; - if (yych <= 0xE0) goto yy1957; - goto yy1958; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1962; - if (yych <= 0xEF) goto yy1958; - goto yy1959; - } else { - if (yych <= 0xF3) goto yy1960; - if (yych <= 0xF4) goto yy1961; - goto yy1848; - } - } - } -yy1947: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1942; - goto yy1848; -yy1948: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1947; - goto yy1848; -yy1949: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1947; - goto yy1848; -yy1950: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1949; - goto yy1848; -yy1951: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1949; - goto yy1848; -yy1952: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1949; - goto yy1848; -yy1953: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1947; - goto yy1848; -yy1954: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1908; - if (yych <= '\t') goto yy1919; - goto yy1908; - } else { - if (yych == '\r') goto yy1908; - goto yy1919; - } - } else { - if (yych <= ')') { - if (yych <= '\'') goto yy1942; - if (yych <= '(') goto yy1917; - goto yy1905; - } else { - if (yych == '<') goto yy1887; - if (yych <= '=') goto yy1942; - goto yy1945; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= 0x7F) { - if (yych == '\\') goto yy1946; - goto yy1942; - } else { - if (yych <= 0xC1) goto yy1908; - if (yych <= 0xDF) goto yy1947; - goto yy1948; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1953; - goto yy1949; - } else { - if (yych <= 0xF0) goto yy1950; - if (yych <= 0xF3) goto yy1951; - if (yych <= 0xF4) goto yy1952; - goto yy1908; - } - } - } -yy1955: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '[') { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1841; - goto yy1919; - } else { - if (yych <= '\n') goto yy1841; - if (yych <= '\f') goto yy1919; - goto yy1841; - } - } else { - if (yych <= '(') { - if (yych <= ' ') goto yy1919; - if (yych <= '\'') goto yy1942; - goto yy1917; - } else { - if (yych == '>') goto yy1954; - goto yy1942; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1946; - if (yych <= 0x7F) goto yy1942; - goto yy1841; - } else { - if (yych <= 0xDF) goto yy1947; - if (yych <= 0xE0) goto yy1948; - goto yy1949; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1953; - if (yych <= 0xEF) goto yy1949; - goto yy1950; - } else { - if (yych <= 0xF3) goto yy1951; - if (yych <= 0xF4) goto yy1952; - goto yy1841; - } - } - } -yy1956: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1942; - goto yy1848; -yy1957: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1956; - goto yy1848; -yy1958: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1956; - goto yy1848; -yy1959: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1958; - goto yy1848; -yy1960: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1958; - goto yy1848; -yy1961: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1958; - goto yy1848; -yy1962: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1956; - goto yy1848; -yy1963: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy1905; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy1908; - goto yy1919; - } else { - if (yych <= '\n') goto yy1908; - if (yych <= '\f') goto yy1919; - goto yy1908; - } - } else { - if (yych <= '(') { - if (yych <= ' ') goto yy1919; - goto yy1917; - } else { - if (yych <= ')') goto yy1919; - if (yych <= '<') goto yy1870; - goto yy1907; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1916; - goto yy1908; - } else { - if (yych <= 0xDF) goto yy1909; - if (yych <= 0xE0) goto yy1910; - goto yy1911; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1915; - if (yych <= 0xEF) goto yy1911; - goto yy1912; - } else { - if (yych <= 0xF3) goto yy1913; - if (yych <= 0xF4) goto yy1914; - goto yy1908; - } - } - } -yy1964: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '[') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy1841; - if (yych <= '\t') goto yy1919; - goto yy1841; - } else { - if (yych == '\r') goto yy1841; - goto yy1919; - } - } else { - if (yych <= ')') { - if (yych <= '\'') goto yy1905; - if (yych <= '(') goto yy1917; - goto yy1919; - } else { - if (yych == '>') goto yy1963; - goto yy1905; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') goto yy1916; - if (yych <= 0x7F) goto yy1905; - goto yy1841; - } else { - if (yych <= 0xDF) goto yy1909; - if (yych <= 0xE0) goto yy1910; - goto yy1911; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy1915; - if (yych <= 0xEF) goto yy1911; - goto yy1912; - } else { - if (yych <= 0xF3) goto yy1913; - if (yych <= 0xF4) goto yy1914; - goto yy1841; - } - } - } -yy1965: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1905; - goto yy1848; -yy1966: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1848; - if (yych <= 0xBF) goto yy1965; - goto yy1848; -yy1967: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1965; - goto yy1848; -yy1968: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1848; - if (yych <= 0xBF) goto yy1967; - goto yy1848; -yy1969: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0xBF) goto yy1967; - goto yy1848; -yy1970: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x8F) goto yy1967; - goto yy1848; -yy1971: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1848; - if (yych <= 0x9F) goto yy1965; - goto yy1848; -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 8, 128, 128, 8, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 136, 224, 224, 224, 224, 224, 224, 224, 128, 128, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 32, 224, 32, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 <= '[') { + if (yych <= ' ') { + if (yych <= '\f') { + if (yych == '\n') + goto yy1842; + goto yy1858; + } else { + if (yych <= '\r') + goto yy1844; + if (yych <= 0x1F) + goto yy1858; + goto yy1844; + } + } else { + if (yych <= ')') { + if (yych <= '\'') + goto yy1846; + if (yych <= '(') + goto yy1857; + goto yy1858; + } else { + if (yych == '<') + goto yy1845; + goto yy1846; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1855; + if (yych <= 0x7F) + goto yy1846; + } else { + if (yych <= 0xDF) + goto yy1847; + if (yych <= 0xE0) + goto yy1849; + goto yy1850; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1854; + if (yych <= 0xEF) + goto yy1850; + goto yy1851; + } else { + if (yych <= 0xF3) + goto yy1852; + if (yych <= 0xF4) + goto yy1853; + } + } + } + yy1841 : { return (bufsize_t)(p - start); } + yy1842: + yyaccept = 0; + marker = ++p; + yych = *p; + yy1843: + if (yybm[0 + yych] & 8) { + goto yy1842; + } + if (yych <= 0x7F) { + if (yych <= ')') { + if (yych <= 0x1F) + goto yy1841; + if (yych <= '\'') + goto yy1870; + if (yych <= '(') + goto yy1861; + goto yy1841; + } else { + if (yych <= '<') { + if (yych <= ';') + goto yy1870; + goto yy1905; + } else { + if (yych == '\\') + goto yy1879; + goto yy1870; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) + goto yy1841; + goto yy1872; + } else { + if (yych <= 0xE0) + goto yy1873; + if (yych <= 0xEC) + goto yy1874; + goto yy1878; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1874; + goto yy1875; + } else { + if (yych <= 0xF3) + goto yy1876; + if (yych <= 0xF4) + goto yy1877; + goto yy1841; + } + } + } + yy1844: + yyaccept = 0; + yych = *(marker = ++p); + goto yy1843; + yy1845: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0 + yych] & 64) { + goto yy1905; + } + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1841; + goto yy1919; + } else { + if (yych <= '\n') + goto yy1841; + if (yych <= '\f') + goto yy1919; + goto yy1841; + } + } else { + if (yych <= '(') { + if (yych <= ' ') + goto yy1919; + goto yy1917; + } else { + if (yych <= ')') + goto yy1919; + if (yych <= '<') + goto yy1870; + goto yy1907; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1916; + goto yy1841; + } else { + if (yych <= 0xDF) + goto yy1909; + if (yych <= 0xE0) + goto yy1910; + goto yy1911; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1915; + if (yych <= 0xEF) + goto yy1911; + goto yy1912; + } else { + if (yych <= 0xF3) + goto yy1913; + if (yych <= 0xF4) + goto yy1914; + goto yy1841; + } + } + } + yy1846: + yyaccept = 0; + yych = *(marker = ++p); + goto yy1871; + yy1847: + yych = *++p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1846; + yy1848: + p = marker; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy1841; + } else { + goto yy1856; + } + } else { + goto yy1908; + } + yy1849: + yych = *++p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1847; + goto yy1848; + yy1850: + yych = *++p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1847; + goto yy1848; + yy1851: + yych = *++p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1850; + goto yy1848; + yy1852: + yych = *++p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1850; + goto yy1848; + yy1853: + yych = *++p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1850; + goto yy1848; + yy1854: + yych = *++p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1847; + goto yy1848; + yy1855: + yyaccept = 1; + yych = *(marker = ++p); + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy1870; + } else { + if (yych <= 0xDF) + goto yy1880; + if (yych <= 0xE0) + goto yy1881; + goto yy1882; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1886; + if (yych <= 0xEF) + goto yy1882; + goto yy1883; + } else { + if (yych <= 0xF3) + goto yy1884; + if (yych <= 0xF4) + goto yy1885; + } + } + yy1856 : { return 0; } + yy1857: + yyaccept = 1; + yych = *(marker = ++p); + if (yych <= '(') { + if (yych <= ' ') + goto yy1856; + if (yych <= '\'') + goto yy1862; + goto yy1856; + } else { + if (yych <= 0x7F) + goto yy1862; + if (yych <= 0xC1) + goto yy1856; + if (yych <= 0xF4) + goto yy1862; + goto yy1856; + } + yy1858: + yych = *++p; + goto yy1856; + yy1859: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy1859; + } + if (yych <= 0xE0) { + if (yych <= ')') { + if (yych <= ' ') + goto yy1848; + if (yych >= ')') + goto yy1887; + } else { + if (yych <= 0x7F) + goto yy1861; + if (yych <= 0xC1) + goto yy1848; + if (yych <= 0xDF) + goto yy1863; + goto yy1864; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1869; + goto yy1865; + } else { + if (yych <= 0xF0) + goto yy1866; + if (yych <= 0xF3) + goto yy1867; + if (yych <= 0xF4) + goto yy1868; + goto yy1848; + } + } + yy1861: + ++p; + yych = *p; + yy1862: + if (yybm[0 + yych] & 32) { + goto yy1861; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= '(') + goto yy1848; + if (yych <= ')') + goto yy1870; + goto yy1859; + } else { + if (yych <= 0xC1) + goto yy1848; + if (yych >= 0xE0) + goto yy1864; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1869; + goto yy1865; + } else { + if (yych <= 0xF0) + goto yy1866; + if (yych <= 0xF3) + goto yy1867; + if (yych <= 0xF4) + goto yy1868; + goto yy1848; + } + } + yy1863: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1861; + goto yy1848; + yy1864: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1863; + goto yy1848; + yy1865: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1863; + goto yy1848; + yy1866: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1865; + goto yy1848; + yy1867: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1865; + goto yy1848; + yy1868: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1865; + goto yy1848; + yy1869: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1863; + goto yy1848; + yy1870: + yyaccept = 0; + marker = ++p; + yych = *p; + yy1871: + if (yych <= 0xC1) { + if (yych <= ')') { + if (yych <= ' ') + goto yy1841; + if (yych <= '\'') + goto yy1870; + if (yych <= '(') + goto yy1861; + goto yy1841; + } else { + if (yych == '\\') + goto yy1879; + if (yych <= 0x7F) + goto yy1870; + goto yy1841; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1872; + if (yych <= 0xE0) + goto yy1873; + if (yych <= 0xEC) + goto yy1874; + goto yy1878; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1874; + goto yy1875; + } else { + if (yych <= 0xF3) + goto yy1876; + if (yych <= 0xF4) + goto yy1877; + goto yy1841; + } + } + } + yy1872: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1870; + goto yy1848; + yy1873: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1872; + goto yy1848; + yy1874: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1872; + goto yy1848; + yy1875: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1874; + goto yy1848; + yy1876: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1874; + goto yy1848; + yy1877: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1874; + goto yy1848; + yy1878: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1872; + goto yy1848; + yy1879: + ++p; + yych = *p; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy1870; + goto yy1848; + } else { + if (yych <= 0xDF) + goto yy1880; + if (yych <= 0xE0) + goto yy1881; + goto yy1882; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1886; + if (yych <= 0xEF) + goto yy1882; + goto yy1883; + } else { + if (yych <= 0xF3) + goto yy1884; + if (yych <= 0xF4) + goto yy1885; + goto yy1848; + } + } + yy1880: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1870; + goto yy1848; + yy1881: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1880; + goto yy1848; + yy1882: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1880; + goto yy1848; + yy1883: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1882; + goto yy1848; + yy1884: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1882; + goto yy1848; + yy1885: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1882; + goto yy1848; + yy1886: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1880; + goto yy1848; + yy1887: + yyaccept = 0; + marker = ++p; + yych = *p; + yy1888: + if (yych <= 0xC1) { + if (yych <= ')') { + if (yych <= ' ') + goto yy1841; + if (yych <= '\'') + goto yy1887; + if (yych <= '(') + goto yy1861; + goto yy1870; + } else { + if (yych == '\\') + goto yy1896; + if (yych <= 0x7F) + goto yy1887; + goto yy1841; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1889; + if (yych <= 0xE0) + goto yy1890; + if (yych <= 0xEC) + goto yy1891; + goto yy1895; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1891; + goto yy1892; + } else { + if (yych <= 0xF3) + goto yy1893; + if (yych <= 0xF4) + goto yy1894; + goto yy1841; + } + } + } + yy1889: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1887; + goto yy1848; + yy1890: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1889; + goto yy1848; + yy1891: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1889; + goto yy1848; + yy1892: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1891; + goto yy1848; + yy1893: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1891; + goto yy1848; + yy1894: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1891; + goto yy1848; + yy1895: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1889; + goto yy1848; + yy1896: + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= ' ') + goto yy1870; + if (yych <= '[') + goto yy1887; + } else { + if (yych <= 0x7F) + goto yy1887; + if (yych <= 0xC1) + goto yy1848; + if (yych <= 0xDF) + goto yy1898; + goto yy1899; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1904; + goto yy1900; + } else { + if (yych <= 0xF0) + goto yy1901; + if (yych <= 0xF3) + goto yy1902; + if (yych <= 0xF4) + goto yy1903; + goto yy1848; + } + } + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= 0xDF) { + if (yych <= '[') { + if (yych <= ' ') + goto yy1841; + if (yych == '(') + goto yy1861; + goto yy1887; + } else { + if (yych <= '\\') + goto yy1896; + if (yych <= 0x7F) + goto yy1887; + if (yych <= 0xC1) + goto yy1841; + goto yy1889; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1890; + if (yych == 0xED) + goto yy1895; + goto yy1891; + } else { + if (yych <= 0xF0) + goto yy1892; + if (yych <= 0xF3) + goto yy1893; + if (yych <= 0xF4) + goto yy1894; + goto yy1841; + } + } + yy1898: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1887; + goto yy1848; + yy1899: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1898; + goto yy1848; + yy1900: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1898; + goto yy1848; + yy1901: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1900; + goto yy1848; + yy1902: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1900; + goto yy1848; + yy1903: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1900; + goto yy1848; + yy1904: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1898; + goto yy1848; + yy1905: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1905; + } + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1841; + goto yy1919; + } else { + if (yych <= '\n') + goto yy1841; + if (yych <= '\f') + goto yy1919; + goto yy1841; + } + } else { + if (yych <= '(') { + if (yych <= ' ') + goto yy1919; + goto yy1917; + } else { + if (yych <= ')') + goto yy1919; + if (yych <= '<') + goto yy1870; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1916; + goto yy1841; + } else { + if (yych <= 0xDF) + goto yy1909; + if (yych <= 0xE0) + goto yy1910; + goto yy1911; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1915; + if (yych <= 0xEF) + goto yy1911; + goto yy1912; + } else { + if (yych <= 0xF3) + goto yy1913; + if (yych <= 0xF4) + goto yy1914; + goto yy1841; + } + } + } + yy1907: + yyaccept = 2; + yych = *(marker = ++p); + if (yych <= ')') { + if (yych <= ' ') + goto yy1908; + if (yych <= '(') + goto yy1871; + } else { + if (yych <= 0x7F) + goto yy1871; + if (yych <= 0xC1) + goto yy1908; + if (yych <= 0xF4) + goto yy1871; + } + yy1908 : { return (bufsize_t)(p - start); } + yy1909: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1905; + goto yy1848; + yy1910: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1909; + goto yy1848; + yy1911: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1909; + goto yy1848; + yy1912: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1911; + goto yy1848; + yy1913: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1911; + goto yy1848; + yy1914: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1911; + goto yy1848; + yy1915: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1909; + goto yy1848; + yy1916: + ++p; + yych = *p; + if (yych <= 0x7F) { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1870; + goto yy1905; + } else { + if (yych <= '\n') + goto yy1870; + if (yych <= '\f') + goto yy1905; + goto yy1870; + } + } else { + if (yych <= '>') { + if (yych <= '=') + goto yy1905; + goto yy1963; + } else { + if (yych == '\\') + goto yy1964; + goto yy1905; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) + goto yy1848; + goto yy1965; + } else { + if (yych <= 0xE0) + goto yy1966; + if (yych <= 0xEC) + goto yy1967; + goto yy1971; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1967; + goto yy1968; + } else { + if (yych <= 0xF3) + goto yy1969; + if (yych <= 0xF4) + goto yy1970; + goto yy1848; + } + } + } + yy1917: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) + goto yy1848; + if (yych >= '\n') + goto yy1848; + } else { + if (yych == '\r') + goto yy1848; + } + } else { + if (yych <= ')') { + if (yych <= '\'') + goto yy1917; + if (yych >= ')') + goto yy1905; + } else { + if (yych == '<') + goto yy1861; + if (yych <= '=') + goto yy1917; + goto yy1932; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') + goto yy1933; + goto yy1917; + } else { + if (yych <= 0xC1) + goto yy1848; + if (yych <= 0xDF) + goto yy1935; + goto yy1936; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1941; + goto yy1937; + } else { + if (yych <= 0xF0) + goto yy1938; + if (yych <= 0xF3) + goto yy1939; + if (yych <= 0xF4) + goto yy1940; + goto yy1848; + } + } + } + yy1919: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1919; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= '<') + goto yy1848; + if (yych >= '?') + goto yy1922; + } else { + if (yych <= 0xC1) + goto yy1848; + if (yych <= 0xDF) + goto yy1924; + goto yy1925; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1930; + goto yy1926; + } else { + if (yych <= 0xF0) + goto yy1927; + if (yych <= 0xF3) + goto yy1928; + if (yych <= 0xF4) + goto yy1929; + goto yy1848; + } + } + yy1921: + yych = *++p; + goto yy1908; + yy1922: + ++p; + yych = *p; + if (yych <= 0x7F) { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1848; + goto yy1919; + } else { + if (yych <= '\n') + goto yy1848; + if (yych <= '\f') + goto yy1919; + goto yy1848; + } + } else { + if (yych <= '>') { + if (yych <= '=') + goto yy1919; + goto yy1931; + } else { + if (yych == '\\') + goto yy1922; + goto yy1919; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) + goto yy1848; + } else { + if (yych <= 0xE0) + goto yy1925; + if (yych <= 0xEC) + goto yy1926; + goto yy1930; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1926; + goto yy1927; + } else { + if (yych <= 0xF3) + goto yy1928; + if (yych <= 0xF4) + goto yy1929; + goto yy1848; + } + } + } + yy1924: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1919; + goto yy1848; + yy1925: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1924; + goto yy1848; + yy1926: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1924; + goto yy1848; + yy1927: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1926; + goto yy1848; + yy1928: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1926; + goto yy1848; + yy1929: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1926; + goto yy1848; + yy1930: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1924; + goto yy1848; + yy1931: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1919; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= '<') + goto yy1908; + if (yych <= '>') + goto yy1921; + goto yy1922; + } else { + if (yych <= 0xC1) + goto yy1908; + if (yych <= 0xDF) + goto yy1924; + goto yy1925; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1930; + goto yy1926; + } else { + if (yych <= 0xF0) + goto yy1927; + if (yych <= 0xF3) + goto yy1928; + if (yych <= 0xF4) + goto yy1929; + goto yy1908; + } + } + yy1932: + yyaccept = 2; + yych = *(marker = ++p); + if (yych <= '(') { + if (yych <= ' ') + goto yy1908; + if (yych <= '\'') + goto yy1862; + goto yy1908; + } else { + if (yych <= 0x7F) + goto yy1862; + if (yych <= 0xC1) + goto yy1908; + if (yych <= 0xF4) + goto yy1862; + goto yy1908; + } + yy1933: + ++p; + yych = *p; + if (yych <= '[') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1848; + goto yy1919; + } else { + if (yych <= '\n') + goto yy1848; + if (yych <= '\f') + goto yy1919; + goto yy1848; + } + } else { + if (yych <= ')') { + if (yych <= ' ') + goto yy1919; + if (yych <= '(') + goto yy1917; + goto yy1942; + } else { + if (yych == '>') + goto yy1944; + goto yy1917; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1933; + if (yych <= 0x7F) + goto yy1917; + goto yy1848; + } else { + if (yych <= 0xDF) + goto yy1935; + if (yych <= 0xE0) + goto yy1936; + goto yy1937; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1941; + if (yych <= 0xEF) + goto yy1937; + goto yy1938; + } else { + if (yych <= 0xF3) + goto yy1939; + if (yych <= 0xF4) + goto yy1940; + goto yy1848; + } + } + } + yy1935: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1917; + goto yy1848; + yy1936: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1935; + goto yy1848; + yy1937: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1935; + goto yy1848; + yy1938: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1937; + goto yy1848; + yy1939: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1937; + goto yy1848; + yy1940: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1937; + goto yy1848; + yy1941: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1935; + goto yy1848; + yy1942: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) + goto yy1841; + if (yych <= '\t') + goto yy1919; + goto yy1841; + } else { + if (yych == '\r') + goto yy1841; + goto yy1919; + } + } else { + if (yych <= ')') { + if (yych <= '\'') + goto yy1942; + if (yych <= '(') + goto yy1917; + goto yy1905; + } else { + if (yych == '<') + goto yy1887; + if (yych <= '=') + goto yy1942; + goto yy1945; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') + goto yy1946; + goto yy1942; + } else { + if (yych <= 0xC1) + goto yy1841; + if (yych <= 0xDF) + goto yy1947; + goto yy1948; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1953; + goto yy1949; + } else { + if (yych <= 0xF0) + goto yy1950; + if (yych <= 0xF3) + goto yy1951; + if (yych <= 0xF4) + goto yy1952; + goto yy1841; + } + } + } + yy1944: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) + goto yy1908; + if (yych <= '\t') + goto yy1919; + goto yy1908; + } else { + if (yych == '\r') + goto yy1908; + goto yy1919; + } + } else { + if (yych <= ')') { + if (yych <= '\'') + goto yy1917; + if (yych <= '(') + goto yy1919; + goto yy1905; + } else { + if (yych == '<') + goto yy1861; + if (yych <= '=') + goto yy1917; + goto yy1932; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') + goto yy1933; + goto yy1917; + } else { + if (yych <= 0xC1) + goto yy1908; + if (yych <= 0xDF) + goto yy1935; + goto yy1936; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1941; + goto yy1937; + } else { + if (yych <= 0xF0) + goto yy1938; + if (yych <= 0xF3) + goto yy1939; + if (yych <= 0xF4) + goto yy1940; + goto yy1908; + } + } + } + yy1945: + yyaccept = 2; + yych = *(marker = ++p); + if (yych <= ' ') + goto yy1908; + if (yych <= 0x7F) + goto yy1888; + if (yych <= 0xC1) + goto yy1908; + if (yych <= 0xF4) + goto yy1888; + goto yy1908; + yy1946: + ++p; + yych = *p; + if (yych <= '\\') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1870; + goto yy1905; + } else { + if (yych <= '\n') + goto yy1870; + if (yych <= '\f') + goto yy1905; + goto yy1870; + } + } else { + if (yych <= '=') { + if (yych <= ' ') + goto yy1905; + goto yy1942; + } else { + if (yych <= '>') + goto yy1954; + if (yych <= '[') + goto yy1942; + goto yy1955; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy1942; + goto yy1848; + } else { + if (yych <= 0xDF) + goto yy1956; + if (yych <= 0xE0) + goto yy1957; + goto yy1958; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1962; + if (yych <= 0xEF) + goto yy1958; + goto yy1959; + } else { + if (yych <= 0xF3) + goto yy1960; + if (yych <= 0xF4) + goto yy1961; + goto yy1848; + } + } + } + yy1947: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1942; + goto yy1848; + yy1948: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1947; + goto yy1848; + yy1949: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1947; + goto yy1848; + yy1950: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1949; + goto yy1848; + yy1951: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1949; + goto yy1848; + yy1952: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1949; + goto yy1848; + yy1953: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1947; + goto yy1848; + yy1954: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) + goto yy1908; + if (yych <= '\t') + goto yy1919; + goto yy1908; + } else { + if (yych == '\r') + goto yy1908; + goto yy1919; + } + } else { + if (yych <= ')') { + if (yych <= '\'') + goto yy1942; + if (yych <= '(') + goto yy1917; + goto yy1905; + } else { + if (yych == '<') + goto yy1887; + if (yych <= '=') + goto yy1942; + goto yy1945; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') + goto yy1946; + goto yy1942; + } else { + if (yych <= 0xC1) + goto yy1908; + if (yych <= 0xDF) + goto yy1947; + goto yy1948; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1953; + goto yy1949; + } else { + if (yych <= 0xF0) + goto yy1950; + if (yych <= 0xF3) + goto yy1951; + if (yych <= 0xF4) + goto yy1952; + goto yy1908; + } + } + } + yy1955: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '[') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1841; + goto yy1919; + } else { + if (yych <= '\n') + goto yy1841; + if (yych <= '\f') + goto yy1919; + goto yy1841; + } + } else { + if (yych <= '(') { + if (yych <= ' ') + goto yy1919; + if (yych <= '\'') + goto yy1942; + goto yy1917; + } else { + if (yych == '>') + goto yy1954; + goto yy1942; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1946; + if (yych <= 0x7F) + goto yy1942; + goto yy1841; + } else { + if (yych <= 0xDF) + goto yy1947; + if (yych <= 0xE0) + goto yy1948; + goto yy1949; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1953; + if (yych <= 0xEF) + goto yy1949; + goto yy1950; + } else { + if (yych <= 0xF3) + goto yy1951; + if (yych <= 0xF4) + goto yy1952; + goto yy1841; + } + } + } + yy1956: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1942; + goto yy1848; + yy1957: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1956; + goto yy1848; + yy1958: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1956; + goto yy1848; + yy1959: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1958; + goto yy1848; + yy1960: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1958; + goto yy1848; + yy1961: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1958; + goto yy1848; + yy1962: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1956; + goto yy1848; + yy1963: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1905; + } + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x00) + goto yy1908; + goto yy1919; + } else { + if (yych <= '\n') + goto yy1908; + if (yych <= '\f') + goto yy1919; + goto yy1908; + } + } else { + if (yych <= '(') { + if (yych <= ' ') + goto yy1919; + goto yy1917; + } else { + if (yych <= ')') + goto yy1919; + if (yych <= '<') + goto yy1870; + goto yy1907; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1916; + goto yy1908; + } else { + if (yych <= 0xDF) + goto yy1909; + if (yych <= 0xE0) + goto yy1910; + goto yy1911; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1915; + if (yych <= 0xEF) + goto yy1911; + goto yy1912; + } else { + if (yych <= 0xF3) + goto yy1913; + if (yych <= 0xF4) + goto yy1914; + goto yy1908; + } + } + } + yy1964: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '[') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) + goto yy1841; + if (yych <= '\t') + goto yy1919; + goto yy1841; + } else { + if (yych == '\r') + goto yy1841; + goto yy1919; + } + } else { + if (yych <= ')') { + if (yych <= '\'') + goto yy1905; + if (yych <= '(') + goto yy1917; + goto yy1919; + } else { + if (yych == '>') + goto yy1963; + goto yy1905; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1916; + if (yych <= 0x7F) + goto yy1905; + goto yy1841; + } else { + if (yych <= 0xDF) + goto yy1909; + if (yych <= 0xE0) + goto yy1910; + goto yy1911; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1915; + if (yych <= 0xEF) + goto yy1911; + goto yy1912; + } else { + if (yych <= 0xF3) + goto yy1913; + if (yych <= 0xF4) + goto yy1914; + goto yy1841; + } + } + } + yy1965: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1905; + goto yy1848; + yy1966: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1848; + if (yych <= 0xBF) + goto yy1965; + goto yy1848; + yy1967: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1965; + goto yy1848; + yy1968: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1848; + if (yych <= 0xBF) + goto yy1967; + goto yy1848; + yy1969: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0xBF) + goto yy1967; + goto yy1848; + yy1970: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x8F) + goto yy1967; + goto yy1848; + yy1971: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1848; + if (yych <= 0x9F) + goto yy1965; + goto yy1848; + } } // Try to match a link title (in single quotes, in double quotes, or // in parentheses), returning number of chars matched. Allow one // level of internal nesting (quotes within quotes). -bufsize_t _scan_link_title(const unsigned char *p) -{ +bufsize_t _scan_link_title(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 96, 224, 224, 224, 224, 160, - 224, 192, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 16, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 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 <= 0xC1) { - if (yych <= '"') { - if (yych == '\n') goto yy1974; - if (yych <= '!') goto yy1978; - goto yy1975; - } else { - if (yych <= '\'') { - if (yych <= '&') goto yy1978; - goto yy1976; - } else { - if (yych <= '(') goto yy1977; - if (yych <= 0x7F) goto yy1978; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy1979; - if (yych <= 0xE0) goto yy1981; - if (yych <= 0xEC) goto yy1982; - goto yy1986; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy1982; - goto yy1983; - } else { - if (yych <= 0xF3) goto yy1984; - if (yych <= 0xF4) goto yy1985; - } - } - } -yy1974: - { return 0; } -yy1975: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1974; - if (yych <= 0x7F) goto yy2018; - if (yych <= 0xC1) goto yy1974; - if (yych <= 0xF4) goto yy2018; - goto yy1974; -yy1976: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1974; - if (yych <= 0x7F) goto yy2004; - if (yych <= 0xC1) goto yy1974; - if (yych <= 0xF4) goto yy2004; - goto yy1974; -yy1977: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) goto yy1974; - if (yych <= 0x7F) goto yy1990; - if (yych <= 0xC1) goto yy1974; - if (yych <= 0xF4) goto yy1990; - goto yy1974; -yy1978: - yych = *++p; - goto yy1974; -yy1979: - yych = *++p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy1978; -yy1980: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy1974; - } else { - goto yy1999; - } - } else { - if (yyaccept == 2) { - goto yy2013; - } else { - goto yy2027; - } - } -yy1981: - yych = *++p; - if (yych <= 0x9F) goto yy1980; - if (yych <= 0xBF) goto yy1979; - goto yy1980; -yy1982: - yych = *++p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy1979; - goto yy1980; -yy1983: - yych = *++p; - if (yych <= 0x8F) goto yy1980; - if (yych <= 0xBF) goto yy1982; - goto yy1980; -yy1984: - yych = *++p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy1982; - goto yy1980; -yy1985: - yych = *++p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x8F) goto yy1982; - goto yy1980; -yy1986: - yych = *++p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x9F) goto yy1979; - goto yy1980; -yy1987: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1989; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1980; - if (yych <= ')') goto yy2000; - goto yy1987; - } else { - if (yych <= 0xC1) goto yy1980; - if (yych <= 0xDF) goto yy1991; - goto yy1992; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1997; - goto yy1993; - } else { - if (yych <= 0xF0) goto yy1994; - if (yych <= 0xF3) goto yy1995; - if (yych <= 0xF4) goto yy1996; - goto yy1980; - } - } -yy1989: - ++p; - yych = *p; -yy1990: - if (yybm[0+yych] & 32) { - goto yy1989; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1980; - if (yych <= ')') goto yy1998; - goto yy1987; - } else { - if (yych <= 0xC1) goto yy1980; - if (yych >= 0xE0) goto yy1992; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1997; - goto yy1993; - } else { - if (yych <= 0xF0) goto yy1994; - if (yych <= 0xF3) goto yy1995; - if (yych <= 0xF4) goto yy1996; - goto yy1980; - } - } -yy1991: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy1989; - goto yy1980; -yy1992: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1980; - if (yych <= 0xBF) goto yy1991; - goto yy1980; -yy1993: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy1991; - goto yy1980; -yy1994: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1980; - if (yych <= 0xBF) goto yy1993; - goto yy1980; -yy1995: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy1993; - goto yy1980; -yy1996: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x8F) goto yy1993; - goto yy1980; -yy1997: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x9F) goto yy1991; - goto yy1980; -yy1998: - ++p; -yy1999: - { return (bufsize_t)(p - start); } -yy2000: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy1989; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1999; - if (yych <= ')') goto yy1998; - goto yy1987; - } else { - if (yych <= 0xC1) goto yy1999; - if (yych <= 0xDF) goto yy1991; - goto yy1992; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy1997; - goto yy1993; - } else { - if (yych <= 0xF0) goto yy1994; - if (yych <= 0xF3) goto yy1995; - if (yych <= 0xF4) goto yy1996; - goto yy1999; - } - } -yy2001: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy2003; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1980; - if (yych <= '\'') goto yy2014; - goto yy2001; - } else { - if (yych <= 0xC1) goto yy1980; - if (yych <= 0xDF) goto yy2005; - goto yy2006; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2011; - goto yy2007; - } else { - if (yych <= 0xF0) goto yy2008; - if (yych <= 0xF3) goto yy2009; - if (yych <= 0xF4) goto yy2010; - goto yy1980; - } - } -yy2003: - ++p; - yych = *p; -yy2004: - if (yybm[0+yych] & 64) { - goto yy2003; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1980; - if (yych <= '\'') goto yy2012; - goto yy2001; - } else { - if (yych <= 0xC1) goto yy1980; - if (yych >= 0xE0) goto yy2006; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2011; - goto yy2007; - } else { - if (yych <= 0xF0) goto yy2008; - if (yych <= 0xF3) goto yy2009; - if (yych <= 0xF4) goto yy2010; - goto yy1980; - } - } -yy2005: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy2003; - goto yy1980; -yy2006: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1980; - if (yych <= 0xBF) goto yy2005; - goto yy1980; -yy2007: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy2005; - goto yy1980; -yy2008: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1980; - if (yych <= 0xBF) goto yy2007; - goto yy1980; -yy2009: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy2007; - goto yy1980; -yy2010: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x8F) goto yy2007; - goto yy1980; -yy2011: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x9F) goto yy2005; - goto yy1980; -yy2012: - ++p; -yy2013: - { return (bufsize_t)(p - start); } -yy2014: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy2003; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy2013; - if (yych <= '\'') goto yy2012; - goto yy2001; - } else { - if (yych <= 0xC1) goto yy2013; - if (yych <= 0xDF) goto yy2005; - goto yy2006; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2011; - goto yy2007; - } else { - if (yych <= 0xF0) goto yy2008; - if (yych <= 0xF3) goto yy2009; - if (yych <= 0xF4) goto yy2010; - goto yy2013; - } - } -yy2015: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2017; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1980; - if (yych <= '"') goto yy2028; - goto yy2015; - } else { - if (yych <= 0xC1) goto yy1980; - if (yych <= 0xDF) goto yy2019; - goto yy2020; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2025; - goto yy2021; - } else { - if (yych <= 0xF0) goto yy2022; - if (yych <= 0xF3) goto yy2023; - if (yych <= 0xF4) goto yy2024; - goto yy1980; - } - } -yy2017: - ++p; - yych = *p; -yy2018: - if (yybm[0+yych] & 128) { - goto yy2017; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy1980; - if (yych <= '"') goto yy2026; - goto yy2015; - } else { - if (yych <= 0xC1) goto yy1980; - if (yych >= 0xE0) goto yy2020; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2025; - goto yy2021; - } else { - if (yych <= 0xF0) goto yy2022; - if (yych <= 0xF3) goto yy2023; - if (yych <= 0xF4) goto yy2024; - goto yy1980; - } - } -yy2019: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy2017; - goto yy1980; -yy2020: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy1980; - if (yych <= 0xBF) goto yy2019; - goto yy1980; -yy2021: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy2019; - goto yy1980; -yy2022: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy1980; - if (yych <= 0xBF) goto yy2021; - goto yy1980; -yy2023: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0xBF) goto yy2021; - goto yy1980; -yy2024: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x8F) goto yy2021; - goto yy1980; -yy2025: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy1980; - if (yych <= 0x9F) goto yy2019; - goto yy1980; -yy2026: - ++p; -yy2027: - { return (bufsize_t)(p - start); } -yy2028: - yyaccept = 3; - marker = ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2017; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) goto yy2027; - if (yych <= '"') goto yy2026; - goto yy2015; - } else { - if (yych <= 0xC1) goto yy2027; - if (yych <= 0xDF) goto yy2019; - goto yy2020; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2025; - goto yy2021; - } else { - if (yych <= 0xF0) goto yy2022; - if (yych <= 0xF3) goto yy2023; - if (yych <= 0xF4) goto yy2024; - goto yy2027; - } - } -} - + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { + if (yych <= '"') { + if (yych == '\n') + goto yy1974; + if (yych <= '!') + goto yy1978; + goto yy1975; + } else { + if (yych <= '\'') { + if (yych <= '&') + goto yy1978; + goto yy1976; + } else { + if (yych <= '(') + goto yy1977; + if (yych <= 0x7F) + goto yy1978; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1979; + if (yych <= 0xE0) + goto yy1981; + if (yych <= 0xEC) + goto yy1982; + goto yy1986; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1982; + goto yy1983; + } else { + if (yych <= 0xF3) + goto yy1984; + if (yych <= 0xF4) + goto yy1985; + } + } + } + yy1974 : { return 0; } + yy1975: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy1974; + if (yych <= 0x7F) + goto yy2018; + if (yych <= 0xC1) + goto yy1974; + if (yych <= 0xF4) + goto yy2018; + goto yy1974; + yy1976: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy1974; + if (yych <= 0x7F) + goto yy2004; + if (yych <= 0xC1) + goto yy1974; + if (yych <= 0xF4) + goto yy2004; + goto yy1974; + yy1977: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy1974; + if (yych <= 0x7F) + goto yy1990; + if (yych <= 0xC1) + goto yy1974; + if (yych <= 0xF4) + goto yy1990; + goto yy1974; + yy1978: + yych = *++p; + goto yy1974; + yy1979: + yych = *++p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy1978; + yy1980: + p = marker; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy1974; + } else { + goto yy1999; + } + } else { + if (yyaccept == 2) { + goto yy2013; + } else { + goto yy2027; + } + } + yy1981: + yych = *++p; + if (yych <= 0x9F) + goto yy1980; + if (yych <= 0xBF) + goto yy1979; + goto yy1980; + yy1982: + yych = *++p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy1979; + goto yy1980; + yy1983: + yych = *++p; + if (yych <= 0x8F) + goto yy1980; + if (yych <= 0xBF) + goto yy1982; + goto yy1980; + yy1984: + yych = *++p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy1982; + goto yy1980; + yy1985: + yych = *++p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x8F) + goto yy1982; + goto yy1980; + yy1986: + yych = *++p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x9F) + goto yy1979; + goto yy1980; + yy1987: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1989; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1980; + if (yych <= ')') + goto yy2000; + goto yy1987; + } else { + if (yych <= 0xC1) + goto yy1980; + if (yych <= 0xDF) + goto yy1991; + goto yy1992; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1997; + goto yy1993; + } else { + if (yych <= 0xF0) + goto yy1994; + if (yych <= 0xF3) + goto yy1995; + if (yych <= 0xF4) + goto yy1996; + goto yy1980; + } + } + yy1989: + ++p; + yych = *p; + yy1990: + if (yybm[0 + yych] & 32) { + goto yy1989; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1980; + if (yych <= ')') + goto yy1998; + goto yy1987; + } else { + if (yych <= 0xC1) + goto yy1980; + if (yych >= 0xE0) + goto yy1992; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1997; + goto yy1993; + } else { + if (yych <= 0xF0) + goto yy1994; + if (yych <= 0xF3) + goto yy1995; + if (yych <= 0xF4) + goto yy1996; + goto yy1980; + } + } + yy1991: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy1989; + goto yy1980; + yy1992: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1980; + if (yych <= 0xBF) + goto yy1991; + goto yy1980; + yy1993: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy1991; + goto yy1980; + yy1994: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1980; + if (yych <= 0xBF) + goto yy1993; + goto yy1980; + yy1995: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy1993; + goto yy1980; + yy1996: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x8F) + goto yy1993; + goto yy1980; + yy1997: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x9F) + goto yy1991; + goto yy1980; + yy1998: + ++p; + yy1999 : { return (bufsize_t)(p - start); } + yy2000: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1989; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1999; + if (yych <= ')') + goto yy1998; + goto yy1987; + } else { + if (yych <= 0xC1) + goto yy1999; + if (yych <= 0xDF) + goto yy1991; + goto yy1992; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1997; + goto yy1993; + } else { + if (yych <= 0xF0) + goto yy1994; + if (yych <= 0xF3) + goto yy1995; + if (yych <= 0xF4) + goto yy1996; + goto yy1999; + } + } + yy2001: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy2003; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1980; + if (yych <= '\'') + goto yy2014; + goto yy2001; + } else { + if (yych <= 0xC1) + goto yy1980; + if (yych <= 0xDF) + goto yy2005; + goto yy2006; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2011; + goto yy2007; + } else { + if (yych <= 0xF0) + goto yy2008; + if (yych <= 0xF3) + goto yy2009; + if (yych <= 0xF4) + goto yy2010; + goto yy1980; + } + } + yy2003: + ++p; + yych = *p; + yy2004: + if (yybm[0 + yych] & 64) { + goto yy2003; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1980; + if (yych <= '\'') + goto yy2012; + goto yy2001; + } else { + if (yych <= 0xC1) + goto yy1980; + if (yych >= 0xE0) + goto yy2006; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2011; + goto yy2007; + } else { + if (yych <= 0xF0) + goto yy2008; + if (yych <= 0xF3) + goto yy2009; + if (yych <= 0xF4) + goto yy2010; + goto yy1980; + } + } + yy2005: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy2003; + goto yy1980; + yy2006: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1980; + if (yych <= 0xBF) + goto yy2005; + goto yy1980; + yy2007: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy2005; + goto yy1980; + yy2008: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1980; + if (yych <= 0xBF) + goto yy2007; + goto yy1980; + yy2009: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy2007; + goto yy1980; + yy2010: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x8F) + goto yy2007; + goto yy1980; + yy2011: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x9F) + goto yy2005; + goto yy1980; + yy2012: + ++p; + yy2013 : { return (bufsize_t)(p - start); } + yy2014: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy2003; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy2013; + if (yych <= '\'') + goto yy2012; + goto yy2001; + } else { + if (yych <= 0xC1) + goto yy2013; + if (yych <= 0xDF) + goto yy2005; + goto yy2006; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2011; + goto yy2007; + } else { + if (yych <= 0xF0) + goto yy2008; + if (yych <= 0xF3) + goto yy2009; + if (yych <= 0xF4) + goto yy2010; + goto yy2013; + } + } + yy2015: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2017; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1980; + if (yych <= '"') + goto yy2028; + goto yy2015; + } else { + if (yych <= 0xC1) + goto yy1980; + if (yych <= 0xDF) + goto yy2019; + goto yy2020; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2025; + goto yy2021; + } else { + if (yych <= 0xF0) + goto yy2022; + if (yych <= 0xF3) + goto yy2023; + if (yych <= 0xF4) + goto yy2024; + goto yy1980; + } + } + yy2017: + ++p; + yych = *p; + yy2018: + if (yybm[0 + yych] & 128) { + goto yy2017; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy1980; + if (yych <= '"') + goto yy2026; + goto yy2015; + } else { + if (yych <= 0xC1) + goto yy1980; + if (yych >= 0xE0) + goto yy2020; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2025; + goto yy2021; + } else { + if (yych <= 0xF0) + goto yy2022; + if (yych <= 0xF3) + goto yy2023; + if (yych <= 0xF4) + goto yy2024; + goto yy1980; + } + } + yy2019: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy2017; + goto yy1980; + yy2020: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy1980; + if (yych <= 0xBF) + goto yy2019; + goto yy1980; + yy2021: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy2019; + goto yy1980; + yy2022: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy1980; + if (yych <= 0xBF) + goto yy2021; + goto yy1980; + yy2023: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0xBF) + goto yy2021; + goto yy1980; + yy2024: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x8F) + goto yy2021; + goto yy1980; + yy2025: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1980; + if (yych <= 0x9F) + goto yy2019; + goto yy1980; + yy2026: + ++p; + yy2027 : { return (bufsize_t)(p - start); } + yy2028: + yyaccept = 3; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2017; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy2027; + if (yych <= '"') + goto yy2026; + goto yy2015; + } else { + if (yych <= 0xC1) + goto yy2027; + if (yych <= 0xDF) + goto yy2019; + goto yy2020; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2025; + goto yy2021; + } else { + if (yych <= 0xF0) + goto yy2022; + if (yych <= 0xF3) + goto yy2023; + if (yych <= 0xF4) + goto yy2024; + goto yy2027; + } + } + } } // Match space characters, including newlines. -bufsize_t _scan_spacechars(const unsigned char *p) -{ +bufsize_t _scan_spacechars(const unsigned char *p) { const unsigned char *marker = NULL; - const unsigned char *start = p; \ - -{ - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 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 <= 0xC1) { - if (yych <= '\r') { - if (yych <= 0x08) goto yy2035; - if (yych == '\n') goto yy2033; - goto yy2032; - } else { - if (yych == ' ') goto yy2032; - if (yych <= 0x7F) goto yy2035; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy2037; - if (yych <= 0xE0) goto yy2039; - if (yych <= 0xEC) goto yy2040; - goto yy2044; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy2040; - goto yy2041; - } else { - if (yych <= 0xF3) goto yy2042; - if (yych <= 0xF4) goto yy2043; - } - } - } -yy2031: - { return (bufsize_t)(p - start); } -yy2032: - yych = *++p; - goto yy2034; -yy2033: - ++p; - yych = *p; -yy2034: - if (yybm[0+yych] & 128) { - goto yy2033; - } - goto yy2031; -yy2035: - ++p; - { return 0; } -yy2037: - yych = *++p; - if (yych <= 0x7F) goto yy2038; - if (yych <= 0xBF) goto yy2035; -yy2038: - p = marker; - goto yy2031; -yy2039: - yych = *++p; - if (yych <= 0x9F) goto yy2038; - if (yych <= 0xBF) goto yy2037; - goto yy2038; -yy2040: - yych = *++p; - if (yych <= 0x7F) goto yy2038; - if (yych <= 0xBF) goto yy2037; - goto yy2038; -yy2041: - yych = *++p; - if (yych <= 0x8F) goto yy2038; - if (yych <= 0xBF) goto yy2040; - goto yy2038; -yy2042: - yych = *++p; - if (yych <= 0x7F) goto yy2038; - if (yych <= 0xBF) goto yy2040; - goto yy2038; -yy2043: - yych = *++p; - if (yych <= 0x7F) goto yy2038; - if (yych <= 0x8F) goto yy2040; - goto yy2038; -yy2044: - ++p; - if ((yych = *p) <= 0x7F) goto yy2038; - if (yych <= 0x9F) goto yy2037; - goto yy2038; -} + const unsigned char *start = p; + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 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 <= 0xC1) { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy2035; + if (yych == '\n') + goto yy2033; + goto yy2032; + } else { + if (yych == ' ') + goto yy2032; + if (yych <= 0x7F) + goto yy2035; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy2037; + if (yych <= 0xE0) + goto yy2039; + if (yych <= 0xEC) + goto yy2040; + goto yy2044; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy2040; + goto yy2041; + } else { + if (yych <= 0xF3) + goto yy2042; + if (yych <= 0xF4) + goto yy2043; + } + } + } + yy2031 : { return (bufsize_t)(p - start); } + yy2032: + yych = *++p; + goto yy2034; + yy2033: + ++p; + yych = *p; + yy2034: + if (yybm[0 + yych] & 128) { + goto yy2033; + } + goto yy2031; + yy2035: + ++p; + { return 0; } + yy2037: + yych = *++p; + if (yych <= 0x7F) + goto yy2038; + if (yych <= 0xBF) + goto yy2035; + yy2038: + p = marker; + goto yy2031; + yy2039: + yych = *++p; + if (yych <= 0x9F) + goto yy2038; + if (yych <= 0xBF) + goto yy2037; + goto yy2038; + yy2040: + yych = *++p; + if (yych <= 0x7F) + goto yy2038; + if (yych <= 0xBF) + goto yy2037; + goto yy2038; + yy2041: + yych = *++p; + if (yych <= 0x8F) + goto yy2038; + if (yych <= 0xBF) + goto yy2040; + goto yy2038; + yy2042: + yych = *++p; + if (yych <= 0x7F) + goto yy2038; + if (yych <= 0xBF) + goto yy2040; + goto yy2038; + yy2043: + yych = *++p; + if (yych <= 0x7F) + goto yy2038; + if (yych <= 0x8F) + goto yy2040; + goto yy2038; + yy2044: + ++p; + if ((yych = *p) <= 0x7F) + goto yy2038; + if (yych <= 0x9F) + goto yy2037; + goto yy2038; + } } // Match ATX header start. -bufsize_t _scan_atx_header_start(const unsigned char *p) -{ +bufsize_t _scan_atx_header_start(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = 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, - }; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= '"') { - if (yych != '\n') goto yy2049; - } else { - if (yych <= '#') goto yy2048; - if (yych <= 0x7F) goto yy2049; - if (yych >= 0xC2) goto yy2050; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy2052; - if (yych == 0xED) goto yy2057; - goto yy2053; - } else { - if (yych <= 0xF0) goto yy2054; - if (yych <= 0xF3) goto yy2055; - if (yych <= 0xF4) goto yy2056; - } - } -yy2047: - { return 0; } -yy2048: - yych = *(marker = ++p); - if (yybm[0+yych] & 128) { - goto yy2060; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2058; - goto yy2047; - } else { - if (yych <= '\r') goto yy2058; - if (yych == '#') goto yy2062; - goto yy2047; - } -yy2049: - yych = *++p; - goto yy2047; -yy2050: - yych = *++p; - if (yych <= 0x7F) goto yy2051; - if (yych <= 0xBF) goto yy2049; -yy2051: - p = marker; - goto yy2047; -yy2052: - yych = *++p; - if (yych <= 0x9F) goto yy2051; - if (yych <= 0xBF) goto yy2050; - goto yy2051; -yy2053: - yych = *++p; - if (yych <= 0x7F) goto yy2051; - if (yych <= 0xBF) goto yy2050; - goto yy2051; -yy2054: - yych = *++p; - if (yych <= 0x8F) goto yy2051; - if (yych <= 0xBF) goto yy2053; - goto yy2051; -yy2055: - yych = *++p; - if (yych <= 0x7F) goto yy2051; - if (yych <= 0xBF) goto yy2053; - goto yy2051; -yy2056: - yych = *++p; - if (yych <= 0x7F) goto yy2051; - if (yych <= 0x8F) goto yy2053; - goto yy2051; -yy2057: - yych = *++p; - if (yych <= 0x7F) goto yy2051; - if (yych <= 0x9F) goto yy2050; - goto yy2051; -yy2058: - ++p; -yy2059: - { return (bufsize_t)(p - start); } -yy2060: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2060; - } - goto yy2059; -yy2062: - yych = *++p; - if (yybm[0+yych] & 128) { - goto yy2060; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2058; - goto yy2051; - } else { - if (yych <= '\r') goto yy2058; - if (yych != '#') goto yy2051; - } - yych = *++p; - if (yybm[0+yych] & 128) { - goto yy2060; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2058; - goto yy2051; - } else { - if (yych <= '\r') goto yy2058; - if (yych != '#') goto yy2051; - } - yych = *++p; - if (yybm[0+yych] & 128) { - goto yy2060; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2058; - goto yy2051; - } else { - if (yych <= '\r') goto yy2058; - if (yych != '#') goto yy2051; - } - yych = *++p; - if (yybm[0+yych] & 128) { - goto yy2060; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2058; - goto yy2051; - } else { - if (yych <= '\r') goto yy2058; - if (yych != '#') goto yy2051; - } - ++p; - if (yybm[0+(yych = *p)] & 128) { - goto yy2060; - } - if (yych == '\n') goto yy2058; - if (yych == '\r') goto yy2058; - goto yy2051; -} - + { + 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, + }; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '"') { + if (yych != '\n') + goto yy2049; + } else { + if (yych <= '#') + goto yy2048; + if (yych <= 0x7F) + goto yy2049; + if (yych >= 0xC2) + goto yy2050; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy2052; + if (yych == 0xED) + goto yy2057; + goto yy2053; + } else { + if (yych <= 0xF0) + goto yy2054; + if (yych <= 0xF3) + goto yy2055; + if (yych <= 0xF4) + goto yy2056; + } + } + yy2047 : { return 0; } + yy2048: + yych = *(marker = ++p); + if (yybm[0 + yych] & 128) { + goto yy2060; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2058; + goto yy2047; + } else { + if (yych <= '\r') + goto yy2058; + if (yych == '#') + goto yy2062; + goto yy2047; + } + yy2049: + yych = *++p; + goto yy2047; + yy2050: + yych = *++p; + if (yych <= 0x7F) + goto yy2051; + if (yych <= 0xBF) + goto yy2049; + yy2051: + p = marker; + goto yy2047; + yy2052: + yych = *++p; + if (yych <= 0x9F) + goto yy2051; + if (yych <= 0xBF) + goto yy2050; + goto yy2051; + yy2053: + yych = *++p; + if (yych <= 0x7F) + goto yy2051; + if (yych <= 0xBF) + goto yy2050; + goto yy2051; + yy2054: + yych = *++p; + if (yych <= 0x8F) + goto yy2051; + if (yych <= 0xBF) + goto yy2053; + goto yy2051; + yy2055: + yych = *++p; + if (yych <= 0x7F) + goto yy2051; + if (yych <= 0xBF) + goto yy2053; + goto yy2051; + yy2056: + yych = *++p; + if (yych <= 0x7F) + goto yy2051; + if (yych <= 0x8F) + goto yy2053; + goto yy2051; + yy2057: + yych = *++p; + if (yych <= 0x7F) + goto yy2051; + if (yych <= 0x9F) + goto yy2050; + goto yy2051; + yy2058: + ++p; + yy2059 : { return (bufsize_t)(p - start); } + yy2060: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2060; + } + goto yy2059; + yy2062: + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy2060; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2058; + goto yy2051; + } else { + if (yych <= '\r') + goto yy2058; + if (yych != '#') + goto yy2051; + } + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy2060; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2058; + goto yy2051; + } else { + if (yych <= '\r') + goto yy2058; + if (yych != '#') + goto yy2051; + } + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy2060; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2058; + goto yy2051; + } else { + if (yych <= '\r') + goto yy2058; + if (yych != '#') + goto yy2051; + } + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy2060; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2058; + goto yy2051; + } else { + if (yych <= '\r') + goto yy2058; + if (yych != '#') + goto yy2051; + } + ++p; + if (yybm[0 + (yych = *p)] & 128) { + goto yy2060; + } + if (yych == '\n') + goto yy2058; + if (yych == '\r') + goto yy2058; + goto yy2051; + } } // Match setext header line. Return 1 for level-1 header, // 2 for level-2, 0 for no match. -bufsize_t _scan_setext_header_line(const unsigned char *p) -{ +bufsize_t _scan_setext_header_line(const unsigned char *p) { const unsigned char *marker = NULL; -{ - 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, - 32, 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, 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, - }; - yych = *(marker = p); - if (yych <= 0xC1) { - if (yych <= '-') { - if (yych == '\n') goto yy2069; - if (yych <= ',') goto yy2072; - goto yy2071; - } else { - if (yych == '=') goto yy2070; - if (yych <= 0x7F) goto yy2072; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy2073; - if (yych <= 0xE0) goto yy2075; - if (yych <= 0xEC) goto yy2076; - goto yy2080; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy2076; - goto yy2077; - } else { - if (yych <= 0xF3) goto yy2078; - if (yych <= 0xF4) goto yy2079; - } - } - } -yy2069: - { return 0; } -yy2070: - yych = *(marker = ++p); - if (yybm[0+yych] & 128) { - goto yy2091; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2089; - goto yy2069; - } else { - if (yych <= '\r') goto yy2089; - if (yych == ' ') goto yy2087; - goto yy2069; - } -yy2071: - yych = *(marker = ++p); - if (yybm[0+yych] & 32) { - goto yy2081; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2083; - goto yy2069; - } else { - if (yych <= '\r') goto yy2083; - if (yych == '-') goto yy2085; - goto yy2069; - } -yy2072: - yych = *++p; - goto yy2069; -yy2073: - yych = *++p; - if (yych <= 0x7F) goto yy2074; - if (yych <= 0xBF) goto yy2072; -yy2074: - p = marker; - goto yy2069; -yy2075: - yych = *++p; - if (yych <= 0x9F) goto yy2074; - if (yych <= 0xBF) goto yy2073; - goto yy2074; -yy2076: - yych = *++p; - if (yych <= 0x7F) goto yy2074; - if (yych <= 0xBF) goto yy2073; - goto yy2074; -yy2077: - yych = *++p; - if (yych <= 0x8F) goto yy2074; - if (yych <= 0xBF) goto yy2076; - goto yy2074; -yy2078: - yych = *++p; - if (yych <= 0x7F) goto yy2074; - if (yych <= 0xBF) goto yy2076; - goto yy2074; -yy2079: - yych = *++p; - if (yych <= 0x7F) goto yy2074; - if (yych <= 0x8F) goto yy2076; - goto yy2074; -yy2080: - yych = *++p; - if (yych <= 0x7F) goto yy2074; - if (yych <= 0x9F) goto yy2073; - goto yy2074; -yy2081: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy2081; - } - if (yych == '\n') goto yy2083; - if (yych != '\r') goto yy2074; -yy2083: - ++p; - { return 2; } -yy2085: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy2081; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2083; - goto yy2074; - } else { - if (yych <= '\r') goto yy2083; - if (yych == '-') goto yy2085; - goto yy2074; - } -yy2087: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych != '\n') goto yy2074; - } else { - if (yych <= '\r') goto yy2089; - if (yych == ' ') goto yy2087; - goto yy2074; - } -yy2089: - ++p; - { return 1; } -yy2091: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2091; - } - if (yych <= '\f') { - if (yych == '\n') goto yy2089; - goto yy2074; - } else { - if (yych <= '\r') goto yy2089; - if (yych == ' ') goto yy2087; - goto yy2074; - } -} - + { + 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, 32, 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, 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, + }; + yych = *(marker = p); + if (yych <= 0xC1) { + if (yych <= '-') { + if (yych == '\n') + goto yy2069; + if (yych <= ',') + goto yy2072; + goto yy2071; + } else { + if (yych == '=') + goto yy2070; + if (yych <= 0x7F) + goto yy2072; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy2073; + if (yych <= 0xE0) + goto yy2075; + if (yych <= 0xEC) + goto yy2076; + goto yy2080; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy2076; + goto yy2077; + } else { + if (yych <= 0xF3) + goto yy2078; + if (yych <= 0xF4) + goto yy2079; + } + } + } + yy2069 : { return 0; } + yy2070: + yych = *(marker = ++p); + if (yybm[0 + yych] & 128) { + goto yy2091; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2089; + goto yy2069; + } else { + if (yych <= '\r') + goto yy2089; + if (yych == ' ') + goto yy2087; + goto yy2069; + } + yy2071: + yych = *(marker = ++p); + if (yybm[0 + yych] & 32) { + goto yy2081; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2083; + goto yy2069; + } else { + if (yych <= '\r') + goto yy2083; + if (yych == '-') + goto yy2085; + goto yy2069; + } + yy2072: + yych = *++p; + goto yy2069; + yy2073: + yych = *++p; + if (yych <= 0x7F) + goto yy2074; + if (yych <= 0xBF) + goto yy2072; + yy2074: + p = marker; + goto yy2069; + yy2075: + yych = *++p; + if (yych <= 0x9F) + goto yy2074; + if (yych <= 0xBF) + goto yy2073; + goto yy2074; + yy2076: + yych = *++p; + if (yych <= 0x7F) + goto yy2074; + if (yych <= 0xBF) + goto yy2073; + goto yy2074; + yy2077: + yych = *++p; + if (yych <= 0x8F) + goto yy2074; + if (yych <= 0xBF) + goto yy2076; + goto yy2074; + yy2078: + yych = *++p; + if (yych <= 0x7F) + goto yy2074; + if (yych <= 0xBF) + goto yy2076; + goto yy2074; + yy2079: + yych = *++p; + if (yych <= 0x7F) + goto yy2074; + if (yych <= 0x8F) + goto yy2076; + goto yy2074; + yy2080: + yych = *++p; + if (yych <= 0x7F) + goto yy2074; + if (yych <= 0x9F) + goto yy2073; + goto yy2074; + yy2081: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy2081; + } + if (yych == '\n') + goto yy2083; + if (yych != '\r') + goto yy2074; + yy2083: + ++p; + { return 2; } + yy2085: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy2081; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2083; + goto yy2074; + } else { + if (yych <= '\r') + goto yy2083; + if (yych == '-') + goto yy2085; + goto yy2074; + } + yy2087: + ++p; + yych = *p; + if (yych <= '\f') { + if (yych != '\n') + goto yy2074; + } else { + if (yych <= '\r') + goto yy2089; + if (yych == ' ') + goto yy2087; + goto yy2074; + } + yy2089: + ++p; + { return 1; } + yy2091: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2091; + } + if (yych <= '\f') { + if (yych == '\n') + goto yy2089; + goto yy2074; + } else { + if (yych <= '\r') + goto yy2089; + if (yych == ' ') + goto yy2087; + goto yy2074; + } + } } // Scan a horizontal rule line: "...three or more hyphens, asterisks, // or underscores on a line by themselves. If you wish, you may use // spaces between the hyphens or asterisks." -bufsize_t _scan_hrule(const unsigned char *p) -{ +bufsize_t _scan_hrule(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 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, - 248, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 128, 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, 0, 0, 0, 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) { - if (yych <= '*') { - if (yych == '\n') goto yy2095; - if (yych <= ')') goto yy2099; - goto yy2096; - } else { - if (yych <= '-') { - if (yych <= ',') goto yy2099; - goto yy2098; - } else { - if (yych == '_') goto yy2097; - goto yy2099; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych >= 0xC2) goto yy2100; - } else { - if (yych <= 0xE0) goto yy2102; - if (yych <= 0xEC) goto yy2103; - goto yy2107; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy2103; - goto yy2104; - } else { - if (yych <= 0xF3) goto yy2105; - if (yych <= 0xF4) goto yy2106; - } - } - } -yy2095: - { return 0; } -yy2096: - yych = *(marker = ++p); - if (yych == ' ') goto yy2128; - if (yych == '*') goto yy2130; - goto yy2095; -yy2097: - yych = *(marker = ++p); - if (yych == ' ') goto yy2118; - if (yych == '_') goto yy2120; - goto yy2095; -yy2098: - yych = *(marker = ++p); - if (yybm[0+yych] & 8) { - goto yy2108; - } - if (yych == '-') goto yy2110; - goto yy2095; -yy2099: - yych = *++p; - goto yy2095; -yy2100: - yych = *++p; - if (yych <= 0x7F) goto yy2101; - if (yych <= 0xBF) goto yy2099; -yy2101: - p = marker; - goto yy2095; -yy2102: - yych = *++p; - if (yych <= 0x9F) goto yy2101; - if (yych <= 0xBF) goto yy2100; - goto yy2101; -yy2103: - yych = *++p; - if (yych <= 0x7F) goto yy2101; - if (yych <= 0xBF) goto yy2100; - goto yy2101; -yy2104: - yych = *++p; - if (yych <= 0x8F) goto yy2101; - if (yych <= 0xBF) goto yy2103; - goto yy2101; -yy2105: - yych = *++p; - if (yych <= 0x7F) goto yy2101; - if (yych <= 0xBF) goto yy2103; - goto yy2101; -yy2106: - yych = *++p; - if (yych <= 0x7F) goto yy2101; - if (yych <= 0x8F) goto yy2103; - goto yy2101; -yy2107: - yych = *++p; - if (yych <= 0x7F) goto yy2101; - if (yych <= 0x9F) goto yy2100; - goto yy2101; -yy2108: - ++p; - yych = *p; - if (yybm[0+yych] & 8) { - goto yy2108; - } - if (yych != '-') goto yy2101; -yy2110: - ++p; - yych = *p; - if (yych == ' ') goto yy2110; - if (yych != '-') goto yy2101; -yy2112: - ++p; - yych = *p; - if (yybm[0+yych] & 16) { - goto yy2112; - } - if (yych <= '\n') { - if (yych <= 0x08) goto yy2101; - if (yych >= '\n') goto yy2116; - } else { - if (yych == '\r') goto yy2116; - goto yy2101; - } -yy2114: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy2114; - } - if (yych <= 0x08) goto yy2101; - if (yych <= '\n') goto yy2116; - if (yych != '\r') goto yy2101; -yy2116: - ++p; - { return (bufsize_t)(p - start); } -yy2118: - ++p; - yych = *p; - if (yych == ' ') goto yy2118; - if (yych != '_') goto yy2101; -yy2120: - ++p; - yych = *p; - if (yych == ' ') goto yy2120; - if (yych != '_') goto yy2101; -yy2122: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy2122; - } - if (yych <= '\n') { - if (yych <= 0x08) goto yy2101; - if (yych >= '\n') goto yy2126; - } else { - if (yych == '\r') goto yy2126; - goto yy2101; - } -yy2124: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych <= 0x08) goto yy2101; - if (yych <= '\t') goto yy2124; - if (yych >= '\v') goto yy2101; - } else { - if (yych <= '\r') goto yy2126; - if (yych == ' ') goto yy2124; - goto yy2101; - } -yy2126: - ++p; - { return (bufsize_t)(p - start); } -yy2128: - ++p; - yych = *p; - if (yych == ' ') goto yy2128; - if (yych != '*') goto yy2101; -yy2130: - ++p; - yych = *p; - if (yych == ' ') goto yy2130; - if (yych != '*') goto yy2101; -yy2132: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2132; - } - if (yych <= '\n') { - if (yych <= 0x08) goto yy2101; - if (yych >= '\n') goto yy2136; - } else { - if (yych == '\r') goto yy2136; - goto yy2101; - } -yy2134: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych <= 0x08) goto yy2101; - if (yych <= '\t') goto yy2134; - if (yych >= '\v') goto yy2101; - } else { - if (yych <= '\r') goto yy2136; - if (yych == ' ') goto yy2134; - goto yy2101; - } -yy2136: - ++p; - { return (bufsize_t)(p - start); } -} - + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 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, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 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, 0, 0, 0, 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) { + if (yych <= '*') { + if (yych == '\n') + goto yy2095; + if (yych <= ')') + goto yy2099; + goto yy2096; + } else { + if (yych <= '-') { + if (yych <= ',') + goto yy2099; + goto yy2098; + } else { + if (yych == '_') + goto yy2097; + goto yy2099; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych >= 0xC2) + goto yy2100; + } else { + if (yych <= 0xE0) + goto yy2102; + if (yych <= 0xEC) + goto yy2103; + goto yy2107; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy2103; + goto yy2104; + } else { + if (yych <= 0xF3) + goto yy2105; + if (yych <= 0xF4) + goto yy2106; + } + } + } + yy2095 : { return 0; } + yy2096: + yych = *(marker = ++p); + if (yych == ' ') + goto yy2128; + if (yych == '*') + goto yy2130; + goto yy2095; + yy2097: + yych = *(marker = ++p); + if (yych == ' ') + goto yy2118; + if (yych == '_') + goto yy2120; + goto yy2095; + yy2098: + yych = *(marker = ++p); + if (yybm[0 + yych] & 8) { + goto yy2108; + } + if (yych == '-') + goto yy2110; + goto yy2095; + yy2099: + yych = *++p; + goto yy2095; + yy2100: + yych = *++p; + if (yych <= 0x7F) + goto yy2101; + if (yych <= 0xBF) + goto yy2099; + yy2101: + p = marker; + goto yy2095; + yy2102: + yych = *++p; + if (yych <= 0x9F) + goto yy2101; + if (yych <= 0xBF) + goto yy2100; + goto yy2101; + yy2103: + yych = *++p; + if (yych <= 0x7F) + goto yy2101; + if (yych <= 0xBF) + goto yy2100; + goto yy2101; + yy2104: + yych = *++p; + if (yych <= 0x8F) + goto yy2101; + if (yych <= 0xBF) + goto yy2103; + goto yy2101; + yy2105: + yych = *++p; + if (yych <= 0x7F) + goto yy2101; + if (yych <= 0xBF) + goto yy2103; + goto yy2101; + yy2106: + yych = *++p; + if (yych <= 0x7F) + goto yy2101; + if (yych <= 0x8F) + goto yy2103; + goto yy2101; + yy2107: + yych = *++p; + if (yych <= 0x7F) + goto yy2101; + if (yych <= 0x9F) + goto yy2100; + goto yy2101; + yy2108: + ++p; + yych = *p; + if (yybm[0 + yych] & 8) { + goto yy2108; + } + if (yych != '-') + goto yy2101; + yy2110: + ++p; + yych = *p; + if (yych == ' ') + goto yy2110; + if (yych != '-') + goto yy2101; + yy2112: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy2112; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy2101; + if (yych >= '\n') + goto yy2116; + } else { + if (yych == '\r') + goto yy2116; + goto yy2101; + } + yy2114: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy2114; + } + if (yych <= 0x08) + goto yy2101; + if (yych <= '\n') + goto yy2116; + if (yych != '\r') + goto yy2101; + yy2116: + ++p; + { return (bufsize_t)(p - start); } + yy2118: + ++p; + yych = *p; + if (yych == ' ') + goto yy2118; + if (yych != '_') + goto yy2101; + yy2120: + ++p; + yych = *p; + if (yych == ' ') + goto yy2120; + if (yych != '_') + goto yy2101; + yy2122: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy2122; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy2101; + if (yych >= '\n') + goto yy2126; + } else { + if (yych == '\r') + goto yy2126; + goto yy2101; + } + yy2124: + ++p; + yych = *p; + if (yych <= '\f') { + if (yych <= 0x08) + goto yy2101; + if (yych <= '\t') + goto yy2124; + if (yych >= '\v') + goto yy2101; + } else { + if (yych <= '\r') + goto yy2126; + if (yych == ' ') + goto yy2124; + goto yy2101; + } + yy2126: + ++p; + { return (bufsize_t)(p - start); } + yy2128: + ++p; + yych = *p; + if (yych == ' ') + goto yy2128; + if (yych != '*') + goto yy2101; + yy2130: + ++p; + yych = *p; + if (yych == ' ') + goto yy2130; + if (yych != '*') + goto yy2101; + yy2132: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2132; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy2101; + if (yych >= '\n') + goto yy2136; + } else { + if (yych == '\r') + goto yy2136; + goto yy2101; + } + yy2134: + ++p; + yych = *p; + if (yych <= '\f') { + if (yych <= 0x08) + goto yy2101; + if (yych <= '\t') + goto yy2134; + if (yych >= '\v') + goto yy2101; + } else { + if (yych <= '\r') + goto yy2136; + if (yych == ' ') + goto yy2134; + goto yy2101; + } + yy2136: + ++p; + { return (bufsize_t)(p - start); } + } } // Scan an opening code fence. -bufsize_t _scan_open_code_fence(const unsigned char *p) -{ +bufsize_t _scan_open_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - static const unsigned char yybm[] = { - 0, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 0, 160, 160, 0, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 96, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 144, 160, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 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 <= 0xC1) { - if (yych <= '`') { - if (yych == '\n') goto yy2140; - if (yych <= '_') goto yy2143; - goto yy2141; - } else { - if (yych == '~') goto yy2142; - if (yych <= 0x7F) goto yy2143; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy2144; - if (yych <= 0xE0) goto yy2146; - if (yych <= 0xEC) goto yy2147; - goto yy2151; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy2147; - goto yy2148; - } else { - if (yych <= 0xF3) goto yy2149; - if (yych <= 0xF4) goto yy2150; - } - } - } -yy2140: - { return 0; } -yy2141: - yych = *(marker = ++p); - if (yych == '`') goto yy2166; - goto yy2140; -yy2142: - yych = *(marker = ++p); - if (yych == '~') goto yy2152; - goto yy2140; -yy2143: - yych = *++p; - goto yy2140; -yy2144: - yych = *++p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2143; -yy2145: - p = marker; - goto yy2140; -yy2146: - yych = *++p; - if (yych <= 0x9F) goto yy2145; - if (yych <= 0xBF) goto yy2144; - goto yy2145; -yy2147: - yych = *++p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2144; - goto yy2145; -yy2148: - yych = *++p; - if (yych <= 0x8F) goto yy2145; - if (yych <= 0xBF) goto yy2147; - goto yy2145; -yy2149: - yych = *++p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2147; - goto yy2145; -yy2150: - yych = *++p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0x8F) goto yy2147; - goto yy2145; -yy2151: - yych = *++p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0x9F) goto yy2144; - goto yy2145; -yy2152: - yych = *++p; - if (yybm[0+yych] & 16) { - goto yy2153; - } - goto yy2145; -yy2153: - marker = p + 1; - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy2155; - } - if (yych <= 0xE0) { - if (yych <= '~') { - if (yych <= 0x00) goto yy2145; - if (yych <= '\r') goto yy2164; - goto yy2153; - } else { - if (yych <= 0xC1) goto yy2145; - if (yych <= 0xDF) goto yy2157; - goto yy2158; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2163; - goto yy2159; - } else { - if (yych <= 0xF0) goto yy2160; - if (yych <= 0xF3) goto yy2161; - if (yych <= 0xF4) goto yy2162; - goto yy2145; - } - } -yy2155: - ++p; - yych = *p; - if (yybm[0+yych] & 32) { - goto yy2155; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy2145; - if (yych <= '\r') goto yy2164; - goto yy2145; - } else { - if (yych <= 0xDF) goto yy2157; - if (yych <= 0xE0) goto yy2158; - goto yy2159; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy2163; - if (yych <= 0xEF) goto yy2159; - goto yy2160; - } else { - if (yych <= 0xF3) goto yy2161; - if (yych <= 0xF4) goto yy2162; - goto yy2145; - } - } -yy2157: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2155; - goto yy2145; -yy2158: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy2145; - if (yych <= 0xBF) goto yy2157; - goto yy2145; -yy2159: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2157; - goto yy2145; -yy2160: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy2145; - if (yych <= 0xBF) goto yy2159; - goto yy2145; -yy2161: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2159; - goto yy2145; -yy2162: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0x8F) goto yy2159; - goto yy2145; -yy2163: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0x9F) goto yy2157; - goto yy2145; -yy2164: - ++p; - p = marker; - { return (bufsize_t)(p - start); } -yy2166: - yych = *++p; - if (yybm[0+yych] & 64) { - goto yy2167; - } - goto yy2145; -yy2167: - marker = p + 1; - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2169; - } - if (yych <= 0xE0) { - if (yych <= '`') { - if (yych <= 0x00) goto yy2145; - if (yych <= '\r') goto yy2178; - goto yy2167; - } else { - if (yych <= 0xC1) goto yy2145; - if (yych <= 0xDF) goto yy2171; - goto yy2172; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) goto yy2177; - goto yy2173; - } else { - if (yych <= 0xF0) goto yy2174; - if (yych <= 0xF3) goto yy2175; - if (yych <= 0xF4) goto yy2176; - goto yy2145; - } - } -yy2169: - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2169; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) goto yy2145; - if (yych <= '\r') goto yy2178; - goto yy2145; - } else { - if (yych <= 0xDF) goto yy2171; - if (yych <= 0xE0) goto yy2172; - goto yy2173; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) goto yy2177; - if (yych <= 0xEF) goto yy2173; - goto yy2174; - } else { - if (yych <= 0xF3) goto yy2175; - if (yych <= 0xF4) goto yy2176; - goto yy2145; - } - } -yy2171: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2169; - goto yy2145; -yy2172: - ++p; - yych = *p; - if (yych <= 0x9F) goto yy2145; - if (yych <= 0xBF) goto yy2171; - goto yy2145; -yy2173: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2171; - goto yy2145; -yy2174: - ++p; - yych = *p; - if (yych <= 0x8F) goto yy2145; - if (yych <= 0xBF) goto yy2173; - goto yy2145; -yy2175: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0xBF) goto yy2173; - goto yy2145; -yy2176: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0x8F) goto yy2173; - goto yy2145; -yy2177: - ++p; - yych = *p; - if (yych <= 0x7F) goto yy2145; - if (yych <= 0x9F) goto yy2171; - goto yy2145; -yy2178: - ++p; - p = marker; - { return (bufsize_t)(p - start); } -} - + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 0, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 144, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { + if (yych <= '`') { + if (yych == '\n') + goto yy2140; + if (yych <= '_') + goto yy2143; + goto yy2141; + } else { + if (yych == '~') + goto yy2142; + if (yych <= 0x7F) + goto yy2143; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy2144; + if (yych <= 0xE0) + goto yy2146; + if (yych <= 0xEC) + goto yy2147; + goto yy2151; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy2147; + goto yy2148; + } else { + if (yych <= 0xF3) + goto yy2149; + if (yych <= 0xF4) + goto yy2150; + } + } + } + yy2140 : { return 0; } + yy2141: + yych = *(marker = ++p); + if (yych == '`') + goto yy2166; + goto yy2140; + yy2142: + yych = *(marker = ++p); + if (yych == '~') + goto yy2152; + goto yy2140; + yy2143: + yych = *++p; + goto yy2140; + yy2144: + yych = *++p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2143; + yy2145: + p = marker; + goto yy2140; + yy2146: + yych = *++p; + if (yych <= 0x9F) + goto yy2145; + if (yych <= 0xBF) + goto yy2144; + goto yy2145; + yy2147: + yych = *++p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2144; + goto yy2145; + yy2148: + yych = *++p; + if (yych <= 0x8F) + goto yy2145; + if (yych <= 0xBF) + goto yy2147; + goto yy2145; + yy2149: + yych = *++p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2147; + goto yy2145; + yy2150: + yych = *++p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0x8F) + goto yy2147; + goto yy2145; + yy2151: + yych = *++p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0x9F) + goto yy2144; + goto yy2145; + yy2152: + yych = *++p; + if (yybm[0 + yych] & 16) { + goto yy2153; + } + goto yy2145; + yy2153: + marker = p + 1; + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy2155; + } + if (yych <= 0xE0) { + if (yych <= '~') { + if (yych <= 0x00) + goto yy2145; + if (yych <= '\r') + goto yy2164; + goto yy2153; + } else { + if (yych <= 0xC1) + goto yy2145; + if (yych <= 0xDF) + goto yy2157; + goto yy2158; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2163; + goto yy2159; + } else { + if (yych <= 0xF0) + goto yy2160; + if (yych <= 0xF3) + goto yy2161; + if (yych <= 0xF4) + goto yy2162; + goto yy2145; + } + } + yy2155: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy2155; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy2145; + if (yych <= '\r') + goto yy2164; + goto yy2145; + } else { + if (yych <= 0xDF) + goto yy2157; + if (yych <= 0xE0) + goto yy2158; + goto yy2159; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy2163; + if (yych <= 0xEF) + goto yy2159; + goto yy2160; + } else { + if (yych <= 0xF3) + goto yy2161; + if (yych <= 0xF4) + goto yy2162; + goto yy2145; + } + } + yy2157: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2155; + goto yy2145; + yy2158: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy2145; + if (yych <= 0xBF) + goto yy2157; + goto yy2145; + yy2159: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2157; + goto yy2145; + yy2160: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy2145; + if (yych <= 0xBF) + goto yy2159; + goto yy2145; + yy2161: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2159; + goto yy2145; + yy2162: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0x8F) + goto yy2159; + goto yy2145; + yy2163: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0x9F) + goto yy2157; + goto yy2145; + yy2164: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy2166: + yych = *++p; + if (yybm[0 + yych] & 64) { + goto yy2167; + } + goto yy2145; + yy2167: + marker = p + 1; + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2169; + } + if (yych <= 0xE0) { + if (yych <= '`') { + if (yych <= 0x00) + goto yy2145; + if (yych <= '\r') + goto yy2178; + goto yy2167; + } else { + if (yych <= 0xC1) + goto yy2145; + if (yych <= 0xDF) + goto yy2171; + goto yy2172; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy2177; + goto yy2173; + } else { + if (yych <= 0xF0) + goto yy2174; + if (yych <= 0xF3) + goto yy2175; + if (yych <= 0xF4) + goto yy2176; + goto yy2145; + } + } + yy2169: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2169; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy2145; + if (yych <= '\r') + goto yy2178; + goto yy2145; + } else { + if (yych <= 0xDF) + goto yy2171; + if (yych <= 0xE0) + goto yy2172; + goto yy2173; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy2177; + if (yych <= 0xEF) + goto yy2173; + goto yy2174; + } else { + if (yych <= 0xF3) + goto yy2175; + if (yych <= 0xF4) + goto yy2176; + goto yy2145; + } + } + yy2171: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2169; + goto yy2145; + yy2172: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy2145; + if (yych <= 0xBF) + goto yy2171; + goto yy2145; + yy2173: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2171; + goto yy2145; + yy2174: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy2145; + if (yych <= 0xBF) + goto yy2173; + goto yy2145; + yy2175: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0xBF) + goto yy2173; + goto yy2145; + yy2176: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0x8F) + goto yy2173; + goto yy2145; + yy2177: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy2145; + if (yych <= 0x9F) + goto yy2171; + goto yy2145; + yy2178: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + } } // Scan a closing code fence with length at least len. -bufsize_t _scan_close_code_fence(const unsigned char *p) -{ +bufsize_t _scan_close_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - static const unsigned char yybm[] = { - 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, - 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, - 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 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 <= 0xC1) { - if (yych <= '`') { - if (yych == '\n') goto yy2182; - if (yych <= '_') goto yy2185; - goto yy2183; - } else { - if (yych == '~') goto yy2184; - if (yych <= 0x7F) goto yy2185; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) goto yy2186; - if (yych <= 0xE0) goto yy2188; - if (yych <= 0xEC) goto yy2189; - goto yy2193; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) goto yy2189; - goto yy2190; - } else { - if (yych <= 0xF3) goto yy2191; - if (yych <= 0xF4) goto yy2192; - } - } - } -yy2182: - { return 0; } -yy2183: - yych = *(marker = ++p); - if (yych == '`') goto yy2201; - goto yy2182; -yy2184: - yych = *(marker = ++p); - if (yych == '~') goto yy2194; - goto yy2182; -yy2185: - yych = *++p; - goto yy2182; -yy2186: - yych = *++p; - if (yych <= 0x7F) goto yy2187; - if (yych <= 0xBF) goto yy2185; -yy2187: - p = marker; - goto yy2182; -yy2188: - yych = *++p; - if (yych <= 0x9F) goto yy2187; - if (yych <= 0xBF) goto yy2186; - goto yy2187; -yy2189: - yych = *++p; - if (yych <= 0x7F) goto yy2187; - if (yych <= 0xBF) goto yy2186; - goto yy2187; -yy2190: - yych = *++p; - if (yych <= 0x8F) goto yy2187; - if (yych <= 0xBF) goto yy2189; - goto yy2187; -yy2191: - yych = *++p; - if (yych <= 0x7F) goto yy2187; - if (yych <= 0xBF) goto yy2189; - goto yy2187; -yy2192: - yych = *++p; - if (yych <= 0x7F) goto yy2187; - if (yych <= 0x8F) goto yy2189; - goto yy2187; -yy2193: - yych = *++p; - if (yych <= 0x7F) goto yy2187; - if (yych <= 0x9F) goto yy2186; - goto yy2187; -yy2194: - yych = *++p; - if (yybm[0+yych] & 32) { - goto yy2195; - } - goto yy2187; -yy2195: - marker = p + 1; - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy2197; - } - if (yych <= '\f') { - if (yych <= 0x08) goto yy2187; - if (yych <= '\n') goto yy2199; - goto yy2187; - } else { - if (yych <= '\r') goto yy2199; - if (yych == '~') goto yy2195; - goto yy2187; - } -yy2197: - ++p; - yych = *p; - if (yybm[0+yych] & 64) { - goto yy2197; - } - if (yych <= 0x08) goto yy2187; - if (yych <= '\n') goto yy2199; - if (yych != '\r') goto yy2187; -yy2199: - ++p; - p = marker; - { return (bufsize_t)(p - start); } -yy2201: - yych = *++p; - if (yybm[0+yych] & 128) { - goto yy2202; - } - goto yy2187; -yy2202: - marker = p + 1; - ++p; - yych = *p; - if (yybm[0+yych] & 128) { - goto yy2202; - } - if (yych <= '\f') { - if (yych <= 0x08) goto yy2187; - if (yych <= '\t') goto yy2204; - if (yych <= '\n') goto yy2206; - goto yy2187; - } else { - if (yych <= '\r') goto yy2206; - if (yych != ' ') goto yy2187; - } -yy2204: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych <= 0x08) goto yy2187; - if (yych <= '\t') goto yy2204; - if (yych >= '\v') goto yy2187; - } else { - if (yych <= '\r') goto yy2206; - if (yych == ' ') goto yy2204; - goto yy2187; - } -yy2206: - ++p; - p = marker; - { return (bufsize_t)(p - start); } -} - + { + unsigned char yych; + static const unsigned char yybm[] = { + 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, 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, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { + if (yych <= '`') { + if (yych == '\n') + goto yy2182; + if (yych <= '_') + goto yy2185; + goto yy2183; + } else { + if (yych == '~') + goto yy2184; + if (yych <= 0x7F) + goto yy2185; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy2186; + if (yych <= 0xE0) + goto yy2188; + if (yych <= 0xEC) + goto yy2189; + goto yy2193; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy2189; + goto yy2190; + } else { + if (yych <= 0xF3) + goto yy2191; + if (yych <= 0xF4) + goto yy2192; + } + } + } + yy2182 : { return 0; } + yy2183: + yych = *(marker = ++p); + if (yych == '`') + goto yy2201; + goto yy2182; + yy2184: + yych = *(marker = ++p); + if (yych == '~') + goto yy2194; + goto yy2182; + yy2185: + yych = *++p; + goto yy2182; + yy2186: + yych = *++p; + if (yych <= 0x7F) + goto yy2187; + if (yych <= 0xBF) + goto yy2185; + yy2187: + p = marker; + goto yy2182; + yy2188: + yych = *++p; + if (yych <= 0x9F) + goto yy2187; + if (yych <= 0xBF) + goto yy2186; + goto yy2187; + yy2189: + yych = *++p; + if (yych <= 0x7F) + goto yy2187; + if (yych <= 0xBF) + goto yy2186; + goto yy2187; + yy2190: + yych = *++p; + if (yych <= 0x8F) + goto yy2187; + if (yych <= 0xBF) + goto yy2189; + goto yy2187; + yy2191: + yych = *++p; + if (yych <= 0x7F) + goto yy2187; + if (yych <= 0xBF) + goto yy2189; + goto yy2187; + yy2192: + yych = *++p; + if (yych <= 0x7F) + goto yy2187; + if (yych <= 0x8F) + goto yy2189; + goto yy2187; + yy2193: + yych = *++p; + if (yych <= 0x7F) + goto yy2187; + if (yych <= 0x9F) + goto yy2186; + goto yy2187; + yy2194: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy2195; + } + goto yy2187; + yy2195: + marker = p + 1; + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy2197; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy2187; + if (yych <= '\n') + goto yy2199; + goto yy2187; + } else { + if (yych <= '\r') + goto yy2199; + if (yych == '~') + goto yy2195; + goto yy2187; + } + yy2197: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy2197; + } + if (yych <= 0x08) + goto yy2187; + if (yych <= '\n') + goto yy2199; + if (yych != '\r') + goto yy2187; + yy2199: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy2201: + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy2202; + } + goto yy2187; + yy2202: + marker = p + 1; + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy2202; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy2187; + if (yych <= '\t') + goto yy2204; + if (yych <= '\n') + goto yy2206; + goto yy2187; + } else { + if (yych <= '\r') + goto yy2206; + if (yych != ' ') + goto yy2187; + } + yy2204: + ++p; + yych = *p; + if (yych <= '\f') { + if (yych <= 0x08) + goto yy2187; + if (yych <= '\t') + goto yy2204; + if (yych >= '\v') + goto yy2187; + } else { + if (yych <= '\r') + goto yy2206; + if (yych == ' ') + goto yy2204; + goto yy2187; + } + yy2206: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + } } // Scans an entity. // Returns number of chars matched. -bufsize_t _scan_entity(const unsigned char *p) -{ +bufsize_t _scan_entity(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= '%') { - if (yych != '\n') goto yy2212; - } else { - if (yych <= '&') goto yy2211; - if (yych <= 0x7F) goto yy2212; - if (yych >= 0xC2) goto yy2213; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy2215; - if (yych == 0xED) goto yy2220; - goto yy2216; - } else { - if (yych <= 0xF0) goto yy2217; - if (yych <= 0xF3) goto yy2218; - if (yych <= 0xF4) goto yy2219; - } - } -yy2210: - { return 0; } -yy2211: - yych = *(marker = ++p); - if (yych <= '@') { - if (yych == '#') goto yy2221; - goto yy2210; - } else { - if (yych <= 'Z') goto yy2222; - if (yych <= '`') goto yy2210; - if (yych <= 'z') goto yy2222; - goto yy2210; - } -yy2212: - yych = *++p; - goto yy2210; -yy2213: - yych = *++p; - if (yych <= 0x7F) goto yy2214; - if (yych <= 0xBF) goto yy2212; -yy2214: - p = marker; - goto yy2210; -yy2215: - yych = *++p; - if (yych <= 0x9F) goto yy2214; - if (yych <= 0xBF) goto yy2213; - goto yy2214; -yy2216: - yych = *++p; - if (yych <= 0x7F) goto yy2214; - if (yych <= 0xBF) goto yy2213; - goto yy2214; -yy2217: - yych = *++p; - if (yych <= 0x8F) goto yy2214; - if (yych <= 0xBF) goto yy2216; - goto yy2214; -yy2218: - yych = *++p; - if (yych <= 0x7F) goto yy2214; - if (yych <= 0xBF) goto yy2216; - goto yy2214; -yy2219: - yych = *++p; - if (yych <= 0x7F) goto yy2214; - if (yych <= 0x8F) goto yy2216; - goto yy2214; -yy2220: - yych = *++p; - if (yych <= 0x7F) goto yy2214; - if (yych <= 0x9F) goto yy2213; - goto yy2214; -yy2221: - yych = *++p; - if (yych <= 'W') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2257; - goto yy2214; - } else { - if (yych <= 'X') goto yy2256; - if (yych == 'x') goto yy2256; - goto yy2214; - } -yy2222: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') goto yy2214; - if (yych >= ':') goto yy2214; - } else { - if (yych <= 'Z') goto yy2223; - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } -yy2223: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2226; - if (yych <= ':') goto yy2214; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - goto yy2226; - } else { - if (yych <= '`') goto yy2214; - if (yych <= 'z') goto yy2226; - goto yy2214; - } - } -yy2224: - ++p; - { return (bufsize_t)(p - start); } -yy2226: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2227; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2227: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2228; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2228: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2229; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2229: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2230; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2230: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2231; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2231: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2232; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2232: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2233; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2233: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2234; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2234: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2235; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2235: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2236; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2236: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2237; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2237: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2238; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2238: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2239; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2239: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2240; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2240: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2241; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2241: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2242; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2242: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2243; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2243: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2244; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2244: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2245; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2245: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2246; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2246: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2247; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2247: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2248; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2248: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2249; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2249: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2250; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2250: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2251; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2251: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2252; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2252: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2253; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2253: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2254; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2254: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2255; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= '{') goto yy2214; - } - } -yy2255: - yych = *++p; - if (yych == ';') goto yy2224; - goto yy2214; -yy2256: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2264; - goto yy2214; - } else { - if (yych <= 'F') goto yy2264; - if (yych <= '`') goto yy2214; - if (yych <= 'f') goto yy2264; - goto yy2214; - } -yy2257: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2258; - if (yych == ';') goto yy2224; - goto yy2214; -yy2258: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2259; - if (yych == ';') goto yy2224; - goto yy2214; -yy2259: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2260; - if (yych == ';') goto yy2224; - goto yy2214; -yy2260: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2261; - if (yych == ';') goto yy2224; - goto yy2214; -yy2261: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2262; - if (yych == ';') goto yy2224; - goto yy2214; -yy2262: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2263; - if (yych == ';') goto yy2224; - goto yy2214; -yy2263: - yych = *++p; - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2255; - if (yych == ';') goto yy2224; - goto yy2214; -yy2264: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2265; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= 'g') goto yy2214; - } - } -yy2265: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2266; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= 'g') goto yy2214; - } - } -yy2266: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2267; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= 'g') goto yy2214; - } - } -yy2267: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2268; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= 'g') goto yy2214; - } - } -yy2268: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2269; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= 'g') goto yy2214; - } - } -yy2269: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2270; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - } else { - if (yych <= '`') goto yy2214; - if (yych >= 'g') goto yy2214; - } - } -yy2270: - ++p; - if ((yych = *p) <= ';') { - if (yych <= '/') goto yy2214; - if (yych <= '9') goto yy2255; - if (yych <= ':') goto yy2214; - goto yy2224; - } else { - if (yych <= 'F') { - if (yych <= '@') goto yy2214; - goto yy2255; - } else { - if (yych <= '`') goto yy2214; - if (yych <= 'f') goto yy2255; - goto yy2214; - } - } -} - + { + unsigned char yych; + yych = *(marker = p); + if (yych <= 0xDF) { + if (yych <= '%') { + if (yych != '\n') + goto yy2212; + } else { + if (yych <= '&') + goto yy2211; + if (yych <= 0x7F) + goto yy2212; + if (yych >= 0xC2) + goto yy2213; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy2215; + if (yych == 0xED) + goto yy2220; + goto yy2216; + } else { + if (yych <= 0xF0) + goto yy2217; + if (yych <= 0xF3) + goto yy2218; + if (yych <= 0xF4) + goto yy2219; + } + } + yy2210 : { return 0; } + yy2211: + yych = *(marker = ++p); + if (yych <= '@') { + if (yych == '#') + goto yy2221; + goto yy2210; + } else { + if (yych <= 'Z') + goto yy2222; + if (yych <= '`') + goto yy2210; + if (yych <= 'z') + goto yy2222; + goto yy2210; + } + yy2212: + yych = *++p; + goto yy2210; + yy2213: + yych = *++p; + if (yych <= 0x7F) + goto yy2214; + if (yych <= 0xBF) + goto yy2212; + yy2214: + p = marker; + goto yy2210; + yy2215: + yych = *++p; + if (yych <= 0x9F) + goto yy2214; + if (yych <= 0xBF) + goto yy2213; + goto yy2214; + yy2216: + yych = *++p; + if (yych <= 0x7F) + goto yy2214; + if (yych <= 0xBF) + goto yy2213; + goto yy2214; + yy2217: + yych = *++p; + if (yych <= 0x8F) + goto yy2214; + if (yych <= 0xBF) + goto yy2216; + goto yy2214; + yy2218: + yych = *++p; + if (yych <= 0x7F) + goto yy2214; + if (yych <= 0xBF) + goto yy2216; + goto yy2214; + yy2219: + yych = *++p; + if (yych <= 0x7F) + goto yy2214; + if (yych <= 0x8F) + goto yy2216; + goto yy2214; + yy2220: + yych = *++p; + if (yych <= 0x7F) + goto yy2214; + if (yych <= 0x9F) + goto yy2213; + goto yy2214; + yy2221: + yych = *++p; + if (yych <= 'W') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2257; + goto yy2214; + } else { + if (yych <= 'X') + goto yy2256; + if (yych == 'x') + goto yy2256; + goto yy2214; + } + yy2222: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy2214; + if (yych >= ':') + goto yy2214; + } else { + if (yych <= 'Z') + goto yy2223; + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + yy2223: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2226; + if (yych <= ':') + goto yy2214; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + goto yy2226; + } else { + if (yych <= '`') + goto yy2214; + if (yych <= 'z') + goto yy2226; + goto yy2214; + } + } + yy2224: + ++p; + { return (bufsize_t)(p - start); } + yy2226: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2227; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2227: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2228; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2228: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2229; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2229: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2230; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2230: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2231; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2231: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2232; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2232: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2233; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2233: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2234; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2234: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2235; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2235: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2236; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2236: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2237; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2237: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2238; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2238: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2239; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2239: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2240; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2240: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2241; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2241: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2242; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2242: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2243; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2243: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2244; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2244: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2245; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2245: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2246; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2246: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2247; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2247: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2248; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2248: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2249; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2249: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2250; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2250: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2251; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2251: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2252; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2252: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2253; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2253: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2254; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2254: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2255; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= '{') + goto yy2214; + } + } + yy2255: + yych = *++p; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2256: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2264; + goto yy2214; + } else { + if (yych <= 'F') + goto yy2264; + if (yych <= '`') + goto yy2214; + if (yych <= 'f') + goto yy2264; + goto yy2214; + } + yy2257: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2258; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2258: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2259; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2259: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2260; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2260: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2261; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2261: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2262; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2262: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2263; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2263: + yych = *++p; + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2255; + if (yych == ';') + goto yy2224; + goto yy2214; + yy2264: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2265; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= 'g') + goto yy2214; + } + } + yy2265: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2266; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= 'g') + goto yy2214; + } + } + yy2266: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2267; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= 'g') + goto yy2214; + } + } + yy2267: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2268; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= 'g') + goto yy2214; + } + } + yy2268: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2269; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= 'g') + goto yy2214; + } + } + yy2269: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2270; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + } else { + if (yych <= '`') + goto yy2214; + if (yych >= 'g') + goto yy2214; + } + } + yy2270: + ++p; + if ((yych = *p) <= ';') { + if (yych <= '/') + goto yy2214; + if (yych <= '9') + goto yy2255; + if (yych <= ':') + goto yy2214; + goto yy2224; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy2214; + goto yy2255; + } else { + if (yych <= '`') + goto yy2214; + if (yych <= 'f') + goto yy2255; + goto yy2214; + } + } + } } // Returns positive value if a URL begins in a way that is potentially // dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0. -bufsize_t _scan_dangerous_url(const unsigned char *p) -{ +bufsize_t _scan_dangerous_url(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; -{ - unsigned char yych; - unsigned int yyaccept = 0; - yych = *(marker = p); - if (yych <= 'f') { - if (yych <= 'I') { - if (yych <= 'C') { - if (yych != '\n') goto yy2278; - } else { - if (yych <= 'D') goto yy2274; - if (yych == 'F') goto yy2277; - goto yy2278; - } - } else { - if (yych <= 'V') { - if (yych <= 'J') goto yy2275; - if (yych <= 'U') goto yy2278; - goto yy2276; - } else { - if (yych == 'd') goto yy2274; - if (yych <= 'e') goto yy2278; - goto yy2277; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= 'u') { - if (yych == 'j') goto yy2275; - goto yy2278; - } else { - if (yych <= 'v') goto yy2276; - if (yych <= 0x7F) goto yy2278; - if (yych >= 0xC2) goto yy2279; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) goto yy2281; - if (yych == 0xED) goto yy2286; - goto yy2282; - } else { - if (yych <= 0xF0) goto yy2283; - if (yych <= 0xF3) goto yy2284; - if (yych <= 0xF4) goto yy2285; - } - } - } -yy2273: - { return 0; } -yy2274: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'A') goto yy2308; - if (yych == 'a') goto yy2308; - goto yy2273; -yy2275: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'A') goto yy2299; - if (yych == 'a') goto yy2299; - goto yy2273; -yy2276: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'B') goto yy2292; - if (yych == 'b') goto yy2292; - goto yy2273; -yy2277: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'I') goto yy2287; - if (yych == 'i') goto yy2287; - goto yy2273; -yy2278: - yych = *++p; - goto yy2273; -yy2279: - yych = *++p; - if (yych <= 0x7F) goto yy2280; - if (yych <= 0xBF) goto yy2278; -yy2280: - p = marker; - if (yyaccept == 0) { - goto yy2273; - } else { - goto yy2291; - } -yy2281: - yych = *++p; - if (yych <= 0x9F) goto yy2280; - if (yych <= 0xBF) goto yy2279; - goto yy2280; -yy2282: - yych = *++p; - if (yych <= 0x7F) goto yy2280; - if (yych <= 0xBF) goto yy2279; - goto yy2280; -yy2283: - yych = *++p; - if (yych <= 0x8F) goto yy2280; - if (yych <= 0xBF) goto yy2282; - goto yy2280; -yy2284: - yych = *++p; - if (yych <= 0x7F) goto yy2280; - if (yych <= 0xBF) goto yy2282; - goto yy2280; -yy2285: - yych = *++p; - if (yych <= 0x7F) goto yy2280; - if (yych <= 0x8F) goto yy2282; - goto yy2280; -yy2286: - yych = *++p; - if (yych <= 0x7F) goto yy2280; - if (yych <= 0x9F) goto yy2279; - goto yy2280; -yy2287: - yych = *++p; - if (yych == 'L') goto yy2288; - if (yych != 'l') goto yy2280; -yy2288: - yych = *++p; - if (yych == 'E') goto yy2289; - if (yych != 'e') goto yy2280; -yy2289: - yych = *++p; - if (yych != ':') goto yy2280; -yy2290: - ++p; -yy2291: - { return (bufsize_t)(p - start); } -yy2292: - yych = *++p; - if (yych == 'S') goto yy2293; - if (yych != 's') goto yy2280; -yy2293: - yych = *++p; - if (yych == 'C') goto yy2294; - if (yych != 'c') goto yy2280; -yy2294: - yych = *++p; - if (yych == 'R') goto yy2295; - if (yych != 'r') goto yy2280; -yy2295: - yych = *++p; - if (yych == 'I') goto yy2296; - if (yych != 'i') goto yy2280; -yy2296: - yych = *++p; - if (yych == 'P') goto yy2297; - if (yych != 'p') goto yy2280; -yy2297: - yych = *++p; - if (yych == 'T') goto yy2298; - if (yych != 't') goto yy2280; -yy2298: - yych = *++p; - if (yych == ':') goto yy2290; - goto yy2280; -yy2299: - yych = *++p; - if (yych == 'V') goto yy2300; - if (yych != 'v') goto yy2280; -yy2300: - yych = *++p; - if (yych == 'A') goto yy2301; - if (yych != 'a') goto yy2280; -yy2301: - yych = *++p; - if (yych == 'S') goto yy2302; - if (yych != 's') goto yy2280; -yy2302: - yych = *++p; - if (yych == 'C') goto yy2303; - if (yych != 'c') goto yy2280; -yy2303: - yych = *++p; - if (yych == 'R') goto yy2304; - if (yych != 'r') goto yy2280; -yy2304: - yych = *++p; - if (yych == 'I') goto yy2305; - if (yych != 'i') goto yy2280; -yy2305: - yych = *++p; - if (yych == 'P') goto yy2306; - if (yych != 'p') goto yy2280; -yy2306: - yych = *++p; - if (yych == 'T') goto yy2307; - if (yych != 't') goto yy2280; -yy2307: - yych = *++p; - if (yych == ':') goto yy2290; - goto yy2280; -yy2308: - yych = *++p; - if (yych == 'T') goto yy2309; - if (yych != 't') goto yy2280; -yy2309: - yych = *++p; - if (yych == 'A') goto yy2310; - if (yych != 'a') goto yy2280; -yy2310: - yych = *++p; - if (yych != ':') goto yy2280; - yyaccept = 1; - yych = *(marker = ++p); - if (yych == 'I') goto yy2312; - if (yych != 'i') goto yy2291; -yy2312: - yych = *++p; - if (yych == 'M') goto yy2313; - if (yych != 'm') goto yy2280; -yy2313: - yych = *++p; - if (yych == 'A') goto yy2314; - if (yych != 'a') goto yy2280; -yy2314: - yych = *++p; - if (yych == 'G') goto yy2315; - if (yych != 'g') goto yy2280; -yy2315: - yych = *++p; - if (yych == 'E') goto yy2316; - if (yych != 'e') goto yy2280; -yy2316: - yych = *++p; - if (yych != '/') goto yy2280; - yych = *++p; - if (yych <= 'W') { - if (yych <= 'J') { - if (yych == 'G') goto yy2319; - if (yych <= 'I') goto yy2280; - goto yy2320; - } else { - if (yych == 'P') goto yy2318; - if (yych <= 'V') goto yy2280; - goto yy2321; - } - } else { - if (yych <= 'j') { - if (yych == 'g') goto yy2319; - if (yych <= 'i') goto yy2280; - goto yy2320; - } else { - if (yych <= 'p') { - if (yych <= 'o') goto yy2280; - } else { - if (yych == 'w') goto yy2321; - goto yy2280; - } - } - } -yy2318: - yych = *++p; - if (yych == 'N') goto yy2329; - if (yych == 'n') goto yy2329; - goto yy2280; -yy2319: - yych = *++p; - if (yych == 'I') goto yy2328; - if (yych == 'i') goto yy2328; - goto yy2280; -yy2320: - yych = *++p; - if (yych == 'P') goto yy2326; - if (yych == 'p') goto yy2326; - goto yy2280; -yy2321: - yych = *++p; - if (yych == 'E') goto yy2322; - if (yych != 'e') goto yy2280; -yy2322: - yych = *++p; - if (yych == 'B') goto yy2323; - if (yych != 'b') goto yy2280; -yy2323: - yych = *++p; - if (yych == 'P') goto yy2324; - if (yych != 'p') goto yy2280; -yy2324: - ++p; - { return 0; } -yy2326: - yych = *++p; - if (yych == 'E') goto yy2327; - if (yych != 'e') goto yy2280; -yy2327: - yych = *++p; - if (yych == 'G') goto yy2324; - if (yych == 'g') goto yy2324; - goto yy2280; -yy2328: - yych = *++p; - if (yych == 'F') goto yy2324; - if (yych == 'f') goto yy2324; - goto yy2280; -yy2329: - ++p; - if ((yych = *p) == 'G') goto yy2324; - if (yych == 'g') goto yy2324; - goto yy2280; + { + unsigned char yych; + unsigned int yyaccept = 0; + yych = *(marker = p); + if (yych <= 'f') { + if (yych <= 'I') { + if (yych <= 'C') { + if (yych != '\n') + goto yy2278; + } else { + if (yych <= 'D') + goto yy2274; + if (yych == 'F') + goto yy2277; + goto yy2278; + } + } else { + if (yych <= 'V') { + if (yych <= 'J') + goto yy2275; + if (yych <= 'U') + goto yy2278; + goto yy2276; + } else { + if (yych == 'd') + goto yy2274; + if (yych <= 'e') + goto yy2278; + goto yy2277; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= 'u') { + if (yych == 'j') + goto yy2275; + goto yy2278; + } else { + if (yych <= 'v') + goto yy2276; + if (yych <= 0x7F) + goto yy2278; + if (yych >= 0xC2) + goto yy2279; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy2281; + if (yych == 0xED) + goto yy2286; + goto yy2282; + } else { + if (yych <= 0xF0) + goto yy2283; + if (yych <= 0xF3) + goto yy2284; + if (yych <= 0xF4) + goto yy2285; + } + } + } + yy2273 : { return 0; } + yy2274: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'A') + goto yy2308; + if (yych == 'a') + goto yy2308; + goto yy2273; + yy2275: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'A') + goto yy2299; + if (yych == 'a') + goto yy2299; + goto yy2273; + yy2276: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'B') + goto yy2292; + if (yych == 'b') + goto yy2292; + goto yy2273; + yy2277: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'I') + goto yy2287; + if (yych == 'i') + goto yy2287; + goto yy2273; + yy2278: + yych = *++p; + goto yy2273; + yy2279: + yych = *++p; + if (yych <= 0x7F) + goto yy2280; + if (yych <= 0xBF) + goto yy2278; + yy2280: + p = marker; + if (yyaccept == 0) { + goto yy2273; + } else { + goto yy2291; + } + yy2281: + yych = *++p; + if (yych <= 0x9F) + goto yy2280; + if (yych <= 0xBF) + goto yy2279; + goto yy2280; + yy2282: + yych = *++p; + if (yych <= 0x7F) + goto yy2280; + if (yych <= 0xBF) + goto yy2279; + goto yy2280; + yy2283: + yych = *++p; + if (yych <= 0x8F) + goto yy2280; + if (yych <= 0xBF) + goto yy2282; + goto yy2280; + yy2284: + yych = *++p; + if (yych <= 0x7F) + goto yy2280; + if (yych <= 0xBF) + goto yy2282; + goto yy2280; + yy2285: + yych = *++p; + if (yych <= 0x7F) + goto yy2280; + if (yych <= 0x8F) + goto yy2282; + goto yy2280; + yy2286: + yych = *++p; + if (yych <= 0x7F) + goto yy2280; + if (yych <= 0x9F) + goto yy2279; + goto yy2280; + yy2287: + yych = *++p; + if (yych == 'L') + goto yy2288; + if (yych != 'l') + goto yy2280; + yy2288: + yych = *++p; + if (yych == 'E') + goto yy2289; + if (yych != 'e') + goto yy2280; + yy2289: + yych = *++p; + if (yych != ':') + goto yy2280; + yy2290: + ++p; + yy2291 : { return (bufsize_t)(p - start); } + yy2292: + yych = *++p; + if (yych == 'S') + goto yy2293; + if (yych != 's') + goto yy2280; + yy2293: + yych = *++p; + if (yych == 'C') + goto yy2294; + if (yych != 'c') + goto yy2280; + yy2294: + yych = *++p; + if (yych == 'R') + goto yy2295; + if (yych != 'r') + goto yy2280; + yy2295: + yych = *++p; + if (yych == 'I') + goto yy2296; + if (yych != 'i') + goto yy2280; + yy2296: + yych = *++p; + if (yych == 'P') + goto yy2297; + if (yych != 'p') + goto yy2280; + yy2297: + yych = *++p; + if (yych == 'T') + goto yy2298; + if (yych != 't') + goto yy2280; + yy2298: + yych = *++p; + if (yych == ':') + goto yy2290; + goto yy2280; + yy2299: + yych = *++p; + if (yych == 'V') + goto yy2300; + if (yych != 'v') + goto yy2280; + yy2300: + yych = *++p; + if (yych == 'A') + goto yy2301; + if (yych != 'a') + goto yy2280; + yy2301: + yych = *++p; + if (yych == 'S') + goto yy2302; + if (yych != 's') + goto yy2280; + yy2302: + yych = *++p; + if (yych == 'C') + goto yy2303; + if (yych != 'c') + goto yy2280; + yy2303: + yych = *++p; + if (yych == 'R') + goto yy2304; + if (yych != 'r') + goto yy2280; + yy2304: + yych = *++p; + if (yych == 'I') + goto yy2305; + if (yych != 'i') + goto yy2280; + yy2305: + yych = *++p; + if (yych == 'P') + goto yy2306; + if (yych != 'p') + goto yy2280; + yy2306: + yych = *++p; + if (yych == 'T') + goto yy2307; + if (yych != 't') + goto yy2280; + yy2307: + yych = *++p; + if (yych == ':') + goto yy2290; + goto yy2280; + yy2308: + yych = *++p; + if (yych == 'T') + goto yy2309; + if (yych != 't') + goto yy2280; + yy2309: + yych = *++p; + if (yych == 'A') + goto yy2310; + if (yych != 'a') + goto yy2280; + yy2310: + yych = *++p; + if (yych != ':') + goto yy2280; + yyaccept = 1; + yych = *(marker = ++p); + if (yych == 'I') + goto yy2312; + if (yych != 'i') + goto yy2291; + yy2312: + yych = *++p; + if (yych == 'M') + goto yy2313; + if (yych != 'm') + goto yy2280; + yy2313: + yych = *++p; + if (yych == 'A') + goto yy2314; + if (yych != 'a') + goto yy2280; + yy2314: + yych = *++p; + if (yych == 'G') + goto yy2315; + if (yych != 'g') + goto yy2280; + yy2315: + yych = *++p; + if (yych == 'E') + goto yy2316; + if (yych != 'e') + goto yy2280; + yy2316: + yych = *++p; + if (yych != '/') + goto yy2280; + yych = *++p; + if (yych <= 'W') { + if (yych <= 'J') { + if (yych == 'G') + goto yy2319; + if (yych <= 'I') + goto yy2280; + goto yy2320; + } else { + if (yych == 'P') + goto yy2318; + if (yych <= 'V') + goto yy2280; + goto yy2321; + } + } else { + if (yych <= 'j') { + if (yych == 'g') + goto yy2319; + if (yych <= 'i') + goto yy2280; + goto yy2320; + } else { + if (yych <= 'p') { + if (yych <= 'o') + goto yy2280; + } else { + if (yych == 'w') + goto yy2321; + goto yy2280; + } + } + } + yy2318: + yych = *++p; + if (yych == 'N') + goto yy2329; + if (yych == 'n') + goto yy2329; + goto yy2280; + yy2319: + yych = *++p; + if (yych == 'I') + goto yy2328; + if (yych == 'i') + goto yy2328; + goto yy2280; + yy2320: + yych = *++p; + if (yych == 'P') + goto yy2326; + if (yych == 'p') + goto yy2326; + goto yy2280; + yy2321: + yych = *++p; + if (yych == 'E') + goto yy2322; + if (yych != 'e') + goto yy2280; + yy2322: + yych = *++p; + if (yych == 'B') + goto yy2323; + if (yych != 'b') + goto yy2280; + yy2323: + yych = *++p; + if (yych == 'P') + goto yy2324; + if (yych != 'p') + goto yy2280; + yy2324: + ++p; + { return 0; } + yy2326: + yych = *++p; + if (yych == 'E') + goto yy2327; + if (yych != 'e') + goto yy2280; + yy2327: + yych = *++p; + if (yych == 'G') + goto yy2324; + if (yych == 'g') + goto yy2324; + goto yy2280; + yy2328: + yych = *++p; + if (yych == 'F') + goto yy2324; + if (yych == 'f') + goto yy2324; + goto yy2280; + yy2329: + ++p; + if ((yych = *p) == 'G') + goto yy2324; + if (yych == 'g') + goto yy2324; + goto yy2280; + } } - -} - diff --git a/src/scanners.h b/src/scanners.h index a6a71bfbe2..4616f9f87a 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -5,7 +5,8 @@ extern "C" { #endif -bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset); +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, + bufsize_t offset); bufsize_t _scan_scheme(const unsigned char *p); bufsize_t _scan_autolink_uri(const unsigned char *p); bufsize_t _scan_autolink_email(const unsigned char *p); diff --git a/src/utf8.c b/src/utf8.c index ffe6652f0d..21e751d96b 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -6,452 +6,309 @@ #include "utf8.h" static const int8_t utf8proc_utf8class[256] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static void encode_unknown(cmark_strbuf *buf) -{ - static const uint8_t repl[] = {239, 191, 189}; - cmark_strbuf_put(buf, repl, 3); + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0}; + +static void encode_unknown(cmark_strbuf *buf) { + static const uint8_t repl[] = {239, 191, 189}; + cmark_strbuf_put(buf, repl, 3); } -static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) -{ - int length, i; +static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) { + int length, i; - if (!str_len) - return 0; + if (!str_len) + return 0; - length = utf8proc_utf8class[str[0]]; + length = utf8proc_utf8class[str[0]]; - if (!length) - return -1; + if (!length) + return -1; - if (str_len >= 0 && (bufsize_t)length > str_len) - return -str_len; + if (str_len >= 0 && (bufsize_t)length > str_len) + return -str_len; - for (i = 1; i < length; i++) { - if ((str[i] & 0xC0) != 0x80) - return -i; - } + for (i = 1; i < length; i++) { + if ((str[i] & 0xC0) != 0x80) + return -i; + } - return length; + return length; } // Validate a single UTF-8 character according to RFC 3629. -static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) -{ - int length = utf8proc_utf8class[str[0]]; - - if (!length) - return -1; - - if ((bufsize_t)length > str_len) - return -str_len; - - switch (length) { - case 2: - if ((str[1] & 0xC0) != 0x80) - return -1; - if (str[0] < 0xC2) { - // Overlong - return -length; - } - break; - - case 3: - if ((str[1] & 0xC0) != 0x80) - return -1; - if ((str[2] & 0xC0) != 0x80) - return -2; - if (str[0] == 0xE0) { - if (str[1] < 0xA0) { - // Overlong - return -length; - } - } else if (str[0] == 0xED) { - if (str[1] >= 0xA0) { - // Surrogate - return -length; - } - } - break; - - case 4: - if ((str[1] & 0xC0) != 0x80) - return -1; - if ((str[2] & 0xC0) != 0x80) - return -2; - if ((str[3] & 0xC0) != 0x80) - return -3; - if (str[0] == 0xF0) { - if (str[1] < 0x90) { - // Overlong - return -length; - } - } else if (str[0] >= 0xF4) { - if (str[0] > 0xF4 || str[1] >= 0x90) { - // Above 0x10FFFF - return -length; - } - } - break; - } - - return length; +static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { + int length = utf8proc_utf8class[str[0]]; + + if (!length) + return -1; + + if ((bufsize_t)length > str_len) + return -str_len; + + switch (length) { + case 2: + if ((str[1] & 0xC0) != 0x80) + return -1; + if (str[0] < 0xC2) { + // Overlong + return -length; + } + break; + + case 3: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; + if (str[0] == 0xE0) { + if (str[1] < 0xA0) { + // Overlong + return -length; + } + } else if (str[0] == 0xED) { + if (str[1] >= 0xA0) { + // Surrogate + return -length; + } + } + break; + + case 4: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; + if ((str[3] & 0xC0) != 0x80) + return -3; + if (str[0] == 0xF0) { + if (str[1] < 0x90) { + // Overlong + return -length; + } + } else if (str[0] >= 0xF4) { + if (str[0] > 0xF4 || str[1] >= 0x90) { + // Above 0x10FFFF + return -length; + } + } + break; + } + + return length; } -void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) -{ - bufsize_t i = 0; - - while (i < size) { - bufsize_t org = i; - int charlen = 0; - - while (i < size) { - if (line[i] < 0x80 && line[i] != 0) { - i++; - } else if (line[i] >= 0x80) { - charlen = utf8proc_valid(line + i, size - i); - if (charlen < 0) { - charlen = -charlen; - break; - } - i += charlen; - } else if (line[i] == 0) { - // ASCII NUL is technically valid but rejected - // for security reasons. - charlen = 1; - break; - } - } - - if (i > org) { - cmark_strbuf_put(ob, line + org, i - org); - } - - if (i >= size) { - break; - } else { - // Invalid UTF-8 - encode_unknown(ob); - i += charlen; - } - } +void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { + bufsize_t i = 0; + + while (i < size) { + bufsize_t org = i; + int charlen = 0; + + while (i < size) { + if (line[i] < 0x80 && line[i] != 0) { + i++; + } else if (line[i] >= 0x80) { + charlen = utf8proc_valid(line + i, size - i); + if (charlen < 0) { + charlen = -charlen; + break; + } + i += charlen; + } else if (line[i] == 0) { + // ASCII NUL is technically valid but rejected + // for security reasons. + charlen = 1; + break; + } + } + + if (i > org) { + cmark_strbuf_put(ob, line + org, i - org); + } + + if (i >= size) { + break; + } else { + // Invalid UTF-8 + encode_unknown(ob); + i += charlen; + } + } } -int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) -{ - int length; - int32_t uc = -1; - - *dst = -1; - length = utf8proc_charlen(str, str_len); - if (length < 0) - return -1; - - switch (length) { - case 1: - uc = str[0]; - break; - case 2: - uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F); - if (uc < 0x80) uc = -1; - break; - case 3: - uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) - + (str[2] & 0x3F); - if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) uc = -1; - break; - case 4: - uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) - + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); - if (uc < 0x10000 || uc >= 0x110000) uc = -1; - break; - } - - if (uc < 0) - return -1; - - *dst = uc; - return length; +int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) { + int length; + int32_t uc = -1; + + *dst = -1; + length = utf8proc_charlen(str, str_len); + if (length < 0) + return -1; + + switch (length) { + case 1: + uc = str[0]; + break; + case 2: + uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F); + if (uc < 0x80) + uc = -1; + break; + case 3: + uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F); + if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) + uc = -1; + break; + case 4: + uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) + + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); + if (uc < 0x10000 || uc >= 0x110000) + uc = -1; + break; + } + + if (uc < 0) + return -1; + + *dst = uc; + return length; } -void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) -{ - uint8_t dst[4]; - bufsize_t len = 0; - - assert(uc >= 0); - - if (uc < 0x80) { - dst[0] = uc; - len = 1; - } else if (uc < 0x800) { - dst[0] = 0xC0 + (uc >> 6); - dst[1] = 0x80 + (uc & 0x3F); - len = 2; - } else if (uc == 0xFFFF) { - dst[0] = 0xFF; - len = 1; - } else if (uc == 0xFFFE) { - dst[0] = 0xFE; - len = 1; - } else if (uc < 0x10000) { - dst[0] = 0xE0 + (uc >> 12); - dst[1] = 0x80 + ((uc >> 6) & 0x3F); - dst[2] = 0x80 + (uc & 0x3F); - len = 3; - } else if (uc < 0x110000) { - dst[0] = 0xF0 + (uc >> 18); - dst[1] = 0x80 + ((uc >> 12) & 0x3F); - dst[2] = 0x80 + ((uc >> 6) & 0x3F); - dst[3] = 0x80 + (uc & 0x3F); - len = 4; - } else { - encode_unknown(buf); - return; - } - - cmark_strbuf_put(buf, dst, len); +void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { + uint8_t dst[4]; + bufsize_t len = 0; + + assert(uc >= 0); + + if (uc < 0x80) { + dst[0] = uc; + len = 1; + } else if (uc < 0x800) { + dst[0] = 0xC0 + (uc >> 6); + dst[1] = 0x80 + (uc & 0x3F); + len = 2; + } else if (uc == 0xFFFF) { + dst[0] = 0xFF; + len = 1; + } else if (uc == 0xFFFE) { + dst[0] = 0xFE; + len = 1; + } else if (uc < 0x10000) { + dst[0] = 0xE0 + (uc >> 12); + dst[1] = 0x80 + ((uc >> 6) & 0x3F); + dst[2] = 0x80 + (uc & 0x3F); + len = 3; + } else if (uc < 0x110000) { + dst[0] = 0xF0 + (uc >> 18); + dst[1] = 0x80 + ((uc >> 12) & 0x3F); + dst[2] = 0x80 + ((uc >> 6) & 0x3F); + dst[3] = 0x80 + (uc & 0x3F); + len = 4; + } else { + encode_unknown(buf); + return; + } + + cmark_strbuf_put(buf, dst, len); } -void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) -{ - int32_t c; +void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) { + int32_t c; -#define bufpush(x) \ - utf8proc_encode_char(x, dest) +#define bufpush(x) utf8proc_encode_char(x, dest) - while (len > 0) { - bufsize_t char_len = utf8proc_iterate(str, len, &c); + while (len > 0) { + bufsize_t char_len = utf8proc_iterate(str, len, &c); - if (char_len >= 0) { + if (char_len >= 0) { #include "case_fold_switch.inc" - } else { - encode_unknown(dest); - char_len = -char_len; - } - - str += char_len; - len -= char_len; - } + } else { + encode_unknown(dest); + char_len = -char_len; + } + + str += char_len; + len -= char_len; + } } // matches anything in the Zs class, plus LF, CR, TAB, FF. -int utf8proc_is_space(int32_t uc) -{ - return (uc == 9 || - uc == 10 || - uc == 12 || - uc == 13 || - uc == 32 || - uc == 160 || - uc == 5760 || - (uc >= 8192 && uc <= 8202) || - uc == 8239 || - uc == 8287 || - uc == 12288); +int utf8proc_is_space(int32_t uc) { + return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 || + uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 || + uc == 8287 || uc == 12288); } // matches anything in the P[cdefios] classes. -int utf8proc_is_punctuation(int32_t uc) -{ - return ((uc < 128 && cmark_ispunct((char)uc)) || - uc == 161 || - uc == 167 || - uc == 171 || - uc == 182 || - uc == 183 || - uc == 187 || - uc == 191 || - uc == 894 || - uc == 903 || - (uc >= 1370 && uc <= 1375) || - uc == 1417 || - uc == 1418 || - uc == 1470 || - uc == 1472 || - uc == 1475 || - uc == 1478 || - uc == 1523 || - uc == 1524 || - uc == 1545 || - uc == 1546 || - uc == 1548 || - uc == 1549 || - uc == 1563 || - uc == 1566 || - uc == 1567 || - (uc >= 1642 && uc <= 1645) || - uc == 1748 || - (uc >= 1792 && uc <= 1805) || - (uc >= 2039 && uc <= 2041) || - (uc >= 2096 && uc <= 2110) || - uc == 2142 || - uc == 2404 || - uc == 2405 || - uc == 2416 || - uc == 2800 || - uc == 3572 || - uc == 3663 || - uc == 3674 || - uc == 3675 || - (uc >= 3844 && uc <= 3858) || - uc == 3860 || - (uc >= 3898 && uc <= 3901) || - uc == 3973 || - (uc >= 4048 && uc <= 4052) || - uc == 4057 || - uc == 4058 || - (uc >= 4170 && uc <= 4175) || - uc == 4347 || - (uc >= 4960 && uc <= 4968) || - uc == 5120 || - uc == 5741 || - uc == 5742 || - uc == 5787 || - uc == 5788 || - (uc >= 5867 && uc <= 5869) || - uc == 5941 || - uc == 5942 || - (uc >= 6100 && uc <= 6102) || - (uc >= 6104 && uc <= 6106) || - (uc >= 6144 && uc <= 6154) || - uc == 6468 || - uc == 6469 || - uc == 6686 || - uc == 6687 || - (uc >= 6816 && uc <= 6822) || - (uc >= 6824 && uc <= 6829) || - (uc >= 7002 && uc <= 7008) || - (uc >= 7164 && uc <= 7167) || - (uc >= 7227 && uc <= 7231) || - uc == 7294 || - uc == 7295 || - (uc >= 7360 && uc <= 7367) || - uc == 7379 || - (uc >= 8208 && uc <= 8231) || - (uc >= 8240 && uc <= 8259) || - (uc >= 8261 && uc <= 8273) || - (uc >= 8275 && uc <= 8286) || - uc == 8317 || - uc == 8318 || - uc == 8333 || - uc == 8334 || - (uc >= 8968 && uc <= 8971) || - uc == 9001 || - uc == 9002 || - (uc >= 10088 && uc <= 10101) || - uc == 10181 || - uc == 10182 || - (uc >= 10214 && uc <= 10223) || - (uc >= 10627 && uc <= 10648) || - (uc >= 10712 && uc <= 10715) || - uc == 10748 || - uc == 10749 || - (uc >= 11513 && uc <= 11516) || - uc == 11518 || - uc == 11519 || - uc == 11632 || - (uc >= 11776 && uc <= 11822) || - (uc >= 11824 && uc <= 11842) || - (uc >= 12289 && uc <= 12291) || - (uc >= 12296 && uc <= 12305) || - (uc >= 12308 && uc <= 12319) || - uc == 12336 || - uc == 12349 || - uc == 12448 || - uc == 12539 || - uc == 42238 || - uc == 42239 || - (uc >= 42509 && uc <= 42511) || - uc == 42611 || - uc == 42622 || - (uc >= 42738 && uc <= 42743) || - (uc >= 43124 && uc <= 43127) || - uc == 43214 || - uc == 43215 || - (uc >= 43256 && uc <= 43258) || - uc == 43310 || - uc == 43311 || - uc == 43359 || - (uc >= 43457 && uc <= 43469) || - uc == 43486 || - uc == 43487 || - (uc >= 43612 && uc <= 43615) || - uc == 43742 || - uc == 43743 || - uc == 43760 || - uc == 43761 || - uc == 44011 || - uc == 64830 || - uc == 64831 || - (uc >= 65040 && uc <= 65049) || - (uc >= 65072 && uc <= 65106) || - (uc >= 65108 && uc <= 65121) || - uc == 65123 || - uc == 65128 || - uc == 65130 || - uc == 65131 || - (uc >= 65281 && uc <= 65283) || - (uc >= 65285 && uc <= 65290) || - (uc >= 65292 && uc <= 65295) || - uc == 65306 || - uc == 65307 || - uc == 65311 || - uc == 65312 || - (uc >= 65339 && uc <= 65341) || - uc == 65343 || - uc == 65371 || - uc == 65373 || - (uc >= 65375 && uc <= 65381) || - (uc >= 65792 && uc <= 65794) || - uc == 66463 || - uc == 66512 || - uc == 66927 || - uc == 67671 || - uc == 67871 || - uc == 67903 || - (uc >= 68176 && uc <= 68184) || - uc == 68223 || - (uc >= 68336 && uc <= 68342) || - (uc >= 68409 && uc <= 68415) || - (uc >= 68505 && uc <= 68508) || - (uc >= 69703 && uc <= 69709) || - uc == 69819 || - uc == 69820 || - (uc >= 69822 && uc <= 69825) || - (uc >= 69952 && uc <= 69955) || - uc == 70004 || - uc == 70005 || - (uc >= 70085 && uc <= 70088) || - uc == 70093 || - (uc >= 70200 && uc <= 70205) || - uc == 70854 || - (uc >= 71105 && uc <= 71113) || - (uc >= 71233 && uc <= 71235) || - (uc >= 74864 && uc <= 74868) || - uc == 92782 || - uc == 92783 || - uc == 92917 || - (uc >= 92983 && uc <= 92987) || - uc == 92996 || - uc == 113823); +int utf8proc_is_punctuation(int32_t uc) { + return ( + (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 || + uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 || + uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 || + uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 || + uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 || + uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 || + (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) || + (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 || + uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 || + uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) || + uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 || + (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 || + (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) || + uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 || + (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 || + (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) || + (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 || + uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) || + (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) || + (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 || + (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) || + (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) || + (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 || + uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 || + (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 || + (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) || + (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 || + (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 || + uc == 11632 || (uc >= 11776 && uc <= 11822) || + (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) || + (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) || + uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 || + uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 || + uc == 42622 || (uc >= 42738 && uc <= 42743) || + (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 || + (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 || + uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 || + uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 || + uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 || + uc == 64831 || (uc >= 65040 && uc <= 65049) || + (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) || + uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 || + (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) || + (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 || + uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) || + uc == 65343 || uc == 65371 || uc == 65373 || + (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) || + uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 || + uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 || + (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) || + (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) || + uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) || + (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 || + (uc >= 70085 && uc <= 70088) || uc == 70093 || + (uc >= 70200 && uc <= 70205) || uc == 70854 || + (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) || + (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 || + uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 || + uc == 113823); } diff --git a/src/xml.c b/src/xml.c index 2882f50011..0b225faf69 100644 --- a/src/xml.c +++ b/src/xml.c @@ -11,163 +11,142 @@ // Functions to convert cmark_nodes to XML strings. -static void escape_xml(cmark_strbuf *dest, const unsigned char *source, bufsize_t length) -{ - houdini_escape_html0(dest, source, length, 0); +static void escape_xml(cmark_strbuf *dest, const unsigned char *source, + bufsize_t length) { + houdini_escape_html0(dest, source, length, 0); } struct render_state { - cmark_strbuf* xml; - int indent; + cmark_strbuf *xml; + int indent; }; -static inline void indent(struct render_state *state) -{ - int i; - for (i = 0; i < state->indent; i++) { - cmark_strbuf_putc(state->xml, ' '); - } +static inline void indent(struct render_state *state) { + int i; + for (i = 0; i < state->indent; i++) { + cmark_strbuf_putc(state->xml, ' '); + } } -static int -S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, int options) -{ - cmark_strbuf *xml = state->xml; - bool literal = false; - cmark_delim_type delim; - bool entering = (ev_type == CMARK_EVENT_ENTER); - char buffer[100]; - - if (entering) { - indent(state); - cmark_strbuf_putc(xml, '<'); - cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); - - if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { - sprintf(buffer, " sourcepos=\"%d:%d-%d:%d\"", - node->start_line, - node->start_column, - node->end_line, - node->end_column); - cmark_strbuf_puts(xml, buffer); - } - - literal = false; - - switch (node->type) { - case CMARK_NODE_TEXT: - case CMARK_NODE_CODE: - case CMARK_NODE_HTML: - case CMARK_NODE_INLINE_HTML: - cmark_strbuf_puts(xml, ">"); - escape_xml(xml, node->as.literal.data, - node->as.literal.len); - cmark_strbuf_puts(xml, "as.header.level); - cmark_strbuf_puts(xml, buffer); - break; - case CMARK_NODE_CODE_BLOCK: - if (node->as.code.info.len > 0) { - cmark_strbuf_puts(xml, " info=\""); - escape_xml(xml, node->as.code.info.data, - node->as.code.info.len); - cmark_strbuf_putc(xml, '"'); - } - cmark_strbuf_puts(xml, ">"); - escape_xml(xml, node->as.code.literal.data, - node->as.code.literal.len); - cmark_strbuf_puts(xml, "as.link.url.data, - node->as.link.url.len); - cmark_strbuf_putc(xml, '"'); - cmark_strbuf_puts(xml, " title=\""); - escape_xml(xml, node->as.link.title.data, - node->as.link.title.len); - cmark_strbuf_putc(xml, '"'); - break; - default: - break; - } - if (node->first_child) { - state->indent += 2; - } else if (!literal) { - cmark_strbuf_puts(xml, " /"); - } - cmark_strbuf_puts(xml, ">\n"); - - - } else if (node->first_child) { - state->indent -= 2; - indent(state); - cmark_strbuf_puts(xml, "\n"); - } - - return 1; +static int S_render_node(cmark_node *node, cmark_event_type ev_type, + struct render_state *state, int options) { + cmark_strbuf *xml = state->xml; + bool literal = false; + cmark_delim_type delim; + bool entering = (ev_type == CMARK_EVENT_ENTER); + char buffer[100]; + + if (entering) { + indent(state); + cmark_strbuf_putc(xml, '<'); + cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); + + if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { + sprintf(buffer, " sourcepos=\"%d:%d-%d:%d\"", node->start_line, + node->start_column, node->end_line, node->end_column); + cmark_strbuf_puts(xml, buffer); + } + + literal = false; + + switch (node->type) { + case CMARK_NODE_TEXT: + case CMARK_NODE_CODE: + case CMARK_NODE_HTML: + case CMARK_NODE_INLINE_HTML: + cmark_strbuf_puts(xml, ">"); + escape_xml(xml, node->as.literal.data, node->as.literal.len); + cmark_strbuf_puts(xml, "as.header.level); + cmark_strbuf_puts(xml, buffer); + break; + case CMARK_NODE_CODE_BLOCK: + if (node->as.code.info.len > 0) { + cmark_strbuf_puts(xml, " info=\""); + escape_xml(xml, node->as.code.info.data, node->as.code.info.len); + cmark_strbuf_putc(xml, '"'); + } + cmark_strbuf_puts(xml, ">"); + escape_xml(xml, node->as.code.literal.data, node->as.code.literal.len); + cmark_strbuf_puts(xml, "as.link.url.data, node->as.link.url.len); + cmark_strbuf_putc(xml, '"'); + cmark_strbuf_puts(xml, " title=\""); + escape_xml(xml, node->as.link.title.data, node->as.link.title.len); + cmark_strbuf_putc(xml, '"'); + break; + default: + break; + } + if (node->first_child) { + state->indent += 2; + } else if (!literal) { + cmark_strbuf_puts(xml, " /"); + } + cmark_strbuf_puts(xml, ">\n"); + + } else if (node->first_child) { + state->indent -= 2; + indent(state); + cmark_strbuf_puts(xml, "\n"); + } + + return 1; } -char *cmark_render_xml(cmark_node *root, int options) -{ - char *result; - cmark_strbuf xml = GH_BUF_INIT; - cmark_event_type ev_type; - cmark_node *cur; - struct render_state state = { &xml, 0 }; - - cmark_iter *iter = cmark_iter_new(root); - - cmark_strbuf_puts(state.xml, - "\n"); - cmark_strbuf_puts(state.xml, - "\n"); - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state, options); - } - result = (char *)cmark_strbuf_detach(&xml); - - cmark_iter_free(iter); - return result; +char *cmark_render_xml(cmark_node *root, int options) { + char *result; + cmark_strbuf xml = GH_BUF_INIT; + cmark_event_type ev_type; + cmark_node *cur; + struct render_state state = {&xml, 0}; + + cmark_iter *iter = cmark_iter_new(root); + + cmark_strbuf_puts(state.xml, "\n"); + cmark_strbuf_puts(state.xml, + "\n"); + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + S_render_node(cur, ev_type, &state, options); + } + result = (char *)cmark_strbuf_detach(&xml); + + cmark_iter_free(iter); + return result; } -- cgit 0.0.5-2-1-g0f52 From 521c43cbdc0709b2b0fe4081c2349e4a3b86c984 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Jul 2015 23:10:43 -0700 Subject: Updated spec. --- test/spec.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 984ae52ae4..9f7eb61dd0 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3641,6 +3641,21 @@ Here are some list items that start with a blank line but are not empty: . +A list item can begin with at most one blank line. +In the following example, `foo` is not part of the list +item: + +. +- + + foo +. +
                                +
                              • +
                              +

                              foo

                              +. + Here is an empty bullet list item: . -- cgit 0.0.5-2-1-g0f52 From d9f5a3fe2555ecf9d64e392d8febf551c60ddbe5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Jul 2015 23:11:31 -0700 Subject: Disallow list item starting with multiple blank lines. See jgm/CommonMark#332 --- src/blocks.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index c466fc2f84..9a8a9a6e7a 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -635,7 +635,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, S_advance_offset(parser, &input, container->as.list.marker_offset + container->as.list.padding, true); - } else if (parser->blank) { + } else if (parser->blank && container->first_child != NULL) { + // if container->first_child is NULL, then the opening line + // of the list item was blank after the list marker; in this + // case, we are done with the list item. S_advance_offset(parser, &input, parser->first_nonspace - parser->offset, false); } else { -- cgit 0.0.5-2-1-g0f52 From 2f393322635cbc1eea0fd75ac17c00d01fe42176 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Thu, 6 Aug 2015 09:07:23 -0700 Subject: Prefix utf8proc functions to avoid conflict with existing library --- src/blocks.c | 2 +- src/houdini_html_u.c | 2 +- src/inlines.c | 22 +++++++++++----------- src/references.c | 2 +- src/render.c | 4 ++-- src/utf8.c | 16 ++++++++-------- src/utf8.h | 12 ++++++------ 7 files changed, 30 insertions(+), 30 deletions(-) mode change 100644 => 100755 src/blocks.c mode change 100644 => 100755 src/houdini_html_u.c mode change 100644 => 100755 src/inlines.c mode change 100644 => 100755 src/references.c mode change 100644 => 100755 src/render.c mode change 100644 => 100755 src/utf8.c mode change 100644 => 100755 src/utf8.h diff --git a/src/blocks.c b/src/blocks.c old mode 100644 new mode 100755 index 9a8a9a6e7a..f1e3a7a6bf --- a/src/blocks.c +++ b/src/blocks.c @@ -594,7 +594,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, bool maybe_lazy; if (parser->options & CMARK_OPT_VALIDATE_UTF8) { - utf8proc_check(parser->curline, buffer, bytes); + cmark_utf8proc_check(parser->curline, buffer, bytes); } else { cmark_strbuf_put(parser->curline, buffer, bytes); } diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c old mode 100644 new mode 100755 index 7bb1f50bae..a2d927b16b --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -75,7 +75,7 @@ bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, codepoint >= 0x110000) { codepoint = 0xFFFD; } - utf8proc_encode_char(codepoint, ob); + cmark_utf8proc_encode_char(codepoint, ob); return i + 1; } } diff --git a/src/inlines.c b/src/inlines.c old mode 100644 new mode 100755 index ba78278877..f8e257564b --- a/src/inlines.c +++ b/src/inlines.c @@ -283,7 +283,7 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) { before_char_pos -= 1; } - len = utf8proc_iterate(subj->input.data + before_char_pos, + len = cmark_utf8proc_iterate(subj->input.data + before_char_pos, subj->pos - before_char_pos, &before_char); if (len == -1) { before_char = 10; @@ -300,24 +300,24 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, } } - len = utf8proc_iterate(subj->input.data + subj->pos, + len = cmark_utf8proc_iterate(subj->input.data + subj->pos, subj->input.len - subj->pos, &after_char); if (len == -1) { after_char = 10; } - left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) && - !(utf8proc_is_punctuation(after_char) && - !utf8proc_is_space(before_char) && - !utf8proc_is_punctuation(before_char)); + left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) && + !(cmark_utf8proc_is_punctuation(after_char) && + !cmark_utf8proc_is_space(before_char) && + !cmark_utf8proc_is_punctuation(before_char)); right_flanking = - numdelims > 0 && !utf8proc_is_space(before_char) && - !(utf8proc_is_punctuation(before_char) && - !utf8proc_is_space(after_char) && !utf8proc_is_punctuation(after_char)); + numdelims > 0 && !cmark_utf8proc_is_space(before_char) && + !(cmark_utf8proc_is_punctuation(before_char) && + !cmark_utf8proc_is_space(after_char) && !cmark_utf8proc_is_punctuation(after_char)); if (c == '_') { *can_open = left_flanking && - (!right_flanking || utf8proc_is_punctuation(before_char)); + (!right_flanking || cmark_utf8proc_is_punctuation(before_char)); *can_close = right_flanking && - (!left_flanking || utf8proc_is_punctuation(after_char)); + (!left_flanking || cmark_utf8proc_is_punctuation(after_char)); } else if (c == '\'' || c == '"') { *can_open = left_flanking && !right_flanking; *can_close = right_flanking; diff --git a/src/references.c b/src/references.c old mode 100644 new mode 100755 index 980a948f7b..6cb2b204e1 --- a/src/references.c +++ b/src/references.c @@ -37,7 +37,7 @@ static unsigned char *normalize_reference(cmark_chunk *ref) { if (ref->len == 0) return NULL; - utf8proc_case_fold(&normalized, ref->data, ref->len); + cmark_utf8proc_case_fold(&normalized, ref->data, ref->len); cmark_strbuf_trim(&normalized); cmark_strbuf_normalize_whitespace(&normalized); diff --git a/src/render.c b/src/render.c old mode 100644 new mode 100755 index 4912615fda..f1ec672a5b --- a/src/render.c +++ b/src/render.c @@ -55,7 +55,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, renderer->column = renderer->prefix->size; } - len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c); + len = cmark_utf8proc_iterate((const uint8_t *)source + i, length - i, &c); if (len == -1) { // error condition return; // return without rendering rest of string } @@ -118,7 +118,7 @@ void cmark_render_ascii(cmark_renderer *renderer, const char *s) { } void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) { - utf8proc_encode_char(c, renderer->buffer); + cmark_utf8proc_encode_char(c, renderer->buffer); renderer->column += 1; } diff --git a/src/utf8.c b/src/utf8.c old mode 100644 new mode 100755 index 21e751d96b..a742a7527a --- a/src/utf8.c +++ b/src/utf8.c @@ -107,7 +107,7 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { return length; } -void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { +void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { bufsize_t i = 0; while (i < size) { @@ -146,7 +146,7 @@ void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { } } -int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) { +int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) { int length; int32_t uc = -1; @@ -184,7 +184,7 @@ int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) { return length; } -void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { +void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { uint8_t dst[4]; bufsize_t len = 0; @@ -222,13 +222,13 @@ void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { cmark_strbuf_put(buf, dst, len); } -void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) { +void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) { int32_t c; -#define bufpush(x) utf8proc_encode_char(x, dest) +#define bufpush(x) cmark_utf8proc_encode_char(x, dest) while (len > 0) { - bufsize_t char_len = utf8proc_iterate(str, len, &c); + bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c); if (char_len >= 0) { #include "case_fold_switch.inc" @@ -243,14 +243,14 @@ void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) { } // matches anything in the Zs class, plus LF, CR, TAB, FF. -int utf8proc_is_space(int32_t uc) { +int cmark_utf8proc_is_space(int32_t uc) { return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 || uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 || uc == 8287 || uc == 12288); } // matches anything in the P[cdefios] classes. -int utf8proc_is_punctuation(int32_t uc) { +int cmark_utf8proc_is_punctuation(int32_t uc) { return ( (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 || uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 || diff --git a/src/utf8.h b/src/utf8.h old mode 100644 new mode 100755 index 9f1a4ecef2..43b37575ed --- a/src/utf8.h +++ b/src/utf8.h @@ -8,12 +8,12 @@ extern "C" { #endif -void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len); -void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); -int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); -void utf8proc_check(cmark_strbuf *dest, const uint8_t *line, bufsize_t size); -int utf8proc_is_space(int32_t uc); -int utf8proc_is_punctuation(int32_t uc); +void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len); +void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); +int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); +void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line, bufsize_t size); +int cmark_utf8proc_is_space(int32_t uc); +int cmark_utf8proc_is_punctuation(int32_t uc); #ifdef __cplusplus } -- cgit 0.0.5-2-1-g0f52 From 8f485e954ba01432f78a191db97c2e62164b24cb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 7 Aug 2015 12:49:12 -0700 Subject: cmark.3 man page - regenerated with smart. --- man/man3/cmark.3 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 4c539e811d..d14f9a0f2b 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "July 27, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "August 07, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -28,8 +28,8 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller's responsibility to -assign. +other required properties, which it is the caller\[cq]s responsibility +to assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -285,7 +285,8 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the "tightness" of a list. Returns 1 on success, 0 on failure. +Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on +failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -553,7 +554,7 @@ Normalize tree by consolidating adjacent text nodes. .fi .PP -Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en +Convert straight quotes to curly, \[em] to em dashes, \[en] to en dashes. .PP -- cgit 0.0.5-2-1-g0f52 From cf2f192486c85b6c7902d84dada3411e958c18b8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 7 Aug 2015 12:49:26 -0700 Subject: Added api_test case for #68. Currently fails. --- api_test/main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index dfb5483a9b..7c3ac1df03 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -677,6 +677,13 @@ line_endings(test_batch_runner *runner) STR_EQ(runner, html, "
                                \n
                              • a
                              • \n
                              • b
                              • \n
                              • c
                              • \n
                              • d
                              • \n
                              \n", "list with different line endings"); free(html); + static const char crlf_lines[] = "line\r\nline\r\n"; + html = cmark_markdown_to_html(crlf_lines, + sizeof(crlf_lines) - 1, + CMARK_OPT_DEFAULT | CMARK_OPT_HARDBREAKS); + STR_EQ(runner, html, "

                              line
                              \nline

                              \n", + "crlf endings with CMARK_OPT_HARDBREAKS"); + free(html); } static void -- cgit 0.0.5-2-1-g0f52 From 1633fce60d3f2ca5d3450da03c9f752fcdf2b634 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 7 Aug 2015 12:55:12 -0700 Subject: Fixed `--hardbreaks` with CRLF line breaks. Closes #68. --- src/inlines.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f8e257564b..f8a2cfc293 100755 --- a/src/inlines.c +++ b/src/inlines.c @@ -939,11 +939,16 @@ match: } // Parse a hard or soft linebreak, returning an inline. -// Assumes the subject has a newline at the current position. +// Assumes the subject has a cr or newline at the current position. static cmark_node *handle_newline(subject *subj) { bufsize_t nlpos = subj->pos; - // skip over newline - advance(subj); + // skip over cr, crlf, or lf: + if (peek_at(subj, subj->pos) == '\r') { + advance(subj); + } + if (peek_at(subj, subj->pos) == '\n') { + advance(subj); + } // skip spaces at beginning of line skip_spaces(subj); if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && -- cgit 0.0.5-2-1-g0f52 From 3731ae78a774513a279cd8149c760fb4df412149 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 7 Aug 2015 13:39:29 -0700 Subject: Use -10 priority with renice. Negative numbers are higher priority! --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cc7d9b26cc..87d210384d 100644 --- a/Makefile +++ b/Makefile @@ -161,7 +161,7 @@ $(BENCHDIR)/benchinput.md: progit done bench: $(BENCHFILE) - { sudo renice 99 $$$$; \ + { sudo renice -10 $$$$; \ for x in `seq 1 $(NUMRUNS)` ; do \ /usr/bin/env time -p $(PROG) /dev/null ; \ /usr/bin/env time -p $(PROG) $< >/dev/null ; \ -- cgit 0.0.5-2-1-g0f52 From 2c3612447e35c879ad99e637dd473ec58fde9fd0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 7 Aug 2015 23:21:53 -0700 Subject: Removed pre from blocktags scanner. See jgm/CommonMark#355. Pre is handled separately in rule 1 and needn't be handled in rule 6. --- src/scanners.c | 7243 +++++++++++++++++++++++++++---------------------------- src/scanners.re | 2 +- 2 files changed, 3604 insertions(+), 3641 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 9237c7ff6b..6a98928fd1 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -17259,10 +17259,10 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy1435; case 'P': case 'p': - goto yy1622; + goto yy1620; case 'S': case 's': - goto yy1623; + goto yy1621; case 'T': case 't': goto yy1437; @@ -18011,7 +18011,7 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { } yy1497: ++p; - yy1498 : { return 1; } + { return 1; } yy1499: yych = *++p; if (yych == 'L') @@ -18972,9 +18972,9 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy1616: yych = *++p; if (yych == 'E') - goto yy1620; + goto yy1496; if (yych == 'e') - goto yy1620; + goto yy1496; goto yy1417; yy1617: yych = *++p; @@ -18997,66 +18997,36 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy1417; yy1620: yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy1417; - if (yych <= '\r') - goto yy1621; - if (yych <= 0x1F) - goto yy1417; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy1417; - goto yy1458; - } else { - if (yych != '>') - goto yy1417; - } - } - yy1621: - yych = *++p; - goto yy1498; - yy1622: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { + if (yych <= '/') { + if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') goto yy1456; - if (yych <= 0x1F) - goto yy1417; - goto yy1456; + goto yy1417; } else { - if (yych == '/') - goto yy1458; - if (yych <= '=') + if (yych <= ' ') + goto yy1456; + if (yych <= '.') goto yy1417; - goto yy1456; + goto yy1458; } } else { - if (yych <= 'R') { - if (yych == 'A') - goto yy1617; - if (yych <= 'Q') - goto yy1417; - goto yy1624; + if (yych <= '@') { + if (yych == '>') + goto yy1456; + goto yy1417; } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy1417; + if (yych <= 'A') goto yy1617; - } else { - if (yych == 'r') - goto yy1624; - goto yy1417; - } + if (yych == 'a') + goto yy1617; + goto yy1417; } } - yy1623: - yych = *++p; - if (yych <= 'U') { + yy1621: + ++p; + if ((yych = *p) <= 'U') { if (yych <= 'N') { if (yych == 'E') goto yy1481; @@ -19081,13 +19051,6 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy1417; } } - yy1624: - ++p; - if ((yych = *p) == 'E') - goto yy1455; - if (yych == 'e') - goto yy1455; - goto yy1417; } } @@ -19124,813 +19087,813 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych != '\n') - goto yy1629; + goto yy1626; } else { if (yych <= '<') - goto yy1628; + goto yy1625; if (yych <= 0x7F) - goto yy1629; + goto yy1626; if (yych >= 0xC2) - goto yy1630; + goto yy1627; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1632; + goto yy1629; if (yych == 0xED) - goto yy1637; - goto yy1633; + goto yy1634; + goto yy1630; } else { if (yych <= 0xF0) - goto yy1634; + goto yy1631; if (yych <= 0xF3) - goto yy1635; + goto yy1632; if (yych <= 0xF4) - goto yy1636; + goto yy1633; } } - yy1627 : { return 0; } - yy1628: + yy1624 : { return 0; } + yy1625: yyaccept = 0; yych = *(marker = ++p); if (yych <= '@') { if (yych == '/') - goto yy1640; - goto yy1627; + goto yy1637; + goto yy1624; } else { if (yych <= 'Z') - goto yy1638; + goto yy1635; if (yych <= '`') - goto yy1627; + goto yy1624; if (yych <= 'z') - goto yy1638; - goto yy1627; + goto yy1635; + goto yy1624; } - yy1629: + yy1626: yych = *++p; - goto yy1627; - yy1630: + goto yy1624; + yy1627: yych = *++p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1629; - yy1631: + goto yy1626; + yy1628: p = marker; if (yyaccept == 0) { - goto yy1627; + goto yy1624; } else { - goto yy1649; + goto yy1646; } - yy1632: + yy1629: yych = *++p; if (yych <= 0x9F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1630; - goto yy1631; - yy1633: + goto yy1627; + goto yy1628; + yy1630: yych = *++p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1630; - goto yy1631; - yy1634: + goto yy1627; + goto yy1628; + yy1631: yych = *++p; if (yych <= 0x8F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1633; - goto yy1631; - yy1635: + goto yy1630; + goto yy1628; + yy1632: yych = *++p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1633; - goto yy1631; - yy1636: + goto yy1630; + goto yy1628; + yy1633: yych = *++p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x8F) - goto yy1633; - goto yy1631; - yy1637: + goto yy1630; + goto yy1628; + yy1634: yych = *++p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x9F) - goto yy1630; - goto yy1631; - yy1638: + goto yy1627; + goto yy1628; + yy1635: ++p; yych = *p; if (yybm[0 + yych] & 1) { - goto yy1638; + goto yy1635; } if (yych <= ' ') { if (yych <= 0x08) - goto yy1631; + goto yy1628; if (yych <= '\r') - goto yy1651; + goto yy1648; if (yych <= 0x1F) - goto yy1631; - goto yy1651; + goto yy1628; + goto yy1648; } else { if (yych <= '/') { if (yych <= '.') - goto yy1631; - goto yy1653; + goto yy1628; + goto yy1650; } else { if (yych == '>') - goto yy1645; - goto yy1631; + goto yy1642; + goto yy1628; } } - yy1640: + yy1637: yych = *++p; if (yych <= '@') - goto yy1631; + goto yy1628; if (yych <= 'Z') - goto yy1641; + goto yy1638; if (yych <= '`') - goto yy1631; + goto yy1628; if (yych >= '{') - goto yy1631; - yy1641: + goto yy1628; + yy1638: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy1643; + goto yy1640; } if (yych <= '=') { if (yych <= '-') { if (yych <= ',') - goto yy1631; - goto yy1641; + goto yy1628; + goto yy1638; } else { if (yych <= '/') - goto yy1631; + goto yy1628; if (yych <= '9') - goto yy1641; - goto yy1631; + goto yy1638; + goto yy1628; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy1645; + goto yy1642; if (yych <= '@') - goto yy1631; - goto yy1641; + goto yy1628; + goto yy1638; } else { if (yych <= '`') - goto yy1631; + goto yy1628; if (yych <= 'z') - goto yy1641; - goto yy1631; + goto yy1638; + goto yy1628; } } - yy1643: + yy1640: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy1643; + goto yy1640; } if (yych != '>') - goto yy1631; - yy1645: + goto yy1628; + yy1642: ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy1645; + goto yy1642; } if (yych <= 0x08) - goto yy1631; + goto yy1628; if (yych <= '\n') - goto yy1647; + goto yy1644; if (yych <= '\v') - goto yy1631; + goto yy1628; if (yych <= '\r') - goto yy1650; - goto yy1631; - yy1647: + goto yy1647; + goto yy1628; + yy1644: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy1645; + goto yy1642; } if (yych <= 0x08) - goto yy1649; + goto yy1646; if (yych <= '\n') - goto yy1647; + goto yy1644; if (yych <= '\v') - goto yy1649; + goto yy1646; if (yych <= '\r') - goto yy1650; - yy1649 : { return 7; } - yy1650: + goto yy1647; + yy1646 : { return 7; } + yy1647: yych = *++p; - goto yy1649; - yy1651: + goto yy1646; + yy1648: ++p; yych = *p; if (yych <= ':') { if (yych <= ' ') { if (yych <= 0x08) - goto yy1631; + goto yy1628; if (yych <= '\r') - goto yy1651; + goto yy1648; if (yych <= 0x1F) - goto yy1631; - goto yy1651; + goto yy1628; + goto yy1648; } else { if (yych == '/') - goto yy1653; + goto yy1650; if (yych <= '9') - goto yy1631; - goto yy1654; + goto yy1628; + goto yy1651; } } else { if (yych <= 'Z') { if (yych == '>') - goto yy1645; + goto yy1642; if (yych <= '@') - goto yy1631; - goto yy1654; + goto yy1628; + goto yy1651; } else { if (yych <= '_') { if (yych <= '^') - goto yy1631; - goto yy1654; + goto yy1628; + goto yy1651; } else { if (yych <= '`') - goto yy1631; + goto yy1628; if (yych <= 'z') - goto yy1654; - goto yy1631; + goto yy1651; + goto yy1628; } } } - yy1653: + yy1650: yych = *++p; if (yych == '>') - goto yy1645; - goto yy1631; - yy1654: + goto yy1642; + goto yy1628; + yy1651: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1654; + goto yy1651; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy1631; + goto yy1628; } else { if (yych != ' ') - goto yy1631; + goto yy1628; } } else { if (yych <= '<') { if (yych <= '/') - goto yy1653; - goto yy1631; + goto yy1650; + goto yy1628; } else { if (yych <= '=') - goto yy1658; + goto yy1655; if (yych <= '>') - goto yy1645; - goto yy1631; + goto yy1642; + goto yy1628; } } - yy1656: + yy1653: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy1631; + goto yy1628; if (yych <= '\r') - goto yy1656; + goto yy1653; if (yych <= 0x1F) - goto yy1631; - goto yy1656; + goto yy1628; + goto yy1653; } else { if (yych <= '/') { if (yych <= '.') - goto yy1631; - goto yy1653; + goto yy1628; + goto yy1650; } else { if (yych == ':') - goto yy1654; - goto yy1631; + goto yy1651; + goto yy1628; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy1658; + goto yy1655; if (yych <= '>') - goto yy1645; + goto yy1642; if (yych <= '@') - goto yy1631; - goto yy1654; + goto yy1628; + goto yy1651; } else { if (yych <= '_') { if (yych <= '^') - goto yy1631; - goto yy1654; + goto yy1628; + goto yy1651; } else { if (yych <= '`') - goto yy1631; + goto yy1628; if (yych <= 'z') - goto yy1654; - goto yy1631; + goto yy1651; + goto yy1628; } } } - yy1658: + yy1655: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1660; + goto yy1657; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych >= '!') - goto yy1671; + goto yy1668; } else { if (yych <= '\'') - goto yy1669; + goto yy1666; if (yych <= 0xC1) - goto yy1631; + goto yy1628; if (yych <= 0xDF) - goto yy1662; - goto yy1663; + goto yy1659; + goto yy1660; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1668; - goto yy1664; + goto yy1665; + goto yy1661; } else { if (yych <= 0xF0) - goto yy1665; + goto yy1662; if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1660; + goto yy1657; } if (yych <= 0xDF) { if (yych <= '\'') { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= ' ') - goto yy1694; + goto yy1691; if (yych <= '"') - goto yy1671; - goto yy1669; + goto yy1668; + goto yy1666; } else { if (yych == '>') - goto yy1645; + goto yy1642; if (yych <= 0xC1) - goto yy1631; - goto yy1662; + goto yy1628; + goto yy1659; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1663; + goto yy1660; if (yych == 0xED) - goto yy1668; - goto yy1664; + goto yy1665; + goto yy1661; } else { if (yych <= 0xF0) - goto yy1665; + goto yy1662; if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } - yy1660: + yy1657: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1660; + goto yy1657; } if (yych <= 0xE0) { if (yych <= '=') { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= ' ') - goto yy1688; - goto yy1631; + goto yy1685; + goto yy1628; } else { if (yych <= '>') - goto yy1645; + goto yy1642; if (yych <= 0xC1) - goto yy1631; + goto yy1628; if (yych >= 0xE0) - goto yy1663; + goto yy1660; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1668; - goto yy1664; + goto yy1665; + goto yy1661; } else { if (yych <= 0xF0) - goto yy1665; + goto yy1662; if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } - yy1662: + yy1659: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1660; - goto yy1631; - yy1663: + goto yy1657; + goto yy1628; + yy1660: ++p; yych = *p; if (yych <= 0x9F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1662; - goto yy1631; - yy1664: + goto yy1659; + goto yy1628; + yy1661: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1662; - goto yy1631; - yy1665: + goto yy1659; + goto yy1628; + yy1662: ++p; yych = *p; if (yych <= 0x8F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1664; - goto yy1631; - yy1666: + goto yy1661; + goto yy1628; + yy1663: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1664; - goto yy1631; - yy1667: + goto yy1661; + goto yy1628; + yy1664: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x8F) - goto yy1664; - goto yy1631; - yy1668: + goto yy1661; + goto yy1628; + yy1665: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x9F) - goto yy1662; - goto yy1631; - yy1669: + goto yy1659; + goto yy1628; + yy1666: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1669; + goto yy1666; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= '\'') - goto yy1680; - goto yy1631; + goto yy1677; + goto yy1628; } else { if (yych <= 0xDF) - goto yy1681; + goto yy1678; if (yych <= 0xE0) - goto yy1682; - goto yy1683; + goto yy1679; + goto yy1680; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1687; + goto yy1684; if (yych <= 0xEF) - goto yy1683; - goto yy1684; + goto yy1680; + goto yy1681; } else { if (yych <= 0xF3) - goto yy1685; + goto yy1682; if (yych <= 0xF4) - goto yy1686; - goto yy1631; + goto yy1683; + goto yy1628; } } - yy1671: + yy1668: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1671; + goto yy1668; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= '"') - goto yy1680; - goto yy1631; + goto yy1677; + goto yy1628; } else { if (yych <= 0xDF) - goto yy1673; + goto yy1670; if (yych <= 0xE0) - goto yy1674; - goto yy1675; + goto yy1671; + goto yy1672; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1679; + goto yy1676; if (yych <= 0xEF) - goto yy1675; - goto yy1676; + goto yy1672; + goto yy1673; } else { if (yych <= 0xF3) - goto yy1677; + goto yy1674; if (yych <= 0xF4) - goto yy1678; - goto yy1631; + goto yy1675; + goto yy1628; } } - yy1673: + yy1670: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1671; - goto yy1631; - yy1674: + goto yy1668; + goto yy1628; + yy1671: ++p; yych = *p; if (yych <= 0x9F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1673; - goto yy1631; - yy1675: + goto yy1670; + goto yy1628; + yy1672: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1673; - goto yy1631; - yy1676: + goto yy1670; + goto yy1628; + yy1673: ++p; yych = *p; if (yych <= 0x8F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1675; - goto yy1631; - yy1677: + goto yy1672; + goto yy1628; + yy1674: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1675; - goto yy1631; - yy1678: + goto yy1672; + goto yy1628; + yy1675: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x8F) - goto yy1675; - goto yy1631; - yy1679: + goto yy1672; + goto yy1628; + yy1676: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x9F) - goto yy1673; - goto yy1631; - yy1680: + goto yy1670; + goto yy1628; + yy1677: ++p; yych = *p; if (yych <= ' ') { if (yych <= 0x08) - goto yy1631; + goto yy1628; if (yych <= '\r') - goto yy1651; + goto yy1648; if (yych <= 0x1F) - goto yy1631; - goto yy1651; + goto yy1628; + goto yy1648; } else { if (yych <= '/') { if (yych <= '.') - goto yy1631; - goto yy1653; + goto yy1628; + goto yy1650; } else { if (yych == '>') - goto yy1645; - goto yy1631; + goto yy1642; + goto yy1628; } } - yy1681: + yy1678: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1669; - goto yy1631; - yy1682: + goto yy1666; + goto yy1628; + yy1679: ++p; yych = *p; if (yych <= 0x9F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1681; - goto yy1631; - yy1683: + goto yy1678; + goto yy1628; + yy1680: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1681; - goto yy1631; - yy1684: + goto yy1678; + goto yy1628; + yy1681: ++p; yych = *p; if (yych <= 0x8F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1683; - goto yy1631; - yy1685: + goto yy1680; + goto yy1628; + yy1682: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0xBF) - goto yy1683; - goto yy1631; - yy1686: + goto yy1680; + goto yy1628; + yy1683: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x8F) - goto yy1683; - goto yy1631; - yy1687: + goto yy1680; + goto yy1628; + yy1684: ++p; yych = *p; if (yych <= 0x7F) - goto yy1631; + goto yy1628; if (yych <= 0x9F) - goto yy1681; - goto yy1631; - yy1688: + goto yy1678; + goto yy1628; + yy1685: ++p; yych = *p; if (yych <= '@') { if (yych <= '"') { if (yych <= '\r') { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= 0x08) - goto yy1660; - goto yy1688; + goto yy1657; + goto yy1685; } else { if (yych == ' ') - goto yy1688; + goto yy1685; if (yych <= '!') - goto yy1660; - goto yy1631; + goto yy1657; + goto yy1628; } } else { if (yych <= ':') { if (yych == '\'') - goto yy1631; + goto yy1628; if (yych <= '9') - goto yy1660; + goto yy1657; } else { if (yych <= ';') - goto yy1660; + goto yy1657; if (yych <= '=') - goto yy1631; + goto yy1628; if (yych <= '>') - goto yy1645; - goto yy1660; + goto yy1642; + goto yy1657; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy1690; + goto yy1687; if (yych <= '^') - goto yy1660; + goto yy1657; if (yych >= '`') - goto yy1631; + goto yy1628; } else { if (yych <= 'z') - goto yy1690; + goto yy1687; if (yych <= 0x7F) - goto yy1660; + goto yy1657; if (yych <= 0xC1) - goto yy1631; - goto yy1662; + goto yy1628; + goto yy1659; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1663; + goto yy1660; if (yych == 0xED) - goto yy1668; - goto yy1664; + goto yy1665; + goto yy1661; } else { if (yych <= 0xF0) - goto yy1665; + goto yy1662; if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } } - yy1690: + yy1687: ++p; yych = *p; if (yych <= '>') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= 0x08) - goto yy1660; + goto yy1657; if (yych >= 0x0E) - goto yy1660; + goto yy1657; } else { if (yych <= ' ') - goto yy1692; + goto yy1689; if (yych == '"') - goto yy1631; - goto yy1660; + goto yy1628; + goto yy1657; } } else { if (yych <= '/') { if (yych <= '\'') - goto yy1631; + goto yy1628; if (yych <= ',') - goto yy1660; + goto yy1657; if (yych <= '.') - goto yy1690; - goto yy1660; + goto yy1687; + goto yy1657; } else { if (yych <= ';') { if (yych <= ':') - goto yy1690; - goto yy1660; + goto yy1687; + goto yy1657; } else { if (yych <= '<') - goto yy1631; + goto yy1628; if (yych <= '=') - goto yy1658; - goto yy1645; + goto yy1655; + goto yy1642; } } } @@ -19938,188 +19901,188 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '_') { if (yych <= '@') - goto yy1660; + goto yy1657; if (yych <= 'Z') - goto yy1690; + goto yy1687; if (yych <= '^') - goto yy1660; - goto yy1690; + goto yy1657; + goto yy1687; } else { if (yych <= '`') - goto yy1631; + goto yy1628; if (yych <= 'z') - goto yy1690; + goto yy1687; if (yych <= 0x7F) - goto yy1660; - goto yy1631; + goto yy1657; + goto yy1628; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1662; + goto yy1659; if (yych <= 0xE0) - goto yy1663; + goto yy1660; if (yych <= 0xEC) - goto yy1664; - goto yy1668; + goto yy1661; + goto yy1665; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1664; - goto yy1665; + goto yy1661; + goto yy1662; } else { if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } } } - yy1692: + yy1689: ++p; yych = *p; if (yych <= '@') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= 0x08) - goto yy1660; + goto yy1657; if (yych <= '\r') - goto yy1692; - goto yy1660; + goto yy1689; + goto yy1657; } else { if (yych <= ' ') - goto yy1692; + goto yy1689; if (yych == '"') - goto yy1631; - goto yy1660; + goto yy1628; + goto yy1657; } } else { if (yych <= ';') { if (yych <= '\'') - goto yy1631; + goto yy1628; if (yych == ':') - goto yy1690; - goto yy1660; + goto yy1687; + goto yy1657; } else { if (yych <= '<') - goto yy1631; + goto yy1628; if (yych <= '=') - goto yy1658; + goto yy1655; if (yych <= '>') - goto yy1645; - goto yy1660; + goto yy1642; + goto yy1657; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy1690; + goto yy1687; if (yych <= '^') - goto yy1660; + goto yy1657; if (yych <= '_') - goto yy1690; - goto yy1631; + goto yy1687; + goto yy1628; } else { if (yych <= 'z') - goto yy1690; + goto yy1687; if (yych <= 0x7F) - goto yy1660; + goto yy1657; if (yych <= 0xC1) - goto yy1631; - goto yy1662; + goto yy1628; + goto yy1659; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1663; + goto yy1660; if (yych == 0xED) - goto yy1668; - goto yy1664; + goto yy1665; + goto yy1661; } else { if (yych <= 0xF0) - goto yy1665; + goto yy1662; if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } } - yy1694: + yy1691: ++p; yych = *p; if (yych <= '@') { if (yych <= '"') { if (yych <= '\r') { if (yych <= 0x00) - goto yy1631; + goto yy1628; if (yych <= 0x08) - goto yy1660; - goto yy1694; + goto yy1657; + goto yy1691; } else { if (yych == ' ') - goto yy1694; + goto yy1691; if (yych <= '!') - goto yy1660; - goto yy1671; + goto yy1657; + goto yy1668; } } else { if (yych <= ':') { if (yych == '\'') - goto yy1669; + goto yy1666; if (yych <= '9') - goto yy1660; - goto yy1690; + goto yy1657; + goto yy1687; } else { if (yych <= ';') - goto yy1660; + goto yy1657; if (yych <= '=') - goto yy1631; + goto yy1628; if (yych <= '>') - goto yy1645; - goto yy1660; + goto yy1642; + goto yy1657; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy1690; + goto yy1687; if (yych <= '^') - goto yy1660; + goto yy1657; if (yych <= '_') - goto yy1690; - goto yy1631; + goto yy1687; + goto yy1628; } else { if (yych <= 'z') - goto yy1690; + goto yy1687; if (yych <= 0x7F) - goto yy1660; + goto yy1657; if (yych <= 0xC1) - goto yy1631; - goto yy1662; + goto yy1628; + goto yy1659; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1663; + goto yy1660; if (yych == 0xED) - goto yy1668; - goto yy1664; + goto yy1665; + goto yy1661; } else { if (yych <= 0xF0) - goto yy1665; + goto yy1662; if (yych <= 0xF3) - goto yy1666; + goto yy1663; if (yych <= 0xF4) - goto yy1667; - goto yy1631; + goto yy1664; + goto yy1628; } } } @@ -20159,813 +20122,813 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych != '\n') - goto yy1699; + goto yy1696; } else { if (yych <= '<') - goto yy1700; + goto yy1697; if (yych <= 0x7F) - goto yy1699; + goto yy1696; if (yych >= 0xC2) - goto yy1701; + goto yy1698; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1703; + goto yy1700; if (yych == 0xED) - goto yy1708; - goto yy1704; + goto yy1705; + goto yy1701; } else { if (yych <= 0xF0) - goto yy1705; + goto yy1702; if (yych <= 0xF3) - goto yy1706; + goto yy1703; if (yych <= 0xF4) - goto yy1707; + goto yy1704; } } - yy1698 : { return 0; } - yy1699: + yy1695 : { return 0; } + yy1696: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1698; - goto yy1713; + goto yy1695; + goto yy1710; } else { if (yych <= 0xC1) - goto yy1698; + goto yy1695; if (yych <= 0xF4) - goto yy1713; - goto yy1698; + goto yy1710; + goto yy1695; } - yy1700: + yy1697: yyaccept = 0; yych = *(marker = ++p); if (yych <= '/') { if (yych == '\n') - goto yy1698; + goto yy1695; if (yych <= '.') - goto yy1713; - goto yy1709; + goto yy1710; + goto yy1706; } else { if (yych <= 0x7F) - goto yy1713; + goto yy1710; if (yych <= 0xC1) - goto yy1698; + goto yy1695; if (yych <= 0xF4) - goto yy1713; - goto yy1698; + goto yy1710; + goto yy1695; } - yy1701: + yy1698: yych = *++p; if (yych <= 0x7F) - goto yy1702; - if (yych <= 0xBF) goto yy1699; - yy1702: + if (yych <= 0xBF) + goto yy1696; + yy1699: p = marker; if (yyaccept == 0) { - goto yy1698; + goto yy1695; } else { - goto yy1730; + goto yy1727; } - yy1703: + yy1700: yych = *++p; if (yych <= 0x9F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1701; - goto yy1702; - yy1704: + goto yy1698; + goto yy1699; + yy1701: yych = *++p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1701; - goto yy1702; - yy1705: + goto yy1698; + goto yy1699; + yy1702: yych = *++p; if (yych <= 0x8F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1704; - goto yy1702; - yy1706: + goto yy1701; + goto yy1699; + yy1703: yych = *++p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1704; - goto yy1702; - yy1707: + goto yy1701; + goto yy1699; + yy1704: yych = *++p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0x8F) - goto yy1704; - goto yy1702; - yy1708: + goto yy1701; + goto yy1699; + yy1705: yych = *++p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0x9F) - goto yy1701; - goto yy1702; - yy1709: + goto yy1698; + goto yy1699; + yy1706: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 's') { if (yych <= 'R') { if (yych <= '\n') { if (yych <= '\t') - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } else { if (yych == 'P') - goto yy1721; - goto yy1712; + goto yy1718; + goto yy1709; } } else { if (yych <= 'o') { if (yych <= 'S') - goto yy1722; - goto yy1712; + goto yy1719; + goto yy1709; } else { if (yych <= 'p') - goto yy1721; + goto yy1718; if (yych <= 'r') - goto yy1712; - goto yy1722; + goto yy1709; + goto yy1719; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } else { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; - goto yy1716; + goto yy1712; + goto yy1713; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1720; + goto yy1717; if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1710: + yy1707: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xDF) { if (yych <= '.') { if (yych == '\n') - goto yy1702; + goto yy1699; } else { if (yych <= '/') - goto yy1709; + goto yy1706; if (yych <= 0x7F) - goto yy1712; + goto yy1709; if (yych <= 0xC1) - goto yy1702; - goto yy1714; + goto yy1699; + goto yy1711; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych == 0xED) - goto yy1720; - goto yy1716; + goto yy1717; + goto yy1713; } else { if (yych <= 0xF0) - goto yy1717; + goto yy1714; if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } - yy1712: + yy1709: ++p; yych = *p; - yy1713: + yy1710: if (yybm[0 + yych] & 128) { - goto yy1712; + goto yy1709; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1702; + goto yy1699; if (yych <= '<') - goto yy1710; - goto yy1702; + goto yy1707; + goto yy1699; } else { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; - goto yy1716; + goto yy1712; + goto yy1713; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1720; + goto yy1717; if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } - yy1714: + yy1711: ++p; yych = *p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1712; - goto yy1702; - yy1715: + goto yy1709; + goto yy1699; + yy1712: ++p; yych = *p; if (yych <= 0x9F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1714; - goto yy1702; - yy1716: + goto yy1711; + goto yy1699; + yy1713: ++p; yych = *p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1714; - goto yy1702; - yy1717: + goto yy1711; + goto yy1699; + yy1714: ++p; yych = *p; if (yych <= 0x8F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1716; - goto yy1702; - yy1718: + goto yy1713; + goto yy1699; + yy1715: ++p; yych = *p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0xBF) - goto yy1716; - goto yy1702; - yy1719: + goto yy1713; + goto yy1699; + yy1716: ++p; yych = *p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0x8F) - goto yy1716; - goto yy1702; - yy1720: + goto yy1713; + goto yy1699; + yy1717: ++p; yych = *p; if (yych <= 0x7F) - goto yy1702; + goto yy1699; if (yych <= 0x9F) - goto yy1714; - goto yy1702; - yy1721: + goto yy1711; + goto yy1699; + yy1718: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'Q') - goto yy1712; - goto yy1733; + goto yy1709; + goto yy1730; } else { if (yych == 'r') - goto yy1733; + goto yy1730; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1722: + yy1719: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 't') { if (yych <= 'S') { if (yych <= '\n') { if (yych <= '\t') - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } else { if (yych == 'C') - goto yy1724; - goto yy1712; + goto yy1721; + goto yy1709; } } else { if (yych <= 'b') { if (yych >= 'U') - goto yy1712; + goto yy1709; } else { if (yych <= 'c') - goto yy1724; + goto yy1721; if (yych <= 's') - goto yy1712; + goto yy1709; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } else { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; - goto yy1716; + goto yy1712; + goto yy1713; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1720; + goto yy1717; if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'Y') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'X') - goto yy1712; - goto yy1731; + goto yy1709; + goto yy1728; } else { if (yych == 'y') - goto yy1731; + goto yy1728; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1724: + yy1721: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'Q') - goto yy1712; + goto yy1709; } else { if (yych == 'r') - goto yy1725; + goto yy1722; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1725: + yy1722: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'I') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'H') - goto yy1712; + goto yy1709; } else { if (yych == 'i') - goto yy1726; + goto yy1723; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1726: + yy1723: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'P') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'O') - goto yy1712; + goto yy1709; } else { if (yych == 'p') - goto yy1727; + goto yy1724; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1727: + yy1724: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'T') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'S') - goto yy1712; + goto yy1709; } else { if (yych == 't') - goto yy1728; + goto yy1725; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1728: + yy1725: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1702; - goto yy1712; + goto yy1699; + goto yy1709; } else { if (yych <= '>') - goto yy1729; + goto yy1726; if (yych <= 0x7F) - goto yy1712; + goto yy1709; if (yych <= 0xC1) - goto yy1702; - goto yy1714; + goto yy1699; + goto yy1711; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych == 0xED) - goto yy1720; - goto yy1716; + goto yy1717; + goto yy1713; } else { if (yych <= 0xF0) - goto yy1717; + goto yy1714; if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } - yy1729: + yy1726: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1712; + goto yy1709; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1730; + goto yy1727; if (yych <= '<') - goto yy1710; + goto yy1707; } else { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; - goto yy1716; + goto yy1712; + goto yy1713; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1720; + goto yy1717; if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; + goto yy1716; } } - yy1730 : { return (bufsize_t)(p - start); } - yy1731: + yy1727 : { return (bufsize_t)(p - start); } + yy1728: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'L') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'K') - goto yy1712; + goto yy1709; } else { if (yych == 'l') - goto yy1732; + goto yy1729; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1732: + yy1729: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'E') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'D') - goto yy1712; - goto yy1728; + goto yy1709; + goto yy1725; } else { if (yych == 'e') - goto yy1728; + goto yy1725; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } - yy1733: + yy1730: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1710; + goto yy1707; } if (yych <= 0xC1) { if (yych <= 'E') { if (yych == '\n') - goto yy1702; + goto yy1699; if (yych <= 'D') - goto yy1712; - goto yy1728; + goto yy1709; + goto yy1725; } else { if (yych == 'e') - goto yy1728; + goto yy1725; if (yych <= 0x7F) - goto yy1712; - goto yy1702; + goto yy1709; + goto yy1699; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1714; + goto yy1711; if (yych <= 0xE0) - goto yy1715; + goto yy1712; if (yych <= 0xEC) - goto yy1716; - goto yy1720; + goto yy1713; + goto yy1717; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1716; - goto yy1717; + goto yy1713; + goto yy1714; } else { if (yych <= 0xF3) - goto yy1718; + goto yy1715; if (yych <= 0xF4) - goto yy1719; - goto yy1702; + goto yy1716; + goto yy1699; } } } @@ -21005,316 +20968,316 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ',') { if (yych != '\n') - goto yy1737; + goto yy1734; } else { if (yych <= '-') - goto yy1738; + goto yy1735; if (yych <= 0x7F) - goto yy1737; + goto yy1734; if (yych >= 0xC2) - goto yy1739; + goto yy1736; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1741; + goto yy1738; if (yych == 0xED) - goto yy1746; - goto yy1742; + goto yy1743; + goto yy1739; } else { if (yych <= 0xF0) - goto yy1743; + goto yy1740; if (yych <= 0xF3) - goto yy1744; + goto yy1741; if (yych <= 0xF4) - goto yy1745; + goto yy1742; } } - yy1736 : { return 0; } - yy1737: + yy1733 : { return 0; } + yy1734: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1736; - goto yy1750; + goto yy1733; + goto yy1747; } else { if (yych <= 0xC1) - goto yy1736; + goto yy1733; if (yych <= 0xF4) - goto yy1750; - goto yy1736; + goto yy1747; + goto yy1733; } - yy1738: + yy1735: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1747; + goto yy1744; } if (yych <= 0x7F) { if (yych == '\n') - goto yy1736; - goto yy1750; + goto yy1733; + goto yy1747; } else { if (yych <= 0xC1) - goto yy1736; + goto yy1733; if (yych <= 0xF4) - goto yy1750; - goto yy1736; + goto yy1747; + goto yy1733; } - yy1739: + yy1736: yych = *++p; if (yych <= 0x7F) - goto yy1740; - if (yych <= 0xBF) goto yy1737; - yy1740: + if (yych <= 0xBF) + goto yy1734; + yy1737: p = marker; if (yyaccept == 0) { - goto yy1736; + goto yy1733; } else { - goto yy1760; + goto yy1757; } - yy1741: + yy1738: yych = *++p; if (yych <= 0x9F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1739; - goto yy1740; - yy1742: + goto yy1736; + goto yy1737; + yy1739: yych = *++p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1739; - goto yy1740; - yy1743: + goto yy1736; + goto yy1737; + yy1740: yych = *++p; if (yych <= 0x8F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1742; - goto yy1740; - yy1744: + goto yy1739; + goto yy1737; + yy1741: yych = *++p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1742; - goto yy1740; - yy1745: + goto yy1739; + goto yy1737; + yy1742: yych = *++p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0x8F) - goto yy1742; - goto yy1740; - yy1746: + goto yy1739; + goto yy1737; + yy1743: yych = *++p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0x9F) - goto yy1739; - goto yy1740; - yy1747: + goto yy1736; + goto yy1737; + yy1744: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1747; + goto yy1744; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1740; + goto yy1737; } else { if (yych <= '>') - goto yy1759; + goto yy1756; if (yych <= 0x7F) - goto yy1749; + goto yy1746; if (yych <= 0xC1) - goto yy1740; - goto yy1751; + goto yy1737; + goto yy1748; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1752; + goto yy1749; if (yych == 0xED) - goto yy1757; - goto yy1753; + goto yy1754; + goto yy1750; } else { if (yych <= 0xF0) - goto yy1754; + goto yy1751; if (yych <= 0xF3) - goto yy1755; + goto yy1752; if (yych <= 0xF4) - goto yy1756; - goto yy1740; + goto yy1753; + goto yy1737; } } - yy1749: + yy1746: ++p; yych = *p; - yy1750: + yy1747: if (yybm[0 + yych] & 128) { - goto yy1749; + goto yy1746; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1740; + goto yy1737; if (yych <= '-') - goto yy1758; - goto yy1740; + goto yy1755; + goto yy1737; } else { if (yych <= 0xDF) - goto yy1751; + goto yy1748; if (yych <= 0xE0) - goto yy1752; - goto yy1753; + goto yy1749; + goto yy1750; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1757; + goto yy1754; if (yych <= 0xEF) - goto yy1753; - goto yy1754; + goto yy1750; + goto yy1751; } else { if (yych <= 0xF3) - goto yy1755; + goto yy1752; if (yych <= 0xF4) - goto yy1756; - goto yy1740; + goto yy1753; + goto yy1737; } } - yy1751: + yy1748: ++p; yych = *p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1749; - goto yy1740; - yy1752: + goto yy1746; + goto yy1737; + yy1749: ++p; yych = *p; if (yych <= 0x9F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1751; - goto yy1740; - yy1753: + goto yy1748; + goto yy1737; + yy1750: ++p; yych = *p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1751; - goto yy1740; - yy1754: + goto yy1748; + goto yy1737; + yy1751: ++p; yych = *p; if (yych <= 0x8F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1753; - goto yy1740; - yy1755: + goto yy1750; + goto yy1737; + yy1752: ++p; yych = *p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0xBF) - goto yy1753; - goto yy1740; - yy1756: + goto yy1750; + goto yy1737; + yy1753: ++p; yych = *p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0x8F) - goto yy1753; - goto yy1740; - yy1757: + goto yy1750; + goto yy1737; + yy1754: ++p; yych = *p; if (yych <= 0x7F) - goto yy1740; + goto yy1737; if (yych <= 0x9F) - goto yy1751; - goto yy1740; - yy1758: + goto yy1748; + goto yy1737; + yy1755: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1749; + goto yy1746; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1740; + goto yy1737; if (yych <= '-') - goto yy1747; - goto yy1740; + goto yy1744; + goto yy1737; } else { if (yych <= 0xDF) - goto yy1751; + goto yy1748; if (yych <= 0xE0) - goto yy1752; - goto yy1753; + goto yy1749; + goto yy1750; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1757; + goto yy1754; if (yych <= 0xEF) - goto yy1753; - goto yy1754; + goto yy1750; + goto yy1751; } else { if (yych <= 0xF3) - goto yy1755; + goto yy1752; if (yych <= 0xF4) - goto yy1756; - goto yy1740; + goto yy1753; + goto yy1737; } } - yy1759: + yy1756: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1749; + goto yy1746; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1760; + goto yy1757; if (yych <= '-') - goto yy1758; + goto yy1755; } else { if (yych <= 0xDF) - goto yy1751; + goto yy1748; if (yych <= 0xE0) - goto yy1752; - goto yy1753; + goto yy1749; + goto yy1750; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1757; + goto yy1754; if (yych <= 0xEF) - goto yy1753; - goto yy1754; + goto yy1750; + goto yy1751; } else { if (yych <= 0xF3) - goto yy1755; + goto yy1752; if (yych <= 0xF4) - goto yy1756; + goto yy1753; } } - yy1760 : { return (bufsize_t)(p - start); } + yy1757 : { return (bufsize_t)(p - start); } } } @@ -21351,282 +21314,282 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '>') { if (yych != '\n') - goto yy1764; + goto yy1761; } else { if (yych <= '?') - goto yy1765; + goto yy1762; if (yych <= 0x7F) - goto yy1764; + goto yy1761; if (yych >= 0xC2) - goto yy1766; + goto yy1763; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1768; + goto yy1765; if (yych == 0xED) - goto yy1773; - goto yy1769; + goto yy1770; + goto yy1766; } else { if (yych <= 0xF0) - goto yy1770; + goto yy1767; if (yych <= 0xF3) - goto yy1771; + goto yy1768; if (yych <= 0xF4) - goto yy1772; + goto yy1769; } } - yy1763 : { return 0; } - yy1764: + yy1760 : { return 0; } + yy1761: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1763; - goto yy1779; + goto yy1760; + goto yy1776; } else { if (yych <= 0xC1) - goto yy1763; + goto yy1760; if (yych <= 0xF4) - goto yy1779; - goto yy1763; + goto yy1776; + goto yy1760; } - yy1765: + yy1762: yyaccept = 0; yych = *(marker = ++p); if (yych <= '>') { if (yych == '\n') - goto yy1763; + goto yy1760; if (yych <= '=') - goto yy1779; - goto yy1774; + goto yy1776; + goto yy1771; } else { if (yych <= 0x7F) - goto yy1779; + goto yy1776; if (yych <= 0xC1) - goto yy1763; + goto yy1760; if (yych <= 0xF4) - goto yy1779; - goto yy1763; + goto yy1776; + goto yy1760; } - yy1766: + yy1763: yych = *++p; if (yych <= 0x7F) - goto yy1767; - if (yych <= 0xBF) goto yy1764; - yy1767: + if (yych <= 0xBF) + goto yy1761; + yy1764: p = marker; if (yyaccept == 0) { - goto yy1763; + goto yy1760; } else { - goto yy1775; + goto yy1772; } - yy1768: + yy1765: yych = *++p; if (yych <= 0x9F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1766; - goto yy1767; - yy1769: + goto yy1763; + goto yy1764; + yy1766: yych = *++p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1766; - goto yy1767; - yy1770: + goto yy1763; + goto yy1764; + yy1767: yych = *++p; if (yych <= 0x8F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1769; - goto yy1767; - yy1771: + goto yy1766; + goto yy1764; + yy1768: yych = *++p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1769; - goto yy1767; - yy1772: + goto yy1766; + goto yy1764; + yy1769: yych = *++p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0x8F) - goto yy1769; - goto yy1767; - yy1773: + goto yy1766; + goto yy1764; + yy1770: yych = *++p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0x9F) - goto yy1766; - goto yy1767; - yy1774: + goto yy1763; + goto yy1764; + yy1771: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1778; + goto yy1775; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1775; + goto yy1772; if (yych <= '?') - goto yy1776; + goto yy1773; } else { if (yych <= 0xDF) - goto yy1780; + goto yy1777; if (yych <= 0xE0) - goto yy1781; - goto yy1782; + goto yy1778; + goto yy1779; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1786; + goto yy1783; if (yych <= 0xEF) - goto yy1782; - goto yy1783; + goto yy1779; + goto yy1780; } else { if (yych <= 0xF3) - goto yy1784; + goto yy1781; if (yych <= 0xF4) - goto yy1785; + goto yy1782; } } - yy1775 : { return (bufsize_t)(p - start); } - yy1776: + yy1772 : { return (bufsize_t)(p - start); } + yy1773: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1776; + goto yy1773; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1767; + goto yy1764; } else { if (yych <= '>') - goto yy1774; + goto yy1771; if (yych <= 0x7F) - goto yy1778; + goto yy1775; if (yych <= 0xC1) - goto yy1767; - goto yy1780; + goto yy1764; + goto yy1777; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1781; + goto yy1778; if (yych == 0xED) - goto yy1786; - goto yy1782; + goto yy1783; + goto yy1779; } else { if (yych <= 0xF0) - goto yy1783; + goto yy1780; if (yych <= 0xF3) - goto yy1784; + goto yy1781; if (yych <= 0xF4) - goto yy1785; - goto yy1767; + goto yy1782; + goto yy1764; } } - yy1778: + yy1775: ++p; yych = *p; - yy1779: + yy1776: if (yybm[0 + yych] & 128) { - goto yy1778; + goto yy1775; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1767; + goto yy1764; if (yych <= '?') - goto yy1776; - goto yy1767; + goto yy1773; + goto yy1764; } else { if (yych <= 0xDF) - goto yy1780; + goto yy1777; if (yych <= 0xE0) - goto yy1781; - goto yy1782; + goto yy1778; + goto yy1779; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1786; + goto yy1783; if (yych <= 0xEF) - goto yy1782; - goto yy1783; + goto yy1779; + goto yy1780; } else { if (yych <= 0xF3) - goto yy1784; + goto yy1781; if (yych <= 0xF4) - goto yy1785; - goto yy1767; + goto yy1782; + goto yy1764; } } - yy1780: + yy1777: ++p; yych = *p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1778; - goto yy1767; - yy1781: + goto yy1775; + goto yy1764; + yy1778: ++p; yych = *p; if (yych <= 0x9F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1780; - goto yy1767; - yy1782: + goto yy1777; + goto yy1764; + yy1779: ++p; yych = *p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1780; - goto yy1767; - yy1783: + goto yy1777; + goto yy1764; + yy1780: ++p; yych = *p; if (yych <= 0x8F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1782; - goto yy1767; - yy1784: + goto yy1779; + goto yy1764; + yy1781: ++p; yych = *p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0xBF) - goto yy1782; - goto yy1767; - yy1785: + goto yy1779; + goto yy1764; + yy1782: ++p; yych = *p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0x8F) - goto yy1782; - goto yy1767; - yy1786: + goto yy1779; + goto yy1764; + yy1783: ++p; yych = *p; if (yych <= 0x7F) - goto yy1767; + goto yy1764; if (yych <= 0x9F) - goto yy1780; - goto yy1767; + goto yy1777; + goto yy1764; } } @@ -21663,242 +21626,242 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '=') { if (yych != '\n') - goto yy1790; + goto yy1787; } else { if (yych <= '>') - goto yy1791; + goto yy1788; if (yych <= 0x7F) - goto yy1790; + goto yy1787; if (yych >= 0xC2) - goto yy1793; + goto yy1790; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1795; + goto yy1792; if (yych == 0xED) - goto yy1800; - goto yy1796; + goto yy1797; + goto yy1793; } else { if (yych <= 0xF0) - goto yy1797; + goto yy1794; if (yych <= 0xF3) - goto yy1798; + goto yy1795; if (yych <= 0xF4) - goto yy1799; + goto yy1796; } } - yy1789 : { return 0; } - yy1790: + yy1786 : { return 0; } + yy1787: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1789; - goto yy1804; + goto yy1786; + goto yy1801; } else { if (yych <= 0xC1) - goto yy1789; + goto yy1786; if (yych <= 0xF4) - goto yy1804; - goto yy1789; + goto yy1801; + goto yy1786; } - yy1791: + yy1788: yyaccept = 1; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy1804; + goto yy1801; } else { if (yych <= 0xC1) - goto yy1792; + goto yy1789; if (yych <= 0xF4) - goto yy1804; + goto yy1801; } - yy1792 : { return (bufsize_t)(p - start); } - yy1793: + yy1789 : { return (bufsize_t)(p - start); } + yy1790: yych = *++p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1790; - yy1794: + goto yy1787; + yy1791: p = marker; if (yyaccept == 0) { - goto yy1789; + goto yy1786; } else { - goto yy1792; + goto yy1789; } - yy1795: + yy1792: yych = *++p; if (yych <= 0x9F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1793; - goto yy1794; - yy1796: + goto yy1790; + goto yy1791; + yy1793: yych = *++p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1793; - goto yy1794; - yy1797: + goto yy1790; + goto yy1791; + yy1794: yych = *++p; if (yych <= 0x8F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1796; - goto yy1794; - yy1798: + goto yy1793; + goto yy1791; + yy1795: yych = *++p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1796; - goto yy1794; - yy1799: + goto yy1793; + goto yy1791; + yy1796: yych = *++p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0x8F) - goto yy1796; - goto yy1794; - yy1800: + goto yy1793; + goto yy1791; + yy1797: yych = *++p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0x9F) - goto yy1793; - goto yy1794; - yy1801: + goto yy1790; + goto yy1791; + yy1798: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1803; + goto yy1800; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1792; + goto yy1789; if (yych <= '>') - goto yy1801; - goto yy1792; + goto yy1798; + goto yy1789; } else { if (yych <= 0xDF) - goto yy1805; + goto yy1802; if (yych <= 0xE0) - goto yy1806; - goto yy1807; + goto yy1803; + goto yy1804; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1811; + goto yy1808; if (yych <= 0xEF) - goto yy1807; - goto yy1808; + goto yy1804; + goto yy1805; } else { if (yych <= 0xF3) - goto yy1809; + goto yy1806; if (yych <= 0xF4) - goto yy1810; - goto yy1792; + goto yy1807; + goto yy1789; } } - yy1803: + yy1800: ++p; yych = *p; - yy1804: + yy1801: if (yybm[0 + yych] & 128) { - goto yy1803; + goto yy1800; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1794; + goto yy1791; if (yych <= '>') - goto yy1801; - goto yy1794; + goto yy1798; + goto yy1791; } else { if (yych <= 0xDF) - goto yy1805; + goto yy1802; if (yych <= 0xE0) - goto yy1806; - goto yy1807; + goto yy1803; + goto yy1804; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1811; + goto yy1808; if (yych <= 0xEF) - goto yy1807; - goto yy1808; + goto yy1804; + goto yy1805; } else { if (yych <= 0xF3) - goto yy1809; + goto yy1806; if (yych <= 0xF4) - goto yy1810; - goto yy1794; + goto yy1807; + goto yy1791; } } - yy1805: + yy1802: ++p; yych = *p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1803; - goto yy1794; - yy1806: + goto yy1800; + goto yy1791; + yy1803: ++p; yych = *p; if (yych <= 0x9F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1805; - goto yy1794; - yy1807: + goto yy1802; + goto yy1791; + yy1804: ++p; yych = *p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1805; - goto yy1794; - yy1808: + goto yy1802; + goto yy1791; + yy1805: ++p; yych = *p; if (yych <= 0x8F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1807; - goto yy1794; - yy1809: + goto yy1804; + goto yy1791; + yy1806: ++p; yych = *p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0xBF) - goto yy1807; - goto yy1794; - yy1810: + goto yy1804; + goto yy1791; + yy1807: ++p; yych = *p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0x8F) - goto yy1807; - goto yy1794; - yy1811: + goto yy1804; + goto yy1791; + yy1808: ++p; yych = *p; if (yych <= 0x7F) - goto yy1794; + goto yy1791; if (yych <= 0x9F) - goto yy1805; - goto yy1794; + goto yy1802; + goto yy1791; } } @@ -21935,316 +21898,316 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '\\') { if (yych != '\n') - goto yy1815; + goto yy1812; } else { if (yych <= ']') - goto yy1816; + goto yy1813; if (yych <= 0x7F) - goto yy1815; + goto yy1812; if (yych >= 0xC2) - goto yy1817; + goto yy1814; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1819; + goto yy1816; if (yych == 0xED) - goto yy1824; - goto yy1820; + goto yy1821; + goto yy1817; } else { if (yych <= 0xF0) - goto yy1821; + goto yy1818; if (yych <= 0xF3) - goto yy1822; + goto yy1819; if (yych <= 0xF4) - goto yy1823; + goto yy1820; } } - yy1814 : { return 0; } - yy1815: + yy1811 : { return 0; } + yy1812: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1814; - goto yy1828; + goto yy1811; + goto yy1825; } else { if (yych <= 0xC1) - goto yy1814; + goto yy1811; if (yych <= 0xF4) - goto yy1828; - goto yy1814; + goto yy1825; + goto yy1811; } - yy1816: + yy1813: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1825; + goto yy1822; } if (yych <= 0x7F) { if (yych == '\n') - goto yy1814; - goto yy1828; + goto yy1811; + goto yy1825; } else { if (yych <= 0xC1) - goto yy1814; + goto yy1811; if (yych <= 0xF4) - goto yy1828; - goto yy1814; + goto yy1825; + goto yy1811; } - yy1817: + yy1814: yych = *++p; if (yych <= 0x7F) - goto yy1818; - if (yych <= 0xBF) goto yy1815; - yy1818: + if (yych <= 0xBF) + goto yy1812; + yy1815: p = marker; if (yyaccept == 0) { - goto yy1814; + goto yy1811; } else { - goto yy1838; + goto yy1835; } - yy1819: + yy1816: yych = *++p; if (yych <= 0x9F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1817; - goto yy1818; - yy1820: + goto yy1814; + goto yy1815; + yy1817: yych = *++p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1817; - goto yy1818; - yy1821: + goto yy1814; + goto yy1815; + yy1818: yych = *++p; if (yych <= 0x8F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1820; - goto yy1818; - yy1822: + goto yy1817; + goto yy1815; + yy1819: yych = *++p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1820; - goto yy1818; - yy1823: + goto yy1817; + goto yy1815; + yy1820: yych = *++p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0x8F) - goto yy1820; - goto yy1818; - yy1824: + goto yy1817; + goto yy1815; + yy1821: yych = *++p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0x9F) - goto yy1817; - goto yy1818; - yy1825: + goto yy1814; + goto yy1815; + yy1822: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1825; + goto yy1822; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1818; + goto yy1815; } else { if (yych <= '>') - goto yy1837; + goto yy1834; if (yych <= 0x7F) - goto yy1827; + goto yy1824; if (yych <= 0xC1) - goto yy1818; - goto yy1829; + goto yy1815; + goto yy1826; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1830; + goto yy1827; if (yych == 0xED) - goto yy1835; - goto yy1831; + goto yy1832; + goto yy1828; } else { if (yych <= 0xF0) - goto yy1832; + goto yy1829; if (yych <= 0xF3) - goto yy1833; + goto yy1830; if (yych <= 0xF4) - goto yy1834; - goto yy1818; + goto yy1831; + goto yy1815; } } - yy1827: + yy1824: ++p; yych = *p; - yy1828: + yy1825: if (yybm[0 + yych] & 128) { - goto yy1827; + goto yy1824; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1818; + goto yy1815; if (yych <= ']') - goto yy1836; - goto yy1818; + goto yy1833; + goto yy1815; } else { if (yych <= 0xDF) - goto yy1829; + goto yy1826; if (yych <= 0xE0) - goto yy1830; - goto yy1831; + goto yy1827; + goto yy1828; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1835; + goto yy1832; if (yych <= 0xEF) - goto yy1831; - goto yy1832; + goto yy1828; + goto yy1829; } else { if (yych <= 0xF3) - goto yy1833; + goto yy1830; if (yych <= 0xF4) - goto yy1834; - goto yy1818; + goto yy1831; + goto yy1815; } } - yy1829: + yy1826: ++p; yych = *p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1827; - goto yy1818; - yy1830: + goto yy1824; + goto yy1815; + yy1827: ++p; yych = *p; if (yych <= 0x9F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1829; - goto yy1818; - yy1831: + goto yy1826; + goto yy1815; + yy1828: ++p; yych = *p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1829; - goto yy1818; - yy1832: + goto yy1826; + goto yy1815; + yy1829: ++p; yych = *p; if (yych <= 0x8F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1831; - goto yy1818; - yy1833: + goto yy1828; + goto yy1815; + yy1830: ++p; yych = *p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0xBF) - goto yy1831; - goto yy1818; - yy1834: + goto yy1828; + goto yy1815; + yy1831: ++p; yych = *p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0x8F) - goto yy1831; - goto yy1818; - yy1835: + goto yy1828; + goto yy1815; + yy1832: ++p; yych = *p; if (yych <= 0x7F) - goto yy1818; + goto yy1815; if (yych <= 0x9F) - goto yy1829; - goto yy1818; - yy1836: + goto yy1826; + goto yy1815; + yy1833: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1827; + goto yy1824; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1818; + goto yy1815; if (yych <= ']') - goto yy1825; - goto yy1818; + goto yy1822; + goto yy1815; } else { if (yych <= 0xDF) - goto yy1829; + goto yy1826; if (yych <= 0xE0) - goto yy1830; - goto yy1831; + goto yy1827; + goto yy1828; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1835; + goto yy1832; if (yych <= 0xEF) - goto yy1831; - goto yy1832; + goto yy1828; + goto yy1829; } else { if (yych <= 0xF3) - goto yy1833; + goto yy1830; if (yych <= 0xF4) - goto yy1834; - goto yy1818; + goto yy1831; + goto yy1815; } } - yy1837: + yy1834: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1827; + goto yy1824; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1838; + goto yy1835; if (yych <= ']') - goto yy1836; + goto yy1833; } else { if (yych <= 0xDF) - goto yy1829; + goto yy1826; if (yych <= 0xE0) - goto yy1830; - goto yy1831; + goto yy1827; + goto yy1828; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1835; + goto yy1832; if (yych <= 0xEF) - goto yy1831; - goto yy1832; + goto yy1828; + goto yy1829; } else { if (yych <= 0xF3) - goto yy1833; + goto yy1830; if (yych <= 0xF4) - goto yy1834; + goto yy1831; } } - yy1838 : { return (bufsize_t)(p - start); } + yy1835 : { return (bufsize_t)(p - start); } } } @@ -22285,735 +22248,735 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\f') { if (yych == '\n') - goto yy1842; - goto yy1858; + goto yy1839; + goto yy1855; } else { if (yych <= '\r') - goto yy1844; + goto yy1841; if (yych <= 0x1F) - goto yy1858; - goto yy1844; + goto yy1855; + goto yy1841; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1846; + goto yy1843; if (yych <= '(') - goto yy1857; - goto yy1858; + goto yy1854; + goto yy1855; } else { if (yych == '<') - goto yy1845; - goto yy1846; + goto yy1842; + goto yy1843; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1855; + goto yy1852; if (yych <= 0x7F) - goto yy1846; + goto yy1843; } else { if (yych <= 0xDF) - goto yy1847; + goto yy1844; if (yych <= 0xE0) - goto yy1849; - goto yy1850; + goto yy1846; + goto yy1847; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1854; + goto yy1851; if (yych <= 0xEF) - goto yy1850; - goto yy1851; + goto yy1847; + goto yy1848; } else { if (yych <= 0xF3) - goto yy1852; + goto yy1849; if (yych <= 0xF4) - goto yy1853; + goto yy1850; } } } - yy1841 : { return (bufsize_t)(p - start); } - yy1842: + yy1838 : { return (bufsize_t)(p - start); } + yy1839: yyaccept = 0; marker = ++p; yych = *p; - yy1843: + yy1840: if (yybm[0 + yych] & 8) { - goto yy1842; + goto yy1839; } if (yych <= 0x7F) { if (yych <= ')') { if (yych <= 0x1F) - goto yy1841; + goto yy1838; if (yych <= '\'') - goto yy1870; + goto yy1867; if (yych <= '(') - goto yy1861; - goto yy1841; + goto yy1858; + goto yy1838; } else { if (yych <= '<') { if (yych <= ';') - goto yy1870; - goto yy1905; + goto yy1867; + goto yy1902; } else { if (yych == '\\') - goto yy1879; - goto yy1870; + goto yy1876; + goto yy1867; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych <= 0xC1) - goto yy1841; - goto yy1872; + goto yy1838; + goto yy1869; } else { if (yych <= 0xE0) - goto yy1873; + goto yy1870; if (yych <= 0xEC) - goto yy1874; - goto yy1878; + goto yy1871; + goto yy1875; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1874; - goto yy1875; + goto yy1871; + goto yy1872; } else { if (yych <= 0xF3) - goto yy1876; + goto yy1873; if (yych <= 0xF4) - goto yy1877; - goto yy1841; + goto yy1874; + goto yy1838; } } } - yy1844: + yy1841: yyaccept = 0; yych = *(marker = ++p); - goto yy1843; - yy1845: + goto yy1840; + yy1842: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1905; + goto yy1902; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1841; - goto yy1919; + goto yy1838; + goto yy1916; } else { if (yych <= '\n') - goto yy1841; + goto yy1838; if (yych <= '\f') - goto yy1919; - goto yy1841; + goto yy1916; + goto yy1838; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1919; - goto yy1917; + goto yy1916; + goto yy1914; } else { if (yych <= ')') - goto yy1919; + goto yy1916; if (yych <= '<') - goto yy1870; - goto yy1907; + goto yy1867; + goto yy1904; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1916; - goto yy1841; + goto yy1913; + goto yy1838; } else { if (yych <= 0xDF) - goto yy1909; + goto yy1906; if (yych <= 0xE0) - goto yy1910; - goto yy1911; + goto yy1907; + goto yy1908; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1915; + goto yy1912; if (yych <= 0xEF) - goto yy1911; - goto yy1912; + goto yy1908; + goto yy1909; } else { if (yych <= 0xF3) - goto yy1913; + goto yy1910; if (yych <= 0xF4) - goto yy1914; - goto yy1841; + goto yy1911; + goto yy1838; } } } - yy1846: + yy1843: yyaccept = 0; yych = *(marker = ++p); - goto yy1871; - yy1847: + goto yy1868; + yy1844: yych = *++p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1846; - yy1848: + goto yy1843; + yy1845: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1841; + goto yy1838; } else { - goto yy1856; + goto yy1853; } } else { - goto yy1908; + goto yy1905; } - yy1849: + yy1846: yych = *++p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1847; - goto yy1848; - yy1850: + goto yy1844; + goto yy1845; + yy1847: yych = *++p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1847; - goto yy1848; - yy1851: + goto yy1844; + goto yy1845; + yy1848: yych = *++p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1850; - goto yy1848; - yy1852: + goto yy1847; + goto yy1845; + yy1849: yych = *++p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1850; - goto yy1848; - yy1853: + goto yy1847; + goto yy1845; + yy1850: yych = *++p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1850; - goto yy1848; - yy1854: + goto yy1847; + goto yy1845; + yy1851: yych = *++p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1847; - goto yy1848; - yy1855: + goto yy1844; + goto yy1845; + yy1852: yyaccept = 1; yych = *(marker = ++p); if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1870; + goto yy1867; } else { if (yych <= 0xDF) - goto yy1880; + goto yy1877; if (yych <= 0xE0) - goto yy1881; - goto yy1882; + goto yy1878; + goto yy1879; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1886; + goto yy1883; if (yych <= 0xEF) - goto yy1882; - goto yy1883; + goto yy1879; + goto yy1880; } else { if (yych <= 0xF3) - goto yy1884; + goto yy1881; if (yych <= 0xF4) - goto yy1885; + goto yy1882; } } - yy1856 : { return 0; } - yy1857: + yy1853 : { return 0; } + yy1854: yyaccept = 1; yych = *(marker = ++p); if (yych <= '(') { if (yych <= ' ') - goto yy1856; + goto yy1853; if (yych <= '\'') - goto yy1862; - goto yy1856; + goto yy1859; + goto yy1853; } else { if (yych <= 0x7F) - goto yy1862; + goto yy1859; if (yych <= 0xC1) - goto yy1856; + goto yy1853; if (yych <= 0xF4) - goto yy1862; - goto yy1856; + goto yy1859; + goto yy1853; } - yy1858: + yy1855: yych = *++p; - goto yy1856; - yy1859: + goto yy1853; + yy1856: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1859; + goto yy1856; } if (yych <= 0xE0) { if (yych <= ')') { if (yych <= ' ') - goto yy1848; + goto yy1845; if (yych >= ')') - goto yy1887; + goto yy1884; } else { if (yych <= 0x7F) - goto yy1861; + goto yy1858; if (yych <= 0xC1) - goto yy1848; + goto yy1845; if (yych <= 0xDF) - goto yy1863; - goto yy1864; + goto yy1860; + goto yy1861; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1869; - goto yy1865; + goto yy1866; + goto yy1862; } else { if (yych <= 0xF0) - goto yy1866; + goto yy1863; if (yych <= 0xF3) - goto yy1867; + goto yy1864; if (yych <= 0xF4) - goto yy1868; - goto yy1848; + goto yy1865; + goto yy1845; } } - yy1861: + yy1858: ++p; yych = *p; - yy1862: + yy1859: if (yybm[0 + yych] & 32) { - goto yy1861; + goto yy1858; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '(') - goto yy1848; + goto yy1845; if (yych <= ')') - goto yy1870; - goto yy1859; + goto yy1867; + goto yy1856; } else { if (yych <= 0xC1) - goto yy1848; + goto yy1845; if (yych >= 0xE0) - goto yy1864; + goto yy1861; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1869; - goto yy1865; + goto yy1866; + goto yy1862; } else { if (yych <= 0xF0) - goto yy1866; + goto yy1863; if (yych <= 0xF3) - goto yy1867; + goto yy1864; if (yych <= 0xF4) - goto yy1868; - goto yy1848; + goto yy1865; + goto yy1845; } } - yy1863: + yy1860: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1861; - goto yy1848; - yy1864: + goto yy1858; + goto yy1845; + yy1861: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1863; - goto yy1848; - yy1865: + goto yy1860; + goto yy1845; + yy1862: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1863; - goto yy1848; - yy1866: + goto yy1860; + goto yy1845; + yy1863: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1865; - goto yy1848; - yy1867: + goto yy1862; + goto yy1845; + yy1864: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1865; - goto yy1848; - yy1868: + goto yy1862; + goto yy1845; + yy1865: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1865; - goto yy1848; - yy1869: + goto yy1862; + goto yy1845; + yy1866: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1863; - goto yy1848; - yy1870: + goto yy1860; + goto yy1845; + yy1867: yyaccept = 0; marker = ++p; yych = *p; - yy1871: + yy1868: if (yych <= 0xC1) { if (yych <= ')') { if (yych <= ' ') - goto yy1841; + goto yy1838; if (yych <= '\'') - goto yy1870; + goto yy1867; if (yych <= '(') - goto yy1861; - goto yy1841; + goto yy1858; + goto yy1838; } else { if (yych == '\\') - goto yy1879; + goto yy1876; if (yych <= 0x7F) - goto yy1870; - goto yy1841; + goto yy1867; + goto yy1838; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1872; + goto yy1869; if (yych <= 0xE0) - goto yy1873; + goto yy1870; if (yych <= 0xEC) - goto yy1874; - goto yy1878; + goto yy1871; + goto yy1875; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1874; - goto yy1875; + goto yy1871; + goto yy1872; } else { if (yych <= 0xF3) - goto yy1876; + goto yy1873; if (yych <= 0xF4) - goto yy1877; - goto yy1841; + goto yy1874; + goto yy1838; } } } - yy1872: + yy1869: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1870; - goto yy1848; - yy1873: + goto yy1867; + goto yy1845; + yy1870: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1872; - goto yy1848; - yy1874: + goto yy1869; + goto yy1845; + yy1871: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1872; - goto yy1848; - yy1875: + goto yy1869; + goto yy1845; + yy1872: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1874; - goto yy1848; - yy1876: + goto yy1871; + goto yy1845; + yy1873: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1874; - goto yy1848; - yy1877: + goto yy1871; + goto yy1845; + yy1874: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1874; - goto yy1848; - yy1878: + goto yy1871; + goto yy1845; + yy1875: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1872; - goto yy1848; - yy1879: + goto yy1869; + goto yy1845; + yy1876: ++p; yych = *p; if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1870; - goto yy1848; + goto yy1867; + goto yy1845; } else { if (yych <= 0xDF) - goto yy1880; + goto yy1877; if (yych <= 0xE0) - goto yy1881; - goto yy1882; + goto yy1878; + goto yy1879; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1886; + goto yy1883; if (yych <= 0xEF) - goto yy1882; - goto yy1883; + goto yy1879; + goto yy1880; } else { if (yych <= 0xF3) - goto yy1884; + goto yy1881; if (yych <= 0xF4) - goto yy1885; - goto yy1848; + goto yy1882; + goto yy1845; } } - yy1880: + yy1877: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1870; - goto yy1848; - yy1881: + goto yy1867; + goto yy1845; + yy1878: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1880; - goto yy1848; - yy1882: + goto yy1877; + goto yy1845; + yy1879: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1880; - goto yy1848; - yy1883: + goto yy1877; + goto yy1845; + yy1880: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1882; - goto yy1848; - yy1884: + goto yy1879; + goto yy1845; + yy1881: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1882; - goto yy1848; - yy1885: + goto yy1879; + goto yy1845; + yy1882: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1882; - goto yy1848; - yy1886: + goto yy1879; + goto yy1845; + yy1883: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1880; - goto yy1848; - yy1887: + goto yy1877; + goto yy1845; + yy1884: yyaccept = 0; marker = ++p; yych = *p; - yy1888: + yy1885: if (yych <= 0xC1) { if (yych <= ')') { if (yych <= ' ') - goto yy1841; + goto yy1838; if (yych <= '\'') - goto yy1887; + goto yy1884; if (yych <= '(') - goto yy1861; - goto yy1870; + goto yy1858; + goto yy1867; } else { if (yych == '\\') - goto yy1896; + goto yy1893; if (yych <= 0x7F) - goto yy1887; - goto yy1841; + goto yy1884; + goto yy1838; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1889; + goto yy1886; if (yych <= 0xE0) - goto yy1890; + goto yy1887; if (yych <= 0xEC) - goto yy1891; - goto yy1895; + goto yy1888; + goto yy1892; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1891; - goto yy1892; + goto yy1888; + goto yy1889; } else { if (yych <= 0xF3) - goto yy1893; + goto yy1890; if (yych <= 0xF4) - goto yy1894; - goto yy1841; + goto yy1891; + goto yy1838; } } } - yy1889: + yy1886: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1887; - goto yy1848; - yy1890: + goto yy1884; + goto yy1845; + yy1887: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1889; - goto yy1848; - yy1891: + goto yy1886; + goto yy1845; + yy1888: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1889; - goto yy1848; - yy1892: + goto yy1886; + goto yy1845; + yy1889: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1891; - goto yy1848; - yy1893: + goto yy1888; + goto yy1845; + yy1890: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1891; - goto yy1848; - yy1894: + goto yy1888; + goto yy1845; + yy1891: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1891; - goto yy1848; - yy1895: + goto yy1888; + goto yy1845; + yy1892: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1889; - goto yy1848; - yy1896: + goto yy1886; + goto yy1845; + yy1893: ++p; yych = *p; if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= ' ') - goto yy1870; + goto yy1867; if (yych <= '[') - goto yy1887; + goto yy1884; } else { if (yych <= 0x7F) - goto yy1887; + goto yy1884; if (yych <= 0xC1) - goto yy1848; + goto yy1845; if (yych <= 0xDF) - goto yy1898; - goto yy1899; + goto yy1895; + goto yy1896; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1904; - goto yy1900; + goto yy1901; + goto yy1897; } else { if (yych <= 0xF0) - goto yy1901; + goto yy1898; if (yych <= 0xF3) - goto yy1902; + goto yy1899; if (yych <= 0xF4) - goto yy1903; - goto yy1848; + goto yy1900; + goto yy1845; } } yyaccept = 0; @@ -23022,654 +22985,654 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '[') { if (yych <= ' ') - goto yy1841; + goto yy1838; if (yych == '(') - goto yy1861; - goto yy1887; + goto yy1858; + goto yy1884; } else { if (yych <= '\\') - goto yy1896; + goto yy1893; if (yych <= 0x7F) - goto yy1887; + goto yy1884; if (yych <= 0xC1) - goto yy1841; - goto yy1889; + goto yy1838; + goto yy1886; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1890; + goto yy1887; if (yych == 0xED) - goto yy1895; - goto yy1891; + goto yy1892; + goto yy1888; } else { if (yych <= 0xF0) - goto yy1892; + goto yy1889; if (yych <= 0xF3) - goto yy1893; + goto yy1890; if (yych <= 0xF4) - goto yy1894; - goto yy1841; + goto yy1891; + goto yy1838; } } - yy1898: + yy1895: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1887; - goto yy1848; - yy1899: + goto yy1884; + goto yy1845; + yy1896: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1898; - goto yy1848; - yy1900: + goto yy1895; + goto yy1845; + yy1897: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1898; - goto yy1848; - yy1901: + goto yy1895; + goto yy1845; + yy1898: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1900; - goto yy1848; - yy1902: + goto yy1897; + goto yy1845; + yy1899: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1900; - goto yy1848; - yy1903: + goto yy1897; + goto yy1845; + yy1900: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1900; - goto yy1848; - yy1904: + goto yy1897; + goto yy1845; + yy1901: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1898; - goto yy1848; - yy1905: + goto yy1895; + goto yy1845; + yy1902: yyaccept = 0; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1905; + goto yy1902; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1841; - goto yy1919; + goto yy1838; + goto yy1916; } else { if (yych <= '\n') - goto yy1841; + goto yy1838; if (yych <= '\f') - goto yy1919; - goto yy1841; + goto yy1916; + goto yy1838; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1919; - goto yy1917; + goto yy1916; + goto yy1914; } else { if (yych <= ')') - goto yy1919; + goto yy1916; if (yych <= '<') - goto yy1870; + goto yy1867; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1916; - goto yy1841; + goto yy1913; + goto yy1838; } else { if (yych <= 0xDF) - goto yy1909; + goto yy1906; if (yych <= 0xE0) - goto yy1910; - goto yy1911; + goto yy1907; + goto yy1908; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1915; + goto yy1912; if (yych <= 0xEF) - goto yy1911; - goto yy1912; + goto yy1908; + goto yy1909; } else { if (yych <= 0xF3) - goto yy1913; + goto yy1910; if (yych <= 0xF4) - goto yy1914; - goto yy1841; + goto yy1911; + goto yy1838; } } } - yy1907: + yy1904: yyaccept = 2; yych = *(marker = ++p); if (yych <= ')') { if (yych <= ' ') - goto yy1908; + goto yy1905; if (yych <= '(') - goto yy1871; + goto yy1868; } else { if (yych <= 0x7F) - goto yy1871; + goto yy1868; if (yych <= 0xC1) - goto yy1908; + goto yy1905; if (yych <= 0xF4) - goto yy1871; + goto yy1868; } - yy1908 : { return (bufsize_t)(p - start); } - yy1909: + yy1905 : { return (bufsize_t)(p - start); } + yy1906: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1905; - goto yy1848; - yy1910: + goto yy1902; + goto yy1845; + yy1907: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1909; - goto yy1848; - yy1911: + goto yy1906; + goto yy1845; + yy1908: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1909; - goto yy1848; - yy1912: + goto yy1906; + goto yy1845; + yy1909: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1911; - goto yy1848; - yy1913: + goto yy1908; + goto yy1845; + yy1910: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1911; - goto yy1848; - yy1914: + goto yy1908; + goto yy1845; + yy1911: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1911; - goto yy1848; - yy1915: + goto yy1908; + goto yy1845; + yy1912: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1909; - goto yy1848; - yy1916: + goto yy1906; + goto yy1845; + yy1913: ++p; yych = *p; if (yych <= 0x7F) { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1870; - goto yy1905; + goto yy1867; + goto yy1902; } else { if (yych <= '\n') - goto yy1870; + goto yy1867; if (yych <= '\f') - goto yy1905; - goto yy1870; + goto yy1902; + goto yy1867; } } else { if (yych <= '>') { if (yych <= '=') - goto yy1905; - goto yy1963; + goto yy1902; + goto yy1960; } else { if (yych == '\\') - goto yy1964; - goto yy1905; + goto yy1961; + goto yy1902; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych <= 0xC1) - goto yy1848; - goto yy1965; + goto yy1845; + goto yy1962; } else { if (yych <= 0xE0) - goto yy1966; + goto yy1963; if (yych <= 0xEC) - goto yy1967; - goto yy1971; + goto yy1964; + goto yy1968; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1967; - goto yy1968; + goto yy1964; + goto yy1965; } else { if (yych <= 0xF3) - goto yy1969; + goto yy1966; if (yych <= 0xF4) - goto yy1970; - goto yy1848; + goto yy1967; + goto yy1845; } } } - yy1917: + yy1914: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1848; + goto yy1845; if (yych >= '\n') - goto yy1848; + goto yy1845; } else { if (yych == '\r') - goto yy1848; + goto yy1845; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1917; + goto yy1914; if (yych >= ')') - goto yy1905; + goto yy1902; } else { if (yych == '<') - goto yy1861; + goto yy1858; if (yych <= '=') - goto yy1917; - goto yy1932; + goto yy1914; + goto yy1929; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1933; - goto yy1917; + goto yy1930; + goto yy1914; } else { if (yych <= 0xC1) - goto yy1848; + goto yy1845; if (yych <= 0xDF) - goto yy1935; - goto yy1936; + goto yy1932; + goto yy1933; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1941; - goto yy1937; + goto yy1938; + goto yy1934; } else { if (yych <= 0xF0) - goto yy1938; + goto yy1935; if (yych <= 0xF3) - goto yy1939; + goto yy1936; if (yych <= 0xF4) - goto yy1940; - goto yy1848; + goto yy1937; + goto yy1845; } } } - yy1919: + yy1916: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1919; + goto yy1916; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '<') - goto yy1848; + goto yy1845; if (yych >= '?') - goto yy1922; + goto yy1919; } else { if (yych <= 0xC1) - goto yy1848; + goto yy1845; if (yych <= 0xDF) - goto yy1924; - goto yy1925; + goto yy1921; + goto yy1922; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1930; - goto yy1926; + goto yy1927; + goto yy1923; } else { if (yych <= 0xF0) - goto yy1927; + goto yy1924; if (yych <= 0xF3) - goto yy1928; + goto yy1925; if (yych <= 0xF4) - goto yy1929; - goto yy1848; + goto yy1926; + goto yy1845; } } - yy1921: + yy1918: yych = *++p; - goto yy1908; - yy1922: + goto yy1905; + yy1919: ++p; yych = *p; if (yych <= 0x7F) { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1848; - goto yy1919; + goto yy1845; + goto yy1916; } else { if (yych <= '\n') - goto yy1848; + goto yy1845; if (yych <= '\f') - goto yy1919; - goto yy1848; + goto yy1916; + goto yy1845; } } else { if (yych <= '>') { if (yych <= '=') - goto yy1919; - goto yy1931; + goto yy1916; + goto yy1928; } else { if (yych == '\\') - goto yy1922; - goto yy1919; + goto yy1919; + goto yy1916; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych <= 0xC1) - goto yy1848; + goto yy1845; } else { if (yych <= 0xE0) - goto yy1925; + goto yy1922; if (yych <= 0xEC) - goto yy1926; - goto yy1930; + goto yy1923; + goto yy1927; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1926; - goto yy1927; + goto yy1923; + goto yy1924; } else { if (yych <= 0xF3) - goto yy1928; + goto yy1925; if (yych <= 0xF4) - goto yy1929; - goto yy1848; + goto yy1926; + goto yy1845; } } } - yy1924: + yy1921: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1919; - goto yy1848; - yy1925: + goto yy1916; + goto yy1845; + yy1922: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1924; - goto yy1848; - yy1926: + goto yy1921; + goto yy1845; + yy1923: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1924; - goto yy1848; - yy1927: + goto yy1921; + goto yy1845; + yy1924: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1926; - goto yy1848; - yy1928: + goto yy1923; + goto yy1845; + yy1925: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1926; - goto yy1848; - yy1929: + goto yy1923; + goto yy1845; + yy1926: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1926; - goto yy1848; - yy1930: + goto yy1923; + goto yy1845; + yy1927: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1924; - goto yy1848; - yy1931: + goto yy1921; + goto yy1845; + yy1928: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1919; + goto yy1916; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '<') - goto yy1908; + goto yy1905; if (yych <= '>') - goto yy1921; - goto yy1922; + goto yy1918; + goto yy1919; } else { if (yych <= 0xC1) - goto yy1908; + goto yy1905; if (yych <= 0xDF) - goto yy1924; - goto yy1925; + goto yy1921; + goto yy1922; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1930; - goto yy1926; + goto yy1927; + goto yy1923; } else { if (yych <= 0xF0) - goto yy1927; + goto yy1924; if (yych <= 0xF3) - goto yy1928; + goto yy1925; if (yych <= 0xF4) - goto yy1929; - goto yy1908; + goto yy1926; + goto yy1905; } } - yy1932: + yy1929: yyaccept = 2; yych = *(marker = ++p); if (yych <= '(') { if (yych <= ' ') - goto yy1908; + goto yy1905; if (yych <= '\'') - goto yy1862; - goto yy1908; + goto yy1859; + goto yy1905; } else { if (yych <= 0x7F) - goto yy1862; + goto yy1859; if (yych <= 0xC1) - goto yy1908; + goto yy1905; if (yych <= 0xF4) - goto yy1862; - goto yy1908; + goto yy1859; + goto yy1905; } - yy1933: + yy1930: ++p; yych = *p; if (yych <= '[') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1848; - goto yy1919; + goto yy1845; + goto yy1916; } else { if (yych <= '\n') - goto yy1848; + goto yy1845; if (yych <= '\f') - goto yy1919; - goto yy1848; + goto yy1916; + goto yy1845; } } else { if (yych <= ')') { if (yych <= ' ') - goto yy1919; + goto yy1916; if (yych <= '(') - goto yy1917; - goto yy1942; + goto yy1914; + goto yy1939; } else { if (yych == '>') - goto yy1944; - goto yy1917; + goto yy1941; + goto yy1914; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1933; + goto yy1930; if (yych <= 0x7F) - goto yy1917; - goto yy1848; + goto yy1914; + goto yy1845; } else { if (yych <= 0xDF) - goto yy1935; + goto yy1932; if (yych <= 0xE0) - goto yy1936; - goto yy1937; + goto yy1933; + goto yy1934; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1941; + goto yy1938; if (yych <= 0xEF) - goto yy1937; - goto yy1938; + goto yy1934; + goto yy1935; } else { if (yych <= 0xF3) - goto yy1939; + goto yy1936; if (yych <= 0xF4) - goto yy1940; - goto yy1848; + goto yy1937; + goto yy1845; } } } - yy1935: + yy1932: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1917; - goto yy1848; - yy1936: + goto yy1914; + goto yy1845; + yy1933: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1935; - goto yy1848; - yy1937: + goto yy1932; + goto yy1845; + yy1934: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1935; - goto yy1848; - yy1938: + goto yy1932; + goto yy1845; + yy1935: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1937; - goto yy1848; - yy1939: + goto yy1934; + goto yy1845; + yy1936: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1937; - goto yy1848; - yy1940: + goto yy1934; + goto yy1845; + yy1937: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1937; - goto yy1848; - yy1941: + goto yy1934; + goto yy1845; + yy1938: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1935; - goto yy1848; - yy1942: + goto yy1932; + goto yy1845; + yy1939: yyaccept = 0; marker = ++p; yych = *p; @@ -23677,60 +23640,60 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1841; + goto yy1838; if (yych <= '\t') - goto yy1919; - goto yy1841; + goto yy1916; + goto yy1838; } else { if (yych == '\r') - goto yy1841; - goto yy1919; + goto yy1838; + goto yy1916; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1942; + goto yy1939; if (yych <= '(') - goto yy1917; - goto yy1905; + goto yy1914; + goto yy1902; } else { if (yych == '<') - goto yy1887; + goto yy1884; if (yych <= '=') - goto yy1942; - goto yy1945; + goto yy1939; + goto yy1942; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1946; - goto yy1942; + goto yy1943; + goto yy1939; } else { if (yych <= 0xC1) - goto yy1841; + goto yy1838; if (yych <= 0xDF) - goto yy1947; - goto yy1948; + goto yy1944; + goto yy1945; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1953; - goto yy1949; + goto yy1950; + goto yy1946; } else { if (yych <= 0xF0) - goto yy1950; + goto yy1947; if (yych <= 0xF3) - goto yy1951; + goto yy1948; if (yych <= 0xF4) - goto yy1952; - goto yy1841; + goto yy1949; + goto yy1838; } } } - yy1944: + yy1941: yyaccept = 2; marker = ++p; yych = *p; @@ -23738,186 +23701,186 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1908; + goto yy1905; if (yych <= '\t') - goto yy1919; - goto yy1908; + goto yy1916; + goto yy1905; } else { if (yych == '\r') - goto yy1908; - goto yy1919; + goto yy1905; + goto yy1916; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1917; + goto yy1914; if (yych <= '(') - goto yy1919; - goto yy1905; + goto yy1916; + goto yy1902; } else { if (yych == '<') - goto yy1861; + goto yy1858; if (yych <= '=') - goto yy1917; - goto yy1932; + goto yy1914; + goto yy1929; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1933; - goto yy1917; + goto yy1930; + goto yy1914; } else { if (yych <= 0xC1) - goto yy1908; + goto yy1905; if (yych <= 0xDF) - goto yy1935; - goto yy1936; + goto yy1932; + goto yy1933; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1941; - goto yy1937; + goto yy1938; + goto yy1934; } else { if (yych <= 0xF0) - goto yy1938; + goto yy1935; if (yych <= 0xF3) - goto yy1939; + goto yy1936; if (yych <= 0xF4) - goto yy1940; - goto yy1908; + goto yy1937; + goto yy1905; } } } - yy1945: + yy1942: yyaccept = 2; yych = *(marker = ++p); if (yych <= ' ') - goto yy1908; + goto yy1905; if (yych <= 0x7F) - goto yy1888; + goto yy1885; if (yych <= 0xC1) - goto yy1908; + goto yy1905; if (yych <= 0xF4) - goto yy1888; - goto yy1908; - yy1946: + goto yy1885; + goto yy1905; + yy1943: ++p; yych = *p; if (yych <= '\\') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1870; - goto yy1905; + goto yy1867; + goto yy1902; } else { if (yych <= '\n') - goto yy1870; + goto yy1867; if (yych <= '\f') - goto yy1905; - goto yy1870; + goto yy1902; + goto yy1867; } } else { if (yych <= '=') { if (yych <= ' ') - goto yy1905; - goto yy1942; + goto yy1902; + goto yy1939; } else { if (yych <= '>') - goto yy1954; + goto yy1951; if (yych <= '[') - goto yy1942; - goto yy1955; + goto yy1939; + goto yy1952; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1942; - goto yy1848; + goto yy1939; + goto yy1845; } else { if (yych <= 0xDF) - goto yy1956; + goto yy1953; if (yych <= 0xE0) - goto yy1957; - goto yy1958; + goto yy1954; + goto yy1955; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1962; + goto yy1959; if (yych <= 0xEF) - goto yy1958; - goto yy1959; + goto yy1955; + goto yy1956; } else { if (yych <= 0xF3) - goto yy1960; + goto yy1957; if (yych <= 0xF4) - goto yy1961; - goto yy1848; + goto yy1958; + goto yy1845; } } } - yy1947: + yy1944: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1942; - goto yy1848; - yy1948: + goto yy1939; + goto yy1845; + yy1945: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1947; - goto yy1848; - yy1949: + goto yy1944; + goto yy1845; + yy1946: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1947; - goto yy1848; - yy1950: + goto yy1944; + goto yy1845; + yy1947: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1949; - goto yy1848; - yy1951: + goto yy1946; + goto yy1845; + yy1948: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1949; - goto yy1848; - yy1952: + goto yy1946; + goto yy1845; + yy1949: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1949; - goto yy1848; - yy1953: + goto yy1946; + goto yy1845; + yy1950: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1947; - goto yy1848; - yy1954: + goto yy1944; + goto yy1845; + yy1951: yyaccept = 2; marker = ++p; yych = *p; @@ -23925,60 +23888,60 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1908; + goto yy1905; if (yych <= '\t') - goto yy1919; - goto yy1908; + goto yy1916; + goto yy1905; } else { if (yych == '\r') - goto yy1908; - goto yy1919; + goto yy1905; + goto yy1916; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1942; + goto yy1939; if (yych <= '(') - goto yy1917; - goto yy1905; + goto yy1914; + goto yy1902; } else { if (yych == '<') - goto yy1887; + goto yy1884; if (yych <= '=') - goto yy1942; - goto yy1945; + goto yy1939; + goto yy1942; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1946; - goto yy1942; + goto yy1943; + goto yy1939; } else { if (yych <= 0xC1) - goto yy1908; + goto yy1905; if (yych <= 0xDF) - goto yy1947; - goto yy1948; + goto yy1944; + goto yy1945; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1953; - goto yy1949; + goto yy1950; + goto yy1946; } else { if (yych <= 0xF0) - goto yy1950; + goto yy1947; if (yych <= 0xF3) - goto yy1951; + goto yy1948; if (yych <= 0xF4) - goto yy1952; - goto yy1908; + goto yy1949; + goto yy1905; } } } - yy1955: + yy1952: yyaccept = 0; marker = ++p; yych = *p; @@ -23986,178 +23949,178 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1841; - goto yy1919; + goto yy1838; + goto yy1916; } else { if (yych <= '\n') - goto yy1841; + goto yy1838; if (yych <= '\f') - goto yy1919; - goto yy1841; + goto yy1916; + goto yy1838; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1919; + goto yy1916; if (yych <= '\'') - goto yy1942; - goto yy1917; + goto yy1939; + goto yy1914; } else { if (yych == '>') - goto yy1954; - goto yy1942; + goto yy1951; + goto yy1939; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1946; + goto yy1943; if (yych <= 0x7F) - goto yy1942; - goto yy1841; + goto yy1939; + goto yy1838; } else { if (yych <= 0xDF) - goto yy1947; + goto yy1944; if (yych <= 0xE0) - goto yy1948; - goto yy1949; + goto yy1945; + goto yy1946; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1953; + goto yy1950; if (yych <= 0xEF) - goto yy1949; - goto yy1950; + goto yy1946; + goto yy1947; } else { if (yych <= 0xF3) - goto yy1951; + goto yy1948; if (yych <= 0xF4) - goto yy1952; - goto yy1841; + goto yy1949; + goto yy1838; } } } - yy1956: + yy1953: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1942; - goto yy1848; - yy1957: + goto yy1939; + goto yy1845; + yy1954: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1956; - goto yy1848; - yy1958: + goto yy1953; + goto yy1845; + yy1955: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1956; - goto yy1848; - yy1959: + goto yy1953; + goto yy1845; + yy1956: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1958; - goto yy1848; - yy1960: + goto yy1955; + goto yy1845; + yy1957: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1958; - goto yy1848; - yy1961: + goto yy1955; + goto yy1845; + yy1958: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1958; - goto yy1848; - yy1962: + goto yy1955; + goto yy1845; + yy1959: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1956; - goto yy1848; - yy1963: + goto yy1953; + goto yy1845; + yy1960: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1905; + goto yy1902; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1908; - goto yy1919; + goto yy1905; + goto yy1916; } else { if (yych <= '\n') - goto yy1908; + goto yy1905; if (yych <= '\f') - goto yy1919; - goto yy1908; + goto yy1916; + goto yy1905; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1919; - goto yy1917; + goto yy1916; + goto yy1914; } else { if (yych <= ')') - goto yy1919; + goto yy1916; if (yych <= '<') - goto yy1870; - goto yy1907; + goto yy1867; + goto yy1904; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1916; - goto yy1908; + goto yy1913; + goto yy1905; } else { if (yych <= 0xDF) - goto yy1909; + goto yy1906; if (yych <= 0xE0) - goto yy1910; - goto yy1911; + goto yy1907; + goto yy1908; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1915; + goto yy1912; if (yych <= 0xEF) - goto yy1911; - goto yy1912; + goto yy1908; + goto yy1909; } else { if (yych <= 0xF3) - goto yy1913; + goto yy1910; if (yych <= 0xF4) - goto yy1914; - goto yy1908; + goto yy1911; + goto yy1905; } } } - yy1964: + yy1961: yyaccept = 0; marker = ++p; yych = *p; @@ -24165,115 +24128,115 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1841; + goto yy1838; if (yych <= '\t') - goto yy1919; - goto yy1841; + goto yy1916; + goto yy1838; } else { if (yych == '\r') - goto yy1841; - goto yy1919; + goto yy1838; + goto yy1916; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1905; + goto yy1902; if (yych <= '(') - goto yy1917; - goto yy1919; + goto yy1914; + goto yy1916; } else { if (yych == '>') - goto yy1963; - goto yy1905; + goto yy1960; + goto yy1902; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1916; + goto yy1913; if (yych <= 0x7F) - goto yy1905; - goto yy1841; + goto yy1902; + goto yy1838; } else { if (yych <= 0xDF) - goto yy1909; + goto yy1906; if (yych <= 0xE0) - goto yy1910; - goto yy1911; + goto yy1907; + goto yy1908; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1915; + goto yy1912; if (yych <= 0xEF) - goto yy1911; - goto yy1912; + goto yy1908; + goto yy1909; } else { if (yych <= 0xF3) - goto yy1913; + goto yy1910; if (yych <= 0xF4) - goto yy1914; - goto yy1841; + goto yy1911; + goto yy1838; } } } - yy1965: + yy1962: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1905; - goto yy1848; - yy1966: + goto yy1902; + goto yy1845; + yy1963: ++p; yych = *p; if (yych <= 0x9F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1965; - goto yy1848; - yy1967: + goto yy1962; + goto yy1845; + yy1964: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1965; - goto yy1848; - yy1968: + goto yy1962; + goto yy1845; + yy1965: ++p; yych = *p; if (yych <= 0x8F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1967; - goto yy1848; - yy1969: + goto yy1964; + goto yy1845; + yy1966: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0xBF) - goto yy1967; - goto yy1848; - yy1970: + goto yy1964; + goto yy1845; + yy1967: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x8F) - goto yy1967; - goto yy1848; - yy1971: + goto yy1964; + goto yy1845; + yy1968: ++p; yych = *p; if (yych <= 0x7F) - goto yy1848; + goto yy1845; if (yych <= 0x9F) - goto yy1965; - goto yy1848; + goto yy1962; + goto yy1845; } } @@ -24312,640 +24275,640 @@ bufsize_t _scan_link_title(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '"') { if (yych == '\n') - goto yy1974; + goto yy1971; if (yych <= '!') - goto yy1978; - goto yy1975; + goto yy1975; + goto yy1972; } else { if (yych <= '\'') { if (yych <= '&') - goto yy1978; - goto yy1976; + goto yy1975; + goto yy1973; } else { if (yych <= '(') - goto yy1977; + goto yy1974; if (yych <= 0x7F) - goto yy1978; + goto yy1975; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1979; + goto yy1976; if (yych <= 0xE0) - goto yy1981; + goto yy1978; if (yych <= 0xEC) - goto yy1982; - goto yy1986; + goto yy1979; + goto yy1983; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1982; - goto yy1983; + goto yy1979; + goto yy1980; } else { if (yych <= 0xF3) - goto yy1984; + goto yy1981; if (yych <= 0xF4) - goto yy1985; + goto yy1982; } } } - yy1974 : { return 0; } - yy1975: + yy1971 : { return 0; } + yy1972: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1974; + goto yy1971; if (yych <= 0x7F) - goto yy2018; + goto yy2015; if (yych <= 0xC1) - goto yy1974; + goto yy1971; if (yych <= 0xF4) - goto yy2018; - goto yy1974; - yy1976: + goto yy2015; + goto yy1971; + yy1973: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1974; + goto yy1971; if (yych <= 0x7F) - goto yy2004; + goto yy2001; if (yych <= 0xC1) - goto yy1974; + goto yy1971; if (yych <= 0xF4) - goto yy2004; - goto yy1974; - yy1977: + goto yy2001; + goto yy1971; + yy1974: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1974; + goto yy1971; if (yych <= 0x7F) - goto yy1990; + goto yy1987; if (yych <= 0xC1) - goto yy1974; + goto yy1971; if (yych <= 0xF4) - goto yy1990; - goto yy1974; - yy1978: + goto yy1987; + goto yy1971; + yy1975: yych = *++p; - goto yy1974; - yy1979: + goto yy1971; + yy1976: yych = *++p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1978; - yy1980: + goto yy1975; + yy1977: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1974; + goto yy1971; } else { - goto yy1999; + goto yy1996; } } else { if (yyaccept == 2) { - goto yy2013; + goto yy2010; } else { - goto yy2027; + goto yy2024; } } - yy1981: + yy1978: yych = *++p; if (yych <= 0x9F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1979; - goto yy1980; - yy1982: + goto yy1976; + goto yy1977; + yy1979: yych = *++p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1979; - goto yy1980; - yy1983: + goto yy1976; + goto yy1977; + yy1980: yych = *++p; if (yych <= 0x8F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1982; - goto yy1980; - yy1984: + goto yy1979; + goto yy1977; + yy1981: yych = *++p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1982; - goto yy1980; - yy1985: + goto yy1979; + goto yy1977; + yy1982: yych = *++p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x8F) - goto yy1982; - goto yy1980; - yy1986: + goto yy1979; + goto yy1977; + yy1983: yych = *++p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x9F) - goto yy1979; - goto yy1980; - yy1987: + goto yy1976; + goto yy1977; + yy1984: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1989; + goto yy1986; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1980; + goto yy1977; if (yych <= ')') - goto yy2000; - goto yy1987; + goto yy1997; + goto yy1984; } else { if (yych <= 0xC1) - goto yy1980; + goto yy1977; if (yych <= 0xDF) - goto yy1991; - goto yy1992; + goto yy1988; + goto yy1989; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1997; - goto yy1993; + goto yy1994; + goto yy1990; } else { if (yych <= 0xF0) - goto yy1994; + goto yy1991; if (yych <= 0xF3) - goto yy1995; + goto yy1992; if (yych <= 0xF4) - goto yy1996; - goto yy1980; + goto yy1993; + goto yy1977; } } - yy1989: + yy1986: ++p; yych = *p; - yy1990: + yy1987: if (yybm[0 + yych] & 32) { - goto yy1989; + goto yy1986; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1980; + goto yy1977; if (yych <= ')') - goto yy1998; - goto yy1987; + goto yy1995; + goto yy1984; } else { if (yych <= 0xC1) - goto yy1980; + goto yy1977; if (yych >= 0xE0) - goto yy1992; + goto yy1989; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1997; - goto yy1993; + goto yy1994; + goto yy1990; } else { if (yych <= 0xF0) - goto yy1994; + goto yy1991; if (yych <= 0xF3) - goto yy1995; + goto yy1992; if (yych <= 0xF4) - goto yy1996; - goto yy1980; + goto yy1993; + goto yy1977; } } - yy1991: + yy1988: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1989; - goto yy1980; - yy1992: + goto yy1986; + goto yy1977; + yy1989: ++p; yych = *p; if (yych <= 0x9F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1991; - goto yy1980; - yy1993: + goto yy1988; + goto yy1977; + yy1990: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1991; - goto yy1980; - yy1994: + goto yy1988; + goto yy1977; + yy1991: ++p; yych = *p; if (yych <= 0x8F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1993; - goto yy1980; - yy1995: + goto yy1990; + goto yy1977; + yy1992: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy1993; - goto yy1980; - yy1996: + goto yy1990; + goto yy1977; + yy1993: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x8F) - goto yy1993; - goto yy1980; - yy1997: + goto yy1990; + goto yy1977; + yy1994: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x9F) - goto yy1991; - goto yy1980; - yy1998: + goto yy1988; + goto yy1977; + yy1995: ++p; - yy1999 : { return (bufsize_t)(p - start); } - yy2000: + yy1996 : { return (bufsize_t)(p - start); } + yy1997: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1989; + goto yy1986; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1999; + goto yy1996; if (yych <= ')') - goto yy1998; - goto yy1987; + goto yy1995; + goto yy1984; } else { if (yych <= 0xC1) - goto yy1999; + goto yy1996; if (yych <= 0xDF) - goto yy1991; - goto yy1992; + goto yy1988; + goto yy1989; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1997; - goto yy1993; + goto yy1994; + goto yy1990; } else { if (yych <= 0xF0) - goto yy1994; + goto yy1991; if (yych <= 0xF3) - goto yy1995; + goto yy1992; if (yych <= 0xF4) - goto yy1996; - goto yy1999; + goto yy1993; + goto yy1996; } } - yy2001: + yy1998: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2003; + goto yy2000; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1980; + goto yy1977; if (yych <= '\'') - goto yy2014; - goto yy2001; + goto yy2011; + goto yy1998; } else { if (yych <= 0xC1) - goto yy1980; + goto yy1977; if (yych <= 0xDF) - goto yy2005; - goto yy2006; + goto yy2002; + goto yy2003; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2011; - goto yy2007; + goto yy2008; + goto yy2004; } else { if (yych <= 0xF0) - goto yy2008; + goto yy2005; if (yych <= 0xF3) - goto yy2009; + goto yy2006; if (yych <= 0xF4) - goto yy2010; - goto yy1980; + goto yy2007; + goto yy1977; } } - yy2003: + yy2000: ++p; yych = *p; - yy2004: + yy2001: if (yybm[0 + yych] & 64) { - goto yy2003; + goto yy2000; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1980; + goto yy1977; if (yych <= '\'') - goto yy2012; - goto yy2001; + goto yy2009; + goto yy1998; } else { if (yych <= 0xC1) - goto yy1980; + goto yy1977; if (yych >= 0xE0) - goto yy2006; + goto yy2003; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2011; - goto yy2007; + goto yy2008; + goto yy2004; } else { if (yych <= 0xF0) - goto yy2008; + goto yy2005; if (yych <= 0xF3) - goto yy2009; + goto yy2006; if (yych <= 0xF4) - goto yy2010; - goto yy1980; + goto yy2007; + goto yy1977; } } - yy2005: + yy2002: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2003; - goto yy1980; - yy2006: + goto yy2000; + goto yy1977; + yy2003: ++p; yych = *p; if (yych <= 0x9F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2005; - goto yy1980; - yy2007: + goto yy2002; + goto yy1977; + yy2004: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2005; - goto yy1980; - yy2008: + goto yy2002; + goto yy1977; + yy2005: ++p; yych = *p; if (yych <= 0x8F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2007; - goto yy1980; - yy2009: + goto yy2004; + goto yy1977; + yy2006: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2007; - goto yy1980; - yy2010: + goto yy2004; + goto yy1977; + yy2007: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x8F) - goto yy2007; - goto yy1980; - yy2011: + goto yy2004; + goto yy1977; + yy2008: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x9F) - goto yy2005; - goto yy1980; - yy2012: + goto yy2002; + goto yy1977; + yy2009: ++p; - yy2013 : { return (bufsize_t)(p - start); } - yy2014: + yy2010 : { return (bufsize_t)(p - start); } + yy2011: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2003; + goto yy2000; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy2013; + goto yy2010; if (yych <= '\'') - goto yy2012; - goto yy2001; + goto yy2009; + goto yy1998; } else { if (yych <= 0xC1) - goto yy2013; + goto yy2010; if (yych <= 0xDF) - goto yy2005; - goto yy2006; + goto yy2002; + goto yy2003; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2011; - goto yy2007; + goto yy2008; + goto yy2004; } else { if (yych <= 0xF0) - goto yy2008; + goto yy2005; if (yych <= 0xF3) - goto yy2009; + goto yy2006; if (yych <= 0xF4) - goto yy2010; - goto yy2013; + goto yy2007; + goto yy2010; } } - yy2015: + yy2012: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2017; + goto yy2014; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1980; + goto yy1977; if (yych <= '"') - goto yy2028; - goto yy2015; + goto yy2025; + goto yy2012; } else { if (yych <= 0xC1) - goto yy1980; + goto yy1977; if (yych <= 0xDF) - goto yy2019; - goto yy2020; + goto yy2016; + goto yy2017; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2025; - goto yy2021; + goto yy2022; + goto yy2018; } else { if (yych <= 0xF0) - goto yy2022; + goto yy2019; if (yych <= 0xF3) - goto yy2023; + goto yy2020; if (yych <= 0xF4) - goto yy2024; - goto yy1980; + goto yy2021; + goto yy1977; } } - yy2017: + yy2014: ++p; yych = *p; - yy2018: + yy2015: if (yybm[0 + yych] & 128) { - goto yy2017; + goto yy2014; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1980; + goto yy1977; if (yych <= '"') - goto yy2026; - goto yy2015; + goto yy2023; + goto yy2012; } else { if (yych <= 0xC1) - goto yy1980; + goto yy1977; if (yych >= 0xE0) - goto yy2020; + goto yy2017; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2025; - goto yy2021; + goto yy2022; + goto yy2018; } else { if (yych <= 0xF0) - goto yy2022; + goto yy2019; if (yych <= 0xF3) - goto yy2023; + goto yy2020; if (yych <= 0xF4) - goto yy2024; - goto yy1980; + goto yy2021; + goto yy1977; } } - yy2019: + yy2016: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2017; - goto yy1980; - yy2020: + goto yy2014; + goto yy1977; + yy2017: ++p; yych = *p; if (yych <= 0x9F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2019; - goto yy1980; - yy2021: + goto yy2016; + goto yy1977; + yy2018: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2019; - goto yy1980; - yy2022: + goto yy2016; + goto yy1977; + yy2019: ++p; yych = *p; if (yych <= 0x8F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2021; - goto yy1980; - yy2023: + goto yy2018; + goto yy1977; + yy2020: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0xBF) - goto yy2021; - goto yy1980; - yy2024: + goto yy2018; + goto yy1977; + yy2021: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x8F) - goto yy2021; - goto yy1980; - yy2025: + goto yy2018; + goto yy1977; + yy2022: ++p; yych = *p; if (yych <= 0x7F) - goto yy1980; + goto yy1977; if (yych <= 0x9F) - goto yy2019; - goto yy1980; - yy2026: + goto yy2016; + goto yy1977; + yy2023: ++p; - yy2027 : { return (bufsize_t)(p - start); } - yy2028: + yy2024 : { return (bufsize_t)(p - start); } + yy2025: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2017; + goto yy2014; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy2027; + goto yy2024; if (yych <= '"') - goto yy2026; - goto yy2015; + goto yy2023; + goto yy2012; } else { if (yych <= 0xC1) - goto yy2027; + goto yy2024; if (yych <= 0xDF) - goto yy2019; - goto yy2020; + goto yy2016; + goto yy2017; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2025; - goto yy2021; + goto yy2022; + goto yy2018; } else { if (yych <= 0xF0) - goto yy2022; + goto yy2019; if (yych <= 0xF3) - goto yy2023; + goto yy2020; if (yych <= 0xF4) - goto yy2024; - goto yy2027; + goto yy2021; + goto yy2024; } } } @@ -24977,104 +24940,104 @@ bufsize_t _scan_spacechars(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '\r') { if (yych <= 0x08) - goto yy2035; + goto yy2032; if (yych == '\n') - goto yy2033; - goto yy2032; + goto yy2030; + goto yy2029; } else { if (yych == ' ') - goto yy2032; + goto yy2029; if (yych <= 0x7F) - goto yy2035; + goto yy2032; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2037; + goto yy2034; if (yych <= 0xE0) - goto yy2039; + goto yy2036; if (yych <= 0xEC) - goto yy2040; - goto yy2044; + goto yy2037; + goto yy2041; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2040; - goto yy2041; + goto yy2037; + goto yy2038; } else { if (yych <= 0xF3) - goto yy2042; + goto yy2039; if (yych <= 0xF4) - goto yy2043; + goto yy2040; } } } - yy2031 : { return (bufsize_t)(p - start); } - yy2032: + yy2028 : { return (bufsize_t)(p - start); } + yy2029: yych = *++p; - goto yy2034; - yy2033: + goto yy2031; + yy2030: ++p; yych = *p; - yy2034: + yy2031: if (yybm[0 + yych] & 128) { - goto yy2033; + goto yy2030; } - goto yy2031; - yy2035: + goto yy2028; + yy2032: ++p; { return 0; } - yy2037: + yy2034: yych = *++p; if (yych <= 0x7F) - goto yy2038; - if (yych <= 0xBF) goto yy2035; - yy2038: + if (yych <= 0xBF) + goto yy2032; + yy2035: p = marker; - goto yy2031; - yy2039: + goto yy2028; + yy2036: yych = *++p; if (yych <= 0x9F) - goto yy2038; + goto yy2035; if (yych <= 0xBF) - goto yy2037; - goto yy2038; - yy2040: + goto yy2034; + goto yy2035; + yy2037: yych = *++p; if (yych <= 0x7F) - goto yy2038; + goto yy2035; if (yych <= 0xBF) - goto yy2037; - goto yy2038; - yy2041: + goto yy2034; + goto yy2035; + yy2038: yych = *++p; if (yych <= 0x8F) - goto yy2038; + goto yy2035; if (yych <= 0xBF) - goto yy2040; - goto yy2038; - yy2042: + goto yy2037; + goto yy2035; + yy2039: yych = *++p; if (yych <= 0x7F) - goto yy2038; + goto yy2035; if (yych <= 0xBF) - goto yy2040; - goto yy2038; - yy2043: + goto yy2037; + goto yy2035; + yy2040: yych = *++p; if (yych <= 0x7F) - goto yy2038; + goto yy2035; if (yych <= 0x8F) - goto yy2040; - goto yy2038; - yy2044: + goto yy2037; + goto yy2035; + yy2041: ++p; if ((yych = *p) <= 0x7F) - goto yy2038; + goto yy2035; if (yych <= 0x9F) - goto yy2037; - goto yy2038; + goto yy2034; + goto yy2035; } } @@ -25103,178 +25066,178 @@ bufsize_t _scan_atx_header_start(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '"') { if (yych != '\n') - goto yy2049; + goto yy2046; } else { if (yych <= '#') - goto yy2048; + goto yy2045; if (yych <= 0x7F) - goto yy2049; + goto yy2046; if (yych >= 0xC2) - goto yy2050; + goto yy2047; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy2052; + goto yy2049; if (yych == 0xED) - goto yy2057; - goto yy2053; + goto yy2054; + goto yy2050; } else { if (yych <= 0xF0) - goto yy2054; + goto yy2051; if (yych <= 0xF3) - goto yy2055; + goto yy2052; if (yych <= 0xF4) - goto yy2056; + goto yy2053; } } - yy2047 : { return 0; } - yy2048: + yy2044 : { return 0; } + yy2045: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy2060; + goto yy2057; } if (yych <= '\f') { if (yych == '\n') - goto yy2058; - goto yy2047; + goto yy2055; + goto yy2044; } else { if (yych <= '\r') - goto yy2058; + goto yy2055; if (yych == '#') - goto yy2062; - goto yy2047; + goto yy2059; + goto yy2044; } - yy2049: + yy2046: yych = *++p; - goto yy2047; - yy2050: + goto yy2044; + yy2047: yych = *++p; if (yych <= 0x7F) - goto yy2051; + goto yy2048; if (yych <= 0xBF) - goto yy2049; - yy2051: + goto yy2046; + yy2048: p = marker; - goto yy2047; - yy2052: + goto yy2044; + yy2049: yych = *++p; if (yych <= 0x9F) - goto yy2051; + goto yy2048; if (yych <= 0xBF) - goto yy2050; - goto yy2051; - yy2053: + goto yy2047; + goto yy2048; + yy2050: yych = *++p; if (yych <= 0x7F) - goto yy2051; + goto yy2048; if (yych <= 0xBF) - goto yy2050; - goto yy2051; - yy2054: + goto yy2047; + goto yy2048; + yy2051: yych = *++p; if (yych <= 0x8F) - goto yy2051; + goto yy2048; if (yych <= 0xBF) - goto yy2053; - goto yy2051; - yy2055: + goto yy2050; + goto yy2048; + yy2052: yych = *++p; if (yych <= 0x7F) - goto yy2051; + goto yy2048; if (yych <= 0xBF) - goto yy2053; - goto yy2051; - yy2056: + goto yy2050; + goto yy2048; + yy2053: yych = *++p; if (yych <= 0x7F) - goto yy2051; + goto yy2048; if (yych <= 0x8F) - goto yy2053; - goto yy2051; - yy2057: + goto yy2050; + goto yy2048; + yy2054: yych = *++p; if (yych <= 0x7F) - goto yy2051; + goto yy2048; if (yych <= 0x9F) - goto yy2050; - goto yy2051; - yy2058: + goto yy2047; + goto yy2048; + yy2055: ++p; - yy2059 : { return (bufsize_t)(p - start); } - yy2060: + yy2056 : { return (bufsize_t)(p - start); } + yy2057: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2060; + goto yy2057; } - goto yy2059; - yy2062: + goto yy2056; + yy2059: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2060; + goto yy2057; } if (yych <= '\f') { if (yych == '\n') - goto yy2058; - goto yy2051; + goto yy2055; + goto yy2048; } else { if (yych <= '\r') - goto yy2058; + goto yy2055; if (yych != '#') - goto yy2051; + goto yy2048; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2060; + goto yy2057; } if (yych <= '\f') { if (yych == '\n') - goto yy2058; - goto yy2051; + goto yy2055; + goto yy2048; } else { if (yych <= '\r') - goto yy2058; + goto yy2055; if (yych != '#') - goto yy2051; + goto yy2048; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2060; + goto yy2057; } if (yych <= '\f') { if (yych == '\n') - goto yy2058; - goto yy2051; + goto yy2055; + goto yy2048; } else { if (yych <= '\r') - goto yy2058; + goto yy2055; if (yych != '#') - goto yy2051; + goto yy2048; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2060; + goto yy2057; } if (yych <= '\f') { if (yych == '\n') - goto yy2058; - goto yy2051; + goto yy2055; + goto yy2048; } else { if (yych <= '\r') - goto yy2058; + goto yy2055; if (yych != '#') - goto yy2051; + goto yy2048; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy2060; + goto yy2057; } if (yych == '\n') - goto yy2058; + goto yy2055; if (yych == '\r') - goto yy2058; - goto yy2051; + goto yy2055; + goto yy2048; } } @@ -25303,187 +25266,187 @@ bufsize_t _scan_setext_header_line(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '-') { if (yych == '\n') - goto yy2069; + goto yy2066; if (yych <= ',') - goto yy2072; - goto yy2071; + goto yy2069; + goto yy2068; } else { if (yych == '=') - goto yy2070; + goto yy2067; if (yych <= 0x7F) - goto yy2072; + goto yy2069; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2073; + goto yy2070; if (yych <= 0xE0) - goto yy2075; + goto yy2072; if (yych <= 0xEC) - goto yy2076; - goto yy2080; + goto yy2073; + goto yy2077; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2076; - goto yy2077; + goto yy2073; + goto yy2074; } else { if (yych <= 0xF3) - goto yy2078; + goto yy2075; if (yych <= 0xF4) - goto yy2079; + goto yy2076; } } } - yy2069 : { return 0; } - yy2070: + yy2066 : { return 0; } + yy2067: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy2091; + goto yy2088; } if (yych <= '\f') { if (yych == '\n') - goto yy2089; - goto yy2069; + goto yy2086; + goto yy2066; } else { if (yych <= '\r') - goto yy2089; + goto yy2086; if (yych == ' ') - goto yy2087; - goto yy2069; + goto yy2084; + goto yy2066; } - yy2071: + yy2068: yych = *(marker = ++p); if (yybm[0 + yych] & 32) { - goto yy2081; + goto yy2078; } if (yych <= '\f') { if (yych == '\n') - goto yy2083; - goto yy2069; + goto yy2080; + goto yy2066; } else { if (yych <= '\r') - goto yy2083; + goto yy2080; if (yych == '-') - goto yy2085; - goto yy2069; + goto yy2082; + goto yy2066; } - yy2072: + yy2069: yych = *++p; - goto yy2069; - yy2073: + goto yy2066; + yy2070: yych = *++p; if (yych <= 0x7F) - goto yy2074; + goto yy2071; if (yych <= 0xBF) - goto yy2072; - yy2074: + goto yy2069; + yy2071: p = marker; - goto yy2069; - yy2075: + goto yy2066; + yy2072: yych = *++p; if (yych <= 0x9F) - goto yy2074; + goto yy2071; if (yych <= 0xBF) - goto yy2073; - goto yy2074; - yy2076: + goto yy2070; + goto yy2071; + yy2073: yych = *++p; if (yych <= 0x7F) - goto yy2074; + goto yy2071; if (yych <= 0xBF) - goto yy2073; - goto yy2074; - yy2077: + goto yy2070; + goto yy2071; + yy2074: yych = *++p; if (yych <= 0x8F) - goto yy2074; + goto yy2071; if (yych <= 0xBF) - goto yy2076; - goto yy2074; - yy2078: + goto yy2073; + goto yy2071; + yy2075: yych = *++p; if (yych <= 0x7F) - goto yy2074; + goto yy2071; if (yych <= 0xBF) - goto yy2076; - goto yy2074; - yy2079: + goto yy2073; + goto yy2071; + yy2076: yych = *++p; if (yych <= 0x7F) - goto yy2074; + goto yy2071; if (yych <= 0x8F) - goto yy2076; - goto yy2074; - yy2080: + goto yy2073; + goto yy2071; + yy2077: yych = *++p; if (yych <= 0x7F) - goto yy2074; + goto yy2071; if (yych <= 0x9F) - goto yy2073; - goto yy2074; - yy2081: + goto yy2070; + goto yy2071; + yy2078: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2081; + goto yy2078; } if (yych == '\n') - goto yy2083; + goto yy2080; if (yych != '\r') - goto yy2074; - yy2083: + goto yy2071; + yy2080: ++p; { return 2; } - yy2085: + yy2082: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2081; + goto yy2078; } if (yych <= '\f') { if (yych == '\n') - goto yy2083; - goto yy2074; + goto yy2080; + goto yy2071; } else { if (yych <= '\r') - goto yy2083; + goto yy2080; if (yych == '-') - goto yy2085; - goto yy2074; + goto yy2082; + goto yy2071; } - yy2087: + yy2084: ++p; yych = *p; if (yych <= '\f') { if (yych != '\n') - goto yy2074; + goto yy2071; } else { if (yych <= '\r') - goto yy2089; + goto yy2086; if (yych == ' ') - goto yy2087; - goto yy2074; + goto yy2084; + goto yy2071; } - yy2089: + yy2086: ++p; { return 1; } - yy2091: + yy2088: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2091; + goto yy2088; } if (yych <= '\f') { if (yych == '\n') - goto yy2089; - goto yy2074; + goto yy2086; + goto yy2071; } else { if (yych <= '\r') - goto yy2089; + goto yy2086; if (yych == ' ') - goto yy2087; - goto yy2074; + goto yy2084; + goto yy2071; } } } @@ -25515,267 +25478,267 @@ bufsize_t _scan_hrule(const unsigned char *p) { if (yych <= 0x7F) { if (yych <= '*') { if (yych == '\n') - goto yy2095; + goto yy2092; if (yych <= ')') - goto yy2099; - goto yy2096; + goto yy2096; + goto yy2093; } else { if (yych <= '-') { if (yych <= ',') - goto yy2099; - goto yy2098; + goto yy2096; + goto yy2095; } else { if (yych == '_') - goto yy2097; - goto yy2099; + goto yy2094; + goto yy2096; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych >= 0xC2) - goto yy2100; + goto yy2097; } else { if (yych <= 0xE0) - goto yy2102; + goto yy2099; if (yych <= 0xEC) - goto yy2103; - goto yy2107; + goto yy2100; + goto yy2104; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2103; - goto yy2104; + goto yy2100; + goto yy2101; } else { if (yych <= 0xF3) - goto yy2105; + goto yy2102; if (yych <= 0xF4) - goto yy2106; + goto yy2103; } } } - yy2095 : { return 0; } - yy2096: + yy2092 : { return 0; } + yy2093: yych = *(marker = ++p); if (yych == ' ') - goto yy2128; + goto yy2125; if (yych == '*') - goto yy2130; - goto yy2095; - yy2097: + goto yy2127; + goto yy2092; + yy2094: yych = *(marker = ++p); if (yych == ' ') - goto yy2118; + goto yy2115; if (yych == '_') - goto yy2120; - goto yy2095; - yy2098: + goto yy2117; + goto yy2092; + yy2095: yych = *(marker = ++p); if (yybm[0 + yych] & 8) { - goto yy2108; + goto yy2105; } if (yych == '-') - goto yy2110; - goto yy2095; - yy2099: + goto yy2107; + goto yy2092; + yy2096: yych = *++p; - goto yy2095; - yy2100: + goto yy2092; + yy2097: yych = *++p; if (yych <= 0x7F) - goto yy2101; + goto yy2098; if (yych <= 0xBF) - goto yy2099; - yy2101: + goto yy2096; + yy2098: p = marker; - goto yy2095; - yy2102: + goto yy2092; + yy2099: yych = *++p; if (yych <= 0x9F) - goto yy2101; + goto yy2098; if (yych <= 0xBF) - goto yy2100; - goto yy2101; - yy2103: + goto yy2097; + goto yy2098; + yy2100: yych = *++p; if (yych <= 0x7F) - goto yy2101; + goto yy2098; if (yych <= 0xBF) - goto yy2100; - goto yy2101; - yy2104: + goto yy2097; + goto yy2098; + yy2101: yych = *++p; if (yych <= 0x8F) - goto yy2101; + goto yy2098; if (yych <= 0xBF) - goto yy2103; - goto yy2101; - yy2105: + goto yy2100; + goto yy2098; + yy2102: yych = *++p; if (yych <= 0x7F) - goto yy2101; + goto yy2098; if (yych <= 0xBF) - goto yy2103; - goto yy2101; - yy2106: + goto yy2100; + goto yy2098; + yy2103: yych = *++p; if (yych <= 0x7F) - goto yy2101; + goto yy2098; if (yych <= 0x8F) - goto yy2103; - goto yy2101; - yy2107: + goto yy2100; + goto yy2098; + yy2104: yych = *++p; if (yych <= 0x7F) - goto yy2101; + goto yy2098; if (yych <= 0x9F) - goto yy2100; - goto yy2101; - yy2108: + goto yy2097; + goto yy2098; + yy2105: ++p; yych = *p; if (yybm[0 + yych] & 8) { - goto yy2108; + goto yy2105; } if (yych != '-') - goto yy2101; - yy2110: + goto yy2098; + yy2107: ++p; yych = *p; if (yych == ' ') - goto yy2110; + goto yy2107; if (yych != '-') - goto yy2101; - yy2112: + goto yy2098; + yy2109: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy2112; + goto yy2109; } if (yych <= '\n') { if (yych <= 0x08) - goto yy2101; + goto yy2098; if (yych >= '\n') - goto yy2116; + goto yy2113; } else { if (yych == '\r') - goto yy2116; - goto yy2101; + goto yy2113; + goto yy2098; } - yy2114: + yy2111: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2114; + goto yy2111; } if (yych <= 0x08) - goto yy2101; + goto yy2098; if (yych <= '\n') - goto yy2116; + goto yy2113; if (yych != '\r') - goto yy2101; - yy2116: + goto yy2098; + yy2113: ++p; { return (bufsize_t)(p - start); } - yy2118: + yy2115: ++p; yych = *p; if (yych == ' ') - goto yy2118; + goto yy2115; if (yych != '_') - goto yy2101; - yy2120: + goto yy2098; + yy2117: ++p; yych = *p; if (yych == ' ') - goto yy2120; + goto yy2117; if (yych != '_') - goto yy2101; - yy2122: + goto yy2098; + yy2119: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2122; + goto yy2119; } if (yych <= '\n') { if (yych <= 0x08) - goto yy2101; + goto yy2098; if (yych >= '\n') - goto yy2126; + goto yy2123; } else { if (yych == '\r') - goto yy2126; - goto yy2101; + goto yy2123; + goto yy2098; } - yy2124: + yy2121: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy2101; + goto yy2098; if (yych <= '\t') - goto yy2124; + goto yy2121; if (yych >= '\v') - goto yy2101; + goto yy2098; } else { if (yych <= '\r') - goto yy2126; + goto yy2123; if (yych == ' ') - goto yy2124; - goto yy2101; + goto yy2121; + goto yy2098; } - yy2126: + yy2123: ++p; { return (bufsize_t)(p - start); } - yy2128: + yy2125: ++p; yych = *p; if (yych == ' ') - goto yy2128; + goto yy2125; if (yych != '*') - goto yy2101; - yy2130: + goto yy2098; + yy2127: ++p; yych = *p; if (yych == ' ') - goto yy2130; + goto yy2127; if (yych != '*') - goto yy2101; - yy2132: + goto yy2098; + yy2129: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2132; + goto yy2129; } if (yych <= '\n') { if (yych <= 0x08) - goto yy2101; + goto yy2098; if (yych >= '\n') - goto yy2136; + goto yy2133; } else { if (yych == '\r') - goto yy2136; - goto yy2101; + goto yy2133; + goto yy2098; } - yy2134: + yy2131: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy2101; + goto yy2098; if (yych <= '\t') - goto yy2134; + goto yy2131; if (yych >= '\v') - goto yy2101; + goto yy2098; } else { if (yych <= '\r') - goto yy2136; + goto yy2133; if (yych == ' ') - goto yy2134; - goto yy2101; + goto yy2131; + goto yy2098; } - yy2136: + yy2133: ++p; { return (bufsize_t)(p - start); } } @@ -25813,374 +25776,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy2140; + goto yy2137; if (yych <= '_') - goto yy2143; - goto yy2141; + goto yy2140; + goto yy2138; } else { if (yych == '~') - goto yy2142; + goto yy2139; if (yych <= 0x7F) - goto yy2143; + goto yy2140; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2144; + goto yy2141; if (yych <= 0xE0) - goto yy2146; + goto yy2143; if (yych <= 0xEC) - goto yy2147; - goto yy2151; + goto yy2144; + goto yy2148; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2147; - goto yy2148; + goto yy2144; + goto yy2145; } else { if (yych <= 0xF3) - goto yy2149; + goto yy2146; if (yych <= 0xF4) - goto yy2150; + goto yy2147; } } } - yy2140 : { return 0; } - yy2141: + yy2137 : { return 0; } + yy2138: yych = *(marker = ++p); if (yych == '`') - goto yy2166; - goto yy2140; - yy2142: + goto yy2163; + goto yy2137; + yy2139: yych = *(marker = ++p); if (yych == '~') - goto yy2152; - goto yy2140; - yy2143: + goto yy2149; + goto yy2137; + yy2140: yych = *++p; - goto yy2140; - yy2144: + goto yy2137; + yy2141: yych = *++p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2143; - yy2145: + goto yy2140; + yy2142: p = marker; - goto yy2140; - yy2146: + goto yy2137; + yy2143: yych = *++p; if (yych <= 0x9F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2144; - goto yy2145; - yy2147: + goto yy2141; + goto yy2142; + yy2144: yych = *++p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2144; - goto yy2145; - yy2148: + goto yy2141; + goto yy2142; + yy2145: yych = *++p; if (yych <= 0x8F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2147; - goto yy2145; - yy2149: + goto yy2144; + goto yy2142; + yy2146: yych = *++p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2147; - goto yy2145; - yy2150: + goto yy2144; + goto yy2142; + yy2147: yych = *++p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0x8F) - goto yy2147; - goto yy2145; - yy2151: + goto yy2144; + goto yy2142; + yy2148: yych = *++p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0x9F) - goto yy2144; - goto yy2145; - yy2152: + goto yy2141; + goto yy2142; + yy2149: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy2153; + goto yy2150; } - goto yy2145; - yy2153: + goto yy2142; + yy2150: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2155; + goto yy2152; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy2145; + goto yy2142; if (yych <= '\r') - goto yy2164; - goto yy2153; + goto yy2161; + goto yy2150; } else { if (yych <= 0xC1) - goto yy2145; + goto yy2142; if (yych <= 0xDF) - goto yy2157; - goto yy2158; + goto yy2154; + goto yy2155; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2163; - goto yy2159; + goto yy2160; + goto yy2156; } else { if (yych <= 0xF0) - goto yy2160; + goto yy2157; if (yych <= 0xF3) - goto yy2161; + goto yy2158; if (yych <= 0xF4) - goto yy2162; - goto yy2145; + goto yy2159; + goto yy2142; } } - yy2155: + yy2152: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2155; + goto yy2152; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy2145; + goto yy2142; if (yych <= '\r') - goto yy2164; - goto yy2145; + goto yy2161; + goto yy2142; } else { if (yych <= 0xDF) - goto yy2157; + goto yy2154; if (yych <= 0xE0) - goto yy2158; - goto yy2159; + goto yy2155; + goto yy2156; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy2163; + goto yy2160; if (yych <= 0xEF) - goto yy2159; - goto yy2160; + goto yy2156; + goto yy2157; } else { if (yych <= 0xF3) - goto yy2161; + goto yy2158; if (yych <= 0xF4) - goto yy2162; - goto yy2145; + goto yy2159; + goto yy2142; } } - yy2157: + yy2154: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2155; - goto yy2145; - yy2158: + goto yy2152; + goto yy2142; + yy2155: ++p; yych = *p; if (yych <= 0x9F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2157; - goto yy2145; - yy2159: + goto yy2154; + goto yy2142; + yy2156: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2157; - goto yy2145; - yy2160: + goto yy2154; + goto yy2142; + yy2157: ++p; yych = *p; if (yych <= 0x8F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2159; - goto yy2145; - yy2161: + goto yy2156; + goto yy2142; + yy2158: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2159; - goto yy2145; - yy2162: + goto yy2156; + goto yy2142; + yy2159: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0x8F) - goto yy2159; - goto yy2145; - yy2163: + goto yy2156; + goto yy2142; + yy2160: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0x9F) - goto yy2157; - goto yy2145; - yy2164: + goto yy2154; + goto yy2142; + yy2161: ++p; p = marker; { return (bufsize_t)(p - start); } - yy2166: + yy2163: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy2167; + goto yy2164; } - goto yy2145; - yy2167: + goto yy2142; + yy2164: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2169; + goto yy2166; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy2145; + goto yy2142; if (yych <= '\r') - goto yy2178; - goto yy2167; + goto yy2175; + goto yy2164; } else { if (yych <= 0xC1) - goto yy2145; + goto yy2142; if (yych <= 0xDF) - goto yy2171; - goto yy2172; + goto yy2168; + goto yy2169; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2177; - goto yy2173; + goto yy2174; + goto yy2170; } else { if (yych <= 0xF0) - goto yy2174; + goto yy2171; if (yych <= 0xF3) - goto yy2175; + goto yy2172; if (yych <= 0xF4) - goto yy2176; - goto yy2145; + goto yy2173; + goto yy2142; } } - yy2169: + yy2166: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2169; + goto yy2166; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy2145; + goto yy2142; if (yych <= '\r') - goto yy2178; - goto yy2145; + goto yy2175; + goto yy2142; } else { if (yych <= 0xDF) - goto yy2171; + goto yy2168; if (yych <= 0xE0) - goto yy2172; - goto yy2173; + goto yy2169; + goto yy2170; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy2177; + goto yy2174; if (yych <= 0xEF) - goto yy2173; - goto yy2174; + goto yy2170; + goto yy2171; } else { if (yych <= 0xF3) - goto yy2175; + goto yy2172; if (yych <= 0xF4) - goto yy2176; - goto yy2145; + goto yy2173; + goto yy2142; } } - yy2171: + yy2168: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2169; - goto yy2145; - yy2172: + goto yy2166; + goto yy2142; + yy2169: ++p; yych = *p; if (yych <= 0x9F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2171; - goto yy2145; - yy2173: + goto yy2168; + goto yy2142; + yy2170: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2171; - goto yy2145; - yy2174: + goto yy2168; + goto yy2142; + yy2171: ++p; yych = *p; if (yych <= 0x8F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2173; - goto yy2145; - yy2175: + goto yy2170; + goto yy2142; + yy2172: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0xBF) - goto yy2173; - goto yy2145; - yy2176: + goto yy2170; + goto yy2142; + yy2173: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0x8F) - goto yy2173; - goto yy2145; - yy2177: + goto yy2170; + goto yy2142; + yy2174: ++p; yych = *p; if (yych <= 0x7F) - goto yy2145; + goto yy2142; if (yych <= 0x9F) - goto yy2171; - goto yy2145; - yy2178: + goto yy2168; + goto yy2142; + yy2175: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -26212,190 +26175,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy2182; + goto yy2179; if (yych <= '_') - goto yy2185; - goto yy2183; + goto yy2182; + goto yy2180; } else { if (yych == '~') - goto yy2184; + goto yy2181; if (yych <= 0x7F) - goto yy2185; + goto yy2182; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2186; + goto yy2183; if (yych <= 0xE0) - goto yy2188; + goto yy2185; if (yych <= 0xEC) - goto yy2189; - goto yy2193; + goto yy2186; + goto yy2190; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2189; - goto yy2190; + goto yy2186; + goto yy2187; } else { if (yych <= 0xF3) - goto yy2191; + goto yy2188; if (yych <= 0xF4) - goto yy2192; + goto yy2189; } } } - yy2182 : { return 0; } - yy2183: + yy2179 : { return 0; } + yy2180: yych = *(marker = ++p); if (yych == '`') - goto yy2201; - goto yy2182; - yy2184: + goto yy2198; + goto yy2179; + yy2181: yych = *(marker = ++p); if (yych == '~') - goto yy2194; - goto yy2182; - yy2185: + goto yy2191; + goto yy2179; + yy2182: yych = *++p; - goto yy2182; - yy2186: + goto yy2179; + yy2183: yych = *++p; if (yych <= 0x7F) - goto yy2187; + goto yy2184; if (yych <= 0xBF) - goto yy2185; - yy2187: + goto yy2182; + yy2184: p = marker; - goto yy2182; - yy2188: + goto yy2179; + yy2185: yych = *++p; if (yych <= 0x9F) - goto yy2187; + goto yy2184; if (yych <= 0xBF) - goto yy2186; - goto yy2187; - yy2189: + goto yy2183; + goto yy2184; + yy2186: yych = *++p; if (yych <= 0x7F) - goto yy2187; + goto yy2184; if (yych <= 0xBF) - goto yy2186; - goto yy2187; - yy2190: + goto yy2183; + goto yy2184; + yy2187: yych = *++p; if (yych <= 0x8F) - goto yy2187; + goto yy2184; if (yych <= 0xBF) - goto yy2189; - goto yy2187; - yy2191: + goto yy2186; + goto yy2184; + yy2188: yych = *++p; if (yych <= 0x7F) - goto yy2187; + goto yy2184; if (yych <= 0xBF) - goto yy2189; - goto yy2187; - yy2192: + goto yy2186; + goto yy2184; + yy2189: yych = *++p; if (yych <= 0x7F) - goto yy2187; + goto yy2184; if (yych <= 0x8F) - goto yy2189; - goto yy2187; - yy2193: + goto yy2186; + goto yy2184; + yy2190: yych = *++p; if (yych <= 0x7F) - goto yy2187; + goto yy2184; if (yych <= 0x9F) - goto yy2186; - goto yy2187; - yy2194: + goto yy2183; + goto yy2184; + yy2191: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy2195; + goto yy2192; } - goto yy2187; - yy2195: + goto yy2184; + yy2192: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2197; + goto yy2194; } if (yych <= '\f') { if (yych <= 0x08) - goto yy2187; + goto yy2184; if (yych <= '\n') - goto yy2199; - goto yy2187; + goto yy2196; + goto yy2184; } else { if (yych <= '\r') - goto yy2199; + goto yy2196; if (yych == '~') - goto yy2195; - goto yy2187; + goto yy2192; + goto yy2184; } - yy2197: + yy2194: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2197; + goto yy2194; } if (yych <= 0x08) - goto yy2187; + goto yy2184; if (yych <= '\n') - goto yy2199; + goto yy2196; if (yych != '\r') - goto yy2187; - yy2199: + goto yy2184; + yy2196: ++p; p = marker; { return (bufsize_t)(p - start); } - yy2201: + yy2198: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2202; + goto yy2199; } - goto yy2187; - yy2202: + goto yy2184; + yy2199: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2202; + goto yy2199; } if (yych <= '\f') { if (yych <= 0x08) - goto yy2187; + goto yy2184; if (yych <= '\t') - goto yy2204; + goto yy2201; if (yych <= '\n') - goto yy2206; - goto yy2187; + goto yy2203; + goto yy2184; } else { if (yych <= '\r') - goto yy2206; + goto yy2203; if (yych != ' ') - goto yy2187; + goto yy2184; } - yy2204: + yy2201: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy2187; + goto yy2184; if (yych <= '\t') - goto yy2204; + goto yy2201; if (yych >= '\v') - goto yy2187; + goto yy2184; } else { if (yych <= '\r') - goto yy2206; + goto yy2203; if (yych == ' ') - goto yy2204; - goto yy2187; + goto yy2201; + goto yy2184; } - yy2206: + yy2203: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -26414,997 +26377,997 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '%') { if (yych != '\n') - goto yy2212; + goto yy2209; } else { if (yych <= '&') - goto yy2211; + goto yy2208; if (yych <= 0x7F) - goto yy2212; + goto yy2209; if (yych >= 0xC2) - goto yy2213; + goto yy2210; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy2215; + goto yy2212; if (yych == 0xED) - goto yy2220; - goto yy2216; + goto yy2217; + goto yy2213; } else { if (yych <= 0xF0) - goto yy2217; + goto yy2214; if (yych <= 0xF3) - goto yy2218; + goto yy2215; if (yych <= 0xF4) - goto yy2219; + goto yy2216; } } - yy2210 : { return 0; } - yy2211: + yy2207 : { return 0; } + yy2208: yych = *(marker = ++p); if (yych <= '@') { if (yych == '#') - goto yy2221; - goto yy2210; + goto yy2218; + goto yy2207; } else { if (yych <= 'Z') - goto yy2222; + goto yy2219; if (yych <= '`') - goto yy2210; + goto yy2207; if (yych <= 'z') - goto yy2222; - goto yy2210; + goto yy2219; + goto yy2207; } - yy2212: + yy2209: yych = *++p; - goto yy2210; - yy2213: + goto yy2207; + yy2210: yych = *++p; if (yych <= 0x7F) - goto yy2214; + goto yy2211; if (yych <= 0xBF) - goto yy2212; - yy2214: + goto yy2209; + yy2211: p = marker; - goto yy2210; - yy2215: + goto yy2207; + yy2212: yych = *++p; if (yych <= 0x9F) - goto yy2214; + goto yy2211; if (yych <= 0xBF) - goto yy2213; - goto yy2214; - yy2216: + goto yy2210; + goto yy2211; + yy2213: yych = *++p; if (yych <= 0x7F) - goto yy2214; + goto yy2211; if (yych <= 0xBF) - goto yy2213; - goto yy2214; - yy2217: + goto yy2210; + goto yy2211; + yy2214: yych = *++p; if (yych <= 0x8F) - goto yy2214; + goto yy2211; if (yych <= 0xBF) - goto yy2216; - goto yy2214; - yy2218: + goto yy2213; + goto yy2211; + yy2215: yych = *++p; if (yych <= 0x7F) - goto yy2214; + goto yy2211; if (yych <= 0xBF) - goto yy2216; - goto yy2214; - yy2219: + goto yy2213; + goto yy2211; + yy2216: yych = *++p; if (yych <= 0x7F) - goto yy2214; + goto yy2211; if (yych <= 0x8F) - goto yy2216; - goto yy2214; - yy2220: + goto yy2213; + goto yy2211; + yy2217: yych = *++p; if (yych <= 0x7F) - goto yy2214; + goto yy2211; if (yych <= 0x9F) - goto yy2213; - goto yy2214; - yy2221: + goto yy2210; + goto yy2211; + yy2218: yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2257; - goto yy2214; + goto yy2254; + goto yy2211; } else { if (yych <= 'X') - goto yy2256; + goto yy2253; if (yych == 'x') - goto yy2256; - goto yy2214; + goto yy2253; + goto yy2211; } - yy2222: + yy2219: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych >= ':') - goto yy2214; + goto yy2211; } else { if (yych <= 'Z') - goto yy2223; + goto yy2220; if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; + } + yy2220: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2211; + if (yych <= '9') + goto yy2223; + if (yych <= ':') + goto yy2211; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2211; + goto yy2223; + } else { + if (yych <= '`') + goto yy2211; + if (yych <= 'z') + goto yy2223; + goto yy2211; + } + } + yy2221: + ++p; + { return (bufsize_t)(p - start); } + yy2223: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2211; + if (yych <= '9') + goto yy2224; + if (yych <= ':') + goto yy2211; + goto yy2221; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2211; + } else { + if (yych <= '`') + goto yy2211; + if (yych >= '{') + goto yy2211; + } + } + yy2224: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy2211; + if (yych <= '9') + goto yy2225; + if (yych <= ':') + goto yy2211; + goto yy2221; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy2211; + } else { + if (yych <= '`') + goto yy2211; + if (yych >= '{') + goto yy2211; + } } - yy2223: + yy2225: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2226; if (yych <= ':') - goto yy2214; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; - goto yy2226; + goto yy2211; } else { if (yych <= '`') - goto yy2214; - if (yych <= 'z') - goto yy2226; - goto yy2214; + goto yy2211; + if (yych >= '{') + goto yy2211; } } - yy2224: - ++p; - { return (bufsize_t)(p - start); } yy2226: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2227; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2227: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2228; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2228: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2229; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2229: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2230; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2230: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2231; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2231: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2232; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2232: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2233; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2233: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2234; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2234: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2235; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2235: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2236; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2236: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2237; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2237: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2238; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2238: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2239; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2239: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2240; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2240: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2241; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2241: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2242; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2242: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2243; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2243: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2244; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2244: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2245; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2245: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2246; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2246: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2247; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2247: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2248; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2248: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2249; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2249: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2250; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2250: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2251; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2251: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') goto yy2252; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= '{') - goto yy2214; + goto yy2211; } } yy2252: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy2214; - if (yych <= '9') - goto yy2253; - if (yych <= ':') - goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy2214; - } else { - if (yych <= '`') - goto yy2214; - if (yych >= '{') - goto yy2214; - } - } - yy2253: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy2214; - if (yych <= '9') - goto yy2254; - if (yych <= ':') - goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy2214; - } else { - if (yych <= '`') - goto yy2214; - if (yych >= '{') - goto yy2214; - } - } - yy2254: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy2214; - if (yych <= '9') - goto yy2255; - if (yych <= ':') - goto yy2214; - goto yy2224; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy2214; - } else { - if (yych <= '`') - goto yy2214; - if (yych >= '{') - goto yy2214; - } - } - yy2255: yych = *++p; if (yych == ';') - goto yy2224; - goto yy2214; - yy2256: + goto yy2221; + goto yy2211; + yy2253: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2264; - goto yy2214; + goto yy2261; + goto yy2211; } else { if (yych <= 'F') - goto yy2264; + goto yy2261; if (yych <= '`') - goto yy2214; + goto yy2211; if (yych <= 'f') - goto yy2264; - goto yy2214; + goto yy2261; + goto yy2211; } - yy2257: + yy2254: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2258; + goto yy2255; if (yych == ';') - goto yy2224; - goto yy2214; - yy2258: + goto yy2221; + goto yy2211; + yy2255: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2259; + goto yy2256; if (yych == ';') - goto yy2224; - goto yy2214; - yy2259: + goto yy2221; + goto yy2211; + yy2256: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2260; + goto yy2257; if (yych == ';') - goto yy2224; - goto yy2214; - yy2260: + goto yy2221; + goto yy2211; + yy2257: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2261; + goto yy2258; if (yych == ';') - goto yy2224; - goto yy2214; - yy2261: + goto yy2221; + goto yy2211; + yy2258: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2262; + goto yy2259; if (yych == ';') - goto yy2224; - goto yy2214; - yy2262: + goto yy2221; + goto yy2211; + yy2259: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2263; + goto yy2260; if (yych == ';') - goto yy2224; - goto yy2214; - yy2263: + goto yy2221; + goto yy2211; + yy2260: yych = *++p; if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2255; + goto yy2252; if (yych == ';') - goto yy2224; - goto yy2214; - yy2264: + goto yy2221; + goto yy2211; + yy2261: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2265; + goto yy2262; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= 'g') - goto yy2214; + goto yy2211; } } - yy2265: + yy2262: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2266; + goto yy2263; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= 'g') - goto yy2214; + goto yy2211; } } - yy2266: + yy2263: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2267; + goto yy2264; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= 'g') - goto yy2214; + goto yy2211; } } - yy2267: + yy2264: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2268; + goto yy2265; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= 'g') - goto yy2214; + goto yy2211; } } - yy2268: + yy2265: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2269; + goto yy2266; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= 'g') - goto yy2214; + goto yy2211; } } - yy2269: + yy2266: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2270; + goto yy2267; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; + goto yy2211; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych >= 'g') - goto yy2214; + goto yy2211; } } - yy2270: + yy2267: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy2214; + goto yy2211; if (yych <= '9') - goto yy2255; + goto yy2252; if (yych <= ':') - goto yy2214; - goto yy2224; + goto yy2211; + goto yy2221; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2214; - goto yy2255; + goto yy2211; + goto yy2252; } else { if (yych <= '`') - goto yy2214; + goto yy2211; if (yych <= 'f') - goto yy2255; - goto yy2214; + goto yy2252; + goto yy2211; } } } @@ -27424,415 +27387,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'I') { if (yych <= 'C') { if (yych != '\n') - goto yy2278; + goto yy2275; } else { if (yych <= 'D') - goto yy2274; + goto yy2271; if (yych == 'F') - goto yy2277; - goto yy2278; + goto yy2274; + goto yy2275; } } else { if (yych <= 'V') { if (yych <= 'J') - goto yy2275; + goto yy2272; if (yych <= 'U') - goto yy2278; - goto yy2276; + goto yy2275; + goto yy2273; } else { if (yych == 'd') - goto yy2274; + goto yy2271; if (yych <= 'e') - goto yy2278; - goto yy2277; + goto yy2275; + goto yy2274; } } } else { if (yych <= 0xDF) { if (yych <= 'u') { if (yych == 'j') - goto yy2275; - goto yy2278; + goto yy2272; + goto yy2275; } else { if (yych <= 'v') - goto yy2276; + goto yy2273; if (yych <= 0x7F) - goto yy2278; + goto yy2275; if (yych >= 0xC2) - goto yy2279; + goto yy2276; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy2281; + goto yy2278; if (yych == 0xED) - goto yy2286; - goto yy2282; + goto yy2283; + goto yy2279; } else { if (yych <= 0xF0) - goto yy2283; + goto yy2280; if (yych <= 0xF3) - goto yy2284; + goto yy2281; if (yych <= 0xF4) - goto yy2285; + goto yy2282; } } } - yy2273 : { return 0; } - yy2274: + yy2270 : { return 0; } + yy2271: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy2308; + goto yy2305; if (yych == 'a') - goto yy2308; - goto yy2273; - yy2275: + goto yy2305; + goto yy2270; + yy2272: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy2299; + goto yy2296; if (yych == 'a') - goto yy2299; - goto yy2273; - yy2276: + goto yy2296; + goto yy2270; + yy2273: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy2292; + goto yy2289; if (yych == 'b') - goto yy2292; - goto yy2273; - yy2277: + goto yy2289; + goto yy2270; + yy2274: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy2287; + goto yy2284; if (yych == 'i') - goto yy2287; - goto yy2273; - yy2278: + goto yy2284; + goto yy2270; + yy2275: yych = *++p; - goto yy2273; - yy2279: + goto yy2270; + yy2276: yych = *++p; if (yych <= 0x7F) - goto yy2280; + goto yy2277; if (yych <= 0xBF) - goto yy2278; - yy2280: + goto yy2275; + yy2277: p = marker; if (yyaccept == 0) { - goto yy2273; + goto yy2270; } else { - goto yy2291; + goto yy2288; } - yy2281: + yy2278: yych = *++p; if (yych <= 0x9F) - goto yy2280; + goto yy2277; if (yych <= 0xBF) - goto yy2279; - goto yy2280; - yy2282: + goto yy2276; + goto yy2277; + yy2279: yych = *++p; if (yych <= 0x7F) - goto yy2280; + goto yy2277; if (yych <= 0xBF) - goto yy2279; - goto yy2280; - yy2283: + goto yy2276; + goto yy2277; + yy2280: yych = *++p; if (yych <= 0x8F) - goto yy2280; + goto yy2277; if (yych <= 0xBF) - goto yy2282; - goto yy2280; - yy2284: + goto yy2279; + goto yy2277; + yy2281: yych = *++p; if (yych <= 0x7F) - goto yy2280; + goto yy2277; if (yych <= 0xBF) - goto yy2282; - goto yy2280; - yy2285: + goto yy2279; + goto yy2277; + yy2282: yych = *++p; if (yych <= 0x7F) - goto yy2280; + goto yy2277; if (yych <= 0x8F) - goto yy2282; - goto yy2280; - yy2286: + goto yy2279; + goto yy2277; + yy2283: yych = *++p; if (yych <= 0x7F) - goto yy2280; + goto yy2277; if (yych <= 0x9F) - goto yy2279; - goto yy2280; - yy2287: + goto yy2276; + goto yy2277; + yy2284: yych = *++p; if (yych == 'L') - goto yy2288; + goto yy2285; if (yych != 'l') - goto yy2280; - yy2288: + goto yy2277; + yy2285: yych = *++p; if (yych == 'E') - goto yy2289; + goto yy2286; if (yych != 'e') - goto yy2280; - yy2289: + goto yy2277; + yy2286: yych = *++p; if (yych != ':') - goto yy2280; - yy2290: + goto yy2277; + yy2287: ++p; - yy2291 : { return (bufsize_t)(p - start); } - yy2292: + yy2288 : { return (bufsize_t)(p - start); } + yy2289: yych = *++p; if (yych == 'S') - goto yy2293; + goto yy2290; if (yych != 's') - goto yy2280; - yy2293: + goto yy2277; + yy2290: yych = *++p; if (yych == 'C') - goto yy2294; + goto yy2291; if (yych != 'c') - goto yy2280; - yy2294: + goto yy2277; + yy2291: yych = *++p; if (yych == 'R') - goto yy2295; + goto yy2292; if (yych != 'r') - goto yy2280; - yy2295: + goto yy2277; + yy2292: yych = *++p; if (yych == 'I') - goto yy2296; + goto yy2293; if (yych != 'i') - goto yy2280; - yy2296: + goto yy2277; + yy2293: yych = *++p; if (yych == 'P') - goto yy2297; + goto yy2294; if (yych != 'p') - goto yy2280; - yy2297: + goto yy2277; + yy2294: yych = *++p; if (yych == 'T') - goto yy2298; + goto yy2295; if (yych != 't') - goto yy2280; - yy2298: + goto yy2277; + yy2295: yych = *++p; if (yych == ':') - goto yy2290; - goto yy2280; - yy2299: + goto yy2287; + goto yy2277; + yy2296: yych = *++p; if (yych == 'V') - goto yy2300; + goto yy2297; if (yych != 'v') - goto yy2280; - yy2300: + goto yy2277; + yy2297: yych = *++p; if (yych == 'A') - goto yy2301; + goto yy2298; if (yych != 'a') - goto yy2280; - yy2301: + goto yy2277; + yy2298: yych = *++p; if (yych == 'S') - goto yy2302; + goto yy2299; if (yych != 's') - goto yy2280; - yy2302: + goto yy2277; + yy2299: yych = *++p; if (yych == 'C') - goto yy2303; + goto yy2300; if (yych != 'c') - goto yy2280; - yy2303: + goto yy2277; + yy2300: yych = *++p; if (yych == 'R') - goto yy2304; + goto yy2301; if (yych != 'r') - goto yy2280; - yy2304: + goto yy2277; + yy2301: yych = *++p; if (yych == 'I') - goto yy2305; + goto yy2302; if (yych != 'i') - goto yy2280; - yy2305: + goto yy2277; + yy2302: yych = *++p; if (yych == 'P') - goto yy2306; + goto yy2303; if (yych != 'p') - goto yy2280; - yy2306: + goto yy2277; + yy2303: yych = *++p; if (yych == 'T') - goto yy2307; + goto yy2304; if (yych != 't') - goto yy2280; - yy2307: + goto yy2277; + yy2304: yych = *++p; if (yych == ':') - goto yy2290; - goto yy2280; - yy2308: + goto yy2287; + goto yy2277; + yy2305: yych = *++p; if (yych == 'T') - goto yy2309; + goto yy2306; if (yych != 't') - goto yy2280; - yy2309: + goto yy2277; + yy2306: yych = *++p; if (yych == 'A') - goto yy2310; + goto yy2307; if (yych != 'a') - goto yy2280; - yy2310: + goto yy2277; + yy2307: yych = *++p; if (yych != ':') - goto yy2280; + goto yy2277; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy2312; + goto yy2309; if (yych != 'i') - goto yy2291; - yy2312: + goto yy2288; + yy2309: yych = *++p; if (yych == 'M') - goto yy2313; + goto yy2310; if (yych != 'm') - goto yy2280; - yy2313: + goto yy2277; + yy2310: yych = *++p; if (yych == 'A') - goto yy2314; + goto yy2311; if (yych != 'a') - goto yy2280; - yy2314: + goto yy2277; + yy2311: yych = *++p; if (yych == 'G') - goto yy2315; + goto yy2312; if (yych != 'g') - goto yy2280; - yy2315: + goto yy2277; + yy2312: yych = *++p; if (yych == 'E') - goto yy2316; + goto yy2313; if (yych != 'e') - goto yy2280; - yy2316: + goto yy2277; + yy2313: yych = *++p; if (yych != '/') - goto yy2280; + goto yy2277; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy2319; + goto yy2316; if (yych <= 'I') - goto yy2280; - goto yy2320; + goto yy2277; + goto yy2317; } else { if (yych == 'P') - goto yy2318; + goto yy2315; if (yych <= 'V') - goto yy2280; - goto yy2321; + goto yy2277; + goto yy2318; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy2319; + goto yy2316; if (yych <= 'i') - goto yy2280; - goto yy2320; + goto yy2277; + goto yy2317; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy2280; + goto yy2277; } else { if (yych == 'w') - goto yy2321; - goto yy2280; + goto yy2318; + goto yy2277; } } } - yy2318: + yy2315: yych = *++p; if (yych == 'N') - goto yy2329; + goto yy2326; if (yych == 'n') - goto yy2329; - goto yy2280; - yy2319: + goto yy2326; + goto yy2277; + yy2316: yych = *++p; if (yych == 'I') - goto yy2328; + goto yy2325; if (yych == 'i') - goto yy2328; - goto yy2280; - yy2320: + goto yy2325; + goto yy2277; + yy2317: yych = *++p; if (yych == 'P') - goto yy2326; + goto yy2323; if (yych == 'p') - goto yy2326; - goto yy2280; - yy2321: + goto yy2323; + goto yy2277; + yy2318: yych = *++p; if (yych == 'E') - goto yy2322; + goto yy2319; if (yych != 'e') - goto yy2280; - yy2322: + goto yy2277; + yy2319: yych = *++p; if (yych == 'B') - goto yy2323; + goto yy2320; if (yych != 'b') - goto yy2280; - yy2323: + goto yy2277; + yy2320: yych = *++p; if (yych == 'P') - goto yy2324; + goto yy2321; if (yych != 'p') - goto yy2280; - yy2324: + goto yy2277; + yy2321: ++p; { return 0; } - yy2326: + yy2323: yych = *++p; if (yych == 'E') - goto yy2327; + goto yy2324; if (yych != 'e') - goto yy2280; - yy2327: + goto yy2277; + yy2324: yych = *++p; if (yych == 'G') - goto yy2324; + goto yy2321; if (yych == 'g') - goto yy2324; - goto yy2280; - yy2328: + goto yy2321; + goto yy2277; + yy2325: yych = *++p; if (yych == 'F') - goto yy2324; + goto yy2321; if (yych == 'f') - goto yy2324; - goto yy2280; - yy2329: + goto yy2321; + goto yy2277; + yy2326: ++p; if ((yych = *p) == 'G') - goto yy2324; + goto yy2321; if (yych == 'g') - goto yy2324; - goto yy2280; + goto yy2321; + goto yy2277; } } diff --git a/src/scanners.re b/src/scanners.re index fbe32836f3..6a4bba416a 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -32,7 +32,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, tagname = [A-Za-z][A-Za-z0-9-]*; - blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'head'|'header'|'hr'|'html'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'pre'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; + blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'head'|'header'|'hr'|'html'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; -- cgit 0.0.5-2-1-g0f52 From a4f61e832fa9f99e04d05ab4b4768538ba076c84 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 8 Aug 2015 13:10:10 -0700 Subject: Treat line ending with EOF as ending with newline. Closes #71. Added a test to api_test. --- api_test/main.c | 9 +++++++++ src/blocks.c | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index 7c3ac1df03..bcfbb6db3e 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -677,6 +677,7 @@ line_endings(test_batch_runner *runner) STR_EQ(runner, html, "
                                \n
                              • a
                              • \n
                              • b
                              • \n
                              • c
                              • \n
                              • d
                              • \n
                              \n", "list with different line endings"); free(html); + static const char crlf_lines[] = "line\r\nline\r\n"; html = cmark_markdown_to_html(crlf_lines, sizeof(crlf_lines) - 1, @@ -684,6 +685,14 @@ line_endings(test_batch_runner *runner) STR_EQ(runner, html, "

                              line
                              \nline

                              \n", "crlf endings with CMARK_OPT_HARDBREAKS"); free(html); + + static const char no_line_ending[] = "```\nline\n```"; + html = cmark_markdown_to_html(no_line_ending, + sizeof(no_line_ending) - 1, + CMARK_OPT_DEFAULT); + STR_EQ(runner, html, "
                              line\n
                              \n", + "fenced code block with no final newline"); + free(html); } static void diff --git a/src/blocks.c b/src/blocks.c index f1e3a7a6bf..4432f78f94 100755 --- a/src/blocks.c +++ b/src/blocks.c @@ -598,6 +598,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else { cmark_strbuf_put(parser->curline, buffer, bytes); } + // ensure line ends with a newline: + if (!S_is_line_end_char(parser->curline->ptr[bytes - 1])) { + cmark_strbuf_putc(parser->curline, '\n'); + } parser->offset = 0; parser->column = 0; parser->blank = false; -- cgit 0.0.5-2-1-g0f52 From f2ac8b6aa69a4765e44f815a031b7aa574d44b57 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 8 Aug 2015 23:31:54 -0700 Subject: Improved cmark_strbuf_normalize_whitespace. Now all characters that satisfy cmark_isspace are recognized as whitespace. Previously CR and TAB (and others) weren't included. Partially addresses #73. --- src/buffer.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 9d31881c25..26dfb8eb6e 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -282,17 +282,12 @@ void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) { bufsize_t r, w; for (r = 0, w = 0; r < s->size; ++r) { - switch (s->ptr[r]) { - case ' ': - case '\n': - if (last_char_was_space) - break; - - s->ptr[w++] = ' '; - last_char_was_space = true; - break; - - default: + if (cmark_isspace(s->ptr[r])) { + if (!last_char_was_space) { + s->ptr[w++] = ' '; + last_char_was_space = true; + } + } else { s->ptr[w++] = s->ptr[r]; last_char_was_space = false; } -- cgit 0.0.5-2-1-g0f52 From 3856314a186cc244b12119154e1db6c78e258e7c Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 9 Aug 2015 18:51:57 +0200 Subject: Avoid name clash between Windows .pdb files --- src/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 80ecfc212b..67d7b72749 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -104,6 +104,9 @@ endif(MSVC) set_property(TARGET ${LIBRARY} APPEND PROPERTY MACOSX_RPATH true) +# Avoid name clash between PROGRAM and LIBRARY pdb files. +set_target_properties(${LIBRARY} PROPERTIES PDB_NAME cmark_dll) + generate_export_header(${LIBRARY} BASE_NAME ${PROJECT_NAME}) -- cgit 0.0.5-2-1-g0f52 From 6c416f20273cd427af18e25c0911ef6cf0da96d0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 9 Aug 2015 11:14:21 -0700 Subject: Make sure every line fed to S_process_line ends with `\n`. So `S_process_line` sees only unix style line endings. Closes #72, avoiding mixed line endings. Ultimately we probably want a better solution, allowing the line ending style of the input file to be preserved. This solution forces output with newlines. --- src/blocks.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 4432f78f94..38450e08e4 100755 --- a/src/blocks.c +++ b/src/blocks.c @@ -477,10 +477,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, bool process = false; for (eol = buffer; eol < end; ++eol) { if (S_is_line_end_char(*eol)) { - if (eol < end && *eol == '\r') - eol++; - if (eol < end && *eol == '\n') - eol++; process = true; break; } @@ -514,6 +510,11 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, } buffer += chunk_len; + // skip over line ending characters: + if (buffer < end && *buffer == '\r') + buffer++; + if (buffer < end && *buffer == '\n') + buffer++; } } -- cgit 0.0.5-2-1-g0f52 From 8a3abfdb1c4dbe65b83b3df6b450a93a8a7eb170 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 9 Aug 2015 11:39:21 -0700 Subject: Check for empty string before trying to look at line ending. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 38450e08e4..6b2e14dd1e 100755 --- a/src/blocks.c +++ b/src/blocks.c @@ -600,7 +600,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, cmark_strbuf_put(parser->curline, buffer, bytes); } // ensure line ends with a newline: - if (!S_is_line_end_char(parser->curline->ptr[bytes - 1])) { + if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) { cmark_strbuf_putc(parser->curline, '\n'); } parser->offset = 0; -- cgit 0.0.5-2-1-g0f52 From 50114ff73006e97bc60761191dfd0ac8024aea73 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 9 Aug 2015 21:22:49 -0700 Subject: Fixed bug with HRULE after blank line. This previously caused cmark to break out of a list, thinking it had two consecutive blanks. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 6b2e14dd1e..6d3053bf90 100755 --- a/src/blocks.c +++ b/src/blocks.c @@ -812,7 +812,6 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, // it's only now that we know the line is not part of a setext header: container = add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); - container = finalize(parser, container); S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); } else if ((matched = @@ -898,6 +897,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container->last_line_blank = (parser->blank && container->type != NODE_BLOCK_QUOTE && container->type != NODE_HEADER && + container->type != NODE_HRULE && !(container->type == NODE_CODE_BLOCK && container->as.code.fenced) && !(container->type == NODE_ITEM && container->first_child == NULL && container->start_line == parser->line_number)); -- cgit 0.0.5-2-1-g0f52 From bb9f8086d4873defc0adee3e6b05327e41a3d885 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Mon, 10 Aug 2015 08:56:11 -0700 Subject: Fix FileNotFoundError errors on tests when cmark is built from another project via add_subdirectory() CMAKE_SOURCE_DIR will refer to the top-level source directory, not cmark, so CMAKE_CURRENT_SOURCE_DIR must be used. Also the same for CMAKE_BINARY_DIR. Ideally it should be using the TARGET_FILE CMake generator to get a target's location instead of hard coding the path, but that requires CMake 3.0 or greater. --- test/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) mode change 100644 => 100755 test/CMakeLists.txt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt old mode 100644 new mode 100755 index 6d752cac45..164fba1bda --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,20 +27,20 @@ IF (PYTHONINTERP_FOUND) add_test(spectest_library ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" - "${CMAKE_SOURCE_DIR}/test/spec.txt" "--library-dir" "${CMAKE_BINARY_DIR}/src" + "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) add_test(pathological_tests_library ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/pathological_tests.py" - "--library-dir" "${CMAKE_BINARY_DIR}/src" + "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) add_test(spectest_executable - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_SOURCE_DIR}/test/spec.txt" "--program" "${CMAKE_BINARY_DIR}/src/cmark" + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" ) add_test(smartpuncttest_executable - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_SOURCE_DIR}/test/smart_punct.txt" "--program" "${CMAKE_BINARY_DIR}/src/cmark --smart" + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/smart_punct.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark --smart" ) ELSE(PYTHONINTERP_FOUND) -- cgit 0.0.5-2-1-g0f52 From 7baf9297f4f2e368c7c91ac76e16e88902987ec6 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Mon, 10 Aug 2015 09:45:59 -0700 Subject: Fix MSVC inline errors when cmark is included in other sources that don't have the same set of disabled warnings --- src/buffer.h | 6 +++--- src/chunk.h | 20 ++++++++++---------- src/config.h.in | 8 ++++++++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/buffer.h b/src/buffer.h index e99db72026..88b79f3bd9 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -48,7 +48,7 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf); -static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { +CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { return (char *)buf->ptr; } @@ -75,14 +75,14 @@ void cmark_strbuf_unescape(cmark_strbuf *s); /* Print error and abort. */ void cmark_strbuf_overflow_err(void); -static inline bufsize_t cmark_strbuf_check_bufsize(size_t size) { +CMARK_INLINE bufsize_t cmark_strbuf_check_bufsize(size_t size) { if (size > BUFSIZE_MAX) { cmark_strbuf_overflow_err(); } return (bufsize_t)size; } -static inline bufsize_t cmark_strbuf_safe_strlen(const char *str) { +CMARK_INLINE bufsize_t cmark_strbuf_safe_strlen(const char *str) { return cmark_strbuf_check_bufsize(strlen(str)); } diff --git a/src/chunk.h b/src/chunk.h index db1bf0d218..90cf5685ac 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -16,7 +16,7 @@ typedef struct { bufsize_t alloc; // also implies a NULL-terminated string } cmark_chunk; -static inline void cmark_chunk_free(cmark_chunk *c) { +CMARK_INLINE void cmark_chunk_free(cmark_chunk *c) { if (c->alloc) free(c->data); @@ -25,7 +25,7 @@ static inline void cmark_chunk_free(cmark_chunk *c) { c->len = 0; } -static inline void cmark_chunk_ltrim(cmark_chunk *c) { +CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { assert(!c->alloc); while (c->len && cmark_isspace(c->data[0])) { @@ -34,7 +34,7 @@ static inline void cmark_chunk_ltrim(cmark_chunk *c) { } } -static inline void cmark_chunk_rtrim(cmark_chunk *c) { +CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { while (c->len > 0) { if (!cmark_isspace(c->data[c->len - 1])) break; @@ -43,19 +43,19 @@ static inline void cmark_chunk_rtrim(cmark_chunk *c) { } } -static inline void cmark_chunk_trim(cmark_chunk *c) { +CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { cmark_chunk_ltrim(c); cmark_chunk_rtrim(c); } -static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, +CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); return p ? (bufsize_t)(p - ch->data) : ch->len; } -static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) { +CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { unsigned char *str; if (c->alloc) { @@ -74,7 +74,7 @@ static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) { return (char *)str; } -static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { +CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { if (c->alloc) { free(c->data); } @@ -90,19 +90,19 @@ static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { } } -static inline cmark_chunk cmark_chunk_literal(const char *data) { +CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0; cmark_chunk c = {(unsigned char *)data, len, 0}; return c; } -static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, +CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; } -static inline cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { +CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { cmark_chunk c; c.len = buf->size; diff --git a/src/config.h.in b/src/config.h.in index 5294bc9b6a..a392111a76 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -15,3 +15,11 @@ #else #define CMARK_ATTRIBUTE(list) #endif + +#ifndef CMARK_INLINE + #ifdef _MSC_VER + #define CMARK_INLINE __inline + #else + #define CMARK_INLINE static inline + #endif +#endif -- cgit 0.0.5-2-1-g0f52 From 59bcd222c3ef1a64045e27db24ffddeb99ee29d4 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Mon, 10 Aug 2015 09:53:46 -0700 Subject: Remove need to disable MSVC warning 4800 --- api_test/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/inlines.c | 6 +++--- src/iterator.c | 2 +- src/node.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index 74893883ed..f7dff553ec 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -18,7 +18,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /wd4800 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 67d7b72749..ecdd016b20 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,7 +155,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /wd4800 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() diff --git a/src/inlines.c b/src/inlines.c index f8a2cfc293..3275ddd5b0 100755 --- a/src/inlines.c +++ b/src/inlines.c @@ -1034,13 +1034,13 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { case '_': case '\'': case '"': - new_inl = handle_delim(subj, c, options & CMARK_OPT_SMART); + new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0); break; case '-': - new_inl = handle_hyphen(subj, options & CMARK_OPT_SMART); + new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0); break; case '.': - new_inl = handle_period(subj, options & CMARK_OPT_SMART); + new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0); break; case '[': advance(subj); diff --git a/src/iterator.c b/src/iterator.c index 81b6f48e21..19dfff874f 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -31,7 +31,7 @@ cmark_iter *cmark_iter_new(cmark_node *root) { void cmark_iter_free(cmark_iter *iter) { free(iter); } static bool S_is_leaf(cmark_node *node) { - return (1 << node->type) & S_leaf_mask; + return ((1 << node->type) & S_leaf_mask) != 0; } cmark_event_type cmark_iter_next(cmark_iter *iter) { diff --git a/src/node.c b/src/node.c index ad12d63fb8..c5f4553319 100644 --- a/src/node.c +++ b/src/node.c @@ -426,7 +426,7 @@ int cmark_node_set_list_tight(cmark_node *node, int tight) { } if (node->type == CMARK_NODE_LIST) { - node->as.list.tight = tight; + node->as.list.tight = tight == 1; return 1; } else { return 0; -- cgit 0.0.5-2-1-g0f52 From 722bc5df7e7bde6ec865b991e500aca04c931ad5 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Mon, 10 Aug 2015 10:06:14 -0700 Subject: Remove need to disable MSVC warning 4244 --- api_test/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/blocks.c | 2 +- src/buffer.c | 2 +- src/html.c | 4 ++-- src/utf8.c | 8 ++++---- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index f7dff553ec..4ac4a1d8ee 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -18,7 +18,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ecdd016b20..0f04351051 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,7 +155,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4244 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() diff --git a/src/blocks.c b/src/blocks.c index 6d3053bf90..49ac273142 100755 --- a/src/blocks.c +++ b/src/blocks.c @@ -774,7 +774,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container->as.code.fenced = true; container->as.code.fence_char = peek_at(&input, parser->first_nonspace); container->as.code.fence_length = matched; - container->as.code.fence_offset = parser->first_nonspace - parser->offset; + container->as.code.fence_offset = (int8_t)(parser->first_nonspace - parser->offset); container->as.code.info = cmark_chunk_literal(""); S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, diff --git a/src/buffer.c b/src/buffer.c index 26dfb8eb6e..a89c82e36d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -133,7 +133,7 @@ void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { void cmark_strbuf_putc(cmark_strbuf *buf, int c) { S_strbuf_grow_by(buf, 1); - buf->ptr[buf->size++] = c; + buf->ptr[buf->size++] = (unsigned char)(c & 0xFF); buf->ptr[buf->size] = '\0'; } diff --git a/src/html.c b/src/html.c index e365c8cc20..dfe2aec8ff 100644 --- a/src/html.c +++ b/src/html.c @@ -130,12 +130,12 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_HEADER: if (entering) { cr(html); - start_header[2] = '0' + node->as.header.level; + start_header[2] = (char)('0' + node->as.header.level); cmark_strbuf_puts(html, start_header); S_render_sourcepos(node, html, options); cmark_strbuf_putc(html, '>'); } else { - end_header[3] = '0' + node->as.header.level; + end_header[3] = (char)('0' + node->as.header.level); cmark_strbuf_puts(html, end_header); cmark_strbuf_puts(html, ">\n"); } diff --git a/src/utf8.c b/src/utf8.c index a742a7527a..319539dc0a 100755 --- a/src/utf8.c +++ b/src/utf8.c @@ -191,10 +191,10 @@ void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { assert(uc >= 0); if (uc < 0x80) { - dst[0] = uc; + dst[0] = (uint8_t)(uc); len = 1; } else if (uc < 0x800) { - dst[0] = 0xC0 + (uc >> 6); + dst[0] = (uint8_t)(0xC0 + (uc >> 6)); dst[1] = 0x80 + (uc & 0x3F); len = 2; } else if (uc == 0xFFFF) { @@ -204,12 +204,12 @@ void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { dst[0] = 0xFE; len = 1; } else if (uc < 0x10000) { - dst[0] = 0xE0 + (uc >> 12); + dst[0] = (uint8_t)(0xE0 + (uc >> 12)); dst[1] = 0x80 + ((uc >> 6) & 0x3F); dst[2] = 0x80 + (uc & 0x3F); len = 3; } else if (uc < 0x110000) { - dst[0] = 0xF0 + (uc >> 18); + dst[0] = (uint8_t)(0xF0 + (uc >> 18)); dst[1] = 0x80 + ((uc >> 12) & 0x3F); dst[2] = 0x80 + ((uc >> 6) & 0x3F); dst[3] = 0x80 + (uc & 0x3F); -- cgit 0.0.5-2-1-g0f52 From 6c51eb5a98521cc2f94dd0139a17f72e025ecfe8 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Mon, 10 Aug 2015 10:07:54 -0700 Subject: Remove need to disable MSVC warning 4244 --- api_test/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/node.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index 4ac4a1d8ee..02dbf1536d 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -18,7 +18,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0f04351051..30d018fdab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,7 +155,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() diff --git a/src/node.c b/src/node.c index c5f4553319..46d234ab4d 100644 --- a/src/node.c +++ b/src/node.c @@ -717,7 +717,7 @@ int cmark_node_check(cmark_node *node, FILE *out) { } cur = node; - while (true) { + for (;;) { if (cur->first_child) { if (cur->first_child->prev != NULL) { S_print_error(out, cur->first_child, "prev"); -- cgit 0.0.5-2-1-g0f52 From ce0e58469f7c4abf3f51bde6d3298215d6ef99d1 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Mon, 10 Aug 2015 10:09:26 -0700 Subject: Remove need to disable MSVC warning 4267 --- api_test/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index 02dbf1536d..3151ccccb9 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -18,7 +18,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4706 /D_CRT_SECURE_NO_WARNINGS") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 30d018fdab..f619453678 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,7 +155,7 @@ if(MSVC) else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4706 /D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4706 /D_CRT_SECURE_NO_WARNINGS") elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() -- cgit 0.0.5-2-1-g0f52 From f1b1e2ec71f50a00850db3a68c421a2d79bba115 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 10 Aug 2015 20:22:29 -0700 Subject: Don't include static in CMARK_INLINE. ALso don't set CMARK_INLINE to __inline if we're compiling under MSVC in cplusplus mode. --- src/buffer.h | 6 +++--- src/chunk.h | 24 +++++++++++++----------- src/config.h.in | 4 ++-- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/buffer.h b/src/buffer.h index 88b79f3bd9..6fd0cae61c 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -48,7 +48,7 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf); -CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { +static CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { return (char *)buf->ptr; } @@ -75,14 +75,14 @@ void cmark_strbuf_unescape(cmark_strbuf *s); /* Print error and abort. */ void cmark_strbuf_overflow_err(void); -CMARK_INLINE bufsize_t cmark_strbuf_check_bufsize(size_t size) { +static CMARK_INLINE bufsize_t cmark_strbuf_check_bufsize(size_t size) { if (size > BUFSIZE_MAX) { cmark_strbuf_overflow_err(); } return (bufsize_t)size; } -CMARK_INLINE bufsize_t cmark_strbuf_safe_strlen(const char *str) { +static CMARK_INLINE bufsize_t cmark_strbuf_safe_strlen(const char *str) { return cmark_strbuf_check_bufsize(strlen(str)); } diff --git a/src/chunk.h b/src/chunk.h index 90cf5685ac..a8a11f6d32 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -16,7 +16,7 @@ typedef struct { bufsize_t alloc; // also implies a NULL-terminated string } cmark_chunk; -CMARK_INLINE void cmark_chunk_free(cmark_chunk *c) { +static CMARK_INLINE void cmark_chunk_free(cmark_chunk *c) { if (c->alloc) free(c->data); @@ -25,7 +25,7 @@ CMARK_INLINE void cmark_chunk_free(cmark_chunk *c) { c->len = 0; } -CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { +static CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { assert(!c->alloc); while (c->len && cmark_isspace(c->data[0])) { @@ -34,7 +34,7 @@ CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { } } -CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { +static CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { while (c->len > 0) { if (!cmark_isspace(c->data[c->len - 1])) break; @@ -43,19 +43,19 @@ CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { } } -CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { +static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { cmark_chunk_ltrim(c); cmark_chunk_rtrim(c); } -CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, +static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); return p ? (bufsize_t)(p - ch->data) : ch->len; } -CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { +static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { unsigned char *str; if (c->alloc) { @@ -74,7 +74,8 @@ CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { return (char *)str; } -CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { +static CMARK_INLINE void +cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { if (c->alloc) { free(c->data); } @@ -90,19 +91,20 @@ CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { } } -CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { +static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0; cmark_chunk c = {(unsigned char *)data, len, 0}; return c; } -CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, - bufsize_t len) { +static CMARK_INLINE +cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, + bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; } -CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { +static CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { cmark_chunk c; c.len = buf->size; diff --git a/src/config.h.in b/src/config.h.in index a392111a76..27923134e4 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -17,9 +17,9 @@ #endif #ifndef CMARK_INLINE - #ifdef _MSC_VER + #if defined(_MSC_VER) && !defined(__cplusplus) #define CMARK_INLINE __inline #else - #define CMARK_INLINE static inline + #define CMARK_INLINE inline #endif #endif -- cgit 0.0.5-2-1-g0f52 From 0209706acc088e84e2655747d7dff6d6a4e69b91 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Tue, 11 Aug 2015 10:30:39 -0700 Subject: Add option to disable tests --- CMakeLists.txt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) mode change 100644 => 100755 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100644 new mode 100755 index a58f105e24..7a22064907 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,11 +13,17 @@ set(PROJECT_VERSION_MINOR 21) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) +option(CMARK_TESTS "Build cmark tests and enable testing" ON) + add_subdirectory(src) -add_subdirectory(api_test) +if(CMARK_TESTS) + add_subdirectory(api_test) +endif() add_subdirectory(man) -enable_testing() -add_subdirectory(test testdir) +if(CMARK_TESTS) + enable_testing() + add_subdirectory(test testdir) +endif() if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING -- cgit 0.0.5-2-1-g0f52 From aaa223dc825e9fbb2a0910ebd62d558b6ea27b2d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 18 Aug 2015 22:25:51 -0700 Subject: Updated spec.txt. --- test/spec.txt | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 9f7eb61dd0..4a0421a561 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -214,10 +214,12 @@ of [character]s rather than bytes. A conforming parser may be limited to a certain encoding. A [line](@line) is a sequence of zero or more [character]s +other than newline (`U+000A`) or carriage return (`U+000D`), followed by a [line ending] or by the end of file. -A [line ending](@line-ending) is a newline (`U+000A`), carriage return -(`U+000D`), or carriage return + newline. +A [line ending](@line-ending) is a newline (`U+000A`), a carriage return +(`U+000D`) not followed by a newline, or a carriage return and a +following newline. A line containing no characters, or a line containing only spaces (`U+0020`) or tabs (`U+0009`), is called a [blank line](@blank-line). @@ -241,7 +243,7 @@ or more [Unicode whitespace character]s. A [space](@space) is `U+0020`. -A [non-whitespace character](@non-space-character) is any character +A [non-whitespace character](@non-whitespace-character) is any character that is not a [whitespace character]. An [ASCII punctuation character](@ascii-punctuation-character) @@ -304,6 +306,15 @@ by spaces with a tab stop of 4 characters. . +. + foo +→bar +. +
                              foo
                              +bar
                              +
                              +. + ## Insecure characters @@ -566,8 +577,8 @@ If you want a horizontal rule in a list item, use a different bullet: An [ATX header](@atx-header) consists of a string of characters, parsed as inline content, between an opening sequence of 1--6 unescaped `#` characters and an optional -closing sequence of any number of `#` characters. The opening sequence -of `#` characters cannot be followed directly by a +closing sequence of any number of unescaped `#` characters. +The opening sequence of `#` characters cannot be followed directly by a [non-whitespace character]. The optional closing sequence of `#`s must be preceded by a [space] and may be followed by spaces only. The opening `#` character may be indented 0-3 spaces. The raw contents of the @@ -699,8 +710,7 @@ Spaces are allowed after the closing sequence:

                              foo

                              . -A sequence of `#` characters with a -[non-whitespace character] following it +A sequence of `#` characters with anything but [space]s following it is not a closing sequence, but counts as part of the contents of the header: @@ -1650,8 +1660,8 @@ followed by one of the strings (case-insensitive) `address`, `caption`, `center`, `col`, `colgroup`, `dd`, `details`, `dialog`, `dir`, `div`, `dl`, `dt`, `fieldset`, `figcaption`, `figure`, `footer`, `form`, `frame`, `frameset`, `h1`, `head`, `header`, `hr`, -`html`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`, `meta`, -`nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`, `pre`, +`html`, `iframe`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`, +`meta`, `nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`, `section`, `source`, `summary`, `table`, `tbody`, `td`, `tfoot`, `th`, `thead`, `title`, `tr`, `track`, `ul`, followed by [whitespace], the end of the line, the string `>`, or @@ -1659,13 +1669,14 @@ the string `/>`.\ **End condition:** line is followed by a [blank line]. 7. **Start condition:** line begins with a complete [open tag] -or [closing tag] (with any [tag name]) followed only by [whitespace] +or [closing tag] (with any [tag name] other than `script`, +`style`, or `pre`) followed only by [whitespace] or the end of the line.\ **End condition:** line is followed by a [blank line]. All types of [HTML blocks] except type 7 may interrupt a paragraph. Blocks of type 7 may not interrupt a paragraph. -(This restricted is intended to prevent unwanted interpretation +(This restriction is intended to prevent unwanted interpretation of long tags inside a wrapped paragraph as starting HTML blocks.) Some simple examples follow. Here are some basic HTML blocks @@ -4906,8 +4917,8 @@ than HTML need not be HTML-entity aware. HTML renderers may either escape Unicode characters as entities or leave them as they are. (However, `"`, `&`, `<`, and `>` must always be rendered as entities.) -[Named entities](@name-entities) consist of `&` -+ any of the valid HTML5 entity names + `;`. The +[Named entities](@name-entities) consist of `&` + any of the valid +HTML5 entity names + `;`. The [following document](https://html.spec.whatwg.org/multipage/entities.json) is used as an authoritative source of the valid entity names and their corresponding code points. @@ -4935,10 +4946,10 @@ the code point `U+0000` will also be replaced by `U+FFFD`.

                              # Ӓ Ϡ � �

                              . -[Hexadecimal entities](@hexadecimal-entities) -consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits -+ `;`. They will also be parsed and turned into the corresponding -Unicode code points in the AST. +[Hexadecimal entities](@hexadecimal-entities) consist of `&#` + either +`X` or `x` + a string of 1-8 hexadecimal digits + `;`. They will also +be parsed and turned into the corresponding Unicode code points in the +AST. . " ആ ಫ -- cgit 0.0.5-2-1-g0f52 From a8c82417bee61b3d512f92848c342eb3adb4b8b0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 18 Aug 2015 22:26:36 -0700 Subject: Added iframe to list of blocktags, as per spec change. --- src/scanners.c | 8360 ++++++++++++++++++++++++++++--------------------------- src/scanners.re | 2 +- 2 files changed, 4200 insertions(+), 4162 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 6a98928fd1..7868e01e8b 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -17120,11 +17120,11 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yych = *(marker = ++p); switch (yych) { case '!': - goto yy1439; + goto yy1440; case '/': goto yy1424; case '?': - goto yy1440; + goto yy1441; case 'A': case 'a': goto yy1426; @@ -17143,30 +17143,33 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'H': case 'h': goto yy1431; + case 'I': + case 'i': + goto yy1432; case 'L': case 'l': - goto yy1432; + goto yy1433; case 'M': case 'm': - goto yy1433; + goto yy1434; case 'N': case 'n': - goto yy1434; + goto yy1435; case 'O': case 'o': - goto yy1435; + goto yy1436; case 'P': case 'p': goto yy1425; case 'S': case 's': - goto yy1436; + goto yy1437; case 'T': case 't': - goto yy1437; + goto yy1438; case 'U': case 'u': - goto yy1438; + goto yy1439; default: goto yy1413; } @@ -17245,30 +17248,33 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'H': case 'h': goto yy1431; + case 'I': + case 'i': + goto yy1432; case 'L': case 'l': - goto yy1432; + goto yy1433; case 'M': case 'm': - goto yy1433; + goto yy1434; case 'N': case 'n': - goto yy1434; + goto yy1435; case 'O': case 'o': - goto yy1435; + goto yy1436; case 'P': case 'p': - goto yy1620; + goto yy1625; case 'S': case 's': - goto yy1621; + goto yy1626; case 'T': case 't': - goto yy1437; + goto yy1438; case 'U': case 'u': - goto yy1438; + goto yy1439; default: goto yy1417; } @@ -17279,32 +17285,32 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; if (yych <= 0x1F) goto yy1417; - goto yy1456; + goto yy1457; } else { if (yych == '/') - goto yy1458; + goto yy1459; if (yych <= '=') goto yy1417; - goto yy1456; + goto yy1457; } } else { if (yych <= 'R') { if (yych == 'A') - goto yy1617; + goto yy1622; if (yych <= 'Q') goto yy1417; - goto yy1616; + goto yy1621; } else { if (yych <= 'a') { if (yych <= '`') goto yy1417; - goto yy1617; + goto yy1622; } else { if (yych == 'r') - goto yy1616; + goto yy1621; goto yy1417; } } @@ -17315,24 +17321,24 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 'D') { if (yych <= 'C') goto yy1417; - goto yy1605; + goto yy1610; } else { if (yych <= 'Q') goto yy1417; if (yych <= 'R') - goto yy1604; - goto yy1603; + goto yy1609; + goto yy1608; } } else { if (yych <= 'q') { if (yych == 'd') - goto yy1605; + goto yy1610; goto yy1417; } else { if (yych <= 'r') - goto yy1604; + goto yy1609; if (yych <= 's') - goto yy1603; + goto yy1608; goto yy1417; } } @@ -17341,25 +17347,25 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 'O') { if (yych <= 'K') { if (yych == 'A') - goto yy1589; + goto yy1594; goto yy1417; } else { if (yych <= 'L') - goto yy1588; + goto yy1593; if (yych <= 'N') goto yy1417; - goto yy1587; + goto yy1592; } } else { if (yych <= 'k') { if (yych == 'a') - goto yy1589; + goto yy1594; goto yy1417; } else { if (yych <= 'l') - goto yy1588; + goto yy1593; if (yych == 'o') - goto yy1587; + goto yy1592; goto yy1417; } } @@ -17368,25 +17374,25 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 'O') { if (yych <= 'D') { if (yych == 'A') - goto yy1574; + goto yy1579; goto yy1417; } else { if (yych <= 'E') - goto yy1573; + goto yy1578; if (yych <= 'N') goto yy1417; - goto yy1572; + goto yy1577; } } else { if (yych <= 'd') { if (yych == 'a') - goto yy1574; + goto yy1579; goto yy1417; } else { if (yych <= 'e') - goto yy1573; + goto yy1578; if (yych == 'o') - goto yy1572; + goto yy1577; goto yy1417; } } @@ -17399,13 +17405,13 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'd': case 'l': case 't': - goto yy1455; + goto yy1456; case 'E': case 'e': - goto yy1564; + goto yy1569; case 'I': case 'i': - goto yy1563; + goto yy1568; default: goto yy1417; } @@ -17414,25 +17420,25 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 'R') { if (yych <= 'N') { if (yych == 'I') - goto yy1539; + goto yy1544; goto yy1417; } else { if (yych <= 'O') - goto yy1538; + goto yy1543; if (yych <= 'Q') goto yy1417; - goto yy1537; + goto yy1542; } } else { if (yych <= 'n') { if (yych == 'i') - goto yy1539; + goto yy1544; goto yy1417; } else { if (yych <= 'o') - goto yy1538; + goto yy1543; if (yych == 'r') - goto yy1537; + goto yy1542; goto yy1417; } } @@ -17441,126 +17447,133 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 'S') { if (yych <= 'D') { if (yych == '1') - goto yy1455; + goto yy1456; goto yy1417; } else { if (yych <= 'E') - goto yy1532; + goto yy1537; if (yych == 'R') - goto yy1455; + goto yy1456; goto yy1417; } } else { if (yych <= 'q') { if (yych <= 'T') - goto yy1531; + goto yy1536; if (yych == 'e') - goto yy1532; + goto yy1537; goto yy1417; } else { if (yych <= 'r') - goto yy1455; + goto yy1456; if (yych == 't') - goto yy1531; + goto yy1536; goto yy1417; } } yy1432: + yych = *++p; + if (yych == 'F') + goto yy1532; + if (yych == 'f') + goto yy1532; + goto yy1417; + yy1433: yych = *++p; if (yych <= 'I') { if (yych == 'E') - goto yy1526; + goto yy1527; if (yych <= 'H') goto yy1417; - goto yy1525; + goto yy1526; } else { if (yych <= 'e') { if (yych <= 'd') goto yy1417; - goto yy1526; + goto yy1527; } else { if (yych == 'i') - goto yy1525; + goto yy1526; goto yy1417; } } - yy1433: + yy1434: yych = *++p; if (yych <= 'E') { if (yych == 'A') - goto yy1517; + goto yy1518; if (yych <= 'D') goto yy1417; - goto yy1516; + goto yy1517; } else { if (yych <= 'a') { if (yych <= '`') goto yy1417; - goto yy1517; + goto yy1518; } else { if (yych == 'e') - goto yy1516; + goto yy1517; goto yy1417; } } - yy1434: + yy1435: yych = *++p; if (yych <= 'O') { if (yych == 'A') - goto yy1510; + goto yy1511; if (yych <= 'N') goto yy1417; - goto yy1509; + goto yy1510; } else { if (yych <= 'a') { if (yych <= '`') goto yy1417; - goto yy1510; + goto yy1511; } else { if (yych == 'o') - goto yy1509; + goto yy1510; goto yy1417; } } - yy1435: + yy1436: yych = *++p; if (yych <= 'P') { if (yych == 'L') - goto yy1455; + goto yy1456; if (yych <= 'O') goto yy1417; - goto yy1501; + goto yy1502; } else { if (yych <= 'l') { if (yych <= 'k') goto yy1417; - goto yy1455; + goto yy1456; } else { if (yych == 'p') - goto yy1501; + goto yy1502; goto yy1417; } } - yy1436: + yy1437: yych = *++p; if (yych <= 'U') { if (yych <= 'E') { if (yych == 'C') - goto yy1478; + goto yy1479; if (yych <= 'D') goto yy1417; - goto yy1481; + goto yy1482; } else { if (yych <= 'O') { if (yych <= 'N') goto yy1417; - goto yy1480; + goto yy1481; } else { if (yych <= 'S') goto yy1417; if (yych <= 'T') - goto yy1477; - goto yy1479; + goto yy1478; + goto yy1480; } } } else { @@ -17568,435 +17581,435 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { if (yych <= 'c') { if (yych <= 'b') goto yy1417; - goto yy1478; + goto yy1479; } else { if (yych == 'e') - goto yy1481; + goto yy1482; goto yy1417; } } else { if (yych <= 's') { if (yych <= 'o') - goto yy1480; + goto yy1481; goto yy1417; } else { if (yych <= 't') - goto yy1477; + goto yy1478; if (yych <= 'u') - goto yy1479; + goto yy1480; goto yy1417; } } } - yy1437: + yy1438: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy1464; + goto yy1465; case 'B': case 'b': - goto yy1463; + goto yy1464; case 'D': case 'd': - goto yy1455; + goto yy1456; case 'F': case 'f': - goto yy1462; + goto yy1463; case 'H': case 'h': - goto yy1461; + goto yy1462; case 'I': case 'i': - goto yy1460; + goto yy1461; case 'R': case 'r': - goto yy1459; + goto yy1460; default: goto yy1417; } - yy1438: + yy1439: yych = *++p; if (yych == 'L') - goto yy1455; + goto yy1456; if (yych == 'l') - goto yy1455; + goto yy1456; goto yy1417; - yy1439: + yy1440: yych = *++p; if (yych <= '@') { if (yych == '-') - goto yy1442; + goto yy1443; goto yy1417; } else { if (yych <= 'Z') - goto yy1443; + goto yy1444; if (yych <= '[') - goto yy1445; + goto yy1446; goto yy1417; } - yy1440: + yy1441: ++p; { return 3; } - yy1442: + yy1443: yych = *++p; if (yych == '-') - goto yy1453; + goto yy1454; goto yy1417; - yy1443: + yy1444: ++p; { return 4; } - yy1445: + yy1446: yych = *++p; if (yych == 'C') - goto yy1446; + goto yy1447; if (yych != 'c') goto yy1417; - yy1446: + yy1447: yych = *++p; if (yych == 'D') - goto yy1447; + goto yy1448; if (yych != 'd') goto yy1417; - yy1447: + yy1448: yych = *++p; if (yych == 'A') - goto yy1448; + goto yy1449; if (yych != 'a') goto yy1417; - yy1448: + yy1449: yych = *++p; if (yych == 'T') - goto yy1449; + goto yy1450; if (yych != 't') goto yy1417; - yy1449: + yy1450: yych = *++p; if (yych == 'A') - goto yy1450; + goto yy1451; if (yych != 'a') goto yy1417; - yy1450: + yy1451: yych = *++p; if (yych != '[') goto yy1417; ++p; { return 5; } - yy1453: + yy1454: ++p; { return 2; } - yy1455: + yy1456: yych = *++p; if (yych <= ' ') { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; if (yych <= 0x1F) goto yy1417; } else { if (yych <= '/') { if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } else { if (yych != '>') goto yy1417; } } - yy1456: + yy1457: ++p; { return 6; } - yy1458: + yy1459: yych = *++p; if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; - yy1459: + yy1460: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= '@') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'A') - goto yy1475; + goto yy1476; if (yych == 'a') - goto yy1475; + goto yy1476; goto yy1417; } } - yy1460: + yy1461: yych = *++p; if (yych == 'T') - goto yy1473; + goto yy1474; if (yych == 't') - goto yy1473; + goto yy1474; goto yy1417; - yy1461: + yy1462: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'D') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'E') - goto yy1471; + goto yy1472; if (yych == 'e') - goto yy1471; + goto yy1472; goto yy1417; } } - yy1462: + yy1463: yych = *++p; if (yych == 'O') - goto yy1469; + goto yy1470; if (yych == 'o') - goto yy1469; + goto yy1470; goto yy1417; - yy1463: + yy1464: yych = *++p; if (yych == 'O') - goto yy1467; + goto yy1468; if (yych == 'o') - goto yy1467; + goto yy1468; goto yy1417; - yy1464: + yy1465: yych = *++p; if (yych == 'B') - goto yy1465; + goto yy1466; if (yych != 'b') goto yy1417; - yy1465: + yy1466: yych = *++p; if (yych == 'L') - goto yy1466; + goto yy1467; if (yych != 'l') goto yy1417; - yy1466: + yy1467: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1467: + yy1468: yych = *++p; if (yych == 'D') - goto yy1468; + goto yy1469; if (yych != 'd') goto yy1417; - yy1468: + yy1469: yych = *++p; if (yych == 'Y') - goto yy1455; + goto yy1456; if (yych == 'y') - goto yy1455; + goto yy1456; goto yy1417; - yy1469: + yy1470: yych = *++p; if (yych == 'O') - goto yy1470; + goto yy1471; if (yych != 'o') goto yy1417; - yy1470: + yy1471: yych = *++p; if (yych == 'T') - goto yy1455; + goto yy1456; if (yych == 't') - goto yy1455; + goto yy1456; goto yy1417; - yy1471: + yy1472: yych = *++p; if (yych == 'A') - goto yy1472; + goto yy1473; if (yych != 'a') goto yy1417; - yy1472: + yy1473: yych = *++p; if (yych == 'D') - goto yy1455; + goto yy1456; if (yych == 'd') - goto yy1455; + goto yy1456; goto yy1417; - yy1473: + yy1474: yych = *++p; if (yych == 'L') - goto yy1474; + goto yy1475; if (yych != 'l') goto yy1417; - yy1474: + yy1475: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1475: + yy1476: yych = *++p; if (yych == 'C') - goto yy1476; + goto yy1477; if (yych != 'c') goto yy1417; - yy1476: + yy1477: yych = *++p; if (yych == 'K') - goto yy1455; + goto yy1456; if (yych == 'k') - goto yy1455; + goto yy1456; goto yy1417; - yy1477: + yy1478: yych = *++p; if (yych == 'Y') - goto yy1499; + goto yy1500; if (yych == 'y') - goto yy1499; + goto yy1500; goto yy1417; - yy1478: + yy1479: yych = *++p; if (yych == 'R') - goto yy1493; + goto yy1494; if (yych == 'r') - goto yy1493; + goto yy1494; goto yy1417; - yy1479: + yy1480: yych = *++p; if (yych == 'M') - goto yy1489; + goto yy1490; if (yych == 'm') - goto yy1489; + goto yy1490; goto yy1417; - yy1480: + yy1481: yych = *++p; if (yych == 'U') - goto yy1486; + goto yy1487; if (yych == 'u') - goto yy1486; + goto yy1487; goto yy1417; - yy1481: + yy1482: yych = *++p; if (yych == 'C') - goto yy1482; + goto yy1483; if (yych != 'c') goto yy1417; - yy1482: + yy1483: yych = *++p; if (yych == 'T') - goto yy1483; + goto yy1484; if (yych != 't') goto yy1417; - yy1483: + yy1484: yych = *++p; if (yych == 'I') - goto yy1484; + goto yy1485; if (yych != 'i') goto yy1417; - yy1484: + yy1485: yych = *++p; if (yych == 'O') - goto yy1485; + goto yy1486; if (yych != 'o') goto yy1417; - yy1485: + yy1486: yych = *++p; if (yych == 'N') - goto yy1455; + goto yy1456; if (yych == 'n') - goto yy1455; + goto yy1456; goto yy1417; - yy1486: + yy1487: yych = *++p; if (yych == 'R') - goto yy1487; + goto yy1488; if (yych != 'r') goto yy1417; - yy1487: + yy1488: yych = *++p; if (yych == 'C') - goto yy1488; + goto yy1489; if (yych != 'c') goto yy1417; - yy1488: + yy1489: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1489: + yy1490: yych = *++p; if (yych == 'M') - goto yy1490; + goto yy1491; if (yych != 'm') goto yy1417; - yy1490: + yy1491: yych = *++p; if (yych == 'A') - goto yy1491; + goto yy1492; if (yych != 'a') goto yy1417; - yy1491: + yy1492: yych = *++p; if (yych == 'R') - goto yy1492; + goto yy1493; if (yych != 'r') goto yy1417; - yy1492: + yy1493: yych = *++p; if (yych == 'Y') - goto yy1455; + goto yy1456; if (yych == 'y') - goto yy1455; + goto yy1456; goto yy1417; - yy1493: + yy1494: yych = *++p; if (yych == 'I') - goto yy1494; + goto yy1495; if (yych != 'i') goto yy1417; - yy1494: + yy1495: yych = *++p; if (yych == 'P') - goto yy1495; + goto yy1496; if (yych != 'p') goto yy1417; - yy1495: + yy1496: yych = *++p; if (yych == 'T') - goto yy1496; + goto yy1497; if (yych != 't') goto yy1417; - yy1496: + yy1497: yych = *++p; if (yych <= 0x1F) { if (yych <= 0x08) @@ -18005,44 +18018,44 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy1417; } else { if (yych <= ' ') - goto yy1497; + goto yy1498; if (yych != '>') goto yy1417; } - yy1497: + yy1498: ++p; { return 1; } - yy1499: + yy1500: yych = *++p; if (yych == 'L') - goto yy1500; + goto yy1501; if (yych != 'l') goto yy1417; - yy1500: + yy1501: yych = *++p; if (yych == 'E') - goto yy1496; + goto yy1497; if (yych == 'e') - goto yy1496; + goto yy1497; goto yy1417; - yy1501: + yy1502: yych = *++p; if (yych == 'T') - goto yy1502; + goto yy1503; if (yych != 't') goto yy1417; - yy1502: + yy1503: yych = *++p; if (yych <= 'I') { if (yych == 'G') - goto yy1504; + goto yy1505; if (yych <= 'H') goto yy1417; } else { if (yych <= 'g') { if (yych <= 'f') goto yy1417; - goto yy1504; + goto yy1505; } else { if (yych != 'i') goto yy1417; @@ -18050,365 +18063,390 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { } yych = *++p; if (yych == 'O') - goto yy1508; + goto yy1509; if (yych == 'o') - goto yy1508; + goto yy1509; goto yy1417; - yy1504: + yy1505: yych = *++p; if (yych == 'R') - goto yy1505; + goto yy1506; if (yych != 'r') goto yy1417; - yy1505: + yy1506: yych = *++p; if (yych == 'O') - goto yy1506; + goto yy1507; if (yych != 'o') goto yy1417; - yy1506: + yy1507: yych = *++p; if (yych == 'U') - goto yy1507; + goto yy1508; if (yych != 'u') goto yy1417; - yy1507: + yy1508: yych = *++p; if (yych == 'P') - goto yy1455; + goto yy1456; if (yych == 'p') - goto yy1455; + goto yy1456; goto yy1417; - yy1508: + yy1509: yych = *++p; if (yych == 'N') - goto yy1455; + goto yy1456; if (yych == 'n') - goto yy1455; + goto yy1456; goto yy1417; - yy1509: + yy1510: yych = *++p; if (yych == 'F') - goto yy1511; + goto yy1512; if (yych == 'f') - goto yy1511; + goto yy1512; goto yy1417; - yy1510: + yy1511: yych = *++p; if (yych == 'V') - goto yy1455; + goto yy1456; if (yych == 'v') - goto yy1455; + goto yy1456; goto yy1417; - yy1511: + yy1512: yych = *++p; if (yych == 'R') - goto yy1512; + goto yy1513; if (yych != 'r') goto yy1417; - yy1512: + yy1513: yych = *++p; if (yych == 'A') - goto yy1513; + goto yy1514; if (yych != 'a') goto yy1417; - yy1513: + yy1514: yych = *++p; if (yych == 'M') - goto yy1514; + goto yy1515; if (yych != 'm') goto yy1417; - yy1514: + yy1515: yych = *++p; if (yych == 'E') - goto yy1515; + goto yy1516; if (yych != 'e') goto yy1417; - yy1515: + yy1516: yych = *++p; if (yych == 'S') - goto yy1455; + goto yy1456; if (yych == 's') - goto yy1455; + goto yy1456; goto yy1417; - yy1516: + yy1517: yych = *++p; if (yych <= 'T') { if (yych == 'N') - goto yy1519; + goto yy1520; if (yych <= 'S') goto yy1417; - goto yy1520; + goto yy1521; } else { if (yych <= 'n') { if (yych <= 'm') goto yy1417; - goto yy1519; + goto yy1520; } else { if (yych == 't') - goto yy1520; + goto yy1521; goto yy1417; } } - yy1517: + yy1518: yych = *++p; if (yych == 'I') - goto yy1518; + goto yy1519; if (yych != 'i') goto yy1417; - yy1518: + yy1519: yych = *++p; if (yych == 'N') - goto yy1455; + goto yy1456; if (yych == 'n') - goto yy1455; + goto yy1456; goto yy1417; - yy1519: + yy1520: yych = *++p; if (yych == 'U') - goto yy1521; + goto yy1522; if (yych == 'u') - goto yy1521; + goto yy1522; goto yy1417; - yy1520: + yy1521: yych = *++p; if (yych == 'A') - goto yy1455; + goto yy1456; if (yych == 'a') - goto yy1455; + goto yy1456; goto yy1417; - yy1521: + yy1522: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'H') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'I') - goto yy1522; + goto yy1523; if (yych != 'i') goto yy1417; } } - yy1522: + yy1523: yych = *++p; if (yych == 'T') - goto yy1523; + goto yy1524; if (yych != 't') goto yy1417; - yy1523: + yy1524: yych = *++p; if (yych == 'E') - goto yy1524; + goto yy1525; if (yych != 'e') goto yy1417; - yy1524: + yy1525: yych = *++p; if (yych == 'M') - goto yy1455; + goto yy1456; if (yych == 'm') - goto yy1455; + goto yy1456; goto yy1417; - yy1525: + yy1526: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'M') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'N') - goto yy1530; + goto yy1531; if (yych == 'n') - goto yy1530; + goto yy1531; goto yy1417; } } - yy1526: + yy1527: yych = *++p; if (yych == 'G') - goto yy1527; + goto yy1528; if (yych != 'g') goto yy1417; - yy1527: + yy1528: yych = *++p; if (yych == 'E') - goto yy1528; + goto yy1529; if (yych != 'e') goto yy1417; - yy1528: + yy1529: yych = *++p; if (yych == 'N') - goto yy1529; + goto yy1530; if (yych != 'n') goto yy1417; - yy1529: + yy1530: yych = *++p; if (yych == 'D') - goto yy1455; + goto yy1456; if (yych == 'd') - goto yy1455; + goto yy1456; goto yy1417; - yy1530: + yy1531: yych = *++p; if (yych == 'K') - goto yy1455; + goto yy1456; if (yych == 'k') - goto yy1455; + goto yy1456; goto yy1417; - yy1531: + yy1532: + yych = *++p; + if (yych == 'R') + goto yy1533; + if (yych != 'r') + goto yy1417; + yy1533: + yych = *++p; + if (yych == 'A') + goto yy1534; + if (yych != 'a') + goto yy1417; + yy1534: + yych = *++p; + if (yych == 'M') + goto yy1535; + if (yych != 'm') + goto yy1417; + yy1535: + yych = *++p; + if (yych == 'E') + goto yy1456; + if (yych == 'e') + goto yy1456; + goto yy1417; + yy1536: yych = *++p; if (yych == 'M') - goto yy1536; + goto yy1541; if (yych == 'm') - goto yy1536; + goto yy1541; goto yy1417; - yy1532: + yy1537: yych = *++p; if (yych == 'A') - goto yy1533; + goto yy1538; if (yych != 'a') goto yy1417; - yy1533: + yy1538: yych = *++p; if (yych == 'D') - goto yy1534; + goto yy1539; if (yych != 'd') goto yy1417; - yy1534: + yy1539: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'D') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'E') - goto yy1535; + goto yy1540; if (yych != 'e') goto yy1417; } } - yy1535: + yy1540: yych = *++p; if (yych == 'R') - goto yy1455; + goto yy1456; if (yych == 'r') - goto yy1455; + goto yy1456; goto yy1417; - yy1536: + yy1541: yych = *++p; if (yych == 'L') - goto yy1455; + goto yy1456; if (yych == 'l') - goto yy1455; + goto yy1456; goto yy1417; - yy1537: + yy1542: yych = *++p; if (yych == 'A') - goto yy1558; + goto yy1563; if (yych == 'a') - goto yy1558; + goto yy1563; goto yy1417; - yy1538: + yy1543: yych = *++p; if (yych <= 'R') { if (yych == 'O') - goto yy1554; + goto yy1559; if (yych <= 'Q') goto yy1417; - goto yy1555; + goto yy1560; } else { if (yych <= 'o') { if (yych <= 'n') goto yy1417; - goto yy1554; + goto yy1559; } else { if (yych == 'r') - goto yy1555; + goto yy1560; goto yy1417; } } - yy1539: + yy1544: yych = *++p; if (yych <= 'G') { if (yych == 'E') - goto yy1540; + goto yy1545; if (yych <= 'F') goto yy1417; - goto yy1541; + goto yy1546; } else { if (yych <= 'e') { if (yych <= 'd') goto yy1417; } else { if (yych == 'g') - goto yy1541; + goto yy1546; goto yy1417; } } - yy1540: + yy1545: yych = *++p; if (yych == 'L') - goto yy1550; + goto yy1555; if (yych == 'l') - goto yy1550; + goto yy1555; goto yy1417; - yy1541: + yy1546: yych = *++p; if (yych <= 'U') { if (yych == 'C') - goto yy1543; + goto yy1548; if (yych <= 'T') goto yy1417; } else { if (yych <= 'c') { if (yych <= 'b') goto yy1417; - goto yy1543; + goto yy1548; } else { if (yych != 'u') goto yy1417; @@ -18416,638 +18454,638 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { } yych = *++p; if (yych == 'R') - goto yy1549; + goto yy1554; if (yych == 'r') - goto yy1549; + goto yy1554; goto yy1417; - yy1543: + yy1548: yych = *++p; if (yych == 'A') - goto yy1544; + goto yy1549; if (yych != 'a') goto yy1417; - yy1544: + yy1549: yych = *++p; if (yych == 'P') - goto yy1545; + goto yy1550; if (yych != 'p') goto yy1417; - yy1545: + yy1550: yych = *++p; if (yych == 'T') - goto yy1546; + goto yy1551; if (yych != 't') goto yy1417; - yy1546: + yy1551: yych = *++p; if (yych == 'I') - goto yy1547; + goto yy1552; if (yych != 'i') goto yy1417; - yy1547: + yy1552: yych = *++p; if (yych == 'O') - goto yy1548; + goto yy1553; if (yych != 'o') goto yy1417; - yy1548: + yy1553: yych = *++p; if (yych == 'N') - goto yy1455; + goto yy1456; if (yych == 'n') - goto yy1455; + goto yy1456; goto yy1417; - yy1549: + yy1554: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1550: + yy1555: yych = *++p; if (yych == 'D') - goto yy1551; + goto yy1556; if (yych != 'd') goto yy1417; - yy1551: + yy1556: yych = *++p; if (yych == 'S') - goto yy1552; + goto yy1557; if (yych != 's') goto yy1417; - yy1552: + yy1557: yych = *++p; if (yych == 'E') - goto yy1553; + goto yy1558; if (yych != 'e') goto yy1417; - yy1553: + yy1558: yych = *++p; if (yych == 'T') - goto yy1455; + goto yy1456; if (yych == 't') - goto yy1455; + goto yy1456; goto yy1417; - yy1554: + yy1559: yych = *++p; if (yych == 'T') - goto yy1556; + goto yy1561; if (yych == 't') - goto yy1556; + goto yy1561; goto yy1417; - yy1555: + yy1560: yych = *++p; if (yych == 'M') - goto yy1455; + goto yy1456; if (yych == 'm') - goto yy1455; + goto yy1456; goto yy1417; - yy1556: + yy1561: yych = *++p; if (yych == 'E') - goto yy1557; + goto yy1562; if (yych != 'e') goto yy1417; - yy1557: + yy1562: yych = *++p; if (yych == 'R') - goto yy1455; + goto yy1456; if (yych == 'r') - goto yy1455; + goto yy1456; goto yy1417; - yy1558: + yy1563: yych = *++p; if (yych == 'M') - goto yy1559; + goto yy1564; if (yych != 'm') goto yy1417; - yy1559: + yy1564: yych = *++p; if (yych == 'E') - goto yy1560; + goto yy1565; if (yych != 'e') goto yy1417; - yy1560: + yy1565: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'R') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'S') - goto yy1561; + goto yy1566; if (yych != 's') goto yy1417; } } - yy1561: + yy1566: yych = *++p; if (yych == 'E') - goto yy1562; + goto yy1567; if (yych != 'e') goto yy1417; - yy1562: + yy1567: yych = *++p; if (yych == 'T') - goto yy1455; + goto yy1456; if (yych == 't') - goto yy1455; + goto yy1456; goto yy1417; - yy1563: + yy1568: yych = *++p; if (yych <= 'V') { if (yych <= 'Q') { if (yych == 'A') - goto yy1569; + goto yy1574; goto yy1417; } else { if (yych <= 'R') - goto yy1455; + goto yy1456; if (yych <= 'U') goto yy1417; - goto yy1455; + goto yy1456; } } else { if (yych <= 'q') { if (yych == 'a') - goto yy1569; + goto yy1574; goto yy1417; } else { if (yych <= 'r') - goto yy1455; + goto yy1456; if (yych == 'v') - goto yy1455; + goto yy1456; goto yy1417; } } - yy1564: + yy1569: yych = *++p; if (yych == 'T') - goto yy1565; + goto yy1570; if (yych != 't') goto yy1417; - yy1565: + yy1570: yych = *++p; if (yych == 'A') - goto yy1566; + goto yy1571; if (yych != 'a') goto yy1417; - yy1566: + yy1571: yych = *++p; if (yych == 'I') - goto yy1567; + goto yy1572; if (yych != 'i') goto yy1417; - yy1567: + yy1572: yych = *++p; if (yych == 'L') - goto yy1568; + goto yy1573; if (yych != 'l') goto yy1417; - yy1568: + yy1573: yych = *++p; if (yych == 'S') - goto yy1455; + goto yy1456; if (yych == 's') - goto yy1455; + goto yy1456; goto yy1417; - yy1569: + yy1574: yych = *++p; if (yych == 'L') - goto yy1570; + goto yy1575; if (yych != 'l') goto yy1417; - yy1570: + yy1575: yych = *++p; if (yych == 'O') - goto yy1571; + goto yy1576; if (yych != 'o') goto yy1417; - yy1571: + yy1576: yych = *++p; if (yych == 'G') - goto yy1455; + goto yy1456; if (yych == 'g') - goto yy1455; + goto yy1456; goto yy1417; - yy1572: + yy1577: yych = *++p; if (yych == 'L') - goto yy1582; + goto yy1587; if (yych == 'l') - goto yy1582; + goto yy1587; goto yy1417; - yy1573: + yy1578: yych = *++p; if (yych == 'N') - goto yy1579; + goto yy1584; if (yych == 'n') - goto yy1579; + goto yy1584; goto yy1417; - yy1574: + yy1579: yych = *++p; if (yych == 'P') - goto yy1575; + goto yy1580; if (yych != 'p') goto yy1417; - yy1575: + yy1580: yych = *++p; if (yych == 'T') - goto yy1576; + goto yy1581; if (yych != 't') goto yy1417; - yy1576: + yy1581: yych = *++p; if (yych == 'I') - goto yy1577; + goto yy1582; if (yych != 'i') goto yy1417; - yy1577: + yy1582: yych = *++p; if (yych == 'O') - goto yy1578; + goto yy1583; if (yych != 'o') goto yy1417; - yy1578: + yy1583: yych = *++p; if (yych == 'N') - goto yy1455; + goto yy1456; if (yych == 'n') - goto yy1455; + goto yy1456; goto yy1417; - yy1579: + yy1584: yych = *++p; if (yych == 'T') - goto yy1580; + goto yy1585; if (yych != 't') goto yy1417; - yy1580: + yy1585: yych = *++p; if (yych == 'E') - goto yy1581; + goto yy1586; if (yych != 'e') goto yy1417; - yy1581: + yy1586: yych = *++p; if (yych == 'R') - goto yy1455; + goto yy1456; if (yych == 'r') - goto yy1455; + goto yy1456; goto yy1417; - yy1582: + yy1587: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'F') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'G') - goto yy1583; + goto yy1588; if (yych != 'g') goto yy1417; } } - yy1583: + yy1588: yych = *++p; if (yych == 'R') - goto yy1584; + goto yy1589; if (yych != 'r') goto yy1417; - yy1584: + yy1589: yych = *++p; if (yych == 'O') - goto yy1585; + goto yy1590; if (yych != 'o') goto yy1417; - yy1585: + yy1590: yych = *++p; if (yych == 'U') - goto yy1586; + goto yy1591; if (yych != 'u') goto yy1417; - yy1586: + yy1591: yych = *++p; if (yych == 'P') - goto yy1455; + goto yy1456; if (yych == 'p') - goto yy1455; + goto yy1456; goto yy1417; - yy1587: + yy1592: yych = *++p; if (yych == 'D') - goto yy1602; + goto yy1607; if (yych == 'd') - goto yy1602; + goto yy1607; goto yy1417; - yy1588: + yy1593: yych = *++p; if (yych == 'O') - goto yy1595; + goto yy1600; if (yych == 'o') - goto yy1595; + goto yy1600; goto yy1417; - yy1589: + yy1594: yych = *++p; if (yych == 'S') - goto yy1590; + goto yy1595; if (yych != 's') goto yy1417; - yy1590: + yy1595: yych = *++p; if (yych == 'E') - goto yy1591; + goto yy1596; if (yych != 'e') goto yy1417; - yy1591: + yy1596: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= 'E') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'F') - goto yy1592; + goto yy1597; if (yych != 'f') goto yy1417; } } - yy1592: + yy1597: yych = *++p; if (yych == 'O') - goto yy1593; + goto yy1598; if (yych != 'o') goto yy1417; - yy1593: + yy1598: yych = *++p; if (yych == 'N') - goto yy1594; + goto yy1599; if (yych != 'n') goto yy1417; - yy1594: + yy1599: yych = *++p; if (yych == 'T') - goto yy1455; + goto yy1456; if (yych == 't') - goto yy1455; + goto yy1456; goto yy1417; - yy1595: + yy1600: yych = *++p; if (yych == 'C') - goto yy1596; + goto yy1601; if (yych != 'c') goto yy1417; - yy1596: + yy1601: yych = *++p; if (yych == 'K') - goto yy1597; + goto yy1602; if (yych != 'k') goto yy1417; - yy1597: + yy1602: yych = *++p; if (yych == 'Q') - goto yy1598; + goto yy1603; if (yych != 'q') goto yy1417; - yy1598: + yy1603: yych = *++p; if (yych == 'U') - goto yy1599; + goto yy1604; if (yych != 'u') goto yy1417; - yy1599: + yy1604: yych = *++p; if (yych == 'O') - goto yy1600; + goto yy1605; if (yych != 'o') goto yy1417; - yy1600: + yy1605: yych = *++p; if (yych == 'T') - goto yy1601; + goto yy1606; if (yych != 't') goto yy1417; - yy1601: + yy1606: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1602: + yy1607: yych = *++p; if (yych == 'Y') - goto yy1455; + goto yy1456; if (yych == 'y') - goto yy1455; + goto yy1456; goto yy1417; - yy1603: + yy1608: yych = *++p; if (yych == 'I') - goto yy1614; + goto yy1619; if (yych == 'i') - goto yy1614; + goto yy1619; goto yy1417; - yy1604: + yy1609: yych = *++p; if (yych == 'T') - goto yy1610; + goto yy1615; if (yych == 't') - goto yy1610; + goto yy1615; goto yy1417; - yy1605: + yy1610: yych = *++p; if (yych == 'D') - goto yy1606; + goto yy1611; if (yych != 'd') goto yy1417; - yy1606: + yy1611: yych = *++p; if (yych == 'R') - goto yy1607; + goto yy1612; if (yych != 'r') goto yy1417; - yy1607: + yy1612: yych = *++p; if (yych == 'E') - goto yy1608; + goto yy1613; if (yych != 'e') goto yy1417; - yy1608: + yy1613: yych = *++p; if (yych == 'S') - goto yy1609; + goto yy1614; if (yych != 's') goto yy1417; - yy1609: + yy1614: yych = *++p; if (yych == 'S') - goto yy1455; + goto yy1456; if (yych == 's') - goto yy1455; + goto yy1456; goto yy1417; - yy1610: + yy1615: yych = *++p; if (yych == 'I') - goto yy1611; + goto yy1616; if (yych != 'i') goto yy1417; - yy1611: + yy1616: yych = *++p; if (yych == 'C') - goto yy1612; + goto yy1617; if (yych != 'c') goto yy1417; - yy1612: + yy1617: yych = *++p; if (yych == 'L') - goto yy1613; + goto yy1618; if (yych != 'l') goto yy1417; - yy1613: + yy1618: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1614: + yy1619: yych = *++p; if (yych == 'D') - goto yy1615; + goto yy1620; if (yych != 'd') goto yy1417; - yy1615: + yy1620: yych = *++p; if (yych == 'E') - goto yy1455; + goto yy1456; if (yych == 'e') - goto yy1455; + goto yy1456; goto yy1417; - yy1616: + yy1621: yych = *++p; if (yych == 'E') - goto yy1496; + goto yy1497; if (yych == 'e') - goto yy1496; + goto yy1497; goto yy1417; - yy1617: + yy1622: yych = *++p; if (yych == 'R') - goto yy1618; + goto yy1623; if (yych != 'r') goto yy1417; - yy1618: + yy1623: yych = *++p; if (yych == 'A') - goto yy1619; + goto yy1624; if (yych != 'a') goto yy1417; - yy1619: + yy1624: yych = *++p; if (yych == 'M') - goto yy1455; + goto yy1456; if (yych == 'm') - goto yy1455; + goto yy1456; goto yy1417; - yy1620: + yy1625: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) goto yy1417; if (yych <= '\r') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= ' ') - goto yy1456; + goto yy1457; if (yych <= '.') goto yy1417; - goto yy1458; + goto yy1459; } } else { if (yych <= '@') { if (yych == '>') - goto yy1456; + goto yy1457; goto yy1417; } else { if (yych <= 'A') - goto yy1617; + goto yy1622; if (yych == 'a') - goto yy1617; + goto yy1622; goto yy1417; } } - yy1621: + yy1626: ++p; if ((yych = *p) <= 'U') { if (yych <= 'N') { if (yych == 'E') - goto yy1481; + goto yy1482; goto yy1417; } else { if (yych <= 'O') - goto yy1480; + goto yy1481; if (yych <= 'T') goto yy1417; - goto yy1479; + goto yy1480; } } else { if (yych <= 'n') { if (yych == 'e') - goto yy1481; + goto yy1482; goto yy1417; } else { if (yych <= 'o') - goto yy1480; + goto yy1481; if (yych == 'u') - goto yy1479; + goto yy1480; goto yy1417; } } @@ -19087,813 +19125,813 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych != '\n') - goto yy1626; + goto yy1631; } else { if (yych <= '<') - goto yy1625; + goto yy1630; if (yych <= 0x7F) - goto yy1626; + goto yy1631; if (yych >= 0xC2) - goto yy1627; + goto yy1632; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1629; - if (yych == 0xED) goto yy1634; - goto yy1630; + if (yych == 0xED) + goto yy1639; + goto yy1635; } else { if (yych <= 0xF0) - goto yy1631; + goto yy1636; if (yych <= 0xF3) - goto yy1632; + goto yy1637; if (yych <= 0xF4) - goto yy1633; + goto yy1638; } } - yy1624 : { return 0; } - yy1625: + yy1629 : { return 0; } + yy1630: yyaccept = 0; yych = *(marker = ++p); if (yych <= '@') { if (yych == '/') - goto yy1637; - goto yy1624; + goto yy1642; + goto yy1629; } else { if (yych <= 'Z') - goto yy1635; + goto yy1640; if (yych <= '`') - goto yy1624; + goto yy1629; if (yych <= 'z') - goto yy1635; - goto yy1624; + goto yy1640; + goto yy1629; } - yy1626: + yy1631: yych = *++p; - goto yy1624; - yy1627: + goto yy1629; + yy1632: yych = *++p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1626; - yy1628: + goto yy1631; + yy1633: p = marker; if (yyaccept == 0) { - goto yy1624; + goto yy1629; } else { - goto yy1646; + goto yy1651; } - yy1629: + yy1634: yych = *++p; if (yych <= 0x9F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1627; - goto yy1628; - yy1630: + goto yy1632; + goto yy1633; + yy1635: yych = *++p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1627; - goto yy1628; - yy1631: + goto yy1632; + goto yy1633; + yy1636: yych = *++p; if (yych <= 0x8F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1630; - goto yy1628; - yy1632: + goto yy1635; + goto yy1633; + yy1637: yych = *++p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1630; - goto yy1628; - yy1633: + goto yy1635; + goto yy1633; + yy1638: yych = *++p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x8F) - goto yy1630; - goto yy1628; - yy1634: + goto yy1635; + goto yy1633; + yy1639: yych = *++p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x9F) - goto yy1627; - goto yy1628; - yy1635: + goto yy1632; + goto yy1633; + yy1640: ++p; yych = *p; if (yybm[0 + yych] & 1) { - goto yy1635; + goto yy1640; } if (yych <= ' ') { if (yych <= 0x08) - goto yy1628; + goto yy1633; if (yych <= '\r') - goto yy1648; + goto yy1653; if (yych <= 0x1F) - goto yy1628; - goto yy1648; + goto yy1633; + goto yy1653; } else { if (yych <= '/') { if (yych <= '.') - goto yy1628; - goto yy1650; + goto yy1633; + goto yy1655; } else { if (yych == '>') - goto yy1642; - goto yy1628; + goto yy1647; + goto yy1633; } } - yy1637: + yy1642: yych = *++p; if (yych <= '@') - goto yy1628; + goto yy1633; if (yych <= 'Z') - goto yy1638; + goto yy1643; if (yych <= '`') - goto yy1628; + goto yy1633; if (yych >= '{') - goto yy1628; - yy1638: + goto yy1633; + yy1643: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy1640; + goto yy1645; } if (yych <= '=') { if (yych <= '-') { if (yych <= ',') - goto yy1628; - goto yy1638; + goto yy1633; + goto yy1643; } else { if (yych <= '/') - goto yy1628; + goto yy1633; if (yych <= '9') - goto yy1638; - goto yy1628; + goto yy1643; + goto yy1633; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy1642; + goto yy1647; if (yych <= '@') - goto yy1628; - goto yy1638; + goto yy1633; + goto yy1643; } else { if (yych <= '`') - goto yy1628; + goto yy1633; if (yych <= 'z') - goto yy1638; - goto yy1628; + goto yy1643; + goto yy1633; } } - yy1640: + yy1645: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy1640; + goto yy1645; } if (yych != '>') - goto yy1628; - yy1642: + goto yy1633; + yy1647: ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy1642; + goto yy1647; } if (yych <= 0x08) - goto yy1628; + goto yy1633; if (yych <= '\n') - goto yy1644; + goto yy1649; if (yych <= '\v') - goto yy1628; + goto yy1633; if (yych <= '\r') - goto yy1647; - goto yy1628; - yy1644: + goto yy1652; + goto yy1633; + yy1649: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy1642; + goto yy1647; } if (yych <= 0x08) - goto yy1646; + goto yy1651; if (yych <= '\n') - goto yy1644; + goto yy1649; if (yych <= '\v') - goto yy1646; + goto yy1651; if (yych <= '\r') - goto yy1647; - yy1646 : { return 7; } - yy1647: + goto yy1652; + yy1651 : { return 7; } + yy1652: yych = *++p; - goto yy1646; - yy1648: + goto yy1651; + yy1653: ++p; yych = *p; if (yych <= ':') { if (yych <= ' ') { if (yych <= 0x08) - goto yy1628; + goto yy1633; if (yych <= '\r') - goto yy1648; + goto yy1653; if (yych <= 0x1F) - goto yy1628; - goto yy1648; + goto yy1633; + goto yy1653; } else { if (yych == '/') - goto yy1650; + goto yy1655; if (yych <= '9') - goto yy1628; - goto yy1651; + goto yy1633; + goto yy1656; } } else { if (yych <= 'Z') { if (yych == '>') - goto yy1642; + goto yy1647; if (yych <= '@') - goto yy1628; - goto yy1651; + goto yy1633; + goto yy1656; } else { if (yych <= '_') { if (yych <= '^') - goto yy1628; - goto yy1651; + goto yy1633; + goto yy1656; } else { if (yych <= '`') - goto yy1628; + goto yy1633; if (yych <= 'z') - goto yy1651; - goto yy1628; + goto yy1656; + goto yy1633; } } } - yy1650: + yy1655: yych = *++p; if (yych == '>') - goto yy1642; - goto yy1628; - yy1651: + goto yy1647; + goto yy1633; + yy1656: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1651; + goto yy1656; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy1628; + goto yy1633; } else { if (yych != ' ') - goto yy1628; + goto yy1633; } } else { if (yych <= '<') { if (yych <= '/') - goto yy1650; - goto yy1628; + goto yy1655; + goto yy1633; } else { if (yych <= '=') - goto yy1655; + goto yy1660; if (yych <= '>') - goto yy1642; - goto yy1628; + goto yy1647; + goto yy1633; } } - yy1653: + yy1658: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy1628; + goto yy1633; if (yych <= '\r') - goto yy1653; + goto yy1658; if (yych <= 0x1F) - goto yy1628; - goto yy1653; + goto yy1633; + goto yy1658; } else { if (yych <= '/') { if (yych <= '.') - goto yy1628; - goto yy1650; + goto yy1633; + goto yy1655; } else { if (yych == ':') - goto yy1651; - goto yy1628; + goto yy1656; + goto yy1633; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy1655; + goto yy1660; if (yych <= '>') - goto yy1642; + goto yy1647; if (yych <= '@') - goto yy1628; - goto yy1651; + goto yy1633; + goto yy1656; } else { if (yych <= '_') { if (yych <= '^') - goto yy1628; - goto yy1651; + goto yy1633; + goto yy1656; } else { if (yych <= '`') - goto yy1628; + goto yy1633; if (yych <= 'z') - goto yy1651; - goto yy1628; + goto yy1656; + goto yy1633; } } } - yy1655: + yy1660: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1657; + goto yy1662; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych >= '!') - goto yy1668; + goto yy1673; } else { if (yych <= '\'') - goto yy1666; + goto yy1671; if (yych <= 0xC1) - goto yy1628; + goto yy1633; if (yych <= 0xDF) - goto yy1659; - goto yy1660; + goto yy1664; + goto yy1665; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1665; - goto yy1661; + goto yy1670; + goto yy1666; } else { if (yych <= 0xF0) - goto yy1662; + goto yy1667; if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1657; + goto yy1662; } if (yych <= 0xDF) { if (yych <= '\'') { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= ' ') - goto yy1691; + goto yy1696; if (yych <= '"') - goto yy1668; - goto yy1666; + goto yy1673; + goto yy1671; } else { if (yych == '>') - goto yy1642; + goto yy1647; if (yych <= 0xC1) - goto yy1628; - goto yy1659; + goto yy1633; + goto yy1664; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1660; - if (yych == 0xED) goto yy1665; - goto yy1661; + if (yych == 0xED) + goto yy1670; + goto yy1666; } else { if (yych <= 0xF0) - goto yy1662; + goto yy1667; if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } - yy1657: + yy1662: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1657; + goto yy1662; } if (yych <= 0xE0) { if (yych <= '=') { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= ' ') - goto yy1685; - goto yy1628; + goto yy1690; + goto yy1633; } else { if (yych <= '>') - goto yy1642; + goto yy1647; if (yych <= 0xC1) - goto yy1628; + goto yy1633; if (yych >= 0xE0) - goto yy1660; + goto yy1665; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1665; - goto yy1661; + goto yy1670; + goto yy1666; } else { if (yych <= 0xF0) - goto yy1662; + goto yy1667; if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } - yy1659: + yy1664: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1657; - goto yy1628; - yy1660: + goto yy1662; + goto yy1633; + yy1665: ++p; yych = *p; if (yych <= 0x9F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1659; - goto yy1628; - yy1661: + goto yy1664; + goto yy1633; + yy1666: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1659; - goto yy1628; - yy1662: + goto yy1664; + goto yy1633; + yy1667: ++p; yych = *p; if (yych <= 0x8F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1661; - goto yy1628; - yy1663: + goto yy1666; + goto yy1633; + yy1668: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1661; - goto yy1628; - yy1664: + goto yy1666; + goto yy1633; + yy1669: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x8F) - goto yy1661; - goto yy1628; - yy1665: + goto yy1666; + goto yy1633; + yy1670: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x9F) - goto yy1659; - goto yy1628; - yy1666: + goto yy1664; + goto yy1633; + yy1671: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1666; + goto yy1671; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= '\'') - goto yy1677; - goto yy1628; + goto yy1682; + goto yy1633; } else { if (yych <= 0xDF) - goto yy1678; + goto yy1683; if (yych <= 0xE0) - goto yy1679; - goto yy1680; + goto yy1684; + goto yy1685; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1684; + goto yy1689; if (yych <= 0xEF) - goto yy1680; - goto yy1681; + goto yy1685; + goto yy1686; } else { if (yych <= 0xF3) - goto yy1682; + goto yy1687; if (yych <= 0xF4) - goto yy1683; - goto yy1628; + goto yy1688; + goto yy1633; } } - yy1668: + yy1673: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1668; + goto yy1673; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= '"') - goto yy1677; - goto yy1628; + goto yy1682; + goto yy1633; } else { if (yych <= 0xDF) - goto yy1670; + goto yy1675; if (yych <= 0xE0) - goto yy1671; - goto yy1672; + goto yy1676; + goto yy1677; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1676; + goto yy1681; if (yych <= 0xEF) - goto yy1672; - goto yy1673; + goto yy1677; + goto yy1678; } else { if (yych <= 0xF3) - goto yy1674; + goto yy1679; if (yych <= 0xF4) - goto yy1675; - goto yy1628; + goto yy1680; + goto yy1633; } } - yy1670: + yy1675: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1668; - goto yy1628; - yy1671: + goto yy1673; + goto yy1633; + yy1676: ++p; yych = *p; if (yych <= 0x9F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1670; - goto yy1628; - yy1672: + goto yy1675; + goto yy1633; + yy1677: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1670; - goto yy1628; - yy1673: + goto yy1675; + goto yy1633; + yy1678: ++p; yych = *p; if (yych <= 0x8F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1672; - goto yy1628; - yy1674: + goto yy1677; + goto yy1633; + yy1679: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1672; - goto yy1628; - yy1675: + goto yy1677; + goto yy1633; + yy1680: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x8F) - goto yy1672; - goto yy1628; - yy1676: + goto yy1677; + goto yy1633; + yy1681: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x9F) - goto yy1670; - goto yy1628; - yy1677: + goto yy1675; + goto yy1633; + yy1682: ++p; yych = *p; if (yych <= ' ') { if (yych <= 0x08) - goto yy1628; + goto yy1633; if (yych <= '\r') - goto yy1648; + goto yy1653; if (yych <= 0x1F) - goto yy1628; - goto yy1648; + goto yy1633; + goto yy1653; } else { if (yych <= '/') { if (yych <= '.') - goto yy1628; - goto yy1650; + goto yy1633; + goto yy1655; } else { if (yych == '>') - goto yy1642; - goto yy1628; + goto yy1647; + goto yy1633; } } - yy1678: + yy1683: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1666; - goto yy1628; - yy1679: + goto yy1671; + goto yy1633; + yy1684: ++p; yych = *p; if (yych <= 0x9F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1678; - goto yy1628; - yy1680: + goto yy1683; + goto yy1633; + yy1685: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1678; - goto yy1628; - yy1681: + goto yy1683; + goto yy1633; + yy1686: ++p; yych = *p; if (yych <= 0x8F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1680; - goto yy1628; - yy1682: + goto yy1685; + goto yy1633; + yy1687: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0xBF) - goto yy1680; - goto yy1628; - yy1683: + goto yy1685; + goto yy1633; + yy1688: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x8F) - goto yy1680; - goto yy1628; - yy1684: + goto yy1685; + goto yy1633; + yy1689: ++p; yych = *p; if (yych <= 0x7F) - goto yy1628; + goto yy1633; if (yych <= 0x9F) - goto yy1678; - goto yy1628; - yy1685: + goto yy1683; + goto yy1633; + yy1690: ++p; yych = *p; if (yych <= '@') { if (yych <= '"') { if (yych <= '\r') { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= 0x08) - goto yy1657; - goto yy1685; + goto yy1662; + goto yy1690; } else { if (yych == ' ') - goto yy1685; + goto yy1690; if (yych <= '!') - goto yy1657; - goto yy1628; + goto yy1662; + goto yy1633; } } else { if (yych <= ':') { if (yych == '\'') - goto yy1628; + goto yy1633; if (yych <= '9') - goto yy1657; + goto yy1662; } else { if (yych <= ';') - goto yy1657; + goto yy1662; if (yych <= '=') - goto yy1628; + goto yy1633; if (yych <= '>') - goto yy1642; - goto yy1657; + goto yy1647; + goto yy1662; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy1687; + goto yy1692; if (yych <= '^') - goto yy1657; + goto yy1662; if (yych >= '`') - goto yy1628; + goto yy1633; } else { if (yych <= 'z') - goto yy1687; + goto yy1692; if (yych <= 0x7F) - goto yy1657; + goto yy1662; if (yych <= 0xC1) - goto yy1628; - goto yy1659; + goto yy1633; + goto yy1664; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1660; - if (yych == 0xED) goto yy1665; - goto yy1661; + if (yych == 0xED) + goto yy1670; + goto yy1666; } else { if (yych <= 0xF0) - goto yy1662; + goto yy1667; if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } } - yy1687: + yy1692: ++p; yych = *p; if (yych <= '>') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= 0x08) - goto yy1657; + goto yy1662; if (yych >= 0x0E) - goto yy1657; + goto yy1662; } else { if (yych <= ' ') - goto yy1689; + goto yy1694; if (yych == '"') - goto yy1628; - goto yy1657; + goto yy1633; + goto yy1662; } } else { if (yych <= '/') { if (yych <= '\'') - goto yy1628; + goto yy1633; if (yych <= ',') - goto yy1657; + goto yy1662; if (yych <= '.') - goto yy1687; - goto yy1657; + goto yy1692; + goto yy1662; } else { if (yych <= ';') { if (yych <= ':') - goto yy1687; - goto yy1657; + goto yy1692; + goto yy1662; } else { if (yych <= '<') - goto yy1628; + goto yy1633; if (yych <= '=') - goto yy1655; - goto yy1642; + goto yy1660; + goto yy1647; } } } @@ -19901,188 +19939,188 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '_') { if (yych <= '@') - goto yy1657; + goto yy1662; if (yych <= 'Z') - goto yy1687; + goto yy1692; if (yych <= '^') - goto yy1657; - goto yy1687; + goto yy1662; + goto yy1692; } else { if (yych <= '`') - goto yy1628; + goto yy1633; if (yych <= 'z') - goto yy1687; + goto yy1692; if (yych <= 0x7F) - goto yy1657; - goto yy1628; + goto yy1662; + goto yy1633; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1659; + goto yy1664; if (yych <= 0xE0) - goto yy1660; + goto yy1665; if (yych <= 0xEC) - goto yy1661; - goto yy1665; + goto yy1666; + goto yy1670; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1661; - goto yy1662; + goto yy1666; + goto yy1667; } else { if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } } } - yy1689: + yy1694: ++p; yych = *p; if (yych <= '@') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= 0x08) - goto yy1657; + goto yy1662; if (yych <= '\r') - goto yy1689; - goto yy1657; + goto yy1694; + goto yy1662; } else { if (yych <= ' ') - goto yy1689; + goto yy1694; if (yych == '"') - goto yy1628; - goto yy1657; + goto yy1633; + goto yy1662; } } else { if (yych <= ';') { if (yych <= '\'') - goto yy1628; + goto yy1633; if (yych == ':') - goto yy1687; - goto yy1657; + goto yy1692; + goto yy1662; } else { if (yych <= '<') - goto yy1628; + goto yy1633; if (yych <= '=') - goto yy1655; + goto yy1660; if (yych <= '>') - goto yy1642; - goto yy1657; + goto yy1647; + goto yy1662; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy1687; + goto yy1692; if (yych <= '^') - goto yy1657; + goto yy1662; if (yych <= '_') - goto yy1687; - goto yy1628; + goto yy1692; + goto yy1633; } else { if (yych <= 'z') - goto yy1687; + goto yy1692; if (yych <= 0x7F) - goto yy1657; + goto yy1662; if (yych <= 0xC1) - goto yy1628; - goto yy1659; + goto yy1633; + goto yy1664; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1660; - if (yych == 0xED) goto yy1665; - goto yy1661; + if (yych == 0xED) + goto yy1670; + goto yy1666; } else { if (yych <= 0xF0) - goto yy1662; + goto yy1667; if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } } - yy1691: + yy1696: ++p; yych = *p; if (yych <= '@') { if (yych <= '"') { if (yych <= '\r') { if (yych <= 0x00) - goto yy1628; + goto yy1633; if (yych <= 0x08) - goto yy1657; - goto yy1691; + goto yy1662; + goto yy1696; } else { if (yych == ' ') - goto yy1691; + goto yy1696; if (yych <= '!') - goto yy1657; - goto yy1668; + goto yy1662; + goto yy1673; } } else { if (yych <= ':') { if (yych == '\'') - goto yy1666; + goto yy1671; if (yych <= '9') - goto yy1657; - goto yy1687; + goto yy1662; + goto yy1692; } else { if (yych <= ';') - goto yy1657; + goto yy1662; if (yych <= '=') - goto yy1628; + goto yy1633; if (yych <= '>') - goto yy1642; - goto yy1657; + goto yy1647; + goto yy1662; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy1687; + goto yy1692; if (yych <= '^') - goto yy1657; + goto yy1662; if (yych <= '_') - goto yy1687; - goto yy1628; + goto yy1692; + goto yy1633; } else { if (yych <= 'z') - goto yy1687; + goto yy1692; if (yych <= 0x7F) - goto yy1657; + goto yy1662; if (yych <= 0xC1) - goto yy1628; - goto yy1659; + goto yy1633; + goto yy1664; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1660; - if (yych == 0xED) goto yy1665; - goto yy1661; + if (yych == 0xED) + goto yy1670; + goto yy1666; } else { if (yych <= 0xF0) - goto yy1662; + goto yy1667; if (yych <= 0xF3) - goto yy1663; + goto yy1668; if (yych <= 0xF4) - goto yy1664; - goto yy1628; + goto yy1669; + goto yy1633; } } } @@ -20122,813 +20160,813 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych != '\n') - goto yy1696; + goto yy1701; } else { if (yych <= '<') - goto yy1697; + goto yy1702; if (yych <= 0x7F) - goto yy1696; + goto yy1701; if (yych >= 0xC2) - goto yy1698; + goto yy1703; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1700; - if (yych == 0xED) goto yy1705; - goto yy1701; + if (yych == 0xED) + goto yy1710; + goto yy1706; } else { if (yych <= 0xF0) - goto yy1702; + goto yy1707; if (yych <= 0xF3) - goto yy1703; + goto yy1708; if (yych <= 0xF4) - goto yy1704; + goto yy1709; } } - yy1695 : { return 0; } - yy1696: + yy1700 : { return 0; } + yy1701: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1695; - goto yy1710; + goto yy1700; + goto yy1715; } else { if (yych <= 0xC1) - goto yy1695; + goto yy1700; if (yych <= 0xF4) - goto yy1710; - goto yy1695; + goto yy1715; + goto yy1700; } - yy1697: + yy1702: yyaccept = 0; yych = *(marker = ++p); if (yych <= '/') { if (yych == '\n') - goto yy1695; + goto yy1700; if (yych <= '.') - goto yy1710; - goto yy1706; + goto yy1715; + goto yy1711; } else { if (yych <= 0x7F) - goto yy1710; + goto yy1715; if (yych <= 0xC1) - goto yy1695; + goto yy1700; if (yych <= 0xF4) - goto yy1710; - goto yy1695; + goto yy1715; + goto yy1700; } - yy1698: + yy1703: yych = *++p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1696; - yy1699: + goto yy1701; + yy1704: p = marker; if (yyaccept == 0) { - goto yy1695; + goto yy1700; } else { - goto yy1727; + goto yy1732; } - yy1700: + yy1705: yych = *++p; if (yych <= 0x9F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1698; - goto yy1699; - yy1701: + goto yy1703; + goto yy1704; + yy1706: yych = *++p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1698; - goto yy1699; - yy1702: + goto yy1703; + goto yy1704; + yy1707: yych = *++p; if (yych <= 0x8F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1701; - goto yy1699; - yy1703: + goto yy1706; + goto yy1704; + yy1708: yych = *++p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1701; - goto yy1699; - yy1704: + goto yy1706; + goto yy1704; + yy1709: yych = *++p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0x8F) - goto yy1701; - goto yy1699; - yy1705: + goto yy1706; + goto yy1704; + yy1710: yych = *++p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0x9F) - goto yy1698; - goto yy1699; - yy1706: + goto yy1703; + goto yy1704; + yy1711: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 's') { if (yych <= 'R') { if (yych <= '\n') { if (yych <= '\t') - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } else { if (yych == 'P') - goto yy1718; - goto yy1709; + goto yy1723; + goto yy1714; } } else { if (yych <= 'o') { if (yych <= 'S') - goto yy1719; - goto yy1709; + goto yy1724; + goto yy1714; } else { if (yych <= 'p') - goto yy1718; + goto yy1723; if (yych <= 'r') - goto yy1709; - goto yy1719; + goto yy1714; + goto yy1724; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } else { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; - goto yy1713; + goto yy1717; + goto yy1718; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1717; + goto yy1722; if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1707: + yy1712: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xDF) { if (yych <= '.') { if (yych == '\n') - goto yy1699; + goto yy1704; } else { if (yych <= '/') - goto yy1706; + goto yy1711; if (yych <= 0x7F) - goto yy1709; + goto yy1714; if (yych <= 0xC1) - goto yy1699; - goto yy1711; + goto yy1704; + goto yy1716; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1712; - if (yych == 0xED) goto yy1717; - goto yy1713; + if (yych == 0xED) + goto yy1722; + goto yy1718; } else { if (yych <= 0xF0) - goto yy1714; + goto yy1719; if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } - yy1709: + yy1714: ++p; yych = *p; - yy1710: + yy1715: if (yybm[0 + yych] & 128) { - goto yy1709; + goto yy1714; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1699; + goto yy1704; if (yych <= '<') - goto yy1707; - goto yy1699; + goto yy1712; + goto yy1704; } else { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; - goto yy1713; + goto yy1717; + goto yy1718; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1717; + goto yy1722; if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } - yy1711: + yy1716: ++p; yych = *p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1709; - goto yy1699; - yy1712: + goto yy1714; + goto yy1704; + yy1717: ++p; yych = *p; if (yych <= 0x9F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1711; - goto yy1699; - yy1713: + goto yy1716; + goto yy1704; + yy1718: ++p; yych = *p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1711; - goto yy1699; - yy1714: + goto yy1716; + goto yy1704; + yy1719: ++p; yych = *p; if (yych <= 0x8F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1713; - goto yy1699; - yy1715: + goto yy1718; + goto yy1704; + yy1720: ++p; yych = *p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0xBF) - goto yy1713; - goto yy1699; - yy1716: + goto yy1718; + goto yy1704; + yy1721: ++p; yych = *p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0x8F) - goto yy1713; - goto yy1699; - yy1717: + goto yy1718; + goto yy1704; + yy1722: ++p; yych = *p; if (yych <= 0x7F) - goto yy1699; + goto yy1704; if (yych <= 0x9F) - goto yy1711; - goto yy1699; - yy1718: + goto yy1716; + goto yy1704; + yy1723: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'Q') - goto yy1709; - goto yy1730; + goto yy1714; + goto yy1735; } else { if (yych == 'r') - goto yy1730; + goto yy1735; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1719: + yy1724: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 't') { if (yych <= 'S') { if (yych <= '\n') { if (yych <= '\t') - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } else { if (yych == 'C') - goto yy1721; - goto yy1709; + goto yy1726; + goto yy1714; } } else { if (yych <= 'b') { if (yych >= 'U') - goto yy1709; + goto yy1714; } else { if (yych <= 'c') - goto yy1721; + goto yy1726; if (yych <= 's') - goto yy1709; + goto yy1714; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } else { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; - goto yy1713; + goto yy1717; + goto yy1718; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1717; + goto yy1722; if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'Y') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'X') - goto yy1709; - goto yy1728; + goto yy1714; + goto yy1733; } else { if (yych == 'y') - goto yy1728; + goto yy1733; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1721: + yy1726: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'Q') - goto yy1709; + goto yy1714; } else { if (yych == 'r') - goto yy1722; + goto yy1727; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1722: + yy1727: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'I') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'H') - goto yy1709; + goto yy1714; } else { if (yych == 'i') - goto yy1723; + goto yy1728; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1723: + yy1728: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'P') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'O') - goto yy1709; + goto yy1714; } else { if (yych == 'p') - goto yy1724; + goto yy1729; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1724: + yy1729: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'T') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'S') - goto yy1709; + goto yy1714; } else { if (yych == 't') - goto yy1725; + goto yy1730; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1725: + yy1730: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1699; - goto yy1709; + goto yy1704; + goto yy1714; } else { if (yych <= '>') - goto yy1726; + goto yy1731; if (yych <= 0x7F) - goto yy1709; + goto yy1714; if (yych <= 0xC1) - goto yy1699; - goto yy1711; + goto yy1704; + goto yy1716; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1712; - if (yych == 0xED) goto yy1717; - goto yy1713; + if (yych == 0xED) + goto yy1722; + goto yy1718; } else { if (yych <= 0xF0) - goto yy1714; + goto yy1719; if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } - yy1726: + yy1731: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1709; + goto yy1714; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1727; + goto yy1732; if (yych <= '<') - goto yy1707; + goto yy1712; } else { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; - goto yy1713; + goto yy1717; + goto yy1718; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1717; + goto yy1722; if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; + goto yy1721; } } - yy1727 : { return (bufsize_t)(p - start); } - yy1728: + yy1732 : { return (bufsize_t)(p - start); } + yy1733: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'L') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'K') - goto yy1709; + goto yy1714; } else { if (yych == 'l') - goto yy1729; + goto yy1734; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1729: + yy1734: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'E') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'D') - goto yy1709; - goto yy1725; + goto yy1714; + goto yy1730; } else { if (yych == 'e') - goto yy1725; + goto yy1730; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } - yy1730: + yy1735: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1707; + goto yy1712; } if (yych <= 0xC1) { if (yych <= 'E') { if (yych == '\n') - goto yy1699; + goto yy1704; if (yych <= 'D') - goto yy1709; - goto yy1725; + goto yy1714; + goto yy1730; } else { if (yych == 'e') - goto yy1725; + goto yy1730; if (yych <= 0x7F) - goto yy1709; - goto yy1699; + goto yy1714; + goto yy1704; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1711; + goto yy1716; if (yych <= 0xE0) - goto yy1712; + goto yy1717; if (yych <= 0xEC) - goto yy1713; - goto yy1717; + goto yy1718; + goto yy1722; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1713; - goto yy1714; + goto yy1718; + goto yy1719; } else { if (yych <= 0xF3) - goto yy1715; + goto yy1720; if (yych <= 0xF4) - goto yy1716; - goto yy1699; + goto yy1721; + goto yy1704; } } } @@ -20968,316 +21006,316 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ',') { if (yych != '\n') - goto yy1734; + goto yy1739; } else { if (yych <= '-') - goto yy1735; + goto yy1740; if (yych <= 0x7F) - goto yy1734; + goto yy1739; if (yych >= 0xC2) - goto yy1736; + goto yy1741; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1738; - if (yych == 0xED) goto yy1743; - goto yy1739; + if (yych == 0xED) + goto yy1748; + goto yy1744; } else { if (yych <= 0xF0) - goto yy1740; + goto yy1745; if (yych <= 0xF3) - goto yy1741; + goto yy1746; if (yych <= 0xF4) - goto yy1742; + goto yy1747; } } - yy1733 : { return 0; } - yy1734: + yy1738 : { return 0; } + yy1739: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1733; - goto yy1747; + goto yy1738; + goto yy1752; } else { if (yych <= 0xC1) - goto yy1733; + goto yy1738; if (yych <= 0xF4) - goto yy1747; - goto yy1733; + goto yy1752; + goto yy1738; } - yy1735: + yy1740: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1744; + goto yy1749; } if (yych <= 0x7F) { if (yych == '\n') - goto yy1733; - goto yy1747; + goto yy1738; + goto yy1752; } else { if (yych <= 0xC1) - goto yy1733; + goto yy1738; if (yych <= 0xF4) - goto yy1747; - goto yy1733; + goto yy1752; + goto yy1738; } - yy1736: + yy1741: yych = *++p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1734; - yy1737: + goto yy1739; + yy1742: p = marker; if (yyaccept == 0) { - goto yy1733; + goto yy1738; } else { - goto yy1757; + goto yy1762; } - yy1738: + yy1743: yych = *++p; if (yych <= 0x9F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1736; - goto yy1737; - yy1739: + goto yy1741; + goto yy1742; + yy1744: yych = *++p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1736; - goto yy1737; - yy1740: + goto yy1741; + goto yy1742; + yy1745: yych = *++p; if (yych <= 0x8F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1739; - goto yy1737; - yy1741: + goto yy1744; + goto yy1742; + yy1746: yych = *++p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1739; - goto yy1737; - yy1742: + goto yy1744; + goto yy1742; + yy1747: yych = *++p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0x8F) - goto yy1739; - goto yy1737; - yy1743: + goto yy1744; + goto yy1742; + yy1748: yych = *++p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0x9F) - goto yy1736; - goto yy1737; - yy1744: + goto yy1741; + goto yy1742; + yy1749: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1744; + goto yy1749; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1737; + goto yy1742; } else { if (yych <= '>') - goto yy1756; + goto yy1761; if (yych <= 0x7F) - goto yy1746; + goto yy1751; if (yych <= 0xC1) - goto yy1737; - goto yy1748; + goto yy1742; + goto yy1753; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1749; - if (yych == 0xED) goto yy1754; - goto yy1750; + if (yych == 0xED) + goto yy1759; + goto yy1755; } else { if (yych <= 0xF0) - goto yy1751; + goto yy1756; if (yych <= 0xF3) - goto yy1752; + goto yy1757; if (yych <= 0xF4) - goto yy1753; - goto yy1737; + goto yy1758; + goto yy1742; } } - yy1746: + yy1751: ++p; yych = *p; - yy1747: + yy1752: if (yybm[0 + yych] & 128) { - goto yy1746; + goto yy1751; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1737; + goto yy1742; if (yych <= '-') - goto yy1755; - goto yy1737; + goto yy1760; + goto yy1742; } else { if (yych <= 0xDF) - goto yy1748; + goto yy1753; if (yych <= 0xE0) - goto yy1749; - goto yy1750; + goto yy1754; + goto yy1755; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1754; + goto yy1759; if (yych <= 0xEF) - goto yy1750; - goto yy1751; + goto yy1755; + goto yy1756; } else { if (yych <= 0xF3) - goto yy1752; + goto yy1757; if (yych <= 0xF4) - goto yy1753; - goto yy1737; + goto yy1758; + goto yy1742; } } - yy1748: + yy1753: ++p; yych = *p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1746; - goto yy1737; - yy1749: + goto yy1751; + goto yy1742; + yy1754: ++p; yych = *p; if (yych <= 0x9F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1748; - goto yy1737; - yy1750: + goto yy1753; + goto yy1742; + yy1755: ++p; yych = *p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1748; - goto yy1737; - yy1751: + goto yy1753; + goto yy1742; + yy1756: ++p; yych = *p; if (yych <= 0x8F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1750; - goto yy1737; - yy1752: + goto yy1755; + goto yy1742; + yy1757: ++p; yych = *p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0xBF) - goto yy1750; - goto yy1737; - yy1753: + goto yy1755; + goto yy1742; + yy1758: ++p; yych = *p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0x8F) - goto yy1750; - goto yy1737; - yy1754: + goto yy1755; + goto yy1742; + yy1759: ++p; yych = *p; if (yych <= 0x7F) - goto yy1737; + goto yy1742; if (yych <= 0x9F) - goto yy1748; - goto yy1737; - yy1755: + goto yy1753; + goto yy1742; + yy1760: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1746; + goto yy1751; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1737; + goto yy1742; if (yych <= '-') - goto yy1744; - goto yy1737; + goto yy1749; + goto yy1742; } else { if (yych <= 0xDF) - goto yy1748; + goto yy1753; if (yych <= 0xE0) - goto yy1749; - goto yy1750; + goto yy1754; + goto yy1755; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1754; + goto yy1759; if (yych <= 0xEF) - goto yy1750; - goto yy1751; + goto yy1755; + goto yy1756; } else { if (yych <= 0xF3) - goto yy1752; + goto yy1757; if (yych <= 0xF4) - goto yy1753; - goto yy1737; + goto yy1758; + goto yy1742; } } - yy1756: + yy1761: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1746; + goto yy1751; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1757; + goto yy1762; if (yych <= '-') - goto yy1755; + goto yy1760; } else { if (yych <= 0xDF) - goto yy1748; + goto yy1753; if (yych <= 0xE0) - goto yy1749; - goto yy1750; + goto yy1754; + goto yy1755; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1754; + goto yy1759; if (yych <= 0xEF) - goto yy1750; - goto yy1751; + goto yy1755; + goto yy1756; } else { if (yych <= 0xF3) - goto yy1752; + goto yy1757; if (yych <= 0xF4) - goto yy1753; + goto yy1758; } } - yy1757 : { return (bufsize_t)(p - start); } + yy1762 : { return (bufsize_t)(p - start); } } } @@ -21314,282 +21352,282 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '>') { if (yych != '\n') - goto yy1761; + goto yy1766; } else { if (yych <= '?') - goto yy1762; + goto yy1767; if (yych <= 0x7F) - goto yy1761; + goto yy1766; if (yych >= 0xC2) - goto yy1763; + goto yy1768; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1765; - if (yych == 0xED) goto yy1770; - goto yy1766; + if (yych == 0xED) + goto yy1775; + goto yy1771; } else { if (yych <= 0xF0) - goto yy1767; + goto yy1772; if (yych <= 0xF3) - goto yy1768; + goto yy1773; if (yych <= 0xF4) - goto yy1769; + goto yy1774; } } - yy1760 : { return 0; } - yy1761: + yy1765 : { return 0; } + yy1766: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1760; - goto yy1776; + goto yy1765; + goto yy1781; } else { if (yych <= 0xC1) - goto yy1760; + goto yy1765; if (yych <= 0xF4) - goto yy1776; - goto yy1760; + goto yy1781; + goto yy1765; } - yy1762: + yy1767: yyaccept = 0; yych = *(marker = ++p); if (yych <= '>') { if (yych == '\n') - goto yy1760; + goto yy1765; if (yych <= '=') - goto yy1776; - goto yy1771; + goto yy1781; + goto yy1776; } else { if (yych <= 0x7F) - goto yy1776; + goto yy1781; if (yych <= 0xC1) - goto yy1760; + goto yy1765; if (yych <= 0xF4) - goto yy1776; - goto yy1760; + goto yy1781; + goto yy1765; } - yy1763: + yy1768: yych = *++p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1761; - yy1764: + goto yy1766; + yy1769: p = marker; if (yyaccept == 0) { - goto yy1760; + goto yy1765; } else { - goto yy1772; + goto yy1777; } - yy1765: + yy1770: yych = *++p; if (yych <= 0x9F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1763; - goto yy1764; - yy1766: + goto yy1768; + goto yy1769; + yy1771: yych = *++p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1763; - goto yy1764; - yy1767: + goto yy1768; + goto yy1769; + yy1772: yych = *++p; if (yych <= 0x8F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1766; - goto yy1764; - yy1768: + goto yy1771; + goto yy1769; + yy1773: yych = *++p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1766; - goto yy1764; - yy1769: + goto yy1771; + goto yy1769; + yy1774: yych = *++p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0x8F) - goto yy1766; - goto yy1764; - yy1770: + goto yy1771; + goto yy1769; + yy1775: yych = *++p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0x9F) - goto yy1763; - goto yy1764; - yy1771: + goto yy1768; + goto yy1769; + yy1776: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1775; + goto yy1780; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1772; + goto yy1777; if (yych <= '?') - goto yy1773; + goto yy1778; } else { if (yych <= 0xDF) - goto yy1777; + goto yy1782; if (yych <= 0xE0) - goto yy1778; - goto yy1779; + goto yy1783; + goto yy1784; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1783; + goto yy1788; if (yych <= 0xEF) - goto yy1779; - goto yy1780; + goto yy1784; + goto yy1785; } else { if (yych <= 0xF3) - goto yy1781; + goto yy1786; if (yych <= 0xF4) - goto yy1782; + goto yy1787; } } - yy1772 : { return (bufsize_t)(p - start); } - yy1773: + yy1777 : { return (bufsize_t)(p - start); } + yy1778: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1773; + goto yy1778; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1764; + goto yy1769; } else { if (yych <= '>') - goto yy1771; + goto yy1776; if (yych <= 0x7F) - goto yy1775; + goto yy1780; if (yych <= 0xC1) - goto yy1764; - goto yy1777; + goto yy1769; + goto yy1782; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1778; - if (yych == 0xED) goto yy1783; - goto yy1779; + if (yych == 0xED) + goto yy1788; + goto yy1784; } else { if (yych <= 0xF0) - goto yy1780; + goto yy1785; if (yych <= 0xF3) - goto yy1781; + goto yy1786; if (yych <= 0xF4) - goto yy1782; - goto yy1764; + goto yy1787; + goto yy1769; } } - yy1775: + yy1780: ++p; yych = *p; - yy1776: + yy1781: if (yybm[0 + yych] & 128) { - goto yy1775; + goto yy1780; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1764; + goto yy1769; if (yych <= '?') - goto yy1773; - goto yy1764; + goto yy1778; + goto yy1769; } else { if (yych <= 0xDF) - goto yy1777; + goto yy1782; if (yych <= 0xE0) - goto yy1778; - goto yy1779; + goto yy1783; + goto yy1784; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1783; + goto yy1788; if (yych <= 0xEF) - goto yy1779; - goto yy1780; + goto yy1784; + goto yy1785; } else { if (yych <= 0xF3) - goto yy1781; + goto yy1786; if (yych <= 0xF4) - goto yy1782; - goto yy1764; + goto yy1787; + goto yy1769; } } - yy1777: + yy1782: ++p; yych = *p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1775; - goto yy1764; - yy1778: + goto yy1780; + goto yy1769; + yy1783: ++p; yych = *p; if (yych <= 0x9F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1777; - goto yy1764; - yy1779: + goto yy1782; + goto yy1769; + yy1784: ++p; yych = *p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1777; - goto yy1764; - yy1780: + goto yy1782; + goto yy1769; + yy1785: ++p; yych = *p; if (yych <= 0x8F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1779; - goto yy1764; - yy1781: + goto yy1784; + goto yy1769; + yy1786: ++p; yych = *p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0xBF) - goto yy1779; - goto yy1764; - yy1782: + goto yy1784; + goto yy1769; + yy1787: ++p; yych = *p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0x8F) - goto yy1779; - goto yy1764; - yy1783: + goto yy1784; + goto yy1769; + yy1788: ++p; yych = *p; if (yych <= 0x7F) - goto yy1764; + goto yy1769; if (yych <= 0x9F) - goto yy1777; - goto yy1764; + goto yy1782; + goto yy1769; } } @@ -21626,242 +21664,242 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '=') { if (yych != '\n') - goto yy1787; + goto yy1792; } else { if (yych <= '>') - goto yy1788; + goto yy1793; if (yych <= 0x7F) - goto yy1787; + goto yy1792; if (yych >= 0xC2) - goto yy1790; + goto yy1795; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1792; - if (yych == 0xED) goto yy1797; - goto yy1793; + if (yych == 0xED) + goto yy1802; + goto yy1798; } else { if (yych <= 0xF0) - goto yy1794; + goto yy1799; if (yych <= 0xF3) - goto yy1795; + goto yy1800; if (yych <= 0xF4) - goto yy1796; + goto yy1801; } } - yy1786 : { return 0; } - yy1787: + yy1791 : { return 0; } + yy1792: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1786; - goto yy1801; + goto yy1791; + goto yy1806; } else { if (yych <= 0xC1) - goto yy1786; + goto yy1791; if (yych <= 0xF4) - goto yy1801; - goto yy1786; + goto yy1806; + goto yy1791; } - yy1788: + yy1793: yyaccept = 1; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy1801; + goto yy1806; } else { if (yych <= 0xC1) - goto yy1789; + goto yy1794; if (yych <= 0xF4) - goto yy1801; + goto yy1806; } - yy1789 : { return (bufsize_t)(p - start); } - yy1790: + yy1794 : { return (bufsize_t)(p - start); } + yy1795: yych = *++p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1787; - yy1791: + goto yy1792; + yy1796: p = marker; if (yyaccept == 0) { - goto yy1786; + goto yy1791; } else { - goto yy1789; + goto yy1794; } - yy1792: + yy1797: yych = *++p; if (yych <= 0x9F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1790; - goto yy1791; - yy1793: + goto yy1795; + goto yy1796; + yy1798: yych = *++p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1790; - goto yy1791; - yy1794: + goto yy1795; + goto yy1796; + yy1799: yych = *++p; if (yych <= 0x8F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1793; - goto yy1791; - yy1795: + goto yy1798; + goto yy1796; + yy1800: yych = *++p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1793; - goto yy1791; - yy1796: + goto yy1798; + goto yy1796; + yy1801: yych = *++p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0x8F) - goto yy1793; - goto yy1791; - yy1797: + goto yy1798; + goto yy1796; + yy1802: yych = *++p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0x9F) - goto yy1790; - goto yy1791; - yy1798: + goto yy1795; + goto yy1796; + yy1803: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1800; + goto yy1805; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1789; + goto yy1794; if (yych <= '>') - goto yy1798; - goto yy1789; + goto yy1803; + goto yy1794; } else { if (yych <= 0xDF) - goto yy1802; + goto yy1807; if (yych <= 0xE0) - goto yy1803; - goto yy1804; + goto yy1808; + goto yy1809; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1808; + goto yy1813; if (yych <= 0xEF) - goto yy1804; - goto yy1805; + goto yy1809; + goto yy1810; } else { if (yych <= 0xF3) - goto yy1806; + goto yy1811; if (yych <= 0xF4) - goto yy1807; - goto yy1789; + goto yy1812; + goto yy1794; } } - yy1800: + yy1805: ++p; yych = *p; - yy1801: + yy1806: if (yybm[0 + yych] & 128) { - goto yy1800; + goto yy1805; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1791; + goto yy1796; if (yych <= '>') - goto yy1798; - goto yy1791; + goto yy1803; + goto yy1796; } else { if (yych <= 0xDF) - goto yy1802; + goto yy1807; if (yych <= 0xE0) - goto yy1803; - goto yy1804; + goto yy1808; + goto yy1809; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1808; + goto yy1813; if (yych <= 0xEF) - goto yy1804; - goto yy1805; + goto yy1809; + goto yy1810; } else { if (yych <= 0xF3) - goto yy1806; + goto yy1811; if (yych <= 0xF4) - goto yy1807; - goto yy1791; + goto yy1812; + goto yy1796; } } - yy1802: + yy1807: ++p; yych = *p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1800; - goto yy1791; - yy1803: + goto yy1805; + goto yy1796; + yy1808: ++p; yych = *p; if (yych <= 0x9F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1802; - goto yy1791; - yy1804: + goto yy1807; + goto yy1796; + yy1809: ++p; yych = *p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1802; - goto yy1791; - yy1805: + goto yy1807; + goto yy1796; + yy1810: ++p; yych = *p; if (yych <= 0x8F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1804; - goto yy1791; - yy1806: + goto yy1809; + goto yy1796; + yy1811: ++p; yych = *p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0xBF) - goto yy1804; - goto yy1791; - yy1807: + goto yy1809; + goto yy1796; + yy1812: ++p; yych = *p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0x8F) - goto yy1804; - goto yy1791; - yy1808: + goto yy1809; + goto yy1796; + yy1813: ++p; yych = *p; if (yych <= 0x7F) - goto yy1791; + goto yy1796; if (yych <= 0x9F) - goto yy1802; - goto yy1791; + goto yy1807; + goto yy1796; } } @@ -21898,316 +21936,316 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '\\') { if (yych != '\n') - goto yy1812; + goto yy1817; } else { if (yych <= ']') - goto yy1813; + goto yy1818; if (yych <= 0x7F) - goto yy1812; + goto yy1817; if (yych >= 0xC2) - goto yy1814; + goto yy1819; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1816; - if (yych == 0xED) goto yy1821; - goto yy1817; + if (yych == 0xED) + goto yy1826; + goto yy1822; } else { if (yych <= 0xF0) - goto yy1818; + goto yy1823; if (yych <= 0xF3) - goto yy1819; + goto yy1824; if (yych <= 0xF4) - goto yy1820; + goto yy1825; } } - yy1811 : { return 0; } - yy1812: + yy1816 : { return 0; } + yy1817: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych == '\n') - goto yy1811; - goto yy1825; + goto yy1816; + goto yy1830; } else { if (yych <= 0xC1) - goto yy1811; + goto yy1816; if (yych <= 0xF4) - goto yy1825; - goto yy1811; + goto yy1830; + goto yy1816; } - yy1813: + yy1818: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1822; + goto yy1827; } if (yych <= 0x7F) { if (yych == '\n') - goto yy1811; - goto yy1825; + goto yy1816; + goto yy1830; } else { if (yych <= 0xC1) - goto yy1811; + goto yy1816; if (yych <= 0xF4) - goto yy1825; - goto yy1811; + goto yy1830; + goto yy1816; } - yy1814: + yy1819: yych = *++p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1812; - yy1815: + goto yy1817; + yy1820: p = marker; if (yyaccept == 0) { - goto yy1811; + goto yy1816; } else { - goto yy1835; + goto yy1840; } - yy1816: + yy1821: yych = *++p; if (yych <= 0x9F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1814; - goto yy1815; - yy1817: + goto yy1819; + goto yy1820; + yy1822: yych = *++p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1814; - goto yy1815; - yy1818: + goto yy1819; + goto yy1820; + yy1823: yych = *++p; if (yych <= 0x8F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1817; - goto yy1815; - yy1819: + goto yy1822; + goto yy1820; + yy1824: yych = *++p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1817; - goto yy1815; - yy1820: + goto yy1822; + goto yy1820; + yy1825: yych = *++p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0x8F) - goto yy1817; - goto yy1815; - yy1821: + goto yy1822; + goto yy1820; + yy1826: yych = *++p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0x9F) - goto yy1814; - goto yy1815; - yy1822: + goto yy1819; + goto yy1820; + yy1827: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1822; + goto yy1827; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy1815; + goto yy1820; } else { if (yych <= '>') - goto yy1834; + goto yy1839; if (yych <= 0x7F) - goto yy1824; + goto yy1829; if (yych <= 0xC1) - goto yy1815; - goto yy1826; + goto yy1820; + goto yy1831; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1827; - if (yych == 0xED) goto yy1832; - goto yy1828; + if (yych == 0xED) + goto yy1837; + goto yy1833; } else { if (yych <= 0xF0) - goto yy1829; + goto yy1834; if (yych <= 0xF3) - goto yy1830; + goto yy1835; if (yych <= 0xF4) - goto yy1831; - goto yy1815; + goto yy1836; + goto yy1820; } } - yy1824: + yy1829: ++p; yych = *p; - yy1825: + yy1830: if (yybm[0 + yych] & 128) { - goto yy1824; + goto yy1829; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1815; + goto yy1820; if (yych <= ']') - goto yy1833; - goto yy1815; + goto yy1838; + goto yy1820; } else { if (yych <= 0xDF) - goto yy1826; + goto yy1831; if (yych <= 0xE0) - goto yy1827; - goto yy1828; + goto yy1832; + goto yy1833; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1832; + goto yy1837; if (yych <= 0xEF) - goto yy1828; - goto yy1829; + goto yy1833; + goto yy1834; } else { if (yych <= 0xF3) - goto yy1830; + goto yy1835; if (yych <= 0xF4) - goto yy1831; - goto yy1815; + goto yy1836; + goto yy1820; } } - yy1826: + yy1831: ++p; yych = *p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1824; - goto yy1815; - yy1827: + goto yy1829; + goto yy1820; + yy1832: ++p; yych = *p; if (yych <= 0x9F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1826; - goto yy1815; - yy1828: + goto yy1831; + goto yy1820; + yy1833: ++p; yych = *p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1826; - goto yy1815; - yy1829: + goto yy1831; + goto yy1820; + yy1834: ++p; yych = *p; if (yych <= 0x8F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1828; - goto yy1815; - yy1830: + goto yy1833; + goto yy1820; + yy1835: ++p; yych = *p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0xBF) - goto yy1828; - goto yy1815; - yy1831: + goto yy1833; + goto yy1820; + yy1836: ++p; yych = *p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0x8F) - goto yy1828; - goto yy1815; - yy1832: + goto yy1833; + goto yy1820; + yy1837: ++p; yych = *p; if (yych <= 0x7F) - goto yy1815; + goto yy1820; if (yych <= 0x9F) - goto yy1826; - goto yy1815; - yy1833: + goto yy1831; + goto yy1820; + yy1838: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1824; + goto yy1829; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1815; + goto yy1820; if (yych <= ']') - goto yy1822; - goto yy1815; + goto yy1827; + goto yy1820; } else { if (yych <= 0xDF) - goto yy1826; + goto yy1831; if (yych <= 0xE0) - goto yy1827; - goto yy1828; + goto yy1832; + goto yy1833; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1832; + goto yy1837; if (yych <= 0xEF) - goto yy1828; - goto yy1829; + goto yy1833; + goto yy1834; } else { if (yych <= 0xF3) - goto yy1830; + goto yy1835; if (yych <= 0xF4) - goto yy1831; - goto yy1815; + goto yy1836; + goto yy1820; } } - yy1834: + yy1839: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1824; + goto yy1829; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy1835; + goto yy1840; if (yych <= ']') - goto yy1833; + goto yy1838; } else { if (yych <= 0xDF) - goto yy1826; + goto yy1831; if (yych <= 0xE0) - goto yy1827; - goto yy1828; + goto yy1832; + goto yy1833; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1832; + goto yy1837; if (yych <= 0xEF) - goto yy1828; - goto yy1829; + goto yy1833; + goto yy1834; } else { if (yych <= 0xF3) - goto yy1830; + goto yy1835; if (yych <= 0xF4) - goto yy1831; + goto yy1836; } } - yy1835 : { return (bufsize_t)(p - start); } + yy1840 : { return (bufsize_t)(p - start); } } } @@ -22248,735 +22286,735 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\f') { if (yych == '\n') - goto yy1839; - goto yy1855; + goto yy1844; + goto yy1860; } else { if (yych <= '\r') - goto yy1841; + goto yy1846; if (yych <= 0x1F) - goto yy1855; - goto yy1841; + goto yy1860; + goto yy1846; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1843; + goto yy1848; if (yych <= '(') - goto yy1854; - goto yy1855; + goto yy1859; + goto yy1860; } else { if (yych == '<') - goto yy1842; - goto yy1843; + goto yy1847; + goto yy1848; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1852; + goto yy1857; if (yych <= 0x7F) - goto yy1843; + goto yy1848; } else { if (yych <= 0xDF) - goto yy1844; + goto yy1849; if (yych <= 0xE0) - goto yy1846; - goto yy1847; + goto yy1851; + goto yy1852; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1851; + goto yy1856; if (yych <= 0xEF) - goto yy1847; - goto yy1848; + goto yy1852; + goto yy1853; } else { if (yych <= 0xF3) - goto yy1849; + goto yy1854; if (yych <= 0xF4) - goto yy1850; + goto yy1855; } } } - yy1838 : { return (bufsize_t)(p - start); } - yy1839: + yy1843 : { return (bufsize_t)(p - start); } + yy1844: yyaccept = 0; marker = ++p; yych = *p; - yy1840: + yy1845: if (yybm[0 + yych] & 8) { - goto yy1839; + goto yy1844; } if (yych <= 0x7F) { if (yych <= ')') { if (yych <= 0x1F) - goto yy1838; + goto yy1843; if (yych <= '\'') - goto yy1867; + goto yy1872; if (yych <= '(') - goto yy1858; - goto yy1838; + goto yy1863; + goto yy1843; } else { if (yych <= '<') { if (yych <= ';') - goto yy1867; - goto yy1902; + goto yy1872; + goto yy1907; } else { if (yych == '\\') - goto yy1876; - goto yy1867; + goto yy1881; + goto yy1872; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych <= 0xC1) - goto yy1838; - goto yy1869; + goto yy1843; + goto yy1874; } else { if (yych <= 0xE0) - goto yy1870; + goto yy1875; if (yych <= 0xEC) - goto yy1871; - goto yy1875; + goto yy1876; + goto yy1880; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1871; - goto yy1872; + goto yy1876; + goto yy1877; } else { if (yych <= 0xF3) - goto yy1873; + goto yy1878; if (yych <= 0xF4) - goto yy1874; - goto yy1838; + goto yy1879; + goto yy1843; } } } - yy1841: + yy1846: yyaccept = 0; yych = *(marker = ++p); - goto yy1840; - yy1842: + goto yy1845; + yy1847: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1902; + goto yy1907; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1838; - goto yy1916; + goto yy1843; + goto yy1921; } else { if (yych <= '\n') - goto yy1838; + goto yy1843; if (yych <= '\f') - goto yy1916; - goto yy1838; + goto yy1921; + goto yy1843; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1916; - goto yy1914; + goto yy1921; + goto yy1919; } else { if (yych <= ')') - goto yy1916; + goto yy1921; if (yych <= '<') - goto yy1867; - goto yy1904; + goto yy1872; + goto yy1909; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1913; - goto yy1838; + goto yy1918; + goto yy1843; } else { if (yych <= 0xDF) - goto yy1906; + goto yy1911; if (yych <= 0xE0) - goto yy1907; - goto yy1908; + goto yy1912; + goto yy1913; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1912; + goto yy1917; if (yych <= 0xEF) - goto yy1908; - goto yy1909; + goto yy1913; + goto yy1914; } else { if (yych <= 0xF3) - goto yy1910; + goto yy1915; if (yych <= 0xF4) - goto yy1911; - goto yy1838; + goto yy1916; + goto yy1843; } } } - yy1843: + yy1848: yyaccept = 0; yych = *(marker = ++p); - goto yy1868; - yy1844: + goto yy1873; + yy1849: yych = *++p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1843; - yy1845: + goto yy1848; + yy1850: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1838; + goto yy1843; } else { - goto yy1853; + goto yy1858; } } else { - goto yy1905; + goto yy1910; } - yy1846: + yy1851: yych = *++p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1844; - goto yy1845; - yy1847: + goto yy1849; + goto yy1850; + yy1852: yych = *++p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1844; - goto yy1845; - yy1848: + goto yy1849; + goto yy1850; + yy1853: yych = *++p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1847; - goto yy1845; - yy1849: + goto yy1852; + goto yy1850; + yy1854: yych = *++p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1847; - goto yy1845; - yy1850: + goto yy1852; + goto yy1850; + yy1855: yych = *++p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1847; - goto yy1845; - yy1851: + goto yy1852; + goto yy1850; + yy1856: yych = *++p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1844; - goto yy1845; - yy1852: + goto yy1849; + goto yy1850; + yy1857: yyaccept = 1; yych = *(marker = ++p); if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1867; + goto yy1872; } else { if (yych <= 0xDF) - goto yy1877; + goto yy1882; if (yych <= 0xE0) - goto yy1878; - goto yy1879; + goto yy1883; + goto yy1884; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1883; + goto yy1888; if (yych <= 0xEF) - goto yy1879; - goto yy1880; + goto yy1884; + goto yy1885; } else { if (yych <= 0xF3) - goto yy1881; + goto yy1886; if (yych <= 0xF4) - goto yy1882; + goto yy1887; } } - yy1853 : { return 0; } - yy1854: + yy1858 : { return 0; } + yy1859: yyaccept = 1; yych = *(marker = ++p); if (yych <= '(') { if (yych <= ' ') - goto yy1853; + goto yy1858; if (yych <= '\'') - goto yy1859; - goto yy1853; + goto yy1864; + goto yy1858; } else { if (yych <= 0x7F) - goto yy1859; + goto yy1864; if (yych <= 0xC1) - goto yy1853; + goto yy1858; if (yych <= 0xF4) - goto yy1859; - goto yy1853; + goto yy1864; + goto yy1858; } - yy1855: + yy1860: yych = *++p; - goto yy1853; - yy1856: + goto yy1858; + yy1861: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1856; + goto yy1861; } if (yych <= 0xE0) { if (yych <= ')') { if (yych <= ' ') - goto yy1845; + goto yy1850; if (yych >= ')') - goto yy1884; + goto yy1889; } else { if (yych <= 0x7F) - goto yy1858; + goto yy1863; if (yych <= 0xC1) - goto yy1845; + goto yy1850; if (yych <= 0xDF) - goto yy1860; - goto yy1861; + goto yy1865; + goto yy1866; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1866; - goto yy1862; + goto yy1871; + goto yy1867; } else { if (yych <= 0xF0) - goto yy1863; + goto yy1868; if (yych <= 0xF3) - goto yy1864; + goto yy1869; if (yych <= 0xF4) - goto yy1865; - goto yy1845; + goto yy1870; + goto yy1850; } } - yy1858: + yy1863: ++p; yych = *p; - yy1859: + yy1864: if (yybm[0 + yych] & 32) { - goto yy1858; + goto yy1863; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '(') - goto yy1845; + goto yy1850; if (yych <= ')') - goto yy1867; - goto yy1856; + goto yy1872; + goto yy1861; } else { if (yych <= 0xC1) - goto yy1845; + goto yy1850; if (yych >= 0xE0) - goto yy1861; + goto yy1866; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1866; - goto yy1862; + goto yy1871; + goto yy1867; } else { if (yych <= 0xF0) - goto yy1863; + goto yy1868; if (yych <= 0xF3) - goto yy1864; + goto yy1869; if (yych <= 0xF4) - goto yy1865; - goto yy1845; + goto yy1870; + goto yy1850; } } - yy1860: + yy1865: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1858; - goto yy1845; - yy1861: + goto yy1863; + goto yy1850; + yy1866: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1860; - goto yy1845; - yy1862: + goto yy1865; + goto yy1850; + yy1867: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1860; - goto yy1845; - yy1863: + goto yy1865; + goto yy1850; + yy1868: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1862; - goto yy1845; - yy1864: + goto yy1867; + goto yy1850; + yy1869: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1862; - goto yy1845; - yy1865: + goto yy1867; + goto yy1850; + yy1870: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1862; - goto yy1845; - yy1866: + goto yy1867; + goto yy1850; + yy1871: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1860; - goto yy1845; - yy1867: + goto yy1865; + goto yy1850; + yy1872: yyaccept = 0; marker = ++p; yych = *p; - yy1868: + yy1873: if (yych <= 0xC1) { if (yych <= ')') { if (yych <= ' ') - goto yy1838; + goto yy1843; if (yych <= '\'') - goto yy1867; + goto yy1872; if (yych <= '(') - goto yy1858; - goto yy1838; + goto yy1863; + goto yy1843; } else { if (yych == '\\') - goto yy1876; + goto yy1881; if (yych <= 0x7F) - goto yy1867; - goto yy1838; + goto yy1872; + goto yy1843; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1869; + goto yy1874; if (yych <= 0xE0) - goto yy1870; + goto yy1875; if (yych <= 0xEC) - goto yy1871; - goto yy1875; + goto yy1876; + goto yy1880; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1871; - goto yy1872; + goto yy1876; + goto yy1877; } else { if (yych <= 0xF3) - goto yy1873; + goto yy1878; if (yych <= 0xF4) - goto yy1874; - goto yy1838; + goto yy1879; + goto yy1843; } } } - yy1869: + yy1874: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1867; - goto yy1845; - yy1870: + goto yy1872; + goto yy1850; + yy1875: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1869; - goto yy1845; - yy1871: + goto yy1874; + goto yy1850; + yy1876: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1869; - goto yy1845; - yy1872: + goto yy1874; + goto yy1850; + yy1877: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1871; - goto yy1845; - yy1873: + goto yy1876; + goto yy1850; + yy1878: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1871; - goto yy1845; - yy1874: + goto yy1876; + goto yy1850; + yy1879: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1871; - goto yy1845; - yy1875: + goto yy1876; + goto yy1850; + yy1880: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1869; - goto yy1845; - yy1876: + goto yy1874; + goto yy1850; + yy1881: ++p; yych = *p; if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1867; - goto yy1845; + goto yy1872; + goto yy1850; } else { if (yych <= 0xDF) - goto yy1877; + goto yy1882; if (yych <= 0xE0) - goto yy1878; - goto yy1879; + goto yy1883; + goto yy1884; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1883; + goto yy1888; if (yych <= 0xEF) - goto yy1879; - goto yy1880; + goto yy1884; + goto yy1885; } else { if (yych <= 0xF3) - goto yy1881; + goto yy1886; if (yych <= 0xF4) - goto yy1882; - goto yy1845; + goto yy1887; + goto yy1850; } } - yy1877: + yy1882: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1867; - goto yy1845; - yy1878: + goto yy1872; + goto yy1850; + yy1883: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1877; - goto yy1845; - yy1879: + goto yy1882; + goto yy1850; + yy1884: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1877; - goto yy1845; - yy1880: + goto yy1882; + goto yy1850; + yy1885: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1879; - goto yy1845; - yy1881: + goto yy1884; + goto yy1850; + yy1886: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1879; - goto yy1845; - yy1882: + goto yy1884; + goto yy1850; + yy1887: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1879; - goto yy1845; - yy1883: + goto yy1884; + goto yy1850; + yy1888: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1877; - goto yy1845; - yy1884: + goto yy1882; + goto yy1850; + yy1889: yyaccept = 0; marker = ++p; yych = *p; - yy1885: + yy1890: if (yych <= 0xC1) { if (yych <= ')') { if (yych <= ' ') - goto yy1838; + goto yy1843; if (yych <= '\'') - goto yy1884; + goto yy1889; if (yych <= '(') - goto yy1858; - goto yy1867; + goto yy1863; + goto yy1872; } else { if (yych == '\\') - goto yy1893; + goto yy1898; if (yych <= 0x7F) - goto yy1884; - goto yy1838; + goto yy1889; + goto yy1843; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1886; + goto yy1891; if (yych <= 0xE0) - goto yy1887; + goto yy1892; if (yych <= 0xEC) - goto yy1888; - goto yy1892; + goto yy1893; + goto yy1897; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1888; - goto yy1889; + goto yy1893; + goto yy1894; } else { if (yych <= 0xF3) - goto yy1890; + goto yy1895; if (yych <= 0xF4) - goto yy1891; - goto yy1838; + goto yy1896; + goto yy1843; } } } - yy1886: + yy1891: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1884; - goto yy1845; - yy1887: + goto yy1889; + goto yy1850; + yy1892: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1886; - goto yy1845; - yy1888: + goto yy1891; + goto yy1850; + yy1893: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1886; - goto yy1845; - yy1889: + goto yy1891; + goto yy1850; + yy1894: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1888; - goto yy1845; - yy1890: + goto yy1893; + goto yy1850; + yy1895: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1888; - goto yy1845; - yy1891: + goto yy1893; + goto yy1850; + yy1896: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1888; - goto yy1845; - yy1892: + goto yy1893; + goto yy1850; + yy1897: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1886; - goto yy1845; - yy1893: + goto yy1891; + goto yy1850; + yy1898: ++p; yych = *p; if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= ' ') - goto yy1867; + goto yy1872; if (yych <= '[') - goto yy1884; + goto yy1889; } else { if (yych <= 0x7F) - goto yy1884; + goto yy1889; if (yych <= 0xC1) - goto yy1845; + goto yy1850; if (yych <= 0xDF) - goto yy1895; - goto yy1896; + goto yy1900; + goto yy1901; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1901; - goto yy1897; + goto yy1906; + goto yy1902; } else { if (yych <= 0xF0) - goto yy1898; + goto yy1903; if (yych <= 0xF3) - goto yy1899; + goto yy1904; if (yych <= 0xF4) - goto yy1900; - goto yy1845; + goto yy1905; + goto yy1850; } } yyaccept = 0; @@ -22985,654 +23023,654 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '[') { if (yych <= ' ') - goto yy1838; + goto yy1843; if (yych == '(') - goto yy1858; - goto yy1884; + goto yy1863; + goto yy1889; } else { if (yych <= '\\') - goto yy1893; + goto yy1898; if (yych <= 0x7F) - goto yy1884; + goto yy1889; if (yych <= 0xC1) - goto yy1838; - goto yy1886; + goto yy1843; + goto yy1891; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1887; - if (yych == 0xED) goto yy1892; - goto yy1888; + if (yych == 0xED) + goto yy1897; + goto yy1893; } else { if (yych <= 0xF0) - goto yy1889; + goto yy1894; if (yych <= 0xF3) - goto yy1890; + goto yy1895; if (yych <= 0xF4) - goto yy1891; - goto yy1838; + goto yy1896; + goto yy1843; } } - yy1895: + yy1900: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1884; - goto yy1845; - yy1896: + goto yy1889; + goto yy1850; + yy1901: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1895; - goto yy1845; - yy1897: + goto yy1900; + goto yy1850; + yy1902: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1895; - goto yy1845; - yy1898: + goto yy1900; + goto yy1850; + yy1903: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1897; - goto yy1845; - yy1899: + goto yy1902; + goto yy1850; + yy1904: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1897; - goto yy1845; - yy1900: + goto yy1902; + goto yy1850; + yy1905: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1897; - goto yy1845; - yy1901: + goto yy1902; + goto yy1850; + yy1906: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1895; - goto yy1845; - yy1902: + goto yy1900; + goto yy1850; + yy1907: yyaccept = 0; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1902; + goto yy1907; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1838; - goto yy1916; + goto yy1843; + goto yy1921; } else { if (yych <= '\n') - goto yy1838; + goto yy1843; if (yych <= '\f') - goto yy1916; - goto yy1838; + goto yy1921; + goto yy1843; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1916; - goto yy1914; + goto yy1921; + goto yy1919; } else { if (yych <= ')') - goto yy1916; + goto yy1921; if (yych <= '<') - goto yy1867; + goto yy1872; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1913; - goto yy1838; + goto yy1918; + goto yy1843; } else { if (yych <= 0xDF) - goto yy1906; + goto yy1911; if (yych <= 0xE0) - goto yy1907; - goto yy1908; + goto yy1912; + goto yy1913; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1912; + goto yy1917; if (yych <= 0xEF) - goto yy1908; - goto yy1909; + goto yy1913; + goto yy1914; } else { if (yych <= 0xF3) - goto yy1910; + goto yy1915; if (yych <= 0xF4) - goto yy1911; - goto yy1838; + goto yy1916; + goto yy1843; } } } - yy1904: + yy1909: yyaccept = 2; yych = *(marker = ++p); if (yych <= ')') { if (yych <= ' ') - goto yy1905; + goto yy1910; if (yych <= '(') - goto yy1868; + goto yy1873; } else { if (yych <= 0x7F) - goto yy1868; + goto yy1873; if (yych <= 0xC1) - goto yy1905; + goto yy1910; if (yych <= 0xF4) - goto yy1868; + goto yy1873; } - yy1905 : { return (bufsize_t)(p - start); } - yy1906: + yy1910 : { return (bufsize_t)(p - start); } + yy1911: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1902; - goto yy1845; - yy1907: + goto yy1907; + goto yy1850; + yy1912: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1906; - goto yy1845; - yy1908: + goto yy1911; + goto yy1850; + yy1913: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1906; - goto yy1845; - yy1909: + goto yy1911; + goto yy1850; + yy1914: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1908; - goto yy1845; - yy1910: + goto yy1913; + goto yy1850; + yy1915: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1908; - goto yy1845; - yy1911: + goto yy1913; + goto yy1850; + yy1916: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1908; - goto yy1845; - yy1912: + goto yy1913; + goto yy1850; + yy1917: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1906; - goto yy1845; - yy1913: + goto yy1911; + goto yy1850; + yy1918: ++p; yych = *p; if (yych <= 0x7F) { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1867; - goto yy1902; + goto yy1872; + goto yy1907; } else { if (yych <= '\n') - goto yy1867; + goto yy1872; if (yych <= '\f') - goto yy1902; - goto yy1867; + goto yy1907; + goto yy1872; } } else { if (yych <= '>') { if (yych <= '=') - goto yy1902; - goto yy1960; + goto yy1907; + goto yy1965; } else { if (yych == '\\') - goto yy1961; - goto yy1902; + goto yy1966; + goto yy1907; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych <= 0xC1) - goto yy1845; - goto yy1962; + goto yy1850; + goto yy1967; } else { if (yych <= 0xE0) - goto yy1963; + goto yy1968; if (yych <= 0xEC) - goto yy1964; - goto yy1968; + goto yy1969; + goto yy1973; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1964; - goto yy1965; + goto yy1969; + goto yy1970; } else { if (yych <= 0xF3) - goto yy1966; + goto yy1971; if (yych <= 0xF4) - goto yy1967; - goto yy1845; + goto yy1972; + goto yy1850; } } } - yy1914: + yy1919: ++p; yych = *p; if (yych <= '>') { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1845; + goto yy1850; if (yych >= '\n') - goto yy1845; + goto yy1850; } else { if (yych == '\r') - goto yy1845; + goto yy1850; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1914; + goto yy1919; if (yych >= ')') - goto yy1902; + goto yy1907; } else { if (yych == '<') - goto yy1858; + goto yy1863; if (yych <= '=') - goto yy1914; - goto yy1929; + goto yy1919; + goto yy1934; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1930; - goto yy1914; + goto yy1935; + goto yy1919; } else { if (yych <= 0xC1) - goto yy1845; + goto yy1850; if (yych <= 0xDF) - goto yy1932; - goto yy1933; + goto yy1937; + goto yy1938; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1938; - goto yy1934; + goto yy1943; + goto yy1939; } else { if (yych <= 0xF0) - goto yy1935; + goto yy1940; if (yych <= 0xF3) - goto yy1936; + goto yy1941; if (yych <= 0xF4) - goto yy1937; - goto yy1845; + goto yy1942; + goto yy1850; } } } - yy1916: + yy1921: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1916; + goto yy1921; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '<') - goto yy1845; + goto yy1850; if (yych >= '?') - goto yy1919; + goto yy1924; } else { if (yych <= 0xC1) - goto yy1845; + goto yy1850; if (yych <= 0xDF) - goto yy1921; - goto yy1922; + goto yy1926; + goto yy1927; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1927; - goto yy1923; + goto yy1932; + goto yy1928; } else { if (yych <= 0xF0) - goto yy1924; + goto yy1929; if (yych <= 0xF3) - goto yy1925; + goto yy1930; if (yych <= 0xF4) - goto yy1926; - goto yy1845; + goto yy1931; + goto yy1850; } } - yy1918: + yy1923: yych = *++p; - goto yy1905; - yy1919: + goto yy1910; + yy1924: ++p; yych = *p; if (yych <= 0x7F) { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1845; - goto yy1916; + goto yy1850; + goto yy1921; } else { if (yych <= '\n') - goto yy1845; + goto yy1850; if (yych <= '\f') - goto yy1916; - goto yy1845; + goto yy1921; + goto yy1850; } } else { if (yych <= '>') { if (yych <= '=') - goto yy1916; - goto yy1928; + goto yy1921; + goto yy1933; } else { if (yych == '\\') - goto yy1919; - goto yy1916; + goto yy1924; + goto yy1921; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych <= 0xC1) - goto yy1845; + goto yy1850; } else { if (yych <= 0xE0) - goto yy1922; + goto yy1927; if (yych <= 0xEC) - goto yy1923; - goto yy1927; + goto yy1928; + goto yy1932; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1923; - goto yy1924; + goto yy1928; + goto yy1929; } else { if (yych <= 0xF3) - goto yy1925; + goto yy1930; if (yych <= 0xF4) - goto yy1926; - goto yy1845; + goto yy1931; + goto yy1850; } } } - yy1921: + yy1926: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1916; - goto yy1845; - yy1922: + goto yy1921; + goto yy1850; + yy1927: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1921; - goto yy1845; - yy1923: + goto yy1926; + goto yy1850; + yy1928: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1921; - goto yy1845; - yy1924: + goto yy1926; + goto yy1850; + yy1929: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1923; - goto yy1845; - yy1925: + goto yy1928; + goto yy1850; + yy1930: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1923; - goto yy1845; - yy1926: + goto yy1928; + goto yy1850; + yy1931: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1923; - goto yy1845; - yy1927: + goto yy1928; + goto yy1850; + yy1932: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1921; - goto yy1845; - yy1928: + goto yy1926; + goto yy1850; + yy1933: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1916; + goto yy1921; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '<') - goto yy1905; + goto yy1910; if (yych <= '>') - goto yy1918; - goto yy1919; + goto yy1923; + goto yy1924; } else { if (yych <= 0xC1) - goto yy1905; + goto yy1910; if (yych <= 0xDF) - goto yy1921; - goto yy1922; + goto yy1926; + goto yy1927; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1927; - goto yy1923; + goto yy1932; + goto yy1928; } else { if (yych <= 0xF0) - goto yy1924; + goto yy1929; if (yych <= 0xF3) - goto yy1925; + goto yy1930; if (yych <= 0xF4) - goto yy1926; - goto yy1905; + goto yy1931; + goto yy1910; } } - yy1929: + yy1934: yyaccept = 2; yych = *(marker = ++p); if (yych <= '(') { if (yych <= ' ') - goto yy1905; + goto yy1910; if (yych <= '\'') - goto yy1859; - goto yy1905; + goto yy1864; + goto yy1910; } else { if (yych <= 0x7F) - goto yy1859; + goto yy1864; if (yych <= 0xC1) - goto yy1905; + goto yy1910; if (yych <= 0xF4) - goto yy1859; - goto yy1905; + goto yy1864; + goto yy1910; } - yy1930: + yy1935: ++p; yych = *p; if (yych <= '[') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1845; - goto yy1916; + goto yy1850; + goto yy1921; } else { if (yych <= '\n') - goto yy1845; + goto yy1850; if (yych <= '\f') - goto yy1916; - goto yy1845; + goto yy1921; + goto yy1850; } } else { if (yych <= ')') { if (yych <= ' ') - goto yy1916; + goto yy1921; if (yych <= '(') - goto yy1914; - goto yy1939; + goto yy1919; + goto yy1944; } else { if (yych == '>') - goto yy1941; - goto yy1914; + goto yy1946; + goto yy1919; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1930; + goto yy1935; if (yych <= 0x7F) - goto yy1914; - goto yy1845; + goto yy1919; + goto yy1850; } else { if (yych <= 0xDF) - goto yy1932; + goto yy1937; if (yych <= 0xE0) - goto yy1933; - goto yy1934; + goto yy1938; + goto yy1939; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1938; + goto yy1943; if (yych <= 0xEF) - goto yy1934; - goto yy1935; + goto yy1939; + goto yy1940; } else { if (yych <= 0xF3) - goto yy1936; + goto yy1941; if (yych <= 0xF4) - goto yy1937; - goto yy1845; + goto yy1942; + goto yy1850; } } } - yy1932: + yy1937: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1914; - goto yy1845; - yy1933: + goto yy1919; + goto yy1850; + yy1938: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1932; - goto yy1845; - yy1934: + goto yy1937; + goto yy1850; + yy1939: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1932; - goto yy1845; - yy1935: + goto yy1937; + goto yy1850; + yy1940: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1934; - goto yy1845; - yy1936: + goto yy1939; + goto yy1850; + yy1941: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1934; - goto yy1845; - yy1937: + goto yy1939; + goto yy1850; + yy1942: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1934; - goto yy1845; - yy1938: + goto yy1939; + goto yy1850; + yy1943: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1932; - goto yy1845; - yy1939: + goto yy1937; + goto yy1850; + yy1944: yyaccept = 0; marker = ++p; yych = *p; @@ -23640,60 +23678,60 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1838; + goto yy1843; if (yych <= '\t') - goto yy1916; - goto yy1838; + goto yy1921; + goto yy1843; } else { if (yych == '\r') - goto yy1838; - goto yy1916; + goto yy1843; + goto yy1921; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1939; + goto yy1944; if (yych <= '(') - goto yy1914; - goto yy1902; + goto yy1919; + goto yy1907; } else { if (yych == '<') - goto yy1884; + goto yy1889; if (yych <= '=') - goto yy1939; - goto yy1942; + goto yy1944; + goto yy1947; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1943; - goto yy1939; + goto yy1948; + goto yy1944; } else { if (yych <= 0xC1) - goto yy1838; + goto yy1843; if (yych <= 0xDF) - goto yy1944; - goto yy1945; + goto yy1949; + goto yy1950; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1950; - goto yy1946; + goto yy1955; + goto yy1951; } else { if (yych <= 0xF0) - goto yy1947; + goto yy1952; if (yych <= 0xF3) - goto yy1948; + goto yy1953; if (yych <= 0xF4) - goto yy1949; - goto yy1838; + goto yy1954; + goto yy1843; } } } - yy1941: + yy1946: yyaccept = 2; marker = ++p; yych = *p; @@ -23701,186 +23739,186 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1905; + goto yy1910; if (yych <= '\t') - goto yy1916; - goto yy1905; + goto yy1921; + goto yy1910; } else { if (yych == '\r') - goto yy1905; - goto yy1916; + goto yy1910; + goto yy1921; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1914; + goto yy1919; if (yych <= '(') - goto yy1916; - goto yy1902; + goto yy1921; + goto yy1907; } else { if (yych == '<') - goto yy1858; + goto yy1863; if (yych <= '=') - goto yy1914; - goto yy1929; + goto yy1919; + goto yy1934; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1930; - goto yy1914; + goto yy1935; + goto yy1919; } else { if (yych <= 0xC1) - goto yy1905; + goto yy1910; if (yych <= 0xDF) - goto yy1932; - goto yy1933; + goto yy1937; + goto yy1938; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1938; - goto yy1934; + goto yy1943; + goto yy1939; } else { if (yych <= 0xF0) - goto yy1935; + goto yy1940; if (yych <= 0xF3) - goto yy1936; + goto yy1941; if (yych <= 0xF4) - goto yy1937; - goto yy1905; + goto yy1942; + goto yy1910; } } } - yy1942: + yy1947: yyaccept = 2; yych = *(marker = ++p); if (yych <= ' ') - goto yy1905; + goto yy1910; if (yych <= 0x7F) - goto yy1885; + goto yy1890; if (yych <= 0xC1) - goto yy1905; + goto yy1910; if (yych <= 0xF4) - goto yy1885; - goto yy1905; - yy1943: + goto yy1890; + goto yy1910; + yy1948: ++p; yych = *p; if (yych <= '\\') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1867; - goto yy1902; + goto yy1872; + goto yy1907; } else { if (yych <= '\n') - goto yy1867; + goto yy1872; if (yych <= '\f') - goto yy1902; - goto yy1867; + goto yy1907; + goto yy1872; } } else { if (yych <= '=') { if (yych <= ' ') - goto yy1902; - goto yy1939; + goto yy1907; + goto yy1944; } else { if (yych <= '>') - goto yy1951; + goto yy1956; if (yych <= '[') - goto yy1939; - goto yy1952; + goto yy1944; + goto yy1957; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1939; - goto yy1845; + goto yy1944; + goto yy1850; } else { if (yych <= 0xDF) - goto yy1953; + goto yy1958; if (yych <= 0xE0) - goto yy1954; - goto yy1955; + goto yy1959; + goto yy1960; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1959; + goto yy1964; if (yych <= 0xEF) - goto yy1955; - goto yy1956; + goto yy1960; + goto yy1961; } else { if (yych <= 0xF3) - goto yy1957; + goto yy1962; if (yych <= 0xF4) - goto yy1958; - goto yy1845; + goto yy1963; + goto yy1850; } } } - yy1944: + yy1949: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1939; - goto yy1845; - yy1945: + goto yy1944; + goto yy1850; + yy1950: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1944; - goto yy1845; - yy1946: + goto yy1949; + goto yy1850; + yy1951: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1944; - goto yy1845; - yy1947: + goto yy1949; + goto yy1850; + yy1952: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1946; - goto yy1845; - yy1948: + goto yy1951; + goto yy1850; + yy1953: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1946; - goto yy1845; - yy1949: + goto yy1951; + goto yy1850; + yy1954: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1946; - goto yy1845; - yy1950: + goto yy1951; + goto yy1850; + yy1955: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1944; - goto yy1845; - yy1951: + goto yy1949; + goto yy1850; + yy1956: yyaccept = 2; marker = ++p; yych = *p; @@ -23888,60 +23926,60 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1905; + goto yy1910; if (yych <= '\t') - goto yy1916; - goto yy1905; + goto yy1921; + goto yy1910; } else { if (yych == '\r') - goto yy1905; - goto yy1916; + goto yy1910; + goto yy1921; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1939; + goto yy1944; if (yych <= '(') - goto yy1914; - goto yy1902; + goto yy1919; + goto yy1907; } else { if (yych == '<') - goto yy1884; + goto yy1889; if (yych <= '=') - goto yy1939; - goto yy1942; + goto yy1944; + goto yy1947; } } } else { if (yych <= 0xE0) { if (yych <= 0x7F) { if (yych == '\\') - goto yy1943; - goto yy1939; + goto yy1948; + goto yy1944; } else { if (yych <= 0xC1) - goto yy1905; + goto yy1910; if (yych <= 0xDF) - goto yy1944; - goto yy1945; + goto yy1949; + goto yy1950; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1950; - goto yy1946; + goto yy1955; + goto yy1951; } else { if (yych <= 0xF0) - goto yy1947; + goto yy1952; if (yych <= 0xF3) - goto yy1948; + goto yy1953; if (yych <= 0xF4) - goto yy1949; - goto yy1905; + goto yy1954; + goto yy1910; } } } - yy1952: + yy1957: yyaccept = 0; marker = ++p; yych = *p; @@ -23949,178 +23987,178 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1838; - goto yy1916; + goto yy1843; + goto yy1921; } else { if (yych <= '\n') - goto yy1838; + goto yy1843; if (yych <= '\f') - goto yy1916; - goto yy1838; + goto yy1921; + goto yy1843; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1916; + goto yy1921; if (yych <= '\'') - goto yy1939; - goto yy1914; + goto yy1944; + goto yy1919; } else { if (yych == '>') - goto yy1951; - goto yy1939; + goto yy1956; + goto yy1944; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1943; + goto yy1948; if (yych <= 0x7F) - goto yy1939; - goto yy1838; + goto yy1944; + goto yy1843; } else { if (yych <= 0xDF) - goto yy1944; + goto yy1949; if (yych <= 0xE0) - goto yy1945; - goto yy1946; + goto yy1950; + goto yy1951; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1950; + goto yy1955; if (yych <= 0xEF) - goto yy1946; - goto yy1947; + goto yy1951; + goto yy1952; } else { if (yych <= 0xF3) - goto yy1948; + goto yy1953; if (yych <= 0xF4) - goto yy1949; - goto yy1838; + goto yy1954; + goto yy1843; } } } - yy1953: + yy1958: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1939; - goto yy1845; - yy1954: + goto yy1944; + goto yy1850; + yy1959: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1953; - goto yy1845; - yy1955: + goto yy1958; + goto yy1850; + yy1960: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1953; - goto yy1845; - yy1956: + goto yy1958; + goto yy1850; + yy1961: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1955; - goto yy1845; - yy1957: + goto yy1960; + goto yy1850; + yy1962: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1955; - goto yy1845; - yy1958: + goto yy1960; + goto yy1850; + yy1963: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1955; - goto yy1845; - yy1959: + goto yy1960; + goto yy1850; + yy1964: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1953; - goto yy1845; - yy1960: + goto yy1958; + goto yy1850; + yy1965: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1902; + goto yy1907; } if (yych <= '>') { if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x00) - goto yy1905; - goto yy1916; + goto yy1910; + goto yy1921; } else { if (yych <= '\n') - goto yy1905; + goto yy1910; if (yych <= '\f') - goto yy1916; - goto yy1905; + goto yy1921; + goto yy1910; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1916; - goto yy1914; + goto yy1921; + goto yy1919; } else { if (yych <= ')') - goto yy1916; + goto yy1921; if (yych <= '<') - goto yy1867; - goto yy1904; + goto yy1872; + goto yy1909; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1913; - goto yy1905; + goto yy1918; + goto yy1910; } else { if (yych <= 0xDF) - goto yy1906; + goto yy1911; if (yych <= 0xE0) - goto yy1907; - goto yy1908; + goto yy1912; + goto yy1913; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1912; + goto yy1917; if (yych <= 0xEF) - goto yy1908; - goto yy1909; + goto yy1913; + goto yy1914; } else { if (yych <= 0xF3) - goto yy1910; + goto yy1915; if (yych <= 0xF4) - goto yy1911; - goto yy1905; + goto yy1916; + goto yy1910; } } } - yy1961: + yy1966: yyaccept = 0; marker = ++p; yych = *p; @@ -24128,115 +24166,115 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= ' ') { if (yych <= '\n') { if (yych <= 0x00) - goto yy1838; + goto yy1843; if (yych <= '\t') - goto yy1916; - goto yy1838; + goto yy1921; + goto yy1843; } else { if (yych == '\r') - goto yy1838; - goto yy1916; + goto yy1843; + goto yy1921; } } else { if (yych <= ')') { if (yych <= '\'') - goto yy1902; + goto yy1907; if (yych <= '(') - goto yy1914; - goto yy1916; + goto yy1919; + goto yy1921; } else { if (yych == '>') - goto yy1960; - goto yy1902; + goto yy1965; + goto yy1907; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1913; + goto yy1918; if (yych <= 0x7F) - goto yy1902; - goto yy1838; + goto yy1907; + goto yy1843; } else { if (yych <= 0xDF) - goto yy1906; + goto yy1911; if (yych <= 0xE0) - goto yy1907; - goto yy1908; + goto yy1912; + goto yy1913; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1912; + goto yy1917; if (yych <= 0xEF) - goto yy1908; - goto yy1909; + goto yy1913; + goto yy1914; } else { if (yych <= 0xF3) - goto yy1910; + goto yy1915; if (yych <= 0xF4) - goto yy1911; - goto yy1838; + goto yy1916; + goto yy1843; } } } - yy1962: + yy1967: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1902; - goto yy1845; - yy1963: + goto yy1907; + goto yy1850; + yy1968: ++p; yych = *p; if (yych <= 0x9F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1962; - goto yy1845; - yy1964: + goto yy1967; + goto yy1850; + yy1969: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1962; - goto yy1845; - yy1965: + goto yy1967; + goto yy1850; + yy1970: ++p; yych = *p; if (yych <= 0x8F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1964; - goto yy1845; - yy1966: + goto yy1969; + goto yy1850; + yy1971: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0xBF) - goto yy1964; - goto yy1845; - yy1967: + goto yy1969; + goto yy1850; + yy1972: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x8F) - goto yy1964; - goto yy1845; - yy1968: + goto yy1969; + goto yy1850; + yy1973: ++p; yych = *p; if (yych <= 0x7F) - goto yy1845; + goto yy1850; if (yych <= 0x9F) - goto yy1962; - goto yy1845; + goto yy1967; + goto yy1850; } } @@ -24275,640 +24313,640 @@ bufsize_t _scan_link_title(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '"') { if (yych == '\n') - goto yy1971; + goto yy1976; if (yych <= '!') - goto yy1975; - goto yy1972; + goto yy1980; + goto yy1977; } else { if (yych <= '\'') { if (yych <= '&') - goto yy1975; - goto yy1973; + goto yy1980; + goto yy1978; } else { if (yych <= '(') - goto yy1974; + goto yy1979; if (yych <= 0x7F) - goto yy1975; + goto yy1980; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1976; + goto yy1981; if (yych <= 0xE0) - goto yy1978; + goto yy1983; if (yych <= 0xEC) - goto yy1979; - goto yy1983; + goto yy1984; + goto yy1988; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1979; - goto yy1980; + goto yy1984; + goto yy1985; } else { if (yych <= 0xF3) - goto yy1981; + goto yy1986; if (yych <= 0xF4) - goto yy1982; + goto yy1987; } } } - yy1971 : { return 0; } - yy1972: + yy1976 : { return 0; } + yy1977: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1971; + goto yy1976; if (yych <= 0x7F) - goto yy2015; + goto yy2020; if (yych <= 0xC1) - goto yy1971; + goto yy1976; if (yych <= 0xF4) - goto yy2015; - goto yy1971; - yy1973: + goto yy2020; + goto yy1976; + yy1978: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1971; + goto yy1976; if (yych <= 0x7F) - goto yy2001; + goto yy2006; if (yych <= 0xC1) - goto yy1971; + goto yy1976; if (yych <= 0xF4) - goto yy2001; - goto yy1971; - yy1974: + goto yy2006; + goto yy1976; + yy1979: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1971; + goto yy1976; if (yych <= 0x7F) - goto yy1987; + goto yy1992; if (yych <= 0xC1) - goto yy1971; + goto yy1976; if (yych <= 0xF4) - goto yy1987; - goto yy1971; - yy1975: + goto yy1992; + goto yy1976; + yy1980: yych = *++p; - goto yy1971; - yy1976: + goto yy1976; + yy1981: yych = *++p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1975; - yy1977: + goto yy1980; + yy1982: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1971; + goto yy1976; } else { - goto yy1996; + goto yy2001; } } else { if (yyaccept == 2) { - goto yy2010; + goto yy2015; } else { - goto yy2024; + goto yy2029; } } - yy1978: + yy1983: yych = *++p; if (yych <= 0x9F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1976; - goto yy1977; - yy1979: + goto yy1981; + goto yy1982; + yy1984: yych = *++p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1976; - goto yy1977; - yy1980: + goto yy1981; + goto yy1982; + yy1985: yych = *++p; if (yych <= 0x8F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1979; - goto yy1977; - yy1981: + goto yy1984; + goto yy1982; + yy1986: yych = *++p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1979; - goto yy1977; - yy1982: + goto yy1984; + goto yy1982; + yy1987: yych = *++p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x8F) - goto yy1979; - goto yy1977; - yy1983: + goto yy1984; + goto yy1982; + yy1988: yych = *++p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x9F) - goto yy1976; - goto yy1977; - yy1984: + goto yy1981; + goto yy1982; + yy1989: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1986; + goto yy1991; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1977; + goto yy1982; if (yych <= ')') - goto yy1997; - goto yy1984; + goto yy2002; + goto yy1989; } else { if (yych <= 0xC1) - goto yy1977; + goto yy1982; if (yych <= 0xDF) - goto yy1988; - goto yy1989; + goto yy1993; + goto yy1994; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1994; - goto yy1990; + goto yy1999; + goto yy1995; } else { if (yych <= 0xF0) - goto yy1991; + goto yy1996; if (yych <= 0xF3) - goto yy1992; + goto yy1997; if (yych <= 0xF4) - goto yy1993; - goto yy1977; + goto yy1998; + goto yy1982; } } - yy1986: + yy1991: ++p; yych = *p; - yy1987: + yy1992: if (yybm[0 + yych] & 32) { - goto yy1986; + goto yy1991; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1977; + goto yy1982; if (yych <= ')') - goto yy1995; - goto yy1984; + goto yy2000; + goto yy1989; } else { if (yych <= 0xC1) - goto yy1977; + goto yy1982; if (yych >= 0xE0) - goto yy1989; + goto yy1994; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1994; - goto yy1990; + goto yy1999; + goto yy1995; } else { if (yych <= 0xF0) - goto yy1991; + goto yy1996; if (yych <= 0xF3) - goto yy1992; + goto yy1997; if (yych <= 0xF4) - goto yy1993; - goto yy1977; + goto yy1998; + goto yy1982; } } - yy1988: + yy1993: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1986; - goto yy1977; - yy1989: + goto yy1991; + goto yy1982; + yy1994: ++p; yych = *p; if (yych <= 0x9F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1988; - goto yy1977; - yy1990: + goto yy1993; + goto yy1982; + yy1995: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1988; - goto yy1977; - yy1991: + goto yy1993; + goto yy1982; + yy1996: ++p; yych = *p; if (yych <= 0x8F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1990; - goto yy1977; - yy1992: + goto yy1995; + goto yy1982; + yy1997: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy1990; - goto yy1977; - yy1993: + goto yy1995; + goto yy1982; + yy1998: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x8F) - goto yy1990; - goto yy1977; - yy1994: + goto yy1995; + goto yy1982; + yy1999: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x9F) - goto yy1988; - goto yy1977; - yy1995: + goto yy1993; + goto yy1982; + yy2000: ++p; - yy1996 : { return (bufsize_t)(p - start); } - yy1997: + yy2001 : { return (bufsize_t)(p - start); } + yy2002: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1986; + goto yy1991; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1996; + goto yy2001; if (yych <= ')') - goto yy1995; - goto yy1984; + goto yy2000; + goto yy1989; } else { if (yych <= 0xC1) - goto yy1996; + goto yy2001; if (yych <= 0xDF) - goto yy1988; - goto yy1989; + goto yy1993; + goto yy1994; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1994; - goto yy1990; + goto yy1999; + goto yy1995; } else { if (yych <= 0xF0) - goto yy1991; + goto yy1996; if (yych <= 0xF3) - goto yy1992; + goto yy1997; if (yych <= 0xF4) - goto yy1993; - goto yy1996; + goto yy1998; + goto yy2001; } } - yy1998: + yy2003: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2000; + goto yy2005; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1977; + goto yy1982; if (yych <= '\'') - goto yy2011; - goto yy1998; + goto yy2016; + goto yy2003; } else { if (yych <= 0xC1) - goto yy1977; + goto yy1982; if (yych <= 0xDF) - goto yy2002; - goto yy2003; + goto yy2007; + goto yy2008; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2008; - goto yy2004; + goto yy2013; + goto yy2009; } else { if (yych <= 0xF0) - goto yy2005; + goto yy2010; if (yych <= 0xF3) - goto yy2006; + goto yy2011; if (yych <= 0xF4) - goto yy2007; - goto yy1977; + goto yy2012; + goto yy1982; } } - yy2000: + yy2005: ++p; yych = *p; - yy2001: + yy2006: if (yybm[0 + yych] & 64) { - goto yy2000; + goto yy2005; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1977; + goto yy1982; if (yych <= '\'') - goto yy2009; - goto yy1998; + goto yy2014; + goto yy2003; } else { if (yych <= 0xC1) - goto yy1977; + goto yy1982; if (yych >= 0xE0) - goto yy2003; + goto yy2008; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2008; - goto yy2004; + goto yy2013; + goto yy2009; } else { if (yych <= 0xF0) - goto yy2005; + goto yy2010; if (yych <= 0xF3) - goto yy2006; + goto yy2011; if (yych <= 0xF4) - goto yy2007; - goto yy1977; + goto yy2012; + goto yy1982; } } - yy2002: + yy2007: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2000; - goto yy1977; - yy2003: + goto yy2005; + goto yy1982; + yy2008: ++p; yych = *p; if (yych <= 0x9F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2002; - goto yy1977; - yy2004: + goto yy2007; + goto yy1982; + yy2009: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2002; - goto yy1977; - yy2005: + goto yy2007; + goto yy1982; + yy2010: ++p; yych = *p; if (yych <= 0x8F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2004; - goto yy1977; - yy2006: + goto yy2009; + goto yy1982; + yy2011: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2004; - goto yy1977; - yy2007: + goto yy2009; + goto yy1982; + yy2012: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x8F) - goto yy2004; - goto yy1977; - yy2008: + goto yy2009; + goto yy1982; + yy2013: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x9F) - goto yy2002; - goto yy1977; - yy2009: + goto yy2007; + goto yy1982; + yy2014: ++p; - yy2010 : { return (bufsize_t)(p - start); } - yy2011: + yy2015 : { return (bufsize_t)(p - start); } + yy2016: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2000; + goto yy2005; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy2010; + goto yy2015; if (yych <= '\'') - goto yy2009; - goto yy1998; + goto yy2014; + goto yy2003; } else { if (yych <= 0xC1) - goto yy2010; + goto yy2015; if (yych <= 0xDF) - goto yy2002; - goto yy2003; + goto yy2007; + goto yy2008; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2008; - goto yy2004; + goto yy2013; + goto yy2009; } else { if (yych <= 0xF0) - goto yy2005; + goto yy2010; if (yych <= 0xF3) - goto yy2006; + goto yy2011; if (yych <= 0xF4) - goto yy2007; - goto yy2010; + goto yy2012; + goto yy2015; } } - yy2012: + yy2017: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2014; + goto yy2019; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1977; + goto yy1982; if (yych <= '"') - goto yy2025; - goto yy2012; + goto yy2030; + goto yy2017; } else { if (yych <= 0xC1) - goto yy1977; + goto yy1982; if (yych <= 0xDF) - goto yy2016; - goto yy2017; + goto yy2021; + goto yy2022; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2022; - goto yy2018; + goto yy2027; + goto yy2023; } else { if (yych <= 0xF0) - goto yy2019; + goto yy2024; if (yych <= 0xF3) - goto yy2020; + goto yy2025; if (yych <= 0xF4) - goto yy2021; - goto yy1977; + goto yy2026; + goto yy1982; } } - yy2014: + yy2019: ++p; yych = *p; - yy2015: + yy2020: if (yybm[0 + yych] & 128) { - goto yy2014; + goto yy2019; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1977; + goto yy1982; if (yych <= '"') - goto yy2023; - goto yy2012; + goto yy2028; + goto yy2017; } else { if (yych <= 0xC1) - goto yy1977; + goto yy1982; if (yych >= 0xE0) - goto yy2017; + goto yy2022; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2022; - goto yy2018; + goto yy2027; + goto yy2023; } else { if (yych <= 0xF0) - goto yy2019; + goto yy2024; if (yych <= 0xF3) - goto yy2020; + goto yy2025; if (yych <= 0xF4) - goto yy2021; - goto yy1977; + goto yy2026; + goto yy1982; } } - yy2016: + yy2021: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2014; - goto yy1977; - yy2017: + goto yy2019; + goto yy1982; + yy2022: ++p; yych = *p; if (yych <= 0x9F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2016; - goto yy1977; - yy2018: + goto yy2021; + goto yy1982; + yy2023: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2016; - goto yy1977; - yy2019: + goto yy2021; + goto yy1982; + yy2024: ++p; yych = *p; if (yych <= 0x8F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2018; - goto yy1977; - yy2020: + goto yy2023; + goto yy1982; + yy2025: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0xBF) - goto yy2018; - goto yy1977; - yy2021: + goto yy2023; + goto yy1982; + yy2026: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x8F) - goto yy2018; - goto yy1977; - yy2022: + goto yy2023; + goto yy1982; + yy2027: ++p; yych = *p; if (yych <= 0x7F) - goto yy1977; + goto yy1982; if (yych <= 0x9F) - goto yy2016; - goto yy1977; - yy2023: + goto yy2021; + goto yy1982; + yy2028: ++p; - yy2024 : { return (bufsize_t)(p - start); } - yy2025: + yy2029 : { return (bufsize_t)(p - start); } + yy2030: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2014; + goto yy2019; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy2024; + goto yy2029; if (yych <= '"') - goto yy2023; - goto yy2012; + goto yy2028; + goto yy2017; } else { if (yych <= 0xC1) - goto yy2024; + goto yy2029; if (yych <= 0xDF) - goto yy2016; - goto yy2017; + goto yy2021; + goto yy2022; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2022; - goto yy2018; + goto yy2027; + goto yy2023; } else { if (yych <= 0xF0) - goto yy2019; + goto yy2024; if (yych <= 0xF3) - goto yy2020; + goto yy2025; if (yych <= 0xF4) - goto yy2021; - goto yy2024; + goto yy2026; + goto yy2029; } } } @@ -24940,104 +24978,104 @@ bufsize_t _scan_spacechars(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '\r') { if (yych <= 0x08) - goto yy2032; + goto yy2037; if (yych == '\n') - goto yy2030; - goto yy2029; + goto yy2035; + goto yy2034; } else { if (yych == ' ') - goto yy2029; + goto yy2034; if (yych <= 0x7F) - goto yy2032; + goto yy2037; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2034; + goto yy2039; if (yych <= 0xE0) - goto yy2036; + goto yy2041; if (yych <= 0xEC) - goto yy2037; - goto yy2041; + goto yy2042; + goto yy2046; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2037; - goto yy2038; + goto yy2042; + goto yy2043; } else { if (yych <= 0xF3) - goto yy2039; + goto yy2044; if (yych <= 0xF4) - goto yy2040; + goto yy2045; } } } - yy2028 : { return (bufsize_t)(p - start); } - yy2029: + yy2033 : { return (bufsize_t)(p - start); } + yy2034: yych = *++p; - goto yy2031; - yy2030: + goto yy2036; + yy2035: ++p; yych = *p; - yy2031: + yy2036: if (yybm[0 + yych] & 128) { - goto yy2030; + goto yy2035; } - goto yy2028; - yy2032: + goto yy2033; + yy2037: ++p; { return 0; } - yy2034: + yy2039: yych = *++p; if (yych <= 0x7F) - goto yy2035; + goto yy2040; if (yych <= 0xBF) - goto yy2032; - yy2035: + goto yy2037; + yy2040: p = marker; - goto yy2028; - yy2036: + goto yy2033; + yy2041: yych = *++p; if (yych <= 0x9F) - goto yy2035; + goto yy2040; if (yych <= 0xBF) - goto yy2034; - goto yy2035; - yy2037: + goto yy2039; + goto yy2040; + yy2042: yych = *++p; if (yych <= 0x7F) - goto yy2035; + goto yy2040; if (yych <= 0xBF) - goto yy2034; - goto yy2035; - yy2038: + goto yy2039; + goto yy2040; + yy2043: yych = *++p; if (yych <= 0x8F) - goto yy2035; + goto yy2040; if (yych <= 0xBF) - goto yy2037; - goto yy2035; - yy2039: + goto yy2042; + goto yy2040; + yy2044: yych = *++p; if (yych <= 0x7F) - goto yy2035; + goto yy2040; if (yych <= 0xBF) - goto yy2037; - goto yy2035; - yy2040: + goto yy2042; + goto yy2040; + yy2045: yych = *++p; if (yych <= 0x7F) - goto yy2035; + goto yy2040; if (yych <= 0x8F) - goto yy2037; - goto yy2035; - yy2041: + goto yy2042; + goto yy2040; + yy2046: ++p; if ((yych = *p) <= 0x7F) - goto yy2035; + goto yy2040; if (yych <= 0x9F) - goto yy2034; - goto yy2035; + goto yy2039; + goto yy2040; } } @@ -25066,178 +25104,178 @@ bufsize_t _scan_atx_header_start(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '"') { if (yych != '\n') - goto yy2046; + goto yy2051; } else { if (yych <= '#') - goto yy2045; + goto yy2050; if (yych <= 0x7F) - goto yy2046; + goto yy2051; if (yych >= 0xC2) - goto yy2047; + goto yy2052; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy2049; - if (yych == 0xED) goto yy2054; - goto yy2050; + if (yych == 0xED) + goto yy2059; + goto yy2055; } else { if (yych <= 0xF0) - goto yy2051; + goto yy2056; if (yych <= 0xF3) - goto yy2052; + goto yy2057; if (yych <= 0xF4) - goto yy2053; + goto yy2058; } } - yy2044 : { return 0; } - yy2045: + yy2049 : { return 0; } + yy2050: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy2057; + goto yy2062; } if (yych <= '\f') { if (yych == '\n') - goto yy2055; - goto yy2044; + goto yy2060; + goto yy2049; } else { if (yych <= '\r') - goto yy2055; + goto yy2060; if (yych == '#') - goto yy2059; - goto yy2044; + goto yy2064; + goto yy2049; } - yy2046: + yy2051: yych = *++p; - goto yy2044; - yy2047: + goto yy2049; + yy2052: yych = *++p; if (yych <= 0x7F) - goto yy2048; + goto yy2053; if (yych <= 0xBF) - goto yy2046; - yy2048: + goto yy2051; + yy2053: p = marker; - goto yy2044; - yy2049: + goto yy2049; + yy2054: yych = *++p; if (yych <= 0x9F) - goto yy2048; + goto yy2053; if (yych <= 0xBF) - goto yy2047; - goto yy2048; - yy2050: + goto yy2052; + goto yy2053; + yy2055: yych = *++p; if (yych <= 0x7F) - goto yy2048; + goto yy2053; if (yych <= 0xBF) - goto yy2047; - goto yy2048; - yy2051: + goto yy2052; + goto yy2053; + yy2056: yych = *++p; if (yych <= 0x8F) - goto yy2048; + goto yy2053; if (yych <= 0xBF) - goto yy2050; - goto yy2048; - yy2052: + goto yy2055; + goto yy2053; + yy2057: yych = *++p; if (yych <= 0x7F) - goto yy2048; + goto yy2053; if (yych <= 0xBF) - goto yy2050; - goto yy2048; - yy2053: + goto yy2055; + goto yy2053; + yy2058: yych = *++p; if (yych <= 0x7F) - goto yy2048; + goto yy2053; if (yych <= 0x8F) - goto yy2050; - goto yy2048; - yy2054: + goto yy2055; + goto yy2053; + yy2059: yych = *++p; if (yych <= 0x7F) - goto yy2048; + goto yy2053; if (yych <= 0x9F) - goto yy2047; - goto yy2048; - yy2055: + goto yy2052; + goto yy2053; + yy2060: ++p; - yy2056 : { return (bufsize_t)(p - start); } - yy2057: + yy2061 : { return (bufsize_t)(p - start); } + yy2062: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2057; + goto yy2062; } - goto yy2056; - yy2059: + goto yy2061; + yy2064: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2057; + goto yy2062; } if (yych <= '\f') { if (yych == '\n') - goto yy2055; - goto yy2048; + goto yy2060; + goto yy2053; } else { if (yych <= '\r') - goto yy2055; + goto yy2060; if (yych != '#') - goto yy2048; + goto yy2053; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2057; + goto yy2062; } if (yych <= '\f') { if (yych == '\n') - goto yy2055; - goto yy2048; + goto yy2060; + goto yy2053; } else { if (yych <= '\r') - goto yy2055; + goto yy2060; if (yych != '#') - goto yy2048; + goto yy2053; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2057; + goto yy2062; } if (yych <= '\f') { if (yych == '\n') - goto yy2055; - goto yy2048; + goto yy2060; + goto yy2053; } else { if (yych <= '\r') - goto yy2055; + goto yy2060; if (yych != '#') - goto yy2048; + goto yy2053; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2057; + goto yy2062; } if (yych <= '\f') { if (yych == '\n') - goto yy2055; - goto yy2048; + goto yy2060; + goto yy2053; } else { if (yych <= '\r') - goto yy2055; + goto yy2060; if (yych != '#') - goto yy2048; + goto yy2053; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy2057; + goto yy2062; } if (yych == '\n') - goto yy2055; + goto yy2060; if (yych == '\r') - goto yy2055; - goto yy2048; + goto yy2060; + goto yy2053; } } @@ -25266,187 +25304,187 @@ bufsize_t _scan_setext_header_line(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '-') { if (yych == '\n') - goto yy2066; + goto yy2071; if (yych <= ',') - goto yy2069; - goto yy2068; + goto yy2074; + goto yy2073; } else { if (yych == '=') - goto yy2067; + goto yy2072; if (yych <= 0x7F) - goto yy2069; + goto yy2074; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2070; + goto yy2075; if (yych <= 0xE0) - goto yy2072; + goto yy2077; if (yych <= 0xEC) - goto yy2073; - goto yy2077; + goto yy2078; + goto yy2082; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2073; - goto yy2074; + goto yy2078; + goto yy2079; } else { if (yych <= 0xF3) - goto yy2075; + goto yy2080; if (yych <= 0xF4) - goto yy2076; + goto yy2081; } } } - yy2066 : { return 0; } - yy2067: + yy2071 : { return 0; } + yy2072: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy2088; + goto yy2093; } if (yych <= '\f') { if (yych == '\n') - goto yy2086; - goto yy2066; + goto yy2091; + goto yy2071; } else { if (yych <= '\r') - goto yy2086; + goto yy2091; if (yych == ' ') - goto yy2084; - goto yy2066; + goto yy2089; + goto yy2071; } - yy2068: + yy2073: yych = *(marker = ++p); if (yybm[0 + yych] & 32) { - goto yy2078; + goto yy2083; } if (yych <= '\f') { if (yych == '\n') - goto yy2080; - goto yy2066; + goto yy2085; + goto yy2071; } else { if (yych <= '\r') - goto yy2080; + goto yy2085; if (yych == '-') - goto yy2082; - goto yy2066; + goto yy2087; + goto yy2071; } - yy2069: + yy2074: yych = *++p; - goto yy2066; - yy2070: + goto yy2071; + yy2075: yych = *++p; if (yych <= 0x7F) - goto yy2071; + goto yy2076; if (yych <= 0xBF) - goto yy2069; - yy2071: + goto yy2074; + yy2076: p = marker; - goto yy2066; - yy2072: + goto yy2071; + yy2077: yych = *++p; if (yych <= 0x9F) - goto yy2071; + goto yy2076; if (yych <= 0xBF) - goto yy2070; - goto yy2071; - yy2073: + goto yy2075; + goto yy2076; + yy2078: yych = *++p; if (yych <= 0x7F) - goto yy2071; + goto yy2076; if (yych <= 0xBF) - goto yy2070; - goto yy2071; - yy2074: + goto yy2075; + goto yy2076; + yy2079: yych = *++p; if (yych <= 0x8F) - goto yy2071; + goto yy2076; if (yych <= 0xBF) - goto yy2073; - goto yy2071; - yy2075: + goto yy2078; + goto yy2076; + yy2080: yych = *++p; if (yych <= 0x7F) - goto yy2071; + goto yy2076; if (yych <= 0xBF) - goto yy2073; - goto yy2071; - yy2076: + goto yy2078; + goto yy2076; + yy2081: yych = *++p; if (yych <= 0x7F) - goto yy2071; + goto yy2076; if (yych <= 0x8F) - goto yy2073; - goto yy2071; - yy2077: + goto yy2078; + goto yy2076; + yy2082: yych = *++p; if (yych <= 0x7F) - goto yy2071; + goto yy2076; if (yych <= 0x9F) - goto yy2070; - goto yy2071; - yy2078: + goto yy2075; + goto yy2076; + yy2083: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2078; + goto yy2083; } if (yych == '\n') - goto yy2080; + goto yy2085; if (yych != '\r') - goto yy2071; - yy2080: + goto yy2076; + yy2085: ++p; { return 2; } - yy2082: + yy2087: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2078; + goto yy2083; } if (yych <= '\f') { if (yych == '\n') - goto yy2080; - goto yy2071; + goto yy2085; + goto yy2076; } else { if (yych <= '\r') - goto yy2080; + goto yy2085; if (yych == '-') - goto yy2082; - goto yy2071; + goto yy2087; + goto yy2076; } - yy2084: + yy2089: ++p; yych = *p; if (yych <= '\f') { if (yych != '\n') - goto yy2071; + goto yy2076; } else { if (yych <= '\r') - goto yy2086; + goto yy2091; if (yych == ' ') - goto yy2084; - goto yy2071; + goto yy2089; + goto yy2076; } - yy2086: + yy2091: ++p; { return 1; } - yy2088: + yy2093: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2088; + goto yy2093; } if (yych <= '\f') { if (yych == '\n') - goto yy2086; - goto yy2071; + goto yy2091; + goto yy2076; } else { if (yych <= '\r') - goto yy2086; + goto yy2091; if (yych == ' ') - goto yy2084; - goto yy2071; + goto yy2089; + goto yy2076; } } } @@ -25478,267 +25516,267 @@ bufsize_t _scan_hrule(const unsigned char *p) { if (yych <= 0x7F) { if (yych <= '*') { if (yych == '\n') - goto yy2092; + goto yy2097; if (yych <= ')') - goto yy2096; - goto yy2093; + goto yy2101; + goto yy2098; } else { if (yych <= '-') { if (yych <= ',') - goto yy2096; - goto yy2095; + goto yy2101; + goto yy2100; } else { if (yych == '_') - goto yy2094; - goto yy2096; + goto yy2099; + goto yy2101; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych >= 0xC2) - goto yy2097; + goto yy2102; } else { if (yych <= 0xE0) - goto yy2099; + goto yy2104; if (yych <= 0xEC) - goto yy2100; - goto yy2104; + goto yy2105; + goto yy2109; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2100; - goto yy2101; + goto yy2105; + goto yy2106; } else { if (yych <= 0xF3) - goto yy2102; + goto yy2107; if (yych <= 0xF4) - goto yy2103; + goto yy2108; } } } - yy2092 : { return 0; } - yy2093: + yy2097 : { return 0; } + yy2098: yych = *(marker = ++p); if (yych == ' ') - goto yy2125; + goto yy2130; if (yych == '*') - goto yy2127; - goto yy2092; - yy2094: + goto yy2132; + goto yy2097; + yy2099: yych = *(marker = ++p); if (yych == ' ') - goto yy2115; + goto yy2120; if (yych == '_') - goto yy2117; - goto yy2092; - yy2095: + goto yy2122; + goto yy2097; + yy2100: yych = *(marker = ++p); if (yybm[0 + yych] & 8) { - goto yy2105; + goto yy2110; } if (yych == '-') - goto yy2107; - goto yy2092; - yy2096: + goto yy2112; + goto yy2097; + yy2101: yych = *++p; - goto yy2092; - yy2097: + goto yy2097; + yy2102: yych = *++p; if (yych <= 0x7F) - goto yy2098; + goto yy2103; if (yych <= 0xBF) - goto yy2096; - yy2098: + goto yy2101; + yy2103: p = marker; - goto yy2092; - yy2099: + goto yy2097; + yy2104: yych = *++p; if (yych <= 0x9F) - goto yy2098; + goto yy2103; if (yych <= 0xBF) - goto yy2097; - goto yy2098; - yy2100: + goto yy2102; + goto yy2103; + yy2105: yych = *++p; if (yych <= 0x7F) - goto yy2098; + goto yy2103; if (yych <= 0xBF) - goto yy2097; - goto yy2098; - yy2101: + goto yy2102; + goto yy2103; + yy2106: yych = *++p; if (yych <= 0x8F) - goto yy2098; + goto yy2103; if (yych <= 0xBF) - goto yy2100; - goto yy2098; - yy2102: + goto yy2105; + goto yy2103; + yy2107: yych = *++p; if (yych <= 0x7F) - goto yy2098; + goto yy2103; if (yych <= 0xBF) - goto yy2100; - goto yy2098; - yy2103: + goto yy2105; + goto yy2103; + yy2108: yych = *++p; if (yych <= 0x7F) - goto yy2098; + goto yy2103; if (yych <= 0x8F) - goto yy2100; - goto yy2098; - yy2104: + goto yy2105; + goto yy2103; + yy2109: yych = *++p; if (yych <= 0x7F) - goto yy2098; + goto yy2103; if (yych <= 0x9F) - goto yy2097; - goto yy2098; - yy2105: + goto yy2102; + goto yy2103; + yy2110: ++p; yych = *p; if (yybm[0 + yych] & 8) { - goto yy2105; + goto yy2110; } if (yych != '-') - goto yy2098; - yy2107: + goto yy2103; + yy2112: ++p; yych = *p; if (yych == ' ') - goto yy2107; + goto yy2112; if (yych != '-') - goto yy2098; - yy2109: + goto yy2103; + yy2114: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy2109; + goto yy2114; } if (yych <= '\n') { if (yych <= 0x08) - goto yy2098; + goto yy2103; if (yych >= '\n') - goto yy2113; + goto yy2118; } else { if (yych == '\r') - goto yy2113; - goto yy2098; + goto yy2118; + goto yy2103; } - yy2111: + yy2116: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2111; + goto yy2116; } if (yych <= 0x08) - goto yy2098; + goto yy2103; if (yych <= '\n') - goto yy2113; + goto yy2118; if (yych != '\r') - goto yy2098; - yy2113: + goto yy2103; + yy2118: ++p; { return (bufsize_t)(p - start); } - yy2115: + yy2120: ++p; yych = *p; if (yych == ' ') - goto yy2115; + goto yy2120; if (yych != '_') - goto yy2098; - yy2117: + goto yy2103; + yy2122: ++p; yych = *p; if (yych == ' ') - goto yy2117; + goto yy2122; if (yych != '_') - goto yy2098; - yy2119: + goto yy2103; + yy2124: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2119; + goto yy2124; } if (yych <= '\n') { if (yych <= 0x08) - goto yy2098; + goto yy2103; if (yych >= '\n') - goto yy2123; + goto yy2128; } else { if (yych == '\r') - goto yy2123; - goto yy2098; + goto yy2128; + goto yy2103; } - yy2121: + yy2126: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy2098; + goto yy2103; if (yych <= '\t') - goto yy2121; + goto yy2126; if (yych >= '\v') - goto yy2098; + goto yy2103; } else { if (yych <= '\r') - goto yy2123; + goto yy2128; if (yych == ' ') - goto yy2121; - goto yy2098; + goto yy2126; + goto yy2103; } - yy2123: + yy2128: ++p; { return (bufsize_t)(p - start); } - yy2125: + yy2130: ++p; yych = *p; if (yych == ' ') - goto yy2125; + goto yy2130; if (yych != '*') - goto yy2098; - yy2127: + goto yy2103; + yy2132: ++p; yych = *p; if (yych == ' ') - goto yy2127; + goto yy2132; if (yych != '*') - goto yy2098; - yy2129: + goto yy2103; + yy2134: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2129; + goto yy2134; } if (yych <= '\n') { if (yych <= 0x08) - goto yy2098; + goto yy2103; if (yych >= '\n') - goto yy2133; + goto yy2138; } else { if (yych == '\r') - goto yy2133; - goto yy2098; + goto yy2138; + goto yy2103; } - yy2131: + yy2136: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy2098; + goto yy2103; if (yych <= '\t') - goto yy2131; + goto yy2136; if (yych >= '\v') - goto yy2098; + goto yy2103; } else { if (yych <= '\r') - goto yy2133; + goto yy2138; if (yych == ' ') - goto yy2131; - goto yy2098; + goto yy2136; + goto yy2103; } - yy2133: + yy2138: ++p; { return (bufsize_t)(p - start); } } @@ -25776,374 +25814,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy2137; + goto yy2142; if (yych <= '_') - goto yy2140; - goto yy2138; + goto yy2145; + goto yy2143; } else { if (yych == '~') - goto yy2139; + goto yy2144; if (yych <= 0x7F) - goto yy2140; + goto yy2145; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2141; + goto yy2146; if (yych <= 0xE0) - goto yy2143; + goto yy2148; if (yych <= 0xEC) - goto yy2144; - goto yy2148; + goto yy2149; + goto yy2153; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2144; - goto yy2145; + goto yy2149; + goto yy2150; } else { if (yych <= 0xF3) - goto yy2146; + goto yy2151; if (yych <= 0xF4) - goto yy2147; + goto yy2152; } } } - yy2137 : { return 0; } - yy2138: + yy2142 : { return 0; } + yy2143: yych = *(marker = ++p); if (yych == '`') - goto yy2163; - goto yy2137; - yy2139: + goto yy2168; + goto yy2142; + yy2144: yych = *(marker = ++p); if (yych == '~') - goto yy2149; - goto yy2137; - yy2140: + goto yy2154; + goto yy2142; + yy2145: yych = *++p; - goto yy2137; - yy2141: + goto yy2142; + yy2146: yych = *++p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2140; - yy2142: + goto yy2145; + yy2147: p = marker; - goto yy2137; - yy2143: + goto yy2142; + yy2148: yych = *++p; if (yych <= 0x9F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2141; - goto yy2142; - yy2144: + goto yy2146; + goto yy2147; + yy2149: yych = *++p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2141; - goto yy2142; - yy2145: + goto yy2146; + goto yy2147; + yy2150: yych = *++p; if (yych <= 0x8F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2144; - goto yy2142; - yy2146: + goto yy2149; + goto yy2147; + yy2151: yych = *++p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2144; - goto yy2142; - yy2147: + goto yy2149; + goto yy2147; + yy2152: yych = *++p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0x8F) - goto yy2144; - goto yy2142; - yy2148: + goto yy2149; + goto yy2147; + yy2153: yych = *++p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0x9F) - goto yy2141; - goto yy2142; - yy2149: + goto yy2146; + goto yy2147; + yy2154: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy2150; + goto yy2155; } - goto yy2142; - yy2150: + goto yy2147; + yy2155: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2152; + goto yy2157; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy2142; + goto yy2147; if (yych <= '\r') - goto yy2161; - goto yy2150; + goto yy2166; + goto yy2155; } else { if (yych <= 0xC1) - goto yy2142; + goto yy2147; if (yych <= 0xDF) - goto yy2154; - goto yy2155; + goto yy2159; + goto yy2160; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2160; - goto yy2156; + goto yy2165; + goto yy2161; } else { if (yych <= 0xF0) - goto yy2157; + goto yy2162; if (yych <= 0xF3) - goto yy2158; + goto yy2163; if (yych <= 0xF4) - goto yy2159; - goto yy2142; + goto yy2164; + goto yy2147; } } - yy2152: + yy2157: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy2152; + goto yy2157; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy2142; + goto yy2147; if (yych <= '\r') - goto yy2161; - goto yy2142; + goto yy2166; + goto yy2147; } else { if (yych <= 0xDF) - goto yy2154; + goto yy2159; if (yych <= 0xE0) - goto yy2155; - goto yy2156; + goto yy2160; + goto yy2161; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy2160; + goto yy2165; if (yych <= 0xEF) - goto yy2156; - goto yy2157; + goto yy2161; + goto yy2162; } else { if (yych <= 0xF3) - goto yy2158; + goto yy2163; if (yych <= 0xF4) - goto yy2159; - goto yy2142; + goto yy2164; + goto yy2147; } } - yy2154: + yy2159: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2152; - goto yy2142; - yy2155: + goto yy2157; + goto yy2147; + yy2160: ++p; yych = *p; if (yych <= 0x9F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2154; - goto yy2142; - yy2156: + goto yy2159; + goto yy2147; + yy2161: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2154; - goto yy2142; - yy2157: + goto yy2159; + goto yy2147; + yy2162: ++p; yych = *p; if (yych <= 0x8F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2156; - goto yy2142; - yy2158: + goto yy2161; + goto yy2147; + yy2163: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2156; - goto yy2142; - yy2159: + goto yy2161; + goto yy2147; + yy2164: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0x8F) - goto yy2156; - goto yy2142; - yy2160: + goto yy2161; + goto yy2147; + yy2165: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0x9F) - goto yy2154; - goto yy2142; - yy2161: + goto yy2159; + goto yy2147; + yy2166: ++p; p = marker; { return (bufsize_t)(p - start); } - yy2163: + yy2168: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy2164; + goto yy2169; } - goto yy2142; - yy2164: + goto yy2147; + yy2169: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2166; + goto yy2171; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy2142; + goto yy2147; if (yych <= '\r') - goto yy2175; - goto yy2164; + goto yy2180; + goto yy2169; } else { if (yych <= 0xC1) - goto yy2142; + goto yy2147; if (yych <= 0xDF) - goto yy2168; - goto yy2169; + goto yy2173; + goto yy2174; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy2174; - goto yy2170; + goto yy2179; + goto yy2175; } else { if (yych <= 0xF0) - goto yy2171; + goto yy2176; if (yych <= 0xF3) - goto yy2172; + goto yy2177; if (yych <= 0xF4) - goto yy2173; - goto yy2142; + goto yy2178; + goto yy2147; } } - yy2166: + yy2171: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2166; + goto yy2171; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy2142; + goto yy2147; if (yych <= '\r') - goto yy2175; - goto yy2142; + goto yy2180; + goto yy2147; } else { if (yych <= 0xDF) - goto yy2168; + goto yy2173; if (yych <= 0xE0) - goto yy2169; - goto yy2170; + goto yy2174; + goto yy2175; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy2174; + goto yy2179; if (yych <= 0xEF) - goto yy2170; - goto yy2171; + goto yy2175; + goto yy2176; } else { if (yych <= 0xF3) - goto yy2172; + goto yy2177; if (yych <= 0xF4) - goto yy2173; - goto yy2142; + goto yy2178; + goto yy2147; } } - yy2168: + yy2173: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2166; - goto yy2142; - yy2169: + goto yy2171; + goto yy2147; + yy2174: ++p; yych = *p; if (yych <= 0x9F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2168; - goto yy2142; - yy2170: + goto yy2173; + goto yy2147; + yy2175: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2168; - goto yy2142; - yy2171: + goto yy2173; + goto yy2147; + yy2176: ++p; yych = *p; if (yych <= 0x8F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2170; - goto yy2142; - yy2172: + goto yy2175; + goto yy2147; + yy2177: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0xBF) - goto yy2170; - goto yy2142; - yy2173: + goto yy2175; + goto yy2147; + yy2178: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0x8F) - goto yy2170; - goto yy2142; - yy2174: + goto yy2175; + goto yy2147; + yy2179: ++p; yych = *p; if (yych <= 0x7F) - goto yy2142; + goto yy2147; if (yych <= 0x9F) - goto yy2168; - goto yy2142; - yy2175: + goto yy2173; + goto yy2147; + yy2180: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -26175,190 +26213,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy2179; + goto yy2184; if (yych <= '_') - goto yy2182; - goto yy2180; + goto yy2187; + goto yy2185; } else { if (yych == '~') - goto yy2181; + goto yy2186; if (yych <= 0x7F) - goto yy2182; + goto yy2187; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy2183; + goto yy2188; if (yych <= 0xE0) - goto yy2185; + goto yy2190; if (yych <= 0xEC) - goto yy2186; - goto yy2190; + goto yy2191; + goto yy2195; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy2186; - goto yy2187; + goto yy2191; + goto yy2192; } else { if (yych <= 0xF3) - goto yy2188; + goto yy2193; if (yych <= 0xF4) - goto yy2189; + goto yy2194; } } } - yy2179 : { return 0; } - yy2180: + yy2184 : { return 0; } + yy2185: yych = *(marker = ++p); if (yych == '`') - goto yy2198; - goto yy2179; - yy2181: + goto yy2203; + goto yy2184; + yy2186: yych = *(marker = ++p); if (yych == '~') - goto yy2191; - goto yy2179; - yy2182: + goto yy2196; + goto yy2184; + yy2187: yych = *++p; - goto yy2179; - yy2183: + goto yy2184; + yy2188: yych = *++p; if (yych <= 0x7F) - goto yy2184; + goto yy2189; if (yych <= 0xBF) - goto yy2182; - yy2184: + goto yy2187; + yy2189: p = marker; - goto yy2179; - yy2185: + goto yy2184; + yy2190: yych = *++p; if (yych <= 0x9F) - goto yy2184; + goto yy2189; if (yych <= 0xBF) - goto yy2183; - goto yy2184; - yy2186: + goto yy2188; + goto yy2189; + yy2191: yych = *++p; if (yych <= 0x7F) - goto yy2184; + goto yy2189; if (yych <= 0xBF) - goto yy2183; - goto yy2184; - yy2187: + goto yy2188; + goto yy2189; + yy2192: yych = *++p; if (yych <= 0x8F) - goto yy2184; + goto yy2189; if (yych <= 0xBF) - goto yy2186; - goto yy2184; - yy2188: + goto yy2191; + goto yy2189; + yy2193: yych = *++p; if (yych <= 0x7F) - goto yy2184; + goto yy2189; if (yych <= 0xBF) - goto yy2186; - goto yy2184; - yy2189: + goto yy2191; + goto yy2189; + yy2194: yych = *++p; if (yych <= 0x7F) - goto yy2184; + goto yy2189; if (yych <= 0x8F) - goto yy2186; - goto yy2184; - yy2190: + goto yy2191; + goto yy2189; + yy2195: yych = *++p; if (yych <= 0x7F) - goto yy2184; + goto yy2189; if (yych <= 0x9F) - goto yy2183; - goto yy2184; - yy2191: + goto yy2188; + goto yy2189; + yy2196: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy2192; - } - goto yy2184; - yy2192: + goto yy2197; + } + goto yy2189; + yy2197: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2194; + goto yy2199; } if (yych <= '\f') { if (yych <= 0x08) - goto yy2184; + goto yy2189; if (yych <= '\n') - goto yy2196; - goto yy2184; + goto yy2201; + goto yy2189; } else { if (yych <= '\r') - goto yy2196; + goto yy2201; if (yych == '~') - goto yy2192; - goto yy2184; + goto yy2197; + goto yy2189; } - yy2194: + yy2199: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy2194; + goto yy2199; } if (yych <= 0x08) - goto yy2184; + goto yy2189; if (yych <= '\n') - goto yy2196; + goto yy2201; if (yych != '\r') - goto yy2184; - yy2196: + goto yy2189; + yy2201: ++p; p = marker; { return (bufsize_t)(p - start); } - yy2198: + yy2203: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy2199; + goto yy2204; } - goto yy2184; - yy2199: + goto yy2189; + yy2204: marker = p + 1; ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy2199; + goto yy2204; } if (yych <= '\f') { if (yych <= 0x08) - goto yy2184; + goto yy2189; if (yych <= '\t') - goto yy2201; + goto yy2206; if (yych <= '\n') - goto yy2203; - goto yy2184; + goto yy2208; + goto yy2189; } else { if (yych <= '\r') - goto yy2203; + goto yy2208; if (yych != ' ') - goto yy2184; + goto yy2189; } - yy2201: + yy2206: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy2184; + goto yy2189; if (yych <= '\t') - goto yy2201; + goto yy2206; if (yych >= '\v') - goto yy2184; + goto yy2189; } else { if (yych <= '\r') - goto yy2203; + goto yy2208; if (yych == ' ') - goto yy2201; - goto yy2184; + goto yy2206; + goto yy2189; } - yy2203: + yy2208: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -26377,997 +26415,997 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '%') { if (yych != '\n') - goto yy2209; + goto yy2214; } else { if (yych <= '&') - goto yy2208; + goto yy2213; if (yych <= 0x7F) - goto yy2209; + goto yy2214; if (yych >= 0xC2) - goto yy2210; + goto yy2215; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy2212; - if (yych == 0xED) goto yy2217; - goto yy2213; + if (yych == 0xED) + goto yy2222; + goto yy2218; } else { if (yych <= 0xF0) - goto yy2214; + goto yy2219; if (yych <= 0xF3) - goto yy2215; + goto yy2220; if (yych <= 0xF4) - goto yy2216; + goto yy2221; } } - yy2207 : { return 0; } - yy2208: + yy2212 : { return 0; } + yy2213: yych = *(marker = ++p); if (yych <= '@') { if (yych == '#') - goto yy2218; - goto yy2207; + goto yy2223; + goto yy2212; } else { if (yych <= 'Z') - goto yy2219; + goto yy2224; if (yych <= '`') - goto yy2207; + goto yy2212; if (yych <= 'z') - goto yy2219; - goto yy2207; + goto yy2224; + goto yy2212; } - yy2209: + yy2214: yych = *++p; - goto yy2207; - yy2210: + goto yy2212; + yy2215: yych = *++p; if (yych <= 0x7F) - goto yy2211; + goto yy2216; if (yych <= 0xBF) - goto yy2209; - yy2211: + goto yy2214; + yy2216: p = marker; - goto yy2207; - yy2212: + goto yy2212; + yy2217: yych = *++p; if (yych <= 0x9F) - goto yy2211; + goto yy2216; if (yych <= 0xBF) - goto yy2210; - goto yy2211; - yy2213: + goto yy2215; + goto yy2216; + yy2218: yych = *++p; if (yych <= 0x7F) - goto yy2211; + goto yy2216; if (yych <= 0xBF) - goto yy2210; - goto yy2211; - yy2214: + goto yy2215; + goto yy2216; + yy2219: yych = *++p; if (yych <= 0x8F) - goto yy2211; + goto yy2216; if (yych <= 0xBF) - goto yy2213; - goto yy2211; - yy2215: + goto yy2218; + goto yy2216; + yy2220: yych = *++p; if (yych <= 0x7F) - goto yy2211; + goto yy2216; if (yych <= 0xBF) - goto yy2213; - goto yy2211; - yy2216: + goto yy2218; + goto yy2216; + yy2221: yych = *++p; if (yych <= 0x7F) - goto yy2211; + goto yy2216; if (yych <= 0x8F) - goto yy2213; - goto yy2211; - yy2217: + goto yy2218; + goto yy2216; + yy2222: yych = *++p; if (yych <= 0x7F) - goto yy2211; + goto yy2216; if (yych <= 0x9F) - goto yy2210; - goto yy2211; - yy2218: + goto yy2215; + goto yy2216; + yy2223: yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2254; - goto yy2211; + goto yy2259; + goto yy2216; } else { if (yych <= 'X') - goto yy2253; + goto yy2258; if (yych == 'x') - goto yy2253; - goto yy2211; + goto yy2258; + goto yy2216; } - yy2219: + yy2224: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych >= ':') - goto yy2211; + goto yy2216; } else { if (yych <= 'Z') - goto yy2220; + goto yy2225; if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } - yy2220: + yy2225: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2223; + goto yy2228; if (yych <= ':') - goto yy2211; + goto yy2216; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; - goto yy2223; + goto yy2216; + goto yy2228; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych <= 'z') - goto yy2223; - goto yy2211; + goto yy2228; + goto yy2216; } } - yy2221: + yy2226: ++p; { return (bufsize_t)(p - start); } - yy2223: + yy2228: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2224; + goto yy2229; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2224: + yy2229: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2225; + goto yy2230; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2225: + yy2230: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2226; + goto yy2231; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2226: + yy2231: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2227; + goto yy2232; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2227: + yy2232: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2228; + goto yy2233; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2228: + yy2233: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2229; + goto yy2234; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2229: + yy2234: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2230; + goto yy2235; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2230: + yy2235: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2231; + goto yy2236; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2231: + yy2236: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2232; + goto yy2237; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2232: + yy2237: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2233; + goto yy2238; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2233: + yy2238: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2234; + goto yy2239; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2234: + yy2239: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2235; + goto yy2240; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2235: + yy2240: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2236; + goto yy2241; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2236: + yy2241: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2237; + goto yy2242; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2237: + yy2242: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2238; + goto yy2243; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2238: + yy2243: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2239; + goto yy2244; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2239: + yy2244: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2240; + goto yy2245; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2240: + yy2245: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2241; + goto yy2246; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2241: + yy2246: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2242; + goto yy2247; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2242: + yy2247: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2243; + goto yy2248; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2243: + yy2248: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2244; + goto yy2249; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2244: + yy2249: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2245; + goto yy2250; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2245: + yy2250: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2246; + goto yy2251; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2246: + yy2251: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2247; + goto yy2252; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2247: + yy2252: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2248; + goto yy2253; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2248: + yy2253: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2249; + goto yy2254; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2249: + yy2254: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2250; + goto yy2255; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2250: + yy2255: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2251; + goto yy2256; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2251: + yy2256: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2252; + goto yy2257; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= '{') - goto yy2211; + goto yy2216; } } - yy2252: + yy2257: yych = *++p; if (yych == ';') - goto yy2221; - goto yy2211; - yy2253: + goto yy2226; + goto yy2216; + yy2258: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2261; - goto yy2211; + goto yy2266; + goto yy2216; } else { if (yych <= 'F') - goto yy2261; + goto yy2266; if (yych <= '`') - goto yy2211; + goto yy2216; if (yych <= 'f') - goto yy2261; - goto yy2211; + goto yy2266; + goto yy2216; } - yy2254: + yy2259: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2255; + goto yy2260; if (yych == ';') - goto yy2221; - goto yy2211; - yy2255: + goto yy2226; + goto yy2216; + yy2260: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2256; + goto yy2261; if (yych == ';') - goto yy2221; - goto yy2211; - yy2256: + goto yy2226; + goto yy2216; + yy2261: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2257; + goto yy2262; if (yych == ';') - goto yy2221; - goto yy2211; - yy2257: + goto yy2226; + goto yy2216; + yy2262: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2258; + goto yy2263; if (yych == ';') - goto yy2221; - goto yy2211; - yy2258: + goto yy2226; + goto yy2216; + yy2263: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2259; + goto yy2264; if (yych == ';') - goto yy2221; - goto yy2211; - yy2259: + goto yy2226; + goto yy2216; + yy2264: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2260; + goto yy2265; if (yych == ';') - goto yy2221; - goto yy2211; - yy2260: + goto yy2226; + goto yy2216; + yy2265: yych = *++p; if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2252; + goto yy2257; if (yych == ';') - goto yy2221; - goto yy2211; - yy2261: + goto yy2226; + goto yy2216; + yy2266: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2262; + goto yy2267; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= 'g') - goto yy2211; + goto yy2216; } } - yy2262: + yy2267: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2263; + goto yy2268; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= 'g') - goto yy2211; + goto yy2216; } } - yy2263: + yy2268: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2264; + goto yy2269; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= 'g') - goto yy2211; + goto yy2216; } } - yy2264: + yy2269: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2265; + goto yy2270; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= 'g') - goto yy2211; + goto yy2216; } } - yy2265: + yy2270: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2266; + goto yy2271; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= 'g') - goto yy2211; + goto yy2216; } } - yy2266: + yy2271: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2267; + goto yy2272; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; + goto yy2216; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych >= 'g') - goto yy2211; + goto yy2216; } } - yy2267: + yy2272: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy2211; + goto yy2216; if (yych <= '9') - goto yy2252; + goto yy2257; if (yych <= ':') - goto yy2211; - goto yy2221; + goto yy2216; + goto yy2226; } else { if (yych <= 'F') { if (yych <= '@') - goto yy2211; - goto yy2252; + goto yy2216; + goto yy2257; } else { if (yych <= '`') - goto yy2211; + goto yy2216; if (yych <= 'f') - goto yy2252; - goto yy2211; + goto yy2257; + goto yy2216; } } } @@ -27387,415 +27425,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'I') { if (yych <= 'C') { if (yych != '\n') - goto yy2275; + goto yy2280; } else { if (yych <= 'D') - goto yy2271; + goto yy2276; if (yych == 'F') - goto yy2274; - goto yy2275; + goto yy2279; + goto yy2280; } } else { if (yych <= 'V') { if (yych <= 'J') - goto yy2272; + goto yy2277; if (yych <= 'U') - goto yy2275; - goto yy2273; + goto yy2280; + goto yy2278; } else { if (yych == 'd') - goto yy2271; + goto yy2276; if (yych <= 'e') - goto yy2275; - goto yy2274; + goto yy2280; + goto yy2279; } } } else { if (yych <= 0xDF) { if (yych <= 'u') { if (yych == 'j') - goto yy2272; - goto yy2275; + goto yy2277; + goto yy2280; } else { if (yych <= 'v') - goto yy2273; + goto yy2278; if (yych <= 0x7F) - goto yy2275; + goto yy2280; if (yych >= 0xC2) - goto yy2276; + goto yy2281; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy2278; - if (yych == 0xED) goto yy2283; - goto yy2279; + if (yych == 0xED) + goto yy2288; + goto yy2284; } else { if (yych <= 0xF0) - goto yy2280; + goto yy2285; if (yych <= 0xF3) - goto yy2281; + goto yy2286; if (yych <= 0xF4) - goto yy2282; + goto yy2287; } } } - yy2270 : { return 0; } - yy2271: + yy2275 : { return 0; } + yy2276: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy2305; + goto yy2310; if (yych == 'a') - goto yy2305; - goto yy2270; - yy2272: + goto yy2310; + goto yy2275; + yy2277: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy2296; + goto yy2301; if (yych == 'a') - goto yy2296; - goto yy2270; - yy2273: + goto yy2301; + goto yy2275; + yy2278: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy2289; + goto yy2294; if (yych == 'b') - goto yy2289; - goto yy2270; - yy2274: + goto yy2294; + goto yy2275; + yy2279: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy2284; + goto yy2289; if (yych == 'i') - goto yy2284; - goto yy2270; - yy2275: + goto yy2289; + goto yy2275; + yy2280: yych = *++p; - goto yy2270; - yy2276: + goto yy2275; + yy2281: yych = *++p; if (yych <= 0x7F) - goto yy2277; + goto yy2282; if (yych <= 0xBF) - goto yy2275; - yy2277: + goto yy2280; + yy2282: p = marker; if (yyaccept == 0) { - goto yy2270; + goto yy2275; } else { - goto yy2288; + goto yy2293; } - yy2278: + yy2283: yych = *++p; if (yych <= 0x9F) - goto yy2277; + goto yy2282; if (yych <= 0xBF) - goto yy2276; - goto yy2277; - yy2279: + goto yy2281; + goto yy2282; + yy2284: yych = *++p; if (yych <= 0x7F) - goto yy2277; + goto yy2282; if (yych <= 0xBF) - goto yy2276; - goto yy2277; - yy2280: + goto yy2281; + goto yy2282; + yy2285: yych = *++p; if (yych <= 0x8F) - goto yy2277; + goto yy2282; if (yych <= 0xBF) - goto yy2279; - goto yy2277; - yy2281: + goto yy2284; + goto yy2282; + yy2286: yych = *++p; if (yych <= 0x7F) - goto yy2277; + goto yy2282; if (yych <= 0xBF) - goto yy2279; - goto yy2277; - yy2282: + goto yy2284; + goto yy2282; + yy2287: yych = *++p; if (yych <= 0x7F) - goto yy2277; + goto yy2282; if (yych <= 0x8F) - goto yy2279; - goto yy2277; - yy2283: + goto yy2284; + goto yy2282; + yy2288: yych = *++p; if (yych <= 0x7F) - goto yy2277; + goto yy2282; if (yych <= 0x9F) - goto yy2276; - goto yy2277; - yy2284: + goto yy2281; + goto yy2282; + yy2289: yych = *++p; if (yych == 'L') - goto yy2285; + goto yy2290; if (yych != 'l') - goto yy2277; - yy2285: + goto yy2282; + yy2290: yych = *++p; if (yych == 'E') - goto yy2286; + goto yy2291; if (yych != 'e') - goto yy2277; - yy2286: + goto yy2282; + yy2291: yych = *++p; if (yych != ':') - goto yy2277; - yy2287: + goto yy2282; + yy2292: ++p; - yy2288 : { return (bufsize_t)(p - start); } - yy2289: + yy2293 : { return (bufsize_t)(p - start); } + yy2294: yych = *++p; if (yych == 'S') - goto yy2290; + goto yy2295; if (yych != 's') - goto yy2277; - yy2290: + goto yy2282; + yy2295: yych = *++p; if (yych == 'C') - goto yy2291; + goto yy2296; if (yych != 'c') - goto yy2277; - yy2291: + goto yy2282; + yy2296: yych = *++p; if (yych == 'R') - goto yy2292; + goto yy2297; if (yych != 'r') - goto yy2277; - yy2292: + goto yy2282; + yy2297: yych = *++p; if (yych == 'I') - goto yy2293; + goto yy2298; if (yych != 'i') - goto yy2277; - yy2293: + goto yy2282; + yy2298: yych = *++p; if (yych == 'P') - goto yy2294; + goto yy2299; if (yych != 'p') - goto yy2277; - yy2294: + goto yy2282; + yy2299: yych = *++p; if (yych == 'T') - goto yy2295; + goto yy2300; if (yych != 't') - goto yy2277; - yy2295: + goto yy2282; + yy2300: yych = *++p; if (yych == ':') - goto yy2287; - goto yy2277; - yy2296: + goto yy2292; + goto yy2282; + yy2301: yych = *++p; if (yych == 'V') - goto yy2297; + goto yy2302; if (yych != 'v') - goto yy2277; - yy2297: + goto yy2282; + yy2302: yych = *++p; if (yych == 'A') - goto yy2298; + goto yy2303; if (yych != 'a') - goto yy2277; - yy2298: + goto yy2282; + yy2303: yych = *++p; if (yych == 'S') - goto yy2299; + goto yy2304; if (yych != 's') - goto yy2277; - yy2299: + goto yy2282; + yy2304: yych = *++p; if (yych == 'C') - goto yy2300; + goto yy2305; if (yych != 'c') - goto yy2277; - yy2300: + goto yy2282; + yy2305: yych = *++p; if (yych == 'R') - goto yy2301; + goto yy2306; if (yych != 'r') - goto yy2277; - yy2301: + goto yy2282; + yy2306: yych = *++p; if (yych == 'I') - goto yy2302; + goto yy2307; if (yych != 'i') - goto yy2277; - yy2302: + goto yy2282; + yy2307: yych = *++p; if (yych == 'P') - goto yy2303; + goto yy2308; if (yych != 'p') - goto yy2277; - yy2303: + goto yy2282; + yy2308: yych = *++p; if (yych == 'T') - goto yy2304; + goto yy2309; if (yych != 't') - goto yy2277; - yy2304: + goto yy2282; + yy2309: yych = *++p; if (yych == ':') - goto yy2287; - goto yy2277; - yy2305: + goto yy2292; + goto yy2282; + yy2310: yych = *++p; if (yych == 'T') - goto yy2306; + goto yy2311; if (yych != 't') - goto yy2277; - yy2306: + goto yy2282; + yy2311: yych = *++p; if (yych == 'A') - goto yy2307; + goto yy2312; if (yych != 'a') - goto yy2277; - yy2307: + goto yy2282; + yy2312: yych = *++p; if (yych != ':') - goto yy2277; + goto yy2282; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy2309; + goto yy2314; if (yych != 'i') - goto yy2288; - yy2309: + goto yy2293; + yy2314: yych = *++p; if (yych == 'M') - goto yy2310; + goto yy2315; if (yych != 'm') - goto yy2277; - yy2310: + goto yy2282; + yy2315: yych = *++p; if (yych == 'A') - goto yy2311; + goto yy2316; if (yych != 'a') - goto yy2277; - yy2311: + goto yy2282; + yy2316: yych = *++p; if (yych == 'G') - goto yy2312; + goto yy2317; if (yych != 'g') - goto yy2277; - yy2312: + goto yy2282; + yy2317: yych = *++p; if (yych == 'E') - goto yy2313; + goto yy2318; if (yych != 'e') - goto yy2277; - yy2313: + goto yy2282; + yy2318: yych = *++p; if (yych != '/') - goto yy2277; + goto yy2282; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy2316; + goto yy2321; if (yych <= 'I') - goto yy2277; - goto yy2317; + goto yy2282; + goto yy2322; } else { if (yych == 'P') - goto yy2315; + goto yy2320; if (yych <= 'V') - goto yy2277; - goto yy2318; + goto yy2282; + goto yy2323; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy2316; + goto yy2321; if (yych <= 'i') - goto yy2277; - goto yy2317; + goto yy2282; + goto yy2322; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy2277; + goto yy2282; } else { if (yych == 'w') - goto yy2318; - goto yy2277; + goto yy2323; + goto yy2282; } } } - yy2315: + yy2320: yych = *++p; if (yych == 'N') - goto yy2326; + goto yy2331; if (yych == 'n') - goto yy2326; - goto yy2277; - yy2316: + goto yy2331; + goto yy2282; + yy2321: yych = *++p; if (yych == 'I') - goto yy2325; + goto yy2330; if (yych == 'i') - goto yy2325; - goto yy2277; - yy2317: + goto yy2330; + goto yy2282; + yy2322: yych = *++p; if (yych == 'P') - goto yy2323; + goto yy2328; if (yych == 'p') - goto yy2323; - goto yy2277; - yy2318: + goto yy2328; + goto yy2282; + yy2323: yych = *++p; if (yych == 'E') - goto yy2319; + goto yy2324; if (yych != 'e') - goto yy2277; - yy2319: + goto yy2282; + yy2324: yych = *++p; if (yych == 'B') - goto yy2320; + goto yy2325; if (yych != 'b') - goto yy2277; - yy2320: + goto yy2282; + yy2325: yych = *++p; if (yych == 'P') - goto yy2321; + goto yy2326; if (yych != 'p') - goto yy2277; - yy2321: + goto yy2282; + yy2326: ++p; { return 0; } - yy2323: + yy2328: yych = *++p; if (yych == 'E') - goto yy2324; + goto yy2329; if (yych != 'e') - goto yy2277; - yy2324: + goto yy2282; + yy2329: yych = *++p; if (yych == 'G') - goto yy2321; + goto yy2326; if (yych == 'g') - goto yy2321; - goto yy2277; - yy2325: + goto yy2326; + goto yy2282; + yy2330: yych = *++p; if (yych == 'F') - goto yy2321; + goto yy2326; if (yych == 'f') - goto yy2321; - goto yy2277; - yy2326: + goto yy2326; + goto yy2282; + yy2331: ++p; if ((yych = *p) == 'G') - goto yy2321; + goto yy2326; if (yych == 'g') - goto yy2321; - goto yy2277; + goto yy2326; + goto yy2282; } } diff --git a/src/scanners.re b/src/scanners.re index 6a4bba416a..0037bc4cf4 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -32,7 +32,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, tagname = [A-Za-z][A-Za-z0-9-]*; - blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'head'|'header'|'hr'|'html'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; + blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; -- cgit 0.0.5-2-1-g0f52 From 2da5a647df94575e4662f0096d1c0dac4c215d62 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 23 Aug 2015 21:52:47 -0700 Subject: Updated changelog. --- changelog.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/changelog.txt b/changelog.txt index 9605c28e2c..5c55f35afd 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,49 @@ +[0.22.0] + + * Removed `pre` from blocktags scanner. `pre` is handled separately + in rule 1 and needn't be handled in rule 6. + * Added `iframe` to list of blocktags, as per spec change. + * Fixed bug with `HRULE` after blank line. This previously caused cmark + to break out of a list, thinking it had two consecutive blanks. + * Check for empty string before trying to look at line ending. + * Make sure every line fed to `S_process_line` ends with `\n` (#72). + So `S_process_line` sees only unix style line endings. Ultimately we + probably want a better solution, allowing the line ending style of + the input file to be preserved. This solution forces output with newlines. + * Improved `cmark_strbuf_normalize_whitespace` (#73). Now all characters + that satisfy `cmark_isspace` are recognized as whitespace. Previously + `\r` and `\t` (and others) weren't included. + * Treat line ending with EOF as ending with newline (#71). + * Fixed `--hardbreaks` with `\r\n` line breaks (#68). + * Disallow list item starting with multiple blank lines (jgm/CommonMark#332). + * Allow tabs before closing `#`s in ATX header + * Removed `cmark_strbuf_printf` and `cmark_strbuf_vprintf`. + These are no longer needed, and cause complications for MSVC. + Also removed `HAVE_VA_COPY` and `HAVE_C99_SNPRINTF` feature tests. + * Added option to disable tests (Kevin Wojniak). + * Added `CMARK_INLINE` macro. + * Removed need to disable MSVC warnings 4267, 4244, 4800 + (Kevin Wojniak). + * Fixed MSVC inline errors when cmark is included in sources that + don't have the same set of disabled warnings (Kevin Wojniak). + * Fix `FileNotFoundError` errors on tests when cmark is built from + another project via `add_subdirectory()` (Kevin Wojniak). + * Prefix `utf8proc` functions to avoid conflict with existing library + (Kevin Wojniak). + * Avoid name clash between Windows `.pdb` files (Nick Wellnhofer). + * Improved `smart_punct.txt` (see jgm/commonmark.js#61). + * Set `POSITION_INDEPENDENT_CODE` `ON` for static library (see #39). + * `make bench`: allow overriding `BENCHFILE`. Previously if you did + this, it would clopper `BENCHFILE` with the default bench file. + * `make bench`: Use -10 priority with renice. + * Improved `make_autolink`. Ensures that title is chunk with empty + string rather than NULL, as with other links. + * Added `clang-check` target. + * Travis: split `roundtrip_test` and `leakcheck` (OGINO Masanori). + * Use clang-format, llvm style, for formatting. Reformatted all source files. + Added `format` target to Makefile. Removed `astyle` target. + Updated `.editorconfig`. + [0.21.0] * Updated to version 0.21 of spec. -- cgit 0.0.5-2-1-g0f52 From 2d3d955942c5ee4a99b401cf47e69f52c558325c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 23 Aug 2015 21:53:09 -0700 Subject: Version bump to 0.22.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a22064907..b422ddf386 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 21) +set(PROJECT_VERSION_MINOR 22) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From 1f4632b8e761da5aaeebcefb2e43332ad267dba8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 23 Aug 2015 21:55:21 -0700 Subject: Updated spec --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 4a0421a561..ff44e4afad 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.21 -date: 2015-07-14 +version: 0.22 +date: 2015-08-23 license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 3e0fa0695e26d1d77af8ebc8d70ed8817303a0b3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 16 Sep 2015 09:03:40 -0700 Subject: Check for NULL pointer in _scan_at. Closes #81. --- src/scanners.c | 66 ++++++++++++++++++++++++++++----------------------------- src/scanners.re | 14 ++++++++---- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 7868e01e8b..d9f998fd7a 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -7,11 +7,17 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset) { bufsize_t res; unsigned char *ptr = (unsigned char *)c->data; - unsigned char lim = ptr[c->len]; + unsigned char zero = '\0'; - ptr[c->len] = '\0'; - res = scanner(ptr + offset); - ptr[c->len] = lim; + if (ptr == NULL) { + res = scanner(&zero); + } else { + unsigned char lim = ptr[c->len]; + + ptr[c->len] = '\0'; + res = scanner(ptr + offset); + ptr[c->len] = lim; + } return res; } @@ -15122,45 +15128,37 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, + 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, - 230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, + 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230, + 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, + 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, - 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, + 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, + 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 <= '`') { diff --git a/src/scanners.re b/src/scanners.re index 0037bc4cf4..75417a16ad 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -6,11 +6,17 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, { bufsize_t res; unsigned char *ptr = (unsigned char *)c->data; - unsigned char lim = ptr[c->len]; + unsigned char zero = '\0'; - ptr[c->len] = '\0'; - res = scanner(ptr + offset); - ptr[c->len] = lim; + if (ptr == NULL) { + res = scanner(&zero); + } else { + unsigned char lim = ptr[c->len]; + + ptr[c->len] = '\0'; + res = scanner(ptr + offset); + ptr[c->len] = lim; + } return res; } -- cgit 0.0.5-2-1-g0f52 From 72aac53b5d04a6d8194fc53d2c5112f805298237 Mon Sep 17 00:00:00 2001 From: Zhiming Wang Date: Sun, 20 Sep 2015 16:43:40 -0700 Subject: Python 3.5 compatibility: add placeholder for HTMLParseError HTMLParseError was removed in Python 3.5. Since it could never be thrown in Python 3.5+, we simply define a placeholder when HTMLParseError cannot be imported. --- test/normalize.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/normalize.py b/test/normalize.py index 70bee46993..9025bfa99f 100644 --- a/test/normalize.py +++ b/test/normalize.py @@ -1,5 +1,14 @@ # -*- coding: utf-8 -*- -from html.parser import HTMLParser, HTMLParseError +from html.parser import HTMLParser + +try: + from html.parser import HTMLParseError +except ImportError: + # HTMLParseError was removed in Python 3.5. It could never be + # thrown, so we define a placeholder instead. + class HTMLParseError(Exception): + pass + from html.entities import name2codepoint import sys import re -- cgit 0.0.5-2-1-g0f52 From cc9c7677e66598ed2e93306a747253b2a5a9ec27 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 22 Sep 2015 22:40:12 -0700 Subject: Set convert_charrefs=False in normalize.py. This defeats the new default as of python 3.5, and allows the script to work with python 3.5. Closes #83. --- test/normalize.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/normalize.py b/test/normalize.py index 9025bfa99f..6eb4ec28f7 100644 --- a/test/normalize.py +++ b/test/normalize.py @@ -21,6 +21,7 @@ whitespace_re = re.compile('\s+') class MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) + self.convert_charrefs = False self.last = "starttag" self.in_pre = False self.output = "" -- cgit 0.0.5-2-1-g0f52 From c0cf2a3e308e9a8564dfb3a48dd7fc4ab9d57e38 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Oct 2015 21:20:08 -0700 Subject: Temporary change to see what is in the build directory. --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index d86785ba95..40e2eb7a8f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,6 +10,7 @@ install: build_script: - 'nmake' + - 'dir build' test_script: - 'nmake test' -- cgit 0.0.5-2-1-g0f52 From 5df72d797a1082adf9bc59f301ec66bf7d9446ca Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Oct 2015 23:15:43 -0700 Subject: Revert "Temporary change to see what is in the build directory." This reverts commit c0cf2a3e308e9a8564dfb3a48dd7fc4ab9d57e38. --- appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 40e2eb7a8f..d86785ba95 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,7 +10,6 @@ install: build_script: - 'nmake' - - 'dir build' test_script: - 'nmake test' -- cgit 0.0.5-2-1-g0f52 From f1e64cfcdbf1fbbe8a4d5b4a34fd712e70bdf27d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 9 Oct 2015 23:16:38 -0700 Subject: Makefile.nmake: be more robust when cmake is missing. Previously, when cmake was missing, the build dir would be created anyway, and subsequent attempts (even with cmake) would fail, because cmake would not be run. Depending on build/CMakeFiles is more robust -- this won't be created unless cmake is run. Partially addresses #85. --- Makefile.nmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.nmake b/Makefile.nmake index b0556e2ae7..ecfd4f5f5f 100644 --- a/Makefile.nmake +++ b/Makefile.nmake @@ -6,10 +6,10 @@ SPEC=test/spec.txt PROG=$(BUILDDIR)\src\cmark.exe GENERATOR=NMake Makefiles -all: $(BUILDDIR) +all: $(BUILDDIR)/CMakeFiles @cd $(BUILDDIR) && $(MAKE) /nologo && cd .. -$(BUILDDIR): +$(BUILDDIR)/CMakeFiles: @-mkdir $(BUILDDIR) 2> nul cd $(BUILDDIR) && \ cmake \ -- cgit 0.0.5-2-1-g0f52 From b281a1e24c119c6d35c34012cd964c84db908938 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 19 Oct 2015 15:55:44 -0700 Subject: Fixed DOCTYPE in xml output. See http://talk.commonmark.org/t/output-of-t-xml-should-have-different-doctype-declaration/1893. --- src/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xml.c b/src/xml.c index 0b225faf69..4885d0aa03 100644 --- a/src/xml.c +++ b/src/xml.c @@ -140,7 +140,7 @@ char *cmark_render_xml(cmark_node *root, int options) { cmark_strbuf_puts(state.xml, "\n"); cmark_strbuf_puts(state.xml, - "\n"); + "\n"); while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); S_render_node(cur, ev_type, &state, options); -- cgit 0.0.5-2-1-g0f52 From f79238f7dfba0f725558825c9d4466e771c2b3a5 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Thu, 22 Oct 2015 13:51:15 -0700 Subject: commonmark: fix size_t to int This fixes an MSVC warning "conversion from 'size_t' to 'int', possible loss of data" --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index da816237ef..9a029cd54d 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -95,7 +95,7 @@ static int shortest_unused_backtick_sequence(const char *code) { used = used >> 1; i++; } - return i; + return (int)i; } static bool is_autolink(cmark_node *node) { -- cgit 0.0.5-2-1-g0f52 From b7de53ec29dacd30b91796a2e558883f019d0b16 Mon Sep 17 00:00:00 2001 From: Lee Jeffery Date: Wed, 28 Oct 2015 23:56:02 +0000 Subject: Correct string length in cmark_parse_document example. --- man/man3/cmark.3 | 4 ++-- src/cmark.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index d14f9a0f2b..26c0d89db5 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "August 07, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "October 28, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -402,7 +402,7 @@ Simple interface: .IP .nf \f[C] -cmark_node *document = cmark_parse_document("Hello *world*", 12, +cmark_node *document = cmark_parse_document("Hello *world*", 13, CMARK_OPT_DEFAULT); \f[] .fi diff --git a/src/cmark.h b/src/cmark.h index 3ad44862ba..79bfbc5b15 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -368,7 +368,7 @@ CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); * * Simple interface: * - * cmark_node *document = cmark_parse_document("Hello *world*", 12, + * cmark_node *document = cmark_parse_document("Hello *world*", 13, * CMARK_OPT_DEFAULT); * * Streaming interface: -- cgit 0.0.5-2-1-g0f52 From 0b5a8193fdc7b041023e44149a1d63b95ce98bfd Mon Sep 17 00:00:00 2001 From: Marco Benelli Date: Mon, 2 Nov 2015 13:19:04 +0100 Subject: Replaced sprintf with snprintf. --- src/commonmark.c | 14 ++++++++------ src/html.c | 14 ++++++++------ src/latex.c | 6 ++++-- src/man.c | 5 +++-- src/xml.c | 17 ++++++++++------- 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 9a029cd54d..c427618fa8 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -23,7 +23,8 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, unsigned char nextc) { bool needs_escaping = false; - char encoded[20]; + const size_t ENCODED_SIZE = 20; + char encoded[ENCODED_SIZE]; needs_escaping = escape != LITERAL && @@ -42,7 +43,7 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape, if (needs_escaping) { if (isspace(c)) { // use percent encoding for spaces - sprintf(encoded, "%%%2x", c); + snprintf(encoded, ENCODED_SIZE, "%%%2x", c); cmark_strbuf_puts(renderer->buffer, encoded); renderer->column += 3; } else { @@ -153,7 +154,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info, *code, *title; size_t info_len, code_len; - char listmarker[20]; + const size_t LISTMARKER_SIZE = 20; + char listmarker[LISTMARKER_SIZE]; char *emph_delim; bufsize_t marker_width; @@ -206,9 +208,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, // we ensure a width of at least 4 so // we get nice transition from single digits // to double - sprintf(listmarker, "%d%s%s", list_number, - list_delim == CMARK_PAREN_DELIM ? ")" : ".", - list_number < 10 ? " " : " "); + snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number, + list_delim == CMARK_PAREN_DELIM ? ")" : ".", + list_number < 10 ? " " : " "); marker_width = safe_strlen(listmarker); } if (entering) { diff --git a/src/html.c b/src/html.c index dfe2aec8ff..b0a58955ed 100644 --- a/src/html.c +++ b/src/html.c @@ -29,11 +29,12 @@ struct render_state { static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) { - char buffer[100]; + const size_t BUFFER_SIZE = 100; + char buffer[BUFFER_SIZE]; if (CMARK_OPT_SOURCEPOS & options) { - sprintf(buffer, " data-sourcepos=\"%d:%d-%d:%d\"", - cmark_node_get_start_line(node), cmark_node_get_start_column(node), - cmark_node_get_end_line(node), cmark_node_get_end_column(node)); + snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"", + cmark_node_get_start_line(node), cmark_node_get_start_column(node), + cmark_node_get_end_line(node), cmark_node_get_end_column(node)); cmark_strbuf_puts(html, buffer); } } @@ -46,7 +47,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, char start_header[] = "\n"); } else { - sprintf(buffer, "
                                \n"); diff --git a/src/latex.c b/src/latex.c index 146062e20c..7170fabb7a 100644 --- a/src/latex.c +++ b/src/latex.c @@ -208,7 +208,8 @@ static int S_get_enumlevel(cmark_node *node) { static int S_render_node(cmark_renderer *renderer, cmark_node *node, cmark_event_type ev_type, int options) { int list_number; - char list_number_string[20]; + const size_t LIST_NUMBER_STRING_SIZE = 20; + char list_number_string[LIST_NUMBER_STRING_SIZE]; bool entering = (ev_type == CMARK_EVENT_ENTER); cmark_list_type list_type; const char *roman_numerals[] = {"", "i", "ii", "iii", "iv", "v", @@ -240,7 +241,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, CR(); list_number = cmark_node_get_list_start(node); if (list_number > 1) { - sprintf(list_number_string, "%d", list_number); + snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d", + list_number); LIT("\\setcounter{enum"); LIT((char *)roman_numerals[S_get_enumlevel(node)]); LIT("}{"); diff --git a/src/man.c b/src/man.c index 8e3913e9bc..86172226c4 100644 --- a/src/man.c +++ b/src/man.c @@ -110,8 +110,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, tmp = tmp->prev; list_number += 1; } - char list_number_s[20]; - sprintf(list_number_s, "\"%d.\" 4", list_number); + const size_t LIST_NUMBER_SIZE = 20; + char list_number_s[LIST_NUMBER_SIZE]; + snprintf(list_number_s, LIST_NUMBER_SIZE, "\"%d.\" 4", list_number); LIT(list_number_s); } CR(); diff --git a/src/xml.c b/src/xml.c index 4885d0aa03..6956efb9a4 100644 --- a/src/xml.c +++ b/src/xml.c @@ -34,7 +34,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, bool literal = false; cmark_delim_type delim; bool entering = (ev_type == CMARK_EVENT_ENTER); - char buffer[100]; + const size_t BUFFER_SIZE = 100; + char buffer[BUFFER_SIZE]; if (entering) { indent(state); @@ -42,8 +43,9 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { - sprintf(buffer, " sourcepos=\"%d:%d-%d:%d\"", node->start_line, - node->start_column, node->end_line, node->end_column); + snprintf(buffer, BUFFER_SIZE, " sourcepos=\"%d:%d-%d:%d\"", + node->start_line, node->start_column, node->end_line, + node->end_column); cmark_strbuf_puts(xml, buffer); } @@ -64,7 +66,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, switch (cmark_node_get_list_type(node)) { case CMARK_ORDERED_LIST: cmark_strbuf_puts(xml, " type=\"ordered\""); - sprintf(buffer, " start=\"%d\"", cmark_node_get_list_start(node)); + snprintf(buffer, BUFFER_SIZE, " start=\"%d\"", + cmark_node_get_list_start(node)); cmark_strbuf_puts(xml, buffer); delim = cmark_node_get_list_delim(node); if (delim == CMARK_PAREN_DELIM) { @@ -79,12 +82,12 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, default: break; } - sprintf(buffer, " tight=\"%s\"", - (cmark_node_get_list_tight(node) ? "true" : "false")); + snprintf(buffer, BUFFER_SIZE, " tight=\"%s\"", + (cmark_node_get_list_tight(node) ? "true" : "false")); cmark_strbuf_puts(xml, buffer); break; case CMARK_NODE_HEADER: - sprintf(buffer, " level=\"%d\"", node->as.header.level); + snprintf(buffer, BUFFER_SIZE, " level=\"%d\"", node->as.header.level); cmark_strbuf_puts(xml, buffer); break; case CMARK_NODE_CODE_BLOCK: -- cgit 0.0.5-2-1-g0f52 From a2976b9a11b8b9424a073305a1e0ff19a338009a Mon Sep 17 00:00:00 2001 From: andyuhnak Date: Tue, 3 Nov 2015 10:16:18 +0100 Subject: Fix non-ASCII end-of-line character check --- src/cmark_ctype.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cmark_ctype.c b/src/cmark_ctype.c index 863c35e06e..c9a9b0e28f 100644 --- a/src/cmark_ctype.c +++ b/src/cmark_ctype.c @@ -4,7 +4,7 @@ /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other */ -static const int8_t cmark_ctype_class[256] = { +static const uint8_t cmark_ctype_class[256] = { /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -26,17 +26,17 @@ static const int8_t cmark_ctype_class[256] = { /** * Returns 1 if c is a "whitespace" character as defined by the spec. */ -int cmark_isspace(char c) { return cmark_ctype_class[(int8_t)c] == 1; } +int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; } /** * Returns 1 if c is an ascii punctuation character. */ -int cmark_ispunct(char c) { return cmark_ctype_class[(int8_t)c] == 2; } +int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; } int cmark_isalnum(char c) { - int8_t result; - result = cmark_ctype_class[(int8_t)c]; + uint8_t result; + result = cmark_ctype_class[(uint8_t)c]; return (result == 3 || result == 4); } -int cmark_isdigit(char c) { return cmark_ctype_class[(int8_t)c] == 3; } +int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; } -- cgit 0.0.5-2-1-g0f52 From 408f0d1f7c39bc73d9d16c06d0e6c4ee0d64915c Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Tue, 1 Dec 2015 20:16:20 -0800 Subject: Fix "declaration shadows a local variable" --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 9a029cd54d..5c085894b8 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -230,7 +230,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_HEADER: if (entering) { - for (int i = cmark_node_get_header_level(node); i > 0; i--) { + for (i = cmark_node_get_header_level(node); i > 0; i--) { LIT("#"); } LIT(" "); -- cgit 0.0.5-2-1-g0f52 From 672c32dc15d420fa4c64df2c04d64d35efbf37d7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 3 Dec 2015 23:49:05 -0800 Subject: Added why-cmark-and-not-x page. --- why-cmark-and-not-x.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 why-cmark-and-not-x.md diff --git a/why-cmark-and-not-x.md b/why-cmark-and-not-x.md new file mode 100644 index 0000000000..34e013e163 --- /dev/null +++ b/why-cmark-and-not-x.md @@ -0,0 +1,86 @@ +Why use `cmark` and not X? +========================== + +`hoedown` +--------- + +`hoedown` (which derives from `sundown`) is slightly faster +than `cmark` in our benchmarks (0.21s vs. 0.29s). But both +are much faster than any other available implementations. + +`hoedown` boasts of including "protection against all possible +DOS attacks," but there are some chinks in the armor: + + % time python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' | cmark + ... + user 0m0.073s + % time python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' | hoedown + ... + 0m17.84s + +`hoedown` has many parsing bugs. Here is a selection: + + % hoedown + - one + - two + 1. three + ^D +
                                  +
                                • one + +
                                    +
                                  • two
                                  • +
                                  • three
                                  • +
                                • +
                                + + + % hoedown + ## hi\### + ^D +

                                hi\

                                + + + % hoedown + [ΑΓΩ]: /φου + + [αγω] + ^D +

                                [αγω]

                                + + + % hoedown + ``` + [foo]: /url + ``` + + [foo] + ^D +

                                ```

                                + +

                                ```

                                + +

                                foo

                                + + + % hoedown + [foo](url "ti\*tle") + ^D +

                                foo

                                + + +`discount` +---------- + +`cmark` is about six times faster. + +`kramdown` +---------- + +`cmark` is about a hundred times faster. + +`kramdown` also gets tied in knots by pathological input like + + python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' + + -- cgit 0.0.5-2-1-g0f52 From 6873b63029c6bf88a909dd85184d0aef34391cf5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 4 Dec 2015 08:00:25 -0800 Subject: Install static library. Closes jgm/CommonMark#381. --- src/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f619453678..f3e987737e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -117,9 +117,10 @@ endif(MSVC) set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) include (InstallRequiredSystemLibraries) -install(TARGETS ${PROGRAM} ${LIBRARY} +install(TARGETS ${PROGRAM} ${LIBRARY} ${STATICLIBRARY} RUNTIME DESTINATION bin LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib ) install(FILES -- cgit 0.0.5-2-1-g0f52 From df5236d73fd9aa5c890b36fff5d5a2796253bd45 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Thu, 10 Dec 2015 10:29:56 -0800 Subject: Fix warnings about dropping const qualifier --- src/commonmark.c | 4 ++-- src/houdini_html_u.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 5c085894b8..cbf99c1b48 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -368,9 +368,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, if (entering) { LIT("<"); if (strncmp(cmark_node_get_url(node), "mailto:", 7) == 0) { - LIT((char *)cmark_node_get_url(node) + 7); + LIT((const char *)cmark_node_get_url(node) + 7); } else { - LIT((char *)cmark_node_get_url(node)); + LIT((const char *)cmark_node_get_url(node)); } LIT(">"); // return signal to skip contents of node... diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index a2d927b16b..2f92544489 100755 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -9,12 +9,12 @@ /* Binary tree lookup code for entities added by JGM */ -static unsigned char *S_lookup(int i, int low, int hi, const unsigned char *s, +static const unsigned char *S_lookup(int i, int low, int hi, const unsigned char *s, int len) { int j; - int cmp = strncmp((char *)s, (char *)cmark_entities[i].entity, len); + int cmp = strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); if (cmp == 0 && cmark_entities[i].entity[len] == 0) { - return (unsigned char *)cmark_entities[i].bytes; + return (const unsigned char *)cmark_entities[i].bytes; } else if (cmp < 0 && i > low) { j = i - ((i - low) / 2); if (j == i) @@ -30,7 +30,7 @@ static unsigned char *S_lookup(int i, int low, int hi, const unsigned char *s, } } -static unsigned char *S_lookup_entity(const unsigned char *s, int len) { +static const unsigned char *S_lookup_entity(const unsigned char *s, int len) { return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len); } -- cgit 0.0.5-2-1-g0f52 From a452b609212ec4d08832badfbdf6c3ff6fd6a7c6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 13 Dec 2015 08:20:42 -0800 Subject: Documented another strange hoedown behavior. --- why-cmark-and-not-x.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/why-cmark-and-not-x.md b/why-cmark-and-not-x.md index 34e013e163..3fdb4e57a9 100644 --- a/why-cmark-and-not-x.md +++ b/why-cmark-and-not-x.md @@ -18,7 +18,8 @@ DOS attacks," but there are some chinks in the armor: ... 0m17.84s -`hoedown` has many parsing bugs. Here is a selection: +`hoedown` has many parsing bugs. Here is a selection (as of +v3.0.3): % hoedown - one @@ -69,6 +70,23 @@ DOS attacks," but there are some chinks in the armor:

                                foo

                                + % ./hoedown + - one + - two + - three + - four + ^D +
                                  +
                                • one + +
                                    +
                                  • two
                                  • +
                                  • three
                                  • +
                                  • four
                                  • +
                                • +
                                + + `discount` ---------- -- cgit 0.0.5-2-1-g0f52 From 1140f7ddd58388709ce87b4c306a7c875af5406e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 12:08:16 -0800 Subject: Use fully qualified versions of constants. --- src/blocks.c | 118 +++++++++++++++++++++++++++------------------------ src/chunk.h | 10 ++--- src/houdini_html_u.c | 7 +-- src/inlines.c | 16 +++---- src/node.c | 54 +++++++++++------------ src/utf8.c | 9 ++-- src/utf8.h | 6 ++- 7 files changed, 115 insertions(+), 105 deletions(-) mode change 100755 => 100644 src/blocks.c mode change 100755 => 100644 src/houdini_html_u.c mode change 100755 => 100644 src/inlines.c mode change 100755 => 100644 src/utf8.c mode change 100755 => 100644 src/utf8.h diff --git a/src/blocks.c b/src/blocks.c old mode 100755 new mode 100644 index 49ac273142..45831a642d --- a/src/blocks.c +++ b/src/blocks.c @@ -48,7 +48,7 @@ static cmark_node *make_block(cmark_node_type tag, int start_line, // Create a root document node. static cmark_node *make_document() { - cmark_node *e = make_block(NODE_DOCUMENT, 1, 1); + cmark_node *e = make_block(CMARK_NODE_DOCUMENT, 1, 1); return e; } @@ -112,14 +112,16 @@ static bool is_blank(cmark_strbuf *s, bufsize_t offset) { static inline bool can_contain(cmark_node_type parent_type, cmark_node_type child_type) { - return (parent_type == NODE_DOCUMENT || parent_type == NODE_BLOCK_QUOTE || - parent_type == NODE_ITEM || - (parent_type == NODE_LIST && child_type == NODE_ITEM)); + return (parent_type == CMARK_NODE_DOCUMENT || + parent_type == CMARK_NODE_BLOCK_QUOTE || + parent_type == CMARK_NODE_ITEM || + (parent_type == CMARK_NODE_LIST && child_type == CMARK_NODE_ITEM)); } static inline bool accepts_lines(cmark_node_type block_type) { - return (block_type == NODE_PARAGRAPH || block_type == NODE_HEADER || - block_type == NODE_CODE_BLOCK); + return (block_type == CMARK_NODE_PARAGRAPH || + block_type == CMARK_NODE_HEADER || + block_type == CMARK_NODE_CODE_BLOCK); } static void add_line(cmark_node *node, cmark_chunk *ch, bufsize_t offset) { @@ -162,7 +164,7 @@ static bool ends_with_blank_line(cmark_node *node) { if (cur->last_line_blank) { return true; } - if (cur->type == NODE_LIST || cur->type == NODE_ITEM) { + if (cur->type == CMARK_NODE_LIST || cur->type == CMARK_NODE_ITEM) { cur = cur->last_child; } else { cur = NULL; @@ -176,7 +178,7 @@ 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 && b->type != NODE_LIST) { + while (b && b->type != CMARK_NODE_LIST) { b = b->last_child; } if (b) { @@ -204,9 +206,9 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { // end of input - line number has not been incremented b->end_line = parser->line_number; b->end_column = parser->last_line_length; - } else if (b->type == NODE_DOCUMENT || - (b->type == NODE_CODE_BLOCK && b->as.code.fenced) || - (b->type == NODE_HEADER && b->as.header.setext)) { + } else if (b->type == CMARK_NODE_DOCUMENT || + (b->type == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) || + (b->type == CMARK_NODE_HEADER && b->as.header.setext)) { b->end_line = parser->line_number; b->end_column = parser->curline->size; if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n') @@ -219,7 +221,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { } switch (b->type) { - case NODE_PARAGRAPH: + case CMARK_NODE_PARAGRAPH: while (cmark_strbuf_at(&b->string_content, 0) == '[' && (pos = cmark_parse_reference_inline(&b->string_content, parser->refmap))) { @@ -232,7 +234,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { } break; - case NODE_CODE_BLOCK: + case CMARK_NODE_CODE_BLOCK: if (!b->as.code.fenced) { // indented code remove_trailing_blank_lines(&b->string_content); cmark_strbuf_putc(&b->string_content, '\n'); @@ -260,11 +262,11 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); break; - case NODE_HTML: + case CMARK_NODE_HTML: b->as.literal = cmark_chunk_buf_detach(&b->string_content); break; - case NODE_LIST: // determine tight/loose status + case CMARK_NODE_LIST: // determine tight/loose status b->as.list.tight = true; // tight by default item = b->first_child; @@ -334,7 +336,7 @@ static void process_inlines(cmark_node *root, cmark_reference_map *refmap, while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); if (ev_type == CMARK_EVENT_ENTER) { - if (cur->type == NODE_PARAGRAPH || cur->type == NODE_HEADER) { + if (cur->type == CMARK_NODE_PARAGRAPH || cur->type == CMARK_NODE_HEADER) { cmark_parse_inlines(cur, refmap, options); } } @@ -601,7 +603,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } // ensure line ends with a newline: if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) { - cmark_strbuf_putc(parser->curline, '\n'); + cmark_strbuf_putc(parser->curline, '\n'); } parser->offset = 0; parser->column = 0; @@ -623,7 +625,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, S_find_first_nonspace(parser, &input); - if (container->type == NODE_BLOCK_QUOTE) { + if (container->type == CMARK_NODE_BLOCK_QUOTE) { matched = parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; if (matched) { @@ -634,7 +636,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, all_matched = false; } - } else if (container->type == NODE_ITEM) { + } else if (container->type == CMARK_NODE_ITEM) { if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { S_advance_offset(parser, &input, container->as.list.marker_offset + @@ -650,7 +652,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, all_matched = false; } - } else if (container->type == NODE_CODE_BLOCK) { + } else if (container->type == CMARK_NODE_CODE_BLOCK) { if (!container->as.code.fenced) { // indented if (parser->indent >= CODE_INDENT) { @@ -683,12 +685,12 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } } } - } else if (container->type == NODE_HEADER) { + } else if (container->type == CMARK_NODE_HEADER) { // a header can never contain more than one line all_matched = false; - } else if (container->type == NODE_HTML) { + } else if (container->type == CMARK_NODE_HTML) { switch (container->as.html_block_type) { case 1: @@ -710,7 +712,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, exit(1); } - } else if (container->type == NODE_PARAGRAPH) { + } else if (container->type == CMARK_NODE_PARAGRAPH) { if (parser->blank) { all_matched = false; @@ -730,9 +732,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, break_out_of_lists(parser, &container); } - maybe_lazy = parser->current->type == NODE_PARAGRAPH; + maybe_lazy = parser->current->type == CMARK_NODE_PARAGRAPH; // try new container starts: - while (container->type != NODE_CODE_BLOCK && container->type != NODE_HTML) { + while (container->type != CMARK_NODE_CODE_BLOCK && + container->type != CMARK_NODE_HTML) { S_find_first_nonspace(parser, &input); indented = parser->indent >= CODE_INDENT; @@ -744,8 +747,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, // optional following character if (peek_at(&input, parser->offset) == ' ') S_advance_offset(parser, &input, 1, false); - container = - add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1); + container = add_child(parser, container, CMARK_NODE_BLOCK_QUOTE, + parser->offset + 1); } else if (!indented && (matched = scan_atx_header_start( &input, parser->first_nonspace))) { @@ -753,7 +756,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); - container = add_child(parser, container, NODE_HEADER, parser->offset + 1); + container = + add_child(parser, container, CMARK_NODE_HEADER, parser->offset + 1); bufsize_t hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace); @@ -769,12 +773,13 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else if (!indented && (matched = scan_open_code_fence( &input, parser->first_nonspace))) { - container = add_child(parser, container, NODE_CODE_BLOCK, + container = add_child(parser, container, CMARK_NODE_CODE_BLOCK, parser->first_nonspace + 1); container->as.code.fenced = true; container->as.code.fence_char = peek_at(&input, parser->first_nonspace); container->as.code.fence_length = matched; - container->as.code.fence_offset = (int8_t)(parser->first_nonspace - parser->offset); + container->as.code.fence_offset = + (int8_t)(parser->first_nonspace - parser->offset); container->as.code.info = cmark_chunk_literal(""); S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, @@ -782,17 +787,17 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else if (!indented && ((matched = scan_html_block_start( &input, parser->first_nonspace)) || - (container->type != NODE_PARAGRAPH && + (container->type != CMARK_NODE_PARAGRAPH && (matched = scan_html_block_start_7( &input, parser->first_nonspace))))) { - container = - add_child(parser, container, NODE_HTML, parser->first_nonspace + 1); + container = add_child(parser, container, CMARK_NODE_HTML, + parser->first_nonspace + 1); container->as.html_block_type = matched; // note, we don't adjust parser->offset because the tag is part of the // text - } else if (!indented && container->type == NODE_PARAGRAPH && + } else if (!indented && container->type == CMARK_NODE_PARAGRAPH && (lev = scan_setext_header_line(&input, parser->first_nonspace)) && // check that there is only one line in the paragraph: @@ -800,23 +805,23 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, &container->string_content, '\n', cmark_strbuf_len(&container->string_content) - 2) < 0)) { - container->type = NODE_HEADER; + container->type = CMARK_NODE_HEADER; container->as.header.level = lev; container->as.header.setext = true; S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); } else if (!indented && - !(container->type == NODE_PARAGRAPH && !all_matched) && + !(container->type == CMARK_NODE_PARAGRAPH && !all_matched) && (matched = scan_hrule(&input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext header: - container = - add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1); + container = add_child(parser, container, CMARK_NODE_HRULE, + parser->first_nonspace + 1); S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); } else if ((matched = parse_list_marker(&input, parser->first_nonspace, &data)) && - (!indented || container->type == NODE_LIST)) { + (!indented || container->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. @@ -845,25 +850,25 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, data->marker_offset = parser->indent; - if (container->type != NODE_LIST || + if (container->type != CMARK_NODE_LIST || !lists_match(&container->as.list, data)) { - container = - add_child(parser, container, NODE_LIST, parser->first_nonspace + 1); + container = add_child(parser, container, CMARK_NODE_LIST, + parser->first_nonspace + 1); memcpy(&container->as.list, data, sizeof(*data)); } // add the list item - container = - add_child(parser, container, NODE_ITEM, parser->first_nonspace + 1); + container = add_child(parser, container, CMARK_NODE_ITEM, + parser->first_nonspace + 1); /* TODO: static */ memcpy(&container->as.list, data, sizeof(*data)); free(data); } else if (indented && !maybe_lazy && !parser->blank) { S_advance_offset(parser, &input, CODE_INDENT, true); - container = - add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1); + container = add_child(parser, container, CMARK_NODE_CODE_BLOCK, + parser->offset + 1); container->as.code.fenced = false; container->as.code.fence_char = 0; container->as.code.fence_length = 0; @@ -895,11 +900,12 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, // lists or breaking out of lists. we also don't set last_line_blank // on an empty list item. container->last_line_blank = - (parser->blank && container->type != NODE_BLOCK_QUOTE && - container->type != NODE_HEADER && - container->type != NODE_HRULE && - !(container->type == NODE_CODE_BLOCK && container->as.code.fenced) && - !(container->type == NODE_ITEM && container->first_child == NULL && + (parser->blank && container->type != CMARK_NODE_BLOCK_QUOTE && + container->type != CMARK_NODE_HEADER && + container->type != CMARK_NODE_HRULE && + !(container->type == CMARK_NODE_CODE_BLOCK && + container->as.code.fenced) && + !(container->type == CMARK_NODE_ITEM && container->first_child == NULL && container->start_line == parser->line_number)); cmark_node *cont = container; @@ -910,7 +916,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, if (parser->current != last_matched_container && container == last_matched_container && !parser->blank && - parser->current->type == NODE_PARAGRAPH && + parser->current->type == CMARK_NODE_PARAGRAPH && cmark_strbuf_len(&parser->current->string_content) > 0) { add_line(parser->current, &input, parser->offset); @@ -923,11 +929,11 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, assert(parser->current != NULL); } - if (container->type == NODE_CODE_BLOCK) { + if (container->type == CMARK_NODE_CODE_BLOCK) { add_line(container, &input, parser->offset); - } else if (container->type == NODE_HTML) { + } else if (container->type == CMARK_NODE_HTML) { add_line(container, &input, parser->offset); @@ -974,7 +980,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else if (accepts_lines(container->type)) { - if (container->type == NODE_HEADER && + if (container->type == CMARK_NODE_HEADER && container->as.header.setext == false) { chop_trailing_hashtags(&input); } @@ -982,7 +988,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else { // create paragraph container for line - container = add_child(parser, container, NODE_PARAGRAPH, + container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); add_line(container, &input, parser->first_nonspace); } diff --git a/src/chunk.h b/src/chunk.h index a8a11f6d32..b25831b881 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -49,7 +49,7 @@ static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { } static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, - bufsize_t offset) { + bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); return p ? (bufsize_t)(p - ch->data) : ch->len; @@ -74,8 +74,7 @@ static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { return (char *)str; } -static CMARK_INLINE void -cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { +static CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { if (c->alloc) { free(c->data); } @@ -97,9 +96,8 @@ static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { return c; } -static CMARK_INLINE -cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, - bufsize_t len) { +static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, + bufsize_t pos, bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; } diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c old mode 100755 new mode 100644 index 2f92544489..6e8d620c61 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -9,10 +9,11 @@ /* Binary tree lookup code for entities added by JGM */ -static const unsigned char *S_lookup(int i, int low, int hi, const unsigned char *s, - int len) { +static const unsigned char *S_lookup(int i, int low, int hi, + const unsigned char *s, int len) { int j; - int cmp = strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); + int cmp = + strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); if (cmp == 0 && cmark_entities[i].entity[len] == 0) { return (const unsigned char *)cmark_entities[i].bytes; } else if (cmp < 0 && i > low) { diff --git a/src/inlines.c b/src/inlines.c old mode 100755 new mode 100644 index 3275ddd5b0..38ee0fb66f --- a/src/inlines.c +++ b/src/inlines.c @@ -284,7 +284,7 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, before_char_pos -= 1; } len = cmark_utf8proc_iterate(subj->input.data + before_char_pos, - subj->pos - before_char_pos, &before_char); + subj->pos - before_char_pos, &before_char); if (len == -1) { before_char = 10; } @@ -301,7 +301,7 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, } len = cmark_utf8proc_iterate(subj->input.data + subj->pos, - subj->input.len - subj->pos, &after_char); + subj->input.len - subj->pos, &after_char); if (len == -1) { after_char = 10; } @@ -309,10 +309,10 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, !(cmark_utf8proc_is_punctuation(after_char) && !cmark_utf8proc_is_space(before_char) && !cmark_utf8proc_is_punctuation(before_char)); - right_flanking = - numdelims > 0 && !cmark_utf8proc_is_space(before_char) && - !(cmark_utf8proc_is_punctuation(before_char) && - !cmark_utf8proc_is_space(after_char) && !cmark_utf8proc_is_punctuation(after_char)); + right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) && + !(cmark_utf8proc_is_punctuation(before_char) && + !cmark_utf8proc_is_space(after_char) && + !cmark_utf8proc_is_punctuation(after_char)); if (c == '_') { *can_open = left_flanking && (!right_flanking || cmark_utf8proc_is_punctuation(before_char)); @@ -944,10 +944,10 @@ static cmark_node *handle_newline(subject *subj) { bufsize_t nlpos = subj->pos; // skip over cr, crlf, or lf: if (peek_at(subj, subj->pos) == '\r') { - advance(subj); + advance(subj); } if (peek_at(subj, subj->pos) == '\n') { - advance(subj); + advance(subj); } // skip spaces at beginning of line skip_spaces(subj); diff --git a/src/node.c b/src/node.c index 46d234ab4d..3bb79d719a 100644 --- a/src/node.c +++ b/src/node.c @@ -98,18 +98,18 @@ static void S_free_nodes(cmark_node *e) { cmark_strbuf_free(&e->string_content); } switch (e->type) { - case NODE_CODE_BLOCK: + case CMARK_NODE_CODE_BLOCK: cmark_chunk_free(&e->as.code.info); cmark_chunk_free(&e->as.code.literal); break; - case NODE_TEXT: - case NODE_INLINE_HTML: - case NODE_CODE: - case NODE_HTML: + case CMARK_NODE_TEXT: + case CMARK_NODE_INLINE_HTML: + case CMARK_NODE_CODE: + case CMARK_NODE_HTML: cmark_chunk_free(&e->as.literal); break; - case NODE_LINK: - case NODE_IMAGE: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: cmark_chunk_free(&e->as.link.url); cmark_chunk_free(&e->as.link.title); break; @@ -252,13 +252,13 @@ const char *cmark_node_get_literal(cmark_node *node) { } switch (node->type) { - case NODE_HTML: - case NODE_TEXT: - case NODE_INLINE_HTML: - case NODE_CODE: + case CMARK_NODE_HTML: + case CMARK_NODE_TEXT: + case CMARK_NODE_INLINE_HTML: + case CMARK_NODE_CODE: return cmark_chunk_to_cstr(&node->as.literal); - case NODE_CODE_BLOCK: + case CMARK_NODE_CODE_BLOCK: return cmark_chunk_to_cstr(&node->as.code.literal); default: @@ -274,14 +274,14 @@ int cmark_node_set_literal(cmark_node *node, const char *content) { } switch (node->type) { - case NODE_HTML: - case NODE_TEXT: - case NODE_INLINE_HTML: - case NODE_CODE: + case CMARK_NODE_HTML: + case CMARK_NODE_TEXT: + case CMARK_NODE_INLINE_HTML: + case CMARK_NODE_CODE: cmark_chunk_set_cstr(&node->as.literal, content); return 1; - case NODE_CODE_BLOCK: + case CMARK_NODE_CODE_BLOCK: cmark_chunk_set_cstr(&node->as.code.literal, content); return 1; @@ -438,7 +438,7 @@ const char *cmark_node_get_fence_info(cmark_node *node) { return NULL; } - if (node->type == NODE_CODE_BLOCK) { + if (node->type == CMARK_NODE_CODE_BLOCK) { return cmark_chunk_to_cstr(&node->as.code.info); } else { return NULL; @@ -450,7 +450,7 @@ int cmark_node_set_fence_info(cmark_node *node, const char *info) { return 0; } - if (node->type == NODE_CODE_BLOCK) { + if (node->type == CMARK_NODE_CODE_BLOCK) { cmark_chunk_set_cstr(&node->as.code.info, info); return 1; } else { @@ -464,8 +464,8 @@ const char *cmark_node_get_url(cmark_node *node) { } switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: return cmark_chunk_to_cstr(&node->as.link.url); default: break; @@ -480,8 +480,8 @@ int cmark_node_set_url(cmark_node *node, const char *url) { } switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: cmark_chunk_set_cstr(&node->as.link.url, url); return 1; default: @@ -497,8 +497,8 @@ const char *cmark_node_get_title(cmark_node *node) { } switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: return cmark_chunk_to_cstr(&node->as.link.title); default: break; @@ -513,8 +513,8 @@ int cmark_node_set_title(cmark_node *node, const char *title) { } switch (node->type) { - case NODE_LINK: - case NODE_IMAGE: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: cmark_chunk_set_cstr(&node->as.link.title, title); return 1; default: diff --git a/src/utf8.c b/src/utf8.c old mode 100755 new mode 100644 index 319539dc0a..c29bbf770b --- a/src/utf8.c +++ b/src/utf8.c @@ -107,7 +107,8 @@ static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { return length; } -void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) { +void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, + bufsize_t size) { bufsize_t i = 0; while (i < size) { @@ -146,7 +147,8 @@ void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) } } -int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) { +int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, + int32_t *dst) { int length; int32_t uc = -1; @@ -222,7 +224,8 @@ void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { cmark_strbuf_put(buf, dst, len); } -void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) { +void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, + bufsize_t len) { int32_t c; #define bufpush(x) cmark_utf8proc_encode_char(x, dest) diff --git a/src/utf8.h b/src/utf8.h old mode 100755 new mode 100644 index 43b37575ed..8e45714d4a --- a/src/utf8.h +++ b/src/utf8.h @@ -8,10 +8,12 @@ extern "C" { #endif -void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len); +void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, + bufsize_t len); void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); -void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line, bufsize_t size); +void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line, + bufsize_t size); int cmark_utf8proc_is_space(int32_t uc); int cmark_utf8proc_is_punctuation(int32_t uc); -- cgit 0.0.5-2-1-g0f52 From 02d6b66768f1e3204ec6efb116f462f571972d17 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 12:15:09 -0800 Subject: Removed outdated targets from Makefile. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 87d210384d..83fe7b217c 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local CLANG_CHECK?=clang-check -.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench format update-spec afl clang-check +.PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive bench format update-spec afl clang-check all: cmake_build man/man3/cmark.3 -- cgit 0.0.5-2-1-g0f52 From 70545251f4d1685a600e8eeb7b78eea430613b94 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 12:17:57 -0800 Subject: Removed need for sudo in make bench. --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 83fe7b217c..db23b58c3b 100644 --- a/Makefile +++ b/Makefile @@ -160,9 +160,10 @@ $(BENCHDIR)/benchinput.md: progit cat progit/$$lang/*/*.markdown >> $@; \ done +# for more accurate results, run with +# sudo renice -10 $$; make bench bench: $(BENCHFILE) - { sudo renice -10 $$$$; \ - for x in `seq 1 $(NUMRUNS)` ; do \ + { for x in `seq 1 $(NUMRUNS)` ; do \ /usr/bin/env time -p $(PROG) /dev/null ; \ /usr/bin/env time -p $(PROG) $< >/dev/null ; \ done \ -- cgit 0.0.5-2-1-g0f52 From 00ae2c61a47e09bb7643f0a7153c2009b7537e09 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 15:26:18 -0800 Subject: Added RAW_BLOCK and RAW_INLINE node types. These are passed through verbatim by all writers, with no escaping. They are never generated by the parser, and do not correspond to CommonMark elements. They are designed to be inserted by filters that postprocess the AST. For example, a filter might convert specially marked code blocks to svg diagrams in HTML and tikz diagrams in LaTeX, passing these through to the renderer as a RAW_BLOCK. --- man/man3/cmark.3 | 15 +++++++++------ src/cmark.h | 6 ++++++ src/commonmark.c | 2 ++ src/html.c | 10 ++++++++++ src/latex.c | 10 ++++++++++ src/man.c | 10 ++++++++++ src/node.c | 4 ++++ src/xml.c | 2 ++ 8 files changed, 53 insertions(+), 6 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 26c0d89db5..9fa8d6e1cb 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "October 28, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "December 19, 2015" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -28,8 +28,8 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller\[cq]s responsibility -to assign. +other required properties, which it is the caller's responsibility to +assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -112,6 +112,8 @@ are nodes of type: .IP \[bu] 2 CMARK_NODE_HTML .IP \[bu] 2 +CMARK_NODE_RAW_BLOCK +.IP \[bu] 2 CMARK_NODE_HRULE .IP \[bu] 2 CMARK_NODE_CODE_BLOCK @@ -125,6 +127,8 @@ CMARK_NODE_LINEBREAK CMARK_NODE_CODE .IP \[bu] 2 CMARK_NODE_INLINE_HTML +.IP \[bu] 2 +CMARK_NODE_RAW_INLINE .PP Nodes must only be modified after an \f[C]EXIT\f[] event, or an \f[C]ENTER\f[] event for leaf nodes. @@ -285,8 +289,7 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on -failure. +Sets the "tightness" of a list. Returns 1 on success, 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -554,7 +557,7 @@ Normalize tree by consolidating adjacent text nodes. .fi .PP -Convert straight quotes to curly, \[em] to em dashes, \[en] to en +Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en dashes. .PP diff --git a/src/cmark.h b/src/cmark.h index 79bfbc5b15..612440f8ae 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -40,6 +40,7 @@ typedef enum { CMARK_NODE_ITEM, CMARK_NODE_CODE_BLOCK, CMARK_NODE_HTML, + CMARK_NODE_RAW_BLOCK, CMARK_NODE_PARAGRAPH, CMARK_NODE_HEADER, CMARK_NODE_HRULE, @@ -53,6 +54,7 @@ typedef enum { CMARK_NODE_LINEBREAK, CMARK_NODE_CODE, CMARK_NODE_INLINE_HTML, + CMARK_NODE_RAW_INLINE, CMARK_NODE_EMPH, CMARK_NODE_STRONG, CMARK_NODE_LINK, @@ -158,6 +160,7 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * of type: * * * CMARK_NODE_HTML + * * CMARK_NODE_RAW_BLOCK * * CMARK_NODE_HRULE * * CMARK_NODE_CODE_BLOCK * * CMARK_NODE_TEXT @@ -165,6 +168,7 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * * CMARK_NODE_LINEBREAK * * CMARK_NODE_CODE * * CMARK_NODE_INLINE_HTML + * * CMARK_NODE_RAW_INLINE * * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for * leaf nodes. @@ -514,6 +518,7 @@ const char *cmark_version_string(); #define NODE_ITEM CMARK_NODE_ITEM #define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK #define NODE_HTML CMARK_NODE_HTML +#define NODE_RAW_BLOCK CMARK_NODE_RAW_BLOCK #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH #define NODE_HEADER CMARK_NODE_HEADER #define NODE_HRULE CMARK_NODE_HRULE @@ -522,6 +527,7 @@ const char *cmark_version_string(); #define NODE_LINEBREAK CMARK_NODE_LINEBREAK #define NODE_CODE CMARK_NODE_CODE #define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML +#define NODE_RAW_INLINE CMARK_NODE_RAW_INLINE #define NODE_EMPH CMARK_NODE_EMPH #define NODE_STRONG CMARK_NODE_STRONG #define NODE_LINK CMARK_NODE_LINK diff --git a/src/commonmark.c b/src/commonmark.c index cbf99c1b48..32b09a127a 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -280,6 +280,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_HTML: + case CMARK_NODE_RAW_BLOCK: BLANKLINE(); OUT(cmark_node_get_literal(node), false, LITERAL); BLANKLINE(); @@ -336,6 +337,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_INLINE_HTML: + case CMARK_NODE_RAW_INLINE: OUT(cmark_node_get_literal(node), false, LITERAL); break; diff --git a/src/html.c b/src/html.c index dfe2aec8ff..4fa44379bc 100644 --- a/src/html.c +++ b/src/html.c @@ -176,6 +176,12 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, cr(html); break; + case CMARK_NODE_RAW_BLOCK: + cr(html); + cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + cr(html); + break; + case CMARK_NODE_HRULE: cr(html); cmark_strbuf_puts(html, "as.literal.data, node->as.literal.len); + break; + case CMARK_NODE_STRONG: if (entering) { cmark_strbuf_puts(html, ""); diff --git a/src/latex.c b/src/latex.c index 146062e20c..e7cb9f7aa9 100644 --- a/src/latex.c +++ b/src/latex.c @@ -303,6 +303,12 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_HTML: break; + case CMARK_NODE_RAW_BLOCK: + CR(); + OUT(cmark_node_get_literal(node), false, LITERAL); + CR(); + break; + case CMARK_NODE_HRULE: BLANKLINE(); LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}"); @@ -341,6 +347,10 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_INLINE_HTML: break; + case CMARK_NODE_RAW_INLINE: + OUT(cmark_node_get_literal(node), false, LITERAL); + break; + case CMARK_NODE_STRONG: if (entering) { LIT("\\textbf{"); diff --git a/src/man.c b/src/man.c index 8e3913e9bc..a1ea6e4421 100644 --- a/src/man.c +++ b/src/man.c @@ -142,6 +142,12 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_HTML: break; + case CMARK_NODE_RAW_BLOCK: + CR(); + OUT(cmark_node_get_literal(node), false, LITERAL); + CR(); + break; + case CMARK_NODE_HRULE: CR(); LIT(".PP\n * * * * *"); @@ -190,6 +196,10 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_INLINE_HTML: break; + case CMARK_NODE_RAW_INLINE: + OUT(cmark_node_get_literal(node), false, LITERAL); + break; + case CMARK_NODE_STRONG: if (entering) { LIT("\\f[B]"); diff --git a/src/node.c b/src/node.c index 3bb79d719a..4c5f474723 100644 --- a/src/node.c +++ b/src/node.c @@ -161,6 +161,8 @@ const char *cmark_node_get_type_string(cmark_node *node) { return "code_block"; case CMARK_NODE_HTML: return "html"; + case CMARK_NODE_RAW_BLOCK: + return "raw_block"; case CMARK_NODE_PARAGRAPH: return "paragraph"; case CMARK_NODE_HEADER: @@ -177,6 +179,8 @@ const char *cmark_node_get_type_string(cmark_node *node) { return "code"; case CMARK_NODE_INLINE_HTML: return "inline_html"; + case CMARK_NODE_RAW_INLINE: + return "raw_inline"; case CMARK_NODE_EMPH: return "emph"; case CMARK_NODE_STRONG: diff --git a/src/xml.c b/src/xml.c index 4885d0aa03..2b7e645bc3 100644 --- a/src/xml.c +++ b/src/xml.c @@ -53,7 +53,9 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: case CMARK_NODE_CODE: case CMARK_NODE_HTML: + case CMARK_NODE_RAW_BLOCK: case CMARK_NODE_INLINE_HTML: + case CMARK_NODE_RAW_INLINE: cmark_strbuf_puts(xml, ">"); escape_xml(xml, node->as.literal.data, node->as.literal.len); cmark_strbuf_puts(xml, " Date: Sat, 19 Dec 2015 17:20:40 -0800 Subject: Improved benchmark. Use longer test. --- Makefile | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index db23b58c3b..cda0dd4695 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,6 @@ ALLTESTS=alltests.md NUMRUNS?=10 CMARK=$(BUILDDIR)/src/cmark PROG?=$(CMARK) -BENCHINP?=README.md VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local @@ -154,26 +153,28 @@ fuzztest: progit: git clone https://github.com/progit/progit.git -$(BENCHDIR)/benchinput.md: progit +$(BENCHFILE): progit echo "" > $@ for lang in ar az be ca cs de en eo es es-ni fa fi fr hi hu id it ja ko mk nl no-nb pl pt-br ro ru sr th tr uk vi zh zh-tw; do \ - cat progit/$$lang/*/*.markdown >> $@; \ + for i in `seq 1 10`; do \ + cat progit/$$lang/*/*.markdown >> $@; \ + done; \ done # for more accurate results, run with # sudo renice -10 $$; make bench bench: $(BENCHFILE) { for x in `seq 1 $(NUMRUNS)` ; do \ - /usr/bin/env time -p $(PROG) /dev/null ; \ - /usr/bin/env time -p $(PROG) $< >/dev/null ; \ - done \ + /usr/bin/env time -p $(PROG) /dev/null ; \ + /usr/bin/env time -p $(PROG) $< >/dev/null ; \ + done \ } 2>&1 | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py' format: clang-format -style llvm -i src/*.c src/*.h operf: $(CMARK) - operf $< < $(BENCHINP) > /dev/null + operf $< < $(BENCHFILE) > /dev/null distclean: clean -rm -rf *.dSYM -- cgit 0.0.5-2-1-g0f52 From a8f26243b483f85f87f4f46b8c3b4734aa2113a4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 17:52:43 -0800 Subject: Removed bench.h and timing calls in main.c --- src/CMakeLists.txt | 1 - src/bench.h | 27 --------------------------- src/main.c | 9 --------- 3 files changed, 37 deletions(-) delete mode 100644 src/bench.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f3e987737e..814591e6c3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,7 +9,6 @@ set(HEADERS iterator.h chunk.h references.h - bench.h utf8.h scanners.h inlines.h diff --git a/src/bench.h b/src/bench.h deleted file mode 100644 index 744dea3d6f..0000000000 --- a/src/bench.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef CMARK_BENCH_H -#define CMARK_BENCH_H - -#include -#include - -#ifdef TIMER -float _cmark_start_time; -float _cmark_end_time; -float _cmark_save_time; - -#define start_timer() \ - _cmark_save_time = _cmark_start_time; \ - _cmark_start_time = (float)clock() / CLOCKS_PER_SEC - -#define end_timer(M) \ - _cmark_end_time = (float)clock() / CLOCKS_PER_SEC; \ - fprintf(stderr, "[TIME] (%s:%d) %4.f ns " M "\n", __FILE__, __LINE__, \ - (_cmark_end_time - _cmark_start_time) * 1000000); \ - _cmark_start_time = _cmark_save_time; - -#else -#define start_timer() -#define end_timer(M) -#endif - -#endif diff --git a/src/main.c b/src/main.c index 239d7938ea..f9fa29c523 100644 --- a/src/main.c +++ b/src/main.c @@ -4,7 +4,6 @@ #include #include "config.h" #include "cmark.h" -#include "bench.h" #if defined(_WIN32) && !defined(__CYGWIN__) #include @@ -153,14 +152,12 @@ int main(int argc, char *argv[]) { exit(1); } - start_timer(); while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { cmark_parser_feed(parser, buffer, bytes); if (bytes < sizeof(buffer)) { break; } } - end_timer("processing lines"); fclose(fp); } @@ -175,18 +172,12 @@ int main(int argc, char *argv[]) { } } - start_timer(); document = cmark_parser_finish(parser); - end_timer("finishing document"); cmark_parser_free(parser); - start_timer(); print_document(document, writer, options, width); - end_timer("print_document"); - start_timer(); cmark_node_free(document); - end_timer("free_blocks"); free(files); -- cgit 0.0.5-2-1-g0f52 From 774ac507fc7e86c6fe0d7b16a3c1abaed4849fab Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 20:50:37 -0800 Subject: Rename RAW_BLOCK -> CUSTOM_BLOCK, RAW_INLINE -> CUSTOM_INLINE. --- man/man3/cmark.3 | 4 ++-- src/cmark.h | 12 ++++++------ src/commonmark.c | 4 ++-- src/html.c | 4 ++-- src/latex.c | 4 ++-- src/man.c | 4 ++-- src/node.c | 4 ++-- src/xml.c | 4 ++-- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 9fa8d6e1cb..2f79781b3f 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -112,7 +112,7 @@ are nodes of type: .IP \[bu] 2 CMARK_NODE_HTML .IP \[bu] 2 -CMARK_NODE_RAW_BLOCK +CMARK_NODE_CUSTOM_BLOCK .IP \[bu] 2 CMARK_NODE_HRULE .IP \[bu] 2 @@ -128,7 +128,7 @@ CMARK_NODE_CODE .IP \[bu] 2 CMARK_NODE_INLINE_HTML .IP \[bu] 2 -CMARK_NODE_RAW_INLINE +CMARK_NODE_CUSTOM_INLINE .PP Nodes must only be modified after an \f[C]EXIT\f[] event, or an \f[C]ENTER\f[] event for leaf nodes. diff --git a/src/cmark.h b/src/cmark.h index 612440f8ae..be5eaadc22 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -40,7 +40,7 @@ typedef enum { CMARK_NODE_ITEM, CMARK_NODE_CODE_BLOCK, CMARK_NODE_HTML, - CMARK_NODE_RAW_BLOCK, + CMARK_NODE_CUSTOM_BLOCK, CMARK_NODE_PARAGRAPH, CMARK_NODE_HEADER, CMARK_NODE_HRULE, @@ -54,7 +54,7 @@ typedef enum { CMARK_NODE_LINEBREAK, CMARK_NODE_CODE, CMARK_NODE_INLINE_HTML, - CMARK_NODE_RAW_INLINE, + CMARK_NODE_CUSTOM_INLINE, CMARK_NODE_EMPH, CMARK_NODE_STRONG, CMARK_NODE_LINK, @@ -160,7 +160,7 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * of type: * * * CMARK_NODE_HTML - * * CMARK_NODE_RAW_BLOCK + * * CMARK_NODE_CUSTOM_BLOCK * * CMARK_NODE_HRULE * * CMARK_NODE_CODE_BLOCK * * CMARK_NODE_TEXT @@ -168,7 +168,7 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * * CMARK_NODE_LINEBREAK * * CMARK_NODE_CODE * * CMARK_NODE_INLINE_HTML - * * CMARK_NODE_RAW_INLINE + * * CMARK_NODE_CUSTOM_INLINE * * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for * leaf nodes. @@ -518,7 +518,7 @@ const char *cmark_version_string(); #define NODE_ITEM CMARK_NODE_ITEM #define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK #define NODE_HTML CMARK_NODE_HTML -#define NODE_RAW_BLOCK CMARK_NODE_RAW_BLOCK +#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH #define NODE_HEADER CMARK_NODE_HEADER #define NODE_HRULE CMARK_NODE_HRULE @@ -527,7 +527,7 @@ const char *cmark_version_string(); #define NODE_LINEBREAK CMARK_NODE_LINEBREAK #define NODE_CODE CMARK_NODE_CODE #define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML -#define NODE_RAW_INLINE CMARK_NODE_RAW_INLINE +#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE #define NODE_EMPH CMARK_NODE_EMPH #define NODE_STRONG CMARK_NODE_STRONG #define NODE_LINK CMARK_NODE_LINK diff --git a/src/commonmark.c b/src/commonmark.c index 32b09a127a..4fbe9fd839 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -280,7 +280,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_HTML: - case CMARK_NODE_RAW_BLOCK: + case CMARK_NODE_CUSTOM_BLOCK: BLANKLINE(); OUT(cmark_node_get_literal(node), false, LITERAL); BLANKLINE(); @@ -337,7 +337,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_INLINE_HTML: - case CMARK_NODE_RAW_INLINE: + case CMARK_NODE_CUSTOM_INLINE: OUT(cmark_node_get_literal(node), false, LITERAL); break; diff --git a/src/html.c b/src/html.c index 4fa44379bc..0e4f69fcf1 100644 --- a/src/html.c +++ b/src/html.c @@ -176,7 +176,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, cr(html); break; - case CMARK_NODE_RAW_BLOCK: + case CMARK_NODE_CUSTOM_BLOCK: cr(html); cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); cr(html); @@ -239,7 +239,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, } break; - case CMARK_NODE_RAW_INLINE: + case CMARK_NODE_CUSTOM_INLINE: cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); break; diff --git a/src/latex.c b/src/latex.c index e7cb9f7aa9..b6197ecc36 100644 --- a/src/latex.c +++ b/src/latex.c @@ -303,7 +303,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_HTML: break; - case CMARK_NODE_RAW_BLOCK: + case CMARK_NODE_CUSTOM_BLOCK: CR(); OUT(cmark_node_get_literal(node), false, LITERAL); CR(); @@ -347,7 +347,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_INLINE_HTML: break; - case CMARK_NODE_RAW_INLINE: + case CMARK_NODE_CUSTOM_INLINE: OUT(cmark_node_get_literal(node), false, LITERAL); break; diff --git a/src/man.c b/src/man.c index a1ea6e4421..d8dc0bf4cb 100644 --- a/src/man.c +++ b/src/man.c @@ -142,7 +142,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_HTML: break; - case CMARK_NODE_RAW_BLOCK: + case CMARK_NODE_CUSTOM_BLOCK: CR(); OUT(cmark_node_get_literal(node), false, LITERAL); CR(); @@ -196,7 +196,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_INLINE_HTML: break; - case CMARK_NODE_RAW_INLINE: + case CMARK_NODE_CUSTOM_INLINE: OUT(cmark_node_get_literal(node), false, LITERAL); break; diff --git a/src/node.c b/src/node.c index 4c5f474723..10cd99d747 100644 --- a/src/node.c +++ b/src/node.c @@ -161,7 +161,7 @@ const char *cmark_node_get_type_string(cmark_node *node) { return "code_block"; case CMARK_NODE_HTML: return "html"; - case CMARK_NODE_RAW_BLOCK: + case CMARK_NODE_CUSTOM_BLOCK: return "raw_block"; case CMARK_NODE_PARAGRAPH: return "paragraph"; @@ -179,7 +179,7 @@ const char *cmark_node_get_type_string(cmark_node *node) { return "code"; case CMARK_NODE_INLINE_HTML: return "inline_html"; - case CMARK_NODE_RAW_INLINE: + case CMARK_NODE_CUSTOM_INLINE: return "raw_inline"; case CMARK_NODE_EMPH: return "emph"; diff --git a/src/xml.c b/src/xml.c index 2b7e645bc3..093e6ca453 100644 --- a/src/xml.c +++ b/src/xml.c @@ -53,9 +53,9 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: case CMARK_NODE_CODE: case CMARK_NODE_HTML: - case CMARK_NODE_RAW_BLOCK: + case CMARK_NODE_CUSTOM_BLOCK: case CMARK_NODE_INLINE_HTML: - case CMARK_NODE_RAW_INLINE: + case CMARK_NODE_CUSTOM_INLINE: cmark_strbuf_puts(xml, ">"); escape_xml(xml, node->as.literal.data, node->as.literal.len); cmark_strbuf_puts(xml, " Date: Sat, 19 Dec 2015 21:15:43 -0800 Subject: Changed API for CUSTOM_BLOCK and CUSTOM_INLINE. Instead of using their `as.literal` content, we now give each custom node *two* literal fields, one to be printed on entering the node (before rendering the children, if any), the other on exiting (after rendering children). This gives us the flexibility to have custom nodes with children. --- man/man3/cmark.3 | 34 +++++++++++++++++++++++---- src/cmark.h | 25 ++++++++++++++++++-- src/commonmark.c | 12 ++++++++-- src/html.c | 10 ++++++-- src/latex.c | 6 +++-- src/man.c | 6 +++-- src/node.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/node.h | 6 +++++ src/xml.c | 11 +++++++-- 9 files changed, 165 insertions(+), 16 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 2f79781b3f..9754e78821 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -112,8 +112,6 @@ are nodes of type: .IP \[bu] 2 CMARK_NODE_HTML .IP \[bu] 2 -CMARK_NODE_CUSTOM_BLOCK -.IP \[bu] 2 CMARK_NODE_HRULE .IP \[bu] 2 CMARK_NODE_CODE_BLOCK @@ -127,8 +125,6 @@ CMARK_NODE_LINEBREAK CMARK_NODE_CODE .IP \[bu] 2 CMARK_NODE_INLINE_HTML -.IP \[bu] 2 -CMARK_NODE_CUSTOM_INLINE .PP Nodes must only be modified after an \f[C]EXIT\f[] event, or an \f[C]ENTER\f[] event for leaf nodes. @@ -330,6 +326,36 @@ Gets the title of a link or image \f[I]node\f[], or NULL if none. Sets the title of a link or image \f[I]node\f[]. Returns 1 on success, 0 on failure. +.PP +\fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) + +.PP +Gets the literal "on enter" text for a custom \f[I]node\f[], or NULL if +none. + +.PP +\fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) + +.PP +Sets the literal text to render "on enter" for a custom \f[I]node\f[]. +Any children of the node will be rendered after this text. Returns 1 on +success 0 on failure. + +.PP +\fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) + +.PP +Gets the literal "on exit" text for a custom \f[I]node\f[], or NULL if +none. + +.PP +\fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) + +.PP +Sets the literal text to render "on exit" for a custom \f[I]node\f[]. +Any children of the node will be rendered before this text. Returns 1 on +success 0 on failure. + .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) diff --git a/src/cmark.h b/src/cmark.h index be5eaadc22..58839d32fc 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -160,7 +160,6 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * of type: * * * CMARK_NODE_HTML - * * CMARK_NODE_CUSTOM_BLOCK * * CMARK_NODE_HRULE * * CMARK_NODE_CODE_BLOCK * * CMARK_NODE_TEXT @@ -168,7 +167,6 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * * CMARK_NODE_LINEBREAK * * CMARK_NODE_CODE * * CMARK_NODE_INLINE_HTML - * * CMARK_NODE_CUSTOM_INLINE * * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for * leaf nodes. @@ -319,6 +317,29 @@ CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); */ CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); +/** Gets the literal "on enter" text for a custom 'node', or + NULL if none. + */ +CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); + +/** Sets the literal text to render "on enter" for a custom 'node'. + Any children of the node will be rendered after this text. + Returns 1 on success 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node, + const char *on_enter); + +/** Gets the literal "on exit" text for a custom 'node', or + NULL if none. + */ +CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node); + +/** Sets the literal text to render "on exit" for a custom 'node'. + Any children of the node will be rendered before this text. + Returns 1 on success 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit); + /** Returns the line on which 'node' begins. */ CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node); diff --git a/src/commonmark.c b/src/commonmark.c index 4fbe9fd839..635794c0b8 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -280,9 +280,13 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_HTML: + OUT(cmark_node_get_literal(node), false, LITERAL); + break; + case CMARK_NODE_CUSTOM_BLOCK: BLANKLINE(); - OUT(cmark_node_get_literal(node), false, LITERAL); + OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), + false, LITERAL); BLANKLINE(); break; @@ -337,10 +341,14 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_INLINE_HTML: - case CMARK_NODE_CUSTOM_INLINE: OUT(cmark_node_get_literal(node), false, LITERAL); break; + case CMARK_NODE_CUSTOM_INLINE: + OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), + false, LITERAL); + break; + case CMARK_NODE_STRONG: if (entering) { LIT("**"); diff --git a/src/html.c b/src/html.c index 0e4f69fcf1..4428fa44dd 100644 --- a/src/html.c +++ b/src/html.c @@ -178,7 +178,10 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CUSTOM_BLOCK: cr(html); - cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + cmark_strbuf_put( + html, (const unsigned char *)(entering ? cmark_node_get_on_enter(node) + : cmark_node_get_on_exit(node)), + node->as.literal.len); cr(html); break; @@ -240,7 +243,10 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_CUSTOM_INLINE: - cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + cmark_strbuf_put( + html, (const unsigned char *)(entering ? cmark_node_get_on_enter(node) + : cmark_node_get_on_exit(node)), + node->as.literal.len); break; case CMARK_NODE_STRONG: diff --git a/src/latex.c b/src/latex.c index b6197ecc36..d0c5a9c50b 100644 --- a/src/latex.c +++ b/src/latex.c @@ -305,7 +305,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_CUSTOM_BLOCK: CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); + OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), + false, LITERAL); CR(); break; @@ -348,7 +349,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_CUSTOM_INLINE: - OUT(cmark_node_get_literal(node), false, LITERAL); + OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), + false, LITERAL); break; case CMARK_NODE_STRONG: diff --git a/src/man.c b/src/man.c index d8dc0bf4cb..941a06cfbd 100644 --- a/src/man.c +++ b/src/man.c @@ -144,7 +144,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_CUSTOM_BLOCK: CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); + OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), + false, LITERAL); CR(); break; @@ -197,7 +198,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_CUSTOM_INLINE: - OUT(cmark_node_get_literal(node), false, LITERAL); + OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), + false, LITERAL); break; case CMARK_NODE_STRONG: diff --git a/src/node.c b/src/node.c index 10cd99d747..6c82a53c73 100644 --- a/src/node.c +++ b/src/node.c @@ -113,6 +113,11 @@ static void S_free_nodes(cmark_node *e) { cmark_chunk_free(&e->as.link.url); cmark_chunk_free(&e->as.link.title); break; + case CMARK_NODE_CUSTOM_BLOCK: + case CMARK_NODE_CUSTOM_INLINE: + cmark_chunk_free(&e->as.custom.on_enter); + cmark_chunk_free(&e->as.custom.on_exit); + break; default: break; } @@ -528,6 +533,72 @@ int cmark_node_set_title(cmark_node *node, const char *title) { return 0; } +const char *cmark_node_get_on_enter(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + return cmark_chunk_to_cstr(&node->as.custom.on_enter); + default: + break; + } + + return NULL; +} + +int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + cmark_chunk_set_cstr(&node->as.custom.on_enter, on_enter); + return 1; + default: + break; + } + + return 0; +} + +const char *cmark_node_get_on_exit(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + return cmark_chunk_to_cstr(&node->as.custom.on_exit); + default: + break; + } + + return NULL; +} + +int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + cmark_chunk_set_cstr(&node->as.custom.on_exit, on_exit); + return 1; + default: + break; + } + + return 0; +} + int cmark_node_get_start_line(cmark_node *node) { if (node == NULL) { return 0; diff --git a/src/node.h b/src/node.h index 48d12dfe99..cc93d23f60 100644 --- a/src/node.h +++ b/src/node.h @@ -42,6 +42,11 @@ typedef struct { cmark_chunk title; } cmark_link; +typedef struct { + cmark_chunk on_enter; + cmark_chunk on_exit; +} cmark_custom; + struct cmark_node { struct cmark_node *next; struct cmark_node *prev; @@ -69,6 +74,7 @@ struct cmark_node { cmark_code code; cmark_header header; cmark_link link; + cmark_custom custom; int html_block_type; } as; }; diff --git a/src/xml.c b/src/xml.c index 093e6ca453..d603ed1f2f 100644 --- a/src/xml.c +++ b/src/xml.c @@ -53,9 +53,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_TEXT: case CMARK_NODE_CODE: case CMARK_NODE_HTML: - case CMARK_NODE_CUSTOM_BLOCK: case CMARK_NODE_INLINE_HTML: - case CMARK_NODE_CUSTOM_INLINE: cmark_strbuf_puts(xml, ">"); escape_xml(xml, node->as.literal.data, node->as.literal.len); cmark_strbuf_puts(xml, "as.custom.on_enter.data, node->as.custom.on_enter.len); + cmark_strbuf_putc(xml, '"'); + cmark_strbuf_puts(xml, " on_exit=\""); + escape_xml(xml, node->as.custom.on_exit.data, node->as.custom.on_exit.len); + cmark_strbuf_putc(xml, '"'); + break; case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: cmark_strbuf_puts(xml, " destination=\""); -- cgit 0.0.5-2-1-g0f52 From 384f06dcbc5e904f5b5048f3cca0c030cee6ddc6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 21:46:05 -0800 Subject: Updated API docs; getters return empty strings if not set. rather than NULL, as previously documented... --- man/man3/cmark.3 | 19 +++++++++++-------- src/cmark.h | 19 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 9754e78821..817c2e9434 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -210,7 +210,8 @@ of the type, or \f[C]""\f[]. \fIconst char *\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[]) .PP -Returns the string contents of \f[I]node\f[], or NULL if none. +Returns the string contents of \f[I]node\f[], or an empty string if none +is set. .PP \fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[]) @@ -291,7 +292,7 @@ Sets the "tightness" of a list. Returns 1 on success, 0 on failure. \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) .PP -Returns the info string from a fenced code block, or NULL if none. +Returns the info string from a fenced code block. .PP \fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[]) @@ -304,7 +305,8 @@ Sets the info string in a fenced code block, returning 1 on success and \fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[]) .PP -Gets the URL of a link or image \f[I]node\f[], or NULL if none. +Returns the URL of a link or image \f[I]node\f[], or an empty string if +no URL is set. .PP \fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[]) @@ -317,7 +319,8 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[]) .PP -Gets the title of a link or image \f[I]node\f[], or NULL if none. +Returns the title of a link or image \f[I]node\f[], or an empty string +if no title is set. .PP \fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[]) @@ -330,8 +333,8 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Gets the literal "on enter" text for a custom \f[I]node\f[], or NULL if -none. +Returns the literal "on enter" text for a custom \f[I]node\f[], or an +empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) @@ -345,8 +348,8 @@ success 0 on failure. \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Gets the literal "on exit" text for a custom \f[I]node\f[], or NULL if -none. +Returns the literal "on exit" text for a custom \f[I]node\f[], or an +empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) diff --git a/src/cmark.h b/src/cmark.h index 58839d32fc..ae00e8601b 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -235,7 +235,8 @@ CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node); CMARK_EXPORT const char *cmark_node_get_type_string(cmark_node *node); -/** Returns the string contents of 'node', or NULL if none. +/** Returns the string contents of 'node', or an empty + string if none is set. */ CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node); @@ -290,7 +291,7 @@ CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node); */ CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight); -/** Returns the info string from a fenced code block, or NULL if none. +/** Returns the info string from a fenced code block. */ CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); @@ -299,7 +300,8 @@ CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); */ CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info); -/** Gets the URL of a link or image 'node', or NULL if none. +/** Returns the URL of a link or image 'node', or an empty string + if no URL is set. */ CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); @@ -308,7 +310,8 @@ CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); */ CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url); -/** Gets the title of a link or image 'node', or NULL if none. +/** Returns the title of a link or image 'node', or an empty + string if no title is set. */ CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); @@ -317,8 +320,8 @@ CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); */ CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); -/** Gets the literal "on enter" text for a custom 'node', or - NULL if none. +/** Returns the literal "on enter" text for a custom 'node', or + an empty string if no on_enter is set. */ CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); @@ -329,8 +332,8 @@ CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node, const char *on_enter); -/** Gets the literal "on exit" text for a custom 'node', or - NULL if none. +/** Returns the literal "on exit" text for a custom 'node', or + an empty string if no on_exit is set. */ CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node); -- cgit 0.0.5-2-1-g0f52 From 555dd2da77914d6120b55b64908c59053d1596ec Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 21:58:50 -0800 Subject: Fixed S_can_contain to allow custom nodes to have children. --- src/node.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/node.c b/src/node.c index 6c82a53c73..8b358ce4c8 100644 --- a/src/node.c +++ b/src/node.c @@ -46,6 +46,7 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { case CMARK_NODE_DOCUMENT: case CMARK_NODE_BLOCK_QUOTE: case CMARK_NODE_ITEM: + case CMARK_NODE_CUSTOM_BLOCK: return S_is_block(child) && child->type != CMARK_NODE_ITEM; case CMARK_NODE_LIST: @@ -57,6 +58,7 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { case CMARK_NODE_STRONG: case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: + case CMARK_NODE_CUSTOM_INLINE: return S_is_inline(child); default: -- cgit 0.0.5-2-1-g0f52 From a1d74c440b79d13047091b6c10cc0188f758d3ff Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 21:59:09 -0800 Subject: Fixed bug in html renderer for custom nodes. --- src/html.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/html.c b/src/html.c index 4428fa44dd..8daf5743ac 100644 --- a/src/html.c +++ b/src/html.c @@ -178,10 +178,13 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CUSTOM_BLOCK: cr(html); - cmark_strbuf_put( - html, (const unsigned char *)(entering ? cmark_node_get_on_enter(node) - : cmark_node_get_on_exit(node)), - node->as.literal.len); + if (entering) { + cmark_strbuf_put(html, node->as.custom.on_enter.data, + node->as.custom.on_enter.len); + } else { + cmark_strbuf_put(html, node->as.custom.on_exit.data, + node->as.custom.on_exit.len); + } cr(html); break; @@ -243,10 +246,13 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_CUSTOM_INLINE: - cmark_strbuf_put( - html, (const unsigned char *)(entering ? cmark_node_get_on_enter(node) - : cmark_node_get_on_exit(node)), - node->as.literal.len); + if (entering) { + cmark_strbuf_put(html, node->as.custom.on_enter.data, + node->as.custom.on_enter.len); + } else { + cmark_strbuf_put(html, node->as.custom.on_exit.data, + node->as.custom.on_exit.len); + } break; case CMARK_NODE_STRONG: -- cgit 0.0.5-2-1-g0f52 From b8a916fbe14fa51abaeb325390a3a177a4561a71 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Dec 2015 21:59:20 -0800 Subject: Added api_tests for custom nodes. --- api_test/main.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index bcfbb6db3e..03a7b1b21e 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -445,6 +445,47 @@ create_tree(test_batch_runner *runner) cmark_node_free(emph); } +static void +custom_nodes(test_batch_runner *runner) +{ + char *html; + char *man; + cmark_node *doc = cmark_node_new(CMARK_NODE_DOCUMENT); + cmark_node *p = cmark_node_new(CMARK_NODE_PARAGRAPH); + cmark_node_append_child(doc, p); + cmark_node *ci = cmark_node_new(CMARK_NODE_CUSTOM_INLINE); + cmark_node *str1 = cmark_node_new(CMARK_NODE_TEXT); + cmark_node_set_literal(str1, "Hello"); + OK(runner, cmark_node_append_child(ci, str1), "append1"); + OK(runner, cmark_node_set_on_enter(ci, ""), + "set_on_exit"); + STR_EQ(runner, cmark_node_get_on_enter(ci), "", + "get_on_exit"); + cmark_node_append_child(p, ci); + cmark_node *cb = cmark_node_new(CMARK_NODE_CUSTOM_BLOCK); + cmark_node_set_on_enter(cb, "

                                \n\n Date: Sat, 19 Dec 2015 23:27:15 -0800 Subject: Commonmark renderer: ensure html blocks surrounded by blanks. Otherwise we get failures of roundtrip tests. --- src/commonmark.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index 635794c0b8..7dabbc389a 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -280,7 +280,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_HTML: + BLANKLINE(); OUT(cmark_node_get_literal(node), false, LITERAL); + BLANKLINE(); break; case CMARK_NODE_CUSTOM_BLOCK: -- cgit 0.0.5-2-1-g0f52 From 168f8666d4bad5d50ba5bf5a787a28b236754917 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 20 Dec 2015 00:01:12 -0800 Subject: Made roundtrip test part of the test suite run by cmake. --- .travis.yml | 5 ----- Makefile | 3 --- test/CMakeLists.txt | 11 +++++++++++ test/roundtrip.bat | 1 + test/roundtrip.sh | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) create mode 100755 test/roundtrip.bat diff --git a/.travis.yml b/.travis.yml index 25c3ec14de..059a53d5e5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,11 +26,6 @@ before_install: script: - make - make test - - | - if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] - then - make roundtrip_test - fi - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] then diff --git a/Makefile b/Makefile index cda0dd4695..c16ee0575f 100644 --- a/Makefile +++ b/Makefile @@ -128,9 +128,6 @@ update-spec: test: $(SPEC) cmake_build make -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) -roundtrip_test: $(SPEC) cmake_build - python3 test/spec_tests.py --spec $< --prog test/roundtrip.sh - $(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]))' > $@ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 164fba1bda..d537ab514b 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,6 +16,9 @@ if (WIN32) set_tests_properties(api_test PROPERTIES ENVIRONMENT "PATH=${WIN_DLL_DIR};$ENV{PATH}" ) + set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.bat") +else(WIN32) + set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.sh") endif(WIN32) IF (PYTHONINTERP_FOUND) @@ -43,6 +46,14 @@ IF (PYTHONINTERP_FOUND) ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/smart_punct.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark --smart" ) + add_test(roundtriptest_executable + ${PYTHON_EXECUTABLE} + "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" + "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program" + "${ROUNDTRIP} ${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" + ) + + ELSE(PYTHONINTERP_FOUND) message("\n*** A python 3 interpreter is required to run the spec tests.\n") diff --git a/test/roundtrip.bat b/test/roundtrip.bat new file mode 100755 index 0000000000..ac4c9eda3c --- /dev/null +++ b/test/roundtrip.bat @@ -0,0 +1 @@ +"%1" -t commonmark | "%1" diff --git a/test/roundtrip.sh b/test/roundtrip.sh index 1631f35d9a..ec4f1357d8 100755 --- a/test/roundtrip.sh +++ b/test/roundtrip.sh @@ -1,2 +1,2 @@ #!/bin/sh -./build/src/cmark -t commonmark | ./build/src/cmark +"$1" -t commonmark | "$1" -- cgit 0.0.5-2-1-g0f52 From e9a194371e1e7c62bf415fec4361efe6164ec409 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 22 Dec 2015 15:37:34 -0800 Subject: Updated spec.txt. --- test/spec.txt | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index ff44e4afad..9a0bbedaed 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1363,7 +1363,7 @@ aaa . Unclosed code blocks are closed by the end of the document -(or the enclosing [block quote] or [list item]): +(or the enclosing [block quote][block quotes] or [list item][list items]): . ``` @@ -1987,8 +1987,8 @@ p {color:blue;} . If there is no matching end tag, the block will end at the -end of the document (or the enclosing [block quote] or -[list item]): +end of the document (or the enclosing [block quote][block quotes] +or [list item][list items]): . -. +```````````````````````````````` + If there is no matching end tag, the block will end at the end of the document (or the enclosing [block quote][block quotes] or [list item][list items]): -. +```````````````````````````````` example *foo* .

                                foo

                                -. +```````````````````````````````` -. + +```````````````````````````````` example *bar* *baz* . *bar*

                                baz

                                -. +```````````````````````````````` + Note that anything on the last line after the end tag will be included in the [HTML block]: -. +```````````````````````````````` example 1. *bar* @@ -2164,11 +2302,12 @@ foo 1. *bar* -. +```````````````````````````````` + A comment (type 2): -. +```````````````````````````````` example -. +```````````````````````````````` + A processing instruction (type 3): -. +```````````````````````````````` example '; @@ -2195,19 +2335,21 @@ A processing instruction (type 3): echo '>'; ?> -. +```````````````````````````````` + A declaration (type 4): -. +```````````````````````````````` example . -. +```````````````````````````````` + CDATA (type 5): -. +```````````````````````````````` example -. +```````````````````````````````` + The opening tag can be indented 1-3 spaces, but not 4: -. +```````````````````````````````` example @@ -2245,9 +2388,10 @@ The opening tag can be indented 1-3 spaces, but not 4:
                                <!-- foo -->
                                 
                                -. +```````````````````````````````` -. + +```````````````````````````````` example
                                @@ -2255,12 +2399,13 @@ The opening tag can be indented 1-3 spaces, but not 4:
                                <div>
                                 
                                -. +```````````````````````````````` + An HTML block of types 1--6 can interrupt a paragraph, and need not be preceded by a blank line. -. +```````````````````````````````` example Foo
                                bar @@ -2270,12 +2415,13 @@ bar
                                bar
                                -. +```````````````````````````````` + However, a following blank line is needed, except at the end of a document, and except for blocks of types 1--5, above: -. +```````````````````````````````` example
                                bar
                                @@ -2285,11 +2431,12 @@ bar bar
                                *foo* -. +```````````````````````````````` + HTML blocks of type 7 cannot interrupt a paragraph: -. +```````````````````````````````` example Foo baz @@ -2297,7 +2444,8 @@ baz

                                Foo baz

                                -. +```````````````````````````````` + This rule differs from John Gruber's original Markdown syntax specification, which says: @@ -2329,7 +2477,7 @@ simply separate the Markdown from the HTML using blank lines: Compare: -. +```````````````````````````````` example
                                *Emphasized* text. @@ -2339,9 +2487,10 @@ Compare:

                                Emphasized text.

                                -. +```````````````````````````````` -. + +```````````````````````````````` example
                                *Emphasized* text.
                                @@ -2349,7 +2498,8 @@ Compare:
                                *Emphasized* text.
                                -. +```````````````````````````````` + Some Markdown implementations have adopted a convention of interpreting content inside tags as text if the open tag has @@ -2362,7 +2512,7 @@ blocks into Markdown documents with 100% reliability. However, *in most cases* this will work fine, because the blank lines in HTML are usually followed by HTML block tags. For example: -. +```````````````````````````````` example @@ -2382,13 +2532,14 @@ Hi
                                -. +```````````````````````````````` + There are problems, however, if the inner tags are indented *and* separated by spaces, as then they will be interpreted as an indented code block: -. +```````````````````````````````` example @@ -2409,7 +2560,8 @@ an indented code block:
                                -. +```````````````````````````````` + Fortunately, blank lines are usually not necessary and can be deleted. The exception is inside `
                                ` tags, but as described
                                @@ -2418,7 +2570,7 @@ lines.
                                 
                                 ## Link reference definitions
                                 
                                -A [link reference definition](@link-reference-definition)
                                +A [link reference definition](@)
                                 consists of a [link label], indented up to three spaces, followed
                                 by a colon (`:`), optional [whitespace] (including up to one
                                 [line ending]), a [link destination],
                                @@ -2426,24 +2578,25 @@ optional [whitespace] (including up to one
                                 [line ending]), and an optional [link
                                 title], which if it is present must be separated
                                 from the [link destination] by [whitespace].
                                -No further [non-whitespace character]s may occur on the line.
                                +No further [non-whitespace characters] may occur on the line.
                                 
                                 A [link reference definition]
                                 does not correspond to a structural element of a document.  Instead, it
                                -defines a label which can be used in [reference link]s
                                +defines a label which can be used in [reference links]
                                 and reference-style [images] elsewhere in the document.  [Link
                                 reference definitions] can come either before or after the links that use
                                 them.
                                 
                                -.
                                +```````````````````````````````` example
                                 [foo]: /url "title"
                                 
                                 [foo]
                                 .
                                 

                                foo

                                -. +```````````````````````````````` -. + +```````````````````````````````` example [foo]: /url 'the title' @@ -2451,17 +2604,19 @@ them. [foo] .

                                foo

                                -. +```````````````````````````````` -. + +```````````````````````````````` example [Foo*bar\]]:my_(url) 'title (with parens)' [Foo*bar\]] .

                                Foo*bar]

                                -. +```````````````````````````````` -. + +```````````````````````````````` example [Foo bar]: 'title' @@ -2469,11 +2624,12 @@ them. [Foo bar] .

                                Foo bar

                                -. +```````````````````````````````` + The title may extend over multiple lines: -. +```````````````````````````````` example [foo]: /url ' title line1 @@ -2487,11 +2643,12 @@ title line1 line2 ">foo

                                -. +```````````````````````````````` + However, it may not contain a [blank line]: -. +```````````````````````````````` example [foo]: /url 'title with blank line' @@ -2501,123 +2658,135 @@ with blank line'

                                [foo]: /url 'title

                                with blank line'

                                [foo]

                                -. +```````````````````````````````` + The title may be omitted: -. +```````````````````````````````` example [foo]: /url [foo] .

                                foo

                                -. +```````````````````````````````` + The link destination may not be omitted: -. +```````````````````````````````` example [foo]: [foo] .

                                [foo]:

                                [foo]

                                -. +```````````````````````````````` + Both title and destination can contain backslash escapes and literal backslashes: -. +```````````````````````````````` example [foo]: /url\bar\*baz "foo\"bar\baz" [foo] .

                                foo

                                -. +```````````````````````````````` + A link can come before its corresponding definition: -. +```````````````````````````````` example [foo] [foo]: url .

                                foo

                                -. +```````````````````````````````` + If there are several matching definitions, the first one takes precedence: -. +```````````````````````````````` example [foo] [foo]: first [foo]: second .

                                foo

                                -. +```````````````````````````````` + As noted in the section on [Links], matching of labels is case-insensitive (see [matches]). -. +```````````````````````````````` example [FOO]: /url [Foo] .

                                Foo

                                -. +```````````````````````````````` -. + +```````````````````````````````` example [ΑΓΩ]: /φου [αγω] .

                                αγω

                                -. +```````````````````````````````` + Here is a link reference definition with no corresponding link. It contributes nothing to the document. -. +```````````````````````````````` example [foo]: /url . -. +```````````````````````````````` + Here is another one: -. +```````````````````````````````` example [ foo ]: /url bar .

                                bar

                                -. +```````````````````````````````` + This is not a link reference definition, because there are -[non-whitespace character]s after the title: +[non-whitespace characters] after the title: -. +```````````````````````````````` example [foo]: /url "title" ok .

                                [foo]: /url "title" ok

                                -. +```````````````````````````````` + This is a link reference definition, but it has no title: -. +```````````````````````````````` example [foo]: /url "title" ok .

                                "title" ok

                                -. +```````````````````````````````` + This is not a link reference definition, because it is indented four spaces: -. +```````````````````````````````` example [foo]: /url "title" [foo] @@ -2625,12 +2794,13 @@ four spaces:
                                [foo]: /url "title"
                                 

                                [foo]

                                -. +```````````````````````````````` + This is not a link reference definition, because it occurs inside a code block: -. +```````````````````````````````` example ``` [foo]: /url ``` @@ -2640,11 +2810,12 @@ a code block:
                                [foo]: /url
                                 

                                [foo]

                                -. +```````````````````````````````` + A [link reference definition] cannot interrupt a paragraph. -. +```````````````````````````````` example Foo [bar]: /baz @@ -2653,12 +2824,13 @@ Foo

                                Foo [bar]: /baz

                                [bar]

                                -. +```````````````````````````````` + However, it can directly follow other block elements, such as headings and thematic breaks, and it need not be followed by a blank line. -. +```````````````````````````````` example # [Foo] [foo]: /url > bar @@ -2667,12 +2839,13 @@ and thematic breaks, and it need not be followed by a blank line.

                                bar

                                -. +```````````````````````````````` -Several [link reference definition]s + +Several [link reference definitions] can occur one after another, without intervening blank lines. -. +```````````````````````````````` example [foo]: /foo-url "foo" [bar]: /bar-url "bar" @@ -2685,14 +2858,15 @@ can occur one after another, without intervening blank lines.

                                foo, bar, baz

                                -. +```````````````````````````````` + -[Link reference definition]s can occur +[Link reference definitions] can occur inside block containers, like lists and block quotations. They affect the entire document, not just the container in which they are defined: -. +```````````````````````````````` example [foo] > [foo]: /url @@ -2700,13 +2874,14 @@ are defined:

                                foo

                                -. +```````````````````````````````` + ## Paragraphs A sequence of non-blank lines that cannot be interpreted as other -kinds of blocks forms a [paragraph](@paragraph). +kinds of blocks forms a [paragraph](@). The contents of the paragraph are the result of parsing the paragraph's raw content as inlines. The paragraph's raw content is formed by concatenating the lines and removing initial and final @@ -2714,18 +2889,19 @@ is formed by concatenating the lines and removing initial and final A simple example with two paragraphs: -. +```````````````````````````````` example aaa bbb .

                                aaa

                                bbb

                                -. +```````````````````````````````` + Paragraphs can contain multiple lines, but no blank lines: -. +```````````````````````````````` example aaa bbb @@ -2736,11 +2912,12 @@ ddd bbb

                                ccc ddd

                                -. +```````````````````````````````` + Multiple blank lines between paragraph have no effect: -. +```````````````````````````````` example aaa @@ -2748,22 +2925,24 @@ bbb .

                                aaa

                                bbb

                                -. +```````````````````````````````` + Leading spaces are skipped: -. +```````````````````````````````` example aaa bbb .

                                aaa bbb

                                -. +```````````````````````````````` + Lines after the first may be indented any amount, since indented code blocks cannot interrupt paragraphs. -. +```````````````````````````````` example aaa bbb ccc @@ -2771,49 +2950,53 @@ aaa

                                aaa bbb ccc

                                -. +```````````````````````````````` + However, the first line may be indented at most three spaces, or an indented code block will be triggered: -. +```````````````````````````````` example aaa bbb .

                                aaa bbb

                                -. +```````````````````````````````` -. + +```````````````````````````````` example aaa bbb .
                                aaa
                                 

                                bbb

                                -. +```````````````````````````````` + Final spaces are stripped before inline parsing, so a paragraph that ends with two or more spaces will not end with a [hard line break]: -. +```````````````````````````````` example aaa bbb .

                                aaa
                                bbb

                                -. +```````````````````````````````` + ## Blank lines -[Blank line]s between block-level elements are ignored, +[Blank lines] between block-level elements are ignored, except for the role they play in determining whether a [list] is [tight] or [loose]. Blank lines at the beginning and end of the document are also ignored. -. +```````````````````````````````` example aaa @@ -2825,7 +3008,8 @@ aaa .

                                aaa

                                aaa

                                -. +```````````````````````````````` + # Container blocks @@ -2850,7 +3034,7 @@ these constructions. (A recipe is provided below in the section entitled ## Block quotes -A [block quote marker](@block-quote-marker) +A [block quote marker](@) consists of 0-3 spaces of initial indent, plus (a) the character `>` together with a following space, or (b) a single character `>` not followed by a space. @@ -2867,7 +3051,7 @@ The following rules define [block quotes]: more lines in which the next [non-whitespace character] after the [block quote marker] is [paragraph continuation text] is a block quote with *Bs* as its content. - [Paragraph continuation text](@paragraph-continuation-text) is text + [Paragraph continuation text](@) is text that will be parsed as part of the content of a paragraph, but does not occur at the beginning of the paragraph. @@ -2878,7 +3062,7 @@ Nothing else counts as a [block quote](#block-quotes). Here is a simple example: -. +```````````````````````````````` example > # Foo > bar > baz @@ -2888,11 +3072,12 @@ Here is a simple example:

                                bar baz

                                -. +```````````````````````````````` + The spaces after the `>` characters can be omitted: -. +```````````````````````````````` example ># Foo >bar > baz @@ -2902,11 +3087,12 @@ The spaces after the `>` characters can be omitted:

                                bar baz

                                -. +```````````````````````````````` + The `>` characters can be indented 1-3 spaces: -. +```````````````````````````````` example > # Foo > bar > baz @@ -2916,11 +3102,12 @@ The `>` characters can be indented 1-3 spaces:

                                bar baz

                                -. +```````````````````````````````` + Four spaces gives us a code block: -. +```````````````````````````````` example > # Foo > bar > baz @@ -2929,12 +3116,13 @@ Four spaces gives us a code block: > bar > baz
                                -. +```````````````````````````````` + The Laziness clause allows us to omit the `>` before a paragraph continuation line: -. +```````````````````````````````` example > # Foo > bar baz @@ -2944,12 +3132,13 @@ baz

                                bar baz

                                -. +```````````````````````````````` + A block quote can contain some lazy and some non-lazy continuation lines: -. +```````````````````````````````` example > bar baz > foo @@ -2959,10 +3148,11 @@ baz baz foo

                                -. +```````````````````````````````` + Laziness only applies to lines that would have been continuations of -paragraphs had they been prepended with [block quote marker]s. +paragraphs had they been prepended with [block quote markers]. For example, the `> ` cannot be omitted in the second line of ``` markdown @@ -2972,7 +3162,7 @@ For example, the `> ` cannot be omitted in the second line of without changing the meaning: -. +```````````````````````````````` example > foo --- . @@ -2980,7 +3170,8 @@ without changing the meaning:

                                foo


                                -. +```````````````````````````````` + Similarly, if we omit the `> ` in the second line of @@ -2991,7 +3182,7 @@ Similarly, if we omit the `> ` in the second line of then the block quote ends after the first line: -. +```````````````````````````````` example > - foo - bar . @@ -3003,12 +3194,13 @@ then the block quote ends after the first line:
                                • bar
                                -. +```````````````````````````````` + For the same reason, we can't omit the `> ` in front of subsequent lines of an indented or fenced code block: -. +```````````````````````````````` example > foo bar . @@ -3018,9 +3210,10 @@ subsequent lines of an indented or fenced code block:
                                bar
                                 
                                -. +```````````````````````````````` -. + +```````````````````````````````` example > ``` foo ``` @@ -3030,12 +3223,13 @@ foo

                                foo

                                -. +```````````````````````````````` + Note that in the following case, we have a paragraph continuation line: -. +```````````````````````````````` example > foo - bar . @@ -3043,7 +3237,8 @@ continuation line:

                                foo - bar

                                -. +```````````````````````````````` + To see why, note that in @@ -3058,25 +3253,27 @@ interrupt paragraphs, so it is a [paragraph continuation line]. A block quote can be empty: -. +```````````````````````````````` example > .
                                -. +```````````````````````````````` -. + +```````````````````````````````` example > > > .
                                -. +```````````````````````````````` + A block quote can have initial or final blank lines: -. +```````````````````````````````` example > > foo > @@ -3084,11 +3281,12 @@ A block quote can have initial or final blank lines:

                                foo

                                -. +```````````````````````````````` + A blank line always separates block quotes: -. +```````````````````````````````` example > foo > bar @@ -3099,7 +3297,8 @@ A blank line always separates block quotes:

                                bar

                                -. +```````````````````````````````` + (Most current Markdown implementations, including John Gruber's original `Markdown.pl`, will parse this example as a single block quote @@ -3109,7 +3308,7 @@ whether two block quotes or one are wanted.) Consecutiveness means that if we put these block quotes together, we get a single block quote: -. +```````````````````````````````` example > foo > bar . @@ -3117,11 +3316,12 @@ we get a single block quote:

                                foo bar

                                -. +```````````````````````````````` + To get a block quote with two paragraphs, use: -. +```````````````````````````````` example > foo > > bar @@ -3130,11 +3330,12 @@ To get a block quote with two paragraphs, use:

                                foo

                                bar

                                -. +```````````````````````````````` + Block quotes can interrupt paragraphs: -. +```````````````````````````````` example foo > bar . @@ -3142,12 +3343,13 @@ foo

                                bar

                                -. +```````````````````````````````` + In general, blank lines are not needed before or after block quotes: -. +```````````````````````````````` example > aaa *** > bbb @@ -3159,12 +3361,13 @@ quotes:

                                bbb

                                -. +```````````````````````````````` + However, because of laziness, a blank line is needed between a block quote and a following paragraph: -. +```````````````````````````````` example > bar baz . @@ -3172,9 +3375,10 @@ baz

                                bar baz

                                -. +```````````````````````````````` -. + +```````````````````````````````` example > bar baz @@ -3183,9 +3387,10 @@ baz

                                bar

                                baz

                                -. +```````````````````````````````` -. + +```````````````````````````````` example > bar > baz @@ -3194,13 +3399,14 @@ baz

                                bar

                                baz

                                -. +```````````````````````````````` + It is a consequence of the Laziness rule that any number of initial `>`s may be omitted on a continuation line of a nested block quote: -. +```````````````````````````````` example > > > foo bar . @@ -3212,9 +3418,10 @@ bar

                                -. +```````````````````````````````` -. + +```````````````````````````````` example >>> foo > bar >>baz @@ -3228,14 +3435,15 @@ baz

                                -. +```````````````````````````````` + When including an indented code block in a block quote, remember that the [block quote marker] includes both the `>` and a following space. So *five spaces* are needed after the `>`: -. +```````````````````````````````` example > code > not code @@ -3247,18 +3455,19 @@ the `>`:

                                not code

                                -. +```````````````````````````````` + ## List items -A [list marker](@list-marker) is a +A [list marker](@) is a [bullet list marker] or an [ordered list marker]. -A [bullet list marker](@bullet-list-marker) +A [bullet list marker](@) is a `-`, `+`, or `*` character. -An [ordered list marker](@ordered-list-marker) +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 @@ -3279,7 +3488,7 @@ The following rules define [list items]: For example, let *Ls* be the lines -. +```````````````````````````````` example A paragraph with two lines. @@ -3294,13 +3503,14 @@ with two lines.

                                A block quote.

                                -. +```````````````````````````````` + And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says that the following is an ordered list item with start number 1, and the same contents as *Ls*: -. +```````````````````````````````` example 1. A paragraph with two lines. @@ -3319,7 +3529,8 @@ with two lines.

                              -. +```````````````````````````````` + The most important thing to notice is that the position of the text after the list marker determines how much indentation @@ -3332,7 +3543,7 @@ item. Here are some examples showing how far content must be indented to be put under the list item: -. +```````````````````````````````` example - one two @@ -3341,9 +3552,10 @@ put under the list item:
                            1. one
                            2. two

                              -. +```````````````````````````````` -. + +```````````````````````````````` example - one two @@ -3354,9 +3566,10 @@ put under the list item:

                              two

                              -. +```````````````````````````````` -. + +```````````````````````````````` example - one two @@ -3366,9 +3579,10 @@ put under the list item:
                               two
                               
                              -. +```````````````````````````````` -. + +```````````````````````````````` example - one two @@ -3379,7 +3593,8 @@ put under the list item:

                              two

                              -. +```````````````````````````````` + It is tempting to think of this in terms of columns: the continuation blocks must be indented at least to the column of the first @@ -3389,7 +3604,7 @@ is needed. Which column this indentation reaches will depend on how the list item is embedded in other constructions, as shown by this example: -. +```````````````````````````````` example > > 1. one >> >> two @@ -3404,7 +3619,8 @@ this example:
                            -. +```````````````````````````````` + Here `two` occurs in the same column as the list marker `1.`, but is actually contained in the list item, because there is @@ -3415,7 +3631,7 @@ occurs far to the right of the initial text of the list item, `one`, but it is not considered part of the list item, because it is not indented far enough past the blockquote marker: -. +```````````````````````````````` example >>- one >> > > two @@ -3428,25 +3644,27 @@ far enough past the blockquote marker:

                            two

                            -. +```````````````````````````````` + Note that at least one space is needed between the list marker and any following content, so these are not list items: -. +```````````````````````````````` example -one 2.two .

                            -one

                            2.two

                            -. +```````````````````````````````` + 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]. -. +```````````````````````````````` example - foo bar @@ -3503,11 +3721,12 @@ bar -. +```````````````````````````````` + A list item may contain any kind of block: -. +```````````````````````````````` example 1. foo ``` @@ -3529,14 +3748,15 @@ 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): -. +```````````````````````````````` example - Foo bar @@ -3552,9 +3772,10 @@ baz
                            -. +```````````````````````````````` -. + +```````````````````````````````` example - Foo bar @@ -3571,49 +3792,55 @@ baz
                              baz
                             
                            -. +```````````````````````````````` + Note that ordered list start numbers must be nine digits or less: -. +```````````````````````````````` example 123456789. ok .
                            1. ok
                            -. +```````````````````````````````` -. + +```````````````````````````````` example 1234567890. not ok .

                            1234567890. not ok

                            -. +```````````````````````````````` + A start number may begin with 0s: -. +```````````````````````````````` example 0. ok .
                            1. ok
                            -. +```````````````````````````````` -. + +```````````````````````````````` example 003. ok .
                            1. ok
                            -. +```````````````````````````````` + A start number may not be negative: -. +```````````````````````````````` example -1. not ok .

                            -1. not ok

                            -. +```````````````````````````````` + 2. **Item starting with indented code.** If a sequence of lines *Ls* @@ -3632,7 +3859,7 @@ An indented code block will have to be indented four spaces beyond the edge of the region where text will be included in the list item. In the following case that is 6 spaces: -. +```````````````````````````````` example - foo bar @@ -3644,11 +3871,12 @@ In the following case that is 6 spaces: -. +```````````````````````````````` + And in this case it is 11 spaces: -. +```````````````````````````````` example 10. foo bar @@ -3660,13 +3888,14 @@ And in this case it is 11 spaces: -. +```````````````````````````````` + If the *first* block in the list item is an indented code block, then by rule #2, the contents must be indented *one* space after the list marker: -. +```````````````````````````````` example indented code paragraph @@ -3678,9 +3907,10 @@ paragraph

                            paragraph

                            more code
                             
                            -. +```````````````````````````````` -. + +```````````````````````````````` example 1. indented code paragraph @@ -3696,12 +3926,13 @@ paragraph -. +```````````````````````````````` + Note that an additional space indent is interpreted as space inside the code block: -. +```````````````````````````````` example 1. indented code paragraph @@ -3717,7 +3948,8 @@ inside the code block: -. +```````````````````````````````` + Note that rules #1 and #2 only apply to two cases: (a) cases in which the lines to be included in a list item begin with a @@ -3727,16 +3959,17 @@ block. In a case like the following, where the first block begins with a three-space indent, the rules do not allow us to form a list item by indenting the whole thing and prepending a list marker: -. +```````````````````````````````` example foo bar .

                            foo

                            bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example - foo bar @@ -3745,14 +3978,15 @@ bar
                          • foo
                          • bar

                            -. +```````````````````````````````` + This is not a significant restriction, because when a block begins with 1-3 spaces indent, the indentation can always be removed without a change in interpretation, allowing rule #1 to be applied. So, in the above case: -. +```````````````````````````````` example - foo bar @@ -3763,7 +3997,8 @@ the above case:

                            bar

                            -. +```````````````````````````````` + 3. **Item starting with a blank line.** If a sequence of lines *Ls* starting with a single [blank line] constitute a (possibly empty) @@ -3779,7 +4014,7 @@ the above case: Here are some list items that start with a blank line but are not empty: -. +```````````````````````````````` example - foo - @@ -3800,13 +4035,14 @@ Here are some list items that start with a blank line but are not empty: -. +```````````````````````````````` + A list item can begin with at most one blank line. In the following example, `foo` is not part of the list item: -. +```````````````````````````````` example - foo @@ -3815,11 +4051,12 @@ item:
                          • foo

                            -. +```````````````````````````````` + Here is an empty bullet list item: -. +```````````````````````````````` example - foo - - bar @@ -3829,11 +4066,12 @@ Here is an empty bullet list item:
                          • bar
                          • -. +```````````````````````````````` + It does not matter whether there are spaces following the [list marker]: -. +```````````````````````````````` example - foo - - bar @@ -3843,11 +4081,12 @@ It does not matter whether there are spaces following the [list marker]:
                          • bar
                          • -. +```````````````````````````````` + Here is an empty ordered list item: -. +```````````````````````````````` example 1. foo 2. 3. bar @@ -3857,17 +4096,19 @@ Here is an empty ordered list item:
                          • bar
                          • -. +```````````````````````````````` + A list may start or end with an empty list item: -. +```````````````````````````````` example * .
                            -. +```````````````````````````````` + 4. **Indentation.** If a sequence of lines *Ls* constitutes a list item @@ -3878,7 +4119,7 @@ A list may start or end with an empty list item: Indented one space: -. +```````````````````````````````` example 1. A paragraph with two lines. @@ -3897,11 +4138,12 @@ with two lines.

                            -. +```````````````````````````````` + Indented two spaces: -. +```````````````````````````````` example 1. A paragraph with two lines. @@ -3920,11 +4162,12 @@ with two lines.

                            -. +```````````````````````````````` + Indented three spaces: -. +```````````````````````````````` example 1. A paragraph with two lines. @@ -3943,11 +4186,12 @@ with two lines.

                            -. +```````````````````````````````` + Four spaces indent gives a code block: -. +```````````````````````````````` example 1. A paragraph with two lines. @@ -3962,7 +4206,8 @@ Four spaces indent gives a code block: > A block quote. -. +```````````````````````````````` + 5. **Laziness.** If a string of lines *Ls* constitute a [list @@ -3972,11 +4217,11 @@ Four spaces indent gives a code block: [paragraph continuation text] is a list item with the same contents and attributes. The unindented lines are called - [lazy continuation line](@lazy-continuation-line)s. + [lazy continuation line](@)s. -Here is an example with [lazy continuation line]s: +Here is an example with [lazy continuation lines]: -. +```````````````````````````````` example 1. A paragraph with two lines. @@ -3995,11 +4240,12 @@ with two lines.

                            -. +```````````````````````````````` + Indentation can be partially deleted: -. +```````````````````````````````` example 1. A paragraph with two lines. . @@ -4007,11 +4253,12 @@ Indentation can be partially deleted:
                          • A paragraph with two lines.
                          • -. +```````````````````````````````` + These examples show how laziness can work in nested structures: -. +```````````````````````````````` example > 1. > Blockquote continued here. . @@ -4025,9 +4272,10 @@ continued here.

                            -. +```````````````````````````````` -. + +```````````````````````````````` example > 1. > Blockquote > continued here. . @@ -4041,7 +4289,8 @@ continued here.

                            -. +```````````````````````````````` + 6. **That's all.** Nothing that is not counted as a list item by rules @@ -4053,7 +4302,7 @@ in order to be included in the list item. So, in this case we need two spaces indent: -. +```````````````````````````````` example - foo - bar - baz @@ -4069,11 +4318,12 @@ So, in this case we need two spaces indent: -. +```````````````````````````````` + One is not enough: -. +```````````````````````````````` example - foo - bar - baz @@ -4083,11 +4333,12 @@ One is not enough:
                          • bar
                          • baz
                          • -. +```````````````````````````````` + Here we need four, because the list marker is wider: -. +```````````````````````````````` example 10) foo - bar . @@ -4098,11 +4349,12 @@ Here we need four, because the list marker is wider: -. +```````````````````````````````` + Three is not enough: -. +```````````````````````````````` example 10) foo - bar . @@ -4112,11 +4364,12 @@ Three is not enough:
                            • bar
                            -. +```````````````````````````````` + A list may be the first block in a list item: -. +```````````````````````````````` example - - foo .
                              @@ -4126,9 +4379,10 @@ A list may be the first block in a list item:
                            -. +```````````````````````````````` -. + +```````````````````````````````` example 1. - 2. foo .
                              @@ -4142,11 +4396,12 @@ A list may be the first block in a list item:
                            -. +```````````````````````````````` + A list item can contain a heading: -. +```````````````````````````````` example - # Foo - Bar --- @@ -4160,7 +4415,8 @@ A list item can contain a heading:

                            Bar

                            baz -. +```````````````````````````````` + ### Motivation @@ -4350,39 +4606,39 @@ takes four spaces (a common case), but diverge in other cases. ## Lists -A [list](@list) is a sequence of one or more +A [list](@) is a sequence of one or more list items [of the same type]. The list items may be separated by single [blank lines], but two blank lines end all containing lists. -Two list items are [of the same type](@of-the-same-type) +Two list items are [of the same type](@) if they begin with a [list marker] of the same type. Two list markers are of the same type if (a) they are bullet list markers using the same character (`-`, `+`, or `*`) or (b) they are ordered list numbers with the same delimiter (either `.` or `)`). -A list is an [ordered list](@ordered-list) +A list is an [ordered list](@) if its constituent list items begin with -[ordered list marker]s, and a -[bullet list](@bullet-list) if its constituent list -items begin with [bullet list marker]s. +[ordered list markers], and a +[bullet list](@) if its constituent list +items begin with [bullet list markers]. -The [start number](@start-number) +The [start number](@) of an [ordered list] is determined by the list number of its initial list item. The numbers of subsequent list items are disregarded. -A list is [loose](@loose) if any of its constituent +A list is [loose](@) if any of its constituent list items are separated by blank lines, or if any of its constituent list items directly contain two block-level elements with a blank line -between them. Otherwise a list is [tight](@tight). +between them. Otherwise a list is [tight](@). (The difference in HTML output is that paragraphs in a loose list are wrapped in `

                            ` tags, while paragraphs in a tight list are not.) Changing the bullet or ordered list delimiter starts a new list: -. +```````````````````````````````` example - foo - bar + baz @@ -4394,9 +4650,10 @@ Changing the bullet or ordered list delimiter starts a new list:

                            • baz
                            -. +```````````````````````````````` -. + +```````````````````````````````` example 1. foo 2. bar 3) baz @@ -4408,13 +4665,14 @@ Changing the bullet or ordered list delimiter starts a new list:
                            1. baz
                            -. +```````````````````````````````` + In CommonMark, a list can interrupt a paragraph. That is, no blank line is needed to separate a paragraph from a following list: -. +```````````````````````````````` example Foo - bar - baz @@ -4424,12 +4682,13 @@ Foo
                          • bar
                          • baz
                          • -. +```````````````````````````````` + `Markdown.pl` does not allow this, through fear of triggering a list via a numeral in a hard-wrapped line: -. +```````````````````````````````` example The number of windows in my house is 14. The number of doors is 6. . @@ -4437,7 +4696,8 @@ The number of windows in my house is
                            1. The number of doors is 6.
                            -. +```````````````````````````````` + Oddly, `Markdown.pl` *does* allow a blockquote to interrupt a paragraph, even though the same considerations might apply. We think that the two @@ -4454,7 +4714,7 @@ blank lines: Second, we are attracted to a -> [principle of uniformity](@principle-of-uniformity): +> [principle of uniformity](@): > if a chunk of text has a certain > meaning, it will continue to have the same meaning when put into a > container block (such as a list item or blockquote). @@ -4494,7 +4754,7 @@ seems more consistent with established practice with Markdown. There can be blank lines between items, but two blank lines end a list: -. +```````````````````````````````` example - foo - bar @@ -4513,13 +4773,14 @@ a list:
                            • baz
                            -. +```````````````````````````````` + 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 @@ -4533,11 +4794,12 @@ list:
                            • baz
                            -. +```````````````````````````````` + Indeed, two blank lines will end *all* containing lists: -. +```````````````````````````````` example - foo - bar - baz @@ -4558,14 +4820,15 @@ Indeed, two blank lines will end *all* containing lists:
                              bim
                             
                            -. +```````````````````````````````` + 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: -. +```````````````````````````````` example - foo - bar @@ -4581,9 +4844,10 @@ item:
                          • baz
                          • bim
                          • -. +```````````````````````````````` -. + +```````````````````````````````` example - foo notcode @@ -4604,14 +4868,15 @@ item:
                            code
                             
                            -. +```````````````````````````````` + List items need not be indented to the same level. The following list items will be treated as items at the same list level, since none is indented enough to belong to the previous list item: -. +```````````````````````````````` example - a - b - c @@ -4633,9 +4898,10 @@ item:
                          • h
                          • i
                          • -. +```````````````````````````````` -. + +```````````````````````````````` example 1. a 2. b @@ -4653,12 +4919,13 @@ item:

                            c

                            -. +```````````````````````````````` + This is a loose list, because there is a blank line between two of the list items: -. +```````````````````````````````` example - a - b @@ -4675,11 +4942,12 @@ two of the list items:

                            c

                            -. +```````````````````````````````` + So is this, with a empty second item: -. +```````````````````````````````` example * a * @@ -4694,13 +4962,14 @@ So is this, with a empty second item:

                            c

                            -. +```````````````````````````````` + These are loose lists, even though there is no space between the items, because one of the items directly contains two block-level elements with a blank line between them: -. +```````````````````````````````` example - a - b @@ -4719,9 +4988,10 @@ with a blank line between them:

                            d

                            -. +```````````````````````````````` -. + +```````````````````````````````` example - a - b @@ -4739,11 +5009,12 @@ with a blank line between them:

                            d

                            -. +```````````````````````````````` + This is a tight list, because the blank lines are in a code block: -. +```````````````````````````````` example - a - ``` b @@ -4762,13 +5033,14 @@ This is a tight list, because the blank lines are in a code block:
                          • c
                          • -. +```````````````````````````````` + This is a tight list, because the blank line is between two paragraphs of a sublist. So the sublist is loose while the outer list is tight: -. +```````````````````````````````` example - a - b @@ -4786,12 +5058,13 @@ the outer list is tight:
                          • d
                          • -. +```````````````````````````````` + This is a tight list, because the blank line is inside the block quote: -. +```````````````````````````````` example * a > b > @@ -4805,12 +5078,13 @@ block quote:
                          • c
                          • -. +```````````````````````````````` + This list is tight, because the consecutive block elements are not separated by blank lines: -. +```````````````````````````````` example - a > b ``` @@ -4828,19 +5102,21 @@ are not separated by blank lines:
                          • d
                          • -. +```````````````````````````````` + A single-paragraph list is tight: -. +```````````````````````````````` example - a .
                            • a
                            -. +```````````````````````````````` -. + +```````````````````````````````` example - a - b . @@ -4851,12 +5127,13 @@ A single-paragraph list is tight: -. +```````````````````````````````` + This list is loose, because of the blank line between the two block elements in the list item: -. +```````````````````````````````` example 1. ``` foo ``` @@ -4870,11 +5147,12 @@ two block elements in the list item:

                            bar

                            -. +```````````````````````````````` + Here the outer list is loose, the inner list tight: -. +```````````````````````````````` example * foo * bar @@ -4889,9 +5167,10 @@ Here the outer list is loose, the inner list tight:

                            baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example - a - b - c @@ -4916,7 +5195,8 @@ Here the outer list is loose, the inner list tight: -. +```````````````````````````````` + # Inlines @@ -4924,11 +5204,12 @@ Inlines are parsed sequentially from the beginning of the character stream to the end (left to right, in left-to-right languages). Thus, for example, in -. +```````````````````````````````` example `hi`lo` .

                            hilo`

                            -. +```````````````````````````````` + `hi` is parsed as code, leaving the backtick at the end as a literal backtick. @@ -4937,25 +5218,27 @@ backtick. Any ASCII punctuation character may be backslash-escaped: -. +```````````````````````````````` example \!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~ .

                            !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

                            -. +```````````````````````````````` + Backslashes before other characters are treated as literal backslashes: -. +```````````````````````````````` example \→\A\a\ \3\φ\« .

                            \→\A\a\ \3\φ\«

                            -. +```````````````````````````````` + Escaped characters are treated as regular characters and do not have their usual Markdown meanings: -. +```````````````````````````````` example \*not emphasized* \
                            not a tag \[not a link](/foo) @@ -4973,88 +5256,99 @@ not have their usual Markdown meanings: * not a list # not a heading [foo]: /url "not a reference"

                            -. +```````````````````````````````` + If a backslash is itself escaped, the following character is not: -. +```````````````````````````````` example \\*emphasis* .

                            \emphasis

                            -. +```````````````````````````````` + A backslash at the end of the line is a [hard line break]: -. +```````````````````````````````` example foo\ bar .

                            foo
                            bar

                            -. +```````````````````````````````` + Backslash escapes do not work in code blocks, code spans, autolinks, or raw HTML: -. +```````````````````````````````` example `` \[\` `` .

                            \[\`

                            -. +```````````````````````````````` -. + +```````````````````````````````` example \[\] .
                            \[\]
                             
                            -. +```````````````````````````````` -. + +```````````````````````````````` example ~~~ \[\] ~~~ .
                            \[\]
                             
                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            http://example.com?find=\*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example . -. +```````````````````````````````` + But they work in all other contexts, including URLs and link titles, -link references, and [info string]s in [fenced code block]s: +link references, and [info strings] in [fenced code blocks]: -. +```````````````````````````````` example [foo](/bar\* "ti\*tle") .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo] [foo]: /bar\* "ti\*tle" .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ``` foo\+bar foo ``` .
                            foo
                             
                            -. +```````````````````````````````` + ## Entity and numeric character references @@ -5067,13 +5361,13 @@ need not store information about whether a particular character was represented in the source using a Unicode character or an entity reference. -[Entity references](@entity-references) consist of `&` + any of the valid +[Entity references](@) consist of `&` + any of the valid HTML5 entity names + `;`. The document is used as an authoritative source for the valid entity references and their corresponding code points. -. +```````````````````````````````` example   & © Æ Ď ¾ ℋ ⅆ ∲ ≧̸ @@ -5081,176 +5375,193 @@ references and their corresponding code points.

                              & © Æ Ď ¾ ℋ ⅆ ∲ ≧̸

                            -. +```````````````````````````````` + [Decimal numeric character -references](@decimal-numeric-character-references) +references](@) consist of `&#` + a string of 1--8 arabic digits + `;`. A numeric character reference is parsed as the corresponding Unicode character. Invalid Unicode code points will be replaced by the REPLACEMENT CHARACTER (`U+FFFD`). For security reasons, the code point `U+0000` will also be replaced by `U+FFFD`. -. +```````````````````````````````` example # Ӓ Ϡ � � .

                            # Ӓ Ϡ � �

                            -. +```````````````````````````````` + [Hexadecimal numeric character -references](@hexadecimal-numeric-character-references) consist of `&#` + +references](@) consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits + `;`. They too are parsed as the corresponding Unicode character (this time specified with a hexadecimal numeral instead of decimal). -. +```````````````````````````````` example " ആ ಫ .

                            " ആ ಫ

                            -. +```````````````````````````````` + Here are some nonentities: -. +```````````````````````````````` example   &x; &#; &#x; &ThisIsNotDefined; &hi?; .

                            &nbsp &x; &#; &#x; &ThisIsNotDefined; &hi?;

                            -. +```````````````````````````````` + Although HTML5 does accept some entity references without a trailing semicolon (such as `©`), these are not recognized here, because it makes the grammar too ambiguous: -. +```````````````````````````````` example © .

                            &copy

                            -. +```````````````````````````````` + Strings that are not on the list of HTML5 named entities are not recognized as entity references either: -. +```````````````````````````````` example &MadeUpEntity; .

                            &MadeUpEntity;

                            -. +```````````````````````````````` + Entity and numeric character references are recognized in any context besides code spans or code blocks, including -URLs, [link title]s, and [fenced code block][] [info string]s: +URLs, [link titles], and [fenced code block][] [info strings]: -. +```````````````````````````````` example . -. +```````````````````````````````` -. + +```````````````````````````````` example [foo](/föö "föö") .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo] [foo]: /föö "föö" .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ``` föö foo ``` .
                            foo
                             
                            -. +```````````````````````````````` + Entity and numeric character references are treated as literal text in code spans and code blocks: -. +```````````````````````````````` example `föö` .

                            f&ouml;&ouml;

                            -. +```````````````````````````````` -. + +```````````````````````````````` example föfö .
                            f&ouml;f&ouml;
                             
                            -. +```````````````````````````````` + ## Code spans -A [backtick string](@backtick-string) +A [backtick string](@) is a string of one or more backtick characters (`` ` ``) that is neither preceded nor followed by a backtick. -A [code span](@code-span) begins with a backtick string and ends with +A [code span](@) begins with a backtick string and ends with a backtick string of equal length. The contents of the code span are the characters between the two backtick strings, with leading and -trailing spaces and [line ending]s removed, and +trailing spaces and [line endings] removed, and [whitespace] collapsed to single spaces. This is a simple code span: -. +```````````````````````````````` example `foo` .

                            foo

                            -. +```````````````````````````````` + Here two backticks are used, because the code contains a backtick. This example also illustrates stripping of leading and trailing spaces: -. +```````````````````````````````` example `` foo ` bar `` .

                            foo ` bar

                            -. +```````````````````````````````` + This example shows the motivation for stripping leading and trailing spaces: -. +```````````````````````````````` example ` `` ` .

                            ``

                            -. +```````````````````````````````` -[Line ending]s are treated like spaces: -. +[Line endings] are treated like spaces: + +```````````````````````````````` example `` foo `` .

                            foo

                            -. +```````````````````````````````` + -Interior spaces and [line ending]s are collapsed into +Interior spaces and [line endings] are collapsed into single spaces, just as they would be by a browser: -. +```````````````````````````````` example `foo bar baz` .

                            foo bar baz

                            -. +```````````````````````````````` + Q: Why not just leave the spaces, since browsers will collapse them anyway? A: Because we might be targeting a non-HTML format, and we shouldn't rely on HTML-specific rendering assumptions. (Existing implementations differ in their treatment of internal -spaces and [line ending]s. Some, including `Markdown.pl` and +spaces and [line endings]. Some, including `Markdown.pl` and `showdown`, convert an internal [line ending] into a `
                            ` tag. But this makes things difficult for those who like to hard-wrap their paragraphs, since a line break in the midst of a code @@ -5258,20 +5569,22 @@ span will cause an unintended line break in the output. Others just leave internal spaces as they are, which is fine if only HTML is being targeted.) -. +```````````````````````````````` example `foo `` bar` .

                            foo `` bar

                            -. +```````````````````````````````` + Note that backslash escapes do not work in code spans. All backslashes are treated literally: -. +```````````````````````````````` example `foo\`bar` .

                            foo\bar`

                            -. +```````````````````````````````` + Backslash escapes are never needed, because one can always choose a string of *n* backtick characters as delimiters, where the code does @@ -5282,67 +5595,75 @@ constructs except HTML tags and autolinks. Thus, for example, this is not parsed as emphasized text, since the second `*` is part of a code span: -. +```````````````````````````````` example *foo`*` .

                            *foo*

                            -. +```````````````````````````````` + And this is not parsed as a link: -. +```````````````````````````````` example [not a `link](/foo`) .

                            [not a link](/foo)

                            -. +```````````````````````````````` + Code spans, HTML tags, and autolinks have the same precedence. Thus, this is code: -. +```````````````````````````````` example `` .

                            <a href="">`

                            -. +```````````````````````````````` + But this is an HTML tag: -. +```````````````````````````````` example
                            ` .

                            `

                            -. +```````````````````````````````` + And this is code: -. +```````````````````````````````` example `` .

                            <http://foo.bar.baz>`

                            -. +```````````````````````````````` + But this is an autolink: -. +```````````````````````````````` example ` .

                            http://foo.bar.`baz`

                            -. +```````````````````````````````` + When a backtick string is not closed by a matching backtick string, we just have literal backticks: -. +```````````````````````````````` example ```foo`` .

                            ```foo``

                            -. +```````````````````````````````` -. + +```````````````````````````````` example `foo .

                            `foo

                            -. +```````````````````````````````` + ## Emphasis and strong emphasis @@ -5390,19 +5711,19 @@ no emphasis: foo_bar_baz The rules given below capture all of these patterns, while allowing for efficient parsing strategies that do not backtrack. -First, some definitions. A [delimiter run](@delimiter-run) is either +First, some definitions. A [delimiter run](@) is either a sequence of one or more `*` characters that is not preceded or followed by a `*` character, or a sequence of one or more `_` characters that is not preceded or followed by a `_` character. -A [left-flanking delimiter run](@left-flanking-delimiter-run) is +A [left-flanking delimiter run](@) is a [delimiter run] that is (a) not followed by [Unicode whitespace], and (b) either not followed by a [punctuation character], or preceded by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of the line count as Unicode whitespace. -A [right-flanking delimiter run](@right-flanking-delimiter-run) is +A [right-flanking delimiter run](@) is a [delimiter run] that is (a) not preceded by [Unicode whitespace], and (b) either not preceded by a [punctuation character], or followed by [Unicode whitespace] or a [punctuation character]. @@ -5453,7 +5774,7 @@ are a bit more complex than the ones given here.) The following rules define emphasis and strong emphasis: -1. A single `*` character [can open emphasis](@can-open-emphasis) +1. A single `*` character [can open emphasis](@) iff (if and only if) it is part of a [left-flanking delimiter run]. 2. A single `_` character [can open emphasis] iff @@ -5462,7 +5783,7 @@ The following rules define emphasis and strong emphasis: or (b) part of a [right-flanking delimiter run] preceded by punctuation. -3. A single `*` character [can close emphasis](@can-close-emphasis) +3. A single `*` character [can close emphasis](@) iff it is part of a [right-flanking delimiter run]. 4. A single `_` character [can close emphasis] iff @@ -5471,7 +5792,7 @@ The following rules define emphasis and strong emphasis: or (b) part of a [left-flanking delimiter run] followed by punctuation. -5. A double `**` [can open strong emphasis](@can-open-strong-emphasis) +5. A double `**` [can open strong emphasis](@) iff it is part of a [left-flanking delimiter run]. 6. A double `__` [can open strong emphasis] iff @@ -5480,7 +5801,7 @@ The following rules define emphasis and strong emphasis: or (b) part of a [right-flanking delimiter run] preceded by punctuation. -7. A double `**` [can close strong emphasis](@can-close-strong-emphasis) +7. A double `**` [can close strong emphasis](@) iff it is part of a [right-flanking delimiter run]. 8. A double `__` [can close strong emphasis] @@ -5547,141 +5868,157 @@ These rules can be illustrated through a series of examples. Rule 1: -. +```````````````````````````````` example *foo bar* .

                            foo bar

                            -. +```````````````````````````````` + This is not emphasis, because the opening `*` is followed by whitespace, and hence not part of a [left-flanking delimiter run]: -. +```````````````````````````````` example a * foo bar* .

                            a * foo bar*

                            -. +```````````````````````````````` + This is not emphasis, because the opening `*` is preceded by an alphanumeric and followed by punctuation, and hence not part of a [left-flanking delimiter run]: -. +```````````````````````````````` example a*"foo"* .

                            a*"foo"*

                            -. +```````````````````````````````` + Unicode nonbreaking spaces count as whitespace, too: -. +```````````````````````````````` example * a * .

                            * a *

                            -. +```````````````````````````````` + Intraword emphasis with `*` is permitted: -. +```````````````````````````````` example foo*bar* .

                            foobar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example 5*6*78 .

                            5678

                            -. +```````````````````````````````` + Rule 2: -. +```````````````````````````````` example _foo bar_ .

                            foo bar

                            -. +```````````````````````````````` + This is not emphasis, because the opening `_` is followed by whitespace: -. +```````````````````````````````` example _ foo bar_ .

                            _ foo bar_

                            -. +```````````````````````````````` + This is not emphasis, because the opening `_` is preceded by an alphanumeric and followed by punctuation: -. +```````````````````````````````` example a_"foo"_ .

                            a_"foo"_

                            -. +```````````````````````````````` + Emphasis with `_` is not allowed inside words: -. +```````````````````````````````` example foo_bar_ .

                            foo_bar_

                            -. +```````````````````````````````` -. + +```````````````````````````````` example 5_6_78 .

                            5_6_78

                            -. +```````````````````````````````` -. + +```````````````````````````````` example пристаням_стремятся_ .

                            пристаням_стремятся_

                            -. +```````````````````````````````` + Here `_` does not generate emphasis, because the first delimiter run is right-flanking and the second left-flanking: -. +```````````````````````````````` example aa_"bb"_cc .

                            aa_"bb"_cc

                            -. +```````````````````````````````` + This is emphasis, even though the opening delimiter is both left- and right-flanking, because it is preceded by punctuation: -. +```````````````````````````````` example foo-_(bar)_ .

                            foo-(bar)

                            -. +```````````````````````````````` + Rule 3: This is not emphasis, because the closing delimiter does not match the opening delimiter: -. +```````````````````````````````` example _foo* .

                            _foo*

                            -. +```````````````````````````````` + This is not emphasis, because the closing `*` is preceded by whitespace: -. +```````````````````````````````` example *foo bar * .

                            *foo bar *

                            -. +```````````````````````````````` + A newline also counts as whitespace: -. +```````````````````````````````` example *foo bar * . @@ -5689,34 +6026,38 @@ A newline also counts as whitespace:
                            -. +```````````````````````````````` + This is not emphasis, because the second `*` is preceded by punctuation and followed by an alphanumeric (hence it is not part of a [right-flanking delimiter run]: -. +```````````````````````````````` example *(*foo) .

                            *(*foo)

                            -. +```````````````````````````````` + The point of this restriction is more easily appreciated with this example: -. +```````````````````````````````` example *(*foo*)* .

                            (foo)

                            -. +```````````````````````````````` + Intraword emphasis with `*` is allowed: -. +```````````````````````````````` example *foo*bar .

                            foobar

                            -. +```````````````````````````````` + Rule 4: @@ -5724,164 +6065,184 @@ Rule 4: This is not emphasis, because the closing `_` is preceded by whitespace: -. +```````````````````````````````` example _foo bar _ .

                            _foo bar _

                            -. +```````````````````````````````` + This is not emphasis, because the second `_` is preceded by punctuation and followed by an alphanumeric: -. +```````````````````````````````` example _(_foo) .

                            _(_foo)

                            -. +```````````````````````````````` + This is emphasis within emphasis: -. +```````````````````````````````` example _(_foo_)_ .

                            (foo)

                            -. +```````````````````````````````` + Intraword emphasis is disallowed for `_`: -. +```````````````````````````````` example _foo_bar .

                            _foo_bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _пристаням_стремятся .

                            _пристаням_стремятся

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _foo_bar_baz_ .

                            foo_bar_baz

                            -. +```````````````````````````````` + This is emphasis, even though the closing delimiter is both left- and right-flanking, because it is followed by punctuation: -. +```````````````````````````````` example _(bar)_. .

                            (bar).

                            -. +```````````````````````````````` + Rule 5: -. +```````````````````````````````` example **foo bar** .

                            foo bar

                            -. +```````````````````````````````` + This is not strong emphasis, because the opening delimiter is followed by whitespace: -. +```````````````````````````````` example ** foo bar** .

                            ** foo bar**

                            -. +```````````````````````````````` + This is not strong emphasis, because the opening `**` is preceded by an alphanumeric and followed by punctuation, and hence not part of a [left-flanking delimiter run]: -. +```````````````````````````````` example a**"foo"** .

                            a**"foo"**

                            -. +```````````````````````````````` + Intraword strong emphasis with `**` is permitted: -. +```````````````````````````````` example foo**bar** .

                            foobar

                            -. +```````````````````````````````` + Rule 6: -. +```````````````````````````````` example __foo bar__ .

                            foo bar

                            -. +```````````````````````````````` + This is not strong emphasis, because the opening delimiter is followed by whitespace: -. +```````````````````````````````` example __ foo bar__ .

                            __ foo bar__

                            -. +```````````````````````````````` + A newline counts as whitespace: -. +```````````````````````````````` example __ foo bar__ .

                            __ foo bar__

                            -. +```````````````````````````````` + This is not strong emphasis, because the opening `__` is preceded by an alphanumeric and followed by punctuation: -. +```````````````````````````````` example a__"foo"__ .

                            a__"foo"__

                            -. +```````````````````````````````` + Intraword strong emphasis is forbidden with `__`: -. +```````````````````````````````` example foo__bar__ .

                            foo__bar__

                            -. +```````````````````````````````` -. + +```````````````````````````````` example 5__6__78 .

                            5__6__78

                            -. +```````````````````````````````` -. + +```````````````````````````````` example пристаням__стремятся__ .

                            пристаням__стремятся__

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo, __bar__, baz__ .

                            foo, bar, baz

                            -. +```````````````````````````````` + This is strong emphasis, even though the opening delimiter is both left- and right-flanking, because it is preceded by punctuation: -. +```````````````````````````````` example foo-__(bar)__ .

                            foo-(bar)

                            -. +```````````````````````````````` + Rule 7: @@ -5889,11 +6250,12 @@ Rule 7: This is not strong emphasis, because the closing delimiter is preceded by whitespace: -. +```````````````````````````````` example **foo bar ** .

                            **foo bar **

                            -. +```````````````````````````````` + (Nor can it be interpreted as an emphasized `*foo bar *`, because of Rule 11.) @@ -5901,215 +6263,242 @@ Rule 11.) This is not strong emphasis, because the second `**` is preceded by punctuation and followed by an alphanumeric: -. +```````````````````````````````` example **(**foo) .

                            **(**foo)

                            -. +```````````````````````````````` + The point of this restriction is more easily appreciated with these examples: -. +```````````````````````````````` example *(**foo**)* .

                            (foo)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **Gomphocarpus (*Gomphocarpus physocarpus*, syn. *Asclepias physocarpa*)** .

                            Gomphocarpus (Gomphocarpus physocarpus, syn. Asclepias physocarpa)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo "*bar*" foo** .

                            foo "bar" foo

                            -. +```````````````````````````````` + Intraword emphasis: -. +```````````````````````````````` example **foo**bar .

                            foobar

                            -. +```````````````````````````````` + Rule 8: This is not strong emphasis, because the closing delimiter is preceded by whitespace: -. +```````````````````````````````` example __foo bar __ .

                            __foo bar __

                            -. +```````````````````````````````` + This is not strong emphasis, because the second `__` is preceded by punctuation and followed by an alphanumeric: -. +```````````````````````````````` example __(__foo) .

                            __(__foo)

                            -. +```````````````````````````````` + The point of this restriction is more easily appreciated with this example: -. +```````````````````````````````` example _(__foo__)_ .

                            (foo)

                            -. +```````````````````````````````` + Intraword strong emphasis is forbidden with `__`: -. +```````````````````````````````` example __foo__bar .

                            __foo__bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __пристаням__стремятся .

                            __пристаням__стремятся

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo__bar__baz__ .

                            foo__bar__baz

                            -. +```````````````````````````````` + This is strong emphasis, even though the closing delimiter is both left- and right-flanking, because it is followed by punctuation: -. +```````````````````````````````` example __(bar)__. .

                            (bar).

                            -. +```````````````````````````````` + Rule 9: Any nonempty sequence of inline elements can be the contents of an emphasized span. -. +```````````````````````````````` example *foo [bar](/url)* .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo bar* .

                            foo bar

                            -. +```````````````````````````````` + In particular, emphasis and strong emphasis can be nested inside emphasis: -. +```````````````````````````````` example _foo __bar__ baz_ .

                            foo bar baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _foo _bar_ baz_ .

                            foo bar baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo_ bar_ .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo *bar** .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo **bar** baz* .

                            foo bar baz

                            -. +```````````````````````````````` + But note: -. +```````````````````````````````` example *foo**bar**baz* .

                            foobarbaz

                            -. +```````````````````````````````` + The difference is that in the preceding case, the internal delimiters [can close emphasis], while in the cases with spaces, they cannot. -. +```````````````````````````````` example ***foo** bar* .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo **bar*** .

                            foo bar

                            -. +```````````````````````````````` + Note, however, that in the following case we get no strong emphasis, because the opening delimiter is closed by the first `*` before `bar`: -. +```````````````````````````````` example *foo**bar*** .

                            foobar**

                            -. +```````````````````````````````` + Indefinite levels of nesting are possible: -. +```````````````````````````````` example *foo **bar *baz* bim** bop* .

                            foo bar baz bim bop

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo [*bar*](/url)* .

                            foo bar

                            -. +```````````````````````````````` + There can be no empty emphasis or strong emphasis: -. +```````````````````````````````` example ** is not an empty emphasis .

                            ** is not an empty emphasis

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **** is not an empty strong emphasis .

                            **** is not an empty strong emphasis

                            -. +```````````````````````````````` + Rule 10: @@ -6117,431 +6506,492 @@ Rule 10: Any nonempty sequence of inline elements can be the contents of an strongly emphasized span. -. +```````````````````````````````` example **foo [bar](/url)** .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo bar** .

                            foo bar

                            -. +```````````````````````````````` + In particular, emphasis and strong emphasis can be nested inside strong emphasis: -. +```````````````````````````````` example __foo _bar_ baz__ .

                            foo bar baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo __bar__ baz__ .

                            foo bar baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ____foo__ bar__ .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo **bar**** .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo *bar* baz** .

                            foo bar baz

                            -. +```````````````````````````````` + But note: -. +```````````````````````````````` example **foo*bar*baz** .

                            foobarbaz**

                            -. +```````````````````````````````` + The difference is that in the preceding case, the internal delimiters [can close emphasis], while in the cases with spaces, they cannot. -. +```````````````````````````````` example ***foo* bar** .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo *bar*** .

                            foo bar

                            -. +```````````````````````````````` + Indefinite levels of nesting are possible: -. +```````````````````````````````` example **foo *bar **baz** bim* bop** .

                            foo bar baz bim bop

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo [*bar*](/url)** .

                            foo bar

                            -. +```````````````````````````````` + There can be no empty emphasis or strong emphasis: -. +```````````````````````````````` example __ is not an empty emphasis .

                            __ is not an empty emphasis

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ____ is not an empty strong emphasis .

                            ____ is not an empty strong emphasis

                            -. +```````````````````````````````` + Rule 11: -. +```````````````````````````````` example foo *** .

                            foo ***

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo *\** .

                            foo *

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo *_* .

                            foo _

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo ***** .

                            foo *****

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo **\*** .

                            foo *

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo **_** .

                            foo _

                            -. +```````````````````````````````` + Note that when delimiters do not match evenly, Rule 11 determines that the excess literal `*` characters will appear outside of the emphasis, rather than inside it: -. +```````````````````````````````` example **foo* .

                            *foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo** .

                            foo*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ***foo** .

                            *foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ****foo* .

                            ***foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo*** .

                            foo*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo**** .

                            foo***

                            -. +```````````````````````````````` + Rule 12: -. +```````````````````````````````` example foo ___ .

                            foo ___

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo _\__ .

                            foo _

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo _*_ .

                            foo *

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo _____ .

                            foo _____

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo __\___ .

                            foo _

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo __*__ .

                            foo *

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo_ .

                            _foo

                            -. +```````````````````````````````` + Note that when delimiters do not match evenly, Rule 12 determines that the excess literal `_` characters will appear outside of the emphasis, rather than inside it: -. +```````````````````````````````` example _foo__ .

                            foo_

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ___foo__ .

                            _foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ____foo_ .

                            ___foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo___ .

                            foo_

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _foo____ .

                            foo___

                            -. +```````````````````````````````` + Rule 13 implies that if you want emphasis nested directly inside emphasis, you must use different delimiters: -. +```````````````````````````````` example **foo** .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *_foo_* .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __foo__ .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _*foo*_ .

                            foo

                            -. +```````````````````````````````` + However, strong emphasis within strong emphasis is possible without switching delimiters: -. +```````````````````````````````` example ****foo**** .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ____foo____ .

                            foo

                            -. +```````````````````````````````` + Rule 13 can be applied to arbitrarily long sequences of delimiters: -. +```````````````````````````````` example ******foo****** .

                            foo

                            -. +```````````````````````````````` + Rule 14: -. +```````````````````````````````` example ***foo*** .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _____foo_____ .

                            foo

                            -. +```````````````````````````````` + Rule 15: -. +```````````````````````````````` example *foo _bar* baz_ .

                            foo _bar baz_

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **foo*bar** .

                            foobar*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo __bar *baz bim__ bam* .

                            foo bar *baz bim bam

                            -. +```````````````````````````````` + Rule 16: -. +```````````````````````````````` example **foo **bar baz** .

                            **foo bar baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo *bar baz* .

                            *foo bar baz

                            -. +```````````````````````````````` + Rule 17: -. +```````````````````````````````` example *[bar*](/url) .

                            *bar*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _foo [bar_](/url) .

                            _foo bar_

                            -. +```````````````````````````````` -. + +```````````````````````````````` example * .

                            *

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ** .

                            **

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __ .

                            __

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *a `*`* .

                            a *

                            -. +```````````````````````````````` -. + +```````````````````````````````` example _a `_`_ .

                            a _

                            -. +```````````````````````````````` -. + +```````````````````````````````` example **a .

                            **ahttp://foo.bar/?q=**

                            -. +```````````````````````````````` -. + +```````````````````````````````` example __a .

                            __ahttp://foo.bar/?q=__

                            -. +```````````````````````````````` + ## Links A link contains [link text] (the visible text), a [link destination] (the URI that is the link destination), and optionally a [link title]. -There are two basic kinds of links in Markdown. In [inline link]s the +There are two basic kinds of links in Markdown. In [inline links] the destination and title are given immediately after the link text. In -[reference link]s the destination and title are defined elsewhere in +[reference links] the destination and title are defined elsewhere in the document. -A [link text](@link-text) consists of a sequence of zero or more +A [link text](@) consists of a sequence of zero or more inline elements enclosed by square brackets (`[` and `]`). The following rules apply: @@ -6554,7 +7004,7 @@ following rules apply: with an open bracket `[`, a sequence of zero or more inlines, and a close bracket `]`. -- Backtick [code span]s, [autolink]s, and raw [HTML tag]s bind more tightly +- Backtick [code spans], [autolinks], and raw [HTML tags] bind more tightly than the brackets in link text. Thus, for example, `` [foo`]` `` could not be a link text, since the second `]` is part of a code span. @@ -6562,7 +7012,7 @@ following rules apply: - The brackets in link text bind more tightly than markers for [emphasis and strong emphasis]. Thus, for example, `*[foo*](url)` is a link. -A [link destination](@link-destination) consists of either +A [link destination](@) consists of either - a sequence of zero or more characters between an opening `<` and a closing `>` that contains no spaces, line breaks, or unescaped @@ -6574,7 +7024,7 @@ A [link destination](@link-destination) consists of either a balanced pair of unescaped parentheses that is not itself inside a balanced pair of unescaped parentheses. -A [link title](@link-title) consists of either +A [link title](@) consists of either - a sequence of zero or more characters between straight double-quote characters (`"`), including a `"` character only if it is @@ -6587,10 +7037,10 @@ A [link title](@link-title) consists of either - a sequence of zero or more characters between matching parentheses (`(...)`), including a `)` character only if it is backslash-escaped. -Although [link title]s may span multiple lines, they may not contain +Although [link titles] may span multiple lines, they may not contain a [blank line]. -An [inline link](@inline-link) consists of a [link text] followed immediately +An [inline link](@) consists of a [link text] followed immediately by a left parenthesis `(`, optional [whitespace], an optional [link destination], an optional [link title] separated from the link destination by [whitespace], optional [whitespace], and a right @@ -6604,106 +7054,119 @@ above. Here is a simple inline link: -. +```````````````````````````````` example [link](/uri "title") .

                            link

                            -. +```````````````````````````````` + The title may be omitted: -. +```````````````````````````````` example [link](/uri) .

                            link

                            -. +```````````````````````````````` + Both the title and the destination may be omitted: -. +```````````````````````````````` example [link]() .

                            link

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link](<>) .

                            link

                            -. +```````````````````````````````` + The destination cannot contain spaces or line breaks, even if enclosed in pointy brackets: -. +```````````````````````````````` example [link](/my uri) .

                            [link](/my uri)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link]() .

                            [link](</my uri>)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link](foo bar) .

                            [link](foo bar)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link]() .

                            [link]()

                            -. +```````````````````````````````` + One level of balanced parentheses is allowed without escaping: -. +```````````````````````````````` example [link]((foo)and(bar)) .

                            link

                            -. +```````````````````````````````` + However, if you have parentheses within parentheses, you need to escape or use the `<...>` form: -. +```````````````````````````````` example [link](foo(and(bar))) .

                            [link](foo(and(bar)))

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link](foo(and\(bar\))) .

                            link

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link]() .

                            link

                            -. +```````````````````````````````` + Parentheses and other symbols can also be escaped, as usual in Markdown: -. +```````````````````````````````` example [link](foo\)\:) .

                            link

                            -. +```````````````````````````````` + A link can contain fragment identifiers and queries: -. +```````````````````````````````` example [link](#fragment) [link](http://example.com#fragment) @@ -6713,16 +7176,18 @@ A link can contain fragment identifiers and queries:

                            link

                            link

                            link

                            -. +```````````````````````````````` + Note that a backslash before a non-escapable character is just a backslash: -. +```````````````````````````````` example [link](foo\bar) .

                            link

                            -. +```````````````````````````````` + URL-escaping should be left alone inside the destination, as all URL-escaped characters are also valid URL characters. Entity and @@ -6733,25 +7198,27 @@ does not enforce any particular policy for rendering URLs in HTML or other formats. Renderers may make different decisions about how to escape or normalize URLs in the output. -. +```````````````````````````````` example [link](foo%20bä) .

                            link

                            -. +```````````````````````````````` + Note that, because titles can often be parsed as destinations, if you try to omit the destination and keep the title, you'll get unexpected results: -. +```````````````````````````````` example [link]("title") .

                            link

                            -. +```````````````````````````````` + Titles may be in single quotes, double quotes, or parentheses: -. +```````````````````````````````` example [link](/url "title") [link](/url 'title') [link](/url (title)) @@ -6759,32 +7226,36 @@ Titles may be in single quotes, double quotes, or parentheses:

                            link link link

                            -. +```````````````````````````````` + Backslash escapes and entity and numeric character references may be used in titles: -. +```````````````````````````````` example [link](/url "title \""") .

                            link

                            -. +```````````````````````````````` + Nested balanced quotes are not allowed without escaping: -. +```````````````````````````````` example [link](/url "title "and" title") .

                            [link](/url "title "and" title")

                            -. +```````````````````````````````` + But it is easy to work around this by using a different quote type: -. +```````````````````````````````` example [link](/url 'title "and" title') .

                            link

                            -. +```````````````````````````````` + (Note: `Markdown.pl` did allow double quotes inside a double-quoted title, and its test suite included a test demonstrating this. @@ -6803,144 +7274,161 @@ the same way in inline links and link reference definitions.) [Whitespace] is allowed around the destination and title: -. +```````````````````````````````` example [link]( /uri "title" ) .

                            link

                            -. +```````````````````````````````` + But it is not allowed between the link text and the following parenthesis: -. +```````````````````````````````` example [link] (/uri) .

                            [link] (/uri)

                            -. +```````````````````````````````` + The link text may contain balanced brackets, but not unbalanced ones, unless they are escaped: -. +```````````````````````````````` example [link [foo [bar]]](/uri) .

                            link [foo [bar]]

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link] bar](/uri) .

                            [link] bar](/uri)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link [bar](/uri) .

                            [link bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link \[bar](/uri) .

                            link [bar

                            -. +```````````````````````````````` + The link text may contain inline content: -. +```````````````````````````````` example [link *foo **bar** `#`*](/uri) .

                            link foo bar #

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [![moon](moon.jpg)](/uri) .

                            moon

                            -. +```````````````````````````````` + However, links may not contain other links, at any level of nesting. -. +```````````````````````````````` example [foo [bar](/uri)](/uri) .

                            [foo bar](/uri)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo *[bar [baz](/uri)](/uri)*](/uri) .

                            [foo [bar baz](/uri)](/uri)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![[[foo](uri1)](uri2)](uri3) .

                            [foo](uri2)

                            -. +```````````````````````````````` + These cases illustrate the precedence of link text grouping over emphasis grouping: -. +```````````````````````````````` example *[foo*](/uri) .

                            *foo*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo *bar](baz*) .

                            foo *bar

                            -. +```````````````````````````````` + Note that brackets that *aren't* part of links do not take precedence: -. +```````````````````````````````` example *foo [bar* baz] .

                            foo [bar baz]

                            -. +```````````````````````````````` + These cases illustrate the precedence of HTML tags, code spans, and autolinks over link grouping: -. +```````````````````````````````` example [foo .

                            [foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo`](/uri)` .

                            [foo](/uri)

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo .

                            [foohttp://example.com/?search=](uri)

                            -. +```````````````````````````````` + -There are three kinds of [reference link](@reference-link)s: +There are three kinds of [reference link](@)s: [full](#full-reference-link), [collapsed](#collapsed-reference-link), and [shortcut](#shortcut-reference-link). -A [full reference link](@full-reference-link) +A [full reference link](@) consists of a [link text] immediately followed by a [link label] that [matches] a [link reference definition] elsewhere in the document. -A [link label](@link-label) begins with a left bracket (`[`) and ends +A [link label](@) begins with a left bracket (`[`) and ends with the first right bracket (`]`) that is not backslash-escaped. Between these brackets there must be at least one [non-whitespace character]. Unescaped square bracket characters are not allowed in -[link label]s. A link label can have at most 999 +[link labels]. A link label can have at most 999 characters inside the square brackets. -One label [matches](@matches) +One label [matches](@) another just in case their normalized forms are equal. To normalize a label, perform the *Unicode case fold* and collapse consecutive internal [whitespace] to a single space. If there are multiple @@ -6953,165 +7441,181 @@ matching [link reference definition]. Here is a simple example: -. +```````````````````````````````` example [foo][bar] [bar]: /url "title" .

                            foo

                            -. +```````````````````````````````` + The rules for the [link text] are the same as with -[inline link]s. Thus: +[inline links]. Thus: The link text may contain balanced brackets, but not unbalanced ones, unless they are escaped: -. +```````````````````````````````` example [link [foo [bar]]][ref] [ref]: /uri .

                            link [foo [bar]]

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [link \[bar][ref] [ref]: /uri .

                            link [bar

                            -. +```````````````````````````````` + The link text may contain inline content: -. +```````````````````````````````` example [link *foo **bar** `#`*][ref] [ref]: /uri .

                            link foo bar #

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [![moon](moon.jpg)][ref] [ref]: /uri .

                            moon

                            -. +```````````````````````````````` + However, links may not contain other links, at any level of nesting. -. +```````````````````````````````` example [foo [bar](/uri)][ref] [ref]: /uri .

                            [foo bar]ref

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo *bar [baz][ref]*][ref] [ref]: /uri .

                            [foo bar baz]ref

                            -. +```````````````````````````````` -(In the examples above, we have two [shortcut reference link]s + +(In the examples above, we have two [shortcut reference links] instead of one [full reference link].) The following cases illustrate the precedence of link text grouping over emphasis grouping: -. +```````````````````````````````` example *[foo*][ref] [ref]: /uri .

                            *foo*

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo *bar][ref] [ref]: /uri .

                            foo *bar

                            -. +```````````````````````````````` + These cases illustrate the precedence of HTML tags, code spans, and autolinks over link grouping: -. +```````````````````````````````` example [foo [ref]: /uri .

                            [foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo`][ref]` [ref]: /uri .

                            [foo][ref]

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo [ref]: /uri .

                            [foohttp://example.com/?search=][ref]

                            -. +```````````````````````````````` + Matching is case-insensitive: -. +```````````````````````````````` example [foo][BaR] [bar]: /url "title" .

                            foo

                            -. +```````````````````````````````` + Unicode case fold is used: -. +```````````````````````````````` example [Толпой][Толпой] is a Russian word. [ТОЛПОЙ]: /url .

                            Толпой is a Russian word.

                            -. +```````````````````````````````` + Consecutive internal [whitespace] is treated as one space for purposes of determining matching: -. +```````````````````````````````` example [Foo bar]: /url [Baz][Foo bar] .

                            Baz

                            -. +```````````````````````````````` + No [whitespace] is allowed between the [link text] and the [link label]: -. +```````````````````````````````` example [foo] [bar] [bar]: /url "title" .

                            [foo] bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo] [bar] @@ -7119,15 +7623,16 @@ No [whitespace] is allowed between the [link text] and the .

                            [foo] bar

                            -. +```````````````````````````````` + This is a departure from John Gruber's original Markdown syntax description, which explicitly allows whitespace between the link text and the link label. It brings reference links in line with -[inline link]s, which (according to both original Markdown and +[inline links], which (according to both original Markdown and this spec) cannot have whitespace after the link text. More importantly, it prevents inadvertent capture of consecutive -[shortcut reference link]s. If whitespace is allowed between the +[shortcut reference links]. If whitespace is allowed between the link text and the link label, then in the following we will have a single reference link, not two shortcut reference links, as intended: @@ -7140,7 +7645,7 @@ intended: [bar]: /url2 ``` -(Note that [shortcut reference link]s were introduced by Gruber +(Note that [shortcut reference links] were introduced by Gruber himself in a beta version of `Markdown.pl`, but never included in the official syntax description. Without shortcut reference links, it is harmless to allow space between the link text and @@ -7148,10 +7653,10 @@ link label; but once shortcut references are introduced, it is too dangerous to allow this, as it frequently leads to unintended results.) -When there are multiple matching [link reference definition]s, +When there are multiple matching [link reference definitions], the first is used: -. +```````````````````````````````` example [foo]: /url1 [foo]: /url2 @@ -7159,80 +7664,88 @@ the first is used: [bar][foo] .

                            bar

                            -. +```````````````````````````````` + Note that matching is performed on normalized strings, not parsed inline content. So the following does not match, even though the labels define equivalent inline content: -. +```````````````````````````````` example [bar][foo\!] [foo!]: /url .

                            [bar][foo!]

                            -. +```````````````````````````````` -[Link label]s cannot contain brackets, unless they are + +[Link labels] cannot contain brackets, unless they are backslash-escaped: -. +```````````````````````````````` example [foo][ref[] [ref[]: /uri .

                            [foo][ref[]

                            [ref[]: /uri

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo][ref[bar]] [ref[bar]]: /uri .

                            [foo][ref[bar]]

                            [ref[bar]]: /uri

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [[[foo]]] [[[foo]]]: /url .

                            [[[foo]]]

                            [[[foo]]]: /url

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [foo][ref\[] [ref\[]: /uri .

                            foo

                            -. +```````````````````````````````` + Note that in this example `]` is not backslash-escaped: -. +```````````````````````````````` example [bar\\]: /uri [bar\\] .

                            bar\

                            -. +```````````````````````````````` + A [link label] must contain at least one [non-whitespace character]: -. +```````````````````````````````` example [] []: /uri .

                            []

                            []: /uri

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [ ] @@ -7243,9 +7756,10 @@ A [link label] must contain at least one [non-whitespace character]: ]

                            [ ]: /uri

                            -. +```````````````````````````````` + -A [collapsed reference link](@collapsed-reference-link) +A [collapsed reference link](@) consists of a [link label] that [matches] a [link reference definition] elsewhere in the document, followed by the string `[]`. @@ -7254,37 +7768,40 @@ which are used as the link's text. The link's URI and title are provided by the matching reference link definition. Thus, `[foo][]` is equivalent to `[foo][foo]`. -. +```````````````````````````````` example [foo][] [foo]: /url "title" .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [*foo* bar][] [*foo* bar]: /url "title" .

                            foo bar

                            -. +```````````````````````````````` + The link labels are case-insensitive: -. +```````````````````````````````` example [Foo][] [foo]: /url "title" .

                            Foo

                            -. +```````````````````````````````` + As with full reference links, [whitespace] is not allowed between the two sets of brackets: -. +```````````````````````````````` example [foo] [] @@ -7292,9 +7809,10 @@ allowed between the two sets of brackets: .

                            foo []

                            -. +```````````````````````````````` + -A [shortcut reference link](@shortcut-reference-link) +A [shortcut reference link](@) consists of a [link label] that [matches] a [link reference definition] elsewhere in the document and is not followed by `[]` or a link label. @@ -7303,132 +7821,144 @@ which are used as the link's text. the link's URI and title are provided by the matching link reference definition. Thus, `[foo]` is equivalent to `[foo][]`. -. +```````````````````````````````` example [foo] [foo]: /url "title" .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [*foo* bar] [*foo* bar]: /url "title" .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [[*foo* bar]] [*foo* bar]: /url "title" .

                            [foo bar]

                            -. +```````````````````````````````` -. + +```````````````````````````````` example [[bar [foo] [foo]: /url .

                            [[bar foo

                            -. +```````````````````````````````` + The link labels are case-insensitive: -. +```````````````````````````````` example [Foo] [foo]: /url "title" .

                            Foo

                            -. +```````````````````````````````` + A space after the link text should be preserved: -. +```````````````````````````````` example [foo] bar [foo]: /url .

                            foo bar

                            -. +```````````````````````````````` + If you just want bracketed text, you can backslash-escape the opening bracket to avoid links: -. +```````````````````````````````` example \[foo] [foo]: /url "title" .

                            [foo]

                            -. +```````````````````````````````` + Note that this is a link, because a link label ends with the first following closing bracket: -. +```````````````````````````````` example [foo*]: /url *[foo*] .

                            *foo*

                            -. +```````````````````````````````` + Full references take precedence over shortcut references: -. +```````````````````````````````` example [foo][bar] [foo]: /url1 [bar]: /url2 .

                            foo

                            -. +```````````````````````````````` + In the following case `[bar][baz]` is parsed as a reference, `[foo]` as normal text: -. +```````````````````````````````` example [foo][bar][baz] [baz]: /url .

                            [foo]bar

                            -. +```````````````````````````````` + Here, though, `[foo][bar]` is parsed as a reference, since `[bar]` is defined: -. +```````````````````````````````` example [foo][bar][baz] [baz]: /url1 [bar]: /url2 .

                            foobaz

                            -. +```````````````````````````````` + Here `[foo]` is not parsed as a shortcut reference, because it is followed by a link label (even though `[bar]` is not defined): -. +```````````````````````````````` example [foo][bar][baz] [baz]: /url1 [foo]: /url2 .

                            [foo]bar

                            -. +```````````````````````````````` + ## Images Syntax for images is like the syntax for links, with one difference. Instead of [link text], we have an -[image description](@image-description). The rules for this are the +[image description](@). The rules for this are the same as for [link text], except that (a) an image description starts with `![` rather than `[`, and (b) an image description may contain links. @@ -7436,31 +7966,35 @@ An image description has inline elements as its contents. When an image is rendered to HTML, this is standardly used as the image's `alt` attribute. -. +```````````````````````````````` example ![foo](/url "title") .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo *bar*] [foo *bar*]: train.jpg "train & tracks" .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo ![bar](/url)](/url2) .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo [bar](/url)](/url2) .

                            foo bar

                            -. +```````````````````````````````` + Though this spec is concerned with parsing, not rendering, it is recommended that in rendering to HTML, only the plain string content @@ -7469,96 +8003,107 @@ the above example, the alt attribute's value is `foo bar`, not `foo [bar](/url)` or `foo bar`. Only the plain string content is rendered, without formatting. -. +```````````````````````````````` example ![foo *bar*][] [foo *bar*]: train.jpg "train & tracks" .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo *bar*][foobar] [FOOBAR]: train.jpg "train & tracks" .

                            foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo](train.jpg) .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example My ![foo bar](/path/to/train.jpg "title" ) .

                            My foo bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo]() .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![](/url) .

                            -. +```````````````````````````````` + Reference-style: -. +```````````````````````````````` example ![foo][bar] [bar]: /url .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![foo][bar] [BAR]: /url .

                            foo

                            -. +```````````````````````````````` + Collapsed: -. +```````````````````````````````` example ![foo][] [foo]: /url "title" .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![*foo* bar][] [*foo* bar]: /url "title" .

                            foo bar

                            -. +```````````````````````````````` + The labels are case-insensitive: -. +```````````````````````````````` example ![Foo][] [foo]: /url "title" .

                            Foo

                            -. +```````````````````````````````` + As with reference links, [whitespace] is not allowed between the two sets of brackets: -. +```````````````````````````````` example ![foo] [] @@ -7566,170 +8111,187 @@ between the two sets of brackets: .

                            foo []

                            -. +```````````````````````````````` + Shortcut: -. +```````````````````````````````` example ![foo] [foo]: /url "title" .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ![*foo* bar] [*foo* bar]: /url "title" .

                            foo bar

                            -. +```````````````````````````````` + Note that link labels cannot contain unescaped brackets: -. +```````````````````````````````` example ![[foo]] [[foo]]: /url "title" .

                            ![[foo]]

                            [[foo]]: /url "title"

                            -. +```````````````````````````````` + The link labels are case-insensitive: -. +```````````````````````````````` example ![Foo] [foo]: /url "title" .

                            Foo

                            -. +```````````````````````````````` + If you just want bracketed text, you can backslash-escape the opening `!` and `[`: -. +```````````````````````````````` example \!\[foo] [foo]: /url "title" .

                            ![foo]

                            -. +```````````````````````````````` + If you want a link after a literal `!`, backslash-escape the `!`: -. +```````````````````````````````` example \![foo] [foo]: /url "title" .

                            !foo

                            -. +```````````````````````````````` + ## Autolinks -[Autolink](@autolink)s are absolute URIs and email addresses inside +[Autolink](@)s are absolute URIs and email addresses inside `<` and `>`. They are parsed as links, with the URL or email address as the link label. -A [URI autolink](@uri-autolink) consists of `<`, followed by an +A [URI autolink](@) consists of `<`, followed by an [absolute URI] not containing `<`, followed by `>`. It is parsed as a link to the URI, with the URI as the link's label. -An [absolute URI](@absolute-uri), +An [absolute URI](@), for these purposes, consists of a [scheme] followed by a colon (`:`) followed by zero or more characters other than ASCII [whitespace] and control characters, `<`, and `>`. If the URI includes these characters, they must be percent-encoded (e.g. `%20` for a space). -For purposes of this spec, a [scheme](@scheme) is any sequence +For purposes of this spec, a [scheme](@) is any sequence of 2--32 characters beginning with an ASCII letter and followed by any combination of ASCII letters, digits, or the symbols plus ("+"), period ("."), or hyphen ("-"). Here are some valid autolinks: -. +```````````````````````````````` example .

                            http://foo.bar.baz

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            http://foo.bar.baz/test?q=hello&id=22&boolean

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            irc://foo.bar:2233/baz

                            -. +```````````````````````````````` + Uppercase is also fine: -. +```````````````````````````````` example .

                            MAILTO:FOO@BAR.BAZ

                            -. +```````````````````````````````` + -Note that many strings that count as [absolute URI]s for +Note that many strings that count as [absolute URIs] for purposes of this spec are not valid URIs, because their schemes are not registered or because of other problems with their syntax: -. +```````````````````````````````` example .

                            a+b+c:d

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            made-up-scheme://foo,bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            http://../

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            localhost:5001/foo

                            -. +```````````````````````````````` + Spaces are not allowed in autolinks: -. +```````````````````````````````` example .

                            <http://foo.bar/baz bim>

                            -. +```````````````````````````````` + Backslash-escapes do not work inside autolinks: -. +```````````````````````````````` example .

                            http://example.com/\[\

                            -. +```````````````````````````````` + -An [email autolink](@email-autolink) +An [email autolink](@) consists of `<`, followed by an [email address], followed by `>`. The link's label is the email address, and the URL is `mailto:` followed by the email address. -An [email address](@email-address), +An [email address](@), for these purposes, is anything that matches the [non-normative regex from the HTML5 spec](https://html.spec.whatwg.org/multipage/forms.html#e-mail-state-(type=email)): @@ -7739,63 +8301,72 @@ spec](https://html.spec.whatwg.org/multipage/forms.html#e-mail-state-(type=email Examples of email autolinks: -. +```````````````````````````````` example .

                            foo@bar.example.com

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            foo+special@Bar.baz-bar0.com

                            -. +```````````````````````````````` + Backslash-escapes do not work inside email autolinks: -. +```````````````````````````````` example .

                            <foo+@bar.example.com>

                            -. +```````````````````````````````` + These are not autolinks: -. +```````````````````````````````` example <> .

                            <>

                            -. +```````````````````````````````` -. + +```````````````````````````````` example < http://foo.bar > .

                            < http://foo.bar >

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            <m:abc>

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            <foo.bar.baz>

                            -. +```````````````````````````````` -. + +```````````````````````````````` example http://example.com .

                            http://example.com

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo@bar.example.com .

                            foo@bar.example.com

                            -. +```````````````````````````````` + ## Raw HTML @@ -7806,380 +8377,416 @@ so custom tags (and even, say, DocBook tags) may be used. Here is the grammar for tags: -A [tag name](@tag-name) consists of an ASCII letter +A [tag name](@) consists of an ASCII letter followed by zero or more ASCII letters, digits, or hyphens (`-`). -An [attribute](@attribute) consists of [whitespace], +An [attribute](@) consists of [whitespace], an [attribute name], and an optional [attribute value specification]. -An [attribute name](@attribute-name) +An [attribute name](@) consists of an ASCII letter, `_`, or `:`, followed by zero or more ASCII letters, digits, `_`, `.`, `:`, or `-`. (Note: This is the XML specification restricted to ASCII. HTML5 is laxer.) -An [attribute value specification](@attribute-value-specification) +An [attribute value specification](@) consists of optional [whitespace], a `=` character, optional [whitespace], and an [attribute value]. -An [attribute value](@attribute-value) +An [attribute value](@) consists of an [unquoted attribute value], a [single-quoted attribute value], or a [double-quoted attribute value]. -An [unquoted attribute value](@unquoted-attribute-value) +An [unquoted attribute value](@) is a nonempty string of characters not including spaces, `"`, `'`, `=`, `<`, `>`, or `` ` ``. -A [single-quoted attribute value](@single-quoted-attribute-value) +A [single-quoted attribute value](@) consists of `'`, zero or more characters not including `'`, and a final `'`. -A [double-quoted attribute value](@double-quoted-attribute-value) +A [double-quoted attribute value](@) consists of `"`, zero or more characters not including `"`, and a final `"`. -An [open tag](@open-tag) consists of a `<` character, a [tag name], -zero or more [attribute]s, optional [whitespace], an optional `/` +An [open tag](@) consists of a `<` character, a [tag name], +zero or more [attributes], optional [whitespace], an optional `/` character, and a `>` character. -A [closing tag](@closing-tag) consists of the string ``. -An [HTML comment](@html-comment) consists of ``, +An [HTML comment](@) consists of ``, where *text* does not start with `>` or `->`, does not end with `-`, and does not contain `--`. (See the [HTML5 spec](http://www.w3.org/TR/html5/syntax.html#comments).) -A [processing instruction](@processing-instruction) +A [processing instruction](@) consists of the string ``, and the string `?>`. -A [declaration](@declaration) consists of the +A [declaration](@) consists of the string ``, and the character `>`. -A [CDATA section](@cdata-section) consists of +A [CDATA section](@) consists of the string ``, and the string `]]>`. -An [HTML tag](@html-tag) consists of an [open tag], a [closing tag], +An [HTML tag](@) consists of an [open tag], a [closing tag], an [HTML comment], a [processing instruction], a [declaration], or a [CDATA section]. Here are some simple open tags: -. +```````````````````````````````` example .

                            -. +```````````````````````````````` + Empty elements: -. +```````````````````````````````` example .

                            -. +```````````````````````````````` + [Whitespace] is allowed: -. +```````````````````````````````` example .

                            -. +```````````````````````````````` + With attributes: -. +```````````````````````````````` example .

                            -. +```````````````````````````````` + Custom tag names can be used: -. +```````````````````````````````` example Foo .

                            Foo

                            -. +```````````````````````````````` + Illegal tag names, not parsed as HTML: -. +```````````````````````````````` example <33> <__> .

                            <33> <__>

                            -. +```````````````````````````````` + Illegal attribute names: -. +```````````````````````````````` example
                            .

                            <a h*#ref="hi">

                            -. +```````````````````````````````` + Illegal attribute values: -. +```````````````````````````````` example
                            .

                            </a href="foo">

                            -. +```````````````````````````````` + Comments: -. +```````````````````````````````` example foo .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo .

                            foo <!-- not a comment -- two hyphens -->

                            -. +```````````````````````````````` + Not comments: -. +```````````````````````````````` example foo foo --> foo .

                            foo <!--> foo -->

                            foo <!-- foo--->

                            -. +```````````````````````````````` + Processing instructions: -. +```````````````````````````````` example foo .

                            foo

                            -. +```````````````````````````````` + Declarations: -. +```````````````````````````````` example foo .

                            foo

                            -. +```````````````````````````````` + CDATA sections: -. +```````````````````````````````` example foo &<]]> .

                            foo &<]]>

                            -. +```````````````````````````````` + Entity and numeric character references are preserved in HTML attributes: -. +```````````````````````````````` example foo
                            .

                            foo

                            -. +```````````````````````````````` + Backslash escapes do not work in HTML attributes: -. +```````````````````````````````` example foo .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            <a href=""">

                            -. +```````````````````````````````` + ## Hard line breaks A line break (not in a code span or HTML tag) that is preceded by two or more spaces and does not occur at the end of a block -is parsed as a [hard line break](@hard-line-break) (rendered +is parsed as a [hard line break](@) (rendered in HTML as a `
                            ` tag): -. +```````````````````````````````` example foo baz .

                            foo
                            baz

                            -. +```````````````````````````````` + For a more visible alternative, a backslash before the [line ending] may be used instead of two spaces: -. +```````````````````````````````` example foo\ baz .

                            foo
                            baz

                            -. +```````````````````````````````` + More than two spaces can be used: -. +```````````````````````````````` example foo baz .

                            foo
                            baz

                            -. +```````````````````````````````` + Leading spaces at the beginning of the next line are ignored: -. +```````````````````````````````` example foo bar .

                            foo
                            bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo\ bar .

                            foo
                            bar

                            -. +```````````````````````````````` + Line breaks can occur inside emphasis, links, and other constructs that allow inline content: -. +```````````````````````````````` example *foo bar* .

                            foo
                            bar

                            -. +```````````````````````````````` -. + +```````````````````````````````` example *foo\ bar* .

                            foo
                            bar

                            -. +```````````````````````````````` + Line breaks do not occur inside code spans -. +```````````````````````````````` example `code span` .

                            code span

                            -. +```````````````````````````````` -. + +```````````````````````````````` example `code\ span` .

                            code\ span

                            -. +```````````````````````````````` + or HTML tags: -. +```````````````````````````````` example
                            .

                            -. +```````````````````````````````` -. + +```````````````````````````````` example .

                            -. +```````````````````````````````` + Hard line breaks are for separating inline content within a block. Neither syntax for hard line breaks works at the end of a paragraph or other block element: -. +```````````````````````````````` example foo\ .

                            foo\

                            -. +```````````````````````````````` -. + +```````````````````````````````` example foo .

                            foo

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ### foo\ .

                            foo\

                            -. +```````````````````````````````` -. + +```````````````````````````````` example ### foo .

                            foo

                            -. +```````````````````````````````` + ## Soft line breaks @@ -8189,24 +8796,26 @@ 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.) -. +```````````````````````````````` example foo baz .

                            foo baz

                            -. +```````````````````````````````` + Spaces at the end of the line and beginning of the next line are removed: -. +```````````````````````````````` example foo baz .

                            foo baz

                            -. +```````````````````````````````` + A conforming parser may render a soft line break in HTML either as a line break or as a space. @@ -8219,34 +8828,37 @@ as hard line breaks. Any characters not given an interpretation by the above rules will be parsed as plain textual content. -. +```````````````````````````````` example hello $.;'there .

                            hello $.;'there

                            -. +```````````````````````````````` -. + +```````````````````````````````` example Foo χρῆν .

                            Foo χρῆν

                            -. +```````````````````````````````` + Internal spaces are preserved verbatim: -. +```````````````````````````````` example Multiple spaces .

                            Multiple spaces

                            -. +```````````````````````````````` + -# Appendix: A parsing strategy {-} +# Appendix: A parsing strategy In this appendix we describe some features of the parsing strategy used in the CommonMark reference implementations. -## Overview {-} +## Overview Parsing has two phases: @@ -8284,7 +8896,7 @@ marked by arrows: "aliquando id" ``` -## Phase 1: block structure {-} +## Phase 1: block structure Each line that is processed has an effect on this tree. The line is analyzed and, depending on its contents, the document may be altered @@ -8426,7 +9038,7 @@ We thus obtain the final tree: "aliquando id" ``` -## Phase 2: inline structure {-} +## Phase 2: inline structure Once all of the input has been parsed, all open blocks are closed. @@ -8457,7 +9069,7 @@ Notice how the [line ending] in the first paragraph has been parsed as a `softbreak`, and the asterisks in the first list item have become an `emph`. -### An algorithm for parsing nested emphasis and links {-} +### An algorithm for parsing nested emphasis and links By far the trickiest part of inline parsing is handling emphasis, strong emphasis, links, and images. This is done using the following @@ -8469,7 +9081,7 @@ When we're parsing inlines and we hit either - a `[` or `![` we insert a text node with these symbols as its literal content, and we -add a pointer to this text node to the [delimiter stack](@delimiter-stack). +add a pointer to this text node to the [delimiter stack](@). The [delimiter stack] is a doubly linked list. Each element contains a pointer to a text node, plus information about @@ -8487,7 +9099,7 @@ procedure (see below). When we hit the end of the input, we call the *process emphasis* procedure (see below), with `stack_bottom` = NULL. -#### *look for link or image* {-} +#### *look for link or image* Starting at the top of the delimiter stack, we look backwards through the stack for an opening `[` or `![` delimiter. @@ -8518,7 +9130,7 @@ through the stack for an opening `[` or `![` delimiter. `[` delimiters before the opening delimiter to *inactive*. (This will prevent us from getting links within links.) -#### *process emphasis* {-} +#### *process emphasis* Parameter `stack_bottom` sets a lower bound to how far we descend in the [delimiter stack]. If it is NULL, we can diff --git a/test/spec_tests.py b/test/spec_tests.py index c6950fbb46..d5b4d05a5c 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -90,29 +90,33 @@ def get_tests(specfile): with open(specfile, 'r', encoding='utf-8') as specf: for line in specf: line_number = line_number + 1 - if state == 0 and re.match(header_re, line): - headertext = header_re.sub('', line).strip() - if line.strip() == ".": - state = (state + 1) % 3 - if state == 0: - example_number = example_number + 1 - end_line = line_number - tests.append({ - "markdown":''.join(markdown_lines).replace('→',"\t"), - "html":''.join(html_lines).replace('→',"\t"), - "example": example_number, - "start_line": start_line, - "end_line": end_line, - "section": headertext}) - start_line = 0 - markdown_lines = [] - html_lines = [] + l = line.strip() + if l == "`" * 32 + " example": + state = 1 + elif l == "`" * 32: + state = 0 + example_number = example_number + 1 + end_line = line_number + tests.append({ + "markdown":''.join(markdown_lines).replace('→',"\t"), + "html":''.join(html_lines).replace('→',"\t"), + "example": example_number, + "start_line": start_line, + "end_line": end_line, + "section": headertext}) + start_line = 0 + markdown_lines = [] + html_lines = [] + elif l == ".": + state = 2 elif state == 1: if start_line == 0: start_line = line_number - 1 markdown_lines.append(line) elif state == 2: html_lines.append(line) + elif state == 0 and re.match(header_re, line): + headertext = header_re.sub('', line).strip() return tests if __name__ == "__main__": -- cgit 0.0.5-2-1-g0f52 From 64ba9539e97af3cf1a41247ed929492d6dda588d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 10 Jan 2016 21:45:42 -0800 Subject: Updated format of test/smart_punct.txt. --- test/smart_punct.txt | 60 ++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/test/smart_punct.txt b/test/smart_punct.txt index 7dd93940af..3522c94c28 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -4,84 +4,84 @@ Open quotes are matched with closed quotes. The same method is used for matching openers and closers as is used in emphasis parsing: -. +```````````````````````````````` example "Hello," said the spider. "'Shelob' is my name." .

                            “Hello,” said the spider. “‘Shelob’ is my name.”

                            -. +```````````````````````````````` -. +```````````````````````````````` example 'A', 'B', and 'C' are letters. .

                            ‘A’, ‘B’, and ‘C’ are letters.

                            -. +```````````````````````````````` -. +```````````````````````````````` example 'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.' .

                            ‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’

                            -. +```````````````````````````````` -. +```````````````````````````````` example 'He said, "I want to go."' .

                            ‘He said, “I want to go.”’

                            -. +```````````````````````````````` A single quote that isn't an open quote matched with a close quote will be treated as an apostrophe: -. +```````````````````````````````` example Were you alive in the 70's? .

                            Were you alive in the 70’s?

                            -. +```````````````````````````````` -. +```````````````````````````````` example Here is some quoted '`code`' and a "[quoted link](url)". .

                            Here is some quoted ‘code’ and a “quoted link”.

                            -. +```````````````````````````````` Here the first `'` is treated as an apostrophe, not an open quote, because the final single quote is matched by the single quote before `jolly`: -. +```````````````````````````````` example 'tis the season to be 'jolly' .

                            ’tis the season to be ‘jolly’

                            -. +```````````````````````````````` Multiple apostrophes should not be marked as open/closing quotes. -. +```````````````````````````````` example 'We'll use Jane's boat and John's truck,' Jenna said. .

                            ‘We’ll use Jane’s boat and John’s truck,’ Jenna said.

                            -. +```````````````````````````````` An unmatched double quote will be interpreted as a left double quote, to facilitate this style: -. +```````````````````````````````` example "A paragraph with no closing quote. "Second paragraph by same speaker, in fiction." .

                            “A paragraph with no closing quote.

                            “Second paragraph by same speaker, in fiction.”

                            -. +```````````````````````````````` Quotes that are escaped come out as literal straight quotes: -. +```````````````````````````````` example \"This is not smart.\" This isn\'t either. 5\'8\" @@ -89,11 +89,11 @@ This isn\'t either.

                            "This is not smart." This isn't either. 5'8"

                            -. +```````````````````````````````` Two hyphens form an en-dash, three an em-dash. -. +```````````````````````````````` example Some dashes: em---em en--en em --- em @@ -105,7 +105,7 @@ en–en em — em en – en 2–3

                            -. +```````````````````````````````` A sequence of more than three hyphens is parsed as a sequence of em and/or en dashes, @@ -118,7 +118,7 @@ dashes, and as few en dashes as possible are used (so, 7 hyphens = 2 em dashes an 1 en dash). -. +```````````````````````````````` example one- two-- three--- @@ -140,29 +140,29 @@ seven—–– eight–––– nine——— thirteen———––.

                            -. +```````````````````````````````` Hyphens can be escaped: -. +```````````````````````````````` example Escaped hyphens: \-- \-\-\-. .

                            Escaped hyphens: -- ---.

                            -. +```````````````````````````````` Three periods form an ellipsis: -. +```````````````````````````````` example Ellipses...and...and.... .

                            Ellipses…and…and….

                            -. +```````````````````````````````` Periods can be escaped if ellipsis-formation is not wanted: -. +```````````````````````````````` example No ellipses\.\.\. .

                            No ellipses...

                            -. +```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From e384149e683fd6ea950ba9318525563175ca9f47 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 10 Jan 2016 22:58:18 -0800 Subject: html renderer - removed unnecessary check for 'fenced'. It's sufficient to check that the info string is empty. Indeed, those who use the API may well create a code block with an info string without explicitly setting 'fenced'. --- src/html.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/html.c b/src/html.c index 7493596110..54f27bafdc 100644 --- a/src/html.c +++ b/src/html.c @@ -144,7 +144,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE_BLOCK: cr(html); - if (!node->as.code.fenced || node->as.code.info.len == 0) { + if (node->as.code.info.len == 0) { cmark_strbuf_puts(html, ""); -- cgit 0.0.5-2-1-g0f52 From 93843bd2fe8c91fe9e659c5b801f1a7d672dc223 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 10 Jan 2016 23:35:33 -0800 Subject: Added cmark_node_replace(oldnode, newnode). API change. I've found in using the API that this is very often wanted. --- api_test/main.c | 9 ++++++++- man/man3/cmark.3 | 38 +++++++++++++++++++++++--------------- src/cmark.h | 5 +++++ src/node.c | 9 +++++++++ 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 9fe96f28e8..9d3bf840ed 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -359,10 +359,17 @@ static void create_tree(test_batch_runner *runner) { // 1e3 OK(runner, cmark_node_previous(emph) == str1, "ins after2 works"); + cmark_node *str4 = cmark_node_new(CMARK_NODE_TEXT); + cmark_node_set_literal(str4, "brzz"); + OK(runner, cmark_node_replace(str1, str4), "replace"); + INT_EQ(runner, cmark_node_check(doc, NULL), 0, "replace consistent"); + OK(runner, cmark_node_previous(emph) == str4, "replace works"); + INT_EQ(runner, cmark_node_replace(p, str4), 0, "replace str for p fails"); + cmark_node_unlink(emph); html = cmark_render_html(doc, CMARK_OPT_DEFAULT); - STR_EQ(runner, html, "

                            Hello, !

                            \n", "render_html after shuffling"); + STR_EQ(runner, html, "

                            brzz!

                            \n", "render_html after shuffling"); free(html); cmark_node_free(doc); diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 9d619fb15b..f2940999b0 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "December 28, 2015" "LOCAL" "Library Functions Manual" +.TH cmark 3 "January 10, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -28,8 +28,8 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller's responsibility to -assign. +other required properties, which it is the caller\[cq]s responsibility +to assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -286,7 +286,8 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the "tightness" of a list. Returns 1 on success, 0 on failure. +Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on +failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -333,31 +334,31 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal "on enter" text for a custom \f[I]node\f[], or an -empty string if no on_enter is set. +Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP -Sets the literal text to render "on enter" for a custom \f[I]node\f[]. -Any children of the node will be rendered after this text. Returns 1 on -success 0 on failure. +Sets the literal text to render \[lq]on enter\[rq] for a custom +\f[I]node\f[]. Any children of the node will be rendered after this +text. Returns 1 on success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal "on exit" text for a custom \f[I]node\f[], or an -empty string if no on_exit is set. +Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP -Sets the literal text to render "on exit" for a custom \f[I]node\f[]. -Any children of the node will be rendered before this text. Returns 1 on -success 0 on failure. +Sets the literal text to render \[lq]on exit\[rq] for a custom +\f[I]node\f[]. Any children of the node will be rendered before this +text. Returns 1 on success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -407,6 +408,13 @@ on failure. Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on success, 0 on failure. +.PP +\fIint\f[] \fBcmark_node_replace\f[](\fIcmark_node *oldnode\f[], \fIcmark_node *newnode\f[]) + +.PP +Replaces \f[I]oldnode\f[] with \f[I]newnode\f[] and frees the memory +used by \f[I]oldnode\f[]. Returns 1 on success, 0 on failure. + .PP \fIint\f[] \fBcmark_node_prepend_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[]) @@ -624,7 +632,7 @@ with the replacement character U+FFFD. .fi .PP -Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en +Convert straight quotes to curly, \[em] to em dashes, \[en] to en dashes. .SS diff --git a/src/cmark.h b/src/cmark.h index 5f9f294844..6b5c385596 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -387,6 +387,11 @@ CMARK_EXPORT int cmark_node_insert_before(cmark_node *node, */ CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); +/** Replaces 'oldnode' with 'newnode' and frees the memory used by 'oldnode'. + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode); + /** Adds 'child' to the beginning of the children of 'node'. * Returns 1 on success, 0 on failure. */ diff --git a/src/node.c b/src/node.c index ce7f80c872..0fd5573f81 100644 --- a/src/node.c +++ b/src/node.c @@ -730,6 +730,15 @@ int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) { return 1; } +int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) { + if (!cmark_node_insert_before(oldnode, newnode)) { + return 0; + } + cmark_node_unlink(oldnode); + cmark_node_free(oldnode); + return 1; +} + int cmark_node_prepend_child(cmark_node *node, cmark_node *child) { if (!S_can_contain(node, child)) { return 0; -- cgit 0.0.5-2-1-g0f52 From b1dd05c53e677348f3e9722da2429e96a5861e2b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 10:22:43 -0800 Subject: Fixed make_man_page.py so it includes typedefs again. --- man/make_man_page.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/man/make_man_page.py b/man/make_man_page.py index c7060e728e..4b49dbd3ba 100644 --- a/man/make_man_page.py +++ b/man/make_man_page.py @@ -83,9 +83,11 @@ with open(sourcefile, 'r') as cmarkh: state = 'default' elif typedef and typedef_end_re.match(line): typedef = False + elif typedef_start_re.match(line): + typedef = True + state = 'signature' elif state == 'man': state = 'signature' - typedef = typedef_start_re.match(line) # handle line if state == 'man': -- cgit 0.0.5-2-1-g0f52 From 6938efa76d516462483506d66c68df4287cefbda Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 10:23:14 -0800 Subject: cmark.h: moved typedefs for iterator into iterator section. This just moves some code around so it makes more sense to read, and in the man page. --- src/cmark.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index 6b5c385596..dcd7e2c243 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -86,13 +86,6 @@ typedef struct cmark_node cmark_node; typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; -typedef enum { - CMARK_EVENT_NONE, - CMARK_EVENT_DONE, - CMARK_EVENT_ENTER, - CMARK_EVENT_EXIT -} cmark_event_type; - /** * ## Creating and Destroying Nodes */ @@ -178,6 +171,13 @@ CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); * leaf nodes. */ +typedef enum { + CMARK_EVENT_NONE, + CMARK_EVENT_DONE, + CMARK_EVENT_ENTER, + CMARK_EVENT_EXIT +} cmark_event_type; + /** Creates a new iterator starting at 'root'. The current node and event * type are undefined until `cmark_iter_next` is called for the first time. */ -- cgit 0.0.5-2-1-g0f52 From 8bcd1ff32b880b3bb51217ba2eed3d204f4cbae8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 10:23:38 -0800 Subject: Regenerated cmark.3 man page. Now it contains typedefs again. --- man/man3/cmark.3 | 314 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 206 insertions(+), 108 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index f2940999b0..786e3aa450 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "January 10, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "January 11, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -13,13 +13,87 @@ Simple Interface \fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIsize_t len\f[], \fIint options\f[]) .PP -Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length -\f[I]len\f[] from CommonMark Markdown to HTML, returning a +Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with +length \f[I]len\f[] from CommonMark Markdown to HTML, returning a null\-terminated, UTF\-8\-encoded string. .SS Node Structure +.PP +.nf +\fC +.RS 0n +typedef enum { + /* Error status */ + CMARK_NODE_NONE, + + /* Block */ + CMARK_NODE_DOCUMENT, + CMARK_NODE_BLOCK_QUOTE, + CMARK_NODE_LIST, + CMARK_NODE_ITEM, + CMARK_NODE_CODE_BLOCK, + CMARK_NODE_HTML_BLOCK, + CMARK_NODE_CUSTOM_BLOCK, + CMARK_NODE_PARAGRAPH, + CMARK_NODE_HEADING, + CMARK_NODE_THEMATIC_BREAK, + + CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK, + + /* Inline */ + CMARK_NODE_TEXT, + CMARK_NODE_SOFTBREAK, + CMARK_NODE_LINEBREAK, + CMARK_NODE_CODE, + CMARK_NODE_HTML_INLINE, + CMARK_NODE_CUSTOM_INLINE, + CMARK_NODE_EMPH, + CMARK_NODE_STRONG, + CMARK_NODE_LINK, + CMARK_NODE_IMAGE, + + CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, + CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, +} cmark_node_type; +.RE +\f[] +.fi + + + +.PP +.nf +\fC +.RS 0n +typedef enum { + CMARK_NO_LIST, + CMARK_BULLET_LIST, + CMARK_ORDERED_LIST +} cmark_list_type; +.RE +\f[] +.fi + + + +.PP +.nf +\fC +.RS 0n +typedef enum { + CMARK_NO_DELIM, + CMARK_PERIOD_DELIM, + CMARK_PAREN_DELIM +} cmark_delim_type; +.RE +\f[] +.fi + + + .SS Creating and Destroying Nodes @@ -27,9 +101,9 @@ Creating and Destroying Nodes \fIcmark_node *\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[]) .PP -Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller\[cq]s responsibility -to assign. +Creates a new node of type \f[I]type\f[]. Note that the node may +have other required properties, which it is the caller\[cq]s +responsibility to assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -44,15 +118,15 @@ Tree Traversal \fIcmark_node *\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[]) .PP -Returns the next node in the sequence after \f[I]node\f[], or NULL if -there is none. +Returns the next node in the sequence after \f[I]node\f[], or +NULL if there is none. .PP \fIcmark_node *\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[]) .PP -Returns the previous node in the sequence after \f[I]node\f[], or NULL -if there is none. +Returns the previous node in the sequence after \f[I]node\f[], or +NULL if there is none. .PP \fIcmark_node *\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[]) @@ -64,31 +138,33 @@ Returns the parent of \f[I]node\f[], or NULL if there is none. \fIcmark_node *\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[]) .PP -Returns the first child of \f[I]node\f[], or NULL if \f[I]node\f[] has -no children. +Returns the first child of \f[I]node\f[], or NULL if +\f[I]node\f[] has no children. .PP \fIcmark_node *\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[]) .PP -Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] has no -children. +Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] +has no children. .SS Iterator .PP -An iterator will walk through a tree of nodes, starting from a root -node, returning one node at a time, together with information about -whether the node is being entered or exited. The iterator will first -descend to a child node, if there is one. When there is no child, the -iterator will go to the next sibling. When there is no next sibling, the -iterator will return to the parent (but with a \f[I]cmark_event_type\f[] -of \f[C]CMARK_EVENT_EXIT\f[]). The iterator will return -\f[C]CMARK_EVENT_DONE\f[] when it reaches the root node again. One -natural application is an HTML renderer, where an \f[C]ENTER\f[] event -outputs an open tag and an \f[C]EXIT\f[] event outputs a close tag. An -iterator might also be used to transform an AST in some systematic way, -for example, turning all level\-3 headings into regular paragraphs. +An iterator will walk through a tree of nodes, starting from a +root node, returning one node at a time, together with +information about whether the node is being entered or exited. +The iterator will first descend to a child node, if there is one. +When there is no child, the iterator will go to the next sibling. +When there is no next sibling, the iterator will return to the +parent (but with a \f[I]cmark_event_type\f[] of +\f[C]CMARK_EVENT_EXIT\f[]). The iterator will return +\f[C]CMARK_EVENT_DONE\f[] when it reaches the root node again. +One natural application is an HTML renderer, where an +\f[C]ENTER\f[] event outputs an open tag and an \f[C]EXIT\f[] +event outputs a close tag. An iterator might also be used to +transform an AST in some systematic way, for example, turning all +level\-3 headings into regular paragraphs. .IP .nf \f[C] @@ -107,8 +183,8 @@ usage_example(cmark_node *root) { \f[] .fi .PP -Iterators will never return \f[C]EXIT\f[] events for leaf nodes, which -are nodes of type: +Iterators will never return \f[C]EXIT\f[] events for leaf nodes, +which are nodes of type: .IP \[bu] 2 CMARK_NODE_HTML_BLOCK .IP \[bu] 2 @@ -129,13 +205,29 @@ CMARK_NODE_HTML_INLINE Nodes must only be modified after an \f[C]EXIT\f[] event, or an \f[C]ENTER\f[] event for leaf nodes. +.PP +.nf +\fC +.RS 0n +typedef enum { + CMARK_EVENT_NONE, + CMARK_EVENT_DONE, + CMARK_EVENT_ENTER, + CMARK_EVENT_EXIT +} cmark_event_type; +.RE +\f[] +.fi + + + .PP \fIcmark_iter *\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[]) .PP -Creates a new iterator starting at \f[I]root\f[]. The current node and -event type are undefined until \f[C]cmark_iter_next\f[] is called for -the first time. +Creates a new iterator starting at \f[I]root\f[]. The current +node and event type are undefined until \f[C]cmark_iter_next\f[] +is called for the first time. .PP \fIvoid\f[] \fBcmark_iter_free\f[](\fIcmark_iter *iter\f[]) @@ -173,9 +265,9 @@ Returns the root node. \fIvoid\f[] \fBcmark_iter_reset\f[](\fIcmark_iter *iter\f[], \fIcmark_node *current\f[], \fIcmark_event_type event_type\f[]) .PP -Resets the iterator so that the current node is \f[I]current\f[] and the -event type is \f[I]event_type\f[]. The new current node must be a -descendant of the root node or the root node itself. +Resets the iterator so that the current node is \f[I]current\f[] +and the event type is \f[I]event_type\f[]. The new current node +must be a descendant of the root node or the root node itself. .SS Accessors @@ -190,63 +282,64 @@ Returns the user data of \f[I]node\f[]. \fIint\f[] \fBcmark_node_set_user_data\f[](\fIcmark_node *node\f[], \fIvoid *user_data\f[]) .PP -Sets arbitrary user data for \f[I]node\f[]. Returns 1 on success, 0 on -failure. +Sets arbitrary user data for \f[I]node\f[]. Returns 1 on success, +0 on failure. .PP \fIcmark_node_type\f[] \fBcmark_node_get_type\f[](\fIcmark_node *node\f[]) .PP -Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on error. +Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on +error. .PP \fIconst char *\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[]) .PP -Like \f[I]cmark_node_get_type\f[], but returns a string representation -of the type, or \f[C]""\f[]. +Like \f[I]cmark_node_get_type\f[], but returns a string +representation of the type, or \f[C]""\f[]. .PP \fIconst char *\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[]) .PP -Returns the string contents of \f[I]node\f[], or an empty string if none -is set. +Returns the string contents of \f[I]node\f[], or an empty string +if none is set. .PP \fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[]) .PP -Sets the string contents of \f[I]node\f[]. Returns 1 on success, 0 on -failure. +Sets the string contents of \f[I]node\f[]. Returns 1 on success, +0 on failure. .PP \fIint\f[] \fBcmark_node_get_heading_level\f[](\fIcmark_node *node\f[]) .PP -Returns the heading level of \f[I]node\f[], or 0 if \f[I]node\f[] is not -a heading. +Returns the heading level of \f[I]node\f[], or 0 if \f[I]node\f[] +is not a heading. .PP \fIint\f[] \fBcmark_node_set_heading_level\f[](\fIcmark_node *node\f[], \fIint level\f[]) .PP -Sets the heading level of \f[I]node\f[], returning 1 on success and 0 on -error. +Sets the heading level of \f[I]node\f[], returning 1 on success +and 0 on error. .PP \fIcmark_list_type\f[] \fBcmark_node_get_list_type\f[](\fIcmark_node *node\f[]) .PP -Returns the list type of \f[I]node\f[], or \f[C]CMARK_NO_LIST\f[] if -\f[I]node\f[] is not a list. +Returns the list type of \f[I]node\f[], or \f[C]CMARK_NO_LIST\f[] +if \f[I]node\f[] is not a list. .PP \fIint\f[] \fBcmark_node_set_list_type\f[](\fIcmark_node *node\f[], \fIcmark_list_type type\f[]) .PP -Sets the list type of \f[I]node\f[], returning 1 on success and 0 on -error. +Sets the list type of \f[I]node\f[], returning 1 on success and 0 +on error. .PP \fIcmark_delim_type\f[] \fBcmark_node_get_list_delim\f[](\fIcmark_node *node\f[]) @@ -259,22 +352,22 @@ Returns the list delimiter type of \f[I]node\f[], or \fIint\f[] \fBcmark_node_set_list_delim\f[](\fIcmark_node *node\f[], \fIcmark_delim_type delim\f[]) .PP -Sets the list delimiter type of \f[I]node\f[], returning 1 on success -and 0 on error. +Sets the list delimiter type of \f[I]node\f[], returning 1 on +success and 0 on error. .PP \fIint\f[] \fBcmark_node_get_list_start\f[](\fIcmark_node *node\f[]) .PP -Returns starting number of \f[I]node\f[], if it is an ordered list, -otherwise 0. +Returns starting number of \f[I]node\f[], if it is an ordered +list, otherwise 0. .PP \fIint\f[] \fBcmark_node_set_list_start\f[](\fIcmark_node *node\f[], \fIint start\f[]) .PP -Sets starting number of \f[I]node\f[], if it is an ordered list. Returns -1 on success, 0 on failure. +Sets starting number of \f[I]node\f[], if it is an ordered list. +Returns 1 on success, 0 on failure. .PP \fIint\f[] \fBcmark_node_get_list_tight\f[](\fIcmark_node *node\f[]) @@ -286,8 +379,8 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on -failure. +Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 +on failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -299,66 +392,66 @@ Returns the info string from a fenced code block. \fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[]) .PP -Sets the info string in a fenced code block, returning 1 on success and -0 on failure. +Sets the info string in a fenced code block, returning 1 on +success and 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[]) .PP -Returns the URL of a link or image \f[I]node\f[], or an empty string if -no URL is set. +Returns the URL of a link or image \f[I]node\f[], or an empty +string if no URL is set. .PP \fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[]) .PP -Sets the URL of a link or image \f[I]node\f[]. Returns 1 on success, 0 -on failure. +Sets the URL of a link or image \f[I]node\f[]. Returns 1 on +success, 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[]) .PP -Returns the title of a link or image \f[I]node\f[], or an empty string -if no title is set. +Returns the title of a link or image \f[I]node\f[], or an empty +string if no title is set. .PP \fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[]) .PP -Sets the title of a link or image \f[I]node\f[]. Returns 1 on success, 0 -on failure. +Sets the title of a link or image \f[I]node\f[]. Returns 1 on +success, 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_enter is set. +Returns the literal \[lq]on enter\[rq] text for a custom +\f[I]node\f[], or an empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP Sets the literal text to render \[lq]on enter\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered after this -text. Returns 1 on success 0 on failure. +\f[I]node\f[]. Any children of the node will be rendered after +this text. Returns 1 on success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_exit is set. +Returns the literal \[lq]on exit\[rq] text for a custom +\f[I]node\f[], or an empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP Sets the literal text to render \[lq]on exit\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered before this -text. Returns 1 on success 0 on failure. +\f[I]node\f[]. Any children of the node will be rendered before +this text. Returns 1 on success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -391,43 +484,44 @@ Tree Manipulation \fIvoid\f[] \fBcmark_node_unlink\f[](\fIcmark_node *node\f[]) .PP -Unlinks a \f[I]node\f[], removing it from the tree, but not freeing its -memory. (Use \f[I]cmark_node_free\f[] for that.) +Unlinks a \f[I]node\f[], removing it from the tree, but not +freeing its memory. (Use \f[I]cmark_node_free\f[] for that.) .PP \fIint\f[] \fBcmark_node_insert_before\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[]) .PP -Inserts \f[I]sibling\f[] before \f[I]node\f[]. Returns 1 on success, 0 -on failure. +Inserts \f[I]sibling\f[] before \f[I]node\f[]. Returns 1 on +success, 0 on failure. .PP \fIint\f[] \fBcmark_node_insert_after\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[]) .PP -Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on success, 0 on -failure. +Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on +success, 0 on failure. .PP \fIint\f[] \fBcmark_node_replace\f[](\fIcmark_node *oldnode\f[], \fIcmark_node *newnode\f[]) .PP -Replaces \f[I]oldnode\f[] with \f[I]newnode\f[] and frees the memory -used by \f[I]oldnode\f[]. Returns 1 on success, 0 on failure. +Replaces \f[I]oldnode\f[] with \f[I]newnode\f[] and frees the +memory used by \f[I]oldnode\f[]. Returns 1 on success, 0 on +failure. .PP \fIint\f[] \fBcmark_node_prepend_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[]) .PP -Adds \f[I]child\f[] to the beginning of the children of \f[I]node\f[]. -Returns 1 on success, 0 on failure. +Adds \f[I]child\f[] to the beginning of the children of +\f[I]node\f[]. Returns 1 on success, 0 on failure. .PP \fIint\f[] \fBcmark_node_append_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[]) .PP -Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. Returns -1 on success, 0 on failure. +Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. +Returns 1 on success, 0 on failure. .PP \fIvoid\f[] \fBcmark_consolidate_text_nodes\f[](\fIcmark_node *root\f[]) @@ -492,15 +586,15 @@ Finish parsing and return a pointer to a tree of nodes. \fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[]) .PP -Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]. -Returns a pointer to a tree of nodes. +Parse a CommonMark document in \f[I]buffer\f[] of length +\f[I]len\f[]. Returns a pointer to a tree of nodes. .PP \fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[]) .PP -Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a -tree of nodes. +Parse a CommonMark document in file \f[I]f\f[], returning a +pointer to a tree of nodes. .SS Rendering @@ -515,14 +609,15 @@ Render a \f[I]node\f[] tree as XML. \fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP -Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to -add an appropriate header and footer. +Render a \f[I]node\f[] tree as an HTML fragment. It is up to the +user to add an appropriate header and footer. .PP \fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a groff man page, without the header. +Render a \f[I]node\f[] tree as a groff man page, without the +header. .PP \fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) @@ -564,7 +659,8 @@ Options affecting rendering .fi .PP -Include a \f[C]data\-sourcepos\f[] attribute on all block elements. +Include a \f[C]data\-sourcepos\f[] attribute on all block +elements. .PP .nf @@ -589,10 +685,11 @@ Render \f[C]softbreak\f[] elements as hard line breaks. .PP Suppress raw HTML and unsafe links (\f[C]javascript:\f[], -\f[C]vbscript:\f[], \f[C]file:\f[], and \f[C]data:\f[], except for -\f[C]image/png\f[], \f[C]image/gif\f[], \f[C]image/jpeg\f[], or -\f[C]image/webp\f[] mime types). Raw HTML is replaced by a placeholder -HTML comment. Unsafe links are replaced by empty strings. +\f[C]vbscript:\f[], \f[C]file:\f[], and \f[C]data:\f[], except +for \f[C]image/png\f[], \f[C]image/gif\f[], \f[C]image/jpeg\f[], +or \f[C]image/webp\f[] mime types). Raw HTML is replaced by a +placeholder HTML comment. Unsafe links are replaced by empty +strings. .SS Options affecting parsing @@ -619,8 +716,8 @@ Normalize tree by consolidating adjacent text nodes. .fi .PP -Validate UTF\-8 in the input before parsing, replacing illegal sequences -with the replacement character U+FFFD. +Validate UTF\-8 in the input before parsing, replacing illegal +sequences with the replacement character U+FFFD. .PP .nf @@ -642,8 +739,8 @@ Version information \fIint\f[] \fBcmark_version\f[](\fI\f[]) .PP -The library version as integer for runtime checks. Also available as -macro CMARK_VERSION for compile time checks. +The library version as integer for runtime checks. Also available +as macro CMARK_VERSION for compile time checks. .IP \[bu] 2 Bits 16\-23 contain the major version. .IP \[bu] 2 @@ -651,14 +748,15 @@ Bits 8\-15 contain the minor version. .IP \[bu] 2 Bits 0\-7 contain the patchlevel. .PP -In hexadecimal format, the number 0x010203 represents version 1.2.3. +In hexadecimal format, the number 0x010203 represents version +1.2.3. .PP \fIconst char *\f[] \fBcmark_version_string\f[](\fI\f[]) .PP -The library version string for runtime checks. Also available as macro -CMARK_VERSION_STRING for compile time checks. +The library version string for runtime checks. Also available as +macro CMARK_VERSION_STRING for compile time checks. .SH AUTHORS -- cgit 0.0.5-2-1-g0f52 From bdcadff5dfb6f9513b7c109bf1523b6003406c53 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 10:32:30 -0800 Subject: Removed unnecessary call to cmark_node_unlink in cmark_node_replace. --- src/node.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/node.c b/src/node.c index 0fd5573f81..ee1d6c3744 100644 --- a/src/node.c +++ b/src/node.c @@ -734,8 +734,7 @@ int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) { if (!cmark_node_insert_before(oldnode, newnode)) { return 0; } - cmark_node_unlink(oldnode); - cmark_node_free(oldnode); + cmark_node_free(oldnode); // free calls cmark_node_unlink return 1; } -- cgit 0.0.5-2-1-g0f52 From 10d6247fbb2ae7f9c3e4e7e75384bcb990d83464 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 10:52:06 -0800 Subject: Updated spec.txt. Currently there is one failing case. See #97. --- test/spec.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 690d975604..d0575f4f41 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -7120,6 +7120,13 @@ bar>) bar>)

                            ```````````````````````````````` +Parentheses inside the link destination may be escaped: + +```````````````````````````````` example +[link](\(foo\)) +. +

                            link

                            +```````````````````````````````` One level of balanced parentheses is allowed without escaping: @@ -7129,7 +7136,6 @@ One level of balanced parentheses is allowed without escaping:

                            link

                            ```````````````````````````````` - However, if you have parentheses within parentheses, you need to escape or use the `<...>` form: -- cgit 0.0.5-2-1-g0f52 From c9004ffe784577c39b680096883bc8f90524bf8a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 11:04:15 -0800 Subject: Fixed edge case with escaped parens in link destination. Closes #97. This was also checked against the #82 case with asan. --- src/scanners.c | 7947 ++++++++++++++++++++++++++++++------------------------- src/scanners.re | 2 +- 2 files changed, 4273 insertions(+), 3676 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 65ade2ef3a..28821ba76b 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.15.3 */ +/* Generated by re2c 0.14.3 */ #include #include "chunk.h" #include "scanners.h" @@ -28,6 +28,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { { unsigned char yych; + yych = *(marker = p); if (yych <= 0x7F) { if (yych <= ' ') { @@ -2073,14 +2074,14 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy119; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; - if (yych >= ':') - goto yy107; + if (yych <= '9') + goto yy119; + goto yy107; } } else { if (yych <= 'Z') { @@ -2088,61 +2089,62 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; + goto yy119; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy119; + goto yy107; } } yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy107; - if (yych <= '-') - goto yy248; - goto yy120; - } else { - if (yych <= '/') - goto yy107; - if (yych <= '9') - goto yy247; + if (yych <= '9') { + if (yych == '-') + goto yy247; + if (yych <= '/') goto yy107; - } + goto yy248; } else { if (yych <= 'Z') { - if (yych <= '>') - goto yy121; if (yych <= '@') goto yy107; - goto yy247; + goto yy248; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy247; + goto yy248; goto yy107; } } yy119: yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy248; - if (yych <= '/') + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy107; + if (yych <= '-') + goto yy247; + } else { + if (yych <= '/') + goto yy107; + if (yych <= '9') + goto yy248; goto yy107; - goto yy247; + } } else { if (yych <= 'Z') { + if (yych <= '>') + goto yy121; if (yych <= '@') goto yy107; - goto yy247; + goto yy248; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy247; + goto yy248; goto yy107; } } @@ -2174,14 +2176,14 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy125; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; - if (yych >= ':') - goto yy107; + if (yych <= '9') + goto yy125; + goto yy107; } } else { if (yych <= 'Z') { @@ -2189,27 +2191,50 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; + goto yy125; } else { if (yych <= '`') goto yy107; - if (yych >= '{') + if (yych <= 'z') + goto yy125; + goto yy107; + } + } + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy126; + if (yych <= '/') + goto yy107; + goto yy127; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy107; + goto yy127; + } else { + if (yych <= '`') goto yy107; + if (yych <= 'z') + goto yy127; + goto yy107; } } + yy125: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy127; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy126; + goto yy127; goto yy107; } } else { @@ -2218,49 +2243,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy126; + goto yy127; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy126; + goto yy127; goto yy107; } } - yy125: + yy126: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy127; + goto yy128; if (yych <= '/') goto yy107; + goto yy129; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy129; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy129; + goto yy107; } } - yy126: + yy127: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy129; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy128; + goto yy129; goto yy107; } } else { @@ -2269,49 +2296,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy128; + goto yy129; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy128; + goto yy129; goto yy107; } } - yy127: + yy128: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy129; + goto yy130; if (yych <= '/') goto yy107; + goto yy131; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy131; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy131; + goto yy107; } } - yy128: + yy129: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy131; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy130; + goto yy131; goto yy107; } } else { @@ -2320,49 +2349,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy130; + goto yy131; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy130; + goto yy131; goto yy107; } } - yy129: + yy130: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy131; + goto yy132; if (yych <= '/') goto yy107; + goto yy133; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy133; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy133; + goto yy107; } } - yy130: + yy131: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy133; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy132; + goto yy133; goto yy107; } } else { @@ -2371,49 +2402,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy132; + goto yy133; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy132; + goto yy133; goto yy107; } } - yy131: + yy132: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy133; + goto yy134; if (yych <= '/') goto yy107; + goto yy135; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy135; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy135; + goto yy107; } } - yy132: + yy133: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy135; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy134; + goto yy135; goto yy107; } } else { @@ -2422,49 +2455,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy134; + goto yy135; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy134; + goto yy135; goto yy107; } } - yy133: + yy134: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy135; + goto yy136; if (yych <= '/') goto yy107; + goto yy137; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy137; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy137; + goto yy107; } } - yy134: + yy135: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy137; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy136; + goto yy137; goto yy107; } } else { @@ -2473,49 +2508,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy136; + goto yy137; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy136; + goto yy137; goto yy107; } } - yy135: + yy136: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy137; + goto yy138; if (yych <= '/') goto yy107; + goto yy139; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy139; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy139; + goto yy107; } } - yy136: + yy137: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy139; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy138; + goto yy139; goto yy107; } } else { @@ -2524,49 +2561,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy138; + goto yy139; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy138; + goto yy139; goto yy107; } } - yy137: + yy138: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy139; + goto yy140; if (yych <= '/') goto yy107; + goto yy141; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy141; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy141; + goto yy107; } } - yy138: + yy139: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy141; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy140; + goto yy141; goto yy107; } } else { @@ -2575,49 +2614,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy140; + goto yy141; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy140; + goto yy141; goto yy107; } } - yy139: + yy140: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy141; + goto yy142; if (yych <= '/') goto yy107; + goto yy143; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy143; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy143; + goto yy107; } } - yy140: + yy141: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy143; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy142; + goto yy143; goto yy107; } } else { @@ -2626,49 +2667,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy142; + goto yy143; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy142; + goto yy143; goto yy107; } } - yy141: + yy142: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy143; + goto yy144; if (yych <= '/') goto yy107; + goto yy145; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy145; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy145; + goto yy107; } } - yy142: + yy143: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy145; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy144; + goto yy145; goto yy107; } } else { @@ -2677,49 +2720,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy144; + goto yy145; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy144; + goto yy145; goto yy107; } } - yy143: + yy144: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy145; + goto yy146; if (yych <= '/') goto yy107; + goto yy147; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy147; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy147; + goto yy107; } } - yy144: + yy145: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy147; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy146; + goto yy147; goto yy107; } } else { @@ -2728,49 +2773,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy146; + goto yy147; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy146; + goto yy147; goto yy107; } } - yy145: + yy146: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy147; + goto yy148; if (yych <= '/') goto yy107; + goto yy149; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy149; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy149; + goto yy107; } } - yy146: + yy147: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy149; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy148; + goto yy149; goto yy107; } } else { @@ -2779,49 +2826,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy148; + goto yy149; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy148; + goto yy149; goto yy107; } } - yy147: + yy148: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy149; + goto yy150; if (yych <= '/') goto yy107; + goto yy151; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy151; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy151; + goto yy107; } } - yy148: + yy149: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy151; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy150; + goto yy151; goto yy107; } } else { @@ -2830,49 +2879,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy150; + goto yy151; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy150; + goto yy151; goto yy107; } } - yy149: + yy150: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy151; + goto yy152; if (yych <= '/') goto yy107; + goto yy153; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy153; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy153; + goto yy107; } } - yy150: + yy151: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy153; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy152; + goto yy153; goto yy107; } } else { @@ -2881,49 +2932,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy152; + goto yy153; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy152; + goto yy153; goto yy107; } } - yy151: + yy152: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy153; + goto yy154; if (yych <= '/') goto yy107; + goto yy155; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy155; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy155; + goto yy107; } } - yy152: + yy153: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy155; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy154; + goto yy155; goto yy107; } } else { @@ -2932,49 +2985,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy154; + goto yy155; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy154; + goto yy155; goto yy107; } } - yy153: + yy154: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy155; + goto yy156; if (yych <= '/') goto yy107; + goto yy157; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy157; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy157; + goto yy107; } } - yy154: + yy155: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy157; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy156; + goto yy157; goto yy107; } } else { @@ -2983,49 +3038,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy156; + goto yy157; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy156; + goto yy157; goto yy107; } } - yy155: + yy156: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy157; + goto yy158; if (yych <= '/') goto yy107; + goto yy159; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy159; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy159; + goto yy107; } } - yy156: + yy157: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy159; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy158; + goto yy159; goto yy107; } } else { @@ -3034,49 +3091,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy158; + goto yy159; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy158; + goto yy159; goto yy107; } } - yy157: + yy158: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy159; + goto yy160; if (yych <= '/') goto yy107; + goto yy161; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy161; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy161; + goto yy107; } } - yy158: + yy159: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy161; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy160; + goto yy161; goto yy107; } } else { @@ -3085,49 +3144,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy160; + goto yy161; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy160; + goto yy161; goto yy107; } } - yy159: + yy160: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy161; + goto yy162; if (yych <= '/') goto yy107; + goto yy163; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy163; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy163; + goto yy107; } } - yy160: + yy161: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy163; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy162; + goto yy163; goto yy107; } } else { @@ -3136,49 +3197,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy162; + goto yy163; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy162; + goto yy163; goto yy107; } } - yy161: + yy162: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy163; + goto yy164; if (yych <= '/') goto yy107; + goto yy165; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy165; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy165; + goto yy107; } } - yy162: + yy163: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy165; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy164; + goto yy165; goto yy107; } } else { @@ -3187,49 +3250,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy164; + goto yy165; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy164; + goto yy165; goto yy107; } } - yy163: + yy164: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy165; + goto yy166; if (yych <= '/') goto yy107; + goto yy167; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy167; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy167; + goto yy107; } } - yy164: + yy165: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy167; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy166; + goto yy167; goto yy107; } } else { @@ -3238,49 +3303,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy166; + goto yy167; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy166; + goto yy167; goto yy107; } } - yy165: + yy166: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy167; + goto yy168; if (yych <= '/') goto yy107; + goto yy169; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy169; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy169; + goto yy107; } } - yy166: + yy167: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy169; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy168; + goto yy169; goto yy107; } } else { @@ -3289,49 +3356,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy168; + goto yy169; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy168; + goto yy169; goto yy107; } } - yy167: + yy168: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy169; + goto yy170; if (yych <= '/') goto yy107; + goto yy171; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy171; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy171; + goto yy107; } } - yy168: + yy169: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy171; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy170; + goto yy171; goto yy107; } } else { @@ -3340,49 +3409,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy170; + goto yy171; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy170; + goto yy171; goto yy107; } } - yy169: + yy170: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy171; + goto yy172; if (yych <= '/') goto yy107; + goto yy173; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy173; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy173; + goto yy107; } } - yy170: + yy171: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy173; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy172; + goto yy173; goto yy107; } } else { @@ -3391,49 +3462,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy172; + goto yy173; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy172; + goto yy173; goto yy107; } } - yy171: + yy172: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy173; + goto yy174; if (yych <= '/') goto yy107; + goto yy175; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy175; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy175; + goto yy107; } } - yy172: + yy173: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy175; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy174; + goto yy175; goto yy107; } } else { @@ -3442,49 +3515,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy174; + goto yy175; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy174; + goto yy175; goto yy107; } } - yy173: + yy174: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy175; + goto yy176; if (yych <= '/') goto yy107; + goto yy177; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy177; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy177; + goto yy107; } } - yy174: + yy175: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy177; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy176; + goto yy177; goto yy107; } } else { @@ -3493,49 +3568,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy176; + goto yy177; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy176; + goto yy177; goto yy107; } } - yy175: + yy176: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy177; + goto yy178; if (yych <= '/') goto yy107; + goto yy179; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy179; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy179; + goto yy107; } } - yy176: + yy177: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy179; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy178; + goto yy179; goto yy107; } } else { @@ -3544,49 +3621,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy178; + goto yy179; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy178; + goto yy179; goto yy107; } } - yy177: + yy178: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy179; + goto yy180; if (yych <= '/') goto yy107; + goto yy181; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy181; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy181; + goto yy107; } } - yy178: + yy179: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy181; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy180; + goto yy181; goto yy107; } } else { @@ -3595,49 +3674,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy180; + goto yy181; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy180; + goto yy181; goto yy107; } } - yy179: + yy180: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy181; + goto yy182; if (yych <= '/') goto yy107; + goto yy183; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy183; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy183; + goto yy107; } } - yy180: + yy181: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy183; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy182; + goto yy183; goto yy107; } } else { @@ -3646,49 +3727,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy182; + goto yy183; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy182; + goto yy183; goto yy107; } } - yy181: + yy182: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy183; + goto yy184; if (yych <= '/') goto yy107; + goto yy185; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy185; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy185; + goto yy107; } } - yy182: + yy183: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy185; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy184; + goto yy185; goto yy107; } } else { @@ -3697,49 +3780,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy184; + goto yy185; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy184; + goto yy185; goto yy107; } } - yy183: + yy184: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy185; + goto yy186; if (yych <= '/') goto yy107; + goto yy187; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy187; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy187; + goto yy107; } } - yy184: + yy185: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy187; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy186; + goto yy187; goto yy107; } } else { @@ -3748,49 +3833,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy186; + goto yy187; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy186; + goto yy187; goto yy107; } } - yy185: + yy186: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy187; + goto yy188; if (yych <= '/') goto yy107; + goto yy189; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy189; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy189; + goto yy107; } } - yy186: + yy187: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy189; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy188; + goto yy189; goto yy107; } } else { @@ -3799,49 +3886,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy188; + goto yy189; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy188; + goto yy189; goto yy107; } } - yy187: + yy188: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy189; + goto yy190; if (yych <= '/') goto yy107; + goto yy191; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy191; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy191; + goto yy107; } } - yy188: + yy189: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy191; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy190; + goto yy191; goto yy107; } } else { @@ -3850,49 +3939,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy190; + goto yy191; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy190; + goto yy191; goto yy107; } } - yy189: + yy190: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy191; + goto yy192; if (yych <= '/') goto yy107; + goto yy193; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy193; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy193; + goto yy107; } } - yy190: + yy191: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy193; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy192; + goto yy193; goto yy107; } } else { @@ -3901,49 +3992,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy192; + goto yy193; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy192; + goto yy193; goto yy107; } } - yy191: + yy192: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy193; + goto yy194; if (yych <= '/') goto yy107; + goto yy195; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy195; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy195; + goto yy107; } } - yy192: + yy193: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy195; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy194; + goto yy195; goto yy107; } } else { @@ -3952,49 +4045,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy194; + goto yy195; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy194; + goto yy195; goto yy107; } } - yy193: + yy194: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy195; + goto yy196; if (yych <= '/') goto yy107; + goto yy197; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy197; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy197; + goto yy107; } } - yy194: + yy195: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy197; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy196; + goto yy197; goto yy107; } } else { @@ -4003,49 +4098,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy196; + goto yy197; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy196; + goto yy197; goto yy107; } } - yy195: + yy196: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy197; + goto yy198; if (yych <= '/') goto yy107; + goto yy199; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy199; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy199; + goto yy107; } } - yy196: + yy197: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy199; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy198; + goto yy199; goto yy107; } } else { @@ -4054,49 +4151,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy198; + goto yy199; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy198; + goto yy199; goto yy107; } } - yy197: + yy198: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy199; + goto yy200; if (yych <= '/') goto yy107; + goto yy201; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy201; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy201; + goto yy107; } } - yy198: + yy199: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy201; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy200; + goto yy201; goto yy107; } } else { @@ -4105,49 +4204,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy200; + goto yy201; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy200; + goto yy201; goto yy107; } } - yy199: + yy200: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy201; + goto yy202; if (yych <= '/') goto yy107; + goto yy203; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy203; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy203; + goto yy107; } } - yy200: + yy201: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy203; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy202; + goto yy203; goto yy107; } } else { @@ -4156,49 +4257,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy202; + goto yy203; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy202; + goto yy203; goto yy107; } } - yy201: + yy202: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy203; + goto yy204; if (yych <= '/') goto yy107; + goto yy205; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy205; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy205; + goto yy107; } } - yy202: + yy203: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy205; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy204; + goto yy205; goto yy107; } } else { @@ -4207,49 +4310,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy204; + goto yy205; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy204; + goto yy205; goto yy107; } } - yy203: + yy204: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy205; + goto yy206; if (yych <= '/') goto yy107; + goto yy207; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy207; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy207; + goto yy107; } } - yy204: + yy205: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy207; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy206; + goto yy207; goto yy107; } } else { @@ -4258,49 +4363,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy206; + goto yy207; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy206; + goto yy207; goto yy107; } } - yy205: + yy206: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy207; + goto yy208; if (yych <= '/') goto yy107; + goto yy209; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy209; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy209; + goto yy107; } } - yy206: + yy207: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy209; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy208; + goto yy209; goto yy107; } } else { @@ -4309,49 +4416,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy208; + goto yy209; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy208; + goto yy209; goto yy107; } } - yy207: + yy208: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy209; + goto yy210; if (yych <= '/') goto yy107; + goto yy211; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy211; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy211; + goto yy107; } } - yy208: + yy209: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy211; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy210; + goto yy211; goto yy107; } } else { @@ -4360,49 +4469,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy210; + goto yy211; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy210; + goto yy211; goto yy107; } } - yy209: + yy210: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy211; + goto yy212; if (yych <= '/') goto yy107; + goto yy213; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy213; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy213; + goto yy107; } } - yy210: + yy211: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy213; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy212; + goto yy213; goto yy107; } } else { @@ -4411,49 +4522,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy212; + goto yy213; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy212; + goto yy213; goto yy107; } } - yy211: + yy212: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy213; + goto yy214; if (yych <= '/') goto yy107; + goto yy215; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy215; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy215; + goto yy107; } } - yy212: + yy213: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy215; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy214; + goto yy215; goto yy107; } } else { @@ -4462,49 +4575,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy214; + goto yy215; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy214; + goto yy215; goto yy107; } } - yy213: + yy214: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy215; + goto yy216; if (yych <= '/') goto yy107; + goto yy217; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy217; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy217; + goto yy107; } } - yy214: + yy215: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy217; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy216; + goto yy217; goto yy107; } } else { @@ -4513,49 +4628,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy216; + goto yy217; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy216; + goto yy217; goto yy107; } } - yy215: + yy216: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy217; + goto yy218; if (yych <= '/') goto yy107; + goto yy219; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy219; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy219; + goto yy107; } } - yy216: + yy217: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy219; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy218; + goto yy219; goto yy107; } } else { @@ -4564,49 +4681,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy218; + goto yy219; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy218; + goto yy219; goto yy107; } } - yy217: + yy218: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy219; + goto yy220; if (yych <= '/') goto yy107; + goto yy221; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy221; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy221; + goto yy107; } } - yy218: + yy219: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy221; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy220; + goto yy221; goto yy107; } } else { @@ -4615,49 +4734,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy220; + goto yy221; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy220; + goto yy221; goto yy107; } } - yy219: + yy220: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy221; + goto yy222; if (yych <= '/') goto yy107; + goto yy223; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy223; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy223; + goto yy107; } } - yy220: + yy221: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy223; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy222; + goto yy223; goto yy107; } } else { @@ -4666,49 +4787,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy222; + goto yy223; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy222; + goto yy223; goto yy107; } } - yy221: + yy222: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy223; + goto yy224; if (yych <= '/') goto yy107; + goto yy225; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy225; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy225; + goto yy107; } } - yy222: + yy223: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy225; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy224; + goto yy225; goto yy107; } } else { @@ -4717,49 +4840,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy224; + goto yy225; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy224; + goto yy225; goto yy107; } } - yy223: + yy224: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy225; + goto yy226; if (yych <= '/') goto yy107; + goto yy227; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy227; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy227; + goto yy107; } } - yy224: + yy225: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy227; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy226; + goto yy227; goto yy107; } } else { @@ -4768,49 +4893,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy226; + goto yy227; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy226; + goto yy227; goto yy107; } } - yy225: + yy226: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy227; + goto yy228; if (yych <= '/') goto yy107; + goto yy229; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy229; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy229; + goto yy107; } } - yy226: + yy227: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy229; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy228; + goto yy229; goto yy107; } } else { @@ -4819,49 +4946,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy228; + goto yy229; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy228; + goto yy229; goto yy107; } } - yy227: + yy228: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy229; + goto yy230; if (yych <= '/') goto yy107; + goto yy231; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy231; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy231; + goto yy107; } } - yy228: + yy229: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy231; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy230; + goto yy231; goto yy107; } } else { @@ -4870,49 +4999,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy230; + goto yy231; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy230; + goto yy231; goto yy107; } } - yy229: + yy230: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy231; + goto yy232; if (yych <= '/') goto yy107; + goto yy233; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy233; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy233; + goto yy107; } } - yy230: + yy231: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy233; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy232; + goto yy233; goto yy107; } } else { @@ -4921,49 +5052,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy232; + goto yy233; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy232; + goto yy233; goto yy107; } } - yy231: + yy232: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy233; + goto yy234; if (yych <= '/') goto yy107; + goto yy235; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy235; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy235; + goto yy107; } } - yy232: + yy233: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy235; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy234; + goto yy235; goto yy107; } } else { @@ -4972,49 +5105,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy234; + goto yy235; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy234; + goto yy235; goto yy107; } } - yy233: + yy234: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy235; + goto yy236; if (yych <= '/') goto yy107; + goto yy237; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy237; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy237; + goto yy107; } } - yy234: + yy235: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy237; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy236; + goto yy237; goto yy107; } } else { @@ -5023,49 +5158,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy236; + goto yy237; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy236; + goto yy237; goto yy107; } } - yy235: + yy236: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy237; + goto yy238; if (yych <= '/') goto yy107; + goto yy239; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy239; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy239; + goto yy107; } } - yy236: + yy237: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy239; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy238; + goto yy239; goto yy107; } } else { @@ -5074,49 +5211,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy238; + goto yy239; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy238; + goto yy239; goto yy107; } } - yy237: + yy238: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy239; + goto yy240; if (yych <= '/') goto yy107; + goto yy241; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy241; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy241; + goto yy107; } } - yy238: + yy239: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy241; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy240; + goto yy241; goto yy107; } } else { @@ -5125,49 +5264,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy240; + goto yy241; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy240; + goto yy241; goto yy107; } } - yy239: + yy240: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy241; + goto yy242; if (yych <= '/') goto yy107; + goto yy243; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy243; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy243; + goto yy107; } } - yy240: + yy241: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy243; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy242; + goto yy243; goto yy107; } } else { @@ -5176,49 +5317,51 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy242; + goto yy243; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy242; + goto yy243; goto yy107; } } - yy241: + yy242: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy243; + goto yy244; if (yych <= '/') goto yy107; + goto yy245; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy245; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy245; + goto yy107; } } - yy242: + yy243: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy245; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy244; + goto yy245; goto yy107; } } else { @@ -5227,35 +5370,34 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy244; + goto yy245; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy244; + goto yy245; goto yy107; } } - yy243: + yy244: ++p; yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy245; + if (yych <= '@') { if (yych <= '/') goto yy107; + if (yych <= '9') + goto yy246; + goto yy107; } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy107; - } else { - if (yych <= '`') - goto yy107; - if (yych >= '{') - goto yy107; - } + if (yych <= 'Z') + goto yy246; + if (yych <= '`') + goto yy107; + if (yych <= 'z') + goto yy246; + goto yy107; } - yy244: + yy245: ++p; yych = *p; if (yych <= '=') { @@ -5266,9 +5408,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } else { if (yych <= '/') goto yy107; - if (yych <= '9') - goto yy246; - goto yy107; + if (yych >= ':') + goto yy107; } } else { if (yych <= 'Z') { @@ -5276,31 +5417,13 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy246; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy246; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy245: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy107; - if (yych >= ':') - goto yy107; - } else { - if (yych <= 'Z') - goto yy246; - if (yych <= '`') - goto yy107; - if (yych >= '{') - goto yy107; - } yy246: ++p; yych = *p; @@ -5311,18 +5434,38 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy107; yy247: yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy107; - if (yych <= '-') - goto yy250; - goto yy120; + if (yych <= '9') { + if (yych == '-') + goto yy249; + if (yych <= '/') + goto yy107; + goto yy250; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy107; + goto yy250; + } else { + if (yych <= '`') + goto yy107; + if (yych <= 'z') + goto yy250; + goto yy107; + } + } + yy248: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy107; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy249; + goto yy250; goto yy107; } } else { @@ -5331,47 +5474,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy249; + goto yy250; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy249; + goto yy250; goto yy107; } } - yy248: + yy249: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy250; + goto yy251; if (yych <= '/') goto yy107; + goto yy252; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy252; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy252; + goto yy107; } } - yy249: + yy250: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy252; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy251; + goto yy252; goto yy107; } } else { @@ -5380,47 +5525,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy251; + goto yy252; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy251; + goto yy252; goto yy107; } } - yy250: + yy251: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy252; + goto yy253; if (yych <= '/') goto yy107; + goto yy254; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy254; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy254; + goto yy107; } } - yy251: + yy252: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy254; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy253; + goto yy254; goto yy107; } } else { @@ -5429,47 +5576,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy253; + goto yy254; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy253; + goto yy254; goto yy107; } } - yy252: + yy253: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy254; + goto yy255; if (yych <= '/') goto yy107; + goto yy256; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy256; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy256; + goto yy107; } } - yy253: + yy254: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy256; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy255; + goto yy256; goto yy107; } } else { @@ -5478,47 +5627,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy255; + goto yy256; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy255; + goto yy256; goto yy107; } } - yy254: + yy255: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy256; + goto yy257; if (yych <= '/') goto yy107; + goto yy258; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy258; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy258; + goto yy107; } } - yy255: + yy256: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy258; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy257; + goto yy258; goto yy107; } } else { @@ -5527,47 +5678,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy257; + goto yy258; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy257; + goto yy258; goto yy107; } } - yy256: + yy257: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy258; + goto yy259; if (yych <= '/') goto yy107; + goto yy260; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy260; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy260; + goto yy107; } } - yy257: + yy258: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy260; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy259; + goto yy260; goto yy107; } } else { @@ -5576,47 +5729,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy259; + goto yy260; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy259; + goto yy260; goto yy107; } } - yy258: + yy259: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy260; + goto yy261; if (yych <= '/') goto yy107; + goto yy262; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy262; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy262; + goto yy107; } } - yy259: + yy260: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy262; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy261; + goto yy262; goto yy107; } } else { @@ -5625,47 +5780,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy261; + goto yy262; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy261; + goto yy262; goto yy107; } } - yy260: + yy261: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy262; + goto yy263; if (yych <= '/') goto yy107; + goto yy264; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy264; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy264; + goto yy107; } } - yy261: + yy262: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy264; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy263; + goto yy264; goto yy107; } } else { @@ -5674,47 +5831,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy263; + goto yy264; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy263; + goto yy264; goto yy107; } } - yy262: + yy263: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy264; + goto yy265; if (yych <= '/') goto yy107; + goto yy266; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy266; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy266; + goto yy107; } } - yy263: + yy264: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy266; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy265; + goto yy266; goto yy107; } } else { @@ -5723,47 +5882,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy265; + goto yy266; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy265; + goto yy266; goto yy107; } } - yy264: + yy265: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy266; + goto yy267; if (yych <= '/') goto yy107; + goto yy268; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy268; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy268; + goto yy107; } } - yy265: + yy266: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy268; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy267; + goto yy268; goto yy107; } } else { @@ -5772,47 +5933,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy267; + goto yy268; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy267; + goto yy268; goto yy107; } } - yy266: + yy267: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy268; + goto yy269; if (yych <= '/') goto yy107; + goto yy270; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy270; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy270; + goto yy107; } } - yy267: + yy268: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy270; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy269; + goto yy270; goto yy107; } } else { @@ -5821,47 +5984,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy269; + goto yy270; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy269; + goto yy270; goto yy107; } } - yy268: + yy269: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy270; + goto yy271; if (yych <= '/') goto yy107; + goto yy272; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy272; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy272; + goto yy107; } } - yy269: + yy270: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy272; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy271; + goto yy272; goto yy107; } } else { @@ -5870,47 +6035,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy271; + goto yy272; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy271; + goto yy272; goto yy107; } } - yy270: + yy271: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy272; + goto yy273; if (yych <= '/') goto yy107; + goto yy274; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy274; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy274; + goto yy107; } } - yy271: + yy272: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy274; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy273; + goto yy274; goto yy107; } } else { @@ -5919,47 +6086,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy273; + goto yy274; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy273; + goto yy274; goto yy107; } } - yy272: + yy273: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy274; + goto yy275; if (yych <= '/') goto yy107; + goto yy276; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy276; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy276; + goto yy107; } } - yy273: + yy274: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy276; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy275; + goto yy276; goto yy107; } } else { @@ -5968,47 +6137,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy275; + goto yy276; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy275; + goto yy276; goto yy107; } } - yy274: + yy275: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy276; + goto yy277; if (yych <= '/') goto yy107; + goto yy278; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy278; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy278; + goto yy107; } } - yy275: + yy276: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy278; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy277; + goto yy278; goto yy107; } } else { @@ -6017,47 +6188,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy277; + goto yy278; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy277; + goto yy278; goto yy107; } } - yy276: + yy277: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy278; + goto yy279; if (yych <= '/') goto yy107; + goto yy280; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy280; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy280; + goto yy107; } } - yy277: + yy278: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy280; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy279; + goto yy280; goto yy107; } } else { @@ -6066,47 +6239,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy279; + goto yy280; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy279; + goto yy280; goto yy107; } } - yy278: + yy279: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy280; + goto yy281; if (yych <= '/') goto yy107; + goto yy282; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy282; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy282; + goto yy107; } } - yy279: + yy280: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy282; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy281; + goto yy282; goto yy107; } } else { @@ -6115,47 +6290,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy281; + goto yy282; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy281; + goto yy282; goto yy107; } } - yy280: + yy281: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy282; + goto yy283; if (yych <= '/') goto yy107; + goto yy284; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy284; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy284; + goto yy107; } } - yy281: + yy282: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy284; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy283; + goto yy284; goto yy107; } } else { @@ -6164,47 +6341,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy283; + goto yy284; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy283; + goto yy284; goto yy107; } } - yy282: + yy283: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy284; + goto yy285; if (yych <= '/') goto yy107; + goto yy286; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy286; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy286; + goto yy107; } } - yy283: + yy284: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy286; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy285; + goto yy286; goto yy107; } } else { @@ -6213,47 +6392,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy285; + goto yy286; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy285; + goto yy286; goto yy107; } } - yy284: + yy285: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy286; + goto yy287; if (yych <= '/') goto yy107; + goto yy288; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy288; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy288; + goto yy107; } } - yy285: + yy286: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy288; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy287; + goto yy288; goto yy107; } } else { @@ -6262,47 +6443,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy287; + goto yy288; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy287; + goto yy288; goto yy107; } } - yy286: + yy287: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy288; + goto yy289; if (yych <= '/') goto yy107; + goto yy290; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy290; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy290; + goto yy107; } } - yy287: + yy288: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy290; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy289; + goto yy290; goto yy107; } } else { @@ -6311,47 +6494,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy289; + goto yy290; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy289; + goto yy290; goto yy107; } } - yy288: + yy289: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy290; + goto yy291; if (yych <= '/') goto yy107; + goto yy292; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy292; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy292; + goto yy107; } } - yy289: + yy290: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy292; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy291; + goto yy292; goto yy107; } } else { @@ -6360,47 +6545,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy291; + goto yy292; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy291; + goto yy292; goto yy107; } } - yy290: + yy291: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy292; + goto yy293; if (yych <= '/') goto yy107; + goto yy294; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy294; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy294; + goto yy107; } } - yy291: + yy292: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy294; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy293; + goto yy294; goto yy107; } } else { @@ -6409,47 +6596,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy293; + goto yy294; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy293; + goto yy294; goto yy107; } } - yy292: + yy293: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy294; + goto yy295; if (yych <= '/') goto yy107; + goto yy296; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy296; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy296; + goto yy107; } } - yy293: + yy294: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy296; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy295; + goto yy296; goto yy107; } } else { @@ -6458,47 +6647,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy295; + goto yy296; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy295; + goto yy296; goto yy107; } } - yy294: + yy295: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy296; + goto yy297; if (yych <= '/') goto yy107; + goto yy298; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy298; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy298; + goto yy107; } } - yy295: + yy296: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy298; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy297; + goto yy298; goto yy107; } } else { @@ -6507,47 +6698,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy297; + goto yy298; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy297; + goto yy298; goto yy107; } } - yy296: + yy297: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy298; + goto yy299; if (yych <= '/') goto yy107; + goto yy300; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy300; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy300; + goto yy107; } } - yy297: + yy298: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy300; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy299; + goto yy300; goto yy107; } } else { @@ -6556,47 +6749,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy299; + goto yy300; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy299; + goto yy300; goto yy107; } } - yy298: + yy299: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy300; + goto yy301; if (yych <= '/') goto yy107; + goto yy302; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy302; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; - } - } - yy299: + if (yych <= 'z') + goto yy302; + goto yy107; + } + } + yy300: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy302; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy301; + goto yy302; goto yy107; } } else { @@ -6605,47 +6800,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy301; + goto yy302; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy301; + goto yy302; goto yy107; } } - yy300: + yy301: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy302; + goto yy303; if (yych <= '/') goto yy107; + goto yy304; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy304; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy304; + goto yy107; } } - yy301: + yy302: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy304; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy303; + goto yy304; goto yy107; } } else { @@ -6654,47 +6851,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy303; + goto yy304; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy303; + goto yy304; goto yy107; } } - yy302: + yy303: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy304; + goto yy305; if (yych <= '/') goto yy107; + goto yy306; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy306; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy306; + goto yy107; } } - yy303: + yy304: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy306; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy305; + goto yy306; goto yy107; } } else { @@ -6703,47 +6902,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy305; + goto yy306; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy305; + goto yy306; goto yy107; } } - yy304: + yy305: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy306; + goto yy307; if (yych <= '/') goto yy107; + goto yy308; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy308; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy308; + goto yy107; } } - yy305: + yy306: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy308; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy307; + goto yy308; goto yy107; } } else { @@ -6752,47 +6953,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy307; + goto yy308; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy307; + goto yy308; goto yy107; } } - yy306: + yy307: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy308; + goto yy309; if (yych <= '/') goto yy107; + goto yy310; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy310; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy310; + goto yy107; } } - yy307: + yy308: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy310; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy309; + goto yy310; goto yy107; } } else { @@ -6801,47 +7004,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy309; + goto yy310; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy309; + goto yy310; goto yy107; } } - yy308: + yy309: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy310; + goto yy311; if (yych <= '/') goto yy107; + goto yy312; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy312; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy312; + goto yy107; } } - yy309: + yy310: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy312; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy311; + goto yy312; goto yy107; } } else { @@ -6850,47 +7055,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy311; + goto yy312; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy311; + goto yy312; goto yy107; } } - yy310: + yy311: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy312; + goto yy313; if (yych <= '/') goto yy107; + goto yy314; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy314; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy314; + goto yy107; } } - yy311: + yy312: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy314; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy313; + goto yy314; goto yy107; } } else { @@ -6899,47 +7106,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy313; + goto yy314; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy313; + goto yy314; goto yy107; } } - yy312: + yy313: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy314; + goto yy315; if (yych <= '/') goto yy107; + goto yy316; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy316; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy316; + goto yy107; } } - yy313: + yy314: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy316; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy315; + goto yy316; goto yy107; } } else { @@ -6948,47 +7157,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy315; + goto yy316; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy315; + goto yy316; goto yy107; } } - yy314: + yy315: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy316; + goto yy317; if (yych <= '/') goto yy107; + goto yy318; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy318; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy318; + goto yy107; } } - yy315: + yy316: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy318; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy317; + goto yy318; goto yy107; } } else { @@ -6997,47 +7208,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy317; + goto yy318; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy317; + goto yy318; goto yy107; } } - yy316: + yy317: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy318; + goto yy319; if (yych <= '/') goto yy107; + goto yy320; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy320; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy320; + goto yy107; } } - yy317: + yy318: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy320; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy319; + goto yy320; goto yy107; } } else { @@ -7046,47 +7259,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy319; + goto yy320; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy319; + goto yy320; goto yy107; } } - yy318: + yy319: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy320; + goto yy321; if (yych <= '/') goto yy107; + goto yy322; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy322; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy322; + goto yy107; } } - yy319: + yy320: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy322; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy321; + goto yy322; goto yy107; } } else { @@ -7095,47 +7310,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy321; + goto yy322; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy321; + goto yy322; goto yy107; } } - yy320: + yy321: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy322; + goto yy323; if (yych <= '/') goto yy107; + goto yy324; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy324; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy324; + goto yy107; } } - yy321: + yy322: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy324; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy323; + goto yy324; goto yy107; } } else { @@ -7144,47 +7361,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy323; + goto yy324; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy323; + goto yy324; goto yy107; } } - yy322: + yy323: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy324; + goto yy325; if (yych <= '/') goto yy107; + goto yy326; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy326; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy326; + goto yy107; } } - yy323: + yy324: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy326; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy325; + goto yy326; goto yy107; } } else { @@ -7193,47 +7412,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy325; + goto yy326; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy325; + goto yy326; goto yy107; } } - yy324: + yy325: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy326; + goto yy327; if (yych <= '/') goto yy107; + goto yy328; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy328; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy328; + goto yy107; } } - yy325: + yy326: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy328; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy327; + goto yy328; goto yy107; } } else { @@ -7242,47 +7463,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy327; + goto yy328; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy327; + goto yy328; goto yy107; } } - yy326: + yy327: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy328; + goto yy329; if (yych <= '/') goto yy107; + goto yy330; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy330; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy330; + goto yy107; } } - yy327: + yy328: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy330; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy329; + goto yy330; goto yy107; } } else { @@ -7291,47 +7514,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy329; + goto yy330; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy329; + goto yy330; goto yy107; } } - yy328: + yy329: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy330; + goto yy331; if (yych <= '/') goto yy107; + goto yy332; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy332; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy332; + goto yy107; } } - yy329: + yy330: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy332; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy331; + goto yy332; goto yy107; } } else { @@ -7340,47 +7565,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy331; + goto yy332; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy331; + goto yy332; goto yy107; } } - yy330: + yy331: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy332; + goto yy333; if (yych <= '/') goto yy107; + goto yy334; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy334; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy334; + goto yy107; } } - yy331: + yy332: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy334; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy333; + goto yy334; goto yy107; } } else { @@ -7389,47 +7616,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy333; + goto yy334; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy333; + goto yy334; goto yy107; } } - yy332: + yy333: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy334; + goto yy335; if (yych <= '/') goto yy107; + goto yy336; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy336; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy336; + goto yy107; } } - yy333: + yy334: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy336; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy335; + goto yy336; goto yy107; } } else { @@ -7438,47 +7667,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy335; + goto yy336; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy335; + goto yy336; goto yy107; } } - yy334: + yy335: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy336; + goto yy337; if (yych <= '/') goto yy107; + goto yy338; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy338; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy338; + goto yy107; } } - yy335: + yy336: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy338; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy337; + goto yy338; goto yy107; } } else { @@ -7487,47 +7718,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy337; + goto yy338; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy337; + goto yy338; goto yy107; } } - yy336: + yy337: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy338; + goto yy339; if (yych <= '/') goto yy107; + goto yy340; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy340; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy340; + goto yy107; } } - yy337: + yy338: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy340; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy339; + goto yy340; goto yy107; } } else { @@ -7536,47 +7769,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy339; + goto yy340; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy339; + goto yy340; goto yy107; } } - yy338: + yy339: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy340; + goto yy341; if (yych <= '/') goto yy107; + goto yy342; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy342; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy342; + goto yy107; } } - yy339: + yy340: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy342; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy341; + goto yy342; goto yy107; } } else { @@ -7585,47 +7820,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy341; + goto yy342; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy341; + goto yy342; goto yy107; } } - yy340: + yy341: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy342; + goto yy343; if (yych <= '/') goto yy107; + goto yy344; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy344; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy344; + goto yy107; } } - yy341: + yy342: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy344; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy343; + goto yy344; goto yy107; } } else { @@ -7634,47 +7871,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy343; + goto yy344; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy343; + goto yy344; goto yy107; } } - yy342: + yy343: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy344; + goto yy345; if (yych <= '/') goto yy107; + goto yy346; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy346; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy346; + goto yy107; } } - yy343: + yy344: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy346; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy345; + goto yy346; goto yy107; } } else { @@ -7683,47 +7922,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy345; + goto yy346; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy345; + goto yy346; goto yy107; } } - yy344: + yy345: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy346; + goto yy347; if (yych <= '/') goto yy107; + goto yy348; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy348; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy348; + goto yy107; } } - yy345: + yy346: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy348; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy347; + goto yy348; goto yy107; } } else { @@ -7732,47 +7973,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy347; + goto yy348; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy347; + goto yy348; goto yy107; } } - yy346: + yy347: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy348; + goto yy349; if (yych <= '/') goto yy107; + goto yy350; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy350; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy350; + goto yy107; } } - yy347: + yy348: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy350; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy349; + goto yy350; goto yy107; } } else { @@ -7781,47 +8024,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy349; + goto yy350; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy349; + goto yy350; goto yy107; } } - yy348: + yy349: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy350; + goto yy351; if (yych <= '/') goto yy107; + goto yy352; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy352; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy352; + goto yy107; } } - yy349: + yy350: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy352; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy351; + goto yy352; goto yy107; } } else { @@ -7830,47 +8075,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy351; + goto yy352; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy351; + goto yy352; goto yy107; } } - yy350: + yy351: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy352; + goto yy353; if (yych <= '/') goto yy107; + goto yy354; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy354; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy354; + goto yy107; } } - yy351: + yy352: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy354; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy353; + goto yy354; goto yy107; } } else { @@ -7879,47 +8126,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy353; + goto yy354; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy353; + goto yy354; goto yy107; } } - yy352: + yy353: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy354; + goto yy355; if (yych <= '/') goto yy107; + goto yy356; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy356; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy356; + goto yy107; } } - yy353: + yy354: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy356; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy355; + goto yy356; goto yy107; } } else { @@ -7928,47 +8177,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy355; + goto yy356; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy355; + goto yy356; goto yy107; } } - yy354: + yy355: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy356; + goto yy357; if (yych <= '/') goto yy107; + goto yy358; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy358; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy358; + goto yy107; } } - yy355: + yy356: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy358; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy357; + goto yy358; goto yy107; } } else { @@ -7977,47 +8228,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy357; + goto yy358; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy357; + goto yy358; goto yy107; } } - yy356: + yy357: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy358; + goto yy359; if (yych <= '/') goto yy107; + goto yy360; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy360; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy360; + goto yy107; } } - yy357: + yy358: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy360; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy359; + goto yy360; goto yy107; } } else { @@ -8026,47 +8279,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy359; + goto yy360; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy359; + goto yy360; goto yy107; } } - yy358: + yy359: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy360; + goto yy361; if (yych <= '/') goto yy107; + goto yy362; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy362; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy362; + goto yy107; } } - yy359: + yy360: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy362; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy361; + goto yy362; goto yy107; } } else { @@ -8075,47 +8330,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy361; + goto yy362; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy361; + goto yy362; goto yy107; } } - yy360: + yy361: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy362; + goto yy363; if (yych <= '/') goto yy107; + goto yy364; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy364; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy364; + goto yy107; } } - yy361: + yy362: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy364; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy363; + goto yy364; goto yy107; } } else { @@ -8124,47 +8381,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy363; + goto yy364; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy363; + goto yy364; goto yy107; } } - yy362: + yy363: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy364; + goto yy365; if (yych <= '/') goto yy107; + goto yy366; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; + goto yy366; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy366; + goto yy107; } } - yy363: + yy364: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych <= '-') - goto yy366; - goto yy120; + if (yych >= '.') + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy365; + goto yy366; goto yy107; } } else { @@ -8173,36 +8432,35 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy365; + goto yy366; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy365; + goto yy366; goto yy107; } } - yy364: + yy365: yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy366; + if (yych <= '@') { if (yych <= '/') goto yy107; + if (yych <= '9') + goto yy246; + goto yy107; } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy107; - } else { - if (yych <= '`') - goto yy107; - if (yych >= '{') - goto yy107; - } + if (yych <= 'Z') + goto yy246; + if (yych <= '`') + goto yy107; + if (yych <= 'z') + goto yy246; + goto yy107; } - yy365: - yych = *++p; - if (yych <= '=') { + yy366: + ++p; + if ((yych = *p) <= '=') { if (yych <= '.') { if (yych <= '-') goto yy107; @@ -8229,23 +8487,6 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy107; } } - yy366: - ++p; - if ((yych = *p) <= '@') { - if (yych <= '/') - goto yy107; - if (yych <= '9') - goto yy246; - goto yy107; - } else { - if (yych <= 'Z') - goto yy246; - if (yych <= '`') - goto yy107; - if (yych <= 'z') - goto yy246; - goto yy107; - } } } @@ -8258,45 +8499,37 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, + 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, - 230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, + 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230, + 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, + 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, - 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, + 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, + 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 <= '`') { @@ -10692,24 +10925,50 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { } yy545: yych = *++p; - switch (yych) { - case 'C': - case 'c': - goto yy587; - case 'E': - case 'e': - goto yy590; - case 'O': - case 'o': - goto yy589; - case 'T': - case 't': - goto yy586; - case 'U': - case 'u': - goto yy588; - default: - goto yy525; + if (yych <= 'U') { + if (yych <= 'E') { + if (yych == 'C') + goto yy587; + if (yych <= 'D') + goto yy525; + goto yy590; + } else { + if (yych <= 'O') { + if (yych <= 'N') + goto yy525; + goto yy589; + } else { + if (yych <= 'S') + goto yy525; + if (yych <= 'T') + goto yy586; + goto yy588; + } + } + } else { + if (yych <= 'n') { + if (yych <= 'c') { + if (yych <= 'b') + goto yy525; + goto yy587; + } else { + if (yych == 'e') + goto yy590; + goto yy525; + } + } else { + if (yych <= 's') { + if (yych <= 'o') + goto yy589; + goto yy525; + } else { + if (yych <= 't') + goto yy586; + if (yych <= 'u') + goto yy588; + goto yy525; + } + } } yy546: yych = *++p; @@ -15408,42 +15667,42 @@ bufsize_t _scan_link_url(const unsigned char *p) { } else { if (yych <= ')') { if (yych <= '\'') - goto yy957; + goto yy956; if (yych <= '(') goto yy966; goto yy968; } else { if (yych == '<') goto yy955; - goto yy957; + goto yy956; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy956; + goto yy965; if (yych <= 0x7F) - goto yy957; + goto yy956; } else { if (yych <= 0xDF) - goto yy958; + goto yy957; if (yych <= 0xE0) - goto yy960; - goto yy961; + goto yy959; + goto yy960; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy965; + goto yy964; if (yych <= 0xEF) - goto yy961; - goto yy962; + goto yy960; + goto yy961; } else { if (yych <= 0xF3) - goto yy963; + goto yy962; if (yych <= 0xF4) - goto yy964; + goto yy963; } } } @@ -15469,7 +15728,7 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= '<') { if (yych <= ';') goto yy980; - goto yy1004; + goto yy1016; } else { if (yych == '\\') goto yy982; @@ -15481,24 +15740,24 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= 0xC1) goto yy951; - goto yy984; + goto yy983; } else { if (yych <= 0xE0) - goto yy985; + goto yy984; if (yych <= 0xEC) - goto yy986; - goto yy990; + goto yy985; + goto yy989; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy986; - goto yy987; + goto yy985; + goto yy986; } else { if (yych <= 0xF3) - goto yy988; + goto yy987; if (yych <= 0xF4) - goto yy989; + goto yy988; goto yy951; } } @@ -15511,61 +15770,61 @@ bufsize_t _scan_link_url(const unsigned char *p) { yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1004; + goto yy1016; } if (yych <= '>') { if (yych <= '\r') { if (yych <= 0x08) { if (yych <= 0x00) goto yy951; - goto yy1017; + goto yy1029; } else { if (yych <= '\n') goto yy951; if (yych <= '\f') - goto yy1017; + goto yy1029; goto yy951; } } else { if (yych <= '(') { if (yych <= 0x1F) - goto yy1017; + goto yy1029; if (yych <= ' ') goto yy951; - goto yy1015; + goto yy1027; } else { if (yych <= ')') - goto yy1017; + goto yy1029; if (yych <= '<') goto yy980; - goto yy1006; + goto yy1018; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1002; + goto yy1015; goto yy951; } else { if (yych <= 0xDF) - goto yy1008; + goto yy1020; if (yych <= 0xE0) - goto yy1009; - goto yy1010; + goto yy1021; + goto yy1022; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1014; + goto yy1026; if (yych <= 0xEF) - goto yy1010; - goto yy1011; + goto yy1022; + goto yy1023; } else { if (yych <= 0xF3) - goto yy1012; + goto yy1024; if (yych <= 0xF4) - goto yy1013; + goto yy1025; goto yy951; } } @@ -15573,24 +15832,14 @@ bufsize_t _scan_link_url(const unsigned char *p) { yy956: yyaccept = 0; yych = *(marker = ++p); - if (yych <= '\'') - goto yy981; - if (yych <= '(') - goto yy991; - if (yych <= ')') - goto yy980; goto yy981; yy957: - yyaccept = 0; - yych = *(marker = ++p); - goto yy981; - yy958: yych = *++p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy957; - yy959: + goto yy956; + yy958: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { @@ -15599,50 +15848,86 @@ bufsize_t _scan_link_url(const unsigned char *p) { goto yy967; } } else { - goto yy1007; + goto yy1019; } - yy960: + yy959: yych = *++p; if (yych <= 0x9F) - goto yy959; - if (yych <= 0xBF) goto yy958; - goto yy959; - yy961: + if (yych <= 0xBF) + goto yy957; + goto yy958; + yy960: yych = *++p; if (yych <= 0x7F) - goto yy959; - if (yych <= 0xBF) goto yy958; - goto yy959; - yy962: + if (yych <= 0xBF) + goto yy957; + goto yy958; + yy961: yych = *++p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy961; - goto yy959; - yy963: + goto yy960; + goto yy958; + yy962: yych = *++p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy961; - goto yy959; - yy964: + goto yy960; + goto yy958; + yy963: yych = *++p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy961; - goto yy959; - yy965: + goto yy960; + goto yy958; + yy964: yych = *++p; if (yych <= 0x7F) - goto yy959; - if (yych <= 0x9F) goto yy958; - goto yy959; + if (yych <= 0x9F) + goto yy957; + goto yy958; + yy965: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0xDF) { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy980; + if (yych <= '\r') + goto yy951; + goto yy980; + } else { + if (yych <= ' ') + goto yy951; + if (yych <= 0x7F) + goto yy980; + if (yych <= 0xC1) + goto yy951; + goto yy990; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy991; + if (yych == 0xED) + goto yy996; + goto yy992; + } else { + if (yych <= 0xF0) + goto yy993; + if (yych <= 0xF3) + goto yy994; + if (yych <= 0xF4) + goto yy995; + goto yy951; + } + } yy966: yyaccept = 1; yych = *(marker = ++p); @@ -15672,14 +15957,14 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0xE0) { if (yych <= ')') { if (yych <= ' ') - goto yy959; + goto yy958; if (yych >= ')') - goto yy991; + goto yy997; } else { if (yych <= 0x7F) goto yy971; if (yych <= 0xC1) - goto yy959; + goto yy958; if (yych <= 0xDF) goto yy973; goto yy974; @@ -15696,7 +15981,7 @@ bufsize_t _scan_link_url(const unsigned char *p) { goto yy977; if (yych <= 0xF4) goto yy978; - goto yy959; + goto yy958; } } yy971: @@ -15709,13 +15994,13 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '(') - goto yy959; + goto yy958; if (yych <= ')') goto yy980; goto yy969; } else { if (yych <= 0xC1) - goto yy959; + goto yy958; if (yych >= 0xE0) goto yy974; } @@ -15731,65 +16016,65 @@ bufsize_t _scan_link_url(const unsigned char *p) { goto yy977; if (yych <= 0xF4) goto yy978; - goto yy959; + goto yy958; } } yy973: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) goto yy971; - goto yy959; + goto yy958; yy974: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) goto yy973; - goto yy959; + goto yy958; yy975: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) goto yy973; - goto yy959; + goto yy958; yy976: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) goto yy975; - goto yy959; + goto yy958; yy977: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) goto yy975; - goto yy959; + goto yy958; yy978: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) goto yy975; - goto yy959; + goto yy958; yy979: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) goto yy973; - goto yy959; + goto yy958; yy980: yyaccept = 0; marker = ++p; @@ -15814,22 +16099,22 @@ bufsize_t _scan_link_url(const unsigned char *p) { } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy984; + goto yy983; if (yych <= 0xE0) - goto yy985; + goto yy984; if (yych <= 0xEC) - goto yy986; - goto yy990; + goto yy985; + goto yy989; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy986; - goto yy987; + goto yy985; + goto yy986; } else { if (yych <= 0xF3) - goto yy988; + goto yy987; if (yych <= 0xF4) - goto yy989; + goto yy988; goto yy951; } } @@ -15839,315 +16124,471 @@ bufsize_t _scan_link_url(const unsigned char *p) { marker = ++p; yych = *p; if (yych <= 0xDF) { - if (yych <= '[') { - if (yych <= ' ') + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy980; + if (yych <= '\r') goto yy951; - if (yych == '(') - goto yy991; goto yy980; } else { - if (yych <= '\\') - goto yy982; + if (yych <= ' ') + goto yy951; if (yych <= 0x7F) goto yy980; if (yych <= 0xC1) goto yy951; + goto yy990; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy985; + goto yy991; if (yych == 0xED) - goto yy990; - goto yy986; + goto yy996; + goto yy992; } else { if (yych <= 0xF0) - goto yy987; + goto yy993; if (yych <= 0xF3) - goto yy988; + goto yy994; if (yych <= 0xF4) - goto yy989; + goto yy995; goto yy951; } } - yy984: + yy983: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) goto yy980; - goto yy959; - yy985: + goto yy958; + yy984: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy984; - goto yy959; - yy986: + goto yy983; + goto yy958; + yy985: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy984; - goto yy959; - yy987: + goto yy983; + goto yy958; + yy986: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy986; - goto yy959; - yy988: + goto yy985; + goto yy958; + yy987: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy986; - goto yy959; - yy989: + goto yy985; + goto yy958; + yy988: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy986; - goto yy959; - yy990: + goto yy985; + goto yy958; + yy989: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) - goto yy984; - goto yy959; + goto yy983; + goto yy958; + yy990: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy980; + goto yy958; yy991: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy958; + if (yych <= 0xBF) + goto yy990; + goto yy958; + yy992: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy990; + goto yy958; + yy993: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy958; + if (yych <= 0xBF) + goto yy992; + goto yy958; + yy994: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy992; + goto yy958; + yy995: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x8F) + goto yy992; + goto yy958; + yy996: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x9F) + goto yy990; + goto yy958; + yy997: yyaccept = 0; marker = ++p; yych = *p; - yy992: + yy998: if (yych <= 0xC1) { if (yych <= ')') { if (yych <= ' ') goto yy951; if (yych <= '\'') - goto yy991; + goto yy997; if (yych <= '(') goto yy971; goto yy980; } else { if (yych == '\\') - goto yy993; + goto yy999; if (yych <= 0x7F) - goto yy991; + goto yy997; goto yy951; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy995; + goto yy1000; if (yych <= 0xE0) - goto yy996; + goto yy1001; if (yych <= 0xEC) - goto yy997; - goto yy1001; + goto yy1002; + goto yy1006; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy997; - goto yy998; + goto yy1002; + goto yy1003; } else { if (yych <= 0xF3) - goto yy999; + goto yy1004; if (yych <= 0xF4) - goto yy1000; + goto yy1005; goto yy951; } } } - yy993: + yy999: yyaccept = 0; marker = ++p; yych = *p; - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= ' ') + if (yych <= 0xC1) { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy980; + if (yych <= '\r') goto yy951; - if (yych <= '[') - goto yy991; - goto yy993; + if (yych <= 0x1F) + goto yy980; + goto yy951; } else { + if (yych == '\\') + goto yy1007; if (yych <= 0x7F) - goto yy991; - if (yych <= 0xC1) - goto yy951; - if (yych >= 0xE0) - goto yy996; + goto yy997; + goto yy951; } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1001; - goto yy997; + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy1008; + if (yych <= 0xE0) + goto yy1009; + if (yych <= 0xEC) + goto yy1010; + goto yy1014; } else { - if (yych <= 0xF0) - goto yy998; - if (yych <= 0xF3) - goto yy999; - if (yych <= 0xF4) - goto yy1000; - goto yy951; + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy1010; + goto yy1011; + } else { + if (yych <= 0xF3) + goto yy1012; + if (yych <= 0xF4) + goto yy1013; + goto yy951; + } } } - yy995: + yy1000: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy991; - goto yy959; - yy996: + goto yy997; + goto yy958; + yy1001: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy995; - goto yy959; - yy997: + goto yy1000; + goto yy958; + yy1002: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy995; - goto yy959; - yy998: + goto yy1000; + goto yy958; + yy1003: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy997; - goto yy959; - yy999: + goto yy1002; + goto yy958; + yy1004: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy997; - goto yy959; - yy1000: + goto yy1002; + goto yy958; + yy1005: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy997; - goto yy959; - yy1001: + goto yy1002; + goto yy958; + yy1006: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) - goto yy995; - goto yy959; - yy1002: + goto yy1000; + goto yy958; + yy1007: yyaccept = 0; marker = ++p; yych = *p; - if (yych <= '[') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy951; - if (yych <= 0x08) - goto yy1017; + if (yych <= 0xDF) { + if (yych <= '[') { + if (yych <= ' ') + goto yy951; + if (yych == '(') + goto yy971; + goto yy997; + } else { + if (yych <= '\\') + goto yy999; + if (yych <= 0x7F) + goto yy997; + if (yych <= 0xC1) goto yy951; + goto yy1000; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy1001; + if (yych == 0xED) + goto yy1006; + goto yy1002; + } else { + if (yych <= 0xF0) + goto yy1003; + if (yych <= 0xF3) + goto yy1004; + if (yych <= 0xF4) + goto yy1005; + goto yy951; + } + } + yy1008: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy997; + goto yy958; + yy1009: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy958; + if (yych <= 0xBF) + goto yy1008; + goto yy958; + yy1010: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1008; + goto yy958; + yy1011: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy958; + if (yych <= 0xBF) + goto yy1010; + goto yy958; + yy1012: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1010; + goto yy958; + yy1013: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x8F) + goto yy1010; + goto yy958; + yy1014: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x9F) + goto yy1008; + goto yy958; + yy1015: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '\\') { + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych <= 0x00) + goto yy980; } else { - if (yych == '\r') + if (yych <= '\n') goto yy951; - goto yy1017; + if (yych <= '\f') + goto yy1029; + goto yy951; } } else { - if (yych <= '(') { - if (yych <= ' ') + if (yych <= '=') { + if (yych == ' ') goto yy951; - if (yych >= '(') - goto yy1040; } else { - if (yych == '>') - goto yy1054; + if (yych <= '>') + goto yy1073; + if (yych >= '\\') + goto yy1074; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') - goto yy1002; if (yych >= 0x80) goto yy951; } else { if (yych <= 0xDF) - goto yy1008; + goto yy1075; if (yych <= 0xE0) - goto yy1009; - goto yy1010; + goto yy1076; + goto yy1077; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1014; + goto yy1081; if (yych <= 0xEF) - goto yy1010; - goto yy1011; + goto yy1077; + goto yy1078; } else { if (yych <= 0xF3) - goto yy1012; + goto yy1079; if (yych <= 0xF4) - goto yy1013; + goto yy1080; goto yy951; } } } - yy1004: + yy1016: yyaccept = 0; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1004; + goto yy1016; } if (yych <= '>') { if (yych <= '\r') { if (yych <= 0x08) { if (yych <= 0x00) goto yy951; - goto yy1017; + goto yy1029; } else { if (yych <= '\n') goto yy951; if (yych <= '\f') - goto yy1017; + goto yy1029; goto yy951; } } else { if (yych <= '(') { if (yych <= 0x1F) - goto yy1017; + goto yy1029; if (yych <= ' ') goto yy951; - goto yy1015; + goto yy1027; } else { if (yych <= ')') - goto yy1017; + goto yy1029; if (yych <= '<') goto yy980; } @@ -16156,487 +16597,487 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1002; + goto yy1015; goto yy951; } else { if (yych <= 0xDF) - goto yy1008; + goto yy1020; if (yych <= 0xE0) - goto yy1009; - goto yy1010; + goto yy1021; + goto yy1022; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1014; + goto yy1026; if (yych <= 0xEF) - goto yy1010; - goto yy1011; + goto yy1022; + goto yy1023; } else { if (yych <= 0xF3) - goto yy1012; + goto yy1024; if (yych <= 0xF4) - goto yy1013; + goto yy1025; goto yy951; } } } - yy1006: + yy1018: yyaccept = 2; yych = *(marker = ++p); if (yych <= ')') { if (yych <= ' ') - goto yy1007; + goto yy1019; if (yych <= '(') goto yy981; } else { if (yych <= 0x7F) goto yy981; if (yych <= 0xC1) - goto yy1007; + goto yy1019; if (yych <= 0xF4) goto yy981; } - yy1007 : { return (bufsize_t)(p - start); } - yy1008: + yy1019 : { return (bufsize_t)(p - start); } + yy1020: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1004; - goto yy959; - yy1009: + goto yy1016; + goto yy958; + yy1021: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1008; - goto yy959; - yy1010: + goto yy1020; + goto yy958; + yy1022: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1008; - goto yy959; - yy1011: + goto yy1020; + goto yy958; + yy1023: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1010; - goto yy959; - yy1012: + goto yy1022; + goto yy958; + yy1024: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1010; - goto yy959; - yy1013: + goto yy1022; + goto yy958; + yy1025: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy1010; - goto yy959; - yy1014: + goto yy1022; + goto yy958; + yy1026: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) - goto yy1008; - goto yy959; - yy1015: + goto yy1020; + goto yy958; + yy1027: ++p; yych = *p; if (yych <= '=') { if (yych <= 0x1F) { if (yych <= '\n') { if (yych <= 0x00) - goto yy959; + goto yy958; if (yych >= '\t') - goto yy959; + goto yy958; } else { if (yych == '\r') - goto yy959; + goto yy958; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy959; + goto yy958; if (yych <= '\'') - goto yy1015; + goto yy1027; } else { if (yych <= ')') - goto yy1004; + goto yy1016; if (yych == '<') goto yy971; - goto yy1015; + goto yy1027; } } } else { if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '>') - goto yy1030; + goto yy1042; if (yych <= '[') - goto yy1015; - goto yy1031; + goto yy1027; + goto yy1043; } else { if (yych <= 0x7F) - goto yy1015; + goto yy1027; if (yych <= 0xC1) - goto yy959; + goto yy958; if (yych <= 0xDF) - goto yy1033; - goto yy1034; + goto yy1045; + goto yy1046; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1039; - goto yy1035; + goto yy1051; + goto yy1047; } else { if (yych <= 0xF0) - goto yy1036; + goto yy1048; if (yych <= 0xF3) - goto yy1037; + goto yy1049; if (yych <= 0xF4) - goto yy1038; - goto yy959; + goto yy1050; + goto yy958; } } } - yy1017: + yy1029: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1017; + goto yy1029; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '<') - goto yy959; + goto yy958; if (yych >= '?') - goto yy1020; + goto yy1032; } else { if (yych <= 0xC1) - goto yy959; + goto yy958; if (yych <= 0xDF) - goto yy1022; - goto yy1023; + goto yy1034; + goto yy1035; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1028; - goto yy1024; + goto yy1040; + goto yy1036; } else { if (yych <= 0xF0) - goto yy1025; + goto yy1037; if (yych <= 0xF3) - goto yy1026; + goto yy1038; if (yych <= 0xF4) - goto yy1027; - goto yy959; + goto yy1039; + goto yy958; } } - yy1019: + yy1031: yych = *++p; - goto yy1007; - yy1020: + goto yy1019; + yy1032: ++p; yych = *p; if (yych <= '\\') { if (yych <= '\r') { if (yych <= 0x08) { if (yych <= 0x00) - goto yy959; - goto yy1017; + goto yy958; + goto yy1029; } else { if (yych <= '\n') - goto yy959; + goto yy958; if (yych <= '\f') - goto yy1017; - goto yy959; + goto yy1029; + goto yy958; } } else { if (yych <= '=') { if (yych == ' ') - goto yy959; - goto yy1017; + goto yy958; + goto yy1029; } else { if (yych <= '>') - goto yy1029; + goto yy1041; if (yych <= '[') - goto yy1017; - goto yy1020; + goto yy1029; + goto yy1032; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1017; - goto yy959; + goto yy1029; + goto yy958; } else { if (yych <= 0xDF) - goto yy1022; + goto yy1034; if (yych <= 0xE0) - goto yy1023; - goto yy1024; + goto yy1035; + goto yy1036; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1028; + goto yy1040; if (yych <= 0xEF) - goto yy1024; - goto yy1025; + goto yy1036; + goto yy1037; } else { if (yych <= 0xF3) - goto yy1026; + goto yy1038; if (yych <= 0xF4) - goto yy1027; - goto yy959; + goto yy1039; + goto yy958; } } } - yy1022: + yy1034: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1017; - goto yy959; - yy1023: + goto yy1029; + goto yy958; + yy1035: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1022; - goto yy959; - yy1024: + goto yy1034; + goto yy958; + yy1036: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1022; - goto yy959; - yy1025: + goto yy1034; + goto yy958; + yy1037: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1024; - goto yy959; - yy1026: + goto yy1036; + goto yy958; + yy1038: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1024; - goto yy959; - yy1027: + goto yy1036; + goto yy958; + yy1039: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy1024; - goto yy959; - yy1028: + goto yy1036; + goto yy958; + yy1040: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) - goto yy1022; - goto yy959; - yy1029: + goto yy1034; + goto yy958; + yy1041: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1017; + goto yy1029; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '<') - goto yy1007; - if (yych <= '>') goto yy1019; - goto yy1020; + if (yych <= '>') + goto yy1031; + goto yy1032; } else { if (yych <= 0xC1) - goto yy1007; + goto yy1019; if (yych <= 0xDF) - goto yy1022; - goto yy1023; + goto yy1034; + goto yy1035; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1028; - goto yy1024; + goto yy1040; + goto yy1036; } else { if (yych <= 0xF0) - goto yy1025; + goto yy1037; if (yych <= 0xF3) - goto yy1026; + goto yy1038; if (yych <= 0xF4) - goto yy1027; - goto yy1007; + goto yy1039; + goto yy1019; } } - yy1030: + yy1042: yyaccept = 2; yych = *(marker = ++p); if (yych <= '(') { if (yych <= ' ') - goto yy1007; + goto yy1019; if (yych <= '\'') goto yy972; - goto yy1007; + goto yy1019; } else { if (yych <= 0x7F) goto yy972; if (yych <= 0xC1) - goto yy1007; + goto yy1019; if (yych <= 0xF4) goto yy972; - goto yy1007; + goto yy1019; } - yy1031: + yy1043: ++p; yych = *p; if (yych <= '[') { if (yych <= 0x1F) { if (yych <= '\n') { if (yych <= 0x00) - goto yy959; + goto yy958; if (yych <= 0x08) - goto yy1017; - goto yy959; + goto yy1029; + goto yy958; } else { if (yych == '\r') - goto yy959; - goto yy1017; + goto yy958; + goto yy1029; } } else { if (yych <= ')') { if (yych <= ' ') - goto yy959; + goto yy958; if (yych <= '(') - goto yy1015; - goto yy1040; + goto yy1027; + goto yy1052; } else { if (yych == '>') - goto yy1042; - goto yy1015; + goto yy1054; + goto yy1027; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1031; + goto yy1043; if (yych <= 0x7F) - goto yy1015; - goto yy959; + goto yy1027; + goto yy958; } else { if (yych <= 0xDF) - goto yy1033; + goto yy1045; if (yych <= 0xE0) - goto yy1034; - goto yy1035; + goto yy1046; + goto yy1047; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1039; + goto yy1051; if (yych <= 0xEF) - goto yy1035; - goto yy1036; + goto yy1047; + goto yy1048; } else { if (yych <= 0xF3) - goto yy1037; + goto yy1049; if (yych <= 0xF4) - goto yy1038; - goto yy959; + goto yy1050; + goto yy958; } } } - yy1033: + yy1045: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1015; - goto yy959; - yy1034: + goto yy1027; + goto yy958; + yy1046: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1033; - goto yy959; - yy1035: + goto yy1045; + goto yy958; + yy1047: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1033; - goto yy959; - yy1036: + goto yy1045; + goto yy958; + yy1048: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1035; - goto yy959; - yy1037: + goto yy1047; + goto yy958; + yy1049: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1035; - goto yy959; - yy1038: + goto yy1047; + goto yy958; + yy1050: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy1035; - goto yy959; - yy1039: + goto yy1047; + goto yy958; + yy1051: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) - goto yy1033; - goto yy959; - yy1040: + goto yy1045; + goto yy958; + yy1052: yyaccept = 0; marker = ++p; yych = *p; @@ -16646,62 +17087,62 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0x00) goto yy951; if (yych <= 0x08) - goto yy1017; + goto yy1029; goto yy951; } else { if (yych == '\r') goto yy951; - goto yy1017; + goto yy1029; } } else { if (yych <= '(') { if (yych <= ' ') goto yy951; if (yych <= '\'') - goto yy1040; - goto yy1015; + goto yy1052; + goto yy1027; } else { if (yych <= ')') - goto yy1004; + goto yy1016; if (yych == '<') - goto yy991; - goto yy1040; + goto yy997; + goto yy1052; } } } else { if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '>') - goto yy1043; + goto yy1055; if (yych <= '[') - goto yy1040; - goto yy1044; + goto yy1052; + goto yy1056; } else { if (yych <= 0x7F) - goto yy1040; + goto yy1052; if (yych <= 0xC1) goto yy951; if (yych <= 0xDF) - goto yy1046; - goto yy1047; + goto yy1057; + goto yy1058; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1052; - goto yy1048; + goto yy1063; + goto yy1059; } else { if (yych <= 0xF0) - goto yy1049; + goto yy1060; if (yych <= 0xF3) - goto yy1050; + goto yy1061; if (yych <= 0xF4) - goto yy1051; + goto yy1062; goto yy951; } } } - yy1042: + yy1054: yyaccept = 2; marker = ++p; yych = *p; @@ -16709,76 +17150,76 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0x1F) { if (yych <= '\n') { if (yych <= 0x00) - goto yy1007; + goto yy1019; if (yych <= 0x08) - goto yy1017; - goto yy1007; + goto yy1029; + goto yy1019; } else { if (yych == '\r') - goto yy1007; - goto yy1017; + goto yy1019; + goto yy1029; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1007; + goto yy1019; if (yych <= '\'') - goto yy1015; - goto yy1017; + goto yy1027; + goto yy1029; } else { if (yych <= ')') - goto yy1004; + goto yy1016; if (yych == '<') goto yy971; - goto yy1015; + goto yy1027; } } } else { if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '>') - goto yy1030; + goto yy1042; if (yych <= '[') - goto yy1015; - goto yy1031; + goto yy1027; + goto yy1043; } else { if (yych <= 0x7F) - goto yy1015; + goto yy1027; if (yych <= 0xC1) - goto yy1007; + goto yy1019; if (yych <= 0xDF) - goto yy1033; - goto yy1034; + goto yy1045; + goto yy1046; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1039; - goto yy1035; + goto yy1051; + goto yy1047; } else { if (yych <= 0xF0) - goto yy1036; + goto yy1048; if (yych <= 0xF3) - goto yy1037; + goto yy1049; if (yych <= 0xF4) - goto yy1038; - goto yy1007; + goto yy1050; + goto yy1019; } } } - yy1043: + yy1055: yyaccept = 2; yych = *(marker = ++p); if (yych <= ' ') - goto yy1007; + goto yy1019; if (yych <= 0x7F) - goto yy992; + goto yy998; if (yych <= 0xC1) - goto yy1007; + goto yy1019; if (yych <= 0xF4) - goto yy992; - goto yy1007; - yy1044: + goto yy998; + goto yy1019; + yy1056: yyaccept = 0; marker = ++p; yych = *p; @@ -16786,116 +17227,116 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= '\r') { if (yych <= 0x08) { if (yych <= 0x00) - goto yy951; - goto yy1017; + goto yy980; + goto yy1016; } else { if (yych <= '\n') goto yy951; if (yych <= '\f') - goto yy1017; + goto yy1029; goto yy951; } } else { if (yych <= '=') { if (yych <= 0x1F) - goto yy1017; + goto yy1016; if (yych <= ' ') goto yy951; - goto yy1040; + goto yy1052; } else { if (yych <= '>') - goto yy1053; + goto yy1064; if (yych <= '[') - goto yy1040; - goto yy1044; + goto yy1052; + goto yy1065; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy1040; + goto yy1052; goto yy951; } else { if (yych <= 0xDF) - goto yy1046; + goto yy1066; if (yych <= 0xE0) - goto yy1047; - goto yy1048; + goto yy1067; + goto yy1068; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1052; + goto yy1072; if (yych <= 0xEF) - goto yy1048; - goto yy1049; + goto yy1068; + goto yy1069; } else { if (yych <= 0xF3) - goto yy1050; + goto yy1070; if (yych <= 0xF4) - goto yy1051; + goto yy1071; goto yy951; } } } - yy1046: + yy1057: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1040; - goto yy959; - yy1047: + goto yy1052; + goto yy958; + yy1058: ++p; yych = *p; if (yych <= 0x9F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1046; - goto yy959; - yy1048: + goto yy1057; + goto yy958; + yy1059: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1046; - goto yy959; - yy1049: + goto yy1057; + goto yy958; + yy1060: ++p; yych = *p; if (yych <= 0x8F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1048; - goto yy959; - yy1050: + goto yy1059; + goto yy958; + yy1061: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0xBF) - goto yy1048; - goto yy959; - yy1051: + goto yy1059; + goto yy958; + yy1062: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x8F) - goto yy1048; - goto yy959; - yy1052: + goto yy1059; + goto yy958; + yy1063: ++p; yych = *p; if (yych <= 0x7F) - goto yy959; + goto yy958; if (yych <= 0x9F) - goto yy1046; - goto yy959; - yy1053: + goto yy1057; + goto yy958; + yy1064: yyaccept = 2; marker = ++p; yych = *p; @@ -16903,799 +17344,1033 @@ bufsize_t _scan_link_url(const unsigned char *p) { if (yych <= 0x1F) { if (yych <= '\n') { if (yych <= 0x00) - goto yy1007; + goto yy1019; if (yych <= 0x08) - goto yy1017; - goto yy1007; + goto yy1029; + goto yy1019; } else { if (yych == '\r') - goto yy1007; - goto yy1017; + goto yy1019; + goto yy1029; } } else { if (yych <= '(') { if (yych <= ' ') - goto yy1007; + goto yy1019; if (yych <= '\'') - goto yy1040; - goto yy1015; + goto yy1052; + goto yy1027; } else { if (yych <= ')') - goto yy1004; + goto yy1016; if (yych == '<') - goto yy991; - goto yy1040; + goto yy997; + goto yy1052; } } } else { if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= '>') - goto yy1043; + goto yy1055; if (yych <= '[') - goto yy1040; - goto yy1044; + goto yy1052; + goto yy1056; } else { if (yych <= 0x7F) - goto yy1040; + goto yy1052; if (yych <= 0xC1) - goto yy1007; + goto yy1019; if (yych <= 0xDF) - goto yy1046; - goto yy1047; + goto yy1057; + goto yy1058; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1052; - goto yy1048; + goto yy1063; + goto yy1059; } else { if (yych <= 0xF0) - goto yy1049; + goto yy1060; if (yych <= 0xF3) - goto yy1050; + goto yy1061; if (yych <= 0xF4) - goto yy1051; - goto yy1007; + goto yy1062; + goto yy1019; } } } - yy1054: - yyaccept = 2; + yy1065: + yyaccept = 0; marker = ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1004; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= 0x08) { + if (yych <= '[') { + if (yych <= 0x1F) { + if (yych <= '\n') { if (yych <= 0x00) - goto yy1007; - goto yy1017; + goto yy951; + if (yych <= 0x08) + goto yy1029; + goto yy951; } else { - if (yych <= '\n') - goto yy1007; - if (yych <= '\f') - goto yy1017; - goto yy1007; + if (yych == '\r') + goto yy951; + goto yy1029; } } else { if (yych <= '(') { - if (yych <= 0x1F) - goto yy1017; if (yych <= ' ') - goto yy1007; - goto yy1015; + goto yy951; + if (yych <= '\'') + goto yy1052; + goto yy1027; } else { - if (yych <= ')') - goto yy1017; - if (yych <= '<') - goto yy980; - goto yy1006; + if (yych == '>') + goto yy1064; + goto yy1052; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\\') - goto yy1002; - goto yy1007; + goto yy1056; + if (yych <= 0x7F) + goto yy1052; + goto yy951; } else { if (yych <= 0xDF) - goto yy1008; + goto yy1057; if (yych <= 0xE0) - goto yy1009; - goto yy1010; + goto yy1058; + goto yy1059; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1014; + goto yy1063; if (yych <= 0xEF) - goto yy1010; - goto yy1011; + goto yy1059; + goto yy1060; } else { if (yych <= 0xF3) - goto yy1012; + goto yy1061; if (yych <= 0xF4) - goto yy1013; - goto yy1007; + goto yy1062; + goto yy951; } } } - } -} - -// Try to match a link title (in single quotes, in double quotes, or -// in parentheses), returning number of chars matched. Allow one -// level of internal nesting (quotes within quotes). -bufsize_t _scan_link_title(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { - if (yych <= '"') { - if (yych == '\n') - goto yy1057; - if (yych <= '!') - goto yy1061; - goto yy1058; + yy1066: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1052; + goto yy958; + yy1067: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy958; + if (yych <= 0xBF) + goto yy1066; + goto yy958; + yy1068: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1066; + goto yy958; + yy1069: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy958; + if (yych <= 0xBF) + goto yy1068; + goto yy958; + yy1070: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1068; + goto yy958; + yy1071: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x8F) + goto yy1068; + goto yy958; + yy1072: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x9F) + goto yy1066; + goto yy958; + yy1073: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1016; + } + if (yych <= '>') { + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych <= 0x00) + goto yy1019; + goto yy1029; + } else { + if (yych <= '\n') + goto yy1019; + if (yych <= '\f') + goto yy1029; + goto yy1019; + } + } else { + if (yych <= '(') { + if (yych <= 0x1F) + goto yy1029; + if (yych <= ' ') + goto yy1019; + goto yy1027; + } else { + if (yych <= ')') + goto yy1029; + if (yych <= '<') + goto yy980; + goto yy1018; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\\') + goto yy1015; + goto yy1019; + } else { + if (yych <= 0xDF) + goto yy1020; + if (yych <= 0xE0) + goto yy1021; + goto yy1022; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy1026; + if (yych <= 0xEF) + goto yy1022; + goto yy1023; + } else { + if (yych <= 0xF3) + goto yy1024; + if (yych <= 0xF4) + goto yy1025; + goto yy1019; + } + } + } + yy1074: + yyaccept = 0; + marker = ++p; + yych = *p; + if (yych <= '>') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) + goto yy951; + if (yych <= 0x08) + goto yy1029; + goto yy951; + } else { + if (yych == '\r') + goto yy951; + goto yy1029; + } + } else { + if (yych <= '(') { + if (yych <= ' ') + goto yy951; + if (yych <= '\'') + goto yy1016; + goto yy1027; + } else { + if (yych <= ')') + goto yy1029; + if (yych <= '=') + goto yy1016; + goto yy1073; + } + } + } else { + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\\') + goto yy1015; + goto yy1016; + } else { + if (yych <= 0xC1) + goto yy951; + if (yych <= 0xDF) + goto yy1020; + goto yy1021; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1026; + goto yy1022; + } else { + if (yych <= 0xF0) + goto yy1023; + if (yych <= 0xF3) + goto yy1024; + if (yych <= 0xF4) + goto yy1025; + goto yy951; + } + } + } + yy1075: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1016; + goto yy958; + yy1076: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy958; + if (yych <= 0xBF) + goto yy1075; + goto yy958; + yy1077: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1075; + goto yy958; + yy1078: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy958; + if (yych <= 0xBF) + goto yy1077; + goto yy958; + yy1079: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0xBF) + goto yy1077; + goto yy958; + yy1080: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x8F) + goto yy1077; + goto yy958; + yy1081: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy958; + if (yych <= 0x9F) + goto yy1075; + goto yy958; + } +} + +// Try to match a link title (in single quotes, in double quotes, or +// in parentheses), returning number of chars matched. Allow one +// level of internal nesting (quotes within quotes). +bufsize_t _scan_link_title(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { + if (yych <= '"') { + if (yych == '\n') + goto yy1084; + if (yych <= '!') + goto yy1088; + goto yy1085; } else { if (yych <= '\'') { if (yych <= '&') - goto yy1061; - goto yy1059; + goto yy1088; + goto yy1086; } else { if (yych <= '(') - goto yy1060; + goto yy1087; if (yych <= 0x7F) - goto yy1061; + goto yy1088; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1062; + goto yy1089; if (yych <= 0xE0) - goto yy1064; + goto yy1091; if (yych <= 0xEC) - goto yy1065; - goto yy1069; + goto yy1092; + goto yy1096; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1065; - goto yy1066; + goto yy1092; + goto yy1093; } else { if (yych <= 0xF3) - goto yy1067; + goto yy1094; if (yych <= 0xF4) - goto yy1068; + goto yy1095; } } } - yy1057 : { return 0; } - yy1058: + yy1084 : { return 0; } + yy1085: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1057; + goto yy1084; if (yych <= 0x7F) - goto yy1101; + goto yy1128; if (yych <= 0xC1) - goto yy1057; + goto yy1084; if (yych <= 0xF4) - goto yy1101; - goto yy1057; - yy1059: + goto yy1128; + goto yy1084; + yy1086: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1057; + goto yy1084; if (yych <= 0x7F) - goto yy1087; + goto yy1114; if (yych <= 0xC1) - goto yy1057; + goto yy1084; if (yych <= 0xF4) - goto yy1087; - goto yy1057; - yy1060: + goto yy1114; + goto yy1084; + yy1087: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy1057; + goto yy1084; if (yych <= 0x7F) - goto yy1073; + goto yy1100; if (yych <= 0xC1) - goto yy1057; + goto yy1084; if (yych <= 0xF4) - goto yy1073; - goto yy1057; - yy1061: + goto yy1100; + goto yy1084; + yy1088: yych = *++p; - goto yy1057; - yy1062: + goto yy1084; + yy1089: yych = *++p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1061; - yy1063: + goto yy1088; + yy1090: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy1057; + goto yy1084; } else { - goto yy1082; + goto yy1109; } } else { if (yyaccept == 2) { - goto yy1096; + goto yy1123; } else { - goto yy1110; + goto yy1137; } } - yy1064: + yy1091: yych = *++p; if (yych <= 0x9F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1062; - goto yy1063; - yy1065: + goto yy1089; + goto yy1090; + yy1092: yych = *++p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1062; - goto yy1063; - yy1066: + goto yy1089; + goto yy1090; + yy1093: yych = *++p; if (yych <= 0x8F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1065; - goto yy1063; - yy1067: + goto yy1092; + goto yy1090; + yy1094: yych = *++p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1065; - goto yy1063; - yy1068: + goto yy1092; + goto yy1090; + yy1095: yych = *++p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x8F) - goto yy1065; - goto yy1063; - yy1069: + goto yy1092; + goto yy1090; + yy1096: yych = *++p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x9F) - goto yy1062; - goto yy1063; - yy1070: + goto yy1089; + goto yy1090; + yy1097: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1072; + goto yy1099; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1063; + goto yy1090; if (yych <= ')') - goto yy1083; - goto yy1070; + goto yy1110; + goto yy1097; } else { if (yych <= 0xC1) - goto yy1063; + goto yy1090; if (yych <= 0xDF) - goto yy1074; - goto yy1075; + goto yy1101; + goto yy1102; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1080; - goto yy1076; + goto yy1107; + goto yy1103; } else { if (yych <= 0xF0) - goto yy1077; + goto yy1104; if (yych <= 0xF3) - goto yy1078; + goto yy1105; if (yych <= 0xF4) - goto yy1079; - goto yy1063; + goto yy1106; + goto yy1090; } } - yy1072: + yy1099: ++p; yych = *p; - yy1073: + yy1100: if (yybm[0 + yych] & 32) { - goto yy1072; + goto yy1099; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1063; + goto yy1090; if (yych <= ')') - goto yy1081; - goto yy1070; + goto yy1108; + goto yy1097; } else { if (yych <= 0xC1) - goto yy1063; + goto yy1090; if (yych >= 0xE0) - goto yy1075; + goto yy1102; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1080; - goto yy1076; + goto yy1107; + goto yy1103; } else { if (yych <= 0xF0) - goto yy1077; + goto yy1104; if (yych <= 0xF3) - goto yy1078; + goto yy1105; if (yych <= 0xF4) - goto yy1079; - goto yy1063; + goto yy1106; + goto yy1090; } } - yy1074: + yy1101: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1072; - goto yy1063; - yy1075: + goto yy1099; + goto yy1090; + yy1102: ++p; yych = *p; if (yych <= 0x9F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1074; - goto yy1063; - yy1076: + goto yy1101; + goto yy1090; + yy1103: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1074; - goto yy1063; - yy1077: + goto yy1101; + goto yy1090; + yy1104: ++p; yych = *p; if (yych <= 0x8F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1076; - goto yy1063; - yy1078: + goto yy1103; + goto yy1090; + yy1105: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1076; - goto yy1063; - yy1079: + goto yy1103; + goto yy1090; + yy1106: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x8F) - goto yy1076; - goto yy1063; - yy1080: + goto yy1103; + goto yy1090; + yy1107: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x9F) - goto yy1074; - goto yy1063; - yy1081: + goto yy1101; + goto yy1090; + yy1108: ++p; - yy1082 : { return (bufsize_t)(p - start); } - yy1083: + yy1109 : { return (bufsize_t)(p - start); } + yy1110: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1072; + goto yy1099; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1082; + goto yy1109; if (yych <= ')') - goto yy1081; - goto yy1070; + goto yy1108; + goto yy1097; } else { if (yych <= 0xC1) - goto yy1082; + goto yy1109; if (yych <= 0xDF) - goto yy1074; - goto yy1075; + goto yy1101; + goto yy1102; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1080; - goto yy1076; + goto yy1107; + goto yy1103; } else { if (yych <= 0xF0) - goto yy1077; + goto yy1104; if (yych <= 0xF3) - goto yy1078; + goto yy1105; if (yych <= 0xF4) - goto yy1079; - goto yy1082; + goto yy1106; + goto yy1109; } } - yy1084: + yy1111: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1086; + goto yy1113; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1063; + goto yy1090; if (yych <= '\'') - goto yy1097; - goto yy1084; + goto yy1124; + goto yy1111; } else { if (yych <= 0xC1) - goto yy1063; + goto yy1090; if (yych <= 0xDF) - goto yy1088; - goto yy1089; + goto yy1115; + goto yy1116; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1094; - goto yy1090; + goto yy1121; + goto yy1117; } else { if (yych <= 0xF0) - goto yy1091; + goto yy1118; if (yych <= 0xF3) - goto yy1092; + goto yy1119; if (yych <= 0xF4) - goto yy1093; - goto yy1063; + goto yy1120; + goto yy1090; } } - yy1086: + yy1113: ++p; yych = *p; - yy1087: + yy1114: if (yybm[0 + yych] & 64) { - goto yy1086; + goto yy1113; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1063; + goto yy1090; if (yych <= '\'') - goto yy1095; - goto yy1084; + goto yy1122; + goto yy1111; } else { if (yych <= 0xC1) - goto yy1063; + goto yy1090; if (yych >= 0xE0) - goto yy1089; + goto yy1116; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1094; - goto yy1090; + goto yy1121; + goto yy1117; } else { if (yych <= 0xF0) - goto yy1091; + goto yy1118; if (yych <= 0xF3) - goto yy1092; + goto yy1119; if (yych <= 0xF4) - goto yy1093; - goto yy1063; + goto yy1120; + goto yy1090; } } - yy1088: + yy1115: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1086; - goto yy1063; - yy1089: + goto yy1113; + goto yy1090; + yy1116: ++p; yych = *p; if (yych <= 0x9F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1088; - goto yy1063; - yy1090: + goto yy1115; + goto yy1090; + yy1117: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1088; - goto yy1063; - yy1091: + goto yy1115; + goto yy1090; + yy1118: ++p; yych = *p; if (yych <= 0x8F) - goto yy1063; - if (yych <= 0xBF) goto yy1090; - goto yy1063; - yy1092: + if (yych <= 0xBF) + goto yy1117; + goto yy1090; + yy1119: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; - if (yych <= 0xBF) goto yy1090; - goto yy1063; - yy1093: + if (yych <= 0xBF) + goto yy1117; + goto yy1090; + yy1120: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; - if (yych <= 0x8F) goto yy1090; - goto yy1063; - yy1094: + if (yych <= 0x8F) + goto yy1117; + goto yy1090; + yy1121: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x9F) - goto yy1088; - goto yy1063; - yy1095: + goto yy1115; + goto yy1090; + yy1122: ++p; - yy1096 : { return (bufsize_t)(p - start); } - yy1097: + yy1123 : { return (bufsize_t)(p - start); } + yy1124: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1086; + goto yy1113; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1096; + goto yy1123; if (yych <= '\'') - goto yy1095; - goto yy1084; + goto yy1122; + goto yy1111; } else { if (yych <= 0xC1) - goto yy1096; + goto yy1123; if (yych <= 0xDF) - goto yy1088; - goto yy1089; + goto yy1115; + goto yy1116; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1094; - goto yy1090; + goto yy1121; + goto yy1117; } else { if (yych <= 0xF0) - goto yy1091; + goto yy1118; if (yych <= 0xF3) - goto yy1092; + goto yy1119; if (yych <= 0xF4) - goto yy1093; - goto yy1096; + goto yy1120; + goto yy1123; } } - yy1098: + yy1125: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1100; + goto yy1127; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1063; + goto yy1090; if (yych <= '"') - goto yy1111; - goto yy1098; + goto yy1138; + goto yy1125; } else { if (yych <= 0xC1) - goto yy1063; + goto yy1090; if (yych <= 0xDF) - goto yy1102; - goto yy1103; + goto yy1129; + goto yy1130; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1108; - goto yy1104; + goto yy1135; + goto yy1131; } else { if (yych <= 0xF0) - goto yy1105; + goto yy1132; if (yych <= 0xF3) - goto yy1106; + goto yy1133; if (yych <= 0xF4) - goto yy1107; - goto yy1063; + goto yy1134; + goto yy1090; } } - yy1100: + yy1127: ++p; yych = *p; - yy1101: + yy1128: if (yybm[0 + yych] & 128) { - goto yy1100; + goto yy1127; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1063; + goto yy1090; if (yych <= '"') - goto yy1109; - goto yy1098; + goto yy1136; + goto yy1125; } else { if (yych <= 0xC1) - goto yy1063; + goto yy1090; if (yych >= 0xE0) - goto yy1103; + goto yy1130; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1108; - goto yy1104; + goto yy1135; + goto yy1131; } else { if (yych <= 0xF0) - goto yy1105; + goto yy1132; if (yych <= 0xF3) - goto yy1106; + goto yy1133; if (yych <= 0xF4) - goto yy1107; - goto yy1063; + goto yy1134; + goto yy1090; } } - yy1102: + yy1129: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1100; - goto yy1063; - yy1103: + goto yy1127; + goto yy1090; + yy1130: ++p; yych = *p; if (yych <= 0x9F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1102; - goto yy1063; - yy1104: + goto yy1129; + goto yy1090; + yy1131: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1102; - goto yy1063; - yy1105: + goto yy1129; + goto yy1090; + yy1132: ++p; yych = *p; if (yych <= 0x8F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1104; - goto yy1063; - yy1106: + goto yy1131; + goto yy1090; + yy1133: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0xBF) - goto yy1104; - goto yy1063; - yy1107: + goto yy1131; + goto yy1090; + yy1134: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x8F) - goto yy1104; - goto yy1063; - yy1108: + goto yy1131; + goto yy1090; + yy1135: ++p; yych = *p; if (yych <= 0x7F) - goto yy1063; + goto yy1090; if (yych <= 0x9F) - goto yy1102; - goto yy1063; - yy1109: + goto yy1129; + goto yy1090; + yy1136: ++p; - yy1110 : { return (bufsize_t)(p - start); } - yy1111: + yy1137 : { return (bufsize_t)(p - start); } + yy1138: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1100; + goto yy1127; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1110; + goto yy1137; if (yych <= '"') - goto yy1109; - goto yy1098; + goto yy1136; + goto yy1125; } else { if (yych <= 0xC1) - goto yy1110; + goto yy1137; if (yych <= 0xDF) - goto yy1102; - goto yy1103; + goto yy1129; + goto yy1130; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1108; - goto yy1104; + goto yy1135; + goto yy1131; } else { if (yych <= 0xF0) - goto yy1105; + goto yy1132; if (yych <= 0xF3) - goto yy1106; + goto yy1133; if (yych <= 0xF4) - goto yy1107; - goto yy1110; + goto yy1134; + goto yy1137; } } } @@ -17727,104 +18402,104 @@ bufsize_t _scan_spacechars(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '\r') { if (yych <= 0x08) - goto yy1118; + goto yy1145; if (yych == '\n') - goto yy1116; - goto yy1115; + goto yy1143; + goto yy1142; } else { if (yych == ' ') - goto yy1115; + goto yy1142; if (yych <= 0x7F) - goto yy1118; + goto yy1145; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1120; + goto yy1147; if (yych <= 0xE0) - goto yy1122; + goto yy1149; if (yych <= 0xEC) - goto yy1123; - goto yy1127; + goto yy1150; + goto yy1154; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1123; - goto yy1124; + goto yy1150; + goto yy1151; } else { if (yych <= 0xF3) - goto yy1125; + goto yy1152; if (yych <= 0xF4) - goto yy1126; + goto yy1153; } } } - yy1114 : { return (bufsize_t)(p - start); } - yy1115: + yy1141 : { return (bufsize_t)(p - start); } + yy1142: yych = *++p; - goto yy1117; - yy1116: + goto yy1144; + yy1143: ++p; yych = *p; - yy1117: + yy1144: if (yybm[0 + yych] & 128) { - goto yy1116; + goto yy1143; } - goto yy1114; - yy1118: + goto yy1141; + yy1145: ++p; { return 0; } - yy1120: + yy1147: yych = *++p; if (yych <= 0x7F) - goto yy1121; + goto yy1148; if (yych <= 0xBF) - goto yy1118; - yy1121: + goto yy1145; + yy1148: p = marker; - goto yy1114; - yy1122: + goto yy1141; + yy1149: yych = *++p; if (yych <= 0x9F) - goto yy1121; + goto yy1148; if (yych <= 0xBF) - goto yy1120; - goto yy1121; - yy1123: + goto yy1147; + goto yy1148; + yy1150: yych = *++p; if (yych <= 0x7F) - goto yy1121; + goto yy1148; if (yych <= 0xBF) - goto yy1120; - goto yy1121; - yy1124: + goto yy1147; + goto yy1148; + yy1151: yych = *++p; if (yych <= 0x8F) - goto yy1121; + goto yy1148; if (yych <= 0xBF) - goto yy1123; - goto yy1121; - yy1125: + goto yy1150; + goto yy1148; + yy1152: yych = *++p; if (yych <= 0x7F) - goto yy1121; + goto yy1148; if (yych <= 0xBF) - goto yy1123; - goto yy1121; - yy1126: + goto yy1150; + goto yy1148; + yy1153: yych = *++p; if (yych <= 0x7F) - goto yy1121; + goto yy1148; if (yych <= 0x8F) - goto yy1123; - goto yy1121; - yy1127: + goto yy1150; + goto yy1148; + yy1154: ++p; if ((yych = *p) <= 0x7F) - goto yy1121; + goto yy1148; if (yych <= 0x9F) - goto yy1120; - goto yy1121; + goto yy1147; + goto yy1148; } } @@ -17853,178 +18528,178 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '"') { if (yych != '\n') - goto yy1132; + goto yy1159; } else { if (yych <= '#') - goto yy1131; + goto yy1158; if (yych <= 0x7F) - goto yy1132; + goto yy1159; if (yych >= 0xC2) - goto yy1133; + goto yy1160; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1135; + goto yy1162; if (yych == 0xED) - goto yy1140; - goto yy1136; + goto yy1167; + goto yy1163; } else { if (yych <= 0xF0) - goto yy1137; + goto yy1164; if (yych <= 0xF3) - goto yy1138; + goto yy1165; if (yych <= 0xF4) - goto yy1139; + goto yy1166; } } - yy1130 : { return 0; } - yy1131: + yy1157 : { return 0; } + yy1158: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1170; } if (yych <= '\f') { if (yych == '\n') - goto yy1141; - goto yy1130; + goto yy1168; + goto yy1157; } else { if (yych <= '\r') - goto yy1141; + goto yy1168; if (yych == '#') - goto yy1145; - goto yy1130; + goto yy1172; + goto yy1157; } - yy1132: + yy1159: yych = *++p; - goto yy1130; - yy1133: + goto yy1157; + yy1160: yych = *++p; if (yych <= 0x7F) - goto yy1134; + goto yy1161; if (yych <= 0xBF) - goto yy1132; - yy1134: + goto yy1159; + yy1161: p = marker; - goto yy1130; - yy1135: + goto yy1157; + yy1162: yych = *++p; if (yych <= 0x9F) - goto yy1134; + goto yy1161; if (yych <= 0xBF) - goto yy1133; - goto yy1134; - yy1136: + goto yy1160; + goto yy1161; + yy1163: yych = *++p; if (yych <= 0x7F) - goto yy1134; + goto yy1161; if (yych <= 0xBF) - goto yy1133; - goto yy1134; - yy1137: + goto yy1160; + goto yy1161; + yy1164: yych = *++p; if (yych <= 0x8F) - goto yy1134; + goto yy1161; if (yych <= 0xBF) - goto yy1136; - goto yy1134; - yy1138: + goto yy1163; + goto yy1161; + yy1165: yych = *++p; if (yych <= 0x7F) - goto yy1134; + goto yy1161; if (yych <= 0xBF) - goto yy1136; - goto yy1134; - yy1139: + goto yy1163; + goto yy1161; + yy1166: yych = *++p; if (yych <= 0x7F) - goto yy1134; + goto yy1161; if (yych <= 0x8F) - goto yy1136; - goto yy1134; - yy1140: + goto yy1163; + goto yy1161; + yy1167: yych = *++p; if (yych <= 0x7F) - goto yy1134; + goto yy1161; if (yych <= 0x9F) - goto yy1133; - goto yy1134; - yy1141: + goto yy1160; + goto yy1161; + yy1168: ++p; - yy1142 : { return (bufsize_t)(p - start); } - yy1143: + yy1169 : { return (bufsize_t)(p - start); } + yy1170: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1170; } - goto yy1142; - yy1145: + goto yy1169; + yy1172: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1170; } if (yych <= '\f') { if (yych == '\n') - goto yy1141; - goto yy1134; + goto yy1168; + goto yy1161; } else { if (yych <= '\r') - goto yy1141; + goto yy1168; if (yych != '#') - goto yy1134; + goto yy1161; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1170; } if (yych <= '\f') { if (yych == '\n') - goto yy1141; - goto yy1134; + goto yy1168; + goto yy1161; } else { if (yych <= '\r') - goto yy1141; + goto yy1168; if (yych != '#') - goto yy1134; + goto yy1161; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1170; } if (yych <= '\f') { if (yych == '\n') - goto yy1141; - goto yy1134; + goto yy1168; + goto yy1161; } else { if (yych <= '\r') - goto yy1141; + goto yy1168; if (yych != '#') - goto yy1134; + goto yy1161; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1170; } if (yych <= '\f') { if (yych == '\n') - goto yy1141; - goto yy1134; + goto yy1168; + goto yy1161; } else { if (yych <= '\r') - goto yy1141; + goto yy1168; if (yych != '#') - goto yy1134; + goto yy1161; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy1143; + goto yy1170; } if (yych == '\n') - goto yy1141; + goto yy1168; if (yych == '\r') - goto yy1141; - goto yy1134; + goto yy1168; + goto yy1161; } } @@ -18053,187 +18728,187 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '-') { if (yych == '\n') - goto yy1152; + goto yy1179; if (yych <= ',') - goto yy1155; - goto yy1154; + goto yy1182; + goto yy1181; } else { if (yych == '=') - goto yy1153; + goto yy1180; if (yych <= 0x7F) - goto yy1155; + goto yy1182; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1156; + goto yy1183; if (yych <= 0xE0) - goto yy1158; + goto yy1185; if (yych <= 0xEC) - goto yy1159; - goto yy1163; + goto yy1186; + goto yy1190; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1159; - goto yy1160; + goto yy1186; + goto yy1187; } else { if (yych <= 0xF3) - goto yy1161; + goto yy1188; if (yych <= 0xF4) - goto yy1162; + goto yy1189; } } } - yy1152 : { return 0; } - yy1153: + yy1179 : { return 0; } + yy1180: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy1174; + goto yy1201; } if (yych <= '\f') { if (yych == '\n') - goto yy1172; - goto yy1152; + goto yy1199; + goto yy1179; } else { if (yych <= '\r') - goto yy1172; + goto yy1199; if (yych == ' ') - goto yy1170; - goto yy1152; + goto yy1197; + goto yy1179; } - yy1154: + yy1181: yych = *(marker = ++p); if (yybm[0 + yych] & 32) { - goto yy1164; + goto yy1191; } if (yych <= '\f') { if (yych == '\n') - goto yy1166; - goto yy1152; + goto yy1193; + goto yy1179; } else { if (yych <= '\r') - goto yy1166; + goto yy1193; if (yych == '-') - goto yy1168; - goto yy1152; + goto yy1195; + goto yy1179; } - yy1155: + yy1182: yych = *++p; - goto yy1152; - yy1156: + goto yy1179; + yy1183: yych = *++p; if (yych <= 0x7F) - goto yy1157; + goto yy1184; if (yych <= 0xBF) - goto yy1155; - yy1157: + goto yy1182; + yy1184: p = marker; - goto yy1152; - yy1158: + goto yy1179; + yy1185: yych = *++p; if (yych <= 0x9F) - goto yy1157; + goto yy1184; if (yych <= 0xBF) - goto yy1156; - goto yy1157; - yy1159: + goto yy1183; + goto yy1184; + yy1186: yych = *++p; if (yych <= 0x7F) - goto yy1157; + goto yy1184; if (yych <= 0xBF) - goto yy1156; - goto yy1157; - yy1160: + goto yy1183; + goto yy1184; + yy1187: yych = *++p; if (yych <= 0x8F) - goto yy1157; + goto yy1184; if (yych <= 0xBF) - goto yy1159; - goto yy1157; - yy1161: + goto yy1186; + goto yy1184; + yy1188: yych = *++p; if (yych <= 0x7F) - goto yy1157; + goto yy1184; if (yych <= 0xBF) - goto yy1159; - goto yy1157; - yy1162: + goto yy1186; + goto yy1184; + yy1189: yych = *++p; if (yych <= 0x7F) - goto yy1157; + goto yy1184; if (yych <= 0x8F) - goto yy1159; - goto yy1157; - yy1163: + goto yy1186; + goto yy1184; + yy1190: yych = *++p; if (yych <= 0x7F) - goto yy1157; + goto yy1184; if (yych <= 0x9F) - goto yy1156; - goto yy1157; - yy1164: + goto yy1183; + goto yy1184; + yy1191: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1164; + goto yy1191; } if (yych == '\n') - goto yy1166; + goto yy1193; if (yych != '\r') - goto yy1157; - yy1166: + goto yy1184; + yy1193: ++p; { return 2; } - yy1168: + yy1195: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1164; + goto yy1191; } if (yych <= '\f') { if (yych == '\n') - goto yy1166; - goto yy1157; + goto yy1193; + goto yy1184; } else { if (yych <= '\r') - goto yy1166; + goto yy1193; if (yych == '-') - goto yy1168; - goto yy1157; + goto yy1195; + goto yy1184; } - yy1170: + yy1197: ++p; yych = *p; if (yych <= '\f') { if (yych != '\n') - goto yy1157; + goto yy1184; } else { if (yych <= '\r') - goto yy1172; + goto yy1199; if (yych == ' ') - goto yy1170; - goto yy1157; + goto yy1197; + goto yy1184; } - yy1172: + yy1199: ++p; { return 1; } - yy1174: + yy1201: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1174; + goto yy1201; } if (yych <= '\f') { if (yych == '\n') - goto yy1172; - goto yy1157; + goto yy1199; + goto yy1184; } else { if (yych <= '\r') - goto yy1172; + goto yy1199; if (yych == ' ') - goto yy1170; - goto yy1157; + goto yy1197; + goto yy1184; } } } @@ -18248,9 +18923,9 @@ 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, 32, 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, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -18265,347 +18940,269 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { if (yych <= 0x7F) { if (yych <= '*') { if (yych == '\n') - goto yy1178; + goto yy1205; if (yych <= ')') - goto yy1182; - goto yy1179; + goto yy1209; + goto yy1206; } else { if (yych <= '-') { if (yych <= ',') - goto yy1182; - goto yy1181; + goto yy1209; + goto yy1208; } else { if (yych == '_') - goto yy1180; - goto yy1182; + goto yy1207; + goto yy1209; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych >= 0xC2) - goto yy1183; + goto yy1210; } else { if (yych <= 0xE0) - goto yy1185; + goto yy1212; if (yych <= 0xEC) - goto yy1186; - goto yy1190; + goto yy1213; + goto yy1217; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1186; - goto yy1187; + goto yy1213; + goto yy1214; } else { if (yych <= 0xF3) - goto yy1188; + goto yy1215; if (yych <= 0xF4) - goto yy1189; + goto yy1216; } } } - yy1178 : { return 0; } - yy1179: + yy1205 : { return 0; } + yy1206: yych = *(marker = ++p); if (yych == ' ') - goto yy1215; + goto yy1238; if (yych == '*') - goto yy1217; - goto yy1178; - yy1180: + goto yy1240; + goto yy1205; + yy1207: yych = *(marker = ++p); if (yych == ' ') - goto yy1203; + goto yy1228; if (yych == '_') - goto yy1205; - goto yy1178; - yy1181: + goto yy1230; + goto yy1205; + yy1208: yych = *(marker = ++p); if (yybm[0 + yych] & 8) { - goto yy1191; + goto yy1218; } if (yych == '-') - goto yy1193; - goto yy1178; - yy1182: + goto yy1220; + goto yy1205; + yy1209: yych = *++p; - goto yy1178; - yy1183: + goto yy1205; + yy1210: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1211; if (yych <= 0xBF) - goto yy1182; - yy1184: + goto yy1209; + yy1211: p = marker; - goto yy1178; - yy1185: + goto yy1205; + yy1212: yych = *++p; if (yych <= 0x9F) - goto yy1184; + goto yy1211; if (yych <= 0xBF) - goto yy1183; - goto yy1184; - yy1186: + goto yy1210; + goto yy1211; + yy1213: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1211; if (yych <= 0xBF) - goto yy1183; - goto yy1184; - yy1187: + goto yy1210; + goto yy1211; + yy1214: yych = *++p; if (yych <= 0x8F) - goto yy1184; + goto yy1211; if (yych <= 0xBF) - goto yy1186; - goto yy1184; - yy1188: + goto yy1213; + goto yy1211; + yy1215: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1211; if (yych <= 0xBF) - goto yy1186; - goto yy1184; - yy1189: + goto yy1213; + goto yy1211; + yy1216: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1211; if (yych <= 0x8F) - goto yy1186; - goto yy1184; - yy1190: + goto yy1213; + goto yy1211; + yy1217: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1211; if (yych <= 0x9F) - goto yy1183; - goto yy1184; - yy1191: + goto yy1210; + goto yy1211; + yy1218: ++p; yych = *p; if (yybm[0 + yych] & 8) { - goto yy1191; + goto yy1218; } if (yych != '-') - goto yy1184; - yy1193: + goto yy1211; + yy1220: ++p; yych = *p; if (yych == ' ') - goto yy1193; + goto yy1220; if (yych != '-') - goto yy1184; - yy1195: + goto yy1211; + yy1222: ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1184; - } else { - if (yych <= '\n') - goto yy1199; - if (yych <= '\f') - goto yy1184; - goto yy1199; - } + if (yybm[0 + yych] & 16) { + goto yy1222; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy1211; + if (yych >= '\n') + goto yy1226; } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1184; - goto yy1195; - } else { - if (yych == '-') - goto yy1201; - goto yy1184; - } + if (yych == '\r') + goto yy1226; + goto yy1211; } - yy1197: + yy1224: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy1197; + if (yybm[0 + yych] & 32) { + goto yy1224; } if (yych <= 0x08) - goto yy1184; + goto yy1211; if (yych <= '\n') - goto yy1199; + goto yy1226; if (yych != '\r') - goto yy1184; - yy1199: + goto yy1211; + yy1226: ++p; { return (bufsize_t)(p - start); } - yy1201: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1201; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1184; - if (yych <= '\t') - goto yy1197; - goto yy1199; - } else { - if (yych == '\r') - goto yy1199; - goto yy1184; - } - yy1203: + yy1228: ++p; yych = *p; if (yych == ' ') - goto yy1203; + goto yy1228; if (yych != '_') - goto yy1184; - yy1205: + goto yy1211; + yy1230: ++p; yych = *p; if (yych == ' ') - goto yy1205; + goto yy1230; if (yych != '_') - goto yy1184; - yy1207: + goto yy1211; + yy1232: ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1184; - } else { - if (yych <= '\n') - goto yy1211; - if (yych <= '\f') - goto yy1184; + if (yybm[0 + yych] & 64) { + goto yy1232; + } + if (yych <= '\n') { + if (yych <= 0x08) goto yy1211; - } + if (yych >= '\n') + goto yy1236; } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1184; - goto yy1207; - } else { - if (yych == '_') - goto yy1213; - goto yy1184; - } + if (yych == '\r') + goto yy1236; + goto yy1211; } - yy1209: + yy1234: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1184; + goto yy1211; if (yych <= '\t') - goto yy1209; + goto yy1234; if (yych >= '\v') - goto yy1184; + goto yy1211; } else { if (yych <= '\r') - goto yy1211; + goto yy1236; if (yych == ' ') - goto yy1209; - goto yy1184; - } - yy1211: - ++p; - { return (bufsize_t)(p - start); } - yy1213: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1213; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1184; - if (yych <= '\t') - goto yy1209; + goto yy1234; goto yy1211; - } else { - if (yych == '\r') - goto yy1211; - goto yy1184; } - yy1215: + yy1236: + ++p; + { return (bufsize_t)(p - start); } + yy1238: ++p; yych = *p; if (yych == ' ') - goto yy1215; + goto yy1238; if (yych != '*') - goto yy1184; - yy1217: + goto yy1211; + yy1240: ++p; yych = *p; if (yych == ' ') - goto yy1217; + goto yy1240; if (yych != '*') - goto yy1184; - yy1219: + goto yy1211; + yy1242: ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1184; - } else { - if (yych <= '\n') - goto yy1223; - if (yych <= '\f') - goto yy1184; - goto yy1223; - } + if (yybm[0 + yych] & 128) { + goto yy1242; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy1211; + if (yych >= '\n') + goto yy1246; } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1184; - goto yy1219; - } else { - if (yych == '*') - goto yy1225; - goto yy1184; - } + if (yych == '\r') + goto yy1246; + goto yy1211; } - yy1221: + yy1244: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1184; + goto yy1211; if (yych <= '\t') - goto yy1221; + goto yy1244; if (yych >= '\v') - goto yy1184; + goto yy1211; } else { if (yych <= '\r') - goto yy1223; + goto yy1246; if (yych == ' ') - goto yy1221; - goto yy1184; + goto yy1244; + goto yy1211; } - yy1223: + yy1246: ++p; { return (bufsize_t)(p - start); } - yy1225: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy1225; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1184; - if (yych <= '\t') - goto yy1221; - goto yy1223; - } else { - if (yych == '\r') - goto yy1223; - goto yy1184; - } } } @@ -18641,374 +19238,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1229; + goto yy1250; if (yych <= '_') - goto yy1232; - goto yy1230; + goto yy1253; + goto yy1251; } else { if (yych == '~') - goto yy1231; + goto yy1252; if (yych <= 0x7F) - goto yy1232; + goto yy1253; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1233; + goto yy1254; if (yych <= 0xE0) - goto yy1235; + goto yy1256; if (yych <= 0xEC) - goto yy1236; - goto yy1240; + goto yy1257; + goto yy1261; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1236; - goto yy1237; + goto yy1257; + goto yy1258; } else { if (yych <= 0xF3) - goto yy1238; + goto yy1259; if (yych <= 0xF4) - goto yy1239; + goto yy1260; } } } - yy1229 : { return 0; } - yy1230: + yy1250 : { return 0; } + yy1251: yych = *(marker = ++p); if (yych == '`') - goto yy1255; - goto yy1229; - yy1231: + goto yy1276; + goto yy1250; + yy1252: yych = *(marker = ++p); if (yych == '~') - goto yy1241; - goto yy1229; - yy1232: + goto yy1262; + goto yy1250; + yy1253: yych = *++p; - goto yy1229; - yy1233: + goto yy1250; + yy1254: yych = *++p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1232; - yy1234: + goto yy1253; + yy1255: p = marker; - goto yy1229; - yy1235: + goto yy1250; + yy1256: yych = *++p; if (yych <= 0x9F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1233; - goto yy1234; - yy1236: + goto yy1254; + goto yy1255; + yy1257: yych = *++p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1233; - goto yy1234; - yy1237: + goto yy1254; + goto yy1255; + yy1258: yych = *++p; if (yych <= 0x8F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1236; - goto yy1234; - yy1238: + goto yy1257; + goto yy1255; + yy1259: yych = *++p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1236; - goto yy1234; - yy1239: + goto yy1257; + goto yy1255; + yy1260: yych = *++p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0x8F) - goto yy1236; - goto yy1234; - yy1240: + goto yy1257; + goto yy1255; + yy1261: yych = *++p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0x9F) - goto yy1233; - goto yy1234; - yy1241: + goto yy1254; + goto yy1255; + yy1262: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1242; + goto yy1263; } - goto yy1234; - yy1242: + goto yy1255; + yy1263: + marker = p + 1; ++p; yych = *p; - marker = p; if (yybm[0 + yych] & 32) { - goto yy1244; + goto yy1265; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1234; + goto yy1255; if (yych <= '\r') - goto yy1253; - goto yy1242; + goto yy1274; + goto yy1263; } else { if (yych <= 0xC1) - goto yy1234; + goto yy1255; if (yych <= 0xDF) - goto yy1246; - goto yy1247; + goto yy1267; + goto yy1268; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1252; - goto yy1248; + goto yy1273; + goto yy1269; } else { if (yych <= 0xF0) - goto yy1249; + goto yy1270; if (yych <= 0xF3) - goto yy1250; + goto yy1271; if (yych <= 0xF4) - goto yy1251; - goto yy1234; + goto yy1272; + goto yy1255; } } - yy1244: + yy1265: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1244; + goto yy1265; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1234; + goto yy1255; if (yych <= '\r') - goto yy1253; - goto yy1234; + goto yy1274; + goto yy1255; } else { if (yych <= 0xDF) - goto yy1246; + goto yy1267; if (yych <= 0xE0) - goto yy1247; - goto yy1248; + goto yy1268; + goto yy1269; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1252; + goto yy1273; if (yych <= 0xEF) - goto yy1248; - goto yy1249; + goto yy1269; + goto yy1270; } else { if (yych <= 0xF3) - goto yy1250; + goto yy1271; if (yych <= 0xF4) - goto yy1251; - goto yy1234; + goto yy1272; + goto yy1255; } } - yy1246: + yy1267: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1244; - goto yy1234; - yy1247: + goto yy1265; + goto yy1255; + yy1268: ++p; yych = *p; if (yych <= 0x9F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1246; - goto yy1234; - yy1248: + goto yy1267; + goto yy1255; + yy1269: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1246; - goto yy1234; - yy1249: + goto yy1267; + goto yy1255; + yy1270: ++p; yych = *p; if (yych <= 0x8F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1248; - goto yy1234; - yy1250: + goto yy1269; + goto yy1255; + yy1271: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1248; - goto yy1234; - yy1251: + goto yy1269; + goto yy1255; + yy1272: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0x8F) - goto yy1248; - goto yy1234; - yy1252: + goto yy1269; + goto yy1255; + yy1273: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0x9F) - goto yy1246; - goto yy1234; - yy1253: + goto yy1267; + goto yy1255; + yy1274: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1255: + yy1276: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy1256; + goto yy1277; } - goto yy1234; - yy1256: + goto yy1255; + yy1277: + marker = p + 1; ++p; yych = *p; - marker = p; if (yybm[0 + yych] & 128) { - goto yy1258; + goto yy1279; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy1234; + goto yy1255; if (yych <= '\r') - goto yy1267; - goto yy1256; + goto yy1288; + goto yy1277; } else { if (yych <= 0xC1) - goto yy1234; + goto yy1255; if (yych <= 0xDF) - goto yy1260; - goto yy1261; + goto yy1281; + goto yy1282; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1266; - goto yy1262; + goto yy1287; + goto yy1283; } else { if (yych <= 0xF0) - goto yy1263; + goto yy1284; if (yych <= 0xF3) - goto yy1264; + goto yy1285; if (yych <= 0xF4) - goto yy1265; - goto yy1234; + goto yy1286; + goto yy1255; } } - yy1258: + yy1279: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1258; + goto yy1279; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1234; + goto yy1255; if (yych <= '\r') - goto yy1267; - goto yy1234; + goto yy1288; + goto yy1255; } else { if (yych <= 0xDF) - goto yy1260; + goto yy1281; if (yych <= 0xE0) - goto yy1261; - goto yy1262; + goto yy1282; + goto yy1283; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1266; + goto yy1287; if (yych <= 0xEF) - goto yy1262; - goto yy1263; + goto yy1283; + goto yy1284; } else { if (yych <= 0xF3) - goto yy1264; + goto yy1285; if (yych <= 0xF4) - goto yy1265; - goto yy1234; + goto yy1286; + goto yy1255; } } - yy1260: + yy1281: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1258; - goto yy1234; - yy1261: + goto yy1279; + goto yy1255; + yy1282: ++p; yych = *p; if (yych <= 0x9F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1260; - goto yy1234; - yy1262: + goto yy1281; + goto yy1255; + yy1283: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1260; - goto yy1234; - yy1263: + goto yy1281; + goto yy1255; + yy1284: ++p; yych = *p; if (yych <= 0x8F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1262; - goto yy1234; - yy1264: + goto yy1283; + goto yy1255; + yy1285: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0xBF) - goto yy1262; - goto yy1234; - yy1265: + goto yy1283; + goto yy1255; + yy1286: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0x8F) - goto yy1262; - goto yy1234; - yy1266: + goto yy1283; + goto yy1255; + yy1287: ++p; yych = *p; if (yych <= 0x7F) - goto yy1234; + goto yy1255; if (yych <= 0x9F) - goto yy1260; - goto yy1234; - yy1267: + goto yy1281; + goto yy1255; + yy1288: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19040,190 +19637,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1271; + goto yy1292; if (yych <= '_') - goto yy1274; - goto yy1272; + goto yy1295; + goto yy1293; } else { if (yych == '~') - goto yy1273; + goto yy1294; if (yych <= 0x7F) - goto yy1274; + goto yy1295; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1275; + goto yy1296; if (yych <= 0xE0) - goto yy1277; + goto yy1298; if (yych <= 0xEC) - goto yy1278; - goto yy1282; + goto yy1299; + goto yy1303; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1278; - goto yy1279; + goto yy1299; + goto yy1300; } else { if (yych <= 0xF3) - goto yy1280; + goto yy1301; if (yych <= 0xF4) - goto yy1281; + goto yy1302; } } } - yy1271 : { return 0; } - yy1272: + yy1292 : { return 0; } + yy1293: yych = *(marker = ++p); if (yych == '`') - goto yy1290; - goto yy1271; - yy1273: + goto yy1311; + goto yy1292; + yy1294: yych = *(marker = ++p); if (yych == '~') - goto yy1283; - goto yy1271; - yy1274: + goto yy1304; + goto yy1292; + yy1295: yych = *++p; - goto yy1271; - yy1275: + goto yy1292; + yy1296: yych = *++p; if (yych <= 0x7F) - goto yy1276; + goto yy1297; if (yych <= 0xBF) - goto yy1274; - yy1276: + goto yy1295; + yy1297: p = marker; - goto yy1271; - yy1277: + goto yy1292; + yy1298: yych = *++p; if (yych <= 0x9F) - goto yy1276; + goto yy1297; if (yych <= 0xBF) - goto yy1275; - goto yy1276; - yy1278: + goto yy1296; + goto yy1297; + yy1299: yych = *++p; if (yych <= 0x7F) - goto yy1276; + goto yy1297; if (yych <= 0xBF) - goto yy1275; - goto yy1276; - yy1279: + goto yy1296; + goto yy1297; + yy1300: yych = *++p; if (yych <= 0x8F) - goto yy1276; + goto yy1297; if (yych <= 0xBF) - goto yy1278; - goto yy1276; - yy1280: + goto yy1299; + goto yy1297; + yy1301: yych = *++p; if (yych <= 0x7F) - goto yy1276; + goto yy1297; if (yych <= 0xBF) - goto yy1278; - goto yy1276; - yy1281: + goto yy1299; + goto yy1297; + yy1302: yych = *++p; if (yych <= 0x7F) - goto yy1276; + goto yy1297; if (yych <= 0x8F) - goto yy1278; - goto yy1276; - yy1282: + goto yy1299; + goto yy1297; + yy1303: yych = *++p; if (yych <= 0x7F) - goto yy1276; + goto yy1297; if (yych <= 0x9F) - goto yy1275; - goto yy1276; - yy1283: + goto yy1296; + goto yy1297; + yy1304: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1284; + goto yy1305; } - goto yy1276; - yy1284: + goto yy1297; + yy1305: + marker = p + 1; ++p; yych = *p; - marker = p; if (yybm[0 + yych] & 64) { - goto yy1286; + goto yy1307; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1276; + goto yy1297; if (yych <= '\n') - goto yy1288; - goto yy1276; + goto yy1309; + goto yy1297; } else { if (yych <= '\r') - goto yy1288; + goto yy1309; if (yych == '~') - goto yy1284; - goto yy1276; + goto yy1305; + goto yy1297; } - yy1286: + yy1307: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1286; + goto yy1307; } if (yych <= 0x08) - goto yy1276; + goto yy1297; if (yych <= '\n') - goto yy1288; + goto yy1309; if (yych != '\r') - goto yy1276; - yy1288: + goto yy1297; + yy1309: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1290: + yy1311: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1291; + goto yy1312; } - goto yy1276; - yy1291: + goto yy1297; + yy1312: + marker = p + 1; ++p; yych = *p; - marker = p; if (yybm[0 + yych] & 128) { - goto yy1291; + goto yy1312; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1276; + goto yy1297; if (yych <= '\t') - goto yy1293; + goto yy1314; if (yych <= '\n') - goto yy1295; - goto yy1276; + goto yy1316; + goto yy1297; } else { if (yych <= '\r') - goto yy1295; + goto yy1316; if (yych != ' ') - goto yy1276; + goto yy1297; } - yy1293: + yy1314: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1276; + goto yy1297; if (yych <= '\t') - goto yy1293; + goto yy1314; if (yych >= '\v') - goto yy1276; + goto yy1297; } else { if (yych <= '\r') - goto yy1295; + goto yy1316; if (yych == ' ') - goto yy1293; - goto yy1276; + goto yy1314; + goto yy1297; } - yy1295: + yy1316: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19242,997 +19839,997 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '%') { if (yych != '\n') - goto yy1301; + goto yy1322; } else { if (yych <= '&') - goto yy1300; + goto yy1321; if (yych <= 0x7F) - goto yy1301; + goto yy1322; if (yych >= 0xC2) - goto yy1302; + goto yy1323; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1304; + goto yy1325; if (yych == 0xED) - goto yy1309; - goto yy1305; + goto yy1330; + goto yy1326; } else { if (yych <= 0xF0) - goto yy1306; + goto yy1327; if (yych <= 0xF3) - goto yy1307; + goto yy1328; if (yych <= 0xF4) - goto yy1308; + goto yy1329; } } - yy1299 : { return 0; } - yy1300: + yy1320 : { return 0; } + yy1321: yych = *(marker = ++p); if (yych <= '@') { if (yych == '#') - goto yy1310; - goto yy1299; + goto yy1331; + goto yy1320; } else { if (yych <= 'Z') - goto yy1311; + goto yy1332; if (yych <= '`') - goto yy1299; + goto yy1320; if (yych <= 'z') - goto yy1311; - goto yy1299; + goto yy1332; + goto yy1320; } - yy1301: + yy1322: yych = *++p; - goto yy1299; - yy1302: + goto yy1320; + yy1323: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1324; if (yych <= 0xBF) - goto yy1301; - yy1303: + goto yy1322; + yy1324: p = marker; - goto yy1299; - yy1304: + goto yy1320; + yy1325: yych = *++p; if (yych <= 0x9F) - goto yy1303; + goto yy1324; if (yych <= 0xBF) - goto yy1302; - goto yy1303; - yy1305: + goto yy1323; + goto yy1324; + yy1326: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1324; if (yych <= 0xBF) - goto yy1302; - goto yy1303; - yy1306: + goto yy1323; + goto yy1324; + yy1327: yych = *++p; if (yych <= 0x8F) - goto yy1303; + goto yy1324; if (yych <= 0xBF) - goto yy1305; - goto yy1303; - yy1307: + goto yy1326; + goto yy1324; + yy1328: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1324; if (yych <= 0xBF) - goto yy1305; - goto yy1303; - yy1308: + goto yy1326; + goto yy1324; + yy1329: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1324; if (yych <= 0x8F) - goto yy1305; - goto yy1303; - yy1309: + goto yy1326; + goto yy1324; + yy1330: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1324; if (yych <= 0x9F) - goto yy1302; - goto yy1303; - yy1310: + goto yy1323; + goto yy1324; + yy1331: yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1346; - goto yy1303; + goto yy1367; + goto yy1324; } else { if (yych <= 'X') - goto yy1345; + goto yy1366; if (yych == 'x') - goto yy1345; - goto yy1303; + goto yy1366; + goto yy1324; } - yy1311: + yy1332: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych >= ':') - goto yy1303; + goto yy1324; } else { if (yych <= 'Z') - goto yy1312; + goto yy1333; if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } - yy1312: + yy1333: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1315; + goto yy1336; if (yych <= ':') - goto yy1303; + goto yy1324; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; - goto yy1315; + goto yy1324; + goto yy1336; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych <= 'z') - goto yy1315; - goto yy1303; + goto yy1336; + goto yy1324; } } - yy1313: + yy1334: ++p; { return (bufsize_t)(p - start); } - yy1315: + yy1336: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1316; + goto yy1337; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1316: + yy1337: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1317; + goto yy1338; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1317: + yy1338: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1318; + goto yy1339; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1318: + yy1339: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1319; + goto yy1340; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1319: + yy1340: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1320; + goto yy1341; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1320: + yy1341: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1321; + goto yy1342; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1321: + yy1342: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1322; + goto yy1343; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1322: + yy1343: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1323; + goto yy1344; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1323: + yy1344: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; - if (yych <= '9') goto yy1324; + if (yych <= '9') + goto yy1345; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1324: + yy1345: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1325; + goto yy1346; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1325: + yy1346: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1326; + goto yy1347; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1326: + yy1347: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1327; + goto yy1348; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1327: + yy1348: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1328; + goto yy1349; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1328: + yy1349: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1329; + goto yy1350; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1329: + yy1350: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1330; + goto yy1351; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1330: + yy1351: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1331; + goto yy1352; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1331: + yy1352: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1332; + goto yy1353; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1332: + yy1353: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1333; + goto yy1354; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1333: + yy1354: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1334; + goto yy1355; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1334: + yy1355: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1335; + goto yy1356; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1335: + yy1356: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1336; + goto yy1357; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1336: + yy1357: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1337; + goto yy1358; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1337: + yy1358: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1338; + goto yy1359; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1338: + yy1359: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1339; + goto yy1360; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1339: + yy1360: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1340; + goto yy1361; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1340: + yy1361: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1341; + goto yy1362; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1341: + yy1362: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1342; + goto yy1363; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1342: + yy1363: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1343; + goto yy1364; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1343: + yy1364: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1344; + goto yy1365; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= '{') - goto yy1303; + goto yy1324; } } - yy1344: + yy1365: yych = *++p; if (yych == ';') - goto yy1313; - goto yy1303; - yy1345: + goto yy1334; + goto yy1324; + yy1366: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1353; - goto yy1303; + goto yy1374; + goto yy1324; } else { if (yych <= 'F') - goto yy1353; + goto yy1374; if (yych <= '`') - goto yy1303; + goto yy1324; if (yych <= 'f') - goto yy1353; - goto yy1303; + goto yy1374; + goto yy1324; } - yy1346: + yy1367: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1347; + goto yy1368; if (yych == ';') - goto yy1313; - goto yy1303; - yy1347: + goto yy1334; + goto yy1324; + yy1368: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1348; + goto yy1369; if (yych == ';') - goto yy1313; - goto yy1303; - yy1348: + goto yy1334; + goto yy1324; + yy1369: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1349; + goto yy1370; if (yych == ';') - goto yy1313; - goto yy1303; - yy1349: + goto yy1334; + goto yy1324; + yy1370: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1350; + goto yy1371; if (yych == ';') - goto yy1313; - goto yy1303; - yy1350: + goto yy1334; + goto yy1324; + yy1371: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1351; + goto yy1372; if (yych == ';') - goto yy1313; - goto yy1303; - yy1351: + goto yy1334; + goto yy1324; + yy1372: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1352; + goto yy1373; if (yych == ';') - goto yy1313; - goto yy1303; - yy1352: + goto yy1334; + goto yy1324; + yy1373: yych = *++p; if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1344; + goto yy1365; if (yych == ';') - goto yy1313; - goto yy1303; - yy1353: + goto yy1334; + goto yy1324; + yy1374: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1354; + goto yy1375; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= 'g') - goto yy1303; + goto yy1324; } } - yy1354: + yy1375: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1355; + goto yy1376; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= 'g') - goto yy1303; + goto yy1324; } } - yy1355: + yy1376: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1356; + goto yy1377; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= 'g') - goto yy1303; + goto yy1324; } } - yy1356: + yy1377: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1357; + goto yy1378; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= 'g') - goto yy1303; + goto yy1324; } } - yy1357: + yy1378: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1358; + goto yy1379; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= 'g') - goto yy1303; + goto yy1324; } } - yy1358: + yy1379: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1359; + goto yy1380; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; + goto yy1324; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych >= 'g') - goto yy1303; + goto yy1324; } } - yy1359: + yy1380: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1303; + goto yy1324; if (yych <= '9') - goto yy1344; + goto yy1365; if (yych <= ':') - goto yy1303; - goto yy1313; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1303; - goto yy1344; + goto yy1324; + goto yy1365; } else { if (yych <= '`') - goto yy1303; + goto yy1324; if (yych <= 'f') - goto yy1344; - goto yy1303; + goto yy1365; + goto yy1324; } } } @@ -20252,415 +20849,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'I') { if (yych <= 'C') { if (yych != '\n') - goto yy1367; + goto yy1388; } else { if (yych <= 'D') - goto yy1363; + goto yy1384; if (yych == 'F') - goto yy1366; - goto yy1367; + goto yy1387; + goto yy1388; } } else { if (yych <= 'V') { if (yych <= 'J') - goto yy1364; + goto yy1385; if (yych <= 'U') - goto yy1367; - goto yy1365; + goto yy1388; + goto yy1386; } else { if (yych == 'd') - goto yy1363; + goto yy1384; if (yych <= 'e') - goto yy1367; - goto yy1366; + goto yy1388; + goto yy1387; } } } else { if (yych <= 0xDF) { if (yych <= 'u') { if (yych == 'j') - goto yy1364; - goto yy1367; + goto yy1385; + goto yy1388; } else { if (yych <= 'v') - goto yy1365; + goto yy1386; if (yych <= 0x7F) - goto yy1367; + goto yy1388; if (yych >= 0xC2) - goto yy1368; + goto yy1389; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1370; + goto yy1391; if (yych == 0xED) - goto yy1375; - goto yy1371; + goto yy1396; + goto yy1392; } else { if (yych <= 0xF0) - goto yy1372; + goto yy1393; if (yych <= 0xF3) - goto yy1373; + goto yy1394; if (yych <= 0xF4) - goto yy1374; + goto yy1395; } } } - yy1362 : { return 0; } - yy1363: + yy1383 : { return 0; } + yy1384: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1397; + goto yy1418; if (yych == 'a') - goto yy1397; - goto yy1362; - yy1364: + goto yy1418; + goto yy1383; + yy1385: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1388; + goto yy1409; if (yych == 'a') - goto yy1388; - goto yy1362; - yy1365: + goto yy1409; + goto yy1383; + yy1386: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1381; + goto yy1402; if (yych == 'b') - goto yy1381; - goto yy1362; - yy1366: + goto yy1402; + goto yy1383; + yy1387: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy1376; + goto yy1397; if (yych == 'i') - goto yy1376; - goto yy1362; - yy1367: + goto yy1397; + goto yy1383; + yy1388: yych = *++p; - goto yy1362; - yy1368: + goto yy1383; + yy1389: yych = *++p; if (yych <= 0x7F) - goto yy1369; + goto yy1390; if (yych <= 0xBF) - goto yy1367; - yy1369: + goto yy1388; + yy1390: p = marker; if (yyaccept == 0) { - goto yy1362; + goto yy1383; } else { - goto yy1380; + goto yy1401; } - yy1370: + yy1391: yych = *++p; if (yych <= 0x9F) - goto yy1369; + goto yy1390; if (yych <= 0xBF) - goto yy1368; - goto yy1369; - yy1371: + goto yy1389; + goto yy1390; + yy1392: yych = *++p; if (yych <= 0x7F) - goto yy1369; + goto yy1390; if (yych <= 0xBF) - goto yy1368; - goto yy1369; - yy1372: + goto yy1389; + goto yy1390; + yy1393: yych = *++p; if (yych <= 0x8F) - goto yy1369; + goto yy1390; if (yych <= 0xBF) - goto yy1371; - goto yy1369; - yy1373: + goto yy1392; + goto yy1390; + yy1394: yych = *++p; if (yych <= 0x7F) - goto yy1369; + goto yy1390; if (yych <= 0xBF) - goto yy1371; - goto yy1369; - yy1374: + goto yy1392; + goto yy1390; + yy1395: yych = *++p; if (yych <= 0x7F) - goto yy1369; + goto yy1390; if (yych <= 0x8F) - goto yy1371; - goto yy1369; - yy1375: + goto yy1392; + goto yy1390; + yy1396: yych = *++p; if (yych <= 0x7F) - goto yy1369; + goto yy1390; if (yych <= 0x9F) - goto yy1368; - goto yy1369; - yy1376: + goto yy1389; + goto yy1390; + yy1397: yych = *++p; if (yych == 'L') - goto yy1377; + goto yy1398; if (yych != 'l') - goto yy1369; - yy1377: + goto yy1390; + yy1398: yych = *++p; if (yych == 'E') - goto yy1378; + goto yy1399; if (yych != 'e') - goto yy1369; - yy1378: + goto yy1390; + yy1399: yych = *++p; if (yych != ':') - goto yy1369; - yy1379: + goto yy1390; + yy1400: ++p; - yy1380 : { return (bufsize_t)(p - start); } - yy1381: + yy1401 : { return (bufsize_t)(p - start); } + yy1402: yych = *++p; if (yych == 'S') - goto yy1382; + goto yy1403; if (yych != 's') - goto yy1369; - yy1382: + goto yy1390; + yy1403: yych = *++p; if (yych == 'C') - goto yy1383; + goto yy1404; if (yych != 'c') - goto yy1369; - yy1383: + goto yy1390; + yy1404: yych = *++p; if (yych == 'R') - goto yy1384; + goto yy1405; if (yych != 'r') - goto yy1369; - yy1384: + goto yy1390; + yy1405: yych = *++p; if (yych == 'I') - goto yy1385; + goto yy1406; if (yych != 'i') - goto yy1369; - yy1385: + goto yy1390; + yy1406: yych = *++p; if (yych == 'P') - goto yy1386; + goto yy1407; if (yych != 'p') - goto yy1369; - yy1386: + goto yy1390; + yy1407: yych = *++p; if (yych == 'T') - goto yy1387; + goto yy1408; if (yych != 't') - goto yy1369; - yy1387: + goto yy1390; + yy1408: yych = *++p; if (yych == ':') - goto yy1379; - goto yy1369; - yy1388: + goto yy1400; + goto yy1390; + yy1409: yych = *++p; if (yych == 'V') - goto yy1389; + goto yy1410; if (yych != 'v') - goto yy1369; - yy1389: + goto yy1390; + yy1410: yych = *++p; if (yych == 'A') - goto yy1390; + goto yy1411; if (yych != 'a') - goto yy1369; - yy1390: + goto yy1390; + yy1411: yych = *++p; if (yych == 'S') - goto yy1391; + goto yy1412; if (yych != 's') - goto yy1369; - yy1391: + goto yy1390; + yy1412: yych = *++p; if (yych == 'C') - goto yy1392; + goto yy1413; if (yych != 'c') - goto yy1369; - yy1392: + goto yy1390; + yy1413: yych = *++p; if (yych == 'R') - goto yy1393; + goto yy1414; if (yych != 'r') - goto yy1369; - yy1393: + goto yy1390; + yy1414: yych = *++p; if (yych == 'I') - goto yy1394; + goto yy1415; if (yych != 'i') - goto yy1369; - yy1394: + goto yy1390; + yy1415: yych = *++p; if (yych == 'P') - goto yy1395; + goto yy1416; if (yych != 'p') - goto yy1369; - yy1395: + goto yy1390; + yy1416: yych = *++p; if (yych == 'T') - goto yy1396; + goto yy1417; if (yych != 't') - goto yy1369; - yy1396: + goto yy1390; + yy1417: yych = *++p; if (yych == ':') - goto yy1379; - goto yy1369; - yy1397: + goto yy1400; + goto yy1390; + yy1418: yych = *++p; if (yych == 'T') - goto yy1398; + goto yy1419; if (yych != 't') - goto yy1369; - yy1398: + goto yy1390; + yy1419: yych = *++p; if (yych == 'A') - goto yy1399; + goto yy1420; if (yych != 'a') - goto yy1369; - yy1399: + goto yy1390; + yy1420: yych = *++p; if (yych != ':') - goto yy1369; + goto yy1390; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1401; + goto yy1422; if (yych != 'i') - goto yy1380; - yy1401: + goto yy1401; + yy1422: yych = *++p; if (yych == 'M') - goto yy1402; + goto yy1423; if (yych != 'm') - goto yy1369; - yy1402: + goto yy1390; + yy1423: yych = *++p; if (yych == 'A') - goto yy1403; + goto yy1424; if (yych != 'a') - goto yy1369; - yy1403: + goto yy1390; + yy1424: yych = *++p; if (yych == 'G') - goto yy1404; + goto yy1425; if (yych != 'g') - goto yy1369; - yy1404: + goto yy1390; + yy1425: yych = *++p; if (yych == 'E') - goto yy1405; + goto yy1426; if (yych != 'e') - goto yy1369; - yy1405: + goto yy1390; + yy1426: yych = *++p; if (yych != '/') - goto yy1369; + goto yy1390; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1408; + goto yy1429; if (yych <= 'I') - goto yy1369; - goto yy1409; + goto yy1390; + goto yy1430; } else { if (yych == 'P') - goto yy1407; + goto yy1428; if (yych <= 'V') - goto yy1369; - goto yy1410; + goto yy1390; + goto yy1431; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1408; + goto yy1429; if (yych <= 'i') - goto yy1369; - goto yy1409; + goto yy1390; + goto yy1430; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1369; + goto yy1390; } else { if (yych == 'w') - goto yy1410; - goto yy1369; + goto yy1431; + goto yy1390; } } } - yy1407: + yy1428: yych = *++p; if (yych == 'N') - goto yy1418; + goto yy1439; if (yych == 'n') - goto yy1418; - goto yy1369; - yy1408: + goto yy1439; + goto yy1390; + yy1429: yych = *++p; if (yych == 'I') - goto yy1417; + goto yy1438; if (yych == 'i') - goto yy1417; - goto yy1369; - yy1409: + goto yy1438; + goto yy1390; + yy1430: yych = *++p; if (yych == 'P') - goto yy1415; + goto yy1436; if (yych == 'p') - goto yy1415; - goto yy1369; - yy1410: + goto yy1436; + goto yy1390; + yy1431: yych = *++p; if (yych == 'E') - goto yy1411; + goto yy1432; if (yych != 'e') - goto yy1369; - yy1411: + goto yy1390; + yy1432: yych = *++p; if (yych == 'B') - goto yy1412; + goto yy1433; if (yych != 'b') - goto yy1369; - yy1412: + goto yy1390; + yy1433: yych = *++p; if (yych == 'P') - goto yy1413; + goto yy1434; if (yych != 'p') - goto yy1369; - yy1413: + goto yy1390; + yy1434: ++p; { return 0; } - yy1415: + yy1436: yych = *++p; if (yych == 'E') - goto yy1416; + goto yy1437; if (yych != 'e') - goto yy1369; - yy1416: + goto yy1390; + yy1437: yych = *++p; if (yych == 'G') - goto yy1413; + goto yy1434; if (yych == 'g') - goto yy1413; - goto yy1369; - yy1417: + goto yy1434; + goto yy1390; + yy1438: yych = *++p; if (yych == 'F') - goto yy1413; + goto yy1434; if (yych == 'f') - goto yy1413; - goto yy1369; - yy1418: + goto yy1434; + goto yy1390; + yy1439: ++p; if ((yych = *p) == 'G') - goto yy1413; + goto yy1434; if (yych == 'g') - goto yy1413; - goto yy1369; + goto yy1434; + goto yy1390; } } diff --git a/src/scanners.re b/src/scanners.re index a7548accb0..8b1c91ec7a 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -215,7 +215,7 @@ bufsize_t _scan_link_url(const unsigned char *p) const unsigned char *start = p; /*!re2c [ \r\n]* [<] ([^<> \t\r\n\\\x00] | escaped_char | [\\])* [>] { return (bufsize_t)(p - start); } - [ \r\n]* (reg_char+ | escaped_char | [\\] | in_parens_nosp)* { return (bufsize_t)(p - start); } + [ \r\n]* (reg_char+ | escaped_char | [\\] [^() \t\v\f\r\n] | in_parens_nosp)* [\\]? { return (bufsize_t)(p - start); } .? { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 93aeacca3061b490e77047e08def107c6ab1f7b2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jan 2016 13:40:03 -0800 Subject: cmark_node_replace - unlink, but don't free, oldnode. --- man/man3/cmark.3 | 223 +++++++++++++++++++++++++++---------------------------- src/cmark.h | 3 +- src/node.c | 2 +- 3 files changed, 111 insertions(+), 117 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 786e3aa450..33f152b3a7 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -13,8 +13,8 @@ Simple Interface \fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIsize_t len\f[], \fIint options\f[]) .PP -Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with -length \f[I]len\f[] from CommonMark Markdown to HTML, returning a +Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length +\f[I]len\f[] from CommonMark Markdown to HTML, returning a null\-terminated, UTF\-8\-encoded string. .SS @@ -101,9 +101,9 @@ Creating and Destroying Nodes \fIcmark_node *\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[]) .PP -Creates a new node of type \f[I]type\f[]. Note that the node may -have other required properties, which it is the caller\[cq]s -responsibility to assign. +Creates a new node of type \f[I]type\f[]. Note that the node may have +other required properties, which it is the caller\[cq]s responsibility +to assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -118,15 +118,15 @@ Tree Traversal \fIcmark_node *\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[]) .PP -Returns the next node in the sequence after \f[I]node\f[], or -NULL if there is none. +Returns the next node in the sequence after \f[I]node\f[], or NULL if +there is none. .PP \fIcmark_node *\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[]) .PP -Returns the previous node in the sequence after \f[I]node\f[], or -NULL if there is none. +Returns the previous node in the sequence after \f[I]node\f[], or NULL +if there is none. .PP \fIcmark_node *\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[]) @@ -138,33 +138,31 @@ Returns the parent of \f[I]node\f[], or NULL if there is none. \fIcmark_node *\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[]) .PP -Returns the first child of \f[I]node\f[], or NULL if -\f[I]node\f[] has no children. +Returns the first child of \f[I]node\f[], or NULL if \f[I]node\f[] has +no children. .PP \fIcmark_node *\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[]) .PP -Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] -has no children. +Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] has no +children. .SS Iterator .PP -An iterator will walk through a tree of nodes, starting from a -root node, returning one node at a time, together with -information about whether the node is being entered or exited. -The iterator will first descend to a child node, if there is one. -When there is no child, the iterator will go to the next sibling. -When there is no next sibling, the iterator will return to the -parent (but with a \f[I]cmark_event_type\f[] of -\f[C]CMARK_EVENT_EXIT\f[]). The iterator will return -\f[C]CMARK_EVENT_DONE\f[] when it reaches the root node again. -One natural application is an HTML renderer, where an -\f[C]ENTER\f[] event outputs an open tag and an \f[C]EXIT\f[] -event outputs a close tag. An iterator might also be used to -transform an AST in some systematic way, for example, turning all -level\-3 headings into regular paragraphs. +An iterator will walk through a tree of nodes, starting from a root +node, returning one node at a time, together with information about +whether the node is being entered or exited. The iterator will first +descend to a child node, if there is one. When there is no child, the +iterator will go to the next sibling. When there is no next sibling, the +iterator will return to the parent (but with a \f[I]cmark_event_type\f[] +of \f[C]CMARK_EVENT_EXIT\f[]). The iterator will return +\f[C]CMARK_EVENT_DONE\f[] when it reaches the root node again. One +natural application is an HTML renderer, where an \f[C]ENTER\f[] event +outputs an open tag and an \f[C]EXIT\f[] event outputs a close tag. An +iterator might also be used to transform an AST in some systematic way, +for example, turning all level\-3 headings into regular paragraphs. .IP .nf \f[C] @@ -183,8 +181,8 @@ usage_example(cmark_node *root) { \f[] .fi .PP -Iterators will never return \f[C]EXIT\f[] events for leaf nodes, -which are nodes of type: +Iterators will never return \f[C]EXIT\f[] events for leaf nodes, which +are nodes of type: .IP \[bu] 2 CMARK_NODE_HTML_BLOCK .IP \[bu] 2 @@ -225,9 +223,9 @@ typedef enum { \fIcmark_iter *\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[]) .PP -Creates a new iterator starting at \f[I]root\f[]. The current -node and event type are undefined until \f[C]cmark_iter_next\f[] -is called for the first time. +Creates a new iterator starting at \f[I]root\f[]. The current node and +event type are undefined until \f[C]cmark_iter_next\f[] is called for +the first time. .PP \fIvoid\f[] \fBcmark_iter_free\f[](\fIcmark_iter *iter\f[]) @@ -265,9 +263,9 @@ Returns the root node. \fIvoid\f[] \fBcmark_iter_reset\f[](\fIcmark_iter *iter\f[], \fIcmark_node *current\f[], \fIcmark_event_type event_type\f[]) .PP -Resets the iterator so that the current node is \f[I]current\f[] -and the event type is \f[I]event_type\f[]. The new current node -must be a descendant of the root node or the root node itself. +Resets the iterator so that the current node is \f[I]current\f[] and the +event type is \f[I]event_type\f[]. The new current node must be a +descendant of the root node or the root node itself. .SS Accessors @@ -282,64 +280,63 @@ Returns the user data of \f[I]node\f[]. \fIint\f[] \fBcmark_node_set_user_data\f[](\fIcmark_node *node\f[], \fIvoid *user_data\f[]) .PP -Sets arbitrary user data for \f[I]node\f[]. Returns 1 on success, -0 on failure. +Sets arbitrary user data for \f[I]node\f[]. Returns 1 on success, 0 on +failure. .PP \fIcmark_node_type\f[] \fBcmark_node_get_type\f[](\fIcmark_node *node\f[]) .PP -Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on -error. +Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on error. .PP \fIconst char *\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[]) .PP -Like \f[I]cmark_node_get_type\f[], but returns a string -representation of the type, or \f[C]""\f[]. +Like \f[I]cmark_node_get_type\f[], but returns a string representation +of the type, or \f[C]""\f[]. .PP \fIconst char *\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[]) .PP -Returns the string contents of \f[I]node\f[], or an empty string -if none is set. +Returns the string contents of \f[I]node\f[], or an empty string if none +is set. .PP \fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[]) .PP -Sets the string contents of \f[I]node\f[]. Returns 1 on success, -0 on failure. +Sets the string contents of \f[I]node\f[]. Returns 1 on success, 0 on +failure. .PP \fIint\f[] \fBcmark_node_get_heading_level\f[](\fIcmark_node *node\f[]) .PP -Returns the heading level of \f[I]node\f[], or 0 if \f[I]node\f[] -is not a heading. +Returns the heading level of \f[I]node\f[], or 0 if \f[I]node\f[] is not +a heading. .PP \fIint\f[] \fBcmark_node_set_heading_level\f[](\fIcmark_node *node\f[], \fIint level\f[]) .PP -Sets the heading level of \f[I]node\f[], returning 1 on success -and 0 on error. +Sets the heading level of \f[I]node\f[], returning 1 on success and 0 on +error. .PP \fIcmark_list_type\f[] \fBcmark_node_get_list_type\f[](\fIcmark_node *node\f[]) .PP -Returns the list type of \f[I]node\f[], or \f[C]CMARK_NO_LIST\f[] -if \f[I]node\f[] is not a list. +Returns the list type of \f[I]node\f[], or \f[C]CMARK_NO_LIST\f[] if +\f[I]node\f[] is not a list. .PP \fIint\f[] \fBcmark_node_set_list_type\f[](\fIcmark_node *node\f[], \fIcmark_list_type type\f[]) .PP -Sets the list type of \f[I]node\f[], returning 1 on success and 0 -on error. +Sets the list type of \f[I]node\f[], returning 1 on success and 0 on +error. .PP \fIcmark_delim_type\f[] \fBcmark_node_get_list_delim\f[](\fIcmark_node *node\f[]) @@ -352,22 +349,22 @@ Returns the list delimiter type of \f[I]node\f[], or \fIint\f[] \fBcmark_node_set_list_delim\f[](\fIcmark_node *node\f[], \fIcmark_delim_type delim\f[]) .PP -Sets the list delimiter type of \f[I]node\f[], returning 1 on -success and 0 on error. +Sets the list delimiter type of \f[I]node\f[], returning 1 on success +and 0 on error. .PP \fIint\f[] \fBcmark_node_get_list_start\f[](\fIcmark_node *node\f[]) .PP -Returns starting number of \f[I]node\f[], if it is an ordered -list, otherwise 0. +Returns starting number of \f[I]node\f[], if it is an ordered list, +otherwise 0. .PP \fIint\f[] \fBcmark_node_set_list_start\f[](\fIcmark_node *node\f[], \fIint start\f[]) .PP -Sets starting number of \f[I]node\f[], if it is an ordered list. -Returns 1 on success, 0 on failure. +Sets starting number of \f[I]node\f[], if it is an ordered list. Returns +1 on success, 0 on failure. .PP \fIint\f[] \fBcmark_node_get_list_tight\f[](\fIcmark_node *node\f[]) @@ -379,8 +376,8 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 -on failure. +Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on +failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -392,66 +389,66 @@ Returns the info string from a fenced code block. \fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[]) .PP -Sets the info string in a fenced code block, returning 1 on -success and 0 on failure. +Sets the info string in a fenced code block, returning 1 on success and +0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[]) .PP -Returns the URL of a link or image \f[I]node\f[], or an empty -string if no URL is set. +Returns the URL of a link or image \f[I]node\f[], or an empty string if +no URL is set. .PP \fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[]) .PP -Sets the URL of a link or image \f[I]node\f[]. Returns 1 on -success, 0 on failure. +Sets the URL of a link or image \f[I]node\f[]. Returns 1 on success, 0 +on failure. .PP \fIconst char *\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[]) .PP -Returns the title of a link or image \f[I]node\f[], or an empty -string if no title is set. +Returns the title of a link or image \f[I]node\f[], or an empty string +if no title is set. .PP \fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[]) .PP -Sets the title of a link or image \f[I]node\f[]. Returns 1 on -success, 0 on failure. +Sets the title of a link or image \f[I]node\f[]. Returns 1 on success, 0 +on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on enter\[rq] text for a custom -\f[I]node\f[], or an empty string if no on_enter is set. +Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP Sets the literal text to render \[lq]on enter\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered after -this text. Returns 1 on success 0 on failure. +\f[I]node\f[]. Any children of the node will be rendered after this +text. Returns 1 on success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on exit\[rq] text for a custom -\f[I]node\f[], or an empty string if no on_exit is set. +Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP Sets the literal text to render \[lq]on exit\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered before -this text. Returns 1 on success 0 on failure. +\f[I]node\f[]. Any children of the node will be rendered before this +text. Returns 1 on success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -484,44 +481,44 @@ Tree Manipulation \fIvoid\f[] \fBcmark_node_unlink\f[](\fIcmark_node *node\f[]) .PP -Unlinks a \f[I]node\f[], removing it from the tree, but not -freeing its memory. (Use \f[I]cmark_node_free\f[] for that.) +Unlinks a \f[I]node\f[], removing it from the tree, but not freeing its +memory. (Use \f[I]cmark_node_free\f[] for that.) .PP \fIint\f[] \fBcmark_node_insert_before\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[]) .PP -Inserts \f[I]sibling\f[] before \f[I]node\f[]. Returns 1 on -success, 0 on failure. +Inserts \f[I]sibling\f[] before \f[I]node\f[]. Returns 1 on success, 0 +on failure. .PP \fIint\f[] \fBcmark_node_insert_after\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[]) .PP -Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on -success, 0 on failure. +Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on success, 0 on +failure. .PP \fIint\f[] \fBcmark_node_replace\f[](\fIcmark_node *oldnode\f[], \fIcmark_node *newnode\f[]) .PP -Replaces \f[I]oldnode\f[] with \f[I]newnode\f[] and frees the -memory used by \f[I]oldnode\f[]. Returns 1 on success, 0 on -failure. +Replaces \f[I]oldnode\f[] with \f[I]newnode\f[] and unlinks +\f[I]oldnode\f[] (but does not free its memory). Returns 1 on success, 0 +on failure. .PP \fIint\f[] \fBcmark_node_prepend_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[]) .PP -Adds \f[I]child\f[] to the beginning of the children of -\f[I]node\f[]. Returns 1 on success, 0 on failure. +Adds \f[I]child\f[] to the beginning of the children of \f[I]node\f[]. +Returns 1 on success, 0 on failure. .PP \fIint\f[] \fBcmark_node_append_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[]) .PP -Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. -Returns 1 on success, 0 on failure. +Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. Returns +1 on success, 0 on failure. .PP \fIvoid\f[] \fBcmark_consolidate_text_nodes\f[](\fIcmark_node *root\f[]) @@ -586,15 +583,15 @@ Finish parsing and return a pointer to a tree of nodes. \fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[]) .PP -Parse a CommonMark document in \f[I]buffer\f[] of length -\f[I]len\f[]. Returns a pointer to a tree of nodes. +Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]. +Returns a pointer to a tree of nodes. .PP \fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[]) .PP -Parse a CommonMark document in file \f[I]f\f[], returning a -pointer to a tree of nodes. +Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a +tree of nodes. .SS Rendering @@ -609,15 +606,14 @@ Render a \f[I]node\f[] tree as XML. \fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP -Render a \f[I]node\f[] tree as an HTML fragment. It is up to the -user to add an appropriate header and footer. +Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to +add an appropriate header and footer. .PP \fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a groff man page, without the -header. +Render a \f[I]node\f[] tree as a groff man page, without the header. .PP \fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) @@ -659,8 +655,7 @@ Options affecting rendering .fi .PP -Include a \f[C]data\-sourcepos\f[] attribute on all block -elements. +Include a \f[C]data\-sourcepos\f[] attribute on all block elements. .PP .nf @@ -685,11 +680,10 @@ Render \f[C]softbreak\f[] elements as hard line breaks. .PP Suppress raw HTML and unsafe links (\f[C]javascript:\f[], -\f[C]vbscript:\f[], \f[C]file:\f[], and \f[C]data:\f[], except -for \f[C]image/png\f[], \f[C]image/gif\f[], \f[C]image/jpeg\f[], -or \f[C]image/webp\f[] mime types). Raw HTML is replaced by a -placeholder HTML comment. Unsafe links are replaced by empty -strings. +\f[C]vbscript:\f[], \f[C]file:\f[], and \f[C]data:\f[], except for +\f[C]image/png\f[], \f[C]image/gif\f[], \f[C]image/jpeg\f[], or +\f[C]image/webp\f[] mime types). Raw HTML is replaced by a placeholder +HTML comment. Unsafe links are replaced by empty strings. .SS Options affecting parsing @@ -716,8 +710,8 @@ Normalize tree by consolidating adjacent text nodes. .fi .PP -Validate UTF\-8 in the input before parsing, replacing illegal -sequences with the replacement character U+FFFD. +Validate UTF\-8 in the input before parsing, replacing illegal sequences +with the replacement character U+FFFD. .PP .nf @@ -739,8 +733,8 @@ Version information \fIint\f[] \fBcmark_version\f[](\fI\f[]) .PP -The library version as integer for runtime checks. Also available -as macro CMARK_VERSION for compile time checks. +The library version as integer for runtime checks. Also available as +macro CMARK_VERSION for compile time checks. .IP \[bu] 2 Bits 16\-23 contain the major version. .IP \[bu] 2 @@ -748,15 +742,14 @@ Bits 8\-15 contain the minor version. .IP \[bu] 2 Bits 0\-7 contain the patchlevel. .PP -In hexadecimal format, the number 0x010203 represents version -1.2.3. +In hexadecimal format, the number 0x010203 represents version 1.2.3. .PP \fIconst char *\f[] \fBcmark_version_string\f[](\fI\f[]) .PP -The library version string for runtime checks. Also available as -macro CMARK_VERSION_STRING for compile time checks. +The library version string for runtime checks. Also available as macro +CMARK_VERSION_STRING for compile time checks. .SH AUTHORS diff --git a/src/cmark.h b/src/cmark.h index dcd7e2c243..4fa92ca056 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -387,7 +387,8 @@ CMARK_EXPORT int cmark_node_insert_before(cmark_node *node, */ CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); -/** Replaces 'oldnode' with 'newnode' and frees the memory used by 'oldnode'. +/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does + * not free its memory). * Returns 1 on success, 0 on failure. */ CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode); diff --git a/src/node.c b/src/node.c index ee1d6c3744..26a8e2528d 100644 --- a/src/node.c +++ b/src/node.c @@ -734,7 +734,7 @@ int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) { if (!cmark_node_insert_before(oldnode, newnode)) { return 0; } - cmark_node_free(oldnode); // free calls cmark_node_unlink + cmark_node_unlink(oldnode); return 1; } -- cgit 0.0.5-2-1-g0f52 From 774b2e6f9d3a5f65037728b4aacf9efee3f54e9d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 12 Jan 2016 21:59:38 -0800 Subject: Updated spec.txt --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index d0575f4f41..449e5b0658 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.23 -date: '2015-12-29' +version: 0.24 +date: '2015-01-12' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 44b724074e41a7c0c82f459604a537561eecf6cc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 12 Jan 2016 21:59:45 -0800 Subject: Updated changelog.txt --- changelog.txt | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/changelog.txt b/changelog.txt index 3482cf4241..706567c245 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,35 @@ +[0.24.0] + + * [API change] Added `cmark_node_replace(oldnode, newnode)`. + * Updated spec.txt to 0.24. + * Fixed edge case with escaped parens in link destination (#97). + This was also checked against the #82 case with asan. + * Removed unnecessary check for `fenced` in `cmark_render_html`. + It's sufficient to check that the info string is empty. + Indeed, those who use the API may well create a code block + with an info string without explicitly setting `fenced`. + * Updated format of `test/smart_punct.txt`. + * Updated `test/spec.txt`, `test/smart_punct.txt`, and + `spec_tests.py` to new format. + * Fixed `get_containing_block` logic in `src/commonmark.c`. + This did not allow for the possibility that a node might have no + containing block, causing the commonmark renderer to segfault if + passed an inline node with no block parent. + * Fixed string representations of `CUSTOM_BLOCK`, + `CUSTOM_INLINE`. The old versions `raw_inline` and + `raw_block` were being used, and this led to incorrect xml output. + * Use default opts in python sample wrapper. + * Allow multiline setext header content, as per spec. + * Don't allow spaces in link destinations, even with pointy brackets. + Conforms to latest change in spec. + * Updated `scheme` scanner according to spec change. We no longer use + a whitelist of valid schemes. + * Allow any kind of nodes as children of `CUSTOM_BLOCK` (#96). + * `cmark.h`: moved typedefs for iterator into iterator section. + This just moves some code around so it makes more sense + to read, and in the man page. + * Fixed `make_man_page.py` so it includes typedefs again. + [0.23.0] * [API change] Added `CUSTOM_BLOCK` and `CUSTOM_INLINE` node types. -- cgit 0.0.5-2-1-g0f52 From a8ed144adf688c2194367d072bc9638af68fc4f7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 12 Jan 2016 22:01:45 -0800 Subject: Bump version to 0.24.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13336b12ab..6401efa924 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 23) +set(PROJECT_VERSION_MINOR 24) set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From 54bc9903cff53399c4bc67be0d1b842201863f83 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 16 Jan 2016 23:12:17 -0800 Subject: Use 2 space + cr for line break in commonmark output. This is more portable. Closes #90. --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index 1a613348ad..f19db3ffad 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -320,7 +320,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_LINEBREAK: if (!(CMARK_OPT_HARDBREAKS & options)) { - LIT("\\"); + LIT(" "); } CR(); break; -- cgit 0.0.5-2-1-g0f52 From 8c75cce5e755799c743699286403440d10b42bbd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 13:22:04 -0800 Subject: commonmark renderer: use 4-space indent for bullet lists. This makes the output compatible with more implementations. --- src/commonmark.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index f19db3ffad..55ca0372b4 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -201,7 +201,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_ITEM: if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { - marker_width = 2; + marker_width = 4; } else { list_number = cmark_node_get_list_start(node->parent); list_delim = cmark_node_get_list_delim(node->parent); @@ -220,15 +220,14 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, } if (entering) { if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { - LIT("* "); + LIT(" - "); renderer->begin_content = true; - cmark_strbuf_puts(renderer->prefix, " "); } else { LIT(listmarker); renderer->begin_content = true; - for (i = marker_width; i--;) { - cmark_strbuf_putc(renderer->prefix, ' '); - } + } + for (i = marker_width; i--;) { + cmark_strbuf_putc(renderer->prefix, ' '); } } else { cmark_strbuf_truncate(renderer->prefix, -- cgit 0.0.5-2-1-g0f52 From 9409e2ee7ec7b1a4500a1e09e7ffb24b0eb29195 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 13:25:08 -0800 Subject: Adjusted api test for last commonmark renderer change. --- api_test/main.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 9d3bf840ed..1e93a75cb4 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -659,26 +659,26 @@ static void render_commonmark(test_batch_runner *runner) { cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); - commonmark = cmark_render_commonmark(doc, CMARK_OPT_DEFAULT, 24); + commonmark = cmark_render_commonmark(doc, CMARK_OPT_DEFAULT, 26); STR_EQ(runner, commonmark, "> \\- foo *bar* \\*bar\\*\n" "\n" - "* Lorem ipsum dolor sit\n" - " amet, consectetur\n" - " adipiscing elit,\n" - "* sed do eiusmod tempor\n" - " incididunt ut labore\n" - " et dolore magna\n" - " aliqua.\n", + " - Lorem ipsum dolor sit\n" + " amet, consectetur\n" + " adipiscing elit,\n" + " - sed do eiusmod tempor\n" + " incididunt ut labore\n" + " et dolore magna\n" + " aliqua.\n", "render document with wrapping"); free(commonmark); commonmark = cmark_render_commonmark(doc, CMARK_OPT_DEFAULT, 0); STR_EQ(runner, commonmark, "> \\- foo *bar* \\*bar\\*\n" "\n" - "* Lorem ipsum dolor sit amet,\n" - " consectetur adipiscing elit,\n" - "* sed do eiusmod tempor incididunt\n" - " ut labore et dolore magna aliqua.\n", + " - Lorem ipsum dolor sit amet,\n" + " consectetur adipiscing elit,\n" + " - sed do eiusmod tempor incididunt\n" + " ut labore et dolore magna aliqua.\n", "render document without wrapping"); free(commonmark); -- cgit 0.0.5-2-1-g0f52 From 31423d6f7d2e1af5c22fdcc74b6e951f15a1130c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 13:25:21 -0800 Subject: Commonmark renderer: use HTML comment to separate list from following list or code block. This has several advantages. First, the two blank lines breaks out of list syntax is still controversial in CommonMark. And it isn't used in other implementations. HTML comments will always work. Second, two blank lines breaks out of all lists; an HTML comment can be used to break out of just one level of nesting. --- src/commonmark.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 55ca0372b4..3eac076cb0 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -193,9 +193,11 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_LIST: if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK || node->next->type == CMARK_NODE_LIST)) { - // this ensures 2 blank lines after list, - // if before code block or list: - LIT("\n"); + // this ensures that a following code block or list will be + // inteprereted correctly. + CR(); + LIT(""); + BLANKLINE(); } break; -- cgit 0.0.5-2-1-g0f52 From 1f8ea828409287b7901bf32d01f8ec662ffdc9ba Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 13:54:19 -0800 Subject: render: initialize begin_content to true. --- src/render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render.c b/src/render.c index d477363749..898a9e2fad 100755 --- a/src/render.c +++ b/src/render.c @@ -142,7 +142,7 @@ char *cmark_render(cmark_node *root, int options, int width, cmark_iter *iter = cmark_iter_new(root); cmark_renderer renderer = {&buf, &pref, 0, width, 0, 0, true, - false, false, false, + true, false, false, outc, S_cr, S_blankline, S_out}; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { -- cgit 0.0.5-2-1-g0f52 From 01cb5c9563cc257e14a0093843d87621563d961f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 14:28:53 -0800 Subject: Improved escaping in commonmark renderer. We try not to escape punctuation unless we absolutely have to. So, `)` and `.` are no longer escaped whenever they occur after digits; now they are only escaped if they are geuninely in a position where they'd cause a list item. This required a couple changes to render.c. - `renderer->begin_content` is only set to false AFTER a string of digits at the beginning of the line. (This is slightly unprincipled.) - We never break before a numeral (also slightly unprincipled). --- src/commonmark.c | 11 ++++++++--- src/render.c | 18 +++++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 3eac076cb0..4fb9cec915 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -24,6 +24,8 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, unsigned char nextc) { bool needs_escaping = false; char encoded[20]; + bool follows_digit = renderer->buffer->size > 0 && + cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]); needs_escaping = escape != LITERAL && @@ -31,9 +33,12 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape, (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || (c == '&' && isalpha(nextc)) || (c == '!' && nextc == '[') || - (renderer->begin_content && (c == '-' || c == '+' || c == '=')) || - ((c == '.' || c == ')') && - isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) || + (renderer->begin_content && (c == '-' || c == '+' || c == '=') && + // begin_content doesn't get set to false til we've passed digits + // at the beginning of line, so... + !follows_digit) || + (renderer->begin_content && (c == '.' || c == ')') && follows_digit && + (nextc == 0 || cmark_isspace(nextc))))) || (escape == URL && (c == '`' || c == '<' || c == '>' || isspace(c) || c == '\\' || c == ')' || c == '(')) || (escape == TITLE && diff --git a/src/render.c b/src/render.c index 898a9e2fad..2c941bfc50 100755 --- a/src/render.c +++ b/src/render.c @@ -23,6 +23,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, unsigned char nextc; int32_t c; int i = 0; + int last_nonspace; int len; cmark_chunk remainder = cmark_chunk_literal(""); int k = renderer->buffer->size - 1; @@ -63,15 +64,20 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, nextc = source[i + len]; if (c == 32 && wrap) { if (!renderer->begin_line) { + last_nonspace = renderer->buffer->size; cmark_strbuf_putc(renderer->buffer, ' '); renderer->column += 1; renderer->begin_line = false; renderer->begin_content = false; - renderer->last_breakable = renderer->buffer->size - 1; // skip following spaces while (source[i + 1] == ' ') { i++; } + // We don't allow breaks that make a digit the first character + // because this causes problems with commonmark output. + if (!cmark_isdigit(source[i + 1])) { + renderer->last_breakable = last_nonspace; + } } } else if (c == 10) { @@ -83,11 +89,17 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, } else if (escape == LITERAL) { cmark_render_code_point(renderer, c); renderer->begin_line = false; - renderer->begin_content = false; + // we don't set 'begin_content' to false til we've + // finished parsing a digit. Reason: in commonmark + // we need to escape a potential list marker after + // a digit: + renderer->begin_content = renderer->begin_content && + cmark_isdigit(c) == 1; } else { (renderer->outc)(renderer, escape, c, nextc); renderer->begin_line = false; - renderer->begin_content = false; + renderer->begin_content = renderer->begin_content && + cmark_isdigit(c) == 1; } // If adding the character went beyond width, look for an -- cgit 0.0.5-2-1-g0f52 From c50061bd0359ee1822b08a7c18ee4adf55d6fb1d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 21:41:11 -0800 Subject: iterator: handle NULL root. --- src/iterator.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/iterator.c b/src/iterator.c index c477f01f1c..351b81f90d 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -89,6 +89,9 @@ cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) { cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; } void cmark_consolidate_text_nodes(cmark_node *root) { + if (root == NULL) { + return; + } cmark_iter *iter = cmark_iter_new(root); cmark_strbuf buf = GH_BUF_INIT; cmark_event_type ev_type; -- cgit 0.0.5-2-1-g0f52 From 047e65d0b05f601bd0a6fafb4f4eab98659c1529 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 21:43:38 -0800 Subject: commonmark: is_autolink - handle case where link has no children. --- src/commonmark.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/commonmark.c b/src/commonmark.c index 4fb9cec915..751a5df809 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -126,6 +126,9 @@ static bool is_autolink(cmark_node *node) { } link_text = node->first_child; + if (link_text == NULL) { + return false; + } cmark_consolidate_text_nodes(link_text); realurl = (char *)url->data; realurllen = url->len; -- cgit 0.0.5-2-1-g0f52 From ae806c61768ee2cad6501378a8e6d9199a00b5b4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Jan 2016 21:53:29 -0800 Subject: Bump to 0.24.1, updated changelog. --- CMakeLists.txt | 2 +- changelog.txt | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6401efa924..87c0d9a861 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 24) -set(PROJECT_VERSION_PATCH 0) +set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) diff --git a/changelog.txt b/changelog.txt index 706567c245..1deee772e7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,25 @@ +[0.24.1] + + * Commonmark renderer: + + Use HTML comment, not two blank lines, to separate a list + item from a following code block or list. This makes the + output more portable, since the "two blank lines" rule is + unique to CommonMark. Also, it allows us to break out of + a sublist without breaking out of all levels of nesting. + + `is_autolink` - handle case where link has no children, + which previously caused a segfault. + + Use 4-space indent for bullet lists, for increased portability. + + Use 2-space + newline for line break for increased portability (#90). + + Improved punctuation escaping. Previously all `)` and + `.` characters after digits were escaped; now they are + only escaped if they are genuinely in a position where + they'd cause a list item. This is achieved by changes in + `render.c`: (a) `renderer->begin_content` is only set to + false after a string of digits at the beginning of the + line, and (b) we never break a line before a digit. + Also, `begin_content` is properly initialized to true. + * Handle NULL root in `consolidate_text_nodes`. + [0.24.0] * [API change] Added `cmark_node_replace(oldnode, newnode)`. -- cgit 0.0.5-2-1-g0f52 From ac812214f6fa81b201b8fcf3779ed8d2c3cfacf7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 18 Jan 2016 09:23:05 -0800 Subject: config.h.in - added compatibility snprintf, vsnprintf for MSVC. --- src/config.h.in | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/config.h.in b/src/config.h.in index 27923134e4..197e97e7b1 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -23,3 +23,38 @@ #define CMARK_INLINE inline #endif #endif + +/* snprintf and vsnprintf fallbacks for MSVC before 2015, + due to Valentin Milea http://stackoverflow.com/questions/2915672/ +*/ + +#if defined(_MSC_VER) && _MSC_VER < 1900 + +#define snprintf c99_snprintf +#define vsnprintf c99_vsnprintf + +CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) +{ + int count = -1; + + if (size != 0) + count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); + if (count == -1) + count = _vscprintf(format, ap); + + return count; +} + +CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...) +{ + int count; + va_list ap; + + va_start(ap, format); + count = c99_vsnprintf(outBuf, size, format, ap); + va_end(ap); + + return count; +} + +#endif -- cgit 0.0.5-2-1-g0f52 From e1d1593f514a4975e015ed3fdd69f9c1c5c3142d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 18 Jan 2016 09:33:43 -0800 Subject: Automatic code reformat. --- api_test/main.c | 164 ++++++++++++++++++++++++++----------------------------- src/chunk.h | 8 +-- src/commonmark.c | 15 ++--- src/render.c | 22 ++++---- 4 files changed, 101 insertions(+), 108 deletions(-) mode change 100755 => 100644 src/render.c diff --git a/api_test/main.c b/api_test/main.c index 1e93a75cb4..cd9ffb5a01 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -525,33 +525,31 @@ static void render_xml(test_batch_runner *runner) { cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT); - STR_EQ(runner, xml, - "\n" - "\n" - "\n" - " \n" - " foo \n" - " \n" - " bar\n" - " \n" - " \n" - " \n" - " paragraph 2\n" - " \n" - "\n", + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " \n" + " foo \n" + " \n" + " bar\n" + " \n" + " \n" + " \n" + " paragraph 2\n" + " \n" + "\n", "render document"); free(xml); cmark_node *paragraph = cmark_node_first_child(doc); xml = cmark_render_xml(paragraph, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); - STR_EQ(runner, xml, - "\n" - "\n" - "\n" - " foo \n" - " \n" - " bar\n" - " \n" - "\n", + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " foo \n" + " \n" + " bar\n" + " \n" + "\n", "render first paragraph with source pos"); free(xml); cmark_node_free(doc); @@ -567,34 +565,32 @@ static void render_man(test_batch_runner *runner) { "- sed do eiusmod tempor incididunt\n" " ut labore et dolore magna aliqua.\n"; cmark_node *doc = - cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); man = cmark_render_man(doc, CMARK_OPT_DEFAULT, 20); - STR_EQ(runner, man, - ".PP\n" - "foo \\f[I]bar\\f[]\n" - ".IP \\[bu] 2\n" - "Lorem ipsum dolor\n" - "sit amet,\n" - "consectetur\n" - "adipiscing elit,\n" - ".IP \\[bu] 2\n" - "sed do eiusmod\n" - "tempor incididunt ut\n" - "labore et dolore\n" - "magna aliqua.\n", + STR_EQ(runner, man, ".PP\n" + "foo \\f[I]bar\\f[]\n" + ".IP \\[bu] 2\n" + "Lorem ipsum dolor\n" + "sit amet,\n" + "consectetur\n" + "adipiscing elit,\n" + ".IP \\[bu] 2\n" + "sed do eiusmod\n" + "tempor incididunt ut\n" + "labore et dolore\n" + "magna aliqua.\n", "render document with wrapping"); free(man); man = cmark_render_man(doc, CMARK_OPT_DEFAULT, 0); - STR_EQ(runner, man, - ".PP\n" - "foo \\f[I]bar\\f[]\n" - ".IP \\[bu] 2\n" - "Lorem ipsum dolor sit amet,\n" - "consectetur adipiscing elit,\n" - ".IP \\[bu] 2\n" - "sed do eiusmod tempor incididunt\n" - "ut labore et dolore magna aliqua.\n", + STR_EQ(runner, man, ".PP\n" + "foo \\f[I]bar\\f[]\n" + ".IP \\[bu] 2\n" + "Lorem ipsum dolor sit amet,\n" + "consectetur adipiscing elit,\n" + ".IP \\[bu] 2\n" + "sed do eiusmod tempor incididunt\n" + "ut labore et dolore magna aliqua.\n", "render document without wrapping"); free(man); cmark_node_free(doc); @@ -610,38 +606,36 @@ static void render_latex(test_batch_runner *runner) { "- sed do eiusmod tempor incididunt\n" " ut labore et dolore magna aliqua.\n"; cmark_node *doc = - cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); latex = cmark_render_latex(doc, CMARK_OPT_DEFAULT, 20); - STR_EQ(runner, latex, - "foo \\emph{bar} \\$\\%\n" - "\n" - "\\begin{itemize}\n" - "\\item Lorem ipsum\n" - "dolor sit amet,\n" - "consectetur\n" - "adipiscing elit,\n" - "\n" - "\\item sed do eiusmod\n" - "tempor incididunt ut\n" - "labore et dolore\n" - "magna aliqua.\n" - "\n" - "\\end{itemize}\n", + STR_EQ(runner, latex, "foo \\emph{bar} \\$\\%\n" + "\n" + "\\begin{itemize}\n" + "\\item Lorem ipsum\n" + "dolor sit amet,\n" + "consectetur\n" + "adipiscing elit,\n" + "\n" + "\\item sed do eiusmod\n" + "tempor incididunt ut\n" + "labore et dolore\n" + "magna aliqua.\n" + "\n" + "\\end{itemize}\n", "render document with wrapping"); free(latex); latex = cmark_render_latex(doc, CMARK_OPT_DEFAULT, 0); - STR_EQ(runner, latex, - "foo \\emph{bar} \\$\\%\n" - "\n" - "\\begin{itemize}\n" - "\\item Lorem ipsum dolor sit amet,\n" - "consectetur adipiscing elit,\n" - "\n" - "\\item sed do eiusmod tempor incididunt\n" - "ut labore et dolore magna aliqua.\n" - "\n" - "\\end{itemize}\n", + STR_EQ(runner, latex, "foo \\emph{bar} \\$\\%\n" + "\n" + "\\begin{itemize}\n" + "\\item Lorem ipsum dolor sit amet,\n" + "consectetur adipiscing elit,\n" + "\n" + "\\item sed do eiusmod tempor incididunt\n" + "ut labore et dolore magna aliqua.\n" + "\n" + "\\end{itemize}\n", "render document without wrapping"); free(latex); cmark_node_free(doc); @@ -657,19 +651,18 @@ static void render_commonmark(test_batch_runner *runner) { "- sed do eiusmod tempor incididunt\n" " ut labore et dolore magna aliqua.\n"; cmark_node *doc = - cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); commonmark = cmark_render_commonmark(doc, CMARK_OPT_DEFAULT, 26); - STR_EQ(runner, commonmark, - "> \\- foo *bar* \\*bar\\*\n" - "\n" - " - Lorem ipsum dolor sit\n" - " amet, consectetur\n" - " adipiscing elit,\n" - " - sed do eiusmod tempor\n" - " incididunt ut labore\n" - " et dolore magna\n" - " aliqua.\n", + STR_EQ(runner, commonmark, "> \\- foo *bar* \\*bar\\*\n" + "\n" + " - Lorem ipsum dolor sit\n" + " amet, consectetur\n" + " adipiscing elit,\n" + " - sed do eiusmod tempor\n" + " incididunt ut labore\n" + " et dolore magna\n" + " aliqua.\n", "render document with wrapping"); free(commonmark); commonmark = cmark_render_commonmark(doc, CMARK_OPT_DEFAULT, 0); @@ -685,8 +678,7 @@ static void render_commonmark(test_batch_runner *runner) { cmark_node *text = cmark_node_new(CMARK_NODE_TEXT); cmark_node_set_literal(text, "Hi"); commonmark = cmark_render_commonmark(text, CMARK_OPT_DEFAULT, 0); - STR_EQ(runner, commonmark, "Hi\n", - "render single inline node"); + STR_EQ(runner, commonmark, "Hi\n", "render single inline node"); free(commonmark); cmark_node_free(text); diff --git a/src/chunk.h b/src/chunk.h index 700749285a..b25831b881 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -48,8 +48,8 @@ static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { cmark_chunk_rtrim(c); } -static CMARK_INLINE bufsize_t - cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) { +static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, + bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); return p ? (bufsize_t)(p - ch->data) : ch->len; @@ -96,8 +96,8 @@ static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { return c; } -static CMARK_INLINE cmark_chunk - cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) { +static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, + bufsize_t pos, bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; } diff --git a/src/commonmark.c b/src/commonmark.c index cb30601f10..60b745ceac 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -23,8 +23,9 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, unsigned char nextc) { bool needs_escaping = false; - bool follows_digit = renderer->buffer->size > 0 && - cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]); + bool follows_digit = + renderer->buffer->size > 0 && + cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]); const size_t ENCODED_SIZE = 20; char encoded[ENCODED_SIZE]; @@ -35,11 +36,11 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape, c == '>' || c == '\\' || c == '`' || c == '!' || (c == '&' && isalpha(nextc)) || (c == '!' && nextc == '[') || (renderer->begin_content && (c == '-' || c == '+' || c == '=') && - // begin_content doesn't get set to false til we've passed digits - // at the beginning of line, so... - !follows_digit) || + // begin_content doesn't get set to false til we've passed digits + // at the beginning of line, so... + !follows_digit) || (renderer->begin_content && (c == '.' || c == ')') && follows_digit && - (nextc == 0 || cmark_isspace(nextc))))) || + (nextc == 0 || cmark_isspace(nextc))))) || (escape == URL && (c == '`' || c == '<' || c == '>' || isspace(c) || c == '\\' || c == ')' || c == '(')) || (escape == TITLE && @@ -178,7 +179,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) { tmp = get_containing_block(node); renderer->in_tight_list_item = - tmp && // tmp might be NULL if there is no containing block + tmp && // tmp might be NULL if there is no containing block ((tmp->type == CMARK_NODE_ITEM && cmark_node_get_list_tight(tmp->parent)) || (tmp && tmp->parent && tmp->parent->type == CMARK_NODE_ITEM && diff --git a/src/render.c b/src/render.c old mode 100755 new mode 100644 index 2c941bfc50..fea9b3a58b --- a/src/render.c +++ b/src/render.c @@ -64,7 +64,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, nextc = source[i + len]; if (c == 32 && wrap) { if (!renderer->begin_line) { - last_nonspace = renderer->buffer->size; + last_nonspace = renderer->buffer->size; cmark_strbuf_putc(renderer->buffer, ' '); renderer->column += 1; renderer->begin_line = false; @@ -73,11 +73,11 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, while (source[i + 1] == ' ') { i++; } - // We don't allow breaks that make a digit the first character - // because this causes problems with commonmark output. - if (!cmark_isdigit(source[i + 1])) { + // We don't allow breaks that make a digit the first character + // because this causes problems with commonmark output. + if (!cmark_isdigit(source[i + 1])) { renderer->last_breakable = last_nonspace; - } + } } } else if (c == 10) { @@ -93,13 +93,13 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, // finished parsing a digit. Reason: in commonmark // we need to escape a potential list marker after // a digit: - renderer->begin_content = renderer->begin_content && - cmark_isdigit(c) == 1; + renderer->begin_content = + renderer->begin_content && cmark_isdigit(c) == 1; } else { (renderer->outc)(renderer, escape, c, nextc); renderer->begin_line = false; - renderer->begin_content = renderer->begin_content && - cmark_isdigit(c) == 1; + renderer->begin_content = + renderer->begin_content && cmark_isdigit(c) == 1; } // If adding the character went beyond width, look for an @@ -153,8 +153,8 @@ char *cmark_render(cmark_node *root, int options, int width, char *result; cmark_iter *iter = cmark_iter_new(root); - cmark_renderer renderer = {&buf, &pref, 0, width, 0, 0, true, - true, false, false, + cmark_renderer renderer = {&buf, &pref, 0, width, 0, + 0, true, true, false, false, outc, S_cr, S_blankline, S_out}; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { -- cgit 0.0.5-2-1-g0f52 From 1322f2d836caf1bb2d25b4bd94b9b87c6b27a628 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 18 Jan 2016 11:57:16 -0800 Subject: Add include guards to config.h --- src/config.h.in | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/config.h.in b/src/config.h.in index 197e97e7b1..abf44181ee 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -1,3 +1,10 @@ +#ifndef CMARK_CONFIG_H +#define CMARK_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + #cmakedefine HAVE_STDBOOL_H #ifdef HAVE_STDBOOL_H @@ -58,3 +65,9 @@ CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ... } #endif + +#ifdef __cplusplus +} +#endif + +#endif -- cgit 0.0.5-2-1-g0f52 From c4c29cd41ac311436f02b8e1915a185ca79ee11d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 18 Jan 2016 12:07:57 -0800 Subject: config.h: include stdio.h for _vscprintf etc. --- src/config.h.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/config.h.in b/src/config.h.in index abf44181ee..364cdc88da 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -37,6 +37,8 @@ extern "C" { #if defined(_MSC_VER) && _MSC_VER < 1900 +#include + #define snprintf c99_snprintf #define vsnprintf c99_vsnprintf -- cgit 0.0.5-2-1-g0f52 From 3a4e743be3c32ddfc36e5f868709bc077ae54c90 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 18 Jan 2016 12:12:34 -0800 Subject: Include starg.h when needed in config.h. --- src/config.h.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.h.in b/src/config.h.in index 364cdc88da..de1a4dd493 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -38,6 +38,7 @@ extern "C" { #if defined(_MSC_VER) && _MSC_VER < 1900 #include +#include #define snprintf c99_snprintf #define vsnprintf c99_vsnprintf -- cgit 0.0.5-2-1-g0f52 From cdb0a5e8602ce2475555c48c9f285e736ccb22ef Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 22 Jan 2016 17:26:16 -0800 Subject: Removed an unnecessary C99-ism in buffer.c. This helps compiling on systems like luarocks that don't have all the cmake configuration goodness. Thanks to @carlmartus --- src/buffer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index a89c82e36d..a9d36e7913 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -217,7 +217,8 @@ bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) { if (pos >= buf->size) pos = buf->size - 1; - for (bufsize_t i = pos; i >= 0; i--) { + bufsize_t i; + for (i = pos; i >= 0; i--) { if (buf->ptr[i] == (unsigned char)c) return i; } -- cgit 0.0.5-2-1-g0f52 From 555472cf8d1ffe99506fdbd2a87e2e33bb3b197f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 00:06:02 -0800 Subject: Fixed tabs in indentation. Closes #101. This patch fixes `S_advance_offset` so that it doesn't gobble a tab character when advancing less than the width of a tab. --- man/man3/cmark.3 | 14 +++++++------- src/blocks.c | 8 +++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 33f152b3a7..bffe73d4e9 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "January 11, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "February 02, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -363,8 +363,8 @@ otherwise 0. \fIint\f[] \fBcmark_node_set_list_start\f[](\fIcmark_node *node\f[], \fIint start\f[]) .PP -Sets starting number of \f[I]node\f[], if it is an ordered list. Returns -1 on success, 0 on failure. +Sets starting number of \f[I]node\f[], if it is an ordered list. +Returns 1 on success, 0 on failure. .PP \fIint\f[] \fBcmark_node_get_list_tight\f[](\fIcmark_node *node\f[]) @@ -389,8 +389,8 @@ Returns the info string from a fenced code block. \fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[]) .PP -Sets the info string in a fenced code block, returning 1 on success and -0 on failure. +Sets the info string in a fenced code block, returning 1 on success +and 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[]) @@ -517,8 +517,8 @@ Returns 1 on success, 0 on failure. \fIint\f[] \fBcmark_node_append_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[]) .PP -Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. Returns -1 on success, 0 on failure. +Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. +Returns 1 on success, 0 on failure. .PP \fIvoid\f[] \fBcmark_consolidate_text_nodes\f[](\fIcmark_node *root\f[]) diff --git a/src/blocks.c b/src/blocks.c index 9f41e1f377..6d02a84908 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -570,12 +570,14 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, bufsize_t count, bool columns) { char c; int chars_to_tab; + int chars_to_advance; while (count > 0 && (c = peek_at(input, parser->offset))) { if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - parser->column += chars_to_tab; - parser->offset += 1; - count -= (columns ? chars_to_tab : 1); + chars_to_advance = chars_to_tab > count ? count : chars_to_tab; + parser->column += chars_to_advance; + parser->offset += chars_to_advance < chars_to_tab ? 0 : 1; + count -= (columns ? chars_to_advance : 1); } else { parser->offset += 1; parser->column += 1; // assume ascii; block starts are ascii -- cgit 0.0.5-2-1-g0f52 From 6182bc78cc0531a735a0ffc452f2922485af05c1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 21:12:00 -0800 Subject: Update test/spec.txt. --- test/spec.txt | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 449e5b0658..f307ef31f3 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2,7 +2,7 @@ title: CommonMark Spec author: John MacFarlane version: 0.24 -date: '2015-01-12' +date: '2016-01-12' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -320,6 +320,24 @@ bar
                            ```````````````````````````````` +```````````````````````````````` example + - foo + - bar +→ - baz +. +
                              +
                            • foo +
                                +
                              • bar +
                                  +
                                • baz
                                • +
                                +
                              • +
                              +
                            • +
                            +```````````````````````````````` + ## Insecure characters @@ -1204,7 +1222,7 @@ bar

                            or use a thematic break that cannot count as a [setext heading -line], such as +underline], such as ```````````````````````````````` example Foo @@ -8940,7 +8958,7 @@ This is text that can be incorporated into the last open block (a paragraph, code block, heading, or raw HTML). Setext headings are formed when we see a line of a paragraph -that is a setext heading line. +that is a [setext heading underline]. Reference link definitions are detected when a paragraph is closed; the accumulated text lines are parsed to see if they begin with -- cgit 0.0.5-2-1-g0f52 From c351c72220406d3e934049808ecd09e599487a85 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 22:43:22 -0800 Subject: Added partially_consumed_tab to parser. This keeps track of when we have gotten partway through a tab when consuming initial indentation. --- src/blocks.c | 7 +++++-- src/parser.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 6d02a84908..424257c8d5 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -70,6 +70,7 @@ cmark_parser *cmark_parser_new(int options) { parser->first_nonspace_column = 0; parser->indent = 0; parser->blank = false; + parser->partially_consumed_tab = false; parser->curline = line; parser->last_line_length = 0; parser->linebuf = buf; @@ -574,11 +575,13 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, while (count > 0 && (c = peek_at(input, parser->offset))) { if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - chars_to_advance = chars_to_tab > count ? count : chars_to_tab; + parser->partially_consumed_tab = chars_to_tab > count; + chars_to_advance = parser->partially_consumed_tab ? count : chars_to_tab; parser->column += chars_to_advance; - parser->offset += chars_to_advance < chars_to_tab ? 0 : 1; + parser->offset += parser->partially_consumed_tab ? 0 : 1; count -= (columns ? chars_to_advance : 1); } else { + parser->partially_consumed_tab = false; parser->offset += 1; parser->column += 1; // assume ascii; block starts are ascii count -= 1; diff --git a/src/parser.h b/src/parser.h index f359e10adb..b3ff39b130 100644 --- a/src/parser.h +++ b/src/parser.h @@ -22,6 +22,7 @@ struct cmark_parser { bufsize_t first_nonspace_column; int indent; bool blank; + bool partially_consumed_tab; cmark_strbuf *curline; bufsize_t last_line_length; cmark_strbuf *linebuf; -- cgit 0.0.5-2-1-g0f52 From bc0b49fd61d8628d114d94f348ba925d58c41048 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 22:57:48 -0800 Subject: Properly handle partially consumed tab. E.g. in ``` - foo bar ``` we should consume two spaces from the second tab, including two spaces in the code block. --- src/blocks.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 424257c8d5..30e5be6ca2 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -125,8 +125,19 @@ static inline bool accepts_lines(cmark_node_type block_type) { block_type == CMARK_NODE_CODE_BLOCK); } -static void add_line(cmark_node *node, cmark_chunk *ch, bufsize_t offset) { +static void add_line(cmark_node *node, cmark_chunk *ch, bufsize_t offset, + cmark_parser *parser) { + int chars_to_tab; + int i; assert(node->open); + if (parser->partially_consumed_tab) { + offset += 1; // skip over tab + // add space characters: + chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); + for (i = 0; i < chars_to_tab; i++) { + cmark_strbuf_putc(&node->string_content, ' '); + } + } cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset); } @@ -922,7 +933,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->current->type == CMARK_NODE_PARAGRAPH && cmark_strbuf_len(&parser->current->string_content) > 0) { - add_line(parser->current, &input, parser->offset); + add_line(parser->current, &input, parser->offset, parser); } else { // not a lazy continuation @@ -934,11 +945,11 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, if (container->type == CMARK_NODE_CODE_BLOCK) { - add_line(container, &input, parser->offset); + add_line(container, &input, parser->offset, parser); } else if (container->type == CMARK_NODE_HTML_BLOCK) { - add_line(container, &input, parser->offset); + add_line(container, &input, parser->offset, parser); int matches_end_condition; switch (container->as.html_block_type) { @@ -987,13 +998,13 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container->as.heading.setext == false) { chop_trailing_hashtags(&input); } - add_line(container, &input, parser->first_nonspace); + add_line(container, &input, parser->first_nonspace, parser); } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); - add_line(container, &input, parser->first_nonspace); + add_line(container, &input, parser->first_nonspace, parser); } parser->current = container; -- cgit 0.0.5-2-1-g0f52 From d7ffa6074d88564016de59a37b3e26627545f0ea Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 23:06:59 -0800 Subject: Simplified add_line (only need parser parameter). --- src/blocks.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 30e5be6ca2..53d02515b2 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -125,20 +125,21 @@ static inline bool accepts_lines(cmark_node_type block_type) { block_type == CMARK_NODE_CODE_BLOCK); } -static void add_line(cmark_node *node, cmark_chunk *ch, bufsize_t offset, - cmark_parser *parser) { +static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { int chars_to_tab; int i; assert(node->open); if (parser->partially_consumed_tab) { - offset += 1; // skip over tab + parser->offset += 1; // skip over tab // add space characters: chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); for (i = 0; i < chars_to_tab; i++) { cmark_strbuf_putc(&node->string_content, ' '); } } - cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset); + cmark_strbuf_put(&node->string_content, + ch->data + parser->offset, + ch->len - parser->offset); } static void remove_trailing_blank_lines(cmark_strbuf *ln) { @@ -933,7 +934,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->current->type == CMARK_NODE_PARAGRAPH && cmark_strbuf_len(&parser->current->string_content) > 0) { - add_line(parser->current, &input, parser->offset, parser); + add_line(parser->current, &input, parser); } else { // not a lazy continuation @@ -945,11 +946,11 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, if (container->type == CMARK_NODE_CODE_BLOCK) { - add_line(container, &input, parser->offset, parser); + add_line(container, &input, parser); } else if (container->type == CMARK_NODE_HTML_BLOCK) { - add_line(container, &input, parser->offset, parser); + add_line(container, &input, parser); int matches_end_condition; switch (container->as.html_block_type) { @@ -998,13 +999,15 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container->as.heading.setext == false) { chop_trailing_hashtags(&input); } - add_line(container, &input, parser->first_nonspace, parser); + S_advance_offset(parser, &input, parser->first_nonspace - parser->offset, false); + add_line(container, &input, parser); } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); - add_line(container, &input, parser->first_nonspace, parser); + S_advance_offset(parser, &input, parser->first_nonspace - parser->offset, false); + add_line(container, &input, parser); } parser->current = container; -- cgit 0.0.5-2-1-g0f52 From 2456659fdd244b0fdda0c5d510f17555e224d127 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 23:10:39 -0800 Subject: Updated spec test. --- test/spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index f307ef31f3..443e95ca38 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -306,7 +306,7 @@ by spaces with a tab stop of 4 characters. >→foo→bar .
                            -

                            foo→bar

                            +

                            foo→bar

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 6dd99184527638e48dd872a04fa5e445ce13792c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 5 Feb 2016 23:14:29 -0800 Subject: Updated spec. --- test/spec.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 443e95ca38..5f43c9dde2 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -301,6 +301,19 @@ by spaces with a tab stop of 4 characters. ```````````````````````````````` +```````````````````````````````` example +- foo + +→→bar +. +
                              +
                            • +

                              foo

                              +
                                bar
                              +
                              +
                            • +
                            +```````````````````````````````` ```````````````````````````````` example >→foo→bar -- cgit 0.0.5-2-1-g0f52 From f5bcd71573aa11be4ffbf782907af3c51701e8da Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 13:35:22 -0800 Subject: Updated spec. --- test/spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 5f43c9dde2..956db3ef42 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -319,7 +319,7 @@ by spaces with a tab stop of 4 characters. >→foo→bar .
                            -

                            foo→bar

                            +

                            foo→bar

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 131b79f9fe0ef73af74f93d17d3c71abd9c29621 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 13:35:29 -0800 Subject: S_advance_offset: Only set partially_consumed_tab in columns mode. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 53d02515b2..20ea579924 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -587,7 +587,7 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, while (count > 0 && (c = peek_at(input, parser->offset))) { if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - parser->partially_consumed_tab = chars_to_tab > count; + parser->partially_consumed_tab = columns && chars_to_tab > count; chars_to_advance = parser->partially_consumed_tab ? count : chars_to_tab; parser->column += chars_to_advance; parser->offset += parser->partially_consumed_tab ? 0 : 1; -- cgit 0.0.5-2-1-g0f52 From d655b825e3db9aa02adb8d5df9d995a6fd6a9e92 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 13:53:35 -0800 Subject: Require re2c >= 1.14.2. Version <= 1.13.7 don't allow the `-8` option. Closes #102. --- Makefile | 5 ++--- README.md | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4128ea0226..039089e19d 100644 --- a/Makefile +++ b/Makefile @@ -106,9 +106,8 @@ $(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt # normally need to be generated. $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re @case "$$(re2c -v)" in \ - *\ 0.13.7*|*\ 0.14|*\ 0.14.1) \ - echo "re2c versions 0.13.7 through 0.14.1 are known to produce buggy code."; \ - echo "Try a version >= 0.14.2 or <= 0.13.6."; \ + *\ 0.13.*|*\ 0.14|*\ 0.14.1) \ + echo "re2c >= 0.14.2 is required"; \ false; \ ;; \ esac diff --git a/README.md b/README.md index 5592f7830b..b326a7223a 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], which is used to generate `scanners.c` from +need [re2c] (>= 1.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. -- cgit 0.0.5-2-1-g0f52 From 15af2bfb9a250fe1661fbd48b3e61a89ee75f389 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 13:57:14 -0800 Subject: Generated scanners.c with more recent re2c. --- src/scanners.c | 5051 +++++++++++++++++++++++++++----------------------------- 1 file changed, 2431 insertions(+), 2620 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 28821ba76b..712093c8fb 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.14.3 */ +/* Generated by re2c 0.15.3 */ #include #include "chunk.h" #include "scanners.h" @@ -28,7 +28,6 @@ bufsize_t _scan_scheme(const unsigned char *p) { { unsigned char yych; - yych = *(marker = p); if (yych <= 0x7F) { if (yych <= ' ') { @@ -2074,14 +2073,14 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy119; + goto yy120; } else { if (yych <= '/') goto yy107; - if (yych <= '9') - goto yy119; - goto yy107; + if (yych >= ':') + goto yy107; } } else { if (yych <= 'Z') { @@ -2089,48 +2088,26 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy119; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy119; - goto yy107; - } - } - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy247; - if (yych <= '/') - goto yy107; - goto yy248; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy107; - goto yy248; - } else { - if (yych <= '`') + if (yych >= '{') goto yy107; - if (yych <= 'z') - goto yy248; - goto yy107; } } - yy119: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; if (yych <= '-') - goto yy247; + goto yy248; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy248; + goto yy247; goto yy107; } } else { @@ -2139,12 +2116,33 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; + goto yy247; + } else { + if (yych <= '`') + goto yy107; + if (yych <= 'z') + goto yy247; + goto yy107; + } + } + yy119: + yych = *++p; + if (yych <= '9') { + if (yych == '-') goto yy248; + if (yych <= '/') + goto yy107; + goto yy247; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy107; + goto yy247; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy248; + goto yy247; goto yy107; } } @@ -2176,14 +2174,14 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy125; + goto yy120; } else { if (yych <= '/') goto yy107; - if (yych <= '9') - goto yy125; - goto yy107; + if (yych >= ':') + goto yy107; } } else { if (yych <= 'Z') { @@ -2191,50 +2189,27 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy125; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy125; - goto yy107; - } - } - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy126; - if (yych <= '/') - goto yy107; - goto yy127; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy107; - goto yy127; - } else { - if (yych <= '`') + if (yych >= '{') goto yy107; - if (yych <= 'z') - goto yy127; - goto yy107; } } - yy125: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy127; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy127; + goto yy126; goto yy107; } } else { @@ -2243,51 +2218,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy127; + goto yy126; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy127; + goto yy126; goto yy107; } } - yy126: + yy125: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy128; + goto yy127; if (yych <= '/') goto yy107; - goto yy129; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy129; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy129; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy127: + yy126: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy129; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy129; + goto yy128; goto yy107; } } else { @@ -2296,51 +2269,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy129; + goto yy128; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy129; + goto yy128; goto yy107; } } - yy128: + yy127: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy130; + goto yy129; if (yych <= '/') goto yy107; - goto yy131; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy131; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy131; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy129: + yy128: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy131; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy131; + goto yy130; goto yy107; } } else { @@ -2349,51 +2320,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy131; + goto yy130; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy131; + goto yy130; goto yy107; } } - yy130: + yy129: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy132; + goto yy131; if (yych <= '/') goto yy107; - goto yy133; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy133; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy133; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy131: + yy130: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy133; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy133; + goto yy132; goto yy107; } } else { @@ -2402,51 +2371,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy133; + goto yy132; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy133; + goto yy132; goto yy107; } } - yy132: + yy131: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy134; + goto yy133; if (yych <= '/') goto yy107; - goto yy135; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy135; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy135; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy133: + yy132: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy135; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy135; + goto yy134; goto yy107; } } else { @@ -2455,51 +2422,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy135; + goto yy134; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy135; + goto yy134; goto yy107; } } - yy134: + yy133: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy136; + goto yy135; if (yych <= '/') goto yy107; - goto yy137; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy137; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy137; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy135: + yy134: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy137; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy137; + goto yy136; goto yy107; } } else { @@ -2508,51 +2473,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy137; + goto yy136; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy137; + goto yy136; goto yy107; } } - yy136: + yy135: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy138; + goto yy137; if (yych <= '/') goto yy107; - goto yy139; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy139; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy139; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy137: + yy136: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy139; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy139; + goto yy138; goto yy107; } } else { @@ -2561,51 +2524,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy139; + goto yy138; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy139; + goto yy138; goto yy107; } } - yy138: + yy137: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy140; + goto yy139; if (yych <= '/') goto yy107; - goto yy141; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy141; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy141; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy139: + yy138: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy141; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy141; + goto yy140; goto yy107; } } else { @@ -2614,51 +2575,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy141; + goto yy140; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy141; + goto yy140; goto yy107; } } - yy140: + yy139: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy142; + goto yy141; if (yych <= '/') goto yy107; - goto yy143; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy143; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy143; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy141: + yy140: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy143; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy143; + goto yy142; goto yy107; } } else { @@ -2667,51 +2626,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy143; + goto yy142; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy143; + goto yy142; goto yy107; } } - yy142: + yy141: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy144; + goto yy143; if (yych <= '/') goto yy107; - goto yy145; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy145; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy145; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy143: + yy142: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy145; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy145; + goto yy144; goto yy107; } } else { @@ -2720,51 +2677,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy145; + goto yy144; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy145; + goto yy144; goto yy107; } } - yy144: + yy143: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy146; + goto yy145; if (yych <= '/') goto yy107; - goto yy147; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy147; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy147; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy145: + yy144: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy147; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy147; + goto yy146; goto yy107; } } else { @@ -2773,51 +2728,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy147; + goto yy146; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy147; + goto yy146; goto yy107; } } - yy146: + yy145: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy148; + goto yy147; if (yych <= '/') goto yy107; - goto yy149; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy149; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy149; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy147: + yy146: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy149; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy149; + goto yy148; goto yy107; } } else { @@ -2826,51 +2779,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy149; + goto yy148; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy149; + goto yy148; goto yy107; } } - yy148: + yy147: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy150; + goto yy149; if (yych <= '/') goto yy107; - goto yy151; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy151; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy151; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy149: + yy148: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy151; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy151; + goto yy150; goto yy107; } } else { @@ -2879,51 +2830,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy151; + goto yy150; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy151; + goto yy150; goto yy107; } } - yy150: + yy149: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy152; + goto yy151; if (yych <= '/') goto yy107; - goto yy153; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy153; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy153; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy151: + yy150: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy153; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy153; + goto yy152; goto yy107; } } else { @@ -2932,51 +2881,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy153; + goto yy152; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy153; + goto yy152; goto yy107; } } - yy152: + yy151: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy154; + goto yy153; if (yych <= '/') goto yy107; - goto yy155; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy155; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy155; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy153: + yy152: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy155; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy155; + goto yy154; goto yy107; } } else { @@ -2985,51 +2932,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy155; + goto yy154; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy155; + goto yy154; goto yy107; } } - yy154: + yy153: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy156; + goto yy155; if (yych <= '/') goto yy107; - goto yy157; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy157; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy157; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy155: + yy154: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy157; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy157; + goto yy156; goto yy107; } } else { @@ -3038,51 +2983,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy157; + goto yy156; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy157; + goto yy156; goto yy107; } } - yy156: + yy155: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy158; + goto yy157; if (yych <= '/') goto yy107; - goto yy159; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy159; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy159; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy157: + yy156: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy159; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy159; + goto yy158; goto yy107; } } else { @@ -3091,51 +3034,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy159; + goto yy158; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy159; + goto yy158; goto yy107; } } - yy158: + yy157: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy160; + goto yy159; if (yych <= '/') goto yy107; - goto yy161; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy161; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy161; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy159: + yy158: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy161; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy161; + goto yy160; goto yy107; } } else { @@ -3144,51 +3085,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy161; + goto yy160; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy161; + goto yy160; goto yy107; } } - yy160: + yy159: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy162; + goto yy161; if (yych <= '/') goto yy107; - goto yy163; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy163; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy163; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy161: + yy160: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy163; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy163; + goto yy162; goto yy107; } } else { @@ -3197,51 +3136,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy163; + goto yy162; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy163; + goto yy162; goto yy107; } } - yy162: + yy161: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy164; + goto yy163; if (yych <= '/') goto yy107; - goto yy165; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy165; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy165; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy163: + yy162: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy165; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy165; + goto yy164; goto yy107; } } else { @@ -3250,51 +3187,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy165; + goto yy164; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy165; + goto yy164; goto yy107; } } - yy164: + yy163: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy166; + goto yy165; if (yych <= '/') goto yy107; - goto yy167; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy167; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy167; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy165: + yy164: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy167; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy167; + goto yy166; goto yy107; } } else { @@ -3303,51 +3238,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy167; + goto yy166; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy167; + goto yy166; goto yy107; } } - yy166: + yy165: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy168; + goto yy167; if (yych <= '/') goto yy107; - goto yy169; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy169; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy169; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy167: + yy166: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy169; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy169; + goto yy168; goto yy107; } } else { @@ -3356,51 +3289,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy169; + goto yy168; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy169; + goto yy168; goto yy107; } } - yy168: + yy167: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy170; + goto yy169; if (yych <= '/') goto yy107; - goto yy171; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy171; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy171; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy169: + yy168: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy171; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy171; + goto yy170; goto yy107; } } else { @@ -3409,51 +3340,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy171; + goto yy170; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy171; + goto yy170; goto yy107; } } - yy170: + yy169: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy172; + goto yy171; if (yych <= '/') goto yy107; - goto yy173; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy173; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy173; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy171: + yy170: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy173; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy173; + goto yy172; goto yy107; } } else { @@ -3462,51 +3391,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy173; + goto yy172; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy173; + goto yy172; goto yy107; } } - yy172: + yy171: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy174; + goto yy173; if (yych <= '/') goto yy107; - goto yy175; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy175; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy175; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy173: + yy172: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy175; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy175; + goto yy174; goto yy107; } } else { @@ -3515,51 +3442,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy175; + goto yy174; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy175; + goto yy174; goto yy107; } } - yy174: + yy173: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy176; + goto yy175; if (yych <= '/') goto yy107; - goto yy177; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy177; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy177; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy175: + yy174: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy177; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy177; + goto yy176; goto yy107; } } else { @@ -3568,51 +3493,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy177; + goto yy176; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy177; + goto yy176; goto yy107; } } - yy176: + yy175: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy178; + goto yy177; if (yych <= '/') goto yy107; - goto yy179; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy179; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy179; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy177: + yy176: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy179; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy179; + goto yy178; goto yy107; } } else { @@ -3621,51 +3544,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy179; + goto yy178; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy179; + goto yy178; goto yy107; } } - yy178: + yy177: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy180; + goto yy179; if (yych <= '/') goto yy107; - goto yy181; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy181; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy181; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy179: + yy178: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy181; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy181; + goto yy180; goto yy107; } } else { @@ -3674,51 +3595,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy181; + goto yy180; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy181; + goto yy180; goto yy107; } } - yy180: + yy179: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy182; + goto yy181; if (yych <= '/') goto yy107; - goto yy183; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy183; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy183; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy181: + yy180: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy183; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy183; + goto yy182; goto yy107; } } else { @@ -3727,51 +3646,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy183; + goto yy182; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy183; + goto yy182; goto yy107; } } - yy182: + yy181: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy184; + goto yy183; if (yych <= '/') goto yy107; - goto yy185; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy185; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy185; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy183: + yy182: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy185; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy185; + goto yy184; goto yy107; } } else { @@ -3780,51 +3697,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy185; + goto yy184; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy185; + goto yy184; goto yy107; } } - yy184: + yy183: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy186; + goto yy185; if (yych <= '/') goto yy107; - goto yy187; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy187; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy187; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy185: + yy184: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy187; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy187; + goto yy186; goto yy107; } } else { @@ -3833,51 +3748,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy187; + goto yy186; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy187; + goto yy186; goto yy107; } } - yy186: + yy185: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy188; + goto yy187; if (yych <= '/') goto yy107; - goto yy189; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy189; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy189; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy187: + yy186: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy189; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy189; + goto yy188; goto yy107; } } else { @@ -3886,51 +3799,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy189; + goto yy188; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy189; + goto yy188; goto yy107; } } - yy188: + yy187: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy190; + goto yy189; if (yych <= '/') goto yy107; - goto yy191; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy191; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy191; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy189: + yy188: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy191; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy191; + goto yy190; goto yy107; } } else { @@ -3939,51 +3850,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy191; + goto yy190; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy191; + goto yy190; goto yy107; } } - yy190: + yy189: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy192; + goto yy191; if (yych <= '/') goto yy107; - goto yy193; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy193; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy193; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy191: + yy190: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy193; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy193; + goto yy192; goto yy107; } } else { @@ -3992,51 +3901,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy193; + goto yy192; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy193; + goto yy192; goto yy107; } } - yy192: + yy191: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy194; + goto yy193; if (yych <= '/') goto yy107; - goto yy195; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy195; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy195; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy193: + yy192: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy195; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy195; + goto yy194; goto yy107; } } else { @@ -4045,51 +3952,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy195; + goto yy194; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy195; + goto yy194; goto yy107; } } - yy194: + yy193: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy196; + goto yy195; if (yych <= '/') goto yy107; - goto yy197; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy197; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy197; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy195: + yy194: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy197; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy197; + goto yy196; goto yy107; } } else { @@ -4098,51 +4003,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy197; + goto yy196; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy197; + goto yy196; goto yy107; } } - yy196: + yy195: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy198; + goto yy197; if (yych <= '/') goto yy107; - goto yy199; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy199; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy199; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy197: + yy196: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy199; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy199; + goto yy198; goto yy107; } } else { @@ -4151,51 +4054,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy199; + goto yy198; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy199; + goto yy198; goto yy107; } } - yy198: + yy197: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy200; + goto yy199; if (yych <= '/') goto yy107; - goto yy201; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy201; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy201; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy199: + yy198: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy201; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy201; + goto yy200; goto yy107; } } else { @@ -4204,51 +4105,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy201; + goto yy200; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy201; + goto yy200; goto yy107; } } - yy200: + yy199: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy202; + goto yy201; if (yych <= '/') goto yy107; - goto yy203; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy203; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy203; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy201: + yy200: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy203; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy203; + goto yy202; goto yy107; } } else { @@ -4257,51 +4156,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy203; + goto yy202; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy203; + goto yy202; goto yy107; } } - yy202: + yy201: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy204; + goto yy203; if (yych <= '/') goto yy107; - goto yy205; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy205; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy205; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy203: + yy202: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy205; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy205; + goto yy204; goto yy107; } } else { @@ -4310,51 +4207,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy205; + goto yy204; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy205; + goto yy204; goto yy107; } } - yy204: + yy203: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy206; + goto yy205; if (yych <= '/') goto yy107; - goto yy207; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy207; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy207; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy205: + yy204: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy207; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy207; + goto yy206; goto yy107; } } else { @@ -4363,51 +4258,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy207; + goto yy206; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy207; + goto yy206; goto yy107; } } - yy206: + yy205: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy208; + goto yy207; if (yych <= '/') goto yy107; - goto yy209; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy209; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy209; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy207: + yy206: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy209; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy209; + goto yy208; goto yy107; } } else { @@ -4416,51 +4309,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy209; + goto yy208; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy209; + goto yy208; goto yy107; } } - yy208: + yy207: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy210; + goto yy209; if (yych <= '/') goto yy107; - goto yy211; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy211; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy211; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy209: + yy208: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy211; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy211; + goto yy210; goto yy107; } } else { @@ -4469,51 +4360,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy211; + goto yy210; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy211; + goto yy210; goto yy107; } } - yy210: + yy209: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy212; + goto yy211; if (yych <= '/') goto yy107; - goto yy213; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy213; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy213; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy211: + yy210: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy213; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy213; + goto yy212; goto yy107; } } else { @@ -4522,51 +4411,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy213; + goto yy212; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy213; + goto yy212; goto yy107; } } - yy212: + yy211: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy214; + goto yy213; if (yych <= '/') goto yy107; - goto yy215; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy215; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy215; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy213: + yy212: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy215; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy215; + goto yy214; goto yy107; } } else { @@ -4575,51 +4462,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy215; + goto yy214; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy215; + goto yy214; goto yy107; } } - yy214: + yy213: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy216; + goto yy215; if (yych <= '/') goto yy107; - goto yy217; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy217; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy217; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy215: + yy214: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy217; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy217; + goto yy216; goto yy107; } } else { @@ -4628,51 +4513,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy217; + goto yy216; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy217; + goto yy216; goto yy107; } } - yy216: + yy215: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy218; + goto yy217; if (yych <= '/') goto yy107; - goto yy219; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy219; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy219; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy217: + yy216: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy219; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy219; + goto yy218; goto yy107; } } else { @@ -4681,51 +4564,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy219; + goto yy218; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy219; + goto yy218; goto yy107; } } - yy218: + yy217: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy220; + goto yy219; if (yych <= '/') goto yy107; - goto yy221; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy221; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy221; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy219: + yy218: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy221; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy221; + goto yy220; goto yy107; } } else { @@ -4734,51 +4615,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy221; + goto yy220; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy221; + goto yy220; goto yy107; } } - yy220: + yy219: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy222; + goto yy221; if (yych <= '/') goto yy107; - goto yy223; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy223; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy223; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy221: + yy220: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy223; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy223; + goto yy222; goto yy107; } } else { @@ -4787,51 +4666,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy223; + goto yy222; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy223; + goto yy222; goto yy107; } } - yy222: + yy221: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy224; + goto yy223; if (yych <= '/') goto yy107; - goto yy225; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy225; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy225; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy223: + yy222: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; - } else { - if (yych <= '/') + if (yych <= '-') + goto yy225; + goto yy120; + } else { + if (yych <= '/') goto yy107; if (yych <= '9') - goto yy225; + goto yy224; goto yy107; } } else { @@ -4840,51 +4717,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy225; + goto yy224; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy225; + goto yy224; goto yy107; } } - yy224: + yy223: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy226; + goto yy225; if (yych <= '/') goto yy107; - goto yy227; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy227; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy227; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy225: + yy224: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy227; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy227; + goto yy226; goto yy107; } } else { @@ -4893,51 +4768,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy227; + goto yy226; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy227; + goto yy226; goto yy107; } } - yy226: + yy225: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy228; + goto yy227; if (yych <= '/') goto yy107; - goto yy229; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy229; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy229; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy227: + yy226: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy229; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy229; + goto yy228; goto yy107; } } else { @@ -4946,51 +4819,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy229; + goto yy228; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy229; + goto yy228; goto yy107; } } - yy228: + yy227: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy230; + goto yy229; if (yych <= '/') goto yy107; - goto yy231; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy231; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy231; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy229: + yy228: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy231; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy231; + goto yy230; goto yy107; } } else { @@ -4999,51 +4870,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy231; + goto yy230; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy231; + goto yy230; goto yy107; } } - yy230: + yy229: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy232; + goto yy231; if (yych <= '/') goto yy107; - goto yy233; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy233; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy233; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy231: + yy230: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy233; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy233; + goto yy232; goto yy107; } } else { @@ -5052,51 +4921,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy233; + goto yy232; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy233; + goto yy232; goto yy107; } } - yy232: + yy231: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy234; + goto yy233; if (yych <= '/') goto yy107; - goto yy235; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy235; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy235; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy233: + yy232: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy235; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy235; + goto yy234; goto yy107; } } else { @@ -5105,51 +4972,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy235; + goto yy234; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy235; + goto yy234; goto yy107; } } - yy234: + yy233: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy236; + goto yy235; if (yych <= '/') goto yy107; - goto yy237; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy237; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy237; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy235: + yy234: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy237; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy237; + goto yy236; goto yy107; } } else { @@ -5158,51 +5023,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy237; + goto yy236; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy237; + goto yy236; goto yy107; } } - yy236: + yy235: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy238; + goto yy237; if (yych <= '/') goto yy107; - goto yy239; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy239; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy239; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy237: + yy236: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy239; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy239; + goto yy238; goto yy107; } } else { @@ -5211,51 +5074,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy239; + goto yy238; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy239; + goto yy238; goto yy107; } } - yy238: + yy237: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy240; + goto yy239; if (yych <= '/') goto yy107; - goto yy241; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy241; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy241; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy239: + yy238: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy241; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy241; + goto yy240; goto yy107; } } else { @@ -5264,51 +5125,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy241; + goto yy240; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy241; + goto yy240; goto yy107; } } - yy240: + yy239: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy242; + goto yy241; if (yych <= '/') goto yy107; - goto yy243; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy243; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy243; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy241: + yy240: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy243; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy243; + goto yy242; goto yy107; } } else { @@ -5317,51 +5176,49 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy243; + goto yy242; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy243; + goto yy242; goto yy107; } } - yy242: + yy241: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy244; + goto yy243; if (yych <= '/') goto yy107; - goto yy245; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy245; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy245; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy243: + yy242: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy245; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy245; + goto yy244; goto yy107; } } else { @@ -5370,34 +5227,35 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy245; + goto yy244; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy245; + goto yy244; goto yy107; } } - yy244: + yy243: ++p; yych = *p; - if (yych <= '@') { + if (yych <= '9') { + if (yych == '-') + goto yy245; if (yych <= '/') goto yy107; - if (yych <= '9') - goto yy246; - goto yy107; } else { - if (yych <= 'Z') - goto yy246; - if (yych <= '`') - goto yy107; - if (yych <= 'z') - goto yy246; - goto yy107; + if (yych <= 'Z') { + if (yych <= '@') + goto yy107; + } else { + if (yych <= '`') + goto yy107; + if (yych >= '{') + goto yy107; + } } - yy245: + yy244: ++p; yych = *p; if (yych <= '=') { @@ -5408,8 +5266,9 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } else { if (yych <= '/') goto yy107; - if (yych >= ':') - goto yy107; + if (yych <= '9') + goto yy246; + goto yy107; } } else { if (yych <= 'Z') { @@ -5417,13 +5276,31 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; + goto yy246; } else { if (yych <= '`') goto yy107; - if (yych >= '{') - goto yy107; + if (yych <= 'z') + goto yy246; + goto yy107; } } + yy245: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') + goto yy107; + if (yych >= ':') + goto yy107; + } else { + if (yych <= 'Z') + goto yy246; + if (yych <= '`') + goto yy107; + if (yych >= '{') + goto yy107; + } yy246: ++p; yych = *p; @@ -5433,39 +5310,19 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; goto yy107; yy247: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy249; - if (yych <= '/') - goto yy107; - goto yy250; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy107; - goto yy250; - } else { - if (yych <= '`') - goto yy107; - if (yych <= 'z') - goto yy250; - goto yy107; - } - } - yy248: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy250; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy250; + goto yy249; goto yy107; } } else { @@ -5474,49 +5331,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy250; + goto yy249; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy250; + goto yy249; goto yy107; } } - yy249: + yy248: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy251; + goto yy250; if (yych <= '/') goto yy107; - goto yy252; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy252; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy252; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy250: + yy249: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy252; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy252; + goto yy251; goto yy107; } } else { @@ -5525,49 +5380,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy252; + goto yy251; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy252; + goto yy251; goto yy107; } } - yy251: + yy250: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy253; + goto yy252; if (yych <= '/') goto yy107; - goto yy254; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy254; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy254; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy252: + yy251: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy254; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy254; + goto yy253; goto yy107; } } else { @@ -5576,49 +5429,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy254; + goto yy253; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy254; + goto yy253; goto yy107; } } - yy253: + yy252: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy255; + goto yy254; if (yych <= '/') goto yy107; - goto yy256; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy256; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy256; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy254: + yy253: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy256; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy256; + goto yy255; goto yy107; } } else { @@ -5627,49 +5478,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy256; + goto yy255; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy256; + goto yy255; goto yy107; } } - yy255: + yy254: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy257; + goto yy256; if (yych <= '/') goto yy107; - goto yy258; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy258; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy258; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy256: + yy255: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy258; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy258; + goto yy257; goto yy107; } } else { @@ -5678,49 +5527,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy258; + goto yy257; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy258; + goto yy257; goto yy107; } } - yy257: + yy256: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy259; + goto yy258; if (yych <= '/') goto yy107; - goto yy260; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy260; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy260; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy258: + yy257: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy260; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy260; + goto yy259; goto yy107; } } else { @@ -5729,49 +5576,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy260; + goto yy259; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy260; + goto yy259; goto yy107; } } - yy259: + yy258: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy261; + goto yy260; if (yych <= '/') goto yy107; - goto yy262; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy262; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy262; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy260: + yy259: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy262; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy262; + goto yy261; goto yy107; } } else { @@ -5780,49 +5625,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy262; + goto yy261; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy262; + goto yy261; goto yy107; } } - yy261: + yy260: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy263; + goto yy262; if (yych <= '/') goto yy107; - goto yy264; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy264; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy264; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy262: + yy261: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy264; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy264; + goto yy263; goto yy107; } } else { @@ -5831,49 +5674,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy264; + goto yy263; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy264; + goto yy263; goto yy107; } } - yy263: + yy262: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy265; + goto yy264; if (yych <= '/') goto yy107; - goto yy266; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy266; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy266; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy264: + yy263: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy266; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy266; + goto yy265; goto yy107; } } else { @@ -5882,49 +5723,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy266; + goto yy265; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy266; + goto yy265; goto yy107; } } - yy265: + yy264: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy267; + goto yy266; if (yych <= '/') goto yy107; - goto yy268; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy268; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy268; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy266: + yy265: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy268; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy268; + goto yy267; goto yy107; } } else { @@ -5933,49 +5772,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy268; + goto yy267; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy268; + goto yy267; goto yy107; } } - yy267: + yy266: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy269; + goto yy268; if (yych <= '/') goto yy107; - goto yy270; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy270; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy270; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy268: + yy267: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy270; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy270; + goto yy269; goto yy107; } } else { @@ -5984,49 +5821,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy270; + goto yy269; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy270; + goto yy269; goto yy107; } } - yy269: + yy268: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy271; + goto yy270; if (yych <= '/') goto yy107; - goto yy272; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy272; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy272; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy270: + yy269: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy272; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy272; + goto yy271; goto yy107; } } else { @@ -6035,49 +5870,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy272; + goto yy271; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy272; + goto yy271; goto yy107; } } - yy271: + yy270: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy273; + goto yy272; if (yych <= '/') goto yy107; - goto yy274; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy274; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy274; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy272: + yy271: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy274; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy274; + goto yy273; goto yy107; } } else { @@ -6086,49 +5919,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy274; + goto yy273; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy274; + goto yy273; goto yy107; } } - yy273: + yy272: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy275; + goto yy274; if (yych <= '/') goto yy107; - goto yy276; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy276; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy276; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy274: + yy273: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy276; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy276; + goto yy275; goto yy107; } } else { @@ -6137,49 +5968,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy276; + goto yy275; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy276; + goto yy275; goto yy107; } } - yy275: + yy274: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy277; + goto yy276; if (yych <= '/') goto yy107; - goto yy278; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy278; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy278; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy276: + yy275: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy278; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy278; + goto yy277; goto yy107; } } else { @@ -6188,49 +6017,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy278; + goto yy277; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy278; + goto yy277; goto yy107; } } - yy277: + yy276: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy279; + goto yy278; if (yych <= '/') goto yy107; - goto yy280; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy280; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy280; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy278: + yy277: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy280; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy280; + goto yy279; goto yy107; } } else { @@ -6239,49 +6066,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy280; + goto yy279; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy280; + goto yy279; goto yy107; } } - yy279: + yy278: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy281; + goto yy280; if (yych <= '/') goto yy107; - goto yy282; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy282; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy282; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy280: + yy279: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy282; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy282; + goto yy281; goto yy107; } } else { @@ -6290,49 +6115,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy282; + goto yy281; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy282; + goto yy281; goto yy107; } } - yy281: + yy280: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy283; + goto yy282; if (yych <= '/') goto yy107; - goto yy284; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy284; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy284; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy282: + yy281: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy284; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy284; + goto yy283; goto yy107; } } else { @@ -6341,49 +6164,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy284; + goto yy283; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy284; + goto yy283; goto yy107; } } - yy283: + yy282: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy285; + goto yy284; if (yych <= '/') goto yy107; - goto yy286; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy286; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy286; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy284: + yy283: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy286; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy286; + goto yy285; goto yy107; } } else { @@ -6392,49 +6213,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy286; + goto yy285; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy286; + goto yy285; goto yy107; } } - yy285: + yy284: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy287; + goto yy286; if (yych <= '/') goto yy107; - goto yy288; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy288; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy288; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy286: + yy285: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy288; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy288; + goto yy287; goto yy107; } } else { @@ -6443,49 +6262,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy288; + goto yy287; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy288; + goto yy287; goto yy107; } } - yy287: + yy286: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy289; + goto yy288; if (yych <= '/') goto yy107; - goto yy290; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy290; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy290; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy288: + yy287: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy290; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy290; + goto yy289; goto yy107; } } else { @@ -6494,49 +6311,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy290; + goto yy289; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy290; + goto yy289; goto yy107; } } - yy289: + yy288: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy291; + goto yy290; if (yych <= '/') goto yy107; - goto yy292; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy292; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy292; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy290: + yy289: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy292; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy292; + goto yy291; goto yy107; } } else { @@ -6545,49 +6360,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy292; + goto yy291; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy292; + goto yy291; goto yy107; } } - yy291: + yy290: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy293; + goto yy292; if (yych <= '/') goto yy107; - goto yy294; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy294; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy294; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy292: + yy291: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy294; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy294; + goto yy293; goto yy107; } } else { @@ -6596,49 +6409,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy294; + goto yy293; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy294; + goto yy293; goto yy107; } } - yy293: + yy292: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy295; + goto yy294; if (yych <= '/') goto yy107; - goto yy296; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy296; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy296; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy294: + yy293: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy296; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy296; + goto yy295; goto yy107; } } else { @@ -6647,49 +6458,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy296; + goto yy295; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy296; + goto yy295; goto yy107; } } - yy295: + yy294: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy297; + goto yy296; if (yych <= '/') goto yy107; - goto yy298; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy298; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy298; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy296: + yy295: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy298; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy298; + goto yy297; goto yy107; } } else { @@ -6698,49 +6507,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy298; + goto yy297; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy298; + goto yy297; goto yy107; } } - yy297: + yy296: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy299; + goto yy298; if (yych <= '/') goto yy107; - goto yy300; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy300; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy300; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy298: + yy297: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy300; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy300; + goto yy299; goto yy107; } } else { @@ -6749,49 +6556,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy300; + goto yy299; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy300; + goto yy299; goto yy107; } } - yy299: + yy298: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy301; + goto yy300; if (yych <= '/') goto yy107; - goto yy302; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy302; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy302; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy300: + yy299: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; - } else { + if (yych <= '-') + goto yy302; + goto yy120; + } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy302; + goto yy301; goto yy107; } } else { @@ -6800,49 +6605,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy302; + goto yy301; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy302; + goto yy301; goto yy107; } } - yy301: + yy300: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy303; + goto yy302; if (yych <= '/') goto yy107; - goto yy304; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy304; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy304; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy302: + yy301: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy304; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy304; + goto yy303; goto yy107; } } else { @@ -6851,49 +6654,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy304; + goto yy303; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy304; + goto yy303; goto yy107; } } - yy303: + yy302: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy305; + goto yy304; if (yych <= '/') goto yy107; - goto yy306; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy306; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy306; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy304: + yy303: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy306; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy306; + goto yy305; goto yy107; } } else { @@ -6902,49 +6703,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy306; + goto yy305; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy306; + goto yy305; goto yy107; } } - yy305: + yy304: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy307; + goto yy306; if (yych <= '/') goto yy107; - goto yy308; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy308; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy308; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy306: + yy305: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy308; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy308; + goto yy307; goto yy107; } } else { @@ -6953,49 +6752,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy308; + goto yy307; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy308; + goto yy307; goto yy107; } } - yy307: + yy306: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy309; + goto yy308; if (yych <= '/') goto yy107; - goto yy310; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy310; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy310; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy308: + yy307: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy310; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy310; + goto yy309; goto yy107; } } else { @@ -7004,49 +6801,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy310; + goto yy309; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy310; + goto yy309; goto yy107; } } - yy309: + yy308: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy311; + goto yy310; if (yych <= '/') goto yy107; - goto yy312; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy312; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy312; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy310: + yy309: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy312; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy312; + goto yy311; goto yy107; } } else { @@ -7055,49 +6850,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy312; + goto yy311; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy312; + goto yy311; goto yy107; } } - yy311: + yy310: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy313; + goto yy312; if (yych <= '/') goto yy107; - goto yy314; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy314; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy314; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy312: + yy311: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy314; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy314; + goto yy313; goto yy107; } } else { @@ -7106,49 +6899,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy314; + goto yy313; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy314; + goto yy313; goto yy107; } } - yy313: + yy312: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy315; + goto yy314; if (yych <= '/') goto yy107; - goto yy316; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy316; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy316; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy314: + yy313: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy316; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy316; + goto yy315; goto yy107; } } else { @@ -7157,49 +6948,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy316; + goto yy315; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy316; + goto yy315; goto yy107; } } - yy315: + yy314: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy317; + goto yy316; if (yych <= '/') goto yy107; - goto yy318; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy318; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy318; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy316: + yy315: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy318; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy318; + goto yy317; goto yy107; } } else { @@ -7208,49 +6997,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy318; + goto yy317; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy318; + goto yy317; goto yy107; } } - yy317: + yy316: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy319; + goto yy318; if (yych <= '/') goto yy107; - goto yy320; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy320; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy320; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy318: + yy317: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy320; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy320; + goto yy319; goto yy107; } } else { @@ -7259,49 +7046,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy320; + goto yy319; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy320; + goto yy319; goto yy107; } } - yy319: + yy318: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy321; + goto yy320; if (yych <= '/') goto yy107; - goto yy322; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy322; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy322; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy320: + yy319: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy322; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy322; + goto yy321; goto yy107; } } else { @@ -7310,49 +7095,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy322; + goto yy321; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy322; + goto yy321; goto yy107; } } - yy321: + yy320: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy323; + goto yy322; if (yych <= '/') goto yy107; - goto yy324; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy324; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy324; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy322: + yy321: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy324; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy324; + goto yy323; goto yy107; } } else { @@ -7361,49 +7144,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy324; + goto yy323; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy324; + goto yy323; goto yy107; } } - yy323: + yy322: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy325; + goto yy324; if (yych <= '/') goto yy107; - goto yy326; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy326; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy326; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy324: + yy323: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy326; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy326; + goto yy325; goto yy107; } } else { @@ -7412,49 +7193,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy326; + goto yy325; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy326; + goto yy325; goto yy107; } } - yy325: + yy324: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy327; + goto yy326; if (yych <= '/') goto yy107; - goto yy328; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy328; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy328; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy326: + yy325: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy328; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy328; + goto yy327; goto yy107; } } else { @@ -7463,49 +7242,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy328; + goto yy327; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy328; + goto yy327; goto yy107; } } - yy327: + yy326: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy329; + goto yy328; if (yych <= '/') goto yy107; - goto yy330; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy330; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy330; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy328: + yy327: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy330; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy330; + goto yy329; goto yy107; } } else { @@ -7514,49 +7291,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy330; + goto yy329; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy330; + goto yy329; goto yy107; } } - yy329: + yy328: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy331; + goto yy330; if (yych <= '/') goto yy107; - goto yy332; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy332; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy332; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy330: + yy329: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy332; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy332; + goto yy331; goto yy107; } } else { @@ -7565,49 +7340,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy332; + goto yy331; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy332; + goto yy331; goto yy107; } } - yy331: + yy330: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy333; + goto yy332; if (yych <= '/') goto yy107; - goto yy334; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy334; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy334; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy332: + yy331: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy334; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy334; + goto yy333; goto yy107; } } else { @@ -7616,49 +7389,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy334; + goto yy333; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy334; + goto yy333; goto yy107; } } - yy333: + yy332: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy335; + goto yy334; if (yych <= '/') goto yy107; - goto yy336; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy336; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy336; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy334: + yy333: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy336; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy336; + goto yy335; goto yy107; } } else { @@ -7667,49 +7438,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy336; + goto yy335; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy336; + goto yy335; goto yy107; } } - yy335: + yy334: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy337; + goto yy336; if (yych <= '/') goto yy107; - goto yy338; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy338; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy338; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy336: + yy335: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy338; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy338; + goto yy337; goto yy107; } } else { @@ -7718,49 +7487,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy338; + goto yy337; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy338; + goto yy337; goto yy107; } } - yy337: + yy336: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy339; + goto yy338; if (yych <= '/') goto yy107; - goto yy340; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy340; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy340; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy338: + yy337: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy340; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy340; + goto yy339; goto yy107; } } else { @@ -7769,49 +7536,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy340; + goto yy339; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy340; + goto yy339; goto yy107; } } - yy339: + yy338: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy341; + goto yy340; if (yych <= '/') goto yy107; - goto yy342; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy342; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy342; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy340: + yy339: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy342; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy342; + goto yy341; goto yy107; } } else { @@ -7820,49 +7585,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy342; + goto yy341; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy342; + goto yy341; goto yy107; } } - yy341: + yy340: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy343; + goto yy342; if (yych <= '/') goto yy107; - goto yy344; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy344; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy344; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy342: + yy341: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy344; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy344; + goto yy343; goto yy107; } } else { @@ -7871,49 +7634,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy344; + goto yy343; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy344; + goto yy343; goto yy107; } } - yy343: + yy342: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy345; + goto yy344; if (yych <= '/') goto yy107; - goto yy346; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy346; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy346; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy344: + yy343: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy346; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy346; + goto yy345; goto yy107; } } else { @@ -7922,49 +7683,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy346; + goto yy345; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy346; + goto yy345; goto yy107; } } - yy345: + yy344: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy347; + goto yy346; if (yych <= '/') goto yy107; - goto yy348; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy348; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy348; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy346: + yy345: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy348; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy348; + goto yy347; goto yy107; } } else { @@ -7973,49 +7732,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy348; + goto yy347; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy348; + goto yy347; goto yy107; } } - yy347: + yy346: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy349; + goto yy348; if (yych <= '/') goto yy107; - goto yy350; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy350; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy350; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy348: + yy347: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy350; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy350; + goto yy349; goto yy107; } } else { @@ -8024,49 +7781,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy350; + goto yy349; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy350; + goto yy349; goto yy107; } } - yy349: + yy348: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy351; + goto yy350; if (yych <= '/') goto yy107; - goto yy352; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy352; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy352; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy350: + yy349: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy352; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy352; + goto yy351; goto yy107; } } else { @@ -8075,49 +7830,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy352; + goto yy351; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy352; + goto yy351; goto yy107; } } - yy351: + yy350: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy353; + goto yy352; if (yych <= '/') goto yy107; - goto yy354; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy354; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy354; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy352: + yy351: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy354; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy354; + goto yy353; goto yy107; } } else { @@ -8126,49 +7879,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy354; + goto yy353; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy354; + goto yy353; goto yy107; } } - yy353: + yy352: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy355; + goto yy354; if (yych <= '/') goto yy107; - goto yy356; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy356; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy356; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy354: + yy353: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy356; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy356; + goto yy355; goto yy107; } } else { @@ -8177,49 +7928,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy356; + goto yy355; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy356; + goto yy355; goto yy107; } } - yy355: + yy354: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy357; + goto yy356; if (yych <= '/') goto yy107; - goto yy358; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy358; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy358; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy356: + yy355: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy358; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy358; + goto yy357; goto yy107; } } else { @@ -8228,49 +7977,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy358; + goto yy357; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy358; + goto yy357; goto yy107; } } - yy357: + yy356: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy359; + goto yy358; if (yych <= '/') goto yy107; - goto yy360; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy360; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy360; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy358: + yy357: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy360; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy360; + goto yy359; goto yy107; } } else { @@ -8279,49 +8026,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy360; + goto yy359; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy360; + goto yy359; goto yy107; } } - yy359: + yy358: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy361; + goto yy360; if (yych <= '/') goto yy107; - goto yy362; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy362; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy362; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy360: + yy359: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy362; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy362; + goto yy361; goto yy107; } } else { @@ -8330,49 +8075,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy362; + goto yy361; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy362; + goto yy361; goto yy107; } } - yy361: + yy360: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy363; + goto yy362; if (yych <= '/') goto yy107; - goto yy364; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy364; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy364; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy362: + yy361: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy364; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy364; + goto yy363; goto yy107; } } else { @@ -8381,49 +8124,47 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy364; + goto yy363; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy364; + goto yy363; goto yy107; } } - yy363: + yy362: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy365; + goto yy364; if (yych <= '/') goto yy107; - goto yy366; } else { if (yych <= 'Z') { if (yych <= '@') goto yy107; - goto yy366; } else { if (yych <= '`') goto yy107; - if (yych <= 'z') - goto yy366; - goto yy107; + if (yych >= '{') + goto yy107; } } - yy364: + yy363: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') goto yy107; - if (yych >= '.') - goto yy120; + if (yych <= '-') + goto yy366; + goto yy120; } else { if (yych <= '/') goto yy107; if (yych <= '9') - goto yy366; + goto yy365; goto yy107; } } else { @@ -8432,35 +8173,36 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy121; if (yych <= '@') goto yy107; - goto yy366; + goto yy365; } else { if (yych <= '`') goto yy107; if (yych <= 'z') - goto yy366; + goto yy365; goto yy107; } } - yy365: + yy364: yych = *++p; - if (yych <= '@') { + if (yych <= '9') { + if (yych == '-') + goto yy366; if (yych <= '/') goto yy107; - if (yych <= '9') - goto yy246; - goto yy107; } else { - if (yych <= 'Z') - goto yy246; - if (yych <= '`') - goto yy107; - if (yych <= 'z') - goto yy246; - goto yy107; + if (yych <= 'Z') { + if (yych <= '@') + goto yy107; + } else { + if (yych <= '`') + goto yy107; + if (yych >= '{') + goto yy107; + } } - yy366: - ++p; - if ((yych = *p) <= '=') { + yy365: + yych = *++p; + if (yych <= '=') { if (yych <= '.') { if (yych <= '-') goto yy107; @@ -8487,6 +8229,23 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy107; } } + yy366: + ++p; + if ((yych = *p) <= '@') { + if (yych <= '/') + goto yy107; + if (yych <= '9') + goto yy246; + goto yy107; + } else { + if (yych <= 'Z') + goto yy246; + if (yych <= '`') + goto yy107; + if (yych <= 'z') + goto yy246; + goto yy107; + } } } @@ -10925,50 +10684,24 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { } yy545: yych = *++p; - if (yych <= 'U') { - if (yych <= 'E') { - if (yych == 'C') - goto yy587; - if (yych <= 'D') - goto yy525; - goto yy590; - } else { - if (yych <= 'O') { - if (yych <= 'N') - goto yy525; - goto yy589; - } else { - if (yych <= 'S') - goto yy525; - if (yych <= 'T') - goto yy586; - goto yy588; - } - } - } else { - if (yych <= 'n') { - if (yych <= 'c') { - if (yych <= 'b') - goto yy525; - goto yy587; - } else { - if (yych == 'e') - goto yy590; - goto yy525; - } - } else { - if (yych <= 's') { - if (yych <= 'o') - goto yy589; - goto yy525; - } else { - if (yych <= 't') - goto yy586; - if (yych <= 'u') - goto yy588; - goto yy525; - } - } + switch (yych) { + case 'C': + case 'c': + goto yy587; + case 'E': + case 'e': + goto yy590; + case 'O': + case 'o': + goto yy589; + case 'T': + case 't': + goto yy586; + case 'U': + case 'u': + goto yy588; + default: + goto yy525; } yy546: yych = *++p; @@ -18923,9 +18656,9 @@ 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -18984,16 +18717,16 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1206: yych = *(marker = ++p); if (yych == ' ') - goto yy1238; + goto yy1242; if (yych == '*') - goto yy1240; + goto yy1244; goto yy1205; yy1207: yych = *(marker = ++p); if (yych == ' ') - goto yy1228; - if (yych == '_') goto yy1230; + if (yych == '_') + goto yy1232; goto yy1205; yy1208: yych = *(marker = ++p); @@ -19075,23 +18808,32 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1222: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy1222; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1211; - if (yych >= '\n') + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x08) + goto yy1211; + } else { + if (yych <= '\n') + goto yy1226; + if (yych <= '\f') + goto yy1211; goto yy1226; + } } else { - if (yych == '\r') - goto yy1226; - goto yy1211; + if (yych <= ' ') { + if (yych <= 0x1F) + goto yy1211; + goto yy1222; + } else { + if (yych == '-') + goto yy1228; + goto yy1211; + } } yy1224: ++p; yych = *p; - if (yybm[0 + yych] & 32) { + if (yybm[0 + yych] & 16) { goto yy1224; } if (yych <= 0x08) @@ -19106,10 +18848,20 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1228: ++p; yych = *p; - if (yych == ' ') + if (yybm[0 + yych] & 32) { goto yy1228; - if (yych != '_') + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy1211; + if (yych <= '\t') + goto yy1224; + goto yy1226; + } else { + if (yych == '\r') + goto yy1226; goto yy1211; + } yy1230: ++p; yych = *p; @@ -19120,89 +18872,148 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1232: ++p; yych = *p; - if (yybm[0 + yych] & 64) { + if (yych == ' ') goto yy1232; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1211; - if (yych >= '\n') - goto yy1236; - } else { - if (yych == '\r') - goto yy1236; + if (yych != '_') goto yy1211; - } yy1234: + ++p; + yych = *p; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x08) + goto yy1211; + } else { + if (yych <= '\n') + goto yy1238; + if (yych <= '\f') + goto yy1211; + goto yy1238; + } + } else { + if (yych <= ' ') { + if (yych <= 0x1F) + goto yy1211; + goto yy1234; + } else { + if (yych == '_') + goto yy1240; + goto yy1211; + } + } + yy1236: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) goto yy1211; if (yych <= '\t') - goto yy1234; + goto yy1236; if (yych >= '\v') goto yy1211; } else { if (yych <= '\r') - goto yy1236; + goto yy1238; if (yych == ' ') - goto yy1234; + goto yy1236; goto yy1211; } - yy1236: + yy1238: ++p; { return (bufsize_t)(p - start); } - yy1238: + yy1240: ++p; yych = *p; - if (yych == ' ') + if (yybm[0 + yych] & 64) { + goto yy1240; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy1211; + if (yych <= '\t') + goto yy1236; goto yy1238; + } else { + if (yych == '\r') + goto yy1238; + goto yy1211; + } + yy1242: + ++p; + yych = *p; + if (yych == ' ') + goto yy1242; if (yych != '*') goto yy1211; - yy1240: + yy1244: ++p; yych = *p; if (yych == ' ') - goto yy1240; + goto yy1244; if (yych != '*') goto yy1211; - yy1242: + yy1246: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy1242; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1211; - if (yych >= '\n') - goto yy1246; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x08) + goto yy1211; + } else { + if (yych <= '\n') + goto yy1250; + if (yych <= '\f') + goto yy1211; + goto yy1250; + } } else { - if (yych == '\r') + if (yych <= ' ') { + if (yych <= 0x1F) + goto yy1211; goto yy1246; - goto yy1211; + } else { + if (yych == '*') + goto yy1252; + goto yy1211; + } } - yy1244: + yy1248: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) goto yy1211; if (yych <= '\t') - goto yy1244; + goto yy1248; if (yych >= '\v') goto yy1211; } else { if (yych <= '\r') - goto yy1246; + goto yy1250; if (yych == ' ') - goto yy1244; + goto yy1248; goto yy1211; } - yy1246: + yy1250: ++p; { return (bufsize_t)(p - start); } + yy1252: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1252; + } + if (yych <= '\n') { + if (yych <= 0x08) + goto yy1211; + if (yych <= '\t') + goto yy1248; + goto yy1250; + } else { + if (yych == '\r') + goto yy1250; + goto yy1211; + } } } @@ -19238,374 +19049,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1250; + goto yy1256; if (yych <= '_') - goto yy1253; - goto yy1251; + goto yy1259; + goto yy1257; } else { if (yych == '~') - goto yy1252; + goto yy1258; if (yych <= 0x7F) - goto yy1253; + goto yy1259; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1254; + goto yy1260; if (yych <= 0xE0) - goto yy1256; + goto yy1262; if (yych <= 0xEC) - goto yy1257; - goto yy1261; + goto yy1263; + goto yy1267; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1257; - goto yy1258; + goto yy1263; + goto yy1264; } else { if (yych <= 0xF3) - goto yy1259; + goto yy1265; if (yych <= 0xF4) - goto yy1260; + goto yy1266; } } } - yy1250 : { return 0; } - yy1251: + yy1256 : { return 0; } + yy1257: yych = *(marker = ++p); if (yych == '`') - goto yy1276; - goto yy1250; - yy1252: + goto yy1282; + goto yy1256; + yy1258: yych = *(marker = ++p); if (yych == '~') - goto yy1262; - goto yy1250; - yy1253: + goto yy1268; + goto yy1256; + yy1259: yych = *++p; - goto yy1250; - yy1254: + goto yy1256; + yy1260: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1253; - yy1255: + goto yy1259; + yy1261: p = marker; - goto yy1250; - yy1256: + goto yy1256; + yy1262: yych = *++p; if (yych <= 0x9F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1254; - goto yy1255; - yy1257: + goto yy1260; + goto yy1261; + yy1263: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1254; - goto yy1255; - yy1258: + goto yy1260; + goto yy1261; + yy1264: yych = *++p; if (yych <= 0x8F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1257; - goto yy1255; - yy1259: + goto yy1263; + goto yy1261; + yy1265: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1257; - goto yy1255; - yy1260: + goto yy1263; + goto yy1261; + yy1266: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0x8F) - goto yy1257; - goto yy1255; - yy1261: + goto yy1263; + goto yy1261; + yy1267: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0x9F) - goto yy1254; - goto yy1255; - yy1262: + goto yy1260; + goto yy1261; + yy1268: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1263; + goto yy1269; } - goto yy1255; - yy1263: - marker = p + 1; + goto yy1261; + yy1269: ++p; yych = *p; + marker = p; if (yybm[0 + yych] & 32) { - goto yy1265; + goto yy1271; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1255; + goto yy1261; if (yych <= '\r') - goto yy1274; - goto yy1263; + goto yy1280; + goto yy1269; } else { if (yych <= 0xC1) - goto yy1255; + goto yy1261; if (yych <= 0xDF) - goto yy1267; - goto yy1268; + goto yy1273; + goto yy1274; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1273; - goto yy1269; + goto yy1279; + goto yy1275; } else { if (yych <= 0xF0) - goto yy1270; + goto yy1276; if (yych <= 0xF3) - goto yy1271; + goto yy1277; if (yych <= 0xF4) - goto yy1272; - goto yy1255; + goto yy1278; + goto yy1261; } } - yy1265: + yy1271: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1265; + goto yy1271; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1255; + goto yy1261; if (yych <= '\r') - goto yy1274; - goto yy1255; + goto yy1280; + goto yy1261; } else { if (yych <= 0xDF) - goto yy1267; + goto yy1273; if (yych <= 0xE0) - goto yy1268; - goto yy1269; + goto yy1274; + goto yy1275; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1273; + goto yy1279; if (yych <= 0xEF) - goto yy1269; - goto yy1270; + goto yy1275; + goto yy1276; } else { if (yych <= 0xF3) - goto yy1271; + goto yy1277; if (yych <= 0xF4) - goto yy1272; - goto yy1255; + goto yy1278; + goto yy1261; } } - yy1267: + yy1273: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1265; - goto yy1255; - yy1268: + goto yy1271; + goto yy1261; + yy1274: ++p; yych = *p; if (yych <= 0x9F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1267; - goto yy1255; - yy1269: + goto yy1273; + goto yy1261; + yy1275: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1267; - goto yy1255; - yy1270: + goto yy1273; + goto yy1261; + yy1276: ++p; yych = *p; if (yych <= 0x8F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1269; - goto yy1255; - yy1271: + goto yy1275; + goto yy1261; + yy1277: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1269; - goto yy1255; - yy1272: + goto yy1275; + goto yy1261; + yy1278: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0x8F) - goto yy1269; - goto yy1255; - yy1273: + goto yy1275; + goto yy1261; + yy1279: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0x9F) - goto yy1267; - goto yy1255; - yy1274: + goto yy1273; + goto yy1261; + yy1280: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1276: + yy1282: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy1277; + goto yy1283; } - goto yy1255; - yy1277: - marker = p + 1; + goto yy1261; + yy1283: ++p; yych = *p; + marker = p; if (yybm[0 + yych] & 128) { - goto yy1279; + goto yy1285; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy1255; + goto yy1261; if (yych <= '\r') - goto yy1288; - goto yy1277; + goto yy1294; + goto yy1283; } else { if (yych <= 0xC1) - goto yy1255; + goto yy1261; if (yych <= 0xDF) - goto yy1281; - goto yy1282; + goto yy1287; + goto yy1288; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1287; - goto yy1283; + goto yy1293; + goto yy1289; } else { if (yych <= 0xF0) - goto yy1284; + goto yy1290; if (yych <= 0xF3) - goto yy1285; + goto yy1291; if (yych <= 0xF4) - goto yy1286; - goto yy1255; + goto yy1292; + goto yy1261; } } - yy1279: + yy1285: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1279; + goto yy1285; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1255; + goto yy1261; if (yych <= '\r') - goto yy1288; - goto yy1255; + goto yy1294; + goto yy1261; } else { if (yych <= 0xDF) - goto yy1281; + goto yy1287; if (yych <= 0xE0) - goto yy1282; - goto yy1283; + goto yy1288; + goto yy1289; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1287; + goto yy1293; if (yych <= 0xEF) - goto yy1283; - goto yy1284; + goto yy1289; + goto yy1290; } else { if (yych <= 0xF3) - goto yy1285; + goto yy1291; if (yych <= 0xF4) - goto yy1286; - goto yy1255; + goto yy1292; + goto yy1261; } } - yy1281: + yy1287: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1279; - goto yy1255; - yy1282: + goto yy1285; + goto yy1261; + yy1288: ++p; yych = *p; if (yych <= 0x9F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1281; - goto yy1255; - yy1283: + goto yy1287; + goto yy1261; + yy1289: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1281; - goto yy1255; - yy1284: + goto yy1287; + goto yy1261; + yy1290: ++p; yych = *p; if (yych <= 0x8F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1283; - goto yy1255; - yy1285: + goto yy1289; + goto yy1261; + yy1291: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0xBF) - goto yy1283; - goto yy1255; - yy1286: + goto yy1289; + goto yy1261; + yy1292: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0x8F) - goto yy1283; - goto yy1255; - yy1287: + goto yy1289; + goto yy1261; + yy1293: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1261; if (yych <= 0x9F) - goto yy1281; - goto yy1255; - yy1288: + goto yy1287; + goto yy1261; + yy1294: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19637,190 +19448,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1292; + goto yy1298; if (yych <= '_') - goto yy1295; - goto yy1293; + goto yy1301; + goto yy1299; } else { if (yych == '~') - goto yy1294; + goto yy1300; if (yych <= 0x7F) - goto yy1295; + goto yy1301; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1296; + goto yy1302; if (yych <= 0xE0) - goto yy1298; + goto yy1304; if (yych <= 0xEC) - goto yy1299; - goto yy1303; + goto yy1305; + goto yy1309; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1299; - goto yy1300; + goto yy1305; + goto yy1306; } else { if (yych <= 0xF3) - goto yy1301; + goto yy1307; if (yych <= 0xF4) - goto yy1302; + goto yy1308; } } } - yy1292 : { return 0; } - yy1293: + yy1298 : { return 0; } + yy1299: yych = *(marker = ++p); if (yych == '`') - goto yy1311; - goto yy1292; - yy1294: + goto yy1317; + goto yy1298; + yy1300: yych = *(marker = ++p); if (yych == '~') - goto yy1304; - goto yy1292; - yy1295: + goto yy1310; + goto yy1298; + yy1301: yych = *++p; - goto yy1292; - yy1296: + goto yy1298; + yy1302: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1303; if (yych <= 0xBF) - goto yy1295; - yy1297: + goto yy1301; + yy1303: p = marker; - goto yy1292; - yy1298: + goto yy1298; + yy1304: yych = *++p; if (yych <= 0x9F) - goto yy1297; + goto yy1303; if (yych <= 0xBF) - goto yy1296; - goto yy1297; - yy1299: + goto yy1302; + goto yy1303; + yy1305: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1303; if (yych <= 0xBF) - goto yy1296; - goto yy1297; - yy1300: + goto yy1302; + goto yy1303; + yy1306: yych = *++p; if (yych <= 0x8F) - goto yy1297; + goto yy1303; if (yych <= 0xBF) - goto yy1299; - goto yy1297; - yy1301: + goto yy1305; + goto yy1303; + yy1307: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1303; if (yych <= 0xBF) - goto yy1299; - goto yy1297; - yy1302: + goto yy1305; + goto yy1303; + yy1308: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1303; if (yych <= 0x8F) - goto yy1299; - goto yy1297; - yy1303: + goto yy1305; + goto yy1303; + yy1309: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1303; if (yych <= 0x9F) - goto yy1296; - goto yy1297; - yy1304: + goto yy1302; + goto yy1303; + yy1310: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1305; + goto yy1311; } - goto yy1297; - yy1305: - marker = p + 1; + goto yy1303; + yy1311: ++p; yych = *p; + marker = p; if (yybm[0 + yych] & 64) { - goto yy1307; + goto yy1313; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1297; + goto yy1303; if (yych <= '\n') - goto yy1309; - goto yy1297; + goto yy1315; + goto yy1303; } else { if (yych <= '\r') - goto yy1309; + goto yy1315; if (yych == '~') - goto yy1305; - goto yy1297; + goto yy1311; + goto yy1303; } - yy1307: + yy1313: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1307; + goto yy1313; } if (yych <= 0x08) - goto yy1297; + goto yy1303; if (yych <= '\n') - goto yy1309; + goto yy1315; if (yych != '\r') - goto yy1297; - yy1309: + goto yy1303; + yy1315: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1311: + yy1317: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1312; + goto yy1318; } - goto yy1297; - yy1312: - marker = p + 1; + goto yy1303; + yy1318: ++p; yych = *p; + marker = p; if (yybm[0 + yych] & 128) { - goto yy1312; + goto yy1318; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1297; + goto yy1303; if (yych <= '\t') - goto yy1314; + goto yy1320; if (yych <= '\n') - goto yy1316; - goto yy1297; + goto yy1322; + goto yy1303; } else { if (yych <= '\r') - goto yy1316; + goto yy1322; if (yych != ' ') - goto yy1297; + goto yy1303; } - yy1314: + yy1320: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1297; + goto yy1303; if (yych <= '\t') - goto yy1314; + goto yy1320; if (yych >= '\v') - goto yy1297; + goto yy1303; } else { if (yych <= '\r') - goto yy1316; + goto yy1322; if (yych == ' ') - goto yy1314; - goto yy1297; + goto yy1320; + goto yy1303; } - yy1316: + yy1322: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19839,997 +19650,997 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '%') { if (yych != '\n') - goto yy1322; + goto yy1328; } else { if (yych <= '&') - goto yy1321; + goto yy1327; if (yych <= 0x7F) - goto yy1322; + goto yy1328; if (yych >= 0xC2) - goto yy1323; + goto yy1329; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1325; + goto yy1331; if (yych == 0xED) - goto yy1330; - goto yy1326; + goto yy1336; + goto yy1332; } else { if (yych <= 0xF0) - goto yy1327; + goto yy1333; if (yych <= 0xF3) - goto yy1328; + goto yy1334; if (yych <= 0xF4) - goto yy1329; + goto yy1335; } } - yy1320 : { return 0; } - yy1321: + yy1326 : { return 0; } + yy1327: yych = *(marker = ++p); if (yych <= '@') { if (yych == '#') - goto yy1331; - goto yy1320; + goto yy1337; + goto yy1326; } else { if (yych <= 'Z') - goto yy1332; + goto yy1338; if (yych <= '`') - goto yy1320; + goto yy1326; if (yych <= 'z') - goto yy1332; - goto yy1320; + goto yy1338; + goto yy1326; } - yy1322: + yy1328: yych = *++p; - goto yy1320; - yy1323: + goto yy1326; + yy1329: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1330; if (yych <= 0xBF) - goto yy1322; - yy1324: + goto yy1328; + yy1330: p = marker; - goto yy1320; - yy1325: + goto yy1326; + yy1331: yych = *++p; if (yych <= 0x9F) - goto yy1324; + goto yy1330; if (yych <= 0xBF) - goto yy1323; - goto yy1324; - yy1326: + goto yy1329; + goto yy1330; + yy1332: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1330; if (yych <= 0xBF) - goto yy1323; - goto yy1324; - yy1327: + goto yy1329; + goto yy1330; + yy1333: yych = *++p; if (yych <= 0x8F) - goto yy1324; + goto yy1330; if (yych <= 0xBF) - goto yy1326; - goto yy1324; - yy1328: + goto yy1332; + goto yy1330; + yy1334: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1330; if (yych <= 0xBF) - goto yy1326; - goto yy1324; - yy1329: + goto yy1332; + goto yy1330; + yy1335: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1330; if (yych <= 0x8F) - goto yy1326; - goto yy1324; - yy1330: + goto yy1332; + goto yy1330; + yy1336: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1330; if (yych <= 0x9F) - goto yy1323; - goto yy1324; - yy1331: + goto yy1329; + goto yy1330; + yy1337: yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1367; - goto yy1324; + goto yy1373; + goto yy1330; } else { if (yych <= 'X') - goto yy1366; + goto yy1372; if (yych == 'x') - goto yy1366; - goto yy1324; + goto yy1372; + goto yy1330; } - yy1332: + yy1338: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych >= ':') - goto yy1324; + goto yy1330; } else { if (yych <= 'Z') - goto yy1333; + goto yy1339; if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } - yy1333: + yy1339: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1336; + goto yy1342; if (yych <= ':') - goto yy1324; + goto yy1330; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; - goto yy1336; + goto yy1330; + goto yy1342; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych <= 'z') - goto yy1336; - goto yy1324; + goto yy1342; + goto yy1330; } } - yy1334: + yy1340: ++p; { return (bufsize_t)(p - start); } - yy1336: + yy1342: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1337; + goto yy1343; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1337: + yy1343: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1338; + goto yy1344; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1338: + yy1344: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1339; + goto yy1345; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1339: + yy1345: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1340; + goto yy1346; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1340: + yy1346: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1341; + goto yy1347; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1341: + yy1347: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1342; + goto yy1348; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1342: + yy1348: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1343; + goto yy1349; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1343: + yy1349: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1344; + goto yy1350; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1344: + yy1350: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1345; + goto yy1351; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1345: + yy1351: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1346; + goto yy1352; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1346: + yy1352: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1347; + goto yy1353; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1347: + yy1353: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1348; + goto yy1354; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1348: + yy1354: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1349; + goto yy1355; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1349: + yy1355: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1350; + goto yy1356; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1350: + yy1356: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1351; + goto yy1357; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1351: + yy1357: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1352; + goto yy1358; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1352: + yy1358: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1353; + goto yy1359; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1353: + yy1359: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1354; + goto yy1360; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1354: + yy1360: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1355; + goto yy1361; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1355: + yy1361: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1356; + goto yy1362; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1356: + yy1362: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1357; + goto yy1363; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1357: + yy1363: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1358; + goto yy1364; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1358: + yy1364: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1359; + goto yy1365; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1359: + yy1365: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1360; + goto yy1366; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1360: + yy1366: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1361; + goto yy1367; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1361: + yy1367: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1362; + goto yy1368; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1362: + yy1368: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1363; + goto yy1369; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1363: + yy1369: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1364; + goto yy1370; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1364: + yy1370: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1365; + goto yy1371; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= '{') - goto yy1324; + goto yy1330; } } - yy1365: + yy1371: yych = *++p; if (yych == ';') - goto yy1334; - goto yy1324; - yy1366: + goto yy1340; + goto yy1330; + yy1372: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1374; - goto yy1324; + goto yy1380; + goto yy1330; } else { if (yych <= 'F') - goto yy1374; + goto yy1380; if (yych <= '`') - goto yy1324; + goto yy1330; if (yych <= 'f') - goto yy1374; - goto yy1324; + goto yy1380; + goto yy1330; } - yy1367: + yy1373: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1368; + goto yy1374; if (yych == ';') - goto yy1334; - goto yy1324; - yy1368: + goto yy1340; + goto yy1330; + yy1374: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1369; + goto yy1375; if (yych == ';') - goto yy1334; - goto yy1324; - yy1369: + goto yy1340; + goto yy1330; + yy1375: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1370; + goto yy1376; if (yych == ';') - goto yy1334; - goto yy1324; - yy1370: + goto yy1340; + goto yy1330; + yy1376: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1371; + goto yy1377; if (yych == ';') - goto yy1334; - goto yy1324; - yy1371: + goto yy1340; + goto yy1330; + yy1377: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1372; + goto yy1378; if (yych == ';') - goto yy1334; - goto yy1324; - yy1372: + goto yy1340; + goto yy1330; + yy1378: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1373; + goto yy1379; if (yych == ';') - goto yy1334; - goto yy1324; - yy1373: + goto yy1340; + goto yy1330; + yy1379: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1365; + goto yy1371; if (yych == ';') - goto yy1334; - goto yy1324; - yy1374: + goto yy1340; + goto yy1330; + yy1380: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1375; + goto yy1381; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= 'g') - goto yy1324; + goto yy1330; } } - yy1375: + yy1381: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1376; + goto yy1382; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= 'g') - goto yy1324; + goto yy1330; } } - yy1376: + yy1382: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1377; + goto yy1383; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= 'g') - goto yy1324; + goto yy1330; } } - yy1377: + yy1383: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1378; + goto yy1384; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= 'g') - goto yy1324; + goto yy1330; } } - yy1378: + yy1384: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1379; + goto yy1385; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= 'g') - goto yy1324; + goto yy1330; } } - yy1379: + yy1385: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1380; + goto yy1386; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1330; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych >= 'g') - goto yy1324; + goto yy1330; } } - yy1380: + yy1386: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1324; + goto yy1330; if (yych <= '9') - goto yy1365; + goto yy1371; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1330; + goto yy1340; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; - goto yy1365; + goto yy1330; + goto yy1371; } else { if (yych <= '`') - goto yy1324; + goto yy1330; if (yych <= 'f') - goto yy1365; - goto yy1324; + goto yy1371; + goto yy1330; } } } @@ -20849,415 +20660,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'I') { if (yych <= 'C') { if (yych != '\n') - goto yy1388; + goto yy1394; } else { if (yych <= 'D') - goto yy1384; + goto yy1390; if (yych == 'F') - goto yy1387; - goto yy1388; + goto yy1393; + goto yy1394; } } else { if (yych <= 'V') { if (yych <= 'J') - goto yy1385; + goto yy1391; if (yych <= 'U') - goto yy1388; - goto yy1386; + goto yy1394; + goto yy1392; } else { if (yych == 'd') - goto yy1384; + goto yy1390; if (yych <= 'e') - goto yy1388; - goto yy1387; + goto yy1394; + goto yy1393; } } } else { if (yych <= 0xDF) { if (yych <= 'u') { if (yych == 'j') - goto yy1385; - goto yy1388; + goto yy1391; + goto yy1394; } else { if (yych <= 'v') - goto yy1386; + goto yy1392; if (yych <= 0x7F) - goto yy1388; + goto yy1394; if (yych >= 0xC2) - goto yy1389; + goto yy1395; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1391; + goto yy1397; if (yych == 0xED) - goto yy1396; - goto yy1392; + goto yy1402; + goto yy1398; } else { if (yych <= 0xF0) - goto yy1393; + goto yy1399; if (yych <= 0xF3) - goto yy1394; + goto yy1400; if (yych <= 0xF4) - goto yy1395; + goto yy1401; } } } - yy1383 : { return 0; } - yy1384: + yy1389 : { return 0; } + yy1390: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1418; + goto yy1424; if (yych == 'a') - goto yy1418; - goto yy1383; - yy1385: + goto yy1424; + goto yy1389; + yy1391: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1409; + goto yy1415; if (yych == 'a') - goto yy1409; - goto yy1383; - yy1386: + goto yy1415; + goto yy1389; + yy1392: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1402; + goto yy1408; if (yych == 'b') - goto yy1402; - goto yy1383; - yy1387: + goto yy1408; + goto yy1389; + yy1393: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy1397; + goto yy1403; if (yych == 'i') - goto yy1397; - goto yy1383; - yy1388: + goto yy1403; + goto yy1389; + yy1394: yych = *++p; - goto yy1383; - yy1389: + goto yy1389; + yy1395: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1396; if (yych <= 0xBF) - goto yy1388; - yy1390: + goto yy1394; + yy1396: p = marker; if (yyaccept == 0) { - goto yy1383; + goto yy1389; } else { - goto yy1401; + goto yy1407; } - yy1391: + yy1397: yych = *++p; if (yych <= 0x9F) - goto yy1390; + goto yy1396; if (yych <= 0xBF) - goto yy1389; - goto yy1390; - yy1392: + goto yy1395; + goto yy1396; + yy1398: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1396; if (yych <= 0xBF) - goto yy1389; - goto yy1390; - yy1393: + goto yy1395; + goto yy1396; + yy1399: yych = *++p; if (yych <= 0x8F) - goto yy1390; + goto yy1396; if (yych <= 0xBF) - goto yy1392; - goto yy1390; - yy1394: + goto yy1398; + goto yy1396; + yy1400: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1396; if (yych <= 0xBF) - goto yy1392; - goto yy1390; - yy1395: + goto yy1398; + goto yy1396; + yy1401: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1396; if (yych <= 0x8F) - goto yy1392; - goto yy1390; - yy1396: + goto yy1398; + goto yy1396; + yy1402: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1396; if (yych <= 0x9F) - goto yy1389; - goto yy1390; - yy1397: + goto yy1395; + goto yy1396; + yy1403: yych = *++p; if (yych == 'L') - goto yy1398; + goto yy1404; if (yych != 'l') - goto yy1390; - yy1398: + goto yy1396; + yy1404: yych = *++p; if (yych == 'E') - goto yy1399; + goto yy1405; if (yych != 'e') - goto yy1390; - yy1399: + goto yy1396; + yy1405: yych = *++p; if (yych != ':') - goto yy1390; - yy1400: + goto yy1396; + yy1406: ++p; - yy1401 : { return (bufsize_t)(p - start); } - yy1402: + yy1407 : { return (bufsize_t)(p - start); } + yy1408: yych = *++p; if (yych == 'S') - goto yy1403; + goto yy1409; if (yych != 's') - goto yy1390; - yy1403: + goto yy1396; + yy1409: yych = *++p; if (yych == 'C') - goto yy1404; + goto yy1410; if (yych != 'c') - goto yy1390; - yy1404: + goto yy1396; + yy1410: yych = *++p; if (yych == 'R') - goto yy1405; + goto yy1411; if (yych != 'r') - goto yy1390; - yy1405: + goto yy1396; + yy1411: yych = *++p; if (yych == 'I') - goto yy1406; + goto yy1412; if (yych != 'i') - goto yy1390; - yy1406: + goto yy1396; + yy1412: yych = *++p; if (yych == 'P') - goto yy1407; + goto yy1413; if (yych != 'p') - goto yy1390; - yy1407: + goto yy1396; + yy1413: yych = *++p; if (yych == 'T') - goto yy1408; + goto yy1414; if (yych != 't') - goto yy1390; - yy1408: + goto yy1396; + yy1414: yych = *++p; if (yych == ':') - goto yy1400; - goto yy1390; - yy1409: + goto yy1406; + goto yy1396; + yy1415: yych = *++p; if (yych == 'V') - goto yy1410; + goto yy1416; if (yych != 'v') - goto yy1390; - yy1410: + goto yy1396; + yy1416: yych = *++p; if (yych == 'A') - goto yy1411; + goto yy1417; if (yych != 'a') - goto yy1390; - yy1411: + goto yy1396; + yy1417: yych = *++p; if (yych == 'S') - goto yy1412; + goto yy1418; if (yych != 's') - goto yy1390; - yy1412: + goto yy1396; + yy1418: yych = *++p; if (yych == 'C') - goto yy1413; + goto yy1419; if (yych != 'c') - goto yy1390; - yy1413: + goto yy1396; + yy1419: yych = *++p; if (yych == 'R') - goto yy1414; + goto yy1420; if (yych != 'r') - goto yy1390; - yy1414: + goto yy1396; + yy1420: yych = *++p; if (yych == 'I') - goto yy1415; + goto yy1421; if (yych != 'i') - goto yy1390; - yy1415: + goto yy1396; + yy1421: yych = *++p; if (yych == 'P') - goto yy1416; + goto yy1422; if (yych != 'p') - goto yy1390; - yy1416: + goto yy1396; + yy1422: yych = *++p; if (yych == 'T') - goto yy1417; + goto yy1423; if (yych != 't') - goto yy1390; - yy1417: + goto yy1396; + yy1423: yych = *++p; if (yych == ':') - goto yy1400; - goto yy1390; - yy1418: + goto yy1406; + goto yy1396; + yy1424: yych = *++p; if (yych == 'T') - goto yy1419; + goto yy1425; if (yych != 't') - goto yy1390; - yy1419: + goto yy1396; + yy1425: yych = *++p; if (yych == 'A') - goto yy1420; + goto yy1426; if (yych != 'a') - goto yy1390; - yy1420: + goto yy1396; + yy1426: yych = *++p; if (yych != ':') - goto yy1390; + goto yy1396; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1422; + goto yy1428; if (yych != 'i') - goto yy1401; - yy1422: + goto yy1407; + yy1428: yych = *++p; if (yych == 'M') - goto yy1423; + goto yy1429; if (yych != 'm') - goto yy1390; - yy1423: + goto yy1396; + yy1429: yych = *++p; if (yych == 'A') - goto yy1424; + goto yy1430; if (yych != 'a') - goto yy1390; - yy1424: + goto yy1396; + yy1430: yych = *++p; if (yych == 'G') - goto yy1425; + goto yy1431; if (yych != 'g') - goto yy1390; - yy1425: + goto yy1396; + yy1431: yych = *++p; if (yych == 'E') - goto yy1426; + goto yy1432; if (yych != 'e') - goto yy1390; - yy1426: + goto yy1396; + yy1432: yych = *++p; if (yych != '/') - goto yy1390; + goto yy1396; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1429; + goto yy1435; if (yych <= 'I') - goto yy1390; - goto yy1430; + goto yy1396; + goto yy1436; } else { if (yych == 'P') - goto yy1428; + goto yy1434; if (yych <= 'V') - goto yy1390; - goto yy1431; + goto yy1396; + goto yy1437; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1429; + goto yy1435; if (yych <= 'i') - goto yy1390; - goto yy1430; + goto yy1396; + goto yy1436; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1390; + goto yy1396; } else { if (yych == 'w') - goto yy1431; - goto yy1390; + goto yy1437; + goto yy1396; } } } - yy1428: + yy1434: yych = *++p; if (yych == 'N') - goto yy1439; + goto yy1445; if (yych == 'n') - goto yy1439; - goto yy1390; - yy1429: + goto yy1445; + goto yy1396; + yy1435: yych = *++p; if (yych == 'I') - goto yy1438; + goto yy1444; if (yych == 'i') - goto yy1438; - goto yy1390; - yy1430: + goto yy1444; + goto yy1396; + yy1436: yych = *++p; if (yych == 'P') - goto yy1436; + goto yy1442; if (yych == 'p') - goto yy1436; - goto yy1390; - yy1431: + goto yy1442; + goto yy1396; + yy1437: yych = *++p; if (yych == 'E') - goto yy1432; + goto yy1438; if (yych != 'e') - goto yy1390; - yy1432: + goto yy1396; + yy1438: yych = *++p; if (yych == 'B') - goto yy1433; + goto yy1439; if (yych != 'b') - goto yy1390; - yy1433: + goto yy1396; + yy1439: yych = *++p; if (yych == 'P') - goto yy1434; + goto yy1440; if (yych != 'p') - goto yy1390; - yy1434: + goto yy1396; + yy1440: ++p; { return 0; } - yy1436: + yy1442: yych = *++p; if (yych == 'E') - goto yy1437; + goto yy1443; if (yych != 'e') - goto yy1390; - yy1437: + goto yy1396; + yy1443: yych = *++p; if (yych == 'G') - goto yy1434; + goto yy1440; if (yych == 'g') - goto yy1434; - goto yy1390; - yy1438: + goto yy1440; + goto yy1396; + yy1444: yych = *++p; if (yych == 'F') - goto yy1434; + goto yy1440; if (yych == 'f') - goto yy1434; - goto yy1390; - yy1439: + goto yy1440; + goto yy1396; + yy1445: ++p; if ((yych = *p) == 'G') - goto yy1434; + goto yy1440; if (yych == 'g') - goto yy1434; - goto yy1390; + goto yy1440; + goto yy1396; } } -- cgit 0.0.5-2-1-g0f52 From 8d599b758b102dae686d5122146e379cb4a204b8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 13:57:48 -0800 Subject: Fixed typo in re2c version number. See #102. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b326a7223a..97055848b1 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] (>= 1.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. -- cgit 0.0.5-2-1-g0f52 From 22fa64426a24df5b906bf39e718acf1d64e5d8cf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 14:50:55 -0800 Subject: Updated spec. --- test/spec.txt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 956db3ef42..0309eaa9ed 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -316,13 +316,25 @@ by spaces with a tab stop of 4 characters. ```````````````````````````````` ```````````````````````````````` example ->→foo→bar +>→→foo .
                            -

                            foo→bar

                            +
                              foo
                            +
                            ```````````````````````````````` +```````````````````````````````` example +-→→foo +. +
                              +
                            • +
                                foo
                              +
                              +
                            • +
                            +```````````````````````````````` + ```````````````````````````````` example foo -- cgit 0.0.5-2-1-g0f52 From 455e59fa39fb3cd18a1f01b31eea5ead26fbf7c4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 14:52:12 -0800 Subject: Clarify logic in S_advance_offset. --- src/blocks.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 20ea579924..ff102c9d83 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -17,6 +17,10 @@ #define CODE_INDENT 4 #define TAB_STOP 4 +#ifndef MIN +#define MIN(x, y) ((x < y) ? x : y) +#endif + #define peek_at(i, n) (i)->data[n] static inline bool S_is_line_end_char(char c) { @@ -587,11 +591,18 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, while (count > 0 && (c = peek_at(input, parser->offset))) { if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - parser->partially_consumed_tab = columns && chars_to_tab > count; - chars_to_advance = parser->partially_consumed_tab ? count : chars_to_tab; - parser->column += chars_to_advance; - parser->offset += parser->partially_consumed_tab ? 0 : 1; - count -= (columns ? chars_to_advance : 1); + if (columns) { + parser->partially_consumed_tab = chars_to_tab > count; + chars_to_advance = MIN(count, chars_to_tab); + parser->column += chars_to_advance; + parser->offset += (parser->partially_consumed_tab ? 0 : 1); + count -= chars_to_advance; + } else { + parser->partially_consumed_tab = false; + parser->column += chars_to_tab; + parser->offset += 1; + count -= 1; + } } else { parser->partially_consumed_tab = false; parser->offset += 1; -- cgit 0.0.5-2-1-g0f52 From 3d1229c9acb350a394a945561546eb448b19c7aa Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 15:14:04 -0800 Subject: Properly handle tabs with blockquotes and fenced blocks. --- src/blocks.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index ff102c9d83..1f4a008188 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -540,6 +540,7 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, static void chop_trailing_hashtags(cmark_chunk *ch) { bufsize_t n, orig_n; + char c; cmark_chunk_rtrim(ch); orig_n = n = ch->len - 1; @@ -549,8 +550,8 @@ static void chop_trailing_hashtags(cmark_chunk *ch) { n--; // Check for a space before the final #s: - if (n != orig_n && n >= 0 && - (peek_at(ch, n) == ' ' || peek_at(ch, n) == '\t')) { + if (n != orig_n && n >= 0 && (c = peek_at(ch, n)) && + (c == ' ' || c == '\t')) { ch->len = n; cmark_chunk_rtrim(ch); } @@ -624,6 +625,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, bool indented; cmark_chunk input; bool maybe_lazy; + char c; if (parser->options & CMARK_OPT_VALIDATE_UTF8) { cmark_utf8proc_check(parser->curline, buffer, bytes); @@ -659,8 +661,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; if (matched) { S_advance_offset(parser, &input, parser->indent + 1, true); - if (peek_at(&input, parser->offset) == ' ') - parser->offset++; + c = peek_at(&input, parser->offset); + if (c == ' ' || c == '\t') { + S_advance_offset(parser, &input, 1, true); + } } else { all_matched = false; } @@ -708,8 +712,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else { // skip opt. spaces of fence parser->offset i = container->as.code.fence_offset; - while (i > 0 && peek_at(&input, parser->offset) == ' ') { - S_advance_offset(parser, &input, 1, false); + while (i > 0 && (c = peek_at(&input, parser->offset)) && (c == ' ' || c == '\t')) { + S_advance_offset(parser, &input, 1, true); i--; } } @@ -774,8 +778,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, S_advance_offset(parser, &input, parser->first_nonspace + 1 - parser->offset, false); // optional following character - if (peek_at(&input, parser->offset) == ' ') - S_advance_offset(parser, &input, 1, false); + c = peek_at(&input, parser->offset); + if (c == ' ' || c == '\t') { + S_advance_offset(parser, &input, 1, true); + } container = add_child(parser, container, CMARK_NODE_BLOCK_QUOTE, parser->offset + 1); @@ -856,7 +862,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->first_nonspace + matched - parser->offset, false); i = 0; - while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') { + // TODO handle tabs + while (i <= 5 && (c = peek_at(&input, parser->offset + i)) && c == ' ') { i++; } // i = number of spaces after marker, up to 5 -- cgit 0.0.5-2-1-g0f52 From f1fd94d205f05675f31e8a60562e1bb09fddcac7 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Sun, 7 Feb 2016 04:14:11 +0100 Subject: blocks: Factorize S_processLines It's the core of the program and I had too much trouble making sense of it, two loops with many cases and other code interspersed hurt my head. All the tests still passed before rebasing, now I've got the exact same set of issues as master. --- src/blocks.c | 507 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 285 insertions(+), 222 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 1f4a008188..936ba6a478 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -613,269 +613,300 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, } } -static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes) { - cmark_node *last_matched_container; - bufsize_t matched = 0; - int lev = 0; - int i; - cmark_list *data = NULL; - bool all_matched = true; - cmark_node *container; - bool indented; - cmark_chunk input; - bool maybe_lazy; - char c; +static bool S_last_child_is_open(cmark_node *container) { + return container->last_child && container->last_child->open; +} - if (parser->options & CMARK_OPT_VALIDATE_UTF8) { - cmark_utf8proc_check(parser->curline, buffer, bytes); - } else { - cmark_strbuf_put(parser->curline, buffer, bytes); - } - // ensure line ends with a newline: - if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) { - cmark_strbuf_putc(parser->curline, '\n'); - } - parser->offset = 0; - parser->column = 0; - parser->blank = false; +static bool S_parse_block_quote(cmark_parser *parser, + cmark_chunk *input) +{ + bool res = false; + bufsize_t matched = 0; - input.data = parser->curline->ptr; - input.len = parser->curline->size; + matched = + parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; + if (matched) { + char c; - // container starts at the document root. - container = parser->root; + S_advance_offset(parser, input, parser->indent + 1, true); + c = peek_at(input, parser->offset); - parser->line_number++; + if (c == ' ' || c == '\t') + S_advance_offset(parser, input, 1, true); + + res = true; + } + return res; +} - // for each containing node, try to parse the associated line start. - // bail out on failure: container will point to the last matching node. +static bool S_parse_node_item(cmark_parser *parser, + cmark_chunk *input, + cmark_node *container) +{ + bool res = false; + + if (parser->indent >= + container->as.list.marker_offset + container->as.list.padding) { + S_advance_offset(parser, input, container->as.list.marker_offset + + container->as.list.padding, + true); + res = true; + } else if (parser->blank && container->first_child != NULL) { + // if container->first_child is NULL, then the opening line + // of the list item was blank after the list marker; in this + // case, we are done with the list item. + S_advance_offset(parser, input, + parser->first_nonspace - parser->offset, false); + res = true; + } + return res; +} - while (container->last_child && container->last_child->open) { - container = container->last_child; +static bool S_parse_code_block(cmark_parser *parser, + cmark_chunk *input, + cmark_node *container, + bool *should_continue) +{ + bool res = false; + + if (!container->as.code.fenced) { // indented + if (parser->indent >= CODE_INDENT) { + S_advance_offset(parser, input, CODE_INDENT, true); + res = true; + } else if (parser->blank) { + S_advance_offset(parser, input, + parser->first_nonspace - parser->offset, false); + res = true; + } + } else { // fenced + bufsize_t matched = 0; - S_find_first_nonspace(parser, &input); + if (parser->indent <= 3 && (peek_at(input, parser->first_nonspace) == + container->as.code.fence_char)) { + matched = scan_close_code_fence(input, parser->first_nonspace); + } - if (container->type == CMARK_NODE_BLOCK_QUOTE) { - matched = - parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>'; - if (matched) { - S_advance_offset(parser, &input, parser->indent + 1, true); - c = peek_at(&input, parser->offset); - if (c == ' ' || c == '\t') { - S_advance_offset(parser, &input, 1, true); - } - } else { - all_matched = false; - } + if (matched >= container->as.code.fence_length) { + // closing fence - and since we're at + // the end of a line, we can stop processing it: + *should_continue = false; + S_advance_offset(parser, input, matched, false); + parser->current = finalize(parser, container); + } else { + // skip opt. spaces of fence parser->offset + char c; + int i = container->as.code.fence_offset; - } else if (container->type == CMARK_NODE_ITEM) { - if (parser->indent >= - container->as.list.marker_offset + container->as.list.padding) { - S_advance_offset(parser, &input, container->as.list.marker_offset + - container->as.list.padding, - true); - } else if (parser->blank && container->first_child != NULL) { - // if container->first_child is NULL, then the opening line - // of the list item was blank after the list marker; in this - // case, we are done with the list item. - S_advance_offset(parser, &input, - parser->first_nonspace - parser->offset, false); - } else { - all_matched = false; + while (i > 0 && (c = peek_at(input, parser->offset)) && (c == ' ' || c == '\t')) { + S_advance_offset(parser, input, 1, true); + i--; } + res = true; + } + } - } else if (container->type == CMARK_NODE_CODE_BLOCK) { - - if (!container->as.code.fenced) { // indented - if (parser->indent >= CODE_INDENT) { - S_advance_offset(parser, &input, CODE_INDENT, true); - } else if (parser->blank) { - S_advance_offset(parser, &input, - parser->first_nonspace - parser->offset, false); - } else { - all_matched = false; - } - } else { // fenced - matched = 0; - if (parser->indent <= 3 && (peek_at(&input, parser->first_nonspace) == - container->as.code.fence_char)) { - matched = scan_close_code_fence(&input, parser->first_nonspace); - } - if (matched >= container->as.code.fence_length) { - // closing fence - and since we're at - // the end of a line, we can return: - all_matched = false; - S_advance_offset(parser, &input, matched, false); - parser->current = finalize(parser, container); - goto finished; - } else { - // skip opt. spaces of fence parser->offset - i = container->as.code.fence_offset; - while (i > 0 && (c = peek_at(&input, parser->offset)) && (c == ' ' || c == '\t')) { - S_advance_offset(parser, &input, 1, true); - i--; - } - } - } - } else if (container->type == CMARK_NODE_HEADING) { + return res; +} - // a heading can never contain more than one line - all_matched = false; +static bool S_parse_html_block(cmark_parser *parser, + cmark_node *container) +{ + bool res = false; + + switch (container->as.html_block_type) { + case 1: + case 2: + case 3: + case 4: + case 5: + // these types of blocks can accept blanks + res = true; + break; + case 6: + case 7: + res = !parser->blank; + break; + default: + fprintf(stderr, "Error (%s:%d): Unknown HTML block type %d\n", __FILE__, + __LINE__, container->as.html_block_type); + /* FIXME that's really not something a library should do .. */ + exit(1); + } - } else if (container->type == CMARK_NODE_HTML_BLOCK) { + return res; +} - switch (container->as.html_block_type) { - case 1: - case 2: - case 3: - case 4: - case 5: - // these types of blocks can accept blanks +// for each containing node, tries to parse the associated line start. +// bails out on failure: container will point to the last matching node. +static bool S_try_parse_line_start(cmark_parser *parser, + cmark_chunk *input, + cmark_node **container, + bool *all_matched) +{ + bool should_continue = true; + *all_matched = false; + cmark_node_type cont_type; + + while (S_last_child_is_open(*container)) { + *container = (*container)->last_child; + cont_type = (*container)->type; + + S_find_first_nonspace(parser, input); + + switch (cont_type) { + case CMARK_NODE_BLOCK_QUOTE: + if (!S_parse_block_quote(parser, input)) + goto done; break; - case 6: - case 7: - if (parser->blank) { - all_matched = false; - } + case CMARK_NODE_ITEM: + if (!S_parse_node_item(parser, input, *container)) + goto done; + break; + case CMARK_NODE_CODE_BLOCK: + if (!S_parse_code_block(parser, input, *container, &should_continue)) + goto done; + break; + case CMARK_NODE_HEADING: + // a heading can never contain more than one line + goto done; + case CMARK_NODE_HTML_BLOCK: + if (!S_parse_html_block(parser, *container)) + goto done; + break; + case CMARK_NODE_PARAGRAPH: + if (parser->blank) + goto done; break; default: - fprintf(stderr, "Error (%s:%d): Unknown HTML block type %d\n", __FILE__, - __LINE__, container->as.html_block_type); - exit(1); - } - - } else if (container->type == CMARK_NODE_PARAGRAPH) { - - if (parser->blank) { - all_matched = false; - } - } - - if (!all_matched) { - container = container->parent; // back up to last matching node - break; + break; } } - last_matched_container = container; + *all_matched = true; - // check to see if we've hit 2nd blank line, break out of list: - if (parser->blank && container->last_line_blank) { - break_out_of_lists(parser, &container); +done: + if (!*all_matched) { + *container = (*container)->parent; // back up to last matching node } + return should_continue; +} + +static void try_new_container_starts(cmark_parser *parser, + cmark_node **container, + cmark_chunk *input, + bool all_matched) +{ + bool indented; + cmark_list *data = NULL; + bool maybe_lazy = parser->current->type == CMARK_NODE_PARAGRAPH; + cmark_node_type cont_type = (*container)->type; + bufsize_t matched = 0; + int lev = 0; + char c; - maybe_lazy = parser->current->type == CMARK_NODE_PARAGRAPH; - // try new container starts: - while (container->type != CMARK_NODE_CODE_BLOCK && - container->type != CMARK_NODE_HTML_BLOCK) { + while (cont_type != CMARK_NODE_CODE_BLOCK && + cont_type != CMARK_NODE_HTML_BLOCK) { - S_find_first_nonspace(parser, &input); + S_find_first_nonspace(parser, input); indented = parser->indent >= CODE_INDENT; - if (!indented && peek_at(&input, parser->first_nonspace) == '>') { + if (!indented && peek_at(input, parser->first_nonspace) == '>') { - S_advance_offset(parser, &input, + S_advance_offset(parser, input, parser->first_nonspace + 1 - parser->offset, false); // optional following character - c = peek_at(&input, parser->offset); + c = peek_at(input, parser->offset); if (c == ' ' || c == '\t') { - S_advance_offset(parser, &input, 1, true); + S_advance_offset(parser, input, 1, true); } - container = add_child(parser, container, CMARK_NODE_BLOCK_QUOTE, + *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, parser->offset + 1); } else if (!indented && (matched = scan_atx_heading_start( - &input, parser->first_nonspace))) { + input, parser->first_nonspace))) { + bufsize_t hashpos; + int level = 0; - S_advance_offset(parser, &input, + S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); - container = - add_child(parser, container, CMARK_NODE_HEADING, parser->offset + 1); + *container = + add_child(parser, *container, CMARK_NODE_HEADING, parser->offset + 1); - bufsize_t hashpos = - cmark_chunk_strchr(&input, '#', parser->first_nonspace); - int level = 0; + hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); - while (peek_at(&input, hashpos) == '#') { + while (peek_at(input, hashpos) == '#') { level++; hashpos++; } - container->as.heading.level = level; - container->as.heading.setext = false; - } else if (!indented && (matched = scan_open_code_fence( - &input, parser->first_nonspace))) { + (*container)->as.heading.level = level; + (*container)->as.heading.setext = false; - container = add_child(parser, container, CMARK_NODE_CODE_BLOCK, + } else if (!indented && (matched = scan_open_code_fence( + input, parser->first_nonspace))) { + *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, parser->first_nonspace + 1); - container->as.code.fenced = true; - container->as.code.fence_char = peek_at(&input, parser->first_nonspace); - container->as.code.fence_length = matched; - container->as.code.fence_offset = + (*container)->as.code.fenced = true; + (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace); + (*container)->as.code.fence_length = matched; + (*container)->as.code.fence_offset = (int8_t)(parser->first_nonspace - parser->offset); - container->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, &input, + (*container)->as.code.info = cmark_chunk_literal(""); + S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); } else if (!indented && ((matched = scan_html_block_start( - &input, parser->first_nonspace)) || - (container->type != CMARK_NODE_PARAGRAPH && + input, parser->first_nonspace)) || + (cont_type != CMARK_NODE_PARAGRAPH && (matched = scan_html_block_start_7( - &input, parser->first_nonspace))))) { - - container = add_child(parser, container, CMARK_NODE_HTML_BLOCK, + input, parser->first_nonspace))))) { + *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK, parser->first_nonspace + 1); - container->as.html_block_type = matched; + (*container)->as.html_block_type = matched; // note, we don't adjust parser->offset because the tag is part of the // text - - } else if (!indented && container->type == CMARK_NODE_PARAGRAPH && + } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH && (lev = - scan_setext_heading_line(&input, parser->first_nonspace))) { - - container->type = CMARK_NODE_HEADING; - container->as.heading.level = lev; - container->as.heading.setext = true; - S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); - + scan_setext_heading_line(input, parser->first_nonspace))) { + (*container)->type = CMARK_NODE_HEADING; + (*container)->as.heading.level = lev; + (*container)->as.heading.setext = true; + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if (!indented && - !(container->type == CMARK_NODE_PARAGRAPH && !all_matched) && + !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && (matched = - scan_thematic_break(&input, parser->first_nonspace))) { - + scan_thematic_break(input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext heading: - container = add_child(parser, container, CMARK_NODE_THEMATIC_BREAK, + *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, parser->first_nonspace + 1); - S_advance_offset(parser, &input, input.len - 1 - parser->offset, false); - + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if ((matched = - parse_list_marker(&input, parser->first_nonspace, &data)) && - (!indented || container->type == CMARK_NODE_LIST)) { + parse_list_marker(input, parser->first_nonspace, &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; // compute padding: - S_advance_offset(parser, &input, + S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); - i = 0; + // TODO handle tabs - while (i <= 5 && (c = peek_at(&input, parser->offset + i)) && c == ' ') { + while (i <= 5 && (c = peek_at(input, parser->offset + i)) && c == ' ') i++; - } + // i = number of spaces after marker, up to 5 if (i >= 5 || i < 1 || - S_is_line_end_char(peek_at(&input, parser->offset))) { + S_is_line_end_char(peek_at(input, parser->offset))) { data->padding = matched + 1; - if (i > 0) { - S_advance_offset(parser, &input, 1, false); - } + if (i > 0) + S_advance_offset(parser, input, 1, false); } else { data->padding = matched + i; - S_advance_offset(parser, &input, i, true); + S_advance_offset(parser, input, i, true); } // check container; if it's a list, see if this list item @@ -883,50 +914,92 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, data->marker_offset = parser->indent; - if (container->type != CMARK_NODE_LIST || - !lists_match(&container->as.list, data)) { - container = add_child(parser, container, CMARK_NODE_LIST, + if (cont_type != CMARK_NODE_LIST || + !lists_match(&((*container)->as.list), data)) { + *container = add_child(parser, *container, CMARK_NODE_LIST, parser->first_nonspace + 1); - memcpy(&container->as.list, data, sizeof(*data)); + memcpy(&((*container)->as.list), data, sizeof(*data)); } // add the list item - container = add_child(parser, container, CMARK_NODE_ITEM, + *container = add_child(parser, *container, CMARK_NODE_ITEM, parser->first_nonspace + 1); /* TODO: static */ - memcpy(&container->as.list, data, sizeof(*data)); + memcpy(&((*container)->as.list), data, sizeof(*data)); free(data); - } else if (indented && !maybe_lazy && !parser->blank) { - S_advance_offset(parser, &input, CODE_INDENT, true); - container = add_child(parser, container, CMARK_NODE_CODE_BLOCK, + S_advance_offset(parser, input, CODE_INDENT, true); + *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, parser->offset + 1); - container->as.code.fenced = false; - container->as.code.fence_char = 0; - container->as.code.fence_length = 0; - container->as.code.fence_offset = 0; - container->as.code.info = cmark_chunk_literal(""); + (*container)->as.code.fenced = false; + (*container)->as.code.fence_char = 0; + (*container)->as.code.fence_length = 0; + (*container)->as.code.fence_offset = 0; + (*container)->as.code.info = cmark_chunk_literal(""); } else { break; } - if (accepts_lines(container->type)) { + if (accepts_lines((*container)->type)) { // if it's a line container, it can't contain other containers break; } + + cont_type = (*container)->type; maybe_lazy = false; } +} + +static void S_process_line(cmark_parser *parser, const unsigned char *buffer, + bufsize_t bytes) { + cmark_node *last_matched_container; + bool all_matched = true; + cmark_node *container, *tmp; + cmark_chunk input; + + if (parser->options & CMARK_OPT_VALIDATE_UTF8) { + cmark_utf8proc_check(parser->curline, buffer, bytes); + } else { + cmark_strbuf_put(parser->curline, buffer, bytes); + } + + // ensure line ends with a newline: + if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) { + cmark_strbuf_putc(parser->curline, '\n'); + } + + parser->offset = 0; + parser->column = 0; + parser->blank = false; + + input.data = parser->curline->ptr; + input.len = parser->curline->size; + + // container starts at the document root. + container = parser->root; + + parser->line_number++; + + if (!S_try_parse_line_start(parser, &input, &container, &all_matched)) + goto finished; + + last_matched_container = container; + + // check to see if we've hit 2nd blank line, break out of list: + if (parser->blank && container->last_line_blank) + break_out_of_lists(parser, &container); + + try_new_container_starts(parser, &container, &input, all_matched); // what remains at parser->offset is a text line. add the text to the // appropriate container. S_find_first_nonspace(parser, &input); - if (parser->blank && container->last_child) { + if (parser->blank && container->last_child) container->last_child->last_line_blank = true; - } // block quote lines are never blank as they start with > // and we don't count blanks in fenced code for purposes of tight/loose @@ -941,21 +1014,18 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, !(container->type == CMARK_NODE_ITEM && container->first_child == NULL && container->start_line == parser->line_number)); - cmark_node *cont = container; - while (cont->parent) { - cont->parent->last_line_blank = false; - cont = cont->parent; + tmp = container; + while (tmp->parent) { + tmp->parent->last_line_blank = false; + tmp = tmp->parent; } if (parser->current != last_matched_container && container == last_matched_container && !parser->blank && parser->current->type == CMARK_NODE_PARAGRAPH && cmark_strbuf_len(&parser->current->string_content) > 0) { - add_line(parser->current, &input, parser); - } else { // not a lazy continuation - // finalize any blocks that were not matched and set cur to container: while (parser->current != last_matched_container) { parser->current = finalize(parser, parser->current); @@ -963,11 +1033,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } if (container->type == CMARK_NODE_CODE_BLOCK) { - add_line(container, &input, parser); - } else if (container->type == CMARK_NODE_HTML_BLOCK) { - add_line(container, &input, parser); int matches_end_condition; @@ -1006,20 +1073,15 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container = finalize(parser, container); assert(parser->current != NULL); } - } else if (parser->blank) { - // ??? do nothing - } else if (accepts_lines(container->type)) { - if (container->type == CMARK_NODE_HEADING && container->as.heading.setext == false) { chop_trailing_hashtags(&input); } S_advance_offset(parser, &input, parser->first_nonspace - parser->offset, false); add_line(container, &input, parser); - } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, @@ -1030,6 +1092,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->current = container; } + finished: parser->last_line_length = input.len; if (parser->last_line_length && -- cgit 0.0.5-2-1-g0f52 From f97750517aa62066c1feab178262b32e370f22ce Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 22:05:27 -0800 Subject: Fixed handling of tabs in lists. --- src/blocks.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 1f4a008188..acb9ab4363 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -626,6 +626,9 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, cmark_chunk input; bool maybe_lazy; char c; + bool save_partially_consumed_tab; + int save_offset; + int save_column; if (parser->options & CMARK_OPT_VALIDATE_UTF8) { cmark_utf8proc_check(parser->curline, buffer, bytes); @@ -861,21 +864,28 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false); - i = 0; - // TODO handle tabs - while (i <= 5 && (c = peek_at(&input, parser->offset + i)) && c == ' ') { - i++; + + save_partially_consumed_tab = parser->partially_consumed_tab; + save_offset = parser->offset; + save_column = parser->column; + + while (parser->column - save_column <= 5 && + (c = peek_at(&input, parser->offset)) && + (c == ' ' || c == '\t')) { + S_advance_offset(parser, &input, 1, true); } - // i = number of spaces after marker, up to 5 - if (i >= 5 || i < 1 || - S_is_line_end_char(peek_at(&input, parser->offset))) { + + i = parser->column - save_column; + if (i >= 5 || i < 1) { data->padding = matched + 1; + parser->offset = save_offset; + parser->column = save_column; + parser->partially_consumed_tab = save_partially_consumed_tab; if (i > 0) { - S_advance_offset(parser, &input, 1, false); + S_advance_offset(parser, &input, 1, true); } } else { data->padding = matched + i; - S_advance_offset(parser, &input, i, true); } // check container; if it's a list, see if this list item -- cgit 0.0.5-2-1-g0f52 From 559dd197da0799b17280391fac9dcf427f281758 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 22:22:21 -0800 Subject: Use an assertion to check for in-range html_block_type. It's a programming error if the type is out of range. --- src/blocks.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 5554a176d7..d75bb67109 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -712,8 +712,10 @@ static bool S_parse_html_block(cmark_parser *parser, cmark_node *container) { bool res = false; + int html_block_type = container->as.html_block_type; - switch (container->as.html_block_type) { + assert(html_block_type >= 1 && html_block_type <= 7); + switch (html_block_type) { case 1: case 2: case 3: @@ -726,11 +728,6 @@ static bool S_parse_html_block(cmark_parser *parser, case 7: res = !parser->blank; break; - default: - fprintf(stderr, "Error (%s:%d): Unknown HTML block type %d\n", __FILE__, - __LINE__, container->as.html_block_type); - /* FIXME that's really not something a library should do .. */ - exit(1); } return res; -- cgit 0.0.5-2-1-g0f52 From 05e613a533cf11b9e29d47db7be6c5bc6d273bdc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Feb 2016 23:47:54 -0800 Subject: Code cleanup: add function to test for space or tab. --- src/blocks.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index d75bb67109..38f8319ef7 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -27,6 +27,10 @@ static inline bool S_is_line_end_char(char c) { return (c == '\n' || c == '\r'); } +static inline bool S_is_space_or_tab(char c) { + return (c == ' ' || c == '\t'); +} + static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, bool eof); @@ -540,7 +544,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, static void chop_trailing_hashtags(cmark_chunk *ch) { bufsize_t n, orig_n; - char c; cmark_chunk_rtrim(ch); orig_n = n = ch->len - 1; @@ -550,8 +553,7 @@ static void chop_trailing_hashtags(cmark_chunk *ch) { n--; // Check for a space before the final #s: - if (n != orig_n && n >= 0 && (c = peek_at(ch, n)) && - (c == ' ' || c == '\t')) { + if (n != orig_n && n >= 0 && S_is_space_or_tab(peek_at(ch, n))) { ch->len = n; cmark_chunk_rtrim(ch); } @@ -626,13 +628,12 @@ static bool S_parse_block_quote(cmark_parser *parser, matched = parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; if (matched) { - char c; S_advance_offset(parser, input, parser->indent + 1, true); - c = peek_at(input, parser->offset); - if (c == ' ' || c == '\t') + if (S_is_space_or_tab(peek_at(input, parser->offset))) { S_advance_offset(parser, input, 1, true); + } res = true; } @@ -694,10 +695,9 @@ static bool S_parse_code_block(cmark_parser *parser, parser->current = finalize(parser, container); } else { // skip opt. spaces of fence parser->offset - char c; int i = container->as.code.fence_offset; - while (i > 0 && (c = peek_at(input, parser->offset)) && (c == ' ' || c == '\t')) { + while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) { S_advance_offset(parser, input, 1, true); i--; } @@ -799,7 +799,6 @@ static void try_new_container_starts(cmark_parser *parser, cmark_node_type cont_type = (*container)->type; bufsize_t matched = 0; int lev = 0; - char c; bool save_partially_consumed_tab; int save_offset; int save_column; @@ -815,8 +814,7 @@ static void try_new_container_starts(cmark_parser *parser, S_advance_offset(parser, input, parser->first_nonspace + 1 - parser->offset, false); // optional following character - c = peek_at(input, parser->offset); - if (c == ' ' || c == '\t') { + if (S_is_space_or_tab(peek_at(input, parser->offset))) { S_advance_offset(parser, input, 1, true); } *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, @@ -899,8 +897,7 @@ static void try_new_container_starts(cmark_parser *parser, save_column = parser->column; while (parser->column - save_column <= 5 && - (c = peek_at(input, parser->offset)) && - (c == ' ' || c == '\t')) { + S_is_space_or_tab(peek_at(input, parser->offset))) { S_advance_offset(parser, input, 1, true); } -- cgit 0.0.5-2-1-g0f52 From 6e76c5095de575f9feee3976dc86181042673234 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 9 Feb 2016 22:57:48 -0800 Subject: Added code comment. --- src/blocks.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/blocks.c b/src/blocks.c index 38f8319ef7..9130925047 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -559,6 +559,9 @@ static void chop_trailing_hashtags(cmark_chunk *ch) { } } +// Find first nonspace character from current offset, setting +// parser->first_nonspace, parser->first_nonspace_column, +// parser->indent, and parser->blank. Does not advance parser->offset. static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { char c; int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); -- cgit 0.0.5-2-1-g0f52 From 3f88d95c83ba9443ce9df50561d39c037e60b617 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 9 Feb 2016 23:08:52 -0800 Subject: Added code comments. --- src/blocks.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 9130925047..152dd217db 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -589,6 +589,15 @@ static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); } +// Advance parser->offset and parser->column. parser->offset is the +// byte position in input; parser->column is a virtual column number +// that takes into account tabs. (Multibyte characters are not taken +// into account, because the Markdown line prefixes we are interested in +// analyzing are entirely ASCII.) The count parameter indicates +// how far to advance the offset. If columns is true, then count +// indicates a number of columns; otherwise, a number of bytes. +// If advancing a certain number of columns partially consumes +// a tab character, parser->partially_consumed_tab is set to true. static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, bufsize_t count, bool columns) { char c; @@ -736,8 +745,8 @@ static bool S_parse_html_block(cmark_parser *parser, return res; } -// for each containing node, tries to parse the associated line start. -// bails out on failure: container will point to the last matching node. +// For each containing node, try to parse the associated line start. +// Bail out on failure: container will point to the last matching node. static bool S_try_parse_line_start(cmark_parser *parser, cmark_chunk *input, cmark_node **container, @@ -1028,13 +1037,19 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, tmp = tmp->parent; } + // If the last line processed belonged to a paragraph node, + // and we didn't match all of the line prefixes for the open containers, + // and we didn't start any new containers, + // and the line isn't blank, + // then treat this as a "lazy continuation line" and add it to + // the open paragraph. if (parser->current != last_matched_container && container == last_matched_container && !parser->blank && parser->current->type == CMARK_NODE_PARAGRAPH && cmark_strbuf_len(&parser->current->string_content) > 0) { add_line(parser->current, &input, parser); } else { // not a lazy continuation - // finalize any blocks that were not matched and set cur to container: + // Finalize any blocks that were not matched and set cur to container: while (parser->current != last_matched_container) { parser->current = finalize(parser, parser->current); assert(parser->current != NULL); -- cgit 0.0.5-2-1-g0f52 From 4d2d486333c358eb3adf3d0649163e319a3b8b69 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 9 Feb 2016 23:16:09 -0800 Subject: Simplified condition for lazy line. --- src/blocks.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 152dd217db..2630db48ce 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1043,10 +1043,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, // and the line isn't blank, // then treat this as a "lazy continuation line" and add it to // the open paragraph. - if (parser->current != last_matched_container && - container == last_matched_container && !parser->blank && - parser->current->type == CMARK_NODE_PARAGRAPH && - cmark_strbuf_len(&parser->current->string_content) > 0) { + if (parser->current->type == CMARK_NODE_PARAGRAPH && + parser->current != last_matched_container && + container == last_matched_container && + !parser->blank) { add_line(parser->current, &input, parser); } else { // not a lazy continuation // Finalize any blocks that were not matched and set cur to container: -- cgit 0.0.5-2-1-g0f52 From b73bcedabb2ca6f06b2e96c410a603416ce17029 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 9 Feb 2016 23:44:10 -0800 Subject: Factored out contains_inlines. --- src/blocks.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 2630db48ce..c4593bf6b6 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -133,6 +133,11 @@ static inline bool accepts_lines(cmark_node_type block_type) { block_type == CMARK_NODE_CODE_BLOCK); } +static inline bool contains_inlines(cmark_node_type block_type) { + return (block_type == CMARK_NODE_PARAGRAPH || + block_type == CMARK_NODE_HEADING); +} + static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { int chars_to_tab; int i; @@ -357,8 +362,7 @@ static void process_inlines(cmark_node *root, cmark_reference_map *refmap, while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); if (ev_type == CMARK_EVENT_ENTER) { - if (cur->type == CMARK_NODE_PARAGRAPH || - cur->type == CMARK_NODE_HEADING) { + if (contains_inlines(cur->type)) { cmark_parse_inlines(cur, refmap, options); } } -- cgit 0.0.5-2-1-g0f52 From f9565289ff6375218662c9f85b3239b38ee58e8d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Feb 2016 09:51:54 -0800 Subject: Revert "Simplified condition for lazy line." This reverts commit 4d2d486333c358eb3adf3d0649163e319a3b8b69. This commit caused a valgrind invalid read. ==29731== Invalid read of size 4 ==29731== at 0x40500E: S_process_line (blocks.c:1050) ==29731== by 0x403CF7: S_parser_feed (blocks.c:526) ==29731== by 0x403BC9: cmark_parser_feed (blocks.c:494) ==29731== by 0x433A95: main (main.c:168) ==29731== Address 0x51d5b60 is 64 bytes inside a block of size 128 free'd ==29731== at 0x4C27D4E: free (vg_replace_malloc.c:427) ==29731== by 0x4015F0: S_free_nodes (node.c:134) ==29731== by 0x401634: cmark_node_free (node.c:142) ==29731== by 0x4033B1: finalize (blocks.c:259) ==29731== by 0x40365E: add_child (blocks.c:337) ==29731== by 0x4046D8: try_new_container_starts (blocks.c:836) ==29731== by 0x404F12: S_process_line (blocks.c:1015) ==29731== by 0x403CF7: S_parser_feed (blocks.c:526) ==29731== by 0x403BC9: cmark_parser_feed (blocks.c:494) ==29731== by 0x433A95: main (main.c:168) --- src/blocks.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index c4593bf6b6..fdf1106dcb 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1047,10 +1047,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, // and the line isn't blank, // then treat this as a "lazy continuation line" and add it to // the open paragraph. - if (parser->current->type == CMARK_NODE_PARAGRAPH && - parser->current != last_matched_container && - container == last_matched_container && - !parser->blank) { + if (parser->current != last_matched_container && + container == last_matched_container && !parser->blank && + parser->current->type == CMARK_NODE_PARAGRAPH && + cmark_strbuf_len(&parser->current->string_content) > 0) { add_line(parser->current, &input, parser); } else { // not a lazy continuation // Finalize any blocks that were not matched and set cur to container: -- cgit 0.0.5-2-1-g0f52 From 01e5df4e38eb36000c28539097eeb620dd2aef67 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 10 Feb 2016 09:56:21 -0800 Subject: Removed unnecessary check for empty string_content. --- src/blocks.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index fdf1106dcb..14f33f8e85 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1048,9 +1048,9 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, // then treat this as a "lazy continuation line" and add it to // the open paragraph. if (parser->current != last_matched_container && - container == last_matched_container && !parser->blank && - parser->current->type == CMARK_NODE_PARAGRAPH && - cmark_strbuf_len(&parser->current->string_content) > 0) { + container == last_matched_container && + !parser->blank && + parser->current->type == CMARK_NODE_PARAGRAPH) { add_line(parser->current, &input, parser); } else { // not a lazy continuation // Finalize any blocks that were not matched and set cur to container: -- cgit 0.0.5-2-1-g0f52 From 26c9df05d8e6e6fca760945d26a40dc9b4121c41 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Thu, 11 Feb 2016 01:31:02 +0100 Subject: blocks: More documentation and refactoring --- src/blocks.c | 181 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 103 insertions(+), 78 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 14f33f8e85..925585db2c 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1,3 +1,10 @@ +/** + * Block parsing implementation. + * + * For a high-level overview of the block parsing process, + * see http://spec.commonmark.org/0.24/#phase-1-block-structure + */ + #include #include #include @@ -635,7 +642,7 @@ static bool S_last_child_is_open(cmark_node *container) { return container->last_child && container->last_child->open; } -static bool S_parse_block_quote(cmark_parser *parser, +static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { bool res = false; @@ -656,7 +663,7 @@ static bool S_parse_block_quote(cmark_parser *parser, return res; } -static bool S_parse_node_item(cmark_parser *parser, +static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, cmark_node *container) { @@ -679,7 +686,7 @@ static bool S_parse_node_item(cmark_parser *parser, return res; } -static bool S_parse_code_block(cmark_parser *parser, +static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, cmark_node *container, bool *should_continue) @@ -724,7 +731,7 @@ static bool S_parse_code_block(cmark_parser *parser, return res; } -static bool S_parse_html_block(cmark_parser *parser, +static bool parse_html_block_prefix(cmark_parser *parser, cmark_node *container) { bool res = false; @@ -749,41 +756,47 @@ static bool S_parse_html_block(cmark_parser *parser, return res; } -// For each containing node, try to parse the associated line start. -// Bail out on failure: container will point to the last matching node. -static bool S_try_parse_line_start(cmark_parser *parser, - cmark_chunk *input, - cmark_node **container, - bool *all_matched) +/** + * For each containing node, try to parse the associated line start. + * + * Will not close unmatched blocks, as we may have a lazy continuation + * line -> http://spec.commonmark.org/0.24/#lazy-continuation-line + * + * Returns: The last matching node, or NULL + */ +static cmark_node *check_open_blocks(cmark_parser *parser, + cmark_chunk *input, + bool *all_matched) { bool should_continue = true; *all_matched = false; + cmark_node *container = parser->root; cmark_node_type cont_type; - while (S_last_child_is_open(*container)) { - *container = (*container)->last_child; - cont_type = (*container)->type; + while (S_last_child_is_open(container)) { + container = container->last_child; + cont_type = container->type; S_find_first_nonspace(parser, input); switch (cont_type) { case CMARK_NODE_BLOCK_QUOTE: - if (!S_parse_block_quote(parser, input)) + if (!parse_block_quote_prefix(parser, input)) goto done; break; case CMARK_NODE_ITEM: - if (!S_parse_node_item(parser, input, *container)) + if (!parse_node_item_prefix(parser, input, container)) goto done; break; case CMARK_NODE_CODE_BLOCK: - if (!S_parse_code_block(parser, input, *container, &should_continue)) + if (!parse_code_block_prefix(parser, input, container, &should_continue)) goto done; break; case CMARK_NODE_HEADING: // a heading can never contain more than one line goto done; case CMARK_NODE_HTML_BLOCK: - if (!S_parse_html_block(parser, *container)) + if (!parse_html_block_prefix(parser, container)) goto done; break; case CMARK_NODE_PARAGRAPH: @@ -799,15 +812,20 @@ static bool S_try_parse_line_start(cmark_parser *parser, done: if (!*all_matched) { - *container = (*container)->parent; // back up to last matching node + container = container->parent; // back up to last matching node + } + + if (!should_continue) { + container = NULL; } - return should_continue; + + return container; } -static void try_new_container_starts(cmark_parser *parser, - cmark_node **container, - cmark_chunk *input, - bool all_matched) +static void open_new_blocks(cmark_parser *parser, + cmark_node **container, + cmark_chunk *input, + bool all_matched) { bool indented; cmark_list *data = NULL; @@ -973,51 +991,16 @@ static void try_new_container_starts(cmark_parser *parser, } } -static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes) { - cmark_node *last_matched_container; - bool all_matched = true; - cmark_node *container, *tmp; - cmark_chunk input; - - if (parser->options & CMARK_OPT_VALIDATE_UTF8) { - cmark_utf8proc_check(parser->curline, buffer, bytes); - } else { - cmark_strbuf_put(parser->curline, buffer, bytes); - } - - // ensure line ends with a newline: - if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) { - cmark_strbuf_putc(parser->curline, '\n'); - } - - parser->offset = 0; - parser->column = 0; - parser->blank = false; - - input.data = parser->curline->ptr; - input.len = parser->curline->size; - - // container starts at the document root. - container = parser->root; - - parser->line_number++; - - if (!S_try_parse_line_start(parser, &input, &container, &all_matched)) - goto finished; - - last_matched_container = container; - - // check to see if we've hit 2nd blank line, break out of list: - if (parser->blank && container->last_line_blank) - break_out_of_lists(parser, &container); - - try_new_container_starts(parser, &container, &input, all_matched); - +static void add_text_to_container (cmark_parser *parser, + cmark_node *container, + cmark_node *last_matched_container, + cmark_chunk *input) +{ + cmark_node *tmp; // what remains at parser->offset is a text line. add the text to the // appropriate container. - S_find_first_nonspace(parser, &input); + S_find_first_nonspace(parser, input); if (parser->blank && container->last_child) container->last_child->last_line_blank = true; @@ -1051,7 +1034,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container == last_matched_container && !parser->blank && parser->current->type == CMARK_NODE_PARAGRAPH) { - add_line(parser->current, &input, parser); + add_line(parser->current, input, parser); } else { // not a lazy continuation // Finalize any blocks that were not matched and set cur to container: while (parser->current != last_matched_container) { @@ -1060,36 +1043,36 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } if (container->type == CMARK_NODE_CODE_BLOCK) { - add_line(container, &input, parser); + add_line(container, input, parser); } else if (container->type == CMARK_NODE_HTML_BLOCK) { - add_line(container, &input, parser); + add_line(container, input, parser); int matches_end_condition; switch (container->as.html_block_type) { case 1: // , , matches_end_condition = - scan_html_block_end_1(&input, parser->first_nonspace); + scan_html_block_end_1(input, parser->first_nonspace); break; case 2: // --> matches_end_condition = - scan_html_block_end_2(&input, parser->first_nonspace); + scan_html_block_end_2(input, parser->first_nonspace); break; case 3: // ?> matches_end_condition = - scan_html_block_end_3(&input, parser->first_nonspace); + scan_html_block_end_3(input, parser->first_nonspace); break; case 4: // > matches_end_condition = - scan_html_block_end_4(&input, parser->first_nonspace); + scan_html_block_end_4(input, parser->first_nonspace); break; case 5: // ]]> matches_end_condition = - scan_html_block_end_5(&input, parser->first_nonspace); + scan_html_block_end_5(input, parser->first_nonspace); break; default: matches_end_condition = 0; @@ -1105,20 +1088,62 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else if (accepts_lines(container->type)) { if (container->type == CMARK_NODE_HEADING && container->as.heading.setext == false) { - chop_trailing_hashtags(&input); + chop_trailing_hashtags(input); } - S_advance_offset(parser, &input, parser->first_nonspace - parser->offset, false); - add_line(container, &input, parser); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); + add_line(container, input, parser); } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); - S_advance_offset(parser, &input, parser->first_nonspace - parser->offset, false); - add_line(container, &input, parser); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); + add_line(container, input, parser); } parser->current = container; } +} + +/* See http://spec.commonmark.org/0.24/#phase-1-block-structure */ +static void S_process_line(cmark_parser *parser, const unsigned char *buffer, + bufsize_t bytes) { + cmark_node *last_matched_container; + bool all_matched = true; + cmark_node *container; + cmark_chunk input; + + if (parser->options & CMARK_OPT_VALIDATE_UTF8) + cmark_utf8proc_check(parser->curline, buffer, bytes); + else + cmark_strbuf_put(parser->curline, buffer, bytes); + + // ensure line ends with a newline: + if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) + cmark_strbuf_putc(parser->curline, '\n'); + + parser->offset = 0; + parser->column = 0; + parser->blank = false; + + input.data = parser->curline->ptr; + input.len = parser->curline->size; + + parser->line_number++; + + last_matched_container = check_open_blocks(parser, &input, &all_matched); + + if (!last_matched_container) + goto finished; + + container = last_matched_container; + + // check to see if we've hit 2nd blank line, break out of list: + if (parser->blank && container->last_line_blank) + break_out_of_lists(parser, &container); + + open_new_blocks(parser, &container, &input, all_matched); + + add_text_to_container(parser, container, last_matched_container, &input); finished: parser->last_line_length = input.len; -- cgit 0.0.5-2-1-g0f52 From a456c1e6532ed677ffd4631fa4dea846003a4962 Mon Sep 17 00:00:00 2001 From: Chris Eidhof Date: Wed, 17 Feb 2016 09:47:15 +0100 Subject: Update cmark.h --- src/cmark.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmark.h b/src/cmark.h index 4fa92ca056..71c634b328 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -20,7 +20,7 @@ extern "C" { */ /** Convert 'text' (assumed to be a UTF-8 encoded string with length - * 'len' from CommonMark Markdown to HTML, returning a null-terminated, + * 'len') from CommonMark Markdown to HTML, returning a null-terminated, * UTF-8-encoded string. */ CMARK_EXPORT -- cgit 0.0.5-2-1-g0f52 From e8d40d6e873f4a85696fac5da81eb9dbe7d1bc6c Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Sun, 28 Feb 2016 03:53:23 +0100 Subject: Fix installation dir of man-pages on NetBSD --- man/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 443996ef6c..e0acd7544d 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,8 +1,10 @@ if (NOT MSVC) + +include(GNUInstallDirs) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man1/cmark.1 - DESTINATION share/man/man1) + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man3/cmark.3 - DESTINATION share/man/man3) + DESTINATION ${CMAKE_INSTALL_MANDIR}/man3) endif(NOT MSVC) - -- cgit 0.0.5-2-1-g0f52 From 677309d11172f59044672edf112ad3a5f2eacc21 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Sun, 28 Feb 2016 03:53:49 +0100 Subject: Fix ctype(3) usage on NetBSD We need to cast value passed to isspace(3) to unsigned char to explicitly prevent possibly undefined behavior. /tmp/pkgsrc-tmp/wip/cmark/work/cmark-0.24.1/src/commonmark.c: In function 'S_render_node': /tmp/pkgsrc-tmp/wip/cmark/work/cmark-0.24.1/src/commonmark.c:273:9: warning: array subscript has type 'char' [-Wchar-subscripts] (code_len > 2 && !isspace(code[0]) && ^ /tmp/pkgsrc-tmp/wip/cmark/work/cmark-0.24.1/src/commonmark.c:274:10: warning: array subscript has type 'char' [-Wchar-subscripts] !(isspace(code[code_len - 1]) && isspace(code[code_len - 2]))) && ^ /tmp/pkgsrc-tmp/wip/cmark/work/cmark-0.24.1/src/commonmark.c:274:10: warning: array subscript has type 'char' [-Wchar-subscripts] CTYPE(3) Library Functions Manual CTYPE(3) NAME isalpha, isupper, islower, isdigit, isxdigit, isalnum, isspace, ispunct, isprint, isgraph, iscntrl, isblank, toupper, tolower, - character classification and mapping functions LIBRARY Standard C Library (libc, -lc) CAVEATS The first argument of these functions is of type int, but only a very restricted subset of values are actually valid. The argument must either be the value of the macro EOF (which has a negative value), or must be a non-negative value within the range representable as unsigned char. Passing invalid values leads to undefined behavior. NetBSD 7.99 February 25, 2015 NetBSD 7.99 --- src/commonmark.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 60b745ceac..0667519632 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -273,8 +273,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, // begin or end with a blank line, and code isn't // first thing in a list item if (info_len == 0 && - (code_len > 2 && !isspace(code[0]) && - !(isspace(code[code_len - 1]) && isspace(code[code_len - 2]))) && + (code_len > 2 && !isspace((unsigned char)code[0]) && + !(isspace((unsigned char)code[code_len - 1]) && isspace((unsigned char)code[code_len - 2]))) && !(node->prev == NULL && node->parent && node->parent->type == CMARK_NODE_ITEM)) { LIT(" "); -- cgit 0.0.5-2-1-g0f52 From ce9075fa0d6a04c6fb4cffb489ad27061397b16c Mon Sep 17 00:00:00 2001 From: tinysun212 Date: Thu, 10 Mar 2016 08:14:01 +0900 Subject: Moved the cmake minimum version to top line In the file CMakeLists.txt, the required version should be placed to top line. The information could not used at CMake/Modules/CYGWIN.cmake under Cygwin. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 87c0d9a861..968b869633 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -project(cmark) cmake_minimum_required(VERSION 2.8.9) +project(cmark) include("FindAsan.cmake") if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") -- cgit 0.0.5-2-1-g0f52 From 8bff268ba84c67a1ac2761679457532439da482b Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 12 Mar 2016 11:04:37 +0100 Subject: Test with multiple MSVC versions under Appveyor --- appveyor.yml | 6 ++++-- tools/appveyor-build.bat | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tools/appveyor-build.bat diff --git a/appveyor.yml b/appveyor.yml index d86785ba95..0259323154 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,14 +2,16 @@ environment: PYTHON: "C:\\Python34-x64" PYTHON_VERSION: "3.4.3" PYTHON_ARCH: "64" + matrix: + - MSVC_VERSION: 10 + - MSVC_VERSION: 12 # set up for nmake: install: - - '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64' - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" build_script: - - 'nmake' + - 'tools\appveyor-build.bat' test_script: - 'nmake test' diff --git a/tools/appveyor-build.bat b/tools/appveyor-build.bat new file mode 100644 index 0000000000..73d555b52b --- /dev/null +++ b/tools/appveyor-build.bat @@ -0,0 +1,13 @@ +@echo off + +if "%MSVC_VERSION%" == "10" goto msvc10 + +call "C:\Program Files (x86)\Microsoft Visual Studio %MSVC_VERSION%.0\VC\vcvarsall.bat" amd64 +goto build + +:msvc10 +call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 + +:build +nmake + -- cgit 0.0.5-2-1-g0f52 From 0e216b4044f1cbbf30df4e378d51d91a0267e680 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 12 Mar 2016 11:13:14 +0100 Subject: Switch from "inline" to "CMARK_INLINE" Newer MSVC versions support enough of C99 to be able to compile cmark in plain C mode. Only the "inline" keyword is still unsupported. We have to use "__inline" instead. --- src/blocks.c | 10 +++++----- src/buffer.c | 2 +- src/commonmark.c | 2 +- src/html.c | 2 +- src/inlines.c | 22 +++++++++++----------- src/latex.c | 2 +- src/node.c | 4 ++-- src/render.c | 4 ++-- src/xml.c | 2 +- 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 925585db2c..00639cf5a6 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -30,11 +30,11 @@ #define peek_at(i, n) (i)->data[n] -static inline bool S_is_line_end_char(char c) { +static CMARK_INLINE bool S_is_line_end_char(char c) { return (c == '\n' || c == '\r'); } -static inline bool S_is_space_or_tab(char c) { +static CMARK_INLINE bool S_is_space_or_tab(char c) { return (c == ' ' || c == '\t'); } @@ -126,7 +126,7 @@ static bool is_blank(cmark_strbuf *s, bufsize_t offset) { return true; } -static inline bool can_contain(cmark_node_type parent_type, +static CMARK_INLINE bool can_contain(cmark_node_type parent_type, cmark_node_type child_type) { return (parent_type == CMARK_NODE_DOCUMENT || parent_type == CMARK_NODE_BLOCK_QUOTE || @@ -134,13 +134,13 @@ static inline bool can_contain(cmark_node_type parent_type, (parent_type == CMARK_NODE_LIST && child_type == CMARK_NODE_ITEM)); } -static inline bool accepts_lines(cmark_node_type block_type) { +static CMARK_INLINE bool accepts_lines(cmark_node_type block_type) { return (block_type == CMARK_NODE_PARAGRAPH || block_type == CMARK_NODE_HEADING || block_type == CMARK_NODE_CODE_BLOCK); } -static inline bool contains_inlines(cmark_node_type block_type) { +static CMARK_INLINE bool contains_inlines(cmark_node_type block_type) { return (block_type == CMARK_NODE_PARAGRAPH || block_type == CMARK_NODE_HEADING); } diff --git a/src/buffer.c b/src/buffer.c index a9d36e7913..4efa97b561 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -33,7 +33,7 @@ void cmark_strbuf_overflow_err() { abort(); } -static inline void S_strbuf_grow_by(cmark_strbuf *buf, size_t add) { +static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, size_t add) { size_t target_size = (size_t)buf->size + add; if (target_size < add /* Integer overflow. */ diff --git a/src/commonmark.c b/src/commonmark.c index 0667519632..95f5a80b1e 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -20,7 +20,7 @@ // Functions to convert cmark_nodes to commonmark strings. -static inline void outc(cmark_renderer *renderer, cmark_escaping escape, +static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, unsigned char nextc) { bool needs_escaping = false; bool follows_digit = diff --git a/src/html.c b/src/html.c index 27e0586c94..753e5e28bc 100644 --- a/src/html.c +++ b/src/html.c @@ -17,7 +17,7 @@ static void escape_html(cmark_strbuf *dest, const unsigned char *source, houdini_escape_html0(dest, source, length, 0); } -static inline void cr(cmark_strbuf *html) { +static CMARK_INLINE void cr(cmark_strbuf *html) { if (html->size && html->ptr[html->size - 1] != '\n') cmark_strbuf_putc(html, '\n'); } diff --git a/src/inlines.c b/src/inlines.c index 11998313d4..8ff8131eca 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -48,7 +48,7 @@ typedef struct { delimiter *last_delim; } subject; -static inline bool S_is_line_end_char(char c) { +static CMARK_INLINE bool S_is_line_end_char(char c) { return (c == '\n' || c == '\r'); } @@ -62,7 +62,7 @@ static void subject_from_buf(subject *e, cmark_strbuf *buffer, static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. -static inline cmark_node *make_literal(cmark_node_type t, cmark_chunk s) { +static CMARK_INLINE cmark_node *make_literal(cmark_node_type t, cmark_chunk s) { cmark_node *e = (cmark_node *)calloc(1, sizeof(*e)); if (e != NULL) { e->type = t; @@ -81,7 +81,7 @@ static inline cmark_node *make_literal(cmark_node_type t, cmark_chunk s) { } // Create an inline with no value. -static inline cmark_node *make_simple(cmark_node_type t) { +static CMARK_INLINE cmark_node *make_simple(cmark_node_type t) { cmark_node *e = (cmark_node *)calloc(1, sizeof(*e)); if (e != NULL) { e->type = t; @@ -141,7 +141,7 @@ static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) { return cmark_chunk_buf_detach(&buf); } -static inline cmark_node *make_autolink(cmark_chunk url, int is_email) { +static CMARK_INLINE cmark_node *make_autolink(cmark_chunk url, int is_email) { cmark_node *link = make_simple(CMARK_NODE_LINK); link->as.link.url = cmark_clean_autolink(&url, is_email); link->as.link.title = cmark_chunk_literal(""); @@ -159,28 +159,28 @@ static void subject_from_buf(subject *e, cmark_strbuf *buffer, e->last_delim = NULL; } -static inline int isbacktick(int c) { return (c == '`'); } +static CMARK_INLINE int isbacktick(int c) { return (c == '`'); } -static inline unsigned char peek_char(subject *subj) { +static CMARK_INLINE unsigned char peek_char(subject *subj) { // NULL bytes should have been stripped out by now. If they're // present, it's a programming error: assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0)); return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; } -static inline unsigned char peek_at(subject *subj, bufsize_t pos) { +static CMARK_INLINE unsigned char peek_at(subject *subj, bufsize_t pos) { return subj->input.data[pos]; } // Return true if there are more characters in the subject. -static inline int is_eof(subject *subj) { +static CMARK_INLINE int is_eof(subject *subj) { return (subj->pos >= subj->input.len); } // Advance the subject. Doesn't check for eof. #define advance(subj) (subj)->pos += 1 -static inline bool skip_spaces(subject *subj) { +static CMARK_INLINE bool skip_spaces(subject *subj) { bool skipped = false; while (peek_char(subj) == ' ' || peek_char(subj) == '\t') { advance(subj); @@ -189,7 +189,7 @@ static inline bool skip_spaces(subject *subj) { return skipped; } -static inline bool skip_line_end(subject *subj) { +static CMARK_INLINE bool skip_line_end(subject *subj) { bool seen_line_end_char = false; if (peek_char(subj) == '\r') { advance(subj); @@ -203,7 +203,7 @@ static inline bool skip_line_end(subject *subj) { } // Take characters while a predicate holds, and return a string. -static inline cmark_chunk take_while(subject *subj, int (*f)(int)) { +static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) { unsigned char c; bufsize_t startpos = subj->pos; bufsize_t len = 0; diff --git a/src/latex.c b/src/latex.c index 879f813b03..71559babdc 100644 --- a/src/latex.c +++ b/src/latex.c @@ -18,7 +18,7 @@ #define CR() renderer->cr(renderer) #define BLANKLINE() renderer->blankline(renderer) -static inline void outc(cmark_renderer *renderer, cmark_escaping escape, +static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, unsigned char nextc) { if (escape == LITERAL) { cmark_render_code_point(renderer, c); diff --git a/src/node.c b/src/node.c index 26a8e2528d..00edbb1b23 100644 --- a/src/node.c +++ b/src/node.c @@ -6,7 +6,7 @@ static void S_node_unlink(cmark_node *node); -static inline bool S_is_block(cmark_node *node) { +static CMARK_INLINE bool S_is_block(cmark_node *node) { if (node == NULL) { return false; } @@ -14,7 +14,7 @@ static inline bool S_is_block(cmark_node *node) { node->type <= CMARK_NODE_LAST_BLOCK; } -static inline bool S_is_inline(cmark_node *node) { +static CMARK_INLINE bool S_is_inline(cmark_node *node) { if (node == NULL) { return false; } diff --git a/src/render.c b/src/render.c index fea9b3a58b..50f03e6aee 100644 --- a/src/render.c +++ b/src/render.c @@ -5,13 +5,13 @@ #include "utf8.h" #include "render.h" -static inline void S_cr(cmark_renderer *renderer) { +static CMARK_INLINE void S_cr(cmark_renderer *renderer) { if (renderer->need_cr < 1) { renderer->need_cr = 1; } } -static inline void S_blankline(cmark_renderer *renderer) { +static CMARK_INLINE void S_blankline(cmark_renderer *renderer) { if (renderer->need_cr < 2) { renderer->need_cr = 2; } diff --git a/src/xml.c b/src/xml.c index b630810f9a..fc3388611b 100644 --- a/src/xml.c +++ b/src/xml.c @@ -21,7 +21,7 @@ struct render_state { int indent; }; -static inline void indent(struct render_state *state) { +static CMARK_INLINE void indent(struct render_state *state) { int i; for (i = 0; i < state->indent; i++) { cmark_strbuf_putc(state->xml, ' '); -- cgit 0.0.5-2-1-g0f52 From 6135e9b953747365358f7f2e23e53cc0e4a701b2 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 12 Mar 2016 11:29:55 +0100 Subject: Don't use variable length arrays They're not supported by MSVC. --- src/commonmark.c | 4 ++-- src/html.c | 4 ++-- src/latex.c | 2 +- src/man.c | 2 +- src/xml.c | 3 ++- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 95f5a80b1e..f5a352dcf3 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -17,6 +17,8 @@ #define LIT(s) renderer->out(renderer, s, false, LITERAL) #define CR() renderer->cr(renderer) #define BLANKLINE() renderer->blankline(renderer) +#define ENCODED_SIZE 20 +#define LISTMARKER_SIZE 20 // Functions to convert cmark_nodes to commonmark strings. @@ -26,7 +28,6 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, bool follows_digit = renderer->buffer->size > 0 && cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]); - const size_t ENCODED_SIZE = 20; char encoded[ENCODED_SIZE]; needs_escaping = @@ -168,7 +169,6 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info, *code, *title; size_t info_len, code_len; - const size_t LISTMARKER_SIZE = 20; char listmarker[LISTMARKER_SIZE]; char *emph_delim; bufsize_t marker_width; diff --git a/src/html.c b/src/html.c index 753e5e28bc..9ffa08a7cf 100644 --- a/src/html.c +++ b/src/html.c @@ -10,6 +10,8 @@ #include "houdini.h" #include "scanners.h" +#define BUFFER_SIZE 100 + // Functions to convert cmark_nodes to HTML strings. static void escape_html(cmark_strbuf *dest, const unsigned char *source, @@ -29,7 +31,6 @@ struct render_state { static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) { - const size_t BUFFER_SIZE = 100; char buffer[BUFFER_SIZE]; if (CMARK_OPT_SOURCEPOS & options) { snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"", @@ -47,7 +48,6 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, char start_heading[] = "out(renderer, s, false, LITERAL) #define CR() renderer->cr(renderer) #define BLANKLINE() renderer->blankline(renderer) +#define LIST_NUMBER_STRING_SIZE 20 static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, unsigned char nextc) { @@ -217,7 +218,6 @@ static int S_get_enumlevel(cmark_node *node) { static int S_render_node(cmark_renderer *renderer, cmark_node *node, cmark_event_type ev_type, int options) { int list_number; - const size_t LIST_NUMBER_STRING_SIZE = 20; char list_number_string[LIST_NUMBER_STRING_SIZE]; bool entering = (ev_type == CMARK_EVENT_ENTER); cmark_list_type list_type; diff --git a/src/man.c b/src/man.c index 2ce7540b08..3d8bc204a2 100644 --- a/src/man.c +++ b/src/man.c @@ -14,6 +14,7 @@ #define LIT(s) renderer->out(renderer, s, false, LITERAL) #define CR() renderer->cr(renderer) #define BLANKLINE() renderer->blankline(renderer) +#define LIST_NUMBER_SIZE 20 // Functions to convert cmark_nodes to groff man strings. static void S_outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, @@ -110,7 +111,6 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, tmp = tmp->prev; list_number += 1; } - const size_t LIST_NUMBER_SIZE = 20; char list_number_s[LIST_NUMBER_SIZE]; snprintf(list_number_s, LIST_NUMBER_SIZE, "\"%d.\" 4", list_number); LIT(list_number_s); diff --git a/src/xml.c b/src/xml.c index fc3388611b..12bd629d67 100644 --- a/src/xml.c +++ b/src/xml.c @@ -9,6 +9,8 @@ #include "buffer.h" #include "houdini.h" +#define BUFFER_SIZE 100 + // Functions to convert cmark_nodes to XML strings. static void escape_xml(cmark_strbuf *dest, const unsigned char *source, @@ -34,7 +36,6 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, bool literal = false; cmark_delim_type delim; bool entering = (ev_type == CMARK_EVENT_ENTER); - const size_t BUFFER_SIZE = 100; char buffer[BUFFER_SIZE]; if (entering) { -- cgit 0.0.5-2-1-g0f52 From af98c75f1ad3338c813aa475aa1b543dd80c138a Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 12 Mar 2016 11:51:51 +0100 Subject: Compile in plain C mode with MSVC 12.0 or newer Under MSVC, we used to compile in C++ mode to get some C99 features like mixing declarations and code. With newer MSVC versions, it's possible to build in plain C mode. --- src/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 386bfe8128..2de501aa15 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -169,8 +169,8 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") endif() -# Compile as C++ under MSVC -if(MSVC) +# Compile as C++ under MSVC older than 12.0 +if(MSVC AND MSVC_VERSION LESS 1800) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") endif() -- cgit 0.0.5-2-1-g0f52 From ec64e9ea899c3f40e26aec8bfc4a9b8941b91cdf Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Fri, 18 Mar 2016 10:25:23 +0200 Subject: Add library option to render softbreaks as spaces --- api_test/main.c | 5 +++++ src/cmark.h | 4 ++++ src/html.c | 2 ++ 3 files changed, 11 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index cd9ffb5a01..bde62223f4 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -788,6 +788,11 @@ static void line_endings(test_batch_runner *runner) { STR_EQ(runner, html, "

                            line
                            \nline

                            \n", "crlf endings with CMARK_OPT_HARDBREAKS"); free(html); + html = cmark_markdown_to_html(crlf_lines, sizeof(crlf_lines) - 1, + CMARK_OPT_DEFAULT | CMARK_OPT_NOBREAKS); + STR_EQ(runner, html, "

                            line line

                            \n", + "crlf endings with CMARK_OPT_NOBREAKS"); + free(html); static const char no_line_ending[] = "```\nline\n```"; html = cmark_markdown_to_html(no_line_ending, sizeof(no_line_ending) - 1, diff --git a/src/cmark.h b/src/cmark.h index 71c634b328..7b7001e5f0 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -519,6 +519,10 @@ char *cmark_render_latex(cmark_node *root, int options, int width); */ #define CMARK_OPT_SAFE (1 << 3) +/** Render `softbreak` elements as spaces. + */ +#define CMARK_OPT_NOBREAKS (1 << 4) + /** * ### Options affecting parsing */ diff --git a/src/html.c b/src/html.c index 9ffa08a7cf..c2267cb179 100644 --- a/src/html.c +++ b/src/html.c @@ -228,6 +228,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_SOFTBREAK: if (options & CMARK_OPT_HARDBREAKS) { cmark_strbuf_puts(html, "
                            \n"); + } else if (options & CMARK_OPT_NOBREAKS) { + cmark_strbuf_putc(html, ' '); } else { cmark_strbuf_putc(html, '\n'); } -- cgit 0.0.5-2-1-g0f52 From dbbc20d4051ea9033f0b13b478fcbcd855950bd7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 20 Mar 2016 14:08:33 -0700 Subject: Fixed documentation of --width in man page. --- man/man1/cmark.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 8dd9165af4..932708ffaa 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -23,7 +23,7 @@ Specify output format (\f[C]html\f[], \f[C]man\f[], \f[C]xml\f[], .B \-\-width \f[I]WIDTH\f[] Specify a column width to which to wrap the output. For no wrapping, use the value 0 (the default). This option currently only affects the -commonmark renderer. +commonmark, latex, and man renderers. .TP 12n .B \-\-sourcepos Include source position attribute. -- cgit 0.0.5-2-1-g0f52 From d51d70620a4ccca90473c1b705c9e8b6f56537a6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 23 Mar 2016 08:31:20 -0700 Subject: Doc: clarify that cmark_node_free frees a node's children too. --- src/cmark.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmark.h b/src/cmark.h index 71c634b328..31bbf01e77 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -96,7 +96,7 @@ typedef struct cmark_iter cmark_iter; */ CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); -/** Frees the memory allocated for a node. +/** Frees the memory allocated for a node and any children. */ CMARK_EXPORT void cmark_node_free(cmark_node *node); -- cgit 0.0.5-2-1-g0f52 From 620f31bf2e4f40f00cc688e683a84f8f9f38b0d6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 23 Mar 2016 08:32:30 -0700 Subject: Regenerated cmark.3 man page. --- man/man3/cmark.3 | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index bffe73d4e9..7ef259cce2 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "February 02, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 23, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -14,7 +14,7 @@ Simple Interface .PP Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length -\f[I]len\f[] from CommonMark Markdown to HTML, returning a +\f[I]len\f[]) from CommonMark Markdown to HTML, returning a null\-terminated, UTF\-8\-encoded string. .SS @@ -102,14 +102,14 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller\[cq]s responsibility -to assign. +other required properties, which it is the caller's responsibility to +assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) .PP -Frees the memory allocated for a node. +Frees the memory allocated for a node and any children. .SS Tree Traversal @@ -376,8 +376,7 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on -failure. +Sets the "tightness" of a list. Returns 1 on success, 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -424,31 +423,31 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_enter is set. +Returns the literal "on enter" text for a custom \f[I]node\f[], or an +empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP -Sets the literal text to render \[lq]on enter\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered after this -text. Returns 1 on success 0 on failure. +Sets the literal text to render "on enter" for a custom \f[I]node\f[]. +Any children of the node will be rendered after this text. Returns 1 on +success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_exit is set. +Returns the literal "on exit" text for a custom \f[I]node\f[], or an +empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP -Sets the literal text to render \[lq]on exit\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered before this -text. Returns 1 on success 0 on failure. +Sets the literal text to render "on exit" for a custom \f[I]node\f[]. +Any children of the node will be rendered before this text. Returns 1 on +success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -723,7 +722,7 @@ with the replacement character U+FFFD. .fi .PP -Convert straight quotes to curly, \[em] to em dashes, \[en] to en +Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en dashes. .SS -- cgit 0.0.5-2-1-g0f52 From c85329fbf236132da83136487ece6c86df224b41 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 23 Mar 2016 11:49:00 -0700 Subject: Added circle.yml. --- circle.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 circle.yml diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000000..0059cb11ea --- /dev/null +++ b/circle.yml @@ -0,0 +1,3 @@ +test: + override: + - make test -- cgit 0.0.5-2-1-g0f52 From 2ba71ac9bdc07ebc28e23e8fa531e2ea55300f32 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 23 Mar 2016 11:52:09 -0700 Subject: Removed circle.yml. --- circle.yml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 circle.yml diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 0059cb11ea..0000000000 --- a/circle.yml +++ /dev/null @@ -1,3 +0,0 @@ -test: - override: - - make test -- cgit 0.0.5-2-1-g0f52 From b301505a7c8e3b67be7c37b32abae6e76581e065 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Mar 2016 22:50:55 -0700 Subject: Updated spec. --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 0309eaa9ed..1a4a7dc90d 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.24 -date: '2016-01-12' +version: 0.25 +date: '2016-03-24' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 836e244dd8bb764db20437caaaf5b4fae1631907 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Mar 2016 22:51:09 -0700 Subject: Updated version to 0.25.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 968b869633..d3f6232f07 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 24) +set(PROJECT_VERSION_MINOR 25) set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) -- cgit 0.0.5-2-1-g0f52 From c82637639e3f2bd096fd6d4bf259d4e96e7fc9e5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Mar 2016 22:53:12 -0700 Subject: Updated man 3 page. --- man/man3/cmark.3 | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 7ef259cce2..523a3d4804 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 23, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 24, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -102,8 +102,8 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller's responsibility to -assign. +other required properties, which it is the caller\[cq]s responsibility +to assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -376,7 +376,8 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the "tightness" of a list. Returns 1 on success, 0 on failure. +Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on +failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -423,31 +424,31 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal "on enter" text for a custom \f[I]node\f[], or an -empty string if no on_enter is set. +Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP -Sets the literal text to render "on enter" for a custom \f[I]node\f[]. -Any children of the node will be rendered after this text. Returns 1 on -success 0 on failure. +Sets the literal text to render \[lq]on enter\[rq] for a custom +\f[I]node\f[]. Any children of the node will be rendered after this +text. Returns 1 on success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal "on exit" text for a custom \f[I]node\f[], or an -empty string if no on_exit is set. +Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP -Sets the literal text to render "on exit" for a custom \f[I]node\f[]. -Any children of the node will be rendered before this text. Returns 1 on -success 0 on failure. +Sets the literal text to render \[lq]on exit\[rq] for a custom +\f[I]node\f[]. Any children of the node will be rendered before this +text. Returns 1 on success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -722,7 +723,7 @@ with the replacement character U+FFFD. .fi .PP -Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en +Convert straight quotes to curly, \[em] to em dashes, \[en] to en dashes. .SS -- cgit 0.0.5-2-1-g0f52 From bba288b307ba72a4a6fb9612ceb4d7a58264d4eb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Mar 2016 22:53:43 -0700 Subject: Updated date in man1 page. --- man/man1/cmark.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 932708ffaa..9ea8d4c4a5 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -1,4 +1,4 @@ -.TH "cmark" "1" "November 30, 2014" "LOCAL" "General Commands Manual" +.TH "cmark" "1" "March 24, 2016" "LOCAL" "General Commands Manual" .SH "NAME" \fBcmark\fR \- convert CommonMark formatted text to HTML -- cgit 0.0.5-2-1-g0f52 From c01e577a6ac24a38d7dabd4d27a0bc2c3ce58755 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Mar 2016 23:08:25 -0700 Subject: Updated changelog. --- changelog.txt | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/changelog.txt b/changelog.txt index 1deee772e7..91f0eeb023 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,59 @@ +[0.25.0] + + * Fixed tabs in indentation (#101). This patch fixes S_advance_offset + so that it doesn't gobble a tab character when advancing less than the + width of a tab. + * Added partially_consumed_tab to parser. This keeps track of when we + have gotten partway through a tab when consuming initial indentation. + * Simplified add_line (only need parser parameter). + * Properly handle partially consumed tab. E.g. in + + - foo + + bar + + we should consume two spaces from the second tab, including two spaces + in the code block. + * Properly handle tabs with blockquotes and fenced blocks. + * Fixed handling of tabs in lists. + * Clarified logic in S_advance_offset. + * Use an assertion to check for in-range html_block_type. + It's a programming error if the type is out of range. + * Refactored S_processLines to make the logic easier to + understand, and added documentation (Mathie Duponchelle). + * Removed unnecessary check for empty string_content. + * Factored out contains_inlines. + * Moved the cmake minimum version to top line of CMakeLists.txt + (tinysun212). + * Fix ctype(3) usage on NetBSD (Kamil Rytarowski). We need to cast value + passed to isspace(3) to unsigned char to explicitly prevent possibly + undefined behavior. + * Compile in plain C mode with MSVC 12.0 or newer (Nick Wellnhofer). + Under MSVC, we used to compile in C++ mode to get some C99 features + like mixing declarations and code. With newer MSVC versions, it's + possible to build in plain C mode. + * Switched from "inline" to "CMARK_INLINE" (Nick Wellnhofer). + Newer MSVC versions support enough of C99 to be able to compile cmark + in plain C mode. Only the "inline" keyword is still unsupported. + We have to use "__inline" instead. + * Added include guards to config.h + * config.h.in - added compatibility snprintf, vsnprintf for MSVC. + * Replaced sprintf with snprintf (Marco Benelli). + * config.h: include stdio.h for _vscprintf etc. + * Include starg.h when needed in config.h. + * Removed an unnecessary C99-ism in buffer.c. This helps compiling on + systems like luarocks that don't have all the cmake configuration + goodness (thanks to carlmartus). + * Don't use variable length arrays (Nick Wellnhofer). + They're not supported by MSVC. + * Test with multiple MSVC versions under Appveyor (Nick Wellnhofer). + * Fix installation dir of man-pages on NetBSD (Kamil Rytarowski). + * Fixed typo in cmark.h comments (Chris Eidhof). + * Clarify in man page that cmark_node_free frees a node's children too. + * Fixed documentation of --width in man page. + * Require re2c >= 1.14.2 (#102). + * Generated scanners.c with more recent re2c. + [0.24.1] * Commonmark renderer: -- cgit 0.0.5-2-1-g0f52 From 2420e06035d46217ea4ae6ea9b3ae2d39a7d7b16 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Mar 2016 23:31:14 -0700 Subject: Fixed typo in changelog.txt. --- changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 91f0eeb023..5e1f08648b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -20,7 +20,7 @@ * Use an assertion to check for in-range html_block_type. It's a programming error if the type is out of range. * Refactored S_processLines to make the logic easier to - understand, and added documentation (Mathie Duponchelle). + understand, and added documentation (Mathieu Duponchelle). * Removed unnecessary check for empty string_content. * Factored out contains_inlines. * Moved the cmake minimum version to top line of CMakeLists.txt -- cgit 0.0.5-2-1-g0f52 From 565f01476b463149bbc04ed6a2f7362f884481d1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 25 Mar 2016 08:59:38 -0700 Subject: Updated changelog. --- changelog.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/changelog.txt b/changelog.txt index 5e1f08648b..98645a928f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,9 @@ +[0.25.1] + + * Release with no code changes. cmark version was mistakenly set to + 0.25.1 in the 0.25.0 release (#112), so this release just + ensures that this will cause no confusion later. + [0.25.0] * Fixed tabs in indentation (#101). This patch fixes S_advance_offset -- cgit 0.0.5-2-1-g0f52 From b299be03398677fa2a396b649531183485da62e7 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 26 Mar 2016 12:02:54 +0100 Subject: Reset partially_consumed_tab on every new line Fixes issue #114. --- src/blocks.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/blocks.c b/src/blocks.c index 00639cf5a6..d10d1ca616 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1124,6 +1124,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->offset = 0; parser->column = 0; parser->blank = false; + parser->partially_consumed_tab = false; input.data = parser->curline->ptr; input.len = parser->curline->size; -- cgit 0.0.5-2-1-g0f52 From 03a6547b8cea55c8917214a363cadda5b7cffd31 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 26 Mar 2016 12:20:28 +0100 Subject: Open files in binary mode Now that cmark supports different line endings, files must be openend in binary mode on Windows. Fixes issue #113. --- man/man3/cmark.3 | 2 +- src/cmark.h | 2 +- src/main.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 523a3d4804..283b9cc4c8 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -543,7 +543,7 @@ Streaming interface: .nf \f[C] cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); -FILE *fp = fopen("myfile.md", "r"); +FILE *fp = fopen("myfile.md", "rb"); while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { cmark_parser_feed(parser, buffer, bytes); if (bytes < sizeof(buffer)) { diff --git a/src/cmark.h b/src/cmark.h index 31bbf01e77..3c5d6b65da 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -418,7 +418,7 @@ CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); * Streaming interface: * * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); - * FILE *fp = fopen("myfile.md", "r"); + * FILE *fp = fopen("myfile.md", "rb"); * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { * cmark_parser_feed(parser, buffer, bytes); * if (bytes < sizeof(buffer)) { diff --git a/src/main.c b/src/main.c index f9fa29c523..c44ba1370c 100644 --- a/src/main.c +++ b/src/main.c @@ -145,7 +145,7 @@ int main(int argc, char *argv[]) { parser = cmark_parser_new(options); for (i = 0; i < numfps; i++) { - FILE *fp = fopen(argv[files[i]], "r"); + FILE *fp = fopen(argv[files[i]], "rb"); if (fp == NULL) { fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]], strerror(errno)); -- cgit 0.0.5-2-1-g0f52 From 7cb92c313c31fc808dded8f476f956447e912fe3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Mar 2016 12:40:13 -0700 Subject: Added api_test for #117. --- api_test/main.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index cd9ffb5a01..4fa78965f8 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -852,6 +852,17 @@ static void test_md_to_html(test_batch_runner *runner, const char *markdown, free(html); } +static void test_feed_across_line_ending(test_batch_runner *runner) { + // See #117 + cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); + cmark_parser_feed(parser, "line1\r", 6); + cmark_parser_feed(parser, "\nline2\r\n", 8); + cmark_node *document = cmark_parser_finish(parser); + OK(runner, document->first_child->next == NULL, "document has one paragraph"); + cmark_parser_free(parser); + cmark_node_free(document); +} + int main() { int retval; test_batch_runner *runner = test_batch_runner_new(); @@ -876,6 +887,7 @@ int main() { numeric_entities(runner); test_cplusplus(runner); test_safe(runner); + test_feed_across_line_ending(runner); test_print_summary(runner); retval = test_ok(runner) ? 0 : 1; -- cgit 0.0.5-2-1-g0f52 From 359fb5b47365abaebb1b76ae52aeb27efdd39ae7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Mar 2016 12:48:22 -0700 Subject: Handle buffer split across a CRLF line ending (closes #117). Adds an internal field to the parser struct to keep track of last_buffer_ended_with_cr. --- src/blocks.c | 11 ++++++++++- src/parser.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index d10d1ca616..f49ad4e53f 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -90,6 +90,7 @@ cmark_parser *cmark_parser_new(int options) { parser->last_line_length = 0; parser->linebuf = buf; parser->options = options; + parser->last_buffer_ended_with_cr = false; return parser; } @@ -506,6 +507,11 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, const unsigned char *end = buffer + len; static const uint8_t repl[] = {239, 191, 189}; + if (parser->last_buffer_ended_with_cr && *buffer == '\n') { + // skip NL if last buffer ended with CR ; see #117 + buffer++; + } + parser->last_buffer_ended_with_cr = false; while (buffer < end) { const unsigned char *eol; bufsize_t chunk_len; @@ -546,8 +552,11 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, buffer += chunk_len; // skip over line ending characters: - if (buffer < end && *buffer == '\r') + if (buffer < end && *buffer == '\r') { buffer++; + if (buffer == end) + parser->last_buffer_ended_with_cr = true; + } if (buffer < end && *buffer == '\n') buffer++; } diff --git a/src/parser.h b/src/parser.h index b3ff39b130..ab21d0fa7b 100644 --- a/src/parser.h +++ b/src/parser.h @@ -27,6 +27,7 @@ struct cmark_parser { bufsize_t last_line_length; cmark_strbuf *linebuf; int options; + bool last_buffer_ended_with_cr; }; #ifdef __cplusplus -- cgit 0.0.5-2-1-g0f52 From 284e544f1bce98558bc696caced656e565f31c08 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Mar 2016 13:19:54 -0700 Subject: Version bump to 0.25.2. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3f6232f07..2ab6a7257f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 25) -set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION_PATCH 2) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) -- cgit 0.0.5-2-1-g0f52 From 74c42c9eee645a4f65b19e74187876188f3e6a8a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Mar 2016 13:24:14 -0700 Subject: Updated changelog. --- changelog.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/changelog.txt b/changelog.txt index 98645a928f..77341b5247 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,13 @@ +[0.25.2] + + * Open files in binary mode (#113, Nick Wellnhofer). Now that cmark + supports different line endings, files must be openend in binary mode + on Windows. + * Reset `partially_consumed_tab` on every new line (#114, Nick Wellnhofer). + * Handle buffer split across a CRLF line ending (#117). Adds an internal + field to the parser struct to keep track of `last_buffer_ended_with_cr`. + Added test. + [0.25.1] * Release with no code changes. cmark version was mistakenly set to -- cgit 0.0.5-2-1-g0f52 From 7dfe7fff11d7c22404db9f72c77bdb930267c634 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Sun, 6 Mar 2016 09:30:12 +0100 Subject: api_test: fix leak Replaced nodes are not automatically freed. --- api_test/main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index 4fa78965f8..8af2e71bcb 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -362,6 +362,9 @@ static void create_tree(test_batch_runner *runner) { cmark_node *str4 = cmark_node_new(CMARK_NODE_TEXT); cmark_node_set_literal(str4, "brzz"); OK(runner, cmark_node_replace(str1, str4), "replace"); + // The replaced node is not freed + cmark_node_free(str1); + INT_EQ(runner, cmark_node_check(doc, NULL), 0, "replace consistent"); OK(runner, cmark_node_previous(emph) == str4, "replace works"); INT_EQ(runner, cmark_node_replace(p, str4), 0, "replace str for p fails"); -- cgit 0.0.5-2-1-g0f52 From eee0305d40d48a3612d49d7177d29947bf97a67a Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 27 Mar 2016 12:34:17 +0200 Subject: Set stdin to binary mode on Windows Fixes EOLs when reading from stdin. Fully fixes issue #113. --- src/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.c b/src/main.c index f9fa29c523..a78c76abd2 100644 --- a/src/main.c +++ b/src/main.c @@ -75,6 +75,7 @@ int main(int argc, char *argv[]) { int options = CMARK_OPT_DEFAULT; #if defined(_WIN32) && !defined(__CYGWIN__) + _setmode(_fileno(stdin), _O_BINARY); _setmode(_fileno(stdout), _O_BINARY); #endif -- cgit 0.0.5-2-1-g0f52 From bb7289750b93e20f760fb94fd04931b651e5ce3e Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Sun, 27 Mar 2016 15:01:03 +0300 Subject: Note that NOBREAKS option is HTML-only --- src/cmark.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmark.h b/src/cmark.h index 7b7001e5f0..95ec623ec7 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -519,7 +519,7 @@ char *cmark_render_latex(cmark_node *root, int options, int width); */ #define CMARK_OPT_SAFE (1 << 3) -/** Render `softbreak` elements as spaces. +/** Render `softbreak` elements as spaces (HTML only). */ #define CMARK_OPT_NOBREAKS (1 << 4) -- cgit 0.0.5-2-1-g0f52 From 848ca96890db32eb98d44765886853bed626a4ee Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 26 Mar 2016 16:24:56 +0100 Subject: Add first regression tests I think it's a good idea to add tests after fixing bugs. This is really easy using the spec test infrastructure. --- test/CMakeLists.txt | 7 +++++++ test/regression.txt | 34 ++++++++++++++++++++++++++++++++++ test/spec_tests.py | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test/regression.txt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d537ab514b..fbfd1d0b45 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -53,6 +53,13 @@ IF (PYTHONINTERP_FOUND) "${ROUNDTRIP} ${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" ) + add_test(regressiontest_executable + ${PYTHON_EXECUTABLE} + "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" + "${CMAKE_CURRENT_SOURCE_DIR}/regression.txt" "--program" + "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" + ) + ELSE(PYTHONINTERP_FOUND) diff --git a/test/regression.txt b/test/regression.txt new file mode 100644 index 0000000000..c8a10573c5 --- /dev/null +++ b/test/regression.txt @@ -0,0 +1,34 @@ +### Regression tests + +Issue #113: EOL character weirdness on Windows +(Important: first line ends with CR + CR + LF) + +```````````````````````````````` example +line1 +line2 +. +

                            line1

                            +

                            line2

                            +```````````````````````````````` + +Issue #114: cmark skipping first character in line +(Important: the blank lines around "Repeatedly" contain a tab.) + +```````````````````````````````` example +By taking it apart + +- alternative solutions +→ +Repeatedly solving +→ +- how techniques +. +

                            By taking it apart

                            +
                              +
                            • alternative solutions
                            • +
                            +

                            Repeatedly solving

                            +
                              +
                            • how techniques
                            • +
                            +```````````````````````````````` diff --git a/test/spec_tests.py b/test/spec_tests.py index d5b4d05a5c..1521a826e4 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -87,7 +87,7 @@ def get_tests(specfile): header_re = re.compile('#+ ') - with open(specfile, 'r', encoding='utf-8') as specf: + with open(specfile, 'r', encoding='utf-8', newline='\n') as specf: for line in specf: line_number = line_number + 1 l = line.strip() -- cgit 0.0.5-2-1-g0f52 From 9c3a7023014f961197bc27ff8360ce9e1b1d6c29 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 9 Apr 2016 11:44:58 -0700 Subject: Fixed a number of issues relating to line wrapping. - Extend CMARK_OPT_NOBREAKS to all renderers and add `--nobreaks`. - Do not autowrap, regardless of width parameter, if CMARK_OPT_NOBREAKS is set. - Fixed CMARK_OPT_HARDBREAKS for LaTeX and man renderers. - Ensure that no auto-wrapping occurs if CMARK_OPT_NOBREAKS is enabled, or if output is CommonMark and CMARK_OPT_HARDBREAKS is enabled. - Updated man pages. --- man/man1/cmark.1 | 15 +++++++++++---- man/man3/cmark.3 | 43 +++++++++++++++++++++++++++---------------- src/cmark.h | 2 +- src/commonmark.c | 16 +++++++++++----- src/latex.c | 10 +++++++--- src/main.c | 3 +++ src/man.c | 14 +++++++++----- 7 files changed, 69 insertions(+), 34 deletions(-) diff --git a/man/man1/cmark.1 b/man/man1/cmark.1 index 9ea8d4c4a5..cfde3d7e98 100644 --- a/man/man1/cmark.1 +++ b/man/man1/cmark.1 @@ -25,13 +25,20 @@ Specify a column width to which to wrap the output. For no wrapping, use the value 0 (the default). This option currently only affects the commonmark, latex, and man renderers. .TP 12n +.B \-\-hardbreaks +Render soft breaks (newlines inside paragraphs in the CommonMark source) +as hard line breaks in the target format. If this option is specified, +hard wrapping is disabled for CommonMark output, regardless of the value +given with \-\-width. +.TP 12n +.B \-\-nobreaks +Render soft breaks as spaces. If this option is specified, +hard wrapping is disabled for all output formats, regardless of the value +given with \-\-width. +.TP 12n .B \-\-sourcepos Include source position attribute. .TP 12n -.B \-\-hardbreaks -Treat newlines as hard line breaks. If this option is specified, -hard wrapping is disabled, regardless of the value given with \-\-width. -.TP 12n .B \-\-normalize Consolidate adjacent text nodes. .TP 12n diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 283b9cc4c8..cf0874ac16 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 24, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "April 09, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -102,8 +102,8 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller\[cq]s responsibility -to assign. +other required properties, which it is the caller's responsibility to +assign. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -376,8 +376,7 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on -failure. +Sets the "tightness" of a list. Returns 1 on success, 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -424,31 +423,31 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_enter is set. +Returns the literal "on enter" text for a custom \f[I]node\f[], or an +empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP -Sets the literal text to render \[lq]on enter\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered after this -text. Returns 1 on success 0 on failure. +Sets the literal text to render "on enter" for a custom \f[I]node\f[]. +Any children of the node will be rendered after this text. Returns 1 on +success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_exit is set. +Returns the literal "on exit" text for a custom \f[I]node\f[], or an +empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP -Sets the literal text to render \[lq]on exit\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered before this -text. Returns 1 on success 0 on failure. +Sets the literal text to render "on exit" for a custom \f[I]node\f[]. +Any children of the node will be rendered before this text. Returns 1 on +success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -685,6 +684,18 @@ Suppress raw HTML and unsafe links (\f[C]javascript:\f[], \f[C]image/webp\f[] mime types). Raw HTML is replaced by a placeholder HTML comment. Unsafe links are replaced by empty strings. +.PP +.nf +\fC +.RS 0n +#define CMARK_OPT_NOBREAKS (1 << 4) +.RE +\f[] +.fi + +.PP +Render \f[C]softbreak\f[] elements as spaces. + .SS Options affecting parsing @@ -723,7 +734,7 @@ with the replacement character U+FFFD. .fi .PP -Convert straight quotes to curly, \[em] to em dashes, \[en] to en +Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en dashes. .SS diff --git a/src/cmark.h b/src/cmark.h index c98e18eb8b..40aa465e52 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -519,7 +519,7 @@ char *cmark_render_latex(cmark_node *root, int options, int width); */ #define CMARK_OPT_SAFE (1 << 3) -/** Render `softbreak` elements as spaces (HTML only). +/** Render `softbreak` elements as spaces. */ #define CMARK_OPT_NOBREAKS (1 << 4) diff --git a/src/commonmark.c b/src/commonmark.c index f5a352dcf3..ed6eff39a6 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -172,6 +172,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, char listmarker[LISTMARKER_SIZE]; char *emph_delim; bufsize_t marker_width; + bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) && + !(CMARK_OPT_HARDBREAKS & options); // Don't adjust tight list status til we've started the list. // Otherwise we loose the blank line between a paragraph and @@ -327,7 +329,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), true, NORMAL); + OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); break; case CMARK_NODE_LINEBREAK: @@ -338,10 +340,14 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_SOFTBREAK: - if (renderer->width == 0 && !(CMARK_OPT_HARDBREAKS & options)) { + if (CMARK_OPT_HARDBREAKS & options) { + LIT(" "); + CR(); + } else if (renderer->width == 0 && !(CMARK_OPT_HARDBREAKS & options) && + !(CMARK_OPT_NOBREAKS & options)) { CR(); } else { - OUT(" ", true, LITERAL); + OUT(" ", allow_wrap, LITERAL); } break; @@ -355,7 +361,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, if (code_len == 0 || code[0] == '`') { LIT(" "); } - OUT(cmark_node_get_literal(node), true, LITERAL); + OUT(cmark_node_get_literal(node), allow_wrap, LITERAL); if (code_len == 0 || code[code_len - 1] == '`') { LIT(" "); } @@ -435,7 +441,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, OUT(cmark_node_get_url(node), false, URL); title = cmark_node_get_title(node); if (safe_strlen(title) > 0) { - OUT(" \"", true, LITERAL); + OUT(" \"", allow_wrap, LITERAL); OUT(title, false, TITLE); LIT("\""); } diff --git a/src/latex.c b/src/latex.c index cd2f6f3e40..904a1b91f2 100644 --- a/src/latex.c +++ b/src/latex.c @@ -223,6 +223,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, cmark_list_type list_type; const char *roman_numerals[] = {"", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix", "x"}; + bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options); // avoid warning about unused parameter: (void)(options); @@ -334,7 +335,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), true, NORMAL); + OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); break; case CMARK_NODE_LINEBREAK: @@ -343,10 +344,13 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_SOFTBREAK: - if (renderer->width == 0) { + if (options & CMARK_OPT_HARDBREAKS) { + LIT("\\\\"); + CR(); + } else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) { CR(); } else { - OUT(" ", true, NORMAL); + OUT(" ", allow_wrap, NORMAL); } break; diff --git a/src/main.c b/src/main.c index fa18e03295..5716e18281 100644 --- a/src/main.c +++ b/src/main.c @@ -27,6 +27,7 @@ void print_usage() { printf(" --width WIDTH Specify wrap width (default 0 = nowrap)\n"); printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); + printf(" --nobreaks Render soft line breaks as spaces\n"); printf(" --safe Suppress raw HTML and dangerous URLs\n"); printf(" --smart Use smart punctuation\n"); printf(" --normalize Consolidate adjacent text nodes\n"); @@ -90,6 +91,8 @@ int main(int argc, char *argv[]) { options |= CMARK_OPT_SOURCEPOS; } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; + } else if (strcmp(argv[i], "--nobreaks") == 0) { + options |= CMARK_OPT_NOBREAKS; } else if (strcmp(argv[i], "--smart") == 0) { options |= CMARK_OPT_SMART; } else if (strcmp(argv[i], "--safe") == 0) { diff --git a/src/man.c b/src/man.c index 3d8bc204a2..1c76f68bb8 100644 --- a/src/man.c +++ b/src/man.c @@ -75,6 +75,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, cmark_node *tmp; int list_number; bool entering = (ev_type == CMARK_EVENT_ENTER); + bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options); // avoid unused parameter error: (void)(options); @@ -173,7 +174,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), true, NORMAL); + OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); break; case CMARK_NODE_LINEBREAK: @@ -182,16 +183,19 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_SOFTBREAK: - if (renderer->width == 0) { + if (options & CMARK_OPT_HARDBREAKS) { + LIT(".PD 0\n.P\n.PD"); + CR(); + } else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) { CR(); } else { - OUT(" ", true, LITERAL); + OUT(" ", allow_wrap, LITERAL); } break; case CMARK_NODE_CODE: LIT("\\f[C]"); - OUT(cmark_node_get_literal(node), true, NORMAL); + OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); LIT("\\f[]"); break; @@ -222,7 +226,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_LINK: if (!entering) { LIT(" ("); - OUT(cmark_node_get_url(node), true, URL); + OUT(cmark_node_get_url(node), allow_wrap, URL); LIT(")"); } break; -- cgit 0.0.5-2-1-g0f52 From 75f231503d2b5854f1ff517402d2751811295bf7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 9 Apr 2016 12:56:24 -0700 Subject: Updated spec test --- test/spec.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 1a4a7dc90d..bdaed436dd 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -4080,6 +4080,18 @@ Here are some list items that start with a blank line but are not empty: ```````````````````````````````` +When the list item starts with a blank line, the number of spaces +following the list marker doesn't change the required indentation: + +```````````````````````````````` example +- + foo +. +
                              +
                            • foo
                            • +
                            +```````````````````````````````` + A list item can begin with at most one blank line. In the following example, `foo` is not part of the list -- cgit 0.0.5-2-1-g0f52 From 1b765f4902a34383368878874cbc2d8134fbba34 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 9 Apr 2016 12:56:27 -0700 Subject: Correctly handle list marker followed only by spaces. This change allows us to pass the new test introduced in 75f231503d2b5854f1ff517402d2751811295bf7. Previously when a list marker was followed only by spaces, cmark expected the following content to be indented by the same number of spaces. But in this case we should treat the line just like a blank line and set list padding accordingly. --- src/blocks.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index f49ad4e53f..a22594edf7 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -945,7 +945,9 @@ static void open_new_blocks(cmark_parser *parser, } i = parser->column - save_column; - if (i >= 5 || i < 1) { + if (i >= 5 || i < 1 || + // only spaces after list marker: + S_is_line_end_char(peek_at(input, parser->offset)) ) { data->padding = matched + 1; parser->offset = save_offset; parser->column = save_column; -- cgit 0.0.5-2-1-g0f52 From cc20ded7c953d7f82c13f22063654eea85cad3dc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 9 Apr 2016 19:55:28 -0700 Subject: Use library functions to insert nodes in emphasis/link processing. Previously we did this manually, which introduces many places where errors can creep in. --- src/inlines.c | 74 +++++++++++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 45 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 8ff8131eca..77fd7ee44d 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -552,7 +552,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, cmark_node *closer_inl = closer->inl_text; bufsize_t opener_num_chars = opener_inl->as.literal.len; bufsize_t closer_num_chars = closer_inl->as.literal.len; - cmark_node *tmp, *emph, *first_child, *last_child; + cmark_node *tmp, *tmpnext, *emph; // calculate the actual number of characters used from this closer if (closer_num_chars < 3 || opener_num_chars < 3) { @@ -576,37 +576,22 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, delim = tmp_delim; } - first_child = opener_inl->next; - last_child = closer_inl->prev; + // create new emph or strong, and splice it in to our inlines + // between the opener and closer + emph = use_delims == 1 ? make_emph() : make_strong(); + + tmp = opener_inl->next; + while (tmp && tmp != closer_inl) { + tmpnext = tmp->next; + cmark_node_append_child(emph, tmp); + tmp = tmpnext; + } + cmark_node_insert_after(opener_inl, emph); // if opener has 0 characters, remove it and its associated inline if (opener_num_chars == 0) { - // replace empty opener inline with emph - cmark_chunk_free(&(opener_inl->as.literal)); - emph = opener_inl; - emph->type = use_delims == 1 ? CMARK_NODE_EMPH : CMARK_NODE_STRONG; - // remove opener from list + cmark_node_free(opener_inl); remove_delimiter(subj, opener); - } else { - // create new emph or strong, and splice it in to our inlines - // between the opener and closer - emph = use_delims == 1 ? make_emph() : make_strong(); - emph->parent = opener_inl->parent; - emph->prev = opener_inl; - opener_inl->next = emph; - } - - // push children below emph - emph->next = closer_inl; - closer_inl->prev = emph; - emph->first_child = first_child; - emph->last_child = last_child; - - // fix children pointers - first_child->prev = NULL; - last_child->next = NULL; - for (tmp = first_child; tmp != NULL; tmp = tmp->next) { - tmp->parent = emph; } // if closer has 0 characters, remove it and its associated inline @@ -786,7 +771,7 @@ noMatch: } // Return a link, an image, or a literal close bracket. -static cmark_node *handle_close_bracket(subject *subj, cmark_node *parent) { +static cmark_node *handle_close_bracket(subject *subj) { bufsize_t initial_pos; bufsize_t starturl, endurl, starttitle, endtitle, endall; bufsize_t n; @@ -800,6 +785,7 @@ static cmark_node *handle_close_bracket(subject *subj, cmark_node *parent) { cmark_node *inl; cmark_chunk raw_label; int found_label; + cmark_node *tmp, *tmpnext; advance(subj); // advance past ] initial_pos = subj->pos; @@ -897,24 +883,22 @@ noMatch: return make_str(cmark_chunk_literal("]")); match: - inl = opener->inl_text; - inl->type = is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK; - cmark_chunk_free(&inl->as.literal); - inl->first_child = link_text; - process_emphasis(subj, opener); + inl = make_simple(is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK); inl->as.link.url = url; inl->as.link.title = title; - inl->next = NULL; - if (link_text) { - cmark_node *tmp; - link_text->prev = NULL; - for (tmp = link_text; tmp->next != NULL; tmp = tmp->next) { - tmp->parent = inl; - } - tmp->parent = inl; - inl->last_child = tmp; + cmark_node_insert_before(opener->inl_text, inl); + // Add link text: + tmp = opener->inl_text->next; + while (tmp) { + tmpnext = tmp->next; + cmark_node_append_child(inl, tmp); + tmp = tmpnext; } - parent->last_child = inl; + + // Free the bracket [: + cmark_node_free(opener->inl_text); + + process_emphasis(subj, opener); // Now, if we have a link, we also want to deactivate earlier link // delimiters. (This code can be removed if we decide to allow links @@ -1047,7 +1031,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { push_delimiter(subj, '[', true, false, new_inl); break; case ']': - new_inl = handle_close_bracket(subj, parent); + new_inl = handle_close_bracket(subj); break; case '!': advance(subj); -- cgit 0.0.5-2-1-g0f52 From ecee91aebe7a34c4b069a2da11bd2f7ef5be83ac Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 9 Apr 2016 19:58:05 -0700 Subject: Fixed whitespace. --- src/inlines.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 77fd7ee44d..b410218c31 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -576,17 +576,17 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, delim = tmp_delim; } - // create new emph or strong, and splice it in to our inlines - // between the opener and closer - emph = use_delims == 1 ? make_emph() : make_strong(); - - tmp = opener_inl->next; - while (tmp && tmp != closer_inl) { - tmpnext = tmp->next; - cmark_node_append_child(emph, tmp); - tmp = tmpnext; - } - cmark_node_insert_after(opener_inl, emph); + // create new emph or strong, and splice it in to our inlines + // between the opener and closer + emph = use_delims == 1 ? make_emph() : make_strong(); + + tmp = opener_inl->next; + while (tmp && tmp != closer_inl) { + tmpnext = tmp->next; + cmark_node_append_child(emph, tmp); + tmp = tmpnext; + } + cmark_node_insert_after(opener_inl, emph); // if opener has 0 characters, remove it and its associated inline if (opener_num_chars == 0) { -- cgit 0.0.5-2-1-g0f52 From 2aa269f8dcbc0b091a92f89045ff7f6b16ffa09b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 9 Apr 2016 20:01:20 -0700 Subject: Reformatted. --- src/blocks.c | 187 +++++++++++++++++++++++++------------------------------ src/chunk.h | 8 +-- src/commonmark.c | 12 ++-- src/latex.c | 2 +- src/scanners.c | 52 +++++++++------- 5 files changed, 127 insertions(+), 134 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index a22594edf7..32dffa2912 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -128,7 +128,7 @@ static bool is_blank(cmark_strbuf *s, bufsize_t offset) { } static CMARK_INLINE bool can_contain(cmark_node_type parent_type, - cmark_node_type child_type) { + cmark_node_type child_type) { return (parent_type == CMARK_NODE_DOCUMENT || parent_type == CMARK_NODE_BLOCK_QUOTE || parent_type == CMARK_NODE_ITEM || @@ -158,9 +158,8 @@ static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { cmark_strbuf_putc(&node->string_content, ' '); } } - cmark_strbuf_put(&node->string_content, - ch->data + parser->offset, - ch->len - parser->offset); + cmark_strbuf_put(&node->string_content, ch->data + parser->offset, + ch->len - parser->offset); } static void remove_trailing_blank_lines(cmark_strbuf *ln) { @@ -555,7 +554,7 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, if (buffer < end && *buffer == '\r') { buffer++; if (buffer == end) - parser->last_buffer_ended_with_cr = true; + parser->last_buffer_ended_with_cr = true; } if (buffer < end && *buffer == '\n') buffer++; @@ -627,16 +626,16 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); if (columns) { - parser->partially_consumed_tab = chars_to_tab > count; - chars_to_advance = MIN(count, chars_to_tab); - parser->column += chars_to_advance; + parser->partially_consumed_tab = chars_to_tab > count; + chars_to_advance = MIN(count, chars_to_tab); + parser->column += chars_to_advance; parser->offset += (parser->partially_consumed_tab ? 0 : 1); - count -= chars_to_advance; + count -= chars_to_advance; } else { - parser->partially_consumed_tab = false; - parser->column += chars_to_tab; - parser->offset += 1; - count -= 1; + parser->partially_consumed_tab = false; + parser->column += chars_to_tab; + parser->offset += 1; + count -= 1; } } else { parser->partially_consumed_tab = false; @@ -651,9 +650,7 @@ static bool S_last_child_is_open(cmark_node *container) { return container->last_child && container->last_child->open; } -static bool parse_block_quote_prefix(cmark_parser *parser, - cmark_chunk *input) -{ +static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { bool res = false; bufsize_t matched = 0; @@ -672,34 +669,30 @@ static bool parse_block_quote_prefix(cmark_parser *parser, return res; } -static bool parse_node_item_prefix(cmark_parser *parser, - cmark_chunk *input, - cmark_node *container) -{ +static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, + cmark_node *container) { bool res = false; if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { S_advance_offset(parser, input, container->as.list.marker_offset + - container->as.list.padding, + container->as.list.padding, true); res = true; } else if (parser->blank && container->first_child != NULL) { // if container->first_child is NULL, then the opening line // of the list item was blank after the list marker; in this // case, we are done with the list item. - S_advance_offset(parser, input, - parser->first_nonspace - parser->offset, false); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); res = true; } return res; } -static bool parse_code_block_prefix(cmark_parser *parser, - cmark_chunk *input, - cmark_node *container, - bool *should_continue) -{ +static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, + cmark_node *container, + bool *should_continue) { bool res = false; if (!container->as.code.fenced) { // indented @@ -707,8 +700,8 @@ static bool parse_code_block_prefix(cmark_parser *parser, S_advance_offset(parser, input, CODE_INDENT, true); res = true; } else if (parser->blank) { - S_advance_offset(parser, input, - parser->first_nonspace - parser->offset, false); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); res = true; } } else { // fenced @@ -741,25 +734,24 @@ static bool parse_code_block_prefix(cmark_parser *parser, } static bool parse_html_block_prefix(cmark_parser *parser, - cmark_node *container) -{ + cmark_node *container) { bool res = false; int html_block_type = container->as.html_block_type; assert(html_block_type >= 1 && html_block_type <= 7); switch (html_block_type) { - case 1: - case 2: - case 3: - case 4: - case 5: - // these types of blocks can accept blanks - res = true; - break; - case 6: - case 7: - res = !parser->blank; - break; + case 1: + case 2: + case 3: + case 4: + case 5: + // these types of blocks can accept blanks + res = true; + break; + case 6: + case 7: + res = !parser->blank; + break; } return res; @@ -773,10 +765,8 @@ static bool parse_html_block_prefix(cmark_parser *parser, * * Returns: The last matching node, or NULL */ -static cmark_node *check_open_blocks(cmark_parser *parser, - cmark_chunk *input, - bool *all_matched) -{ +static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, + bool *all_matched) { bool should_continue = true; *all_matched = false; cmark_node *container = parser->root; @@ -789,31 +779,31 @@ static cmark_node *check_open_blocks(cmark_parser *parser, S_find_first_nonspace(parser, input); switch (cont_type) { - case CMARK_NODE_BLOCK_QUOTE: - if (!parse_block_quote_prefix(parser, input)) - goto done; - break; - case CMARK_NODE_ITEM: - if (!parse_node_item_prefix(parser, input, container)) - goto done; - break; - case CMARK_NODE_CODE_BLOCK: - if (!parse_code_block_prefix(parser, input, container, &should_continue)) - goto done; - break; - case CMARK_NODE_HEADING: - // a heading can never contain more than one line + case CMARK_NODE_BLOCK_QUOTE: + if (!parse_block_quote_prefix(parser, input)) goto done; - case CMARK_NODE_HTML_BLOCK: - if (!parse_html_block_prefix(parser, container)) - goto done; - break; - case CMARK_NODE_PARAGRAPH: - if (parser->blank) - goto done; - break; - default: - break; + break; + case CMARK_NODE_ITEM: + if (!parse_node_item_prefix(parser, input, container)) + goto done; + break; + case CMARK_NODE_CODE_BLOCK: + if (!parse_code_block_prefix(parser, input, container, &should_continue)) + goto done; + break; + case CMARK_NODE_HEADING: + // a heading can never contain more than one line + goto done; + case CMARK_NODE_HTML_BLOCK: + if (!parse_html_block_prefix(parser, container)) + goto done; + break; + case CMARK_NODE_PARAGRAPH: + if (parser->blank) + goto done; + break; + default: + break; } } @@ -831,11 +821,8 @@ done: return container; } -static void open_new_blocks(cmark_parser *parser, - cmark_node **container, - cmark_chunk *input, - bool all_matched) -{ +static void open_new_blocks(cmark_parser *parser, cmark_node **container, + cmark_chunk *input, bool all_matched) { bool indented; cmark_list *data = NULL; bool maybe_lazy = parser->current->type == CMARK_NODE_PARAGRAPH; @@ -861,7 +848,7 @@ static void open_new_blocks(cmark_parser *parser, S_advance_offset(parser, input, 1, true); } *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, - parser->offset + 1); + parser->offset + 1); } else if (!indented && (matched = scan_atx_heading_start( input, parser->first_nonspace))) { @@ -887,7 +874,7 @@ static void open_new_blocks(cmark_parser *parser, } else if (!indented && (matched = scan_open_code_fence( input, parser->first_nonspace))) { *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, - parser->first_nonspace + 1); + parser->first_nonspace + 1); (*container)->as.code.fenced = true; (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace); (*container)->as.code.fence_length = matched; @@ -904,7 +891,7 @@ static void open_new_blocks(cmark_parser *parser, (matched = scan_html_block_start_7( input, parser->first_nonspace))))) { *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK, - parser->first_nonspace + 1); + parser->first_nonspace + 1); (*container)->as.html_block_type = matched; // note, we don't adjust parser->offset because the tag is part of the // text @@ -917,11 +904,10 @@ static void open_new_blocks(cmark_parser *parser, S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if (!indented && !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && - (matched = - scan_thematic_break(input, parser->first_nonspace))) { + (matched = scan_thematic_break(input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext heading: *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, - parser->first_nonspace + 1); + parser->first_nonspace + 1); S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if ((matched = parse_list_marker(input, parser->first_nonspace, &data)) && @@ -940,18 +926,18 @@ static void open_new_blocks(cmark_parser *parser, save_column = parser->column; while (parser->column - save_column <= 5 && - S_is_space_or_tab(peek_at(input, parser->offset))) { + S_is_space_or_tab(peek_at(input, parser->offset))) { S_advance_offset(parser, input, 1, true); } i = parser->column - save_column; if (i >= 5 || i < 1 || - // only spaces after list marker: - S_is_line_end_char(peek_at(input, parser->offset)) ) { + // only spaces after list marker: + S_is_line_end_char(peek_at(input, parser->offset))) { data->padding = matched + 1; - parser->offset = save_offset; - parser->column = save_column; - parser->partially_consumed_tab = save_partially_consumed_tab; + parser->offset = save_offset; + parser->column = save_column; + parser->partially_consumed_tab = save_partially_consumed_tab; if (i > 0) { S_advance_offset(parser, input, 1, true); } @@ -967,21 +953,21 @@ static void open_new_blocks(cmark_parser *parser, if (cont_type != CMARK_NODE_LIST || !lists_match(&((*container)->as.list), data)) { *container = add_child(parser, *container, CMARK_NODE_LIST, - parser->first_nonspace + 1); + parser->first_nonspace + 1); memcpy(&((*container)->as.list), data, sizeof(*data)); } // add the list item *container = add_child(parser, *container, CMARK_NODE_ITEM, - parser->first_nonspace + 1); + parser->first_nonspace + 1); /* TODO: static */ memcpy(&((*container)->as.list), data, sizeof(*data)); free(data); } else if (indented && !maybe_lazy && !parser->blank) { S_advance_offset(parser, input, CODE_INDENT, true); *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, - parser->offset + 1); + parser->offset + 1); (*container)->as.code.fenced = false; (*container)->as.code.fence_char = 0; (*container)->as.code.fence_length = 0; @@ -1002,11 +988,9 @@ static void open_new_blocks(cmark_parser *parser, } } -static void add_text_to_container (cmark_parser *parser, - cmark_node *container, - cmark_node *last_matched_container, - cmark_chunk *input) -{ +static void add_text_to_container(cmark_parser *parser, cmark_node *container, + cmark_node *last_matched_container, + cmark_chunk *input) { cmark_node *tmp; // what remains at parser->offset is a text line. add the text to the // appropriate container. @@ -1042,8 +1026,7 @@ static void add_text_to_container (cmark_parser *parser, // then treat this as a "lazy continuation line" and add it to // the open paragraph. if (parser->current != last_matched_container && - container == last_matched_container && - !parser->blank && + container == last_matched_container && !parser->blank && parser->current->type == CMARK_NODE_PARAGRAPH) { add_line(parser->current, input, parser); } else { // not a lazy continuation @@ -1101,13 +1084,15 @@ static void add_text_to_container (cmark_parser *parser, container->as.heading.setext == false) { chop_trailing_hashtags(input); } - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); add_line(container, input, parser); } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); add_line(container, input, parser); } diff --git a/src/chunk.h b/src/chunk.h index b25831b881..700749285a 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -48,8 +48,8 @@ static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { cmark_chunk_rtrim(c); } -static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, - bufsize_t offset) { +static CMARK_INLINE bufsize_t + cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); return p ? (bufsize_t)(p - ch->data) : ch->len; @@ -96,8 +96,8 @@ static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { return c; } -static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, - bufsize_t pos, bufsize_t len) { +static CMARK_INLINE cmark_chunk + cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; } diff --git a/src/commonmark.c b/src/commonmark.c index ed6eff39a6..9f971b2eb8 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -23,7 +23,7 @@ // Functions to convert cmark_nodes to commonmark strings. static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, - int32_t c, unsigned char nextc) { + int32_t c, unsigned char nextc) { bool needs_escaping = false; bool follows_digit = renderer->buffer->size > 0 && @@ -173,7 +173,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, char *emph_delim; bufsize_t marker_width; bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) && - !(CMARK_OPT_HARDBREAKS & options); + !(CMARK_OPT_HARDBREAKS & options); // Don't adjust tight list status til we've started the list. // Otherwise we loose the blank line between a paragraph and @@ -274,9 +274,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, // use indented form if no info, and code doesn't // begin or end with a blank line, and code isn't // first thing in a list item - if (info_len == 0 && - (code_len > 2 && !isspace((unsigned char)code[0]) && - !(isspace((unsigned char)code[code_len - 1]) && isspace((unsigned char)code[code_len - 2]))) && + if (info_len == 0 && (code_len > 2 && !isspace((unsigned char)code[0]) && + !(isspace((unsigned char)code[code_len - 1]) && + isspace((unsigned char)code[code_len - 2]))) && !(node->prev == NULL && node->parent && node->parent->type == CMARK_NODE_ITEM)) { LIT(" "); @@ -344,7 +344,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, LIT(" "); CR(); } else if (renderer->width == 0 && !(CMARK_OPT_HARDBREAKS & options) && - !(CMARK_OPT_NOBREAKS & options)) { + !(CMARK_OPT_NOBREAKS & options)) { CR(); } else { OUT(" ", allow_wrap, LITERAL); diff --git a/src/latex.c b/src/latex.c index 904a1b91f2..a8c25c5aad 100644 --- a/src/latex.c +++ b/src/latex.c @@ -20,7 +20,7 @@ #define LIST_NUMBER_STRING_SIZE 20 static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, - int32_t c, unsigned char nextc) { + int32_t c, unsigned char nextc) { if (escape == LITERAL) { cmark_render_code_point(renderer, c); return; diff --git a/src/scanners.c b/src/scanners.c index 712093c8fb..25a122ff49 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -8258,37 +8258,45 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230, + 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230, - 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254, + 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, + 230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224, + 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, + 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 <= '`') { -- cgit 0.0.5-2-1-g0f52 From 42ea18599f66a3af00887280770aa9479c453b21 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 26 Apr 2016 21:39:51 -0700 Subject: Clarify that it's the caller's responsibility to free the buffer... returned by cmark_render_html etc. Closes #124. --- man/man3/cmark.3 | 17 +++++++++++------ src/cmark.h | 9 +++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index cf0874ac16..7808aa9236 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "April 09, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "April 26, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -599,32 +599,37 @@ Rendering \fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP -Render a \f[I]node\f[] tree as XML. +Render a \f[I]node\f[] tree as XML. It is the caller's responsibility to +free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to -add an appropriate header and footer. +add an appropriate header and footer. It is the caller's responsibility +to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a groff man page, without the header. +Render a \f[I]node\f[] tree as a groff man page, without the header. It +is the caller's responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a commonmark document. +Render a \f[I]node\f[] tree as a commonmark document. It is the caller's +responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_latex\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a LaTeX document. +Render a \f[I]node\f[] tree as a LaTeX document. It is the caller's +responsibility to free the returned buffer. .SS Options diff --git a/src/cmark.h b/src/cmark.h index 40aa465e52..2f4e60355f 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -465,28 +465,33 @@ cmark_node *cmark_parse_file(FILE *f, int options); * ## Rendering */ -/** Render a 'node' tree as XML. +/** Render a 'node' tree as XML. It is the caller's responsibility + * to free the returned buffer. */ CMARK_EXPORT char *cmark_render_xml(cmark_node *root, int options); /** Render a 'node' tree as an HTML fragment. It is up to the user - * to add an appropriate header and footer. + * to add an appropriate header and footer. It is the caller's + * responsibility to free the returned buffer. */ CMARK_EXPORT char *cmark_render_html(cmark_node *root, int options); /** Render a 'node' tree as a groff man page, without the header. + * It is the caller's responsibility to free the returned buffer. */ CMARK_EXPORT char *cmark_render_man(cmark_node *root, int options, int width); /** Render a 'node' tree as a commonmark document. + * It is the caller's responsibility to free the returned buffer. */ CMARK_EXPORT char *cmark_render_commonmark(cmark_node *root, int options, int width); /** Render a 'node' tree as a LaTeX document. + * It is the caller's responsibility to free the returned buffer. */ CMARK_EXPORT char *cmark_render_latex(cmark_node *root, int options, int width); -- cgit 0.0.5-2-1-g0f52 From f8271ed0f523f61dae39b2c9edcda7758af2b84d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 May 2016 12:33:29 -0700 Subject: Better documentation of memory-freeing responsibilities. in cmark.h and its man page. Closes #124. --- man/man3/cmark.3 | 17 +++++++++++------ src/cmark.h | 14 ++++++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 7808aa9236..5642e59762 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "April 26, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "May 14, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -15,7 +15,8 @@ Simple Interface .PP Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length \f[I]len\f[]) from CommonMark Markdown to HTML, returning a -null\-terminated, UTF\-8\-encoded string. +null\-terminated, UTF\-8\-encoded string. It is the caller's +responsibility to free the returned buffer. .SS Node Structure @@ -224,8 +225,9 @@ typedef enum { .PP Creates a new iterator starting at \f[I]root\f[]. The current node and -event type are undefined until \f[C]cmark_iter_next\f[] is called for -the first time. +event type are undefined until \f[I]cmark_iter_next\f[] is called for +the first time. The memory allocated for the iterator should be released +using \f[I]cmark_iter_free\f[] when it is no longer needed. .PP \fIvoid\f[] \fBcmark_iter_free\f[](\fIcmark_iter *iter\f[]) @@ -583,14 +585,17 @@ Finish parsing and return a pointer to a tree of nodes. .PP Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]. -Returns a pointer to a tree of nodes. +Returns a pointer to a tree of nodes. The memory allocated for the node +tree should be released using \f[I]cmark_node_free\f[] when it is no +longer needed. .PP \fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[]) .PP Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a -tree of nodes. +tree of nodes. The memory allocated for the node tree should be released +using \f[I]cmark_node_free\f[] when it is no longer needed. .SS Rendering diff --git a/src/cmark.h b/src/cmark.h index 2f4e60355f..911ceb722a 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -21,7 +21,8 @@ extern "C" { /** Convert 'text' (assumed to be a UTF-8 encoded string with length * 'len') from CommonMark Markdown to HTML, returning a null-terminated, - * UTF-8-encoded string. + * UTF-8-encoded string. It is the caller's responsibility + * to free the returned buffer. */ CMARK_EXPORT char *cmark_markdown_to_html(const char *text, size_t len, int options); @@ -179,7 +180,9 @@ typedef enum { } cmark_event_type; /** Creates a new iterator starting at 'root'. The current node and event - * type are undefined until `cmark_iter_next` is called for the first time. + * type are undefined until 'cmark_iter_next' is called for the first time. + * The memory allocated for the iterator should be released using + * 'cmark_iter_free' when it is no longer needed. */ CMARK_EXPORT cmark_iter *cmark_iter_new(cmark_node *root); @@ -450,13 +453,16 @@ CMARK_EXPORT cmark_node *cmark_parser_finish(cmark_parser *parser); /** Parse a CommonMark document in 'buffer' of length 'len'. - * Returns a pointer to a tree of nodes. + * Returns a pointer to a tree of nodes. The memory allocated for + * the node tree should be released using 'cmark_node_free' + * when it is no longer needed. */ CMARK_EXPORT cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); /** Parse a CommonMark document in file 'f', returning a pointer to - * a tree of nodes. + * a tree of nodes. The memory allocated for the node tree should be + * released using 'cmark_node_free' when it is no longer needed. */ CMARK_EXPORT cmark_node *cmark_parse_file(FILE *f, int options); -- cgit 0.0.5-2-1-g0f52 From 6ac50ca5f3edc478a9593f721c8f1b095a5cdb18 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 17 May 2016 20:39:53 +0200 Subject: Fix tests under MinGW - Fix PATH for api_test, see: https://cmake.org/pipermail/cmake/2009-May/029423.html - DLL is named libcmark.dll under MinGW. --- test/CMakeLists.txt | 6 +++--- test/cmark.py | 17 ++++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fbfd1d0b45..211bf69150 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -13,9 +13,9 @@ add_test(NAME api_test COMMAND api_test) if (WIN32) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/src WIN_DLL_DIR) - set_tests_properties(api_test PROPERTIES - ENVIRONMENT "PATH=${WIN_DLL_DIR};$ENV{PATH}" - ) + set(NEWPATH "${WIN_DLL_DIR};$ENV{PATH}") + string(REPLACE ";" "\\;" NEWPATH "${NEWPATH}") + set_tests_properties(api_test PROPERTIES ENVIRONMENT "PATH=${NEWPATH}") set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.bat") else(WIN32) set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.sh") diff --git a/test/cmark.py b/test/cmark.py index 1110860306..787c310132 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -24,15 +24,18 @@ class CMark: else: sysname = platform.system() if sysname == 'Darwin': - libname = "libcmark.dylib" + libnames = [ "libcmark.dylib" ] elif sysname == 'Windows': - libname = "cmark.dll" + libnames = [ "cmark.dll", "libcmark.dll" ] else: - libname = "libcmark.so" - if library_dir: - libpath = os.path.join(library_dir, libname) - else: - libpath = os.path.join("build", "src", libname) + libnames = [ "libcmark.so" ] + if not library_dir: + library_dir = os.path.join("build", "src") + for libname in libnames: + candidate = os.path.join(library_dir, libname) + if os.path.isfile(candidate): + libpath = candidate + break cmark = CDLL(libpath) markdown = cmark.cmark_markdown_to_html markdown.restype = c_char_p -- cgit 0.0.5-2-1-g0f52 From f2172561d3e1c518c02ec770e37b17531534ba96 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Thu, 26 May 2016 08:07:19 -0700 Subject: Add 2016 to copyright I thought I had an outdated version of the binary because it printed 2015 for the version string. --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 5716e18281..ff752e56bf 100644 --- a/src/main.c +++ b/src/main.c @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) { for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { printf("cmark %s", CMARK_VERSION_STRING); - printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n"); + printf(" - CommonMark converter\n(C) 2014-2016 John MacFarlane\n"); exit(0); } else if (strcmp(argv[i], "--sourcepos") == 0) { options |= CMARK_OPT_SOURCEPOS; -- cgit 0.0.5-2-1-g0f52 From e135caaaf0567c691d1af9d99d753efb4533c732 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Wed, 1 Jun 2016 01:06:09 +0200 Subject: inlines: Remove unused variable "link_text" --- src/inlines.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index b410218c31..6acbb44bde 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -781,7 +781,6 @@ static cmark_node *handle_close_bracket(subject *subj) { cmark_chunk url_chunk, title_chunk; cmark_chunk url, title; delimiter *opener; - cmark_node *link_text; cmark_node *inl; cmark_chunk raw_label; int found_label; @@ -811,7 +810,6 @@ static cmark_node *handle_close_bracket(subject *subj) { // If we got here, we matched a potential link/image text. is_image = opener->delim_char == '!'; - link_text = opener->inl_text->next; // Now we check to see if it's a link/image. -- cgit 0.0.5-2-1-g0f52 From ae2165147ad1582f716468aab57dadb8aac6dd86 Mon Sep 17 00:00:00 2001 From: Benedict Cohen Date: Wed, 1 Jun 2016 14:20:40 +0100 Subject: - Changed type from int to size_t to fix implicit type conversion warning --- src/latex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/latex.c b/src/latex.c index a8c25c5aad..8a66678678 100644 --- a/src/latex.c +++ b/src/latex.c @@ -155,7 +155,7 @@ static link_type get_link_type(cmark_node *node) { size_t title_len, url_len; cmark_node *link_text; char *realurl; - int realurllen; + size_t realurllen; bool isemail = false; if (node->type != CMARK_NODE_LINK) { -- cgit 0.0.5-2-1-g0f52 From 41f1e5aaea98011ce650a59a765549fff5f4468a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 1 Jun 2016 14:03:11 -0700 Subject: Coerce realurllen to int. This is an alternate solution for pull request #132, which introduced a new warning on the comparison: latex.c:191:20: warning: comparison of integers of different signs: 'size_t' (aka 'unsigned long') and 'bufsize_t' (aka 'int') [-Wsign-compare] if (realurllen == link_text->as.literal.len && ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ --- src/latex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/latex.c b/src/latex.c index 8a66678678..db33822a53 100644 --- a/src/latex.c +++ b/src/latex.c @@ -155,7 +155,7 @@ static link_type get_link_type(cmark_node *node) { size_t title_len, url_len; cmark_node *link_text; char *realurl; - size_t realurllen; + int realurllen; bool isemail = false; if (node->type != CMARK_NODE_LINK) { @@ -169,7 +169,7 @@ static link_type get_link_type(cmark_node *node) { return INTERNAL_LINK; } - url_len = safe_strlen(url); + url_len = (int)safe_strlen(url); if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) { return NO_LINK; } -- cgit 0.0.5-2-1-g0f52 From be020e1928f2d0750573730483dd4cb40140935a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 1 Jun 2016 14:24:19 -0700 Subject: Fixed round trip tests. Previously they actually ran cmark instead of the round-trip version, since there was a bug in setting the ROUNDTRIP variable. Now round trip tests fail! This was unnoticed before. See #131. --- test/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 211bf69150..09af8a4b24 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,9 +16,9 @@ if (WIN32) set(NEWPATH "${WIN_DLL_DIR};$ENV{PATH}") string(REPLACE ";" "\\;" NEWPATH "${NEWPATH}") set_tests_properties(api_test PROPERTIES ENVIRONMENT "PATH=${NEWPATH}") - set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.bat") + set(ROUNDTRIP "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.bat") else(WIN32) - set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.sh") + set(ROUNDTRIP "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.sh") endif(WIN32) IF (PYTHONINTERP_FOUND) -- cgit 0.0.5-2-1-g0f52 From 60bd289c18e06e199260ee374ef29e3017bc4a90 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 1 Jun 2016 14:58:58 -0700 Subject: renderer: no_linebreaks instead of no_wrap. We generally want this option to prohibit any breaking in things like headers (not just wraps, but softbreaks). --- src/commonmark.c | 10 ++++++---- src/render.c | 2 +- src/render.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 9f971b2eb8..42a5f19eba 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -258,9 +258,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, } LIT(" "); renderer->begin_content = true; - renderer->no_wrap = true; + renderer->no_linebreaks = true; } else { - renderer->no_wrap = false; + renderer->no_linebreaks = false; BLANKLINE(); } break; @@ -343,8 +343,10 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, if (CMARK_OPT_HARDBREAKS & options) { LIT(" "); CR(); - } else if (renderer->width == 0 && !(CMARK_OPT_HARDBREAKS & options) && - !(CMARK_OPT_NOBREAKS & options)) { + } else if (!renderer->no_linebreaks && + renderer->width == 0 && + !(CMARK_OPT_HARDBREAKS & options) && + !(CMARK_OPT_NOBREAKS & options)) { CR(); } else { OUT(" ", allow_wrap, LITERAL); diff --git a/src/render.c b/src/render.c index 50f03e6aee..9e59fa33f9 100644 --- a/src/render.c +++ b/src/render.c @@ -28,7 +28,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, cmark_chunk remainder = cmark_chunk_literal(""); int k = renderer->buffer->size - 1; - wrap = wrap && !renderer->no_wrap; + wrap = wrap && !renderer->no_linebreaks; if (renderer->in_tight_list_item && renderer->need_cr > 1) { renderer->need_cr = 1; diff --git a/src/render.h b/src/render.h index 479936ade3..c3acf6b09c 100644 --- a/src/render.h +++ b/src/render.h @@ -20,7 +20,7 @@ struct cmark_renderer { bufsize_t last_breakable; bool begin_line; bool begin_content; - bool no_wrap; + bool no_linebreaks; bool in_tight_list_item; void (*outc)(struct cmark_renderer *, cmark_escaping, int32_t, unsigned char); void (*cr)(struct cmark_renderer *); -- cgit 0.0.5-2-1-g0f52 From 54a96ac0ad071ba90a1eff05fad5376f4ba2463e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 09:43:50 -0700 Subject: spec_tests.py: exit code is sum of failures and errors. --- test/spec_tests.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index 1521a826e4..365ff7555b 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -140,7 +140,4 @@ if __name__ == "__main__": for test in tests: do_test(test, args.normalize, result_counts) out("{pass} passed, {fail} failed, {error} errored, {skip} skipped\n".format(**result_counts)) - if result_counts['fail'] == 0 and result_counts['error'] == 0: - exit(0) - else: - exit(1) + exit(result_counts['fail'] + result_counts['error']) -- cgit 0.0.5-2-1-g0f52 From 940b204d7e23ea2cc6d8987e0a55e13040c901c2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 09:45:02 -0700 Subject: Updated spec.txt (no new or changed test cases). --- test/spec.txt | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 84 insertions(+), 6 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index bdaed436dd..5f712ffe52 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -13,12 +13,90 @@ license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' Markdown is a plain text format for writing structured documents, based on conventions used for indicating formatting in email and usenet posts. It was developed in 2004 by John Gruber, who wrote -the first Markdown-to-HTML converter in perl, and it soon became -widely used in websites. By 2014 there were dozens of -implementations in many languages. Some of them extended basic -Markdown syntax with conventions for footnotes, definition lists, -tables, and other constructs, and some allowed output not just in -HTML but in LaTeX and many other formats. +the first Markdown-to-HTML converter in Perl, and it soon became +ubiquitous. In the next decade, dozens of implementations were +developed in many languages. Some extended the original +Markdown syntax with conventions for footnotes, tables, and +other document elements. Some allowed Markdown documents to be +rendered in formats other than HTML. Websites like Reddit, +StackOverflow, and GitHub had millions of people using Markdown. +And Markdown started to be used beyond the web, to author books, +articles, slide shows, letters, and lecture notes. + +What distinguishes Markdown from many other lightweight markup +syntaxes, which are often easier to write, is its readability. +As Gruber writes: + +> The overriding design goal for Markdown's formatting syntax is +> to make it as readable as possible. The idea is that a +> Markdown-formatted document should be publishable as-is, as +> plain text, without looking like it's been marked up with tags +> or formatting instructions. +> () + +The point can be illustrated by comparing a sample of +[AsciiDoc](http://www.methods.co.nz/asciidoc/) with +an equivalent sample of Markdown. Here is a sample of +AsciiDoc from the AsciiDoc manual: + +``` +1. List item one. ++ +List item one continued with a second paragraph followed by an +Indented block. ++ +................. +$ ls *.sh +$ mv *.sh ~/tmp +................. ++ +List item continued with a third paragraph. + +2. List item two continued with an open block. ++ +-- +This paragraph is part of the preceding list item. + +a. This list is nested and does not require explicit item +continuation. ++ +This paragraph is part of the preceding list item. + +b. List item b. + +This paragraph belongs to item two of the outer list. +-- +``` + +And here is the equivalent in Markdown: +``` +1. List item one. + + List item one continued with a second paragraph followed by an + Indented block. + + $ ls *.sh + $ mv *.sh ~/tmp + + List item continued with a third paragraph. + +2. List item two continued with an open block. + + This paragraph is part of the preceding list item. + + 1. This list is nested and does not require explicit item continuation. + + This paragraph is part of the preceding list item. + + 2. List item b. + + This paragraph belongs to item two of the outer list. +``` + +The AsciiDoc version is, arguably, easier to write. You don't need +to worry about indentation. But the Markdown version is much easier +to read. The nesting of list items is apparent to the eye in the +source, not just in the processed document. ## Why is a spec needed? -- cgit 0.0.5-2-1-g0f52 From 05dac79983ac1897a0908d49e782bffe307252ae Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 09:57:01 -0700 Subject: spec_test.py - parameterize do_test with converter. --- test/spec_tests.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/spec_tests.py b/test/spec_tests.py index 365ff7555b..9974fe0572 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -38,8 +38,8 @@ def out(str): def print_test_header(headertext, example_number, start_line, end_line): out("Example %d (lines %d-%d) %s\n" % (example_number,start_line,end_line,headertext)) -def do_test(test, normalize, result_counts): - [retcode, actual_html, err] = cmark.to_html(test['markdown']) +def do_test(converter, test, normalize, result_counts): + [retcode, actual_html, err] = converter(test['markdown']) if retcode == 0: expected_html = test['html'] unicode_error = None @@ -135,9 +135,9 @@ if __name__ == "__main__": exit(0) else: skipped = len(all_tests) - len(tests) - cmark = CMark(prog=args.program, library_dir=args.library_dir) + converter = CMark(prog=args.program, library_dir=args.library_dir).to_html result_counts = {'pass': 0, 'fail': 0, 'error': 0, 'skip': skipped} for test in tests: - do_test(test, args.normalize, result_counts) + do_test(converter, test, args.normalize, result_counts) out("{pass} passed, {fail} failed, {error} errored, {skip} skipped\n".format(**result_counts)) exit(result_counts['fail'] + result_counts['error']) -- cgit 0.0.5-2-1-g0f52 From f4a82cf6a5f553c2c886de02c23b41f06f8a19c6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 10:38:10 -0700 Subject: cmark.py: added to_commonmark (for round-trip tests). --- test/cmark.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/test/cmark.py b/test/cmark.py index 787c310132..60eacb1fe2 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from ctypes import CDLL, c_char_p, c_long +from ctypes import CDLL, c_char_p, c_long, c_void_p from subprocess import * import platform import os @@ -11,16 +11,34 @@ def pipe_through_prog(prog, text): [result, err] = p1.communicate(input=text.encode('utf-8')) return [p1.returncode, result.decode('utf-8'), err] -def use_library(lib, text): +def to_html(lib, text): + markdown = lib.cmark_markdown_to_html + markdown.restype = c_char_p + markdown.argtypes = [c_char_p, c_long, c_long] textbytes = text.encode('utf-8') textlen = len(textbytes) - return [0, lib(textbytes, textlen, 0).decode('utf-8'), ''] + result = markdown(textbytes, textlen, 0).decode('utf-8') + return [0, result, ''] + +def to_commonmark(lib, text): + textbytes = text.encode('utf-8') + textlen = len(textbytes) + parse_document = lib.cmark_parse_document + parse_document.restype = c_void_p + parse_document.argtypes = [c_char_p, c_long, c_long] + render_commonmark = lib.cmark_render_commonmark + render_commonmark.restype = c_char_p + render_commonmark.argtypes = [c_void_p, c_long, c_long] + node = parse_document(textbytes, textlen, 0) + result = render_commonmark(node, 0, 0).decode('utf-8') + return [0, result, ''] class CMark: def __init__(self, prog=None, library_dir=None): self.prog = prog if prog: self.to_html = lambda x: pipe_through_prog(prog, x) + self.to_commonmark = lambda x: pipe_through_prog(prog + ' -t commonmark', x) else: sysname = platform.system() if sysname == 'Darwin': @@ -37,7 +55,6 @@ class CMark: libpath = candidate break cmark = CDLL(libpath) - markdown = cmark.cmark_markdown_to_html - markdown.restype = c_char_p - markdown.argtypes = [c_char_p, c_long] - self.to_html = lambda x: use_library(markdown, x) + self.to_html = lambda x: to_html(cmark, x) + self.to_commonmark = lambda x: to_commonmark(cmark, x) + -- cgit 0.0.5-2-1-g0f52 From 8a53ee9b579fef9a75bd25f881827f28739a1f68 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 10:43:47 -0700 Subject: Added new roundtrip_tests.py. This replaces the old use of simple shell scripts. It is much faster, and more flexible. (We will be able to do custom normalization and skip certain tests.) --- test/CMakeLists.txt | 7 ++++--- test/roundtrip.bat | 1 - test/roundtrip.sh | 2 -- test/roundtrip_tests.py | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) delete mode 100755 test/roundtrip.bat delete mode 100755 test/roundtrip.sh create mode 100644 test/roundtrip_tests.py diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 09af8a4b24..dd850b6d94 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -48,9 +48,10 @@ IF (PYTHONINTERP_FOUND) add_test(roundtriptest_executable ${PYTHON_EXECUTABLE} - "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" - "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program" - "${ROUNDTRIP} ${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" + "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip_tests.py" + "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" + "--no-normalize" + "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) add_test(regressiontest_executable diff --git a/test/roundtrip.bat b/test/roundtrip.bat deleted file mode 100755 index ac4c9eda3c..0000000000 --- a/test/roundtrip.bat +++ /dev/null @@ -1 +0,0 @@ -"%1" -t commonmark | "%1" diff --git a/test/roundtrip.sh b/test/roundtrip.sh deleted file mode 100755 index ec4f1357d8..0000000000 --- a/test/roundtrip.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -"$1" -t commonmark | "$1" diff --git a/test/roundtrip_tests.py b/test/roundtrip_tests.py new file mode 100644 index 0000000000..8becb08ba0 --- /dev/null +++ b/test/roundtrip_tests.py @@ -0,0 +1,38 @@ +import sys +from spec_tests import get_tests, do_test +from cmark import CMark +import argparse + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Run cmark roundtrip tests.') + parser.add_argument('-p', '--program', dest='program', nargs='?', default=None, + help='program to test') + parser.add_argument('-s', '--spec', dest='spec', nargs='?', default='spec.txt', + help='path to spec') + parser.add_argument('-P', '--pattern', dest='pattern', nargs='?', + default=None, help='limit to sections matching regex pattern') + parser.add_argument('--library-dir', dest='library_dir', nargs='?', + default=None, help='directory containing dynamic library') + parser.add_argument('--no-normalize', dest='normalize', + action='store_const', const=False, default=True, + help='do not normalize HTML') + parser.add_argument('-n', '--number', type=int, default=None, + help='only consider the test with the given number') + args = parser.parse_args(sys.argv[1:]) + +spec = sys.argv[1] + +def converter(md): + cmark = CMark(prog=args.program, library_dir=args.library_dir) + [ec, result, err] = cmark.to_commonmark(md) + if ec == 0: + return cmark.to_html(result) + else: + return [ec, result, err] + +tests = get_tests(args.spec) +result_counts = {'pass': 0, 'fail': 0, 'error': 0, 'skip': 0} +for test in tests: + do_test(converter, test, args.normalize, result_counts) + +exit(result_counts['fail'] + result_counts['error']) -- cgit 0.0.5-2-1-g0f52 From e59b38ee67eea5d62066df29edf025f53096f46e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 10:50:07 -0700 Subject: roundtrip tests: remove spurious failures. In the commonmark writer we separate lists, and lists and indented code, using a dummy HTML comment rather than two blank lines (this is more portable). So in evaluating the round-trip tests, we now strip out these comments. We also normalize HTML to avoid issues having to do with line breaks. --- test/CMakeLists.txt | 1 - test/roundtrip_tests.py | 11 ++++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dd850b6d94..3b23cff4c5 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -50,7 +50,6 @@ IF (PYTHONINTERP_FOUND) ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip_tests.py" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" - "--no-normalize" "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) diff --git a/test/roundtrip_tests.py b/test/roundtrip_tests.py index 8becb08ba0..a52aa8d839 100644 --- a/test/roundtrip_tests.py +++ b/test/roundtrip_tests.py @@ -1,3 +1,4 @@ +import re import sys from spec_tests import get_tests, do_test from cmark import CMark @@ -26,7 +27,15 @@ def converter(md): cmark = CMark(prog=args.program, library_dir=args.library_dir) [ec, result, err] = cmark.to_commonmark(md) if ec == 0: - return cmark.to_html(result) + [ec, html, err] = cmark.to_html(result) + if ec == 0: + # In the commonmark writer we insert dummy HTML + # comments between lists, and between lists and code + # blocks. Strip these out, since the spec uses + # two blank lines instead: + return [ec, re.sub('\n', '', html), ''] + else: + return [ec, html, err] else: return [ec, result, err] -- cgit 0.0.5-2-1-g0f52 From 45bfbcc9d2a82bb79d57aead9e51099e71e187e9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 2 Jun 2016 11:04:16 -0700 Subject: commonmark renderer: fixed code block as first in list item. We don't want a blank line before a code block when it's the first thing in a list item. --- src/commonmark.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 42a5f19eba..6862828001 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -171,6 +171,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, size_t info_len, code_len; char listmarker[LISTMARKER_SIZE]; char *emph_delim; + bool first_in_list_item; bufsize_t marker_width; bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) && !(CMARK_OPT_HARDBREAKS & options); @@ -206,7 +207,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_LIST: if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK || node->next->type == CMARK_NODE_LIST)) { - // this ensures that a following code block or list will be + // this ensures that a following indented code block or list will be // inteprereted correctly. CR(); LIT(""); @@ -266,7 +267,12 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_CODE_BLOCK: - BLANKLINE(); + first_in_list_item = node->prev == NULL && node->parent && + node->parent->type == CMARK_NODE_ITEM; + + if (!first_in_list_item) { + BLANKLINE(); + } info = cmark_node_get_fence_info(node); info_len = safe_strlen(info); code = cmark_node_get_literal(node); @@ -277,8 +283,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, if (info_len == 0 && (code_len > 2 && !isspace((unsigned char)code[0]) && !(isspace((unsigned char)code[code_len - 1]) && isspace((unsigned char)code[code_len - 2]))) && - !(node->prev == NULL && node->parent && - node->parent->type == CMARK_NODE_ITEM)) { + !first_in_list_item) { LIT(" "); cmark_strbuf_puts(renderer->prefix, " "); OUT(cmark_node_get_literal(node), false, LITERAL); -- cgit 0.0.5-2-1-g0f52 From 75658002e907063c7e615b2630b873656d2411ba Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Mon, 6 Jun 2016 18:15:21 +0200 Subject: Fix character type detection in commonmark.c - Implement cmark_isalpha. - Check for ASCII character before implicit cast to char. - Use internal ctype functions in commonmark.c. Fixes test failures on Windows and undefined behavior. --- src/cmark_ctype.c | 2 ++ src/cmark_ctype.h | 2 ++ src/commonmark.c | 17 +++++++++-------- src/latex.c | 1 - 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/cmark_ctype.c b/src/cmark_ctype.c index c9a9b0e28f..c0c4d5b037 100644 --- a/src/cmark_ctype.c +++ b/src/cmark_ctype.c @@ -40,3 +40,5 @@ int cmark_isalnum(char c) { } int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; } + +int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; } diff --git a/src/cmark_ctype.h b/src/cmark_ctype.h index f80394670b..9a0761851d 100644 --- a/src/cmark_ctype.h +++ b/src/cmark_ctype.h @@ -17,6 +17,8 @@ int cmark_isalnum(char c); int cmark_isdigit(char c); +int cmark_isalpha(char c); + #ifdef __cplusplus } #endif diff --git a/src/commonmark.c b/src/commonmark.c index 6862828001..a5c1ccf477 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -2,7 +2,6 @@ #include #include #include -#include #include "config.h" #include "cmark.h" @@ -31,24 +30,26 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, char encoded[ENCODED_SIZE]; needs_escaping = + c < 0x80 && escape != LITERAL && ((escape == NORMAL && (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || - (c == '&' && isalpha(nextc)) || (c == '!' && nextc == '[') || + (c == '&' && cmark_isalpha(nextc)) || (c == '!' && nextc == '[') || (renderer->begin_content && (c == '-' || c == '+' || c == '=') && // begin_content doesn't get set to false til we've passed digits // at the beginning of line, so... !follows_digit) || (renderer->begin_content && (c == '.' || c == ')') && follows_digit && (nextc == 0 || cmark_isspace(nextc))))) || - (escape == URL && (c == '`' || c == '<' || c == '>' || isspace(c) || - c == '\\' || c == ')' || c == '(')) || + (escape == URL && (c == '`' || c == '<' || c == '>' || + cmark_isspace(c) || c == '\\' || c == ')' || + c == '(')) || (escape == TITLE && (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\'))); if (needs_escaping) { - if (isspace(c)) { + if (cmark_isspace(c)) { // use percent encoding for spaces snprintf(encoded, ENCODED_SIZE, "%%%2x", c); cmark_strbuf_puts(renderer->buffer, encoded); @@ -280,9 +281,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, // use indented form if no info, and code doesn't // begin or end with a blank line, and code isn't // first thing in a list item - if (info_len == 0 && (code_len > 2 && !isspace((unsigned char)code[0]) && - !(isspace((unsigned char)code[code_len - 1]) && - isspace((unsigned char)code[code_len - 2]))) && + if (info_len == 0 && (code_len > 2 && !cmark_isspace(code[0]) && + !(cmark_isspace(code[code_len - 1]) && + cmark_isspace(code[code_len - 2]))) && !first_in_list_item) { LIT(" "); cmark_strbuf_puts(renderer->prefix, " "); diff --git a/src/latex.c b/src/latex.c index db33822a53..1546baa38b 100644 --- a/src/latex.c +++ b/src/latex.c @@ -2,7 +2,6 @@ #include #include #include -#include #include "config.h" #include "cmark.h" -- cgit 0.0.5-2-1-g0f52 From 73829be73e3c77eb75c6b234c6626815da7da7bc Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Mon, 6 Jun 2016 18:36:15 +0200 Subject: Fix ctypes in Python FFI calls This didn't cause problems so far because - all types are 32-bit on 32-bit systems and - arguments are passed in registers on x86-64. The wrong types could cause crashes on other platforms, though. --- test/cmark.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/cmark.py b/test/cmark.py index 60eacb1fe2..4be85a3b0f 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from ctypes import CDLL, c_char_p, c_long, c_void_p +from ctypes import CDLL, c_char_p, c_size_t, c_int, c_void_p from subprocess import * import platform import os @@ -14,7 +14,7 @@ def pipe_through_prog(prog, text): def to_html(lib, text): markdown = lib.cmark_markdown_to_html markdown.restype = c_char_p - markdown.argtypes = [c_char_p, c_long, c_long] + markdown.argtypes = [c_char_p, c_size_t, c_int] textbytes = text.encode('utf-8') textlen = len(textbytes) result = markdown(textbytes, textlen, 0).decode('utf-8') @@ -25,10 +25,10 @@ def to_commonmark(lib, text): textlen = len(textbytes) parse_document = lib.cmark_parse_document parse_document.restype = c_void_p - parse_document.argtypes = [c_char_p, c_long, c_long] + parse_document.argtypes = [c_char_p, c_size_t, c_int] render_commonmark = lib.cmark_render_commonmark render_commonmark.restype = c_char_p - render_commonmark.argtypes = [c_void_p, c_long, c_long] + render_commonmark.argtypes = [c_void_p, c_int, c_int] node = parse_document(textbytes, textlen, 0) result = render_commonmark(node, 0, 0).decode('utf-8') return [0, result, ''] -- cgit 0.0.5-2-1-g0f52 From b2107ae4f05d7fe4388d37025105005592d32ef7 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 23 May 2016 16:43:13 +0200 Subject: buffer: proper safety checks for unbounded memory The previous work for unbounded memory usage and overflows on the buffer API had several shortcomings: 1. The total size of the buffer was limited by arbitrarily small precision on the storage type for buffer indexes (typedef'd as `bufsize_t`). This is not a good design pattern in secure applications, particualarly since it requires the addition of helper functions to cast to/from the native `size` types and the custom type for the buffer, and check for overflows. 2. The library was calling `abort` on overflow and memory allocation failures. This is not a good practice for production libraries, since it turns a potential RCE into a trivial, guaranteed DoS to the whole application that is linked against the library. It defeats the whole point of performing overflow or allocation checks when the checks will crash the library and the enclosing program anyway. 3. The default size limits for buffers were essentially unbounded (capped to the precision of the storage type) and could lead to DoS attacks by simple memory exhaustion (particularly critical in 32-bit platforms). This is not a good practice for a library that handles arbitrary user input. Hence, this patchset provides slight (but in my opinion critical) improvements on this area, copying some of the patterns we've used in the past for high throughput, security sensitive Markdown parsers: 1. The storage type for buffer sizes is now platform native (`ssize_t`). Ideally, this would be a `size_t`, but several parts of the code expect buffer indexes to be possibly negative. Either way, switching to a `size` type is an strict improvement, particularly in 64-bit platforms. All the helpers that assured that values cannot escape the `size` range have been removed, since they are superfluous. 2. The overflow checks have been removed. Instead, the maximum size for a buffer has been set to a safe value for production usage (32mb) that can be proven not to overflow in practice. Users that need to parse particularly large Markdown documents can increase this value. A static, compile-time check has been added to ensure that the maximum buffer size cannot overflow on any growth operations. 3. The library no longer aborts on buffer overflow. The CMark library now follows the convention of other Markdown implementations (such as Hoedown and Sundown) and silently handles buffer overflows and allocation failures by dropping data from the buffer. The result is that pathological Markdown documents that try to exploit the library will instead generate truncated (but valid, and safe) outputs. All tests after these small refactorings have been verified to pass. --- NOTE: Regarding 32 bit overflows, generating test cases that crash the library is trivial (any input document larger than 2gb will crash CMark), but most Python implementations have issues with large strings to begin with, so a test case cannot be added to the pathological tests suite, since it's written in Python. --- src/blocks.c | 2 +- src/buffer.c | 93 ++++++++++++++++++++++---------------------------------- src/buffer.h | 37 +++++++++++----------- src/chunk.h | 4 +-- src/commonmark.c | 17 +++++------ src/latex.c | 5 ++- src/render.c | 2 +- 7 files changed, 71 insertions(+), 89 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 32dffa2912..c778c7a33a 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -528,7 +528,7 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, process = true; } - chunk_len = cmark_strbuf_check_bufsize(eol - buffer); + chunk_len = (eol - buffer); if (process) { if (parser->linebuf->size > 0) { cmark_strbuf_put(parser->linebuf, buffer, chunk_len); diff --git a/src/buffer.c b/src/buffer.c index 4efa97b561..80ca49a7ab 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "config.h" #include "cmark_ctype.h" @@ -28,68 +29,48 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) { cmark_strbuf_grow(buf, initial_size); } -void cmark_strbuf_overflow_err() { - fprintf(stderr, "String buffer overflow"); - abort(); +static CMARK_INLINE bool S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { + return cmark_strbuf_grow(buf, buf->size + add); } -static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, size_t add) { - size_t target_size = (size_t)buf->size + add; - - if (target_size < add /* Integer overflow. */ - || target_size > BUFSIZE_MAX /* Truncation overflow. */ - ) { - cmark_strbuf_overflow_err(); - return; /* unreachable */ - } - - if ((bufsize_t)target_size >= buf->asize) - cmark_strbuf_grow(buf, (bufsize_t)target_size); -} +#if BUFSIZE_MAX > (SIZE_MAX / 4) +# error "unsafe value for BUFSIZE_MAX" +#endif -void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { - unsigned char *new_ptr; +bool cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { + assert(target_size > 0); if (target_size < buf->asize) - return; - - if (buf->asize == 0) { - new_ptr = NULL; - } else { - new_ptr = buf->ptr; - } + return true; + + /* + * Do not allow string buffers to grow past this "safe" value. + * + * Note that this is a soft cap to prevent unbounded memory growth: + * in practice, the buffer can get larger than this value because we + * overgrow it by 50% + * + * Note that there are no overflow checks for the realloc because + * the value of BUFSIZE_MAX is always assured to be impossible + * to overflow on both 32 and 64 bit systems, since it will never + * be larger than 1/4th of our address space. + */ + if (target_size > BUFSIZE_MAX) + return false; /* Oversize the buffer by 50% to guarantee amortized linear time * complexity on append operations. */ - size_t new_size = (size_t)target_size + (size_t)target_size / 2; - - /* Account for terminating null byte. */ + bufsize_t new_size = target_size + target_size / 2; new_size += 1; - - /* round allocation up to multiple of 8 */ new_size = (new_size + 7) & ~7; - if (new_size < (size_t)target_size /* Integer overflow. */ - || new_size > BUFSIZE_MAX /* Truncation overflow. */ - ) { - if (target_size >= BUFSIZE_MAX) { - /* No space for terminating null byte. */ - cmark_strbuf_overflow_err(); - return; /* unreachable */ - } - /* Oversize by the maximum possible amount. */ - new_size = BUFSIZE_MAX; - } + unsigned char *new_ptr = realloc(buf->asize ? buf->ptr : NULL, new_size); + if (!new_ptr) + return false; - new_ptr = (unsigned char *)realloc(new_ptr, new_size); - - if (!new_ptr) { - perror("realloc in cmark_strbuf_grow"); - abort(); - } - - buf->asize = (bufsize_t)new_size; + buf->asize = new_size; buf->ptr = new_ptr; + return true; } bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } @@ -117,8 +98,8 @@ void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, cmark_strbuf_clear(buf); } else { if (data != buf->ptr) { - if (len >= buf->asize) - cmark_strbuf_grow(buf, len); + if (len >= buf->asize && !cmark_strbuf_grow(buf, len)) + return; memmove(buf->ptr, data, len); } buf->size = len; @@ -128,21 +109,21 @@ void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { cmark_strbuf_set(buf, (const unsigned char *)string, - string ? cmark_strbuf_safe_strlen(string) : 0); + string ? strlen(string) : 0); } void cmark_strbuf_putc(cmark_strbuf *buf, int c) { - S_strbuf_grow_by(buf, 1); + if (!S_strbuf_grow_by(buf, 1)) + return; buf->ptr[buf->size++] = (unsigned char)(c & 0xFF); buf->ptr[buf->size] = '\0'; } void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len) { - if (len <= 0) + if (len <= 0 || !S_strbuf_grow_by(buf, len)) return; - S_strbuf_grow_by(buf, len); memmove(buf->ptr + buf->size, data, len); buf->size += len; buf->ptr[buf->size] = '\0'; @@ -150,7 +131,7 @@ void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { cmark_strbuf_put(buf, (const unsigned char *)string, - cmark_strbuf_safe_strlen(string)); + strlen(string)); } void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, diff --git a/src/buffer.h b/src/buffer.h index 6fd0cae61c..ad4f341440 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -5,13 +5,15 @@ #include #include #include +#include +#include #include "config.h" #ifdef __cplusplus extern "C" { #endif -typedef int bufsize_t; +typedef ssize_t bufsize_t; typedef struct { unsigned char *ptr; @@ -22,7 +24,22 @@ extern unsigned char cmark_strbuf__initbuf[]; #define GH_BUF_INIT \ { cmark_strbuf__initbuf, 0, 0 } -#define BUFSIZE_MAX INT_MAX + +/* + * Maximum size for memory storage on any given `cmark_strbuf` object. + * + * This is a "safe" value to prevent unbounded memory growth when + * parsing arbitrarily large (and potentially malicious) documents. + * + * It is currently set to 32mb, which is a reasonable default for + * production applications. If you need to parse documents larger than + * that, you can increase this value up to `SSIZE_MAX / 2` (which in + * practice resolves to 1/4th of the total address space for the program). + * + * Anything larger than that is a security threat and hence static checks + * will prevent CMark from compiling. + */ +#define BUFSIZE_MAX (32 * 1024 * 1024) /** * Initialize a cmark_strbuf structure. @@ -35,7 +52,7 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size); /** * Grow the buffer to hold at least `target_size` bytes. */ -void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); +bool cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); void cmark_strbuf_free(cmark_strbuf *buf); void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); @@ -72,20 +89,6 @@ void cmark_strbuf_trim(cmark_strbuf *buf); void cmark_strbuf_normalize_whitespace(cmark_strbuf *s); void cmark_strbuf_unescape(cmark_strbuf *s); -/* Print error and abort. */ -void cmark_strbuf_overflow_err(void); - -static CMARK_INLINE bufsize_t cmark_strbuf_check_bufsize(size_t size) { - if (size > BUFSIZE_MAX) { - cmark_strbuf_overflow_err(); - } - return (bufsize_t)size; -} - -static CMARK_INLINE bufsize_t cmark_strbuf_safe_strlen(const char *str) { - return cmark_strbuf_check_bufsize(strlen(str)); -} - #ifdef __cplusplus } #endif diff --git a/src/chunk.h b/src/chunk.h index 700749285a..234a4f3454 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -83,7 +83,7 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { c->data = NULL; c->alloc = 0; } else { - c->len = cmark_strbuf_safe_strlen(str); + c->len = strlen(str); c->data = (unsigned char *)malloc(c->len + 1); c->alloc = 1; memcpy(c->data, str, c->len + 1); @@ -91,7 +91,7 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { } static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { - bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0; + bufsize_t len = data ? strlen(data) : 0; cmark_chunk c = {(unsigned char *)data, len, 0}; return c; } diff --git a/src/commonmark.c b/src/commonmark.c index a5c1ccf477..f1589f5768 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -11,7 +11,6 @@ #include "scanners.h" #include "render.h" -#define safe_strlen(s) cmark_strbuf_safe_strlen(s) #define OUT(s, wrap, escaping) renderer->out(renderer, s, wrap, escaping) #define LIT(s) renderer->out(renderer, s, false, LITERAL) #define CR() renderer->cr(renderer) @@ -67,7 +66,7 @@ static int longest_backtick_sequence(const char *code) { int longest = 0; int current = 0; size_t i = 0; - size_t code_len = safe_strlen(code); + size_t code_len = strlen(code); while (i <= code_len) { if (code[i] == '`') { current++; @@ -86,7 +85,7 @@ static int shortest_unused_backtick_sequence(const char *code) { int32_t used = 1; int current = 0; size_t i = 0; - size_t code_len = safe_strlen(code); + size_t code_len = strlen(code); while (i <= code_len) { if (code[i] == '`') { current++; @@ -233,7 +232,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number, list_delim == CMARK_PAREN_DELIM ? ")" : ".", list_number < 10 ? " " : " "); - marker_width = safe_strlen(listmarker); + marker_width = strlen(listmarker); } if (entering) { if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { @@ -275,9 +274,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, BLANKLINE(); } info = cmark_node_get_fence_info(node); - info_len = safe_strlen(info); + info_len = strlen(info); code = cmark_node_get_literal(node); - code_len = safe_strlen(code); + code_len = strlen(code); // use indented form if no info, and code doesn't // begin or end with a blank line, and code isn't // first thing in a list item @@ -361,7 +360,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_CODE: code = cmark_node_get_literal(node); - code_len = safe_strlen(code); + code_len = strlen(code); numticks = shortest_unused_backtick_sequence(code); for (i = 0; i < numticks; i++) { LIT("`"); @@ -431,7 +430,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, LIT("]("); OUT(cmark_node_get_url(node), false, URL); title = cmark_node_get_title(node); - if (safe_strlen(title) > 0) { + if (strlen(title) > 0) { LIT(" \""); OUT(title, false, TITLE); LIT("\""); @@ -448,7 +447,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, LIT("]("); OUT(cmark_node_get_url(node), false, URL); title = cmark_node_get_title(node); - if (safe_strlen(title) > 0) { + if (strlen(title) > 0) { OUT(" \"", allow_wrap, LITERAL); OUT(title, false, TITLE); LIT("\""); diff --git a/src/latex.c b/src/latex.c index 1546baa38b..7c3decda00 100644 --- a/src/latex.c +++ b/src/latex.c @@ -11,7 +11,6 @@ #include "scanners.h" #include "render.h" -#define safe_strlen(s) cmark_strbuf_safe_strlen(s) #define OUT(s, wrap, escaping) renderer->out(renderer, s, wrap, escaping) #define LIT(s) renderer->out(renderer, s, false, LITERAL) #define CR() renderer->cr(renderer) @@ -168,13 +167,13 @@ static link_type get_link_type(cmark_node *node) { return INTERNAL_LINK; } - url_len = (int)safe_strlen(url); + url_len = strlen(url); if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) { return NO_LINK; } const char *title = cmark_node_get_title(node); - title_len = safe_strlen(title); + title_len = strlen(title); // if it has a title, we can't treat it as an autolink: if (title_len == 0) { diff --git a/src/render.c b/src/render.c index 9e59fa33f9..b1ed2e419f 100644 --- a/src/render.c +++ b/src/render.c @@ -19,7 +19,7 @@ static CMARK_INLINE void S_blankline(cmark_renderer *renderer) { static void S_out(cmark_renderer *renderer, const char *source, bool wrap, cmark_escaping escape) { - int length = cmark_strbuf_safe_strlen(source); + int length = strlen(source); unsigned char nextc; int32_t c; int i = 0; -- cgit 0.0.5-2-1-g0f52 From 0eafc0af940646ab581e47e63090c1692a3525aa Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Tue, 24 May 2016 11:39:52 +0200 Subject: test: Add tests for memory exhaustion --- test/CMakeLists.txt | 5 +++++ test/exhaustion_tests.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 test/exhaustion_tests.py diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3b23cff4c5..098321ba81 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,6 +38,11 @@ IF (PYTHONINTERP_FOUND) "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) + add_test(exhaustion_tests_executable + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/exhaustion_tests.py" + "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" + ) + add_test(spectest_executable ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" ) diff --git a/test/exhaustion_tests.py b/test/exhaustion_tests.py new file mode 100644 index 0000000000..876bb15e08 --- /dev/null +++ b/test/exhaustion_tests.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import argparse +import sys +import os +import tempfile +from subprocess import * + +DATA = bytes(""" +Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn. Ya r'luh hlirghor uaaah ah, nilgh'ri fhtagnnyth ilyaa gof'nn ilyaa nog zhro hupadgh yaor, ah hupadgh ph'zhro h'uh'e Yoggoth vulgtm uh'e hai mnahn'. Phlegeth fm'latgh lw'nafh Cthulhu kn'a nog 'bthnk ya ehye fm'latgh y-n'gha, y-r'luh 'fhalmaoth gnaiih ep hai ep nog lloig grah'n hafh'drn zhroyar, mnahn' uh'e nnnch' chtenff uln f'ooboshu orr'e k'yarnak hlirgh. H'vulgtm ng'bthnk n'ghft stell'bsna hai nnnkadishtu lloig nglui nilgh'ri ron, nagnaiih ronnyth phlegeth f'ep ooboshuor mg y-Hastur shagg, f'Chaugnar Faugn bug uaaah ehye kn'a geb orr'e lw'nafh. Ilyaa shtunggli uh'e naflhrii k'yarnak ya, nog k'yarnak wgah'n shagg nnnhlirgh, gof'nnyar r'luh Azathoth wgah'n. +""", 'UTF-8') + +# CMark has a default maximum buffer growth size of 32mb, +# which means that the total size of the buffer cannot be +# larger than (32 + 16)mb in total, accounting for overgrowth +MAX_FILE_SIZE = 48.0 # mb + +def exhaustion(prog): + with tempfile.TemporaryFile() as tmp: + p1 = Popen(prog.split(), stdout=tmp, stdin=PIPE) + written, read = 0, 0 + + for i in range(512 * 512): + p1.stdin.write(DATA) + written += len(DATA) + + p1.stdin.close() + res = p1.wait() + written = written / (1024.0 * 1024.0) + read = tmp.tell() / (1024.0 * 1024.0) + + if res != 0: + raise Exception("CMark did not exit properly") + if written <= read: + raise Exception("Output was not truncated (%fmb -> %fmb)" % (written, read)) + if read > MAX_FILE_SIZE: + raise Exception("Output was not truncated at the expected range (%fmb)" % (read)) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Run cmark exhaustion tests') + parser.add_argument('--program', dest='program', nargs='?', default=None, + help='program to test') + args = parser.parse_args(sys.argv[1:]) + exhaustion(args.program) -- cgit 0.0.5-2-1-g0f52 From 42b07cc9c8d2e6251d190e5ea0d13fd66cb51e6d Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Tue, 24 May 2016 15:50:44 +0200 Subject: cmake: Global handler for OOM situations --- src/blocks.c | 59 ++++++++++++++++++++---------------------------- src/buffer.c | 48 ++++++++++++--------------------------- src/buffer.h | 18 +-------------- src/chunk.h | 13 +++++------ src/cmark.c | 30 ++++++++++++++++++++++++ src/cmark.h | 14 ++++++++++++ src/inlines.c | 39 ++++++-------------------------- src/iterator.c | 5 +--- src/main.c | 3 ++- src/memory.h | 12 ++++++++++ src/node.c | 2 +- src/references.c | 20 ++++++++-------- test/CMakeLists.txt | 5 ---- test/exhaustion_tests.py | 45 ------------------------------------ 14 files changed, 122 insertions(+), 191 deletions(-) create mode 100644 src/memory.h delete mode 100644 test/exhaustion_tests.py diff --git a/src/blocks.c b/src/blocks.c index c778c7a33a..07eacc6157 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -48,15 +48,13 @@ static cmark_node *make_block(cmark_node_type tag, int start_line, int start_column) { cmark_node *e; - e = (cmark_node *)calloc(1, sizeof(*e)); - if (e != NULL) { - e->type = tag; - e->open = true; - e->start_line = start_line; - e->start_column = start_column; - e->end_line = start_line; - cmark_strbuf_init(&e->string_content, 32); - } + e = (cmark_node *)cmark_calloc(1, sizeof(*e)); + e->type = tag; + e->open = true; + e->start_line = start_line; + e->start_column = start_column; + e->end_line = start_line; + cmark_strbuf_init(&e->string_content, 32); return e; } @@ -68,10 +66,10 @@ static cmark_node *make_document() { } cmark_parser *cmark_parser_new(int options) { - cmark_parser *parser = (cmark_parser *)malloc(sizeof(cmark_parser)); + cmark_parser *parser = (cmark_parser *)cmark_calloc(1, sizeof(cmark_parser)); cmark_node *document = make_document(); - cmark_strbuf *line = (cmark_strbuf *)malloc(sizeof(cmark_strbuf)); - cmark_strbuf *buf = (cmark_strbuf *)malloc(sizeof(cmark_strbuf)); + cmark_strbuf *line = (cmark_strbuf *)cmark_calloc(1, sizeof(cmark_strbuf)); + cmark_strbuf *buf = (cmark_strbuf *)cmark_calloc(1, sizeof(cmark_strbuf)); cmark_strbuf_init(line, 256); cmark_strbuf_init(buf, 0); @@ -395,17 +393,13 @@ static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, if (!cmark_isspace(peek_at(input, pos))) { return 0; } - data = (cmark_list *)calloc(1, sizeof(*data)); - if (data == NULL) { - return 0; - } else { - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_BULLET_LIST; - data->bullet_char = c; - data->start = 1; - data->delimiter = CMARK_PERIOD_DELIM; - data->tight = false; - } + data = (cmark_list *)cmark_calloc(1, sizeof(*data)); + data->marker_offset = 0; // will be adjusted later + data->list_type = CMARK_BULLET_LIST; + data->bullet_char = c; + data->start = 1; + data->delimiter = CMARK_PERIOD_DELIM; + data->tight = false; } else if (cmark_isdigit(c)) { int start = 0; int digits = 0; @@ -425,21 +419,16 @@ static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, if (!cmark_isspace(peek_at(input, pos))) { return 0; } - data = (cmark_list *)calloc(1, sizeof(*data)); - if (data == NULL) { - return 0; - } else { - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_ORDERED_LIST; - data->bullet_char = 0; - data->start = start; - data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); - data->tight = false; - } + data = (cmark_list *)cmark_calloc(1, sizeof(*data)); + data->marker_offset = 0; // will be adjusted later + data->list_type = CMARK_ORDERED_LIST; + data->bullet_char = 0; + data->start = start; + data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); + data->tight = false; } else { return 0; } - } else { return 0; } diff --git a/src/buffer.c b/src/buffer.c index 80ca49a7ab..2ac3b04e7f 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -10,6 +10,7 @@ #include "config.h" #include "cmark_ctype.h" #include "buffer.h" +#include "memory.h" /* Used as default value for cmark_strbuf->ptr so that people can always * assume ptr is non-NULL and zero terminated even for new cmark_strbufs. @@ -29,34 +30,18 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) { cmark_strbuf_grow(buf, initial_size); } -static CMARK_INLINE bool S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { - return cmark_strbuf_grow(buf, buf->size + add); +static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { + cmark_strbuf_grow(buf, buf->size + add); } -#if BUFSIZE_MAX > (SIZE_MAX / 4) -# error "unsafe value for BUFSIZE_MAX" -#endif - -bool cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { assert(target_size > 0); if (target_size < buf->asize) - return true; - - /* - * Do not allow string buffers to grow past this "safe" value. - * - * Note that this is a soft cap to prevent unbounded memory growth: - * in practice, the buffer can get larger than this value because we - * overgrow it by 50% - * - * Note that there are no overflow checks for the realloc because - * the value of BUFSIZE_MAX is always assured to be impossible - * to overflow on both 32 and 64 bit systems, since it will never - * be larger than 1/4th of our address space. - */ - if (target_size > BUFSIZE_MAX) - return false; + return; + + if (target_size > (bufsize_t)(SIZE_MAX / 4)) + cmark_trigger_oom(); /* Oversize the buffer by 50% to guarantee amortized linear time * complexity on append operations. */ @@ -64,13 +49,10 @@ bool cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { new_size += 1; new_size = (new_size + 7) & ~7; - unsigned char *new_ptr = realloc(buf->asize ? buf->ptr : NULL, new_size); - if (!new_ptr) - return false; + unsigned char *new_ptr = cmark_realloc(buf->asize ? buf->ptr : NULL, new_size); buf->asize = new_size; buf->ptr = new_ptr; - return true; } bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } @@ -98,8 +80,8 @@ void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, cmark_strbuf_clear(buf); } else { if (data != buf->ptr) { - if (len >= buf->asize && !cmark_strbuf_grow(buf, len)) - return; + if (len >= buf->asize) + cmark_strbuf_grow(buf, len); memmove(buf->ptr, data, len); } buf->size = len; @@ -113,17 +95,17 @@ void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { } void cmark_strbuf_putc(cmark_strbuf *buf, int c) { - if (!S_strbuf_grow_by(buf, 1)) - return; + S_strbuf_grow_by(buf, 1); buf->ptr[buf->size++] = (unsigned char)(c & 0xFF); buf->ptr[buf->size] = '\0'; } void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len) { - if (len <= 0 || !S_strbuf_grow_by(buf, len)) + if (len <= 0) return; + S_strbuf_grow_by(buf, len); memmove(buf->ptr + buf->size, data, len); buf->size += len; buf->ptr[buf->size] = '\0'; @@ -165,7 +147,7 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { if (buf->asize == 0) { /* return an empty string */ - return (unsigned char *)calloc(1, 1); + return cmark_calloc(1, 1); } cmark_strbuf_init(buf, 0); diff --git a/src/buffer.h b/src/buffer.h index ad4f341440..93ffc957f6 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -25,22 +25,6 @@ extern unsigned char cmark_strbuf__initbuf[]; #define GH_BUF_INIT \ { cmark_strbuf__initbuf, 0, 0 } -/* - * Maximum size for memory storage on any given `cmark_strbuf` object. - * - * This is a "safe" value to prevent unbounded memory growth when - * parsing arbitrarily large (and potentially malicious) documents. - * - * It is currently set to 32mb, which is a reasonable default for - * production applications. If you need to parse documents larger than - * that, you can increase this value up to `SSIZE_MAX / 2` (which in - * practice resolves to 1/4th of the total address space for the program). - * - * Anything larger than that is a security threat and hence static checks - * will prevent CMark from compiling. - */ -#define BUFSIZE_MAX (32 * 1024 * 1024) - /** * Initialize a cmark_strbuf structure. * @@ -52,7 +36,7 @@ void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size); /** * Grow the buffer to hold at least `target_size` bytes. */ -bool cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); void cmark_strbuf_free(cmark_strbuf *buf); void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); diff --git a/src/chunk.h b/src/chunk.h index 234a4f3454..acceaa1482 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -4,6 +4,7 @@ #include #include #include +#include "memory.h" #include "cmark_ctype.h" #include "buffer.h" @@ -61,13 +62,11 @@ static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { if (c->alloc) { return (char *)c->data; } - str = (unsigned char *)malloc(c->len + 1); - if (str != NULL) { - if (c->len > 0) { - memcpy(str, c->data, c->len); - } - str[c->len] = 0; + str = (unsigned char *)cmark_calloc(c->len + 1, 1); + if (c->len > 0) { + memcpy(str, c->data, c->len); } + str[c->len] = 0; c->data = str; c->alloc = 1; @@ -84,7 +83,7 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { c->alloc = 0; } else { c->len = strlen(str); - c->data = (unsigned char *)malloc(c->len + 1); + c->data = (unsigned char *)cmark_calloc(c->len + 1, 1); c->alloc = 1; memcpy(c->data, str, c->len + 1); } diff --git a/src/cmark.c b/src/cmark.c index 3491199736..3288308239 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -10,6 +10,36 @@ int cmark_version() { return CMARK_VERSION; } const char *cmark_version_string() { return CMARK_VERSION_STRING; } +void (*_cmark_on_oom)(void) = NULL; + +void cmark_trigger_oom(void) +{ + if (_cmark_on_oom) + _cmark_on_oom(); + abort(); +} + +void cmark_set_oom_handler(void (*handler)(void)) +{ + _cmark_on_oom = handler; +} + +void *cmark_calloc(size_t nmem, size_t size) +{ + void *ptr = calloc(nmem, size); + if (!ptr) + cmark_trigger_oom(); + return ptr; +} + +void *cmark_realloc(void *ptr, size_t size) +{ + void *ptr_new = realloc(ptr, size); + if (!ptr_new) + cmark_trigger_oom(); + return ptr_new; +} + char *cmark_markdown_to_html(const char *text, size_t len, int options) { cmark_node *doc; char *result; diff --git a/src/cmark.h b/src/cmark.h index 911ceb722a..a43011b43c 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -573,6 +573,20 @@ int cmark_version(); CMARK_EXPORT const char *cmark_version_string(); +/** Set the callback function that will be issued whenever the + * library hits an out of memory situation. + * + * This can happen when the heap memory allocator fails to allocate + * a block of memory, or when the index of an in-memory buffer overflows + * + * If no OOM handler is set, the library will call `abort` and + * terminate itself and the running process. If the custom OOM handler + * you set does return (i.e. it does not gracefully terminate the + * application), the behavior of the library will be unspecified. + */ +CMARK_EXPORT +void cmark_set_oom_handler(void (*handler)(void)); + /** # AUTHORS * * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. diff --git a/src/inlines.c b/src/inlines.c index 6acbb44bde..f2e7cf17ba 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -63,38 +63,16 @@ static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. static CMARK_INLINE cmark_node *make_literal(cmark_node_type t, cmark_chunk s) { - cmark_node *e = (cmark_node *)calloc(1, sizeof(*e)); - if (e != NULL) { - e->type = t; - e->as.literal = s; - e->next = NULL; - e->prev = NULL; - e->parent = NULL; - e->first_child = NULL; - e->last_child = NULL; - // These fields aren't used for inlines: - e->start_line = 0; - e->start_column = 0; - e->end_line = 0; - } + cmark_node *e = (cmark_node *)cmark_calloc(1, sizeof(*e)); + e->type = t; + e->as.literal = s; return e; } // Create an inline with no value. static CMARK_INLINE cmark_node *make_simple(cmark_node_type t) { - cmark_node *e = (cmark_node *)calloc(1, sizeof(*e)); - if (e != NULL) { - e->type = t; - e->next = NULL; - e->prev = NULL; - e->parent = NULL; - e->first_child = NULL; - e->last_child = NULL; - // These fields aren't used for inlines: - e->start_line = 0; - e->start_column = 0; - e->end_line = 0; - } + cmark_node *e = (cmark_node *)cmark_calloc(1, sizeof(*e)); + e->type = t; return e; } @@ -116,7 +94,7 @@ static cmark_chunk chunk_clone(cmark_chunk *src) { bufsize_t len = src->len; c.len = len; - c.data = (unsigned char *)malloc(len + 1); + c.data = (unsigned char *)cmark_calloc(len + 1, 1); c.alloc = 1; memcpy(c.data, src->data, len); c.data[len] = '\0'; @@ -362,10 +340,7 @@ static void remove_delimiter(subject *subj, delimiter *delim) { static void push_delimiter(subject *subj, unsigned char c, bool can_open, bool can_close, cmark_node *inl_text) { - delimiter *delim = (delimiter *)malloc(sizeof(delimiter)); - if (delim == NULL) { - return; - } + delimiter *delim = (delimiter *)cmark_calloc(1, sizeof(delimiter)); delim->delim_char = c; delim->can_open = can_open; delim->can_close = can_close; diff --git a/src/iterator.c b/src/iterator.c index 351b81f90d..40287f58e2 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -16,10 +16,7 @@ cmark_iter *cmark_iter_new(cmark_node *root) { if (root == NULL) { return NULL; } - cmark_iter *iter = (cmark_iter *)malloc(sizeof(cmark_iter)); - if (iter == NULL) { - return NULL; - } + cmark_iter *iter = (cmark_iter *)cmark_calloc(1, sizeof(cmark_iter)); iter->root = root; iter->cur.ev_type = CMARK_EVENT_NONE; iter->cur.node = NULL; diff --git a/src/main.c b/src/main.c index ff752e56bf..5ea4b61f6a 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,7 @@ #include #include #include "config.h" +#include "memory.h" #include "cmark.h" #if defined(_WIN32) && !defined(__CYGWIN__) @@ -80,7 +81,7 @@ int main(int argc, char *argv[]) { _setmode(_fileno(stdout), _O_BINARY); #endif - files = (int *)malloc(argc * sizeof(*files)); + files = (int *)cmark_calloc(argc, sizeof(*files)); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { diff --git a/src/memory.h b/src/memory.h new file mode 100644 index 0000000000..f05d56615b --- /dev/null +++ b/src/memory.h @@ -0,0 +1,12 @@ +#ifndef CMARK_MEM_H +#define CMARK_MEM_H + +#ifdef __cplusplus +extern "C" { +#endif + +void *cmark_calloc(size_t nmem, size_t size); +void *cmark_realloc(void *ptr, size_t size); +void cmark_trigger_oom(void); + +#endif diff --git a/src/node.c b/src/node.c index 00edbb1b23..30cd69f286 100644 --- a/src/node.c +++ b/src/node.c @@ -71,7 +71,7 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { } cmark_node *cmark_node_new(cmark_node_type type) { - cmark_node *node = (cmark_node *)calloc(1, sizeof(*node)); + cmark_node *node = (cmark_node *)cmark_calloc(1, sizeof(*node)); node->type = type; switch (node->type) { diff --git a/src/references.c b/src/references.c index 6cb2b204e1..168bd89720 100755 --- a/src/references.c +++ b/src/references.c @@ -76,16 +76,14 @@ void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, if (reflabel == NULL) return; - ref = (cmark_reference *)calloc(1, sizeof(*ref)); - if (ref != NULL) { - ref->label = reflabel; - ref->hash = refhash(ref->label); - ref->url = cmark_clean_url(url); - ref->title = cmark_clean_title(title); - ref->next = NULL; - - add_reference(map, ref); - } + ref = (cmark_reference *)cmark_calloc(1, sizeof(*ref)); + ref->label = reflabel; + ref->hash = refhash(ref->label); + ref->url = cmark_clean_url(url); + ref->title = cmark_clean_title(title); + ref->next = NULL; + + add_reference(map, ref); } // Returns reference if refmap contains a reference with matching @@ -140,5 +138,5 @@ void cmark_reference_map_free(cmark_reference_map *map) { } cmark_reference_map *cmark_reference_map_new(void) { - return (cmark_reference_map *)calloc(1, sizeof(cmark_reference_map)); + return (cmark_reference_map *)cmark_calloc(1, sizeof(cmark_reference_map)); } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 098321ba81..3b23cff4c5 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,11 +38,6 @@ IF (PYTHONINTERP_FOUND) "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) - add_test(exhaustion_tests_executable - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/exhaustion_tests.py" - "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" - ) - add_test(spectest_executable ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" ) diff --git a/test/exhaustion_tests.py b/test/exhaustion_tests.py deleted file mode 100644 index 876bb15e08..0000000000 --- a/test/exhaustion_tests.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import argparse -import sys -import os -import tempfile -from subprocess import * - -DATA = bytes(""" -Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn. Ya r'luh hlirghor uaaah ah, nilgh'ri fhtagnnyth ilyaa gof'nn ilyaa nog zhro hupadgh yaor, ah hupadgh ph'zhro h'uh'e Yoggoth vulgtm uh'e hai mnahn'. Phlegeth fm'latgh lw'nafh Cthulhu kn'a nog 'bthnk ya ehye fm'latgh y-n'gha, y-r'luh 'fhalmaoth gnaiih ep hai ep nog lloig grah'n hafh'drn zhroyar, mnahn' uh'e nnnch' chtenff uln f'ooboshu orr'e k'yarnak hlirgh. H'vulgtm ng'bthnk n'ghft stell'bsna hai nnnkadishtu lloig nglui nilgh'ri ron, nagnaiih ronnyth phlegeth f'ep ooboshuor mg y-Hastur shagg, f'Chaugnar Faugn bug uaaah ehye kn'a geb orr'e lw'nafh. Ilyaa shtunggli uh'e naflhrii k'yarnak ya, nog k'yarnak wgah'n shagg nnnhlirgh, gof'nnyar r'luh Azathoth wgah'n. -""", 'UTF-8') - -# CMark has a default maximum buffer growth size of 32mb, -# which means that the total size of the buffer cannot be -# larger than (32 + 16)mb in total, accounting for overgrowth -MAX_FILE_SIZE = 48.0 # mb - -def exhaustion(prog): - with tempfile.TemporaryFile() as tmp: - p1 = Popen(prog.split(), stdout=tmp, stdin=PIPE) - written, read = 0, 0 - - for i in range(512 * 512): - p1.stdin.write(DATA) - written += len(DATA) - - p1.stdin.close() - res = p1.wait() - written = written / (1024.0 * 1024.0) - read = tmp.tell() / (1024.0 * 1024.0) - - if res != 0: - raise Exception("CMark did not exit properly") - if written <= read: - raise Exception("Output was not truncated (%fmb -> %fmb)" % (written, read)) - if read > MAX_FILE_SIZE: - raise Exception("Output was not truncated at the expected range (%fmb)" % (read)) - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Run cmark exhaustion tests') - parser.add_argument('--program', dest='program', nargs='?', default=None, - help='program to test') - args = parser.parse_args(sys.argv[1:]) - exhaustion(args.program) -- cgit 0.0.5-2-1-g0f52 From ab6c81b960e86b26c7fda366f51ff29d1683a555 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Tue, 24 May 2016 16:16:36 +0200 Subject: config: Add SSIZE_T compat for Win32 --- src/buffer.h | 1 - src/config.h.in | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/buffer.h b/src/buffer.h index 93ffc957f6..89328acbf5 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -5,7 +5,6 @@ #include #include #include -#include #include #include "config.h" diff --git a/src/config.h.in b/src/config.h.in index de1a4dd493..0f72d6a1f1 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -69,6 +69,14 @@ CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ... #endif +#ifdef _WIN32 +# include + typedef SSIZE_T ssize_t; + typedef SIZE_T size_t; +#else +# include +#endif + #ifdef __cplusplus } #endif -- cgit 0.0.5-2-1-g0f52 From 25429c96f6554ffac415f9d865934b1183f3398e Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 27 May 2016 16:55:16 +0200 Subject: cmark: Implement support for custom allocators --- man/man3/cmark.3 | 81 +++++++++++++++++++--------- src/blocks.c | 110 ++++++++++++++++++++++---------------- src/buffer.c | 19 ++++--- src/buffer.h | 9 ++-- src/chunk.h | 17 +++--- src/cmark.c | 30 ----------- src/cmark.h | 38 ++++++++----- src/html.c | 2 +- src/inlines.c | 158 ++++++++++++++++++++++++++++--------------------------- src/inlines.h | 8 +-- src/iterator.c | 10 ++-- src/iterator.h | 2 + src/main.c | 2 +- src/memory.h | 12 ----- src/node.c | 63 ++++++++++++---------- src/node.h | 10 ++-- src/parser.h | 2 + src/references.c | 35 ++++++------ src/references.h | 4 +- src/render.c | 12 +++-- src/render.h | 2 + src/xml.c | 2 +- 22 files changed, 343 insertions(+), 285 deletions(-) delete mode 100644 src/memory.h diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 5642e59762..ca304e6f0a 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "May 14, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 02, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -15,7 +15,7 @@ Simple Interface .PP Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length \f[I]len\f[]) from CommonMark Markdown to HTML, returning a -null\-terminated, UTF\-8\-encoded string. It is the caller's +null\-terminated, UTF\-8\-encoded string. It is the caller\[cq]s responsibility to free the returned buffer. .SS @@ -95,6 +95,25 @@ typedef enum { +.SS +Custom memory allocator support + +.PP +.nf +\fC +.RS 0n +typedef struct cmark_mem { + void *(*calloc)(size_t, size_t); + void (*free)(void *); +} cmark_mem; +.RE +\f[] +.fi + +.PP +Defines the memory allocation functions to be used by CMark when parsing +and allocating a document tree + .SS Creating and Destroying Nodes @@ -103,8 +122,15 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller's responsibility to -assign. +other required properties, which it is the caller\[cq]s responsibility +to assign. + +.PP +\fIcmark_node *\f[] \fBcmark_node_new2\f[](\fIcmark_node_type type\f[], \fIcmark_mem *mem\f[]) + +.PP +Same as \f[C]cmark_node_new\f[], but explicitly listing the memory +allocator used to allocate the node .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -378,7 +404,8 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the "tightness" of a list. Returns 1 on success, 0 on failure. +Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on +failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -425,31 +452,31 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal "on enter" text for a custom \f[I]node\f[], or an -empty string if no on_enter is set. +Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP -Sets the literal text to render "on enter" for a custom \f[I]node\f[]. -Any children of the node will be rendered after this text. Returns 1 on -success 0 on failure. +Sets the literal text to render \[lq]on enter\[rq] for a custom +\f[I]node\f[]. Any children of the node will be rendered after this +text. Returns 1 on success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal "on exit" text for a custom \f[I]node\f[], or an -empty string if no on_exit is set. +Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], +or an empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP -Sets the literal text to render "on exit" for a custom \f[I]node\f[]. -Any children of the node will be rendered before this text. Returns 1 on -success 0 on failure. +Sets the literal text to render \[lq]on exit\[rq] for a custom +\f[I]node\f[]. Any children of the node will be rendered before this +text. Returns 1 on success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -562,6 +589,12 @@ cmark_parser_free(parser); .PP Creates a new parser object. +.PP +\fIcmark_parser *\f[] \fBcmark_parser_new2\f[](\fIint options\f[], \fIcmark_mem *mem\f[]) + +.PP +Creates a new parser object with the given memory allocator + .PP \fIvoid\f[] \fBcmark_parser_free\f[](\fIcmark_parser *parser\f[]) @@ -604,36 +637,36 @@ Rendering \fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP -Render a \f[I]node\f[] tree as XML. It is the caller's responsibility to -free the returned buffer. +Render a \f[I]node\f[] tree as XML. It is the caller\[cq]s +responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to -add an appropriate header and footer. It is the caller's responsibility -to free the returned buffer. +add an appropriate header and footer. It is the caller\[cq]s +responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP Render a \f[I]node\f[] tree as a groff man page, without the header. It -is the caller's responsibility to free the returned buffer. +is the caller\[cq]s responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a commonmark document. It is the caller's -responsibility to free the returned buffer. +Render a \f[I]node\f[] tree as a commonmark document. It is the +caller\[cq]s responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_latex\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a LaTeX document. It is the caller's +Render a \f[I]node\f[] tree as a LaTeX document. It is the caller\[cq]s responsibility to free the returned buffer. .SS @@ -744,7 +777,7 @@ with the replacement character U+FFFD. .fi .PP -Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en +Convert straight quotes to curly, \[em] to em dashes, \[en] to en dashes. .SS diff --git a/src/blocks.c b/src/blocks.c index 07eacc6157..ef1790e5c5 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -44,36 +44,38 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, static void S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t bytes); -static cmark_node *make_block(cmark_node_type tag, int start_line, +static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, int start_line, int start_column) { cmark_node *e; - e = (cmark_node *)cmark_calloc(1, sizeof(*e)); + e = (cmark_node *)mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(mem, &e->content, 32); e->type = tag; e->open = true; e->start_line = start_line; e->start_column = start_column; e->end_line = start_line; - cmark_strbuf_init(&e->string_content, 32); return e; } // Create a root document node. -static cmark_node *make_document() { - cmark_node *e = make_block(CMARK_NODE_DOCUMENT, 1, 1); +static cmark_node *make_document(cmark_mem *mem) { + cmark_node *e = make_block(mem, CMARK_NODE_DOCUMENT, 1, 1); return e; } -cmark_parser *cmark_parser_new(int options) { - cmark_parser *parser = (cmark_parser *)cmark_calloc(1, sizeof(cmark_parser)); - cmark_node *document = make_document(); - cmark_strbuf *line = (cmark_strbuf *)cmark_calloc(1, sizeof(cmark_strbuf)); - cmark_strbuf *buf = (cmark_strbuf *)cmark_calloc(1, sizeof(cmark_strbuf)); - cmark_strbuf_init(line, 256); - cmark_strbuf_init(buf, 0); - - parser->refmap = cmark_reference_map_new(); +cmark_parser *cmark_parser_new2(int options, cmark_mem *mem) { + cmark_parser *parser = mem->calloc(1, sizeof(cmark_parser)); + parser->mem = mem; + + cmark_node *document = make_document(mem); + cmark_strbuf *line = mem->calloc(1, sizeof(cmark_strbuf)); + cmark_strbuf *buf = mem->calloc(1, sizeof(cmark_strbuf)); + cmark_strbuf_init(mem, line, 256); + cmark_strbuf_init(mem, buf, 0); + + parser->refmap = cmark_reference_map_new(mem); parser->root = document; parser->current = document; parser->line_number = 0; @@ -93,13 +95,30 @@ cmark_parser *cmark_parser_new(int options) { return parser; } +static void *xcalloc(size_t nmem, size_t size) { + void *ptr = calloc(nmem, size); + if (!ptr) abort(); + return ptr; +} + +static void xfree(void *ptr) { + free(ptr); +} + +cmark_mem DEFAULT_MEM_ALLOCATOR = { xcalloc, xfree }; + +cmark_parser *cmark_parser_new(int options) { + return cmark_parser_new2(options, &DEFAULT_MEM_ALLOCATOR); +} + void cmark_parser_free(cmark_parser *parser) { + cmark_mem *mem = parser->mem; cmark_strbuf_free(parser->curline); - free(parser->curline); + mem->free(parser->curline); cmark_strbuf_free(parser->linebuf); - free(parser->linebuf); + mem->free(parser->linebuf); cmark_reference_map_free(parser->refmap); - free(parser); + mem->free(parser); } static cmark_node *finalize(cmark_parser *parser, cmark_node *b); @@ -153,10 +172,10 @@ static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { // add space characters: chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); for (i = 0; i < chars_to_tab; i++) { - cmark_strbuf_putc(&node->string_content, ' '); + cmark_strbuf_putc(&node->content, ' '); } } - cmark_strbuf_put(&node->string_content, ch->data + parser->offset, + cmark_strbuf_put(&node->content, ch->data + parser->offset, ch->len - parser->offset); } @@ -229,7 +248,6 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { cmark_node *parent; parent = b->parent; - assert(b->open); // shouldn't call finalize on closed blocks b->open = false; @@ -251,15 +269,17 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { b->end_column = parser->last_line_length; } + cmark_strbuf *node_content = &b->content; + switch (b->type) { case CMARK_NODE_PARAGRAPH: - while (cmark_strbuf_at(&b->string_content, 0) == '[' && - (pos = cmark_parse_reference_inline(&b->string_content, + while (cmark_strbuf_at(node_content, 0) == '[' && + (pos = cmark_parse_reference_inline(parser->mem, node_content, parser->refmap))) { - cmark_strbuf_drop(&b->string_content, pos); + cmark_strbuf_drop(node_content, pos); } - if (is_blank(&b->string_content, 0)) { + if (is_blank(node_content, 0)) { // remove blank node (former reference def) cmark_node_free(b); } @@ -267,34 +287,33 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { case CMARK_NODE_CODE_BLOCK: if (!b->as.code.fenced) { // indented code - remove_trailing_blank_lines(&b->string_content); - cmark_strbuf_putc(&b->string_content, '\n'); + remove_trailing_blank_lines(node_content); + cmark_strbuf_putc(node_content, '\n'); } else { - // first line of contents becomes info - for (pos = 0; pos < b->string_content.size; ++pos) { - if (S_is_line_end_char(b->string_content.ptr[pos])) + for (pos = 0; pos < node_content->size; ++pos) { + if (S_is_line_end_char(node_content->ptr[pos])) break; } - assert(pos < b->string_content.size); + assert(pos < node_content->size); - cmark_strbuf tmp = GH_BUF_INIT; - houdini_unescape_html_f(&tmp, b->string_content.ptr, pos); + cmark_strbuf tmp = CMARK_BUF_INIT(parser->mem); + houdini_unescape_html_f(&tmp, node_content->ptr, pos); cmark_strbuf_trim(&tmp); cmark_strbuf_unescape(&tmp); b->as.code.info = cmark_chunk_buf_detach(&tmp); - if (b->string_content.ptr[pos] == '\r') + if (node_content->ptr[pos] == '\r') pos += 1; - if (b->string_content.ptr[pos] == '\n') + if (node_content->ptr[pos] == '\n') pos += 1; - cmark_strbuf_drop(&b->string_content, pos); + cmark_strbuf_drop(node_content, pos); } - b->as.code.literal = cmark_chunk_buf_detach(&b->string_content); + b->as.code.literal = cmark_chunk_buf_detach(node_content); break; case CMARK_NODE_HTML_BLOCK: - b->as.literal = cmark_chunk_buf_detach(&b->string_content); + b->as.literal = cmark_chunk_buf_detach(node_content); break; case CMARK_NODE_LIST: // determine tight/loose status @@ -328,6 +347,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { default: break; } + return parent; } @@ -342,7 +362,7 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, parent = finalize(parser, parent); } - cmark_node *child = make_block(block_type, parser->line_number, start_column); + cmark_node *child = make_block(parser->mem, block_type, parser->line_number, start_column); child->parent = parent; if (parent->last_child) { @@ -358,7 +378,7 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, // Walk through node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_node *root, cmark_reference_map *refmap, +static void process_inlines(cmark_mem *mem, cmark_node *root, cmark_reference_map *refmap, int options) { cmark_iter *iter = cmark_iter_new(root); cmark_node *cur; @@ -368,7 +388,7 @@ static void process_inlines(cmark_node *root, cmark_reference_map *refmap, cur = cmark_iter_get_node(iter); if (ev_type == CMARK_EVENT_ENTER) { if (contains_inlines(cur->type)) { - cmark_parse_inlines(cur, refmap, options); + cmark_parse_inlines(mem, cur, refmap, options); } } } @@ -379,7 +399,7 @@ static void process_inlines(cmark_node *root, cmark_reference_map *refmap, // Attempts to parse a list item marker (bullet or enumerated). // On success, returns length of the marker, and populates // data with the details. On failure, returns 0. -static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, +static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, bufsize_t pos, cmark_list **dataptr) { unsigned char c; bufsize_t startpos; @@ -393,7 +413,7 @@ static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, if (!cmark_isspace(peek_at(input, pos))) { return 0; } - data = (cmark_list *)cmark_calloc(1, sizeof(*data)); + data = (cmark_list *)mem->calloc(1, sizeof(*data)); data->marker_offset = 0; // will be adjusted later data->list_type = CMARK_BULLET_LIST; data->bullet_char = c; @@ -419,7 +439,7 @@ static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, if (!cmark_isspace(peek_at(input, pos))) { return 0; } - data = (cmark_list *)cmark_calloc(1, sizeof(*data)); + data = (cmark_list *)mem->calloc(1, sizeof(*data)); data->marker_offset = 0; // will be adjusted later data->list_type = CMARK_ORDERED_LIST; data->bullet_char = 0; @@ -451,7 +471,7 @@ static cmark_node *finalize_document(cmark_parser *parser) { } finalize(parser, parser->root); - process_inlines(parser->root, parser->refmap, parser->options); + process_inlines(parser->mem, parser->root, parser->refmap, parser->options); return parser->root; } @@ -899,7 +919,7 @@ 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(input, parser->first_nonspace, &data)) && + parse_list_marker(parser->mem, input, parser->first_nonspace, &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. diff --git a/src/buffer.c b/src/buffer.c index 2ac3b04e7f..b879f0c873 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -21,7 +21,8 @@ unsigned char cmark_strbuf__initbuf[1]; #define MIN(x, y) ((x < y) ? x : y) #endif -void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) { +void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, bufsize_t initial_size) { + buf->mem = mem; buf->asize = 0; buf->size = 0; buf->ptr = cmark_strbuf__initbuf; @@ -41,7 +42,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { return; if (target_size > (bufsize_t)(SIZE_MAX / 4)) - cmark_trigger_oom(); + abort(); /* Oversize the buffer by 50% to guarantee amortized linear time * complexity on append operations. */ @@ -49,7 +50,11 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { new_size += 1; new_size = (new_size + 7) & ~7; - unsigned char *new_ptr = cmark_realloc(buf->asize ? buf->ptr : NULL, new_size); + unsigned char *new_ptr = buf->mem->calloc(new_size, 1); + if (buf->ptr != cmark_strbuf__initbuf) { + memcpy(new_ptr, buf->ptr, buf->size); + buf->mem->free(buf->ptr); + } buf->asize = new_size; buf->ptr = new_ptr; @@ -62,9 +67,9 @@ void cmark_strbuf_free(cmark_strbuf *buf) { return; if (buf->ptr != cmark_strbuf__initbuf) - free(buf->ptr); + buf->mem->free(buf->ptr); - cmark_strbuf_init(buf, 0); + cmark_strbuf_init(buf->mem, buf, 0); } void cmark_strbuf_clear(cmark_strbuf *buf) { @@ -147,10 +152,10 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { if (buf->asize == 0) { /* return an empty string */ - return cmark_calloc(1, 1); + return buf->mem->calloc(1, 1); } - cmark_strbuf_init(buf, 0); + cmark_strbuf_init(buf->mem, buf, 0); return data; } diff --git a/src/buffer.h b/src/buffer.h index 89328acbf5..96b2704d8e 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -7,6 +7,7 @@ #include #include #include "config.h" +#include "cmark.h" #ifdef __cplusplus extern "C" { @@ -15,22 +16,22 @@ extern "C" { typedef ssize_t bufsize_t; typedef struct { + cmark_mem *mem; unsigned char *ptr; bufsize_t asize, size; } cmark_strbuf; extern unsigned char cmark_strbuf__initbuf[]; -#define GH_BUF_INIT \ - { cmark_strbuf__initbuf, 0, 0 } +#define CMARK_BUF_INIT(mem) {mem, cmark_strbuf__initbuf, 0, 0} /** * Initialize a cmark_strbuf structure. * - * For the cases where GH_BUF_INIT cannot be used to do static + * For the cases where CMARK_BUF_INIT cannot be used to do static * initialization. */ -void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size); +void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, bufsize_t initial_size); /** * Grow the buffer to hold at least `target_size` bytes. diff --git a/src/chunk.h b/src/chunk.h index acceaa1482..4dfc6985d9 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -4,9 +4,10 @@ #include #include #include +#include "cmark.h" +#include "buffer.h" #include "memory.h" #include "cmark_ctype.h" -#include "buffer.h" #define CMARK_CHUNK_EMPTY \ { NULL, 0, 0 } @@ -17,9 +18,9 @@ typedef struct { bufsize_t alloc; // also implies a NULL-terminated string } cmark_chunk; -static CMARK_INLINE void cmark_chunk_free(cmark_chunk *c) { +static CMARK_INLINE void cmark_chunk_free(cmark_mem *mem, cmark_chunk *c) { if (c->alloc) - free(c->data); + mem->free(c->data); c->data = NULL; c->alloc = 0; @@ -56,13 +57,13 @@ static CMARK_INLINE bufsize_t return p ? (bufsize_t)(p - ch->data) : ch->len; } -static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { +static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, cmark_chunk *c) { unsigned char *str; if (c->alloc) { return (char *)c->data; } - str = (unsigned char *)cmark_calloc(c->len + 1, 1); + str = (unsigned char *)mem->calloc(c->len + 1, 1); if (c->len > 0) { memcpy(str, c->data, c->len); } @@ -73,9 +74,9 @@ static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) { return (char *)str; } -static CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { +static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, const char *str) { if (c->alloc) { - free(c->data); + mem->free(c->data); } if (str == NULL) { c->len = 0; @@ -83,7 +84,7 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) { c->alloc = 0; } else { c->len = strlen(str); - c->data = (unsigned char *)cmark_calloc(c->len + 1, 1); + c->data = (unsigned char *)mem->calloc(c->len + 1, 1); c->alloc = 1; memcpy(c->data, str, c->len + 1); } diff --git a/src/cmark.c b/src/cmark.c index 3288308239..3491199736 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -10,36 +10,6 @@ int cmark_version() { return CMARK_VERSION; } const char *cmark_version_string() { return CMARK_VERSION_STRING; } -void (*_cmark_on_oom)(void) = NULL; - -void cmark_trigger_oom(void) -{ - if (_cmark_on_oom) - _cmark_on_oom(); - abort(); -} - -void cmark_set_oom_handler(void (*handler)(void)) -{ - _cmark_on_oom = handler; -} - -void *cmark_calloc(size_t nmem, size_t size) -{ - void *ptr = calloc(nmem, size); - if (!ptr) - cmark_trigger_oom(); - return ptr; -} - -void *cmark_realloc(void *ptr, size_t size) -{ - void *ptr_new = realloc(ptr, size); - if (!ptr_new) - cmark_trigger_oom(); - return ptr_new; -} - char *cmark_markdown_to_html(const char *text, size_t len, int options) { cmark_node *doc; char *result; diff --git a/src/cmark.h b/src/cmark.h index a43011b43c..293919d216 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -4,6 +4,7 @@ #include #include #include +#include "memory.h" #ifdef __cplusplus extern "C" { @@ -87,6 +88,19 @@ typedef struct cmark_node cmark_node; typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; +/** + * ## Custom memory allocator support + */ + +/** Defines the memory allocation functions to be used by CMark + * when parsing and allocating a document tree + */ +typedef struct cmark_mem { + void *(*calloc)(size_t, size_t); + void (*free)(void *); +} cmark_mem; + + /** * ## Creating and Destroying Nodes */ @@ -97,6 +111,11 @@ typedef struct cmark_iter cmark_iter; */ CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); +/** Same as `cmark_node_new`, but explicitly listing the memory + * allocator used to allocate the node + */ +CMARK_EXPORT cmark_node *cmark_node_new2(cmark_node_type type, cmark_mem *mem); + /** Frees the memory allocated for a node and any children. */ CMARK_EXPORT void cmark_node_free(cmark_node *node); @@ -437,6 +456,11 @@ CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); CMARK_EXPORT cmark_parser *cmark_parser_new(int options); +/** Creates a new parser object with the given memory allocator + */ +CMARK_EXPORT +cmark_parser *cmark_parser_new2(int options, cmark_mem *mem); + /** Frees memory allocated for a parser object. */ CMARK_EXPORT @@ -573,20 +597,6 @@ int cmark_version(); CMARK_EXPORT const char *cmark_version_string(); -/** Set the callback function that will be issued whenever the - * library hits an out of memory situation. - * - * This can happen when the heap memory allocator fails to allocate - * a block of memory, or when the index of an in-memory buffer overflows - * - * If no OOM handler is set, the library will call `abort` and - * terminate itself and the running process. If the custom OOM handler - * you set does return (i.e. it does not gracefully terminate the - * application), the behavior of the library will be unspecified. - */ -CMARK_EXPORT -void cmark_set_oom_handler(void (*handler)(void)); - /** # AUTHORS * * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. diff --git a/src/html.c b/src/html.c index c2267cb179..a680e4a50d 100644 --- a/src/html.c +++ b/src/html.c @@ -324,7 +324,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, char *cmark_render_html(cmark_node *root, int options) { char *result; - cmark_strbuf html = GH_BUF_INIT; + cmark_strbuf html = CMARK_BUF_INIT(cmark_node_mem(root)); cmark_event_type ev_type; cmark_node *cur; struct render_state state = {&html, NULL}; diff --git a/src/inlines.c b/src/inlines.c index f2e7cf17ba..8f18e6c960 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -22,13 +22,13 @@ static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98"; static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; // Macros for creating various kinds of simple. -#define make_str(s) make_literal(CMARK_NODE_TEXT, s) -#define make_code(s) make_literal(CMARK_NODE_CODE, s) -#define make_raw_html(s) make_literal(CMARK_NODE_HTML_INLINE, s) -#define make_linebreak() make_simple(CMARK_NODE_LINEBREAK) -#define make_softbreak() make_simple(CMARK_NODE_SOFTBREAK) -#define make_emph() make_simple(CMARK_NODE_EMPH) -#define make_strong() make_simple(CMARK_NODE_STRONG) +#define make_str(mem, s) make_literal(mem, CMARK_NODE_TEXT, s) +#define make_code(mem, s) make_literal(mem, CMARK_NODE_CODE, s) +#define make_raw_html(mem, s) make_literal(mem, CMARK_NODE_HTML_INLINE, s) +#define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK) +#define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK) +#define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH) +#define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG) typedef struct delimiter { struct delimiter *previous; @@ -42,6 +42,7 @@ typedef struct delimiter { } delimiter; typedef struct { + cmark_mem *mem; cmark_chunk input; bufsize_t pos; cmark_reference_map *refmap; @@ -57,44 +58,46 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, static int parse_inline(subject *subj, cmark_node *parent, int options); -static void subject_from_buf(subject *e, cmark_strbuf *buffer, +static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap); static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. -static CMARK_INLINE cmark_node *make_literal(cmark_node_type t, cmark_chunk s) { - cmark_node *e = (cmark_node *)cmark_calloc(1, sizeof(*e)); +static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t, cmark_chunk s) { + cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(mem, &e->content, 0); e->type = t; e->as.literal = s; return e; } // Create an inline with no value. -static CMARK_INLINE cmark_node *make_simple(cmark_node_type t) { - cmark_node *e = (cmark_node *)cmark_calloc(1, sizeof(*e)); +static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) { + cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(mem, &e->content, 0); e->type = t; return e; } // Like make_str, but parses entities. -static cmark_node *make_str_with_entities(cmark_chunk *content) { - cmark_strbuf unescaped = GH_BUF_INIT; +static cmark_node *make_str_with_entities(cmark_mem *mem, cmark_chunk *content) { + cmark_strbuf unescaped = CMARK_BUF_INIT(mem); if (houdini_unescape_html(&unescaped, content->data, content->len)) { - return make_str(cmark_chunk_buf_detach(&unescaped)); + return make_str(mem, cmark_chunk_buf_detach(&unescaped)); } else { - return make_str(*content); + return make_str(mem, *content); } } // Duplicate a chunk by creating a copy of the buffer not by reusing the // buffer like cmark_chunk_dup does. -static cmark_chunk chunk_clone(cmark_chunk *src) { +static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) { cmark_chunk c; bufsize_t len = src->len; c.len = len; - c.data = (unsigned char *)cmark_calloc(len + 1, 1); + c.data = (unsigned char *)mem->calloc(len + 1, 1); c.alloc = 1; memcpy(c.data, src->data, len); c.data[len] = '\0'; @@ -102,8 +105,8 @@ static cmark_chunk chunk_clone(cmark_chunk *src) { return c; } -static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) { - cmark_strbuf buf = GH_BUF_INIT; +static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, int is_email) { + cmark_strbuf buf = CMARK_BUF_INIT(mem); cmark_chunk_trim(url); @@ -119,16 +122,17 @@ static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) { return cmark_chunk_buf_detach(&buf); } -static CMARK_INLINE cmark_node *make_autolink(cmark_chunk url, int is_email) { - cmark_node *link = make_simple(CMARK_NODE_LINK); - link->as.link.url = cmark_clean_autolink(&url, is_email); +static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, int is_email) { + cmark_node *link = make_simple(mem, CMARK_NODE_LINK); + link->as.link.url = cmark_clean_autolink(mem, &url, is_email); link->as.link.title = cmark_chunk_literal(""); - cmark_node_append_child(link, make_str_with_entities(&url)); + cmark_node_append_child(link, make_str_with_entities(mem, &url)); return link; } -static void subject_from_buf(subject *e, cmark_strbuf *buffer, +static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap) { + e->mem = mem; e->input.data = buffer->ptr; e->input.len = buffer->size; e->input.alloc = 0; @@ -229,16 +233,16 @@ static cmark_node *handle_backticks(subject *subj) { if (endpos == 0) { // not found subj->pos = startpos; // rewind - return make_str(openticks); + return make_str(subj->mem, openticks); } else { - cmark_strbuf buf = GH_BUF_INIT; + cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); cmark_strbuf_set(&buf, subj->input.data + startpos, endpos - startpos - openticks.len); cmark_strbuf_trim(&buf); cmark_strbuf_normalize_whitespace(&buf); - return make_code(cmark_chunk_buf_detach(&buf)); + return make_code(subj->mem, cmark_chunk_buf_detach(&buf)); } } @@ -340,7 +344,7 @@ static void remove_delimiter(subject *subj, delimiter *delim) { static void push_delimiter(subject *subj, unsigned char c, bool can_open, bool can_close, cmark_node *inl_text) { - delimiter *delim = (delimiter *)cmark_calloc(1, sizeof(delimiter)); + delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter)); delim->delim_char = c; delim->can_open = can_open; delim->can_close = can_close; @@ -373,7 +377,7 @@ static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); } - inl_text = make_str(contents); + inl_text = make_str(subj->mem, contents); if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { push_delimiter(subj, c, can_open, can_close, inl_text); @@ -389,7 +393,7 @@ static cmark_node *handle_hyphen(subject *subj, bool smart) { advance(subj); if (!smart || peek_char(subj) != '-') { - return make_str(cmark_chunk_literal("-")); + return make_str(subj->mem, cmark_chunk_literal("-")); } while (smart && peek_char(subj) == '-') { @@ -400,7 +404,7 @@ static cmark_node *handle_hyphen(subject *subj, bool smart) { int en_count = 0; int em_count = 0; int i; - cmark_strbuf buf = GH_BUF_INIT; + cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes em_count = numhyphens / 3; @@ -422,7 +426,7 @@ static cmark_node *handle_hyphen(subject *subj, bool smart) { cmark_strbuf_puts(&buf, ENDASH); } - return make_str(cmark_chunk_buf_detach(&buf)); + return make_str(subj->mem, cmark_chunk_buf_detach(&buf)); } // Assumes we have a period at the current position. @@ -432,12 +436,12 @@ static cmark_node *handle_period(subject *subj, bool smart) { advance(subj); if (peek_char(subj) == '.') { advance(subj); - return make_str(cmark_chunk_literal(ELLIPSES)); + return make_str(subj->mem, cmark_chunk_literal(ELLIPSES)); } else { - return make_str(cmark_chunk_literal("..")); + return make_str(subj->mem, cmark_chunk_literal("..")); } } else { - return make_str(cmark_chunk_literal(".")); + return make_str(subj->mem, cmark_chunk_literal(".")); } } @@ -483,18 +487,18 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { closer = closer->next; } } else if (closer->delim_char == '\'') { - cmark_chunk_free(&closer->inl_text->as.literal); + cmark_chunk_free(subj->mem, &closer->inl_text->as.literal); closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE); if (opener_found) { - cmark_chunk_free(&opener->inl_text->as.literal); + cmark_chunk_free(subj->mem, &opener->inl_text->as.literal); opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE); } closer = closer->next; } else if (closer->delim_char == '"') { - cmark_chunk_free(&closer->inl_text->as.literal); + cmark_chunk_free(subj->mem, &closer->inl_text->as.literal); closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE); if (opener_found) { - cmark_chunk_free(&opener->inl_text->as.literal); + cmark_chunk_free(subj->mem, &opener->inl_text->as.literal); opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE); } closer = closer->next; @@ -553,7 +557,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, // create new emph or strong, and splice it in to our inlines // between the opener and closer - emph = use_delims == 1 ? make_emph() : make_strong(); + emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem); tmp = opener_inl->next; while (tmp && tmp != closer_inl) { @@ -589,18 +593,18 @@ static cmark_node *handle_backslash(subject *subj) { if (cmark_ispunct( nextchar)) { // only ascii symbols and newline can be escaped advance(subj); - return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); + return make_str(subj->mem, cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); } else if (!is_eof(subj) && skip_line_end(subj)) { - return make_linebreak(); + return make_linebreak(subj->mem); } else { - return make_str(cmark_chunk_literal("\\")); + return make_str(subj->mem, cmark_chunk_literal("\\")); } } // Parse an entity or a regular "&" string. // Assumes the subject has an '&' character at the current position. static cmark_node *handle_entity(subject *subj) { - cmark_strbuf ent = GH_BUF_INIT; + cmark_strbuf ent = CMARK_BUF_INIT(subj->mem); bufsize_t len; advance(subj); @@ -609,16 +613,16 @@ static cmark_node *handle_entity(subject *subj) { subj->input.len - subj->pos); if (len == 0) - return make_str(cmark_chunk_literal("&")); + return make_str(subj->mem, cmark_chunk_literal("&")); subj->pos += len; - return make_str(cmark_chunk_buf_detach(&ent)); + return make_str(subj->mem, cmark_chunk_buf_detach(&ent)); } // Clean a URL: remove surrounding whitespace and surrounding <>, // and remove \ that escape punctuation. -cmark_chunk cmark_clean_url(cmark_chunk *url) { - cmark_strbuf buf = GH_BUF_INIT; +cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { + cmark_strbuf buf = CMARK_BUF_INIT(mem); cmark_chunk_trim(url); @@ -637,8 +641,8 @@ cmark_chunk cmark_clean_url(cmark_chunk *url) { return cmark_chunk_buf_detach(&buf); } -cmark_chunk cmark_clean_title(cmark_chunk *title) { - cmark_strbuf buf = GH_BUF_INIT; +cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) { + cmark_strbuf buf = CMARK_BUF_INIT(mem); unsigned char first, last; if (title->len == 0) { @@ -675,7 +679,7 @@ static cmark_node *handle_pointy_brace(subject *subj) { contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); subj->pos += matchlen; - return make_autolink(contents, 0); + return make_autolink(subj->mem, contents, 0); } // next try to match an email autolink @@ -684,7 +688,7 @@ static cmark_node *handle_pointy_brace(subject *subj) { contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); subj->pos += matchlen; - return make_autolink(contents, 1); + return make_autolink(subj->mem, contents, 1); } // finally, try to match an html tag @@ -692,11 +696,11 @@ static cmark_node *handle_pointy_brace(subject *subj) { if (matchlen > 0) { contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); subj->pos += matchlen; - return make_raw_html(contents); + return make_raw_html(subj->mem, contents); } // if nothing matches, just return the opening <: - return make_str(cmark_chunk_literal("<")); + return make_str(subj->mem, cmark_chunk_literal("<")); } // Parse a link label. Returns 1 if successful. @@ -774,13 +778,13 @@ static cmark_node *handle_close_bracket(subject *subj) { } if (opener == NULL) { - return make_str(cmark_chunk_literal("]")); + return make_str(subj->mem, cmark_chunk_literal("]")); } if (!opener->active) { // take delimiter off stack remove_delimiter(subj, opener); - return make_str(cmark_chunk_literal("]")); + return make_str(subj->mem, cmark_chunk_literal("]")); } // If we got here, we matched a potential link/image text. @@ -811,10 +815,10 @@ static cmark_node *handle_close_bracket(subject *subj) { url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl); title_chunk = cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle); - url = cmark_clean_url(&url_chunk); - title = cmark_clean_title(&title_chunk); - cmark_chunk_free(&url_chunk); - cmark_chunk_free(&title_chunk); + url = cmark_clean_url(subj->mem, &url_chunk); + title = cmark_clean_title(subj->mem, &title_chunk); + cmark_chunk_free(subj->mem, &url_chunk); + cmark_chunk_free(subj->mem, &title_chunk); goto match; } else { @@ -827,7 +831,7 @@ static cmark_node *handle_close_bracket(subject *subj) { raw_label = cmark_chunk_literal(""); found_label = link_label(subj, &raw_label); if (!found_label || raw_label.len == 0) { - cmark_chunk_free(&raw_label); + cmark_chunk_free(subj->mem, &raw_label); raw_label = cmark_chunk_dup(&subj->input, opener->position, initial_pos - opener->position - 1); } @@ -839,11 +843,11 @@ static cmark_node *handle_close_bracket(subject *subj) { } ref = cmark_reference_lookup(subj->refmap, &raw_label); - cmark_chunk_free(&raw_label); + cmark_chunk_free(subj->mem, &raw_label); if (ref != NULL) { // found - url = chunk_clone(&ref->url); - title = chunk_clone(&ref->title); + url = chunk_clone(subj->mem, &ref->url); + title = chunk_clone(subj->mem, &ref->title); goto match; } else { goto noMatch; @@ -853,10 +857,10 @@ noMatch: // If we fall through to here, it means we didn't match a link: remove_delimiter(subj, opener); // remove this opener from delimiter list subj->pos = initial_pos; - return make_str(cmark_chunk_literal("]")); + return make_str(subj->mem, cmark_chunk_literal("]")); match: - inl = make_simple(is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK); + inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK); inl->as.link.url = url; inl->as.link.title = title; cmark_node_insert_before(opener->inl_text, inl); @@ -909,9 +913,9 @@ static cmark_node *handle_newline(subject *subj) { skip_spaces(subj); if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && peek_at(subj, nlpos - 2) == ' ') { - return make_linebreak(); + return make_linebreak(subj->mem); } else { - return make_softbreak(); + return make_softbreak(subj->mem); } } @@ -1000,7 +1004,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { break; case '[': advance(subj); - new_inl = make_str(cmark_chunk_literal("[")); + new_inl = make_str(subj->mem, cmark_chunk_literal("[")); push_delimiter(subj, '[', true, false, new_inl); break; case ']': @@ -1010,10 +1014,10 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { advance(subj); if (peek_char(subj) == '[') { advance(subj); - new_inl = make_str(cmark_chunk_literal("![")); + new_inl = make_str(subj->mem, cmark_chunk_literal("![")); push_delimiter(subj, '!', false, true, new_inl); } else { - new_inl = make_str(cmark_chunk_literal("!")); + new_inl = make_str(subj->mem, cmark_chunk_literal("!")); } break; default: @@ -1026,7 +1030,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { cmark_chunk_rtrim(&contents); } - new_inl = make_str(contents); + new_inl = make_str(subj->mem, contents); } if (new_inl != NULL) { cmark_node_append_child(parent, new_inl); @@ -1036,10 +1040,10 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { } // Parse inlines from parent's string_content, adding as children of parent. -extern void cmark_parse_inlines(cmark_node *parent, cmark_reference_map *refmap, +extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options) { subject subj; - subject_from_buf(&subj, &parent->string_content, refmap); + subject_from_buf(mem, &subj, &parent->content, refmap); cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) @@ -1060,7 +1064,7 @@ static void spnl(subject *subj) { // Modify refmap if a reference is encountered. // Return 0 if no reference found, otherwise position of subject // after reference is parsed. -bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, cmark_reference_map *refmap) { subject subj; @@ -1071,7 +1075,7 @@ bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, bufsize_t matchlen = 0; bufsize_t beforetitle; - subject_from_buf(&subj, input, NULL); + subject_from_buf(mem, &subj, input, NULL); // parse label: if (!link_label(&subj, &lab) || lab.len == 0) diff --git a/src/inlines.h b/src/inlines.h index 7e7ee45c6c..cbe7830321 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -5,13 +5,13 @@ extern "C" { #endif -cmark_chunk cmark_clean_url(cmark_chunk *url); -cmark_chunk cmark_clean_title(cmark_chunk *title); +cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url); +cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); -void cmark_parse_inlines(cmark_node *parent, cmark_reference_map *refmap, +void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options); -bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, cmark_reference_map *refmap); #ifdef __cplusplus diff --git a/src/iterator.c b/src/iterator.c index 40287f58e2..24423a217f 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -16,7 +16,9 @@ cmark_iter *cmark_iter_new(cmark_node *root) { if (root == NULL) { return NULL; } - cmark_iter *iter = (cmark_iter *)cmark_calloc(1, sizeof(cmark_iter)); + cmark_mem *mem = root->content.mem; + cmark_iter *iter = (cmark_iter *)mem->calloc(1, sizeof(cmark_iter)); + iter->mem = mem; iter->root = root; iter->cur.ev_type = CMARK_EVENT_NONE; iter->cur.node = NULL; @@ -25,7 +27,7 @@ cmark_iter *cmark_iter_new(cmark_node *root) { return iter; } -void cmark_iter_free(cmark_iter *iter) { free(iter); } +void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); } static bool S_is_leaf(cmark_node *node) { return ((1 << node->type) & S_leaf_mask) != 0; @@ -90,7 +92,7 @@ void cmark_consolidate_text_nodes(cmark_node *root) { return; } cmark_iter *iter = cmark_iter_new(root); - cmark_strbuf buf = GH_BUF_INIT; + cmark_strbuf buf = CMARK_BUF_INIT(iter->mem); cmark_event_type ev_type; cmark_node *cur, *tmp, *next; @@ -108,7 +110,7 @@ void cmark_consolidate_text_nodes(cmark_node *root) { cmark_node_free(tmp); tmp = next; } - cmark_chunk_free(&cur->as.literal); + cmark_chunk_free(iter->mem, &cur->as.literal); cur->as.literal = cmark_chunk_buf_detach(&buf); } } diff --git a/src/iterator.h b/src/iterator.h index 9c6bca6635..fc745df5bb 100644 --- a/src/iterator.h +++ b/src/iterator.h @@ -6,6 +6,7 @@ extern "C" { #endif #include "cmark.h" +#include "memory.h" typedef struct { cmark_event_type ev_type; @@ -13,6 +14,7 @@ typedef struct { } cmark_iter_state; struct cmark_iter { + cmark_mem *mem; cmark_node *root; cmark_iter_state cur; cmark_iter_state next; diff --git a/src/main.c b/src/main.c index 5ea4b61f6a..88a4f322f3 100644 --- a/src/main.c +++ b/src/main.c @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) { _setmode(_fileno(stdout), _O_BINARY); #endif - files = (int *)cmark_calloc(argc, sizeof(*files)); + files = (int *)calloc(argc, sizeof(*files)); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { diff --git a/src/memory.h b/src/memory.h deleted file mode 100644 index f05d56615b..0000000000 --- a/src/memory.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CMARK_MEM_H -#define CMARK_MEM_H - -#ifdef __cplusplus -extern "C" { -#endif - -void *cmark_calloc(size_t nmem, size_t size); -void *cmark_realloc(void *ptr, size_t size); -void cmark_trigger_oom(void); - -#endif diff --git a/src/node.c b/src/node.c index 30cd69f286..fee919d8c9 100644 --- a/src/node.c +++ b/src/node.c @@ -6,6 +6,8 @@ static void S_node_unlink(cmark_node *node); +#define NODE_MEM(node) cmark_node_mem(node) + static CMARK_INLINE bool S_is_block(cmark_node *node) { if (node == NULL) { return false; @@ -28,6 +30,9 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { if (node == NULL || child == NULL) { return false; } + if (NODE_MEM(node) != NODE_MEM(child)) { + return 0; + } // Verify that child is not an ancestor of node or equal to node. cur = node; @@ -70,8 +75,9 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { return false; } -cmark_node *cmark_node_new(cmark_node_type type) { - cmark_node *node = (cmark_node *)cmark_calloc(1, sizeof(*node)); +cmark_node *cmark_node_new2(cmark_node_type type, cmark_mem *mem) { + cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node)); + cmark_strbuf_init(mem, &node->content, 0); node->type = type; switch (node->type) { @@ -94,33 +100,36 @@ cmark_node *cmark_node_new(cmark_node_type type) { return node; } +cmark_node *cmark_node_new(cmark_node_type type) { + extern cmark_mem DEFAULT_MEM_ALLOCATOR; + return cmark_node_new2(type, &DEFAULT_MEM_ALLOCATOR); +} + // Free a cmark_node list and any children. static void S_free_nodes(cmark_node *e) { cmark_node *next; while (e != NULL) { - if (S_is_block(e)) { - cmark_strbuf_free(&e->string_content); - } + cmark_strbuf_free(&e->content); switch (e->type) { case CMARK_NODE_CODE_BLOCK: - cmark_chunk_free(&e->as.code.info); - cmark_chunk_free(&e->as.code.literal); + cmark_chunk_free(NODE_MEM(e), &e->as.code.info); + cmark_chunk_free(NODE_MEM(e), &e->as.code.literal); break; case CMARK_NODE_TEXT: case CMARK_NODE_HTML_INLINE: case CMARK_NODE_CODE: case CMARK_NODE_HTML_BLOCK: - cmark_chunk_free(&e->as.literal); + cmark_chunk_free(NODE_MEM(e), &e->as.literal); break; case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: - cmark_chunk_free(&e->as.link.url); - cmark_chunk_free(&e->as.link.title); + cmark_chunk_free(NODE_MEM(e), &e->as.link.url); + cmark_chunk_free(NODE_MEM(e), &e->as.link.title); break; case CMARK_NODE_CUSTOM_BLOCK: case CMARK_NODE_CUSTOM_INLINE: - cmark_chunk_free(&e->as.custom.on_enter); - cmark_chunk_free(&e->as.custom.on_exit); + cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_enter); + cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_exit); break; default: break; @@ -131,7 +140,7 @@ static void S_free_nodes(cmark_node *e) { e->next = e->first_child; } next = e->next; - free(e); + NODE_MEM(e)->free(e); e = next; } } @@ -269,10 +278,10 @@ const char *cmark_node_get_literal(cmark_node *node) { case CMARK_NODE_TEXT: case CMARK_NODE_HTML_INLINE: case CMARK_NODE_CODE: - return cmark_chunk_to_cstr(&node->as.literal); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal); case CMARK_NODE_CODE_BLOCK: - return cmark_chunk_to_cstr(&node->as.code.literal); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.literal); default: break; @@ -291,11 +300,11 @@ int cmark_node_set_literal(cmark_node *node, const char *content) { case CMARK_NODE_TEXT: case CMARK_NODE_HTML_INLINE: case CMARK_NODE_CODE: - cmark_chunk_set_cstr(&node->as.literal, content); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content); return 1; case CMARK_NODE_CODE_BLOCK: - cmark_chunk_set_cstr(&node->as.code.literal, content); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content); return 1; default: @@ -452,7 +461,7 @@ const char *cmark_node_get_fence_info(cmark_node *node) { } if (node->type == CMARK_NODE_CODE_BLOCK) { - return cmark_chunk_to_cstr(&node->as.code.info); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.info); } else { return NULL; } @@ -464,7 +473,7 @@ int cmark_node_set_fence_info(cmark_node *node, const char *info) { } if (node->type == CMARK_NODE_CODE_BLOCK) { - cmark_chunk_set_cstr(&node->as.code.info, info); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info); return 1; } else { return 0; @@ -479,7 +488,7 @@ const char *cmark_node_get_url(cmark_node *node) { switch (node->type) { case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: - return cmark_chunk_to_cstr(&node->as.link.url); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.url); default: break; } @@ -495,7 +504,7 @@ int cmark_node_set_url(cmark_node *node, const char *url) { switch (node->type) { case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: - cmark_chunk_set_cstr(&node->as.link.url, url); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.url, url); return 1; default: break; @@ -512,7 +521,7 @@ const char *cmark_node_get_title(cmark_node *node) { switch (node->type) { case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: - return cmark_chunk_to_cstr(&node->as.link.title); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.title); default: break; } @@ -528,7 +537,7 @@ int cmark_node_set_title(cmark_node *node, const char *title) { switch (node->type) { case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: - cmark_chunk_set_cstr(&node->as.link.title, title); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title); return 1; default: break; @@ -545,7 +554,7 @@ const char *cmark_node_get_on_enter(cmark_node *node) { switch (node->type) { case CMARK_NODE_CUSTOM_INLINE: case CMARK_NODE_CUSTOM_BLOCK: - return cmark_chunk_to_cstr(&node->as.custom.on_enter); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_enter); default: break; } @@ -561,7 +570,7 @@ int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) { switch (node->type) { case CMARK_NODE_CUSTOM_INLINE: case CMARK_NODE_CUSTOM_BLOCK: - cmark_chunk_set_cstr(&node->as.custom.on_enter, on_enter); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_enter, on_enter); return 1; default: break; @@ -578,7 +587,7 @@ const char *cmark_node_get_on_exit(cmark_node *node) { switch (node->type) { case CMARK_NODE_CUSTOM_INLINE: case CMARK_NODE_CUSTOM_BLOCK: - return cmark_chunk_to_cstr(&node->as.custom.on_exit); + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_exit); default: break; } @@ -594,7 +603,7 @@ int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) { switch (node->type) { case CMARK_NODE_CUSTOM_INLINE: case CMARK_NODE_CUSTOM_BLOCK: - cmark_chunk_set_cstr(&node->as.custom.on_exit, on_exit); + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_exit, on_exit); return 1; default: break; diff --git a/src/node.h b/src/node.h index 397d8e392f..1fff990c64 100644 --- a/src/node.h +++ b/src/node.h @@ -48,6 +48,8 @@ typedef struct { } cmark_custom; struct cmark_node { + cmark_strbuf content; + struct cmark_node *next; struct cmark_node *prev; struct cmark_node *parent; @@ -62,11 +64,8 @@ struct cmark_node { int end_column; cmark_node_type type; - - bool open; bool last_line_blank; - - cmark_strbuf string_content; + bool open; union { cmark_chunk literal; @@ -79,6 +78,9 @@ struct cmark_node { } as; }; +static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) { + return node->content.mem; +} CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out); #ifdef __cplusplus diff --git a/src/parser.h b/src/parser.h index ab21d0fa7b..13094209c0 100644 --- a/src/parser.h +++ b/src/parser.h @@ -4,6 +4,7 @@ #include #include "node.h" #include "buffer.h" +#include "memory.h" #ifdef __cplusplus extern "C" { @@ -12,6 +13,7 @@ extern "C" { #define MAX_LINK_LABEL_LENGTH 1000 struct cmark_parser { + struct cmark_mem *mem; struct cmark_reference_map *refmap; struct cmark_node *root; struct cmark_node *current; diff --git a/src/references.c b/src/references.c index 168bd89720..235e0af9d5 100755 --- a/src/references.c +++ b/src/references.c @@ -14,12 +14,13 @@ static unsigned int refhash(const unsigned char *link_ref) { return hash; } -static void reference_free(cmark_reference *ref) { +static void reference_free(cmark_reference_map *map, cmark_reference *ref) { + cmark_mem *mem = map->mem; if (ref != NULL) { - free(ref->label); - cmark_chunk_free(&ref->url); - cmark_chunk_free(&ref->title); - free(ref); + mem->free(ref->label); + cmark_chunk_free(mem, &ref->url); + cmark_chunk_free(mem, &ref->title); + mem->free(ref); } } @@ -27,8 +28,8 @@ static void reference_free(cmark_reference *ref) { // remove leading/trailing whitespace, case fold // Return NULL if the reference name is actually empty (i.e. composed // solely from whitespace) -static unsigned char *normalize_reference(cmark_chunk *ref) { - cmark_strbuf normalized = GH_BUF_INIT; +static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) { + cmark_strbuf normalized = CMARK_BUF_INIT(mem); unsigned char *result; if (ref == NULL) @@ -57,7 +58,7 @@ static void add_reference(cmark_reference_map *map, cmark_reference *ref) { while (t) { if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) { - reference_free(ref); + reference_free(map, ref); return; } @@ -70,17 +71,17 @@ static void add_reference(cmark_reference_map *map, cmark_reference *ref) { void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, cmark_chunk *url, cmark_chunk *title) { cmark_reference *ref; - unsigned char *reflabel = normalize_reference(label); + unsigned char *reflabel = normalize_reference(map->mem, label); /* empty reference name, or composed from only whitespace */ if (reflabel == NULL) return; - ref = (cmark_reference *)cmark_calloc(1, sizeof(*ref)); + ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref)); ref->label = reflabel; ref->hash = refhash(ref->label); - ref->url = cmark_clean_url(url); - ref->title = cmark_clean_title(title); + ref->url = cmark_clean_url(map->mem, url); + ref->title = cmark_clean_title(map->mem, title); ref->next = NULL; add_reference(map, ref); @@ -100,7 +101,7 @@ cmark_reference *cmark_reference_lookup(cmark_reference_map *map, if (map == NULL) return NULL; - norm = normalize_reference(label); + norm = normalize_reference(map->mem, label); if (norm == NULL) return NULL; @@ -129,7 +130,7 @@ void cmark_reference_map_free(cmark_reference_map *map) { while (ref) { next = ref->next; - reference_free(ref); + reference_free(map, ref); ref = next; } } @@ -137,6 +138,8 @@ void cmark_reference_map_free(cmark_reference_map *map) { free(map); } -cmark_reference_map *cmark_reference_map_new(void) { - return (cmark_reference_map *)cmark_calloc(1, sizeof(cmark_reference_map)); +cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) { + cmark_reference_map *map = mem->calloc(1, sizeof(cmark_reference_map)); + map->mem = mem; + return map; } diff --git a/src/references.h b/src/references.h index 310ff9fee1..f075bbbd9e 100644 --- a/src/references.h +++ b/src/references.h @@ -1,6 +1,7 @@ #ifndef CMARK_REFERENCES_H #define CMARK_REFERENCES_H +#include "memory.h" #include "chunk.h" #ifdef __cplusplus @@ -20,12 +21,13 @@ struct cmark_reference { typedef struct cmark_reference cmark_reference; struct cmark_reference_map { + cmark_mem *mem; cmark_reference *table[REFMAP_SIZE]; }; typedef struct cmark_reference_map cmark_reference_map; -cmark_reference_map *cmark_reference_map_new(void); +cmark_reference_map *cmark_reference_map_new(cmark_mem *mem); void cmark_reference_map_free(cmark_reference_map *map); cmark_reference *cmark_reference_lookup(cmark_reference_map *map, cmark_chunk *label); diff --git a/src/render.c b/src/render.c index b1ed2e419f..0f88007085 100644 --- a/src/render.c +++ b/src/render.c @@ -4,6 +4,7 @@ #include "cmark.h" #include "utf8.h" #include "render.h" +#include "node.h" static CMARK_INLINE void S_cr(cmark_renderer *renderer) { if (renderer->need_cr < 1) { @@ -108,7 +109,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, !renderer->begin_line && renderer->last_breakable > 0) { // copy from last_breakable to remainder - cmark_chunk_set_cstr(&remainder, (char *)renderer->buffer->ptr + + cmark_chunk_set_cstr(renderer->mem, &remainder, (char *)renderer->buffer->ptr + renderer->last_breakable + 1); // truncate at last_breakable cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable); @@ -118,7 +119,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, renderer->prefix->size); cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len); renderer->column = renderer->prefix->size + remainder.len; - cmark_chunk_free(&remainder); + cmark_chunk_free(renderer->mem, &remainder); renderer->last_breakable = 0; renderer->begin_line = false; renderer->begin_content = false; @@ -146,14 +147,15 @@ char *cmark_render(cmark_node *root, int options, int width, int (*render_node)(cmark_renderer *renderer, cmark_node *node, cmark_event_type ev_type, int options)) { - cmark_strbuf pref = GH_BUF_INIT; - cmark_strbuf buf = GH_BUF_INIT; + cmark_mem *mem = cmark_node_mem(root); + cmark_strbuf pref = CMARK_BUF_INIT(mem); + cmark_strbuf buf = CMARK_BUF_INIT(mem); cmark_node *cur; cmark_event_type ev_type; char *result; cmark_iter *iter = cmark_iter_new(root); - cmark_renderer renderer = {&buf, &pref, 0, width, 0, + cmark_renderer renderer = {mem, &buf, &pref, 0, width, 0, 0, true, true, false, false, outc, S_cr, S_blankline, S_out}; diff --git a/src/render.h b/src/render.h index c3acf6b09c..35eb0a65db 100644 --- a/src/render.h +++ b/src/render.h @@ -8,10 +8,12 @@ extern "C" { #include #include "buffer.h" #include "chunk.h" +#include "memory.h" typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping; struct cmark_renderer { + cmark_mem *mem; cmark_strbuf *buffer; cmark_strbuf *prefix; int column; diff --git a/src/xml.c b/src/xml.c index 12bd629d67..4898cd2e82 100644 --- a/src/xml.c +++ b/src/xml.c @@ -149,7 +149,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, char *cmark_render_xml(cmark_node *root, int options) { char *result; - cmark_strbuf xml = GH_BUF_INIT; + cmark_strbuf xml = CMARK_BUF_INIT(cmark_node_mem(root)); cmark_event_type ev_type; cmark_node *cur; struct render_state state = {&xml, 0}; -- cgit 0.0.5-2-1-g0f52 From 0c73a05dca8afca491298f3d8f07750e3fcf330d Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 30 May 2016 15:49:14 +0200 Subject: node: Memory diet Save node information in flags instead of using one boolean for each property. --- src/blocks.c | 35 ++++++++++++++++++++++++----------- src/node.h | 11 +++++++---- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index ef1790e5c5..e4d5bf733f 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -30,6 +30,17 @@ #define peek_at(i, n) (i)->data[n] +static bool S_last_line_blank(const cmark_node *node) { + return (node->flags & CMARK_NODE__LAST_LINE_BLANK); +} + +static void S_set_last_line_blank(cmark_node *node, bool is_blank) { + if (is_blank) + node->flags |= CMARK_NODE__LAST_LINE_BLANK; + else + node->flags &= ~CMARK_NODE__LAST_LINE_BLANK; +} + static CMARK_INLINE bool S_is_line_end_char(char c) { return (c == '\n' || c == '\r'); } @@ -51,7 +62,7 @@ static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, int start_lin e = (cmark_node *)mem->calloc(1, sizeof(*e)); cmark_strbuf_init(mem, &e->content, 32); e->type = tag; - e->open = true; + e->flags = CMARK_NODE__OPEN; e->start_line = start_line; e->start_column = start_column; e->end_line = start_line; @@ -166,7 +177,7 @@ static CMARK_INLINE bool contains_inlines(cmark_node_type block_type) { static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { int chars_to_tab; int i; - assert(node->open); + assert(node->flags & CMARK_NODE__OPEN); if (parser->partially_consumed_tab) { parser->offset += 1; // skip over tab // add space characters: @@ -211,7 +222,7 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) { static bool ends_with_blank_line(cmark_node *node) { cmark_node *cur = node; while (cur != NULL) { - if (cur->last_line_blank) { + if (S_last_line_blank(cur)) { return true; } if (cur->type == CMARK_NODE_LIST || cur->type == CMARK_NODE_ITEM) { @@ -248,8 +259,8 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { cmark_node *parent; parent = b->parent; - assert(b->open); // shouldn't call finalize on closed blocks - b->open = false; + assert(b->flags & CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks + b->flags &= ~CMARK_NODE__OPEN; if (parser->curline->size == 0) { // end of input - line number has not been incremented @@ -322,7 +333,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { while (item) { // check for non-final non-empty list item ending with blank line: - if (item->last_line_blank && item->next) { + if (S_last_line_blank(item) && item->next) { b->as.list.tight = false; break; } @@ -656,7 +667,7 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, } static bool S_last_child_is_open(cmark_node *container) { - return container->last_child && container->last_child->open; + return container->last_child && (container->last_child->flags & CMARK_NODE__OPEN); } static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { @@ -1007,13 +1018,13 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, S_find_first_nonspace(parser, input); if (parser->blank && container->last_child) - container->last_child->last_line_blank = true; + S_set_last_line_blank(container->last_child, true); // block quote lines are never blank as they start with > // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. we also don't set last_line_blank // on an empty list item. - container->last_line_blank = + bool last_line_blank = (parser->blank && container->type != CMARK_NODE_BLOCK_QUOTE && container->type != CMARK_NODE_HEADING && container->type != CMARK_NODE_THEMATIC_BREAK && @@ -1022,9 +1033,11 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, !(container->type == CMARK_NODE_ITEM && container->first_child == NULL && container->start_line == parser->line_number)); + S_set_last_line_blank(container, last_line_blank); + tmp = container; while (tmp->parent) { - tmp->parent->last_line_blank = false; + S_set_last_line_blank(tmp->parent, false); tmp = tmp->parent; } @@ -1144,7 +1157,7 @@ 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 && container->last_line_blank) + if (parser->blank && S_last_line_blank(container)) break_out_of_lists(parser, &container); open_new_blocks(parser, &container, &input, all_matched); diff --git a/src/node.h b/src/node.h index 1fff990c64..84b256088c 100644 --- a/src/node.h +++ b/src/node.h @@ -47,6 +47,11 @@ typedef struct { cmark_chunk on_exit; } cmark_custom; +enum cmark_node__internal_flags { + CMARK_NODE__OPEN = (1 << 0), + CMARK_NODE__LAST_LINE_BLANK = (1 << 1), +}; + struct cmark_node { cmark_strbuf content; @@ -62,10 +67,8 @@ struct cmark_node { int start_column; int end_line; int end_column; - - cmark_node_type type; - bool last_line_blank; - bool open; + uint16_t type; + uint16_t flags; union { cmark_chunk literal; -- cgit 0.0.5-2-1-g0f52 From 8e11c6d7a2f43bd507cc0349843c6fde8392eccb Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 30 May 2016 15:54:13 +0200 Subject: buffer: rever to using a 32-bit bufsize_t --- src/buffer.c | 2 +- src/buffer.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index b879f0c873..12cbc5631e 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -41,7 +41,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { if (target_size < buf->asize) return; - if (target_size > (bufsize_t)(SIZE_MAX / 4)) + if (target_size > (bufsize_t)(INT32_MAX / 2)) abort(); /* Oversize the buffer by 50% to guarantee amortized linear time diff --git a/src/buffer.h b/src/buffer.h index 96b2704d8e..2d3db0d337 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -13,7 +13,7 @@ extern "C" { #endif -typedef ssize_t bufsize_t; +typedef int32_t bufsize_t; typedef struct { cmark_mem *mem; -- cgit 0.0.5-2-1-g0f52 From f39eaefb651064ea6b4b8f030ec98f98c94fe95a Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 30 May 2016 16:07:07 +0200 Subject: node: Memory diet Reduce the storage size for the `cmark_code` struct --- src/blocks.c | 2 +- src/node.h | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index e4d5bf733f..aae81c3c8e 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -897,7 +897,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, parser->first_nonspace + 1); (*container)->as.code.fenced = true; (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace); - (*container)->as.code.fence_length = matched; + (*container)->as.code.fence_length = (matched > 255) ? 255 : matched; (*container)->as.code.fence_offset = (int8_t)(parser->first_nonspace - parser->offset); (*container)->as.code.info = cmark_chunk_literal(""); diff --git a/src/node.h b/src/node.h index 84b256088c..65d857f0b3 100644 --- a/src/node.h +++ b/src/node.h @@ -25,11 +25,10 @@ typedef struct { typedef struct { cmark_chunk info; cmark_chunk literal; - int fence_length; - /* fence_offset must be 0-3, so we can use int8_t */ - int8_t fence_offset; + uint8_t fence_length; + uint8_t fence_offset; unsigned char fence_char; - bool fenced; + int8_t fenced; } cmark_code; typedef struct { -- cgit 0.0.5-2-1-g0f52 From 27376c2150df53d23995c0360a30152f68af5e7c Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 3 Jun 2016 10:03:05 +0200 Subject: Do not include `stdbool` --- src/buffer.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/buffer.h b/src/buffer.h index 2d3db0d337..b40ab926e9 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -5,7 +5,6 @@ #include #include #include -#include #include "config.h" #include "cmark.h" -- cgit 0.0.5-2-1-g0f52 From fc1299a51ede05b3a76ae2f5a3ce882741a43a8b Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 6 Jun 2016 11:45:47 +0200 Subject: mem: Add a `realloc` pointer to the memory handler --- man/man3/cmark.3 | 3 ++- src/blocks.c | 13 +------------ src/buffer.c | 8 +------- src/cmark.c | 14 ++++++++++++++ src/cmark.h | 1 + 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index ca304e6f0a..ec4e031d12 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "June 02, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 06, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -104,6 +104,7 @@ Custom memory allocator support .RS 0n typedef struct cmark_mem { void *(*calloc)(size_t, size_t); + void *(*realloc)(void *, size_t); void (*free)(void *); } cmark_mem; .RE diff --git a/src/blocks.c b/src/blocks.c index aae81c3c8e..778c330f25 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -106,19 +106,8 @@ cmark_parser *cmark_parser_new2(int options, cmark_mem *mem) { return parser; } -static void *xcalloc(size_t nmem, size_t size) { - void *ptr = calloc(nmem, size); - if (!ptr) abort(); - return ptr; -} - -static void xfree(void *ptr) { - free(ptr); -} - -cmark_mem DEFAULT_MEM_ALLOCATOR = { xcalloc, xfree }; - cmark_parser *cmark_parser_new(int options) { + extern cmark_mem DEFAULT_MEM_ALLOCATOR; return cmark_parser_new2(options, &DEFAULT_MEM_ALLOCATOR); } diff --git a/src/buffer.c b/src/buffer.c index 12cbc5631e..e19105647a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -50,14 +50,8 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { new_size += 1; new_size = (new_size + 7) & ~7; - unsigned char *new_ptr = buf->mem->calloc(new_size, 1); - if (buf->ptr != cmark_strbuf__initbuf) { - memcpy(new_ptr, buf->ptr, buf->size); - buf->mem->free(buf->ptr); - } - + buf->ptr = buf->mem->realloc(buf->asize ? buf->ptr : NULL, new_size); buf->asize = new_size; - buf->ptr = new_ptr; } bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } diff --git a/src/cmark.c b/src/cmark.c index 3491199736..d5fef6382e 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -10,6 +10,20 @@ int cmark_version() { return CMARK_VERSION; } const char *cmark_version_string() { return CMARK_VERSION_STRING; } +static void *xcalloc(size_t nmem, size_t size) { + void *ptr = calloc(nmem, size); + if (!ptr) abort(); + return ptr; +} + +static void *xrealloc(void *ptr, size_t size) { + void *new_ptr = realloc(ptr, size); + if (!new_ptr) abort(); + return new_ptr; +} + +cmark_mem DEFAULT_MEM_ALLOCATOR = { xcalloc, xrealloc, free }; + char *cmark_markdown_to_html(const char *text, size_t len, int options) { cmark_node *doc; char *result; diff --git a/src/cmark.h b/src/cmark.h index 293919d216..e7d39ec55d 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -97,6 +97,7 @@ typedef struct cmark_iter cmark_iter; */ typedef struct cmark_mem { void *(*calloc)(size_t, size_t); + void *(*realloc)(void *, size_t); void (*free)(void *); } cmark_mem; -- cgit 0.0.5-2-1-g0f52 From cea908d84fee8daa1da8c6eeec0767dcbc543088 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 6 Jun 2016 11:47:36 +0200 Subject: mem: Rename the new APIs --- man/man3/cmark.3 | 4 ++-- src/blocks.c | 4 ++-- src/cmark.h | 4 ++-- src/node.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index ec4e031d12..5b33deaf1a 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -127,7 +127,7 @@ other required properties, which it is the caller\[cq]s responsibility to assign. .PP -\fIcmark_node *\f[] \fBcmark_node_new2\f[](\fIcmark_node_type type\f[], \fIcmark_mem *mem\f[]) +\fIcmark_node *\f[] \fBcmark_node_new_with_mem\f[](\fIcmark_node_type type\f[], \fIcmark_mem *mem\f[]) .PP Same as \f[C]cmark_node_new\f[], but explicitly listing the memory @@ -591,7 +591,7 @@ cmark_parser_free(parser); Creates a new parser object. .PP -\fIcmark_parser *\f[] \fBcmark_parser_new2\f[](\fIint options\f[], \fIcmark_mem *mem\f[]) +\fIcmark_parser *\f[] \fBcmark_parser_new_with_mem\f[](\fIint options\f[], \fIcmark_mem *mem\f[]) .PP Creates a new parser object with the given memory allocator diff --git a/src/blocks.c b/src/blocks.c index 778c330f25..5ce17abf10 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -76,7 +76,7 @@ static cmark_node *make_document(cmark_mem *mem) { return e; } -cmark_parser *cmark_parser_new2(int options, cmark_mem *mem) { +cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { cmark_parser *parser = mem->calloc(1, sizeof(cmark_parser)); parser->mem = mem; @@ -108,7 +108,7 @@ cmark_parser *cmark_parser_new2(int options, cmark_mem *mem) { cmark_parser *cmark_parser_new(int options) { extern cmark_mem DEFAULT_MEM_ALLOCATOR; - return cmark_parser_new2(options, &DEFAULT_MEM_ALLOCATOR); + return cmark_parser_new_with_mem(options, &DEFAULT_MEM_ALLOCATOR); } void cmark_parser_free(cmark_parser *parser) { diff --git a/src/cmark.h b/src/cmark.h index e7d39ec55d..785b254428 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -115,7 +115,7 @@ CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); /** Same as `cmark_node_new`, but explicitly listing the memory * allocator used to allocate the node */ -CMARK_EXPORT cmark_node *cmark_node_new2(cmark_node_type type, cmark_mem *mem); +CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem); /** Frees the memory allocated for a node and any children. */ @@ -460,7 +460,7 @@ cmark_parser *cmark_parser_new(int options); /** Creates a new parser object with the given memory allocator */ CMARK_EXPORT -cmark_parser *cmark_parser_new2(int options, cmark_mem *mem); +cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem); /** Frees memory allocated for a parser object. */ diff --git a/src/node.c b/src/node.c index fee919d8c9..61d30dd01d 100644 --- a/src/node.c +++ b/src/node.c @@ -75,7 +75,7 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { return false; } -cmark_node *cmark_node_new2(cmark_node_type type, cmark_mem *mem) { +cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) { cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node)); cmark_strbuf_init(mem, &node->content, 0); node->type = type; @@ -102,7 +102,7 @@ cmark_node *cmark_node_new2(cmark_node_type type, cmark_mem *mem) { cmark_node *cmark_node_new(cmark_node_type type) { extern cmark_mem DEFAULT_MEM_ALLOCATOR; - return cmark_node_new2(type, &DEFAULT_MEM_ALLOCATOR); + return cmark_node_new_with_mem(type, &DEFAULT_MEM_ALLOCATOR); } // Free a cmark_node list and any children. -- cgit 0.0.5-2-1-g0f52 From f4264ac96e88ec32cd0d63641207bddcfd6f8ce1 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 6 Jun 2016 11:48:05 +0200 Subject: cmark: Remove old include --- src/cmark.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cmark.h b/src/cmark.h index 785b254428..45d7bc324b 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -4,7 +4,6 @@ #include #include #include -#include "memory.h" #ifdef __cplusplus extern "C" { -- cgit 0.0.5-2-1-g0f52 From d4cb8e767ce224d31501c19fb11a220824df9bf8 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 6 Jun 2016 11:50:13 +0200 Subject: msvc: Fix warnings and errors --- src/blocks.c | 121 +++++++++++++++++++++++++++---------------------------- src/buffer.c | 5 ++- src/buffer.h | 1 + src/chunk.h | 4 +- src/node.c | 4 +- src/parser.h | 6 +-- src/references.c | 2 +- 7 files changed, 72 insertions(+), 71 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 5ce17abf10..2386bb1845 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -31,7 +31,11 @@ #define peek_at(i, n) (i)->data[n] static bool S_last_line_blank(const cmark_node *node) { - return (node->flags & CMARK_NODE__LAST_LINE_BLANK); + return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0; +} + +static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) { + return (cmark_node_type)node->type; } static void S_set_last_line_blank(cmark_node *node, bool is_blank) { @@ -61,7 +65,7 @@ static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, int start_lin e = (cmark_node *)mem->calloc(1, sizeof(*e)); cmark_strbuf_init(mem, &e->content, 32); - e->type = tag; + e->type = (uint16_t)tag; e->flags = CMARK_NODE__OPEN; e->start_line = start_line; e->start_column = start_column; @@ -77,14 +81,13 @@ static cmark_node *make_document(cmark_mem *mem) { } cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { - cmark_parser *parser = mem->calloc(1, sizeof(cmark_parser)); + cmark_parser *parser = (cmark_parser *)mem->calloc(1, sizeof(cmark_parser)); parser->mem = mem; cmark_node *document = make_document(mem); - cmark_strbuf *line = mem->calloc(1, sizeof(cmark_strbuf)); - cmark_strbuf *buf = mem->calloc(1, sizeof(cmark_strbuf)); - cmark_strbuf_init(mem, line, 256); - cmark_strbuf_init(mem, buf, 0); + + cmark_strbuf_init(mem, &parser->curline, 256); + cmark_strbuf_init(mem, &parser->linebuf, 0); parser->refmap = cmark_reference_map_new(mem); parser->root = document; @@ -97,9 +100,7 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->indent = 0; parser->blank = false; parser->partially_consumed_tab = false; - parser->curline = line; parser->last_line_length = 0; - parser->linebuf = buf; parser->options = options; parser->last_buffer_ended_with_cr = false; @@ -113,10 +114,8 @@ cmark_parser *cmark_parser_new(int options) { void cmark_parser_free(cmark_parser *parser) { cmark_mem *mem = parser->mem; - cmark_strbuf_free(parser->curline); - mem->free(parser->curline); - cmark_strbuf_free(parser->linebuf); - mem->free(parser->linebuf); + cmark_strbuf_free(&parser->curline); + cmark_strbuf_free(&parser->linebuf); cmark_reference_map_free(parser->refmap); mem->free(parser); } @@ -214,7 +213,7 @@ static bool ends_with_blank_line(cmark_node *node) { if (S_last_line_blank(cur)) { return true; } - if (cur->type == CMARK_NODE_LIST || cur->type == CMARK_NODE_ITEM) { + if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) { cur = cur->last_child; } else { cur = NULL; @@ -228,7 +227,7 @@ 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 && b->type != CMARK_NODE_LIST) { + while (b && S_type(b) != CMARK_NODE_LIST) { b = b->last_child; } if (b) { @@ -251,18 +250,18 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { assert(b->flags & CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks b->flags &= ~CMARK_NODE__OPEN; - if (parser->curline->size == 0) { + if (parser->curline.size == 0) { // end of input - line number has not been incremented b->end_line = parser->line_number; b->end_column = parser->last_line_length; - } else if (b->type == CMARK_NODE_DOCUMENT || - (b->type == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) || - (b->type == CMARK_NODE_HEADING && b->as.heading.setext)) { + } else if (S_type(b) == CMARK_NODE_DOCUMENT || + (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) || + (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) { b->end_line = parser->line_number; - b->end_column = parser->curline->size; - if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n') + b->end_column = parser->curline.size; + if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n') b->end_column -= 1; - if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r') + if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\r') b->end_column -= 1; } else { b->end_line = parser->line_number - 1; @@ -271,7 +270,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { cmark_strbuf *node_content = &b->content; - switch (b->type) { + switch (S_type(b)) { case CMARK_NODE_PARAGRAPH: while (cmark_strbuf_at(node_content, 0) == '[' && (pos = cmark_parse_reference_inline(parser->mem, node_content, @@ -358,7 +357,7 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, // if 'parent' isn't the kind of node that can accept this child, // then back up til we hit a node that can. - while (!can_contain(parent->type, block_type)) { + while (!can_contain(S_type(parent), block_type)) { parent = finalize(parser, parent); } @@ -387,7 +386,7 @@ static void process_inlines(cmark_mem *mem, cmark_node *root, cmark_reference_ma while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); if (ev_type == CMARK_EVENT_ENTER) { - if (contains_inlines(cur->type)) { + if (contains_inlines(S_type(cur))) { cmark_parse_inlines(mem, cur, refmap, options); } } @@ -539,22 +538,22 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, chunk_len = (eol - buffer); if (process) { - if (parser->linebuf->size > 0) { - cmark_strbuf_put(parser->linebuf, buffer, chunk_len); - S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size); - cmark_strbuf_clear(parser->linebuf); + if (parser->linebuf.size > 0) { + cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); + S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); + cmark_strbuf_clear(&parser->linebuf); } else { S_process_line(parser, buffer, chunk_len); } } else { if (eol < end && *eol == '\0') { // omit NULL byte - cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); // add replacement character - cmark_strbuf_put(parser->linebuf, repl, 3); + cmark_strbuf_put(&parser->linebuf, repl, 3); chunk_len += 1; // so we advance the buffer past NULL } else { - cmark_strbuf_put(parser->linebuf, buffer, chunk_len); + cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); } } @@ -783,7 +782,7 @@ static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, while (S_last_child_is_open(container)) { container = container->last_child; - cont_type = container->type; + cont_type = S_type(container); S_find_first_nonspace(parser, input); @@ -834,8 +833,8 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, cmark_chunk *input, bool all_matched) { bool indented; cmark_list *data = NULL; - bool maybe_lazy = parser->current->type == CMARK_NODE_PARAGRAPH; - cmark_node_type cont_type = (*container)->type; + bool maybe_lazy = S_type(parser->current) == CMARK_NODE_PARAGRAPH; + cmark_node_type cont_type = S_type(*container); bufsize_t matched = 0; int lev = 0; bool save_partially_consumed_tab; @@ -907,7 +906,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH && (lev = scan_setext_heading_line(input, parser->first_nonspace))) { - (*container)->type = CMARK_NODE_HEADING; + (*container)->type = (uint16_t)CMARK_NODE_HEADING; (*container)->as.heading.level = lev; (*container)->as.heading.setext = true; S_advance_offset(parser, input, input->len - 1 - parser->offset, false); @@ -987,12 +986,12 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, break; } - if (accepts_lines((*container)->type)) { + if (accepts_lines(S_type(*container))) { // if it's a line container, it can't contain other containers break; } - cont_type = (*container)->type; + cont_type = S_type(*container); maybe_lazy = false; } } @@ -1013,13 +1012,13 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. we also don't set last_line_blank // on an empty list item. - bool last_line_blank = - (parser->blank && container->type != CMARK_NODE_BLOCK_QUOTE && - container->type != CMARK_NODE_HEADING && - container->type != CMARK_NODE_THEMATIC_BREAK && - !(container->type == CMARK_NODE_CODE_BLOCK && - container->as.code.fenced) && - !(container->type == CMARK_NODE_ITEM && container->first_child == NULL && + const cmark_node_type ctype = S_type(container); + const bool last_line_blank = + (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE && + ctype != CMARK_NODE_HEADING && + ctype != CMARK_NODE_THEMATIC_BREAK && + !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) && + !(ctype == CMARK_NODE_ITEM && container->first_child == NULL && container->start_line == parser->line_number)); S_set_last_line_blank(container, last_line_blank); @@ -1038,7 +1037,7 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, // the open paragraph. if (parser->current != last_matched_container && container == last_matched_container && !parser->blank && - parser->current->type == CMARK_NODE_PARAGRAPH) { + S_type(parser->current) == CMARK_NODE_PARAGRAPH) { add_line(parser->current, input, parser); } else { // not a lazy continuation // Finalize any blocks that were not matched and set cur to container: @@ -1047,9 +1046,9 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, assert(parser->current != NULL); } - if (container->type == CMARK_NODE_CODE_BLOCK) { + if (S_type(container) == CMARK_NODE_CODE_BLOCK) { add_line(container, input, parser); - } else if (container->type == CMARK_NODE_HTML_BLOCK) { + } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) { add_line(container, input, parser); int matches_end_condition; @@ -1090,8 +1089,8 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, } } else if (parser->blank) { // ??? do nothing - } else if (accepts_lines(container->type)) { - if (container->type == CMARK_NODE_HEADING && + } else if (accepts_lines(S_type(container))) { + if (S_type(container) == CMARK_NODE_HEADING && container->as.heading.setext == false) { chop_trailing_hashtags(input); } @@ -1120,21 +1119,21 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, cmark_chunk input; if (parser->options & CMARK_OPT_VALIDATE_UTF8) - cmark_utf8proc_check(parser->curline, buffer, bytes); + cmark_utf8proc_check(&parser->curline, buffer, bytes); else - cmark_strbuf_put(parser->curline, buffer, bytes); + cmark_strbuf_put(&parser->curline, buffer, bytes); // ensure line ends with a newline: - if (bytes == 0 || !S_is_line_end_char(parser->curline->ptr[bytes - 1])) - cmark_strbuf_putc(parser->curline, '\n'); + if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1])) + cmark_strbuf_putc(&parser->curline, '\n'); parser->offset = 0; parser->column = 0; parser->blank = false; parser->partially_consumed_tab = false; - input.data = parser->curline->ptr; - input.len = parser->curline->size; + input.data = parser->curline.ptr; + input.len = parser->curline.size; parser->line_number++; @@ -1162,13 +1161,13 @@ finished: input.data[parser->last_line_length - 1] == '\r') parser->last_line_length -= 1; - cmark_strbuf_clear(parser->curline); + cmark_strbuf_clear(&parser->curline); } cmark_node *cmark_parser_finish(cmark_parser *parser) { - if (parser->linebuf->size) { - S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size); - cmark_strbuf_clear(parser->linebuf); + if (parser->linebuf.size) { + S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); + cmark_strbuf_clear(&parser->linebuf); } finalize_document(parser); @@ -1177,7 +1176,7 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { cmark_consolidate_text_nodes(parser->root); } - cmark_strbuf_free(parser->curline); + cmark_strbuf_free(&parser->curline); #if CMARK_DEBUG_NODES if (cmark_node_check(parser->root, stderr)) { diff --git a/src/buffer.c b/src/buffer.c index e19105647a..b3e9811b3a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -50,7 +50,8 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { new_size += 1; new_size = (new_size + 7) & ~7; - buf->ptr = buf->mem->realloc(buf->asize ? buf->ptr : NULL, new_size); + buf->ptr = (unsigned char *)buf->mem->realloc( + buf->asize ? buf->ptr : NULL, new_size); buf->asize = new_size; } @@ -146,7 +147,7 @@ unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { if (buf->asize == 0) { /* return an empty string */ - return buf->mem->calloc(1, 1); + return (unsigned char *)buf->mem->calloc(1, 1); } cmark_strbuf_init(buf->mem, buf, 0); diff --git a/src/buffer.h b/src/buffer.h index b40ab926e9..b5d291ea71 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "config.h" #include "cmark.h" diff --git a/src/chunk.h b/src/chunk.h index 4dfc6985d9..9790b1457b 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -83,7 +83,7 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, co c->data = NULL; c->alloc = 0; } else { - c->len = strlen(str); + c->len = (bufsize_t)strlen(str); c->data = (unsigned char *)mem->calloc(c->len + 1, 1); c->alloc = 1; memcpy(c->data, str, c->len + 1); @@ -91,7 +91,7 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, co } static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { - bufsize_t len = data ? strlen(data) : 0; + bufsize_t len = data ? (bufsize_t)strlen(data) : 0; cmark_chunk c = {(unsigned char *)data, len, 0}; return c; } diff --git a/src/node.c b/src/node.c index 61d30dd01d..62acf14b9f 100644 --- a/src/node.c +++ b/src/node.c @@ -78,7 +78,7 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) { cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node)); cmark_strbuf_init(mem, &node->content, 0); - node->type = type; + node->type = (uint16_t)type; switch (node->type) { case CMARK_NODE_HEADING: @@ -155,7 +155,7 @@ cmark_node_type cmark_node_get_type(cmark_node *node) { if (node == NULL) { return CMARK_NODE_NONE; } else { - return node->type; + return (cmark_node_type)node->type; } } diff --git a/src/parser.h b/src/parser.h index 13094209c0..0c5033bd22 100644 --- a/src/parser.h +++ b/src/parser.h @@ -13,7 +13,7 @@ extern "C" { #define MAX_LINK_LABEL_LENGTH 1000 struct cmark_parser { - struct cmark_mem *mem; + struct cmark_mem *mem; struct cmark_reference_map *refmap; struct cmark_node *root; struct cmark_node *current; @@ -25,9 +25,9 @@ struct cmark_parser { int indent; bool blank; bool partially_consumed_tab; - cmark_strbuf *curline; + cmark_strbuf curline; bufsize_t last_line_length; - cmark_strbuf *linebuf; + cmark_strbuf linebuf; int options; bool last_buffer_ended_with_cr; }; diff --git a/src/references.c b/src/references.c index 235e0af9d5..6d3114217e 100755 --- a/src/references.c +++ b/src/references.c @@ -139,7 +139,7 @@ void cmark_reference_map_free(cmark_reference_map *map) { } cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) { - cmark_reference_map *map = mem->calloc(1, sizeof(cmark_reference_map)); + cmark_reference_map *map = (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map)); map->mem = mem; return map; } -- cgit 0.0.5-2-1-g0f52 From 9a8610c9715e714e40ad7a93be89985fe5371907 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 22 Jun 2016 22:18:24 -0700 Subject: cmark_reference_lookup: Return NULL if reference is null string. --- src/references.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/references.c b/src/references.c index 6d3114217e..348de149fb 100755 --- a/src/references.c +++ b/src/references.c @@ -95,7 +95,7 @@ cmark_reference *cmark_reference_lookup(cmark_reference_map *map, unsigned char *norm; unsigned int hash; - if (label->len > MAX_LINK_LABEL_LENGTH) + if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH) return NULL; if (map == NULL) -- cgit 0.0.5-2-1-g0f52 From c069cb55bcadfd0f45890d846ff412b3c892eb87 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 22 Jun 2016 22:19:15 -0700 Subject: Better parsing of shortcut references. We reuse the parser for reference labels, instead of just assuming that a slice of the link text will be a valid reference label. (It might contain interior brackets, for example.) --- src/inlines.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 8f18e6c960..02e6a9ab80 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -751,11 +751,11 @@ noMatch: // Return a link, an image, or a literal close bracket. static cmark_node *handle_close_bracket(subject *subj) { - bufsize_t initial_pos; + bufsize_t initial_pos, save_pos; bufsize_t starturl, endurl, starttitle, endtitle, endall; bufsize_t n; bufsize_t sps; - cmark_reference *ref; + cmark_reference *ref = NULL; bool is_image = false; cmark_chunk url_chunk, title_chunk; cmark_chunk url, title; @@ -830,11 +830,6 @@ static cmark_node *handle_close_bracket(subject *subj) { // skip spaces raw_label = cmark_chunk_literal(""); found_label = link_label(subj, &raw_label); - if (!found_label || raw_label.len == 0) { - cmark_chunk_free(subj->mem, &raw_label); - raw_label = cmark_chunk_dup(&subj->input, opener->position, - initial_pos - opener->position - 1); - } if (!found_label) { // If we have a shortcut reference link, back up @@ -842,12 +837,22 @@ static cmark_node *handle_close_bracket(subject *subj) { subj->pos = initial_pos; } - ref = cmark_reference_lookup(subj->refmap, &raw_label); - cmark_chunk_free(subj->mem, &raw_label); + if (!found_label || raw_label.len == 0) { + save_pos = subj->pos; + subj->pos = opener->position - 1; + cmark_chunk_free(subj->mem, &raw_label); + found_label = link_label(subj, &raw_label); + subj->pos = save_pos; + } + + if (found_label) { + ref = cmark_reference_lookup(subj->refmap, &raw_label); + } - if (ref != NULL) { // found + if (ref) { url = chunk_clone(subj->mem, &ref->url); title = chunk_clone(subj->mem, &ref->title); + cmark_chunk_free(subj->mem, &raw_label); goto match; } else { goto noMatch; -- cgit 0.0.5-2-1-g0f52 From 649ce73b841de7c7a3385e1e219b84c61f2081a6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 09:44:08 -0700 Subject: Updated spec.txt. --- test/spec.txt | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 5f712ffe52..b8a897cbbd 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3240,8 +3240,8 @@ Four spaces gives us a code block: ```````````````````````````````` -The Laziness clause allows us to omit the `>` before a -paragraph continuation line: +The Laziness clause allows us to omit the `>` before +[paragraph continuation text]: ```````````````````````````````` example > # Foo @@ -3347,8 +3347,8 @@ foo ```````````````````````````````` -Note that in the following case, we have a paragraph -continuation line: +Note that in the following case, we have a [lazy +continuation line]: ```````````````````````````````` example > foo @@ -3370,7 +3370,7 @@ To see why, note that in the `- bar` is indented too far to start a list, and can't be an indented code block because indented code blocks cannot -interrupt paragraphs, so it is a [paragraph continuation line]. +interrupt paragraphs, so it is [paragraph continuation text]. A block quote can be empty: @@ -4439,13 +4439,18 @@ So, in this case we need two spaces indent: - foo - bar - baz + - boo .
                            • foo
                              • bar
                                  -
                                • baz
                                • +
                                • baz +
                                    +
                                  • boo
                                  • +
                                  +
                              @@ -4460,11 +4465,13 @@ One is not enough: - foo - bar - baz + - boo .
                              • foo
                              • bar
                              • baz
                              • +
                              • boo
                              ```````````````````````````````` @@ -7956,7 +7963,7 @@ consists of a [link label] that [matches] a [link reference definition] elsewhere in the document and is not followed by `[]` or a link label. The contents of the first link label are parsed as inlines, -which are used as the link's text. the link's URI and title +which are used as the link's text. The link's URI and title are provided by the matching link reference definition. Thus, `[foo]` is equivalent to `[foo][]`. -- cgit 0.0.5-2-1-g0f52 From cf3ae36b3479a563f98780352e9fd9cf1c1cff81 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 09:56:27 -0700 Subject: Revert "Better parsing of shortcut references." This reverts commit c069cb55bcadfd0f45890d846ff412b3c892eb87. --- src/inlines.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 02e6a9ab80..8f18e6c960 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -751,11 +751,11 @@ noMatch: // Return a link, an image, or a literal close bracket. static cmark_node *handle_close_bracket(subject *subj) { - bufsize_t initial_pos, save_pos; + bufsize_t initial_pos; bufsize_t starturl, endurl, starttitle, endtitle, endall; bufsize_t n; bufsize_t sps; - cmark_reference *ref = NULL; + cmark_reference *ref; bool is_image = false; cmark_chunk url_chunk, title_chunk; cmark_chunk url, title; @@ -830,6 +830,11 @@ static cmark_node *handle_close_bracket(subject *subj) { // skip spaces raw_label = cmark_chunk_literal(""); found_label = link_label(subj, &raw_label); + if (!found_label || raw_label.len == 0) { + cmark_chunk_free(subj->mem, &raw_label); + raw_label = cmark_chunk_dup(&subj->input, opener->position, + initial_pos - opener->position - 1); + } if (!found_label) { // If we have a shortcut reference link, back up @@ -837,22 +842,12 @@ static cmark_node *handle_close_bracket(subject *subj) { subj->pos = initial_pos; } - if (!found_label || raw_label.len == 0) { - save_pos = subj->pos; - subj->pos = opener->position - 1; - cmark_chunk_free(subj->mem, &raw_label); - found_label = link_label(subj, &raw_label); - subj->pos = save_pos; - } - - if (found_label) { - ref = cmark_reference_lookup(subj->refmap, &raw_label); - } + ref = cmark_reference_lookup(subj->refmap, &raw_label); + cmark_chunk_free(subj->mem, &raw_label); - if (ref) { + if (ref != NULL) { // found url = chunk_clone(subj->mem, &ref->url); title = chunk_clone(subj->mem, &ref->title); - cmark_chunk_free(subj->mem, &raw_label); goto match; } else { goto noMatch; -- cgit 0.0.5-2-1-g0f52 From dbfe3fae72eef02f0689f7e5962ca04a8d395c21 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 22 Jun 2016 12:26:55 -0700 Subject: Ported robinst's changes to link parsing. See https://github.com/jgm/commonmark.js/pull/101 This uses a separate stack for brackets, instead of putting them on the delimiter stack. This avoids the need for looking through the delimiter stack for the next bracket. It also avoids a shortcut reference lookup when the reference text contains brackets. The change dramatically improved performance on the nested links pathological test for commonmark.js. It has a smaller but measurable effect here. --- src/inlines.c | 101 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 34 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 8f18e6c960..6f0adef42b 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -38,15 +38,25 @@ typedef struct delimiter { unsigned char delim_char; bool can_open; bool can_close; - bool active; } delimiter; +typedef struct bracket { + struct bracket *previous; + struct delimiter *previous_delimiter; + cmark_node *inl_text; + bufsize_t position; + bool image; + bool active; + bool bracket_after; +} bracket; + typedef struct { cmark_mem *mem; cmark_chunk input; bufsize_t pos; cmark_reference_map *refmap; delimiter *last_delim; + bracket *last_bracket; } subject; static CMARK_INLINE bool S_is_line_end_char(char c) { @@ -139,6 +149,7 @@ static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, e->pos = 0; e->refmap = refmap; e->last_delim = NULL; + e->last_bracket = NULL; } static CMARK_INLINE int isbacktick(int c) { return (c == '`'); } @@ -342,6 +353,16 @@ static void remove_delimiter(subject *subj, delimiter *delim) { free(delim); } +static void pop_bracket(subject *subj) { + bracket *b; + if (subj->last_bracket == NULL) + return; + b = subj->last_bracket; + subj->last_bracket = subj->last_bracket->previous; + free(b); +} + + static void push_delimiter(subject *subj, unsigned char c, bool can_open, bool can_close, cmark_node *inl_text) { delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter)); @@ -355,10 +376,24 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, delim->previous->next = delim; } delim->position = subj->pos; - delim->active = true; subj->last_delim = delim; } +static void push_bracket(subject *subj, bool image, cmark_node *inl_text) { + bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket)); + if (subj->last_bracket != NULL) { + subj->last_bracket->bracket_after = true; + } + b->image = image; + b->active = true; + b->inl_text = inl_text; + b->previous = subj->last_bracket; + b->previous_delimiter = subj->last_delim; + b->position = subj->pos; + b->bracket_after = false; + subj->last_bracket = b; +} + // Assumes the subject has a c at the current position. static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { bufsize_t numdelims; @@ -465,9 +500,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // now move forward, looking for closers, and handling each while (closer != NULL) { - if (closer->can_close && - (closer->delim_char == '*' || closer->delim_char == '_' || - closer->delim_char == '"' || closer->delim_char == '\'')) { + if (closer->can_close) { // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; @@ -755,27 +788,21 @@ static cmark_node *handle_close_bracket(subject *subj) { bufsize_t starturl, endurl, starttitle, endtitle, endall; bufsize_t n; bufsize_t sps; - cmark_reference *ref; - bool is_image = false; + cmark_reference *ref = NULL; cmark_chunk url_chunk, title_chunk; cmark_chunk url, title; - delimiter *opener; + bracket *opener; cmark_node *inl; cmark_chunk raw_label; int found_label; cmark_node *tmp, *tmpnext; + bool is_image; advance(subj); // advance past ] initial_pos = subj->pos; - // look through list of delimiters for a [ or ! - opener = subj->last_delim; - while (opener) { - if (opener->delim_char == '[' || opener->delim_char == '!') { - break; - } - opener = opener->previous; - } + // get last [ or ![ + opener = subj->last_bracket; if (opener == NULL) { return make_str(subj->mem, cmark_chunk_literal("]")); @@ -783,14 +810,13 @@ static cmark_node *handle_close_bracket(subject *subj) { if (!opener->active) { // take delimiter off stack - remove_delimiter(subj, opener); + pop_bracket(subj); return make_str(subj->mem, cmark_chunk_literal("]")); } // If we got here, we matched a potential link/image text. - is_image = opener->delim_char == '!'; - // Now we check to see if it's a link/image. + is_image = opener->image; // First, look for an inline link. if (peek_char(subj) == '(' && @@ -830,20 +856,23 @@ static cmark_node *handle_close_bracket(subject *subj) { // skip spaces raw_label = cmark_chunk_literal(""); found_label = link_label(subj, &raw_label); - if (!found_label || raw_label.len == 0) { - cmark_chunk_free(subj->mem, &raw_label); - raw_label = cmark_chunk_dup(&subj->input, opener->position, - initial_pos - opener->position - 1); - } - if (!found_label) { // If we have a shortcut reference link, back up // to before the spacse we skipped. subj->pos = initial_pos; } - ref = cmark_reference_lookup(subj->refmap, &raw_label); - cmark_chunk_free(subj->mem, &raw_label); + if ((!found_label || raw_label.len == 0) && !opener->bracket_after) { + cmark_chunk_free(subj->mem, &raw_label); + raw_label = cmark_chunk_dup(&subj->input, opener->position, + initial_pos - opener->position - 1); + found_label = true; + } + + if (found_label) { + ref = cmark_reference_lookup(subj->refmap, &raw_label); + cmark_chunk_free(subj->mem, &raw_label); + } if (ref != NULL) { // found url = chunk_clone(subj->mem, &ref->url); @@ -855,7 +884,7 @@ static cmark_node *handle_close_bracket(subject *subj) { noMatch: // If we fall through to here, it means we didn't match a link: - remove_delimiter(subj, opener); // remove this opener from delimiter list + pop_bracket(subj); // remove this opener from delimiter list subj->pos = initial_pos; return make_str(subj->mem, cmark_chunk_literal("]")); @@ -875,16 +904,16 @@ match: // Free the bracket [: cmark_node_free(opener->inl_text); - process_emphasis(subj, opener); + process_emphasis(subj, opener->previous_delimiter); + pop_bracket(subj); // Now, if we have a link, we also want to deactivate earlier link // delimiters. (This code can be removed if we decide to allow links // inside links.) - remove_delimiter(subj, opener); if (!is_image) { - opener = subj->last_delim; + opener = subj->last_bracket; while (opener != NULL) { - if (opener->delim_char == '[') { + if (!opener->image) { if (!opener->active) { break; } else { @@ -1005,7 +1034,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { case '[': advance(subj); new_inl = make_str(subj->mem, cmark_chunk_literal("[")); - push_delimiter(subj, '[', true, false, new_inl); + push_bracket(subj, false, new_inl); break; case ']': new_inl = handle_close_bracket(subj); @@ -1015,7 +1044,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { if (peek_char(subj) == '[') { advance(subj); new_inl = make_str(subj->mem, cmark_chunk_literal("![")); - push_delimiter(subj, '!', false, true, new_inl); + push_bracket(subj, true, new_inl); } else { new_inl = make_str(subj->mem, cmark_chunk_literal("!")); } @@ -1050,6 +1079,10 @@ extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_refere ; process_emphasis(&subj, NULL); + // free bracket stack + while (subj.last_bracket) { + pop_bracket(&subj); + } } // Parse zero or more space characters, including at most one newline. -- cgit 0.0.5-2-1-g0f52 From 78c60ec7977c35c442f537d72cf4e96375c069f1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 10:21:19 -0700 Subject: Travis: install more recent cmake on linux. --- .travis.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.travis.yml b/.travis.yml index 059a53d5e5..f828a9bcf5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,20 @@ before_install: then echo "Building without python3, to make sure that works." fi + - | + if ( test "`uname -s`" = "Darwin" ) + then + #cmake v2.8.12 is installed on the Mac workers now + #brew update + #brew install cmake + echo + else + #install a newer cmake since at this time Travis only has version 2.8.7 + echo "yes" | sudo add-apt-repository ppa:kalakris/cmake + sudo apt-get update -qq + sudo apt-get install cmake + fi + script: - make - make test -- cgit 0.0.5-2-1-g0f52 From 6eca3cd659617fad71c88531843f55ac5c46ecc0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 11:45:53 -0700 Subject: Updated spec. --- test/spec.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index b8a897cbbd..99365cdda7 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2302,6 +2302,7 @@ import Text.HTML.TagSoup main :: IO () main = print $ parseTags tags +okay .
                              
                               import Text.HTML.TagSoup
                              @@ -2309,6 +2310,7 @@ import Text.HTML.TagSoup
                               main :: IO ()
                               main = print $ parseTags tags
                               
                              +

                              okay

                              ```````````````````````````````` @@ -2320,12 +2322,14 @@ A script tag (type 1): document.getElementById("demo").innerHTML = "Hello JavaScript!"; +okay . +

                              okay

                              ```````````````````````````````` @@ -2338,6 +2342,7 @@ h1 {color:red;} p {color:blue;} +okay . +

                              okay

                              ```````````````````````````````` @@ -2433,11 +2439,13 @@ A comment (type 2): bar baz --> +okay . +

                              okay

                              ```````````````````````````````` @@ -2450,12 +2458,14 @@ A processing instruction (type 3): echo '>'; ?> +okay . '; ?> +

                              okay

                              ```````````````````````````````` @@ -2483,6 +2493,7 @@ function matchwo(a,b) } } ]]> +okay . +

                              okay

                              ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 2365a559d0bc9e6a212e1a1a3ab919b12e3c5e90 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 13:12:51 -0700 Subject: Try to fix travis cmake. --- .travis.yml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index f828a9bcf5..abb33cb395 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,7 @@ addons: # we need a more recent cmake than travis/linux provides (at least 2.8.9): sources: - kubuntu-backports + - kalakris-cmake packages: - cmake - python3 @@ -23,19 +24,6 @@ before_install: then echo "Building without python3, to make sure that works." fi - - | - if ( test "`uname -s`" = "Darwin" ) - then - #cmake v2.8.12 is installed on the Mac workers now - #brew update - #brew install cmake - echo - else - #install a newer cmake since at this time Travis only has version 2.8.7 - echo "yes" | sudo add-apt-repository ppa:kalakris/cmake - sudo apt-get update -qq - sudo apt-get install cmake - fi script: - make -- cgit 0.0.5-2-1-g0f52 From 41b8c5b3a4c46d3c2beb1dae6e170c295c19b198 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 13:28:41 -0700 Subject: Removed check for same mem allocator in S_can_contain. This is too strict, as it prevents the use of dynamically loaded extensions: see https://github.com/jgm/cmark/pull/123#discussion_r67231518. Documented in man page and public header that one should use the same memory allocator for every node in a tree. --- src/cmark.h | 3 ++- src/node.c | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index 45d7bc324b..3543c82de5 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -112,7 +112,8 @@ typedef struct cmark_mem { CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); /** Same as `cmark_node_new`, but explicitly listing the memory - * allocator used to allocate the node + * allocator used to allocate the node. Note: be sure to use the same + * allocator for every node in a tree, or bad things can happen. */ CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem); diff --git a/src/node.c b/src/node.c index 62acf14b9f..e722acf90a 100644 --- a/src/node.c +++ b/src/node.c @@ -30,9 +30,6 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) { if (node == NULL || child == NULL) { return false; } - if (NODE_MEM(node) != NODE_MEM(child)) { - return 0; - } // Verify that child is not an ancestor of node or equal to node. cur = node; -- cgit 0.0.5-2-1-g0f52 From 550313976fc187d0a6c728aff472a93068f7fc61 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 23:08:36 -0700 Subject: Updated man page cmark.3. --- man/man3/cmark.3 | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 5b33deaf1a..12140f4ae7 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "June 06, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 23, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -15,7 +15,7 @@ Simple Interface .PP Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length \f[I]len\f[]) from CommonMark Markdown to HTML, returning a -null\-terminated, UTF\-8\-encoded string. It is the caller\[cq]s +null\-terminated, UTF\-8\-encoded string. It is the caller's responsibility to free the returned buffer. .SS @@ -123,15 +123,16 @@ Creating and Destroying Nodes .PP Creates a new node of type \f[I]type\f[]. Note that the node may have -other required properties, which it is the caller\[cq]s responsibility -to assign. +other required properties, which it is the caller's responsibility to +assign. .PP \fIcmark_node *\f[] \fBcmark_node_new_with_mem\f[](\fIcmark_node_type type\f[], \fIcmark_mem *mem\f[]) .PP Same as \f[C]cmark_node_new\f[], but explicitly listing the memory -allocator used to allocate the node +allocator used to allocate the node. Note: be sure to use the same +allocator for every node in a tree, or bad things can happen. .PP \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[]) @@ -405,8 +406,7 @@ Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise. \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[]) .PP -Sets the \[lq]tightness\[rq] of a list. Returns 1 on success, 0 on -failure. +Sets the "tightness" of a list. Returns 1 on success, 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[]) @@ -453,31 +453,31 @@ on failure. \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on enter\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_enter is set. +Returns the literal "on enter" text for a custom \f[I]node\f[], or an +empty string if no on_enter is set. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) .PP -Sets the literal text to render \[lq]on enter\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered after this -text. Returns 1 on success 0 on failure. +Sets the literal text to render "on enter" for a custom \f[I]node\f[]. +Any children of the node will be rendered after this text. Returns 1 on +success 0 on failure. .PP \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[]) .PP -Returns the literal \[lq]on exit\[rq] text for a custom \f[I]node\f[], -or an empty string if no on_exit is set. +Returns the literal "on exit" text for a custom \f[I]node\f[], or an +empty string if no on_exit is set. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) .PP -Sets the literal text to render \[lq]on exit\[rq] for a custom -\f[I]node\f[]. Any children of the node will be rendered before this -text. Returns 1 on success 0 on failure. +Sets the literal text to render "on exit" for a custom \f[I]node\f[]. +Any children of the node will be rendered before this text. Returns 1 on +success 0 on failure. .PP \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[]) @@ -638,36 +638,36 @@ Rendering \fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP -Render a \f[I]node\f[] tree as XML. It is the caller\[cq]s -responsibility to free the returned buffer. +Render a \f[I]node\f[] tree as XML. It is the caller's responsibility to +free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[]) .PP Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to -add an appropriate header and footer. It is the caller\[cq]s -responsibility to free the returned buffer. +add an appropriate header and footer. It is the caller's responsibility +to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP Render a \f[I]node\f[] tree as a groff man page, without the header. It -is the caller\[cq]s responsibility to free the returned buffer. +is the caller's responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a commonmark document. It is the -caller\[cq]s responsibility to free the returned buffer. +Render a \f[I]node\f[] tree as a commonmark document. It is the caller's +responsibility to free the returned buffer. .PP \fIchar *\f[] \fBcmark_render_latex\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[]) .PP -Render a \f[I]node\f[] tree as a LaTeX document. It is the caller\[cq]s +Render a \f[I]node\f[] tree as a LaTeX document. It is the caller's responsibility to free the returned buffer. .SS @@ -778,7 +778,7 @@ with the replacement character U+FFFD. .fi .PP -Convert straight quotes to curly, \[em] to em dashes, \[en] to en +Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en dashes. .SS -- cgit 0.0.5-2-1-g0f52 From c71830e3db5047322f5e8601f9ec7154dbe1dd30 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 23 Jun 2016 23:08:50 -0700 Subject: Removed positon from delimiter struct. It is no longer needed; only the brackets struct needs it. Thanks to @robinst. --- src/inlines.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 6f0adef42b..41c71402cd 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -34,7 +34,6 @@ typedef struct delimiter { struct delimiter *previous; struct delimiter *next; cmark_node *inl_text; - bufsize_t position; unsigned char delim_char; bool can_open; bool can_close; @@ -375,7 +374,6 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, if (delim->previous != NULL) { delim->previous->next = delim; } - delim->position = subj->pos; subj->last_delim = delim; } -- cgit 0.0.5-2-1-g0f52 From c50197bab81d7105c9c790548821b61bcb97a62a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Apr 2016 16:50:38 -0700 Subject: Changed `process_emphasis` to get better results in corner cases. This will need corresponding spec changes. The change is this: when considering matches between an interior delimiter run (one that can open and can close) and another delimiter run, we require that the sum of the lengths of the two delimiter runs mod 3 is not 0. Thus, for example, in *a**b* 1 23 4 delimiter 1 cannot match 2, since the sum of the lengths of the first delimiter run (1) and the second (1,2) == 3. Thus we get `a**b` instead of `ab`. This gives better behavior on things like *a**b**c* which previously got parsed as abc and now would be parsed as abc With this change we get four spec test failures, but in each case the output seems more "intuitive": ``` Example 386 (lines 6490-6494) Emphasis and strong emphasis *foo**bar**baz* --- expected HTML +++ actual HTML @@ -1 +1 @@ -

                              foobarbaz

                              +

                              foobarbaz

                              Example 389 (lines 6518-6522) Emphasis and strong emphasis *foo**bar*** --- expected HTML +++ actual HTML @@ -1 +1 @@ -

                              foobar**

                              +

                              foobar

                              Example 401 (lines 6620-6624) Emphasis and strong emphasis **foo*bar*baz** --- expected HTML +++ actual HTML @@ -1 +1 @@ -

                              foobarbaz**

                              +

                              foobarbaz

                              Example 442 (lines 6944-6948) Emphasis and strong emphasis **foo*bar** --- expected HTML +++ actual HTML @@ -1 +1 @@ -

                              foobar*

                              +

                              foo*bar

                              ``` --- src/inlines.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 41c71402cd..6ed0661c67 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -483,6 +483,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { delimiter *opener; delimiter *old_closer; bool opener_found; + bool odd_match; delimiter *openers_bottom[128]; // initialize openers_bottom: @@ -502,9 +503,18 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; + odd_match = false; while (opener != NULL && opener != stack_bottom && opener != openers_bottom[closer->delim_char]) { - if (opener->delim_char == closer->delim_char && opener->can_open) { + // interior closer of size 2 can't match opener of size 1 + // or of size 1 can't match 2 + odd_match = (closer->can_open || opener->can_close) && + opener->inl_text->as.literal.len != + closer->inl_text->as.literal.len && + ((opener->inl_text->as.literal.len + + closer->inl_text->as.literal.len) % 3 == 0); + if (opener->delim_char == closer->delim_char && opener->can_open && + !odd_match) { opener_found = true; break; } @@ -534,8 +544,12 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { } closer = closer->next; } - if (!opener_found) { - // set lower bound for future searches for openers: + if (!opener_found && !odd_match) { + // set lower bound for future searches for openers + // (we don't do this with 'odd_match' set because + // a ** that didn't match an earlier * might turn into + // an opener, and the * might be matched by something + // else. openers_bottom[old_closer->delim_char] = old_closer->previous; if (!old_closer->can_open) { // we can remove a closer that can't be an -- cgit 0.0.5-2-1-g0f52 From 0d546c29f28f6c185105a06d0fb3669f7647b9f2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 24 Jun 2016 21:48:31 -0700 Subject: Updated spec and pathological tests for changes in strong/emph parsing. --- test/pathological_tests.py | 2 +- test/spec.txt | 73 ++++++++++++++++++++++++---------------------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index f3aa5a2959..b03330806b 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -43,7 +43,7 @@ pathological = { re.compile("(\[ a_){50000}")), "hard link/emph case": ("**x [a*b**c*](d)", - re.compile("\\*\\*x abc")), + re.compile("\\*\\*x ab\\*\\*c")), "nested brackets": (("[" * 50000) + "a" + ("]" * 50000), re.compile("\[{50000}a\]{50000}")), diff --git a/test/spec.txt b/test/spec.txt index 99365cdda7..c7b1fcd124 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5964,18 +5964,22 @@ The following rules define emphasis and strong emphasis: 9. Emphasis begins with a delimiter that [can open emphasis] and ends with a delimiter that [can close emphasis], and that uses the same - character (`_` or `*`) as the opening delimiter. There must - be a nonempty sequence of inlines between the open delimiter - and the closing delimiter; these form the contents of the emphasis - inline. + character (`_` or `*`) as the opening delimiter. The + opening and closing delimiters must belong to separate + [delimiter runs]. If one of the delimiters can both + open and close emphasis, then the sum of the lengths of the + delimiter runs containing the opening and closing delimiters + must not be a multiple of 3. 10. Strong emphasis begins with a delimiter that [can open strong emphasis] and ends with a delimiter that [can close strong emphasis], and that uses the same character - (`_` or `*`) as the opening delimiter. - There must be a nonempty sequence of inlines between the open - delimiter and the closing delimiter; these form the contents of - the strong emphasis inline. + (`_` or `*`) as the opening delimiter. The + opening and closing delimiters must belong to separate + [delimiter runs]. If one of the delimiters can both open + and close strong emphasis, then the sum of the lengths of + the delimiter runs containing the opening and closing + delimiters must not be a multiple of 3. 11. A literal `*` character cannot occur at the beginning or end of `*`-delimited emphasis or `**`-delimited strong emphasis, unless it @@ -5999,9 +6003,7 @@ the following principles resolve ambiguity: so that the second begins before the first ends and ends after the first ends, the first takes precedence. Thus, for example, `*foo _bar* baz_` is parsed as `foo _bar baz_` rather - than `*foo bar* baz`. For the same reason, - `**foo*bar**` is parsed as `foobar*` - rather than `foo*bar`. + than `*foo bar* baz`. 16. When there are two potential emphasis or strong emphasis spans with the same closing delimiter, the shorter one (the one that @@ -6581,18 +6583,30 @@ __foo_ bar_

                              foo bar baz

                              ```````````````````````````````` - -But note: - ```````````````````````````````` example *foo**bar**baz* . -

                              foobarbaz

                              +

                              foobarbaz

                              ```````````````````````````````` +Note that in the preceding case, the interpretation + +``` markdown +

                              foobarbaz

                              +``` + + +is precluded by the condition that a delimiter that +can both open and close (like the `*` after `foo` +cannot form emphasis if the sum of the lengths of +the delimiter runs containing the opening and +closing delimiters is a multiple of 3. + +The same condition ensures that the following +cases are all strong emphasis nested inside +emphasis, even when the interior spaces are +omitted: -The difference is that in the preceding case, the internal delimiters -[can close emphasis], while in the cases with spaces, they cannot. ```````````````````````````````` example ***foo** bar* @@ -6608,17 +6622,18 @@ The difference is that in the preceding case, the internal delimiters ```````````````````````````````` -Note, however, that in the following case we get no strong -emphasis, because the opening delimiter is closed by the first -`*` before `bar`: - ```````````````````````````````` example *foo**bar*** . -

                              foobar**

                              +

                              foobar

                              ```````````````````````````````` +```````````````````````````````` example +*foo**bar*** +. +

                              foobar

                              +```````````````````````````````` Indefinite levels of nesting are possible: @@ -6712,18 +6727,13 @@ ____foo__ bar__ ```````````````````````````````` -But note: - ```````````````````````````````` example **foo*bar*baz** . -

                              foobarbaz**

                              +

                              foobarbaz

                              ```````````````````````````````` -The difference is that in the preceding case, the internal delimiters -[can close emphasis], while in the cases with spaces, they cannot. - ```````````````````````````````` example ***foo* bar** . @@ -7038,13 +7048,6 @@ Rule 15: ```````````````````````````````` -```````````````````````````````` example -**foo*bar** -. -

                              foobar*

                              -```````````````````````````````` - - ```````````````````````````````` example *foo __bar *baz bim__ bam* . -- cgit 0.0.5-2-1-g0f52 From ce5671ae0289b05322c09bb80af2d3317acd544f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 24 Jun 2016 21:55:27 -0700 Subject: Removed redundant check. --- src/inlines.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 6ed0661c67..ad7a104aa7 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -509,8 +509,6 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // interior closer of size 2 can't match opener of size 1 // or of size 1 can't match 2 odd_match = (closer->can_open || opener->can_close) && - opener->inl_text->as.literal.len != - closer->inl_text->as.literal.len && ((opener->inl_text->as.literal.len + closer->inl_text->as.literal.len) % 3 == 0); if (opener->delim_char == closer->delim_char && opener->can_open && -- cgit 0.0.5-2-1-g0f52 From 2b1b00fb19fe470f7745c208377345975b9e0b2c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 24 Jun 2016 21:55:44 -0700 Subject: Reformatted. --- src/blocks.c | 28 +++++++++++++++------------- src/buffer.c | 10 +++++----- src/buffer.h | 6 ++++-- src/chunk.h | 6 ++++-- src/cmark.c | 8 +++++--- src/cmark.h | 10 +++++----- src/commonmark.c | 18 ++++++++---------- src/inlines.c | 49 +++++++++++++++++++++++++++---------------------- src/inlines.h | 4 ++-- src/references.c | 3 ++- src/render.c | 11 ++++++----- 11 files changed, 83 insertions(+), 70 deletions(-) mode change 100755 => 100644 src/references.c diff --git a/src/blocks.c b/src/blocks.c index 2386bb1845..b21f800947 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -59,8 +59,8 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, static void S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t bytes); -static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, int start_line, - int start_column) { +static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, + int start_line, int start_column) { cmark_node *e; e = (cmark_node *)mem->calloc(1, sizeof(*e)); @@ -247,7 +247,8 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { cmark_node *parent; parent = b->parent; - assert(b->flags & CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks + assert(b->flags & + CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks b->flags &= ~CMARK_NODE__OPEN; if (parser->curline.size == 0) { @@ -361,7 +362,8 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, parent = finalize(parser, parent); } - cmark_node *child = make_block(parser->mem, block_type, parser->line_number, start_column); + cmark_node *child = + make_block(parser->mem, block_type, parser->line_number, start_column); child->parent = parent; if (parent->last_child) { @@ -377,8 +379,8 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, // Walk through node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_mem *mem, cmark_node *root, cmark_reference_map *refmap, - int options) { +static void process_inlines(cmark_mem *mem, cmark_node *root, + cmark_reference_map *refmap, int options) { cmark_iter *iter = cmark_iter_new(root); cmark_node *cur; cmark_event_type ev_type; @@ -398,8 +400,8 @@ static void process_inlines(cmark_mem *mem, cmark_node *root, cmark_reference_ma // Attempts to parse a list item marker (bullet or enumerated). // 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) { +static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, + bufsize_t pos, cmark_list **dataptr) { unsigned char c; bufsize_t startpos; cmark_list *data; @@ -655,7 +657,8 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, } static bool S_last_child_is_open(cmark_node *container) { - return container->last_child && (container->last_child->flags & CMARK_NODE__OPEN); + return container->last_child && + (container->last_child->flags & CMARK_NODE__OPEN); } static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { @@ -917,8 +920,8 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, 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)) && + } else if ((matched = parse_list_marker(parser->mem, input, + parser->first_nonspace, &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. @@ -1015,8 +1018,7 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, const cmark_node_type ctype = S_type(container); const bool last_line_blank = (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE && - ctype != CMARK_NODE_HEADING && - ctype != CMARK_NODE_THEMATIC_BREAK && + ctype != CMARK_NODE_HEADING && ctype != CMARK_NODE_THEMATIC_BREAK && !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) && !(ctype == CMARK_NODE_ITEM && container->first_child == NULL && container->start_line == parser->line_number)); diff --git a/src/buffer.c b/src/buffer.c index b3e9811b3a..a6754b64f6 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -21,7 +21,8 @@ unsigned char cmark_strbuf__initbuf[1]; #define MIN(x, y) ((x < y) ? x : y) #endif -void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, bufsize_t initial_size) { +void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, + bufsize_t initial_size) { buf->mem = mem; buf->asize = 0; buf->size = 0; @@ -50,8 +51,8 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { new_size += 1; new_size = (new_size + 7) & ~7; - buf->ptr = (unsigned char *)buf->mem->realloc( - buf->asize ? buf->ptr : NULL, new_size); + buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL, + new_size); buf->asize = new_size; } @@ -112,8 +113,7 @@ void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, } void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { - cmark_strbuf_put(buf, (const unsigned char *)string, - strlen(string)); + cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string)); } void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, diff --git a/src/buffer.h b/src/buffer.h index b5d291ea71..e8780753f8 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -23,7 +23,8 @@ typedef struct { extern unsigned char cmark_strbuf__initbuf[]; -#define CMARK_BUF_INIT(mem) {mem, cmark_strbuf__initbuf, 0, 0} +#define CMARK_BUF_INIT(mem) \ + { mem, cmark_strbuf__initbuf, 0, 0 } /** * Initialize a cmark_strbuf structure. @@ -31,7 +32,8 @@ extern unsigned char cmark_strbuf__initbuf[]; * For the cases where CMARK_BUF_INIT cannot be used to do static * initialization. */ -void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, bufsize_t initial_size); +void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, + bufsize_t initial_size); /** * Grow the buffer to hold at least `target_size` bytes. diff --git a/src/chunk.h b/src/chunk.h index 9790b1457b..1bea422e3c 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -57,7 +57,8 @@ static CMARK_INLINE bufsize_t return p ? (bufsize_t)(p - ch->data) : ch->len; } -static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, cmark_chunk *c) { +static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, + cmark_chunk *c) { unsigned char *str; if (c->alloc) { @@ -74,7 +75,8 @@ static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, cmark_chunk return (char *)str; } -static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, const char *str) { +static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, + const char *str) { if (c->alloc) { mem->free(c->data); } diff --git a/src/cmark.c b/src/cmark.c index d5fef6382e..0d3bc1669f 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -12,17 +12,19 @@ const char *cmark_version_string() { return CMARK_VERSION_STRING; } static void *xcalloc(size_t nmem, size_t size) { void *ptr = calloc(nmem, size); - if (!ptr) abort(); + if (!ptr) + abort(); return ptr; } static void *xrealloc(void *ptr, size_t size) { void *new_ptr = realloc(ptr, size); - if (!new_ptr) abort(); + if (!new_ptr) + abort(); return new_ptr; } -cmark_mem DEFAULT_MEM_ALLOCATOR = { xcalloc, xrealloc, free }; +cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free}; char *cmark_markdown_to_html(const char *text, size_t len, int options) { cmark_node *doc; diff --git a/src/cmark.h b/src/cmark.h index 3543c82de5..d5b7f8969c 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -95,12 +95,11 @@ typedef struct cmark_iter cmark_iter; * when parsing and allocating a document tree */ typedef struct cmark_mem { - void *(*calloc)(size_t, size_t); - void *(*realloc)(void *, size_t); - void (*free)(void *); + void *(*calloc)(size_t, size_t); + void *(*realloc)(void *, size_t); + void (*free)(void *); } cmark_mem; - /** * ## Creating and Destroying Nodes */ @@ -115,7 +114,8 @@ CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); * allocator used to allocate the node. Note: be sure to use the same * allocator for every node in a tree, or bad things can happen. */ -CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem); +CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, + cmark_mem *mem); /** Frees the memory allocated for a node and any children. */ diff --git a/src/commonmark.c b/src/commonmark.c index f1589f5768..b8b1820684 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -29,8 +29,7 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, char encoded[ENCODED_SIZE]; needs_escaping = - c < 0x80 && - escape != LITERAL && + c < 0x80 && escape != LITERAL && ((escape == NORMAL && (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || @@ -41,9 +40,9 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, !follows_digit) || (renderer->begin_content && (c == '.' || c == ')') && follows_digit && (nextc == 0 || cmark_isspace(nextc))))) || - (escape == URL && (c == '`' || c == '<' || c == '>' || - cmark_isspace(c) || c == '\\' || c == ')' || - c == '(')) || + (escape == URL && + (c == '`' || c == '<' || c == '>' || cmark_isspace(c) || c == '\\' || + c == ')' || c == '(')) || (escape == TITLE && (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\'))); @@ -268,7 +267,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case CMARK_NODE_CODE_BLOCK: first_in_list_item = node->prev == NULL && node->parent && - node->parent->type == CMARK_NODE_ITEM; + node->parent->type == CMARK_NODE_ITEM; if (!first_in_list_item) { BLANKLINE(); @@ -348,10 +347,9 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, if (CMARK_OPT_HARDBREAKS & options) { LIT(" "); CR(); - } else if (!renderer->no_linebreaks && - renderer->width == 0 && - !(CMARK_OPT_HARDBREAKS & options) && - !(CMARK_OPT_NOBREAKS & options)) { + } else if (!renderer->no_linebreaks && renderer->width == 0 && + !(CMARK_OPT_HARDBREAKS & options) && + !(CMARK_OPT_NOBREAKS & options)) { CR(); } else { OUT(" ", allow_wrap, LITERAL); diff --git a/src/inlines.c b/src/inlines.c index ad7a104aa7..e5ca8e253f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -40,10 +40,10 @@ typedef struct delimiter { } delimiter; typedef struct bracket { - struct bracket *previous; - struct delimiter *previous_delimiter; - cmark_node *inl_text; - bufsize_t position; + struct bracket *previous; + struct delimiter *previous_delimiter; + cmark_node *inl_text; + bufsize_t position; bool image; bool active; bool bracket_after; @@ -55,7 +55,7 @@ typedef struct { bufsize_t pos; cmark_reference_map *refmap; delimiter *last_delim; - bracket *last_bracket; + bracket *last_bracket; } subject; static CMARK_INLINE bool S_is_line_end_char(char c) { @@ -72,7 +72,8 @@ static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. -static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t, cmark_chunk s) { +static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t, + cmark_chunk s) { cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); cmark_strbuf_init(mem, &e->content, 0); e->type = t; @@ -89,7 +90,8 @@ static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) { } // Like make_str, but parses entities. -static cmark_node *make_str_with_entities(cmark_mem *mem, cmark_chunk *content) { +static cmark_node *make_str_with_entities(cmark_mem *mem, + cmark_chunk *content) { cmark_strbuf unescaped = CMARK_BUF_INIT(mem); if (houdini_unescape_html(&unescaped, content->data, content->len)) { @@ -114,7 +116,8 @@ static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) { return c; } -static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, int is_email) { +static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, + int is_email) { cmark_strbuf buf = CMARK_BUF_INIT(mem); cmark_chunk_trim(url); @@ -131,7 +134,8 @@ static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, int is return cmark_chunk_buf_detach(&buf); } -static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, int is_email) { +static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, + int is_email) { cmark_node *link = make_simple(mem, CMARK_NODE_LINK); link->as.link.url = cmark_clean_autolink(mem, &url, is_email); link->as.link.title = cmark_chunk_literal(""); @@ -361,7 +365,6 @@ static void pop_bracket(subject *subj) { free(b); } - static void push_delimiter(subject *subj, unsigned char c, bool can_open, bool can_close, cmark_node *inl_text) { delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter)); @@ -506,13 +509,15 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { odd_match = false; while (opener != NULL && opener != stack_bottom && opener != openers_bottom[closer->delim_char]) { - // interior closer of size 2 can't match opener of size 1 - // or of size 1 can't match 2 - odd_match = (closer->can_open || opener->can_close) && - ((opener->inl_text->as.literal.len + - closer->inl_text->as.literal.len) % 3 == 0); + // interior closer of size 2 can't match opener of size 1 + // or of size 1 can't match 2 + odd_match = (closer->can_open || opener->can_close) && + ((opener->inl_text->as.literal.len + + closer->inl_text->as.literal.len) % + 3 == + 0); if (opener->delim_char == closer->delim_char && opener->can_open && - !odd_match) { + !odd_match) { opener_found = true; break; } @@ -544,10 +549,10 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { } if (!opener_found && !odd_match) { // set lower bound for future searches for openers - // (we don't do this with 'odd_match' set because - // a ** that didn't match an earlier * might turn into - // an opener, and the * might be matched by something - // else. + // (we don't do this with 'odd_match' set because + // a ** that didn't match an earlier * might turn into + // an opener, and the * might be matched by something + // else. openers_bottom[old_closer->delim_char] = old_closer->previous; if (!old_closer->can_open) { // we can remove a closer that can't be an @@ -1079,8 +1084,8 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { } // Parse inlines from parent's string_content, adding as children of parent. -extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, - int options) { +extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, + cmark_reference_map *refmap, int options) { subject subj; subject_from_buf(mem, &subj, &parent->content, refmap); cmark_chunk_rtrim(&subj.input); diff --git a/src/inlines.h b/src/inlines.h index cbe7830321..52be76820d 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -8,8 +8,8 @@ extern "C" { cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url); cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); -void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, - int options); +void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, + cmark_reference_map *refmap, int options); bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, cmark_reference_map *refmap); diff --git a/src/references.c b/src/references.c old mode 100755 new mode 100644 index 348de149fb..e141213cc6 --- a/src/references.c +++ b/src/references.c @@ -139,7 +139,8 @@ void cmark_reference_map_free(cmark_reference_map *map) { } cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) { - cmark_reference_map *map = (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map)); + cmark_reference_map *map = + (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map)); map->mem = mem; return map; } diff --git a/src/render.c b/src/render.c index 0f88007085..20dca5ff84 100644 --- a/src/render.c +++ b/src/render.c @@ -109,8 +109,9 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, !renderer->begin_line && renderer->last_breakable > 0) { // copy from last_breakable to remainder - cmark_chunk_set_cstr(renderer->mem, &remainder, (char *)renderer->buffer->ptr + - renderer->last_breakable + 1); + cmark_chunk_set_cstr(renderer->mem, &remainder, + (char *)renderer->buffer->ptr + + renderer->last_breakable + 1); // truncate at last_breakable cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable); // add newline, prefix, and remainder @@ -155,9 +156,9 @@ char *cmark_render(cmark_node *root, int options, int width, char *result; cmark_iter *iter = cmark_iter_new(root); - cmark_renderer renderer = {mem, &buf, &pref, 0, width, 0, - 0, true, true, false, false, - outc, S_cr, S_blankline, S_out}; + cmark_renderer renderer = {mem, &buf, &pref, 0, width, + 0, 0, true, true, false, + false, outc, S_cr, S_blankline, S_out}; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); -- cgit 0.0.5-2-1-g0f52 From 9fe857d827b1fdb585e12d8387c3cb5fb5392c61 Mon Sep 17 00:00:00 2001 From: Jonathan Müller Date: Mon, 27 Jun 2016 19:54:25 +0200 Subject: Export the targets on installation This allows using them in other cmake projects. --- CMakeLists.txt | 3 +++ src/CMakeLists.txt | 1 + 2 files changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ab6a7257f..52f8b4bd2a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,3 +29,6 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Profile Release Asan Ubsan." FORCE) endif(NOT CMAKE_BUILD_TYPE) + +# export targets +install(EXPORT cmark DESTINATION lib/cmake) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2de501aa15..eb646ac983 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -126,6 +126,7 @@ endif(MSVC) set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) include (InstallRequiredSystemLibraries) install(TARGETS ${PROGRAM} ${LIBRARY} ${STATICLIBRARY} + EXPORT cmark RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -- cgit 0.0.5-2-1-g0f52 From cea0af4aad3208c190d006a7ba3497f4a3364b0a Mon Sep 17 00:00:00 2001 From: Jonathan Müller Date: Mon, 27 Jun 2016 20:36:00 +0200 Subject: Fix cmake warning about CMP0048 --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 52f8b4bd2a..8a50f9e939 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,13 @@ cmake_minimum_required(VERSION 2.8.9) + +# prevent ugly developer warnings because version is set directly, not through project() +# it should be redone properly by using VERSION in project() if on CMake 3.x +if(CMAKE_MAJOR_VERSION GREATER 2) + cmake_policy(SET CMP0048 OLD) +endif() + project(cmark) + include("FindAsan.cmake") if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") -- cgit 0.0.5-2-1-g0f52 From bf8bd830fc71ccb85e8fa1d51c71199c01f9db67 Mon Sep 17 00:00:00 2001 From: Jonathan Müller Date: Mon, 27 Jun 2016 21:59:39 +0200 Subject: Change export install location --- CMakeLists.txt | 3 --- src/CMakeLists.txt | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a50f9e939..92b545062a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,3 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Profile Release Asan Ubsan." FORCE) endif(NOT CMAKE_BUILD_TYPE) - -# export targets -install(EXPORT cmark DESTINATION lib/cmake) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index eb646ac983..ea55800608 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -139,6 +139,8 @@ install(FILES DESTINATION include ) +install(EXPORT cmark DESTINATION ${LIB_INSTALL_DIR}/cmake) + # Feature tests include(CheckIncludeFile) include(CheckCSourceCompiles) -- cgit 0.0.5-2-1-g0f52 From 089ef27d498ed7574412816162c99261d8f70bff Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 2 Jul 2016 22:38:14 -0700 Subject: Updated spec.txt. --- test/spec.txt | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index c7b1fcd124..418fa59e1b 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. ```````````````````````````````` - ```````````````````````````````` example →foo→baz→→bim . @@ -355,7 +359,6 @@ by spaces with a tab stop of 4 characters. ```````````````````````````````` - ```````````````````````````````` example a→a ὐ→a @@ -365,6 +368,9 @@ by spaces with a tab stop of 4 characters. ```````````````````````````````` +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.
                            ```````````````````````````````` +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 ```````````````````````````````` +```````````````````````````````` example +#→Foo +. +

                            Foo

                            +```````````````````````````````` + +```````````````````````````````` example +*→*→*→ +. +
                            +```````````````````````````````` ## Insecure characters @@ -779,15 +805,6 @@ headings: ```````````````````````````````` -A tab will not work: - -```````````````````````````````` example -#→foo -. -

                            #→foo

                            -```````````````````````````````` - - 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. @@ -8953,7 +8970,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.) -- cgit 0.0.5-2-1-g0f52 From 3d6155fe9a49e4a07379b816f9c7c2f00ae33dc4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 2 Jul 2016 22:38:21 -0700 Subject: Fixed ATX headers and thematic breaks to allow tabs as well as spaces. --- src/scanners.c | 2103 +++++++++++++++++++++++++++---------------------------- src/scanners.re | 8 +- 2 files changed, 1054 insertions(+), 1057 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 25a122ff49..709a74e4c6 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); } + yy1336: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy1324; + if (yych <= '9') + goto yy1337; + if (yych <= ':') + goto yy1324; + goto yy1334; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy1324; + } else { + if (yych <= '`') + goto yy1324; + if (yych >= '{') + goto yy1324; + } + } + yy1337: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy1324; + if (yych <= '9') + goto yy1338; + if (yych <= ':') + goto yy1324; + goto yy1334; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy1324; + } else { + if (yych <= '`') + goto yy1324; + if (yych >= '{') + goto yy1324; + } + } + yy1338: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy1324; + if (yych <= '9') + goto yy1339; + if (yych <= ':') + goto yy1324; + goto yy1334; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy1324; + } else { + if (yych <= '`') + goto yy1324; + if (yych >= '{') + goto yy1324; + } + } + yy1339: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy1324; + if (yych <= '9') + goto yy1340; + if (yych <= ':') + goto yy1324; + goto yy1334; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy1324; + } else { + if (yych <= '`') + goto yy1324; + if (yych >= '{') + goto yy1324; + } + } + yy1340: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy1324; + if (yych <= '9') + goto yy1341; + if (yych <= ':') + goto yy1324; + goto yy1334; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy1324; + } else { + if (yych <= '`') + goto yy1324; + if (yych >= '{') + goto yy1324; + } + } + yy1341: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy1324; + if (yych <= '9') + goto yy1342; + if (yych <= ':') + goto yy1324; + goto yy1334; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy1324; + } else { + if (yych <= '`') + goto yy1324; + if (yych >= '{') + goto yy1324; + } + } yy1342: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1343: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1344: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1345: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1346: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1347: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1348: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1349: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1350: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1351: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1352: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1353: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1354: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1355: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1356: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1357: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1358: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1359: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1360: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1361: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1362: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1363: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1364: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') 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; } } yy1365: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy1330; - if (yych <= '9') - goto yy1366; - if (yych <= ':') - goto yy1330; - goto yy1340; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy1330; - } else { - if (yych <= '`') - goto yy1330; - if (yych >= '{') - goto yy1330; - } - } - yy1366: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy1330; - if (yych <= '9') - goto yy1367; - if (yych <= ':') - goto yy1330; - goto yy1340; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy1330; - } else { - if (yych <= '`') - goto yy1330; - if (yych >= '{') - goto yy1330; - } - } - yy1367: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy1330; - if (yych <= '9') - goto yy1368; - if (yych <= ':') - goto yy1330; - goto yy1340; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy1330; - } else { - if (yych <= '`') - goto yy1330; - if (yych >= '{') - goto yy1330; - } - } - yy1368: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy1330; - if (yych <= '9') - goto yy1369; - if (yych <= ':') - goto yy1330; - goto yy1340; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy1330; - } else { - if (yych <= '`') - goto yy1330; - if (yych >= '{') - goto yy1330; - } - } - yy1369: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy1330; - if (yych <= '9') - goto yy1370; - if (yych <= ':') - goto yy1330; - goto yy1340; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy1330; - } else { - if (yych <= '`') - goto yy1330; - if (yych >= '{') - goto yy1330; - } - } - yy1370: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy1330; - if (yych <= '9') - goto yy1371; - if (yych <= ':') - goto yy1330; - goto yy1340; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy1330; - } else { - if (yych <= '`') - goto yy1330; - if (yych >= '{') - goto yy1330; - } - } - yy1371: 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 8b1c91ec7a..52bf5aa9fd 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; } */ } -- cgit 0.0.5-2-1-g0f52 From 67f760a78f7a875216d9b64aaf3524cc4f9a0f48 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 3 Jul 2016 12:18:43 +0200 Subject: Fix chunk_set_cstr with suffix of current string It's possible that cmark_chunk_set_cstr is called with a substring (suffix) of the current string. Delay freeing of the chunk content to handle this case correctly. Fixes issue #139. --- api_test/main.c | 8 +++++++- src/chunk.h | 7 ++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 8da9ba9cf1..94051e936f 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -171,7 +171,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[] = diff --git a/src/chunk.h b/src/chunk.h index 1bea422e3c..a2248f5945 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) { -- cgit 0.0.5-2-1-g0f52 From ff9fad1d4ba8368bc9b5dccbfb442224a1d571a3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jul 2016 21:31:41 +0100 Subject: Makefile: have leakcheck stop on first error... instead of going through all the formats and options and probably getting the same output. --- Makefile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 039089e19d..a03d43d3f7 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 \ -- cgit 0.0.5-2-1-g0f52 From d534f7e1f398311f20303664415ea0ae0f50a8a2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 5 Jul 2016 16:20:34 -0700 Subject: Don't allow ordered lists to interrupt paragraphs unless... ...they start with 1. --- src/blocks.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index b21f800947..2cd2ec8e88 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -401,7 +401,8 @@ 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; @@ -434,6 +435,9 @@ 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++; @@ -921,8 +925,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; -- cgit 0.0.5-2-1-g0f52 From fb64964880c1763e0e8596e37739b18663db03ec Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jul 2016 22:26:56 +0100 Subject: Updated spec. --- test/spec.txt | 64 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 418fa59e1b..8b29c560de 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3621,7 +3621,10 @@ 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]---only `1.` and `1)` are allowed. The following rules define [list items]: @@ -4853,28 +4856,20 @@ Foo ```````````````````````````````` - `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. -. -

                            The number of windows in my house is

                            -
                              -
                            1. The number of doors is 6.
                            2. -
                            ```````````````````````````````` +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 @@ -4908,17 +4903,38 @@ 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. +. +

                            The number of windows in my house is +14. The number of doors is 6.

                            +```````````````````````````````` + +We may still get an unintended result in cases like + +```````````````````````````````` example +The number of windows in my house is +1. The number of doors is 6. +. +

                            The number of windows in my house is

                            +
                              +
                            1. The number of doors is 6.
                            2. +
                            +```````````````````````````````` -[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. +but this rule should prevent most spurious list captures. There can be blank lines between items, but two blank lines end a list: -- cgit 0.0.5-2-1-g0f52 From e9c53bbdfa14c7a43cc8bb78cd6cc56ea86b03db Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jul 2016 22:37:16 +0100 Subject: Removed "two blanks breaks out of a list" feature. --- src/blocks.c | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 2cd2ec8e88..6031c18563 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; @@ -1154,10 +1136,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); -- cgit 0.0.5-2-1-g0f52 From b637b19f456ee721873386e91204240b037e1024 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jul 2016 22:37:31 +0100 Subject: Modified api_test for change in "two blanks break out of a list." --- api_test/main.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 94051e936f..d493e006ef 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" "
                            html
                            \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), "
                            html
                            \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"); @@ -194,10 +192,10 @@ static void accessors(test_batch_runner *runner) { "
                          • Item 1
                          • \n" "
                          • Item 2
                          • \n" "\n" - "
                            CODE\n"
                            -      "
                            \n" "
                            FENCED\n"
                                   "
                            \n" + "
                            CODE\n"
                            +      "
                            \n" "
                            HTML
                            \n" "

                            LINK

                            \n"; STR_EQ(runner, rendered_html, expected_html, "setters work"); -- cgit 0.0.5-2-1-g0f52 From 41b3307db15bb02122223b8a16afeec54a9a69d7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jul 2016 22:46:07 +0100 Subject: Updated spec. --- test/spec.txt | 129 ++++++++++------------------------------------------------ 1 file changed, 21 insertions(+), 108 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 8b29c560de..6a7c658e1e 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3813,66 +3813,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 - ``` .
                            • foo

                              bar

                            • -
                            • -

                              foo

                              -
                            • -
                            -

                            bar

                            -
                              -
                            • -
                              foo
                              -
                              -
                              -bar
                              -
                              -
                            • -
                            • -

                              baz

                              -
                                -
                              • -
                                foo
                                -
                                -
                                -bar
                                -
                                -
                              • -
                              -
                            ```````````````````````````````` @@ -3905,15 +3859,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 .
                              @@ -3921,33 +3874,13 @@ blank lines end the list):

                              Foo

                              bar
                               
                              -baz
                              -
                              - -
                            -```````````````````````````````` - -```````````````````````````````` example -- Foo - - bar - - - baz -. -
                              -
                            • -

                              Foo

                              -
                              bar
                              +baz
                               
                            -
                              baz
                            -
                            ```````````````````````````````` - Note that ordered list start numbers must be nine digits or less: ```````````````````````````````` example @@ -4936,8 +4869,7 @@ The number of windows in my house is but this rule should prevent most spurious list captures. -There can be blank lines between items, but two blank lines end -a list: +There can be any number of blank lines between items: ```````````````````````````````` example - foo @@ -4954,36 +4886,12 @@ a list:
                          • bar

                          • - -
                              -
                            • baz
                            • -
                            -```````````````````````````````` - - -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 -. -
                              -
                            • foo
                            • -
                            -

                            bar

                            -
                              -
                            • baz
                            • +
                            • +

                              baz

                              +
                            ```````````````````````````````` - -Indeed, two blank lines will end *all* containing lists: - ```````````````````````````````` example - foo - bar @@ -4997,26 +4905,28 @@ Indeed, two blank lines will end *all* containing lists:
                            • bar
                                -
                              • baz
                              • +
                              • +

                                baz

                                +

                                bim

                                +
                            -
                              bim
                            -
                            ```````````````````````````````` -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 @@ -5025,6 +4935,7 @@ item:
                          • foo
                          • bar
                          • +
                            • baz
                            • bim
                            • @@ -5039,6 +4950,7 @@ item: - foo + code . @@ -5051,6 +4963,7 @@ item:

                              foo

                            +
                            code
                             
                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 005d6d07cba0cb7fe17fd2148791bbfd382defcf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jul 2016 23:04:48 +0100 Subject: Fix mistaken sourcepos for atx headers. Closes #141. --- src/blocks.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 6031c18563..a5e667eb46 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -851,12 +851,13 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, 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); -- cgit 0.0.5-2-1-g0f52 From b0def0a2925c7c92bb5f5b7f0b3f3d16402a59f0 Mon Sep 17 00:00:00 2001 From: TsT Date: Wed, 13 Jul 2016 18:34:41 +0200 Subject: link fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97055848b1..98273edb59 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. -- cgit 0.0.5-2-1-g0f52 From fb737bd9dfe1aa03767fe01fc1d28ed46652158b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Jul 2016 11:40:57 -0700 Subject: Updated spec. --- test/spec.txt | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 6a7c658e1e..4c3de7af6f 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3621,17 +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.) 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]---only `1.` and `1)` are allowed. +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 @@ -4207,6 +4209,20 @@ A list may start or end with an empty list item: ```````````````````````````````` +However, an empty list item cannot interrupt a paragraph: + +```````````````````````````````` example +foo +* + +foo +1. +. +

                            foo +*

                            +

                            foo +1.

                            +```````````````````````````````` 4. **Indentation.** If a sequence of lines *Ls* constitutes a list item @@ -6122,10 +6138,8 @@ A newline also counts as whitespace: *foo bar * . -

                            *foo bar

                            -
                              -
                            • -
                            +

                            *foo bar +*

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From a47d3332c073ec3d0420d0b7947544b0f26d910f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Jul 2016 11:41:03 -0700 Subject: Empty list items cannot interrupt paragraphs (spec change). --- src/blocks.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/blocks.c b/src/blocks.c index a5e667eb46..84d20a4239 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -388,6 +388,7 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, unsigned char c; bufsize_t startpos; cmark_list *data; + bufsize_t i; startpos = pos; c = peek_at(input, pos); @@ -397,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; @@ -426,6 +439,17 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, 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 (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_ORDERED_LIST; -- cgit 0.0.5-2-1-g0f52 From 9ae20a09c5f745e7d0b2866351291c60a8c8f61d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Jul 2016 12:05:39 -0700 Subject: Replaced check for `\n` with `S_is_line_end_char`. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 84d20a4239..7627f6ec73 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -445,7 +445,7 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, while (S_is_space_or_tab(peek_at(input, i))) { i++; } - if (peek_at(input, i) == '\n') { + if (S_is_line_end_char(peek_at(input, i))) { return 0; } } -- cgit 0.0.5-2-1-g0f52 From f988ab6d41855de43c157633852f0fe3c0770c6d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Jul 2016 12:33:38 -0700 Subject: Fix sourcepos for blockquotes. Fixes #142. --- src/blocks.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 7627f6ec73..5c04fc0ded 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -862,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 @@ -869,7 +871,7 @@ 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))) { -- cgit 0.0.5-2-1-g0f52 From ddae0291dcc1561fcfb86d115ccd67cefff26a3f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 15 Jul 2016 08:25:08 -0700 Subject: Updated spec. --- test/spec.txt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 4c3de7af6f..e2b6834d82 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.25 -date: '2016-03-24' +version: 0.26 +date: '2016-07-15' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -340,7 +340,7 @@ 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 +Thus, for example, 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.) @@ -3621,12 +3621,7 @@ 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.) 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. +in some browsers.) The following rules define [list items]: @@ -3641,6 +3636,12 @@ The following rules define [list items]: If the list item is ordered, then it is also assigned a start number, based on the ordered list marker. + Exceptions: When the list item interrupts a paragraph---that + is, when it starts on a line that would otherwise count as + [paragraph continuation text]---then (a) the lines *Ls* must + not begin with a blank line, and (b) if the list item is + ordered, the start number must be 1. + For example, let *Ls* be the lines ```````````````````````````````` example -- cgit 0.0.5-2-1-g0f52 From 446f8256e53eecccf10069b0bc7562eb4ff3fa3e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 15 Jul 2016 08:32:26 -0700 Subject: Reformatted. --- src/blocks.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 5c04fc0ded..8e8c4c2022 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -384,7 +384,7 @@ static void process_inlines(cmark_mem *mem, cmark_node *root, // data with the details. On failure, returns 0. static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, bufsize_t pos, bool interrupts_paragraph, - cmark_list **dataptr) { + cmark_list **dataptr) { unsigned char c; bufsize_t startpos; cmark_list *data; @@ -406,7 +406,7 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, i++; } if (peek_at(input, i) == '\n') { - return 0; + return 0; } } @@ -446,7 +446,7 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, i++; } if (S_is_line_end_char(peek_at(input, i))) { - return 0; + return 0; } } @@ -882,8 +882,8 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); - *container = - add_child(parser, *container, CMARK_NODE_HEADING, heading_startpos + 1); + *container = add_child(parser, *container, CMARK_NODE_HEADING, + heading_startpos + 1); hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); @@ -933,12 +933,10 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, 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, - (*container)->type == - CMARK_NODE_PARAGRAPH, - &data)) && - (!indented || cont_type == CMARK_NODE_LIST)) { + } else if ((matched = parse_list_marker( + parser->mem, input, 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. -- cgit 0.0.5-2-1-g0f52 From 1dbcf46c6c3a6fe3306e8ef2139e902e17c20cf4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 15 Jul 2016 08:32:59 -0700 Subject: Bump version to 0.26.0 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92b545062a..e6dbe7f470 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,8 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 25) -set(PROJECT_VERSION_PATCH 2) +set(PROJECT_VERSION_MINOR 26) +set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) -- cgit 0.0.5-2-1-g0f52 From 55a58d9e918a7aad696495702786807941928f9e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 15 Jul 2016 10:24:32 -0700 Subject: Updated changelog. --- changelog.txt | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/changelog.txt b/changelog.txt index 77341b5247..3a5c76655a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,107 @@ +[0.26.0] + + * Implement spec changes for list items: + - Empty list items cannot interrupt paragraphs. + - Ordered lists cannot interrupt paragraphs unless + they start with 1. + - Removed "two blank lines break out of a list" feature. + * Fix sourcepos for blockquotes (#142). + * Fix sourcepos for atx headers (#141). + * Fix ATX headers and thematic breaks to allow tabs as well as spaces. + * Fix `chunk_set_cstr` with suffix of current string (#139, + Nick Wellnhofer). It's possible that `cmark_chunk_set_cstr` is called + with a substring (suffix) of the current string. Delay freeing of the + chunk content to handle this case correctly. + * Export targets on installation (Jonathan Müller). + This allows using them in other cmake projects. + * Fix cmake warning about CMP0048 (Jonathan Müller). + * commonmark renderer: Ensure we don't have a blank line + before a code block when it's the first thing in a list + item. + * Change parsing of strong/emph in response to spec changes. + `process_emphasis` now gets better results in corner cases. + The change is this: when considering matches between an interior + delimiter run (one that can open and can close) and another delimiter + run, we require that the sum of the lengths of the two delimiter + runs mod 3 is not 0. + * Ported Robin Stocker's changes to link parsing in jgm/commonmark#101. + This uses a separate stack for brackets, instead of putting them on the + delimiter stack. This avoids the need for looking through the delimiter + stack for the next bracket. + * `cmark_reference_lookup`: Return NULL if reference is null string. + * Fix character type detection in `commonmark.c` (Nick Wellnhofer). + Fixes test failures on Windows and undefined behavior. + - Implement `cmark_isalpha`. + - Check for ASCII character before implicit cast to char. + - Use internal ctype functions in `commonmark.c`. + * Better documentation of memory-freeing responsibilities. + in `cmark.h` and its man page (#124). + * Use library functions to insert nodes in emphasis/link processing. + Previously we did this manually, which introduces many + places where errors can creep in. + * Correctly handle list marker followed only by spaces. + Previously when a list marker was followed only by spaces, + cmark expected the following content to be indented by + the same number of spaces. But in this case we should + treat the line just like a blank line and set list padding + accordingly. + * Fixed a number of issues relating to line wrapping. + - Extend `CMARK_OPT_NOBREAKS` to all renderers and add `--nobreaks`. + - Do not autowrap, regardless of width parameter, if + `CMARK_OPT_NOBREAKS` is set. + - Fixed `CMARK_OPT_HARDBREAKS` for LaTeX and man renderers. + - Ensure that no auto-wrapping occurs if + `CMARK_OPT_NOBREAKS` is enabled, or if output is CommonMark and + `CMARK_OPT_HARDBREAKS` is enabled. + * Set stdin to binary mode on Windows (Nick Wellnhofer, #113). + This fixes EOLs when reading from stdin. + * Add library option to render softbreaks as spaces (Pavlo + Kapyshin). Note that the `NOBREAKS` option is HTML-only + * renderer: `no_linebreaks` instead of `no_wrap`. + We generally want this option to prohibit any breaking + in things like headers (not just wraps, but softbreaks). + * Coerce `realurllen` to `int`. This is an alternate solution for pull + request #132, which introduced a new warning on the comparison + (Benedict Cohen). + * Remove unused variable `link_text` (Mathiew Duponchelle). + * Improved safety checks in buffer (Vicent Marti). + * Add new interface allowing specification of custom memory allocator + for nodes (Vicent Marti). Added `cmark_node_new_with_mem`, + `cmark_parser_new_with_mem`, `cmark_mem` to API. + * Reduce storage size for nodes by using bit flags instead of + separate booleans (Vicent Marti). + * config: Add `SSIZE_T` compat for Win32 (Vicent Marti). + * cmake: Global handler for OOM situations (Vicent Marti). + * Add tests for memory exhaustion (Vicent Marti). + * Document in man page and public header that one should use the same + memory allocator for every node in a tree. + * Fix ctypes in Python FFI calls (Nick Wellnhofer). This didn't cause + problems so far because all types are 32-bit on 32-bit systems and + arguments are passed in registers on x86-64. The wrong types could cause + crashes on other platforms, though. + * Remove spurious failures in roundtrip tests. In the commonmark writer we + separate lists, and lists and indented code, using a dummy HTML comment. + So in evaluating the round-trip tests, we now strip out + these comments. We also normalize HTML to avoid issues + having to do with line breaks. + * Add 2016 to copyright (Kevin Burke). + * Added `to_commonmark` in `test/cmark.py` (for round-trip tests). + * `spec_test.py` - parameterize `do_test` with converter. + * `spec_tests.py`: exit code is now sum of failures and errors. + This ensures that a failing exit code will be given when + there are errors, not just with failures. + * Fixed round trip tests. Previously they actually ran + `cmark` instead of the round-trip version, since there was a bug in + setting the ROUNDTRIP variable (#131). + * Added new `roundtrip_tests.py`. This replaces the old use of simple shell + scripts. It is much faster, and more flexible. (We will be able + to do custom normalization and skip certain tests.) + * Fix tests under MinGW (Nick Wellnhofer). + * Fix leak in `api_test` (Mathieu Duponchelle). + * Makefile: have leakcheck stop on first error instead of going through + all the formats and options and probably getting the same output. + * Add regression tests (Nick Wellnhofer). + [0.25.2] * Open files in binary mode (#113, Nick Wellnhofer). Now that cmark -- cgit 0.0.5-2-1-g0f52 From 85ad9c653d212f70870c1b49e67fc78b19e4105f Mon Sep 17 00:00:00 2001 From: Tobias Kortkamp Date: Sat, 16 Jul 2016 12:43:07 +0200 Subject: Use $(MAKE) in Makefile for recursive makes On some system namely OpenBSD/FreeBSD GNU Make is called gmake and calling make directly from the Makefile leads to strange results. See https://www.gnu.org/software/make/manual/html_node/MAKE-Variable.html#MAKE-Variable --- Makefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index a03d43d3f7..687fe71bd4 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ all: cmake_build man/man3/cmark.3 $(CMARK): cmake_build cmake_build: $(BUILDDIR) - @make -j2 -C $(BUILDDIR) + @$(MAKE) -j2 -C $(BUILDDIR) @echo "Binaries can be found in $(BUILDDIR)/src" $(BUILDDIR): @@ -40,37 +40,37 @@ $(BUILDDIR): -DCMAKE_EXPORT_COMPILE_COMMANDS=ON install: $(BUILDDIR) - make -C $(BUILDDIR) install + $(MAKE) -C $(BUILDDIR) install debug: mkdir -p $(BUILDDIR); \ cd $(BUILDDIR); \ cmake .. -DCMAKE_BUILD_TYPE=Debug; \ - make + $(MAKE) ubsan: mkdir -p $(BUILDDIR); \ cd $(BUILDDIR); \ cmake .. -DCMAKE_BUILD_TYPE=Ubsan; \ - make + $(MAKE) asan: mkdir -p $(BUILDDIR); \ cd $(BUILDDIR); \ cmake .. -DCMAKE_BUILD_TYPE=Asan; \ - make + $(MAKE) prof: mkdir -p $(BUILDDIR); \ cd $(BUILDDIR); \ cmake .. -DCMAKE_BUILD_TYPE=Profile; \ - make + $(MAKE) afl: @[ -n "$(AFL_PATH)" ] || { echo '$$AFL_PATH not set'; false; } mkdir -p $(BUILDDIR) cd $(BUILDDIR) && cmake .. -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-gcc - make + $(MAKE) $(AFL_PATH)/afl-fuzz \ -i test/afl_test_cases \ -o test/afl_results \ @@ -85,7 +85,7 @@ mingw: mkdir -p $(MINGW_BUILDDIR); \ cd $(MINGW_BUILDDIR); \ cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain-mingw32.cmake -DCMAKE_INSTALL_PREFIX=$(MINGW_INSTALLDIR) ;\ - make && make install + $(MAKE) && $(MAKE) install man/man3/cmark.3: src/cmark.h | $(CMARK) python man/make_man_page.py $< > $@ \ @@ -125,7 +125,7 @@ update-spec: > $(SPEC) test: $(SPEC) cmake_build - make -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) + $(MAKE) -C $(BUILDDIR) test || (cat $(BUILDDIR)/Testing/Temporary/LastTest.log && exit 1) $(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]))' > $@ -- cgit 0.0.5-2-1-g0f52 From 3ebfa6103a056fba0d4ca7a01f2c0ea8127025b4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 16 Jul 2016 08:38:06 -0700 Subject: Removed size_t and ssize_t defs for WIN32. --- src/config.h.in | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/config.h.in b/src/config.h.in index 0f72d6a1f1..de1a4dd493 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -69,14 +69,6 @@ CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ... #endif -#ifdef _WIN32 -# include - typedef SSIZE_T ssize_t; - typedef SIZE_T size_t; -#else -# include -#endif - #ifdef __cplusplus } #endif -- cgit 0.0.5-2-1-g0f52 From 48b811839ad42b52a20149b796ec6d312e093e8d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 16 Jul 2016 09:21:43 -0700 Subject: Bump to 0.26.1. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e6dbe7f470..048d58657c 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 26) -set(PROJECT_VERSION_PATCH 0) +set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) -- cgit 0.0.5-2-1-g0f52 From e91dc12128b156f1b355e88b3d4f46ad162f1dc5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 16 Jul 2016 09:23:11 -0700 Subject: Update changelog. --- changelog.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/changelog.txt b/changelog.txt index 3a5c76655a..8a8f8569a4 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,10 @@ +[0.26.1] + + * Removed unnecessary typedef that caused build failure on + some platforms. + * Use `$(MAKE)` in Makefile instead of hardcoded `make` (#146, + Tobias Kortkamp). + [0.26.0] * Implement spec changes for list items: -- cgit 0.0.5-2-1-g0f52 From 43e8f05a535d880faf9e162a8de27dd302928e8c Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Tue, 9 Aug 2016 15:21:31 +0300 Subject: Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98273edb59..5c43c1a84a 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Advantages of this library: thousands-deep nested bracketed text or block quotes). - **Flexible.** CommonMark input is parsed to an AST which can be - manipulated programatically prior to rendering. + manipulated programmatically prior to rendering. - **Multiple renderers.** Output in HTML, groff man, LaTeX, CommonMark, and a custom XML format is supported. And it is easy to write new -- cgit 0.0.5-2-1-g0f52 From abd7ad15c15ecf40cc056926235d1be0750595f5 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 21 Aug 2016 12:00:00 -0400 Subject: COPYING: Remove removed files --- COPYING | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/COPYING b/COPYING index 8099de3018..f2e7ba3138 100644 --- a/COPYING +++ b/COPYING @@ -27,8 +27,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----- -houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c, -html_unescape.gperf, html_unescape.h +houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c derive from https://github.com/vmg/houdini (with some modifications) -- cgit 0.0.5-2-1-g0f52 From 132d9cdacc87f9e85fff1144549e25e9b89eae34 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 21 Aug 2016 12:00:00 -0400 Subject: COPYING: Update file name and remove duplicate section --- COPYING | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/COPYING b/COPYING index f2e7ba3138..db88a81b3e 100644 --- a/COPYING +++ b/COPYING @@ -103,7 +103,7 @@ DEALINGS IN THE SOFTWARE. ----- -The normalization code in runtests.py was derived from the +The normalization code in normalize.py was derived from the markdowntest project, Copyright 2013 Karl Dubost: The MIT License (MIT) @@ -168,24 +168,3 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- cgit 0.0.5-2-1-g0f52 From 24b9713b965c098b40403b5a9a8327cce603e9fe Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 26 Aug 2016 14:12:24 +0200 Subject: Fix nullary function declarations in cmark.h Fixes strict prototypes warnings. --- src/cmark.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmark.h b/src/cmark.h index d5b7f8969c..6ed7eb0574 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -590,13 +590,13 @@ char *cmark_render_latex(cmark_node *root, int options, int width); * In hexadecimal format, the number 0x010203 represents version 1.2.3. */ CMARK_EXPORT -int cmark_version(); +int cmark_version(void); /** The library version string for runtime checks. Also available as * macro CMARK_VERSION_STRING for compile time checks. */ CMARK_EXPORT -const char *cmark_version_string(); +const char *cmark_version_string(void); /** # AUTHORS * -- cgit 0.0.5-2-1-g0f52 From 2a42cd882110cb6168f866679dce5b3a60c78b1e Mon Sep 17 00:00:00 2001 From: Gábor Csárdi Date: Mon, 12 Sep 2016 00:20:23 +0100 Subject: autolink scheme can contain digits --- src/scanners.re | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scanners.re b/src/scanners.re index 52bf5aa9fd..9e9999c3f5 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -71,7 +71,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, in_single_quotes = ['] (escaped_char|[^'\x00])* [']; in_parens = [(] (escaped_char|[^)\x00])* [)]; - scheme = [A-Za-z ][A-Za-z.+-]{1,31}; + scheme = [A-Za-z ][A-Za-z0-9.+-]{1,31}; */ // Try to match a scheme including colon. -- cgit 0.0.5-2-1-g0f52 From dc2d831c7d256ea98d3ad4d6b738525618aab99d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Sep 2016 15:35:48 +0200 Subject: Update spec --- test/spec.txt | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index e2b6834d82..7d97e1e18b 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1985,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 or other [container block](@), 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. @@ -2015,7 +2015,8 @@ followed by one of the strings (case-insensitive) `address`, `article`, `aside`, `base`, `basefont`, `blockquote`, `body`, `caption`, `center`, `col`, `colgroup`, `dd`, `details`, `dialog`, `dir`, `div`, `dl`, `dt`, `fieldset`, `figcaption`, `figure`, -`footer`, `form`, `frame`, `frameset`, `h1`, `head`, `header`, `hr`, +`footer`, `form`, `frame`, `frameset`, +`h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `head`, `header`, `hr`, `html`, `iframe`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`, `meta`, `nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`, `section`, `source`, `summary`, `table`, `tbody`, `td`, @@ -4730,8 +4731,7 @@ takes four spaces (a common case), but diverge in other cases. A [list](@) is a sequence of one or more list items [of the same type]. The list items -may be separated by single [blank lines], but two -blank lines end all containing lists. +may be separated by any number of blank lines. Two list items are [of the same type](@) if they begin with a [list marker] of the same type. @@ -4809,10 +4809,11 @@ Foo `Markdown.pl` does not allow this, through fear of triggering a list via a numeral in a hard-wrapped line: -```````````````````````````````` markdown +``` markdown The number of windows in my house is 14. The number of doors is 6. -```````````````````````````````` +``` + Oddly, though, `Markdown.pl` *does* allow a blockquote to interrupt a paragraph, even though the same considerations might apply. @@ -4821,10 +4822,12 @@ 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 - - a coat - - a plane ticket +``` markdown +I need to buy +- new shoes +- a coat +- a plane ticket +``` Second, we are attracted to a @@ -4836,20 +4839,24 @@ Second, we are attracted to a (Indeed, the spec for [list items] and [block quotes] presupposes this principle.) This principle implies that if - * I need to buy - - new shoes - - a coat - - a plane ticket +``` markdown + * I need to buy + - new shoes + - a coat + - a plane ticket +``` is a list item containing a paragraph followed by a nested sublist, as all Markdown implementations agree it is (though the paragraph may be rendered without `

                            ` tags, since the list is "tight"), then - I need to buy - - new shoes - - a coat - - a plane ticket +``` markdown +I need to buy +- new shoes +- a coat +- a plane ticket +``` by itself should be a paragraph followed by a nested sublist. @@ -6558,7 +6565,7 @@ Note that in the preceding case, the interpretation is precluded by the condition that a delimiter that -can both open and close (like the `*` after `foo` +can both open and close (like the `*` after `foo`) cannot form emphasis if the sum of the lengths of the delimiter runs containing the opening and closing delimiters is a multiple of 3. @@ -6590,12 +6597,6 @@ omitted: ```````````````````````````````` -```````````````````````````````` example -*foo**bar*** -. -

                            foobar

                            -```````````````````````````````` - Indefinite levels of nesting are possible: ```````````````````````````````` example @@ -9045,7 +9046,7 @@ blocks. But we cannot close unmatched blocks yet, because we may have a [lazy continuation line]. 2. Next, after consuming the continuation markers for existing -blocks, we look for new block starts (e.g. `>` for a block quote. +blocks, we look for new block starts (e.g. `>` for a block quote). If we encounter a new block start, we close any blocks unmatched in step 1 before creating the new block as a child of the last matched block. -- cgit 0.0.5-2-1-g0f52 From fae6a253d2f0c79eb34b0bf83ca484c93484f5a5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 12 Sep 2016 15:40:46 +0200 Subject: Fixed h2..h6 HTML blocks (jgm/CommonMark#430). Added regression test. --- src/scanners.c | 60 ++++++++++++++++++++++++----------------------------- src/scanners.re | 2 +- test/regression.txt | 24 +++++++++++++++++++++ 3 files changed, 52 insertions(+), 34 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 709a74e4c6..466d302fac 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,7 +1,7 @@ /* Generated by re2c 0.15.3 */ -#include -#include "chunk.h" #include "scanners.h" +#include "chunk.h" +#include bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset) { @@ -8258,45 +8258,37 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, + 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, - 230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, + 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230, + 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, + 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, - 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, + 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, + 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 <= '`') { @@ -10582,7 +10574,9 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yych = *++p; if (yych <= 'S') { if (yych <= 'D') { - if (yych == '1') + if (yych <= '0') + goto yy525; + if (yych <= '6') goto yy564; goto yy525; } else { diff --git a/src/scanners.re b/src/scanners.re index 52bf5aa9fd..fdb3d8efe0 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -37,7 +37,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, tagname = [A-Za-z][A-Za-z0-9-]*; - blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; + blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; diff --git a/test/regression.txt b/test/regression.txt index c8a10573c5..54872da49b 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -32,3 +32,27 @@ Repeatedly solving
                          • how techniques
                          • ```````````````````````````````` + +Issue jgm/CommonMark#430: h2..h6 not recognized as block tags. + +```````````````````````````````` example +

                            lorem

                            + +

                            lorem

                            + +

                            lorem

                            + +

                            lorem

                            + +
                            lorem
                            + +
                            lorem
                            +. +

                            lorem

                            +

                            lorem

                            +

                            lorem

                            +

                            lorem

                            +
                            lorem
                            +
                            lorem
                            +```````````````````````````````` + -- cgit 0.0.5-2-1-g0f52 From 0def9262c5a7d9ebf55d08caff3b05ce82cd2dc1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Sep 2016 08:38:31 +0200 Subject: Don't let URI schemes start with spaces. --- src/scanners.re | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scanners.re b/src/scanners.re index 07396f3dac..7ecf3581dd 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -71,7 +71,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, in_single_quotes = ['] (escaped_char|[^'\x00])* [']; in_parens = [(] (escaped_char|[^)\x00])* [)]; - scheme = [A-Za-z ][A-Za-z0-9.+-]{1,31}; + scheme = [A-Za-z][A-Za-z0-9.+-]{1,31}; */ // Try to match a scheme including colon. -- cgit 0.0.5-2-1-g0f52 From 770b6668c3624b0f9aea82081af4c9d3319a0794 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Sep 2016 08:40:37 +0200 Subject: Regenerated scanners.c. --- src/scanners.c | 596 +++++++++++++++++++++++---------------------------------- 1 file changed, 238 insertions(+), 358 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 466d302fac..8a07d48b40 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -29,38 +29,30 @@ bufsize_t _scan_scheme(const unsigned char *p) { { unsigned char yych; yych = *(marker = p); - if (yych <= 0x7F) { - if (yych <= ' ') { + if (yych <= 0xC1) { + if (yych <= 'Z') { if (yych == '\n') goto yy2; - if (yych <= 0x1F) + if (yych <= '@') goto yy4; goto yy3; } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy4; + if (yych <= '`') + goto yy4; + if (yych <= 'z') goto yy3; - } else { - if (yych <= '`') - goto yy4; - if (yych <= 'z') - goto yy3; + if (yych <= 0x7F) goto yy4; - } } } else { if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych >= 0xC2) - goto yy5; - } else { - if (yych <= 0xE0) - goto yy7; - if (yych <= 0xEC) - goto yy8; - goto yy12; - } + if (yych <= 0xDF) + goto yy5; + if (yych <= 0xE0) + goto yy7; + if (yych <= 0xEC) + goto yy8; + goto yy12; } else { if (yych <= 0xF0) { if (yych <= 0xEF) @@ -77,14 +69,22 @@ bufsize_t _scan_scheme(const unsigned char *p) { yy2 : { return 0; } yy3: yych = *(marker = ++p); - if (yych <= '.') { - if (yych == '+') + if (yych <= '/') { + if (yych <= '+') { + if (yych <= '*') + goto yy2; goto yy13; - if (yych <= ',') + } else { + if (yych <= ',') + goto yy2; + if (yych <= '.') + goto yy13; goto yy2; - goto yy13; + } } else { if (yych <= 'Z') { + if (yych <= '9') + goto yy13; if (yych <= '@') goto yy2; goto yy13; @@ -153,16 +153,14 @@ bufsize_t _scan_scheme(const unsigned char *p) { yy13: yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') - goto yy6; - goto yy16; - } else { - if (yych <= ',') - goto yy6; - if (yych <= '.') + if (yych <= ',') { + if (yych == '+') goto yy16; goto yy6; + } else { + if (yych == '/') + goto yy6; + goto yy16; } } else { if (yych <= 'Z') { @@ -185,13 +183,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { yy16: yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -209,13 +205,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -233,13 +227,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -257,13 +249,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -281,13 +271,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -305,13 +293,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -329,13 +315,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -353,13 +337,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -377,13 +359,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -401,13 +381,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -425,13 +403,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -449,13 +425,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -473,13 +447,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -497,13 +469,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -521,13 +491,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -545,13 +513,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -569,13 +535,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -593,13 +557,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -617,13 +579,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -641,13 +601,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -665,13 +623,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -689,13 +645,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -713,13 +667,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -737,13 +689,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -761,13 +711,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -785,13 +733,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -809,13 +755,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -833,13 +777,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -857,13 +799,11 @@ bufsize_t _scan_scheme(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy6; } else { - if (yych <= ',') - goto yy6; - if (yych >= '/') + if (yych == '/') goto yy6; } } else { @@ -915,38 +855,30 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { 0, 0, 0, 0, }; yych = *(marker = p); - if (yych <= 0x7F) { - if (yych <= ' ') { + if (yych <= 0xC1) { + if (yych <= 'Z') { if (yych == '\n') goto yy48; - if (yych <= 0x1F) + if (yych <= '@') goto yy50; goto yy49; } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy50; + if (yych <= '`') + goto yy50; + if (yych <= 'z') goto yy49; - } else { - if (yych <= '`') - goto yy50; - if (yych <= 'z') - goto yy49; + if (yych <= 0x7F) goto yy50; - } } } else { if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych >= 0xC2) - goto yy51; - } else { - if (yych <= 0xE0) - goto yy53; - if (yych <= 0xEC) - goto yy54; - goto yy58; - } + if (yych <= 0xDF) + goto yy51; + if (yych <= 0xE0) + goto yy53; + if (yych <= 0xEC) + goto yy54; + goto yy58; } else { if (yych <= 0xF0) { if (yych <= 0xEF) @@ -963,14 +895,22 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { yy48 : { return 0; } yy49: yych = *(marker = ++p); - if (yych <= '.') { - if (yych == '+') + if (yych <= '/') { + if (yych <= '+') { + if (yych <= '*') + goto yy48; goto yy59; - if (yych <= ',') + } else { + if (yych <= ',') + goto yy48; + if (yych <= '.') + goto yy59; goto yy48; - goto yy59; + } } else { if (yych <= 'Z') { + if (yych <= '9') + goto yy59; if (yych <= '@') goto yy48; goto yy59; @@ -1039,16 +979,14 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { yy59: yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') - goto yy52; - goto yy62; - } else { - if (yych <= ',') - goto yy52; - if (yych <= '.') + if (yych <= ',') { + if (yych == '+') goto yy62; goto yy52; + } else { + if (yych == '/') + goto yy52; + goto yy62; } } else { if (yych <= 'Z') { @@ -1103,13 +1041,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { yy62: yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1127,13 +1063,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1151,13 +1085,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1175,13 +1107,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1199,13 +1129,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1223,13 +1151,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1247,13 +1173,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1271,13 +1195,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1295,13 +1217,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1319,13 +1239,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1343,13 +1261,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1367,13 +1283,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1391,13 +1305,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1415,13 +1327,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1439,13 +1349,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1463,13 +1371,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1487,13 +1393,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1511,13 +1415,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1535,13 +1437,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1559,13 +1459,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1583,13 +1481,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1607,13 +1503,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1631,13 +1525,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1655,13 +1547,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1679,13 +1569,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1703,13 +1591,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1727,13 +1613,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1751,13 +1635,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { @@ -1775,13 +1657,11 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } yych = *++p; if (yych <= '9') { - if (yych <= '+') { - if (yych <= '*') + if (yych <= ',') { + if (yych != '+') goto yy52; } else { - if (yych <= ',') - goto yy52; - if (yych >= '/') + if (yych == '/') goto yy52; } } else { -- cgit 0.0.5-2-1-g0f52 From f1f2deda56504e53ee8c5bb15858c6256b950252 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Sep 2016 08:40:53 +0200 Subject: Regenerated cmark.3 man page. --- man/man3/cmark.3 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 12140f4ae7..82fe6c37cb 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "June 23, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "September 13, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -103,9 +103,9 @@ Custom memory allocator support \fC .RS 0n typedef struct cmark_mem { - void *(*calloc)(size_t, size_t); - void *(*realloc)(void *, size_t); - void (*free)(void *); + void *(*calloc)(size_t, size_t); + void *(*realloc)(void *, size_t); + void (*free)(void *); } cmark_mem; .RE \f[] @@ -785,7 +785,7 @@ dashes. Version information .PP -\fIint\f[] \fBcmark_version\f[](\fI\f[]) +\fIint\f[] \fBcmark_version\f[](\fIvoid\f[]) .PP The library version as integer for runtime checks. Also available as @@ -800,7 +800,7 @@ Bits 0\-7 contain the patchlevel. In hexadecimal format, the number 0x010203 represents version 1.2.3. .PP -\fIconst char *\f[] \fBcmark_version_string\f[](\fI\f[]) +\fIconst char *\f[] \fBcmark_version_string\f[](\fIvoid\f[]) .PP The library version string for runtime checks. Also available as macro -- cgit 0.0.5-2-1-g0f52 From bbca5bb3bbacd2bb8c85cfe54293b8c4da29dbf9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Sep 2016 15:47:51 +0200 Subject: Allow tabs after setext header line. See jgm/commonmark.js#109 --- src/scanners.c | 72 +++++++++++++++++++++++++++++++++-------------------- src/scanners.re | 4 +-- test/regression.txt | 10 ++++++++ 3 files changed, 57 insertions(+), 29 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 8a07d48b40..21a433d51a 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -18338,18 +18338,18 @@ bufsize_t _scan_setext_heading_line(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, 32, 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, 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 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, 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, }; yych = *(marker = p); if (yych <= 0xC1) { @@ -18394,30 +18394,34 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { goto yy1201; } if (yych <= '\f') { - if (yych == '\n') - goto yy1199; + if (yych <= 0x08) + goto yy1179; + if (yych <= '\n') + goto yy1198; goto yy1179; } else { if (yych <= '\r') - goto yy1199; + goto yy1198; if (yych == ' ') - goto yy1197; + goto yy1198; goto yy1179; } yy1181: yych = *(marker = ++p); - if (yybm[0 + yych] & 32) { - goto yy1191; + if (yybm[0 + yych] & 64) { + goto yy1195; } if (yych <= '\f') { - if (yych == '\n') - goto yy1193; + if (yych <= 0x08) + goto yy1179; + if (yych <= '\n') + goto yy1192; goto yy1179; } else { if (yych <= '\r') - goto yy1193; - if (yych == '-') - goto yy1195; + goto yy1192; + if (yych == ' ') + goto yy1192; goto yy1179; } yy1182: @@ -18477,10 +18481,13 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { yy1191: ++p; yych = *p; + yy1192: if (yybm[0 + yych] & 32) { goto yy1191; } - if (yych == '\n') + if (yych <= 0x08) + goto yy1184; + if (yych <= '\n') goto yy1193; if (yych != '\r') goto yy1184; @@ -18494,7 +18501,9 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { goto yy1191; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1184; + if (yych <= '\n') goto yy1193; goto yy1184; } else { @@ -18507,8 +18516,13 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { yy1197: ++p; yych = *p; + yy1198: if (yych <= '\f') { - if (yych != '\n') + if (yych <= 0x08) + goto yy1184; + if (yych <= '\t') + goto yy1197; + if (yych >= '\v') goto yy1184; } else { if (yych <= '\r') @@ -18527,7 +18541,11 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { goto yy1201; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1184; + if (yych <= '\t') + goto yy1197; + if (yych <= '\n') goto yy1199; goto yy1184; } else { diff --git a/src/scanners.re b/src/scanners.re index 7ecf3581dd..77d30cd548 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -263,8 +263,8 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { const unsigned char *marker = NULL; /*!re2c - [=]+ [ ]* [\r\n] { return 1; } - [-]+ [ ]* [\r\n] { return 2; } + [=]+ [ \t]* [\r\n] { return 1; } + [-]+ [ \t]* [\r\n] { return 2; } .? { return 0; } */ } diff --git a/test/regression.txt b/test/regression.txt index 54872da49b..d5a1e5d2f5 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -56,3 +56,13 @@ Issue jgm/CommonMark#430: h2..h6 not recognized as block tags.
                            lorem
                            ```````````````````````````````` +Issue jgm/commonmark.js#109 - tabs after setext header line + + +```````````````````````````````` example +hi +--→ +. +

                            hi

                            +```````````````````````````````` + -- cgit 0.0.5-2-1-g0f52 From a1f271dd365155fcf9f529d139d6efd06bea3dc3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 14 Sep 2016 17:14:42 +0200 Subject: Update spec. --- test/spec.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 7d97e1e18b..02d1c7f6af 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5678,6 +5678,16 @@ single spaces, just as they would be by a browser: ```````````````````````````````` +Not all [Unicode whitespace] (for instance, non-breaking space) is +collapsed, however: + +```````````````````````````````` example +`a  b` +. +

                            a  b

                            +```````````````````````````````` + + Q: Why not just leave the spaces, since browsers will collapse them anyway? A: Because we might be targeting a non-HTML format, and we shouldn't rely on HTML-specific rendering assumptions. @@ -7362,6 +7372,16 @@ may be used in titles: ```````````````````````````````` +Titles must be separated from the link using a [whitespace]. +Other [Unicode whitespace] like non-breaking space doesn't work. + +```````````````````````````````` example +[link](/url "title") +. +

                            link

                            +```````````````````````````````` + + Nested balanced quotes are not allowed without escaping: ```````````````````````````````` example -- cgit 0.0.5-2-1-g0f52 From 733c2ea2818f5a369b74a594447361ed3eec1f21 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Sep 2016 12:38:36 +0200 Subject: Update spec. --- test/spec.txt | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 02d1c7f6af..fb1427a78c 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -8046,7 +8046,8 @@ following closing bracket: ```````````````````````````````` -Full references take precedence over shortcut references: +Full and compact references take precedence over shortcut +references: ```````````````````````````````` example [foo][bar] @@ -8057,6 +8058,31 @@ Full references take precedence over shortcut references:

                            foo

                            ```````````````````````````````` +```````````````````````````````` example +[foo][] + +[foo]: /url1 +. +

                            foo

                            +```````````````````````````````` + +Inline links also take precedence: + +```````````````````````````````` example +[foo]() + +[foo]: /url1 +. +

                            foo

                            +```````````````````````````````` + +```````````````````````````````` example +[foo](not a link) + +[foo]: /url1 +. +

                            foo(not a link)

                            +```````````````````````````````` In the following case `[bar][baz]` is parsed as a reference, `[foo]` as normal text: -- cgit 0.0.5-2-1-g0f52 From 53ef343a65e3da19d605cfb7e8909004cfac954e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 15 Sep 2016 12:38:51 +0200 Subject: Allow a shortcut link before a (. See jgm/CommonMark#427 --- src/inlines.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index e5ca8e253f..586279fb08 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -799,7 +799,7 @@ noMatch: // Return a link, an image, or a literal close bracket. static cmark_node *handle_close_bracket(subject *subj) { - bufsize_t initial_pos; + bufsize_t initial_pos, after_link_text_pos; bufsize_t starturl, endurl, starttitle, endtitle, endall; bufsize_t n; bufsize_t sps; @@ -833,6 +833,8 @@ static cmark_node *handle_close_bracket(subject *subj) { // Now we check to see if it's a link/image. is_image = opener->image; + after_link_text_pos = subj->pos; + // First, look for an inline link. if (peek_char(subj) == '(' && ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && @@ -863,7 +865,8 @@ static cmark_node *handle_close_bracket(subject *subj) { goto match; } else { - goto noMatch; + // it could still be a shortcut reference link + subj->pos = after_link_text_pos; } } -- cgit 0.0.5-2-1-g0f52 From f4e9ba2068880d25034ebeca172e521d34d6b540 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Mon, 26 Sep 2016 15:44:36 +1000 Subject: Use cmark_mem to free where used to alloc --- src/blocks.c | 2 +- src/inlines.c | 4 ++-- src/references.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 8e8c4c2022..bfd64d8134 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -989,7 +989,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, parser->first_nonspace + 1); /* TODO: static */ memcpy(&((*container)->as.list), data, sizeof(*data)); - free(data); + parser->mem->free(data); } else if (indented && !maybe_lazy && !parser->blank) { S_advance_offset(parser, input, CODE_INDENT, true); *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, diff --git a/src/inlines.c b/src/inlines.c index 586279fb08..1c998b35ba 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -353,7 +353,7 @@ static void remove_delimiter(subject *subj, delimiter *delim) { if (delim->previous != NULL) { delim->previous->next = delim->next; } - free(delim); + subj->mem->free(delim); } static void pop_bracket(subject *subj) { @@ -362,7 +362,7 @@ static void pop_bracket(subject *subj) { return; b = subj->last_bracket; subj->last_bracket = subj->last_bracket->previous; - free(b); + subj->mem->free(b); } static void push_delimiter(subject *subj, unsigned char c, bool can_open, diff --git a/src/references.c b/src/references.c index e141213cc6..89f2dc8cb6 100644 --- a/src/references.c +++ b/src/references.c @@ -46,7 +46,7 @@ static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) { assert(result); if (result[0] == '\0') { - free(result); + mem->free(result); return NULL; } @@ -114,7 +114,7 @@ cmark_reference *cmark_reference_lookup(cmark_reference_map *map, ref = ref->next; } - free(norm); + map->mem->free(norm); return ref; } @@ -135,7 +135,7 @@ void cmark_reference_map_free(cmark_reference_map *map) { } } - free(map); + map->mem->free(map); } cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) { -- cgit 0.0.5-2-1-g0f52 From 2bac4575c69ef7aba8da9e2f15af4c95644b3556 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Mon, 26 Sep 2016 16:20:54 +1000 Subject: Fix memory leak in list parsing If `parse_list_marker` returns 1, but the second part of the `&&` clause is false, we leak `data` here. --- src/blocks.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 8e8c4c2022..a5f8eca352 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -933,10 +933,10 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, parser->first_nonspace + 1); S_advance_offset(parser, input, input->len - 1 - parser->offset, false); - } else if ((matched = parse_list_marker( + } else if ((!indented || cont_type == CMARK_NODE_LIST) && + (matched = parse_list_marker( parser->mem, input, parser->first_nonspace, - (*container)->type == CMARK_NODE_PARAGRAPH, &data)) && - (!indented || cont_type == CMARK_NODE_LIST)) { + (*container)->type == CMARK_NODE_PARAGRAPH, &data))) { // Note that we can have new list items starting with >= 4 // spaces indent, as long as the list container is still open. -- cgit 0.0.5-2-1-g0f52 From 268adf3c03fe44b427752ccd0009d8d80612a3ca Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Tue, 27 Sep 2016 13:47:47 +1000 Subject: One more cmark_mem use --- src/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 88a4f322f3..42cd8b1639 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,7 @@ #include "config.h" #include "memory.h" #include "cmark.h" +#include "node.h" #if defined(_WIN32) && !defined(__CYGWIN__) #include @@ -61,7 +62,7 @@ static void print_document(cmark_node *document, writer_format writer, exit(1); } printf("%s", result); - free(result); + cmark_node_mem(document)->free(result); } int main(int argc, char *argv[]) { -- cgit 0.0.5-2-1-g0f52 From 8f80fb336984ccd1f42076c722caec2292092904 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Tue, 11 Oct 2016 01:43:26 +1100 Subject: Add test for NUL-LF sequence --- api_test/main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index d493e006ef..d87e4463d4 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -732,6 +732,13 @@ static void utf8(test_batch_runner *runner) { string_with_null, sizeof(string_with_null) - 1, CMARK_OPT_DEFAULT); STR_EQ(runner, html, "

                            ((((" UTF8_REPL "))))

                            \n", "utf8 with U+0000"); free(html); + + // Test NUL followed by newline + static const char string_with_nul_lf[] = "```\n\0\n```\n"; + html = cmark_markdown_to_html( + string_with_nul_lf, sizeof(string_with_nul_lf) - 1, CMARK_OPT_DEFAULT); + STR_EQ(runner, html, "
                            \xef\xbf\xbd\n
                            \n", "utf8 with \\0\\n"); + free(html); } static void test_char(test_batch_runner *runner, int valid, const char *utf8, -- cgit 0.0.5-2-1-g0f52 From 920cbd071a85ffabefdb706c257b7c49620fc896 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Tue, 11 Oct 2016 01:43:33 +1100 Subject: Fix by not advancing past both \0 and \n --- src/blocks.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 3c21fbf161..a88c168b93 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -563,7 +563,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); // add replacement character cmark_strbuf_put(&parser->linebuf, repl, 3); - chunk_len += 1; // so we advance the buffer past NULL } else { cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); } @@ -576,7 +575,9 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, if (buffer == end) parser->last_buffer_ended_with_cr = true; } - if (buffer < end && *buffer == '\n') + if (buffer < end && *buffer == '\0') + buffer++; + else if (buffer < end && *buffer == '\n') buffer++; } } -- cgit 0.0.5-2-1-g0f52 From 89c8d703d258cef7cbe566eab537fb8f30aad7ed Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 11 Oct 2016 14:40:05 +0200 Subject: Changed logic for null/eol checks. - only check once for "not at end of line" - check for null before we check for newline characters (the previous patch would fail for NULL + CR) See #160. --- src/blocks.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index a88c168b93..4a6b7efddd 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -569,16 +569,21 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, } buffer += chunk_len; - // skip over line ending characters: - if (buffer < end && *buffer == '\r') { - buffer++; - if (buffer == end) - parser->last_buffer_ended_with_cr = true; + if (buffer < end) { + if (*buffer == '\0') { + // skip over NULL + buffer++; + } else { + // skip over line ending characters + if (*buffer == '\r') { + buffer++; + if (buffer == end) + parser->last_buffer_ended_with_cr = true; + } + if (*buffer == '\n') + buffer++; + } } - if (buffer < end && *buffer == '\0') - buffer++; - else if (buffer < end && *buffer == '\n') - buffer++; } } -- cgit 0.0.5-2-1-g0f52 From 85d47d07d676b8bca1d98efee45d25af011a813b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 11 Oct 2016 14:50:58 +0200 Subject: 'make format': don't change order of includes. --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 687fe71bd4..5f07b6fc27 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local CLANG_CHECK?=clang-check +CLANG_FORMAT=clang-format -style llvm -sort-includes=0 -i .PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive bench format update-spec afl clang-check @@ -113,7 +114,7 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re esac re2c --case-insensitive -b -i --no-generation-date -8 \ --encoding-policy substitute -o $@ $< - clang-format -style llvm -i $@ + $(CLANG_FORMAT) $@ # We include entities.inc in the repository, so normally this # doesn't need to be regenerated: @@ -165,7 +166,7 @@ bench: $(BENCHFILE) } 2>&1 | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py' format: - clang-format -style llvm -i src/*.c src/*.h api_test/*.c api_test/*.h + $(CLANG_FORMAT) src/*.c src/*.h api_test/*.c api_test/*.h operf: $(CMARK) operf $< < $(BENCHFILE) > /dev/null -- cgit 0.0.5-2-1-g0f52 From 636d6018ea6bc6697b6491e0e47c4ae1ccad32fe Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 11 Oct 2016 14:51:42 +0200 Subject: Ran 'make format' to reformat code. --- api_test/main.c | 3 ++- src/blocks.c | 6 +++--- src/chunk.h | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index d87e4463d4..17e1582b4b 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -737,7 +737,8 @@ static void utf8(test_batch_runner *runner) { static const char string_with_nul_lf[] = "```\n\0\n```\n"; html = cmark_markdown_to_html( string_with_nul_lf, sizeof(string_with_nul_lf) - 1, CMARK_OPT_DEFAULT); - STR_EQ(runner, html, "
                            \xef\xbf\xbd\n
                            \n", "utf8 with \\0\\n"); + STR_EQ(runner, html, "
                            \xef\xbf\xbd\n
                            \n", + "utf8 with \\0\\n"); free(html); } diff --git a/src/blocks.c b/src/blocks.c index 4a6b7efddd..de47dfb377 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -571,15 +571,15 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, buffer += chunk_len; if (buffer < end) { if (*buffer == '\0') { - // skip over NULL - buffer++; + // skip over NULL + buffer++; } else { // skip over line ending characters if (*buffer == '\r') { buffer++; if (buffer == end) parser->last_buffer_ended_with_cr = true; - } + } if (*buffer == '\n') buffer++; } diff --git a/src/chunk.h b/src/chunk.h index a2248f5945..666484ccd1 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -50,8 +50,8 @@ static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { cmark_chunk_rtrim(c); } -static CMARK_INLINE bufsize_t - cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) { +static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, + bufsize_t offset) { const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); return p ? (bufsize_t)(p - ch->data) : ch->len; @@ -99,8 +99,8 @@ static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { return c; } -static CMARK_INLINE cmark_chunk - cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) { +static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, + bufsize_t pos, bufsize_t len) { cmark_chunk c = {ch->data + pos, len, 0}; return c; } -- cgit 0.0.5-2-1-g0f52 From 14fe768690b3948c7c1f67f463eb4620fc5746c9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 30 Oct 2016 14:46:49 +0100 Subject: Modified print_delimiters (commented out) so it compiles again. --- src/inlines.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 1c998b35ba..508c455b8c 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -330,9 +330,8 @@ static void print_delimiters(subject *subj) delimiter *delim; delim = subj->last_delim; while (delim != NULL) { - printf("Item at stack pos %p, text pos %d: %d %d %d next(%p) -prev(%p)\n", - (void*)delim, delim->position, delim->delim_char, + printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n", + (void*)delim, delim->delim_char, delim->can_open, delim->can_close, (void*)delim->next, (void*)delim->previous); delim = delim->previous; -- cgit 0.0.5-2-1-g0f52 From 64e1394ae76409f02b00c254f119a64a2d1ce11e Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Sat, 5 Nov 2016 09:04:48 +1100 Subject: Fix for non-matching entities (#161) * Add test to illustrate issue * Provide some test fixes * Don't neglect CounterClockwiseContourIntegral * Fix ~10% of cases not matching strncmp returns 0 if the first 'len' bytes of cmark_entities[i].entity match s; we check equal length in the first if by checking if cmark_entities[i].entity[len] == 0, but we neglect the case where cmp == 0 && cmark_entities[i].entity[len] != 0. This should be treated as the same as cmp < 0, because strcmp("abc", "abcd") < 0. * Don't depend on py3.3 in tests --- src/entities.inc | 2 +- src/houdini_html_u.c | 2 +- test/CMakeLists.txt | 4 +++ test/entity_tests.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++ tools/make_entities_inc.py | 2 +- 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 test/entity_tests.py diff --git a/src/entities.inc b/src/entities.inc index ec3d2a9f76..a7c36e26da 100644 --- a/src/entities.inc +++ b/src/entities.inc @@ -6,7 +6,7 @@ struct cmark_entity_node { }; #define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 31 +#define CMARK_ENTITY_MAX_LENGTH 32 #define CMARK_NUM_ENTITIES 2125 static const struct cmark_entity_node cmark_entities[] = { diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 6e8d620c61..30d08aa4a4 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -16,7 +16,7 @@ static const unsigned char *S_lookup(int i, int low, int hi, strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); if (cmp == 0 && cmark_entities[i].entity[len] == 0) { return (const unsigned char *)cmark_entities[i].bytes; - } else if (cmp < 0 && i > low) { + } else if (cmp <= 0 && i > low) { j = i - ((i - low) / 2); if (j == i) j -= 1; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3b23cff4c5..2a597ab1dd 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -60,6 +60,10 @@ IF (PYTHONINTERP_FOUND) "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" ) + add_test(entity_executable + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/entity_tests.py" + "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" + ) ELSE(PYTHONINTERP_FOUND) diff --git a/test/entity_tests.py b/test/entity_tests.py new file mode 100644 index 0000000000..0e3daad09e --- /dev/null +++ b/test/entity_tests.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import re +import os +import argparse +import sys +import platform +import html +from cmark import CMark + +def get_entities(): + regex = r'^{\(unsigned char\*\)"([^"]+)", \{([^}]+)\}' + with open(os.path.join(os.path.dirname(__file__), '..', 'src', 'entities.inc')) as f: + code = f.read() + entities = [] + for entity, utf8 in re.findall(regex, code, re.MULTILINE): + utf8 = bytes(map(int, utf8.split(", ")[:-1])).decode('utf-8') + entities.append((entity, utf8)) + return entities + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Run cmark tests.') + parser.add_argument('--program', dest='program', nargs='?', default=None, + help='program to test') + parser.add_argument('--library-dir', dest='library_dir', nargs='?', + default=None, help='directory containing dynamic library') + args = parser.parse_args(sys.argv[1:]) + +cmark = CMark(prog=args.program, library_dir=args.library_dir) + +entities = get_entities() + +passed = 0 +errored = 0 +failed = 0 + +exceptions = { + 'quot': '"', + 'QUOT': '"', + + # These are broken, but I'm not too worried about them. + 'nvlt': '<⃒', + 'nvgt': '>⃒', +} + +print("Testing entities:") +for entity, utf8 in entities: + [rc, actual, err] = cmark.to_html("&{};".format(entity)) + check = exceptions.get(entity, utf8) + + if rc != 0: + errored += 1 + print(entity, '[ERRORED (return code {})]'.format(rc)) + print(err) + elif check in actual: + print(entity, '[PASSED]') + passed += 1 + else: + print(entity, '[FAILED]') + print(repr(actual)) + failed += 1 + +print("{} passed, {} failed, {} errored".format(passed, failed, errored)) +if failed == 0 and errored == 0: + exit(0) +else: + exit(1) diff --git a/tools/make_entities_inc.py b/tools/make_entities_inc.py index 7ed307be5e..7b8ee4113e 100644 --- a/tools/make_entities_inc.py +++ b/tools/make_entities_inc.py @@ -20,7 +20,7 @@ struct cmark_entity_node { }; #define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 31""") +#define CMARK_ENTITY_MAX_LENGTH 32""") print("#define CMARK_NUM_ENTITIES " + str(len(entities))); -- cgit 0.0.5-2-1-g0f52 From 9f2c3ba89071a1c2614a9b58e6686e397da3dd5d Mon Sep 17 00:00:00 2001 From: Hugh Bellamy Date: Wed, 9 Nov 2016 16:36:19 +0000 Subject: Fix CMAKE_C_VISIBILITY_PRESET for cmake versions greater than 1.8 (e.g. 3.6.2) (#162) This lets us build swift-cmark on Windows, using clang-cl This was an oversight: CMAKE_C_VISIBILITY_PRESET is only available on CMAKE 1.8 or greater. However, the current check doesn't work for a version such as CMAKE 3.6.2, for example ```bash mkdir "C:/Users/hughb/Documents/GitHub/my-swift/build/Ninja-DebugAssert/cmark-windows-amd64" pushd "C:/Users/hughb/Documents/GitHub/my-swift/build/Ninja-DebugAssert/cmark-windows-amd64" cmake -G Ninja -DCMAKE_C_COMPILER="C:/Program Files/LLVM/msbuild-bin/cl.exe" -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/msbuild-bin/cl.exe" -DCMAKE_CXX_FLAGS="-Xclang -std=c++14" "C:/Users/hughb/Documents/GitHub/my-swift/cmark" popd cmake --build "C:/Users/hughb/Documents/GitHub/my-swift/build/Ninja-DebugAssert/cmark-windows-amd64/" -- -j6 all ``` --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ea55800608..d83db5b45d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -81,7 +81,7 @@ set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg") set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") -if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) +if ((${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) OR ${CMAKE_MAJOR_VERSION} GREATER 2) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) elseif(CMAKE_COMPILER_IS_GNUCC OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") -- cgit 0.0.5-2-1-g0f52 From 7fa73faa7672e10e5af5f26016dd62624a3f3818 Mon Sep 17 00:00:00 2001 From: Hugh Bellamy Date: Sun, 13 Nov 2016 14:13:41 +0000 Subject: Fix warnings building with MSVC on Windows (#165) --- src/latex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/latex.c b/src/latex.c index 7c3decda00..e78c7d9161 100644 --- a/src/latex.c +++ b/src/latex.c @@ -180,7 +180,7 @@ static link_type get_link_type(cmark_node *node) { link_text = node->first_child; cmark_consolidate_text_nodes(link_text); realurl = (char *)url; - realurllen = url_len; + realurllen = (int)url_len; if (strncmp(realurl, "mailto:", 7) == 0) { realurl += 7; realurllen -= 7; -- cgit 0.0.5-2-1-g0f52 From 4c6799f53e06bc01ba4fb871749d2282581c7b57 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 18 Nov 2016 21:07:36 +0100 Subject: Update spec. --- test/spec.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index fb1427a78c..c66f93b77f 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.26 -date: '2016-07-15' +version: 0.27 +date: '2016-11-18' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -3637,11 +3637,11 @@ The following rules define [list items]: If the list item is ordered, then it is also assigned a start number, based on the ordered list marker. - Exceptions: When the list item interrupts a paragraph---that - is, when it starts on a line that would otherwise count as - [paragraph continuation text]---then (a) the lines *Ls* must - not begin with a blank line, and (b) if the list item is - ordered, the start number must be 1. + Exceptions: When the first list item in a [list] interrupts + a paragraph---that is, when it starts on a line that would + otherwise count as [paragraph continuation text]---then (a) + the lines *Ls* must not begin with a blank line, and (b) if + the list item is ordered, the start number must be 1. For example, let *Ls* be the lines -- cgit 0.0.5-2-1-g0f52 From c2680054d133626f6a600ab9d7ea3cce8eea9b98 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 18 Nov 2016 21:14:03 +0100 Subject: Update man 3 page. --- man/man3/cmark.3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 82fe6c37cb..eb38812c61 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "September 13, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "November 18, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP -- cgit 0.0.5-2-1-g0f52 From 7825060249488e0dedb05a247610856fabbf2173 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 18 Nov 2016 21:15:44 +0100 Subject: Bump to 0.27.0. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 048d58657c..abb9551290 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,8 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 26) -set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION_MINOR 27) +set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) -- cgit 0.0.5-2-1-g0f52 From cc625a9bbc0be974b1d12dd3d9c202ea47f78f72 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 18 Nov 2016 21:15:50 +0100 Subject: Update changelog. --- changelog.txt | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/changelog.txt b/changelog.txt index 8a8f8569a4..205f218a68 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,32 @@ +[0.27.0] + + * Update spec to 0.27. + * Fix warnings building with MSVC on Windows (#165, Hugh Bellamy). + * Fix `CMAKE_C_VISIBILITY_PRESET` for cmake versions greater than 1.8 + (e.g. 3.6.2) (#162, Hugh Bellamy). This lets us build swift-cmark + on Windows, using clang-cl. + * Fix for non-matching entities (#161, Yuki Izumi). + * Modified `print_delimiters` (commented out) so it compiles again. + * `make format`: don't change order of includes. + * Changed logic for null/eol checks (#160). + + only check once for "not at end of line" + + check for null before we check for newline characters (the + previous patch would fail for NULL + CR) + * Fix by not advancing past both `\0` and `\n` (Yuki Izumi). + * Add test for NUL-LF sequence (Yuki Izumi). + * Fix memory leak in list parsing (Yuki Izumi). + * Use `cmark_mem` to free where used to alloc (Yuki Izumi). + * Allow a shortcut link before a `(` (jgm/CommonMark#427). + * Allow tabs after setext header line (jgm/commonmark.js#109). + * Don't let URI schemes start with spaces. + * Fixed h2..h6 HTML blocks (jgm/CommonMark#430). Added regression test. + * Autolink scheme can contain digits (Gábor Csárdi). + * Fix nullary function declarations in cmark.h (Nick Wellnhofer). + Fixes strict prototypes warnings. + * COPYING: Update file name and remove duplicate section and + (Peter Eisentraut). + * Fix typo (Pavlo Kapyshin). + [0.26.1] * Removed unnecessary typedef that caused build failure on -- cgit 0.0.5-2-1-g0f52 From da380e005356f26090606fd7ea2f85aaa858bd5d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 18 Nov 2016 21:22:34 +0100 Subject: Set policy for CMP0063 to avoid a warning. See #162. --- src/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d83db5b45d..19c0f2844c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,6 @@ cmake_minimum_required(VERSION 2.8) +cmake_policy(SET CMP0063 NEW) + set(LIBRARY "libcmark") set(STATICLIBRARY "libcmark_static") set(HEADERS -- cgit 0.0.5-2-1-g0f52 From 61c3be48c13e231e87d835445dc3b9343d7ab250 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 18 Nov 2016 21:28:59 +0100 Subject: Improve afl target. Use afl-clang by default. Set default for path. --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5f07b6fc27..b5b8bf72b7 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ RELEASE?=CommonMark-$(VERSION) INSTALL_PREFIX?=/usr/local CLANG_CHECK?=clang-check CLANG_FORMAT=clang-format -style llvm -sort-includes=0 -i +AFL_PATH?=/usr/local/bin .PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive bench format update-spec afl clang-check @@ -70,7 +71,7 @@ prof: afl: @[ -n "$(AFL_PATH)" ] || { echo '$$AFL_PATH not set'; false; } mkdir -p $(BUILDDIR) - cd $(BUILDDIR) && cmake .. -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-gcc + cd $(BUILDDIR) && cmake .. -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-clang $(MAKE) $(AFL_PATH)/afl-fuzz \ -i test/afl_test_cases \ -- cgit 0.0.5-2-1-g0f52 From ce2a6a816b4947f1f6a65335360380d997e6e5b0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Nov 2016 09:37:51 +0100 Subject: Put set_policy under cmake version test. Otherwise we get errors in older versions of cmake. --- src/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 19c0f2844c..8d9659eeea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 2.8) -cmake_policy(SET CMP0063 NEW) +if(${CMAKE_VERSION} VERSION_GREATER "3.3") + cmake_policy(SET CMP0063 NEW) +endif() set(LIBRARY "libcmark") set(STATICLIBRARY "libcmark_static") -- cgit 0.0.5-2-1-g0f52 From 436c0103de97c8c1c24361dcf9e253b406eca7fc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Nov 2016 09:38:18 +0100 Subject: Use VERSION_GREATER to clean up cmake version test. --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8d9659eeea..04ceee1820 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -85,7 +85,7 @@ set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg") set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") -if ((${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8) OR ${CMAKE_MAJOR_VERSION} GREATER 2) +if (${CMAKE_VERSION} VERSION_GREATER "1.8") set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) elseif(CMAKE_COMPILER_IS_GNUCC OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") -- cgit 0.0.5-2-1-g0f52 From 4d2f310fe6d27edcee81e54b59f3b381c2a7c43a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 19 Nov 2016 09:44:32 +0100 Subject: Bump version to 0.27.1, update changelog. --- CMakeLists.txt | 2 +- changelog.txt | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index abb9551290..328f74c57e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 27) -set(PROJECT_VERSION_PATCH 0) +set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) diff --git a/changelog.txt b/changelog.txt index 205f218a68..883ef6c200 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,11 @@ +[0.27.1] + + * Set policy for CMP0063 to avoid a warning (#162). + Put set_policy under cmake version test. + Otherwise we get errors in older versions of cmake. + * Use VERSION_GREATER to clean up cmake version test. + * Improve afl target. Use afl-clang by default. Set default for path. + [0.27.0] * Update spec to 0.27. -- cgit 0.0.5-2-1-g0f52 From 838cece40e765929abc5c3f2494608ef7df0db19 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 24 Nov 2016 14:42:19 +0100 Subject: Remove redundant cmake_minimum_required. Closes #163, thanks to @kainjow. --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 04ceee1820..0cb653014f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,3 @@ -cmake_minimum_required(VERSION 2.8) if(${CMAKE_VERSION} VERSION_GREATER "3.3") cmake_policy(SET CMP0063 NEW) endif() -- cgit 0.0.5-2-1-g0f52 From 8ed5c9d6362555d7c57073970701c743b6d870ad Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Nov 2016 16:38:30 +0100 Subject: Fixed pathological cases with backtick code spans: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Removed recursion in scan_to_closing_backticks - Added an array of pointers to potential backtick closers to subject - This array is used to avoid traversing the subject again when we've already seen all the potential backtick closers. - Added a max bound of 1000 for backtick code span delimiters. - This helps with pathological cases like: x x ` x `` x ``` x ```` ... Thanks to Martin Mitáš for identifying the problem and for discussion of solutions. --- src/inlines.c | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 508c455b8c..08d86aebfa 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -30,6 +30,8 @@ static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; #define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH) #define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG) +#define MAXBACKTICKS 1000 + typedef struct delimiter { struct delimiter *previous; struct delimiter *next; @@ -56,6 +58,8 @@ typedef struct { cmark_reference_map *refmap; delimiter *last_delim; bracket *last_bracket; + bufsize_t backticks[MAXBACKTICKS]; + bool scanned_for_backticks; } subject; static CMARK_INLINE bool S_is_line_end_char(char c) { @@ -145,6 +149,7 @@ static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, cmark_reference_map *refmap) { + int i; e->mem = mem; e->input.data = buffer->ptr; e->input.len = buffer->size; @@ -153,6 +158,10 @@ static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, e->refmap = refmap; e->last_delim = NULL; e->last_bracket = NULL; + for (i=0; i <= MAXBACKTICKS; i++) { + e->backticks[i] = 0; + } + e->scanned_for_backticks = false; } static CMARK_INLINE int isbacktick(int c) { return (c == '`'); } @@ -219,23 +228,42 @@ static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) { // after the closing backticks. static bufsize_t scan_to_closing_backticks(subject *subj, bufsize_t openticklength) { - // read non backticks - unsigned char c; - while ((c = peek_char(subj)) && c != '`') { - advance(subj); - } - if (is_eof(subj)) { - return 0; // did not find closing ticks, return 0 + + bool found = false; + if (openticklength > MAXBACKTICKS) { + // we limit backtick string length because of the array subj->backticks: + return 0; } - bufsize_t numticks = 0; - while (peek_char(subj) == '`') { - advance(subj); - numticks++; + if (subj->scanned_for_backticks && + subj->backticks[openticklength] <= subj->pos) { + // return if we already know there's no closer + return 0; } - if (numticks != openticklength) { - return (scan_to_closing_backticks(subj, openticklength)); + while (!found) { + // read non backticks + unsigned char c; + while ((c = peek_char(subj)) && c != '`') { + advance(subj); + } + if (is_eof(subj)) { + break; + } + bufsize_t numticks = 0; + while (peek_char(subj) == '`') { + advance(subj); + numticks++; + } + // store position of ender + if (numticks <= MAXBACKTICKS) { + subj->backticks[numticks] = subj->pos - numticks; + } + if (numticks == openticklength) { + return (subj->pos); + } } - return (subj->pos); + // got through whole input without finding closer + subj->scanned_for_backticks = true; + return 0; } // Parse backtick code section or raw backticks, return an inline. -- cgit 0.0.5-2-1-g0f52 From 2efea7a064e911311979e0387d6d99abe9c6020a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Nov 2016 16:45:05 +0100 Subject: Inlines: Ensure that the delimiter stack is freed in subject. --- src/inlines.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 08d86aebfa..3a5733ff94 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1124,7 +1124,10 @@ extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, ; process_emphasis(&subj, NULL); - // free bracket stack + // free bracket and delim stack + while (subj.last_delim) { + pop_bracket(&subj); + } while (subj.last_bracket) { pop_bracket(&subj); } -- cgit 0.0.5-2-1-g0f52 From 450c43badee13eb84e771ecaf66f0ac113e111c0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Nov 2016 17:18:21 +0100 Subject: Added pathological test for backticks. Currently aborts. --- test/pathological_tests.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index b03330806b..eaf0a7c5fa 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -52,7 +52,10 @@ pathological = { re.compile("(
                            \n){50000}")), "U+0000 in input": ("abc\u0000de\u0000", - re.compile("abc\ufffd?de\ufffd?")) + re.compile("abc\ufffd?de\ufffd?")), + "backticks": + ("".join(map(lambda x: ("e" + "`" * x), range(1,10000))), + re.compile("^

                            [e`]*

                            \n$")) } whitespace_re = re.compile('/s+/') -- cgit 0.0.5-2-1-g0f52 From ea68f8830dcea3c21b91b02bf3bede8789961acd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 26 Nov 2016 17:44:23 +0100 Subject: Allocate enough bytes for backticks array. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 3a5733ff94..f1c863ffa3 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -58,7 +58,7 @@ typedef struct { cmark_reference_map *refmap; delimiter *last_delim; bracket *last_bracket; - bufsize_t backticks[MAXBACKTICKS]; + bufsize_t backticks[MAXBACKTICKS + 1]; bool scanned_for_backticks; } subject; -- cgit 0.0.5-2-1-g0f52 From a9da6782761e4d3ac7dfd3193fa43b73824afef4 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Thu, 1 Dec 2016 20:52:42 +1100 Subject: Allow balanced nested parens in link destinations (#166) --- src/inlines.c | 87 +- src/scanners.c | 5200 +++++++++++++++++-------------------------------------- src/scanners.h | 2 - src/scanners.re | 15 - test/spec.txt | 27 +- 5 files changed, 1630 insertions(+), 3701 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f1c863ffa3..c9cccfe801 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -823,7 +823,44 @@ noMatch: subj->pos = startpos; // rewind return 0; } +static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { + bufsize_t i = offset; + size_t nb_p = 0; + + if (i < input->len && input->data[i] == '<') { + ++i; + while (i < input->len) { + if (input->data[i] == '>') { + ++i; + break; + } else if (input->data[i] == '\\') + i += 2; + else if (cmark_isspace(input->data[i])) + return -1; + else + ++i; + } + } else { + while (i < input->len) { + if (input->data[i] == '\\') + i += 2; + else if (input->data[i] == '(') { + ++nb_p; ++i; + } else if (input->data[i] == ')') { + if (nb_p == 0) + break; + --nb_p; ++i; + } else if (cmark_isspace(input->data[i])) + break; + else + ++i; + } + } + if (i >= input->len) + return -1; + return i - offset; +} // Return a link, an image, or a literal close bracket. static cmark_node *handle_close_bracket(subject *subj) { bufsize_t initial_pos, after_link_text_pos; @@ -865,7 +902,7 @@ static cmark_node *handle_close_bracket(subject *subj) { // First, look for an inline link. if (peek_char(subj) == '(' && ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && - ((n = scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) { + ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) { // try to parse an explicit link: starturl = subj->pos + 1 + sps; // after ( @@ -996,31 +1033,31 @@ static cmark_node *handle_newline(subject *subj) { static bufsize_t subject_find_special_char(subject *subj, int options) { // "\r\n\\`&_*[]pos + 1; @@ -1171,8 +1208,8 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, // parse link url: spnl(&subj); - matchlen = scan_link_url(&subj.input, subj.pos); - if (matchlen) { + matchlen = manual_scan_link_url(&subj.input, subj.pos); + if (matchlen > 0) { url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); subj.pos += matchlen; } else { diff --git a/src/scanners.c b/src/scanners.c index 21a433d51a..e929d21e88 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,7 +1,7 @@ /* Generated by re2c 0.15.3 */ -#include "scanners.h" -#include "chunk.h" #include +#include "chunk.h" +#include "scanners.h" bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset) { @@ -15233,11 +15233,10 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } } -// Try to match a URL in a link or reference, return number of chars matched. -// This may optionally be contained in <..>; otherwise -// whitespace and unbalanced right parentheses aren't allowed. -// Newlines aren't ever allowed. -bufsize_t _scan_link_url(const unsigned char *p) { +// Try to match a link title (in single quotes, in double quotes, or +// in parentheses), returning number of chars matched. Allow one +// level of internal nesting (quotes within quotes). +bufsize_t _scan_link_title(const unsigned char *p) { const unsigned char *marker = NULL; const unsigned char *start = p; @@ -15245,11 +15244,11 @@ bufsize_t _scan_link_url(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 128, 128, 128, 128, 128, 128, 128, 128, 0, 8, 128, 128, 8, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 8, 224, 224, 224, 224, 224, 224, 224, 128, 128, + 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 32, 224, 32, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, @@ -15266,2726 +15265,643 @@ bufsize_t _scan_link_url(const unsigned char *p) { 0, 0, 0, 0, }; yych = *(marker = p); - if (yych <= '[') { - if (yych <= ' ') { - if (yych <= '\f') { - if (yych == '\n') - goto yy952; - goto yy968; - } else { - if (yych <= '\r') - goto yy954; - if (yych <= 0x1F) - goto yy968; - goto yy954; - } + if (yych <= 0xC1) { + if (yych <= '"') { + if (yych == '\n') + goto yy951; + if (yych <= '!') + goto yy955; + goto yy952; } else { - if (yych <= ')') { - if (yych <= '\'') - goto yy956; - if (yych <= '(') - goto yy966; - goto yy968; + if (yych <= '\'') { + if (yych <= '&') + goto yy955; + goto yy953; } else { - if (yych == '<') + if (yych <= '(') + goto yy954; + if (yych <= 0x7F) goto yy955; - goto yy956; } } } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') - goto yy965; - if (yych <= 0x7F) - goto yy956; - } else { - if (yych <= 0xDF) - goto yy957; - if (yych <= 0xE0) - goto yy959; - goto yy960; - } + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy956; + if (yych <= 0xE0) + goto yy958; + if (yych <= 0xEC) + goto yy959; + goto yy963; } else { if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy964; if (yych <= 0xEF) - goto yy960; - goto yy961; + goto yy959; + goto yy960; } else { if (yych <= 0xF3) - goto yy962; + goto yy961; if (yych <= 0xF4) - goto yy963; + goto yy962; } } } - yy951 : { return (bufsize_t)(p - start); } + yy951 : { return 0; } yy952: yyaccept = 0; - marker = ++p; - yych = *p; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy951; + if (yych <= 0x7F) + goto yy995; + if (yych <= 0xC1) + goto yy951; + if (yych <= 0xF4) + goto yy995; + goto yy951; yy953: - if (yybm[0 + yych] & 8) { - goto yy952; - } - if (yych <= 0x7F) { - if (yych <= ')') { - if (yych <= 0x1F) - goto yy951; - if (yych <= '\'') - goto yy980; - if (yych <= '(') - goto yy971; - goto yy951; - } else { - if (yych <= '<') { - if (yych <= ';') - goto yy980; - goto yy1016; - } else { - if (yych == '\\') - goto yy982; - goto yy980; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych <= 0xC1) - goto yy951; - goto yy983; - } else { - if (yych <= 0xE0) - goto yy984; - if (yych <= 0xEC) - goto yy985; - goto yy989; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy985; - goto yy986; - } else { - if (yych <= 0xF3) - goto yy987; - if (yych <= 0xF4) - goto yy988; - goto yy951; - } - } - } - yy954: yyaccept = 0; yych = *(marker = ++p); - goto yy953; - yy955: + if (yych <= 0x00) + goto yy951; + if (yych <= 0x7F) + goto yy981; + if (yych <= 0xC1) + goto yy951; + if (yych <= 0xF4) + goto yy981; + goto yy951; + yy954: yyaccept = 0; yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy1016; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) - goto yy951; - goto yy1029; - } else { - if (yych <= '\n') - goto yy951; - if (yych <= '\f') - goto yy1029; - goto yy951; - } - } else { - if (yych <= '(') { - if (yych <= 0x1F) - goto yy1029; - if (yych <= ' ') - goto yy951; - goto yy1027; - } else { - if (yych <= ')') - goto yy1029; - if (yych <= '<') - goto yy980; - goto yy1018; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') - goto yy1015; - goto yy951; - } else { - if (yych <= 0xDF) - goto yy1020; - if (yych <= 0xE0) - goto yy1021; - goto yy1022; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1026; - if (yych <= 0xEF) - goto yy1022; - goto yy1023; - } else { - if (yych <= 0xF3) - goto yy1024; - if (yych <= 0xF4) - goto yy1025; - goto yy951; - } - } - } + if (yych <= 0x00) + goto yy951; + if (yych <= 0x7F) + goto yy967; + if (yych <= 0xC1) + goto yy951; + if (yych <= 0xF4) + goto yy967; + goto yy951; + yy955: + yych = *++p; + goto yy951; yy956: - yyaccept = 0; - yych = *(marker = ++p); - goto yy981; - yy957: yych = *++p; if (yych <= 0x7F) - goto yy958; + goto yy957; if (yych <= 0xBF) - goto yy956; - yy958: + goto yy955; + yy957: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { goto yy951; } else { - goto yy967; + goto yy976; } } else { - goto yy1019; + if (yyaccept == 2) { + goto yy990; + } else { + goto yy1004; + } } - yy959: + yy958: yych = *++p; if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) goto yy957; - goto yy958; - yy960: + if (yych <= 0xBF) + goto yy956; + goto yy957; + yy959: yych = *++p; if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) goto yy957; - goto yy958; - yy961: + if (yych <= 0xBF) + goto yy956; + goto yy957; + yy960: yych = *++p; if (yych <= 0x8F) - goto yy958; + goto yy957; if (yych <= 0xBF) - goto yy960; - goto yy958; - yy962: + goto yy959; + goto yy957; + yy961: yych = *++p; if (yych <= 0x7F) - goto yy958; + goto yy957; if (yych <= 0xBF) - goto yy960; - goto yy958; - yy963: + goto yy959; + goto yy957; + yy962: yych = *++p; if (yych <= 0x7F) - goto yy958; + goto yy957; if (yych <= 0x8F) - goto yy960; - goto yy958; - yy964: + goto yy959; + goto yy957; + yy963: yych = *++p; if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) goto yy957; - goto yy958; - yy965: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0xDF) { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy980; - if (yych <= '\r') - goto yy951; - goto yy980; - } else { - if (yych <= ' ') - goto yy951; - if (yych <= 0x7F) - goto yy980; - if (yych <= 0xC1) - goto yy951; - goto yy990; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy991; - if (yych == 0xED) - goto yy996; - goto yy992; - } else { - if (yych <= 0xF0) - goto yy993; - if (yych <= 0xF3) - goto yy994; - if (yych <= 0xF4) - goto yy995; - goto yy951; - } - } - yy966: - yyaccept = 1; - yych = *(marker = ++p); - if (yych <= '(') { - if (yych <= ' ') - goto yy967; - if (yych <= '\'') - goto yy972; - } else { - if (yych <= 0x7F) - goto yy972; - if (yych <= 0xC1) - goto yy967; - if (yych <= 0xF4) - goto yy972; - } - yy967 : { return 0; } - yy968: - yych = *++p; - goto yy967; - yy969: + if (yych <= 0x9F) + goto yy956; + goto yy957; + yy964: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy969; + if (yybm[0 + yych] & 32) { + goto yy966; } if (yych <= 0xE0) { - if (yych <= ')') { - if (yych <= ' ') - goto yy958; - if (yych >= ')') - goto yy997; + if (yych <= '\\') { + if (yych <= 0x00) + goto yy957; + if (yych <= ')') + goto yy977; + goto yy964; } else { - if (yych <= 0x7F) - goto yy971; if (yych <= 0xC1) - goto yy958; + goto yy957; if (yych <= 0xDF) - goto yy973; - goto yy974; + goto yy968; + goto yy969; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy979; - goto yy975; + goto yy974; + goto yy970; } else { if (yych <= 0xF0) - goto yy976; + goto yy971; if (yych <= 0xF3) - goto yy977; + goto yy972; if (yych <= 0xF4) - goto yy978; - goto yy958; + goto yy973; + goto yy957; } } - yy971: + yy966: ++p; yych = *p; - yy972: + yy967: if (yybm[0 + yych] & 32) { - goto yy971; + goto yy966; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= '(') - goto yy958; + if (yych <= 0x00) + goto yy957; if (yych <= ')') - goto yy980; - goto yy969; + goto yy975; + goto yy964; } else { if (yych <= 0xC1) - goto yy958; + goto yy957; if (yych >= 0xE0) - goto yy974; + goto yy969; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy979; - goto yy975; + goto yy974; + goto yy970; } else { if (yych <= 0xF0) - goto yy976; + goto yy971; if (yych <= 0xF3) - goto yy977; - if (yych <= 0xF4) - goto yy978; - goto yy958; - } - } - yy973: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy971; - goto yy958; - yy974: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy973; - goto yy958; - yy975: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy973; - goto yy958; - yy976: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy975; - goto yy958; - yy977: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy975; - goto yy958; - yy978: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy975; - goto yy958; - yy979: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy973; - goto yy958; - yy980: - yyaccept = 0; - marker = ++p; - yych = *p; - yy981: - if (yych <= 0xC1) { - if (yych <= ')') { - if (yych <= ' ') - goto yy951; - if (yych <= '\'') - goto yy980; - if (yych <= '(') - goto yy971; - goto yy951; - } else { - if (yych == '\\') - goto yy982; - if (yych <= 0x7F) - goto yy980; - goto yy951; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy983; - if (yych <= 0xE0) - goto yy984; - if (yych <= 0xEC) - goto yy985; - goto yy989; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy985; - goto yy986; - } else { - if (yych <= 0xF3) - goto yy987; - if (yych <= 0xF4) - goto yy988; - goto yy951; - } - } - } - yy982: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= 0xDF) { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy980; - if (yych <= '\r') - goto yy951; - goto yy980; - } else { - if (yych <= ' ') - goto yy951; - if (yych <= 0x7F) - goto yy980; - if (yych <= 0xC1) - goto yy951; - goto yy990; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy991; - if (yych == 0xED) - goto yy996; - goto yy992; - } else { - if (yych <= 0xF0) - goto yy993; - if (yych <= 0xF3) - goto yy994; - if (yych <= 0xF4) - goto yy995; - goto yy951; - } - } - yy983: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy980; - goto yy958; - yy984: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy983; - goto yy958; - yy985: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy983; - goto yy958; - yy986: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy985; - goto yy958; - yy987: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy985; - goto yy958; - yy988: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy985; - goto yy958; - yy989: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy983; - goto yy958; - yy990: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy980; - goto yy958; - yy991: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy990; - goto yy958; - yy992: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy990; - goto yy958; - yy993: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy992; - goto yy958; - yy994: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy992; - goto yy958; - yy995: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy992; - goto yy958; - yy996: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy990; - goto yy958; - yy997: - yyaccept = 0; - marker = ++p; - yych = *p; - yy998: - if (yych <= 0xC1) { - if (yych <= ')') { - if (yych <= ' ') - goto yy951; - if (yych <= '\'') - goto yy997; - if (yych <= '(') - goto yy971; - goto yy980; - } else { - if (yych == '\\') - goto yy999; - if (yych <= 0x7F) - goto yy997; - goto yy951; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1000; - if (yych <= 0xE0) - goto yy1001; - if (yych <= 0xEC) - goto yy1002; - goto yy1006; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1002; - goto yy1003; - } else { - if (yych <= 0xF3) - goto yy1004; - if (yych <= 0xF4) - goto yy1005; - goto yy951; - } - } - } - yy999: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= 0xC1) { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy980; - if (yych <= '\r') - goto yy951; - if (yych <= 0x1F) - goto yy980; - goto yy951; - } else { - if (yych == '\\') - goto yy1007; - if (yych <= 0x7F) - goto yy997; - goto yy951; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1008; - if (yych <= 0xE0) - goto yy1009; - if (yych <= 0xEC) - goto yy1010; - goto yy1014; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1010; - goto yy1011; - } else { - if (yych <= 0xF3) - goto yy1012; - if (yych <= 0xF4) - goto yy1013; - goto yy951; - } - } - } - yy1000: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy997; - goto yy958; - yy1001: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1000; - goto yy958; - yy1002: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1000; - goto yy958; - yy1003: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1002; - goto yy958; - yy1004: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1002; - goto yy958; - yy1005: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1002; - goto yy958; - yy1006: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1000; - goto yy958; - yy1007: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= 0xDF) { - if (yych <= '[') { - if (yych <= ' ') - goto yy951; - if (yych == '(') - goto yy971; - goto yy997; - } else { - if (yych <= '\\') - goto yy999; - if (yych <= 0x7F) - goto yy997; - if (yych <= 0xC1) - goto yy951; - goto yy1000; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy1001; - if (yych == 0xED) - goto yy1006; - goto yy1002; - } else { - if (yych <= 0xF0) - goto yy1003; - if (yych <= 0xF3) - goto yy1004; - if (yych <= 0xF4) - goto yy1005; - goto yy951; - } - } - yy1008: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy997; - goto yy958; - yy1009: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1008; - goto yy958; - yy1010: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1008; - goto yy958; - yy1011: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1010; - goto yy958; - yy1012: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1010; - goto yy958; - yy1013: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1010; - goto yy958; - yy1014: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1008; - goto yy958; - yy1015: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '\\') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) - goto yy980; - } else { - if (yych <= '\n') - goto yy951; - if (yych <= '\f') - goto yy1029; - goto yy951; - } - } else { - if (yych <= '=') { - if (yych == ' ') - goto yy951; - } else { - if (yych <= '>') - goto yy1073; - if (yych >= '\\') - goto yy1074; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych >= 0x80) - goto yy951; - } else { - if (yych <= 0xDF) - goto yy1075; - if (yych <= 0xE0) - goto yy1076; - goto yy1077; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1081; - if (yych <= 0xEF) - goto yy1077; - goto yy1078; - } else { - if (yych <= 0xF3) - goto yy1079; - if (yych <= 0xF4) - goto yy1080; - goto yy951; - } - } - } - yy1016: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1016; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) - goto yy951; - goto yy1029; - } else { - if (yych <= '\n') - goto yy951; - if (yych <= '\f') - goto yy1029; - goto yy951; - } - } else { - if (yych <= '(') { - if (yych <= 0x1F) - goto yy1029; - if (yych <= ' ') - goto yy951; - goto yy1027; - } else { - if (yych <= ')') - goto yy1029; - if (yych <= '<') - goto yy980; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') - goto yy1015; - goto yy951; - } else { - if (yych <= 0xDF) - goto yy1020; - if (yych <= 0xE0) - goto yy1021; - goto yy1022; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1026; - if (yych <= 0xEF) - goto yy1022; - goto yy1023; - } else { - if (yych <= 0xF3) - goto yy1024; - if (yych <= 0xF4) - goto yy1025; - goto yy951; - } - } - } - yy1018: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ')') { - if (yych <= ' ') - goto yy1019; - if (yych <= '(') - goto yy981; - } else { - if (yych <= 0x7F) - goto yy981; - if (yych <= 0xC1) - goto yy1019; - if (yych <= 0xF4) - goto yy981; - } - yy1019 : { return (bufsize_t)(p - start); } - yy1020: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1016; - goto yy958; - yy1021: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1020; - goto yy958; - yy1022: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1020; - goto yy958; - yy1023: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1022; - goto yy958; - yy1024: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1022; - goto yy958; - yy1025: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1022; - goto yy958; - yy1026: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1020; - goto yy958; - yy1027: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy958; - if (yych >= '\t') - goto yy958; - } else { - if (yych == '\r') - goto yy958; - } - } else { - if (yych <= '(') { - if (yych <= ' ') - goto yy958; - if (yych <= '\'') - goto yy1027; - } else { - if (yych <= ')') - goto yy1016; - if (yych == '<') - goto yy971; - goto yy1027; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '>') - goto yy1042; - if (yych <= '[') - goto yy1027; - goto yy1043; - } else { - if (yych <= 0x7F) - goto yy1027; - if (yych <= 0xC1) - goto yy958; - if (yych <= 0xDF) - goto yy1045; - goto yy1046; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1051; - goto yy1047; - } else { - if (yych <= 0xF0) - goto yy1048; - if (yych <= 0xF3) - goto yy1049; - if (yych <= 0xF4) - goto yy1050; - goto yy958; - } - } - } - yy1029: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy1029; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '<') - goto yy958; - if (yych >= '?') - goto yy1032; - } else { - if (yych <= 0xC1) - goto yy958; - if (yych <= 0xDF) - goto yy1034; - goto yy1035; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1040; - goto yy1036; - } else { - if (yych <= 0xF0) - goto yy1037; - if (yych <= 0xF3) - goto yy1038; - if (yych <= 0xF4) - goto yy1039; - goto yy958; - } - } - yy1031: - yych = *++p; - goto yy1019; - yy1032: - ++p; - yych = *p; - if (yych <= '\\') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) - goto yy958; - goto yy1029; - } else { - if (yych <= '\n') - goto yy958; - if (yych <= '\f') - goto yy1029; - goto yy958; - } - } else { - if (yych <= '=') { - if (yych == ' ') - goto yy958; - goto yy1029; - } else { - if (yych <= '>') - goto yy1041; - if (yych <= '[') - goto yy1029; - goto yy1032; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy1029; - goto yy958; - } else { - if (yych <= 0xDF) - goto yy1034; - if (yych <= 0xE0) - goto yy1035; - goto yy1036; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1040; - if (yych <= 0xEF) - goto yy1036; - goto yy1037; - } else { - if (yych <= 0xF3) - goto yy1038; - if (yych <= 0xF4) - goto yy1039; - goto yy958; - } - } - } - yy1034: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1029; - goto yy958; - yy1035: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1034; - goto yy958; - yy1036: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1034; - goto yy958; - yy1037: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1036; - goto yy958; - yy1038: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1036; - goto yy958; - yy1039: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1036; - goto yy958; - yy1040: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1034; - goto yy958; - yy1041: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy1029; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '<') - goto yy1019; - if (yych <= '>') - goto yy1031; - goto yy1032; - } else { - if (yych <= 0xC1) - goto yy1019; - if (yych <= 0xDF) - goto yy1034; - goto yy1035; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1040; - goto yy1036; - } else { - if (yych <= 0xF0) - goto yy1037; - if (yych <= 0xF3) - goto yy1038; - if (yych <= 0xF4) - goto yy1039; - goto yy1019; - } - } - yy1042: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= '(') { - if (yych <= ' ') - goto yy1019; - if (yych <= '\'') - goto yy972; - goto yy1019; - } else { - if (yych <= 0x7F) - goto yy972; - if (yych <= 0xC1) - goto yy1019; - if (yych <= 0xF4) - goto yy972; - goto yy1019; - } - yy1043: - ++p; - yych = *p; - if (yych <= '[') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy958; - if (yych <= 0x08) - goto yy1029; - goto yy958; - } else { - if (yych == '\r') - goto yy958; - goto yy1029; - } - } else { - if (yych <= ')') { - if (yych <= ' ') - goto yy958; - if (yych <= '(') - goto yy1027; - goto yy1052; - } else { - if (yych == '>') - goto yy1054; - goto yy1027; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') - goto yy1043; - if (yych <= 0x7F) - goto yy1027; - goto yy958; - } else { - if (yych <= 0xDF) - goto yy1045; - if (yych <= 0xE0) - goto yy1046; - goto yy1047; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1051; - if (yych <= 0xEF) - goto yy1047; - goto yy1048; - } else { - if (yych <= 0xF3) - goto yy1049; - if (yych <= 0xF4) - goto yy1050; - goto yy958; - } - } - } - yy1045: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1027; - goto yy958; - yy1046: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1045; - goto yy958; - yy1047: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1045; - goto yy958; - yy1048: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1047; - goto yy958; - yy1049: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1047; - goto yy958; - yy1050: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1047; - goto yy958; - yy1051: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1045; - goto yy958; - yy1052: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '=') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy951; - if (yych <= 0x08) - goto yy1029; - goto yy951; - } else { - if (yych == '\r') - goto yy951; - goto yy1029; - } - } else { - if (yych <= '(') { - if (yych <= ' ') - goto yy951; - if (yych <= '\'') - goto yy1052; - goto yy1027; - } else { - if (yych <= ')') - goto yy1016; - if (yych == '<') - goto yy997; - goto yy1052; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '>') - goto yy1055; - if (yych <= '[') - goto yy1052; - goto yy1056; - } else { - if (yych <= 0x7F) - goto yy1052; - if (yych <= 0xC1) - goto yy951; - if (yych <= 0xDF) - goto yy1057; - goto yy1058; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1063; - goto yy1059; - } else { - if (yych <= 0xF0) - goto yy1060; - if (yych <= 0xF3) - goto yy1061; - if (yych <= 0xF4) - goto yy1062; - goto yy951; - } - } - } - yy1054: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yych <= '=') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy1019; - if (yych <= 0x08) - goto yy1029; - goto yy1019; - } else { - if (yych == '\r') - goto yy1019; - goto yy1029; - } - } else { - if (yych <= '(') { - if (yych <= ' ') - goto yy1019; - if (yych <= '\'') - goto yy1027; - goto yy1029; - } else { - if (yych <= ')') - goto yy1016; - if (yych == '<') - goto yy971; - goto yy1027; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '>') - goto yy1042; - if (yych <= '[') - goto yy1027; - goto yy1043; - } else { - if (yych <= 0x7F) - goto yy1027; - if (yych <= 0xC1) - goto yy1019; - if (yych <= 0xDF) - goto yy1045; - goto yy1046; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1051; - goto yy1047; - } else { - if (yych <= 0xF0) - goto yy1048; - if (yych <= 0xF3) - goto yy1049; - if (yych <= 0xF4) - goto yy1050; - goto yy1019; - } - } - } - yy1055: - yyaccept = 2; - yych = *(marker = ++p); - if (yych <= ' ') - goto yy1019; - if (yych <= 0x7F) - goto yy998; - if (yych <= 0xC1) - goto yy1019; - if (yych <= 0xF4) - goto yy998; - goto yy1019; - yy1056: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '\\') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) - goto yy980; - goto yy1016; - } else { - if (yych <= '\n') - goto yy951; - if (yych <= '\f') - goto yy1029; - goto yy951; - } - } else { - if (yych <= '=') { - if (yych <= 0x1F) - goto yy1016; - if (yych <= ' ') - goto yy951; - goto yy1052; - } else { - if (yych <= '>') - goto yy1064; - if (yych <= '[') - goto yy1052; - goto yy1065; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy1052; - goto yy951; - } else { - if (yych <= 0xDF) - goto yy1066; - if (yych <= 0xE0) - goto yy1067; - goto yy1068; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1072; - if (yych <= 0xEF) - goto yy1068; - goto yy1069; - } else { - if (yych <= 0xF3) - goto yy1070; - if (yych <= 0xF4) - goto yy1071; - goto yy951; - } - } - } - yy1057: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1052; - goto yy958; - yy1058: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1057; - goto yy958; - yy1059: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1057; - goto yy958; - yy1060: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1059; - goto yy958; - yy1061: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1059; - goto yy958; - yy1062: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1059; - goto yy958; - yy1063: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1057; - goto yy958; - yy1064: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yych <= '=') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy1019; - if (yych <= 0x08) - goto yy1029; - goto yy1019; - } else { - if (yych == '\r') - goto yy1019; - goto yy1029; - } - } else { - if (yych <= '(') { - if (yych <= ' ') - goto yy1019; - if (yych <= '\'') - goto yy1052; - goto yy1027; - } else { - if (yych <= ')') - goto yy1016; - if (yych == '<') - goto yy997; - goto yy1052; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '>') - goto yy1055; - if (yych <= '[') - goto yy1052; - goto yy1056; - } else { - if (yych <= 0x7F) - goto yy1052; - if (yych <= 0xC1) - goto yy1019; - if (yych <= 0xDF) - goto yy1057; - goto yy1058; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1063; - goto yy1059; - } else { - if (yych <= 0xF0) - goto yy1060; - if (yych <= 0xF3) - goto yy1061; - if (yych <= 0xF4) - goto yy1062; - goto yy1019; - } - } - } - yy1065: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '[') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy951; - if (yych <= 0x08) - goto yy1029; - goto yy951; - } else { - if (yych == '\r') - goto yy951; - goto yy1029; - } - } else { - if (yych <= '(') { - if (yych <= ' ') - goto yy951; - if (yych <= '\'') - goto yy1052; - goto yy1027; - } else { - if (yych == '>') - goto yy1064; - goto yy1052; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') - goto yy1056; - if (yych <= 0x7F) - goto yy1052; - goto yy951; - } else { - if (yych <= 0xDF) - goto yy1057; - if (yych <= 0xE0) - goto yy1058; - goto yy1059; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1063; - if (yych <= 0xEF) - goto yy1059; - goto yy1060; - } else { - if (yych <= 0xF3) - goto yy1061; - if (yych <= 0xF4) - goto yy1062; - goto yy951; - } - } - } - yy1066: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1052; - goto yy958; - yy1067: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1066; - goto yy958; - yy1068: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1066; - goto yy958; - yy1069: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1068; - goto yy958; - yy1070: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1068; - goto yy958; - yy1071: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1068; - goto yy958; - yy1072: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1066; - goto yy958; - yy1073: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1016; - } - if (yych <= '>') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) - goto yy1019; - goto yy1029; - } else { - if (yych <= '\n') - goto yy1019; - if (yych <= '\f') - goto yy1029; - goto yy1019; - } - } else { - if (yych <= '(') { - if (yych <= 0x1F) - goto yy1029; - if (yych <= ' ') - goto yy1019; - goto yy1027; - } else { - if (yych <= ')') - goto yy1029; - if (yych <= '<') - goto yy980; - goto yy1018; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\\') - goto yy1015; - goto yy1019; - } else { - if (yych <= 0xDF) - goto yy1020; - if (yych <= 0xE0) - goto yy1021; - goto yy1022; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy1026; - if (yych <= 0xEF) - goto yy1022; - goto yy1023; - } else { - if (yych <= 0xF3) - goto yy1024; - if (yych <= 0xF4) - goto yy1025; - goto yy1019; - } - } - } - yy1074: - yyaccept = 0; - marker = ++p; - yych = *p; - if (yych <= '>') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy951; - if (yych <= 0x08) - goto yy1029; - goto yy951; - } else { - if (yych == '\r') - goto yy951; - goto yy1029; - } - } else { - if (yych <= '(') { - if (yych <= ' ') - goto yy951; - if (yych <= '\'') - goto yy1016; - goto yy1027; - } else { - if (yych <= ')') - goto yy1029; - if (yych <= '=') - goto yy1016; - goto yy1073; - } - } - } else { - if (yych <= 0xE0) { - if (yych <= 0x7F) { - if (yych == '\\') - goto yy1015; - goto yy1016; - } else { - if (yych <= 0xC1) - goto yy951; - if (yych <= 0xDF) - goto yy1020; - goto yy1021; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1026; - goto yy1022; - } else { - if (yych <= 0xF0) - goto yy1023; - if (yych <= 0xF3) - goto yy1024; - if (yych <= 0xF4) - goto yy1025; - goto yy951; - } - } - } - yy1075: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1016; - goto yy958; - yy1076: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy958; - if (yych <= 0xBF) - goto yy1075; - goto yy958; - yy1077: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1075; - goto yy958; - yy1078: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy958; - if (yych <= 0xBF) - goto yy1077; - goto yy958; - yy1079: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0xBF) - goto yy1077; - goto yy958; - yy1080: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x8F) - goto yy1077; - goto yy958; - yy1081: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy958; - if (yych <= 0x9F) - goto yy1075; - goto yy958; - } -} - -// Try to match a link title (in single quotes, in double quotes, or -// in parentheses), returning number of chars matched. Allow one -// level of internal nesting (quotes within quotes). -bufsize_t _scan_link_title(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { - if (yych <= '"') { - if (yych == '\n') - goto yy1084; - if (yych <= '!') - goto yy1088; - goto yy1085; - } else { - if (yych <= '\'') { - if (yych <= '&') - goto yy1088; - goto yy1086; - } else { - if (yych <= '(') - goto yy1087; - if (yych <= 0x7F) - goto yy1088; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1089; - if (yych <= 0xE0) - goto yy1091; - if (yych <= 0xEC) - goto yy1092; - goto yy1096; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1092; - goto yy1093; - } else { - if (yych <= 0xF3) - goto yy1094; - if (yych <= 0xF4) - goto yy1095; - } - } - } - yy1084 : { return 0; } - yy1085: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy1084; - if (yych <= 0x7F) - goto yy1128; - if (yych <= 0xC1) - goto yy1084; - if (yych <= 0xF4) - goto yy1128; - goto yy1084; - yy1086: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy1084; - if (yych <= 0x7F) - goto yy1114; - if (yych <= 0xC1) - goto yy1084; - if (yych <= 0xF4) - goto yy1114; - goto yy1084; - yy1087: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy1084; - if (yych <= 0x7F) - goto yy1100; - if (yych <= 0xC1) - goto yy1084; - if (yych <= 0xF4) - goto yy1100; - goto yy1084; - yy1088: - yych = *++p; - goto yy1084; - yy1089: - yych = *++p; - if (yych <= 0x7F) - goto yy1090; - if (yych <= 0xBF) - goto yy1088; - yy1090: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy1084; - } else { - goto yy1109; - } - } else { - if (yyaccept == 2) { - goto yy1123; - } else { - goto yy1137; - } - } - yy1091: - yych = *++p; - if (yych <= 0x9F) - goto yy1090; - if (yych <= 0xBF) - goto yy1089; - goto yy1090; - yy1092: - yych = *++p; - if (yych <= 0x7F) - goto yy1090; - if (yych <= 0xBF) - goto yy1089; - goto yy1090; - yy1093: - yych = *++p; - if (yych <= 0x8F) - goto yy1090; - if (yych <= 0xBF) - goto yy1092; - goto yy1090; - yy1094: - yych = *++p; - if (yych <= 0x7F) - goto yy1090; - if (yych <= 0xBF) - goto yy1092; - goto yy1090; - yy1095: - yych = *++p; - if (yych <= 0x7F) - goto yy1090; - if (yych <= 0x8F) - goto yy1092; - goto yy1090; - yy1096: - yych = *++p; - if (yych <= 0x7F) - goto yy1090; - if (yych <= 0x9F) - goto yy1089; - goto yy1090; - yy1097: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1099; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy1090; - if (yych <= ')') - goto yy1110; - goto yy1097; - } else { - if (yych <= 0xC1) - goto yy1090; - if (yych <= 0xDF) - goto yy1101; - goto yy1102; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1107; - goto yy1103; - } else { - if (yych <= 0xF0) - goto yy1104; - if (yych <= 0xF3) - goto yy1105; - if (yych <= 0xF4) - goto yy1106; - goto yy1090; - } - } - yy1099: - ++p; - yych = *p; - yy1100: - if (yybm[0 + yych] & 32) { - goto yy1099; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy1090; - if (yych <= ')') - goto yy1108; - goto yy1097; - } else { - if (yych <= 0xC1) - goto yy1090; - if (yych >= 0xE0) - goto yy1102; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1107; - goto yy1103; - } else { - if (yych <= 0xF0) - goto yy1104; - if (yych <= 0xF3) - goto yy1105; + goto yy972; if (yych <= 0xF4) - goto yy1106; - goto yy1090; + goto yy973; + goto yy957; } } - yy1101: + yy968: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1099; - goto yy1090; - yy1102: + goto yy966; + goto yy957; + yy969: ++p; yych = *p; if (yych <= 0x9F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1101; - goto yy1090; - yy1103: + goto yy968; + goto yy957; + yy970: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1101; - goto yy1090; - yy1104: + goto yy968; + goto yy957; + yy971: ++p; yych = *p; if (yych <= 0x8F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1103; - goto yy1090; - yy1105: + goto yy970; + goto yy957; + yy972: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1103; - goto yy1090; - yy1106: + goto yy970; + goto yy957; + yy973: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0x8F) - goto yy1103; - goto yy1090; - yy1107: + goto yy970; + goto yy957; + yy974: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0x9F) - goto yy1101; - goto yy1090; - yy1108: + goto yy968; + goto yy957; + yy975: ++p; - yy1109 : { return (bufsize_t)(p - start); } - yy1110: + yy976 : { return (bufsize_t)(p - start); } + yy977: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1099; + goto yy966; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1109; + goto yy976; if (yych <= ')') - goto yy1108; - goto yy1097; + goto yy975; + goto yy964; } else { if (yych <= 0xC1) - goto yy1109; + goto yy976; if (yych <= 0xDF) - goto yy1101; - goto yy1102; + goto yy968; + goto yy969; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1107; - goto yy1103; + goto yy974; + goto yy970; } else { if (yych <= 0xF0) - goto yy1104; + goto yy971; if (yych <= 0xF3) - goto yy1105; + goto yy972; if (yych <= 0xF4) - goto yy1106; - goto yy1109; + goto yy973; + goto yy976; } } - yy1111: + yy978: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1113; + goto yy980; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1090; + goto yy957; if (yych <= '\'') - goto yy1124; - goto yy1111; + goto yy991; + goto yy978; } else { if (yych <= 0xC1) - goto yy1090; + goto yy957; if (yych <= 0xDF) - goto yy1115; - goto yy1116; + goto yy982; + goto yy983; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1121; - goto yy1117; + goto yy988; + goto yy984; } else { if (yych <= 0xF0) - goto yy1118; + goto yy985; if (yych <= 0xF3) - goto yy1119; + goto yy986; if (yych <= 0xF4) - goto yy1120; - goto yy1090; + goto yy987; + goto yy957; } } - yy1113: + yy980: ++p; yych = *p; - yy1114: + yy981: if (yybm[0 + yych] & 64) { - goto yy1113; + goto yy980; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1090; + goto yy957; if (yych <= '\'') - goto yy1122; - goto yy1111; + goto yy989; + goto yy978; } else { if (yych <= 0xC1) - goto yy1090; + goto yy957; if (yych >= 0xE0) - goto yy1116; + goto yy983; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1121; - goto yy1117; + goto yy988; + goto yy984; } else { if (yych <= 0xF0) - goto yy1118; + goto yy985; if (yych <= 0xF3) - goto yy1119; + goto yy986; if (yych <= 0xF4) - goto yy1120; - goto yy1090; + goto yy987; + goto yy957; } } - yy1115: + yy982: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1113; - goto yy1090; - yy1116: + goto yy980; + goto yy957; + yy983: ++p; yych = *p; if (yych <= 0x9F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1115; - goto yy1090; - yy1117: + goto yy982; + goto yy957; + yy984: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1115; - goto yy1090; - yy1118: + goto yy982; + goto yy957; + yy985: ++p; yych = *p; if (yych <= 0x8F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1117; - goto yy1090; - yy1119: + goto yy984; + goto yy957; + yy986: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1117; - goto yy1090; - yy1120: + goto yy984; + goto yy957; + yy987: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0x8F) - goto yy1117; - goto yy1090; - yy1121: + goto yy984; + goto yy957; + yy988: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0x9F) - goto yy1115; - goto yy1090; - yy1122: + goto yy982; + goto yy957; + yy989: ++p; - yy1123 : { return (bufsize_t)(p - start); } - yy1124: + yy990 : { return (bufsize_t)(p - start); } + yy991: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1113; + goto yy980; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1123; + goto yy990; if (yych <= '\'') - goto yy1122; - goto yy1111; + goto yy989; + goto yy978; } else { if (yych <= 0xC1) - goto yy1123; + goto yy990; if (yych <= 0xDF) - goto yy1115; - goto yy1116; + goto yy982; + goto yy983; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1121; - goto yy1117; + goto yy988; + goto yy984; } else { if (yych <= 0xF0) - goto yy1118; + goto yy985; if (yych <= 0xF3) - goto yy1119; + goto yy986; if (yych <= 0xF4) - goto yy1120; - goto yy1123; + goto yy987; + goto yy990; } } - yy1125: + yy992: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1127; + goto yy994; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1090; + goto yy957; if (yych <= '"') - goto yy1138; - goto yy1125; + goto yy1005; + goto yy992; } else { if (yych <= 0xC1) - goto yy1090; + goto yy957; if (yych <= 0xDF) - goto yy1129; - goto yy1130; + goto yy996; + goto yy997; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1135; - goto yy1131; + goto yy1002; + goto yy998; } else { if (yych <= 0xF0) - goto yy1132; + goto yy999; if (yych <= 0xF3) - goto yy1133; + goto yy1000; if (yych <= 0xF4) - goto yy1134; - goto yy1090; + goto yy1001; + goto yy957; } } - yy1127: + yy994: ++p; yych = *p; - yy1128: + yy995: if (yybm[0 + yych] & 128) { - goto yy1127; + goto yy994; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1090; + goto yy957; if (yych <= '"') - goto yy1136; - goto yy1125; + goto yy1003; + goto yy992; } else { if (yych <= 0xC1) - goto yy1090; + goto yy957; if (yych >= 0xE0) - goto yy1130; + goto yy997; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1135; - goto yy1131; + goto yy1002; + goto yy998; } else { if (yych <= 0xF0) - goto yy1132; + goto yy999; if (yych <= 0xF3) - goto yy1133; + goto yy1000; if (yych <= 0xF4) - goto yy1134; - goto yy1090; + goto yy1001; + goto yy957; } } - yy1129: + yy996: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1127; - goto yy1090; - yy1130: + goto yy994; + goto yy957; + yy997: ++p; yych = *p; if (yych <= 0x9F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1129; - goto yy1090; - yy1131: + goto yy996; + goto yy957; + yy998: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1129; - goto yy1090; - yy1132: + goto yy996; + goto yy957; + yy999: ++p; yych = *p; if (yych <= 0x8F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1131; - goto yy1090; - yy1133: + goto yy998; + goto yy957; + yy1000: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0xBF) - goto yy1131; - goto yy1090; - yy1134: + goto yy998; + goto yy957; + yy1001: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0x8F) - goto yy1131; - goto yy1090; - yy1135: + goto yy998; + goto yy957; + yy1002: ++p; yych = *p; if (yych <= 0x7F) - goto yy1090; + goto yy957; if (yych <= 0x9F) - goto yy1129; - goto yy1090; - yy1136: + goto yy996; + goto yy957; + yy1003: ++p; - yy1137 : { return (bufsize_t)(p - start); } - yy1138: + yy1004 : { return (bufsize_t)(p - start); } + yy1005: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1127; + goto yy994; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1137; + goto yy1004; if (yych <= '"') - goto yy1136; - goto yy1125; + goto yy1003; + goto yy992; } else { if (yych <= 0xC1) - goto yy1137; + goto yy1004; if (yych <= 0xDF) - goto yy1129; - goto yy1130; + goto yy996; + goto yy997; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1135; - goto yy1131; + goto yy1002; + goto yy998; } else { if (yych <= 0xF0) - goto yy1132; + goto yy999; if (yych <= 0xF3) - goto yy1133; + goto yy1000; if (yych <= 0xF4) - goto yy1134; - goto yy1137; + goto yy1001; + goto yy1004; } } } @@ -18017,104 +15933,104 @@ bufsize_t _scan_spacechars(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '\r') { if (yych <= 0x08) - goto yy1145; + goto yy1012; if (yych == '\n') - goto yy1143; - goto yy1142; + goto yy1010; + goto yy1009; } else { if (yych == ' ') - goto yy1142; + goto yy1009; if (yych <= 0x7F) - goto yy1145; + goto yy1012; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1147; + goto yy1014; if (yych <= 0xE0) - goto yy1149; + goto yy1016; if (yych <= 0xEC) - goto yy1150; - goto yy1154; + goto yy1017; + goto yy1021; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1150; - goto yy1151; + goto yy1017; + goto yy1018; } else { if (yych <= 0xF3) - goto yy1152; + goto yy1019; if (yych <= 0xF4) - goto yy1153; + goto yy1020; } } } - yy1141 : { return (bufsize_t)(p - start); } - yy1142: + yy1008 : { return (bufsize_t)(p - start); } + yy1009: yych = *++p; - goto yy1144; - yy1143: + goto yy1011; + yy1010: ++p; yych = *p; - yy1144: + yy1011: if (yybm[0 + yych] & 128) { - goto yy1143; + goto yy1010; } - goto yy1141; - yy1145: + goto yy1008; + yy1012: ++p; { return 0; } - yy1147: + yy1014: yych = *++p; if (yych <= 0x7F) - goto yy1148; + goto yy1015; if (yych <= 0xBF) - goto yy1145; - yy1148: + goto yy1012; + yy1015: p = marker; - goto yy1141; - yy1149: + goto yy1008; + yy1016: yych = *++p; if (yych <= 0x9F) - goto yy1148; + goto yy1015; if (yych <= 0xBF) - goto yy1147; - goto yy1148; - yy1150: + goto yy1014; + goto yy1015; + yy1017: yych = *++p; if (yych <= 0x7F) - goto yy1148; + goto yy1015; if (yych <= 0xBF) - goto yy1147; - goto yy1148; - yy1151: + goto yy1014; + goto yy1015; + yy1018: yych = *++p; if (yych <= 0x8F) - goto yy1148; + goto yy1015; if (yych <= 0xBF) - goto yy1150; - goto yy1148; - yy1152: + goto yy1017; + goto yy1015; + yy1019: yych = *++p; if (yych <= 0x7F) - goto yy1148; + goto yy1015; if (yych <= 0xBF) - goto yy1150; - goto yy1148; - yy1153: + goto yy1017; + goto yy1015; + yy1020: yych = *++p; if (yych <= 0x7F) - goto yy1148; + goto yy1015; if (yych <= 0x8F) - goto yy1150; - goto yy1148; - yy1154: + goto yy1017; + goto yy1015; + yy1021: ++p; if ((yych = *p) <= 0x7F) - goto yy1148; + goto yy1015; if (yych <= 0x9F) - goto yy1147; - goto yy1148; + goto yy1014; + goto yy1015; } } @@ -18143,190 +16059,190 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '"') { if (yych != '\n') - goto yy1159; + goto yy1026; } else { if (yych <= '#') - goto yy1158; + goto yy1025; if (yych <= 0x7F) - goto yy1159; + goto yy1026; if (yych >= 0xC2) - goto yy1160; + goto yy1027; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1162; + goto yy1029; if (yych == 0xED) - goto yy1167; - goto yy1163; + goto yy1034; + goto yy1030; } else { if (yych <= 0xF0) - goto yy1164; + goto yy1031; if (yych <= 0xF3) - goto yy1165; + goto yy1032; if (yych <= 0xF4) - goto yy1166; + goto yy1033; } } - yy1157 : { return 0; } - yy1158: + yy1024 : { return 0; } + yy1025: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy1170; + goto yy1037; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1157; + goto yy1024; if (yych <= '\n') - goto yy1168; - goto yy1157; + goto yy1035; + goto yy1024; } else { if (yych <= '\r') - goto yy1168; + goto yy1035; if (yych == '#') - goto yy1172; - goto yy1157; + goto yy1039; + goto yy1024; } - yy1159: + yy1026: yych = *++p; - goto yy1157; - yy1160: + goto yy1024; + yy1027: yych = *++p; if (yych <= 0x7F) - goto yy1161; + goto yy1028; if (yych <= 0xBF) - goto yy1159; - yy1161: + goto yy1026; + yy1028: p = marker; - goto yy1157; - yy1162: + goto yy1024; + yy1029: yych = *++p; if (yych <= 0x9F) - goto yy1161; + goto yy1028; if (yych <= 0xBF) - goto yy1160; - goto yy1161; - yy1163: + goto yy1027; + goto yy1028; + yy1030: yych = *++p; if (yych <= 0x7F) - goto yy1161; + goto yy1028; if (yych <= 0xBF) - goto yy1160; - goto yy1161; - yy1164: + goto yy1027; + goto yy1028; + yy1031: yych = *++p; if (yych <= 0x8F) - goto yy1161; + goto yy1028; if (yych <= 0xBF) - goto yy1163; - goto yy1161; - yy1165: + goto yy1030; + goto yy1028; + yy1032: yych = *++p; if (yych <= 0x7F) - goto yy1161; + goto yy1028; if (yych <= 0xBF) - goto yy1163; - goto yy1161; - yy1166: + goto yy1030; + goto yy1028; + yy1033: yych = *++p; if (yych <= 0x7F) - goto yy1161; + goto yy1028; if (yych <= 0x8F) - goto yy1163; - goto yy1161; - yy1167: + goto yy1030; + goto yy1028; + yy1034: yych = *++p; if (yych <= 0x7F) - goto yy1161; + goto yy1028; if (yych <= 0x9F) - goto yy1160; - goto yy1161; - yy1168: + goto yy1027; + goto yy1028; + yy1035: ++p; - yy1169 : { return (bufsize_t)(p - start); } - yy1170: + yy1036 : { return (bufsize_t)(p - start); } + yy1037: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1170; + goto yy1037; } - goto yy1169; - yy1172: + goto yy1036; + yy1039: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1170; + goto yy1037; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1161; + goto yy1028; if (yych <= '\n') - goto yy1168; - goto yy1161; + goto yy1035; + goto yy1028; } else { if (yych <= '\r') - goto yy1168; + goto yy1035; if (yych != '#') - goto yy1161; + goto yy1028; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1170; + goto yy1037; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1161; + goto yy1028; if (yych <= '\n') - goto yy1168; - goto yy1161; + goto yy1035; + goto yy1028; } else { if (yych <= '\r') - goto yy1168; + goto yy1035; if (yych != '#') - goto yy1161; + goto yy1028; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1170; + goto yy1037; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1161; + goto yy1028; if (yych <= '\n') - goto yy1168; - goto yy1161; + goto yy1035; + goto yy1028; } else { if (yych <= '\r') - goto yy1168; + goto yy1035; if (yych != '#') - goto yy1161; + goto yy1028; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1170; + goto yy1037; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1161; + goto yy1028; if (yych <= '\n') - goto yy1168; - goto yy1161; + goto yy1035; + goto yy1028; } else { if (yych <= '\r') - goto yy1168; + goto yy1035; if (yych != '#') - goto yy1161; + goto yy1028; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy1170; + goto yy1037; } if (yych <= 0x08) - goto yy1161; + goto yy1028; if (yych <= '\n') - goto yy1168; + goto yy1035; if (yych == '\r') - goto yy1168; - goto yy1161; + goto yy1035; + goto yy1028; } } @@ -18355,205 +16271,205 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '-') { if (yych == '\n') - goto yy1179; + goto yy1046; if (yych <= ',') - goto yy1182; - goto yy1181; + goto yy1049; + goto yy1048; } else { if (yych == '=') - goto yy1180; + goto yy1047; if (yych <= 0x7F) - goto yy1182; + goto yy1049; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1183; + goto yy1050; if (yych <= 0xE0) - goto yy1185; + goto yy1052; if (yych <= 0xEC) - goto yy1186; - goto yy1190; + goto yy1053; + goto yy1057; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1186; - goto yy1187; + goto yy1053; + goto yy1054; } else { if (yych <= 0xF3) - goto yy1188; + goto yy1055; if (yych <= 0xF4) - goto yy1189; + goto yy1056; } } } - yy1179 : { return 0; } - yy1180: + yy1046 : { return 0; } + yy1047: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy1201; + goto yy1068; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1179; + goto yy1046; if (yych <= '\n') - goto yy1198; - goto yy1179; + goto yy1065; + goto yy1046; } else { if (yych <= '\r') - goto yy1198; + goto yy1065; if (yych == ' ') - goto yy1198; - goto yy1179; + goto yy1065; + goto yy1046; } - yy1181: + yy1048: yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1195; + goto yy1062; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1179; + goto yy1046; if (yych <= '\n') - goto yy1192; - goto yy1179; + goto yy1059; + goto yy1046; } else { if (yych <= '\r') - goto yy1192; + goto yy1059; if (yych == ' ') - goto yy1192; - goto yy1179; + goto yy1059; + goto yy1046; } - yy1182: + yy1049: yych = *++p; - goto yy1179; - yy1183: + goto yy1046; + yy1050: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1051; if (yych <= 0xBF) - goto yy1182; - yy1184: + goto yy1049; + yy1051: p = marker; - goto yy1179; - yy1185: + goto yy1046; + yy1052: yych = *++p; if (yych <= 0x9F) - goto yy1184; + goto yy1051; if (yych <= 0xBF) - goto yy1183; - goto yy1184; - yy1186: + goto yy1050; + goto yy1051; + yy1053: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1051; if (yych <= 0xBF) - goto yy1183; - goto yy1184; - yy1187: + goto yy1050; + goto yy1051; + yy1054: yych = *++p; if (yych <= 0x8F) - goto yy1184; + goto yy1051; if (yych <= 0xBF) - goto yy1186; - goto yy1184; - yy1188: + goto yy1053; + goto yy1051; + yy1055: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1051; if (yych <= 0xBF) - goto yy1186; - goto yy1184; - yy1189: + goto yy1053; + goto yy1051; + yy1056: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1051; if (yych <= 0x8F) - goto yy1186; - goto yy1184; - yy1190: + goto yy1053; + goto yy1051; + yy1057: yych = *++p; if (yych <= 0x7F) - goto yy1184; + goto yy1051; if (yych <= 0x9F) - goto yy1183; - goto yy1184; - yy1191: + goto yy1050; + goto yy1051; + yy1058: ++p; yych = *p; - yy1192: + yy1059: if (yybm[0 + yych] & 32) { - goto yy1191; + goto yy1058; } if (yych <= 0x08) - goto yy1184; + goto yy1051; if (yych <= '\n') - goto yy1193; + goto yy1060; if (yych != '\r') - goto yy1184; - yy1193: + goto yy1051; + yy1060: ++p; { return 2; } - yy1195: + yy1062: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1191; + goto yy1058; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1184; + goto yy1051; if (yych <= '\n') - goto yy1193; - goto yy1184; + goto yy1060; + goto yy1051; } else { if (yych <= '\r') - goto yy1193; + goto yy1060; if (yych == '-') - goto yy1195; - goto yy1184; + goto yy1062; + goto yy1051; } - yy1197: + yy1064: ++p; yych = *p; - yy1198: + yy1065: if (yych <= '\f') { if (yych <= 0x08) - goto yy1184; + goto yy1051; if (yych <= '\t') - goto yy1197; + goto yy1064; if (yych >= '\v') - goto yy1184; + goto yy1051; } else { if (yych <= '\r') - goto yy1199; + goto yy1066; if (yych == ' ') - goto yy1197; - goto yy1184; + goto yy1064; + goto yy1051; } - yy1199: + yy1066: ++p; { return 1; } - yy1201: + yy1068: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1201; + goto yy1068; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1184; + goto yy1051; if (yych <= '\t') - goto yy1197; + goto yy1064; if (yych <= '\n') - goto yy1199; - goto yy1184; + goto yy1066; + goto yy1051; } else { if (yych <= '\r') - goto yy1199; + goto yy1066; if (yych == ' ') - goto yy1197; - goto yy1184; + goto yy1064; + goto yy1051; } } } @@ -18586,331 +16502,331 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { if (yych <= 0x7F) { if (yych <= '*') { if (yych == '\n') - goto yy1205; + goto yy1072; if (yych <= ')') - goto yy1209; - goto yy1206; + goto yy1076; + goto yy1073; } else { if (yych <= '-') { if (yych <= ',') - goto yy1209; - goto yy1208; + goto yy1076; + goto yy1075; } else { if (yych == '_') - goto yy1207; - goto yy1209; + goto yy1074; + goto yy1076; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) { if (yych >= 0xC2) - goto yy1210; + goto yy1077; } else { if (yych <= 0xE0) - goto yy1212; + goto yy1079; if (yych <= 0xEC) - goto yy1213; - goto yy1217; + goto yy1080; + goto yy1084; } } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1213; - goto yy1214; + goto yy1080; + goto yy1081; } else { if (yych <= 0xF3) - goto yy1215; + goto yy1082; if (yych <= 0xF4) - goto yy1216; + goto yy1083; } } } - yy1205 : { return 0; } - yy1206: + yy1072 : { return 0; } + yy1073: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1238; - goto yy1205; + goto yy1105; + goto yy1072; } else { if (yych <= ' ') - goto yy1238; + goto yy1105; if (yych == '*') - goto yy1240; - goto yy1205; + goto yy1107; + goto yy1072; } - yy1207: + yy1074: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1228; - goto yy1205; + goto yy1095; + goto yy1072; } else { if (yych <= ' ') - goto yy1228; + goto yy1095; if (yych == '_') - goto yy1230; - goto yy1205; + goto yy1097; + goto yy1072; } - yy1208: + yy1075: yych = *(marker = ++p); if (yybm[0 + yych] & 16) { - goto yy1218; + goto yy1085; } if (yych == '-') - goto yy1220; - goto yy1205; - yy1209: + goto yy1087; + goto yy1072; + yy1076: yych = *++p; - goto yy1205; - yy1210: + goto yy1072; + yy1077: yych = *++p; if (yych <= 0x7F) - goto yy1211; + goto yy1078; if (yych <= 0xBF) - goto yy1209; - yy1211: + goto yy1076; + yy1078: p = marker; - goto yy1205; - yy1212: + goto yy1072; + yy1079: yych = *++p; if (yych <= 0x9F) - goto yy1211; + goto yy1078; if (yych <= 0xBF) - goto yy1210; - goto yy1211; - yy1213: + goto yy1077; + goto yy1078; + yy1080: yych = *++p; if (yych <= 0x7F) - goto yy1211; + goto yy1078; if (yych <= 0xBF) - goto yy1210; - goto yy1211; - yy1214: + goto yy1077; + goto yy1078; + yy1081: yych = *++p; if (yych <= 0x8F) - goto yy1211; + goto yy1078; if (yych <= 0xBF) - goto yy1213; - goto yy1211; - yy1215: + goto yy1080; + goto yy1078; + yy1082: yych = *++p; if (yych <= 0x7F) - goto yy1211; + goto yy1078; if (yych <= 0xBF) - goto yy1213; - goto yy1211; - yy1216: + goto yy1080; + goto yy1078; + yy1083: yych = *++p; if (yych <= 0x7F) - goto yy1211; + goto yy1078; if (yych <= 0x8F) - goto yy1213; - goto yy1211; - yy1217: + goto yy1080; + goto yy1078; + yy1084: yych = *++p; if (yych <= 0x7F) - goto yy1211; + goto yy1078; if (yych <= 0x9F) - goto yy1210; - goto yy1211; - yy1218: + goto yy1077; + goto yy1078; + yy1085: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1218; + goto yy1085; } if (yych != '-') - goto yy1211; - yy1220: + goto yy1078; + yy1087: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1220; - goto yy1211; + goto yy1087; + goto yy1078; } else { if (yych <= ' ') - goto yy1220; + goto yy1087; if (yych != '-') - goto yy1211; + goto yy1078; } - yy1222: + yy1089: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) - goto yy1211; - goto yy1222; + goto yy1078; + goto yy1089; } else { if (yych <= '\n') - goto yy1224; + goto yy1091; if (yych <= '\f') - goto yy1211; + goto yy1078; } } else { if (yych <= ' ') { if (yych <= 0x1F) - goto yy1211; - goto yy1222; + goto yy1078; + goto yy1089; } else { if (yych == '-') - goto yy1226; - goto yy1211; + goto yy1093; + goto yy1078; } } - yy1224: + yy1091: ++p; { return (bufsize_t)(p - start); } - yy1226: + yy1093: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1226; + goto yy1093; } if (yych <= 0x08) - goto yy1211; + goto yy1078; if (yych <= '\n') - goto yy1224; + goto yy1091; if (yych == '\r') - goto yy1224; - goto yy1211; - yy1228: + goto yy1091; + goto yy1078; + yy1095: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1228; - goto yy1211; + goto yy1095; + goto yy1078; } else { if (yych <= ' ') - goto yy1228; + goto yy1095; if (yych != '_') - goto yy1211; + goto yy1078; } - yy1230: + yy1097: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1230; - goto yy1211; + goto yy1097; + goto yy1078; } else { if (yych <= ' ') - goto yy1230; + goto yy1097; if (yych != '_') - goto yy1211; + goto yy1078; } - yy1232: + yy1099: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) - goto yy1211; - goto yy1232; + goto yy1078; + goto yy1099; } else { if (yych <= '\n') - goto yy1234; + goto yy1101; if (yych <= '\f') - goto yy1211; + goto yy1078; } } else { if (yych <= ' ') { if (yych <= 0x1F) - goto yy1211; - goto yy1232; + goto yy1078; + goto yy1099; } else { if (yych == '_') - goto yy1236; - goto yy1211; + goto yy1103; + goto yy1078; } } - yy1234: + yy1101: ++p; { return (bufsize_t)(p - start); } - yy1236: + yy1103: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1236; + goto yy1103; } if (yych <= 0x08) - goto yy1211; + goto yy1078; if (yych <= '\n') - goto yy1234; + goto yy1101; if (yych == '\r') - goto yy1234; - goto yy1211; - yy1238: + goto yy1101; + goto yy1078; + yy1105: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1238; - goto yy1211; + goto yy1105; + goto yy1078; } else { if (yych <= ' ') - goto yy1238; + goto yy1105; if (yych != '*') - goto yy1211; + goto yy1078; } - yy1240: + yy1107: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1240; - goto yy1211; + goto yy1107; + goto yy1078; } else { if (yych <= ' ') - goto yy1240; + goto yy1107; if (yych != '*') - goto yy1211; + goto yy1078; } - yy1242: + yy1109: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) - goto yy1211; - goto yy1242; + goto yy1078; + goto yy1109; } else { if (yych <= '\n') - goto yy1244; + goto yy1111; if (yych <= '\f') - goto yy1211; + goto yy1078; } } else { if (yych <= ' ') { if (yych <= 0x1F) - goto yy1211; - goto yy1242; + goto yy1078; + goto yy1109; } else { if (yych == '*') - goto yy1246; - goto yy1211; + goto yy1113; + goto yy1078; } } - yy1244: + yy1111: ++p; { return (bufsize_t)(p - start); } - yy1246: + yy1113: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1246; + goto yy1113; } if (yych <= 0x08) - goto yy1211; + goto yy1078; if (yych <= '\n') - goto yy1244; + goto yy1111; if (yych == '\r') - goto yy1244; - goto yy1211; + goto yy1111; + goto yy1078; } } @@ -18946,374 +16862,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1250; + goto yy1117; if (yych <= '_') - goto yy1253; - goto yy1251; + goto yy1120; + goto yy1118; } else { if (yych == '~') - goto yy1252; + goto yy1119; if (yych <= 0x7F) - goto yy1253; + goto yy1120; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1254; + goto yy1121; if (yych <= 0xE0) - goto yy1256; + goto yy1123; if (yych <= 0xEC) - goto yy1257; - goto yy1261; + goto yy1124; + goto yy1128; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1257; - goto yy1258; + goto yy1124; + goto yy1125; } else { if (yych <= 0xF3) - goto yy1259; + goto yy1126; if (yych <= 0xF4) - goto yy1260; + goto yy1127; } } } - yy1250 : { return 0; } - yy1251: + yy1117 : { return 0; } + yy1118: yych = *(marker = ++p); if (yych == '`') - goto yy1276; - goto yy1250; - yy1252: + goto yy1143; + goto yy1117; + yy1119: yych = *(marker = ++p); if (yych == '~') - goto yy1262; - goto yy1250; - yy1253: + goto yy1129; + goto yy1117; + yy1120: yych = *++p; - goto yy1250; - yy1254: + goto yy1117; + yy1121: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1253; - yy1255: + goto yy1120; + yy1122: p = marker; - goto yy1250; - yy1256: + goto yy1117; + yy1123: yych = *++p; if (yych <= 0x9F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1254; - goto yy1255; - yy1257: + goto yy1121; + goto yy1122; + yy1124: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1254; - goto yy1255; - yy1258: + goto yy1121; + goto yy1122; + yy1125: yych = *++p; if (yych <= 0x8F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1257; - goto yy1255; - yy1259: + goto yy1124; + goto yy1122; + yy1126: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1257; - goto yy1255; - yy1260: + goto yy1124; + goto yy1122; + yy1127: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0x8F) - goto yy1257; - goto yy1255; - yy1261: + goto yy1124; + goto yy1122; + yy1128: yych = *++p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0x9F) - goto yy1254; - goto yy1255; - yy1262: + goto yy1121; + goto yy1122; + yy1129: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1263; + goto yy1130; } - goto yy1255; - yy1263: + goto yy1122; + yy1130: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 32) { - goto yy1265; + goto yy1132; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1255; + goto yy1122; if (yych <= '\r') - goto yy1274; - goto yy1263; + goto yy1141; + goto yy1130; } else { if (yych <= 0xC1) - goto yy1255; + goto yy1122; if (yych <= 0xDF) - goto yy1267; - goto yy1268; + goto yy1134; + goto yy1135; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1273; - goto yy1269; + goto yy1140; + goto yy1136; } else { if (yych <= 0xF0) - goto yy1270; + goto yy1137; if (yych <= 0xF3) - goto yy1271; + goto yy1138; if (yych <= 0xF4) - goto yy1272; - goto yy1255; + goto yy1139; + goto yy1122; } } - yy1265: + yy1132: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1265; + goto yy1132; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1255; + goto yy1122; if (yych <= '\r') - goto yy1274; - goto yy1255; + goto yy1141; + goto yy1122; } else { if (yych <= 0xDF) - goto yy1267; + goto yy1134; if (yych <= 0xE0) - goto yy1268; - goto yy1269; + goto yy1135; + goto yy1136; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1273; + goto yy1140; if (yych <= 0xEF) - goto yy1269; - goto yy1270; + goto yy1136; + goto yy1137; } else { if (yych <= 0xF3) - goto yy1271; + goto yy1138; if (yych <= 0xF4) - goto yy1272; - goto yy1255; + goto yy1139; + goto yy1122; } } - yy1267: + yy1134: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1265; - goto yy1255; - yy1268: + goto yy1132; + goto yy1122; + yy1135: ++p; yych = *p; if (yych <= 0x9F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1267; - goto yy1255; - yy1269: + goto yy1134; + goto yy1122; + yy1136: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1267; - goto yy1255; - yy1270: + goto yy1134; + goto yy1122; + yy1137: ++p; yych = *p; if (yych <= 0x8F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1269; - goto yy1255; - yy1271: + goto yy1136; + goto yy1122; + yy1138: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1269; - goto yy1255; - yy1272: + goto yy1136; + goto yy1122; + yy1139: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0x8F) - goto yy1269; - goto yy1255; - yy1273: + goto yy1136; + goto yy1122; + yy1140: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0x9F) - goto yy1267; - goto yy1255; - yy1274: + goto yy1134; + goto yy1122; + yy1141: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1276: + yy1143: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy1277; + goto yy1144; } - goto yy1255; - yy1277: + goto yy1122; + yy1144: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy1279; + goto yy1146; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy1255; + goto yy1122; if (yych <= '\r') - goto yy1288; - goto yy1277; + goto yy1155; + goto yy1144; } else { if (yych <= 0xC1) - goto yy1255; + goto yy1122; if (yych <= 0xDF) - goto yy1281; - goto yy1282; + goto yy1148; + goto yy1149; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1287; - goto yy1283; + goto yy1154; + goto yy1150; } else { if (yych <= 0xF0) - goto yy1284; + goto yy1151; if (yych <= 0xF3) - goto yy1285; + goto yy1152; if (yych <= 0xF4) - goto yy1286; - goto yy1255; + goto yy1153; + goto yy1122; } } - yy1279: + yy1146: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1279; + goto yy1146; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1255; + goto yy1122; if (yych <= '\r') - goto yy1288; - goto yy1255; + goto yy1155; + goto yy1122; } else { if (yych <= 0xDF) - goto yy1281; + goto yy1148; if (yych <= 0xE0) - goto yy1282; - goto yy1283; + goto yy1149; + goto yy1150; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1287; + goto yy1154; if (yych <= 0xEF) - goto yy1283; - goto yy1284; + goto yy1150; + goto yy1151; } else { if (yych <= 0xF3) - goto yy1285; + goto yy1152; if (yych <= 0xF4) - goto yy1286; - goto yy1255; + goto yy1153; + goto yy1122; } } - yy1281: + yy1148: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1279; - goto yy1255; - yy1282: + goto yy1146; + goto yy1122; + yy1149: ++p; yych = *p; if (yych <= 0x9F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1281; - goto yy1255; - yy1283: + goto yy1148; + goto yy1122; + yy1150: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1281; - goto yy1255; - yy1284: + goto yy1148; + goto yy1122; + yy1151: ++p; yych = *p; if (yych <= 0x8F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1283; - goto yy1255; - yy1285: + goto yy1150; + goto yy1122; + yy1152: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0xBF) - goto yy1283; - goto yy1255; - yy1286: + goto yy1150; + goto yy1122; + yy1153: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0x8F) - goto yy1283; - goto yy1255; - yy1287: + goto yy1150; + goto yy1122; + yy1154: ++p; yych = *p; if (yych <= 0x7F) - goto yy1255; + goto yy1122; if (yych <= 0x9F) - goto yy1281; - goto yy1255; - yy1288: + goto yy1148; + goto yy1122; + yy1155: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19345,190 +17261,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1292; + goto yy1159; if (yych <= '_') - goto yy1295; - goto yy1293; + goto yy1162; + goto yy1160; } else { if (yych == '~') - goto yy1294; + goto yy1161; if (yych <= 0x7F) - goto yy1295; + goto yy1162; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1296; + goto yy1163; if (yych <= 0xE0) - goto yy1298; + goto yy1165; if (yych <= 0xEC) - goto yy1299; - goto yy1303; + goto yy1166; + goto yy1170; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1299; - goto yy1300; + goto yy1166; + goto yy1167; } else { if (yych <= 0xF3) - goto yy1301; + goto yy1168; if (yych <= 0xF4) - goto yy1302; + goto yy1169; } } } - yy1292 : { return 0; } - yy1293: + yy1159 : { return 0; } + yy1160: yych = *(marker = ++p); if (yych == '`') - goto yy1311; - goto yy1292; - yy1294: + goto yy1178; + goto yy1159; + yy1161: yych = *(marker = ++p); if (yych == '~') - goto yy1304; - goto yy1292; - yy1295: + goto yy1171; + goto yy1159; + yy1162: yych = *++p; - goto yy1292; - yy1296: + goto yy1159; + yy1163: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1164; if (yych <= 0xBF) - goto yy1295; - yy1297: + goto yy1162; + yy1164: p = marker; - goto yy1292; - yy1298: + goto yy1159; + yy1165: yych = *++p; if (yych <= 0x9F) - goto yy1297; + goto yy1164; if (yych <= 0xBF) - goto yy1296; - goto yy1297; - yy1299: + goto yy1163; + goto yy1164; + yy1166: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1164; if (yych <= 0xBF) - goto yy1296; - goto yy1297; - yy1300: + goto yy1163; + goto yy1164; + yy1167: yych = *++p; if (yych <= 0x8F) - goto yy1297; + goto yy1164; if (yych <= 0xBF) - goto yy1299; - goto yy1297; - yy1301: + goto yy1166; + goto yy1164; + yy1168: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1164; if (yych <= 0xBF) - goto yy1299; - goto yy1297; - yy1302: + goto yy1166; + goto yy1164; + yy1169: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1164; if (yych <= 0x8F) - goto yy1299; - goto yy1297; - yy1303: + goto yy1166; + goto yy1164; + yy1170: yych = *++p; if (yych <= 0x7F) - goto yy1297; + goto yy1164; if (yych <= 0x9F) - goto yy1296; - goto yy1297; - yy1304: + goto yy1163; + goto yy1164; + yy1171: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1305; + goto yy1172; } - goto yy1297; - yy1305: + goto yy1164; + yy1172: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy1307; + goto yy1174; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1297; + goto yy1164; if (yych <= '\n') - goto yy1309; - goto yy1297; + goto yy1176; + goto yy1164; } else { if (yych <= '\r') - goto yy1309; + goto yy1176; if (yych == '~') - goto yy1305; - goto yy1297; + goto yy1172; + goto yy1164; } - yy1307: + yy1174: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1307; + goto yy1174; } if (yych <= 0x08) - goto yy1297; + goto yy1164; if (yych <= '\n') - goto yy1309; + goto yy1176; if (yych != '\r') - goto yy1297; - yy1309: + goto yy1164; + yy1176: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1311: + yy1178: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1312; + goto yy1179; } - goto yy1297; - yy1312: + goto yy1164; + yy1179: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy1312; + goto yy1179; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1297; + goto yy1164; if (yych <= '\t') - goto yy1314; + goto yy1181; if (yych <= '\n') - goto yy1316; - goto yy1297; + goto yy1183; + goto yy1164; } else { if (yych <= '\r') - goto yy1316; + goto yy1183; if (yych != ' ') - goto yy1297; + goto yy1164; } - yy1314: + yy1181: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1297; + goto yy1164; if (yych <= '\t') - goto yy1314; + goto yy1181; if (yych >= '\v') - goto yy1297; + goto yy1164; } else { if (yych <= '\r') - goto yy1316; + goto yy1183; if (yych == ' ') - goto yy1314; - goto yy1297; + goto yy1181; + goto yy1164; } - yy1316: + yy1183: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19547,997 +17463,997 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '%') { if (yych != '\n') - goto yy1322; + goto yy1189; } else { if (yych <= '&') - goto yy1321; + goto yy1188; if (yych <= 0x7F) - goto yy1322; + goto yy1189; if (yych >= 0xC2) - goto yy1323; + goto yy1190; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1325; + goto yy1192; if (yych == 0xED) - goto yy1330; - goto yy1326; + goto yy1197; + goto yy1193; } else { if (yych <= 0xF0) - goto yy1327; + goto yy1194; if (yych <= 0xF3) - goto yy1328; + goto yy1195; if (yych <= 0xF4) - goto yy1329; + goto yy1196; } } - yy1320 : { return 0; } - yy1321: + yy1187 : { return 0; } + yy1188: yych = *(marker = ++p); if (yych <= '@') { if (yych == '#') - goto yy1331; - goto yy1320; + goto yy1198; + goto yy1187; } else { if (yych <= 'Z') - goto yy1332; + goto yy1199; if (yych <= '`') - goto yy1320; + goto yy1187; if (yych <= 'z') - goto yy1332; - goto yy1320; + goto yy1199; + goto yy1187; } - yy1322: + yy1189: yych = *++p; - goto yy1320; - yy1323: + goto yy1187; + yy1190: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1191; if (yych <= 0xBF) - goto yy1322; - yy1324: + goto yy1189; + yy1191: p = marker; - goto yy1320; - yy1325: + goto yy1187; + yy1192: yych = *++p; if (yych <= 0x9F) - goto yy1324; + goto yy1191; if (yych <= 0xBF) - goto yy1323; - goto yy1324; - yy1326: + goto yy1190; + goto yy1191; + yy1193: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1191; if (yych <= 0xBF) - goto yy1323; - goto yy1324; - yy1327: + goto yy1190; + goto yy1191; + yy1194: yych = *++p; if (yych <= 0x8F) - goto yy1324; + goto yy1191; if (yych <= 0xBF) - goto yy1326; - goto yy1324; - yy1328: + goto yy1193; + goto yy1191; + yy1195: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1191; if (yych <= 0xBF) - goto yy1326; - goto yy1324; - yy1329: + goto yy1193; + goto yy1191; + yy1196: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1191; if (yych <= 0x8F) - goto yy1326; - goto yy1324; - yy1330: + goto yy1193; + goto yy1191; + yy1197: yych = *++p; if (yych <= 0x7F) - goto yy1324; + goto yy1191; if (yych <= 0x9F) - goto yy1323; - goto yy1324; - yy1331: + goto yy1190; + goto yy1191; + yy1198: yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1367; - goto yy1324; + goto yy1234; + goto yy1191; } else { if (yych <= 'X') - goto yy1366; + goto yy1233; if (yych == 'x') - goto yy1366; - goto yy1324; + goto yy1233; + goto yy1191; } - yy1332: + yy1199: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych >= ':') - goto yy1324; + goto yy1191; } else { if (yych <= 'Z') - goto yy1333; + goto yy1200; if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } - yy1333: + yy1200: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1336; + goto yy1203; if (yych <= ':') - goto yy1324; + goto yy1191; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; - goto yy1336; + goto yy1191; + goto yy1203; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych <= 'z') - goto yy1336; - goto yy1324; + goto yy1203; + goto yy1191; } } - yy1334: + yy1201: ++p; { return (bufsize_t)(p - start); } - yy1336: + yy1203: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1337; + goto yy1204; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1337: + yy1204: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1338; + goto yy1205; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1338: + yy1205: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1339; + goto yy1206; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1339: + yy1206: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1340; + goto yy1207; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1340: + yy1207: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1341; + goto yy1208; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1341: + yy1208: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1342; + goto yy1209; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1342: + yy1209: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1343; + goto yy1210; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1343: + yy1210: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1344; + goto yy1211; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1344: + yy1211: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1345; + goto yy1212; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1345: + yy1212: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1346; + goto yy1213; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1346: + yy1213: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1347; + goto yy1214; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1347: + yy1214: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1348; + goto yy1215; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1348: + yy1215: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1349; + goto yy1216; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1349: + yy1216: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1350; + goto yy1217; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1350: + yy1217: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1351; + goto yy1218; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1351: + yy1218: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1352; + goto yy1219; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1352: + yy1219: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1353; + goto yy1220; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1353: + yy1220: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1354; + goto yy1221; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1354: + yy1221: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1355; + goto yy1222; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1355: + yy1222: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1356; + goto yy1223; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1356: + yy1223: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1357; + goto yy1224; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1357: + yy1224: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1358; + goto yy1225; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1358: + yy1225: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1359; + goto yy1226; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1359: + yy1226: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1360; + goto yy1227; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1360: + yy1227: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1361; + goto yy1228; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1361: + yy1228: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1362; + goto yy1229; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1362: + yy1229: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1363; + goto yy1230; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1363: + yy1230: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1364; + goto yy1231; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1364: + yy1231: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1365; + goto yy1232; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= '{') - goto yy1324; + goto yy1191; } } - yy1365: + yy1232: yych = *++p; if (yych == ';') - goto yy1334; - goto yy1324; - yy1366: + goto yy1201; + goto yy1191; + yy1233: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1374; - goto yy1324; + goto yy1241; + goto yy1191; } else { if (yych <= 'F') - goto yy1374; + goto yy1241; if (yych <= '`') - goto yy1324; + goto yy1191; if (yych <= 'f') - goto yy1374; - goto yy1324; + goto yy1241; + goto yy1191; } - yy1367: + yy1234: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1368; + goto yy1235; if (yych == ';') - goto yy1334; - goto yy1324; - yy1368: + goto yy1201; + goto yy1191; + yy1235: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1369; + goto yy1236; if (yych == ';') - goto yy1334; - goto yy1324; - yy1369: + goto yy1201; + goto yy1191; + yy1236: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1370; + goto yy1237; if (yych == ';') - goto yy1334; - goto yy1324; - yy1370: + goto yy1201; + goto yy1191; + yy1237: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1371; + goto yy1238; if (yych == ';') - goto yy1334; - goto yy1324; - yy1371: + goto yy1201; + goto yy1191; + yy1238: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1372; + goto yy1239; if (yych == ';') - goto yy1334; - goto yy1324; - yy1372: + goto yy1201; + goto yy1191; + yy1239: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1373; + goto yy1240; if (yych == ';') - goto yy1334; - goto yy1324; - yy1373: + goto yy1201; + goto yy1191; + yy1240: yych = *++p; if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1365; + goto yy1232; if (yych == ';') - goto yy1334; - goto yy1324; - yy1374: + goto yy1201; + goto yy1191; + yy1241: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1375; + goto yy1242; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= 'g') - goto yy1324; + goto yy1191; } } - yy1375: + yy1242: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1376; + goto yy1243; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= 'g') - goto yy1324; + goto yy1191; } } - yy1376: + yy1243: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1377; + goto yy1244; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= 'g') - goto yy1324; + goto yy1191; } } - yy1377: + yy1244: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1378; + goto yy1245; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= 'g') - goto yy1324; + goto yy1191; } } - yy1378: + yy1245: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1379; + goto yy1246; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= 'g') - goto yy1324; + goto yy1191; } } - yy1379: + yy1246: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1380; + goto yy1247; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; + goto yy1191; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych >= 'g') - goto yy1324; + goto yy1191; } } - yy1380: + yy1247: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1324; + goto yy1191; if (yych <= '9') - goto yy1365; + goto yy1232; if (yych <= ':') - goto yy1324; - goto yy1334; + goto yy1191; + goto yy1201; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1324; - goto yy1365; + goto yy1191; + goto yy1232; } else { if (yych <= '`') - goto yy1324; + goto yy1191; if (yych <= 'f') - goto yy1365; - goto yy1324; + goto yy1232; + goto yy1191; } } } @@ -20557,415 +18473,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'I') { if (yych <= 'C') { if (yych != '\n') - goto yy1388; + goto yy1255; } else { if (yych <= 'D') - goto yy1384; + goto yy1251; if (yych == 'F') - goto yy1387; - goto yy1388; + goto yy1254; + goto yy1255; } } else { if (yych <= 'V') { if (yych <= 'J') - goto yy1385; + goto yy1252; if (yych <= 'U') - goto yy1388; - goto yy1386; + goto yy1255; + goto yy1253; } else { if (yych == 'd') - goto yy1384; + goto yy1251; if (yych <= 'e') - goto yy1388; - goto yy1387; + goto yy1255; + goto yy1254; } } } else { if (yych <= 0xDF) { if (yych <= 'u') { if (yych == 'j') - goto yy1385; - goto yy1388; + goto yy1252; + goto yy1255; } else { if (yych <= 'v') - goto yy1386; + goto yy1253; if (yych <= 0x7F) - goto yy1388; + goto yy1255; if (yych >= 0xC2) - goto yy1389; + goto yy1256; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1391; + goto yy1258; if (yych == 0xED) - goto yy1396; - goto yy1392; + goto yy1263; + goto yy1259; } else { if (yych <= 0xF0) - goto yy1393; + goto yy1260; if (yych <= 0xF3) - goto yy1394; + goto yy1261; if (yych <= 0xF4) - goto yy1395; + goto yy1262; } } } - yy1383 : { return 0; } - yy1384: + yy1250 : { return 0; } + yy1251: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1418; + goto yy1285; if (yych == 'a') - goto yy1418; - goto yy1383; - yy1385: + goto yy1285; + goto yy1250; + yy1252: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1409; + goto yy1276; if (yych == 'a') - goto yy1409; - goto yy1383; - yy1386: + goto yy1276; + goto yy1250; + yy1253: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1402; + goto yy1269; if (yych == 'b') - goto yy1402; - goto yy1383; - yy1387: + goto yy1269; + goto yy1250; + yy1254: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy1397; + goto yy1264; if (yych == 'i') - goto yy1397; - goto yy1383; - yy1388: + goto yy1264; + goto yy1250; + yy1255: yych = *++p; - goto yy1383; - yy1389: + goto yy1250; + yy1256: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1257; if (yych <= 0xBF) - goto yy1388; - yy1390: + goto yy1255; + yy1257: p = marker; if (yyaccept == 0) { - goto yy1383; + goto yy1250; } else { - goto yy1401; + goto yy1268; } - yy1391: + yy1258: yych = *++p; if (yych <= 0x9F) - goto yy1390; + goto yy1257; if (yych <= 0xBF) - goto yy1389; - goto yy1390; - yy1392: + goto yy1256; + goto yy1257; + yy1259: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1257; if (yych <= 0xBF) - goto yy1389; - goto yy1390; - yy1393: + goto yy1256; + goto yy1257; + yy1260: yych = *++p; if (yych <= 0x8F) - goto yy1390; + goto yy1257; if (yych <= 0xBF) - goto yy1392; - goto yy1390; - yy1394: + goto yy1259; + goto yy1257; + yy1261: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1257; if (yych <= 0xBF) - goto yy1392; - goto yy1390; - yy1395: + goto yy1259; + goto yy1257; + yy1262: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1257; if (yych <= 0x8F) - goto yy1392; - goto yy1390; - yy1396: + goto yy1259; + goto yy1257; + yy1263: yych = *++p; if (yych <= 0x7F) - goto yy1390; + goto yy1257; if (yych <= 0x9F) - goto yy1389; - goto yy1390; - yy1397: + goto yy1256; + goto yy1257; + yy1264: yych = *++p; if (yych == 'L') - goto yy1398; + goto yy1265; if (yych != 'l') - goto yy1390; - yy1398: + goto yy1257; + yy1265: yych = *++p; if (yych == 'E') - goto yy1399; + goto yy1266; if (yych != 'e') - goto yy1390; - yy1399: + goto yy1257; + yy1266: yych = *++p; if (yych != ':') - goto yy1390; - yy1400: + goto yy1257; + yy1267: ++p; - yy1401 : { return (bufsize_t)(p - start); } - yy1402: + yy1268 : { return (bufsize_t)(p - start); } + yy1269: yych = *++p; if (yych == 'S') - goto yy1403; + goto yy1270; if (yych != 's') - goto yy1390; - yy1403: + goto yy1257; + yy1270: yych = *++p; if (yych == 'C') - goto yy1404; + goto yy1271; if (yych != 'c') - goto yy1390; - yy1404: + goto yy1257; + yy1271: yych = *++p; if (yych == 'R') - goto yy1405; + goto yy1272; if (yych != 'r') - goto yy1390; - yy1405: + goto yy1257; + yy1272: yych = *++p; if (yych == 'I') - goto yy1406; + goto yy1273; if (yych != 'i') - goto yy1390; - yy1406: + goto yy1257; + yy1273: yych = *++p; if (yych == 'P') - goto yy1407; + goto yy1274; if (yych != 'p') - goto yy1390; - yy1407: + goto yy1257; + yy1274: yych = *++p; if (yych == 'T') - goto yy1408; + goto yy1275; if (yych != 't') - goto yy1390; - yy1408: + goto yy1257; + yy1275: yych = *++p; if (yych == ':') - goto yy1400; - goto yy1390; - yy1409: + goto yy1267; + goto yy1257; + yy1276: yych = *++p; if (yych == 'V') - goto yy1410; + goto yy1277; if (yych != 'v') - goto yy1390; - yy1410: + goto yy1257; + yy1277: yych = *++p; if (yych == 'A') - goto yy1411; + goto yy1278; if (yych != 'a') - goto yy1390; - yy1411: + goto yy1257; + yy1278: yych = *++p; if (yych == 'S') - goto yy1412; + goto yy1279; if (yych != 's') - goto yy1390; - yy1412: + goto yy1257; + yy1279: yych = *++p; if (yych == 'C') - goto yy1413; + goto yy1280; if (yych != 'c') - goto yy1390; - yy1413: + goto yy1257; + yy1280: yych = *++p; if (yych == 'R') - goto yy1414; + goto yy1281; if (yych != 'r') - goto yy1390; - yy1414: + goto yy1257; + yy1281: yych = *++p; if (yych == 'I') - goto yy1415; + goto yy1282; if (yych != 'i') - goto yy1390; - yy1415: + goto yy1257; + yy1282: yych = *++p; if (yych == 'P') - goto yy1416; + goto yy1283; if (yych != 'p') - goto yy1390; - yy1416: + goto yy1257; + yy1283: yych = *++p; if (yych == 'T') - goto yy1417; + goto yy1284; if (yych != 't') - goto yy1390; - yy1417: + goto yy1257; + yy1284: yych = *++p; if (yych == ':') - goto yy1400; - goto yy1390; - yy1418: + goto yy1267; + goto yy1257; + yy1285: yych = *++p; if (yych == 'T') - goto yy1419; + goto yy1286; if (yych != 't') - goto yy1390; - yy1419: + goto yy1257; + yy1286: yych = *++p; if (yych == 'A') - goto yy1420; + goto yy1287; if (yych != 'a') - goto yy1390; - yy1420: + goto yy1257; + yy1287: yych = *++p; if (yych != ':') - goto yy1390; + goto yy1257; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1422; + goto yy1289; if (yych != 'i') - goto yy1401; - yy1422: + goto yy1268; + yy1289: yych = *++p; if (yych == 'M') - goto yy1423; + goto yy1290; if (yych != 'm') - goto yy1390; - yy1423: + goto yy1257; + yy1290: yych = *++p; if (yych == 'A') - goto yy1424; + goto yy1291; if (yych != 'a') - goto yy1390; - yy1424: + goto yy1257; + yy1291: yych = *++p; if (yych == 'G') - goto yy1425; + goto yy1292; if (yych != 'g') - goto yy1390; - yy1425: + goto yy1257; + yy1292: yych = *++p; if (yych == 'E') - goto yy1426; + goto yy1293; if (yych != 'e') - goto yy1390; - yy1426: + goto yy1257; + yy1293: yych = *++p; if (yych != '/') - goto yy1390; + goto yy1257; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1429; + goto yy1296; if (yych <= 'I') - goto yy1390; - goto yy1430; + goto yy1257; + goto yy1297; } else { if (yych == 'P') - goto yy1428; + goto yy1295; if (yych <= 'V') - goto yy1390; - goto yy1431; + goto yy1257; + goto yy1298; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1429; + goto yy1296; if (yych <= 'i') - goto yy1390; - goto yy1430; + goto yy1257; + goto yy1297; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1390; + goto yy1257; } else { if (yych == 'w') - goto yy1431; - goto yy1390; + goto yy1298; + goto yy1257; } } } - yy1428: + yy1295: yych = *++p; if (yych == 'N') - goto yy1439; + goto yy1306; if (yych == 'n') - goto yy1439; - goto yy1390; - yy1429: + goto yy1306; + goto yy1257; + yy1296: yych = *++p; if (yych == 'I') - goto yy1438; + goto yy1305; if (yych == 'i') - goto yy1438; - goto yy1390; - yy1430: + goto yy1305; + goto yy1257; + yy1297: yych = *++p; if (yych == 'P') - goto yy1436; + goto yy1303; if (yych == 'p') - goto yy1436; - goto yy1390; - yy1431: + goto yy1303; + goto yy1257; + yy1298: yych = *++p; if (yych == 'E') - goto yy1432; + goto yy1299; if (yych != 'e') - goto yy1390; - yy1432: + goto yy1257; + yy1299: yych = *++p; if (yych == 'B') - goto yy1433; + goto yy1300; if (yych != 'b') - goto yy1390; - yy1433: + goto yy1257; + yy1300: yych = *++p; if (yych == 'P') - goto yy1434; + goto yy1301; if (yych != 'p') - goto yy1390; - yy1434: + goto yy1257; + yy1301: ++p; { return 0; } - yy1436: + yy1303: yych = *++p; if (yych == 'E') - goto yy1437; + goto yy1304; if (yych != 'e') - goto yy1390; - yy1437: + goto yy1257; + yy1304: yych = *++p; if (yych == 'G') - goto yy1434; + goto yy1301; if (yych == 'g') - goto yy1434; - goto yy1390; - yy1438: + goto yy1301; + goto yy1257; + yy1305: yych = *++p; if (yych == 'F') - goto yy1434; + goto yy1301; if (yych == 'f') - goto yy1434; - goto yy1390; - yy1439: + goto yy1301; + goto yy1257; + yy1306: ++p; if ((yych = *p) == 'G') - goto yy1434; + goto yy1301; if (yych == 'g') - goto yy1434; - goto yy1390; + goto yy1301; + goto yy1257; } } diff --git a/src/scanners.h b/src/scanners.h index 5e3cbe7519..207f91a000 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -18,7 +18,6 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p); bufsize_t _scan_html_block_end_3(const unsigned char *p); bufsize_t _scan_html_block_end_4(const unsigned char *p); bufsize_t _scan_html_block_end_5(const unsigned char *p); -bufsize_t _scan_link_url(const unsigned char *p); bufsize_t _scan_link_title(const unsigned char *p); bufsize_t _scan_spacechars(const unsigned char *p); bufsize_t _scan_atx_heading_start(const unsigned char *p); @@ -40,7 +39,6 @@ bufsize_t _scan_dangerous_url(const unsigned char *p); #define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n) #define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n) #define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n) -#define scan_link_url(c, n) _scan_at(&_scan_link_url, c, n) #define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n) #define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n) #define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n) diff --git a/src/scanners.re b/src/scanners.re index 77d30cd548..02b393a79a 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -205,21 +205,6 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) */ } -// Try to match a URL in a link or reference, return number of chars matched. -// This may optionally be contained in <..>; otherwise -// whitespace and unbalanced right parentheses aren't allowed. -// Newlines aren't ever allowed. -bufsize_t _scan_link_url(const unsigned char *p) -{ - const unsigned char *marker = NULL; - const unsigned char *start = p; -/*!re2c - [ \r\n]* [<] ([^<> \t\r\n\\\x00] | escaped_char | [\\])* [>] { return (bufsize_t)(p - start); } - [ \r\n]* (reg_char+ | escaped_char | [\\] [^() \t\v\f\r\n] | in_parens_nosp)* [\\]? { return (bufsize_t)(p - start); } - .? { return 0; } -*/ -} - // Try to match a link title (in single quotes, in double quotes, or // in parentheses), returning number of chars matched. Allow one // level of internal nesting (quotes within quotes). diff --git a/test/spec.txt b/test/spec.txt index c66f93b77f..c49e85b39f 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -7148,8 +7148,7 @@ A [link destination](@) consists of either - a nonempty sequence of characters that does not include ASCII space or control characters, and includes parentheses only if (a) they are backslash-escaped or (b) they are part of - a balanced pair of unescaped parentheses that is not itself - inside a balanced pair of unescaped parentheses. + a balanced pair of unescaped parentheses. A [link title](@) consists of either @@ -7255,35 +7254,29 @@ Parentheses inside the link destination may be escaped:

                            link

                            ```````````````````````````````` -One level of balanced parentheses is allowed without escaping: - -```````````````````````````````` example -[link]((foo)and(bar)) -. -

                            link

                            -```````````````````````````````` - -However, if you have parentheses within parentheses, you need to escape -or use the `<...>` form: +Any number parentheses are allowed without escaping, as long as they are +balanced: ```````````````````````````````` example [link](foo(and(bar))) . -

                            [link](foo(and(bar)))

                            +

                            link

                            ```````````````````````````````` +However, if you have unbalanced parentheses, you need to escape or use the +`<...>` form: ```````````````````````````````` example -[link](foo(and\(bar\))) +[link](foo\(and\(bar\)) . -

                            link

                            +

                            link

                            ```````````````````````````````` ```````````````````````````````` example -[link]() +[link]() . -

                            link

                            +

                            link

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 9f6be5bd537a9337b4c42685e4f80f65f5975fe0 Mon Sep 17 00:00:00 2001 From: Kevin Wojniak Date: Sat, 3 Dec 2016 13:18:48 -0800 Subject: Update CaseFolding to latest (#168) 1. Downloaded CaseFolding.txt from http://unicode.org/Public/UCD/latest/ucd/CaseFolding.txt 2. Deleted src/case_fold_switch.inc 3. Ran `make src/case_fold_switch.inc` --- Makefile | 2 +- data/CaseFolding-3.2.0.txt | 912 -------------------- data/CaseFolding.txt | 1495 +++++++++++++++++++++++++++++++++ src/case_fold_switch.inc | 1972 ++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 3327 insertions(+), 1054 deletions(-) delete mode 100644 data/CaseFolding-3.2.0.txt create mode 100644 data/CaseFolding.txt diff --git a/Makefile b/Makefile index b5b8bf72b7..ed580ca34d 100644 --- a/Makefile +++ b/Makefile @@ -101,7 +101,7 @@ clean: # We include case_fold_switch.inc in the repository, so this shouldn't # normally need to be generated. -$(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding-3.2.0.txt +$(SRCDIR)/case_fold_switch.inc: $(DATADIR)/CaseFolding.txt perl tools/mkcasefold.pl < $< > $@ # We include scanners.c in the repository, so this shouldn't diff --git a/data/CaseFolding-3.2.0.txt b/data/CaseFolding-3.2.0.txt deleted file mode 100644 index 104a8237b5..0000000000 --- a/data/CaseFolding-3.2.0.txt +++ /dev/null @@ -1,912 +0,0 @@ -# CaseFolding-3.2.0.txt -# Date: 2002-03-22,20:54:33 GMT [MD] -# -# Case Folding Properties -# -# This file is a supplement to the UnicodeData file. -# It provides a case folding mapping generated from the Unicode Character Database. -# If all characters are mapped according to the full mapping below, then -# case differences (according to UnicodeData.txt and SpecialCasing.txt) -# are eliminated. -# -# The data supports both implementations that require simple case foldings -# (where string lengths don't change), and implementations that allow full case folding -# (where string lengths may grow). Note that where they can be supported, the -# full case foldings are superior: for example, they allow "MASSE" and "Mae" to match. -# -# NOTE: case folding does not preserve normalization formats! -# -# For information on case folding, see -# UTR #21 Case Mappings, at http://www.unicode.org/unicode/reports/tr21/ -# -# ================================================================================ -# Format -# ================================================================================ -# The entries in this file are in the following machine-readable format: -# -# ; ; ; # -# -# The status field is: -# C: common case folding, common mappings shared by both simple and full mappings. -# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. -# S: simple case folding, mappings to single characters where different from F. -# T: special case for uppercase I and dotted uppercase I -# - For non-Turkic languages, this mapping is normally not used. -# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. -# -# Usage: -# A. To do a simple case folding, use the mappings with status C + S. -# B. To do a full case folding, use the mappings with status C + F. -# -# The mappings with status T can be used or omitted depending on the desired case-folding -# behavior. (The default option is to exclude them.) -# -# ================================================================= - -0041; C; 0061; # LATIN CAPITAL LETTER A -0042; C; 0062; # LATIN CAPITAL LETTER B -0043; C; 0063; # LATIN CAPITAL LETTER C -0044; C; 0064; # LATIN CAPITAL LETTER D -0045; C; 0065; # LATIN CAPITAL LETTER E -0046; C; 0066; # LATIN CAPITAL LETTER F -0047; C; 0067; # LATIN CAPITAL LETTER G -0048; C; 0068; # LATIN CAPITAL LETTER H -0049; C; 0069; # LATIN CAPITAL LETTER I -0049; T; 0131; # LATIN CAPITAL LETTER I -004A; C; 006A; # LATIN CAPITAL LETTER J -004B; C; 006B; # LATIN CAPITAL LETTER K -004C; C; 006C; # LATIN CAPITAL LETTER L -004D; C; 006D; # LATIN CAPITAL LETTER M -004E; C; 006E; # LATIN CAPITAL LETTER N -004F; C; 006F; # LATIN CAPITAL LETTER O -0050; C; 0070; # LATIN CAPITAL LETTER P -0051; C; 0071; # LATIN CAPITAL LETTER Q -0052; C; 0072; # LATIN CAPITAL LETTER R -0053; C; 0073; # LATIN CAPITAL LETTER S -0054; C; 0074; # LATIN CAPITAL LETTER T -0055; C; 0075; # LATIN CAPITAL LETTER U -0056; C; 0076; # LATIN CAPITAL LETTER V -0057; C; 0077; # LATIN CAPITAL LETTER W -0058; C; 0078; # LATIN CAPITAL LETTER X -0059; C; 0079; # LATIN CAPITAL LETTER Y -005A; C; 007A; # LATIN CAPITAL LETTER Z -00B5; C; 03BC; # MICRO SIGN -00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE -00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE -00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE -00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS -00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE -00C6; C; 00E6; # LATIN CAPITAL LETTER AE -00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA -00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE -00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE -00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS -00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE -00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE -00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS -00D0; C; 00F0; # LATIN CAPITAL LETTER ETH -00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE -00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE -00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE -00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE -00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS -00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE -00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE -00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE -00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS -00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE -00DE; C; 00FE; # LATIN CAPITAL LETTER THORN -00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S -0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON -0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE -0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK -0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE -0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE -010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON -010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON -0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE -0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON -0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE -0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE -0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK -011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON -011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE -0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE -0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA -0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE -0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE -012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON -012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE -012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK -0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE -0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE -0132; C; 0133; # LATIN CAPITAL LIGATURE IJ -0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA -0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE -013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA -013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON -013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT -0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE -0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE -0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA -0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON -0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -014A; C; 014B; # LATIN CAPITAL LETTER ENG -014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON -014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE -0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0152; C; 0153; # LATIN CAPITAL LIGATURE OE -0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE -0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA -0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON -015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE -015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA -0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON -0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA -0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON -0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE -0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE -016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON -016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE -016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE -0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK -0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX -0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS -0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE -017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE -017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON -017F; C; 0073; # LATIN SMALL LETTER LONG S -0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK -0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR -0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX -0186; C; 0254; # LATIN CAPITAL LETTER OPEN O -0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK -0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D -018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK -018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR -018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E -018F; C; 0259; # LATIN CAPITAL LETTER SCHWA -0190; C; 025B; # LATIN CAPITAL LETTER OPEN E -0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK -0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK -0194; C; 0263; # LATIN CAPITAL LETTER GAMMA -0196; C; 0269; # LATIN CAPITAL LETTER IOTA -0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE -0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK -019C; C; 026F; # LATIN CAPITAL LETTER TURNED M -019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK -019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE -01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN -01A2; C; 01A3; # LATIN CAPITAL LETTER OI -01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK -01A6; C; 0280; # LATIN LETTER YR -01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO -01A9; C; 0283; # LATIN CAPITAL LETTER ESH -01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK -01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK -01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN -01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON -01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK -01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK -01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE -01B7; C; 0292; # LATIN CAPITAL LETTER EZH -01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED -01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE -01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON -01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON -01C7; C; 01C9; # LATIN CAPITAL LETTER LJ -01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J -01CA; C; 01CC; # LATIN CAPITAL LETTER NJ -01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J -01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON -01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON -01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON -01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON -01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON -01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE -01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON -01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON -01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK -01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON -01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON -01F1; C; 01F3; # LATIN CAPITAL LETTER DZ -01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z -01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE -01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR -01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN -01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE -01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE -01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE -0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE -0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE -0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE -0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE -020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE -020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE -020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE -0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE -0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE -0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE -0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE -0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW -021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW -021C; C; 021D; # LATIN CAPITAL LETTER YOGH -021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON -0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG -0222; C; 0223; # LATIN CAPITAL LETTER OU -0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK -0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE -0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA -022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE -0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON -0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI -0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS -0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS -0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS -038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS -038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS -038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS -038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS -0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA -0392; C; 03B2; # GREEK CAPITAL LETTER BETA -0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA -0394; C; 03B4; # GREEK CAPITAL LETTER DELTA -0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON -0396; C; 03B6; # GREEK CAPITAL LETTER ZETA -0397; C; 03B7; # GREEK CAPITAL LETTER ETA -0398; C; 03B8; # GREEK CAPITAL LETTER THETA -0399; C; 03B9; # GREEK CAPITAL LETTER IOTA -039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA -039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA -039C; C; 03BC; # GREEK CAPITAL LETTER MU -039D; C; 03BD; # GREEK CAPITAL LETTER NU -039E; C; 03BE; # GREEK CAPITAL LETTER XI -039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON -03A0; C; 03C0; # GREEK CAPITAL LETTER PI -03A1; C; 03C1; # GREEK CAPITAL LETTER RHO -03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA -03A4; C; 03C4; # GREEK CAPITAL LETTER TAU -03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON -03A6; C; 03C6; # GREEK CAPITAL LETTER PHI -03A7; C; 03C7; # GREEK CAPITAL LETTER CHI -03A8; C; 03C8; # GREEK CAPITAL LETTER PSI -03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA -03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA -03D0; C; 03B2; # GREEK BETA SYMBOL -03D1; C; 03B8; # GREEK THETA SYMBOL -03D5; C; 03C6; # GREEK PHI SYMBOL -03D6; C; 03C0; # GREEK PI SYMBOL -03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA -03DA; C; 03DB; # GREEK LETTER STIGMA -03DC; C; 03DD; # GREEK LETTER DIGAMMA -03DE; C; 03DF; # GREEK LETTER KOPPA -03E0; C; 03E1; # GREEK LETTER SAMPI -03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI -03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI -03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI -03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI -03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA -03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA -03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI -03F0; C; 03BA; # GREEK KAPPA SYMBOL -03F1; C; 03C1; # GREEK RHO SYMBOL -03F2; C; 03C3; # GREEK LUNATE SIGMA SYMBOL -03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL -03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL -0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE -0401; C; 0451; # CYRILLIC CAPITAL LETTER IO -0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE -0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE -0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE -0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE -0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0407; C; 0457; # CYRILLIC CAPITAL LETTER YI -0408; C; 0458; # CYRILLIC CAPITAL LETTER JE -0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE -040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE -040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE -040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE -040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE -040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U -040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE -0410; C; 0430; # CYRILLIC CAPITAL LETTER A -0411; C; 0431; # CYRILLIC CAPITAL LETTER BE -0412; C; 0432; # CYRILLIC CAPITAL LETTER VE -0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE -0414; C; 0434; # CYRILLIC CAPITAL LETTER DE -0415; C; 0435; # CYRILLIC CAPITAL LETTER IE -0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE -0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE -0418; C; 0438; # CYRILLIC CAPITAL LETTER I -0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I -041A; C; 043A; # CYRILLIC CAPITAL LETTER KA -041B; C; 043B; # CYRILLIC CAPITAL LETTER EL -041C; C; 043C; # CYRILLIC CAPITAL LETTER EM -041D; C; 043D; # CYRILLIC CAPITAL LETTER EN -041E; C; 043E; # CYRILLIC CAPITAL LETTER O -041F; C; 043F; # CYRILLIC CAPITAL LETTER PE -0420; C; 0440; # CYRILLIC CAPITAL LETTER ER -0421; C; 0441; # CYRILLIC CAPITAL LETTER ES -0422; C; 0442; # CYRILLIC CAPITAL LETTER TE -0423; C; 0443; # CYRILLIC CAPITAL LETTER U -0424; C; 0444; # CYRILLIC CAPITAL LETTER EF -0425; C; 0445; # CYRILLIC CAPITAL LETTER HA -0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE -0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE -0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA -0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA -042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN -042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU -042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN -042D; C; 044D; # CYRILLIC CAPITAL LETTER E -042E; C; 044E; # CYRILLIC CAPITAL LETTER YU -042F; C; 044F; # CYRILLIC CAPITAL LETTER YA -0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA -0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT -0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E -0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS -0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS -046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS -046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS -046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI -0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI -0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA -0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA -0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT -0478; C; 0479; # CYRILLIC CAPITAL LETTER UK -047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA -047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO -047E; C; 047F; # CYRILLIC CAPITAL LETTER OT -0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA -048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL -048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN -048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK -0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN -0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE -0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK -0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER -0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER -049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER -049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE -049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE -04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA -04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER -04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE -04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK -04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA -04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER -04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER -04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U -04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER -04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE -04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER -04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE -04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA -04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE -04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER -04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE -04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK -04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL -04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK -04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL -04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE -04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL -04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE -04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS -04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE -04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE -04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA -04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS -04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS -04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS -04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE -04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON -04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS -04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS -04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O -04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS -04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS -04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON -04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS -04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE -04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS -04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS -0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE -0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE -0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE -0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE -0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE -050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE -050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE -050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE -0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB -0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN -0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM -0534; C; 0564; # ARMENIAN CAPITAL LETTER DA -0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH -0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA -0537; C; 0567; # ARMENIAN CAPITAL LETTER EH -0538; C; 0568; # ARMENIAN CAPITAL LETTER ET -0539; C; 0569; # ARMENIAN CAPITAL LETTER TO -053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE -053B; C; 056B; # ARMENIAN CAPITAL LETTER INI -053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN -053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH -053E; C; 056E; # ARMENIAN CAPITAL LETTER CA -053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN -0540; C; 0570; # ARMENIAN CAPITAL LETTER HO -0541; C; 0571; # ARMENIAN CAPITAL LETTER JA -0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD -0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH -0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN -0545; C; 0575; # ARMENIAN CAPITAL LETTER YI -0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW -0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA -0548; C; 0578; # ARMENIAN CAPITAL LETTER VO -0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA -054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH -054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH -054C; C; 057C; # ARMENIAN CAPITAL LETTER RA -054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH -054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW -054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN -0550; C; 0580; # ARMENIAN CAPITAL LETTER REH -0551; C; 0581; # ARMENIAN CAPITAL LETTER CO -0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN -0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR -0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH -0555; C; 0585; # ARMENIAN CAPITAL LETTER OH -0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH -0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN -1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW -1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE -1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW -1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW -1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE -1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW -1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW -1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA -1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW -1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW -1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW -1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE -1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON -1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE -1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW -1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS -1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA -1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW -1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW -1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE -1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW -1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW -1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW -1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW -1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW -1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE -1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE -1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW -1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE -1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW -1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW -1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW -1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE -1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE -1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE -1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW -1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW -1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE -1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW -1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE -1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW -1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW -1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW -1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW -1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW -1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW -1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE -1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW -1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE -1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE -1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS -1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE -1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW -1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE -1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS -1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE -1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX -1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW -1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW -1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW -1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS -1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE -1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE -1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING -1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE -1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW -1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE -1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW -1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE -1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE -1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE -1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW -1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW -1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE -1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE -1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW -1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE -1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE -1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE -1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW -1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE -1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE -1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI -1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA -1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI -1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA -1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI -1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA -1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI -1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA -1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI -1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA -1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI -1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA -1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI -1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA -1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI -1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI -1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY -1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON -1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA -1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA -1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -1FBE; C; 03B9; # GREEK PROSGEGRAMMENI -1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI -1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI -1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA -1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA -1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA -1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA -1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA -1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI -1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY -1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON -1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA -1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA -1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA -1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI -1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI -1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY -1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON -1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA -1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA -1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA -1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI -1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI -1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA -1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA -1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA -1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA -1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -2126; C; 03C9; # OHM SIGN -212A; C; 006B; # KELVIN SIGN -212B; C; 00E5; # ANGSTROM SIGN -2160; C; 2170; # ROMAN NUMERAL ONE -2161; C; 2171; # ROMAN NUMERAL TWO -2162; C; 2172; # ROMAN NUMERAL THREE -2163; C; 2173; # ROMAN NUMERAL FOUR -2164; C; 2174; # ROMAN NUMERAL FIVE -2165; C; 2175; # ROMAN NUMERAL SIX -2166; C; 2176; # ROMAN NUMERAL SEVEN -2167; C; 2177; # ROMAN NUMERAL EIGHT -2168; C; 2178; # ROMAN NUMERAL NINE -2169; C; 2179; # ROMAN NUMERAL TEN -216A; C; 217A; # ROMAN NUMERAL ELEVEN -216B; C; 217B; # ROMAN NUMERAL TWELVE -216C; C; 217C; # ROMAN NUMERAL FIFTY -216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED -216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED -216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND -24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A -24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B -24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C -24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D -24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E -24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F -24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G -24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H -24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I -24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J -24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K -24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L -24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M -24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N -24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O -24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P -24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q -24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R -24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S -24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T -24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U -24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V -24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W -24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X -24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y -24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z -FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF -FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI -FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL -FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI -FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL -FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T -FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST -FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW -FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH -FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI -FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW -FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH -FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A -FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B -FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C -FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D -FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E -FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F -FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G -FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H -FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I -FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J -FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K -FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L -FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M -FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N -FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O -FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P -FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q -FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R -FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S -FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T -FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U -FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V -FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W -FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X -FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y -FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z -10400; C; 10428; # DESERET CAPITAL LETTER LONG I -10401; C; 10429; # DESERET CAPITAL LETTER LONG E -10402; C; 1042A; # DESERET CAPITAL LETTER LONG A -10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH -10404; C; 1042C; # DESERET CAPITAL LETTER LONG O -10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO -10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I -10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E -10408; C; 10430; # DESERET CAPITAL LETTER SHORT A -10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH -1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O -1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO -1040C; C; 10434; # DESERET CAPITAL LETTER AY -1040D; C; 10435; # DESERET CAPITAL LETTER OW -1040E; C; 10436; # DESERET CAPITAL LETTER WU -1040F; C; 10437; # DESERET CAPITAL LETTER YEE -10410; C; 10438; # DESERET CAPITAL LETTER H -10411; C; 10439; # DESERET CAPITAL LETTER PEE -10412; C; 1043A; # DESERET CAPITAL LETTER BEE -10413; C; 1043B; # DESERET CAPITAL LETTER TEE -10414; C; 1043C; # DESERET CAPITAL LETTER DEE -10415; C; 1043D; # DESERET CAPITAL LETTER CHEE -10416; C; 1043E; # DESERET CAPITAL LETTER JEE -10417; C; 1043F; # DESERET CAPITAL LETTER KAY -10418; C; 10440; # DESERET CAPITAL LETTER GAY -10419; C; 10441; # DESERET CAPITAL LETTER EF -1041A; C; 10442; # DESERET CAPITAL LETTER VEE -1041B; C; 10443; # DESERET CAPITAL LETTER ETH -1041C; C; 10444; # DESERET CAPITAL LETTER THEE -1041D; C; 10445; # DESERET CAPITAL LETTER ES -1041E; C; 10446; # DESERET CAPITAL LETTER ZEE -1041F; C; 10447; # DESERET CAPITAL LETTER ESH -10420; C; 10448; # DESERET CAPITAL LETTER ZHEE -10421; C; 10449; # DESERET CAPITAL LETTER ER -10422; C; 1044A; # DESERET CAPITAL LETTER EL -10423; C; 1044B; # DESERET CAPITAL LETTER EM -10424; C; 1044C; # DESERET CAPITAL LETTER EN -10425; C; 1044D; # DESERET CAPITAL LETTER ENG diff --git a/data/CaseFolding.txt b/data/CaseFolding.txt new file mode 100644 index 0000000000..372ee68bd8 --- /dev/null +++ b/data/CaseFolding.txt @@ -0,0 +1,1495 @@ +# CaseFolding-9.0.0.txt +# Date: 2016-03-02, 18:54:54 GMT +# © 2016 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see http://www.unicode.org/reports/tr44/ +# +# Case Folding Properties +# +# This file is a supplement to the UnicodeData file. +# It provides a case folding mapping generated from the Unicode Character Database. +# If all characters are mapped according to the full mapping below, then +# case differences (according to UnicodeData.txt and SpecialCasing.txt) +# are eliminated. +# +# The data supports both implementations that require simple case foldings +# (where string lengths don't change), and implementations that allow full case folding +# (where string lengths may grow). Note that where they can be supported, the +# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match. +# +# All code points not listed in this file map to themselves. +# +# NOTE: case folding does not preserve normalization formats! +# +# For information on case folding, including how to have case folding +# preserve normalization formats, see Section 3.13 Default Case Algorithms in +# The Unicode Standard. +# +# ================================================================================ +# Format +# ================================================================================ +# The entries in this file are in the following machine-readable format: +# +# ; ; ; # +# +# The status field is: +# C: common case folding, common mappings shared by both simple and full mappings. +# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. +# S: simple case folding, mappings to single characters where different from F. +# T: special case for uppercase I and dotted uppercase I +# - For non-Turkic languages, this mapping is normally not used. +# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. +# Note that the Turkic mappings do not maintain canonical equivalence without additional processing. +# See the discussions of case mapping in the Unicode Standard for more information. +# +# Usage: +# A. To do a simple case folding, use the mappings with status C + S. +# B. To do a full case folding, use the mappings with status C + F. +# +# The mappings with status T can be used or omitted depending on the desired case-folding +# behavior. (The default option is to exclude them.) +# +# ================================================================= + +# Property: Case_Folding + +# All code points not explicitly listed for Case_Folding +# have the value C for the status field, and the code point itself for the mapping field. + +# ================================================================= +0041; C; 0061; # LATIN CAPITAL LETTER A +0042; C; 0062; # LATIN CAPITAL LETTER B +0043; C; 0063; # LATIN CAPITAL LETTER C +0044; C; 0064; # LATIN CAPITAL LETTER D +0045; C; 0065; # LATIN CAPITAL LETTER E +0046; C; 0066; # LATIN CAPITAL LETTER F +0047; C; 0067; # LATIN CAPITAL LETTER G +0048; C; 0068; # LATIN CAPITAL LETTER H +0049; C; 0069; # LATIN CAPITAL LETTER I +0049; T; 0131; # LATIN CAPITAL LETTER I +004A; C; 006A; # LATIN CAPITAL LETTER J +004B; C; 006B; # LATIN CAPITAL LETTER K +004C; C; 006C; # LATIN CAPITAL LETTER L +004D; C; 006D; # LATIN CAPITAL LETTER M +004E; C; 006E; # LATIN CAPITAL LETTER N +004F; C; 006F; # LATIN CAPITAL LETTER O +0050; C; 0070; # LATIN CAPITAL LETTER P +0051; C; 0071; # LATIN CAPITAL LETTER Q +0052; C; 0072; # LATIN CAPITAL LETTER R +0053; C; 0073; # LATIN CAPITAL LETTER S +0054; C; 0074; # LATIN CAPITAL LETTER T +0055; C; 0075; # LATIN CAPITAL LETTER U +0056; C; 0076; # LATIN CAPITAL LETTER V +0057; C; 0077; # LATIN CAPITAL LETTER W +0058; C; 0078; # LATIN CAPITAL LETTER X +0059; C; 0079; # LATIN CAPITAL LETTER Y +005A; C; 007A; # LATIN CAPITAL LETTER Z +00B5; C; 03BC; # MICRO SIGN +00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE +00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE +00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE +00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6; C; 00E6; # LATIN CAPITAL LETTER AE +00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA +00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE +00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE +00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS +00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE +00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE +00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS +00D0; C; 00F0; # LATIN CAPITAL LETTER ETH +00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE +00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE +00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE +00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE +00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS +00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE +00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE +00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE +00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE +00DE; C; 00FE; # LATIN CAPITAL LETTER THORN +00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S +0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON +0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE +0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK +0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE +0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE +010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON +010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON +0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE +0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON +0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE +0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE +0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK +011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON +011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE +0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE +0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA +0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE +0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE +012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON +012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE +012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK +0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0132; C; 0133; # LATIN CAPITAL LIGATURE IJ +0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA +0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE +013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA +013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON +013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE +0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE +0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA +0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON +0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A; C; 014B; # LATIN CAPITAL LETTER ENG +014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON +014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE +0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152; C; 0153; # LATIN CAPITAL LIGATURE OE +0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE +0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA +0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON +015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE +015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA +0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON +0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA +0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON +0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE +0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE +016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON +016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE +016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE +0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK +0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS +0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE +017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON +017F; C; 0073; # LATIN SMALL LETTER LONG S +0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK +0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR +0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX +0186; C; 0254; # LATIN CAPITAL LETTER OPEN O +0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK +0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D +018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK +018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR +018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E +018F; C; 0259; # LATIN CAPITAL LETTER SCHWA +0190; C; 025B; # LATIN CAPITAL LETTER OPEN E +0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK +0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK +0194; C; 0263; # LATIN CAPITAL LETTER GAMMA +0196; C; 0269; # LATIN CAPITAL LETTER IOTA +0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE +0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK +019C; C; 026F; # LATIN CAPITAL LETTER TURNED M +019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK +019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN +01A2; C; 01A3; # LATIN CAPITAL LETTER OI +01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK +01A6; C; 0280; # LATIN LETTER YR +01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO +01A9; C; 0283; # LATIN CAPITAL LETTER ESH +01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK +01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN +01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON +01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK +01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK +01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE +01B7; C; 0292; # LATIN CAPITAL LETTER EZH +01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED +01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE +01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON +01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C7; C; 01C9; # LATIN CAPITAL LETTER LJ +01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CA; C; 01CC; # LATIN CAPITAL LETTER NJ +01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON +01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON +01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON +01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON +01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON +01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE +01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON +01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON +01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK +01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON +01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON +01F1; C; 01F3; # LATIN CAPITAL LETTER DZ +01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE +01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR +01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN +01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE +01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE +01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW +021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW +021C; C; 021D; # LATIN CAPITAL LETTER YOGH +021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON +0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222; C; 0223; # LATIN CAPITAL LETTER OU +0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK +0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE +0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA +022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE +0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON +023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE +023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE +023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR +023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP +0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE +0244; C; 0289; # LATIN CAPITAL LETTER U BAR +0245; C; 028C; # LATIN CAPITAL LETTER TURNED V +0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE +0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE +024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE +024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE +0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI +0370; C; 0371; # GREEK CAPITAL LETTER HETA +0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI +0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037F; C; 03F3; # GREEK CAPITAL LETTER YOT +0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS +0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS +0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS +038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS +038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS +038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS +038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS +0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA +0392; C; 03B2; # GREEK CAPITAL LETTER BETA +0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA +0394; C; 03B4; # GREEK CAPITAL LETTER DELTA +0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON +0396; C; 03B6; # GREEK CAPITAL LETTER ZETA +0397; C; 03B7; # GREEK CAPITAL LETTER ETA +0398; C; 03B8; # GREEK CAPITAL LETTER THETA +0399; C; 03B9; # GREEK CAPITAL LETTER IOTA +039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA +039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA +039C; C; 03BC; # GREEK CAPITAL LETTER MU +039D; C; 03BD; # GREEK CAPITAL LETTER NU +039E; C; 03BE; # GREEK CAPITAL LETTER XI +039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON +03A0; C; 03C0; # GREEK CAPITAL LETTER PI +03A1; C; 03C1; # GREEK CAPITAL LETTER RHO +03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA +03A4; C; 03C4; # GREEK CAPITAL LETTER TAU +03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON +03A6; C; 03C6; # GREEK CAPITAL LETTER PHI +03A7; C; 03C7; # GREEK CAPITAL LETTER CHI +03A8; C; 03C8; # GREEK CAPITAL LETTER PSI +03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA +03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA +03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL +03D0; C; 03B2; # GREEK BETA SYMBOL +03D1; C; 03B8; # GREEK THETA SYMBOL +03D5; C; 03C6; # GREEK PHI SYMBOL +03D6; C; 03C0; # GREEK PI SYMBOL +03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA +03DA; C; 03DB; # GREEK LETTER STIGMA +03DC; C; 03DD; # GREEK LETTER DIGAMMA +03DE; C; 03DF; # GREEK LETTER KOPPA +03E0; C; 03E1; # GREEK LETTER SAMPI +03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI +03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI +03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI +03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI +03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA +03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA +03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI +03F0; C; 03BA; # GREEK KAPPA SYMBOL +03F1; C; 03C1; # GREEK RHO SYMBOL +03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL +03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL +03F7; C; 03F8; # GREEK CAPITAL LETTER SHO +03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL +03FA; C; 03FB; # GREEK CAPITAL LETTER SAN +03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401; C; 0451; # CYRILLIC CAPITAL LETTER IO +0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE +0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE +0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE +0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407; C; 0457; # CYRILLIC CAPITAL LETTER YI +0408; C; 0458; # CYRILLIC CAPITAL LETTER JE +0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE +040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE +040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE +040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE +040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE +040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U +040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE +0410; C; 0430; # CYRILLIC CAPITAL LETTER A +0411; C; 0431; # CYRILLIC CAPITAL LETTER BE +0412; C; 0432; # CYRILLIC CAPITAL LETTER VE +0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE +0414; C; 0434; # CYRILLIC CAPITAL LETTER DE +0415; C; 0435; # CYRILLIC CAPITAL LETTER IE +0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE +0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE +0418; C; 0438; # CYRILLIC CAPITAL LETTER I +0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I +041A; C; 043A; # CYRILLIC CAPITAL LETTER KA +041B; C; 043B; # CYRILLIC CAPITAL LETTER EL +041C; C; 043C; # CYRILLIC CAPITAL LETTER EM +041D; C; 043D; # CYRILLIC CAPITAL LETTER EN +041E; C; 043E; # CYRILLIC CAPITAL LETTER O +041F; C; 043F; # CYRILLIC CAPITAL LETTER PE +0420; C; 0440; # CYRILLIC CAPITAL LETTER ER +0421; C; 0441; # CYRILLIC CAPITAL LETTER ES +0422; C; 0442; # CYRILLIC CAPITAL LETTER TE +0423; C; 0443; # CYRILLIC CAPITAL LETTER U +0424; C; 0444; # CYRILLIC CAPITAL LETTER EF +0425; C; 0445; # CYRILLIC CAPITAL LETTER HA +0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE +0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE +0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA +0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA +042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN +042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU +042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN +042D; C; 044D; # CYRILLIC CAPITAL LETTER E +042E; C; 044E; # CYRILLIC CAPITAL LETTER YU +042F; C; 044F; # CYRILLIC CAPITAL LETTER YA +0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA +0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT +0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E +0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS +0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS +046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI +0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI +0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA +0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA +0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478; C; 0479; # CYRILLIC CAPITAL LETTER UK +047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA +047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E; C; 047F; # CYRILLIC CAPITAL LETTER OT +0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA +048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK +0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA +04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE +04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U +04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE +04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA +04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA +04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE +04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE +04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA +04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON +04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O +04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON +04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE +0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE +0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE +0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE +0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE +0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE +050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE +050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE +050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE +0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE +0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK +0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA +0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA +0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE +051A; C; 051B; # CYRILLIC CAPITAL LETTER QA +051C; C; 051D; # CYRILLIC CAPITAL LETTER WE +051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA +0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE +052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE +052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB +0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN +0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM +0534; C; 0564; # ARMENIAN CAPITAL LETTER DA +0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH +0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA +0537; C; 0567; # ARMENIAN CAPITAL LETTER EH +0538; C; 0568; # ARMENIAN CAPITAL LETTER ET +0539; C; 0569; # ARMENIAN CAPITAL LETTER TO +053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE +053B; C; 056B; # ARMENIAN CAPITAL LETTER INI +053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN +053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH +053E; C; 056E; # ARMENIAN CAPITAL LETTER CA +053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN +0540; C; 0570; # ARMENIAN CAPITAL LETTER HO +0541; C; 0571; # ARMENIAN CAPITAL LETTER JA +0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD +0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH +0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN +0545; C; 0575; # ARMENIAN CAPITAL LETTER YI +0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW +0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA +0548; C; 0578; # ARMENIAN CAPITAL LETTER VO +0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA +054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH +054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH +054C; C; 057C; # ARMENIAN CAPITAL LETTER RA +054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH +054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW +054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN +0550; C; 0580; # ARMENIAN CAPITAL LETTER REH +0551; C; 0581; # ARMENIAN CAPITAL LETTER CO +0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN +0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR +0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH +0555; C; 0585; # ARMENIAN CAPITAL LETTER OH +0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH +0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN +10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN +10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN +10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN +10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON +10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN +10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN +10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN +10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN +10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN +10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN +10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS +10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN +10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR +10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON +10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR +10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR +10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE +10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN +10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR +10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN +10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR +10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR +10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN +10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR +10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN +10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN +10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN +10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL +10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL +10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR +10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN +10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN +10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE +10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE +10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE +10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE +10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR +10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE +10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN +10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN +13F8; C; 13F0; # CHEROKEE SMALL LETTER YE +13F9; C; 13F1; # CHEROKEE SMALL LETTER YI +13FA; C; 13F2; # CHEROKEE SMALL LETTER YO +13FB; C; 13F3; # CHEROKEE SMALL LETTER YU +13FC; C; 13F4; # CHEROKEE SMALL LETTER YV +13FD; C; 13F5; # CHEROKEE SMALL LETTER MV +1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE +1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE +1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O +1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES +1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE +1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE +1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN +1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT +1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK +1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW +1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW +1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW +1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW +1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA +1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON +1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW +1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS +1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA +1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE +1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW +1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW +1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW +1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE +1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW +1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW +1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE +1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW +1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW +1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW +1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE +1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW +1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE +1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE +1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS +1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW +1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW +1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS +1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE +1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE +1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S +1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S +1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE +1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE +1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE +1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP +1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI +1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA +1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI +1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI +1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE; C; 03B9; # GREEK PROSGEGRAMMENI +1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA +1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA +1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI +1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA +1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI +1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI +1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA +1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126; C; 03C9; # OHM SIGN +212A; C; 006B; # KELVIN SIGN +212B; C; 00E5; # ANGSTROM SIGN +2132; C; 214E; # TURNED CAPITAL F +2160; C; 2170; # ROMAN NUMERAL ONE +2161; C; 2171; # ROMAN NUMERAL TWO +2162; C; 2172; # ROMAN NUMERAL THREE +2163; C; 2173; # ROMAN NUMERAL FOUR +2164; C; 2174; # ROMAN NUMERAL FIVE +2165; C; 2175; # ROMAN NUMERAL SIX +2166; C; 2176; # ROMAN NUMERAL SEVEN +2167; C; 2177; # ROMAN NUMERAL EIGHT +2168; C; 2178; # ROMAN NUMERAL NINE +2169; C; 2179; # ROMAN NUMERAL TEN +216A; C; 217A; # ROMAN NUMERAL ELEVEN +216B; C; 217B; # ROMAN NUMERAL TWELVE +216C; C; 217C; # ROMAN NUMERAL FIFTY +216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED +216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED +216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND +2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED +24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A +24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B +24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C +24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D +24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E +24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F +24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G +24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H +24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I +24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J +24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K +24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L +24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M +24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N +24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O +24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P +24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q +24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R +24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S +24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T +24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U +24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V +24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W +24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X +24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y +24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z +2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU +2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY +2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE +2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI +2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO +2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU +2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE +2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO +2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA +2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE +2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE +2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I +2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI +2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO +2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE +2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE +2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI +2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU +2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI +2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI +2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO +2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO +2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU +2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU +2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU +2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU +2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE +2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA +2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI +2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI +2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA +2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU +2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI +2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI +2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA +2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU +2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS +2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO +2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS +2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA +2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA +2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC +2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A +2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE +2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE +2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL +2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER +2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER +2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA +2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK +2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A +2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA +2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK +2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H +2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL +2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA +2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA +2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA +2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA +2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE +2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU +2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA +2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE +2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE +2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA +2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA +2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA +2C98; C; 2C99; # COPTIC CAPITAL LETTER MI +2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI +2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI +2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O +2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI +2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO +2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA +2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU +2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA +2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI +2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI +2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI +2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU +2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI +2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI +2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI +2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA +2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI +A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA +A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO +A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE +A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA +A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV +A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER +A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU +A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A +A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS +A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN +A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE +A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE +A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL +A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM +A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O +A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O +A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680; C; A681; # CYRILLIC CAPITAL LETTER DWE +A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE +A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE +A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE +A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE +A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE +A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE +A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE +A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE +A694; C; A695; # CYRILLIC CAPITAL LETTER HWE +A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE +A698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O +A69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O +A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726; C; A727; # LATIN CAPITAL LETTER HENG +A728; C; A729; # LATIN CAPITAL LETTER TZ +A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO +A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO +A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732; C; A733; # LATIN CAPITAL LETTER AA +A734; C; A735; # LATIN CAPITAL LETTER AO +A736; C; A737; # LATIN CAPITAL LETTER AU +A738; C; A739; # LATIN CAPITAL LETTER AV +A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C; C; A73D; # LATIN CAPITAL LETTER AY +A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT +A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE +A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746; C; A747; # LATIN CAPITAL LETTER BROKEN L +A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP +A74E; C; A74F; # LATIN CAPITAL LETTER OO +A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH +A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA +A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA +A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760; C; A761; # LATIN CAPITAL LETTER VY +A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z +A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE +A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768; C; A769; # LATIN CAPITAL LETTER VEND +A76A; C; A76B; # LATIN CAPITAL LETTER ET +A76C; C; A76D; # LATIN CAPITAL LETTER IS +A76E; C; A76F; # LATIN CAPITAL LETTER CON +A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D +A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F +A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G +A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G +A780; C; A781; # LATIN CAPITAL LETTER TURNED L +A782; C; A783; # LATIN CAPITAL LETTER INSULAR R +A784; C; A785; # LATIN CAPITAL LETTER INSULAR S +A786; C; A787; # LATIN CAPITAL LETTER INSULAR T +A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO +A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H +A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER +A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR +A796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH +A798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE +A79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE +A79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE +A79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE +A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK +A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E +A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G +A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT +A7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K +A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T +A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL +A7B3; C; AB53; # LATIN CAPITAL LETTER CHI +A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA +A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA +AB70; C; 13A0; # CHEROKEE SMALL LETTER A +AB71; C; 13A1; # CHEROKEE SMALL LETTER E +AB72; C; 13A2; # CHEROKEE SMALL LETTER I +AB73; C; 13A3; # CHEROKEE SMALL LETTER O +AB74; C; 13A4; # CHEROKEE SMALL LETTER U +AB75; C; 13A5; # CHEROKEE SMALL LETTER V +AB76; C; 13A6; # CHEROKEE SMALL LETTER GA +AB77; C; 13A7; # CHEROKEE SMALL LETTER KA +AB78; C; 13A8; # CHEROKEE SMALL LETTER GE +AB79; C; 13A9; # CHEROKEE SMALL LETTER GI +AB7A; C; 13AA; # CHEROKEE SMALL LETTER GO +AB7B; C; 13AB; # CHEROKEE SMALL LETTER GU +AB7C; C; 13AC; # CHEROKEE SMALL LETTER GV +AB7D; C; 13AD; # CHEROKEE SMALL LETTER HA +AB7E; C; 13AE; # CHEROKEE SMALL LETTER HE +AB7F; C; 13AF; # CHEROKEE SMALL LETTER HI +AB80; C; 13B0; # CHEROKEE SMALL LETTER HO +AB81; C; 13B1; # CHEROKEE SMALL LETTER HU +AB82; C; 13B2; # CHEROKEE SMALL LETTER HV +AB83; C; 13B3; # CHEROKEE SMALL LETTER LA +AB84; C; 13B4; # CHEROKEE SMALL LETTER LE +AB85; C; 13B5; # CHEROKEE SMALL LETTER LI +AB86; C; 13B6; # CHEROKEE SMALL LETTER LO +AB87; C; 13B7; # CHEROKEE SMALL LETTER LU +AB88; C; 13B8; # CHEROKEE SMALL LETTER LV +AB89; C; 13B9; # CHEROKEE SMALL LETTER MA +AB8A; C; 13BA; # CHEROKEE SMALL LETTER ME +AB8B; C; 13BB; # CHEROKEE SMALL LETTER MI +AB8C; C; 13BC; # CHEROKEE SMALL LETTER MO +AB8D; C; 13BD; # CHEROKEE SMALL LETTER MU +AB8E; C; 13BE; # CHEROKEE SMALL LETTER NA +AB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA +AB90; C; 13C0; # CHEROKEE SMALL LETTER NAH +AB91; C; 13C1; # CHEROKEE SMALL LETTER NE +AB92; C; 13C2; # CHEROKEE SMALL LETTER NI +AB93; C; 13C3; # CHEROKEE SMALL LETTER NO +AB94; C; 13C4; # CHEROKEE SMALL LETTER NU +AB95; C; 13C5; # CHEROKEE SMALL LETTER NV +AB96; C; 13C6; # CHEROKEE SMALL LETTER QUA +AB97; C; 13C7; # CHEROKEE SMALL LETTER QUE +AB98; C; 13C8; # CHEROKEE SMALL LETTER QUI +AB99; C; 13C9; # CHEROKEE SMALL LETTER QUO +AB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU +AB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV +AB9C; C; 13CC; # CHEROKEE SMALL LETTER SA +AB9D; C; 13CD; # CHEROKEE SMALL LETTER S +AB9E; C; 13CE; # CHEROKEE SMALL LETTER SE +AB9F; C; 13CF; # CHEROKEE SMALL LETTER SI +ABA0; C; 13D0; # CHEROKEE SMALL LETTER SO +ABA1; C; 13D1; # CHEROKEE SMALL LETTER SU +ABA2; C; 13D2; # CHEROKEE SMALL LETTER SV +ABA3; C; 13D3; # CHEROKEE SMALL LETTER DA +ABA4; C; 13D4; # CHEROKEE SMALL LETTER TA +ABA5; C; 13D5; # CHEROKEE SMALL LETTER DE +ABA6; C; 13D6; # CHEROKEE SMALL LETTER TE +ABA7; C; 13D7; # CHEROKEE SMALL LETTER DI +ABA8; C; 13D8; # CHEROKEE SMALL LETTER TI +ABA9; C; 13D9; # CHEROKEE SMALL LETTER DO +ABAA; C; 13DA; # CHEROKEE SMALL LETTER DU +ABAB; C; 13DB; # CHEROKEE SMALL LETTER DV +ABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA +ABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA +ABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE +ABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI +ABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO +ABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU +ABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV +ABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA +ABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE +ABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI +ABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO +ABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU +ABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV +ABB9; C; 13E9; # CHEROKEE SMALL LETTER WA +ABBA; C; 13EA; # CHEROKEE SMALL LETTER WE +ABBB; C; 13EB; # CHEROKEE SMALL LETTER WI +ABBC; C; 13EC; # CHEROKEE SMALL LETTER WO +ABBD; C; 13ED; # CHEROKEE SMALL LETTER WU +ABBE; C; 13EE; # CHEROKEE SMALL LETTER WV +ABBF; C; 13EF; # CHEROKEE SMALL LETTER YA +FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF +FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI +FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL +FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI +FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL +FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T +FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST +FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW +FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH +FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI +FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW +FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH +FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A +FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B +FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C +FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D +FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E +FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F +FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G +FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H +FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I +FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J +FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K +FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L +FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M +FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N +FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O +FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P +FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q +FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R +FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S +FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T +FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U +FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V +FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W +FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X +FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z +10400; C; 10428; # DESERET CAPITAL LETTER LONG I +10401; C; 10429; # DESERET CAPITAL LETTER LONG E +10402; C; 1042A; # DESERET CAPITAL LETTER LONG A +10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH +10404; C; 1042C; # DESERET CAPITAL LETTER LONG O +10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO +10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I +10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E +10408; C; 10430; # DESERET CAPITAL LETTER SHORT A +10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH +1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O +1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO +1040C; C; 10434; # DESERET CAPITAL LETTER AY +1040D; C; 10435; # DESERET CAPITAL LETTER OW +1040E; C; 10436; # DESERET CAPITAL LETTER WU +1040F; C; 10437; # DESERET CAPITAL LETTER YEE +10410; C; 10438; # DESERET CAPITAL LETTER H +10411; C; 10439; # DESERET CAPITAL LETTER PEE +10412; C; 1043A; # DESERET CAPITAL LETTER BEE +10413; C; 1043B; # DESERET CAPITAL LETTER TEE +10414; C; 1043C; # DESERET CAPITAL LETTER DEE +10415; C; 1043D; # DESERET CAPITAL LETTER CHEE +10416; C; 1043E; # DESERET CAPITAL LETTER JEE +10417; C; 1043F; # DESERET CAPITAL LETTER KAY +10418; C; 10440; # DESERET CAPITAL LETTER GAY +10419; C; 10441; # DESERET CAPITAL LETTER EF +1041A; C; 10442; # DESERET CAPITAL LETTER VEE +1041B; C; 10443; # DESERET CAPITAL LETTER ETH +1041C; C; 10444; # DESERET CAPITAL LETTER THEE +1041D; C; 10445; # DESERET CAPITAL LETTER ES +1041E; C; 10446; # DESERET CAPITAL LETTER ZEE +1041F; C; 10447; # DESERET CAPITAL LETTER ESH +10420; C; 10448; # DESERET CAPITAL LETTER ZHEE +10421; C; 10449; # DESERET CAPITAL LETTER ER +10422; C; 1044A; # DESERET CAPITAL LETTER EL +10423; C; 1044B; # DESERET CAPITAL LETTER EM +10424; C; 1044C; # DESERET CAPITAL LETTER EN +10425; C; 1044D; # DESERET CAPITAL LETTER ENG +10426; C; 1044E; # DESERET CAPITAL LETTER OI +10427; C; 1044F; # DESERET CAPITAL LETTER EW +104B0; C; 104D8; # OSAGE CAPITAL LETTER A +104B1; C; 104D9; # OSAGE CAPITAL LETTER AI +104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN +104B3; C; 104DB; # OSAGE CAPITAL LETTER AH +104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA +104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA +104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA +104B7; C; 104DF; # OSAGE CAPITAL LETTER E +104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN +104B9; C; 104E1; # OSAGE CAPITAL LETTER HA +104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA +104BB; C; 104E3; # OSAGE CAPITAL LETTER I +104BC; C; 104E4; # OSAGE CAPITAL LETTER KA +104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA +104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA +104BF; C; 104E7; # OSAGE CAPITAL LETTER LA +104C0; C; 104E8; # OSAGE CAPITAL LETTER MA +104C1; C; 104E9; # OSAGE CAPITAL LETTER NA +104C2; C; 104EA; # OSAGE CAPITAL LETTER O +104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN +104C4; C; 104EC; # OSAGE CAPITAL LETTER PA +104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA +104C6; C; 104EE; # OSAGE CAPITAL LETTER SA +104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA +104C8; C; 104F0; # OSAGE CAPITAL LETTER TA +104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA +104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA +104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA +104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA +104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA +104CE; C; 104F6; # OSAGE CAPITAL LETTER U +104CF; C; 104F7; # OSAGE CAPITAL LETTER WA +104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA +104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA +104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA +104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA +10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A +10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA +10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB +10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB +10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC +10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC +10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS +10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED +10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND +10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E +10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E +10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE +10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF +10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG +10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY +10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH +10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I +10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II +10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ +10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK +10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK +10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK +10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL +10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY +10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM +10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN +10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY +10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O +10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO +10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE +10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE +10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE +10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP +10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP +10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER +10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER +10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES +10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ +10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET +10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT +10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY +10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH +10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U +10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU +10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE +10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE +10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV +10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ +10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS +10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN +10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US +118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA +118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A +118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI +118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU +118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA +118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO +118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II +118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU +118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E +118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O +118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG +118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA +118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO +118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY +118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ +118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC +118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN +118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD +118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE +118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG +118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA +118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT +118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM +118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU +118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU +118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO +118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO +118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR +118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR +118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU +118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII +118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO +1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF +1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI +1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM +1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM +1E904; C; 1E926; # ADLAM CAPITAL LETTER BA +1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE +1E906; C; 1E928; # ADLAM CAPITAL LETTER PE +1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE +1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA +1E909; C; 1E92B; # ADLAM CAPITAL LETTER E +1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA +1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I +1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O +1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA +1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE +1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW +1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN +1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF +1E912; C; 1E934; # ADLAM CAPITAL LETTER YA +1E913; C; 1E935; # ADLAM CAPITAL LETTER U +1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM +1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI +1E916; C; 1E938; # ADLAM CAPITAL LETTER HA +1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF +1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA +1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA +1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU +1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA +1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA +1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA +1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE +1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL +1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO +1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA +# +# EOF diff --git a/src/case_fold_switch.inc b/src/case_fold_switch.inc index 70fdd755fd..28e223e14d 100644 --- a/src/case_fold_switch.inc +++ b/src/case_fold_switch.inc @@ -657,9 +657,60 @@ case 0x0232: bufpush(0x0233); break; + case 0x023A: + bufpush(0x2C65); + break; + case 0x023B: + bufpush(0x023C); + break; + case 0x023D: + bufpush(0x019A); + break; + case 0x023E: + bufpush(0x2C66); + break; + case 0x0241: + bufpush(0x0242); + break; + case 0x0243: + bufpush(0x0180); + break; + case 0x0244: + bufpush(0x0289); + break; + case 0x0245: + bufpush(0x028C); + break; + case 0x0246: + bufpush(0x0247); + break; + case 0x0248: + bufpush(0x0249); + break; + case 0x024A: + bufpush(0x024B); + break; + case 0x024C: + bufpush(0x024D); + break; + case 0x024E: + bufpush(0x024F); + break; case 0x0345: bufpush(0x03B9); break; + case 0x0370: + bufpush(0x0371); + break; + case 0x0372: + bufpush(0x0373); + break; + case 0x0376: + bufpush(0x0377); + break; + case 0x037F: + bufpush(0x03F3); + break; case 0x0386: bufpush(0x03AC); break; @@ -772,6 +823,9 @@ case 0x03C2: bufpush(0x03C3); break; + case 0x03CF: + bufpush(0x03D7); + break; case 0x03D0: bufpush(0x03B2); break; @@ -826,15 +880,30 @@ case 0x03F1: bufpush(0x03C1); break; - case 0x03F2: - bufpush(0x03C3); - break; case 0x03F4: bufpush(0x03B8); break; case 0x03F5: bufpush(0x03B5); break; + case 0x03F7: + bufpush(0x03F8); + break; + case 0x03F9: + bufpush(0x03F2); + break; + case 0x03FA: + bufpush(0x03FB); + break; + case 0x03FD: + bufpush(0x037B); + break; + case 0x03FE: + bufpush(0x037C); + break; + case 0x03FF: + bufpush(0x037D); + break; case 0x0400: bufpush(0x0450); break; @@ -1111,6 +1180,9 @@ case 0x04BE: bufpush(0x04BF); break; + case 0x04C0: + bufpush(0x04CF); + break; case 0x04C1: bufpush(0x04C2); break; @@ -1189,9 +1261,21 @@ case 0x04F4: bufpush(0x04F5); break; + case 0x04F6: + bufpush(0x04F7); + break; case 0x04F8: bufpush(0x04F9); break; + case 0x04FA: + bufpush(0x04FB); + break; + case 0x04FC: + bufpush(0x04FD); + break; + case 0x04FE: + bufpush(0x04FF); + break; case 0x0500: bufpush(0x0501); break; @@ -1216,6 +1300,54 @@ case 0x050E: bufpush(0x050F); break; + case 0x0510: + bufpush(0x0511); + break; + case 0x0512: + bufpush(0x0513); + break; + case 0x0514: + bufpush(0x0515); + break; + case 0x0516: + bufpush(0x0517); + break; + case 0x0518: + bufpush(0x0519); + break; + case 0x051A: + bufpush(0x051B); + break; + case 0x051C: + bufpush(0x051D); + break; + case 0x051E: + bufpush(0x051F); + break; + case 0x0520: + bufpush(0x0521); + break; + case 0x0522: + bufpush(0x0523); + break; + case 0x0524: + bufpush(0x0525); + break; + case 0x0526: + bufpush(0x0527); + break; + case 0x0528: + bufpush(0x0529); + break; + case 0x052A: + bufpush(0x052B); + break; + case 0x052C: + bufpush(0x052D); + break; + case 0x052E: + bufpush(0x052F); + break; case 0x0531: bufpush(0x0561); break; @@ -1334,6 +1466,171 @@ bufpush(0x0565); bufpush(0x0582); break; + case 0x10A0: + bufpush(0x2D00); + break; + case 0x10A1: + bufpush(0x2D01); + break; + case 0x10A2: + bufpush(0x2D02); + break; + case 0x10A3: + bufpush(0x2D03); + break; + case 0x10A4: + bufpush(0x2D04); + break; + case 0x10A5: + bufpush(0x2D05); + break; + case 0x10A6: + bufpush(0x2D06); + break; + case 0x10A7: + bufpush(0x2D07); + break; + case 0x10A8: + bufpush(0x2D08); + break; + case 0x10A9: + bufpush(0x2D09); + break; + case 0x10AA: + bufpush(0x2D0A); + break; + case 0x10AB: + bufpush(0x2D0B); + break; + case 0x10AC: + bufpush(0x2D0C); + break; + case 0x10AD: + bufpush(0x2D0D); + break; + case 0x10AE: + bufpush(0x2D0E); + break; + case 0x10AF: + bufpush(0x2D0F); + break; + case 0x10B0: + bufpush(0x2D10); + break; + case 0x10B1: + bufpush(0x2D11); + break; + case 0x10B2: + bufpush(0x2D12); + break; + case 0x10B3: + bufpush(0x2D13); + break; + case 0x10B4: + bufpush(0x2D14); + break; + case 0x10B5: + bufpush(0x2D15); + break; + case 0x10B6: + bufpush(0x2D16); + break; + case 0x10B7: + bufpush(0x2D17); + break; + case 0x10B8: + bufpush(0x2D18); + break; + case 0x10B9: + bufpush(0x2D19); + break; + case 0x10BA: + bufpush(0x2D1A); + break; + case 0x10BB: + bufpush(0x2D1B); + break; + case 0x10BC: + bufpush(0x2D1C); + break; + case 0x10BD: + bufpush(0x2D1D); + break; + case 0x10BE: + bufpush(0x2D1E); + break; + case 0x10BF: + bufpush(0x2D1F); + break; + case 0x10C0: + bufpush(0x2D20); + break; + case 0x10C1: + bufpush(0x2D21); + break; + case 0x10C2: + bufpush(0x2D22); + break; + case 0x10C3: + bufpush(0x2D23); + break; + case 0x10C4: + bufpush(0x2D24); + break; + case 0x10C5: + bufpush(0x2D25); + break; + case 0x10C7: + bufpush(0x2D27); + break; + case 0x10CD: + bufpush(0x2D2D); + break; + case 0x13F8: + bufpush(0x13F0); + break; + case 0x13F9: + bufpush(0x13F1); + break; + case 0x13FA: + bufpush(0x13F2); + break; + case 0x13FB: + bufpush(0x13F3); + break; + case 0x13FC: + bufpush(0x13F4); + break; + case 0x13FD: + bufpush(0x13F5); + break; + case 0x1C80: + bufpush(0x0432); + break; + case 0x1C81: + bufpush(0x0434); + break; + case 0x1C82: + bufpush(0x043E); + break; + case 0x1C83: + bufpush(0x0441); + break; + case 0x1C84: + bufpush(0x0442); + break; + case 0x1C85: + bufpush(0x0442); + break; + case 0x1C86: + bufpush(0x044A); + break; + case 0x1C87: + bufpush(0x0463); + break; + case 0x1C88: + bufpush(0xA64B); + break; case 0x1E00: bufpush(0x1E01); break; @@ -1582,6 +1879,10 @@ case 0x1E9B: bufpush(0x1E61); break; + case 0x1E9E: + bufpush(0x0073); + bufpush(0x0073); + break; case 0x1EA0: bufpush(0x1EA1); break; @@ -1717,6 +2018,15 @@ case 0x1EF8: bufpush(0x1EF9); break; + case 0x1EFA: + bufpush(0x1EFB); + break; + case 0x1EFC: + bufpush(0x1EFD); + break; + case 0x1EFE: + bufpush(0x1EFF); + break; case 0x1F08: bufpush(0x1F00); break; @@ -2264,6 +2574,9 @@ case 0x212B: bufpush(0x00E5); break; + case 0x2132: + bufpush(0x214E); + break; case 0x2160: bufpush(0x2170); break; @@ -2312,6 +2625,9 @@ case 0x216F: bufpush(0x217F); break; + case 0x2183: + bufpush(0x2184); + break; case 0x24B6: bufpush(0x24D0); break; @@ -2390,205 +2706,1114 @@ case 0x24CF: bufpush(0x24E9); break; - case 0xFB00: - bufpush(0x0066); - bufpush(0x0066); + case 0x2C00: + bufpush(0x2C30); break; - case 0xFB01: - bufpush(0x0066); - bufpush(0x0069); + case 0x2C01: + bufpush(0x2C31); break; - case 0xFB02: - bufpush(0x0066); - bufpush(0x006C); + case 0x2C02: + bufpush(0x2C32); break; - case 0xFB03: - bufpush(0x0066); - bufpush(0x0066); - bufpush(0x0069); + case 0x2C03: + bufpush(0x2C33); break; - case 0xFB04: - bufpush(0x0066); - bufpush(0x0066); - bufpush(0x006C); + case 0x2C04: + bufpush(0x2C34); break; - case 0xFB05: - bufpush(0x0073); - bufpush(0x0074); + case 0x2C05: + bufpush(0x2C35); break; - case 0xFB06: - bufpush(0x0073); - bufpush(0x0074); + case 0x2C06: + bufpush(0x2C36); break; - case 0xFB13: - bufpush(0x0574); - bufpush(0x0576); + case 0x2C07: + bufpush(0x2C37); break; - case 0xFB14: - bufpush(0x0574); - bufpush(0x0565); + case 0x2C08: + bufpush(0x2C38); break; - case 0xFB15: - bufpush(0x0574); - bufpush(0x056B); + case 0x2C09: + bufpush(0x2C39); break; - case 0xFB16: - bufpush(0x057E); - bufpush(0x0576); + case 0x2C0A: + bufpush(0x2C3A); break; - case 0xFB17: - bufpush(0x0574); - bufpush(0x056D); + case 0x2C0B: + bufpush(0x2C3B); break; - case 0xFF21: - bufpush(0xFF41); + case 0x2C0C: + bufpush(0x2C3C); break; - case 0xFF22: - bufpush(0xFF42); + case 0x2C0D: + bufpush(0x2C3D); break; - case 0xFF23: - bufpush(0xFF43); + case 0x2C0E: + bufpush(0x2C3E); break; - case 0xFF24: - bufpush(0xFF44); + case 0x2C0F: + bufpush(0x2C3F); break; - case 0xFF25: - bufpush(0xFF45); + case 0x2C10: + bufpush(0x2C40); break; - case 0xFF26: - bufpush(0xFF46); + case 0x2C11: + bufpush(0x2C41); break; - case 0xFF27: - bufpush(0xFF47); + case 0x2C12: + bufpush(0x2C42); break; - case 0xFF28: - bufpush(0xFF48); + case 0x2C13: + bufpush(0x2C43); break; - case 0xFF29: - bufpush(0xFF49); + case 0x2C14: + bufpush(0x2C44); break; - case 0xFF2A: - bufpush(0xFF4A); + case 0x2C15: + bufpush(0x2C45); break; - case 0xFF2B: - bufpush(0xFF4B); + case 0x2C16: + bufpush(0x2C46); break; - case 0xFF2C: - bufpush(0xFF4C); + case 0x2C17: + bufpush(0x2C47); break; - case 0xFF2D: - bufpush(0xFF4D); + case 0x2C18: + bufpush(0x2C48); break; - case 0xFF2E: - bufpush(0xFF4E); + case 0x2C19: + bufpush(0x2C49); break; - case 0xFF2F: - bufpush(0xFF4F); + case 0x2C1A: + bufpush(0x2C4A); break; - case 0xFF30: - bufpush(0xFF50); + case 0x2C1B: + bufpush(0x2C4B); break; - case 0xFF31: - bufpush(0xFF51); + case 0x2C1C: + bufpush(0x2C4C); break; - case 0xFF32: - bufpush(0xFF52); + case 0x2C1D: + bufpush(0x2C4D); break; - case 0xFF33: - bufpush(0xFF53); + case 0x2C1E: + bufpush(0x2C4E); break; - case 0xFF34: - bufpush(0xFF54); + case 0x2C1F: + bufpush(0x2C4F); break; - case 0xFF35: - bufpush(0xFF55); + case 0x2C20: + bufpush(0x2C50); break; - case 0xFF36: - bufpush(0xFF56); + case 0x2C21: + bufpush(0x2C51); break; - case 0xFF37: - bufpush(0xFF57); + case 0x2C22: + bufpush(0x2C52); break; - case 0xFF38: - bufpush(0xFF58); + case 0x2C23: + bufpush(0x2C53); break; - case 0xFF39: - bufpush(0xFF59); + case 0x2C24: + bufpush(0x2C54); break; - case 0xFF3A: - bufpush(0xFF5A); + case 0x2C25: + bufpush(0x2C55); break; - case 0x10400: - bufpush(0x10428); + case 0x2C26: + bufpush(0x2C56); break; - case 0x10401: - bufpush(0x10429); + case 0x2C27: + bufpush(0x2C57); break; - case 0x10402: - bufpush(0x1042A); + case 0x2C28: + bufpush(0x2C58); break; - case 0x10403: - bufpush(0x1042B); + case 0x2C29: + bufpush(0x2C59); break; - case 0x10404: - bufpush(0x1042C); + case 0x2C2A: + bufpush(0x2C5A); break; - case 0x10405: - bufpush(0x1042D); + case 0x2C2B: + bufpush(0x2C5B); break; - case 0x10406: - bufpush(0x1042E); + case 0x2C2C: + bufpush(0x2C5C); break; - case 0x10407: - bufpush(0x1042F); + case 0x2C2D: + bufpush(0x2C5D); break; - case 0x10408: - bufpush(0x10430); + case 0x2C2E: + bufpush(0x2C5E); break; - case 0x10409: - bufpush(0x10431); + case 0x2C60: + bufpush(0x2C61); break; - case 0x1040A: - bufpush(0x10432); + case 0x2C62: + bufpush(0x026B); break; - case 0x1040B: - bufpush(0x10433); + case 0x2C63: + bufpush(0x1D7D); break; - case 0x1040C: - bufpush(0x10434); + case 0x2C64: + bufpush(0x027D); break; - case 0x1040D: - bufpush(0x10435); + case 0x2C67: + bufpush(0x2C68); break; - case 0x1040E: - bufpush(0x10436); + case 0x2C69: + bufpush(0x2C6A); break; - case 0x1040F: - bufpush(0x10437); + case 0x2C6B: + bufpush(0x2C6C); break; - case 0x10410: - bufpush(0x10438); + case 0x2C6D: + bufpush(0x0251); break; - case 0x10411: - bufpush(0x10439); + case 0x2C6E: + bufpush(0x0271); break; - case 0x10412: - bufpush(0x1043A); + case 0x2C6F: + bufpush(0x0250); break; - case 0x10413: - bufpush(0x1043B); + case 0x2C70: + bufpush(0x0252); break; - case 0x10414: - bufpush(0x1043C); + case 0x2C72: + bufpush(0x2C73); break; - case 0x10415: - bufpush(0x1043D); + case 0x2C75: + bufpush(0x2C76); break; - case 0x10416: - bufpush(0x1043E); + case 0x2C7E: + bufpush(0x023F); break; - case 0x10417: - bufpush(0x1043F); + case 0x2C7F: + bufpush(0x0240); + break; + case 0x2C80: + bufpush(0x2C81); + break; + case 0x2C82: + bufpush(0x2C83); + break; + case 0x2C84: + bufpush(0x2C85); + break; + case 0x2C86: + bufpush(0x2C87); + break; + case 0x2C88: + bufpush(0x2C89); + break; + case 0x2C8A: + bufpush(0x2C8B); + break; + case 0x2C8C: + bufpush(0x2C8D); + break; + case 0x2C8E: + bufpush(0x2C8F); + break; + case 0x2C90: + bufpush(0x2C91); + break; + case 0x2C92: + bufpush(0x2C93); + break; + case 0x2C94: + bufpush(0x2C95); + break; + case 0x2C96: + bufpush(0x2C97); + break; + case 0x2C98: + bufpush(0x2C99); + break; + case 0x2C9A: + bufpush(0x2C9B); + break; + case 0x2C9C: + bufpush(0x2C9D); + break; + case 0x2C9E: + bufpush(0x2C9F); + break; + case 0x2CA0: + bufpush(0x2CA1); + break; + case 0x2CA2: + bufpush(0x2CA3); + break; + case 0x2CA4: + bufpush(0x2CA5); + break; + case 0x2CA6: + bufpush(0x2CA7); + break; + case 0x2CA8: + bufpush(0x2CA9); + break; + case 0x2CAA: + bufpush(0x2CAB); + break; + case 0x2CAC: + bufpush(0x2CAD); + break; + case 0x2CAE: + bufpush(0x2CAF); + break; + case 0x2CB0: + bufpush(0x2CB1); + break; + case 0x2CB2: + bufpush(0x2CB3); + break; + case 0x2CB4: + bufpush(0x2CB5); + break; + case 0x2CB6: + bufpush(0x2CB7); + break; + case 0x2CB8: + bufpush(0x2CB9); + break; + case 0x2CBA: + bufpush(0x2CBB); + break; + case 0x2CBC: + bufpush(0x2CBD); + break; + case 0x2CBE: + bufpush(0x2CBF); + break; + case 0x2CC0: + bufpush(0x2CC1); + break; + case 0x2CC2: + bufpush(0x2CC3); + break; + case 0x2CC4: + bufpush(0x2CC5); + break; + case 0x2CC6: + bufpush(0x2CC7); + break; + case 0x2CC8: + bufpush(0x2CC9); + break; + case 0x2CCA: + bufpush(0x2CCB); + break; + case 0x2CCC: + bufpush(0x2CCD); + break; + case 0x2CCE: + bufpush(0x2CCF); + break; + case 0x2CD0: + bufpush(0x2CD1); + break; + case 0x2CD2: + bufpush(0x2CD3); + break; + case 0x2CD4: + bufpush(0x2CD5); + break; + case 0x2CD6: + bufpush(0x2CD7); + break; + case 0x2CD8: + bufpush(0x2CD9); + break; + case 0x2CDA: + bufpush(0x2CDB); + break; + case 0x2CDC: + bufpush(0x2CDD); + break; + case 0x2CDE: + bufpush(0x2CDF); + break; + case 0x2CE0: + bufpush(0x2CE1); + break; + case 0x2CE2: + bufpush(0x2CE3); + break; + case 0x2CEB: + bufpush(0x2CEC); + break; + case 0x2CED: + bufpush(0x2CEE); + break; + case 0x2CF2: + bufpush(0x2CF3); + break; + case 0xA640: + bufpush(0xA641); + break; + case 0xA642: + bufpush(0xA643); + break; + case 0xA644: + bufpush(0xA645); + break; + case 0xA646: + bufpush(0xA647); + break; + case 0xA648: + bufpush(0xA649); + break; + case 0xA64A: + bufpush(0xA64B); + break; + case 0xA64C: + bufpush(0xA64D); + break; + case 0xA64E: + bufpush(0xA64F); + break; + case 0xA650: + bufpush(0xA651); + break; + case 0xA652: + bufpush(0xA653); + break; + case 0xA654: + bufpush(0xA655); + break; + case 0xA656: + bufpush(0xA657); + break; + case 0xA658: + bufpush(0xA659); + break; + case 0xA65A: + bufpush(0xA65B); + break; + case 0xA65C: + bufpush(0xA65D); + break; + case 0xA65E: + bufpush(0xA65F); + break; + case 0xA660: + bufpush(0xA661); + break; + case 0xA662: + bufpush(0xA663); + break; + case 0xA664: + bufpush(0xA665); + break; + case 0xA666: + bufpush(0xA667); + break; + case 0xA668: + bufpush(0xA669); + break; + case 0xA66A: + bufpush(0xA66B); + break; + case 0xA66C: + bufpush(0xA66D); + break; + case 0xA680: + bufpush(0xA681); + break; + case 0xA682: + bufpush(0xA683); + break; + case 0xA684: + bufpush(0xA685); + break; + case 0xA686: + bufpush(0xA687); + break; + case 0xA688: + bufpush(0xA689); + break; + case 0xA68A: + bufpush(0xA68B); + break; + case 0xA68C: + bufpush(0xA68D); + break; + case 0xA68E: + bufpush(0xA68F); + break; + case 0xA690: + bufpush(0xA691); + break; + case 0xA692: + bufpush(0xA693); + break; + case 0xA694: + bufpush(0xA695); + break; + case 0xA696: + bufpush(0xA697); + break; + case 0xA698: + bufpush(0xA699); + break; + case 0xA69A: + bufpush(0xA69B); + break; + case 0xA722: + bufpush(0xA723); + break; + case 0xA724: + bufpush(0xA725); + break; + case 0xA726: + bufpush(0xA727); + break; + case 0xA728: + bufpush(0xA729); + break; + case 0xA72A: + bufpush(0xA72B); + break; + case 0xA72C: + bufpush(0xA72D); + break; + case 0xA72E: + bufpush(0xA72F); + break; + case 0xA732: + bufpush(0xA733); + break; + case 0xA734: + bufpush(0xA735); + break; + case 0xA736: + bufpush(0xA737); + break; + case 0xA738: + bufpush(0xA739); + break; + case 0xA73A: + bufpush(0xA73B); + break; + case 0xA73C: + bufpush(0xA73D); + break; + case 0xA73E: + bufpush(0xA73F); + break; + case 0xA740: + bufpush(0xA741); + break; + case 0xA742: + bufpush(0xA743); + break; + case 0xA744: + bufpush(0xA745); + break; + case 0xA746: + bufpush(0xA747); + break; + case 0xA748: + bufpush(0xA749); + break; + case 0xA74A: + bufpush(0xA74B); + break; + case 0xA74C: + bufpush(0xA74D); + break; + case 0xA74E: + bufpush(0xA74F); + break; + case 0xA750: + bufpush(0xA751); + break; + case 0xA752: + bufpush(0xA753); + break; + case 0xA754: + bufpush(0xA755); + break; + case 0xA756: + bufpush(0xA757); + break; + case 0xA758: + bufpush(0xA759); + break; + case 0xA75A: + bufpush(0xA75B); + break; + case 0xA75C: + bufpush(0xA75D); + break; + case 0xA75E: + bufpush(0xA75F); + break; + case 0xA760: + bufpush(0xA761); + break; + case 0xA762: + bufpush(0xA763); + break; + case 0xA764: + bufpush(0xA765); + break; + case 0xA766: + bufpush(0xA767); + break; + case 0xA768: + bufpush(0xA769); + break; + case 0xA76A: + bufpush(0xA76B); + break; + case 0xA76C: + bufpush(0xA76D); + break; + case 0xA76E: + bufpush(0xA76F); + break; + case 0xA779: + bufpush(0xA77A); + break; + case 0xA77B: + bufpush(0xA77C); + break; + case 0xA77D: + bufpush(0x1D79); + break; + case 0xA77E: + bufpush(0xA77F); + break; + case 0xA780: + bufpush(0xA781); + break; + case 0xA782: + bufpush(0xA783); + break; + case 0xA784: + bufpush(0xA785); + break; + case 0xA786: + bufpush(0xA787); + break; + case 0xA78B: + bufpush(0xA78C); + break; + case 0xA78D: + bufpush(0x0265); + break; + case 0xA790: + bufpush(0xA791); + break; + case 0xA792: + bufpush(0xA793); + break; + case 0xA796: + bufpush(0xA797); + break; + case 0xA798: + bufpush(0xA799); + break; + case 0xA79A: + bufpush(0xA79B); + break; + case 0xA79C: + bufpush(0xA79D); + break; + case 0xA79E: + bufpush(0xA79F); + break; + case 0xA7A0: + bufpush(0xA7A1); + break; + case 0xA7A2: + bufpush(0xA7A3); + break; + case 0xA7A4: + bufpush(0xA7A5); + break; + case 0xA7A6: + bufpush(0xA7A7); + break; + case 0xA7A8: + bufpush(0xA7A9); + break; + case 0xA7AA: + bufpush(0x0266); + break; + case 0xA7AB: + bufpush(0x025C); + break; + case 0xA7AC: + bufpush(0x0261); + break; + case 0xA7AD: + bufpush(0x026C); + break; + case 0xA7AE: + bufpush(0x026A); + break; + case 0xA7B0: + bufpush(0x029E); + break; + case 0xA7B1: + bufpush(0x0287); + break; + case 0xA7B2: + bufpush(0x029D); + break; + case 0xA7B3: + bufpush(0xAB53); + break; + case 0xA7B4: + bufpush(0xA7B5); + break; + case 0xA7B6: + bufpush(0xA7B7); + break; + case 0xAB70: + bufpush(0x13A0); + break; + case 0xAB71: + bufpush(0x13A1); + break; + case 0xAB72: + bufpush(0x13A2); + break; + case 0xAB73: + bufpush(0x13A3); + break; + case 0xAB74: + bufpush(0x13A4); + break; + case 0xAB75: + bufpush(0x13A5); + break; + case 0xAB76: + bufpush(0x13A6); + break; + case 0xAB77: + bufpush(0x13A7); + break; + case 0xAB78: + bufpush(0x13A8); + break; + case 0xAB79: + bufpush(0x13A9); + break; + case 0xAB7A: + bufpush(0x13AA); + break; + case 0xAB7B: + bufpush(0x13AB); + break; + case 0xAB7C: + bufpush(0x13AC); + break; + case 0xAB7D: + bufpush(0x13AD); + break; + case 0xAB7E: + bufpush(0x13AE); + break; + case 0xAB7F: + bufpush(0x13AF); + break; + case 0xAB80: + bufpush(0x13B0); + break; + case 0xAB81: + bufpush(0x13B1); + break; + case 0xAB82: + bufpush(0x13B2); + break; + case 0xAB83: + bufpush(0x13B3); + break; + case 0xAB84: + bufpush(0x13B4); + break; + case 0xAB85: + bufpush(0x13B5); + break; + case 0xAB86: + bufpush(0x13B6); + break; + case 0xAB87: + bufpush(0x13B7); + break; + case 0xAB88: + bufpush(0x13B8); + break; + case 0xAB89: + bufpush(0x13B9); + break; + case 0xAB8A: + bufpush(0x13BA); + break; + case 0xAB8B: + bufpush(0x13BB); + break; + case 0xAB8C: + bufpush(0x13BC); + break; + case 0xAB8D: + bufpush(0x13BD); + break; + case 0xAB8E: + bufpush(0x13BE); + break; + case 0xAB8F: + bufpush(0x13BF); + break; + case 0xAB90: + bufpush(0x13C0); + break; + case 0xAB91: + bufpush(0x13C1); + break; + case 0xAB92: + bufpush(0x13C2); + break; + case 0xAB93: + bufpush(0x13C3); + break; + case 0xAB94: + bufpush(0x13C4); + break; + case 0xAB95: + bufpush(0x13C5); + break; + case 0xAB96: + bufpush(0x13C6); + break; + case 0xAB97: + bufpush(0x13C7); + break; + case 0xAB98: + bufpush(0x13C8); + break; + case 0xAB99: + bufpush(0x13C9); + break; + case 0xAB9A: + bufpush(0x13CA); + break; + case 0xAB9B: + bufpush(0x13CB); + break; + case 0xAB9C: + bufpush(0x13CC); + break; + case 0xAB9D: + bufpush(0x13CD); + break; + case 0xAB9E: + bufpush(0x13CE); + break; + case 0xAB9F: + bufpush(0x13CF); + break; + case 0xABA0: + bufpush(0x13D0); + break; + case 0xABA1: + bufpush(0x13D1); + break; + case 0xABA2: + bufpush(0x13D2); + break; + case 0xABA3: + bufpush(0x13D3); + break; + case 0xABA4: + bufpush(0x13D4); + break; + case 0xABA5: + bufpush(0x13D5); + break; + case 0xABA6: + bufpush(0x13D6); + break; + case 0xABA7: + bufpush(0x13D7); + break; + case 0xABA8: + bufpush(0x13D8); + break; + case 0xABA9: + bufpush(0x13D9); + break; + case 0xABAA: + bufpush(0x13DA); + break; + case 0xABAB: + bufpush(0x13DB); + break; + case 0xABAC: + bufpush(0x13DC); + break; + case 0xABAD: + bufpush(0x13DD); + break; + case 0xABAE: + bufpush(0x13DE); + break; + case 0xABAF: + bufpush(0x13DF); + break; + case 0xABB0: + bufpush(0x13E0); + break; + case 0xABB1: + bufpush(0x13E1); + break; + case 0xABB2: + bufpush(0x13E2); + break; + case 0xABB3: + bufpush(0x13E3); + break; + case 0xABB4: + bufpush(0x13E4); + break; + case 0xABB5: + bufpush(0x13E5); + break; + case 0xABB6: + bufpush(0x13E6); + break; + case 0xABB7: + bufpush(0x13E7); + break; + case 0xABB8: + bufpush(0x13E8); + break; + case 0xABB9: + bufpush(0x13E9); + break; + case 0xABBA: + bufpush(0x13EA); + break; + case 0xABBB: + bufpush(0x13EB); + break; + case 0xABBC: + bufpush(0x13EC); + break; + case 0xABBD: + bufpush(0x13ED); + break; + case 0xABBE: + bufpush(0x13EE); + break; + case 0xABBF: + bufpush(0x13EF); + break; + case 0xFB00: + bufpush(0x0066); + bufpush(0x0066); + break; + case 0xFB01: + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB02: + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB03: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB04: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB05: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB06: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB13: + bufpush(0x0574); + bufpush(0x0576); + break; + case 0xFB14: + bufpush(0x0574); + bufpush(0x0565); + break; + case 0xFB15: + bufpush(0x0574); + bufpush(0x056B); + break; + case 0xFB16: + bufpush(0x057E); + bufpush(0x0576); + break; + case 0xFB17: + bufpush(0x0574); + bufpush(0x056D); + break; + case 0xFF21: + bufpush(0xFF41); + break; + case 0xFF22: + bufpush(0xFF42); + break; + case 0xFF23: + bufpush(0xFF43); + break; + case 0xFF24: + bufpush(0xFF44); + break; + case 0xFF25: + bufpush(0xFF45); + break; + case 0xFF26: + bufpush(0xFF46); + break; + case 0xFF27: + bufpush(0xFF47); + break; + case 0xFF28: + bufpush(0xFF48); + break; + case 0xFF29: + bufpush(0xFF49); + break; + case 0xFF2A: + bufpush(0xFF4A); + break; + case 0xFF2B: + bufpush(0xFF4B); + break; + case 0xFF2C: + bufpush(0xFF4C); + break; + case 0xFF2D: + bufpush(0xFF4D); + break; + case 0xFF2E: + bufpush(0xFF4E); + break; + case 0xFF2F: + bufpush(0xFF4F); + break; + case 0xFF30: + bufpush(0xFF50); + break; + case 0xFF31: + bufpush(0xFF51); + break; + case 0xFF32: + bufpush(0xFF52); + break; + case 0xFF33: + bufpush(0xFF53); + break; + case 0xFF34: + bufpush(0xFF54); + break; + case 0xFF35: + bufpush(0xFF55); + break; + case 0xFF36: + bufpush(0xFF56); + break; + case 0xFF37: + bufpush(0xFF57); + break; + case 0xFF38: + bufpush(0xFF58); + break; + case 0xFF39: + bufpush(0xFF59); + break; + case 0xFF3A: + bufpush(0xFF5A); + break; + case 0x10400: + bufpush(0x10428); + break; + case 0x10401: + bufpush(0x10429); + break; + case 0x10402: + bufpush(0x1042A); + break; + case 0x10403: + bufpush(0x1042B); + break; + case 0x10404: + bufpush(0x1042C); + break; + case 0x10405: + bufpush(0x1042D); + break; + case 0x10406: + bufpush(0x1042E); + break; + case 0x10407: + bufpush(0x1042F); + break; + case 0x10408: + bufpush(0x10430); + break; + case 0x10409: + bufpush(0x10431); + break; + case 0x1040A: + bufpush(0x10432); + break; + case 0x1040B: + bufpush(0x10433); + break; + case 0x1040C: + bufpush(0x10434); + break; + case 0x1040D: + bufpush(0x10435); + break; + case 0x1040E: + bufpush(0x10436); + break; + case 0x1040F: + bufpush(0x10437); + break; + case 0x10410: + bufpush(0x10438); + break; + case 0x10411: + bufpush(0x10439); + break; + case 0x10412: + bufpush(0x1043A); + break; + case 0x10413: + bufpush(0x1043B); + break; + case 0x10414: + bufpush(0x1043C); + break; + case 0x10415: + bufpush(0x1043D); + break; + case 0x10416: + bufpush(0x1043E); + break; + case 0x10417: + bufpush(0x1043F); break; case 0x10418: bufpush(0x10440); @@ -2632,6 +3857,471 @@ case 0x10425: bufpush(0x1044D); break; + case 0x10426: + bufpush(0x1044E); + break; + case 0x10427: + bufpush(0x1044F); + break; + case 0x104B0: + bufpush(0x104D8); + break; + case 0x104B1: + bufpush(0x104D9); + break; + case 0x104B2: + bufpush(0x104DA); + break; + case 0x104B3: + bufpush(0x104DB); + break; + case 0x104B4: + bufpush(0x104DC); + break; + case 0x104B5: + bufpush(0x104DD); + break; + case 0x104B6: + bufpush(0x104DE); + break; + case 0x104B7: + bufpush(0x104DF); + break; + case 0x104B8: + bufpush(0x104E0); + break; + case 0x104B9: + bufpush(0x104E1); + break; + case 0x104BA: + bufpush(0x104E2); + break; + case 0x104BB: + bufpush(0x104E3); + break; + case 0x104BC: + bufpush(0x104E4); + break; + case 0x104BD: + bufpush(0x104E5); + break; + case 0x104BE: + bufpush(0x104E6); + break; + case 0x104BF: + bufpush(0x104E7); + break; + case 0x104C0: + bufpush(0x104E8); + break; + case 0x104C1: + bufpush(0x104E9); + break; + case 0x104C2: + bufpush(0x104EA); + break; + case 0x104C3: + bufpush(0x104EB); + break; + case 0x104C4: + bufpush(0x104EC); + break; + case 0x104C5: + bufpush(0x104ED); + break; + case 0x104C6: + bufpush(0x104EE); + break; + case 0x104C7: + bufpush(0x104EF); + break; + case 0x104C8: + bufpush(0x104F0); + break; + case 0x104C9: + bufpush(0x104F1); + break; + case 0x104CA: + bufpush(0x104F2); + break; + case 0x104CB: + bufpush(0x104F3); + break; + case 0x104CC: + bufpush(0x104F4); + break; + case 0x104CD: + bufpush(0x104F5); + break; + case 0x104CE: + bufpush(0x104F6); + break; + case 0x104CF: + bufpush(0x104F7); + break; + case 0x104D0: + bufpush(0x104F8); + break; + case 0x104D1: + bufpush(0x104F9); + break; + case 0x104D2: + bufpush(0x104FA); + break; + case 0x104D3: + bufpush(0x104FB); + break; + case 0x10C80: + bufpush(0x10CC0); + break; + case 0x10C81: + bufpush(0x10CC1); + break; + case 0x10C82: + bufpush(0x10CC2); + break; + case 0x10C83: + bufpush(0x10CC3); + break; + case 0x10C84: + bufpush(0x10CC4); + break; + case 0x10C85: + bufpush(0x10CC5); + break; + case 0x10C86: + bufpush(0x10CC6); + break; + case 0x10C87: + bufpush(0x10CC7); + break; + case 0x10C88: + bufpush(0x10CC8); + break; + case 0x10C89: + bufpush(0x10CC9); + break; + case 0x10C8A: + bufpush(0x10CCA); + break; + case 0x10C8B: + bufpush(0x10CCB); + break; + case 0x10C8C: + bufpush(0x10CCC); + break; + case 0x10C8D: + bufpush(0x10CCD); + break; + case 0x10C8E: + bufpush(0x10CCE); + break; + case 0x10C8F: + bufpush(0x10CCF); + break; + case 0x10C90: + bufpush(0x10CD0); + break; + case 0x10C91: + bufpush(0x10CD1); + break; + case 0x10C92: + bufpush(0x10CD2); + break; + case 0x10C93: + bufpush(0x10CD3); + break; + case 0x10C94: + bufpush(0x10CD4); + break; + case 0x10C95: + bufpush(0x10CD5); + break; + case 0x10C96: + bufpush(0x10CD6); + break; + case 0x10C97: + bufpush(0x10CD7); + break; + case 0x10C98: + bufpush(0x10CD8); + break; + case 0x10C99: + bufpush(0x10CD9); + break; + case 0x10C9A: + bufpush(0x10CDA); + break; + case 0x10C9B: + bufpush(0x10CDB); + break; + case 0x10C9C: + bufpush(0x10CDC); + break; + case 0x10C9D: + bufpush(0x10CDD); + break; + case 0x10C9E: + bufpush(0x10CDE); + break; + case 0x10C9F: + bufpush(0x10CDF); + break; + case 0x10CA0: + bufpush(0x10CE0); + break; + case 0x10CA1: + bufpush(0x10CE1); + break; + case 0x10CA2: + bufpush(0x10CE2); + break; + case 0x10CA3: + bufpush(0x10CE3); + break; + case 0x10CA4: + bufpush(0x10CE4); + break; + case 0x10CA5: + bufpush(0x10CE5); + break; + case 0x10CA6: + bufpush(0x10CE6); + break; + case 0x10CA7: + bufpush(0x10CE7); + break; + case 0x10CA8: + bufpush(0x10CE8); + break; + case 0x10CA9: + bufpush(0x10CE9); + break; + case 0x10CAA: + bufpush(0x10CEA); + break; + case 0x10CAB: + bufpush(0x10CEB); + break; + case 0x10CAC: + bufpush(0x10CEC); + break; + case 0x10CAD: + bufpush(0x10CED); + break; + case 0x10CAE: + bufpush(0x10CEE); + break; + case 0x10CAF: + bufpush(0x10CEF); + break; + case 0x10CB0: + bufpush(0x10CF0); + break; + case 0x10CB1: + bufpush(0x10CF1); + break; + case 0x10CB2: + bufpush(0x10CF2); + break; + case 0x118A0: + bufpush(0x118C0); + break; + case 0x118A1: + bufpush(0x118C1); + break; + case 0x118A2: + bufpush(0x118C2); + break; + case 0x118A3: + bufpush(0x118C3); + break; + case 0x118A4: + bufpush(0x118C4); + break; + case 0x118A5: + bufpush(0x118C5); + break; + case 0x118A6: + bufpush(0x118C6); + break; + case 0x118A7: + bufpush(0x118C7); + break; + case 0x118A8: + bufpush(0x118C8); + break; + case 0x118A9: + bufpush(0x118C9); + break; + case 0x118AA: + bufpush(0x118CA); + break; + case 0x118AB: + bufpush(0x118CB); + break; + case 0x118AC: + bufpush(0x118CC); + break; + case 0x118AD: + bufpush(0x118CD); + break; + case 0x118AE: + bufpush(0x118CE); + break; + case 0x118AF: + bufpush(0x118CF); + break; + case 0x118B0: + bufpush(0x118D0); + break; + case 0x118B1: + bufpush(0x118D1); + break; + case 0x118B2: + bufpush(0x118D2); + break; + case 0x118B3: + bufpush(0x118D3); + break; + case 0x118B4: + bufpush(0x118D4); + break; + case 0x118B5: + bufpush(0x118D5); + break; + case 0x118B6: + bufpush(0x118D6); + break; + case 0x118B7: + bufpush(0x118D7); + break; + case 0x118B8: + bufpush(0x118D8); + break; + case 0x118B9: + bufpush(0x118D9); + break; + case 0x118BA: + bufpush(0x118DA); + break; + case 0x118BB: + bufpush(0x118DB); + break; + case 0x118BC: + bufpush(0x118DC); + break; + case 0x118BD: + bufpush(0x118DD); + break; + case 0x118BE: + bufpush(0x118DE); + break; + case 0x118BF: + bufpush(0x118DF); + break; + case 0x1E900: + bufpush(0x1E922); + break; + case 0x1E901: + bufpush(0x1E923); + break; + case 0x1E902: + bufpush(0x1E924); + break; + case 0x1E903: + bufpush(0x1E925); + break; + case 0x1E904: + bufpush(0x1E926); + break; + case 0x1E905: + bufpush(0x1E927); + break; + case 0x1E906: + bufpush(0x1E928); + break; + case 0x1E907: + bufpush(0x1E929); + break; + case 0x1E908: + bufpush(0x1E92A); + break; + case 0x1E909: + bufpush(0x1E92B); + break; + case 0x1E90A: + bufpush(0x1E92C); + break; + case 0x1E90B: + bufpush(0x1E92D); + break; + case 0x1E90C: + bufpush(0x1E92E); + break; + case 0x1E90D: + bufpush(0x1E92F); + break; + case 0x1E90E: + bufpush(0x1E930); + break; + case 0x1E90F: + bufpush(0x1E931); + break; + case 0x1E910: + bufpush(0x1E932); + break; + case 0x1E911: + bufpush(0x1E933); + break; + case 0x1E912: + bufpush(0x1E934); + break; + case 0x1E913: + bufpush(0x1E935); + break; + case 0x1E914: + bufpush(0x1E936); + break; + case 0x1E915: + bufpush(0x1E937); + break; + case 0x1E916: + bufpush(0x1E938); + break; + case 0x1E917: + bufpush(0x1E939); + break; + case 0x1E918: + bufpush(0x1E93A); + break; + case 0x1E919: + bufpush(0x1E93B); + break; + case 0x1E91A: + bufpush(0x1E93C); + break; + case 0x1E91B: + bufpush(0x1E93D); + break; + case 0x1E91C: + bufpush(0x1E93E); + break; + case 0x1E91D: + bufpush(0x1E93F); + break; + case 0x1E91E: + bufpush(0x1E940); + break; + case 0x1E91F: + bufpush(0x1E941); + break; + case 0x1E920: + bufpush(0x1E942); + break; + case 0x1E921: + bufpush(0x1E943); + break; default: bufpush(c); } -- cgit 0.0.5-2-1-g0f52 From 76d39d05996e4b38c7a854740e41a4f3d307fc1c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Dec 2016 14:29:41 +0100 Subject: Fixed some warnings in scanners.re. --- src/scanners.re | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scanners.re b/src/scanners.re index 02b393a79a..9296760e1f 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -41,9 +41,9 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; - unquotedvalue = [^\"'=<>`\x00]+; + unquotedvalue = [^"'=<>`\x00]+; singlequotedvalue = ['][^'\x00]*[']; - doublequotedvalue = [\"][^\"\x00]*[\"]; + doublequotedvalue = ["][^"\x00]*["]; attributevalue = unquotedvalue | singlequotedvalue | doublequotedvalue; -- cgit 0.0.5-2-1-g0f52 From 6068d6e9c73dddf9126c2c64c940ead2bc6e898f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Dec 2016 14:29:49 +0100 Subject: Makefile: use warnings with re2c. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ed580ca34d..b81efc815b 100644 --- a/Makefile +++ b/Makefile @@ -113,7 +113,7 @@ $(SRCDIR)/scanners.c: $(SRCDIR)/scanners.re false; \ ;; \ esac - re2c --case-insensitive -b -i --no-generation-date -8 \ + re2c -W -Werror --case-insensitive -b -i --no-generation-date -8 \ --encoding-policy substitute -o $@ $< $(CLANG_FORMAT) $@ -- cgit 0.0.5-2-1-g0f52 From f46163052e056cdba73347dc1ab130299529abd8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Dec 2016 14:35:46 +0100 Subject: scanners.re - fixed warnings; use * for fallback. --- src/scanners.c | 17169 +++++++++++++++++++++++++----------------------------- src/scanners.re | 43 +- 2 files changed, 7997 insertions(+), 9215 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index e929d21e88..f20f191552 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -28,159 +28,73 @@ bufsize_t _scan_scheme(const unsigned char *p) { { unsigned char yych; - yych = *(marker = p); - if (yych <= 0xC1) { - if (yych <= 'Z') { - if (yych == '\n') - goto yy2; - if (yych <= '@') - goto yy4; - goto yy3; - } else { - if (yych <= '`') - goto yy4; - if (yych <= 'z') - goto yy3; - if (yych <= 0x7F) - goto yy4; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy5; - if (yych <= 0xE0) - goto yy7; - if (yych <= 0xEC) - goto yy8; - goto yy12; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy8; - goto yy9; - } else { - if (yych <= 0xF3) - goto yy10; - if (yych <= 0xF4) - goto yy11; - } - } - } - yy2 : { return 0; } - yy3: + yych = *p; + if (yych <= '@') + goto yy2; + if (yych <= 'Z') + goto yy4; + if (yych <= '`') + goto yy2; + if (yych <= 'z') + goto yy4; + yy2: + ++p; + yy3 : { return 0; } + yy4: yych = *(marker = ++p); if (yych <= '/') { if (yych <= '+') { if (yych <= '*') - goto yy2; - goto yy13; + goto yy3; } else { if (yych <= ',') - goto yy2; - if (yych <= '.') - goto yy13; - goto yy2; + goto yy3; + if (yych >= '/') + goto yy3; } } else { if (yych <= 'Z') { if (yych <= '9') - goto yy13; + goto yy5; if (yych <= '@') - goto yy2; - goto yy13; + goto yy3; } else { if (yych <= '`') - goto yy2; - if (yych <= 'z') - goto yy13; - goto yy2; + goto yy3; + if (yych >= '{') + goto yy3; } } - yy4: - yych = *++p; - goto yy2; yy5: - yych = *++p; - if (yych <= 0x7F) - goto yy6; - if (yych <= 0xBF) - goto yy4; - yy6: - p = marker; - goto yy2; - yy7: - yych = *++p; - if (yych <= 0x9F) - goto yy6; - if (yych <= 0xBF) - goto yy5; - goto yy6; - yy8: - yych = *++p; - if (yych <= 0x7F) - goto yy6; - if (yych <= 0xBF) - goto yy5; - goto yy6; - yy9: - yych = *++p; - if (yych <= 0x8F) - goto yy6; - if (yych <= 0xBF) - goto yy8; - goto yy6; - yy10: - yych = *++p; - if (yych <= 0x7F) - goto yy6; - if (yych <= 0xBF) - goto yy8; - goto yy6; - yy11: - yych = *++p; - if (yych <= 0x7F) - goto yy6; - if (yych <= 0x8F) - goto yy8; - goto yy6; - yy12: - yych = *++p; - if (yych <= 0x7F) - goto yy6; - if (yych <= 0x9F) - goto yy5; - goto yy6; - yy13: yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy16; - goto yy6; + goto yy9; } else { - if (yych == '/') - goto yy6; - goto yy16; + if (yych != '/') + goto yy9; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; - if (yych <= '@') - goto yy6; - goto yy16; + goto yy7; + if (yych >= 'A') + goto yy9; } else { if (yych <= '`') goto yy6; if (yych <= 'z') - goto yy16; - goto yy6; + goto yy9; } } - yy14: + yy6: + p = marker; + goto yy3; + yy7: ++p; { return (bufsize_t)(p - start); } - yy16: + yy9: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -193,7 +107,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -215,7 +129,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -237,7 +151,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -259,7 +173,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -281,7 +195,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -303,7 +217,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -325,7 +239,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -347,7 +261,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -369,7 +283,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -391,7 +305,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -413,7 +327,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -435,7 +349,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -457,7 +371,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -479,7 +393,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -501,7 +415,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -523,7 +437,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -545,7 +459,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -567,7 +481,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -589,7 +503,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -611,7 +525,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -633,7 +547,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -655,7 +569,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -677,7 +591,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -699,7 +613,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -721,7 +635,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -743,7 +657,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -765,7 +679,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -787,7 +701,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -809,7 +723,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy14; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -821,7 +735,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } ++p; if ((yych = *p) == ':') - goto yy14; + goto yy7; goto yy6; } } @@ -854,890 +768,804 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *(marker = p); - if (yych <= 0xC1) { - if (yych <= 'Z') { - if (yych == '\n') - goto yy48; - if (yych <= '@') - goto yy50; - goto yy49; - } else { - if (yych <= '`') - goto yy50; - if (yych <= 'z') - goto yy49; - if (yych <= 0x7F) - goto yy50; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy51; - if (yych <= 0xE0) - goto yy53; - if (yych <= 0xEC) - goto yy54; - goto yy58; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy54; - goto yy55; - } else { - if (yych <= 0xF3) - goto yy56; - if (yych <= 0xF4) - goto yy57; - } - } - } - yy48 : { return 0; } - yy49: + yych = *p; + if (yych <= '@') + goto yy41; + if (yych <= 'Z') + goto yy43; + if (yych <= '`') + goto yy41; + if (yych <= 'z') + goto yy43; + yy41: + ++p; + yy42 : { return 0; } + yy43: yych = *(marker = ++p); if (yych <= '/') { if (yych <= '+') { if (yych <= '*') - goto yy48; - goto yy59; + goto yy42; } else { if (yych <= ',') - goto yy48; - if (yych <= '.') - goto yy59; - goto yy48; + goto yy42; + if (yych >= '/') + goto yy42; } } else { if (yych <= 'Z') { if (yych <= '9') - goto yy59; + goto yy44; if (yych <= '@') - goto yy48; - goto yy59; + goto yy42; } else { if (yych <= '`') - goto yy48; - if (yych <= 'z') - goto yy59; - goto yy48; + goto yy42; + if (yych >= '{') + goto yy42; } } - yy50: - yych = *++p; - goto yy48; - yy51: - yych = *++p; - if (yych <= 0x7F) - goto yy52; - if (yych <= 0xBF) - goto yy50; - yy52: - p = marker; - goto yy48; - yy53: - yych = *++p; - if (yych <= 0x9F) - goto yy52; - if (yych <= 0xBF) - goto yy51; - goto yy52; - yy54: - yych = *++p; - if (yych <= 0x7F) - goto yy52; - if (yych <= 0xBF) - goto yy51; - goto yy52; - yy55: - yych = *++p; - if (yych <= 0x8F) - goto yy52; - if (yych <= 0xBF) - goto yy54; - goto yy52; - yy56: - yych = *++p; - if (yych <= 0x7F) - goto yy52; - if (yych <= 0xBF) - goto yy54; - goto yy52; - yy57: - yych = *++p; - if (yych <= 0x7F) - goto yy52; - if (yych <= 0x8F) - goto yy54; - goto yy52; - yy58: - yych = *++p; - if (yych <= 0x7F) - goto yy52; - if (yych <= 0x9F) - goto yy51; - goto yy52; - yy59: + yy44: yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy62; - goto yy52; + goto yy48; } else { - if (yych == '/') - goto yy52; - goto yy62; + if (yych != '/') + goto yy48; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; - if (yych <= '@') - goto yy52; - goto yy62; + goto yy46; + if (yych >= 'A') + goto yy48; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych <= 'z') - goto yy62; - goto yy52; + goto yy48; } } - yy60: + yy45: + p = marker; + goto yy42; + yy46: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy60; + goto yy46; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '<') - goto yy52; + goto yy45; if (yych <= '>') - goto yy99; - goto yy52; + goto yy85; + goto yy45; } else { if (yych <= 0xDF) - goto yy92; + goto yy78; if (yych <= 0xE0) - goto yy93; - goto yy94; + goto yy79; + goto yy80; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy98; + goto yy84; if (yych <= 0xEF) - goto yy94; - goto yy95; + goto yy80; + goto yy81; } else { if (yych <= 0xF3) - goto yy96; + goto yy82; if (yych <= 0xF4) - goto yy97; - goto yy52; + goto yy83; + goto yy45; } } - yy62: + yy48: yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych <= '9') { if (yych <= ',') { if (yych != '+') - goto yy52; + goto yy45; } else { if (yych == '/') - goto yy52; + goto yy45; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy60; + goto yy46; if (yych <= '@') - goto yy52; + goto yy45; } else { if (yych <= '`') - goto yy52; + goto yy45; if (yych >= '{') - goto yy52; + goto yy45; } } yych = *++p; if (yych == ':') - goto yy60; - goto yy52; - yy92: + goto yy46; + goto yy45; + yy78: ++p; yych = *p; if (yych <= 0x7F) - goto yy52; + goto yy45; if (yych <= 0xBF) - goto yy60; - goto yy52; - yy93: + goto yy46; + goto yy45; + yy79: ++p; yych = *p; if (yych <= 0x9F) - goto yy52; + goto yy45; if (yych <= 0xBF) - goto yy92; - goto yy52; - yy94: + goto yy78; + goto yy45; + yy80: ++p; yych = *p; if (yych <= 0x7F) - goto yy52; + goto yy45; if (yych <= 0xBF) - goto yy92; - goto yy52; - yy95: + goto yy78; + goto yy45; + yy81: ++p; yych = *p; if (yych <= 0x8F) - goto yy52; + goto yy45; if (yych <= 0xBF) - goto yy94; - goto yy52; - yy96: + goto yy80; + goto yy45; + yy82: ++p; yych = *p; if (yych <= 0x7F) - goto yy52; + goto yy45; if (yych <= 0xBF) - goto yy94; - goto yy52; - yy97: + goto yy80; + goto yy45; + yy83: ++p; yych = *p; if (yych <= 0x7F) - goto yy52; + goto yy45; if (yych <= 0x8F) - goto yy94; - goto yy52; - yy98: + goto yy80; + goto yy45; + yy84: ++p; yych = *p; if (yych <= 0x7F) - goto yy52; + goto yy45; if (yych <= 0x9F) - goto yy92; - goto yy52; - yy99: + goto yy78; + goto yy45; + yy85: ++p; { return (bufsize_t)(p - start); } } @@ -1771,309 +1599,230 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *(marker = p); - if (yych <= '?') { - if (yych <= ')') { - if (yych <= ' ') { - if (yych != '\n') - goto yy105; - } else { - if (yych == '"') - goto yy105; - if (yych <= '\'') - goto yy104; - goto yy105; - } + yych = *p; + if (yych <= '9') { + if (yych <= '\'') { + if (yych == '!') + goto yy91; + if (yych >= '#') + goto yy91; } else { - if (yych <= '9') { - if (yych == ',') - goto yy105; - goto yy104; - } else { - if (yych == '=') - goto yy104; - if (yych <= '>') - goto yy105; - goto yy104; - } + if (yych <= ')') + goto yy89; + if (yych != ',') + goto yy91; } } else { - if (yych <= 0xDF) { - if (yych <= ']') { - if (yych <= '@') - goto yy105; - if (yych <= 'Z') - goto yy104; - goto yy105; - } else { - if (yych <= '~') - goto yy104; - if (yych <= 0x7F) - goto yy105; - if (yych >= 0xC2) - goto yy106; - } + if (yych <= '?') { + if (yych == '=') + goto yy91; + if (yych >= '?') + goto yy91; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy108; - if (yych == 0xED) - goto yy113; - goto yy109; + if (yych <= 'Z') { + if (yych >= 'A') + goto yy91; } else { - if (yych <= 0xF0) - goto yy110; - if (yych <= 0xF3) - goto yy111; - if (yych <= 0xF4) - goto yy112; + if (yych <= ']') + goto yy89; + if (yych <= '~') + goto yy91; } } } - yy103 : { return 0; } - yy104: + yy89: + ++p; + yy90 : { return 0; } + yy91: yych = *(marker = ++p); if (yych <= ',') { if (yych <= '"') { if (yych == '!') - goto yy116; - goto yy103; + goto yy95; + goto yy90; } else { if (yych <= '\'') - goto yy116; + goto yy95; if (yych <= ')') - goto yy103; + goto yy90; if (yych <= '+') - goto yy116; - goto yy103; + goto yy95; + goto yy90; } } else { if (yych <= '>') { if (yych <= '9') - goto yy116; + goto yy95; if (yych == '=') - goto yy116; - goto yy103; + goto yy95; + goto yy90; } else { if (yych <= 'Z') - goto yy116; + goto yy95; if (yych <= ']') - goto yy103; + goto yy90; if (yych <= '~') - goto yy116; - goto yy103; + goto yy95; + goto yy90; } } - yy105: - yych = *++p; - goto yy103; - yy106: - yych = *++p; - if (yych <= 0x7F) - goto yy107; - if (yych <= 0xBF) - goto yy105; - yy107: - p = marker; - goto yy103; - yy108: - yych = *++p; - if (yych <= 0x9F) - goto yy107; - if (yych <= 0xBF) - goto yy106; - goto yy107; - yy109: - yych = *++p; - if (yych <= 0x7F) - goto yy107; - if (yych <= 0xBF) - goto yy106; - goto yy107; - yy110: - yych = *++p; - if (yych <= 0x8F) - goto yy107; - if (yych <= 0xBF) - goto yy109; - goto yy107; - yy111: - yych = *++p; - if (yych <= 0x7F) - goto yy107; - if (yych <= 0xBF) - goto yy109; - goto yy107; - yy112: - yych = *++p; - if (yych <= 0x7F) - goto yy107; - if (yych <= 0x8F) - goto yy109; - goto yy107; - yy113: - yych = *++p; - if (yych <= 0x7F) - goto yy107; - if (yych <= 0x9F) - goto yy106; - goto yy107; - yy114: + yy92: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy117; - goto yy107; + goto yy96; } else { if (yych <= 'Z') - goto yy117; + goto yy96; if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy117; - goto yy107; + goto yy96; } - yy115: + yy93: + p = marker; + goto yy90; + yy94: ++p; yych = *p; - yy116: + yy95: if (yybm[0 + yych] & 128) { - goto yy115; + goto yy94; } if (yych <= '>') - goto yy107; + goto yy93; if (yych <= '@') - goto yy114; - goto yy107; - yy117: + goto yy92; + goto yy93; + yy96: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy119; - goto yy120; + goto yy98; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych >= ':') - goto yy107; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy248; - goto yy120; + goto yy227; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy247; - goto yy107; + goto yy226; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy247; + goto yy93; + goto yy226; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy247; - goto yy107; + goto yy226; + goto yy93; } } - yy119: + yy98: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy248; + goto yy227; if (yych <= '/') - goto yy107; - goto yy247; + goto yy93; + goto yy226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; - goto yy247; + goto yy93; + goto yy226; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy247; - goto yy107; + goto yy226; + goto yy93; } } - yy120: + yy99: ++p; yych = *p; if (yych <= '@') { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy123; - goto yy107; + goto yy102; + goto yy93; } else { if (yych <= 'Z') - goto yy123; + goto yy102; if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy123; - goto yy107; + goto yy102; + goto yy93; } - yy121: + yy100: ++p; { return (bufsize_t)(p - start); } - yy123: + yy102: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy125; - goto yy120; + goto yy104; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych >= ':') - goto yy107; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } ++p; @@ -2081,6050 +1830,6050 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy127; - goto yy120; + goto yy106; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy126; - goto yy107; + goto yy105; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy126; + goto yy93; + goto yy105; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy126; - goto yy107; + goto yy105; + goto yy93; } } - yy125: + yy104: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy127; + goto yy106; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy126: + yy105: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy129; - goto yy120; + goto yy108; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy128; - goto yy107; + goto yy107; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy128; + goto yy93; + goto yy107; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy128; - goto yy107; + goto yy107; + goto yy93; } } - yy127: + yy106: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy129; + goto yy108; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy128: + yy107: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy131; - goto yy120; + goto yy110; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy130; - goto yy107; + goto yy109; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy130; + goto yy93; + goto yy109; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy130; - goto yy107; + goto yy109; + goto yy93; } } - yy129: + yy108: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy131; + goto yy110; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy130: + yy109: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy133; - goto yy120; + goto yy112; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy132; - goto yy107; + goto yy111; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy132; + goto yy93; + goto yy111; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy132; - goto yy107; + goto yy111; + goto yy93; } } - yy131: + yy110: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy133; + goto yy112; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy132: + yy111: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy135; - goto yy120; + goto yy114; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy134; - goto yy107; + goto yy113; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy134; + goto yy93; + goto yy113; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy134; - goto yy107; + goto yy113; + goto yy93; } } - yy133: + yy112: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy135; + goto yy114; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy134: + yy113: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy137; - goto yy120; + goto yy116; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy136; - goto yy107; + goto yy115; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy136; + goto yy93; + goto yy115; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy136; - goto yy107; + goto yy115; + goto yy93; } } - yy135: + yy114: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy137; + goto yy116; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy136: + yy115: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy139; - goto yy120; + goto yy118; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy138; - goto yy107; + goto yy117; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy138; + goto yy93; + goto yy117; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy138; - goto yy107; + goto yy117; + goto yy93; } } - yy137: + yy116: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy139; + goto yy118; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy138: + yy117: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy141; - goto yy120; + goto yy120; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy140; - goto yy107; + goto yy119; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy140; + goto yy93; + goto yy119; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy140; - goto yy107; + goto yy119; + goto yy93; } } - yy139: + yy118: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy141; + goto yy120; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy140: + yy119: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy143; - goto yy120; + goto yy122; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy142; - goto yy107; + goto yy121; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy142; + goto yy93; + goto yy121; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy142; - goto yy107; + goto yy121; + goto yy93; } } - yy141: + yy120: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy143; + goto yy122; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy142: + yy121: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy145; - goto yy120; + goto yy124; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy144; - goto yy107; + goto yy123; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy144; + goto yy93; + goto yy123; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy144; - goto yy107; + goto yy123; + goto yy93; } } - yy143: + yy122: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy145; + goto yy124; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy144: + yy123: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy147; - goto yy120; + goto yy126; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy146; - goto yy107; + goto yy125; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy146; + goto yy93; + goto yy125; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy146; - goto yy107; + goto yy125; + goto yy93; } } - yy145: + yy124: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy147; + goto yy126; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy146: + yy125: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy149; - goto yy120; + goto yy128; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy148; - goto yy107; + goto yy127; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy148; + goto yy93; + goto yy127; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy148; - goto yy107; + goto yy127; + goto yy93; } } - yy147: + yy126: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy149; + goto yy128; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy148: + yy127: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy151; - goto yy120; + goto yy130; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy150; - goto yy107; + goto yy129; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy150; + goto yy93; + goto yy129; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy150; - goto yy107; + goto yy129; + goto yy93; } } - yy149: + yy128: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy151; + goto yy130; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy150: + yy129: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy153; - goto yy120; + goto yy132; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy152; - goto yy107; + goto yy131; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy152; + goto yy93; + goto yy131; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy152; - goto yy107; + goto yy131; + goto yy93; } } - yy151: + yy130: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy153; + goto yy132; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy152: + yy131: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy155; - goto yy120; + goto yy134; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy154; - goto yy107; + goto yy133; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy154; + goto yy93; + goto yy133; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy154; - goto yy107; + goto yy133; + goto yy93; } } - yy153: + yy132: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy155; + goto yy134; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy154: + yy133: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy157; - goto yy120; + goto yy136; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy156; - goto yy107; + goto yy135; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy156; + goto yy93; + goto yy135; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy156; - goto yy107; + goto yy135; + goto yy93; } } - yy155: + yy134: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy157; + goto yy136; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy156: + yy135: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy159; - goto yy120; + goto yy138; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy158; - goto yy107; + goto yy137; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy158; + goto yy93; + goto yy137; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy158; - goto yy107; + goto yy137; + goto yy93; } } - yy157: + yy136: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy159; + goto yy138; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy158: + yy137: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy161; - goto yy120; + goto yy140; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy160; - goto yy107; + goto yy139; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy160; + goto yy93; + goto yy139; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy160; - goto yy107; + goto yy139; + goto yy93; } } - yy159: + yy138: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy161; + goto yy140; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy160: + yy139: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy163; - goto yy120; + goto yy142; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy162; - goto yy107; + goto yy141; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy162; + goto yy93; + goto yy141; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy162; - goto yy107; + goto yy141; + goto yy93; } } - yy161: + yy140: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy163; + goto yy142; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy162: + yy141: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy165; - goto yy120; + goto yy144; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy164; - goto yy107; + goto yy143; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy164; + goto yy93; + goto yy143; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy164; - goto yy107; + goto yy143; + goto yy93; } } - yy163: + yy142: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy165; + goto yy144; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy164: + yy143: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy167; - goto yy120; + goto yy146; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy166; - goto yy107; + goto yy145; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy166; + goto yy93; + goto yy145; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy166; - goto yy107; + goto yy145; + goto yy93; } } - yy165: + yy144: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy167; + goto yy146; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy166: + yy145: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy169; - goto yy120; + goto yy148; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy168; - goto yy107; + goto yy147; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy168; + goto yy93; + goto yy147; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy168; - goto yy107; + goto yy147; + goto yy93; } } - yy167: + yy146: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy169; + goto yy148; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy168: + yy147: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy171; - goto yy120; + goto yy150; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy170; - goto yy107; + goto yy149; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy170; + goto yy93; + goto yy149; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy170; - goto yy107; + goto yy149; + goto yy93; } } - yy169: + yy148: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy171; + goto yy150; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy170: + yy149: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy173; - goto yy120; + goto yy152; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy172; - goto yy107; + goto yy151; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy172; + goto yy93; + goto yy151; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy172; - goto yy107; + goto yy151; + goto yy93; } } - yy171: + yy150: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy173; + goto yy152; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy172: + yy151: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy175; - goto yy120; + goto yy154; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy174; - goto yy107; + goto yy153; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy174; + goto yy93; + goto yy153; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy174; - goto yy107; + goto yy153; + goto yy93; } } - yy173: + yy152: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy175; + goto yy154; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy174: + yy153: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy177; - goto yy120; + goto yy156; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy176; - goto yy107; + goto yy155; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy176; + goto yy93; + goto yy155; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy176; - goto yy107; + goto yy155; + goto yy93; } } - yy175: + yy154: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy177; + goto yy156; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy176: + yy155: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy179; - goto yy120; + goto yy158; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy178; - goto yy107; + goto yy157; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy178; + goto yy93; + goto yy157; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy178; - goto yy107; + goto yy157; + goto yy93; } } - yy177: + yy156: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy179; + goto yy158; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy178: + yy157: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy181; - goto yy120; + goto yy160; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy180; - goto yy107; + goto yy159; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy180; + goto yy93; + goto yy159; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy180; - goto yy107; + goto yy159; + goto yy93; } } - yy179: + yy158: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy181; + goto yy160; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy180: + yy159: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy183; - goto yy120; + goto yy162; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy182; - goto yy107; + goto yy161; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy182; + goto yy93; + goto yy161; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy182; - goto yy107; + goto yy161; + goto yy93; } } - yy181: + yy160: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy183; + goto yy162; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy182: + yy161: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy185; - goto yy120; + goto yy164; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy184; - goto yy107; + goto yy163; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy184; + goto yy93; + goto yy163; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy184; - goto yy107; + goto yy163; + goto yy93; } } - yy183: + yy162: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy185; + goto yy164; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy184: + yy163: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy187; - goto yy120; + goto yy166; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy186; - goto yy107; + goto yy165; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy186; + goto yy93; + goto yy165; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy186; - goto yy107; + goto yy165; + goto yy93; } } - yy185: + yy164: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy187; + goto yy166; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy186: + yy165: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy189; - goto yy120; + goto yy168; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy188; - goto yy107; + goto yy167; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy188; + goto yy93; + goto yy167; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy188; - goto yy107; + goto yy167; + goto yy93; } } - yy187: + yy166: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy189; + goto yy168; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy188: + yy167: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy191; - goto yy120; + goto yy170; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy190; - goto yy107; + goto yy169; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy190; + goto yy93; + goto yy169; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy190; - goto yy107; + goto yy169; + goto yy93; } } - yy189: + yy168: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy191; + goto yy170; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy190: + yy169: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy193; - goto yy120; + goto yy172; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy192; - goto yy107; + goto yy171; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy192; + goto yy93; + goto yy171; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy192; - goto yy107; + goto yy171; + goto yy93; } } - yy191: + yy170: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy193; + goto yy172; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy192: + yy171: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy195; - goto yy120; + goto yy174; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy194; - goto yy107; + goto yy173; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy194; + goto yy93; + goto yy173; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy194; - goto yy107; + goto yy173; + goto yy93; } } - yy193: + yy172: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy195; + goto yy174; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy194: + yy173: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy197; - goto yy120; + goto yy176; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy196; - goto yy107; + goto yy175; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy196; + goto yy93; + goto yy175; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy196; - goto yy107; + goto yy175; + goto yy93; } } - yy195: + yy174: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy197; + goto yy176; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy196: + yy175: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy199; - goto yy120; + goto yy178; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy198; - goto yy107; + goto yy177; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy198; + goto yy93; + goto yy177; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy198; - goto yy107; + goto yy177; + goto yy93; } } - yy197: + yy176: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy199; + goto yy178; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy198: + yy177: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy201; - goto yy120; + goto yy180; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy200; - goto yy107; + goto yy179; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy200; + goto yy93; + goto yy179; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy200; - goto yy107; + goto yy179; + goto yy93; } } - yy199: + yy178: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy201; + goto yy180; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy200: + yy179: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy203; - goto yy120; + goto yy182; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy202; - goto yy107; + goto yy181; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy202; + goto yy93; + goto yy181; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy202; - goto yy107; + goto yy181; + goto yy93; } } - yy201: + yy180: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy203; + goto yy182; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy202: + yy181: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy205; - goto yy120; + goto yy184; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy204; - goto yy107; + goto yy183; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy204; + goto yy93; + goto yy183; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy204; - goto yy107; + goto yy183; + goto yy93; } } - yy203: + yy182: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy205; + goto yy184; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy204: + yy183: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy207; - goto yy120; + goto yy186; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy206; - goto yy107; + goto yy185; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy206; + goto yy93; + goto yy185; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy206; - goto yy107; + goto yy185; + goto yy93; } } - yy205: + yy184: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy207; + goto yy186; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy206: + yy185: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy209; - goto yy120; + goto yy188; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy208; - goto yy107; + goto yy187; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy208; + goto yy93; + goto yy187; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy208; - goto yy107; + goto yy187; + goto yy93; } } - yy207: + yy186: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy209; + goto yy188; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy208: + yy187: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy211; - goto yy120; + goto yy190; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy210; - goto yy107; + goto yy189; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy210; + goto yy93; + goto yy189; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy210; - goto yy107; + goto yy189; + goto yy93; } } - yy209: + yy188: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy211; + goto yy190; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy210: + yy189: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy213; - goto yy120; + goto yy192; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy212; - goto yy107; + goto yy191; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy212; + goto yy93; + goto yy191; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy212; - goto yy107; + goto yy191; + goto yy93; } } - yy211: + yy190: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy213; + goto yy192; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy212: + yy191: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy215; - goto yy120; + goto yy194; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy214; - goto yy107; + goto yy193; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy214; + goto yy93; + goto yy193; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy214; - goto yy107; + goto yy193; + goto yy93; } } - yy213: + yy192: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy215; + goto yy194; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy214: + yy193: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy217; - goto yy120; + goto yy196; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy216; - goto yy107; + goto yy195; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy216; + goto yy93; + goto yy195; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy216; - goto yy107; + goto yy195; + goto yy93; } } - yy215: + yy194: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy217; + goto yy196; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy216: + yy195: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy219; - goto yy120; + goto yy198; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy218; - goto yy107; + goto yy197; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy218; + goto yy93; + goto yy197; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy218; - goto yy107; + goto yy197; + goto yy93; } } - yy217: + yy196: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy219; + goto yy198; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy218: + yy197: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy221; - goto yy120; + goto yy200; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy220; - goto yy107; + goto yy199; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy220; + goto yy93; + goto yy199; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy220; - goto yy107; + goto yy199; + goto yy93; } } - yy219: + yy198: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy221; + goto yy200; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy220: + yy199: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy223; - goto yy120; + goto yy202; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy222; - goto yy107; + goto yy201; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy222; + goto yy93; + goto yy201; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy222; - goto yy107; + goto yy201; + goto yy93; } } - yy221: + yy200: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy223; + goto yy202; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy222: + yy201: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy225; - goto yy120; + goto yy204; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy224; - goto yy107; + goto yy203; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy224; + goto yy93; + goto yy203; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy224; - goto yy107; + goto yy203; + goto yy93; } } - yy223: + yy202: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy225; + goto yy204; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy224: + yy203: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy227; - goto yy120; + goto yy206; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy226; - goto yy107; + goto yy205; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy226; + goto yy93; + goto yy205; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy226; - goto yy107; + goto yy205; + goto yy93; } } - yy225: + yy204: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy227; + goto yy206; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy226: + yy205: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy229; - goto yy120; + goto yy208; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy228; - goto yy107; + goto yy207; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy228; + goto yy93; + goto yy207; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy228; - goto yy107; + goto yy207; + goto yy93; } } - yy227: + yy206: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy229; + goto yy208; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy228: + yy207: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy231; - goto yy120; + goto yy210; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy230; - goto yy107; + goto yy209; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy230; + goto yy93; + goto yy209; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy230; - goto yy107; + goto yy209; + goto yy93; } } - yy229: + yy208: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy231; + goto yy210; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy230: + yy209: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy233; - goto yy120; + goto yy212; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy232; - goto yy107; + goto yy211; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy232; + goto yy93; + goto yy211; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy232; - goto yy107; + goto yy211; + goto yy93; } } - yy231: + yy210: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy233; + goto yy212; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy232: + yy211: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy235; - goto yy120; + goto yy214; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy234; - goto yy107; + goto yy213; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy234; + goto yy93; + goto yy213; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy234; - goto yy107; + goto yy213; + goto yy93; } } - yy233: + yy212: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy235; + goto yy214; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy234: + yy213: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy237; - goto yy120; + goto yy216; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy236; - goto yy107; + goto yy215; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy236; + goto yy93; + goto yy215; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy236; - goto yy107; + goto yy215; + goto yy93; } } - yy235: + yy214: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy237; + goto yy216; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy236: + yy215: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy239; - goto yy120; + goto yy218; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy238; - goto yy107; + goto yy217; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy238; + goto yy93; + goto yy217; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy238; - goto yy107; + goto yy217; + goto yy93; } } - yy237: + yy216: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy239; + goto yy218; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy238: + yy217: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy241; - goto yy120; + goto yy220; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy240; - goto yy107; + goto yy219; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy240; + goto yy93; + goto yy219; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy240; - goto yy107; + goto yy219; + goto yy93; } } - yy239: + yy218: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy241; + goto yy220; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy240: + yy219: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy243; - goto yy120; + goto yy222; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy242; - goto yy107; + goto yy221; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy242; + goto yy93; + goto yy221; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy242; - goto yy107; + goto yy221; + goto yy93; } } - yy241: + yy220: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy243; + goto yy222; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy242: + yy221: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy245; - goto yy120; + goto yy224; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy244; - goto yy107; + goto yy223; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy244; + goto yy93; + goto yy223; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy244; - goto yy107; + goto yy223; + goto yy93; } } - yy243: + yy222: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy245; + goto yy224; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy244: + yy223: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= '-') - goto yy107; - goto yy120; + goto yy93; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy246; - goto yy107; + goto yy225; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy246; + goto yy93; + goto yy225; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy246; - goto yy107; + goto yy225; + goto yy93; } } - yy245: + yy224: ++p; yych = *p; if (yych <= '@') { if (yych <= '/') - goto yy107; + goto yy93; if (yych >= ':') - goto yy107; + goto yy93; } else { if (yych <= 'Z') - goto yy246; + goto yy225; if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } - yy246: + yy225: ++p; yych = *p; if (yych == '.') - goto yy120; + goto yy99; if (yych == '>') - goto yy121; - goto yy107; - yy247: + goto yy100; + goto yy93; + yy226: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy250; - goto yy120; + goto yy229; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy249; - goto yy107; + goto yy228; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy249; + goto yy93; + goto yy228; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy249; - goto yy107; + goto yy228; + goto yy93; } } - yy248: + yy227: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy250; + goto yy229; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy249: + yy228: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy252; - goto yy120; + goto yy231; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy251; - goto yy107; + goto yy230; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy251; + goto yy93; + goto yy230; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy251; - goto yy107; + goto yy230; + goto yy93; } } - yy250: + yy229: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy252; + goto yy231; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy251: + yy230: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy254; - goto yy120; + goto yy233; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy253; - goto yy107; + goto yy232; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy253; + goto yy93; + goto yy232; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy253; - goto yy107; + goto yy232; + goto yy93; } } - yy252: + yy231: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy254; + goto yy233; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy253: + yy232: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy256; - goto yy120; + goto yy235; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy255; - goto yy107; + goto yy234; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy255; + goto yy93; + goto yy234; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy255; - goto yy107; + goto yy234; + goto yy93; } } - yy254: + yy233: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy256; + goto yy235; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy255: + yy234: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy258; - goto yy120; + goto yy237; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy257; - goto yy107; + goto yy236; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy257; + goto yy93; + goto yy236; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy257; - goto yy107; + goto yy236; + goto yy93; } } - yy256: + yy235: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy258; + goto yy237; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy257: + yy236: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy260; - goto yy120; + goto yy239; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy259; - goto yy107; + goto yy238; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy259; + goto yy93; + goto yy238; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy259; - goto yy107; + goto yy238; + goto yy93; } } - yy258: + yy237: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy260; + goto yy239; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy259: + yy238: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy262; - goto yy120; + goto yy241; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy261; - goto yy107; + goto yy240; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy261; + goto yy93; + goto yy240; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy261; - goto yy107; + goto yy240; + goto yy93; } } - yy260: + yy239: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy262; + goto yy241; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy261: + yy240: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy264; - goto yy120; + goto yy243; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy263; - goto yy107; + goto yy242; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy263; + goto yy93; + goto yy242; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy263; - goto yy107; + goto yy242; + goto yy93; } } - yy262: + yy241: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy264; + goto yy243; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy263: + yy242: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy266; - goto yy120; + goto yy245; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy265; - goto yy107; + goto yy244; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy265; + goto yy93; + goto yy244; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy265; - goto yy107; + goto yy244; + goto yy93; } } - yy264: + yy243: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy266; + goto yy245; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy265: + yy244: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy268; - goto yy120; + goto yy247; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy267; - goto yy107; + goto yy246; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy267; + goto yy93; + goto yy246; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy267; - goto yy107; + goto yy246; + goto yy93; } } - yy266: + yy245: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy268; + goto yy247; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy267: + yy246: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy270; - goto yy120; + goto yy249; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy269; - goto yy107; + goto yy248; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy269; + goto yy93; + goto yy248; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy269; - goto yy107; + goto yy248; + goto yy93; } } - yy268: + yy247: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy270; + goto yy249; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy269: + yy248: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy272; - goto yy120; + goto yy251; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy271; - goto yy107; + goto yy250; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy271; + goto yy93; + goto yy250; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy271; - goto yy107; + goto yy250; + goto yy93; } } - yy270: + yy249: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy272; + goto yy251; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy271: + yy250: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy274; - goto yy120; + goto yy253; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy273; - goto yy107; + goto yy252; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy273; + goto yy93; + goto yy252; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy273; - goto yy107; + goto yy252; + goto yy93; } } - yy272: + yy251: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy274; + goto yy253; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy273: + yy252: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy276; - goto yy120; + goto yy255; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy275; - goto yy107; + goto yy254; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy275; + goto yy93; + goto yy254; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy275; - goto yy107; + goto yy254; + goto yy93; } } - yy274: + yy253: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy276; + goto yy255; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy275: + yy254: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy278; - goto yy120; + goto yy257; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy277; - goto yy107; + goto yy256; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy277; - } else { + goto yy93; + goto yy256; + } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy277; - goto yy107; + goto yy256; + goto yy93; } } - yy276: + yy255: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy278; + goto yy257; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy277: + yy256: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy280; - goto yy120; + goto yy259; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy279; - goto yy107; + goto yy258; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy279; + goto yy93; + goto yy258; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy279; - goto yy107; + goto yy258; + goto yy93; } } - yy278: + yy257: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy280; + goto yy259; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy279: + yy258: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy282; - goto yy120; + goto yy261; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy281; - goto yy107; + goto yy260; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy281; + goto yy93; + goto yy260; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy281; - goto yy107; + goto yy260; + goto yy93; } } - yy280: + yy259: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy282; + goto yy261; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy281: + yy260: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy284; - goto yy120; + goto yy263; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy283; - goto yy107; + goto yy262; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy283; + goto yy93; + goto yy262; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy283; - goto yy107; + goto yy262; + goto yy93; } } - yy282: + yy261: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy284; + goto yy263; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy283: + yy262: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy286; - goto yy120; + goto yy265; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy285; - goto yy107; + goto yy264; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy285; + goto yy93; + goto yy264; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy285; - goto yy107; + goto yy264; + goto yy93; } } - yy284: + yy263: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy286; + goto yy265; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy285: + yy264: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy288; - goto yy120; + goto yy267; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy287; - goto yy107; + goto yy266; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy287; + goto yy93; + goto yy266; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy287; - goto yy107; + goto yy266; + goto yy93; } } - yy286: + yy265: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy288; + goto yy267; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy287: + yy266: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy290; - goto yy120; + goto yy269; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy289; - goto yy107; + goto yy268; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy289; + goto yy93; + goto yy268; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy289; - goto yy107; + goto yy268; + goto yy93; } } - yy288: + yy267: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy290; + goto yy269; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy289: + yy268: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy292; - goto yy120; + goto yy271; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy291; - goto yy107; + goto yy270; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy291; + goto yy93; + goto yy270; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy291; - goto yy107; + goto yy270; + goto yy93; } } - yy290: + yy269: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy292; + goto yy271; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy291: + yy270: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy294; - goto yy120; + goto yy273; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy293; - goto yy107; + goto yy272; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy293; + goto yy93; + goto yy272; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy293; - goto yy107; + goto yy272; + goto yy93; } } - yy292: + yy271: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy294; + goto yy273; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy293: + yy272: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy296; - goto yy120; + goto yy275; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy295; - goto yy107; + goto yy274; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy295; + goto yy93; + goto yy274; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy295; - goto yy107; + goto yy274; + goto yy93; } } - yy294: + yy273: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy296; + goto yy275; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy295: + yy274: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy298; - goto yy120; + goto yy277; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy297; - goto yy107; + goto yy276; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy297; + goto yy93; + goto yy276; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy297; - goto yy107; + goto yy276; + goto yy93; } } - yy296: + yy275: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy298; + goto yy277; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy297: + yy276: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy300; - goto yy120; + goto yy279; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy299; - goto yy107; + goto yy278; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy299; + goto yy93; + goto yy278; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy299; - goto yy107; + goto yy278; + goto yy93; } } - yy298: + yy277: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy300; + goto yy279; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy299: + yy278: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy302; - goto yy120; + goto yy281; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy301; - goto yy107; + goto yy280; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy301; + goto yy93; + goto yy280; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy301; - goto yy107; + goto yy280; + goto yy93; } } - yy300: + yy279: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy302; + goto yy281; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy301: + yy280: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy304; - goto yy120; + goto yy283; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy303; - goto yy107; + goto yy282; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy303; + goto yy93; + goto yy282; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy303; - goto yy107; + goto yy282; + goto yy93; } } - yy302: + yy281: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy304; + goto yy283; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy303: + yy282: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy306; - goto yy120; + goto yy285; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy305; - goto yy107; + goto yy284; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy305; + goto yy93; + goto yy284; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy305; - goto yy107; + goto yy284; + goto yy93; } } - yy304: + yy283: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy306; + goto yy285; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy305: + yy284: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy308; - goto yy120; + goto yy287; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy307; - goto yy107; + goto yy286; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy307; + goto yy93; + goto yy286; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy307; - goto yy107; + goto yy286; + goto yy93; } } - yy306: + yy285: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy308; + goto yy287; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy307: + yy286: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy310; - goto yy120; + goto yy289; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy309; - goto yy107; + goto yy288; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy309; + goto yy93; + goto yy288; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy309; - goto yy107; + goto yy288; + goto yy93; } } - yy308: + yy287: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy310; + goto yy289; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy309: + yy288: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy312; - goto yy120; + goto yy291; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy311; - goto yy107; + goto yy290; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy311; + goto yy93; + goto yy290; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy311; - goto yy107; + goto yy290; + goto yy93; } } - yy310: + yy289: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy312; + goto yy291; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy311: + yy290: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy314; - goto yy120; + goto yy293; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy313; - goto yy107; + goto yy292; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy313; + goto yy93; + goto yy292; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy313; - goto yy107; + goto yy292; + goto yy93; } } - yy312: + yy291: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy314; + goto yy293; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy313: + yy292: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy316; - goto yy120; + goto yy295; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy315; - goto yy107; + goto yy294; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy315; + goto yy93; + goto yy294; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy315; - goto yy107; + goto yy294; + goto yy93; } } - yy314: + yy293: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy316; + goto yy295; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy315: + yy294: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy318; - goto yy120; + goto yy297; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy317; - goto yy107; + goto yy296; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy317; + goto yy93; + goto yy296; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy317; - goto yy107; + goto yy296; + goto yy93; } } - yy316: + yy295: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy318; + goto yy297; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy317: + yy296: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy320; - goto yy120; + goto yy299; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy319; - goto yy107; + goto yy298; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy319; + goto yy93; + goto yy298; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy319; - goto yy107; + goto yy298; + goto yy93; } } - yy318: + yy297: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy320; + goto yy299; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy319: + yy298: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy322; - goto yy120; + goto yy301; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy321; - goto yy107; + goto yy300; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy321; + goto yy93; + goto yy300; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy321; - goto yy107; + goto yy300; + goto yy93; } } - yy320: + yy299: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy322; + goto yy301; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy321: + yy300: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy324; - goto yy120; + goto yy303; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy323; - goto yy107; + goto yy302; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy323; + goto yy93; + goto yy302; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy323; - goto yy107; + goto yy302; + goto yy93; } } - yy322: + yy301: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy324; + goto yy303; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy323: + yy302: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy326; - goto yy120; + goto yy305; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy325; - goto yy107; + goto yy304; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy325; + goto yy93; + goto yy304; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy325; - goto yy107; + goto yy304; + goto yy93; } } - yy324: + yy303: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy326; + goto yy305; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy325: + yy304: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy328; - goto yy120; + goto yy307; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy327; - goto yy107; + goto yy306; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy327; + goto yy93; + goto yy306; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy327; - goto yy107; + goto yy306; + goto yy93; } } - yy326: + yy305: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy328; + goto yy307; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy327: + yy306: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy330; - goto yy120; + goto yy309; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy329; - goto yy107; + goto yy308; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy329; + goto yy93; + goto yy308; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy329; - goto yy107; + goto yy308; + goto yy93; } } - yy328: + yy307: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy330; + goto yy309; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy329: + yy308: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy332; - goto yy120; + goto yy311; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy331; - goto yy107; + goto yy310; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy331; + goto yy93; + goto yy310; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy331; - goto yy107; + goto yy310; + goto yy93; } } - yy330: + yy309: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy332; + goto yy311; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy331: + yy310: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy334; - goto yy120; + goto yy313; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy333; - goto yy107; + goto yy312; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy333; + goto yy93; + goto yy312; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy333; - goto yy107; + goto yy312; + goto yy93; } } - yy332: + yy311: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy334; + goto yy313; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy333: + yy312: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy336; - goto yy120; + goto yy315; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy335; - goto yy107; + goto yy314; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy335; + goto yy93; + goto yy314; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy335; - goto yy107; + goto yy314; + goto yy93; } } - yy334: + yy313: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy336; + goto yy315; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy335: + yy314: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy338; - goto yy120; + goto yy317; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy337; - goto yy107; + goto yy316; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy337; + goto yy93; + goto yy316; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy337; - goto yy107; + goto yy316; + goto yy93; } } - yy336: + yy315: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy338; + goto yy317; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy337: + yy316: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy340; - goto yy120; + goto yy319; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy339; - goto yy107; + goto yy318; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy339; + goto yy93; + goto yy318; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy339; - goto yy107; + goto yy318; + goto yy93; } } - yy338: + yy317: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy340; + goto yy319; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy339: + yy318: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy342; - goto yy120; + goto yy321; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy341; - goto yy107; + goto yy320; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy341; + goto yy93; + goto yy320; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy341; - goto yy107; + goto yy320; + goto yy93; } } - yy340: + yy319: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy342; + goto yy321; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy341: + yy320: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy344; - goto yy120; + goto yy323; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy343; - goto yy107; + goto yy322; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy343; + goto yy93; + goto yy322; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy343; - goto yy107; + goto yy322; + goto yy93; } } - yy342: + yy321: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy344; + goto yy323; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy343: + yy322: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy346; - goto yy120; + goto yy325; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy345; - goto yy107; + goto yy324; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy345; + goto yy93; + goto yy324; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy345; - goto yy107; + goto yy324; + goto yy93; } } - yy344: + yy323: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy346; + goto yy325; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy345: + yy324: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy348; - goto yy120; + goto yy327; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy347; - goto yy107; + goto yy326; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy347; + goto yy93; + goto yy326; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy347; - goto yy107; + goto yy326; + goto yy93; } } - yy346: + yy325: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy348; + goto yy327; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy347: + yy326: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy350; - goto yy120; + goto yy329; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy349; - goto yy107; + goto yy328; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy349; + goto yy93; + goto yy328; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy349; - goto yy107; + goto yy328; + goto yy93; } } - yy348: + yy327: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy350; + goto yy329; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy349: + yy328: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy352; - goto yy120; + goto yy331; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy351; - goto yy107; + goto yy330; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy351; + goto yy93; + goto yy330; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy351; - goto yy107; + goto yy330; + goto yy93; } } - yy350: + yy329: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy352; + goto yy331; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy351: + yy330: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy354; - goto yy120; + goto yy333; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy353; - goto yy107; + goto yy332; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy353; + goto yy93; + goto yy332; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy353; - goto yy107; + goto yy332; + goto yy93; } } - yy352: + yy331: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy354; + goto yy333; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy353: + yy332: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy356; - goto yy120; + goto yy335; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy355; - goto yy107; + goto yy334; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy355; + goto yy93; + goto yy334; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy355; - goto yy107; + goto yy334; + goto yy93; } } - yy354: + yy333: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy356; + goto yy335; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy355: + yy334: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy358; - goto yy120; + goto yy337; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy357; - goto yy107; + goto yy336; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy357; + goto yy93; + goto yy336; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy357; - goto yy107; + goto yy336; + goto yy93; } } - yy356: + yy335: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy358; + goto yy337; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy357: + yy336: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy360; - goto yy120; + goto yy339; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy359; - goto yy107; + goto yy338; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy359; + goto yy93; + goto yy338; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy359; - goto yy107; + goto yy338; + goto yy93; } } - yy358: + yy337: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy360; + goto yy339; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy359: + yy338: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy362; - goto yy120; + goto yy341; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy361; - goto yy107; + goto yy340; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy361; + goto yy93; + goto yy340; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy361; - goto yy107; + goto yy340; + goto yy93; } } - yy360: + yy339: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy362; + goto yy341; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy361: + yy340: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy364; - goto yy120; + goto yy343; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy363; - goto yy107; + goto yy342; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy363; + goto yy93; + goto yy342; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy363; - goto yy107; + goto yy342; + goto yy93; } } - yy362: + yy341: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy364; + goto yy343; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy363: + yy342: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy107; + goto yy93; if (yych <= '-') - goto yy366; - goto yy120; + goto yy345; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy365; - goto yy107; + goto yy344; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy365; + goto yy93; + goto yy344; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy365; - goto yy107; + goto yy344; + goto yy93; } } - yy364: + yy343: yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy366; + goto yy345; if (yych <= '/') - goto yy107; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy107; + goto yy93; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych >= '{') - goto yy107; + goto yy93; } } - yy365: + yy344: yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= '-') - goto yy107; - goto yy120; + goto yy93; + goto yy99; } else { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy246; - goto yy107; + goto yy225; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy121; + goto yy100; if (yych <= '@') - goto yy107; - goto yy246; + goto yy93; + goto yy225; } else { if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy246; - goto yy107; + goto yy225; + goto yy93; } } - yy366: + yy345: ++p; if ((yych = *p) <= '@') { if (yych <= '/') - goto yy107; + goto yy93; if (yych <= '9') - goto yy246; - goto yy107; + goto yy225; + goto yy93; } else { if (yych <= 'Z') - goto yy246; + goto yy225; if (yych <= '`') - goto yy107; + goto yy93; if (yych <= 'z') - goto yy246; - goto yy107; + goto yy225; + goto yy93; } } } @@ -8138,1951 +7887,1860 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230, - 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238, 238, 238, 238, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 238, 239, 234, 239, 239, 239, 239, 236, 239, 239, 239, + 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 238, 238, 174, 231, 239, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 239, 239, 111, 239, 239, 238, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* table 9 .. 11: 256 */ - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 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, + 160, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 128, 0, + 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 0, 0, 0, 0, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 160, 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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 <= '`') { - if (yych <= '.') { - if (yych <= '\n') { - if (yych <= '\t') - goto yy374; - } else { - if (yych == '!') - goto yy372; - goto yy374; - } + yych = *p; + if (yych <= '>') { + if (yych <= '!') { + if (yych >= '!') + goto yy350; } else { - if (yych <= '?') { - if (yych <= '/') - goto yy371; - if (yych <= '>') - goto yy374; - goto yy373; - } else { - if (yych <= '@') - goto yy374; - if (yych <= 'Z') - goto yy370; - goto yy374; - } + if (yych == '/') + goto yy351; } } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 'z') - goto yy370; - if (yych <= 0x7F) - goto yy374; - } else { - if (yych <= 0xDF) - goto yy375; - if (yych <= 0xE0) - goto yy377; - goto yy378; - } + if (yych <= 'Z') { + if (yych <= '?') + goto yy352; + if (yych >= 'A') + goto yy353; } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy382; - if (yych <= 0xEF) - goto yy378; - goto yy379; - } else { - if (yych <= 0xF3) - goto yy380; - if (yych <= 0xF4) - goto yy381; - } + if (yych <= '`') + goto yy348; + if (yych <= 'z') + goto yy353; } } - yy369 : { return 0; } - yy370: + yy348: + ++p; + yy349 : { return 0; } + yy350: yych = *(marker = ++p); - if (yych <= '/') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy369; - if (yych <= '\r') - goto yy474; - if (yych <= 0x1F) - goto yy369; - goto yy474; - } else { - if (yych == '-') - goto yy472; - if (yych <= '.') - goto yy369; - goto yy476; - } - } else { - if (yych <= '@') { - if (yych <= '9') - goto yy472; - if (yych == '>') - goto yy393; - goto yy369; - } else { - if (yych <= 'Z') - goto yy472; - if (yych <= '`') - goto yy369; - if (yych <= 'z') - goto yy472; - goto yy369; - } + if (yybm[0 + yych] & 16) { + goto yy426; } - yy371: + if (yych == '-') + goto yy428; + if (yych <= '@') + goto yy349; + if (yych <= '[') + goto yy425; + goto yy349; + yy351: yych = *(marker = ++p); if (yych <= '@') - goto yy369; + goto yy349; if (yych <= 'Z') - goto yy468; + goto yy421; if (yych <= '`') - goto yy369; + goto yy349; if (yych <= 'z') - goto yy468; - goto yy369; - yy372: - yych = *(marker = ++p); - if (yybm[256 + yych] & 64) { - goto yy403; - } - if (yych == '-') - goto yy405; - if (yych <= '@') - goto yy369; - if (yych <= '[') - goto yy402; - goto yy369; - yy373: + goto yy421; + goto yy349; + yy352: yych = *(marker = ++p); if (yych <= 0x00) - goto yy369; + goto yy349; if (yych <= 0x7F) - goto yy384; + goto yy405; if (yych <= 0xC1) - goto yy369; + goto yy349; if (yych <= 0xF4) - goto yy384; - goto yy369; - yy374: - yych = *++p; - goto yy369; - yy375: + goto yy405; + goto yy349; + yy353: + yych = *(marker = ++p); + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych != '-') + goto yy349; + } else { + if (yych <= '/') + goto yy359; + if (yych >= ':') + goto yy349; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy360; + if (yych <= '@') + goto yy349; + } else { + if (yych <= '`') + goto yy349; + if (yych >= '{') + goto yy349; + } + } + yy354: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy354; + } else { + if (yych <= '/') + goto yy359; + if (yych <= '9') + goto yy354; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy360; + if (yych >= 'A') + goto yy354; + } else { + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy354; + } + } + yy356: + p = marker; + goto yy349; + yy357: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych <= '>') { + if (yych <= '9') { + if (yych != '/') + goto yy356; + } else { + if (yych <= ':') + goto yy362; + if (yych <= '=') + goto yy356; + goto yy360; + } + } else { + if (yych <= '^') { + if (yych <= '@') + goto yy356; + if (yych <= 'Z') + goto yy362; + goto yy356; + } else { + if (yych == '`') + goto yy356; + if (yych <= 'z') + goto yy362; + goto yy356; + } + } + yy359: yych = *++p; + if (yych != '>') + goto yy356; + yy360: + ++p; + { return (bufsize_t)(p - start); } + yy362: + ++p; + yych = *p; + if (yybm[256 + yych] & 128) { + goto yy362; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy356; + } else { + if (yych != ' ') + goto yy356; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy359; + goto yy356; + } else { + if (yych <= '=') + goto yy366; + if (yych <= '>') + goto yy360; + goto yy356; + } + } + yy364: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy356; + if (yych <= '\r') + goto yy364; + if (yych <= 0x1F) + goto yy356; + goto yy364; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy356; + goto yy359; + } else { + if (yych == ':') + goto yy362; + goto yy356; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') + goto yy366; + if (yych <= '>') + goto yy360; + if (yych <= '@') + goto yy356; + goto yy362; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy356; + goto yy362; + } else { + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy362; + goto yy356; + } + } + } + yy366: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy368; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy356; + if (yych >= '!') + goto yy379; + } else { + if (yych <= '\'') + goto yy377; + if (yych <= 0xC1) + goto yy356; + if (yych <= 0xDF) + goto yy370; + goto yy371; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy368; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy356; + if (yych <= ' ') + goto yy402; + if (yych <= '"') + goto yy379; + goto yy377; + } else { + if (yych == '>') + goto yy360; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + yy368: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy368; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy356; + if (yych <= ' ') + goto yy396; + goto yy356; + } else { + if (yych <= '>') + goto yy360; + if (yych <= 0xC1) + goto yy356; + if (yych >= 0xE0) + goto yy371; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + yy370: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy374; - yy376: - p = marker; - goto yy369; - yy377: - yych = *++p; + goto yy368; + goto yy356; + yy371: + ++p; + yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy375; - goto yy376; - yy378: - yych = *++p; + goto yy370; + goto yy356; + yy372: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy375; - goto yy376; - yy379: - yych = *++p; + goto yy370; + goto yy356; + yy373: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy378; - goto yy376; - yy380: - yych = *++p; + goto yy372; + goto yy356; + yy374: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy378; - goto yy376; - yy381: - yych = *++p; + goto yy372; + goto yy356; + yy375: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy378; - goto yy376; - yy382: - yych = *++p; + goto yy372; + goto yy356; + yy376: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy375; - goto yy376; - yy383: + goto yy370; + goto yy356; + yy377: ++p; yych = *p; - yy384: - if (yybm[256 + yych] & 32) { - goto yy383; + if (yybm[0 + yych] & 2) { + goto yy377; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych <= '?') - goto yy392; - goto yy376; + goto yy356; + if (yych <= '\'') + goto yy388; + goto yy356; } else { if (yych <= 0xDF) - goto yy385; + goto yy389; if (yych <= 0xE0) - goto yy386; - goto yy387; + goto yy390; + goto yy391; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy391; + goto yy395; if (yych <= 0xEF) + goto yy391; + goto yy392; + } else { + if (yych <= 0xF3) + goto yy393; + if (yych <= 0xF4) + goto yy394; + goto yy356; + } + } + yy379: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy379; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy356; + if (yych <= '"') + goto yy388; + goto yy356; + } else { + if (yych <= 0xDF) + goto yy381; + if (yych <= 0xE0) + goto yy382; + goto yy383; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) goto yy387; - goto yy388; + if (yych <= 0xEF) + goto yy383; + goto yy384; } else { if (yych <= 0xF3) - goto yy389; + goto yy385; if (yych <= 0xF4) - goto yy390; - goto yy376; + goto yy386; + goto yy356; } } - yy385: + yy381: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy383; - goto yy376; - yy386: + goto yy379; + goto yy356; + yy382: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy385; - goto yy376; - yy387: + goto yy381; + goto yy356; + yy383: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy385; - goto yy376; - yy388: + goto yy381; + goto yy356; + yy384: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy387; - goto yy376; - yy389: + goto yy383; + goto yy356; + yy385: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy387; - goto yy376; - yy390: + goto yy383; + goto yy356; + yy386: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy387; - goto yy376; - yy391: + goto yy383; + goto yy356; + yy387: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy385; - goto yy376; - yy392: + goto yy381; + goto yy356; + yy388: ++p; yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy376; - if (yych <= '=') - goto yy383; - } else { - if (yych <= 0x7F) - goto yy383; - if (yych <= 0xC1) - goto yy376; - if (yych <= 0xDF) - goto yy395; - goto yy396; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy401; - goto yy397; - } else { - if (yych <= 0xF0) - goto yy398; - if (yych <= 0xF3) - goto yy399; - if (yych <= 0xF4) - goto yy400; - goto yy376; - } + if (yybm[256 + yych] & 64) { + goto yy357; } - yy393: - ++p; - { return (bufsize_t)(p - start); } - yy395: + if (yych == '/') + goto yy359; + if (yych == '>') + goto yy360; + goto yy356; + yy389: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy383; - goto yy376; - yy396: + goto yy377; + goto yy356; + yy390: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy395; - goto yy376; - yy397: + goto yy389; + goto yy356; + yy391: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy395; - goto yy376; - yy398: + goto yy389; + goto yy356; + yy392: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy397; - goto yy376; - yy399: + goto yy391; + goto yy356; + yy393: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy397; - goto yy376; - yy400: + goto yy391; + goto yy356; + yy394: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy397; - goto yy376; - yy401: + goto yy391; + goto yy356; + yy395: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy395; - goto yy376; - yy402: - yych = *++p; - if (yych == 'C') - goto yy438; - if (yych == 'c') - goto yy438; - goto yy376; - yy403: + goto yy389; + goto yy356; + yy396: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + goto yy396; + } else { + if (yych == ' ') + goto yy396; + if (yych <= '!') + goto yy368; + goto yy356; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy356; + if (yych <= '9') + goto yy368; + } else { + if (yych <= ';') + goto yy368; + if (yych <= '=') + goto yy356; + if (yych <= '>') + goto yy360; + goto yy368; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + if (yych >= '`') + goto yy356; + } else { + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + } + yy398: ++p; yych = *p; - if (yybm[0 + yych] & 1) { - goto yy427; - } - if (yych <= '@') - goto yy376; - if (yych <= 'Z') - goto yy403; - goto yy376; - yy405: - yych = *++p; - if (yych != '-') - goto yy376; - yych = *++p; - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych != '-') - goto yy409; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + if (yych >= 0x0E) + goto yy368; + } else { + if (yych <= ' ') + goto yy400; + if (yych == '"') + goto yy356; + goto yy368; + } } else { - if (yych <= '>') - goto yy376; - if (yych <= 0xC1) - goto yy409; - if (yych <= 0xDF) - goto yy410; - goto yy411; + if (yych <= '/') { + if (yych <= '\'') + goto yy356; + if (yych <= ',') + goto yy368; + if (yych <= '.') + goto yy398; + goto yy368; + } else { + if (yych <= ';') { + if (yych <= ':') + goto yy398; + goto yy368; + } else { + if (yych <= '<') + goto yy356; + if (yych <= '=') + goto yy366; + goto yy360; + } + } } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy416; - goto yy412; + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy368; + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + goto yy398; + } else { + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + goto yy356; + } } else { - if (yych <= 0xF0) - goto yy413; - if (yych <= 0xF3) - goto yy414; - if (yych <= 0xF4) - goto yy415; - goto yy409; + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy370; + if (yych <= 0xE0) + goto yy371; + if (yych <= 0xEC) + goto yy372; + goto yy376; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy372; + goto yy373; + } else { + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } } } - yych = *++p; - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych == '-') - goto yy426; - goto yy409; + yy400: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + if (yych <= '\r') + goto yy400; + goto yy368; + } else { + if (yych <= ' ') + goto yy400; + if (yych == '"') + goto yy356; + goto yy368; + } } else { - if (yych <= '>') - goto yy376; - if (yych <= 0xC1) - goto yy409; - if (yych <= 0xDF) - goto yy410; - goto yy411; + if (yych <= ';') { + if (yych <= '\'') + goto yy356; + if (yych == ':') + goto yy398; + goto yy368; + } else { + if (yych <= '<') + goto yy356; + if (yych <= '=') + goto yy366; + if (yych <= '>') + goto yy360; + goto yy368; + } } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy416; - goto yy412; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + if (yych <= '_') + goto yy398; + goto yy356; + } else { + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } } else { - if (yych <= 0xF0) - goto yy413; - if (yych <= 0xF3) - goto yy414; - if (yych <= 0xF4) - goto yy415; - goto yy409; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } } } - yy408: + yy402: ++p; yych = *p; - yy409: - if (yybm[256 + yych] & 128) { - goto yy408; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy376; - if (yych <= '-') - goto yy417; - goto yy376; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + goto yy402; + } else { + if (yych == ' ') + goto yy402; + if (yych <= '!') + goto yy368; + goto yy379; + } } else { - if (yych <= 0xDF) - goto yy418; - if (yych <= 0xE0) - goto yy419; - goto yy420; + if (yych <= ':') { + if (yych == '\'') + goto yy377; + if (yych <= '9') + goto yy368; + goto yy398; + } else { + if (yych <= ';') + goto yy368; + if (yych <= '=') + goto yy356; + if (yych <= '>') + goto yy360; + goto yy368; + } } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy424; - if (yych <= 0xEF) - goto yy420; - goto yy421; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + if (yych <= '_') + goto yy398; + goto yy356; + } else { + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } } else { - if (yych <= 0xF3) - goto yy422; - if (yych <= 0xF4) - goto yy423; - goto yy376; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } } } - yy410: - yych = *++p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0xBF) - goto yy408; - goto yy376; - yy411: - yych = *++p; - if (yych <= 0x9F) - goto yy376; - if (yych <= 0xBF) - goto yy410; - goto yy376; - yy412: - yych = *++p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0xBF) - goto yy410; - goto yy376; - yy413: - yych = *++p; - if (yych <= 0x8F) - goto yy376; - if (yych <= 0xBF) - goto yy412; - goto yy376; - yy414: - yych = *++p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0xBF) - goto yy412; - goto yy376; - yy415: - yych = *++p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0x8F) - goto yy412; - goto yy376; - yy416: - yych = *++p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0x9F) - goto yy410; - goto yy376; - yy417: + yy404: ++p; yych = *p; - if (yybm[256 + yych] & 128) { - goto yy408; + yy405: + if (yybm[0 + yych] & 8) { + goto yy404; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych <= '-') - goto yy425; - goto yy376; + goto yy356; + if (yych <= '?') + goto yy413; + goto yy356; } else { if (yych <= 0xDF) - goto yy418; + goto yy406; if (yych <= 0xE0) - goto yy419; - goto yy420; + goto yy407; + goto yy408; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy424; + goto yy412; if (yych <= 0xEF) - goto yy420; - goto yy421; + goto yy408; + goto yy409; } else { if (yych <= 0xF3) - goto yy422; + goto yy410; if (yych <= 0xF4) - goto yy423; - goto yy376; + goto yy411; + goto yy356; } } - yy418: + yy406: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy408; - goto yy376; - yy419: + goto yy404; + goto yy356; + yy407: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy418; - goto yy376; - yy420: + goto yy406; + goto yy356; + yy408: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy418; - goto yy376; - yy421: + goto yy406; + goto yy356; + yy409: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy420; - goto yy376; - yy422: + goto yy408; + goto yy356; + yy410: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy420; - goto yy376; - yy423: + goto yy408; + goto yy356; + yy411: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy420; - goto yy376; - yy424: + goto yy408; + goto yy356; + yy412: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy418; - goto yy376; - yy425: - yych = *++p; - if (yych == '>') - goto yy393; - goto yy376; - yy426: - yych = *++p; - if (yych == '>') - goto yy393; - goto yy376; - yy427: + goto yy406; + goto yy356; + yy413: ++p; yych = *p; - if (yybm[0 + yych] & 1) { - goto yy427; - } if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) - goto yy376; - if (yych >= '>') - goto yy393; + goto yy356; + if (yych <= '=') + goto yy404; + goto yy360; } else { if (yych <= 0x7F) - goto yy429; + goto yy404; if (yych <= 0xC1) - goto yy376; - if (yych <= 0xDF) - goto yy431; - goto yy432; + goto yy356; + if (yych >= 0xE0) + goto yy415; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy437; - goto yy433; + goto yy420; + goto yy416; } else { if (yych <= 0xF0) - goto yy434; - if (yych <= 0xF3) - goto yy435; - if (yych <= 0xF4) - goto yy436; - goto yy376; - } - } - yy429: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy429; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy376; - if (yych <= '>') - goto yy393; - goto yy376; - } else { - if (yych <= 0xDF) - goto yy431; - if (yych <= 0xE0) - goto yy432; - goto yy433; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy437; - if (yych <= 0xEF) - goto yy433; - goto yy434; - } else { + goto yy417; if (yych <= 0xF3) - goto yy435; + goto yy418; if (yych <= 0xF4) - goto yy436; - goto yy376; + goto yy419; + goto yy356; } } - yy431: + yy414: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy429; - goto yy376; - yy432: + goto yy404; + goto yy356; + yy415: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy431; - goto yy376; - yy433: + goto yy414; + goto yy356; + yy416: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy431; - goto yy376; - yy434: + goto yy414; + goto yy356; + yy417: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy433; - goto yy376; - yy435: + goto yy416; + goto yy356; + yy418: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy433; - goto yy376; - yy436: + goto yy416; + goto yy356; + yy419: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy433; - goto yy376; - yy437: + goto yy416; + goto yy356; + yy420: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy431; - goto yy376; - yy438: - yych = *++p; - if (yych == 'D') - goto yy439; - if (yych != 'd') - goto yy376; - yy439: + goto yy414; + goto yy356; + yy421: + ++p; + yych = *p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy356; + if (yych >= 0x0E) + goto yy356; + } else { + if (yych <= ' ') + goto yy423; + if (yych == '-') + goto yy421; + goto yy356; + } + } else { + if (yych <= '@') { + if (yych <= '9') + goto yy421; + if (yych == '>') + goto yy360; + goto yy356; + } else { + if (yych <= 'Z') + goto yy421; + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy421; + goto yy356; + } + } + yy423: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy356; + if (yych <= '\r') + goto yy423; + goto yy356; + } else { + if (yych <= ' ') + goto yy423; + if (yych == '>') + goto yy360; + goto yy356; + } + yy425: yych = *++p; - if (yych == 'A') - goto yy440; - if (yych != 'a') - goto yy376; - yy440: + if (yych == 'C') + goto yy461; + if (yych == 'c') + goto yy461; + goto yy356; + yy426: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy426; + } + if (yych <= 0x08) + goto yy356; + if (yych <= '\r') + goto yy450; + if (yych == ' ') + goto yy450; + goto yy356; + yy428: yych = *++p; - if (yych == 'T') - goto yy441; - if (yych != 't') - goto yy376; - yy441: + if (yych != '-') + goto yy356; yych = *++p; - if (yych == 'A') - goto yy442; - if (yych != 'a') - goto yy376; - yy442: + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych != '-') + goto yy432; + } else { + if (yych <= '>') + goto yy356; + if (yych <= 0xC1) + goto yy432; + if (yych <= 0xDF) + goto yy433; + goto yy434; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy439; + goto yy435; + } else { + if (yych <= 0xF0) + goto yy436; + if (yych <= 0xF3) + goto yy437; + if (yych <= 0xF4) + goto yy438; + goto yy432; + } + } yych = *++p; - if (yych != '[') - goto yy376; - yy443: + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych == '-') + goto yy449; + goto yy432; + } else { + if (yych <= '>') + goto yy356; + if (yych <= 0xC1) + goto yy432; + if (yych <= 0xDF) + goto yy433; + goto yy434; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy439; + goto yy435; + } else { + if (yych <= 0xF0) + goto yy436; + if (yych <= 0xF3) + goto yy437; + if (yych <= 0xF4) + goto yy438; + goto yy432; + } + } + yy431: ++p; yych = *p; - if (yybm[0 + yych] & 4) { - goto yy443; + yy432: + if (yybm[0 + yych] & 32) { + goto yy431; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych <= ']') - goto yy452; - goto yy376; + goto yy356; + if (yych <= '-') + goto yy440; + goto yy356; } else { if (yych <= 0xDF) - goto yy445; + goto yy441; if (yych <= 0xE0) - goto yy446; - goto yy447; + goto yy442; + goto yy443; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy451; - if (yych <= 0xEF) goto yy447; - goto yy448; + if (yych <= 0xEF) + goto yy443; + goto yy444; } else { if (yych <= 0xF3) - goto yy449; + goto yy445; if (yych <= 0xF4) - goto yy450; - goto yy376; + goto yy446; + goto yy356; } } - yy445: - ++p; - yych = *p; + yy433: + yych = *++p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy443; - goto yy376; - yy446: - ++p; - yych = *p; + goto yy431; + goto yy356; + yy434: + yych = *++p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy445; - goto yy376; - yy447: - ++p; - yych = *p; + goto yy433; + goto yy356; + yy435: + yych = *++p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy445; - goto yy376; - yy448: - ++p; - yych = *p; + goto yy433; + goto yy356; + yy436: + yych = *++p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy447; - goto yy376; - yy449: - ++p; - yych = *p; + goto yy435; + goto yy356; + yy437: + yych = *++p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy447; - goto yy376; - yy450: - ++p; - yych = *p; + goto yy435; + goto yy356; + yy438: + yych = *++p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy447; - goto yy376; - yy451: - ++p; - yych = *p; + goto yy435; + goto yy356; + yy439: + yych = *++p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy445; - goto yy376; - yy452: + goto yy433; + goto yy356; + yy440: ++p; yych = *p; - if (yybm[0 + yych] & 4) { - goto yy443; + if (yybm[0 + yych] & 32) { + goto yy431; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych >= '^') - goto yy376; + goto yy356; + if (yych <= '-') + goto yy448; + goto yy356; } else { if (yych <= 0xDF) - goto yy454; + goto yy441; if (yych <= 0xE0) - goto yy455; - goto yy456; + goto yy442; + goto yy443; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy460; + goto yy447; if (yych <= 0xEF) - goto yy456; - goto yy457; - } else { - if (yych <= 0xF3) - goto yy458; - if (yych <= 0xF4) - goto yy459; - goto yy376; - } - } - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy376; - if (yych <= '=') - goto yy443; - goto yy393; - } else { - if (yych <= 0x7F) goto yy443; - if (yych <= 0xC1) - goto yy376; - if (yych <= 0xDF) - goto yy461; - goto yy462; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy467; - goto yy463; + goto yy444; } else { - if (yych <= 0xF0) - goto yy464; if (yych <= 0xF3) - goto yy465; + goto yy445; if (yych <= 0xF4) - goto yy466; - goto yy376; + goto yy446; + goto yy356; } } - yy454: + yy441: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy443; - goto yy376; - yy455: + goto yy431; + goto yy356; + yy442: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; - if (yych <= 0xBF) - goto yy454; - goto yy376; - yy456: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0xBF) - goto yy454; - goto yy376; - yy457: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy456; - goto yy376; - yy458: + goto yy441; + goto yy356; + yy443: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy456; - goto yy376; - yy459: + goto yy441; + goto yy356; + yy444: ++p; yych = *p; - if (yych <= 0x7F) - goto yy376; if (yych <= 0x8F) - goto yy456; - goto yy376; - yy460: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0x9F) - goto yy454; - goto yy376; - yy461: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) goto yy443; - goto yy376; - yy462: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy376; - if (yych <= 0xBF) - goto yy461; - goto yy376; - yy463: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0xBF) - goto yy461; - goto yy376; - yy464: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy376; - if (yych <= 0xBF) - goto yy463; - goto yy376; - yy465: + goto yy356; + yy445: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy463; - goto yy376; - yy466: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0x8F) - goto yy463; - goto yy376; - yy467: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0x9F) - goto yy461; - goto yy376; - yy468: - ++p; - yych = *p; - if (yybm[0 + yych] & 8) { - goto yy468; - } - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy376; - if (yych >= 0x0E) - goto yy376; - } else { - if (yych <= ' ') - goto yy470; - if (yych == '>') - goto yy393; - goto yy376; - } - yy470: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy376; - if (yych <= '\r') - goto yy470; - goto yy376; - } else { - if (yych <= ' ') - goto yy470; - if (yych == '>') - goto yy393; - goto yy376; - } - yy472: - ++p; - yych = *p; - if (yych <= '/') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy376; - if (yych <= '\r') - goto yy474; - if (yych <= 0x1F) - goto yy376; - } else { - if (yych == '-') - goto yy472; - if (yych <= '.') - goto yy376; - goto yy476; - } - } else { - if (yych <= '@') { - if (yych <= '9') - goto yy472; - if (yych == '>') - goto yy393; - goto yy376; - } else { - if (yych <= 'Z') - goto yy472; - if (yych <= '`') - goto yy376; - if (yych <= 'z') - goto yy472; - goto yy376; - } - } - yy474: - ++p; - yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy376; - if (yych <= '\r') - goto yy474; - if (yych <= 0x1F) - goto yy376; - goto yy474; - } else { - if (yych == '/') - goto yy476; - if (yych <= '9') - goto yy376; - goto yy477; - } - } else { - if (yych <= 'Z') { - if (yych == '>') - goto yy393; - if (yych <= '@') - goto yy376; - goto yy477; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy376; - goto yy477; - } else { - if (yych <= '`') - goto yy376; - if (yych <= 'z') - goto yy477; - goto yy376; - } - } - } - yy476: - yych = *++p; - if (yych == '>') - goto yy393; - goto yy376; - yy477: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy477; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy376; - } else { - if (yych != ' ') - goto yy376; - } - } else { - if (yych <= '<') { - if (yych <= '/') - goto yy476; - goto yy376; - } else { - if (yych <= '=') - goto yy481; - if (yych <= '>') - goto yy393; - goto yy376; - } - } - yy479: + goto yy443; + goto yy356; + yy446: ++p; yych = *p; - if (yych <= '<') { - if (yych <= ' ') { + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy443; + goto yy356; + yy447: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy441; + goto yy356; + yy448: + yych = *++p; + if (yych == '>') + goto yy360; + goto yy356; + yy449: + yych = *++p; + if (yych == '>') + goto yy360; + goto yy356; + yy450: + ++p; + yych = *p; + if (yych <= 0xC1) { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy356; if (yych <= 0x08) - goto yy376; + goto yy452; if (yych <= '\r') - goto yy479; - if (yych <= 0x1F) - goto yy376; - goto yy479; + goto yy450; } else { - if (yych <= '/') { - if (yych <= '.') - goto yy376; - goto yy476; + if (yych <= '=') { + if (yych <= ' ') + goto yy450; } else { - if (yych == ':') - goto yy477; - goto yy376; + if (yych <= '>') + goto yy360; + if (yych >= 0x80) + goto yy356; } } } else { - if (yych <= 'Z') { - if (yych <= '=') - goto yy481; - if (yych <= '>') - goto yy393; - if (yych <= '@') - goto yy376; - goto yy477; + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy454; + if (yych <= 0xE0) + goto yy455; + if (yych <= 0xEC) + goto yy456; + goto yy460; } else { - if (yych <= '_') { - if (yych <= '^') - goto yy376; - goto yy477; + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy456; + goto yy457; } else { - if (yych <= '`') - goto yy376; - if (yych <= 'z') - goto yy477; - goto yy376; + if (yych <= 0xF3) + goto yy458; + if (yych <= 0xF4) + goto yy459; + goto yy356; } } } - yy481: + yy452: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy483; + if (yybm[0 + yych] & 64) { + goto yy452; } - if (yych <= 0xE0) { - if (yych <= '"') { + if (yych <= 0xEC) { + if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych >= '!') - goto yy494; + goto yy356; + if (yych <= '>') + goto yy360; + goto yy356; } else { - if (yych <= '\'') - goto yy492; - if (yych <= 0xC1) - goto yy376; if (yych <= 0xDF) - goto yy485; - goto yy486; + goto yy454; + if (yych <= 0xE0) + goto yy455; + goto yy456; } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy491; - goto yy487; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy460; + if (yych <= 0xEF) + goto yy456; + goto yy457; } else { - if (yych <= 0xF0) - goto yy488; if (yych <= 0xF3) - goto yy489; + goto yy458; if (yych <= 0xF4) - goto yy490; - goto yy376; + goto yy459; + goto yy356; } } + yy454: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy483; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) - goto yy376; - if (yych <= ' ') - goto yy517; - if (yych <= '"') - goto yy494; - goto yy492; - } else { - if (yych == '>') - goto yy393; - if (yych <= 0xC1) - goto yy376; - goto yy485; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy486; - if (yych == 0xED) - goto yy491; - goto yy487; - } else { - if (yych <= 0xF0) - goto yy488; - if (yych <= 0xF3) - goto yy489; - if (yych <= 0xF4) - goto yy490; - goto yy376; - } - } - yy483: + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy452; + goto yy356; + yy455: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy483; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy454; + goto yy356; + yy456: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy454; + goto yy356; + yy457: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy456; + goto yy356; + yy458: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy456; + goto yy356; + yy459: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy456; + goto yy356; + yy460: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy454; + goto yy356; + yy461: + yych = *++p; + if (yych == 'D') + goto yy462; + if (yych != 'd') + goto yy356; + yy462: + yych = *++p; + if (yych == 'A') + goto yy463; + if (yych != 'a') + goto yy356; + yy463: + yych = *++p; + if (yych == 'T') + goto yy464; + if (yych != 't') + goto yy356; + yy464: + yych = *++p; + if (yych == 'A') + goto yy465; + if (yych != 'a') + goto yy356; + yy465: + yych = *++p; + if (yych != '[') + goto yy356; + yy466: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy466; } - if (yych <= 0xE0) { - if (yych <= '=') { + if (yych <= 0xEC) { + if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych <= ' ') - goto yy511; - goto yy376; + goto yy356; + if (yych <= ']') + goto yy475; + goto yy356; } else { - if (yych <= '>') - goto yy393; - if (yych <= 0xC1) - goto yy376; - if (yych >= 0xE0) - goto yy486; + if (yych <= 0xDF) + goto yy468; + if (yych <= 0xE0) + goto yy469; + goto yy470; } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy491; - goto yy487; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy474; + if (yych <= 0xEF) + goto yy470; + goto yy471; } else { - if (yych <= 0xF0) - goto yy488; if (yych <= 0xF3) - goto yy489; + goto yy472; if (yych <= 0xF4) - goto yy490; - goto yy376; + goto yy473; + goto yy356; } } - yy485: + yy468: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy483; - goto yy376; - yy486: + goto yy466; + goto yy356; + yy469: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy485; - goto yy376; - yy487: + goto yy468; + goto yy356; + yy470: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy485; - goto yy376; - yy488: + goto yy468; + goto yy356; + yy471: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy487; - goto yy376; - yy489: + goto yy470; + goto yy356; + yy472: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy487; - goto yy376; - yy490: + goto yy470; + goto yy356; + yy473: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy487; - goto yy376; - yy491: + goto yy470; + goto yy356; + yy474: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy485; - goto yy376; - yy492: + goto yy468; + goto yy356; + yy475: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy492; + if (yybm[0 + yych] & 128) { + goto yy466; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy376; - if (yych <= '\'') - goto yy503; - goto yy376; + goto yy356; + if (yych >= '^') + goto yy356; } else { if (yych <= 0xDF) - goto yy504; + goto yy477; if (yych <= 0xE0) - goto yy505; - goto yy506; + goto yy478; + goto yy479; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy510; + goto yy483; if (yych <= 0xEF) - goto yy506; - goto yy507; + goto yy479; + goto yy480; } else { if (yych <= 0xF3) - goto yy508; + goto yy481; if (yych <= 0xF4) - goto yy509; - goto yy376; + goto yy482; + goto yy356; } } - yy494: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy494; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { + if (yych <= 0xE0) { + if (yych <= '>') { if (yych <= 0x00) - goto yy376; - if (yych <= '"') - goto yy503; - goto yy376; + goto yy356; + if (yych <= '=') + goto yy466; + goto yy360; } else { + if (yych <= 0x7F) + goto yy466; + if (yych <= 0xC1) + goto yy356; if (yych <= 0xDF) - goto yy496; - if (yych <= 0xE0) - goto yy497; - goto yy498; + goto yy484; + goto yy485; } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy502; - if (yych <= 0xEF) - goto yy498; - goto yy499; + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy490; + goto yy486; } else { + if (yych <= 0xF0) + goto yy487; if (yych <= 0xF3) - goto yy500; + goto yy488; if (yych <= 0xF4) - goto yy501; - goto yy376; + goto yy489; + goto yy356; } } - yy496: + yy477: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy494; - goto yy376; - yy497: + goto yy466; + goto yy356; + yy478: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy496; - goto yy376; - yy498: + goto yy477; + goto yy356; + yy479: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy496; - goto yy376; - yy499: + goto yy477; + goto yy356; + yy480: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy498; - goto yy376; - yy500: + goto yy479; + goto yy356; + yy481: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy498; - goto yy376; - yy501: + goto yy479; + goto yy356; + yy482: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x8F) - goto yy498; - goto yy376; - yy502: + goto yy479; + goto yy356; + yy483: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0x9F) - goto yy496; - goto yy376; - yy503: - ++p; - yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy376; - if (yych <= '\r') - goto yy474; - if (yych <= 0x1F) - goto yy376; - goto yy474; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy376; - goto yy476; - } else { - if (yych == '>') - goto yy393; - goto yy376; - } - } - yy504: + goto yy477; + goto yy356; + yy484: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy492; - goto yy376; - yy505: + goto yy466; + goto yy356; + yy485: ++p; yych = *p; if (yych <= 0x9F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy504; - goto yy376; - yy506: + goto yy484; + goto yy356; + yy486: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy504; - goto yy376; - yy507: + goto yy484; + goto yy356; + yy487: ++p; yych = *p; if (yych <= 0x8F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy506; - goto yy376; - yy508: + goto yy486; + goto yy356; + yy488: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; + goto yy356; if (yych <= 0xBF) - goto yy506; - goto yy376; - yy509: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy376; - if (yych <= 0x8F) - goto yy506; - goto yy376; - yy510: + goto yy486; + goto yy356; + yy489: ++p; yych = *p; if (yych <= 0x7F) - goto yy376; - if (yych <= 0x9F) - goto yy504; - goto yy376; - yy511: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy376; - if (yych <= 0x08) - goto yy483; - goto yy511; - } else { - if (yych == ' ') - goto yy511; - if (yych <= '!') - goto yy483; - goto yy376; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy376; - if (yych <= '9') - goto yy483; - } else { - if (yych <= ';') - goto yy483; - if (yych <= '=') - goto yy376; - if (yych <= '>') - goto yy393; - goto yy483; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy513; - if (yych <= '^') - goto yy483; - if (yych >= '`') - goto yy376; - } else { - if (yych <= 'z') - goto yy513; - if (yych <= 0x7F) - goto yy483; - if (yych <= 0xC1) - goto yy376; - goto yy485; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy486; - if (yych == 0xED) - goto yy491; - goto yy487; - } else { - if (yych <= 0xF0) - goto yy488; - if (yych <= 0xF3) - goto yy489; - if (yych <= 0xF4) - goto yy490; - goto yy376; - } - } - } - yy513: - ++p; - yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy376; - if (yych <= 0x08) - goto yy483; - if (yych >= 0x0E) - goto yy483; - } else { - if (yych <= ' ') - goto yy515; - if (yych == '"') - goto yy376; - goto yy483; - } - } else { - if (yych <= '/') { - if (yych <= '\'') - goto yy376; - if (yych <= ',') - goto yy483; - if (yych <= '.') - goto yy513; - goto yy483; - } else { - if (yych <= ';') { - if (yych <= ':') - goto yy513; - goto yy483; - } else { - if (yych <= '<') - goto yy376; - if (yych <= '=') - goto yy481; - goto yy393; - } - } - } - } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') - goto yy483; - if (yych <= 'Z') - goto yy513; - if (yych <= '^') - goto yy483; - goto yy513; - } else { - if (yych <= '`') - goto yy376; - if (yych <= 'z') - goto yy513; - if (yych <= 0x7F) - goto yy483; - goto yy376; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy485; - if (yych <= 0xE0) - goto yy486; - if (yych <= 0xEC) - goto yy487; - goto yy491; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy487; - goto yy488; - } else { - if (yych <= 0xF3) - goto yy489; - if (yych <= 0xF4) - goto yy490; - goto yy376; - } - } - } - } - yy515: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy376; - if (yych <= 0x08) - goto yy483; - if (yych <= '\r') - goto yy515; - goto yy483; - } else { - if (yych <= ' ') - goto yy515; - if (yych == '"') - goto yy376; - goto yy483; - } - } else { - if (yych <= ';') { - if (yych <= '\'') - goto yy376; - if (yych == ':') - goto yy513; - goto yy483; - } else { - if (yych <= '<') - goto yy376; - if (yych <= '=') - goto yy481; - if (yych <= '>') - goto yy393; - goto yy483; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy513; - if (yych <= '^') - goto yy483; - if (yych <= '_') - goto yy513; - goto yy376; - } else { - if (yych <= 'z') - goto yy513; - if (yych <= 0x7F) - goto yy483; - if (yych <= 0xC1) - goto yy376; - goto yy485; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy486; - if (yych == 0xED) - goto yy491; - goto yy487; - } else { - if (yych <= 0xF0) - goto yy488; - if (yych <= 0xF3) - goto yy489; - if (yych <= 0xF4) - goto yy490; - goto yy376; - } - } - } - yy517: + goto yy356; + if (yych <= 0x8F) + goto yy486; + goto yy356; + yy490: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy376; - if (yych <= 0x08) - goto yy483; - goto yy517; - } else { - if (yych == ' ') - goto yy517; - if (yych <= '!') - goto yy483; - goto yy494; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy492; - if (yych <= '9') - goto yy483; - goto yy513; - } else { - if (yych <= ';') - goto yy483; - if (yych <= '=') - goto yy376; - if (yych <= '>') - goto yy393; - goto yy483; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy513; - if (yych <= '^') - goto yy483; - if (yych <= '_') - goto yy513; - goto yy376; - } else { - if (yych <= 'z') - goto yy513; - if (yych <= 0x7F) - goto yy483; - if (yych <= 0xC1) - goto yy376; - goto yy485; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy486; - if (yych == 0xED) - goto yy491; - goto yy487; - } else { - if (yych <= 0xF0) - goto yy488; - if (yych <= 0xF3) - goto yy489; - if (yych <= 0xF4) - goto yy490; - goto yy376; - } - } - } + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy484; + goto yy356; } } @@ -10094,317 +9752,241 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { { unsigned char yych; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= ';') { - if (yych != '\n') - goto yy523; - } else { - if (yych <= '<') - goto yy522; - if (yych <= 0x7F) - goto yy523; - if (yych >= 0xC2) - goto yy524; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy526; - if (yych == 0xED) - goto yy531; - goto yy527; - } else { - if (yych <= 0xF0) - goto yy528; - if (yych <= 0xF3) - goto yy529; - if (yych <= 0xF4) - goto yy530; - } - } - yy521 : { return 0; } - yy522: + yych = *p; + if (yych == '<') + goto yy495; + ++p; + yy494 : { return 0; } + yy495: yych = *(marker = ++p); switch (yych) { case '!': - goto yy548; + goto yy513; case '/': - goto yy532; + goto yy496; case '?': - goto yy549; + goto yy514; case 'A': case 'a': - goto yy534; + goto yy499; case 'B': case 'b': - goto yy535; + goto yy500; case 'C': case 'c': - goto yy536; + goto yy501; case 'D': case 'd': - goto yy537; + goto yy502; case 'F': case 'f': - goto yy538; + goto yy503; case 'H': case 'h': - goto yy539; + goto yy504; case 'I': case 'i': - goto yy540; + goto yy505; case 'L': case 'l': - goto yy541; + goto yy506; case 'M': case 'm': - goto yy542; + goto yy507; case 'N': case 'n': - goto yy543; + goto yy508; case 'O': case 'o': - goto yy544; + goto yy509; case 'P': case 'p': - goto yy533; + goto yy498; case 'S': case 's': - goto yy545; + goto yy510; case 'T': case 't': - goto yy546; + goto yy511; case 'U': case 'u': - goto yy547; + goto yy512; default: - goto yy521; + goto yy494; } - yy523: - yych = *++p; - goto yy521; - yy524: - yych = *++p; - if (yych <= 0x7F) - goto yy525; - if (yych <= 0xBF) - goto yy523; - yy525: - p = marker; - goto yy521; - yy526: - yych = *++p; - if (yych <= 0x9F) - goto yy525; - if (yych <= 0xBF) - goto yy524; - goto yy525; - yy527: - yych = *++p; - if (yych <= 0x7F) - goto yy525; - if (yych <= 0xBF) - goto yy524; - goto yy525; - yy528: - yych = *++p; - if (yych <= 0x8F) - goto yy525; - if (yych <= 0xBF) - goto yy527; - goto yy525; - yy529: - yych = *++p; - if (yych <= 0x7F) - goto yy525; - if (yych <= 0xBF) - goto yy527; - goto yy525; - yy530: - yych = *++p; - if (yych <= 0x7F) - goto yy525; - if (yych <= 0x8F) - goto yy527; - goto yy525; - yy531: - yych = *++p; - if (yych <= 0x7F) - goto yy525; - if (yych <= 0x9F) - goto yy524; - goto yy525; - yy532: + yy496: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy534; + goto yy499; case 'B': case 'b': - goto yy535; + goto yy500; case 'C': case 'c': - goto yy536; + goto yy501; case 'D': case 'd': - goto yy537; + goto yy502; case 'F': case 'f': - goto yy538; + goto yy503; case 'H': case 'h': - goto yy539; + goto yy504; case 'I': case 'i': - goto yy540; + goto yy505; case 'L': case 'l': - goto yy541; + goto yy506; case 'M': case 'm': - goto yy542; + goto yy507; case 'N': case 'n': - goto yy543; + goto yy508; case 'O': case 'o': - goto yy544; + goto yy509; case 'P': case 'p': - goto yy733; + goto yy698; case 'S': case 's': - goto yy734; + goto yy699; case 'T': case 't': - goto yy546; + goto yy511; case 'U': case 'u': - goto yy547; + goto yy512; default: - goto yy525; + goto yy497; } - yy533: + yy497: + p = marker; + goto yy494; + yy498: yych = *++p; if (yych <= '>') { if (yych <= ' ') { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; + goto yy530; if (yych <= 0x1F) - goto yy525; - goto yy565; + goto yy497; + goto yy530; } else { if (yych == '/') - goto yy567; + goto yy532; if (yych <= '=') - goto yy525; - goto yy565; + goto yy497; + goto yy530; } } else { if (yych <= 'R') { if (yych == 'A') - goto yy730; + goto yy695; if (yych <= 'Q') - goto yy525; - goto yy729; + goto yy497; + goto yy694; } else { if (yych <= 'a') { if (yych <= '`') - goto yy525; - goto yy730; + goto yy497; + goto yy695; } else { if (yych == 'r') - goto yy729; - goto yy525; + goto yy694; + goto yy497; } } } - yy534: + yy499: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= 'C') - goto yy525; - goto yy718; + goto yy497; + goto yy683; } else { if (yych <= 'Q') - goto yy525; + goto yy497; if (yych <= 'R') - goto yy717; - goto yy716; + goto yy682; + goto yy681; } } else { if (yych <= 'q') { if (yych == 'd') - goto yy718; - goto yy525; + goto yy683; + goto yy497; } else { if (yych <= 'r') - goto yy717; + goto yy682; if (yych <= 's') - goto yy716; - goto yy525; + goto yy681; + goto yy497; } } - yy535: + yy500: yych = *++p; if (yych <= 'O') { if (yych <= 'K') { if (yych == 'A') - goto yy702; - goto yy525; + goto yy667; + goto yy497; } else { if (yych <= 'L') - goto yy701; + goto yy666; if (yych <= 'N') - goto yy525; - goto yy700; + goto yy497; + goto yy665; } } else { if (yych <= 'k') { if (yych == 'a') - goto yy702; - goto yy525; + goto yy667; + goto yy497; } else { if (yych <= 'l') - goto yy701; + goto yy666; if (yych == 'o') - goto yy700; - goto yy525; + goto yy665; + goto yy497; } } - yy536: + yy501: yych = *++p; if (yych <= 'O') { if (yych <= 'D') { if (yych == 'A') - goto yy687; - goto yy525; + goto yy652; + goto yy497; } else { if (yych <= 'E') - goto yy686; + goto yy651; if (yych <= 'N') - goto yy525; - goto yy685; + goto yy497; + goto yy650; } } else { if (yych <= 'd') { if (yych == 'a') - goto yy687; - goto yy525; + goto yy652; + goto yy497; } else { if (yych <= 'e') - goto yy686; + goto yy651; if (yych == 'o') - goto yy685; - goto yy525; + goto yy650; + goto yy497; } } - yy537: + yy502: yych = *++p; switch (yych) { case 'D': @@ -10413,1664 +9995,1664 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'd': case 'l': case 't': - goto yy564; + goto yy529; case 'E': case 'e': - goto yy677; + goto yy642; case 'I': case 'i': - goto yy676; + goto yy641; default: - goto yy525; + goto yy497; } - yy538: + yy503: yych = *++p; if (yych <= 'R') { if (yych <= 'N') { if (yych == 'I') - goto yy652; - goto yy525; + goto yy617; + goto yy497; } else { if (yych <= 'O') - goto yy651; + goto yy616; if (yych <= 'Q') - goto yy525; - goto yy650; + goto yy497; + goto yy615; } } else { if (yych <= 'n') { if (yych == 'i') - goto yy652; - goto yy525; + goto yy617; + goto yy497; } else { if (yych <= 'o') - goto yy651; + goto yy616; if (yych == 'r') - goto yy650; - goto yy525; + goto yy615; + goto yy497; } } - yy539: + yy504: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= '0') - goto yy525; + goto yy497; if (yych <= '6') - goto yy564; - goto yy525; + goto yy529; + goto yy497; } else { if (yych <= 'E') - goto yy645; + goto yy610; if (yych == 'R') - goto yy564; - goto yy525; + goto yy529; + goto yy497; } } else { if (yych <= 'q') { if (yych <= 'T') - goto yy644; + goto yy609; if (yych == 'e') - goto yy645; - goto yy525; + goto yy610; + goto yy497; } else { if (yych <= 'r') - goto yy564; + goto yy529; if (yych == 't') - goto yy644; - goto yy525; + goto yy609; + goto yy497; } } - yy540: + yy505: yych = *++p; if (yych == 'F') - goto yy640; + goto yy605; if (yych == 'f') - goto yy640; - goto yy525; - yy541: + goto yy605; + goto yy497; + yy506: yych = *++p; if (yych <= 'I') { if (yych == 'E') - goto yy635; + goto yy600; if (yych <= 'H') - goto yy525; - goto yy634; + goto yy497; + goto yy599; } else { if (yych <= 'e') { if (yych <= 'd') - goto yy525; - goto yy635; + goto yy497; + goto yy600; } else { if (yych == 'i') - goto yy634; - goto yy525; + goto yy599; + goto yy497; } } - yy542: + yy507: yych = *++p; if (yych <= 'E') { if (yych == 'A') - goto yy626; + goto yy591; if (yych <= 'D') - goto yy525; - goto yy625; + goto yy497; + goto yy590; } else { if (yych <= 'a') { if (yych <= '`') - goto yy525; - goto yy626; + goto yy497; + goto yy591; } else { if (yych == 'e') - goto yy625; - goto yy525; + goto yy590; + goto yy497; } } - yy543: + yy508: yych = *++p; if (yych <= 'O') { if (yych == 'A') - goto yy619; + goto yy584; if (yych <= 'N') - goto yy525; - goto yy618; + goto yy497; + goto yy583; } else { if (yych <= 'a') { if (yych <= '`') - goto yy525; - goto yy619; + goto yy497; + goto yy584; } else { if (yych == 'o') - goto yy618; - goto yy525; + goto yy583; + goto yy497; } } - yy544: + yy509: yych = *++p; if (yych <= 'P') { if (yych == 'L') - goto yy564; + goto yy529; if (yych <= 'O') - goto yy525; - goto yy610; + goto yy497; + goto yy575; } else { if (yych <= 'l') { if (yych <= 'k') - goto yy525; - goto yy564; + goto yy497; + goto yy529; } else { if (yych == 'p') - goto yy610; - goto yy525; + goto yy575; + goto yy497; } } - yy545: + yy510: yych = *++p; switch (yych) { case 'C': case 'c': - goto yy587; + goto yy552; case 'E': case 'e': - goto yy590; + goto yy555; case 'O': case 'o': - goto yy589; + goto yy554; case 'T': case 't': - goto yy586; + goto yy551; case 'U': case 'u': - goto yy588; + goto yy553; default: - goto yy525; + goto yy497; } - yy546: + yy511: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy573; + goto yy538; case 'B': case 'b': - goto yy572; + goto yy537; case 'D': case 'd': - goto yy564; + goto yy529; case 'F': case 'f': - goto yy571; + goto yy536; case 'H': case 'h': - goto yy570; + goto yy535; case 'I': case 'i': - goto yy569; + goto yy534; case 'R': case 'r': - goto yy568; + goto yy533; default: - goto yy525; + goto yy497; } - yy547: + yy512: yych = *++p; if (yych == 'L') - goto yy564; + goto yy529; if (yych == 'l') - goto yy564; - goto yy525; - yy548: + goto yy529; + goto yy497; + yy513: yych = *++p; if (yych <= '@') { if (yych == '-') - goto yy551; - goto yy525; + goto yy516; + goto yy497; } else { if (yych <= 'Z') - goto yy552; + goto yy517; if (yych <= '[') - goto yy554; - goto yy525; + goto yy519; + goto yy497; } - yy549: + yy514: ++p; { return 3; } - yy551: + yy516: yych = *++p; if (yych == '-') - goto yy562; - goto yy525; - yy552: + goto yy527; + goto yy497; + yy517: ++p; { return 4; } - yy554: + yy519: yych = *++p; if (yych == 'C') - goto yy555; + goto yy520; if (yych != 'c') - goto yy525; - yy555: + goto yy497; + yy520: yych = *++p; if (yych == 'D') - goto yy556; + goto yy521; if (yych != 'd') - goto yy525; - yy556: + goto yy497; + yy521: yych = *++p; if (yych == 'A') - goto yy557; + goto yy522; if (yych != 'a') - goto yy525; - yy557: + goto yy497; + yy522: yych = *++p; if (yych == 'T') - goto yy558; + goto yy523; if (yych != 't') - goto yy525; - yy558: + goto yy497; + yy523: yych = *++p; if (yych == 'A') - goto yy559; + goto yy524; if (yych != 'a') - goto yy525; - yy559: + goto yy497; + yy524: yych = *++p; if (yych != '[') - goto yy525; + goto yy497; ++p; { return 5; } - yy562: + yy527: ++p; { return 2; } - yy564: + yy529: yych = *++p; if (yych <= ' ') { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; + goto yy530; if (yych <= 0x1F) - goto yy525; + goto yy497; } else { if (yych <= '/') { if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } else { if (yych != '>') - goto yy525; + goto yy497; } } - yy565: + yy530: ++p; { return 6; } - yy567: + yy532: yych = *++p; if (yych == '>') - goto yy565; - goto yy525; - yy568: + goto yy530; + goto yy497; + yy533: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= '@') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'A') - goto yy584; + goto yy549; if (yych == 'a') - goto yy584; - goto yy525; + goto yy549; + goto yy497; } } - yy569: + yy534: yych = *++p; if (yych == 'T') - goto yy582; + goto yy547; if (yych == 't') - goto yy582; - goto yy525; - yy570: + goto yy547; + goto yy497; + yy535: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'D') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'E') - goto yy580; + goto yy545; if (yych == 'e') - goto yy580; - goto yy525; + goto yy545; + goto yy497; } } - yy571: + yy536: yych = *++p; if (yych == 'O') - goto yy578; + goto yy543; if (yych == 'o') - goto yy578; - goto yy525; - yy572: + goto yy543; + goto yy497; + yy537: yych = *++p; if (yych == 'O') - goto yy576; + goto yy541; if (yych == 'o') - goto yy576; - goto yy525; - yy573: + goto yy541; + goto yy497; + yy538: yych = *++p; if (yych == 'B') - goto yy574; + goto yy539; if (yych != 'b') - goto yy525; - yy574: + goto yy497; + yy539: yych = *++p; if (yych == 'L') - goto yy575; + goto yy540; if (yych != 'l') - goto yy525; - yy575: + goto yy497; + yy540: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy576: + goto yy529; + goto yy497; + yy541: yych = *++p; if (yych == 'D') - goto yy577; + goto yy542; if (yych != 'd') - goto yy525; - yy577: + goto yy497; + yy542: yych = *++p; if (yych == 'Y') - goto yy564; + goto yy529; if (yych == 'y') - goto yy564; - goto yy525; - yy578: + goto yy529; + goto yy497; + yy543: yych = *++p; if (yych == 'O') - goto yy579; + goto yy544; if (yych != 'o') - goto yy525; - yy579: + goto yy497; + yy544: yych = *++p; if (yych == 'T') - goto yy564; + goto yy529; if (yych == 't') - goto yy564; - goto yy525; - yy580: + goto yy529; + goto yy497; + yy545: yych = *++p; if (yych == 'A') - goto yy581; + goto yy546; if (yych != 'a') - goto yy525; - yy581: + goto yy497; + yy546: yych = *++p; if (yych == 'D') - goto yy564; + goto yy529; if (yych == 'd') - goto yy564; - goto yy525; - yy582: + goto yy529; + goto yy497; + yy547: yych = *++p; if (yych == 'L') - goto yy583; + goto yy548; if (yych != 'l') - goto yy525; - yy583: + goto yy497; + yy548: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy584: + goto yy529; + goto yy497; + yy549: yych = *++p; if (yych == 'C') - goto yy585; + goto yy550; if (yych != 'c') - goto yy525; - yy585: + goto yy497; + yy550: yych = *++p; if (yych == 'K') - goto yy564; + goto yy529; if (yych == 'k') - goto yy564; - goto yy525; - yy586: + goto yy529; + goto yy497; + yy551: yych = *++p; if (yych == 'Y') - goto yy608; + goto yy573; if (yych == 'y') - goto yy608; - goto yy525; - yy587: + goto yy573; + goto yy497; + yy552: yych = *++p; if (yych == 'R') - goto yy602; + goto yy567; if (yych == 'r') - goto yy602; - goto yy525; - yy588: + goto yy567; + goto yy497; + yy553: yych = *++p; if (yych == 'M') - goto yy598; + goto yy563; if (yych == 'm') - goto yy598; - goto yy525; - yy589: + goto yy563; + goto yy497; + yy554: yych = *++p; if (yych == 'U') - goto yy595; + goto yy560; if (yych == 'u') - goto yy595; - goto yy525; - yy590: + goto yy560; + goto yy497; + yy555: yych = *++p; if (yych == 'C') - goto yy591; + goto yy556; if (yych != 'c') - goto yy525; - yy591: + goto yy497; + yy556: yych = *++p; if (yych == 'T') - goto yy592; + goto yy557; if (yych != 't') - goto yy525; - yy592: + goto yy497; + yy557: yych = *++p; if (yych == 'I') - goto yy593; + goto yy558; if (yych != 'i') - goto yy525; - yy593: + goto yy497; + yy558: yych = *++p; if (yych == 'O') - goto yy594; + goto yy559; if (yych != 'o') - goto yy525; - yy594: + goto yy497; + yy559: yych = *++p; if (yych == 'N') - goto yy564; + goto yy529; if (yych == 'n') - goto yy564; - goto yy525; - yy595: + goto yy529; + goto yy497; + yy560: yych = *++p; if (yych == 'R') - goto yy596; + goto yy561; if (yych != 'r') - goto yy525; - yy596: + goto yy497; + yy561: yych = *++p; if (yych == 'C') - goto yy597; + goto yy562; if (yych != 'c') - goto yy525; - yy597: + goto yy497; + yy562: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy598: + goto yy529; + goto yy497; + yy563: yych = *++p; if (yych == 'M') - goto yy599; + goto yy564; if (yych != 'm') - goto yy525; - yy599: + goto yy497; + yy564: yych = *++p; if (yych == 'A') - goto yy600; + goto yy565; if (yych != 'a') - goto yy525; - yy600: + goto yy497; + yy565: yych = *++p; if (yych == 'R') - goto yy601; + goto yy566; if (yych != 'r') - goto yy525; - yy601: + goto yy497; + yy566: yych = *++p; if (yych == 'Y') - goto yy564; + goto yy529; if (yych == 'y') - goto yy564; - goto yy525; - yy602: + goto yy529; + goto yy497; + yy567: yych = *++p; if (yych == 'I') - goto yy603; + goto yy568; if (yych != 'i') - goto yy525; - yy603: + goto yy497; + yy568: yych = *++p; if (yych == 'P') - goto yy604; + goto yy569; if (yych != 'p') - goto yy525; - yy604: + goto yy497; + yy569: yych = *++p; if (yych == 'T') - goto yy605; + goto yy570; if (yych != 't') - goto yy525; - yy605: + goto yy497; + yy570: yych = *++p; if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych >= 0x0E) - goto yy525; + goto yy497; } else { if (yych <= ' ') - goto yy606; + goto yy571; if (yych != '>') - goto yy525; + goto yy497; } - yy606: + yy571: ++p; { return 1; } - yy608: + yy573: yych = *++p; if (yych == 'L') - goto yy609; + goto yy574; if (yych != 'l') - goto yy525; - yy609: + goto yy497; + yy574: yych = *++p; if (yych == 'E') - goto yy605; + goto yy570; if (yych == 'e') - goto yy605; - goto yy525; - yy610: + goto yy570; + goto yy497; + yy575: yych = *++p; if (yych == 'T') - goto yy611; + goto yy576; if (yych != 't') - goto yy525; - yy611: + goto yy497; + yy576: yych = *++p; if (yych <= 'I') { if (yych == 'G') - goto yy613; + goto yy578; if (yych <= 'H') - goto yy525; + goto yy497; } else { if (yych <= 'g') { if (yych <= 'f') - goto yy525; - goto yy613; + goto yy497; + goto yy578; } else { if (yych != 'i') - goto yy525; + goto yy497; } } yych = *++p; if (yych == 'O') - goto yy617; + goto yy582; if (yych == 'o') - goto yy617; - goto yy525; - yy613: + goto yy582; + goto yy497; + yy578: yych = *++p; if (yych == 'R') - goto yy614; + goto yy579; if (yych != 'r') - goto yy525; - yy614: + goto yy497; + yy579: yych = *++p; if (yych == 'O') - goto yy615; + goto yy580; if (yych != 'o') - goto yy525; - yy615: + goto yy497; + yy580: yych = *++p; if (yych == 'U') - goto yy616; + goto yy581; if (yych != 'u') - goto yy525; - yy616: + goto yy497; + yy581: yych = *++p; if (yych == 'P') - goto yy564; + goto yy529; if (yych == 'p') - goto yy564; - goto yy525; - yy617: + goto yy529; + goto yy497; + yy582: yych = *++p; if (yych == 'N') - goto yy564; + goto yy529; if (yych == 'n') - goto yy564; - goto yy525; - yy618: + goto yy529; + goto yy497; + yy583: yych = *++p; if (yych == 'F') - goto yy620; + goto yy585; if (yych == 'f') - goto yy620; - goto yy525; - yy619: + goto yy585; + goto yy497; + yy584: yych = *++p; if (yych == 'V') - goto yy564; + goto yy529; if (yych == 'v') - goto yy564; - goto yy525; - yy620: + goto yy529; + goto yy497; + yy585: yych = *++p; if (yych == 'R') - goto yy621; + goto yy586; if (yych != 'r') - goto yy525; - yy621: + goto yy497; + yy586: yych = *++p; if (yych == 'A') - goto yy622; + goto yy587; if (yych != 'a') - goto yy525; - yy622: + goto yy497; + yy587: yych = *++p; if (yych == 'M') - goto yy623; + goto yy588; if (yych != 'm') - goto yy525; - yy623: + goto yy497; + yy588: yych = *++p; if (yych == 'E') - goto yy624; + goto yy589; if (yych != 'e') - goto yy525; - yy624: + goto yy497; + yy589: yych = *++p; if (yych == 'S') - goto yy564; + goto yy529; if (yych == 's') - goto yy564; - goto yy525; - yy625: + goto yy529; + goto yy497; + yy590: yych = *++p; if (yych <= 'T') { if (yych == 'N') - goto yy628; + goto yy593; if (yych <= 'S') - goto yy525; - goto yy629; + goto yy497; + goto yy594; } else { if (yych <= 'n') { if (yych <= 'm') - goto yy525; - goto yy628; + goto yy497; + goto yy593; } else { if (yych == 't') - goto yy629; - goto yy525; + goto yy594; + goto yy497; } } - yy626: + yy591: yych = *++p; if (yych == 'I') - goto yy627; + goto yy592; if (yych != 'i') - goto yy525; - yy627: + goto yy497; + yy592: yych = *++p; if (yych == 'N') - goto yy564; + goto yy529; if (yych == 'n') - goto yy564; - goto yy525; - yy628: + goto yy529; + goto yy497; + yy593: yych = *++p; if (yych == 'U') - goto yy630; + goto yy595; if (yych == 'u') - goto yy630; - goto yy525; - yy629: + goto yy595; + goto yy497; + yy594: yych = *++p; if (yych == 'A') - goto yy564; + goto yy529; if (yych == 'a') - goto yy564; - goto yy525; - yy630: + goto yy529; + goto yy497; + yy595: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'H') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'I') - goto yy631; + goto yy596; if (yych != 'i') - goto yy525; + goto yy497; } } - yy631: + yy596: yych = *++p; if (yych == 'T') - goto yy632; + goto yy597; if (yych != 't') - goto yy525; - yy632: + goto yy497; + yy597: yych = *++p; if (yych == 'E') - goto yy633; + goto yy598; if (yych != 'e') - goto yy525; - yy633: + goto yy497; + yy598: yych = *++p; if (yych == 'M') - goto yy564; + goto yy529; if (yych == 'm') - goto yy564; - goto yy525; - yy634: + goto yy529; + goto yy497; + yy599: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'M') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'N') - goto yy639; + goto yy604; if (yych == 'n') - goto yy639; - goto yy525; + goto yy604; + goto yy497; } } - yy635: + yy600: yych = *++p; if (yych == 'G') - goto yy636; + goto yy601; if (yych != 'g') - goto yy525; - yy636: + goto yy497; + yy601: yych = *++p; if (yych == 'E') - goto yy637; + goto yy602; if (yych != 'e') - goto yy525; - yy637: + goto yy497; + yy602: yych = *++p; if (yych == 'N') - goto yy638; + goto yy603; if (yych != 'n') - goto yy525; - yy638: + goto yy497; + yy603: yych = *++p; if (yych == 'D') - goto yy564; + goto yy529; if (yych == 'd') - goto yy564; - goto yy525; - yy639: + goto yy529; + goto yy497; + yy604: yych = *++p; if (yych == 'K') - goto yy564; + goto yy529; if (yych == 'k') - goto yy564; - goto yy525; - yy640: + goto yy529; + goto yy497; + yy605: yych = *++p; if (yych == 'R') - goto yy641; + goto yy606; if (yych != 'r') - goto yy525; - yy641: + goto yy497; + yy606: yych = *++p; if (yych == 'A') - goto yy642; + goto yy607; if (yych != 'a') - goto yy525; - yy642: + goto yy497; + yy607: yych = *++p; if (yych == 'M') - goto yy643; + goto yy608; if (yych != 'm') - goto yy525; - yy643: + goto yy497; + yy608: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy644: + goto yy529; + goto yy497; + yy609: yych = *++p; if (yych == 'M') - goto yy649; + goto yy614; if (yych == 'm') - goto yy649; - goto yy525; - yy645: + goto yy614; + goto yy497; + yy610: yych = *++p; if (yych == 'A') - goto yy646; + goto yy611; if (yych != 'a') - goto yy525; - yy646: + goto yy497; + yy611: yych = *++p; if (yych == 'D') - goto yy647; + goto yy612; if (yych != 'd') - goto yy525; - yy647: + goto yy497; + yy612: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'D') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'E') - goto yy648; + goto yy613; if (yych != 'e') - goto yy525; + goto yy497; } } - yy648: + yy613: yych = *++p; if (yych == 'R') - goto yy564; + goto yy529; if (yych == 'r') - goto yy564; - goto yy525; - yy649: + goto yy529; + goto yy497; + yy614: yych = *++p; if (yych == 'L') - goto yy564; + goto yy529; if (yych == 'l') - goto yy564; - goto yy525; - yy650: + goto yy529; + goto yy497; + yy615: yych = *++p; if (yych == 'A') - goto yy671; + goto yy636; if (yych == 'a') - goto yy671; - goto yy525; - yy651: + goto yy636; + goto yy497; + yy616: yych = *++p; if (yych <= 'R') { if (yych == 'O') - goto yy667; + goto yy632; if (yych <= 'Q') - goto yy525; - goto yy668; + goto yy497; + goto yy633; } else { if (yych <= 'o') { if (yych <= 'n') - goto yy525; - goto yy667; + goto yy497; + goto yy632; } else { if (yych == 'r') - goto yy668; - goto yy525; + goto yy633; + goto yy497; } } - yy652: + yy617: yych = *++p; if (yych <= 'G') { if (yych == 'E') - goto yy653; + goto yy618; if (yych <= 'F') - goto yy525; - goto yy654; + goto yy497; + goto yy619; } else { if (yych <= 'e') { if (yych <= 'd') - goto yy525; + goto yy497; } else { if (yych == 'g') - goto yy654; - goto yy525; + goto yy619; + goto yy497; } } - yy653: + yy618: yych = *++p; if (yych == 'L') - goto yy663; + goto yy628; if (yych == 'l') - goto yy663; - goto yy525; - yy654: + goto yy628; + goto yy497; + yy619: yych = *++p; if (yych <= 'U') { if (yych == 'C') - goto yy656; + goto yy621; if (yych <= 'T') - goto yy525; + goto yy497; } else { if (yych <= 'c') { if (yych <= 'b') - goto yy525; - goto yy656; + goto yy497; + goto yy621; } else { if (yych != 'u') - goto yy525; + goto yy497; } } yych = *++p; if (yych == 'R') - goto yy662; + goto yy627; if (yych == 'r') - goto yy662; - goto yy525; - yy656: + goto yy627; + goto yy497; + yy621: yych = *++p; if (yych == 'A') - goto yy657; + goto yy622; if (yych != 'a') - goto yy525; - yy657: + goto yy497; + yy622: yych = *++p; if (yych == 'P') - goto yy658; + goto yy623; if (yych != 'p') - goto yy525; - yy658: + goto yy497; + yy623: yych = *++p; if (yych == 'T') - goto yy659; + goto yy624; if (yych != 't') - goto yy525; - yy659: + goto yy497; + yy624: yych = *++p; if (yych == 'I') - goto yy660; + goto yy625; if (yych != 'i') - goto yy525; - yy660: + goto yy497; + yy625: yych = *++p; if (yych == 'O') - goto yy661; + goto yy626; if (yych != 'o') - goto yy525; - yy661: + goto yy497; + yy626: yych = *++p; if (yych == 'N') - goto yy564; + goto yy529; if (yych == 'n') - goto yy564; - goto yy525; - yy662: + goto yy529; + goto yy497; + yy627: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy663: + goto yy529; + goto yy497; + yy628: yych = *++p; if (yych == 'D') - goto yy664; + goto yy629; if (yych != 'd') - goto yy525; - yy664: + goto yy497; + yy629: yych = *++p; if (yych == 'S') - goto yy665; + goto yy630; if (yych != 's') - goto yy525; - yy665: + goto yy497; + yy630: yych = *++p; if (yych == 'E') - goto yy666; + goto yy631; if (yych != 'e') - goto yy525; - yy666: + goto yy497; + yy631: yych = *++p; if (yych == 'T') - goto yy564; + goto yy529; if (yych == 't') - goto yy564; - goto yy525; - yy667: + goto yy529; + goto yy497; + yy632: yych = *++p; if (yych == 'T') - goto yy669; + goto yy634; if (yych == 't') - goto yy669; - goto yy525; - yy668: + goto yy634; + goto yy497; + yy633: yych = *++p; if (yych == 'M') - goto yy564; + goto yy529; if (yych == 'm') - goto yy564; - goto yy525; - yy669: + goto yy529; + goto yy497; + yy634: yych = *++p; if (yych == 'E') - goto yy670; + goto yy635; if (yych != 'e') - goto yy525; - yy670: + goto yy497; + yy635: yych = *++p; if (yych == 'R') - goto yy564; + goto yy529; if (yych == 'r') - goto yy564; - goto yy525; - yy671: + goto yy529; + goto yy497; + yy636: yych = *++p; if (yych == 'M') - goto yy672; + goto yy637; if (yych != 'm') - goto yy525; - yy672: + goto yy497; + yy637: yych = *++p; if (yych == 'E') - goto yy673; + goto yy638; if (yych != 'e') - goto yy525; - yy673: + goto yy497; + yy638: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'R') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'S') - goto yy674; + goto yy639; if (yych != 's') - goto yy525; + goto yy497; } } - yy674: + yy639: yych = *++p; if (yych == 'E') - goto yy675; + goto yy640; if (yych != 'e') - goto yy525; - yy675: + goto yy497; + yy640: yych = *++p; if (yych == 'T') - goto yy564; + goto yy529; if (yych == 't') - goto yy564; - goto yy525; - yy676: + goto yy529; + goto yy497; + yy641: yych = *++p; if (yych <= 'V') { if (yych <= 'Q') { if (yych == 'A') - goto yy682; - goto yy525; + goto yy647; + goto yy497; } else { if (yych <= 'R') - goto yy564; + goto yy529; if (yych <= 'U') - goto yy525; - goto yy564; + goto yy497; + goto yy529; } } else { if (yych <= 'q') { if (yych == 'a') - goto yy682; - goto yy525; + goto yy647; + goto yy497; } else { if (yych <= 'r') - goto yy564; + goto yy529; if (yych == 'v') - goto yy564; - goto yy525; + goto yy529; + goto yy497; } } - yy677: + yy642: yych = *++p; if (yych == 'T') - goto yy678; + goto yy643; if (yych != 't') - goto yy525; - yy678: + goto yy497; + yy643: yych = *++p; if (yych == 'A') - goto yy679; + goto yy644; if (yych != 'a') - goto yy525; - yy679: + goto yy497; + yy644: yych = *++p; if (yych == 'I') - goto yy680; + goto yy645; if (yych != 'i') - goto yy525; - yy680: + goto yy497; + yy645: yych = *++p; if (yych == 'L') - goto yy681; + goto yy646; if (yych != 'l') - goto yy525; - yy681: + goto yy497; + yy646: yych = *++p; if (yych == 'S') - goto yy564; + goto yy529; if (yych == 's') - goto yy564; - goto yy525; - yy682: + goto yy529; + goto yy497; + yy647: yych = *++p; if (yych == 'L') - goto yy683; + goto yy648; if (yych != 'l') - goto yy525; - yy683: + goto yy497; + yy648: yych = *++p; if (yych == 'O') - goto yy684; + goto yy649; if (yych != 'o') - goto yy525; - yy684: + goto yy497; + yy649: yych = *++p; if (yych == 'G') - goto yy564; + goto yy529; if (yych == 'g') - goto yy564; - goto yy525; - yy685: + goto yy529; + goto yy497; + yy650: yych = *++p; if (yych == 'L') - goto yy695; + goto yy660; if (yych == 'l') - goto yy695; - goto yy525; - yy686: + goto yy660; + goto yy497; + yy651: yych = *++p; if (yych == 'N') - goto yy692; + goto yy657; if (yych == 'n') - goto yy692; - goto yy525; - yy687: + goto yy657; + goto yy497; + yy652: yych = *++p; if (yych == 'P') - goto yy688; + goto yy653; if (yych != 'p') - goto yy525; - yy688: + goto yy497; + yy653: yych = *++p; if (yych == 'T') - goto yy689; + goto yy654; if (yych != 't') - goto yy525; - yy689: + goto yy497; + yy654: yych = *++p; if (yych == 'I') - goto yy690; + goto yy655; if (yych != 'i') - goto yy525; - yy690: + goto yy497; + yy655: yych = *++p; if (yych == 'O') - goto yy691; + goto yy656; if (yych != 'o') - goto yy525; - yy691: + goto yy497; + yy656: yych = *++p; if (yych == 'N') - goto yy564; + goto yy529; if (yych == 'n') - goto yy564; - goto yy525; - yy692: + goto yy529; + goto yy497; + yy657: yych = *++p; if (yych == 'T') - goto yy693; + goto yy658; if (yych != 't') - goto yy525; - yy693: + goto yy497; + yy658: yych = *++p; if (yych == 'E') - goto yy694; + goto yy659; if (yych != 'e') - goto yy525; - yy694: + goto yy497; + yy659: yych = *++p; if (yych == 'R') - goto yy564; + goto yy529; if (yych == 'r') - goto yy564; - goto yy525; - yy695: + goto yy529; + goto yy497; + yy660: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'F') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'G') - goto yy696; + goto yy661; if (yych != 'g') - goto yy525; + goto yy497; } } - yy696: + yy661: yych = *++p; if (yych == 'R') - goto yy697; + goto yy662; if (yych != 'r') - goto yy525; - yy697: + goto yy497; + yy662: yych = *++p; if (yych == 'O') - goto yy698; + goto yy663; if (yych != 'o') - goto yy525; - yy698: + goto yy497; + yy663: yych = *++p; if (yych == 'U') - goto yy699; + goto yy664; if (yych != 'u') - goto yy525; - yy699: + goto yy497; + yy664: yych = *++p; if (yych == 'P') - goto yy564; + goto yy529; if (yych == 'p') - goto yy564; - goto yy525; - yy700: + goto yy529; + goto yy497; + yy665: yych = *++p; if (yych == 'D') - goto yy715; + goto yy680; if (yych == 'd') - goto yy715; - goto yy525; - yy701: + goto yy680; + goto yy497; + yy666: yych = *++p; if (yych == 'O') - goto yy708; + goto yy673; if (yych == 'o') - goto yy708; - goto yy525; - yy702: + goto yy673; + goto yy497; + yy667: yych = *++p; if (yych == 'S') - goto yy703; + goto yy668; if (yych != 's') - goto yy525; - yy703: + goto yy497; + yy668: yych = *++p; if (yych == 'E') - goto yy704; + goto yy669; if (yych != 'e') - goto yy525; - yy704: + goto yy497; + yy669: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= 'E') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'F') - goto yy705; + goto yy670; if (yych != 'f') - goto yy525; + goto yy497; } } - yy705: + yy670: yych = *++p; if (yych == 'O') - goto yy706; + goto yy671; if (yych != 'o') - goto yy525; - yy706: + goto yy497; + yy671: yych = *++p; if (yych == 'N') - goto yy707; + goto yy672; if (yych != 'n') - goto yy525; - yy707: + goto yy497; + yy672: yych = *++p; if (yych == 'T') - goto yy564; + goto yy529; if (yych == 't') - goto yy564; - goto yy525; - yy708: + goto yy529; + goto yy497; + yy673: yych = *++p; if (yych == 'C') - goto yy709; + goto yy674; if (yych != 'c') - goto yy525; - yy709: + goto yy497; + yy674: yych = *++p; if (yych == 'K') - goto yy710; + goto yy675; if (yych != 'k') - goto yy525; - yy710: + goto yy497; + yy675: yych = *++p; if (yych == 'Q') - goto yy711; + goto yy676; if (yych != 'q') - goto yy525; - yy711: + goto yy497; + yy676: yych = *++p; if (yych == 'U') - goto yy712; + goto yy677; if (yych != 'u') - goto yy525; - yy712: + goto yy497; + yy677: yych = *++p; if (yych == 'O') - goto yy713; + goto yy678; if (yych != 'o') - goto yy525; - yy713: + goto yy497; + yy678: yych = *++p; if (yych == 'T') - goto yy714; + goto yy679; if (yych != 't') - goto yy525; - yy714: + goto yy497; + yy679: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy715: + goto yy529; + goto yy497; + yy680: yych = *++p; if (yych == 'Y') - goto yy564; + goto yy529; if (yych == 'y') - goto yy564; - goto yy525; - yy716: + goto yy529; + goto yy497; + yy681: yych = *++p; if (yych == 'I') - goto yy727; + goto yy692; if (yych == 'i') - goto yy727; - goto yy525; - yy717: + goto yy692; + goto yy497; + yy682: yych = *++p; if (yych == 'T') - goto yy723; + goto yy688; if (yych == 't') - goto yy723; - goto yy525; - yy718: + goto yy688; + goto yy497; + yy683: yych = *++p; if (yych == 'D') - goto yy719; + goto yy684; if (yych != 'd') - goto yy525; - yy719: + goto yy497; + yy684: yych = *++p; if (yych == 'R') - goto yy720; + goto yy685; if (yych != 'r') - goto yy525; - yy720: + goto yy497; + yy685: yych = *++p; if (yych == 'E') - goto yy721; + goto yy686; if (yych != 'e') - goto yy525; - yy721: + goto yy497; + yy686: yych = *++p; if (yych == 'S') - goto yy722; + goto yy687; if (yych != 's') - goto yy525; - yy722: + goto yy497; + yy687: yych = *++p; if (yych == 'S') - goto yy564; + goto yy529; if (yych == 's') - goto yy564; - goto yy525; - yy723: + goto yy529; + goto yy497; + yy688: yych = *++p; if (yych == 'I') - goto yy724; + goto yy689; if (yych != 'i') - goto yy525; - yy724: + goto yy497; + yy689: yych = *++p; if (yych == 'C') - goto yy725; + goto yy690; if (yych != 'c') - goto yy525; - yy725: + goto yy497; + yy690: yych = *++p; if (yych == 'L') - goto yy726; + goto yy691; if (yych != 'l') - goto yy525; - yy726: + goto yy497; + yy691: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy727: + goto yy529; + goto yy497; + yy692: yych = *++p; if (yych == 'D') - goto yy728; + goto yy693; if (yych != 'd') - goto yy525; - yy728: + goto yy497; + yy693: yych = *++p; if (yych == 'E') - goto yy564; + goto yy529; if (yych == 'e') - goto yy564; - goto yy525; - yy729: + goto yy529; + goto yy497; + yy694: yych = *++p; if (yych == 'E') - goto yy605; + goto yy570; if (yych == 'e') - goto yy605; - goto yy525; - yy730: + goto yy570; + goto yy497; + yy695: yych = *++p; if (yych == 'R') - goto yy731; + goto yy696; if (yych != 'r') - goto yy525; - yy731: + goto yy497; + yy696: yych = *++p; if (yych == 'A') - goto yy732; + goto yy697; if (yych != 'a') - goto yy525; - yy732: + goto yy497; + yy697: yych = *++p; if (yych == 'M') - goto yy564; + goto yy529; if (yych == 'm') - goto yy564; - goto yy525; - yy733: + goto yy529; + goto yy497; + yy698: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy525; + goto yy497; if (yych <= '\r') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy565; + goto yy530; if (yych <= '.') - goto yy525; - goto yy567; + goto yy497; + goto yy532; } } else { if (yych <= '@') { if (yych == '>') - goto yy565; - goto yy525; + goto yy530; + goto yy497; } else { if (yych <= 'A') - goto yy730; + goto yy695; if (yych == 'a') - goto yy730; - goto yy525; + goto yy695; + goto yy497; } } - yy734: + yy699: ++p; if ((yych = *p) <= 'U') { if (yych <= 'N') { if (yych == 'E') - goto yy590; - goto yy525; + goto yy555; + goto yy497; } else { if (yych <= 'O') - goto yy589; + goto yy554; if (yych <= 'T') - goto yy525; - goto yy588; + goto yy497; + goto yy553; } } else { if (yych <= 'n') { if (yych == 'e') - goto yy590; - goto yy525; + goto yy555; + goto yy497; } else { if (yych <= 'o') - goto yy589; + goto yy554; if (yych == 'u') - goto yy588; - goto yy525; + goto yy553; + goto yy497; } } } @@ -12098,824 +11680,744 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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) { - if (yych <= ';') { - if (yych != '\n') - goto yy739; - } else { - if (yych <= '<') - goto yy738; - if (yych <= 0x7F) - goto yy739; - if (yych >= 0xC2) - goto yy740; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy742; - if (yych == 0xED) - goto yy747; - goto yy743; - } else { - if (yych <= 0xF0) - goto yy744; - if (yych <= 0xF3) - goto yy745; - if (yych <= 0xF4) - goto yy746; - } - } - yy737 : { return 0; } - yy738: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '@') { - if (yych == '/') - goto yy750; - goto yy737; - } else { - if (yych <= 'Z') - goto yy748; - if (yych <= '`') - goto yy737; - if (yych <= 'z') - goto yy748; - goto yy737; - } - yy739: - yych = *++p; - goto yy737; - yy740: - yych = *++p; - if (yych <= 0x7F) - goto yy741; - if (yych <= 0xBF) - goto yy739; - yy741: - p = marker; - if (yyaccept == 0) { - goto yy737; - } else { - goto yy759; - } - yy742: - yych = *++p; - if (yych <= 0x9F) - goto yy741; - if (yych <= 0xBF) - goto yy740; - goto yy741; - yy743: - yych = *++p; - if (yych <= 0x7F) - goto yy741; - if (yych <= 0xBF) - goto yy740; - goto yy741; - yy744: - yych = *++p; - if (yych <= 0x8F) - goto yy741; - if (yych <= 0xBF) - goto yy743; - goto yy741; - yy745: - yych = *++p; - if (yych <= 0x7F) - goto yy741; - if (yych <= 0xBF) - goto yy743; - goto yy741; - yy746: - yych = *++p; - if (yych <= 0x7F) - goto yy741; - if (yych <= 0x8F) - goto yy743; - goto yy741; - yy747: - yych = *++p; - if (yych <= 0x7F) - goto yy741; - if (yych <= 0x9F) - goto yy740; - goto yy741; - yy748: + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; + if (yych == '<') + goto yy704; + ++p; + yy703 : { return 0; } + yy704: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '@') { + if (yych == '/') + goto yy708; + goto yy703; + } else { + if (yych <= 'Z') + goto yy705; + if (yych <= '`') + goto yy703; + if (yych >= '{') + goto yy703; + } + yy705: ++p; yych = *p; if (yybm[0 + yych] & 1) { - goto yy748; + goto yy705; } if (yych <= ' ') { if (yych <= 0x08) - goto yy741; + goto yy707; if (yych <= '\r') - goto yy761; - if (yych <= 0x1F) - goto yy741; - goto yy761; + goto yy719; + if (yych >= ' ') + goto yy719; } else { if (yych <= '/') { - if (yych <= '.') - goto yy741; - goto yy763; + if (yych >= '/') + goto yy721; } else { if (yych == '>') - goto yy755; - goto yy741; + goto yy713; } } - yy750: + yy707: + p = marker; + if (yyaccept == 0) { + goto yy703; + } else { + goto yy717; + } + yy708: yych = *++p; if (yych <= '@') - goto yy741; + goto yy707; if (yych <= 'Z') - goto yy751; + goto yy709; if (yych <= '`') - goto yy741; + goto yy707; if (yych >= '{') - goto yy741; - yy751: + goto yy707; + yy709: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy753; + goto yy711; } if (yych <= '=') { if (yych <= '-') { if (yych <= ',') - goto yy741; - goto yy751; + goto yy707; + goto yy709; } else { if (yych <= '/') - goto yy741; + goto yy707; if (yych <= '9') - goto yy751; - goto yy741; + goto yy709; + goto yy707; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy755; + goto yy713; if (yych <= '@') - goto yy741; - goto yy751; + goto yy707; + goto yy709; } else { if (yych <= '`') - goto yy741; + goto yy707; if (yych <= 'z') - goto yy751; - goto yy741; + goto yy709; + goto yy707; } } - yy753: + yy711: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy753; + goto yy711; } if (yych != '>') - goto yy741; - yy755: + goto yy707; + yy713: ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy755; + goto yy713; } if (yych <= 0x08) - goto yy741; + goto yy707; if (yych <= '\n') - goto yy757; + goto yy715; if (yych <= '\v') - goto yy741; + goto yy707; if (yych <= '\r') - goto yy760; - goto yy741; - yy757: + goto yy718; + goto yy707; + yy715: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy755; + goto yy713; } if (yych <= 0x08) - goto yy759; + goto yy717; if (yych <= '\n') - goto yy757; + goto yy715; if (yych <= '\v') - goto yy759; + goto yy717; if (yych <= '\r') - goto yy760; - yy759 : { return 7; } - yy760: + goto yy718; + yy717 : { return 7; } + yy718: yych = *++p; - goto yy759; - yy761: + goto yy717; + yy719: ++p; yych = *p; if (yych <= ':') { if (yych <= ' ') { if (yych <= 0x08) - goto yy741; + goto yy707; if (yych <= '\r') - goto yy761; + goto yy719; if (yych <= 0x1F) - goto yy741; - goto yy761; + goto yy707; + goto yy719; } else { if (yych == '/') - goto yy763; + goto yy721; if (yych <= '9') - goto yy741; - goto yy764; + goto yy707; + goto yy722; } } else { if (yych <= 'Z') { if (yych == '>') - goto yy755; + goto yy713; if (yych <= '@') - goto yy741; - goto yy764; + goto yy707; + goto yy722; } else { if (yych <= '_') { if (yych <= '^') - goto yy741; - goto yy764; + goto yy707; + goto yy722; } else { if (yych <= '`') - goto yy741; + goto yy707; if (yych <= 'z') - goto yy764; - goto yy741; + goto yy722; + goto yy707; } } } - yy763: + yy721: yych = *++p; if (yych == '>') - goto yy755; - goto yy741; - yy764: + goto yy713; + goto yy707; + yy722: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy764; + goto yy722; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy741; + goto yy707; } else { if (yych != ' ') - goto yy741; + goto yy707; } } else { if (yych <= '<') { if (yych <= '/') - goto yy763; - goto yy741; + goto yy721; + goto yy707; } else { if (yych <= '=') - goto yy768; + goto yy726; if (yych <= '>') - goto yy755; - goto yy741; + goto yy713; + goto yy707; } } - yy766: + yy724: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy741; + goto yy707; if (yych <= '\r') - goto yy766; + goto yy724; if (yych <= 0x1F) - goto yy741; - goto yy766; + goto yy707; + goto yy724; } else { if (yych <= '/') { if (yych <= '.') - goto yy741; - goto yy763; + goto yy707; + goto yy721; } else { if (yych == ':') - goto yy764; - goto yy741; + goto yy722; + goto yy707; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy768; + goto yy726; if (yych <= '>') - goto yy755; + goto yy713; if (yych <= '@') - goto yy741; - goto yy764; + goto yy707; + goto yy722; } else { if (yych <= '_') { if (yych <= '^') - goto yy741; - goto yy764; + goto yy707; + goto yy722; } else { if (yych <= '`') - goto yy741; + goto yy707; if (yych <= 'z') - goto yy764; - goto yy741; + goto yy722; + goto yy707; } } } - yy768: + yy726: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy770; + goto yy728; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych >= '!') - goto yy781; + goto yy739; } else { if (yych <= '\'') - goto yy779; + goto yy737; if (yych <= 0xC1) - goto yy741; + goto yy707; if (yych <= 0xDF) - goto yy772; - goto yy773; + goto yy730; + goto yy731; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy778; - goto yy774; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy775; + goto yy733; if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy770; + goto yy728; } if (yych <= 0xDF) { if (yych <= '\'') { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= ' ') - goto yy804; + goto yy762; if (yych <= '"') - goto yy781; - goto yy779; + goto yy739; + goto yy737; } else { if (yych == '>') - goto yy755; + goto yy713; if (yych <= 0xC1) - goto yy741; - goto yy772; + goto yy707; + goto yy730; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy773; + goto yy731; if (yych == 0xED) - goto yy778; - goto yy774; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy775; + goto yy733; if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } - yy770: + yy728: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy770; + goto yy728; } if (yych <= 0xE0) { if (yych <= '=') { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= ' ') - goto yy798; - goto yy741; + goto yy756; + goto yy707; } else { if (yych <= '>') - goto yy755; + goto yy713; if (yych <= 0xC1) - goto yy741; + goto yy707; if (yych >= 0xE0) - goto yy773; + goto yy731; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy778; - goto yy774; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy775; + goto yy733; if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } - yy772: + yy730: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy770; - goto yy741; - yy773: + goto yy728; + goto yy707; + yy731: ++p; yych = *p; if (yych <= 0x9F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy772; - goto yy741; - yy774: + goto yy730; + goto yy707; + yy732: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy772; - goto yy741; - yy775: + goto yy730; + goto yy707; + yy733: ++p; yych = *p; if (yych <= 0x8F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy774; - goto yy741; - yy776: + goto yy732; + goto yy707; + yy734: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy774; - goto yy741; - yy777: + goto yy732; + goto yy707; + yy735: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0x8F) - goto yy774; - goto yy741; - yy778: + goto yy732; + goto yy707; + yy736: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0x9F) - goto yy772; - goto yy741; - yy779: + goto yy730; + goto yy707; + yy737: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy779; + goto yy737; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= '\'') - goto yy790; - goto yy741; + goto yy748; + goto yy707; } else { if (yych <= 0xDF) - goto yy791; + goto yy749; if (yych <= 0xE0) - goto yy792; - goto yy793; + goto yy750; + goto yy751; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy797; + goto yy755; if (yych <= 0xEF) - goto yy793; - goto yy794; + goto yy751; + goto yy752; } else { if (yych <= 0xF3) - goto yy795; + goto yy753; if (yych <= 0xF4) - goto yy796; - goto yy741; + goto yy754; + goto yy707; } } - yy781: + yy739: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy781; + goto yy739; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= '"') - goto yy790; - goto yy741; + goto yy748; + goto yy707; } else { if (yych <= 0xDF) - goto yy783; + goto yy741; if (yych <= 0xE0) - goto yy784; - goto yy785; + goto yy742; + goto yy743; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy789; + goto yy747; if (yych <= 0xEF) - goto yy785; - goto yy786; + goto yy743; + goto yy744; } else { if (yych <= 0xF3) - goto yy787; + goto yy745; if (yych <= 0xF4) - goto yy788; - goto yy741; + goto yy746; + goto yy707; } } - yy783: + yy741: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy781; - goto yy741; - yy784: + goto yy739; + goto yy707; + yy742: ++p; yych = *p; if (yych <= 0x9F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy783; - goto yy741; - yy785: + goto yy741; + goto yy707; + yy743: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy783; - goto yy741; - yy786: + goto yy741; + goto yy707; + yy744: ++p; yych = *p; if (yych <= 0x8F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy785; - goto yy741; - yy787: + goto yy743; + goto yy707; + yy745: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy785; - goto yy741; - yy788: + goto yy743; + goto yy707; + yy746: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0x8F) - goto yy785; - goto yy741; - yy789: + goto yy743; + goto yy707; + yy747: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0x9F) - goto yy783; - goto yy741; - yy790: + goto yy741; + goto yy707; + yy748: ++p; yych = *p; if (yych <= ' ') { if (yych <= 0x08) - goto yy741; + goto yy707; if (yych <= '\r') - goto yy761; + goto yy719; if (yych <= 0x1F) - goto yy741; - goto yy761; + goto yy707; + goto yy719; } else { if (yych <= '/') { if (yych <= '.') - goto yy741; - goto yy763; + goto yy707; + goto yy721; } else { if (yych == '>') - goto yy755; - goto yy741; + goto yy713; + goto yy707; } } - yy791: + yy749: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy779; - goto yy741; - yy792: + goto yy737; + goto yy707; + yy750: ++p; yych = *p; if (yych <= 0x9F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy791; - goto yy741; - yy793: + goto yy749; + goto yy707; + yy751: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy791; - goto yy741; - yy794: + goto yy749; + goto yy707; + yy752: ++p; yych = *p; if (yych <= 0x8F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy793; - goto yy741; - yy795: + goto yy751; + goto yy707; + yy753: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0xBF) - goto yy793; - goto yy741; - yy796: + goto yy751; + goto yy707; + yy754: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0x8F) - goto yy793; - goto yy741; - yy797: + goto yy751; + goto yy707; + yy755: ++p; yych = *p; if (yych <= 0x7F) - goto yy741; + goto yy707; if (yych <= 0x9F) - goto yy791; - goto yy741; - yy798: + goto yy749; + goto yy707; + yy756: ++p; yych = *p; if (yych <= '@') { if (yych <= '"') { if (yych <= '\r') { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= 0x08) - goto yy770; - goto yy798; + goto yy728; + goto yy756; } else { if (yych == ' ') - goto yy798; + goto yy756; if (yych <= '!') - goto yy770; - goto yy741; + goto yy728; + goto yy707; } } else { if (yych <= ':') { if (yych == '\'') - goto yy741; + goto yy707; if (yych <= '9') - goto yy770; + goto yy728; } else { if (yych <= ';') - goto yy770; + goto yy728; if (yych <= '=') - goto yy741; + goto yy707; if (yych <= '>') - goto yy755; - goto yy770; + goto yy713; + goto yy728; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy800; + goto yy758; if (yych <= '^') - goto yy770; + goto yy728; if (yych >= '`') - goto yy741; + goto yy707; } else { if (yych <= 'z') - goto yy800; + goto yy758; if (yych <= 0x7F) - goto yy770; + goto yy728; if (yych <= 0xC1) - goto yy741; - goto yy772; + goto yy707; + goto yy730; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy773; + goto yy731; if (yych == 0xED) - goto yy778; - goto yy774; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy775; + goto yy733; if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } } - yy800: + yy758: ++p; yych = *p; if (yych <= '>') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= 0x08) - goto yy770; + goto yy728; if (yych >= 0x0E) - goto yy770; + goto yy728; } else { if (yych <= ' ') - goto yy802; + goto yy760; if (yych == '"') - goto yy741; - goto yy770; + goto yy707; + goto yy728; } } else { if (yych <= '/') { if (yych <= '\'') - goto yy741; + goto yy707; if (yych <= ',') - goto yy770; + goto yy728; if (yych <= '.') - goto yy800; - goto yy770; + goto yy758; + goto yy728; } else { if (yych <= ';') { if (yych <= ':') - goto yy800; - goto yy770; + goto yy758; + goto yy728; } else { if (yych <= '<') - goto yy741; + goto yy707; if (yych <= '=') - goto yy768; - goto yy755; + goto yy726; + goto yy713; } } } @@ -12923,188 +12425,188 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '_') { if (yych <= '@') - goto yy770; + goto yy728; if (yych <= 'Z') - goto yy800; + goto yy758; if (yych <= '^') - goto yy770; - goto yy800; + goto yy728; + goto yy758; } else { if (yych <= '`') - goto yy741; + goto yy707; if (yych <= 'z') - goto yy800; + goto yy758; if (yych <= 0x7F) - goto yy770; - goto yy741; + goto yy728; + goto yy707; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy772; + goto yy730; if (yych <= 0xE0) - goto yy773; + goto yy731; if (yych <= 0xEC) - goto yy774; - goto yy778; + goto yy732; + goto yy736; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy774; - goto yy775; + goto yy732; + goto yy733; } else { if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } } } - yy802: + yy760: ++p; yych = *p; if (yych <= '@') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= 0x08) - goto yy770; + goto yy728; if (yych <= '\r') - goto yy802; - goto yy770; + goto yy760; + goto yy728; } else { if (yych <= ' ') - goto yy802; + goto yy760; if (yych == '"') - goto yy741; - goto yy770; + goto yy707; + goto yy728; } } else { if (yych <= ';') { if (yych <= '\'') - goto yy741; + goto yy707; if (yych == ':') - goto yy800; - goto yy770; + goto yy758; + goto yy728; } else { if (yych <= '<') - goto yy741; + goto yy707; if (yych <= '=') - goto yy768; + goto yy726; if (yych <= '>') - goto yy755; - goto yy770; + goto yy713; + goto yy728; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy800; + goto yy758; if (yych <= '^') - goto yy770; + goto yy728; if (yych <= '_') - goto yy800; - goto yy741; + goto yy758; + goto yy707; } else { if (yych <= 'z') - goto yy800; + goto yy758; if (yych <= 0x7F) - goto yy770; + goto yy728; if (yych <= 0xC1) - goto yy741; - goto yy772; + goto yy707; + goto yy730; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy773; + goto yy731; if (yych == 0xED) - goto yy778; - goto yy774; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy775; + goto yy733; if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } } - yy804: + yy762: ++p; yych = *p; if (yych <= '@') { if (yych <= '"') { if (yych <= '\r') { if (yych <= 0x00) - goto yy741; + goto yy707; if (yych <= 0x08) - goto yy770; - goto yy804; + goto yy728; + goto yy762; } else { if (yych == ' ') - goto yy804; + goto yy762; if (yych <= '!') - goto yy770; - goto yy781; + goto yy728; + goto yy739; } } else { if (yych <= ':') { if (yych == '\'') - goto yy779; + goto yy737; if (yych <= '9') - goto yy770; - goto yy800; + goto yy728; + goto yy758; } else { if (yych <= ';') - goto yy770; + goto yy728; if (yych <= '=') - goto yy741; + goto yy707; if (yych <= '>') - goto yy755; - goto yy770; + goto yy713; + goto yy728; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy800; + goto yy758; if (yych <= '^') - goto yy770; + goto yy728; if (yych <= '_') - goto yy800; - goto yy741; + goto yy758; + goto yy707; } else { if (yych <= 'z') - goto yy800; + goto yy758; if (yych <= 0x7F) - goto yy770; + goto yy728; if (yych <= 0xC1) - goto yy741; - goto yy772; + goto yy707; + goto yy730; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy773; + goto yy731; if (yych == 0xED) - goto yy778; - goto yy774; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy775; + goto yy733; if (yych <= 0xF3) - goto yy776; + goto yy734; if (yych <= 0xF4) - goto yy777; - goto yy741; + goto yy735; + goto yy707; } } } @@ -13120,837 +12622,840 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 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, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 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, }; - yych = *(marker = p); + yych = *p; if (yych <= 0xDF) { if (yych <= ';') { - if (yych != '\n') - goto yy809; + if (yych == '\n') + goto yy768; } else { if (yych <= '<') - goto yy810; + goto yy769; if (yych <= 0x7F) - goto yy809; - if (yych >= 0xC2) - goto yy811; + goto yy766; + if (yych <= 0xC1) + goto yy768; + goto yy770; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy813; + goto yy771; if (yych == 0xED) - goto yy818; - goto yy814; + goto yy773; + goto yy772; } else { if (yych <= 0xF0) - goto yy815; + goto yy774; if (yych <= 0xF3) - goto yy816; + goto yy775; if (yych <= 0xF4) - goto yy817; + goto yy776; + goto yy768; } } - yy808 : { return 0; } - yy809: + yy766: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { - if (yych == '\n') - goto yy808; - goto yy823; + if (yych != '\n') + goto yy781; } else { if (yych <= 0xC1) - goto yy808; + goto yy767; if (yych <= 0xF4) - goto yy823; - goto yy808; + goto yy781; } - yy810: + yy767 : { return 0; } + yy768: + yych = *++p; + goto yy767; + yy769: yyaccept = 0; yych = *(marker = ++p); if (yych <= '/') { if (yych == '\n') - goto yy808; + goto yy767; if (yych <= '.') - goto yy823; - goto yy819; + goto yy781; + goto yy789; } else { if (yych <= 0x7F) - goto yy823; + goto yy781; if (yych <= 0xC1) - goto yy808; + goto yy767; if (yych <= 0xF4) - goto yy823; - goto yy808; + goto yy781; + goto yy767; } - yy811: - yych = *++p; + yy770: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy812; + goto yy767; if (yych <= 0xBF) - goto yy809; - yy812: - p = marker; - if (yyaccept == 0) { - goto yy808; - } else { - goto yy840; - } - yy813: - yych = *++p; + goto yy780; + goto yy767; + yy771: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x9F) - goto yy812; + goto yy767; if (yych <= 0xBF) - goto yy811; - goto yy812; - yy814: - yych = *++p; + goto yy779; + goto yy767; + yy772: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy812; + goto yy767; if (yych <= 0xBF) - goto yy811; - goto yy812; - yy815: - yych = *++p; + goto yy779; + goto yy767; + yy773: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy767; + if (yych <= 0x9F) + goto yy779; + goto yy767; + yy774: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x8F) - goto yy812; + goto yy767; if (yych <= 0xBF) - goto yy814; - goto yy812; - yy816: - yych = *++p; + goto yy777; + goto yy767; + yy775: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy812; + goto yy767; if (yych <= 0xBF) - goto yy814; - goto yy812; - yy817: - yych = *++p; + goto yy777; + goto yy767; + yy776: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy812; - if (yych <= 0x8F) - goto yy814; - goto yy812; - yy818: - yych = *++p; + goto yy767; + if (yych >= 0x90) + goto yy767; + yy777: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy812; - if (yych <= 0x9F) - goto yy811; - goto yy812; - yy819: + goto yy778; + if (yych <= 0xBF) + goto yy779; + yy778: + p = marker; + if (yyaccept == 0) { + goto yy767; + } else { + goto yy795; + } + yy779: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy778; + if (yych >= 0xC0) + goto yy778; + yy780: ++p; yych = *p; + yy781: if (yybm[0 + yych] & 64) { - goto yy820; + goto yy780; } - if (yych <= 's') { - if (yych <= 'R') { - if (yych <= '\n') { - if (yych <= '\t') - goto yy822; - goto yy812; - } else { - if (yych == 'P') - goto yy831; - goto yy822; - } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy778; + if (yych >= '=') + goto yy778; } else { - if (yych <= 'o') { - if (yych <= 'S') - goto yy832; - goto yy822; - } else { - if (yych <= 'p') - goto yy831; - if (yych <= 'r') - goto yy822; - goto yy832; - } + if (yych <= 0xDF) + goto yy779; + if (yych <= 0xE0) + goto yy784; + goto yy777; } } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy822; - goto yy812; - } else { - if (yych <= 0xDF) - goto yy824; - if (yych <= 0xE0) - goto yy825; - goto yy826; - } + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; + if (yych <= 0xEF) + goto yy777; + goto yy785; } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy830; - if (yych <= 0xEF) - goto yy826; - goto yy827; - } else { - if (yych <= 0xF3) - goto yy828; - if (yych <= 0xF4) - goto yy829; - goto yy812; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } - yy820: + yy782: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xDF) { if (yych <= '.') { if (yych == '\n') - goto yy812; + goto yy778; + goto yy780; } else { if (yych <= '/') - goto yy819; + goto yy789; if (yych <= 0x7F) - goto yy822; + goto yy780; if (yych <= 0xC1) - goto yy812; - goto yy824; + goto yy778; + goto yy779; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych == 0xED) - goto yy830; - goto yy826; + goto yy788; + goto yy777; } else { if (yych <= 0xF0) - goto yy827; - if (yych <= 0xF3) - goto yy828; - if (yych <= 0xF4) - goto yy829; - goto yy812; - } - } - yy822: - ++p; - yych = *p; - yy823: - if (yybm[0 + yych] & 128) { - goto yy822; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy812; - if (yych <= '<') - goto yy820; - goto yy812; - } else { - if (yych <= 0xDF) - goto yy824; - if (yych <= 0xE0) - goto yy825; - goto yy826; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy830; - if (yych <= 0xEF) - goto yy826; - goto yy827; - } else { + goto yy785; if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } - yy824: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy812; - if (yych <= 0xBF) - goto yy822; - goto yy812; - yy825: + yy784: ++p; yych = *p; if (yych <= 0x9F) - goto yy812; - if (yych <= 0xBF) - goto yy824; - goto yy812; - yy826: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy812; + goto yy778; if (yych <= 0xBF) - goto yy824; - goto yy812; - yy827: + goto yy779; + goto yy778; + yy785: ++p; yych = *p; if (yych <= 0x8F) - goto yy812; + goto yy778; if (yych <= 0xBF) - goto yy826; - goto yy812; - yy828: + goto yy777; + goto yy778; + yy786: ++p; yych = *p; if (yych <= 0x7F) - goto yy812; + goto yy778; if (yych <= 0xBF) - goto yy826; - goto yy812; - yy829: + goto yy777; + goto yy778; + yy787: ++p; yych = *p; if (yych <= 0x7F) - goto yy812; + goto yy778; if (yych <= 0x8F) - goto yy826; - goto yy812; - yy830: + goto yy777; + goto yy778; + yy788: ++p; yych = *p; if (yych <= 0x7F) - goto yy812; + goto yy778; if (yych <= 0x9F) - goto yy824; - goto yy812; - yy831: + goto yy779; + goto yy778; + yy789: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } - if (yych <= 0xC1) { + if (yych <= 's') { if (yych <= 'R') { - if (yych == '\n') - goto yy812; - if (yych <= 'Q') - goto yy822; - goto yy843; + if (yych <= '\n') { + if (yych <= '\t') + goto yy780; + goto yy778; + } else { + if (yych == 'P') + goto yy791; + goto yy780; + } } else { - if (yych == 'r') - goto yy843; - if (yych <= 0x7F) - goto yy822; - goto yy812; + if (yych <= 'o') { + if (yych >= 'T') + goto yy780; + } else { + if (yych <= 'p') + goto yy791; + if (yych <= 'r') + goto yy780; + } } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy824; - if (yych <= 0xE0) - goto yy825; - if (yych <= 0xEC) - goto yy826; - goto yy830; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy780; + goto yy778; + } else { + if (yych <= 0xDF) + goto yy779; + if (yych <= 0xE0) + goto yy784; + goto yy777; + } } else { if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy832: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 't') { if (yych <= 'S') { if (yych <= '\n') { if (yych <= '\t') - goto yy822; - goto yy812; + goto yy780; + goto yy778; } else { if (yych == 'C') - goto yy834; - goto yy822; + goto yy796; + goto yy780; } } else { if (yych <= 'b') { - if (yych >= 'U') - goto yy822; + if (yych <= 'T') + goto yy797; + goto yy780; } else { if (yych <= 'c') - goto yy834; + goto yy796; if (yych <= 's') - goto yy822; + goto yy780; + goto yy797; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } else { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; - goto yy826; + goto yy784; + goto yy777; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy830; + goto yy788; if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } + yy791: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'Y') { + if (yych <= 'R') { if (yych == '\n') - goto yy812; - if (yych <= 'X') - goto yy822; - goto yy841; + goto yy778; + if (yych <= 'Q') + goto yy780; } else { - if (yych == 'y') - goto yy841; + if (yych == 'r') + goto yy792; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy834: + yy792: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'R') { + if (yych <= 'E') { if (yych == '\n') - goto yy812; - if (yych <= 'Q') - goto yy822; + goto yy778; + if (yych <= 'D') + goto yy780; } else { - if (yych == 'r') - goto yy835; + if (yych == 'e') + goto yy793; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy835: + yy793: ++p; yych = *p; + if (yybm[0 + yych] & 128) { + goto yy782; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy778; + goto yy780; + } else { + if (yych <= '>') + goto yy794; + if (yych <= 0x7F) + goto yy780; + if (yych <= 0xC1) + goto yy778; + goto yy779; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy784; + if (yych == 0xED) + goto yy788; + goto yy777; + } else { + if (yych <= 0xF0) + goto yy785; + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } + } + yy794: + yyaccept = 1; + marker = ++p; + yych = *p; if (yybm[0 + yych] & 64) { - goto yy820; + goto yy780; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy795; + if (yych <= '<') + goto yy782; + } else { + if (yych <= 0xDF) + goto yy779; + if (yych <= 0xE0) + goto yy784; + goto yy777; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; + if (yych <= 0xEF) + goto yy777; + goto yy785; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + } + } + yy795 : { return (bufsize_t)(p - start); } + yy796: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'I') { + if (yych <= 'R') { if (yych == '\n') - goto yy812; - if (yych <= 'H') - goto yy822; + goto yy778; + if (yych <= 'Q') + goto yy780; + goto yy800; } else { - if (yych == 'i') - goto yy836; + if (yych == 'r') + goto yy800; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy836: + yy797: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'P') { + if (yych <= 'Y') { if (yych == '\n') - goto yy812; - if (yych <= 'O') - goto yy822; + goto yy778; + if (yych <= 'X') + goto yy780; } else { - if (yych == 'p') - goto yy837; + if (yych == 'y') + goto yy798; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy837: + yy798: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'T') { + if (yych <= 'L') { if (yych == '\n') - goto yy812; - if (yych <= 'S') - goto yy822; + goto yy778; + if (yych <= 'K') + goto yy780; } else { - if (yych == 't') - goto yy838; + if (yych == 'l') + goto yy799; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy838: + yy799: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } - if (yych <= 0xDF) { - if (yych <= '=') { + if (yych <= 0xC1) { + if (yych <= 'E') { if (yych == '\n') - goto yy812; - goto yy822; + goto yy778; + if (yych <= 'D') + goto yy780; + goto yy793; } else { - if (yych <= '>') - goto yy839; + if (yych == 'e') + goto yy793; if (yych <= 0x7F) - goto yy822; - if (yych <= 0xC1) - goto yy812; - goto yy824; + goto yy780; + goto yy778; } } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy825; - if (yych == 0xED) - goto yy830; - goto yy826; - } else { - if (yych <= 0xF0) - goto yy827; - if (yych <= 0xF3) - goto yy828; - if (yych <= 0xF4) - goto yy829; - goto yy812; - } - } - yy839: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy822; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy840; - if (yych <= '<') - goto yy820; - } else { + if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; - goto yy826; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy830; - if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy784; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF3) - goto yy828; - if (yych <= 0xF4) - goto yy829; + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; + goto yy785; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } - yy840 : { return (bufsize_t)(p - start); } - yy841: + yy800: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'L') { + if (yych <= 'I') { if (yych == '\n') - goto yy812; - if (yych <= 'K') - goto yy822; + goto yy778; + if (yych <= 'H') + goto yy780; } else { - if (yych == 'l') - goto yy842; + if (yych == 'i') + goto yy801; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy842: + yy801: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'E') { + if (yych <= 'P') { if (yych == '\n') - goto yy812; - if (yych <= 'D') - goto yy822; - goto yy838; + goto yy778; + if (yych <= 'O') + goto yy780; } else { - if (yych == 'e') - goto yy838; + if (yych == 'p') + goto yy802; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } - yy843: + yy802: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy820; + if (yybm[0 + yych] & 128) { + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'E') { + if (yych <= 'T') { if (yych == '\n') - goto yy812; - if (yych <= 'D') - goto yy822; - goto yy838; + goto yy778; + if (yych <= 'S') + goto yy780; + goto yy793; } else { - if (yych == 'e') - goto yy838; + if (yych == 't') + goto yy793; if (yych <= 0x7F) - goto yy822; - goto yy812; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy824; + goto yy779; if (yych <= 0xE0) - goto yy825; + goto yy784; if (yych <= 0xEC) - goto yy826; - goto yy830; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy826; - goto yy827; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy828; + goto yy786; if (yych <= 0xF4) - goto yy829; - goto yy812; + goto yy787; + goto yy778; } } } @@ -13966,340 +13471,343 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 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, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 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, }; - yych = *(marker = p); + yych = *p; if (yych <= 0xDF) { if (yych <= ',') { - if (yych != '\n') - goto yy847; + if (yych == '\n') + goto yy807; } else { if (yych <= '-') - goto yy848; + goto yy808; if (yych <= 0x7F) - goto yy847; - if (yych >= 0xC2) - goto yy849; + goto yy805; + if (yych <= 0xC1) + goto yy807; + goto yy809; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy851; + goto yy810; if (yych == 0xED) - goto yy856; - goto yy852; + goto yy812; + goto yy811; } else { if (yych <= 0xF0) - goto yy853; + goto yy813; if (yych <= 0xF3) - goto yy854; + goto yy814; if (yych <= 0xF4) - goto yy855; + goto yy815; + goto yy807; } } - yy846 : { return 0; } - yy847: + yy805: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { - if (yych == '\n') - goto yy846; - goto yy860; + if (yych != '\n') + goto yy820; } else { if (yych <= 0xC1) - goto yy846; + goto yy806; if (yych <= 0xF4) - goto yy860; - goto yy846; + goto yy820; } - yy848: + yy806 : { return 0; } + yy807: + yych = *++p; + goto yy806; + yy808: yyaccept = 0; yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy857; + if (yybm[0 + yych] & 128) { + goto yy827; } if (yych <= 0x7F) { if (yych == '\n') - goto yy846; - goto yy860; + goto yy806; + goto yy820; } else { if (yych <= 0xC1) - goto yy846; + goto yy806; if (yych <= 0xF4) - goto yy860; - goto yy846; + goto yy820; + goto yy806; } - yy849: - yych = *++p; + yy809: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy850; + goto yy806; if (yych <= 0xBF) - goto yy847; - yy850: - p = marker; - if (yyaccept == 0) { - goto yy846; - } else { - goto yy870; - } - yy851: - yych = *++p; + goto yy819; + goto yy806; + yy810: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x9F) - goto yy850; + goto yy806; if (yych <= 0xBF) - goto yy849; - goto yy850; - yy852: - yych = *++p; + goto yy818; + goto yy806; + yy811: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy850; + goto yy806; if (yych <= 0xBF) - goto yy849; - goto yy850; - yy853: - yych = *++p; + goto yy818; + goto yy806; + yy812: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy806; + if (yych <= 0x9F) + goto yy818; + goto yy806; + yy813: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x8F) - goto yy850; + goto yy806; if (yych <= 0xBF) - goto yy852; - goto yy850; - yy854: - yych = *++p; + goto yy816; + goto yy806; + yy814: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy850; + goto yy806; if (yych <= 0xBF) - goto yy852; - goto yy850; - yy855: - yych = *++p; + goto yy816; + goto yy806; + yy815: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy850; - if (yych <= 0x8F) - goto yy852; - goto yy850; - yy856: - yych = *++p; + goto yy806; + if (yych >= 0x90) + goto yy806; + yy816: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy817; + if (yych <= 0xBF) + goto yy818; + yy817: + p = marker; + if (yyaccept == 0) { + goto yy806; + } else { + goto yy830; + } + yy818: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy850; - if (yych <= 0x9F) - goto yy849; - goto yy850; - yy857: + goto yy817; + if (yych >= 0xC0) + goto yy817; + yy819: ++p; yych = *p; + yy820: if (yybm[0 + yych] & 64) { - goto yy857; + goto yy819; } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') - goto yy850; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy817; + if (yych >= '.') + goto yy817; } else { - if (yych <= '>') - goto yy869; - if (yych <= 0x7F) - goto yy859; - if (yych <= 0xC1) - goto yy850; - goto yy861; + if (yych <= 0xDF) + goto yy818; + if (yych <= 0xE0) + goto yy822; + goto yy816; } } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy862; - if (yych == 0xED) - goto yy867; - goto yy863; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy826; + if (yych <= 0xEF) + goto yy816; + goto yy823; } else { - if (yych <= 0xF0) - goto yy864; if (yych <= 0xF3) - goto yy865; + goto yy824; if (yych <= 0xF4) - goto yy866; - goto yy850; + goto yy825; + goto yy817; } } - yy859: + yy821: ++p; yych = *p; - yy860: - if (yybm[0 + yych] & 128) { - goto yy859; + if (yybm[0 + yych] & 64) { + goto yy819; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy850; + goto yy817; if (yych <= '-') - goto yy868; - goto yy850; + goto yy827; + goto yy817; } else { if (yych <= 0xDF) - goto yy861; - if (yych <= 0xE0) - goto yy862; - goto yy863; + goto yy818; + if (yych >= 0xE1) + goto yy816; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy867; + goto yy826; if (yych <= 0xEF) - goto yy863; - goto yy864; + goto yy816; + goto yy823; } else { if (yych <= 0xF3) - goto yy865; + goto yy824; if (yych <= 0xF4) - goto yy866; - goto yy850; + goto yy825; + goto yy817; } } - yy861: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy850; - if (yych <= 0xBF) - goto yy859; - goto yy850; - yy862: + yy822: ++p; yych = *p; if (yych <= 0x9F) - goto yy850; - if (yych <= 0xBF) - goto yy861; - goto yy850; - yy863: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy850; + goto yy817; if (yych <= 0xBF) - goto yy861; - goto yy850; - yy864: + goto yy818; + goto yy817; + yy823: ++p; yych = *p; if (yych <= 0x8F) - goto yy850; + goto yy817; if (yych <= 0xBF) - goto yy863; - goto yy850; - yy865: + goto yy816; + goto yy817; + yy824: ++p; yych = *p; if (yych <= 0x7F) - goto yy850; + goto yy817; if (yych <= 0xBF) - goto yy863; - goto yy850; - yy866: + goto yy816; + goto yy817; + yy825: ++p; yych = *p; if (yych <= 0x7F) - goto yy850; + goto yy817; if (yych <= 0x8F) - goto yy863; - goto yy850; - yy867: + goto yy816; + goto yy817; + yy826: ++p; yych = *p; if (yych <= 0x7F) - goto yy850; + goto yy817; if (yych <= 0x9F) - goto yy861; - goto yy850; - yy868: + goto yy818; + goto yy817; + yy827: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy859; + goto yy827; } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy850; - if (yych <= '-') - goto yy857; - goto yy850; + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy817; + goto yy819; } else { - if (yych <= 0xDF) - goto yy861; - if (yych <= 0xE0) - goto yy862; - goto yy863; + if (yych <= '>') + goto yy829; + if (yych <= 0x7F) + goto yy819; + if (yych <= 0xC1) + goto yy817; + goto yy818; } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy867; - if (yych <= 0xEF) - goto yy863; - goto yy864; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy822; + if (yych == 0xED) + goto yy826; + goto yy816; } else { + if (yych <= 0xF0) + goto yy823; if (yych <= 0xF3) - goto yy865; + goto yy824; if (yych <= 0xF4) - goto yy866; - goto yy850; + goto yy825; + goto yy817; } } - yy869: + yy829: yyaccept = 1; marker = ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy859; + if (yybm[0 + yych] & 64) { + goto yy819; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy870; + goto yy830; if (yych <= '-') - goto yy868; + goto yy821; } else { if (yych <= 0xDF) - goto yy861; + goto yy818; if (yych <= 0xE0) - goto yy862; - goto yy863; + goto yy822; + goto yy816; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy867; + goto yy826; if (yych <= 0xEF) - goto yy863; - goto yy864; + goto yy816; + goto yy823; } else { if (yych <= 0xF3) - goto yy865; + goto yy824; if (yych <= 0xF4) - goto yy866; + goto yy825; } } - yy870 : { return (bufsize_t)(p - start); } + yy830 : { return (bufsize_t)(p - start); } } } @@ -14312,306 +13820,310 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 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, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 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, }; - yych = *(marker = p); + yych = *p; if (yych <= 0xDF) { if (yych <= '>') { - if (yych != '\n') - goto yy874; + if (yych == '\n') + goto yy835; } else { if (yych <= '?') - goto yy875; + goto yy836; if (yych <= 0x7F) - goto yy874; - if (yych >= 0xC2) - goto yy876; + goto yy833; + if (yych <= 0xC1) + goto yy835; + goto yy837; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy878; + goto yy838; if (yych == 0xED) - goto yy883; - goto yy879; + goto yy840; + goto yy839; } else { if (yych <= 0xF0) - goto yy880; + goto yy841; if (yych <= 0xF3) - goto yy881; + goto yy842; if (yych <= 0xF4) - goto yy882; + goto yy843; + goto yy835; } } - yy873 : { return 0; } - yy874: + yy833: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { - if (yych == '\n') - goto yy873; - goto yy889; + if (yych != '\n') + goto yy848; } else { if (yych <= 0xC1) - goto yy873; + goto yy834; if (yych <= 0xF4) - goto yy889; - goto yy873; + goto yy848; } - yy875: + yy834 : { return 0; } + yy835: + yych = *++p; + goto yy834; + yy836: yyaccept = 0; yych = *(marker = ++p); if (yych <= '>') { if (yych == '\n') - goto yy873; + goto yy834; if (yych <= '=') - goto yy889; - goto yy884; + goto yy848; + goto yy856; } else { if (yych <= 0x7F) - goto yy889; + goto yy848; if (yych <= 0xC1) - goto yy873; + goto yy834; if (yych <= 0xF4) - goto yy889; - goto yy873; + goto yy848; + goto yy834; } - yy876: - yych = *++p; + yy837: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy877; + goto yy834; if (yych <= 0xBF) - goto yy874; - yy877: - p = marker; - if (yyaccept == 0) { - goto yy873; - } else { - goto yy885; - } - yy878: - yych = *++p; + goto yy847; + goto yy834; + yy838: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x9F) - goto yy877; + goto yy834; if (yych <= 0xBF) - goto yy876; - goto yy877; - yy879: - yych = *++p; + goto yy846; + goto yy834; + yy839: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy877; + goto yy834; if (yych <= 0xBF) - goto yy876; - goto yy877; - yy880: - yych = *++p; + goto yy846; + goto yy834; + yy840: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy834; + if (yych <= 0x9F) + goto yy846; + goto yy834; + yy841: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x8F) - goto yy877; + goto yy834; if (yych <= 0xBF) - goto yy879; - goto yy877; - yy881: - yych = *++p; + goto yy844; + goto yy834; + yy842: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy877; + goto yy834; if (yych <= 0xBF) - goto yy879; - goto yy877; - yy882: - yych = *++p; + goto yy844; + goto yy834; + yy843: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy877; - if (yych <= 0x8F) - goto yy879; - goto yy877; - yy883: - yych = *++p; + goto yy834; + if (yych >= 0x90) + goto yy834; + yy844: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy877; - if (yych <= 0x9F) - goto yy876; - goto yy877; - yy884: - yyaccept = 1; - marker = ++p; + goto yy845; + if (yych <= 0xBF) + goto yy846; + yy845: + p = marker; + if (yyaccept == 0) { + goto yy834; + } else { + goto yy857; + } + yy846: + ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy888; + if (yych <= 0x7F) + goto yy845; + if (yych >= 0xC0) + goto yy845; + yy847: + ++p; + yych = *p; + yy848: + if (yybm[0 + yych] & 64) { + goto yy847; } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') - goto yy885; - if (yych <= '?') - goto yy886; + if (yych <= '\n') + goto yy845; + if (yych >= '@') + goto yy845; } else { if (yych <= 0xDF) - goto yy890; + goto yy846; if (yych <= 0xE0) - goto yy891; - goto yy892; + goto yy851; + goto yy844; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy896; + goto yy855; if (yych <= 0xEF) - goto yy892; - goto yy893; + goto yy844; + goto yy852; } else { if (yych <= 0xF3) - goto yy894; + goto yy853; if (yych <= 0xF4) - goto yy895; + goto yy854; + goto yy845; } } - yy885 : { return (bufsize_t)(p - start); } - yy886: + yy849: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy886; + if (yybm[0 + yych] & 128) { + goto yy849; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy877; + goto yy845; + goto yy847; } else { if (yych <= '>') - goto yy884; + goto yy856; if (yych <= 0x7F) - goto yy888; + goto yy847; if (yych <= 0xC1) - goto yy877; - goto yy890; + goto yy845; + goto yy846; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy891; + goto yy851; if (yych == 0xED) - goto yy896; - goto yy892; + goto yy855; + goto yy844; } else { if (yych <= 0xF0) - goto yy893; - if (yych <= 0xF3) - goto yy894; - if (yych <= 0xF4) - goto yy895; - goto yy877; - } - } - yy888: - ++p; - yych = *p; - yy889: - if (yybm[0 + yych] & 128) { - goto yy888; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy877; - if (yych <= '?') - goto yy886; - goto yy877; - } else { - if (yych <= 0xDF) - goto yy890; - if (yych <= 0xE0) - goto yy891; - goto yy892; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy896; - if (yych <= 0xEF) - goto yy892; - goto yy893; - } else { + goto yy852; if (yych <= 0xF3) - goto yy894; + goto yy853; if (yych <= 0xF4) - goto yy895; - goto yy877; + goto yy854; + goto yy845; } } - yy890: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy877; - if (yych <= 0xBF) - goto yy888; - goto yy877; - yy891: + yy851: ++p; yych = *p; if (yych <= 0x9F) - goto yy877; - if (yych <= 0xBF) - goto yy890; - goto yy877; - yy892: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy877; + goto yy845; if (yych <= 0xBF) - goto yy890; - goto yy877; - yy893: + goto yy846; + goto yy845; + yy852: ++p; yych = *p; if (yych <= 0x8F) - goto yy877; + goto yy845; if (yych <= 0xBF) - goto yy892; - goto yy877; - yy894: + goto yy844; + goto yy845; + yy853: ++p; yych = *p; if (yych <= 0x7F) - goto yy877; + goto yy845; if (yych <= 0xBF) - goto yy892; - goto yy877; - yy895: + goto yy844; + goto yy845; + yy854: ++p; yych = *p; if (yych <= 0x7F) - goto yy877; + goto yy845; if (yych <= 0x8F) - goto yy892; - goto yy877; - yy896: + goto yy844; + goto yy845; + yy855: ++p; yych = *p; if (yych <= 0x7F) - goto yy877; + goto yy845; if (yych <= 0x9F) - goto yy890; - goto yy877; + goto yy846; + goto yy845; + yy856: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy847; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy857; + if (yych <= '?') + goto yy849; + } else { + if (yych <= 0xDF) + goto yy846; + if (yych <= 0xE0) + goto yy851; + goto yy844; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy855; + if (yych <= 0xEF) + goto yy844; + goto yy852; + } else { + if (yych <= 0xF3) + goto yy853; + if (yych <= 0xF4) + goto yy854; + } + } + yy857 : { return (bufsize_t)(p - start); } } } @@ -14624,266 +14136,268 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 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, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 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, }; - yych = *(marker = p); + yych = *p; if (yych <= 0xDF) { if (yych <= '=') { - if (yych != '\n') - goto yy900; + if (yych == '\n') + goto yy862; } else { if (yych <= '>') - goto yy901; + goto yy863; if (yych <= 0x7F) - goto yy900; - if (yych >= 0xC2) - goto yy903; + goto yy860; + if (yych <= 0xC1) + goto yy862; + goto yy865; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy905; + goto yy866; if (yych == 0xED) - goto yy910; - goto yy906; + goto yy868; + goto yy867; } else { if (yych <= 0xF0) - goto yy907; + goto yy869; if (yych <= 0xF3) - goto yy908; + goto yy870; if (yych <= 0xF4) - goto yy909; + goto yy871; + goto yy862; } } - yy899 : { return 0; } - yy900: + yy860: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { - if (yych == '\n') - goto yy899; - goto yy914; + if (yych != '\n') + goto yy876; } else { if (yych <= 0xC1) - goto yy899; + goto yy861; if (yych <= 0xF4) - goto yy914; - goto yy899; + goto yy876; } - yy901: + yy861 : { return 0; } + yy862: + yych = *++p; + goto yy861; + yy863: yyaccept = 1; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy914; + goto yy876; } else { if (yych <= 0xC1) - goto yy902; + goto yy864; if (yych <= 0xF4) - goto yy914; + goto yy876; } - yy902 : { return (bufsize_t)(p - start); } - yy903: - yych = *++p; + yy864 : { return (bufsize_t)(p - start); } + yy865: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy904; + goto yy861; if (yych <= 0xBF) - goto yy900; - yy904: - p = marker; - if (yyaccept == 0) { - goto yy899; - } else { - goto yy902; - } - yy905: - yych = *++p; + goto yy875; + goto yy861; + yy866: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x9F) - goto yy904; + goto yy861; if (yych <= 0xBF) - goto yy903; - goto yy904; - yy906: - yych = *++p; + goto yy874; + goto yy861; + yy867: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy904; + goto yy861; if (yych <= 0xBF) - goto yy903; - goto yy904; - yy907: - yych = *++p; + goto yy874; + goto yy861; + yy868: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy861; + if (yych <= 0x9F) + goto yy874; + goto yy861; + yy869: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x8F) - goto yy904; + goto yy861; if (yych <= 0xBF) - goto yy906; - goto yy904; - yy908: - yych = *++p; + goto yy872; + goto yy861; + yy870: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy904; + goto yy861; if (yych <= 0xBF) - goto yy906; - goto yy904; - yy909: - yych = *++p; + goto yy872; + goto yy861; + yy871: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy904; - if (yych <= 0x8F) - goto yy906; - goto yy904; - yy910: - yych = *++p; + goto yy861; + if (yych >= 0x90) + goto yy861; + yy872: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy904; - if (yych <= 0x9F) - goto yy903; - goto yy904; - yy911: - yyaccept = 1; - marker = ++p; + goto yy873; + if (yych <= 0xBF) + goto yy874; + yy873: + p = marker; + if (yyaccept == 0) { + goto yy861; + } else { + goto yy864; + } + yy874: + ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy913; + if (yych <= 0x7F) + goto yy873; + if (yych >= 0xC0) + goto yy873; + yy875: + ++p; + yych = *p; + yy876: + if (yybm[0 + yych] & 64) { + goto yy875; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy902; - if (yych <= '>') - goto yy911; - goto yy902; + goto yy873; + if (yych >= '?') + goto yy873; } else { if (yych <= 0xDF) - goto yy915; + goto yy874; if (yych <= 0xE0) - goto yy916; - goto yy917; + goto yy879; + goto yy872; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy921; + goto yy883; if (yych <= 0xEF) - goto yy917; - goto yy918; + goto yy872; + goto yy880; } else { if (yych <= 0xF3) - goto yy919; + goto yy881; if (yych <= 0xF4) - goto yy920; - goto yy902; + goto yy882; + goto yy873; } } - yy913: - ++p; + yy877: + yyaccept = 1; + marker = ++p; yych = *p; - yy914: - if (yybm[0 + yych] & 128) { - goto yy913; + if (yybm[0 + yych] & 64) { + goto yy875; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy904; + goto yy864; if (yych <= '>') - goto yy911; - goto yy904; + goto yy877; + goto yy864; } else { if (yych <= 0xDF) - goto yy915; - if (yych <= 0xE0) - goto yy916; - goto yy917; + goto yy874; + if (yych >= 0xE1) + goto yy872; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy921; + goto yy883; if (yych <= 0xEF) - goto yy917; - goto yy918; + goto yy872; + goto yy880; } else { if (yych <= 0xF3) - goto yy919; + goto yy881; if (yych <= 0xF4) - goto yy920; - goto yy904; + goto yy882; + goto yy864; } } - yy915: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy904; - if (yych <= 0xBF) - goto yy913; - goto yy904; - yy916: + yy879: ++p; yych = *p; if (yych <= 0x9F) - goto yy904; - if (yych <= 0xBF) - goto yy915; - goto yy904; - yy917: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy904; + goto yy873; if (yych <= 0xBF) - goto yy915; - goto yy904; - yy918: + goto yy874; + goto yy873; + yy880: ++p; yych = *p; if (yych <= 0x8F) - goto yy904; + goto yy873; if (yych <= 0xBF) - goto yy917; - goto yy904; - yy919: + goto yy872; + goto yy873; + yy881: ++p; yych = *p; if (yych <= 0x7F) - goto yy904; + goto yy873; if (yych <= 0xBF) - goto yy917; - goto yy904; - yy920: + goto yy872; + goto yy873; + yy882: ++p; yych = *p; if (yych <= 0x7F) - goto yy904; + goto yy873; if (yych <= 0x8F) - goto yy917; - goto yy904; - yy921: + goto yy872; + goto yy873; + yy883: ++p; yych = *p; if (yych <= 0x7F) - goto yy904; + goto yy873; if (yych <= 0x9F) - goto yy915; - goto yy904; + goto yy874; + goto yy873; } } @@ -14896,340 +14410,343 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 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, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 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, }; - yych = *(marker = p); + yych = *p; if (yych <= 0xDF) { if (yych <= '\\') { - if (yych != '\n') - goto yy925; + if (yych == '\n') + goto yy888; } else { if (yych <= ']') - goto yy926; + goto yy889; if (yych <= 0x7F) - goto yy925; - if (yych >= 0xC2) - goto yy927; + goto yy886; + if (yych <= 0xC1) + goto yy888; + goto yy890; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy929; + goto yy891; if (yych == 0xED) - goto yy934; - goto yy930; + goto yy893; + goto yy892; } else { if (yych <= 0xF0) - goto yy931; + goto yy894; if (yych <= 0xF3) - goto yy932; + goto yy895; if (yych <= 0xF4) - goto yy933; + goto yy896; + goto yy888; } } - yy924 : { return 0; } - yy925: + yy886: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { - if (yych == '\n') - goto yy924; - goto yy938; + if (yych != '\n') + goto yy901; } else { if (yych <= 0xC1) - goto yy924; + goto yy887; if (yych <= 0xF4) - goto yy938; - goto yy924; + goto yy901; } - yy926: + yy887 : { return 0; } + yy888: + yych = *++p; + goto yy887; + yy889: yyaccept = 0; yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy935; + if (yybm[0 + yych] & 128) { + goto yy908; } if (yych <= 0x7F) { if (yych == '\n') - goto yy924; - goto yy938; + goto yy887; + goto yy901; } else { if (yych <= 0xC1) - goto yy924; + goto yy887; if (yych <= 0xF4) - goto yy938; - goto yy924; + goto yy901; + goto yy887; } - yy927: - yych = *++p; + yy890: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy928; + goto yy887; if (yych <= 0xBF) - goto yy925; - yy928: - p = marker; - if (yyaccept == 0) { - goto yy924; - } else { - goto yy948; - } - yy929: - yych = *++p; + goto yy900; + goto yy887; + yy891: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x9F) - goto yy928; + goto yy887; if (yych <= 0xBF) - goto yy927; - goto yy928; - yy930: - yych = *++p; + goto yy899; + goto yy887; + yy892: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy928; + goto yy887; if (yych <= 0xBF) - goto yy927; - goto yy928; - yy931: - yych = *++p; + goto yy899; + goto yy887; + yy893: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy887; + if (yych <= 0x9F) + goto yy899; + goto yy887; + yy894: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x8F) - goto yy928; + goto yy887; if (yych <= 0xBF) - goto yy930; - goto yy928; - yy932: - yych = *++p; + goto yy897; + goto yy887; + yy895: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy928; + goto yy887; if (yych <= 0xBF) - goto yy930; - goto yy928; - yy933: - yych = *++p; + goto yy897; + goto yy887; + yy896: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy928; - if (yych <= 0x8F) - goto yy930; - goto yy928; - yy934: - yych = *++p; + goto yy887; + if (yych >= 0x90) + goto yy887; + yy897: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy928; - if (yych <= 0x9F) - goto yy927; - goto yy928; - yy935: + goto yy898; + if (yych <= 0xBF) + goto yy899; + yy898: + p = marker; + if (yyaccept == 0) { + goto yy887; + } else { + goto yy911; + } + yy899: ++p; yych = *p; + if (yych <= 0x7F) + goto yy898; + if (yych >= 0xC0) + goto yy898; + yy900: + ++p; + yych = *p; + yy901: if (yybm[0 + yych] & 64) { - goto yy935; + goto yy900; } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') - goto yy928; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy898; + if (yych >= '^') + goto yy898; } else { - if (yych <= '>') - goto yy947; - if (yych <= 0x7F) - goto yy937; - if (yych <= 0xC1) - goto yy928; - goto yy939; + if (yych <= 0xDF) + goto yy899; + if (yych <= 0xE0) + goto yy903; + goto yy897; } } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy940; - if (yych == 0xED) - goto yy945; - goto yy941; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy907; + if (yych <= 0xEF) + goto yy897; + goto yy904; } else { - if (yych <= 0xF0) - goto yy942; if (yych <= 0xF3) - goto yy943; + goto yy905; if (yych <= 0xF4) - goto yy944; - goto yy928; + goto yy906; + goto yy898; } } - yy937: + yy902: ++p; yych = *p; - yy938: - if (yybm[0 + yych] & 128) { - goto yy937; + if (yybm[0 + yych] & 64) { + goto yy900; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy928; + goto yy898; if (yych <= ']') - goto yy946; - goto yy928; + goto yy908; + goto yy898; } else { if (yych <= 0xDF) - goto yy939; - if (yych <= 0xE0) - goto yy940; - goto yy941; + goto yy899; + if (yych >= 0xE1) + goto yy897; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy945; + goto yy907; if (yych <= 0xEF) - goto yy941; - goto yy942; + goto yy897; + goto yy904; } else { if (yych <= 0xF3) - goto yy943; + goto yy905; if (yych <= 0xF4) - goto yy944; - goto yy928; + goto yy906; + goto yy898; } } - yy939: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy928; - if (yych <= 0xBF) - goto yy937; - goto yy928; - yy940: + yy903: ++p; yych = *p; if (yych <= 0x9F) - goto yy928; - if (yych <= 0xBF) - goto yy939; - goto yy928; - yy941: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy928; + goto yy898; if (yych <= 0xBF) - goto yy939; - goto yy928; - yy942: + goto yy899; + goto yy898; + yy904: ++p; yych = *p; if (yych <= 0x8F) - goto yy928; + goto yy898; if (yych <= 0xBF) - goto yy941; - goto yy928; - yy943: + goto yy897; + goto yy898; + yy905: ++p; yych = *p; if (yych <= 0x7F) - goto yy928; + goto yy898; if (yych <= 0xBF) - goto yy941; - goto yy928; - yy944: + goto yy897; + goto yy898; + yy906: ++p; yych = *p; if (yych <= 0x7F) - goto yy928; + goto yy898; if (yych <= 0x8F) - goto yy941; - goto yy928; - yy945: + goto yy897; + goto yy898; + yy907: ++p; yych = *p; if (yych <= 0x7F) - goto yy928; + goto yy898; if (yych <= 0x9F) - goto yy939; - goto yy928; - yy946: + goto yy899; + goto yy898; + yy908: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy937; + goto yy908; } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy928; - if (yych <= ']') - goto yy935; - goto yy928; + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy898; + goto yy900; } else { - if (yych <= 0xDF) - goto yy939; - if (yych <= 0xE0) - goto yy940; - goto yy941; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy945; - if (yych <= 0xEF) - goto yy941; - goto yy942; + if (yych <= '>') + goto yy910; + if (yych <= 0x7F) + goto yy900; + if (yych <= 0xC1) + goto yy898; + goto yy899; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy903; + if (yych == 0xED) + goto yy907; + goto yy897; } else { + if (yych <= 0xF0) + goto yy904; if (yych <= 0xF3) - goto yy943; + goto yy905; if (yych <= 0xF4) - goto yy944; - goto yy928; + goto yy906; + goto yy898; } } - yy947: + yy910: yyaccept = 1; marker = ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy937; + if (yybm[0 + yych] & 64) { + goto yy900; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy948; + goto yy911; if (yych <= ']') - goto yy946; + goto yy902; } else { if (yych <= 0xDF) - goto yy939; + goto yy899; if (yych <= 0xE0) - goto yy940; - goto yy941; + goto yy903; + goto yy897; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy945; + goto yy907; if (yych <= 0xEF) - goto yy941; - goto yy942; + goto yy897; + goto yy904; } else { if (yych <= 0xF3) - goto yy943; + goto yy905; if (yych <= 0xF4) - goto yy944; + goto yy906; } } - yy948 : { return (bufsize_t)(p - start); } + yy911 : { return (bufsize_t)(p - start); } } } @@ -15264,644 +14781,561 @@ bufsize_t _scan_link_title(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *(marker = p); - if (yych <= 0xC1) { - if (yych <= '"') { - if (yych == '\n') - goto yy951; - if (yych <= '!') - goto yy955; - goto yy952; - } else { - if (yych <= '\'') { - if (yych <= '&') - goto yy955; - goto yy953; - } else { - if (yych <= '(') - goto yy954; - if (yych <= 0x7F) - goto yy955; - } - } + yych = *p; + if (yych <= '&') { + if (yych == '"') + goto yy916; } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy956; - if (yych <= 0xE0) - goto yy958; - if (yych <= 0xEC) - goto yy959; - goto yy963; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy959; - goto yy960; - } else { - if (yych <= 0xF3) - goto yy961; - if (yych <= 0xF4) - goto yy962; - } - } + if (yych <= '\'') + goto yy917; + if (yych <= '(') + goto yy918; } - yy951 : { return 0; } - yy952: + ++p; + yy915 : { return 0; } + yy916: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy951; + goto yy915; if (yych <= 0x7F) - goto yy995; - if (yych <= 0xC1) goto yy951; + if (yych <= 0xC1) + goto yy915; if (yych <= 0xF4) - goto yy995; - goto yy951; - yy953: + goto yy951; + goto yy915; + yy917: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy951; + goto yy915; if (yych <= 0x7F) - goto yy981; + goto yy937; if (yych <= 0xC1) - goto yy951; + goto yy915; if (yych <= 0xF4) - goto yy981; - goto yy951; - yy954: + goto yy937; + goto yy915; + yy918: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy951; + goto yy915; if (yych <= 0x7F) - goto yy967; + goto yy923; if (yych <= 0xC1) - goto yy951; + goto yy915; if (yych <= 0xF4) - goto yy967; - goto yy951; - yy955: - yych = *++p; - goto yy951; - yy956: - yych = *++p; - if (yych <= 0x7F) - goto yy957; - if (yych <= 0xBF) - goto yy955; - yy957: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy951; - } else { - goto yy976; - } - } else { - if (yyaccept == 2) { - goto yy990; - } else { - goto yy1004; - } - } - yy958: - yych = *++p; - if (yych <= 0x9F) - goto yy957; - if (yych <= 0xBF) - goto yy956; - goto yy957; - yy959: - yych = *++p; - if (yych <= 0x7F) - goto yy957; - if (yych <= 0xBF) - goto yy956; - goto yy957; - yy960: - yych = *++p; - if (yych <= 0x8F) - goto yy957; - if (yych <= 0xBF) - goto yy959; - goto yy957; - yy961: - yych = *++p; - if (yych <= 0x7F) - goto yy957; - if (yych <= 0xBF) - goto yy959; - goto yy957; - yy962: - yych = *++p; - if (yych <= 0x7F) - goto yy957; - if (yych <= 0x8F) - goto yy959; - goto yy957; - yy963: - yych = *++p; - if (yych <= 0x7F) - goto yy957; - if (yych <= 0x9F) - goto yy956; - goto yy957; - yy964: + goto yy923; + goto yy915; + yy919: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy966; + goto yy922; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy957; + goto yy921; if (yych <= ')') - goto yy977; - goto yy964; + goto yy933; + goto yy919; } else { if (yych <= 0xC1) - goto yy957; + goto yy921; if (yych <= 0xDF) - goto yy968; - goto yy969; + goto yy924; + goto yy925; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy974; - goto yy970; + goto yy930; + goto yy926; } else { if (yych <= 0xF0) - goto yy971; + goto yy927; if (yych <= 0xF3) - goto yy972; + goto yy928; if (yych <= 0xF4) - goto yy973; - goto yy957; + goto yy929; } } - yy966: + yy921: + p = marker; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy915; + } else { + goto yy932; + } + } else { + if (yyaccept == 2) { + goto yy946; + } else { + goto yy960; + } + } + yy922: ++p; yych = *p; - yy967: + yy923: if (yybm[0 + yych] & 32) { - goto yy966; + goto yy922; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy957; + goto yy921; if (yych <= ')') - goto yy975; - goto yy964; + goto yy931; + goto yy919; } else { if (yych <= 0xC1) - goto yy957; + goto yy921; if (yych >= 0xE0) - goto yy969; + goto yy925; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy974; - goto yy970; + goto yy930; + goto yy926; } else { if (yych <= 0xF0) - goto yy971; + goto yy927; if (yych <= 0xF3) - goto yy972; + goto yy928; if (yych <= 0xF4) - goto yy973; - goto yy957; + goto yy929; + goto yy921; } } - yy968: + yy924: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy966; - goto yy957; - yy969: + goto yy922; + goto yy921; + yy925: ++p; yych = *p; if (yych <= 0x9F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy968; - goto yy957; - yy970: + goto yy924; + goto yy921; + yy926: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy968; - goto yy957; - yy971: + goto yy924; + goto yy921; + yy927: ++p; yych = *p; if (yych <= 0x8F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy970; - goto yy957; - yy972: + goto yy926; + goto yy921; + yy928: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy970; - goto yy957; - yy973: + goto yy926; + goto yy921; + yy929: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0x8F) - goto yy970; - goto yy957; - yy974: + goto yy926; + goto yy921; + yy930: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0x9F) - goto yy968; - goto yy957; - yy975: + goto yy924; + goto yy921; + yy931: ++p; - yy976 : { return (bufsize_t)(p - start); } - yy977: + yy932 : { return (bufsize_t)(p - start); } + yy933: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy966; + goto yy922; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy976; + goto yy932; if (yych <= ')') - goto yy975; - goto yy964; + goto yy931; + goto yy919; } else { if (yych <= 0xC1) - goto yy976; + goto yy932; if (yych <= 0xDF) - goto yy968; - goto yy969; + goto yy924; + goto yy925; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy974; - goto yy970; + goto yy930; + goto yy926; } else { if (yych <= 0xF0) - goto yy971; + goto yy927; if (yych <= 0xF3) - goto yy972; + goto yy928; if (yych <= 0xF4) - goto yy973; - goto yy976; + goto yy929; + goto yy932; } } - yy978: + yy934: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy980; + goto yy936; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy957; + goto yy921; if (yych <= '\'') - goto yy991; - goto yy978; + goto yy947; + goto yy934; } else { if (yych <= 0xC1) - goto yy957; + goto yy921; if (yych <= 0xDF) - goto yy982; - goto yy983; + goto yy938; + goto yy939; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy988; - goto yy984; + goto yy944; + goto yy940; } else { if (yych <= 0xF0) - goto yy985; + goto yy941; if (yych <= 0xF3) - goto yy986; + goto yy942; if (yych <= 0xF4) - goto yy987; - goto yy957; + goto yy943; + goto yy921; } } - yy980: + yy936: ++p; yych = *p; - yy981: + yy937: if (yybm[0 + yych] & 64) { - goto yy980; + goto yy936; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy957; + goto yy921; if (yych <= '\'') - goto yy989; - goto yy978; + goto yy945; + goto yy934; } else { if (yych <= 0xC1) - goto yy957; + goto yy921; if (yych >= 0xE0) - goto yy983; + goto yy939; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy988; - goto yy984; + goto yy944; + goto yy940; } else { if (yych <= 0xF0) - goto yy985; + goto yy941; if (yych <= 0xF3) - goto yy986; + goto yy942; if (yych <= 0xF4) - goto yy987; - goto yy957; + goto yy943; + goto yy921; } } - yy982: + yy938: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy980; - goto yy957; - yy983: + goto yy936; + goto yy921; + yy939: ++p; yych = *p; if (yych <= 0x9F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy982; - goto yy957; - yy984: + goto yy938; + goto yy921; + yy940: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy982; - goto yy957; - yy985: + goto yy938; + goto yy921; + yy941: ++p; yych = *p; if (yych <= 0x8F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy984; - goto yy957; - yy986: + goto yy940; + goto yy921; + yy942: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy984; - goto yy957; - yy987: + goto yy940; + goto yy921; + yy943: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0x8F) - goto yy984; - goto yy957; - yy988: + goto yy940; + goto yy921; + yy944: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0x9F) - goto yy982; - goto yy957; - yy989: + goto yy938; + goto yy921; + yy945: ++p; - yy990 : { return (bufsize_t)(p - start); } - yy991: + yy946 : { return (bufsize_t)(p - start); } + yy947: yyaccept = 2; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy980; + goto yy936; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy990; + goto yy946; if (yych <= '\'') - goto yy989; - goto yy978; + goto yy945; + goto yy934; } else { if (yych <= 0xC1) - goto yy990; + goto yy946; if (yych <= 0xDF) - goto yy982; - goto yy983; + goto yy938; + goto yy939; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy988; - goto yy984; + goto yy944; + goto yy940; } else { if (yych <= 0xF0) - goto yy985; + goto yy941; if (yych <= 0xF3) - goto yy986; + goto yy942; if (yych <= 0xF4) - goto yy987; - goto yy990; + goto yy943; + goto yy946; } } - yy992: + yy948: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy994; + goto yy950; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy957; + goto yy921; if (yych <= '"') - goto yy1005; - goto yy992; + goto yy961; + goto yy948; } else { if (yych <= 0xC1) - goto yy957; + goto yy921; if (yych <= 0xDF) - goto yy996; - goto yy997; + goto yy952; + goto yy953; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1002; - goto yy998; + goto yy958; + goto yy954; } else { if (yych <= 0xF0) - goto yy999; + goto yy955; if (yych <= 0xF3) - goto yy1000; + goto yy956; if (yych <= 0xF4) - goto yy1001; - goto yy957; + goto yy957; + goto yy921; } } - yy994: + yy950: ++p; yych = *p; - yy995: + yy951: if (yybm[0 + yych] & 128) { - goto yy994; + goto yy950; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy957; + goto yy921; if (yych <= '"') - goto yy1003; - goto yy992; + goto yy959; + goto yy948; } else { if (yych <= 0xC1) - goto yy957; + goto yy921; if (yych >= 0xE0) - goto yy997; + goto yy953; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1002; - goto yy998; + goto yy958; + goto yy954; } else { if (yych <= 0xF0) - goto yy999; + goto yy955; if (yych <= 0xF3) - goto yy1000; + goto yy956; if (yych <= 0xF4) - goto yy1001; - goto yy957; + goto yy957; + goto yy921; } } - yy996: + yy952: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy994; - goto yy957; - yy997: + goto yy950; + goto yy921; + yy953: ++p; yych = *p; if (yych <= 0x9F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy996; - goto yy957; - yy998: + goto yy952; + goto yy921; + yy954: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy996; - goto yy957; - yy999: + goto yy952; + goto yy921; + yy955: ++p; yych = *p; if (yych <= 0x8F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy998; - goto yy957; - yy1000: + goto yy954; + goto yy921; + yy956: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0xBF) - goto yy998; - goto yy957; - yy1001: + goto yy954; + goto yy921; + yy957: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0x8F) - goto yy998; - goto yy957; - yy1002: + goto yy954; + goto yy921; + yy958: ++p; yych = *p; if (yych <= 0x7F) - goto yy957; + goto yy921; if (yych <= 0x9F) - goto yy996; - goto yy957; - yy1003: + goto yy952; + goto yy921; + yy959: ++p; - yy1004 : { return (bufsize_t)(p - start); } - yy1005: + yy960 : { return (bufsize_t)(p - start); } + yy961: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy994; + goto yy950; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy1004; + goto yy960; if (yych <= '"') - goto yy1003; - goto yy992; + goto yy959; + goto yy948; } else { if (yych <= 0xC1) - goto yy1004; + goto yy960; if (yych <= 0xDF) - goto yy996; - goto yy997; + goto yy952; + goto yy953; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1002; - goto yy998; + goto yy958; + goto yy954; } else { if (yych <= 0xF0) - goto yy999; + goto yy955; if (yych <= 0xF3) - goto yy1000; + goto yy956; if (yych <= 0xF4) - goto yy1001; - goto yy1004; + goto yy957; + goto yy960; } } } @@ -15909,7 +15343,6 @@ bufsize_t _scan_link_title(const unsigned char *p) { // Match space characters, including newlines. bufsize_t _scan_spacechars(const unsigned char *p) { - const unsigned char *marker = NULL; const unsigned char *start = p; { @@ -15929,108 +15362,29 @@ bufsize_t _scan_spacechars(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy1012; - if (yych == '\n') - goto yy1010; - goto yy1009; - } else { - if (yych == ' ') - goto yy1009; - if (yych <= 0x7F) - goto yy1012; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1014; - if (yych <= 0xE0) - goto yy1016; - if (yych <= 0xEC) - goto yy1017; - goto yy1021; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1017; - goto yy1018; - } else { - if (yych <= 0xF3) - goto yy1019; - if (yych <= 0xF4) - goto yy1020; - } - } - } - yy1008 : { return (bufsize_t)(p - start); } - yy1009: - yych = *++p; - goto yy1011; - yy1010: - ++p; yych = *p; - yy1011: - if (yybm[0 + yych] & 128) { - goto yy1010; - } - goto yy1008; - yy1012: + if (yych <= 0x08) + goto yy964; + if (yych <= '\r') + goto yy966; + if (yych == ' ') + goto yy966; + yy964: ++p; { return 0; } - yy1014: - yych = *++p; - if (yych <= 0x7F) - goto yy1015; - if (yych <= 0xBF) - goto yy1012; - yy1015: - p = marker; - goto yy1008; - yy1016: - yych = *++p; - if (yych <= 0x9F) - goto yy1015; - if (yych <= 0xBF) - goto yy1014; - goto yy1015; - yy1017: - yych = *++p; - if (yych <= 0x7F) - goto yy1015; - if (yych <= 0xBF) - goto yy1014; - goto yy1015; - yy1018: - yych = *++p; - if (yych <= 0x8F) - goto yy1015; - if (yych <= 0xBF) - goto yy1017; - goto yy1015; - yy1019: - yych = *++p; - if (yych <= 0x7F) - goto yy1015; - if (yych <= 0xBF) - goto yy1017; - goto yy1015; - yy1020: - yych = *++p; - if (yych <= 0x7F) - goto yy1015; - if (yych <= 0x8F) - goto yy1017; - goto yy1015; - yy1021: + yy966: ++p; - if ((yych = *p) <= 0x7F) - goto yy1015; - if (yych <= 0x9F) - goto yy1014; - goto yy1015; + yych = *p; + goto yy969; + yy967 : { return (bufsize_t)(p - start); } + yy968: + ++p; + yych = *p; + yy969: + if (yybm[0 + yych] & 128) { + goto yy968; + } + goto yy967; } } @@ -16055,194 +15409,117 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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) { - if (yych <= '"') { - if (yych != '\n') - goto yy1026; - } else { - if (yych <= '#') - goto yy1025; - if (yych <= 0x7F) - goto yy1026; - if (yych >= 0xC2) - goto yy1027; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy1029; - if (yych == 0xED) - goto yy1034; - goto yy1030; - } else { - if (yych <= 0xF0) - goto yy1031; - if (yych <= 0xF3) - goto yy1032; - if (yych <= 0xF4) - goto yy1033; - } - } - yy1024 : { return 0; } - yy1025: + yych = *p; + if (yych == '#') + goto yy974; + ++p; + yy973 : { return 0; } + yy974: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy1037; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1024; - if (yych <= '\n') - goto yy1035; - goto yy1024; + goto yy973; + if (yych >= '\v') + goto yy973; } else { if (yych <= '\r') - goto yy1035; + goto yy975; if (yych == '#') - goto yy1039; - goto yy1024; + goto yy979; + goto yy973; } - yy1026: - yych = *++p; - goto yy1024; - yy1027: - yych = *++p; - if (yych <= 0x7F) - goto yy1028; - if (yych <= 0xBF) - goto yy1026; - yy1028: - p = marker; - goto yy1024; - yy1029: - yych = *++p; - if (yych <= 0x9F) - goto yy1028; - if (yych <= 0xBF) - goto yy1027; - goto yy1028; - yy1030: - yych = *++p; - if (yych <= 0x7F) - goto yy1028; - if (yych <= 0xBF) - goto yy1027; - goto yy1028; - yy1031: - yych = *++p; - if (yych <= 0x8F) - goto yy1028; - if (yych <= 0xBF) - goto yy1030; - goto yy1028; - yy1032: - yych = *++p; - if (yych <= 0x7F) - goto yy1028; - if (yych <= 0xBF) - goto yy1030; - goto yy1028; - yy1033: - yych = *++p; - if (yych <= 0x7F) - goto yy1028; - if (yych <= 0x8F) - goto yy1030; - goto yy1028; - yy1034: - yych = *++p; - if (yych <= 0x7F) - goto yy1028; - if (yych <= 0x9F) - goto yy1027; - goto yy1028; - yy1035: + yy975: ++p; - yy1036 : { return (bufsize_t)(p - start); } - yy1037: + yy976 : { return (bufsize_t)(p - start); } + yy977: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1037; + goto yy977; } - goto yy1036; - yy1039: + goto yy976; + yy979: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1037; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1028; + goto yy980; if (yych <= '\n') - goto yy1035; - goto yy1028; + goto yy975; } else { if (yych <= '\r') - goto yy1035; - if (yych != '#') - goto yy1028; + goto yy975; + if (yych == '#') + goto yy981; } + yy980: + p = marker; + goto yy973; + yy981: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1037; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1028; + goto yy980; if (yych <= '\n') - goto yy1035; - goto yy1028; + goto yy975; + goto yy980; } else { if (yych <= '\r') - goto yy1035; + goto yy975; if (yych != '#') - goto yy1028; + goto yy980; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1037; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1028; + goto yy980; if (yych <= '\n') - goto yy1035; - goto yy1028; + goto yy975; + goto yy980; } else { if (yych <= '\r') - goto yy1035; + goto yy975; if (yych != '#') - goto yy1028; + goto yy980; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1037; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1028; + goto yy980; if (yych <= '\n') - goto yy1035; - goto yy1028; + goto yy975; + goto yy980; } else { if (yych <= '\r') - goto yy1035; + goto yy975; if (yych != '#') - goto yy1028; + goto yy980; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy1037; + goto yy977; } if (yych <= 0x08) - goto yy1028; + goto yy980; if (yych <= '\n') - goto yy1035; + goto yy975; if (yych == '\r') - goto yy1035; - goto yy1028; + goto yy975; + goto yy980; } } @@ -16254,222 +15531,141 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 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, 32, 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, 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 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, 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, 0, 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 <= 0xC1) { - if (yych <= '-') { - if (yych == '\n') - goto yy1046; - if (yych <= ',') - goto yy1049; - goto yy1048; - } else { - if (yych == '=') - goto yy1047; - if (yych <= 0x7F) - goto yy1049; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1050; - if (yych <= 0xE0) - goto yy1052; - if (yych <= 0xEC) - goto yy1053; - goto yy1057; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1053; - goto yy1054; - } else { - if (yych <= 0xF3) - goto yy1055; - if (yych <= 0xF4) - goto yy1056; - } - } - } - yy1046 : { return 0; } - yy1047: + yych = *p; + if (yych == '-') + goto yy989; + if (yych == '=') + goto yy990; + ++p; + yy988 : { return 0; } + yy989: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy1068; + goto yy1002; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1046; + goto yy988; if (yych <= '\n') - goto yy1065; - goto yy1046; + goto yy999; + goto yy988; } else { if (yych <= '\r') - goto yy1065; + goto yy999; if (yych == ' ') - goto yy1065; - goto yy1046; + goto yy999; + goto yy988; } - yy1048: + yy990: yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy1062; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy1046; - if (yych <= '\n') - goto yy1059; - goto yy1046; - } else { - if (yych <= '\r') - goto yy1059; - if (yych == ' ') - goto yy1059; - goto yy1046; - } - yy1049: - yych = *++p; - goto yy1046; - yy1050: - yych = *++p; - if (yych <= 0x7F) - goto yy1051; - if (yych <= 0xBF) - goto yy1049; - yy1051: - p = marker; - goto yy1046; - yy1052: - yych = *++p; - if (yych <= 0x9F) - goto yy1051; - if (yych <= 0xBF) - goto yy1050; - goto yy1051; - yy1053: - yych = *++p; - if (yych <= 0x7F) - goto yy1051; - if (yych <= 0xBF) - goto yy1050; - goto yy1051; - yy1054: - yych = *++p; - if (yych <= 0x8F) - goto yy1051; - if (yych <= 0xBF) - goto yy1053; - goto yy1051; - yy1055: - yych = *++p; - if (yych <= 0x7F) - goto yy1051; - if (yych <= 0xBF) - goto yy1053; - goto yy1051; - yy1056: - yych = *++p; - if (yych <= 0x7F) - goto yy1051; - if (yych <= 0x8F) - goto yy1053; - goto yy1051; - yy1057: - yych = *++p; - if (yych <= 0x7F) - goto yy1051; - if (yych <= 0x9F) - goto yy1050; - goto yy1051; - yy1058: + goto yy996; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy988; + if (yych <= '\n') + goto yy992; + goto yy988; + } else { + if (yych <= '\r') + goto yy992; + if (yych == ' ') + goto yy992; + goto yy988; + } + yy991: ++p; yych = *p; - yy1059: + yy992: if (yybm[0 + yych] & 32) { - goto yy1058; + goto yy991; } if (yych <= 0x08) - goto yy1051; + goto yy993; if (yych <= '\n') - goto yy1060; - if (yych != '\r') - goto yy1051; - yy1060: + goto yy994; + if (yych == '\r') + goto yy994; + yy993: + p = marker; + goto yy988; + yy994: ++p; - { return 2; } - yy1062: + { return 1; } + yy996: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1058; + goto yy991; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1051; + goto yy993; if (yych <= '\n') - goto yy1060; - goto yy1051; + goto yy994; + goto yy993; } else { if (yych <= '\r') - goto yy1060; - if (yych == '-') - goto yy1062; - goto yy1051; + goto yy994; + if (yych == '=') + goto yy996; + goto yy993; } - yy1064: + yy998: ++p; yych = *p; - yy1065: + yy999: if (yych <= '\f') { if (yych <= 0x08) - goto yy1051; + goto yy993; if (yych <= '\t') - goto yy1064; + goto yy998; if (yych >= '\v') - goto yy1051; + goto yy993; } else { if (yych <= '\r') - goto yy1066; + goto yy1000; if (yych == ' ') - goto yy1064; - goto yy1051; + goto yy998; + goto yy993; } - yy1066: + yy1000: ++p; - { return 1; } - yy1068: + { return 2; } + yy1002: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1068; + goto yy1002; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1051; + goto yy993; if (yych <= '\t') - goto yy1064; + goto yy998; if (yych <= '\n') - goto yy1066; - goto yy1051; + goto yy1000; + goto yy993; } else { if (yych <= '\r') - goto yy1066; + goto yy1000; if (yych == ' ') - goto yy1064; - goto yy1051; + goto yy998; + goto yy993; } } } @@ -16486,9 +15682,9 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { static const unsigned char yybm[] = { 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, 128, 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, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16498,335 +15694,251 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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) { - if (yych <= '*') { - if (yych == '\n') - goto yy1072; - if (yych <= ')') - goto yy1076; - goto yy1073; - } else { - if (yych <= '-') { - if (yych <= ',') - goto yy1076; - goto yy1075; - } else { - if (yych == '_') - goto yy1074; - goto yy1076; - } - } + yych = *p; + if (yych <= ',') { + if (yych == '*') + goto yy1008; } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych >= 0xC2) - goto yy1077; - } else { - if (yych <= 0xE0) - goto yy1079; - if (yych <= 0xEC) - goto yy1080; - goto yy1084; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1080; - goto yy1081; - } else { - if (yych <= 0xF3) - goto yy1082; - if (yych <= 0xF4) - goto yy1083; - } - } + if (yych <= '-') + goto yy1009; + if (yych == '_') + goto yy1010; } - yy1072 : { return 0; } - yy1073: + ++p; + yy1007 : { return 0; } + yy1008: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1105; - goto yy1072; + goto yy1032; + goto yy1007; } else { if (yych <= ' ') - goto yy1105; + goto yy1032; if (yych == '*') - goto yy1107; - goto yy1072; + goto yy1034; + goto yy1007; } - yy1074: + yy1009: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1095; - goto yy1072; + goto yy1022; + goto yy1007; } else { if (yych <= ' ') - goto yy1095; - if (yych == '_') - goto yy1097; - goto yy1072; + goto yy1022; + if (yych == '-') + goto yy1024; + goto yy1007; } - yy1075: + yy1010: yych = *(marker = ++p); if (yybm[0 + yych] & 16) { - goto yy1085; + goto yy1011; } - if (yych == '-') - goto yy1087; - goto yy1072; - yy1076: - yych = *++p; - goto yy1072; - yy1077: - yych = *++p; - if (yych <= 0x7F) - goto yy1078; - if (yych <= 0xBF) - goto yy1076; - yy1078: - p = marker; - goto yy1072; - yy1079: - yych = *++p; - if (yych <= 0x9F) - goto yy1078; - if (yych <= 0xBF) - goto yy1077; - goto yy1078; - yy1080: - yych = *++p; - if (yych <= 0x7F) - goto yy1078; - if (yych <= 0xBF) - goto yy1077; - goto yy1078; - yy1081: - yych = *++p; - if (yych <= 0x8F) - goto yy1078; - if (yych <= 0xBF) - goto yy1080; - goto yy1078; - yy1082: - yych = *++p; - if (yych <= 0x7F) - goto yy1078; - if (yych <= 0xBF) - goto yy1080; - goto yy1078; - yy1083: - yych = *++p; - if (yych <= 0x7F) - goto yy1078; - if (yych <= 0x8F) - goto yy1080; - goto yy1078; - yy1084: - yych = *++p; - if (yych <= 0x7F) - goto yy1078; - if (yych <= 0x9F) - goto yy1077; - goto yy1078; - yy1085: + if (yych == '_') + goto yy1014; + goto yy1007; + yy1011: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1085; + goto yy1011; } - if (yych != '-') - goto yy1078; - yy1087: + if (yych == '_') + goto yy1014; + yy1013: + p = marker; + goto yy1007; + yy1014: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1087; - goto yy1078; + goto yy1014; + goto yy1013; } else { if (yych <= ' ') - goto yy1087; - if (yych != '-') - goto yy1078; + goto yy1014; + if (yych != '_') + goto yy1013; } - yy1089: + yy1016: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) - goto yy1078; - goto yy1089; + goto yy1013; + goto yy1016; } else { if (yych <= '\n') - goto yy1091; + goto yy1018; if (yych <= '\f') - goto yy1078; + goto yy1013; } } else { if (yych <= ' ') { if (yych <= 0x1F) - goto yy1078; - goto yy1089; + goto yy1013; + goto yy1016; } else { - if (yych == '-') - goto yy1093; - goto yy1078; + if (yych == '_') + goto yy1020; + goto yy1013; } } - yy1091: + yy1018: ++p; { return (bufsize_t)(p - start); } - yy1093: + yy1020: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1093; + goto yy1020; } if (yych <= 0x08) - goto yy1078; + goto yy1013; if (yych <= '\n') - goto yy1091; + goto yy1018; if (yych == '\r') - goto yy1091; - goto yy1078; - yy1095: + goto yy1018; + goto yy1013; + yy1022: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1095; - goto yy1078; + goto yy1022; + goto yy1013; } else { if (yych <= ' ') - goto yy1095; - if (yych != '_') - goto yy1078; + goto yy1022; + if (yych != '-') + goto yy1013; } - yy1097: + yy1024: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1097; - goto yy1078; + goto yy1024; + goto yy1013; } else { if (yych <= ' ') - goto yy1097; - if (yych != '_') - goto yy1078; + goto yy1024; + if (yych != '-') + goto yy1013; } - yy1099: + yy1026: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) - goto yy1078; - goto yy1099; + goto yy1013; + goto yy1026; } else { if (yych <= '\n') - goto yy1101; + goto yy1028; if (yych <= '\f') - goto yy1078; + goto yy1013; } } else { if (yych <= ' ') { if (yych <= 0x1F) - goto yy1078; - goto yy1099; + goto yy1013; + goto yy1026; } else { - if (yych == '_') - goto yy1103; - goto yy1078; + if (yych == '-') + goto yy1030; + goto yy1013; } } - yy1101: + yy1028: ++p; { return (bufsize_t)(p - start); } - yy1103: + yy1030: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1103; + goto yy1030; } if (yych <= 0x08) - goto yy1078; + goto yy1013; if (yych <= '\n') - goto yy1101; + goto yy1028; if (yych == '\r') - goto yy1101; - goto yy1078; - yy1105: + goto yy1028; + goto yy1013; + yy1032: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1105; - goto yy1078; + goto yy1032; + goto yy1013; } else { if (yych <= ' ') - goto yy1105; + goto yy1032; if (yych != '*') - goto yy1078; + goto yy1013; } - yy1107: + yy1034: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1107; - goto yy1078; + goto yy1034; + goto yy1013; } else { if (yych <= ' ') - goto yy1107; + goto yy1034; if (yych != '*') - goto yy1078; + goto yy1013; } - yy1109: + yy1036: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) - goto yy1078; - goto yy1109; + goto yy1013; + goto yy1036; } else { if (yych <= '\n') - goto yy1111; + goto yy1038; if (yych <= '\f') - goto yy1078; + goto yy1013; } } else { if (yych <= ' ') { if (yych <= 0x1F) - goto yy1078; - goto yy1109; + goto yy1013; + goto yy1036; } else { if (yych == '*') - goto yy1113; - goto yy1078; + goto yy1040; + goto yy1013; } } - yy1111: + yy1038: ++p; { return (bufsize_t)(p - start); } - yy1113: + yy1040: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1113; + goto yy1040; } if (yych <= 0x08) - goto yy1078; + goto yy1013; if (yych <= '\n') - goto yy1111; + goto yy1038; if (yych == '\r') - goto yy1111; - goto yy1078; + goto yy1038; + goto yy1013; } } @@ -16858,378 +15970,294 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - yych = *(marker = p); - if (yych <= 0xC1) { - if (yych <= '`') { - if (yych == '\n') - goto yy1117; - if (yych <= '_') - goto yy1120; - goto yy1118; - } else { - if (yych == '~') - goto yy1119; - if (yych <= 0x7F) - goto yy1120; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1121; - if (yych <= 0xE0) - goto yy1123; - if (yych <= 0xEC) - goto yy1124; - goto yy1128; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1124; - goto yy1125; - } else { - if (yych <= 0xF3) - goto yy1126; - if (yych <= 0xF4) - goto yy1127; - } - } - } - yy1117 : { return 0; } - yy1118: + yych = *p; + if (yych == '`') + goto yy1046; + if (yych == '~') + goto yy1047; + ++p; + yy1045 : { return 0; } + yy1046: yych = *(marker = ++p); if (yych == '`') - goto yy1143; - goto yy1117; - yy1119: + goto yy1063; + goto yy1045; + yy1047: yych = *(marker = ++p); - if (yych == '~') - goto yy1129; - goto yy1117; - yy1120: - yych = *++p; - goto yy1117; - yy1121: - yych = *++p; - if (yych <= 0x7F) - goto yy1122; - if (yych <= 0xBF) - goto yy1120; - yy1122: - p = marker; - goto yy1117; - yy1123: - yych = *++p; - if (yych <= 0x9F) - goto yy1122; - if (yych <= 0xBF) - goto yy1121; - goto yy1122; - yy1124: - yych = *++p; - if (yych <= 0x7F) - goto yy1122; - if (yych <= 0xBF) - goto yy1121; - goto yy1122; - yy1125: - yych = *++p; - if (yych <= 0x8F) - goto yy1122; - if (yych <= 0xBF) - goto yy1124; - goto yy1122; - yy1126: - yych = *++p; - if (yych <= 0x7F) - goto yy1122; - if (yych <= 0xBF) - goto yy1124; - goto yy1122; - yy1127: - yych = *++p; - if (yych <= 0x7F) - goto yy1122; - if (yych <= 0x8F) - goto yy1124; - goto yy1122; - yy1128: - yych = *++p; - if (yych <= 0x7F) - goto yy1122; - if (yych <= 0x9F) - goto yy1121; - goto yy1122; - yy1129: + if (yych != '~') + goto yy1045; yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1130; + goto yy1050; } - goto yy1122; - yy1130: + yy1049: + p = marker; + goto yy1045; + yy1050: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 32) { - goto yy1132; + goto yy1052; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1122; + goto yy1049; if (yych <= '\r') - goto yy1141; - goto yy1130; + goto yy1061; + goto yy1050; } else { if (yych <= 0xC1) - goto yy1122; + goto yy1049; if (yych <= 0xDF) - goto yy1134; - goto yy1135; + goto yy1054; + goto yy1055; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1140; - goto yy1136; + goto yy1060; + goto yy1056; } else { if (yych <= 0xF0) - goto yy1137; + goto yy1057; if (yych <= 0xF3) - goto yy1138; + goto yy1058; if (yych <= 0xF4) - goto yy1139; - goto yy1122; + goto yy1059; + goto yy1049; } } - yy1132: + yy1052: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1132; + goto yy1052; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1122; + goto yy1049; if (yych <= '\r') - goto yy1141; - goto yy1122; + goto yy1061; + goto yy1049; } else { if (yych <= 0xDF) - goto yy1134; + goto yy1054; if (yych <= 0xE0) - goto yy1135; - goto yy1136; + goto yy1055; + goto yy1056; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1140; + goto yy1060; if (yych <= 0xEF) - goto yy1136; - goto yy1137; + goto yy1056; + goto yy1057; } else { if (yych <= 0xF3) - goto yy1138; + goto yy1058; if (yych <= 0xF4) - goto yy1139; - goto yy1122; + goto yy1059; + goto yy1049; } } - yy1134: + yy1054: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1132; - goto yy1122; - yy1135: + goto yy1052; + goto yy1049; + yy1055: ++p; yych = *p; if (yych <= 0x9F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1134; - goto yy1122; - yy1136: + goto yy1054; + goto yy1049; + yy1056: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1134; - goto yy1122; - yy1137: + goto yy1054; + goto yy1049; + yy1057: ++p; yych = *p; if (yych <= 0x8F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1136; - goto yy1122; - yy1138: + goto yy1056; + goto yy1049; + yy1058: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1136; - goto yy1122; - yy1139: + goto yy1056; + goto yy1049; + yy1059: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0x8F) - goto yy1136; - goto yy1122; - yy1140: + goto yy1056; + goto yy1049; + yy1060: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0x9F) - goto yy1134; - goto yy1122; - yy1141: + goto yy1054; + goto yy1049; + yy1061: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1143: + yy1063: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy1144; + goto yy1064; } - goto yy1122; - yy1144: + goto yy1049; + yy1064: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy1146; + goto yy1066; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy1122; + goto yy1049; if (yych <= '\r') - goto yy1155; - goto yy1144; + goto yy1075; + goto yy1064; } else { if (yych <= 0xC1) - goto yy1122; + goto yy1049; if (yych <= 0xDF) - goto yy1148; - goto yy1149; + goto yy1068; + goto yy1069; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1154; - goto yy1150; + goto yy1074; + goto yy1070; } else { if (yych <= 0xF0) - goto yy1151; + goto yy1071; if (yych <= 0xF3) - goto yy1152; + goto yy1072; if (yych <= 0xF4) - goto yy1153; - goto yy1122; + goto yy1073; + goto yy1049; } } - yy1146: + yy1066: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1146; + goto yy1066; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1122; + goto yy1049; if (yych <= '\r') - goto yy1155; - goto yy1122; + goto yy1075; + goto yy1049; } else { if (yych <= 0xDF) - goto yy1148; + goto yy1068; if (yych <= 0xE0) - goto yy1149; - goto yy1150; + goto yy1069; + goto yy1070; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1154; + goto yy1074; if (yych <= 0xEF) - goto yy1150; - goto yy1151; + goto yy1070; + goto yy1071; } else { if (yych <= 0xF3) - goto yy1152; + goto yy1072; if (yych <= 0xF4) - goto yy1153; - goto yy1122; + goto yy1073; + goto yy1049; } } - yy1148: + yy1068: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1146; - goto yy1122; - yy1149: + goto yy1066; + goto yy1049; + yy1069: ++p; yych = *p; if (yych <= 0x9F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1148; - goto yy1122; - yy1150: + goto yy1068; + goto yy1049; + yy1070: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1148; - goto yy1122; - yy1151: + goto yy1068; + goto yy1049; + yy1071: ++p; yych = *p; if (yych <= 0x8F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1150; - goto yy1122; - yy1152: + goto yy1070; + goto yy1049; + yy1072: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0xBF) - goto yy1150; - goto yy1122; - yy1153: + goto yy1070; + goto yy1049; + yy1073: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0x8F) - goto yy1150; - goto yy1122; - yy1154: + goto yy1070; + goto yy1049; + yy1074: ++p; yych = *p; if (yych <= 0x7F) - goto yy1122; + goto yy1049; if (yych <= 0x9F) - goto yy1148; - goto yy1122; - yy1155: + goto yy1068; + goto yy1049; + yy1075: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -17257,1203 +16285,1039 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 <= 0xC1) { - if (yych <= '`') { - if (yych == '\n') - goto yy1159; - if (yych <= '_') - goto yy1162; - goto yy1160; - } else { - if (yych == '~') - goto yy1161; - if (yych <= 0x7F) - goto yy1162; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy1163; - if (yych <= 0xE0) - goto yy1165; - if (yych <= 0xEC) - goto yy1166; - goto yy1170; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy1166; - goto yy1167; - } else { - if (yych <= 0xF3) - goto yy1168; - if (yych <= 0xF4) - goto yy1169; - } - } - } - yy1159 : { return 0; } - yy1160: + yych = *p; + if (yych == '`') + goto yy1081; + if (yych == '~') + goto yy1082; + ++p; + yy1080 : { return 0; } + yy1081: yych = *(marker = ++p); if (yych == '`') - goto yy1178; - goto yy1159; - yy1161: + goto yy1091; + goto yy1080; + yy1082: yych = *(marker = ++p); - if (yych == '~') - goto yy1171; - goto yy1159; - yy1162: - yych = *++p; - goto yy1159; - yy1163: - yych = *++p; - if (yych <= 0x7F) - goto yy1164; - if (yych <= 0xBF) - goto yy1162; - yy1164: - p = marker; - goto yy1159; - yy1165: - yych = *++p; - if (yych <= 0x9F) - goto yy1164; - if (yych <= 0xBF) - goto yy1163; - goto yy1164; - yy1166: - yych = *++p; - if (yych <= 0x7F) - goto yy1164; - if (yych <= 0xBF) - goto yy1163; - goto yy1164; - yy1167: - yych = *++p; - if (yych <= 0x8F) - goto yy1164; - if (yych <= 0xBF) - goto yy1166; - goto yy1164; - yy1168: - yych = *++p; - if (yych <= 0x7F) - goto yy1164; - if (yych <= 0xBF) - goto yy1166; - goto yy1164; - yy1169: - yych = *++p; - if (yych <= 0x7F) - goto yy1164; - if (yych <= 0x8F) - goto yy1166; - goto yy1164; - yy1170: - yych = *++p; - if (yych <= 0x7F) - goto yy1164; - if (yych <= 0x9F) - goto yy1163; - goto yy1164; - yy1171: + if (yych != '~') + goto yy1080; yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1172; + goto yy1085; } - goto yy1164; - yy1172: + yy1084: + p = marker; + goto yy1080; + yy1085: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy1174; + goto yy1087; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1164; + goto yy1084; if (yych <= '\n') - goto yy1176; - goto yy1164; + goto yy1089; + goto yy1084; } else { if (yych <= '\r') - goto yy1176; + goto yy1089; if (yych == '~') - goto yy1172; - goto yy1164; + goto yy1085; + goto yy1084; } - yy1174: + yy1087: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1174; + goto yy1087; } if (yych <= 0x08) - goto yy1164; + goto yy1084; if (yych <= '\n') - goto yy1176; + goto yy1089; if (yych != '\r') - goto yy1164; - yy1176: + goto yy1084; + yy1089: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1178: + yy1091: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1179; + goto yy1092; } - goto yy1164; - yy1179: + goto yy1084; + yy1092: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy1179; + goto yy1092; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1164; + goto yy1084; if (yych <= '\t') - goto yy1181; + goto yy1094; if (yych <= '\n') - goto yy1183; - goto yy1164; + goto yy1096; + goto yy1084; } else { if (yych <= '\r') - goto yy1183; + goto yy1096; if (yych != ' ') - goto yy1164; + goto yy1084; } - yy1181: + yy1094: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1164; + goto yy1084; if (yych <= '\t') - goto yy1181; + goto yy1094; if (yych >= '\v') - goto yy1164; + goto yy1084; } else { if (yych <= '\r') - goto yy1183; + goto yy1096; if (yych == ' ') - goto yy1181; - goto yy1164; + goto yy1094; + goto yy1084; } - yy1183: + yy1096: ++p; - p = marker; - { return (bufsize_t)(p - start); } - } -} - -// Scans an entity. -// Returns number of chars matched. -bufsize_t _scan_entity(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - yych = *(marker = p); - if (yych <= 0xDF) { - if (yych <= '%') { - if (yych != '\n') - goto yy1189; - } else { - if (yych <= '&') - goto yy1188; - if (yych <= 0x7F) - goto yy1189; - if (yych >= 0xC2) - goto yy1190; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy1192; - if (yych == 0xED) - goto yy1197; - goto yy1193; - } else { - if (yych <= 0xF0) - goto yy1194; - if (yych <= 0xF3) - goto yy1195; - if (yych <= 0xF4) - goto yy1196; - } - } - yy1187 : { return 0; } - yy1188: - yych = *(marker = ++p); - if (yych <= '@') { - if (yych == '#') - goto yy1198; - goto yy1187; - } else { - if (yych <= 'Z') - goto yy1199; - if (yych <= '`') - goto yy1187; - if (yych <= 'z') - goto yy1199; - goto yy1187; - } - yy1189: - yych = *++p; - goto yy1187; - yy1190: - yych = *++p; - if (yych <= 0x7F) - goto yy1191; - if (yych <= 0xBF) - goto yy1189; - yy1191: - p = marker; - goto yy1187; - yy1192: - yych = *++p; - if (yych <= 0x9F) - goto yy1191; - if (yych <= 0xBF) - goto yy1190; - goto yy1191; - yy1193: - yych = *++p; - if (yych <= 0x7F) - goto yy1191; - if (yych <= 0xBF) - goto yy1190; - goto yy1191; - yy1194: - yych = *++p; - if (yych <= 0x8F) - goto yy1191; - if (yych <= 0xBF) - goto yy1193; - goto yy1191; - yy1195: - yych = *++p; - if (yych <= 0x7F) - goto yy1191; - if (yych <= 0xBF) - goto yy1193; - goto yy1191; - yy1196: - yych = *++p; - if (yych <= 0x7F) - goto yy1191; - if (yych <= 0x8F) - goto yy1193; - goto yy1191; - yy1197: - yych = *++p; - if (yych <= 0x7F) - goto yy1191; - if (yych <= 0x9F) - goto yy1190; - goto yy1191; - yy1198: + p = marker; + { return (bufsize_t)(p - start); } + } +} + +// Scans an entity. +// Returns number of chars matched. +bufsize_t _scan_entity(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + yych = *p; + if (yych == '&') + goto yy1102; + ++p; + yy1101 : { return 0; } + yy1102: + yych = *(marker = ++p); + if (yych <= '@') { + if (yych != '#') + goto yy1101; + } else { + if (yych <= 'Z') + goto yy1105; + if (yych <= '`') + goto yy1101; + if (yych <= 'z') + goto yy1105; + goto yy1101; + } yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1234; - goto yy1191; + goto yy1140; } else { if (yych <= 'X') - goto yy1233; + goto yy1139; if (yych == 'x') - goto yy1233; - goto yy1191; + goto yy1139; } - yy1199: + yy1104: + p = marker; + goto yy1101; + yy1105: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych >= ':') - goto yy1191; + goto yy1104; } else { if (yych <= 'Z') - goto yy1200; + goto yy1106; if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } - yy1200: + yy1106: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1203; + goto yy1109; if (yych <= ':') - goto yy1191; + goto yy1104; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; - goto yy1203; + goto yy1104; + goto yy1109; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych <= 'z') - goto yy1203; - goto yy1191; + goto yy1109; + goto yy1104; } } - yy1201: + yy1107: ++p; { return (bufsize_t)(p - start); } - yy1203: + yy1109: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1204; + goto yy1110; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1204: + yy1110: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1205; + goto yy1111; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1205: + yy1111: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1206; + goto yy1112; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1206: + yy1112: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1207; + goto yy1113; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1207: + yy1113: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1208; + goto yy1114; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1208: + yy1114: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1209; + goto yy1115; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1209: + yy1115: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1210; + goto yy1116; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1210: + yy1116: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1211; + goto yy1117; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1211: + yy1117: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1212; + goto yy1118; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1212: + yy1118: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1213; + goto yy1119; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1213: + yy1119: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1214; + goto yy1120; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1214: + yy1120: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1215; + goto yy1121; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1215: + yy1121: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1216; + goto yy1122; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1216: + yy1122: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1217; + goto yy1123; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1217: + yy1123: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1218; + goto yy1124; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1218: + yy1124: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1219; + goto yy1125; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1219: + yy1125: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1220; + goto yy1126; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1220: + yy1126: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1221; + goto yy1127; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1221: + yy1127: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1222; + goto yy1128; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1222: + yy1128: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1223; + goto yy1129; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1223: + yy1129: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1224; + goto yy1130; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1224: + yy1130: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1225; + goto yy1131; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1225: + yy1131: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1226; + goto yy1132; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1226: + yy1132: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1227; + goto yy1133; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1227: + yy1133: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1228; + goto yy1134; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1228: + yy1134: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1229; + goto yy1135; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1229: + yy1135: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1230; + goto yy1136; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1230: + yy1136: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1231; + goto yy1137; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1231: + yy1137: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1232; + goto yy1138; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= '{') - goto yy1191; + goto yy1104; } } - yy1232: + yy1138: yych = *++p; if (yych == ';') - goto yy1201; - goto yy1191; - yy1233: + goto yy1107; + goto yy1104; + yy1139: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1241; - goto yy1191; + goto yy1147; + goto yy1104; } else { if (yych <= 'F') - goto yy1241; + goto yy1147; if (yych <= '`') - goto yy1191; + goto yy1104; if (yych <= 'f') - goto yy1241; - goto yy1191; + goto yy1147; + goto yy1104; } - yy1234: + yy1140: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1235; + goto yy1141; if (yych == ';') - goto yy1201; - goto yy1191; - yy1235: + goto yy1107; + goto yy1104; + yy1141: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1236; + goto yy1142; if (yych == ';') - goto yy1201; - goto yy1191; - yy1236: + goto yy1107; + goto yy1104; + yy1142: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1237; + goto yy1143; if (yych == ';') - goto yy1201; - goto yy1191; - yy1237: + goto yy1107; + goto yy1104; + yy1143: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1238; + goto yy1144; if (yych == ';') - goto yy1201; - goto yy1191; - yy1238: + goto yy1107; + goto yy1104; + yy1144: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1239; + goto yy1145; if (yych == ';') - goto yy1201; - goto yy1191; - yy1239: + goto yy1107; + goto yy1104; + yy1145: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1240; + goto yy1146; if (yych == ';') - goto yy1201; - goto yy1191; - yy1240: + goto yy1107; + goto yy1104; + yy1146: yych = *++p; if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1232; + goto yy1138; if (yych == ';') - goto yy1201; - goto yy1191; - yy1241: + goto yy1107; + goto yy1104; + yy1147: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1242; + goto yy1148; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= 'g') - goto yy1191; + goto yy1104; } } - yy1242: + yy1148: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1243; + goto yy1149; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= 'g') - goto yy1191; + goto yy1104; } } - yy1243: + yy1149: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1244; + goto yy1150; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= 'g') - goto yy1191; + goto yy1104; } } - yy1244: + yy1150: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1245; + goto yy1151; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= 'g') - goto yy1191; + goto yy1104; } } - yy1245: + yy1151: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1246; + goto yy1152; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= 'g') - goto yy1191; + goto yy1104; } } - yy1246: + yy1152: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1247; + goto yy1153; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; + goto yy1104; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych >= 'g') - goto yy1191; + goto yy1104; } } - yy1247: + yy1153: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1191; + goto yy1104; if (yych <= '9') - goto yy1232; + goto yy1138; if (yych <= ':') - goto yy1191; - goto yy1201; + goto yy1104; + goto yy1107; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1191; - goto yy1232; + goto yy1104; + goto yy1138; } else { if (yych <= '`') - goto yy1191; + goto yy1104; if (yych <= 'f') - goto yy1232; - goto yy1191; + goto yy1138; + goto yy1104; } } } @@ -18468,420 +17332,339 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { { unsigned char yych; unsigned int yyaccept = 0; - yych = *(marker = p); - if (yych <= 'f') { - if (yych <= 'I') { - if (yych <= 'C') { - if (yych != '\n') - goto yy1255; - } else { - if (yych <= 'D') - goto yy1251; - if (yych == 'F') - goto yy1254; - goto yy1255; - } + yych = *p; + if (yych <= 'V') { + if (yych <= 'F') { + if (yych == 'D') + goto yy1158; + if (yych >= 'F') + goto yy1159; } else { - if (yych <= 'V') { - if (yych <= 'J') - goto yy1252; - if (yych <= 'U') - goto yy1255; - goto yy1253; - } else { - if (yych == 'd') - goto yy1251; - if (yych <= 'e') - goto yy1255; - goto yy1254; - } + if (yych == 'J') + goto yy1160; + if (yych >= 'V') + goto yy1161; } } else { - if (yych <= 0xDF) { - if (yych <= 'u') { - if (yych == 'j') - goto yy1252; - goto yy1255; - } else { - if (yych <= 'v') - goto yy1253; - if (yych <= 0x7F) - goto yy1255; - if (yych >= 0xC2) - goto yy1256; - } + if (yych <= 'f') { + if (yych == 'd') + goto yy1158; + if (yych >= 'f') + goto yy1159; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy1258; - if (yych == 0xED) - goto yy1263; - goto yy1259; + if (yych <= 'j') { + if (yych >= 'j') + goto yy1160; } else { - if (yych <= 0xF0) - goto yy1260; - if (yych <= 0xF3) - goto yy1261; - if (yych <= 0xF4) - goto yy1262; + if (yych == 'v') + goto yy1161; } } } - yy1250 : { return 0; } - yy1251: + ++p; + yy1157 : { return 0; } + yy1158: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1285; + goto yy1184; if (yych == 'a') - goto yy1285; - goto yy1250; - yy1252: + goto yy1184; + goto yy1157; + yy1159: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'I') + goto yy1181; + if (yych == 'i') + goto yy1181; + goto yy1157; + yy1160: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1276; + goto yy1172; if (yych == 'a') - goto yy1276; - goto yy1250; - yy1253: + goto yy1172; + goto yy1157; + yy1161: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1269; - if (yych == 'b') - goto yy1269; - goto yy1250; - yy1254: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'I') - goto yy1264; - if (yych == 'i') - goto yy1264; - goto yy1250; - yy1255: - yych = *++p; - goto yy1250; - yy1256: + goto yy1162; + if (yych != 'b') + goto yy1157; + yy1162: yych = *++p; - if (yych <= 0x7F) - goto yy1257; - if (yych <= 0xBF) - goto yy1255; - yy1257: + if (yych == 'S') + goto yy1164; + if (yych == 's') + goto yy1164; + yy1163: p = marker; if (yyaccept == 0) { - goto yy1250; + goto yy1157; } else { - goto yy1268; + goto yy1171; } - yy1258: - yych = *++p; - if (yych <= 0x9F) - goto yy1257; - if (yych <= 0xBF) - goto yy1256; - goto yy1257; - yy1259: - yych = *++p; - if (yych <= 0x7F) - goto yy1257; - if (yych <= 0xBF) - goto yy1256; - goto yy1257; - yy1260: - yych = *++p; - if (yych <= 0x8F) - goto yy1257; - if (yych <= 0xBF) - goto yy1259; - goto yy1257; - yy1261: - yych = *++p; - if (yych <= 0x7F) - goto yy1257; - if (yych <= 0xBF) - goto yy1259; - goto yy1257; - yy1262: - yych = *++p; - if (yych <= 0x7F) - goto yy1257; - if (yych <= 0x8F) - goto yy1259; - goto yy1257; - yy1263: - yych = *++p; - if (yych <= 0x7F) - goto yy1257; - if (yych <= 0x9F) - goto yy1256; - goto yy1257; - yy1264: - yych = *++p; - if (yych == 'L') - goto yy1265; - if (yych != 'l') - goto yy1257; - yy1265: - yych = *++p; - if (yych == 'E') - goto yy1266; - if (yych != 'e') - goto yy1257; - yy1266: - yych = *++p; - if (yych != ':') - goto yy1257; - yy1267: - ++p; - yy1268 : { return (bufsize_t)(p - start); } - yy1269: - yych = *++p; - if (yych == 'S') - goto yy1270; - if (yych != 's') - goto yy1257; - yy1270: + yy1164: yych = *++p; if (yych == 'C') - goto yy1271; + goto yy1165; if (yych != 'c') - goto yy1257; - yy1271: + goto yy1163; + yy1165: yych = *++p; if (yych == 'R') - goto yy1272; + goto yy1166; if (yych != 'r') - goto yy1257; - yy1272: + goto yy1163; + yy1166: yych = *++p; if (yych == 'I') - goto yy1273; + goto yy1167; if (yych != 'i') - goto yy1257; - yy1273: + goto yy1163; + yy1167: yych = *++p; if (yych == 'P') - goto yy1274; + goto yy1168; if (yych != 'p') - goto yy1257; - yy1274: + goto yy1163; + yy1168: yych = *++p; if (yych == 'T') - goto yy1275; + goto yy1169; if (yych != 't') - goto yy1257; - yy1275: + goto yy1163; + yy1169: yych = *++p; - if (yych == ':') - goto yy1267; - goto yy1257; - yy1276: + if (yych != ':') + goto yy1163; + yy1170: + ++p; + yy1171 : { return (bufsize_t)(p - start); } + yy1172: yych = *++p; if (yych == 'V') - goto yy1277; + goto yy1173; if (yych != 'v') - goto yy1257; - yy1277: + goto yy1163; + yy1173: yych = *++p; if (yych == 'A') - goto yy1278; + goto yy1174; if (yych != 'a') - goto yy1257; - yy1278: + goto yy1163; + yy1174: yych = *++p; if (yych == 'S') - goto yy1279; + goto yy1175; if (yych != 's') - goto yy1257; - yy1279: + goto yy1163; + yy1175: yych = *++p; if (yych == 'C') - goto yy1280; + goto yy1176; if (yych != 'c') - goto yy1257; - yy1280: + goto yy1163; + yy1176: yych = *++p; if (yych == 'R') - goto yy1281; + goto yy1177; if (yych != 'r') - goto yy1257; - yy1281: + goto yy1163; + yy1177: yych = *++p; if (yych == 'I') - goto yy1282; + goto yy1178; if (yych != 'i') - goto yy1257; - yy1282: + goto yy1163; + yy1178: yych = *++p; if (yych == 'P') - goto yy1283; + goto yy1179; if (yych != 'p') - goto yy1257; - yy1283: + goto yy1163; + yy1179: yych = *++p; if (yych == 'T') - goto yy1284; + goto yy1180; if (yych != 't') - goto yy1257; - yy1284: + goto yy1163; + yy1180: + yych = *++p; + if (yych == ':') + goto yy1170; + goto yy1163; + yy1181: + yych = *++p; + if (yych == 'L') + goto yy1182; + if (yych != 'l') + goto yy1163; + yy1182: + yych = *++p; + if (yych == 'E') + goto yy1183; + if (yych != 'e') + goto yy1163; + yy1183: yych = *++p; if (yych == ':') - goto yy1267; - goto yy1257; - yy1285: + goto yy1170; + goto yy1163; + yy1184: yych = *++p; if (yych == 'T') - goto yy1286; + goto yy1185; if (yych != 't') - goto yy1257; - yy1286: + goto yy1163; + yy1185: yych = *++p; if (yych == 'A') - goto yy1287; + goto yy1186; if (yych != 'a') - goto yy1257; - yy1287: + goto yy1163; + yy1186: yych = *++p; if (yych != ':') - goto yy1257; + goto yy1163; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1289; + goto yy1188; if (yych != 'i') - goto yy1268; - yy1289: + goto yy1171; + yy1188: yych = *++p; if (yych == 'M') - goto yy1290; + goto yy1189; if (yych != 'm') - goto yy1257; - yy1290: + goto yy1163; + yy1189: yych = *++p; if (yych == 'A') - goto yy1291; + goto yy1190; if (yych != 'a') - goto yy1257; - yy1291: + goto yy1163; + yy1190: yych = *++p; if (yych == 'G') - goto yy1292; + goto yy1191; if (yych != 'g') - goto yy1257; - yy1292: + goto yy1163; + yy1191: yych = *++p; if (yych == 'E') - goto yy1293; + goto yy1192; if (yych != 'e') - goto yy1257; - yy1293: + goto yy1163; + yy1192: yych = *++p; if (yych != '/') - goto yy1257; + goto yy1163; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1296; + goto yy1195; if (yych <= 'I') - goto yy1257; - goto yy1297; + goto yy1163; + goto yy1196; } else { if (yych == 'P') - goto yy1295; + goto yy1194; if (yych <= 'V') - goto yy1257; - goto yy1298; + goto yy1163; + goto yy1197; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1296; + goto yy1195; if (yych <= 'i') - goto yy1257; - goto yy1297; + goto yy1163; + goto yy1196; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1257; + goto yy1163; } else { if (yych == 'w') - goto yy1298; - goto yy1257; + goto yy1197; + goto yy1163; } } } - yy1295: + yy1194: yych = *++p; if (yych == 'N') - goto yy1306; + goto yy1205; if (yych == 'n') - goto yy1306; - goto yy1257; - yy1296: + goto yy1205; + goto yy1163; + yy1195: yych = *++p; if (yych == 'I') - goto yy1305; + goto yy1204; if (yych == 'i') - goto yy1305; - goto yy1257; - yy1297: + goto yy1204; + goto yy1163; + yy1196: yych = *++p; if (yych == 'P') - goto yy1303; + goto yy1202; if (yych == 'p') - goto yy1303; - goto yy1257; - yy1298: + goto yy1202; + goto yy1163; + yy1197: yych = *++p; if (yych == 'E') - goto yy1299; + goto yy1198; if (yych != 'e') - goto yy1257; - yy1299: + goto yy1163; + yy1198: yych = *++p; if (yych == 'B') - goto yy1300; + goto yy1199; if (yych != 'b') - goto yy1257; - yy1300: + goto yy1163; + yy1199: yych = *++p; if (yych == 'P') - goto yy1301; + goto yy1200; if (yych != 'p') - goto yy1257; - yy1301: + goto yy1163; + yy1200: ++p; { return 0; } - yy1303: + yy1202: yych = *++p; if (yych == 'E') - goto yy1304; + goto yy1203; if (yych != 'e') - goto yy1257; - yy1304: + goto yy1163; + yy1203: yych = *++p; if (yych == 'G') - goto yy1301; + goto yy1200; if (yych == 'g') - goto yy1301; - goto yy1257; - yy1305: + goto yy1200; + goto yy1163; + yy1204: yych = *++p; if (yych == 'F') - goto yy1301; + goto yy1200; if (yych == 'f') - goto yy1301; - goto yy1257; - yy1306: + goto yy1200; + goto yy1163; + yy1205: ++p; if ((yych = *p) == 'G') - goto yy1301; + goto yy1200; if (yych == 'g') - goto yy1301; - goto yy1257; + goto yy1200; + goto yy1163; } } diff --git a/src/scanners.re b/src/scanners.re index 9296760e1f..099e82a707 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -81,7 +81,7 @@ bufsize_t _scan_scheme(const unsigned char *p) const unsigned char *start = p; /*!re2c scheme [:] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -92,7 +92,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) const unsigned char *start = p; /*!re2c scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -107,7 +107,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) [a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? ([.][a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)* [>] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -118,7 +118,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) const unsigned char *start = p; /*!re2c htmltag { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -135,7 +135,7 @@ bufsize_t _scan_html_block_start(const unsigned char *p) ']) { return 6; } - .? { return 0; } + * { return 0; } */ } @@ -146,7 +146,7 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) const unsigned char *marker = NULL; /*!re2c [<] (opentag | closetag) [\t\n\f ]* [\r\n] { return 7; } - .? { return 0; } + * { return 0; } */ } @@ -157,7 +157,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) const unsigned char *start = p; /*!re2c .* [<] [/] ('script'|'pre'|'style') [>] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -168,7 +168,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) const unsigned char *start = p; /*!re2c .* '-->' { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -179,7 +179,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) const unsigned char *start = p; /*!re2c .* '?>' { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -190,7 +190,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) const unsigned char *start = p; /*!re2c .* '>' { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -201,7 +201,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) const unsigned char *start = p; /*!re2c .* ']]>' { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -216,18 +216,17 @@ bufsize_t _scan_link_title(const unsigned char *p) ["] (escaped_char|[^"\x00])* ["] { return (bufsize_t)(p - start); } ['] (escaped_char|[^'\x00])* ['] { return (bufsize_t)(p - start); } [(] (escaped_char|[^)\x00])* [)] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } // Match space characters, including newlines. bufsize_t _scan_spacechars(const unsigned char *p) { - const unsigned char *marker = NULL; const unsigned char *start = p; \ /*!re2c - [ \t\v\f\r\n]* { return (bufsize_t)(p - start); } - . { return 0; } + [ \t\v\f\r\n]+ { return (bufsize_t)(p - start); } + * { return 0; } */ } @@ -238,7 +237,7 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) const unsigned char *start = p; /*!re2c [#]{1,6} ([ \t]+|[\r\n]) { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -250,7 +249,7 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) /*!re2c [=]+ [ \t]* [\r\n] { return 1; } [-]+ [ \t]* [\r\n] { return 2; } - .? { return 0; } + * { return 0; } */ } @@ -265,7 +264,7 @@ bufsize_t _scan_thematic_break(const unsigned char *p) ([*][ \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; } + * { return 0; } */ } @@ -277,7 +276,7 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) /*!re2c [`]{3,} / [^`\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } [~]{3,} / [^~\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -289,7 +288,7 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) /*!re2c [`]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); } [~]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -302,7 +301,7 @@ bufsize_t _scan_entity(const unsigned char *p) /*!re2c [&] ([#] ([Xx][A-Fa-f0-9]{1,8}|[0-9]{1,8}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;] { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } @@ -315,7 +314,7 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) /*!re2c 'data:image/' ('png'|'gif'|'jpeg'|'webp') { return 0; } 'javascript:' | 'vbscript:' | 'file:' | 'data:' { return (bufsize_t)(p - start); } - .? { return 0; } + * { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 847b501371c399d079af09ad6094d8f26ff2d0eb Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 5 Dec 2016 21:36:51 +0100 Subject: scanners.c generated with re2c 0.16 (68K smaller!). --- src/scanners.c | 17855 ++++++++++++++++++++++--------------------------------- 1 file changed, 7167 insertions(+), 10688 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index f20f191552..147b511289 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.15.3 */ +/* Generated by re2c 0.16 */ #include #include "chunk.h" #include "scanners.h" @@ -70,53 +70,58 @@ bufsize_t _scan_scheme(const unsigned char *p) { if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy9; + goto yy7; } else { if (yych != '/') - goto yy9; + goto yy7; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych >= 'A') - goto yy9; + goto yy7; } else { if (yych <= '`') goto yy6; if (yych <= 'z') - goto yy9; + goto yy7; } } yy6: p = marker; goto yy3; yy7: - ++p; - { return (bufsize_t)(p - start); } - yy9: yych = *++p; if (yych <= '9') { if (yych <= ',') { - if (yych != '+') - goto yy6; + if (yych == '+') + goto yy10; + goto yy6; } else { if (yych == '/') goto yy6; + goto yy10; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; + goto yy10; } else { if (yych <= '`') goto yy6; - if (yych >= '{') - goto yy6; + if (yych <= 'z') + goto yy10; + goto yy6; } } + yy8: + ++p; + { return (bufsize_t)(p - start); } + yy10: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -129,7 +134,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -151,7 +156,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -173,7 +178,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -195,7 +200,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -217,7 +222,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -239,7 +244,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -261,7 +266,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -283,7 +288,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -305,7 +310,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -327,7 +332,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -349,7 +354,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -371,7 +376,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -393,7 +398,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -415,7 +420,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -437,7 +442,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -459,7 +464,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -481,7 +486,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -503,7 +508,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -525,7 +530,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -547,7 +552,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -569,7 +574,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -591,7 +596,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -613,7 +618,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -635,7 +640,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -657,7 +662,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -679,7 +684,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -701,7 +706,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -723,7 +728,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -735,7 +740,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } ++p; if ((yych = *p) == ':') - goto yy7; + goto yy8; goto yy6; } } @@ -810,107 +815,176 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy48; + goto yy46; } else { if (yych != '/') - goto yy48; + goto yy46; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych >= 'A') - goto yy48; + goto yy46; } else { if (yych <= '`') goto yy45; if (yych <= 'z') - goto yy48; + goto yy46; } } yy45: p = marker; goto yy42; yy46: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy49; + goto yy45; + } else { + if (yych == '/') + goto yy45; + goto yy49; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + goto yy49; + } else { + if (yych <= '`') + goto yy45; + if (yych <= 'z') + goto yy49; + goto yy45; + } + } + yy47: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy46; + goto yy47; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '<') goto yy45; if (yych <= '>') - goto yy85; + goto yy50; goto yy45; } else { if (yych <= 0xDF) - goto yy78; + goto yy52; if (yych <= 0xE0) - goto yy79; - goto yy80; + goto yy53; + goto yy54; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy84; + goto yy55; if (yych <= 0xEF) - goto yy80; - goto yy81; + goto yy54; + goto yy56; } else { if (yych <= 0xF3) - goto yy82; + goto yy57; if (yych <= 0xF4) - goto yy83; + goto yy58; goto yy45; } } - yy48: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy46; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } + yy49: yych = *++p; if (yych <= '9') { if (yych <= ',') { - if (yych != '+') - goto yy45; + if (yych == '+') + goto yy59; + goto yy45; } else { if (yych == '/') goto yy45; + goto yy59; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; + goto yy59; } else { if (yych <= '`') goto yy45; - if (yych >= '{') - goto yy45; + if (yych <= 'z') + goto yy59; + goto yy45; } } + yy50: + ++p; + { return (bufsize_t)(p - start); } + yy52: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy47; + goto yy45; + yy53: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy45; + if (yych <= 0xBF) + goto yy52; + goto yy45; + yy54: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy52; + goto yy45; + yy55: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x9F) + goto yy52; + goto yy45; + yy56: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy45; + if (yych <= 0xBF) + goto yy54; + goto yy45; + yy57: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy54; + goto yy45; + yy58: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x8F) + goto yy54; + goto yy45; + yy59: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -923,7 +997,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -945,7 +1019,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -967,7 +1041,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -989,7 +1063,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1011,7 +1085,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1033,7 +1107,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1055,7 +1129,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1077,7 +1151,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1099,7 +1173,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1121,7 +1195,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1143,7 +1217,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1165,7 +1239,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1187,7 +1261,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1209,7 +1283,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1231,7 +1305,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1253,7 +1327,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1275,7 +1349,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1297,7 +1371,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1319,7 +1393,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1341,7 +1415,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1363,7 +1437,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1385,7 +1459,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1407,7 +1481,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1429,7 +1503,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1451,7 +1525,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1473,7 +1547,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1495,7 +1569,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1505,69 +1579,10 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { goto yy45; } } - yych = *++p; - if (yych == ':') - goto yy46; - goto yy45; - yy78: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy46; - goto yy45; - yy79: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy45; - if (yych <= 0xBF) - goto yy78; - goto yy45; - yy80: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy78; - goto yy45; - yy81: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy45; - if (yych <= 0xBF) - goto yy80; - goto yy45; - yy82: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy80; - goto yy45; - yy83: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x8F) - goto yy80; - goto yy45; - yy84: ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x9F) - goto yy78; + if ((yych = *p) == ':') + goto yy47; goto yy45; - yy85: - ++p; - { return (bufsize_t)(p - start); } } } @@ -1638,8109 +1653,4889 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= ',') { if (yych <= '"') { if (yych == '!') - goto yy95; + goto yy93; goto yy90; } else { if (yych <= '\'') - goto yy95; + goto yy93; if (yych <= ')') goto yy90; if (yych <= '+') - goto yy95; + goto yy93; goto yy90; } } else { if (yych <= '>') { if (yych <= '9') - goto yy95; + goto yy93; if (yych == '=') - goto yy95; + goto yy93; goto yy90; } else { if (yych <= 'Z') - goto yy95; + goto yy93; if (yych <= ']') goto yy90; if (yych <= '~') - goto yy95; + goto yy93; goto yy90; } } yy92: - yych = *++p; + ++p; + yych = *p; + yy93: + if (yybm[0 + yych] & 128) { + goto yy92; + } + if (yych <= '>') + goto yy94; + if (yych <= '@') + goto yy95; + yy94: + p = marker; + goto yy90; + yy95: + ++p; + yych = *p; if (yych <= '@') { if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy96; + goto yy94; + if (yych >= ':') + goto yy94; } else { if (yych <= 'Z') goto yy96; if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy96; + goto yy94; + if (yych >= '{') + goto yy94; } - yy93: - p = marker; - goto yy90; - yy94: + yy96: ++p; yych = *p; - yy95: - if (yybm[0 + yych] & 128) { - goto yy94; - } - if (yych <= '>') - goto yy93; - if (yych <= '@') - goto yy92; - goto yy93; - yy96: - yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy98; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; - if (yych >= ':') - goto yy93; + goto yy94; + if (yych <= '9') + goto yy98; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; + goto yy94; + goto yy98; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy98; + goto yy94; } } - yych = *++p; + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy101; + if (yych <= '/') + goto yy94; + goto yy102; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy102; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy102; + goto yy94; + } + } + yy98: + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; + goto yy94; if (yych <= '-') - goto yy227; - goto yy99; + goto yy101; + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy226; - goto yy93; + goto yy102; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy226; + goto yy94; + goto yy102; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy226; - goto yy93; + goto yy102; + goto yy94; } } - yy98: - yych = *++p; + yy99: + ++p; + { return (bufsize_t)(p - start); } + yy101: + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') - goto yy227; + goto yy103; if (yych <= '/') - goto yy93; - goto yy226; + goto yy94; + goto yy104; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; - goto yy226; + goto yy94; + goto yy104; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy226; - goto yy93; + goto yy104; + goto yy94; } } - yy99: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy102; - goto yy93; - } else { - if (yych <= 'Z') - goto yy102; - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy102; - goto yy93; - } - yy100: - ++p; - { return (bufsize_t)(p - start); } yy102: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy104; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; - if (yych >= ':') - goto yy93; + goto yy94; + if (yych <= '9') + goto yy104; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; + goto yy94; + goto yy104; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy104; + goto yy94; + } + } + yy103: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy105; + if (yych <= '/') + goto yy94; + goto yy106; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy106; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy106; + goto yy94; } } + yy104: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy106; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy105; - goto yy93; + goto yy106; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy105; + goto yy94; + goto yy106; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy105; - goto yy93; + goto yy106; + goto yy94; } } - yy104: + yy105: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy106; + goto yy107; if (yych <= '/') - goto yy93; + goto yy94; + goto yy108; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy108; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy108; + goto yy94; } } - yy105: + yy106: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy108; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy107; - goto yy93; + goto yy108; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy107; + goto yy94; + goto yy108; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy107; - goto yy93; + goto yy108; + goto yy94; } } - yy106: + yy107: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy108; + goto yy109; if (yych <= '/') - goto yy93; + goto yy94; + goto yy110; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy110; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy110; + goto yy94; } } - yy107: + yy108: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy110; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy109; - goto yy93; + goto yy110; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy109; + goto yy94; + goto yy110; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy109; - goto yy93; + goto yy110; + goto yy94; } } - yy108: + yy109: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy110; + goto yy111; if (yych <= '/') - goto yy93; + goto yy94; + goto yy112; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy112; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy112; + goto yy94; } } - yy109: + yy110: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy112; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy111; - goto yy93; + goto yy112; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy111; + goto yy94; + goto yy112; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy111; - goto yy93; + goto yy112; + goto yy94; } } - yy110: + yy111: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy112; + goto yy113; if (yych <= '/') - goto yy93; + goto yy94; + goto yy114; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy114; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy114; + goto yy94; } } - yy111: + yy112: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy114; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy113; - goto yy93; + goto yy114; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy113; + goto yy94; + goto yy114; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy113; - goto yy93; + goto yy114; + goto yy94; } } - yy112: + yy113: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy114; + goto yy115; if (yych <= '/') - goto yy93; + goto yy94; + goto yy116; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy116; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy116; + goto yy94; } } - yy113: + yy114: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy116; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy115; - goto yy93; + goto yy116; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy115; + goto yy94; + goto yy116; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy115; - goto yy93; + goto yy116; + goto yy94; } } - yy114: + yy115: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy116; + goto yy117; if (yych <= '/') - goto yy93; + goto yy94; + goto yy118; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy118; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy118; + goto yy94; } } - yy115: + yy116: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy118; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy117; - goto yy93; + goto yy118; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy117; + goto yy94; + goto yy118; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy117; - goto yy93; + goto yy118; + goto yy94; } } - yy116: + yy117: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy118; + goto yy119; if (yych <= '/') - goto yy93; + goto yy94; + goto yy120; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy120; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy120; + goto yy94; } } - yy117: + yy118: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy120; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy119; - goto yy93; + goto yy120; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy119; + goto yy94; + goto yy120; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy119; - goto yy93; + goto yy120; + goto yy94; } } - yy118: + yy119: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy120; + goto yy121; if (yych <= '/') - goto yy93; + goto yy94; + goto yy122; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy122; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy122; + goto yy94; } } - yy119: + yy120: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy122; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy121; - goto yy93; + goto yy122; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy121; + goto yy94; + goto yy122; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy121; - goto yy93; + goto yy122; + goto yy94; } } - yy120: + yy121: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy122; + goto yy123; if (yych <= '/') - goto yy93; + goto yy94; + goto yy124; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy124; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy124; + goto yy94; } } - yy121: + yy122: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy124; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy123; - goto yy93; + goto yy124; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy123; + goto yy94; + goto yy124; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy123; - goto yy93; + goto yy124; + goto yy94; } } - yy122: + yy123: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy124; + goto yy125; if (yych <= '/') - goto yy93; + goto yy94; + goto yy126; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy126; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy126; + goto yy94; } } - yy123: + yy124: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy126; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy125; - goto yy93; + goto yy126; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy125; + goto yy94; + goto yy126; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy125; - goto yy93; + goto yy126; + goto yy94; } } - yy124: + yy125: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy126; + goto yy127; if (yych <= '/') - goto yy93; + goto yy94; + goto yy128; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy128; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy128; + goto yy94; } } - yy125: + yy126: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy128; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy127; - goto yy93; + goto yy128; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy127; + goto yy94; + goto yy128; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy127; - goto yy93; + goto yy128; + goto yy94; } } - yy126: + yy127: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy128; + goto yy129; if (yych <= '/') - goto yy93; + goto yy94; + goto yy130; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy130; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy130; + goto yy94; } } - yy127: + yy128: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy130; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy129; - goto yy93; + goto yy130; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy129; + goto yy94; + goto yy130; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy129; - goto yy93; + goto yy130; + goto yy94; } } - yy128: + yy129: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy130; + goto yy131; if (yych <= '/') - goto yy93; + goto yy94; + goto yy132; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy132; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy132; + goto yy94; } } - yy129: + yy130: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy132; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy131; - goto yy93; + goto yy132; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy131; + goto yy94; + goto yy132; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy131; - goto yy93; + goto yy132; + goto yy94; } } - yy130: + yy131: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy132; + goto yy133; if (yych <= '/') - goto yy93; + goto yy94; + goto yy134; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy134; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy134; + goto yy94; } } - yy131: + yy132: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy134; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy133; - goto yy93; + goto yy134; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy133; + goto yy94; + goto yy134; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy133; - goto yy93; + goto yy134; + goto yy94; } } - yy132: + yy133: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy134; + goto yy135; if (yych <= '/') - goto yy93; + goto yy94; + goto yy136; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy136; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy136; + goto yy94; } } - yy133: + yy134: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy136; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy135; - goto yy93; + goto yy136; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy135; + goto yy94; + goto yy136; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy135; - goto yy93; + goto yy136; + goto yy94; } } - yy134: + yy135: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy136; + goto yy137; if (yych <= '/') - goto yy93; + goto yy94; + goto yy138; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy138; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy138; + goto yy94; } } - yy135: + yy136: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy138; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy137; - goto yy93; + goto yy138; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy137; + goto yy94; + goto yy138; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy137; - goto yy93; + goto yy138; + goto yy94; } } - yy136: + yy137: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy138; + goto yy139; if (yych <= '/') - goto yy93; + goto yy94; + goto yy140; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy140; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy140; + goto yy94; } } - yy137: + yy138: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy140; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy139; - goto yy93; + goto yy140; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy139; + goto yy94; + goto yy140; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy139; - goto yy93; + goto yy140; + goto yy94; } } - yy138: + yy139: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy140; + goto yy141; if (yych <= '/') - goto yy93; + goto yy94; + goto yy142; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy142; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy142; + goto yy94; } } - yy139: + yy140: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy142; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy141; - goto yy93; + goto yy142; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy141; + goto yy94; + goto yy142; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy141; - goto yy93; + goto yy142; + goto yy94; } } - yy140: + yy141: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy142; + goto yy143; if (yych <= '/') - goto yy93; + goto yy94; + goto yy144; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy144; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy144; + goto yy94; } } - yy141: + yy142: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy144; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy143; - goto yy93; + goto yy144; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy143; + goto yy94; + goto yy144; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy143; - goto yy93; + goto yy144; + goto yy94; } } - yy142: + yy143: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy144; + goto yy145; if (yych <= '/') - goto yy93; + goto yy94; + goto yy146; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy146; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy146; + goto yy94; } } - yy143: + yy144: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy146; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy145; - goto yy93; + goto yy146; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy145; + goto yy94; + goto yy146; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy145; - goto yy93; + goto yy146; + goto yy94; } } - yy144: + yy145: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy146; + goto yy147; if (yych <= '/') - goto yy93; + goto yy94; + goto yy148; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy148; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy148; + goto yy94; } } - yy145: + yy146: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy148; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy147; - goto yy93; + goto yy148; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy147; + goto yy94; + goto yy148; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy147; - goto yy93; + goto yy148; + goto yy94; } } - yy146: + yy147: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy148; + goto yy149; if (yych <= '/') - goto yy93; + goto yy94; + goto yy150; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy150; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy150; + goto yy94; } } - yy147: + yy148: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy150; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy149; - goto yy93; + goto yy150; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy149; + goto yy94; + goto yy150; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy149; - goto yy93; + goto yy150; + goto yy94; } } - yy148: + yy149: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy150; + goto yy151; if (yych <= '/') - goto yy93; + goto yy94; + goto yy152; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy152; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy152; + goto yy94; } } - yy149: + yy150: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy152; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy151; - goto yy93; + goto yy152; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy151; + goto yy94; + goto yy152; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy151; - goto yy93; + goto yy152; + goto yy94; } } - yy150: + yy151: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy152; + goto yy153; if (yych <= '/') - goto yy93; + goto yy94; + goto yy154; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy154; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy154; + goto yy94; } } - yy151: + yy152: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy154; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy153; - goto yy93; + goto yy154; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy153; + goto yy94; + goto yy154; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy153; - goto yy93; + goto yy154; + goto yy94; } } - yy152: + yy153: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy154; + goto yy155; if (yych <= '/') - goto yy93; + goto yy94; + goto yy156; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy156; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy156; + goto yy94; } } - yy153: + yy154: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy156; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy155; - goto yy93; + goto yy156; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy155; + goto yy94; + goto yy156; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy155; - goto yy93; + goto yy156; + goto yy94; } } - yy154: + yy155: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy156; + goto yy157; if (yych <= '/') - goto yy93; + goto yy94; + goto yy158; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy158; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy158; + goto yy94; } } - yy155: + yy156: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy158; - goto yy99; - } else { + goto yy94; + if (yych >= '.') + goto yy95; + } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy157; - goto yy93; + goto yy158; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy157; + goto yy94; + goto yy158; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy157; - goto yy93; + goto yy158; + goto yy94; } } - yy156: + yy157: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy158; + goto yy159; if (yych <= '/') - goto yy93; + goto yy94; + goto yy160; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy160; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy160; + goto yy94; } } - yy157: + yy158: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy160; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy159; - goto yy93; + goto yy160; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy159; + goto yy94; + goto yy160; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy159; - goto yy93; + goto yy160; + goto yy94; } } - yy158: + yy159: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy160; + goto yy161; if (yych <= '/') - goto yy93; + goto yy94; + goto yy162; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy162; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy162; + goto yy94; } } - yy159: + yy160: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy162; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy161; - goto yy93; + goto yy162; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy161; + goto yy94; + goto yy162; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy161; - goto yy93; + goto yy162; + goto yy94; } } - yy160: + yy161: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy162; + goto yy163; if (yych <= '/') - goto yy93; + goto yy94; + goto yy164; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy164; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy164; + goto yy94; } } - yy161: + yy162: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy164; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy163; - goto yy93; + goto yy164; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy163; + goto yy94; + goto yy164; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy163; - goto yy93; + goto yy164; + goto yy94; } } - yy162: + yy163: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy164; + goto yy165; if (yych <= '/') - goto yy93; + goto yy94; + goto yy166; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy166; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy166; + goto yy94; } } - yy163: + yy164: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy166; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy165; - goto yy93; + goto yy166; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy165; + goto yy94; + goto yy166; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy165; - goto yy93; + goto yy166; + goto yy94; } } - yy164: + yy165: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy166; + goto yy167; if (yych <= '/') - goto yy93; + goto yy94; + goto yy168; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy168; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy168; + goto yy94; } } - yy165: + yy166: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy168; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy167; - goto yy93; + goto yy168; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy167; + goto yy94; + goto yy168; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy167; - goto yy93; + goto yy168; + goto yy94; } } - yy166: + yy167: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy168; + goto yy169; if (yych <= '/') - goto yy93; + goto yy94; + goto yy170; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy170; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy170; + goto yy94; } } - yy167: + yy168: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy170; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy169; - goto yy93; + goto yy170; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy169; + goto yy94; + goto yy170; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy169; - goto yy93; + goto yy170; + goto yy94; } } - yy168: + yy169: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy170; + goto yy171; if (yych <= '/') - goto yy93; + goto yy94; + goto yy172; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy172; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy172; + goto yy94; } } - yy169: + yy170: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy172; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy171; - goto yy93; + goto yy172; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy171; + goto yy94; + goto yy172; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy171; - goto yy93; + goto yy172; + goto yy94; } } - yy170: + yy171: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy172; + goto yy173; if (yych <= '/') - goto yy93; + goto yy94; + goto yy174; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy174; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy174; + goto yy94; } } - yy171: + yy172: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy174; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy173; - goto yy93; + goto yy174; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy173; + goto yy94; + goto yy174; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy173; - goto yy93; + goto yy174; + goto yy94; } } - yy172: + yy173: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy174; + goto yy175; if (yych <= '/') - goto yy93; + goto yy94; + goto yy176; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy176; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy176; + goto yy94; } } - yy173: + yy174: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy176; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy175; - goto yy93; + goto yy176; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy175; + goto yy94; + goto yy176; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy175; - goto yy93; + goto yy176; + goto yy94; } } - yy174: + yy175: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy176; + goto yy177; if (yych <= '/') - goto yy93; + goto yy94; + goto yy178; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy178; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy178; + goto yy94; } } - yy175: + yy176: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy178; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy177; - goto yy93; + goto yy178; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy177; + goto yy94; + goto yy178; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy177; - goto yy93; + goto yy178; + goto yy94; } } - yy176: + yy177: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy178; + goto yy179; if (yych <= '/') - goto yy93; + goto yy94; + goto yy180; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy180; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy180; + goto yy94; } } - yy177: + yy178: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy180; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy179; - goto yy93; + goto yy180; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy179; + goto yy94; + goto yy180; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy179; - goto yy93; + goto yy180; + goto yy94; } } - yy178: + yy179: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy180; + goto yy181; if (yych <= '/') - goto yy93; + goto yy94; + goto yy182; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy182; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy182; + goto yy94; } } - yy179: + yy180: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy182; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy181; - goto yy93; + goto yy182; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy181; + goto yy94; + goto yy182; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy181; - goto yy93; + goto yy182; + goto yy94; } } - yy180: + yy181: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy182; + goto yy183; if (yych <= '/') - goto yy93; + goto yy94; + goto yy184; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy184; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy184; + goto yy94; } } - yy181: + yy182: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy184; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy183; - goto yy93; + goto yy184; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy183; + goto yy94; + goto yy184; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy183; - goto yy93; + goto yy184; + goto yy94; } } - yy182: + yy183: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy184; + goto yy185; if (yych <= '/') - goto yy93; + goto yy94; + goto yy186; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy186; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy186; + goto yy94; } } - yy183: + yy184: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy186; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy185; - goto yy93; + goto yy186; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy185; + goto yy94; + goto yy186; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy185; - goto yy93; + goto yy186; + goto yy94; } } - yy184: + yy185: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy186; + goto yy187; if (yych <= '/') - goto yy93; + goto yy94; + goto yy188; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy188; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy188; + goto yy94; } } - yy185: + yy186: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy188; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy187; - goto yy93; + goto yy188; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy187; + goto yy94; + goto yy188; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy187; - goto yy93; + goto yy188; + goto yy94; } } - yy186: + yy187: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy188; + goto yy189; if (yych <= '/') - goto yy93; + goto yy94; + goto yy190; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy190; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy190; + goto yy94; } } - yy187: + yy188: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy190; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy189; - goto yy93; + goto yy190; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy189; + goto yy94; + goto yy190; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy189; - goto yy93; + goto yy190; + goto yy94; } } - yy188: + yy189: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy190; + goto yy191; if (yych <= '/') - goto yy93; + goto yy94; + goto yy192; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy192; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy192; + goto yy94; } } - yy189: + yy190: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy192; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy191; - goto yy93; + goto yy192; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy191; + goto yy94; + goto yy192; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy191; - goto yy93; + goto yy192; + goto yy94; } } - yy190: + yy191: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy192; + goto yy193; if (yych <= '/') - goto yy93; + goto yy94; + goto yy194; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy194; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy194; + goto yy94; } } - yy191: + yy192: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy194; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy193; - goto yy93; + goto yy194; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy193; + goto yy94; + goto yy194; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy193; - goto yy93; + goto yy194; + goto yy94; } } - yy192: + yy193: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy194; + goto yy195; if (yych <= '/') - goto yy93; + goto yy94; + goto yy196; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy196; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy196; + goto yy94; } } - yy193: + yy194: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy196; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy195; - goto yy93; + goto yy196; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy195; + goto yy94; + goto yy196; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy195; - goto yy93; + goto yy196; + goto yy94; } } - yy194: + yy195: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy196; + goto yy197; if (yych <= '/') - goto yy93; + goto yy94; + goto yy198; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy198; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy198; + goto yy94; } } - yy195: + yy196: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy198; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy197; - goto yy93; + goto yy198; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy197; + goto yy94; + goto yy198; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy197; - goto yy93; + goto yy198; + goto yy94; } } - yy196: + yy197: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy198; + goto yy199; if (yych <= '/') - goto yy93; + goto yy94; + goto yy200; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy200; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy200; + goto yy94; } } - yy197: + yy198: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy200; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy199; - goto yy93; + goto yy200; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy199; + goto yy94; + goto yy200; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy199; - goto yy93; + goto yy200; + goto yy94; } } - yy198: + yy199: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy200; + goto yy201; if (yych <= '/') - goto yy93; + goto yy94; + goto yy202; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy202; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy202; + goto yy94; } } - yy199: + yy200: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy202; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy201; - goto yy93; + goto yy202; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy201; + goto yy94; + goto yy202; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy201; - goto yy93; + goto yy202; + goto yy94; } } - yy200: + yy201: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy202; + goto yy203; if (yych <= '/') - goto yy93; + goto yy94; + goto yy204; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy204; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy204; + goto yy94; } } - yy201: + yy202: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy204; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy203; - goto yy93; + goto yy204; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy203; + goto yy94; + goto yy204; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy203; - goto yy93; + goto yy204; + goto yy94; } } - yy202: + yy203: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy204; + goto yy205; if (yych <= '/') - goto yy93; + goto yy94; + goto yy206; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy206; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy206; + goto yy94; } } - yy203: + yy204: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy206; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy205; - goto yy93; + goto yy206; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy205; + goto yy94; + goto yy206; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy205; - goto yy93; + goto yy206; + goto yy94; } } - yy204: + yy205: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy206; + goto yy207; if (yych <= '/') - goto yy93; + goto yy94; + goto yy208; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy208; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy208; + goto yy94; } } - yy205: + yy206: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy208; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy207; - goto yy93; + goto yy208; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy207; + goto yy94; + goto yy208; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy207; - goto yy93; + goto yy208; + goto yy94; } } - yy206: + yy207: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy208; + goto yy209; if (yych <= '/') - goto yy93; + goto yy94; + goto yy210; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy210; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy210; + goto yy94; } } - yy207: + yy208: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy210; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy209; - goto yy93; + goto yy210; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy209; + goto yy94; + goto yy210; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy209; - goto yy93; + goto yy210; + goto yy94; } } - yy208: + yy209: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy210; + goto yy211; if (yych <= '/') - goto yy93; + goto yy94; + goto yy212; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy212; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy212; + goto yy94; } } - yy209: + yy210: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy212; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy211; - goto yy93; + goto yy212; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy211; + goto yy94; + goto yy212; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy211; - goto yy93; + goto yy212; + goto yy94; } } - yy210: + yy211: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy212; + goto yy213; if (yych <= '/') - goto yy93; + goto yy94; + goto yy214; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy214; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy214; + goto yy94; } } - yy211: + yy212: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy214; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy213; - goto yy93; + goto yy214; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy213; + goto yy94; + goto yy214; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy213; - goto yy93; + goto yy214; + goto yy94; } } - yy212: + yy213: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy214; + goto yy215; if (yych <= '/') - goto yy93; + goto yy94; + goto yy216; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy216; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy216; + goto yy94; } } - yy213: + yy214: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy216; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy215; - goto yy93; + goto yy216; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy215; + goto yy94; + goto yy216; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy215; - goto yy93; + goto yy216; + goto yy94; } } - yy214: + yy215: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy216; + goto yy217; if (yych <= '/') - goto yy93; + goto yy94; + goto yy218; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy218; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy218; + goto yy94; } } - yy215: + yy216: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy218; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy217; - goto yy93; + goto yy218; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy217; + goto yy94; + goto yy218; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy217; - goto yy93; + goto yy218; + goto yy94; } } - yy216: + yy217: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy218; + goto yy219; if (yych <= '/') - goto yy93; + goto yy94; + goto yy220; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy220; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy220; + goto yy94; } } - yy217: + yy218: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy220; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy219; - goto yy93; + goto yy220; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy219; + goto yy94; + goto yy220; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy219; - goto yy93; + goto yy220; + goto yy94; } } - yy218: + yy219: ++p; yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy220; + if (yych <= '@') { if (yych <= '/') - goto yy93; + goto yy94; + if (yych <= '9') + goto yy221; + goto yy94; } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } + if (yych <= 'Z') + goto yy221; + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy221; + goto yy94; } - yy219: + yy220: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') - goto yy93; if (yych <= '-') - goto yy222; - goto yy99; + goto yy94; + goto yy95; } else { if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy221; - goto yy93; + goto yy94; + if (yych >= ':') + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy221; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy221; - goto yy93; - } - } - yy220: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy222; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { + goto yy99; if (yych <= '@') - goto yy93; + goto yy94; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych >= '{') - goto yy93; + goto yy94; } } yy221: ++p; yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy224; - goto yy99; + if (yych == '.') + goto yy95; + if (yych == '>') + goto yy99; + goto yy94; + } +} + +// Try to match an HTML tag after first <, returning num of chars matched. +bufsize_t _scan_html_tag(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + /* table 1 .. 8: 0 */ + 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250, + 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* table 9 .. 11: 256 */ + 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 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, + }; + yych = *p; + if (yych <= '>') { + if (yych <= '!') { + if (yych >= '!') + goto yy226; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy223; - goto yy93; + if (yych == '/') + goto yy227; } } else { if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy223; + if (yych <= '?') + goto yy228; + if (yych >= 'A') + goto yy229; } else { if (yych <= '`') - goto yy93; + goto yy224; if (yych <= 'z') - goto yy223; - goto yy93; + goto yy229; } } - yy222: + yy224: ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy224; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } + yy225 : { return 0; } + yy226: + yych = *(marker = ++p); + if (yybm[256 + yych] & 32) { + goto yy232; + } + if (yych == '-') + goto yy230; + if (yych <= '@') + goto yy225; + if (yych <= '[') + goto yy234; + goto yy225; + yy227: + yych = *(marker = ++p); + if (yych <= '@') + goto yy225; + if (yych <= 'Z') + goto yy235; + if (yych <= '`') + goto yy225; + if (yych <= 'z') + goto yy235; + goto yy225; + yy228: + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy225; + if (yych <= 0x7F) + goto yy238; + if (yych <= 0xC1) + goto yy225; + if (yych <= 0xF4) + goto yy238; + goto yy225; + yy229: + yych = *(marker = ++p); + if (yybm[0 + yych] & 1) { + goto yy247; } - yy223: - ++p; - yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= '-') - goto yy93; - goto yy99; + if (yych == '-') + goto yy249; + goto yy225; } else { if (yych <= '/') - goto yy93; + goto yy251; if (yych <= '9') - goto yy225; - goto yy93; + goto yy249; + goto yy225; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy252; if (yych <= '@') - goto yy93; - goto yy225; + goto yy225; + goto yy249; } else { if (yych <= '`') - goto yy93; - if (yych <= 'z') goto yy225; - goto yy93; + if (yych <= 'z') + goto yy249; + goto yy225; } } - yy224: + yy230: + yych = *++p; + if (yych == '-') + goto yy254; + yy231: + p = marker; + goto yy225; + yy232: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy93; - if (yych >= ':') - goto yy93; + if (yybm[256 + yych] & 32) { + goto yy232; + } + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy255; + if (yych == ' ') + goto yy255; + goto yy231; + yy234: + yych = *++p; + if (yych == 'C') + goto yy257; + if (yych == 'c') + goto yy257; + goto yy231; + yy235: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy235; + } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy258; + goto yy231; } else { - if (yych <= 'Z') - goto yy225; - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + if (yych <= ' ') + goto yy258; + if (yych == '>') + goto yy252; + goto yy231; } - yy225: + yy237: ++p; yych = *p; - if (yych == '.') - goto yy99; - if (yych == '>') - goto yy100; - goto yy93; - yy226: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy229; - goto yy99; + yy238: + if (yybm[256 + yych] & 128) { + goto yy237; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych >= '@') + goto yy231; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy228; - goto yy93; + if (yych <= 0xDF) + goto yy240; + if (yych <= 0xE0) + goto yy241; + goto yy242; } } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy228; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy228; - goto yy93; - } - } - yy227: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy229; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy243; + if (yych <= 0xEF) + goto yy242; + goto yy244; } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + if (yych <= 0xF3) + goto yy245; + if (yych <= 0xF4) + goto yy246; + goto yy231; } } - yy228: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy231; - goto yy99; + if (yych <= '=') + goto yy237; + goto yy252; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy230; - goto yy93; + if (yych <= 0x7F) + goto yy237; + if (yych <= 0xC1) + goto yy231; + if (yych >= 0xE0) + goto yy241; } } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy230; + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy243; + goto yy242; } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy230; - goto yy93; - } - } - yy229: - yych = *++p; - if (yych <= '9') { - if (yych == '-') + if (yych <= 0xF0) + goto yy244; + if (yych <= 0xF3) + goto yy245; + if (yych <= 0xF4) + goto yy246; goto yy231; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; } } - yy230: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy233; - goto yy99; + yy240: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy237; + goto yy231; + yy241: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy240; + goto yy231; + yy242: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy240; + goto yy231; + yy243: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy240; + goto yy231; + yy244: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy242; + goto yy231; + yy245: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy242; + goto yy231; + yy246: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy242; + goto yy231; + yy247: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '>') { + if (yych <= '9') { + if (yych == '/') + goto yy251; + goto yy231; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy232; - goto yy93; + if (yych <= ':') + goto yy260; + if (yych <= '=') + goto yy231; + goto yy252; } } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; + if (yych <= '^') { if (yych <= '@') - goto yy93; - goto yy232; + goto yy231; + if (yych <= 'Z') + goto yy260; + goto yy231; } else { - if (yych <= '`') - goto yy93; + if (yych == '`') + goto yy231; if (yych <= 'z') - goto yy232; - goto yy93; + goto yy260; + goto yy231; } } - yy231: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy233; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } + yy249: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy247; } - yy232: - yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy235; - goto yy99; + if (yych == '-') + goto yy249; + goto yy231; } else { if (yych <= '/') - goto yy93; + goto yy251; if (yych <= '9') - goto yy234; - goto yy93; + goto yy249; + goto yy231; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy252; if (yych <= '@') - goto yy93; - goto yy234; + goto yy231; + goto yy249; } else { if (yych <= '`') - goto yy93; + goto yy231; if (yych <= 'z') - goto yy234; - goto yy93; + goto yy249; + goto yy231; } } - yy233: + yy251: yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy235; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy234: + if (yych != '>') + goto yy231; + yy252: + ++p; + { return (bufsize_t)(p - start); } + yy254: yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy237; - goto yy99; + if (yych == '-') + goto yy264; + if (yych == '>') + goto yy231; + goto yy263; + yy255: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy255; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '>') + goto yy252; + goto yy231; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy236; - goto yy93; + if (yych <= 0xDF) + goto yy272; + if (yych <= 0xE0) + goto yy273; + goto yy274; } } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy236; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy275; + if (yych <= 0xEF) + goto yy274; + goto yy276; } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy236; - goto yy93; - } - } - yy235: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy237; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy236: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy239; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy238; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy238; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy238; - goto yy93; - } - } - yy237: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy239; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy238: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy241; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy240; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy240; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy240; - goto yy93; - } - } - yy239: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy241; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy240: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy243; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy242; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy242; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy242; - goto yy93; - } - } - yy241: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy243; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy242: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy245; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy244; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy244; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy244; - goto yy93; - } - } - yy243: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy245; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy244: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy247; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy246; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy246; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy246; - goto yy93; - } - } - yy245: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy247; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy246: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy249; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy248; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy248; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy248; - goto yy93; - } - } - yy247: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy249; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy248: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy251; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy250; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy250; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy250; - goto yy93; - } - } - yy249: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy251; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy250: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy253; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy252; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy252; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy252; - goto yy93; - } - } - yy251: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy253; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy252: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy255; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy254; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy254; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy254; - goto yy93; - } - } - yy253: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy255; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy254: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy257; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy256; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy256; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy256; - goto yy93; - } - } - yy255: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy257; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy256: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy259; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy258; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy258; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy258; - goto yy93; - } - } - yy257: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy259; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy258: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy261; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy260; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy260; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy260; - goto yy93; - } - } - yy259: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy261; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy260: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy263; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy262; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy262; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy262; - goto yy93; - } - } - yy261: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy263; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy262: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy265; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy264; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy264; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy264; - goto yy93; - } - } - yy263: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy265; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy264: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy267; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy266; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy266; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy266; - goto yy93; - } - } - yy265: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy267; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy266: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy269; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy268; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy268; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy268; - goto yy93; - } - } - yy267: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy269; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy268: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy271; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy270; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy270; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy270; - goto yy93; - } - } - yy269: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy271; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy270: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy273; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy272; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy272; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy272; - goto yy93; - } - } - yy271: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy273; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy272: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy275; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy274; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy274; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy274; - goto yy93; - } - } - yy273: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy275; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy274: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy277; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy276; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy276; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy276; - goto yy93; - } - } - yy275: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy277; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy276: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy279; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy278; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy278; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy278; - goto yy93; - } - } - yy277: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy279; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy278: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy281; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy280; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy280; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy280; - goto yy93; - } - } - yy279: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy281; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy280: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy283; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy282; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy282; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy282; - goto yy93; - } - } - yy281: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy283; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy282: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy285; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy284; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy284; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy284; - goto yy93; - } - } - yy283: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy285; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy284: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy287; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy286; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy286; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy286; - goto yy93; - } - } - yy285: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy287; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy286: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy289; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy288; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy288; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy288; - goto yy93; - } - } - yy287: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy289; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy288: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy291; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy290; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy290; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy290; - goto yy93; - } - } - yy289: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy291; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy290: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy293; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy292; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy292; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy292; - goto yy93; - } - } - yy291: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy293; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy292: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy295; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy294; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy294; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy294; - goto yy93; - } - } - yy293: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy295; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy294: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy297; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy296; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy296; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy296; - goto yy93; - } - } - yy295: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy297; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy296: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy299; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy298; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy298; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy298; - goto yy93; - } - } - yy297: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy299; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy298: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy301; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy300; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy300; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy300; - goto yy93; - } - } - yy299: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy301; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy300: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy303; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy302; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy302; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy302; - goto yy93; - } - } - yy301: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy303; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy302: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy305; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy304; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy304; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy304; - goto yy93; - } - } - yy303: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy305; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy304: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy307; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy306; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy306; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy306; - goto yy93; - } - } - yy305: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy307; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy306: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy309; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy308; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy308; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy308; - goto yy93; - } - } - yy307: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy309; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy308: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy311; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy310; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy310; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy310; - goto yy93; - } - } - yy309: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy311; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy310: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy313; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy312; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy312; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy312; - goto yy93; - } - } - yy311: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy313; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy312: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy315; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy314; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy314; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy314; - goto yy93; - } - } - yy313: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy315; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy314: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy317; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy316; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy316; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy316; - goto yy93; - } - } - yy315: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy317; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy316: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy319; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy318; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy318; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy318; - goto yy93; - } - } - yy317: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy319; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy318: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy321; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy320; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy320; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy320; - goto yy93; - } - } - yy319: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy321; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy320: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy323; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy322; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy322; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy322; - goto yy93; - } - } - yy321: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy323; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy322: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy325; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy324; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy324; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy324; - goto yy93; - } - } - yy323: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy325; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy324: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy327; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy326; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy326; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy326; - goto yy93; - } - } - yy325: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy327; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy326: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy329; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy328; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy328; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy328; - goto yy93; - } - } - yy327: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy329; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy328: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy331; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy330; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy330; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy330; - goto yy93; - } - } - yy329: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy331; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy330: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy333; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy332; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy332; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy332; - goto yy93; - } - } - yy331: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy333; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy332: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy335; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy334; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy334; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy334; - goto yy93; - } - } - yy333: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy335; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy334: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy337; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy336; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy336; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy336; - goto yy93; - } - } - yy335: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy337; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy336: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy339; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy338; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy338; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy338; - goto yy93; - } - } - yy337: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy339; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy338: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy341; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy340; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy340; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy340; - goto yy93; - } - } - yy339: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy341; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy340: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy343; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy342; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy342; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy342; - goto yy93; - } - } - yy341: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy343; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy342: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy345; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy344; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy344; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy344; - goto yy93; - } - } - yy343: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy345; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy344: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= '-') - goto yy93; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy225; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy225; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy225; - goto yy93; - } - } - yy345: - ++p; - if ((yych = *p) <= '@') { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy225; - goto yy93; - } else { - if (yych <= 'Z') - goto yy225; - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy225; - goto yy93; - } - } -} - -// Try to match an HTML tag after first <, returning num of chars matched. -bufsize_t _scan_html_tag(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - /* table 1 .. 8: 0 */ - 0, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238, 238, 238, 238, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 238, 239, 234, 239, 239, 239, 239, 236, 239, 239, 239, - 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 238, 238, 174, 231, 239, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 239, 239, 111, 239, 239, 238, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* table 9 .. 11: 256 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 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, - 160, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 128, 0, - 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 0, 0, 0, 0, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; - if (yych <= '>') { - if (yych <= '!') { - if (yych >= '!') - goto yy350; - } else { - if (yych == '/') - goto yy351; - } - } else { - if (yych <= 'Z') { - if (yych <= '?') - goto yy352; - if (yych >= 'A') - goto yy353; - } else { - if (yych <= '`') - goto yy348; - if (yych <= 'z') - goto yy353; - } - } - yy348: - ++p; - yy349 : { return 0; } - yy350: - yych = *(marker = ++p); - if (yybm[0 + yych] & 16) { - goto yy426; - } - if (yych == '-') - goto yy428; - if (yych <= '@') - goto yy349; - if (yych <= '[') - goto yy425; - goto yy349; - yy351: - yych = *(marker = ++p); - if (yych <= '@') - goto yy349; - if (yych <= 'Z') - goto yy421; - if (yych <= '`') - goto yy349; - if (yych <= 'z') - goto yy421; - goto yy349; - yy352: - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy349; - if (yych <= 0x7F) - goto yy405; - if (yych <= 0xC1) - goto yy349; - if (yych <= 0xF4) - goto yy405; - goto yy349; - yy353: - yych = *(marker = ++p); - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych != '-') - goto yy349; - } else { - if (yych <= '/') - goto yy359; - if (yych >= ':') - goto yy349; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy360; - if (yych <= '@') - goto yy349; - } else { - if (yych <= '`') - goto yy349; - if (yych >= '{') - goto yy349; - } - } - yy354: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy354; - } else { - if (yych <= '/') - goto yy359; - if (yych <= '9') - goto yy354; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy360; - if (yych >= 'A') - goto yy354; - } else { - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy354; - } - } - yy356: - p = marker; - goto yy349; - yy357: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych <= '>') { - if (yych <= '9') { - if (yych != '/') - goto yy356; - } else { - if (yych <= ':') - goto yy362; - if (yych <= '=') - goto yy356; - goto yy360; - } - } else { - if (yych <= '^') { - if (yych <= '@') - goto yy356; - if (yych <= 'Z') - goto yy362; - goto yy356; - } else { - if (yych == '`') - goto yy356; - if (yych <= 'z') - goto yy362; - goto yy356; - } - } - yy359: - yych = *++p; - if (yych != '>') - goto yy356; - yy360: - ++p; - { return (bufsize_t)(p - start); } - yy362: - ++p; - yych = *p; - if (yybm[256 + yych] & 128) { - goto yy362; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy356; - } else { - if (yych != ' ') - goto yy356; - } - } else { - if (yych <= '<') { - if (yych <= '/') - goto yy359; - goto yy356; - } else { - if (yych <= '=') - goto yy366; - if (yych <= '>') - goto yy360; - goto yy356; - } - } - yy364: - ++p; - yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy356; - if (yych <= '\r') - goto yy364; - if (yych <= 0x1F) - goto yy356; - goto yy364; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy356; - goto yy359; - } else { - if (yych == ':') - goto yy362; - goto yy356; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') - goto yy366; - if (yych <= '>') - goto yy360; - if (yych <= '@') - goto yy356; - goto yy362; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy356; - goto yy362; - } else { - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy362; - goto yy356; - } - } - } - yy366: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy368; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) - goto yy356; - if (yych >= '!') - goto yy379; - } else { - if (yych <= '\'') - goto yy377; - if (yych <= 0xC1) - goto yy356; - if (yych <= 0xDF) - goto yy370; - goto yy371; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy368; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) - goto yy356; - if (yych <= ' ') - goto yy402; - if (yych <= '"') - goto yy379; - goto yy377; - } else { - if (yych == '>') - goto yy360; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } - yy368: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy368; - } - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy356; - if (yych <= ' ') - goto yy396; - goto yy356; - } else { - if (yych <= '>') - goto yy360; - if (yych <= 0xC1) - goto yy356; - if (yych >= 0xE0) - goto yy371; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } - yy370: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy368; - goto yy356; - yy371: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy370; - goto yy356; - yy372: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy370; - goto yy356; - yy373: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy372; - goto yy356; - yy374: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy372; - goto yy356; - yy375: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy372; - goto yy356; - yy376: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy370; - goto yy356; - yy377: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy377; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= '\'') - goto yy388; - goto yy356; - } else { - if (yych <= 0xDF) - goto yy389; - if (yych <= 0xE0) - goto yy390; - goto yy391; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy395; - if (yych <= 0xEF) - goto yy391; - goto yy392; - } else { - if (yych <= 0xF3) - goto yy393; - if (yych <= 0xF4) - goto yy394; - goto yy356; - } - } - yy379: - ++p; - yych = *p; - if (yybm[0 + yych] & 4) { - goto yy379; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= '"') - goto yy388; - goto yy356; - } else { - if (yych <= 0xDF) - goto yy381; - if (yych <= 0xE0) - goto yy382; - goto yy383; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy387; - if (yych <= 0xEF) - goto yy383; - goto yy384; - } else { - if (yych <= 0xF3) - goto yy385; - if (yych <= 0xF4) - goto yy386; - goto yy356; - } - } - yy381: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy379; - goto yy356; - yy382: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy381; - goto yy356; - yy383: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy381; - goto yy356; - yy384: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy383; - goto yy356; - yy385: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy383; - goto yy356; - yy386: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy383; - goto yy356; - yy387: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy381; - goto yy356; - yy388: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych == '/') - goto yy359; - if (yych == '>') - goto yy360; - goto yy356; - yy389: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy377; - goto yy356; - yy390: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy389; - goto yy356; - yy391: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy389; - goto yy356; - yy392: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy391; - goto yy356; - yy393: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy391; - goto yy356; - yy394: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy391; - goto yy356; - yy395: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy389; - goto yy356; - yy396: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - goto yy396; - } else { - if (yych == ' ') - goto yy396; - if (yych <= '!') - goto yy368; - goto yy356; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy356; - if (yych <= '9') - goto yy368; - } else { - if (yych <= ';') - goto yy368; - if (yych <= '=') - goto yy356; - if (yych <= '>') - goto yy360; - goto yy368; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - if (yych >= '`') - goto yy356; - } else { - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } + if (yych <= 0xF3) + goto yy277; + if (yych <= 0xF4) + goto yy278; + goto yy231; } } - yy398: + yy257: + yych = *++p; + if (yych == 'D') + goto yy279; + if (yych == 'd') + goto yy279; + goto yy231; + yy258: ++p; yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - if (yych >= 0x0E) - goto yy368; - } else { - if (yych <= ' ') - goto yy400; - if (yych == '"') - goto yy356; - goto yy368; - } - } else { - if (yych <= '/') { - if (yych <= '\'') - goto yy356; - if (yych <= ',') - goto yy368; - if (yych <= '.') - goto yy398; - goto yy368; - } else { - if (yych <= ';') { - if (yych <= ':') - goto yy398; - goto yy368; - } else { - if (yych <= '<') - goto yy356; - if (yych <= '=') - goto yy366; - goto yy360; - } - } - } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy258; + goto yy231; } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') - goto yy368; - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - goto yy398; - } else { - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - goto yy356; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy370; - if (yych <= 0xE0) - goto yy371; - if (yych <= 0xEC) - goto yy372; - goto yy376; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy372; - goto yy373; - } else { - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } - } + if (yych <= ' ') + goto yy258; + if (yych == '>') + goto yy252; + goto yy231; } - yy400: + yy260: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - if (yych <= '\r') - goto yy400; - goto yy368; - } else { - if (yych <= ' ') - goto yy400; - if (yych == '"') - goto yy356; - goto yy368; - } - } else { - if (yych <= ';') { - if (yych <= '\'') - goto yy356; - if (yych == ':') - goto yy398; - goto yy368; - } else { - if (yych <= '<') - goto yy356; - if (yych <= '=') - goto yy366; - if (yych <= '>') - goto yy360; - goto yy368; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - if (yych <= '_') - goto yy398; - goto yy356; - } else { - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } + if (yybm[0 + yych] & 4) { + goto yy260; } - yy402: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - goto yy402; - } else { - if (yych == ' ') - goto yy402; - if (yych <= '!') - goto yy368; - goto yy379; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy377; - if (yych <= '9') - goto yy368; - goto yy398; - } else { - if (yych <= ';') - goto yy368; - if (yych <= '=') - goto yy356; - if (yych <= '>') - goto yy360; - goto yy368; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - if (yych <= '_') - goto yy398; - goto yy356; - } else { - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy231; + goto yy280; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } + if (yych == ' ') + goto yy280; + goto yy231; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy251; + goto yy231; + } else { + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + goto yy231; } } - yy404: + yy262: ++p; yych = *p; - yy405: + yy263: if (yybm[0 + yych] & 8) { - goto yy404; + goto yy262; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '?') - goto yy413; - goto yy356; + goto yy231; + if (yych <= '-') + goto yy283; + goto yy231; } else { if (yych <= 0xDF) - goto yy406; + goto yy265; if (yych <= 0xE0) - goto yy407; - goto yy408; + goto yy266; + goto yy267; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy412; + goto yy268; if (yych <= 0xEF) - goto yy408; - goto yy409; + goto yy267; + goto yy269; } else { if (yych <= 0xF3) - goto yy410; + goto yy270; if (yych <= 0xF4) - goto yy411; - goto yy356; + goto yy271; + goto yy231; } } - yy406: + yy264: + yych = *++p; + if (yych == '-') + goto yy251; + if (yych == '>') + goto yy231; + goto yy263; + yy265: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy404; - goto yy356; - yy407: + goto yy262; + goto yy231; + yy266: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy406; - goto yy356; - yy408: + goto yy265; + goto yy231; + yy267: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy406; - goto yy356; - yy409: + goto yy265; + goto yy231; + yy268: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy265; + goto yy231; + yy269: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy408; - goto yy356; - yy410: + goto yy267; + goto yy231; + yy270: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy408; - goto yy356; - yy411: + goto yy267; + goto yy231; + yy271: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy408; - goto yy356; - yy412: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy406; - goto yy356; - yy413: - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy356; - if (yych <= '=') - goto yy404; - goto yy360; - } else { - if (yych <= 0x7F) - goto yy404; - if (yych <= 0xC1) - goto yy356; - if (yych >= 0xE0) - goto yy415; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy420; - goto yy416; - } else { - if (yych <= 0xF0) - goto yy417; - if (yych <= 0xF3) - goto yy418; - if (yych <= 0xF4) - goto yy419; - goto yy356; - } - } - yy414: + goto yy267; + goto yy231; + yy272: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy404; - goto yy356; - yy415: + goto yy255; + goto yy231; + yy273: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy414; - goto yy356; - yy416: + goto yy272; + goto yy231; + yy274: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy414; - goto yy356; - yy417: + goto yy272; + goto yy231; + yy275: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy272; + goto yy231; + yy276: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy416; - goto yy356; - yy418: + goto yy274; + goto yy231; + yy277: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy416; - goto yy356; - yy419: + goto yy274; + goto yy231; + yy278: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy416; - goto yy356; - yy420: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy414; - goto yy356; - yy421: + goto yy274; + goto yy231; + yy279: + yych = *++p; + if (yych == 'A') + goto yy284; + if (yych == 'a') + goto yy284; + goto yy231; + yy280: ++p; yych = *p; - if (yych <= '/') { - if (yych <= 0x1F) { + if (yych <= '<') { + if (yych <= ' ') { if (yych <= 0x08) - goto yy356; - if (yych >= 0x0E) - goto yy356; + goto yy231; + if (yych <= '\r') + goto yy280; + if (yych <= 0x1F) + goto yy231; + goto yy280; } else { - if (yych <= ' ') - goto yy423; - if (yych == '-') - goto yy421; - goto yy356; + if (yych <= '/') { + if (yych <= '.') + goto yy231; + goto yy251; + } else { + if (yych == ':') + goto yy260; + goto yy231; + } } } else { - if (yych <= '@') { - if (yych <= '9') - goto yy421; - if (yych == '>') - goto yy360; - goto yy356; + if (yych <= 'Z') { + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy231; + goto yy260; } else { - if (yych <= 'Z') - goto yy421; - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy421; - goto yy356; + if (yych <= '_') { + if (yych <= '^') + goto yy231; + goto yy260; + } else { + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy260; + goto yy231; + } } } - yy423: + yy282: ++p; yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy356; - if (yych <= '\r') - goto yy423; - goto yy356; + if (yybm[0 + yych] & 16) { + goto yy285; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy287; + goto yy288; + } else { + if (yych <= '\'') + goto yy290; + if (yych <= 0xC1) + goto yy231; + if (yych <= 0xDF) + goto yy292; + goto yy293; + } } else { - if (yych <= ' ') - goto yy423; - if (yych == '>') - goto yy360; - goto yy356; + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } } - yy425: - yych = *++p; - if (yych == 'C') - goto yy461; - if (yych == 'c') - goto yy461; - goto yy356; - yy426: + yy283: + ++p; + yych = *p; + if (yybm[0 + yych] & 8) { + goto yy262; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '-') + goto yy251; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy265; + if (yych <= 0xE0) + goto yy266; + goto yy267; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy268; + if (yych <= 0xEF) + goto yy267; + goto yy269; + } else { + if (yych <= 0xF3) + goto yy270; + if (yych <= 0xF4) + goto yy271; + goto yy231; + } + } + yy284: + yych = *++p; + if (yych == 'T') + goto yy299; + if (yych == 't') + goto yy299; + goto yy231; + yy285: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy426; + goto yy285; } - if (yych <= 0x08) - goto yy356; - if (yych <= '\r') - goto yy450; - if (yych == ' ') - goto yy450; - goto yy356; - yy428: - yych = *++p; - if (yych != '-') - goto yy356; - yych = *++p; if (yych <= 0xE0) { if (yych <= '=') { - if (yych != '-') - goto yy432; + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy300; + goto yy231; } else { if (yych <= '>') - goto yy356; + goto yy252; if (yych <= 0xC1) - goto yy432; + goto yy231; if (yych <= 0xDF) - goto yy433; - goto yy434; + goto yy292; + goto yy293; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy439; - goto yy435; + goto yy295; + goto yy294; } else { if (yych <= 0xF0) - goto yy436; + goto yy296; if (yych <= 0xF3) - goto yy437; + goto yy297; if (yych <= 0xF4) - goto yy438; - goto yy432; + goto yy298; + goto yy231; } } - yych = *++p; - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych == '-') - goto yy449; - goto yy432; + yy287: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy285; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy302; + if (yych >= '#') + goto yy290; } else { - if (yych <= '>') - goto yy356; + if (yych == '>') + goto yy252; if (yych <= 0xC1) - goto yy432; - if (yych <= 0xDF) - goto yy433; - goto yy434; + goto yy231; + goto yy292; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; if (yych == 0xED) - goto yy439; - goto yy435; + goto yy295; + goto yy294; } else { if (yych <= 0xF0) - goto yy436; + goto yy296; if (yych <= 0xF3) - goto yy437; + goto yy297; if (yych <= 0xF4) - goto yy438; - goto yy432; + goto yy298; + goto yy231; } } - yy431: + yy288: ++p; yych = *p; - yy432: if (yybm[0 + yych] & 32) { - goto yy431; + goto yy288; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '-') - goto yy440; - goto yy356; + goto yy231; + if (yych <= '"') + goto yy304; + goto yy231; } else { if (yych <= 0xDF) - goto yy441; + goto yy305; if (yych <= 0xE0) - goto yy442; - goto yy443; + goto yy306; + goto yy307; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy447; + goto yy308; if (yych <= 0xEF) - goto yy443; - goto yy444; + goto yy307; + goto yy309; } else { if (yych <= 0xF3) - goto yy445; + goto yy310; if (yych <= 0xF4) - goto yy446; - goto yy356; + goto yy311; + goto yy231; } } - yy433: - yych = *++p; + yy290: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy290; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '\'') + goto yy304; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy312; + if (yych <= 0xE0) + goto yy313; + goto yy314; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy315; + if (yych <= 0xEF) + goto yy314; + goto yy316; + } else { + if (yych <= 0xF3) + goto yy317; + if (yych <= 0xF4) + goto yy318; + goto yy231; + } + } + yy292: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy431; - goto yy356; - yy434: - yych = *++p; + goto yy285; + goto yy231; + yy293: + ++p; + yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy433; - goto yy356; - yy435: - yych = *++p; + goto yy292; + goto yy231; + yy294: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy433; - goto yy356; - yy436: - yych = *++p; + goto yy292; + goto yy231; + yy295: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy292; + goto yy231; + yy296: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy435; - goto yy356; - yy437: - yych = *++p; + goto yy294; + goto yy231; + yy297: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy435; - goto yy356; - yy438: - yych = *++p; + goto yy294; + goto yy231; + yy298: + ++p; + yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy435; - goto yy356; - yy439: + goto yy294; + goto yy231; + yy299: yych = *++p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy433; - goto yy356; - yy440: + if (yych == 'A') + goto yy319; + if (yych == 'a') + goto yy319; + goto yy231; + yy300: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy431; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + goto yy300; + } else { + if (yych == ' ') + goto yy300; + if (yych <= '!') + goto yy285; + goto yy231; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy231; + if (yych <= '9') + goto yy285; + goto yy320; + } else { + if (yych <= ';') + goto yy285; + if (yych <= '=') + goto yy231; + if (yych <= '>') + goto yy252; + goto yy285; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + if (yych <= '_') + goto yy320; + goto yy231; + } else { + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= '-') - goto yy448; - goto yy356; + yy302: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + goto yy302; + } else { + if (yych == ' ') + goto yy302; + if (yych <= '!') + goto yy285; + goto yy288; + } } else { - if (yych <= 0xDF) - goto yy441; - if (yych <= 0xE0) - goto yy442; - goto yy443; + if (yych <= ':') { + if (yych == '\'') + goto yy290; + if (yych <= '9') + goto yy285; + goto yy320; + } else { + if (yych <= ';') + goto yy285; + if (yych <= '=') + goto yy231; + if (yych <= '>') + goto yy252; + goto yy285; + } } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy447; - if (yych <= 0xEF) - goto yy443; - goto yy444; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + if (yych <= '_') + goto yy320; + goto yy231; + } else { + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } } else { - if (yych <= 0xF3) - goto yy445; - if (yych <= 0xF4) - goto yy446; - goto yy356; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } } } - yy441: + yy304: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych == '/') + goto yy251; + if (yych == '>') + goto yy252; + goto yy231; + yy305: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy431; - goto yy356; - yy442: + goto yy288; + goto yy231; + yy306: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy441; - goto yy356; - yy443: + goto yy305; + goto yy231; + yy307: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy441; - goto yy356; - yy444: + goto yy305; + goto yy231; + yy308: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy305; + goto yy231; + yy309: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy443; - goto yy356; - yy445: + goto yy307; + goto yy231; + yy310: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy443; - goto yy356; - yy446: + goto yy307; + goto yy231; + yy311: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy443; - goto yy356; - yy447: + goto yy307; + goto yy231; + yy312: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; + if (yych <= 0xBF) + goto yy290; + goto yy231; + yy313: + ++p; + yych = *p; if (yych <= 0x9F) - goto yy441; - goto yy356; - yy448: - yych = *++p; - if (yych == '>') - goto yy360; - goto yy356; - yy449: + goto yy231; + if (yych <= 0xBF) + goto yy312; + goto yy231; + yy314: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy312; + goto yy231; + yy315: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy312; + goto yy231; + yy316: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy314; + goto yy231; + yy317: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy314; + goto yy231; + yy318: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy314; + goto yy231; + yy319: yych = *++p; - if (yych == '>') - goto yy360; - goto yy356; - yy450: + if (yych == '[') + goto yy322; + goto yy231; + yy320: ++p; yych = *p; - if (yych <= 0xC1) { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy452; - if (yych <= '\r') - goto yy450; - } else { - if (yych <= '=') { + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + if (yych <= '\r') + goto yy324; + goto yy285; + } else { if (yych <= ' ') - goto yy450; + goto yy324; + if (yych == '"') + goto yy231; + goto yy285; + } + } else { + if (yych <= '/') { + if (yych <= '\'') + goto yy231; + if (yych <= ',') + goto yy285; + if (yych <= '.') + goto yy320; + goto yy285; } else { - if (yych <= '>') - goto yy360; - if (yych >= 0x80) - goto yy356; + if (yych <= ';') { + if (yych <= ':') + goto yy320; + goto yy285; + } else { + if (yych <= '<') + goto yy231; + if (yych <= '=') + goto yy282; + goto yy252; + } } } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy454; - if (yych <= 0xE0) - goto yy455; - if (yych <= 0xEC) - goto yy456; - goto yy460; + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy285; + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + goto yy320; + } else { + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + goto yy231; + } } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy456; - goto yy457; + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy292; + if (yych <= 0xE0) + goto yy293; + if (yych <= 0xEC) + goto yy294; + goto yy295; } else { - if (yych <= 0xF3) - goto yy458; - if (yych <= 0xF4) - goto yy459; - goto yy356; + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy294; + goto yy296; + } else { + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } } } } - yy452: + yy322: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy452; + if (yybm[0 + yych] & 128) { + goto yy322; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '>') - goto yy360; - goto yy356; + goto yy231; + if (yych <= ']') + goto yy326; + goto yy231; } else { if (yych <= 0xDF) - goto yy454; + goto yy327; if (yych <= 0xE0) - goto yy455; - goto yy456; + goto yy328; + goto yy329; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy460; + goto yy330; if (yych <= 0xEF) - goto yy456; - goto yy457; + goto yy329; + goto yy331; } else { if (yych <= 0xF3) - goto yy458; + goto yy332; if (yych <= 0xF4) - goto yy459; - goto yy356; + goto yy333; + goto yy231; } } - yy454: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy452; - goto yy356; - yy455: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy454; - goto yy356; - yy456: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy454; - goto yy356; - yy457: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy456; - goto yy356; - yy458: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy456; - goto yy356; - yy459: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy456; - goto yy356; - yy460: + yy324: ++p; yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy454; - goto yy356; - yy461: - yych = *++p; - if (yych == 'D') - goto yy462; - if (yych != 'd') - goto yy356; - yy462: - yych = *++p; - if (yych == 'A') - goto yy463; - if (yych != 'a') - goto yy356; - yy463: - yych = *++p; - if (yych == 'T') - goto yy464; - if (yych != 't') - goto yy356; - yy464: - yych = *++p; - if (yych == 'A') - goto yy465; - if (yych != 'a') - goto yy356; - yy465: - yych = *++p; - if (yych != '[') - goto yy356; - yy466: + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + if (yych <= '\r') + goto yy324; + goto yy285; + } else { + if (yych <= ' ') + goto yy324; + if (yych == '"') + goto yy231; + goto yy285; + } + } else { + if (yych <= ';') { + if (yych <= '\'') + goto yy231; + if (yych == ':') + goto yy320; + goto yy285; + } else { + if (yych <= '<') + goto yy231; + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + goto yy285; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + if (yych <= '_') + goto yy320; + goto yy231; + } else { + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + } + yy326: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy466; + goto yy322; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; + goto yy231; if (yych <= ']') - goto yy475; - goto yy356; + goto yy334; + goto yy231; } else { if (yych <= 0xDF) - goto yy468; + goto yy327; if (yych <= 0xE0) - goto yy469; - goto yy470; + goto yy328; + goto yy329; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy474; + goto yy330; if (yych <= 0xEF) - goto yy470; - goto yy471; + goto yy329; + goto yy331; } else { if (yych <= 0xF3) - goto yy472; + goto yy332; if (yych <= 0xF4) - goto yy473; - goto yy356; + goto yy333; + goto yy231; } } - yy468: + yy327: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy466; - goto yy356; - yy469: + goto yy322; + goto yy231; + yy328: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy468; - goto yy356; - yy470: + goto yy327; + goto yy231; + yy329: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy468; - goto yy356; - yy471: + goto yy327; + goto yy231; + yy330: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy327; + goto yy231; + yy331: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy470; - goto yy356; - yy472: + goto yy329; + goto yy231; + yy332: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy470; - goto yy356; - yy473: + goto yy329; + goto yy231; + yy333: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy470; - goto yy356; - yy474: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy468; - goto yy356; - yy475: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy466; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych >= '^') - goto yy356; - } else { - if (yych <= 0xDF) - goto yy477; - if (yych <= 0xE0) - goto yy478; - goto yy479; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy483; - if (yych <= 0xEF) - goto yy479; - goto yy480; - } else { - if (yych <= 0xF3) - goto yy481; - if (yych <= 0xF4) - goto yy482; - goto yy356; - } - } + goto yy329; + goto yy231; + yy334: ++p; yych = *p; if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) - goto yy356; + goto yy231; if (yych <= '=') - goto yy466; - goto yy360; + goto yy322; + goto yy252; } else { if (yych <= 0x7F) - goto yy466; + goto yy322; if (yych <= 0xC1) - goto yy356; + goto yy231; if (yych <= 0xDF) - goto yy484; - goto yy485; + goto yy327; + goto yy328; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy490; - goto yy486; + goto yy330; + goto yy329; } else { if (yych <= 0xF0) - goto yy487; + goto yy331; if (yych <= 0xF3) - goto yy488; + goto yy332; if (yych <= 0xF4) - goto yy489; - goto yy356; + goto yy333; + goto yy231; } } - yy477: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy466; - goto yy356; - yy478: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy477; - goto yy356; - yy479: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy477; - goto yy356; - yy480: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy479; - goto yy356; - yy481: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy479; - goto yy356; - yy482: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy479; - goto yy356; - yy483: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy477; - goto yy356; - yy484: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy466; - goto yy356; - yy485: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy484; - goto yy356; - yy486: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy484; - goto yy356; - yy487: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy486; - goto yy356; - yy488: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy486; - goto yy356; - yy489: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy486; - goto yy356; - yy490: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy484; - goto yy356; } } @@ -9754,239 +6549,216 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '<') - goto yy495; + goto yy339; ++p; - yy494 : { return 0; } - yy495: + yy338 : { return 0; } + yy339: yych = *(marker = ++p); switch (yych) { case '!': - goto yy513; + goto yy340; case '/': - goto yy496; + goto yy342; case '?': - goto yy514; + goto yy343; case 'A': case 'a': - goto yy499; + goto yy345; case 'B': case 'b': - goto yy500; + goto yy346; case 'C': case 'c': - goto yy501; + goto yy347; case 'D': case 'd': - goto yy502; + goto yy348; case 'F': case 'f': - goto yy503; + goto yy349; case 'H': case 'h': - goto yy504; + goto yy350; case 'I': case 'i': - goto yy505; + goto yy351; case 'L': case 'l': - goto yy506; + goto yy352; case 'M': case 'm': - goto yy507; + goto yy353; case 'N': case 'n': - goto yy508; + goto yy354; case 'O': case 'o': - goto yy509; + goto yy355; case 'P': case 'p': - goto yy498; + goto yy356; case 'S': case 's': - goto yy510; + goto yy357; case 'T': case 't': - goto yy511; + goto yy358; case 'U': case 'u': - goto yy512; + goto yy359; default: - goto yy494; + goto yy338; } - yy496: + yy340: + yych = *++p; + if (yych <= '@') { + if (yych == '-') + goto yy360; + } else { + if (yych <= 'Z') + goto yy361; + if (yych <= '[') + goto yy363; + } + yy341: + p = marker; + goto yy338; + yy342: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy499; + goto yy345; case 'B': case 'b': - goto yy500; + goto yy346; case 'C': case 'c': - goto yy501; + goto yy347; case 'D': case 'd': - goto yy502; + goto yy348; case 'F': case 'f': - goto yy503; + goto yy349; case 'H': case 'h': - goto yy504; + goto yy350; case 'I': case 'i': - goto yy505; + goto yy351; case 'L': case 'l': - goto yy506; + goto yy352; case 'M': case 'm': - goto yy507; + goto yy353; case 'N': case 'n': - goto yy508; + goto yy354; case 'O': case 'o': - goto yy509; + goto yy355; case 'P': case 'p': - goto yy698; + goto yy364; case 'S': case 's': - goto yy699; + goto yy365; case 'T': case 't': - goto yy511; + goto yy358; case 'U': case 'u': - goto yy512; + goto yy359; default: - goto yy497; - } - yy497: - p = marker; - goto yy494; - yy498: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - if (yych <= 0x1F) - goto yy497; - goto yy530; - } else { - if (yych == '/') - goto yy532; - if (yych <= '=') - goto yy497; - goto yy530; - } - } else { - if (yych <= 'R') { - if (yych == 'A') - goto yy695; - if (yych <= 'Q') - goto yy497; - goto yy694; - } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy497; - goto yy695; - } else { - if (yych == 'r') - goto yy694; - goto yy497; - } - } + goto yy341; } - yy499: + yy343: + ++p; + { return 3; } + yy345: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= 'C') - goto yy497; - goto yy683; + goto yy341; + goto yy366; } else { if (yych <= 'Q') - goto yy497; + goto yy341; if (yych <= 'R') - goto yy682; - goto yy681; + goto yy367; + goto yy368; } } else { if (yych <= 'q') { if (yych == 'd') - goto yy683; - goto yy497; + goto yy366; + goto yy341; } else { if (yych <= 'r') - goto yy682; + goto yy367; if (yych <= 's') - goto yy681; - goto yy497; + goto yy368; + goto yy341; } } - yy500: + yy346: yych = *++p; if (yych <= 'O') { if (yych <= 'K') { if (yych == 'A') - goto yy667; - goto yy497; + goto yy369; + goto yy341; } else { if (yych <= 'L') - goto yy666; + goto yy370; if (yych <= 'N') - goto yy497; - goto yy665; + goto yy341; + goto yy371; } } else { if (yych <= 'k') { if (yych == 'a') - goto yy667; - goto yy497; + goto yy369; + goto yy341; } else { if (yych <= 'l') - goto yy666; + goto yy370; if (yych == 'o') - goto yy665; - goto yy497; + goto yy371; + goto yy341; } } - yy501: + yy347: yych = *++p; if (yych <= 'O') { if (yych <= 'D') { if (yych == 'A') - goto yy652; - goto yy497; + goto yy372; + goto yy341; } else { if (yych <= 'E') - goto yy651; + goto yy373; if (yych <= 'N') - goto yy497; - goto yy650; + goto yy341; + goto yy374; } } else { if (yych <= 'd') { if (yych == 'a') - goto yy652; - goto yy497; + goto yy372; + goto yy341; } else { if (yych <= 'e') - goto yy651; + goto yy373; if (yych == 'o') - goto yy650; - goto yy497; + goto yy374; + goto yy341; } } - yy502: + yy348: yych = *++p; switch (yych) { case 'D': @@ -9995,1666 +6767,1488 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'd': case 'l': case 't': - goto yy529; + goto yy375; case 'E': case 'e': - goto yy642; + goto yy376; case 'I': case 'i': - goto yy641; + goto yy377; default: - goto yy497; + goto yy341; } - yy503: + yy349: yych = *++p; if (yych <= 'R') { if (yych <= 'N') { if (yych == 'I') - goto yy617; - goto yy497; + goto yy378; + goto yy341; } else { if (yych <= 'O') - goto yy616; + goto yy379; if (yych <= 'Q') - goto yy497; - goto yy615; + goto yy341; + goto yy380; } } else { if (yych <= 'n') { if (yych == 'i') - goto yy617; - goto yy497; + goto yy378; + goto yy341; } else { if (yych <= 'o') - goto yy616; + goto yy379; if (yych == 'r') - goto yy615; - goto yy497; + goto yy380; + goto yy341; } } - yy504: + yy350: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= '0') - goto yy497; + goto yy341; if (yych <= '6') - goto yy529; - goto yy497; + goto yy375; + goto yy341; } else { if (yych <= 'E') - goto yy610; + goto yy381; if (yych == 'R') - goto yy529; - goto yy497; + goto yy375; + goto yy341; } } else { if (yych <= 'q') { if (yych <= 'T') - goto yy609; + goto yy382; if (yych == 'e') - goto yy610; - goto yy497; + goto yy381; + goto yy341; } else { if (yych <= 'r') - goto yy529; + goto yy375; if (yych == 't') - goto yy609; - goto yy497; + goto yy382; + goto yy341; } } - yy505: + yy351: yych = *++p; if (yych == 'F') - goto yy605; + goto yy383; if (yych == 'f') - goto yy605; - goto yy497; - yy506: + goto yy383; + goto yy341; + yy352: yych = *++p; if (yych <= 'I') { if (yych == 'E') - goto yy600; + goto yy384; if (yych <= 'H') - goto yy497; - goto yy599; + goto yy341; + goto yy385; } else { if (yych <= 'e') { if (yych <= 'd') - goto yy497; - goto yy600; + goto yy341; + goto yy384; } else { if (yych == 'i') - goto yy599; - goto yy497; + goto yy385; + goto yy341; } } - yy507: + yy353: yych = *++p; if (yych <= 'E') { if (yych == 'A') - goto yy591; + goto yy386; if (yych <= 'D') - goto yy497; - goto yy590; + goto yy341; + goto yy387; } else { if (yych <= 'a') { if (yych <= '`') - goto yy497; - goto yy591; + goto yy341; + goto yy386; } else { if (yych == 'e') - goto yy590; - goto yy497; + goto yy387; + goto yy341; } } - yy508: + yy354: yych = *++p; if (yych <= 'O') { if (yych == 'A') - goto yy584; + goto yy388; if (yych <= 'N') - goto yy497; - goto yy583; + goto yy341; + goto yy389; } else { if (yych <= 'a') { if (yych <= '`') - goto yy497; - goto yy584; + goto yy341; + goto yy388; } else { if (yych == 'o') - goto yy583; - goto yy497; + goto yy389; + goto yy341; } } - yy509: + yy355: yych = *++p; if (yych <= 'P') { if (yych == 'L') - goto yy529; + goto yy375; if (yych <= 'O') - goto yy497; - goto yy575; + goto yy341; + goto yy390; } else { if (yych <= 'l') { if (yych <= 'k') - goto yy497; - goto yy529; + goto yy341; + goto yy375; } else { if (yych == 'p') - goto yy575; - goto yy497; + goto yy390; + goto yy341; + } + } + yy356: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + if (yych <= 0x1F) + goto yy341; + goto yy391; + } else { + if (yych == '/') + goto yy393; + if (yych <= '=') + goto yy341; + goto yy391; + } + } else { + if (yych <= 'R') { + if (yych == 'A') + goto yy394; + if (yych <= 'Q') + goto yy341; + goto yy395; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy341; + goto yy394; + } else { + if (yych == 'r') + goto yy395; + goto yy341; + } } } - yy510: + yy357: yych = *++p; switch (yych) { case 'C': case 'c': - goto yy552; + goto yy396; case 'E': case 'e': - goto yy555; + goto yy397; case 'O': case 'o': - goto yy554; + goto yy398; case 'T': case 't': - goto yy551; + goto yy399; case 'U': case 'u': - goto yy553; + goto yy400; default: - goto yy497; + goto yy341; } - yy511: + yy358: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy538; + goto yy401; case 'B': case 'b': - goto yy537; + goto yy402; case 'D': case 'd': - goto yy529; + goto yy375; case 'F': case 'f': - goto yy536; + goto yy403; case 'H': case 'h': - goto yy535; + goto yy404; case 'I': case 'i': - goto yy534; + goto yy405; case 'R': case 'r': - goto yy533; - default: - goto yy497; - } - yy512: - yych = *++p; - if (yych == 'L') - goto yy529; - if (yych == 'l') - goto yy529; - goto yy497; - yy513: - yych = *++p; - if (yych <= '@') { - if (yych == '-') - goto yy516; - goto yy497; - } else { - if (yych <= 'Z') - goto yy517; - if (yych <= '[') - goto yy519; - goto yy497; - } - yy514: - ++p; - { return 3; } - yy516: - yych = *++p; - if (yych == '-') - goto yy527; - goto yy497; - yy517: - ++p; - { return 4; } - yy519: - yych = *++p; - if (yych == 'C') - goto yy520; - if (yych != 'c') - goto yy497; - yy520: - yych = *++p; - if (yych == 'D') - goto yy521; - if (yych != 'd') - goto yy497; - yy521: - yych = *++p; - if (yych == 'A') - goto yy522; - if (yych != 'a') - goto yy497; - yy522: - yych = *++p; - if (yych == 'T') - goto yy523; - if (yych != 't') - goto yy497; - yy523: - yych = *++p; - if (yych == 'A') - goto yy524; - if (yych != 'a') - goto yy497; - yy524: - yych = *++p; - if (yych != '[') - goto yy497; - ++p; - { return 5; } - yy527: - ++p; - { return 2; } - yy529: - yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - if (yych <= 0x1F) - goto yy497; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy497; - goto yy532; - } else { - if (yych != '>') - goto yy497; - } + goto yy406; + default: + goto yy341; } - yy530: + yy359: + yych = *++p; + if (yych == 'L') + goto yy375; + if (yych == 'l') + goto yy375; + goto yy341; + yy360: + yych = *++p; + if (yych == '-') + goto yy407; + goto yy341; + yy361: ++p; - { return 6; } - yy532: + { return 4; } + yy363: yych = *++p; - if (yych == '>') - goto yy530; - goto yy497; - yy533: + if (yych == 'C') + goto yy409; + if (yych == 'c') + goto yy409; + goto yy341; + yy364: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { if (yych <= '@') { if (yych == '>') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= 'A') - goto yy549; + goto yy394; if (yych == 'a') - goto yy549; - goto yy497; + goto yy394; + goto yy341; } } - yy534: - yych = *++p; - if (yych == 'T') - goto yy547; - if (yych == 't') - goto yy547; - goto yy497; - yy535: + yy365: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - goto yy497; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'E') + goto yy397; + goto yy341; } else { - if (yych <= ' ') - goto yy530; - if (yych <= '.') - goto yy497; - goto yy532; + if (yych <= 'O') + goto yy398; + if (yych <= 'T') + goto yy341; + goto yy400; } } else { - if (yych <= 'D') { - if (yych == '>') - goto yy530; - goto yy497; - } else { - if (yych <= 'E') - goto yy545; + if (yych <= 'n') { if (yych == 'e') - goto yy545; - goto yy497; + goto yy397; + goto yy341; + } else { + if (yych <= 'o') + goto yy398; + if (yych == 'u') + goto yy400; + goto yy341; } } - yy536: - yych = *++p; - if (yych == 'O') - goto yy543; - if (yych == 'o') - goto yy543; - goto yy497; - yy537: - yych = *++p; - if (yych == 'O') - goto yy541; - if (yych == 'o') - goto yy541; - goto yy497; - yy538: - yych = *++p; - if (yych == 'B') - goto yy539; - if (yych != 'b') - goto yy497; - yy539: - yych = *++p; - if (yych == 'L') - goto yy540; - if (yych != 'l') - goto yy497; - yy540: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy541: + yy366: yych = *++p; if (yych == 'D') - goto yy542; - if (yych != 'd') - goto yy497; - yy542: - yych = *++p; - if (yych == 'Y') - goto yy529; - if (yych == 'y') - goto yy529; - goto yy497; - yy543: - yych = *++p; - if (yych == 'O') - goto yy544; - if (yych != 'o') - goto yy497; - yy544: + goto yy410; + if (yych == 'd') + goto yy410; + goto yy341; + yy367: yych = *++p; if (yych == 'T') - goto yy529; + goto yy411; if (yych == 't') - goto yy529; - goto yy497; - yy545: - yych = *++p; - if (yych == 'A') - goto yy546; - if (yych != 'a') - goto yy497; - yy546: - yych = *++p; - if (yych == 'D') - goto yy529; - if (yych == 'd') - goto yy529; - goto yy497; - yy547: - yych = *++p; - if (yych == 'L') - goto yy548; - if (yych != 'l') - goto yy497; - yy548: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy549: - yych = *++p; - if (yych == 'C') - goto yy550; - if (yych != 'c') - goto yy497; - yy550: - yych = *++p; - if (yych == 'K') - goto yy529; - if (yych == 'k') - goto yy529; - goto yy497; - yy551: - yych = *++p; - if (yych == 'Y') - goto yy573; - if (yych == 'y') - goto yy573; - goto yy497; - yy552: - yych = *++p; - if (yych == 'R') - goto yy567; - if (yych == 'r') - goto yy567; - goto yy497; - yy553: - yych = *++p; - if (yych == 'M') - goto yy563; - if (yych == 'm') - goto yy563; - goto yy497; - yy554: + goto yy411; + goto yy341; + yy368: yych = *++p; - if (yych == 'U') - goto yy560; - if (yych == 'u') - goto yy560; - goto yy497; - yy555: + if (yych == 'I') + goto yy412; + if (yych == 'i') + goto yy412; + goto yy341; + yy369: yych = *++p; - if (yych == 'C') - goto yy556; - if (yych != 'c') - goto yy497; - yy556: + if (yych == 'S') + goto yy413; + if (yych == 's') + goto yy413; + goto yy341; + yy370: yych = *++p; - if (yych == 'T') - goto yy557; - if (yych != 't') - goto yy497; - yy557: + if (yych == 'O') + goto yy414; + if (yych == 'o') + goto yy414; + goto yy341; + yy371: yych = *++p; - if (yych == 'I') - goto yy558; - if (yych != 'i') - goto yy497; - yy558: + if (yych == 'D') + goto yy415; + if (yych == 'd') + goto yy415; + goto yy341; + yy372: yych = *++p; - if (yych == 'O') - goto yy559; - if (yych != 'o') - goto yy497; - yy559: + if (yych == 'P') + goto yy416; + if (yych == 'p') + goto yy416; + goto yy341; + yy373: yych = *++p; if (yych == 'N') - goto yy529; + goto yy417; if (yych == 'n') - goto yy529; - goto yy497; - yy560: - yych = *++p; - if (yych == 'R') - goto yy561; - if (yych != 'r') - goto yy497; - yy561: - yych = *++p; - if (yych == 'C') - goto yy562; - if (yych != 'c') - goto yy497; - yy562: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy563: - yych = *++p; - if (yych == 'M') - goto yy564; - if (yych != 'm') - goto yy497; - yy564: - yych = *++p; - if (yych == 'A') - goto yy565; - if (yych != 'a') - goto yy497; - yy565: - yych = *++p; - if (yych == 'R') - goto yy566; - if (yych != 'r') - goto yy497; - yy566: - yych = *++p; - if (yych == 'Y') - goto yy529; - if (yych == 'y') - goto yy529; - goto yy497; - yy567: + goto yy417; + goto yy341; + yy374: yych = *++p; - if (yych == 'I') - goto yy568; - if (yych != 'i') - goto yy497; - yy568: + if (yych == 'L') + goto yy418; + if (yych == 'l') + goto yy418; + goto yy341; + yy375: yych = *++p; - if (yych == 'P') - goto yy569; - if (yych != 'p') - goto yy497; - yy569: + if (yych <= ' ') { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + if (yych <= 0x1F) + goto yy341; + goto yy391; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy341; + goto yy393; + } else { + if (yych == '>') + goto yy391; + goto yy341; + } + } + yy376: yych = *++p; if (yych == 'T') - goto yy570; - if (yych != 't') - goto yy497; - yy570: + goto yy419; + if (yych == 't') + goto yy419; + goto yy341; + yy377: + yych = *++p; + if (yych <= 'V') { + if (yych <= 'Q') { + if (yych == 'A') + goto yy420; + goto yy341; + } else { + if (yych <= 'R') + goto yy375; + if (yych <= 'U') + goto yy341; + goto yy375; + } + } else { + if (yych <= 'q') { + if (yych == 'a') + goto yy420; + goto yy341; + } else { + if (yych <= 'r') + goto yy375; + if (yych == 'v') + goto yy375; + goto yy341; + } + } + yy378: yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych >= 0x0E) - goto yy497; + if (yych <= 'G') { + if (yych == 'E') + goto yy421; + if (yych <= 'F') + goto yy341; + goto yy422; } else { - if (yych <= ' ') - goto yy571; - if (yych != '>') - goto yy497; + if (yych <= 'e') { + if (yych <= 'd') + goto yy341; + goto yy421; + } else { + if (yych == 'g') + goto yy422; + goto yy341; + } } - yy571: - ++p; - { return 1; } - yy573: - yych = *++p; - if (yych == 'L') - goto yy574; - if (yych != 'l') - goto yy497; - yy574: - yych = *++p; - if (yych == 'E') - goto yy570; - if (yych == 'e') - goto yy570; - goto yy497; - yy575: - yych = *++p; - if (yych == 'T') - goto yy576; - if (yych != 't') - goto yy497; - yy576: + yy379: yych = *++p; - if (yych <= 'I') { - if (yych == 'G') - goto yy578; - if (yych <= 'H') - goto yy497; + if (yych <= 'R') { + if (yych == 'O') + goto yy417; + if (yych <= 'Q') + goto yy341; + goto yy423; } else { - if (yych <= 'g') { - if (yych <= 'f') - goto yy497; - goto yy578; + if (yych <= 'o') { + if (yych <= 'n') + goto yy341; + goto yy417; } else { - if (yych != 'i') - goto yy497; + if (yych == 'r') + goto yy423; + goto yy341; } } + yy380: yych = *++p; - if (yych == 'O') - goto yy582; - if (yych == 'o') - goto yy582; - goto yy497; - yy578: - yych = *++p; - if (yych == 'R') - goto yy579; - if (yych != 'r') - goto yy497; - yy579: - yych = *++p; - if (yych == 'O') - goto yy580; - if (yych != 'o') - goto yy497; - yy580: - yych = *++p; - if (yych == 'U') - goto yy581; - if (yych != 'u') - goto yy497; - yy581: - yych = *++p; - if (yych == 'P') - goto yy529; - if (yych == 'p') - goto yy529; - goto yy497; - yy582: - yych = *++p; - if (yych == 'N') - goto yy529; - if (yych == 'n') - goto yy529; - goto yy497; - yy583: + if (yych == 'A') + goto yy424; + if (yych == 'a') + goto yy424; + goto yy341; + yy381: yych = *++p; - if (yych == 'F') - goto yy585; - if (yych == 'f') - goto yy585; - goto yy497; - yy584: + if (yych == 'A') + goto yy425; + if (yych == 'a') + goto yy425; + goto yy341; + yy382: yych = *++p; - if (yych == 'V') - goto yy529; - if (yych == 'v') - goto yy529; - goto yy497; - yy585: + if (yych == 'M') + goto yy359; + if (yych == 'm') + goto yy359; + goto yy341; + yy383: yych = *++p; if (yych == 'R') - goto yy586; - if (yych != 'r') - goto yy497; - yy586: - yych = *++p; - if (yych == 'A') - goto yy587; - if (yych != 'a') - goto yy497; - yy587: + goto yy426; + if (yych == 'r') + goto yy426; + goto yy341; + yy384: yych = *++p; - if (yych == 'M') - goto yy588; - if (yych != 'm') - goto yy497; - yy588: + if (yych == 'G') + goto yy427; + if (yych == 'g') + goto yy427; + goto yy341; + yy385: yych = *++p; - if (yych == 'E') - goto yy589; - if (yych != 'e') - goto yy497; - yy589: + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'M') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'N') + goto yy428; + if (yych == 'n') + goto yy428; + goto yy341; + } + } + yy386: yych = *++p; - if (yych == 'S') - goto yy529; - if (yych == 's') - goto yy529; - goto yy497; - yy590: + if (yych == 'I') + goto yy429; + if (yych == 'i') + goto yy429; + goto yy341; + yy387: yych = *++p; if (yych <= 'T') { if (yych == 'N') - goto yy593; + goto yy430; if (yych <= 'S') - goto yy497; - goto yy594; + goto yy341; + goto yy431; } else { if (yych <= 'n') { if (yych <= 'm') - goto yy497; - goto yy593; + goto yy341; + goto yy430; } else { if (yych == 't') - goto yy594; - goto yy497; + goto yy431; + goto yy341; } } - yy591: + yy388: yych = *++p; - if (yych == 'I') - goto yy592; - if (yych != 'i') - goto yy497; - yy592: + if (yych == 'V') + goto yy375; + if (yych == 'v') + goto yy375; + goto yy341; + yy389: yych = *++p; - if (yych == 'N') - goto yy529; - if (yych == 'n') - goto yy529; - goto yy497; - yy593: + if (yych == 'F') + goto yy432; + if (yych == 'f') + goto yy432; + goto yy341; + yy390: + yych = *++p; + if (yych == 'T') + goto yy433; + if (yych == 't') + goto yy433; + goto yy341; + yy391: + ++p; + { return 6; } + yy393: + yych = *++p; + if (yych == '>') + goto yy391; + goto yy341; + yy394: + yych = *++p; + if (yych == 'R') + goto yy434; + if (yych == 'r') + goto yy434; + goto yy341; + yy395: + yych = *++p; + if (yych == 'E') + goto yy435; + if (yych == 'e') + goto yy435; + goto yy341; + yy396: + yych = *++p; + if (yych == 'R') + goto yy436; + if (yych == 'r') + goto yy436; + goto yy341; + yy397: + yych = *++p; + if (yych == 'C') + goto yy416; + if (yych == 'c') + goto yy416; + goto yy341; + yy398: yych = *++p; if (yych == 'U') - goto yy595; + goto yy437; if (yych == 'u') - goto yy595; - goto yy497; - yy594: + goto yy437; + goto yy341; + yy399: yych = *++p; - if (yych == 'A') - goto yy529; - if (yych == 'a') - goto yy529; - goto yy497; - yy595: + if (yych == 'Y') + goto yy438; + if (yych == 'y') + goto yy438; + goto yy341; + yy400: + yych = *++p; + if (yych == 'M') + goto yy439; + if (yych == 'm') + goto yy439; + goto yy341; + yy401: + yych = *++p; + if (yych == 'B') + goto yy440; + if (yych == 'b') + goto yy440; + goto yy341; + yy402: + yych = *++p; + if (yych == 'O') + goto yy371; + if (yych == 'o') + goto yy371; + goto yy341; + yy403: + yych = *++p; + if (yych == 'O') + goto yy441; + if (yych == 'o') + goto yy441; + goto yy341; + yy404: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { - if (yych <= 'H') { + if (yych <= 'D') { if (yych == '>') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { - if (yych <= 'I') - goto yy596; - if (yych != 'i') - goto yy497; + if (yych <= 'E') + goto yy442; + if (yych == 'e') + goto yy442; + goto yy341; } } - yy596: + yy405: yych = *++p; if (yych == 'T') - goto yy597; - if (yych != 't') - goto yy497; - yy597: - yych = *++p; - if (yych == 'E') - goto yy598; - if (yych != 'e') - goto yy497; - yy598: - yych = *++p; - if (yych == 'M') - goto yy529; - if (yych == 'm') - goto yy529; - goto yy497; - yy599: + goto yy440; + if (yych == 't') + goto yy440; + goto yy341; + yy406: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { - if (yych <= 'M') { + if (yych <= '@') { if (yych == '>') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { - if (yych <= 'N') - goto yy604; - if (yych == 'n') - goto yy604; - goto yy497; + if (yych <= 'A') + goto yy443; + if (yych == 'a') + goto yy443; + goto yy341; } } - yy600: - yych = *++p; - if (yych == 'G') - goto yy601; - if (yych != 'g') - goto yy497; - yy601: - yych = *++p; - if (yych == 'E') - goto yy602; - if (yych != 'e') - goto yy497; - yy602: - yych = *++p; - if (yych == 'N') - goto yy603; - if (yych != 'n') - goto yy497; - yy603: + yy407: + ++p; + { return 2; } + yy409: yych = *++p; if (yych == 'D') - goto yy529; + goto yy444; if (yych == 'd') - goto yy529; - goto yy497; - yy604: - yych = *++p; - if (yych == 'K') - goto yy529; - if (yych == 'k') - goto yy529; - goto yy497; - yy605: + goto yy444; + goto yy341; + yy410: yych = *++p; if (yych == 'R') - goto yy606; - if (yych != 'r') - goto yy497; - yy606: + goto yy445; + if (yych == 'r') + goto yy445; + goto yy341; + yy411: yych = *++p; - if (yych == 'A') - goto yy607; - if (yych != 'a') - goto yy497; - yy607: + if (yych == 'I') + goto yy446; + if (yych == 'i') + goto yy446; + goto yy341; + yy412: yych = *++p; - if (yych == 'M') - goto yy608; - if (yych != 'm') - goto yy497; - yy608: + if (yych == 'D') + goto yy447; + if (yych == 'd') + goto yy447; + goto yy341; + yy413: yych = *++p; if (yych == 'E') - goto yy529; + goto yy448; if (yych == 'e') - goto yy529; - goto yy497; - yy609: + goto yy448; + goto yy341; + yy414: yych = *++p; - if (yych == 'M') - goto yy614; - if (yych == 'm') - goto yy614; - goto yy497; - yy610: + if (yych == 'C') + goto yy449; + if (yych == 'c') + goto yy449; + goto yy341; + yy415: yych = *++p; - if (yych == 'A') - goto yy611; - if (yych != 'a') - goto yy497; - yy611: + if (yych == 'Y') + goto yy375; + if (yych == 'y') + goto yy375; + goto yy341; + yy416: yych = *++p; - if (yych == 'D') - goto yy612; - if (yych != 'd') - goto yy497; - yy612: + if (yych == 'T') + goto yy450; + if (yych == 't') + goto yy450; + goto yy341; + yy417: + yych = *++p; + if (yych == 'T') + goto yy451; + if (yych == 't') + goto yy451; + goto yy341; + yy418: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { - if (yych <= 'D') { + if (yych <= 'F') { if (yych == '>') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { - if (yych <= 'E') - goto yy613; - if (yych != 'e') - goto yy497; + if (yych <= 'G') + goto yy452; + if (yych == 'g') + goto yy452; + goto yy341; } } - yy613: - yych = *++p; - if (yych == 'R') - goto yy529; - if (yych == 'r') - goto yy529; - goto yy497; - yy614: - yych = *++p; - if (yych == 'L') - goto yy529; - if (yych == 'l') - goto yy529; - goto yy497; - yy615: + yy419: yych = *++p; if (yych == 'A') - goto yy636; + goto yy453; if (yych == 'a') - goto yy636; - goto yy497; - yy616: - yych = *++p; - if (yych <= 'R') { - if (yych == 'O') - goto yy632; - if (yych <= 'Q') - goto yy497; - goto yy633; - } else { - if (yych <= 'o') { - if (yych <= 'n') - goto yy497; - goto yy632; - } else { - if (yych == 'r') - goto yy633; - goto yy497; - } - } - yy617: + goto yy453; + goto yy341; + yy420: yych = *++p; - if (yych <= 'G') { - if (yych == 'E') - goto yy618; - if (yych <= 'F') - goto yy497; - goto yy619; - } else { - if (yych <= 'e') { - if (yych <= 'd') - goto yy497; - } else { - if (yych == 'g') - goto yy619; - goto yy497; - } - } - yy618: + if (yych == 'L') + goto yy454; + if (yych == 'l') + goto yy454; + goto yy341; + yy421: yych = *++p; if (yych == 'L') - goto yy628; + goto yy455; if (yych == 'l') - goto yy628; - goto yy497; - yy619: + goto yy455; + goto yy341; + yy422: yych = *++p; if (yych <= 'U') { if (yych == 'C') - goto yy621; + goto yy456; if (yych <= 'T') - goto yy497; + goto yy341; + goto yy457; } else { if (yych <= 'c') { if (yych <= 'b') - goto yy497; - goto yy621; + goto yy341; + goto yy456; } else { - if (yych != 'u') - goto yy497; + if (yych == 'u') + goto yy457; + goto yy341; } } + yy423: yych = *++p; - if (yych == 'R') - goto yy627; - if (yych == 'r') - goto yy627; - goto yy497; - yy621: + if (yych == 'M') + goto yy375; + if (yych == 'm') + goto yy375; + goto yy341; + yy424: yych = *++p; - if (yych == 'A') - goto yy622; - if (yych != 'a') - goto yy497; - yy622: + if (yych == 'M') + goto yy458; + if (yych == 'm') + goto yy458; + goto yy341; + yy425: yych = *++p; - if (yych == 'P') - goto yy623; - if (yych != 'p') - goto yy497; - yy623: + if (yych == 'D') + goto yy459; + if (yych == 'd') + goto yy459; + goto yy341; + yy426: yych = *++p; - if (yych == 'T') - goto yy624; - if (yych != 't') - goto yy497; - yy624: + if (yych == 'A') + goto yy460; + if (yych == 'a') + goto yy460; + goto yy341; + yy427: yych = *++p; - if (yych == 'I') - goto yy625; - if (yych != 'i') - goto yy497; - yy625: + if (yych == 'E') + goto yy461; + if (yych == 'e') + goto yy461; + goto yy341; + yy428: yych = *++p; - if (yych == 'O') - goto yy626; - if (yych != 'o') - goto yy497; - yy626: + if (yych == 'K') + goto yy375; + if (yych == 'k') + goto yy375; + goto yy341; + yy429: yych = *++p; if (yych == 'N') - goto yy529; + goto yy375; if (yych == 'n') - goto yy529; - goto yy497; - yy627: + goto yy375; + goto yy341; + yy430: yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy628: + if (yych == 'U') + goto yy462; + if (yych == 'u') + goto yy462; + goto yy341; + yy431: yych = *++p; - if (yych == 'D') - goto yy629; - if (yych != 'd') - goto yy497; - yy629: + if (yych == 'A') + goto yy375; + if (yych == 'a') + goto yy375; + goto yy341; + yy432: + yych = *++p; + if (yych == 'R') + goto yy463; + if (yych == 'r') + goto yy463; + goto yy341; + yy433: + yych = *++p; + if (yych <= 'I') { + if (yych == 'G') + goto yy452; + if (yych <= 'H') + goto yy341; + goto yy464; + } else { + if (yych <= 'g') { + if (yych <= 'f') + goto yy341; + goto yy452; + } else { + if (yych == 'i') + goto yy464; + goto yy341; + } + } + yy434: + yych = *++p; + if (yych == 'A') + goto yy423; + if (yych == 'a') + goto yy423; + goto yy341; + yy435: + yych = *++p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy465; + goto yy341; + } else { + if (yych <= ' ') + goto yy465; + if (yych == '>') + goto yy465; + goto yy341; + } + yy436: + yych = *++p; + if (yych == 'I') + goto yy467; + if (yych == 'i') + goto yy467; + goto yy341; + yy437: + yych = *++p; + if (yych == 'R') + goto yy468; + if (yych == 'r') + goto yy468; + goto yy341; + yy438: + yych = *++p; + if (yych == 'L') + goto yy395; + if (yych == 'l') + goto yy395; + goto yy341; + yy439: + yych = *++p; + if (yych == 'M') + goto yy469; + if (yych == 'm') + goto yy469; + goto yy341; + yy440: yych = *++p; - if (yych == 'S') - goto yy630; - if (yych != 's') - goto yy497; - yy630: + if (yych == 'L') + goto yy447; + if (yych == 'l') + goto yy447; + goto yy341; + yy441: yych = *++p; - if (yych == 'E') - goto yy631; - if (yych != 'e') - goto yy497; - yy631: + if (yych == 'O') + goto yy470; + if (yych == 'o') + goto yy470; + goto yy341; + yy442: yych = *++p; - if (yych == 'T') - goto yy529; - if (yych == 't') - goto yy529; - goto yy497; - yy632: + if (yych == 'A') + goto yy471; + if (yych == 'a') + goto yy471; + goto yy341; + yy443: yych = *++p; - if (yych == 'T') - goto yy634; - if (yych == 't') - goto yy634; - goto yy497; - yy633: + if (yych == 'C') + goto yy428; + if (yych == 'c') + goto yy428; + goto yy341; + yy444: yych = *++p; - if (yych == 'M') - goto yy529; - if (yych == 'm') - goto yy529; - goto yy497; - yy634: + if (yych == 'A') + goto yy472; + if (yych == 'a') + goto yy472; + goto yy341; + yy445: yych = *++p; if (yych == 'E') - goto yy635; - if (yych != 'e') - goto yy497; - yy635: - yych = *++p; - if (yych == 'R') - goto yy529; - if (yych == 'r') - goto yy529; - goto yy497; - yy636: + goto yy473; + if (yych == 'e') + goto yy473; + goto yy341; + yy446: yych = *++p; - if (yych == 'M') - goto yy637; - if (yych != 'm') - goto yy497; - yy637: + if (yych == 'C') + goto yy440; + if (yych == 'c') + goto yy440; + goto yy341; + yy447: yych = *++p; if (yych == 'E') - goto yy638; - if (yych != 'e') - goto yy497; - yy638: + goto yy375; + if (yych == 'e') + goto yy375; + goto yy341; + yy448: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { - if (yych <= 'R') { + if (yych <= 'E') { if (yych == '>') - goto yy530; - goto yy497; - } else { - if (yych <= 'S') - goto yy639; - if (yych != 's') - goto yy497; - } - } - yy639: - yych = *++p; - if (yych == 'E') - goto yy640; - if (yych != 'e') - goto yy497; - yy640: - yych = *++p; - if (yych == 'T') - goto yy529; - if (yych == 't') - goto yy529; - goto yy497; - yy641: - yych = *++p; - if (yych <= 'V') { - if (yych <= 'Q') { - if (yych == 'A') - goto yy647; - goto yy497; - } else { - if (yych <= 'R') - goto yy529; - if (yych <= 'U') - goto yy497; - goto yy529; - } - } else { - if (yych <= 'q') { - if (yych == 'a') - goto yy647; - goto yy497; + goto yy391; + goto yy341; } else { - if (yych <= 'r') - goto yy529; - if (yych == 'v') - goto yy529; - goto yy497; + if (yych <= 'F') + goto yy474; + if (yych == 'f') + goto yy474; + goto yy341; } } - yy642: - yych = *++p; - if (yych == 'T') - goto yy643; - if (yych != 't') - goto yy497; - yy643: + yy449: yych = *++p; - if (yych == 'A') - goto yy644; - if (yych != 'a') - goto yy497; - yy644: + if (yych == 'K') + goto yy475; + if (yych == 'k') + goto yy475; + goto yy341; + yy450: yych = *++p; if (yych == 'I') - goto yy645; - if (yych != 'i') - goto yy497; - yy645: + goto yy464; + if (yych == 'i') + goto yy464; + goto yy341; + yy451: yych = *++p; - if (yych == 'L') - goto yy646; - if (yych != 'l') - goto yy497; - yy646: + if (yych == 'E') + goto yy476; + if (yych == 'e') + goto yy476; + goto yy341; + yy452: yych = *++p; - if (yych == 'S') - goto yy529; - if (yych == 's') - goto yy529; - goto yy497; - yy647: + if (yych == 'R') + goto yy477; + if (yych == 'r') + goto yy477; + goto yy341; + yy453: yych = *++p; - if (yych == 'L') - goto yy648; - if (yych != 'l') - goto yy497; - yy648: + if (yych == 'I') + goto yy478; + if (yych == 'i') + goto yy478; + goto yy341; + yy454: yych = *++p; if (yych == 'O') - goto yy649; - if (yych != 'o') - goto yy497; - yy649: - yych = *++p; - if (yych == 'G') - goto yy529; - if (yych == 'g') - goto yy529; - goto yy497; - yy650: + goto yy479; + if (yych == 'o') + goto yy479; + goto yy341; + yy455: yych = *++p; - if (yych == 'L') - goto yy660; - if (yych == 'l') - goto yy660; - goto yy497; - yy651: + if (yych == 'D') + goto yy480; + if (yych == 'd') + goto yy480; + goto yy341; + yy456: yych = *++p; - if (yych == 'N') - goto yy657; - if (yych == 'n') - goto yy657; - goto yy497; - yy652: + if (yych == 'A') + goto yy372; + if (yych == 'a') + goto yy372; + goto yy341; + yy457: yych = *++p; - if (yych == 'P') - goto yy653; - if (yych != 'p') - goto yy497; - yy653: + if (yych == 'R') + goto yy447; + if (yych == 'r') + goto yy447; + goto yy341; + yy458: yych = *++p; - if (yych == 'T') - goto yy654; - if (yych != 't') - goto yy497; - yy654: + if (yych == 'E') + goto yy481; + if (yych == 'e') + goto yy481; + goto yy341; + yy459: yych = *++p; - if (yych == 'I') - goto yy655; - if (yych != 'i') - goto yy497; - yy655: + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'D') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'E') + goto yy476; + if (yych == 'e') + goto yy476; + goto yy341; + } + } + yy460: yych = *++p; - if (yych == 'O') - goto yy656; - if (yych != 'o') - goto yy497; - yy656: + if (yych == 'M') + goto yy447; + if (yych == 'm') + goto yy447; + goto yy341; + yy461: yych = *++p; if (yych == 'N') - goto yy529; + goto yy471; if (yych == 'n') - goto yy529; - goto yy497; - yy657: - yych = *++p; - if (yych == 'T') - goto yy658; - if (yych != 't') - goto yy497; - yy658: - yych = *++p; - if (yych == 'E') - goto yy659; - if (yych != 'e') - goto yy497; - yy659: - yych = *++p; - if (yych == 'R') - goto yy529; - if (yych == 'r') - goto yy529; - goto yy497; - yy660: + goto yy471; + goto yy341; + yy462: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { - if (yych <= 'F') { + if (yych <= 'H') { if (yych == '>') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { - if (yych <= 'G') - goto yy661; - if (yych != 'g') - goto yy497; + if (yych <= 'I') + goto yy482; + if (yych == 'i') + goto yy482; + goto yy341; } } - yy661: + yy463: yych = *++p; - if (yych == 'R') - goto yy662; - if (yych != 'r') - goto yy497; - yy662: + if (yych == 'A') + goto yy483; + if (yych == 'a') + goto yy483; + goto yy341; + yy464: yych = *++p; if (yych == 'O') - goto yy663; - if (yych != 'o') - goto yy497; - yy663: - yych = *++p; - if (yych == 'U') - goto yy664; - if (yych != 'u') - goto yy497; - yy664: + goto yy429; + if (yych == 'o') + goto yy429; + goto yy341; + yy465: + ++p; + { return 1; } + yy467: yych = *++p; if (yych == 'P') - goto yy529; + goto yy484; if (yych == 'p') - goto yy529; - goto yy497; - yy665: + goto yy484; + goto yy341; + yy468: + yych = *++p; + if (yych == 'C') + goto yy447; + if (yych == 'c') + goto yy447; + goto yy341; + yy469: + yych = *++p; + if (yych == 'A') + goto yy485; + if (yych == 'a') + goto yy485; + goto yy341; + yy470: + yych = *++p; + if (yych == 'T') + goto yy375; + if (yych == 't') + goto yy375; + goto yy341; + yy471: yych = *++p; if (yych == 'D') - goto yy680; + goto yy375; if (yych == 'd') - goto yy680; - goto yy497; - yy666: + goto yy375; + goto yy341; + yy472: + yych = *++p; + if (yych == 'T') + goto yy486; + if (yych == 't') + goto yy486; + goto yy341; + yy473: + yych = *++p; + if (yych == 'S') + goto yy487; + if (yych == 's') + goto yy487; + goto yy341; + yy474: yych = *++p; if (yych == 'O') - goto yy673; + goto yy488; if (yych == 'o') - goto yy673; - goto yy497; - yy667: + goto yy488; + goto yy341; + yy475: yych = *++p; - if (yych == 'S') - goto yy668; - if (yych != 's') - goto yy497; - yy668: + if (yych == 'Q') + goto yy489; + if (yych == 'q') + goto yy489; + goto yy341; + yy476: yych = *++p; - if (yych == 'E') - goto yy669; - if (yych != 'e') - goto yy497; - yy669: + if (yych == 'R') + goto yy375; + if (yych == 'r') + goto yy375; + goto yy341; + yy477: + yych = *++p; + if (yych == 'O') + goto yy490; + if (yych == 'o') + goto yy490; + goto yy341; + yy478: + yych = *++p; + if (yych == 'L') + goto yy487; + if (yych == 'l') + goto yy487; + goto yy341; + yy479: + yych = *++p; + if (yych == 'G') + goto yy375; + if (yych == 'g') + goto yy375; + goto yy341; + yy480: + yych = *++p; + if (yych == 'S') + goto yy491; + if (yych == 's') + goto yy491; + goto yy341; + yy481: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy341; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { if (yych <= ' ') - goto yy530; + goto yy391; if (yych <= '.') - goto yy497; - goto yy532; + goto yy341; + goto yy393; } } else { - if (yych <= 'E') { + if (yych <= 'R') { if (yych == '>') - goto yy530; - goto yy497; + goto yy391; + goto yy341; } else { - if (yych <= 'F') - goto yy670; - if (yych != 'f') - goto yy497; + if (yych <= 'S') + goto yy491; + if (yych == 's') + goto yy491; + goto yy341; } } - yy670: - yych = *++p; - if (yych == 'O') - goto yy671; - if (yych != 'o') - goto yy497; - yy671: - yych = *++p; - if (yych == 'N') - goto yy672; - if (yych != 'n') - goto yy497; - yy672: + yy482: yych = *++p; if (yych == 'T') - goto yy529; + goto yy492; if (yych == 't') - goto yy529; - goto yy497; - yy673: - yych = *++p; - if (yych == 'C') - goto yy674; - if (yych != 'c') - goto yy497; - yy674: - yych = *++p; - if (yych == 'K') - goto yy675; - if (yych != 'k') - goto yy497; - yy675: - yych = *++p; - if (yych == 'Q') - goto yy676; - if (yych != 'q') - goto yy497; - yy676: - yych = *++p; - if (yych == 'U') - goto yy677; - if (yych != 'u') - goto yy497; - yy677: - yych = *++p; - if (yych == 'O') - goto yy678; - if (yych != 'o') - goto yy497; - yy678: - yych = *++p; - if (yych == 'T') - goto yy679; - if (yych != 't') - goto yy497; - yy679: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy680: - yych = *++p; - if (yych == 'Y') - goto yy529; - if (yych == 'y') - goto yy529; - goto yy497; - yy681: + goto yy492; + goto yy341; + yy483: yych = *++p; - if (yych == 'I') - goto yy692; - if (yych == 'i') - goto yy692; - goto yy497; - yy682: + if (yych == 'M') + goto yy493; + if (yych == 'm') + goto yy493; + goto yy341; + yy484: yych = *++p; if (yych == 'T') - goto yy688; + goto yy435; if (yych == 't') - goto yy688; - goto yy497; - yy683: - yych = *++p; - if (yych == 'D') - goto yy684; - if (yych != 'd') - goto yy497; - yy684: + goto yy435; + goto yy341; + yy485: yych = *++p; if (yych == 'R') - goto yy685; - if (yych != 'r') - goto yy497; - yy685: - yych = *++p; - if (yych == 'E') - goto yy686; - if (yych != 'e') - goto yy497; - yy686: + goto yy415; + if (yych == 'r') + goto yy415; + goto yy341; + yy486: yych = *++p; - if (yych == 'S') - goto yy687; - if (yych != 's') - goto yy497; - yy687: + if (yych == 'A') + goto yy494; + if (yych == 'a') + goto yy494; + goto yy341; + yy487: yych = *++p; if (yych == 'S') - goto yy529; + goto yy375; if (yych == 's') - goto yy529; - goto yy497; - yy688: + goto yy375; + goto yy341; + yy488: yych = *++p; - if (yych == 'I') - goto yy689; - if (yych != 'i') - goto yy497; - yy689: + if (yych == 'N') + goto yy470; + if (yych == 'n') + goto yy470; + goto yy341; + yy489: yych = *++p; - if (yych == 'C') - goto yy690; - if (yych != 'c') - goto yy497; - yy690: + if (yych == 'U') + goto yy495; + if (yych == 'u') + goto yy495; + goto yy341; + yy490: yych = *++p; - if (yych == 'L') - goto yy691; - if (yych != 'l') - goto yy497; - yy691: + if (yych == 'U') + goto yy496; + if (yych == 'u') + goto yy496; + goto yy341; + yy491: yych = *++p; if (yych == 'E') - goto yy529; + goto yy470; if (yych == 'e') - goto yy529; - goto yy497; - yy692: - yych = *++p; - if (yych == 'D') - goto yy693; - if (yych != 'd') - goto yy497; - yy693: + goto yy470; + goto yy341; + yy492: yych = *++p; if (yych == 'E') - goto yy529; + goto yy423; if (yych == 'e') - goto yy529; - goto yy497; - yy694: + goto yy423; + goto yy341; + yy493: yych = *++p; if (yych == 'E') - goto yy570; + goto yy487; if (yych == 'e') - goto yy570; - goto yy497; - yy695: - yych = *++p; - if (yych == 'R') - goto yy696; - if (yych != 'r') - goto yy497; - yy696: + goto yy487; + goto yy341; + yy494: yych = *++p; - if (yych == 'A') - goto yy697; - if (yych != 'a') + if (yych == '[') goto yy497; - yy697: + goto yy341; + yy495: yych = *++p; - if (yych == 'M') - goto yy529; - if (yych == 'm') - goto yy529; - goto yy497; - yy698: + if (yych == 'O') + goto yy499; + if (yych == 'o') + goto yy499; + goto yy341; + yy496: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - goto yy497; - } else { - if (yych <= ' ') - goto yy530; - if (yych <= '.') - goto yy497; - goto yy532; - } - } else { - if (yych <= '@') { - if (yych == '>') - goto yy530; - goto yy497; - } else { - if (yych <= 'A') - goto yy695; - if (yych == 'a') - goto yy695; - goto yy497; - } - } - yy699: + if (yych == 'P') + goto yy375; + if (yych == 'p') + goto yy375; + goto yy341; + yy497: ++p; - if ((yych = *p) <= 'U') { - if (yych <= 'N') { - if (yych == 'E') - goto yy555; - goto yy497; - } else { - if (yych <= 'O') - goto yy554; - if (yych <= 'T') - goto yy497; - goto yy553; - } - } else { - if (yych <= 'n') { - if (yych == 'e') - goto yy555; - goto yy497; - } else { - if (yych <= 'o') - goto yy554; - if (yych == 'u') - goto yy553; - goto yy497; - } - } + { return 5; } + yy499: + ++p; + if ((yych = *p) == 'T') + goto yy447; + if (yych == 't') + goto yy447; + goto yy341; } } @@ -11667,15 +8261,15 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 202, 194, 198, 194, + 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 198, 224, 64, 224, 224, 224, 224, 128, 224, 224, - 224, 224, 224, 241, 240, 224, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 240, 224, 192, 192, 192, 224, 224, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, 224, 240, 192, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, + 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224, + 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11689,735 +8283,812 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { }; yych = *p; if (yych == '<') - goto yy704; + goto yy504; ++p; - yy703 : { return 0; } - yy704: + yy503 : { return 0; } + yy504: yyaccept = 0; yych = *(marker = ++p); if (yych <= '@') { - if (yych == '/') - goto yy708; - goto yy703; + if (yych != '/') + goto yy503; } else { if (yych <= 'Z') - goto yy705; + goto yy507; if (yych <= '`') - goto yy703; - if (yych >= '{') - goto yy703; - } - yy705: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy705; - } - if (yych <= ' ') { - if (yych <= 0x08) - goto yy707; - if (yych <= '\r') - goto yy719; - if (yych >= ' ') - goto yy719; - } else { - if (yych <= '/') { - if (yych >= '/') - goto yy721; - } else { - if (yych == '>') - goto yy713; - } - } - yy707: - p = marker; - if (yyaccept == 0) { - goto yy703; - } else { - goto yy717; + goto yy503; + if (yych <= 'z') + goto yy507; + goto yy503; } - yy708: yych = *++p; if (yych <= '@') - goto yy707; + goto yy506; if (yych <= 'Z') - goto yy709; + goto yy509; if (yych <= '`') - goto yy707; - if (yych >= '{') - goto yy707; - yy709: + goto yy506; + if (yych <= 'z') + goto yy509; + yy506: + p = marker; + if (yyaccept == 0) { + goto yy503; + } else { + goto yy522; + } + yy507: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy711; + goto yy511; } if (yych <= '=') { - if (yych <= '-') { - if (yych <= ',') - goto yy707; - goto yy709; + if (yych <= '.') { + if (yych == '-') + goto yy507; + goto yy506; } else { if (yych <= '/') - goto yy707; + goto yy513; if (yych <= '9') - goto yy709; - goto yy707; + goto yy507; + goto yy506; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy713; + goto yy514; if (yych <= '@') - goto yy707; - goto yy709; + goto yy506; + goto yy507; } else { if (yych <= '`') - goto yy707; + goto yy506; if (yych <= 'z') - goto yy709; - goto yy707; + goto yy507; + goto yy506; } } - yy711: + yy509: ++p; yych = *p; - if (yybm[0 + yych] & 2) { - goto yy711; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy506; + if (yych <= '\r') + goto yy516; + goto yy506; + } else { + if (yych <= ' ') + goto yy516; + if (yych == '-') + goto yy509; + goto yy506; + } + } else { + if (yych <= '@') { + if (yych <= '9') + goto yy509; + if (yych == '>') + goto yy514; + goto yy506; + } else { + if (yych <= 'Z') + goto yy509; + if (yych <= '`') + goto yy506; + if (yych <= 'z') + goto yy509; + goto yy506; + } } - if (yych != '>') - goto yy707; - yy713: + yy511: ++p; yych = *p; - if (yybm[0 + yych] & 4) { - goto yy713; + if (yybm[0 + yych] & 2) { + goto yy511; } - if (yych <= 0x08) - goto yy707; - if (yych <= '\n') - goto yy715; - if (yych <= '\v') - goto yy707; - if (yych <= '\r') - goto yy718; - goto yy707; - yy715: - yyaccept = 1; - marker = ++p; + if (yych <= '>') { + if (yych <= '9') { + if (yych != '/') + goto yy506; + } else { + if (yych <= ':') + goto yy518; + if (yych <= '=') + goto yy506; + goto yy514; + } + } else { + if (yych <= '^') { + if (yych <= '@') + goto yy506; + if (yych <= 'Z') + goto yy518; + goto yy506; + } else { + if (yych == '`') + goto yy506; + if (yych <= 'z') + goto yy518; + goto yy506; + } + } + yy513: + yych = *++p; + if (yych != '>') + goto yy506; + yy514: + ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy713; + goto yy514; } if (yych <= 0x08) - goto yy717; + goto yy506; if (yych <= '\n') - goto yy715; + goto yy520; if (yych <= '\v') - goto yy717; + goto yy506; if (yych <= '\r') - goto yy718; - yy717 : { return 7; } - yy718: - yych = *++p; - goto yy717; - yy719: + goto yy523; + goto yy506; + yy516: ++p; yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy707; - if (yych <= '\r') - goto yy719; - if (yych <= 0x1F) - goto yy707; - goto yy719; - } else { - if (yych == '/') - goto yy721; - if (yych <= '9') - goto yy707; - goto yy722; - } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy506; + if (yych <= '\r') + goto yy516; + goto yy506; } else { - if (yych <= 'Z') { - if (yych == '>') - goto yy713; - if (yych <= '@') - goto yy707; - goto yy722; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy707; - goto yy722; - } else { - if (yych <= '`') - goto yy707; - if (yych <= 'z') - goto yy722; - goto yy707; - } - } + if (yych <= ' ') + goto yy516; + if (yych == '>') + goto yy514; + goto yy506; } - yy721: - yych = *++p; - if (yych == '>') - goto yy713; - goto yy707; - yy722: + yy518: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy722; + if (yybm[0 + yych] & 8) { + goto yy518; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy707; + goto yy506; + goto yy524; } else { - if (yych != ' ') - goto yy707; + if (yych == ' ') + goto yy524; + goto yy506; } } else { if (yych <= '<') { if (yych <= '/') - goto yy721; - goto yy707; + goto yy513; + goto yy506; } else { if (yych <= '=') - goto yy726; + goto yy526; if (yych <= '>') - goto yy713; - goto yy707; + goto yy514; + goto yy506; } } - yy724: + yy520: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy514; + } + if (yych <= 0x08) + goto yy522; + if (yych <= '\n') + goto yy520; + if (yych <= '\v') + goto yy522; + if (yych <= '\r') + goto yy523; + yy522 : { return 7; } + yy523: + yych = *++p; + goto yy522; + yy524: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy707; + goto yy506; if (yych <= '\r') - goto yy724; + goto yy524; if (yych <= 0x1F) - goto yy707; - goto yy724; + goto yy506; + goto yy524; } else { if (yych <= '/') { if (yych <= '.') - goto yy707; - goto yy721; + goto yy506; + goto yy513; } else { if (yych == ':') - goto yy722; - goto yy707; + goto yy518; + goto yy506; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy726; + goto yy526; if (yych <= '>') - goto yy713; + goto yy514; if (yych <= '@') - goto yy707; - goto yy722; + goto yy506; + goto yy518; } else { if (yych <= '_') { if (yych <= '^') - goto yy707; - goto yy722; + goto yy506; + goto yy518; } else { if (yych <= '`') - goto yy707; + goto yy506; if (yych <= 'z') - goto yy722; - goto yy707; + goto yy518; + goto yy506; } } } - yy726: + yy526: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy728; + goto yy527; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy707; - if (yych >= '!') - goto yy739; + goto yy506; + if (yych <= ' ') + goto yy529; + goto yy530; } else { if (yych <= '\'') - goto yy737; + goto yy532; if (yych <= 0xC1) - goto yy707; + goto yy506; if (yych <= 0xDF) - goto yy730; - goto yy731; + goto yy534; + goto yy535; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy736; - goto yy732; + goto yy537; + goto yy536; } else { if (yych <= 0xF0) - goto yy733; + goto yy538; if (yych <= 0xF3) - goto yy734; + goto yy539; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy540; + goto yy506; + } + } + yy527: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy527; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy506; + if (yych <= ' ') + goto yy541; + goto yy506; + } else { + if (yych <= '>') + goto yy514; + if (yych <= 0xC1) + goto yy506; + if (yych <= 0xDF) + goto yy534; + goto yy535; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; } } + yy529: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy728; + goto yy527; } if (yych <= 0xDF) { if (yych <= '\'') { if (yych <= 0x00) - goto yy707; + goto yy506; if (yych <= ' ') - goto yy762; - if (yych <= '"') - goto yy739; - goto yy737; + goto yy543; + if (yych >= '#') + goto yy532; } else { if (yych == '>') - goto yy713; + goto yy514; if (yych <= 0xC1) - goto yy707; - goto yy730; + goto yy506; + goto yy534; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy731; + goto yy535; if (yych == 0xED) - goto yy736; - goto yy732; + goto yy537; + goto yy536; } else { if (yych <= 0xF0) - goto yy733; + goto yy538; if (yych <= 0xF3) - goto yy734; + goto yy539; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy540; + goto yy506; } } - yy728: + yy530: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy728; + if (yybm[0 + yych] & 64) { + goto yy530; } - if (yych <= 0xE0) { - if (yych <= '=') { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy506; + if (yych <= '"') + goto yy545; + goto yy506; + } else { + if (yych <= 0xDF) + goto yy546; + if (yych <= 0xE0) + goto yy547; + goto yy548; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy549; + if (yych <= 0xEF) + goto yy548; + goto yy550; + } else { + if (yych <= 0xF3) + goto yy551; + if (yych <= 0xF4) + goto yy552; + goto yy506; + } + } + yy532: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy532; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { if (yych <= 0x00) - goto yy707; - if (yych <= ' ') - goto yy756; - goto yy707; + goto yy506; + if (yych <= '\'') + goto yy545; + goto yy506; } else { - if (yych <= '>') - goto yy713; - if (yych <= 0xC1) - goto yy707; - if (yych >= 0xE0) - goto yy731; + if (yych <= 0xDF) + goto yy553; + if (yych <= 0xE0) + goto yy554; + goto yy555; } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy736; - goto yy732; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy556; + if (yych <= 0xEF) + goto yy555; + goto yy557; } else { - if (yych <= 0xF0) - goto yy733; if (yych <= 0xF3) - goto yy734; + goto yy558; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy559; + goto yy506; } } - yy730: + yy534: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy728; - goto yy707; - yy731: + goto yy527; + goto yy506; + yy535: ++p; yych = *p; if (yych <= 0x9F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy730; - goto yy707; - yy732: + goto yy534; + goto yy506; + yy536: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy730; - goto yy707; - yy733: + goto yy534; + goto yy506; + yy537: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x9F) + goto yy534; + goto yy506; + yy538: ++p; yych = *p; if (yych <= 0x8F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy732; - goto yy707; - yy734: + goto yy536; + goto yy506; + yy539: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy732; - goto yy707; - yy735: + goto yy536; + goto yy506; + yy540: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0x8F) - goto yy732; - goto yy707; - yy736: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0x9F) - goto yy730; - goto yy707; - yy737: + goto yy536; + goto yy506; + yy541: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy737; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy707; - if (yych <= '\'') - goto yy748; - goto yy707; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy506; + if (yych <= 0x08) + goto yy527; + goto yy541; + } else { + if (yych == ' ') + goto yy541; + if (yych <= '!') + goto yy527; + goto yy506; + } } else { - if (yych <= 0xDF) - goto yy749; - if (yych <= 0xE0) - goto yy750; - goto yy751; + if (yych <= ':') { + if (yych == '\'') + goto yy506; + if (yych <= '9') + goto yy527; + goto yy560; + } else { + if (yych <= ';') + goto yy527; + if (yych <= '=') + goto yy506; + if (yych <= '>') + goto yy514; + goto yy527; + } } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy755; - if (yych <= 0xEF) - goto yy751; - goto yy752; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy560; + if (yych <= '^') + goto yy527; + if (yych <= '_') + goto yy560; + goto yy506; + } else { + if (yych <= 'z') + goto yy560; + if (yych <= 0x7F) + goto yy527; + if (yych <= 0xC1) + goto yy506; + goto yy534; + } } else { - if (yych <= 0xF3) - goto yy753; - if (yych <= 0xF4) - goto yy754; - goto yy707; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy535; + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } } } - yy739: + yy543: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy739; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy707; - if (yych <= '"') - goto yy748; - goto yy707; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy506; + if (yych <= 0x08) + goto yy527; + goto yy543; + } else { + if (yych == ' ') + goto yy543; + if (yych <= '!') + goto yy527; + goto yy530; + } } else { - if (yych <= 0xDF) - goto yy741; - if (yych <= 0xE0) - goto yy742; - goto yy743; + if (yych <= ':') { + if (yych == '\'') + goto yy532; + if (yych <= '9') + goto yy527; + goto yy560; + } else { + if (yych <= ';') + goto yy527; + if (yych <= '=') + goto yy506; + if (yych <= '>') + goto yy514; + goto yy527; + } } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy747; - if (yych <= 0xEF) - goto yy743; - goto yy744; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy560; + if (yych <= '^') + goto yy527; + if (yych <= '_') + goto yy560; + goto yy506; + } else { + if (yych <= 'z') + goto yy560; + if (yych <= 0x7F) + goto yy527; + if (yych <= 0xC1) + goto yy506; + goto yy534; + } } else { - if (yych <= 0xF3) - goto yy745; - if (yych <= 0xF4) - goto yy746; - goto yy707; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy535; + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } } } - yy741: + yy545: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy511; + } + if (yych == '/') + goto yy513; + if (yych == '>') + goto yy514; + goto yy506; + yy546: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy739; - goto yy707; - yy742: + goto yy530; + goto yy506; + yy547: ++p; yych = *p; if (yych <= 0x9F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy741; - goto yy707; - yy743: + goto yy546; + goto yy506; + yy548: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy741; - goto yy707; - yy744: + goto yy546; + goto yy506; + yy549: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x9F) + goto yy546; + goto yy506; + yy550: ++p; yych = *p; if (yych <= 0x8F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy743; - goto yy707; - yy745: + goto yy548; + goto yy506; + yy551: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy743; - goto yy707; - yy746: + goto yy548; + goto yy506; + yy552: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0x8F) - goto yy743; - goto yy707; - yy747: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0x9F) - goto yy741; - goto yy707; - yy748: - ++p; - yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy707; - if (yych <= '\r') - goto yy719; - if (yych <= 0x1F) - goto yy707; - goto yy719; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy707; - goto yy721; - } else { - if (yych == '>') - goto yy713; - goto yy707; - } - } - yy749: + goto yy548; + goto yy506; + yy553: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy737; - goto yy707; - yy750: + goto yy532; + goto yy506; + yy554: ++p; yych = *p; if (yych <= 0x9F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy749; - goto yy707; - yy751: + goto yy553; + goto yy506; + yy555: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy749; - goto yy707; - yy752: + goto yy553; + goto yy506; + yy556: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x9F) + goto yy553; + goto yy506; + yy557: ++p; yych = *p; if (yych <= 0x8F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy751; - goto yy707; - yy753: + goto yy555; + goto yy506; + yy558: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0xBF) - goto yy751; - goto yy707; - yy754: + goto yy555; + goto yy506; + yy559: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy506; if (yych <= 0x8F) - goto yy751; - goto yy707; - yy755: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0x9F) - goto yy749; - goto yy707; - yy756: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy707; - if (yych <= 0x08) - goto yy728; - goto yy756; - } else { - if (yych == ' ') - goto yy756; - if (yych <= '!') - goto yy728; - goto yy707; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy707; - if (yych <= '9') - goto yy728; - } else { - if (yych <= ';') - goto yy728; - if (yych <= '=') - goto yy707; - if (yych <= '>') - goto yy713; - goto yy728; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy758; - if (yych <= '^') - goto yy728; - if (yych >= '`') - goto yy707; - } else { - if (yych <= 'z') - goto yy758; - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) - goto yy707; - goto yy730; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy731; - if (yych == 0xED) - goto yy736; - goto yy732; - } else { - if (yych <= 0xF0) - goto yy733; - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - } - yy758: + goto yy555; + goto yy506; + yy560: ++p; yych = *p; if (yych <= '>') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy707; + goto yy506; if (yych <= 0x08) - goto yy728; + goto yy527; if (yych >= 0x0E) - goto yy728; + goto yy527; } else { if (yych <= ' ') - goto yy760; + goto yy562; if (yych == '"') - goto yy707; - goto yy728; + goto yy506; + goto yy527; } } else { if (yych <= '/') { if (yych <= '\'') - goto yy707; + goto yy506; if (yych <= ',') - goto yy728; + goto yy527; if (yych <= '.') - goto yy758; - goto yy728; + goto yy560; + goto yy527; } else { if (yych <= ';') { if (yych <= ':') - goto yy758; - goto yy728; + goto yy560; + goto yy527; } else { if (yych <= '<') - goto yy707; + goto yy506; if (yych <= '=') - goto yy726; - goto yy713; + goto yy526; + goto yy514; } } } @@ -12425,188 +9096,116 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '_') { if (yych <= '@') - goto yy728; + goto yy527; if (yych <= 'Z') - goto yy758; + goto yy560; if (yych <= '^') - goto yy728; - goto yy758; + goto yy527; + goto yy560; } else { if (yych <= '`') - goto yy707; + goto yy506; if (yych <= 'z') - goto yy758; + goto yy560; if (yych <= 0x7F) - goto yy728; - goto yy707; + goto yy527; + goto yy506; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy730; + goto yy534; if (yych <= 0xE0) - goto yy731; + goto yy535; if (yych <= 0xEC) - goto yy732; - goto yy736; + goto yy536; + goto yy537; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy732; - goto yy733; + goto yy536; + goto yy538; } else { if (yych <= 0xF3) - goto yy734; + goto yy539; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy540; + goto yy506; } } } } - yy760: + yy562: ++p; yych = *p; if (yych <= '@') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy707; + goto yy506; if (yych <= 0x08) - goto yy728; + goto yy527; if (yych <= '\r') - goto yy760; - goto yy728; + goto yy562; + goto yy527; } else { if (yych <= ' ') - goto yy760; + goto yy562; if (yych == '"') - goto yy707; - goto yy728; + goto yy506; + goto yy527; } } else { if (yych <= ';') { if (yych <= '\'') - goto yy707; + goto yy506; if (yych == ':') - goto yy758; - goto yy728; + goto yy560; + goto yy527; } else { if (yych <= '<') - goto yy707; - if (yych <= '=') - goto yy726; - if (yych <= '>') - goto yy713; - goto yy728; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy758; - if (yych <= '^') - goto yy728; - if (yych <= '_') - goto yy758; - goto yy707; - } else { - if (yych <= 'z') - goto yy758; - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) - goto yy707; - goto yy730; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy731; - if (yych == 0xED) - goto yy736; - goto yy732; - } else { - if (yych <= 0xF0) - goto yy733; - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - } - yy762: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy707; - if (yych <= 0x08) - goto yy728; - goto yy762; - } else { - if (yych == ' ') - goto yy762; - if (yych <= '!') - goto yy728; - goto yy739; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy737; - if (yych <= '9') - goto yy728; - goto yy758; - } else { - if (yych <= ';') - goto yy728; + goto yy506; if (yych <= '=') - goto yy707; + goto yy526; if (yych <= '>') - goto yy713; - goto yy728; + goto yy514; + goto yy527; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy758; + goto yy560; if (yych <= '^') - goto yy728; + goto yy527; if (yych <= '_') - goto yy758; - goto yy707; + goto yy560; + goto yy506; } else { if (yych <= 'z') - goto yy758; + goto yy560; if (yych <= 0x7F) - goto yy728; + goto yy527; if (yych <= 0xC1) - goto yy707; - goto yy730; + goto yy506; + goto yy534; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy731; + goto yy535; if (yych == 0xED) - goto yy736; - goto yy732; + goto yy537; + goto yy536; } else { if (yych <= 0xF0) - goto yy733; + goto yy538; if (yych <= 0xF3) - goto yy734; + goto yy539; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy540; + goto yy506; } } } @@ -12642,820 +9241,785 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych == '\n') - goto yy768; + goto yy568; } else { if (yych <= '<') - goto yy769; + goto yy569; if (yych <= 0x7F) - goto yy766; + goto yy566; if (yych <= 0xC1) - goto yy768; - goto yy770; + goto yy568; + goto yy570; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy771; + goto yy571; if (yych == 0xED) - goto yy773; - goto yy772; + goto yy573; + goto yy572; } else { if (yych <= 0xF0) - goto yy774; + goto yy574; if (yych <= 0xF3) - goto yy775; + goto yy575; if (yych <= 0xF4) - goto yy776; - goto yy768; + goto yy576; + goto yy568; } } - yy766: + yy566: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy781; + goto yy578; } else { if (yych <= 0xC1) - goto yy767; + goto yy567; if (yych <= 0xF4) - goto yy781; + goto yy578; } - yy767 : { return 0; } - yy768: + yy567 : { return 0; } + yy568: yych = *++p; - goto yy767; - yy769: + goto yy567; + yy569: yyaccept = 0; yych = *(marker = ++p); if (yych <= '/') { if (yych == '\n') - goto yy767; + goto yy567; if (yych <= '.') - goto yy781; - goto yy789; + goto yy578; + goto yy589; } else { if (yych <= 0x7F) - goto yy781; + goto yy578; if (yych <= 0xC1) - goto yy767; + goto yy567; if (yych <= 0xF4) - goto yy781; - goto yy767; + goto yy578; + goto yy567; } - yy770: + yy570: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy567; if (yych <= 0xBF) - goto yy780; - goto yy767; - yy771: + goto yy577; + goto yy567; + yy571: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy767; + goto yy567; if (yych <= 0xBF) - goto yy779; - goto yy767; - yy772: + goto yy582; + goto yy567; + yy572: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy567; if (yych <= 0xBF) - goto yy779; - goto yy767; - yy773: + goto yy582; + goto yy567; + yy573: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy567; if (yych <= 0x9F) - goto yy779; - goto yy767; - yy774: + goto yy582; + goto yy567; + yy574: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy767; + goto yy567; if (yych <= 0xBF) - goto yy777; - goto yy767; - yy775: + goto yy584; + goto yy567; + yy575: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy567; if (yych <= 0xBF) - goto yy777; - goto yy767; - yy776: + goto yy584; + goto yy567; + yy576: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; - if (yych >= 0x90) - goto yy767; - yy777: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy778; - if (yych <= 0xBF) - goto yy779; - yy778: - p = marker; - if (yyaccept == 0) { - goto yy767; - } else { - goto yy795; - } - yy779: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy778; - if (yych >= 0xC0) - goto yy778; - yy780: + goto yy567; + if (yych <= 0x8F) + goto yy584; + goto yy567; + yy577: ++p; yych = *p; - yy781: + yy578: if (yybm[0 + yych] & 64) { - goto yy780; + goto yy577; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy778; - if (yych >= '=') - goto yy778; + goto yy579; + if (yych <= '<') + goto yy580; } else { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; - goto yy777; + goto yy583; + goto yy584; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy788; + goto yy585; if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; } } - yy782: + yy579: + p = marker; + if (yyaccept == 0) { + goto yy567; + } else { + goto yy599; + } + yy580: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xDF) { if (yych <= '.') { if (yych == '\n') - goto yy778; - goto yy780; + goto yy579; + goto yy577; } else { if (yych <= '/') - goto yy789; + goto yy589; if (yych <= 0x7F) - goto yy780; + goto yy577; if (yych <= 0xC1) - goto yy778; - goto yy779; + goto yy579; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych == 0xED) - goto yy788; - goto yy777; + goto yy585; + goto yy584; } else { if (yych <= 0xF0) - goto yy785; + goto yy586; if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } - yy784: + yy582: ++p; yych = *p; - if (yych <= 0x9F) - goto yy778; + if (yych <= 0x7F) + goto yy579; if (yych <= 0xBF) - goto yy779; - goto yy778; - yy785: + goto yy577; + goto yy579; + yy583: ++p; yych = *p; - if (yych <= 0x8F) - goto yy778; + if (yych <= 0x9F) + goto yy579; if (yych <= 0xBF) - goto yy777; - goto yy778; - yy786: + goto yy582; + goto yy579; + yy584: ++p; yych = *p; if (yych <= 0x7F) - goto yy778; + goto yy579; if (yych <= 0xBF) - goto yy777; - goto yy778; - yy787: + goto yy582; + goto yy579; + yy585: ++p; yych = *p; if (yych <= 0x7F) - goto yy778; + goto yy579; + if (yych <= 0x9F) + goto yy582; + goto yy579; + yy586: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy777; - goto yy778; - yy788: + goto yy579; + if (yych <= 0xBF) + goto yy584; + goto yy579; + yy587: ++p; yych = *p; if (yych <= 0x7F) - goto yy778; - if (yych <= 0x9F) - goto yy779; - goto yy778; - yy789: + goto yy579; + if (yych <= 0xBF) + goto yy584; + goto yy579; + yy588: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy579; + if (yych <= 0x8F) + goto yy584; + goto yy579; + yy589: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 's') { if (yych <= 'R') { if (yych <= '\n') { if (yych <= '\t') - goto yy780; - goto yy778; + goto yy577; + goto yy579; } else { - if (yych == 'P') - goto yy791; - goto yy780; + if (yych != 'P') + goto yy577; } } else { if (yych <= 'o') { - if (yych >= 'T') - goto yy780; + if (yych <= 'S') + goto yy591; + goto yy577; } else { if (yych <= 'p') - goto yy791; + goto yy590; if (yych <= 'r') - goto yy780; + goto yy577; + goto yy591; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } else { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; - goto yy777; + goto yy583; + goto yy584; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy585; + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; } + } + } + yy590: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') + goto yy579; + if (yych <= 'Q') + goto yy577; + goto yy592; + } else { + if (yych == 'r') + goto yy592; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy788; if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } + yy591: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 't') { if (yych <= 'S') { if (yych <= '\n') { if (yych <= '\t') - goto yy780; - goto yy778; + goto yy577; + goto yy579; } else { if (yych == 'C') - goto yy796; - goto yy780; + goto yy593; + goto yy577; } } else { if (yych <= 'b') { if (yych <= 'T') - goto yy797; - goto yy780; + goto yy594; + goto yy577; } else { if (yych <= 'c') - goto yy796; + goto yy593; if (yych <= 's') - goto yy780; - goto yy797; + goto yy577; + goto yy594; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } else { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; - goto yy777; + goto yy583; + goto yy584; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy788; - if (yych <= 0xEF) - goto yy777; - goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } - } - } - yy791: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy782; - } - if (yych <= 0xC1) { - if (yych <= 'R') { - if (yych == '\n') - goto yy778; - if (yych <= 'Q') - goto yy780; - } else { - if (yych == 'r') - goto yy792; - if (yych <= 0x7F) - goto yy780; - goto yy778; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; - if (yych <= 0xE0) - goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; - } else { - if (yych <= 0xF0) { + goto yy585; if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy792: + yy592: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { if (yych <= 'E') { if (yych == '\n') - goto yy778; + goto yy579; if (yych <= 'D') - goto yy780; + goto yy577; + goto yy595; } else { if (yych == 'e') - goto yy793; + goto yy595; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy793: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy782; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') - goto yy778; - goto yy780; - } else { - if (yych <= '>') - goto yy794; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) - goto yy778; - goto yy779; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; - } else { - if (yych <= 0xF0) - goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } - } - yy794: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy780; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy795; - if (yych <= '<') - goto yy782; - } else { - if (yych <= 0xDF) - goto yy779; - if (yych <= 0xE0) - goto yy784; - goto yy777; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy788; - if (yych <= 0xEF) - goto yy777; - goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - } - } - yy795 : { return (bufsize_t)(p - start); } - yy796: + yy593: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy778; + goto yy579; if (yych <= 'Q') - goto yy780; - goto yy800; + goto yy577; + goto yy596; } else { if (yych == 'r') - goto yy800; + goto yy596; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy797: + yy594: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { if (yych <= 'Y') { if (yych == '\n') - goto yy778; + goto yy579; if (yych <= 'X') - goto yy780; + goto yy577; + goto yy597; } else { if (yych == 'y') - goto yy798; + goto yy597; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy798: + yy595: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } - if (yych <= 0xC1) { - if (yych <= 'L') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych == '\n') - goto yy778; - if (yych <= 'K') - goto yy780; + goto yy579; + goto yy577; } else { - if (yych == 'l') - goto yy799; + if (yych <= '>') + goto yy598; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + if (yych <= 0xC1) + goto yy579; + goto yy582; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy583; + if (yych == 0xED) + goto yy585; + goto yy584; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; - goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF0) + goto yy586; + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; } } - yy799: + yy596: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { - if (yych <= 'E') { + if (yych <= 'I') { if (yych == '\n') - goto yy778; - if (yych <= 'D') - goto yy780; - goto yy793; + goto yy579; + if (yych <= 'H') + goto yy577; + goto yy600; } else { - if (yych == 'e') - goto yy793; + if (yych == 'i') + goto yy600; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy800: + yy597: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { - if (yych <= 'I') { + if (yych <= 'L') { if (yych == '\n') - goto yy778; - if (yych <= 'H') - goto yy780; + goto yy579; + if (yych <= 'K') + goto yy577; + goto yy592; } else { - if (yych == 'i') - goto yy801; + if (yych == 'l') + goto yy592; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy801: + yy598: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy577; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy599; + if (yych <= '<') + goto yy580; + } else { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + goto yy584; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy585; + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + } + } + yy599 : { return (bufsize_t)(p - start); } + yy600: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { if (yych <= 'P') { if (yych == '\n') - goto yy778; + goto yy579; if (yych <= 'O') - goto yy780; + goto yy577; } else { if (yych == 'p') - goto yy802; + goto yy601; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } - yy802: + yy601: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy580; } if (yych <= 0xC1) { if (yych <= 'T') { if (yych == '\n') - goto yy778; + goto yy579; if (yych <= 'S') - goto yy780; - goto yy793; + goto yy577; + goto yy595; } else { if (yych == 't') - goto yy793; + goto yy595; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy577; + goto yy579; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy582; if (yych <= 0xE0) - goto yy784; + goto yy583; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy584; + goto yy585; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy584; + goto yy586; } else { if (yych <= 0xF3) - goto yy786; + goto yy587; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy588; + goto yy579; } } } @@ -13491,323 +10055,326 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ',') { if (yych == '\n') - goto yy807; + goto yy606; } else { if (yych <= '-') - goto yy808; + goto yy607; if (yych <= 0x7F) - goto yy805; + goto yy604; if (yych <= 0xC1) - goto yy807; - goto yy809; + goto yy606; + goto yy608; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy810; + goto yy609; if (yych == 0xED) - goto yy812; - goto yy811; + goto yy611; + goto yy610; } else { if (yych <= 0xF0) - goto yy813; + goto yy612; if (yych <= 0xF3) - goto yy814; + goto yy613; if (yych <= 0xF4) - goto yy815; - goto yy807; + goto yy614; + goto yy606; } } - yy805: + yy604: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy820; + goto yy616; } else { if (yych <= 0xC1) - goto yy806; + goto yy605; if (yych <= 0xF4) - goto yy820; + goto yy616; } - yy806 : { return 0; } - yy807: + yy605 : { return 0; } + yy606: yych = *++p; - goto yy806; - yy808: + goto yy605; + yy607: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy827; + goto yy626; } if (yych <= 0x7F) { if (yych == '\n') - goto yy806; - goto yy820; + goto yy605; + goto yy616; } else { if (yych <= 0xC1) - goto yy806; + goto yy605; if (yych <= 0xF4) - goto yy820; - goto yy806; + goto yy616; + goto yy605; } - yy809: + yy608: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy605; if (yych <= 0xBF) - goto yy819; - goto yy806; - yy810: + goto yy615; + goto yy605; + yy609: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy806; + goto yy605; if (yych <= 0xBF) - goto yy818; - goto yy806; - yy811: + goto yy619; + goto yy605; + yy610: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy605; if (yych <= 0xBF) - goto yy818; - goto yy806; - yy812: + goto yy619; + goto yy605; + yy611: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy605; if (yych <= 0x9F) - goto yy818; - goto yy806; - yy813: + goto yy619; + goto yy605; + yy612: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy806; + goto yy605; if (yych <= 0xBF) - goto yy816; - goto yy806; - yy814: + goto yy621; + goto yy605; + yy613: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy605; if (yych <= 0xBF) - goto yy816; - goto yy806; - yy815: + goto yy621; + goto yy605; + yy614: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; - if (yych >= 0x90) - goto yy806; - yy816: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy817; - if (yych <= 0xBF) - goto yy818; - yy817: - p = marker; - if (yyaccept == 0) { - goto yy806; - } else { - goto yy830; - } - yy818: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy817; - if (yych >= 0xC0) - goto yy817; - yy819: + goto yy605; + if (yych <= 0x8F) + goto yy621; + goto yy605; + yy615: ++p; yych = *p; - yy820: + yy616: if (yybm[0 + yych] & 64) { - goto yy819; + goto yy615; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy817; - if (yych >= '.') - goto yy817; + goto yy617; + if (yych <= '-') + goto yy618; } else { if (yych <= 0xDF) - goto yy818; + goto yy619; if (yych <= 0xE0) - goto yy822; - goto yy816; + goto yy620; + goto yy621; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy826; + goto yy622; if (yych <= 0xEF) - goto yy816; - goto yy823; + goto yy621; + goto yy623; } else { if (yych <= 0xF3) - goto yy824; + goto yy624; if (yych <= 0xF4) - goto yy825; - goto yy817; + goto yy625; } } - yy821: + yy617: + p = marker; + if (yyaccept == 0) { + goto yy605; + } else { + goto yy629; + } + yy618: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy819; + goto yy615; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy817; + goto yy617; if (yych <= '-') - goto yy827; - goto yy817; + goto yy626; + goto yy617; } else { if (yych <= 0xDF) - goto yy818; - if (yych >= 0xE1) - goto yy816; + goto yy619; + if (yych <= 0xE0) + goto yy620; + goto yy621; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy826; + goto yy622; if (yych <= 0xEF) - goto yy816; - goto yy823; + goto yy621; + goto yy623; } else { if (yych <= 0xF3) - goto yy824; + goto yy624; if (yych <= 0xF4) - goto yy825; - goto yy817; + goto yy625; + goto yy617; } } - yy822: + yy619: ++p; yych = *p; - if (yych <= 0x9F) - goto yy817; + if (yych <= 0x7F) + goto yy617; if (yych <= 0xBF) - goto yy818; - goto yy817; - yy823: + goto yy615; + goto yy617; + yy620: ++p; yych = *p; - if (yych <= 0x8F) - goto yy817; + if (yych <= 0x9F) + goto yy617; if (yych <= 0xBF) - goto yy816; - goto yy817; - yy824: + goto yy619; + goto yy617; + yy621: ++p; yych = *p; if (yych <= 0x7F) - goto yy817; + goto yy617; if (yych <= 0xBF) - goto yy816; - goto yy817; - yy825: + goto yy619; + goto yy617; + yy622: ++p; yych = *p; if (yych <= 0x7F) - goto yy817; + goto yy617; + if (yych <= 0x9F) + goto yy619; + goto yy617; + yy623: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy816; - goto yy817; - yy826: + goto yy617; + if (yych <= 0xBF) + goto yy621; + goto yy617; + yy624: ++p; yych = *p; if (yych <= 0x7F) - goto yy817; - if (yych <= 0x9F) - goto yy818; - goto yy817; - yy827: + goto yy617; + if (yych <= 0xBF) + goto yy621; + goto yy617; + yy625: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy617; + if (yych <= 0x8F) + goto yy621; + goto yy617; + yy626: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy827; + goto yy626; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy817; - goto yy819; + goto yy617; + goto yy615; } else { if (yych <= '>') - goto yy829; + goto yy628; if (yych <= 0x7F) - goto yy819; + goto yy615; if (yych <= 0xC1) - goto yy817; - goto yy818; + goto yy617; + goto yy619; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy822; + goto yy620; if (yych == 0xED) - goto yy826; - goto yy816; + goto yy622; + goto yy621; } else { if (yych <= 0xF0) - goto yy823; + goto yy623; if (yych <= 0xF3) - goto yy824; + goto yy624; if (yych <= 0xF4) - goto yy825; - goto yy817; + goto yy625; + goto yy617; } } - yy829: + yy628: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy819; + goto yy615; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy830; + goto yy629; if (yych <= '-') - goto yy821; + goto yy618; } else { if (yych <= 0xDF) - goto yy818; + goto yy619; if (yych <= 0xE0) - goto yy822; - goto yy816; + goto yy620; + goto yy621; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy826; + goto yy622; if (yych <= 0xEF) - goto yy816; - goto yy823; + goto yy621; + goto yy623; } else { if (yych <= 0xF3) - goto yy824; + goto yy624; if (yych <= 0xF4) - goto yy825; + goto yy625; } } - yy830 : { return (bufsize_t)(p - start); } + yy629 : { return (bufsize_t)(p - start); } } } @@ -13840,290 +10407,291 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '>') { if (yych == '\n') - goto yy835; + goto yy634; } else { if (yych <= '?') - goto yy836; + goto yy635; if (yych <= 0x7F) - goto yy833; + goto yy632; if (yych <= 0xC1) - goto yy835; - goto yy837; + goto yy634; + goto yy636; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy838; + goto yy637; if (yych == 0xED) - goto yy840; - goto yy839; + goto yy639; + goto yy638; } else { if (yych <= 0xF0) - goto yy841; + goto yy640; if (yych <= 0xF3) - goto yy842; + goto yy641; if (yych <= 0xF4) - goto yy843; - goto yy835; + goto yy642; + goto yy634; } } - yy833: + yy632: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy848; + goto yy644; } else { if (yych <= 0xC1) - goto yy834; + goto yy633; if (yych <= 0xF4) - goto yy848; + goto yy644; } - yy834 : { return 0; } - yy835: + yy633 : { return 0; } + yy634: yych = *++p; - goto yy834; - yy836: + goto yy633; + yy635: yyaccept = 0; yych = *(marker = ++p); if (yych <= '>') { if (yych == '\n') - goto yy834; + goto yy633; if (yych <= '=') - goto yy848; - goto yy856; + goto yy644; + goto yy655; } else { if (yych <= 0x7F) - goto yy848; + goto yy644; if (yych <= 0xC1) - goto yy834; + goto yy633; if (yych <= 0xF4) - goto yy848; - goto yy834; + goto yy644; + goto yy633; } - yy837: + yy636: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy633; if (yych <= 0xBF) - goto yy847; - goto yy834; - yy838: + goto yy643; + goto yy633; + yy637: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy834; + goto yy633; if (yych <= 0xBF) - goto yy846; - goto yy834; - yy839: + goto yy648; + goto yy633; + yy638: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy633; if (yych <= 0xBF) - goto yy846; - goto yy834; - yy840: + goto yy648; + goto yy633; + yy639: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy633; if (yych <= 0x9F) - goto yy846; - goto yy834; - yy841: + goto yy648; + goto yy633; + yy640: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy834; + goto yy633; if (yych <= 0xBF) - goto yy844; - goto yy834; - yy842: + goto yy650; + goto yy633; + yy641: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy633; if (yych <= 0xBF) - goto yy844; - goto yy834; - yy843: + goto yy650; + goto yy633; + yy642: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; - if (yych >= 0x90) - goto yy834; - yy844: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy845; - if (yych <= 0xBF) - goto yy846; - yy845: - p = marker; - if (yyaccept == 0) { - goto yy834; - } else { - goto yy857; - } - yy846: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy845; - if (yych >= 0xC0) - goto yy845; - yy847: + goto yy633; + if (yych <= 0x8F) + goto yy650; + goto yy633; + yy643: ++p; yych = *p; - yy848: + yy644: if (yybm[0 + yych] & 64) { - goto yy847; + goto yy643; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy845; - if (yych >= '@') - goto yy845; + goto yy645; + if (yych <= '?') + goto yy646; } else { if (yych <= 0xDF) - goto yy846; + goto yy648; if (yych <= 0xE0) - goto yy851; - goto yy844; + goto yy649; + goto yy650; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy855; + goto yy651; if (yych <= 0xEF) - goto yy844; - goto yy852; + goto yy650; + goto yy652; } else { if (yych <= 0xF3) - goto yy853; + goto yy653; if (yych <= 0xF4) - goto yy854; - goto yy845; + goto yy654; } } - yy849: + yy645: + p = marker; + if (yyaccept == 0) { + goto yy633; + } else { + goto yy656; + } + yy646: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy849; + goto yy646; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy845; - goto yy847; + goto yy645; + goto yy643; } else { if (yych <= '>') - goto yy856; + goto yy655; if (yych <= 0x7F) - goto yy847; + goto yy643; if (yych <= 0xC1) - goto yy845; - goto yy846; + goto yy645; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy851; + goto yy649; if (yych == 0xED) - goto yy855; - goto yy844; + goto yy651; + goto yy650; } else { if (yych <= 0xF0) - goto yy852; + goto yy652; if (yych <= 0xF3) - goto yy853; + goto yy653; if (yych <= 0xF4) - goto yy854; - goto yy845; + goto yy654; + goto yy645; } } - yy851: + yy648: ++p; yych = *p; - if (yych <= 0x9F) - goto yy845; + if (yych <= 0x7F) + goto yy645; if (yych <= 0xBF) - goto yy846; - goto yy845; - yy852: + goto yy643; + goto yy645; + yy649: ++p; yych = *p; - if (yych <= 0x8F) - goto yy845; + if (yych <= 0x9F) + goto yy645; if (yych <= 0xBF) - goto yy844; - goto yy845; - yy853: + goto yy648; + goto yy645; + yy650: ++p; yych = *p; if (yych <= 0x7F) - goto yy845; + goto yy645; if (yych <= 0xBF) - goto yy844; - goto yy845; - yy854: + goto yy648; + goto yy645; + yy651: ++p; yych = *p; if (yych <= 0x7F) - goto yy845; + goto yy645; + if (yych <= 0x9F) + goto yy648; + goto yy645; + yy652: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy844; - goto yy845; - yy855: + goto yy645; + if (yych <= 0xBF) + goto yy650; + goto yy645; + yy653: ++p; yych = *p; if (yych <= 0x7F) - goto yy845; - if (yych <= 0x9F) - goto yy846; - goto yy845; - yy856: + goto yy645; + if (yych <= 0xBF) + goto yy650; + goto yy645; + yy654: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy645; + if (yych <= 0x8F) + goto yy650; + goto yy645; + yy655: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy847; + goto yy643; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy857; + goto yy656; if (yych <= '?') - goto yy849; + goto yy646; } else { if (yych <= 0xDF) - goto yy846; + goto yy648; if (yych <= 0xE0) - goto yy851; - goto yy844; + goto yy649; + goto yy650; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy855; + goto yy651; if (yych <= 0xEF) - goto yy844; - goto yy852; + goto yy650; + goto yy652; } else { if (yych <= 0xF3) - goto yy853; + goto yy653; if (yych <= 0xF4) - goto yy854; + goto yy654; } } - yy857 : { return (bufsize_t)(p - start); } + yy656 : { return (bufsize_t)(p - start); } } } @@ -14136,268 +10704,259 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 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, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= '=') { + if (yybm[0 + yych] & 64) { + goto yy662; + } + if (yych <= 0xE0) { + if (yych <= 0x7F) { if (yych == '\n') - goto yy862; + goto yy661; } else { - if (yych <= '>') - goto yy863; - if (yych <= 0x7F) - goto yy860; if (yych <= 0xC1) - goto yy862; - goto yy865; + goto yy661; + if (yych <= 0xDF) + goto yy665; + goto yy666; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy866; if (yych == 0xED) - goto yy868; - goto yy867; + goto yy668; + goto yy667; } else { if (yych <= 0xF0) - goto yy869; + goto yy669; + if (yych <= 0xF3) + goto yy670; + if (yych <= 0xF4) + goto yy671; + goto yy661; + } + } + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy673; + } else { + if (yych <= 0xC1) + goto yy660; + if (yych <= 0xF4) + goto yy673; + } + yy660 : { return 0; } + yy661: + yych = *++p; + goto yy660; + yy662: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy672; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy664; + if (yych <= '>') + goto yy662; + } else { + if (yych <= 0xDF) + goto yy675; + if (yych <= 0xE0) + goto yy676; + goto yy677; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy678; + if (yych <= 0xEF) + goto yy677; + goto yy679; + } else { if (yych <= 0xF3) - goto yy870; + goto yy680; if (yych <= 0xF4) - goto yy871; - goto yy862; + goto yy681; } } - yy860: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy876; - } else { - if (yych <= 0xC1) - goto yy861; - if (yych <= 0xF4) - goto yy876; - } - yy861 : { return 0; } - yy862: - yych = *++p; - goto yy861; - yy863: - yyaccept = 1; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy876; - } else { - if (yych <= 0xC1) - goto yy864; - if (yych <= 0xF4) - goto yy876; - } - yy864 : { return (bufsize_t)(p - start); } - yy865: + yy664 : { return (bufsize_t)(p - start); } + yy665: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy660; if (yych <= 0xBF) - goto yy875; - goto yy861; - yy866: + goto yy672; + goto yy660; + yy666: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy861; + goto yy660; if (yych <= 0xBF) - goto yy874; - goto yy861; - yy867: + goto yy675; + goto yy660; + yy667: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy660; if (yych <= 0xBF) - goto yy874; - goto yy861; - yy868: + goto yy675; + goto yy660; + yy668: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy660; if (yych <= 0x9F) - goto yy874; - goto yy861; - yy869: + goto yy675; + goto yy660; + yy669: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy861; + goto yy660; if (yych <= 0xBF) - goto yy872; - goto yy861; - yy870: + goto yy677; + goto yy660; + yy670: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy660; if (yych <= 0xBF) - goto yy872; - goto yy861; - yy871: + goto yy677; + goto yy660; + yy671: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; - if (yych >= 0x90) - goto yy861; - yy872: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy873; - if (yych <= 0xBF) - goto yy874; - yy873: - p = marker; - if (yyaccept == 0) { - goto yy861; - } else { - goto yy864; - } - yy874: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy873; - if (yych >= 0xC0) - goto yy873; - yy875: + goto yy660; + if (yych <= 0x8F) + goto yy677; + goto yy660; + yy672: ++p; yych = *p; - yy876: - if (yybm[0 + yych] & 64) { - goto yy875; + yy673: + if (yybm[0 + yych] & 128) { + goto yy672; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy873; - if (yych >= '?') - goto yy873; + goto yy674; + if (yych <= '>') + goto yy662; } else { if (yych <= 0xDF) - goto yy874; + goto yy675; if (yych <= 0xE0) - goto yy879; - goto yy872; + goto yy676; + goto yy677; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy883; + goto yy678; if (yych <= 0xEF) - goto yy872; - goto yy880; + goto yy677; + goto yy679; } else { if (yych <= 0xF3) - goto yy881; + goto yy680; if (yych <= 0xF4) - goto yy882; - goto yy873; + goto yy681; } } - yy877: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy875; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy864; - if (yych <= '>') - goto yy877; - goto yy864; - } else { - if (yych <= 0xDF) - goto yy874; - if (yych >= 0xE1) - goto yy872; - } + yy674: + p = marker; + if (yyaccept == 0) { + goto yy660; } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy883; - if (yych <= 0xEF) - goto yy872; - goto yy880; - } else { - if (yych <= 0xF3) - goto yy881; - if (yych <= 0xF4) - goto yy882; - goto yy864; - } + goto yy664; } - yy879: + yy675: ++p; yych = *p; - if (yych <= 0x9F) - goto yy873; + if (yych <= 0x7F) + goto yy674; if (yych <= 0xBF) - goto yy874; - goto yy873; - yy880: + goto yy672; + goto yy674; + yy676: ++p; yych = *p; - if (yych <= 0x8F) - goto yy873; + if (yych <= 0x9F) + goto yy674; if (yych <= 0xBF) - goto yy872; - goto yy873; - yy881: + goto yy675; + goto yy674; + yy677: ++p; yych = *p; if (yych <= 0x7F) - goto yy873; + goto yy674; if (yych <= 0xBF) - goto yy872; - goto yy873; - yy882: + goto yy675; + goto yy674; + yy678: ++p; yych = *p; if (yych <= 0x7F) - goto yy873; + goto yy674; + if (yych <= 0x9F) + goto yy675; + goto yy674; + yy679: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy872; - goto yy873; - yy883: + goto yy674; + if (yych <= 0xBF) + goto yy677; + goto yy674; + yy680: ++p; yych = *p; if (yych <= 0x7F) - goto yy873; - if (yych <= 0x9F) - goto yy874; - goto yy873; + goto yy674; + if (yych <= 0xBF) + goto yy677; + goto yy674; + yy681: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy674; + if (yych <= 0x8F) + goto yy677; + goto yy674; } } @@ -14430,323 +10989,326 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '\\') { if (yych == '\n') - goto yy888; + goto yy686; } else { if (yych <= ']') - goto yy889; + goto yy687; if (yych <= 0x7F) - goto yy886; + goto yy684; if (yych <= 0xC1) - goto yy888; - goto yy890; + goto yy686; + goto yy688; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy891; + goto yy689; if (yych == 0xED) - goto yy893; - goto yy892; + goto yy691; + goto yy690; } else { if (yych <= 0xF0) - goto yy894; + goto yy692; if (yych <= 0xF3) - goto yy895; + goto yy693; if (yych <= 0xF4) - goto yy896; - goto yy888; + goto yy694; + goto yy686; } } - yy886: + yy684: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy901; + goto yy696; } else { if (yych <= 0xC1) - goto yy887; + goto yy685; if (yych <= 0xF4) - goto yy901; + goto yy696; } - yy887 : { return 0; } - yy888: + yy685 : { return 0; } + yy686: yych = *++p; - goto yy887; - yy889: + goto yy685; + yy687: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy908; + goto yy706; } if (yych <= 0x7F) { if (yych == '\n') - goto yy887; - goto yy901; + goto yy685; + goto yy696; } else { if (yych <= 0xC1) - goto yy887; + goto yy685; if (yych <= 0xF4) - goto yy901; - goto yy887; + goto yy696; + goto yy685; } - yy890: + yy688: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy685; if (yych <= 0xBF) - goto yy900; - goto yy887; - yy891: + goto yy695; + goto yy685; + yy689: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy887; + goto yy685; if (yych <= 0xBF) - goto yy899; - goto yy887; - yy892: + goto yy699; + goto yy685; + yy690: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy685; if (yych <= 0xBF) - goto yy899; - goto yy887; - yy893: + goto yy699; + goto yy685; + yy691: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy685; if (yych <= 0x9F) - goto yy899; - goto yy887; - yy894: + goto yy699; + goto yy685; + yy692: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy887; + goto yy685; if (yych <= 0xBF) - goto yy897; - goto yy887; - yy895: + goto yy701; + goto yy685; + yy693: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy685; if (yych <= 0xBF) - goto yy897; - goto yy887; - yy896: + goto yy701; + goto yy685; + yy694: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; - if (yych >= 0x90) - goto yy887; - yy897: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy898; - if (yych <= 0xBF) - goto yy899; - yy898: - p = marker; - if (yyaccept == 0) { - goto yy887; - } else { - goto yy911; - } - yy899: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy898; - if (yych >= 0xC0) - goto yy898; - yy900: + goto yy685; + if (yych <= 0x8F) + goto yy701; + goto yy685; + yy695: ++p; yych = *p; - yy901: + yy696: if (yybm[0 + yych] & 64) { - goto yy900; + goto yy695; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy898; - if (yych >= '^') - goto yy898; + goto yy697; + if (yych <= ']') + goto yy698; } else { if (yych <= 0xDF) - goto yy899; + goto yy699; if (yych <= 0xE0) - goto yy903; - goto yy897; + goto yy700; + goto yy701; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy907; + goto yy702; if (yych <= 0xEF) - goto yy897; - goto yy904; + goto yy701; + goto yy703; } else { if (yych <= 0xF3) - goto yy905; + goto yy704; if (yych <= 0xF4) - goto yy906; - goto yy898; + goto yy705; } } - yy902: + yy697: + p = marker; + if (yyaccept == 0) { + goto yy685; + } else { + goto yy709; + } + yy698: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy900; + goto yy695; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy898; + goto yy697; if (yych <= ']') - goto yy908; - goto yy898; + goto yy706; + goto yy697; } else { if (yych <= 0xDF) - goto yy899; - if (yych >= 0xE1) - goto yy897; + goto yy699; + if (yych <= 0xE0) + goto yy700; + goto yy701; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy907; + goto yy702; if (yych <= 0xEF) - goto yy897; - goto yy904; + goto yy701; + goto yy703; } else { if (yych <= 0xF3) - goto yy905; + goto yy704; if (yych <= 0xF4) - goto yy906; - goto yy898; + goto yy705; + goto yy697; } } - yy903: + yy699: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0xBF) + goto yy695; + goto yy697; + yy700: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy697; + if (yych <= 0xBF) + goto yy699; + goto yy697; + yy701: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0xBF) + goto yy699; + goto yy697; + yy702: ++p; yych = *p; + if (yych <= 0x7F) + goto yy697; if (yych <= 0x9F) - goto yy898; - if (yych <= 0xBF) - goto yy899; - goto yy898; - yy904: + goto yy699; + goto yy697; + yy703: ++p; yych = *p; if (yych <= 0x8F) - goto yy898; + goto yy697; if (yych <= 0xBF) - goto yy897; - goto yy898; - yy905: + goto yy701; + goto yy697; + yy704: ++p; yych = *p; if (yych <= 0x7F) - goto yy898; + goto yy697; if (yych <= 0xBF) - goto yy897; - goto yy898; - yy906: + goto yy701; + goto yy697; + yy705: ++p; yych = *p; if (yych <= 0x7F) - goto yy898; + goto yy697; if (yych <= 0x8F) - goto yy897; - goto yy898; - yy907: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy898; - if (yych <= 0x9F) - goto yy899; - goto yy898; - yy908: + goto yy701; + goto yy697; + yy706: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy908; + goto yy706; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy898; - goto yy900; + goto yy697; + goto yy695; } else { if (yych <= '>') - goto yy910; + goto yy708; if (yych <= 0x7F) - goto yy900; + goto yy695; if (yych <= 0xC1) - goto yy898; - goto yy899; + goto yy697; + goto yy699; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy903; + goto yy700; if (yych == 0xED) - goto yy907; - goto yy897; + goto yy702; + goto yy701; } else { if (yych <= 0xF0) - goto yy904; + goto yy703; if (yych <= 0xF3) - goto yy905; + goto yy704; if (yych <= 0xF4) - goto yy906; - goto yy898; + goto yy705; + goto yy697; } } - yy910: + yy708: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy900; + goto yy695; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy911; + goto yy709; if (yych <= ']') - goto yy902; + goto yy698; } else { if (yych <= 0xDF) - goto yy899; + goto yy699; if (yych <= 0xE0) - goto yy903; - goto yy897; + goto yy700; + goto yy701; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy907; + goto yy702; if (yych <= 0xEF) - goto yy897; - goto yy904; + goto yy701; + goto yy703; } else { if (yych <= 0xF3) - goto yy905; + goto yy704; if (yych <= 0xF4) - goto yy906; + goto yy705; } } - yy911 : { return (bufsize_t)(p - start); } + yy709 : { return (bufsize_t)(p - start); } } } @@ -14761,16 +11323,16 @@ bufsize_t _scan_link_title(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14784,558 +11346,556 @@ bufsize_t _scan_link_title(const unsigned char *p) { yych = *p; if (yych <= '&') { if (yych == '"') - goto yy916; + goto yy714; } else { if (yych <= '\'') - goto yy917; + goto yy715; if (yych <= '(') - goto yy918; + goto yy716; } ++p; - yy915 : { return 0; } - yy916: + yy713 : { return 0; } + yy714: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy915; + goto yy713; if (yych <= 0x7F) - goto yy951; + goto yy718; if (yych <= 0xC1) - goto yy915; + goto yy713; if (yych <= 0xF4) - goto yy951; - goto yy915; - yy917: + goto yy718; + goto yy713; + yy715: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy915; + goto yy713; if (yych <= 0x7F) - goto yy937; + goto yy732; if (yych <= 0xC1) - goto yy915; + goto yy713; if (yych <= 0xF4) - goto yy937; - goto yy915; - yy918: + goto yy732; + goto yy713; + yy716: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy915; + goto yy713; if (yych <= 0x7F) - goto yy923; + goto yy745; if (yych <= 0xC1) - goto yy915; + goto yy713; if (yych <= 0xF4) - goto yy923; - goto yy915; - yy919: + goto yy745; + goto yy713; + yy717: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy922; + yy718: + if (yybm[0 + yych] & 16) { + goto yy717; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= ')') - goto yy933; - goto yy919; + goto yy719; + if (yych <= '"') + goto yy720; + goto yy722; } else { if (yych <= 0xC1) - goto yy921; + goto yy719; if (yych <= 0xDF) - goto yy924; - goto yy925; + goto yy724; + goto yy725; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy930; - goto yy926; + goto yy727; + goto yy726; } else { if (yych <= 0xF0) - goto yy927; + goto yy728; if (yych <= 0xF3) - goto yy928; + goto yy729; if (yych <= 0xF4) - goto yy929; + goto yy730; } } - yy921: + yy719: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy915; + goto yy713; } else { - goto yy932; + goto yy721; } } else { if (yyaccept == 2) { - goto yy946; + goto yy734; } else { - goto yy960; + goto yy747; } } - yy922: + yy720: + ++p; + yy721 : { return (bufsize_t)(p - start); } + yy722: ++p; yych = *p; - yy923: - if (yybm[0 + yych] & 32) { - goto yy922; + if (yybm[0 + yych] & 16) { + goto yy717; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= ')') - goto yy931; - goto yy919; + goto yy719; + if (yych <= '"') + goto yy757; + goto yy722; } else { if (yych <= 0xC1) - goto yy921; + goto yy719; if (yych >= 0xE0) - goto yy925; + goto yy725; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy930; - goto yy926; + goto yy727; + goto yy726; } else { if (yych <= 0xF0) - goto yy927; + goto yy728; if (yych <= 0xF3) - goto yy928; + goto yy729; if (yych <= 0xF4) - goto yy929; - goto yy921; + goto yy730; + goto yy719; } } - yy924: + yy724: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy922; - goto yy921; - yy925: + goto yy717; + goto yy719; + yy725: ++p; yych = *p; if (yych <= 0x9F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy924; - goto yy921; - yy926: + goto yy724; + goto yy719; + yy726: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy924; - goto yy921; - yy927: + goto yy724; + goto yy719; + yy727: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x9F) + goto yy724; + goto yy719; + yy728: ++p; yych = *p; if (yych <= 0x8F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy926; - goto yy921; - yy928: + goto yy726; + goto yy719; + yy729: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy926; - goto yy921; - yy929: + goto yy726; + goto yy719; + yy730: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0x8F) - goto yy926; - goto yy921; - yy930: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy921; - if (yych <= 0x9F) - goto yy924; - goto yy921; - yy931: - ++p; - yy932 : { return (bufsize_t)(p - start); } - yy933: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy922; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy932; - if (yych <= ')') - goto yy931; - goto yy919; - } else { - if (yych <= 0xC1) - goto yy932; - if (yych <= 0xDF) - goto yy924; - goto yy925; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy930; - goto yy926; - } else { - if (yych <= 0xF0) - goto yy927; - if (yych <= 0xF3) - goto yy928; - if (yych <= 0xF4) - goto yy929; - goto yy932; - } - } - yy934: + goto yy726; + goto yy719; + yy731: ++p; yych = *p; + yy732: if (yybm[0 + yych] & 64) { - goto yy936; + goto yy731; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= '\'') - goto yy947; - goto yy934; + goto yy719; + if (yych >= '(') + goto yy735; } else { if (yych <= 0xC1) - goto yy921; + goto yy719; if (yych <= 0xDF) - goto yy938; - goto yy939; + goto yy737; + goto yy738; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy944; - goto yy940; + goto yy740; + goto yy739; } else { if (yych <= 0xF0) - goto yy941; + goto yy741; if (yych <= 0xF3) - goto yy942; + goto yy742; if (yych <= 0xF4) - goto yy943; - goto yy921; + goto yy743; + goto yy719; } } - yy936: + yy733: + ++p; + yy734 : { return (bufsize_t)(p - start); } + yy735: ++p; yych = *p; - yy937: if (yybm[0 + yych] & 64) { - goto yy936; + goto yy731; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; + goto yy719; if (yych <= '\'') - goto yy945; - goto yy934; + goto yy758; + goto yy735; } else { if (yych <= 0xC1) - goto yy921; + goto yy719; if (yych >= 0xE0) - goto yy939; + goto yy738; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy944; - goto yy940; + goto yy740; + goto yy739; } else { if (yych <= 0xF0) - goto yy941; + goto yy741; if (yych <= 0xF3) - goto yy942; + goto yy742; if (yych <= 0xF4) - goto yy943; - goto yy921; + goto yy743; + goto yy719; } } - yy938: + yy737: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy936; - goto yy921; - yy939: + goto yy731; + goto yy719; + yy738: ++p; yych = *p; if (yych <= 0x9F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy938; - goto yy921; - yy940: + goto yy737; + goto yy719; + yy739: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; - if (yych <= 0xBF) - goto yy938; - goto yy921; - yy941: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy940; - goto yy921; - yy942: + goto yy737; + goto yy719; + yy740: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; - if (yych <= 0xBF) - goto yy940; - goto yy921; - yy943: + goto yy719; + if (yych <= 0x9F) + goto yy737; + goto yy719; + yy741: ++p; yych = *p; - if (yych <= 0x7F) - goto yy921; if (yych <= 0x8F) - goto yy940; - goto yy921; - yy944: + goto yy719; + if (yych <= 0xBF) + goto yy739; + goto yy719; + yy742: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; - if (yych <= 0x9F) - goto yy938; - goto yy921; - yy945: - ++p; - yy946 : { return (bufsize_t)(p - start); } - yy947: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy936; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy946; - if (yych <= '\'') - goto yy945; - goto yy934; - } else { - if (yych <= 0xC1) - goto yy946; - if (yych <= 0xDF) - goto yy938; - goto yy939; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy944; - goto yy940; - } else { - if (yych <= 0xF0) - goto yy941; - if (yych <= 0xF3) - goto yy942; - if (yych <= 0xF4) - goto yy943; - goto yy946; - } - } - yy948: + goto yy719; + if (yych <= 0xBF) + goto yy739; + goto yy719; + yy743: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x8F) + goto yy739; + goto yy719; + yy744: ++p; yych = *p; + yy745: if (yybm[0 + yych] & 128) { - goto yy950; + goto yy744; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= '"') - goto yy961; - goto yy948; + goto yy719; + if (yych >= '*') + goto yy748; } else { if (yych <= 0xC1) - goto yy921; + goto yy719; if (yych <= 0xDF) - goto yy952; - goto yy953; + goto yy750; + goto yy751; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy958; - goto yy954; + goto yy753; + goto yy752; } else { if (yych <= 0xF0) - goto yy955; + goto yy754; if (yych <= 0xF3) - goto yy956; + goto yy755; if (yych <= 0xF4) - goto yy957; - goto yy921; + goto yy756; + goto yy719; } } - yy950: + yy746: + ++p; + yy747 : { return (bufsize_t)(p - start); } + yy748: ++p; yych = *p; - yy951: if (yybm[0 + yych] & 128) { - goto yy950; + goto yy744; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= '"') - goto yy959; - goto yy948; + goto yy719; + if (yych <= ')') + goto yy759; + goto yy748; } else { if (yych <= 0xC1) - goto yy921; + goto yy719; if (yych >= 0xE0) - goto yy953; + goto yy751; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy958; - goto yy954; + goto yy753; + goto yy752; } else { if (yych <= 0xF0) - goto yy955; + goto yy754; if (yych <= 0xF3) - goto yy956; + goto yy755; if (yych <= 0xF4) - goto yy957; - goto yy921; + goto yy756; + goto yy719; } } - yy952: + yy750: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy950; - goto yy921; - yy953: + goto yy744; + goto yy719; + yy751: ++p; yych = *p; if (yych <= 0x9F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy952; - goto yy921; - yy954: + goto yy750; + goto yy719; + yy752: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy952; - goto yy921; - yy955: + goto yy750; + goto yy719; + yy753: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x9F) + goto yy750; + goto yy719; + yy754: ++p; yych = *p; if (yych <= 0x8F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy954; - goto yy921; - yy956: + goto yy752; + goto yy719; + yy755: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0xBF) - goto yy954; - goto yy921; - yy957: + goto yy752; + goto yy719; + yy756: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy719; if (yych <= 0x8F) - goto yy954; - goto yy921; - yy958: - ++p; + goto yy752; + goto yy719; + yy757: + yyaccept = 1; + marker = ++p; yych = *p; - if (yych <= 0x7F) - goto yy921; - if (yych <= 0x9F) - goto yy952; - goto yy921; - yy959: - ++p; - yy960 : { return (bufsize_t)(p - start); } - yy961: + if (yybm[0 + yych] & 16) { + goto yy717; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy721; + if (yych <= '"') + goto yy720; + goto yy722; + } else { + if (yych <= 0xC1) + goto yy721; + if (yych <= 0xDF) + goto yy724; + goto yy725; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy727; + goto yy726; + } else { + if (yych <= 0xF0) + goto yy728; + if (yych <= 0xF3) + goto yy729; + if (yych <= 0xF4) + goto yy730; + goto yy721; + } + } + yy758: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy731; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy734; + if (yych <= '\'') + goto yy733; + goto yy735; + } else { + if (yych <= 0xC1) + goto yy734; + if (yych <= 0xDF) + goto yy737; + goto yy738; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy740; + goto yy739; + } else { + if (yych <= 0xF0) + goto yy741; + if (yych <= 0xF3) + goto yy742; + if (yych <= 0xF4) + goto yy743; + goto yy734; + } + } + yy759: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy950; + goto yy744; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy960; - if (yych <= '"') - goto yy959; - goto yy948; + goto yy747; + if (yych <= ')') + goto yy746; + goto yy748; } else { if (yych <= 0xC1) - goto yy960; + goto yy747; if (yych <= 0xDF) - goto yy952; - goto yy953; + goto yy750; + goto yy751; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy958; - goto yy954; + goto yy753; + goto yy752; } else { if (yych <= 0xF0) - goto yy955; + goto yy754; if (yych <= 0xF3) - goto yy956; + goto yy755; if (yych <= 0xF4) - goto yy957; - goto yy960; + goto yy756; + goto yy747; } } } @@ -15363,28 +11923,18 @@ bufsize_t _scan_spacechars(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *p; - if (yych <= 0x08) - goto yy964; - if (yych <= '\r') - goto yy966; - if (yych == ' ') - goto yy966; - yy964: + if (yybm[0 + yych] & 128) { + goto yy764; + } ++p; { return 0; } - yy966: - ++p; - yych = *p; - goto yy969; - yy967 : { return (bufsize_t)(p - start); } - yy968: + yy764: ++p; yych = *p; - yy969: if (yybm[0 + yych] & 128) { - goto yy968; + goto yy764; } - goto yy967; + { return (bufsize_t)(p - start); } } } @@ -15411,115 +11961,116 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { }; yych = *p; if (yych == '#') - goto yy974; + goto yy771; ++p; - yy973 : { return 0; } - yy974: + yy770 : { return 0; } + yy771: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy977; + goto yy772; } if (yych <= '\f') { if (yych <= 0x08) - goto yy973; - if (yych >= '\v') - goto yy973; + goto yy770; + if (yych <= '\n') + goto yy775; + goto yy770; } else { if (yych <= '\r') - goto yy975; + goto yy775; if (yych == '#') - goto yy979; - goto yy973; + goto yy776; + goto yy770; } - yy975: - ++p; - yy976 : { return (bufsize_t)(p - start); } - yy977: + yy772: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy772; } - goto yy976; - yy979: + yy774 : { return (bufsize_t)(p - start); } + yy775: + yych = *++p; + goto yy774; + yy776: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy772; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy777; if (yych <= '\n') - goto yy975; + goto yy775; } else { if (yych <= '\r') - goto yy975; + goto yy775; if (yych == '#') - goto yy981; + goto yy778; } - yy980: + yy777: p = marker; - goto yy973; - yy981: + goto yy770; + yy778: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy772; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy777; if (yych <= '\n') - goto yy975; - goto yy980; + goto yy775; + goto yy777; } else { if (yych <= '\r') - goto yy975; + goto yy775; if (yych != '#') - goto yy980; + goto yy777; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy772; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy777; if (yych <= '\n') - goto yy975; - goto yy980; + goto yy775; + goto yy777; } else { if (yych <= '\r') - goto yy975; + goto yy775; if (yych != '#') - goto yy980; + goto yy777; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy772; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy777; if (yych <= '\n') - goto yy975; - goto yy980; + goto yy775; + goto yy777; } else { if (yych <= '\r') - goto yy975; + goto yy775; if (yych != '#') - goto yy980; + goto yy777; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy977; + goto yy772; } if (yych <= 0x08) - goto yy980; + goto yy777; if (yych <= '\n') - goto yy975; + goto yy775; if (yych == '\r') - goto yy975; - goto yy980; + goto yy775; + goto yy777; } } @@ -15531,141 +12082,141 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 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, 32, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 32, 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, 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, }; yych = *p; if (yych == '-') - goto yy989; + goto yy786; if (yych == '=') - goto yy990; + goto yy787; ++p; - yy988 : { return 0; } - yy989: + yy785 : { return 0; } + yy786: yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy1002; + if (yybm[0 + yych] & 64) { + goto yy793; } if (yych <= '\f') { if (yych <= 0x08) - goto yy988; + goto yy785; if (yych <= '\n') - goto yy999; - goto yy988; + goto yy789; + goto yy785; } else { if (yych <= '\r') - goto yy999; + goto yy789; if (yych == ' ') - goto yy999; - goto yy988; + goto yy789; + goto yy785; } - yy990: + yy787: yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy996; + if (yybm[0 + yych] & 128) { + goto yy799; } if (yych <= '\f') { if (yych <= 0x08) - goto yy988; + goto yy785; if (yych <= '\n') - goto yy992; - goto yy988; + goto yy796; + goto yy785; } else { if (yych <= '\r') - goto yy992; + goto yy796; if (yych == ' ') - goto yy992; - goto yy988; + goto yy796; + goto yy785; } - yy991: + yy788: ++p; yych = *p; - yy992: + yy789: if (yybm[0 + yych] & 32) { - goto yy991; + goto yy788; } if (yych <= 0x08) - goto yy993; + goto yy790; if (yych <= '\n') - goto yy994; + goto yy791; if (yych == '\r') - goto yy994; - yy993: + goto yy791; + yy790: p = marker; - goto yy988; - yy994: + goto yy785; + yy791: ++p; - { return 1; } - yy996: + { return 2; } + yy793: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy991; + goto yy788; } if (yych <= '\f') { if (yych <= 0x08) - goto yy993; + goto yy790; if (yych <= '\n') - goto yy994; - goto yy993; + goto yy791; + goto yy790; } else { if (yych <= '\r') - goto yy994; - if (yych == '=') - goto yy996; - goto yy993; + goto yy791; + if (yych == '-') + goto yy793; + goto yy790; } - yy998: + yy795: ++p; yych = *p; - yy999: + yy796: if (yych <= '\f') { if (yych <= 0x08) - goto yy993; + goto yy790; if (yych <= '\t') - goto yy998; + goto yy795; if (yych >= '\v') - goto yy993; + goto yy790; } else { if (yych <= '\r') - goto yy1000; + goto yy797; if (yych == ' ') - goto yy998; - goto yy993; + goto yy795; + goto yy790; } - yy1000: + yy797: ++p; - { return 2; } - yy1002: + { return 1; } + yy799: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1002; + goto yy799; } if (yych <= '\f') { if (yych <= 0x08) - goto yy993; + goto yy790; if (yych <= '\t') - goto yy998; + goto yy795; if (yych <= '\n') - goto yy1000; - goto yy993; + goto yy797; + goto yy790; } else { if (yych <= '\r') - goto yy1000; + goto yy797; if (yych == ' ') - goto yy998; - goto yy993; + goto yy795; + goto yy790; } } } @@ -15680,265 +12231,193 @@ 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 32, 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, 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, }; yych = *p; if (yych <= ',') { if (yych == '*') - goto yy1008; + goto yy805; } else { if (yych <= '-') - goto yy1009; + goto yy806; if (yych == '_') - goto yy1010; + goto yy807; } ++p; - yy1007 : { return 0; } - yy1008: + yy804 : { return 0; } + yy805: yych = *(marker = ++p); - if (yych <= 0x1F) { - if (yych == '\t') - goto yy1032; - goto yy1007; - } else { - if (yych <= ' ') - goto yy1032; - if (yych == '*') - goto yy1034; - goto yy1007; + if (yybm[0 + yych] & 16) { + goto yy808; } - yy1009: + if (yych == '*') + goto yy811; + goto yy804; + yy806: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1022; - goto yy1007; + goto yy813; + goto yy804; } else { if (yych <= ' ') - goto yy1022; + goto yy813; if (yych == '-') - goto yy1024; - goto yy1007; + goto yy815; + goto yy804; } - yy1010: + yy807: yych = *(marker = ++p); - if (yybm[0 + yych] & 16) { - goto yy1011; - } - if (yych == '_') - goto yy1014; - goto yy1007; - yy1011: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy1011; - } - if (yych == '_') - goto yy1014; - yy1013: - p = marker; - goto yy1007; - yy1014: - ++p; - yych = *p; if (yych <= 0x1F) { - if (yych == '\t') - goto yy1014; - goto yy1013; - } else { - if (yych <= ' ') - goto yy1014; - if (yych != '_') - goto yy1013; - } - yy1016: - ++p; - yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1013; - goto yy1016; - } else { - if (yych <= '\n') - goto yy1018; - if (yych <= '\f') - goto yy1013; - } + if (yych == '\t') + goto yy817; + goto yy804; } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1013; - goto yy1016; - } else { - if (yych == '_') - goto yy1020; - goto yy1013; - } + if (yych <= ' ') + goto yy817; + if (yych == '_') + goto yy819; + goto yy804; } - yy1018: - ++p; - { return (bufsize_t)(p - start); } - yy1020: + yy808: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1020; + if (yybm[0 + yych] & 16) { + goto yy808; } - if (yych <= 0x08) - goto yy1013; - if (yych <= '\n') - goto yy1018; - if (yych == '\r') - goto yy1018; - goto yy1013; - yy1022: + if (yych == '*') + goto yy811; + yy810: + p = marker; + goto yy804; + yy811: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1022; - goto yy1013; + goto yy811; + goto yy810; } else { if (yych <= ' ') - goto yy1022; - if (yych != '-') - goto yy1013; + goto yy811; + if (yych == '*') + goto yy821; + goto yy810; } - yy1024: + yy813: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1024; - goto yy1013; + goto yy813; + goto yy810; } else { if (yych <= ' ') - goto yy1024; + goto yy813; if (yych != '-') - goto yy1013; + goto yy810; } - yy1026: + yy815: ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1013; - goto yy1026; - } else { - if (yych <= '\n') - goto yy1028; - if (yych <= '\f') - goto yy1013; - } + if (yych <= 0x1F) { + if (yych == '\t') + goto yy815; + goto yy810; } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1013; - goto yy1026; - } else { - if (yych == '-') - goto yy1030; - goto yy1013; - } - } - yy1028: - ++p; - { return (bufsize_t)(p - start); } - yy1030: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1030; + if (yych <= ' ') + goto yy815; + if (yych == '-') + goto yy823; + goto yy810; } - if (yych <= 0x08) - goto yy1013; - if (yych <= '\n') - goto yy1028; - if (yych == '\r') - goto yy1028; - goto yy1013; - yy1032: + yy817: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1032; - goto yy1013; + goto yy817; + goto yy810; } else { if (yych <= ' ') - goto yy1032; - if (yych != '*') - goto yy1013; + goto yy817; + if (yych != '_') + goto yy810; } - yy1034: + yy819: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1034; - goto yy1013; + goto yy819; + goto yy810; } else { if (yych <= ' ') - goto yy1034; - if (yych != '*') - goto yy1013; + goto yy819; + if (yych == '_') + goto yy825; + goto yy810; } - yy1036: + yy821: ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1013; - goto yy1036; - } else { - if (yych <= '\n') - goto yy1038; - if (yych <= '\f') - goto yy1013; - } - } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1013; - goto yy1036; - } else { - if (yych == '*') - goto yy1040; - goto yy1013; - } + if (yybm[0 + yych] & 32) { + goto yy821; } - yy1038: + if (yych <= 0x08) + goto yy810; + if (yych <= '\n') + goto yy827; + if (yych == '\r') + goto yy827; + goto yy810; + yy823: ++p; - { return (bufsize_t)(p - start); } - yy1040: + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy823; + } + if (yych <= 0x08) + goto yy810; + if (yych <= '\n') + goto yy829; + if (yych == '\r') + goto yy829; + goto yy810; + yy825: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1040; + goto yy825; } if (yych <= 0x08) - goto yy1013; + goto yy810; if (yych <= '\n') - goto yy1038; + goto yy831; if (yych == '\r') - goto yy1038; - goto yy1013; + goto yy831; + goto yy810; + yy827: + ++p; + { return (bufsize_t)(p - start); } + yy829: + ++p; + { return (bufsize_t)(p - start); } + yy831: + ++p; + { return (bufsize_t)(p - start); } } } @@ -15950,16 +12429,16 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 0, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 144, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15972,295 +12451,295 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy1046; + goto yy837; if (yych == '~') - goto yy1047; + goto yy838; ++p; - yy1045 : { return 0; } - yy1046: + yy836 : { return 0; } + yy837: yych = *(marker = ++p); if (yych == '`') - goto yy1063; - goto yy1045; - yy1047: + goto yy839; + goto yy836; + yy838: yych = *(marker = ++p); - if (yych != '~') - goto yy1045; + if (yych == '~') + goto yy841; + goto yy836; + yy839: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1050; + goto yy842; } - yy1049: + yy840: p = marker; - goto yy1045; - yy1050: + goto yy836; + yy841: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy844; + } + goto yy840; + yy842: ++p; yych = *p; marker = p; - if (yybm[0 + yych] & 32) { - goto yy1052; + if (yybm[0 + yych] & 64) { + goto yy846; + } + if (yych <= 0xE0) { + if (yych <= '`') { + if (yych <= 0x00) + goto yy840; + if (yych <= '\r') + goto yy848; + goto yy842; + } else { + if (yych <= 0xC1) + goto yy840; + if (yych <= 0xDF) + goto yy850; + goto yy851; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy853; + goto yy852; + } else { + if (yych <= 0xF0) + goto yy854; + if (yych <= 0xF3) + goto yy855; + if (yych <= 0xF4) + goto yy856; + goto yy840; + } + } + yy844: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy857; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1049; + goto yy840; if (yych <= '\r') - goto yy1061; - goto yy1050; + goto yy859; + goto yy844; } else { if (yych <= 0xC1) - goto yy1049; + goto yy840; if (yych <= 0xDF) - goto yy1054; - goto yy1055; + goto yy861; + goto yy862; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1060; - goto yy1056; + goto yy864; + goto yy863; } else { if (yych <= 0xF0) - goto yy1057; + goto yy865; if (yych <= 0xF3) - goto yy1058; + goto yy866; if (yych <= 0xF4) - goto yy1059; - goto yy1049; + goto yy867; + goto yy840; } } - yy1052: + yy846: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1052; + if (yybm[0 + yych] & 64) { + goto yy846; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1049; - if (yych <= '\r') - goto yy1061; - goto yy1049; + goto yy840; + if (yych >= 0x0E) + goto yy840; } else { if (yych <= 0xDF) - goto yy1054; + goto yy850; if (yych <= 0xE0) - goto yy1055; - goto yy1056; + goto yy851; + goto yy852; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1060; + goto yy853; if (yych <= 0xEF) - goto yy1056; - goto yy1057; + goto yy852; + goto yy854; } else { if (yych <= 0xF3) - goto yy1058; + goto yy855; if (yych <= 0xF4) - goto yy1059; - goto yy1049; + goto yy856; + goto yy840; } } - yy1054: + yy848: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy850: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1052; - goto yy1049; - yy1055: + goto yy846; + goto yy840; + yy851: ++p; yych = *p; if (yych <= 0x9F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1054; - goto yy1049; - yy1056: + goto yy850; + goto yy840; + yy852: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1054; - goto yy1049; - yy1057: + goto yy850; + goto yy840; + yy853: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0x9F) + goto yy850; + goto yy840; + yy854: ++p; yych = *p; if (yych <= 0x8F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1056; - goto yy1049; - yy1058: + goto yy852; + goto yy840; + yy855: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1056; - goto yy1049; - yy1059: + goto yy852; + goto yy840; + yy856: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0x8F) - goto yy1056; - goto yy1049; - yy1060: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy1049; - if (yych <= 0x9F) - goto yy1054; - goto yy1049; - yy1061: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy1063: - yych = *++p; - if (yybm[0 + yych] & 64) { - goto yy1064; - } - goto yy1049; - yy1064: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy1066; - } - if (yych <= 0xE0) { - if (yych <= '`') { - if (yych <= 0x00) - goto yy1049; - if (yych <= '\r') - goto yy1075; - goto yy1064; - } else { - if (yych <= 0xC1) - goto yy1049; - if (yych <= 0xDF) - goto yy1068; - goto yy1069; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1074; - goto yy1070; - } else { - if (yych <= 0xF0) - goto yy1071; - if (yych <= 0xF3) - goto yy1072; - if (yych <= 0xF4) - goto yy1073; - goto yy1049; - } - } - yy1066: + goto yy852; + goto yy840; + yy857: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1066; + goto yy857; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1049; - if (yych <= '\r') - goto yy1075; - goto yy1049; + goto yy840; + if (yych >= 0x0E) + goto yy840; } else { if (yych <= 0xDF) - goto yy1068; + goto yy861; if (yych <= 0xE0) - goto yy1069; - goto yy1070; + goto yy862; + goto yy863; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1074; + goto yy864; if (yych <= 0xEF) - goto yy1070; - goto yy1071; + goto yy863; + goto yy865; } else { if (yych <= 0xF3) - goto yy1072; + goto yy866; if (yych <= 0xF4) - goto yy1073; - goto yy1049; + goto yy867; + goto yy840; } } - yy1068: + yy859: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy861: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1066; - goto yy1049; - yy1069: + goto yy857; + goto yy840; + yy862: ++p; yych = *p; if (yych <= 0x9F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1068; - goto yy1049; - yy1070: + goto yy861; + goto yy840; + yy863: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1068; - goto yy1049; - yy1071: + goto yy861; + goto yy840; + yy864: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0x9F) + goto yy861; + goto yy840; + yy865: ++p; yych = *p; if (yych <= 0x8F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1070; - goto yy1049; - yy1072: + goto yy863; + goto yy840; + yy866: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0xBF) - goto yy1070; - goto yy1049; - yy1073: + goto yy863; + goto yy840; + yy867: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy840; if (yych <= 0x8F) - goto yy1070; - goto yy1049; - yy1074: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy1049; - if (yych <= 0x9F) - goto yy1068; - goto yy1049; - yy1075: - ++p; - p = marker; - { return (bufsize_t)(p - start); } + goto yy863; + goto yy840; } } @@ -16272,123 +12751,126 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 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, 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, 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, }; yych = *p; if (yych == '`') - goto yy1081; + goto yy872; if (yych == '~') - goto yy1082; + goto yy873; ++p; - yy1080 : { return 0; } - yy1081: + yy871 : { return 0; } + yy872: yych = *(marker = ++p); if (yych == '`') - goto yy1091; - goto yy1080; - yy1082: + goto yy874; + goto yy871; + yy873: yych = *(marker = ++p); - if (yych != '~') - goto yy1080; + if (yych == '~') + goto yy876; + goto yy871; + yy874: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1085; + goto yy877; + } + yy875: + p = marker; + goto yy871; + yy876: + yych = *++p; + if (yybm[0 + yych] & 64) { + goto yy879; + } + goto yy875; + yy877: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy881; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy875; + if (yych <= '\n') + goto yy883; + goto yy875; + } else { + if (yych <= '\r') + goto yy883; + if (yych == '`') + goto yy877; + goto yy875; } - yy1084: - p = marker; - goto yy1080; - yy1085: + yy879: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy1087; + goto yy879; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1084; + goto yy875; + if (yych <= '\t') + goto yy885; if (yych <= '\n') - goto yy1089; - goto yy1084; + goto yy887; + goto yy875; } else { if (yych <= '\r') - goto yy1089; - if (yych == '~') - goto yy1085; - goto yy1084; + goto yy887; + if (yych == ' ') + goto yy885; + goto yy875; } - yy1087: + yy881: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1087; + if (yybm[0 + yych] & 128) { + goto yy881; } if (yych <= 0x08) - goto yy1084; + goto yy875; if (yych <= '\n') - goto yy1089; + goto yy883; if (yych != '\r') - goto yy1084; - yy1089: + goto yy875; + yy883: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1091: - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy1092; - } - goto yy1084; - yy1092: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy1092; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy1084; - if (yych <= '\t') - goto yy1094; - if (yych <= '\n') - goto yy1096; - goto yy1084; - } else { - if (yych <= '\r') - goto yy1096; - if (yych != ' ') - goto yy1084; - } - yy1094: + yy885: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1084; + goto yy875; if (yych <= '\t') - goto yy1094; + goto yy885; if (yych >= '\v') - goto yy1084; + goto yy875; } else { if (yych <= '\r') - goto yy1096; + goto yy887; if (yych == ' ') - goto yy1094; - goto yy1084; + goto yy885; + goto yy875; } - yy1096: + yy887: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -16405,919 +12887,947 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '&') - goto yy1102; + goto yy893; ++p; - yy1101 : { return 0; } - yy1102: + yy892 : { return 0; } + yy893: yych = *(marker = ++p); if (yych <= '@') { if (yych != '#') - goto yy1101; + goto yy892; } else { if (yych <= 'Z') - goto yy1105; + goto yy896; if (yych <= '`') - goto yy1101; + goto yy892; if (yych <= 'z') - goto yy1105; - goto yy1101; + goto yy896; + goto yy892; } yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1140; + goto yy897; } else { if (yych <= 'X') - goto yy1139; + goto yy898; if (yych == 'x') - goto yy1139; + goto yy898; } - yy1104: + yy895: p = marker; - goto yy1101; - yy1105: + goto yy892; + yy896: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1104; - if (yych >= ':') - goto yy1104; + goto yy895; + if (yych <= '9') + goto yy899; + goto yy895; } else { if (yych <= 'Z') - goto yy1106; + goto yy899; if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy899; + goto yy895; + } + yy897: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy900; + if (yych == ';') + goto yy901; + goto yy895; + yy898: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy903; + goto yy895; + } else { + if (yych <= 'F') + goto yy903; + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy903; + goto yy895; } - yy1106: + yy899: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1109; + goto yy904; if (yych <= ':') - goto yy1104; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; - goto yy1109; + goto yy895; + goto yy904; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych <= 'z') - goto yy1109; - goto yy1104; + goto yy904; + goto yy895; } } - yy1107: + yy900: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy905; + if (yych != ';') + goto yy895; + yy901: ++p; { return (bufsize_t)(p - start); } - yy1109: + yy903: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1110; + goto yy906; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy906; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy906; + goto yy895; } } - yy1110: + yy904: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1111; + goto yy907; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy907; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy907; + goto yy895; } } - yy1111: + yy905: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy908; + if (yych == ';') + goto yy901; + goto yy895; + yy906: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1112; + goto yy909; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy909; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy909; + goto yy895; } } - yy1112: + yy907: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1113; + goto yy910; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy910; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy910; + goto yy895; } } - yy1113: + yy908: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy911; + if (yych == ';') + goto yy901; + goto yy895; + yy909: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1114; + goto yy912; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy912; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy912; + goto yy895; } } - yy1114: + yy910: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1115; + goto yy913; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy913; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy913; + goto yy895; } } - yy1115: + yy911: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy914; + if (yych == ';') + goto yy901; + goto yy895; + yy912: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1116; + goto yy915; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy915; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy915; + goto yy895; } } - yy1116: + yy913: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1117; + goto yy916; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy916; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy916; + goto yy895; } } - yy1117: + yy914: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy917; + if (yych == ';') + goto yy901; + goto yy895; + yy915: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1118; + goto yy918; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy918; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy918; + goto yy895; } } - yy1118: + yy916: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1119; + goto yy919; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy919; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy919; + goto yy895; } } - yy1119: + yy917: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy920; + if (yych == ';') + goto yy901; + goto yy895; + yy918: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1120; + goto yy921; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy921; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy921; + goto yy895; } } - yy1120: + yy919: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1121; + goto yy922; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy922; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy922; + goto yy895; } } - yy1121: + yy920: + yych = *++p; + if (yych == ';') + goto yy901; + goto yy895; + yy921: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1122; + goto yy920; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy895; + goto yy920; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy895; + if (yych <= 'f') + goto yy920; + goto yy895; } } - yy1122: + yy922: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1123; + goto yy923; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1123: + yy923: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1124; + goto yy924; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1124: + yy924: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1125; + goto yy925; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1125: + yy925: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1126; + goto yy926; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1126: + yy926: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1127; + goto yy927; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1127: + yy927: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1128; + goto yy928; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1128: + yy928: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1129; + goto yy929; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1129: + yy929: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1130; + goto yy930; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1130: + yy930: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1131; + goto yy931; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1131: + yy931: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1132; + goto yy932; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1132: + yy932: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1133; + goto yy933; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1133: + yy933: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1134; + goto yy934; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1134: + yy934: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1135; + goto yy935; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1135: + yy935: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1136; + goto yy936; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1136: + yy936: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1137; + goto yy937; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1137: + yy937: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1138; + goto yy938; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; + goto yy895; if (yych >= '{') - goto yy1104; + goto yy895; } } - yy1138: - yych = *++p; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1139: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1147; - goto yy1104; - } else { - if (yych <= 'F') - goto yy1147; - if (yych <= '`') - goto yy1104; - if (yych <= 'f') - goto yy1147; - goto yy1104; - } - yy1140: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1141; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1141: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1142; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1142: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1143; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1143: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1144; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1144: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1145; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1145: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1146; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1146: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1138; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1147: + yy938: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1148; + goto yy939; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy895; + if (yych >= '{') + goto yy895; } } - yy1148: + yy939: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1149; + goto yy940; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy895; + if (yych >= '{') + goto yy895; } } - yy1149: + yy940: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1150; + goto yy941; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy895; + if (yych >= '{') + goto yy895; } } - yy1150: + yy941: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1151; + goto yy942; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy895; + if (yych >= '{') + goto yy895; } } - yy1151: + yy942: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1152; + goto yy943; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy895; + if (yych >= '{') + goto yy895; } } - yy1152: + yy943: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1153; + goto yy944; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy895; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy895; + if (yych >= '{') + goto yy895; } } - yy1153: + yy944: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1104; + goto yy895; if (yych <= '9') - goto yy1138; + goto yy920; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy895; + goto yy901; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; - goto yy1138; + goto yy895; + goto yy920; } else { if (yych <= '`') - goto yy1104; - if (yych <= 'f') - goto yy1138; - goto yy1104; + goto yy895; + if (yych <= 'z') + goto yy920; + goto yy895; } } } @@ -17336,335 +13846,304 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'V') { if (yych <= 'F') { if (yych == 'D') - goto yy1158; + goto yy949; if (yych >= 'F') - goto yy1159; + goto yy950; } else { if (yych == 'J') - goto yy1160; + goto yy951; if (yych >= 'V') - goto yy1161; + goto yy952; } } else { if (yych <= 'f') { if (yych == 'd') - goto yy1158; + goto yy949; if (yych >= 'f') - goto yy1159; + goto yy950; } else { if (yych <= 'j') { if (yych >= 'j') - goto yy1160; + goto yy951; } else { if (yych == 'v') - goto yy1161; + goto yy952; } } } ++p; - yy1157 : { return 0; } - yy1158: + yy948 : { return 0; } + yy949: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1184; + goto yy953; if (yych == 'a') - goto yy1184; - goto yy1157; - yy1159: + goto yy953; + goto yy948; + yy950: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy1181; + goto yy955; if (yych == 'i') - goto yy1181; - goto yy1157; - yy1160: + goto yy955; + goto yy948; + yy951: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1172; + goto yy956; if (yych == 'a') - goto yy1172; - goto yy1157; - yy1161: + goto yy956; + goto yy948; + yy952: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1162; - if (yych != 'b') - goto yy1157; - yy1162: + goto yy957; + if (yych == 'b') + goto yy957; + goto yy948; + yy953: yych = *++p; - if (yych == 'S') - goto yy1164; - if (yych == 's') - goto yy1164; - yy1163: + if (yych == 'T') + goto yy958; + if (yych == 't') + goto yy958; + yy954: p = marker; if (yyaccept == 0) { - goto yy1157; + goto yy948; } else { - goto yy1171; + goto yy966; } - yy1164: - yych = *++p; - if (yych == 'C') - goto yy1165; - if (yych != 'c') - goto yy1163; - yy1165: - yych = *++p; - if (yych == 'R') - goto yy1166; - if (yych != 'r') - goto yy1163; - yy1166: - yych = *++p; - if (yych == 'I') - goto yy1167; - if (yych != 'i') - goto yy1163; - yy1167: - yych = *++p; - if (yych == 'P') - goto yy1168; - if (yych != 'p') - goto yy1163; - yy1168: - yych = *++p; - if (yych == 'T') - goto yy1169; - if (yych != 't') - goto yy1163; - yy1169: + yy955: yych = *++p; - if (yych != ':') - goto yy1163; - yy1170: - ++p; - yy1171 : { return (bufsize_t)(p - start); } - yy1172: + if (yych == 'L') + goto yy959; + if (yych == 'l') + goto yy959; + goto yy954; + yy956: yych = *++p; if (yych == 'V') - goto yy1173; - if (yych != 'v') - goto yy1163; - yy1173: - yych = *++p; - if (yych == 'A') - goto yy1174; - if (yych != 'a') - goto yy1163; - yy1174: + goto yy960; + if (yych == 'v') + goto yy960; + goto yy954; + yy957: yych = *++p; if (yych == 'S') - goto yy1175; - if (yych != 's') - goto yy1163; - yy1175: - yych = *++p; - if (yych == 'C') - goto yy1176; - if (yych != 'c') - goto yy1163; - yy1176: + goto yy961; + if (yych == 's') + goto yy961; + goto yy954; + yy958: yych = *++p; - if (yych == 'R') - goto yy1177; - if (yych != 'r') - goto yy1163; - yy1177: + if (yych == 'A') + goto yy962; + if (yych == 'a') + goto yy962; + goto yy954; + yy959: yych = *++p; - if (yych == 'I') - goto yy1178; - if (yych != 'i') - goto yy1163; - yy1178: + if (yych == 'E') + goto yy963; + if (yych == 'e') + goto yy963; + goto yy954; + yy960: yych = *++p; - if (yych == 'P') - goto yy1179; - if (yych != 'p') - goto yy1163; - yy1179: + if (yych == 'A') + goto yy957; + if (yych == 'a') + goto yy957; + goto yy954; + yy961: yych = *++p; - if (yych == 'T') - goto yy1180; - if (yych != 't') - goto yy1163; - yy1180: + if (yych == 'C') + goto yy964; + if (yych == 'c') + goto yy964; + goto yy954; + yy962: yych = *++p; if (yych == ':') - goto yy1170; - goto yy1163; - yy1181: - yych = *++p; - if (yych == 'L') - goto yy1182; - if (yych != 'l') - goto yy1163; - yy1182: - yych = *++p; - if (yych == 'E') - goto yy1183; - if (yych != 'e') - goto yy1163; - yy1183: + goto yy965; + goto yy954; + yy963: yych = *++p; if (yych == ':') - goto yy1170; - goto yy1163; - yy1184: - yych = *++p; - if (yych == 'T') - goto yy1185; - if (yych != 't') - goto yy1163; - yy1185: - yych = *++p; - if (yych == 'A') - goto yy1186; - if (yych != 'a') - goto yy1163; - yy1186: + goto yy967; + goto yy954; + yy964: yych = *++p; - if (yych != ':') - goto yy1163; + if (yych == 'R') + goto yy968; + if (yych == 'r') + goto yy968; + goto yy954; + yy965: yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1188; - if (yych != 'i') - goto yy1171; - yy1188: + goto yy969; + if (yych == 'i') + goto yy969; + yy966 : { return (bufsize_t)(p - start); } + yy967: + yych = *++p; + goto yy966; + yy968: + yych = *++p; + if (yych == 'I') + goto yy970; + if (yych == 'i') + goto yy970; + goto yy954; + yy969: yych = *++p; if (yych == 'M') - goto yy1189; - if (yych != 'm') - goto yy1163; - yy1189: + goto yy971; + if (yych == 'm') + goto yy971; + goto yy954; + yy970: + yych = *++p; + if (yych == 'P') + goto yy972; + if (yych == 'p') + goto yy972; + goto yy954; + yy971: yych = *++p; if (yych == 'A') - goto yy1190; - if (yych != 'a') - goto yy1163; - yy1190: + goto yy973; + if (yych == 'a') + goto yy973; + goto yy954; + yy972: + yych = *++p; + if (yych == 'T') + goto yy963; + if (yych == 't') + goto yy963; + goto yy954; + yy973: yych = *++p; if (yych == 'G') - goto yy1191; + goto yy974; if (yych != 'g') - goto yy1163; - yy1191: + goto yy954; + yy974: yych = *++p; if (yych == 'E') - goto yy1192; + goto yy975; if (yych != 'e') - goto yy1163; - yy1192: + goto yy954; + yy975: yych = *++p; if (yych != '/') - goto yy1163; + goto yy954; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1195; + goto yy977; if (yych <= 'I') - goto yy1163; - goto yy1196; + goto yy954; + goto yy978; } else { if (yych == 'P') - goto yy1194; + goto yy979; if (yych <= 'V') - goto yy1163; - goto yy1197; + goto yy954; + goto yy980; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1195; + goto yy977; if (yych <= 'i') - goto yy1163; - goto yy1196; + goto yy954; + goto yy978; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1163; + goto yy954; + goto yy979; } else { if (yych == 'w') - goto yy1197; - goto yy1163; + goto yy980; + goto yy954; } } } - yy1194: - yych = *++p; - if (yych == 'N') - goto yy1205; - if (yych == 'n') - goto yy1205; - goto yy1163; - yy1195: + yy977: yych = *++p; if (yych == 'I') - goto yy1204; + goto yy981; if (yych == 'i') - goto yy1204; - goto yy1163; - yy1196: + goto yy981; + goto yy954; + yy978: yych = *++p; if (yych == 'P') - goto yy1202; + goto yy982; if (yych == 'p') - goto yy1202; - goto yy1163; - yy1197: + goto yy982; + goto yy954; + yy979: yych = *++p; - if (yych == 'E') - goto yy1198; - if (yych != 'e') - goto yy1163; - yy1198: + if (yych == 'N') + goto yy983; + if (yych == 'n') + goto yy983; + goto yy954; + yy980: yych = *++p; - if (yych == 'B') - goto yy1199; - if (yych != 'b') - goto yy1163; - yy1199: + if (yych == 'E') + goto yy984; + if (yych == 'e') + goto yy984; + goto yy954; + yy981: yych = *++p; - if (yych == 'P') - goto yy1200; - if (yych != 'p') - goto yy1163; - yy1200: - ++p; - { return 0; } - yy1202: + if (yych == 'F') + goto yy985; + if (yych == 'f') + goto yy985; + goto yy954; + yy982: yych = *++p; if (yych == 'E') - goto yy1203; + goto yy983; if (yych != 'e') - goto yy1163; - yy1203: + goto yy954; + yy983: yych = *++p; if (yych == 'G') - goto yy1200; + goto yy985; if (yych == 'g') - goto yy1200; - goto yy1163; - yy1204: + goto yy985; + goto yy954; + yy984: yych = *++p; - if (yych == 'F') - goto yy1200; - if (yych == 'f') - goto yy1200; - goto yy1163; - yy1205: + if (yych == 'B') + goto yy987; + if (yych == 'b') + goto yy987; + goto yy954; + yy985: ++p; - if ((yych = *p) == 'G') - goto yy1200; - if (yych == 'g') - goto yy1200; - goto yy1163; + { return 0; } + yy987: + ++p; + if ((yych = *p) == 'P') + goto yy985; + if (yych == 'p') + goto yy985; + goto yy954; } } -- cgit 0.0.5-2-1-g0f52 From 5255e2d5717dc7a265ca79404d387ef8abe8c004 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 6 Dec 2016 10:56:59 +0100 Subject: Added 'make newbench'. --- Makefile | 14 +++++++- README.md | 4 +++ bench/samples/block-bq-flat.md | 16 +++++++++ bench/samples/block-bq-nested.md | 13 +++++++ bench/samples/block-code.md | 11 ++++++ bench/samples/block-fences.md | 14 ++++++++ bench/samples/block-heading.md | 9 +++++ bench/samples/block-hr.md | 10 ++++++ bench/samples/block-html.md | 32 +++++++++++++++++ bench/samples/block-lheading.md | 8 +++++ bench/samples/block-list-flat.md | 67 ++++++++++++++++++++++++++++++++++++ bench/samples/block-list-nested.md | 36 +++++++++++++++++++ bench/samples/block-ref-flat.md | 15 ++++++++ bench/samples/block-ref-nested.md | 17 +++++++++ bench/samples/inline-autolink.md | 14 ++++++++ bench/samples/inline-backticks.md | 3 ++ bench/samples/inline-em-flat.md | 5 +++ bench/samples/inline-em-nested.md | 5 +++ bench/samples/inline-em-worst.md | 5 +++ bench/samples/inline-entity.md | 11 ++++++ bench/samples/inline-escape.md | 15 ++++++++ bench/samples/inline-html.md | 44 +++++++++++++++++++++++ bench/samples/inline-links-flat.md | 23 +++++++++++++ bench/samples/inline-links-nested.md | 13 +++++++ bench/samples/inline-newlines.md | 24 +++++++++++++ bench/samples/lorem1.md | 13 +++++++ bench/samples/rawtabs.md | 18 ++++++++++ 27 files changed, 458 insertions(+), 1 deletion(-) create mode 100644 bench/samples/block-bq-flat.md create mode 100644 bench/samples/block-bq-nested.md create mode 100644 bench/samples/block-code.md create mode 100644 bench/samples/block-fences.md create mode 100644 bench/samples/block-heading.md create mode 100644 bench/samples/block-hr.md create mode 100644 bench/samples/block-html.md create mode 100644 bench/samples/block-lheading.md create mode 100644 bench/samples/block-list-flat.md create mode 100644 bench/samples/block-list-nested.md create mode 100644 bench/samples/block-ref-flat.md create mode 100644 bench/samples/block-ref-nested.md create mode 100644 bench/samples/inline-autolink.md create mode 100644 bench/samples/inline-backticks.md create mode 100644 bench/samples/inline-em-flat.md create mode 100644 bench/samples/inline-em-nested.md create mode 100644 bench/samples/inline-em-worst.md create mode 100644 bench/samples/inline-entity.md create mode 100644 bench/samples/inline-escape.md create mode 100644 bench/samples/inline-html.md create mode 100644 bench/samples/inline-links-flat.md create mode 100644 bench/samples/inline-links-nested.md create mode 100644 bench/samples/inline-newlines.md create mode 100644 bench/samples/lorem1.md create mode 100644 bench/samples/rawtabs.md diff --git a/Makefile b/Makefile index b81efc815b..1c3fc98d8c 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ SITE=_site SPECVERSION=$(shell perl -ne 'print $$1 if /^version: *([0-9.]+)/' $(SPEC)) FUZZCHARS?=2000000 # for fuzztest BENCHDIR=bench +BENCHSAMPLES=$(wildcard $(BENCHDIR)/samples/*.md) BENCHFILE=$(BENCHDIR)/benchinput.md ALLTESTS=alltests.md NUMRUNS?=10 @@ -21,7 +22,7 @@ CLANG_CHECK?=clang-check CLANG_FORMAT=clang-format -style llvm -sort-includes=0 -i AFL_PATH?=/usr/local/bin -.PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive bench format update-spec afl clang-check +.PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive newbench bench format update-spec afl clang-check all: cmake_build man/man3/cmark.3 @@ -166,6 +167,17 @@ bench: $(BENCHFILE) done \ } 2>&1 | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py' +newbench: + for f in $(BENCHSAMPLES) ; do \ + printf "%26s " `basename $$f` ; \ + { for x in `seq 1 $(NUMRUNS)` ; do \ + /usr/bin/env time -p $(PROG) /dev/null ; \ + for x in `seq 1 200` ; do cat $$f ; done | \ + /usr/bin/env time -p $(PROG) > /dev/null; \ + done \ + } 2>&1 | grep 'real' | awk '{print $$2}' | \ + python3 'bench/stats.py'; done + format: $(CLANG_FORMAT) src/*.c src/*.h api_test/*.c api_test/*.h diff --git a/README.md b/README.md index 5c43c1a84a..10375ba775 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,10 @@ To run a benchmark: make bench +For more detailed benchmarks: + + make newbench + To run a test for memory leaks using `valgrind`: make leakcheck diff --git a/bench/samples/block-bq-flat.md b/bench/samples/block-bq-flat.md new file mode 100644 index 0000000000..33e382afc3 --- /dev/null +++ b/bench/samples/block-bq-flat.md @@ -0,0 +1,16 @@ +> the simple example of a blockquote +> the simple example of a blockquote +> the simple example of a blockquote +> the simple example of a blockquote +... continuation +... continuation +... continuation +... continuation + +empty blockquote: + +> +> +> +> + diff --git a/bench/samples/block-bq-nested.md b/bench/samples/block-bq-nested.md new file mode 100644 index 0000000000..7ddcffa400 --- /dev/null +++ b/bench/samples/block-bq-nested.md @@ -0,0 +1,13 @@ +>>>>>> deeply nested blockquote +>>>>> deeply nested blockquote +>>>> deeply nested blockquote +>>> deeply nested blockquote +>> deeply nested blockquote +> deeply nested blockquote + +> deeply nested blockquote +>> deeply nested blockquote +>>> deeply nested blockquote +>>>> deeply nested blockquote +>>>>> deeply nested blockquote +>>>>>> deeply nested blockquote diff --git a/bench/samples/block-code.md b/bench/samples/block-code.md new file mode 100644 index 0000000000..2b1554f427 --- /dev/null +++ b/bench/samples/block-code.md @@ -0,0 +1,11 @@ + + an + example + + of + + + + a code + block + diff --git a/bench/samples/block-fences.md b/bench/samples/block-fences.md new file mode 100644 index 0000000000..5fe8b3c340 --- /dev/null +++ b/bench/samples/block-fences.md @@ -0,0 +1,14 @@ + +``````````text +an +example +``` +of + + +a fenced +``` +code +block +`````````` + diff --git a/bench/samples/block-heading.md b/bench/samples/block-heading.md new file mode 100644 index 0000000000..fd98558797 --- /dev/null +++ b/bench/samples/block-heading.md @@ -0,0 +1,9 @@ +# heading +### heading +##### heading + +# heading # +### heading ### +##### heading \#\#\#\#\###### + +############ not a heading diff --git a/bench/samples/block-hr.md b/bench/samples/block-hr.md new file mode 100644 index 0000000000..e1bad6f4dd --- /dev/null +++ b/bench/samples/block-hr.md @@ -0,0 +1,10 @@ + + * * * * * + + - - - - - + + ________ + + + ************************* text + diff --git a/bench/samples/block-html.md b/bench/samples/block-html.md new file mode 100644 index 0000000000..ff7f8fa6a0 --- /dev/null +++ b/bench/samples/block-html.md @@ -0,0 +1,32 @@ +
                            + +blah blah + +
                            + + + + + +
                            + **test** +
                            + + + + + + + + + +
                            + + test + +
                            + + + diff --git a/bench/samples/block-lheading.md b/bench/samples/block-lheading.md new file mode 100644 index 0000000000..e5c0d99d4f --- /dev/null +++ b/bench/samples/block-lheading.md @@ -0,0 +1,8 @@ +heading +--- + +heading +=================================== + +not a heading +----------------------------------- text diff --git a/bench/samples/block-list-flat.md b/bench/samples/block-list-flat.md new file mode 100644 index 0000000000..14149dbf33 --- /dev/null +++ b/bench/samples/block-list-flat.md @@ -0,0 +1,67 @@ + - tidy + - bullet + - list + + + - loose + + - bullet + + - list + + + 0. ordered + 1. list + 2. example + + + - + - + - + - + + + 1. + 2. + 3. + + + - an example +of a list item + with a continuation + + this part is inside the list + + this part is just a paragraph + + + 1. test + - test + 1. test + - test + + +111111111111111111111111111111111111111111. is this a valid bullet? + + - _________________________ + + - this + - is + + a + + long + - loose + - list + + - with + - some + + tidy + + - list + - items + - in + + - between + - _________________________ diff --git a/bench/samples/block-list-nested.md b/bench/samples/block-list-nested.md new file mode 100644 index 0000000000..d30aed3b88 --- /dev/null +++ b/bench/samples/block-list-nested.md @@ -0,0 +1,36 @@ + + - this + - is + - a + - deeply + - nested + - bullet + - list + + + 1. this + 2. is + 3. a + 4. deeply + 5. nested + 6. unordered + 7. list + + + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 6 + - 5 + - 4 + - 3 + - 2 + - 1 + + + - - - - - - - - - deeply-nested one-element item + diff --git a/bench/samples/block-ref-flat.md b/bench/samples/block-ref-flat.md new file mode 100644 index 0000000000..c83dccb6f1 --- /dev/null +++ b/bench/samples/block-ref-flat.md @@ -0,0 +1,15 @@ +[1] [2] [3] [1] [2] [3] + +[looooooooooooooooooooooooooooooooooooooooooooooooooong label] + + [1]: + [2]: http://something.example.com/foo/bar 'test' + [3]: + http://foo/bar + [ looooooooooooooooooooooooooooooooooooooooooooooooooong label ]: + 111 + 'test' + [[[[[[[[[[[[[[[[[[[[ this should not slow down anything ]]]]]]]]]]]]]]]]]]]]: q + (as long as it is not referenced anywhere) + + [[[[[[[[[[[[[[[[[[[[]: this is not a valid reference diff --git a/bench/samples/block-ref-nested.md b/bench/samples/block-ref-nested.md new file mode 100644 index 0000000000..1e10a8c213 --- /dev/null +++ b/bench/samples/block-ref-nested.md @@ -0,0 +1,17 @@ +[[[[[[[foo]]]]]]] + +[[[[[[[foo]]]]]]]: bar +[[[[[[foo]]]]]]: bar +[[[[[foo]]]]]: bar +[[[[foo]]]]: bar +[[[foo]]]: bar +[[foo]]: bar +[foo]: bar + +[*[*[*[*[foo]*]*]*]*] + +[*[*[*[*[foo]*]*]*]*]: bar +[*[*[*[foo]*]*]*]: bar +[*[*[foo]*]*]: bar +[*[foo]*]: bar +[foo]: bar diff --git a/bench/samples/inline-autolink.md b/bench/samples/inline-autolink.md new file mode 100644 index 0000000000..0f71482d6b --- /dev/null +++ b/bench/samples/inline-autolink.md @@ -0,0 +1,14 @@ +closed (valid) autolinks: + + + + + + +these are not autolinks: + + diff --git a/bench/samples/inline-backticks.md b/bench/samples/inline-backticks.md new file mode 100644 index 0000000000..a6ec6e1fb0 --- /dev/null +++ b/bench/samples/inline-backticks.md @@ -0,0 +1,3 @@ +`lots`of`backticks` + +``i``wonder``how``this``will``be``parsed`` diff --git a/bench/samples/inline-em-flat.md b/bench/samples/inline-em-flat.md new file mode 100644 index 0000000000..b7668a54ee --- /dev/null +++ b/bench/samples/inline-em-flat.md @@ -0,0 +1,5 @@ +*this* *is* *your* *basic* *boring* *emphasis* + +_this_ _is_ _your_ _basic_ _boring_ _emphasis_ + +**this** **is** **your** **basic** **boring** **emphasis** diff --git a/bench/samples/inline-em-nested.md b/bench/samples/inline-em-nested.md new file mode 100644 index 0000000000..6bb0a0d3bd --- /dev/null +++ b/bench/samples/inline-em-nested.md @@ -0,0 +1,5 @@ +*this *is *a *bunch* of* nested* emphases* + +__this __is __a __bunch__ of__ nested__ emphases__ + +***this ***is ***a ***bunch*** of*** nested*** emphases*** diff --git a/bench/samples/inline-em-worst.md b/bench/samples/inline-em-worst.md new file mode 100644 index 0000000000..b6d21da984 --- /dev/null +++ b/bench/samples/inline-em-worst.md @@ -0,0 +1,5 @@ +*this *is *a *worst *case *for *em *backtracking + +__this __is __a __worst __case __for __em __backtracking + +***this ***is ***a ***worst ***case ***for ***em ***backtracking diff --git a/bench/samples/inline-entity.md b/bench/samples/inline-entity.md new file mode 100644 index 0000000000..da095edbf2 --- /dev/null +++ b/bench/samples/inline-entity.md @@ -0,0 +1,11 @@ +entities: + +  & © Æ Ď ¾ ℋ ⅆ ∲ + +# Ӓ Ϡ � + +non-entities: + +&18900987654321234567890; &1234567890098765432123456789009876543212345678987654; + +&qwertyuioppoiuytrewqwer; &oiuytrewqwertyuioiuytrewqwertyuioytrewqwertyuiiuytri; diff --git a/bench/samples/inline-escape.md b/bench/samples/inline-escape.md new file mode 100644 index 0000000000..4e1bb396be --- /dev/null +++ b/bench/samples/inline-escape.md @@ -0,0 +1,15 @@ + +\t\e\s\t\i\n\g \e\s\c\a\p\e \s\e\q\u\e\n\c\e\s + +\!\\\"\#\$\%\&\'\(\)\*\+\,\.\/\:\;\<\=\>\? + +\@ \[ \] \^ \_ \` \{ \| \} \~ \- \' + +\ +\\ +\\\ +\\\\ +\\\\\ + +\ \ \ \ + diff --git a/bench/samples/inline-html.md b/bench/samples/inline-html.md new file mode 100644 index 0000000000..f6e63419e8 --- /dev/null +++ b/bench/samples/inline-html.md @@ -0,0 +1,44 @@ +Taking commonmark tests from the spec for benchmarking here: + + + + + + + + + +<33> <__> + + + + + +foo + +foo + +foo + +foo + +foo &<]]> + + + + + + diff --git a/bench/samples/inline-links-flat.md b/bench/samples/inline-links-flat.md new file mode 100644 index 0000000000..5117db8794 --- /dev/null +++ b/bench/samples/inline-links-flat.md @@ -0,0 +1,23 @@ +Valid links: + + [this is a link]() + [this is a link]() + [this is a link](http://something.example.com/foo/bar 'test') + ![this is an image]() + ![this is an image]() + ![this is an image](http://something.example.com/foo/bar 'test') + + [escape test](<\>\>\>\>\>\>\>\>\>\>\>\>\>\>> '\'\'\'\'\'\'\'\'\'\'\'\'\'\'') + [escape test \]\]\]\]\]\]\]\]\]\]\]\]\]\]\]\]](\)\)\)\)\)\)\)\)\)\)\)\)\)\)) + +Invalid links: + + [this is not a link + + [this is not a link]( + + [this is not a link](http://something.example.com/foo/bar 'test' + + [this is not a link]((((((((((((((((((((((((((((((((((((((((((((((( + + [this is not a link]((((((((((()))))))))) (((((((((())))))))))) diff --git a/bench/samples/inline-links-nested.md b/bench/samples/inline-links-nested.md new file mode 100644 index 0000000000..4e7dc8579e --- /dev/null +++ b/bench/samples/inline-links-nested.md @@ -0,0 +1,13 @@ +Valid links: + +[[[[[[[[](test)](test)](test)](test)](test)](test)](test)] + +[ [[[[[[[[[[[[[[[[[[ [](test) ]]]]]]]]]]]]]]]]]] ](test) + +Invalid links: + +[[[[[[[[[ + +[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ + +![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![![ diff --git a/bench/samples/inline-newlines.md b/bench/samples/inline-newlines.md new file mode 100644 index 0000000000..068a807d91 --- /dev/null +++ b/bench/samples/inline-newlines.md @@ -0,0 +1,24 @@ + +this\ +should\ +be\ +separated\ +by\ +newlines + +this +should +be +separated +by +newlines +too + +this +should +not +be +separated +by +newlines + diff --git a/bench/samples/lorem1.md b/bench/samples/lorem1.md new file mode 100644 index 0000000000..eccb898b66 --- /dev/null +++ b/bench/samples/lorem1.md @@ -0,0 +1,13 @@ +Lorem ipsum dolor sit amet, __consectetur__ adipiscing elit. Cras imperdiet nec erat ac condimentum. Nulla vel rutrum ligula. Sed hendrerit interdum orci a posuere. Vivamus ut velit aliquet, mollis purus eget, iaculis nisl. Proin posuere malesuada ante. Proin auctor orci eros, ac molestie lorem dictum nec. Vestibulum sit amet erat est. Morbi luctus sed elit ac luctus. Proin blandit, enim vitae egestas posuere, neque elit ultricies dui, vel mattis nibh enim ac lorem. Maecenas molestie nisl sit amet velit dictum lobortis. Aliquam erat volutpat. + +Vivamus sagittis, diam in [vehicula](https://github.com/markdown-it/markdown-it) lobortis, sapien arcu mattis erat, vel aliquet sem urna et risus. Ut feugiat sapien vitae mi elementum laoreet. Suspendisse potenti. Aliquam erat nisl, aliquam pretium libero aliquet, sagittis eleifend nunc. In hac habitasse platea dictumst. Integer turpis augue, tincidunt dignissim mauris id, rhoncus dapibus purus. Maecenas et enim odio. Nullam massa metus, varius quis vehicula sed, pharetra mollis erat. In quis viverra velit. Vivamus placerat, est nec hendrerit varius, enim dui hendrerit magna, ut pulvinar nibh lorem vel lacus. Mauris a orci iaculis, hendrerit eros sed, gravida leo. In dictum mauris vel augue varius, ac ullamcorper nisl ornare. In eu posuere velit, ac fermentum arcu. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nullam sed malesuada leo, at interdum elit. + +Nullam ut tincidunt nunc. [Pellentesque][1] metus lacus, commodo eget justo ut, rutrum varius nunc. Sed non rhoncus risus. Morbi sodales gravida pulvinar. Duis malesuada, odio volutpat elementum vulputate, massa magna scelerisque ante, et accumsan tellus nunc in sem. Donec mattis arcu et velit aliquet, non sagittis justo vestibulum. Suspendisse volutpat felis lectus, nec consequat ipsum mattis id. Donec dapibus vehicula facilisis. In tincidunt mi nisi, nec faucibus tortor euismod nec. Suspendisse ante ligula, aliquet vitae libero eu, vulputate dapibus libero. Sed bibendum, sapien at posuere interdum, libero est sollicitudin magna, ac gravida tellus purus eu ipsum. Proin ut quam arcu. + +Suspendisse potenti. Donec ante velit, ornare at augue quis, tristique laoreet sem. Etiam in ipsum elit. Nullam cursus dolor sit amet nulla feugiat tristique. Phasellus ac tellus tincidunt, imperdiet purus eget, ullamcorper ipsum. Cras eu tincidunt sem. Nullam sed dapibus magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In id venenatis tortor. In consectetur sollicitudin pharetra. Etiam convallis nisi nunc, et aliquam turpis viverra sit amet. Maecenas faucibus sodales tortor. Suspendisse lobortis mi eu leo viverra volutpat. Pellentesque velit ante, vehicula sodales congue ut, elementum a urna. Cras tempor, ipsum eget luctus rhoncus, arcu ligula fermentum urna, vulputate pharetra enim enim non libero. + +Proin diam quam, elementum in eleifend id, elementum et metus. Cras in justo consequat justo semper ultrices. Sed dignissim lectus a ante mollis, nec vulputate ante molestie. Proin in porta nunc. Etiam pulvinar turpis sed velit porttitor, vel adipiscing velit fringilla. Cras ac tellus vitae purus pharetra tincidunt. Sed cursus aliquet aliquet. Cras eleifend commodo malesuada. In turpis turpis, ullamcorper ut tincidunt a, ullamcorper a nunc. Etiam luctus tellus ac dapibus gravida. Ut nec lacus laoreet neque ullamcorper volutpat. + +Nunc et leo erat. Aenean mattis ultrices lorem, eget adipiscing dolor ultricies eu. In hac habitasse platea dictumst. Vivamus cursus feugiat sapien quis aliquam. Mauris quam libero, porta vel volutpat ut, blandit a purus. Vivamus vestibulum dui vel tortor molestie, sit amet feugiat sem commodo. Nulla facilisi. Sed molestie arcu eget tellus vestibulum tristique. + +[1]: https://github.com/markdown-it diff --git a/bench/samples/rawtabs.md b/bench/samples/rawtabs.md new file mode 100644 index 0000000000..dc989ea75e --- /dev/null +++ b/bench/samples/rawtabs.md @@ -0,0 +1,18 @@ + +this is a test for tab expansion, be careful not to replace them with spaces + +1 4444 +22 333 +333 22 +4444 1 + + + tab-indented line + space-indented line + tab-indented line + + +a lot of spaces in between here + +a lot of tabs in between here + -- cgit 0.0.5-2-1-g0f52 From 29c46c5aeda66e9c454ac8d802e65692d0bab566 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 9 Dec 2016 21:57:12 +0100 Subject: Correctly initialize chunk in S_process_line (#170) The `alloc` member wasn't initialized. This also allows to add an assertion in `chunk_rtrim` which doesn't work for alloced chunks. --- src/blocks.c | 1 + src/chunk.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/blocks.c b/src/blocks.c index de47dfb377..99dd082652 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1157,6 +1157,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, input.data = parser->curline.ptr; input.len = parser->curline.size; + input.alloc = 0; parser->line_number++; diff --git a/src/chunk.h b/src/chunk.h index 666484ccd1..f198be34ad 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -37,6 +37,8 @@ static CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { } static CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { + assert(!c->alloc); + while (c->len > 0) { if (!cmark_isspace(c->data[c->len - 1])) break; -- cgit 0.0.5-2-1-g0f52 From 9e643720ec903f3b448bd2589a0c02c2514805ae Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Tue, 20 Dec 2016 22:00:17 +0100 Subject: More sourcepos! (#169) * open_new_blocks: always create child before advancing offset * Source map * Extent's typology * In-depth python bindings --- src/CMakeLists.txt | 2 + src/blocks.c | 186 ++++++++--- src/cmark.c | 5 + src/cmark.h | 60 ++++ src/inlines.c | 143 +++++++- src/inlines.h | 11 +- src/parser.h | 4 + src/source_map.c | 293 ++++++++++++++++ src/source_map.h | 66 ++++ test/CMakeLists.txt | 17 + test/test_cmark.py | 490 +++++++++++++++++++++++++++ wrappers/wrapper.py | 944 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 12 files changed, 2125 insertions(+), 96 deletions(-) create mode 100644 src/source_map.c create mode 100644 src/source_map.h create mode 100644 test/test_cmark.py mode change 100755 => 100644 wrappers/wrapper.py diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0cb653014f..b75c0c7363 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,6 +18,7 @@ set(HEADERS houdini.h cmark_ctype.h render.h + source_map.h ) set(LIBRARY_SOURCES cmark.c @@ -40,6 +41,7 @@ set(LIBRARY_SOURCES houdini_html_e.c houdini_html_u.c cmark_ctype.c + source_map.c ${HEADERS} ) diff --git a/src/blocks.c b/src/blocks.c index 99dd082652..1c1d16045c 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -28,6 +28,10 @@ #define MIN(x, y) ((x < y) ? x : y) #endif +#ifndef MAX +#define MAX(x, y) ((x > y) ? x : y) +#endif + #define peek_at(i, n) (i)->data[n] static bool S_last_line_blank(const cmark_node *node) { @@ -93,6 +97,7 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->root = document; parser->current = document; parser->line_number = 0; + parser->line_offset = 0; parser->offset = 0; parser->column = 0; parser->first_nonspace = 0; @@ -103,6 +108,7 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->last_line_length = 0; parser->options = options; parser->last_buffer_ended_with_cr = false; + parser->source_map = source_map_new(mem); return parser; } @@ -116,6 +122,7 @@ void cmark_parser_free(cmark_parser *parser) { cmark_mem *mem = parser->mem; cmark_strbuf_free(&parser->curline); cmark_strbuf_free(&parser->linebuf); + source_map_free(parser->source_map); cmark_reference_map_free(parser->refmap); mem->free(parser); } @@ -255,10 +262,13 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { switch (S_type(b)) { case CMARK_NODE_PARAGRAPH: + source_map_start_cursor(parser->source_map, parser->last_paragraph_extent); while (cmark_strbuf_at(node_content, 0) == '[' && (pos = cmark_parse_reference_inline(parser->mem, node_content, - parser->refmap))) { - + parser->refmap, parser->root, + parser->source_map))) { + parser->last_paragraph_extent = parser->source_map->cursor; + source_map_start_cursor(parser->source_map, parser->last_paragraph_extent); cmark_strbuf_drop(node_content, pos); } if (is_blank(node_content, 0)) { @@ -266,7 +276,6 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { cmark_node_free(b); } break; - case CMARK_NODE_CODE_BLOCK: if (!b->as.code.fenced) { // indented code remove_trailing_blank_lines(node_content); @@ -361,21 +370,32 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, // Walk through node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_mem *mem, cmark_node *root, - cmark_reference_map *refmap, int options) { - cmark_iter *iter = cmark_iter_new(root); +static void process_inlines(cmark_parser *parser) { + cmark_iter *iter = cmark_iter_new(parser->root); cmark_node *cur; cmark_event_type ev_type; + cmark_source_extent *cur_extent = parser->source_map->head; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); if (ev_type == CMARK_EVENT_ENTER) { if (contains_inlines(S_type(cur))) { - cmark_parse_inlines(mem, cur, refmap, options); + while (cur_extent && cur_extent->node != cur) { + cur_extent = source_map_stitch_extent(parser->source_map, cur_extent, parser->root, parser->line_offset)->next; + } + + assert(cur_extent); + + source_map_start_cursor(parser->source_map, cur_extent); + cmark_parse_inlines(parser->mem, cur, parser->refmap, parser->options, parser->source_map, parser->line_offset); } } } + while (cur_extent) { + cur_extent = source_map_stitch_extent(parser->source_map, cur_extent, parser->root, parser->line_offset)->next; + } + cmark_iter_free(iter); } @@ -482,7 +502,10 @@ static cmark_node *finalize_document(cmark_parser *parser) { } finalize(parser, parser->root); - process_inlines(parser->mem, parser->root, parser->refmap, parser->options); + + process_inlines(parser); + + assert(source_map_check(parser->source_map, parser->line_offset)); return parser->root; } @@ -524,6 +547,7 @@ void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) { static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, bool eof) { const unsigned char *end = buffer + len; + const unsigned char *skipped; static const uint8_t repl[] = {239, 191, 189}; if (parser->last_buffer_ended_with_cr && *buffer == '\n') { @@ -534,6 +558,7 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, while (buffer < end) { const unsigned char *eol; bufsize_t chunk_len; + bufsize_t linebuf_size = 0; bool process = false; for (eol = buffer; eol < end; ++eol) { if (S_is_line_end_char(*eol)) { @@ -551,6 +576,7 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, chunk_len = (eol - buffer); if (process) { if (parser->linebuf.size > 0) { + linebuf_size = cmark_strbuf_len(&parser->linebuf); cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); cmark_strbuf_clear(&parser->linebuf); @@ -569,6 +595,8 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, } buffer += chunk_len; + skipped = buffer; + if (buffer < end) { if (*buffer == '\0') { // skip over NULL @@ -584,6 +612,11 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, buffer++; } } + chunk_len += buffer - skipped; + chunk_len += linebuf_size; + + if (process) + parser->line_offset += chunk_len; } } @@ -643,11 +676,13 @@ static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { // indicates a number of columns; otherwise, a number of bytes. // If advancing a certain number of columns partially consumes // a tab character, parser->partially_consumed_tab is set to true. -static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, - bufsize_t count, bool columns) { +static void S_advance_offset(cmark_parser *parser, cmark_node *container, cmark_extent_type type, + cmark_chunk *input, bufsize_t count, bool columns) { char c; int chars_to_tab; int chars_to_advance; + int initial_pos = parser->offset + parser->line_offset; + while (count > 0 && (c = peek_at(input, parser->offset))) { if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); @@ -670,6 +705,8 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, count -= 1; } } + + source_map_append_extent(parser->source_map, initial_pos, parser->offset + parser->line_offset, container, type); } static bool S_last_child_is_open(cmark_node *container) { @@ -677,7 +714,7 @@ static bool S_last_child_is_open(cmark_node *container) { (container->last_child->flags & CMARK_NODE__OPEN); } -static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { +static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input, cmark_node *container) { bool res = false; bufsize_t matched = 0; @@ -685,10 +722,10 @@ static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; if (matched) { - S_advance_offset(parser, input, parser->indent + 1, true); + S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, parser->indent + 1, true); if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); + S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, 1, true); } res = true; @@ -702,7 +739,7 @@ static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { - S_advance_offset(parser, input, container->as.list.marker_offset + + S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, container->as.list.marker_offset + container->as.list.padding, true); res = true; @@ -710,7 +747,7 @@ static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, // if container->first_child is NULL, then the opening line // of the list item was blank after the list marker; in this // case, we are done with the list item. - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, parser->first_nonspace - parser->offset, false); res = true; } @@ -724,10 +761,10 @@ static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, if (!container->as.code.fenced) { // indented if (parser->indent >= CODE_INDENT) { - S_advance_offset(parser, input, CODE_INDENT, true); + S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, CODE_INDENT, true); res = true; } else if (parser->blank) { - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, parser->first_nonspace - parser->offset, false); res = true; } @@ -743,14 +780,14 @@ static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, // closing fence - and since we're at // the end of a line, we can stop processing it: *should_continue = false; - S_advance_offset(parser, input, matched, false); + S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, matched, false); parser->current = finalize(parser, container); } else { // skip opt. spaces of fence parser->offset int i = container->as.code.fence_offset; while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); + S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, 1, true); i--; } res = true; @@ -807,7 +844,7 @@ static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, switch (cont_type) { case CMARK_NODE_BLOCK_QUOTE: - if (!parse_block_quote_prefix(parser, input)) + if (!parse_block_quote_prefix(parser, input, container)) goto done; break; case CMARK_NODE_ITEM: @@ -867,29 +904,26 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, indented = parser->indent >= CODE_INDENT; if (!indented && peek_at(input, parser->first_nonspace) == '>') { + *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, + parser->first_nonspace + 1); - bufsize_t blockquote_startpos = parser->first_nonspace; - - S_advance_offset(parser, input, + S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, parser->first_nonspace + 1 - parser->offset, false); // optional following character if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); + S_advance_offset(parser, *container, CMARK_EXTENT_BLANK, input, 1, true); } - *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, - 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, + *container = add_child(parser, *container, CMARK_NODE_HEADING, + parser->first_nonspace + 1); + S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, parser->first_nonspace + matched - parser->offset, false); - *container = add_child(parser, *container, CMARK_NODE_HEADING, - heading_startpos + 1); hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); @@ -911,7 +945,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->as.code.fence_offset = (int8_t)(parser->first_nonspace - parser->offset); (*container)->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, input, + S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, parser->first_nonspace + matched - parser->offset, false); @@ -931,14 +965,14 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->type = (uint16_t)CMARK_NODE_HEADING; (*container)->as.heading.level = lev; (*container)->as.heading.setext = true; - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); + S_advance_offset(parser, *container, CMARK_EXTENT_CLOSER, input, input->len - 1 - parser->offset, false); } else if (!indented && !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && (matched = scan_thematic_break(input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext heading: *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, parser->first_nonspace + 1); - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); + S_advance_offset(parser, *container, CMARK_EXTENT_CONTENT, input, input->len - 1 - parser->offset, false); } else if ((!indented || cont_type == CMARK_NODE_LIST) && (matched = parse_list_marker( parser->mem, input, parser->first_nonspace, @@ -946,20 +980,37 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, // Note that we can have new list items starting with >= 4 // spaces indent, as long as the list container is still open. + cmark_node *list = NULL; + cmark_node *item = NULL; + cmark_source_extent *save_source_map_tail; int i = 0; + if (cont_type != CMARK_NODE_LIST || + !lists_match(&((*container)->as.list), data)) { + *container = add_child(parser, *container, CMARK_NODE_LIST, + parser->first_nonspace + 1); + list = *container; + + } + + // add the list item + *container = add_child(parser, *container, CMARK_NODE_ITEM, + parser->first_nonspace + 1); + item = *container; + // compute padding: - S_advance_offset(parser, input, + S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, parser->first_nonspace + matched - parser->offset, false); save_partially_consumed_tab = parser->partially_consumed_tab; save_offset = parser->offset; save_column = parser->column; + save_source_map_tail = parser->source_map->tail; while (parser->column - save_column <= 5 && S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); + S_advance_offset(parser, *container, CMARK_EXTENT_BLANK, input, 1, true); } i = parser->column - save_column; @@ -969,9 +1020,14 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, data->padding = matched + 1; parser->offset = save_offset; parser->column = save_column; + if (save_source_map_tail) { + cmark_source_extent *tmp_extent; + for (tmp_extent = save_source_map_tail->next; tmp_extent; tmp_extent = source_map_free_extent(parser->source_map, tmp_extent)); + } + parser->partially_consumed_tab = save_partially_consumed_tab; if (i > 0) { - S_advance_offset(parser, input, 1, true); + S_advance_offset(parser, *container, CMARK_EXTENT_BLANK, input, 1, true); } } else { data->padding = matched + i; @@ -982,22 +1038,14 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, data->marker_offset = parser->indent; - if (cont_type != CMARK_NODE_LIST || - !lists_match(&((*container)->as.list), data)) { - *container = add_child(parser, *container, CMARK_NODE_LIST, - parser->first_nonspace + 1); - - memcpy(&((*container)->as.list), data, sizeof(*data)); - } - - // add the list item - *container = add_child(parser, *container, CMARK_NODE_ITEM, - parser->first_nonspace + 1); /* TODO: static */ - memcpy(&((*container)->as.list), data, sizeof(*data)); + if (list) + memcpy(&(list->as.list), data, sizeof(*data)); + if (item) + memcpy(&(item->as.list), data, sizeof(*data)); + parser->mem->free(data); } else if (indented && !maybe_lazy && !parser->blank) { - S_advance_offset(parser, input, CODE_INDENT, true); *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, parser->offset + 1); (*container)->as.code.fenced = false; @@ -1006,6 +1054,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->as.code.fence_offset = 0; (*container)->as.code.info = cmark_chunk_literal(""); + S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, CODE_INDENT, true); } else { break; } @@ -1070,6 +1119,11 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, } if (S_type(container) == CMARK_NODE_CODE_BLOCK) { + source_map_append_extent(parser->source_map, + parser->offset + parser->line_offset, + parser->line_offset + input->len, + container, + CMARK_EXTENT_CONTENT); add_line(container, input, parser); } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) { add_line(container, input, parser); @@ -1110,22 +1164,43 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, container = finalize(parser, container); assert(parser->current != NULL); } + source_map_append_extent(parser->source_map, + parser->offset + parser->line_offset, + parser->line_offset + input->len, + container, + CMARK_EXTENT_CONTENT); } else if (parser->blank) { - // ??? do nothing + source_map_append_extent(parser->source_map, + parser->line_offset + parser->offset, + parser->line_offset + input->len, + container, + CMARK_EXTENT_BLANK); } else if (accepts_lines(S_type(container))) { + bufsize_t initial_len = input->len; + bool chopped = false; + if (S_type(container) == CMARK_NODE_HEADING && container->as.heading.setext == false) { chop_trailing_hashtags(input); + chopped = true; } - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, parser->first_nonspace - parser->offset, false); add_line(container, input, parser); + + if (chopped) + source_map_append_extent(parser->source_map, + MAX(parser->line_offset + parser->offset, parser->line_offset + input->len), + parser->line_offset + initial_len, + container, + CMARK_EXTENT_CLOSER); } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, parser->first_nonspace - parser->offset, false); + parser->last_paragraph_extent = parser->source_map->tail; add_line(container, input, parser); } @@ -1187,6 +1262,7 @@ finished: cmark_node *cmark_parser_finish(cmark_parser *parser) { if (parser->linebuf.size) { S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); + parser->line_offset += parser->linebuf.size; cmark_strbuf_clear(&parser->linebuf); } @@ -1205,3 +1281,9 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { #endif return parser->root; } + +cmark_source_extent * +cmark_parser_get_first_source_extent(cmark_parser *parser) +{ + return parser->source_map->head; +} diff --git a/src/cmark.c b/src/cmark.c index 0d3bc1669f..2ef6cb4cca 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -24,6 +24,11 @@ static void *xrealloc(void *ptr, size_t size) { return new_ptr; } +void cmark_default_mem_free(void *ptr) +{ + free(ptr); +} + cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free}; char *cmark_markdown_to_html(const char *text, size_t len, int options) { diff --git a/src/cmark.h b/src/cmark.h index 6ed7eb0574..034f0e6a37 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -2,6 +2,7 @@ #define CMARK_H #include +#include #include #include @@ -65,6 +66,21 @@ typedef enum { CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, } cmark_node_type; +typedef enum { + CMARK_EXTENT_NONE, + CMARK_EXTENT_OPENER, + CMARK_EXTENT_CLOSER, + CMARK_EXTENT_BLANK, + CMARK_EXTENT_CONTENT, + CMARK_EXTENT_PUNCTUATION, + CMARK_EXTENT_LINK_DESTINATION, + CMARK_EXTENT_LINK_TITLE, + CMARK_EXTENT_LINK_LABEL, + CMARK_EXTENT_REFERENCE_DESTINATION, + CMARK_EXTENT_REFERENCE_LABEL, + CMARK_EXTENT_REFERENCE_TITLE, +} cmark_extent_type; + /* For backwards compatibility: */ #define CMARK_NODE_HEADER CMARK_NODE_HEADING #define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK @@ -86,6 +102,7 @@ typedef enum { typedef struct cmark_node cmark_node; typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; +typedef struct cmark_source_extent cmark_source_extent; /** * ## Custom memory allocator support @@ -100,6 +117,11 @@ typedef struct cmark_mem { void (*free)(void *); } cmark_mem; +/** Convenience function for bindings. + */ +CMARK_EXPORT +void cmark_default_mem_free(void *ptr); + /** * ## Creating and Destroying Nodes */ @@ -477,6 +499,11 @@ void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); CMARK_EXPORT cmark_node *cmark_parser_finish(cmark_parser *parser); +/** Return a pointer to the first extent of the parser's source map + */ +CMARK_EXPORT +cmark_source_extent *cmark_parser_get_first_source_extent(cmark_parser *parser); + /** Parse a CommonMark document in 'buffer' of length 'len'. * Returns a pointer to a tree of nodes. The memory allocated for * the node tree should be released using 'cmark_node_free' @@ -492,6 +519,39 @@ cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); CMARK_EXPORT cmark_node *cmark_parse_file(FILE *f, int options); +/** + * ## Source map API + */ + +/* Return the index, in bytes, of the start of this extent */ +CMARK_EXPORT +uint64_t cmark_source_extent_get_start(cmark_source_extent *extent); + +/* Return the index, in bytes, of the stop of this extent. This + * index is not included in the extent*/ +CMARK_EXPORT +uint64_t cmark_source_extent_get_stop(cmark_source_extent *extent); + +/* Return the extent immediately following 'extent' */ +CMARK_EXPORT +cmark_source_extent *cmark_source_extent_get_next(cmark_source_extent *extent); + +/* Return the extent immediately preceding 'extent' */ +CMARK_EXPORT +cmark_source_extent *cmark_source_extent_get_previous(cmark_source_extent *extent); + +/* Return the node 'extent' maps to */ +CMARK_EXPORT +cmark_node *cmark_source_extent_get_node(cmark_source_extent *extent); + +/* Return the type of 'extent' */ +CMARK_EXPORT +cmark_extent_type cmark_source_extent_get_type(cmark_source_extent *extent); + +/* Return a string representation of 'extent' */ +CMARK_EXPORT +const char *cmark_source_extent_get_type_string(cmark_source_extent *extent); + /** * ## Rendering */ diff --git a/src/inlines.c b/src/inlines.c index c9cccfe801..96da28bea0 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -13,6 +13,10 @@ #include "scanners.h" #include "inlines.h" +#ifndef MIN +#define MIN(x, y) ((x < y) ? x : y) +#endif + static const char *EMDASH = "\xE2\x80\x94"; static const char *ENDASH = "\xE2\x80\x93"; static const char *ELLIPSES = "\xE2\x80\xA6"; @@ -39,6 +43,7 @@ typedef struct delimiter { unsigned char delim_char; bool can_open; bool can_close; + cmark_source_extent *extent; } delimiter; typedef struct bracket { @@ -49,6 +54,7 @@ typedef struct bracket { bool image; bool active; bool bracket_after; + cmark_source_extent *extent; } bracket; typedef struct { @@ -60,6 +66,7 @@ typedef struct { bracket *last_bracket; bufsize_t backticks[MAXBACKTICKS + 1]; bool scanned_for_backticks; + cmark_source_map *source_map; } subject; static CMARK_INLINE bool S_is_line_end_char(char c) { @@ -72,7 +79,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, static int parse_inline(subject *subj, cmark_node *parent, int options); static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap); + cmark_reference_map *refmap, cmark_source_map *source_map); static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. @@ -148,7 +155,7 @@ static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, } static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap) { + cmark_reference_map *refmap, cmark_source_map *source_map) { int i; e->mem = mem; e->input.data = buffer->ptr; @@ -158,6 +165,8 @@ static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, e->refmap = refmap; e->last_delim = NULL; e->last_bracket = NULL; + e->source_map = source_map; + for (i=0; i <= MAXBACKTICKS; i++) { e->backticks[i] = 0; } @@ -404,6 +413,7 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, if (delim->previous != NULL) { delim->previous->next = delim; } + delim->extent = NULL; subj->last_delim = delim; } @@ -419,11 +429,12 @@ static void push_bracket(subject *subj, bool image, cmark_node *inl_text) { b->previous_delimiter = subj->last_delim; b->position = subj->pos; b->bracket_after = false; + b->extent = NULL; subj->last_bracket = b; } // Assumes the subject has a c at the current position. -static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { +static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart, bool *pushed) { bufsize_t numdelims; cmark_node *inl_text; bool can_open, can_close; @@ -444,6 +455,9 @@ static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { push_delimiter(subj, c, can_open, can_close, inl_text); + *pushed = true; + } else { + *pushed = false; } return inl_text; @@ -607,6 +621,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, bufsize_t opener_num_chars = opener_inl->as.literal.len; bufsize_t closer_num_chars = closer_inl->as.literal.len; cmark_node *tmp, *tmpnext, *emph; + cmark_source_extent *tmp_extent; // calculate the actual number of characters used from this closer if (closer_num_chars < 3 || opener_num_chars < 3) { @@ -642,9 +657,28 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, } cmark_node_insert_after(opener_inl, emph); + tmp_extent = closer->extent->prev; + + source_map_insert_extent(subj->source_map, + opener->extent, + opener->extent->stop - use_delims, + opener->extent->stop, + emph, + CMARK_EXTENT_OPENER); + opener->extent->stop -= use_delims; + + source_map_insert_extent(subj->source_map, + tmp_extent, + closer->extent->start, + closer->extent->start + use_delims, + emph, + CMARK_EXTENT_CLOSER); + closer->extent->start += use_delims; + // if opener has 0 characters, remove it and its associated inline if (opener_num_chars == 0) { cmark_node_free(opener_inl); + source_map_free_extent(subj->source_map, opener->extent); remove_delimiter(subj, opener); } @@ -654,6 +688,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, cmark_node_free(closer_inl); // remove closer from list tmp_delim = closer->next; + source_map_free_extent(subj->source_map, closer->extent); remove_delimiter(subj, closer); closer = tmp_delim; } @@ -876,6 +911,8 @@ static cmark_node *handle_close_bracket(subject *subj) { int found_label; cmark_node *tmp, *tmpnext; bool is_image; + bool is_inline = false; + bool is_shortcut = false; advance(subj); // advance past ] initial_pos = subj->pos; @@ -926,6 +963,7 @@ static cmark_node *handle_close_bracket(subject *subj) { title = cmark_clean_title(subj->mem, &title_chunk); cmark_chunk_free(subj->mem, &url_chunk); cmark_chunk_free(subj->mem, &title_chunk); + is_inline = true; goto match; } else { @@ -948,6 +986,7 @@ static cmark_node *handle_close_bracket(subject *subj) { cmark_chunk_free(subj->mem, &raw_label); raw_label = cmark_chunk_dup(&subj->input, opener->position, initial_pos - opener->position - 1); + is_shortcut = true; found_label = true; } @@ -977,6 +1016,28 @@ match: cmark_node_insert_before(opener->inl_text, inl); // Add link text: tmp = opener->inl_text->next; + assert(opener->extent); + + opener->extent->node = inl; + opener->extent->type = CMARK_EXTENT_PUNCTUATION; + + source_map_splice_extent(subj->source_map, initial_pos - 1, initial_pos, inl, CMARK_EXTENT_PUNCTUATION); + if (is_inline) { + source_map_splice_extent(subj->source_map, after_link_text_pos, starturl, inl, CMARK_EXTENT_PUNCTUATION); + source_map_splice_extent(subj->source_map, starturl, endurl, inl, CMARK_EXTENT_LINK_DESTINATION); + if (endtitle != starttitle) { + source_map_splice_extent(subj->source_map, endurl, starttitle, inl, CMARK_EXTENT_BLANK); + source_map_splice_extent(subj->source_map, starttitle, endtitle, inl, CMARK_EXTENT_LINK_TITLE); + source_map_splice_extent(subj->source_map, endtitle, subj->pos, inl, CMARK_EXTENT_BLANK); + } else { + source_map_splice_extent(subj->source_map, endurl, subj->pos, inl, CMARK_EXTENT_BLANK); + } + } else if (!is_shortcut) { + source_map_splice_extent(subj->source_map, initial_pos, initial_pos + 1, inl, CMARK_EXTENT_PUNCTUATION); + source_map_splice_extent(subj->source_map, initial_pos + 1, subj->pos - 1, inl, CMARK_EXTENT_LINK_LABEL); + source_map_splice_extent(subj->source_map, subj->pos - 1, subj->pos, inl, CMARK_EXTENT_PUNCTUATION); + } + while (tmp) { tmpnext = tmp->next; cmark_node_append_child(inl, tmp); @@ -1080,6 +1141,10 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { cmark_chunk contents; unsigned char c; bufsize_t endpos; + bufsize_t startpos = subj->pos; + bool add_extent_to_last_bracket = false; + bool add_extent_to_last_delimiter = false; + c = peek_char(subj); if (c == 0) { return 0; @@ -1105,7 +1170,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { case '_': case '\'': case '"': - new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0); + new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0, &add_extent_to_last_delimiter); break; case '-': new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0); @@ -1117,6 +1182,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { advance(subj); new_inl = make_str(subj->mem, cmark_chunk_literal("[")); push_bracket(subj, false, new_inl); + add_extent_to_last_bracket = true; break; case ']': new_inl = handle_close_bracket(subj); @@ -1127,6 +1193,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { advance(subj); new_inl = make_str(subj->mem, cmark_chunk_literal("![")); push_bracket(subj, true, new_inl); + add_extent_to_last_bracket = true; } else { new_inl = make_str(subj->mem, cmark_chunk_literal("!")); } @@ -1143,7 +1210,17 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { new_inl = make_str(subj->mem, contents); } + if (new_inl != NULL) { + cmark_source_extent *extent; + + extent = source_map_splice_extent(subj->source_map, startpos, subj->pos, new_inl, CMARK_EXTENT_CONTENT); + + if (add_extent_to_last_bracket) + subj->last_bracket->extent = extent; + else if (add_extent_to_last_delimiter) + subj->last_delim->extent = extent; + cmark_node_append_child(parent, new_inl); } @@ -1152,9 +1229,11 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { // Parse inlines from parent's string_content, adding as children of parent. extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, - cmark_reference_map *refmap, int options) { + cmark_reference_map *refmap, int options, + cmark_source_map *source_map, uint64_t total_length) { subject subj; - subject_from_buf(mem, &subj, &parent->content, refmap); + subject_from_buf(mem, &subj, &parent->content, refmap, source_map); + bufsize_t initial_len = subj.input.len; cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) @@ -1168,6 +1247,13 @@ extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, while (subj.last_bracket) { pop_bracket(&subj); } + + source_map_insert_extent(source_map, + source_map->cursor, + source_map->cursor->stop, + MIN(source_map->cursor->stop + initial_len - subj.input.len, total_length), + parent, + CMARK_EXTENT_BLANK); } // Parse zero or more space characters, including at most one newline. @@ -1183,22 +1269,30 @@ static void spnl(subject *subj) { // Return 0 if no reference found, otherwise position of subject // after reference is parsed. bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, - cmark_reference_map *refmap) { + cmark_reference_map *refmap, + cmark_node *root, + cmark_source_map *source_map) { subject subj; + cmark_node *container = source_map->cursor->node; + cmark_source_extent *tmp_extent = source_map->cursor; cmark_chunk lab; cmark_chunk url; cmark_chunk title; bufsize_t matchlen = 0; - bufsize_t beforetitle; + bufsize_t starttitle, endtitle; + bufsize_t endlabel; + bufsize_t starturl, endurl; - subject_from_buf(mem, &subj, input, NULL); + subject_from_buf(mem, &subj, input, NULL, source_map); // parse label: if (!link_label(&subj, &lab) || lab.len == 0) return 0; + endlabel = subj.pos - 1; + // colon: if (peek_char(&subj) == ':') { advance(&subj); @@ -1208,6 +1302,7 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, // parse link url: spnl(&subj); + starturl = subj.pos; matchlen = manual_scan_link_url(&subj.input, subj.pos); if (matchlen > 0) { url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); @@ -1217,22 +1312,29 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, } // parse optional link_title - beforetitle = subj.pos; + endurl = subj.pos; spnl(&subj); + starttitle = subj.pos; matchlen = scan_link_title(&subj.input, subj.pos); if (matchlen) { title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); subj.pos += matchlen; } else { - subj.pos = beforetitle; + subj.pos = endurl; + starttitle = endurl; + endtitle = endurl; title = cmark_chunk_literal(""); } + endtitle = subj.pos; + // parse final spaces and newline: skip_spaces(&subj); if (!skip_line_end(&subj)) { if (matchlen) { // try rewinding before title - subj.pos = beforetitle; + subj.pos = endurl; + starttitle = endurl; + endtitle = endurl; skip_spaces(&subj); if (!skip_line_end(&subj)) { return 0; @@ -1243,5 +1345,22 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, } // insert reference into refmap cmark_reference_create(refmap, &lab, &url, &title); + + // Mark the extents of the reference + source_map_splice_extent(source_map, 0, 1, root, CMARK_EXTENT_PUNCTUATION); + source_map_splice_extent(source_map, 1, endlabel, root, CMARK_EXTENT_REFERENCE_LABEL); + source_map_splice_extent(source_map, endlabel, endlabel + 2, root, CMARK_EXTENT_PUNCTUATION); + source_map_splice_extent(source_map, endlabel + 2, starturl, root, CMARK_EXTENT_BLANK); + source_map_splice_extent(source_map, starturl, endurl, root, CMARK_EXTENT_REFERENCE_DESTINATION); + source_map_splice_extent(source_map, endurl, starttitle, root, CMARK_EXTENT_BLANK); + source_map_splice_extent(source_map, starttitle, endtitle, root, CMARK_EXTENT_REFERENCE_TITLE); + source_map_splice_extent(source_map, endtitle, subj.pos, root, CMARK_EXTENT_BLANK); + + while (tmp_extent != source_map->cursor) { + if (tmp_extent->node == container) + tmp_extent->node = root; + tmp_extent = tmp_extent->next; + } + return subj.pos; } diff --git a/src/inlines.h b/src/inlines.h index 52be76820d..8de31b1906 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -1,6 +1,10 @@ #ifndef CMARK_INLINES_H #define CMARK_INLINES_H +#include "chunk.h" +#include "references.h" +#include "source_map.h" + #ifdef __cplusplus extern "C" { #endif @@ -9,10 +13,13 @@ cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url); cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, - cmark_reference_map *refmap, int options); + cmark_reference_map *refmap, int options, + cmark_source_map *source_map, uint64_t total_length); bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, - cmark_reference_map *refmap); + cmark_reference_map *refmap, + cmark_node *root, + cmark_source_map *source_map); #ifdef __cplusplus } diff --git a/src/parser.h b/src/parser.h index 0c5033bd22..b28a8a75b5 100644 --- a/src/parser.h +++ b/src/parser.h @@ -5,6 +5,7 @@ #include "node.h" #include "buffer.h" #include "memory.h" +#include "source_map.h" #ifdef __cplusplus extern "C" { @@ -27,9 +28,12 @@ struct cmark_parser { bool partially_consumed_tab; cmark_strbuf curline; bufsize_t last_line_length; + bufsize_t line_offset; cmark_strbuf linebuf; int options; bool last_buffer_ended_with_cr; + cmark_source_map *source_map; + cmark_source_extent *last_paragraph_extent; }; #ifdef __cplusplus diff --git a/src/source_map.c b/src/source_map.c new file mode 100644 index 0000000000..db01a2187d --- /dev/null +++ b/src/source_map.c @@ -0,0 +1,293 @@ +#include + +#include "source_map.h" + +cmark_source_map * +source_map_new(cmark_mem *mem) +{ + cmark_source_map *res = (cmark_source_map *) mem->calloc(1, sizeof(cmark_source_map)); + res->mem = mem; + return res; +} + +void +source_map_free(cmark_source_map *self) +{ + cmark_source_extent *tmp; + for (tmp = self->head; tmp; tmp = source_map_free_extent(self, tmp)); + self->mem->free(self); +} + +cmark_source_extent * +source_map_append_extent(cmark_source_map *self, uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) +{ + assert (start <= stop); + assert (!self->tail || self->tail->stop <= start); + + cmark_source_extent *res = (cmark_source_extent *) self->mem->calloc(1, sizeof(cmark_source_extent)); + + res->start = start; + res->stop = stop; + res->node = node; + res->type = type; + + res->next = NULL; + res->prev = self->tail; + + if (!self->head) + self->head = res; + else + self->tail->next = res; + + self->tail = res; + + return res; +} + +cmark_source_extent * +source_map_insert_extent(cmark_source_map *self, cmark_source_extent *previous, + uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) +{ + if (start == stop) + return previous; + + cmark_source_extent *extent = (cmark_source_extent *) self->mem->calloc(1, sizeof(cmark_source_extent)); + + extent->start = start; + extent->stop = stop; + extent->node = node; + extent->type = type; + extent->next = previous->next; + extent->prev = previous; + previous->next = extent; + + if (extent->next) + extent->next->prev = extent; + else + self->tail = extent; + + return extent; +} + +cmark_source_extent * +source_map_free_extent(cmark_source_map *self, cmark_source_extent *extent) +{ + cmark_source_extent *next = extent->next; + + if (extent->prev) + extent->prev->next = next; + + if (extent->next) + extent->next->prev = extent->prev; + + if (extent == self->tail) + self->tail = extent->prev; + + if (extent == self->head) + self->head = extent->next; + + if (extent == self->cursor) { + self->cursor = extent->prev; + } + + if (extent == self->next_cursor) { + self->next_cursor = extent->next; + } + + self->mem->free(extent); + + return next; +} + +cmark_source_extent * +source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, + cmark_node *node, uint64_t total_length) +{ + cmark_source_extent *next_extent = extent->next; + cmark_source_extent *res; + + while (next_extent && extent->start == extent->stop) { + extent = source_map_free_extent(self, extent); + extent = next_extent; + next_extent = extent->next; + } + + if (next_extent) { + res = source_map_insert_extent(self, + extent, + extent->stop, + extent->next->start, + node, + CMARK_EXTENT_BLANK); + } else { + res = source_map_insert_extent(self, + extent, + extent->stop, + total_length, + node, + CMARK_EXTENT_BLANK); + } + + if (extent->start == extent->stop) + source_map_free_extent(self, extent); + + return res; +} + +cmark_source_extent * +source_map_splice_extent(cmark_source_map *self, uint64_t start, uint64_t stop, + cmark_node *node, cmark_extent_type type) +{ + if (!self->next_cursor) { + self->cursor = source_map_insert_extent(self, + self->cursor, + start + self->cursor_offset, + stop + self->cursor_offset, node, type); + + return self->cursor; + } else if (start + self->cursor_offset < self->next_cursor->start && + stop + self->cursor_offset <= self->next_cursor->start) { + self->cursor = source_map_insert_extent(self, + self->cursor, + start + self->cursor_offset, + stop + self->cursor_offset, node, type); + + return self->cursor; + } else if (start + self->cursor_offset < self->next_cursor->start) { + uint64_t new_start = self->next_cursor->start - self->cursor_offset; + + self->cursor = source_map_insert_extent(self, + self->cursor, + start + self->cursor_offset, + self->next_cursor->start, + node, type); + + if (new_start == stop) + return self->cursor; + + start = new_start; + } + + while (self->next_cursor && start + self->cursor_offset >= self->next_cursor->start) { + self->cursor_offset += self->next_cursor->stop - self->next_cursor->start; + self->cursor = self->cursor->next; + self->next_cursor = self->cursor->next; + } + + return source_map_splice_extent(self, start, stop, node, type); +} + +bool +source_map_start_cursor(cmark_source_map *self, cmark_source_extent *cursor) +{ + self->cursor = cursor ? cursor : self->head; + + if (!self->cursor) + return false; + + self->next_cursor = self->cursor->next; + self->cursor_offset = self->cursor->stop; + + return true; +} + +void +source_map_pretty_print(cmark_source_map *self) { + cmark_source_extent *tmp; + + for (tmp = self->head; tmp; tmp = tmp->next) { + printf ("%lu:%lu - %s, %s (%p)\n", tmp->start, tmp->stop, + cmark_node_get_type_string(tmp->node), + cmark_source_extent_get_type_string(tmp), + (void *) tmp->node); + } +} + +bool +source_map_check(cmark_source_map *self, uint64_t total_length) +{ + uint64_t last_stop = 0; + cmark_source_extent *tmp; + + for (tmp = self->head; tmp; tmp = tmp->next) { + if (tmp->start != last_stop) { + return false; + } if (tmp->start == tmp->stop) + return false; + last_stop = tmp->stop; + } + + if (last_stop != total_length) + return false; + + return true; +} + + +uint64_t +cmark_source_extent_get_start(cmark_source_extent *extent) +{ + return extent->start; +} + +uint64_t +cmark_source_extent_get_stop(cmark_source_extent *extent) +{ + return extent->stop; +} + +cmark_node * +cmark_source_extent_get_node(cmark_source_extent *extent) +{ + return extent->node; +} + +cmark_source_extent * +cmark_source_extent_get_next(cmark_source_extent *extent) +{ + return extent->next; +} + +cmark_source_extent * +cmark_source_extent_get_previous(cmark_source_extent *extent) +{ + return extent->prev; +} + +cmark_extent_type +cmark_source_extent_get_type(cmark_source_extent *extent) +{ + return extent->type; +} + +const char * +cmark_source_extent_get_type_string(cmark_source_extent *extent) +{ + switch (extent->type) { + case CMARK_EXTENT_NONE: + return "unknown"; + case CMARK_EXTENT_OPENER: + return "opener"; + case CMARK_EXTENT_CLOSER: + return "closer"; + case CMARK_EXTENT_BLANK: + return "blank"; + case CMARK_EXTENT_CONTENT: + return "content"; + case CMARK_EXTENT_PUNCTUATION: + return "punctuation"; + case CMARK_EXTENT_LINK_DESTINATION: + return "link_destination"; + case CMARK_EXTENT_LINK_TITLE: + return "link_title"; + case CMARK_EXTENT_LINK_LABEL: + return "link_label"; + case CMARK_EXTENT_REFERENCE_DESTINATION: + return "reference_destination"; + case CMARK_EXTENT_REFERENCE_LABEL: + return "reference_label"; + case CMARK_EXTENT_REFERENCE_TITLE: + return "reference_title"; + } + return "unknown"; +} diff --git a/src/source_map.h b/src/source_map.h new file mode 100644 index 0000000000..619a07376a --- /dev/null +++ b/src/source_map.h @@ -0,0 +1,66 @@ +#ifndef CMARK_SOURCE_MAP_H +#define CMARK_SOURCE_MAP_H + +#include "cmark.h" +#include "config.h" + +typedef struct _cmark_source_map +{ + cmark_source_extent *head; + cmark_source_extent *tail; + cmark_source_extent *cursor; + cmark_source_extent *next_cursor; + uint64_t cursor_offset; + cmark_mem *mem; +} cmark_source_map; + +struct cmark_source_extent +{ + uint64_t start; + uint64_t stop; + struct cmark_source_extent *next; + struct cmark_source_extent *prev; + cmark_node *node; + cmark_extent_type type; +}; + +cmark_source_map * source_map_new (cmark_mem *mem); + +void source_map_free (cmark_source_map *self); + +bool source_map_check (cmark_source_map *self, + uint64_t total_length); + +void source_map_pretty_print (cmark_source_map *self); + +cmark_source_extent * source_map_append_extent(cmark_source_map *self, + uint64_t start, + uint64_t stop, + cmark_node *node, + cmark_extent_type type); + +cmark_source_extent * source_map_insert_extent(cmark_source_map *self, + cmark_source_extent *previous, + uint64_t start, + uint64_t stop, + cmark_node *node, + cmark_extent_type type); + +cmark_source_extent * source_map_free_extent (cmark_source_map *self, + cmark_source_extent *extent); + +cmark_source_extent * source_map_stitch_extent(cmark_source_map *self, + cmark_source_extent *extent, + cmark_node *node, + uint64_t total_length); + +cmark_source_extent * source_map_splice_extent(cmark_source_map *self, + uint64_t start, + uint64_t stop, + cmark_node *node, + cmark_extent_type type); + +bool source_map_start_cursor (cmark_source_map *self, + cmark_source_extent *cursor); + +#endif diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2a597ab1dd..186b6a8fa6 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -73,3 +73,20 @@ ELSE(PYTHONINTERP_FOUND) ENDIF(PYTHONINTERP_FOUND) +if (PYTHON_BINDING_TESTS) + find_package(PythonInterp 3 REQUIRED) +else(PYTHON_BINDING_TESTS) + find_package(PythonInterp 3) +endif(PYTHON_BINDING_TESTS) + +IF (PYTHONINTERP_FOUND) + add_test(python3_bindings + ${PYTHON_EXECUTABLE} + "${CMAKE_CURRENT_SOURCE_DIR}/test_cmark.py" + "${CMAKE_CURRENT_BINARY_DIR}/../src" + ) +ELSE(PYTHONINTERP_FOUND) + message("\n*** A python 3 interpreter is required to run the python binding tests.\n") + add_test(skipping_python_binding_tests + echo "Skipping python binding tests, because no python 3 interpreter is available.") +ENDIF(PYTHONINTERP_FOUND) diff --git a/test/test_cmark.py b/test/test_cmark.py new file mode 100644 index 0000000000..6726c51211 --- /dev/null +++ b/test/test_cmark.py @@ -0,0 +1,490 @@ +# -*- coding: utf8 -*- + +from __future__ import unicode_literals + +import sys +import os +import unittest +import argparse + +here = os.path.abspath(os.path.dirname(__file__)) +sys.path.append(os.path.join(here, os.pardir, 'wrappers')) +from wrapper import * + +class TestHighLevel(unittest.TestCase): + def test_markdown_to_html(self): + self.assertEqual(markdown_to_html('foo'), '

                            foo

                            \n') + + def test_parse_document(self): + doc = parse_document('foo') + self.assertEqual(type(doc), Document) + +class TestParser(unittest.TestCase): + def test_lifecycle(self): + parser = Parser() + del parser + + def test_feed(self): + parser = Parser() + parser.feed('‘') + + def test_finish(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + + def test_source_map(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + source_map = parser.get_source_map() + extents = [e for e in source_map] + self.assertEqual(len(extents), 1) + self.assertEqual(extents[0].type, ExtentType.CONTENT) + self.assertEqual(extents[0].start, 0) + self.assertEqual(extents[0].stop, 3) + + def test_render_html(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + res = doc.to_html() + self.assertEqual(res, '

                            \n') + + def test_render_xml(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + res = doc.to_xml() + self.assertEqual( + res, + '\n' + '\n' + '\n' + ' \n' + ' \n' + ' \n' + '\n') + + def test_render_commonmark(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + res = doc.to_commonmark() + self.assertEqual(res, '‘\n') + + def test_render_man(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + res = doc.to_man() + self.assertEqual( + res, + '.PP\n' + '\[oq]\n') + + def test_render_latex(self): + parser = Parser() + parser.feed('‘') + doc = parser.finish() + res = doc.to_latex() + self.assertEqual(res, '`\n') + +class TestNode(unittest.TestCase): + def test_type(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + self.assertEqual(type(doc), Document) + + def test_first_child(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + child1 = doc.first_child + child2 = doc.first_child + self.assertEqual(child1, child2) + self.assertEqual((child1 != child2), False) + + def test_last_child(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + child1 = doc.first_child + child2 = doc.last_child + self.assertEqual(child1, child2) + self.assertEqual((child1 != child2), False) + + def test_next(self): + parser = Parser() + parser.feed('foo *bar*') + doc = parser.finish() + para = doc.first_child + self.assertEqual(type(para), Paragraph) + text = para.first_child + self.assertEqual(type(text), Text) + emph = text.next + self.assertEqual(type(emph), Emph) + self.assertEqual(para.next, None) + + def test_previous(self): + parser = Parser() + parser.feed('foo *bar*') + doc = parser.finish() + para = doc.first_child + text = para.first_child + emph = text.next + self.assertEqual(emph.previous, text) + self.assertEqual(para.previous, None) + + def test_children(self): + parser = Parser() + parser.feed('foo *bar*') + doc = parser.finish() + para = doc.first_child + children = [c for c in para] + self.assertEqual(len(children), 2) + self.assertEqual(type(children[0]), Text) + self.assertEqual(type(children[1]), Emph) + + def test_new(self): + with self.assertRaises(NotImplementedError): + n = Node() + + def test_unlink(self): + parser = Parser() + parser.feed('foo *bar*') + doc = parser.finish() + para = doc.first_child + para.unlink() + self.assertEqual(doc.to_html(), '') + + def test_append_child(self): + parser = Parser() + parser.feed('') + doc = parser.finish() + doc.append_child(Paragraph()) + self.assertEqual(doc.to_html(), '

                            \n') + with self.assertRaises(LibcmarkError): + doc.append_child(Text(literal='foo')) + + def test_prepend_child(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + doc.prepend_child(Paragraph()) + self.assertEqual(doc.to_html(), '

                            \n

                            foo

                            \n') + with self.assertRaises(LibcmarkError): + doc.prepend_child(Text(literal='foo')) + + def test_insert_before(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + para = doc.first_child + para.insert_before(Paragraph()) + self.assertEqual(doc.to_html(), '

                            \n

                            foo

                            \n') + with self.assertRaises(LibcmarkError): + para.insert_before(Text(literal='foo')) + + def test_insert_after(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + para = doc.first_child + para.insert_after(Paragraph()) + self.assertEqual(doc.to_html(), '

                            foo

                            \n

                            \n') + with self.assertRaises(LibcmarkError): + para.insert_after(Text(literal='foo')) + + def test_consolidate_text_nodes(self): + parser = Parser() + parser.feed('foo **bar*') + doc = parser.finish() + self.assertEqual(len([c for c in doc.first_child]), 3) + doc.consolidate_text_nodes() + self.assertEqual(len([c for c in doc.first_child]), 2) + +class TestLiteral(unittest.TestCase): + def test_text(self): + parser = Parser() + parser.feed('foo') + doc = parser.finish() + para = doc.first_child + self.assertEqual(type(para), Paragraph) + text = para.first_child + self.assertEqual(type(text), Text) + self.assertEqual(text.literal, 'foo') + text.literal = 'bar' + self.assertEqual(text.to_html(), 'bar') + +class TestDocument(unittest.TestCase): + def test_new(self): + doc = Document() + self.assertEqual(doc.to_html(), + '') + +class TestBlockQuote(unittest.TestCase): + def test_new(self): + bq = BlockQuote() + self.assertEqual(bq.to_html(), + '
                            \n
                            \n') + +class TestList(unittest.TestCase): + def test_new(self): + list_ = List() + self.assertEqual(list_.to_html(), + '
                              \n
                            \n') + + def test_type(self): + parser = Parser() + parser.feed('* foo') + doc = parser.finish() + list_ = doc.first_child + self.assertEqual(type(list_), List) + self.assertEqual(list_.type, ListType.BULLET) + list_.type = ListType.ORDERED + self.assertEqual(doc.to_html(), + '
                              \n' + '
                            1. foo
                            2. \n' + '
                            \n') + + def test_start(self): + parser = Parser() + parser.feed('2. foo') + doc = parser.finish() + list_ = doc.first_child + self.assertEqual(type(list_), List) + self.assertEqual(list_.start, 2) + list_.start = 1 + self.assertEqual(doc.to_commonmark(), + '1. foo\n') + with self.assertRaises(LibcmarkError): + list_.start = -1 + list_.type = ListType.BULLET + + def test_delim(self): + parser = Parser() + parser.feed('1. foo') + doc = parser.finish() + list_ = doc.first_child + self.assertEqual(type(list_), List) + self.assertEqual(list_.delim, '.') + list_.delim = ')' + self.assertEqual(doc.to_commonmark(), + '1) foo\n') + + def test_tight(self): + parser = Parser() + parser.feed('* foo\n' + '\n' + '* bar\n') + doc = parser.finish() + list_ = doc.first_child + self.assertEqual(type(list_), List) + self.assertEqual(list_.tight, False) + self.assertEqual(doc.to_commonmark(), + ' - foo\n' + '\n' + ' - bar\n') + + list_.tight = True + self.assertEqual(doc.to_commonmark(), + ' - foo\n' + ' - bar\n') + + with self.assertRaises(LibcmarkError): + list_.tight = 42 + +class TestItem(unittest.TestCase): + def test_new(self): + item = Item() + self.assertEqual(item.to_html(), + '
                          • \n') + +class TestCodeBlock(unittest.TestCase): + def test_new(self): + cb = CodeBlock(literal='foo', fence_info='python') + self.assertEqual(cb.to_html(), + '
                            foo
                            \n') + + def test_fence_info(self): + parser = Parser() + parser.feed('``` markdown\n' + 'hello\n' + '```\n') + doc = parser.finish() + code_block = doc.first_child + self.assertEqual(type(code_block), CodeBlock) + self.assertEqual(code_block.fence_info, 'markdown') + code_block.fence_info = 'python' + self.assertEqual(doc.to_commonmark(), + '``` python\n' + 'hello\n' + '```\n') + +class TestHtmlBlock(unittest.TestCase): + def test_new(self): + hb = HtmlBlock(literal='

                            foo

                            ') + self.assertEqual(hb.to_html(), + '

                            foo

                            \n') + +class TestCustomBlock(unittest.TestCase): + def test_new(self): + cb = CustomBlock() + self.assertEqual(cb.to_html(), + '') + +class TestParagraph(unittest.TestCase): + def test_new(self): + para = Paragraph() + self.assertEqual(para.to_html(), + '

                            \n') + +class TestHeading(unittest.TestCase): + def test_new(self): + heading = Heading(level=3) + self.assertEqual(heading.to_html(), + '

                            \n') + + def test_level(self): + parser = Parser() + parser.feed('# foo') + doc = parser.finish() + heading = doc.first_child + self.assertEqual(type(heading), Heading) + self.assertEqual(heading.level, 1) + heading.level = 3 + self.assertEqual(heading.level, 3) + + self.assertEqual(doc.to_html(), + '

                            foo

                            \n') + + with self.assertRaises(LibcmarkError): + heading.level = 10 + +class TestThematicBreak(unittest.TestCase): + def test_new(self): + tb = ThematicBreak() + self.assertEqual(tb.to_html(), + '
                            \n') + +class TestText(unittest.TestCase): + def test_new(self): + text = Text(literal='foo') + self.assertEqual(text.to_html(), + 'foo') + +class TestSoftBreak(unittest.TestCase): + def test_new(self): + sb = SoftBreak() + self.assertEqual(sb.to_html(), '\n') + self.assertEqual(sb.to_html(options=Parser.OPT_HARDBREAKS), + '
                            \n') + self.assertEqual(sb.to_html(options=Parser.OPT_NOBREAKS), + ' ') + +class TestLineBreak(unittest.TestCase): + def test_new(self): + lb = LineBreak() + self.assertEqual(lb.to_html(), '
                            \n') + +class TestCode(unittest.TestCase): + def test_new(self): + code = Code(literal='bar') + self.assertEqual(code.to_html(), 'bar') + +class TestHtmlInline(unittest.TestCase): + def test_new(self): + hi = HtmlInline(literal='baz') + self.assertEqual(hi.to_html(), 'baz') + +class TestCustomInline(unittest.TestCase): + def test_new(self): + ci = CustomInline() + self.assertEqual(ci.to_html(), + '') + +class TestEmph(unittest.TestCase): + def test_new(self): + emph = Emph() + self.assertEqual(emph.to_html(), + '') + +class TestStrong(unittest.TestCase): + def test_new(self): + strong = Strong() + self.assertEqual(strong.to_html(), + '') + +class TestLink(unittest.TestCase): + def test_new(self): + link = Link(url='http://foo.com', title='foo') + self.assertEqual(link.to_html(), + '
                            ') + + def test_url(self): + parser = Parser() + parser.feed('\n') + doc = parser.finish() + para = doc.first_child + self.assertEqual(type(para), Paragraph) + link = para.first_child + self.assertEqual(type(link), Link) + self.assertEqual(link.url, 'http://foo.com') + link.url = 'http://bar.net' + # Yeah that's crappy behaviour but not our problem here + self.assertEqual(doc.to_commonmark(), + '[http://foo.com](http://bar.net)\n') + + def test_title(self): + parser = Parser() + parser.feed('\n') + doc = parser.finish() + para = doc.first_child + self.assertEqual(type(para), Paragraph) + link = para.first_child + self.assertEqual(type(link), Link) + self.assertEqual(link.title, '') + link.title = 'foo' + self.assertEqual(doc.to_html(), + '

                            http://foo.com

                            \n') + +class TestImage(unittest.TestCase): + def test_new(self): + image = Image(url='http://foo.com', title='foo') + self.assertEqual(image.to_html(), + '') + + def test_url(self): + parser = Parser() + parser.feed('![image](image.com)\n') + doc = parser.finish() + para = doc.first_child + self.assertEqual(type(para), Paragraph) + link = para.first_child + self.assertEqual(type(link), Image) + self.assertEqual(link.url, 'image.com') + link.url = 'http://bar.net' + self.assertEqual(doc.to_commonmark(), + '![image](http://bar.net)\n') + + def test_title(self): + parser = Parser() + parser.feed('![image](image.com "ze image")\n') + doc = parser.finish() + para = doc.first_child + self.assertEqual(type(para), Paragraph) + image = para.first_child + self.assertEqual(type(image), Image) + self.assertEqual(image.title, 'ze image') + image.title = 'foo' + self.assertEqual(doc.to_html(), + '

                            image

                            \n') + +if __name__=='__main__': + parser = argparse.ArgumentParser() + parser.add_argument('libdir') + args = parser.parse_known_args() + conf.set_library_path(args[0].libdir) + unittest.main(argv=[sys.argv[0]] + args[1]) diff --git a/wrappers/wrapper.py b/wrappers/wrapper.py old mode 100755 new mode 100644 index 98e7f2b469..7ef032a0b3 --- a/wrappers/wrapper.py +++ b/wrappers/wrapper.py @@ -1,37 +1,921 @@ -#!/usr/bin/env python +from __future__ import unicode_literals -# Example for using the shared library from python -# Will work with either python 2 or python 3 -# Requires cmark library to be installed - -from ctypes import CDLL, c_char_p, c_long +from ctypes import * import sys import platform +c_object_p = POINTER(c_void_p) + sysname = platform.system() -if sysname == 'Darwin': - libname = "libcmark.dylib" -elif sysname == 'Windows': - libname = "cmark.dll" +if sysname == 'Windows': + libc = CDLL('msvcrt.dll') +else: + libc = CDLL('libc.so.6') + +if sys.version_info[0] > 2: + def bytes_and_length(text): + if type(text) == str: + text = text.encode("utf8") + return text, len(text) else: - libname = "libcmark.so" -cmark = CDLL(libname) - -markdown = cmark.cmark_markdown_to_html -markdown.restype = c_char_p -markdown.argtypes = [c_char_p, c_long, c_long] - -opts = 0 # defaults - -def md2html(text): - if sys.version_info >= (3,0): - textbytes = text.encode('utf-8') - textlen = len(textbytes) - return markdown(textbytes, textlen, opts).decode('utf-8') - else: - textbytes = text - textlen = len(text) - return markdown(textbytes, textlen, opts) - -sys.stdout.write(md2html(sys.stdin.read())) + def bytes_and_length(text): + if type(text) == unicode: + text = text.encode("utf8") + return text, len(text) + +def unicode_from_char_p(res, fn, args): + ret = res.decode("utf8") + return ret + +class owned_char_p(c_void_p): + def __del__(self): + conf.lib.cmark_default_mem_free(self.value) + +def unicode_from_owned_char_p(res, fn, args): + ret = cast(res, c_char_p).value.decode("utf8") + return ret + +def boolean_from_result(res, fn, args): + return bool(res) + +def delim_from_int(res, fn, args): + if res == 0: + return '' + elif res == 1: + return '.' + elif res == 2: + return ')' + +class BaseEnumeration(object): + def __init__(self, value): + if value >= len(self.__class__._kinds): + self.__class__._kinds += [None] * (value - len(self.__class__._kinds) + 1) + if self.__class__._kinds[value] is not None: + raise ValueError('{0} value {1} already loaded'.format( + str(self.__class__), value)) + self.value = value + self.__class__._kinds[value] = self + self.__class__._name_map = None + + def from_param(self): + return self.value + + @classmethod + def from_id(cls, id, fn, args): + if id >= len(cls._kinds) or cls._kinds[id] is None: + raise ValueError('Unknown template argument kind %d' % id) + return cls._kinds[id] + + @property + def name(self): + """Get the enumeration name of this cursor kind.""" + if self._name_map is None: + self._name_map = {} + for key, value in self.__class__.__dict__.items(): + if isinstance(value, self.__class__): + self._name_map[value] = key + return str(self._name_map[self]) + + def __repr__(self): + return '%s.%s' % (self.__class__.__name__, self.name,) + +class Parser(object): + OPT_DEFAULT = 0 + OPT_SOURCEPOS = 1 << 1 + OPT_HARDBREAKS = 1 << 2 + OPT_SAFE = 1 << 3 + OPT_NOBREAKS = 1 << 4 + OPT_NORMALIZE = 1 << 8 + OPT_VALIDATE_UTF8 = 1 << 9 + OPT_SMART = 1 << 10 + + def __init__(self, options=0): + self._parser = conf.lib.cmark_parser_new(options) + + def __del__(self): + conf.lib.cmark_parser_free(self._parser) + + def feed(self, text): + conf.lib.cmark_parser_feed(self._parser, *bytes_and_length(text)) + + def finish(self): + return conf.lib.cmark_parser_finish(self._parser) + + def get_source_map(self): + return conf.lib.cmark_parser_get_first_source_extent(self._parser) + +class LibcmarkError(Exception): + def __init__(self, message): + self.m = message + + def __str__(self): + return self.m + +class NodeType(BaseEnumeration): + _kinds = [] + _name_map = None + +NodeType.NONE = NodeType(0) +NodeType.DOCUMENT = NodeType(1) +NodeType.BLOCK_QUOTE = NodeType(2) +NodeType.LIST = NodeType(3) +NodeType.ITEM = NodeType(4) +NodeType.CODE_BLOCK = NodeType(5) +NodeType.HTML_BLOCK = NodeType(6) +NodeType.CUSTOM_BLOCK = NodeType(7) +NodeType.PARAGRAPH = NodeType(8) +NodeType.HEADING = NodeType(9) +NodeType.THEMATIC_BREAK = NodeType(10) +NodeType.TEXT = NodeType(11) +NodeType.SOFTBREAK = NodeType(12) +NodeType.LINEBREAK = NodeType(13) +NodeType.CODE = NodeType(14) +NodeType.HTML_INLINE = NodeType(15) +NodeType.CUSTOM_INLINE = NodeType(16) +NodeType.EMPH = NodeType(17) +NodeType.STRONG = NodeType(18) +NodeType.LINK = NodeType(19) +NodeType.IMAGE = NodeType(20) + +class ListType(BaseEnumeration): + _kinds = [] + _name_map = None + +ListType.BULLET = ListType(1) +ListType.ORDERED = ListType(2) + +class Node(object): + __subclass_map = {} + + def __init__(self): + self._owned = False + raise NotImplementedError + + @staticmethod + def from_result(res, fn=None, args=None): + try: + res.contents + except ValueError: + return None + + cls = Node.get_subclass_map()[conf.lib.cmark_node_get_type(res)] + + ret = cls.__new__(cls) + ret._node = res + ret._owned = False + return ret + + @classmethod + def get_subclass_map(cls): + if cls.__subclass_map: + return cls.__subclass_map + + res = {c._node_type: c for c in cls.__subclasses__()} + + for c in cls.__subclasses__(): + res.update(c.get_subclass_map()) + + return res + + def unlink(self): + conf.lib.cmark_node_unlink(self._node) + self._owned = True + + def append_child(self, child): + res = conf.lib.cmark_node_append_child(self._node, child._node) + if not res: + raise LibcmarkError("Can't append child %s to node %s" % (str(child), str(self))) + child._owned = False + + def prepend_child(self, child): + res = conf.lib.cmark_node_prepend_child(self._node, child._node) + if not res: + raise LibcmarkError("Can't prepend child %s to node %s" % (str(child), str(self))) + child._owned = False + + def insert_before(self, sibling): + res = conf.lib.cmark_node_insert_before(self._node, sibling._node) + if not res: + raise LibcmarkError("Can't insert sibling %s before node %s" % (str(sibling), str(self))) + sibling._owned = False + + def insert_after(self, sibling): + res = conf.lib.cmark_node_insert_after(self._node, sibling._node) + if not res: + raise LibcmarkError("Can't insert sibling %s after node %s" % (str(sibling), str(self))) + sibling._owned = False + + def consolidate_text_nodes(self): + conf.lib.cmark_consolidate_text_nodes(self._node) + + def to_html(self, options=Parser.OPT_DEFAULT): + return conf.lib.cmark_render_html(self._node, options) + + def to_xml(self, options=Parser.OPT_DEFAULT): + return conf.lib.cmark_render_xml(self._node, options) + + def to_commonmark(self, options=Parser.OPT_DEFAULT, width=0): + return conf.lib.cmark_render_commonmark(self._node, options, width) + + def to_man(self, options=Parser.OPT_DEFAULT, width=0): + return conf.lib.cmark_render_man(self._node, options, width) + + def to_latex(self, options=Parser.OPT_DEFAULT, width=0): + return conf.lib.cmark_render_latex(self._node, options, width) + + @property + def first_child(self): + return conf.lib.cmark_node_first_child(self._node) + + @property + def last_child(self): + return conf.lib.cmark_node_last_child(self._node) + + @property + def next(self): + return conf.lib.cmark_node_next(self._node) + + @property + def previous(self): + return conf.lib.cmark_node_previous(self._node) + + def __eq__(self, other): + return self._node.contents.value == other._node.contents.value + + def __ne__(self, other): + return self._node.contents.value != other._node.contents.value + + def __del__(self): + if self._owned: + conf.lib.cmark_node_free(self._node) + + def __iter__(self): + cur = self.first_child + while (cur): + yield cur + cur = cur.next + +class Literal(Node): + _node_type = NodeType.NONE + + @property + def literal(self): + return conf.lib.cmark_node_get_literal(self._node) + + @literal.setter + def literal(self, value): + bytes_, _ = bytes_and_length(value) + if not conf.lib.cmark_node_set_literal(self._node, bytes_): + raise LibcmarkError("Invalid literal %s\n" % str(value)) + +class Document(Node): + _node_type = NodeType.DOCUMENT + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + +class BlockQuote(Node): + _node_type = NodeType.BLOCK_QUOTE + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + +class List(Node): + _node_type = NodeType.LIST + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + + @property + def type(self): + return conf.lib.cmark_node_get_list_type(self._node) + + @type.setter + def type(self, type_): + if not conf.lib.cmark_node_set_list_type(self._node, type_.value): + raise LibcmarkError("Invalid type %s" % str(type_)) + + @property + def delim(self): + return conf.lib.cmark_node_get_list_delim(self._node) + + @delim.setter + def delim(self, value): + if value == '.': + delim_type = 1 + elif value == ')': + delim_type = 2 + else: + raise LibcmarkError('Invalid delim type %s' % str(value)) + + conf.lib.cmark_node_set_list_delim(self._node, delim_type) + + @property + def start(self): + return conf.lib.cmark_node_get_list_start(self._node) + + @start.setter + def start(self, value): + if not conf.lib.cmark_node_set_list_start(self._node, value): + raise LibcmarkError("Invalid list start %s\n" % str(value)) + + @property + def tight(self): + return conf.lib.cmark_node_get_list_tight(self._node) + + @tight.setter + def tight(self, value): + if value is True: + tightness = 1 + elif value is False: + tightness = 0 + else: + raise LibcmarkError("Invalid list tightness %s\n" % str(value)) + if not conf.lib.cmark_node_set_list_tight(self._node, tightness): + raise LibcmarkError("Invalid list tightness %s\n" % str(value)) + +class Item(Node): + _node_type = NodeType.ITEM + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + +class CodeBlock(Literal): + _node_type = NodeType.CODE_BLOCK + + def __init__(self, literal='', fence_info=''): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + self.literal = literal + self.fence_info = fence_info + + @property + def fence_info(self): + return conf.lib.cmark_node_get_fence_info(self._node) + + @fence_info.setter + def fence_info(self, value): + bytes_, _ = bytes_and_length(value) + if not conf.lib.cmark_node_set_fence_info(self._node, bytes_): + raise LibcmarkError("Invalid fence info %s\n" % str(value)) + +class HtmlBlock(Literal): + _node_type = NodeType.HTML_BLOCK + + def __init__(self, literal=''): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + self.literal = literal + + +class CustomBlock(Node): + _node_type = NodeType.CUSTOM_BLOCK + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + + +class Paragraph(Node): + _node_type = NodeType.PARAGRAPH + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + +class Heading(Node): + _node_type = NodeType.HEADING + + def __init__(self, level=1): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self.level = level + self._owned = True + + @property + def level(self): + return int(conf.lib.cmark_node_get_heading_level(self._node)) + + @level.setter + def level(self, value): + res = conf.lib.cmark_node_set_heading_level(self._node, value) + if (res == 0): + raise LibcmarkError("Invalid heading level %s" % str(value)) + +class ThematicBreak(Node): + _node_type = NodeType.THEMATIC_BREAK + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + + +class Text(Literal): + _node_type = NodeType.TEXT + + def __init__(self, literal=''): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + self.literal = literal + + +class SoftBreak(Node): + _node_type = NodeType.SOFTBREAK + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + + +class LineBreak(Node): + _node_type = NodeType.LINEBREAK + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + + +class Code(Literal): + _node_type = NodeType.CODE + + def __init__(self, literal=''): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + self.literal = literal + + +class HtmlInline(Literal): + _node_type = NodeType.HTML_INLINE + + def __init__(self, literal=''): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + self.literal = literal + + +class CustomInline(Node): + _node_type = NodeType.CUSTOM_INLINE + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + +class Emph(Node): + _node_type = NodeType.EMPH + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + +class Strong(Node): + _node_type = NodeType.STRONG + + def __init__(self): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + + +class Link(Node): + _node_type = NodeType.LINK + + def __init__(self, url='', title=''): + self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) + self._owned = True + self.url = url + self.title = title + + @property + def url(self): + return conf.lib.cmark_node_get_url(self._node) + + @url.setter + def url(self, value): + bytes_, _ = bytes_and_length(value) + if not conf.lib.cmark_node_set_url(self._node, bytes_): + raise LibcmarkError("Invalid url %s\n" % str(value)) + + @property + def title(self): + return conf.lib.cmark_node_get_title(self._node) + + @title.setter + def title(self, value): + bytes_, _ = bytes_and_length(value) + if not conf.lib.cmark_node_set_title(self._node, bytes_): + raise LibcmarkError("Invalid title %s\n" % str(value)) + +class Image(Link): + _node_type = NodeType.IMAGE + +class ExtentType(BaseEnumeration): + _kinds = [] + _name_map = None + +ExtentType.NONE = ExtentType(0) +ExtentType.OPENER = ExtentType(1) +ExtentType.CLOSER = ExtentType(2) +ExtentType.BLANK = ExtentType(3) +ExtentType.CONTENT = ExtentType(4) +ExtentType.PUNCTUATION = ExtentType(5) +ExtentType.LINK_DESTINATION = ExtentType(6) +ExtentType.LINK_TITLE = ExtentType(7) +ExtentType.LINK_LABEL = ExtentType(8) +ExtentType.REFERENCE_DESTINATION = ExtentType(9) +ExtentType.REFERENCE_LABEL = ExtentType(10) +ExtentType.REFERENCE_TITLE = ExtentType(11) + +class Extent(object): + @staticmethod + def from_result(res, fn=None, args=None): + ret = Extent() + ret._extent = res + return ret + + @property + def start(self): + return conf.lib.cmark_source_extent_get_start(self._extent) + + @property + def stop(self): + return conf.lib.cmark_source_extent_get_stop(self._extent) + + @property + def type(self): + return conf.lib.cmark_source_extent_get_type(self._extent) + + @property + def node(self): + return conf.lib.cmark_source_extent_get_node(self._extent) + +class SourceMap(object): + @staticmethod + def from_result(res, fn, args): + ret = SourceMap() + ret._root = res + return ret + + def __iter__(self): + cur = self._root + while (cur): + yield Extent.from_result(cur) + cur = conf.lib.cmark_source_extent_get_next(cur) + +def markdown_to_html(text, options=Parser.OPT_DEFAULT): + bytes_, length = bytes_and_length(text) + return conf.lib.cmark_markdown_to_html(bytes_, length, options) + +def parse_document(text, options=Parser.OPT_DEFAULT): + bytes_, length = bytes_and_length(text) + return conf.lib.cmark_parse_document(bytes_, length, options) + +functionList = [ + ("cmark_default_mem_free", + [c_void_p]), + ("cmark_markdown_to_html", + [c_char_p, c_long, c_int], + owned_char_p, + unicode_from_owned_char_p), + ("cmark_parse_document", + [c_char_p, c_long, c_int], + c_object_p, + Node.from_result), + ("cmark_parser_new", + [c_int], + c_object_p), + ("cmark_parser_free", + [c_object_p]), + ("cmark_parser_feed", + [c_object_p, c_char_p, c_long]), + ("cmark_parser_finish", + [c_object_p], + c_object_p, + Node.from_result), + ("cmark_parser_get_first_source_extent", + [c_object_p], + c_object_p, + SourceMap.from_result), + ("cmark_source_extent_get_next", + [c_object_p], + c_object_p), + ("cmark_source_extent_get_start", + [c_object_p], + c_ulonglong), + ("cmark_source_extent_get_stop", + [c_object_p], + c_ulonglong), + ("cmark_source_extent_get_type", + [c_object_p], + c_int, + ExtentType.from_id), + ("cmark_source_extent_get_node", + [c_object_p], + c_object_p, + Node.from_result), + ("cmark_render_html", + [c_object_p, c_int], + owned_char_p, + unicode_from_owned_char_p), + ("cmark_render_xml", + [c_object_p, c_int], + owned_char_p, + unicode_from_owned_char_p), + ("cmark_render_commonmark", + [c_object_p, c_int, c_int], + owned_char_p, + unicode_from_owned_char_p), + ("cmark_render_man", + [c_object_p, c_int, c_int], + owned_char_p, + unicode_from_owned_char_p), + ("cmark_render_latex", + [c_object_p, c_int, c_int], + owned_char_p, + unicode_from_owned_char_p), + ("cmark_node_new", + [c_int], + c_object_p), + ("cmark_node_free", + [c_object_p]), + ("cmark_node_get_type", + [c_object_p], + c_int, + NodeType.from_id), + ("cmark_node_first_child", + [c_object_p], + c_object_p, + Node.from_result), + ("cmark_node_last_child", + [c_object_p], + c_object_p, + Node.from_result), + ("cmark_node_next", + [c_object_p], + c_object_p, + Node.from_result), + ("cmark_node_previous", + [c_object_p], + c_object_p, + Node.from_result), + ("cmark_node_unlink", + [c_object_p]), + ("cmark_node_append_child", + [c_object_p, c_object_p], + c_int, + boolean_from_result), + ("cmark_node_prepend_child", + [c_object_p, c_object_p], + c_int, + boolean_from_result), + ("cmark_node_insert_before", + [c_object_p, c_object_p], + c_int, + boolean_from_result), + ("cmark_node_insert_after", + [c_object_p, c_object_p], + c_int, + boolean_from_result), + ("cmark_consolidate_text_nodes", + [c_object_p]), + ("cmark_node_get_literal", + [c_object_p], + c_char_p, + unicode_from_char_p), + ("cmark_node_set_literal", + [c_object_p, c_char_p], + c_int, + boolean_from_result), + ("cmark_node_get_heading_level", + [c_object_p], + c_int), + ("cmark_node_set_heading_level", + [c_object_p, c_int], + c_int, + boolean_from_result), + ("cmark_node_get_list_type", + [c_object_p], + c_int, + ListType.from_id), + ("cmark_node_set_list_type", + [c_object_p], + c_int, + boolean_from_result), + ("cmark_node_get_list_delim", + [c_object_p], + c_int, + delim_from_int), + ("cmark_node_set_list_delim", + [c_object_p, c_int], + c_int), + ("cmark_node_get_list_start", + [c_object_p], + c_int), + ("cmark_node_set_list_start", + [c_object_p, c_int], + c_int, + boolean_from_result), + ("cmark_node_get_list_tight", + [c_object_p], + c_int, + boolean_from_result), + ("cmark_node_set_list_tight", + [c_object_p, c_int], + c_int, + boolean_from_result), + ("cmark_node_get_fence_info", + [c_object_p], + c_char_p, + unicode_from_char_p), + ("cmark_node_set_fence_info", + [c_object_p, c_char_p], + c_int, + boolean_from_result), + ("cmark_node_get_url", + [c_object_p], + c_char_p, + unicode_from_char_p), + ("cmark_node_set_url", + [c_object_p, c_char_p], + c_int, + boolean_from_result), + ("cmark_node_get_title", + [c_object_p], + c_char_p, + unicode_from_char_p), + ("cmark_node_set_title", + [c_object_p, c_char_p], + c_int, + boolean_from_result), +] + +# Taken from clang.cindex +def register_function(lib, item, ignore_errors): + # A function may not exist, if these bindings are used with an older or + # incompatible version of libcmark.so. + try: + func = getattr(lib, item[0]) + except AttributeError as e: + msg = str(e) + ". Please ensure that your python bindings are "\ + "compatible with your libcmark version." + if ignore_errors: + return + raise LibcmarkError(msg) + + if len(item) >= 2: + func.argtypes = item[1] + + if len(item) >= 3: + func.restype = item[2] + + if len(item) == 4: + func.errcheck = item[3] + +def register_functions(lib, ignore_errors): + """Register function prototypes with a libccmark library instance. + + This must be called as part of library instantiation so Python knows how + to call out to the shared library. + """ + + def register(item): + return register_function(lib, item, ignore_errors) + + for f in functionList: + register(f) + +class Config: + library_path = None + library_file = None + compatibility_check = True + loaded = False + lib_ = None + + @staticmethod + def set_library_path(path): + """Set the path in which to search for libcmark""" + if Config.loaded: + raise Exception("library path must be set before before using " \ + "any other functionalities in libcmark.") + + Config.library_path = path + + @staticmethod + def set_library_file(filename): + """Set the exact location of libcmark""" + if Config.loaded: + raise Exception("library file must be set before before using " \ + "any other functionalities in libcmark.") + + Config.library_file = filename + + @staticmethod + def set_compatibility_check(check_status): + """ Perform compatibility check when loading libcmark + + The python bindings are only tested and evaluated with the version of + libcmark they are provided with. To ensure correct behavior a (limited) + compatibility check is performed when loading the bindings. This check + will throw an exception, as soon as it fails. + + In case these bindings are used with an older version of libcmark, parts + that have been stable between releases may still work. Users of the + python bindings can disable the compatibility check. This will cause + the python bindings to load, even though they are written for a newer + version of libcmark. Failures now arise if unsupported or incompatible + features are accessed. The user is required to test themselves if the + features they are using are available and compatible between different + libcmark versions. + """ + if Config.loaded: + raise Exception("compatibility_check must be set before before " \ + "using any other functionalities in libcmark.") + + Config.compatibility_check = check_status + + @property + def lib(self): + if self.lib_: + return self.lib_ + lib = self.get_cmark_library() + register_functions(lib, not Config.compatibility_check) + Config.loaded = True + self.lib_ = lib + return lib + + def get_filename(self): + if Config.library_file: + return Config.library_file + + import platform + name = platform.system() + + if name == 'Darwin': + file = 'libcmark.dylib' + elif name == 'Windows': + file = 'cmark.dll' + else: + file = 'libcmark.so' + + if Config.library_path: + file = Config.library_path + '/' + file + + return file + + def get_cmark_library(self): + try: + library = cdll.LoadLibrary(self.get_filename()) + except OSError as e: + msg = str(e) + "(%s). To provide a path to libcmark use " \ + "Config.set_library_path() or " \ + "Config.set_library_file()." % self.get_filename() + raise LibcmarkError(msg) + + return library + + def function_exists(self, name): + try: + getattr(self.lib, name) + except AttributeError: + return False + + return True + +conf = Config() + +__alla__ = [ + 'Parser', + 'LibcmarkError', + 'NodeType', + 'ListType', + 'Node', + 'Document', + 'BlockQuote', + 'List', + 'Item', + 'CodeBlock', + 'HtmlBlock', + 'CustomBlock', + 'Paragraph', + 'Heading', + 'ThematicBreak', + 'Text', + 'SoftBreak', + 'LineBreak', + 'Code', + 'HtmlInline', + 'CustomInline', + 'Emph', + 'Strong', + 'Link', + 'Image', + 'ExtentType', + 'Extent', + 'SourceMap', + 'markdown_to_html', + 'parse_document', + 'Config', + 'conf' +] -- cgit 0.0.5-2-1-g0f52 From c4c1d59ca29aceb1c5919908ac97d9476264fd96 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Sat, 24 Dec 2016 17:14:32 +0100 Subject: wrapper.py: remove unused (and faulty) libc instantiation (#175) --- wrappers/wrapper.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/wrappers/wrapper.py b/wrappers/wrapper.py index 7ef032a0b3..1b3cb0a17e 100644 --- a/wrappers/wrapper.py +++ b/wrappers/wrapper.py @@ -6,13 +6,6 @@ import platform c_object_p = POINTER(c_void_p) -sysname = platform.system() - -if sysname == 'Windows': - libc = CDLL('msvcrt.dll') -else: - libc = CDLL('libc.so.6') - if sys.version_info[0] > 2: def bytes_and_length(text): if type(text) == str: -- cgit 0.0.5-2-1-g0f52 From 4fbe344df43ed7f60a3d3a53981088334cb709fc Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 31 Dec 2016 02:25:16 +0100 Subject: Change types for source map offsets (#174) * Improve strbuf guarantees Introduce BUFSIZE_MAX macro and make sure that the strbuf implementation can handle strings up to this size. * Abort early if document size exceeds internal limit * Change types for source map offsets Switch to size_t for the public API, making the public headers C89-compatible again. Switch to bufsize_t internally, reducing memory usage and improving performance on 32-bit platforms. * Make parser return NULL on internal index overflow Make S_parser_feed set an error and ignore subsequent chunks if the total input document size exceeds an internal limit. Make cmark_parser_finish return NULL if an error was encountered. Add public API functions to retrieve error code and error message. strbuf overflow in renderers and OOM in parser or renderers still cause an abort. --- api_test/main.c | 37 +++++++++++++++++++++++++++++++++++++ src/blocks.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- src/buffer.c | 32 ++++++++++++++++++++++---------- src/buffer.h | 20 ++++++++++++++++++++ src/cmark.c | 3 +++ src/cmark.h | 32 ++++++++++++++++++++++++-------- src/inlines.c | 2 +- src/inlines.h | 2 +- src/main.c | 5 +++++ src/parser.h | 3 +++ src/source_map.c | 22 +++++++++++----------- src/source_map.h | 23 ++++++++++++----------- test/cmark.py | 2 ++ 13 files changed, 187 insertions(+), 44 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 17e1582b4b..61291dc149 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -5,6 +5,7 @@ #define CMARK_NO_SHORT_NAMES #include "cmark.h" #include "node.h" +#include "parser.h" #include "harness.h" #include "cplusplus.h" @@ -883,6 +884,41 @@ static void test_feed_across_line_ending(test_batch_runner *runner) { cmark_node_free(document); } +static cmark_node *S_parse_with_fake_total(bufsize_t fake_total, + const char *str, + cmark_err_type *err) { + cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); + parser->total_bytes = fake_total; + cmark_parser_feed(parser, str, strlen(str)); + cmark_node *doc = cmark_parser_finish(parser); + *err = cmark_parser_get_error(parser); + cmark_parser_free(parser); + return doc; +} + +static void test_bufsize_overflow(test_batch_runner *runner) { + cmark_node *doc; + cmark_err_type err; + + doc = S_parse_with_fake_total(BUFSIZE_MAX, "a", &err); + OK(runner, doc == NULL, "parse 1 byte after BUFSIZE_MAX bytes fails"); + INT_EQ(runner, err, CMARK_ERR_INPUT_TOO_LARGE, + "parse 1 byte after BUFSIZE_MAX bytes error code"); + + doc = S_parse_with_fake_total(BUFSIZE_MAX - 9, "0123456789", &err); + OK(runner, doc == NULL, "parse 10 byte after BUFSIZE_MAX-9 bytes fails"); + INT_EQ(runner, err, CMARK_ERR_INPUT_TOO_LARGE, + "parse 10 byte after BUFSIZE_MAX-9 bytes error code"); + + doc = S_parse_with_fake_total(BUFSIZE_MAX - 1, "a", &err); + OK(runner, doc != NULL, "parse 1 byte after BUFSIZE_MAX-1 bytes"); + cmark_node_free(doc); + + doc = S_parse_with_fake_total(BUFSIZE_MAX - 10, "0123456789", &err); + OK(runner, doc != NULL, "parse 10 byte after BUFSIZE_MAX-10 bytes"); + cmark_node_free(doc); +} + int main() { int retval; test_batch_runner *runner = test_batch_runner_new(); @@ -908,6 +944,7 @@ int main() { test_cplusplus(runner); test_safe(runner); test_feed_across_line_ending(runner); + test_bufsize_overflow(runner); test_print_summary(runner); retval = test_ok(runner) ? 0 : 1; diff --git a/src/blocks.c b/src/blocks.c index 1c1d16045c..c6805350dd 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -96,6 +96,8 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->refmap = cmark_reference_map_new(mem); parser->root = document; parser->current = document; + parser->error_code = CMARK_ERR_NONE; + parser->total_bytes = 0; parser->line_number = 0; parser->line_offset = 0; parser->offset = 0; @@ -550,6 +552,20 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, const unsigned char *skipped; static const uint8_t repl[] = {239, 191, 189}; + if (parser->error_code) { + return; + } + + // Limit maximum document size to BUFSIZE_MAX. This makes sure that we + // never create strbufs larger than BUFSIZE_MAX. Unfortunately, the + // public API doesn't have an error reporting mechanism, so all we can + // do is to abort. + if (len > (size_t)(BUFSIZE_MAX - parser->total_bytes)) { + parser->error_code = CMARK_ERR_INPUT_TOO_LARGE; + return; + } + parser->total_bytes += (bufsize_t)len; + if (parser->last_buffer_ended_with_cr && *buffer == '\n') { // skip NL if last buffer ended with CR ; see #117 buffer++; @@ -1266,14 +1282,19 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { cmark_strbuf_clear(&parser->linebuf); } + cmark_strbuf_clear(&parser->curline); + + if (parser->error_code) { + cmark_node_free(parser->root); + return NULL; + } + finalize_document(parser); if (parser->options & CMARK_OPT_NORMALIZE) { cmark_consolidate_text_nodes(parser->root); } - cmark_strbuf_free(&parser->curline); - #if CMARK_DEBUG_NODES if (cmark_node_check(parser->root, stderr)) { abort(); @@ -1287,3 +1308,26 @@ cmark_parser_get_first_source_extent(cmark_parser *parser) { return parser->source_map->head; } + +cmark_err_type cmark_parser_get_error(cmark_parser *parser) { + return parser->error_code; +} + +const char *cmark_parser_get_error_message(cmark_parser *parser) { + const char *str = NULL; + + switch (parser->error_code) { + case CMARK_ERR_OUT_OF_MEMORY: + str = "Out of memory"; + break; + case CMARK_ERR_INPUT_TOO_LARGE: + str = "Input too large"; + break; + default: + str = "Unknown error"; + break; + } + + return str; +} + diff --git a/src/buffer.c b/src/buffer.c index a6754b64f6..9a9e9adccd 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -33,6 +33,11 @@ void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, } static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { + // Safety check for overflow. + if (add > BUFSIZE_MAX - buf->size) { + fprintf(stderr, "Internal cmark_strbuf overflow"); + abort(); + } cmark_strbuf_grow(buf, buf->size + add); } @@ -42,18 +47,25 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { if (target_size < buf->asize) return; - if (target_size > (bufsize_t)(INT32_MAX / 2)) - abort(); - - /* Oversize the buffer by 50% to guarantee amortized linear time - * complexity on append operations. */ - bufsize_t new_size = target_size + target_size / 2; - new_size += 1; - new_size = (new_size + 7) & ~7; + // Oversize the buffer by 50% to guarantee amortized linear time + // complexity on append operations. + bufsize_t add = target_size / 2; + // Account for terminating NUL byte. + add += 1; + // Round up to multiple of eight. + add = (add + 7) & ~7; + + // Check for overflow but allow an additional NUL byte. + if (target_size + add > BUFSIZE_MAX + 1) { + target_size = BUFSIZE_MAX + 1; + } + else { + target_size += add; + } buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL, - new_size); - buf->asize = new_size; + target_size); + buf->asize = target_size; } bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } diff --git a/src/buffer.h b/src/buffer.h index e8780753f8..7f31a74bbe 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -13,8 +13,28 @@ extern "C" { #endif +#ifndef CMARK_HUGE_DOCS + +// Maximum strbuf size without terminating NUL byte. +#define BUFSIZE_MAX (INT32_MAX - 1) + typedef int32_t bufsize_t; +#else // CMARK_HUGE_DOCS + +// This is an untested proof of concept of how to handle multi-gigabyte +// documents on 64-bit platforms at the expense of internal struct sizes. + +#ifdef PTRDIFF_MAX + #define BUFSIZE_MAX (PTRDIFF_MAX - 1) +#else + #define BUFSIZE_MAX (ptrdiff_t)((size_t)-1 / 2) +#endif + +typedef ptrdiff_t bufsize_t; + +#endif // CMARK_HUGE_DOCS + typedef struct { cmark_mem *mem; unsigned char *ptr; diff --git a/src/cmark.c b/src/cmark.c index 2ef6cb4cca..da93abe215 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -36,6 +36,9 @@ char *cmark_markdown_to_html(const char *text, size_t len, int options) { char *result; doc = cmark_parse_document(text, len, options); + if (doc == NULL) { + return NULL; + } result = cmark_render_html(doc, options); cmark_node_free(doc); diff --git a/src/cmark.h b/src/cmark.h index 034f0e6a37..5ce6d10bbd 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -2,7 +2,6 @@ #define CMARK_H #include -#include #include #include @@ -23,7 +22,7 @@ extern "C" { /** Convert 'text' (assumed to be a UTF-8 encoded string with length * 'len') from CommonMark Markdown to HTML, returning a null-terminated, * UTF-8-encoded string. It is the caller's responsibility - * to free the returned buffer. + * to free the returned buffer. Returns NULL on error. */ CMARK_EXPORT char *cmark_markdown_to_html(const char *text, size_t len, int options); @@ -99,6 +98,12 @@ typedef enum { CMARK_PAREN_DELIM } cmark_delim_type; +typedef enum { + CMARK_ERR_NONE, + CMARK_ERR_OUT_OF_MEMORY, + CMARK_ERR_INPUT_TOO_LARGE +} cmark_err_type; + typedef struct cmark_node cmark_node; typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; @@ -489,12 +494,22 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem); CMARK_EXPORT void cmark_parser_free(cmark_parser *parser); +/** Return the error code after a failed operation. + */ +CMARK_EXPORT +cmark_err_type cmark_parser_get_error(cmark_parser *parser); + +/** Return the error code after a failed operation. + */ +CMARK_EXPORT +const char *cmark_parser_get_error_message(cmark_parser *parser); + /** Feeds a string of length 'len' to 'parser'. */ CMARK_EXPORT void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); -/** Finish parsing and return a pointer to a tree of nodes. +/** Finish parsing and return a pointer to a tree of nodes or NULL on error. */ CMARK_EXPORT cmark_node *cmark_parser_finish(cmark_parser *parser); @@ -507,7 +522,7 @@ cmark_source_extent *cmark_parser_get_first_source_extent(cmark_parser *parser); /** Parse a CommonMark document in 'buffer' of length 'len'. * Returns a pointer to a tree of nodes. The memory allocated for * the node tree should be released using 'cmark_node_free' - * when it is no longer needed. + * when it is no longer needed. Returns NULL on error. */ CMARK_EXPORT cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); @@ -515,22 +530,23 @@ cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); /** Parse a CommonMark document in file 'f', returning a pointer to * a tree of nodes. The memory allocated for the node tree should be * released using 'cmark_node_free' when it is no longer needed. + * Returns NULL on error. */ CMARK_EXPORT cmark_node *cmark_parse_file(FILE *f, int options); -/** +/** * ## Source map API */ /* Return the index, in bytes, of the start of this extent */ CMARK_EXPORT -uint64_t cmark_source_extent_get_start(cmark_source_extent *extent); +size_t cmark_source_extent_get_start(cmark_source_extent *extent); -/* Return the index, in bytes, of the stop of this extent. This +/* Return the index, in bytes, of the stop of this extent. This * index is not included in the extent*/ CMARK_EXPORT -uint64_t cmark_source_extent_get_stop(cmark_source_extent *extent); +size_t cmark_source_extent_get_stop(cmark_source_extent *extent); /* Return the extent immediately following 'extent' */ CMARK_EXPORT diff --git a/src/inlines.c b/src/inlines.c index 96da28bea0..099078e2d2 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1230,7 +1230,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { // Parse inlines from parent's string_content, adding as children of parent. extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options, - cmark_source_map *source_map, uint64_t total_length) { + cmark_source_map *source_map, bufsize_t total_length) { subject subj; subject_from_buf(mem, &subj, &parent->content, refmap, source_map); bufsize_t initial_len = subj.input.len; diff --git a/src/inlines.h b/src/inlines.h index 8de31b1906..8459794775 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -14,7 +14,7 @@ cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options, - cmark_source_map *source_map, uint64_t total_length); + cmark_source_map *source_map, bufsize_t total_length); bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, cmark_reference_map *refmap, diff --git a/src/main.c b/src/main.c index 42cd8b1639..aeb81de4dc 100644 --- a/src/main.c +++ b/src/main.c @@ -181,6 +181,11 @@ int main(int argc, char *argv[]) { document = cmark_parser_finish(parser); cmark_parser_free(parser); + if (document == NULL) { + fprintf(stderr, "%s", cmark_parser_get_error_message(parser)); + exit(1); + } + print_document(document, writer, options, width); cmark_node_free(document); diff --git a/src/parser.h b/src/parser.h index b28a8a75b5..7b4fdbc9bd 100644 --- a/src/parser.h +++ b/src/parser.h @@ -2,6 +2,7 @@ #define CMARK_AST_H #include +#include "cmark.h" #include "node.h" #include "buffer.h" #include "memory.h" @@ -18,6 +19,8 @@ struct cmark_parser { struct cmark_reference_map *refmap; struct cmark_node *root; struct cmark_node *current; + cmark_err_type error_code; + bufsize_t total_bytes; int line_number; bufsize_t offset; bufsize_t column; diff --git a/src/source_map.c b/src/source_map.c index db01a2187d..dccbe7c96b 100644 --- a/src/source_map.c +++ b/src/source_map.c @@ -19,7 +19,7 @@ source_map_free(cmark_source_map *self) } cmark_source_extent * -source_map_append_extent(cmark_source_map *self, uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) +source_map_append_extent(cmark_source_map *self, bufsize_t start, bufsize_t stop, cmark_node *node, cmark_extent_type type) { assert (start <= stop); assert (!self->tail || self->tail->stop <= start); @@ -46,7 +46,7 @@ source_map_append_extent(cmark_source_map *self, uint64_t start, uint64_t stop, cmark_source_extent * source_map_insert_extent(cmark_source_map *self, cmark_source_extent *previous, - uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) + bufsize_t start, bufsize_t stop, cmark_node *node, cmark_extent_type type) { if (start == stop) return previous; @@ -101,7 +101,7 @@ source_map_free_extent(cmark_source_map *self, cmark_source_extent *extent) cmark_source_extent * source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, - cmark_node *node, uint64_t total_length) + cmark_node *node, bufsize_t total_length) { cmark_source_extent *next_extent = extent->next; cmark_source_extent *res; @@ -135,7 +135,7 @@ source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, } cmark_source_extent * -source_map_splice_extent(cmark_source_map *self, uint64_t start, uint64_t stop, +source_map_splice_extent(cmark_source_map *self, bufsize_t start, bufsize_t stop, cmark_node *node, cmark_extent_type type) { if (!self->next_cursor) { @@ -154,7 +154,7 @@ source_map_splice_extent(cmark_source_map *self, uint64_t start, uint64_t stop, return self->cursor; } else if (start + self->cursor_offset < self->next_cursor->start) { - uint64_t new_start = self->next_cursor->start - self->cursor_offset; + bufsize_t new_start = self->next_cursor->start - self->cursor_offset; self->cursor = source_map_insert_extent(self, self->cursor, @@ -196,17 +196,17 @@ source_map_pretty_print(cmark_source_map *self) { cmark_source_extent *tmp; for (tmp = self->head; tmp; tmp = tmp->next) { - printf ("%lu:%lu - %s, %s (%p)\n", tmp->start, tmp->stop, - cmark_node_get_type_string(tmp->node), + printf ("%d:%d - %s, %s (%p)\n", tmp->start, tmp->stop, + cmark_node_get_type_string(tmp->node), cmark_source_extent_get_type_string(tmp), (void *) tmp->node); } } bool -source_map_check(cmark_source_map *self, uint64_t total_length) +source_map_check(cmark_source_map *self, bufsize_t total_length) { - uint64_t last_stop = 0; + bufsize_t last_stop = 0; cmark_source_extent *tmp; for (tmp = self->head; tmp; tmp = tmp->next) { @@ -224,13 +224,13 @@ source_map_check(cmark_source_map *self, uint64_t total_length) } -uint64_t +size_t cmark_source_extent_get_start(cmark_source_extent *extent) { return extent->start; } -uint64_t +size_t cmark_source_extent_get_stop(cmark_source_extent *extent) { return extent->stop; diff --git a/src/source_map.h b/src/source_map.h index 619a07376a..dca5a9fdb9 100644 --- a/src/source_map.h +++ b/src/source_map.h @@ -3,6 +3,7 @@ #include "cmark.h" #include "config.h" +#include "buffer.h" typedef struct _cmark_source_map { @@ -10,14 +11,14 @@ typedef struct _cmark_source_map cmark_source_extent *tail; cmark_source_extent *cursor; cmark_source_extent *next_cursor; - uint64_t cursor_offset; + bufsize_t cursor_offset; cmark_mem *mem; } cmark_source_map; struct cmark_source_extent { - uint64_t start; - uint64_t stop; + bufsize_t start; + bufsize_t stop; struct cmark_source_extent *next; struct cmark_source_extent *prev; cmark_node *node; @@ -29,20 +30,20 @@ cmark_source_map * source_map_new (cmark_mem *mem); void source_map_free (cmark_source_map *self); bool source_map_check (cmark_source_map *self, - uint64_t total_length); + bufsize_t total_length); void source_map_pretty_print (cmark_source_map *self); cmark_source_extent * source_map_append_extent(cmark_source_map *self, - uint64_t start, - uint64_t stop, + bufsize_t start, + bufsize_t stop, cmark_node *node, cmark_extent_type type); cmark_source_extent * source_map_insert_extent(cmark_source_map *self, cmark_source_extent *previous, - uint64_t start, - uint64_t stop, + bufsize_t start, + bufsize_t stop, cmark_node *node, cmark_extent_type type); @@ -52,11 +53,11 @@ cmark_source_extent * source_map_free_extent (cmark_source_map *self, cmark_source_extent * source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, cmark_node *node, - uint64_t total_length); + bufsize_t total_length); cmark_source_extent * source_map_splice_extent(cmark_source_map *self, - uint64_t start, - uint64_t stop, + bufsize_t start, + bufsize_t stop, cmark_node *node, cmark_extent_type type); diff --git a/test/cmark.py b/test/cmark.py index 4be85a3b0f..f4ff5765b3 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -30,6 +30,8 @@ def to_commonmark(lib, text): render_commonmark.restype = c_char_p render_commonmark.argtypes = [c_void_p, c_int, c_int] node = parse_document(textbytes, textlen, 0) + if node is None: + raise Exception("parse_document failed") result = render_commonmark(node, 0, 0).decode('utf-8') return [0, result, ''] -- cgit 0.0.5-2-1-g0f52 From 26182bb868d3da7dd8a3389729bea79d489855b7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 30 Dec 2016 18:45:36 -0700 Subject: Update cmark.3 man page. --- man/man3/cmark.3 | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index eb38812c61..5423d1644c 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "November 18, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "December 30, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -16,7 +16,7 @@ Simple Interface Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length \f[I]len\f[]) from CommonMark Markdown to HTML, returning a null\-terminated, UTF\-8\-encoded string. It is the caller's -responsibility to free the returned buffer. +responsibility to free the returned buffer. Returns NULL on error. .SS Node Structure @@ -65,6 +65,30 @@ typedef enum { +.PP +.nf +\fC +.RS 0n +typedef enum { + CMARK_EXTENT_NONE, + CMARK_EXTENT_OPENER, + CMARK_EXTENT_CLOSER, + CMARK_EXTENT_BLANK, + CMARK_EXTENT_CONTENT, + CMARK_EXTENT_PUNCTUATION, + CMARK_EXTENT_LINK_DESTINATION, + CMARK_EXTENT_LINK_TITLE, + CMARK_EXTENT_LINK_LABEL, + CMARK_EXTENT_REFERENCE_DESTINATION, + CMARK_EXTENT_REFERENCE_LABEL, + CMARK_EXTENT_REFERENCE_TITLE, +} cmark_extent_type; +.RE +\f[] +.fi + + + .PP .nf \fC @@ -95,6 +119,21 @@ typedef enum { +.PP +.nf +\fC +.RS 0n +typedef enum { + CMARK_ERR_NONE, + CMARK_ERR_OUT_OF_MEMORY, + CMARK_ERR_INPUT_TOO_LARGE +} cmark_err_type; +.RE +\f[] +.fi + + + .SS Custom memory allocator support @@ -115,6 +154,12 @@ typedef struct cmark_mem { Defines the memory allocation functions to be used by CMark when parsing and allocating a document tree +.PP +\fIvoid\f[] \fBcmark_default_mem_free\f[](\fIvoid *ptr\f[]) + +.PP +Convenience function for bindings. + .SS Creating and Destroying Nodes @@ -602,6 +647,18 @@ Creates a new parser object with the given memory allocator .PP Frees memory allocated for a parser object. +.PP +\fIcmark_err_type\f[] \fBcmark_parser_get_error\f[](\fIcmark_parser *parser\f[]) + +.PP +Return the error code after a failed operation. + +.PP +\fIconst char *\f[] \fBcmark_parser_get_error_message\f[](\fIcmark_parser *parser\f[]) + +.PP +Return the error code after a failed operation. + .PP \fIvoid\f[] \fBcmark_parser_feed\f[](\fIcmark_parser *parser\f[], \fIconst char *buffer\f[], \fIsize_t len\f[]) @@ -612,7 +669,13 @@ Feeds a string of length \f[I]len\f[] to \f[I]parser\f[]. \fIcmark_node *\f[] \fBcmark_parser_finish\f[](\fIcmark_parser *parser\f[]) .PP -Finish parsing and return a pointer to a tree of nodes. +Finish parsing and return a pointer to a tree of nodes or NULL on error. + +.PP +\fIcmark_source_extent *\f[] \fBcmark_parser_get_first_source_extent\f[](\fIcmark_parser *parser\f[]) + +.PP +Return a pointer to the first extent of the parser's source map .PP \fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[]) @@ -621,7 +684,7 @@ Finish parsing and return a pointer to a tree of nodes. Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]. Returns a pointer to a tree of nodes. The memory allocated for the node tree should be released using \f[I]cmark_node_free\f[] when it is no -longer needed. +longer needed. Returns NULL on error. .PP \fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[]) @@ -629,7 +692,11 @@ longer needed. .PP Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a tree of nodes. The memory allocated for the node tree should be released -using \f[I]cmark_node_free\f[] when it is no longer needed. +using \f[I]cmark_node_free\f[] when it is no longer needed. Returns NULL +on error. + +.SS +Source map API .SS Rendering -- cgit 0.0.5-2-1-g0f52 From cc50a3aba3e34dc58ca819a65b907871e2ea6fd9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 20:45:12 -0800 Subject: Fix "multiple of 3" determination in emph/strong parsing. We need to store the length of the original delimiter run, instead of using the length of the remaining delimiters after some have been subtracted. Test case: a***b* c* Thanks to Raph Levin for reporting. --- src/inlines.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 099078e2d2..02b472343b 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -40,6 +40,7 @@ typedef struct delimiter { struct delimiter *previous; struct delimiter *next; cmark_node *inl_text; + bufsize_t length; unsigned char delim_char; bool can_open; bool can_close; @@ -408,6 +409,7 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, delim->can_open = can_open; delim->can_close = can_close; delim->inl_text = inl_text; + delim->length = inl_text->as.literal.len; delim->previous = subj->last_delim; delim->next = NULL; if (delim->previous != NULL) { @@ -553,10 +555,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // interior closer of size 2 can't match opener of size 1 // or of size 1 can't match 2 odd_match = (closer->can_open || opener->can_close) && - ((opener->inl_text->as.literal.len + - closer->inl_text->as.literal.len) % - 3 == - 0); + ((opener->length + closer->length) % 3 == 0); if (opener->delim_char == closer->delim_char && opener->can_open && !odd_match) { opener_found = true; -- cgit 0.0.5-2-1-g0f52 From 60b6962db0b0488667180e11cc6cfb1cec1b41ea Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 22:08:38 -0800 Subject: Revert "Change types for source map offsets (#174)" This reverts commit 4fbe344df43ed7f60a3d3a53981088334cb709fc. --- api_test/main.c | 37 ------------------------------------- src/blocks.c | 48 ++---------------------------------------------- src/buffer.c | 32 ++++++++++---------------------- src/buffer.h | 20 -------------------- src/cmark.c | 3 --- src/cmark.h | 32 ++++++++------------------------ src/inlines.c | 2 +- src/inlines.h | 2 +- src/main.c | 5 ----- src/parser.h | 3 --- src/source_map.c | 22 +++++++++++----------- src/source_map.h | 23 +++++++++++------------ test/cmark.py | 2 -- 13 files changed, 44 insertions(+), 187 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 61291dc149..17e1582b4b 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -5,7 +5,6 @@ #define CMARK_NO_SHORT_NAMES #include "cmark.h" #include "node.h" -#include "parser.h" #include "harness.h" #include "cplusplus.h" @@ -884,41 +883,6 @@ static void test_feed_across_line_ending(test_batch_runner *runner) { cmark_node_free(document); } -static cmark_node *S_parse_with_fake_total(bufsize_t fake_total, - const char *str, - cmark_err_type *err) { - cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); - parser->total_bytes = fake_total; - cmark_parser_feed(parser, str, strlen(str)); - cmark_node *doc = cmark_parser_finish(parser); - *err = cmark_parser_get_error(parser); - cmark_parser_free(parser); - return doc; -} - -static void test_bufsize_overflow(test_batch_runner *runner) { - cmark_node *doc; - cmark_err_type err; - - doc = S_parse_with_fake_total(BUFSIZE_MAX, "a", &err); - OK(runner, doc == NULL, "parse 1 byte after BUFSIZE_MAX bytes fails"); - INT_EQ(runner, err, CMARK_ERR_INPUT_TOO_LARGE, - "parse 1 byte after BUFSIZE_MAX bytes error code"); - - doc = S_parse_with_fake_total(BUFSIZE_MAX - 9, "0123456789", &err); - OK(runner, doc == NULL, "parse 10 byte after BUFSIZE_MAX-9 bytes fails"); - INT_EQ(runner, err, CMARK_ERR_INPUT_TOO_LARGE, - "parse 10 byte after BUFSIZE_MAX-9 bytes error code"); - - doc = S_parse_with_fake_total(BUFSIZE_MAX - 1, "a", &err); - OK(runner, doc != NULL, "parse 1 byte after BUFSIZE_MAX-1 bytes"); - cmark_node_free(doc); - - doc = S_parse_with_fake_total(BUFSIZE_MAX - 10, "0123456789", &err); - OK(runner, doc != NULL, "parse 10 byte after BUFSIZE_MAX-10 bytes"); - cmark_node_free(doc); -} - int main() { int retval; test_batch_runner *runner = test_batch_runner_new(); @@ -944,7 +908,6 @@ int main() { test_cplusplus(runner); test_safe(runner); test_feed_across_line_ending(runner); - test_bufsize_overflow(runner); test_print_summary(runner); retval = test_ok(runner) ? 0 : 1; diff --git a/src/blocks.c b/src/blocks.c index c6805350dd..1c1d16045c 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -96,8 +96,6 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->refmap = cmark_reference_map_new(mem); parser->root = document; parser->current = document; - parser->error_code = CMARK_ERR_NONE; - parser->total_bytes = 0; parser->line_number = 0; parser->line_offset = 0; parser->offset = 0; @@ -552,20 +550,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, const unsigned char *skipped; static const uint8_t repl[] = {239, 191, 189}; - if (parser->error_code) { - return; - } - - // Limit maximum document size to BUFSIZE_MAX. This makes sure that we - // never create strbufs larger than BUFSIZE_MAX. Unfortunately, the - // public API doesn't have an error reporting mechanism, so all we can - // do is to abort. - if (len > (size_t)(BUFSIZE_MAX - parser->total_bytes)) { - parser->error_code = CMARK_ERR_INPUT_TOO_LARGE; - return; - } - parser->total_bytes += (bufsize_t)len; - if (parser->last_buffer_ended_with_cr && *buffer == '\n') { // skip NL if last buffer ended with CR ; see #117 buffer++; @@ -1282,19 +1266,14 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { cmark_strbuf_clear(&parser->linebuf); } - cmark_strbuf_clear(&parser->curline); - - if (parser->error_code) { - cmark_node_free(parser->root); - return NULL; - } - finalize_document(parser); if (parser->options & CMARK_OPT_NORMALIZE) { cmark_consolidate_text_nodes(parser->root); } + cmark_strbuf_free(&parser->curline); + #if CMARK_DEBUG_NODES if (cmark_node_check(parser->root, stderr)) { abort(); @@ -1308,26 +1287,3 @@ cmark_parser_get_first_source_extent(cmark_parser *parser) { return parser->source_map->head; } - -cmark_err_type cmark_parser_get_error(cmark_parser *parser) { - return parser->error_code; -} - -const char *cmark_parser_get_error_message(cmark_parser *parser) { - const char *str = NULL; - - switch (parser->error_code) { - case CMARK_ERR_OUT_OF_MEMORY: - str = "Out of memory"; - break; - case CMARK_ERR_INPUT_TOO_LARGE: - str = "Input too large"; - break; - default: - str = "Unknown error"; - break; - } - - return str; -} - diff --git a/src/buffer.c b/src/buffer.c index 9a9e9adccd..a6754b64f6 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -33,11 +33,6 @@ void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, } static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { - // Safety check for overflow. - if (add > BUFSIZE_MAX - buf->size) { - fprintf(stderr, "Internal cmark_strbuf overflow"); - abort(); - } cmark_strbuf_grow(buf, buf->size + add); } @@ -47,25 +42,18 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { if (target_size < buf->asize) return; - // Oversize the buffer by 50% to guarantee amortized linear time - // complexity on append operations. - bufsize_t add = target_size / 2; - // Account for terminating NUL byte. - add += 1; - // Round up to multiple of eight. - add = (add + 7) & ~7; - - // Check for overflow but allow an additional NUL byte. - if (target_size + add > BUFSIZE_MAX + 1) { - target_size = BUFSIZE_MAX + 1; - } - else { - target_size += add; - } + if (target_size > (bufsize_t)(INT32_MAX / 2)) + abort(); + + /* Oversize the buffer by 50% to guarantee amortized linear time + * complexity on append operations. */ + bufsize_t new_size = target_size + target_size / 2; + new_size += 1; + new_size = (new_size + 7) & ~7; buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL, - target_size); - buf->asize = target_size; + new_size); + buf->asize = new_size; } bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } diff --git a/src/buffer.h b/src/buffer.h index 7f31a74bbe..e8780753f8 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -13,28 +13,8 @@ extern "C" { #endif -#ifndef CMARK_HUGE_DOCS - -// Maximum strbuf size without terminating NUL byte. -#define BUFSIZE_MAX (INT32_MAX - 1) - typedef int32_t bufsize_t; -#else // CMARK_HUGE_DOCS - -// This is an untested proof of concept of how to handle multi-gigabyte -// documents on 64-bit platforms at the expense of internal struct sizes. - -#ifdef PTRDIFF_MAX - #define BUFSIZE_MAX (PTRDIFF_MAX - 1) -#else - #define BUFSIZE_MAX (ptrdiff_t)((size_t)-1 / 2) -#endif - -typedef ptrdiff_t bufsize_t; - -#endif // CMARK_HUGE_DOCS - typedef struct { cmark_mem *mem; unsigned char *ptr; diff --git a/src/cmark.c b/src/cmark.c index da93abe215..2ef6cb4cca 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -36,9 +36,6 @@ char *cmark_markdown_to_html(const char *text, size_t len, int options) { char *result; doc = cmark_parse_document(text, len, options); - if (doc == NULL) { - return NULL; - } result = cmark_render_html(doc, options); cmark_node_free(doc); diff --git a/src/cmark.h b/src/cmark.h index 5ce6d10bbd..034f0e6a37 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -2,6 +2,7 @@ #define CMARK_H #include +#include #include #include @@ -22,7 +23,7 @@ extern "C" { /** Convert 'text' (assumed to be a UTF-8 encoded string with length * 'len') from CommonMark Markdown to HTML, returning a null-terminated, * UTF-8-encoded string. It is the caller's responsibility - * to free the returned buffer. Returns NULL on error. + * to free the returned buffer. */ CMARK_EXPORT char *cmark_markdown_to_html(const char *text, size_t len, int options); @@ -98,12 +99,6 @@ typedef enum { CMARK_PAREN_DELIM } cmark_delim_type; -typedef enum { - CMARK_ERR_NONE, - CMARK_ERR_OUT_OF_MEMORY, - CMARK_ERR_INPUT_TOO_LARGE -} cmark_err_type; - typedef struct cmark_node cmark_node; typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; @@ -494,22 +489,12 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem); CMARK_EXPORT void cmark_parser_free(cmark_parser *parser); -/** Return the error code after a failed operation. - */ -CMARK_EXPORT -cmark_err_type cmark_parser_get_error(cmark_parser *parser); - -/** Return the error code after a failed operation. - */ -CMARK_EXPORT -const char *cmark_parser_get_error_message(cmark_parser *parser); - /** Feeds a string of length 'len' to 'parser'. */ CMARK_EXPORT void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); -/** Finish parsing and return a pointer to a tree of nodes or NULL on error. +/** Finish parsing and return a pointer to a tree of nodes. */ CMARK_EXPORT cmark_node *cmark_parser_finish(cmark_parser *parser); @@ -522,7 +507,7 @@ cmark_source_extent *cmark_parser_get_first_source_extent(cmark_parser *parser); /** Parse a CommonMark document in 'buffer' of length 'len'. * Returns a pointer to a tree of nodes. The memory allocated for * the node tree should be released using 'cmark_node_free' - * when it is no longer needed. Returns NULL on error. + * when it is no longer needed. */ CMARK_EXPORT cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); @@ -530,23 +515,22 @@ cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); /** Parse a CommonMark document in file 'f', returning a pointer to * a tree of nodes. The memory allocated for the node tree should be * released using 'cmark_node_free' when it is no longer needed. - * Returns NULL on error. */ CMARK_EXPORT cmark_node *cmark_parse_file(FILE *f, int options); -/** +/** * ## Source map API */ /* Return the index, in bytes, of the start of this extent */ CMARK_EXPORT -size_t cmark_source_extent_get_start(cmark_source_extent *extent); +uint64_t cmark_source_extent_get_start(cmark_source_extent *extent); -/* Return the index, in bytes, of the stop of this extent. This +/* Return the index, in bytes, of the stop of this extent. This * index is not included in the extent*/ CMARK_EXPORT -size_t cmark_source_extent_get_stop(cmark_source_extent *extent); +uint64_t cmark_source_extent_get_stop(cmark_source_extent *extent); /* Return the extent immediately following 'extent' */ CMARK_EXPORT diff --git a/src/inlines.c b/src/inlines.c index 02b472343b..9aea86507a 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1229,7 +1229,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { // Parse inlines from parent's string_content, adding as children of parent. extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options, - cmark_source_map *source_map, bufsize_t total_length) { + cmark_source_map *source_map, uint64_t total_length) { subject subj; subject_from_buf(mem, &subj, &parent->content, refmap, source_map); bufsize_t initial_len = subj.input.len; diff --git a/src/inlines.h b/src/inlines.h index 8459794775..8de31b1906 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -14,7 +14,7 @@ cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options, - cmark_source_map *source_map, bufsize_t total_length); + cmark_source_map *source_map, uint64_t total_length); bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, cmark_reference_map *refmap, diff --git a/src/main.c b/src/main.c index aeb81de4dc..42cd8b1639 100644 --- a/src/main.c +++ b/src/main.c @@ -181,11 +181,6 @@ int main(int argc, char *argv[]) { document = cmark_parser_finish(parser); cmark_parser_free(parser); - if (document == NULL) { - fprintf(stderr, "%s", cmark_parser_get_error_message(parser)); - exit(1); - } - print_document(document, writer, options, width); cmark_node_free(document); diff --git a/src/parser.h b/src/parser.h index 7b4fdbc9bd..b28a8a75b5 100644 --- a/src/parser.h +++ b/src/parser.h @@ -2,7 +2,6 @@ #define CMARK_AST_H #include -#include "cmark.h" #include "node.h" #include "buffer.h" #include "memory.h" @@ -19,8 +18,6 @@ struct cmark_parser { struct cmark_reference_map *refmap; struct cmark_node *root; struct cmark_node *current; - cmark_err_type error_code; - bufsize_t total_bytes; int line_number; bufsize_t offset; bufsize_t column; diff --git a/src/source_map.c b/src/source_map.c index dccbe7c96b..db01a2187d 100644 --- a/src/source_map.c +++ b/src/source_map.c @@ -19,7 +19,7 @@ source_map_free(cmark_source_map *self) } cmark_source_extent * -source_map_append_extent(cmark_source_map *self, bufsize_t start, bufsize_t stop, cmark_node *node, cmark_extent_type type) +source_map_append_extent(cmark_source_map *self, uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) { assert (start <= stop); assert (!self->tail || self->tail->stop <= start); @@ -46,7 +46,7 @@ source_map_append_extent(cmark_source_map *self, bufsize_t start, bufsize_t stop cmark_source_extent * source_map_insert_extent(cmark_source_map *self, cmark_source_extent *previous, - bufsize_t start, bufsize_t stop, cmark_node *node, cmark_extent_type type) + uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) { if (start == stop) return previous; @@ -101,7 +101,7 @@ source_map_free_extent(cmark_source_map *self, cmark_source_extent *extent) cmark_source_extent * source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, - cmark_node *node, bufsize_t total_length) + cmark_node *node, uint64_t total_length) { cmark_source_extent *next_extent = extent->next; cmark_source_extent *res; @@ -135,7 +135,7 @@ source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, } cmark_source_extent * -source_map_splice_extent(cmark_source_map *self, bufsize_t start, bufsize_t stop, +source_map_splice_extent(cmark_source_map *self, uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) { if (!self->next_cursor) { @@ -154,7 +154,7 @@ source_map_splice_extent(cmark_source_map *self, bufsize_t start, bufsize_t stop return self->cursor; } else if (start + self->cursor_offset < self->next_cursor->start) { - bufsize_t new_start = self->next_cursor->start - self->cursor_offset; + uint64_t new_start = self->next_cursor->start - self->cursor_offset; self->cursor = source_map_insert_extent(self, self->cursor, @@ -196,17 +196,17 @@ source_map_pretty_print(cmark_source_map *self) { cmark_source_extent *tmp; for (tmp = self->head; tmp; tmp = tmp->next) { - printf ("%d:%d - %s, %s (%p)\n", tmp->start, tmp->stop, - cmark_node_get_type_string(tmp->node), + printf ("%lu:%lu - %s, %s (%p)\n", tmp->start, tmp->stop, + cmark_node_get_type_string(tmp->node), cmark_source_extent_get_type_string(tmp), (void *) tmp->node); } } bool -source_map_check(cmark_source_map *self, bufsize_t total_length) +source_map_check(cmark_source_map *self, uint64_t total_length) { - bufsize_t last_stop = 0; + uint64_t last_stop = 0; cmark_source_extent *tmp; for (tmp = self->head; tmp; tmp = tmp->next) { @@ -224,13 +224,13 @@ source_map_check(cmark_source_map *self, bufsize_t total_length) } -size_t +uint64_t cmark_source_extent_get_start(cmark_source_extent *extent) { return extent->start; } -size_t +uint64_t cmark_source_extent_get_stop(cmark_source_extent *extent) { return extent->stop; diff --git a/src/source_map.h b/src/source_map.h index dca5a9fdb9..619a07376a 100644 --- a/src/source_map.h +++ b/src/source_map.h @@ -3,7 +3,6 @@ #include "cmark.h" #include "config.h" -#include "buffer.h" typedef struct _cmark_source_map { @@ -11,14 +10,14 @@ typedef struct _cmark_source_map cmark_source_extent *tail; cmark_source_extent *cursor; cmark_source_extent *next_cursor; - bufsize_t cursor_offset; + uint64_t cursor_offset; cmark_mem *mem; } cmark_source_map; struct cmark_source_extent { - bufsize_t start; - bufsize_t stop; + uint64_t start; + uint64_t stop; struct cmark_source_extent *next; struct cmark_source_extent *prev; cmark_node *node; @@ -30,20 +29,20 @@ cmark_source_map * source_map_new (cmark_mem *mem); void source_map_free (cmark_source_map *self); bool source_map_check (cmark_source_map *self, - bufsize_t total_length); + uint64_t total_length); void source_map_pretty_print (cmark_source_map *self); cmark_source_extent * source_map_append_extent(cmark_source_map *self, - bufsize_t start, - bufsize_t stop, + uint64_t start, + uint64_t stop, cmark_node *node, cmark_extent_type type); cmark_source_extent * source_map_insert_extent(cmark_source_map *self, cmark_source_extent *previous, - bufsize_t start, - bufsize_t stop, + uint64_t start, + uint64_t stop, cmark_node *node, cmark_extent_type type); @@ -53,11 +52,11 @@ cmark_source_extent * source_map_free_extent (cmark_source_map *self, cmark_source_extent * source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, cmark_node *node, - bufsize_t total_length); + uint64_t total_length); cmark_source_extent * source_map_splice_extent(cmark_source_map *self, - bufsize_t start, - bufsize_t stop, + uint64_t start, + uint64_t stop, cmark_node *node, cmark_extent_type type); diff --git a/test/cmark.py b/test/cmark.py index f4ff5765b3..4be85a3b0f 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -30,8 +30,6 @@ def to_commonmark(lib, text): render_commonmark.restype = c_char_p render_commonmark.argtypes = [c_void_p, c_int, c_int] node = parse_document(textbytes, textlen, 0) - if node is None: - raise Exception("parse_document failed") result = render_commonmark(node, 0, 0).decode('utf-8') return [0, result, ''] -- cgit 0.0.5-2-1-g0f52 From bce3f59f60e21ffd4f23855c76174d361609b1e0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 22:10:09 -0800 Subject: Revert "Update cmark.3 man page." This reverts commit 26182bb868d3da7dd8a3389729bea79d489855b7. --- man/man3/cmark.3 | 77 ++++---------------------------------------------------- 1 file changed, 5 insertions(+), 72 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 5423d1644c..eb38812c61 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "December 30, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "November 18, 2016" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -16,7 +16,7 @@ Simple Interface Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length \f[I]len\f[]) from CommonMark Markdown to HTML, returning a null\-terminated, UTF\-8\-encoded string. It is the caller's -responsibility to free the returned buffer. Returns NULL on error. +responsibility to free the returned buffer. .SS Node Structure @@ -65,30 +65,6 @@ typedef enum { -.PP -.nf -\fC -.RS 0n -typedef enum { - CMARK_EXTENT_NONE, - CMARK_EXTENT_OPENER, - CMARK_EXTENT_CLOSER, - CMARK_EXTENT_BLANK, - CMARK_EXTENT_CONTENT, - CMARK_EXTENT_PUNCTUATION, - CMARK_EXTENT_LINK_DESTINATION, - CMARK_EXTENT_LINK_TITLE, - CMARK_EXTENT_LINK_LABEL, - CMARK_EXTENT_REFERENCE_DESTINATION, - CMARK_EXTENT_REFERENCE_LABEL, - CMARK_EXTENT_REFERENCE_TITLE, -} cmark_extent_type; -.RE -\f[] -.fi - - - .PP .nf \fC @@ -119,21 +95,6 @@ typedef enum { -.PP -.nf -\fC -.RS 0n -typedef enum { - CMARK_ERR_NONE, - CMARK_ERR_OUT_OF_MEMORY, - CMARK_ERR_INPUT_TOO_LARGE -} cmark_err_type; -.RE -\f[] -.fi - - - .SS Custom memory allocator support @@ -154,12 +115,6 @@ typedef struct cmark_mem { Defines the memory allocation functions to be used by CMark when parsing and allocating a document tree -.PP -\fIvoid\f[] \fBcmark_default_mem_free\f[](\fIvoid *ptr\f[]) - -.PP -Convenience function for bindings. - .SS Creating and Destroying Nodes @@ -647,18 +602,6 @@ Creates a new parser object with the given memory allocator .PP Frees memory allocated for a parser object. -.PP -\fIcmark_err_type\f[] \fBcmark_parser_get_error\f[](\fIcmark_parser *parser\f[]) - -.PP -Return the error code after a failed operation. - -.PP -\fIconst char *\f[] \fBcmark_parser_get_error_message\f[](\fIcmark_parser *parser\f[]) - -.PP -Return the error code after a failed operation. - .PP \fIvoid\f[] \fBcmark_parser_feed\f[](\fIcmark_parser *parser\f[], \fIconst char *buffer\f[], \fIsize_t len\f[]) @@ -669,13 +612,7 @@ Feeds a string of length \f[I]len\f[] to \f[I]parser\f[]. \fIcmark_node *\f[] \fBcmark_parser_finish\f[](\fIcmark_parser *parser\f[]) .PP -Finish parsing and return a pointer to a tree of nodes or NULL on error. - -.PP -\fIcmark_source_extent *\f[] \fBcmark_parser_get_first_source_extent\f[](\fIcmark_parser *parser\f[]) - -.PP -Return a pointer to the first extent of the parser's source map +Finish parsing and return a pointer to a tree of nodes. .PP \fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[]) @@ -684,7 +621,7 @@ Return a pointer to the first extent of the parser's source map Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[]. Returns a pointer to a tree of nodes. The memory allocated for the node tree should be released using \f[I]cmark_node_free\f[] when it is no -longer needed. Returns NULL on error. +longer needed. .PP \fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[]) @@ -692,11 +629,7 @@ longer needed. Returns NULL on error. .PP Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a tree of nodes. The memory allocated for the node tree should be released -using \f[I]cmark_node_free\f[] when it is no longer needed. Returns NULL -on error. - -.SS -Source map API +using \f[I]cmark_node_free\f[] when it is no longer needed. .SS Rendering -- cgit 0.0.5-2-1-g0f52 From 5a3f747222d48422eb1d4e5c60cc5a042808fd0d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 22:10:22 -0800 Subject: Revert "wrapper.py: remove unused (and faulty) libc instantiation (#175)" This reverts commit c4c1d59ca29aceb1c5919908ac97d9476264fd96. --- wrappers/wrapper.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/wrappers/wrapper.py b/wrappers/wrapper.py index 1b3cb0a17e..7ef032a0b3 100644 --- a/wrappers/wrapper.py +++ b/wrappers/wrapper.py @@ -6,6 +6,13 @@ import platform c_object_p = POINTER(c_void_p) +sysname = platform.system() + +if sysname == 'Windows': + libc = CDLL('msvcrt.dll') +else: + libc = CDLL('libc.so.6') + if sys.version_info[0] > 2: def bytes_and_length(text): if type(text) == str: -- cgit 0.0.5-2-1-g0f52 From fb6356e3aa7696183f6cbcb99e521ab74260124a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 22:10:33 -0800 Subject: Revert "More sourcepos! (#169)" This reverts commit 9e643720ec903f3b448bd2589a0c02c2514805ae. --- src/CMakeLists.txt | 2 - src/blocks.c | 186 +++-------- src/cmark.c | 5 - src/cmark.h | 60 ---- src/inlines.c | 143 +------- src/inlines.h | 11 +- src/parser.h | 4 - src/source_map.c | 293 ---------------- src/source_map.h | 66 ---- test/CMakeLists.txt | 17 - test/test_cmark.py | 490 --------------------------- wrappers/wrapper.py | 944 ++-------------------------------------------------- 12 files changed, 96 insertions(+), 2125 deletions(-) delete mode 100644 src/source_map.c delete mode 100644 src/source_map.h delete mode 100644 test/test_cmark.py mode change 100644 => 100755 wrappers/wrapper.py diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b75c0c7363..0cb653014f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,6 @@ set(HEADERS houdini.h cmark_ctype.h render.h - source_map.h ) set(LIBRARY_SOURCES cmark.c @@ -41,7 +40,6 @@ set(LIBRARY_SOURCES houdini_html_e.c houdini_html_u.c cmark_ctype.c - source_map.c ${HEADERS} ) diff --git a/src/blocks.c b/src/blocks.c index 1c1d16045c..99dd082652 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -28,10 +28,6 @@ #define MIN(x, y) ((x < y) ? x : y) #endif -#ifndef MAX -#define MAX(x, y) ((x > y) ? x : y) -#endif - #define peek_at(i, n) (i)->data[n] static bool S_last_line_blank(const cmark_node *node) { @@ -97,7 +93,6 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->root = document; parser->current = document; parser->line_number = 0; - parser->line_offset = 0; parser->offset = 0; parser->column = 0; parser->first_nonspace = 0; @@ -108,7 +103,6 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->last_line_length = 0; parser->options = options; parser->last_buffer_ended_with_cr = false; - parser->source_map = source_map_new(mem); return parser; } @@ -122,7 +116,6 @@ void cmark_parser_free(cmark_parser *parser) { cmark_mem *mem = parser->mem; cmark_strbuf_free(&parser->curline); cmark_strbuf_free(&parser->linebuf); - source_map_free(parser->source_map); cmark_reference_map_free(parser->refmap); mem->free(parser); } @@ -262,13 +255,10 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { switch (S_type(b)) { case CMARK_NODE_PARAGRAPH: - source_map_start_cursor(parser->source_map, parser->last_paragraph_extent); while (cmark_strbuf_at(node_content, 0) == '[' && (pos = cmark_parse_reference_inline(parser->mem, node_content, - parser->refmap, parser->root, - parser->source_map))) { - parser->last_paragraph_extent = parser->source_map->cursor; - source_map_start_cursor(parser->source_map, parser->last_paragraph_extent); + parser->refmap))) { + cmark_strbuf_drop(node_content, pos); } if (is_blank(node_content, 0)) { @@ -276,6 +266,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { cmark_node_free(b); } break; + case CMARK_NODE_CODE_BLOCK: if (!b->as.code.fenced) { // indented code remove_trailing_blank_lines(node_content); @@ -370,32 +361,21 @@ static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, // Walk through node and all children, recursively, parsing // string content into inline content where appropriate. -static void process_inlines(cmark_parser *parser) { - cmark_iter *iter = cmark_iter_new(parser->root); +static void process_inlines(cmark_mem *mem, cmark_node *root, + cmark_reference_map *refmap, int options) { + cmark_iter *iter = cmark_iter_new(root); cmark_node *cur; cmark_event_type ev_type; - cmark_source_extent *cur_extent = parser->source_map->head; while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { cur = cmark_iter_get_node(iter); if (ev_type == CMARK_EVENT_ENTER) { if (contains_inlines(S_type(cur))) { - while (cur_extent && cur_extent->node != cur) { - cur_extent = source_map_stitch_extent(parser->source_map, cur_extent, parser->root, parser->line_offset)->next; - } - - assert(cur_extent); - - source_map_start_cursor(parser->source_map, cur_extent); - cmark_parse_inlines(parser->mem, cur, parser->refmap, parser->options, parser->source_map, parser->line_offset); + cmark_parse_inlines(mem, cur, refmap, options); } } } - while (cur_extent) { - cur_extent = source_map_stitch_extent(parser->source_map, cur_extent, parser->root, parser->line_offset)->next; - } - cmark_iter_free(iter); } @@ -502,10 +482,7 @@ static cmark_node *finalize_document(cmark_parser *parser) { } finalize(parser, parser->root); - - process_inlines(parser); - - assert(source_map_check(parser->source_map, parser->line_offset)); + process_inlines(parser->mem, parser->root, parser->refmap, parser->options); return parser->root; } @@ -547,7 +524,6 @@ void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) { static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len, bool eof) { const unsigned char *end = buffer + len; - const unsigned char *skipped; static const uint8_t repl[] = {239, 191, 189}; if (parser->last_buffer_ended_with_cr && *buffer == '\n') { @@ -558,7 +534,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, while (buffer < end) { const unsigned char *eol; bufsize_t chunk_len; - bufsize_t linebuf_size = 0; bool process = false; for (eol = buffer; eol < end; ++eol) { if (S_is_line_end_char(*eol)) { @@ -576,7 +551,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, chunk_len = (eol - buffer); if (process) { if (parser->linebuf.size > 0) { - linebuf_size = cmark_strbuf_len(&parser->linebuf); cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); cmark_strbuf_clear(&parser->linebuf); @@ -595,8 +569,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, } buffer += chunk_len; - skipped = buffer; - if (buffer < end) { if (*buffer == '\0') { // skip over NULL @@ -612,11 +584,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, buffer++; } } - chunk_len += buffer - skipped; - chunk_len += linebuf_size; - - if (process) - parser->line_offset += chunk_len; } } @@ -676,13 +643,11 @@ static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { // indicates a number of columns; otherwise, a number of bytes. // If advancing a certain number of columns partially consumes // a tab character, parser->partially_consumed_tab is set to true. -static void S_advance_offset(cmark_parser *parser, cmark_node *container, cmark_extent_type type, - cmark_chunk *input, bufsize_t count, bool columns) { +static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, + bufsize_t count, bool columns) { char c; int chars_to_tab; int chars_to_advance; - int initial_pos = parser->offset + parser->line_offset; - while (count > 0 && (c = peek_at(input, parser->offset))) { if (c == '\t') { chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); @@ -705,8 +670,6 @@ static void S_advance_offset(cmark_parser *parser, cmark_node *container, cmark_ count -= 1; } } - - source_map_append_extent(parser->source_map, initial_pos, parser->offset + parser->line_offset, container, type); } static bool S_last_child_is_open(cmark_node *container) { @@ -714,7 +677,7 @@ static bool S_last_child_is_open(cmark_node *container) { (container->last_child->flags & CMARK_NODE__OPEN); } -static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input, cmark_node *container) { +static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { bool res = false; bufsize_t matched = 0; @@ -722,10 +685,10 @@ static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input, c parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; if (matched) { - S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, parser->indent + 1, true); + S_advance_offset(parser, input, parser->indent + 1, true); if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, 1, true); + S_advance_offset(parser, input, 1, true); } res = true; @@ -739,7 +702,7 @@ static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, if (parser->indent >= container->as.list.marker_offset + container->as.list.padding) { - S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, container->as.list.marker_offset + + S_advance_offset(parser, input, container->as.list.marker_offset + container->as.list.padding, true); res = true; @@ -747,7 +710,7 @@ static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, // if container->first_child is NULL, then the opening line // of the list item was blank after the list marker; in this // case, we are done with the list item. - S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); res = true; } @@ -761,10 +724,10 @@ static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, if (!container->as.code.fenced) { // indented if (parser->indent >= CODE_INDENT) { - S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, CODE_INDENT, true); + S_advance_offset(parser, input, CODE_INDENT, true); res = true; } else if (parser->blank) { - S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); res = true; } @@ -780,14 +743,14 @@ static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, // closing fence - and since we're at // the end of a line, we can stop processing it: *should_continue = false; - S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, matched, false); + S_advance_offset(parser, input, matched, false); parser->current = finalize(parser, container); } else { // skip opt. spaces of fence parser->offset int i = container->as.code.fence_offset; while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, 1, true); + S_advance_offset(parser, input, 1, true); i--; } res = true; @@ -844,7 +807,7 @@ static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, switch (cont_type) { case CMARK_NODE_BLOCK_QUOTE: - if (!parse_block_quote_prefix(parser, input, container)) + if (!parse_block_quote_prefix(parser, input)) goto done; break; case CMARK_NODE_ITEM: @@ -904,26 +867,29 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, indented = parser->indent >= CODE_INDENT; if (!indented && peek_at(input, parser->first_nonspace) == '>') { - *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, - parser->first_nonspace + 1); - S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, + bufsize_t blockquote_startpos = parser->first_nonspace; + + S_advance_offset(parser, input, parser->first_nonspace + 1 - parser->offset, false); // optional following character if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, *container, CMARK_EXTENT_BLANK, input, 1, true); + S_advance_offset(parser, input, 1, true); } + *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, + 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; - *container = add_child(parser, *container, CMARK_NODE_HEADING, - parser->first_nonspace + 1); - S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, + S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); + *container = add_child(parser, *container, CMARK_NODE_HEADING, + heading_startpos + 1); hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); @@ -945,7 +911,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->as.code.fence_offset = (int8_t)(parser->first_nonspace - parser->offset); (*container)->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, + S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); @@ -965,14 +931,14 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->type = (uint16_t)CMARK_NODE_HEADING; (*container)->as.heading.level = lev; (*container)->as.heading.setext = true; - S_advance_offset(parser, *container, CMARK_EXTENT_CLOSER, input, input->len - 1 - parser->offset, false); + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if (!indented && !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && (matched = scan_thematic_break(input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext heading: *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, parser->first_nonspace + 1); - S_advance_offset(parser, *container, CMARK_EXTENT_CONTENT, input, input->len - 1 - parser->offset, false); + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if ((!indented || cont_type == CMARK_NODE_LIST) && (matched = parse_list_marker( parser->mem, input, parser->first_nonspace, @@ -980,37 +946,20 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, // Note that we can have new list items starting with >= 4 // spaces indent, as long as the list container is still open. - cmark_node *list = NULL; - cmark_node *item = NULL; - cmark_source_extent *save_source_map_tail; int i = 0; - if (cont_type != CMARK_NODE_LIST || - !lists_match(&((*container)->as.list), data)) { - *container = add_child(parser, *container, CMARK_NODE_LIST, - parser->first_nonspace + 1); - list = *container; - - } - - // add the list item - *container = add_child(parser, *container, CMARK_NODE_ITEM, - parser->first_nonspace + 1); - item = *container; - // compute padding: - S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, + S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); save_partially_consumed_tab = parser->partially_consumed_tab; save_offset = parser->offset; save_column = parser->column; - save_source_map_tail = parser->source_map->tail; while (parser->column - save_column <= 5 && S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, *container, CMARK_EXTENT_BLANK, input, 1, true); + S_advance_offset(parser, input, 1, true); } i = parser->column - save_column; @@ -1020,14 +969,9 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, data->padding = matched + 1; parser->offset = save_offset; parser->column = save_column; - if (save_source_map_tail) { - cmark_source_extent *tmp_extent; - for (tmp_extent = save_source_map_tail->next; tmp_extent; tmp_extent = source_map_free_extent(parser->source_map, tmp_extent)); - } - parser->partially_consumed_tab = save_partially_consumed_tab; if (i > 0) { - S_advance_offset(parser, *container, CMARK_EXTENT_BLANK, input, 1, true); + S_advance_offset(parser, input, 1, true); } } else { data->padding = matched + i; @@ -1038,14 +982,22 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, data->marker_offset = parser->indent; - /* TODO: static */ - if (list) - memcpy(&(list->as.list), data, sizeof(*data)); - if (item) - memcpy(&(item->as.list), data, sizeof(*data)); + if (cont_type != CMARK_NODE_LIST || + !lists_match(&((*container)->as.list), data)) { + *container = add_child(parser, *container, CMARK_NODE_LIST, + parser->first_nonspace + 1); + + memcpy(&((*container)->as.list), data, sizeof(*data)); + } + // add the list item + *container = add_child(parser, *container, CMARK_NODE_ITEM, + parser->first_nonspace + 1); + /* TODO: static */ + memcpy(&((*container)->as.list), data, sizeof(*data)); parser->mem->free(data); } else if (indented && !maybe_lazy && !parser->blank) { + S_advance_offset(parser, input, CODE_INDENT, true); *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, parser->offset + 1); (*container)->as.code.fenced = false; @@ -1054,7 +1006,6 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->as.code.fence_offset = 0; (*container)->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, *container, CMARK_EXTENT_OPENER, input, CODE_INDENT, true); } else { break; } @@ -1119,11 +1070,6 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, } if (S_type(container) == CMARK_NODE_CODE_BLOCK) { - source_map_append_extent(parser->source_map, - parser->offset + parser->line_offset, - parser->line_offset + input->len, - container, - CMARK_EXTENT_CONTENT); add_line(container, input, parser); } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) { add_line(container, input, parser); @@ -1164,43 +1110,22 @@ static void add_text_to_container(cmark_parser *parser, cmark_node *container, container = finalize(parser, container); assert(parser->current != NULL); } - source_map_append_extent(parser->source_map, - parser->offset + parser->line_offset, - parser->line_offset + input->len, - container, - CMARK_EXTENT_CONTENT); } else if (parser->blank) { - source_map_append_extent(parser->source_map, - parser->line_offset + parser->offset, - parser->line_offset + input->len, - container, - CMARK_EXTENT_BLANK); + // ??? do nothing } else if (accepts_lines(S_type(container))) { - bufsize_t initial_len = input->len; - bool chopped = false; - if (S_type(container) == CMARK_NODE_HEADING && container->as.heading.setext == false) { chop_trailing_hashtags(input); - chopped = true; } - S_advance_offset(parser, container, CMARK_EXTENT_BLANK, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); add_line(container, input, parser); - - if (chopped) - source_map_append_extent(parser->source_map, - MAX(parser->line_offset + parser->offset, parser->line_offset + input->len), - parser->line_offset + initial_len, - container, - CMARK_EXTENT_CLOSER); } else { // create paragraph container for line container = add_child(parser, container, CMARK_NODE_PARAGRAPH, parser->first_nonspace + 1); - S_advance_offset(parser, container, CMARK_EXTENT_OPENER, input, parser->first_nonspace - parser->offset, + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, false); - parser->last_paragraph_extent = parser->source_map->tail; add_line(container, input, parser); } @@ -1262,7 +1187,6 @@ finished: cmark_node *cmark_parser_finish(cmark_parser *parser) { if (parser->linebuf.size) { S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); - parser->line_offset += parser->linebuf.size; cmark_strbuf_clear(&parser->linebuf); } @@ -1281,9 +1205,3 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { #endif return parser->root; } - -cmark_source_extent * -cmark_parser_get_first_source_extent(cmark_parser *parser) -{ - return parser->source_map->head; -} diff --git a/src/cmark.c b/src/cmark.c index 2ef6cb4cca..0d3bc1669f 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -24,11 +24,6 @@ static void *xrealloc(void *ptr, size_t size) { return new_ptr; } -void cmark_default_mem_free(void *ptr) -{ - free(ptr); -} - cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free}; char *cmark_markdown_to_html(const char *text, size_t len, int options) { diff --git a/src/cmark.h b/src/cmark.h index 034f0e6a37..6ed7eb0574 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -2,7 +2,6 @@ #define CMARK_H #include -#include #include #include @@ -66,21 +65,6 @@ typedef enum { CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, } cmark_node_type; -typedef enum { - CMARK_EXTENT_NONE, - CMARK_EXTENT_OPENER, - CMARK_EXTENT_CLOSER, - CMARK_EXTENT_BLANK, - CMARK_EXTENT_CONTENT, - CMARK_EXTENT_PUNCTUATION, - CMARK_EXTENT_LINK_DESTINATION, - CMARK_EXTENT_LINK_TITLE, - CMARK_EXTENT_LINK_LABEL, - CMARK_EXTENT_REFERENCE_DESTINATION, - CMARK_EXTENT_REFERENCE_LABEL, - CMARK_EXTENT_REFERENCE_TITLE, -} cmark_extent_type; - /* For backwards compatibility: */ #define CMARK_NODE_HEADER CMARK_NODE_HEADING #define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK @@ -102,7 +86,6 @@ typedef enum { typedef struct cmark_node cmark_node; typedef struct cmark_parser cmark_parser; typedef struct cmark_iter cmark_iter; -typedef struct cmark_source_extent cmark_source_extent; /** * ## Custom memory allocator support @@ -117,11 +100,6 @@ typedef struct cmark_mem { void (*free)(void *); } cmark_mem; -/** Convenience function for bindings. - */ -CMARK_EXPORT -void cmark_default_mem_free(void *ptr); - /** * ## Creating and Destroying Nodes */ @@ -499,11 +477,6 @@ void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); CMARK_EXPORT cmark_node *cmark_parser_finish(cmark_parser *parser); -/** Return a pointer to the first extent of the parser's source map - */ -CMARK_EXPORT -cmark_source_extent *cmark_parser_get_first_source_extent(cmark_parser *parser); - /** Parse a CommonMark document in 'buffer' of length 'len'. * Returns a pointer to a tree of nodes. The memory allocated for * the node tree should be released using 'cmark_node_free' @@ -519,39 +492,6 @@ cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); CMARK_EXPORT cmark_node *cmark_parse_file(FILE *f, int options); -/** - * ## Source map API - */ - -/* Return the index, in bytes, of the start of this extent */ -CMARK_EXPORT -uint64_t cmark_source_extent_get_start(cmark_source_extent *extent); - -/* Return the index, in bytes, of the stop of this extent. This - * index is not included in the extent*/ -CMARK_EXPORT -uint64_t cmark_source_extent_get_stop(cmark_source_extent *extent); - -/* Return the extent immediately following 'extent' */ -CMARK_EXPORT -cmark_source_extent *cmark_source_extent_get_next(cmark_source_extent *extent); - -/* Return the extent immediately preceding 'extent' */ -CMARK_EXPORT -cmark_source_extent *cmark_source_extent_get_previous(cmark_source_extent *extent); - -/* Return the node 'extent' maps to */ -CMARK_EXPORT -cmark_node *cmark_source_extent_get_node(cmark_source_extent *extent); - -/* Return the type of 'extent' */ -CMARK_EXPORT -cmark_extent_type cmark_source_extent_get_type(cmark_source_extent *extent); - -/* Return a string representation of 'extent' */ -CMARK_EXPORT -const char *cmark_source_extent_get_type_string(cmark_source_extent *extent); - /** * ## Rendering */ diff --git a/src/inlines.c b/src/inlines.c index 9aea86507a..014ab1e963 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -13,10 +13,6 @@ #include "scanners.h" #include "inlines.h" -#ifndef MIN -#define MIN(x, y) ((x < y) ? x : y) -#endif - static const char *EMDASH = "\xE2\x80\x94"; static const char *ENDASH = "\xE2\x80\x93"; static const char *ELLIPSES = "\xE2\x80\xA6"; @@ -44,7 +40,6 @@ typedef struct delimiter { unsigned char delim_char; bool can_open; bool can_close; - cmark_source_extent *extent; } delimiter; typedef struct bracket { @@ -55,7 +50,6 @@ typedef struct bracket { bool image; bool active; bool bracket_after; - cmark_source_extent *extent; } bracket; typedef struct { @@ -67,7 +61,6 @@ typedef struct { bracket *last_bracket; bufsize_t backticks[MAXBACKTICKS + 1]; bool scanned_for_backticks; - cmark_source_map *source_map; } subject; static CMARK_INLINE bool S_is_line_end_char(char c) { @@ -80,7 +73,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, static int parse_inline(subject *subj, cmark_node *parent, int options); static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap, cmark_source_map *source_map); + cmark_reference_map *refmap); static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. @@ -156,7 +149,7 @@ static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, } static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap, cmark_source_map *source_map) { + cmark_reference_map *refmap) { int i; e->mem = mem; e->input.data = buffer->ptr; @@ -166,8 +159,6 @@ static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, e->refmap = refmap; e->last_delim = NULL; e->last_bracket = NULL; - e->source_map = source_map; - for (i=0; i <= MAXBACKTICKS; i++) { e->backticks[i] = 0; } @@ -415,7 +406,6 @@ static void push_delimiter(subject *subj, unsigned char c, bool can_open, if (delim->previous != NULL) { delim->previous->next = delim; } - delim->extent = NULL; subj->last_delim = delim; } @@ -431,12 +421,11 @@ static void push_bracket(subject *subj, bool image, cmark_node *inl_text) { b->previous_delimiter = subj->last_delim; b->position = subj->pos; b->bracket_after = false; - b->extent = NULL; subj->last_bracket = b; } // Assumes the subject has a c at the current position. -static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart, bool *pushed) { +static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { bufsize_t numdelims; cmark_node *inl_text; bool can_open, can_close; @@ -457,9 +446,6 @@ static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart, bool if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { push_delimiter(subj, c, can_open, can_close, inl_text); - *pushed = true; - } else { - *pushed = false; } return inl_text; @@ -620,7 +606,6 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, bufsize_t opener_num_chars = opener_inl->as.literal.len; bufsize_t closer_num_chars = closer_inl->as.literal.len; cmark_node *tmp, *tmpnext, *emph; - cmark_source_extent *tmp_extent; // calculate the actual number of characters used from this closer if (closer_num_chars < 3 || opener_num_chars < 3) { @@ -656,28 +641,9 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, } cmark_node_insert_after(opener_inl, emph); - tmp_extent = closer->extent->prev; - - source_map_insert_extent(subj->source_map, - opener->extent, - opener->extent->stop - use_delims, - opener->extent->stop, - emph, - CMARK_EXTENT_OPENER); - opener->extent->stop -= use_delims; - - source_map_insert_extent(subj->source_map, - tmp_extent, - closer->extent->start, - closer->extent->start + use_delims, - emph, - CMARK_EXTENT_CLOSER); - closer->extent->start += use_delims; - // if opener has 0 characters, remove it and its associated inline if (opener_num_chars == 0) { cmark_node_free(opener_inl); - source_map_free_extent(subj->source_map, opener->extent); remove_delimiter(subj, opener); } @@ -687,7 +653,6 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, cmark_node_free(closer_inl); // remove closer from list tmp_delim = closer->next; - source_map_free_extent(subj->source_map, closer->extent); remove_delimiter(subj, closer); closer = tmp_delim; } @@ -910,8 +875,6 @@ static cmark_node *handle_close_bracket(subject *subj) { int found_label; cmark_node *tmp, *tmpnext; bool is_image; - bool is_inline = false; - bool is_shortcut = false; advance(subj); // advance past ] initial_pos = subj->pos; @@ -962,7 +925,6 @@ static cmark_node *handle_close_bracket(subject *subj) { title = cmark_clean_title(subj->mem, &title_chunk); cmark_chunk_free(subj->mem, &url_chunk); cmark_chunk_free(subj->mem, &title_chunk); - is_inline = true; goto match; } else { @@ -985,7 +947,6 @@ static cmark_node *handle_close_bracket(subject *subj) { cmark_chunk_free(subj->mem, &raw_label); raw_label = cmark_chunk_dup(&subj->input, opener->position, initial_pos - opener->position - 1); - is_shortcut = true; found_label = true; } @@ -1015,28 +976,6 @@ match: cmark_node_insert_before(opener->inl_text, inl); // Add link text: tmp = opener->inl_text->next; - assert(opener->extent); - - opener->extent->node = inl; - opener->extent->type = CMARK_EXTENT_PUNCTUATION; - - source_map_splice_extent(subj->source_map, initial_pos - 1, initial_pos, inl, CMARK_EXTENT_PUNCTUATION); - if (is_inline) { - source_map_splice_extent(subj->source_map, after_link_text_pos, starturl, inl, CMARK_EXTENT_PUNCTUATION); - source_map_splice_extent(subj->source_map, starturl, endurl, inl, CMARK_EXTENT_LINK_DESTINATION); - if (endtitle != starttitle) { - source_map_splice_extent(subj->source_map, endurl, starttitle, inl, CMARK_EXTENT_BLANK); - source_map_splice_extent(subj->source_map, starttitle, endtitle, inl, CMARK_EXTENT_LINK_TITLE); - source_map_splice_extent(subj->source_map, endtitle, subj->pos, inl, CMARK_EXTENT_BLANK); - } else { - source_map_splice_extent(subj->source_map, endurl, subj->pos, inl, CMARK_EXTENT_BLANK); - } - } else if (!is_shortcut) { - source_map_splice_extent(subj->source_map, initial_pos, initial_pos + 1, inl, CMARK_EXTENT_PUNCTUATION); - source_map_splice_extent(subj->source_map, initial_pos + 1, subj->pos - 1, inl, CMARK_EXTENT_LINK_LABEL); - source_map_splice_extent(subj->source_map, subj->pos - 1, subj->pos, inl, CMARK_EXTENT_PUNCTUATION); - } - while (tmp) { tmpnext = tmp->next; cmark_node_append_child(inl, tmp); @@ -1140,10 +1079,6 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { cmark_chunk contents; unsigned char c; bufsize_t endpos; - bufsize_t startpos = subj->pos; - bool add_extent_to_last_bracket = false; - bool add_extent_to_last_delimiter = false; - c = peek_char(subj); if (c == 0) { return 0; @@ -1169,7 +1104,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { case '_': case '\'': case '"': - new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0, &add_extent_to_last_delimiter); + new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0); break; case '-': new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0); @@ -1181,7 +1116,6 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { advance(subj); new_inl = make_str(subj->mem, cmark_chunk_literal("[")); push_bracket(subj, false, new_inl); - add_extent_to_last_bracket = true; break; case ']': new_inl = handle_close_bracket(subj); @@ -1192,7 +1126,6 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { advance(subj); new_inl = make_str(subj->mem, cmark_chunk_literal("![")); push_bracket(subj, true, new_inl); - add_extent_to_last_bracket = true; } else { new_inl = make_str(subj->mem, cmark_chunk_literal("!")); } @@ -1209,17 +1142,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { new_inl = make_str(subj->mem, contents); } - if (new_inl != NULL) { - cmark_source_extent *extent; - - extent = source_map_splice_extent(subj->source_map, startpos, subj->pos, new_inl, CMARK_EXTENT_CONTENT); - - if (add_extent_to_last_bracket) - subj->last_bracket->extent = extent; - else if (add_extent_to_last_delimiter) - subj->last_delim->extent = extent; - cmark_node_append_child(parent, new_inl); } @@ -1228,11 +1151,9 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { // Parse inlines from parent's string_content, adding as children of parent. extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, - cmark_reference_map *refmap, int options, - cmark_source_map *source_map, uint64_t total_length) { + cmark_reference_map *refmap, int options) { subject subj; - subject_from_buf(mem, &subj, &parent->content, refmap, source_map); - bufsize_t initial_len = subj.input.len; + subject_from_buf(mem, &subj, &parent->content, refmap); cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) @@ -1246,13 +1167,6 @@ extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, while (subj.last_bracket) { pop_bracket(&subj); } - - source_map_insert_extent(source_map, - source_map->cursor, - source_map->cursor->stop, - MIN(source_map->cursor->stop + initial_len - subj.input.len, total_length), - parent, - CMARK_EXTENT_BLANK); } // Parse zero or more space characters, including at most one newline. @@ -1268,30 +1182,22 @@ static void spnl(subject *subj) { // Return 0 if no reference found, otherwise position of subject // after reference is parsed. bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, - cmark_reference_map *refmap, - cmark_node *root, - cmark_source_map *source_map) { + cmark_reference_map *refmap) { subject subj; - cmark_node *container = source_map->cursor->node; - cmark_source_extent *tmp_extent = source_map->cursor; cmark_chunk lab; cmark_chunk url; cmark_chunk title; bufsize_t matchlen = 0; - bufsize_t starttitle, endtitle; - bufsize_t endlabel; - bufsize_t starturl, endurl; + bufsize_t beforetitle; - subject_from_buf(mem, &subj, input, NULL, source_map); + subject_from_buf(mem, &subj, input, NULL); // parse label: if (!link_label(&subj, &lab) || lab.len == 0) return 0; - endlabel = subj.pos - 1; - // colon: if (peek_char(&subj) == ':') { advance(&subj); @@ -1301,7 +1207,6 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, // parse link url: spnl(&subj); - starturl = subj.pos; matchlen = manual_scan_link_url(&subj.input, subj.pos); if (matchlen > 0) { url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); @@ -1311,29 +1216,22 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, } // parse optional link_title - endurl = subj.pos; + beforetitle = subj.pos; spnl(&subj); - starttitle = subj.pos; matchlen = scan_link_title(&subj.input, subj.pos); if (matchlen) { title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); subj.pos += matchlen; } else { - subj.pos = endurl; - starttitle = endurl; - endtitle = endurl; + subj.pos = beforetitle; title = cmark_chunk_literal(""); } - endtitle = subj.pos; - // parse final spaces and newline: skip_spaces(&subj); if (!skip_line_end(&subj)) { if (matchlen) { // try rewinding before title - subj.pos = endurl; - starttitle = endurl; - endtitle = endurl; + subj.pos = beforetitle; skip_spaces(&subj); if (!skip_line_end(&subj)) { return 0; @@ -1344,22 +1242,5 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, } // insert reference into refmap cmark_reference_create(refmap, &lab, &url, &title); - - // Mark the extents of the reference - source_map_splice_extent(source_map, 0, 1, root, CMARK_EXTENT_PUNCTUATION); - source_map_splice_extent(source_map, 1, endlabel, root, CMARK_EXTENT_REFERENCE_LABEL); - source_map_splice_extent(source_map, endlabel, endlabel + 2, root, CMARK_EXTENT_PUNCTUATION); - source_map_splice_extent(source_map, endlabel + 2, starturl, root, CMARK_EXTENT_BLANK); - source_map_splice_extent(source_map, starturl, endurl, root, CMARK_EXTENT_REFERENCE_DESTINATION); - source_map_splice_extent(source_map, endurl, starttitle, root, CMARK_EXTENT_BLANK); - source_map_splice_extent(source_map, starttitle, endtitle, root, CMARK_EXTENT_REFERENCE_TITLE); - source_map_splice_extent(source_map, endtitle, subj.pos, root, CMARK_EXTENT_BLANK); - - while (tmp_extent != source_map->cursor) { - if (tmp_extent->node == container) - tmp_extent->node = root; - tmp_extent = tmp_extent->next; - } - return subj.pos; } diff --git a/src/inlines.h b/src/inlines.h index 8de31b1906..52be76820d 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -1,10 +1,6 @@ #ifndef CMARK_INLINES_H #define CMARK_INLINES_H -#include "chunk.h" -#include "references.h" -#include "source_map.h" - #ifdef __cplusplus extern "C" { #endif @@ -13,13 +9,10 @@ cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url); cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, - cmark_reference_map *refmap, int options, - cmark_source_map *source_map, uint64_t total_length); + cmark_reference_map *refmap, int options); bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, - cmark_reference_map *refmap, - cmark_node *root, - cmark_source_map *source_map); + cmark_reference_map *refmap); #ifdef __cplusplus } diff --git a/src/parser.h b/src/parser.h index b28a8a75b5..0c5033bd22 100644 --- a/src/parser.h +++ b/src/parser.h @@ -5,7 +5,6 @@ #include "node.h" #include "buffer.h" #include "memory.h" -#include "source_map.h" #ifdef __cplusplus extern "C" { @@ -28,12 +27,9 @@ struct cmark_parser { bool partially_consumed_tab; cmark_strbuf curline; bufsize_t last_line_length; - bufsize_t line_offset; cmark_strbuf linebuf; int options; bool last_buffer_ended_with_cr; - cmark_source_map *source_map; - cmark_source_extent *last_paragraph_extent; }; #ifdef __cplusplus diff --git a/src/source_map.c b/src/source_map.c deleted file mode 100644 index db01a2187d..0000000000 --- a/src/source_map.c +++ /dev/null @@ -1,293 +0,0 @@ -#include - -#include "source_map.h" - -cmark_source_map * -source_map_new(cmark_mem *mem) -{ - cmark_source_map *res = (cmark_source_map *) mem->calloc(1, sizeof(cmark_source_map)); - res->mem = mem; - return res; -} - -void -source_map_free(cmark_source_map *self) -{ - cmark_source_extent *tmp; - for (tmp = self->head; tmp; tmp = source_map_free_extent(self, tmp)); - self->mem->free(self); -} - -cmark_source_extent * -source_map_append_extent(cmark_source_map *self, uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) -{ - assert (start <= stop); - assert (!self->tail || self->tail->stop <= start); - - cmark_source_extent *res = (cmark_source_extent *) self->mem->calloc(1, sizeof(cmark_source_extent)); - - res->start = start; - res->stop = stop; - res->node = node; - res->type = type; - - res->next = NULL; - res->prev = self->tail; - - if (!self->head) - self->head = res; - else - self->tail->next = res; - - self->tail = res; - - return res; -} - -cmark_source_extent * -source_map_insert_extent(cmark_source_map *self, cmark_source_extent *previous, - uint64_t start, uint64_t stop, cmark_node *node, cmark_extent_type type) -{ - if (start == stop) - return previous; - - cmark_source_extent *extent = (cmark_source_extent *) self->mem->calloc(1, sizeof(cmark_source_extent)); - - extent->start = start; - extent->stop = stop; - extent->node = node; - extent->type = type; - extent->next = previous->next; - extent->prev = previous; - previous->next = extent; - - if (extent->next) - extent->next->prev = extent; - else - self->tail = extent; - - return extent; -} - -cmark_source_extent * -source_map_free_extent(cmark_source_map *self, cmark_source_extent *extent) -{ - cmark_source_extent *next = extent->next; - - if (extent->prev) - extent->prev->next = next; - - if (extent->next) - extent->next->prev = extent->prev; - - if (extent == self->tail) - self->tail = extent->prev; - - if (extent == self->head) - self->head = extent->next; - - if (extent == self->cursor) { - self->cursor = extent->prev; - } - - if (extent == self->next_cursor) { - self->next_cursor = extent->next; - } - - self->mem->free(extent); - - return next; -} - -cmark_source_extent * -source_map_stitch_extent(cmark_source_map *self, cmark_source_extent *extent, - cmark_node *node, uint64_t total_length) -{ - cmark_source_extent *next_extent = extent->next; - cmark_source_extent *res; - - while (next_extent && extent->start == extent->stop) { - extent = source_map_free_extent(self, extent); - extent = next_extent; - next_extent = extent->next; - } - - if (next_extent) { - res = source_map_insert_extent(self, - extent, - extent->stop, - extent->next->start, - node, - CMARK_EXTENT_BLANK); - } else { - res = source_map_insert_extent(self, - extent, - extent->stop, - total_length, - node, - CMARK_EXTENT_BLANK); - } - - if (extent->start == extent->stop) - source_map_free_extent(self, extent); - - return res; -} - -cmark_source_extent * -source_map_splice_extent(cmark_source_map *self, uint64_t start, uint64_t stop, - cmark_node *node, cmark_extent_type type) -{ - if (!self->next_cursor) { - self->cursor = source_map_insert_extent(self, - self->cursor, - start + self->cursor_offset, - stop + self->cursor_offset, node, type); - - return self->cursor; - } else if (start + self->cursor_offset < self->next_cursor->start && - stop + self->cursor_offset <= self->next_cursor->start) { - self->cursor = source_map_insert_extent(self, - self->cursor, - start + self->cursor_offset, - stop + self->cursor_offset, node, type); - - return self->cursor; - } else if (start + self->cursor_offset < self->next_cursor->start) { - uint64_t new_start = self->next_cursor->start - self->cursor_offset; - - self->cursor = source_map_insert_extent(self, - self->cursor, - start + self->cursor_offset, - self->next_cursor->start, - node, type); - - if (new_start == stop) - return self->cursor; - - start = new_start; - } - - while (self->next_cursor && start + self->cursor_offset >= self->next_cursor->start) { - self->cursor_offset += self->next_cursor->stop - self->next_cursor->start; - self->cursor = self->cursor->next; - self->next_cursor = self->cursor->next; - } - - return source_map_splice_extent(self, start, stop, node, type); -} - -bool -source_map_start_cursor(cmark_source_map *self, cmark_source_extent *cursor) -{ - self->cursor = cursor ? cursor : self->head; - - if (!self->cursor) - return false; - - self->next_cursor = self->cursor->next; - self->cursor_offset = self->cursor->stop; - - return true; -} - -void -source_map_pretty_print(cmark_source_map *self) { - cmark_source_extent *tmp; - - for (tmp = self->head; tmp; tmp = tmp->next) { - printf ("%lu:%lu - %s, %s (%p)\n", tmp->start, tmp->stop, - cmark_node_get_type_string(tmp->node), - cmark_source_extent_get_type_string(tmp), - (void *) tmp->node); - } -} - -bool -source_map_check(cmark_source_map *self, uint64_t total_length) -{ - uint64_t last_stop = 0; - cmark_source_extent *tmp; - - for (tmp = self->head; tmp; tmp = tmp->next) { - if (tmp->start != last_stop) { - return false; - } if (tmp->start == tmp->stop) - return false; - last_stop = tmp->stop; - } - - if (last_stop != total_length) - return false; - - return true; -} - - -uint64_t -cmark_source_extent_get_start(cmark_source_extent *extent) -{ - return extent->start; -} - -uint64_t -cmark_source_extent_get_stop(cmark_source_extent *extent) -{ - return extent->stop; -} - -cmark_node * -cmark_source_extent_get_node(cmark_source_extent *extent) -{ - return extent->node; -} - -cmark_source_extent * -cmark_source_extent_get_next(cmark_source_extent *extent) -{ - return extent->next; -} - -cmark_source_extent * -cmark_source_extent_get_previous(cmark_source_extent *extent) -{ - return extent->prev; -} - -cmark_extent_type -cmark_source_extent_get_type(cmark_source_extent *extent) -{ - return extent->type; -} - -const char * -cmark_source_extent_get_type_string(cmark_source_extent *extent) -{ - switch (extent->type) { - case CMARK_EXTENT_NONE: - return "unknown"; - case CMARK_EXTENT_OPENER: - return "opener"; - case CMARK_EXTENT_CLOSER: - return "closer"; - case CMARK_EXTENT_BLANK: - return "blank"; - case CMARK_EXTENT_CONTENT: - return "content"; - case CMARK_EXTENT_PUNCTUATION: - return "punctuation"; - case CMARK_EXTENT_LINK_DESTINATION: - return "link_destination"; - case CMARK_EXTENT_LINK_TITLE: - return "link_title"; - case CMARK_EXTENT_LINK_LABEL: - return "link_label"; - case CMARK_EXTENT_REFERENCE_DESTINATION: - return "reference_destination"; - case CMARK_EXTENT_REFERENCE_LABEL: - return "reference_label"; - case CMARK_EXTENT_REFERENCE_TITLE: - return "reference_title"; - } - return "unknown"; -} diff --git a/src/source_map.h b/src/source_map.h deleted file mode 100644 index 619a07376a..0000000000 --- a/src/source_map.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef CMARK_SOURCE_MAP_H -#define CMARK_SOURCE_MAP_H - -#include "cmark.h" -#include "config.h" - -typedef struct _cmark_source_map -{ - cmark_source_extent *head; - cmark_source_extent *tail; - cmark_source_extent *cursor; - cmark_source_extent *next_cursor; - uint64_t cursor_offset; - cmark_mem *mem; -} cmark_source_map; - -struct cmark_source_extent -{ - uint64_t start; - uint64_t stop; - struct cmark_source_extent *next; - struct cmark_source_extent *prev; - cmark_node *node; - cmark_extent_type type; -}; - -cmark_source_map * source_map_new (cmark_mem *mem); - -void source_map_free (cmark_source_map *self); - -bool source_map_check (cmark_source_map *self, - uint64_t total_length); - -void source_map_pretty_print (cmark_source_map *self); - -cmark_source_extent * source_map_append_extent(cmark_source_map *self, - uint64_t start, - uint64_t stop, - cmark_node *node, - cmark_extent_type type); - -cmark_source_extent * source_map_insert_extent(cmark_source_map *self, - cmark_source_extent *previous, - uint64_t start, - uint64_t stop, - cmark_node *node, - cmark_extent_type type); - -cmark_source_extent * source_map_free_extent (cmark_source_map *self, - cmark_source_extent *extent); - -cmark_source_extent * source_map_stitch_extent(cmark_source_map *self, - cmark_source_extent *extent, - cmark_node *node, - uint64_t total_length); - -cmark_source_extent * source_map_splice_extent(cmark_source_map *self, - uint64_t start, - uint64_t stop, - cmark_node *node, - cmark_extent_type type); - -bool source_map_start_cursor (cmark_source_map *self, - cmark_source_extent *cursor); - -#endif diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 186b6a8fa6..2a597ab1dd 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -73,20 +73,3 @@ ELSE(PYTHONINTERP_FOUND) ENDIF(PYTHONINTERP_FOUND) -if (PYTHON_BINDING_TESTS) - find_package(PythonInterp 3 REQUIRED) -else(PYTHON_BINDING_TESTS) - find_package(PythonInterp 3) -endif(PYTHON_BINDING_TESTS) - -IF (PYTHONINTERP_FOUND) - add_test(python3_bindings - ${PYTHON_EXECUTABLE} - "${CMAKE_CURRENT_SOURCE_DIR}/test_cmark.py" - "${CMAKE_CURRENT_BINARY_DIR}/../src" - ) -ELSE(PYTHONINTERP_FOUND) - message("\n*** A python 3 interpreter is required to run the python binding tests.\n") - add_test(skipping_python_binding_tests - echo "Skipping python binding tests, because no python 3 interpreter is available.") -ENDIF(PYTHONINTERP_FOUND) diff --git a/test/test_cmark.py b/test/test_cmark.py deleted file mode 100644 index 6726c51211..0000000000 --- a/test/test_cmark.py +++ /dev/null @@ -1,490 +0,0 @@ -# -*- coding: utf8 -*- - -from __future__ import unicode_literals - -import sys -import os -import unittest -import argparse - -here = os.path.abspath(os.path.dirname(__file__)) -sys.path.append(os.path.join(here, os.pardir, 'wrappers')) -from wrapper import * - -class TestHighLevel(unittest.TestCase): - def test_markdown_to_html(self): - self.assertEqual(markdown_to_html('foo'), '

                            foo

                            \n') - - def test_parse_document(self): - doc = parse_document('foo') - self.assertEqual(type(doc), Document) - -class TestParser(unittest.TestCase): - def test_lifecycle(self): - parser = Parser() - del parser - - def test_feed(self): - parser = Parser() - parser.feed('‘') - - def test_finish(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - - def test_source_map(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - source_map = parser.get_source_map() - extents = [e for e in source_map] - self.assertEqual(len(extents), 1) - self.assertEqual(extents[0].type, ExtentType.CONTENT) - self.assertEqual(extents[0].start, 0) - self.assertEqual(extents[0].stop, 3) - - def test_render_html(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - res = doc.to_html() - self.assertEqual(res, '

                            \n') - - def test_render_xml(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - res = doc.to_xml() - self.assertEqual( - res, - '\n' - '\n' - '\n' - ' \n' - ' \n' - ' \n' - '\n') - - def test_render_commonmark(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - res = doc.to_commonmark() - self.assertEqual(res, '‘\n') - - def test_render_man(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - res = doc.to_man() - self.assertEqual( - res, - '.PP\n' - '\[oq]\n') - - def test_render_latex(self): - parser = Parser() - parser.feed('‘') - doc = parser.finish() - res = doc.to_latex() - self.assertEqual(res, '`\n') - -class TestNode(unittest.TestCase): - def test_type(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - self.assertEqual(type(doc), Document) - - def test_first_child(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - child1 = doc.first_child - child2 = doc.first_child - self.assertEqual(child1, child2) - self.assertEqual((child1 != child2), False) - - def test_last_child(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - child1 = doc.first_child - child2 = doc.last_child - self.assertEqual(child1, child2) - self.assertEqual((child1 != child2), False) - - def test_next(self): - parser = Parser() - parser.feed('foo *bar*') - doc = parser.finish() - para = doc.first_child - self.assertEqual(type(para), Paragraph) - text = para.first_child - self.assertEqual(type(text), Text) - emph = text.next - self.assertEqual(type(emph), Emph) - self.assertEqual(para.next, None) - - def test_previous(self): - parser = Parser() - parser.feed('foo *bar*') - doc = parser.finish() - para = doc.first_child - text = para.first_child - emph = text.next - self.assertEqual(emph.previous, text) - self.assertEqual(para.previous, None) - - def test_children(self): - parser = Parser() - parser.feed('foo *bar*') - doc = parser.finish() - para = doc.first_child - children = [c for c in para] - self.assertEqual(len(children), 2) - self.assertEqual(type(children[0]), Text) - self.assertEqual(type(children[1]), Emph) - - def test_new(self): - with self.assertRaises(NotImplementedError): - n = Node() - - def test_unlink(self): - parser = Parser() - parser.feed('foo *bar*') - doc = parser.finish() - para = doc.first_child - para.unlink() - self.assertEqual(doc.to_html(), '') - - def test_append_child(self): - parser = Parser() - parser.feed('') - doc = parser.finish() - doc.append_child(Paragraph()) - self.assertEqual(doc.to_html(), '

                            \n') - with self.assertRaises(LibcmarkError): - doc.append_child(Text(literal='foo')) - - def test_prepend_child(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - doc.prepend_child(Paragraph()) - self.assertEqual(doc.to_html(), '

                            \n

                            foo

                            \n') - with self.assertRaises(LibcmarkError): - doc.prepend_child(Text(literal='foo')) - - def test_insert_before(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - para = doc.first_child - para.insert_before(Paragraph()) - self.assertEqual(doc.to_html(), '

                            \n

                            foo

                            \n') - with self.assertRaises(LibcmarkError): - para.insert_before(Text(literal='foo')) - - def test_insert_after(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - para = doc.first_child - para.insert_after(Paragraph()) - self.assertEqual(doc.to_html(), '

                            foo

                            \n

                            \n') - with self.assertRaises(LibcmarkError): - para.insert_after(Text(literal='foo')) - - def test_consolidate_text_nodes(self): - parser = Parser() - parser.feed('foo **bar*') - doc = parser.finish() - self.assertEqual(len([c for c in doc.first_child]), 3) - doc.consolidate_text_nodes() - self.assertEqual(len([c for c in doc.first_child]), 2) - -class TestLiteral(unittest.TestCase): - def test_text(self): - parser = Parser() - parser.feed('foo') - doc = parser.finish() - para = doc.first_child - self.assertEqual(type(para), Paragraph) - text = para.first_child - self.assertEqual(type(text), Text) - self.assertEqual(text.literal, 'foo') - text.literal = 'bar' - self.assertEqual(text.to_html(), 'bar') - -class TestDocument(unittest.TestCase): - def test_new(self): - doc = Document() - self.assertEqual(doc.to_html(), - '') - -class TestBlockQuote(unittest.TestCase): - def test_new(self): - bq = BlockQuote() - self.assertEqual(bq.to_html(), - '
                            \n
                            \n') - -class TestList(unittest.TestCase): - def test_new(self): - list_ = List() - self.assertEqual(list_.to_html(), - '
                              \n
                            \n') - - def test_type(self): - parser = Parser() - parser.feed('* foo') - doc = parser.finish() - list_ = doc.first_child - self.assertEqual(type(list_), List) - self.assertEqual(list_.type, ListType.BULLET) - list_.type = ListType.ORDERED - self.assertEqual(doc.to_html(), - '
                              \n' - '
                            1. foo
                            2. \n' - '
                            \n') - - def test_start(self): - parser = Parser() - parser.feed('2. foo') - doc = parser.finish() - list_ = doc.first_child - self.assertEqual(type(list_), List) - self.assertEqual(list_.start, 2) - list_.start = 1 - self.assertEqual(doc.to_commonmark(), - '1. foo\n') - with self.assertRaises(LibcmarkError): - list_.start = -1 - list_.type = ListType.BULLET - - def test_delim(self): - parser = Parser() - parser.feed('1. foo') - doc = parser.finish() - list_ = doc.first_child - self.assertEqual(type(list_), List) - self.assertEqual(list_.delim, '.') - list_.delim = ')' - self.assertEqual(doc.to_commonmark(), - '1) foo\n') - - def test_tight(self): - parser = Parser() - parser.feed('* foo\n' - '\n' - '* bar\n') - doc = parser.finish() - list_ = doc.first_child - self.assertEqual(type(list_), List) - self.assertEqual(list_.tight, False) - self.assertEqual(doc.to_commonmark(), - ' - foo\n' - '\n' - ' - bar\n') - - list_.tight = True - self.assertEqual(doc.to_commonmark(), - ' - foo\n' - ' - bar\n') - - with self.assertRaises(LibcmarkError): - list_.tight = 42 - -class TestItem(unittest.TestCase): - def test_new(self): - item = Item() - self.assertEqual(item.to_html(), - '
                          • \n') - -class TestCodeBlock(unittest.TestCase): - def test_new(self): - cb = CodeBlock(literal='foo', fence_info='python') - self.assertEqual(cb.to_html(), - '
                            foo
                            \n') - - def test_fence_info(self): - parser = Parser() - parser.feed('``` markdown\n' - 'hello\n' - '```\n') - doc = parser.finish() - code_block = doc.first_child - self.assertEqual(type(code_block), CodeBlock) - self.assertEqual(code_block.fence_info, 'markdown') - code_block.fence_info = 'python' - self.assertEqual(doc.to_commonmark(), - '``` python\n' - 'hello\n' - '```\n') - -class TestHtmlBlock(unittest.TestCase): - def test_new(self): - hb = HtmlBlock(literal='

                            foo

                            ') - self.assertEqual(hb.to_html(), - '

                            foo

                            \n') - -class TestCustomBlock(unittest.TestCase): - def test_new(self): - cb = CustomBlock() - self.assertEqual(cb.to_html(), - '') - -class TestParagraph(unittest.TestCase): - def test_new(self): - para = Paragraph() - self.assertEqual(para.to_html(), - '

                            \n') - -class TestHeading(unittest.TestCase): - def test_new(self): - heading = Heading(level=3) - self.assertEqual(heading.to_html(), - '

                            \n') - - def test_level(self): - parser = Parser() - parser.feed('# foo') - doc = parser.finish() - heading = doc.first_child - self.assertEqual(type(heading), Heading) - self.assertEqual(heading.level, 1) - heading.level = 3 - self.assertEqual(heading.level, 3) - - self.assertEqual(doc.to_html(), - '

                            foo

                            \n') - - with self.assertRaises(LibcmarkError): - heading.level = 10 - -class TestThematicBreak(unittest.TestCase): - def test_new(self): - tb = ThematicBreak() - self.assertEqual(tb.to_html(), - '
                            \n') - -class TestText(unittest.TestCase): - def test_new(self): - text = Text(literal='foo') - self.assertEqual(text.to_html(), - 'foo') - -class TestSoftBreak(unittest.TestCase): - def test_new(self): - sb = SoftBreak() - self.assertEqual(sb.to_html(), '\n') - self.assertEqual(sb.to_html(options=Parser.OPT_HARDBREAKS), - '
                            \n') - self.assertEqual(sb.to_html(options=Parser.OPT_NOBREAKS), - ' ') - -class TestLineBreak(unittest.TestCase): - def test_new(self): - lb = LineBreak() - self.assertEqual(lb.to_html(), '
                            \n') - -class TestCode(unittest.TestCase): - def test_new(self): - code = Code(literal='bar') - self.assertEqual(code.to_html(), 'bar') - -class TestHtmlInline(unittest.TestCase): - def test_new(self): - hi = HtmlInline(literal='baz') - self.assertEqual(hi.to_html(), 'baz') - -class TestCustomInline(unittest.TestCase): - def test_new(self): - ci = CustomInline() - self.assertEqual(ci.to_html(), - '') - -class TestEmph(unittest.TestCase): - def test_new(self): - emph = Emph() - self.assertEqual(emph.to_html(), - '') - -class TestStrong(unittest.TestCase): - def test_new(self): - strong = Strong() - self.assertEqual(strong.to_html(), - '') - -class TestLink(unittest.TestCase): - def test_new(self): - link = Link(url='http://foo.com', title='foo') - self.assertEqual(link.to_html(), - '') - - def test_url(self): - parser = Parser() - parser.feed('\n') - doc = parser.finish() - para = doc.first_child - self.assertEqual(type(para), Paragraph) - link = para.first_child - self.assertEqual(type(link), Link) - self.assertEqual(link.url, 'http://foo.com') - link.url = 'http://bar.net' - # Yeah that's crappy behaviour but not our problem here - self.assertEqual(doc.to_commonmark(), - '[http://foo.com](http://bar.net)\n') - - def test_title(self): - parser = Parser() - parser.feed('\n') - doc = parser.finish() - para = doc.first_child - self.assertEqual(type(para), Paragraph) - link = para.first_child - self.assertEqual(type(link), Link) - self.assertEqual(link.title, '') - link.title = 'foo' - self.assertEqual(doc.to_html(), - '

                            http://foo.com

                            \n') - -class TestImage(unittest.TestCase): - def test_new(self): - image = Image(url='http://foo.com', title='foo') - self.assertEqual(image.to_html(), - '') - - def test_url(self): - parser = Parser() - parser.feed('![image](image.com)\n') - doc = parser.finish() - para = doc.first_child - self.assertEqual(type(para), Paragraph) - link = para.first_child - self.assertEqual(type(link), Image) - self.assertEqual(link.url, 'image.com') - link.url = 'http://bar.net' - self.assertEqual(doc.to_commonmark(), - '![image](http://bar.net)\n') - - def test_title(self): - parser = Parser() - parser.feed('![image](image.com "ze image")\n') - doc = parser.finish() - para = doc.first_child - self.assertEqual(type(para), Paragraph) - image = para.first_child - self.assertEqual(type(image), Image) - self.assertEqual(image.title, 'ze image') - image.title = 'foo' - self.assertEqual(doc.to_html(), - '

                            image

                            \n') - -if __name__=='__main__': - parser = argparse.ArgumentParser() - parser.add_argument('libdir') - args = parser.parse_known_args() - conf.set_library_path(args[0].libdir) - unittest.main(argv=[sys.argv[0]] + args[1]) diff --git a/wrappers/wrapper.py b/wrappers/wrapper.py old mode 100644 new mode 100755 index 7ef032a0b3..98e7f2b469 --- a/wrappers/wrapper.py +++ b/wrappers/wrapper.py @@ -1,921 +1,37 @@ -from __future__ import unicode_literals +#!/usr/bin/env python -from ctypes import * +# Example for using the shared library from python +# Will work with either python 2 or python 3 +# Requires cmark library to be installed + +from ctypes import CDLL, c_char_p, c_long import sys import platform -c_object_p = POINTER(c_void_p) - sysname = platform.system() -if sysname == 'Windows': - libc = CDLL('msvcrt.dll') -else: - libc = CDLL('libc.so.6') - -if sys.version_info[0] > 2: - def bytes_and_length(text): - if type(text) == str: - text = text.encode("utf8") - return text, len(text) +if sysname == 'Darwin': + libname = "libcmark.dylib" +elif sysname == 'Windows': + libname = "cmark.dll" else: - def bytes_and_length(text): - if type(text) == unicode: - text = text.encode("utf8") - return text, len(text) - -def unicode_from_char_p(res, fn, args): - ret = res.decode("utf8") - return ret - -class owned_char_p(c_void_p): - def __del__(self): - conf.lib.cmark_default_mem_free(self.value) - -def unicode_from_owned_char_p(res, fn, args): - ret = cast(res, c_char_p).value.decode("utf8") - return ret - -def boolean_from_result(res, fn, args): - return bool(res) - -def delim_from_int(res, fn, args): - if res == 0: - return '' - elif res == 1: - return '.' - elif res == 2: - return ')' - -class BaseEnumeration(object): - def __init__(self, value): - if value >= len(self.__class__._kinds): - self.__class__._kinds += [None] * (value - len(self.__class__._kinds) + 1) - if self.__class__._kinds[value] is not None: - raise ValueError('{0} value {1} already loaded'.format( - str(self.__class__), value)) - self.value = value - self.__class__._kinds[value] = self - self.__class__._name_map = None - - def from_param(self): - return self.value - - @classmethod - def from_id(cls, id, fn, args): - if id >= len(cls._kinds) or cls._kinds[id] is None: - raise ValueError('Unknown template argument kind %d' % id) - return cls._kinds[id] - - @property - def name(self): - """Get the enumeration name of this cursor kind.""" - if self._name_map is None: - self._name_map = {} - for key, value in self.__class__.__dict__.items(): - if isinstance(value, self.__class__): - self._name_map[value] = key - return str(self._name_map[self]) - - def __repr__(self): - return '%s.%s' % (self.__class__.__name__, self.name,) - -class Parser(object): - OPT_DEFAULT = 0 - OPT_SOURCEPOS = 1 << 1 - OPT_HARDBREAKS = 1 << 2 - OPT_SAFE = 1 << 3 - OPT_NOBREAKS = 1 << 4 - OPT_NORMALIZE = 1 << 8 - OPT_VALIDATE_UTF8 = 1 << 9 - OPT_SMART = 1 << 10 - - def __init__(self, options=0): - self._parser = conf.lib.cmark_parser_new(options) - - def __del__(self): - conf.lib.cmark_parser_free(self._parser) - - def feed(self, text): - conf.lib.cmark_parser_feed(self._parser, *bytes_and_length(text)) - - def finish(self): - return conf.lib.cmark_parser_finish(self._parser) - - def get_source_map(self): - return conf.lib.cmark_parser_get_first_source_extent(self._parser) - -class LibcmarkError(Exception): - def __init__(self, message): - self.m = message - - def __str__(self): - return self.m - -class NodeType(BaseEnumeration): - _kinds = [] - _name_map = None - -NodeType.NONE = NodeType(0) -NodeType.DOCUMENT = NodeType(1) -NodeType.BLOCK_QUOTE = NodeType(2) -NodeType.LIST = NodeType(3) -NodeType.ITEM = NodeType(4) -NodeType.CODE_BLOCK = NodeType(5) -NodeType.HTML_BLOCK = NodeType(6) -NodeType.CUSTOM_BLOCK = NodeType(7) -NodeType.PARAGRAPH = NodeType(8) -NodeType.HEADING = NodeType(9) -NodeType.THEMATIC_BREAK = NodeType(10) -NodeType.TEXT = NodeType(11) -NodeType.SOFTBREAK = NodeType(12) -NodeType.LINEBREAK = NodeType(13) -NodeType.CODE = NodeType(14) -NodeType.HTML_INLINE = NodeType(15) -NodeType.CUSTOM_INLINE = NodeType(16) -NodeType.EMPH = NodeType(17) -NodeType.STRONG = NodeType(18) -NodeType.LINK = NodeType(19) -NodeType.IMAGE = NodeType(20) - -class ListType(BaseEnumeration): - _kinds = [] - _name_map = None - -ListType.BULLET = ListType(1) -ListType.ORDERED = ListType(2) - -class Node(object): - __subclass_map = {} - - def __init__(self): - self._owned = False - raise NotImplementedError - - @staticmethod - def from_result(res, fn=None, args=None): - try: - res.contents - except ValueError: - return None - - cls = Node.get_subclass_map()[conf.lib.cmark_node_get_type(res)] - - ret = cls.__new__(cls) - ret._node = res - ret._owned = False - return ret - - @classmethod - def get_subclass_map(cls): - if cls.__subclass_map: - return cls.__subclass_map - - res = {c._node_type: c for c in cls.__subclasses__()} - - for c in cls.__subclasses__(): - res.update(c.get_subclass_map()) - - return res - - def unlink(self): - conf.lib.cmark_node_unlink(self._node) - self._owned = True - - def append_child(self, child): - res = conf.lib.cmark_node_append_child(self._node, child._node) - if not res: - raise LibcmarkError("Can't append child %s to node %s" % (str(child), str(self))) - child._owned = False - - def prepend_child(self, child): - res = conf.lib.cmark_node_prepend_child(self._node, child._node) - if not res: - raise LibcmarkError("Can't prepend child %s to node %s" % (str(child), str(self))) - child._owned = False - - def insert_before(self, sibling): - res = conf.lib.cmark_node_insert_before(self._node, sibling._node) - if not res: - raise LibcmarkError("Can't insert sibling %s before node %s" % (str(sibling), str(self))) - sibling._owned = False - - def insert_after(self, sibling): - res = conf.lib.cmark_node_insert_after(self._node, sibling._node) - if not res: - raise LibcmarkError("Can't insert sibling %s after node %s" % (str(sibling), str(self))) - sibling._owned = False - - def consolidate_text_nodes(self): - conf.lib.cmark_consolidate_text_nodes(self._node) - - def to_html(self, options=Parser.OPT_DEFAULT): - return conf.lib.cmark_render_html(self._node, options) - - def to_xml(self, options=Parser.OPT_DEFAULT): - return conf.lib.cmark_render_xml(self._node, options) - - def to_commonmark(self, options=Parser.OPT_DEFAULT, width=0): - return conf.lib.cmark_render_commonmark(self._node, options, width) - - def to_man(self, options=Parser.OPT_DEFAULT, width=0): - return conf.lib.cmark_render_man(self._node, options, width) - - def to_latex(self, options=Parser.OPT_DEFAULT, width=0): - return conf.lib.cmark_render_latex(self._node, options, width) - - @property - def first_child(self): - return conf.lib.cmark_node_first_child(self._node) - - @property - def last_child(self): - return conf.lib.cmark_node_last_child(self._node) - - @property - def next(self): - return conf.lib.cmark_node_next(self._node) - - @property - def previous(self): - return conf.lib.cmark_node_previous(self._node) - - def __eq__(self, other): - return self._node.contents.value == other._node.contents.value - - def __ne__(self, other): - return self._node.contents.value != other._node.contents.value - - def __del__(self): - if self._owned: - conf.lib.cmark_node_free(self._node) - - def __iter__(self): - cur = self.first_child - while (cur): - yield cur - cur = cur.next - -class Literal(Node): - _node_type = NodeType.NONE - - @property - def literal(self): - return conf.lib.cmark_node_get_literal(self._node) - - @literal.setter - def literal(self, value): - bytes_, _ = bytes_and_length(value) - if not conf.lib.cmark_node_set_literal(self._node, bytes_): - raise LibcmarkError("Invalid literal %s\n" % str(value)) - -class Document(Node): - _node_type = NodeType.DOCUMENT - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - -class BlockQuote(Node): - _node_type = NodeType.BLOCK_QUOTE - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - -class List(Node): - _node_type = NodeType.LIST - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - - @property - def type(self): - return conf.lib.cmark_node_get_list_type(self._node) - - @type.setter - def type(self, type_): - if not conf.lib.cmark_node_set_list_type(self._node, type_.value): - raise LibcmarkError("Invalid type %s" % str(type_)) - - @property - def delim(self): - return conf.lib.cmark_node_get_list_delim(self._node) - - @delim.setter - def delim(self, value): - if value == '.': - delim_type = 1 - elif value == ')': - delim_type = 2 - else: - raise LibcmarkError('Invalid delim type %s' % str(value)) - - conf.lib.cmark_node_set_list_delim(self._node, delim_type) - - @property - def start(self): - return conf.lib.cmark_node_get_list_start(self._node) - - @start.setter - def start(self, value): - if not conf.lib.cmark_node_set_list_start(self._node, value): - raise LibcmarkError("Invalid list start %s\n" % str(value)) - - @property - def tight(self): - return conf.lib.cmark_node_get_list_tight(self._node) - - @tight.setter - def tight(self, value): - if value is True: - tightness = 1 - elif value is False: - tightness = 0 - else: - raise LibcmarkError("Invalid list tightness %s\n" % str(value)) - if not conf.lib.cmark_node_set_list_tight(self._node, tightness): - raise LibcmarkError("Invalid list tightness %s\n" % str(value)) - -class Item(Node): - _node_type = NodeType.ITEM - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - -class CodeBlock(Literal): - _node_type = NodeType.CODE_BLOCK - - def __init__(self, literal='', fence_info=''): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - self.literal = literal - self.fence_info = fence_info - - @property - def fence_info(self): - return conf.lib.cmark_node_get_fence_info(self._node) - - @fence_info.setter - def fence_info(self, value): - bytes_, _ = bytes_and_length(value) - if not conf.lib.cmark_node_set_fence_info(self._node, bytes_): - raise LibcmarkError("Invalid fence info %s\n" % str(value)) - -class HtmlBlock(Literal): - _node_type = NodeType.HTML_BLOCK - - def __init__(self, literal=''): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - self.literal = literal - - -class CustomBlock(Node): - _node_type = NodeType.CUSTOM_BLOCK - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - - -class Paragraph(Node): - _node_type = NodeType.PARAGRAPH - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - -class Heading(Node): - _node_type = NodeType.HEADING - - def __init__(self, level=1): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self.level = level - self._owned = True - - @property - def level(self): - return int(conf.lib.cmark_node_get_heading_level(self._node)) - - @level.setter - def level(self, value): - res = conf.lib.cmark_node_set_heading_level(self._node, value) - if (res == 0): - raise LibcmarkError("Invalid heading level %s" % str(value)) - -class ThematicBreak(Node): - _node_type = NodeType.THEMATIC_BREAK - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - - -class Text(Literal): - _node_type = NodeType.TEXT - - def __init__(self, literal=''): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - self.literal = literal - - -class SoftBreak(Node): - _node_type = NodeType.SOFTBREAK - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - - -class LineBreak(Node): - _node_type = NodeType.LINEBREAK - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - - -class Code(Literal): - _node_type = NodeType.CODE - - def __init__(self, literal=''): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - self.literal = literal - - -class HtmlInline(Literal): - _node_type = NodeType.HTML_INLINE - - def __init__(self, literal=''): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - self.literal = literal - - -class CustomInline(Node): - _node_type = NodeType.CUSTOM_INLINE - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - -class Emph(Node): - _node_type = NodeType.EMPH - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - -class Strong(Node): - _node_type = NodeType.STRONG - - def __init__(self): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - - -class Link(Node): - _node_type = NodeType.LINK - - def __init__(self, url='', title=''): - self._node = conf.lib.cmark_node_new(self.__class__._node_type.value) - self._owned = True - self.url = url - self.title = title - - @property - def url(self): - return conf.lib.cmark_node_get_url(self._node) - - @url.setter - def url(self, value): - bytes_, _ = bytes_and_length(value) - if not conf.lib.cmark_node_set_url(self._node, bytes_): - raise LibcmarkError("Invalid url %s\n" % str(value)) - - @property - def title(self): - return conf.lib.cmark_node_get_title(self._node) - - @title.setter - def title(self, value): - bytes_, _ = bytes_and_length(value) - if not conf.lib.cmark_node_set_title(self._node, bytes_): - raise LibcmarkError("Invalid title %s\n" % str(value)) - -class Image(Link): - _node_type = NodeType.IMAGE - -class ExtentType(BaseEnumeration): - _kinds = [] - _name_map = None - -ExtentType.NONE = ExtentType(0) -ExtentType.OPENER = ExtentType(1) -ExtentType.CLOSER = ExtentType(2) -ExtentType.BLANK = ExtentType(3) -ExtentType.CONTENT = ExtentType(4) -ExtentType.PUNCTUATION = ExtentType(5) -ExtentType.LINK_DESTINATION = ExtentType(6) -ExtentType.LINK_TITLE = ExtentType(7) -ExtentType.LINK_LABEL = ExtentType(8) -ExtentType.REFERENCE_DESTINATION = ExtentType(9) -ExtentType.REFERENCE_LABEL = ExtentType(10) -ExtentType.REFERENCE_TITLE = ExtentType(11) - -class Extent(object): - @staticmethod - def from_result(res, fn=None, args=None): - ret = Extent() - ret._extent = res - return ret - - @property - def start(self): - return conf.lib.cmark_source_extent_get_start(self._extent) - - @property - def stop(self): - return conf.lib.cmark_source_extent_get_stop(self._extent) - - @property - def type(self): - return conf.lib.cmark_source_extent_get_type(self._extent) - - @property - def node(self): - return conf.lib.cmark_source_extent_get_node(self._extent) - -class SourceMap(object): - @staticmethod - def from_result(res, fn, args): - ret = SourceMap() - ret._root = res - return ret - - def __iter__(self): - cur = self._root - while (cur): - yield Extent.from_result(cur) - cur = conf.lib.cmark_source_extent_get_next(cur) - -def markdown_to_html(text, options=Parser.OPT_DEFAULT): - bytes_, length = bytes_and_length(text) - return conf.lib.cmark_markdown_to_html(bytes_, length, options) - -def parse_document(text, options=Parser.OPT_DEFAULT): - bytes_, length = bytes_and_length(text) - return conf.lib.cmark_parse_document(bytes_, length, options) - -functionList = [ - ("cmark_default_mem_free", - [c_void_p]), - ("cmark_markdown_to_html", - [c_char_p, c_long, c_int], - owned_char_p, - unicode_from_owned_char_p), - ("cmark_parse_document", - [c_char_p, c_long, c_int], - c_object_p, - Node.from_result), - ("cmark_parser_new", - [c_int], - c_object_p), - ("cmark_parser_free", - [c_object_p]), - ("cmark_parser_feed", - [c_object_p, c_char_p, c_long]), - ("cmark_parser_finish", - [c_object_p], - c_object_p, - Node.from_result), - ("cmark_parser_get_first_source_extent", - [c_object_p], - c_object_p, - SourceMap.from_result), - ("cmark_source_extent_get_next", - [c_object_p], - c_object_p), - ("cmark_source_extent_get_start", - [c_object_p], - c_ulonglong), - ("cmark_source_extent_get_stop", - [c_object_p], - c_ulonglong), - ("cmark_source_extent_get_type", - [c_object_p], - c_int, - ExtentType.from_id), - ("cmark_source_extent_get_node", - [c_object_p], - c_object_p, - Node.from_result), - ("cmark_render_html", - [c_object_p, c_int], - owned_char_p, - unicode_from_owned_char_p), - ("cmark_render_xml", - [c_object_p, c_int], - owned_char_p, - unicode_from_owned_char_p), - ("cmark_render_commonmark", - [c_object_p, c_int, c_int], - owned_char_p, - unicode_from_owned_char_p), - ("cmark_render_man", - [c_object_p, c_int, c_int], - owned_char_p, - unicode_from_owned_char_p), - ("cmark_render_latex", - [c_object_p, c_int, c_int], - owned_char_p, - unicode_from_owned_char_p), - ("cmark_node_new", - [c_int], - c_object_p), - ("cmark_node_free", - [c_object_p]), - ("cmark_node_get_type", - [c_object_p], - c_int, - NodeType.from_id), - ("cmark_node_first_child", - [c_object_p], - c_object_p, - Node.from_result), - ("cmark_node_last_child", - [c_object_p], - c_object_p, - Node.from_result), - ("cmark_node_next", - [c_object_p], - c_object_p, - Node.from_result), - ("cmark_node_previous", - [c_object_p], - c_object_p, - Node.from_result), - ("cmark_node_unlink", - [c_object_p]), - ("cmark_node_append_child", - [c_object_p, c_object_p], - c_int, - boolean_from_result), - ("cmark_node_prepend_child", - [c_object_p, c_object_p], - c_int, - boolean_from_result), - ("cmark_node_insert_before", - [c_object_p, c_object_p], - c_int, - boolean_from_result), - ("cmark_node_insert_after", - [c_object_p, c_object_p], - c_int, - boolean_from_result), - ("cmark_consolidate_text_nodes", - [c_object_p]), - ("cmark_node_get_literal", - [c_object_p], - c_char_p, - unicode_from_char_p), - ("cmark_node_set_literal", - [c_object_p, c_char_p], - c_int, - boolean_from_result), - ("cmark_node_get_heading_level", - [c_object_p], - c_int), - ("cmark_node_set_heading_level", - [c_object_p, c_int], - c_int, - boolean_from_result), - ("cmark_node_get_list_type", - [c_object_p], - c_int, - ListType.from_id), - ("cmark_node_set_list_type", - [c_object_p], - c_int, - boolean_from_result), - ("cmark_node_get_list_delim", - [c_object_p], - c_int, - delim_from_int), - ("cmark_node_set_list_delim", - [c_object_p, c_int], - c_int), - ("cmark_node_get_list_start", - [c_object_p], - c_int), - ("cmark_node_set_list_start", - [c_object_p, c_int], - c_int, - boolean_from_result), - ("cmark_node_get_list_tight", - [c_object_p], - c_int, - boolean_from_result), - ("cmark_node_set_list_tight", - [c_object_p, c_int], - c_int, - boolean_from_result), - ("cmark_node_get_fence_info", - [c_object_p], - c_char_p, - unicode_from_char_p), - ("cmark_node_set_fence_info", - [c_object_p, c_char_p], - c_int, - boolean_from_result), - ("cmark_node_get_url", - [c_object_p], - c_char_p, - unicode_from_char_p), - ("cmark_node_set_url", - [c_object_p, c_char_p], - c_int, - boolean_from_result), - ("cmark_node_get_title", - [c_object_p], - c_char_p, - unicode_from_char_p), - ("cmark_node_set_title", - [c_object_p, c_char_p], - c_int, - boolean_from_result), -] - -# Taken from clang.cindex -def register_function(lib, item, ignore_errors): - # A function may not exist, if these bindings are used with an older or - # incompatible version of libcmark.so. - try: - func = getattr(lib, item[0]) - except AttributeError as e: - msg = str(e) + ". Please ensure that your python bindings are "\ - "compatible with your libcmark version." - if ignore_errors: - return - raise LibcmarkError(msg) - - if len(item) >= 2: - func.argtypes = item[1] - - if len(item) >= 3: - func.restype = item[2] - - if len(item) == 4: - func.errcheck = item[3] - -def register_functions(lib, ignore_errors): - """Register function prototypes with a libccmark library instance. - - This must be called as part of library instantiation so Python knows how - to call out to the shared library. - """ - - def register(item): - return register_function(lib, item, ignore_errors) - - for f in functionList: - register(f) - -class Config: - library_path = None - library_file = None - compatibility_check = True - loaded = False - lib_ = None - - @staticmethod - def set_library_path(path): - """Set the path in which to search for libcmark""" - if Config.loaded: - raise Exception("library path must be set before before using " \ - "any other functionalities in libcmark.") - - Config.library_path = path - - @staticmethod - def set_library_file(filename): - """Set the exact location of libcmark""" - if Config.loaded: - raise Exception("library file must be set before before using " \ - "any other functionalities in libcmark.") - - Config.library_file = filename - - @staticmethod - def set_compatibility_check(check_status): - """ Perform compatibility check when loading libcmark - - The python bindings are only tested and evaluated with the version of - libcmark they are provided with. To ensure correct behavior a (limited) - compatibility check is performed when loading the bindings. This check - will throw an exception, as soon as it fails. - - In case these bindings are used with an older version of libcmark, parts - that have been stable between releases may still work. Users of the - python bindings can disable the compatibility check. This will cause - the python bindings to load, even though they are written for a newer - version of libcmark. Failures now arise if unsupported or incompatible - features are accessed. The user is required to test themselves if the - features they are using are available and compatible between different - libcmark versions. - """ - if Config.loaded: - raise Exception("compatibility_check must be set before before " \ - "using any other functionalities in libcmark.") - - Config.compatibility_check = check_status - - @property - def lib(self): - if self.lib_: - return self.lib_ - lib = self.get_cmark_library() - register_functions(lib, not Config.compatibility_check) - Config.loaded = True - self.lib_ = lib - return lib - - def get_filename(self): - if Config.library_file: - return Config.library_file - - import platform - name = platform.system() - - if name == 'Darwin': - file = 'libcmark.dylib' - elif name == 'Windows': - file = 'cmark.dll' - else: - file = 'libcmark.so' - - if Config.library_path: - file = Config.library_path + '/' + file - - return file - - def get_cmark_library(self): - try: - library = cdll.LoadLibrary(self.get_filename()) - except OSError as e: - msg = str(e) + "(%s). To provide a path to libcmark use " \ - "Config.set_library_path() or " \ - "Config.set_library_file()." % self.get_filename() - raise LibcmarkError(msg) - - return library - - def function_exists(self, name): - try: - getattr(self.lib, name) - except AttributeError: - return False - - return True - -conf = Config() - -__alla__ = [ - 'Parser', - 'LibcmarkError', - 'NodeType', - 'ListType', - 'Node', - 'Document', - 'BlockQuote', - 'List', - 'Item', - 'CodeBlock', - 'HtmlBlock', - 'CustomBlock', - 'Paragraph', - 'Heading', - 'ThematicBreak', - 'Text', - 'SoftBreak', - 'LineBreak', - 'Code', - 'HtmlInline', - 'CustomInline', - 'Emph', - 'Strong', - 'Link', - 'Image', - 'ExtentType', - 'Extent', - 'SourceMap', - 'markdown_to_html', - 'parse_document', - 'Config', - 'conf' -] + libname = "libcmark.so" +cmark = CDLL(libname) + +markdown = cmark.cmark_markdown_to_html +markdown.restype = c_char_p +markdown.argtypes = [c_char_p, c_long, c_long] + +opts = 0 # defaults + +def md2html(text): + if sys.version_info >= (3,0): + textbytes = text.encode('utf-8') + textlen = len(textbytes) + return markdown(textbytes, textlen, opts).decode('utf-8') + else: + textbytes = text + textlen = len(text) + return markdown(textbytes, textlen, opts) + +sys.stdout.write(md2html(sys.stdin.read())) -- cgit 0.0.5-2-1-g0f52 From 39c69d0529a8578e3f30e4409d7e571a7730f3f3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 22:39:55 -0800 Subject: Added regression test for #177. --- test/regression.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/regression.txt b/test/regression.txt index d5a1e5d2f5..d2d9335f0e 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -66,3 +66,11 @@ hi

                            hi

                            ```````````````````````````````` +Issue #177 - incorrect emphasis parsing + +```````````````````````````````` example +a***b* c* +. +

                            a*b c

                            +```````````````````````````````` + -- cgit 0.0.5-2-1-g0f52 From 04539263eaeb06629a49fc5d531166e84162dd84 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 23:16:39 -0800 Subject: Slight improvement of clarity of logic in emph matching. --- src/inlines.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 014ab1e963..6a27aea80f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -538,15 +538,16 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { odd_match = false; while (opener != NULL && opener != stack_bottom && opener != openers_bottom[closer->delim_char]) { - // interior closer of size 2 can't match opener of size 1 - // or of size 1 can't match 2 - odd_match = (closer->can_open || opener->can_close) && - ((opener->length + closer->length) % 3 == 0); - if (opener->delim_char == closer->delim_char && opener->can_open && - !odd_match) { - opener_found = true; - break; - } + if (opener->can_open && opener->delim_char == closer->delim_char) { + // interior closer of size 2 can't match opener of size 1 + // or of size 1 can't match 2 + odd_match = (closer->can_open || opener->can_close) && + ((opener->length + closer->length) % 3 == 0); + if (!odd_match) { + opener_found = true; + break; + } + } opener = opener->previous; } old_closer = closer; -- cgit 0.0.5-2-1-g0f52 From b5c4a228252d8351ca42c0ae3bca626dabfff66d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 23:27:38 -0800 Subject: Added pathological test for #178 (quadratic). The new "multiple of 3" rule defeats one of our optimizations. --- test/pathological_tests.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index eaf0a7c5fa..77e4165c65 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -38,6 +38,9 @@ pathological = { "mismatched openers and closers": (("*a_ " * 50000), re.compile("([*]a[_] ){49999}[*]a_")), + "openers and closers multiple of 3": + (("a**b" + ("c* " * 50000)), + re.compile("a[*][*]b(c[*] ){49999}c[*]")), "link openers and emph closers": (("[ a_" * 50000), re.compile("(\[ a_){50000}")), -- cgit 0.0.5-2-1-g0f52 From a8d5bd452ae8a7b2d3285a85a9117f95ed1732cc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 3 Jan 2017 23:28:21 -0800 Subject: Fixes #178, quadratic parsing bug. --- src/inlines.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 6a27aea80f..c8bdebceed 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -516,13 +516,16 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { delimiter *old_closer; bool opener_found; bool odd_match; - delimiter *openers_bottom[128]; + delimiter *openers_bottom[3][128]; + int i; // initialize openers_bottom: - openers_bottom['*'] = stack_bottom; - openers_bottom['_'] = stack_bottom; - openers_bottom['\''] = stack_bottom; - openers_bottom['"'] = stack_bottom; + for (i=0; i < 3; i++) { + openers_bottom[i]['*'] = stack_bottom; + openers_bottom[i]['_'] = stack_bottom; + openers_bottom[i]['\''] = stack_bottom; + openers_bottom[i]['"'] = stack_bottom; + } // move back to first relevant delim. while (closer != NULL && closer->previous != stack_bottom) { @@ -537,7 +540,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { opener_found = false; odd_match = false; while (opener != NULL && opener != stack_bottom && - opener != openers_bottom[closer->delim_char]) { + opener != openers_bottom[closer->length % 3][closer->delim_char]) { if (opener->can_open && opener->delim_char == closer->delim_char) { // interior closer of size 2 can't match opener of size 1 // or of size 1 can't match 2 @@ -574,13 +577,10 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { } closer = closer->next; } - if (!opener_found && !odd_match) { + if (!opener_found) { // set lower bound for future searches for openers - // (we don't do this with 'odd_match' set because - // a ** that didn't match an earlier * might turn into - // an opener, and the * might be matched by something - // else. - openers_bottom[old_closer->delim_char] = old_closer->previous; + openers_bottom[old_closer->length % 3][old_closer->delim_char] = + old_closer->previous; if (!old_closer->can_open) { // we can remove a closer that can't be an // opener, once we've seen there's no -- cgit 0.0.5-2-1-g0f52 From 64a4c3767cf5a395bfe5157dd4bc144caebf270f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 5 Jan 2017 09:58:56 +0100 Subject: Cleaned up setting of lower bounds for openers. We now use a much smaller array. --- src/inlines.c | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index c8bdebceed..a855c5a7e3 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -515,17 +515,10 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { delimiter *opener; delimiter *old_closer; bool opener_found; - bool odd_match; - delimiter *openers_bottom[3][128]; - int i; - - // initialize openers_bottom: - for (i=0; i < 3; i++) { - openers_bottom[i]['*'] = stack_bottom; - openers_bottom[i]['_'] = stack_bottom; - openers_bottom[i]['\''] = stack_bottom; - openers_bottom[i]['"'] = stack_bottom; - } + int openers_bottom_index; + delimiter *openers_bottom[6] = { stack_bottom, stack_bottom, + stack_bottom, stack_bottom, + stack_bottom, stack_bottom }; // move back to first relevant delim. while (closer != NULL && closer->previous != stack_bottom) { @@ -535,18 +528,33 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // now move forward, looking for closers, and handling each while (closer != NULL) { if (closer->can_close) { + switch (closer->delim_char) { + case '"': + openers_bottom_index = 0; + break; + case '\'': + openers_bottom_index = 1; + break; + case '_': + openers_bottom_index = 2; + break; + case '*': + openers_bottom_index = 3 + (closer->length % 3); + break; + default: + assert(false); + } + // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; - odd_match = false; - while (opener != NULL && opener != stack_bottom && - opener != openers_bottom[closer->length % 3][closer->delim_char]) { + while (opener != NULL && + opener != openers_bottom[openers_bottom_index]) { if (opener->can_open && opener->delim_char == closer->delim_char) { // interior closer of size 2 can't match opener of size 1 // or of size 1 can't match 2 - odd_match = (closer->can_open || opener->can_close) && - ((opener->length + closer->length) % 3 == 0); - if (!odd_match) { + if (!(closer->can_open || opener->can_close) || + ((opener->length + closer->length) % 3) != 0) { opener_found = true; break; } @@ -579,8 +587,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { } if (!opener_found) { // set lower bound for future searches for openers - openers_bottom[old_closer->length % 3][old_closer->delim_char] = - old_closer->previous; + openers_bottom[openers_bottom_index] = old_closer->previous; if (!old_closer->can_open) { // we can remove a closer that can't be an // opener, once we've seen there's no -- cgit 0.0.5-2-1-g0f52 From 96a40c97cedeb51ab70cedd6b863388610338862 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 5 Jan 2017 11:45:37 +0100 Subject: Added a test for NULL when freeing subj->last_delim. Noticed the need for this through fuzzing. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index a855c5a7e3..7263c05c7f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -600,7 +600,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { } } // free all delimiters in list until stack_bottom: - while (subj->last_delim != stack_bottom) { + while (subj->last_delim != NULL && subj->last_delim != stack_bottom) { remove_delimiter(subj, subj->last_delim); } } -- cgit 0.0.5-2-1-g0f52 From c786cacc291418d68b52636f951af778fefa214f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 5 Jan 2017 13:41:39 +0100 Subject: Automatic code reformatting. --- src/inlines.c | 96 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 7263c05c7f..92e79c7875 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -159,7 +159,7 @@ static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, e->refmap = refmap; e->last_delim = NULL; e->last_bracket = NULL; - for (i=0; i <= MAXBACKTICKS; i++) { + for (i = 0; i <= MAXBACKTICKS; i++) { e->backticks[i] = 0; } e->scanned_for_backticks = false; @@ -516,9 +516,8 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { delimiter *old_closer; bool opener_found; int openers_bottom_index; - delimiter *openers_bottom[6] = { stack_bottom, stack_bottom, - stack_bottom, stack_bottom, - stack_bottom, stack_bottom }; + delimiter *openers_bottom[6] = {stack_bottom, stack_bottom, stack_bottom, + stack_bottom, stack_bottom, stack_bottom}; // move back to first relevant delim. while (closer != NULL && closer->previous != stack_bottom) { @@ -528,37 +527,36 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // now move forward, looking for closers, and handling each while (closer != NULL) { if (closer->can_close) { - switch (closer->delim_char) { - case '"': - openers_bottom_index = 0; - break; - case '\'': - openers_bottom_index = 1; - break; - case '_': - openers_bottom_index = 2; - break; - case '*': - openers_bottom_index = 3 + (closer->length % 3); - break; - default: - assert(false); + switch (closer->delim_char) { + case '"': + openers_bottom_index = 0; + break; + case '\'': + openers_bottom_index = 1; + break; + case '_': + openers_bottom_index = 2; + break; + case '*': + openers_bottom_index = 3 + (closer->length % 3); + break; + default: + assert(false); } // Now look backwards for first matching opener: opener = closer->previous; opener_found = false; - while (opener != NULL && - opener != openers_bottom[openers_bottom_index]) { - if (opener->can_open && opener->delim_char == closer->delim_char) { + while (opener != NULL && opener != openers_bottom[openers_bottom_index]) { + if (opener->can_open && opener->delim_char == closer->delim_char) { // interior closer of size 2 can't match opener of size 1 // or of size 1 can't match 2 if (!(closer->can_open || opener->can_close) || - ((opener->length + closer->length) % 3) != 0) { + ((opener->length + closer->length) % 3) != 0) { opener_found = true; break; } - } + } opener = opener->previous; } old_closer = closer; @@ -852,11 +850,13 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { if (input->data[i] == '\\') i += 2; else if (input->data[i] == '(') { - ++nb_p; ++i; + ++nb_p; + ++i; } else if (input->data[i] == ')') { if (nb_p == 0) break; - --nb_p; ++i; + --nb_p; + ++i; } else if (cmark_isspace(input->data[i])) break; else @@ -1040,31 +1040,31 @@ static cmark_node *handle_newline(subject *subj) { static bufsize_t subject_find_special_char(subject *subj, int options) { // "\r\n\\`&_*[]pos + 1; -- cgit 0.0.5-2-1-g0f52 From 7031efcb5fc577dc70f3188ce1c46bf894b1e48a Mon Sep 17 00:00:00 2001 From: "Azamat H. Hackimov" Date: Thu, 5 Jan 2017 00:38:28 +0500 Subject: Added support for built-in ${LIB_SUFFIX} feature Replaced ${LIB_INSTALL_DIR} option with built-in ${LIB_SUFFIX} for installing for 32/64-bit systems. Normally, CMake will set ${LIB_SUFFIX} automatically for required enviroment. If you have any issues with it, you can override this option with -DLIB_SUFFIX=64 or -DLIB_SUFFIX="" during configuration. --- src/CMakeLists.txt | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0cb653014f..2a4dc9f29c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -49,15 +49,6 @@ set(PROGRAM_SOURCES main.c ) -# We make LIB_INSTALL_DIR configurable rather than -# hard-coding lib, because on some OSes different locations -# are used for different architectures (e.g. /usr/lib64 on -# 64-bit Fedora). -if(NOT LIB_INSTALL_DIR) - set(LIB_INSTALL_DIR "lib" CACHE STRING - "Set the installation directory for libraries." FORCE) -endif(NOT LIB_INSTALL_DIR) - include_directories(. ${CMAKE_CURRENT_BINARY_DIR}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmark_version.h.in @@ -66,7 +57,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmark_version.h.in configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcmark.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc - DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) + DESTINATION lib${LIB_SUFFIX}/pkgconfig) include (GenerateExportHeader) @@ -131,8 +122,8 @@ include (InstallRequiredSystemLibraries) install(TARGETS ${PROGRAM} ${LIBRARY} ${STATICLIBRARY} EXPORT cmark RUNTIME DESTINATION bin - LIBRARY DESTINATION ${LIB_INSTALL_DIR} - ARCHIVE DESTINATION ${LIB_INSTALL_DIR} + LIBRARY DESTINATION lib${LIB_SUFFIX} + ARCHIVE DESTINATION lib${LIB_SUFFIX} ) install(FILES @@ -142,7 +133,7 @@ install(FILES DESTINATION include ) -install(EXPORT cmark DESTINATION ${LIB_INSTALL_DIR}/cmake) +install(EXPORT cmark DESTINATION lib${LIB_SUFFIX}/cmake) # Feature tests include(CheckIncludeFile) -- cgit 0.0.5-2-1-g0f52 From c9c18fff2fd8b3d0bef0120fe3db3b6ab0beeb9b Mon Sep 17 00:00:00 2001 From: "Azamat H. Hackimov" Date: Thu, 5 Jan 2017 01:12:16 +0500 Subject: Make shared and static libraries optional Now you can enable/disable compilation and installation targets for shared and static libraries via -DCMARK_SHARED=ON/OFF and -DCMARK_STATIC=ON/OFF --- CMakeLists.txt | 4 ++- src/CMakeLists.txt | 84 ++++++++++++++++++++++++++++++----------------------- test/CMakeLists.txt | 49 +++++++++++++++++-------------- 3 files changed, 78 insertions(+), 59 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 328f74c57e..4e60fd50c0 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,9 +22,11 @@ set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) +option(CMARK_STATIC "Build static libcmark library" ON) +option(CMARK_SHARED "Build shared libcmark library" ON) add_subdirectory(src) -if(CMARK_TESTS) +if(CMARK_TESTS AND CMARK_SHARED) add_subdirectory(api_test) endif() add_subdirectory(man) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2a4dc9f29c..f52ded6ca7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -54,11 +54,6 @@ include_directories(. ${CMAKE_CURRENT_BINARY_DIR}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmark_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/cmark_version.h) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcmark.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc - DESTINATION lib${LIB_SUFFIX}/pkgconfig) - include (GenerateExportHeader) add_executable(${PROGRAM} ${PROGRAM_SOURCES}) @@ -82,58 +77,75 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif () -add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES}) -add_library(${STATICLIBRARY} STATIC ${LIBRARY_SOURCES}) -# Include minor version and patch level in soname for now. -set_target_properties(${LIBRARY} PROPERTIES - OUTPUT_NAME "cmark" - SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} - VERSION ${PROJECT_VERSION}) -set_target_properties(${STATICLIBRARY} PROPERTIES - COMPILE_FLAGS -DCMARK_STATIC_DEFINE - POSITION_INDEPENDENT_CODE ON) - -if (MSVC) - set_target_properties(${STATICLIBRARY} PROPERTIES - OUTPUT_NAME "cmark_static" - VERSION ${PROJECT_VERSION}) -else() - set_target_properties(${STATICLIBRARY} PROPERTIES +if (CMARK_SHARED) + add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES}) + # Include minor version and patch level in soname for now. + set_target_properties(${LIBRARY} PROPERTIES OUTPUT_NAME "cmark" + SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} VERSION ${PROJECT_VERSION}) -endif(MSVC) -set_property(TARGET ${LIBRARY} - APPEND PROPERTY MACOSX_RPATH true) + set_property(TARGET ${LIBRARY} + APPEND PROPERTY MACOSX_RPATH true) -# Avoid name clash between PROGRAM and LIBRARY pdb files. -set_target_properties(${LIBRARY} PROPERTIES PDB_NAME cmark_dll) + # Avoid name clash between PROGRAM and LIBRARY pdb files. + set_target_properties(${LIBRARY} PROPERTIES PDB_NAME cmark_dll) -generate_export_header(${LIBRARY} + generate_export_header(${LIBRARY} BASE_NAME ${PROJECT_NAME}) + list(APPEND CMARK_INSTALL ${LIBRARY}) +endif() + +if (CMARK_STATIC) + add_library(${STATICLIBRARY} STATIC ${LIBRARY_SOURCES}) + set_target_properties(${STATICLIBRARY} PROPERTIES + COMPILE_FLAGS -DCMARK_STATIC_DEFINE + POSITION_INDEPENDENT_CODE ON) + + if (MSVC) + set_target_properties(${STATICLIBRARY} PROPERTIES + OUTPUT_NAME "cmark_static" + VERSION ${PROJECT_VERSION}) + else() + set_target_properties(${STATICLIBRARY} PROPERTIES + OUTPUT_NAME "cmark" + VERSION ${PROJECT_VERSION}) + endif(MSVC) + + list(APPEND CMARK_INSTALL ${STATICLIBRARY}) +endif() + if (MSVC) set_property(TARGET ${PROGRAM} APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO) endif(MSVC) set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) + include (InstallRequiredSystemLibraries) -install(TARGETS ${PROGRAM} ${LIBRARY} ${STATICLIBRARY} +install(TARGETS ${PROGRAM} ${CMARK_INSTALL} EXPORT cmark RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX} ) -install(FILES - cmark.h - ${CMAKE_CURRENT_BINARY_DIR}/cmark_export.h - ${CMAKE_CURRENT_BINARY_DIR}/cmark_version.h - DESTINATION include - ) +if(CMARK_SHARED OR CMARK_STATIC) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcmark.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc + DESTINATION lib${LIB_SUFFIX}/pkgconfig) -install(EXPORT cmark DESTINATION lib${LIB_SUFFIX}/cmake) + install(FILES + cmark.h + ${CMAKE_CURRENT_BINARY_DIR}/cmark_export.h + ${CMAKE_CURRENT_BINARY_DIR}/cmark_version.h + DESTINATION include + ) + + install(EXPORT cmark DESTINATION lib${LIB_SUFFIX}/cmake) +endif() # Feature tests include(CheckIncludeFile) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2a597ab1dd..6da3a6bac9 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,7 +9,9 @@ else(SPEC_TESTS) find_package(PythonInterp 3) endif(SPEC_TESTS) -add_test(NAME api_test COMMAND api_test) +if (CMARK_SHARED) + add_test(NAME api_test COMMAND api_test) +endif() if (WIN32) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/src WIN_DLL_DIR) @@ -28,15 +30,30 @@ IF (PYTHONINTERP_FOUND) "${CMAKE_CURRENT_SOURCE_DIR}/normalize.py" ) - add_test(spectest_library - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" - "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" - ) - - add_test(pathological_tests_library - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/pathological_tests.py" - "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" - ) + if (CMARK_SHARED) + add_test(spectest_library + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" + "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" + ) + + add_test(pathological_tests_library + ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/pathological_tests.py" + "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" + ) + + add_test(roundtriptest_executable + ${PYTHON_EXECUTABLE} + "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip_tests.py" + "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" + "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" + ) + + add_test(entity_executable + ${PYTHON_EXECUTABLE} + "${CMAKE_CURRENT_SOURCE_DIR}/entity_tests.py" + "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" + ) + endif() add_test(spectest_executable ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" @@ -46,13 +63,6 @@ IF (PYTHONINTERP_FOUND) ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/smart_punct.txt" "--program" "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark --smart" ) - add_test(roundtriptest_executable - ${PYTHON_EXECUTABLE} - "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip_tests.py" - "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" - "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" - ) - add_test(regressiontest_executable ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize" "--spec" @@ -60,11 +70,6 @@ IF (PYTHONINTERP_FOUND) "${CMAKE_CURRENT_BINARY_DIR}/../src/cmark" ) - add_test(entity_executable - ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/entity_tests.py" - "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" - ) - ELSE(PYTHONINTERP_FOUND) message("\n*** A python 3 interpreter is required to run the spec tests.\n") -- cgit 0.0.5-2-1-g0f52 From 5eb01d279361ee7465d3a3f7d9494f1cd1018dd6 Mon Sep 17 00:00:00 2001 From: Doeme Date: Sat, 7 Jan 2017 21:00:24 +0100 Subject: Fixes for the LaTeX renderer (#182) * Don't double-output the link in latex-rendering. * Prevent ligatures in dashes sensibly when rendering latex. \- is a hyphenation, so it doesn't get displayed at all. * Redo "Don't double-output the link in latex-rendering." This reverts commit 8fb1f1c3c8799628141780ca5fd8d70883c1ec53 and adds the proper solution to the problem. With commit 8fb1f1c3c double rendering is fixed, but the url isn't escaped anymore, so I discarded the wrong copy. We now return 0 from the function in case of a single link, which stops processing the contents of the node. * Add a comment about the double-rendering issue addressed in 1c0d4749451cf85a849a3cf8e41cf137789821d4 --- src/latex.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/latex.c b/src/latex.c index e78c7d9161..9bd6444634 100644 --- a/src/latex.c +++ b/src/latex.c @@ -42,7 +42,7 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, break; case 45: // '-' if (nextc == 45) { // prevent ligature - cmark_render_ascii(renderer, "\\-"); + cmark_render_ascii(renderer, "-{}"); } else { cmark_render_ascii(renderer, "-"); } @@ -390,7 +390,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, case URL_AUTOLINK: LIT("\\url{"); OUT(url, false, URL); - break; + LIT("}"); + return 0; // Don't process further nodes to avoid double-rendering artefacts case EMAIL_AUTOLINK: LIT("\\href{"); OUT(url, false, URL); -- cgit 0.0.5-2-1-g0f52 From fe58a9295d44bd58bb4e48e449eb56c070e099d8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 8 Jan 2017 00:17:04 +0100 Subject: Update spec. --- test/spec.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index c49e85b39f..857e92c32d 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5976,8 +5976,8 @@ the following principles resolve ambiguity: an interpretation `...` is always preferred to `...`. -14. An interpretation `...` is always - preferred to `..`. +14. An interpretation `...` is always + preferred to `..`. 15. When two potential emphasis or strong emphasis spans overlap, so that the second begins before the first ends and ends after @@ -7000,14 +7000,14 @@ Rule 14: ```````````````````````````````` example ***foo*** . -

                            foo

                            +

                            foo

                            ```````````````````````````````` ```````````````````````````````` example _____foo_____ . -

                            foo

                            +

                            foo

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 06156fd9194806ab98889e5ef3a309bb7075b02c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 8 Jan 2017 00:17:53 +0100 Subject: Update emphasis parsing for spec change. Strong now goes inside Emph rather than the reverse, when both scopes are possible. The code is much simpler. This also avoids a spec inconsistency that cmark had previously: `***hi***` became Strong (Emph "hi")) but `***hi****` became Emph (Strong "hi")) "*" --- src/inlines.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 92e79c7875..3807da9df2 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -614,12 +614,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, cmark_node *tmp, *tmpnext, *emph; // calculate the actual number of characters used from this closer - if (closer_num_chars < 3 || opener_num_chars < 3) { - use_delims = closer_num_chars <= opener_num_chars ? closer_num_chars - : opener_num_chars; - } else { // closer and opener both have >= 3 characters - use_delims = closer_num_chars % 2 == 0 ? 2 : 1; - } + use_delims = (closer_num_chars >= 2 && opener_num_chars >=2) ? 2 : 1; // remove used characters from associated inlines. opener_num_chars -= use_delims; -- cgit 0.0.5-2-1-g0f52 From 664b8603a1b6dc94d199496dc4b372b285fa89fd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 20 Jan 2017 20:14:46 +0100 Subject: Fixed buffer overflow error in S_parser_feed. The overflow could occur in the following condition: the buffer ends with `\r` and the next memory address contains `\n`. Closes #184. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 99dd082652..051d2e8643 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -580,7 +580,7 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, if (buffer == end) parser->last_buffer_ended_with_cr = true; } - if (*buffer == '\n') + if (buffer < end && *buffer == '\n') buffer++; } } -- cgit 0.0.5-2-1-g0f52 From 118ebb338840d67005ee57ec39060d2b68f4ec7c Mon Sep 17 00:00:00 2001 From: Jens Petersen Date: Mon, 6 Feb 2017 06:33:22 +0900 Subject: libcmark.pc: use CMAKE_INSTALL_LIBDIR (#185) needed for multilib distros like Fedora --- src/libcmark.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcmark.pc.in b/src/libcmark.pc.in index 9c3a9a9e60..024ae48329 100644 --- a/src/libcmark.pc.in +++ b/src/libcmark.pc.in @@ -1,6 +1,6 @@ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@ -libdir=@CMAKE_INSTALL_PREFIX@/lib +libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ includedir=@CMAKE_INSTALL_PREFIX@/include Name: libcmark -- cgit 0.0.5-2-1-g0f52 From 5c2f3341e3c129aeb27f70fe6ca9ed0fea8f2383 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 3 Apr 2017 10:01:09 +0200 Subject: Print message to stderr when we abort due to memory demands. Closes #188. @nwellnhof - could you have a look and let me know if you think this is a bad idea or could be improved? --- src/buffer.c | 7 ++++++- src/cmark.c | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index a6754b64f6..629f809da2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -42,7 +42,12 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { if (target_size < buf->asize) return; - if (target_size > (bufsize_t)(INT32_MAX / 2)) + if (target_size > (bufsize_t)(INT32_MAX / 2)) { + fprintf(stderr, + "[cmark] cmark_strbuf_grow requests buffer with size > %d, aborting\n", + (bufsize_t)(INT32_MAX / 2)); + abort(); + } abort(); /* Oversize the buffer by 50% to guarantee amortized linear time diff --git a/src/cmark.c b/src/cmark.c index 0d3bc1669f..d64237f248 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -12,15 +12,19 @@ const char *cmark_version_string() { return CMARK_VERSION_STRING; } static void *xcalloc(size_t nmem, size_t size) { void *ptr = calloc(nmem, size); - if (!ptr) + if (!ptr) { + fprintf(stderr, "[cmark] calloc returned null pointer, aborting\n"); abort(); + } return ptr; } static void *xrealloc(void *ptr, size_t size) { void *new_ptr = realloc(ptr, size); - if (!new_ptr) + if (!new_ptr) { + fprintf(stderr, "[cmark] realloc returned null pointer, aborting\n"); abort(); + } return new_ptr; } -- cgit 0.0.5-2-1-g0f52 From 3aaf80487cdd34cf374eb02e52e5836712b4e51b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 3 Apr 2017 10:57:42 +0200 Subject: Removed coercion in error message when aborting from buffer. --- src/buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index 629f809da2..d6c9c9b2ca 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -45,7 +45,7 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { if (target_size > (bufsize_t)(INT32_MAX / 2)) { fprintf(stderr, "[cmark] cmark_strbuf_grow requests buffer with size > %d, aborting\n", - (bufsize_t)(INT32_MAX / 2)); + (INT32_MAX / 2)); abort(); } abort(); -- cgit 0.0.5-2-1-g0f52 From b75890e0fd7abb995d083b795c2cd45703b7cb22 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 3 Apr 2017 11:09:48 +0200 Subject: Removed abort outside of conditional (typo). --- src/buffer.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index d6c9c9b2ca..a237b11b35 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -48,7 +48,6 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { (INT32_MAX / 2)); abort(); } - abort(); /* Oversize the buffer by 50% to guarantee amortized linear time * complexity on append operations. */ -- cgit 0.0.5-2-1-g0f52 From 12501f1000f592ff67cca98b6733f0bfa3115f9f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 3 Apr 2017 13:01:30 +0200 Subject: Fixed code for freeing delimiter stack. Note, however, that this may not be needed at all: the old code would have gone into an infinite loop if the delimiter stack were not already freed. If we can prove that the delimiter stack is empty at this point, we could remove this; on the other hand, it may not hurt to keep it here defensively. Closes #189. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 3807da9df2..021d5a32d5 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1165,7 +1165,7 @@ extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, process_emphasis(&subj, NULL); // free bracket and delim stack while (subj.last_delim) { - pop_bracket(&subj); + remove_delimiter(&subj, subj.last_delim); } while (subj.last_bracket) { pop_bracket(&subj); -- cgit 0.0.5-2-1-g0f52 From 6313fff5f9482bdc0489dd19bf9c4ff6ed817e71 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Fri, 5 May 2017 18:02:34 +1000 Subject: Remove normalize as an option per #190 (#194) --- Makefile | 2 +- man/man3/cmark.3 | 14 +------------- src/blocks.c | 4 +--- src/cmark.h | 4 ---- src/main.c | 3 --- 5 files changed, 3 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 1c3fc98d8c..987ed2bafc 100644 --- a/Makefile +++ b/Makefile @@ -135,7 +135,7 @@ $(ALLTESTS): $(SPEC) leakcheck: $(ALLTESTS) for format in html man xml latex commonmark; do \ - for opts in "" "--smart" "--normalize"; do \ + for opts in "" "--smart"; do \ echo "cmark -t $$format $$opts" ; \ valgrind -q --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t $$format $$opts $(ALLTESTS) >/dev/null || exit 1;\ done; \ diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index eb38812c61..5f7fcc68fb 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "November 18, 2016" "LOCAL" "Library Functions Manual" +.TH cmark 3 "May 05, 2017" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -743,18 +743,6 @@ Render \f[C]softbreak\f[] elements as spaces. .SS Options affecting parsing -.PP -.nf -\fC -.RS 0n -#define CMARK_OPT_NORMALIZE (1 << 8) -.RE -\f[] -.fi - -.PP -Normalize tree by consolidating adjacent text nodes. - .PP .nf \fC diff --git a/src/blocks.c b/src/blocks.c index 051d2e8643..863f5c6bac 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1192,9 +1192,7 @@ cmark_node *cmark_parser_finish(cmark_parser *parser) { finalize_document(parser); - if (parser->options & CMARK_OPT_NORMALIZE) { - cmark_consolidate_text_nodes(parser->root); - } + cmark_consolidate_text_nodes(parser->root); cmark_strbuf_free(&parser->curline); diff --git a/src/cmark.h b/src/cmark.h index 6ed7eb0574..793fcf4fa0 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -563,10 +563,6 @@ char *cmark_render_latex(cmark_node *root, int options, int width); * ### Options affecting parsing */ -/** Normalize tree by consolidating adjacent text nodes. - */ -#define CMARK_OPT_NORMALIZE (1 << 8) - /** Validate UTF-8 in the input before parsing, replacing illegal * sequences with the replacement character U+FFFD. */ diff --git a/src/main.c b/src/main.c index 42cd8b1639..9482f68692 100644 --- a/src/main.c +++ b/src/main.c @@ -32,7 +32,6 @@ void print_usage() { printf(" --nobreaks Render soft line breaks as spaces\n"); printf(" --safe Suppress raw HTML and dangerous URLs\n"); printf(" --smart Use smart punctuation\n"); - printf(" --normalize Consolidate adjacent text nodes\n"); printf(" --help, -h Print usage information\n"); printf(" --version Print version\n"); } @@ -99,8 +98,6 @@ int main(int argc, char *argv[]) { options |= CMARK_OPT_SMART; } else if (strcmp(argv[i], "--safe") == 0) { options |= CMARK_OPT_SAFE; - } else if (strcmp(argv[i], "--normalize") == 0) { - options |= CMARK_OPT_NORMALIZE; } else if (strcmp(argv[i], "--validate-utf8") == 0) { options |= CMARK_OPT_VALIDATE_UTF8; } else if ((strcmp(argv[i], "--help") == 0) || -- cgit 0.0.5-2-1-g0f52 From f47c5ec83aacd4fd64de36b1047ff2fced766142 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Sun, 7 May 2017 13:22:12 +1000 Subject: Re-add CMARK_OPT_NORMALIZE without effect. --- man/man3/cmark.3 | 12 ++++++++++++ src/cmark.h | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 5f7fcc68fb..125e5a2d08 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -743,6 +743,18 @@ Render \f[C]softbreak\f[] elements as spaces. .SS Options affecting parsing +.PP +.nf +\fC +.RS 0n +#define CMARK_OPT_NORMALIZE (1 << 8) +.RE +\f[] +.fi + +.PP +Legacy option (no effect). + .PP .nf \fC diff --git a/src/cmark.h b/src/cmark.h index 793fcf4fa0..a628ffb040 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -563,6 +563,10 @@ char *cmark_render_latex(cmark_node *root, int options, int width); * ### Options affecting parsing */ +/** Legacy option (no effect). + */ +#define CMARK_OPT_NORMALIZE (1 << 8) + /** Validate UTF-8 in the input before parsing, replacing illegal * sequences with the replacement character U+FFFD. */ -- cgit 0.0.5-2-1-g0f52 From f5c942217751160dc48dc1cb7ff6bddf2d14f0ce Mon Sep 17 00:00:00 2001 From: Tim Nieradzik Date: Mon, 15 May 2017 19:30:05 +0200 Subject: README: Add link to cmark-scala (#196) --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 10375ba775..6e82f1c839 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,9 @@ There are also libraries that wrap `libcmark` for [Haskell](http://hackage.haskell.org/package/cmark), [ruby](https://github.com/gjtorikian/commonmarker), [lua](https://github.com/jgm/cmark-lua), -[Perl](https://metacpan.org/release/CommonMark), and -[R](http://cran.r-project.org/package=commonmark). +[Perl](https://metacpan.org/release/CommonMark), +[R](http://cran.r-project.org/package=commonmark) and +[Scala](https://github.com/sparsetech/cmark-scala). Installing ---------- -- cgit 0.0.5-2-1-g0f52 From 3c11019281407af0584f7a9e2f29baa46fa8bd54 Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Tue, 16 May 2017 18:22:47 +0300 Subject: Prettify languages list --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6e82f1c839..a73968bef0 100644 --- a/README.md +++ b/README.md @@ -53,12 +53,12 @@ It is easy to use `libcmark` in python, lua, ruby, and other dynamic languages: see the `wrappers/` subdirectory for some simple examples. There are also libraries that wrap `libcmark` for -[go](https://github.com/rhinoman/go-commonmark), -[Haskell](http://hackage.haskell.org/package/cmark), -[ruby](https://github.com/gjtorikian/commonmarker), -[lua](https://github.com/jgm/cmark-lua), +[Go](https://github.com/rhinoman/go-commonmark), +[Haskell](https://hackage.haskell.org/package/cmark), +[Ruby](https://github.com/gjtorikian/commonmarker), +[Lua](https://github.com/jgm/cmark-lua), [Perl](https://metacpan.org/release/CommonMark), -[R](http://cran.r-project.org/package=commonmark) and +[R](https://cran.r-project.org/package=commonmark) and [Scala](https://github.com/sparsetech/cmark-scala). Installing -- cgit 0.0.5-2-1-g0f52 From 1fff711c3d6b787eabb9f46c33caa723c808c7ff Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Tue, 16 May 2017 18:28:03 +0300 Subject: Add link to Python wrapper --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a73968bef0..9aaf32fcb5 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ There are also libraries that wrap `libcmark` for [Ruby](https://github.com/gjtorikian/commonmarker), [Lua](https://github.com/jgm/cmark-lua), [Perl](https://metacpan.org/release/CommonMark), +[Python](https://pypi.python.org/pypi/paka.cmark), [R](https://cran.r-project.org/package=commonmark) and [Scala](https://github.com/sparsetech/cmark-scala). -- cgit 0.0.5-2-1-g0f52 From 58b37aec94823aae047597593604c7f29d9e48fa Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 30 May 2017 09:14:32 +0200 Subject: Use CMARK_NO_DELIM for bullet lists. Closes #201. --- src/blocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 863f5c6bac..6709ecdd4f 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -415,7 +415,7 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, data->list_type = CMARK_BULLET_LIST; data->bullet_char = c; data->start = 1; - data->delimiter = CMARK_PERIOD_DELIM; + data->delimiter = CMARK_NO_DELIM; data->tight = false; } else if (cmark_isdigit(c)) { int start = 0; -- cgit 0.0.5-2-1-g0f52 From 0b1886ca44e0b562f9022ad95568acd6f9b4e1d2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 2 Jun 2017 16:23:25 +0200 Subject: Fixed cmark_node_get_list_start to return 0 for bullet lists... as documented! Closes #202. --- api_test/main.c | 4 ++-- src/blocks.c | 2 +- src/node.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 17e1582b4b..d7202343b8 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -59,8 +59,8 @@ static void constructor(test_batch_runner *runner) { "default is list type is bullet"); INT_EQ(runner, cmark_node_get_list_delim(node), CMARK_NO_DELIM, "default is list delim is NO_DELIM"); - INT_EQ(runner, cmark_node_get_list_start(node), 1, - "default is list start is 1"); + INT_EQ(runner, cmark_node_get_list_start(node), 0, + "default is list start is 0"); INT_EQ(runner, cmark_node_get_list_tight(node), 0, "default is list is loose"); break; diff --git a/src/blocks.c b/src/blocks.c index 6709ecdd4f..98868d3046 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -414,7 +414,7 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, data->marker_offset = 0; // will be adjusted later data->list_type = CMARK_BULLET_LIST; data->bullet_char = c; - data->start = 1; + data->start = 0; data->delimiter = CMARK_NO_DELIM; data->tight = false; } else if (cmark_isdigit(c)) { diff --git a/src/node.c b/src/node.c index e722acf90a..c6c29028eb 100644 --- a/src/node.c +++ b/src/node.c @@ -85,7 +85,7 @@ cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) { case CMARK_NODE_LIST: { cmark_list *list = &node->as.list; list->list_type = CMARK_BULLET_LIST; - list->start = 1; + list->start = 0; list->tight = false; break; } -- cgit 0.0.5-2-1-g0f52 From 14ea489f5dd6e3d07e23f104d6c9ce441d05751b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 2 Jun 2017 16:27:18 +0200 Subject: Fixed bug with unescaped left angle bracket in link destination. Closes #193. --- src/scanners.c | 17929 ++++++++++++++++++++++++++++++-------------------- src/scanners.re | 2 +- test/regression.txt | 10 + 3 files changed, 10736 insertions(+), 7205 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 147b511289..05ae5e8dee 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 */ +/* Generated by re2c 0.15.3 */ #include #include "chunk.h" #include "scanners.h" @@ -70,58 +70,53 @@ bufsize_t _scan_scheme(const unsigned char *p) { if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy7; + goto yy9; } else { if (yych != '/') - goto yy7; + goto yy9; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; - if (yych >= 'A') goto yy7; + if (yych >= 'A') + goto yy9; } else { if (yych <= '`') goto yy6; if (yych <= 'z') - goto yy7; + goto yy9; } } yy6: p = marker; goto yy3; yy7: + ++p; + { return (bufsize_t)(p - start); } + yy9: yych = *++p; if (yych <= '9') { if (yych <= ',') { - if (yych == '+') - goto yy10; - goto yy6; + if (yych != '+') + goto yy6; } else { if (yych == '/') goto yy6; - goto yy10; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; - goto yy10; } else { if (yych <= '`') goto yy6; - if (yych <= 'z') - goto yy10; - goto yy6; + if (yych >= '{') + goto yy6; } } - yy8: - ++p; - { return (bufsize_t)(p - start); } - yy10: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -134,7 +129,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -156,7 +151,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -178,7 +173,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -200,7 +195,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -222,7 +217,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -244,7 +239,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -266,7 +261,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -288,7 +283,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -310,7 +305,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -332,7 +327,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -354,7 +349,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -376,7 +371,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -398,7 +393,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -420,7 +415,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -442,7 +437,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -464,7 +459,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -486,7 +481,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -508,7 +503,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -530,7 +525,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -552,7 +547,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -574,7 +569,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -596,7 +591,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -618,7 +613,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -640,7 +635,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -662,7 +657,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -684,7 +679,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -706,7 +701,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -728,7 +723,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy8; + goto yy7; if (yych <= '@') goto yy6; } else { @@ -740,7 +735,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } ++p; if ((yych = *p) == ':') - goto yy8; + goto yy7; goto yy6; } } @@ -757,7 +752,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -815,176 +810,107 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy46; + goto yy48; } else { if (yych != '/') - goto yy46; + goto yy48; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; - if (yych >= 'A') goto yy46; + if (yych >= 'A') + goto yy48; } else { if (yych <= '`') goto yy45; if (yych <= 'z') - goto yy46; + goto yy48; } } yy45: p = marker; goto yy42; yy46: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych == '+') - goto yy49; - goto yy45; - } else { - if (yych == '/') - goto yy45; - goto yy49; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - goto yy49; - } else { - if (yych <= '`') - goto yy45; - if (yych <= 'z') - goto yy49; - goto yy45; - } - } - yy47: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy47; + goto yy46; } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '<') + if (yych <= ' ') goto yy45; if (yych <= '>') - goto yy50; + goto yy85; goto yy45; } else { if (yych <= 0xDF) - goto yy52; + goto yy78; if (yych <= 0xE0) - goto yy53; - goto yy54; + goto yy79; + goto yy80; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy55; + goto yy84; if (yych <= 0xEF) - goto yy54; - goto yy56; + goto yy80; + goto yy81; } else { if (yych <= 0xF3) - goto yy57; + goto yy82; if (yych <= 0xF4) - goto yy58; + goto yy83; goto yy45; } } - yy49: + yy48: yych = *++p; if (yych <= '9') { if (yych <= ',') { - if (yych == '+') - goto yy59; - goto yy45; + if (yych != '+') + goto yy45; } else { if (yych == '/') goto yy45; - goto yy59; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; - goto yy59; } else { if (yych <= '`') goto yy45; - if (yych <= 'z') - goto yy59; - goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy46; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; } } - yy50: - ++p; - { return (bufsize_t)(p - start); } - yy52: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy47; - goto yy45; - yy53: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy45; - if (yych <= 0xBF) - goto yy52; - goto yy45; - yy54: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy52; - goto yy45; - yy55: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x9F) - goto yy52; - goto yy45; - yy56: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy45; - if (yych <= 0xBF) - goto yy54; - goto yy45; - yy57: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy54; - goto yy45; - yy58: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x8F) - goto yy54; - goto yy45; - yy59: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -997,7 +923,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1019,7 +945,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1041,7 +967,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1063,7 +989,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1085,7 +1011,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1107,7 +1033,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1129,7 +1055,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1151,7 +1077,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1173,7 +1099,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1195,7 +1121,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1217,7 +1143,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1239,7 +1165,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1261,7 +1187,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1283,7 +1209,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1305,7 +1231,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1327,7 +1253,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1349,7 +1275,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1371,7 +1297,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1393,7 +1319,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1415,7 +1341,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1437,7 +1363,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1459,7 +1385,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1481,7 +1407,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1503,7 +1429,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1525,7 +1451,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1547,7 +1473,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1569,7 +1495,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy47; + goto yy46; if (yych <= '@') goto yy45; } else { @@ -1579,10 +1505,69 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { goto yy45; } } + yych = *++p; + if (yych == ':') + goto yy46; + goto yy45; + yy78: ++p; - if ((yych = *p) == ':') - goto yy47; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy46; + goto yy45; + yy79: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy45; + if (yych <= 0xBF) + goto yy78; + goto yy45; + yy80: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy78; + goto yy45; + yy81: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy45; + if (yych <= 0xBF) + goto yy80; + goto yy45; + yy82: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy80; + goto yy45; + yy83: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x8F) + goto yy80; + goto yy45; + yy84: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x9F) + goto yy78; goto yy45; + yy85: + ++p; + { return (bufsize_t)(p - start); } } } @@ -1653,4889 +1638,8109 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= ',') { if (yych <= '"') { if (yych == '!') - goto yy93; + goto yy95; goto yy90; } else { if (yych <= '\'') - goto yy93; + goto yy95; if (yych <= ')') goto yy90; if (yych <= '+') - goto yy93; + goto yy95; goto yy90; } } else { if (yych <= '>') { if (yych <= '9') - goto yy93; + goto yy95; if (yych == '=') - goto yy93; + goto yy95; goto yy90; } else { if (yych <= 'Z') - goto yy93; + goto yy95; if (yych <= ']') goto yy90; if (yych <= '~') - goto yy93; + goto yy95; goto yy90; } } yy92: - ++p; - yych = *p; - yy93: - if (yybm[0 + yych] & 128) { - goto yy92; - } - if (yych <= '>') - goto yy94; - if (yych <= '@') - goto yy95; - yy94: - p = marker; - goto yy90; - yy95: - ++p; - yych = *p; + yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy94; - if (yych >= ':') - goto yy94; + goto yy93; + if (yych <= '9') + goto yy96; } else { if (yych <= 'Z') goto yy96; if (yych <= '`') - goto yy94; - if (yych >= '{') - goto yy94; + goto yy93; + if (yych <= 'z') + goto yy96; } - yy96: + yy93: + p = marker; + goto yy90; + yy94: ++p; yych = *p; + yy95: + if (yybm[0 + yych] & 128) { + goto yy94; + } + if (yych <= '>') + goto yy93; + if (yych <= '@') + goto yy92; + goto yy93; + yy96: + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy98; + goto yy99; } else { if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy98; - goto yy94; + goto yy93; + if (yych >= ':') + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy98; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy98; - goto yy94; - } - } - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy101; - if (yych <= '/') - goto yy94; - goto yy102; - } else { - if (yych <= 'Z') { + goto yy100; if (yych <= '@') - goto yy94; - goto yy102; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy102; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy98: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; + goto yy93; if (yych <= '-') - goto yy101; - goto yy95; + goto yy227; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy102; - goto yy94; + goto yy226; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy102; + goto yy93; + goto yy226; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy102; - goto yy94; + goto yy226; + goto yy93; } } - yy99: - ++p; - { return (bufsize_t)(p - start); } - yy101: - ++p; - yych = *p; + yy98: + yych = *++p; if (yych <= '9') { if (yych == '-') - goto yy103; + goto yy227; if (yych <= '/') - goto yy94; - goto yy104; + goto yy93; + goto yy226; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy104; + goto yy93; + goto yy226; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy104; - goto yy94; + goto yy226; + goto yy93; } } + yy99: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy102; + goto yy93; + } else { + if (yych <= 'Z') + goto yy102; + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy102; + goto yy93; + } + yy100: + ++p; + { return (bufsize_t)(p - start); } yy102: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy104; + goto yy99; } else { if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy104; - goto yy94; + goto yy93; + if (yych >= ':') + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy104; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy104; - goto yy94; - } - } - yy103: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy105; - if (yych <= '/') - goto yy94; - goto yy106; - } else { - if (yych <= 'Z') { + goto yy100; if (yych <= '@') - goto yy94; - goto yy106; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy106; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy104: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy106; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy106; - goto yy94; + goto yy105; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy106; + goto yy93; + goto yy105; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy106; - goto yy94; + goto yy105; + goto yy93; } } - yy105: + yy104: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy107; + goto yy106; if (yych <= '/') - goto yy94; - goto yy108; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy108; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy108; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy106: + yy105: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy108; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy108; - goto yy94; + goto yy107; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy108; + goto yy93; + goto yy107; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy108; - goto yy94; + goto yy107; + goto yy93; } } - yy107: + yy106: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy109; + goto yy108; if (yych <= '/') - goto yy94; - goto yy110; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy110; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy110; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy108: + yy107: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy110; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy110; - goto yy94; + goto yy109; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy110; + goto yy93; + goto yy109; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy110; - goto yy94; + goto yy109; + goto yy93; } } - yy109: + yy108: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy111; + goto yy110; if (yych <= '/') - goto yy94; - goto yy112; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy112; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy112; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy110: + yy109: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy112; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy112; - goto yy94; + goto yy111; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy112; + goto yy93; + goto yy111; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy112; - goto yy94; + goto yy111; + goto yy93; } } - yy111: + yy110: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy113; + goto yy112; if (yych <= '/') - goto yy94; - goto yy114; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy114; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy114; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy112: + yy111: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy114; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy114; - goto yy94; + goto yy113; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy114; + goto yy93; + goto yy113; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy114; - goto yy94; + goto yy113; + goto yy93; } } - yy113: + yy112: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy115; + goto yy114; if (yych <= '/') - goto yy94; - goto yy116; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy116; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy116; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy114: + yy113: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy116; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy116; - goto yy94; + goto yy115; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy116; + goto yy93; + goto yy115; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy116; - goto yy94; + goto yy115; + goto yy93; } } - yy115: + yy114: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy117; + goto yy116; if (yych <= '/') - goto yy94; - goto yy118; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy118; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy118; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy116: + yy115: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy118; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy118; - goto yy94; + goto yy117; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy118; + goto yy93; + goto yy117; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy118; - goto yy94; + goto yy117; + goto yy93; } } - yy117: + yy116: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy119; + goto yy118; if (yych <= '/') - goto yy94; - goto yy120; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy120; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy120; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy118: + yy117: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy120; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy120; - goto yy94; + goto yy119; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy120; + goto yy93; + goto yy119; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy120; - goto yy94; + goto yy119; + goto yy93; } } - yy119: + yy118: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy121; + goto yy120; if (yych <= '/') - goto yy94; - goto yy122; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy122; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy122; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy120: + yy119: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy122; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy122; - goto yy94; + goto yy121; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy122; + goto yy93; + goto yy121; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy122; - goto yy94; + goto yy121; + goto yy93; } } - yy121: + yy120: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy123; + goto yy122; if (yych <= '/') - goto yy94; - goto yy124; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy124; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy124; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy122: + yy121: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy124; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy124; - goto yy94; + goto yy123; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy124; + goto yy93; + goto yy123; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy124; - goto yy94; + goto yy123; + goto yy93; } } - yy123: + yy122: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy125; + goto yy124; if (yych <= '/') - goto yy94; - goto yy126; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy126; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy126; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy124: + yy123: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy126; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy126; - goto yy94; + goto yy125; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy126; + goto yy93; + goto yy125; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy126; - goto yy94; + goto yy125; + goto yy93; } } - yy125: + yy124: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy127; + goto yy126; if (yych <= '/') - goto yy94; - goto yy128; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy128; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy128; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy126: + yy125: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy128; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy128; - goto yy94; + goto yy127; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy128; + goto yy93; + goto yy127; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy128; - goto yy94; + goto yy127; + goto yy93; } } - yy127: + yy126: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy129; + goto yy128; if (yych <= '/') - goto yy94; - goto yy130; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy130; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy130; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy128: + yy127: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy130; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy130; - goto yy94; + goto yy129; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy130; + goto yy93; + goto yy129; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy130; - goto yy94; + goto yy129; + goto yy93; } } - yy129: + yy128: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy131; + goto yy130; if (yych <= '/') - goto yy94; - goto yy132; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy132; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy132; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy130: + yy129: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy132; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy132; - goto yy94; + goto yy131; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy132; + goto yy93; + goto yy131; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy132; - goto yy94; + goto yy131; + goto yy93; } } - yy131: + yy130: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy133; + goto yy132; if (yych <= '/') - goto yy94; - goto yy134; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy134; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy134; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy132: + yy131: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy134; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy134; - goto yy94; + goto yy133; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy134; + goto yy93; + goto yy133; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy134; - goto yy94; + goto yy133; + goto yy93; } } - yy133: + yy132: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy135; + goto yy134; if (yych <= '/') - goto yy94; - goto yy136; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy136; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy136; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy134: + yy133: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy136; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy136; - goto yy94; + goto yy135; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy136; + goto yy93; + goto yy135; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy136; - goto yy94; + goto yy135; + goto yy93; } } - yy135: + yy134: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy137; + goto yy136; if (yych <= '/') - goto yy94; - goto yy138; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy138; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy138; - goto yy94; - } + goto yy93; + if (yych >= '{') + goto yy93; + } } - yy136: + yy135: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy138; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy138; - goto yy94; + goto yy137; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy138; + goto yy93; + goto yy137; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy138; - goto yy94; + goto yy137; + goto yy93; } } - yy137: + yy136: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy139; + goto yy138; if (yych <= '/') - goto yy94; - goto yy140; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy140; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy140; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy138: + yy137: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy140; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy140; - goto yy94; + goto yy139; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy140; + goto yy93; + goto yy139; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy140; - goto yy94; + goto yy139; + goto yy93; } } - yy139: + yy138: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy141; + goto yy140; if (yych <= '/') - goto yy94; - goto yy142; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy142; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy142; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy140: + yy139: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy142; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy142; - goto yy94; + goto yy141; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy142; + goto yy93; + goto yy141; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy142; - goto yy94; + goto yy141; + goto yy93; } } - yy141: + yy140: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy143; + goto yy142; if (yych <= '/') - goto yy94; - goto yy144; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy144; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy144; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy142: + yy141: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy144; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy144; - goto yy94; + goto yy143; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy144; + goto yy93; + goto yy143; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy144; - goto yy94; + goto yy143; + goto yy93; } } - yy143: + yy142: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy145; + goto yy144; if (yych <= '/') - goto yy94; - goto yy146; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy146; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy146; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy144: + yy143: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy146; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy146; - goto yy94; + goto yy145; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy146; + goto yy93; + goto yy145; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy146; - goto yy94; + goto yy145; + goto yy93; } } - yy145: + yy144: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy147; + goto yy146; if (yych <= '/') - goto yy94; - goto yy148; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy148; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy148; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy146: + yy145: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy148; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy148; - goto yy94; + goto yy147; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy148; + goto yy93; + goto yy147; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy148; - goto yy94; + goto yy147; + goto yy93; } } - yy147: + yy146: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy149; + goto yy148; if (yych <= '/') - goto yy94; - goto yy150; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy150; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy150; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy148: + yy147: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy150; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy150; - goto yy94; + goto yy149; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy150; + goto yy93; + goto yy149; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy150; - goto yy94; + goto yy149; + goto yy93; } } - yy149: + yy148: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy151; + goto yy150; if (yych <= '/') - goto yy94; - goto yy152; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy152; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy152; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy150: + yy149: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy152; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy152; - goto yy94; + goto yy151; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy152; + goto yy93; + goto yy151; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy152; - goto yy94; + goto yy151; + goto yy93; } } - yy151: + yy150: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy153; + goto yy152; if (yych <= '/') - goto yy94; - goto yy154; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy154; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy154; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy152: + yy151: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy154; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy154; - goto yy94; + goto yy153; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy154; + goto yy93; + goto yy153; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy154; - goto yy94; + goto yy153; + goto yy93; } } - yy153: + yy152: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy155; + goto yy154; if (yych <= '/') - goto yy94; - goto yy156; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy156; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy156; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy154: + yy153: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy156; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy156; - goto yy94; + goto yy155; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy156; + goto yy93; + goto yy155; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy156; - goto yy94; + goto yy155; + goto yy93; } } - yy155: + yy154: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy157; + goto yy156; if (yych <= '/') - goto yy94; - goto yy158; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy158; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy158; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy156: + yy155: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy158; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy158; - goto yy94; + goto yy157; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy158; + goto yy93; + goto yy157; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy158; - goto yy94; + goto yy157; + goto yy93; } } - yy157: + yy156: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy159; + goto yy158; if (yych <= '/') - goto yy94; - goto yy160; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy160; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy160; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy158: + yy157: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy160; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy160; - goto yy94; + goto yy159; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy160; + goto yy93; + goto yy159; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy160; - goto yy94; + goto yy159; + goto yy93; } } - yy159: + yy158: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy161; + goto yy160; if (yych <= '/') - goto yy94; - goto yy162; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy162; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy162; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy160: + yy159: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy162; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy162; - goto yy94; + goto yy161; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy162; + goto yy93; + goto yy161; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy162; - goto yy94; + goto yy161; + goto yy93; } } - yy161: + yy160: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy163; + goto yy162; if (yych <= '/') - goto yy94; - goto yy164; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy164; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy164; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy162: + yy161: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy164; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy164; - goto yy94; + goto yy163; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy164; + goto yy93; + goto yy163; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy164; - goto yy94; + goto yy163; + goto yy93; } } - yy163: + yy162: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy165; + goto yy164; if (yych <= '/') - goto yy94; - goto yy166; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy166; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy166; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy164: + yy163: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy166; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy166; - goto yy94; + goto yy165; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy166; + goto yy93; + goto yy165; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy166; - goto yy94; + goto yy165; + goto yy93; } } - yy165: + yy164: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy167; + goto yy166; if (yych <= '/') - goto yy94; - goto yy168; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy168; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy168; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy166: + yy165: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy168; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy168; - goto yy94; + goto yy167; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy168; + goto yy93; + goto yy167; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy168; - goto yy94; + goto yy167; + goto yy93; } } - yy167: + yy166: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy169; + goto yy168; if (yych <= '/') - goto yy94; - goto yy170; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy170; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy170; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy168: + yy167: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy170; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy170; - goto yy94; + goto yy169; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy170; + goto yy93; + goto yy169; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy170; - goto yy94; + goto yy169; + goto yy93; } } - yy169: + yy168: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy171; + goto yy170; if (yych <= '/') - goto yy94; - goto yy172; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy172; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy172; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy170: + yy169: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy172; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy172; - goto yy94; + goto yy171; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy172; + goto yy93; + goto yy171; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy172; - goto yy94; + goto yy171; + goto yy93; } } - yy171: + yy170: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy173; + goto yy172; if (yych <= '/') - goto yy94; - goto yy174; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy174; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy174; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy172: + yy171: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy174; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy174; - goto yy94; + goto yy173; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy174; + goto yy93; + goto yy173; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy174; - goto yy94; + goto yy173; + goto yy93; } } - yy173: + yy172: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy175; + goto yy174; if (yych <= '/') - goto yy94; - goto yy176; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy176; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy176; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy174: + yy173: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy176; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy176; - goto yy94; + goto yy175; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy176; + goto yy93; + goto yy175; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy176; - goto yy94; + goto yy175; + goto yy93; } } - yy175: + yy174: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy177; + goto yy176; if (yych <= '/') - goto yy94; - goto yy178; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy178; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy178; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy176: + yy175: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy178; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy178; - goto yy94; + goto yy177; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy178; + goto yy93; + goto yy177; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy178; - goto yy94; + goto yy177; + goto yy93; } } - yy177: + yy176: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy179; + goto yy178; if (yych <= '/') - goto yy94; - goto yy180; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy180; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy180; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy178: + yy177: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy180; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy180; - goto yy94; + goto yy179; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy180; + goto yy93; + goto yy179; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy180; - goto yy94; + goto yy179; + goto yy93; } } - yy179: + yy178: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy181; + goto yy180; if (yych <= '/') - goto yy94; - goto yy182; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy182; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy182; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy180: + yy179: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy182; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy182; - goto yy94; + goto yy181; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy182; + goto yy93; + goto yy181; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy182; - goto yy94; + goto yy181; + goto yy93; } } - yy181: + yy180: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy183; + goto yy182; if (yych <= '/') - goto yy94; - goto yy184; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy184; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy184; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy182: + yy181: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy184; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy184; - goto yy94; + goto yy183; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy184; + goto yy93; + goto yy183; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy184; - goto yy94; + goto yy183; + goto yy93; } } - yy183: + yy182: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy185; + goto yy184; if (yych <= '/') - goto yy94; - goto yy186; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy186; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy186; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy184: + yy183: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy186; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy186; - goto yy94; + goto yy185; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy186; + goto yy93; + goto yy185; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy186; - goto yy94; + goto yy185; + goto yy93; } } - yy185: + yy184: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy187; + goto yy186; if (yych <= '/') - goto yy94; - goto yy188; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy188; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy188; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy186: + yy185: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy188; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy188; - goto yy94; + goto yy187; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy188; + goto yy93; + goto yy187; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy188; - goto yy94; + goto yy187; + goto yy93; } } - yy187: + yy186: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy189; + goto yy188; if (yych <= '/') - goto yy94; - goto yy190; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy190; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy190; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy188: + yy187: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy190; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy190; - goto yy94; + goto yy189; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy190; + goto yy93; + goto yy189; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy190; - goto yy94; + goto yy189; + goto yy93; } } - yy189: + yy188: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy191; + goto yy190; if (yych <= '/') - goto yy94; - goto yy192; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy192; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy192; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy190: + yy189: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy192; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy192; - goto yy94; + goto yy191; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy192; + goto yy93; + goto yy191; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy192; - goto yy94; + goto yy191; + goto yy93; } } - yy191: + yy190: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy193; + goto yy192; if (yych <= '/') - goto yy94; - goto yy194; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy194; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy194; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy192: + yy191: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy194; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy194; - goto yy94; + goto yy193; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy194; + goto yy93; + goto yy193; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy194; - goto yy94; + goto yy193; + goto yy93; } } - yy193: + yy192: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy195; + goto yy194; if (yych <= '/') - goto yy94; - goto yy196; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy196; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy196; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy194: + yy193: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy196; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy196; - goto yy94; + goto yy195; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy196; + goto yy93; + goto yy195; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy196; - goto yy94; + goto yy195; + goto yy93; } } - yy195: + yy194: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy197; + goto yy196; if (yych <= '/') - goto yy94; - goto yy198; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy198; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy198; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy196: + yy195: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy198; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy198; - goto yy94; + goto yy197; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy198; + goto yy93; + goto yy197; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy198; - goto yy94; + goto yy197; + goto yy93; } } - yy197: + yy196: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy199; + goto yy198; if (yych <= '/') - goto yy94; - goto yy200; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy200; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy200; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy198: + yy197: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy200; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy200; - goto yy94; + goto yy199; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy200; + goto yy93; + goto yy199; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy200; - goto yy94; + goto yy199; + goto yy93; } } - yy199: + yy198: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy201; + goto yy200; if (yych <= '/') - goto yy94; - goto yy202; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy202; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy202; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy200: + yy199: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy202; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy202; - goto yy94; + goto yy201; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy202; + goto yy93; + goto yy201; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy202; - goto yy94; + goto yy201; + goto yy93; } } - yy201: + yy200: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy203; + goto yy202; if (yych <= '/') - goto yy94; - goto yy204; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy204; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy204; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy202: + yy201: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy204; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy204; - goto yy94; + goto yy203; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy204; + goto yy93; + goto yy203; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy204; - goto yy94; + goto yy203; + goto yy93; } } - yy203: + yy202: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy205; + goto yy204; if (yych <= '/') - goto yy94; - goto yy206; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy206; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy206; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy204: + yy203: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy206; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy206; - goto yy94; + goto yy205; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy206; + goto yy93; + goto yy205; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy206; - goto yy94; + goto yy205; + goto yy93; } } - yy205: + yy204: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy207; + goto yy206; if (yych <= '/') - goto yy94; - goto yy208; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy208; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy208; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy206: + yy205: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy208; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy208; - goto yy94; + goto yy207; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy208; + goto yy93; + goto yy207; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy208; - goto yy94; + goto yy207; + goto yy93; } } - yy207: + yy206: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy209; + goto yy208; if (yych <= '/') - goto yy94; - goto yy210; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy210; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy210; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy208: + yy207: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy210; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy210; - goto yy94; + goto yy209; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy210; + goto yy93; + goto yy209; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy210; - goto yy94; + goto yy209; + goto yy93; } } - yy209: + yy208: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy211; + goto yy210; if (yych <= '/') - goto yy94; - goto yy212; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy212; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy212; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy210: + yy209: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy212; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy212; - goto yy94; + goto yy211; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy212; + goto yy93; + goto yy211; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy212; - goto yy94; + goto yy211; + goto yy93; } } - yy211: + yy210: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy213; + goto yy212; if (yych <= '/') - goto yy94; - goto yy214; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy214; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy214; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy212: + yy211: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy214; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy214; - goto yy94; + goto yy213; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy214; + goto yy93; + goto yy213; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy214; - goto yy94; + goto yy213; + goto yy93; } } - yy213: + yy212: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy215; + goto yy214; if (yych <= '/') - goto yy94; - goto yy216; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy216; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy216; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy214: + yy213: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy216; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy216; - goto yy94; + goto yy215; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy216; + goto yy93; + goto yy215; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy216; - goto yy94; + goto yy215; + goto yy93; } } - yy215: + yy214: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy217; + goto yy216; if (yych <= '/') - goto yy94; - goto yy218; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy218; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy218; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy216: + yy215: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy218; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy218; - goto yy94; + goto yy217; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy218; + goto yy93; + goto yy217; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy218; - goto yy94; + goto yy217; + goto yy93; } } - yy217: + yy216: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy219; + goto yy218; if (yych <= '/') - goto yy94; - goto yy220; + goto yy93; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy94; - goto yy220; + goto yy93; } else { if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy220; - goto yy94; + goto yy93; + if (yych >= '{') + goto yy93; } } - yy218: + yy217: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; + goto yy93; + if (yych <= '-') + goto yy220; + goto yy99; } else { if (yych <= '/') - goto yy94; + goto yy93; if (yych <= '9') - goto yy220; - goto yy94; + goto yy219; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; if (yych <= '@') - goto yy94; - goto yy220; + goto yy93; + goto yy219; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych <= 'z') - goto yy220; - goto yy94; + goto yy219; + goto yy93; } } - yy219: + yy218: ++p; yych = *p; - if (yych <= '@') { + if (yych <= '9') { + if (yych == '-') + goto yy220; if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy221; - goto yy94; + goto yy93; } else { - if (yych <= 'Z') - goto yy221; - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy221; - goto yy94; + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } } - yy220: + yy219: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { + if (yych <= ',') + goto yy93; if (yych <= '-') - goto yy94; - goto yy95; + goto yy222; + goto yy99; } else { if (yych <= '/') - goto yy94; - if (yych >= ':') - goto yy94; + goto yy93; + if (yych <= '9') + goto yy221; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy99; + goto yy100; + if (yych <= '@') + goto yy93; + goto yy221; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy221; + goto yy93; + } + } + yy220: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy222; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { if (yych <= '@') - goto yy94; + goto yy93; } else { if (yych <= '`') - goto yy94; + goto yy93; if (yych >= '{') - goto yy94; + goto yy93; } } yy221: ++p; yych = *p; - if (yych == '.') - goto yy95; - if (yych == '>') - goto yy99; - goto yy94; - } -} - -// Try to match an HTML tag after first <, returning num of chars matched. -bufsize_t _scan_html_tag(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - /* table 1 .. 8: 0 */ - 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250, - 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* table 9 .. 11: 256 */ - 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 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, - }; - yych = *p; - if (yych <= '>') { - if (yych <= '!') { - if (yych >= '!') - goto yy226; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy224; + goto yy99; } else { - if (yych == '/') - goto yy227; + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy223; + goto yy93; } } else { if (yych <= 'Z') { - if (yych <= '?') - goto yy228; - if (yych >= 'A') - goto yy229; + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy223; } else { if (yych <= '`') - goto yy224; + goto yy93; if (yych <= 'z') - goto yy229; + goto yy223; + goto yy93; } } - yy224: + yy222: ++p; - yy225 : { return 0; } - yy226: - yych = *(marker = ++p); - if (yybm[256 + yych] & 32) { - goto yy232; - } - if (yych == '-') - goto yy230; - if (yych <= '@') - goto yy225; - if (yych <= '[') - goto yy234; - goto yy225; - yy227: - yych = *(marker = ++p); - if (yych <= '@') - goto yy225; - if (yych <= 'Z') - goto yy235; - if (yych <= '`') - goto yy225; - if (yych <= 'z') - goto yy235; - goto yy225; - yy228: - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy225; - if (yych <= 0x7F) - goto yy238; - if (yych <= 0xC1) - goto yy225; - if (yych <= 0xF4) - goto yy238; - goto yy225; - yy229: - yych = *(marker = ++p); - if (yybm[0 + yych] & 1) { - goto yy247; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy224; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } } + yy223: + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych == '-') - goto yy249; - goto yy225; + if (yych <= '-') + goto yy93; + goto yy99; } else { if (yych <= '/') - goto yy251; + goto yy93; if (yych <= '9') - goto yy249; - goto yy225; + goto yy225; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy252; + goto yy100; if (yych <= '@') - goto yy225; - goto yy249; + goto yy93; + goto yy225; } else { if (yych <= '`') - goto yy225; + goto yy93; if (yych <= 'z') - goto yy249; - goto yy225; + goto yy225; + goto yy93; } } - yy230: - yych = *++p; - if (yych == '-') - goto yy254; - yy231: - p = marker; - goto yy225; - yy232: - ++p; - yych = *p; - if (yybm[256 + yych] & 32) { - goto yy232; - } - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy255; - if (yych == ' ') - goto yy255; - goto yy231; - yy234: - yych = *++p; - if (yych == 'C') - goto yy257; - if (yych == 'c') - goto yy257; - goto yy231; - yy235: + yy224: ++p; yych = *p; - if (yybm[256 + yych] & 64) { - goto yy235; - } - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy258; - goto yy231; + if (yych <= '@') { + if (yych <= '/') + goto yy93; + if (yych >= ':') + goto yy93; } else { - if (yych <= ' ') - goto yy258; - if (yych == '>') - goto yy252; - goto yy231; + if (yych <= 'Z') + goto yy225; + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; } - yy237: + yy225: ++p; yych = *p; - yy238: - if (yybm[256 + yych] & 128) { - goto yy237; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych >= '@') - goto yy231; + if (yych == '.') + goto yy99; + if (yych == '>') + goto yy100; + goto yy93; + yy226: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy229; + goto yy99; } else { - if (yych <= 0xDF) - goto yy240; - if (yych <= 0xE0) - goto yy241; - goto yy242; + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy228; + goto yy93; } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy243; - if (yych <= 0xEF) - goto yy242; - goto yy244; + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy228; } else { - if (yych <= 0xF3) - goto yy245; - if (yych <= 0xF4) - goto yy246; - goto yy231; + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy228; + goto yy93; } } - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy231; - if (yych <= '=') - goto yy237; - goto yy252; - } else { - if (yych <= 0x7F) - goto yy237; - if (yych <= 0xC1) - goto yy231; - if (yych >= 0xE0) - goto yy241; - } + yy227: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy229; + if (yych <= '/') + goto yy93; } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy243; - goto yy242; + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; } else { - if (yych <= 0xF0) - goto yy244; - if (yych <= 0xF3) - goto yy245; - if (yych <= 0xF4) - goto yy246; - goto yy231; + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; } } - yy240: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy237; - goto yy231; - yy241: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy240; - goto yy231; - yy242: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy240; - goto yy231; - yy243: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy240; - goto yy231; - yy244: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy242; - goto yy231; - yy245: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy242; - goto yy231; - yy246: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy242; - goto yy231; - yy247: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych <= '>') { - if (yych <= '9') { - if (yych == '/') - goto yy251; - goto yy231; - } else { - if (yych <= ':') - goto yy260; - if (yych <= '=') + yy228: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') goto yy231; - goto yy252; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy230; + goto yy93; } } else { - if (yych <= '^') { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; if (yych <= '@') - goto yy231; - if (yych <= 'Z') - goto yy260; - goto yy231; + goto yy93; + goto yy230; } else { - if (yych == '`') - goto yy231; + if (yych <= '`') + goto yy93; if (yych <= 'z') - goto yy260; - goto yy231; + goto yy230; + goto yy93; } } - yy249: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy247; + yy229: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy231; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } } + yy230: + yych = *++p; if (yych <= '=') { if (yych <= '.') { - if (yych == '-') - goto yy249; - goto yy231; + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy233; + goto yy99; } else { if (yych <= '/') - goto yy251; + goto yy93; if (yych <= '9') - goto yy249; - goto yy231; + goto yy232; + goto yy93; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy252; + goto yy100; if (yych <= '@') - goto yy231; - goto yy249; + goto yy93; + goto yy232; } else { if (yych <= '`') - goto yy231; + goto yy93; if (yych <= 'z') - goto yy249; - goto yy231; + goto yy232; + goto yy93; } } - yy251: - yych = *++p; - if (yych != '>') - goto yy231; - yy252: - ++p; - { return (bufsize_t)(p - start); } - yy254: + yy231: yych = *++p; - if (yych == '-') - goto yy264; - if (yych == '>') - goto yy231; - goto yy263; - yy255: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy255; + if (yych <= '9') { + if (yych == '-') + goto yy233; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '>') - goto yy252; - goto yy231; + yy232: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy235; + goto yy99; } else { - if (yych <= 0xDF) - goto yy272; - if (yych <= 0xE0) - goto yy273; - goto yy274; + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy234; + goto yy93; } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy275; - if (yych <= 0xEF) - goto yy274; - goto yy276; + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy234; } else { - if (yych <= 0xF3) - goto yy277; - if (yych <= 0xF4) - goto yy278; - goto yy231; + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy234; + goto yy93; } } - yy257: + yy233: yych = *++p; - if (yych == 'D') - goto yy279; - if (yych == 'd') - goto yy279; - goto yy231; - yy258: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy258; - goto yy231; + if (yych <= '9') { + if (yych == '-') + goto yy235; + if (yych <= '/') + goto yy93; } else { - if (yych <= ' ') - goto yy258; - if (yych == '>') - goto yy252; - goto yy231; - } - yy260: - ++p; + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy234: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy237; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy236; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy236; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy236; + goto yy93; + } + } + yy235: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy237; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy236: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy239; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy238; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy238; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy238; + goto yy93; + } + } + yy237: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy239; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy238: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy241; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy240; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy240; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy240; + goto yy93; + } + } + yy239: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy241; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy240: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy243; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy242; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy242; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy242; + goto yy93; + } + } + yy241: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy243; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy242: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy245; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy244; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy244; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy244; + goto yy93; + } + } + yy243: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy245; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy244: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy247; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy246; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy246; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy246; + goto yy93; + } + } + yy245: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy247; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy246: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy249; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy248; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy248; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy248; + goto yy93; + } + } + yy247: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy249; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy248: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy251; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy250; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy250; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy250; + goto yy93; + } + } + yy249: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy251; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy250: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy253; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy252; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy252; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy252; + goto yy93; + } + } + yy251: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy253; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy252: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy255; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy254; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy254; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy254; + goto yy93; + } + } + yy253: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy255; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy254: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy257; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy256; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy256; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy256; + goto yy93; + } + } + yy255: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy257; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy256: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy259; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy258; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy258; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy258; + goto yy93; + } + } + yy257: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy259; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy258: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy261; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy260; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy260; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy260; + goto yy93; + } + } + yy259: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy261; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy260: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy263; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy262; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy262; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy262; + goto yy93; + } + } + yy261: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy263; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy262: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy265; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy264; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy264; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy264; + goto yy93; + } + } + yy263: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy265; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy264: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy267; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy266; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy266; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy266; + goto yy93; + } + } + yy265: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy267; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy266: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy269; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy268; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy268; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy268; + goto yy93; + } + } + yy267: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy269; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy268: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy271; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy270; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy270; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy270; + goto yy93; + } + } + yy269: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy271; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy270: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy273; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy272; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy272; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy272; + goto yy93; + } + } + yy271: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy273; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy272: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy275; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy274; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy274; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy274; + goto yy93; + } + } + yy273: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy275; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy274: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy277; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy276; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy276; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy276; + goto yy93; + } + } + yy275: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy277; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy276: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy279; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy278; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy278; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy278; + goto yy93; + } + } + yy277: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy279; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy278: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy281; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy280; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy280; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy280; + goto yy93; + } + } + yy279: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy281; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy280: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy283; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy282; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy282; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy282; + goto yy93; + } + } + yy281: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy283; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy282: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy285; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy284; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy284; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy284; + goto yy93; + } + } + yy283: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy285; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy284: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy287; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy286; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy286; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy286; + goto yy93; + } + } + yy285: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy287; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy286: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy289; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy288; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy288; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy288; + goto yy93; + } + } + yy287: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy289; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy288: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy291; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy290; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy290; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy290; + goto yy93; + } + } + yy289: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy291; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy290: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy293; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy292; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy292; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy292; + goto yy93; + } + } + yy291: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy293; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy292: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy295; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy294; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy294; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy294; + goto yy93; + } + } + yy293: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy295; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy294: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy297; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy296; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy296; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy296; + goto yy93; + } + } + yy295: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy297; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy296: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy299; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy298; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy298; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy298; + goto yy93; + } + } + yy297: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy299; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy298: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy301; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy300; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy300; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy300; + goto yy93; + } + } + yy299: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy301; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy300: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy303; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy302; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy302; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy302; + goto yy93; + } + } + yy301: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy303; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy302: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy305; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy304; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy304; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy304; + goto yy93; + } + } + yy303: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy305; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy304: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy307; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy306; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy306; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy306; + goto yy93; + } + } + yy305: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy307; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy306: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy309; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy308; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy308; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy308; + goto yy93; + } + } + yy307: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy309; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy308: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy311; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy310; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy310; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy310; + goto yy93; + } + } + yy309: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy311; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy310: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy313; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy312; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy312; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy312; + goto yy93; + } + } + yy311: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy313; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy312: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy315; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy314; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy314; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy314; + goto yy93; + } + } + yy313: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy315; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy314: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy317; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy316; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy316; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy316; + goto yy93; + } + } + yy315: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy317; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy316: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy319; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy318; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy318; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy318; + goto yy93; + } + } + yy317: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy319; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy318: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy321; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy320; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy320; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy320; + goto yy93; + } + } + yy319: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy321; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy320: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy323; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy322; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy322; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy322; + goto yy93; + } + } + yy321: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy323; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy322: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy325; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy324; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy324; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy324; + goto yy93; + } + } + yy323: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy325; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy324: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy327; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy326; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy326; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy326; + goto yy93; + } + } + yy325: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy327; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy326: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy329; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy328; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy328; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy328; + goto yy93; + } + } + yy327: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy329; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy328: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy331; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy330; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy330; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy330; + goto yy93; + } + } + yy329: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy331; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy330: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy333; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy332; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy332; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy332; + goto yy93; + } + } + yy331: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy333; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy332: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy335; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy334; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy334; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy334; + goto yy93; + } + } + yy333: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy335; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy334: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy337; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy336; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy336; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy336; + goto yy93; + } + } + yy335: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy337; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy336: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy339; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy338; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy338; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy338; + goto yy93; + } + } + yy337: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy339; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy338: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy341; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy340; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy340; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy340; + goto yy93; + } + } + yy339: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy341; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy340: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy343; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy342; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy342; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy342; + goto yy93; + } + } + yy341: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy343; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy342: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy93; + if (yych <= '-') + goto yy345; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy344; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy344; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy344; + goto yy93; + } + } + yy343: + yych = *++p; + if (yych <= '9') { + if (yych == '-') + goto yy345; + if (yych <= '/') + goto yy93; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy93; + } else { + if (yych <= '`') + goto yy93; + if (yych >= '{') + goto yy93; + } + } + yy344: + yych = *++p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= '-') + goto yy93; + goto yy99; + } else { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy225; + goto yy93; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy100; + if (yych <= '@') + goto yy93; + goto yy225; + } else { + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy225; + goto yy93; + } + } + yy345: + ++p; + if ((yych = *p) <= '@') { + if (yych <= '/') + goto yy93; + if (yych <= '9') + goto yy225; + goto yy93; + } else { + if (yych <= 'Z') + goto yy225; + if (yych <= '`') + goto yy93; + if (yych <= 'z') + goto yy225; + goto yy93; + } + } +} + +// Try to match an HTML tag after first <, returning num of chars matched. +bufsize_t _scan_html_tag(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + /* table 1 .. 8: 0 */ + 0, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238, 238, 238, 238, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 238, 239, 234, 239, 239, 239, 239, 236, 239, 239, 239, + 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 238, 238, 174, 231, 239, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 239, 239, 111, 239, 239, 238, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* table 9 .. 11: 256 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 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, + 160, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 128, 0, + 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 0, 0, 0, 0, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; + if (yych <= '>') { + if (yych <= '!') { + if (yych >= '!') + goto yy350; + } else { + if (yych == '/') + goto yy351; + } + } else { + if (yych <= 'Z') { + if (yych <= '?') + goto yy352; + if (yych >= 'A') + goto yy353; + } else { + if (yych <= '`') + goto yy348; + if (yych <= 'z') + goto yy353; + } + } + yy348: + ++p; + yy349 : { return 0; } + yy350: + yych = *(marker = ++p); + if (yybm[0 + yych] & 16) { + goto yy426; + } + if (yych == '-') + goto yy428; + if (yych <= '@') + goto yy349; + if (yych <= '[') + goto yy425; + goto yy349; + yy351: + yych = *(marker = ++p); + if (yych <= '@') + goto yy349; + if (yych <= 'Z') + goto yy421; + if (yych <= '`') + goto yy349; + if (yych <= 'z') + goto yy421; + goto yy349; + yy352: + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy349; + if (yych <= 0x7F) + goto yy405; + if (yych <= 0xC1) + goto yy349; + if (yych <= 0xF4) + goto yy405; + goto yy349; + yy353: + yych = *(marker = ++p); + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych != '-') + goto yy349; + } else { + if (yych <= '/') + goto yy359; + if (yych >= ':') + goto yy349; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy360; + if (yych <= '@') + goto yy349; + } else { + if (yych <= '`') + goto yy349; + if (yych >= '{') + goto yy349; + } + } + yy354: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy354; + } else { + if (yych <= '/') + goto yy359; + if (yych <= '9') + goto yy354; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy360; + if (yych >= 'A') + goto yy354; + } else { + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy354; + } + } + yy356: + p = marker; + goto yy349; + yy357: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych <= '>') { + if (yych <= '9') { + if (yych != '/') + goto yy356; + } else { + if (yych <= ':') + goto yy362; + if (yych <= '=') + goto yy356; + goto yy360; + } + } else { + if (yych <= '^') { + if (yych <= '@') + goto yy356; + if (yych <= 'Z') + goto yy362; + goto yy356; + } else { + if (yych == '`') + goto yy356; + if (yych <= 'z') + goto yy362; + goto yy356; + } + } + yy359: + yych = *++p; + if (yych != '>') + goto yy356; + yy360: + ++p; + { return (bufsize_t)(p - start); } + yy362: + ++p; + yych = *p; + if (yybm[256 + yych] & 128) { + goto yy362; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy356; + } else { + if (yych != ' ') + goto yy356; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy359; + goto yy356; + } else { + if (yych <= '=') + goto yy366; + if (yych <= '>') + goto yy360; + goto yy356; + } + } + yy364: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy356; + if (yych <= '\r') + goto yy364; + if (yych <= 0x1F) + goto yy356; + goto yy364; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy356; + goto yy359; + } else { + if (yych == ':') + goto yy362; + goto yy356; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') + goto yy366; + if (yych <= '>') + goto yy360; + if (yych <= '@') + goto yy356; + goto yy362; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy356; + goto yy362; + } else { + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy362; + goto yy356; + } + } + } + yy366: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy368; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy356; + if (yych >= '!') + goto yy379; + } else { + if (yych <= '\'') + goto yy377; + if (yych <= 0xC1) + goto yy356; + if (yych <= 0xDF) + goto yy370; + goto yy371; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy368; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy356; + if (yych <= ' ') + goto yy402; + if (yych <= '"') + goto yy379; + goto yy377; + } else { + if (yych == '>') + goto yy360; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + yy368: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy368; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy356; + if (yych <= ' ') + goto yy396; + goto yy356; + } else { + if (yych <= '>') + goto yy360; + if (yych <= 0xC1) + goto yy356; + if (yych >= 0xE0) + goto yy371; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + yy370: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy368; + goto yy356; + yy371: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy370; + goto yy356; + yy372: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy370; + goto yy356; + yy373: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy372; + goto yy356; + yy374: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy372; + goto yy356; + yy375: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy372; + goto yy356; + yy376: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy370; + goto yy356; + yy377: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy377; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy356; + if (yych <= '\'') + goto yy388; + goto yy356; + } else { + if (yych <= 0xDF) + goto yy389; + if (yych <= 0xE0) + goto yy390; + goto yy391; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy395; + if (yych <= 0xEF) + goto yy391; + goto yy392; + } else { + if (yych <= 0xF3) + goto yy393; + if (yych <= 0xF4) + goto yy394; + goto yy356; + } + } + yy379: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy379; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy356; + if (yych <= '"') + goto yy388; + goto yy356; + } else { + if (yych <= 0xDF) + goto yy381; + if (yych <= 0xE0) + goto yy382; + goto yy383; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy387; + if (yych <= 0xEF) + goto yy383; + goto yy384; + } else { + if (yych <= 0xF3) + goto yy385; + if (yych <= 0xF4) + goto yy386; + goto yy356; + } + } + yy381: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy379; + goto yy356; + yy382: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy381; + goto yy356; + yy383: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy381; + goto yy356; + yy384: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy383; + goto yy356; + yy385: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy383; + goto yy356; + yy386: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy383; + goto yy356; + yy387: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy381; + goto yy356; + yy388: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy357; + } + if (yych == '/') + goto yy359; + if (yych == '>') + goto yy360; + goto yy356; + yy389: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy377; + goto yy356; + yy390: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy389; + goto yy356; + yy391: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy389; + goto yy356; + yy392: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy391; + goto yy356; + yy393: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy391; + goto yy356; + yy394: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy391; + goto yy356; + yy395: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy389; + goto yy356; + yy396: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + goto yy396; + } else { + if (yych == ' ') + goto yy396; + if (yych <= '!') + goto yy368; + goto yy356; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy356; + if (yych <= '9') + goto yy368; + } else { + if (yych <= ';') + goto yy368; + if (yych <= '=') + goto yy356; + if (yych <= '>') + goto yy360; + goto yy368; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + if (yych >= '`') + goto yy356; + } else { + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + } + yy398: + ++p; yych = *p; - if (yybm[0 + yych] & 4) { - goto yy260; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + if (yych >= 0x0E) + goto yy368; + } else { + if (yych <= ' ') + goto yy400; + if (yych == '"') + goto yy356; + goto yy368; + } + } else { + if (yych <= '/') { + if (yych <= '\'') + goto yy356; + if (yych <= ',') + goto yy368; + if (yych <= '.') + goto yy398; + goto yy368; + } else { + if (yych <= ';') { + if (yych <= ':') + goto yy398; + goto yy368; + } else { + if (yych <= '<') + goto yy356; + if (yych <= '=') + goto yy366; + goto yy360; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy368; + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + goto yy398; + } else { + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + goto yy356; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy370; + if (yych <= 0xE0) + goto yy371; + if (yych <= 0xEC) + goto yy372; + goto yy376; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy372; + goto yy373; + } else { + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + } } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy231; - goto yy280; + yy400: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + if (yych <= '\r') + goto yy400; + goto yy368; + } else { + if (yych <= ' ') + goto yy400; + if (yych == '"') + goto yy356; + goto yy368; + } } else { - if (yych == ' ') - goto yy280; - goto yy231; + if (yych <= ';') { + if (yych <= '\'') + goto yy356; + if (yych == ':') + goto yy398; + goto yy368; + } else { + if (yych <= '<') + goto yy356; + if (yych <= '=') + goto yy366; + if (yych <= '>') + goto yy360; + goto yy368; + } } } else { - if (yych <= '<') { - if (yych <= '/') - goto yy251; - goto yy231; + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + if (yych <= '_') + goto yy398; + goto yy356; + } else { + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } } else { - if (yych <= '=') - goto yy282; - if (yych <= '>') - goto yy252; - goto yy231; + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } } } - yy262: + yy402: ++p; yych = *p; - yy263: + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy368; + goto yy402; + } else { + if (yych == ' ') + goto yy402; + if (yych <= '!') + goto yy368; + goto yy379; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy377; + if (yych <= '9') + goto yy368; + goto yy398; + } else { + if (yych <= ';') + goto yy368; + if (yych <= '=') + goto yy356; + if (yych <= '>') + goto yy360; + goto yy368; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy398; + if (yych <= '^') + goto yy368; + if (yych <= '_') + goto yy398; + goto yy356; + } else { + if (yych <= 'z') + goto yy398; + if (yych <= 0x7F) + goto yy368; + if (yych <= 0xC1) + goto yy356; + goto yy370; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy371; + if (yych == 0xED) + goto yy376; + goto yy372; + } else { + if (yych <= 0xF0) + goto yy373; + if (yych <= 0xF3) + goto yy374; + if (yych <= 0xF4) + goto yy375; + goto yy356; + } + } + } + yy404: + ++p; + yych = *p; + yy405: if (yybm[0 + yych] & 8) { - goto yy262; + goto yy404; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy231; - if (yych <= '-') - goto yy283; - goto yy231; + goto yy356; + if (yych <= '?') + goto yy413; + goto yy356; } else { if (yych <= 0xDF) - goto yy265; + goto yy406; if (yych <= 0xE0) - goto yy266; - goto yy267; + goto yy407; + goto yy408; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy268; + goto yy412; if (yych <= 0xEF) - goto yy267; - goto yy269; + goto yy408; + goto yy409; } else { if (yych <= 0xF3) - goto yy270; + goto yy410; if (yych <= 0xF4) - goto yy271; - goto yy231; + goto yy411; + goto yy356; } } - yy264: - yych = *++p; - if (yych == '-') - goto yy251; - if (yych == '>') - goto yy231; - goto yy263; - yy265: + yy406: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy262; - goto yy231; - yy266: + goto yy404; + goto yy356; + yy407: ++p; yych = *p; if (yych <= 0x9F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy265; - goto yy231; - yy267: + goto yy406; + goto yy356; + yy408: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy265; - goto yy231; - yy268: + goto yy406; + goto yy356; + yy409: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy408; + goto yy356; + yy410: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy265; - goto yy231; - yy269: + goto yy356; + if (yych <= 0xBF) + goto yy408; + goto yy356; + yy411: ++p; yych = *p; + if (yych <= 0x7F) + goto yy356; if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy267; - goto yy231; - yy270: + goto yy408; + goto yy356; + yy412: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy267; - goto yy231; - yy271: + goto yy356; + if (yych <= 0x9F) + goto yy406; + goto yy356; + yy413: ++p; yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy267; - goto yy231; - yy272: + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy356; + if (yych <= '=') + goto yy404; + goto yy360; + } else { + if (yych <= 0x7F) + goto yy404; + if (yych <= 0xC1) + goto yy356; + if (yych >= 0xE0) + goto yy415; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy420; + goto yy416; + } else { + if (yych <= 0xF0) + goto yy417; + if (yych <= 0xF3) + goto yy418; + if (yych <= 0xF4) + goto yy419; + goto yy356; + } + } + yy414: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy255; - goto yy231; - yy273: + goto yy404; + goto yy356; + yy415: ++p; yych = *p; if (yych <= 0x9F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy272; - goto yy231; - yy274: + goto yy414; + goto yy356; + yy416: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy272; - goto yy231; - yy275: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy272; - goto yy231; - yy276: + goto yy414; + goto yy356; + yy417: ++p; yych = *p; if (yych <= 0x8F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy274; - goto yy231; - yy277: + goto yy416; + goto yy356; + yy418: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy274; - goto yy231; - yy278: + goto yy416; + goto yy356; + yy419: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0x8F) - goto yy274; - goto yy231; - yy279: - yych = *++p; - if (yych == 'A') - goto yy284; - if (yych == 'a') - goto yy284; - goto yy231; - yy280: + goto yy416; + goto yy356; + yy420: ++p; yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy280; - if (yych <= 0x1F) - goto yy231; - goto yy280; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy231; - goto yy251; - } else { - if (yych == ':') - goto yy260; - goto yy231; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') - goto yy282; - if (yych <= '>') - goto yy252; - if (yych <= '@') - goto yy231; - goto yy260; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy231; - goto yy260; - } else { - if (yych <= '`') - goto yy231; - if (yych <= 'z') - goto yy260; - goto yy231; - } - } - } - yy282: + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy414; + goto yy356; + yy421: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy285; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) - goto yy231; - if (yych <= ' ') - goto yy287; - goto yy288; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy356; + if (yych >= 0x0E) + goto yy356; } else { - if (yych <= '\'') - goto yy290; - if (yych <= 0xC1) - goto yy231; - if (yych <= 0xDF) - goto yy292; - goto yy293; + if (yych <= ' ') + goto yy423; + if (yych == '-') + goto yy421; + goto yy356; } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy295; - goto yy294; + if (yych <= '@') { + if (yych <= '9') + goto yy421; + if (yych == '>') + goto yy360; + goto yy356; } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; + if (yych <= 'Z') + goto yy421; + if (yych <= '`') + goto yy356; + if (yych <= 'z') + goto yy421; + goto yy356; } } - yy283: + yy423: ++p; yych = *p; - if (yybm[0 + yych] & 8) { - goto yy262; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '-') - goto yy251; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy265; - if (yych <= 0xE0) - goto yy266; - goto yy267; - } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy356; + if (yych <= '\r') + goto yy423; + goto yy356; } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy268; - if (yych <= 0xEF) - goto yy267; - goto yy269; - } else { - if (yych <= 0xF3) - goto yy270; - if (yych <= 0xF4) - goto yy271; - goto yy231; - } + if (yych <= ' ') + goto yy423; + if (yych == '>') + goto yy360; + goto yy356; } - yy284: + yy425: yych = *++p; - if (yych == 'T') - goto yy299; - if (yych == 't') - goto yy299; - goto yy231; - yy285: + if (yych == 'C') + goto yy461; + if (yych == 'c') + goto yy461; + goto yy356; + yy426: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy285; + goto yy426; } + if (yych <= 0x08) + goto yy356; + if (yych <= '\r') + goto yy450; + if (yych == ' ') + goto yy450; + goto yy356; + yy428: + yych = *++p; + if (yych != '-') + goto yy356; + yych = *++p; if (yych <= 0xE0) { if (yych <= '=') { - if (yych <= 0x00) - goto yy231; - if (yych <= ' ') - goto yy300; - goto yy231; + if (yych != '-') + goto yy432; } else { if (yych <= '>') - goto yy252; - if (yych <= 0xC1) - goto yy231; - if (yych <= 0xDF) - goto yy292; - goto yy293; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy295; - goto yy294; - } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } - } - yy287: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy285; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) - goto yy231; - if (yych <= ' ') - goto yy302; - if (yych >= '#') - goto yy290; - } else { - if (yych == '>') - goto yy252; - if (yych <= 0xC1) - goto yy231; - goto yy292; + goto yy356; + if (yych <= 0xC1) + goto yy432; + if (yych <= 0xDF) + goto yy433; + goto yy434; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy293; if (yych == 0xED) - goto yy295; - goto yy294; + goto yy439; + goto yy435; } else { if (yych <= 0xF0) - goto yy296; + goto yy436; if (yych <= 0xF3) - goto yy297; + goto yy437; if (yych <= 0xF4) - goto yy298; - goto yy231; + goto yy438; + goto yy432; } } - yy288: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy288; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '"') - goto yy304; - goto yy231; + yych = *++p; + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych == '-') + goto yy449; + goto yy432; } else { + if (yych <= '>') + goto yy356; + if (yych <= 0xC1) + goto yy432; if (yych <= 0xDF) - goto yy305; - if (yych <= 0xE0) - goto yy306; - goto yy307; + goto yy433; + goto yy434; } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy308; - if (yych <= 0xEF) - goto yy307; - goto yy309; + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy439; + goto yy435; } else { + if (yych <= 0xF0) + goto yy436; if (yych <= 0xF3) - goto yy310; + goto yy437; if (yych <= 0xF4) - goto yy311; - goto yy231; + goto yy438; + goto yy432; } } - yy290: + yy431: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy290; + yy432: + if (yybm[0 + yych] & 32) { + goto yy431; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy231; - if (yych <= '\'') - goto yy304; - goto yy231; + goto yy356; + if (yych <= '-') + goto yy440; + goto yy356; } else { if (yych <= 0xDF) - goto yy312; + goto yy441; if (yych <= 0xE0) - goto yy313; - goto yy314; + goto yy442; + goto yy443; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy315; + goto yy447; if (yych <= 0xEF) - goto yy314; - goto yy316; + goto yy443; + goto yy444; } else { if (yych <= 0xF3) - goto yy317; + goto yy445; if (yych <= 0xF4) - goto yy318; - goto yy231; + goto yy446; + goto yy356; } } - yy292: - ++p; - yych = *p; + yy433: + yych = *++p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy285; - goto yy231; - yy293: - ++p; - yych = *p; + goto yy431; + goto yy356; + yy434: + yych = *++p; if (yych <= 0x9F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy292; - goto yy231; - yy294: - ++p; - yych = *p; + goto yy433; + goto yy356; + yy435: + yych = *++p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy292; - goto yy231; - yy295: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy292; - goto yy231; - yy296: - ++p; - yych = *p; + goto yy433; + goto yy356; + yy436: + yych = *++p; if (yych <= 0x8F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy294; - goto yy231; - yy297: - ++p; - yych = *p; + goto yy435; + goto yy356; + yy437: + yych = *++p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy294; - goto yy231; - yy298: - ++p; - yych = *p; + goto yy435; + goto yy356; + yy438: + yych = *++p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0x8F) - goto yy294; - goto yy231; - yy299: + goto yy435; + goto yy356; + yy439: yych = *++p; - if (yych == 'A') - goto yy319; - if (yych == 'a') - goto yy319; - goto yy231; - yy300: + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy433; + goto yy356; + yy440: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy231; - if (yych <= 0x08) - goto yy285; - goto yy300; - } else { - if (yych == ' ') - goto yy300; - if (yych <= '!') - goto yy285; - goto yy231; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy231; - if (yych <= '9') - goto yy285; - goto yy320; - } else { - if (yych <= ';') - goto yy285; - if (yych <= '=') - goto yy231; - if (yych <= '>') - goto yy252; - goto yy285; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy320; - if (yych <= '^') - goto yy285; - if (yych <= '_') - goto yy320; - goto yy231; - } else { - if (yych <= 'z') - goto yy320; - if (yych <= 0x7F) - goto yy285; - if (yych <= 0xC1) - goto yy231; - goto yy292; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy293; - if (yych == 0xED) - goto yy295; - goto yy294; - } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } - } + if (yybm[0 + yych] & 32) { + goto yy431; } - yy302: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy231; - if (yych <= 0x08) - goto yy285; - goto yy302; - } else { - if (yych == ' ') - goto yy302; - if (yych <= '!') - goto yy285; - goto yy288; - } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy356; + if (yych <= '-') + goto yy448; + goto yy356; } else { - if (yych <= ':') { - if (yych == '\'') - goto yy290; - if (yych <= '9') - goto yy285; - goto yy320; - } else { - if (yych <= ';') - goto yy285; - if (yych <= '=') - goto yy231; - if (yych <= '>') - goto yy252; - goto yy285; - } + if (yych <= 0xDF) + goto yy441; + if (yych <= 0xE0) + goto yy442; + goto yy443; } } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy320; - if (yych <= '^') - goto yy285; - if (yych <= '_') - goto yy320; - goto yy231; - } else { - if (yych <= 'z') - goto yy320; - if (yych <= 0x7F) - goto yy285; - if (yych <= 0xC1) - goto yy231; - goto yy292; - } + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy447; + if (yych <= 0xEF) + goto yy443; + goto yy444; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy293; - if (yych == 0xED) - goto yy295; - goto yy294; - } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } + if (yych <= 0xF3) + goto yy445; + if (yych <= 0xF4) + goto yy446; + goto yy356; } } - yy304: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych == '/') - goto yy251; - if (yych == '>') - goto yy252; - goto yy231; - yy305: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy288; - goto yy231; - yy306: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy305; - goto yy231; - yy307: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy305; - goto yy231; - yy308: + yy441: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy305; - goto yy231; - yy309: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy307; - goto yy231; - yy310: + goto yy431; + goto yy356; + yy442: ++p; yych = *p; - if (yych <= 0x7F) - goto yy231; + if (yych <= 0x9F) + goto yy356; if (yych <= 0xBF) - goto yy307; - goto yy231; - yy311: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy307; - goto yy231; - yy312: + goto yy441; + goto yy356; + yy443: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy290; - goto yy231; - yy313: + goto yy441; + goto yy356; + yy444: ++p; yych = *p; - if (yych <= 0x9F) - goto yy231; + if (yych <= 0x8F) + goto yy356; if (yych <= 0xBF) - goto yy312; - goto yy231; - yy314: + goto yy443; + goto yy356; + yy445: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy312; - goto yy231; - yy315: + goto yy443; + goto yy356; + yy446: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy312; - goto yy231; - yy316: - ++p; - yych = *p; + goto yy356; if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy314; - goto yy231; - yy317: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy314; - goto yy231; - yy318: + goto yy443; + goto yy356; + yy447: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy314; - goto yy231; - yy319: + goto yy356; + if (yych <= 0x9F) + goto yy441; + goto yy356; + yy448: yych = *++p; - if (yych == '[') - goto yy322; - goto yy231; - yy320: + if (yych == '>') + goto yy360; + goto yy356; + yy449: + yych = *++p; + if (yych == '>') + goto yy360; + goto yy356; + yy450: ++p; yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy231; - if (yych <= 0x08) - goto yy285; - if (yych <= '\r') - goto yy324; - goto yy285; - } else { - if (yych <= ' ') - goto yy324; - if (yych == '"') - goto yy231; - goto yy285; - } + if (yych <= 0xC1) { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy356; + if (yych <= 0x08) + goto yy452; + if (yych <= '\r') + goto yy450; } else { - if (yych <= '/') { - if (yych <= '\'') - goto yy231; - if (yych <= ',') - goto yy285; - if (yych <= '.') - goto yy320; - goto yy285; + if (yych <= '=') { + if (yych <= ' ') + goto yy450; } else { - if (yych <= ';') { - if (yych <= ':') - goto yy320; - goto yy285; - } else { - if (yych <= '<') - goto yy231; - if (yych <= '=') - goto yy282; - goto yy252; - } + if (yych <= '>') + goto yy360; + if (yych >= 0x80) + goto yy356; } } } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') - goto yy285; - if (yych <= 'Z') - goto yy320; - if (yych <= '^') - goto yy285; - goto yy320; - } else { - if (yych <= '`') - goto yy231; - if (yych <= 'z') - goto yy320; - if (yych <= 0x7F) - goto yy285; - goto yy231; - } + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy454; + if (yych <= 0xE0) + goto yy455; + if (yych <= 0xEC) + goto yy456; + goto yy460; } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy292; - if (yych <= 0xE0) - goto yy293; - if (yych <= 0xEC) - goto yy294; - goto yy295; + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy456; + goto yy457; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy294; - goto yy296; - } else { - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } + if (yych <= 0xF3) + goto yy458; + if (yych <= 0xF4) + goto yy459; + goto yy356; } } } - yy322: + yy452: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy322; + if (yybm[0 + yych] & 64) { + goto yy452; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy231; - if (yych <= ']') - goto yy326; - goto yy231; + goto yy356; + if (yych <= '>') + goto yy360; + goto yy356; } else { if (yych <= 0xDF) - goto yy327; + goto yy454; if (yych <= 0xE0) - goto yy328; - goto yy329; + goto yy455; + goto yy456; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy330; + goto yy460; if (yych <= 0xEF) - goto yy329; - goto yy331; + goto yy456; + goto yy457; } else { if (yych <= 0xF3) - goto yy332; + goto yy458; if (yych <= 0xF4) - goto yy333; - goto yy231; + goto yy459; + goto yy356; } } - yy324: + yy454: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy231; - if (yych <= 0x08) - goto yy285; - if (yych <= '\r') - goto yy324; - goto yy285; - } else { - if (yych <= ' ') - goto yy324; - if (yych == '"') - goto yy231; - goto yy285; - } - } else { - if (yych <= ';') { - if (yych <= '\'') - goto yy231; - if (yych == ':') - goto yy320; - goto yy285; - } else { - if (yych <= '<') - goto yy231; - if (yych <= '=') - goto yy282; - if (yych <= '>') - goto yy252; - goto yy285; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy320; - if (yych <= '^') - goto yy285; - if (yych <= '_') - goto yy320; - goto yy231; - } else { - if (yych <= 'z') - goto yy320; - if (yych <= 0x7F) - goto yy285; - if (yych <= 0xC1) - goto yy231; - goto yy292; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy293; - if (yych == 0xED) - goto yy295; - goto yy294; - } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } - } - } - yy326: + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy452; + goto yy356; + yy455: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy454; + goto yy356; + yy456: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy454; + goto yy356; + yy457: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy456; + goto yy356; + yy458: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy456; + goto yy356; + yy459: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy456; + goto yy356; + yy460: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy454; + goto yy356; + yy461: + yych = *++p; + if (yych == 'D') + goto yy462; + if (yych != 'd') + goto yy356; + yy462: + yych = *++p; + if (yych == 'A') + goto yy463; + if (yych != 'a') + goto yy356; + yy463: + yych = *++p; + if (yych == 'T') + goto yy464; + if (yych != 't') + goto yy356; + yy464: + yych = *++p; + if (yych == 'A') + goto yy465; + if (yych != 'a') + goto yy356; + yy465: + yych = *++p; + if (yych != '[') + goto yy356; + yy466: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy322; + goto yy466; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy231; + goto yy356; if (yych <= ']') - goto yy334; - goto yy231; + goto yy475; + goto yy356; } else { if (yych <= 0xDF) - goto yy327; + goto yy468; if (yych <= 0xE0) - goto yy328; - goto yy329; + goto yy469; + goto yy470; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy330; + goto yy474; if (yych <= 0xEF) - goto yy329; - goto yy331; + goto yy470; + goto yy471; } else { if (yych <= 0xF3) - goto yy332; + goto yy472; if (yych <= 0xF4) - goto yy333; - goto yy231; + goto yy473; + goto yy356; } } - yy327: + yy468: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy322; - goto yy231; - yy328: + goto yy466; + goto yy356; + yy469: ++p; yych = *p; if (yych <= 0x9F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy327; - goto yy231; - yy329: + goto yy468; + goto yy356; + yy470: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy327; - goto yy231; - yy330: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy327; - goto yy231; - yy331: + goto yy468; + goto yy356; + yy471: ++p; yych = *p; if (yych <= 0x8F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy329; - goto yy231; - yy332: + goto yy470; + goto yy356; + yy472: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0xBF) - goto yy329; - goto yy231; - yy333: + goto yy470; + goto yy356; + yy473: ++p; yych = *p; if (yych <= 0x7F) - goto yy231; + goto yy356; if (yych <= 0x8F) - goto yy329; - goto yy231; - yy334: + goto yy470; + goto yy356; + yy474: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy468; + goto yy356; + yy475: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy466; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy356; + if (yych >= '^') + goto yy356; + } else { + if (yych <= 0xDF) + goto yy477; + if (yych <= 0xE0) + goto yy478; + goto yy479; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy483; + if (yych <= 0xEF) + goto yy479; + goto yy480; + } else { + if (yych <= 0xF3) + goto yy481; + if (yych <= 0xF4) + goto yy482; + goto yy356; + } + } ++p; yych = *p; if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) - goto yy231; + goto yy356; if (yych <= '=') - goto yy322; - goto yy252; + goto yy466; + goto yy360; } else { if (yych <= 0x7F) - goto yy322; + goto yy466; if (yych <= 0xC1) - goto yy231; + goto yy356; if (yych <= 0xDF) - goto yy327; - goto yy328; + goto yy484; + goto yy485; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy330; - goto yy329; + goto yy490; + goto yy486; } else { if (yych <= 0xF0) - goto yy331; + goto yy487; if (yych <= 0xF3) - goto yy332; + goto yy488; if (yych <= 0xF4) - goto yy333; - goto yy231; + goto yy489; + goto yy356; } } + yy477: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy466; + goto yy356; + yy478: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy477; + goto yy356; + yy479: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy477; + goto yy356; + yy480: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy479; + goto yy356; + yy481: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy479; + goto yy356; + yy482: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy479; + goto yy356; + yy483: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy477; + goto yy356; + yy484: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy466; + goto yy356; + yy485: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy356; + if (yych <= 0xBF) + goto yy484; + goto yy356; + yy486: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy484; + goto yy356; + yy487: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy356; + if (yych <= 0xBF) + goto yy486; + goto yy356; + yy488: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0xBF) + goto yy486; + goto yy356; + yy489: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x8F) + goto yy486; + goto yy356; + yy490: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy356; + if (yych <= 0x9F) + goto yy484; + goto yy356; } } @@ -6549,216 +9754,239 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '<') - goto yy339; + goto yy495; ++p; - yy338 : { return 0; } - yy339: + yy494 : { return 0; } + yy495: yych = *(marker = ++p); switch (yych) { case '!': - goto yy340; + goto yy513; case '/': - goto yy342; + goto yy496; case '?': - goto yy343; + goto yy514; case 'A': case 'a': - goto yy345; + goto yy499; case 'B': case 'b': - goto yy346; + goto yy500; case 'C': case 'c': - goto yy347; + goto yy501; case 'D': case 'd': - goto yy348; + goto yy502; case 'F': case 'f': - goto yy349; + goto yy503; case 'H': case 'h': - goto yy350; + goto yy504; case 'I': case 'i': - goto yy351; + goto yy505; case 'L': case 'l': - goto yy352; + goto yy506; case 'M': case 'm': - goto yy353; + goto yy507; case 'N': case 'n': - goto yy354; + goto yy508; case 'O': case 'o': - goto yy355; + goto yy509; case 'P': case 'p': - goto yy356; + goto yy498; case 'S': case 's': - goto yy357; + goto yy510; case 'T': case 't': - goto yy358; + goto yy511; case 'U': case 'u': - goto yy359; + goto yy512; default: - goto yy338; - } - yy340: - yych = *++p; - if (yych <= '@') { - if (yych == '-') - goto yy360; - } else { - if (yych <= 'Z') - goto yy361; - if (yych <= '[') - goto yy363; + goto yy494; } - yy341: - p = marker; - goto yy338; - yy342: + yy496: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy345; + goto yy499; case 'B': case 'b': - goto yy346; + goto yy500; case 'C': case 'c': - goto yy347; + goto yy501; case 'D': case 'd': - goto yy348; + goto yy502; case 'F': case 'f': - goto yy349; + goto yy503; case 'H': case 'h': - goto yy350; + goto yy504; case 'I': case 'i': - goto yy351; + goto yy505; case 'L': case 'l': - goto yy352; + goto yy506; case 'M': case 'm': - goto yy353; + goto yy507; case 'N': case 'n': - goto yy354; + goto yy508; case 'O': case 'o': - goto yy355; + goto yy509; case 'P': case 'p': - goto yy364; + goto yy698; case 'S': case 's': - goto yy365; + goto yy699; case 'T': case 't': - goto yy358; + goto yy511; case 'U': case 'u': - goto yy359; + goto yy512; default: - goto yy341; + goto yy497; } - yy343: - ++p; - { return 3; } - yy345: + yy497: + p = marker; + goto yy494; + yy498: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy497; + if (yych <= '\r') + goto yy530; + if (yych <= 0x1F) + goto yy497; + goto yy530; + } else { + if (yych == '/') + goto yy532; + if (yych <= '=') + goto yy497; + goto yy530; + } + } else { + if (yych <= 'R') { + if (yych == 'A') + goto yy695; + if (yych <= 'Q') + goto yy497; + goto yy694; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy497; + goto yy695; + } else { + if (yych == 'r') + goto yy694; + goto yy497; + } + } + } + yy499: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= 'C') - goto yy341; - goto yy366; + goto yy497; + goto yy683; } else { if (yych <= 'Q') - goto yy341; + goto yy497; if (yych <= 'R') - goto yy367; - goto yy368; + goto yy682; + goto yy681; } } else { if (yych <= 'q') { if (yych == 'd') - goto yy366; - goto yy341; + goto yy683; + goto yy497; } else { if (yych <= 'r') - goto yy367; + goto yy682; if (yych <= 's') - goto yy368; - goto yy341; + goto yy681; + goto yy497; } } - yy346: + yy500: yych = *++p; if (yych <= 'O') { if (yych <= 'K') { if (yych == 'A') - goto yy369; - goto yy341; + goto yy667; + goto yy497; } else { if (yych <= 'L') - goto yy370; + goto yy666; if (yych <= 'N') - goto yy341; - goto yy371; + goto yy497; + goto yy665; } } else { if (yych <= 'k') { if (yych == 'a') - goto yy369; - goto yy341; + goto yy667; + goto yy497; } else { if (yych <= 'l') - goto yy370; + goto yy666; if (yych == 'o') - goto yy371; - goto yy341; + goto yy665; + goto yy497; } } - yy347: + yy501: yych = *++p; if (yych <= 'O') { if (yych <= 'D') { if (yych == 'A') - goto yy372; - goto yy341; + goto yy652; + goto yy497; } else { if (yych <= 'E') - goto yy373; + goto yy651; if (yych <= 'N') - goto yy341; - goto yy374; + goto yy497; + goto yy650; } } else { if (yych <= 'd') { if (yych == 'a') - goto yy372; - goto yy341; + goto yy652; + goto yy497; } else { if (yych <= 'e') - goto yy373; + goto yy651; if (yych == 'o') - goto yy374; - goto yy341; + goto yy650; + goto yy497; } } - yy348: + yy502: yych = *++p; switch (yych) { case 'D': @@ -6767,1488 +9995,1666 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'd': case 'l': case 't': - goto yy375; + goto yy529; case 'E': case 'e': - goto yy376; + goto yy642; case 'I': case 'i': - goto yy377; + goto yy641; default: - goto yy341; + goto yy497; } - yy349: + yy503: yych = *++p; if (yych <= 'R') { if (yych <= 'N') { if (yych == 'I') - goto yy378; - goto yy341; + goto yy617; + goto yy497; } else { if (yych <= 'O') - goto yy379; + goto yy616; if (yych <= 'Q') - goto yy341; - goto yy380; + goto yy497; + goto yy615; } } else { if (yych <= 'n') { if (yych == 'i') - goto yy378; - goto yy341; + goto yy617; + goto yy497; } else { if (yych <= 'o') - goto yy379; + goto yy616; if (yych == 'r') - goto yy380; - goto yy341; + goto yy615; + goto yy497; } } - yy350: + yy504: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= '0') - goto yy341; + goto yy497; if (yych <= '6') - goto yy375; - goto yy341; + goto yy529; + goto yy497; } else { if (yych <= 'E') - goto yy381; + goto yy610; if (yych == 'R') - goto yy375; - goto yy341; + goto yy529; + goto yy497; } } else { if (yych <= 'q') { if (yych <= 'T') - goto yy382; + goto yy609; if (yych == 'e') - goto yy381; - goto yy341; + goto yy610; + goto yy497; } else { if (yych <= 'r') - goto yy375; + goto yy529; if (yych == 't') - goto yy382; - goto yy341; + goto yy609; + goto yy497; } } - yy351: + yy505: yych = *++p; if (yych == 'F') - goto yy383; + goto yy605; if (yych == 'f') - goto yy383; - goto yy341; - yy352: + goto yy605; + goto yy497; + yy506: yych = *++p; if (yych <= 'I') { if (yych == 'E') - goto yy384; + goto yy600; if (yych <= 'H') - goto yy341; - goto yy385; + goto yy497; + goto yy599; } else { if (yych <= 'e') { if (yych <= 'd') - goto yy341; - goto yy384; + goto yy497; + goto yy600; } else { if (yych == 'i') - goto yy385; - goto yy341; + goto yy599; + goto yy497; } } - yy353: + yy507: yych = *++p; if (yych <= 'E') { if (yych == 'A') - goto yy386; + goto yy591; if (yych <= 'D') - goto yy341; - goto yy387; + goto yy497; + goto yy590; } else { if (yych <= 'a') { if (yych <= '`') - goto yy341; - goto yy386; + goto yy497; + goto yy591; } else { if (yych == 'e') - goto yy387; - goto yy341; + goto yy590; + goto yy497; } } - yy354: + yy508: yych = *++p; if (yych <= 'O') { if (yych == 'A') - goto yy388; + goto yy584; if (yych <= 'N') - goto yy341; - goto yy389; + goto yy497; + goto yy583; } else { if (yych <= 'a') { if (yych <= '`') - goto yy341; - goto yy388; + goto yy497; + goto yy584; } else { if (yych == 'o') - goto yy389; - goto yy341; + goto yy583; + goto yy497; } } - yy355: + yy509: yych = *++p; if (yych <= 'P') { if (yych == 'L') - goto yy375; + goto yy529; if (yych <= 'O') - goto yy341; - goto yy390; + goto yy497; + goto yy575; } else { if (yych <= 'l') { if (yych <= 'k') - goto yy341; - goto yy375; + goto yy497; + goto yy529; } else { if (yych == 'p') - goto yy390; - goto yy341; - } - } - yy356: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy391; - if (yych <= 0x1F) - goto yy341; - goto yy391; - } else { - if (yych == '/') - goto yy393; - if (yych <= '=') - goto yy341; - goto yy391; - } - } else { - if (yych <= 'R') { - if (yych == 'A') - goto yy394; - if (yych <= 'Q') - goto yy341; - goto yy395; - } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy341; - goto yy394; - } else { - if (yych == 'r') - goto yy395; - goto yy341; - } + goto yy575; + goto yy497; } } - yy357: + yy510: yych = *++p; switch (yych) { case 'C': case 'c': - goto yy396; + goto yy552; case 'E': case 'e': - goto yy397; + goto yy555; case 'O': case 'o': - goto yy398; + goto yy554; case 'T': case 't': - goto yy399; + goto yy551; case 'U': case 'u': - goto yy400; + goto yy553; default: - goto yy341; + goto yy497; } - yy358: + yy511: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy401; + goto yy538; case 'B': case 'b': - goto yy402; + goto yy537; case 'D': case 'd': - goto yy375; + goto yy529; case 'F': case 'f': - goto yy403; + goto yy536; case 'H': case 'h': - goto yy404; + goto yy535; case 'I': case 'i': - goto yy405; + goto yy534; case 'R': case 'r': - goto yy406; + goto yy533; default: - goto yy341; + goto yy497; } - yy359: + yy512: yych = *++p; if (yych == 'L') - goto yy375; + goto yy529; if (yych == 'l') - goto yy375; - goto yy341; - yy360: + goto yy529; + goto yy497; + yy513: + yych = *++p; + if (yych <= '@') { + if (yych == '-') + goto yy516; + goto yy497; + } else { + if (yych <= 'Z') + goto yy517; + if (yych <= '[') + goto yy519; + goto yy497; + } + yy514: + ++p; + { return 3; } + yy516: yych = *++p; if (yych == '-') - goto yy407; - goto yy341; - yy361: + goto yy527; + goto yy497; + yy517: ++p; { return 4; } - yy363: + yy519: yych = *++p; if (yych == 'C') - goto yy409; - if (yych == 'c') - goto yy409; - goto yy341; - yy364: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy391; - goto yy341; - } else { - if (yych <= ' ') - goto yy391; - if (yych <= '.') - goto yy341; - goto yy393; - } - } else { - if (yych <= '@') { - if (yych == '>') - goto yy391; - goto yy341; - } else { - if (yych <= 'A') - goto yy394; - if (yych == 'a') - goto yy394; - goto yy341; - } - } - yy365: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'E') - goto yy397; - goto yy341; - } else { - if (yych <= 'O') - goto yy398; - if (yych <= 'T') - goto yy341; - goto yy400; - } - } else { - if (yych <= 'n') { - if (yych == 'e') - goto yy397; - goto yy341; - } else { - if (yych <= 'o') - goto yy398; - if (yych == 'u') - goto yy400; - goto yy341; - } - } - yy366: + goto yy520; + if (yych != 'c') + goto yy497; + yy520: yych = *++p; if (yych == 'D') - goto yy410; - if (yych == 'd') - goto yy410; - goto yy341; - yy367: - yych = *++p; - if (yych == 'T') - goto yy411; - if (yych == 't') - goto yy411; - goto yy341; - yy368: - yych = *++p; - if (yych == 'I') - goto yy412; - if (yych == 'i') - goto yy412; - goto yy341; - yy369: - yych = *++p; - if (yych == 'S') - goto yy413; - if (yych == 's') - goto yy413; - goto yy341; - yy370: - yych = *++p; - if (yych == 'O') - goto yy414; - if (yych == 'o') - goto yy414; - goto yy341; - yy371: + goto yy521; + if (yych != 'd') + goto yy497; + yy521: yych = *++p; - if (yych == 'D') - goto yy415; - if (yych == 'd') - goto yy415; - goto yy341; - yy372: + if (yych == 'A') + goto yy522; + if (yych != 'a') + goto yy497; + yy522: yych = *++p; - if (yych == 'P') - goto yy416; - if (yych == 'p') - goto yy416; - goto yy341; - yy373: + if (yych == 'T') + goto yy523; + if (yych != 't') + goto yy497; + yy523: yych = *++p; - if (yych == 'N') - goto yy417; - if (yych == 'n') - goto yy417; - goto yy341; - yy374: + if (yych == 'A') + goto yy524; + if (yych != 'a') + goto yy497; + yy524: yych = *++p; - if (yych == 'L') - goto yy418; - if (yych == 'l') - goto yy418; - goto yy341; - yy375: + if (yych != '[') + goto yy497; + ++p; + { return 5; } + yy527: + ++p; + { return 2; } + yy529: yych = *++p; if (yych <= ' ') { if (yych <= 0x08) - goto yy341; + goto yy497; if (yych <= '\r') - goto yy391; + goto yy530; if (yych <= 0x1F) - goto yy341; - goto yy391; + goto yy497; } else { if (yych <= '/') { if (yych <= '.') - goto yy341; - goto yy393; + goto yy497; + goto yy532; } else { - if (yych == '>') - goto yy391; - goto yy341; + if (yych != '>') + goto yy497; } } - yy376: + yy530: + ++p; + { return 6; } + yy532: yych = *++p; - if (yych == 'T') - goto yy419; - if (yych == 't') - goto yy419; - goto yy341; - yy377: + if (yych == '>') + goto yy530; + goto yy497; + yy533: yych = *++p; - if (yych <= 'V') { - if (yych <= 'Q') { - if (yych == 'A') - goto yy420; - goto yy341; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy497; + if (yych <= '\r') + goto yy530; + goto yy497; } else { - if (yych <= 'R') - goto yy375; - if (yych <= 'U') - goto yy341; - goto yy375; + if (yych <= ' ') + goto yy530; + if (yych <= '.') + goto yy497; + goto yy532; } } else { - if (yych <= 'q') { - if (yych == 'a') - goto yy420; - goto yy341; + if (yych <= '@') { + if (yych == '>') + goto yy530; + goto yy497; } else { - if (yych <= 'r') - goto yy375; - if (yych == 'v') - goto yy375; - goto yy341; + if (yych <= 'A') + goto yy549; + if (yych == 'a') + goto yy549; + goto yy497; } } - yy378: + yy534: yych = *++p; - if (yych <= 'G') { - if (yych == 'E') - goto yy421; - if (yych <= 'F') - goto yy341; - goto yy422; - } else { - if (yych <= 'e') { - if (yych <= 'd') - goto yy341; - goto yy421; + if (yych == 'T') + goto yy547; + if (yych == 't') + goto yy547; + goto yy497; + yy535: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy497; + if (yych <= '\r') + goto yy530; + goto yy497; } else { - if (yych == 'g') - goto yy422; - goto yy341; + if (yych <= ' ') + goto yy530; + if (yych <= '.') + goto yy497; + goto yy532; } - } - yy379: - yych = *++p; - if (yych <= 'R') { - if (yych == 'O') - goto yy417; - if (yych <= 'Q') - goto yy341; - goto yy423; } else { - if (yych <= 'o') { - if (yych <= 'n') - goto yy341; - goto yy417; + if (yych <= 'D') { + if (yych == '>') + goto yy530; + goto yy497; } else { - if (yych == 'r') - goto yy423; - goto yy341; + if (yych <= 'E') + goto yy545; + if (yych == 'e') + goto yy545; + goto yy497; } } - yy380: + yy536: yych = *++p; - if (yych == 'A') - goto yy424; - if (yych == 'a') - goto yy424; - goto yy341; - yy381: + if (yych == 'O') + goto yy543; + if (yych == 'o') + goto yy543; + goto yy497; + yy537: + yych = *++p; + if (yych == 'O') + goto yy541; + if (yych == 'o') + goto yy541; + goto yy497; + yy538: + yych = *++p; + if (yych == 'B') + goto yy539; + if (yych != 'b') + goto yy497; + yy539: + yych = *++p; + if (yych == 'L') + goto yy540; + if (yych != 'l') + goto yy497; + yy540: + yych = *++p; + if (yych == 'E') + goto yy529; + if (yych == 'e') + goto yy529; + goto yy497; + yy541: + yych = *++p; + if (yych == 'D') + goto yy542; + if (yych != 'd') + goto yy497; + yy542: + yych = *++p; + if (yych == 'Y') + goto yy529; + if (yych == 'y') + goto yy529; + goto yy497; + yy543: + yych = *++p; + if (yych == 'O') + goto yy544; + if (yych != 'o') + goto yy497; + yy544: + yych = *++p; + if (yych == 'T') + goto yy529; + if (yych == 't') + goto yy529; + goto yy497; + yy545: yych = *++p; if (yych == 'A') - goto yy425; - if (yych == 'a') - goto yy425; - goto yy341; - yy382: + goto yy546; + if (yych != 'a') + goto yy497; + yy546: + yych = *++p; + if (yych == 'D') + goto yy529; + if (yych == 'd') + goto yy529; + goto yy497; + yy547: + yych = *++p; + if (yych == 'L') + goto yy548; + if (yych != 'l') + goto yy497; + yy548: + yych = *++p; + if (yych == 'E') + goto yy529; + if (yych == 'e') + goto yy529; + goto yy497; + yy549: + yych = *++p; + if (yych == 'C') + goto yy550; + if (yych != 'c') + goto yy497; + yy550: + yych = *++p; + if (yych == 'K') + goto yy529; + if (yych == 'k') + goto yy529; + goto yy497; + yy551: + yych = *++p; + if (yych == 'Y') + goto yy573; + if (yych == 'y') + goto yy573; + goto yy497; + yy552: + yych = *++p; + if (yych == 'R') + goto yy567; + if (yych == 'r') + goto yy567; + goto yy497; + yy553: yych = *++p; if (yych == 'M') - goto yy359; + goto yy563; if (yych == 'm') - goto yy359; - goto yy341; - yy383: + goto yy563; + goto yy497; + yy554: + yych = *++p; + if (yych == 'U') + goto yy560; + if (yych == 'u') + goto yy560; + goto yy497; + yy555: + yych = *++p; + if (yych == 'C') + goto yy556; + if (yych != 'c') + goto yy497; + yy556: + yych = *++p; + if (yych == 'T') + goto yy557; + if (yych != 't') + goto yy497; + yy557: + yych = *++p; + if (yych == 'I') + goto yy558; + if (yych != 'i') + goto yy497; + yy558: + yych = *++p; + if (yych == 'O') + goto yy559; + if (yych != 'o') + goto yy497; + yy559: + yych = *++p; + if (yych == 'N') + goto yy529; + if (yych == 'n') + goto yy529; + goto yy497; + yy560: yych = *++p; if (yych == 'R') - goto yy426; - if (yych == 'r') - goto yy426; - goto yy341; - yy384: + goto yy561; + if (yych != 'r') + goto yy497; + yy561: yych = *++p; - if (yych == 'G') - goto yy427; - if (yych == 'g') - goto yy427; - goto yy341; - yy385: + if (yych == 'C') + goto yy562; + if (yych != 'c') + goto yy497; + yy562: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy391; - goto yy341; - } else { - if (yych <= ' ') - goto yy391; - if (yych <= '.') - goto yy341; - goto yy393; - } + if (yych == 'E') + goto yy529; + if (yych == 'e') + goto yy529; + goto yy497; + yy563: + yych = *++p; + if (yych == 'M') + goto yy564; + if (yych != 'm') + goto yy497; + yy564: + yych = *++p; + if (yych == 'A') + goto yy565; + if (yych != 'a') + goto yy497; + yy565: + yych = *++p; + if (yych == 'R') + goto yy566; + if (yych != 'r') + goto yy497; + yy566: + yych = *++p; + if (yych == 'Y') + goto yy529; + if (yych == 'y') + goto yy529; + goto yy497; + yy567: + yych = *++p; + if (yych == 'I') + goto yy568; + if (yych != 'i') + goto yy497; + yy568: + yych = *++p; + if (yych == 'P') + goto yy569; + if (yych != 'p') + goto yy497; + yy569: + yych = *++p; + if (yych == 'T') + goto yy570; + if (yych != 't') + goto yy497; + yy570: + yych = *++p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy497; + if (yych >= 0x0E) + goto yy497; } else { - if (yych <= 'M') { - if (yych == '>') - goto yy391; - goto yy341; - } else { - if (yych <= 'N') - goto yy428; - if (yych == 'n') - goto yy428; - goto yy341; - } + if (yych <= ' ') + goto yy571; + if (yych != '>') + goto yy497; } - yy386: + yy571: + ++p; + { return 1; } + yy573: yych = *++p; - if (yych == 'I') - goto yy429; - if (yych == 'i') - goto yy429; - goto yy341; - yy387: + if (yych == 'L') + goto yy574; + if (yych != 'l') + goto yy497; + yy574: yych = *++p; - if (yych <= 'T') { - if (yych == 'N') - goto yy430; - if (yych <= 'S') - goto yy341; - goto yy431; + if (yych == 'E') + goto yy570; + if (yych == 'e') + goto yy570; + goto yy497; + yy575: + yych = *++p; + if (yych == 'T') + goto yy576; + if (yych != 't') + goto yy497; + yy576: + yych = *++p; + if (yych <= 'I') { + if (yych == 'G') + goto yy578; + if (yych <= 'H') + goto yy497; } else { - if (yych <= 'n') { - if (yych <= 'm') - goto yy341; - goto yy430; + if (yych <= 'g') { + if (yych <= 'f') + goto yy497; + goto yy578; } else { - if (yych == 't') - goto yy431; - goto yy341; + if (yych != 'i') + goto yy497; } } - yy388: yych = *++p; - if (yych == 'V') - goto yy375; - if (yych == 'v') - goto yy375; - goto yy341; - yy389: + if (yych == 'O') + goto yy582; + if (yych == 'o') + goto yy582; + goto yy497; + yy578: yych = *++p; - if (yych == 'F') - goto yy432; - if (yych == 'f') - goto yy432; - goto yy341; - yy390: + if (yych == 'R') + goto yy579; + if (yych != 'r') + goto yy497; + yy579: yych = *++p; - if (yych == 'T') - goto yy433; - if (yych == 't') - goto yy433; - goto yy341; - yy391: - ++p; - { return 6; } - yy393: + if (yych == 'O') + goto yy580; + if (yych != 'o') + goto yy497; + yy580: yych = *++p; - if (yych == '>') - goto yy391; - goto yy341; - yy394: + if (yych == 'U') + goto yy581; + if (yych != 'u') + goto yy497; + yy581: yych = *++p; - if (yych == 'R') - goto yy434; - if (yych == 'r') - goto yy434; - goto yy341; - yy395: + if (yych == 'P') + goto yy529; + if (yych == 'p') + goto yy529; + goto yy497; + yy582: yych = *++p; - if (yych == 'E') - goto yy435; - if (yych == 'e') - goto yy435; - goto yy341; - yy396: + if (yych == 'N') + goto yy529; + if (yych == 'n') + goto yy529; + goto yy497; + yy583: yych = *++p; - if (yych == 'R') - goto yy436; - if (yych == 'r') - goto yy436; - goto yy341; - yy397: + if (yych == 'F') + goto yy585; + if (yych == 'f') + goto yy585; + goto yy497; + yy584: yych = *++p; - if (yych == 'C') - goto yy416; - if (yych == 'c') - goto yy416; - goto yy341; - yy398: + if (yych == 'V') + goto yy529; + if (yych == 'v') + goto yy529; + goto yy497; + yy585: yych = *++p; - if (yych == 'U') - goto yy437; - if (yych == 'u') - goto yy437; - goto yy341; - yy399: + if (yych == 'R') + goto yy586; + if (yych != 'r') + goto yy497; + yy586: yych = *++p; - if (yych == 'Y') - goto yy438; - if (yych == 'y') - goto yy438; - goto yy341; - yy400: + if (yych == 'A') + goto yy587; + if (yych != 'a') + goto yy497; + yy587: yych = *++p; if (yych == 'M') - goto yy439; - if (yych == 'm') - goto yy439; - goto yy341; - yy401: - yych = *++p; - if (yych == 'B') - goto yy440; - if (yych == 'b') - goto yy440; - goto yy341; - yy402: + goto yy588; + if (yych != 'm') + goto yy497; + yy588: yych = *++p; - if (yych == 'O') - goto yy371; - if (yych == 'o') - goto yy371; - goto yy341; - yy403: + if (yych == 'E') + goto yy589; + if (yych != 'e') + goto yy497; + yy589: yych = *++p; - if (yych == 'O') - goto yy441; - if (yych == 'o') - goto yy441; - goto yy341; - yy404: + if (yych == 'S') + goto yy529; + if (yych == 's') + goto yy529; + goto yy497; + yy590: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy391; - goto yy341; - } else { - if (yych <= ' ') - goto yy391; - if (yych <= '.') - goto yy341; - goto yy393; - } + if (yych <= 'T') { + if (yych == 'N') + goto yy593; + if (yych <= 'S') + goto yy497; + goto yy594; } else { - if (yych <= 'D') { - if (yych == '>') - goto yy391; - goto yy341; + if (yych <= 'n') { + if (yych <= 'm') + goto yy497; + goto yy593; } else { - if (yych <= 'E') - goto yy442; - if (yych == 'e') - goto yy442; - goto yy341; + if (yych == 't') + goto yy594; + goto yy497; } } - yy405: + yy591: yych = *++p; - if (yych == 'T') - goto yy440; - if (yych == 't') - goto yy440; - goto yy341; - yy406: + if (yych == 'I') + goto yy592; + if (yych != 'i') + goto yy497; + yy592: + yych = *++p; + if (yych == 'N') + goto yy529; + if (yych == 'n') + goto yy529; + goto yy497; + yy593: + yych = *++p; + if (yych == 'U') + goto yy595; + if (yych == 'u') + goto yy595; + goto yy497; + yy594: + yych = *++p; + if (yych == 'A') + goto yy529; + if (yych == 'a') + goto yy529; + goto yy497; + yy595: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy341; + goto yy497; if (yych <= '\r') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy391; + goto yy530; if (yych <= '.') - goto yy341; - goto yy393; + goto yy497; + goto yy532; } } else { - if (yych <= '@') { + if (yych <= 'H') { if (yych == '>') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { - if (yych <= 'A') - goto yy443; - if (yych == 'a') - goto yy443; - goto yy341; + if (yych <= 'I') + goto yy596; + if (yych != 'i') + goto yy497; } } - yy407: - ++p; - { return 2; } - yy409: - yych = *++p; - if (yych == 'D') - goto yy444; - if (yych == 'd') - goto yy444; - goto yy341; - yy410: - yych = *++p; - if (yych == 'R') - goto yy445; - if (yych == 'r') - goto yy445; - goto yy341; - yy411: - yych = *++p; - if (yych == 'I') - goto yy446; - if (yych == 'i') - goto yy446; - goto yy341; - yy412: + yy596: yych = *++p; - if (yych == 'D') - goto yy447; - if (yych == 'd') - goto yy447; - goto yy341; - yy413: + if (yych == 'T') + goto yy597; + if (yych != 't') + goto yy497; + yy597: yych = *++p; if (yych == 'E') - goto yy448; - if (yych == 'e') - goto yy448; - goto yy341; - yy414: - yych = *++p; - if (yych == 'C') - goto yy449; - if (yych == 'c') - goto yy449; - goto yy341; - yy415: - yych = *++p; - if (yych == 'Y') - goto yy375; - if (yych == 'y') - goto yy375; - goto yy341; - yy416: - yych = *++p; - if (yych == 'T') - goto yy450; - if (yych == 't') - goto yy450; - goto yy341; - yy417: + goto yy598; + if (yych != 'e') + goto yy497; + yy598: yych = *++p; - if (yych == 'T') - goto yy451; - if (yych == 't') - goto yy451; - goto yy341; - yy418: + if (yych == 'M') + goto yy529; + if (yych == 'm') + goto yy529; + goto yy497; + yy599: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy341; + goto yy497; if (yych <= '\r') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy391; + goto yy530; if (yych <= '.') - goto yy341; - goto yy393; + goto yy497; + goto yy532; } } else { - if (yych <= 'F') { + if (yych <= 'M') { if (yych == '>') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { - if (yych <= 'G') - goto yy452; - if (yych == 'g') - goto yy452; - goto yy341; + if (yych <= 'N') + goto yy604; + if (yych == 'n') + goto yy604; + goto yy497; } } - yy419: - yych = *++p; - if (yych == 'A') - goto yy453; - if (yych == 'a') - goto yy453; - goto yy341; - yy420: - yych = *++p; - if (yych == 'L') - goto yy454; - if (yych == 'l') - goto yy454; - goto yy341; - yy421: - yych = *++p; - if (yych == 'L') - goto yy455; - if (yych == 'l') - goto yy455; - goto yy341; - yy422: + yy600: yych = *++p; - if (yych <= 'U') { - if (yych == 'C') - goto yy456; - if (yych <= 'T') - goto yy341; - goto yy457; - } else { - if (yych <= 'c') { - if (yych <= 'b') - goto yy341; - goto yy456; - } else { - if (yych == 'u') - goto yy457; - goto yy341; - } - } - yy423: + if (yych == 'G') + goto yy601; + if (yych != 'g') + goto yy497; + yy601: yych = *++p; - if (yych == 'M') - goto yy375; - if (yych == 'm') - goto yy375; - goto yy341; - yy424: + if (yych == 'E') + goto yy602; + if (yych != 'e') + goto yy497; + yy602: yych = *++p; - if (yych == 'M') - goto yy458; - if (yych == 'm') - goto yy458; - goto yy341; - yy425: + if (yych == 'N') + goto yy603; + if (yych != 'n') + goto yy497; + yy603: yych = *++p; if (yych == 'D') - goto yy459; + goto yy529; if (yych == 'd') - goto yy459; - goto yy341; - yy426: + goto yy529; + goto yy497; + yy604: + yych = *++p; + if (yych == 'K') + goto yy529; + if (yych == 'k') + goto yy529; + goto yy497; + yy605: + yych = *++p; + if (yych == 'R') + goto yy606; + if (yych != 'r') + goto yy497; + yy606: yych = *++p; if (yych == 'A') - goto yy460; - if (yych == 'a') - goto yy460; - goto yy341; - yy427: + goto yy607; + if (yych != 'a') + goto yy497; + yy607: + yych = *++p; + if (yych == 'M') + goto yy608; + if (yych != 'm') + goto yy497; + yy608: yych = *++p; if (yych == 'E') - goto yy461; + goto yy529; if (yych == 'e') - goto yy461; - goto yy341; - yy428: - yych = *++p; - if (yych == 'K') - goto yy375; - if (yych == 'k') - goto yy375; - goto yy341; - yy429: - yych = *++p; - if (yych == 'N') - goto yy375; - if (yych == 'n') - goto yy375; - goto yy341; - yy430: + goto yy529; + goto yy497; + yy609: yych = *++p; - if (yych == 'U') - goto yy462; - if (yych == 'u') - goto yy462; - goto yy341; - yy431: + if (yych == 'M') + goto yy614; + if (yych == 'm') + goto yy614; + goto yy497; + yy610: yych = *++p; if (yych == 'A') - goto yy375; - if (yych == 'a') - goto yy375; - goto yy341; - yy432: + goto yy611; + if (yych != 'a') + goto yy497; + yy611: yych = *++p; - if (yych == 'R') - goto yy463; - if (yych == 'r') - goto yy463; - goto yy341; - yy433: + if (yych == 'D') + goto yy612; + if (yych != 'd') + goto yy497; + yy612: yych = *++p; - if (yych <= 'I') { - if (yych == 'G') - goto yy452; - if (yych <= 'H') - goto yy341; - goto yy464; - } else { - if (yych <= 'g') { - if (yych <= 'f') - goto yy341; - goto yy452; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy497; + if (yych <= '\r') + goto yy530; + goto yy497; } else { - if (yych == 'i') - goto yy464; - goto yy341; + if (yych <= ' ') + goto yy530; + if (yych <= '.') + goto yy497; + goto yy532; } - } - yy434: - yych = *++p; - if (yych == 'A') - goto yy423; - if (yych == 'a') - goto yy423; - goto yy341; - yy435: - yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy465; - goto yy341; } else { - if (yych <= ' ') - goto yy465; - if (yych == '>') - goto yy465; - goto yy341; + if (yych <= 'D') { + if (yych == '>') + goto yy530; + goto yy497; + } else { + if (yych <= 'E') + goto yy613; + if (yych != 'e') + goto yy497; + } } - yy436: - yych = *++p; - if (yych == 'I') - goto yy467; - if (yych == 'i') - goto yy467; - goto yy341; - yy437: + yy613: yych = *++p; if (yych == 'R') - goto yy468; + goto yy529; if (yych == 'r') - goto yy468; - goto yy341; - yy438: - yych = *++p; - if (yych == 'L') - goto yy395; - if (yych == 'l') - goto yy395; - goto yy341; - yy439: - yych = *++p; - if (yych == 'M') - goto yy469; - if (yych == 'm') - goto yy469; - goto yy341; - yy440: + goto yy529; + goto yy497; + yy614: yych = *++p; if (yych == 'L') - goto yy447; + goto yy529; if (yych == 'l') - goto yy447; - goto yy341; - yy441: - yych = *++p; - if (yych == 'O') - goto yy470; - if (yych == 'o') - goto yy470; - goto yy341; - yy442: - yych = *++p; - if (yych == 'A') - goto yy471; - if (yych == 'a') - goto yy471; - goto yy341; - yy443: - yych = *++p; - if (yych == 'C') - goto yy428; - if (yych == 'c') - goto yy428; - goto yy341; - yy444: + goto yy529; + goto yy497; + yy615: yych = *++p; if (yych == 'A') - goto yy472; + goto yy636; if (yych == 'a') - goto yy472; - goto yy341; - yy445: - yych = *++p; - if (yych == 'E') - goto yy473; - if (yych == 'e') - goto yy473; - goto yy341; - yy446: - yych = *++p; - if (yych == 'C') - goto yy440; - if (yych == 'c') - goto yy440; - goto yy341; - yy447: + goto yy636; + goto yy497; + yy616: yych = *++p; - if (yych == 'E') - goto yy375; - if (yych == 'e') - goto yy375; - goto yy341; - yy448: + if (yych <= 'R') { + if (yych == 'O') + goto yy632; + if (yych <= 'Q') + goto yy497; + goto yy633; + } else { + if (yych <= 'o') { + if (yych <= 'n') + goto yy497; + goto yy632; + } else { + if (yych == 'r') + goto yy633; + goto yy497; + } + } + yy617: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy391; - goto yy341; + if (yych <= 'G') { + if (yych == 'E') + goto yy618; + if (yych <= 'F') + goto yy497; + goto yy619; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy497; } else { - if (yych <= ' ') - goto yy391; - if (yych <= '.') - goto yy341; - goto yy393; + if (yych == 'g') + goto yy619; + goto yy497; } + } + yy618: + yych = *++p; + if (yych == 'L') + goto yy628; + if (yych == 'l') + goto yy628; + goto yy497; + yy619: + yych = *++p; + if (yych <= 'U') { + if (yych == 'C') + goto yy621; + if (yych <= 'T') + goto yy497; } else { - if (yych <= 'E') { - if (yych == '>') - goto yy391; - goto yy341; + if (yych <= 'c') { + if (yych <= 'b') + goto yy497; + goto yy621; } else { - if (yych <= 'F') - goto yy474; - if (yych == 'f') - goto yy474; - goto yy341; + if (yych != 'u') + goto yy497; } } - yy449: yych = *++p; - if (yych == 'K') - goto yy475; - if (yych == 'k') - goto yy475; - goto yy341; - yy450: + if (yych == 'R') + goto yy627; + if (yych == 'r') + goto yy627; + goto yy497; + yy621: yych = *++p; - if (yych == 'I') - goto yy464; - if (yych == 'i') - goto yy464; - goto yy341; - yy451: + if (yych == 'A') + goto yy622; + if (yych != 'a') + goto yy497; + yy622: yych = *++p; - if (yych == 'E') - goto yy476; - if (yych == 'e') - goto yy476; - goto yy341; - yy452: + if (yych == 'P') + goto yy623; + if (yych != 'p') + goto yy497; + yy623: yych = *++p; - if (yych == 'R') - goto yy477; - if (yych == 'r') - goto yy477; - goto yy341; - yy453: + if (yych == 'T') + goto yy624; + if (yych != 't') + goto yy497; + yy624: yych = *++p; if (yych == 'I') - goto yy478; - if (yych == 'i') - goto yy478; - goto yy341; - yy454: + goto yy625; + if (yych != 'i') + goto yy497; + yy625: yych = *++p; if (yych == 'O') - goto yy479; - if (yych == 'o') - goto yy479; - goto yy341; - yy455: + goto yy626; + if (yych != 'o') + goto yy497; + yy626: + yych = *++p; + if (yych == 'N') + goto yy529; + if (yych == 'n') + goto yy529; + goto yy497; + yy627: + yych = *++p; + if (yych == 'E') + goto yy529; + if (yych == 'e') + goto yy529; + goto yy497; + yy628: yych = *++p; if (yych == 'D') - goto yy480; - if (yych == 'd') - goto yy480; - goto yy341; - yy456: + goto yy629; + if (yych != 'd') + goto yy497; + yy629: yych = *++p; - if (yych == 'A') - goto yy372; - if (yych == 'a') - goto yy372; - goto yy341; - yy457: + if (yych == 'S') + goto yy630; + if (yych != 's') + goto yy497; + yy630: + yych = *++p; + if (yych == 'E') + goto yy631; + if (yych != 'e') + goto yy497; + yy631: + yych = *++p; + if (yych == 'T') + goto yy529; + if (yych == 't') + goto yy529; + goto yy497; + yy632: + yych = *++p; + if (yych == 'T') + goto yy634; + if (yych == 't') + goto yy634; + goto yy497; + yy633: + yych = *++p; + if (yych == 'M') + goto yy529; + if (yych == 'm') + goto yy529; + goto yy497; + yy634: + yych = *++p; + if (yych == 'E') + goto yy635; + if (yych != 'e') + goto yy497; + yy635: yych = *++p; if (yych == 'R') - goto yy447; + goto yy529; if (yych == 'r') - goto yy447; - goto yy341; - yy458: + goto yy529; + goto yy497; + yy636: + yych = *++p; + if (yych == 'M') + goto yy637; + if (yych != 'm') + goto yy497; + yy637: yych = *++p; if (yych == 'E') - goto yy481; - if (yych == 'e') - goto yy481; - goto yy341; - yy459: + goto yy638; + if (yych != 'e') + goto yy497; + yy638: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy341; + goto yy497; if (yych <= '\r') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy391; + goto yy530; if (yych <= '.') - goto yy341; - goto yy393; + goto yy497; + goto yy532; } } else { - if (yych <= 'D') { + if (yych <= 'R') { if (yych == '>') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { - if (yych <= 'E') - goto yy476; - if (yych == 'e') - goto yy476; - goto yy341; + if (yych <= 'S') + goto yy639; + if (yych != 's') + goto yy497; } } - yy460: + yy639: yych = *++p; - if (yych == 'M') - goto yy447; - if (yych == 'm') - goto yy447; - goto yy341; - yy461: + if (yych == 'E') + goto yy640; + if (yych != 'e') + goto yy497; + yy640: yych = *++p; - if (yych == 'N') - goto yy471; - if (yych == 'n') - goto yy471; - goto yy341; - yy462: + if (yych == 'T') + goto yy529; + if (yych == 't') + goto yy529; + goto yy497; + yy641: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy341; - if (yych <= '\r') - goto yy391; - goto yy341; + if (yych <= 'V') { + if (yych <= 'Q') { + if (yych == 'A') + goto yy647; + goto yy497; } else { - if (yych <= ' ') - goto yy391; - if (yych <= '.') - goto yy341; - goto yy393; + if (yych <= 'R') + goto yy529; + if (yych <= 'U') + goto yy497; + goto yy529; } } else { - if (yych <= 'H') { - if (yych == '>') - goto yy391; - goto yy341; + if (yych <= 'q') { + if (yych == 'a') + goto yy647; + goto yy497; } else { - if (yych <= 'I') - goto yy482; - if (yych == 'i') - goto yy482; - goto yy341; + if (yych <= 'r') + goto yy529; + if (yych == 'v') + goto yy529; + goto yy497; } } - yy463: + yy642: + yych = *++p; + if (yych == 'T') + goto yy643; + if (yych != 't') + goto yy497; + yy643: yych = *++p; if (yych == 'A') - goto yy483; - if (yych == 'a') - goto yy483; - goto yy341; - yy464: + goto yy644; + if (yych != 'a') + goto yy497; + yy644: + yych = *++p; + if (yych == 'I') + goto yy645; + if (yych != 'i') + goto yy497; + yy645: + yych = *++p; + if (yych == 'L') + goto yy646; + if (yych != 'l') + goto yy497; + yy646: + yych = *++p; + if (yych == 'S') + goto yy529; + if (yych == 's') + goto yy529; + goto yy497; + yy647: + yych = *++p; + if (yych == 'L') + goto yy648; + if (yych != 'l') + goto yy497; + yy648: yych = *++p; if (yych == 'O') - goto yy429; - if (yych == 'o') - goto yy429; - goto yy341; - yy465: - ++p; - { return 1; } - yy467: + goto yy649; + if (yych != 'o') + goto yy497; + yy649: yych = *++p; - if (yych == 'P') - goto yy484; - if (yych == 'p') - goto yy484; - goto yy341; - yy468: + if (yych == 'G') + goto yy529; + if (yych == 'g') + goto yy529; + goto yy497; + yy650: yych = *++p; - if (yych == 'C') - goto yy447; - if (yych == 'c') - goto yy447; - goto yy341; - yy469: + if (yych == 'L') + goto yy660; + if (yych == 'l') + goto yy660; + goto yy497; + yy651: yych = *++p; - if (yych == 'A') - goto yy485; - if (yych == 'a') - goto yy485; - goto yy341; - yy470: + if (yych == 'N') + goto yy657; + if (yych == 'n') + goto yy657; + goto yy497; + yy652: + yych = *++p; + if (yych == 'P') + goto yy653; + if (yych != 'p') + goto yy497; + yy653: yych = *++p; if (yych == 'T') - goto yy375; - if (yych == 't') - goto yy375; - goto yy341; - yy471: + goto yy654; + if (yych != 't') + goto yy497; + yy654: yych = *++p; - if (yych == 'D') - goto yy375; - if (yych == 'd') - goto yy375; - goto yy341; - yy472: + if (yych == 'I') + goto yy655; + if (yych != 'i') + goto yy497; + yy655: + yych = *++p; + if (yych == 'O') + goto yy656; + if (yych != 'o') + goto yy497; + yy656: + yych = *++p; + if (yych == 'N') + goto yy529; + if (yych == 'n') + goto yy529; + goto yy497; + yy657: yych = *++p; if (yych == 'T') - goto yy486; - if (yych == 't') - goto yy486; - goto yy341; - yy473: + goto yy658; + if (yych != 't') + goto yy497; + yy658: + yych = *++p; + if (yych == 'E') + goto yy659; + if (yych != 'e') + goto yy497; + yy659: + yych = *++p; + if (yych == 'R') + goto yy529; + if (yych == 'r') + goto yy529; + goto yy497; + yy660: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy497; + if (yych <= '\r') + goto yy530; + goto yy497; + } else { + if (yych <= ' ') + goto yy530; + if (yych <= '.') + goto yy497; + goto yy532; + } + } else { + if (yych <= 'F') { + if (yych == '>') + goto yy530; + goto yy497; + } else { + if (yych <= 'G') + goto yy661; + if (yych != 'g') + goto yy497; + } + } + yy661: yych = *++p; - if (yych == 'S') - goto yy487; - if (yych == 's') - goto yy487; - goto yy341; - yy474: + if (yych == 'R') + goto yy662; + if (yych != 'r') + goto yy497; + yy662: yych = *++p; if (yych == 'O') - goto yy488; - if (yych == 'o') - goto yy488; - goto yy341; - yy475: + goto yy663; + if (yych != 'o') + goto yy497; + yy663: yych = *++p; - if (yych == 'Q') - goto yy489; - if (yych == 'q') - goto yy489; - goto yy341; - yy476: + if (yych == 'U') + goto yy664; + if (yych != 'u') + goto yy497; + yy664: yych = *++p; - if (yych == 'R') - goto yy375; - if (yych == 'r') - goto yy375; - goto yy341; - yy477: + if (yych == 'P') + goto yy529; + if (yych == 'p') + goto yy529; + goto yy497; + yy665: + yych = *++p; + if (yych == 'D') + goto yy680; + if (yych == 'd') + goto yy680; + goto yy497; + yy666: yych = *++p; if (yych == 'O') - goto yy490; + goto yy673; if (yych == 'o') - goto yy490; - goto yy341; - yy478: - yych = *++p; - if (yych == 'L') - goto yy487; - if (yych == 'l') - goto yy487; - goto yy341; - yy479: - yych = *++p; - if (yych == 'G') - goto yy375; - if (yych == 'g') - goto yy375; - goto yy341; - yy480: + goto yy673; + goto yy497; + yy667: yych = *++p; if (yych == 'S') - goto yy491; - if (yych == 's') - goto yy491; - goto yy341; - yy481: + goto yy668; + if (yych != 's') + goto yy497; + yy668: + yych = *++p; + if (yych == 'E') + goto yy669; + if (yych != 'e') + goto yy497; + yy669: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy341; + goto yy497; if (yych <= '\r') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { if (yych <= ' ') - goto yy391; + goto yy530; if (yych <= '.') - goto yy341; - goto yy393; + goto yy497; + goto yy532; } } else { - if (yych <= 'R') { + if (yych <= 'E') { if (yych == '>') - goto yy391; - goto yy341; + goto yy530; + goto yy497; } else { - if (yych <= 'S') - goto yy491; - if (yych == 's') - goto yy491; - goto yy341; + if (yych <= 'F') + goto yy670; + if (yych != 'f') + goto yy497; } } - yy482: + yy670: + yych = *++p; + if (yych == 'O') + goto yy671; + if (yych != 'o') + goto yy497; + yy671: + yych = *++p; + if (yych == 'N') + goto yy672; + if (yych != 'n') + goto yy497; + yy672: yych = *++p; if (yych == 'T') - goto yy492; + goto yy529; if (yych == 't') - goto yy492; - goto yy341; - yy483: + goto yy529; + goto yy497; + yy673: yych = *++p; - if (yych == 'M') - goto yy493; - if (yych == 'm') - goto yy493; - goto yy341; - yy484: + if (yych == 'C') + goto yy674; + if (yych != 'c') + goto yy497; + yy674: + yych = *++p; + if (yych == 'K') + goto yy675; + if (yych != 'k') + goto yy497; + yy675: + yych = *++p; + if (yych == 'Q') + goto yy676; + if (yych != 'q') + goto yy497; + yy676: + yych = *++p; + if (yych == 'U') + goto yy677; + if (yych != 'u') + goto yy497; + yy677: + yych = *++p; + if (yych == 'O') + goto yy678; + if (yych != 'o') + goto yy497; + yy678: yych = *++p; if (yych == 'T') - goto yy435; + goto yy679; + if (yych != 't') + goto yy497; + yy679: + yych = *++p; + if (yych == 'E') + goto yy529; + if (yych == 'e') + goto yy529; + goto yy497; + yy680: + yych = *++p; + if (yych == 'Y') + goto yy529; + if (yych == 'y') + goto yy529; + goto yy497; + yy681: + yych = *++p; + if (yych == 'I') + goto yy692; + if (yych == 'i') + goto yy692; + goto yy497; + yy682: + yych = *++p; + if (yych == 'T') + goto yy688; if (yych == 't') - goto yy435; - goto yy341; - yy485: + goto yy688; + goto yy497; + yy683: + yych = *++p; + if (yych == 'D') + goto yy684; + if (yych != 'd') + goto yy497; + yy684: yych = *++p; if (yych == 'R') - goto yy415; - if (yych == 'r') - goto yy415; - goto yy341; - yy486: + goto yy685; + if (yych != 'r') + goto yy497; + yy685: yych = *++p; - if (yych == 'A') - goto yy494; - if (yych == 'a') - goto yy494; - goto yy341; - yy487: + if (yych == 'E') + goto yy686; + if (yych != 'e') + goto yy497; + yy686: yych = *++p; if (yych == 'S') - goto yy375; + goto yy687; + if (yych != 's') + goto yy497; + yy687: + yych = *++p; + if (yych == 'S') + goto yy529; if (yych == 's') - goto yy375; - goto yy341; - yy488: + goto yy529; + goto yy497; + yy688: yych = *++p; - if (yych == 'N') - goto yy470; - if (yych == 'n') - goto yy470; - goto yy341; - yy489: + if (yych == 'I') + goto yy689; + if (yych != 'i') + goto yy497; + yy689: yych = *++p; - if (yych == 'U') - goto yy495; - if (yych == 'u') - goto yy495; - goto yy341; - yy490: + if (yych == 'C') + goto yy690; + if (yych != 'c') + goto yy497; + yy690: yych = *++p; - if (yych == 'U') - goto yy496; - if (yych == 'u') - goto yy496; - goto yy341; - yy491: + if (yych == 'L') + goto yy691; + if (yych != 'l') + goto yy497; + yy691: yych = *++p; if (yych == 'E') - goto yy470; + goto yy529; if (yych == 'e') - goto yy470; - goto yy341; - yy492: + goto yy529; + goto yy497; + yy692: + yych = *++p; + if (yych == 'D') + goto yy693; + if (yych != 'd') + goto yy497; + yy693: yych = *++p; if (yych == 'E') - goto yy423; + goto yy529; if (yych == 'e') - goto yy423; - goto yy341; - yy493: + goto yy529; + goto yy497; + yy694: yych = *++p; if (yych == 'E') - goto yy487; + goto yy570; if (yych == 'e') - goto yy487; - goto yy341; - yy494: + goto yy570; + goto yy497; + yy695: yych = *++p; - if (yych == '[') + if (yych == 'R') + goto yy696; + if (yych != 'r') goto yy497; - goto yy341; - yy495: + yy696: yych = *++p; - if (yych == 'O') - goto yy499; - if (yych == 'o') - goto yy499; - goto yy341; - yy496: + if (yych == 'A') + goto yy697; + if (yych != 'a') + goto yy497; + yy697: yych = *++p; - if (yych == 'P') - goto yy375; - if (yych == 'p') - goto yy375; - goto yy341; - yy497: - ++p; - { return 5; } - yy499: + if (yych == 'M') + goto yy529; + if (yych == 'm') + goto yy529; + goto yy497; + yy698: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy497; + if (yych <= '\r') + goto yy530; + goto yy497; + } else { + if (yych <= ' ') + goto yy530; + if (yych <= '.') + goto yy497; + goto yy532; + } + } else { + if (yych <= '@') { + if (yych == '>') + goto yy530; + goto yy497; + } else { + if (yych <= 'A') + goto yy695; + if (yych == 'a') + goto yy695; + goto yy497; + } + } + yy699: ++p; - if ((yych = *p) == 'T') - goto yy447; - if (yych == 't') - goto yy447; - goto yy341; + if ((yych = *p) <= 'U') { + if (yych <= 'N') { + if (yych == 'E') + goto yy555; + goto yy497; + } else { + if (yych <= 'O') + goto yy554; + if (yych <= 'T') + goto yy497; + goto yy553; + } + } else { + if (yych <= 'n') { + if (yych == 'e') + goto yy555; + goto yy497; + } else { + if (yych <= 'o') + goto yy554; + if (yych == 'u') + goto yy553; + goto yy497; + } + } } } @@ -8261,15 +11667,15 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194, + 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 202, 194, 198, 194, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224, - 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, + 224, 224, 224, 224, 198, 224, 64, 224, 224, 224, 224, 128, 224, 224, + 224, 224, 224, 241, 240, 224, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 240, 224, 192, 192, 192, 224, 224, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, 224, 240, 192, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8283,812 +11689,735 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { }; yych = *p; if (yych == '<') - goto yy504; + goto yy704; ++p; - yy503 : { return 0; } - yy504: + yy703 : { return 0; } + yy704: yyaccept = 0; yych = *(marker = ++p); if (yych <= '@') { - if (yych != '/') - goto yy503; + if (yych == '/') + goto yy708; + goto yy703; + } else { + if (yych <= 'Z') + goto yy705; + if (yych <= '`') + goto yy703; + if (yych >= '{') + goto yy703; + } + yy705: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy705; + } + if (yych <= ' ') { + if (yych <= 0x08) + goto yy707; + if (yych <= '\r') + goto yy719; + if (yych >= ' ') + goto yy719; } else { - if (yych <= 'Z') - goto yy507; - if (yych <= '`') - goto yy503; - if (yych <= 'z') - goto yy507; - goto yy503; + if (yych <= '/') { + if (yych >= '/') + goto yy721; + } else { + if (yych == '>') + goto yy713; + } } - yych = *++p; - if (yych <= '@') - goto yy506; - if (yych <= 'Z') - goto yy509; - if (yych <= '`') - goto yy506; - if (yych <= 'z') - goto yy509; - yy506: + yy707: p = marker; if (yyaccept == 0) { - goto yy503; + goto yy703; } else { - goto yy522; + goto yy717; } - yy507: + yy708: + yych = *++p; + if (yych <= '@') + goto yy707; + if (yych <= 'Z') + goto yy709; + if (yych <= '`') + goto yy707; + if (yych >= '{') + goto yy707; + yy709: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy511; + goto yy711; } if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy507; - goto yy506; + if (yych <= '-') { + if (yych <= ',') + goto yy707; + goto yy709; } else { if (yych <= '/') - goto yy513; + goto yy707; if (yych <= '9') - goto yy507; - goto yy506; + goto yy709; + goto yy707; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy514; + goto yy713; if (yych <= '@') - goto yy506; - goto yy507; - } else { - if (yych <= '`') - goto yy506; - if (yych <= 'z') - goto yy507; - goto yy506; - } - } - yy509: - ++p; - yych = *p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy506; - if (yych <= '\r') - goto yy516; - goto yy506; - } else { - if (yych <= ' ') - goto yy516; - if (yych == '-') - goto yy509; - goto yy506; - } - } else { - if (yych <= '@') { - if (yych <= '9') - goto yy509; - if (yych == '>') - goto yy514; - goto yy506; + goto yy707; + goto yy709; } else { - if (yych <= 'Z') - goto yy509; if (yych <= '`') - goto yy506; + goto yy707; if (yych <= 'z') - goto yy509; - goto yy506; + goto yy709; + goto yy707; } } - yy511: + yy711: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy511; - } - if (yych <= '>') { - if (yych <= '9') { - if (yych != '/') - goto yy506; - } else { - if (yych <= ':') - goto yy518; - if (yych <= '=') - goto yy506; - goto yy514; - } - } else { - if (yych <= '^') { - if (yych <= '@') - goto yy506; - if (yych <= 'Z') - goto yy518; - goto yy506; - } else { - if (yych == '`') - goto yy506; - if (yych <= 'z') - goto yy518; - goto yy506; - } + goto yy711; } - yy513: - yych = *++p; if (yych != '>') - goto yy506; - yy514: + goto yy707; + yy713: ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy514; + goto yy713; } if (yych <= 0x08) - goto yy506; + goto yy707; if (yych <= '\n') - goto yy520; + goto yy715; if (yych <= '\v') - goto yy506; + goto yy707; if (yych <= '\r') - goto yy523; - goto yy506; - yy516: + goto yy718; + goto yy707; + yy715: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy713; + } + if (yych <= 0x08) + goto yy717; + if (yych <= '\n') + goto yy715; + if (yych <= '\v') + goto yy717; + if (yych <= '\r') + goto yy718; + yy717 : { return 7; } + yy718: + yych = *++p; + goto yy717; + yy719: ++p; yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy506; - if (yych <= '\r') - goto yy516; - goto yy506; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy707; + if (yych <= '\r') + goto yy719; + if (yych <= 0x1F) + goto yy707; + goto yy719; + } else { + if (yych == '/') + goto yy721; + if (yych <= '9') + goto yy707; + goto yy722; + } } else { - if (yych <= ' ') - goto yy516; - if (yych == '>') - goto yy514; - goto yy506; + if (yych <= 'Z') { + if (yych == '>') + goto yy713; + if (yych <= '@') + goto yy707; + goto yy722; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy707; + goto yy722; + } else { + if (yych <= '`') + goto yy707; + if (yych <= 'z') + goto yy722; + goto yy707; + } + } } - yy518: + yy721: + yych = *++p; + if (yych == '>') + goto yy713; + goto yy707; + yy722: ++p; yych = *p; - if (yybm[0 + yych] & 8) { - goto yy518; + if (yybm[0 + yych] & 16) { + goto yy722; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy506; - goto yy524; + goto yy707; } else { - if (yych == ' ') - goto yy524; - goto yy506; + if (yych != ' ') + goto yy707; } } else { if (yych <= '<') { if (yych <= '/') - goto yy513; - goto yy506; + goto yy721; + goto yy707; } else { if (yych <= '=') - goto yy526; + goto yy726; if (yych <= '>') - goto yy514; - goto yy506; + goto yy713; + goto yy707; } } - yy520: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 4) { - goto yy514; - } - if (yych <= 0x08) - goto yy522; - if (yych <= '\n') - goto yy520; - if (yych <= '\v') - goto yy522; - if (yych <= '\r') - goto yy523; - yy522 : { return 7; } - yy523: - yych = *++p; - goto yy522; - yy524: + yy724: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy506; + goto yy707; if (yych <= '\r') - goto yy524; + goto yy724; if (yych <= 0x1F) - goto yy506; - goto yy524; + goto yy707; + goto yy724; } else { if (yych <= '/') { if (yych <= '.') - goto yy506; - goto yy513; + goto yy707; + goto yy721; } else { if (yych == ':') - goto yy518; - goto yy506; + goto yy722; + goto yy707; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy526; + goto yy726; if (yych <= '>') - goto yy514; + goto yy713; if (yych <= '@') - goto yy506; - goto yy518; + goto yy707; + goto yy722; } else { if (yych <= '_') { if (yych <= '^') - goto yy506; - goto yy518; + goto yy707; + goto yy722; } else { if (yych <= '`') - goto yy506; + goto yy707; if (yych <= 'z') - goto yy518; - goto yy506; + goto yy722; + goto yy707; } } } - yy526: + yy726: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy527; + goto yy728; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy506; - if (yych <= ' ') - goto yy529; - goto yy530; + goto yy707; + if (yych >= '!') + goto yy739; } else { if (yych <= '\'') - goto yy532; - if (yych <= 0xC1) - goto yy506; - if (yych <= 0xDF) - goto yy534; - goto yy535; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy537; - goto yy536; - } else { - if (yych <= 0xF0) - goto yy538; - if (yych <= 0xF3) - goto yy539; - if (yych <= 0xF4) - goto yy540; - goto yy506; - } - } - yy527: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy527; - } - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy506; - if (yych <= ' ') - goto yy541; - goto yy506; - } else { - if (yych <= '>') - goto yy514; + goto yy737; if (yych <= 0xC1) - goto yy506; + goto yy707; if (yych <= 0xDF) - goto yy534; - goto yy535; + goto yy730; + goto yy731; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy537; - goto yy536; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy538; + goto yy733; if (yych <= 0xF3) - goto yy539; + goto yy734; if (yych <= 0xF4) - goto yy540; - goto yy506; + goto yy735; + goto yy707; } } - yy529: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy527; + goto yy728; } if (yych <= 0xDF) { if (yych <= '\'') { if (yych <= 0x00) - goto yy506; + goto yy707; if (yych <= ' ') - goto yy543; - if (yych >= '#') - goto yy532; + goto yy762; + if (yych <= '"') + goto yy739; + goto yy737; } else { if (yych == '>') - goto yy514; + goto yy713; if (yych <= 0xC1) - goto yy506; - goto yy534; + goto yy707; + goto yy730; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy535; + goto yy731; if (yych == 0xED) - goto yy537; - goto yy536; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy538; - if (yych <= 0xF3) - goto yy539; - if (yych <= 0xF4) - goto yy540; - goto yy506; - } - } - yy530: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy530; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy506; - if (yych <= '"') - goto yy545; - goto yy506; - } else { - if (yych <= 0xDF) - goto yy546; - if (yych <= 0xE0) - goto yy547; - goto yy548; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy549; - if (yych <= 0xEF) - goto yy548; - goto yy550; - } else { + goto yy733; if (yych <= 0xF3) - goto yy551; + goto yy734; if (yych <= 0xF4) - goto yy552; - goto yy506; + goto yy735; + goto yy707; } } - yy532: + yy728: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy532; + if (yybm[0 + yych] & 32) { + goto yy728; } - if (yych <= 0xEC) { - if (yych <= 0xC1) { + if (yych <= 0xE0) { + if (yych <= '=') { if (yych <= 0x00) - goto yy506; - if (yych <= '\'') - goto yy545; - goto yy506; + goto yy707; + if (yych <= ' ') + goto yy756; + goto yy707; } else { - if (yych <= 0xDF) - goto yy553; - if (yych <= 0xE0) - goto yy554; - goto yy555; + if (yych <= '>') + goto yy713; + if (yych <= 0xC1) + goto yy707; + if (yych >= 0xE0) + goto yy731; } } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy556; - if (yych <= 0xEF) - goto yy555; - goto yy557; + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy736; + goto yy732; } else { + if (yych <= 0xF0) + goto yy733; if (yych <= 0xF3) - goto yy558; + goto yy734; if (yych <= 0xF4) - goto yy559; - goto yy506; + goto yy735; + goto yy707; } } - yy534: + yy730: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy527; - goto yy506; - yy535: + goto yy728; + goto yy707; + yy731: ++p; yych = *p; if (yych <= 0x9F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy534; - goto yy506; - yy536: + goto yy730; + goto yy707; + yy732: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy534; - goto yy506; - yy537: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy506; - if (yych <= 0x9F) - goto yy534; - goto yy506; - yy538: + goto yy730; + goto yy707; + yy733: ++p; yych = *p; if (yych <= 0x8F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy536; - goto yy506; - yy539: + goto yy732; + goto yy707; + yy734: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy536; - goto yy506; - yy540: + goto yy732; + goto yy707; + yy735: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0x8F) - goto yy536; - goto yy506; - yy541: + goto yy732; + goto yy707; + yy736: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy506; - if (yych <= 0x08) - goto yy527; - goto yy541; - } else { - if (yych == ' ') - goto yy541; - if (yych <= '!') - goto yy527; - goto yy506; - } + if (yych <= 0x7F) + goto yy707; + if (yych <= 0x9F) + goto yy730; + goto yy707; + yy737: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy737; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy707; + if (yych <= '\'') + goto yy748; + goto yy707; } else { - if (yych <= ':') { - if (yych == '\'') - goto yy506; - if (yych <= '9') - goto yy527; - goto yy560; - } else { - if (yych <= ';') - goto yy527; - if (yych <= '=') - goto yy506; - if (yych <= '>') - goto yy514; - goto yy527; - } + if (yych <= 0xDF) + goto yy749; + if (yych <= 0xE0) + goto yy750; + goto yy751; } } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy560; - if (yych <= '^') - goto yy527; - if (yych <= '_') - goto yy560; - goto yy506; - } else { - if (yych <= 'z') - goto yy560; - if (yych <= 0x7F) - goto yy527; - if (yych <= 0xC1) - goto yy506; - goto yy534; - } + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy755; + if (yych <= 0xEF) + goto yy751; + goto yy752; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy535; - if (yych == 0xED) - goto yy537; - goto yy536; - } else { - if (yych <= 0xF0) - goto yy538; - if (yych <= 0xF3) - goto yy539; - if (yych <= 0xF4) - goto yy540; - goto yy506; - } + if (yych <= 0xF3) + goto yy753; + if (yych <= 0xF4) + goto yy754; + goto yy707; } } - yy543: + yy739: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy506; - if (yych <= 0x08) - goto yy527; - goto yy543; - } else { - if (yych == ' ') - goto yy543; - if (yych <= '!') - goto yy527; - goto yy530; - } + if (yybm[0 + yych] & 128) { + goto yy739; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy707; + if (yych <= '"') + goto yy748; + goto yy707; } else { - if (yych <= ':') { - if (yych == '\'') - goto yy532; - if (yych <= '9') - goto yy527; - goto yy560; - } else { - if (yych <= ';') - goto yy527; - if (yych <= '=') - goto yy506; - if (yych <= '>') - goto yy514; - goto yy527; - } + if (yych <= 0xDF) + goto yy741; + if (yych <= 0xE0) + goto yy742; + goto yy743; } } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy560; - if (yych <= '^') - goto yy527; - if (yych <= '_') - goto yy560; - goto yy506; - } else { - if (yych <= 'z') - goto yy560; - if (yych <= 0x7F) - goto yy527; - if (yych <= 0xC1) - goto yy506; - goto yy534; - } + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy747; + if (yych <= 0xEF) + goto yy743; + goto yy744; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy535; - if (yych == 0xED) - goto yy537; - goto yy536; - } else { - if (yych <= 0xF0) - goto yy538; - if (yych <= 0xF3) - goto yy539; - if (yych <= 0xF4) - goto yy540; - goto yy506; - } + if (yych <= 0xF3) + goto yy745; + if (yych <= 0xF4) + goto yy746; + goto yy707; } } - yy545: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy511; - } - if (yych == '/') - goto yy513; - if (yych == '>') - goto yy514; - goto yy506; - yy546: + yy741: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy530; - goto yy506; - yy547: + goto yy739; + goto yy707; + yy742: ++p; yych = *p; if (yych <= 0x9F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy546; - goto yy506; - yy548: + goto yy741; + goto yy707; + yy743: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy546; - goto yy506; - yy549: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy506; - if (yych <= 0x9F) - goto yy546; - goto yy506; - yy550: + goto yy741; + goto yy707; + yy744: ++p; yych = *p; if (yych <= 0x8F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy548; - goto yy506; - yy551: + goto yy743; + goto yy707; + yy745: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy548; - goto yy506; - yy552: + goto yy743; + goto yy707; + yy746: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0x8F) - goto yy548; - goto yy506; - yy553: + goto yy743; + goto yy707; + yy747: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; - if (yych <= 0xBF) - goto yy532; - goto yy506; - yy554: + goto yy707; + if (yych <= 0x9F) + goto yy741; + goto yy707; + yy748: ++p; yych = *p; - if (yych <= 0x9F) - goto yy506; - if (yych <= 0xBF) - goto yy553; - goto yy506; - yy555: + if (yych <= ' ') { + if (yych <= 0x08) + goto yy707; + if (yych <= '\r') + goto yy719; + if (yych <= 0x1F) + goto yy707; + goto yy719; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy707; + goto yy721; + } else { + if (yych == '>') + goto yy713; + goto yy707; + } + } + yy749: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy553; - goto yy506; - yy556: + goto yy737; + goto yy707; + yy750: ++p; yych = *p; - if (yych <= 0x7F) - goto yy506; if (yych <= 0x9F) - goto yy553; - goto yy506; - yy557: + goto yy707; + if (yych <= 0xBF) + goto yy749; + goto yy707; + yy751: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy707; + if (yych <= 0xBF) + goto yy749; + goto yy707; + yy752: ++p; yych = *p; if (yych <= 0x8F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy555; - goto yy506; - yy558: + goto yy751; + goto yy707; + yy753: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0xBF) - goto yy555; - goto yy506; - yy559: + goto yy751; + goto yy707; + yy754: ++p; yych = *p; if (yych <= 0x7F) - goto yy506; + goto yy707; if (yych <= 0x8F) - goto yy555; - goto yy506; - yy560: + goto yy751; + goto yy707; + yy755: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy707; + if (yych <= 0x9F) + goto yy749; + goto yy707; + yy756: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy707; + if (yych <= 0x08) + goto yy728; + goto yy756; + } else { + if (yych == ' ') + goto yy756; + if (yych <= '!') + goto yy728; + goto yy707; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy707; + if (yych <= '9') + goto yy728; + } else { + if (yych <= ';') + goto yy728; + if (yych <= '=') + goto yy707; + if (yych <= '>') + goto yy713; + goto yy728; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy758; + if (yych <= '^') + goto yy728; + if (yych >= '`') + goto yy707; + } else { + if (yych <= 'z') + goto yy758; + if (yych <= 0x7F) + goto yy728; + if (yych <= 0xC1) + goto yy707; + goto yy730; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy731; + if (yych == 0xED) + goto yy736; + goto yy732; + } else { + if (yych <= 0xF0) + goto yy733; + if (yych <= 0xF3) + goto yy734; + if (yych <= 0xF4) + goto yy735; + goto yy707; + } + } + } + yy758: ++p; yych = *p; if (yych <= '>') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy506; + goto yy707; if (yych <= 0x08) - goto yy527; + goto yy728; if (yych >= 0x0E) - goto yy527; + goto yy728; } else { if (yych <= ' ') - goto yy562; + goto yy760; if (yych == '"') - goto yy506; - goto yy527; + goto yy707; + goto yy728; } } else { if (yych <= '/') { if (yych <= '\'') - goto yy506; + goto yy707; if (yych <= ',') - goto yy527; + goto yy728; if (yych <= '.') - goto yy560; - goto yy527; + goto yy758; + goto yy728; } else { if (yych <= ';') { if (yych <= ':') - goto yy560; - goto yy527; + goto yy758; + goto yy728; } else { if (yych <= '<') - goto yy506; + goto yy707; if (yych <= '=') - goto yy526; - goto yy514; + goto yy726; + goto yy713; } } } @@ -9096,116 +12425,188 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '_') { if (yych <= '@') - goto yy527; + goto yy728; if (yych <= 'Z') - goto yy560; + goto yy758; if (yych <= '^') - goto yy527; - goto yy560; + goto yy728; + goto yy758; } else { if (yych <= '`') - goto yy506; + goto yy707; if (yych <= 'z') - goto yy560; + goto yy758; if (yych <= 0x7F) - goto yy527; - goto yy506; + goto yy728; + goto yy707; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy534; + goto yy730; if (yych <= 0xE0) - goto yy535; + goto yy731; if (yych <= 0xEC) - goto yy536; - goto yy537; + goto yy732; + goto yy736; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy536; - goto yy538; + goto yy732; + goto yy733; } else { if (yych <= 0xF3) - goto yy539; + goto yy734; if (yych <= 0xF4) - goto yy540; - goto yy506; + goto yy735; + goto yy707; } } } } - yy562: + yy760: ++p; yych = *p; if (yych <= '@') { if (yych <= '&') { if (yych <= 0x1F) { if (yych <= 0x00) - goto yy506; + goto yy707; if (yych <= 0x08) - goto yy527; + goto yy728; if (yych <= '\r') - goto yy562; - goto yy527; + goto yy760; + goto yy728; } else { if (yych <= ' ') - goto yy562; + goto yy760; if (yych == '"') - goto yy506; - goto yy527; + goto yy707; + goto yy728; } } else { if (yych <= ';') { if (yych <= '\'') - goto yy506; + goto yy707; if (yych == ':') - goto yy560; - goto yy527; + goto yy758; + goto yy728; } else { if (yych <= '<') - goto yy506; + goto yy707; + if (yych <= '=') + goto yy726; + if (yych <= '>') + goto yy713; + goto yy728; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy758; + if (yych <= '^') + goto yy728; + if (yych <= '_') + goto yy758; + goto yy707; + } else { + if (yych <= 'z') + goto yy758; + if (yych <= 0x7F) + goto yy728; + if (yych <= 0xC1) + goto yy707; + goto yy730; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy731; + if (yych == 0xED) + goto yy736; + goto yy732; + } else { + if (yych <= 0xF0) + goto yy733; + if (yych <= 0xF3) + goto yy734; + if (yych <= 0xF4) + goto yy735; + goto yy707; + } + } + } + yy762: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy707; + if (yych <= 0x08) + goto yy728; + goto yy762; + } else { + if (yych == ' ') + goto yy762; + if (yych <= '!') + goto yy728; + goto yy739; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy737; + if (yych <= '9') + goto yy728; + goto yy758; + } else { + if (yych <= ';') + goto yy728; if (yych <= '=') - goto yy526; + goto yy707; if (yych <= '>') - goto yy514; - goto yy527; + goto yy713; + goto yy728; } } } else { if (yych <= 0xDF) { if (yych <= '`') { if (yych <= 'Z') - goto yy560; + goto yy758; if (yych <= '^') - goto yy527; + goto yy728; if (yych <= '_') - goto yy560; - goto yy506; + goto yy758; + goto yy707; } else { if (yych <= 'z') - goto yy560; + goto yy758; if (yych <= 0x7F) - goto yy527; + goto yy728; if (yych <= 0xC1) - goto yy506; - goto yy534; + goto yy707; + goto yy730; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy535; + goto yy731; if (yych == 0xED) - goto yy537; - goto yy536; + goto yy736; + goto yy732; } else { if (yych <= 0xF0) - goto yy538; + goto yy733; if (yych <= 0xF3) - goto yy539; + goto yy734; if (yych <= 0xF4) - goto yy540; - goto yy506; + goto yy735; + goto yy707; } } } @@ -9241,785 +12642,820 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych == '\n') - goto yy568; + goto yy768; } else { if (yych <= '<') - goto yy569; + goto yy769; if (yych <= 0x7F) - goto yy566; + goto yy766; if (yych <= 0xC1) - goto yy568; - goto yy570; + goto yy768; + goto yy770; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy571; + goto yy771; if (yych == 0xED) - goto yy573; - goto yy572; + goto yy773; + goto yy772; } else { if (yych <= 0xF0) - goto yy574; + goto yy774; if (yych <= 0xF3) - goto yy575; + goto yy775; if (yych <= 0xF4) - goto yy576; - goto yy568; + goto yy776; + goto yy768; } } - yy566: + yy766: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy578; + goto yy781; } else { if (yych <= 0xC1) - goto yy567; + goto yy767; if (yych <= 0xF4) - goto yy578; + goto yy781; } - yy567 : { return 0; } - yy568: + yy767 : { return 0; } + yy768: yych = *++p; - goto yy567; - yy569: + goto yy767; + yy769: yyaccept = 0; yych = *(marker = ++p); if (yych <= '/') { if (yych == '\n') - goto yy567; + goto yy767; if (yych <= '.') - goto yy578; - goto yy589; + goto yy781; + goto yy789; } else { if (yych <= 0x7F) - goto yy578; + goto yy781; if (yych <= 0xC1) - goto yy567; + goto yy767; if (yych <= 0xF4) - goto yy578; - goto yy567; + goto yy781; + goto yy767; } - yy570: + yy770: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy567; + goto yy767; if (yych <= 0xBF) - goto yy577; - goto yy567; - yy571: + goto yy780; + goto yy767; + yy771: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy567; + goto yy767; if (yych <= 0xBF) - goto yy582; - goto yy567; - yy572: + goto yy779; + goto yy767; + yy772: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy567; + goto yy767; if (yych <= 0xBF) - goto yy582; - goto yy567; - yy573: + goto yy779; + goto yy767; + yy773: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy567; + goto yy767; if (yych <= 0x9F) - goto yy582; - goto yy567; - yy574: + goto yy779; + goto yy767; + yy774: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy567; + goto yy767; if (yych <= 0xBF) - goto yy584; - goto yy567; - yy575: + goto yy777; + goto yy767; + yy775: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy567; + goto yy767; if (yych <= 0xBF) - goto yy584; - goto yy567; - yy576: + goto yy777; + goto yy767; + yy776: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy567; - if (yych <= 0x8F) - goto yy584; - goto yy567; - yy577: + goto yy767; + if (yych >= 0x90) + goto yy767; + yy777: ++p; yych = *p; - yy578: + if (yych <= 0x7F) + goto yy778; + if (yych <= 0xBF) + goto yy779; + yy778: + p = marker; + if (yyaccept == 0) { + goto yy767; + } else { + goto yy795; + } + yy779: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy778; + if (yych >= 0xC0) + goto yy778; + yy780: + ++p; + yych = *p; + yy781: if (yybm[0 + yych] & 64) { - goto yy577; + goto yy780; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy579; - if (yych <= '<') - goto yy580; + goto yy778; + if (yych >= '=') + goto yy778; } else { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; - goto yy584; + goto yy784; + goto yy777; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy585; + goto yy788; if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; + goto yy787; + goto yy778; } } - yy579: - p = marker; - if (yyaccept == 0) { - goto yy567; - } else { - goto yy599; - } - yy580: + yy782: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xDF) { if (yych <= '.') { if (yych == '\n') - goto yy579; - goto yy577; + goto yy778; + goto yy780; } else { if (yych <= '/') - goto yy589; + goto yy789; if (yych <= 0x7F) - goto yy577; + goto yy780; if (yych <= 0xC1) - goto yy579; + goto yy778; + goto yy779; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych == 0xED) - goto yy585; - goto yy584; + goto yy788; + goto yy777; } else { if (yych <= 0xF0) - goto yy586; + goto yy785; if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } - yy582: + yy784: ++p; yych = *p; - if (yych <= 0x7F) - goto yy579; + if (yych <= 0x9F) + goto yy778; if (yych <= 0xBF) - goto yy577; - goto yy579; - yy583: + goto yy779; + goto yy778; + yy785: ++p; yych = *p; - if (yych <= 0x9F) - goto yy579; + if (yych <= 0x8F) + goto yy778; if (yych <= 0xBF) - goto yy582; - goto yy579; - yy584: + goto yy777; + goto yy778; + yy786: ++p; yych = *p; if (yych <= 0x7F) - goto yy579; + goto yy778; if (yych <= 0xBF) - goto yy582; - goto yy579; - yy585: + goto yy777; + goto yy778; + yy787: ++p; yych = *p; if (yych <= 0x7F) - goto yy579; - if (yych <= 0x9F) - goto yy582; - goto yy579; - yy586: - ++p; - yych = *p; + goto yy778; if (yych <= 0x8F) - goto yy579; - if (yych <= 0xBF) - goto yy584; - goto yy579; - yy587: + goto yy777; + goto yy778; + yy788: ++p; yych = *p; if (yych <= 0x7F) - goto yy579; - if (yych <= 0xBF) - goto yy584; - goto yy579; - yy588: + goto yy778; + if (yych <= 0x9F) + goto yy779; + goto yy778; + yy789: ++p; yych = *p; - if (yych <= 0x7F) - goto yy579; - if (yych <= 0x8F) - goto yy584; - goto yy579; - yy589: + if (yybm[0 + yych] & 128) { + goto yy782; + } + if (yych <= 's') { + if (yych <= 'R') { + if (yych <= '\n') { + if (yych <= '\t') + goto yy780; + goto yy778; + } else { + if (yych == 'P') + goto yy791; + goto yy780; + } + } else { + if (yych <= 'o') { + if (yych >= 'T') + goto yy780; + } else { + if (yych <= 'p') + goto yy791; + if (yych <= 'r') + goto yy780; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy780; + goto yy778; + } else { + if (yych <= 0xDF) + goto yy779; + if (yych <= 0xE0) + goto yy784; + goto yy777; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; + if (yych <= 0xEF) + goto yy777; + goto yy785; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } + } + } ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } - if (yych <= 's') { - if (yych <= 'R') { + if (yych <= 't') { + if (yych <= 'S') { if (yych <= '\n') { if (yych <= '\t') - goto yy577; - goto yy579; + goto yy780; + goto yy778; } else { - if (yych != 'P') - goto yy577; + if (yych == 'C') + goto yy796; + goto yy780; } } else { - if (yych <= 'o') { - if (yych <= 'S') - goto yy591; - goto yy577; + if (yych <= 'b') { + if (yych <= 'T') + goto yy797; + goto yy780; } else { - if (yych <= 'p') - goto yy590; - if (yych <= 'r') - goto yy577; - goto yy591; + if (yych <= 'c') + goto yy796; + if (yych <= 's') + goto yy780; + goto yy797; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } else { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; - goto yy584; + goto yy784; + goto yy777; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy585; + goto yy788; if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy590: + yy791: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy579; + goto yy778; if (yych <= 'Q') - goto yy577; - goto yy592; + goto yy780; } else { if (yych == 'r') - goto yy592; + goto yy792; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy591: + yy792: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } - if (yych <= 't') { - if (yych <= 'S') { - if (yych <= '\n') { - if (yych <= '\t') - goto yy577; - goto yy579; - } else { - if (yych == 'C') - goto yy593; - goto yy577; - } + if (yych <= 0xC1) { + if (yych <= 'E') { + if (yych == '\n') + goto yy778; + if (yych <= 'D') + goto yy780; } else { - if (yych <= 'b') { - if (yych <= 'T') - goto yy594; - goto yy577; - } else { - if (yych <= 'c') - goto yy593; - if (yych <= 's') - goto yy577; - goto yy594; - } + if (yych == 'e') + goto yy793; + if (yych <= 0x7F) + goto yy780; + goto yy778; } } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy577; - goto yy579; - } else { - if (yych <= 0xDF) - goto yy582; - if (yych <= 0xE0) - goto yy583; - goto yy584; - } + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; + if (yych <= 0xE0) + goto yy784; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy585; if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy592: + yy793: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'E') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych == '\n') - goto yy579; - if (yych <= 'D') - goto yy577; - goto yy595; + goto yy778; + goto yy780; } else { - if (yych == 'e') - goto yy595; + if (yych <= '>') + goto yy794; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy784; + if (yych == 0xED) + goto yy788; + goto yy777; + } else { + if (yych <= 0xF0) + goto yy785; + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } + } + yy794: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy780; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy795; + if (yych <= '<') + goto yy782; + } else { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; - if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy784; + goto yy777; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; + if (yych <= 0xEF) + goto yy777; + goto yy785; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy584; - goto yy586; - } else { - if (yych <= 0xF3) - goto yy587; - if (yych <= 0xF4) - goto yy588; - goto yy579; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; } } - yy593: + yy795 : { return (bufsize_t)(p - start); } + yy796: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { if (yych <= 'R') { if (yych == '\n') - goto yy579; + goto yy778; if (yych <= 'Q') - goto yy577; - goto yy596; + goto yy780; + goto yy800; } else { if (yych == 'r') - goto yy596; + goto yy800; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy594: + yy797: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { if (yych <= 'Y') { if (yych == '\n') - goto yy579; + goto yy778; if (yych <= 'X') - goto yy577; - goto yy597; + goto yy780; } else { if (yych == 'y') - goto yy597; + goto yy798; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy595: + yy798: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } - if (yych <= 0xDF) { - if (yych <= '=') { + if (yych <= 0xC1) { + if (yych <= 'L') { if (yych == '\n') - goto yy579; - goto yy577; + goto yy778; + if (yych <= 'K') + goto yy780; } else { - if (yych <= '>') - goto yy598; + if (yych == 'l') + goto yy799; if (yych <= 0x7F) - goto yy577; - if (yych <= 0xC1) - goto yy579; - goto yy582; + goto yy780; + goto yy778; } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) - goto yy583; - if (yych == 0xED) - goto yy585; - goto yy584; + goto yy784; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) - goto yy586; - if (yych <= 0xF3) - goto yy587; - if (yych <= 0xF4) - goto yy588; - goto yy579; + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; + goto yy785; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } - yy596: + yy799: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'I') { + if (yych <= 'E') { if (yych == '\n') - goto yy579; - if (yych <= 'H') - goto yy577; - goto yy600; + goto yy778; + if (yych <= 'D') + goto yy780; + goto yy793; } else { - if (yych == 'i') - goto yy600; + if (yych == 'e') + goto yy793; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy597: + yy800: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { - if (yych <= 'L') { + if (yych <= 'I') { if (yych == '\n') - goto yy579; - if (yych <= 'K') - goto yy577; - goto yy592; + goto yy778; + if (yych <= 'H') + goto yy780; } else { - if (yych == 'l') - goto yy592; + if (yych == 'i') + goto yy801; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy598: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy577; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy599; - if (yych <= '<') - goto yy580; - } else { - if (yych <= 0xDF) - goto yy582; - if (yych <= 0xE0) - goto yy583; - goto yy584; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy585; - if (yych <= 0xEF) - goto yy584; - goto yy586; - } else { - if (yych <= 0xF3) - goto yy587; - if (yych <= 0xF4) - goto yy588; - } - } - yy599 : { return (bufsize_t)(p - start); } - yy600: + yy801: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { if (yych <= 'P') { if (yych == '\n') - goto yy579; + goto yy778; if (yych <= 'O') - goto yy577; + goto yy780; } else { if (yych == 'p') - goto yy601; + goto yy802; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } - yy601: + yy802: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy580; + goto yy782; } if (yych <= 0xC1) { if (yych <= 'T') { if (yych == '\n') - goto yy579; + goto yy778; if (yych <= 'S') - goto yy577; - goto yy595; + goto yy780; + goto yy793; } else { if (yych == 't') - goto yy595; + goto yy793; if (yych <= 0x7F) - goto yy577; - goto yy579; + goto yy780; + goto yy778; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy582; + goto yy779; if (yych <= 0xE0) - goto yy583; + goto yy784; if (yych <= 0xEC) - goto yy584; - goto yy585; + goto yy777; + goto yy788; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy584; - goto yy586; + goto yy777; + goto yy785; } else { if (yych <= 0xF3) - goto yy587; + goto yy786; if (yych <= 0xF4) - goto yy588; - goto yy579; + goto yy787; + goto yy778; } } } @@ -10055,326 +13491,323 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ',') { if (yych == '\n') - goto yy606; + goto yy807; } else { if (yych <= '-') - goto yy607; + goto yy808; if (yych <= 0x7F) - goto yy604; + goto yy805; if (yych <= 0xC1) - goto yy606; - goto yy608; + goto yy807; + goto yy809; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy609; + goto yy810; if (yych == 0xED) - goto yy611; - goto yy610; + goto yy812; + goto yy811; } else { if (yych <= 0xF0) - goto yy612; + goto yy813; if (yych <= 0xF3) - goto yy613; + goto yy814; if (yych <= 0xF4) - goto yy614; - goto yy606; + goto yy815; + goto yy807; } } - yy604: + yy805: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy616; + goto yy820; } else { if (yych <= 0xC1) - goto yy605; + goto yy806; if (yych <= 0xF4) - goto yy616; + goto yy820; } - yy605 : { return 0; } - yy606: + yy806 : { return 0; } + yy807: yych = *++p; - goto yy605; - yy607: + goto yy806; + yy808: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy626; + goto yy827; } if (yych <= 0x7F) { if (yych == '\n') - goto yy605; - goto yy616; + goto yy806; + goto yy820; } else { if (yych <= 0xC1) - goto yy605; + goto yy806; if (yych <= 0xF4) - goto yy616; - goto yy605; + goto yy820; + goto yy806; } - yy608: + yy809: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy605; + goto yy806; if (yych <= 0xBF) - goto yy615; - goto yy605; - yy609: + goto yy819; + goto yy806; + yy810: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy605; + goto yy806; if (yych <= 0xBF) - goto yy619; - goto yy605; - yy610: + goto yy818; + goto yy806; + yy811: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy605; + goto yy806; if (yych <= 0xBF) - goto yy619; - goto yy605; - yy611: + goto yy818; + goto yy806; + yy812: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy605; + goto yy806; if (yych <= 0x9F) - goto yy619; - goto yy605; - yy612: + goto yy818; + goto yy806; + yy813: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy605; + goto yy806; if (yych <= 0xBF) - goto yy621; - goto yy605; - yy613: + goto yy816; + goto yy806; + yy814: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy605; + goto yy806; if (yych <= 0xBF) - goto yy621; - goto yy605; - yy614: + goto yy816; + goto yy806; + yy815: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy605; - if (yych <= 0x8F) - goto yy621; - goto yy605; - yy615: + goto yy806; + if (yych >= 0x90) + goto yy806; + yy816: ++p; yych = *p; - yy616: + if (yych <= 0x7F) + goto yy817; + if (yych <= 0xBF) + goto yy818; + yy817: + p = marker; + if (yyaccept == 0) { + goto yy806; + } else { + goto yy830; + } + yy818: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy817; + if (yych >= 0xC0) + goto yy817; + yy819: + ++p; + yych = *p; + yy820: if (yybm[0 + yych] & 64) { - goto yy615; + goto yy819; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy617; - if (yych <= '-') - goto yy618; + goto yy817; + if (yych >= '.') + goto yy817; } else { if (yych <= 0xDF) - goto yy619; + goto yy818; if (yych <= 0xE0) - goto yy620; - goto yy621; + goto yy822; + goto yy816; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy622; + goto yy826; if (yych <= 0xEF) - goto yy621; - goto yy623; + goto yy816; + goto yy823; } else { if (yych <= 0xF3) - goto yy624; + goto yy824; if (yych <= 0xF4) - goto yy625; + goto yy825; + goto yy817; } } - yy617: - p = marker; - if (yyaccept == 0) { - goto yy605; - } else { - goto yy629; - } - yy618: + yy821: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy615; + goto yy819; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy617; + goto yy817; if (yych <= '-') - goto yy626; - goto yy617; + goto yy827; + goto yy817; } else { if (yych <= 0xDF) - goto yy619; - if (yych <= 0xE0) - goto yy620; - goto yy621; + goto yy818; + if (yych >= 0xE1) + goto yy816; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy622; + goto yy826; if (yych <= 0xEF) - goto yy621; - goto yy623; + goto yy816; + goto yy823; } else { if (yych <= 0xF3) - goto yy624; + goto yy824; if (yych <= 0xF4) - goto yy625; - goto yy617; + goto yy825; + goto yy817; } } - yy619: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy617; - if (yych <= 0xBF) - goto yy615; - goto yy617; - yy620: + yy822: ++p; yych = *p; if (yych <= 0x9F) - goto yy617; + goto yy817; if (yych <= 0xBF) - goto yy619; - goto yy617; - yy621: + goto yy818; + goto yy817; + yy823: ++p; yych = *p; - if (yych <= 0x7F) - goto yy617; + if (yych <= 0x8F) + goto yy817; if (yych <= 0xBF) - goto yy619; - goto yy617; - yy622: + goto yy816; + goto yy817; + yy824: ++p; yych = *p; if (yych <= 0x7F) - goto yy617; - if (yych <= 0x9F) - goto yy619; - goto yy617; - yy623: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy617; + goto yy817; if (yych <= 0xBF) - goto yy621; - goto yy617; - yy624: + goto yy816; + goto yy817; + yy825: ++p; yych = *p; if (yych <= 0x7F) - goto yy617; - if (yych <= 0xBF) - goto yy621; - goto yy617; - yy625: + goto yy817; + if (yych <= 0x8F) + goto yy816; + goto yy817; + yy826: ++p; yych = *p; if (yych <= 0x7F) - goto yy617; - if (yych <= 0x8F) - goto yy621; - goto yy617; - yy626: + goto yy817; + if (yych <= 0x9F) + goto yy818; + goto yy817; + yy827: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy626; + goto yy827; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy617; - goto yy615; + goto yy817; + goto yy819; } else { if (yych <= '>') - goto yy628; + goto yy829; if (yych <= 0x7F) - goto yy615; + goto yy819; if (yych <= 0xC1) - goto yy617; - goto yy619; + goto yy817; + goto yy818; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy620; + goto yy822; if (yych == 0xED) - goto yy622; - goto yy621; + goto yy826; + goto yy816; } else { if (yych <= 0xF0) - goto yy623; + goto yy823; if (yych <= 0xF3) - goto yy624; + goto yy824; if (yych <= 0xF4) - goto yy625; - goto yy617; + goto yy825; + goto yy817; } } - yy628: + yy829: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy615; + goto yy819; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy629; + goto yy830; if (yych <= '-') - goto yy618; + goto yy821; } else { if (yych <= 0xDF) - goto yy619; + goto yy818; if (yych <= 0xE0) - goto yy620; - goto yy621; + goto yy822; + goto yy816; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy622; + goto yy826; if (yych <= 0xEF) - goto yy621; - goto yy623; + goto yy816; + goto yy823; } else { if (yych <= 0xF3) - goto yy624; + goto yy824; if (yych <= 0xF4) - goto yy625; + goto yy825; } } - yy629 : { return (bufsize_t)(p - start); } + yy830 : { return (bufsize_t)(p - start); } } } @@ -10407,291 +13840,290 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '>') { if (yych == '\n') - goto yy634; + goto yy835; } else { if (yych <= '?') - goto yy635; + goto yy836; if (yych <= 0x7F) - goto yy632; + goto yy833; if (yych <= 0xC1) - goto yy634; - goto yy636; + goto yy835; + goto yy837; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy637; + goto yy838; if (yych == 0xED) - goto yy639; - goto yy638; + goto yy840; + goto yy839; } else { if (yych <= 0xF0) - goto yy640; + goto yy841; if (yych <= 0xF3) - goto yy641; + goto yy842; if (yych <= 0xF4) - goto yy642; - goto yy634; + goto yy843; + goto yy835; } } - yy632: + yy833: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy644; + goto yy848; } else { if (yych <= 0xC1) - goto yy633; + goto yy834; if (yych <= 0xF4) - goto yy644; + goto yy848; } - yy633 : { return 0; } - yy634: + yy834 : { return 0; } + yy835: yych = *++p; - goto yy633; - yy635: + goto yy834; + yy836: yyaccept = 0; yych = *(marker = ++p); if (yych <= '>') { if (yych == '\n') - goto yy633; + goto yy834; if (yych <= '=') - goto yy644; - goto yy655; + goto yy848; + goto yy856; } else { if (yych <= 0x7F) - goto yy644; + goto yy848; if (yych <= 0xC1) - goto yy633; + goto yy834; if (yych <= 0xF4) - goto yy644; - goto yy633; + goto yy848; + goto yy834; } - yy636: + yy837: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy633; + goto yy834; if (yych <= 0xBF) - goto yy643; - goto yy633; - yy637: + goto yy847; + goto yy834; + yy838: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy633; + goto yy834; if (yych <= 0xBF) - goto yy648; - goto yy633; - yy638: + goto yy846; + goto yy834; + yy839: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy633; + goto yy834; if (yych <= 0xBF) - goto yy648; - goto yy633; - yy639: + goto yy846; + goto yy834; + yy840: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy633; + goto yy834; if (yych <= 0x9F) - goto yy648; - goto yy633; - yy640: + goto yy846; + goto yy834; + yy841: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy633; + goto yy834; if (yych <= 0xBF) - goto yy650; - goto yy633; - yy641: + goto yy844; + goto yy834; + yy842: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy633; + goto yy834; if (yych <= 0xBF) - goto yy650; - goto yy633; - yy642: + goto yy844; + goto yy834; + yy843: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy633; - if (yych <= 0x8F) - goto yy650; - goto yy633; - yy643: + goto yy834; + if (yych >= 0x90) + goto yy834; + yy844: ++p; yych = *p; - yy644: + if (yych <= 0x7F) + goto yy845; + if (yych <= 0xBF) + goto yy846; + yy845: + p = marker; + if (yyaccept == 0) { + goto yy834; + } else { + goto yy857; + } + yy846: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy845; + if (yych >= 0xC0) + goto yy845; + yy847: + ++p; + yych = *p; + yy848: if (yybm[0 + yych] & 64) { - goto yy643; + goto yy847; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy645; - if (yych <= '?') - goto yy646; + goto yy845; + if (yych >= '@') + goto yy845; } else { if (yych <= 0xDF) - goto yy648; + goto yy846; if (yych <= 0xE0) - goto yy649; - goto yy650; + goto yy851; + goto yy844; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy651; + goto yy855; if (yych <= 0xEF) - goto yy650; - goto yy652; + goto yy844; + goto yy852; } else { if (yych <= 0xF3) - goto yy653; + goto yy853; if (yych <= 0xF4) - goto yy654; + goto yy854; + goto yy845; } } - yy645: - p = marker; - if (yyaccept == 0) { - goto yy633; - } else { - goto yy656; - } - yy646: + yy849: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy646; + goto yy849; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy645; - goto yy643; + goto yy845; + goto yy847; } else { if (yych <= '>') - goto yy655; + goto yy856; if (yych <= 0x7F) - goto yy643; + goto yy847; if (yych <= 0xC1) - goto yy645; + goto yy845; + goto yy846; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy649; + goto yy851; if (yych == 0xED) - goto yy651; - goto yy650; + goto yy855; + goto yy844; } else { if (yych <= 0xF0) - goto yy652; + goto yy852; if (yych <= 0xF3) - goto yy653; + goto yy853; if (yych <= 0xF4) - goto yy654; - goto yy645; + goto yy854; + goto yy845; } } - yy648: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy645; - if (yych <= 0xBF) - goto yy643; - goto yy645; - yy649: + yy851: ++p; yych = *p; if (yych <= 0x9F) - goto yy645; + goto yy845; if (yych <= 0xBF) - goto yy648; - goto yy645; - yy650: + goto yy846; + goto yy845; + yy852: ++p; yych = *p; - if (yych <= 0x7F) - goto yy645; + if (yych <= 0x8F) + goto yy845; if (yych <= 0xBF) - goto yy648; - goto yy645; - yy651: + goto yy844; + goto yy845; + yy853: ++p; yych = *p; if (yych <= 0x7F) - goto yy645; - if (yych <= 0x9F) - goto yy648; - goto yy645; - yy652: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy645; + goto yy845; if (yych <= 0xBF) - goto yy650; - goto yy645; - yy653: + goto yy844; + goto yy845; + yy854: ++p; yych = *p; if (yych <= 0x7F) - goto yy645; - if (yych <= 0xBF) - goto yy650; - goto yy645; - yy654: + goto yy845; + if (yych <= 0x8F) + goto yy844; + goto yy845; + yy855: ++p; yych = *p; if (yych <= 0x7F) - goto yy645; - if (yych <= 0x8F) - goto yy650; - goto yy645; - yy655: + goto yy845; + if (yych <= 0x9F) + goto yy846; + goto yy845; + yy856: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy643; + goto yy847; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy656; + goto yy857; if (yych <= '?') - goto yy646; + goto yy849; } else { if (yych <= 0xDF) - goto yy648; + goto yy846; if (yych <= 0xE0) - goto yy649; - goto yy650; + goto yy851; + goto yy844; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy651; + goto yy855; if (yych <= 0xEF) - goto yy650; - goto yy652; + goto yy844; + goto yy852; } else { if (yych <= 0xF3) - goto yy653; + goto yy853; if (yych <= 0xF4) - goto yy654; + goto yy854; } } - yy656 : { return (bufsize_t)(p - start); } + yy857 : { return (bufsize_t)(p - start); } } } @@ -10704,259 +14136,268 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 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, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 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, }; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy662; - } - if (yych <= 0xE0) { - if (yych <= 0x7F) { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych == '\n') - goto yy661; + goto yy862; } else { + if (yych <= '>') + goto yy863; + if (yych <= 0x7F) + goto yy860; if (yych <= 0xC1) - goto yy661; - if (yych <= 0xDF) - goto yy665; - goto yy666; + goto yy862; + goto yy865; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy866; if (yych == 0xED) - goto yy668; - goto yy667; + goto yy868; + goto yy867; } else { if (yych <= 0xF0) - goto yy669; + goto yy869; if (yych <= 0xF3) - goto yy670; + goto yy870; if (yych <= 0xF4) - goto yy671; - goto yy661; + goto yy871; + goto yy862; } } + yy860: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy673; + goto yy876; } else { if (yych <= 0xC1) - goto yy660; + goto yy861; if (yych <= 0xF4) - goto yy673; + goto yy876; } - yy660 : { return 0; } - yy661: + yy861 : { return 0; } + yy862: yych = *++p; - goto yy660; - yy662: + goto yy861; + yy863: yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy672; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy664; - if (yych <= '>') - goto yy662; - } else { - if (yych <= 0xDF) - goto yy675; - if (yych <= 0xE0) - goto yy676; - goto yy677; - } + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy876; } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy678; - if (yych <= 0xEF) - goto yy677; - goto yy679; - } else { - if (yych <= 0xF3) - goto yy680; - if (yych <= 0xF4) - goto yy681; - } + if (yych <= 0xC1) + goto yy864; + if (yych <= 0xF4) + goto yy876; } - yy664 : { return (bufsize_t)(p - start); } - yy665: + yy864 : { return (bufsize_t)(p - start); } + yy865: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy660; + goto yy861; if (yych <= 0xBF) - goto yy672; - goto yy660; - yy666: + goto yy875; + goto yy861; + yy866: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy660; + goto yy861; if (yych <= 0xBF) - goto yy675; - goto yy660; - yy667: + goto yy874; + goto yy861; + yy867: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy660; + goto yy861; if (yych <= 0xBF) - goto yy675; - goto yy660; - yy668: + goto yy874; + goto yy861; + yy868: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy660; + goto yy861; if (yych <= 0x9F) - goto yy675; - goto yy660; - yy669: + goto yy874; + goto yy861; + yy869: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy660; + goto yy861; if (yych <= 0xBF) - goto yy677; - goto yy660; - yy670: + goto yy872; + goto yy861; + yy870: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy660; + goto yy861; if (yych <= 0xBF) - goto yy677; - goto yy660; - yy671: + goto yy872; + goto yy861; + yy871: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy660; - if (yych <= 0x8F) - goto yy677; - goto yy660; - yy672: + goto yy861; + if (yych >= 0x90) + goto yy861; + yy872: ++p; yych = *p; - yy673: - if (yybm[0 + yych] & 128) { - goto yy672; + if (yych <= 0x7F) + goto yy873; + if (yych <= 0xBF) + goto yy874; + yy873: + p = marker; + if (yyaccept == 0) { + goto yy861; + } else { + goto yy864; + } + yy874: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy873; + if (yych >= 0xC0) + goto yy873; + yy875: + ++p; + yych = *p; + yy876: + if (yybm[0 + yych] & 64) { + goto yy875; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy674; - if (yych <= '>') - goto yy662; + goto yy873; + if (yych >= '?') + goto yy873; } else { if (yych <= 0xDF) - goto yy675; + goto yy874; if (yych <= 0xE0) - goto yy676; - goto yy677; + goto yy879; + goto yy872; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy678; + goto yy883; if (yych <= 0xEF) - goto yy677; - goto yy679; + goto yy872; + goto yy880; } else { if (yych <= 0xF3) - goto yy680; + goto yy881; if (yych <= 0xF4) - goto yy681; + goto yy882; + goto yy873; } } - yy674: - p = marker; - if (yyaccept == 0) { - goto yy660; + yy877: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy875; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy864; + if (yych <= '>') + goto yy877; + goto yy864; + } else { + if (yych <= 0xDF) + goto yy874; + if (yych >= 0xE1) + goto yy872; + } } else { - goto yy664; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy883; + if (yych <= 0xEF) + goto yy872; + goto yy880; + } else { + if (yych <= 0xF3) + goto yy881; + if (yych <= 0xF4) + goto yy882; + goto yy864; + } } - yy675: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy674; - if (yych <= 0xBF) - goto yy672; - goto yy674; - yy676: + yy879: ++p; yych = *p; if (yych <= 0x9F) - goto yy674; + goto yy873; if (yych <= 0xBF) - goto yy675; - goto yy674; - yy677: + goto yy874; + goto yy873; + yy880: ++p; yych = *p; - if (yych <= 0x7F) - goto yy674; + if (yych <= 0x8F) + goto yy873; if (yych <= 0xBF) - goto yy675; - goto yy674; - yy678: + goto yy872; + goto yy873; + yy881: ++p; yych = *p; if (yych <= 0x7F) - goto yy674; - if (yych <= 0x9F) - goto yy675; - goto yy674; - yy679: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy674; + goto yy873; if (yych <= 0xBF) - goto yy677; - goto yy674; - yy680: + goto yy872; + goto yy873; + yy882: ++p; yych = *p; if (yych <= 0x7F) - goto yy674; - if (yych <= 0xBF) - goto yy677; - goto yy674; - yy681: + goto yy873; + if (yych <= 0x8F) + goto yy872; + goto yy873; + yy883: ++p; yych = *p; if (yych <= 0x7F) - goto yy674; - if (yych <= 0x8F) - goto yy677; - goto yy674; + goto yy873; + if (yych <= 0x9F) + goto yy874; + goto yy873; } } @@ -10989,326 +14430,323 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '\\') { if (yych == '\n') - goto yy686; + goto yy888; } else { if (yych <= ']') - goto yy687; + goto yy889; if (yych <= 0x7F) - goto yy684; + goto yy886; if (yych <= 0xC1) - goto yy686; - goto yy688; + goto yy888; + goto yy890; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy689; + goto yy891; if (yych == 0xED) - goto yy691; - goto yy690; + goto yy893; + goto yy892; } else { if (yych <= 0xF0) - goto yy692; + goto yy894; if (yych <= 0xF3) - goto yy693; + goto yy895; if (yych <= 0xF4) - goto yy694; - goto yy686; + goto yy896; + goto yy888; } } - yy684: + yy886: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) { if (yych != '\n') - goto yy696; + goto yy901; } else { if (yych <= 0xC1) - goto yy685; + goto yy887; if (yych <= 0xF4) - goto yy696; + goto yy901; } - yy685 : { return 0; } - yy686: + yy887 : { return 0; } + yy888: yych = *++p; - goto yy685; - yy687: + goto yy887; + yy889: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy706; + goto yy908; } if (yych <= 0x7F) { if (yych == '\n') - goto yy685; - goto yy696; + goto yy887; + goto yy901; } else { if (yych <= 0xC1) - goto yy685; + goto yy887; if (yych <= 0xF4) - goto yy696; - goto yy685; + goto yy901; + goto yy887; } - yy688: + yy890: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy685; + goto yy887; if (yych <= 0xBF) - goto yy695; - goto yy685; - yy689: + goto yy900; + goto yy887; + yy891: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy685; + goto yy887; if (yych <= 0xBF) - goto yy699; - goto yy685; - yy690: + goto yy899; + goto yy887; + yy892: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy685; + goto yy887; if (yych <= 0xBF) - goto yy699; - goto yy685; - yy691: + goto yy899; + goto yy887; + yy893: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy685; + goto yy887; if (yych <= 0x9F) - goto yy699; - goto yy685; - yy692: + goto yy899; + goto yy887; + yy894: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy685; + goto yy887; if (yych <= 0xBF) - goto yy701; - goto yy685; - yy693: + goto yy897; + goto yy887; + yy895: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy685; + goto yy887; if (yych <= 0xBF) - goto yy701; - goto yy685; - yy694: + goto yy897; + goto yy887; + yy896: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy685; - if (yych <= 0x8F) - goto yy701; - goto yy685; - yy695: + goto yy887; + if (yych >= 0x90) + goto yy887; + yy897: ++p; yych = *p; - yy696: + if (yych <= 0x7F) + goto yy898; + if (yych <= 0xBF) + goto yy899; + yy898: + p = marker; + if (yyaccept == 0) { + goto yy887; + } else { + goto yy911; + } + yy899: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy898; + if (yych >= 0xC0) + goto yy898; + yy900: + ++p; + yych = *p; + yy901: if (yybm[0 + yych] & 64) { - goto yy695; + goto yy900; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy697; - if (yych <= ']') - goto yy698; + goto yy898; + if (yych >= '^') + goto yy898; } else { if (yych <= 0xDF) - goto yy699; + goto yy899; if (yych <= 0xE0) - goto yy700; - goto yy701; + goto yy903; + goto yy897; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy702; + goto yy907; if (yych <= 0xEF) - goto yy701; - goto yy703; + goto yy897; + goto yy904; } else { if (yych <= 0xF3) - goto yy704; + goto yy905; if (yych <= 0xF4) - goto yy705; + goto yy906; + goto yy898; } } - yy697: - p = marker; - if (yyaccept == 0) { - goto yy685; - } else { - goto yy709; - } - yy698: + yy902: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy695; + goto yy900; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy697; + goto yy898; if (yych <= ']') - goto yy706; - goto yy697; + goto yy908; + goto yy898; } else { if (yych <= 0xDF) - goto yy699; - if (yych <= 0xE0) - goto yy700; - goto yy701; + goto yy899; + if (yych >= 0xE1) + goto yy897; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy702; + goto yy907; if (yych <= 0xEF) - goto yy701; - goto yy703; + goto yy897; + goto yy904; } else { if (yych <= 0xF3) - goto yy704; + goto yy905; if (yych <= 0xF4) - goto yy705; - goto yy697; + goto yy906; + goto yy898; } } - yy699: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy697; - if (yych <= 0xBF) - goto yy695; - goto yy697; - yy700: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy697; - if (yych <= 0xBF) - goto yy699; - goto yy697; - yy701: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy697; - if (yych <= 0xBF) - goto yy699; - goto yy697; - yy702: + yy903: ++p; - yych = *p; - if (yych <= 0x7F) - goto yy697; + yych = *p; if (yych <= 0x9F) - goto yy699; - goto yy697; - yy703: + goto yy898; + if (yych <= 0xBF) + goto yy899; + goto yy898; + yy904: ++p; yych = *p; if (yych <= 0x8F) - goto yy697; + goto yy898; if (yych <= 0xBF) - goto yy701; - goto yy697; - yy704: + goto yy897; + goto yy898; + yy905: ++p; yych = *p; if (yych <= 0x7F) - goto yy697; + goto yy898; if (yych <= 0xBF) - goto yy701; - goto yy697; - yy705: + goto yy897; + goto yy898; + yy906: ++p; yych = *p; if (yych <= 0x7F) - goto yy697; + goto yy898; if (yych <= 0x8F) - goto yy701; - goto yy697; - yy706: + goto yy897; + goto yy898; + yy907: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy898; + if (yych <= 0x9F) + goto yy899; + goto yy898; + yy908: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy706; + goto yy908; } if (yych <= 0xDF) { if (yych <= '=') { if (yych == '\n') - goto yy697; - goto yy695; + goto yy898; + goto yy900; } else { if (yych <= '>') - goto yy708; + goto yy910; if (yych <= 0x7F) - goto yy695; + goto yy900; if (yych <= 0xC1) - goto yy697; - goto yy699; + goto yy898; + goto yy899; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy700; + goto yy903; if (yych == 0xED) - goto yy702; - goto yy701; + goto yy907; + goto yy897; } else { if (yych <= 0xF0) - goto yy703; + goto yy904; if (yych <= 0xF3) - goto yy704; + goto yy905; if (yych <= 0xF4) - goto yy705; - goto yy697; + goto yy906; + goto yy898; } } - yy708: + yy910: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy695; + goto yy900; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy709; + goto yy911; if (yych <= ']') - goto yy698; + goto yy902; } else { if (yych <= 0xDF) - goto yy699; + goto yy899; if (yych <= 0xE0) - goto yy700; - goto yy701; + goto yy903; + goto yy897; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy702; + goto yy907; if (yych <= 0xEF) - goto yy701; - goto yy703; + goto yy897; + goto yy904; } else { if (yych <= 0xF3) - goto yy704; + goto yy905; if (yych <= 0xF4) - goto yy705; + goto yy906; } } - yy709 : { return (bufsize_t)(p - start); } + yy911 : { return (bufsize_t)(p - start); } } } @@ -11323,16 +14761,16 @@ bufsize_t _scan_link_title(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11346,556 +14784,558 @@ bufsize_t _scan_link_title(const unsigned char *p) { yych = *p; if (yych <= '&') { if (yych == '"') - goto yy714; + goto yy916; } else { if (yych <= '\'') - goto yy715; + goto yy917; if (yych <= '(') - goto yy716; + goto yy918; } ++p; - yy713 : { return 0; } - yy714: + yy915 : { return 0; } + yy916: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy713; + goto yy915; if (yych <= 0x7F) - goto yy718; + goto yy951; if (yych <= 0xC1) - goto yy713; + goto yy915; if (yych <= 0xF4) - goto yy718; - goto yy713; - yy715: + goto yy951; + goto yy915; + yy917: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy713; + goto yy915; if (yych <= 0x7F) - goto yy732; + goto yy937; if (yych <= 0xC1) - goto yy713; + goto yy915; if (yych <= 0xF4) - goto yy732; - goto yy713; - yy716: + goto yy937; + goto yy915; + yy918: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy713; + goto yy915; if (yych <= 0x7F) - goto yy745; + goto yy923; if (yych <= 0xC1) - goto yy713; + goto yy915; if (yych <= 0xF4) - goto yy745; - goto yy713; - yy717: + goto yy923; + goto yy915; + yy919: ++p; yych = *p; - yy718: - if (yybm[0 + yych] & 16) { - goto yy717; + if (yybm[0 + yych] & 32) { + goto yy922; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy719; - if (yych <= '"') - goto yy720; - goto yy722; + goto yy921; + if (yych <= ')') + goto yy933; + goto yy919; } else { if (yych <= 0xC1) - goto yy719; + goto yy921; if (yych <= 0xDF) - goto yy724; - goto yy725; + goto yy924; + goto yy925; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy727; - goto yy726; + goto yy930; + goto yy926; } else { if (yych <= 0xF0) - goto yy728; + goto yy927; if (yych <= 0xF3) - goto yy729; + goto yy928; if (yych <= 0xF4) - goto yy730; + goto yy929; } } - yy719: + yy921: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy713; + goto yy915; } else { - goto yy721; + goto yy932; } } else { if (yyaccept == 2) { - goto yy734; + goto yy946; } else { - goto yy747; + goto yy960; } } - yy720: - ++p; - yy721 : { return (bufsize_t)(p - start); } - yy722: + yy922: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy717; + yy923: + if (yybm[0 + yych] & 32) { + goto yy922; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy719; - if (yych <= '"') - goto yy757; - goto yy722; + goto yy921; + if (yych <= ')') + goto yy931; + goto yy919; } else { if (yych <= 0xC1) - goto yy719; + goto yy921; if (yych >= 0xE0) - goto yy725; + goto yy925; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy727; - goto yy726; + goto yy930; + goto yy926; } else { if (yych <= 0xF0) - goto yy728; + goto yy927; if (yych <= 0xF3) - goto yy729; + goto yy928; if (yych <= 0xF4) - goto yy730; - goto yy719; + goto yy929; + goto yy921; } } - yy724: + yy924: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy717; - goto yy719; - yy725: + goto yy922; + goto yy921; + yy925: ++p; yych = *p; if (yych <= 0x9F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy724; - goto yy719; - yy726: + goto yy924; + goto yy921; + yy926: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy724; - goto yy719; - yy727: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy719; - if (yych <= 0x9F) - goto yy724; - goto yy719; - yy728: + goto yy924; + goto yy921; + yy927: ++p; yych = *p; if (yych <= 0x8F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy726; - goto yy719; - yy729: + goto yy926; + goto yy921; + yy928: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy726; - goto yy719; - yy730: + goto yy926; + goto yy921; + yy929: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0x8F) - goto yy726; - goto yy719; - yy731: + goto yy926; + goto yy921; + yy930: ++p; yych = *p; - yy732: - if (yybm[0 + yych] & 64) { - goto yy731; + if (yych <= 0x7F) + goto yy921; + if (yych <= 0x9F) + goto yy924; + goto yy921; + yy931: + ++p; + yy932 : { return (bufsize_t)(p - start); } + yy933: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy922; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy719; - if (yych >= '(') - goto yy735; + goto yy932; + if (yych <= ')') + goto yy931; + goto yy919; } else { if (yych <= 0xC1) - goto yy719; + goto yy932; if (yych <= 0xDF) - goto yy737; - goto yy738; + goto yy924; + goto yy925; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy740; - goto yy739; + goto yy930; + goto yy926; } else { if (yych <= 0xF0) - goto yy741; + goto yy927; if (yych <= 0xF3) - goto yy742; + goto yy928; if (yych <= 0xF4) - goto yy743; - goto yy719; + goto yy929; + goto yy932; } } - yy733: + yy934: ++p; - yy734 : { return (bufsize_t)(p - start); } - yy735: + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy936; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy921; + if (yych <= '\'') + goto yy947; + goto yy934; + } else { + if (yych <= 0xC1) + goto yy921; + if (yych <= 0xDF) + goto yy938; + goto yy939; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy944; + goto yy940; + } else { + if (yych <= 0xF0) + goto yy941; + if (yych <= 0xF3) + goto yy942; + if (yych <= 0xF4) + goto yy943; + goto yy921; + } + } + yy936: ++p; yych = *p; + yy937: if (yybm[0 + yych] & 64) { - goto yy731; + goto yy936; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy719; + goto yy921; if (yych <= '\'') - goto yy758; - goto yy735; + goto yy945; + goto yy934; } else { if (yych <= 0xC1) - goto yy719; + goto yy921; if (yych >= 0xE0) - goto yy738; + goto yy939; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy740; - goto yy739; + goto yy944; + goto yy940; } else { if (yych <= 0xF0) - goto yy741; + goto yy941; if (yych <= 0xF3) - goto yy742; + goto yy942; if (yych <= 0xF4) - goto yy743; - goto yy719; + goto yy943; + goto yy921; } } - yy737: + yy938: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy731; - goto yy719; - yy738: + goto yy936; + goto yy921; + yy939: ++p; yych = *p; if (yych <= 0x9F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy737; - goto yy719; - yy739: + goto yy938; + goto yy921; + yy940: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy737; - goto yy719; - yy740: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy719; - if (yych <= 0x9F) - goto yy737; - goto yy719; - yy741: + goto yy938; + goto yy921; + yy941: ++p; yych = *p; if (yych <= 0x8F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy739; - goto yy719; - yy742: + goto yy940; + goto yy921; + yy942: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy739; - goto yy719; - yy743: + goto yy940; + goto yy921; + yy943: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0x8F) - goto yy739; - goto yy719; - yy744: + goto yy940; + goto yy921; + yy944: ++p; yych = *p; - yy745: - if (yybm[0 + yych] & 128) { - goto yy744; + if (yych <= 0x7F) + goto yy921; + if (yych <= 0x9F) + goto yy938; + goto yy921; + yy945: + ++p; + yy946 : { return (bufsize_t)(p - start); } + yy947: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy936; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy719; - if (yych >= '*') - goto yy748; + goto yy946; + if (yych <= '\'') + goto yy945; + goto yy934; + } else { + if (yych <= 0xC1) + goto yy946; + if (yych <= 0xDF) + goto yy938; + goto yy939; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy944; + goto yy940; + } else { + if (yych <= 0xF0) + goto yy941; + if (yych <= 0xF3) + goto yy942; + if (yych <= 0xF4) + goto yy943; + goto yy946; + } + } + yy948: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy950; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy921; + if (yych <= '"') + goto yy961; + goto yy948; } else { if (yych <= 0xC1) - goto yy719; + goto yy921; if (yych <= 0xDF) - goto yy750; - goto yy751; + goto yy952; + goto yy953; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy753; - goto yy752; + goto yy958; + goto yy954; } else { if (yych <= 0xF0) - goto yy754; + goto yy955; if (yych <= 0xF3) - goto yy755; + goto yy956; if (yych <= 0xF4) - goto yy756; - goto yy719; + goto yy957; + goto yy921; } } - yy746: - ++p; - yy747 : { return (bufsize_t)(p - start); } - yy748: + yy950: ++p; yych = *p; + yy951: if (yybm[0 + yych] & 128) { - goto yy744; + goto yy950; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy719; - if (yych <= ')') - goto yy759; - goto yy748; + goto yy921; + if (yych <= '"') + goto yy959; + goto yy948; } else { if (yych <= 0xC1) - goto yy719; + goto yy921; if (yych >= 0xE0) - goto yy751; + goto yy953; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy753; - goto yy752; + goto yy958; + goto yy954; } else { if (yych <= 0xF0) - goto yy754; + goto yy955; if (yych <= 0xF3) - goto yy755; + goto yy956; if (yych <= 0xF4) - goto yy756; - goto yy719; + goto yy957; + goto yy921; } } - yy750: + yy952: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy744; - goto yy719; - yy751: + goto yy950; + goto yy921; + yy953: ++p; yych = *p; if (yych <= 0x9F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy750; - goto yy719; - yy752: + goto yy952; + goto yy921; + yy954: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy750; - goto yy719; - yy753: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy719; - if (yych <= 0x9F) - goto yy750; - goto yy719; - yy754: + goto yy952; + goto yy921; + yy955: ++p; yych = *p; if (yych <= 0x8F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy752; - goto yy719; - yy755: + goto yy954; + goto yy921; + yy956: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0xBF) - goto yy752; - goto yy719; - yy756: + goto yy954; + goto yy921; + yy957: ++p; yych = *p; if (yych <= 0x7F) - goto yy719; + goto yy921; if (yych <= 0x8F) - goto yy752; - goto yy719; - yy757: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy717; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy721; - if (yych <= '"') - goto yy720; - goto yy722; - } else { - if (yych <= 0xC1) - goto yy721; - if (yych <= 0xDF) - goto yy724; - goto yy725; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy727; - goto yy726; - } else { - if (yych <= 0xF0) - goto yy728; - if (yych <= 0xF3) - goto yy729; - if (yych <= 0xF4) - goto yy730; - goto yy721; - } - } - yy758: - yyaccept = 2; - marker = ++p; + goto yy954; + goto yy921; + yy958: + ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy731; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy734; - if (yych <= '\'') - goto yy733; - goto yy735; - } else { - if (yych <= 0xC1) - goto yy734; - if (yych <= 0xDF) - goto yy737; - goto yy738; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy740; - goto yy739; - } else { - if (yych <= 0xF0) - goto yy741; - if (yych <= 0xF3) - goto yy742; - if (yych <= 0xF4) - goto yy743; - goto yy734; - } - } - yy759: + if (yych <= 0x7F) + goto yy921; + if (yych <= 0x9F) + goto yy952; + goto yy921; + yy959: + ++p; + yy960 : { return (bufsize_t)(p - start); } + yy961: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy744; + goto yy950; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy747; - if (yych <= ')') - goto yy746; - goto yy748; + goto yy960; + if (yych <= '"') + goto yy959; + goto yy948; } else { if (yych <= 0xC1) - goto yy747; + goto yy960; if (yych <= 0xDF) - goto yy750; - goto yy751; + goto yy952; + goto yy953; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy753; - goto yy752; + goto yy958; + goto yy954; } else { if (yych <= 0xF0) - goto yy754; + goto yy955; if (yych <= 0xF3) - goto yy755; + goto yy956; if (yych <= 0xF4) - goto yy756; - goto yy747; + goto yy957; + goto yy960; } } } @@ -11923,18 +15363,28 @@ bufsize_t _scan_spacechars(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy764; - } + if (yych <= 0x08) + goto yy964; + if (yych <= '\r') + goto yy966; + if (yych == ' ') + goto yy966; + yy964: ++p; { return 0; } - yy764: + yy966: + ++p; + yych = *p; + goto yy969; + yy967 : { return (bufsize_t)(p - start); } + yy968: ++p; yych = *p; + yy969: if (yybm[0 + yych] & 128) { - goto yy764; + goto yy968; } - { return (bufsize_t)(p - start); } + goto yy967; } } @@ -11961,116 +15411,115 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { }; yych = *p; if (yych == '#') - goto yy771; + goto yy974; ++p; - yy770 : { return 0; } - yy771: + yy973 : { return 0; } + yy974: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy772; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy770; - if (yych <= '\n') - goto yy775; - goto yy770; + goto yy973; + if (yych >= '\v') + goto yy973; } else { if (yych <= '\r') - goto yy775; + goto yy975; if (yych == '#') - goto yy776; - goto yy770; + goto yy979; + goto yy973; } - yy772: + yy975: + ++p; + yy976 : { return (bufsize_t)(p - start); } + yy977: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy772; + goto yy977; } - yy774 : { return (bufsize_t)(p - start); } - yy775: - yych = *++p; - goto yy774; - yy776: + goto yy976; + yy979: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy772; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy777; + goto yy980; if (yych <= '\n') - goto yy775; + goto yy975; } else { if (yych <= '\r') - goto yy775; + goto yy975; if (yych == '#') - goto yy778; + goto yy981; } - yy777: + yy980: p = marker; - goto yy770; - yy778: + goto yy973; + yy981: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy772; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy777; + goto yy980; if (yych <= '\n') - goto yy775; - goto yy777; + goto yy975; + goto yy980; } else { if (yych <= '\r') - goto yy775; + goto yy975; if (yych != '#') - goto yy777; + goto yy980; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy772; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy777; + goto yy980; if (yych <= '\n') - goto yy775; - goto yy777; + goto yy975; + goto yy980; } else { if (yych <= '\r') - goto yy775; + goto yy975; if (yych != '#') - goto yy777; + goto yy980; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy772; + goto yy977; } if (yych <= '\f') { if (yych <= 0x08) - goto yy777; + goto yy980; if (yych <= '\n') - goto yy775; - goto yy777; + goto yy975; + goto yy980; } else { if (yych <= '\r') - goto yy775; + goto yy975; if (yych != '#') - goto yy777; + goto yy980; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy772; + goto yy977; } if (yych <= 0x08) - goto yy777; + goto yy980; if (yych <= '\n') - goto yy775; + goto yy975; if (yych == '\r') - goto yy775; - goto yy777; + goto yy975; + goto yy980; } } @@ -12082,141 +15531,141 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 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, 32, 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, 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 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, 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, 0, 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 = *p; if (yych == '-') - goto yy786; + goto yy989; if (yych == '=') - goto yy787; + goto yy990; ++p; - yy785 : { return 0; } - yy786: + yy988 : { return 0; } + yy989: yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy793; + if (yybm[0 + yych] & 128) { + goto yy1002; } if (yych <= '\f') { if (yych <= 0x08) - goto yy785; + goto yy988; if (yych <= '\n') - goto yy789; - goto yy785; + goto yy999; + goto yy988; } else { if (yych <= '\r') - goto yy789; + goto yy999; if (yych == ' ') - goto yy789; - goto yy785; + goto yy999; + goto yy988; } - yy787: + yy990: yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy799; + if (yybm[0 + yych] & 64) { + goto yy996; } if (yych <= '\f') { if (yych <= 0x08) - goto yy785; + goto yy988; if (yych <= '\n') - goto yy796; - goto yy785; + goto yy992; + goto yy988; } else { if (yych <= '\r') - goto yy796; + goto yy992; if (yych == ' ') - goto yy796; - goto yy785; + goto yy992; + goto yy988; } - yy788: + yy991: ++p; yych = *p; - yy789: + yy992: if (yybm[0 + yych] & 32) { - goto yy788; + goto yy991; } if (yych <= 0x08) - goto yy790; + goto yy993; if (yych <= '\n') - goto yy791; + goto yy994; if (yych == '\r') - goto yy791; - yy790: + goto yy994; + yy993: p = marker; - goto yy785; - yy791: + goto yy988; + yy994: ++p; - { return 2; } - yy793: + { return 1; } + yy996: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy788; + goto yy991; } if (yych <= '\f') { if (yych <= 0x08) - goto yy790; + goto yy993; if (yych <= '\n') - goto yy791; - goto yy790; + goto yy994; + goto yy993; } else { if (yych <= '\r') - goto yy791; - if (yych == '-') - goto yy793; - goto yy790; + goto yy994; + if (yych == '=') + goto yy996; + goto yy993; } - yy795: + yy998: ++p; yych = *p; - yy796: + yy999: if (yych <= '\f') { if (yych <= 0x08) - goto yy790; + goto yy993; if (yych <= '\t') - goto yy795; + goto yy998; if (yych >= '\v') - goto yy790; + goto yy993; } else { if (yych <= '\r') - goto yy797; + goto yy1000; if (yych == ' ') - goto yy795; - goto yy790; + goto yy998; + goto yy993; } - yy797: + yy1000: ++p; - { return 1; } - yy799: + { return 2; } + yy1002: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy799; + goto yy1002; } if (yych <= '\f') { if (yych <= 0x08) - goto yy790; + goto yy993; if (yych <= '\t') - goto yy795; + goto yy998; if (yych <= '\n') - goto yy797; - goto yy790; + goto yy1000; + goto yy993; } else { if (yych <= '\r') - goto yy797; + goto yy1000; if (yych == ' ') - goto yy795; - goto yy790; + goto yy998; + goto yy993; } } } @@ -12231,193 +15680,265 @@ 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, 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, 32, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; if (yych <= ',') { if (yych == '*') - goto yy805; + goto yy1008; } else { if (yych <= '-') - goto yy806; + goto yy1009; if (yych == '_') - goto yy807; + goto yy1010; } ++p; - yy804 : { return 0; } - yy805: + yy1007 : { return 0; } + yy1008: yych = *(marker = ++p); - if (yybm[0 + yych] & 16) { - goto yy808; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1032; + goto yy1007; + } else { + if (yych <= ' ') + goto yy1032; + if (yych == '*') + goto yy1034; + goto yy1007; } - if (yych == '*') - goto yy811; - goto yy804; - yy806: + yy1009: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy813; - goto yy804; + goto yy1022; + goto yy1007; } else { if (yych <= ' ') - goto yy813; + goto yy1022; if (yych == '-') - goto yy815; - goto yy804; + goto yy1024; + goto yy1007; } - yy807: + yy1010: yych = *(marker = ++p); + if (yybm[0 + yych] & 16) { + goto yy1011; + } + if (yych == '_') + goto yy1014; + goto yy1007; + yy1011: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy1011; + } + if (yych == '_') + goto yy1014; + yy1013: + p = marker; + goto yy1007; + yy1014: + ++p; + yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy817; - goto yy804; + goto yy1014; + goto yy1013; } else { if (yych <= ' ') - goto yy817; - if (yych == '_') - goto yy819; - goto yy804; + goto yy1014; + if (yych != '_') + goto yy1013; } - yy808: + yy1016: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy808; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x08) + goto yy1013; + goto yy1016; + } else { + if (yych <= '\n') + goto yy1018; + if (yych <= '\f') + goto yy1013; + } + } else { + if (yych <= ' ') { + if (yych <= 0x1F) + goto yy1013; + goto yy1016; + } else { + if (yych == '_') + goto yy1020; + goto yy1013; + } + } + yy1018: + ++p; + { return (bufsize_t)(p - start); } + yy1020: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy1020; } - if (yych == '*') - goto yy811; - yy810: - p = marker; - goto yy804; - yy811: + if (yych <= 0x08) + goto yy1013; + if (yych <= '\n') + goto yy1018; + if (yych == '\r') + goto yy1018; + goto yy1013; + yy1022: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy811; - goto yy810; + goto yy1022; + goto yy1013; } else { if (yych <= ' ') - goto yy811; - if (yych == '*') - goto yy821; - goto yy810; + goto yy1022; + if (yych != '-') + goto yy1013; } - yy813: + yy1024: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy813; - goto yy810; + goto yy1024; + goto yy1013; } else { if (yych <= ' ') - goto yy813; + goto yy1024; if (yych != '-') - goto yy810; + goto yy1013; } - yy815: + yy1026: ++p; yych = *p; - if (yych <= 0x1F) { - if (yych == '\t') - goto yy815; - goto yy810; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x08) + goto yy1013; + goto yy1026; + } else { + if (yych <= '\n') + goto yy1028; + if (yych <= '\f') + goto yy1013; + } } else { - if (yych <= ' ') - goto yy815; - if (yych == '-') - goto yy823; - goto yy810; + if (yych <= ' ') { + if (yych <= 0x1F) + goto yy1013; + goto yy1026; + } else { + if (yych == '-') + goto yy1030; + goto yy1013; + } } - yy817: + yy1028: + ++p; + { return (bufsize_t)(p - start); } + yy1030: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy1030; + } + if (yych <= 0x08) + goto yy1013; + if (yych <= '\n') + goto yy1028; + if (yych == '\r') + goto yy1028; + goto yy1013; + yy1032: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy817; - goto yy810; + goto yy1032; + goto yy1013; } else { if (yych <= ' ') - goto yy817; - if (yych != '_') - goto yy810; + goto yy1032; + if (yych != '*') + goto yy1013; } - yy819: + yy1034: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy819; - goto yy810; + goto yy1034; + goto yy1013; } else { if (yych <= ' ') - goto yy819; - if (yych == '_') - goto yy825; - goto yy810; + goto yy1034; + if (yych != '*') + goto yy1013; } - yy821: + yy1036: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy821; + if (yych <= '\r') { + if (yych <= '\t') { + if (yych <= 0x08) + goto yy1013; + goto yy1036; + } else { + if (yych <= '\n') + goto yy1038; + if (yych <= '\f') + goto yy1013; + } + } else { + if (yych <= ' ') { + if (yych <= 0x1F) + goto yy1013; + goto yy1036; + } else { + if (yych == '*') + goto yy1040; + goto yy1013; + } } - if (yych <= 0x08) - goto yy810; - if (yych <= '\n') - goto yy827; - if (yych == '\r') - goto yy827; - goto yy810; - yy823: + yy1038: ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy823; - } - if (yych <= 0x08) - goto yy810; - if (yych <= '\n') - goto yy829; - if (yych == '\r') - goto yy829; - goto yy810; - yy825: + { return (bufsize_t)(p - start); } + yy1040: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy825; + goto yy1040; } if (yych <= 0x08) - goto yy810; + goto yy1013; if (yych <= '\n') - goto yy831; + goto yy1038; if (yych == '\r') - goto yy831; - goto yy810; - yy827: - ++p; - { return (bufsize_t)(p - start); } - yy829: - ++p; - { return (bufsize_t)(p - start); } - yy831: - ++p; - { return (bufsize_t)(p - start); } + goto yy1038; + goto yy1013; } } @@ -12429,16 +15950,16 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 0, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 144, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12451,295 +15972,295 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy837; + goto yy1046; if (yych == '~') - goto yy838; + goto yy1047; ++p; - yy836 : { return 0; } - yy837: + yy1045 : { return 0; } + yy1046: yych = *(marker = ++p); if (yych == '`') - goto yy839; - goto yy836; - yy838: + goto yy1063; + goto yy1045; + yy1047: yych = *(marker = ++p); - if (yych == '~') - goto yy841; - goto yy836; - yy839: + if (yych != '~') + goto yy1045; yych = *++p; if (yybm[0 + yych] & 16) { - goto yy842; + goto yy1050; } - yy840: + yy1049: p = marker; - goto yy836; - yy841: - yych = *++p; - if (yybm[0 + yych] & 32) { - goto yy844; - } - goto yy840; - yy842: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 64) { - goto yy846; - } - if (yych <= 0xE0) { - if (yych <= '`') { - if (yych <= 0x00) - goto yy840; - if (yych <= '\r') - goto yy848; - goto yy842; - } else { - if (yych <= 0xC1) - goto yy840; - if (yych <= 0xDF) - goto yy850; - goto yy851; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy853; - goto yy852; - } else { - if (yych <= 0xF0) - goto yy854; - if (yych <= 0xF3) - goto yy855; - if (yych <= 0xF4) - goto yy856; - goto yy840; - } - } - yy844: + goto yy1045; + yy1050: ++p; yych = *p; marker = p; - if (yybm[0 + yych] & 128) { - goto yy857; + if (yybm[0 + yych] & 32) { + goto yy1052; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy840; + goto yy1049; if (yych <= '\r') - goto yy859; - goto yy844; + goto yy1061; + goto yy1050; } else { if (yych <= 0xC1) - goto yy840; + goto yy1049; if (yych <= 0xDF) - goto yy861; - goto yy862; + goto yy1054; + goto yy1055; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy864; - goto yy863; + goto yy1060; + goto yy1056; } else { if (yych <= 0xF0) - goto yy865; + goto yy1057; if (yych <= 0xF3) - goto yy866; + goto yy1058; if (yych <= 0xF4) - goto yy867; - goto yy840; + goto yy1059; + goto yy1049; } } - yy846: + yy1052: ++p; yych = *p; - if (yybm[0 + yych] & 64) { - goto yy846; + if (yybm[0 + yych] & 32) { + goto yy1052; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy840; - if (yych >= 0x0E) - goto yy840; + goto yy1049; + if (yych <= '\r') + goto yy1061; + goto yy1049; } else { if (yych <= 0xDF) - goto yy850; + goto yy1054; if (yych <= 0xE0) - goto yy851; - goto yy852; + goto yy1055; + goto yy1056; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy853; + goto yy1060; if (yych <= 0xEF) - goto yy852; - goto yy854; + goto yy1056; + goto yy1057; } else { if (yych <= 0xF3) - goto yy855; + goto yy1058; if (yych <= 0xF4) - goto yy856; - goto yy840; + goto yy1059; + goto yy1049; } } - yy848: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy850: + yy1054: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy846; - goto yy840; - yy851: + goto yy1052; + goto yy1049; + yy1055: ++p; yych = *p; if (yych <= 0x9F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy850; - goto yy840; - yy852: + goto yy1054; + goto yy1049; + yy1056: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy850; - goto yy840; - yy853: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy840; - if (yych <= 0x9F) - goto yy850; - goto yy840; - yy854: + goto yy1054; + goto yy1049; + yy1057: ++p; yych = *p; if (yych <= 0x8F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy852; - goto yy840; - yy855: + goto yy1056; + goto yy1049; + yy1058: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy852; - goto yy840; - yy856: + goto yy1056; + goto yy1049; + yy1059: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0x8F) - goto yy852; - goto yy840; - yy857: + goto yy1056; + goto yy1049; + yy1060: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1049; + if (yych <= 0x9F) + goto yy1054; + goto yy1049; + yy1061: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy1063: + yych = *++p; + if (yybm[0 + yych] & 64) { + goto yy1064; + } + goto yy1049; + yy1064: ++p; yych = *p; + marker = p; if (yybm[0 + yych] & 128) { - goto yy857; + goto yy1066; + } + if (yych <= 0xE0) { + if (yych <= '`') { + if (yych <= 0x00) + goto yy1049; + if (yych <= '\r') + goto yy1075; + goto yy1064; + } else { + if (yych <= 0xC1) + goto yy1049; + if (yych <= 0xDF) + goto yy1068; + goto yy1069; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy1074; + goto yy1070; + } else { + if (yych <= 0xF0) + goto yy1071; + if (yych <= 0xF3) + goto yy1072; + if (yych <= 0xF4) + goto yy1073; + goto yy1049; + } + } + yy1066: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy1066; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy840; - if (yych >= 0x0E) - goto yy840; + goto yy1049; + if (yych <= '\r') + goto yy1075; + goto yy1049; } else { if (yych <= 0xDF) - goto yy861; + goto yy1068; if (yych <= 0xE0) - goto yy862; - goto yy863; + goto yy1069; + goto yy1070; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy864; + goto yy1074; if (yych <= 0xEF) - goto yy863; - goto yy865; + goto yy1070; + goto yy1071; } else { if (yych <= 0xF3) - goto yy866; + goto yy1072; if (yych <= 0xF4) - goto yy867; - goto yy840; + goto yy1073; + goto yy1049; } } - yy859: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy861: + yy1068: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy857; - goto yy840; - yy862: + goto yy1066; + goto yy1049; + yy1069: ++p; yych = *p; if (yych <= 0x9F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy861; - goto yy840; - yy863: + goto yy1068; + goto yy1049; + yy1070: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy861; - goto yy840; - yy864: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy840; - if (yych <= 0x9F) - goto yy861; - goto yy840; - yy865: + goto yy1068; + goto yy1049; + yy1071: ++p; yych = *p; if (yych <= 0x8F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy863; - goto yy840; - yy866: + goto yy1070; + goto yy1049; + yy1072: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0xBF) - goto yy863; - goto yy840; - yy867: + goto yy1070; + goto yy1049; + yy1073: ++p; yych = *p; if (yych <= 0x7F) - goto yy840; + goto yy1049; if (yych <= 0x8F) - goto yy863; - goto yy840; + goto yy1070; + goto yy1049; + yy1074: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy1049; + if (yych <= 0x9F) + goto yy1068; + goto yy1049; + yy1075: + ++p; + p = marker; + { return (bufsize_t)(p - start); } } } @@ -12751,126 +16272,123 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 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, 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, 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, 64, 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, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; if (yych == '`') - goto yy872; - if (yych == '~') - goto yy873; - ++p; - yy871 : { return 0; } - yy872: - yych = *(marker = ++p); - if (yych == '`') - goto yy874; - goto yy871; - yy873: - yych = *(marker = ++p); - if (yych == '~') - goto yy876; - goto yy871; - yy874: - yych = *++p; - if (yybm[0 + yych] & 32) { - goto yy877; - } - yy875: - p = marker; - goto yy871; - yy876: - yych = *++p; - if (yybm[0 + yych] & 64) { - goto yy879; - } - goto yy875; - yy877: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy881; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy875; - if (yych <= '\n') - goto yy883; - goto yy875; - } else { - if (yych <= '\r') - goto yy883; - if (yych == '`') - goto yy877; - goto yy875; + goto yy1081; + if (yych == '~') + goto yy1082; + ++p; + yy1080 : { return 0; } + yy1081: + yych = *(marker = ++p); + if (yych == '`') + goto yy1091; + goto yy1080; + yy1082: + yych = *(marker = ++p); + if (yych != '~') + goto yy1080; + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy1085; } - yy879: + yy1084: + p = marker; + goto yy1080; + yy1085: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy879; + goto yy1087; } if (yych <= '\f') { if (yych <= 0x08) - goto yy875; - if (yych <= '\t') - goto yy885; + goto yy1084; if (yych <= '\n') - goto yy887; - goto yy875; + goto yy1089; + goto yy1084; } else { if (yych <= '\r') - goto yy887; - if (yych == ' ') - goto yy885; - goto yy875; + goto yy1089; + if (yych == '~') + goto yy1085; + goto yy1084; } - yy881: + yy1087: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy881; + if (yybm[0 + yych] & 64) { + goto yy1087; } if (yych <= 0x08) - goto yy875; + goto yy1084; if (yych <= '\n') - goto yy883; + goto yy1089; if (yych != '\r') - goto yy875; - yy883: + goto yy1084; + yy1089: ++p; p = marker; { return (bufsize_t)(p - start); } - yy885: + yy1091: + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy1092; + } + goto yy1084; + yy1092: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy1092; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy1084; + if (yych <= '\t') + goto yy1094; + if (yych <= '\n') + goto yy1096; + goto yy1084; + } else { + if (yych <= '\r') + goto yy1096; + if (yych != ' ') + goto yy1084; + } + yy1094: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy875; + goto yy1084; if (yych <= '\t') - goto yy885; + goto yy1094; if (yych >= '\v') - goto yy875; + goto yy1084; } else { if (yych <= '\r') - goto yy887; + goto yy1096; if (yych == ' ') - goto yy885; - goto yy875; + goto yy1094; + goto yy1084; } - yy887: + yy1096: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -12887,947 +16405,919 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '&') - goto yy893; + goto yy1102; ++p; - yy892 : { return 0; } - yy893: + yy1101 : { return 0; } + yy1102: yych = *(marker = ++p); if (yych <= '@') { if (yych != '#') - goto yy892; + goto yy1101; } else { if (yych <= 'Z') - goto yy896; + goto yy1105; if (yych <= '`') - goto yy892; + goto yy1101; if (yych <= 'z') - goto yy896; - goto yy892; + goto yy1105; + goto yy1101; } yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy897; + goto yy1140; } else { if (yych <= 'X') - goto yy898; + goto yy1139; if (yych == 'x') - goto yy898; + goto yy1139; } - yy895: + yy1104: p = marker; - goto yy892; - yy896: + goto yy1101; + yy1105: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy899; - goto yy895; + goto yy1104; + if (yych >= ':') + goto yy1104; } else { if (yych <= 'Z') - goto yy899; - if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy899; - goto yy895; - } - yy897: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy900; - if (yych == ';') - goto yy901; - goto yy895; - yy898: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy903; - goto yy895; - } else { - if (yych <= 'F') - goto yy903; + goto yy1106; if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy903; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } - yy899: + yy1106: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy904; + goto yy1109; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy904; + goto yy1104; + goto yy1109; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych <= 'z') - goto yy904; - goto yy895; + goto yy1109; + goto yy1104; } } - yy900: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy905; - if (yych != ';') - goto yy895; - yy901: + yy1107: ++p; { return (bufsize_t)(p - start); } - yy903: + yy1109: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy906; + goto yy1110; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy906; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy906; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy904: + yy1110: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy907; + goto yy1111; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy907; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy907; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy905: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy908; - if (yych == ';') - goto yy901; - goto yy895; - yy906: + yy1111: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy909; + goto yy1112; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy909; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy909; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy907: + yy1112: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy910; + goto yy1113; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy910; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy910; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy908: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy911; - if (yych == ';') - goto yy901; - goto yy895; - yy909: + yy1113: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy912; + goto yy1114; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy912; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy912; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy910: + yy1114: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy913; + goto yy1115; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy913; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy913; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy911: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy914; - if (yych == ';') - goto yy901; - goto yy895; - yy912: + yy1115: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy915; + goto yy1116; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy915; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy915; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy913: + yy1116: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy916; + goto yy1117; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy916; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy916; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy914: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy917; - if (yych == ';') - goto yy901; - goto yy895; - yy915: + yy1117: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy918; + goto yy1118; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy918; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy918; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy916: + yy1118: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy919; + goto yy1119; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy919; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy919; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy917: - yych = *++p; - if (yych <= '/') - goto yy895; - if (yych <= '9') - goto yy920; - if (yych == ';') - goto yy901; - goto yy895; - yy918: + yy1119: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy921; + goto yy1120; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy921; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy921; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy919: + yy1120: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy922; + goto yy1121; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy922; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy922; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy920: - yych = *++p; - if (yych == ';') - goto yy901; - goto yy895; - yy921: + yy1121: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy920; + goto yy1122; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy895; - goto yy920; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych <= 'f') - goto yy920; - goto yy895; + goto yy1104; + if (yych >= '{') + goto yy1104; } } - yy922: + yy1122: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy923; + goto yy1123; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy923: + yy1123: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy924; + goto yy1124; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy924: + yy1124: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy925; + goto yy1125; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy925: + yy1125: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy926; + goto yy1126; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy926: + yy1126: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy927; + goto yy1127; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy927: + yy1127: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy928; + goto yy1128; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy928: + yy1128: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy929; + goto yy1129; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy929: + yy1129: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy930; + goto yy1130; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy930: + yy1130: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy931; + goto yy1131; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy931: + yy1131: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy932; + goto yy1132; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy932: + yy1132: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy933; + goto yy1133; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy933: + yy1133: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy934; + goto yy1134; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy934: + yy1134: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy935; + goto yy1135; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy935: + yy1135: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy936; + goto yy1136; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy936: + yy1136: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy937; + goto yy1137; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy937: + yy1137: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy938; + goto yy1138; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; + goto yy1104; if (yych >= '{') - goto yy895; + goto yy1104; } } - yy938: + yy1138: + yych = *++p; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1139: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1147; + goto yy1104; + } else { + if (yych <= 'F') + goto yy1147; + if (yych <= '`') + goto yy1104; + if (yych <= 'f') + goto yy1147; + goto yy1104; + } + yy1140: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1141; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1141: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1142; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1142: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1143; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1143: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1144; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1144: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1145; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1145: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1146; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1146: + yych = *++p; + if (yych <= '/') + goto yy1104; + if (yych <= '9') + goto yy1138; + if (yych == ';') + goto yy1107; + goto yy1104; + yy1147: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy939; + goto yy1148; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych >= '{') - goto yy895; + goto yy1104; + if (yych >= 'g') + goto yy1104; } } - yy939: + yy1148: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy940; + goto yy1149; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych >= '{') - goto yy895; + goto yy1104; + if (yych >= 'g') + goto yy1104; } } - yy940: + yy1149: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy941; + goto yy1150; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych >= '{') - goto yy895; + goto yy1104; + if (yych >= 'g') + goto yy1104; } } - yy941: + yy1150: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy942; + goto yy1151; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych >= '{') - goto yy895; + goto yy1104; + if (yych >= 'g') + goto yy1104; } } - yy942: + yy1151: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy943; + goto yy1152; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych >= '{') - goto yy895; + goto yy1104; + if (yych >= 'g') + goto yy1104; } } - yy943: + yy1152: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy944; + goto yy1153; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; + goto yy1104; } else { if (yych <= '`') - goto yy895; - if (yych >= '{') - goto yy895; + goto yy1104; + if (yych >= 'g') + goto yy1104; } } - yy944: + yy1153: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy895; + goto yy1104; if (yych <= '9') - goto yy920; + goto yy1138; if (yych <= ':') - goto yy895; - goto yy901; + goto yy1104; + goto yy1107; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy895; - goto yy920; + goto yy1104; + goto yy1138; } else { if (yych <= '`') - goto yy895; - if (yych <= 'z') - goto yy920; - goto yy895; + goto yy1104; + if (yych <= 'f') + goto yy1138; + goto yy1104; } } } @@ -13846,304 +17336,335 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'V') { if (yych <= 'F') { if (yych == 'D') - goto yy949; + goto yy1158; if (yych >= 'F') - goto yy950; + goto yy1159; } else { if (yych == 'J') - goto yy951; + goto yy1160; if (yych >= 'V') - goto yy952; + goto yy1161; } } else { if (yych <= 'f') { if (yych == 'd') - goto yy949; + goto yy1158; if (yych >= 'f') - goto yy950; + goto yy1159; } else { if (yych <= 'j') { if (yych >= 'j') - goto yy951; + goto yy1160; } else { if (yych == 'v') - goto yy952; + goto yy1161; } } } ++p; - yy948 : { return 0; } - yy949: + yy1157 : { return 0; } + yy1158: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy953; + goto yy1184; if (yych == 'a') - goto yy953; - goto yy948; - yy950: + goto yy1184; + goto yy1157; + yy1159: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy955; + goto yy1181; if (yych == 'i') - goto yy955; - goto yy948; - yy951: + goto yy1181; + goto yy1157; + yy1160: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy956; + goto yy1172; if (yych == 'a') - goto yy956; - goto yy948; - yy952: + goto yy1172; + goto yy1157; + yy1161: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy957; - if (yych == 'b') - goto yy957; - goto yy948; - yy953: + goto yy1162; + if (yych != 'b') + goto yy1157; + yy1162: yych = *++p; - if (yych == 'T') - goto yy958; - if (yych == 't') - goto yy958; - yy954: + if (yych == 'S') + goto yy1164; + if (yych == 's') + goto yy1164; + yy1163: p = marker; if (yyaccept == 0) { - goto yy948; + goto yy1157; } else { - goto yy966; + goto yy1171; } - yy955: + yy1164: yych = *++p; - if (yych == 'L') - goto yy959; - if (yych == 'l') - goto yy959; - goto yy954; - yy956: + if (yych == 'C') + goto yy1165; + if (yych != 'c') + goto yy1163; + yy1165: yych = *++p; - if (yych == 'V') - goto yy960; - if (yych == 'v') - goto yy960; - goto yy954; - yy957: + if (yych == 'R') + goto yy1166; + if (yych != 'r') + goto yy1163; + yy1166: yych = *++p; - if (yych == 'S') - goto yy961; - if (yych == 's') - goto yy961; - goto yy954; - yy958: + if (yych == 'I') + goto yy1167; + if (yych != 'i') + goto yy1163; + yy1167: yych = *++p; - if (yych == 'A') - goto yy962; - if (yych == 'a') - goto yy962; - goto yy954; - yy959: + if (yych == 'P') + goto yy1168; + if (yych != 'p') + goto yy1163; + yy1168: yych = *++p; - if (yych == 'E') - goto yy963; - if (yych == 'e') - goto yy963; - goto yy954; - yy960: + if (yych == 'T') + goto yy1169; + if (yych != 't') + goto yy1163; + yy1169: + yych = *++p; + if (yych != ':') + goto yy1163; + yy1170: + ++p; + yy1171 : { return (bufsize_t)(p - start); } + yy1172: + yych = *++p; + if (yych == 'V') + goto yy1173; + if (yych != 'v') + goto yy1163; + yy1173: yych = *++p; if (yych == 'A') - goto yy957; - if (yych == 'a') - goto yy957; - goto yy954; - yy961: + goto yy1174; + if (yych != 'a') + goto yy1163; + yy1174: + yych = *++p; + if (yych == 'S') + goto yy1175; + if (yych != 's') + goto yy1163; + yy1175: yych = *++p; if (yych == 'C') - goto yy964; - if (yych == 'c') - goto yy964; - goto yy954; - yy962: + goto yy1176; + if (yych != 'c') + goto yy1163; + yy1176: + yych = *++p; + if (yych == 'R') + goto yy1177; + if (yych != 'r') + goto yy1163; + yy1177: + yych = *++p; + if (yych == 'I') + goto yy1178; + if (yych != 'i') + goto yy1163; + yy1178: + yych = *++p; + if (yych == 'P') + goto yy1179; + if (yych != 'p') + goto yy1163; + yy1179: + yych = *++p; + if (yych == 'T') + goto yy1180; + if (yych != 't') + goto yy1163; + yy1180: yych = *++p; if (yych == ':') - goto yy965; - goto yy954; - yy963: + goto yy1170; + goto yy1163; + yy1181: + yych = *++p; + if (yych == 'L') + goto yy1182; + if (yych != 'l') + goto yy1163; + yy1182: + yych = *++p; + if (yych == 'E') + goto yy1183; + if (yych != 'e') + goto yy1163; + yy1183: yych = *++p; if (yych == ':') - goto yy967; - goto yy954; - yy964: + goto yy1170; + goto yy1163; + yy1184: yych = *++p; - if (yych == 'R') - goto yy968; - if (yych == 'r') - goto yy968; - goto yy954; - yy965: - yyaccept = 1; - yych = *(marker = ++p); - if (yych == 'I') - goto yy969; - if (yych == 'i') - goto yy969; - yy966 : { return (bufsize_t)(p - start); } - yy967: + if (yych == 'T') + goto yy1185; + if (yych != 't') + goto yy1163; + yy1185: yych = *++p; - goto yy966; - yy968: + if (yych == 'A') + goto yy1186; + if (yych != 'a') + goto yy1163; + yy1186: yych = *++p; + if (yych != ':') + goto yy1163; + yyaccept = 1; + yych = *(marker = ++p); if (yych == 'I') - goto yy970; - if (yych == 'i') - goto yy970; - goto yy954; - yy969: + goto yy1188; + if (yych != 'i') + goto yy1171; + yy1188: yych = *++p; if (yych == 'M') - goto yy971; - if (yych == 'm') - goto yy971; - goto yy954; - yy970: - yych = *++p; - if (yych == 'P') - goto yy972; - if (yych == 'p') - goto yy972; - goto yy954; - yy971: + goto yy1189; + if (yych != 'm') + goto yy1163; + yy1189: yych = *++p; if (yych == 'A') - goto yy973; - if (yych == 'a') - goto yy973; - goto yy954; - yy972: - yych = *++p; - if (yych == 'T') - goto yy963; - if (yych == 't') - goto yy963; - goto yy954; - yy973: + goto yy1190; + if (yych != 'a') + goto yy1163; + yy1190: yych = *++p; if (yych == 'G') - goto yy974; + goto yy1191; if (yych != 'g') - goto yy954; - yy974: + goto yy1163; + yy1191: yych = *++p; if (yych == 'E') - goto yy975; + goto yy1192; if (yych != 'e') - goto yy954; - yy975: + goto yy1163; + yy1192: yych = *++p; if (yych != '/') - goto yy954; + goto yy1163; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy977; + goto yy1195; if (yych <= 'I') - goto yy954; - goto yy978; + goto yy1163; + goto yy1196; } else { if (yych == 'P') - goto yy979; + goto yy1194; if (yych <= 'V') - goto yy954; - goto yy980; + goto yy1163; + goto yy1197; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy977; + goto yy1195; if (yych <= 'i') - goto yy954; - goto yy978; + goto yy1163; + goto yy1196; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy954; - goto yy979; + goto yy1163; } else { if (yych == 'w') - goto yy980; - goto yy954; + goto yy1197; + goto yy1163; } } } - yy977: + yy1194: + yych = *++p; + if (yych == 'N') + goto yy1205; + if (yych == 'n') + goto yy1205; + goto yy1163; + yy1195: yych = *++p; if (yych == 'I') - goto yy981; + goto yy1204; if (yych == 'i') - goto yy981; - goto yy954; - yy978: + goto yy1204; + goto yy1163; + yy1196: yych = *++p; if (yych == 'P') - goto yy982; + goto yy1202; if (yych == 'p') - goto yy982; - goto yy954; - yy979: - yych = *++p; - if (yych == 'N') - goto yy983; - if (yych == 'n') - goto yy983; - goto yy954; - yy980: + goto yy1202; + goto yy1163; + yy1197: yych = *++p; if (yych == 'E') - goto yy984; - if (yych == 'e') - goto yy984; - goto yy954; - yy981: + goto yy1198; + if (yych != 'e') + goto yy1163; + yy1198: yych = *++p; - if (yych == 'F') - goto yy985; - if (yych == 'f') - goto yy985; - goto yy954; - yy982: + if (yych == 'B') + goto yy1199; + if (yych != 'b') + goto yy1163; + yy1199: + yych = *++p; + if (yych == 'P') + goto yy1200; + if (yych != 'p') + goto yy1163; + yy1200: + ++p; + { return 0; } + yy1202: yych = *++p; if (yych == 'E') - goto yy983; + goto yy1203; if (yych != 'e') - goto yy954; - yy983: + goto yy1163; + yy1203: yych = *++p; if (yych == 'G') - goto yy985; + goto yy1200; if (yych == 'g') - goto yy985; - goto yy954; - yy984: + goto yy1200; + goto yy1163; + yy1204: yych = *++p; - if (yych == 'B') - goto yy987; - if (yych == 'b') - goto yy987; - goto yy954; - yy985: - ++p; - { return 0; } - yy987: + if (yych == 'F') + goto yy1200; + if (yych == 'f') + goto yy1200; + goto yy1163; + yy1205: ++p; - if ((yych = *p) == 'P') - goto yy985; - if (yych == 'p') - goto yy985; - goto yy954; + if ((yych = *p) == 'G') + goto yy1200; + if (yych == 'g') + goto yy1200; + goto yy1163; } } diff --git a/src/scanners.re b/src/scanners.re index 099e82a707..b313736864 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -91,7 +91,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); } + scheme [:][^\x00-\x20>]*[>] { return (bufsize_t)(p - start); } * { return 0; } */ } diff --git a/test/regression.txt b/test/regression.txt index d2d9335f0e..ebc31bc6b9 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -74,3 +74,13 @@ a***b* c*

                            a*b c

                            ```````````````````````````````` +Issue #193 - unescaped left angle brackets in link destination + +```````````````````````````````` example +[a] + +[a]: +. +

                            a

                            +```````````````````````````````` + -- cgit 0.0.5-2-1-g0f52 From 6ec3b485c406bb05ca5e13fe61d84df6b27f1945 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 2 Jun 2017 16:33:02 +0200 Subject: Properly handle backslashes in link destinations. Only ascii punctuation characters are escapable, per the spec. Closes #192. --- src/inlines.c | 4 +++- test/regression.txt | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 021d5a32d5..eea063173d 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -842,7 +842,9 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { } } else { while (i < input->len) { - if (input->data[i] == '\\') + if (input->data[i] == '\\' && + i + 1 < input-> len && + cmark_ispunct(input->data[i+1])) i += 2; else if (input->data[i] == '(') { ++nb_p; diff --git a/test/regression.txt b/test/regression.txt index ebc31bc6b9..18b7d79d7a 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -84,3 +84,11 @@ Issue #193 - unescaped left angle brackets in link destination

                            a

                            ```````````````````````````````` +Issue #192 - escaped spaces in link destination + + +```````````````````````````````` example +[a](te\ st) +. +

                            [a](te\ st)

                            +```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From f9073827f0e8d9b10fa43852a1f981eda44140c8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 2 Jun 2017 16:41:06 +0200 Subject: Document cases where get_ functions return NULL. E.g. cmark_node_get_url on a non-link or image. Closes #155. --- man/man3/cmark.3 | 17 +++++++++++------ src/cmark.h | 15 ++++++++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 5f7fcc68fb..c04e442614 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "May 05, 2017" "LOCAL" "Library Functions Manual" +.TH cmark 3 "June 02, 2017" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -331,7 +331,8 @@ of the type, or \f[C]""\f[]. .PP Returns the string contents of \f[I]node\f[], or an empty string if none -is set. +is set. Returns NULL if called on a node that does not have string +content. .PP \fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[]) @@ -426,7 +427,8 @@ and 0 on failure. .PP Returns the URL of a link or image \f[I]node\f[], or an empty string if -no URL is set. +no URL is set. Returns NULL if called on a node that is not a link or +image. .PP \fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[]) @@ -440,7 +442,8 @@ on failure. .PP Returns the title of a link or image \f[I]node\f[], or an empty string -if no title is set. +if no title is set. Returns NULL if called on a node that is not a link +or image. .PP \fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[]) @@ -454,7 +457,8 @@ on failure. .PP Returns the literal "on enter" text for a custom \f[I]node\f[], or an -empty string if no on_enter is set. +empty string if no on_enter is set. Returns NULL if called on a +non\-custom node. .PP \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[]) @@ -469,7 +473,8 @@ success 0 on failure. .PP Returns the literal "on exit" text for a custom \f[I]node\f[], or an -empty string if no on_exit is set. +empty string if no on_exit is set. Returns NULL if called on a +non\-custom node. .PP \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[]) diff --git a/src/cmark.h b/src/cmark.h index 793fcf4fa0..9f6e0c6cb2 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -265,7 +265,8 @@ CMARK_EXPORT const char *cmark_node_get_type_string(cmark_node *node); /** Returns the string contents of 'node', or an empty - string if none is set. + string if none is set. Returns NULL if called on a + node that does not have string content. */ CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node); @@ -334,7 +335,8 @@ CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info); /** Returns the URL of a link or image 'node', or an empty string - if no URL is set. + if no URL is set. Returns NULL if called on a node that is + not a link or image. */ CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); @@ -344,7 +346,8 @@ CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url); /** Returns the title of a link or image 'node', or an empty - string if no title is set. + string if no title is set. Returns NULL if called on a node + that is not a link or image. */ CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); @@ -354,7 +357,8 @@ CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); /** Returns the literal "on enter" text for a custom 'node', or - an empty string if no on_enter is set. + an empty string if no on_enter is set. Returns NULL if called + on a non-custom node. */ CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); @@ -366,7 +370,8 @@ CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node, const char *on_enter); /** Returns the literal "on exit" text for a custom 'node', or - an empty string if no on_exit is set. + an empty string if no on_exit is set. Returns NULL if + called on a non-custom node. */ CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node); -- cgit 0.0.5-2-1-g0f52 From c161a9a14220de62ea3d2d082d17d1831a6e5d7a Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Wed, 21 Jun 2017 14:51:30 +1000 Subject: Don't scan past an EOL --- src/scanners.c | 866 ++++++++++++++++++++++++++------------------------------ src/scanners.re | 10 +- 2 files changed, 409 insertions(+), 467 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 05ae5e8dee..11e926e356 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -12622,7 +12622,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -12639,23 +12639,24 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= ';') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '<') { + if (yych <= 0x00) + goto yy766; + if (yych <= ';') goto yy768; + goto yy769; } else { - if (yych <= '<') - goto yy769; if (yych <= 0x7F) - goto yy766; - if (yych <= 0xC1) goto yy768; - goto yy770; + if (yych <= 0xC1) + goto yy766; + if (yych <= 0xDF) + goto yy770; + goto yy771; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy771; if (yych == 0xED) goto yy773; goto yy772; @@ -12666,30 +12667,28 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { goto yy775; if (yych <= 0xF4) goto yy776; - goto yy768; } } yy766: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy781; - } else { - if (yych <= 0xC1) - goto yy767; - if (yych <= 0xF4) - goto yy781; - } + ++p; yy767 : { return 0; } yy768: - yych = *++p; + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy767; + if (yych <= 0x7F) + goto yy781; + if (yych <= 0xC1) + goto yy767; + if (yych <= 0xF4) + goto yy781; goto yy767; yy769: yyaccept = 0; yych = *(marker = ++p); if (yych <= '/') { - if (yych == '\n') + if (yych <= 0x00) goto yy767; if (yych <= '.') goto yy781; @@ -12788,7 +12787,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy778; if (yych >= '=') goto yy778; @@ -12820,24 +12819,23 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= '.') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '/') { + if (yych <= 0x00) goto yy778; - goto yy780; + if (yych <= '.') + goto yy780; + goto yy789; } else { - if (yych <= '/') - goto yy789; if (yych <= 0x7F) goto yy780; if (yych <= 0xC1) goto yy778; - goto yy779; + if (yych <= 0xDF) + goto yy779; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy784; if (yych == 0xED) goto yy788; goto yy777; @@ -12897,45 +12895,43 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 's') { - if (yych <= 'R') { - if (yych <= '\n') { - if (yych <= '\t') - goto yy780; - goto yy778; + if (yych <= 0x7F) { + if (yych <= 'S') { + if (yych <= 'O') { + if (yych <= 0x00) + goto yy778; + goto yy780; } else { - if (yych == 'P') + if (yych <= 'P') goto yy791; - goto yy780; + if (yych <= 'R') + goto yy780; } } else { - if (yych <= 'o') { - if (yych >= 'T') + if (yych <= 'p') { + if (yych <= 'o') goto yy780; + goto yy791; } else { - if (yych <= 'p') - goto yy791; - if (yych <= 'r') + if (yych != 's') goto yy780; } } } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy780; - goto yy778; + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) + goto yy778; + goto yy779; } else { - if (yych <= 0xDF) - goto yy779; if (yych <= 0xE0) goto yy784; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy788; if (yych <= 0xEF) goto yy777; goto yy785; @@ -12953,47 +12949,45 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 't') { - if (yych <= 'S') { - if (yych <= '\n') { - if (yych <= '\t') - goto yy780; - goto yy778; + if (yych <= 0x7F) { + if (yych <= 'T') { + if (yych <= 'B') { + if (yych <= 0x00) + goto yy778; + goto yy780; } else { - if (yych == 'C') + if (yych <= 'C') goto yy796; - goto yy780; + if (yych <= 'S') + goto yy780; + goto yy797; } } else { - if (yych <= 'b') { - if (yych <= 'T') + if (yych <= 'c') { + if (yych <= 'b') + goto yy780; + goto yy796; + } else { + if (yych == 't') goto yy797; goto yy780; - } else { - if (yych <= 'c') - goto yy796; - if (yych <= 's') - goto yy780; - goto yy797; } } } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy780; - goto yy778; + if (yych <= 0xED) { + if (yych <= 0xDF) { + if (yych <= 0xC1) + goto yy778; + goto yy779; } else { - if (yych <= 0xDF) - goto yy779; if (yych <= 0xE0) goto yy784; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy788; if (yych <= 0xEF) goto yy777; goto yy785; @@ -13012,40 +13006,36 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'R') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'q') { + if (yych <= 0x00) goto yy778; - if (yych <= 'Q') + if (yych != 'R') goto yy780; } else { - if (yych == 'r') + if (yych <= 'r') goto yy792; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy792: @@ -13054,40 +13044,36 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'E') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'd') { + if (yych <= 0x00) goto yy778; - if (yych <= 'D') + if (yych != 'E') goto yy780; } else { - if (yych == 'e') + if (yych <= 'e') goto yy793; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy793: @@ -13096,24 +13082,23 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy778; - goto yy780; + if (yych <= '=') + goto yy780; } else { - if (yych <= '>') - goto yy794; if (yych <= 0x7F) goto yy780; if (yych <= 0xC1) goto yy778; - goto yy779; + if (yych <= 0xDF) + goto yy779; + goto yy784; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy784; if (yych == 0xED) goto yy788; goto yy777; @@ -13127,7 +13112,6 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { goto yy778; } } - yy794: yyaccept = 1; marker = ++p; yych = *p; @@ -13136,7 +13120,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy795; if (yych <= '<') goto yy782; @@ -13168,41 +13152,37 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'R') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'q') { + if (yych <= 0x00) goto yy778; - if (yych <= 'Q') - goto yy780; - goto yy800; + if (yych == 'R') + goto yy800; + goto yy780; } else { - if (yych == 'r') + if (yych <= 'r') goto yy800; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy797: @@ -13211,40 +13191,36 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'Y') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'x') { + if (yych <= 0x00) goto yy778; - if (yych <= 'X') + if (yych != 'Y') goto yy780; } else { - if (yych == 'y') + if (yych <= 'y') goto yy798; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy798: @@ -13253,40 +13229,36 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'L') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'k') { + if (yych <= 0x00) goto yy778; - if (yych <= 'K') + if (yych != 'L') goto yy780; } else { - if (yych == 'l') + if (yych <= 'l') goto yy799; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy799: @@ -13295,41 +13267,37 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'E') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'd') { + if (yych <= 0x00) goto yy778; - if (yych <= 'D') - goto yy780; - goto yy793; + if (yych == 'E') + goto yy793; + goto yy780; } else { - if (yych == 'e') + if (yych <= 'e') goto yy793; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy800: @@ -13338,40 +13306,36 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'I') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'h') { + if (yych <= 0x00) goto yy778; - if (yych <= 'H') + if (yych != 'I') goto yy780; } else { - if (yych == 'i') + if (yych <= 'i') goto yy801; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy801: @@ -13380,40 +13344,36 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'P') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 'o') { + if (yych <= 0x00) goto yy778; - if (yych <= 'O') + if (yych != 'P') goto yy780; } else { - if (yych == 'p') + if (yych <= 'p') goto yy802; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } yy802: @@ -13422,41 +13382,37 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xC1) { - if (yych <= 'T') { - if (yych == '\n') + if (yych <= 0xDF) { + if (yych <= 's') { + if (yych <= 0x00) goto yy778; - if (yych <= 'S') - goto yy780; - goto yy793; + if (yych == 'T') + goto yy793; + goto yy780; } else { - if (yych == 't') + if (yych <= 't') goto yy793; if (yych <= 0x7F) goto yy780; - goto yy778; + if (yych <= 0xC1) + goto yy778; + goto yy779; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + if (yych == 0xED) + goto yy788; + goto yy777; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; + if (yych <= 0xF0) goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; } } } @@ -13471,7 +13427,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -13488,23 +13444,24 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= ',') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '-') { + if (yych <= 0x00) + goto yy805; + if (yych <= ',') goto yy807; + goto yy808; } else { - if (yych <= '-') - goto yy808; if (yych <= 0x7F) - goto yy805; - if (yych <= 0xC1) goto yy807; - goto yy809; + if (yych <= 0xC1) + goto yy805; + if (yych <= 0xDF) + goto yy809; + goto yy810; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy810; if (yych == 0xED) goto yy812; goto yy811; @@ -13515,24 +13472,22 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { goto yy814; if (yych <= 0xF4) goto yy815; - goto yy807; } } yy805: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy820; - } else { - if (yych <= 0xC1) - goto yy806; - if (yych <= 0xF4) - goto yy820; - } + ++p; yy806 : { return 0; } yy807: - yych = *++p; + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy806; + if (yych <= 0x7F) + goto yy820; + if (yych <= 0xC1) + goto yy806; + if (yych <= 0xF4) + goto yy820; goto yy806; yy808: yyaccept = 0; @@ -13540,17 +13495,15 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy827; } - if (yych <= 0x7F) { - if (yych == '\n') - goto yy806; + if (yych <= 0x00) + goto yy806; + if (yych <= 0x7F) goto yy820; - } else { - if (yych <= 0xC1) - goto yy806; - if (yych <= 0xF4) - goto yy820; + if (yych <= 0xC1) goto yy806; - } + if (yych <= 0xF4) + goto yy820; + goto yy806; yy809: yyaccept = 0; yych = *(marker = ++p); @@ -13636,7 +13589,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy817; if (yych >= '.') goto yy817; @@ -13670,7 +13623,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy817; if (yych <= '-') goto yy827; @@ -13742,24 +13695,23 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy827; } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy817; - goto yy819; + if (yych <= '=') + goto yy819; } else { - if (yych <= '>') - goto yy829; if (yych <= 0x7F) goto yy819; if (yych <= 0xC1) goto yy817; - goto yy818; + if (yych <= 0xDF) + goto yy818; + goto yy822; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy822; if (yych == 0xED) goto yy826; goto yy816; @@ -13773,7 +13725,6 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { goto yy817; } } - yy829: yyaccept = 1; marker = ++p; yych = *p; @@ -13782,7 +13733,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy830; if (yych <= '-') goto yy821; @@ -13820,7 +13771,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, @@ -13837,23 +13788,24 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= '>') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '?') { + if (yych <= 0x00) + goto yy833; + if (yych <= '>') goto yy835; + goto yy836; } else { - if (yych <= '?') - goto yy836; if (yych <= 0x7F) - goto yy833; - if (yych <= 0xC1) goto yy835; - goto yy837; + if (yych <= 0xC1) + goto yy833; + if (yych <= 0xDF) + goto yy837; + goto yy838; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy838; if (yych == 0xED) goto yy840; goto yy839; @@ -13864,30 +13816,28 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { goto yy842; if (yych <= 0xF4) goto yy843; - goto yy835; } } yy833: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy848; - } else { - if (yych <= 0xC1) - goto yy834; - if (yych <= 0xF4) - goto yy848; - } + ++p; yy834 : { return 0; } yy835: - yych = *++p; + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy834; + if (yych <= 0x7F) + goto yy848; + if (yych <= 0xC1) + goto yy834; + if (yych <= 0xF4) + goto yy848; goto yy834; yy836: yyaccept = 0; yych = *(marker = ++p); if (yych <= '>') { - if (yych == '\n') + if (yych <= 0x00) goto yy834; if (yych <= '=') goto yy848; @@ -13986,7 +13936,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy845; if (yych >= '@') goto yy845; @@ -14018,24 +13968,23 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy849; } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy845; - goto yy847; + if (yych <= '=') + goto yy847; + goto yy856; } else { - if (yych <= '>') - goto yy856; if (yych <= 0x7F) goto yy847; if (yych <= 0xC1) goto yy845; - goto yy846; + if (yych <= 0xDF) + goto yy846; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy851; if (yych == 0xED) goto yy855; goto yy844; @@ -14098,7 +14047,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy857; if (yych <= '?') goto yy849; @@ -14136,7 +14085,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -14153,23 +14102,24 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy860; + if (yych <= '=') goto yy862; + goto yy863; } else { - if (yych <= '>') - goto yy863; if (yych <= 0x7F) - goto yy860; - if (yych <= 0xC1) goto yy862; - goto yy865; + if (yych <= 0xC1) + goto yy860; + if (yych <= 0xDF) + goto yy865; + goto yy866; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy866; if (yych == 0xED) goto yy868; goto yy867; @@ -14180,37 +14130,34 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { goto yy870; if (yych <= 0xF4) goto yy871; - goto yy862; } } yy860: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy876; - } else { - if (yych <= 0xC1) - goto yy861; - if (yych <= 0xF4) - goto yy876; - } + ++p; yy861 : { return 0; } yy862: - yych = *++p; + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy861; + if (yych <= 0x7F) + goto yy876; + if (yych <= 0xC1) + goto yy861; + if (yych <= 0xF4) + goto yy876; goto yy861; yy863: yyaccept = 1; yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy876; - } else { - if (yych <= 0xC1) - goto yy864; - if (yych <= 0xF4) - goto yy876; - } + if (yych <= 0x00) + goto yy864; + if (yych <= 0x7F) + goto yy876; + if (yych <= 0xC1) + goto yy864; + if (yych <= 0xF4) + goto yy876; yy864 : { return (bufsize_t)(p - start); } yy865: yyaccept = 0; @@ -14297,7 +14244,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy873; if (yych >= '?') goto yy873; @@ -14332,7 +14279,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy864; if (yych <= '>') goto yy877; @@ -14410,7 +14357,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -14427,23 +14374,24 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= '\\') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= ']') { + if (yych <= 0x00) + goto yy886; + if (yych <= '\\') goto yy888; + goto yy889; } else { - if (yych <= ']') - goto yy889; if (yych <= 0x7F) - goto yy886; - if (yych <= 0xC1) goto yy888; - goto yy890; + if (yych <= 0xC1) + goto yy886; + if (yych <= 0xDF) + goto yy890; + goto yy891; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy891; if (yych == 0xED) goto yy893; goto yy892; @@ -14454,24 +14402,22 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { goto yy895; if (yych <= 0xF4) goto yy896; - goto yy888; } } yy886: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) { - if (yych != '\n') - goto yy901; - } else { - if (yych <= 0xC1) - goto yy887; - if (yych <= 0xF4) - goto yy901; - } + ++p; yy887 : { return 0; } yy888: - yych = *++p; + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy887; + if (yych <= 0x7F) + goto yy901; + if (yych <= 0xC1) + goto yy887; + if (yych <= 0xF4) + goto yy901; goto yy887; yy889: yyaccept = 0; @@ -14479,17 +14425,15 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy908; } - if (yych <= 0x7F) { - if (yych == '\n') - goto yy887; + if (yych <= 0x00) + goto yy887; + if (yych <= 0x7F) goto yy901; - } else { - if (yych <= 0xC1) - goto yy887; - if (yych <= 0xF4) - goto yy901; + if (yych <= 0xC1) goto yy887; - } + if (yych <= 0xF4) + goto yy901; + goto yy887; yy890: yyaccept = 0; yych = *(marker = ++p); @@ -14575,7 +14519,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy898; if (yych >= '^') goto yy898; @@ -14609,7 +14553,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy898; if (yych <= ']') goto yy908; @@ -14681,24 +14625,23 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy908; } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych == '\n') + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) goto yy898; - goto yy900; + if (yych <= '=') + goto yy900; } else { - if (yych <= '>') - goto yy910; if (yych <= 0x7F) goto yy900; if (yych <= 0xC1) goto yy898; - goto yy899; + if (yych <= 0xDF) + goto yy899; + goto yy903; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy903; if (yych == 0xED) goto yy907; goto yy897; @@ -14712,7 +14655,6 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { goto yy898; } } - yy910: yyaccept = 1; marker = ++p; yych = *p; @@ -14721,7 +14663,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\n') + if (yych <= 0x00) goto yy911; if (yych <= ']') goto yy902; diff --git a/src/scanners.re b/src/scanners.re index b313736864..a7b9696191 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -156,7 +156,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - .* [<] [/] ('script'|'pre'|'style') [>] { return (bufsize_t)(p - start); } + [^\x00]* [<] [/] ('script'|'pre'|'style') [>] { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -167,7 +167,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - .* '-->' { return (bufsize_t)(p - start); } + [^\x00]* '-->' { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -178,7 +178,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - .* '?>' { return (bufsize_t)(p - start); } + [^\x00]* '?>' { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -189,7 +189,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - .* '>' { return (bufsize_t)(p - start); } + [^\x00]* '>' { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -200,7 +200,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - .* ']]>' { return (bufsize_t)(p - start); } + [^\x00]* ']]>' { return (bufsize_t)(p - start); } * { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From cc24db41b5d9f18644839dc27c565e7006a7323f Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Wed, 21 Jun 2017 16:37:21 +1000 Subject: Don't scan past newline either --- src/scanners.c | 935 +++++++++++++++++++++++++++++++++----------------------- src/scanners.re | 10 +- 2 files changed, 558 insertions(+), 387 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 11e926e356..c96490dda5 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -12622,7 +12622,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -12639,24 +12639,24 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xE0) { - if (yych <= '<') { + if (yych <= 0xDF) { + if (yych <= ';') { if (yych <= 0x00) goto yy766; - if (yych <= ';') + if (yych != '\n') goto yy768; - goto yy769; } else { + if (yych <= '<') + goto yy769; if (yych <= 0x7F) goto yy768; - if (yych <= 0xC1) - goto yy766; - if (yych <= 0xDF) + if (yych >= 0xC2) goto yy770; - goto yy771; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy771; if (yych == 0xED) goto yy773; goto yy772; @@ -12675,24 +12675,12 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { yy768: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) - goto yy767; - if (yych <= 0x7F) - goto yy781; - if (yych <= 0xC1) - goto yy767; - if (yych <= 0xF4) - goto yy781; - goto yy767; - yy769: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '/') { + if (yych <= '\n') { if (yych <= 0x00) goto yy767; - if (yych <= '.') + if (yych <= '\t') goto yy781; - goto yy789; + goto yy767; } else { if (yych <= 0x7F) goto yy781; @@ -12702,6 +12690,28 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { goto yy781; goto yy767; } + yy769: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '.') { + if (yych <= 0x00) + goto yy767; + if (yych == '\n') + goto yy767; + goto yy781; + } else { + if (yych <= 0x7F) { + if (yych <= '/') + goto yy789; + goto yy781; + } else { + if (yych <= 0xC1) + goto yy767; + if (yych <= 0xF4) + goto yy781; + goto yy767; + } + } yy770: yyaccept = 0; yych = *(marker = ++p); @@ -12787,7 +12797,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy778; if (yych >= '=') goto yy778; @@ -12819,23 +12829,26 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xE0) { - if (yych <= '/') { + if (yych <= 0xDF) { + if (yych <= '.') { if (yych <= 0x00) goto yy778; - if (yych <= '.') - goto yy780; - goto yy789; + if (yych == '\n') + goto yy778; + goto yy780; } else { + if (yych <= '/') + goto yy789; if (yych <= 0x7F) goto yy780; if (yych <= 0xC1) goto yy778; - if (yych <= 0xDF) - goto yy779; + goto yy779; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy784; if (yych == 0xED) goto yy788; goto yy777; @@ -12895,43 +12908,47 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0x7F) { - if (yych <= 'S') { - if (yych <= 'O') { + if (yych <= 's') { + if (yych <= 'P') { + if (yych <= '\t') { if (yych <= 0x00) goto yy778; goto yy780; } else { - if (yych <= 'P') - goto yy791; - if (yych <= 'R') + if (yych <= '\n') + goto yy778; + if (yych <= 'O') goto yy780; + goto yy791; } } else { - if (yych <= 'p') { - if (yych <= 'o') + if (yych <= 'o') { + if (yych != 'S') goto yy780; - goto yy791; } else { - if (yych != 's') + if (yych <= 'p') + goto yy791; + if (yych <= 'r') goto yy780; } } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych <= 0xC1) - goto yy778; - goto yy779; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy780; + goto yy778; } else { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy777; } } else { if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; if (yych <= 0xEF) goto yy777; goto yy785; @@ -12949,45 +12966,49 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0x7F) { - if (yych <= 'T') { - if (yych <= 'B') { + if (yych <= 't') { + if (yych <= 'C') { + if (yych <= '\t') { if (yych <= 0x00) goto yy778; goto yy780; } else { - if (yych <= 'C') - goto yy796; - if (yych <= 'S') + if (yych <= '\n') + goto yy778; + if (yych <= 'B') goto yy780; - goto yy797; + goto yy796; } } else { - if (yych <= 'c') { - if (yych <= 'b') - goto yy780; - goto yy796; - } else { - if (yych == 't') + if (yych <= 'b') { + if (yych == 'T') goto yy797; goto yy780; + } else { + if (yych <= 'c') + goto yy796; + if (yych <= 's') + goto yy780; + goto yy797; } } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) { - if (yych <= 0xC1) - goto yy778; - goto yy779; + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy780; + goto yy778; } else { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy777; } } else { if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy788; if (yych <= 0xEF) goto yy777; goto yy785; @@ -13006,36 +13027,46 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'q') { + if (yych <= 0xC1) { + if (yych <= 'Q') { if (yych <= 0x00) goto yy778; - if (yych != 'R') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { - if (yych <= 'r') - goto yy792; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) + if (yych <= 'q') { + if (yych >= 'S') + goto yy780; + } else { + if (yych <= 'r') + goto yy792; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy792: @@ -13044,36 +13075,46 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'd') { + if (yych <= 0xC1) { + if (yych <= 'D') { if (yych <= 0x00) goto yy778; - if (yych != 'E') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { - if (yych <= 'e') - goto yy793; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) + if (yych <= 'd') { + if (yych >= 'F') + goto yy780; + } else { + if (yych <= 'e') + goto yy793; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy793: @@ -13082,23 +13123,26 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xE0) { - if (yych <= '>') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych <= 0x00) goto yy778; - if (yych <= '=') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { + if (yych <= '>') + goto yy794; if (yych <= 0x7F) goto yy780; if (yych <= 0xC1) goto yy778; - if (yych <= 0xDF) - goto yy779; - goto yy784; + goto yy779; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy784; if (yych == 0xED) goto yy788; goto yy777; @@ -13112,6 +13156,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { goto yy778; } } + yy794: yyaccept = 1; marker = ++p; yych = *p; @@ -13120,7 +13165,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy795; if (yych <= '<') goto yy782; @@ -13152,37 +13197,47 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'q') { + if (yych <= 0xC1) { + if (yych <= 'Q') { if (yych <= 0x00) goto yy778; - if (yych == 'R') - goto yy800; + if (yych == '\n') + goto yy778; goto yy780; } else { - if (yych <= 'r') - goto yy800; - if (yych <= 0x7F) + if (yych <= 'q') { + if (yych <= 'R') + goto yy800; goto yy780; - if (yych <= 0xC1) + } else { + if (yych <= 'r') + goto yy800; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy797: @@ -13191,36 +13246,46 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'x') { + if (yych <= 0xC1) { + if (yych <= 'X') { if (yych <= 0x00) goto yy778; - if (yych != 'Y') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { - if (yych <= 'y') - goto yy798; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) + if (yych <= 'x') { + if (yych >= 'Z') + goto yy780; + } else { + if (yych <= 'y') + goto yy798; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy798: @@ -13229,36 +13294,46 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'k') { + if (yych <= 0xC1) { + if (yych <= 'K') { if (yych <= 0x00) goto yy778; - if (yych != 'L') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { - if (yych <= 'l') - goto yy799; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) + if (yych <= 'k') { + if (yych >= 'M') + goto yy780; + } else { + if (yych <= 'l') + goto yy799; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy799: @@ -13267,37 +13342,47 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'd') { + if (yych <= 0xC1) { + if (yych <= 'D') { if (yych <= 0x00) goto yy778; - if (yych == 'E') - goto yy793; + if (yych == '\n') + goto yy778; goto yy780; } else { - if (yych <= 'e') - goto yy793; - if (yych <= 0x7F) + if (yych <= 'd') { + if (yych <= 'E') + goto yy793; goto yy780; - if (yych <= 0xC1) + } else { + if (yych <= 'e') + goto yy793; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy800: @@ -13306,36 +13391,46 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'h') { + if (yych <= 0xC1) { + if (yych <= 'H') { if (yych <= 0x00) goto yy778; - if (yych != 'I') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { - if (yych <= 'i') - goto yy801; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) + if (yych <= 'h') { + if (yych >= 'J') + goto yy780; + } else { + if (yych <= 'i') + goto yy801; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy801: @@ -13344,36 +13439,46 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 'o') { + if (yych <= 0xC1) { + if (yych <= 'O') { if (yych <= 0x00) goto yy778; - if (yych != 'P') - goto yy780; + if (yych == '\n') + goto yy778; + goto yy780; } else { - if (yych <= 'p') - goto yy802; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) + if (yych <= 'o') { + if (yych >= 'Q') + goto yy780; + } else { + if (yych <= 'p') + goto yy802; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) - goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + goto yy784; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } yy802: @@ -13382,37 +13487,47 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy782; } - if (yych <= 0xDF) { - if (yych <= 's') { + if (yych <= 0xC1) { + if (yych <= 'S') { if (yych <= 0x00) goto yy778; - if (yych == 'T') - goto yy793; + if (yych == '\n') + goto yy778; goto yy780; } else { - if (yych <= 't') - goto yy793; - if (yych <= 0x7F) + if (yych <= 's') { + if (yych <= 'T') + goto yy793; goto yy780; - if (yych <= 0xC1) + } else { + if (yych <= 't') + goto yy793; + if (yych <= 0x7F) + goto yy780; goto yy778; - goto yy779; + } } } else { - if (yych <= 0xEF) { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy779; if (yych <= 0xE0) goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; + if (yych <= 0xEC) + goto yy777; + goto yy788; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy777; goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; + } else { + if (yych <= 0xF3) + goto yy786; + if (yych <= 0xF4) + goto yy787; + goto yy778; + } } } } @@ -13427,7 +13542,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -13444,24 +13559,24 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xE0) { - if (yych <= '-') { + if (yych <= 0xDF) { + if (yych <= ',') { if (yych <= 0x00) goto yy805; - if (yych <= ',') + if (yych != '\n') goto yy807; - goto yy808; } else { + if (yych <= '-') + goto yy808; if (yych <= 0x7F) goto yy807; - if (yych <= 0xC1) - goto yy805; - if (yych <= 0xDF) + if (yych >= 0xC2) goto yy809; - goto yy810; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy810; if (yych == 0xED) goto yy812; goto yy811; @@ -13480,30 +13595,42 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { yy807: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) + if (yych <= '\n') { + if (yych <= 0x00) + goto yy806; + if (yych <= '\t') + goto yy820; goto yy806; - if (yych <= 0x7F) - goto yy820; - if (yych <= 0xC1) + } else { + if (yych <= 0x7F) + goto yy820; + if (yych <= 0xC1) + goto yy806; + if (yych <= 0xF4) + goto yy820; goto yy806; - if (yych <= 0xF4) - goto yy820; - goto yy806; + } yy808: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { goto yy827; } - if (yych <= 0x00) + if (yych <= '\n') { + if (yych <= 0x00) + goto yy806; + if (yych <= '\t') + goto yy820; goto yy806; - if (yych <= 0x7F) - goto yy820; - if (yych <= 0xC1) + } else { + if (yych <= 0x7F) + goto yy820; + if (yych <= 0xC1) + goto yy806; + if (yych <= 0xF4) + goto yy820; goto yy806; - if (yych <= 0xF4) - goto yy820; - goto yy806; + } yy809: yyaccept = 0; yych = *(marker = ++p); @@ -13589,7 +13716,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy817; if (yych >= '.') goto yy817; @@ -13623,7 +13750,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy817; if (yych <= '-') goto yy827; @@ -13695,23 +13822,26 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy827; } - if (yych <= 0xE0) { - if (yych <= '>') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych <= 0x00) goto yy817; - if (yych <= '=') - goto yy819; + if (yych == '\n') + goto yy817; + goto yy819; } else { + if (yych <= '>') + goto yy829; if (yych <= 0x7F) goto yy819; if (yych <= 0xC1) goto yy817; - if (yych <= 0xDF) - goto yy818; - goto yy822; + goto yy818; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy822; if (yych == 0xED) goto yy826; goto yy816; @@ -13725,6 +13855,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { goto yy817; } } + yy829: yyaccept = 1; marker = ++p; yych = *p; @@ -13733,7 +13864,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy830; if (yych <= '-') goto yy821; @@ -13771,7 +13902,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, @@ -13788,24 +13919,24 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xE0) { - if (yych <= '?') { + if (yych <= 0xDF) { + if (yych <= '>') { if (yych <= 0x00) goto yy833; - if (yych <= '>') + if (yych != '\n') goto yy835; - goto yy836; } else { + if (yych <= '?') + goto yy836; if (yych <= 0x7F) goto yy835; - if (yych <= 0xC1) - goto yy833; - if (yych <= 0xDF) + if (yych >= 0xC2) goto yy837; - goto yy838; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy838; if (yych == 0xED) goto yy840; goto yy839; @@ -13824,24 +13955,12 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { yy835: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) - goto yy834; - if (yych <= 0x7F) - goto yy848; - if (yych <= 0xC1) - goto yy834; - if (yych <= 0xF4) - goto yy848; - goto yy834; - yy836: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '>') { + if (yych <= '\n') { if (yych <= 0x00) goto yy834; - if (yych <= '=') + if (yych <= '\t') goto yy848; - goto yy856; + goto yy834; } else { if (yych <= 0x7F) goto yy848; @@ -13851,6 +13970,28 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { goto yy848; goto yy834; } + yy836: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '=') { + if (yych <= 0x00) + goto yy834; + if (yych == '\n') + goto yy834; + goto yy848; + } else { + if (yych <= 0x7F) { + if (yych <= '>') + goto yy856; + goto yy848; + } else { + if (yych <= 0xC1) + goto yy834; + if (yych <= 0xF4) + goto yy848; + goto yy834; + } + } yy837: yyaccept = 0; yych = *(marker = ++p); @@ -13936,7 +14077,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy845; if (yych >= '@') goto yy845; @@ -13968,23 +14109,26 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy849; } - if (yych <= 0xE0) { - if (yych <= '>') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych <= 0x00) goto yy845; - if (yych <= '=') - goto yy847; - goto yy856; + if (yych == '\n') + goto yy845; + goto yy847; } else { + if (yych <= '>') + goto yy856; if (yych <= 0x7F) goto yy847; if (yych <= 0xC1) goto yy845; - if (yych <= 0xDF) - goto yy846; + goto yy846; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy851; if (yych == 0xED) goto yy855; goto yy844; @@ -14047,7 +14191,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy857; if (yych <= '?') goto yy849; @@ -14085,7 +14229,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -14102,24 +14246,24 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych <= 0x00) goto yy860; - if (yych <= '=') + if (yych != '\n') goto yy862; - goto yy863; } else { + if (yych <= '>') + goto yy863; if (yych <= 0x7F) goto yy862; - if (yych <= 0xC1) - goto yy860; - if (yych <= 0xDF) + if (yych >= 0xC2) goto yy865; - goto yy866; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy866; if (yych == 0xED) goto yy868; goto yy867; @@ -14138,26 +14282,37 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { yy862: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) + if (yych <= '\n') { + if (yych <= 0x00) + goto yy861; + if (yych <= '\t') + goto yy876; goto yy861; - if (yych <= 0x7F) - goto yy876; - if (yych <= 0xC1) + } else { + if (yych <= 0x7F) + goto yy876; + if (yych <= 0xC1) + goto yy861; + if (yych <= 0xF4) + goto yy876; goto yy861; - if (yych <= 0xF4) - goto yy876; - goto yy861; + } yy863: yyaccept = 1; yych = *(marker = ++p); - if (yych <= 0x00) - goto yy864; - if (yych <= 0x7F) - goto yy876; - if (yych <= 0xC1) - goto yy864; - if (yych <= 0xF4) - goto yy876; + if (yych <= '\n') { + if (yych <= 0x00) + goto yy864; + if (yych <= '\t') + goto yy876; + } else { + if (yych <= 0x7F) + goto yy876; + if (yych <= 0xC1) + goto yy864; + if (yych <= 0xF4) + goto yy876; + } yy864 : { return (bufsize_t)(p - start); } yy865: yyaccept = 0; @@ -14244,7 +14399,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy873; if (yych >= '?') goto yy873; @@ -14279,7 +14434,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy864; if (yych <= '>') goto yy877; @@ -14357,7 +14512,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -14374,24 +14529,24 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { 0, 0, 0, 0, }; yych = *p; - if (yych <= 0xE0) { - if (yych <= ']') { + if (yych <= 0xDF) { + if (yych <= '\\') { if (yych <= 0x00) goto yy886; - if (yych <= '\\') + if (yych != '\n') goto yy888; - goto yy889; } else { + if (yych <= ']') + goto yy889; if (yych <= 0x7F) goto yy888; - if (yych <= 0xC1) - goto yy886; - if (yych <= 0xDF) + if (yych >= 0xC2) goto yy890; - goto yy891; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy891; if (yych == 0xED) goto yy893; goto yy892; @@ -14410,30 +14565,42 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { yy888: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) + if (yych <= '\n') { + if (yych <= 0x00) + goto yy887; + if (yych <= '\t') + goto yy901; goto yy887; - if (yych <= 0x7F) - goto yy901; - if (yych <= 0xC1) + } else { + if (yych <= 0x7F) + goto yy901; + if (yych <= 0xC1) + goto yy887; + if (yych <= 0xF4) + goto yy901; goto yy887; - if (yych <= 0xF4) - goto yy901; - goto yy887; + } yy889: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { goto yy908; } - if (yych <= 0x00) + if (yych <= '\n') { + if (yych <= 0x00) + goto yy887; + if (yych <= '\t') + goto yy901; goto yy887; - if (yych <= 0x7F) - goto yy901; - if (yych <= 0xC1) + } else { + if (yych <= 0x7F) + goto yy901; + if (yych <= 0xC1) + goto yy887; + if (yych <= 0xF4) + goto yy901; goto yy887; - if (yych <= 0xF4) - goto yy901; - goto yy887; + } yy890: yyaccept = 0; yych = *(marker = ++p); @@ -14519,7 +14686,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy898; if (yych >= '^') goto yy898; @@ -14553,7 +14720,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy898; if (yych <= ']') goto yy908; @@ -14625,23 +14792,26 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yybm[0 + yych] & 128) { goto yy908; } - if (yych <= 0xE0) { - if (yych <= '>') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych <= 0x00) goto yy898; - if (yych <= '=') - goto yy900; + if (yych == '\n') + goto yy898; + goto yy900; } else { + if (yych <= '>') + goto yy910; if (yych <= 0x7F) goto yy900; if (yych <= 0xC1) goto yy898; - if (yych <= 0xDF) - goto yy899; - goto yy903; + goto yy899; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy903; if (yych == 0xED) goto yy907; goto yy897; @@ -14655,6 +14825,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { goto yy898; } } + yy910: yyaccept = 1; marker = ++p; yych = *p; @@ -14663,7 +14834,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= 0x00) + if (yych <= '\n') goto yy911; if (yych <= ']') goto yy902; diff --git a/src/scanners.re b/src/scanners.re index a7b9696191..a0650f2ba3 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -156,7 +156,7 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [^\x00]* [<] [/] ('script'|'pre'|'style') [>] { return (bufsize_t)(p - start); } + [^\n\x00]* [<] [/] ('script'|'pre'|'style') [>] { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -167,7 +167,7 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [^\x00]* '-->' { return (bufsize_t)(p - start); } + [^\n\x00]* '-->' { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -178,7 +178,7 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [^\x00]* '?>' { return (bufsize_t)(p - start); } + [^\n\x00]* '?>' { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -189,7 +189,7 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [^\x00]* '>' { return (bufsize_t)(p - start); } + [^\n\x00]* '>' { return (bufsize_t)(p - start); } * { return 0; } */ } @@ -200,7 +200,7 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [^\x00]* ']]>' { return (bufsize_t)(p - start); } + [^\n\x00]* ']]>' { return (bufsize_t)(p - start); } * { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 55b029fb66fbbaed969ce81ed77d57f033cd0db4 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Fri, 23 Jun 2017 15:52:05 +1000 Subject: Reset bytes after UTF8 proc See https://github.com/jgm/cmark/issues/206. --- src/blocks.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blocks.c b/src/blocks.c index 98868d3046..5a293b2e09 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -1146,6 +1146,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, else cmark_strbuf_put(&parser->curline, buffer, bytes); + bytes = parser->curline.size; + // ensure line ends with a newline: if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1])) cmark_strbuf_putc(&parser->curline, '\n'); -- cgit 0.0.5-2-1-g0f52 From 86286978822cc9742f9c6a9f2fe6f4f32af05f9d Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Fri, 23 Jun 2017 14:20:02 -0700 Subject: Add hyphen to dictionary --- test/afl_dictionary/hyphen | 1 + 1 file changed, 1 insertion(+) diff --git a/test/afl_dictionary/hyphen b/test/afl_dictionary/hyphen index e69de29bb2..3cf20d57b0 100644 --- a/test/afl_dictionary/hyphen +++ b/test/afl_dictionary/hyphen @@ -0,0 +1 @@ +- \ No newline at end of file -- cgit 0.0.5-2-1-g0f52 From 70a6a168146baa6ab0df33d4ddf424ba5d40b151 Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Fri, 23 Jun 2017 14:30:19 -0700 Subject: Move fuzzing dictionary into single file This allows AFL and libFuzzer to use the same dictionary --- Makefile | 2 +- test/afl_dictionary/asterisk | 1 - test/afl_dictionary/attr_generic | 1 - test/afl_dictionary/attr_href | 1 - test/afl_dictionary/attr_xml_lang | 1 - test/afl_dictionary/attr_xmlns | 1 - test/afl_dictionary/backslash | 1 - test/afl_dictionary/backtick | 1 - test/afl_dictionary/colon | 1 - test/afl_dictionary/dashes | 1 - test/afl_dictionary/double_quote | 1 - test/afl_dictionary/entity_builtin | 1 - test/afl_dictionary/entity_decimal | 1 - test/afl_dictionary/entity_external | 1 - test/afl_dictionary/entity_hex | 1 - test/afl_dictionary/equals | 1 - test/afl_dictionary/exclamation | 1 - test/afl_dictionary/greater_than | 1 - test/afl_dictionary/hash | 1 - test/afl_dictionary/hyphen | 1 - test/afl_dictionary/indent | 1 - test/afl_dictionary/left_bracket | 1 - test/afl_dictionary/left_paren | 1 - test/afl_dictionary/less_than | 1 - test/afl_dictionary/plus | 1 - test/afl_dictionary/right_bracket | 1 - test/afl_dictionary/right_paren | 1 - test/afl_dictionary/single_quote | 1 - test/afl_dictionary/string_any | 1 - test/afl_dictionary/string_brackets | 1 - test/afl_dictionary/string_cdata | 1 - test/afl_dictionary/string_dashes | 1 - test/afl_dictionary/string_empty_dblquotes | 1 - test/afl_dictionary/string_empty_quotes | 1 - test/afl_dictionary/string_idrefs | 1 - test/afl_dictionary/string_parentheses | 1 - test/afl_dictionary/string_pcdata | 1 - test/afl_dictionary/tag_cdata | 1 - test/afl_dictionary/tag_close | 1 - test/afl_dictionary/tag_doctype | 1 - test/afl_dictionary/tag_element | 1 - test/afl_dictionary/tag_entity | 1 - test/afl_dictionary/tag_notation | 1 - test/afl_dictionary/tag_open | 1 - test/afl_dictionary/tag_open_close | 1 - test/afl_dictionary/tag_open_exclamation | 1 - test/afl_dictionary/tag_open_q | 1 - test/afl_dictionary/tag_sq2_close | 1 - test/afl_dictionary/tag_xml_q | 1 - test/afl_dictionary/underscore | 1 - test/fuzzing_dictionary | 49 ++++++++++++++++++++++++++++++ 51 files changed, 50 insertions(+), 50 deletions(-) delete mode 100644 test/afl_dictionary/asterisk delete mode 100644 test/afl_dictionary/attr_generic delete mode 100644 test/afl_dictionary/attr_href delete mode 100644 test/afl_dictionary/attr_xml_lang delete mode 100644 test/afl_dictionary/attr_xmlns delete mode 100644 test/afl_dictionary/backslash delete mode 100644 test/afl_dictionary/backtick delete mode 100644 test/afl_dictionary/colon delete mode 100644 test/afl_dictionary/dashes delete mode 100644 test/afl_dictionary/double_quote delete mode 100644 test/afl_dictionary/entity_builtin delete mode 100644 test/afl_dictionary/entity_decimal delete mode 100644 test/afl_dictionary/entity_external delete mode 100644 test/afl_dictionary/entity_hex delete mode 100644 test/afl_dictionary/equals delete mode 100644 test/afl_dictionary/exclamation delete mode 100644 test/afl_dictionary/greater_than delete mode 100644 test/afl_dictionary/hash delete mode 100644 test/afl_dictionary/hyphen delete mode 100644 test/afl_dictionary/indent delete mode 100644 test/afl_dictionary/left_bracket delete mode 100644 test/afl_dictionary/left_paren delete mode 100644 test/afl_dictionary/less_than delete mode 100644 test/afl_dictionary/plus delete mode 100644 test/afl_dictionary/right_bracket delete mode 100644 test/afl_dictionary/right_paren delete mode 100644 test/afl_dictionary/single_quote delete mode 100644 test/afl_dictionary/string_any delete mode 100644 test/afl_dictionary/string_brackets delete mode 100644 test/afl_dictionary/string_cdata delete mode 100644 test/afl_dictionary/string_dashes delete mode 100644 test/afl_dictionary/string_empty_dblquotes delete mode 100644 test/afl_dictionary/string_empty_quotes delete mode 100644 test/afl_dictionary/string_idrefs delete mode 100644 test/afl_dictionary/string_parentheses delete mode 100644 test/afl_dictionary/string_pcdata delete mode 100644 test/afl_dictionary/tag_cdata delete mode 100644 test/afl_dictionary/tag_close delete mode 100644 test/afl_dictionary/tag_doctype delete mode 100644 test/afl_dictionary/tag_element delete mode 100644 test/afl_dictionary/tag_entity delete mode 100644 test/afl_dictionary/tag_notation delete mode 100644 test/afl_dictionary/tag_open delete mode 100644 test/afl_dictionary/tag_open_close delete mode 100644 test/afl_dictionary/tag_open_exclamation delete mode 100644 test/afl_dictionary/tag_open_q delete mode 100644 test/afl_dictionary/tag_sq2_close delete mode 100644 test/afl_dictionary/tag_xml_q delete mode 100644 test/afl_dictionary/underscore create mode 100644 test/fuzzing_dictionary diff --git a/Makefile b/Makefile index 987ed2bafc..1b58bf7cc3 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ afl: $(AFL_PATH)/afl-fuzz \ -i test/afl_test_cases \ -o test/afl_results \ - -x test/afl_dictionary \ + -x test/fuzzing_dictionary \ -t 100 \ $(CMARK) $(CMARK_OPTS) diff --git a/test/afl_dictionary/asterisk b/test/afl_dictionary/asterisk deleted file mode 100644 index f59ec20aab..0000000000 --- a/test/afl_dictionary/asterisk +++ /dev/null @@ -1 +0,0 @@ -* \ No newline at end of file diff --git a/test/afl_dictionary/attr_generic b/test/afl_dictionary/attr_generic deleted file mode 100644 index d84e4b2e4f..0000000000 --- a/test/afl_dictionary/attr_generic +++ /dev/null @@ -1 +0,0 @@ - a="1" \ No newline at end of file diff --git a/test/afl_dictionary/attr_href b/test/afl_dictionary/attr_href deleted file mode 100644 index cbb9775697..0000000000 --- a/test/afl_dictionary/attr_href +++ /dev/null @@ -1 +0,0 @@ - href="1" \ No newline at end of file diff --git a/test/afl_dictionary/attr_xml_lang b/test/afl_dictionary/attr_xml_lang deleted file mode 100644 index 6dab3e9ee6..0000000000 --- a/test/afl_dictionary/attr_xml_lang +++ /dev/null @@ -1 +0,0 @@ - xml:lang="1" \ No newline at end of file diff --git a/test/afl_dictionary/attr_xmlns b/test/afl_dictionary/attr_xmlns deleted file mode 100644 index 168863a33d..0000000000 --- a/test/afl_dictionary/attr_xmlns +++ /dev/null @@ -1 +0,0 @@ - xmlns="1" \ No newline at end of file diff --git a/test/afl_dictionary/backslash b/test/afl_dictionary/backslash deleted file mode 100644 index b7d5379f9e..0000000000 --- a/test/afl_dictionary/backslash +++ /dev/null @@ -1 +0,0 @@ -\ \ No newline at end of file diff --git a/test/afl_dictionary/backtick b/test/afl_dictionary/backtick deleted file mode 100644 index 64845fb767..0000000000 --- a/test/afl_dictionary/backtick +++ /dev/null @@ -1 +0,0 @@ -` \ No newline at end of file diff --git a/test/afl_dictionary/colon b/test/afl_dictionary/colon deleted file mode 100644 index 22ded55aa2..0000000000 --- a/test/afl_dictionary/colon +++ /dev/null @@ -1 +0,0 @@ -: \ No newline at end of file diff --git a/test/afl_dictionary/dashes b/test/afl_dictionary/dashes deleted file mode 100644 index 73b314ff7c..0000000000 --- a/test/afl_dictionary/dashes +++ /dev/null @@ -1 +0,0 @@ ---- \ No newline at end of file diff --git a/test/afl_dictionary/double_quote b/test/afl_dictionary/double_quote deleted file mode 100644 index 9d68933c44..0000000000 --- a/test/afl_dictionary/double_quote +++ /dev/null @@ -1 +0,0 @@ -" \ No newline at end of file diff --git a/test/afl_dictionary/entity_builtin b/test/afl_dictionary/entity_builtin deleted file mode 100644 index 1489a83e36..0000000000 --- a/test/afl_dictionary/entity_builtin +++ /dev/null @@ -1 +0,0 @@ -< \ No newline at end of file diff --git a/test/afl_dictionary/entity_decimal b/test/afl_dictionary/entity_decimal deleted file mode 100644 index 7b997f68af..0000000000 --- a/test/afl_dictionary/entity_decimal +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/entity_external b/test/afl_dictionary/entity_external deleted file mode 100644 index f626a66c1e..0000000000 --- a/test/afl_dictionary/entity_external +++ /dev/null @@ -1 +0,0 @@ -&a; \ No newline at end of file diff --git a/test/afl_dictionary/entity_hex b/test/afl_dictionary/entity_hex deleted file mode 100644 index 8766028af5..0000000000 --- a/test/afl_dictionary/entity_hex +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/equals b/test/afl_dictionary/equals deleted file mode 100644 index 719398400d..0000000000 --- a/test/afl_dictionary/equals +++ /dev/null @@ -1 +0,0 @@ -=== \ No newline at end of file diff --git a/test/afl_dictionary/exclamation b/test/afl_dictionary/exclamation deleted file mode 100644 index 74e0f12e32..0000000000 --- a/test/afl_dictionary/exclamation +++ /dev/null @@ -1 +0,0 @@ -! \ No newline at end of file diff --git a/test/afl_dictionary/greater_than b/test/afl_dictionary/greater_than deleted file mode 100644 index 0817502b11..0000000000 --- a/test/afl_dictionary/greater_than +++ /dev/null @@ -1 +0,0 @@ -> \ No newline at end of file diff --git a/test/afl_dictionary/hash b/test/afl_dictionary/hash deleted file mode 100644 index 4287ca8617..0000000000 --- a/test/afl_dictionary/hash +++ /dev/null @@ -1 +0,0 @@ -# \ No newline at end of file diff --git a/test/afl_dictionary/hyphen b/test/afl_dictionary/hyphen deleted file mode 100644 index 3cf20d57b0..0000000000 --- a/test/afl_dictionary/hyphen +++ /dev/null @@ -1 +0,0 @@ -- \ No newline at end of file diff --git a/test/afl_dictionary/indent b/test/afl_dictionary/indent deleted file mode 100644 index 136d06384a..0000000000 --- a/test/afl_dictionary/indent +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/left_bracket b/test/afl_dictionary/left_bracket deleted file mode 100644 index 8e2f0bef13..0000000000 --- a/test/afl_dictionary/left_bracket +++ /dev/null @@ -1 +0,0 @@ -[ \ No newline at end of file diff --git a/test/afl_dictionary/left_paren b/test/afl_dictionary/left_paren deleted file mode 100644 index f46d387bf9..0000000000 --- a/test/afl_dictionary/left_paren +++ /dev/null @@ -1 +0,0 @@ -( \ No newline at end of file diff --git a/test/afl_dictionary/less_than b/test/afl_dictionary/less_than deleted file mode 100644 index c5fa78456d..0000000000 --- a/test/afl_dictionary/less_than +++ /dev/null @@ -1 +0,0 @@ -< \ No newline at end of file diff --git a/test/afl_dictionary/plus b/test/afl_dictionary/plus deleted file mode 100644 index 9b26e9b102..0000000000 --- a/test/afl_dictionary/plus +++ /dev/null @@ -1 +0,0 @@ -+ \ No newline at end of file diff --git a/test/afl_dictionary/right_bracket b/test/afl_dictionary/right_bracket deleted file mode 100644 index 54caf60b13..0000000000 --- a/test/afl_dictionary/right_bracket +++ /dev/null @@ -1 +0,0 @@ -] \ No newline at end of file diff --git a/test/afl_dictionary/right_paren b/test/afl_dictionary/right_paren deleted file mode 100644 index e8a0f87653..0000000000 --- a/test/afl_dictionary/right_paren +++ /dev/null @@ -1 +0,0 @@ -) \ No newline at end of file diff --git a/test/afl_dictionary/single_quote b/test/afl_dictionary/single_quote deleted file mode 100644 index ad2823b48f..0000000000 --- a/test/afl_dictionary/single_quote +++ /dev/null @@ -1 +0,0 @@ -' \ No newline at end of file diff --git a/test/afl_dictionary/string_any b/test/afl_dictionary/string_any deleted file mode 100644 index bcd7dd4e44..0000000000 --- a/test/afl_dictionary/string_any +++ /dev/null @@ -1 +0,0 @@ -ANY \ No newline at end of file diff --git a/test/afl_dictionary/string_brackets b/test/afl_dictionary/string_brackets deleted file mode 100644 index 0637a088a0..0000000000 --- a/test/afl_dictionary/string_brackets +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/test/afl_dictionary/string_cdata b/test/afl_dictionary/string_cdata deleted file mode 100644 index 9d6d94ee58..0000000000 --- a/test/afl_dictionary/string_cdata +++ /dev/null @@ -1 +0,0 @@ -CDATA \ No newline at end of file diff --git a/test/afl_dictionary/string_dashes b/test/afl_dictionary/string_dashes deleted file mode 100644 index 7489accbf2..0000000000 --- a/test/afl_dictionary/string_dashes +++ /dev/null @@ -1 +0,0 @@ --- \ No newline at end of file diff --git a/test/afl_dictionary/string_empty_dblquotes b/test/afl_dictionary/string_empty_dblquotes deleted file mode 100644 index 3cc762b550..0000000000 --- a/test/afl_dictionary/string_empty_dblquotes +++ /dev/null @@ -1 +0,0 @@ -"" \ No newline at end of file diff --git a/test/afl_dictionary/string_empty_quotes b/test/afl_dictionary/string_empty_quotes deleted file mode 100644 index 9423090951..0000000000 --- a/test/afl_dictionary/string_empty_quotes +++ /dev/null @@ -1 +0,0 @@ -'' \ No newline at end of file diff --git a/test/afl_dictionary/string_idrefs b/test/afl_dictionary/string_idrefs deleted file mode 100644 index dd37f9ccd4..0000000000 --- a/test/afl_dictionary/string_idrefs +++ /dev/null @@ -1 +0,0 @@ -IDREFS \ No newline at end of file diff --git a/test/afl_dictionary/string_parentheses b/test/afl_dictionary/string_parentheses deleted file mode 100644 index dd626a0f31..0000000000 --- a/test/afl_dictionary/string_parentheses +++ /dev/null @@ -1 +0,0 @@ -() \ No newline at end of file diff --git a/test/afl_dictionary/string_pcdata b/test/afl_dictionary/string_pcdata deleted file mode 100644 index d2dd7f78a0..0000000000 --- a/test/afl_dictionary/string_pcdata +++ /dev/null @@ -1 +0,0 @@ -#PCDATA \ No newline at end of file diff --git a/test/afl_dictionary/tag_cdata b/test/afl_dictionary/tag_cdata deleted file mode 100644 index fac6255c43..0000000000 --- a/test/afl_dictionary/tag_cdata +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/tag_doctype b/test/afl_dictionary/tag_doctype deleted file mode 100644 index b7717521bb..0000000000 --- a/test/afl_dictionary/tag_doctype +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/tag_open_close b/test/afl_dictionary/tag_open_close deleted file mode 100644 index 4a12235218..0000000000 --- a/test/afl_dictionary/tag_open_close +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/tag_open_exclamation b/test/afl_dictionary/tag_open_exclamation deleted file mode 100644 index 58adc036c0..0000000000 --- a/test/afl_dictionary/tag_open_exclamation +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/tag_xml_q b/test/afl_dictionary/tag_xml_q deleted file mode 100644 index be32990c5e..0000000000 --- a/test/afl_dictionary/tag_xml_q +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/afl_dictionary/underscore b/test/afl_dictionary/underscore deleted file mode 100644 index c9cdc63b07..0000000000 --- a/test/afl_dictionary/underscore +++ /dev/null @@ -1 +0,0 @@ -_ \ No newline at end of file diff --git a/test/fuzzing_dictionary b/test/fuzzing_dictionary new file mode 100644 index 0000000000..b06783c94e --- /dev/null +++ b/test/fuzzing_dictionary @@ -0,0 +1,49 @@ +asterisk="*" +attr_generic=" a=\"1\"" +attr_href=" href=\"1\"" +attr_xml_lang=" xml:lang=\"1\"" +attr_xmlns=" xmlns=\"1\"" +backslash="\\" +backtick="`" +colon=":" +dashes="---" +double_quote="\"" +entity_builtin="<" +entity_decimal="" +entity_external="&a;" +entity_hex="" +equals="===" +exclamation="!" +greater_than=">" +hash="#" +hyphen="-" +indent=" " +left_bracket="[" +left_paren="(" +less_than="<" +plus="+" +right_bracket="]" +right_paren=")" +single_quote="'" +string_any="ANY" +string_brackets="[]" +string_cdata="CDATA" +string_dashes="--" +string_empty_dblquotes="\"\"" +string_empty_quotes="''" +string_idrefs="IDREFS" +string_parentheses="()" +string_pcdata="#PCDATA" +tag_cdata="" +tag_doctype="" +tag_open_close="" +tag_open_exclamation="" +tag_xml_q="" +underscore="_" -- cgit 0.0.5-2-1-g0f52 From c1dea4ee507ef62b121051e34e36a9b24459ea39 Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Mon, 26 Jun 2017 15:05:30 -0400 Subject: Add Makefile target and harness to fuzz with libFuzzer This can be run locally with `make libFuzzer` but the harness will be integrated into oss-fuzz for large-scale fuzzing. --- CMakeLists.txt | 1 + Makefile | 8 ++++++++ README.md | 8 ++++++++ src/CMakeLists.txt | 11 +++++++++++ test/cmark-fuzz.c | 28 ++++++++++++++++++++++++++++ test/run-cmark-fuzz | 4 ++++ 6 files changed, 60 insertions(+) create mode 100644 test/cmark-fuzz.c create mode 100755 test/run-cmark-fuzz diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e60fd50c0..33180e535d 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_ option(CMARK_TESTS "Build cmark tests and enable testing" ON) option(CMARK_STATIC "Build static libcmark library" ON) option(CMARK_SHARED "Build shared libcmark library" ON) +option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF) add_subdirectory(src) if(CMARK_TESTS AND CMARK_SHARED) diff --git a/Makefile b/Makefile index 1b58bf7cc3..c10c0352f0 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ BENCHFILE=$(BENCHDIR)/benchinput.md ALLTESTS=alltests.md NUMRUNS?=10 CMARK=$(BUILDDIR)/src/cmark +CMARK_FUZZ=$(BUILDDIR)/src/cmark-fuzz PROG?=$(CMARK) VERSION?=$(SPECVERSION) RELEASE?=CommonMark-$(VERSION) @@ -81,6 +82,13 @@ afl: -t 100 \ $(CMARK) $(CMARK_OPTS) +libFuzzer: + @[ -n "$(LIB_FUZZER_PATH)" ] || { echo '$$LIB_FUZZER_PATH not set'; false; } + mkdir -p $(BUILDDIR) + cd $(BUILDDIR) && cmake -DCMAKE_BUILD_TYPE=Asan -DCMARK_LIB_FUZZER=ON -DCMAKE_LIB_FUZZER_PATH=$(LIB_FUZZER_PATH) .. + $(MAKE) -j2 -C $(BUILDDIR) cmark-fuzz + test/run-cmark-fuzz $(CMARK_FUZZ) + clang-check: all ${CLANG_CHECK} -p build -analyze src/*.c diff --git a/README.md b/README.md index 9aaf32fcb5..1c9dd69db5 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,13 @@ To do a more systematic fuzz test with [american fuzzy lop]: AFL_PATH=/path/to/afl_directory make afl +Fuzzing with [libFuzzer] is also supported but, because libFuzzer is still +under active development, may not work with your system-installed version of +clang. Assuming LLVM has been built in `$HOME/src/llvm/build` the fuzzer can be +run with: + + CC="$HOME/src/llvm/build/bin/clang" LIB_FUZZER_PATH="$HOME/src/llvm/lib/Fuzzer/libFuzzer.a" make libFuzzer + To make a release tarball and zip archive: make archive @@ -188,3 +195,4 @@ most of the C library's API and its test harness. [Build Status]: https://img.shields.io/travis/jgm/cmark/master.svg?style=flat [Windows Build Status]: https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true [american fuzzy lop]: http://lcamtuf.coredump.cx/afl/ +[libFuzzer]: http://llvm.org/docs/LibFuzzer.html diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f52ded6ca7..319719607e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -186,3 +186,14 @@ endif() if(CMAKE_BUILD_TYPE STREQUAL "Ubsan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") endif() + +if(CMARK_LIB_FUZZER) + set(FUZZ_HARNESS "cmark-fuzz") + add_executable(${FUZZ_HARNESS} ../test/cmark-fuzz.c ${LIBRARY_SOURCES}) + target_link_libraries(${FUZZ_HARNESS} "${CMAKE_LIB_FUZZER_PATH}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=trace-pc-guard") + + # cmark is written in C but the libFuzzer runtime is written in C++ which + # needs to link against the C++ runtime. Explicitly link it into cmark-fuzz + set_target_properties(${FUZZ_HARNESS} PROPERTIES LINK_FLAGS "-lstdc++") +endif() diff --git a/test/cmark-fuzz.c b/test/cmark-fuzz.c new file mode 100644 index 0000000000..f09db52126 --- /dev/null +++ b/test/cmark-fuzz.c @@ -0,0 +1,28 @@ +#include +#include +#include "cmark.h" + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + int options = 0; + if (size > sizeof(options)) { + /* First 4 bytes of input are treated as options */ + int options = *(const int *)data; + + /* Mask off valid option bits */ + options = options & (CMARK_OPT_SOURCEPOS | CMARK_OPT_HARDBREAKS | CMARK_OPT_SAFE | CMARK_OPT_NOBREAKS | CMARK_OPT_NORMALIZE | CMARK_OPT_VALIDATE_UTF8 | CMARK_OPT_SMART); + + /* Remainder of input is the markdown */ + const char *markdown = (const char *)(data + sizeof(options)); + const size_t markdown_size = size - sizeof(options); + cmark_node *doc = cmark_parse_document(markdown, markdown_size, options); + + free(cmark_render_commonmark(doc, options, 80)); + free(cmark_render_html(doc, options)); + free(cmark_render_latex(doc, options, 80)); + free(cmark_render_man(doc, options, 80)); + free(cmark_render_xml(doc, options)); + + cmark_node_free(doc); + } + return 0; +} diff --git a/test/run-cmark-fuzz b/test/run-cmark-fuzz new file mode 100755 index 0000000000..75100b8b16 --- /dev/null +++ b/test/run-cmark-fuzz @@ -0,0 +1,4 @@ +#!/bin/bash -eu +CMARK_FUZZ="$1" +shift +ASAN_OPTIONS="quarantine_size_mb=10:detect_leaks=1" "${CMARK_FUZZ}" -max_len=256 -timeout=1 -dict=test/fuzzing_dictionary "$@" -- cgit 0.0.5-2-1-g0f52 From a2f1f76dc38a34d0e3d97f75d1fee527931b6e8a Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Mon, 26 Jun 2017 15:26:56 -0400 Subject: Check for NULL pointer in get_link_type echo '[](xx:)' | ./build/src/cmark -t latex Segmentation fault: 11 --- src/latex.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/latex.c b/src/latex.c index 9bd6444634..22052d7bbe 100644 --- a/src/latex.c +++ b/src/latex.c @@ -179,6 +179,10 @@ static link_type get_link_type(cmark_node *node) { link_text = node->first_child; cmark_consolidate_text_nodes(link_text); + + if (!link_text) + return NO_LINK; + realurl = (char *)url; realurllen = (int)url_len; if (strncmp(realurl, "mailto:", 7) == 0) { -- cgit 0.0.5-2-1-g0f52 From 09d96cd0b6f352227f741c4fc9b0d82cbefcc012 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 29 Jun 2017 10:01:30 +0200 Subject: Makefile: add libFuzzer to phony --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c10c0352f0..47ac06f3f5 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ CLANG_CHECK?=clang-check CLANG_FORMAT=clang-format -style llvm -sort-includes=0 -i AFL_PATH?=/usr/local/bin -.PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive newbench bench format update-spec afl clang-check +.PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive newbench bench format update-spec afl clang-check libFuzzer all: cmake_build man/man3/cmark.3 -- cgit 0.0.5-2-1-g0f52 From f8737b1c82981624b3263224dbf92fa6627f7205 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 29 Jun 2017 10:01:34 +0200 Subject: latex writer: fix memory overflow. We got an array overflow in enumerated lists nested more than 10 deep with start number =/= 1. Found by google/oss-fuzz. https://oss-fuzz.com/v2/testcase-detail/5546760854306816 This commit also ensures that we don't try to set `enum_` counters that aren't defined by LaTeX (generally up to enumv). Closes #210. --- src/latex.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/latex.c b/src/latex.c index 22052d7bbe..f372a132a8 100644 --- a/src/latex.c +++ b/src/latex.c @@ -220,11 +220,10 @@ static int S_get_enumlevel(cmark_node *node) { static int S_render_node(cmark_renderer *renderer, cmark_node *node, cmark_event_type ev_type, int options) { int list_number; + int enumlevel; char list_number_string[LIST_NUMBER_STRING_SIZE]; bool entering = (ev_type == CMARK_EVENT_ENTER); cmark_list_type list_type; - const char *roman_numerals[] = {"", "i", "ii", "iii", "iv", "v", - "vi", "vii", "viii", "ix", "x"}; bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options); // avoid warning about unused parameter: @@ -253,13 +252,24 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, CR(); list_number = cmark_node_get_list_start(node); if (list_number > 1) { - snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d", - list_number); - LIT("\\setcounter{enum"); - LIT((char *)roman_numerals[S_get_enumlevel(node)]); - LIT("}{"); - OUT(list_number_string, false, NORMAL); - LIT("}"); + enumlevel = S_get_enumlevel(node); + // latex normally supports only five levels + if (enumlevel >= 1 && enumlevel <= 5) { + snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d", + list_number); + LIT("\\setcounter{enum"); + switch(enumlevel) { + case 1: LIT("i"); break; + case 2: LIT("ii"); break; + case 3: LIT("iii"); break; + case 4: LIT("iv"); break; + case 5: LIT("v"); break; + default: LIT("i"); break; + } + LIT("}{"); + OUT(list_number_string, false, NORMAL); + LIT("}"); + } CR(); } } else { -- cgit 0.0.5-2-1-g0f52 From 6e8f0bf2d394f7dc444efe003e1b65610a57f30c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 29 Jun 2017 10:23:20 +0200 Subject: Fixed undefined shift in commonmark writer. Closes #211. Found by google/oss-fuzz: https://oss-fuzz.com/v2/testcase-detail/4686992824598528 --- src/commonmark.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index b8b1820684..a9ba566331 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include "config.h" @@ -81,7 +82,9 @@ static int longest_backtick_sequence(const char *code) { } static int shortest_unused_backtick_sequence(const char *code) { - int32_t used = 1; + // note: if the shortest sequence is >= 32, this returns 32 + // so as not to overflow the bit array. + uint32_t used = 1; int current = 0; size_t i = 0; size_t code_len = strlen(code); @@ -89,7 +92,7 @@ static int shortest_unused_backtick_sequence(const char *code) { if (code[i] == '`') { current++; } else { - if (current) { + if (current > 0 && current < 32) { used |= (1 << current); } current = 0; @@ -98,7 +101,7 @@ static int shortest_unused_backtick_sequence(const char *code) { } // return number of first bit that is 0: i = 0; - while (used & 1) { + while (i < 32 && used & 1) { used = used >> 1; i++; } -- cgit 0.0.5-2-1-g0f52 From f953e0ea24f530650784f73d87cca1a2ea8baff1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 29 Jun 2017 14:55:14 +0200 Subject: DeMorgan simplification of some tests in emphasis parser. This also brings the code into closer alignment with the wording of the spec. See jgm/CommonMark#467. --- src/inlines.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index eea063173d..f5b0621821 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -331,13 +331,13 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, after_char = 10; } left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) && - !(cmark_utf8proc_is_punctuation(after_char) && - !cmark_utf8proc_is_space(before_char) && - !cmark_utf8proc_is_punctuation(before_char)); + (!cmark_utf8proc_is_punctuation(after_char) || + cmark_utf8proc_is_space(before_char) || + cmark_utf8proc_is_punctuation(before_char)); right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) && - !(cmark_utf8proc_is_punctuation(before_char) && - !cmark_utf8proc_is_space(after_char) && - !cmark_utf8proc_is_punctuation(after_char)); + (!cmark_utf8proc_is_punctuation(before_char) || + cmark_utf8proc_is_space(after_char) || + cmark_utf8proc_is_punctuation(after_char)); if (c == '_') { *can_open = left_flanking && (!right_flanking || cmark_utf8proc_is_punctuation(before_char)); -- cgit 0.0.5-2-1-g0f52 From 4b83812e6780e4a58669272a7426f1491711ca8c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 29 Jun 2017 15:03:43 +0200 Subject: Updated spec.txt. --- test/spec.txt | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 857e92c32d..64a60b19de 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -11,10 +11,12 @@ license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ## What is Markdown? Markdown is a plain text format for writing structured documents, -based on conventions used for indicating formatting in email and -usenet posts. It was developed in 2004 by John Gruber, who wrote -the first Markdown-to-HTML converter in Perl, and it soon became -ubiquitous. In the next decade, dozens of implementations were +based on conventions for indicating formatting in email +and usenet posts. It was developed by John Gruber (with +help from Aaron Swartz) and released in 2004 in the form of a +[syntax description](http://daringfireball.net/projects/markdown/syntax) +and a Perl script (`Markdown.pl`) for converting Markdown to +HTML. In the next decade, dozens of implementations were developed in many languages. Some extended the original Markdown syntax with conventions for footnotes, tables, and other document elements. Some allowed Markdown documents to be @@ -312,7 +314,7 @@ form feed (`U+000C`), or carriage return (`U+000D`). characters]. A [Unicode whitespace character](@) is -any code point in the Unicode `Zs` class, or a tab (`U+0009`), +any code point in the Unicode `Zs` general category, or a tab (`U+0009`), carriage return (`U+000D`), newline (`U+000A`), or form feed (`U+000C`). @@ -331,7 +333,7 @@ is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, A [punctuation character](@) is an [ASCII punctuation character] or anything in -the Unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. +the general Unicode categories `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. ## Tabs @@ -402,8 +404,8 @@ as indentation with four spaces would: 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 +which is treated as if it were expanded into three spaces. +Since one of these 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. @@ -481,7 +483,7 @@ We can think of a document as a sequence of quotations, lists, headings, rules, and code blocks. Some blocks (like block quotes and list items) contain other blocks; others (like headings and paragraphs) contain [inline](@) content---text, -links, emphasized text, images, code, and so on. +links, emphasized text, images, code spans, and so on. ## Precedence @@ -5796,6 +5798,15 @@ we just have literal backticks:

                            `foo

                            ```````````````````````````````` +The following case also illustrates the need for opening and +closing backtick strings to be equal in length: + +```````````````````````````````` example +`foo``bar`` +. +

                            `foobar

                            +```````````````````````````````` + ## Emphasis and strong emphasis @@ -5850,14 +5861,14 @@ characters that is not preceded or followed by a `_` character. A [left-flanking delimiter run](@) is a [delimiter run] that is (a) not followed by [Unicode whitespace], -and (b) either not followed by a [punctuation character], or +and (b) not followed by a [punctuation character], or preceded by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of the line count as Unicode whitespace. A [right-flanking delimiter run](@) is a [delimiter run] that is (a) not preceded by [Unicode whitespace], -and (b) either not preceded by a [punctuation character], or +and (b) not preceded by a [punctuation character], or followed by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of the line count as Unicode whitespace. @@ -5936,7 +5947,7 @@ The following rules define emphasis and strong emphasis: 7. A double `**` [can close strong emphasis](@) iff it is part of a [right-flanking delimiter run]. -8. A double `__` [can close strong emphasis] +8. A double `__` [can close strong emphasis] iff it is part of a [right-flanking delimiter run] and either (a) not part of a [left-flanking delimiter run] or (b) part of a [left-flanking delimiter run] @@ -5977,7 +5988,7 @@ the following principles resolve ambiguity: `...`. 14. An interpretation `...` is always - preferred to `..`. + preferred to `...`. 15. When two potential emphasis or strong emphasis spans overlap, so that the second begins before the first ends and ends after @@ -8319,11 +8330,11 @@ The link labels are case-insensitive: ```````````````````````````````` -If you just want bracketed text, you can backslash-escape the -opening `!` and `[`: +If you just want a literal `!` followed by bracketed text, you can +backslash-escape the opening `[`: ```````````````````````````````` example -\!\[foo] +!\[foo] [foo]: /url "title" . -- cgit 0.0.5-2-1-g0f52 From ff28e0d00dbf8c4f84bbb379aa87257ae31cdd9d Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Wed, 5 Jul 2017 15:29:15 -0400 Subject: Avoid memcpy'ing NULL pointers A UBSAN warning can be triggered because the link title is an empty string: src/inlines.c:113:20: runtime error: null pointer passed as argument 2, which is declared to never be null which can be triggered by: ``` [f]:_ [f] ``` The length of the memcpy is zero so the NULL pointer is not dereferenced but it is still undefined behaviour. --- src/inlines.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index f5b0621821..b864e129e6 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -115,7 +115,8 @@ static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) { c.len = len; c.data = (unsigned char *)mem->calloc(len + 1, 1); c.alloc = 1; - memcpy(c.data, src->data, len); + if (len) + memcpy(c.data, src->data, len); c.data[len] = '\0'; return c; -- cgit 0.0.5-2-1-g0f52 From c07bb95a832d041b8a61b48037a4e7a987314aca Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Thu, 6 Jul 2017 10:59:09 -0400 Subject: Use unsigned integer when shifting A UBSAN warning can be triggered when handling a long sequence of backticks: src/commonmark.c:98:20: runtime error: left shift of 1 by 31 places cannot be represented in type 'int' which can be triggered by: ``` | a | b | | --- | --** `c```````````````````````````````- | | c | `|d` \| e | ``` --- src/commonmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commonmark.c b/src/commonmark.c index a9ba566331..95a1ae5e54 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -93,7 +93,7 @@ static int shortest_unused_backtick_sequence(const char *code) { current++; } else { if (current > 0 && current < 32) { - used |= (1 << current); + used |= (1U << current); } current = 0; } -- cgit 0.0.5-2-1-g0f52 From 45f4fc9b917c11221aa03e70a41e3046335a235d Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Wed, 12 Jul 2017 18:37:48 +1000 Subject: > 32 nested balanced parens in a link is bananas --- src/inlines.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/inlines.c b/src/inlines.c index b864e129e6..c95809cb59 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -850,6 +850,8 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { else if (input->data[i] == '(') { ++nb_p; ++i; + if (nb_p > 32) + return -1; } else if (input->data[i] == ')') { if (nb_p == 0) break; -- cgit 0.0.5-2-1-g0f52 From 1ea9cd8ceaec181dd945d82af812a7712f232573 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 13 Jul 2017 08:52:37 +0200 Subject: Reverted mistaken fix to #193. Commit 14ea489f5dd6e3d07e23f104d6c9ce441d05751b --- src/scanners.c | 58 +++++++++++++++++++++++++++++++---------------------- src/scanners.re | 2 +- test/regression.txt | 2 +- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index c96490dda5..b312f66241 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -752,7 +752,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -839,7 +839,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= ' ') + if (yych <= '<') goto yy45; if (yych <= '>') goto yy85; @@ -7887,35 +7887,45 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238, 238, 238, 238, 239, + 0, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 238, 239, 234, 239, 239, 239, 239, 236, 239, 239, 239, - 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 238, 238, 174, 231, 239, 255, 255, 255, 255, 255, 255, + 239, 239, 239, 239, 238, 239, 234, 239, 239, 239, 239, 236, 239, 239, + 239, 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 238, 238, 174, 231, 239, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 239, 239, 111, 239, 239, 238, 239, 239, + 255, 255, 255, 255, 255, 255, 255, 239, 239, 111, 239, 239, 238, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, /* table 9 .. 11: 256 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 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, - 160, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 128, 0, - 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, + 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, 160, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 128, 0, 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 0, 0, 0, 0, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 0, 0, 0, 0, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; if (yych <= '>') { diff --git a/src/scanners.re b/src/scanners.re index a0650f2ba3..b20a9543c6 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -91,7 +91,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - scheme [:][^\x00-\x20>]*[>] { return (bufsize_t)(p - start); } + scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); } * { return 0; } */ } diff --git a/test/regression.txt b/test/regression.txt index 18b7d79d7a..a6669d0fea 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -81,7 +81,7 @@ Issue #193 - unescaped left angle brackets in link destination [a]: . -

                            a

                            +

                            a

                            ```````````````````````````````` Issue #192 - escaped spaces in link destination -- cgit 0.0.5-2-1-g0f52 From 7423feff96dc1331b3578440e417224e96dac448 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Mon, 17 Jul 2017 15:20:12 +1000 Subject: Fix URL scanner. --- src/inlines.c | 90 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index b864e129e6..f223baf03c 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -695,8 +695,8 @@ static cmark_node *handle_entity(subject *subj) { return make_str(subj->mem, cmark_chunk_buf_detach(&ent)); } -// Clean a URL: remove surrounding whitespace and surrounding <>, -// and remove \ that escape punctuation. +// Clean a URL: remove surrounding whitespace, and remove \ that escape +// punctuation. cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { cmark_strbuf buf = CMARK_BUF_INIT(mem); @@ -707,11 +707,7 @@ cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { return result; } - if (url->data[0] == '<' && url->data[url->len - 1] == '>') { - houdini_unescape_html_f(&buf, url->data + 1, url->len - 2); - } else { - houdini_unescape_html_f(&buf, url->data, url->len); - } + houdini_unescape_html_f(&buf, url->data, url->len); cmark_strbuf_unescape(&buf); return cmark_chunk_buf_detach(&buf); @@ -824,10 +820,43 @@ noMatch: subj->pos = startpos; // rewind return 0; } -static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { + +static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, cmark_chunk *output) { bufsize_t i = offset; size_t nb_p = 0; + while (i < input->len) { + if (input->data[i] == '\\' && + i + 1 < input-> len && + cmark_ispunct(input->data[i+1])) + i += 2; + else if (input->data[i] == '(') { + ++nb_p; + ++i; + } else if (input->data[i] == ')') { + if (nb_p == 0) + break; + --nb_p; + ++i; + } else if (cmark_isspace(input->data[i])) + break; + else + ++i; + } + + if (i >= input->len) + return -1; + + { + cmark_chunk result = {input->data + offset, i - offset, 0}; + *output = result; + } + return i - offset; +} + +static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, cmark_chunk *output) { + bufsize_t i = offset; + if (i < input->len && input->data[i] == '<') { ++i; while (i < input->len) { @@ -836,42 +865,30 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { break; } else if (input->data[i] == '\\') i += 2; - else if (cmark_isspace(input->data[i])) - return -1; + else if (cmark_isspace(input->data[i]) || input->data[i] == '<') + return manual_scan_link_url_2(input, offset, output); else ++i; } } else { - while (i < input->len) { - if (input->data[i] == '\\' && - i + 1 < input-> len && - cmark_ispunct(input->data[i+1])) - i += 2; - else if (input->data[i] == '(') { - ++nb_p; - ++i; - } else if (input->data[i] == ')') { - if (nb_p == 0) - break; - --nb_p; - ++i; - } else if (cmark_isspace(input->data[i])) - break; - else - ++i; - } + return manual_scan_link_url_2(input, offset, output); } if (i >= input->len) return -1; + + { + cmark_chunk result = {input->data + offset + 1, i - 2 - offset, 0}; + *output = result; + } return i - offset; } + // Return a link, an image, or a literal close bracket. static cmark_node *handle_close_bracket(subject *subj) { bufsize_t initial_pos, after_link_text_pos; - bufsize_t starturl, endurl, starttitle, endtitle, endall; - bufsize_t n; - bufsize_t sps; + bufsize_t endurl, starttitle, endtitle, endall; + bufsize_t sps, n; cmark_reference *ref = NULL; cmark_chunk url_chunk, title_chunk; cmark_chunk url, title; @@ -907,11 +924,10 @@ static cmark_node *handle_close_bracket(subject *subj) { // First, look for an inline link. if (peek_char(subj) == '(' && ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && - ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) { + ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps, &url_chunk)) > -1)) { // try to parse an explicit link: - starturl = subj->pos + 1 + sps; // after ( - endurl = starturl + n; + endurl = subj->pos + 1 + sps + n; starttitle = endurl + scan_spacechars(&subj->input, endurl); // ensure there are spaces btw url and title @@ -924,7 +940,6 @@ static cmark_node *handle_close_bracket(subject *subj) { if (peek_at(subj, endall) == ')') { subj->pos = endall + 1; - url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl); title_chunk = cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle); url = cmark_clean_url(subj->mem, &url_chunk); @@ -1213,9 +1228,8 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, // parse link url: spnl(&subj); - matchlen = manual_scan_link_url(&subj.input, subj.pos); - if (matchlen > 0) { - url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); + if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1 && + url.len > 0) { subj.pos += matchlen; } else { return 0; -- cgit 0.0.5-2-1-g0f52 From d695e66f6cae2f4c8e57783b7d689a9583dc100f Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Tue, 1 Aug 2017 19:38:08 +0700 Subject: Advertise --validate-utf8 in usage information This option was added in 04726a7 (Added `CMARK_OPT_VALIDATE_UTF8` option. - 2015-06-16) but not "documented". --- src/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.c b/src/main.c index 9482f68692..8942520b1f 100644 --- a/src/main.c +++ b/src/main.c @@ -32,6 +32,7 @@ void print_usage() { printf(" --nobreaks Render soft line breaks as spaces\n"); printf(" --safe Suppress raw HTML and dangerous URLs\n"); printf(" --smart Use smart punctuation\n"); + printf(" --validate-utf8 Replace UTF-8 invalid sequences with U+FFFD\n"); printf(" --help, -h Print usage information\n"); printf(" --version Print version\n"); } -- cgit 0.0.5-2-1-g0f52 From 022a55fda07b5eae3efb2a6edd26b0f407252b91 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 1 Aug 2017 12:06:07 -0700 Subject: Update spec. --- test/spec.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 64a60b19de..3c81d55246 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.27 -date: '2016-11-18' +version: 0.28 +date: '2017-08-01' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... -- cgit 0.0.5-2-1-g0f52 From 55d75efa93d28cb735bf4740fc4ce178177a248e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 1 Aug 2017 12:07:52 -0700 Subject: Bump version to 0.28.0. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 33180e535d..90a0f34398 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,8 @@ endif() set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 27) -set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION_MINOR 28) +set(PROJECT_VERSION_PATCH 0) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) -- cgit 0.0.5-2-1-g0f52 From 08962df9bd52f6e4314393a472c3e39aaa899d8e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 1 Aug 2017 12:33:47 -0700 Subject: Update changelog. --- changelog.txt | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/changelog.txt b/changelog.txt index 883ef6c200..7ba00ae418 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,127 @@ +[0.28] + + * Update spec. + * Use unsigned integer when shifting (Phil Turnbull). + Avoids a UBSAN warning which can be triggered when handling a + long sequence of backticks. + * Avoid memcpy'ing NULL pointers (Phil Turnbull). + Avoids a UBSAN warning when link title is empty string. + The length of the memcpy is zero so the NULL pointer is not + dereferenced but it is still undefined behaviour. + * DeMorgan simplification of some tests in emphasis parser. + This also brings the code into closer alignment with the wording + of the spec (see jgm/CommonMark#467). + * Fixed undefined shift in commonmark writer (#211). + Found by google/oss-fuzz: + . + * latex writer: fix memory overflow (#210). + We got an array overflow in enumerated lists nested more than + 10 deep with start number =/= 1. + This commit also ensures that we don't try to set `enum_` counters + that aren't defined by LaTeX (generally up to enumv). + Found by google/oss-fuzz: + . + * Check for NULL pointer in get_link_type (Phil Turnbull). + `echo '[](xx:)' | ./build/src/cmark -t latex` gave a + segfault. + * Move fuzzing dictionary into single file (Phil Turnbull). + This allows AFL and libFuzzer to use the same dictionary + * Reset bytes after UTF8 proc (Yuki Izumi, #206). + * Don't scan past an EOL (Yuki Izumi). + The existing negated character classes (`[^…]`) are careful to + always include` \x00` in the characters excluded, but these `.` + catch-alls can scan right past the terminating NUL placed + at the end of the buffer by `_scan_at`. As such, buffer + overruns can occur. Also, don't scan past a newline in HTML + block end scanners. + * Document cases where `get_` functions return `NULL` (#155). + E.g. `cmark_node_get_url` on a non-link or image. + * Properly handle backslashes in link destinations (#192). + Only ascii punctuation characters are escapable, per the spec. + * Fixed `cmark_node_get_list_start` to return 0 for bullet lists, + as documented (#202). + * Use `CMARK_NO_DELIM` for bullet lists (#201). + * Fixed code for freeing delimiter stack (#189). + * Removed abort outside of conditional (typo). + * Removed coercion in error message when aborting from buffer. + * Print message to stderr when we abort due to memory demands (#188). + * `libcmark.pc`: use `CMAKE_INSTALL_LIBDIR` (#185, Jens Petersen). + Needed for multilib distros like Fedora. + * Fixed buffer overflow error in `S_parser_feed` (#184). + The overflow could occur in the following condition: + the buffer ends with `\r` and the next memory address + contains `\n`. + * Update emphasis parsing for spec change. + Strong now goes inside Emph rather than the reverse, + when both scopes are possible. The code is much simpler. + This also avoids a spec inconsistency that cmark had previously: + `***hi***` became Strong (Emph "hi")) but + `***hi****` became Emph (Strong "hi")) "*" + * Fixes for the LaTeX renderer (#182, Doeme) + + Don't double-output the link in latex-rendering. + + Prevent ligatures in dashes sensibly when rendering latex. + `\-` is a hyphenation, so it doesn't get displayed at all. + * Added a test for NULL when freeing `subj->last_delim`. + * Cleaned up setting of lower bounds for openers. + We now use a much smaller array. + * Fix #178, quadratic parsing bug. Add pathological test. + * Slight improvement of clarity of logic in emph matching. + * Fix "multiple of 3" determination in emph/strong parsing. + We need to store the length of the original delimiter run, + instead of using the length of the remaining delimiters + after some have been subtracted. Test case: + `a***b* c*`. Thanks to Raph Levin for reporting. + * Correctly initialize chunk in S_process_line (Nick Wellnhofer, #170). + The `alloc` member wasn't initialized. This also allows to add an + assertion in `chunk_rtrim` which doesn't work for alloced chunks. + * Added 'make newbench'. + * `scanners.c` generated with re2c 0.16 (68K smaller!). + * `scanners.re` - fixed warnings; use `*` for fallback. + * Fixed some warnings in `scanners.re`. + * Update CaseFolding to latest (Kevin Wojniak, #168). + * Allow balanced nested parens in link destinations (Yuki Izumi, #166) + * Allocate enough bytes for backticks array. + * Inlines: Ensure that the delimiter stack is freed in subject. + * Fixed pathological cases with backtick code spans: + + - Removed recursion in scan_to_closing_backticks + - Added an array of pointers to potential backtick closers + to subject + - This array is used to avoid traversing the subject again + when we've already seen all the potential backtick closers. + - Added a max bound of 1000 for backtick code span delimiters. + - This helps with pathological cases like: + + x + x ` + x `` + x ``` + x ```` + ... + + - Added pathological test case. + + Thanks to Martin Mitáš for identifying the problem and for + discussion of solutions. + * Remove redundant cmake_minimum_required (#163, @kainjow). + * Make shared and static libraries optional (Azamat H. Hackimov). + Now you can enable/disable compilation and installation targets for + shared and static libraries via `-DCMARK_SHARED=ON/OFF` and + `-DCMARK_STATIC=ON/OFF`. + * Added support for built-in `${LIB_SUFFIX}` feature (Azamat H. + Hackimov). Replaced `${LIB_INSTALL_DIR}` option with built-in + `${LIB_SUFFIX}` for installing for 32/64-bit systems. Normally, + CMake will set `${LIB_SUFFIX}` automatically for required enviroment. + If you have any issues with it, you can override this option with + `-DLIB_SUFFIX=64` or `-DLIB_SUFFIX=""` during configuration. + * Add Makefile target and harness to fuzz with libFuzzer (Phil Turnbull). + This can be run locally with `make libFuzzer` but the harness will be + integrated into oss-fuzz for large-scale fuzzing. + * Makefile: use warnings with re2c. + * README: Add link to Python wrapper, prettify languages list + (Pavlo Kpyshin). + * README: Add link to cmark-scala (Tim Nieradzik, #196) + [0.27.1] * Set policy for CMP0063 to avoid a warning (#162). -- cgit 0.0.5-2-1-g0f52 From 8982a56254ab72b8a7209554c34bc11546660c7c Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 1 Aug 2017 15:51:46 -0700 Subject: Update changelog. --- changelog.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/changelog.txt b/changelog.txt index 7ba00ae418..390312a474 100644 --- a/changelog.txt +++ b/changelog.txt @@ -117,6 +117,8 @@ * Add Makefile target and harness to fuzz with libFuzzer (Phil Turnbull). This can be run locally with `make libFuzzer` but the harness will be integrated into oss-fuzz for large-scale fuzzing. + * Advertise `--validate-utf8` in usage information + (Nguyễn Thái Ngọc Duy). * Makefile: use warnings with re2c. * README: Add link to Python wrapper, prettify languages list (Pavlo Kpyshin). -- cgit 0.0.5-2-1-g0f52 From 4c670c9778687751bac82d91edb2fed9b39d8980 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 1 Aug 2017 16:31:16 -0700 Subject: Update spec. --- test/spec.txt | 76 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 13 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 3c81d55246..9fd5841397 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1645,6 +1645,15 @@ With tildes:
                            ```````````````````````````````` +Fewer than three backticks is not enough: + +```````````````````````````````` example +`` +foo +`` +. +

                            foo

                            +```````````````````````````````` The closing code fence must use the same character as the opening fence: @@ -2033,6 +2042,37 @@ or [closing tag] (with any [tag name] other than `script`, or the end of the line.\ **End condition:** line is followed by a [blank line]. +HTML blocks continue until they are closed by their appropriate +[end condition], or the last line of the document or other [container block]. +This means any HTML **within an HTML block** that might otherwise be recognised +as a start condition will be ignored by the parser and passed through as-is, +without changing the parser's state. + +For instance, `
                            ` within a HTML block started by `` will not affect
                            +the parser state; as the HTML block was started in by start condition 6, it
                            +will end at any blank line. This can be surprising:
                            +
                            +```````````````````````````````` example
                            +
                            +
                            +**Hello**,
                            +
                            +_world_.
                            +
                            +
                            +. +
                            +
                            +**Hello**,
                            +

                            world. +

                            +
                            +```````````````````````````````` + +In this case, the HTML block is terminated by the newline — the `**hello**` +text remains verbatim — and regular parsing resumes, with a paragraph, +emphasised `world` and inline and block HTML following. + All types of [HTML blocks] except type 7 may interrupt a paragraph. Blocks of type 7 may not interrupt a paragraph. (This restriction is intended to prevent unwanted interpretation @@ -3639,11 +3679,15 @@ The following rules define [list items]: If the list item is ordered, then it is also assigned a start number, based on the ordered list marker. - Exceptions: When the first list item in a [list] interrupts - a paragraph---that is, when it starts on a line that would - otherwise count as [paragraph continuation text]---then (a) - the lines *Ls* must not begin with a blank line, and (b) if - the list item is ordered, the start number must be 1. + Exceptions: + + 1. When the first list item in a [list] interrupts + a paragraph---that is, when it starts on a line that would + otherwise count as [paragraph continuation text]---then (a) + the lines *Ls* must not begin with a blank line, and (b) if + the list item is ordered, the start number must be 1. + 2. If any line is a [thematic break][thematic breaks] then + that line is not a list item. For example, let *Ls* be the lines @@ -5856,8 +5900,9 @@ for efficient parsing strategies that do not backtrack. First, some definitions. A [delimiter run](@) is either a sequence of one or more `*` characters that is not preceded or -followed by a `*` character, or a sequence of one or more `_` -characters that is not preceded or followed by a `_` character. +followed by a non-backslash-escaped `*` character, or a sequence +of one or more `_` characters that is not preceded or followed by +a non-backslash-escaped `_` character. A [left-flanking delimiter run](@) is a [delimiter run] that is (a) not followed by [Unicode whitespace], @@ -7159,7 +7204,9 @@ A [link destination](@) consists of either - a nonempty sequence of characters that does not include ASCII space or control characters, and includes parentheses only if (a) they are backslash-escaped or (b) they are part of - a balanced pair of unescaped parentheses. + a balanced pair of unescaped parentheses. (Implementations + may impose limits on parentheses nesting to avoid performance + issues, but at least three levels of nesting should be supported.) A [link title](@) consists of either @@ -7265,7 +7312,7 @@ Parentheses inside the link destination may be escaped:

                            link

                            ```````````````````````````````` -Any number parentheses are allowed without escaping, as long as they are +Any number of parentheses are allowed without escaping, as long as they are balanced: ```````````````````````````````` example @@ -7571,13 +7618,16 @@ that [matches] a [link reference definition] elsewhere in the document. A [link label](@) begins with a left bracket (`[`) and ends with the first right bracket (`]`) that is not backslash-escaped. Between these brackets there must be at least one [non-whitespace character]. -Unescaped square bracket characters are not allowed in -[link labels]. A link label can have at most 999 -characters inside the square brackets. +Unescaped square bracket characters are not allowed inside the +opening and closing square brackets of [link labels]. A link +label can have at most 999 characters inside the square +brackets. One label [matches](@) another just in case their normalized forms are equal. To normalize a -label, perform the *Unicode case fold* and collapse consecutive internal +label, strip off the opening and closing brackets, +perform the *Unicode case fold*, strip leading and trailing +[whitespace] and collapse consecutive internal [whitespace] to a single space. If there are multiple matching reference link definitions, the one that comes first in the document is used. (It is desirable in such cases to emit a warning.) -- cgit 0.0.5-2-1-g0f52 From 7c5f2bdf9e946a7a6abed6fc44e2ebd477b21b3f Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 2 Aug 2017 14:06:18 +0300 Subject: Fix typo --- changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 390312a474..e51aceca7a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -121,7 +121,7 @@ (Nguyễn Thái Ngọc Duy). * Makefile: use warnings with re2c. * README: Add link to Python wrapper, prettify languages list - (Pavlo Kpyshin). + (Pavlo Kapyshin). * README: Add link to cmark-scala (Tim Nieradzik, #196) [0.27.1] -- cgit 0.0.5-2-1-g0f52 From 350d145c84f1624cdbf7560e6780bc2c73d2843a Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Thu, 3 Aug 2017 18:52:47 +0700 Subject: Update README.md, replace 'make astyle' with 'make format' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The former has been replaced by the latter since 62cb38b (Use clang-format, llvm style, for formatting. - 2015-07-27) dòng được --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c9dd69db5..6b0c00329f 100644 --- a/README.md +++ b/README.md @@ -110,9 +110,9 @@ To run a test for memory leaks using `valgrind`: make leakcheck -To reformat source code using `astyle`: +To reformat source code using `clang-format`: - make astyle + make format To run a "fuzz test" against ten long randomly generated inputs: -- cgit 0.0.5-2-1-g0f52 From 1a4a339d49c17768c2c650bb8f8644c556603978 Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Thu, 3 Aug 2017 18:55:46 +0700 Subject: Reformat source code with 'make format' --- src/inlines.c | 11 +++++++---- src/latex.c | 22 +++++++++++----------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index f223baf03c..6bf82e2da6 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -615,7 +615,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, cmark_node *tmp, *tmpnext, *emph; // calculate the actual number of characters used from this closer - use_delims = (closer_num_chars >= 2 && opener_num_chars >=2) ? 2 : 1; + use_delims = (closer_num_chars >= 2 && opener_num_chars >= 2) ? 2 : 1; // remove used characters from associated inlines. opener_num_chars -= use_delims; @@ -821,7 +821,8 @@ noMatch: return 0; } -static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, cmark_chunk *output) { +static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, + cmark_chunk *output) { bufsize_t i = offset; size_t nb_p = 0; @@ -854,7 +855,8 @@ static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, cm return i - offset; } -static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, cmark_chunk *output) { +static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, + cmark_chunk *output) { bufsize_t i = offset; if (i < input->len && input->data[i] == '<') { @@ -924,7 +926,8 @@ static cmark_node *handle_close_bracket(subject *subj) { // First, look for an inline link. if (peek_char(subj) == '(' && ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && - ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps, &url_chunk)) > -1)) { + ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps, + &url_chunk)) > -1)) { // try to parse an explicit link: endurl = subj->pos + 1 + sps + n; diff --git a/src/latex.c b/src/latex.c index f372a132a8..0d9517d199 100644 --- a/src/latex.c +++ b/src/latex.c @@ -252,24 +252,24 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, CR(); list_number = cmark_node_get_list_start(node); if (list_number > 1) { - enumlevel = S_get_enumlevel(node); - // latex normally supports only five levels - if (enumlevel >= 1 && enumlevel <= 5) { + enumlevel = S_get_enumlevel(node); + // latex normally supports only five levels + if (enumlevel >= 1 && enumlevel <= 5) { snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d", list_number); LIT("\\setcounter{enum"); - switch(enumlevel) { - case 1: LIT("i"); break; - case 2: LIT("ii"); break; - case 3: LIT("iii"); break; - case 4: LIT("iv"); break; - case 5: LIT("v"); break; - default: LIT("i"); break; + switch (enumlevel) { + case 1: LIT("i"); break; + case 2: LIT("ii"); break; + case 3: LIT("iii"); break; + case 4: LIT("iv"); break; + case 5: LIT("v"); break; + default: LIT("i"); break; } LIT("}{"); OUT(list_number_string, false, NORMAL); LIT("}"); - } + } CR(); } } else { -- cgit 0.0.5-2-1-g0f52 From 919cdb2c583163411b3b15b2eae0ce72cf2d7981 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Wed, 9 Aug 2017 15:56:21 +1000 Subject: Add sourcepos info for inlines --- api_test/main.c | 97 ++++++++++++++++++++++++++++++++++++++++++++-- src/inlines.c | 118 ++++++++++++++++++++++++++++++++++---------------------- src/iterator.c | 1 + 3 files changed, 167 insertions(+), 49 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index d7202343b8..08f3c98cde 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -552,9 +552,9 @@ static void render_xml(test_batch_runner *runner) { STR_EQ(runner, xml, "\n" "\n" "\n" - " foo \n" - " \n" - " bar\n" + " foo \n" + " \n" + " bar\n" " \n" "\n", "render first paragraph with source pos"); @@ -883,6 +883,95 @@ static void test_feed_across_line_ending(test_batch_runner *runner) { cmark_node_free(document); } +static void source_pos(test_batch_runner *runner) { + static const char markdown[] = + "Hi *there*.\n" + "\n" + "Hello “ \n" + "there `hi` -- [okay](www.google.com (ok)).\n" + "\n" + "> 1. Okay.\n" + "> Sure.\n" + ">\n" + "> 2. Yes, okay.\n" + "> ![ok](hi \"yes\")\n"; + + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " \n" + " Hi \n" + " \n" + " there\n" + " \n" + " .\n" + " \n" + " \n" + " Hello “ \n" + " \n" + " http://www.google.com\n" + " \n" + " \n" + " there \n" + " hi\n" + " -- \n" + " \n" + " okay\n" + " \n" + " .\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " Okay.\n" + " \n" + " Sure.\n" + " \n" + " \n" + " \n" + " \n" + " Yes, okay.\n" + " \n" + " \n" + " ok\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n", + "sourcepos are as expected"); + free(xml); + cmark_node_free(doc); +} + +static void ref_source_pos(test_batch_runner *runner) { + static const char markdown[] = + "Let's try [reference] links.\n" + "\n" + "[reference]: https://github.com (GitHub)\n"; + + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " \n" + " Let's try \n" + " \n" + " reference\n" + " \n" + " links.\n" + " \n" + "\n", + "sourcepos are as expected"); + free(xml); + cmark_node_free(doc); +} + int main() { int retval; test_batch_runner *runner = test_batch_runner_new(); @@ -908,6 +997,8 @@ int main() { test_cplusplus(runner); test_safe(runner); test_feed_across_line_ending(runner); + source_pos(runner); + ref_source_pos(runner); test_print_summary(runner); retval = test_ok(runner) ? 0 : 1; diff --git a/src/inlines.c b/src/inlines.c index 6bf82e2da6..3f1b9edc43 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -22,9 +22,9 @@ static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98"; static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; // Macros for creating various kinds of simple. -#define make_str(mem, s) make_literal(mem, CMARK_NODE_TEXT, s) -#define make_code(mem, s) make_literal(mem, CMARK_NODE_CODE, s) -#define make_raw_html(mem, s) make_literal(mem, CMARK_NODE_HTML_INLINE, s) +#define make_str(subj, sc, ec, s) make_literal(subj, CMARK_NODE_TEXT, sc, ec, s) +#define make_code(subj, sc, ec, s) make_literal(subj, CMARK_NODE_CODE, sc, ec, s) +#define make_raw_html(subj, sc, ec, s) make_literal(subj, CMARK_NODE_HTML_INLINE, sc, ec, s) #define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK) #define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK) #define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH) @@ -55,7 +55,10 @@ typedef struct bracket { typedef struct { cmark_mem *mem; cmark_chunk input; + int line; bufsize_t pos; + int block_offset; + int column_offset; cmark_reference_map *refmap; delimiter *last_delim; bracket *last_bracket; @@ -72,17 +75,22 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, static int parse_inline(subject *subj, cmark_node *parent, int options); -static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap); +static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e, + cmark_strbuf *buffer, cmark_reference_map *refmap); static bufsize_t subject_find_special_char(subject *subj, int options); // Create an inline with a literal string value. -static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t, +static CMARK_INLINE cmark_node *make_literal(subject *subj, cmark_node_type t, + int start_column, int end_column, cmark_chunk s) { - cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); - cmark_strbuf_init(mem, &e->content, 0); - e->type = t; + cmark_node *e = (cmark_node *)subj->mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(subj->mem, &e->content, 0); + e->type = (uint16_t)t; e->as.literal = s; + e->start_line = e->end_line = subj->line; + // columns are 1 based. + e->start_column = start_column + 1 + subj->column_offset + subj->block_offset; + e->end_column = end_column + 1 + subj->column_offset + subj->block_offset; return e; } @@ -95,14 +103,15 @@ static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) { } // Like make_str, but parses entities. -static cmark_node *make_str_with_entities(cmark_mem *mem, +static cmark_node *make_str_with_entities(subject *subj, + int start_column, int end_column, cmark_chunk *content) { - cmark_strbuf unescaped = CMARK_BUF_INIT(mem); + cmark_strbuf unescaped = CMARK_BUF_INIT(subj->mem); if (houdini_unescape_html(&unescaped, content->data, content->len)) { - return make_str(mem, cmark_chunk_buf_detach(&unescaped)); + return make_str(subj, start_column, end_column, cmark_chunk_buf_detach(&unescaped)); } else { - return make_str(mem, *content); + return make_str(subj, start_column, end_column, *content); } } @@ -140,23 +149,30 @@ static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, return cmark_chunk_buf_detach(&buf); } -static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, - int is_email) { - cmark_node *link = make_simple(mem, CMARK_NODE_LINK); - link->as.link.url = cmark_clean_autolink(mem, &url, is_email); +static CMARK_INLINE cmark_node *make_autolink(subject *subj, + int start_column, int end_column, + cmark_chunk url, int is_email) { + cmark_node *link = make_simple(subj->mem, CMARK_NODE_LINK); + link->as.link.url = cmark_clean_autolink(subj->mem, &url, is_email); link->as.link.title = cmark_chunk_literal(""); - cmark_node_append_child(link, make_str_with_entities(mem, &url)); + link->start_line = link->end_line = subj->line; + link->start_column = start_column + 1; + link->end_column = end_column + 1; + cmark_node_append_child(link, make_str_with_entities(subj, start_column + 1, end_column - 1, &url)); return link; } -static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, - cmark_reference_map *refmap) { +static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e, + cmark_strbuf *buffer, cmark_reference_map *refmap) { int i; e->mem = mem; e->input.data = buffer->ptr; e->input.len = buffer->size; e->input.alloc = 0; + e->line = line_number; e->pos = 0; + e->block_offset = block_offset; + e->column_offset = 0; e->refmap = refmap; e->last_delim = NULL; e->last_bracket = NULL; @@ -277,7 +293,7 @@ static cmark_node *handle_backticks(subject *subj) { if (endpos == 0) { // not found subj->pos = startpos; // rewind - return make_str(subj->mem, openticks); + return make_str(subj, subj->pos, subj->pos, openticks); } else { cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); @@ -286,7 +302,7 @@ static cmark_node *handle_backticks(subject *subj) { cmark_strbuf_trim(&buf); cmark_strbuf_normalize_whitespace(&buf); - return make_code(subj->mem, cmark_chunk_buf_detach(&buf)); + return make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf)); } } @@ -443,7 +459,7 @@ static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); } - inl_text = make_str(subj->mem, contents); + inl_text = make_str(subj, subj->pos - numdelims, subj->pos - 1, contents); if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { push_delimiter(subj, c, can_open, can_close, inl_text); @@ -459,7 +475,7 @@ static cmark_node *handle_hyphen(subject *subj, bool smart) { advance(subj); if (!smart || peek_char(subj) != '-') { - return make_str(subj->mem, cmark_chunk_literal("-")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("-")); } while (smart && peek_char(subj) == '-') { @@ -492,7 +508,7 @@ static cmark_node *handle_hyphen(subject *subj, bool smart) { cmark_strbuf_puts(&buf, ENDASH); } - return make_str(subj->mem, cmark_chunk_buf_detach(&buf)); + return make_str(subj, startpos, subj->pos - 1, cmark_chunk_buf_detach(&buf)); } // Assumes we have a period at the current position. @@ -502,12 +518,12 @@ static cmark_node *handle_period(subject *subj, bool smart) { advance(subj); if (peek_char(subj) == '.') { advance(subj); - return make_str(subj->mem, cmark_chunk_literal(ELLIPSES)); + return make_str(subj, subj->pos - 3, subj->pos - 1, cmark_chunk_literal(ELLIPSES)); } else { - return make_str(subj->mem, cmark_chunk_literal("..")); + return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal("..")); } } else { - return make_str(subj->mem, cmark_chunk_literal(".")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal(".")); } } @@ -643,6 +659,10 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, } cmark_node_insert_after(opener_inl, emph); + emph->start_line = emph->end_line = subj->line; + emph->start_column = opener_inl->start_column + subj->column_offset; + emph->end_column = closer_inl->end_column + subj->column_offset; + // if opener has 0 characters, remove it and its associated inline if (opener_num_chars == 0) { cmark_node_free(opener_inl); @@ -669,11 +689,11 @@ static cmark_node *handle_backslash(subject *subj) { if (cmark_ispunct( nextchar)) { // only ascii symbols and newline can be escaped advance(subj); - return make_str(subj->mem, cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); + return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); } else if (!is_eof(subj) && skip_line_end(subj)) { return make_linebreak(subj->mem); } else { - return make_str(subj->mem, cmark_chunk_literal("\\")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("\\")); } } @@ -689,10 +709,10 @@ static cmark_node *handle_entity(subject *subj) { subj->input.len - subj->pos); if (len == 0) - return make_str(subj->mem, cmark_chunk_literal("&")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("&")); subj->pos += len; - return make_str(subj->mem, cmark_chunk_buf_detach(&ent)); + return make_str(subj, subj->pos - 1 - len, subj->pos - 1, cmark_chunk_buf_detach(&ent)); } // Clean a URL: remove surrounding whitespace, and remove \ that escape @@ -751,7 +771,7 @@ static cmark_node *handle_pointy_brace(subject *subj) { contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); subj->pos += matchlen; - return make_autolink(subj->mem, contents, 0); + return make_autolink(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 0); } // next try to match an email autolink @@ -760,7 +780,7 @@ static cmark_node *handle_pointy_brace(subject *subj) { contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); subj->pos += matchlen; - return make_autolink(subj->mem, contents, 1); + return make_autolink(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 1); } // finally, try to match an html tag @@ -768,11 +788,11 @@ static cmark_node *handle_pointy_brace(subject *subj) { if (matchlen > 0) { contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); subj->pos += matchlen; - return make_raw_html(subj->mem, contents); + return make_raw_html(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents); } // if nothing matches, just return the opening <: - return make_str(subj->mem, cmark_chunk_literal("<")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("<")); } // Parse a link label. Returns 1 if successful. @@ -908,13 +928,13 @@ static cmark_node *handle_close_bracket(subject *subj) { opener = subj->last_bracket; if (opener == NULL) { - return make_str(subj->mem, cmark_chunk_literal("]")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]")); } if (!opener->active) { // take delimiter off stack pop_bracket(subj); - return make_str(subj->mem, cmark_chunk_literal("]")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]")); } // If we got here, we matched a potential link/image text. @@ -991,12 +1011,15 @@ noMatch: // If we fall through to here, it means we didn't match a link: pop_bracket(subj); // remove this opener from delimiter list subj->pos = initial_pos; - return make_str(subj->mem, cmark_chunk_literal("]")); + return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]")); match: inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK); inl->as.link.url = url; inl->as.link.title = title; + inl->start_line = inl->end_line = subj->line; + inl->start_column = opener->inl_text->start_column; + inl->end_column = subj->pos + subj->column_offset + subj->block_offset; cmark_node_insert_before(opener->inl_text, inl); // Add link text: tmp = opener->inl_text->next; @@ -1043,6 +1066,8 @@ static cmark_node *handle_newline(subject *subj) { if (peek_at(subj, subj->pos) == '\n') { advance(subj); } + ++subj->line; + subj->column_offset = -subj->pos; // skip spaces at beginning of line skip_spaces(subj); if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && @@ -1102,7 +1127,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { cmark_node *new_inl = NULL; cmark_chunk contents; unsigned char c; - bufsize_t endpos; + bufsize_t startpos, endpos; c = peek_char(subj); if (c == 0) { return 0; @@ -1138,7 +1163,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { break; case '[': advance(subj); - new_inl = make_str(subj->mem, cmark_chunk_literal("[")); + new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("[")); push_bracket(subj, false, new_inl); break; case ']': @@ -1148,15 +1173,16 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { advance(subj); if (peek_char(subj) == '[') { advance(subj); - new_inl = make_str(subj->mem, cmark_chunk_literal("![")); + new_inl = make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal("![")); push_bracket(subj, true, new_inl); } else { - new_inl = make_str(subj->mem, cmark_chunk_literal("!")); + new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("!")); } break; default: endpos = subject_find_special_char(subj, options); contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos); + startpos = subj->pos; subj->pos = endpos; // if we're at a newline, strip trailing spaces. @@ -1164,7 +1190,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { cmark_chunk_rtrim(&contents); } - new_inl = make_str(subj->mem, contents); + new_inl = make_str(subj, startpos, endpos - 1, contents); } if (new_inl != NULL) { cmark_node_append_child(parent, new_inl); @@ -1177,7 +1203,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options) { subject subj; - subject_from_buf(mem, &subj, &parent->content, refmap); + subject_from_buf(mem, parent->start_line, parent->start_column - 1, &subj, &parent->content, refmap); cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) @@ -1216,7 +1242,7 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, bufsize_t matchlen = 0; bufsize_t beforetitle; - subject_from_buf(mem, &subj, input, NULL); + subject_from_buf(mem, -1, 0, &subj, input, NULL); // parse label: if (!link_label(&subj, &lab) || lab.len == 0) diff --git a/src/iterator.c b/src/iterator.c index 24423a217f..f5cd80205d 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -106,6 +106,7 @@ void cmark_consolidate_text_nodes(cmark_node *root) { while (tmp && tmp->type == CMARK_NODE_TEXT) { cmark_iter_next(iter); // advance pointer cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len); + cur->end_column = tmp->end_column; next = tmp->next; cmark_node_free(tmp); tmp = next; -- cgit 0.0.5-2-1-g0f52 From b9c7a496ba7dd9c3495bae2ff2855899e47b245d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 9 Aug 2017 10:54:29 -0700 Subject: --smart: open quote can never occur right after `]` or `)`. Closes #227. --- src/inlines.c | 3 ++- test/smart_punct.txt | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index 6bf82e2da6..2d7f385050 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -345,7 +345,8 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open, *can_close = right_flanking && (!left_flanking || cmark_utf8proc_is_punctuation(after_char)); } else if (c == '\'' || c == '"') { - *can_open = left_flanking && !right_flanking; + *can_open = left_flanking && !right_flanking && + before_char != ']' && before_char != ')'; *can_close = right_flanking; } else { *can_open = left_flanking; diff --git a/test/smart_punct.txt b/test/smart_punct.txt index 3522c94c28..fd55e6227b 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -78,6 +78,15 @@ left double quote, to facilitate this style:

                            “Second paragraph by same speaker, in fiction.”

                            ```````````````````````````````` +A quote following a `]` or `)` character cannot +be an open quote: + +```````````````````````````````` example +[a]'s b' +. +

                            [a]’s b’

                            +```````````````````````````````` + Quotes that are escaped come out as literal straight quotes: -- cgit 0.0.5-2-1-g0f52 From e22d1b42ce7f860c51c261ea9d42c0b77245fde5 Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Wed, 9 Aug 2017 17:13:16 +1000 Subject: Fix inlines spanning newlines, text in non-para --- api_test/main.c | 14 +++++----- src/blocks.c | 1 + src/inlines.c | 83 ++++++++++++++++++++++++++++++++++++++++++--------------- src/node.h | 1 + 4 files changed, 71 insertions(+), 28 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 08f3c98cde..c30dc71ac2 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -885,7 +885,7 @@ static void test_feed_across_line_ending(test_batch_runner *runner) { static void source_pos(test_batch_runner *runner) { static const char markdown[] = - "Hi *there*.\n" + "# Hi *there*.\n" "\n" "Hello “ \n" "there `hi` -- [okay](www.google.com (ok)).\n" @@ -901,13 +901,13 @@ static void source_pos(test_batch_runner *runner) { STR_EQ(runner, xml, "\n" "\n" "\n" - " \n" - " Hi \n" - " \n" - " there\n" + " \n" + " Hi \n" + " \n" + " there\n" " \n" - " .\n" - " \n" + " .\n" + " \n" " \n" " Hello “ \n" " \n" diff --git a/src/blocks.c b/src/blocks.c index 5a293b2e09..acdbb345e8 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -900,6 +900,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, (*container)->as.heading.level = level; (*container)->as.heading.setext = false; + (*container)->internal_offset = matched; } else if (!indented && (matched = scan_open_code_fence( input, parser->first_nonspace))) { diff --git a/src/inlines.c b/src/inlines.c index 3f1b9edc43..07f370970f 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -239,6 +239,43 @@ static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) { return cmark_chunk_dup(&subj->input, startpos, len); } +// Return the number of newlines in a given span of text in a subject. If +// the number is greater than zero, also return the number of characters +// between the last newline and the end of the span in `since_newline`. +static int count_newlines(subject *subj, bufsize_t from, bufsize_t len, int *since_newline) { + int nls = 0; + int since_nl = 0; + + while (len--) { + if (subj->input.data[from++] == '\n') { + ++nls; + since_nl = 0; + } else { + ++since_nl; + } + } + + if (!nls) + return 0; + + *since_newline = since_nl; + return nls; +} + +// Adjust `node`'s `end_line`, `end_column`, and `subj`'s `line` and +// `column_offset` according to the number of newlines in a just-matched span +// of text in `subj`. +static void adjust_subj_node_newlines(subject *subj, cmark_node *node, int matchlen, int extra) { + int since_newline; + int newlines = count_newlines(subj, subj->pos - matchlen - extra, matchlen, &since_newline); + if (newlines) { + subj->line += newlines; + node->end_line += newlines; + node->end_column = since_newline; + subj->column_offset = -subj->pos + since_newline + extra; + } +} + // Try to process a backtick code span that began with a // span of ticks of length openticklength length (already // parsed). Return 0 if you don't find matching closing @@ -302,7 +339,9 @@ static cmark_node *handle_backticks(subject *subj) { cmark_strbuf_trim(&buf); cmark_strbuf_normalize_whitespace(&buf); - return make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf)); + cmark_node *node = make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf)); + adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len); + return node; } } @@ -727,7 +766,7 @@ cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { return result; } - houdini_unescape_html_f(&buf, url->data, url->len); + houdini_unescape_html_f(&buf, url->data, url->len); cmark_strbuf_unescape(&buf); return cmark_chunk_buf_detach(&buf); @@ -788,7 +827,9 @@ static cmark_node *handle_pointy_brace(subject *subj) { if (matchlen > 0) { contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); subj->pos += matchlen; - return make_raw_html(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents); + cmark_node *node = make_raw_html(subj, subj->pos - matchlen - 1, subj->pos - 1, contents); + adjust_subj_node_newlines(subj, node, matchlen, 1); + return node; } // if nothing matches, just return the opening <: @@ -846,24 +887,24 @@ static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, bufsize_t i = offset; size_t nb_p = 0; - while (i < input->len) { - if (input->data[i] == '\\' && - i + 1 < input-> len && - cmark_ispunct(input->data[i+1])) - i += 2; - else if (input->data[i] == '(') { - ++nb_p; - ++i; - } else if (input->data[i] == ')') { - if (nb_p == 0) + while (i < input->len) { + if (input->data[i] == '\\' && + i + 1 < input-> len && + cmark_ispunct(input->data[i+1])) + i += 2; + else if (input->data[i] == '(') { + ++nb_p; + ++i; + } else if (input->data[i] == ')') { + if (nb_p == 0) + break; + --nb_p; + ++i; + } else if (cmark_isspace(input->data[i])) break; - --nb_p; - ++i; - } else if (cmark_isspace(input->data[i])) - break; - else - ++i; - } + else + ++i; + } if (i >= input->len) return -1; @@ -1203,7 +1244,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options) { subject subj; - subject_from_buf(mem, parent->start_line, parent->start_column - 1, &subj, &parent->content, refmap); + subject_from_buf(mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &parent->content, refmap); cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) diff --git a/src/node.h b/src/node.h index 65d857f0b3..13901babef 100644 --- a/src/node.h +++ b/src/node.h @@ -66,6 +66,7 @@ struct cmark_node { int start_column; int end_line; int end_column; + int internal_offset; uint16_t type; uint16_t flags; -- cgit 0.0.5-2-1-g0f52 From 9853666272e87c83050f7e30ae4b3ed9890c8c4f Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Thu, 10 Aug 2017 13:39:36 +1000 Subject: Skip sourcepos tracking if disabled --- src/inlines.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 07f370970f..21b11e1f23 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -265,7 +265,11 @@ static int count_newlines(subject *subj, bufsize_t from, bufsize_t len, int *sin // Adjust `node`'s `end_line`, `end_column`, and `subj`'s `line` and // `column_offset` according to the number of newlines in a just-matched span // of text in `subj`. -static void adjust_subj_node_newlines(subject *subj, cmark_node *node, int matchlen, int extra) { +static void adjust_subj_node_newlines(subject *subj, cmark_node *node, int matchlen, int extra, int options) { + if (!(options & CMARK_OPT_SOURCEPOS)) { + return; + } + int since_newline; int newlines = count_newlines(subj, subj->pos - matchlen - extra, matchlen, &since_newline); if (newlines) { @@ -323,7 +327,7 @@ static bufsize_t scan_to_closing_backticks(subject *subj, // Parse backtick code section or raw backticks, return an inline. // Assumes that the subject has a backtick at the current position. -static cmark_node *handle_backticks(subject *subj) { +static cmark_node *handle_backticks(subject *subj, int options) { cmark_chunk openticks = take_while(subj, isbacktick); bufsize_t startpos = subj->pos; bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len); @@ -340,7 +344,7 @@ static cmark_node *handle_backticks(subject *subj) { cmark_strbuf_normalize_whitespace(&buf); cmark_node *node = make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf)); - adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len); + adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len, options); return node; } } @@ -798,7 +802,7 @@ cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) { // Parse an autolink or HTML tag. // Assumes the subject has a '<' character at the current position. -static cmark_node *handle_pointy_brace(subject *subj) { +static cmark_node *handle_pointy_brace(subject *subj, int options) { bufsize_t matchlen = 0; cmark_chunk contents; @@ -828,7 +832,7 @@ static cmark_node *handle_pointy_brace(subject *subj) { contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); subj->pos += matchlen; cmark_node *node = make_raw_html(subj, subj->pos - matchlen - 1, subj->pos - 1, contents); - adjust_subj_node_newlines(subj, node, matchlen, 1); + adjust_subj_node_newlines(subj, node, matchlen, 1, options); return node; } @@ -1179,7 +1183,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { new_inl = handle_newline(subj); break; case '`': - new_inl = handle_backticks(subj); + new_inl = handle_backticks(subj, options); break; case '\\': new_inl = handle_backslash(subj); @@ -1188,7 +1192,7 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { new_inl = handle_entity(subj); break; case '<': - new_inl = handle_pointy_brace(subj); + new_inl = handle_pointy_brace(subj, options); break; case '*': case '_': -- cgit 0.0.5-2-1-g0f52 From 99c5675e2542221cae33cea063f34332ee443cb3 Mon Sep 17 00:00:00 2001 From: Martin Mitas Date: Wed, 16 Aug 2017 18:00:53 +0200 Subject: Add more pathological tests. These tests target the issues #214, #218, #220. --- test/pathological_tests.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 77e4165c65..6883c104a4 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -58,7 +58,16 @@ pathological = { re.compile("abc\ufffd?de\ufffd?")), "backticks": ("".join(map(lambda x: ("e" + "`" * x), range(1,10000))), - re.compile("^

                            [e`]*

                            \n$")) + re.compile("^

                            [e`]*

                            \n$")), + "unclosed links A": + ("[a]( Date: Thu, 7 Sep 2017 08:06:11 -0700 Subject: blocks: Fix quadratic behavior in `finalize` --- src/blocks.c | 12 ++++++++---- src/inlines.c | 49 ++++++++++++++++++++++++------------------------- src/inlines.h | 2 +- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 5a293b2e09..3e810bc13d 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -255,17 +255,21 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { switch (S_type(b)) { case CMARK_NODE_PARAGRAPH: - while (cmark_strbuf_at(node_content, 0) == '[' && - (pos = cmark_parse_reference_inline(parser->mem, node_content, - parser->refmap))) { + { + cmark_chunk chunk = {node_content->ptr, node_content->size, 0}; + while (chunk.len && chunk.data[0] == '[' && + (pos = cmark_parse_reference_inline(parser->mem, &chunk, parser->refmap))) { - cmark_strbuf_drop(node_content, pos); + chunk.data += pos; + chunk.len -= pos; } + cmark_strbuf_drop(node_content, (node_content->size - chunk.len)); if (is_blank(node_content, 0)) { // remove blank node (former reference def) cmark_node_free(b); } break; + } case CMARK_NODE_CODE_BLOCK: if (!b->as.code.fenced) { // indented code diff --git a/src/inlines.c b/src/inlines.c index 2d7f385050..c445f2fe68 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -72,7 +72,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, static int parse_inline(subject *subj, cmark_node *parent, int options); -static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, +static void subject_from_buf(cmark_mem *mem, subject *e, cmark_chunk *chunk, cmark_reference_map *refmap); static bufsize_t subject_find_special_char(subject *subj, int options); @@ -149,13 +149,11 @@ static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, return link; } -static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, +static void subject_from_buf(cmark_mem *mem, subject *e, cmark_chunk *chunk, cmark_reference_map *refmap) { int i; e->mem = mem; - e->input.data = buffer->ptr; - e->input.len = buffer->size; - e->input.alloc = 0; + e->input = *chunk; e->pos = 0; e->refmap = refmap; e->last_delim = NULL; @@ -708,7 +706,7 @@ cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { return result; } - houdini_unescape_html_f(&buf, url->data, url->len); + houdini_unescape_html_f(&buf, url->data, url->len); cmark_strbuf_unescape(&buf); return cmark_chunk_buf_detach(&buf); @@ -827,24 +825,24 @@ static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, bufsize_t i = offset; size_t nb_p = 0; - while (i < input->len) { - if (input->data[i] == '\\' && - i + 1 < input-> len && - cmark_ispunct(input->data[i+1])) - i += 2; - else if (input->data[i] == '(') { - ++nb_p; - ++i; - } else if (input->data[i] == ')') { - if (nb_p == 0) + while (i < input->len) { + if (input->data[i] == '\\' && + i + 1 < input-> len && + cmark_ispunct(input->data[i+1])) + i += 2; + else if (input->data[i] == '(') { + ++nb_p; + ++i; + } else if (input->data[i] == ')') { + if (nb_p == 0) + break; + --nb_p; + ++i; + } else if (cmark_isspace(input->data[i])) break; - --nb_p; - ++i; - } else if (cmark_isspace(input->data[i])) - break; - else - ++i; - } + else + ++i; + } if (i >= input->len) return -1; @@ -1178,7 +1176,8 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) { extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options) { subject subj; - subject_from_buf(mem, &subj, &parent->content, refmap); + cmark_chunk content = {parent->content.ptr, parent->content.size, 0}; + subject_from_buf(mem, &subj, &content, refmap); cmark_chunk_rtrim(&subj.input); while (!is_eof(&subj) && parse_inline(&subj, parent, options)) @@ -1206,7 +1205,7 @@ static void spnl(subject *subj) { // Modify refmap if a reference is encountered. // Return 0 if no reference found, otherwise position of subject // after reference is parsed. -bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input, cmark_reference_map *refmap) { subject subj; diff --git a/src/inlines.h b/src/inlines.h index 52be76820d..39d3363ac7 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -11,7 +11,7 @@ cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, cmark_reference_map *refmap, int options); -bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input, cmark_reference_map *refmap); #ifdef __cplusplus -- cgit 0.0.5-2-1-g0f52 From afc9a17d359b25b8636ffa535ffe2a1cb1fbba01 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 10 Oct 2017 12:50:42 -0700 Subject: Don't use CMAKE_INSTALL_LIBDIR to create libcmark.pc. For some reason this wasn't getting set in processing libcmark.pc.in, and we were getting the wrong entry in libcmark.pc. (See #236) The new approach sets an internal libdir variable to lib${LIB_SUFFIX}. This variable is used both to set the install destination and in the libcmark.pc.in template. Closes #236. However, I'd welcome comments from @juhp who originally added CMAKE_INSTALL_LIBDIR in #185. I think that the new system should work fine with Fedora, since LIB_SUFFIX will be set appropriately, but some testing is in order. --- src/CMakeLists.txt | 10 ++++++---- src/libcmark.pc.in | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 319719607e..87832dcb89 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -123,19 +123,21 @@ endif(MSVC) set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) +set(libdir lib${LIB_SUFFIX}) + include (InstallRequiredSystemLibraries) install(TARGETS ${PROGRAM} ${CMARK_INSTALL} EXPORT cmark RUNTIME DESTINATION bin - LIBRARY DESTINATION lib${LIB_SUFFIX} - ARCHIVE DESTINATION lib${LIB_SUFFIX} + LIBRARY DESTINATION ${libdir} + ARCHIVE DESTINATION include ) if(CMARK_SHARED OR CMARK_STATIC) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcmark.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc - DESTINATION lib${LIB_SUFFIX}/pkgconfig) + DESTINATION ${libdir}/pkgconfig) install(FILES cmark.h @@ -144,7 +146,7 @@ if(CMARK_SHARED OR CMARK_STATIC) DESTINATION include ) - install(EXPORT cmark DESTINATION lib${LIB_SUFFIX}/cmake) + install(EXPORT cmark DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() # Feature tests diff --git a/src/libcmark.pc.in b/src/libcmark.pc.in index 024ae48329..0f87c309bb 100644 --- a/src/libcmark.pc.in +++ b/src/libcmark.pc.in @@ -1,6 +1,6 @@ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@ -libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ +libdir=@CMAKE_INSTALL_PREFIX@/@libdir@ includedir=@CMAKE_INSTALL_PREFIX@/include Name: libcmark -- cgit 0.0.5-2-1-g0f52 From 749e5f1279d300c18d5ae264438d974289dafe2a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 10 Oct 2017 21:13:55 -0700 Subject: Bump to 0.28.1, update changelog. --- CMakeLists.txt | 2 +- changelog.txt | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 90a0f34398..a068cfba36 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 28) -set(PROJECT_VERSION_PATCH 0) +set(PROJECT_VERSION_PATCH 1) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) diff --git a/changelog.txt b/changelog.txt index e51aceca7a..1fee4422dc 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,17 @@ -[0.28] +[0.28.1] + + * `--smart`: open quote can never occur right after `]` or `)` (#227). + * Fix quadratic behavior in `finalize` (Vicent Marti). + * Don't use `CMAKE_INSTALL_LIBDIR` to create `libcmark.pc` (#236). + This wasn't getting set in processing `libcmark.pc.in`, and we + were getting the wrong entry in `libcmark.pc`. + The new approach sets an internal `libdir` variable to + `lib${LIB_SUFFIX}`. This variable is used both to set the + install destination and in the libcmark.pc.in template. + * Update README.md, replace `make astyle` with `make format` + (Nguyễn Thái Ngọc Duy). + +[0.28.0] * Update spec. * Use unsigned integer when shifting (Phil Turnbull). -- cgit 0.0.5-2-1-g0f52 From a54e12c9e5da809b425cc0f2c01d30953f4ab512 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 12 Oct 2017 07:57:54 -0700 Subject: Fixed regression in install dest for static library. Due to a mistake, 0.28.1 installed libcmark.a into include/. Closes #238. --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 87832dcb89..148cf78aeb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -130,7 +130,7 @@ install(TARGETS ${PROGRAM} ${CMARK_INSTALL} EXPORT cmark RUNTIME DESTINATION bin LIBRARY DESTINATION ${libdir} - ARCHIVE DESTINATION include + ARCHIVE DESTINATION ${libdir} ) if(CMARK_SHARED OR CMARK_STATIC) -- cgit 0.0.5-2-1-g0f52 From e97d8f3cd405970c74d44b0ded87b1954fe0f2ba Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 12 Oct 2017 08:00:06 -0700 Subject: Bump to 0.28.2, update changelog. --- CMakeLists.txt | 2 +- changelog.txt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a068cfba36..614733750b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 28) -set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION_PATCH 2) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) diff --git a/changelog.txt b/changelog.txt index 1fee4422dc..82f1063a82 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +[0.28.2] + + * Fixed regression in install dest for static library (#238). + Due to a mistake, 0.28.1 installed libcmark.a into include/. + [0.28.1] * `--smart`: open quote can never occur right after `]` or `)` (#227). -- cgit 0.0.5-2-1-g0f52 From 4f98864eb2781a8635e94d98f550100b1fa4add2 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Thu, 19 Oct 2017 14:20:26 +0200 Subject: Include GNUInstallDirs in src/CMakeLists.txt Fixes installation error under some CMake versions, notably kalakris' CMake backport often used with Travis. --- src/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 148cf78aeb..d5a1936173 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,8 @@ if(${CMAKE_VERSION} VERSION_GREATER "3.3") cmake_policy(SET CMP0063 NEW) endif() +include(GNUInstallDirs) + set(LIBRARY "libcmark") set(STATICLIBRARY "libcmark_static") set(HEADERS -- cgit 0.0.5-2-1-g0f52 From a2e06fa1ca1c30191c5648f0444ec144293177d1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Oct 2017 09:03:31 -0700 Subject: BUmp to 0.28.3 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 614733750b..4eb0541529 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(PROJECT_NAME "cmark") set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 28) -set(PROJECT_VERSION_PATCH 2) +set(PROJECT_VERSION_PATCH 3) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) option(CMARK_TESTS "Build cmark tests and enable testing" ON) -- cgit 0.0.5-2-1-g0f52 From 5da792fc3714f66a88aabb5d13cb0eed674cb6c5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 21 Oct 2017 09:06:00 -0700 Subject: Updated changelog. --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 82f1063a82..33cff540a7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +[0.28.3] + + * Include GNUInstallDirs in src/CMakeLists.txt (Nick Wellnhofer, #240). + This fixes build problems on some cmake versions (#241). + [0.28.2] * Fixed regression in install dest for static library (#238). -- cgit 0.0.5-2-1-g0f52 From cb27409921300ad5ea6ccc5e29d3c78d2ed048b3 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Nov 2017 10:20:12 -0800 Subject: Refactored pathological_tests.py --- test/pathological_tests.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 6883c104a4..dd80092b2d 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -71,28 +71,32 @@ pathological = { } whitespace_re = re.compile('/s+/') -passed = 0 -errored = 0 -failed = 0 -print("Testing pathological cases:") -for description in pathological: +results = {'passed': 0, 'errored': 0, 'failed': 0} + +def run_pathological_test(description, results): (inp, regex) = pathological[description] [rc, actual, err] = cmark.to_html(inp) if rc != 0: - errored += 1 print(description, '[ERRORED (return code %d)]' %rc) print(err) + results['errored'] += 1 elif regex.search(actual): print(description, '[PASSED]') - passed += 1 + results['passed'] += 1 else: print(description, '[FAILED]') print(repr(actual)) - failed += 1 + results['failed'] += 1 + + +print("Testing pathological cases:") +for description in pathological: + run_pathological_test(description, results) -print("%d passed, %d failed, %d errored" % (passed, failed, errored)) -if (failed == 0 and errored == 0): +print("%d passed, %d failed, %d errored" % + (results['passed'], results['failed'], results['errored'])) +if (results['failed'] == 0 and results['errored'] == 0): exit(0) else: exit(1) -- cgit 0.0.5-2-1-g0f52 From 4db1f75834602aa1215b58cbad737593c99ccdc2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Nov 2017 10:23:57 -0800 Subject: Add timeout to pathological_tests.py. Tests must complete in 8 seconds or are errors. --- test/pathological_tests.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index dd80092b2d..40552de342 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -5,6 +5,8 @@ import re import argparse import sys import platform +import multiprocessing +import time from cmark import CMark if __name__ == "__main__": @@ -92,7 +94,17 @@ def run_pathological_test(description, results): print("Testing pathological cases:") for description in pathological: - run_pathological_test(description, results) + p = multiprocessing.Process(target=run_pathological_test, + args=(description, results,)) + p.start() + # wait 8 seconds or until it finishes + p.join(8) + # kill it if still active + if p.is_alive(): + print(description, '[TIMEOUT]') + p.terminate() + results['errored'] += 1 + p.join() print("%d passed, %d failed, %d errored" % (results['passed'], results['failed'], results['errored'])) -- cgit 0.0.5-2-1-g0f52 From 1998db887e385e786c0eac4b1973bcddc6406bdc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Nov 2017 10:53:23 -0800 Subject: Add allowed failures to pathological_tests.py. This allows us to include tests that we don't yet know how to pass. --- test/pathological_tests.py | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 40552de342..b86f4c009a 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -17,6 +17,8 @@ if __name__ == "__main__": default=None, help='directory containing dynamic library') args = parser.parse_args(sys.argv[1:]) +allowed_failures = {"many references": True} + cmark = CMark(prog=args.program, library_dir=args.library_dir) # list of pairs consisting of input and a regex that must match the output. @@ -74,40 +76,57 @@ pathological = { whitespace_re = re.compile('/s+/') -results = {'passed': 0, 'errored': 0, 'failed': 0} +results = {'passed': [], 'errored': [], 'failed': [], 'ignored': []} def run_pathological_test(description, results): (inp, regex) = pathological[description] [rc, actual, err] = cmark.to_html(inp) + extra = "" if rc != 0: print(description, '[ERRORED (return code %d)]' %rc) print(err) - results['errored'] += 1 + if allowed_failures[description]: + results['ignored'].append(description) + else: + results['errored'].append(description) elif regex.search(actual): print(description, '[PASSED]') - results['passed'] += 1 + results['passed'].append(description) else: print(description, '[FAILED]') print(repr(actual)) - results['failed'] += 1 - + if allowed_failures[description]: + results['ignored'].append(description) + else: + results['failed'].append(description) print("Testing pathological cases:") for description in pathological: p = multiprocessing.Process(target=run_pathological_test, args=(description, results,)) p.start() - # wait 8 seconds or until it finishes - p.join(8) + # wait 4 seconds or until it finishes + p.join(4) # kill it if still active if p.is_alive(): print(description, '[TIMEOUT]') + if allowed_failures[description]: + results['ignored'].append(description) + else: + results['errored'].append(description) p.terminate() - results['errored'] += 1 p.join() -print("%d passed, %d failed, %d errored" % - (results['passed'], results['failed'], results['errored'])) +passed = len(results['passed']) +failed = len(results['failed']) +errored = len(results['errored']) +ignored = len(results['ignored']) + +print("%d passed, %d failed, %d errored" % (passed, failed, errored)) +if ignored > 0: + print("Ignoring these allowed failures:") + for x in results['ignored']: + print(x) if (results['failed'] == 0 and results['errored'] == 0): exit(0) else: -- cgit 0.0.5-2-1-g0f52 From 0378b315751c83690121936771f591612ec4e810 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 5 Nov 2017 10:59:06 -0800 Subject: Fixed exit code for pathological tests. --- test/pathological_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index b86f4c009a..613f2e57f4 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -127,7 +127,7 @@ if ignored > 0: print("Ignoring these allowed failures:") for x in results['ignored']: print(x) -if (results['failed'] == 0 and results['errored'] == 0): +if failed == 0 and errored == 0: exit(0) else: exit(1) -- cgit 0.0.5-2-1-g0f52 From 9ead98df8ae2a64842dd157485b69756b5a32a2c Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 14 Nov 2017 14:42:06 +0100 Subject: Generate export header for static-only build Fixes issue #247. --- src/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d5a1936173..995a9df7da 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -115,6 +115,11 @@ if (CMARK_STATIC) VERSION ${PROJECT_VERSION}) endif(MSVC) + if (NOT CMARK_SHARED) + generate_export_header(${STATICLIBRARY} + BASE_NAME ${PROJECT_NAME}) + endif() + list(APPEND CMARK_INSTALL ${STATICLIBRARY}) endif() -- cgit 0.0.5-2-1-g0f52 From db63ea9a07135568c44d537a9f2e999b210f0b9f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 16 Nov 2017 09:31:28 -0800 Subject: Updated travis badges and issue tracker jgm -> commonmark. Thanks @mohitsinghs --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6b0c00329f..62079044ef 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ cmark ===== -[![Build Status]](https://travis-ci.org/jgm/cmark) +[![Build Status]](https://travis-ci.org/commonmark/cmark) [![Windows Build Status]](https://ci.appveyor.com/project/jgm/cmark) `cmark` is the C reference implementation of [CommonMark], a @@ -171,7 +171,7 @@ Contributing There is a [forum for discussing CommonMark](http://talk.commonmark.org); you should use it instead of github issues for questions and possibly open-ended discussions. -Use the [github issue tracker](http://github.com/jgm/CommonMark/issues) +Use the [github issue tracker](http://github.com/commonmark/CommonMark/issues) only for simple, clear, actionable issues. Authors @@ -191,8 +191,8 @@ most of the C library's API and its test harness. [CommonMark]: http://commonmark.org [cmake]: http://www.cmake.org/download/ [re2c]: http://re2c.org -[commonmark.js]: https://github.com/jgm/commonmark.js -[Build Status]: https://img.shields.io/travis/jgm/cmark/master.svg?style=flat +[commonmark.js]: https://github.com/commonmark/commonmark.js +[Build Status]: https://img.shields.io/travis/commonmark/cmark/master.svg?style=flat [Windows Build Status]: https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true [american fuzzy lop]: http://lcamtuf.coredump.cx/afl/ [libFuzzer]: http://llvm.org/docs/LibFuzzer.html -- cgit 0.0.5-2-1-g0f52 From 736d8a3d81ab2ac8e5556f2dd5f6fed9d9137d18 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 18 Nov 2017 16:15:09 +0100 Subject: Rename roundtrip and entity tests Rename the tests to reflect that they use the library, not the executable. --- test/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6da3a6bac9..ae7d10d320 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -41,14 +41,14 @@ IF (PYTHONINTERP_FOUND) "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) - add_test(roundtriptest_executable + add_test(roundtriptest_library ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip_tests.py" "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" ) - add_test(entity_executable + add_test(entity_library ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/entity_tests.py" "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src" -- cgit 0.0.5-2-1-g0f52 From 772c4cbde52f1f295f66bb80a55d3db446742094 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 18 Nov 2017 16:08:55 +0100 Subject: Also run API tests with CMARK_SHARED=OFF --- CMakeLists.txt | 2 +- api_test/CMakeLists.txt | 6 +++++- test/CMakeLists.txt | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4eb0541529..a25b2697b9 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ option(CMARK_SHARED "Build shared libcmark library" ON) option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF) add_subdirectory(src) -if(CMARK_TESTS AND CMARK_SHARED) +if(CMARK_TESTS AND (CMARK_SHARED OR CMARK_STATIC)) add_subdirectory(api_test) endif() add_subdirectory(man) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index 3151ccccb9..2701abbcd4 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -8,7 +8,11 @@ include_directories( ${PROJECT_SOURCE_DIR}/src ${PROJECT_BINARY_DIR}/src ) -target_link_libraries(api_test libcmark) +if(CMARK_SHARED) + target_link_libraries(api_test libcmark) +else() + target_link_libraries(api_test libcmark_static) +endif() # Compiler flags if(MSVC) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ae7d10d320..5c07fb7b2e 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,7 +9,7 @@ else(SPEC_TESTS) find_package(PythonInterp 3) endif(SPEC_TESTS) -if (CMARK_SHARED) +if (CMARK_SHARED OR CMARK_STATIC) add_test(NAME api_test COMMAND api_test) endif() -- cgit 0.0.5-2-1-g0f52 From 9253cbff4f28651ec31ed1e1e714c9093a1ac222 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 18 Nov 2017 15:51:24 +0100 Subject: Add static-only build to Travis test matrix --- .travis.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index abb33cb395..b8818c37af 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,11 @@ language: c compiler: - clang - gcc +matrix: + include: + - os: linux + compiler: gcc + env: CMAKE_OPTIONS="-DCMARK_SHARED=OFF" addons: apt: # we need a more recent cmake than travis/linux provides (at least 2.8.9): @@ -26,7 +31,7 @@ before_install: fi script: - - make + - (mkdir -p build && cd build && cmake $CMAKE_OPTIONS ..) - make test - | if [ ${TRAVIS_OS_NAME:-'linux'} = 'linux' ] -- cgit 0.0.5-2-1-g0f52 From a5c83d7a426bda38aac838f9815664f6189d3404 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 18 Nov 2017 11:21:23 -0800 Subject: README - use commonmark/cmark for appveyor badge. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 62079044ef..dfaa7ff52a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ cmark ===== [![Build Status]](https://travis-ci.org/commonmark/cmark) -[![Windows Build Status]](https://ci.appveyor.com/project/jgm/cmark) +[![Windows Build Status]](https://ci.appveyor.com/project/commonmark/cmark) `cmark` is the C reference implementation of [CommonMark], a rationalized version of Markdown syntax with a [spec][the spec]. @@ -193,6 +193,6 @@ most of the C library's API and its test harness. [re2c]: http://re2c.org [commonmark.js]: https://github.com/commonmark/commonmark.js [Build Status]: https://img.shields.io/travis/commonmark/cmark/master.svg?style=flat -[Windows Build Status]: https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true +[Windows Build Status]: https://ci.appveyor.com/api/projects/status/h3fd91vtd1xfmp69?svg=true [american fuzzy lop]: http://lcamtuf.coredump.cx/afl/ [libFuzzer]: http://llvm.org/docs/LibFuzzer.html -- cgit 0.0.5-2-1-g0f52 From e489ba4ccb92af53ea823223481005384fad5e14 Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Fri, 16 Feb 2018 13:25:56 -0500 Subject: Check for empty buffer when rendering For empty documents, `->size` is zero so `renderer.buffer->ptr[renderer.buffer->size - 1]` will cause an out-of-bounds read. Empty buffers always point to the global `cmark_strbuf__initbuf` buffer so we read `cmark_strbuf__initbuf[-1]`. --- src/render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render.c b/src/render.c index 20dca5ff84..5abd52e7d9 100644 --- a/src/render.c +++ b/src/render.c @@ -171,7 +171,7 @@ char *cmark_render(cmark_node *root, int options, int width, } // ensure final newline - if (renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') { + if (renderer.buffer->size == 0 || renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') { cmark_strbuf_putc(renderer.buffer, '\n'); } -- cgit 0.0.5-2-1-g0f52 From b04ab579a37d6645eafccfb594ed7dc64993f9da Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Fri, 16 Feb 2018 13:26:26 -0500 Subject: Don't discard empty fuzz test-cases We currently discard fuzz test-cases that are empty but empty inputs are valid markdown. This improves the fuzzing coverage slightly. --- test/cmark-fuzz.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cmark-fuzz.c b/test/cmark-fuzz.c index f09db52126..f4f082a9d3 100644 --- a/test/cmark-fuzz.c +++ b/test/cmark-fuzz.c @@ -4,7 +4,7 @@ int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { int options = 0; - if (size > sizeof(options)) { + if (size >= sizeof(options)) { /* First 4 bytes of input are treated as options */ int options = *(const int *)data; -- cgit 0.0.5-2-1-g0f52 From c24c432517c721b8cb8022b98d8cf734c68d2aee Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Fri, 16 Feb 2018 13:31:29 -0500 Subject: Fuzz width parameter too Allow the `width` parameter to be generated too so we get better fuzz-coverage. --- test/cmark-fuzz.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/test/cmark-fuzz.c b/test/cmark-fuzz.c index f4f082a9d3..9bdd3a553b 100644 --- a/test/cmark-fuzz.c +++ b/test/cmark-fuzz.c @@ -3,24 +3,28 @@ #include "cmark.h" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - int options = 0; - if (size >= sizeof(options)) { - /* First 4 bytes of input are treated as options */ - int options = *(const int *)data; + struct __attribute__((packed)) { + int options; + int width; + } fuzz_config; + + if (size >= sizeof(fuzz_config)) { + /* The beginning of `data` is treated as fuzzer configuration */ + memcpy(&fuzz_config, data, sizeof(fuzz_config)); /* Mask off valid option bits */ - options = options & (CMARK_OPT_SOURCEPOS | CMARK_OPT_HARDBREAKS | CMARK_OPT_SAFE | CMARK_OPT_NOBREAKS | CMARK_OPT_NORMALIZE | CMARK_OPT_VALIDATE_UTF8 | CMARK_OPT_SMART); + fuzz_config.options &= (CMARK_OPT_SOURCEPOS | CMARK_OPT_HARDBREAKS | CMARK_OPT_SAFE | CMARK_OPT_NOBREAKS | CMARK_OPT_NORMALIZE | CMARK_OPT_VALIDATE_UTF8 | CMARK_OPT_SMART); /* Remainder of input is the markdown */ - const char *markdown = (const char *)(data + sizeof(options)); - const size_t markdown_size = size - sizeof(options); - cmark_node *doc = cmark_parse_document(markdown, markdown_size, options); + const char *markdown = (const char *)(data + sizeof(fuzz_config)); + const size_t markdown_size = size - sizeof(fuzz_config); + cmark_node *doc = cmark_parse_document(markdown, markdown_size, fuzz_config.options); - free(cmark_render_commonmark(doc, options, 80)); - free(cmark_render_html(doc, options)); - free(cmark_render_latex(doc, options, 80)); - free(cmark_render_man(doc, options, 80)); - free(cmark_render_xml(doc, options)); + free(cmark_render_commonmark(doc, fuzz_config.options, fuzz_config.width)); + free(cmark_render_html(doc, fuzz_config.options)); + free(cmark_render_latex(doc, fuzz_config.options, fuzz_config.width)); + free(cmark_render_man(doc, fuzz_config.options, fuzz_config.width)); + free(cmark_render_xml(doc, fuzz_config.options)); cmark_node_free(doc); } -- cgit 0.0.5-2-1-g0f52 From 0fc7c24f214c54bda5513ed2f352353f1e0f9dc4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Mar 2018 14:21:25 -0700 Subject: Update spec.txt from repository. --- test/spec.txt | 69 ++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 9fd5841397..5e782f35b3 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -527,7 +527,7 @@ Markdown document. A line consisting of 0-3 spaces of indentation, followed by a sequence of three or more matching `-`, `_`, or `*` characters, each followed -optionally by any number of spaces, forms a +optionally by any number of spaces or tabs, forms a [thematic break](@). ```````````````````````````````` example @@ -1584,7 +1584,7 @@ begins with a code fence, indented no more than three spaces. The line with the opening code fence may optionally contain some text following the code fence; this is trimmed of leading and trailing -spaces and called the [info string](@). +whitespace and called the [info string](@). The [info string] may not contain any backtick characters. (The reason for this restriction is that otherwise some inline code would be incorrectly interpreted as the @@ -2069,7 +2069,7 @@ _world_. ```````````````````````````````` -In this case, the HTML block is terminated by the newline — the `**hello**` +In this case, the HTML block is terminated by the newline — the `**Hello**` text remains verbatim — and regular parsing resumes, with a paragraph, emphasised `world` and inline and block HTML following. @@ -5049,11 +5049,9 @@ item: - b - c - d - - e - - f - - g - - h -- i + - e + - f +- g .
                            • a
                            • @@ -5063,8 +5061,6 @@ item:
                            • e
                            • f
                            • g
                            • -
                            • h
                            • -
                            • i
                            ```````````````````````````````` @@ -5074,7 +5070,7 @@ item: 2. b - 3. c + 3. c .
                            1. @@ -5089,6 +5085,49 @@ item:
                            ```````````````````````````````` +Note, however, that list items may not be indented more than +three spaces. Here `- e` is treated as a paragraph continuation +line, because it is indented more than three spaces: + +```````````````````````````````` example +- a + - b + - c + - d + - e +. +
                              +
                            • a
                            • +
                            • b
                            • +
                            • c
                            • +
                            • d +- e
                            • +
                            +```````````````````````````````` + +And here, `3. c` is treated as in indented code block, +because it is indented four spaces and preceded by a +blank line. + +```````````````````````````````` example +1. a + + 2. b + + 3. c +. +
                              +
                            1. +

                              a

                              +
                            2. +
                            3. +

                              b

                              +
                            4. +
                            +
                            3. c
                            +
                            +```````````````````````````````` + This is a loose list, because there is a blank line between two of the list items: @@ -8624,7 +8663,7 @@ a [single-quoted attribute value], or a [double-quoted attribute value]. An [unquoted attribute value](@) is a nonempty string of characters not -including spaces, `"`, `'`, `=`, `<`, `>`, or `` ` ``. +including [whitespace], `"`, `'`, `=`, `<`, `>`, or `` ` ``. A [single-quoted attribute value](@) consists of `'`, zero or more @@ -8745,9 +8784,13 @@ Illegal [whitespace]: ```````````````````````````````` example < a>< foo> + .

                            < a>< -foo><bar/ >

                            +foo><bar/ > +<foo bar=baz +bim!bop />

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 4226e42ff8dfa5a5375c1ee958b9d5eb2fe5b188 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Mar 2018 14:24:13 -0700 Subject: Don't allow list markers to be indented >= 4 spaces. See commonmark/CommonMark#497. --- src/blocks.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/blocks.c b/src/blocks.c index 7f58ffd1ad..3e32535100 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -945,6 +945,7 @@ 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 ((!indented || cont_type == CMARK_NODE_LIST) && + parser->indent < 4 && (matched = parse_list_marker( parser->mem, input, parser->first_nonspace, (*container)->type == CMARK_NODE_PARAGRAPH, &data))) { -- cgit 0.0.5-2-1-g0f52 From ed64489f0f5c9ddb869336cd8526f38d3912cc6a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Mar 2018 14:29:50 -0700 Subject: Fix inline raw HTML parsing. This fixes a recently added failing spec test case. Previously spaces were being allowed in unquoted attribute values; no we forbid them. --- src/scanners.c | 17465 +++++++++++++++++++++--------------------------------- src/scanners.re | 2 +- 2 files changed, 6622 insertions(+), 10845 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index b312f66241..fd855a593d 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.15.3 */ +/* Generated by re2c 0.16 */ #include #include "chunk.h" #include "scanners.h" @@ -70,53 +70,58 @@ bufsize_t _scan_scheme(const unsigned char *p) { if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy9; + goto yy7; } else { if (yych != '/') - goto yy9; + goto yy7; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych >= 'A') - goto yy9; + goto yy7; } else { if (yych <= '`') goto yy6; if (yych <= 'z') - goto yy9; + goto yy7; } } yy6: p = marker; goto yy3; yy7: - ++p; - { return (bufsize_t)(p - start); } - yy9: yych = *++p; if (yych <= '9') { if (yych <= ',') { - if (yych != '+') - goto yy6; + if (yych == '+') + goto yy10; + goto yy6; } else { if (yych == '/') goto yy6; + goto yy10; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; + goto yy10; } else { if (yych <= '`') goto yy6; - if (yych >= '{') - goto yy6; + if (yych <= 'z') + goto yy10; + goto yy6; } } + yy8: + ++p; + { return (bufsize_t)(p - start); } + yy10: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -129,7 +134,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -151,7 +156,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -173,7 +178,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -195,7 +200,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -217,7 +222,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -239,7 +244,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -261,7 +266,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -283,7 +288,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -305,7 +310,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -327,7 +332,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -349,7 +354,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -371,7 +376,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -393,7 +398,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -415,7 +420,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -437,7 +442,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -459,7 +464,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -481,7 +486,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -503,7 +508,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -525,7 +530,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -547,7 +552,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -569,7 +574,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -591,7 +596,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -613,7 +618,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -635,7 +640,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -657,7 +662,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -679,7 +684,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -701,7 +706,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -723,7 +728,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy7; + goto yy8; if (yych <= '@') goto yy6; } else { @@ -735,7 +740,7 @@ bufsize_t _scan_scheme(const unsigned char *p) { } ++p; if ((yych = *p) == ':') - goto yy7; + goto yy8; goto yy6; } } @@ -810,107 +815,176 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { if (yych <= '9') { if (yych <= ',') { if (yych == '+') - goto yy48; + goto yy46; } else { if (yych != '/') - goto yy48; + goto yy46; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych >= 'A') - goto yy48; + goto yy46; } else { if (yych <= '`') goto yy45; if (yych <= 'z') - goto yy48; + goto yy46; } } yy45: p = marker; goto yy42; yy46: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy49; + goto yy45; + } else { + if (yych == '/') + goto yy45; + goto yy49; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + goto yy49; + } else { + if (yych <= '`') + goto yy45; + if (yych <= 'z') + goto yy49; + goto yy45; + } + } + yy47: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy46; + goto yy47; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '<') goto yy45; if (yych <= '>') - goto yy85; + goto yy50; goto yy45; } else { if (yych <= 0xDF) - goto yy78; + goto yy52; if (yych <= 0xE0) - goto yy79; - goto yy80; + goto yy53; + goto yy54; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy84; + goto yy55; if (yych <= 0xEF) - goto yy80; - goto yy81; + goto yy54; + goto yy56; } else { if (yych <= 0xF3) - goto yy82; + goto yy57; if (yych <= 0xF4) - goto yy83; + goto yy58; goto yy45; } } - yy48: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy46; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } + yy49: yych = *++p; if (yych <= '9') { if (yych <= ',') { - if (yych != '+') - goto yy45; + if (yych == '+') + goto yy59; + goto yy45; } else { if (yych == '/') goto yy45; + goto yy59; } } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; + goto yy59; } else { if (yych <= '`') goto yy45; - if (yych >= '{') - goto yy45; + if (yych <= 'z') + goto yy59; + goto yy45; } } + yy50: + ++p; + { return (bufsize_t)(p - start); } + yy52: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy47; + goto yy45; + yy53: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy45; + if (yych <= 0xBF) + goto yy52; + goto yy45; + yy54: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy52; + goto yy45; + yy55: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x9F) + goto yy52; + goto yy45; + yy56: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy45; + if (yych <= 0xBF) + goto yy54; + goto yy45; + yy57: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy54; + goto yy45; + yy58: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x8F) + goto yy54; + goto yy45; + yy59: yych = *++p; if (yych <= '9') { if (yych <= ',') { @@ -923,7 +997,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -945,7 +1019,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -967,7 +1041,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -989,7 +1063,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1011,7 +1085,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1033,7 +1107,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1055,7 +1129,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1077,7 +1151,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1099,7 +1173,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1121,7 +1195,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1143,7 +1217,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1165,7 +1239,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1187,7 +1261,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1209,7 +1283,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1231,7 +1305,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1253,7 +1327,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1275,7 +1349,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1297,7 +1371,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1319,7 +1393,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1341,7 +1415,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1363,7 +1437,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1385,7 +1459,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1407,7 +1481,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1429,7 +1503,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1451,7 +1525,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1473,7 +1547,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1495,7 +1569,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } else { if (yych <= 'Z') { if (yych <= ':') - goto yy46; + goto yy47; if (yych <= '@') goto yy45; } else { @@ -1505,69 +1579,10 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { goto yy45; } } - yych = *++p; - if (yych == ':') - goto yy46; - goto yy45; - yy78: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy46; - goto yy45; - yy79: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy45; - if (yych <= 0xBF) - goto yy78; - goto yy45; - yy80: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy78; - goto yy45; - yy81: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy45; - if (yych <= 0xBF) - goto yy80; - goto yy45; - yy82: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy80; - goto yy45; - yy83: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x8F) - goto yy80; - goto yy45; - yy84: ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x9F) - goto yy78; + if ((yych = *p) == ':') + goto yy47; goto yy45; - yy85: - ++p; - { return (bufsize_t)(p - start); } } } @@ -1638,8119 +1653,4544 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { if (yych <= ',') { if (yych <= '"') { if (yych == '!') - goto yy95; + goto yy93; goto yy90; } else { if (yych <= '\'') - goto yy95; + goto yy93; if (yych <= ')') goto yy90; if (yych <= '+') - goto yy95; + goto yy93; goto yy90; } } else { if (yych <= '>') { if (yych <= '9') - goto yy95; + goto yy93; if (yych == '=') - goto yy95; + goto yy93; goto yy90; } else { if (yych <= 'Z') - goto yy95; + goto yy93; if (yych <= ']') goto yy90; if (yych <= '~') - goto yy95; + goto yy93; goto yy90; } } yy92: - yych = *++p; + ++p; + yych = *p; + yy93: + if (yybm[0 + yych] & 128) { + goto yy92; + } + if (yych <= '>') + goto yy94; + if (yych <= '@') + goto yy95; + yy94: + p = marker; + goto yy90; + yy95: + ++p; + yych = *p; if (yych <= '@') { if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy96; + goto yy94; + if (yych >= ':') + goto yy94; } else { if (yych <= 'Z') goto yy96; if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy96; + goto yy94; + if (yych >= '{') + goto yy94; } - yy93: - p = marker; - goto yy90; - yy94: + yy96: ++p; yych = *p; - yy95: - if (yybm[0 + yych] & 128) { - goto yy94; - } - if (yych <= '>') - goto yy93; - if (yych <= '@') - goto yy92; - goto yy93; - yy96: - yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy98; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; - if (yych >= ':') - goto yy93; + goto yy94; + if (yych <= '9') + goto yy98; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; + goto yy94; + goto yy98; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy98; + goto yy94; } } - yych = *++p; + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy101; + if (yych <= '/') + goto yy94; + goto yy102; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy102; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy102; + goto yy94; + } + } + yy98: + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; + goto yy94; if (yych <= '-') - goto yy227; - goto yy99; + goto yy101; + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy226; - goto yy93; + goto yy102; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy226; + goto yy94; + goto yy102; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy226; - goto yy93; + goto yy102; + goto yy94; } } - yy98: - yych = *++p; + yy99: + ++p; + { return (bufsize_t)(p - start); } + yy101: + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') - goto yy227; + goto yy103; if (yych <= '/') - goto yy93; - goto yy226; + goto yy94; + goto yy104; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; - goto yy226; + goto yy94; + goto yy104; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy226; - goto yy93; + goto yy104; + goto yy94; } } - yy99: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy102; - goto yy93; - } else { - if (yych <= 'Z') - goto yy102; - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy102; - goto yy93; - } - yy100: - ++p; - { return (bufsize_t)(p - start); } yy102: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy104; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; - if (yych >= ':') - goto yy93; + goto yy94; + if (yych <= '9') + goto yy104; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; + goto yy94; + goto yy104; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy104; + goto yy94; + } + } + yy103: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy105; + if (yych <= '/') + goto yy94; + goto yy106; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy106; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy106; + goto yy94; } } + yy104: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy106; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy105; - goto yy93; + goto yy106; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy105; + goto yy94; + goto yy106; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy105; - goto yy93; + goto yy106; + goto yy94; } } - yy104: + yy105: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy106; + goto yy107; if (yych <= '/') - goto yy93; + goto yy94; + goto yy108; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy108; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy108; + goto yy94; } } - yy105: + yy106: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy108; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy107; - goto yy93; + goto yy108; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy107; + goto yy94; + goto yy108; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy107; - goto yy93; + goto yy108; + goto yy94; } } - yy106: + yy107: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy108; + goto yy109; if (yych <= '/') - goto yy93; + goto yy94; + goto yy110; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy110; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy110; + goto yy94; } } - yy107: + yy108: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy110; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy109; - goto yy93; + goto yy110; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy109; + goto yy94; + goto yy110; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy109; - goto yy93; + goto yy110; + goto yy94; } } - yy108: + yy109: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy110; + goto yy111; if (yych <= '/') - goto yy93; + goto yy94; + goto yy112; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy112; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy112; + goto yy94; } } - yy109: + yy110: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy112; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy111; - goto yy93; + goto yy112; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy111; + goto yy94; + goto yy112; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy111; - goto yy93; + goto yy112; + goto yy94; } } - yy110: + yy111: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy112; + goto yy113; if (yych <= '/') - goto yy93; + goto yy94; + goto yy114; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy114; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy114; + goto yy94; } } - yy111: + yy112: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy114; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy113; - goto yy93; + goto yy114; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy113; + goto yy94; + goto yy114; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy113; - goto yy93; + goto yy114; + goto yy94; } } - yy112: + yy113: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy114; + goto yy115; if (yych <= '/') - goto yy93; + goto yy94; + goto yy116; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy116; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy116; + goto yy94; } } - yy113: + yy114: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy116; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy115; - goto yy93; + goto yy116; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy115; + goto yy94; + goto yy116; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy115; - goto yy93; + goto yy116; + goto yy94; } } - yy114: + yy115: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy116; + goto yy117; if (yych <= '/') - goto yy93; + goto yy94; + goto yy118; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy118; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy118; + goto yy94; } } - yy115: + yy116: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy118; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy117; - goto yy93; + goto yy118; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy117; + goto yy94; + goto yy118; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy117; - goto yy93; + goto yy118; + goto yy94; } } - yy116: + yy117: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy118; + goto yy119; if (yych <= '/') - goto yy93; + goto yy94; + goto yy120; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy120; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy120; + goto yy94; } } - yy117: + yy118: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy120; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy119; - goto yy93; + goto yy120; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy119; + goto yy94; + goto yy120; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy119; - goto yy93; + goto yy120; + goto yy94; } } - yy118: + yy119: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy120; + goto yy121; if (yych <= '/') - goto yy93; + goto yy94; + goto yy122; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy122; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy122; + goto yy94; } } - yy119: + yy120: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy122; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy121; - goto yy93; + goto yy122; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy121; + goto yy94; + goto yy122; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy121; - goto yy93; + goto yy122; + goto yy94; } } - yy120: + yy121: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy122; + goto yy123; if (yych <= '/') - goto yy93; + goto yy94; + goto yy124; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy124; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy124; + goto yy94; } } - yy121: + yy122: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy124; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy123; - goto yy93; + goto yy124; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy123; + goto yy94; + goto yy124; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy123; - goto yy93; + goto yy124; + goto yy94; } } - yy122: + yy123: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy124; + goto yy125; if (yych <= '/') - goto yy93; + goto yy94; + goto yy126; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy126; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy126; + goto yy94; } } - yy123: + yy124: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy126; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy125; - goto yy93; + goto yy126; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy125; + goto yy94; + goto yy126; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy125; - goto yy93; + goto yy126; + goto yy94; } } - yy124: + yy125: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy126; + goto yy127; if (yych <= '/') - goto yy93; + goto yy94; + goto yy128; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy128; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy128; + goto yy94; } } - yy125: + yy126: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy128; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy127; - goto yy93; + goto yy128; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy127; + goto yy94; + goto yy128; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy127; - goto yy93; + goto yy128; + goto yy94; } } - yy126: + yy127: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy128; + goto yy129; if (yych <= '/') - goto yy93; + goto yy94; + goto yy130; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy130; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy130; + goto yy94; } } - yy127: + yy128: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy130; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy129; - goto yy93; + goto yy130; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy129; + goto yy94; + goto yy130; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy129; - goto yy93; + goto yy130; + goto yy94; } } - yy128: + yy129: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy130; + goto yy131; if (yych <= '/') - goto yy93; + goto yy94; + goto yy132; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy132; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy132; + goto yy94; } } - yy129: + yy130: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy132; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy131; - goto yy93; + goto yy132; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy131; + goto yy94; + goto yy132; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy131; - goto yy93; + goto yy132; + goto yy94; } } - yy130: + yy131: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy132; + goto yy133; if (yych <= '/') - goto yy93; + goto yy94; + goto yy134; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy134; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy134; + goto yy94; } } - yy131: + yy132: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy134; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy133; - goto yy93; + goto yy134; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy133; + goto yy94; + goto yy134; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy133; - goto yy93; + goto yy134; + goto yy94; } } - yy132: + yy133: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy134; + goto yy135; if (yych <= '/') - goto yy93; + goto yy94; + goto yy136; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy136; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy136; + goto yy94; } } - yy133: + yy134: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy136; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy135; - goto yy93; + goto yy136; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy135; + goto yy94; + goto yy136; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy135; - goto yy93; + goto yy136; + goto yy94; } } - yy134: + yy135: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy136; + goto yy137; if (yych <= '/') - goto yy93; + goto yy94; + goto yy138; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy138; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy138; + goto yy94; } } - yy135: + yy136: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy138; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy137; - goto yy93; + goto yy138; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy137; + goto yy94; + goto yy138; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy137; - goto yy93; + goto yy138; + goto yy94; } } - yy136: + yy137: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy138; + goto yy139; if (yych <= '/') - goto yy93; + goto yy94; + goto yy140; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy140; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy140; + goto yy94; } } - yy137: + yy138: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy140; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy139; - goto yy93; + goto yy140; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy139; + goto yy94; + goto yy140; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy139; - goto yy93; + goto yy140; + goto yy94; } } - yy138: + yy139: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy140; + goto yy141; if (yych <= '/') - goto yy93; + goto yy94; + goto yy142; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy142; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy142; + goto yy94; } } - yy139: + yy140: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy142; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy141; - goto yy93; + goto yy142; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy141; + goto yy94; + goto yy142; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy141; - goto yy93; + goto yy142; + goto yy94; } } - yy140: + yy141: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy142; + goto yy143; if (yych <= '/') - goto yy93; + goto yy94; + goto yy144; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy144; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy144; + goto yy94; } } - yy141: + yy142: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy144; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy143; - goto yy93; + goto yy144; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy143; + goto yy94; + goto yy144; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy143; - goto yy93; + goto yy144; + goto yy94; } } - yy142: + yy143: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy144; + goto yy145; if (yych <= '/') - goto yy93; + goto yy94; + goto yy146; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy146; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy146; + goto yy94; } } - yy143: + yy144: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy146; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy145; - goto yy93; + goto yy146; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy145; + goto yy94; + goto yy146; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy145; - goto yy93; + goto yy146; + goto yy94; } } - yy144: + yy145: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy146; + goto yy147; if (yych <= '/') - goto yy93; + goto yy94; + goto yy148; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy148; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy148; + goto yy94; } } - yy145: + yy146: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy148; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy147; - goto yy93; + goto yy148; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy147; + goto yy94; + goto yy148; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy147; - goto yy93; + goto yy148; + goto yy94; } } - yy146: + yy147: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy148; + goto yy149; if (yych <= '/') - goto yy93; + goto yy94; + goto yy150; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy150; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy150; + goto yy94; } } - yy147: + yy148: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy150; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy149; - goto yy93; + goto yy150; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy149; + goto yy94; + goto yy150; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy149; - goto yy93; + goto yy150; + goto yy94; } } - yy148: + yy149: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy150; + goto yy151; if (yych <= '/') - goto yy93; + goto yy94; + goto yy152; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy152; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy152; + goto yy94; } } - yy149: + yy150: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy152; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy151; - goto yy93; + goto yy152; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy151; + goto yy94; + goto yy152; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy151; - goto yy93; + goto yy152; + goto yy94; } } - yy150: + yy151: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy152; + goto yy153; if (yych <= '/') - goto yy93; + goto yy94; + goto yy154; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy154; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy154; + goto yy94; } } - yy151: + yy152: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy154; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy153; - goto yy93; + goto yy154; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy153; + goto yy94; + goto yy154; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy153; - goto yy93; + goto yy154; + goto yy94; } } - yy152: + yy153: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy154; + goto yy155; if (yych <= '/') - goto yy93; + goto yy94; + goto yy156; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy156; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy156; + goto yy94; } } - yy153: + yy154: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy156; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy155; - goto yy93; + goto yy156; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy155; + goto yy94; + goto yy156; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy155; - goto yy93; + goto yy156; + goto yy94; } } - yy154: + yy155: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy156; + goto yy157; if (yych <= '/') - goto yy93; + goto yy94; + goto yy158; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy158; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy158; + goto yy94; } } - yy155: + yy156: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy158; - goto yy99; - } else { + goto yy94; + if (yych >= '.') + goto yy95; + } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy157; - goto yy93; + goto yy158; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy157; + goto yy94; + goto yy158; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy157; - goto yy93; + goto yy158; + goto yy94; } } - yy156: + yy157: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy158; + goto yy159; if (yych <= '/') - goto yy93; + goto yy94; + goto yy160; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy160; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy160; + goto yy94; } } - yy157: + yy158: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy160; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy159; - goto yy93; + goto yy160; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy159; + goto yy94; + goto yy160; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy159; - goto yy93; + goto yy160; + goto yy94; } } - yy158: + yy159: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy160; + goto yy161; if (yych <= '/') - goto yy93; + goto yy94; + goto yy162; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy162; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy162; + goto yy94; } } - yy159: + yy160: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy162; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy161; - goto yy93; + goto yy162; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy161; + goto yy94; + goto yy162; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy161; - goto yy93; + goto yy162; + goto yy94; } } - yy160: + yy161: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy162; + goto yy163; if (yych <= '/') - goto yy93; + goto yy94; + goto yy164; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy164; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy164; + goto yy94; } } - yy161: + yy162: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy164; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy163; - goto yy93; + goto yy164; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy163; + goto yy94; + goto yy164; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy163; - goto yy93; + goto yy164; + goto yy94; } } - yy162: + yy163: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy164; + goto yy165; if (yych <= '/') - goto yy93; + goto yy94; + goto yy166; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy166; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy166; + goto yy94; } } - yy163: + yy164: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy166; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy165; - goto yy93; + goto yy166; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy165; + goto yy94; + goto yy166; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy165; - goto yy93; + goto yy166; + goto yy94; } } - yy164: + yy165: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy166; + goto yy167; if (yych <= '/') - goto yy93; + goto yy94; + goto yy168; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy168; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy168; + goto yy94; } } - yy165: + yy166: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy168; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy167; - goto yy93; + goto yy168; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy167; + goto yy94; + goto yy168; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy167; - goto yy93; + goto yy168; + goto yy94; } } - yy166: + yy167: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy168; + goto yy169; if (yych <= '/') - goto yy93; + goto yy94; + goto yy170; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy170; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy170; + goto yy94; } } - yy167: + yy168: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy170; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy169; - goto yy93; + goto yy170; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy169; + goto yy94; + goto yy170; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy169; - goto yy93; + goto yy170; + goto yy94; } } - yy168: + yy169: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy170; + goto yy171; if (yych <= '/') - goto yy93; + goto yy94; + goto yy172; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy172; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy172; + goto yy94; } } - yy169: + yy170: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy172; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy171; - goto yy93; + goto yy172; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy171; + goto yy94; + goto yy172; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy171; - goto yy93; + goto yy172; + goto yy94; } } - yy170: + yy171: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy172; + goto yy173; if (yych <= '/') - goto yy93; + goto yy94; + goto yy174; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy174; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy174; + goto yy94; } } - yy171: + yy172: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy174; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy173; - goto yy93; + goto yy174; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy173; + goto yy94; + goto yy174; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy173; - goto yy93; + goto yy174; + goto yy94; } } - yy172: + yy173: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy174; + goto yy175; if (yych <= '/') - goto yy93; + goto yy94; + goto yy176; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy176; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy176; + goto yy94; } } - yy173: + yy174: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy176; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy175; - goto yy93; + goto yy176; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy175; + goto yy94; + goto yy176; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy175; - goto yy93; + goto yy176; + goto yy94; } } - yy174: + yy175: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy176; + goto yy177; if (yych <= '/') - goto yy93; + goto yy94; + goto yy178; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy178; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy178; + goto yy94; } } - yy175: + yy176: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy178; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy177; - goto yy93; + goto yy178; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy177; + goto yy94; + goto yy178; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy177; - goto yy93; + goto yy178; + goto yy94; } } - yy176: + yy177: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy178; + goto yy179; if (yych <= '/') - goto yy93; + goto yy94; + goto yy180; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy180; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy180; + goto yy94; } } - yy177: + yy178: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy180; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy179; - goto yy93; + goto yy180; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy179; + goto yy94; + goto yy180; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy179; - goto yy93; + goto yy180; + goto yy94; } } - yy178: + yy179: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy180; + goto yy181; if (yych <= '/') - goto yy93; + goto yy94; + goto yy182; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy182; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy182; + goto yy94; } } - yy179: + yy180: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy182; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy181; - goto yy93; + goto yy182; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy181; + goto yy94; + goto yy182; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy181; - goto yy93; + goto yy182; + goto yy94; } } - yy180: + yy181: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy182; + goto yy183; if (yych <= '/') - goto yy93; + goto yy94; + goto yy184; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy184; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy184; + goto yy94; } } - yy181: + yy182: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy184; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy183; - goto yy93; + goto yy184; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy183; + goto yy94; + goto yy184; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy183; - goto yy93; + goto yy184; + goto yy94; } } - yy182: + yy183: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy184; + goto yy185; if (yych <= '/') - goto yy93; + goto yy94; + goto yy186; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy186; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy186; + goto yy94; } } - yy183: + yy184: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy186; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy185; - goto yy93; + goto yy186; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy185; + goto yy94; + goto yy186; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy185; - goto yy93; + goto yy186; + goto yy94; } } - yy184: + yy185: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy186; + goto yy187; if (yych <= '/') - goto yy93; + goto yy94; + goto yy188; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy188; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy188; + goto yy94; } } - yy185: + yy186: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy188; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy187; - goto yy93; + goto yy188; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy187; + goto yy94; + goto yy188; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy187; - goto yy93; + goto yy188; + goto yy94; } } - yy186: + yy187: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy188; + goto yy189; if (yych <= '/') - goto yy93; + goto yy94; + goto yy190; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy190; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy190; + goto yy94; } } - yy187: + yy188: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy190; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy189; - goto yy93; + goto yy190; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy189; + goto yy94; + goto yy190; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy189; - goto yy93; + goto yy190; + goto yy94; } } - yy188: + yy189: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy190; + goto yy191; if (yych <= '/') - goto yy93; + goto yy94; + goto yy192; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy192; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy192; + goto yy94; } } - yy189: + yy190: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy192; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy191; - goto yy93; + goto yy192; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy191; + goto yy94; + goto yy192; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy191; - goto yy93; + goto yy192; + goto yy94; } } - yy190: + yy191: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy192; + goto yy193; if (yych <= '/') - goto yy93; + goto yy94; + goto yy194; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy194; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy194; + goto yy94; } } - yy191: + yy192: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy194; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy193; - goto yy93; + goto yy194; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy193; + goto yy94; + goto yy194; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy193; - goto yy93; + goto yy194; + goto yy94; } } - yy192: + yy193: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy194; + goto yy195; if (yych <= '/') - goto yy93; + goto yy94; + goto yy196; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy196; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy196; + goto yy94; } } - yy193: + yy194: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy196; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy195; - goto yy93; + goto yy196; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy195; + goto yy94; + goto yy196; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy195; - goto yy93; + goto yy196; + goto yy94; } } - yy194: + yy195: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy196; + goto yy197; if (yych <= '/') - goto yy93; + goto yy94; + goto yy198; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy198; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy198; + goto yy94; } } - yy195: + yy196: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy198; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy197; - goto yy93; + goto yy198; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy197; + goto yy94; + goto yy198; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy197; - goto yy93; + goto yy198; + goto yy94; } } - yy196: + yy197: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy198; + goto yy199; if (yych <= '/') - goto yy93; + goto yy94; + goto yy200; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy200; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy200; + goto yy94; } } - yy197: + yy198: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy200; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy199; - goto yy93; + goto yy200; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy199; + goto yy94; + goto yy200; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy199; - goto yy93; + goto yy200; + goto yy94; } } - yy198: + yy199: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy200; + goto yy201; if (yych <= '/') - goto yy93; + goto yy94; + goto yy202; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy202; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy202; + goto yy94; } } - yy199: + yy200: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy202; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy201; - goto yy93; + goto yy202; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy201; + goto yy94; + goto yy202; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy201; - goto yy93; + goto yy202; + goto yy94; } } - yy200: + yy201: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy202; + goto yy203; if (yych <= '/') - goto yy93; + goto yy94; + goto yy204; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy204; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy204; + goto yy94; } } - yy201: + yy202: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy204; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy203; - goto yy93; + goto yy204; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy203; + goto yy94; + goto yy204; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy203; - goto yy93; + goto yy204; + goto yy94; } } - yy202: + yy203: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy204; + goto yy205; if (yych <= '/') - goto yy93; + goto yy94; + goto yy206; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy206; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy206; + goto yy94; } } - yy203: + yy204: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy206; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy205; - goto yy93; + goto yy206; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy205; + goto yy94; + goto yy206; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy205; - goto yy93; + goto yy206; + goto yy94; } } - yy204: + yy205: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy206; + goto yy207; if (yych <= '/') - goto yy93; + goto yy94; + goto yy208; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy208; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy208; + goto yy94; } } - yy205: + yy206: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy208; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy207; - goto yy93; + goto yy208; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy207; + goto yy94; + goto yy208; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy207; - goto yy93; + goto yy208; + goto yy94; } } - yy206: + yy207: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy208; + goto yy209; if (yych <= '/') - goto yy93; + goto yy94; + goto yy210; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy210; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy210; + goto yy94; } } - yy207: + yy208: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy210; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy209; - goto yy93; + goto yy210; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy209; + goto yy94; + goto yy210; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy209; - goto yy93; + goto yy210; + goto yy94; } } - yy208: + yy209: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy210; + goto yy211; if (yych <= '/') - goto yy93; + goto yy94; + goto yy212; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy212; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy212; + goto yy94; } } - yy209: + yy210: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy212; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy211; - goto yy93; + goto yy212; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy211; + goto yy94; + goto yy212; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy211; - goto yy93; + goto yy212; + goto yy94; } } - yy210: + yy211: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy212; + goto yy213; if (yych <= '/') - goto yy93; + goto yy94; + goto yy214; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy214; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy214; + goto yy94; } } - yy211: + yy212: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy214; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy213; - goto yy93; + goto yy214; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy213; + goto yy94; + goto yy214; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy213; - goto yy93; + goto yy214; + goto yy94; } } - yy212: + yy213: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy214; + goto yy215; if (yych <= '/') - goto yy93; + goto yy94; + goto yy216; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy216; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy216; + goto yy94; } } - yy213: + yy214: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy216; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy215; - goto yy93; + goto yy216; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy215; + goto yy94; + goto yy216; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy215; - goto yy93; + goto yy216; + goto yy94; } } - yy214: + yy215: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy216; + goto yy217; if (yych <= '/') - goto yy93; + goto yy94; + goto yy218; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy218; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy218; + goto yy94; } } - yy215: + yy216: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy218; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy217; - goto yy93; + goto yy218; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy217; + goto yy94; + goto yy218; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy217; - goto yy93; + goto yy218; + goto yy94; } } - yy216: + yy217: ++p; yych = *p; if (yych <= '9') { if (yych == '-') - goto yy218; + goto yy219; if (yych <= '/') - goto yy93; + goto yy94; + goto yy220; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy93; + goto yy94; + goto yy220; } else { if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + goto yy94; + if (yych <= 'z') + goto yy220; + goto yy94; } } - yy217: + yy218: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy220; - goto yy99; + goto yy94; + if (yych >= '.') + goto yy95; } else { if (yych <= '/') - goto yy93; + goto yy94; if (yych <= '9') - goto yy219; - goto yy93; + goto yy220; + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy99; if (yych <= '@') - goto yy93; - goto yy219; + goto yy94; + goto yy220; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych <= 'z') - goto yy219; - goto yy93; + goto yy220; + goto yy94; } } - yy218: + yy219: ++p; yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy220; + if (yych <= '@') { if (yych <= '/') - goto yy93; + goto yy94; + if (yych <= '9') + goto yy221; + goto yy94; } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } + if (yych <= 'Z') + goto yy221; + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy221; + goto yy94; } - yy219: + yy220: ++p; yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= ',') - goto yy93; if (yych <= '-') - goto yy222; - goto yy99; + goto yy94; + goto yy95; } else { if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy221; - goto yy93; + goto yy94; + if (yych >= ':') + goto yy94; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy221; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy221; - goto yy93; - } - } - yy220: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy222; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { + goto yy99; if (yych <= '@') - goto yy93; + goto yy94; } else { if (yych <= '`') - goto yy93; + goto yy94; if (yych >= '{') - goto yy93; + goto yy94; } } yy221: ++p; yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy224; - goto yy99; + if (yych == '.') + goto yy95; + if (yych == '>') + goto yy99; + goto yy94; + } +} + +// Try to match an HTML tag after first <, returning num of chars matched. +bufsize_t _scan_html_tag(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + /* table 1 .. 8: 0 */ + 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250, + 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* table 9 .. 11: 256 */ + 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 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, + }; + yych = *p; + if (yych <= '>') { + if (yych <= '!') { + if (yych >= '!') + goto yy226; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy223; - goto yy93; + if (yych == '/') + goto yy227; } } else { if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy223; + if (yych <= '?') + goto yy228; + if (yych >= 'A') + goto yy229; } else { if (yych <= '`') - goto yy93; + goto yy224; if (yych <= 'z') - goto yy223; - goto yy93; + goto yy229; } } - yy222: + yy224: ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy224; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } + yy225 : { return 0; } + yy226: + yych = *(marker = ++p); + if (yybm[256 + yych] & 32) { + goto yy232; + } + if (yych == '-') + goto yy230; + if (yych <= '@') + goto yy225; + if (yych <= '[') + goto yy234; + goto yy225; + yy227: + yych = *(marker = ++p); + if (yych <= '@') + goto yy225; + if (yych <= 'Z') + goto yy235; + if (yych <= '`') + goto yy225; + if (yych <= 'z') + goto yy235; + goto yy225; + yy228: + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy225; + if (yych <= 0x7F) + goto yy238; + if (yych <= 0xC1) + goto yy225; + if (yych <= 0xF4) + goto yy238; + goto yy225; + yy229: + yych = *(marker = ++p); + if (yybm[0 + yych] & 1) { + goto yy247; } - yy223: - ++p; - yych = *p; if (yych <= '=') { if (yych <= '.') { - if (yych <= '-') - goto yy93; - goto yy99; + if (yych == '-') + goto yy249; + goto yy225; } else { if (yych <= '/') - goto yy93; + goto yy251; if (yych <= '9') - goto yy225; - goto yy93; + goto yy249; + goto yy225; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy100; + goto yy252; if (yych <= '@') - goto yy93; - goto yy225; + goto yy225; + goto yy249; } else { if (yych <= '`') - goto yy93; - if (yych <= 'z') goto yy225; - goto yy93; + if (yych <= 'z') + goto yy249; + goto yy225; } } - yy224: + yy230: + yych = *++p; + if (yych == '-') + goto yy254; + yy231: + p = marker; + goto yy225; + yy232: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy93; - if (yych >= ':') - goto yy93; + if (yybm[256 + yych] & 32) { + goto yy232; + } + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy255; + if (yych == ' ') + goto yy255; + goto yy231; + yy234: + yych = *++p; + if (yych == 'C') + goto yy257; + if (yych == 'c') + goto yy257; + goto yy231; + yy235: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy235; + } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy258; + goto yy231; } else { - if (yych <= 'Z') - goto yy225; - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; + if (yych <= ' ') + goto yy258; + if (yych == '>') + goto yy252; + goto yy231; } - yy225: + yy237: ++p; yych = *p; - if (yych == '.') - goto yy99; - if (yych == '>') - goto yy100; - goto yy93; - yy226: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy229; - goto yy99; + yy238: + if (yybm[256 + yych] & 128) { + goto yy237; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych >= '@') + goto yy231; } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy228; - goto yy93; + if (yych <= 0xDF) + goto yy240; + if (yych <= 0xE0) + goto yy241; + goto yy242; } } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy228; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy243; + if (yych <= 0xEF) + goto yy242; + goto yy244; } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy228; - goto yy93; - } - } - yy227: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy229; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy228: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy231; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy230; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy230; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy230; - goto yy93; - } - } - yy229: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy231; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy230: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy233; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy232; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy232; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy232; - goto yy93; - } - } - yy231: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy233; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy232: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy235; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy234; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy234; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy234; - goto yy93; - } - } - yy233: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy235; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy234: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy237; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy236; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy236; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy236; - goto yy93; - } - } - yy235: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy237; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy236: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy239; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy238; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy238; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy238; - goto yy93; - } - } - yy237: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy239; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy238: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy241; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy240; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy240; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy240; - goto yy93; - } - } - yy239: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy241; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy240: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy243; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy242; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy242; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy242; - goto yy93; - } - } - yy241: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy243; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy242: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy245; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy244; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy244; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy244; - goto yy93; - } - } - yy243: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy245; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy244: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy247; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy246; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy246; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy246; - goto yy93; - } - } - yy245: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy247; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy246: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy249; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy248; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy248; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy248; - goto yy93; - } - } - yy247: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy249; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy248: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy251; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy250; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy250; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy250; - goto yy93; - } - } - yy249: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy251; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy250: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy253; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy252; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy252; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy252; - goto yy93; - } - } - yy251: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy253; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy252: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy255; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy254; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy254; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy254; - goto yy93; - } - } - yy253: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy255; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy254: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy257; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy256; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy256; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy256; - goto yy93; - } - } - yy255: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy257; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy256: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy259; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy258; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy258; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy258; - goto yy93; - } - } - yy257: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy259; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy258: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy261; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy260; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy260; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy260; - goto yy93; - } - } - yy259: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy261; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy260: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy263; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy262; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy262; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy262; - goto yy93; - } - } - yy261: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy263; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy262: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy265; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy264; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy264; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy264; - goto yy93; - } - } - yy263: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy265; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy264: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy267; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy266; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy266; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy266; - goto yy93; - } - } - yy265: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy267; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy266: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy269; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy268; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy268; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy268; - goto yy93; - } - } - yy267: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy269; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy268: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy271; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy270; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy270; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy270; - goto yy93; - } - } - yy269: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy271; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy270: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy273; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy272; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy272; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy272; - goto yy93; - } - } - yy271: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy273; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy272: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy275; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy274; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy274; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy274; - goto yy93; - } - } - yy273: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy275; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy274: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy277; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy276; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy276; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy276; - goto yy93; - } - } - yy275: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy277; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy276: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy279; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy278; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy278; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy278; - goto yy93; - } - } - yy277: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy279; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy278: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy281; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy280; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy280; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy280; - goto yy93; - } - } - yy279: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy281; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy280: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy283; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy282; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy282; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy282; - goto yy93; - } - } - yy281: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy283; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy282: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy285; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy284; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy284; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy284; - goto yy93; - } - } - yy283: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy285; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy284: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy287; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy286; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy286; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy286; - goto yy93; - } - } - yy285: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy287; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy286: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy289; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy288; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy288; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy288; - goto yy93; - } - } - yy287: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy289; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy288: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy291; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy290; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy290; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy290; - goto yy93; - } - } - yy289: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy291; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy290: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy293; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy292; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy292; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy292; - goto yy93; - } - } - yy291: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy293; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy292: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy295; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy294; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy294; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy294; - goto yy93; - } - } - yy293: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy295; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy294: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy297; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy296; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy296; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy296; - goto yy93; - } - } - yy295: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy297; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy296: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy299; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy298; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy298; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy298; - goto yy93; - } - } - yy297: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy299; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy298: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy301; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy300; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy300; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy300; - goto yy93; - } - } - yy299: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy301; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy300: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy303; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy302; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy302; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy302; - goto yy93; - } - } - yy301: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy303; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy302: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy305; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy304; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy304; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy304; - goto yy93; - } - } - yy303: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy305; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy304: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy307; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy306; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy306; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy306; - goto yy93; - } - } - yy305: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy307; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy306: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy309; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy308; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy308; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy308; - goto yy93; - } - } - yy307: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy309; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy308: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy311; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy310; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy310; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy310; - goto yy93; - } - } - yy309: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy311; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy310: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy313; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy312; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy312; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy312; - goto yy93; - } - } - yy311: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy313; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy312: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy315; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy314; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy314; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy314; - goto yy93; - } - } - yy313: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy315; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy314: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy317; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy316; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy316; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy316; - goto yy93; - } - } - yy315: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy317; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy316: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy319; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy318; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy318; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy318; - goto yy93; - } - } - yy317: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy319; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy318: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy321; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy320; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy320; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy320; - goto yy93; - } - } - yy319: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy321; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy320: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy323; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy322; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy322; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy322; - goto yy93; - } - } - yy321: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy323; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy322: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy325; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy324; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy324; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy324; - goto yy93; - } - } - yy323: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy325; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy324: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy327; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy326; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy326; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy326; - goto yy93; - } - } - yy325: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy327; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy326: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy329; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy328; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy328; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy328; - goto yy93; - } - } - yy327: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy329; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy328: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy331; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy330; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy330; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy330; - goto yy93; - } - } - yy329: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy331; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy330: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy333; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy332; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy332; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy332; - goto yy93; - } - } - yy331: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy333; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy332: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy335; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy334; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy334; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy334; - goto yy93; - } - } - yy333: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy335; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy334: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy337; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy336; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy336; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy336; - goto yy93; - } - } - yy335: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy337; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy336: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy339; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy338; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy338; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy338; - goto yy93; - } - } - yy337: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy339; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy338: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy341; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy340; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy340; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy340; - goto yy93; - } - } - yy339: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy341; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy340: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy343; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy342; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy342; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy342; - goto yy93; - } - } - yy341: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy343; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy342: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy93; - if (yych <= '-') - goto yy345; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy344; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy344; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy344; - goto yy93; - } - } - yy343: - yych = *++p; - if (yych <= '9') { - if (yych == '-') - goto yy345; - if (yych <= '/') - goto yy93; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy93; - } else { - if (yych <= '`') - goto yy93; - if (yych >= '{') - goto yy93; - } - } - yy344: - yych = *++p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= '-') - goto yy93; - goto yy99; - } else { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy225; - goto yy93; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy100; - if (yych <= '@') - goto yy93; - goto yy225; - } else { - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy225; - goto yy93; - } - } - yy345: - ++p; - if ((yych = *p) <= '@') { - if (yych <= '/') - goto yy93; - if (yych <= '9') - goto yy225; - goto yy93; - } else { - if (yych <= 'Z') - goto yy225; - if (yych <= '`') - goto yy93; - if (yych <= 'z') - goto yy225; - goto yy93; - } - } -} - -// Try to match an HTML tag after first <, returning num of chars matched. -bufsize_t _scan_html_tag(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - /* table 1 .. 8: 0 */ - 0, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238, 238, 238, 238, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 238, 239, 234, 239, 239, 239, 239, 236, 239, 239, - 239, 239, 239, 207, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 238, 238, 174, 231, 239, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 239, 239, 111, 239, 239, 238, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - /* table 9 .. 11: 256 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, - 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, 160, 128, 0, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 128, 0, 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 0, 0, 0, 0, 128, 0, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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 = *p; - if (yych <= '>') { - if (yych <= '!') { - if (yych >= '!') - goto yy350; - } else { - if (yych == '/') - goto yy351; - } - } else { - if (yych <= 'Z') { - if (yych <= '?') - goto yy352; - if (yych >= 'A') - goto yy353; - } else { - if (yych <= '`') - goto yy348; - if (yych <= 'z') - goto yy353; - } - } - yy348: - ++p; - yy349 : { return 0; } - yy350: - yych = *(marker = ++p); - if (yybm[0 + yych] & 16) { - goto yy426; - } - if (yych == '-') - goto yy428; - if (yych <= '@') - goto yy349; - if (yych <= '[') - goto yy425; - goto yy349; - yy351: - yych = *(marker = ++p); - if (yych <= '@') - goto yy349; - if (yych <= 'Z') - goto yy421; - if (yych <= '`') - goto yy349; - if (yych <= 'z') - goto yy421; - goto yy349; - yy352: - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy349; - if (yych <= 0x7F) - goto yy405; - if (yych <= 0xC1) - goto yy349; - if (yych <= 0xF4) - goto yy405; - goto yy349; - yy353: - yych = *(marker = ++p); - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych != '-') - goto yy349; - } else { - if (yych <= '/') - goto yy359; - if (yych >= ':') - goto yy349; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy360; - if (yych <= '@') - goto yy349; - } else { - if (yych <= '`') - goto yy349; - if (yych >= '{') - goto yy349; - } - } - yy354: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy354; - } else { - if (yych <= '/') - goto yy359; - if (yych <= '9') - goto yy354; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy360; - if (yych >= 'A') - goto yy354; - } else { - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy354; - } - } - yy356: - p = marker; - goto yy349; - yy357: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy357; - } - if (yych <= '>') { - if (yych <= '9') { - if (yych != '/') - goto yy356; - } else { - if (yych <= ':') - goto yy362; - if (yych <= '=') - goto yy356; - goto yy360; - } - } else { - if (yych <= '^') { - if (yych <= '@') - goto yy356; - if (yych <= 'Z') - goto yy362; - goto yy356; - } else { - if (yych == '`') - goto yy356; - if (yych <= 'z') - goto yy362; - goto yy356; - } - } - yy359: - yych = *++p; - if (yych != '>') - goto yy356; - yy360: - ++p; - { return (bufsize_t)(p - start); } - yy362: - ++p; - yych = *p; - if (yybm[256 + yych] & 128) { - goto yy362; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy356; - } else { - if (yych != ' ') - goto yy356; - } - } else { - if (yych <= '<') { - if (yych <= '/') - goto yy359; - goto yy356; - } else { - if (yych <= '=') - goto yy366; - if (yych <= '>') - goto yy360; - goto yy356; - } - } - yy364: - ++p; - yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy356; - if (yych <= '\r') - goto yy364; - if (yych <= 0x1F) - goto yy356; - goto yy364; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy356; - goto yy359; - } else { - if (yych == ':') - goto yy362; - goto yy356; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') - goto yy366; - if (yych <= '>') - goto yy360; - if (yych <= '@') - goto yy356; - goto yy362; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy356; - goto yy362; - } else { - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy362; - goto yy356; - } - } - } - yy366: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy368; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) - goto yy356; - if (yych >= '!') - goto yy379; - } else { - if (yych <= '\'') - goto yy377; - if (yych <= 0xC1) - goto yy356; - if (yych <= 0xDF) - goto yy370; - goto yy371; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy368; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) - goto yy356; - if (yych <= ' ') - goto yy402; - if (yych <= '"') - goto yy379; - goto yy377; - } else { - if (yych == '>') - goto yy360; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; if (yych <= 0xF3) - goto yy374; + goto yy245; if (yych <= 0xF4) - goto yy375; - goto yy356; + goto yy246; + goto yy231; } } - yy368: ++p; yych = *p; - if (yybm[0 + yych] & 1) { - goto yy368; - } if (yych <= 0xE0) { - if (yych <= '=') { + if (yych <= '>') { if (yych <= 0x00) - goto yy356; - if (yych <= ' ') - goto yy396; - goto yy356; + goto yy231; + if (yych <= '=') + goto yy237; + goto yy252; } else { - if (yych <= '>') - goto yy360; + if (yych <= 0x7F) + goto yy237; if (yych <= 0xC1) - goto yy356; - if (yych >= 0xE0) - goto yy371; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } - yy370: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy368; - goto yy356; - yy371: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy370; - goto yy356; - yy372: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy370; - goto yy356; - yy373: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy372; - goto yy356; - yy374: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy372; - goto yy356; - yy375: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy372; - goto yy356; - yy376: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy370; - goto yy356; - yy377: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy377; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= '\'') - goto yy388; - goto yy356; - } else { - if (yych <= 0xDF) - goto yy389; - if (yych <= 0xE0) - goto yy390; - goto yy391; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy395; - if (yych <= 0xEF) - goto yy391; - goto yy392; - } else { - if (yych <= 0xF3) - goto yy393; - if (yych <= 0xF4) - goto yy394; - goto yy356; - } - } - yy379: - ++p; - yych = *p; - if (yybm[0 + yych] & 4) { - goto yy379; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= '"') - goto yy388; - goto yy356; - } else { - if (yych <= 0xDF) - goto yy381; - if (yych <= 0xE0) - goto yy382; - goto yy383; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy387; - if (yych <= 0xEF) - goto yy383; - goto yy384; - } else { - if (yych <= 0xF3) - goto yy385; - if (yych <= 0xF4) - goto yy386; - goto yy356; - } - } - yy381: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy379; - goto yy356; - yy382: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy381; - goto yy356; - yy383: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy381; - goto yy356; - yy384: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy383; - goto yy356; - yy385: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy383; - goto yy356; - yy386: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy383; - goto yy356; - yy387: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy381; - goto yy356; - yy388: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy357; + goto yy231; + if (yych >= 0xE0) + goto yy241; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy243; + goto yy242; + } else { + if (yych <= 0xF0) + goto yy244; + if (yych <= 0xF3) + goto yy245; + if (yych <= 0xF4) + goto yy246; + goto yy231; + } } - if (yych == '/') - goto yy359; - if (yych == '>') - goto yy360; - goto yy356; - yy389: + yy240: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy377; - goto yy356; - yy390: + goto yy237; + goto yy231; + yy241: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy389; - goto yy356; - yy391: + goto yy240; + goto yy231; + yy242: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy389; - goto yy356; - yy392: + goto yy240; + goto yy231; + yy243: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy240; + goto yy231; + yy244: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy391; - goto yy356; - yy393: + goto yy242; + goto yy231; + yy245: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy391; - goto yy356; - yy394: + goto yy242; + goto yy231; + yy246: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy391; - goto yy356; - yy395: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy389; - goto yy356; - yy396: + goto yy242; + goto yy231; + yy247: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - goto yy396; - } else { - if (yych == ' ') - goto yy396; - if (yych <= '!') - goto yy368; - goto yy356; - } + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '>') { + if (yych <= '9') { + if (yych == '/') + goto yy251; + goto yy231; } else { - if (yych <= ':') { - if (yych == '\'') - goto yy356; - if (yych <= '9') - goto yy368; - } else { - if (yych <= ';') - goto yy368; - if (yych <= '=') - goto yy356; - if (yych <= '>') - goto yy360; - goto yy368; - } + if (yych <= ':') + goto yy260; + if (yych <= '=') + goto yy231; + goto yy252; } } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - if (yych >= '`') - goto yy356; - } else { - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } + if (yych <= '^') { + if (yych <= '@') + goto yy231; + if (yych <= 'Z') + goto yy260; + goto yy231; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } + if (yych == '`') + goto yy231; + if (yych <= 'z') + goto yy260; + goto yy231; } } - yy398: + yy249: ++p; yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - if (yych >= 0x0E) - goto yy368; - } else { - if (yych <= ' ') - goto yy400; - if (yych == '"') - goto yy356; - goto yy368; - } + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy249; + goto yy231; } else { - if (yych <= '/') { - if (yych <= '\'') - goto yy356; - if (yych <= ',') - goto yy368; - if (yych <= '.') - goto yy398; - goto yy368; - } else { - if (yych <= ';') { - if (yych <= ':') - goto yy398; - goto yy368; - } else { - if (yych <= '<') - goto yy356; - if (yych <= '=') - goto yy366; - goto yy360; - } - } + if (yych <= '/') + goto yy251; + if (yych <= '9') + goto yy249; + goto yy231; } } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') - goto yy368; - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - goto yy398; - } else { - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - goto yy356; - } + if (yych <= 'Z') { + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy231; + goto yy249; } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy370; - if (yych <= 0xE0) - goto yy371; - if (yych <= 0xEC) - goto yy372; - goto yy376; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy372; - goto yy373; - } else { - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } - } + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy249; + goto yy231; } } - yy400: + yy251: + yych = *++p; + if (yych != '>') + goto yy231; + yy252: + ++p; + { return (bufsize_t)(p - start); } + yy254: + yych = *++p; + if (yych == '-') + goto yy264; + if (yych == '>') + goto yy231; + goto yy263; + yy255: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - if (yych <= '\r') - goto yy400; - goto yy368; - } else { - if (yych <= ' ') - goto yy400; - if (yych == '"') - goto yy356; - goto yy368; - } + if (yybm[0 + yych] & 2) { + goto yy255; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '>') + goto yy252; + goto yy231; } else { - if (yych <= ';') { - if (yych <= '\'') - goto yy356; - if (yych == ':') - goto yy398; - goto yy368; - } else { - if (yych <= '<') - goto yy356; - if (yych <= '=') - goto yy366; - if (yych <= '>') - goto yy360; - goto yy368; - } + if (yych <= 0xDF) + goto yy272; + if (yych <= 0xE0) + goto yy273; + goto yy274; } } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - if (yych <= '_') - goto yy398; - goto yy356; - } else { - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy275; + if (yych <= 0xEF) + goto yy274; + goto yy276; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } + if (yych <= 0xF3) + goto yy277; + if (yych <= 0xF4) + goto yy278; + goto yy231; } } - yy402: + yy257: + yych = *++p; + if (yych == 'D') + goto yy279; + if (yych == 'd') + goto yy279; + goto yy231; + yy258: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy368; - goto yy402; - } else { - if (yych == ' ') - goto yy402; - if (yych <= '!') - goto yy368; - goto yy379; - } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy258; + goto yy231; + } else { + if (yych <= ' ') + goto yy258; + if (yych == '>') + goto yy252; + goto yy231; + } + yy260: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy260; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy231; + goto yy280; } else { - if (yych <= ':') { - if (yych == '\'') - goto yy377; - if (yych <= '9') - goto yy368; - goto yy398; - } else { - if (yych <= ';') - goto yy368; - if (yych <= '=') - goto yy356; - if (yych <= '>') - goto yy360; - goto yy368; - } + if (yych == ' ') + goto yy280; + goto yy231; } } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy398; - if (yych <= '^') - goto yy368; - if (yych <= '_') - goto yy398; - goto yy356; - } else { - if (yych <= 'z') - goto yy398; - if (yych <= 0x7F) - goto yy368; - if (yych <= 0xC1) - goto yy356; - goto yy370; - } + if (yych <= '<') { + if (yych <= '/') + goto yy251; + goto yy231; } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy371; - if (yych == 0xED) - goto yy376; - goto yy372; - } else { - if (yych <= 0xF0) - goto yy373; - if (yych <= 0xF3) - goto yy374; - if (yych <= 0xF4) - goto yy375; - goto yy356; - } + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + goto yy231; } } - yy404: + yy262: ++p; yych = *p; - yy405: + yy263: if (yybm[0 + yych] & 8) { - goto yy404; + goto yy262; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '?') - goto yy413; - goto yy356; + goto yy231; + if (yych <= '-') + goto yy284; + goto yy231; } else { if (yych <= 0xDF) - goto yy406; + goto yy265; if (yych <= 0xE0) - goto yy407; - goto yy408; + goto yy266; + goto yy267; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy412; + goto yy268; if (yych <= 0xEF) - goto yy408; - goto yy409; + goto yy267; + goto yy269; } else { if (yych <= 0xF3) - goto yy410; + goto yy270; if (yych <= 0xF4) - goto yy411; - goto yy356; + goto yy271; + goto yy231; } } - yy406: + yy264: + yych = *++p; + if (yych == '-') + goto yy251; + if (yych == '>') + goto yy231; + goto yy263; + yy265: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy404; - goto yy356; - yy407: + goto yy262; + goto yy231; + yy266: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy406; - goto yy356; - yy408: + goto yy265; + goto yy231; + yy267: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy406; - goto yy356; - yy409: + goto yy265; + goto yy231; + yy268: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy265; + goto yy231; + yy269: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy408; - goto yy356; - yy410: + goto yy267; + goto yy231; + yy270: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy408; - goto yy356; - yy411: + goto yy267; + goto yy231; + yy271: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy408; - goto yy356; - yy412: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy406; - goto yy356; - yy413: - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy356; - if (yych <= '=') - goto yy404; - goto yy360; - } else { - if (yych <= 0x7F) - goto yy404; - if (yych <= 0xC1) - goto yy356; - if (yych >= 0xE0) - goto yy415; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy420; - goto yy416; - } else { - if (yych <= 0xF0) - goto yy417; - if (yych <= 0xF3) - goto yy418; - if (yych <= 0xF4) - goto yy419; - goto yy356; - } - } - yy414: + goto yy267; + goto yy231; + yy272: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy404; - goto yy356; - yy415: + goto yy255; + goto yy231; + yy273: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy414; - goto yy356; - yy416: + goto yy272; + goto yy231; + yy274: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy414; - goto yy356; - yy417: + goto yy272; + goto yy231; + yy275: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy272; + goto yy231; + yy276: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy416; - goto yy356; - yy418: + goto yy274; + goto yy231; + yy277: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy416; - goto yy356; - yy419: + goto yy274; + goto yy231; + yy278: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy416; - goto yy356; - yy420: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy414; - goto yy356; - yy421: + goto yy274; + goto yy231; + yy279: + yych = *++p; + if (yych == 'A') + goto yy285; + if (yych == 'a') + goto yy285; + goto yy231; + yy280: ++p; yych = *p; - if (yych <= '/') { - if (yych <= 0x1F) { + if (yych <= '<') { + if (yych <= ' ') { if (yych <= 0x08) - goto yy356; - if (yych >= 0x0E) - goto yy356; + goto yy231; + if (yych <= '\r') + goto yy280; + if (yych <= 0x1F) + goto yy231; + goto yy280; } else { - if (yych <= ' ') - goto yy423; - if (yych == '-') - goto yy421; - goto yy356; + if (yych <= '/') { + if (yych <= '.') + goto yy231; + goto yy251; + } else { + if (yych == ':') + goto yy260; + goto yy231; + } } } else { - if (yych <= '@') { - if (yych <= '9') - goto yy421; - if (yych == '>') - goto yy360; - goto yy356; + if (yych <= 'Z') { + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy231; + goto yy260; } else { - if (yych <= 'Z') - goto yy421; - if (yych <= '`') - goto yy356; - if (yych <= 'z') - goto yy421; - goto yy356; + if (yych <= '_') { + if (yych <= '^') + goto yy231; + goto yy260; + } else { + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy260; + goto yy231; + } } } - yy423: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy356; - if (yych <= '\r') - goto yy423; - goto yy356; - } else { - if (yych <= ' ') - goto yy423; - if (yych == '>') - goto yy360; - goto yy356; - } - yy425: - yych = *++p; - if (yych == 'C') - goto yy461; - if (yych == 'c') - goto yy461; - goto yy356; - yy426: + yy282: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy426; + goto yy286; } - if (yych <= 0x08) - goto yy356; - if (yych <= '\r') - goto yy450; - if (yych == ' ') - goto yy450; - goto yy356; - yy428: - yych = *++p; - if (yych != '-') - goto yy356; - yych = *++p; if (yych <= 0xE0) { - if (yych <= '=') { - if (yych != '-') - goto yy432; + if (yych <= '"') { + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy282; + goto yy288; } else { - if (yych <= '>') - goto yy356; + if (yych <= '\'') + goto yy290; if (yych <= 0xC1) - goto yy432; + goto yy231; if (yych <= 0xDF) - goto yy433; - goto yy434; + goto yy292; + goto yy293; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy439; - goto yy435; + goto yy295; + goto yy294; } else { if (yych <= 0xF0) - goto yy436; + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + yy284: + ++p; + yych = *p; + if (yybm[0 + yych] & 8) { + goto yy262; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '-') + goto yy251; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy265; + if (yych <= 0xE0) + goto yy266; + goto yy267; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy268; + if (yych <= 0xEF) + goto yy267; + goto yy269; + } else { if (yych <= 0xF3) - goto yy437; + goto yy270; if (yych <= 0xF4) - goto yy438; - goto yy432; + goto yy271; + goto yy231; } } + yy285: yych = *++p; + if (yych == 'T') + goto yy299; + if (yych == 't') + goto yy299; + goto yy231; + yy286: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy286; + } if (yych <= 0xE0) { if (yych <= '=') { - if (yych == '-') - goto yy449; - goto yy432; + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy247; + goto yy231; } else { if (yych <= '>') - goto yy356; + goto yy252; if (yych <= 0xC1) - goto yy432; + goto yy231; if (yych <= 0xDF) - goto yy433; - goto yy434; + goto yy292; + goto yy293; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy439; - goto yy435; + goto yy295; + goto yy294; } else { if (yych <= 0xF0) - goto yy436; + goto yy296; if (yych <= 0xF3) - goto yy437; + goto yy297; if (yych <= 0xF4) - goto yy438; - goto yy432; + goto yy298; + goto yy231; } } - yy431: + yy288: ++p; yych = *p; - yy432: if (yybm[0 + yych] & 32) { - goto yy431; + goto yy288; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '-') - goto yy440; - goto yy356; + goto yy231; + if (yych <= '"') + goto yy300; + goto yy231; } else { if (yych <= 0xDF) - goto yy441; + goto yy301; if (yych <= 0xE0) - goto yy442; - goto yy443; + goto yy302; + goto yy303; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy447; + goto yy304; if (yych <= 0xEF) - goto yy443; - goto yy444; + goto yy303; + goto yy305; } else { if (yych <= 0xF3) - goto yy445; + goto yy306; if (yych <= 0xF4) - goto yy446; - goto yy356; + goto yy307; + goto yy231; } } - yy433: - yych = *++p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy431; - goto yy356; - yy434: - yych = *++p; - if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy433; - goto yy356; - yy435: - yych = *++p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy433; - goto yy356; - yy436: - yych = *++p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy435; - goto yy356; - yy437: - yych = *++p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy435; - goto yy356; - yy438: - yych = *++p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy435; - goto yy356; - yy439: - yych = *++p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy433; - goto yy356; - yy440: + yy290: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy431; + if (yybm[0 + yych] & 64) { + goto yy290; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '-') - goto yy448; - goto yy356; + goto yy231; + if (yych <= '\'') + goto yy300; + goto yy231; } else { if (yych <= 0xDF) - goto yy441; + goto yy308; if (yych <= 0xE0) - goto yy442; - goto yy443; + goto yy309; + goto yy310; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy447; + goto yy311; if (yych <= 0xEF) - goto yy443; - goto yy444; + goto yy310; + goto yy312; } else { if (yych <= 0xF3) - goto yy445; + goto yy313; if (yych <= 0xF4) - goto yy446; - goto yy356; + goto yy314; + goto yy231; } } - yy441: + yy292: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy431; - goto yy356; - yy442: + goto yy286; + goto yy231; + yy293: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy441; - goto yy356; - yy443: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy441; - goto yy356; - yy444: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; - if (yych <= 0xBF) - goto yy443; - goto yy356; - yy445: + goto yy292; + goto yy231; + yy294: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy443; - goto yy356; - yy446: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy443; - goto yy356; - yy447: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy441; - goto yy356; - yy448: - yych = *++p; - if (yych == '>') - goto yy360; - goto yy356; - yy449: - yych = *++p; - if (yych == '>') - goto yy360; - goto yy356; - yy450: - ++p; - yych = *p; - if (yych <= 0xC1) { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy356; - if (yych <= 0x08) - goto yy452; - if (yych <= '\r') - goto yy450; - } else { - if (yych <= '=') { - if (yych <= ' ') - goto yy450; - } else { - if (yych <= '>') - goto yy360; - if (yych >= 0x80) - goto yy356; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy454; - if (yych <= 0xE0) - goto yy455; - if (yych <= 0xEC) - goto yy456; - goto yy460; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy456; - goto yy457; - } else { - if (yych <= 0xF3) - goto yy458; - if (yych <= 0xF4) - goto yy459; - goto yy356; - } - } - } - yy452: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy452; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= '>') - goto yy360; - goto yy356; - } else { - if (yych <= 0xDF) - goto yy454; - if (yych <= 0xE0) - goto yy455; - goto yy456; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy460; - if (yych <= 0xEF) - goto yy456; - goto yy457; - } else { - if (yych <= 0xF3) - goto yy458; - if (yych <= 0xF4) - goto yy459; - goto yy356; - } - } - yy454: + goto yy292; + goto yy231; + yy295: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy452; - goto yy356; - yy455: - ++p; - yych = *p; + goto yy231; if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy454; - goto yy356; - yy456: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy454; - goto yy356; - yy457: + goto yy292; + goto yy231; + yy296: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy456; - goto yy356; - yy458: + goto yy294; + goto yy231; + yy297: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy456; - goto yy356; - yy459: + goto yy294; + goto yy231; + yy298: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy456; - goto yy356; - yy460: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy454; - goto yy356; - yy461: - yych = *++p; - if (yych == 'D') - goto yy462; - if (yych != 'd') - goto yy356; - yy462: - yych = *++p; - if (yych == 'A') - goto yy463; - if (yych != 'a') - goto yy356; - yy463: - yych = *++p; - if (yych == 'T') - goto yy464; - if (yych != 't') - goto yy356; - yy464: + goto yy294; + goto yy231; + yy299: yych = *++p; if (yych == 'A') - goto yy465; - if (yych != 'a') - goto yy356; - yy465: - yych = *++p; - if (yych != '[') - goto yy356; - yy466: + goto yy315; + if (yych == 'a') + goto yy315; + goto yy231; + yy300: ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy466; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy356; - if (yych <= ']') - goto yy475; - goto yy356; - } else { - if (yych <= 0xDF) - goto yy468; - if (yych <= 0xE0) - goto yy469; - goto yy470; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy474; - if (yych <= 0xEF) - goto yy470; - goto yy471; - } else { - if (yych <= 0xF3) - goto yy472; - if (yych <= 0xF4) - goto yy473; - goto yy356; - } + if (yybm[0 + yych] & 1) { + goto yy247; } - yy468: + if (yych == '/') + goto yy251; + if (yych == '>') + goto yy252; + goto yy231; + yy301: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy466; - goto yy356; - yy469: + goto yy288; + goto yy231; + yy302: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy468; - goto yy356; - yy470: + goto yy301; + goto yy231; + yy303: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy468; - goto yy356; - yy471: + goto yy301; + goto yy231; + yy304: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy301; + goto yy231; + yy305: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy470; - goto yy356; - yy472: + goto yy303; + goto yy231; + yy306: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy470; - goto yy356; - yy473: + goto yy303; + goto yy231; + yy307: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy470; - goto yy356; - yy474: + goto yy303; + goto yy231; + yy308: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; + if (yych <= 0xBF) + goto yy290; + goto yy231; + yy309: + ++p; + yych = *p; if (yych <= 0x9F) - goto yy468; - goto yy356; - yy475: + goto yy231; + if (yych <= 0xBF) + goto yy308; + goto yy231; + yy310: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy308; + goto yy231; + yy311: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy308; + goto yy231; + yy312: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy310; + goto yy231; + yy313: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy310; + goto yy231; + yy314: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy310; + goto yy231; + yy315: + yych = *++p; + if (yych != '[') + goto yy231; + yy316: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy466; + goto yy316; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; + goto yy231; if (yych >= '^') - goto yy356; + goto yy231; } else { if (yych <= 0xDF) - goto yy477; + goto yy319; if (yych <= 0xE0) - goto yy478; - goto yy479; + goto yy320; + goto yy321; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy483; + goto yy322; if (yych <= 0xEF) - goto yy479; - goto yy480; + goto yy321; + goto yy323; } else { if (yych <= 0xF3) - goto yy481; + goto yy324; if (yych <= 0xF4) - goto yy482; - goto yy356; + goto yy325; + goto yy231; } } ++p; yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { + if (yybm[0 + yych] & 128) { + goto yy316; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { if (yych <= 0x00) - goto yy356; - if (yych <= '=') - goto yy466; - goto yy360; + goto yy231; + if (yych <= ']') + goto yy326; + goto yy231; } else { - if (yych <= 0x7F) - goto yy466; - if (yych <= 0xC1) - goto yy356; if (yych <= 0xDF) - goto yy484; - goto yy485; + goto yy319; + if (yych <= 0xE0) + goto yy320; + goto yy321; } } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy490; - goto yy486; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy322; + if (yych <= 0xEF) + goto yy321; + goto yy323; } else { - if (yych <= 0xF0) - goto yy487; if (yych <= 0xF3) - goto yy488; + goto yy324; if (yych <= 0xF4) - goto yy489; - goto yy356; + goto yy325; + goto yy231; } } - yy477: + yy319: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy466; - goto yy356; - yy478: + goto yy316; + goto yy231; + yy320: ++p; yych = *p; if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy477; - goto yy356; - yy479: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy477; - goto yy356; - yy480: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy479; - goto yy356; - yy481: + goto yy319; + goto yy231; + yy321: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy479; - goto yy356; - yy482: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x8F) - goto yy479; - goto yy356; - yy483: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy477; - goto yy356; - yy484: + goto yy319; + goto yy231; + yy322: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy466; - goto yy356; - yy485: - ++p; - yych = *p; + goto yy231; if (yych <= 0x9F) - goto yy356; - if (yych <= 0xBF) - goto yy484; - goto yy356; - yy486: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0xBF) - goto yy484; - goto yy356; - yy487: + goto yy319; + goto yy231; + yy323: ++p; yych = *p; if (yych <= 0x8F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy486; - goto yy356; - yy488: + goto yy321; + goto yy231; + yy324: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0xBF) - goto yy486; - goto yy356; - yy489: + goto yy321; + goto yy231; + yy325: ++p; yych = *p; if (yych <= 0x7F) - goto yy356; + goto yy231; if (yych <= 0x8F) - goto yy486; - goto yy356; - yy490: + goto yy321; + goto yy231; + yy326: ++p; yych = *p; - if (yych <= 0x7F) - goto yy356; - if (yych <= 0x9F) - goto yy484; - goto yy356; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy231; + if (yych <= '=') + goto yy316; + goto yy252; + } else { + if (yych <= 0x7F) + goto yy316; + if (yych <= 0xC1) + goto yy231; + if (yych <= 0xDF) + goto yy319; + goto yy320; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy322; + goto yy321; + } else { + if (yych <= 0xF0) + goto yy323; + if (yych <= 0xF3) + goto yy324; + if (yych <= 0xF4) + goto yy325; + goto yy231; + } + } } } @@ -9764,239 +6204,216 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '<') - goto yy495; + goto yy331; ++p; - yy494 : { return 0; } - yy495: + yy330 : { return 0; } + yy331: yych = *(marker = ++p); switch (yych) { case '!': - goto yy513; + goto yy332; case '/': - goto yy496; + goto yy334; case '?': - goto yy514; + goto yy335; case 'A': case 'a': - goto yy499; + goto yy337; case 'B': case 'b': - goto yy500; + goto yy338; case 'C': case 'c': - goto yy501; + goto yy339; case 'D': case 'd': - goto yy502; + goto yy340; case 'F': case 'f': - goto yy503; + goto yy341; case 'H': case 'h': - goto yy504; + goto yy342; case 'I': case 'i': - goto yy505; + goto yy343; case 'L': case 'l': - goto yy506; + goto yy344; case 'M': case 'm': - goto yy507; + goto yy345; case 'N': case 'n': - goto yy508; + goto yy346; case 'O': case 'o': - goto yy509; + goto yy347; case 'P': case 'p': - goto yy498; + goto yy348; case 'S': case 's': - goto yy510; + goto yy349; case 'T': case 't': - goto yy511; + goto yy350; case 'U': case 'u': - goto yy512; + goto yy351; default: - goto yy494; + goto yy330; } - yy496: + yy332: + yych = *++p; + if (yych <= '@') { + if (yych == '-') + goto yy352; + } else { + if (yych <= 'Z') + goto yy353; + if (yych <= '[') + goto yy355; + } + yy333: + p = marker; + goto yy330; + yy334: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy499; + goto yy337; case 'B': case 'b': - goto yy500; + goto yy338; case 'C': case 'c': - goto yy501; + goto yy339; case 'D': case 'd': - goto yy502; + goto yy340; case 'F': case 'f': - goto yy503; + goto yy341; case 'H': case 'h': - goto yy504; + goto yy342; case 'I': case 'i': - goto yy505; + goto yy343; case 'L': case 'l': - goto yy506; + goto yy344; case 'M': case 'm': - goto yy507; + goto yy345; case 'N': case 'n': - goto yy508; + goto yy346; case 'O': case 'o': - goto yy509; + goto yy347; case 'P': case 'p': - goto yy698; + goto yy356; case 'S': case 's': - goto yy699; + goto yy357; case 'T': case 't': - goto yy511; + goto yy350; case 'U': case 'u': - goto yy512; + goto yy351; default: - goto yy497; - } - yy497: - p = marker; - goto yy494; - yy498: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - if (yych <= 0x1F) - goto yy497; - goto yy530; - } else { - if (yych == '/') - goto yy532; - if (yych <= '=') - goto yy497; - goto yy530; - } - } else { - if (yych <= 'R') { - if (yych == 'A') - goto yy695; - if (yych <= 'Q') - goto yy497; - goto yy694; - } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy497; - goto yy695; - } else { - if (yych == 'r') - goto yy694; - goto yy497; - } - } + goto yy333; } - yy499: + yy335: + ++p; + { return 3; } + yy337: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= 'C') - goto yy497; - goto yy683; + goto yy333; + goto yy358; } else { if (yych <= 'Q') - goto yy497; + goto yy333; if (yych <= 'R') - goto yy682; - goto yy681; + goto yy359; + goto yy360; } } else { if (yych <= 'q') { if (yych == 'd') - goto yy683; - goto yy497; + goto yy358; + goto yy333; } else { if (yych <= 'r') - goto yy682; + goto yy359; if (yych <= 's') - goto yy681; - goto yy497; + goto yy360; + goto yy333; } } - yy500: + yy338: yych = *++p; if (yych <= 'O') { if (yych <= 'K') { if (yych == 'A') - goto yy667; - goto yy497; + goto yy361; + goto yy333; } else { if (yych <= 'L') - goto yy666; + goto yy362; if (yych <= 'N') - goto yy497; - goto yy665; + goto yy333; + goto yy363; } } else { if (yych <= 'k') { if (yych == 'a') - goto yy667; - goto yy497; + goto yy361; + goto yy333; } else { if (yych <= 'l') - goto yy666; + goto yy362; if (yych == 'o') - goto yy665; - goto yy497; + goto yy363; + goto yy333; } } - yy501: + yy339: yych = *++p; if (yych <= 'O') { if (yych <= 'D') { if (yych == 'A') - goto yy652; - goto yy497; + goto yy364; + goto yy333; } else { if (yych <= 'E') - goto yy651; + goto yy365; if (yych <= 'N') - goto yy497; - goto yy650; + goto yy333; + goto yy366; } } else { if (yych <= 'd') { if (yych == 'a') - goto yy652; - goto yy497; + goto yy364; + goto yy333; } else { if (yych <= 'e') - goto yy651; + goto yy365; if (yych == 'o') - goto yy650; - goto yy497; + goto yy366; + goto yy333; } } - yy502: + yy340: yych = *++p; switch (yych) { case 'D': @@ -10005,1666 +6422,1488 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { case 'd': case 'l': case 't': - goto yy529; + goto yy367; case 'E': case 'e': - goto yy642; + goto yy368; case 'I': case 'i': - goto yy641; + goto yy369; default: - goto yy497; + goto yy333; } - yy503: + yy341: yych = *++p; if (yych <= 'R') { if (yych <= 'N') { if (yych == 'I') - goto yy617; - goto yy497; + goto yy370; + goto yy333; } else { if (yych <= 'O') - goto yy616; + goto yy371; if (yych <= 'Q') - goto yy497; - goto yy615; + goto yy333; + goto yy372; } } else { if (yych <= 'n') { if (yych == 'i') - goto yy617; - goto yy497; + goto yy370; + goto yy333; } else { if (yych <= 'o') - goto yy616; + goto yy371; if (yych == 'r') - goto yy615; - goto yy497; + goto yy372; + goto yy333; } } - yy504: + yy342: yych = *++p; if (yych <= 'S') { if (yych <= 'D') { if (yych <= '0') - goto yy497; + goto yy333; if (yych <= '6') - goto yy529; - goto yy497; + goto yy367; + goto yy333; } else { if (yych <= 'E') - goto yy610; + goto yy373; if (yych == 'R') - goto yy529; - goto yy497; + goto yy367; + goto yy333; } } else { if (yych <= 'q') { if (yych <= 'T') - goto yy609; + goto yy374; if (yych == 'e') - goto yy610; - goto yy497; + goto yy373; + goto yy333; } else { if (yych <= 'r') - goto yy529; + goto yy367; if (yych == 't') - goto yy609; - goto yy497; + goto yy374; + goto yy333; } } - yy505: + yy343: yych = *++p; if (yych == 'F') - goto yy605; + goto yy375; if (yych == 'f') - goto yy605; - goto yy497; - yy506: + goto yy375; + goto yy333; + yy344: yych = *++p; if (yych <= 'I') { if (yych == 'E') - goto yy600; + goto yy376; if (yych <= 'H') - goto yy497; - goto yy599; + goto yy333; + goto yy377; } else { if (yych <= 'e') { if (yych <= 'd') - goto yy497; - goto yy600; + goto yy333; + goto yy376; } else { if (yych == 'i') - goto yy599; - goto yy497; + goto yy377; + goto yy333; } } - yy507: + yy345: yych = *++p; if (yych <= 'E') { if (yych == 'A') - goto yy591; + goto yy378; if (yych <= 'D') - goto yy497; - goto yy590; + goto yy333; + goto yy379; } else { if (yych <= 'a') { if (yych <= '`') - goto yy497; - goto yy591; + goto yy333; + goto yy378; } else { if (yych == 'e') - goto yy590; - goto yy497; + goto yy379; + goto yy333; } } - yy508: + yy346: yych = *++p; if (yych <= 'O') { if (yych == 'A') - goto yy584; + goto yy380; if (yych <= 'N') - goto yy497; - goto yy583; + goto yy333; + goto yy381; } else { if (yych <= 'a') { if (yych <= '`') - goto yy497; - goto yy584; + goto yy333; + goto yy380; } else { if (yych == 'o') - goto yy583; - goto yy497; + goto yy381; + goto yy333; } } - yy509: + yy347: yych = *++p; if (yych <= 'P') { if (yych == 'L') - goto yy529; + goto yy367; if (yych <= 'O') - goto yy497; - goto yy575; + goto yy333; + goto yy382; } else { if (yych <= 'l') { if (yych <= 'k') - goto yy497; - goto yy529; + goto yy333; + goto yy367; } else { if (yych == 'p') - goto yy575; - goto yy497; + goto yy382; + goto yy333; } } - yy510: + yy348: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy383; + if (yych <= 0x1F) + goto yy333; + goto yy383; + } else { + if (yych == '/') + goto yy385; + if (yych <= '=') + goto yy333; + goto yy383; + } + } else { + if (yych <= 'R') { + if (yych == 'A') + goto yy386; + if (yych <= 'Q') + goto yy333; + goto yy387; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy333; + goto yy386; + } else { + if (yych == 'r') + goto yy387; + goto yy333; + } + } + } + yy349: yych = *++p; switch (yych) { case 'C': case 'c': - goto yy552; + goto yy388; case 'E': case 'e': - goto yy555; + goto yy389; case 'O': case 'o': - goto yy554; + goto yy390; case 'T': case 't': - goto yy551; + goto yy391; case 'U': case 'u': - goto yy553; + goto yy392; default: - goto yy497; + goto yy333; } - yy511: + yy350: yych = *++p; switch (yych) { case 'A': case 'a': - goto yy538; + goto yy393; case 'B': case 'b': - goto yy537; + goto yy394; case 'D': case 'd': - goto yy529; + goto yy367; case 'F': case 'f': - goto yy536; + goto yy395; case 'H': case 'h': - goto yy535; + goto yy396; case 'I': case 'i': - goto yy534; + goto yy397; case 'R': case 'r': - goto yy533; + goto yy398; default: - goto yy497; + goto yy333; } - yy512: + yy351: yych = *++p; if (yych == 'L') - goto yy529; + goto yy367; if (yych == 'l') - goto yy529; - goto yy497; - yy513: - yych = *++p; - if (yych <= '@') { - if (yych == '-') - goto yy516; - goto yy497; - } else { - if (yych <= 'Z') - goto yy517; - if (yych <= '[') - goto yy519; - goto yy497; - } - yy514: - ++p; - { return 3; } - yy516: + goto yy367; + goto yy333; + yy352: yych = *++p; if (yych == '-') - goto yy527; - goto yy497; - yy517: + goto yy399; + goto yy333; + yy353: ++p; { return 4; } - yy519: + yy355: yych = *++p; if (yych == 'C') - goto yy520; - if (yych != 'c') - goto yy497; - yy520: - yych = *++p; - if (yych == 'D') - goto yy521; - if (yych != 'd') - goto yy497; - yy521: - yych = *++p; - if (yych == 'A') - goto yy522; - if (yych != 'a') - goto yy497; - yy522: - yych = *++p; - if (yych == 'T') - goto yy523; - if (yych != 't') - goto yy497; - yy523: - yych = *++p; - if (yych == 'A') - goto yy524; - if (yych != 'a') - goto yy497; - yy524: - yych = *++p; - if (yych != '[') - goto yy497; - ++p; - { return 5; } - yy527: - ++p; - { return 2; } - yy529: - yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - if (yych <= 0x1F) - goto yy497; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy497; - goto yy532; - } else { - if (yych != '>') - goto yy497; - } - } - yy530: - ++p; - { return 6; } - yy532: - yych = *++p; - if (yych == '>') - goto yy530; - goto yy497; - yy533: + goto yy401; + if (yych == 'c') + goto yy401; + goto yy333; + yy356: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy333; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { if (yych <= ' ') - goto yy530; + goto yy383; if (yych <= '.') - goto yy497; - goto yy532; + goto yy333; + goto yy385; } } else { if (yych <= '@') { if (yych == '>') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { if (yych <= 'A') - goto yy549; + goto yy386; if (yych == 'a') - goto yy549; - goto yy497; + goto yy386; + goto yy333; } } - yy534: - yych = *++p; - if (yych == 'T') - goto yy547; - if (yych == 't') - goto yy547; - goto yy497; - yy535: + yy357: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - goto yy497; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'E') + goto yy389; + goto yy333; } else { - if (yych <= ' ') - goto yy530; - if (yych <= '.') - goto yy497; - goto yy532; + if (yych <= 'O') + goto yy390; + if (yych <= 'T') + goto yy333; + goto yy392; } } else { - if (yych <= 'D') { - if (yych == '>') - goto yy530; - goto yy497; - } else { - if (yych <= 'E') - goto yy545; + if (yych <= 'n') { if (yych == 'e') - goto yy545; - goto yy497; + goto yy389; + goto yy333; + } else { + if (yych <= 'o') + goto yy390; + if (yych == 'u') + goto yy392; + goto yy333; } } - yy536: - yych = *++p; - if (yych == 'O') - goto yy543; - if (yych == 'o') - goto yy543; - goto yy497; - yy537: - yych = *++p; - if (yych == 'O') - goto yy541; - if (yych == 'o') - goto yy541; - goto yy497; - yy538: - yych = *++p; - if (yych == 'B') - goto yy539; - if (yych != 'b') - goto yy497; - yy539: - yych = *++p; - if (yych == 'L') - goto yy540; - if (yych != 'l') - goto yy497; - yy540: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy541: + yy358: yych = *++p; if (yych == 'D') - goto yy542; - if (yych != 'd') - goto yy497; - yy542: - yych = *++p; - if (yych == 'Y') - goto yy529; - if (yych == 'y') - goto yy529; - goto yy497; - yy543: - yych = *++p; - if (yych == 'O') - goto yy544; - if (yych != 'o') - goto yy497; - yy544: + goto yy402; + if (yych == 'd') + goto yy402; + goto yy333; + yy359: yych = *++p; if (yych == 'T') - goto yy529; + goto yy403; if (yych == 't') - goto yy529; - goto yy497; - yy545: - yych = *++p; - if (yych == 'A') - goto yy546; - if (yych != 'a') - goto yy497; - yy546: - yych = *++p; - if (yych == 'D') - goto yy529; - if (yych == 'd') - goto yy529; - goto yy497; - yy547: - yych = *++p; - if (yych == 'L') - goto yy548; - if (yych != 'l') - goto yy497; - yy548: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy549: - yych = *++p; - if (yych == 'C') - goto yy550; - if (yych != 'c') - goto yy497; - yy550: - yych = *++p; - if (yych == 'K') - goto yy529; - if (yych == 'k') - goto yy529; - goto yy497; - yy551: - yych = *++p; - if (yych == 'Y') - goto yy573; - if (yych == 'y') - goto yy573; - goto yy497; - yy552: - yych = *++p; - if (yych == 'R') - goto yy567; - if (yych == 'r') - goto yy567; - goto yy497; - yy553: - yych = *++p; - if (yych == 'M') - goto yy563; - if (yych == 'm') - goto yy563; - goto yy497; - yy554: + goto yy403; + goto yy333; + yy360: yych = *++p; - if (yych == 'U') - goto yy560; - if (yych == 'u') - goto yy560; - goto yy497; - yy555: + if (yych == 'I') + goto yy404; + if (yych == 'i') + goto yy404; + goto yy333; + yy361: yych = *++p; - if (yych == 'C') - goto yy556; - if (yych != 'c') - goto yy497; - yy556: + if (yych == 'S') + goto yy405; + if (yych == 's') + goto yy405; + goto yy333; + yy362: yych = *++p; - if (yych == 'T') - goto yy557; - if (yych != 't') - goto yy497; - yy557: + if (yych == 'O') + goto yy406; + if (yych == 'o') + goto yy406; + goto yy333; + yy363: yych = *++p; - if (yych == 'I') - goto yy558; - if (yych != 'i') - goto yy497; - yy558: + if (yych == 'D') + goto yy407; + if (yych == 'd') + goto yy407; + goto yy333; + yy364: yych = *++p; - if (yych == 'O') - goto yy559; - if (yych != 'o') - goto yy497; - yy559: + if (yych == 'P') + goto yy408; + if (yych == 'p') + goto yy408; + goto yy333; + yy365: yych = *++p; if (yych == 'N') - goto yy529; + goto yy409; if (yych == 'n') - goto yy529; - goto yy497; - yy560: + goto yy409; + goto yy333; + yy366: yych = *++p; - if (yych == 'R') - goto yy561; - if (yych != 'r') - goto yy497; - yy561: + if (yych == 'L') + goto yy410; + if (yych == 'l') + goto yy410; + goto yy333; + yy367: yych = *++p; - if (yych == 'C') - goto yy562; - if (yych != 'c') - goto yy497; - yy562: + if (yych <= ' ') { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy383; + if (yych <= 0x1F) + goto yy333; + goto yy383; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy333; + goto yy385; + } else { + if (yych == '>') + goto yy383; + goto yy333; + } + } + yy368: yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy563: + if (yych == 'T') + goto yy411; + if (yych == 't') + goto yy411; + goto yy333; + yy369: yych = *++p; - if (yych == 'M') - goto yy564; - if (yych != 'm') - goto yy497; - yy564: + if (yych <= 'V') { + if (yych <= 'Q') { + if (yych == 'A') + goto yy412; + goto yy333; + } else { + if (yych <= 'R') + goto yy367; + if (yych <= 'U') + goto yy333; + goto yy367; + } + } else { + if (yych <= 'q') { + if (yych == 'a') + goto yy412; + goto yy333; + } else { + if (yych <= 'r') + goto yy367; + if (yych == 'v') + goto yy367; + goto yy333; + } + } + yy370: yych = *++p; - if (yych == 'A') - goto yy565; - if (yych != 'a') - goto yy497; - yy565: + if (yych <= 'G') { + if (yych == 'E') + goto yy413; + if (yych <= 'F') + goto yy333; + goto yy414; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy333; + goto yy413; + } else { + if (yych == 'g') + goto yy414; + goto yy333; + } + } + yy371: yych = *++p; - if (yych == 'R') - goto yy566; - if (yych != 'r') - goto yy497; - yy566: + if (yych <= 'R') { + if (yych == 'O') + goto yy409; + if (yych <= 'Q') + goto yy333; + goto yy415; + } else { + if (yych <= 'o') { + if (yych <= 'n') + goto yy333; + goto yy409; + } else { + if (yych == 'r') + goto yy415; + goto yy333; + } + } + yy372: yych = *++p; - if (yych == 'Y') - goto yy529; - if (yych == 'y') - goto yy529; - goto yy497; - yy567: + if (yych == 'A') + goto yy416; + if (yych == 'a') + goto yy416; + goto yy333; + yy373: yych = *++p; - if (yych == 'I') - goto yy568; - if (yych != 'i') - goto yy497; - yy568: + if (yych == 'A') + goto yy417; + if (yych == 'a') + goto yy417; + goto yy333; + yy374: yych = *++p; - if (yych == 'P') - goto yy569; - if (yych != 'p') - goto yy497; - yy569: + if (yych == 'M') + goto yy351; + if (yych == 'm') + goto yy351; + goto yy333; + yy375: yych = *++p; - if (yych == 'T') - goto yy570; - if (yych != 't') - goto yy497; - yy570: + if (yych == 'R') + goto yy418; + if (yych == 'r') + goto yy418; + goto yy333; + yy376: yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych >= 0x0E) - goto yy497; + if (yych == 'G') + goto yy419; + if (yych == 'g') + goto yy419; + goto yy333; + yy377: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy383; + goto yy333; + } else { + if (yych <= ' ') + goto yy383; + if (yych <= '.') + goto yy333; + goto yy385; + } } else { - if (yych <= ' ') - goto yy571; - if (yych != '>') - goto yy497; + if (yych <= 'M') { + if (yych == '>') + goto yy383; + goto yy333; + } else { + if (yych <= 'N') + goto yy420; + if (yych == 'n') + goto yy420; + goto yy333; + } } - yy571: - ++p; - { return 1; } - yy573: - yych = *++p; - if (yych == 'L') - goto yy574; - if (yych != 'l') - goto yy497; - yy574: - yych = *++p; - if (yych == 'E') - goto yy570; - if (yych == 'e') - goto yy570; - goto yy497; - yy575: + yy378: yych = *++p; - if (yych == 'T') - goto yy576; - if (yych != 't') - goto yy497; - yy576: + if (yych == 'I') + goto yy421; + if (yych == 'i') + goto yy421; + goto yy333; + yy379: yych = *++p; - if (yych <= 'I') { - if (yych == 'G') - goto yy578; - if (yych <= 'H') - goto yy497; + if (yych <= 'T') { + if (yych == 'N') + goto yy422; + if (yych <= 'S') + goto yy333; + goto yy423; } else { - if (yych <= 'g') { - if (yych <= 'f') - goto yy497; - goto yy578; + if (yych <= 'n') { + if (yych <= 'm') + goto yy333; + goto yy422; } else { - if (yych != 'i') - goto yy497; + if (yych == 't') + goto yy423; + goto yy333; } } + yy380: yych = *++p; - if (yych == 'O') - goto yy582; - if (yych == 'o') - goto yy582; - goto yy497; - yy578: + if (yych == 'V') + goto yy367; + if (yych == 'v') + goto yy367; + goto yy333; + yy381: yych = *++p; - if (yych == 'R') - goto yy579; - if (yych != 'r') - goto yy497; - yy579: + if (yych == 'F') + goto yy424; + if (yych == 'f') + goto yy424; + goto yy333; + yy382: yych = *++p; - if (yych == 'O') - goto yy580; - if (yych != 'o') - goto yy497; - yy580: + if (yych == 'T') + goto yy425; + if (yych == 't') + goto yy425; + goto yy333; + yy383: + ++p; + { return 6; } + yy385: yych = *++p; - if (yych == 'U') - goto yy581; - if (yych != 'u') - goto yy497; - yy581: + if (yych == '>') + goto yy383; + goto yy333; + yy386: yych = *++p; - if (yych == 'P') - goto yy529; - if (yych == 'p') - goto yy529; - goto yy497; - yy582: + if (yych == 'R') + goto yy426; + if (yych == 'r') + goto yy426; + goto yy333; + yy387: yych = *++p; - if (yych == 'N') - goto yy529; - if (yych == 'n') - goto yy529; - goto yy497; - yy583: + if (yych == 'E') + goto yy427; + if (yych == 'e') + goto yy427; + goto yy333; + yy388: yych = *++p; - if (yych == 'F') - goto yy585; - if (yych == 'f') - goto yy585; - goto yy497; - yy584: + if (yych == 'R') + goto yy428; + if (yych == 'r') + goto yy428; + goto yy333; + yy389: yych = *++p; - if (yych == 'V') - goto yy529; - if (yych == 'v') - goto yy529; - goto yy497; - yy585: + if (yych == 'C') + goto yy408; + if (yych == 'c') + goto yy408; + goto yy333; + yy390: yych = *++p; - if (yych == 'R') - goto yy586; - if (yych != 'r') - goto yy497; - yy586: + if (yych == 'U') + goto yy429; + if (yych == 'u') + goto yy429; + goto yy333; + yy391: yych = *++p; - if (yych == 'A') - goto yy587; - if (yych != 'a') - goto yy497; - yy587: + if (yych == 'Y') + goto yy430; + if (yych == 'y') + goto yy430; + goto yy333; + yy392: yych = *++p; if (yych == 'M') - goto yy588; - if (yych != 'm') - goto yy497; - yy588: + goto yy431; + if (yych == 'm') + goto yy431; + goto yy333; + yy393: yych = *++p; - if (yych == 'E') - goto yy589; - if (yych != 'e') - goto yy497; - yy589: + if (yych == 'B') + goto yy432; + if (yych == 'b') + goto yy432; + goto yy333; + yy394: yych = *++p; - if (yych == 'S') - goto yy529; - if (yych == 's') - goto yy529; - goto yy497; - yy590: + if (yych == 'O') + goto yy363; + if (yych == 'o') + goto yy363; + goto yy333; + yy395: yych = *++p; - if (yych <= 'T') { - if (yych == 'N') - goto yy593; - if (yych <= 'S') - goto yy497; - goto yy594; + if (yych == 'O') + goto yy433; + if (yych == 'o') + goto yy433; + goto yy333; + yy396: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy383; + goto yy333; + } else { + if (yych <= ' ') + goto yy383; + if (yych <= '.') + goto yy333; + goto yy385; + } } else { - if (yych <= 'n') { - if (yych <= 'm') - goto yy497; - goto yy593; + if (yych <= 'D') { + if (yych == '>') + goto yy383; + goto yy333; } else { - if (yych == 't') - goto yy594; - goto yy497; + if (yych <= 'E') + goto yy434; + if (yych == 'e') + goto yy434; + goto yy333; } } - yy591: - yych = *++p; - if (yych == 'I') - goto yy592; - if (yych != 'i') - goto yy497; - yy592: - yych = *++p; - if (yych == 'N') - goto yy529; - if (yych == 'n') - goto yy529; - goto yy497; - yy593: - yych = *++p; - if (yych == 'U') - goto yy595; - if (yych == 'u') - goto yy595; - goto yy497; - yy594: + yy397: yych = *++p; - if (yych == 'A') - goto yy529; - if (yych == 'a') - goto yy529; - goto yy497; - yy595: + if (yych == 'T') + goto yy432; + if (yych == 't') + goto yy432; + goto yy333; + yy398: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy333; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { if (yych <= ' ') - goto yy530; + goto yy383; if (yych <= '.') - goto yy497; - goto yy532; + goto yy333; + goto yy385; } } else { - if (yych <= 'H') { + if (yych <= '@') { if (yych == '>') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { - if (yych <= 'I') - goto yy596; - if (yych != 'i') - goto yy497; + if (yych <= 'A') + goto yy435; + if (yych == 'a') + goto yy435; + goto yy333; } } - yy596: + yy399: + ++p; + { return 2; } + yy401: yych = *++p; - if (yych == 'T') - goto yy597; - if (yych != 't') - goto yy497; - yy597: + if (yych == 'D') + goto yy436; + if (yych == 'd') + goto yy436; + goto yy333; + yy402: + yych = *++p; + if (yych == 'R') + goto yy437; + if (yych == 'r') + goto yy437; + goto yy333; + yy403: + yych = *++p; + if (yych == 'I') + goto yy438; + if (yych == 'i') + goto yy438; + goto yy333; + yy404: + yych = *++p; + if (yych == 'D') + goto yy439; + if (yych == 'd') + goto yy439; + goto yy333; + yy405: yych = *++p; if (yych == 'E') - goto yy598; - if (yych != 'e') - goto yy497; - yy598: + goto yy440; + if (yych == 'e') + goto yy440; + goto yy333; + yy406: + yych = *++p; + if (yych == 'C') + goto yy441; + if (yych == 'c') + goto yy441; + goto yy333; + yy407: + yych = *++p; + if (yych == 'Y') + goto yy367; + if (yych == 'y') + goto yy367; + goto yy333; + yy408: + yych = *++p; + if (yych == 'T') + goto yy442; + if (yych == 't') + goto yy442; + goto yy333; + yy409: yych = *++p; - if (yych == 'M') - goto yy529; - if (yych == 'm') - goto yy529; - goto yy497; - yy599: + if (yych == 'T') + goto yy443; + if (yych == 't') + goto yy443; + goto yy333; + yy410: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy333; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { if (yych <= ' ') - goto yy530; + goto yy383; if (yych <= '.') - goto yy497; - goto yy532; + goto yy333; + goto yy385; } } else { - if (yych <= 'M') { + if (yych <= 'F') { if (yych == '>') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { - if (yych <= 'N') - goto yy604; - if (yych == 'n') - goto yy604; - goto yy497; + if (yych <= 'G') + goto yy444; + if (yych == 'g') + goto yy444; + goto yy333; } } - yy600: + yy411: yych = *++p; - if (yych == 'G') - goto yy601; - if (yych != 'g') - goto yy497; - yy601: + if (yych == 'A') + goto yy445; + if (yych == 'a') + goto yy445; + goto yy333; + yy412: yych = *++p; - if (yych == 'E') - goto yy602; - if (yych != 'e') - goto yy497; - yy602: + if (yych == 'L') + goto yy446; + if (yych == 'l') + goto yy446; + goto yy333; + yy413: yych = *++p; - if (yych == 'N') - goto yy603; - if (yych != 'n') - goto yy497; - yy603: + if (yych == 'L') + goto yy447; + if (yych == 'l') + goto yy447; + goto yy333; + yy414: yych = *++p; - if (yych == 'D') - goto yy529; - if (yych == 'd') - goto yy529; - goto yy497; - yy604: + if (yych <= 'U') { + if (yych == 'C') + goto yy448; + if (yych <= 'T') + goto yy333; + goto yy449; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy333; + goto yy448; + } else { + if (yych == 'u') + goto yy449; + goto yy333; + } + } + yy415: yych = *++p; - if (yych == 'K') - goto yy529; - if (yych == 'k') - goto yy529; - goto yy497; - yy605: + if (yych == 'M') + goto yy367; + if (yych == 'm') + goto yy367; + goto yy333; + yy416: yych = *++p; - if (yych == 'R') - goto yy606; - if (yych != 'r') - goto yy497; - yy606: + if (yych == 'M') + goto yy450; + if (yych == 'm') + goto yy450; + goto yy333; + yy417: yych = *++p; - if (yych == 'A') - goto yy607; - if (yych != 'a') - goto yy497; - yy607: + if (yych == 'D') + goto yy451; + if (yych == 'd') + goto yy451; + goto yy333; + yy418: yych = *++p; - if (yych == 'M') - goto yy608; - if (yych != 'm') - goto yy497; - yy608: + if (yych == 'A') + goto yy452; + if (yych == 'a') + goto yy452; + goto yy333; + yy419: yych = *++p; if (yych == 'E') - goto yy529; + goto yy453; if (yych == 'e') - goto yy529; - goto yy497; - yy609: + goto yy453; + goto yy333; + yy420: yych = *++p; - if (yych == 'M') - goto yy614; - if (yych == 'm') - goto yy614; - goto yy497; - yy610: + if (yych == 'K') + goto yy367; + if (yych == 'k') + goto yy367; + goto yy333; + yy421: + yych = *++p; + if (yych == 'N') + goto yy367; + if (yych == 'n') + goto yy367; + goto yy333; + yy422: + yych = *++p; + if (yych == 'U') + goto yy454; + if (yych == 'u') + goto yy454; + goto yy333; + yy423: yych = *++p; if (yych == 'A') - goto yy611; - if (yych != 'a') - goto yy497; - yy611: + goto yy367; + if (yych == 'a') + goto yy367; + goto yy333; + yy424: yych = *++p; - if (yych == 'D') - goto yy612; - if (yych != 'd') - goto yy497; - yy612: + if (yych == 'R') + goto yy455; + if (yych == 'r') + goto yy455; + goto yy333; + yy425: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - goto yy497; - } else { - if (yych <= ' ') - goto yy530; - if (yych <= '.') - goto yy497; - goto yy532; - } + if (yych <= 'I') { + if (yych == 'G') + goto yy444; + if (yych <= 'H') + goto yy333; + goto yy456; } else { - if (yych <= 'D') { - if (yych == '>') - goto yy530; - goto yy497; + if (yych <= 'g') { + if (yych <= 'f') + goto yy333; + goto yy444; } else { - if (yych <= 'E') - goto yy613; - if (yych != 'e') - goto yy497; + if (yych == 'i') + goto yy456; + goto yy333; } } - yy613: + yy426: + yych = *++p; + if (yych == 'A') + goto yy415; + if (yych == 'a') + goto yy415; + goto yy333; + yy427: + yych = *++p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy457; + goto yy333; + } else { + if (yych <= ' ') + goto yy457; + if (yych == '>') + goto yy457; + goto yy333; + } + yy428: + yych = *++p; + if (yych == 'I') + goto yy459; + if (yych == 'i') + goto yy459; + goto yy333; + yy429: yych = *++p; if (yych == 'R') - goto yy529; + goto yy460; if (yych == 'r') - goto yy529; - goto yy497; - yy614: + goto yy460; + goto yy333; + yy430: + yych = *++p; + if (yych == 'L') + goto yy387; + if (yych == 'l') + goto yy387; + goto yy333; + yy431: + yych = *++p; + if (yych == 'M') + goto yy461; + if (yych == 'm') + goto yy461; + goto yy333; + yy432: yych = *++p; if (yych == 'L') - goto yy529; + goto yy439; if (yych == 'l') - goto yy529; - goto yy497; - yy615: + goto yy439; + goto yy333; + yy433: + yych = *++p; + if (yych == 'O') + goto yy462; + if (yych == 'o') + goto yy462; + goto yy333; + yy434: yych = *++p; if (yych == 'A') - goto yy636; + goto yy463; if (yych == 'a') - goto yy636; - goto yy497; - yy616: + goto yy463; + goto yy333; + yy435: yych = *++p; - if (yych <= 'R') { - if (yych == 'O') - goto yy632; - if (yych <= 'Q') - goto yy497; - goto yy633; - } else { - if (yych <= 'o') { - if (yych <= 'n') - goto yy497; - goto yy632; - } else { - if (yych == 'r') - goto yy633; - goto yy497; - } - } - yy617: + if (yych == 'C') + goto yy420; + if (yych == 'c') + goto yy420; + goto yy333; + yy436: yych = *++p; - if (yych <= 'G') { - if (yych == 'E') - goto yy618; - if (yych <= 'F') - goto yy497; - goto yy619; - } else { - if (yych <= 'e') { - if (yych <= 'd') - goto yy497; - } else { - if (yych == 'g') - goto yy619; - goto yy497; - } - } - yy618: + if (yych == 'A') + goto yy464; + if (yych == 'a') + goto yy464; + goto yy333; + yy437: yych = *++p; - if (yych == 'L') - goto yy628; - if (yych == 'l') - goto yy628; - goto yy497; - yy619: + if (yych == 'E') + goto yy465; + if (yych == 'e') + goto yy465; + goto yy333; + yy438: yych = *++p; - if (yych <= 'U') { - if (yych == 'C') - goto yy621; - if (yych <= 'T') - goto yy497; + if (yych == 'C') + goto yy432; + if (yych == 'c') + goto yy432; + goto yy333; + yy439: + yych = *++p; + if (yych == 'E') + goto yy367; + if (yych == 'e') + goto yy367; + goto yy333; + yy440: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy383; + goto yy333; + } else { + if (yych <= ' ') + goto yy383; + if (yych <= '.') + goto yy333; + goto yy385; + } } else { - if (yych <= 'c') { - if (yych <= 'b') - goto yy497; - goto yy621; + if (yych <= 'E') { + if (yych == '>') + goto yy383; + goto yy333; } else { - if (yych != 'u') - goto yy497; + if (yych <= 'F') + goto yy466; + if (yych == 'f') + goto yy466; + goto yy333; } } + yy441: yych = *++p; - if (yych == 'R') - goto yy627; - if (yych == 'r') - goto yy627; - goto yy497; - yy621: - yych = *++p; - if (yych == 'A') - goto yy622; - if (yych != 'a') - goto yy497; - yy622: - yych = *++p; - if (yych == 'P') - goto yy623; - if (yych != 'p') - goto yy497; - yy623: - yych = *++p; - if (yych == 'T') - goto yy624; - if (yych != 't') - goto yy497; - yy624: + if (yych == 'K') + goto yy467; + if (yych == 'k') + goto yy467; + goto yy333; + yy442: yych = *++p; if (yych == 'I') - goto yy625; - if (yych != 'i') - goto yy497; - yy625: - yych = *++p; - if (yych == 'O') - goto yy626; - if (yych != 'o') - goto yy497; - yy626: - yych = *++p; - if (yych == 'N') - goto yy529; - if (yych == 'n') - goto yy529; - goto yy497; - yy627: + goto yy456; + if (yych == 'i') + goto yy456; + goto yy333; + yy443: yych = *++p; if (yych == 'E') - goto yy529; + goto yy468; if (yych == 'e') - goto yy529; - goto yy497; - yy628: - yych = *++p; - if (yych == 'D') - goto yy629; - if (yych != 'd') - goto yy497; - yy629: - yych = *++p; - if (yych == 'S') - goto yy630; - if (yych != 's') - goto yy497; - yy630: + goto yy468; + goto yy333; + yy444: yych = *++p; - if (yych == 'E') - goto yy631; - if (yych != 'e') - goto yy497; - yy631: + if (yych == 'R') + goto yy469; + if (yych == 'r') + goto yy469; + goto yy333; + yy445: yych = *++p; - if (yych == 'T') - goto yy529; - if (yych == 't') - goto yy529; - goto yy497; - yy632: + if (yych == 'I') + goto yy470; + if (yych == 'i') + goto yy470; + goto yy333; + yy446: yych = *++p; - if (yych == 'T') - goto yy634; - if (yych == 't') - goto yy634; - goto yy497; - yy633: + if (yych == 'O') + goto yy471; + if (yych == 'o') + goto yy471; + goto yy333; + yy447: yych = *++p; - if (yych == 'M') - goto yy529; - if (yych == 'm') - goto yy529; - goto yy497; - yy634: + if (yych == 'D') + goto yy472; + if (yych == 'd') + goto yy472; + goto yy333; + yy448: yych = *++p; - if (yych == 'E') - goto yy635; - if (yych != 'e') - goto yy497; - yy635: + if (yych == 'A') + goto yy364; + if (yych == 'a') + goto yy364; + goto yy333; + yy449: yych = *++p; if (yych == 'R') - goto yy529; + goto yy439; if (yych == 'r') - goto yy529; - goto yy497; - yy636: - yych = *++p; - if (yych == 'M') - goto yy637; - if (yych != 'm') - goto yy497; - yy637: + goto yy439; + goto yy333; + yy450: yych = *++p; if (yych == 'E') - goto yy638; - if (yych != 'e') - goto yy497; - yy638: + goto yy473; + if (yych == 'e') + goto yy473; + goto yy333; + yy451: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy333; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { if (yych <= ' ') - goto yy530; + goto yy383; if (yych <= '.') - goto yy497; - goto yy532; + goto yy333; + goto yy385; } } else { - if (yych <= 'R') { + if (yych <= 'D') { if (yych == '>') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { - if (yych <= 'S') - goto yy639; - if (yych != 's') - goto yy497; + if (yych <= 'E') + goto yy468; + if (yych == 'e') + goto yy468; + goto yy333; } } - yy639: + yy452: yych = *++p; - if (yych == 'E') - goto yy640; - if (yych != 'e') - goto yy497; - yy640: + if (yych == 'M') + goto yy439; + if (yych == 'm') + goto yy439; + goto yy333; + yy453: yych = *++p; - if (yych == 'T') - goto yy529; - if (yych == 't') - goto yy529; - goto yy497; - yy641: + if (yych == 'N') + goto yy463; + if (yych == 'n') + goto yy463; + goto yy333; + yy454: yych = *++p; - if (yych <= 'V') { - if (yych <= 'Q') { - if (yych == 'A') - goto yy647; - goto yy497; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy333; + if (yych <= '\r') + goto yy383; + goto yy333; } else { - if (yych <= 'R') - goto yy529; - if (yych <= 'U') - goto yy497; - goto yy529; + if (yych <= ' ') + goto yy383; + if (yych <= '.') + goto yy333; + goto yy385; } } else { - if (yych <= 'q') { - if (yych == 'a') - goto yy647; - goto yy497; + if (yych <= 'H') { + if (yych == '>') + goto yy383; + goto yy333; } else { - if (yych <= 'r') - goto yy529; - if (yych == 'v') - goto yy529; - goto yy497; + if (yych <= 'I') + goto yy474; + if (yych == 'i') + goto yy474; + goto yy333; } } - yy642: - yych = *++p; - if (yych == 'T') - goto yy643; - if (yych != 't') - goto yy497; - yy643: + yy455: yych = *++p; if (yych == 'A') - goto yy644; - if (yych != 'a') - goto yy497; - yy644: - yych = *++p; - if (yych == 'I') - goto yy645; - if (yych != 'i') - goto yy497; - yy645: - yych = *++p; - if (yych == 'L') - goto yy646; - if (yych != 'l') - goto yy497; - yy646: - yych = *++p; - if (yych == 'S') - goto yy529; - if (yych == 's') - goto yy529; - goto yy497; - yy647: - yych = *++p; - if (yych == 'L') - goto yy648; - if (yych != 'l') - goto yy497; - yy648: + goto yy475; + if (yych == 'a') + goto yy475; + goto yy333; + yy456: yych = *++p; if (yych == 'O') - goto yy649; - if (yych != 'o') - goto yy497; - yy649: - yych = *++p; - if (yych == 'G') - goto yy529; - if (yych == 'g') - goto yy529; - goto yy497; - yy650: - yych = *++p; - if (yych == 'L') - goto yy660; - if (yych == 'l') - goto yy660; - goto yy497; - yy651: - yych = *++p; - if (yych == 'N') - goto yy657; - if (yych == 'n') - goto yy657; - goto yy497; - yy652: + goto yy421; + if (yych == 'o') + goto yy421; + goto yy333; + yy457: + ++p; + { return 1; } + yy459: yych = *++p; if (yych == 'P') - goto yy653; - if (yych != 'p') - goto yy497; - yy653: - yych = *++p; - if (yych == 'T') - goto yy654; - if (yych != 't') - goto yy497; - yy654: - yych = *++p; - if (yych == 'I') - goto yy655; - if (yych != 'i') - goto yy497; - yy655: + goto yy476; + if (yych == 'p') + goto yy476; + goto yy333; + yy460: yych = *++p; - if (yych == 'O') - goto yy656; - if (yych != 'o') - goto yy497; - yy656: + if (yych == 'C') + goto yy439; + if (yych == 'c') + goto yy439; + goto yy333; + yy461: yych = *++p; - if (yych == 'N') - goto yy529; - if (yych == 'n') - goto yy529; - goto yy497; - yy657: + if (yych == 'A') + goto yy477; + if (yych == 'a') + goto yy477; + goto yy333; + yy462: yych = *++p; if (yych == 'T') - goto yy658; - if (yych != 't') - goto yy497; - yy658: - yych = *++p; - if (yych == 'E') - goto yy659; - if (yych != 'e') - goto yy497; - yy659: + goto yy367; + if (yych == 't') + goto yy367; + goto yy333; + yy463: yych = *++p; - if (yych == 'R') - goto yy529; - if (yych == 'r') - goto yy529; - goto yy497; - yy660: + if (yych == 'D') + goto yy367; + if (yych == 'd') + goto yy367; + goto yy333; + yy464: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - goto yy497; - } else { - if (yych <= ' ') - goto yy530; - if (yych <= '.') - goto yy497; - goto yy532; - } - } else { - if (yych <= 'F') { - if (yych == '>') - goto yy530; - goto yy497; - } else { - if (yych <= 'G') - goto yy661; - if (yych != 'g') - goto yy497; - } - } - yy661: + if (yych == 'T') + goto yy478; + if (yych == 't') + goto yy478; + goto yy333; + yy465: yych = *++p; - if (yych == 'R') - goto yy662; - if (yych != 'r') - goto yy497; - yy662: + if (yych == 'S') + goto yy479; + if (yych == 's') + goto yy479; + goto yy333; + yy466: yych = *++p; if (yych == 'O') - goto yy663; - if (yych != 'o') - goto yy497; - yy663: - yych = *++p; - if (yych == 'U') - goto yy664; - if (yych != 'u') - goto yy497; - yy664: + goto yy480; + if (yych == 'o') + goto yy480; + goto yy333; + yy467: yych = *++p; - if (yych == 'P') - goto yy529; - if (yych == 'p') - goto yy529; - goto yy497; - yy665: + if (yych == 'Q') + goto yy481; + if (yych == 'q') + goto yy481; + goto yy333; + yy468: yych = *++p; - if (yych == 'D') - goto yy680; - if (yych == 'd') - goto yy680; - goto yy497; - yy666: + if (yych == 'R') + goto yy367; + if (yych == 'r') + goto yy367; + goto yy333; + yy469: yych = *++p; if (yych == 'O') - goto yy673; + goto yy482; if (yych == 'o') - goto yy673; - goto yy497; - yy667: + goto yy482; + goto yy333; + yy470: yych = *++p; - if (yych == 'S') - goto yy668; - if (yych != 's') - goto yy497; - yy668: + if (yych == 'L') + goto yy479; + if (yych == 'l') + goto yy479; + goto yy333; + yy471: yych = *++p; - if (yych == 'E') - goto yy669; - if (yych != 'e') - goto yy497; - yy669: + if (yych == 'G') + goto yy367; + if (yych == 'g') + goto yy367; + goto yy333; + yy472: + yych = *++p; + if (yych == 'S') + goto yy483; + if (yych == 's') + goto yy483; + goto yy333; + yy473: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy497; + goto yy333; if (yych <= '\r') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { if (yych <= ' ') - goto yy530; + goto yy383; if (yych <= '.') - goto yy497; - goto yy532; + goto yy333; + goto yy385; } } else { - if (yych <= 'E') { + if (yych <= 'R') { if (yych == '>') - goto yy530; - goto yy497; + goto yy383; + goto yy333; } else { - if (yych <= 'F') - goto yy670; - if (yych != 'f') - goto yy497; + if (yych <= 'S') + goto yy483; + if (yych == 's') + goto yy483; + goto yy333; } } - yy670: - yych = *++p; - if (yych == 'O') - goto yy671; - if (yych != 'o') - goto yy497; - yy671: - yych = *++p; - if (yych == 'N') - goto yy672; - if (yych != 'n') - goto yy497; - yy672: + yy474: yych = *++p; if (yych == 'T') - goto yy529; + goto yy484; if (yych == 't') - goto yy529; - goto yy497; - yy673: - yych = *++p; - if (yych == 'C') - goto yy674; - if (yych != 'c') - goto yy497; - yy674: - yych = *++p; - if (yych == 'K') - goto yy675; - if (yych != 'k') - goto yy497; - yy675: - yych = *++p; - if (yych == 'Q') - goto yy676; - if (yych != 'q') - goto yy497; - yy676: - yych = *++p; - if (yych == 'U') - goto yy677; - if (yych != 'u') - goto yy497; - yy677: - yych = *++p; - if (yych == 'O') - goto yy678; - if (yych != 'o') - goto yy497; - yy678: - yych = *++p; - if (yych == 'T') - goto yy679; - if (yych != 't') - goto yy497; - yy679: - yych = *++p; - if (yych == 'E') - goto yy529; - if (yych == 'e') - goto yy529; - goto yy497; - yy680: - yych = *++p; - if (yych == 'Y') - goto yy529; - if (yych == 'y') - goto yy529; - goto yy497; - yy681: + goto yy484; + goto yy333; + yy475: yych = *++p; - if (yych == 'I') - goto yy692; - if (yych == 'i') - goto yy692; - goto yy497; - yy682: + if (yych == 'M') + goto yy485; + if (yych == 'm') + goto yy485; + goto yy333; + yy476: yych = *++p; if (yych == 'T') - goto yy688; + goto yy427; if (yych == 't') - goto yy688; - goto yy497; - yy683: - yych = *++p; - if (yych == 'D') - goto yy684; - if (yych != 'd') - goto yy497; - yy684: + goto yy427; + goto yy333; + yy477: yych = *++p; if (yych == 'R') - goto yy685; - if (yych != 'r') - goto yy497; - yy685: - yych = *++p; - if (yych == 'E') - goto yy686; - if (yych != 'e') - goto yy497; - yy686: + goto yy407; + if (yych == 'r') + goto yy407; + goto yy333; + yy478: yych = *++p; - if (yych == 'S') - goto yy687; - if (yych != 's') - goto yy497; - yy687: + if (yych == 'A') + goto yy486; + if (yych == 'a') + goto yy486; + goto yy333; + yy479: yych = *++p; if (yych == 'S') - goto yy529; + goto yy367; if (yych == 's') - goto yy529; - goto yy497; - yy688: + goto yy367; + goto yy333; + yy480: yych = *++p; - if (yych == 'I') - goto yy689; - if (yych != 'i') - goto yy497; - yy689: + if (yych == 'N') + goto yy462; + if (yych == 'n') + goto yy462; + goto yy333; + yy481: yych = *++p; - if (yych == 'C') - goto yy690; - if (yych != 'c') - goto yy497; - yy690: + if (yych == 'U') + goto yy487; + if (yych == 'u') + goto yy487; + goto yy333; + yy482: yych = *++p; - if (yych == 'L') - goto yy691; - if (yych != 'l') - goto yy497; - yy691: + if (yych == 'U') + goto yy488; + if (yych == 'u') + goto yy488; + goto yy333; + yy483: yych = *++p; if (yych == 'E') - goto yy529; + goto yy462; if (yych == 'e') - goto yy529; - goto yy497; - yy692: - yych = *++p; - if (yych == 'D') - goto yy693; - if (yych != 'd') - goto yy497; - yy693: + goto yy462; + goto yy333; + yy484: yych = *++p; if (yych == 'E') - goto yy529; + goto yy415; if (yych == 'e') - goto yy529; - goto yy497; - yy694: + goto yy415; + goto yy333; + yy485: yych = *++p; if (yych == 'E') - goto yy570; + goto yy479; if (yych == 'e') - goto yy570; - goto yy497; - yy695: - yych = *++p; - if (yych == 'R') - goto yy696; - if (yych != 'r') - goto yy497; - yy696: + goto yy479; + goto yy333; + yy486: yych = *++p; - if (yych == 'A') - goto yy697; - if (yych != 'a') - goto yy497; - yy697: + if (yych == '[') + goto yy489; + goto yy333; + yy487: yych = *++p; - if (yych == 'M') - goto yy529; - if (yych == 'm') - goto yy529; - goto yy497; - yy698: + if (yych == 'O') + goto yy491; + if (yych == 'o') + goto yy491; + goto yy333; + yy488: yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy530; - goto yy497; - } else { - if (yych <= ' ') - goto yy530; - if (yych <= '.') - goto yy497; - goto yy532; - } - } else { - if (yych <= '@') { - if (yych == '>') - goto yy530; - goto yy497; - } else { - if (yych <= 'A') - goto yy695; - if (yych == 'a') - goto yy695; - goto yy497; - } - } - yy699: + if (yych == 'P') + goto yy367; + if (yych == 'p') + goto yy367; + goto yy333; + yy489: ++p; - if ((yych = *p) <= 'U') { - if (yych <= 'N') { - if (yych == 'E') - goto yy555; - goto yy497; - } else { - if (yych <= 'O') - goto yy554; - if (yych <= 'T') - goto yy497; - goto yy553; - } - } else { - if (yych <= 'n') { - if (yych == 'e') - goto yy555; - goto yy497; - } else { - if (yych <= 'o') - goto yy554; - if (yych == 'u') - goto yy553; - goto yy497; - } - } + { return 5; } + yy491: + ++p; + if ((yych = *p) == 'T') + goto yy439; + if (yych == 't') + goto yy439; + goto yy333; } } @@ -11677,15 +7916,15 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 202, 194, 198, 194, + 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 198, 224, 64, 224, 224, 224, 224, 128, 224, 224, - 224, 224, 224, 241, 240, 224, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 240, 224, 192, 192, 192, 224, 224, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, 224, 240, 192, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 224, 224, 224, + 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224, + 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11699,927 +7938,591 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { }; yych = *p; if (yych == '<') - goto yy704; + goto yy496; ++p; - yy703 : { return 0; } - yy704: + yy495 : { return 0; } + yy496: yyaccept = 0; yych = *(marker = ++p); if (yych <= '@') { - if (yych == '/') - goto yy708; - goto yy703; + if (yych != '/') + goto yy495; } else { if (yych <= 'Z') - goto yy705; + goto yy499; if (yych <= '`') - goto yy703; - if (yych >= '{') - goto yy703; - } - yy705: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy705; - } - if (yych <= ' ') { - if (yych <= 0x08) - goto yy707; - if (yych <= '\r') - goto yy719; - if (yych >= ' ') - goto yy719; - } else { - if (yych <= '/') { - if (yych >= '/') - goto yy721; - } else { - if (yych == '>') - goto yy713; - } - } - yy707: - p = marker; - if (yyaccept == 0) { - goto yy703; - } else { - goto yy717; + goto yy495; + if (yych <= 'z') + goto yy499; + goto yy495; } - yy708: yych = *++p; if (yych <= '@') - goto yy707; + goto yy498; if (yych <= 'Z') - goto yy709; + goto yy501; if (yych <= '`') - goto yy707; - if (yych >= '{') - goto yy707; - yy709: + goto yy498; + if (yych <= 'z') + goto yy501; + yy498: + p = marker; + if (yyaccept == 0) { + goto yy495; + } else { + goto yy514; + } + yy499: ++p; yych = *p; if (yybm[0 + yych] & 2) { - goto yy711; + goto yy503; } if (yych <= '=') { - if (yych <= '-') { - if (yych <= ',') - goto yy707; - goto yy709; + if (yych <= '.') { + if (yych == '-') + goto yy499; + goto yy498; } else { if (yych <= '/') - goto yy707; + goto yy505; if (yych <= '9') - goto yy709; - goto yy707; + goto yy499; + goto yy498; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy713; + goto yy506; if (yych <= '@') - goto yy707; - goto yy709; + goto yy498; + goto yy499; } else { if (yych <= '`') - goto yy707; + goto yy498; if (yych <= 'z') - goto yy709; - goto yy707; + goto yy499; + goto yy498; } } - yy711: + yy501: ++p; yych = *p; - if (yybm[0 + yych] & 2) { - goto yy711; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy498; + if (yych <= '\r') + goto yy508; + goto yy498; + } else { + if (yych <= ' ') + goto yy508; + if (yych == '-') + goto yy501; + goto yy498; + } + } else { + if (yych <= '@') { + if (yych <= '9') + goto yy501; + if (yych == '>') + goto yy506; + goto yy498; + } else { + if (yych <= 'Z') + goto yy501; + if (yych <= '`') + goto yy498; + if (yych <= 'z') + goto yy501; + goto yy498; + } } - if (yych != '>') - goto yy707; - yy713: + yy503: ++p; yych = *p; - if (yybm[0 + yych] & 4) { - goto yy713; + if (yybm[0 + yych] & 2) { + goto yy503; } - if (yych <= 0x08) - goto yy707; - if (yych <= '\n') - goto yy715; - if (yych <= '\v') - goto yy707; - if (yych <= '\r') - goto yy718; - goto yy707; - yy715: - yyaccept = 1; - marker = ++p; + if (yych <= '>') { + if (yych <= '9') { + if (yych != '/') + goto yy498; + } else { + if (yych <= ':') + goto yy510; + if (yych <= '=') + goto yy498; + goto yy506; + } + } else { + if (yych <= '^') { + if (yych <= '@') + goto yy498; + if (yych <= 'Z') + goto yy510; + goto yy498; + } else { + if (yych == '`') + goto yy498; + if (yych <= 'z') + goto yy510; + goto yy498; + } + } + yy505: + yych = *++p; + if (yych != '>') + goto yy498; + yy506: + ++p; yych = *p; if (yybm[0 + yych] & 4) { - goto yy713; + goto yy506; } if (yych <= 0x08) - goto yy717; + goto yy498; if (yych <= '\n') - goto yy715; + goto yy512; if (yych <= '\v') - goto yy717; + goto yy498; if (yych <= '\r') - goto yy718; - yy717 : { return 7; } - yy718: - yych = *++p; - goto yy717; - yy719: + goto yy515; + goto yy498; + yy508: ++p; yych = *p; - if (yych <= ':') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy707; - if (yych <= '\r') - goto yy719; - if (yych <= 0x1F) - goto yy707; - goto yy719; - } else { - if (yych == '/') - goto yy721; - if (yych <= '9') - goto yy707; - goto yy722; - } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy498; + if (yych <= '\r') + goto yy508; + goto yy498; } else { - if (yych <= 'Z') { - if (yych == '>') - goto yy713; - if (yych <= '@') - goto yy707; - goto yy722; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy707; - goto yy722; - } else { - if (yych <= '`') - goto yy707; - if (yych <= 'z') - goto yy722; - goto yy707; - } - } + if (yych <= ' ') + goto yy508; + if (yych == '>') + goto yy506; + goto yy498; } - yy721: - yych = *++p; - if (yych == '>') - goto yy713; - goto yy707; - yy722: + yy510: ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy722; + if (yybm[0 + yych] & 8) { + goto yy510; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy707; + goto yy498; + goto yy516; } else { - if (yych != ' ') - goto yy707; + if (yych == ' ') + goto yy516; + goto yy498; } } else { if (yych <= '<') { if (yych <= '/') - goto yy721; - goto yy707; + goto yy505; + goto yy498; } else { if (yych <= '=') - goto yy726; + goto yy518; if (yych <= '>') - goto yy713; - goto yy707; + goto yy506; + goto yy498; } } - yy724: + yy512: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy506; + } + if (yych <= 0x08) + goto yy514; + if (yych <= '\n') + goto yy512; + if (yych <= '\v') + goto yy514; + if (yych <= '\r') + goto yy515; + yy514 : { return 7; } + yy515: + yych = *++p; + goto yy514; + yy516: ++p; yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy707; + goto yy498; if (yych <= '\r') - goto yy724; + goto yy516; if (yych <= 0x1F) - goto yy707; - goto yy724; + goto yy498; + goto yy516; } else { if (yych <= '/') { if (yych <= '.') - goto yy707; - goto yy721; + goto yy498; + goto yy505; } else { if (yych == ':') - goto yy722; - goto yy707; + goto yy510; + goto yy498; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy726; + goto yy518; if (yych <= '>') - goto yy713; + goto yy506; if (yych <= '@') - goto yy707; - goto yy722; + goto yy498; + goto yy510; } else { if (yych <= '_') { if (yych <= '^') - goto yy707; - goto yy722; + goto yy498; + goto yy510; } else { if (yych <= '`') - goto yy707; + goto yy498; if (yych <= 'z') - goto yy722; - goto yy707; + goto yy510; + goto yy498; } } } - yy726: + yy518: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy728; + goto yy520; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy707; - if (yych >= '!') - goto yy739; + goto yy498; + if (yych <= ' ') + goto yy518; + goto yy522; } else { if (yych <= '\'') - goto yy737; + goto yy524; if (yych <= 0xC1) - goto yy707; + goto yy498; if (yych <= 0xDF) - goto yy730; - goto yy731; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy736; - goto yy732; - } else { - if (yych <= 0xF0) - goto yy733; - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy728; - } - if (yych <= 0xDF) { - if (yych <= '\'') { - if (yych <= 0x00) - goto yy707; - if (yych <= ' ') - goto yy762; - if (yych <= '"') - goto yy739; - goto yy737; - } else { - if (yych == '>') - goto yy713; - if (yych <= 0xC1) - goto yy707; - goto yy730; + goto yy526; + goto yy527; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy731; if (yych == 0xED) - goto yy736; - goto yy732; + goto yy529; + goto yy528; } else { if (yych <= 0xF0) - goto yy733; + goto yy530; if (yych <= 0xF3) - goto yy734; + goto yy531; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy532; + goto yy498; } } - yy728: + yy520: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy728; + goto yy520; } if (yych <= 0xE0) { if (yych <= '=') { if (yych <= 0x00) - goto yy707; + goto yy498; if (yych <= ' ') - goto yy756; - goto yy707; + goto yy503; + goto yy498; } else { if (yych <= '>') - goto yy713; + goto yy506; if (yych <= 0xC1) - goto yy707; - if (yych >= 0xE0) - goto yy731; + goto yy498; + if (yych <= 0xDF) + goto yy526; + goto yy527; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy736; - goto yy732; + goto yy529; + goto yy528; } else { if (yych <= 0xF0) - goto yy733; + goto yy530; if (yych <= 0xF3) - goto yy734; + goto yy531; if (yych <= 0xF4) - goto yy735; - goto yy707; + goto yy532; + goto yy498; } } - yy730: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0xBF) - goto yy728; - goto yy707; - yy731: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy707; - if (yych <= 0xBF) - goto yy730; - goto yy707; - yy732: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0xBF) - goto yy730; - goto yy707; - yy733: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy707; - if (yych <= 0xBF) - goto yy732; - goto yy707; - yy734: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0xBF) - goto yy732; - goto yy707; - yy735: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0x8F) - goto yy732; - goto yy707; - yy736: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0x9F) - goto yy730; - goto yy707; - yy737: + yy522: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy737; + goto yy522; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy707; - if (yych <= '\'') - goto yy748; - goto yy707; + goto yy498; + if (yych <= '"') + goto yy533; + goto yy498; } else { if (yych <= 0xDF) - goto yy749; + goto yy534; if (yych <= 0xE0) - goto yy750; - goto yy751; + goto yy535; + goto yy536; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy755; + goto yy537; if (yych <= 0xEF) - goto yy751; - goto yy752; + goto yy536; + goto yy538; } else { if (yych <= 0xF3) - goto yy753; + goto yy539; if (yych <= 0xF4) - goto yy754; - goto yy707; + goto yy540; + goto yy498; } } - yy739: + yy524: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy739; + goto yy524; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy707; - if (yych <= '"') - goto yy748; - goto yy707; + goto yy498; + if (yych <= '\'') + goto yy533; + goto yy498; } else { if (yych <= 0xDF) - goto yy741; + goto yy541; if (yych <= 0xE0) - goto yy742; - goto yy743; + goto yy542; + goto yy543; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy747; + goto yy544; if (yych <= 0xEF) - goto yy743; - goto yy744; + goto yy543; + goto yy545; } else { if (yych <= 0xF3) - goto yy745; + goto yy546; if (yych <= 0xF4) - goto yy746; - goto yy707; + goto yy547; + goto yy498; } } - yy741: + yy526: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy739; - goto yy707; - yy742: + goto yy520; + goto yy498; + yy527: ++p; yych = *p; if (yych <= 0x9F) - goto yy707; + goto yy498; + if (yych <= 0xBF) + goto yy526; + goto yy498; + yy528: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy498; if (yych <= 0xBF) - goto yy741; - goto yy707; - yy743: + goto yy526; + goto yy498; + yy529: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; - if (yych <= 0xBF) - goto yy741; - goto yy707; - yy744: + goto yy498; + if (yych <= 0x9F) + goto yy526; + goto yy498; + yy530: ++p; yych = *p; if (yych <= 0x8F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy743; - goto yy707; - yy745: + goto yy528; + goto yy498; + yy531: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy743; - goto yy707; - yy746: + goto yy528; + goto yy498; + yy532: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0x8F) - goto yy743; - goto yy707; - yy747: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy707; - if (yych <= 0x9F) - goto yy741; - goto yy707; - yy748: + goto yy528; + goto yy498; + yy533: ++p; yych = *p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy707; - if (yych <= '\r') - goto yy719; - if (yych <= 0x1F) - goto yy707; - goto yy719; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy707; - goto yy721; - } else { - if (yych == '>') - goto yy713; - goto yy707; - } + if (yybm[0 + yych] & 2) { + goto yy503; } - yy749: + if (yych == '/') + goto yy505; + if (yych == '>') + goto yy506; + goto yy498; + yy534: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy737; - goto yy707; - yy750: + goto yy522; + goto yy498; + yy535: ++p; yych = *p; if (yych <= 0x9F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy749; - goto yy707; - yy751: + goto yy534; + goto yy498; + yy536: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy749; - goto yy707; - yy752: + goto yy534; + goto yy498; + yy537: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy498; + if (yych <= 0x9F) + goto yy534; + goto yy498; + yy538: ++p; yych = *p; if (yych <= 0x8F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy751; - goto yy707; - yy753: + goto yy536; + goto yy498; + yy539: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0xBF) - goto yy751; - goto yy707; - yy754: + goto yy536; + goto yy498; + yy540: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; if (yych <= 0x8F) - goto yy751; - goto yy707; - yy755: + goto yy536; + goto yy498; + yy541: ++p; yych = *p; if (yych <= 0x7F) - goto yy707; + goto yy498; + if (yych <= 0xBF) + goto yy524; + goto yy498; + yy542: + ++p; + yych = *p; if (yych <= 0x9F) - goto yy749; - goto yy707; - yy756: + goto yy498; + if (yych <= 0xBF) + goto yy541; + goto yy498; + yy543: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy707; - if (yych <= 0x08) - goto yy728; - goto yy756; - } else { - if (yych == ' ') - goto yy756; - if (yych <= '!') - goto yy728; - goto yy707; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy707; - if (yych <= '9') - goto yy728; - } else { - if (yych <= ';') - goto yy728; - if (yych <= '=') - goto yy707; - if (yych <= '>') - goto yy713; - goto yy728; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy758; - if (yych <= '^') - goto yy728; - if (yych >= '`') - goto yy707; - } else { - if (yych <= 'z') - goto yy758; - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) - goto yy707; - goto yy730; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy731; - if (yych == 0xED) - goto yy736; - goto yy732; - } else { - if (yych <= 0xF0) - goto yy733; - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - } - yy758: + if (yych <= 0x7F) + goto yy498; + if (yych <= 0xBF) + goto yy541; + goto yy498; + yy544: ++p; yych = *p; - if (yych <= '>') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy707; - if (yych <= 0x08) - goto yy728; - if (yych >= 0x0E) - goto yy728; - } else { - if (yych <= ' ') - goto yy760; - if (yych == '"') - goto yy707; - goto yy728; - } - } else { - if (yych <= '/') { - if (yych <= '\'') - goto yy707; - if (yych <= ',') - goto yy728; - if (yych <= '.') - goto yy758; - goto yy728; - } else { - if (yych <= ';') { - if (yych <= ':') - goto yy758; - goto yy728; - } else { - if (yych <= '<') - goto yy707; - if (yych <= '=') - goto yy726; - goto yy713; - } - } - } - } else { - if (yych <= 0xC1) { - if (yych <= '_') { - if (yych <= '@') - goto yy728; - if (yych <= 'Z') - goto yy758; - if (yych <= '^') - goto yy728; - goto yy758; - } else { - if (yych <= '`') - goto yy707; - if (yych <= 'z') - goto yy758; - if (yych <= 0x7F) - goto yy728; - goto yy707; - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy730; - if (yych <= 0xE0) - goto yy731; - if (yych <= 0xEC) - goto yy732; - goto yy736; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy732; - goto yy733; - } else { - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - } - } - yy760: + if (yych <= 0x7F) + goto yy498; + if (yych <= 0x9F) + goto yy541; + goto yy498; + yy545: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= 0x00) - goto yy707; - if (yych <= 0x08) - goto yy728; - if (yych <= '\r') - goto yy760; - goto yy728; - } else { - if (yych <= ' ') - goto yy760; - if (yych == '"') - goto yy707; - goto yy728; - } - } else { - if (yych <= ';') { - if (yych <= '\'') - goto yy707; - if (yych == ':') - goto yy758; - goto yy728; - } else { - if (yych <= '<') - goto yy707; - if (yych <= '=') - goto yy726; - if (yych <= '>') - goto yy713; - goto yy728; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy758; - if (yych <= '^') - goto yy728; - if (yych <= '_') - goto yy758; - goto yy707; - } else { - if (yych <= 'z') - goto yy758; - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) - goto yy707; - goto yy730; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy731; - if (yych == 0xED) - goto yy736; - goto yy732; - } else { - if (yych <= 0xF0) - goto yy733; - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - } - yy762: + if (yych <= 0x8F) + goto yy498; + if (yych <= 0xBF) + goto yy543; + goto yy498; + yy546: ++p; yych = *p; - if (yych <= '@') { - if (yych <= '"') { - if (yych <= '\r') { - if (yych <= 0x00) - goto yy707; - if (yych <= 0x08) - goto yy728; - goto yy762; - } else { - if (yych == ' ') - goto yy762; - if (yych <= '!') - goto yy728; - goto yy739; - } - } else { - if (yych <= ':') { - if (yych == '\'') - goto yy737; - if (yych <= '9') - goto yy728; - goto yy758; - } else { - if (yych <= ';') - goto yy728; - if (yych <= '=') - goto yy707; - if (yych <= '>') - goto yy713; - goto yy728; - } - } - } else { - if (yych <= 0xDF) { - if (yych <= '`') { - if (yych <= 'Z') - goto yy758; - if (yych <= '^') - goto yy728; - if (yych <= '_') - goto yy758; - goto yy707; - } else { - if (yych <= 'z') - goto yy758; - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) - goto yy707; - goto yy730; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy731; - if (yych == 0xED) - goto yy736; - goto yy732; - } else { - if (yych <= 0xF0) - goto yy733; - if (yych <= 0xF3) - goto yy734; - if (yych <= 0xF4) - goto yy735; - goto yy707; - } - } - } + if (yych <= 0x7F) + goto yy498; + if (yych <= 0xBF) + goto yy543; + goto yy498; + yy547: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy498; + if (yych <= 0x8F) + goto yy543; + goto yy498; } } @@ -12652,891 +8555,850 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych <= 0x00) - goto yy766; + goto yy550; if (yych != '\n') - goto yy768; + goto yy552; } else { if (yych <= '<') - goto yy769; + goto yy553; if (yych <= 0x7F) - goto yy768; + goto yy552; if (yych >= 0xC2) - goto yy770; + goto yy554; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy771; + goto yy555; if (yych == 0xED) - goto yy773; - goto yy772; + goto yy557; + goto yy556; } else { if (yych <= 0xF0) - goto yy774; + goto yy558; if (yych <= 0xF3) - goto yy775; + goto yy559; if (yych <= 0xF4) - goto yy776; + goto yy560; } } - yy766: + yy550: ++p; - yy767 : { return 0; } - yy768: + yy551 : { return 0; } + yy552: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy767; + goto yy551; if (yych <= '\t') - goto yy781; - goto yy767; + goto yy562; + goto yy551; } else { if (yych <= 0x7F) - goto yy781; + goto yy562; if (yych <= 0xC1) - goto yy767; + goto yy551; if (yych <= 0xF4) - goto yy781; - goto yy767; + goto yy562; + goto yy551; } - yy769: + yy553: yyaccept = 0; yych = *(marker = ++p); if (yych <= '.') { if (yych <= 0x00) - goto yy767; + goto yy551; if (yych == '\n') - goto yy767; - goto yy781; + goto yy551; + goto yy562; } else { if (yych <= 0x7F) { if (yych <= '/') - goto yy789; - goto yy781; + goto yy573; + goto yy562; } else { if (yych <= 0xC1) - goto yy767; + goto yy551; if (yych <= 0xF4) - goto yy781; - goto yy767; + goto yy562; + goto yy551; } } - yy770: + yy554: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy551; if (yych <= 0xBF) - goto yy780; - goto yy767; - yy771: + goto yy561; + goto yy551; + yy555: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy767; + goto yy551; if (yych <= 0xBF) - goto yy779; - goto yy767; - yy772: + goto yy566; + goto yy551; + yy556: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy551; if (yych <= 0xBF) - goto yy779; - goto yy767; - yy773: + goto yy566; + goto yy551; + yy557: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; + goto yy551; if (yych <= 0x9F) - goto yy779; - goto yy767; - yy774: + goto yy566; + goto yy551; + yy558: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy767; - if (yych <= 0xBF) - goto yy777; - goto yy767; - yy775: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy767; + goto yy551; if (yych <= 0xBF) - goto yy777; - goto yy767; - yy776: + goto yy568; + goto yy551; + yy559: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy767; - if (yych >= 0x90) - goto yy767; - yy777: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy778; - if (yych <= 0xBF) - goto yy779; - yy778: - p = marker; - if (yyaccept == 0) { - goto yy767; - } else { - goto yy795; - } - yy779: - ++p; - yych = *p; + goto yy551; + if (yych <= 0xBF) + goto yy568; + goto yy551; + yy560: + yyaccept = 0; + yych = *(marker = ++p); if (yych <= 0x7F) - goto yy778; - if (yych >= 0xC0) - goto yy778; - yy780: + goto yy551; + if (yych <= 0x8F) + goto yy568; + goto yy551; + yy561: ++p; yych = *p; - yy781: + yy562: if (yybm[0 + yych] & 64) { - goto yy780; + goto yy561; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy778; - if (yych >= '=') - goto yy778; + goto yy563; + if (yych <= '<') + goto yy564; } else { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; - goto yy777; + goto yy567; + goto yy568; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy788; + goto yy569; if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; } } - yy782: + yy563: + p = marker; + if (yyaccept == 0) { + goto yy551; + } else { + goto yy583; + } + yy564: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xDF) { if (yych <= '.') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { if (yych <= '/') - goto yy789; + goto yy573; if (yych <= 0x7F) - goto yy780; + goto yy561; if (yych <= 0xC1) - goto yy778; - goto yy779; + goto yy563; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych == 0xED) - goto yy788; - goto yy777; + goto yy569; + goto yy568; } else { if (yych <= 0xF0) - goto yy785; + goto yy570; if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } - yy784: + yy566: ++p; yych = *p; - if (yych <= 0x9F) - goto yy778; + if (yych <= 0x7F) + goto yy563; if (yych <= 0xBF) - goto yy779; - goto yy778; - yy785: + goto yy561; + goto yy563; + yy567: ++p; yych = *p; - if (yych <= 0x8F) - goto yy778; + if (yych <= 0x9F) + goto yy563; if (yych <= 0xBF) - goto yy777; - goto yy778; - yy786: + goto yy566; + goto yy563; + yy568: ++p; yych = *p; if (yych <= 0x7F) - goto yy778; + goto yy563; if (yych <= 0xBF) - goto yy777; - goto yy778; - yy787: + goto yy566; + goto yy563; + yy569: ++p; yych = *p; if (yych <= 0x7F) - goto yy778; + goto yy563; + if (yych <= 0x9F) + goto yy566; + goto yy563; + yy570: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy777; - goto yy778; - yy788: + goto yy563; + if (yych <= 0xBF) + goto yy568; + goto yy563; + yy571: ++p; yych = *p; if (yych <= 0x7F) - goto yy778; - if (yych <= 0x9F) - goto yy779; - goto yy778; - yy789: + goto yy563; + if (yych <= 0xBF) + goto yy568; + goto yy563; + yy572: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy563; + if (yych <= 0x8F) + goto yy568; + goto yy563; + yy573: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 's') { if (yych <= 'P') { if (yych <= '\t') { if (yych <= 0x00) - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { if (yych <= '\n') - goto yy778; + goto yy563; if (yych <= 'O') - goto yy780; - goto yy791; + goto yy561; } } else { if (yych <= 'o') { - if (yych != 'S') - goto yy780; + if (yych == 'S') + goto yy575; + goto yy561; } else { if (yych <= 'p') - goto yy791; + goto yy574; if (yych <= 'r') - goto yy780; + goto yy561; + goto yy575; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } else { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; - goto yy777; + goto yy567; + goto yy568; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy788; + goto yy569; + if (yych <= 0xEF) + goto yy568; + goto yy570; + } else { + if (yych <= 0xF3) + goto yy571; + if (yych <= 0xF4) + goto yy572; + goto yy563; + } + } + } + yy574: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy564; + } + if (yych <= 0xC1) { + if (yych <= 'Q') { + if (yych <= 0x00) + goto yy563; + if (yych == '\n') + goto yy563; + goto yy561; + } else { + if (yych <= 'q') { + if (yych <= 'R') + goto yy576; + goto yy561; + } else { + if (yych <= 'r') + goto yy576; + if (yych <= 0x7F) + goto yy561; + goto yy563; + } + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy566; + if (yych <= 0xE0) + goto yy567; + if (yych <= 0xEC) + goto yy568; + goto yy569; + } else { + if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } + yy575: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 't') { if (yych <= 'C') { if (yych <= '\t') { if (yych <= 0x00) - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { if (yych <= '\n') - goto yy778; + goto yy563; if (yych <= 'B') - goto yy780; - goto yy796; + goto yy561; + goto yy577; } } else { if (yych <= 'b') { if (yych == 'T') - goto yy797; - goto yy780; + goto yy578; + goto yy561; } else { if (yych <= 'c') - goto yy796; + goto yy577; if (yych <= 's') - goto yy780; - goto yy797; + goto yy561; + goto yy578; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } else { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; - goto yy777; + goto yy567; + goto yy568; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy788; + goto yy569; if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy791: + yy576: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { - if (yych <= 'Q') { + if (yych <= 'D') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { - if (yych <= 'q') { - if (yych >= 'S') - goto yy780; + if (yych <= 'd') { + if (yych <= 'E') + goto yy579; + goto yy561; } else { - if (yych <= 'r') - goto yy792; + if (yych <= 'e') + goto yy579; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy792: + yy577: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { - if (yych <= 'D') { + if (yych <= 'Q') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { - if (yych <= 'd') { - if (yych >= 'F') - goto yy780; + if (yych <= 'q') { + if (yych <= 'R') + goto yy580; + goto yy561; } else { - if (yych <= 'e') - goto yy793; + if (yych <= 'r') + goto yy580; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy793: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy782; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy778; - if (yych == '\n') - goto yy778; - goto yy780; - } else { - if (yych <= '>') - goto yy794; - if (yych <= 0x7F) - goto yy780; - if (yych <= 0xC1) - goto yy778; - goto yy779; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy784; - if (yych == 0xED) - goto yy788; - goto yy777; - } else { - if (yych <= 0xF0) - goto yy785; - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } - } - yy794: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy780; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy795; - if (yych <= '<') - goto yy782; - } else { - if (yych <= 0xDF) - goto yy779; - if (yych <= 0xE0) - goto yy784; - goto yy777; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy788; - if (yych <= 0xEF) - goto yy777; - goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - } - } - yy795 : { return (bufsize_t)(p - start); } - yy796: + yy578: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { - if (yych <= 'Q') { + if (yych <= 'X') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { - if (yych <= 'q') { - if (yych <= 'R') - goto yy800; - goto yy780; + if (yych <= 'x') { + if (yych <= 'Y') + goto yy581; + goto yy561; } else { - if (yych <= 'r') - goto yy800; + if (yych <= 'y') + goto yy581; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy797: + yy579: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } - if (yych <= 0xC1) { - if (yych <= 'X') { + if (yych <= 0xDF) { + if (yych <= '=') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { - if (yych <= 'x') { - if (yych >= 'Z') - goto yy780; - } else { - if (yych <= 'y') - goto yy798; - if (yych <= 0x7F) - goto yy780; - goto yy778; - } + if (yych <= '>') + goto yy582; + if (yych <= 0x7F) + goto yy561; + if (yych <= 0xC1) + goto yy563; + goto yy566; } } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy779; + if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy567; + if (yych == 0xED) + goto yy569; + goto yy568; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; - goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF0) + goto yy570; + if (yych <= 0xF3) + goto yy571; + if (yych <= 0xF4) + goto yy572; + goto yy563; } } - yy798: + yy580: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { - if (yych <= 'K') { + if (yych <= 'H') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { - if (yych <= 'k') { - if (yych >= 'M') - goto yy780; + if (yych <= 'h') { + if (yych <= 'I') + goto yy584; + goto yy561; } else { - if (yych <= 'l') - goto yy799; + if (yych <= 'i') + goto yy584; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy799: + yy581: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { - if (yych <= 'D') { + if (yych <= 'K') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { - if (yych <= 'd') { - if (yych <= 'E') - goto yy793; - goto yy780; + if (yych <= 'k') { + if (yych <= 'L') + goto yy576; + goto yy561; } else { - if (yych <= 'e') - goto yy793; + if (yych <= 'l') + goto yy576; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy800: - ++p; + yy582: + yyaccept = 1; + marker = ++p; yych = *p; - if (yybm[0 + yych] & 128) { - goto yy782; + if (yybm[0 + yych] & 64) { + goto yy561; } - if (yych <= 0xC1) { - if (yych <= 'H') { - if (yych <= 0x00) - goto yy778; - if (yych == '\n') - goto yy778; - goto yy780; - } else { - if (yych <= 'h') { - if (yych >= 'J') - goto yy780; - } else { - if (yych <= 'i') - goto yy801; - if (yych <= 0x7F) - goto yy780; - goto yy778; - } - } - } else { - if (yych <= 0xED) { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy583; + if (yych <= '<') + goto yy564; + } else { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; - if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy567; + goto yy568; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy569; + if (yych <= 0xEF) + goto yy568; + goto yy570; } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy777; - goto yy785; - } else { - if (yych <= 0xF3) - goto yy786; - if (yych <= 0xF4) - goto yy787; - goto yy778; - } + if (yych <= 0xF3) + goto yy571; + if (yych <= 0xF4) + goto yy572; } } - yy801: + yy583 : { return (bufsize_t)(p - start); } + yy584: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { if (yych <= 'O') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { if (yych <= 'o') { if (yych >= 'Q') - goto yy780; + goto yy561; } else { if (yych <= 'p') - goto yy802; + goto yy585; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } - yy802: + yy585: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy782; + goto yy564; } if (yych <= 0xC1) { if (yych <= 'S') { if (yych <= 0x00) - goto yy778; + goto yy563; if (yych == '\n') - goto yy778; - goto yy780; + goto yy563; + goto yy561; } else { if (yych <= 's') { if (yych <= 'T') - goto yy793; - goto yy780; + goto yy579; + goto yy561; } else { if (yych <= 't') - goto yy793; + goto yy579; if (yych <= 0x7F) - goto yy780; - goto yy778; + goto yy561; + goto yy563; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy779; + goto yy566; if (yych <= 0xE0) - goto yy784; + goto yy567; if (yych <= 0xEC) - goto yy777; - goto yy788; + goto yy568; + goto yy569; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy777; - goto yy785; + goto yy568; + goto yy570; } else { if (yych <= 0xF3) - goto yy786; + goto yy571; if (yych <= 0xF4) - goto yy787; - goto yy778; + goto yy572; + goto yy563; } } } @@ -13572,334 +9434,337 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ',') { if (yych <= 0x00) - goto yy805; + goto yy588; if (yych != '\n') - goto yy807; + goto yy590; } else { if (yych <= '-') - goto yy808; + goto yy591; if (yych <= 0x7F) - goto yy807; + goto yy590; if (yych >= 0xC2) - goto yy809; + goto yy592; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy810; + goto yy593; if (yych == 0xED) - goto yy812; - goto yy811; + goto yy595; + goto yy594; } else { if (yych <= 0xF0) - goto yy813; + goto yy596; if (yych <= 0xF3) - goto yy814; + goto yy597; if (yych <= 0xF4) - goto yy815; + goto yy598; } } - yy805: + yy588: ++p; - yy806 : { return 0; } - yy807: + yy589 : { return 0; } + yy590: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy806; + goto yy589; if (yych <= '\t') - goto yy820; - goto yy806; + goto yy600; + goto yy589; } else { if (yych <= 0x7F) - goto yy820; + goto yy600; if (yych <= 0xC1) - goto yy806; + goto yy589; if (yych <= 0xF4) - goto yy820; - goto yy806; + goto yy600; + goto yy589; } - yy808: + yy591: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy827; + goto yy610; } if (yych <= '\n') { if (yych <= 0x00) - goto yy806; + goto yy589; if (yych <= '\t') - goto yy820; - goto yy806; + goto yy600; + goto yy589; } else { if (yych <= 0x7F) - goto yy820; + goto yy600; if (yych <= 0xC1) - goto yy806; + goto yy589; if (yych <= 0xF4) - goto yy820; - goto yy806; + goto yy600; + goto yy589; } - yy809: + yy592: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy589; if (yych <= 0xBF) - goto yy819; - goto yy806; - yy810: + goto yy599; + goto yy589; + yy593: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy806; + goto yy589; if (yych <= 0xBF) - goto yy818; - goto yy806; - yy811: + goto yy603; + goto yy589; + yy594: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy589; if (yych <= 0xBF) - goto yy818; - goto yy806; - yy812: + goto yy603; + goto yy589; + yy595: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy589; if (yych <= 0x9F) - goto yy818; - goto yy806; - yy813: + goto yy603; + goto yy589; + yy596: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy806; + goto yy589; if (yych <= 0xBF) - goto yy816; - goto yy806; - yy814: + goto yy605; + goto yy589; + yy597: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; + goto yy589; if (yych <= 0xBF) - goto yy816; - goto yy806; - yy815: + goto yy605; + goto yy589; + yy598: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy806; - if (yych >= 0x90) - goto yy806; - yy816: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy817; - if (yych <= 0xBF) - goto yy818; - yy817: - p = marker; - if (yyaccept == 0) { - goto yy806; - } else { - goto yy830; - } - yy818: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy817; - if (yych >= 0xC0) - goto yy817; - yy819: + goto yy589; + if (yych <= 0x8F) + goto yy605; + goto yy589; + yy599: ++p; yych = *p; - yy820: + yy600: if (yybm[0 + yych] & 64) { - goto yy819; + goto yy599; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy817; - if (yych >= '.') - goto yy817; + goto yy601; + if (yych <= '-') + goto yy602; } else { if (yych <= 0xDF) - goto yy818; + goto yy603; if (yych <= 0xE0) - goto yy822; - goto yy816; + goto yy604; + goto yy605; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy826; + goto yy606; if (yych <= 0xEF) - goto yy816; - goto yy823; + goto yy605; + goto yy607; } else { if (yych <= 0xF3) - goto yy824; + goto yy608; if (yych <= 0xF4) - goto yy825; - goto yy817; + goto yy609; } } - yy821: + yy601: + p = marker; + if (yyaccept == 0) { + goto yy589; + } else { + goto yy613; + } + yy602: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy819; + goto yy599; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy817; + goto yy601; if (yych <= '-') - goto yy827; - goto yy817; + goto yy610; + goto yy601; } else { if (yych <= 0xDF) - goto yy818; - if (yych >= 0xE1) - goto yy816; + goto yy603; + if (yych <= 0xE0) + goto yy604; + goto yy605; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy826; + goto yy606; if (yych <= 0xEF) - goto yy816; - goto yy823; + goto yy605; + goto yy607; } else { if (yych <= 0xF3) - goto yy824; + goto yy608; if (yych <= 0xF4) - goto yy825; - goto yy817; + goto yy609; + goto yy601; } } - yy822: + yy603: ++p; yych = *p; - if (yych <= 0x9F) - goto yy817; + if (yych <= 0x7F) + goto yy601; if (yych <= 0xBF) - goto yy818; - goto yy817; - yy823: + goto yy599; + goto yy601; + yy604: ++p; yych = *p; - if (yych <= 0x8F) - goto yy817; + if (yych <= 0x9F) + goto yy601; if (yych <= 0xBF) - goto yy816; - goto yy817; - yy824: + goto yy603; + goto yy601; + yy605: ++p; yych = *p; if (yych <= 0x7F) - goto yy817; + goto yy601; if (yych <= 0xBF) - goto yy816; - goto yy817; - yy825: + goto yy603; + goto yy601; + yy606: ++p; yych = *p; if (yych <= 0x7F) - goto yy817; + goto yy601; + if (yych <= 0x9F) + goto yy603; + goto yy601; + yy607: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy816; - goto yy817; - yy826: + goto yy601; + if (yych <= 0xBF) + goto yy605; + goto yy601; + yy608: ++p; yych = *p; if (yych <= 0x7F) - goto yy817; - if (yych <= 0x9F) - goto yy818; - goto yy817; - yy827: + goto yy601; + if (yych <= 0xBF) + goto yy605; + goto yy601; + yy609: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy601; + if (yych <= 0x8F) + goto yy605; + goto yy601; + yy610: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy827; + goto yy610; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy817; + goto yy601; if (yych == '\n') - goto yy817; - goto yy819; + goto yy601; + goto yy599; } else { if (yych <= '>') - goto yy829; + goto yy612; if (yych <= 0x7F) - goto yy819; + goto yy599; if (yych <= 0xC1) - goto yy817; - goto yy818; + goto yy601; + goto yy603; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy822; + goto yy604; if (yych == 0xED) - goto yy826; - goto yy816; + goto yy606; + goto yy605; } else { if (yych <= 0xF0) - goto yy823; + goto yy607; if (yych <= 0xF3) - goto yy824; + goto yy608; if (yych <= 0xF4) - goto yy825; - goto yy817; + goto yy609; + goto yy601; } } - yy829: + yy612: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy819; + goto yy599; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy830; + goto yy613; if (yych <= '-') - goto yy821; + goto yy602; } else { if (yych <= 0xDF) - goto yy818; + goto yy603; if (yych <= 0xE0) - goto yy822; - goto yy816; + goto yy604; + goto yy605; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy826; + goto yy606; if (yych <= 0xEF) - goto yy816; - goto yy823; + goto yy605; + goto yy607; } else { if (yych <= 0xF3) - goto yy824; + goto yy608; if (yych <= 0xF4) - goto yy825; + goto yy609; } } - yy830 : { return (bufsize_t)(p - start); } + yy613 : { return (bufsize_t)(p - start); } } } @@ -13932,301 +9797,302 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '>') { if (yych <= 0x00) - goto yy833; + goto yy616; if (yych != '\n') - goto yy835; + goto yy618; } else { if (yych <= '?') - goto yy836; + goto yy619; if (yych <= 0x7F) - goto yy835; + goto yy618; if (yych >= 0xC2) - goto yy837; + goto yy620; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy838; + goto yy621; if (yych == 0xED) - goto yy840; - goto yy839; + goto yy623; + goto yy622; } else { if (yych <= 0xF0) - goto yy841; + goto yy624; if (yych <= 0xF3) - goto yy842; + goto yy625; if (yych <= 0xF4) - goto yy843; + goto yy626; } } - yy833: + yy616: ++p; - yy834 : { return 0; } - yy835: + yy617 : { return 0; } + yy618: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy834; + goto yy617; if (yych <= '\t') - goto yy848; - goto yy834; + goto yy628; + goto yy617; } else { if (yych <= 0x7F) - goto yy848; + goto yy628; if (yych <= 0xC1) - goto yy834; + goto yy617; if (yych <= 0xF4) - goto yy848; - goto yy834; + goto yy628; + goto yy617; } - yy836: + yy619: yyaccept = 0; yych = *(marker = ++p); if (yych <= '=') { if (yych <= 0x00) - goto yy834; + goto yy617; if (yych == '\n') - goto yy834; - goto yy848; + goto yy617; + goto yy628; } else { if (yych <= 0x7F) { if (yych <= '>') - goto yy856; - goto yy848; + goto yy639; + goto yy628; } else { if (yych <= 0xC1) - goto yy834; + goto yy617; if (yych <= 0xF4) - goto yy848; - goto yy834; + goto yy628; + goto yy617; } } - yy837: + yy620: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy617; if (yych <= 0xBF) - goto yy847; - goto yy834; - yy838: + goto yy627; + goto yy617; + yy621: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy834; + goto yy617; if (yych <= 0xBF) - goto yy846; - goto yy834; - yy839: + goto yy632; + goto yy617; + yy622: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy617; if (yych <= 0xBF) - goto yy846; - goto yy834; - yy840: + goto yy632; + goto yy617; + yy623: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy617; if (yych <= 0x9F) - goto yy846; - goto yy834; - yy841: + goto yy632; + goto yy617; + yy624: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy834; + goto yy617; if (yych <= 0xBF) - goto yy844; - goto yy834; - yy842: + goto yy634; + goto yy617; + yy625: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; + goto yy617; if (yych <= 0xBF) - goto yy844; - goto yy834; - yy843: + goto yy634; + goto yy617; + yy626: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy834; - if (yych >= 0x90) - goto yy834; - yy844: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy845; - if (yych <= 0xBF) - goto yy846; - yy845: - p = marker; - if (yyaccept == 0) { - goto yy834; - } else { - goto yy857; - } - yy846: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy845; - if (yych >= 0xC0) - goto yy845; - yy847: + goto yy617; + if (yych <= 0x8F) + goto yy634; + goto yy617; + yy627: ++p; yych = *p; - yy848: + yy628: if (yybm[0 + yych] & 64) { - goto yy847; + goto yy627; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy845; - if (yych >= '@') - goto yy845; + goto yy629; + if (yych <= '?') + goto yy630; } else { if (yych <= 0xDF) - goto yy846; + goto yy632; if (yych <= 0xE0) - goto yy851; - goto yy844; + goto yy633; + goto yy634; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy855; + goto yy635; if (yych <= 0xEF) - goto yy844; - goto yy852; + goto yy634; + goto yy636; } else { if (yych <= 0xF3) - goto yy853; + goto yy637; if (yych <= 0xF4) - goto yy854; - goto yy845; + goto yy638; } } - yy849: + yy629: + p = marker; + if (yyaccept == 0) { + goto yy617; + } else { + goto yy640; + } + yy630: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy849; + goto yy630; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy845; + goto yy629; if (yych == '\n') - goto yy845; - goto yy847; + goto yy629; + goto yy627; } else { if (yych <= '>') - goto yy856; + goto yy639; if (yych <= 0x7F) - goto yy847; + goto yy627; if (yych <= 0xC1) - goto yy845; - goto yy846; + goto yy629; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy851; + goto yy633; if (yych == 0xED) - goto yy855; - goto yy844; + goto yy635; + goto yy634; } else { if (yych <= 0xF0) - goto yy852; + goto yy636; if (yych <= 0xF3) - goto yy853; + goto yy637; if (yych <= 0xF4) - goto yy854; - goto yy845; + goto yy638; + goto yy629; } } - yy851: + yy632: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy629; + if (yych <= 0xBF) + goto yy627; + goto yy629; + yy633: ++p; yych = *p; if (yych <= 0x9F) - goto yy845; + goto yy629; if (yych <= 0xBF) - goto yy846; - goto yy845; - yy852: + goto yy632; + goto yy629; + yy634: ++p; yych = *p; - if (yych <= 0x8F) - goto yy845; + if (yych <= 0x7F) + goto yy629; if (yych <= 0xBF) - goto yy844; - goto yy845; - yy853: + goto yy632; + goto yy629; + yy635: ++p; yych = *p; if (yych <= 0x7F) - goto yy845; + goto yy629; + if (yych <= 0x9F) + goto yy632; + goto yy629; + yy636: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy629; if (yych <= 0xBF) - goto yy844; - goto yy845; - yy854: + goto yy634; + goto yy629; + yy637: ++p; yych = *p; if (yych <= 0x7F) - goto yy845; - if (yych <= 0x8F) - goto yy844; - goto yy845; - yy855: + goto yy629; + if (yych <= 0xBF) + goto yy634; + goto yy629; + yy638: ++p; yych = *p; if (yych <= 0x7F) - goto yy845; - if (yych <= 0x9F) - goto yy846; - goto yy845; - yy856: + goto yy629; + if (yych <= 0x8F) + goto yy634; + goto yy629; + yy639: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy847; + goto yy627; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy857; + goto yy640; if (yych <= '?') - goto yy849; + goto yy630; } else { if (yych <= 0xDF) - goto yy846; + goto yy632; if (yych <= 0xE0) - goto yy851; - goto yy844; + goto yy633; + goto yy634; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy855; + goto yy635; if (yych <= 0xEF) - goto yy844; - goto yy852; + goto yy634; + goto yy636; } else { if (yych <= 0xF3) - goto yy853; + goto yy637; if (yych <= 0xF4) - goto yy854; + goto yy638; } } - yy857 : { return (bufsize_t)(p - start); } + yy640 : { return (bufsize_t)(p - start); } } } @@ -14239,277 +10105,268 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 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, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 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, }; yych = *p; - if (yych <= 0xDF) { - if (yych <= '=') { + if (yybm[0 + yych] & 64) { + goto yy646; + } + if (yych <= 0xE0) { + if (yych <= '\n') { if (yych <= 0x00) - goto yy860; - if (yych != '\n') - goto yy862; + goto yy643; + if (yych <= '\t') + goto yy645; } else { - if (yych <= '>') - goto yy863; if (yych <= 0x7F) - goto yy862; - if (yych >= 0xC2) - goto yy865; + goto yy645; + if (yych <= 0xC1) + goto yy643; + if (yych <= 0xDF) + goto yy649; + goto yy650; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy866; if (yych == 0xED) - goto yy868; - goto yy867; + goto yy652; + goto yy651; } else { if (yych <= 0xF0) - goto yy869; + goto yy653; if (yych <= 0xF3) - goto yy870; + goto yy654; if (yych <= 0xF4) - goto yy871; + goto yy655; } } - yy860: + yy643: ++p; - yy861 : { return 0; } - yy862: + yy644 : { return 0; } + yy645: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy861; + goto yy644; if (yych <= '\t') - goto yy876; - goto yy861; + goto yy657; + goto yy644; } else { if (yych <= 0x7F) - goto yy876; + goto yy657; if (yych <= 0xC1) - goto yy861; + goto yy644; if (yych <= 0xF4) - goto yy876; - goto yy861; + goto yy657; + goto yy644; } - yy863: + yy646: yyaccept = 1; - yych = *(marker = ++p); - if (yych <= '\n') { - if (yych <= 0x00) - goto yy864; - if (yych <= '\t') - goto yy876; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy656; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy648; + if (yych <= '>') + goto yy646; + } else { + if (yych <= 0xDF) + goto yy659; + if (yych <= 0xE0) + goto yy660; + goto yy661; + } } else { - if (yych <= 0x7F) - goto yy876; - if (yych <= 0xC1) - goto yy864; - if (yych <= 0xF4) - goto yy876; + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy662; + if (yych <= 0xEF) + goto yy661; + goto yy663; + } else { + if (yych <= 0xF3) + goto yy664; + if (yych <= 0xF4) + goto yy665; + } } - yy864 : { return (bufsize_t)(p - start); } - yy865: + yy648 : { return (bufsize_t)(p - start); } + yy649: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy644; if (yych <= 0xBF) - goto yy875; - goto yy861; - yy866: + goto yy656; + goto yy644; + yy650: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy861; + goto yy644; if (yych <= 0xBF) - goto yy874; - goto yy861; - yy867: + goto yy659; + goto yy644; + yy651: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy644; if (yych <= 0xBF) - goto yy874; - goto yy861; - yy868: + goto yy659; + goto yy644; + yy652: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy644; if (yych <= 0x9F) - goto yy874; - goto yy861; - yy869: + goto yy659; + goto yy644; + yy653: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy861; + goto yy644; if (yych <= 0xBF) - goto yy872; - goto yy861; - yy870: + goto yy661; + goto yy644; + yy654: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; + goto yy644; if (yych <= 0xBF) - goto yy872; - goto yy861; - yy871: + goto yy661; + goto yy644; + yy655: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy861; - if (yych >= 0x90) - goto yy861; - yy872: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy873; - if (yych <= 0xBF) - goto yy874; - yy873: - p = marker; - if (yyaccept == 0) { - goto yy861; - } else { - goto yy864; - } - yy874: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy873; - if (yych >= 0xC0) - goto yy873; - yy875: + goto yy644; + if (yych <= 0x8F) + goto yy661; + goto yy644; + yy656: ++p; yych = *p; - yy876: - if (yybm[0 + yych] & 64) { - goto yy875; + yy657: + if (yybm[0 + yych] & 128) { + goto yy656; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy873; - if (yych >= '?') - goto yy873; + goto yy658; + if (yych <= '>') + goto yy646; } else { if (yych <= 0xDF) - goto yy874; + goto yy659; if (yych <= 0xE0) - goto yy879; - goto yy872; + goto yy660; + goto yy661; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy883; + goto yy662; if (yych <= 0xEF) - goto yy872; - goto yy880; + goto yy661; + goto yy663; } else { if (yych <= 0xF3) - goto yy881; + goto yy664; if (yych <= 0xF4) - goto yy882; - goto yy873; + goto yy665; } } - yy877: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy875; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy864; - if (yych <= '>') - goto yy877; - goto yy864; - } else { - if (yych <= 0xDF) - goto yy874; - if (yych >= 0xE1) - goto yy872; - } + yy658: + p = marker; + if (yyaccept == 0) { + goto yy644; } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy883; - if (yych <= 0xEF) - goto yy872; - goto yy880; - } else { - if (yych <= 0xF3) - goto yy881; - if (yych <= 0xF4) - goto yy882; - goto yy864; - } + goto yy648; } - yy879: + yy659: ++p; yych = *p; - if (yych <= 0x9F) - goto yy873; + if (yych <= 0x7F) + goto yy658; if (yych <= 0xBF) - goto yy874; - goto yy873; - yy880: + goto yy656; + goto yy658; + yy660: ++p; yych = *p; - if (yych <= 0x8F) - goto yy873; + if (yych <= 0x9F) + goto yy658; if (yych <= 0xBF) - goto yy872; - goto yy873; - yy881: + goto yy659; + goto yy658; + yy661: ++p; yych = *p; if (yych <= 0x7F) - goto yy873; + goto yy658; if (yych <= 0xBF) - goto yy872; - goto yy873; - yy882: + goto yy659; + goto yy658; + yy662: ++p; yych = *p; if (yych <= 0x7F) - goto yy873; + goto yy658; + if (yych <= 0x9F) + goto yy659; + goto yy658; + yy663: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy872; - goto yy873; - yy883: + goto yy658; + if (yych <= 0xBF) + goto yy661; + goto yy658; + yy664: ++p; yych = *p; if (yych <= 0x7F) - goto yy873; - if (yych <= 0x9F) - goto yy874; - goto yy873; + goto yy658; + if (yych <= 0xBF) + goto yy661; + goto yy658; + yy665: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy658; + if (yych <= 0x8F) + goto yy661; + goto yy658; } } @@ -14542,334 +10399,337 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '\\') { if (yych <= 0x00) - goto yy886; + goto yy668; if (yych != '\n') - goto yy888; + goto yy670; } else { if (yych <= ']') - goto yy889; + goto yy671; if (yych <= 0x7F) - goto yy888; + goto yy670; if (yych >= 0xC2) - goto yy890; + goto yy672; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy891; + goto yy673; if (yych == 0xED) - goto yy893; - goto yy892; + goto yy675; + goto yy674; } else { if (yych <= 0xF0) - goto yy894; + goto yy676; if (yych <= 0xF3) - goto yy895; + goto yy677; if (yych <= 0xF4) - goto yy896; + goto yy678; } } - yy886: + yy668: ++p; - yy887 : { return 0; } - yy888: + yy669 : { return 0; } + yy670: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy887; + goto yy669; if (yych <= '\t') - goto yy901; - goto yy887; + goto yy680; + goto yy669; } else { if (yych <= 0x7F) - goto yy901; + goto yy680; if (yych <= 0xC1) - goto yy887; + goto yy669; if (yych <= 0xF4) - goto yy901; - goto yy887; + goto yy680; + goto yy669; } - yy889: + yy671: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy908; + goto yy690; } if (yych <= '\n') { if (yych <= 0x00) - goto yy887; + goto yy669; if (yych <= '\t') - goto yy901; - goto yy887; + goto yy680; + goto yy669; } else { if (yych <= 0x7F) - goto yy901; + goto yy680; if (yych <= 0xC1) - goto yy887; + goto yy669; if (yych <= 0xF4) - goto yy901; - goto yy887; + goto yy680; + goto yy669; } - yy890: + yy672: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy669; if (yych <= 0xBF) - goto yy900; - goto yy887; - yy891: + goto yy679; + goto yy669; + yy673: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy887; + goto yy669; if (yych <= 0xBF) - goto yy899; - goto yy887; - yy892: + goto yy683; + goto yy669; + yy674: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy669; if (yych <= 0xBF) - goto yy899; - goto yy887; - yy893: + goto yy683; + goto yy669; + yy675: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy669; if (yych <= 0x9F) - goto yy899; - goto yy887; - yy894: + goto yy683; + goto yy669; + yy676: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy887; + goto yy669; if (yych <= 0xBF) - goto yy897; - goto yy887; - yy895: + goto yy685; + goto yy669; + yy677: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; + goto yy669; if (yych <= 0xBF) - goto yy897; - goto yy887; - yy896: + goto yy685; + goto yy669; + yy678: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy887; - if (yych >= 0x90) - goto yy887; - yy897: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy898; - if (yych <= 0xBF) - goto yy899; - yy898: - p = marker; - if (yyaccept == 0) { - goto yy887; - } else { - goto yy911; - } - yy899: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy898; - if (yych >= 0xC0) - goto yy898; - yy900: + goto yy669; + if (yych <= 0x8F) + goto yy685; + goto yy669; + yy679: ++p; yych = *p; - yy901: + yy680: if (yybm[0 + yych] & 64) { - goto yy900; + goto yy679; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy898; - if (yych >= '^') - goto yy898; + goto yy681; + if (yych <= ']') + goto yy682; } else { if (yych <= 0xDF) - goto yy899; + goto yy683; if (yych <= 0xE0) - goto yy903; - goto yy897; + goto yy684; + goto yy685; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy907; + goto yy686; if (yych <= 0xEF) - goto yy897; - goto yy904; + goto yy685; + goto yy687; } else { if (yych <= 0xF3) - goto yy905; + goto yy688; if (yych <= 0xF4) - goto yy906; - goto yy898; + goto yy689; } } - yy902: + yy681: + p = marker; + if (yyaccept == 0) { + goto yy669; + } else { + goto yy693; + } + yy682: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy900; + goto yy679; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy898; + goto yy681; if (yych <= ']') - goto yy908; - goto yy898; + goto yy690; + goto yy681; } else { if (yych <= 0xDF) - goto yy899; - if (yych >= 0xE1) - goto yy897; + goto yy683; + if (yych <= 0xE0) + goto yy684; + goto yy685; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy907; + goto yy686; if (yych <= 0xEF) - goto yy897; - goto yy904; + goto yy685; + goto yy687; } else { if (yych <= 0xF3) - goto yy905; + goto yy688; if (yych <= 0xF4) - goto yy906; - goto yy898; + goto yy689; + goto yy681; } } - yy903: + yy683: ++p; yych = *p; - if (yych <= 0x9F) - goto yy898; + if (yych <= 0x7F) + goto yy681; if (yych <= 0xBF) - goto yy899; - goto yy898; - yy904: + goto yy679; + goto yy681; + yy684: ++p; yych = *p; - if (yych <= 0x8F) - goto yy898; + if (yych <= 0x9F) + goto yy681; if (yych <= 0xBF) - goto yy897; - goto yy898; - yy905: + goto yy683; + goto yy681; + yy685: ++p; yych = *p; if (yych <= 0x7F) - goto yy898; + goto yy681; if (yych <= 0xBF) - goto yy897; - goto yy898; - yy906: + goto yy683; + goto yy681; + yy686: ++p; yych = *p; if (yych <= 0x7F) - goto yy898; + goto yy681; + if (yych <= 0x9F) + goto yy683; + goto yy681; + yy687: + ++p; + yych = *p; if (yych <= 0x8F) - goto yy897; - goto yy898; - yy907: + goto yy681; + if (yych <= 0xBF) + goto yy685; + goto yy681; + yy688: ++p; yych = *p; if (yych <= 0x7F) - goto yy898; - if (yych <= 0x9F) - goto yy899; - goto yy898; - yy908: + goto yy681; + if (yych <= 0xBF) + goto yy685; + goto yy681; + yy689: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy681; + if (yych <= 0x8F) + goto yy685; + goto yy681; + yy690: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy908; + goto yy690; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy898; + goto yy681; if (yych == '\n') - goto yy898; - goto yy900; + goto yy681; + goto yy679; } else { if (yych <= '>') - goto yy910; + goto yy692; if (yych <= 0x7F) - goto yy900; + goto yy679; if (yych <= 0xC1) - goto yy898; - goto yy899; + goto yy681; + goto yy683; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy903; + goto yy684; if (yych == 0xED) - goto yy907; - goto yy897; + goto yy686; + goto yy685; } else { if (yych <= 0xF0) - goto yy904; + goto yy687; if (yych <= 0xF3) - goto yy905; + goto yy688; if (yych <= 0xF4) - goto yy906; - goto yy898; + goto yy689; + goto yy681; } } - yy910: + yy692: yyaccept = 1; marker = ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy900; + goto yy679; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy911; + goto yy693; if (yych <= ']') - goto yy902; + goto yy682; } else { if (yych <= 0xDF) - goto yy899; + goto yy683; if (yych <= 0xE0) - goto yy903; - goto yy897; + goto yy684; + goto yy685; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy907; + goto yy686; if (yych <= 0xEF) - goto yy897; - goto yy904; + goto yy685; + goto yy687; } else { if (yych <= 0xF3) - goto yy905; + goto yy688; if (yych <= 0xF4) - goto yy906; + goto yy689; } } - yy911 : { return (bufsize_t)(p - start); } + yy693 : { return (bufsize_t)(p - start); } } } @@ -14884,16 +10744,16 @@ bufsize_t _scan_link_title(const unsigned char *p) { unsigned char yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 96, 224, 224, 224, 224, 160, 224, 192, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 16, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14907,558 +10767,556 @@ bufsize_t _scan_link_title(const unsigned char *p) { yych = *p; if (yych <= '&') { if (yych == '"') - goto yy916; + goto yy698; } else { if (yych <= '\'') - goto yy917; + goto yy699; if (yych <= '(') - goto yy918; + goto yy700; } ++p; - yy915 : { return 0; } - yy916: + yy697 : { return 0; } + yy698: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy915; + goto yy697; if (yych <= 0x7F) - goto yy951; + goto yy702; if (yych <= 0xC1) - goto yy915; + goto yy697; if (yych <= 0xF4) - goto yy951; - goto yy915; - yy917: + goto yy702; + goto yy697; + yy699: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy915; + goto yy697; if (yych <= 0x7F) - goto yy937; + goto yy716; if (yych <= 0xC1) - goto yy915; + goto yy697; if (yych <= 0xF4) - goto yy937; - goto yy915; - yy918: + goto yy716; + goto yy697; + yy700: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy915; + goto yy697; if (yych <= 0x7F) - goto yy923; + goto yy729; if (yych <= 0xC1) - goto yy915; + goto yy697; if (yych <= 0xF4) - goto yy923; - goto yy915; - yy919: + goto yy729; + goto yy697; + yy701: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy922; + yy702: + if (yybm[0 + yych] & 16) { + goto yy701; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= ')') - goto yy933; - goto yy919; + goto yy703; + if (yych <= '"') + goto yy704; + goto yy706; } else { if (yych <= 0xC1) - goto yy921; + goto yy703; if (yych <= 0xDF) - goto yy924; - goto yy925; + goto yy708; + goto yy709; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy930; - goto yy926; + goto yy711; + goto yy710; } else { if (yych <= 0xF0) - goto yy927; + goto yy712; if (yych <= 0xF3) - goto yy928; + goto yy713; if (yych <= 0xF4) - goto yy929; + goto yy714; } } - yy921: + yy703: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy915; + goto yy697; } else { - goto yy932; + goto yy705; } } else { if (yyaccept == 2) { - goto yy946; + goto yy718; } else { - goto yy960; + goto yy731; } } - yy922: + yy704: + ++p; + yy705 : { return (bufsize_t)(p - start); } + yy706: ++p; yych = *p; - yy923: - if (yybm[0 + yych] & 32) { - goto yy922; + if (yybm[0 + yych] & 16) { + goto yy701; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= ')') - goto yy931; - goto yy919; + goto yy703; + if (yych <= '"') + goto yy741; + goto yy706; } else { if (yych <= 0xC1) - goto yy921; + goto yy703; if (yych >= 0xE0) - goto yy925; + goto yy709; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy930; - goto yy926; + goto yy711; + goto yy710; } else { if (yych <= 0xF0) - goto yy927; + goto yy712; if (yych <= 0xF3) - goto yy928; + goto yy713; if (yych <= 0xF4) - goto yy929; - goto yy921; + goto yy714; + goto yy703; } } - yy924: + yy708: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy922; - goto yy921; - yy925: + goto yy701; + goto yy703; + yy709: ++p; yych = *p; if (yych <= 0x9F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy924; - goto yy921; - yy926: + goto yy708; + goto yy703; + yy710: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; - if (yych <= 0xBF) - goto yy924; - goto yy921; - yy927: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy926; - goto yy921; - yy928: + goto yy708; + goto yy703; + yy711: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; - if (yych <= 0xBF) - goto yy926; - goto yy921; - yy929: + goto yy703; + if (yych <= 0x9F) + goto yy708; + goto yy703; + yy712: ++p; yych = *p; - if (yych <= 0x7F) - goto yy921; if (yych <= 0x8F) - goto yy926; - goto yy921; - yy930: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy921; - if (yych <= 0x9F) - goto yy924; - goto yy921; - yy931: + goto yy703; + if (yych <= 0xBF) + goto yy710; + goto yy703; + yy713: ++p; - yy932 : { return (bufsize_t)(p - start); } - yy933: - yyaccept = 1; - marker = ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy922; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy932; - if (yych <= ')') - goto yy931; - goto yy919; - } else { - if (yych <= 0xC1) - goto yy932; - if (yych <= 0xDF) - goto yy924; - goto yy925; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy930; - goto yy926; - } else { - if (yych <= 0xF0) - goto yy927; - if (yych <= 0xF3) - goto yy928; - if (yych <= 0xF4) - goto yy929; - goto yy932; - } - } - yy934: + if (yych <= 0x7F) + goto yy703; + if (yych <= 0xBF) + goto yy710; + goto yy703; + yy714: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy703; + if (yych <= 0x8F) + goto yy710; + goto yy703; + yy715: ++p; yych = *p; + yy716: if (yybm[0 + yych] & 64) { - goto yy936; + goto yy715; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= '\'') - goto yy947; - goto yy934; + goto yy703; + if (yych >= '(') + goto yy719; } else { if (yych <= 0xC1) - goto yy921; + goto yy703; if (yych <= 0xDF) - goto yy938; - goto yy939; + goto yy721; + goto yy722; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy944; - goto yy940; + goto yy724; + goto yy723; } else { if (yych <= 0xF0) - goto yy941; + goto yy725; if (yych <= 0xF3) - goto yy942; + goto yy726; if (yych <= 0xF4) - goto yy943; - goto yy921; + goto yy727; + goto yy703; } } - yy936: + yy717: + ++p; + yy718 : { return (bufsize_t)(p - start); } + yy719: ++p; yych = *p; - yy937: if (yybm[0 + yych] & 64) { - goto yy936; + goto yy715; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; + goto yy703; if (yych <= '\'') - goto yy945; - goto yy934; + goto yy742; + goto yy719; } else { if (yych <= 0xC1) - goto yy921; + goto yy703; if (yych >= 0xE0) - goto yy939; + goto yy722; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy944; - goto yy940; + goto yy724; + goto yy723; } else { if (yych <= 0xF0) - goto yy941; + goto yy725; if (yych <= 0xF3) - goto yy942; + goto yy726; if (yych <= 0xF4) - goto yy943; - goto yy921; + goto yy727; + goto yy703; } } - yy938: + yy721: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy936; - goto yy921; - yy939: + goto yy715; + goto yy703; + yy722: ++p; yych = *p; if (yych <= 0x9F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy938; - goto yy921; - yy940: + goto yy721; + goto yy703; + yy723: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy938; - goto yy921; - yy941: + goto yy721; + goto yy703; + yy724: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy703; + if (yych <= 0x9F) + goto yy721; + goto yy703; + yy725: ++p; yych = *p; if (yych <= 0x8F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy940; - goto yy921; - yy942: + goto yy723; + goto yy703; + yy726: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy940; - goto yy921; - yy943: + goto yy723; + goto yy703; + yy727: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0x8F) - goto yy940; - goto yy921; - yy944: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy921; - if (yych <= 0x9F) - goto yy938; - goto yy921; - yy945: - ++p; - yy946 : { return (bufsize_t)(p - start); } - yy947: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy936; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy946; - if (yych <= '\'') - goto yy945; - goto yy934; - } else { - if (yych <= 0xC1) - goto yy946; - if (yych <= 0xDF) - goto yy938; - goto yy939; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy944; - goto yy940; - } else { - if (yych <= 0xF0) - goto yy941; - if (yych <= 0xF3) - goto yy942; - if (yych <= 0xF4) - goto yy943; - goto yy946; - } - } - yy948: + goto yy723; + goto yy703; + yy728: ++p; yych = *p; + yy729: if (yybm[0 + yych] & 128) { - goto yy950; + goto yy728; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= '"') - goto yy961; - goto yy948; + goto yy703; + if (yych >= '*') + goto yy732; } else { if (yych <= 0xC1) - goto yy921; + goto yy703; if (yych <= 0xDF) - goto yy952; - goto yy953; + goto yy734; + goto yy735; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy958; - goto yy954; + goto yy737; + goto yy736; } else { if (yych <= 0xF0) - goto yy955; + goto yy738; if (yych <= 0xF3) - goto yy956; + goto yy739; if (yych <= 0xF4) - goto yy957; - goto yy921; + goto yy740; + goto yy703; } } - yy950: + yy730: + ++p; + yy731 : { return (bufsize_t)(p - start); } + yy732: ++p; yych = *p; - yy951: if (yybm[0 + yych] & 128) { - goto yy950; + goto yy728; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy921; - if (yych <= '"') - goto yy959; - goto yy948; + goto yy703; + if (yych <= ')') + goto yy743; + goto yy732; } else { if (yych <= 0xC1) - goto yy921; + goto yy703; if (yych >= 0xE0) - goto yy953; + goto yy735; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy958; - goto yy954; + goto yy737; + goto yy736; } else { if (yych <= 0xF0) - goto yy955; + goto yy738; if (yych <= 0xF3) - goto yy956; + goto yy739; if (yych <= 0xF4) - goto yy957; - goto yy921; + goto yy740; + goto yy703; } } - yy952: + yy734: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy950; - goto yy921; - yy953: + goto yy728; + goto yy703; + yy735: ++p; yych = *p; if (yych <= 0x9F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy952; - goto yy921; - yy954: + goto yy734; + goto yy703; + yy736: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy952; - goto yy921; - yy955: + goto yy734; + goto yy703; + yy737: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy703; + if (yych <= 0x9F) + goto yy734; + goto yy703; + yy738: ++p; yych = *p; if (yych <= 0x8F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy954; - goto yy921; - yy956: + goto yy736; + goto yy703; + yy739: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0xBF) - goto yy954; - goto yy921; - yy957: + goto yy736; + goto yy703; + yy740: ++p; yych = *p; if (yych <= 0x7F) - goto yy921; + goto yy703; if (yych <= 0x8F) - goto yy954; - goto yy921; - yy958: - ++p; + goto yy736; + goto yy703; + yy741: + yyaccept = 1; + marker = ++p; yych = *p; - if (yych <= 0x7F) - goto yy921; - if (yych <= 0x9F) - goto yy952; - goto yy921; - yy959: - ++p; - yy960 : { return (bufsize_t)(p - start); } - yy961: + if (yybm[0 + yych] & 16) { + goto yy701; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy705; + if (yych <= '"') + goto yy704; + goto yy706; + } else { + if (yych <= 0xC1) + goto yy705; + if (yych <= 0xDF) + goto yy708; + goto yy709; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy711; + goto yy710; + } else { + if (yych <= 0xF0) + goto yy712; + if (yych <= 0xF3) + goto yy713; + if (yych <= 0xF4) + goto yy714; + goto yy705; + } + } + yy742: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy715; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy718; + if (yych <= '\'') + goto yy717; + goto yy719; + } else { + if (yych <= 0xC1) + goto yy718; + if (yych <= 0xDF) + goto yy721; + goto yy722; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy724; + goto yy723; + } else { + if (yych <= 0xF0) + goto yy725; + if (yych <= 0xF3) + goto yy726; + if (yych <= 0xF4) + goto yy727; + goto yy718; + } + } + yy743: yyaccept = 3; marker = ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy950; + goto yy728; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy960; - if (yych <= '"') - goto yy959; - goto yy948; + goto yy731; + if (yych <= ')') + goto yy730; + goto yy732; } else { if (yych <= 0xC1) - goto yy960; + goto yy731; if (yych <= 0xDF) - goto yy952; - goto yy953; + goto yy734; + goto yy735; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy958; - goto yy954; + goto yy737; + goto yy736; } else { if (yych <= 0xF0) - goto yy955; + goto yy738; if (yych <= 0xF3) - goto yy956; + goto yy739; if (yych <= 0xF4) - goto yy957; - goto yy960; + goto yy740; + goto yy731; } } } @@ -15486,28 +11344,18 @@ bufsize_t _scan_spacechars(const unsigned char *p) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *p; - if (yych <= 0x08) - goto yy964; - if (yych <= '\r') - goto yy966; - if (yych == ' ') - goto yy966; - yy964: + if (yybm[0 + yych] & 128) { + goto yy748; + } ++p; { return 0; } - yy966: - ++p; - yych = *p; - goto yy969; - yy967 : { return (bufsize_t)(p - start); } - yy968: + yy748: ++p; yych = *p; - yy969: if (yybm[0 + yych] & 128) { - goto yy968; + goto yy748; } - goto yy967; + { return (bufsize_t)(p - start); } } } @@ -15534,115 +11382,116 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { }; yych = *p; if (yych == '#') - goto yy974; + goto yy755; ++p; - yy973 : { return 0; } - yy974: + yy754 : { return 0; } + yy755: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy977; + goto yy756; } if (yych <= '\f') { if (yych <= 0x08) - goto yy973; - if (yych >= '\v') - goto yy973; + goto yy754; + if (yych <= '\n') + goto yy759; + goto yy754; } else { if (yych <= '\r') - goto yy975; + goto yy759; if (yych == '#') - goto yy979; - goto yy973; + goto yy760; + goto yy754; } - yy975: - ++p; - yy976 : { return (bufsize_t)(p - start); } - yy977: + yy756: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy756; } - goto yy976; - yy979: + yy758 : { return (bufsize_t)(p - start); } + yy759: + yych = *++p; + goto yy758; + yy760: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy756; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy761; if (yych <= '\n') - goto yy975; + goto yy759; } else { if (yych <= '\r') - goto yy975; + goto yy759; if (yych == '#') - goto yy981; + goto yy762; } - yy980: + yy761: p = marker; - goto yy973; - yy981: + goto yy754; + yy762: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy756; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy761; if (yych <= '\n') - goto yy975; - goto yy980; + goto yy759; + goto yy761; } else { if (yych <= '\r') - goto yy975; + goto yy759; if (yych != '#') - goto yy980; + goto yy761; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy756; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy761; if (yych <= '\n') - goto yy975; - goto yy980; + goto yy759; + goto yy761; } else { if (yych <= '\r') - goto yy975; + goto yy759; if (yych != '#') - goto yy980; + goto yy761; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy977; + goto yy756; } if (yych <= '\f') { if (yych <= 0x08) - goto yy980; + goto yy761; if (yych <= '\n') - goto yy975; - goto yy980; + goto yy759; + goto yy761; } else { if (yych <= '\r') - goto yy975; + goto yy759; if (yych != '#') - goto yy980; + goto yy761; } ++p; if (yybm[0 + (yych = *p)] & 128) { - goto yy977; + goto yy756; } if (yych <= 0x08) - goto yy980; + goto yy761; if (yych <= '\n') - goto yy975; + goto yy759; if (yych == '\r') - goto yy975; - goto yy980; + goto yy759; + goto yy761; } } @@ -15654,141 +11503,141 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 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, 32, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 32, 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, 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, }; yych = *p; if (yych == '-') - goto yy989; + goto yy770; if (yych == '=') - goto yy990; + goto yy771; ++p; - yy988 : { return 0; } - yy989: + yy769 : { return 0; } + yy770: yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy1002; + if (yybm[0 + yych] & 64) { + goto yy777; } if (yych <= '\f') { if (yych <= 0x08) - goto yy988; + goto yy769; if (yych <= '\n') - goto yy999; - goto yy988; + goto yy773; + goto yy769; } else { if (yych <= '\r') - goto yy999; + goto yy773; if (yych == ' ') - goto yy999; - goto yy988; + goto yy773; + goto yy769; } - yy990: + yy771: yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy996; + if (yybm[0 + yych] & 128) { + goto yy783; } if (yych <= '\f') { if (yych <= 0x08) - goto yy988; + goto yy769; if (yych <= '\n') - goto yy992; - goto yy988; + goto yy780; + goto yy769; } else { if (yych <= '\r') - goto yy992; + goto yy780; if (yych == ' ') - goto yy992; - goto yy988; + goto yy780; + goto yy769; } - yy991: + yy772: ++p; yych = *p; - yy992: + yy773: if (yybm[0 + yych] & 32) { - goto yy991; + goto yy772; } if (yych <= 0x08) - goto yy993; + goto yy774; if (yych <= '\n') - goto yy994; + goto yy775; if (yych == '\r') - goto yy994; - yy993: + goto yy775; + yy774: p = marker; - goto yy988; - yy994: + goto yy769; + yy775: ++p; - { return 1; } - yy996: + { return 2; } + yy777: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy991; + goto yy772; } if (yych <= '\f') { if (yych <= 0x08) - goto yy993; + goto yy774; if (yych <= '\n') - goto yy994; - goto yy993; + goto yy775; + goto yy774; } else { if (yych <= '\r') - goto yy994; - if (yych == '=') - goto yy996; - goto yy993; + goto yy775; + if (yych == '-') + goto yy777; + goto yy774; } - yy998: + yy779: ++p; yych = *p; - yy999: + yy780: if (yych <= '\f') { if (yych <= 0x08) - goto yy993; + goto yy774; if (yych <= '\t') - goto yy998; + goto yy779; if (yych >= '\v') - goto yy993; + goto yy774; } else { if (yych <= '\r') - goto yy1000; + goto yy781; if (yych == ' ') - goto yy998; - goto yy993; + goto yy779; + goto yy774; } - yy1000: + yy781: ++p; - { return 2; } - yy1002: + { return 1; } + yy783: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1002; + goto yy783; } if (yych <= '\f') { if (yych <= 0x08) - goto yy993; + goto yy774; if (yych <= '\t') - goto yy998; + goto yy779; if (yych <= '\n') - goto yy1000; - goto yy993; + goto yy781; + goto yy774; } else { if (yych <= '\r') - goto yy1000; + goto yy781; if (yych == ' ') - goto yy998; - goto yy993; + goto yy779; + goto yy774; } } } @@ -15803,265 +11652,193 @@ 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 32, 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, 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, }; yych = *p; if (yych <= ',') { if (yych == '*') - goto yy1008; + goto yy789; } else { if (yych <= '-') - goto yy1009; + goto yy790; if (yych == '_') - goto yy1010; + goto yy791; } ++p; - yy1007 : { return 0; } - yy1008: + yy788 : { return 0; } + yy789: + yych = *(marker = ++p); + if (yybm[0 + yych] & 16) { + goto yy792; + } + if (yych == '*') + goto yy795; + goto yy788; + yy790: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1032; - goto yy1007; + goto yy797; + goto yy788; } else { if (yych <= ' ') - goto yy1032; - if (yych == '*') - goto yy1034; - goto yy1007; + goto yy797; + if (yych == '-') + goto yy799; + goto yy788; } - yy1009: + yy791: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy1022; - goto yy1007; + goto yy801; + goto yy788; } else { if (yych <= ' ') - goto yy1022; - if (yych == '-') - goto yy1024; - goto yy1007; - } - yy1010: - yych = *(marker = ++p); - if (yybm[0 + yych] & 16) { - goto yy1011; + goto yy801; + if (yych == '_') + goto yy803; + goto yy788; } - if (yych == '_') - goto yy1014; - goto yy1007; - yy1011: + yy792: ++p; yych = *p; if (yybm[0 + yych] & 16) { - goto yy1011; + goto yy792; } - if (yych == '_') - goto yy1014; - yy1013: + if (yych == '*') + goto yy795; + yy794: p = marker; - goto yy1007; - yy1014: + goto yy788; + yy795: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1014; - goto yy1013; + goto yy795; + goto yy794; } else { if (yych <= ' ') - goto yy1014; - if (yych != '_') - goto yy1013; - } - yy1016: - ++p; - yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1013; - goto yy1016; - } else { - if (yych <= '\n') - goto yy1018; - if (yych <= '\f') - goto yy1013; - } - } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1013; - goto yy1016; - } else { - if (yych == '_') - goto yy1020; - goto yy1013; - } - } - yy1018: - ++p; - { return (bufsize_t)(p - start); } - yy1020: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1020; + goto yy795; + if (yych == '*') + goto yy805; + goto yy794; } - if (yych <= 0x08) - goto yy1013; - if (yych <= '\n') - goto yy1018; - if (yych == '\r') - goto yy1018; - goto yy1013; - yy1022: + yy797: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1022; - goto yy1013; + goto yy797; + goto yy794; } else { if (yych <= ' ') - goto yy1022; + goto yy797; if (yych != '-') - goto yy1013; + goto yy794; } - yy1024: + yy799: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1024; - goto yy1013; + goto yy799; + goto yy794; } else { if (yych <= ' ') - goto yy1024; - if (yych != '-') - goto yy1013; - } - yy1026: - ++p; - yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1013; - goto yy1026; - } else { - if (yych <= '\n') - goto yy1028; - if (yych <= '\f') - goto yy1013; - } - } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1013; - goto yy1026; - } else { - if (yych == '-') - goto yy1030; - goto yy1013; - } - } - yy1028: - ++p; - { return (bufsize_t)(p - start); } - yy1030: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1030; + goto yy799; + if (yych == '-') + goto yy807; + goto yy794; } - if (yych <= 0x08) - goto yy1013; - if (yych <= '\n') - goto yy1028; - if (yych == '\r') - goto yy1028; - goto yy1013; - yy1032: + yy801: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1032; - goto yy1013; + goto yy801; + goto yy794; } else { if (yych <= ' ') - goto yy1032; - if (yych != '*') - goto yy1013; + goto yy801; + if (yych != '_') + goto yy794; } - yy1034: + yy803: ++p; yych = *p; if (yych <= 0x1F) { if (yych == '\t') - goto yy1034; - goto yy1013; + goto yy803; + goto yy794; } else { if (yych <= ' ') - goto yy1034; - if (yych != '*') - goto yy1013; + goto yy803; + if (yych == '_') + goto yy809; + goto yy794; } - yy1036: + yy805: ++p; yych = *p; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) - goto yy1013; - goto yy1036; - } else { - if (yych <= '\n') - goto yy1038; - if (yych <= '\f') - goto yy1013; - } - } else { - if (yych <= ' ') { - if (yych <= 0x1F) - goto yy1013; - goto yy1036; - } else { - if (yych == '*') - goto yy1040; - goto yy1013; - } + if (yybm[0 + yych] & 32) { + goto yy805; } - yy1038: + if (yych <= 0x08) + goto yy794; + if (yych <= '\n') + goto yy811; + if (yych == '\r') + goto yy811; + goto yy794; + yy807: ++p; - { return (bufsize_t)(p - start); } - yy1040: + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy807; + } + if (yych <= 0x08) + goto yy794; + if (yych <= '\n') + goto yy813; + if (yych == '\r') + goto yy813; + goto yy794; + yy809: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1040; + goto yy809; } if (yych <= 0x08) - goto yy1013; + goto yy794; if (yych <= '\n') - goto yy1038; + goto yy815; if (yych == '\r') - goto yy1038; - goto yy1013; + goto yy815; + goto yy794; + yy811: + ++p; + { return (bufsize_t)(p - start); } + yy813: + ++p; + { return (bufsize_t)(p - start); } + yy815: + ++p; + { return (bufsize_t)(p - start); } } } @@ -16073,16 +11850,16 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 0, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 144, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16095,295 +11872,295 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy1046; + goto yy821; if (yych == '~') - goto yy1047; + goto yy822; ++p; - yy1045 : { return 0; } - yy1046: + yy820 : { return 0; } + yy821: yych = *(marker = ++p); if (yych == '`') - goto yy1063; - goto yy1045; - yy1047: + goto yy823; + goto yy820; + yy822: yych = *(marker = ++p); - if (yych != '~') - goto yy1045; + if (yych == '~') + goto yy825; + goto yy820; + yy823: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1050; + goto yy826; } - yy1049: + yy824: p = marker; - goto yy1045; - yy1050: + goto yy820; + yy825: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy828; + } + goto yy824; + yy826: ++p; yych = *p; marker = p; - if (yybm[0 + yych] & 32) { - goto yy1052; + if (yybm[0 + yych] & 64) { + goto yy830; + } + if (yych <= 0xE0) { + if (yych <= '`') { + if (yych <= 0x00) + goto yy824; + if (yych <= '\r') + goto yy832; + goto yy826; + } else { + if (yych <= 0xC1) + goto yy824; + if (yych <= 0xDF) + goto yy834; + goto yy835; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy837; + goto yy836; + } else { + if (yych <= 0xF0) + goto yy838; + if (yych <= 0xF3) + goto yy839; + if (yych <= 0xF4) + goto yy840; + goto yy824; + } + } + yy828: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy841; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1049; + goto yy824; if (yych <= '\r') - goto yy1061; - goto yy1050; + goto yy843; + goto yy828; } else { if (yych <= 0xC1) - goto yy1049; + goto yy824; if (yych <= 0xDF) - goto yy1054; - goto yy1055; + goto yy845; + goto yy846; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1060; - goto yy1056; + goto yy848; + goto yy847; } else { if (yych <= 0xF0) - goto yy1057; + goto yy849; if (yych <= 0xF3) - goto yy1058; + goto yy850; if (yych <= 0xF4) - goto yy1059; - goto yy1049; + goto yy851; + goto yy824; } } - yy1052: + yy830: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1052; + if (yybm[0 + yych] & 64) { + goto yy830; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1049; - if (yych <= '\r') - goto yy1061; - goto yy1049; + goto yy824; + if (yych >= 0x0E) + goto yy824; } else { if (yych <= 0xDF) - goto yy1054; + goto yy834; if (yych <= 0xE0) - goto yy1055; - goto yy1056; + goto yy835; + goto yy836; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1060; + goto yy837; if (yych <= 0xEF) - goto yy1056; - goto yy1057; + goto yy836; + goto yy838; } else { if (yych <= 0xF3) - goto yy1058; + goto yy839; if (yych <= 0xF4) - goto yy1059; - goto yy1049; + goto yy840; + goto yy824; } } - yy1054: + yy832: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy834: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1052; - goto yy1049; - yy1055: + goto yy830; + goto yy824; + yy835: ++p; yych = *p; if (yych <= 0x9F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1054; - goto yy1049; - yy1056: + goto yy834; + goto yy824; + yy836: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1054; - goto yy1049; - yy1057: + goto yy834; + goto yy824; + yy837: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy824; + if (yych <= 0x9F) + goto yy834; + goto yy824; + yy838: ++p; yych = *p; if (yych <= 0x8F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1056; - goto yy1049; - yy1058: + goto yy836; + goto yy824; + yy839: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1056; - goto yy1049; - yy1059: + goto yy836; + goto yy824; + yy840: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0x8F) - goto yy1056; - goto yy1049; - yy1060: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy1049; - if (yych <= 0x9F) - goto yy1054; - goto yy1049; - yy1061: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy1063: - yych = *++p; - if (yybm[0 + yych] & 64) { - goto yy1064; - } - goto yy1049; - yy1064: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy1066; - } - if (yych <= 0xE0) { - if (yych <= '`') { - if (yych <= 0x00) - goto yy1049; - if (yych <= '\r') - goto yy1075; - goto yy1064; - } else { - if (yych <= 0xC1) - goto yy1049; - if (yych <= 0xDF) - goto yy1068; - goto yy1069; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy1074; - goto yy1070; - } else { - if (yych <= 0xF0) - goto yy1071; - if (yych <= 0xF3) - goto yy1072; - if (yych <= 0xF4) - goto yy1073; - goto yy1049; - } - } - yy1066: + goto yy836; + goto yy824; + yy841: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1066; + goto yy841; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1049; - if (yych <= '\r') - goto yy1075; - goto yy1049; + goto yy824; + if (yych >= 0x0E) + goto yy824; } else { if (yych <= 0xDF) - goto yy1068; + goto yy845; if (yych <= 0xE0) - goto yy1069; - goto yy1070; + goto yy846; + goto yy847; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1074; + goto yy848; if (yych <= 0xEF) - goto yy1070; - goto yy1071; + goto yy847; + goto yy849; } else { if (yych <= 0xF3) - goto yy1072; + goto yy850; if (yych <= 0xF4) - goto yy1073; - goto yy1049; + goto yy851; + goto yy824; } } - yy1068: + yy843: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy845: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1066; - goto yy1049; - yy1069: + goto yy841; + goto yy824; + yy846: ++p; yych = *p; if (yych <= 0x9F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1068; - goto yy1049; - yy1070: + goto yy845; + goto yy824; + yy847: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1068; - goto yy1049; - yy1071: + goto yy845; + goto yy824; + yy848: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy824; + if (yych <= 0x9F) + goto yy845; + goto yy824; + yy849: ++p; yych = *p; if (yych <= 0x8F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1070; - goto yy1049; - yy1072: + goto yy847; + goto yy824; + yy850: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0xBF) - goto yy1070; - goto yy1049; - yy1073: + goto yy847; + goto yy824; + yy851: ++p; yych = *p; if (yych <= 0x7F) - goto yy1049; + goto yy824; if (yych <= 0x8F) - goto yy1070; - goto yy1049; - yy1074: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy1049; - if (yych <= 0x9F) - goto yy1068; - goto yy1049; - yy1075: - ++p; - p = marker; - { return (bufsize_t)(p - start); } + goto yy847; + goto yy824; } } @@ -16395,123 +12172,126 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 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, 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, 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, }; yych = *p; if (yych == '`') - goto yy1081; + goto yy856; if (yych == '~') - goto yy1082; + goto yy857; ++p; - yy1080 : { return 0; } - yy1081: + yy855 : { return 0; } + yy856: yych = *(marker = ++p); if (yych == '`') - goto yy1091; - goto yy1080; - yy1082: + goto yy858; + goto yy855; + yy857: yych = *(marker = ++p); - if (yych != '~') - goto yy1080; + if (yych == '~') + goto yy860; + goto yy855; + yy858: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1085; + goto yy861; } - yy1084: + yy859: p = marker; - goto yy1080; - yy1085: + goto yy855; + yy860: + yych = *++p; + if (yybm[0 + yych] & 64) { + goto yy863; + } + goto yy859; + yy861: ++p; yych = *p; marker = p; - if (yybm[0 + yych] & 64) { - goto yy1087; + if (yybm[0 + yych] & 128) { + goto yy865; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1084; + goto yy859; if (yych <= '\n') - goto yy1089; - goto yy1084; + goto yy867; + goto yy859; } else { if (yych <= '\r') - goto yy1089; - if (yych == '~') - goto yy1085; - goto yy1084; - } - yy1087: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy1087; - } - if (yych <= 0x08) - goto yy1084; - if (yych <= '\n') - goto yy1089; - if (yych != '\r') - goto yy1084; - yy1089: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy1091: - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy1092; + goto yy867; + if (yych == '`') + goto yy861; + goto yy859; } - goto yy1084; - yy1092: + yy863: ++p; yych = *p; marker = p; - if (yybm[0 + yych] & 128) { - goto yy1092; + if (yybm[0 + yych] & 64) { + goto yy863; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1084; + goto yy859; if (yych <= '\t') - goto yy1094; + goto yy869; if (yych <= '\n') - goto yy1096; - goto yy1084; + goto yy871; + goto yy859; } else { if (yych <= '\r') - goto yy1096; - if (yych != ' ') - goto yy1084; + goto yy871; + if (yych == ' ') + goto yy869; + goto yy859; + } + yy865: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy865; } - yy1094: + if (yych <= 0x08) + goto yy859; + if (yych <= '\n') + goto yy867; + if (yych != '\r') + goto yy859; + yy867: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy869: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1084; + goto yy859; if (yych <= '\t') - goto yy1094; + goto yy869; if (yych >= '\v') - goto yy1084; + goto yy859; } else { if (yych <= '\r') - goto yy1096; + goto yy871; if (yych == ' ') - goto yy1094; - goto yy1084; + goto yy869; + goto yy859; } - yy1096: + yy871: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -16528,919 +12308,947 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '&') - goto yy1102; + goto yy877; ++p; - yy1101 : { return 0; } - yy1102: + yy876 : { return 0; } + yy877: yych = *(marker = ++p); if (yych <= '@') { if (yych != '#') - goto yy1101; + goto yy876; } else { if (yych <= 'Z') - goto yy1105; + goto yy880; if (yych <= '`') - goto yy1101; + goto yy876; if (yych <= 'z') - goto yy1105; - goto yy1101; + goto yy880; + goto yy876; } yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1140; + goto yy881; } else { if (yych <= 'X') - goto yy1139; + goto yy882; if (yych == 'x') - goto yy1139; + goto yy882; } - yy1104: + yy879: p = marker; - goto yy1101; - yy1105: + goto yy876; + yy880: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1104; - if (yych >= ':') - goto yy1104; + goto yy879; + if (yych <= '9') + goto yy883; + goto yy879; } else { if (yych <= 'Z') - goto yy1106; + goto yy883; if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy883; + goto yy879; + } + yy881: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy884; + if (yych == ';') + goto yy885; + goto yy879; + yy882: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy887; + goto yy879; + } else { + if (yych <= 'F') + goto yy887; + if (yych <= '`') + goto yy879; + if (yych <= 'f') + goto yy887; + goto yy879; } - yy1106: + yy883: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1109; + goto yy888; if (yych <= ':') - goto yy1104; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; - goto yy1109; + goto yy879; + goto yy888; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych <= 'z') - goto yy1109; - goto yy1104; + goto yy888; + goto yy879; } } - yy1107: + yy884: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy889; + if (yych != ';') + goto yy879; + yy885: ++p; { return (bufsize_t)(p - start); } - yy1109: + yy887: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1110; + goto yy890; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy890; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy890; + goto yy879; } } - yy1110: + yy888: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1111; + goto yy891; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy891; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy891; + goto yy879; } } - yy1111: + yy889: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy892; + if (yych == ';') + goto yy885; + goto yy879; + yy890: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1112; + goto yy893; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy893; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy893; + goto yy879; } } - yy1112: + yy891: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1113; + goto yy894; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy894; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy894; + goto yy879; } } - yy1113: + yy892: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy895; + if (yych == ';') + goto yy885; + goto yy879; + yy893: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1114; + goto yy896; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy896; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy896; + goto yy879; } } - yy1114: + yy894: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1115; + goto yy897; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy897; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy897; + goto yy879; } } - yy1115: + yy895: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy898; + if (yych == ';') + goto yy885; + goto yy879; + yy896: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1116; + goto yy899; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy899; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy899; + goto yy879; } } - yy1116: + yy897: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1117; + goto yy900; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy900; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy900; + goto yy879; } } - yy1117: + yy898: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy901; + if (yych == ';') + goto yy885; + goto yy879; + yy899: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1118; + goto yy902; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy902; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy902; + goto yy879; } } - yy1118: + yy900: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1119; + goto yy903; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy903; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy903; + goto yy879; } } - yy1119: + yy901: + yych = *++p; + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy904; + if (yych == ';') + goto yy885; + goto yy879; + yy902: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1120; + goto yy905; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy905; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy905; + goto yy879; } } - yy1120: + yy903: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1121; + goto yy906; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy906; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy906; + goto yy879; } } - yy1121: + yy904: + yych = *++p; + if (yych == ';') + goto yy885; + goto yy879; + yy905: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1122; + goto yy904; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'Z') { + if (yych <= 'F') { if (yych <= '@') - goto yy1104; + goto yy879; + goto yy904; } else { if (yych <= '`') - goto yy1104; - if (yych >= '{') - goto yy1104; + goto yy879; + if (yych <= 'f') + goto yy904; + goto yy879; } } - yy1122: + yy906: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1123; + goto yy907; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1123: + yy907: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1124; + goto yy908; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1124: + yy908: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1125; + goto yy909; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1125: + yy909: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1126; + goto yy910; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1126: + yy910: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1127; + goto yy911; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1127: + yy911: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1128; + goto yy912; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1128: + yy912: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1129; + goto yy913; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1129: + yy913: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1130; + goto yy914; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1130: + yy914: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1131; + goto yy915; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1131: + yy915: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1132; + goto yy916; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1132: + yy916: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1133; + goto yy917; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1133: + yy917: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1134; + goto yy918; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1134: + yy918: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1135; + goto yy919; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1135: + yy919: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1136; + goto yy920; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1136: + yy920: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1137; + goto yy921; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1137: + yy921: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1138; + goto yy922; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; + goto yy879; if (yych >= '{') - goto yy1104; + goto yy879; } } - yy1138: - yych = *++p; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1139: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1147; - goto yy1104; - } else { - if (yych <= 'F') - goto yy1147; - if (yych <= '`') - goto yy1104; - if (yych <= 'f') - goto yy1147; - goto yy1104; - } - yy1140: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1141; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1141: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1142; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1142: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1143; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1143: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1144; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1144: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1145; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1145: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1146; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1146: - yych = *++p; - if (yych <= '/') - goto yy1104; - if (yych <= '9') - goto yy1138; - if (yych == ';') - goto yy1107; - goto yy1104; - yy1147: + yy922: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1148; + goto yy923; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy879; + if (yych >= '{') + goto yy879; } } - yy1148: + yy923: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1149; + goto yy924; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy879; + if (yych >= '{') + goto yy879; } } - yy1149: + yy924: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1150; + goto yy925; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy879; + if (yych >= '{') + goto yy879; } } - yy1150: + yy925: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1151; + goto yy926; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy879; + if (yych >= '{') + goto yy879; } } - yy1151: + yy926: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1152; + goto yy927; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy879; + if (yych >= '{') + goto yy879; } } - yy1152: + yy927: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1153; + goto yy928; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; + goto yy879; } else { if (yych <= '`') - goto yy1104; - if (yych >= 'g') - goto yy1104; + goto yy879; + if (yych >= '{') + goto yy879; } } - yy1153: + yy928: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1104; + goto yy879; if (yych <= '9') - goto yy1138; + goto yy904; if (yych <= ':') - goto yy1104; - goto yy1107; + goto yy879; + goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy1104; - goto yy1138; + goto yy879; + goto yy904; } else { if (yych <= '`') - goto yy1104; - if (yych <= 'f') - goto yy1138; - goto yy1104; + goto yy879; + if (yych <= 'z') + goto yy904; + goto yy879; } } } @@ -17459,335 +13267,304 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'V') { if (yych <= 'F') { if (yych == 'D') - goto yy1158; + goto yy933; if (yych >= 'F') - goto yy1159; + goto yy934; } else { if (yych == 'J') - goto yy1160; + goto yy935; if (yych >= 'V') - goto yy1161; + goto yy936; } } else { if (yych <= 'f') { if (yych == 'd') - goto yy1158; + goto yy933; if (yych >= 'f') - goto yy1159; + goto yy934; } else { if (yych <= 'j') { if (yych >= 'j') - goto yy1160; + goto yy935; } else { if (yych == 'v') - goto yy1161; + goto yy936; } } } ++p; - yy1157 : { return 0; } - yy1158: + yy932 : { return 0; } + yy933: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1184; + goto yy937; if (yych == 'a') - goto yy1184; - goto yy1157; - yy1159: + goto yy937; + goto yy932; + yy934: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy1181; + goto yy939; if (yych == 'i') - goto yy1181; - goto yy1157; - yy1160: + goto yy939; + goto yy932; + yy935: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1172; + goto yy940; if (yych == 'a') - goto yy1172; - goto yy1157; - yy1161: + goto yy940; + goto yy932; + yy936: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1162; - if (yych != 'b') - goto yy1157; - yy1162: + goto yy941; + if (yych == 'b') + goto yy941; + goto yy932; + yy937: yych = *++p; - if (yych == 'S') - goto yy1164; - if (yych == 's') - goto yy1164; - yy1163: + if (yych == 'T') + goto yy942; + if (yych == 't') + goto yy942; + yy938: p = marker; if (yyaccept == 0) { - goto yy1157; + goto yy932; } else { - goto yy1171; + goto yy950; } - yy1164: - yych = *++p; - if (yych == 'C') - goto yy1165; - if (yych != 'c') - goto yy1163; - yy1165: - yych = *++p; - if (yych == 'R') - goto yy1166; - if (yych != 'r') - goto yy1163; - yy1166: - yych = *++p; - if (yych == 'I') - goto yy1167; - if (yych != 'i') - goto yy1163; - yy1167: - yych = *++p; - if (yych == 'P') - goto yy1168; - if (yych != 'p') - goto yy1163; - yy1168: - yych = *++p; - if (yych == 'T') - goto yy1169; - if (yych != 't') - goto yy1163; - yy1169: + yy939: yych = *++p; - if (yych != ':') - goto yy1163; - yy1170: - ++p; - yy1171 : { return (bufsize_t)(p - start); } - yy1172: + if (yych == 'L') + goto yy943; + if (yych == 'l') + goto yy943; + goto yy938; + yy940: yych = *++p; if (yych == 'V') - goto yy1173; - if (yych != 'v') - goto yy1163; - yy1173: - yych = *++p; - if (yych == 'A') - goto yy1174; - if (yych != 'a') - goto yy1163; - yy1174: + goto yy944; + if (yych == 'v') + goto yy944; + goto yy938; + yy941: yych = *++p; if (yych == 'S') - goto yy1175; - if (yych != 's') - goto yy1163; - yy1175: - yych = *++p; - if (yych == 'C') - goto yy1176; - if (yych != 'c') - goto yy1163; - yy1176: + goto yy945; + if (yych == 's') + goto yy945; + goto yy938; + yy942: yych = *++p; - if (yych == 'R') - goto yy1177; - if (yych != 'r') - goto yy1163; - yy1177: + if (yych == 'A') + goto yy946; + if (yych == 'a') + goto yy946; + goto yy938; + yy943: yych = *++p; - if (yych == 'I') - goto yy1178; - if (yych != 'i') - goto yy1163; - yy1178: + if (yych == 'E') + goto yy947; + if (yych == 'e') + goto yy947; + goto yy938; + yy944: yych = *++p; - if (yych == 'P') - goto yy1179; - if (yych != 'p') - goto yy1163; - yy1179: + if (yych == 'A') + goto yy941; + if (yych == 'a') + goto yy941; + goto yy938; + yy945: yych = *++p; - if (yych == 'T') - goto yy1180; - if (yych != 't') - goto yy1163; - yy1180: + if (yych == 'C') + goto yy948; + if (yych == 'c') + goto yy948; + goto yy938; + yy946: yych = *++p; if (yych == ':') - goto yy1170; - goto yy1163; - yy1181: - yych = *++p; - if (yych == 'L') - goto yy1182; - if (yych != 'l') - goto yy1163; - yy1182: - yych = *++p; - if (yych == 'E') - goto yy1183; - if (yych != 'e') - goto yy1163; - yy1183: + goto yy949; + goto yy938; + yy947: yych = *++p; if (yych == ':') - goto yy1170; - goto yy1163; - yy1184: - yych = *++p; - if (yych == 'T') - goto yy1185; - if (yych != 't') - goto yy1163; - yy1185: - yych = *++p; - if (yych == 'A') - goto yy1186; - if (yych != 'a') - goto yy1163; - yy1186: + goto yy951; + goto yy938; + yy948: yych = *++p; - if (yych != ':') - goto yy1163; + if (yych == 'R') + goto yy952; + if (yych == 'r') + goto yy952; + goto yy938; + yy949: yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1188; - if (yych != 'i') - goto yy1171; - yy1188: + goto yy953; + if (yych == 'i') + goto yy953; + yy950 : { return (bufsize_t)(p - start); } + yy951: + yych = *++p; + goto yy950; + yy952: + yych = *++p; + if (yych == 'I') + goto yy954; + if (yych == 'i') + goto yy954; + goto yy938; + yy953: yych = *++p; if (yych == 'M') - goto yy1189; - if (yych != 'm') - goto yy1163; - yy1189: + goto yy955; + if (yych == 'm') + goto yy955; + goto yy938; + yy954: + yych = *++p; + if (yych == 'P') + goto yy956; + if (yych == 'p') + goto yy956; + goto yy938; + yy955: yych = *++p; if (yych == 'A') - goto yy1190; - if (yych != 'a') - goto yy1163; - yy1190: + goto yy957; + if (yych == 'a') + goto yy957; + goto yy938; + yy956: + yych = *++p; + if (yych == 'T') + goto yy947; + if (yych == 't') + goto yy947; + goto yy938; + yy957: yych = *++p; if (yych == 'G') - goto yy1191; + goto yy958; if (yych != 'g') - goto yy1163; - yy1191: + goto yy938; + yy958: yych = *++p; if (yych == 'E') - goto yy1192; + goto yy959; if (yych != 'e') - goto yy1163; - yy1192: + goto yy938; + yy959: yych = *++p; if (yych != '/') - goto yy1163; + goto yy938; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1195; + goto yy961; if (yych <= 'I') - goto yy1163; - goto yy1196; + goto yy938; + goto yy962; } else { if (yych == 'P') - goto yy1194; + goto yy963; if (yych <= 'V') - goto yy1163; - goto yy1197; + goto yy938; + goto yy964; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1195; + goto yy961; if (yych <= 'i') - goto yy1163; - goto yy1196; + goto yy938; + goto yy962; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1163; + goto yy938; + goto yy963; } else { if (yych == 'w') - goto yy1197; - goto yy1163; + goto yy964; + goto yy938; } } } - yy1194: - yych = *++p; - if (yych == 'N') - goto yy1205; - if (yych == 'n') - goto yy1205; - goto yy1163; - yy1195: + yy961: yych = *++p; if (yych == 'I') - goto yy1204; + goto yy965; if (yych == 'i') - goto yy1204; - goto yy1163; - yy1196: + goto yy965; + goto yy938; + yy962: yych = *++p; if (yych == 'P') - goto yy1202; + goto yy966; if (yych == 'p') - goto yy1202; - goto yy1163; - yy1197: + goto yy966; + goto yy938; + yy963: yych = *++p; - if (yych == 'E') - goto yy1198; - if (yych != 'e') - goto yy1163; - yy1198: + if (yych == 'N') + goto yy967; + if (yych == 'n') + goto yy967; + goto yy938; + yy964: yych = *++p; - if (yych == 'B') - goto yy1199; - if (yych != 'b') - goto yy1163; - yy1199: + if (yych == 'E') + goto yy968; + if (yych == 'e') + goto yy968; + goto yy938; + yy965: yych = *++p; - if (yych == 'P') - goto yy1200; - if (yych != 'p') - goto yy1163; - yy1200: - ++p; - { return 0; } - yy1202: + if (yych == 'F') + goto yy969; + if (yych == 'f') + goto yy969; + goto yy938; + yy966: yych = *++p; if (yych == 'E') - goto yy1203; + goto yy967; if (yych != 'e') - goto yy1163; - yy1203: + goto yy938; + yy967: yych = *++p; if (yych == 'G') - goto yy1200; + goto yy969; if (yych == 'g') - goto yy1200; - goto yy1163; - yy1204: + goto yy969; + goto yy938; + yy968: yych = *++p; - if (yych == 'F') - goto yy1200; - if (yych == 'f') - goto yy1200; - goto yy1163; - yy1205: + if (yych == 'B') + goto yy971; + if (yych == 'b') + goto yy971; + goto yy938; + yy969: ++p; - if ((yych = *p) == 'G') - goto yy1200; - if (yych == 'g') - goto yy1200; - goto yy1163; + { return 0; } + yy971: + ++p; + if ((yych = *p) == 'P') + goto yy969; + if (yych == 'p') + goto yy969; + goto yy938; } } diff --git a/src/scanners.re b/src/scanners.re index b20a9543c6..c3c68217cc 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -41,7 +41,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; - unquotedvalue = [^"'=<>`\x00]+; + unquotedvalue = [^ \t\r\n\v\f"'=<>`\x00]+; singlequotedvalue = ['][^'\x00]*[']; doublequotedvalue = ["][^"\x00]*["]; -- cgit 0.0.5-2-1-g0f52 From 9d1033cdcb6fa266b3a7b2fb0bff02ac6fb6e8be Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Mar 2018 15:51:40 -0700 Subject: Adjust max length of decimal/numeric entities. See commonmark/CommonMark#487. --- src/scanners.c | 437 ++++++++++++++++++++++++-------------------------------- src/scanners.re | 2 +- 2 files changed, 191 insertions(+), 248 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index fd855a593d..aad651d092 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -12643,7 +12643,7 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= '/') goto yy879; if (yych <= '9') - goto yy902; + goto yy901; if (yych <= ':') goto yy879; goto yy885; @@ -12651,12 +12651,12 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 'F') { if (yych <= '@') goto yy879; - goto yy902; + goto yy901; } else { if (yych <= '`') goto yy879; if (yych <= 'f') - goto yy902; + goto yy901; goto yy879; } } @@ -12666,7 +12666,7 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= '/') goto yy879; if (yych <= '9') - goto yy903; + goto yy902; if (yych <= ':') goto yy879; goto yy885; @@ -12674,21 +12674,17 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 'Z') { if (yych <= '@') goto yy879; - goto yy903; + goto yy902; } else { if (yych <= '`') goto yy879; if (yych <= 'z') - goto yy903; + goto yy902; goto yy879; } } yy901: yych = *++p; - if (yych <= '/') - goto yy879; - if (yych <= '9') - goto yy904; if (yych == ';') goto yy885; goto yy879; @@ -12698,21 +12694,19 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= '/') goto yy879; if (yych <= '9') - goto yy905; + goto yy903; if (yych <= ':') goto yy879; goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') goto yy879; - goto yy905; } else { if (yych <= '`') goto yy879; - if (yych <= 'f') - goto yy905; - goto yy879; + if (yych >= '{') + goto yy879; } } yy903: @@ -12721,7 +12715,7 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= '/') goto yy879; if (yych <= '9') - goto yy906; + goto yy904; if (yych <= ':') goto yy879; goto yy885; @@ -12729,41 +12723,53 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 'Z') { if (yych <= '@') goto yy879; - goto yy906; } else { if (yych <= '`') goto yy879; - if (yych <= 'z') - goto yy906; - goto yy879; + if (yych >= '{') + goto yy879; } } yy904: yych = *++p; - if (yych == ';') + if (yych <= ';') { + if (yych <= '/') + goto yy879; + if (yych <= '9') + goto yy905; + if (yych <= ':') + goto yy879; goto yy885; - goto yy879; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy879; + } else { + if (yych <= '`') + goto yy879; + if (yych >= '{') + goto yy879; + } + } yy905: yych = *++p; if (yych <= ';') { if (yych <= '/') goto yy879; if (yych <= '9') - goto yy904; + goto yy906; if (yych <= ':') goto yy879; goto yy885; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') goto yy879; - goto yy904; } else { if (yych <= '`') goto yy879; - if (yych <= 'f') - goto yy904; - goto yy879; + if (yych >= '{') + goto yy879; } } yy906: @@ -13166,75 +13172,12 @@ bufsize_t _scan_entity(const unsigned char *p) { } } yy925: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy879; - if (yych <= '9') - goto yy926; - if (yych <= ':') - goto yy879; - goto yy885; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy879; - } else { - if (yych <= '`') - goto yy879; - if (yych >= '{') - goto yy879; - } - } - yy926: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy879; - if (yych <= '9') - goto yy927; - if (yych <= ':') - goto yy879; - goto yy885; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy879; - } else { - if (yych <= '`') - goto yy879; - if (yych >= '{') - goto yy879; - } - } - yy927: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy879; - if (yych <= '9') - goto yy928; - if (yych <= ':') - goto yy879; - goto yy885; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy879; - } else { - if (yych <= '`') - goto yy879; - if (yych >= '{') - goto yy879; - } - } - yy928: ++p; if ((yych = *p) <= ';') { if (yych <= '/') goto yy879; if (yych <= '9') - goto yy904; + goto yy901; if (yych <= ':') goto yy879; goto yy885; @@ -13242,12 +13185,12 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 'Z') { if (yych <= '@') goto yy879; - goto yy904; + goto yy901; } else { if (yych <= '`') goto yy879; if (yych <= 'z') - goto yy904; + goto yy901; goto yy879; } } @@ -13267,304 +13210,304 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'V') { if (yych <= 'F') { if (yych == 'D') - goto yy933; + goto yy930; if (yych >= 'F') - goto yy934; + goto yy931; } else { if (yych == 'J') - goto yy935; + goto yy932; if (yych >= 'V') - goto yy936; + goto yy933; } } else { if (yych <= 'f') { if (yych == 'd') - goto yy933; + goto yy930; if (yych >= 'f') - goto yy934; + goto yy931; } else { if (yych <= 'j') { if (yych >= 'j') - goto yy935; + goto yy932; } else { if (yych == 'v') - goto yy936; + goto yy933; } } } ++p; - yy932 : { return 0; } - yy933: + yy929 : { return 0; } + yy930: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy937; + goto yy934; if (yych == 'a') - goto yy937; - goto yy932; - yy934: + goto yy934; + goto yy929; + yy931: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy939; + goto yy936; if (yych == 'i') - goto yy939; - goto yy932; - yy935: + goto yy936; + goto yy929; + yy932: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy940; + goto yy937; if (yych == 'a') - goto yy940; - goto yy932; - yy936: + goto yy937; + goto yy929; + yy933: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy941; + goto yy938; if (yych == 'b') - goto yy941; - goto yy932; - yy937: + goto yy938; + goto yy929; + yy934: yych = *++p; if (yych == 'T') - goto yy942; + goto yy939; if (yych == 't') - goto yy942; - yy938: + goto yy939; + yy935: p = marker; if (yyaccept == 0) { - goto yy932; + goto yy929; } else { - goto yy950; + goto yy947; } - yy939: + yy936: yych = *++p; if (yych == 'L') - goto yy943; + goto yy940; if (yych == 'l') - goto yy943; - goto yy938; - yy940: + goto yy940; + goto yy935; + yy937: yych = *++p; if (yych == 'V') - goto yy944; + goto yy941; if (yych == 'v') - goto yy944; - goto yy938; - yy941: + goto yy941; + goto yy935; + yy938: yych = *++p; if (yych == 'S') - goto yy945; + goto yy942; if (yych == 's') - goto yy945; - goto yy938; - yy942: + goto yy942; + goto yy935; + yy939: yych = *++p; if (yych == 'A') - goto yy946; + goto yy943; if (yych == 'a') - goto yy946; - goto yy938; - yy943: + goto yy943; + goto yy935; + yy940: yych = *++p; if (yych == 'E') - goto yy947; + goto yy944; if (yych == 'e') - goto yy947; - goto yy938; - yy944: + goto yy944; + goto yy935; + yy941: yych = *++p; if (yych == 'A') - goto yy941; + goto yy938; if (yych == 'a') - goto yy941; - goto yy938; - yy945: + goto yy938; + goto yy935; + yy942: yych = *++p; if (yych == 'C') - goto yy948; + goto yy945; if (yych == 'c') - goto yy948; - goto yy938; - yy946: + goto yy945; + goto yy935; + yy943: yych = *++p; if (yych == ':') - goto yy949; - goto yy938; - yy947: + goto yy946; + goto yy935; + yy944: yych = *++p; if (yych == ':') - goto yy951; - goto yy938; - yy948: + goto yy948; + goto yy935; + yy945: yych = *++p; if (yych == 'R') - goto yy952; + goto yy949; if (yych == 'r') - goto yy952; - goto yy938; - yy949: + goto yy949; + goto yy935; + yy946: yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy953; + goto yy950; if (yych == 'i') - goto yy953; - yy950 : { return (bufsize_t)(p - start); } - yy951: + goto yy950; + yy947 : { return (bufsize_t)(p - start); } + yy948: yych = *++p; - goto yy950; - yy952: + goto yy947; + yy949: yych = *++p; if (yych == 'I') - goto yy954; + goto yy951; if (yych == 'i') - goto yy954; - goto yy938; - yy953: + goto yy951; + goto yy935; + yy950: yych = *++p; if (yych == 'M') - goto yy955; + goto yy952; if (yych == 'm') - goto yy955; - goto yy938; - yy954: + goto yy952; + goto yy935; + yy951: yych = *++p; if (yych == 'P') - goto yy956; + goto yy953; if (yych == 'p') - goto yy956; - goto yy938; - yy955: + goto yy953; + goto yy935; + yy952: yych = *++p; if (yych == 'A') - goto yy957; + goto yy954; if (yych == 'a') - goto yy957; - goto yy938; - yy956: + goto yy954; + goto yy935; + yy953: yych = *++p; if (yych == 'T') - goto yy947; + goto yy944; if (yych == 't') - goto yy947; - goto yy938; - yy957: + goto yy944; + goto yy935; + yy954: yych = *++p; if (yych == 'G') - goto yy958; + goto yy955; if (yych != 'g') - goto yy938; - yy958: + goto yy935; + yy955: yych = *++p; if (yych == 'E') - goto yy959; + goto yy956; if (yych != 'e') - goto yy938; - yy959: + goto yy935; + yy956: yych = *++p; if (yych != '/') - goto yy938; + goto yy935; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy961; + goto yy958; if (yych <= 'I') - goto yy938; - goto yy962; + goto yy935; + goto yy959; } else { if (yych == 'P') - goto yy963; + goto yy960; if (yych <= 'V') - goto yy938; - goto yy964; + goto yy935; + goto yy961; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy961; + goto yy958; if (yych <= 'i') - goto yy938; - goto yy962; + goto yy935; + goto yy959; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy938; - goto yy963; + goto yy935; + goto yy960; } else { if (yych == 'w') - goto yy964; - goto yy938; + goto yy961; + goto yy935; } } } - yy961: + yy958: yych = *++p; if (yych == 'I') - goto yy965; + goto yy962; if (yych == 'i') - goto yy965; - goto yy938; - yy962: + goto yy962; + goto yy935; + yy959: yych = *++p; if (yych == 'P') - goto yy966; + goto yy963; if (yych == 'p') - goto yy966; - goto yy938; - yy963: + goto yy963; + goto yy935; + yy960: yych = *++p; if (yych == 'N') - goto yy967; + goto yy964; if (yych == 'n') - goto yy967; - goto yy938; - yy964: + goto yy964; + goto yy935; + yy961: yych = *++p; if (yych == 'E') - goto yy968; + goto yy965; if (yych == 'e') - goto yy968; - goto yy938; - yy965: + goto yy965; + goto yy935; + yy962: yych = *++p; if (yych == 'F') - goto yy969; + goto yy966; if (yych == 'f') - goto yy969; - goto yy938; - yy966: + goto yy966; + goto yy935; + yy963: yych = *++p; if (yych == 'E') - goto yy967; + goto yy964; if (yych != 'e') - goto yy938; - yy967: + goto yy935; + yy964: yych = *++p; if (yych == 'G') - goto yy969; + goto yy966; if (yych == 'g') - goto yy969; - goto yy938; - yy968: + goto yy966; + goto yy935; + yy965: yych = *++p; if (yych == 'B') - goto yy971; + goto yy968; if (yych == 'b') - goto yy971; - goto yy938; - yy969: + goto yy968; + goto yy935; + yy966: ++p; { return 0; } - yy971: + yy968: ++p; if ((yych = *p) == 'P') - goto yy969; + goto yy966; if (yych == 'p') - goto yy969; - goto yy938; + goto yy966; + goto yy935; } } diff --git a/src/scanners.re b/src/scanners.re index c3c68217cc..89e300786f 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -299,7 +299,7 @@ bufsize_t _scan_entity(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [&] ([#] ([Xx][A-Fa-f0-9]{1,8}|[0-9]{1,8}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;] + [&] ([#] ([Xx][A-Fa-f0-9]{1,6}|[0-9]{1,7}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;] { return (bufsize_t)(p - start); } * { return 0; } */ -- cgit 0.0.5-2-1-g0f52 From 8ea2cbda0799fd4e06d1946038252dfd06d0bb6f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Mar 2018 17:17:01 -0700 Subject: Update spec. --- test/spec.txt | 52 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 5e782f35b3..dc2f5d53a0 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2612,7 +2612,8 @@ bar However, a following blank line is needed, except at the end of -a document, and except for blocks of types 1--5, above: +a document, and except for blocks of types 1--5, [above][HTML +block]: ```````````````````````````````` example
                            @@ -2758,8 +2759,8 @@ an indented code block: Fortunately, blank lines are usually not necessary and can be deleted. The exception is inside `
                            ` tags, but as described
                            -above, raw HTML blocks starting with `
                            ` *can* contain blank
                            -lines.
                            +[above][HTML blocks], raw HTML blocks starting with `
                            `
                            +*can* contain blank lines.
                             
                             ## Link reference definitions
                             
                            @@ -2811,7 +2812,7 @@ them.
                             
                             ```````````````````````````````` example
                             [Foo bar]:
                            -
                            +
                             'title'
                             
                             [Foo bar]
                            @@ -4458,9 +4459,10 @@ continued here.

                            6. **That's all.** Nothing that is not counted as a list item by rules #1--5 counts as a [list item](#list-items). -The rules for sublists follow from the general rules above. A sublist -must be indented the same number of spaces a paragraph would need to be -in order to be included in the list item. +The rules for sublists follow from the general rules +[above][List items]. A sublist must be indented the same number +of spaces a paragraph would need to be in order to be included +in the list item. So, in this case we need two spaces indent: @@ -5587,22 +5589,22 @@ references and their corresponding code points. [Decimal numeric character references](@) -consist of `&#` + a string of 1--8 arabic digits + `;`. A +consist of `&#` + a string of 1--7 arabic digits + `;`. A numeric character reference is parsed as the corresponding Unicode character. Invalid Unicode code points will be replaced by the REPLACEMENT CHARACTER (`U+FFFD`). For security reasons, the code point `U+0000` will also be replaced by `U+FFFD`. ```````````````````````````````` example -# Ӓ Ϡ � � +# Ӓ Ϡ � . -

                            # Ӓ Ϡ � �

                            +

                            # Ӓ Ϡ �

                            ```````````````````````````````` [Hexadecimal numeric character references](@) consist of `&#` + -either `X` or `x` + a string of 1-8 hexadecimal digits + `;`. +either `X` or `x` + a string of 1-6 hexadecimal digits + `;`. They too are parsed as the corresponding Unicode character (this time specified with a hexadecimal numeral instead of decimal). @@ -5617,9 +5619,13 @@ Here are some nonentities: ```````````````````````````````` example   &x; &#; &#x; +� +&#abcdef0; &ThisIsNotDefined; &hi?; .

                            &nbsp &x; &#; &#x; +&#987654321; +&#abcdef0; &ThisIsNotDefined; &hi?;

                            ```````````````````````````````` @@ -6675,6 +6681,17 @@ cannot form emphasis if the sum of the lengths of the delimiter runs containing the opening and closing delimiters is a multiple of 3. + +For the same reason, we don't get two consecutive +emphasis sections in this example: + +```````````````````````````````` example +*foo**bar* +. +

                            foo**bar

                            +```````````````````````````````` + + The same condition ensures that the following cases are all strong emphasis nested inside emphasis, even when the interior spaces are @@ -7237,7 +7254,7 @@ following rules apply: A [link destination](@) consists of either - a sequence of zero or more characters between an opening `<` and a - closing `>` that contains no spaces, line breaks, or unescaped + closing `>` that contains no line breaks or unescaped `<` or `>` characters, or - a nonempty sequence of characters that does not include @@ -7308,9 +7325,8 @@ Both the title and the destination may be omitted:

                            link

                            ```````````````````````````````` - -The destination cannot contain spaces or line breaks, -even if enclosed in pointy brackets: +The destination can only contain spaces if it is +enclosed in pointy brackets: ```````````````````````````````` example [link](/my uri) @@ -7318,13 +7334,14 @@ even if enclosed in pointy brackets:

                            [link](/my uri)

                            ```````````````````````````````` - ```````````````````````````````` example [link](
                            ) . -

                            [link](</my uri>)

                            +

                            link

                            ```````````````````````````````` +The destination cannot contain line breaks, +even if enclosed in pointy brackets: ```````````````````````````````` example [link](foo @@ -7334,7 +7351,6 @@ bar) bar)

                            ```````````````````````````````` - ```````````````````````````````` example [link]() -- cgit 0.0.5-2-1-g0f52 From 55d7b8808a7bba08345bcc94b7a462176c182fc9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 25 Mar 2018 17:19:35 -0700 Subject: Allow spaces in link destination delimited with pointy brackets. To conform to recent spec change. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index d0ab2537a5..8bb82f160d 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -933,7 +933,7 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, break; } else if (input->data[i] == '\\') i += 2; - else if (cmark_isspace(input->data[i]) || input->data[i] == '<') + else if (input->data[i] == '\n' || input->data[i] == '<') return manual_scan_link_url_2(input, offset, output); else ++i; -- cgit 0.0.5-2-1-g0f52 From d51bb0e45be412f1f36b010f7458d2c392e28f2b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 14 Apr 2018 21:39:53 -0700 Subject: Optimize S_find_first_nonspace. We were needlessly redoing things we'd already done. Now we skip the work if the first nonspace is greater than the current offset. This fixes pathological slowdown with deeply nested lists (#255). For N = 3000, the time goes from over 17s to about 0.7s. Thanks to @mity for diagnosing the problem. --- src/blocks.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 3e32535100..bdd819e585 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -615,22 +615,24 @@ static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { char c; int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - parser->first_nonspace = parser->offset; - parser->first_nonspace_column = parser->column; - while ((c = peek_at(input, parser->first_nonspace))) { - if (c == ' ') { - parser->first_nonspace += 1; - parser->first_nonspace_column += 1; - chars_to_tab = chars_to_tab - 1; - if (chars_to_tab == 0) { + if (parser->first_nonspace <= parser->offset) { + parser->first_nonspace = parser->offset; + parser->first_nonspace_column = parser->column; + while ((c = peek_at(input, parser->first_nonspace))) { + if (c == ' ') { + parser->first_nonspace += 1; + parser->first_nonspace_column += 1; + chars_to_tab = chars_to_tab - 1; + if (chars_to_tab == 0) { + chars_to_tab = TAB_STOP; + } + } else if (c == '\t') { + parser->first_nonspace += 1; + parser->first_nonspace_column += chars_to_tab; chars_to_tab = TAB_STOP; + } else { + break; } - } else if (c == '\t') { - parser->first_nonspace += 1; - parser->first_nonspace_column += chars_to_tab; - chars_to_tab = TAB_STOP; - } else { - break; } } @@ -1160,6 +1162,9 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->offset = 0; parser->column = 0; + parser->first_nonspace = 0; + parser->first_nonspace_column = 0; + parser->indent = 0; parser->blank = false; parser->partially_consumed_tab = false; -- cgit 0.0.5-2-1-g0f52 From 02c7e76675c96135a87d264b68347a0479a1047d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Apr 2018 08:47:06 -0700 Subject: pathological_tests.py: added test for deeply nested lists. --- test/pathological_tests.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 613f2e57f4..de7d3b7af5 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -57,6 +57,9 @@ pathological = { "nested block quotes": ((("> " * 50000) + "a"), re.compile("(
                            \n){50000}")), + "deeply nested lists": + ("".join(map(lambda x: (" " * x + "* a\n"), range(0,1000))), + re.compile("
                              \n(
                            • a\n
                                \n){999}
                              • a
                              • \n
                              \n(
                            • \n
                            \n){999}")), "U+0000 in input": ("abc\u0000de\u0000", re.compile("abc\ufffd?de\ufffd?")), -- cgit 0.0.5-2-1-g0f52 From 9f8ef820301951f36301c1a40d036cafeaa78619 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 15 Apr 2018 08:47:25 -0700 Subject: pathological_tests.py: make tests run faster. - commented out the (already ignored) "many references" test, which times out - reduced the iterations for a couple other tests --- test/pathological_tests.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index de7d3b7af5..031acbd10b 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -64,17 +64,17 @@ pathological = { ("abc\u0000de\u0000", re.compile("abc\ufffd?de\ufffd?")), "backticks": - ("".join(map(lambda x: ("e" + "`" * x), range(1,10000))), + ("".join(map(lambda x: ("e" + "`" * x), range(1,5000))), re.compile("^

                            [e`]*

                            \n$")), "unclosed links A": - ("[a]( Date: Mon, 11 Jun 2018 11:10:13 -0700 Subject: Removed meta from list of block tags. Added regression test. See commonmark/CommonMark#527. --- src/scanners.c | 6129 ++++++++++++++++++++++++--------------------------- src/scanners.re | 2 +- test/regression.txt | 14 + 3 files changed, 2918 insertions(+), 3227 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index aad651d092..9661902d14 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 */ +/* Generated by re2c 1.0.2 */ #include #include "chunk.h" #include "scanners.h" @@ -738,8 +738,8 @@ bufsize_t _scan_scheme(const unsigned char *p) { goto yy6; } } - ++p; - if ((yych = *p) == ':') + yych = *++p; + if (yych == ':') goto yy8; goto yy6; } @@ -864,8 +864,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } } yy47: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 128) { goto yy47; } @@ -929,56 +928,49 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { ++p; { return (bufsize_t)(p - start); } yy52: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy45; if (yych <= 0xBF) goto yy47; goto yy45; yy53: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy45; if (yych <= 0xBF) goto yy52; goto yy45; yy54: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy45; if (yych <= 0xBF) goto yy52; goto yy45; yy55: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy45; if (yych <= 0x9F) goto yy52; goto yy45; yy56: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy45; if (yych <= 0xBF) goto yy54; goto yy45; yy57: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy45; if (yych <= 0xBF) goto yy54; goto yy45; yy58: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy45; if (yych <= 0x8F) @@ -1579,8 +1571,8 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { goto yy45; } } - ++p; - if ((yych = *p) == ':') + yych = *++p; + if (yych == ':') goto yy47; goto yy45; } @@ -1682,8 +1674,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy92: - ++p; - yych = *p; + yych = *++p; yy93: if (yybm[0 + yych] & 128) { goto yy92; @@ -1696,8 +1687,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { p = marker; goto yy90; yy95: - ++p; - yych = *p; + yych = *++p; if (yych <= '@') { if (yych <= '/') goto yy94; @@ -1712,8 +1702,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy94; } yy96: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1742,8 +1731,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy94; } } - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy101; @@ -1764,8 +1752,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy98: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1799,8 +1786,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { ++p; { return (bufsize_t)(p - start); } yy101: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy103; @@ -1821,8 +1807,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy102: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1852,8 +1837,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy103: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy105; @@ -1874,8 +1858,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy104: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1905,8 +1888,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy105: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy107; @@ -1927,8 +1909,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy106: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1958,8 +1939,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy107: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy109; @@ -1980,8 +1960,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy108: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2011,8 +1990,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy109: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy111; @@ -2033,8 +2011,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy110: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2064,8 +2041,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy111: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy113; @@ -2086,8 +2062,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy112: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2117,8 +2092,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy113: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy115; @@ -2139,8 +2113,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy114: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2170,8 +2143,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy115: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy117; @@ -2192,8 +2164,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy116: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2223,8 +2194,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy117: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy119; @@ -2245,8 +2215,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy118: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2276,8 +2245,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy119: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy121; @@ -2298,8 +2266,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy120: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2329,8 +2296,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy121: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy123; @@ -2351,8 +2317,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy122: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2382,8 +2347,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy123: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy125; @@ -2404,8 +2368,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy124: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2435,8 +2398,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy125: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy127; @@ -2457,8 +2419,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy126: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2488,8 +2449,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy127: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy129; @@ -2510,8 +2470,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy128: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2541,8 +2500,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy129: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy131; @@ -2563,8 +2521,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy130: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2594,8 +2551,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy131: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy133; @@ -2616,8 +2572,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy132: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2647,8 +2602,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy133: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy135; @@ -2669,8 +2623,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy134: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2700,8 +2653,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy135: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy137; @@ -2722,8 +2674,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy136: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2753,8 +2704,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy137: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy139; @@ -2775,8 +2725,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy138: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2806,8 +2755,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy139: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy141; @@ -2828,8 +2776,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy140: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2859,8 +2806,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy141: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy143; @@ -2881,8 +2827,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy142: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2912,8 +2857,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy143: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy145; @@ -2934,8 +2878,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy144: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2965,8 +2908,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy145: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy147; @@ -2987,8 +2929,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy146: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3018,8 +2959,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy147: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy149; @@ -3040,8 +2980,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy148: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3071,8 +3010,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy149: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy151; @@ -3093,8 +3031,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy150: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3124,8 +3061,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy151: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy153; @@ -3146,8 +3082,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy152: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3177,8 +3112,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy153: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy155; @@ -3199,8 +3133,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy154: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3230,8 +3163,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy155: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy157; @@ -3252,8 +3184,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy156: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3283,8 +3214,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy157: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy159; @@ -3305,8 +3235,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy158: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3336,8 +3265,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy159: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy161; @@ -3358,8 +3286,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy160: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3389,8 +3316,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy161: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy163; @@ -3411,8 +3337,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy162: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3442,8 +3367,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy163: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy165; @@ -3464,8 +3388,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy164: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3495,8 +3418,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy165: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy167; @@ -3517,8 +3439,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy166: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3548,8 +3469,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy167: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy169; @@ -3570,8 +3490,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy168: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3601,8 +3520,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy169: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy171; @@ -3623,8 +3541,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy170: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3654,8 +3571,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy171: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy173; @@ -3676,8 +3592,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy172: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3707,8 +3622,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy173: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy175; @@ -3729,8 +3643,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy174: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3760,8 +3673,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy175: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy177; @@ -3782,8 +3694,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy176: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3813,8 +3724,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy177: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy179; @@ -3835,8 +3745,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy178: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3866,8 +3775,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy179: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy181; @@ -3888,8 +3796,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy180: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3919,8 +3826,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy181: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy183; @@ -3941,8 +3847,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy182: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3972,8 +3877,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy183: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy185; @@ -3994,8 +3898,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy184: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4025,8 +3928,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy185: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy187; @@ -4047,8 +3949,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy186: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4078,8 +3979,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy187: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy189; @@ -4100,8 +4000,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy188: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4131,8 +4030,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy189: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy191; @@ -4153,8 +4051,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy190: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4184,8 +4081,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy191: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy193; @@ -4206,8 +4102,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy192: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4237,8 +4132,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy193: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy195; @@ -4259,8 +4153,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy194: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4290,8 +4183,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy195: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy197; @@ -4312,8 +4204,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy196: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4343,8 +4234,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy197: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy199; @@ -4365,8 +4255,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy198: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4396,8 +4285,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy199: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy201; @@ -4418,8 +4306,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy200: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4449,8 +4336,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy201: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy203; @@ -4471,8 +4357,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy202: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4502,8 +4387,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy203: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy205; @@ -4524,8 +4408,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy204: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4555,8 +4438,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy205: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy207; @@ -4577,8 +4459,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy206: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4608,8 +4489,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy207: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy209; @@ -4630,8 +4510,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy208: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4661,8 +4540,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy209: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy211; @@ -4683,8 +4561,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy210: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4714,8 +4591,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy211: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy213; @@ -4736,8 +4612,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy212: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4767,8 +4642,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy213: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy215; @@ -4789,8 +4663,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy214: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4820,8 +4693,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy215: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy217; @@ -4842,8 +4714,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy216: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4873,8 +4744,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy217: - ++p; - yych = *p; + yych = *++p; if (yych <= '9') { if (yych == '-') goto yy219; @@ -4895,8 +4765,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy218: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4926,8 +4795,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy219: - ++p; - yych = *p; + yych = *++p; if (yych <= '@') { if (yych <= '/') goto yy94; @@ -4944,8 +4812,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy94; } yy220: - ++p; - yych = *p; + yych = *++p; if (yych <= '=') { if (yych <= '.') { if (yych <= '-') @@ -4971,8 +4838,7 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy221: - ++p; - yych = *p; + yych = *++p; if (yych == '.') goto yy95; if (yych == '>') @@ -5083,33 +4949,34 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy225; yy229: yych = *(marker = ++p); - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy249; + if (yych <= '.') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy225; + if (yych <= '\r') + goto yy250; goto yy225; } else { - if (yych <= '/') - goto yy251; - if (yych <= '9') - goto yy249; + if (yych <= ' ') + goto yy250; + if (yych == '-') + goto yy250; goto yy225; } } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy252; - if (yych <= '@') - goto yy225; - goto yy249; + if (yych <= '@') { + if (yych <= '9') + goto yy250; + if (yych == '>') + goto yy250; + goto yy225; } else { + if (yych <= 'Z') + goto yy250; if (yych <= '`') goto yy225; if (yych <= 'z') - goto yy249; + goto yy250; goto yy225; } } @@ -5121,8 +4988,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { p = marker; goto yy225; yy232: - ++p; - yych = *p; + yych = *++p; if (yybm[256 + yych] & 32) { goto yy232; } @@ -5141,8 +5007,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy257; goto yy231; yy235: - ++p; - yych = *p; + yych = *++p; if (yybm[256 + yych] & 64) { goto yy235; } @@ -5160,8 +5025,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } yy237: - ++p; - yych = *p; + yych = *++p; yy238: if (yybm[256 + yych] & 128) { goto yy237; @@ -5194,8 +5058,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } } - ++p; - yych = *p; + yych = *++p; if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) @@ -5227,64 +5090,56 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy240: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy237; goto yy231; yy241: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy240; goto yy231; yy242: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy240; goto yy231; yy243: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy240; goto yy231; yy244: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy242; goto yy231; yy245: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy242; goto yy231; yy246: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy242; goto yy231; yy247: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 1) { goto yy247; } @@ -5316,8 +5171,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy249: - ++p; - yych = *p; + yych = *++p; + yy250: if (yybm[0 + yych] & 1) { goto yy247; } @@ -5363,8 +5218,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; goto yy263; yy255: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 2) { goto yy255; } @@ -5405,8 +5259,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy279; goto yy231; yy258: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x1F) { if (yych <= 0x08) goto yy231; @@ -5421,8 +5274,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } yy260: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 4) { goto yy260; } @@ -5450,8 +5302,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy262: - ++p; - yych = *p; + yych = *++p; yy263: if (yybm[0 + yych] & 8) { goto yy262; @@ -5493,112 +5344,98 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; goto yy263; yy265: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy262; goto yy231; yy266: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy265; goto yy231; yy267: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy265; goto yy231; yy268: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy265; goto yy231; yy269: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy267; goto yy231; yy270: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy267; goto yy231; yy271: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy267; goto yy231; yy272: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy255; goto yy231; yy273: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy272; goto yy231; yy274: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy272; goto yy231; yy275: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy272; goto yy231; yy276: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy274; goto yy231; yy277: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy274; goto yy231; yy278: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) @@ -5612,8 +5449,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy285; goto yy231; yy280: - ++p; - yych = *p; + yych = *++p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) @@ -5658,8 +5494,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy282: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 16) { goto yy286; } @@ -5695,8 +5530,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy284: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 8) { goto yy262; } @@ -5737,8 +5571,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy299; goto yy231; yy286: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 16) { goto yy286; } @@ -5774,8 +5607,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy288: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 32) { goto yy288; } @@ -5809,8 +5641,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy290: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 64) { goto yy290; } @@ -5844,56 +5675,49 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy292: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy286; goto yy231; yy293: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy292; goto yy231; yy294: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy292; goto yy231; yy295: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy292; goto yy231; yy296: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy294; goto yy231; yy297: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy294; goto yy231; yy298: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) @@ -5907,8 +5731,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy315; goto yy231; yy300: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 1) { goto yy247; } @@ -5918,112 +5741,98 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy252; goto yy231; yy301: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy288; goto yy231; yy302: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy301; goto yy231; yy303: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy301; goto yy231; yy304: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy301; goto yy231; yy305: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy303; goto yy231; yy306: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy303; goto yy231; yy307: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy303; goto yy231; yy308: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy290; goto yy231; yy309: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy308; goto yy231; yy310: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy308; goto yy231; yy311: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy308; goto yy231; yy312: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy310; goto yy231; yy313: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy310; goto yy231; yy314: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) @@ -6034,8 +5843,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { if (yych != '[') goto yy231; yy316: - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 128) { goto yy316; } @@ -6067,8 +5875,7 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } } - ++p; - yych = *p; + yych = *++p; if (yybm[0 + yych] & 128) { goto yy316; } @@ -6102,64 +5909,56 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy319: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy316; goto yy231; yy320: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy319; goto yy231; yy321: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy319; goto yy231; yy322: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy319; goto yy231; yy323: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy321; goto yy231; yy324: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy321; goto yy231; yy325: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy321; goto yy231; yy326: - ++p; - yych = *p; + yych = *++p; if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) @@ -6965,23 +6764,11 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; yy379: yych = *++p; - if (yych <= 'T') { - if (yych == 'N') - goto yy422; - if (yych <= 'S') - goto yy333; - goto yy423; - } else { - if (yych <= 'n') { - if (yych <= 'm') - goto yy333; - goto yy422; - } else { - if (yych == 't') - goto yy423; - goto yy333; - } - } + if (yych == 'N') + goto yy422; + if (yych == 'n') + goto yy422; + goto yy333; yy380: yych = *++p; if (yych == 'V') @@ -6992,16 +6779,16 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy381: yych = *++p; if (yych == 'F') - goto yy424; + goto yy423; if (yych == 'f') - goto yy424; + goto yy423; goto yy333; yy382: yych = *++p; if (yych == 'T') - goto yy425; + goto yy424; if (yych == 't') - goto yy425; + goto yy424; goto yy333; yy383: ++p; @@ -7014,23 +6801,23 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy386: yych = *++p; if (yych == 'R') - goto yy426; + goto yy425; if (yych == 'r') - goto yy426; + goto yy425; goto yy333; yy387: yych = *++p; if (yych == 'E') - goto yy427; + goto yy426; if (yych == 'e') - goto yy427; + goto yy426; goto yy333; yy388: yych = *++p; if (yych == 'R') - goto yy428; + goto yy427; if (yych == 'r') - goto yy428; + goto yy427; goto yy333; yy389: yych = *++p; @@ -7042,30 +6829,30 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy390: yych = *++p; if (yych == 'U') - goto yy429; + goto yy428; if (yych == 'u') - goto yy429; + goto yy428; goto yy333; yy391: yych = *++p; if (yych == 'Y') - goto yy430; + goto yy429; if (yych == 'y') - goto yy430; + goto yy429; goto yy333; yy392: yych = *++p; if (yych == 'M') - goto yy431; + goto yy430; if (yych == 'm') - goto yy431; + goto yy430; goto yy333; yy393: yych = *++p; if (yych == 'B') - goto yy432; + goto yy431; if (yych == 'b') - goto yy432; + goto yy431; goto yy333; yy394: yych = *++p; @@ -7077,9 +6864,9 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy395: yych = *++p; if (yych == 'O') - goto yy433; + goto yy432; if (yych == 'o') - goto yy433; + goto yy432; goto yy333; yy396: yych = *++p; @@ -7104,18 +6891,18 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'E') - goto yy434; + goto yy433; if (yych == 'e') - goto yy434; + goto yy433; goto yy333; } } yy397: yych = *++p; if (yych == 'T') - goto yy432; + goto yy431; if (yych == 't') - goto yy432; + goto yy431; goto yy333; yy398: yych = *++p; @@ -7140,9 +6927,9 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'A') - goto yy435; + goto yy434; if (yych == 'a') - goto yy435; + goto yy434; goto yy333; } } @@ -7152,44 +6939,44 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy401: yych = *++p; if (yych == 'D') - goto yy436; + goto yy435; if (yych == 'd') - goto yy436; + goto yy435; goto yy333; yy402: yych = *++p; if (yych == 'R') - goto yy437; + goto yy436; if (yych == 'r') - goto yy437; + goto yy436; goto yy333; yy403: yych = *++p; if (yych == 'I') - goto yy438; + goto yy437; if (yych == 'i') - goto yy438; + goto yy437; goto yy333; yy404: yych = *++p; if (yych == 'D') - goto yy439; + goto yy438; if (yych == 'd') - goto yy439; + goto yy438; goto yy333; yy405: yych = *++p; if (yych == 'E') - goto yy440; + goto yy439; if (yych == 'e') - goto yy440; + goto yy439; goto yy333; yy406: yych = *++p; if (yych == 'C') - goto yy441; + goto yy440; if (yych == 'c') - goto yy441; + goto yy440; goto yy333; yy407: yych = *++p; @@ -7201,16 +6988,16 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy408: yych = *++p; if (yych == 'T') - goto yy442; + goto yy441; if (yych == 't') - goto yy442; + goto yy441; goto yy333; yy409: yych = *++p; if (yych == 'T') - goto yy443; + goto yy442; if (yych == 't') - goto yy443; + goto yy442; goto yy333; yy410: yych = *++p; @@ -7235,49 +7022,49 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'G') - goto yy444; + goto yy443; if (yych == 'g') - goto yy444; + goto yy443; goto yy333; } } yy411: yych = *++p; if (yych == 'A') - goto yy445; + goto yy444; if (yych == 'a') - goto yy445; + goto yy444; goto yy333; yy412: yych = *++p; if (yych == 'L') - goto yy446; + goto yy445; if (yych == 'l') - goto yy446; + goto yy445; goto yy333; yy413: yych = *++p; if (yych == 'L') - goto yy447; + goto yy446; if (yych == 'l') - goto yy447; + goto yy446; goto yy333; yy414: yych = *++p; if (yych <= 'U') { if (yych == 'C') - goto yy448; + goto yy447; if (yych <= 'T') goto yy333; - goto yy449; + goto yy448; } else { if (yych <= 'c') { if (yych <= 'b') goto yy333; - goto yy448; + goto yy447; } else { if (yych == 'u') - goto yy449; + goto yy448; goto yy333; } } @@ -7291,30 +7078,30 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy416: yych = *++p; if (yych == 'M') - goto yy450; + goto yy449; if (yych == 'm') - goto yy450; + goto yy449; goto yy333; yy417: yych = *++p; if (yych == 'D') - goto yy451; + goto yy450; if (yych == 'd') - goto yy451; + goto yy450; goto yy333; yy418: yych = *++p; if (yych == 'A') - goto yy452; + goto yy451; if (yych == 'a') - goto yy452; + goto yy451; goto yy333; yy419: yych = *++p; if (yych == 'E') - goto yy453; + goto yy452; if (yych == 'e') - goto yy453; + goto yy452; goto yy333; yy420: yych = *++p; @@ -7333,150 +7120,143 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { yy422: yych = *++p; if (yych == 'U') - goto yy454; + goto yy453; if (yych == 'u') - goto yy454; + goto yy453; goto yy333; yy423: - yych = *++p; - if (yych == 'A') - goto yy367; - if (yych == 'a') - goto yy367; - goto yy333; - yy424: yych = *++p; if (yych == 'R') - goto yy455; + goto yy454; if (yych == 'r') - goto yy455; + goto yy454; goto yy333; - yy425: + yy424: yych = *++p; if (yych <= 'I') { if (yych == 'G') - goto yy444; + goto yy443; if (yych <= 'H') goto yy333; - goto yy456; + goto yy455; } else { if (yych <= 'g') { if (yych <= 'f') goto yy333; - goto yy444; + goto yy443; } else { if (yych == 'i') - goto yy456; + goto yy455; goto yy333; } } - yy426: + yy425: yych = *++p; if (yych == 'A') goto yy415; if (yych == 'a') goto yy415; goto yy333; - yy427: + yy426: yych = *++p; if (yych <= 0x1F) { if (yych <= 0x08) goto yy333; if (yych <= '\r') - goto yy457; + goto yy456; goto yy333; } else { if (yych <= ' ') - goto yy457; + goto yy456; if (yych == '>') - goto yy457; + goto yy456; goto yy333; } - yy428: + yy427: yych = *++p; if (yych == 'I') - goto yy459; + goto yy458; if (yych == 'i') - goto yy459; + goto yy458; goto yy333; - yy429: + yy428: yych = *++p; if (yych == 'R') - goto yy460; + goto yy459; if (yych == 'r') - goto yy460; + goto yy459; goto yy333; - yy430: + yy429: yych = *++p; if (yych == 'L') goto yy387; if (yych == 'l') goto yy387; goto yy333; - yy431: + yy430: yych = *++p; if (yych == 'M') - goto yy461; + goto yy460; if (yych == 'm') - goto yy461; + goto yy460; goto yy333; - yy432: + yy431: yych = *++p; if (yych == 'L') - goto yy439; + goto yy438; if (yych == 'l') - goto yy439; + goto yy438; goto yy333; - yy433: + yy432: yych = *++p; if (yych == 'O') - goto yy462; + goto yy461; if (yych == 'o') - goto yy462; + goto yy461; goto yy333; - yy434: + yy433: yych = *++p; if (yych == 'A') - goto yy463; + goto yy462; if (yych == 'a') - goto yy463; + goto yy462; goto yy333; - yy435: + yy434: yych = *++p; if (yych == 'C') goto yy420; if (yych == 'c') goto yy420; goto yy333; - yy436: + yy435: yych = *++p; if (yych == 'A') - goto yy464; + goto yy463; if (yych == 'a') - goto yy464; + goto yy463; goto yy333; - yy437: + yy436: yych = *++p; if (yych == 'E') - goto yy465; + goto yy464; if (yych == 'e') - goto yy465; + goto yy464; goto yy333; - yy438: + yy437: yych = *++p; if (yych == 'C') - goto yy432; + goto yy431; if (yych == 'c') - goto yy432; + goto yy431; goto yy333; - yy439: + yy438: yych = *++p; if (yych == 'E') goto yy367; if (yych == 'e') goto yy367; goto yy333; - yy440: + yy439: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { @@ -7499,83 +7279,83 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'F') - goto yy466; + goto yy465; if (yych == 'f') - goto yy466; + goto yy465; goto yy333; } } - yy441: + yy440: yych = *++p; if (yych == 'K') - goto yy467; + goto yy466; if (yych == 'k') - goto yy467; + goto yy466; goto yy333; - yy442: + yy441: yych = *++p; if (yych == 'I') - goto yy456; + goto yy455; if (yych == 'i') - goto yy456; + goto yy455; goto yy333; - yy443: + yy442: yych = *++p; if (yych == 'E') - goto yy468; + goto yy467; if (yych == 'e') + goto yy467; + goto yy333; + yy443: + yych = *++p; + if (yych == 'R') + goto yy468; + if (yych == 'r') goto yy468; goto yy333; yy444: yych = *++p; - if (yych == 'R') + if (yych == 'I') goto yy469; - if (yych == 'r') + if (yych == 'i') goto yy469; goto yy333; yy445: yych = *++p; - if (yych == 'I') + if (yych == 'O') goto yy470; - if (yych == 'i') + if (yych == 'o') goto yy470; goto yy333; yy446: yych = *++p; - if (yych == 'O') + if (yych == 'D') goto yy471; - if (yych == 'o') + if (yych == 'd') goto yy471; goto yy333; yy447: - yych = *++p; - if (yych == 'D') - goto yy472; - if (yych == 'd') - goto yy472; - goto yy333; - yy448: yych = *++p; if (yych == 'A') goto yy364; if (yych == 'a') goto yy364; goto yy333; - yy449: + yy448: yych = *++p; if (yych == 'R') - goto yy439; + goto yy438; if (yych == 'r') - goto yy439; + goto yy438; goto yy333; - yy450: + yy449: yych = *++p; if (yych == 'E') - goto yy473; + goto yy472; if (yych == 'e') - goto yy473; + goto yy472; goto yy333; - yy451: + yy450: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { @@ -7598,27 +7378,27 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'E') - goto yy468; + goto yy467; if (yych == 'e') - goto yy468; + goto yy467; goto yy333; } } - yy452: + yy451: yych = *++p; if (yych == 'M') - goto yy439; + goto yy438; if (yych == 'm') - goto yy439; + goto yy438; goto yy333; - yy453: + yy452: yych = *++p; if (yych == 'N') - goto yy463; + goto yy462; if (yych == 'n') - goto yy463; + goto yy462; goto yy333; - yy454: + yy453: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { @@ -7641,128 +7421,128 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'I') - goto yy474; + goto yy473; if (yych == 'i') - goto yy474; + goto yy473; goto yy333; } } - yy455: + yy454: yych = *++p; if (yych == 'A') - goto yy475; + goto yy474; if (yych == 'a') - goto yy475; + goto yy474; goto yy333; - yy456: + yy455: yych = *++p; if (yych == 'O') goto yy421; if (yych == 'o') goto yy421; goto yy333; - yy457: + yy456: ++p; { return 1; } - yy459: + yy458: yych = *++p; if (yych == 'P') - goto yy476; + goto yy475; if (yych == 'p') - goto yy476; + goto yy475; goto yy333; - yy460: + yy459: yych = *++p; if (yych == 'C') - goto yy439; + goto yy438; if (yych == 'c') - goto yy439; + goto yy438; goto yy333; - yy461: + yy460: yych = *++p; if (yych == 'A') - goto yy477; + goto yy476; if (yych == 'a') - goto yy477; + goto yy476; goto yy333; - yy462: + yy461: yych = *++p; if (yych == 'T') goto yy367; if (yych == 't') goto yy367; goto yy333; - yy463: + yy462: yych = *++p; if (yych == 'D') goto yy367; if (yych == 'd') goto yy367; goto yy333; - yy464: + yy463: yych = *++p; if (yych == 'T') - goto yy478; + goto yy477; if (yych == 't') - goto yy478; + goto yy477; goto yy333; - yy465: + yy464: yych = *++p; if (yych == 'S') - goto yy479; + goto yy478; if (yych == 's') - goto yy479; + goto yy478; goto yy333; - yy466: + yy465: yych = *++p; if (yych == 'O') - goto yy480; + goto yy479; if (yych == 'o') - goto yy480; + goto yy479; goto yy333; - yy467: + yy466: yych = *++p; if (yych == 'Q') - goto yy481; + goto yy480; if (yych == 'q') - goto yy481; + goto yy480; goto yy333; - yy468: + yy467: yych = *++p; if (yych == 'R') goto yy367; if (yych == 'r') goto yy367; goto yy333; - yy469: + yy468: yych = *++p; if (yych == 'O') - goto yy482; + goto yy481; if (yych == 'o') - goto yy482; + goto yy481; goto yy333; - yy470: + yy469: yych = *++p; if (yych == 'L') - goto yy479; + goto yy478; if (yych == 'l') - goto yy479; + goto yy478; goto yy333; - yy471: + yy470: yych = *++p; if (yych == 'G') goto yy367; if (yych == 'g') goto yy367; goto yy333; - yy472: + yy471: yych = *++p; if (yych == 'S') - goto yy483; + goto yy482; if (yych == 's') - goto yy483; + goto yy482; goto yy333; - yy473: + yy472: yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { @@ -7785,60 +7565,67 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy333; } else { if (yych <= 'S') - goto yy483; + goto yy482; if (yych == 's') - goto yy483; + goto yy482; goto yy333; } } - yy474: + yy473: yych = *++p; if (yych == 'T') - goto yy484; + goto yy483; if (yych == 't') - goto yy484; + goto yy483; goto yy333; - yy475: + yy474: yych = *++p; if (yych == 'M') - goto yy485; + goto yy484; if (yych == 'm') - goto yy485; + goto yy484; goto yy333; - yy476: + yy475: yych = *++p; if (yych == 'T') - goto yy427; + goto yy426; if (yych == 't') - goto yy427; + goto yy426; goto yy333; - yy477: + yy476: yych = *++p; if (yych == 'R') goto yy407; if (yych == 'r') goto yy407; goto yy333; - yy478: + yy477: yych = *++p; if (yych == 'A') - goto yy486; + goto yy485; if (yych == 'a') - goto yy486; + goto yy485; goto yy333; - yy479: + yy478: yych = *++p; if (yych == 'S') goto yy367; if (yych == 's') goto yy367; goto yy333; - yy480: + yy479: yych = *++p; if (yych == 'N') - goto yy462; + goto yy461; if (yych == 'n') - goto yy462; + goto yy461; + goto yy333; + yy480: + yych = *++p; + if (yych == 'U') + goto yy486; + if (yych == 'u') + goto yy486; goto yy333; yy481: yych = *++p; @@ -7848,61 +7635,54 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { goto yy487; goto yy333; yy482: - yych = *++p; - if (yych == 'U') - goto yy488; - if (yych == 'u') - goto yy488; - goto yy333; - yy483: yych = *++p; if (yych == 'E') - goto yy462; + goto yy461; if (yych == 'e') - goto yy462; + goto yy461; goto yy333; - yy484: + yy483: yych = *++p; if (yych == 'E') goto yy415; if (yych == 'e') goto yy415; goto yy333; - yy485: + yy484: yych = *++p; if (yych == 'E') - goto yy479; + goto yy478; if (yych == 'e') - goto yy479; + goto yy478; goto yy333; - yy486: + yy485: yych = *++p; if (yych == '[') - goto yy489; + goto yy488; goto yy333; - yy487: + yy486: yych = *++p; if (yych == 'O') - goto yy491; + goto yy490; if (yych == 'o') - goto yy491; + goto yy490; goto yy333; - yy488: + yy487: yych = *++p; if (yych == 'P') goto yy367; if (yych == 'p') goto yy367; goto yy333; - yy489: + yy488: ++p; { return 5; } - yy491: - ++p; - if ((yych = *p) == 'T') - goto yy439; + yy490: + yych = *++p; + if (yych == 'T') + goto yy438; if (yych == 't') - goto yy439; + goto yy438; goto yy333; } } @@ -7938,591 +7718,557 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { }; yych = *p; if (yych == '<') - goto yy496; + goto yy495; ++p; - yy495 : { return 0; } - yy496: + yy494 : { return 0; } + yy495: yyaccept = 0; yych = *(marker = ++p); if (yych <= '@') { if (yych != '/') - goto yy495; + goto yy494; } else { if (yych <= 'Z') - goto yy499; + goto yy498; if (yych <= '`') - goto yy495; + goto yy494; if (yych <= 'z') - goto yy499; - goto yy495; + goto yy498; + goto yy494; } yych = *++p; if (yych <= '@') - goto yy498; + goto yy497; if (yych <= 'Z') - goto yy501; + goto yy500; if (yych <= '`') - goto yy498; + goto yy497; if (yych <= 'z') - goto yy501; - yy498: + goto yy500; + yy497: p = marker; if (yyaccept == 0) { - goto yy495; + goto yy494; } else { - goto yy514; + goto yy513; } - yy499: - ++p; - yych = *p; + yy498: + yych = *++p; if (yybm[0 + yych] & 2) { - goto yy503; + goto yy502; } if (yych <= '=') { if (yych <= '.') { if (yych == '-') - goto yy499; - goto yy498; + goto yy498; + goto yy497; } else { if (yych <= '/') - goto yy505; + goto yy504; if (yych <= '9') - goto yy499; - goto yy498; + goto yy498; + goto yy497; } } else { if (yych <= 'Z') { if (yych <= '>') - goto yy506; + goto yy505; if (yych <= '@') - goto yy498; - goto yy499; + goto yy497; + goto yy498; } else { if (yych <= '`') - goto yy498; + goto yy497; if (yych <= 'z') - goto yy499; - goto yy498; + goto yy498; + goto yy497; } } - yy501: - ++p; - yych = *p; + yy500: + yych = *++p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) - goto yy498; + goto yy497; if (yych <= '\r') - goto yy508; - goto yy498; + goto yy507; + goto yy497; } else { if (yych <= ' ') - goto yy508; + goto yy507; if (yych == '-') - goto yy501; - goto yy498; + goto yy500; + goto yy497; } } else { if (yych <= '@') { if (yych <= '9') - goto yy501; + goto yy500; if (yych == '>') - goto yy506; - goto yy498; + goto yy505; + goto yy497; } else { if (yych <= 'Z') - goto yy501; + goto yy500; if (yych <= '`') - goto yy498; + goto yy497; if (yych <= 'z') - goto yy501; - goto yy498; + goto yy500; + goto yy497; } } - yy503: - ++p; - yych = *p; + yy502: + yych = *++p; if (yybm[0 + yych] & 2) { - goto yy503; + goto yy502; } if (yych <= '>') { if (yych <= '9') { if (yych != '/') - goto yy498; + goto yy497; } else { if (yych <= ':') - goto yy510; + goto yy509; if (yych <= '=') - goto yy498; - goto yy506; + goto yy497; + goto yy505; } } else { if (yych <= '^') { if (yych <= '@') - goto yy498; + goto yy497; if (yych <= 'Z') - goto yy510; - goto yy498; + goto yy509; + goto yy497; } else { if (yych == '`') - goto yy498; + goto yy497; if (yych <= 'z') - goto yy510; - goto yy498; + goto yy509; + goto yy497; } } - yy505: + yy504: yych = *++p; if (yych != '>') - goto yy498; - yy506: - ++p; - yych = *p; + goto yy497; + yy505: + yych = *++p; if (yybm[0 + yych] & 4) { - goto yy506; + goto yy505; } if (yych <= 0x08) - goto yy498; + goto yy497; if (yych <= '\n') - goto yy512; + goto yy511; if (yych <= '\v') - goto yy498; + goto yy497; if (yych <= '\r') - goto yy515; - goto yy498; - yy508: - ++p; - yych = *p; + goto yy514; + goto yy497; + yy507: + yych = *++p; if (yych <= 0x1F) { if (yych <= 0x08) - goto yy498; + goto yy497; if (yych <= '\r') - goto yy508; - goto yy498; + goto yy507; + goto yy497; } else { if (yych <= ' ') - goto yy508; + goto yy507; if (yych == '>') - goto yy506; - goto yy498; + goto yy505; + goto yy497; } - yy510: - ++p; - yych = *p; + yy509: + yych = *++p; if (yybm[0 + yych] & 8) { - goto yy510; + goto yy509; } if (yych <= ',') { if (yych <= '\r') { if (yych <= 0x08) - goto yy498; - goto yy516; + goto yy497; + goto yy515; } else { if (yych == ' ') - goto yy516; - goto yy498; + goto yy515; + goto yy497; } } else { if (yych <= '<') { if (yych <= '/') - goto yy505; - goto yy498; + goto yy504; + goto yy497; } else { if (yych <= '=') - goto yy518; + goto yy517; if (yych <= '>') - goto yy506; - goto yy498; + goto yy505; + goto yy497; } } - yy512: + yy511: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 4) { - goto yy506; + goto yy505; } if (yych <= 0x08) - goto yy514; + goto yy513; if (yych <= '\n') - goto yy512; + goto yy511; if (yych <= '\v') - goto yy514; + goto yy513; if (yych <= '\r') - goto yy515; - yy514 : { return 7; } + goto yy514; + yy513 : { return 7; } + yy514: + ++p; + goto yy513; yy515: yych = *++p; - goto yy514; - yy516: - ++p; - yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) - goto yy498; + goto yy497; if (yych <= '\r') - goto yy516; + goto yy515; if (yych <= 0x1F) - goto yy498; - goto yy516; + goto yy497; + goto yy515; } else { if (yych <= '/') { if (yych <= '.') - goto yy498; - goto yy505; + goto yy497; + goto yy504; } else { if (yych == ':') - goto yy510; - goto yy498; + goto yy509; + goto yy497; } } } else { if (yych <= 'Z') { if (yych <= '=') - goto yy518; + goto yy517; if (yych <= '>') - goto yy506; + goto yy505; if (yych <= '@') - goto yy498; - goto yy510; + goto yy497; + goto yy509; } else { if (yych <= '_') { if (yych <= '^') - goto yy498; - goto yy510; + goto yy497; + goto yy509; } else { if (yych <= '`') - goto yy498; + goto yy497; if (yych <= 'z') - goto yy510; - goto yy498; + goto yy509; + goto yy497; } } } - yy518: - ++p; - yych = *p; + yy517: + yych = *++p; if (yybm[0 + yych] & 32) { - goto yy520; + goto yy519; } if (yych <= 0xE0) { if (yych <= '"') { if (yych <= 0x00) - goto yy498; + goto yy497; if (yych <= ' ') - goto yy518; - goto yy522; + goto yy517; + goto yy521; } else { if (yych <= '\'') - goto yy524; + goto yy523; if (yych <= 0xC1) - goto yy498; + goto yy497; if (yych <= 0xDF) - goto yy526; - goto yy527; + goto yy525; + goto yy526; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy529; - goto yy528; + goto yy528; + goto yy527; } else { if (yych <= 0xF0) - goto yy530; + goto yy529; if (yych <= 0xF3) - goto yy531; + goto yy530; if (yych <= 0xF4) - goto yy532; - goto yy498; + goto yy531; + goto yy497; } } - yy520: - ++p; - yych = *p; + yy519: + yych = *++p; if (yybm[0 + yych] & 32) { - goto yy520; + goto yy519; } if (yych <= 0xE0) { if (yych <= '=') { if (yych <= 0x00) - goto yy498; + goto yy497; if (yych <= ' ') - goto yy503; - goto yy498; + goto yy502; + goto yy497; } else { if (yych <= '>') - goto yy506; + goto yy505; if (yych <= 0xC1) - goto yy498; + goto yy497; if (yych <= 0xDF) - goto yy526; - goto yy527; + goto yy525; + goto yy526; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy529; - goto yy528; + goto yy528; + goto yy527; } else { if (yych <= 0xF0) - goto yy530; + goto yy529; if (yych <= 0xF3) - goto yy531; + goto yy530; if (yych <= 0xF4) - goto yy532; - goto yy498; + goto yy531; + goto yy497; } } - yy522: - ++p; - yych = *p; + yy521: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy522; + goto yy521; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy498; + goto yy497; if (yych <= '"') - goto yy533; - goto yy498; + goto yy532; + goto yy497; } else { if (yych <= 0xDF) - goto yy534; + goto yy533; if (yych <= 0xE0) - goto yy535; - goto yy536; + goto yy534; + goto yy535; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy537; - if (yych <= 0xEF) goto yy536; - goto yy538; + if (yych <= 0xEF) + goto yy535; + goto yy537; } else { if (yych <= 0xF3) - goto yy539; + goto yy538; if (yych <= 0xF4) - goto yy540; - goto yy498; + goto yy539; + goto yy497; } } - yy524: - ++p; - yych = *p; + yy523: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy524; + goto yy523; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy498; + goto yy497; if (yych <= '\'') - goto yy533; - goto yy498; + goto yy532; + goto yy497; } else { if (yych <= 0xDF) - goto yy541; + goto yy540; if (yych <= 0xE0) - goto yy542; - goto yy543; + goto yy541; + goto yy542; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy544; - if (yych <= 0xEF) goto yy543; - goto yy545; + if (yych <= 0xEF) + goto yy542; + goto yy544; } else { if (yych <= 0xF3) - goto yy546; + goto yy545; if (yych <= 0xF4) - goto yy547; - goto yy498; + goto yy546; + goto yy497; } } - yy526: - ++p; - yych = *p; + yy525: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy520; - goto yy498; - yy527: - ++p; - yych = *p; + goto yy519; + goto yy497; + yy526: + yych = *++p; if (yych <= 0x9F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy526; - goto yy498; - yy528: - ++p; - yych = *p; + goto yy525; + goto yy497; + yy527: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy526; - goto yy498; - yy529: - ++p; - yych = *p; + goto yy525; + goto yy497; + yy528: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0x9F) - goto yy526; - goto yy498; - yy530: - ++p; - yych = *p; + goto yy525; + goto yy497; + yy529: + yych = *++p; if (yych <= 0x8F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy528; - goto yy498; - yy531: - ++p; - yych = *p; + goto yy527; + goto yy497; + yy530: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy528; - goto yy498; - yy532: - ++p; - yych = *p; + goto yy527; + goto yy497; + yy531: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0x8F) - goto yy528; - goto yy498; - yy533: - ++p; - yych = *p; + goto yy527; + goto yy497; + yy532: + yych = *++p; if (yybm[0 + yych] & 2) { - goto yy503; + goto yy502; } if (yych == '/') - goto yy505; + goto yy504; if (yych == '>') - goto yy506; - goto yy498; - yy534: - ++p; - yych = *p; + goto yy505; + goto yy497; + yy533: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy522; - goto yy498; - yy535: - ++p; - yych = *p; + goto yy521; + goto yy497; + yy534: + yych = *++p; if (yych <= 0x9F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy534; - goto yy498; - yy536: - ++p; - yych = *p; + goto yy533; + goto yy497; + yy535: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy534; - goto yy498; - yy537: - ++p; - yych = *p; + goto yy533; + goto yy497; + yy536: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0x9F) - goto yy534; - goto yy498; - yy538: - ++p; - yych = *p; + goto yy533; + goto yy497; + yy537: + yych = *++p; if (yych <= 0x8F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy536; - goto yy498; - yy539: - ++p; - yych = *p; + goto yy535; + goto yy497; + yy538: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy536; - goto yy498; - yy540: - ++p; - yych = *p; + goto yy535; + goto yy497; + yy539: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0x8F) - goto yy536; - goto yy498; - yy541: - ++p; - yych = *p; + goto yy535; + goto yy497; + yy540: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy524; - goto yy498; - yy542: - ++p; - yych = *p; + goto yy523; + goto yy497; + yy541: + yych = *++p; if (yych <= 0x9F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy541; - goto yy498; - yy543: - ++p; - yych = *p; + goto yy540; + goto yy497; + yy542: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy541; - goto yy498; - yy544: - ++p; - yych = *p; + goto yy540; + goto yy497; + yy543: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0x9F) - goto yy541; - goto yy498; - yy545: - ++p; - yych = *p; + goto yy540; + goto yy497; + yy544: + yych = *++p; if (yych <= 0x8F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy543; - goto yy498; - yy546: - ++p; - yych = *p; + goto yy542; + goto yy497; + yy545: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0xBF) - goto yy543; - goto yy498; - yy547: - ++p; - yych = *p; + goto yy542; + goto yy497; + yy546: + yych = *++p; if (yych <= 0x7F) - goto yy498; + goto yy497; if (yych <= 0x8F) - goto yy543; - goto yy498; + goto yy542; + goto yy497; } } @@ -8555,850 +8301,829 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ';') { if (yych <= 0x00) - goto yy550; + goto yy549; if (yych != '\n') - goto yy552; + goto yy551; } else { if (yych <= '<') - goto yy553; - if (yych <= 0x7F) goto yy552; + if (yych <= 0x7F) + goto yy551; if (yych >= 0xC2) - goto yy554; + goto yy553; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy555; + goto yy554; if (yych == 0xED) - goto yy557; - goto yy556; + goto yy556; + goto yy555; } else { if (yych <= 0xF0) - goto yy558; + goto yy557; if (yych <= 0xF3) - goto yy559; + goto yy558; if (yych <= 0xF4) - goto yy560; + goto yy559; } } - yy550: + yy549: ++p; - yy551 : { return 0; } - yy552: + yy550 : { return 0; } + yy551: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy551; + goto yy550; if (yych <= '\t') - goto yy562; - goto yy551; + goto yy561; + goto yy550; } else { if (yych <= 0x7F) - goto yy562; + goto yy561; if (yych <= 0xC1) - goto yy551; + goto yy550; if (yych <= 0xF4) - goto yy562; - goto yy551; + goto yy561; + goto yy550; } - yy553: + yy552: yyaccept = 0; yych = *(marker = ++p); if (yych <= '.') { if (yych <= 0x00) - goto yy551; + goto yy550; if (yych == '\n') - goto yy551; - goto yy562; + goto yy550; + goto yy561; } else { if (yych <= 0x7F) { if (yych <= '/') - goto yy573; - goto yy562; + goto yy572; + goto yy561; } else { if (yych <= 0xC1) - goto yy551; + goto yy550; if (yych <= 0xF4) - goto yy562; - goto yy551; + goto yy561; + goto yy550; } } - yy554: + yy553: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy551; + goto yy550; if (yych <= 0xBF) - goto yy561; - goto yy551; - yy555: + goto yy560; + goto yy550; + yy554: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy551; + goto yy550; if (yych <= 0xBF) - goto yy566; - goto yy551; - yy556: + goto yy565; + goto yy550; + yy555: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy551; + goto yy550; if (yych <= 0xBF) - goto yy566; - goto yy551; - yy557: + goto yy565; + goto yy550; + yy556: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy551; + goto yy550; if (yych <= 0x9F) - goto yy566; - goto yy551; - yy558: + goto yy565; + goto yy550; + yy557: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy551; + goto yy550; if (yych <= 0xBF) - goto yy568; - goto yy551; - yy559: + goto yy567; + goto yy550; + yy558: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy551; + goto yy550; if (yych <= 0xBF) - goto yy568; - goto yy551; - yy560: + goto yy567; + goto yy550; + yy559: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy551; + goto yy550; if (yych <= 0x8F) - goto yy568; - goto yy551; + goto yy567; + goto yy550; + yy560: + yych = *++p; yy561: - ++p; - yych = *p; - yy562: if (yybm[0 + yych] & 64) { - goto yy561; + goto yy560; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy563; + goto yy562; if (yych <= '<') - goto yy564; + goto yy563; } else { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; - goto yy568; + goto yy566; + goto yy567; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy569; - if (yych <= 0xEF) goto yy568; - goto yy570; + if (yych <= 0xEF) + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; + goto yy571; } } - yy563: + yy562: p = marker; if (yyaccept == 0) { - goto yy551; + goto yy550; } else { - goto yy583; + goto yy582; } - yy564: - ++p; - yych = *p; + yy563: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xDF) { if (yych <= '.') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= '/') - goto yy573; + goto yy572; if (yych <= 0x7F) - goto yy561; + goto yy560; if (yych <= 0xC1) - goto yy563; + goto yy562; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych == 0xED) - goto yy569; - goto yy568; + goto yy568; + goto yy567; } else { if (yych <= 0xF0) - goto yy570; + goto yy569; if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } - yy566: - ++p; - yych = *p; + yy565: + yych = *++p; if (yych <= 0x7F) - goto yy563; + goto yy562; if (yych <= 0xBF) - goto yy561; - goto yy563; - yy567: - ++p; - yych = *p; + goto yy560; + goto yy562; + yy566: + yych = *++p; if (yych <= 0x9F) - goto yy563; + goto yy562; if (yych <= 0xBF) - goto yy566; - goto yy563; - yy568: - ++p; - yych = *p; + goto yy565; + goto yy562; + yy567: + yych = *++p; if (yych <= 0x7F) - goto yy563; + goto yy562; if (yych <= 0xBF) - goto yy566; - goto yy563; - yy569: - ++p; - yych = *p; + goto yy565; + goto yy562; + yy568: + yych = *++p; if (yych <= 0x7F) - goto yy563; + goto yy562; if (yych <= 0x9F) - goto yy566; - goto yy563; - yy570: - ++p; - yych = *p; + goto yy565; + goto yy562; + yy569: + yych = *++p; if (yych <= 0x8F) - goto yy563; + goto yy562; if (yych <= 0xBF) - goto yy568; - goto yy563; - yy571: - ++p; - yych = *p; + goto yy567; + goto yy562; + yy570: + yych = *++p; if (yych <= 0x7F) - goto yy563; + goto yy562; if (yych <= 0xBF) - goto yy568; - goto yy563; - yy572: - ++p; - yych = *p; + goto yy567; + goto yy562; + yy571: + yych = *++p; if (yych <= 0x7F) - goto yy563; + goto yy562; if (yych <= 0x8F) - goto yy568; - goto yy563; - yy573: - ++p; - yych = *p; + goto yy567; + goto yy562; + yy572: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 's') { if (yych <= 'P') { if (yych <= '\t') { if (yych <= 0x00) - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= '\n') - goto yy563; + goto yy562; if (yych <= 'O') - goto yy561; + goto yy560; } } else { if (yych <= 'o') { if (yych == 'S') - goto yy575; - goto yy561; + goto yy574; + goto yy560; } else { if (yych <= 'p') - goto yy574; + goto yy573; if (yych <= 'r') - goto yy561; - goto yy575; + goto yy560; + goto yy574; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } else { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; - goto yy568; + goto yy566; + goto yy567; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy569; - if (yych <= 0xEF) goto yy568; - goto yy570; + if (yych <= 0xEF) + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy574: - ++p; - yych = *p; + yy573: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'Q') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'q') { if (yych <= 'R') - goto yy576; - goto yy561; + goto yy575; + goto yy560; } else { if (yych <= 'r') - goto yy576; + goto yy575; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy575: - ++p; - yych = *p; + yy574: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 't') { if (yych <= 'C') { if (yych <= '\t') { if (yych <= 0x00) - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= '\n') - goto yy563; + goto yy562; if (yych <= 'B') - goto yy561; - goto yy577; + goto yy560; + goto yy576; } } else { if (yych <= 'b') { if (yych == 'T') - goto yy578; - goto yy561; + goto yy577; + goto yy560; } else { if (yych <= 'c') - goto yy577; + goto yy576; if (yych <= 's') - goto yy561; - goto yy578; + goto yy560; + goto yy577; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } else { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; - goto yy568; + goto yy566; + goto yy567; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy569; - if (yych <= 0xEF) goto yy568; - goto yy570; + if (yych <= 0xEF) + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy576: - ++p; - yych = *p; + yy575: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'D') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'd') { if (yych <= 'E') - goto yy579; - goto yy561; + goto yy578; + goto yy560; } else { if (yych <= 'e') - goto yy579; + goto yy578; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy577: - ++p; - yych = *p; + yy576: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'Q') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'q') { if (yych <= 'R') - goto yy580; - goto yy561; + goto yy579; + goto yy560; } else { if (yych <= 'r') - goto yy580; + goto yy579; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy578: - ++p; - yych = *p; + yy577: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'X') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'x') { if (yych <= 'Y') - goto yy581; - goto yy561; + goto yy580; + goto yy560; } else { if (yych <= 'y') - goto yy581; + goto yy580; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy579: - ++p; - yych = *p; + yy578: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= '>') - goto yy582; + goto yy581; if (yych <= 0x7F) - goto yy561; + goto yy560; if (yych <= 0xC1) - goto yy563; - goto yy566; + goto yy562; + goto yy565; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych == 0xED) - goto yy569; - goto yy568; + goto yy568; + goto yy567; } else { if (yych <= 0xF0) - goto yy570; + goto yy569; if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } - yy580: - ++p; - yych = *p; + yy579: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'H') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'h') { if (yych <= 'I') - goto yy584; - goto yy561; + goto yy583; + goto yy560; } else { if (yych <= 'i') - goto yy584; + goto yy583; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy581: - ++p; - yych = *p; + yy580: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'K') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'k') { if (yych <= 'L') - goto yy576; - goto yy561; + goto yy575; + goto yy560; } else { if (yych <= 'l') - goto yy576; + goto yy575; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy582: + yy581: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy561; + goto yy560; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy583; + goto yy582; if (yych <= '<') - goto yy564; + goto yy563; } else { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; - goto yy568; + goto yy566; + goto yy567; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy569; - if (yych <= 0xEF) goto yy568; - goto yy570; + if (yych <= 0xEF) + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; + goto yy571; } } - yy583 : { return (bufsize_t)(p - start); } - yy584: - ++p; - yych = *p; + yy582 : { return (bufsize_t)(p - start); } + yy583: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'O') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 'o') { if (yych >= 'Q') - goto yy561; + goto yy560; } else { if (yych <= 'p') - goto yy585; + goto yy584; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } - yy585: - ++p; - yych = *p; + yy584: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy564; + goto yy563; } if (yych <= 0xC1) { if (yych <= 'S') { if (yych <= 0x00) - goto yy563; + goto yy562; if (yych == '\n') - goto yy563; - goto yy561; + goto yy562; + goto yy560; } else { if (yych <= 's') { if (yych <= 'T') - goto yy579; - goto yy561; + goto yy578; + goto yy560; } else { if (yych <= 't') - goto yy579; + goto yy578; if (yych <= 0x7F) - goto yy561; - goto yy563; + goto yy560; + goto yy562; } } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy566; + goto yy565; if (yych <= 0xE0) - goto yy567; + goto yy566; if (yych <= 0xEC) - goto yy568; - goto yy569; + goto yy567; + goto yy568; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy568; - goto yy570; + goto yy567; + goto yy569; } else { if (yych <= 0xF3) - goto yy571; + goto yy570; if (yych <= 0xF4) - goto yy572; - goto yy563; + goto yy571; + goto yy562; } } } @@ -9434,337 +9159,326 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= ',') { if (yych <= 0x00) - goto yy588; + goto yy587; if (yych != '\n') - goto yy590; + goto yy589; } else { if (yych <= '-') - goto yy591; - if (yych <= 0x7F) goto yy590; + if (yych <= 0x7F) + goto yy589; if (yych >= 0xC2) - goto yy592; + goto yy591; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy593; + goto yy592; if (yych == 0xED) - goto yy595; - goto yy594; + goto yy594; + goto yy593; } else { if (yych <= 0xF0) - goto yy596; + goto yy595; if (yych <= 0xF3) - goto yy597; + goto yy596; if (yych <= 0xF4) - goto yy598; + goto yy597; } } - yy588: + yy587: ++p; - yy589 : { return 0; } - yy590: + yy588 : { return 0; } + yy589: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy589; + goto yy588; if (yych <= '\t') - goto yy600; - goto yy589; + goto yy599; + goto yy588; } else { if (yych <= 0x7F) - goto yy600; + goto yy599; if (yych <= 0xC1) - goto yy589; + goto yy588; if (yych <= 0xF4) - goto yy600; - goto yy589; + goto yy599; + goto yy588; } - yy591: + yy590: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy610; + goto yy609; } if (yych <= '\n') { if (yych <= 0x00) - goto yy589; + goto yy588; if (yych <= '\t') - goto yy600; - goto yy589; + goto yy599; + goto yy588; } else { if (yych <= 0x7F) - goto yy600; + goto yy599; if (yych <= 0xC1) - goto yy589; + goto yy588; if (yych <= 0xF4) - goto yy600; - goto yy589; + goto yy599; + goto yy588; } - yy592: + yy591: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy589; + goto yy588; if (yych <= 0xBF) - goto yy599; - goto yy589; - yy593: + goto yy598; + goto yy588; + yy592: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy589; + goto yy588; if (yych <= 0xBF) - goto yy603; - goto yy589; - yy594: + goto yy602; + goto yy588; + yy593: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy589; + goto yy588; if (yych <= 0xBF) - goto yy603; - goto yy589; - yy595: + goto yy602; + goto yy588; + yy594: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy589; + goto yy588; if (yych <= 0x9F) - goto yy603; - goto yy589; - yy596: + goto yy602; + goto yy588; + yy595: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy589; + goto yy588; if (yych <= 0xBF) - goto yy605; - goto yy589; - yy597: + goto yy604; + goto yy588; + yy596: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy589; + goto yy588; if (yych <= 0xBF) - goto yy605; - goto yy589; - yy598: + goto yy604; + goto yy588; + yy597: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy589; + goto yy588; if (yych <= 0x8F) - goto yy605; - goto yy589; + goto yy604; + goto yy588; + yy598: + yych = *++p; yy599: - ++p; - yych = *p; - yy600: if (yybm[0 + yych] & 64) { - goto yy599; + goto yy598; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy601; + goto yy600; if (yych <= '-') - goto yy602; + goto yy601; } else { if (yych <= 0xDF) - goto yy603; + goto yy602; if (yych <= 0xE0) - goto yy604; - goto yy605; + goto yy603; + goto yy604; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy606; - if (yych <= 0xEF) goto yy605; - goto yy607; + if (yych <= 0xEF) + goto yy604; + goto yy606; } else { if (yych <= 0xF3) - goto yy608; + goto yy607; if (yych <= 0xF4) - goto yy609; + goto yy608; } } - yy601: + yy600: p = marker; if (yyaccept == 0) { - goto yy589; + goto yy588; } else { - goto yy613; + goto yy612; } - yy602: - ++p; - yych = *p; + yy601: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy599; + goto yy598; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy601; + goto yy600; if (yych <= '-') - goto yy610; - goto yy601; + goto yy609; + goto yy600; } else { if (yych <= 0xDF) - goto yy603; + goto yy602; if (yych <= 0xE0) - goto yy604; - goto yy605; + goto yy603; + goto yy604; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy606; - if (yych <= 0xEF) goto yy605; - goto yy607; + if (yych <= 0xEF) + goto yy604; + goto yy606; } else { if (yych <= 0xF3) - goto yy608; + goto yy607; if (yych <= 0xF4) - goto yy609; - goto yy601; + goto yy608; + goto yy600; } } - yy603: - ++p; - yych = *p; + yy602: + yych = *++p; if (yych <= 0x7F) - goto yy601; + goto yy600; if (yych <= 0xBF) - goto yy599; - goto yy601; - yy604: - ++p; - yych = *p; + goto yy598; + goto yy600; + yy603: + yych = *++p; if (yych <= 0x9F) - goto yy601; + goto yy600; if (yych <= 0xBF) - goto yy603; - goto yy601; - yy605: - ++p; - yych = *p; + goto yy602; + goto yy600; + yy604: + yych = *++p; if (yych <= 0x7F) - goto yy601; + goto yy600; if (yych <= 0xBF) - goto yy603; - goto yy601; - yy606: - ++p; - yych = *p; + goto yy602; + goto yy600; + yy605: + yych = *++p; if (yych <= 0x7F) - goto yy601; + goto yy600; if (yych <= 0x9F) - goto yy603; - goto yy601; - yy607: - ++p; - yych = *p; + goto yy602; + goto yy600; + yy606: + yych = *++p; if (yych <= 0x8F) - goto yy601; + goto yy600; if (yych <= 0xBF) - goto yy605; - goto yy601; - yy608: - ++p; - yych = *p; + goto yy604; + goto yy600; + yy607: + yych = *++p; if (yych <= 0x7F) - goto yy601; + goto yy600; if (yych <= 0xBF) - goto yy605; - goto yy601; - yy609: - ++p; - yych = *p; + goto yy604; + goto yy600; + yy608: + yych = *++p; if (yych <= 0x7F) - goto yy601; + goto yy600; if (yych <= 0x8F) - goto yy605; - goto yy601; - yy610: - ++p; - yych = *p; + goto yy604; + goto yy600; + yy609: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy610; + goto yy609; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy601; + goto yy600; if (yych == '\n') - goto yy601; - goto yy599; + goto yy600; + goto yy598; } else { if (yych <= '>') - goto yy612; + goto yy611; if (yych <= 0x7F) - goto yy599; + goto yy598; if (yych <= 0xC1) - goto yy601; - goto yy603; + goto yy600; + goto yy602; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy604; + goto yy603; if (yych == 0xED) - goto yy606; - goto yy605; + goto yy605; + goto yy604; } else { if (yych <= 0xF0) - goto yy607; + goto yy606; if (yych <= 0xF3) - goto yy608; + goto yy607; if (yych <= 0xF4) - goto yy609; - goto yy601; + goto yy608; + goto yy600; } } - yy612: + yy611: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy599; + goto yy598; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy613; + goto yy612; if (yych <= '-') - goto yy602; + goto yy601; } else { if (yych <= 0xDF) - goto yy603; + goto yy602; if (yych <= 0xE0) - goto yy604; - goto yy605; + goto yy603; + goto yy604; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy606; - if (yych <= 0xEF) goto yy605; - goto yy607; + if (yych <= 0xEF) + goto yy604; + goto yy606; } else { if (yych <= 0xF3) - goto yy608; + goto yy607; if (yych <= 0xF4) - goto yy609; + goto yy608; } } - yy613 : { return (bufsize_t)(p - start); } + yy612 : { return (bufsize_t)(p - start); } } } @@ -9797,302 +9511,292 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '>') { if (yych <= 0x00) - goto yy616; + goto yy615; if (yych != '\n') - goto yy618; + goto yy617; } else { if (yych <= '?') - goto yy619; - if (yych <= 0x7F) goto yy618; + if (yych <= 0x7F) + goto yy617; if (yych >= 0xC2) - goto yy620; + goto yy619; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy621; + goto yy620; if (yych == 0xED) - goto yy623; - goto yy622; + goto yy622; + goto yy621; } else { if (yych <= 0xF0) - goto yy624; + goto yy623; if (yych <= 0xF3) - goto yy625; + goto yy624; if (yych <= 0xF4) - goto yy626; + goto yy625; } } - yy616: + yy615: ++p; - yy617 : { return 0; } - yy618: + yy616 : { return 0; } + yy617: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy617; + goto yy616; if (yych <= '\t') - goto yy628; - goto yy617; + goto yy627; + goto yy616; } else { if (yych <= 0x7F) - goto yy628; + goto yy627; if (yych <= 0xC1) - goto yy617; + goto yy616; if (yych <= 0xF4) - goto yy628; - goto yy617; + goto yy627; + goto yy616; } - yy619: + yy618: yyaccept = 0; yych = *(marker = ++p); if (yych <= '=') { if (yych <= 0x00) - goto yy617; + goto yy616; if (yych == '\n') - goto yy617; - goto yy628; + goto yy616; + goto yy627; } else { if (yych <= 0x7F) { if (yych <= '>') - goto yy639; - goto yy628; + goto yy638; + goto yy627; } else { if (yych <= 0xC1) - goto yy617; + goto yy616; if (yych <= 0xF4) - goto yy628; - goto yy617; + goto yy627; + goto yy616; } } - yy620: + yy619: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy617; + goto yy616; if (yych <= 0xBF) - goto yy627; - goto yy617; - yy621: + goto yy626; + goto yy616; + yy620: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy617; + goto yy616; if (yych <= 0xBF) - goto yy632; - goto yy617; - yy622: + goto yy631; + goto yy616; + yy621: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy617; + goto yy616; if (yych <= 0xBF) - goto yy632; - goto yy617; - yy623: + goto yy631; + goto yy616; + yy622: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy617; + goto yy616; if (yych <= 0x9F) - goto yy632; - goto yy617; - yy624: + goto yy631; + goto yy616; + yy623: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy617; + goto yy616; if (yych <= 0xBF) - goto yy634; - goto yy617; - yy625: + goto yy633; + goto yy616; + yy624: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy617; + goto yy616; if (yych <= 0xBF) - goto yy634; - goto yy617; - yy626: + goto yy633; + goto yy616; + yy625: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy617; + goto yy616; if (yych <= 0x8F) - goto yy634; - goto yy617; + goto yy633; + goto yy616; + yy626: + yych = *++p; yy627: - ++p; - yych = *p; - yy628: if (yybm[0 + yych] & 64) { - goto yy627; + goto yy626; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy629; + goto yy628; if (yych <= '?') - goto yy630; + goto yy629; } else { if (yych <= 0xDF) - goto yy632; + goto yy631; if (yych <= 0xE0) - goto yy633; - goto yy634; + goto yy632; + goto yy633; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy635; - if (yych <= 0xEF) goto yy634; - goto yy636; + if (yych <= 0xEF) + goto yy633; + goto yy635; } else { if (yych <= 0xF3) - goto yy637; + goto yy636; if (yych <= 0xF4) - goto yy638; + goto yy637; } } - yy629: + yy628: p = marker; if (yyaccept == 0) { - goto yy617; + goto yy616; } else { - goto yy640; + goto yy639; } - yy630: - ++p; - yych = *p; + yy629: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy630; + goto yy629; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy629; + goto yy628; if (yych == '\n') - goto yy629; - goto yy627; + goto yy628; + goto yy626; } else { if (yych <= '>') - goto yy639; + goto yy638; if (yych <= 0x7F) - goto yy627; + goto yy626; if (yych <= 0xC1) - goto yy629; + goto yy628; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy633; + goto yy632; if (yych == 0xED) - goto yy635; - goto yy634; + goto yy634; + goto yy633; } else { if (yych <= 0xF0) - goto yy636; + goto yy635; if (yych <= 0xF3) - goto yy637; + goto yy636; if (yych <= 0xF4) - goto yy638; - goto yy629; + goto yy637; + goto yy628; } } - yy632: - ++p; - yych = *p; + yy631: + yych = *++p; if (yych <= 0x7F) - goto yy629; + goto yy628; if (yych <= 0xBF) - goto yy627; - goto yy629; - yy633: - ++p; - yych = *p; + goto yy626; + goto yy628; + yy632: + yych = *++p; if (yych <= 0x9F) - goto yy629; + goto yy628; if (yych <= 0xBF) - goto yy632; - goto yy629; - yy634: - ++p; - yych = *p; + goto yy631; + goto yy628; + yy633: + yych = *++p; if (yych <= 0x7F) - goto yy629; + goto yy628; if (yych <= 0xBF) - goto yy632; - goto yy629; - yy635: - ++p; - yych = *p; + goto yy631; + goto yy628; + yy634: + yych = *++p; if (yych <= 0x7F) - goto yy629; + goto yy628; if (yych <= 0x9F) - goto yy632; - goto yy629; - yy636: - ++p; - yych = *p; + goto yy631; + goto yy628; + yy635: + yych = *++p; if (yych <= 0x8F) - goto yy629; + goto yy628; if (yych <= 0xBF) - goto yy634; - goto yy629; - yy637: - ++p; - yych = *p; + goto yy633; + goto yy628; + yy636: + yych = *++p; if (yych <= 0x7F) - goto yy629; + goto yy628; if (yych <= 0xBF) - goto yy634; - goto yy629; - yy638: - ++p; - yych = *p; + goto yy633; + goto yy628; + yy637: + yych = *++p; if (yych <= 0x7F) - goto yy629; + goto yy628; if (yych <= 0x8F) - goto yy634; - goto yy629; - yy639: + goto yy633; + goto yy628; + yy638: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy627; + goto yy626; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy640; + goto yy639; if (yych <= '?') - goto yy630; + goto yy629; } else { if (yych <= 0xDF) - goto yy632; + goto yy631; if (yych <= 0xE0) - goto yy633; - goto yy634; + goto yy632; + goto yy633; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy635; - if (yych <= 0xEF) goto yy634; - goto yy636; + if (yych <= 0xEF) + goto yy633; + goto yy635; } else { if (yych <= 0xF3) - goto yy637; + goto yy636; if (yych <= 0xF4) - goto yy638; + goto yy637; } } - yy640 : { return (bufsize_t)(p - start); } + yy639 : { return (bufsize_t)(p - start); } } } @@ -10127,246 +9831,237 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { }; yych = *p; if (yybm[0 + yych] & 64) { - goto yy646; + goto yy645; } if (yych <= 0xE0) { if (yych <= '\n') { if (yych <= 0x00) - goto yy643; + goto yy642; if (yych <= '\t') - goto yy645; + goto yy644; } else { if (yych <= 0x7F) - goto yy645; + goto yy644; if (yych <= 0xC1) - goto yy643; + goto yy642; if (yych <= 0xDF) - goto yy649; - goto yy650; + goto yy648; + goto yy649; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy652; - goto yy651; + goto yy651; + goto yy650; } else { if (yych <= 0xF0) - goto yy653; + goto yy652; if (yych <= 0xF3) - goto yy654; + goto yy653; if (yych <= 0xF4) - goto yy655; + goto yy654; } } - yy643: + yy642: ++p; - yy644 : { return 0; } - yy645: + yy643 : { return 0; } + yy644: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy644; + goto yy643; if (yych <= '\t') - goto yy657; - goto yy644; + goto yy656; + goto yy643; } else { if (yych <= 0x7F) - goto yy657; + goto yy656; if (yych <= 0xC1) - goto yy644; + goto yy643; if (yych <= 0xF4) - goto yy657; - goto yy644; + goto yy656; + goto yy643; } - yy646: + yy645: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy656; + goto yy655; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy648; + goto yy647; if (yych <= '>') - goto yy646; + goto yy645; } else { if (yych <= 0xDF) - goto yy659; + goto yy658; if (yych <= 0xE0) - goto yy660; - goto yy661; + goto yy659; + goto yy660; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy662; - if (yych <= 0xEF) goto yy661; - goto yy663; + if (yych <= 0xEF) + goto yy660; + goto yy662; } else { if (yych <= 0xF3) - goto yy664; + goto yy663; if (yych <= 0xF4) - goto yy665; + goto yy664; } } - yy648 : { return (bufsize_t)(p - start); } - yy649: + yy647 : { return (bufsize_t)(p - start); } + yy648: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy644; + goto yy643; if (yych <= 0xBF) - goto yy656; - goto yy644; - yy650: + goto yy655; + goto yy643; + yy649: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy644; + goto yy643; if (yych <= 0xBF) - goto yy659; - goto yy644; - yy651: + goto yy658; + goto yy643; + yy650: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy644; + goto yy643; if (yych <= 0xBF) - goto yy659; - goto yy644; - yy652: + goto yy658; + goto yy643; + yy651: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy644; + goto yy643; if (yych <= 0x9F) - goto yy659; - goto yy644; - yy653: + goto yy658; + goto yy643; + yy652: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy644; + goto yy643; if (yych <= 0xBF) - goto yy661; - goto yy644; - yy654: + goto yy660; + goto yy643; + yy653: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy644; + goto yy643; if (yych <= 0xBF) - goto yy661; - goto yy644; - yy655: + goto yy660; + goto yy643; + yy654: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy644; + goto yy643; if (yych <= 0x8F) - goto yy661; - goto yy644; + goto yy660; + goto yy643; + yy655: + yych = *++p; yy656: - ++p; - yych = *p; - yy657: if (yybm[0 + yych] & 128) { - goto yy656; + goto yy655; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy658; + goto yy657; if (yych <= '>') - goto yy646; + goto yy645; } else { if (yych <= 0xDF) - goto yy659; + goto yy658; if (yych <= 0xE0) - goto yy660; - goto yy661; + goto yy659; + goto yy660; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy662; - if (yych <= 0xEF) goto yy661; - goto yy663; + if (yych <= 0xEF) + goto yy660; + goto yy662; } else { if (yych <= 0xF3) - goto yy664; + goto yy663; if (yych <= 0xF4) - goto yy665; + goto yy664; } } - yy658: + yy657: p = marker; if (yyaccept == 0) { - goto yy644; + goto yy643; } else { - goto yy648; + goto yy647; } - yy659: - ++p; - yych = *p; + yy658: + yych = *++p; if (yych <= 0x7F) - goto yy658; + goto yy657; if (yych <= 0xBF) - goto yy656; - goto yy658; - yy660: - ++p; - yych = *p; + goto yy655; + goto yy657; + yy659: + yych = *++p; if (yych <= 0x9F) + goto yy657; + if (yych <= 0xBF) goto yy658; + goto yy657; + yy660: + yych = *++p; + if (yych <= 0x7F) + goto yy657; if (yych <= 0xBF) - goto yy659; - goto yy658; + goto yy658; + goto yy657; yy661: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x7F) + goto yy657; + if (yych <= 0x9F) goto yy658; - if (yych <= 0xBF) - goto yy659; - goto yy658; + goto yy657; yy662: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy658; - if (yych <= 0x9F) - goto yy659; - goto yy658; - yy663: - ++p; - yych = *p; + yych = *++p; if (yych <= 0x8F) - goto yy658; + goto yy657; if (yych <= 0xBF) - goto yy661; - goto yy658; - yy664: - ++p; - yych = *p; + goto yy660; + goto yy657; + yy663: + yych = *++p; if (yych <= 0x7F) - goto yy658; + goto yy657; if (yych <= 0xBF) - goto yy661; - goto yy658; - yy665: - ++p; - yych = *p; + goto yy660; + goto yy657; + yy664: + yych = *++p; if (yych <= 0x7F) - goto yy658; + goto yy657; if (yych <= 0x8F) - goto yy661; - goto yy658; + goto yy660; + goto yy657; } } @@ -10399,337 +10094,326 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '\\') { if (yych <= 0x00) - goto yy668; + goto yy667; if (yych != '\n') - goto yy670; + goto yy669; } else { if (yych <= ']') - goto yy671; - if (yych <= 0x7F) goto yy670; + if (yych <= 0x7F) + goto yy669; if (yych >= 0xC2) - goto yy672; + goto yy671; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy673; + goto yy672; if (yych == 0xED) - goto yy675; - goto yy674; + goto yy674; + goto yy673; } else { if (yych <= 0xF0) - goto yy676; + goto yy675; if (yych <= 0xF3) - goto yy677; + goto yy676; if (yych <= 0xF4) - goto yy678; + goto yy677; } } - yy668: + yy667: ++p; - yy669 : { return 0; } - yy670: + yy668 : { return 0; } + yy669: yyaccept = 0; yych = *(marker = ++p); if (yych <= '\n') { if (yych <= 0x00) - goto yy669; + goto yy668; if (yych <= '\t') - goto yy680; - goto yy669; + goto yy679; + goto yy668; } else { if (yych <= 0x7F) - goto yy680; + goto yy679; if (yych <= 0xC1) - goto yy669; + goto yy668; if (yych <= 0xF4) - goto yy680; - goto yy669; + goto yy679; + goto yy668; } - yy671: + yy670: yyaccept = 0; yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy690; + goto yy689; } if (yych <= '\n') { if (yych <= 0x00) - goto yy669; + goto yy668; if (yych <= '\t') - goto yy680; - goto yy669; + goto yy679; + goto yy668; } else { if (yych <= 0x7F) - goto yy680; + goto yy679; if (yych <= 0xC1) - goto yy669; + goto yy668; if (yych <= 0xF4) - goto yy680; - goto yy669; + goto yy679; + goto yy668; } - yy672: + yy671: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy669; + goto yy668; if (yych <= 0xBF) - goto yy679; - goto yy669; - yy673: + goto yy678; + goto yy668; + yy672: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x9F) - goto yy669; + goto yy668; if (yych <= 0xBF) - goto yy683; - goto yy669; - yy674: + goto yy682; + goto yy668; + yy673: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy669; + goto yy668; if (yych <= 0xBF) - goto yy683; - goto yy669; - yy675: + goto yy682; + goto yy668; + yy674: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy669; + goto yy668; if (yych <= 0x9F) - goto yy683; - goto yy669; - yy676: + goto yy682; + goto yy668; + yy675: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x8F) - goto yy669; + goto yy668; if (yych <= 0xBF) - goto yy685; - goto yy669; - yy677: + goto yy684; + goto yy668; + yy676: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy669; + goto yy668; if (yych <= 0xBF) - goto yy685; - goto yy669; - yy678: + goto yy684; + goto yy668; + yy677: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x7F) - goto yy669; + goto yy668; if (yych <= 0x8F) - goto yy685; - goto yy669; + goto yy684; + goto yy668; + yy678: + yych = *++p; yy679: - ++p; - yych = *p; - yy680: if (yybm[0 + yych] & 64) { - goto yy679; + goto yy678; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy681; + goto yy680; if (yych <= ']') - goto yy682; + goto yy681; } else { if (yych <= 0xDF) - goto yy683; + goto yy682; if (yych <= 0xE0) - goto yy684; - goto yy685; + goto yy683; + goto yy684; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy686; - if (yych <= 0xEF) goto yy685; - goto yy687; + if (yych <= 0xEF) + goto yy684; + goto yy686; } else { if (yych <= 0xF3) - goto yy688; + goto yy687; if (yych <= 0xF4) - goto yy689; + goto yy688; } } - yy681: + yy680: p = marker; if (yyaccept == 0) { - goto yy669; + goto yy668; } else { - goto yy693; + goto yy692; } - yy682: - ++p; - yych = *p; + yy681: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy679; + goto yy678; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy681; + goto yy680; if (yych <= ']') - goto yy690; - goto yy681; + goto yy689; + goto yy680; } else { if (yych <= 0xDF) - goto yy683; + goto yy682; if (yych <= 0xE0) - goto yy684; - goto yy685; + goto yy683; + goto yy684; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy686; - if (yych <= 0xEF) goto yy685; - goto yy687; + if (yych <= 0xEF) + goto yy684; + goto yy686; } else { if (yych <= 0xF3) - goto yy688; + goto yy687; if (yych <= 0xF4) - goto yy689; - goto yy681; + goto yy688; + goto yy680; } } - yy683: - ++p; - yych = *p; + yy682: + yych = *++p; if (yych <= 0x7F) - goto yy681; + goto yy680; if (yych <= 0xBF) - goto yy679; - goto yy681; - yy684: - ++p; - yych = *p; + goto yy678; + goto yy680; + yy683: + yych = *++p; if (yych <= 0x9F) - goto yy681; + goto yy680; if (yych <= 0xBF) - goto yy683; - goto yy681; - yy685: - ++p; - yych = *p; + goto yy682; + goto yy680; + yy684: + yych = *++p; if (yych <= 0x7F) - goto yy681; + goto yy680; if (yych <= 0xBF) - goto yy683; - goto yy681; - yy686: - ++p; - yych = *p; + goto yy682; + goto yy680; + yy685: + yych = *++p; if (yych <= 0x7F) - goto yy681; + goto yy680; if (yych <= 0x9F) - goto yy683; - goto yy681; - yy687: - ++p; - yych = *p; + goto yy682; + goto yy680; + yy686: + yych = *++p; if (yych <= 0x8F) - goto yy681; + goto yy680; if (yych <= 0xBF) - goto yy685; - goto yy681; - yy688: - ++p; - yych = *p; + goto yy684; + goto yy680; + yy687: + yych = *++p; if (yych <= 0x7F) - goto yy681; + goto yy680; if (yych <= 0xBF) - goto yy685; - goto yy681; - yy689: - ++p; - yych = *p; + goto yy684; + goto yy680; + yy688: + yych = *++p; if (yych <= 0x7F) - goto yy681; + goto yy680; if (yych <= 0x8F) - goto yy685; - goto yy681; - yy690: - ++p; - yych = *p; + goto yy684; + goto yy680; + yy689: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy690; + goto yy689; } if (yych <= 0xDF) { if (yych <= '=') { if (yych <= 0x00) - goto yy681; + goto yy680; if (yych == '\n') - goto yy681; - goto yy679; + goto yy680; + goto yy678; } else { if (yych <= '>') - goto yy692; + goto yy691; if (yych <= 0x7F) - goto yy679; + goto yy678; if (yych <= 0xC1) - goto yy681; - goto yy683; + goto yy680; + goto yy682; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy684; + goto yy683; if (yych == 0xED) - goto yy686; - goto yy685; + goto yy685; + goto yy684; } else { if (yych <= 0xF0) - goto yy687; + goto yy686; if (yych <= 0xF3) - goto yy688; + goto yy687; if (yych <= 0xF4) - goto yy689; - goto yy681; + goto yy688; + goto yy680; } } - yy692: + yy691: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy679; + goto yy678; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= '\n') - goto yy693; + goto yy692; if (yych <= ']') - goto yy682; + goto yy681; } else { if (yych <= 0xDF) - goto yy683; + goto yy682; if (yych <= 0xE0) - goto yy684; - goto yy685; + goto yy683; + goto yy684; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy686; - if (yych <= 0xEF) goto yy685; - goto yy687; + if (yych <= 0xEF) + goto yy684; + goto yy686; } else { if (yych <= 0xF3) - goto yy688; + goto yy687; if (yych <= 0xF4) - goto yy689; + goto yy688; } } - yy693 : { return (bufsize_t)(p - start); } + yy692 : { return (bufsize_t)(p - start); } } } @@ -10767,556 +10451,526 @@ bufsize_t _scan_link_title(const unsigned char *p) { yych = *p; if (yych <= '&') { if (yych == '"') - goto yy698; + goto yy697; } else { if (yych <= '\'') - goto yy699; + goto yy698; if (yych <= '(') - goto yy700; + goto yy699; } ++p; - yy697 : { return 0; } - yy698: + yy696 : { return 0; } + yy697: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy697; + goto yy696; if (yych <= 0x7F) - goto yy702; + goto yy701; if (yych <= 0xC1) - goto yy697; + goto yy696; if (yych <= 0xF4) - goto yy702; - goto yy697; - yy699: + goto yy701; + goto yy696; + yy698: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy697; + goto yy696; if (yych <= 0x7F) - goto yy716; + goto yy715; if (yych <= 0xC1) - goto yy697; + goto yy696; if (yych <= 0xF4) - goto yy716; - goto yy697; - yy700: + goto yy715; + goto yy696; + yy699: yyaccept = 0; yych = *(marker = ++p); if (yych <= 0x00) - goto yy697; + goto yy696; if (yych <= 0x7F) - goto yy729; + goto yy728; if (yych <= 0xC1) - goto yy697; + goto yy696; if (yych <= 0xF4) - goto yy729; - goto yy697; + goto yy728; + goto yy696; + yy700: + yych = *++p; yy701: - ++p; - yych = *p; - yy702: if (yybm[0 + yych] & 16) { - goto yy701; + goto yy700; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy703; + goto yy702; if (yych <= '"') - goto yy704; - goto yy706; + goto yy703; + goto yy705; } else { if (yych <= 0xC1) - goto yy703; + goto yy702; if (yych <= 0xDF) - goto yy708; - goto yy709; + goto yy707; + goto yy708; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy711; - goto yy710; + goto yy710; + goto yy709; } else { if (yych <= 0xF0) - goto yy712; + goto yy711; if (yych <= 0xF3) - goto yy713; + goto yy712; if (yych <= 0xF4) - goto yy714; + goto yy713; } } - yy703: + yy702: p = marker; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy697; + goto yy696; } else { - goto yy705; + goto yy704; } } else { if (yyaccept == 2) { - goto yy718; + goto yy717; } else { - goto yy731; + goto yy730; } } - yy704: - ++p; - yy705 : { return (bufsize_t)(p - start); } - yy706: + yy703: ++p; - yych = *p; + yy704 : { return (bufsize_t)(p - start); } + yy705: + yych = *++p; if (yybm[0 + yych] & 16) { - goto yy701; + goto yy700; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy703; + goto yy702; if (yych <= '"') - goto yy741; - goto yy706; + goto yy740; + goto yy705; } else { if (yych <= 0xC1) - goto yy703; + goto yy702; if (yych >= 0xE0) - goto yy709; + goto yy708; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy711; - goto yy710; + goto yy710; + goto yy709; } else { if (yych <= 0xF0) - goto yy712; + goto yy711; if (yych <= 0xF3) - goto yy713; + goto yy712; if (yych <= 0xF4) - goto yy714; - goto yy703; + goto yy713; + goto yy702; } } - yy708: - ++p; - yych = *p; + yy707: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy701; - goto yy703; - yy709: - ++p; - yych = *p; + goto yy700; + goto yy702; + yy708: + yych = *++p; if (yych <= 0x9F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy708; - goto yy703; - yy710: - ++p; - yych = *p; + goto yy707; + goto yy702; + yy709: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy708; - goto yy703; - yy711: - ++p; - yych = *p; + goto yy707; + goto yy702; + yy710: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0x9F) - goto yy708; - goto yy703; - yy712: - ++p; - yych = *p; + goto yy707; + goto yy702; + yy711: + yych = *++p; if (yych <= 0x8F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy710; - goto yy703; - yy713: - ++p; - yych = *p; + goto yy709; + goto yy702; + yy712: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy710; - goto yy703; - yy714: - ++p; - yych = *p; + goto yy709; + goto yy702; + yy713: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0x8F) - goto yy710; - goto yy703; + goto yy709; + goto yy702; + yy714: + yych = *++p; yy715: - ++p; - yych = *p; - yy716: if (yybm[0 + yych] & 64) { - goto yy715; + goto yy714; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy703; + goto yy702; if (yych >= '(') - goto yy719; + goto yy718; } else { if (yych <= 0xC1) - goto yy703; + goto yy702; if (yych <= 0xDF) - goto yy721; - goto yy722; + goto yy720; + goto yy721; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy724; - goto yy723; + goto yy723; + goto yy722; } else { if (yych <= 0xF0) - goto yy725; + goto yy724; if (yych <= 0xF3) - goto yy726; + goto yy725; if (yych <= 0xF4) - goto yy727; - goto yy703; + goto yy726; + goto yy702; } } - yy717: - ++p; - yy718 : { return (bufsize_t)(p - start); } - yy719: + yy716: ++p; - yych = *p; + yy717 : { return (bufsize_t)(p - start); } + yy718: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy715; + goto yy714; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy703; + goto yy702; if (yych <= '\'') - goto yy742; - goto yy719; + goto yy741; + goto yy718; } else { if (yych <= 0xC1) - goto yy703; + goto yy702; if (yych >= 0xE0) - goto yy722; + goto yy721; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy724; - goto yy723; + goto yy723; + goto yy722; } else { if (yych <= 0xF0) - goto yy725; + goto yy724; if (yych <= 0xF3) - goto yy726; + goto yy725; if (yych <= 0xF4) - goto yy727; - goto yy703; + goto yy726; + goto yy702; } } - yy721: - ++p; - yych = *p; + yy720: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy715; - goto yy703; - yy722: - ++p; - yych = *p; + goto yy714; + goto yy702; + yy721: + yych = *++p; if (yych <= 0x9F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy721; - goto yy703; - yy723: - ++p; - yych = *p; + goto yy720; + goto yy702; + yy722: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy721; - goto yy703; - yy724: - ++p; - yych = *p; + goto yy720; + goto yy702; + yy723: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0x9F) - goto yy721; - goto yy703; - yy725: - ++p; - yych = *p; + goto yy720; + goto yy702; + yy724: + yych = *++p; if (yych <= 0x8F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy723; - goto yy703; - yy726: - ++p; - yych = *p; + goto yy722; + goto yy702; + yy725: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy723; - goto yy703; - yy727: - ++p; - yych = *p; + goto yy722; + goto yy702; + yy726: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0x8F) - goto yy723; - goto yy703; + goto yy722; + goto yy702; + yy727: + yych = *++p; yy728: - ++p; - yych = *p; - yy729: if (yybm[0 + yych] & 128) { - goto yy728; + goto yy727; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy703; + goto yy702; if (yych >= '*') - goto yy732; + goto yy731; } else { if (yych <= 0xC1) - goto yy703; + goto yy702; if (yych <= 0xDF) - goto yy734; - goto yy735; + goto yy733; + goto yy734; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy737; - goto yy736; + goto yy736; + goto yy735; } else { if (yych <= 0xF0) - goto yy738; + goto yy737; if (yych <= 0xF3) - goto yy739; + goto yy738; if (yych <= 0xF4) - goto yy740; - goto yy703; + goto yy739; + goto yy702; } } - yy730: - ++p; - yy731 : { return (bufsize_t)(p - start); } - yy732: + yy729: ++p; - yych = *p; + yy730 : { return (bufsize_t)(p - start); } + yy731: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy728; + goto yy727; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy703; + goto yy702; if (yych <= ')') - goto yy743; - goto yy732; + goto yy742; + goto yy731; } else { if (yych <= 0xC1) - goto yy703; + goto yy702; if (yych >= 0xE0) - goto yy735; + goto yy734; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy737; - goto yy736; + goto yy736; + goto yy735; } else { if (yych <= 0xF0) - goto yy738; + goto yy737; if (yych <= 0xF3) - goto yy739; + goto yy738; if (yych <= 0xF4) - goto yy740; - goto yy703; + goto yy739; + goto yy702; } } - yy734: - ++p; - yych = *p; + yy733: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy728; - goto yy703; - yy735: - ++p; - yych = *p; + goto yy727; + goto yy702; + yy734: + yych = *++p; if (yych <= 0x9F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy734; - goto yy703; - yy736: - ++p; - yych = *p; + goto yy733; + goto yy702; + yy735: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy734; - goto yy703; - yy737: - ++p; - yych = *p; + goto yy733; + goto yy702; + yy736: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0x9F) - goto yy734; - goto yy703; - yy738: - ++p; - yych = *p; + goto yy733; + goto yy702; + yy737: + yych = *++p; if (yych <= 0x8F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy736; - goto yy703; - yy739: - ++p; - yych = *p; + goto yy735; + goto yy702; + yy738: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0xBF) - goto yy736; - goto yy703; - yy740: - ++p; - yych = *p; + goto yy735; + goto yy702; + yy739: + yych = *++p; if (yych <= 0x7F) - goto yy703; + goto yy702; if (yych <= 0x8F) - goto yy736; - goto yy703; - yy741: + goto yy735; + goto yy702; + yy740: yyaccept = 1; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 16) { - goto yy701; + goto yy700; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy705; - if (yych <= '"') goto yy704; - goto yy706; + if (yych <= '"') + goto yy703; + goto yy705; } else { if (yych <= 0xC1) - goto yy705; + goto yy704; if (yych <= 0xDF) - goto yy708; - goto yy709; + goto yy707; + goto yy708; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy711; - goto yy710; + goto yy710; + goto yy709; } else { if (yych <= 0xF0) - goto yy712; + goto yy711; if (yych <= 0xF3) - goto yy713; + goto yy712; if (yych <= 0xF4) - goto yy714; - goto yy705; + goto yy713; + goto yy704; } } - yy742: + yy741: yyaccept = 2; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy715; + goto yy714; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy718; - if (yych <= '\'') goto yy717; - goto yy719; + if (yych <= '\'') + goto yy716; + goto yy718; } else { if (yych <= 0xC1) - goto yy718; + goto yy717; if (yych <= 0xDF) - goto yy721; - goto yy722; + goto yy720; + goto yy721; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy724; - goto yy723; + goto yy723; + goto yy722; } else { if (yych <= 0xF0) - goto yy725; + goto yy724; if (yych <= 0xF3) - goto yy726; + goto yy725; if (yych <= 0xF4) - goto yy727; - goto yy718; + goto yy726; + goto yy717; } } - yy743: + yy742: yyaccept = 3; - marker = ++p; - yych = *p; + yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy728; + goto yy727; } if (yych <= 0xE0) { if (yych <= '\\') { if (yych <= 0x00) - goto yy731; - if (yych <= ')') goto yy730; - goto yy732; + if (yych <= ')') + goto yy729; + goto yy731; } else { if (yych <= 0xC1) - goto yy731; + goto yy730; if (yych <= 0xDF) - goto yy734; - goto yy735; + goto yy733; + goto yy734; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy737; - goto yy736; + goto yy736; + goto yy735; } else { if (yych <= 0xF0) - goto yy738; + goto yy737; if (yych <= 0xF3) - goto yy739; + goto yy738; if (yych <= 0xF4) - goto yy740; - goto yy731; + goto yy739; + goto yy730; } } } @@ -11345,15 +10999,14 @@ bufsize_t _scan_spacechars(const unsigned char *p) { }; yych = *p; if (yybm[0 + yych] & 128) { - goto yy748; + goto yy747; } ++p; { return 0; } - yy748: - ++p; - yych = *p; + yy747: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy748; + goto yy747; } { return (bufsize_t)(p - start); } } @@ -11382,116 +11035,115 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { }; yych = *p; if (yych == '#') - goto yy755; + goto yy754; ++p; - yy754 : { return 0; } - yy755: + yy753 : { return 0; } + yy754: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy756; + goto yy755; } if (yych <= '\f') { if (yych <= 0x08) - goto yy754; + goto yy753; if (yych <= '\n') - goto yy759; - goto yy754; + goto yy758; + goto yy753; } else { if (yych <= '\r') - goto yy759; + goto yy758; if (yych == '#') - goto yy760; - goto yy754; + goto yy759; + goto yy753; } - yy756: - ++p; - yych = *p; + yy755: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy756; + goto yy755; } - yy758 : { return (bufsize_t)(p - start); } + yy757 : { return (bufsize_t)(p - start); } + yy758: + ++p; + goto yy757; yy759: - yych = *++p; - goto yy758; - yy760: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy756; + goto yy755; } if (yych <= '\f') { if (yych <= 0x08) - goto yy761; + goto yy760; if (yych <= '\n') - goto yy759; + goto yy758; } else { if (yych <= '\r') - goto yy759; + goto yy758; if (yych == '#') - goto yy762; + goto yy761; } - yy761: + yy760: p = marker; - goto yy754; - yy762: + goto yy753; + yy761: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy756; + goto yy755; } if (yych <= '\f') { if (yych <= 0x08) - goto yy761; + goto yy760; if (yych <= '\n') - goto yy759; - goto yy761; + goto yy758; + goto yy760; } else { if (yych <= '\r') - goto yy759; + goto yy758; if (yych != '#') - goto yy761; + goto yy760; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy756; + goto yy755; } if (yych <= '\f') { if (yych <= 0x08) - goto yy761; + goto yy760; if (yych <= '\n') - goto yy759; - goto yy761; + goto yy758; + goto yy760; } else { if (yych <= '\r') - goto yy759; + goto yy758; if (yych != '#') - goto yy761; + goto yy760; } yych = *++p; if (yybm[0 + yych] & 128) { - goto yy756; + goto yy755; } if (yych <= '\f') { if (yych <= 0x08) - goto yy761; + goto yy760; if (yych <= '\n') - goto yy759; - goto yy761; + goto yy758; + goto yy760; } else { if (yych <= '\r') - goto yy759; + goto yy758; if (yych != '#') - goto yy761; + goto yy760; } - ++p; - if (yybm[0 + (yych = *p)] & 128) { - goto yy756; + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy755; } if (yych <= 0x08) - goto yy761; + goto yy760; if (yych <= '\n') - goto yy759; + goto yy758; if (yych == '\r') - goto yy759; - goto yy761; + goto yy758; + goto yy760; } } @@ -11518,126 +11170,122 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { }; yych = *p; if (yych == '-') - goto yy770; + goto yy769; if (yych == '=') - goto yy771; + goto yy770; ++p; - yy769 : { return 0; } - yy770: + yy768 : { return 0; } + yy769: yych = *(marker = ++p); if (yybm[0 + yych] & 64) { - goto yy777; + goto yy776; } if (yych <= '\f') { if (yych <= 0x08) - goto yy769; + goto yy768; if (yych <= '\n') - goto yy773; - goto yy769; + goto yy772; + goto yy768; } else { if (yych <= '\r') - goto yy773; + goto yy772; if (yych == ' ') - goto yy773; - goto yy769; + goto yy772; + goto yy768; } - yy771: + yy770: yych = *(marker = ++p); if (yybm[0 + yych] & 128) { - goto yy783; + goto yy782; } if (yych <= '\f') { if (yych <= 0x08) - goto yy769; + goto yy768; if (yych <= '\n') - goto yy780; - goto yy769; + goto yy779; + goto yy768; } else { if (yych <= '\r') - goto yy780; + goto yy779; if (yych == ' ') - goto yy780; - goto yy769; + goto yy779; + goto yy768; } + yy771: + yych = *++p; yy772: - ++p; - yych = *p; - yy773: if (yybm[0 + yych] & 32) { - goto yy772; + goto yy771; } if (yych <= 0x08) - goto yy774; + goto yy773; if (yych <= '\n') - goto yy775; + goto yy774; if (yych == '\r') - goto yy775; - yy774: + goto yy774; + yy773: p = marker; - goto yy769; - yy775: + goto yy768; + yy774: ++p; { return 2; } - yy777: - ++p; - yych = *p; + yy776: + yych = *++p; if (yybm[0 + yych] & 32) { - goto yy772; + goto yy771; } if (yych <= '\f') { if (yych <= 0x08) - goto yy774; + goto yy773; if (yych <= '\n') - goto yy775; - goto yy774; + goto yy774; + goto yy773; } else { if (yych <= '\r') - goto yy775; + goto yy774; if (yych == '-') - goto yy777; - goto yy774; + goto yy776; + goto yy773; } + yy778: + yych = *++p; yy779: - ++p; - yych = *p; - yy780: if (yych <= '\f') { if (yych <= 0x08) - goto yy774; + goto yy773; if (yych <= '\t') - goto yy779; + goto yy778; if (yych >= '\v') - goto yy774; + goto yy773; } else { if (yych <= '\r') - goto yy781; + goto yy780; if (yych == ' ') - goto yy779; - goto yy774; + goto yy778; + goto yy773; } - yy781: + yy780: ++p; { return 1; } - yy783: - ++p; - yych = *p; + yy782: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy783; + goto yy782; } if (yych <= '\f') { if (yych <= 0x08) - goto yy774; + goto yy773; if (yych <= '\t') - goto yy779; + goto yy778; if (yych <= '\n') - goto yy781; - goto yy774; + goto yy780; + goto yy773; } else { if (yych <= '\r') - goto yy781; + goto yy780; if (yych == ' ') - goto yy779; - goto yy774; + goto yy778; + goto yy773; } } } @@ -11669,174 +11317,165 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yych = *p; if (yych <= ',') { if (yych == '*') - goto yy789; + goto yy788; } else { if (yych <= '-') - goto yy790; + goto yy789; if (yych == '_') - goto yy791; + goto yy790; } ++p; - yy788 : { return 0; } - yy789: + yy787 : { return 0; } + yy788: yych = *(marker = ++p); if (yybm[0 + yych] & 16) { - goto yy792; + goto yy791; } if (yych == '*') - goto yy795; - goto yy788; - yy790: + goto yy794; + goto yy787; + yy789: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy797; - goto yy788; + goto yy796; + goto yy787; } else { if (yych <= ' ') - goto yy797; + goto yy796; if (yych == '-') - goto yy799; - goto yy788; + goto yy798; + goto yy787; } - yy791: + yy790: yych = *(marker = ++p); if (yych <= 0x1F) { if (yych == '\t') - goto yy801; - goto yy788; + goto yy800; + goto yy787; } else { if (yych <= ' ') - goto yy801; + goto yy800; if (yych == '_') - goto yy803; - goto yy788; + goto yy802; + goto yy787; } - yy792: - ++p; - yych = *p; + yy791: + yych = *++p; if (yybm[0 + yych] & 16) { - goto yy792; + goto yy791; } if (yych == '*') - goto yy795; - yy794: + goto yy794; + yy793: p = marker; - goto yy788; - yy795: - ++p; - yych = *p; + goto yy787; + yy794: + yych = *++p; if (yych <= 0x1F) { if (yych == '\t') - goto yy795; - goto yy794; + goto yy794; + goto yy793; } else { if (yych <= ' ') - goto yy795; + goto yy794; if (yych == '*') - goto yy805; - goto yy794; + goto yy804; + goto yy793; } - yy797: - ++p; - yych = *p; + yy796: + yych = *++p; if (yych <= 0x1F) { if (yych == '\t') - goto yy797; - goto yy794; + goto yy796; + goto yy793; } else { if (yych <= ' ') - goto yy797; + goto yy796; if (yych != '-') - goto yy794; + goto yy793; } - yy799: - ++p; - yych = *p; + yy798: + yych = *++p; if (yych <= 0x1F) { if (yych == '\t') - goto yy799; - goto yy794; + goto yy798; + goto yy793; } else { if (yych <= ' ') - goto yy799; + goto yy798; if (yych == '-') - goto yy807; - goto yy794; + goto yy806; + goto yy793; } - yy801: - ++p; - yych = *p; + yy800: + yych = *++p; if (yych <= 0x1F) { if (yych == '\t') - goto yy801; - goto yy794; + goto yy800; + goto yy793; } else { if (yych <= ' ') - goto yy801; + goto yy800; if (yych != '_') - goto yy794; + goto yy793; } - yy803: - ++p; - yych = *p; + yy802: + yych = *++p; if (yych <= 0x1F) { if (yych == '\t') - goto yy803; - goto yy794; + goto yy802; + goto yy793; } else { if (yych <= ' ') - goto yy803; + goto yy802; if (yych == '_') - goto yy809; - goto yy794; + goto yy808; + goto yy793; } - yy805: - ++p; - yych = *p; + yy804: + yych = *++p; if (yybm[0 + yych] & 32) { - goto yy805; + goto yy804; } if (yych <= 0x08) - goto yy794; + goto yy793; if (yych <= '\n') - goto yy811; + goto yy810; if (yych == '\r') - goto yy811; - goto yy794; - yy807: - ++p; - yych = *p; + goto yy810; + goto yy793; + yy806: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy807; + goto yy806; } if (yych <= 0x08) - goto yy794; + goto yy793; if (yych <= '\n') - goto yy813; + goto yy812; if (yych == '\r') - goto yy813; - goto yy794; - yy809: - ++p; - yych = *p; + goto yy812; + goto yy793; + yy808: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy809; + goto yy808; } if (yych <= 0x08) - goto yy794; + goto yy793; if (yych <= '\n') - goto yy815; + goto yy814; if (yych == '\r') - goto yy815; - goto yy794; - yy811: + goto yy814; + goto yy793; + yy810: ++p; { return (bufsize_t)(p - start); } - yy813: + yy812: ++p; { return (bufsize_t)(p - start); } - yy815: + yy814: ++p; { return (bufsize_t)(p - start); } } @@ -11872,295 +11511,321 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy821; + goto yy820; if (yych == '~') - goto yy822; + goto yy821; ++p; - yy820 : { return 0; } - yy821: + yy819 : { return 0; } + yy820: yych = *(marker = ++p); if (yych == '`') - goto yy823; - goto yy820; - yy822: + goto yy822; + goto yy819; + yy821: yych = *(marker = ++p); if (yych == '~') - goto yy825; - goto yy820; - yy823: + goto yy824; + goto yy819; + yy822: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy826; + goto yy825; } - yy824: + yy823: p = marker; - goto yy820; - yy825: + goto yy819; + yy824: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy828; + goto yy827; } - goto yy824; - yy826: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 64) { - goto yy830; + goto yy823; + yy825: + yych = *++p; + if (yybm[0 + yych] & 16) { + goto yy825; } - if (yych <= 0xE0) { - if (yych <= '`') { + if (yych <= 0xDF) { + if (yych <= '\f') { if (yych <= 0x00) - goto yy824; - if (yych <= '\r') - goto yy832; - goto yy826; + goto yy823; + if (yych == '\n') { + marker = p; + goto yy831; + } + marker = p; + goto yy829; } else { + if (yych <= '\r') { + marker = p; + goto yy831; + } + if (yych <= 0x7F) { + marker = p; + goto yy829; + } if (yych <= 0xC1) - goto yy824; - if (yych <= 0xDF) - goto yy834; - goto yy835; + goto yy823; + marker = p; + goto yy833; } } else { if (yych <= 0xEF) { - if (yych == 0xED) - goto yy837; - goto yy836; + if (yych <= 0xE0) { + marker = p; + goto yy834; + } + if (yych == 0xED) { + marker = p; + goto yy836; + } + marker = p; + goto yy835; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + marker = p; + goto yy837; + } + if (yych <= 0xF3) { + marker = p; goto yy838; - if (yych <= 0xF3) + } + if (yych <= 0xF4) { + marker = p; goto yy839; - if (yych <= 0xF4) - goto yy840; - goto yy824; + } + goto yy823; } } - yy828: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy841; + yy827: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy827; } - if (yych <= 0xE0) { - if (yych <= '~') { + if (yych <= 0xDF) { + if (yych <= '\f') { if (yych <= 0x00) - goto yy824; - if (yych <= '\r') - goto yy843; - goto yy828; + goto yy823; + if (yych == '\n') { + marker = p; + goto yy842; + } + marker = p; + goto yy840; } else { + if (yych <= '\r') { + marker = p; + goto yy842; + } + if (yych <= 0x7F) { + marker = p; + goto yy840; + } if (yych <= 0xC1) - goto yy824; - if (yych <= 0xDF) - goto yy845; - goto yy846; + goto yy823; + marker = p; + goto yy844; } } else { if (yych <= 0xEF) { - if (yych == 0xED) - goto yy848; - goto yy847; + if (yych <= 0xE0) { + marker = p; + goto yy845; + } + if (yych == 0xED) { + marker = p; + goto yy847; + } + marker = p; + goto yy846; } else { - if (yych <= 0xF0) + if (yych <= 0xF0) { + marker = p; + goto yy848; + } + if (yych <= 0xF3) { + marker = p; goto yy849; - if (yych <= 0xF3) + } + if (yych <= 0xF4) { + marker = p; goto yy850; - if (yych <= 0xF4) - goto yy851; - goto yy824; + } + goto yy823; } } - yy830: - ++p; - yych = *p; + yy829: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy830; + goto yy829; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy824; + goto yy823; if (yych >= 0x0E) - goto yy824; + goto yy823; } else { if (yych <= 0xDF) - goto yy834; + goto yy833; if (yych <= 0xE0) - goto yy835; - goto yy836; + goto yy834; + goto yy835; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy837; - if (yych <= 0xEF) goto yy836; - goto yy838; + if (yych <= 0xEF) + goto yy835; + goto yy837; } else { if (yych <= 0xF3) - goto yy839; + goto yy838; if (yych <= 0xF4) - goto yy840; - goto yy824; + goto yy839; + goto yy823; } } - yy832: + yy831: ++p; p = marker; { return (bufsize_t)(p - start); } - yy834: - ++p; - yych = *p; + yy833: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy830; - goto yy824; - yy835: - ++p; - yych = *p; + goto yy829; + goto yy823; + yy834: + yych = *++p; if (yych <= 0x9F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy834; - goto yy824; - yy836: - ++p; - yych = *p; + goto yy833; + goto yy823; + yy835: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy834; - goto yy824; - yy837: - ++p; - yych = *p; + goto yy833; + goto yy823; + yy836: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0x9F) - goto yy834; - goto yy824; - yy838: - ++p; - yych = *p; + goto yy833; + goto yy823; + yy837: + yych = *++p; if (yych <= 0x8F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy836; - goto yy824; - yy839: - ++p; - yych = *p; + goto yy835; + goto yy823; + yy838: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy836; - goto yy824; - yy840: - ++p; - yych = *p; + goto yy835; + goto yy823; + yy839: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0x8F) - goto yy836; - goto yy824; - yy841: - ++p; - yych = *p; + goto yy835; + goto yy823; + yy840: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy841; + goto yy840; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy824; + goto yy823; if (yych >= 0x0E) - goto yy824; + goto yy823; } else { if (yych <= 0xDF) - goto yy845; + goto yy844; if (yych <= 0xE0) - goto yy846; - goto yy847; + goto yy845; + goto yy846; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy848; - if (yych <= 0xEF) goto yy847; - goto yy849; + if (yych <= 0xEF) + goto yy846; + goto yy848; } else { if (yych <= 0xF3) - goto yy850; + goto yy849; if (yych <= 0xF4) - goto yy851; - goto yy824; + goto yy850; + goto yy823; } } - yy843: + yy842: ++p; p = marker; { return (bufsize_t)(p - start); } - yy845: - ++p; - yych = *p; + yy844: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy841; - goto yy824; - yy846: - ++p; - yych = *p; + goto yy840; + goto yy823; + yy845: + yych = *++p; if (yych <= 0x9F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy845; - goto yy824; - yy847: - ++p; - yych = *p; + goto yy844; + goto yy823; + yy846: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy845; - goto yy824; - yy848: - ++p; - yych = *p; + goto yy844; + goto yy823; + yy847: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0x9F) - goto yy845; - goto yy824; - yy849: - ++p; - yych = *p; + goto yy844; + goto yy823; + yy848: + yych = *++p; if (yych <= 0x8F) - goto yy824; - if (yych <= 0xBF) - goto yy847; - goto yy824; - yy850: - ++p; - yych = *p; + goto yy823; + if (yych <= 0xBF) + goto yy846; + goto yy823; + yy849: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0xBF) - goto yy847; - goto yy824; - yy851: - ++p; - yych = *p; + goto yy846; + goto yy823; + yy850: + yych = *++p; if (yych <= 0x7F) - goto yy824; + goto yy823; if (yych <= 0x8F) - goto yy847; - goto yy824; + goto yy846; + goto yy823; } } @@ -12187,111 +11852,123 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy856; + goto yy855; if (yych == '~') - goto yy857; + goto yy856; ++p; - yy855 : { return 0; } - yy856: + yy854 : { return 0; } + yy855: yych = *(marker = ++p); if (yych == '`') - goto yy858; - goto yy855; - yy857: + goto yy857; + goto yy854; + yy856: yych = *(marker = ++p); if (yych == '~') - goto yy860; - goto yy855; - yy858: + goto yy859; + goto yy854; + yy857: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy861; + goto yy860; } - yy859: + yy858: p = marker; - goto yy855; - yy860: + goto yy854; + yy859: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy863; + goto yy862; } - goto yy859; - yy861: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy865; + goto yy858; + yy860: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy860; } if (yych <= '\f') { if (yych <= 0x08) - goto yy859; - if (yych <= '\n') - goto yy867; - goto yy859; + goto yy858; + if (yych <= '\t') { + marker = p; + goto yy864; + } + if (yych <= '\n') { + marker = p; + goto yy866; + } + goto yy858; } else { - if (yych <= '\r') - goto yy867; - if (yych == '`') - goto yy861; - goto yy859; + if (yych <= '\r') { + marker = p; + goto yy866; + } + if (yych == ' ') { + marker = p; + goto yy864; + } + goto yy858; } - yy863: - ++p; - yych = *p; - marker = p; + yy862: + yych = *++p; if (yybm[0 + yych] & 64) { - goto yy863; + goto yy862; } if (yych <= '\f') { if (yych <= 0x08) - goto yy859; - if (yych <= '\t') - goto yy869; - if (yych <= '\n') - goto yy871; - goto yy859; + goto yy858; + if (yych <= '\t') { + marker = p; + goto yy868; + } + if (yych <= '\n') { + marker = p; + goto yy870; + } + goto yy858; } else { - if (yych <= '\r') - goto yy871; - if (yych == ' ') - goto yy869; - goto yy859; + if (yych <= '\r') { + marker = p; + goto yy870; + } + if (yych == ' ') { + marker = p; + goto yy868; + } + goto yy858; } - yy865: - ++p; - yych = *p; + yy864: + yych = *++p; if (yybm[0 + yych] & 128) { - goto yy865; + goto yy864; } if (yych <= 0x08) - goto yy859; + goto yy858; if (yych <= '\n') - goto yy867; + goto yy866; if (yych != '\r') - goto yy859; - yy867: + goto yy858; + yy866: ++p; p = marker; { return (bufsize_t)(p - start); } - yy869: - ++p; - yych = *p; + yy868: + yych = *++p; if (yych <= '\f') { if (yych <= 0x08) - goto yy859; + goto yy858; if (yych <= '\t') - goto yy869; + goto yy868; if (yych >= '\v') - goto yy859; + goto yy858; } else { if (yych <= '\r') - goto yy871; + goto yy870; if (yych == ' ') - goto yy869; - goto yy859; + goto yy868; + goto yy858; } - yy871: + yy870: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -12308,890 +11985,890 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '&') - goto yy877; + goto yy876; ++p; - yy876 : { return 0; } - yy877: + yy875 : { return 0; } + yy876: yych = *(marker = ++p); if (yych <= '@') { if (yych != '#') - goto yy876; + goto yy875; } else { if (yych <= 'Z') - goto yy880; + goto yy879; if (yych <= '`') - goto yy876; + goto yy875; if (yych <= 'z') - goto yy880; - goto yy876; + goto yy879; + goto yy875; } yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy881; + goto yy880; } else { if (yych <= 'X') - goto yy882; + goto yy881; if (yych == 'x') - goto yy882; + goto yy881; } - yy879: + yy878: p = marker; - goto yy876; - yy880: + goto yy875; + yy879: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy883; - goto yy879; + goto yy882; + goto yy878; } else { if (yych <= 'Z') - goto yy883; + goto yy882; if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy883; - goto yy879; + goto yy882; + goto yy878; } - yy881: + yy880: yych = *++p; if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy884; + goto yy883; if (yych == ';') - goto yy885; - goto yy879; - yy882: + goto yy884; + goto yy878; + yy881: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy887; - goto yy879; + goto yy886; + goto yy878; } else { if (yych <= 'F') - goto yy887; + goto yy886; if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'f') - goto yy887; - goto yy879; + goto yy886; + goto yy878; } - yy883: + yy882: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy888; + goto yy887; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy888; + goto yy878; + goto yy887; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy888; - goto yy879; + goto yy887; + goto yy878; } } - yy884: + yy883: yych = *++p; if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy889; + goto yy888; if (yych != ';') - goto yy879; - yy885: + goto yy878; + yy884: ++p; { return (bufsize_t)(p - start); } - yy887: + yy886: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy890; + goto yy889; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'F') { if (yych <= '@') - goto yy879; - goto yy890; + goto yy878; + goto yy889; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'f') - goto yy890; - goto yy879; + goto yy889; + goto yy878; } } - yy888: + yy887: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy891; + goto yy890; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy891; + goto yy878; + goto yy890; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy891; - goto yy879; + goto yy890; + goto yy878; } } - yy889: + yy888: yych = *++p; if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy892; + goto yy891; if (yych == ';') - goto yy885; - goto yy879; - yy890: + goto yy884; + goto yy878; + yy889: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy893; + goto yy892; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'F') { if (yych <= '@') - goto yy879; - goto yy893; + goto yy878; + goto yy892; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'f') - goto yy893; - goto yy879; + goto yy892; + goto yy878; } } - yy891: + yy890: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy894; + goto yy893; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy894; + goto yy878; + goto yy893; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy894; - goto yy879; + goto yy893; + goto yy878; } } - yy892: + yy891: yych = *++p; if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy895; + goto yy894; if (yych == ';') - goto yy885; - goto yy879; - yy893: + goto yy884; + goto yy878; + yy892: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy896; + goto yy895; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'F') { if (yych <= '@') - goto yy879; - goto yy896; + goto yy878; + goto yy895; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'f') - goto yy896; - goto yy879; + goto yy895; + goto yy878; } } - yy894: + yy893: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy897; + goto yy896; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy897; + goto yy878; + goto yy896; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy897; - goto yy879; + goto yy896; + goto yy878; } } - yy895: + yy894: yych = *++p; if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy898; + goto yy897; if (yych == ';') - goto yy885; - goto yy879; - yy896: + goto yy884; + goto yy878; + yy895: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy899; + goto yy898; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'F') { if (yych <= '@') - goto yy879; - goto yy899; + goto yy878; + goto yy898; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'f') - goto yy899; - goto yy879; + goto yy898; + goto yy878; } } - yy897: + yy896: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy900; + goto yy899; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy900; + goto yy878; + goto yy899; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy900; - goto yy879; + goto yy899; + goto yy878; } } - yy898: + yy897: yych = *++p; if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy901; + goto yy900; if (yych == ';') - goto yy885; - goto yy879; + goto yy884; + goto yy878; + yy898: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy878; + if (yych <= '9') + goto yy900; + if (yych <= ':') + goto yy878; + goto yy884; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy878; + goto yy900; + } else { + if (yych <= '`') + goto yy878; + if (yych <= 'f') + goto yy900; + goto yy878; + } + } yy899: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy901; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; goto yy901; } else { if (yych <= '`') - goto yy879; - if (yych <= 'f') + goto yy878; + if (yych <= 'z') goto yy901; - goto yy879; + goto yy878; } } yy900: + yych = *++p; + if (yych == ';') + goto yy884; + goto yy878; + yy901: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy902; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy902; + goto yy878; } else { if (yych <= '`') - goto yy879; - if (yych <= 'z') - goto yy902; - goto yy879; + goto yy878; + if (yych >= '{') + goto yy878; } } - yy901: - yych = *++p; - if (yych == ';') - goto yy885; - goto yy879; yy902: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy903; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy903: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy904; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy904: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy905; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy905: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy906; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy906: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy907; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy907: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy908; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy908: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy909; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy909: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy910; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy910: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy911; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy911: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy912; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy912: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy913; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy913: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy914; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy914: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy915; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy915: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy916; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy916: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy917; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy917: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy918; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy918: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy919; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy919: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy920; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy920: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy921; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy921: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy922; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy922: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy923; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy923: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') goto yy924; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; + goto yy878; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych >= '{') - goto yy879; + goto yy878; } } yy924: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy879; - if (yych <= '9') - goto yy925; - if (yych <= ':') - goto yy879; - goto yy885; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy879; - } else { - if (yych <= '`') - goto yy879; - if (yych >= '{') - goto yy879; - } - } - yy925: - ++p; - if ((yych = *p) <= ';') { - if (yych <= '/') - goto yy879; + goto yy878; if (yych <= '9') - goto yy901; + goto yy900; if (yych <= ':') - goto yy879; - goto yy885; + goto yy878; + goto yy884; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy879; - goto yy901; + goto yy878; + goto yy900; } else { if (yych <= '`') - goto yy879; + goto yy878; if (yych <= 'z') - goto yy901; - goto yy879; + goto yy900; + goto yy878; } } } @@ -13210,304 +12887,304 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'V') { if (yych <= 'F') { if (yych == 'D') - goto yy930; + goto yy929; if (yych >= 'F') - goto yy931; + goto yy930; } else { if (yych == 'J') - goto yy932; + goto yy931; if (yych >= 'V') - goto yy933; + goto yy932; } } else { if (yych <= 'f') { if (yych == 'd') - goto yy930; + goto yy929; if (yych >= 'f') - goto yy931; + goto yy930; } else { if (yych <= 'j') { if (yych >= 'j') - goto yy932; + goto yy931; } else { if (yych == 'v') - goto yy933; + goto yy932; } } } ++p; - yy929 : { return 0; } - yy930: + yy928 : { return 0; } + yy929: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy934; + goto yy933; if (yych == 'a') - goto yy934; - goto yy929; - yy931: + goto yy933; + goto yy928; + yy930: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy936; + goto yy935; if (yych == 'i') - goto yy936; - goto yy929; - yy932: + goto yy935; + goto yy928; + yy931: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy937; + goto yy936; if (yych == 'a') - goto yy937; - goto yy929; - yy933: + goto yy936; + goto yy928; + yy932: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy938; + goto yy937; if (yych == 'b') - goto yy938; - goto yy929; - yy934: + goto yy937; + goto yy928; + yy933: yych = *++p; if (yych == 'T') - goto yy939; + goto yy938; if (yych == 't') - goto yy939; - yy935: + goto yy938; + yy934: p = marker; if (yyaccept == 0) { - goto yy929; + goto yy928; } else { - goto yy947; + goto yy946; } - yy936: + yy935: yych = *++p; if (yych == 'L') - goto yy940; + goto yy939; if (yych == 'l') + goto yy939; + goto yy934; + yy936: + yych = *++p; + if (yych == 'V') + goto yy940; + if (yych == 'v') goto yy940; - goto yy935; + goto yy934; yy937: yych = *++p; - if (yych == 'V') + if (yych == 'S') goto yy941; - if (yych == 'v') + if (yych == 's') goto yy941; - goto yy935; + goto yy934; yy938: yych = *++p; - if (yych == 'S') + if (yych == 'A') goto yy942; - if (yych == 's') + if (yych == 'a') goto yy942; - goto yy935; + goto yy934; yy939: yych = *++p; - if (yych == 'A') + if (yych == 'E') goto yy943; - if (yych == 'a') + if (yych == 'e') goto yy943; - goto yy935; + goto yy934; yy940: - yych = *++p; - if (yych == 'E') - goto yy944; - if (yych == 'e') - goto yy944; - goto yy935; - yy941: yych = *++p; if (yych == 'A') - goto yy938; + goto yy937; if (yych == 'a') - goto yy938; - goto yy935; - yy942: + goto yy937; + goto yy934; + yy941: yych = *++p; if (yych == 'C') - goto yy945; + goto yy944; if (yych == 'c') + goto yy944; + goto yy934; + yy942: + yych = *++p; + if (yych == ':') goto yy945; - goto yy935; + goto yy934; yy943: yych = *++p; if (yych == ':') - goto yy946; - goto yy935; + goto yy947; + goto yy934; yy944: - yych = *++p; - if (yych == ':') - goto yy948; - goto yy935; - yy945: yych = *++p; if (yych == 'R') - goto yy949; + goto yy948; if (yych == 'r') - goto yy949; - goto yy935; - yy946: + goto yy948; + goto yy934; + yy945: yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy950; + goto yy949; if (yych == 'i') - goto yy950; - yy947 : { return (bufsize_t)(p - start); } + goto yy949; + yy946 : { return (bufsize_t)(p - start); } + yy947: + ++p; + goto yy946; yy948: yych = *++p; - goto yy947; + if (yych == 'I') + goto yy950; + if (yych == 'i') + goto yy950; + goto yy934; yy949: yych = *++p; - if (yych == 'I') + if (yych == 'M') goto yy951; - if (yych == 'i') + if (yych == 'm') goto yy951; - goto yy935; + goto yy934; yy950: yych = *++p; - if (yych == 'M') + if (yych == 'P') goto yy952; - if (yych == 'm') + if (yych == 'p') goto yy952; - goto yy935; + goto yy934; yy951: yych = *++p; - if (yych == 'P') + if (yych == 'A') goto yy953; - if (yych == 'p') + if (yych == 'a') goto yy953; - goto yy935; + goto yy934; yy952: - yych = *++p; - if (yych == 'A') - goto yy954; - if (yych == 'a') - goto yy954; - goto yy935; - yy953: yych = *++p; if (yych == 'T') - goto yy944; + goto yy943; if (yych == 't') - goto yy944; - goto yy935; - yy954: + goto yy943; + goto yy934; + yy953: yych = *++p; if (yych == 'G') - goto yy955; + goto yy954; if (yych != 'g') - goto yy935; - yy955: + goto yy934; + yy954: yych = *++p; if (yych == 'E') - goto yy956; + goto yy955; if (yych != 'e') - goto yy935; - yy956: + goto yy934; + yy955: yych = *++p; if (yych != '/') - goto yy935; + goto yy934; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy958; + goto yy957; if (yych <= 'I') - goto yy935; - goto yy959; + goto yy934; + goto yy958; } else { if (yych == 'P') - goto yy960; + goto yy959; if (yych <= 'V') - goto yy935; - goto yy961; + goto yy934; + goto yy960; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy958; + goto yy957; if (yych <= 'i') - goto yy935; - goto yy959; + goto yy934; + goto yy958; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy935; - goto yy960; + goto yy934; + goto yy959; } else { if (yych == 'w') - goto yy961; - goto yy935; + goto yy960; + goto yy934; } } } - yy958: + yy957: yych = *++p; if (yych == 'I') - goto yy962; + goto yy961; if (yych == 'i') + goto yy961; + goto yy934; + yy958: + yych = *++p; + if (yych == 'P') + goto yy962; + if (yych == 'p') goto yy962; - goto yy935; + goto yy934; yy959: yych = *++p; - if (yych == 'P') + if (yych == 'N') goto yy963; - if (yych == 'p') + if (yych == 'n') goto yy963; - goto yy935; + goto yy934; yy960: yych = *++p; - if (yych == 'N') + if (yych == 'E') goto yy964; - if (yych == 'n') + if (yych == 'e') goto yy964; - goto yy935; + goto yy934; yy961: yych = *++p; - if (yych == 'E') + if (yych == 'F') goto yy965; - if (yych == 'e') + if (yych == 'f') goto yy965; - goto yy935; + goto yy934; yy962: - yych = *++p; - if (yych == 'F') - goto yy966; - if (yych == 'f') - goto yy966; - goto yy935; - yy963: yych = *++p; if (yych == 'E') - goto yy964; + goto yy963; if (yych != 'e') - goto yy935; - yy964: + goto yy934; + yy963: yych = *++p; if (yych == 'G') - goto yy966; + goto yy965; if (yych == 'g') - goto yy966; - goto yy935; - yy965: + goto yy965; + goto yy934; + yy964: yych = *++p; if (yych == 'B') - goto yy968; + goto yy967; if (yych == 'b') - goto yy968; - goto yy935; - yy966: + goto yy967; + goto yy934; + yy965: ++p; { return 0; } - yy968: - ++p; - if ((yych = *p) == 'P') - goto yy966; + yy967: + yych = *++p; + if (yych == 'P') + goto yy965; if (yych == 'p') - goto yy966; - goto yy935; + goto yy965; + goto yy934; } } diff --git a/src/scanners.re b/src/scanners.re index 89e300786f..4667804769 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -37,7 +37,7 @@ bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, tagname = [A-Za-z][A-Za-z0-9-]*; - blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; + blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul'; attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*; diff --git a/test/regression.txt b/test/regression.txt index a6669d0fea..7a859a4b2f 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -92,3 +92,17 @@ Issue #192 - escaped spaces in link destination .

                            [a](te\ st)

                            ```````````````````````````````` + +Issue #527 - meta tags in inline contexts + +```````````````````````````````` example +City: + + + +. +

                            City: + + +

                            +```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 26f5144fa925d5d7275819ff86388a47e6063f7e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Jun 2018 14:47:04 -0700 Subject: Fix spaces on regression test. --- test/regression.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/regression.txt b/test/regression.txt index 7a859a4b2f..5f6b624a9b 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -103,6 +103,6 @@ City: .

                            City: - +

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 55afc6fd496de4e75c27d725c2bf1470cc3cf5aa Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Tue, 1 Aug 2017 19:28:16 +0700 Subject: Add xml:space="preserve" in XML output when appropriate With current HTML escaping, sometimes we may produce an XML tag like Many XML parsers consider these spaces insignificant and strip them out but we need this. There's actually a test case like this in spec.txt (search "A code block can have all empty lines as its content:") and without proper hinting, an external xml->html converter will fail the spec. XML standard covers this case. If xml:space is "preserve", then whitespaces are significant and should be kept. Add this hint for text, code, code_block, html_inline and html_block tags. --- api_test/main.c | 50 +++++++++++++++++++++++++++----------------------- src/xml.c | 4 ++-- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index c30dc71ac2..a843530f1b 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -527,7 +527,9 @@ static void render_xml(test_batch_runner *runner) { static const char markdown[] = "foo *bar*\n" "\n" - "paragraph 2\n"; + "paragraph 2\n" + "\n" + "```\ncode\n```\n"; cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); @@ -536,14 +538,16 @@ static void render_xml(test_batch_runner *runner) { "\n" "\n" " \n" - " foo \n" + " foo \n" " \n" - " bar\n" + " bar\n" " \n" " \n" " \n" - " paragraph 2\n" + " paragraph 2\n" " \n" + " code\n" + "\n" "\n", "render document"); free(xml); @@ -552,9 +556,9 @@ static void render_xml(test_batch_runner *runner) { STR_EQ(runner, xml, "\n" "\n" "\n" - " foo \n" + " foo \n" " \n" - " bar\n" + " bar\n" " \n" "\n", "render first paragraph with source pos"); @@ -902,41 +906,41 @@ static void source_pos(test_batch_runner *runner) { "\n" "\n" " \n" - " Hi \n" + " Hi \n" " \n" - " there\n" + " there\n" " \n" - " .\n" + " .\n" " \n" " \n" - " Hello “ \n" + " Hello “ \n" " \n" - " http://www.google.com\n" + " http://www.google.com\n" " \n" " \n" - " there \n" - " hi\n" - " -- \n" + " there \n" + " hi\n" + " -- \n" " \n" - " okay\n" + " okay\n" " \n" - " .\n" + " .\n" " \n" " \n" " \n" " \n" " \n" - " Okay.\n" + " Okay.\n" " \n" - " Sure.\n" + " Sure.\n" " \n" " \n" " \n" " \n" - " Yes, okay.\n" + " Yes, okay.\n" " \n" " \n" - " ok\n" + " ok\n" " \n" " \n" " \n" @@ -960,11 +964,11 @@ static void ref_source_pos(test_batch_runner *runner) { "\n" "\n" " \n" - " Let's try \n" + " Let's try \n" " \n" - " reference\n" + " reference\n" " \n" - " links.\n" + " links.\n" " \n" "\n", "sourcepos are as expected"); diff --git a/src/xml.c b/src/xml.c index 4898cd2e82..48674ccb7f 100644 --- a/src/xml.c +++ b/src/xml.c @@ -60,7 +60,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE: case CMARK_NODE_HTML_BLOCK: case CMARK_NODE_HTML_INLINE: - cmark_strbuf_puts(xml, ">"); + cmark_strbuf_puts(xml, " xml:space=\"preserve\">"); escape_xml(xml, node->as.literal.data, node->as.literal.len); cmark_strbuf_puts(xml, "as.code.info.data, node->as.code.info.len); cmark_strbuf_putc(xml, '"'); } - cmark_strbuf_puts(xml, ">"); + cmark_strbuf_puts(xml, " xml:space=\"preserve\">"); escape_xml(xml, node->as.code.literal.data, node->as.code.literal.len); cmark_strbuf_puts(xml, " Date: Mon, 16 Jul 2018 15:26:33 +1000 Subject: add link parsing corner cases to regressions --- test/regression.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/regression.txt b/test/regression.txt index 5f6b624a9b..6fef3afe0d 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -106,3 +106,18 @@ City:

                            ```````````````````````````````` + +Issue #530 - link parsing corner cases + +```````````````````````````````` example +[a](\ b) + +[a](<[a](\ b)

                            +

                            a

                            +

                            a

                            +```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 62ad44e358f117464b8730cb4347ab6a59bb4312 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Aug 2018 16:01:11 -0700 Subject: entity_tests.py - omit noisy success output. --- test/entity_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/entity_tests.py b/test/entity_tests.py index 0e3daad09e..ebaf9f7af6 100644 --- a/test/entity_tests.py +++ b/test/entity_tests.py @@ -54,7 +54,7 @@ for entity, utf8 in entities: print(entity, '[ERRORED (return code {})]'.format(rc)) print(err) elif check in actual: - print(entity, '[PASSED]') + # print(entity, '[PASSED]') # omit noisy success output passed += 1 else: print(entity, '[FAILED]') -- cgit 0.0.5-2-1-g0f52 From 76478c79d3d13a21871bbed784f75fd5d9e8b1c2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Aug 2018 16:08:05 -0700 Subject: Update spec.txt. --- test/spec.txt | 125 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 45 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index dc2f5d53a0..baddf2f6f6 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -514,8 +514,8 @@ one block element does not affect the inline parsing of any other. ## Container blocks and leaf blocks We can divide blocks into two types: -[container block](@)s, -which can contain other blocks, and [leaf block](@)s, +[container blocks](@), +which can contain other blocks, and [leaf blocks](@), which cannot. # Leaf blocks @@ -1996,9 +1996,10 @@ 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 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. +the document or other [container block](#container-blocks)), 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. 1. **Start condition:** line begins with the string ``, or @@ -2043,10 +2044,11 @@ or the end of the line.\ **End condition:** line is followed by a [blank line]. HTML blocks continue until they are closed by their appropriate -[end condition], or the last line of the document or other [container block]. -This means any HTML **within an HTML block** that might otherwise be recognised -as a start condition will be ignored by the parser and passed through as-is, -without changing the parser's state. +[end condition], or the last line of the document or other [container +block](#container-blocks). This means any HTML **within an HTML +block** that might otherwise be recognised as a start condition will +be ignored by the parser and passed through as-is, without changing +the parser's state. For instance, `
                            ` within a HTML block started by `` will not affect
                             the parser state; as the HTML block was started in by start condition 6, it
                            @@ -3208,7 +3210,7 @@ aaa
                             
                             # Container blocks
                             
                            -A [container block] is a block that has other
                            +A [container block](#container-blocks) is a block that has other
                             blocks as its contents.  There are two basic kinds of container blocks:
                             [block quotes] and [list items].
                             [Lists] are meta-containers for [list items].
                            @@ -5714,9 +5716,16 @@ preceded nor followed by a backtick.
                             
                             A [code span](@) begins with a backtick string and ends with
                             a backtick string of equal length.  The contents of the code span are
                            -the characters between the two backtick strings, with leading and
                            -trailing spaces and [line endings] removed, and
                            -[whitespace] collapsed to single spaces.
                            +the characters between the two backtick strings, normalized in the
                            +following ways:
                            +
                            +- First, [line endings] are converted to [spaces], unless they are
                            +  adjacent to [spaces], in which case they are ignored.
                            +- If the string both begins *and* ends with a [space] character,
                            +  a single [space] character is removed from the front and back.
                            +  This allows you to include code that begins or ends with backtick
                            +  characters, which must be separated by whitespace from the opening
                            +  or closing backtick strings.
                             
                             This is a simple code span:
                             
                            @@ -5728,10 +5737,11 @@ This is a simple code span:
                             
                             
                             Here two backticks are used, because the code contains a backtick.
                            -This example also illustrates stripping of leading and trailing spaces:
                            +This example also illustrates stripping of a single leading and
                            +trailing space:
                             
                             ```````````````````````````````` example
                            -`` foo ` bar  ``
                            +`` foo ` bar ``
                             .
                             

                            foo ` bar

                            ```````````````````````````````` @@ -5746,58 +5756,70 @@ spaces:

                            ``

                            ```````````````````````````````` - -[Line endings] are treated like spaces: +Note that only *one* space is stripped: ```````````````````````````````` example -`` -foo -`` +` `` ` . -

                            foo

                            +

                            ``

                            ```````````````````````````````` +The stripping only happens if the space is on both +sides of the string: + +```````````````````````````````` example +` a` +. +

                            a

                            +```````````````````````````````` -Interior spaces and [line endings] are collapsed into -single spaces, just as they would be by a browser: +Only [spaces], and not [unicode whitespace] in general, are +stripped in this way: ```````````````````````````````` example -`foo bar - baz` +` b ` . -

                            foo bar baz

                            +

                             b 

                            ```````````````````````````````` -Not all [Unicode whitespace] (for instance, non-breaking space) is -collapsed, however: +[Line endings] are treated like spaces, unless they +come after spaces, in which case they are ignored. ```````````````````````````````` example -`a  b` +`` +foo +bar +baz +`` . -

                            a  b

                            +

                            foo bar baz

                            ```````````````````````````````` +```````````````````````````````` example +`` +foo +`` +. +

                            foo

                            +```````````````````````````````` -Q: Why not just leave the spaces, since browsers will collapse them -anyway? A: Because we might be targeting a non-HTML format, and we -shouldn't rely on HTML-specific rendering assumptions. -(Existing implementations differ in their treatment of internal -spaces and [line endings]. Some, including `Markdown.pl` and -`showdown`, convert an internal [line ending] into a -`
                            ` tag. But this makes things difficult for those who like to -hard-wrap their paragraphs, since a line break in the midst of a code -span will cause an unintended line break in the output. Others just -leave internal spaces as they are, which is fine if only HTML is being -targeted.) +Interior spaces are not collapsed: ```````````````````````````````` example -`foo `` bar` +`foo bar +baz` . -

                            foo `` bar

                            +

                            foo bar baz

                            ```````````````````````````````` +Note that browsers will typically collapse consecutive spaces +when rendering `` elements, so it is recommended that +the following CSS be used: + + code{white-space: pre-wrap;} + Note that backslash escapes do not work in code spans. All backslashes are treated literally: @@ -5813,6 +5835,19 @@ Backslash escapes are never needed, because one can always choose a string of *n* backtick characters as delimiters, where the code does not contain any strings of exactly *n* backtick characters. +```````````````````````````````` example +``foo`bar`` +. +

                            foo`bar

                            +```````````````````````````````` + +```````````````````````````````` example +` foo `` bar ` +. +

                            foo `` bar

                            +```````````````````````````````` + + Code span backticks have higher precedence than any other inline constructs except HTML tags and autolinks. Thus, for example, this is not parsed as emphasized text, since the second `*` is part of a code @@ -9006,7 +9041,7 @@ Line breaks do not occur inside code spans `code span` . -

                            code span

                            +

                            code span

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 880039601d2bc4baf4e17649a02480876917d0ae Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Aug 2018 16:08:13 -0700 Subject: Code span spec changes. These affect both parsing and writing commonmark. --- src/commonmark.c | 8 ++++++-- src/inlines.c | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 95a1ae5e54..d701bab67b 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -167,6 +167,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, int list_number; cmark_delim_type list_delim; int numticks; + bool extra_spaces; int i; bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info, *code, *title; @@ -363,14 +364,17 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, code = cmark_node_get_literal(node); code_len = strlen(code); numticks = shortest_unused_backtick_sequence(code); + extra_spaces = code_len == 0 || + code[0] == '`' || code[code_len - 1] == '`' || + code[0] == ' ' || code[code_len - 1] == ' '; for (i = 0; i < numticks; i++) { LIT("`"); } - if (code_len == 0 || code[0] == '`') { + if (extra_spaces) { LIT(" "); } OUT(cmark_node_get_literal(node), allow_wrap, LITERAL); - if (code_len == 0 || code[code_len - 1] == '`') { + if (extra_spaces) { LIT(" "); } for (i = 0; i < numticks; i++) { diff --git a/src/inlines.c b/src/inlines.c index 8bb82f160d..0dc7864736 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -323,6 +323,42 @@ static bufsize_t scan_to_closing_backticks(subject *subj, return 0; } +// Destructively modify string, converting newlines to +// spaces or removing them if they're adjacent to spaces, +// then removing a single leading + trailing space. +static void S_normalize_code(cmark_strbuf *s) { + bool last_char_was_space = false; + bufsize_t r, w; + + for (r = 0, w = 0; r < s->size; ++r) { + switch (s->ptr[r]) { + case '\r': + break; + case '\n': + if (!last_char_was_space && !cmark_isspace(s->ptr[r + 1])) { + s->ptr[w++] = ' '; + last_char_was_space = true; + } else { + last_char_was_space = false; + } + break; + default: + s->ptr[w++] = s->ptr[r]; + last_char_was_space = (s->ptr[r] == ' '); + } + } + + // begins and ends with space? + if (s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') { + cmark_strbuf_drop(s, 1); + cmark_strbuf_truncate(s, w - 2); + } else { + cmark_strbuf_truncate(s, w); + } + +} + + // Parse backtick code section or raw backticks, return an inline. // Assumes that the subject has a backtick at the current position. static cmark_node *handle_backticks(subject *subj, int options) { @@ -338,8 +374,7 @@ static cmark_node *handle_backticks(subject *subj, int options) { cmark_strbuf_set(&buf, subj->input.data + startpos, endpos - startpos - openticks.len); - cmark_strbuf_trim(&buf); - cmark_strbuf_normalize_whitespace(&buf); + S_normalize_code(&buf); cmark_node *node = make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf)); adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len, options); @@ -347,6 +382,7 @@ static cmark_node *handle_backticks(subject *subj, int options) { } } + // Scan ***, **, or * and return number scanned, or 0. // Advances position. static int scan_delims(subject *subj, unsigned char c, bool *can_open, -- cgit 0.0.5-2-1-g0f52 From 15a76ded8fe35cf2a8f30720ffdf6abf9e7ecc41 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Aug 2018 10:50:49 -0700 Subject: Updated spec.txt. --- test/spec.txt | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index baddf2f6f6..6862838304 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5719,13 +5719,12 @@ a backtick string of equal length. The contents of the code span are the characters between the two backtick strings, normalized in the following ways: -- First, [line endings] are converted to [spaces], unless they are - adjacent to [spaces], in which case they are ignored. -- If the string both begins *and* ends with a [space] character, - a single [space] character is removed from the front and back. - This allows you to include code that begins or ends with backtick - characters, which must be separated by whitespace from the opening - or closing backtick strings. +- First, [line endings] are converted to [spaces]. +- If the resulting string both begins *and* ends with a [space] + character, a single [space] character is removed from the + front and back. This allows you to include code that begins + or ends with backtick characters, which must be separated by + whitespace from the opening or closing backtick strings. This is a simple code span: @@ -5783,8 +5782,7 @@ stripped in this way: ```````````````````````````````` -[Line endings] are treated like spaces, unless they -come after spaces, in which case they are ignored. +[Line endings] are treated like spaces: ```````````````````````````````` example `` @@ -5793,12 +5791,12 @@ bar baz `` . -

                            foo bar baz

                            +

                            foo bar baz

                            ```````````````````````````````` ```````````````````````````````` example -`` -foo +`` +foo `` .

                            foo

                            @@ -5808,7 +5806,7 @@ foo Interior spaces are not collapsed: ```````````````````````````````` example -`foo bar +`foo bar baz` .

                            foo bar baz

                            @@ -9038,7 +9036,7 @@ bar

                            Line breaks do not occur inside code spans ```````````````````````````````` example -`code +`code span` .

                            code span

                            -- cgit 0.0.5-2-1-g0f52 From 14ae4f33c47b015ff41a2b4d88b215841ce5eb57 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 26 Aug 2018 10:50:54 -0700 Subject: Simplify code normalization, in line with spec change. --- src/inlines.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 0dc7864736..bbda78f3b3 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -324,27 +324,22 @@ static bufsize_t scan_to_closing_backticks(subject *subj, } // Destructively modify string, converting newlines to -// spaces or removing them if they're adjacent to spaces, -// then removing a single leading + trailing space. +// spaces, then removing a single leading + trailing space. static void S_normalize_code(cmark_strbuf *s) { - bool last_char_was_space = false; bufsize_t r, w; for (r = 0, w = 0; r < s->size; ++r) { switch (s->ptr[r]) { case '\r': + if (s->ptr[r + 1] != '\n') { + s->ptr[w++] = ' '; + } break; case '\n': - if (!last_char_was_space && !cmark_isspace(s->ptr[r + 1])) { - s->ptr[w++] = ' '; - last_char_was_space = true; - } else { - last_char_was_space = false; - } + s->ptr[w++] = ' '; break; default: s->ptr[w++] = s->ptr[r]; - last_char_was_space = (s->ptr[r] == ' '); } } -- cgit 0.0.5-2-1-g0f52 From a9f67da092cfc81e7e82269666278a5463543c28 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 27 Aug 2018 14:23:28 -0700 Subject: Fix appveyor links. Closes #251. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dfaa7ff52a..bd3694e6a8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ cmark ===== [![Build Status]](https://travis-ci.org/commonmark/cmark) -[![Windows Build Status]](https://ci.appveyor.com/project/commonmark/cmark) +[![Windows Build Status]](https://ci.appveyor.com/project/jgm/cmark-0ub06) `cmark` is the C reference implementation of [CommonMark], a rationalized version of Markdown syntax with a [spec][the spec]. -- cgit 0.0.5-2-1-g0f52 From bec7ee2cbce1673eb2081ba18fb22b10df3cb598 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Wed, 5 Sep 2018 13:06:11 -0700 Subject: build: only attempt to install MSVC system libraries on Windows Newer versions of CMake attempt to query the system for information about the VS 2017 installation. Unfortunately, this query fails on non-Windows systems when cross-compiling: cmake_host_system_information does not recognize VS_15_DIR CMake will not find these system libraries on non-Windows hosts anyways, and we were silencing the warnings, so simply omit the installation when cross-compiling to Windows. --- src/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 995a9df7da..468b0f089d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -128,11 +128,13 @@ if (MSVC) APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO) endif(MSVC) -set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) +if(NOT MSVC OR CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) + set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) + include(InstallRequiredSystemLibraries) +endif() set(libdir lib${LIB_SUFFIX}) -include (InstallRequiredSystemLibraries) install(TARGETS ${PROGRAM} ${CMARK_INSTALL} EXPORT cmark RUNTIME DESTINATION bin -- cgit 0.0.5-2-1-g0f52 From c9817041afa133c5dc9869e5b309667861527c30 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 9 Sep 2018 22:04:25 -0700 Subject: Update spec.txt. --- test/spec.txt | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 6862838304..6661752bd8 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2880,6 +2880,18 @@ The link destination may not be omitted:

                            [foo]

                            ```````````````````````````````` +The title must be separated from the link destination by +whitespace: + +```````````````````````````````` example +[foo]: (baz) + +[foo] +. +

                            [foo]: <bar>(baz)

                            +

                            [foo]

                            +```````````````````````````````` + Both title and destination can contain backslash escapes and literal backslashes: @@ -5565,7 +5577,7 @@ foo ## Entity and numeric character references All valid HTML entity references and numeric character -references, except those occuring in code blocks and code spans, +references, except those occurring in code blocks and code spans, are recognized as such and treated as equivalent to the corresponding Unicode characters. Conforming CommonMark parsers need not store information about whether a particular character @@ -5983,15 +5995,17 @@ of one or more `_` characters that is not preceded or followed by a non-backslash-escaped `_` character. A [left-flanking delimiter run](@) is -a [delimiter run] that is (a) not followed by [Unicode whitespace], -and (b) not followed by a [punctuation character], or +a [delimiter run] that is (1) not followed by [Unicode whitespace], +and either (2a) not followed by a [punctuation character], or +(2b) followed by a [punctuation character] and preceded by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of the line count as Unicode whitespace. A [right-flanking delimiter run](@) is -a [delimiter run] that is (a) not preceded by [Unicode whitespace], -and (b) not preceded by a [punctuation character], or +a [delimiter run] that is (1) not preceded by [Unicode whitespace], +and either (2a) not preceded by a [punctuation character], or +(2b) preceded by a [punctuation character] and followed by [Unicode whitespace] or a [punctuation character]. For purposes of this definition, the beginning and the end of the line count as Unicode whitespace. -- cgit 0.0.5-2-1-g0f52 From d0642637d89201a77086c727e8052af3f3baeadc Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 9 Sep 2018 22:04:30 -0700 Subject: Check for whitespace before reference title. Closes #263. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index bbda78f3b3..171247e19b 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -1345,7 +1345,7 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input, // parse optional link_title beforetitle = subj.pos; spnl(&subj); - matchlen = scan_link_title(&subj.input, subj.pos); + matchlen = subj.pos == beforetitle ? 0 : scan_link_title(&subj.input, subj.pos); if (matchlen) { title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); subj.pos += matchlen; -- cgit 0.0.5-2-1-g0f52 From 63c675f9acead1171a2881fbbf12ddc6c3cc82d1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 9 Sep 2018 22:12:43 -0700 Subject: Update spec.txt. --- test/spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 6661752bd8..bd2affb3b5 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2888,7 +2888,7 @@ whitespace: [foo] . -

                            [foo]: <bar>(baz)

                            +

                            [foo]: (baz)

                            [foo]

                            ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 0707ada63bf5662c34b8f8fab60291840377217c Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 14 Sep 2018 12:48:10 +0200 Subject: XSLT stylesheet to convert cmark XML back to Commonmark Initial version of an XSLT stylesheet that converts the XML format produced by `cmark -t xml` back to Commonmark. Fixes #264 --- tools/xml2md.xsl | 308 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 tools/xml2md.xsl diff --git a/tools/xml2md.xsl b/tools/xml2md.xsl new file mode 100644 index 0000000000..2fc7ce1617 --- /dev/null +++ b/tools/xml2md.xsl @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + Unsupported element '' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *** + + + + + + + + + + + + + - + + + + . + ) + + + + + + + + + + + + + + + + + + + + + + + > + + + + + > + + + + + + + + ``` + + + + + + + ``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \. + + + + + + + \) + + + + + + + \ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + * + + + + ** + + ** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ! + [ + + ]( + + + + + + " + + + + + " + + ) + + + + + + + + + + + + + + + + + + + + + \ + + + + + + + + + + + + + -- cgit 0.0.5-2-1-g0f52 From 75870fbc450a9a973698ababa4eef35bbe63f747 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 14 Sep 2018 15:52:32 +0200 Subject: Minor fixes to xml2md.xsl - Remove outdated comment - Fix code block delimiter --- tools/xml2md.xsl | 69 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/tools/xml2md.xsl b/tools/xml2md.xsl index 2fc7ce1617..0122e5f712 100644 --- a/tools/xml2md.xsl +++ b/tools/xml2md.xsl @@ -10,8 +10,6 @@ Since the XML output is lossy, a lossless MD->XML->MD roundtrip isn't possible. The XML->MD->XML roundtrip should produce the original XML, though. -HTML blocks and inlines aren't supported. - Example usage with xsltproc: cmark -t xml doc.md | xsltproc -novalid xml2md.xsl - @@ -123,15 +121,23 @@ Example usage with xsltproc: - - ``` + + + + + + + + + + - + - ``` + @@ -228,28 +234,16 @@ Example usage with xsltproc: - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + @@ -280,7 +274,7 @@ Example usage with xsltproc: - + @@ -305,4 +299,21 @@ Example usage with xsltproc: + + + + + + + + + + + + + + + + + -- cgit 0.0.5-2-1-g0f52 From 74d46d8b243d59358a806357cfba706abfa72aa1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Oct 2018 15:40:26 -0700 Subject: Update spec.txt. --- test/spec.txt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index bd2affb3b5..d24a9239d0 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1584,8 +1584,8 @@ begins with a code fence, indented no more than three spaces. The line with the opening code fence may optionally contain some text following the code fence; this is trimmed of leading and trailing -whitespace and called the [info string](@). -The [info string] may not contain any backtick +whitespace and called the [info string](@). If the [info string] comes +after a backtick fence, it may not contain any backtick characters. (The reason for this restriction is that otherwise some inline code would be incorrectly interpreted as the beginning of a fenced code block.) @@ -1973,6 +1973,18 @@ foo

                            ```````````````````````````````` +[Info strings] for tilde code blocks can contain backticks and tildes: + +```````````````````````````````` example +~~~ aa ``` ~~~ +foo +~~~ +. +
                            foo
                            +
                            +```````````````````````````````` + + Closing code fences cannot have [info strings]: ```````````````````````````````` example -- cgit 0.0.5-2-1-g0f52 From 289a0aae38f501a46e7403ba02dcadd915ae3a67 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Oct 2018 15:40:37 -0700 Subject: Update scanners for new info string rules. --- src/scanners.c | 2 +- src/scanners.re | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 9661902d14..3ee0cfafc8 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -11498,7 +11498,7 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 224, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/src/scanners.re b/src/scanners.re index 4667804769..457efaf589 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -275,7 +275,7 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) const unsigned char *start = p; /*!re2c [`]{3,} / [^`\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } - [~]{3,} / [^~\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } + [~]{3,} / [^\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); } * { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 599a160cc5934f7275d30175043dca68df261a93 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Oct 2018 15:40:49 -0700 Subject: commonmark writer: use ~~~ fences if info string contains backtick. This is needed for round-trip tests. --- src/commonmark.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index d701bab67b..0db0f34ffd 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -171,6 +171,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, int i; bool entering = (ev_type == CMARK_EVENT_ENTER); const char *info, *code, *title; + char fencechar[2] = {'\0', '\0'}; size_t info_len, code_len; char listmarker[LISTMARKER_SIZE]; char *emph_delim; @@ -278,6 +279,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, } info = cmark_node_get_fence_info(node); info_len = strlen(info); + fencechar[0] = strchr(info, '`') == NULL ? '`' : '~'; code = cmark_node_get_literal(node); code_len = strlen(code); // use indented form if no info, and code doesn't @@ -297,7 +299,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, numticks = 3; } for (i = 0; i < numticks; i++) { - LIT("`"); + LIT(fencechar); } LIT(" "); OUT(info, false, LITERAL); @@ -305,7 +307,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, OUT(cmark_node_get_literal(node), false, LITERAL); CR(); for (i = 0; i < numticks; i++) { - LIT("`"); + LIT(fencechar); } } BLANKLINE(); -- cgit 0.0.5-2-1-g0f52 From 1c08c7490db79997e0390c0c3a6d48c700ebe2bf Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Mon, 8 Oct 2018 14:39:21 +0800 Subject: Fix a typo in houdini_href_e.c --- src/houdini_href_e.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/houdini_href_e.c b/src/houdini_href_e.c index 9152803df8..bfa970485e 100644 --- a/src/houdini_href_e.c +++ b/src/houdini_href_e.c @@ -15,7 +15,7 @@ * - The characters which are *not* safe to be in * an URL because they are RESERVED characters. * - * We asume (lazily) that any RESERVED char that + * We assume (lazily) that any RESERVED char that * appears inside an URL is actually meant to * have its native function (i.e. as an URL * component/separator) and hence needs no escaping. -- cgit 0.0.5-2-1-g0f52 From 3a440af3ba874289ef33ac6bbf2da90040c123d6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 31 Oct 2018 21:35:35 -0700 Subject: render.c: reset last_breakable after cr. Fixes jgm/pandoc#5033. --- src/render.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/render.c b/src/render.c index 20dca5ff84..dd65d3b0ea 100644 --- a/src/render.c +++ b/src/render.c @@ -45,6 +45,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, } } renderer->column = 0; + renderer->last_breakable = 0; renderer->begin_line = true; renderer->begin_content = true; renderer->need_cr -= 1; -- cgit 0.0.5-2-1-g0f52 From 462cab48390ba73123a2f882f43d6e0bc4d0053c Mon Sep 17 00:00:00 2001 From: Ashe Connor Date: Mon, 12 Nov 2018 15:44:11 +1100 Subject: add failing test --- api_test/main.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/api_test/main.c b/api_test/main.c index a843530f1b..286e9d5b90 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -952,6 +952,29 @@ static void source_pos(test_batch_runner *runner) { cmark_node_free(doc); } +static void source_pos_2(test_batch_runner *runner) { + static const char markdown[] = + "*first*\n" + "second\n"; + + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " \n" + " \n" + " first\n" + " \n" + " \n" + " second\n" + " \n" + "\n", + "sourcepos are as expected"); + free(xml); + cmark_node_free(doc); +} + static void ref_source_pos(test_batch_runner *runner) { static const char markdown[] = "Let's try [reference] links.\n" @@ -1002,6 +1025,7 @@ int main() { test_safe(runner); test_feed_across_line_ending(runner); source_pos(runner); + source_pos_2(runner); ref_source_pos(runner); test_print_summary(runner); -- cgit 0.0.5-2-1-g0f52 From cfba1fc382c54c625eb7ccdfd38ba1c5caf1ca97 Mon Sep 17 00:00:00 2001 From: Ashe Connor Date: Tue, 13 Nov 2018 11:06:47 +1100 Subject: expand tests --- api_test/main.c | 68 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index 286e9d5b90..1f1f77f213 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -952,27 +952,51 @@ static void source_pos(test_batch_runner *runner) { cmark_node_free(doc); } -static void source_pos_2(test_batch_runner *runner) { - static const char markdown[] = - "*first*\n" - "second\n"; - - cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); - char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); - STR_EQ(runner, xml, "\n" - "\n" - "\n" - " \n" - " \n" - " first\n" - " \n" - " \n" - " second\n" - " \n" - "\n", - "sourcepos are as expected"); - free(xml); - cmark_node_free(doc); +static void source_pos_inlines(test_batch_runner *runner) { + { + static const char markdown[] = + "*first*\n" + "second\n"; + + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " \n" + " \n" + " first\n" + " \n" + " \n" + " second\n" + " \n" + "\n", + "sourcepos are as expected"); + free(xml); + cmark_node_free(doc); + } + { + static const char markdown[] = + "*first\n" + "second*\n"; + + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS); + STR_EQ(runner, xml, "\n" + "\n" + "\n" + " \n" + " \n" + " first\n" + " \n" + " second\n" + " \n" + " \n" + "\n", + "sourcepos are as expected"); + free(xml); + cmark_node_free(doc); + } } static void ref_source_pos(test_batch_runner *runner) { @@ -1025,7 +1049,7 @@ int main() { test_safe(runner); test_feed_across_line_ending(runner); source_pos(runner); - source_pos_2(runner); + source_pos_inlines(runner); ref_source_pos(runner); test_print_summary(runner); -- cgit 0.0.5-2-1-g0f52 From d479c28a631731543e6276f807155388aa71acde Mon Sep 17 00:00:00 2001 From: Ashe Connor Date: Tue, 13 Nov 2018 11:06:59 +1100 Subject: copy line/col info straight from opener/closer We can't rely on anything in `subj` since it's been modified while parsing the subject and could represent line info from a future line. This is simple and works. --- src/inlines.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 171247e19b..d31173dc18 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -732,9 +732,10 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener, } cmark_node_insert_after(opener_inl, emph); - emph->start_line = emph->end_line = subj->line; - emph->start_column = opener_inl->start_column + subj->column_offset; - emph->end_column = closer_inl->end_column + subj->column_offset; + emph->start_line = opener_inl->start_line; + emph->end_line = closer_inl->end_line; + emph->start_column = opener_inl->start_column; + emph->end_column = closer_inl->end_column; // if opener has 0 characters, remove it and its associated inline if (opener_num_chars == 0) { -- cgit 0.0.5-2-1-g0f52 From b1c63da0caf616f9908c4fc0c4ae3028436ac137 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Wed, 14 Nov 2018 08:49:03 -0500 Subject: Update the Racket wrapper --- wrappers/wrapper.rkt | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/wrappers/wrapper.rkt b/wrappers/wrapper.rkt index d9b34e849f..1ecce17f32 100644 --- a/wrappers/wrapper.rkt +++ b/wrappers/wrapper.rkt @@ -13,19 +13,34 @@ (define-ffi-definer defcmark (ffi-lib "libcmark")) (define _cmark_node_type - (_enum '(none + (_enum '(;; Error status + none ;; Block document block-quote list item code-block - html paragraph header hrule + html-block custom-block + paragraph heading thematic-break + ;; ?? first-block = document + ;; ?? last-block = thematic-break ;; Inline - text softbreak linebreak code inline-html - emph strong link image))) + text softbreak linebreak code html-inline custom-inline + emph strong link image + ;; ?? first-inline = text + ;; ?? last-inline = image + ))) (define _cmark_list_type (_enum '(no_list bullet_list ordered_list))) (define _cmark_delim_type (_enum '(no_delim period_delim paren_delim))) (define _cmark_opts - (_bitmask '(sourcepos = 1 hardbreaks = 2 normalize = 4 smart = 8))) + (_bitmask + '(sourcepos = 2 ; include sourcepos attribute on block elements + hardbreaks = 4 ; render `softbreak` elements as hard line breaks + safe = 8 ; suppress raw HTML and unsafe links + nobreaks = 16 ; render `softbreak` elements as spaces + normalize = 256 ; legacy (no effect) + validate-utf8 = 512 ; validate UTF-8 in the input + smart = 1024 ; straight quotes to curly, ---/-- to em/en dashes + ))) (define-cpointer-type _node) @@ -56,8 +71,8 @@ (defcmark cmark_node_get_type_string (_fun _node -> _bytes)) (defcmark cmark_node_get_literal (_fun _node -> _string)) (defcmark cmark_node_set_literal (_fun _node _string -> _bool)) - (defcmark cmark_node_get_header_level (_fun _node -> _int)) - (defcmark cmark_node_set_header_level (_fun _node _int -> _bool)) + (defcmark cmark_node_get_heading_level (_fun _node -> _int)) + (defcmark cmark_node_set_heading_level (_fun _node _int -> _bool)) (defcmark cmark_node_get_list_type (_fun _node -> _cmark_list_type)) (defcmark cmark_node_set_list_type (_fun _node _cmark_list_type -> _bool)) (defcmark cmark_node_get_list_delim (_fun _node -> _cmark_delim_type)) @@ -84,6 +99,9 @@ (defcmark cmark_node_append_child (_fun _node _node -> _bool)) (defcmark cmark_consolidate_text_nodes (_fun _node -> _void)) + (defcmark cmark_version (_fun -> _int)) + (defcmark cmark_version_string (_fun -> _string)) + ) ;; Rackety interface @@ -108,7 +126,7 @@ (define-syntax-rule (define-getters+setters name [type field ...] ...) (define name (list (list 'type (make-getter+setter field) ...) ...))) (define-getters+setters getters+setters - [header header_level] [code-block fence_info] + [heading heading_level] [code-block fence_info] [link url title] [image url title] [list list_type list_delim list_start list_tight]) @@ -126,12 +144,12 @@ [else '()])) (define (assert-no what-not b) (when b (error 'cmark->sexpr "unexpected ~a in ~s" what-not type))) - (cond [(memq type '(document paragraph header block-quote list item + (cond [(memq type '(document paragraph heading block-quote list item emph strong link image)) (assert-no 'text text) (list type info children)] - [(memq type '(text code code-block html inline-html - softbreak linebreak hrule)) + [(memq type '(text code code-block html-block html-inline + softbreak linebreak thematic-break)) (assert-no 'children (pair? children)) (list type info text)] [else (error 'cmark->sexpr "unknown type: ~s" type)])) -- cgit 0.0.5-2-1-g0f52 From 65110289fa5c284883bea92ed72d2bfcdfb761ba Mon Sep 17 00:00:00 2001 From: Ashe Connor Date: Tue, 20 Nov 2018 11:20:26 +1100 Subject: Use pledge(2) on OpenBSD --- src/main.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main.c b/src/main.c index 8942520b1f..904df5e648 100644 --- a/src/main.c +++ b/src/main.c @@ -7,6 +7,10 @@ #include "cmark.h" #include "node.h" +#if defined(__OpenBSD__) +#include +#endif + #if defined(_WIN32) && !defined(__CYGWIN__) #include #include @@ -77,6 +81,13 @@ int main(int argc, char *argv[]) { writer_format writer = FORMAT_HTML; int options = CMARK_OPT_DEFAULT; +#if defined(__OpenBSD__) + if (pledge("stdio rpath", NULL) != 0) { + perror("pledge"); + return 1; + } +#endif + #if defined(_WIN32) && !defined(__CYGWIN__) _setmode(_fileno(stdin), _O_BINARY); _setmode(_fileno(stdout), _O_BINARY); @@ -176,6 +187,13 @@ int main(int argc, char *argv[]) { } } +#if defined(__OpenBSD__) + if (pledge("stdio", NULL) != 0) { + perror("pledge"); + return 1; + } +#endif + document = cmark_parser_finish(parser); cmark_parser_free(parser); -- cgit 0.0.5-2-1-g0f52 From 0d6062b80621cd52500b69c3fc0f1018e9aba7ad Mon Sep 17 00:00:00 2001 From: Ashe Connor Date: Wed, 21 Nov 2018 13:34:07 +1100 Subject: check for OpenBSD 5.9+ --- src/main.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index 904df5e648..1094fee839 100644 --- a/src/main.c +++ b/src/main.c @@ -8,7 +8,11 @@ #include "node.h" #if defined(__OpenBSD__) -#include +# include +# if OpenBSD >= 201605 +# define USE_PLEDGE +# include +# endif #endif #if defined(_WIN32) && !defined(__CYGWIN__) @@ -81,7 +85,7 @@ int main(int argc, char *argv[]) { writer_format writer = FORMAT_HTML; int options = CMARK_OPT_DEFAULT; -#if defined(__OpenBSD__) +#ifdef USE_PLEDGE if (pledge("stdio rpath", NULL) != 0) { perror("pledge"); return 1; @@ -187,7 +191,7 @@ int main(int argc, char *argv[]) { } } -#if defined(__OpenBSD__) +#ifdef USE_PLEDGE if (pledge("stdio", NULL) != 0) { perror("pledge"); return 1; -- cgit 0.0.5-2-1-g0f52 From a32124dd5dfcb6138e422c7d76b236fd2161c275 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 10:23:39 -0700 Subject: Update test/spec.txt --- test/spec.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index d24a9239d0..91551e5102 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3696,9 +3696,8 @@ in some browsers.) 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 1 ≤ *N* ≤ 4 spaces, then the result + blocks *Bs* starting with a [non-whitespace character], and *M* is a + list 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 @@ -4008,8 +4007,7 @@ A start number may not be negative: 2. **Item starting with indented code.** If a sequence of lines *Ls* constitute a sequence of blocks *Bs* starting with an indented code - block and not separated from each other by more than one blank line, - and *M* is a list marker of width *W* followed by + block, and *M* is a list marker of width *W* followed by one space, then the result of prepending *M* and the following space to the first line of *Ls*, and indenting subsequent lines of *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. @@ -7334,7 +7332,8 @@ A [link title](@) consists of either backslash-escaped, or - a sequence of zero or more characters between matching parentheses - (`(...)`), including a `)` character only if it is backslash-escaped. + (`(...)`), including a `(` or `)` character only if it is + backslash-escaped. Although [link titles] may span multiple lines, they may not contain a [blank line]. @@ -9483,7 +9482,8 @@ just above `stack_bottom` (or the first element if `stack_bottom` is NULL). We keep track of the `openers_bottom` for each delimiter -type (`*`, `_`). Initialize this to `stack_bottom`. +type (`*`, `_`) and each length of the closing delimiter run +(modulo 3). Initialize this to `stack_bottom`. Then we repeat the following until we run out of potential closers: -- cgit 0.0.5-2-1-g0f52 From 9f7d0a674b0a9c741daf359516d80dbf13ec960a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 10:23:47 -0700 Subject: Disallow unescaped ( in parenthesized link title. In accord with spec change. --- src/scanners.c | 1881 +++++++++++++++++++++++++++++++++++++++---------------- src/scanners.re | 2 +- 2 files changed, 1340 insertions(+), 543 deletions(-) diff --git a/src/scanners.c b/src/scanners.c index 3ee0cfafc8..930c3f7361 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 1.0.2 */ +/* Generated by re2c 0.16 */ #include #include "chunk.h" #include "scanners.h" @@ -738,8 +738,8 @@ bufsize_t _scan_scheme(const unsigned char *p) { goto yy6; } } - yych = *++p; - if (yych == ':') + ++p; + if ((yych = *p) == ':') goto yy8; goto yy6; } @@ -864,7 +864,8 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { } } yy47: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy47; } @@ -928,49 +929,56 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { ++p; { return (bufsize_t)(p - start); } yy52: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy45; if (yych <= 0xBF) goto yy47; goto yy45; yy53: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy45; if (yych <= 0xBF) goto yy52; goto yy45; yy54: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy45; if (yych <= 0xBF) goto yy52; goto yy45; yy55: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy45; if (yych <= 0x9F) goto yy52; goto yy45; yy56: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy45; if (yych <= 0xBF) goto yy54; goto yy45; yy57: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy45; if (yych <= 0xBF) goto yy54; goto yy45; yy58: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy45; if (yych <= 0x8F) @@ -1571,8 +1579,8 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) { goto yy45; } } - yych = *++p; - if (yych == ':') + ++p; + if ((yych = *p) == ':') goto yy47; goto yy45; } @@ -1674,7 +1682,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy92: - yych = *++p; + ++p; + yych = *p; yy93: if (yybm[0 + yych] & 128) { goto yy92; @@ -1687,7 +1696,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { p = marker; goto yy90; yy95: - yych = *++p; + ++p; + yych = *p; if (yych <= '@') { if (yych <= '/') goto yy94; @@ -1702,7 +1712,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy94; } yy96: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1731,7 +1742,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy94; } } - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy101; @@ -1752,7 +1764,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy98: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1786,7 +1799,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { ++p; { return (bufsize_t)(p - start); } yy101: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy103; @@ -1807,7 +1821,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy102: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1837,7 +1852,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy103: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy105; @@ -1858,7 +1874,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy104: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1888,7 +1905,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy105: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy107; @@ -1909,7 +1927,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy106: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1939,7 +1958,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy107: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy109; @@ -1960,7 +1980,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy108: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -1990,7 +2011,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy109: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy111; @@ -2011,7 +2033,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy110: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2041,7 +2064,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy111: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy113; @@ -2062,7 +2086,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy112: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2092,7 +2117,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy113: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy115; @@ -2113,7 +2139,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy114: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2143,7 +2170,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy115: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy117; @@ -2164,7 +2192,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy116: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2194,7 +2223,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy117: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy119; @@ -2215,7 +2245,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy118: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2245,7 +2276,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy119: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy121; @@ -2266,7 +2298,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy120: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2296,7 +2329,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy121: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy123; @@ -2317,7 +2351,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy122: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2347,7 +2382,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy123: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy125; @@ -2368,7 +2404,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy124: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2398,7 +2435,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy125: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy127; @@ -2419,7 +2457,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy126: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2449,7 +2488,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy127: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy129; @@ -2470,7 +2510,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy128: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2500,7 +2541,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy129: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy131; @@ -2521,7 +2563,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy130: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2551,7 +2594,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy131: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy133; @@ -2572,7 +2616,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy132: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2602,7 +2647,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy133: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy135; @@ -2623,7 +2669,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy134: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2653,7 +2700,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy135: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy137; @@ -2674,7 +2722,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy136: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2704,7 +2753,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy137: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy139; @@ -2725,7 +2775,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy138: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2755,7 +2806,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy139: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy141; @@ -2776,7 +2828,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy140: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2806,7 +2859,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy141: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy143; @@ -2827,7 +2881,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy142: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2857,7 +2912,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy143: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy145; @@ -2878,7 +2934,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy144: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2908,7 +2965,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy145: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy147; @@ -2929,7 +2987,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy146: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -2959,7 +3018,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy147: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy149; @@ -2980,7 +3040,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy148: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3010,7 +3071,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy149: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy151; @@ -3031,7 +3093,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy150: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3061,7 +3124,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy151: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy153; @@ -3082,7 +3146,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy152: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3112,7 +3177,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy153: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy155; @@ -3133,7 +3199,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy154: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3163,7 +3230,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy155: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy157; @@ -3184,7 +3252,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy156: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3214,7 +3283,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy157: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy159; @@ -3235,7 +3305,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy158: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3265,7 +3336,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy159: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy161; @@ -3286,7 +3358,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy160: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3316,7 +3389,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy161: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy163; @@ -3337,7 +3411,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy162: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3367,7 +3442,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy163: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy165; @@ -3388,7 +3464,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy164: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3418,7 +3495,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy165: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy167; @@ -3439,7 +3517,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy166: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3469,7 +3548,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy167: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy169; @@ -3490,7 +3570,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy168: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3520,7 +3601,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy169: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy171; @@ -3541,7 +3623,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy170: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3571,7 +3654,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy171: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy173; @@ -3592,7 +3676,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy172: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3622,7 +3707,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy173: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy175; @@ -3643,7 +3729,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy174: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3673,7 +3760,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy175: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy177; @@ -3694,7 +3782,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy176: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3724,7 +3813,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy177: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy179; @@ -3745,7 +3835,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy178: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3775,7 +3866,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy179: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy181; @@ -3796,7 +3888,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy180: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3826,7 +3919,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy181: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy183; @@ -3847,7 +3941,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy182: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3877,7 +3972,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy183: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy185; @@ -3898,7 +3994,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy184: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3928,7 +4025,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy185: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy187; @@ -3949,7 +4047,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy186: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -3979,7 +4078,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy187: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy189; @@ -4000,7 +4100,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy188: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4030,7 +4131,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy189: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy191; @@ -4051,7 +4153,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy190: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4081,7 +4184,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy191: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy193; @@ -4102,7 +4206,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy192: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4132,7 +4237,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy193: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy195; @@ -4153,7 +4259,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy194: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4183,7 +4290,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy195: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy197; @@ -4204,7 +4312,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy196: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4234,7 +4343,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy197: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy199; @@ -4255,7 +4365,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy198: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4285,7 +4396,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy199: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy201; @@ -4306,7 +4418,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy200: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4336,7 +4449,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy201: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy203; @@ -4357,7 +4471,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy202: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4387,7 +4502,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy203: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy205; @@ -4408,7 +4524,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy204: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4438,7 +4555,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy205: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy207; @@ -4459,7 +4577,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy206: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4489,7 +4608,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy207: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy209; @@ -4510,7 +4630,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy208: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4540,7 +4661,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy209: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy211; @@ -4561,7 +4683,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy210: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4591,7 +4714,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy211: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy213; @@ -4612,7 +4736,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy212: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4642,7 +4767,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy213: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy215; @@ -4663,7 +4789,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy214: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4693,7 +4820,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy215: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy217; @@ -4714,7 +4842,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy216: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4744,7 +4873,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy217: - yych = *++p; + ++p; + yych = *p; if (yych <= '9') { if (yych == '-') goto yy219; @@ -4765,7 +4895,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy218: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= ',') @@ -4795,7 +4926,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy219: - yych = *++p; + ++p; + yych = *p; if (yych <= '@') { if (yych <= '/') goto yy94; @@ -4812,7 +4944,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { goto yy94; } yy220: - yych = *++p; + ++p; + yych = *p; if (yych <= '=') { if (yych <= '.') { if (yych <= '-') @@ -4838,7 +4971,8 @@ bufsize_t _scan_autolink_email(const unsigned char *p) { } } yy221: - yych = *++p; + ++p; + yych = *p; if (yych == '.') goto yy95; if (yych == '>') @@ -4856,37 +4990,519 @@ bufsize_t _scan_html_tag(const unsigned char *p) { unsigned char yych; static const unsigned char yybm[] = { /* table 1 .. 8: 0 */ - 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250, - 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 235, + 235, + 235, + 235, + 235, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 250, + 235, + 250, + 202, + 250, + 250, + 250, + 250, + 170, + 250, + 250, + 250, + 250, + 250, + 246, + 254, + 250, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 250, + 234, + 234, + 232, + 250, + 250, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 250, + 250, + 122, + 250, + 254, + 234, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 254, + 250, + 250, + 250, + 250, + 250, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, /* table 9 .. 11: 256 */ - 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 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, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 192, + 128, + 128, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 128, + 128, + 128, + 128, + 128, + 0, + 128, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 224, + 128, + 128, + 128, + 128, + 128, + 128, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 192, + 128, + 128, + 128, + 128, + 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, }; yych = *p; if (yych <= '>') { @@ -4949,34 +5565,33 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy225; yy229: yych = *(marker = ++p); - if (yych <= '.') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy225; - if (yych <= '\r') - goto yy250; + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy249; goto yy225; } else { - if (yych <= ' ') - goto yy250; - if (yych == '-') - goto yy250; + if (yych <= '/') + goto yy251; + if (yych <= '9') + goto yy249; goto yy225; } } else { - if (yych <= '@') { - if (yych <= '9') - goto yy250; - if (yych == '>') - goto yy250; - goto yy225; + if (yych <= 'Z') { + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy225; + goto yy249; } else { - if (yych <= 'Z') - goto yy250; if (yych <= '`') goto yy225; if (yych <= 'z') - goto yy250; + goto yy249; goto yy225; } } @@ -4988,7 +5603,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { p = marker; goto yy225; yy232: - yych = *++p; + ++p; + yych = *p; if (yybm[256 + yych] & 32) { goto yy232; } @@ -5007,7 +5623,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy257; goto yy231; yy235: - yych = *++p; + ++p; + yych = *p; if (yybm[256 + yych] & 64) { goto yy235; } @@ -5025,7 +5642,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } yy237: - yych = *++p; + ++p; + yych = *p; yy238: if (yybm[256 + yych] & 128) { goto yy237; @@ -5058,7 +5676,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } } - yych = *++p; + ++p; + yych = *p; if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) @@ -5090,56 +5709,64 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy240: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy237; goto yy231; yy241: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy240; goto yy231; yy242: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy240; goto yy231; yy243: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy240; goto yy231; yy244: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy242; goto yy231; yy245: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy242; goto yy231; yy246: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy242; goto yy231; yy247: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 1) { goto yy247; } @@ -5171,8 +5798,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy249: - yych = *++p; - yy250: + ++p; + yych = *p; if (yybm[0 + yych] & 1) { goto yy247; } @@ -5218,7 +5845,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; goto yy263; yy255: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 2) { goto yy255; } @@ -5259,7 +5887,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy279; goto yy231; yy258: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych <= 0x08) goto yy231; @@ -5274,7 +5903,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } yy260: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 4) { goto yy260; } @@ -5302,7 +5932,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy262: - yych = *++p; + ++p; + yych = *p; yy263: if (yybm[0 + yych] & 8) { goto yy262; @@ -5344,98 +5975,112 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; goto yy263; yy265: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy262; goto yy231; yy266: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy265; goto yy231; yy267: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy265; goto yy231; yy268: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy265; goto yy231; yy269: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy267; goto yy231; yy270: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy267; goto yy231; yy271: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy267; goto yy231; yy272: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy255; goto yy231; yy273: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy272; goto yy231; yy274: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy272; goto yy231; yy275: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy272; goto yy231; yy276: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy274; goto yy231; yy277: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy274; goto yy231; yy278: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) @@ -5449,7 +6094,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy285; goto yy231; yy280: - yych = *++p; + ++p; + yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) @@ -5494,7 +6140,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy282: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 16) { goto yy286; } @@ -5530,7 +6177,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy284: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 8) { goto yy262; } @@ -5571,7 +6219,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy299; goto yy231; yy286: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 16) { goto yy286; } @@ -5607,7 +6256,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy288: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 32) { goto yy288; } @@ -5641,7 +6291,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy290: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy290; } @@ -5675,49 +6326,56 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy292: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy286; goto yy231; yy293: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy292; goto yy231; yy294: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy292; goto yy231; yy295: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy292; goto yy231; yy296: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy294; goto yy231; yy297: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy294; goto yy231; yy298: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) @@ -5731,7 +6389,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy315; goto yy231; yy300: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 1) { goto yy247; } @@ -5741,98 +6400,112 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy252; goto yy231; yy301: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy288; goto yy231; yy302: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy301; goto yy231; yy303: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy301; goto yy231; yy304: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy301; goto yy231; yy305: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy303; goto yy231; yy306: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy303; goto yy231; yy307: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy303; goto yy231; yy308: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy290; goto yy231; yy309: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy308; goto yy231; yy310: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy308; goto yy231; yy311: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy308; goto yy231; yy312: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy310; goto yy231; yy313: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy310; goto yy231; yy314: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) @@ -5843,7 +6516,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { if (yych != '[') goto yy231; yy316: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy316; } @@ -5875,7 +6549,8 @@ bufsize_t _scan_html_tag(const unsigned char *p) { goto yy231; } } - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy316; } @@ -5909,56 +6584,64 @@ bufsize_t _scan_html_tag(const unsigned char *p) { } } yy319: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy316; goto yy231; yy320: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy231; if (yych <= 0xBF) goto yy319; goto yy231; yy321: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy319; goto yy231; yy322: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x9F) goto yy319; goto yy231; yy323: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy231; if (yych <= 0xBF) goto yy321; goto yy231; yy324: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0xBF) goto yy321; goto yy231; yy325: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy231; if (yych <= 0x8F) goto yy321; goto yy231; yy326: - yych = *++p; + ++p; + yych = *p; if (yych <= 0xE0) { if (yych <= '>') { if (yych <= 0x00) @@ -7678,8 +8361,8 @@ bufsize_t _scan_html_block_start(const unsigned char *p) { ++p; { return 5; } yy490: - yych = *++p; - if (yych == 'T') + ++p; + if ((yych = *p) == 'T') goto yy438; if (yych == 't') goto yy438; @@ -7753,7 +8436,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { goto yy513; } yy498: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 2) { goto yy502; } @@ -7785,7 +8469,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy500: - yych = *++p; + ++p; + yych = *p; if (yych <= '/') { if (yych <= 0x1F) { if (yych <= 0x08) @@ -7818,7 +8503,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy502: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 2) { goto yy502; } @@ -7853,7 +8539,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { if (yych != '>') goto yy497; yy505: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 4) { goto yy505; } @@ -7867,7 +8554,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { goto yy514; goto yy497; yy507: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych <= 0x08) goto yy497; @@ -7882,7 +8570,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { goto yy497; } yy509: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 8) { goto yy509; } @@ -7911,7 +8600,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } yy511: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 4) { goto yy505; } @@ -7925,10 +8615,11 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { goto yy514; yy513 : { return 7; } yy514: - ++p; + yych = *++p; goto yy513; yy515: - yych = *++p; + ++p; + yych = *p; if (yych <= '<') { if (yych <= ' ') { if (yych <= 0x08) @@ -7973,7 +8664,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy517: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 32) { goto yy519; } @@ -8009,7 +8701,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy519: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 32) { goto yy519; } @@ -8045,7 +8738,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy521: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy521; } @@ -8079,7 +8773,8 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy523: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy523; } @@ -8113,56 +8808,64 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { } } yy525: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy519; goto yy497; yy526: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy497; if (yych <= 0xBF) goto yy525; goto yy497; yy527: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy525; goto yy497; yy528: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0x9F) goto yy525; goto yy497; yy529: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy497; if (yych <= 0xBF) goto yy527; goto yy497; yy530: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy527; goto yy497; yy531: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0x8F) goto yy527; goto yy497; yy532: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 2) { goto yy502; } @@ -8172,98 +8875,112 @@ bufsize_t _scan_html_block_start_7(const unsigned char *p) { goto yy505; goto yy497; yy533: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy521; goto yy497; yy534: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy497; if (yych <= 0xBF) goto yy533; goto yy497; yy535: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy533; goto yy497; yy536: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0x9F) goto yy533; goto yy497; yy537: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy497; if (yych <= 0xBF) goto yy535; goto yy497; yy538: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy535; goto yy497; yy539: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0x8F) goto yy535; goto yy497; yy540: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy523; goto yy497; yy541: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy497; if (yych <= 0xBF) goto yy540; goto yy497; yy542: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy540; goto yy497; yy543: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0x9F) goto yy540; goto yy497; yy544: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy497; if (yych <= 0xBF) goto yy542; goto yy497; yy545: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0xBF) goto yy542; goto yy497; yy546: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy497; if (yych <= 0x8F) @@ -8428,7 +9145,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { goto yy567; goto yy550; yy560: - yych = *++p; + ++p; + yych = *p; yy561: if (yybm[0 + yych] & 64) { goto yy560; @@ -8468,7 +9186,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { goto yy582; } yy563: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8505,56 +9224,64 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy565: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy562; if (yych <= 0xBF) goto yy560; goto yy562; yy566: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy562; if (yych <= 0xBF) goto yy565; goto yy562; yy567: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy562; if (yych <= 0xBF) goto yy565; goto yy562; yy568: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy562; if (yych <= 0x9F) goto yy565; goto yy562; yy569: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy562; if (yych <= 0xBF) goto yy567; goto yy562; yy570: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy562; if (yych <= 0xBF) goto yy567; goto yy562; yy571: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy562; if (yych <= 0x8F) goto yy567; goto yy562; yy572: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8613,7 +9340,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy573: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8661,7 +9389,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy574: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8721,7 +9450,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy575: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8769,7 +9499,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy576: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8817,7 +9548,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy577: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8865,7 +9597,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy578: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8903,7 +9636,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy579: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -8951,7 +9685,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy580: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -9000,7 +9735,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } yy581: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy560; } @@ -9033,7 +9769,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } yy582 : { return (bufsize_t)(p - start); } yy583: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -9080,7 +9817,8 @@ bufsize_t _scan_html_block_end_1(const unsigned char *p) { } } yy584: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy563; } @@ -9285,7 +10023,8 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { goto yy604; goto yy588; yy598: - yych = *++p; + ++p; + yych = *p; yy599: if (yybm[0 + yych] & 64) { goto yy598; @@ -9325,7 +10064,8 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { goto yy612; } yy601: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy598; } @@ -9359,56 +10099,64 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } } yy602: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy600; if (yych <= 0xBF) goto yy598; goto yy600; yy603: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy600; if (yych <= 0xBF) goto yy602; goto yy600; yy604: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy600; if (yych <= 0xBF) goto yy602; goto yy600; yy605: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy600; if (yych <= 0x9F) goto yy602; goto yy600; yy606: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy600; if (yych <= 0xBF) goto yy604; goto yy600; yy607: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy600; if (yych <= 0xBF) goto yy604; goto yy600; yy608: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy600; if (yych <= 0x8F) goto yy604; goto yy600; yy609: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy609; } @@ -9447,7 +10195,8 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p) { } yy611: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy598; } @@ -9638,7 +10387,8 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { goto yy633; goto yy616; yy626: - yych = *++p; + ++p; + yych = *p; yy627: if (yybm[0 + yych] & 64) { goto yy626; @@ -9678,7 +10428,8 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { goto yy639; } yy629: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy629; } @@ -9715,49 +10466,56 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { } } yy631: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy628; if (yych <= 0xBF) goto yy626; goto yy628; yy632: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy628; if (yych <= 0xBF) goto yy631; goto yy628; yy633: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy628; if (yych <= 0xBF) goto yy631; goto yy628; yy634: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy628; if (yych <= 0x9F) goto yy631; goto yy628; yy635: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy628; if (yych <= 0xBF) goto yy633; goto yy628; yy636: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy628; if (yych <= 0xBF) goto yy633; goto yy628; yy637: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy628; if (yych <= 0x8F) @@ -9765,7 +10523,8 @@ bufsize_t _scan_html_block_end_3(const unsigned char *p) { goto yy628; yy638: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy626; } @@ -9885,7 +10644,8 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { } yy645: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy655; } @@ -9974,7 +10734,8 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { goto yy660; goto yy643; yy655: - yych = *++p; + ++p; + yych = *p; yy656: if (yybm[0 + yych] & 128) { goto yy655; @@ -10014,49 +10775,56 @@ bufsize_t _scan_html_block_end_4(const unsigned char *p) { goto yy647; } yy658: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy657; if (yych <= 0xBF) goto yy655; goto yy657; yy659: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy657; if (yych <= 0xBF) goto yy658; goto yy657; yy660: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy657; if (yych <= 0xBF) goto yy658; goto yy657; yy661: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy657; if (yych <= 0x9F) goto yy658; goto yy657; yy662: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy657; if (yych <= 0xBF) goto yy660; goto yy657; yy663: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy657; if (yych <= 0xBF) goto yy660; goto yy657; yy664: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy657; if (yych <= 0x8F) @@ -10220,7 +10988,8 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { goto yy684; goto yy668; yy678: - yych = *++p; + ++p; + yych = *p; yy679: if (yybm[0 + yych] & 64) { goto yy678; @@ -10260,7 +11029,8 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { goto yy692; } yy681: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy678; } @@ -10294,56 +11064,64 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } } yy682: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy680; if (yych <= 0xBF) goto yy678; goto yy680; yy683: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy680; if (yych <= 0xBF) goto yy682; goto yy680; yy684: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy680; if (yych <= 0xBF) goto yy682; goto yy680; yy685: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy680; if (yych <= 0x9F) goto yy682; goto yy680; yy686: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy680; if (yych <= 0xBF) goto yy684; goto yy680; yy687: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy680; if (yych <= 0xBF) goto yy684; goto yy680; yy688: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy680; if (yych <= 0x8F) goto yy684; goto yy680; yy689: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy689; } @@ -10382,7 +11160,8 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) { } yy691: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy678; } @@ -10430,7 +11209,7 @@ bufsize_t _scan_link_title(const unsigned char *p) { static const unsigned char yybm[] = { 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80, + 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 80, 80, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, @@ -10487,17 +11266,24 @@ bufsize_t _scan_link_title(const unsigned char *p) { yy699: yyaccept = 0; yych = *(marker = ++p); - if (yych <= 0x00) + if (yych <= '(') { + if (yych <= 0x00) + goto yy696; + if (yych <= '\'') + goto yy728; goto yy696; - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) + } else { + if (yych <= 0x7F) + goto yy728; + if (yych <= 0xC1) + goto yy696; + if (yych <= 0xF4) + goto yy728; goto yy696; - if (yych <= 0xF4) - goto yy728; - goto yy696; + } yy700: - yych = *++p; + ++p; + yych = *p; yy701: if (yybm[0 + yych] & 16) { goto yy700; @@ -10549,7 +11335,8 @@ bufsize_t _scan_link_title(const unsigned char *p) { ++p; yy704 : { return (bufsize_t)(p - start); } yy705: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 16) { goto yy700; } @@ -10582,56 +11369,64 @@ bufsize_t _scan_link_title(const unsigned char *p) { } } yy707: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy700; goto yy702; yy708: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy702; if (yych <= 0xBF) goto yy707; goto yy702; yy709: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy707; goto yy702; yy710: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0x9F) goto yy707; goto yy702; yy711: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy702; if (yych <= 0xBF) goto yy709; goto yy702; yy712: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy709; goto yy702; yy713: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0x8F) goto yy709; goto yy702; yy714: - yych = *++p; + ++p; + yych = *p; yy715: if (yybm[0 + yych] & 64) { goto yy714; @@ -10668,7 +11463,8 @@ bufsize_t _scan_link_title(const unsigned char *p) { ++p; yy717 : { return (bufsize_t)(p - start); } yy718: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy714; } @@ -10701,63 +11497,71 @@ bufsize_t _scan_link_title(const unsigned char *p) { } } yy720: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy714; goto yy702; yy721: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy702; if (yych <= 0xBF) goto yy720; goto yy702; yy722: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy720; goto yy702; yy723: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0x9F) goto yy720; goto yy702; yy724: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy702; if (yych <= 0xBF) goto yy722; goto yy702; yy725: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy722; goto yy702; yy726: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0x8F) goto yy722; goto yy702; yy727: - yych = *++p; + ++p; + yych = *p; yy728: if (yybm[0 + yych] & 128) { goto yy727; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) + if (yych <= '(') goto yy702; if (yych >= '*') goto yy731; @@ -10787,25 +11591,27 @@ bufsize_t _scan_link_title(const unsigned char *p) { ++p; yy730 : { return (bufsize_t)(p - start); } yy731: - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy727; - } - if (yych <= 0xE0) { - if (yych <= '\\') { + ++p; + yych = *p; + if (yych <= 0xDF) { + if (yych <= '[') { if (yych <= 0x00) goto yy702; - if (yych <= ')') + if (yych == ')') goto yy742; - goto yy731; + goto yy727; } else { + if (yych <= '\\') + goto yy731; + if (yych <= 0x7F) + goto yy727; if (yych <= 0xC1) goto yy702; - if (yych >= 0xE0) - goto yy734; } } else { if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy734; if (yych == 0xED) goto yy736; goto yy735; @@ -10820,49 +11626,56 @@ bufsize_t _scan_link_title(const unsigned char *p) { } } yy733: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy727; goto yy702; yy734: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy702; if (yych <= 0xBF) goto yy733; goto yy702; yy735: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy733; goto yy702; yy736: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0x9F) goto yy733; goto yy702; yy737: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy702; if (yych <= 0xBF) goto yy735; goto yy702; yy738: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0xBF) goto yy735; goto yy702; yy739: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy702; if (yych <= 0x8F) @@ -10870,7 +11683,8 @@ bufsize_t _scan_link_title(const unsigned char *p) { goto yy702; yy740: yyaccept = 1; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 16) { goto yy700; } @@ -10905,7 +11719,8 @@ bufsize_t _scan_link_title(const unsigned char *p) { } yy741: yyaccept = 2; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy714; } @@ -10940,13 +11755,14 @@ bufsize_t _scan_link_title(const unsigned char *p) { } yy742: yyaccept = 3; - yych = *(marker = ++p); + marker = ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy727; } if (yych <= 0xE0) { if (yych <= '\\') { - if (yych <= 0x00) + if (yych <= '(') goto yy730; if (yych <= ')') goto yy729; @@ -11004,7 +11820,8 @@ bufsize_t _scan_spacechars(const unsigned char *p) { ++p; { return 0; } yy747: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy747; } @@ -11057,13 +11874,14 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { goto yy753; } yy755: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy755; } yy757 : { return (bufsize_t)(p - start); } yy758: - ++p; + yych = *++p; goto yy757; yy759: yych = *++p; @@ -11133,8 +11951,8 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { if (yych != '#') goto yy760; } - yych = *++p; - if (yybm[0 + yych] & 128) { + ++p; + if (yybm[0 + (yych = *p)] & 128) { goto yy755; } if (yych <= 0x08) @@ -11212,7 +12030,8 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { goto yy768; } yy771: - yych = *++p; + ++p; + yych = *p; yy772: if (yybm[0 + yych] & 32) { goto yy771; @@ -11230,7 +12049,8 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { ++p; { return 2; } yy776: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 32) { goto yy771; } @@ -11248,7 +12068,8 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { goto yy773; } yy778: - yych = *++p; + ++p; + yych = *p; yy779: if (yych <= '\f') { if (yych <= 0x08) @@ -11268,7 +12089,8 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { ++p; { return 1; } yy782: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy782; } @@ -11361,7 +12183,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy787; } yy791: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 16) { goto yy791; } @@ -11371,7 +12194,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { p = marker; goto yy787; yy794: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych == '\t') goto yy794; @@ -11384,7 +12208,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy793; } yy796: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych == '\t') goto yy796; @@ -11396,7 +12221,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy793; } yy798: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych == '\t') goto yy798; @@ -11409,7 +12235,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy793; } yy800: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych == '\t') goto yy800; @@ -11421,7 +12248,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy793; } yy802: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x1F) { if (yych == '\t') goto yy802; @@ -11434,7 +12262,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy793; } yy804: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 32) { goto yy804; } @@ -11446,7 +12275,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy810; goto yy793; yy806: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy806; } @@ -11458,7 +12288,8 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy812; goto yy793; yy808: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy808; } @@ -11541,64 +12372,45 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { } goto yy823; yy825: - yych = *++p; - if (yybm[0 + yych] & 16) { - goto yy825; + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 64) { + goto yy829; } - if (yych <= 0xDF) { - if (yych <= '\f') { + if (yych <= 0xE0) { + if (yych <= '`') { if (yych <= 0x00) goto yy823; - if (yych == '\n') { - marker = p; + if (yych <= '\r') goto yy831; - } - marker = p; - goto yy829; + goto yy825; } else { - if (yych <= '\r') { - marker = p; - goto yy831; - } - if (yych <= 0x7F) { - marker = p; - goto yy829; - } if (yych <= 0xC1) goto yy823; - marker = p; - goto yy833; + if (yych <= 0xDF) + goto yy833; + goto yy834; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) { - marker = p; - goto yy834; - } - if (yych == 0xED) { - marker = p; + if (yych == 0xED) goto yy836; - } - marker = p; goto yy835; } else { - if (yych <= 0xF0) { - marker = p; + if (yych <= 0xF0) goto yy837; - } - if (yych <= 0xF3) { - marker = p; + if (yych <= 0xF3) goto yy838; - } - if (yych <= 0xF4) { - marker = p; + if (yych <= 0xF4) goto yy839; - } goto yy823; } } yy827: - yych = *++p; + ++p; + yych = *p; + marker = p; if (yybm[0 + yych] & 32) { goto yy827; } @@ -11606,56 +12418,38 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= '\f') { if (yych <= 0x00) goto yy823; - if (yych == '\n') { - marker = p; + if (yych == '\n') goto yy842; - } - marker = p; goto yy840; } else { - if (yych <= '\r') { - marker = p; + if (yych <= '\r') goto yy842; - } - if (yych <= 0x7F) { - marker = p; + if (yych <= 0x7F) goto yy840; - } if (yych <= 0xC1) goto yy823; - marker = p; goto yy844; } } else { if (yych <= 0xEF) { - if (yych <= 0xE0) { - marker = p; + if (yych <= 0xE0) goto yy845; - } - if (yych == 0xED) { - marker = p; + if (yych == 0xED) goto yy847; - } - marker = p; goto yy846; } else { - if (yych <= 0xF0) { - marker = p; + if (yych <= 0xF0) goto yy848; - } - if (yych <= 0xF3) { - marker = p; + if (yych <= 0xF3) goto yy849; - } - if (yych <= 0xF4) { - marker = p; + if (yych <= 0xF4) goto yy850; - } goto yy823; } } yy829: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 64) { goto yy829; } @@ -11692,56 +12486,64 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { p = marker; { return (bufsize_t)(p - start); } yy833: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0xBF) goto yy829; goto yy823; yy834: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy823; if (yych <= 0xBF) goto yy833; goto yy823; yy835: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0xBF) goto yy833; goto yy823; yy836: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0x9F) goto yy833; goto yy823; yy837: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy823; if (yych <= 0xBF) goto yy835; goto yy823; yy838: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0xBF) goto yy835; goto yy823; yy839: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0x8F) goto yy835; goto yy823; yy840: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy840; } @@ -11778,49 +12580,56 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { p = marker; { return (bufsize_t)(p - start); } yy844: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0xBF) goto yy840; goto yy823; yy845: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x9F) goto yy823; if (yych <= 0xBF) goto yy844; goto yy823; yy846: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0xBF) goto yy844; goto yy823; yy847: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0x9F) goto yy844; goto yy823; yy848: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x8F) goto yy823; if (yych <= 0xBF) goto yy846; goto yy823; yy849: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0xBF) goto yy846; goto yy823; yy850: - yych = *++p; + ++p; + yych = *p; if (yych <= 0x7F) goto yy823; if (yych <= 0x8F) @@ -11882,63 +12691,50 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { } goto yy858; yy860: - yych = *++p; - if (yybm[0 + yych] & 32) { - goto yy860; + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy864; } if (yych <= '\f') { if (yych <= 0x08) goto yy858; - if (yych <= '\t') { - marker = p; - goto yy864; - } - if (yych <= '\n') { - marker = p; + if (yych <= '\n') goto yy866; - } goto yy858; } else { - if (yych <= '\r') { - marker = p; + if (yych <= '\r') goto yy866; - } - if (yych == ' ') { - marker = p; - goto yy864; - } + if (yych == '`') + goto yy860; goto yy858; } yy862: - yych = *++p; + ++p; + yych = *p; + marker = p; if (yybm[0 + yych] & 64) { goto yy862; } if (yych <= '\f') { if (yych <= 0x08) goto yy858; - if (yych <= '\t') { - marker = p; + if (yych <= '\t') goto yy868; - } - if (yych <= '\n') { - marker = p; + if (yych <= '\n') goto yy870; - } goto yy858; } else { - if (yych <= '\r') { - marker = p; + if (yych <= '\r') goto yy870; - } - if (yych == ' ') { - marker = p; + if (yych == ' ') goto yy868; - } goto yy858; } yy864: - yych = *++p; + ++p; + yych = *p; if (yybm[0 + yych] & 128) { goto yy864; } @@ -11953,7 +12749,8 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { p = marker; { return (bufsize_t)(p - start); } yy868: - yych = *++p; + ++p; + yych = *p; if (yych <= '\f') { if (yych <= 0x08) goto yy858; @@ -12849,8 +13646,8 @@ bufsize_t _scan_entity(const unsigned char *p) { } } yy924: - yych = *++p; - if (yych <= ';') { + ++p; + if ((yych = *p) <= ';') { if (yych <= '/') goto yy878; if (yych <= '9') @@ -13034,7 +13831,7 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { goto yy949; yy946 : { return (bufsize_t)(p - start); } yy947: - ++p; + yych = *++p; goto yy946; yy948: yych = *++p; @@ -13180,8 +13977,8 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { ++p; { return 0; } yy967: - yych = *++p; - if (yych == 'P') + ++p; + if ((yych = *p) == 'P') goto yy965; if (yych == 'p') goto yy965; diff --git a/src/scanners.re b/src/scanners.re index 457efaf589..4c72cde114 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -215,7 +215,7 @@ bufsize_t _scan_link_title(const unsigned char *p) /*!re2c ["] (escaped_char|[^"\x00])* ["] { return (bufsize_t)(p - start); } ['] (escaped_char|[^'\x00])* ['] { return (bufsize_t)(p - start); } - [(] (escaped_char|[^)\x00])* [)] { return (bufsize_t)(p - start); } + [(] (escaped_char|[^()\x00])* [)] { return (bufsize_t)(p - start); } * { return 0; } */ } -- cgit 0.0.5-2-1-g0f52 From 07a84eeabd42e36af2bfb7382cdaa9aacfd31295 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 10:25:19 -0700 Subject: Add regression test for commonmark#526. --- test/regression.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/regression.txt b/test/regression.txt index 6fef3afe0d..4ec2c25e13 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -121,3 +121,11 @@ Issue #530 - link parsing corner cases

                            a

                            a

                            ```````````````````````````````` + +Issue commonmark#526 - unescaped ( in link title + +```````````````````````````````` example +[link](url ((title)) +. +

                            [link](url ((title))

                            +```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From 478195cad776469a8532b11b798d9e520652ef64 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 10:30:12 -0700 Subject: Add pathological test for #285. --- test/pathological_tests.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 031acbd10b..e96c333406 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -48,6 +48,9 @@ pathological = { "link openers and emph closers": (("[ a_" * 50000), re.compile("(\[ a_){50000}")), + "pattern [ (]( repeated": + (("[ (](" * 80000), + re.compile("(\[ \(\]\(){80000}")), "hard link/emph case": ("**x [a*b**c*](d)", re.compile("\\*\\*x ab\\*\\*c")), -- cgit 0.0.5-2-1-g0f52 From b4138c5b9b284547f56d5bc1a3a77f1ab18acda0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 12:05:19 -0700 Subject: In ends_with_blank_line, call S_set_last_line_blank... to avoid unnecessary repetition. Once we settle whether a list item ends in a blank line, we don't need to revisit this in considering parent list items. See commonmark/cmark#284. --- src/blocks.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blocks.c b/src/blocks.c index bdd819e585..fb2d54a603 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -211,6 +211,7 @@ static bool ends_with_blank_line(cmark_node *node) { cmark_node *cur = node; while (cur != NULL) { if (S_last_line_blank(cur)) { + S_set_last_line_blank(node, true); return true; } if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) { @@ -219,6 +220,7 @@ static bool ends_with_blank_line(cmark_node *node) { cur = NULL; } } + S_set_last_line_blank(node, false); return false; } -- cgit 0.0.5-2-1-g0f52 From e5a65e02bef6856e4ee0c2f928e3a41d4d2e18de Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 12:48:11 -0700 Subject: Add CMARK_NODE__LAST_LINE_CHECKED flag. Use this to avoid unnecessary recursion in ends_with_blank_line. Closes #284. --- src/blocks.c | 30 +++++++++++++++++------------- src/node.h | 1 + 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index fb2d54a603..e17cc154cc 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -34,6 +34,10 @@ static bool S_last_line_blank(const cmark_node *node) { return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0; } +static bool S_last_line_checked(const cmark_node *node) { + return (node->flags & CMARK_NODE__LAST_LINE_CHECKED) != 0; +} + static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) { return (cmark_node_type)node->type; } @@ -45,6 +49,10 @@ static void S_set_last_line_blank(cmark_node *node, bool is_blank) { node->flags &= ~CMARK_NODE__LAST_LINE_BLANK; } +static void S_set_last_line_checked(cmark_node *node) { + node->flags |= CMARK_NODE__LAST_LINE_CHECKED; +} + static CMARK_INLINE bool S_is_line_end_char(char c) { return (c == '\n' || c == '\r'); } @@ -208,20 +216,16 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) { // Check to see if a node ends with a blank line, descending // if needed into lists and sublists. static bool ends_with_blank_line(cmark_node *node) { - cmark_node *cur = node; - while (cur != NULL) { - if (S_last_line_blank(cur)) { - S_set_last_line_blank(node, true); - return true; - } - if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) { - cur = cur->last_child; - } else { - cur = NULL; - } + if (S_last_line_checked(node)) { + return(S_last_line_blank(node)); + } else if ((S_type(node) == CMARK_NODE_LIST || + S_type(node) == CMARK_NODE_ITEM) && node->last_child) { + S_set_last_line_checked(node); + return(ends_with_blank_line(node->last_child)); + } else { + S_set_last_line_checked(node); + return (S_last_line_blank(node)); } - S_set_last_line_blank(node, false); - return false; } static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { diff --git a/src/node.h b/src/node.h index 13901babef..2163230601 100644 --- a/src/node.h +++ b/src/node.h @@ -49,6 +49,7 @@ typedef struct { enum cmark_node__internal_flags { CMARK_NODE__OPEN = (1 << 0), CMARK_NODE__LAST_LINE_BLANK = (1 << 1), + CMARK_NODE__LAST_LINE_CHECKED = (1 << 2), }; struct cmark_node { -- cgit 0.0.5-2-1-g0f52 From d602943b9c4cc94d5809224ec8ecf45cdc8f559e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 12:49:27 -0700 Subject: Rename ends_with_blank_line with S_ prefix. As with other static functions. --- src/blocks.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index e17cc154cc..95d3cff5a6 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -215,13 +215,13 @@ static void remove_trailing_blank_lines(cmark_strbuf *ln) { // Check to see if a node ends with a blank line, descending // if needed into lists and sublists. -static bool ends_with_blank_line(cmark_node *node) { +static bool S_ends_with_blank_line(cmark_node *node) { if (S_last_line_checked(node)) { return(S_last_line_blank(node)); } else if ((S_type(node) == CMARK_NODE_LIST || S_type(node) == CMARK_NODE_ITEM) && node->last_child) { S_set_last_line_checked(node); - return(ends_with_blank_line(node->last_child)); + return(S_ends_with_blank_line(node->last_child)); } else { S_set_last_line_checked(node); return (S_last_line_blank(node)); @@ -322,7 +322,7 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { // spaces between them: subitem = item->first_child; while (subitem) { - if (ends_with_blank_line(subitem) && (item->next || subitem->next)) { + if (S_ends_with_blank_line(subitem) && (item->next || subitem->next)) { b->as.list.tight = false; break; } -- cgit 0.0.5-2-1-g0f52 From fbb5d9ad8d288a1d3b1abfde7c8660facb3b9b04 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 12:52:57 -0700 Subject: Do cheaper test first. --- src/blocks.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blocks.c b/src/blocks.c index 95d3cff5a6..53bdb19f6c 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -322,7 +322,8 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { // spaces between them: subitem = item->first_child; while (subitem) { - if (S_ends_with_blank_line(subitem) && (item->next || subitem->next)) { + if ((item->next || subitem->next) && + S_ends_with_blank_line(subitem)) { b->as.list.tight = false; break; } -- cgit 0.0.5-2-1-g0f52 From a308cf9fd8d116e1235bc5933b9a759f2224ebc9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 11:22:29 -0700 Subject: Use hand-rolled scanner for thematic break. Keep track of the last position where a thematic break failed to match on a line, to avoid rescanning unnecessarily. See commonmark/cmark#284. --- src/blocks.c | 39 +- src/parser.h | 1 + src/scanners.c | 1592 ++++++++++++++++++++++++------------------------------- src/scanners.h | 2 - src/scanners.re | 15 - 5 files changed, 735 insertions(+), 914 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 53bdb19f6c..804ad8220b 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -105,6 +105,7 @@ cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { parser->column = 0; parser->first_nonspace = 0; parser->first_nonspace_column = 0; + parser->thematic_break_kill_pos = 0; parser->indent = 0; parser->blank = false; parser->partially_consumed_tab = false; @@ -615,6 +616,40 @@ static void chop_trailing_hashtags(cmark_chunk *ch) { } } +// Check for thematic break. On failure, return 0 and update +// thematic_break_kill_pos with the index at which the +// parse fails. On success, return length of match. +// "...three or more hyphens, asterisks, +// or underscores on a line by themselves. If you wish, you may use +// spaces between the hyphens or asterisks." +static int S_scan_thematic_break(cmark_parser *parser, cmark_chunk *input, + bufsize_t offset) { + bufsize_t i; + char c; + char nextc = '\0'; + int count; + i = offset; + c = peek_at(input, i); + if (!(c == '*' || c == '_' || c == '-')) { + parser->thematic_break_kill_pos = i; + return 0; + } + count = 1; + while ((nextc = peek_at(input, ++i))) { + if (nextc == c) { + count++; + } else if (nextc != ' ' && nextc != '\t') { + break; + } + } + if (count >= 3 && (nextc == '\r' || nextc == '\n')) { + return (i - offset) + 1; + } else { + parser->thematic_break_kill_pos = i; + return 0; + } +} + // Find first nonspace character from current offset, setting // parser->first_nonspace, parser->first_nonspace_column, // parser->indent, and parser->blank. Does not advance parser->offset. @@ -948,7 +983,8 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if (!indented && !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && - (matched = scan_thematic_break(input, parser->first_nonspace))) { + (parser->thematic_break_kill_pos <= parser->first_nonspace) && + (matched = S_scan_thematic_break(parser, input, parser->first_nonspace))) { // it's only now that we know the line is not part of a setext heading: *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, parser->first_nonspace + 1); @@ -1171,6 +1207,7 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, parser->column = 0; parser->first_nonspace = 0; parser->first_nonspace_column = 0; + parser->thematic_break_kill_pos = 0; parser->indent = 0; parser->blank = false; parser->partially_consumed_tab = false; diff --git a/src/parser.h b/src/parser.h index 0c5033bd22..7f8ac9dec0 100644 --- a/src/parser.h +++ b/src/parser.h @@ -22,6 +22,7 @@ struct cmark_parser { bufsize_t column; bufsize_t first_nonspace; bufsize_t first_nonspace_column; + bufsize_t thematic_break_kill_pos; int indent; bool blank; bool partially_consumed_tab; diff --git a/src/scanners.c b/src/scanners.c index 930c3f7361..f8e6c15f20 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -12112,206 +12112,6 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) { } } -// Scan a thematic break line: "...three or more hyphens, asterisks, -// or underscores on a line by themselves. If you wish, you may use -// spaces between the hyphens or asterisks." -bufsize_t _scan_thematic_break(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 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, 32, 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, 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, - }; - yych = *p; - if (yych <= ',') { - if (yych == '*') - goto yy788; - } else { - if (yych <= '-') - goto yy789; - if (yych == '_') - goto yy790; - } - ++p; - yy787 : { return 0; } - yy788: - yych = *(marker = ++p); - if (yybm[0 + yych] & 16) { - goto yy791; - } - if (yych == '*') - goto yy794; - goto yy787; - yy789: - yych = *(marker = ++p); - if (yych <= 0x1F) { - if (yych == '\t') - goto yy796; - goto yy787; - } else { - if (yych <= ' ') - goto yy796; - if (yych == '-') - goto yy798; - goto yy787; - } - yy790: - yych = *(marker = ++p); - if (yych <= 0x1F) { - if (yych == '\t') - goto yy800; - goto yy787; - } else { - if (yych <= ' ') - goto yy800; - if (yych == '_') - goto yy802; - goto yy787; - } - yy791: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy791; - } - if (yych == '*') - goto yy794; - yy793: - p = marker; - goto yy787; - yy794: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych == '\t') - goto yy794; - goto yy793; - } else { - if (yych <= ' ') - goto yy794; - if (yych == '*') - goto yy804; - goto yy793; - } - yy796: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych == '\t') - goto yy796; - goto yy793; - } else { - if (yych <= ' ') - goto yy796; - if (yych != '-') - goto yy793; - } - yy798: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych == '\t') - goto yy798; - goto yy793; - } else { - if (yych <= ' ') - goto yy798; - if (yych == '-') - goto yy806; - goto yy793; - } - yy800: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych == '\t') - goto yy800; - goto yy793; - } else { - if (yych <= ' ') - goto yy800; - if (yych != '_') - goto yy793; - } - yy802: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych == '\t') - goto yy802; - goto yy793; - } else { - if (yych <= ' ') - goto yy802; - if (yych == '_') - goto yy808; - goto yy793; - } - yy804: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy804; - } - if (yych <= 0x08) - goto yy793; - if (yych <= '\n') - goto yy810; - if (yych == '\r') - goto yy810; - goto yy793; - yy806: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy806; - } - if (yych <= 0x08) - goto yy793; - if (yych <= '\n') - goto yy812; - if (yych == '\r') - goto yy812; - goto yy793; - yy808: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy808; - } - if (yych <= 0x08) - goto yy793; - if (yych <= '\n') - goto yy814; - if (yych == '\r') - goto yy814; - goto yy793; - yy810: - ++p; - { return (bufsize_t)(p - start); } - yy812: - ++p; - { return (bufsize_t)(p - start); } - yy814: - ++p; - { return (bufsize_t)(p - start); } - } -} - // Scan an opening code fence. bufsize_t _scan_open_code_fence(const unsigned char *p) { const unsigned char *marker = NULL; @@ -12342,299 +12142,299 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy820; + goto yy788; if (yych == '~') - goto yy821; + goto yy789; ++p; - yy819 : { return 0; } - yy820: + yy787 : { return 0; } + yy788: yych = *(marker = ++p); if (yych == '`') - goto yy822; - goto yy819; - yy821: + goto yy790; + goto yy787; + yy789: yych = *(marker = ++p); if (yych == '~') - goto yy824; - goto yy819; - yy822: + goto yy792; + goto yy787; + yy790: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy825; + goto yy793; } - yy823: + yy791: p = marker; - goto yy819; - yy824: + goto yy787; + yy792: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy827; + goto yy795; } - goto yy823; - yy825: + goto yy791; + yy793: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy829; + goto yy797; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy823; + goto yy791; if (yych <= '\r') - goto yy831; - goto yy825; + goto yy799; + goto yy793; } else { if (yych <= 0xC1) - goto yy823; + goto yy791; if (yych <= 0xDF) - goto yy833; - goto yy834; + goto yy801; + goto yy802; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy836; - goto yy835; + goto yy804; + goto yy803; } else { if (yych <= 0xF0) - goto yy837; + goto yy805; if (yych <= 0xF3) - goto yy838; + goto yy806; if (yych <= 0xF4) - goto yy839; - goto yy823; + goto yy807; + goto yy791; } } - yy827: + yy795: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 32) { - goto yy827; + goto yy795; } if (yych <= 0xDF) { if (yych <= '\f') { if (yych <= 0x00) - goto yy823; + goto yy791; if (yych == '\n') - goto yy842; - goto yy840; + goto yy810; + goto yy808; } else { if (yych <= '\r') - goto yy842; + goto yy810; if (yych <= 0x7F) - goto yy840; + goto yy808; if (yych <= 0xC1) - goto yy823; - goto yy844; + goto yy791; + goto yy812; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy845; + goto yy813; if (yych == 0xED) - goto yy847; - goto yy846; + goto yy815; + goto yy814; } else { if (yych <= 0xF0) - goto yy848; + goto yy816; if (yych <= 0xF3) - goto yy849; + goto yy817; if (yych <= 0xF4) - goto yy850; - goto yy823; + goto yy818; + goto yy791; } } - yy829: + yy797: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy829; + goto yy797; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy823; + goto yy791; if (yych >= 0x0E) - goto yy823; + goto yy791; } else { if (yych <= 0xDF) - goto yy833; + goto yy801; if (yych <= 0xE0) - goto yy834; - goto yy835; + goto yy802; + goto yy803; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy836; + goto yy804; if (yych <= 0xEF) - goto yy835; - goto yy837; + goto yy803; + goto yy805; } else { if (yych <= 0xF3) - goto yy838; + goto yy806; if (yych <= 0xF4) - goto yy839; - goto yy823; + goto yy807; + goto yy791; } } - yy831: + yy799: ++p; p = marker; { return (bufsize_t)(p - start); } - yy833: + yy801: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy829; - goto yy823; - yy834: + goto yy797; + goto yy791; + yy802: ++p; yych = *p; if (yych <= 0x9F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy833; - goto yy823; - yy835: + goto yy801; + goto yy791; + yy803: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy833; - goto yy823; - yy836: + goto yy801; + goto yy791; + yy804: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0x9F) - goto yy833; - goto yy823; - yy837: + goto yy801; + goto yy791; + yy805: ++p; yych = *p; if (yych <= 0x8F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy835; - goto yy823; - yy838: + goto yy803; + goto yy791; + yy806: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy835; - goto yy823; - yy839: + goto yy803; + goto yy791; + yy807: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0x8F) - goto yy835; - goto yy823; - yy840: + goto yy803; + goto yy791; + yy808: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy840; + goto yy808; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy823; + goto yy791; if (yych >= 0x0E) - goto yy823; + goto yy791; } else { if (yych <= 0xDF) - goto yy844; + goto yy812; if (yych <= 0xE0) - goto yy845; - goto yy846; + goto yy813; + goto yy814; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy847; + goto yy815; if (yych <= 0xEF) - goto yy846; - goto yy848; + goto yy814; + goto yy816; } else { if (yych <= 0xF3) - goto yy849; + goto yy817; if (yych <= 0xF4) - goto yy850; - goto yy823; + goto yy818; + goto yy791; } } - yy842: + yy810: ++p; p = marker; { return (bufsize_t)(p - start); } - yy844: + yy812: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy840; - goto yy823; - yy845: + goto yy808; + goto yy791; + yy813: ++p; yych = *p; if (yych <= 0x9F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy844; - goto yy823; - yy846: + goto yy812; + goto yy791; + yy814: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy844; - goto yy823; - yy847: + goto yy812; + goto yy791; + yy815: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0x9F) - goto yy844; - goto yy823; - yy848: + goto yy812; + goto yy791; + yy816: ++p; yych = *p; if (yych <= 0x8F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy846; - goto yy823; - yy849: + goto yy814; + goto yy791; + yy817: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0xBF) - goto yy846; - goto yy823; - yy850: + goto yy814; + goto yy791; + yy818: ++p; yych = *p; if (yych <= 0x7F) - goto yy823; + goto yy791; if (yych <= 0x8F) - goto yy846; - goto yy823; + goto yy814; + goto yy791; } } @@ -12661,111 +12461,111 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { }; yych = *p; if (yych == '`') - goto yy855; + goto yy823; if (yych == '~') - goto yy856; + goto yy824; ++p; - yy854 : { return 0; } - yy855: + yy822 : { return 0; } + yy823: yych = *(marker = ++p); if (yych == '`') - goto yy857; - goto yy854; - yy856: + goto yy825; + goto yy822; + yy824: yych = *(marker = ++p); if (yych == '~') - goto yy859; - goto yy854; - yy857: + goto yy827; + goto yy822; + yy825: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy860; + goto yy828; } - yy858: + yy826: p = marker; - goto yy854; - yy859: + goto yy822; + yy827: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy862; + goto yy830; } - goto yy858; - yy860: + goto yy826; + yy828: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy864; + goto yy832; } if (yych <= '\f') { if (yych <= 0x08) - goto yy858; + goto yy826; if (yych <= '\n') - goto yy866; - goto yy858; + goto yy834; + goto yy826; } else { if (yych <= '\r') - goto yy866; + goto yy834; if (yych == '`') - goto yy860; - goto yy858; + goto yy828; + goto yy826; } - yy862: + yy830: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy862; + goto yy830; } if (yych <= '\f') { if (yych <= 0x08) - goto yy858; + goto yy826; if (yych <= '\t') - goto yy868; + goto yy836; if (yych <= '\n') - goto yy870; - goto yy858; + goto yy838; + goto yy826; } else { if (yych <= '\r') - goto yy870; + goto yy838; if (yych == ' ') - goto yy868; - goto yy858; + goto yy836; + goto yy826; } - yy864: + yy832: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy864; + goto yy832; } if (yych <= 0x08) - goto yy858; + goto yy826; if (yych <= '\n') - goto yy866; + goto yy834; if (yych != '\r') - goto yy858; - yy866: + goto yy826; + yy834: ++p; p = marker; { return (bufsize_t)(p - start); } - yy868: + yy836: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy858; + goto yy826; if (yych <= '\t') - goto yy868; + goto yy836; if (yych >= '\v') - goto yy858; + goto yy826; } else { if (yych <= '\r') - goto yy870; + goto yy838; if (yych == ' ') - goto yy868; - goto yy858; + goto yy836; + goto yy826; } - yy870: + yy838: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -12782,890 +12582,890 @@ bufsize_t _scan_entity(const unsigned char *p) { unsigned char yych; yych = *p; if (yych == '&') - goto yy876; + goto yy844; ++p; - yy875 : { return 0; } - yy876: + yy843 : { return 0; } + yy844: yych = *(marker = ++p); if (yych <= '@') { if (yych != '#') - goto yy875; + goto yy843; } else { if (yych <= 'Z') - goto yy879; + goto yy847; if (yych <= '`') - goto yy875; + goto yy843; if (yych <= 'z') - goto yy879; - goto yy875; + goto yy847; + goto yy843; } yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy880; + goto yy848; } else { if (yych <= 'X') - goto yy881; + goto yy849; if (yych == 'x') - goto yy881; + goto yy849; } - yy878: + yy846: p = marker; - goto yy875; - yy879: + goto yy843; + yy847: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy882; - goto yy878; + goto yy850; + goto yy846; } else { if (yych <= 'Z') - goto yy882; + goto yy850; if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy882; - goto yy878; + goto yy850; + goto yy846; } - yy880: + yy848: yych = *++p; if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy883; + goto yy851; if (yych == ';') - goto yy884; - goto yy878; - yy881: + goto yy852; + goto yy846; + yy849: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy886; - goto yy878; + goto yy854; + goto yy846; } else { if (yych <= 'F') - goto yy886; + goto yy854; if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'f') - goto yy886; - goto yy878; + goto yy854; + goto yy846; } - yy882: + yy850: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy887; + goto yy855; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy887; + goto yy846; + goto yy855; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy887; - goto yy878; + goto yy855; + goto yy846; } } - yy883: + yy851: yych = *++p; if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy888; + goto yy856; if (yych != ';') - goto yy878; - yy884: + goto yy846; + yy852: ++p; { return (bufsize_t)(p - start); } - yy886: + yy854: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy889; + goto yy857; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'F') { if (yych <= '@') - goto yy878; - goto yy889; + goto yy846; + goto yy857; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'f') - goto yy889; - goto yy878; + goto yy857; + goto yy846; } } - yy887: + yy855: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy890; + goto yy858; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy890; + goto yy846; + goto yy858; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy890; - goto yy878; + goto yy858; + goto yy846; } } - yy888: + yy856: yych = *++p; if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy891; + goto yy859; if (yych == ';') - goto yy884; - goto yy878; - yy889: + goto yy852; + goto yy846; + yy857: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy892; + goto yy860; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'F') { if (yych <= '@') - goto yy878; - goto yy892; + goto yy846; + goto yy860; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'f') - goto yy892; - goto yy878; + goto yy860; + goto yy846; } } - yy890: + yy858: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy893; + goto yy861; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy893; + goto yy846; + goto yy861; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy893; - goto yy878; + goto yy861; + goto yy846; } } - yy891: + yy859: yych = *++p; if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy894; + goto yy862; if (yych == ';') - goto yy884; - goto yy878; - yy892: + goto yy852; + goto yy846; + yy860: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy895; + goto yy863; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'F') { if (yych <= '@') - goto yy878; - goto yy895; + goto yy846; + goto yy863; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'f') - goto yy895; - goto yy878; + goto yy863; + goto yy846; } } - yy893: + yy861: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy896; + goto yy864; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy896; + goto yy846; + goto yy864; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy896; - goto yy878; + goto yy864; + goto yy846; } } - yy894: + yy862: yych = *++p; if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy897; + goto yy865; if (yych == ';') - goto yy884; - goto yy878; - yy895: + goto yy852; + goto yy846; + yy863: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy898; + goto yy866; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'F') { if (yych <= '@') - goto yy878; - goto yy898; + goto yy846; + goto yy866; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'f') - goto yy898; - goto yy878; + goto yy866; + goto yy846; } } - yy896: + yy864: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy899; + goto yy867; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy899; + goto yy846; + goto yy867; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy899; - goto yy878; + goto yy867; + goto yy846; } } - yy897: + yy865: yych = *++p; if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy900; + goto yy868; if (yych == ';') - goto yy884; - goto yy878; - yy898: + goto yy852; + goto yy846; + yy866: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy900; + goto yy868; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'F') { if (yych <= '@') - goto yy878; - goto yy900; + goto yy846; + goto yy868; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'f') - goto yy900; - goto yy878; + goto yy868; + goto yy846; } } - yy899: + yy867: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy901; + goto yy869; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy901; + goto yy846; + goto yy869; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy901; - goto yy878; + goto yy869; + goto yy846; } } - yy900: + yy868: yych = *++p; if (yych == ';') - goto yy884; - goto yy878; - yy901: + goto yy852; + goto yy846; + yy869: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy902; + goto yy870; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy902: + yy870: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy903; + goto yy871; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy903: + yy871: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy904; + goto yy872; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy904: + yy872: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy905; + goto yy873; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy905: + yy873: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy906; + goto yy874; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy906: + yy874: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy907; + goto yy875; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy907: + yy875: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy908; + goto yy876; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy908: + yy876: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy909; + goto yy877; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy909: + yy877: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy910; - if (yych <= ':') goto yy878; - goto yy884; + if (yych <= ':') + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy910: + yy878: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy911; + goto yy879; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy911: + yy879: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy912; + goto yy880; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy912: + yy880: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy913; + goto yy881; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy913: + yy881: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy914; + goto yy882; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy914: + yy882: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy915; + goto yy883; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy915: + yy883: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy916; + goto yy884; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy916: + yy884: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy917; + goto yy885; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy917: + yy885: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy918; + goto yy886; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy918: + yy886: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy919; + goto yy887; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy919: + yy887: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy920; + goto yy888; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy920: + yy888: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy921; + goto yy889; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy921: + yy889: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy922; + goto yy890; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy922: + yy890: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy923; + goto yy891; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy923: + yy891: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy924; + goto yy892; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; + goto yy846; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych >= '{') - goto yy878; + goto yy846; } } - yy924: + yy892: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy878; + goto yy846; if (yych <= '9') - goto yy900; + goto yy868; if (yych <= ':') - goto yy878; - goto yy884; + goto yy846; + goto yy852; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy878; - goto yy900; + goto yy846; + goto yy868; } else { if (yych <= '`') - goto yy878; + goto yy846; if (yych <= 'z') - goto yy900; - goto yy878; + goto yy868; + goto yy846; } } } @@ -13684,304 +13484,304 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'V') { if (yych <= 'F') { if (yych == 'D') - goto yy929; + goto yy897; if (yych >= 'F') - goto yy930; + goto yy898; } else { if (yych == 'J') - goto yy931; + goto yy899; if (yych >= 'V') - goto yy932; + goto yy900; } } else { if (yych <= 'f') { if (yych == 'd') - goto yy929; + goto yy897; if (yych >= 'f') - goto yy930; + goto yy898; } else { if (yych <= 'j') { if (yych >= 'j') - goto yy931; + goto yy899; } else { if (yych == 'v') - goto yy932; + goto yy900; } } } ++p; - yy928 : { return 0; } - yy929: + yy896 : { return 0; } + yy897: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy933; + goto yy901; if (yych == 'a') - goto yy933; - goto yy928; - yy930: + goto yy901; + goto yy896; + yy898: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy935; + goto yy903; if (yych == 'i') - goto yy935; - goto yy928; - yy931: + goto yy903; + goto yy896; + yy899: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy936; + goto yy904; if (yych == 'a') - goto yy936; - goto yy928; - yy932: + goto yy904; + goto yy896; + yy900: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy937; + goto yy905; if (yych == 'b') - goto yy937; - goto yy928; - yy933: + goto yy905; + goto yy896; + yy901: yych = *++p; if (yych == 'T') - goto yy938; + goto yy906; if (yych == 't') - goto yy938; - yy934: + goto yy906; + yy902: p = marker; if (yyaccept == 0) { - goto yy928; + goto yy896; } else { - goto yy946; + goto yy914; } - yy935: + yy903: yych = *++p; if (yych == 'L') - goto yy939; + goto yy907; if (yych == 'l') - goto yy939; - goto yy934; - yy936: + goto yy907; + goto yy902; + yy904: yych = *++p; if (yych == 'V') - goto yy940; + goto yy908; if (yych == 'v') - goto yy940; - goto yy934; - yy937: + goto yy908; + goto yy902; + yy905: yych = *++p; if (yych == 'S') - goto yy941; + goto yy909; if (yych == 's') - goto yy941; - goto yy934; - yy938: + goto yy909; + goto yy902; + yy906: yych = *++p; if (yych == 'A') - goto yy942; + goto yy910; if (yych == 'a') - goto yy942; - goto yy934; - yy939: + goto yy910; + goto yy902; + yy907: yych = *++p; if (yych == 'E') - goto yy943; + goto yy911; if (yych == 'e') - goto yy943; - goto yy934; - yy940: + goto yy911; + goto yy902; + yy908: yych = *++p; if (yych == 'A') - goto yy937; + goto yy905; if (yych == 'a') - goto yy937; - goto yy934; - yy941: + goto yy905; + goto yy902; + yy909: yych = *++p; if (yych == 'C') - goto yy944; + goto yy912; if (yych == 'c') - goto yy944; - goto yy934; - yy942: + goto yy912; + goto yy902; + yy910: yych = *++p; if (yych == ':') - goto yy945; - goto yy934; - yy943: + goto yy913; + goto yy902; + yy911: yych = *++p; if (yych == ':') - goto yy947; - goto yy934; - yy944: + goto yy915; + goto yy902; + yy912: yych = *++p; if (yych == 'R') - goto yy948; + goto yy916; if (yych == 'r') - goto yy948; - goto yy934; - yy945: + goto yy916; + goto yy902; + yy913: yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy949; + goto yy917; if (yych == 'i') - goto yy949; - yy946 : { return (bufsize_t)(p - start); } - yy947: + goto yy917; + yy914 : { return (bufsize_t)(p - start); } + yy915: yych = *++p; - goto yy946; - yy948: + goto yy914; + yy916: yych = *++p; if (yych == 'I') - goto yy950; + goto yy918; if (yych == 'i') - goto yy950; - goto yy934; - yy949: + goto yy918; + goto yy902; + yy917: yych = *++p; if (yych == 'M') - goto yy951; + goto yy919; if (yych == 'm') - goto yy951; - goto yy934; - yy950: + goto yy919; + goto yy902; + yy918: yych = *++p; if (yych == 'P') - goto yy952; + goto yy920; if (yych == 'p') - goto yy952; - goto yy934; - yy951: + goto yy920; + goto yy902; + yy919: yych = *++p; if (yych == 'A') - goto yy953; + goto yy921; if (yych == 'a') - goto yy953; - goto yy934; - yy952: + goto yy921; + goto yy902; + yy920: yych = *++p; if (yych == 'T') - goto yy943; + goto yy911; if (yych == 't') - goto yy943; - goto yy934; - yy953: + goto yy911; + goto yy902; + yy921: yych = *++p; if (yych == 'G') - goto yy954; + goto yy922; if (yych != 'g') - goto yy934; - yy954: + goto yy902; + yy922: yych = *++p; if (yych == 'E') - goto yy955; + goto yy923; if (yych != 'e') - goto yy934; - yy955: + goto yy902; + yy923: yych = *++p; if (yych != '/') - goto yy934; + goto yy902; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy957; + goto yy925; if (yych <= 'I') - goto yy934; - goto yy958; + goto yy902; + goto yy926; } else { if (yych == 'P') - goto yy959; + goto yy927; if (yych <= 'V') - goto yy934; - goto yy960; + goto yy902; + goto yy928; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy957; + goto yy925; if (yych <= 'i') - goto yy934; - goto yy958; + goto yy902; + goto yy926; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy934; - goto yy959; + goto yy902; + goto yy927; } else { if (yych == 'w') - goto yy960; - goto yy934; + goto yy928; + goto yy902; } } } - yy957: + yy925: yych = *++p; if (yych == 'I') - goto yy961; + goto yy929; if (yych == 'i') - goto yy961; - goto yy934; - yy958: + goto yy929; + goto yy902; + yy926: yych = *++p; if (yych == 'P') - goto yy962; + goto yy930; if (yych == 'p') - goto yy962; - goto yy934; - yy959: + goto yy930; + goto yy902; + yy927: yych = *++p; if (yych == 'N') - goto yy963; + goto yy931; if (yych == 'n') - goto yy963; - goto yy934; - yy960: + goto yy931; + goto yy902; + yy928: yych = *++p; if (yych == 'E') - goto yy964; + goto yy932; if (yych == 'e') - goto yy964; - goto yy934; - yy961: + goto yy932; + goto yy902; + yy929: yych = *++p; if (yych == 'F') - goto yy965; + goto yy933; if (yych == 'f') - goto yy965; - goto yy934; - yy962: + goto yy933; + goto yy902; + yy930: yych = *++p; if (yych == 'E') - goto yy963; + goto yy931; if (yych != 'e') - goto yy934; - yy963: + goto yy902; + yy931: yych = *++p; if (yych == 'G') - goto yy965; + goto yy933; if (yych == 'g') - goto yy965; - goto yy934; - yy964: + goto yy933; + goto yy902; + yy932: yych = *++p; if (yych == 'B') - goto yy967; + goto yy935; if (yych == 'b') - goto yy967; - goto yy934; - yy965: + goto yy935; + goto yy902; + yy933: ++p; { return 0; } - yy967: + yy935: ++p; if ((yych = *p) == 'P') - goto yy965; + goto yy933; if (yych == 'p') - goto yy965; - goto yy934; + goto yy933; + goto yy902; } } diff --git a/src/scanners.h b/src/scanners.h index 207f91a000..bcb5fe8c33 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -22,7 +22,6 @@ bufsize_t _scan_link_title(const unsigned char *p); bufsize_t _scan_spacechars(const unsigned char *p); bufsize_t _scan_atx_heading_start(const unsigned char *p); bufsize_t _scan_setext_heading_line(const unsigned char *p); -bufsize_t _scan_thematic_break(const unsigned char *p); bufsize_t _scan_open_code_fence(const unsigned char *p); bufsize_t _scan_close_code_fence(const unsigned char *p); bufsize_t _scan_entity(const unsigned char *p); @@ -44,7 +43,6 @@ bufsize_t _scan_dangerous_url(const unsigned char *p); #define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n) #define scan_setext_heading_line(c, n) \ _scan_at(&_scan_setext_heading_line, c, n) -#define scan_thematic_break(c, n) _scan_at(&_scan_thematic_break, c, n) #define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n) #define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n) #define scan_entity(c, n) _scan_at(&_scan_entity, c, n) diff --git a/src/scanners.re b/src/scanners.re index 4c72cde114..447147b4b3 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -253,21 +253,6 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) */ } -// Scan a thematic break line: "...three or more hyphens, asterisks, -// or underscores on a line by themselves. If you wish, you may use -// spaces between the hyphens or asterisks." -bufsize_t _scan_thematic_break(const unsigned char *p) -{ - const unsigned char *marker = NULL; - const unsigned char *start = p; -/*!re2c - ([*][ \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; } -*/ -} - // Scan an opening code fence. bufsize_t _scan_open_code_fence(const unsigned char *p) { -- cgit 0.0.5-2-1-g0f52 From b1e6af5a9347c0b21400a7e0aad00f5167b3e472 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 13:10:11 -0700 Subject: Avoid gcc warning for uninitialized variable. --- src/inlines.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index d31173dc18..dc899dcd87 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -605,7 +605,7 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { delimiter *opener; delimiter *old_closer; bool opener_found; - int openers_bottom_index; + int openers_bottom_index = 0; delimiter *openers_bottom[6] = {stack_bottom, stack_bottom, stack_bottom, stack_bottom, stack_bottom, stack_bottom}; -- cgit 0.0.5-2-1-g0f52 From 325a1471d2a32bcc1e2d2580b973ff4ba1df85e8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 17 Mar 2019 22:43:38 -0700 Subject: Make rendering safe by default. Removes CMARK_OPT_SAFE from options. Adds CMARK_OPT_UNSAFE, with the opposite meaning. The new default behavior is to suppress raw HTML and potentially dangerous links. The CMARK_OPT_UNSAFE option has to be set explicitly to prevent this. -------------------------------------------------------- NOTE: This change will require modifications in bindings for cmark and in most libraries and programs that use cmark. -------------------------------------------------------- Closes #239, #273. Borrows heavily from @kivikakk's patch in github/cmark-gfm#123. --- README.md | 12 ++++++------ api_test/main.c | 5 +++-- man/man3/cmark.3 | 10 +++++----- src/cmark.h | 10 +++++----- src/html.c | 12 ++++++------ src/main.c | 6 +++--- test/cmark-fuzz.c | 2 +- test/cmark.py | 4 +++- 8 files changed, 32 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index bd3694e6a8..5f31cccc1d 100644 --- a/README.md +++ b/README.md @@ -156,14 +156,14 @@ be found in the man pages in the `man` subdirectory. Security -------- -By default, the library will pass through raw HTML and potentially +By default, the library will scrub raw HTML and potentially dangerous links (`javascript:`, `vbscript:`, `data:`, `file:`). -It is recommended that users either disable this potentially unsafe -feature by using the option `CMARK_OPT_SAFE` (or `--safe` with the -command-line program), or run the output through an HTML sanitizer -to protect against -[XSS attacks](http://en.wikipedia.org/wiki/Cross-site_scripting). +To allow these, use the option `CMARK_OPT_UNSAFE` (or +`--unsafe`) with the command line program. If doing so, we +recommend you use a HTML sanitizer specific to your needs to +protect against [XSS +attacks](http://en.wikipedia.org/wiki/Cross-site_scripting). Contributing ------------ diff --git a/api_test/main.c b/api_test/main.c index 1f1f77f213..83afbff0ca 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -177,7 +177,8 @@ static void accessors(test_batch_runner *runner) { OK(runner, cmark_node_set_literal(string, literal + sizeof("prefix")), "set_literal suffix"); - char *rendered_html = cmark_render_html(doc, CMARK_OPT_DEFAULT); + char *rendered_html = cmark_render_html(doc, + CMARK_OPT_DEFAULT | CMARK_OPT_UNSAFE); static const char expected_html[] = "

                            Header

                            \n" "
                              \n" @@ -859,7 +860,7 @@ static void test_safe(test_batch_runner *runner) { "a>\n[link](JAVAscript:alert('hi'))\n![image](" "file:my.js)\n"; char *html = cmark_markdown_to_html(raw_html, sizeof(raw_html) - 1, - CMARK_OPT_DEFAULT | CMARK_OPT_SAFE); + CMARK_OPT_DEFAULT); STR_EQ(runner, html, "\n

                              hi\nlink\n\"image\""); } else { cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); @@ -242,7 +242,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, break; case CMARK_NODE_HTML_INLINE: - if (options & CMARK_OPT_SAFE) { + if (!(options & CMARK_OPT_UNSAFE)) { cmark_strbuf_puts(html, ""); } else { cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); @@ -278,8 +278,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_LINK: if (entering) { cmark_strbuf_puts(html, "as.link.url, 0))) { + if ((options & CMARK_OPT_UNSAFE) || + !(scan_dangerous_url(&node->as.link.url, 0))) { houdini_escape_href(html, node->as.link.url.data, node->as.link.url.len); } @@ -296,8 +296,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_IMAGE: if (entering) { cmark_strbuf_puts(html, "as.link.url, 0))) { + if ((options & CMARK_OPT_UNSAFE) || + !(scan_dangerous_url(&node->as.link.url, 0))) { houdini_escape_href(html, node->as.link.url.data, node->as.link.url.len); } diff --git a/src/main.c b/src/main.c index 1094fee839..29360dcc88 100644 --- a/src/main.c +++ b/src/main.c @@ -38,7 +38,7 @@ void print_usage() { printf(" --sourcepos Include source position attribute\n"); printf(" --hardbreaks Treat newlines as hard line breaks\n"); printf(" --nobreaks Render soft line breaks as spaces\n"); - printf(" --safe Suppress raw HTML and dangerous URLs\n"); + printf(" --unsafe Render raw HTML and dangerous URLs\n"); printf(" --smart Use smart punctuation\n"); printf(" --validate-utf8 Replace UTF-8 invalid sequences with U+FFFD\n"); printf(" --help, -h Print usage information\n"); @@ -112,8 +112,8 @@ int main(int argc, char *argv[]) { options |= CMARK_OPT_NOBREAKS; } else if (strcmp(argv[i], "--smart") == 0) { options |= CMARK_OPT_SMART; - } else if (strcmp(argv[i], "--safe") == 0) { - options |= CMARK_OPT_SAFE; + } else if (strcmp(argv[i], "--unsafe") == 0) { + options |= CMARK_OPT_UNSAFE; } else if (strcmp(argv[i], "--validate-utf8") == 0) { options |= CMARK_OPT_VALIDATE_UTF8; } else if ((strcmp(argv[i], "--help") == 0) || diff --git a/test/cmark-fuzz.c b/test/cmark-fuzz.c index 9bdd3a553b..02c05bc53e 100644 --- a/test/cmark-fuzz.c +++ b/test/cmark-fuzz.c @@ -13,7 +13,7 @@ int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { memcpy(&fuzz_config, data, sizeof(fuzz_config)); /* Mask off valid option bits */ - fuzz_config.options &= (CMARK_OPT_SOURCEPOS | CMARK_OPT_HARDBREAKS | CMARK_OPT_SAFE | CMARK_OPT_NOBREAKS | CMARK_OPT_NORMALIZE | CMARK_OPT_VALIDATE_UTF8 | CMARK_OPT_SMART); + fuzz_config.options &= (CMARK_OPT_SOURCEPOS | CMARK_OPT_HARDBREAKS | CMARK_OPT_UNSAFE | CMARK_OPT_NOBREAKS | CMARK_OPT_NORMALIZE | CMARK_OPT_VALIDATE_UTF8 | CMARK_OPT_SMART); /* Remainder of input is the markdown */ const char *markdown = (const char *)(data + sizeof(fuzz_config)); diff --git a/test/cmark.py b/test/cmark.py index 4be85a3b0f..38d2f599c0 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -17,7 +17,8 @@ def to_html(lib, text): markdown.argtypes = [c_char_p, c_size_t, c_int] textbytes = text.encode('utf-8') textlen = len(textbytes) - result = markdown(textbytes, textlen, 0).decode('utf-8') + # 1 << 17 == CMARK_OPT_UNSAFE + result = markdown(textbytes, textlen, 1 << 17).decode('utf-8') return [0, result, ''] def to_commonmark(lib, text): @@ -37,6 +38,7 @@ class CMark: def __init__(self, prog=None, library_dir=None): self.prog = prog if prog: + prog += ' --unsafe' self.to_html = lambda x: pipe_through_prog(prog, x) self.to_commonmark = lambda x: pipe_through_prog(prog + ' -t commonmark', x) else: -- cgit 0.0.5-2-1-g0f52 From 11043696474263edbd508b98076933b81ad32805 Mon Sep 17 00:00:00 2001 From: Jonathan Müller Date: Mon, 18 Mar 2019 12:13:52 +0100 Subject: Bump CMake to version 3 --- CMakeLists.txt | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a25b2697b9..4c438b6ea7 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,5 @@ -cmake_minimum_required(VERSION 2.8.9) - -# prevent ugly developer warnings because version is set directly, not through project() -# it should be redone properly by using VERSION in project() if on CMake 3.x -if(CMAKE_MAJOR_VERSION GREATER 2) - cmake_policy(SET CMP0048 OLD) -endif() - -project(cmark) +cmake_minimum_required(VERSION 3.0) +project(cmark VERSION 0.28.3) include("FindAsan.cmake") @@ -14,13 +7,6 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") message(FATAL_ERROR "Do not build in-source.\nPlease remove CMakeCache.txt and the CMakeFiles/ directory.\nThen: mkdir build ; cd build ; cmake .. ; make") endif() -set(PROJECT_NAME "cmark") - -set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 28) -set(PROJECT_VERSION_PATCH 3) -set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ) - option(CMARK_TESTS "Build cmark tests and enable testing" ON) option(CMARK_STATIC "Build static libcmark library" ON) option(CMARK_SHARED "Build shared libcmark library" ON) -- cgit 0.0.5-2-1-g0f52 From abf3a7a47d45ddad2a1bd69b176a4c471f65231d Mon Sep 17 00:00:00 2001 From: Jonathan Müller Date: Mon, 18 Mar 2019 12:22:15 +0100 Subject: Remove deprecated call to add_compiler_export_flags() It is deprecated in CMake 3.0, the replacement is to set the CXX_VISIBILITY_PRESET (or in our case C_VISIBILITY_PRESET) and VISIBILITY_INLINES_HIDDEN properties of the target. We're already setting them by setting the CMake variables anyway, so the call can be removed. --- src/CMakeLists.txt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 468b0f089d..10fcb1d8af 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,7 +59,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmark_version.h.in include (GenerateExportHeader) add_executable(${PROGRAM} ${PROGRAM_SOURCES}) -add_compiler_export_flags() # Disable the PUBLIC declarations when compiling the executable: set_target_properties(${PROGRAM} PROPERTIES @@ -72,12 +71,9 @@ set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg") set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") -if (${CMAKE_VERSION} VERSION_GREATER "1.8") - set(CMAKE_C_VISIBILITY_PRESET hidden) - set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -elseif(CMAKE_COMPILER_IS_GNUCC OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") -endif () +# -fvisibility=hidden +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) if (CMARK_SHARED) add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES}) -- cgit 0.0.5-2-1-g0f52 From ecd0c8c23f011e845ca96704b154083c0f07a994 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 19 Mar 2019 16:27:24 -0700 Subject: Define CMARK_OPT_SAFE for API compatibility. It doesn't do anything; this is documented. --- man/man3/cmark.3 | 16 +++++++++++++++- src/cmark.h | 6 ++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/man/man3/cmark.3 b/man/man3/cmark.3 index 8e4b4c76e3..65ab6d6fef 100644 --- a/man/man3/cmark.3 +++ b/man/man3/cmark.3 @@ -1,4 +1,4 @@ -.TH cmark 3 "March 17, 2019" "LOCAL" "Library Functions Manual" +.TH cmark 3 "March 19, 2019" "LOCAL" "Library Functions Manual" .SH NAME .PP @@ -717,6 +717,20 @@ Include a \f[C]data\-sourcepos\f[] attribute on all block elements. .PP Render \f[C]softbreak\f[] elements as hard line breaks. +.PP +.nf +\fC +.RS 0n +#define CMARK_OPT_SAFE (1 << 3) +.RE +\f[] +.fi + +.PP +\f[C]CMARK_OPT_SAFE\f[] is defined here for API compatibility, but it no +longer has any effect. "Safe" mode is now the default: set +\f[C]CMARK_OPT_UNSAFE\f[] to disable it. + .PP .nf \fC diff --git a/src/cmark.h b/src/cmark.h index ad9d4c445e..102aa6f8fe 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -552,6 +552,12 @@ char *cmark_render_latex(cmark_node *root, int options, int width); */ #define CMARK_OPT_HARDBREAKS (1 << 2) +/** `CMARK_OPT_SAFE` is defined here for API compatibility, + but it no longer has any effect. "Safe" mode is now the default: + set `CMARK_OPT_UNSAFE` to disable it. + */ +#define CMARK_OPT_SAFE (1 << 3) + /** Render raw HTML and unsafe links (`javascript:`, `vbscript:`, * `file:`, and `data:`, except for `image/png`, `image/gif`, * `image/jpeg`, or `image/webp` mime types). By default, -- cgit 0.0.5-2-1-g0f52 From be18e71f5baec16da794b0f006071799fc9a4db0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 19 Mar 2019 17:46:23 -0700 Subject: Update spec. Fix `[link]()`. --- src/inlines.c | 3 +++ test/spec.txt | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/src/inlines.c b/src/inlines.c index dc899dcd87..bab607a54b 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -970,6 +970,9 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, else ++i; } + if (i >= input->len) { + return manual_scan_link_url_2(input, offset, output); + } } else { return manual_scan_link_url_2(input, offset, output); } diff --git a/test/spec.txt b/test/spec.txt index 91551e5102..dc944d0b45 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -7417,6 +7417,15 @@ bar>) bar>)

                              ```````````````````````````````` +Pointy brackets that enclose links must be unescaped: + +```````````````````````````````` example +[link]() +. +

                              link

                              +```````````````````````````````` + + Parentheses inside the link destination may be escaped: ```````````````````````````````` example -- cgit 0.0.5-2-1-g0f52 From 01be842b276b0049f53f720b29177a81b3d43273 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 22 Mar 2019 21:32:03 -0700 Subject: Include references.h in parser.h Closes #287. --- src/parser.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/parser.h b/src/parser.h index 7f8ac9dec0..39e2327a52 100644 --- a/src/parser.h +++ b/src/parser.h @@ -2,6 +2,7 @@ #define CMARK_AST_H #include +#include "references.h" #include "node.h" #include "buffer.h" #include "memory.h" -- cgit 0.0.5-2-1-g0f52 From 660990612f513c3c3be104c7f20de7e81ba41aee Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 23 Mar 2019 09:21:12 -0700 Subject: Update spec; allow internal delimiter runs to match if... both have lengths that are multiples of 3. See commonmark/commonmark#528. --- src/inlines.c | 3 ++- test/spec.txt | 34 ++++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index bab607a54b..6e92aff24e 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -642,7 +642,8 @@ static void process_emphasis(subject *subj, delimiter *stack_bottom) { // interior closer of size 2 can't match opener of size 1 // or of size 1 can't match 2 if (!(closer->can_open || opener->can_close) || - ((opener->length + closer->length) % 3) != 0) { + closer->length % 3 == 0 || + (opener->length + closer->length) % 3 != 0) { opener_found = true; break; } diff --git a/test/spec.txt b/test/spec.txt index dc944d0b45..ffa0f9cdcc 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1922,9 +1922,11 @@ bar An [info string] can be provided after the opening code fence. -Opening and closing spaces will be stripped, and the first word, prefixed -with `language-`, is used as the value for the `class` attribute of the -`code` element within the enclosing `pre` element. +Although this spec doesn't mandate any particular treatment of +the info string, the first word is typically used to specify +the language of the code block. In HTML output, the language is +normally indicated by adding a class to the `code` element consisting +of `language-` followed by the language name. ```````````````````````````````` example ```ruby @@ -6107,7 +6109,8 @@ The following rules define emphasis and strong emphasis: [delimiter runs]. If one of the delimiters can both open and close emphasis, then the sum of the lengths of the delimiter runs containing the opening and closing delimiters - must not be a multiple of 3. + must not be a multiple of 3 unless both lengths are + multiples of 3. 10. Strong emphasis begins with a delimiter that [can open strong emphasis] and ends with a delimiter that @@ -6117,7 +6120,8 @@ The following rules define emphasis and strong emphasis: [delimiter runs]. If one of the delimiters can both open and close strong emphasis, then the sum of the lengths of the delimiter runs containing the opening and closing - delimiters must not be a multiple of 3. + delimiters must not be a multiple of 3 unless both lengths + are multiples of 3. 11. A literal `*` character cannot occur at the beginning or end of `*`-delimited emphasis or `**`-delimited strong emphasis, unless it @@ -6736,7 +6740,8 @@ is precluded by the condition that a delimiter that can both open and close (like the `*` after `foo`) cannot form emphasis if the sum of the lengths of the delimiter runs containing the opening and -closing delimiters is a multiple of 3. +closing delimiters is a multiple of 3 unless +both lengths are multiples of 3. For the same reason, we don't get two consecutive @@ -6776,6 +6781,23 @@ omitted: ```````````````````````````````` +When the lengths of the interior closing and opening +delimiter runs are *both* multiples of 3, though, +they can match to create emphasis: + +```````````````````````````````` example +foo***bar***baz +. +

                              foobarbaz

                              +```````````````````````````````` + +```````````````````````````````` example +foo******bar*********baz +. +

                              foobar***baz

                              +```````````````````````````````` + + Indefinite levels of nesting are possible: ```````````````````````````````` example -- cgit 0.0.5-2-1-g0f52 From 41c6d276efa621054225433a75330a32ef5e022a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 25 Mar 2019 22:06:50 -0700 Subject: Update test/spec.txt --- test/spec.txt | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index ffa0f9cdcc..a53e762ef9 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -328,8 +328,10 @@ that is not a [whitespace character]. An [ASCII punctuation character](@) is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, -`*`, `+`, `,`, `-`, `.`, `/`, `:`, `;`, `<`, `=`, `>`, `?`, `@`, -`[`, `\`, `]`, `^`, `_`, `` ` ``, `{`, `|`, `}`, or `~`. +`*`, `+`, `,`, `-`, `.`, `/` (U+0021–2F), +`:`, `;`, `<`, `=`, `>`, `?`, `@` (U+003A–0040), +`[`, `\`, `]`, `^`, `_`, `` ` `` (U+005B–0060), +`{`, `|`, `}`, or `~` (U+007B–007E). A [punctuation character](@) is an [ASCII punctuation character] or anything in @@ -2005,15 +2007,15 @@ Closing code fences cannot have [info strings]: An [HTML block](@) is a group of lines that is treated as raw HTML (and will not be escaped in HTML output). -There are seven kinds of [HTML block], which can be defined -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 or other [container block](#container-blocks)), 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. +There are seven kinds of [HTML block], which can be defined 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, or the last line of +the [container block](#container-blocks) containing the current HTML +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. 1. **Start condition:** line begins with the string ``.\ **End condition:** line is followed by a [blank line]. 7. **Start condition:** line begins with a complete [open tag] -or [closing tag] (with any [tag name] other than `script`, -`style`, or `pre`) followed only by [whitespace] -or the end of the line.\ +(with any [tag name] other than `script`, +`style`, or `pre`) or a complete [closing tag], +followed only by [whitespace] or the end of the line.\ **End condition:** line is followed by a [blank line]. HTML blocks continue until they are closed by their appropriate @@ -9546,7 +9548,7 @@ closers: of the delimiter stack. If the closing node is removed, reset `current_position` to the next element in the stack. -- If none in found: +- If none is found: + Set `openers_bottom` to the element before `current_position`. (We know that there are no openers for this kind of closer up to and -- cgit 0.0.5-2-1-g0f52 From 549a713808004d50282e2ff77f25f5e6116020b8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 25 Mar 2019 22:06:55 -0700 Subject: Add regression test for #517. --- test/regression.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/regression.txt b/test/regression.txt index 4ec2c25e13..a6fb69424e 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -129,3 +129,19 @@ Issue commonmark#526 - unescaped ( in link title .

                              [link](url ((title))

                              ```````````````````````````````` + +Issue commonamrk#517 - script, pre, style close tag without +opener. + +```````````````````````````````` example + + + + + +. + + + +```````````````````````````````` + -- cgit 0.0.5-2-1-g0f52 From ec97a06d8a2b458258f9c694181bbfb14fb6a20a Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 26 Mar 2019 12:19:50 -0700 Subject: Update regression tests in light of recent spec changes... affecting link destinations. --- test/regression.txt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/test/regression.txt b/test/regression.txt index a6fb69424e..62b1e7efe0 100644 --- a/test/regression.txt +++ b/test/regression.txt @@ -81,7 +81,8 @@ Issue #193 - unescaped left angle brackets in link destination [a]: . -

                              a

                              +

                              [a]

                              +

                              [a]: <te

                              ```````````````````````````````` Issue #192 - escaped spaces in link destination @@ -118,8 +119,9 @@ Issue #530 - link parsing corner cases ) .

                              [a](\ b)

                              -

                              a

                              -

                              a

                              +

                              [a](<<b)

                              +

                              [a](<b +)

                              ```````````````````````````````` Issue commonmark#526 - unescaped ( in link title @@ -145,3 +147,10 @@ opener. ```````````````````````````````` +Issue #289. + +```````````````````````````````` example +[a]( +. +

                              [a](<b) c>

                              +```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From e3990d751b96dbaa91ca9cdb20749c9002402ff6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 26 Mar 2019 12:20:08 -0700 Subject: Update spec.txt. --- test/spec.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index a53e762ef9..41629384dc 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -7338,12 +7338,13 @@ A [link destination](@) consists of either closing `>` that contains no line breaks or unescaped `<` or `>` characters, or -- a nonempty sequence of characters that does not include - ASCII space or control characters, and includes parentheses - only if (a) they are backslash-escaped or (b) they are part of - a balanced pair of unescaped parentheses. (Implementations - may impose limits on parentheses nesting to avoid performance - issues, but at least three levels of nesting should be supported.) +- a nonempty sequence of characters that does not start with + `<`, does not include ASCII space or control characters, and + includes parentheses only if (a) they are backslash-escaped or + (b) they are part of a balanced pair of unescaped parentheses. + (Implementations may impose limits on parentheses nesting to + avoid performance issues, but at least three levels of nesting + should be supported.) A [link title](@) consists of either @@ -7446,7 +7447,7 @@ Pointy brackets that enclose links must be unescaped: ```````````````````````````````` example [link]() . -

                              link

                              +

                              [link](<foo>)

                              ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From faf7ab378518b6ad8792603a41c641cb13b2ff83 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 26 Mar 2019 12:20:15 -0700 Subject: Fix #289. A link destination can't start with `<` unless it is an angle-bracket link that also ends with `>`. (If your URL really starts with `<`, URL-escape it.) --- src/inlines.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 6e92aff24e..6f93fd49a2 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -967,13 +967,10 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, } else if (input->data[i] == '\\') i += 2; else if (input->data[i] == '\n' || input->data[i] == '<') - return manual_scan_link_url_2(input, offset, output); + return -1; else ++i; } - if (i >= input->len) { - return manual_scan_link_url_2(input, offset, output); - } } else { return manual_scan_link_url_2(input, offset, output); } -- cgit 0.0.5-2-1-g0f52 From 8ceba9fbde543f3b1711c0ebf476f16d3b606da5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 28 Mar 2019 21:29:00 -0700 Subject: Remove leftover includes of memory.h. Closes #290. --- src/buffer.c | 1 - src/chunk.h | 1 - src/iterator.h | 1 - src/main.c | 1 - src/parser.h | 1 - src/references.h | 1 - src/render.h | 1 - 7 files changed, 7 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index a237b11b35..d94649310f 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -10,7 +10,6 @@ #include "config.h" #include "cmark_ctype.h" #include "buffer.h" -#include "memory.h" /* Used as default value for cmark_strbuf->ptr so that people can always * assume ptr is non-NULL and zero terminated even for new cmark_strbufs. diff --git a/src/chunk.h b/src/chunk.h index f198be34ad..6d1601d24b 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -6,7 +6,6 @@ #include #include "cmark.h" #include "buffer.h" -#include "memory.h" #include "cmark_ctype.h" #define CMARK_CHUNK_EMPTY \ diff --git a/src/iterator.h b/src/iterator.h index fc745df5bb..30ce76f519 100644 --- a/src/iterator.h +++ b/src/iterator.h @@ -6,7 +6,6 @@ extern "C" { #endif #include "cmark.h" -#include "memory.h" typedef struct { cmark_event_type ev_type; diff --git a/src/main.c b/src/main.c index 29360dcc88..ab0d93c3db 100644 --- a/src/main.c +++ b/src/main.c @@ -3,7 +3,6 @@ #include #include #include "config.h" -#include "memory.h" #include "cmark.h" #include "node.h" diff --git a/src/parser.h b/src/parser.h index 39e2327a52..f41f09960f 100644 --- a/src/parser.h +++ b/src/parser.h @@ -5,7 +5,6 @@ #include "references.h" #include "node.h" #include "buffer.h" -#include "memory.h" #ifdef __cplusplus extern "C" { diff --git a/src/references.h b/src/references.h index f075bbbd9e..8d3631f34d 100644 --- a/src/references.h +++ b/src/references.h @@ -1,7 +1,6 @@ #ifndef CMARK_REFERENCES_H #define CMARK_REFERENCES_H -#include "memory.h" #include "chunk.h" #ifdef __cplusplus diff --git a/src/render.h b/src/render.h index 35eb0a65db..ab1103982f 100644 --- a/src/render.h +++ b/src/render.h @@ -8,7 +8,6 @@ extern "C" { #include #include "buffer.h" #include "chunk.h" -#include "memory.h" typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping; -- cgit 0.0.5-2-1-g0f52 From 732207b00176856dd8101a27e8d31a90926fa4da Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Apr 2019 10:24:29 -0700 Subject: Update spec --- test/spec.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 41629384dc..4a3923ecab 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -2894,6 +2894,17 @@ The link destination may not be omitted: .

                              [foo]:

                              [foo]

                              +```````````````````````````````` + + However, an empty link destination may be specified using + angle brackets: + +```````````````````````````````` example +[foo]: <> + +[foo] +. +

                              foo

                              ```````````````````````````````` The title must be separated from the link destination by -- cgit 0.0.5-2-1-g0f52 From c56aa1514f04a5e369b35e92cf56186575a40af1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 3 Apr 2019 10:24:32 -0700 Subject: Allow empty `<>` link destination in reference link. --- src/inlines.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 6f93fd49a2..458ab72b42 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -938,10 +938,14 @@ static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, break; --nb_p; ++i; - } else if (cmark_isspace(input->data[i])) + } else if (cmark_isspace(input->data[i])) { + if (i == offset) { + return -1; + } break; - else + } else { ++i; + } } if (i >= input->len) @@ -1337,8 +1341,7 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input, // parse link url: spnl(&subj); - if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1 && - url.len > 0) { + if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1) { subj.pos += matchlen; } else { return 0; -- cgit 0.0.5-2-1-g0f52 From cffc51b19828d67b246cb367da3b8b45270e5a62 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Apr 2019 22:05:00 -0700 Subject: Update spec. --- test/spec.txt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 4a3923ecab..63843909ad 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -248,7 +248,7 @@ satisfactory replacement for a spec. Because there is no unambiguous spec, implementations have diverged considerably. As a result, users are often surprised to find that -a document that renders one way on one system (say, a github wiki) +a document that renders one way on one system (say, a GitHub wiki) renders differently on another (say, converting to docbook using pandoc). To make matters worse, because nothing in Markdown counts as a "syntax error," the divergence often isn't discovered right away. @@ -1872,7 +1872,7 @@ Code fences (opening and closing) cannot contain internal spaces: ``` ``` aaa . -

                              +

                              aaa

                              ```````````````````````````````` @@ -5758,7 +5758,8 @@ following ways: - First, [line endings] are converted to [spaces]. - If the resulting string both begins *and* ends with a [space] - character, a single [space] character is removed from the + character, but does not consist entirely of [space] + characters, a single [space] character is removed from the front and back. This allows you to include code that begins or ends with backtick characters, which must be separated by whitespace from the opening or closing backtick strings. @@ -5818,6 +5819,16 @@ stripped in this way:

                               b 

                              ```````````````````````````````` +No stripping occurs if the code span contains only spaces: + +```````````````````````````````` example +` ` +` ` +. +

                                +

                              +```````````````````````````````` + [Line endings] are treated like spaces: -- cgit 0.0.5-2-1-g0f52 From 4bb756a98c0982b8b39b4eee8091e1a5f60d7111 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 4 Apr 2019 22:05:12 -0700 Subject: Update code span normalization... to conform with spec change. --- src/inlines.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/inlines.c b/src/inlines.c index 458ab72b42..e6b491ffa1 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -324,9 +324,11 @@ static bufsize_t scan_to_closing_backticks(subject *subj, } // Destructively modify string, converting newlines to -// spaces, then removing a single leading + trailing space. +// spaces, then removing a single leading + trailing space, +// unless the code span consists entirely of space characters. static void S_normalize_code(cmark_strbuf *s) { bufsize_t r, w; + bool contains_nonspace = false; for (r = 0, w = 0; r < s->size; ++r) { switch (s->ptr[r]) { @@ -341,10 +343,14 @@ static void S_normalize_code(cmark_strbuf *s) { default: s->ptr[w++] = s->ptr[r]; } + if (s->ptr[r] != ' ') { + contains_nonspace = true; + } } // begins and ends with space? - if (s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') { + if (contains_nonspace && + s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') { cmark_strbuf_drop(s, 1); cmark_strbuf_truncate(s, w - 2); } else { -- cgit 0.0.5-2-1-g0f52 From 6f1f4e312016261143b3ebf91e35a1ddb805cdf1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 10:18:56 -0700 Subject: Update spec. --- test/spec.txt | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 7 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index 63843909ad..4ca3aa0104 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5601,13 +5601,23 @@ foo ## Entity and numeric character references -All valid HTML entity references and numeric character -references, except those occurring in code blocks and code spans, -are recognized as such and treated as equivalent to the -corresponding Unicode characters. Conforming CommonMark parsers -need not store information about whether a particular character -was represented in the source using a Unicode character or -an entity reference. +Valid HTML entity references and numeric character references +can be used in place of the corresponding Unicode character, +with the following exceptions: + +- Entity and character references are not recognized in code + blocks and code spans. + +- Entity and character references cannot stand in place of + special characters that define structural elements in + CommonMark. For example, although `*` can be used + in place of a literal `*` character, `*` cannot replace + `*` in emphasis delimiters, bullet list markers, or thematic + breaks. + +Conforming CommonMark parsers need not store information about +whether a particular character was represented in the source +using a Unicode character or an entity reference. [Entity references](@) consist of `&` + any of the valid HTML5 entity names + `;`. The @@ -5745,6 +5755,51 @@ text in code spans and code blocks: ```````````````````````````````` +Entity and numeric character references cannot be used +in place of symbols indicating structure in CommonMark +documents. + +```````````````````````````````` example +*foo* +*foo* +. +

                              *foo* +foo

                              +```````````````````````````````` + +```````````````````````````````` example +* foo + +* foo +. +

                              * foo

                              +
                                +
                              • foo
                              • +
                              +```````````````````````````````` + +```````````````````````````````` example +foo bar +. +

                              foo + +bar

                              +```````````````````````````````` + +```````````````````````````````` example + foo +. +

                              →foo

                              +```````````````````````````````` + + +```````````````````````````````` example +[a](url "tit") +. +

                              [a](url "tit")

                              +```````````````````````````````` + + ## Code spans A [backtick string](@) @@ -7464,6 +7519,15 @@ bar>) bar>)

                              ```````````````````````````````` +The destination can contain `)` if it is enclosed +in pointy brackets: + +```````````````````````````````` example +[a]() +. +

                              a

                              +```````````````````````````````` + Pointy brackets that enclose links must be unescaped: ```````````````````````````````` example @@ -7472,6 +7536,18 @@ Pointy brackets that enclose links must be unescaped:

                              [link](<foo>)

                              ```````````````````````````````` +These are not links, because the opening pointy bracket +is not matched properly: + +```````````````````````````````` example +[a]( +[a](c) +. +

                              [a](<b)c +[a](<b)c> +[a](c)

                              +```````````````````````````````` Parentheses inside the link destination may be escaped: -- cgit 0.0.5-2-1-g0f52 From becfb75e9f2f85cfff18aec49fd96e252f737eb2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 10:19:12 -0700 Subject: render: only emit actual newline when escape mode is LITERAL. For markdown content, e.g., in other contexts we want some kind of escaping, not a literal newline. --- src/render.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/render.c b/src/render.c index a73d6f8bc0..fdd73df1c1 100644 --- a/src/render.c +++ b/src/render.c @@ -82,21 +82,23 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap, } } - } else if (c == 10) { - cmark_strbuf_putc(renderer->buffer, '\n'); - renderer->column = 0; - renderer->begin_line = true; - renderer->begin_content = true; - renderer->last_breakable = 0; } else if (escape == LITERAL) { - cmark_render_code_point(renderer, c); - renderer->begin_line = false; - // we don't set 'begin_content' to false til we've - // finished parsing a digit. Reason: in commonmark - // we need to escape a potential list marker after - // a digit: - renderer->begin_content = - renderer->begin_content && cmark_isdigit(c) == 1; + if (c == 10) { + cmark_strbuf_putc(renderer->buffer, '\n'); + renderer->column = 0; + renderer->begin_line = true; + renderer->begin_content = true; + renderer->last_breakable = 0; + } else { + cmark_render_code_point(renderer, c); + renderer->begin_line = false; + // we don't set 'begin_content' to false til we've + // finished parsing a digit. Reason: in commonmark + // we need to escape a potential list marker after + // a digit: + renderer->begin_content = + renderer->begin_content && cmark_isdigit(c) == 1; + } } else { (renderer->outc)(renderer, escape, c, nextc); renderer->begin_line = false; -- cgit 0.0.5-2-1-g0f52 From 6122d5cc3c5e5e8f94f203daddfd38a36be7aed4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 10:20:02 -0700 Subject: commonmark renderer: improve escaping. URL-escape special characters when escape mode is URL, and not otherwise. Entity-escape control characters (< 0x20) in non-literal escape modes. --- src/commonmark.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/commonmark.c b/src/commonmark.c index 0db0f34ffd..404c2903c8 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -32,7 +32,8 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, needs_escaping = c < 0x80 && escape != LITERAL && ((escape == NORMAL && - (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || + (c < 0x20 || + c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' || (c == '&' && cmark_isalpha(nextc)) || (c == '!' && nextc == '[') || (renderer->begin_content && (c == '-' || c == '+' || c == '=') && @@ -48,14 +49,18 @@ static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\'))); if (needs_escaping) { - if (cmark_isspace(c)) { + if (escape == URL && cmark_isspace(c)) { // use percent encoding for spaces - snprintf(encoded, ENCODED_SIZE, "%%%2x", c); + snprintf(encoded, ENCODED_SIZE, "%%%2X", c); cmark_strbuf_puts(renderer->buffer, encoded); renderer->column += 3; - } else { + } else if (cmark_ispunct(c)) { cmark_render_ascii(renderer, "\\"); cmark_render_code_point(renderer, c); + } else { // render as entity + snprintf(encoded, ENCODED_SIZE, "&#%d;", c); + cmark_strbuf_puts(renderer->buffer, encoded); + renderer->column += strlen(encoded); } } else { cmark_render_code_point(renderer, c); -- cgit 0.0.5-2-1-g0f52 From 7126694b85bd1f5ba6533b81b2565f276d1da503 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 11:17:07 -0700 Subject: Resolve link references before creating setext header. A setext header line after a link reference should not create a header, according to the spec. See commonmark/commonmark-spec#395. --- src/blocks.c | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/blocks.c b/src/blocks.c index 804ad8220b..b6077eb961 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -229,11 +229,30 @@ static bool S_ends_with_blank_line(cmark_node *node) { } } +// returns true if content remains after link defs are resolved. +static bool resolve_reference_link_definitions( + cmark_parser *parser, + cmark_node *b) { + bufsize_t pos; + cmark_strbuf *node_content = &b->content; + cmark_chunk chunk = {node_content->ptr, node_content->size, 0}; + while (chunk.len && chunk.data[0] == '[' && + (pos = cmark_parse_reference_inline(parser->mem, &chunk, + parser->refmap))) { + + chunk.data += pos; + chunk.len -= pos; + } + cmark_strbuf_drop(node_content, (node_content->size - chunk.len)); + return !is_blank(&b->content, 0); +} + static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { bufsize_t pos; cmark_node *item; cmark_node *subitem; cmark_node *parent; + bool has_content; parent = b->parent; assert(b->flags & @@ -263,15 +282,8 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { switch (S_type(b)) { case CMARK_NODE_PARAGRAPH: { - cmark_chunk chunk = {node_content->ptr, node_content->size, 0}; - while (chunk.len && chunk.data[0] == '[' && - (pos = cmark_parse_reference_inline(parser->mem, &chunk, parser->refmap))) { - - chunk.data += pos; - chunk.len -= pos; - } - cmark_strbuf_drop(node_content, (node_content->size - chunk.len)); - if (is_blank(node_content, 0)) { + has_content = resolve_reference_link_definitions(parser, b); + if (!has_content) { // remove blank node (former reference def) cmark_node_free(b); } @@ -905,6 +917,7 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, bufsize_t matched = 0; int lev = 0; bool save_partially_consumed_tab; + bool has_content; int save_offset; int save_column; @@ -977,10 +990,16 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH && (lev = scan_setext_heading_line(input, parser->first_nonspace))) { - (*container)->type = (uint16_t)CMARK_NODE_HEADING; - (*container)->as.heading.level = lev; - (*container)->as.heading.setext = true; - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); + // finalize paragraph, resolving reference links + has_content = resolve_reference_link_definitions(parser, *container); + + if (has_content) { + + (*container)->type = (uint16_t)CMARK_NODE_HEADING; + (*container)->as.heading.level = lev; + (*container)->as.heading.setext = true; + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); + } } else if (!indented && !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && (parser->thematic_break_kill_pos <= parser->first_nonspace) && -- cgit 0.0.5-2-1-g0f52 From 5901a8700443bf08e36b90b42d9e095202be5a02 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 21:42:23 -0700 Subject: Update spec. --- test/spec.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 4ca3aa0104..958ca6491a 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3076,6 +3076,25 @@ and thematic breaks, and it need not be followed by a blank line. ```````````````````````````````` +```````````````````````````````` example +[foo]: /url +bar +=== +[foo] +. +

                              bar

                              +

                              foo

                              +```````````````````````````````` + +```````````````````````````````` example +[foo]: /url +=== +[foo] +. +

                              === +foo

                              +```````````````````````````````` + Several [link reference definitions] can occur one after another, without intervening blank lines. -- cgit 0.0.5-2-1-g0f52 From b93c3884b7e1ff3ff6d94551b2f822aa416691ef Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 21:55:04 -0700 Subject: Update spec. --- test/spec.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/spec.txt b/test/spec.txt index 958ca6491a..c7dce2f9d8 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -3131,6 +3131,17 @@ are defined: ```````````````````````````````` +Whether something is a [link reference definition] is +independent of whether the link reference it defines is +used in the document. Thus, for example, the following +document contains just a link reference definition, and +no visible content: + +```````````````````````````````` example +[foo]: /url +. +```````````````````````````````` + ## Paragraphs -- cgit 0.0.5-2-1-g0f52 From 5d4928aff83efdb329574d238e9c3719b4771b13 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 23:24:19 -0700 Subject: Update spec. --- test/spec.txt | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index c7dce2f9d8..31e1714dd8 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -1,8 +1,8 @@ --- title: CommonMark Spec author: John MacFarlane -version: 0.28 -date: '2017-08-01' +version: 0.29 +date: '2019-04-06' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' ... @@ -827,7 +827,7 @@ Contents are parsed as inlines: ```````````````````````````````` -Leading and trailing blanks are ignored in parsing inline content: +Leading and trailing [whitespace] is ignored in parsing inline content: ```````````````````````````````` example # foo @@ -1026,6 +1026,20 @@ baz* baz ```````````````````````````````` +The contents are the result of parsing the headings's raw +content as inlines. The heading's raw content is formed by +concatenating the lines and removing initial and final +[whitespace]. + +```````````````````````````````` example + Foo *bar +baz*→ +==== +. +

                              Foo bar +baz

                              +```````````````````````````````` + The underlining can be any length: @@ -5488,10 +5502,10 @@ Thus, for example, in

                              hilo`

                              ```````````````````````````````` - `hi` is parsed as code, leaving the backtick at the end as a literal backtick. + ## Backslash escapes Any ASCII punctuation character may be backslash-escaped: @@ -8686,7 +8700,7 @@ If you want a link after a literal `!`, backslash-escape the as the link label. A [URI autolink](@) consists of `<`, followed by an -[absolute URI] not containing `<`, followed by `>`. It is parsed as +[absolute URI] followed by `>`. It is parsed as a link to the URI, with the URI as the link's label. An [absolute URI](@), -- cgit 0.0.5-2-1-g0f52 From c64f1abf99f0f2b3bf063112c4675c70a4dce562 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 6 Apr 2019 23:25:11 -0700 Subject: Bump version to 0.29.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c438b6ea7..1107fb3083 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.0) -project(cmark VERSION 0.28.3) +project(cmark VERSION 0.29.0) include("FindAsan.cmake") -- cgit 0.0.5-2-1-g0f52 From 5713f6b25adf37c528c73c34527a165c7ba68be8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 7 Apr 2019 08:40:02 -0700 Subject: Update spec. --- test/spec.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 31e1714dd8..3913de4424 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5539,6 +5539,7 @@ not have their usual Markdown meanings: \* not a list \# not a heading \[foo]: /url "not a reference" +\ö not a character entity .

                              *not emphasized* <br/> not a tag @@ -5547,7 +5548,8 @@ not have their usual Markdown meanings: 1. not a list * not a list # not a heading -[foo]: /url "not a reference"

                              +[foo]: /url "not a reference" +&ouml; not a character entity

                              ```````````````````````````````` -- cgit 0.0.5-2-1-g0f52 From c6a8c30c228c32b3b32442eeb39d33b64db56f4f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 7 Apr 2019 08:56:29 -0700 Subject: For afl target, don't build tests. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 47ac06f3f5..84c2e2f350 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ prof: afl: @[ -n "$(AFL_PATH)" ] || { echo '$$AFL_PATH not set'; false; } mkdir -p $(BUILDDIR) - cd $(BUILDDIR) && cmake .. -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-clang + cd $(BUILDDIR) && cmake .. -DCMARK_TESTS=0 -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-clang $(MAKE) $(AFL_PATH)/afl-fuzz \ -i test/afl_test_cases \ -- cgit 0.0.5-2-1-g0f52 From 19ef912c1fe587a099f0f8488f8f0ff86002698b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 7 Apr 2019 22:27:59 -0700 Subject: Updaet changelog. --- changelog.txt | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/changelog.txt b/changelog.txt index 33cff540a7..8d01bbd247 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,130 @@ +[0.29.0] + + * Update spec to 0.29. + * Makefile: For afl target, don't build tests. + * Resolve link references before creating setext header. + A setext header line after a link reference should not + create a header, according to the spec. + * commonmark renderer: improve escaping. + URL-escape special characters when escape mode is URL, and not otherwise. + Entity-escape control characters (< 0x20) in non-literal escape modes. + * render: only emit actual newline when escape mode is LITERAL. + For markdown content, e.g., in other contexts we want some + kind of escaping, not a literal newline. + * Update code span normalization to conform with spec change. + * Allow empty `<>` link destination in reference link. + * Remove leftover includes of memory.h (#290). + * A link destination can't start with `<` unless it is + an angle-bracket link that also ends with `>` (#289). + (If your URL really starts with `<`, URL-escape it.) + * Allow internal delimiter runs to match if both have lengths that are + multiples of 3. See commonmark/commonmark#528. + * Include references.h in parser.h (#287). + * Fix `[link]()`. + * build: Remove deprecated call to `add_compiler_export_flags()` + (Jonathan Müller). It is deprecated in CMake 3.0, the replacement is to + set the CXX_VISIBILITY_PRESET (or in our case C_VISIBILITY_PRESET) and + VISIBILITY_INLINES_HIDDEN properties of the target. We're already setting + them by setting the CMake variables anyway, so the call can be removed. + * Bump CMake to version 3 (Jonathan Müller). + * Make rendering safe by default (#239, #273). + Adds CMARK_OPT_UNSAFE and make CMARK_OPT_SAFE a no-op (for API + compatibility). The new default behavior is to suppress raw HTML and + potentially dangerous links. The CMARK_OPT_UNSAFE option has to be set + explicitly to prevent this. + NOTE: This change will require modifications in bindings for cmark and + in most libraries and programs that use cmark. + Borrows heavily from @kivikakk's patch in github/cmark-gfm#123. + * Use hand-rolled scanner for thematic break (see #284). + Keep track of the last position where a thematic break + failed to match on a line, to avoid rescanning unnecessarily. + * Rename ends_with_blank_line with S_ prefix. + * Add CMARK_NODE__LAST_LINE_CHECKED flag (#284). + Use this to avoid unnecessary recursion in ends_with_blank_line. + * In ends_with_blank_line, call S_set_last_line_blank + to avoid unnecessary repetition (#284). Once we settle whether a list + item ends in a blank line, we don't need to revisit this in considering + parent list items. + * Disallow unescaped `(` in parenthesized link title. + * Use pledge(2) on OpenBSD (Ashe Connor). + * Update the Racket wrapper (Eli Barzilay). + * Copy line/col info straight from opener/closer (Ashe Connor). + We can't rely on anything in `subj` since it's been modified while parsing + the subject and could represent line info from a future line. This is + simple and works. + * render.c: reset last_breakable after cr. Fixes jgm/pandoc#5033. + * Fix a typo in houdini_href_e.c (Felix Yan). + * commonmark writer: use `~~~` fences if info string contains backtick. + This is needed for round-trip tests. + * Update scanners for new info string rules. + * Minor fixes to xml2md.xsl (Nick Wellnhofer). Remove outdated comment + Fix code block delimiter + * XSLT stylesheet to convert cmark XML back to Commonmark (Nick Wellnhofer, + #264). Initial version of an XSLT stylesheet that converts the XML format + produced by `cmark -t xml` back to Commonmark. + * Check for whitespace before reference title (#263). + * Build: only attempt to install MSVC system libraries on Windows + (Saleem Abdulrasool). Newer versions of CMake attempt to query the system + for information about the VS 2017 installation. Unfortunately, this query + fails on non-Windows systems when cross-compiling: + cmake_host_system_information does not recognize VS_15_DIR + CMake will not find these system libraries on non-Windows hosts anyways, + and we were silencing the warnings, so simply omit the installation when + cross-compiling to Windows. + * Simplify code normalization, in line with spec change. + * Implement code span spec changes. These affect both parsing and writing + commonmark. + * entity_tests.py - omit noisy success output. + * Add link parsing corner cases to regressions (Ashe Connor). + * Add xml:space="preserve" in XML output when appropriate + (Nguyễn Thái Ngọc Duy). + (For text, code, code_block, html_inline and html_block tags.) + * Removed meta from list of block tags. Added regression test. + See commonmark/CommonMark#527. + * pathological_tests.py: make tests run faster. + Commented out the (already ignored) "many references" test, which + times out. Reduced the iterations for a couple other tests. + * pathological_tests.py: added test for deeply nested lists. + * Optimize S_find_first_nonspace. We were needlessly redoing things we'd + already done. Now we skip the work if the first nonspace is greater than + the current offset. This fixes pathological slowdown with deeply nested + lists (#255). For N = 3000, the time goes from over 17s to about 0.7s. + Thanks to Martin Mitas for diagnosing the problem. + * Allow spaces in link destination delimited with pointy brackets. + * Adjust max length of decimal/numeric entities. + See commonmark/CommonMark#487. + * Fix inline raw HTML parsing. + This fixes a recently added failing spec test case. Previously spaces + were being allowed in unquoted attribute values; no we forbid them. + * Don't allow list markers to be indented >= 4 spaces. + See commonmark/CommonMark#497. + * Fuzz width parameter too (Phil Turnbull). Allow the `width` parameter to + be generated too so we get better fuzz-coverage. + * Don't discard empty fuzz test-cases (Phil Turnbull). We currently discard + fuzz test-cases that are empty but empty inputs are valid markdown. This + improves the fuzzing coverage slightly. + * Check for empty buffer when rendering (Phil Turnbull). + For empty documents, `->size` is zero so + `renderer.buffer->ptr[renderer.buffer->size - 1]` will cause an + out-of-bounds read. Empty buffers always point to the global + `cmark_strbuf__initbuf` buffer so we read `cmark_strbuf__initbuf[-1]`. + * Also run API tests with CMARK_SHARED=OFF (Nick Wellnhofer). + * Rename roundtrip and entity tests (Nick Wellnhofer). + Rename the tests to reflect that they use the library, not the + executable. + * Generate export header for static-only build (#247, Nick Wellnhofer). + * Fixed exit code for pathological tests. + * Add allowed failures to pathological_tests.py. + This allows us to include tests that we don't yet know + how to pass. + * Add timeout to pathological_tests.py. + Tests must complete in 8 seconds or are errors. + * Refactored pathological_tests.py. + * Add more pathological tests (Martin Mitas). + These tests target the issues #214, #218, #220. + * Add sourcepos info for inlines (Yuki Izumi). + * Disallow more than 32 nested balanced parens in a link (Yuki Izumi). + [0.28.3] * Include GNUInstallDirs in src/CMakeLists.txt (Nick Wellnhofer, #240). -- cgit 0.0.5-2-1-g0f52 From 8daa6b1495124f0b67e6034130e12d7be83e38bd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 8 Apr 2019 10:25:25 -0700 Subject: Revise changelog --- changelog.txt | 95 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/changelog.txt b/changelog.txt index 8d01bbd247..be961a7507 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,7 +1,16 @@ [0.29.0] * Update spec to 0.29. - * Makefile: For afl target, don't build tests. + * Make rendering safe by default (#239, #273). + Adds `CMARK_OPT_UNSAFE` and make `CMARK_OPT_SAFE` a no-op (for API + compatibility). The new default behavior is to suppress raw HTML and + potentially dangerous links. The `CMARK_OPT_UNSAFE` option has to be set + explicitly to prevent this. + **NOTE:** This change will require modifications in bindings for cmark + and in most libraries and programs that use cmark. + Borrows heavily from @kivikakk's patch in github/cmark-gfm#123. + * Add sourcepos info for inlines (Yuki Izumi). + * Disallow more than 32 nested balanced parens in a link (Yuki Izumi). * Resolve link references before creating setext header. A setext header line after a link reference should not create a header, according to the spec. @@ -13,79 +22,68 @@ kind of escaping, not a literal newline. * Update code span normalization to conform with spec change. * Allow empty `<>` link destination in reference link. - * Remove leftover includes of memory.h (#290). + * Remove leftover includes of `memory.h` (#290). * A link destination can't start with `<` unless it is an angle-bracket link that also ends with `>` (#289). (If your URL really starts with `<`, URL-escape it.) * Allow internal delimiter runs to match if both have lengths that are multiples of 3. See commonmark/commonmark#528. - * Include references.h in parser.h (#287). + * Include `references.h` in `parser.h` (#287). * Fix `[link]()`. - * build: Remove deprecated call to `add_compiler_export_flags()` - (Jonathan Müller). It is deprecated in CMake 3.0, the replacement is to - set the CXX_VISIBILITY_PRESET (or in our case C_VISIBILITY_PRESET) and - VISIBILITY_INLINES_HIDDEN properties of the target. We're already setting - them by setting the CMake variables anyway, so the call can be removed. - * Bump CMake to version 3 (Jonathan Müller). - * Make rendering safe by default (#239, #273). - Adds CMARK_OPT_UNSAFE and make CMARK_OPT_SAFE a no-op (for API - compatibility). The new default behavior is to suppress raw HTML and - potentially dangerous links. The CMARK_OPT_UNSAFE option has to be set - explicitly to prevent this. - NOTE: This change will require modifications in bindings for cmark and - in most libraries and programs that use cmark. - Borrows heavily from @kivikakk's patch in github/cmark-gfm#123. * Use hand-rolled scanner for thematic break (see #284). Keep track of the last position where a thematic break failed to match on a line, to avoid rescanning unnecessarily. - * Rename ends_with_blank_line with S_ prefix. - * Add CMARK_NODE__LAST_LINE_CHECKED flag (#284). - Use this to avoid unnecessary recursion in ends_with_blank_line. - * In ends_with_blank_line, call S_set_last_line_blank + * Rename `ends_with_blank_line` with `S_` prefix. + * Add `CMARK_NODE__LAST_LINE_CHECKED` flag (#284). + Use this to avoid unnecessary recursion in `ends_with_blank_line`. + * In `ends_with_blank_line`, call `S_set_last_line_blank` to avoid unnecessary repetition (#284). Once we settle whether a list item ends in a blank line, we don't need to revisit this in considering parent list items. * Disallow unescaped `(` in parenthesized link title. - * Use pledge(2) on OpenBSD (Ashe Connor). - * Update the Racket wrapper (Eli Barzilay). * Copy line/col info straight from opener/closer (Ashe Connor). We can't rely on anything in `subj` since it's been modified while parsing the subject and could represent line info from a future line. This is simple and works. - * render.c: reset last_breakable after cr. Fixes jgm/pandoc#5033. - * Fix a typo in houdini_href_e.c (Felix Yan). + * `render.c`: reset `last_breakable` after cr. Fixes jgm/pandoc#5033. + * Fix a typo in `houdini_href_e.c` (Felix Yan). * commonmark writer: use `~~~` fences if info string contains backtick. This is needed for round-trip tests. * Update scanners for new info string rules. - * Minor fixes to xml2md.xsl (Nick Wellnhofer). Remove outdated comment - Fix code block delimiter - * XSLT stylesheet to convert cmark XML back to Commonmark (Nick Wellnhofer, - #264). Initial version of an XSLT stylesheet that converts the XML format - produced by `cmark -t xml` back to Commonmark. + * Add XSLT stylesheet to convert cmark XML back to Commonmark + (Nick Wellnhofer, #264). Initial version of an XSLT stylesheet that + converts the XML format produced by `cmark -t xml` back to Commonmark. * Check for whitespace before reference title (#263). + * Bump CMake to version 3 (Jonathan Müller). + * Build: Remove deprecated call to `add_compiler_export_flags()` + (Jonathan Müller). It is deprecated in CMake 3.0, the replacement is to + set the `CXX_VISIBILITY_PRESET` (or in our case `C_VISIBILITY_PRESET`) and + `VISIBILITY_INLINES_HIDDEN` properties of the target. We're already + setting them by setting the CMake variables anyway, so the call can be + removed. * Build: only attempt to install MSVC system libraries on Windows (Saleem Abdulrasool). Newer versions of CMake attempt to query the system for information about the VS 2017 installation. Unfortunately, this query fails on non-Windows systems when cross-compiling: - cmake_host_system_information does not recognize VS_15_DIR + `cmake_host_system_information does not recognize VS_15_DIR`. CMake will not find these system libraries on non-Windows hosts anyways, and we were silencing the warnings, so simply omit the installation when cross-compiling to Windows. * Simplify code normalization, in line with spec change. * Implement code span spec changes. These affect both parsing and writing commonmark. - * entity_tests.py - omit noisy success output. * Add link parsing corner cases to regressions (Ashe Connor). - * Add xml:space="preserve" in XML output when appropriate + * Add `xml:space="preserve"` in XML output when appropriate (Nguyễn Thái Ngọc Duy). (For text, code, code_block, html_inline and html_block tags.) * Removed meta from list of block tags. Added regression test. See commonmark/CommonMark#527. - * pathological_tests.py: make tests run faster. + * `entity_tests.py` - omit noisy success output. + * `pathological_tests.py`: make tests run faster. Commented out the (already ignored) "many references" test, which times out. Reduced the iterations for a couple other tests. - * pathological_tests.py: added test for deeply nested lists. - * Optimize S_find_first_nonspace. We were needlessly redoing things we'd + * `pathological_tests.py`: added test for deeply nested lists. + * Optimize `S_find_first_nonspace`. We were needlessly redoing things we'd already done. Now we skip the work if the first nonspace is greater than the current offset. This fixes pathological slowdown with deeply nested lists (#255). For N = 3000, the time goes from over 17s to about 0.7s. @@ -98,32 +96,31 @@ were being allowed in unquoted attribute values; no we forbid them. * Don't allow list markers to be indented >= 4 spaces. See commonmark/CommonMark#497. - * Fuzz width parameter too (Phil Turnbull). Allow the `width` parameter to - be generated too so we get better fuzz-coverage. - * Don't discard empty fuzz test-cases (Phil Turnbull). We currently discard - fuzz test-cases that are empty but empty inputs are valid markdown. This - improves the fuzzing coverage slightly. * Check for empty buffer when rendering (Phil Turnbull). For empty documents, `->size` is zero so `renderer.buffer->ptr[renderer.buffer->size - 1]` will cause an out-of-bounds read. Empty buffers always point to the global `cmark_strbuf__initbuf` buffer so we read `cmark_strbuf__initbuf[-1]`. - * Also run API tests with CMARK_SHARED=OFF (Nick Wellnhofer). + * Also run API tests with `CMARK_SHARED=OFF` (Nick Wellnhofer). * Rename roundtrip and entity tests (Nick Wellnhofer). Rename the tests to reflect that they use the library, not the executable. * Generate export header for static-only build (#247, Nick Wellnhofer). + * Fuzz width parameter too (Phil Turnbull). Allow the `width` parameter to + be generated too so we get better fuzz-coverage. + * Don't discard empty fuzz test-cases (Phil Turnbull). We currently discard + fuzz test-cases that are empty but empty inputs are valid markdown. This + improves the fuzzing coverage slightly. * Fixed exit code for pathological tests. - * Add allowed failures to pathological_tests.py. - This allows us to include tests that we don't yet know - how to pass. - * Add timeout to pathological_tests.py. + * Add allowed failures to `pathological_tests.py`. + This allows us to include tests that we don't yet know how to pass. + * Add timeout to `pathological_tests.py`. Tests must complete in 8 seconds or are errors. - * Refactored pathological_tests.py. * Add more pathological tests (Martin Mitas). These tests target the issues #214, #218, #220. - * Add sourcepos info for inlines (Yuki Izumi). - * Disallow more than 32 nested balanced parens in a link (Yuki Izumi). + * Use pledge(2) on OpenBSD (Ashe Connor). + * Update the Racket wrapper (Eli Barzilay). + * Makefile: For afl target, don't build tests. [0.28.3] -- cgit 0.0.5-2-1-g0f52 From 03a0871bc118dd656ba849361a8bc09180b65c91 Mon Sep 17 00:00:00 2001 From: Marcus Ramse Date: Tue, 23 Apr 2019 11:18:47 +0200 Subject: Add built cmark.exe as an AppVeyor artifact --- appveyor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 0259323154..fa3fc8621a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -13,5 +13,9 @@ install: build_script: - 'tools\appveyor-build.bat' +artifacts: + - path: build/src/cmark.exe + name: cmark.exe + test_script: - 'nmake test' -- cgit 0.0.5-2-1-g0f52 From 75fab760d6fb75da225a1f0665034837e726f0c3 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 23 Apr 2019 13:09:22 +0200 Subject: Link executable with static or shared library If CMARK_STATIC is on (default), link the executable with the static library. This produces exactly the same result as compiling the library sources again and linking with the object files. If CMARK_STATIC is off, link the executable with the shared library. This wasn't supported before and should be the preferred way to package cmark on Linux distros. Building only a shared library and a statically linked executable isn't supported anymore but this doesn't seem useful. --- src/CMakeLists.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 10fcb1d8af..0aa0ee22f3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,10 +46,7 @@ set(LIBRARY_SOURCES ) set(PROGRAM "cmark") -set(PROGRAM_SOURCES - ${LIBRARY_SOURCES} - main.c - ) +set(PROGRAM_SOURCES main.c) include_directories(. ${CMAKE_CURRENT_BINARY_DIR}) @@ -60,9 +57,14 @@ include (GenerateExportHeader) add_executable(${PROGRAM} ${PROGRAM_SOURCES}) -# Disable the PUBLIC declarations when compiling the executable: -set_target_properties(${PROGRAM} PROPERTIES - COMPILE_FLAGS -DCMARK_STATIC_DEFINE) +if (CMARK_STATIC) + target_link_libraries(${PROGRAM} ${STATICLIBRARY}) + # Disable the PUBLIC declarations when compiling the executable: + set_target_properties(${PROGRAM} PROPERTIES + COMPILE_FLAGS -DCMARK_STATIC_DEFINE) +elseif (CMARK_SHARED) + target_link_libraries(${PROGRAM} ${LIBRARY}) +endif() # Check integrity of node structure when compiled as debug: set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DCMARK_DEBUG_NODES") -- cgit 0.0.5-2-1-g0f52 From f4895a6c6275c807415c3105db6cba325d579b83 Mon Sep 17 00:00:00 2001 From: Eric Pruitt Date: Wed, 29 May 2019 09:28:07 -0700 Subject: Remove "-rdynamic" flag for static builds (#300) cmake adds `-rdynamic` on linux, even for static builds. This commit removes it for linux builds by resetting `CMAKE_SHARED_LIBRARY_LINK_C_FLAGS`. --- CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1107fb3083..d9488dd2a1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,13 @@ option(CMARK_STATIC "Build static libcmark library" ON) option(CMARK_SHARED "Build shared libcmark library" ON) option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF) +# The Linux modules distributed with CMake add "-rdynamic" to the build flags +# which is incompatible with static linking under certain configurations. +# Unsetting CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ensures this does not happen. +if(CMARK_STATIC AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) +endif() + add_subdirectory(src) if(CMARK_TESTS AND (CMARK_SHARED OR CMARK_STATIC)) add_subdirectory(api_test) -- cgit 0.0.5-2-1-g0f52 From 8181cd0f134dff7e400ba93b5039089b113b0d3c Mon Sep 17 00:00:00 2001 From: Johel Ernesto Guerrero Peña Date: Sat, 1 Jun 2019 15:09:11 -0400 Subject: Clarify which backtick strings (#301) A code span can have more than its two surrounding ones, like ` `` `. --- test/spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec.txt b/test/spec.txt index 3913de4424..a09394ed73 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -5854,7 +5854,7 @@ preceded nor followed by a backtick. A [code span](@) begins with a backtick string and ends with a backtick string of equal length. The contents of the code span are -the characters between the two backtick strings, normalized in the +the characters between these two backtick strings, normalized in the following ways: - First, [line endings] are converted to [spaces]. -- cgit 0.0.5-2-1-g0f52 From 4cc902add66a152becf73ba35a89e4e8b39aa657 Mon Sep 17 00:00:00 2001 From: "Øyvind A. Holm" Date: Fri, 5 Jul 2019 15:22:04 +0200 Subject: print_usage(): Minor grammar fix, swap two words (#305) --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index ab0d93c3db..8454c796c1 100644 --- a/src/main.c +++ b/src/main.c @@ -39,7 +39,7 @@ void print_usage() { printf(" --nobreaks Render soft line breaks as spaces\n"); printf(" --unsafe Render raw HTML and dangerous URLs\n"); printf(" --smart Use smart punctuation\n"); - printf(" --validate-utf8 Replace UTF-8 invalid sequences with U+FFFD\n"); + printf(" --validate-utf8 Replace invalid UTF-8 sequences with U+FFFD\n"); printf(" --help, -h Print usage information\n"); printf(" --version Print version\n"); } -- cgit 0.0.5-2-1-g0f52 From ca83398c7aed70a73b010a6ce9366bac90b7c32d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 14 Oct 2019 08:53:24 -0700 Subject: Create FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..726f8b0371 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [jgm] -- cgit 0.0.5-2-1-g0f52 From d4711bb865a17dcefb3b0907c0d452ef49c33c16 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 11 Nov 2019 12:38:43 -0800 Subject: Updaet spec.txt. --- test/spec.txt | 6854 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 3432 insertions(+), 3422 deletions(-) diff --git a/test/spec.txt b/test/spec.txt index a09394ed73..1197d1ba57 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -326,6 +326,9 @@ A [space](@) is `U+0020`. A [non-whitespace character](@) is any character that is not a [whitespace character]. +An [ASCII control character](@) is a character between `U+0000–1F` (both +including) or `U+007F`. + An [ASCII punctuation character](@) is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, `*`, `+`, `,`, `-`, `.`, `/` (U+0021–2F), @@ -478,3903 +481,3653 @@ bar For security reasons, the Unicode character `U+0000` must be replaced with the REPLACEMENT CHARACTER (`U+FFFD`). -# Blocks and inlines - -We can think of a document as a sequence of -[blocks](@)---structural elements like paragraphs, block -quotations, lists, headings, rules, and code blocks. Some blocks (like -block quotes and list items) contain other blocks; others (like -headings and paragraphs) contain [inline](@) content---text, -links, emphasized text, images, code spans, and so on. -## Precedence +## Backslash escapes -Indicators of block structure always take precedence over indicators -of inline structure. So, for example, the following is a list with -two items, not a list with one item containing a code span: +Any ASCII punctuation character may be backslash-escaped: ```````````````````````````````` example -- `one -- two` +\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~ . -
                                -
                              • `one
                              • -
                              • two`
                              • -
                              +

                              !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

                              ```````````````````````````````` -This means that parsing can proceed in two steps: first, the block -structure of the document can be discerned; second, text lines inside -paragraphs, headings, and other block constructs can be parsed for inline -structure. The second step requires information about link reference -definitions that will be available only at the end of the first -step. Note that the first step requires processing lines in sequence, -but the second can be parallelized, since the inline parsing of -one block element does not affect the inline parsing of any other. - -## Container blocks and leaf blocks - -We can divide blocks into two types: -[container blocks](@), -which can contain other blocks, and [leaf blocks](@), -which cannot. - -# Leaf blocks +Backslashes before other characters are treated as literal +backslashes: -This section describes the different kinds of leaf block that make up a -Markdown document. +```````````````````````````````` example +\→\A\a\ \3\φ\« +. +

                              \→\A\a\ \3\φ\«

                              +```````````````````````````````` -## Thematic breaks -A line consisting of 0-3 spaces of indentation, followed by a sequence -of three or more matching `-`, `_`, or `*` characters, each followed -optionally by any number of spaces or tabs, forms a -[thematic break](@). +Escaped characters are treated as regular characters and do +not have their usual Markdown meanings: ```````````````````````````````` example -*** ---- -___ +\*not emphasized* +\
                              not a tag +\[not a link](/foo) +\`not code` +1\. not a list +\* not a list +\# not a heading +\[foo]: /url "not a reference" +\ö not a character entity . -
                              -
                              -
                              +

                              *not emphasized* +<br/> not a tag +[not a link](/foo) +`not code` +1. not a list +* not a list +# not a heading +[foo]: /url "not a reference" +&ouml; not a character entity

                              ```````````````````````````````` -Wrong characters: +If a backslash is itself escaped, the following character is not: ```````````````````````````````` example -+++ +\\*emphasis* . -

                              +++

                              +

                              \emphasis

                              ```````````````````````````````` +A backslash at the end of the line is a [hard line break]: + ```````````````````````````````` example -=== +foo\ +bar . -

                              ===

                              +

                              foo
                              +bar

                              ```````````````````````````````` -Not enough characters: +Backslash escapes do not work in code blocks, code spans, autolinks, or +raw HTML: ```````````````````````````````` example --- -** -__ +`` \[\` `` . -

                              -- -** -__

                              +

                              \[\`

                              ```````````````````````````````` -One to three spaces indent are allowed: - ```````````````````````````````` example - *** - *** - *** + \[\] . -
                              -
                              -
                              +
                              \[\]
                              +
                              ```````````````````````````````` -Four spaces is too many: - ```````````````````````````````` example - *** +~~~ +\[\] +~~~ . -
                              ***
                              +
                              \[\]
                               
                              ```````````````````````````````` ```````````````````````````````` example -Foo - *** + . -

                              Foo -***

                              +

                              http://example.com?find=\*

                              ```````````````````````````````` -More than three characters may be used: - ```````````````````````````````` example -_____________________________________ + . -
                              +
                              ```````````````````````````````` -Spaces are allowed between the characters: +But they work in all other contexts, including URLs and link titles, +link references, and [info strings] in [fenced code blocks]: ```````````````````````````````` example - - - - +[foo](/bar\* "ti\*tle") . -
                              +

                              foo

                              ```````````````````````````````` ```````````````````````````````` example - ** * ** * ** * ** +[foo] + +[foo]: /bar\* "ti\*tle" . -
                              +

                              foo

                              ```````````````````````````````` ```````````````````````````````` example -- - - - +``` foo\+bar +foo +``` . -
                              +
                              foo
                              +
                              ```````````````````````````````` -Spaces are allowed at the end: +## Entity and numeric character references -```````````````````````````````` example -- - - - -. -
                              -```````````````````````````````` +Valid HTML entity references and numeric character references +can be used in place of the corresponding Unicode character, +with the following exceptions: +- Entity and character references are not recognized in code + blocks and code spans. -However, no other characters may occur in the line: +- Entity and character references cannot stand in place of + special characters that define structural elements in + CommonMark. For example, although `*` can be used + in place of a literal `*` character, `*` cannot replace + `*` in emphasis delimiters, bullet list markers, or thematic + breaks. -```````````````````````````````` example -_ _ _ _ a +Conforming CommonMark parsers need not store information about +whether a particular character was represented in the source +using a Unicode character or an entity reference. -a------ +[Entity references](@) consist of `&` + any of the valid +HTML5 entity names + `;`. The +document +is used as an authoritative source for the valid entity +references and their corresponding code points. ----a--- +```````````````````````````````` example +  & © Æ Ď +¾ ℋ ⅆ +∲ ≧̸ . -

                              _ _ _ _ a

                              -

                              a------

                              -

                              ---a---

                              +

                                & © Æ Ď +¾ ℋ ⅆ +∲ ≧̸

                              ```````````````````````````````` -It is required that all of the [non-whitespace characters] be the same. -So, this is not a thematic break: +[Decimal numeric character +references](@) +consist of `&#` + a string of 1--7 arabic digits + `;`. A +numeric character reference is parsed as the corresponding +Unicode character. Invalid Unicode code points will be replaced by +the REPLACEMENT CHARACTER (`U+FFFD`). For security reasons, +the code point `U+0000` will also be replaced by `U+FFFD`. ```````````````````````````````` example - *-* +# Ӓ Ϡ � . -

                              -

                              +

                              # Ӓ Ϡ �

                              ```````````````````````````````` -Thematic breaks do not need blank lines before or after: +[Hexadecimal numeric character +references](@) consist of `&#` + +either `X` or `x` + a string of 1-6 hexadecimal digits + `;`. +They too are parsed as the corresponding Unicode character (this +time specified with a hexadecimal numeral instead of decimal). ```````````````````````````````` example -- foo -*** -- bar +" ആ ಫ . -
                                -
                              • foo
                              • -
                              -
                              -
                                -
                              • bar
                              • -
                              +

                              " ആ ಫ

                              ```````````````````````````````` -Thematic breaks can interrupt a paragraph: +Here are some nonentities: ```````````````````````````````` example -Foo -*** -bar +  &x; &#; &#x; +� +&#abcdef0; +&ThisIsNotDefined; &hi?; . -

                              Foo

                              -
                              -

                              bar

                              +

                              &nbsp &x; &#; &#x; +&#87654321; +&#abcdef0; +&ThisIsNotDefined; &hi?;

                              ```````````````````````````````` -If a line of dashes that meets the above conditions for being a -thematic break could also be interpreted as the underline of a [setext -heading], the interpretation as a -[setext heading] takes precedence. Thus, for example, -this is a setext heading, not a paragraph followed by a thematic break: +Although HTML5 does accept some entity references +without a trailing semicolon (such as `©`), these are not +recognized here, because it makes the grammar too ambiguous: ```````````````````````````````` example -Foo ---- -bar +© . -

                              Foo

                              -

                              bar

                              +

                              &copy

                              ```````````````````````````````` -When both a thematic break and a list item are possible -interpretations of a line, the thematic break takes precedence: +Strings that are not on the list of HTML5 named entities are not +recognized as entity references either: ```````````````````````````````` example -* Foo -* * * -* Bar +&MadeUpEntity; . -
                                -
                              • Foo
                              • -
                              -
                              -
                                -
                              • Bar
                              • -
                              +

                              &MadeUpEntity;

                              ```````````````````````````````` -If you want a thematic break in a list item, use a different bullet: +Entity and numeric character references are recognized in any +context besides code spans or code blocks, including +URLs, [link titles], and [fenced code block][] [info strings]: ```````````````````````````````` example -- Foo -- * * * + . -
                                -
                              • Foo
                              • -
                              • -
                                -
                              • -
                              +
                              ```````````````````````````````` -## ATX headings - -An [ATX heading](@) -consists of a string of characters, parsed as inline content, between an -opening sequence of 1--6 unescaped `#` characters and an optional -closing sequence of any number of unescaped `#` characters. -The opening sequence of `#` characters must be followed by a -[space] or by the end of line. The optional closing sequence of `#`s must be -preceded by a [space] and may be followed by spaces only. The opening -`#` character may be indented 0-3 spaces. The raw contents of the -heading are stripped of leading and trailing spaces before being parsed -as inline content. The heading level is equal to the number of `#` -characters in the opening sequence. - -Simple headings: - ```````````````````````````````` example -# foo -## foo -### foo -#### foo -##### foo -###### foo +[foo](/föö "föö") . -

                              foo

                              -

                              foo

                              -

                              foo

                              -

                              foo

                              -
                              foo
                              -
                              foo
                              +

                              foo

                              ```````````````````````````````` -More than six `#` characters is not a heading: - ```````````````````````````````` example -####### foo +[foo] + +[foo]: /föö "föö" . -

                              ####### foo

                              +

                              foo

                              ```````````````````````````````` -At least one space is required between the `#` characters and the -heading's contents, unless the heading is empty. Note that many -implementations currently do not require the space. However, the -space was required by the -[original ATX implementation](http://www.aaronsw.com/2002/atx/atx.py), -and it helps prevent things like the following from being parsed as -headings: - ```````````````````````````````` example -#5 bolt - -#hashtag +``` föö +foo +``` . -

                              #5 bolt

                              -

                              #hashtag

                              +
                              foo
                              +
                              ```````````````````````````````` -This is not a heading, because the first `#` is escaped: +Entity and numeric character references are treated as literal +text in code spans and code blocks: ```````````````````````````````` example -\## foo +`föö` . -

                              ## foo

                              +

                              f&ouml;&ouml;

                              ```````````````````````````````` -Contents are parsed as inlines: - ```````````````````````````````` example -# foo *bar* \*baz\* + föfö . -

                              foo bar *baz*

                              +
                              f&ouml;f&ouml;
                              +
                              ```````````````````````````````` -Leading and trailing [whitespace] is ignored in parsing inline content: +Entity and numeric character references cannot be used +in place of symbols indicating structure in CommonMark +documents. ```````````````````````````````` example -# foo +*foo* +*foo* . -

                              foo

                              +

                              *foo* +foo

                              ```````````````````````````````` - -One to three spaces indentation are allowed: - ```````````````````````````````` example - ### foo - ## foo - # foo +* foo + +* foo . -

                              foo

                              -

                              foo

                              -

                              foo

                              +

                              * foo

                              +
                                +
                              • foo
                              • +
                              ```````````````````````````````` +```````````````````````````````` example +foo bar +. +

                              foo -Four spaces are too much: +bar

                              +```````````````````````````````` ```````````````````````````````` example - # foo + foo . -
                              # foo
                              -
                              +

                              →foo

                              ```````````````````````````````` ```````````````````````````````` example -foo - # bar +[a](url "tit") . -

                              foo -# bar

                              +

                              [a](url "tit")

                              ```````````````````````````````` -A closing sequence of `#` characters is optional: -```````````````````````````````` example -## foo ## - ### bar ### -. -

                              foo

                              -

                              bar

                              -```````````````````````````````` +# Blocks and inlines +We can think of a document as a sequence of +[blocks](@)---structural elements like paragraphs, block +quotations, lists, headings, rules, and code blocks. Some blocks (like +block quotes and list items) contain other blocks; others (like +headings and paragraphs) contain [inline](@) content---text, +links, emphasized text, images, code spans, and so on. -It need not be the same length as the opening sequence: +## Precedence + +Indicators of block structure always take precedence over indicators +of inline structure. So, for example, the following is a list with +two items, not a list with one item containing a code span: ```````````````````````````````` example -# foo ################################## -##### foo ## +- `one +- two` . -

                              foo

                              -
                              foo
                              +
                                +
                              • `one
                              • +
                              • two`
                              • +
                              ```````````````````````````````` -Spaces are allowed after the closing sequence: +This means that parsing can proceed in two steps: first, the block +structure of the document can be discerned; second, text lines inside +paragraphs, headings, and other block constructs can be parsed for inline +structure. The second step requires information about link reference +definitions that will be available only at the end of the first +step. Note that the first step requires processing lines in sequence, +but the second can be parallelized, since the inline parsing of +one block element does not affect the inline parsing of any other. + +## Container blocks and leaf blocks + +We can divide blocks into two types: +[container blocks](@), +which can contain other blocks, and [leaf blocks](@), +which cannot. + +# Leaf blocks + +This section describes the different kinds of leaf block that make up a +Markdown document. + +## Thematic breaks + +A line consisting of 0-3 spaces of indentation, followed by a sequence +of three or more matching `-`, `_`, or `*` characters, each followed +optionally by any number of spaces or tabs, forms a +[thematic break](@). ```````````````````````````````` example -### foo ### +*** +--- +___ . -

                              foo

                              +
                              +
                              +
                              ```````````````````````````````` -A sequence of `#` characters with anything but [spaces] following it -is not a closing sequence, but counts as part of the contents of the -heading: +Wrong characters: ```````````````````````````````` example -### foo ### b ++++ . -

                              foo ### b

                              +

                              +++

                              ```````````````````````````````` -The closing sequence must be preceded by a space: - ```````````````````````````````` example -# foo# +=== . -

                              foo#

                              +

                              ===

                              ```````````````````````````````` -Backslash-escaped `#` characters do not count as part -of the closing sequence: +Not enough characters: ```````````````````````````````` example -### foo \### -## foo #\## -# foo \# +-- +** +__ . -

                              foo ###

                              -

                              foo ###

                              -

                              foo #

                              +

                              -- +** +__

                              ```````````````````````````````` -ATX headings need not be separated from surrounding content by blank -lines, and they can interrupt paragraphs: +One to three spaces indent are allowed: ```````````````````````````````` example -**** -## foo -**** + *** + *** + *** .
                              -

                              foo

                              +

                              ```````````````````````````````` +Four spaces is too many: + ```````````````````````````````` example -Foo bar -# baz -Bar foo + *** . -

                              Foo bar

                              -

                              baz

                              -

                              Bar foo

                              +
                              ***
                              +
                              ```````````````````````````````` -ATX headings can be empty: - ```````````````````````````````` example -## -# -### ### +Foo + *** . -

                              -

                              -

                              +

                              Foo +***

                              ```````````````````````````````` -## Setext headings - -A [setext heading](@) consists of one or more -lines of text, each containing at least one [non-whitespace -character], with no more than 3 spaces indentation, followed by -a [setext heading underline]. The lines of text must be such -that, were they not followed by the setext heading underline, -they would be interpreted as a paragraph: they cannot be -interpretable as a [code fence], [ATX heading][ATX headings], -[block quote][block quotes], [thematic break][thematic breaks], -[list item][list items], or [HTML block][HTML blocks]. - -A [setext heading underline](@) is a sequence of -`=` characters or a sequence of `-` characters, with no more than 3 -spaces indentation and any number of trailing spaces. If a line -containing a single `-` can be interpreted as an -empty [list items], it should be interpreted this way -and not as a [setext heading underline]. - -The heading is a level 1 heading if `=` characters are used in -the [setext heading underline], and a level 2 heading if `-` -characters are used. The contents of the heading are the result -of parsing the preceding lines of text as CommonMark inline -content. - -In general, a setext heading need not be preceded or followed by a -blank line. However, it cannot interrupt a paragraph, so when a -setext heading comes after a paragraph, a blank line is needed between -them. - -Simple examples: +More than three characters may be used: ```````````````````````````````` example -Foo *bar* -========= - -Foo *bar* ---------- +_____________________________________ . -

                              Foo bar

                              -

                              Foo bar

                              +
                              ```````````````````````````````` -The content of the header may span more than one line: +Spaces are allowed between the characters: ```````````````````````````````` example -Foo *bar -baz* -==== + - - - . -

                              Foo bar -baz

                              +
                              ```````````````````````````````` -The contents are the result of parsing the headings's raw -content as inlines. The heading's raw content is formed by -concatenating the lines and removing initial and final -[whitespace]. ```````````````````````````````` example - Foo *bar -baz*→ -==== + ** * ** * ** * ** . -

                              Foo bar -baz

                              +
                              ```````````````````````````````` -The underlining can be any length: - ```````````````````````````````` example -Foo -------------------------- - -Foo -= +- - - - . -

                              Foo

                              -

                              Foo

                              +
                              ```````````````````````````````` -The heading content can be indented up to three spaces, and need -not line up with the underlining: +Spaces are allowed at the end: ```````````````````````````````` example - Foo ---- - - Foo ------ - - Foo - === +- - - - . -

                              Foo

                              -

                              Foo

                              -

                              Foo

                              +
                              ```````````````````````````````` -Four spaces indent is too much: +However, no other characters may occur in the line: ```````````````````````````````` example - Foo - --- +_ _ _ _ a - Foo ---- -. -
                              Foo
                              ----
                              +a------
                               
                              -Foo
                              -
                              -
                              +---a--- +. +

                              _ _ _ _ a

                              +

                              a------

                              +

                              ---a---

                              ```````````````````````````````` -The setext heading underline can be indented up to three spaces, and -may have trailing spaces: +It is required that all of the [non-whitespace characters] be the same. +So, this is not a thematic break: ```````````````````````````````` example -Foo - ---- + *-* . -

                              Foo

                              +

                              -

                              ```````````````````````````````` -Four spaces is too much: +Thematic breaks do not need blank lines before or after: ```````````````````````````````` example -Foo - --- +- foo +*** +- bar . -

                              Foo ----

                              +
                                +
                              • foo
                              • +
                              +
                              +
                                +
                              • bar
                              • +
                              ```````````````````````````````` -The setext heading underline cannot contain internal spaces: +Thematic breaks can interrupt a paragraph: ```````````````````````````````` example Foo -= = - -Foo ---- - +*** +bar . -

                              Foo -= =

                              Foo


                              +

                              bar

                              ```````````````````````````````` -Trailing spaces in the content line do not cause a line break: +If a line of dashes that meets the above conditions for being a +thematic break could also be interpreted as the underline of a [setext +heading], the interpretation as a +[setext heading] takes precedence. Thus, for example, +this is a setext heading, not a paragraph followed by a thematic break: ```````````````````````````````` example -Foo ------ +Foo +--- +bar .

                              Foo

                              +

                              bar

                              ```````````````````````````````` -Nor does a backslash at the end: +When both a thematic break and a list item are possible +interpretations of a line, the thematic break takes precedence: ```````````````````````````````` example -Foo\ ----- +* Foo +* * * +* Bar . -

                              Foo\

                              +
                                +
                              • Foo
                              • +
                              +
                              +
                                +
                              • Bar
                              • +
                              ```````````````````````````````` -Since indicators of block structure take precedence over -indicators of inline structure, the following are setext headings: +If you want a thematic break in a list item, use a different bullet: ```````````````````````````````` example -`Foo ----- -` - - +- Foo +- * * * . -

                              `Foo

                              -

                              `

                              -

                              <a title="a lot

                              -

                              of dashes"/>

                              +
                                +
                              • Foo
                              • +
                              • +
                                +
                              • +
                              ```````````````````````````````` -The setext heading underline cannot be a [lazy continuation -line] in a list item or block quote: +## ATX headings -```````````````````````````````` example -> Foo ---- -. -
                              -

                              Foo

                              -
                              -
                              -```````````````````````````````` +An [ATX heading](@) +consists of a string of characters, parsed as inline content, between an +opening sequence of 1--6 unescaped `#` characters and an optional +closing sequence of any number of unescaped `#` characters. +The opening sequence of `#` characters must be followed by a +[space] or by the end of line. The optional closing sequence of `#`s must be +preceded by a [space] and may be followed by spaces only. The opening +`#` character may be indented 0-3 spaces. The raw contents of the +heading are stripped of leading and trailing spaces before being parsed +as inline content. The heading level is equal to the number of `#` +characters in the opening sequence. +Simple headings: ```````````````````````````````` example -> foo -bar -=== +# foo +## foo +### foo +#### foo +##### foo +###### foo . -
                              -

                              foo -bar -===

                              -
                              +

                              foo

                              +

                              foo

                              +

                              foo

                              +

                              foo

                              +
                              foo
                              +
                              foo
                              ```````````````````````````````` -```````````````````````````````` example -- Foo ---- +More than six `#` characters is not a heading: + +```````````````````````````````` example +####### foo . -
                                -
                              • Foo
                              • -
                              -
                              +

                              ####### foo

                              ```````````````````````````````` -A blank line is needed between a paragraph and a following -setext heading, since otherwise the paragraph becomes part -of the heading's content: +At least one space is required between the `#` characters and the +heading's contents, unless the heading is empty. Note that many +implementations currently do not require the space. However, the +space was required by the +[original ATX implementation](http://www.aaronsw.com/2002/atx/atx.py), +and it helps prevent things like the following from being parsed as +headings: ```````````````````````````````` example -Foo -Bar ---- +#5 bolt + +#hashtag . -

                              Foo -Bar

                              +

                              #5 bolt

                              +

                              #hashtag

                              ```````````````````````````````` -But in general a blank line is not required before or after -setext headings: +This is not a heading, because the first `#` is escaped: ```````````````````````````````` example ---- -Foo ---- -Bar ---- -Baz +\## foo . -
                              -

                              Foo

                              -

                              Bar

                              -

                              Baz

                              +

                              ## foo

                              ```````````````````````````````` -Setext headings cannot be empty: +Contents are parsed as inlines: ```````````````````````````````` example - -==== +# foo *bar* \*baz\* . -

                              ====

                              +

                              foo bar *baz*

                              ```````````````````````````````` -Setext heading text lines must not be interpretable as block -constructs other than paragraphs. So, the line of dashes -in these examples gets interpreted as a thematic break: +Leading and trailing [whitespace] is ignored in parsing inline content: ```````````````````````````````` example ---- ---- +# foo . -
                              -
                              +

                              foo

                              ```````````````````````````````` +One to three spaces indentation are allowed: + ```````````````````````````````` example -- foo ------ + ### foo + ## foo + # foo . -
                                -
                              • foo
                              • -
                              -
                              +

                              foo

                              +

                              foo

                              +

                              foo

                              ```````````````````````````````` +Four spaces are too much: + ```````````````````````````````` example - foo ---- + # foo . -
                              foo
                              +
                              # foo
                               
                              -
                              ```````````````````````````````` ```````````````````````````````` example -> foo ------ +foo + # bar . -
                              -

                              foo

                              -
                              -
                              +

                              foo +# bar

                              ```````````````````````````````` -If you want a heading with `> foo` as its literal text, you can -use backslash escapes: +A closing sequence of `#` characters is optional: ```````````````````````````````` example -\> foo ------- +## foo ## + ### bar ### . -

                              > foo

                              +

                              foo

                              +

                              bar

                              ```````````````````````````````` -**Compatibility note:** Most existing Markdown implementations -do not allow the text of setext headings to span multiple lines. -But there is no consensus about how to interpret - -``` markdown -Foo -bar ---- -baz -``` +It need not be the same length as the opening sequence: -One can find four different interpretations: +```````````````````````````````` example +# foo ################################## +##### foo ## +. +

                              foo

                              +
                              foo
                              +```````````````````````````````` -1. paragraph "Foo", heading "bar", paragraph "baz" -2. paragraph "Foo bar", thematic break, paragraph "baz" -3. paragraph "Foo bar --- baz" -4. heading "Foo bar", paragraph "baz" -We find interpretation 4 most natural, and interpretation 4 -increases the expressive power of CommonMark, by allowing -multiline headings. Authors who want interpretation 1 can -put a blank line after the first paragraph: +Spaces are allowed after the closing sequence: ```````````````````````````````` example -Foo - -bar ---- -baz +### foo ### . -

                              Foo

                              -

                              bar

                              -

                              baz

                              +

                              foo

                              ```````````````````````````````` -Authors who want interpretation 2 can put blank lines around -the thematic break, +A sequence of `#` characters with anything but [spaces] following it +is not a closing sequence, but counts as part of the contents of the +heading: ```````````````````````````````` example -Foo -bar - ---- - -baz +### foo ### b . -

                              Foo -bar

                              -
                              -

                              baz

                              +

                              foo ### b

                              ```````````````````````````````` -or use a thematic break that cannot count as a [setext heading -underline], such as +The closing sequence must be preceded by a space: ```````````````````````````````` example -Foo -bar -* * * -baz +# foo# . -

                              Foo -bar

                              -
                              -

                              baz

                              +

                              foo#

                              ```````````````````````````````` -Authors who want interpretation 3 can use backslash escapes: +Backslash-escaped `#` characters do not count as part +of the closing sequence: ```````````````````````````````` example -Foo -bar -\--- -baz +### foo \### +## foo #\## +# foo \# . -

                              Foo -bar ---- -baz

                              +

                              foo ###

                              +

                              foo ###

                              +

                              foo #

                              ```````````````````````````````` -## Indented code blocks - -An [indented code block](@) is composed of one or more -[indented chunks] separated by blank lines. -An [indented chunk](@) is a sequence of non-blank lines, -each indented four or more spaces. The contents of the code block are -the literal contents of the lines, including trailing -[line endings], minus four spaces of indentation. -An indented code block has no [info string]. - -An indented code block cannot interrupt a paragraph, so there must be -a blank line between a paragraph and a following indented code block. -(A blank line is not needed, however, between a code block and a following -paragraph.) +ATX headings need not be separated from surrounding content by blank +lines, and they can interrupt paragraphs: ```````````````````````````````` example - a simple - indented code block +**** +## foo +**** . -
                              a simple
                              -  indented code block
                              -
                              +
                              +

                              foo

                              +
                              ```````````````````````````````` -If there is any ambiguity between an interpretation of indentation -as a code block and as indicating that material belongs to a [list -item][list items], the list item interpretation takes precedence: - ```````````````````````````````` example - - foo - - bar +Foo bar +# baz +Bar foo . -
                                -
                              • -

                                foo

                                -

                                bar

                                -
                              • -
                              +

                              Foo bar

                              +

                              baz

                              +

                              Bar foo

                              ```````````````````````````````` -```````````````````````````````` example -1. foo +ATX headings can be empty: - - bar +```````````````````````````````` example +## +# +### ### . -
                                -
                              1. -

                                foo

                                -
                                  -
                                • bar
                                • -
                                -
                              2. -
                              +

                              +

                              +

                              ```````````````````````````````` +## Setext headings -The contents of a code block are literal text, and do not get parsed -as Markdown: - -```````````````````````````````` example -
                              - *hi* +A [setext heading](@) consists of one or more +lines of text, each containing at least one [non-whitespace +character], with no more than 3 spaces indentation, followed by +a [setext heading underline]. The lines of text must be such +that, were they not followed by the setext heading underline, +they would be interpreted as a paragraph: they cannot be +interpretable as a [code fence], [ATX heading][ATX headings], +[block quote][block quotes], [thematic break][thematic breaks], +[list item][list items], or [HTML block][HTML blocks]. - - one -. -
                              <a/>
                              -*hi*
                              +A [setext heading underline](@) is a sequence of
                              +`=` characters or a sequence of `-` characters, with no more than 3
                              +spaces indentation and any number of trailing spaces.  If a line
                              +containing a single `-` can be interpreted as an
                              +empty [list items], it should be interpreted this way
                              +and not as a [setext heading underline].
                               
                              -- one
                              -
                              -```````````````````````````````` +The heading is a level 1 heading if `=` characters are used in +the [setext heading underline], and a level 2 heading if `-` +characters are used. The contents of the heading are the result +of parsing the preceding lines of text as CommonMark inline +content. +In general, a setext heading need not be preceded or followed by a +blank line. However, it cannot interrupt a paragraph, so when a +setext heading comes after a paragraph, a blank line is needed between +them. -Here we have three chunks separated by blank lines: +Simple examples: ```````````````````````````````` example - chunk1 +Foo *bar* +========= - chunk2 - - - - chunk3 +Foo *bar* +--------- . -
                              chunk1
                              -
                              -chunk2
                              +

                              Foo bar

                              +

                              Foo bar

                              +```````````````````````````````` +The content of the header may span more than one line: -chunk3 -
                              +```````````````````````````````` example +Foo *bar +baz* +==== +. +

                              Foo bar +baz

                              ```````````````````````````````` - -Any initial spaces beyond four will be included in the content, even -in interior blank lines: +The contents are the result of parsing the headings's raw +content as inlines. The heading's raw content is formed by +concatenating the lines and removing initial and final +[whitespace]. ```````````````````````````````` example - chunk1 - - chunk2 + Foo *bar +baz*→ +==== . -
                              chunk1
                              -  
                              -  chunk2
                              -
                              +

                              Foo bar +baz

                              ```````````````````````````````` -An indented code block cannot interrupt a paragraph. (This -allows hanging indents and the like.) +The underlining can be any length: ```````````````````````````````` example Foo - bar +------------------------- +Foo += . -

                              Foo -bar

                              +

                              Foo

                              +

                              Foo

                              ```````````````````````````````` -However, any non-blank line with fewer than four leading spaces ends -the code block immediately. So a paragraph may occur immediately -after indented code: +The heading content can be indented up to three spaces, and need +not line up with the underlining: ```````````````````````````````` example - foo -bar + Foo +--- + + Foo +----- + + Foo + === . -
                              foo
                              -
                              -

                              bar

                              +

                              Foo

                              +

                              Foo

                              +

                              Foo

                              ```````````````````````````````` -And indented code can occur immediately before and after other kinds of -blocks: +Four spaces indent is too much: ```````````````````````````````` example -# Heading - foo -Heading ------- - foo ----- + Foo + --- + + Foo +--- . -

                              Heading

                              -
                              foo
                              -
                              -

                              Heading

                              -
                              foo
                              +
                              Foo
                              +---
                              +
                              +Foo
                               

                              ```````````````````````````````` -The first line can be indented more than four spaces: +The setext heading underline can be indented up to three spaces, and +may have trailing spaces: ```````````````````````````````` example - foo - bar +Foo + ---- . -
                                  foo
                              -bar
                              -
                              +

                              Foo

                              ```````````````````````````````` -Blank lines preceding or following an indented code block -are not included in it: +Four spaces is too much: ```````````````````````````````` example - - - foo - - +Foo + --- . -
                              foo
                              -
                              +

                              Foo +---

                              ```````````````````````````````` -Trailing spaces are included in the code block's content: +The setext heading underline cannot contain internal spaces: ```````````````````````````````` example - foo +Foo += = + +Foo +--- - . -
                              foo  
                              -
                              +

                              Foo += =

                              +

                              Foo

                              +
                              ```````````````````````````````` +Trailing spaces in the content line do not cause a line break: -## Fenced code blocks - -A [code fence](@) is a sequence -of at least three consecutive backtick characters (`` ` ``) or -tildes (`~`). (Tildes and backticks cannot be mixed.) -A [fenced code block](@) -begins with a code fence, indented no more than three spaces. - -The line with the opening code fence may optionally contain some text -following the code fence; this is trimmed of leading and trailing -whitespace and called the [info string](@). If the [info string] comes -after a backtick fence, it may not contain any backtick -characters. (The reason for this restriction is that otherwise -some inline code would be incorrectly interpreted as the -beginning of a fenced code block.) +```````````````````````````````` example +Foo +----- +. +

                              Foo

                              +```````````````````````````````` -The content of the code block consists of all subsequent lines, until -a closing [code fence] of the same type as the code block -began with (backticks or tildes), and with at least as many backticks -or tildes as the opening code fence. If the leading code fence is -indented N spaces, then up to N spaces of indentation are removed from -each line of the content (if present). (If a content line is not -indented, it is preserved unchanged. If it is indented less than N -spaces, all of the indentation is removed.) -The closing code fence may be indented up to three spaces, and may be -followed only by spaces, which are ignored. If the end of the -containing block (or document) is reached and no closing code fence -has been found, the code block contains all of the lines after the -opening code fence until the end of the containing block (or -document). (An alternative spec would require backtracking in the -event that a closing code fence is not found. But this makes parsing -much less efficient, and there seems to be no real down side to the -behavior described here.) +Nor does a backslash at the end: -A fenced code block may interrupt a paragraph, and does not require -a blank line either before or after. +```````````````````````````````` example +Foo\ +---- +. +

                              Foo\

                              +```````````````````````````````` -The content of a code fence is treated as literal text, not parsed -as inlines. The first word of the [info string] is typically used to -specify the language of the code sample, and rendered in the `class` -attribute of the `code` tag. However, this spec does not mandate any -particular treatment of the [info string]. -Here is a simple example with backticks: +Since indicators of block structure take precedence over +indicators of inline structure, the following are setext headings: ```````````````````````````````` example -``` -< - > -``` +`Foo +---- +` + +
                              . -
                              <
                              - >
                              -
                              +

                              `Foo

                              +

                              `

                              +

                              <a title="a lot

                              +

                              of dashes"/>

                              ```````````````````````````````` -With tildes: +The setext heading underline cannot be a [lazy continuation +line] in a list item or block quote: ```````````````````````````````` example -~~~ -< - > -~~~ +> Foo +--- . -
                              <
                              - >
                              -
                              +
                              +

                              Foo

                              +
                              +
                              ```````````````````````````````` -Fewer than three backticks is not enough: ```````````````````````````````` example -`` -foo -`` +> foo +bar +=== . -

                              foo

                              +
                              +

                              foo +bar +===

                              +
                              ```````````````````````````````` -The closing code fence must use the same character as the opening -fence: ```````````````````````````````` example -``` -aaa -~~~ -``` +- Foo +--- . -
                              aaa
                              -~~~
                              -
                              +
                                +
                              • Foo
                              • +
                              +
                              ```````````````````````````````` +A blank line is needed between a paragraph and a following +setext heading, since otherwise the paragraph becomes part +of the heading's content: + ```````````````````````````````` example -~~~ -aaa -``` -~~~ +Foo +Bar +--- . -
                              aaa
                              -```
                              -
                              +

                              Foo +Bar

                              ```````````````````````````````` -The closing code fence must be at least as long as the opening fence: +But in general a blank line is not required before or after +setext headings: ```````````````````````````````` example -```` -aaa -``` -`````` +--- +Foo +--- +Bar +--- +Baz . -
                              aaa
                              -```
                              -
                              +
                              +

                              Foo

                              +

                              Bar

                              +

                              Baz

                              ```````````````````````````````` +Setext headings cannot be empty: + ```````````````````````````````` example -~~~~ -aaa -~~~ -~~~~ + +==== . -
                              aaa
                              -~~~
                              -
                              +

                              ====

                              ```````````````````````````````` -Unclosed code blocks are closed by the end of the document -(or the enclosing [block quote][block quotes] or [list item][list items]): +Setext heading text lines must not be interpretable as block +constructs other than paragraphs. So, the line of dashes +in these examples gets interpreted as a thematic break: ```````````````````````````````` example -``` +--- +--- . -
                              +
                              +
                              ```````````````````````````````` ```````````````````````````````` example -````` +- foo +----- +. +
                                +
                              • foo
                              • +
                              +
                              +```````````````````````````````` -``` -aaa + +```````````````````````````````` example + foo +--- . -
                              
                              -```
                              -aaa
                              +
                              foo
                               
                              +
                              ```````````````````````````````` ```````````````````````````````` example -> ``` -> aaa - -bbb +> foo +----- .
                              -
                              aaa
                              -
                              +

                              foo

                              -

                              bbb

                              +
                              ```````````````````````````````` -A code block can have all empty lines as its content: +If you want a heading with `> foo` as its literal text, you can +use backslash escapes: ```````````````````````````````` example -``` - - -``` +\> foo +------ . -
                              
                              -  
                              -
                              +

                              > foo

                              ```````````````````````````````` -A code block can be empty: +**Compatibility note:** Most existing Markdown implementations +do not allow the text of setext headings to span multiple lines. +But there is no consensus about how to interpret -```````````````````````````````` example -``` +``` markdown +Foo +bar +--- +baz ``` -. -
                              -```````````````````````````````` +One can find four different interpretations: -Fences can be indented. If the opening fence is indented, -content lines will have equivalent opening indentation removed, -if present: +1. paragraph "Foo", heading "bar", paragraph "baz" +2. paragraph "Foo bar", thematic break, paragraph "baz" +3. paragraph "Foo bar --- baz" +4. heading "Foo bar", paragraph "baz" + +We find interpretation 4 most natural, and interpretation 4 +increases the expressive power of CommonMark, by allowing +multiline headings. Authors who want interpretation 1 can +put a blank line after the first paragraph: ```````````````````````````````` example - ``` - aaa -aaa -``` +Foo + +bar +--- +baz . -
                              aaa
                              -aaa
                              -
                              +

                              Foo

                              +

                              bar

                              +

                              baz

                              ```````````````````````````````` +Authors who want interpretation 2 can put blank lines around +the thematic break, + ```````````````````````````````` example - ``` -aaa - aaa -aaa - ``` -. -
                              aaa
                              -aaa
                              -aaa
                              -
                              -```````````````````````````````` +Foo +bar +--- -```````````````````````````````` example - ``` - aaa - aaa - aaa - ``` +baz . -
                              aaa
                              - aaa
                              -aaa
                              -
                              +

                              Foo +bar

                              +
                              +

                              baz

                              ```````````````````````````````` -Four spaces indentation produces an indented code block: +or use a thematic break that cannot count as a [setext heading +underline], such as ```````````````````````````````` example - ``` - aaa - ``` +Foo +bar +* * * +baz . -
                              ```
                              -aaa
                              -```
                              -
                              +

                              Foo +bar

                              +
                              +

                              baz

                              ```````````````````````````````` -Closing fences may be indented by 0-3 spaces, and their indentation -need not match that of the opening fence: +Authors who want interpretation 3 can use backslash escapes: ```````````````````````````````` example -``` -aaa - ``` +Foo +bar +\--- +baz . -
                              aaa
                              -
                              +

                              Foo +bar +--- +baz

                              ```````````````````````````````` -```````````````````````````````` example - ``` -aaa - ``` -. -
                              aaa
                              -
                              -```````````````````````````````` +## Indented code blocks +An [indented code block](@) is composed of one or more +[indented chunks] separated by blank lines. +An [indented chunk](@) is a sequence of non-blank lines, +each indented four or more spaces. The contents of the code block are +the literal contents of the lines, including trailing +[line endings], minus four spaces of indentation. +An indented code block has no [info string]. -This is not a closing fence, because it is indented 4 spaces: +An indented code block cannot interrupt a paragraph, so there must be +a blank line between a paragraph and a following indented code block. +(A blank line is not needed, however, between a code block and a following +paragraph.) ```````````````````````````````` example -``` -aaa - ``` + a simple + indented code block . -
                              aaa
                              -    ```
                              +
                              a simple
                              +  indented code block
                               
                              ```````````````````````````````` - -Code fences (opening and closing) cannot contain internal spaces: +If there is any ambiguity between an interpretation of indentation +as a code block and as indicating that material belongs to a [list +item][list items], the list item interpretation takes precedence: ```````````````````````````````` example -``` ``` -aaa + - foo + + bar . -

                              -aaa

                              +
                                +
                              • +

                                foo

                                +

                                bar

                                +
                              • +
                              ```````````````````````````````` ```````````````````````````````` example -~~~~~~ -aaa -~~~ ~~ +1. foo + + - bar . -
                              aaa
                              -~~~ ~~
                              -
                              +
                                +
                              1. +

                                foo

                                +
                                  +
                                • bar
                                • +
                                +
                              2. +
                              ```````````````````````````````` -Fenced code blocks can interrupt paragraphs, and can be followed -directly by paragraphs, without a blank line between: + +The contents of a code block are literal text, and do not get parsed +as Markdown: ```````````````````````````````` example -foo -``` -bar -``` -baz +
                              + *hi* + + - one . -

                              foo

                              -
                              bar
                              +
                              <a/>
                              +*hi*
                              +
                              +- one
                               
                              -

                              baz

                              ```````````````````````````````` -Other blocks can also occur before and after fenced code blocks -without an intervening blank line: +Here we have three chunks separated by blank lines: ```````````````````````````````` example -foo ---- -~~~ -bar -~~~ -# baz + chunk1 + + chunk2 + + + + chunk3 . -

                              foo

                              -
                              bar
                              +
                              chunk1
                              +
                              +chunk2
                              +
                              +
                              +
                              +chunk3
                               
                              -

                              baz

                              ```````````````````````````````` -An [info string] can be provided after the opening code fence. -Although this spec doesn't mandate any particular treatment of -the info string, the first word is typically used to specify -the language of the code block. In HTML output, the language is -normally indicated by adding a class to the `code` element consisting -of `language-` followed by the language name. +Any initial spaces beyond four will be included in the content, even +in interior blank lines: ```````````````````````````````` example -```ruby -def foo(x) - return 3 -end -``` + chunk1 + + chunk2 . -
                              def foo(x)
                              -  return 3
                              -end
                              +
                              chunk1
                              +  
                              +  chunk2
                               
                              ```````````````````````````````` +An indented code block cannot interrupt a paragraph. (This +allows hanging indents and the like.) + ```````````````````````````````` example -~~~~ ruby startline=3 $%@#$ -def foo(x) - return 3 -end -~~~~~~~ +Foo + bar + . -
                              def foo(x)
                              -  return 3
                              -end
                              -
                              +

                              Foo +bar

                              ```````````````````````````````` +However, any non-blank line with fewer than four leading spaces ends +the code block immediately. So a paragraph may occur immediately +after indented code: + ```````````````````````````````` example -````; -```` + foo +bar . -
                              +
                              foo
                              +
                              +

                              bar

                              ```````````````````````````````` -[Info strings] for backtick code blocks cannot contain backticks: +And indented code can occur immediately before and after other kinds of +blocks: ```````````````````````````````` example -``` aa ``` -foo +# Heading + foo +Heading +------ + foo +---- . -

                              aa -foo

                              +

                              Heading

                              +
                              foo
                              +
                              +

                              Heading

                              +
                              foo
                              +
                              +
                              ```````````````````````````````` -[Info strings] for tilde code blocks can contain backticks and tildes: +The first line can be indented more than four spaces: ```````````````````````````````` example -~~~ aa ``` ~~~ -foo -~~~ + foo + bar . -
                              foo
                              +
                                  foo
                              +bar
                               
                              ```````````````````````````````` -Closing code fences cannot have [info strings]: +Blank lines preceding or following an indented code block +are not included in it: ```````````````````````````````` example -``` -``` aaa -``` + + + foo + + . -
                              ``` aaa
                              +
                              foo
                               
                              ```````````````````````````````` +Trailing spaces are included in the code block's content: -## HTML blocks +```````````````````````````````` example + foo +. +
                              foo  
                              +
                              +```````````````````````````````` -An [HTML block](@) is a group of lines that is treated -as raw HTML (and will not be escaped in HTML output). -There are seven kinds of [HTML block], which can be defined 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, or the last line of -the [container block](#container-blocks) containing the current HTML -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. -1. **Start condition:** line begins with the string ``, or the end of the line.\ -**End condition:** line contains an end tag -``, `
                              `, or `` (case-insensitive; it -need not match the start tag). +## Fenced code blocks -2. **Start condition:** line begins with the string ``. +A [code fence](@) is a sequence +of at least three consecutive backtick characters (`` ` ``) or +tildes (`~`). (Tildes and backticks cannot be mixed.) +A [fenced code block](@) +begins with a code fence, indented no more than three spaces. -3. **Start condition:** line begins with the string ``. +The line with the opening code fence may optionally contain some text +following the code fence; this is trimmed of leading and trailing +whitespace and called the [info string](@). If the [info string] comes +after a backtick fence, it may not contain any backtick +characters. (The reason for this restriction is that otherwise +some inline code would be incorrectly interpreted as the +beginning of a fenced code block.) -4. **Start condition:** line begins with the string ``. +The content of the code block consists of all subsequent lines, until +a closing [code fence] of the same type as the code block +began with (backticks or tildes), and with at least as many backticks +or tildes as the opening code fence. If the leading code fence is +indented N spaces, then up to N spaces of indentation are removed from +each line of the content (if present). (If a content line is not +indented, it is preserved unchanged. If it is indented less than N +spaces, all of the indentation is removed.) -5. **Start condition:** line begins with the string -``. - -6. **Start condition:** line begins the string `<` or ``, or -the string `/>`.\ -**End condition:** line is followed by a [blank line]. +The closing code fence may be indented up to three spaces, and may be +followed only by spaces, which are ignored. If the end of the +containing block (or document) is reached and no closing code fence +has been found, the code block contains all of the lines after the +opening code fence until the end of the containing block (or +document). (An alternative spec would require backtracking in the +event that a closing code fence is not found. But this makes parsing +much less efficient, and there seems to be no real down side to the +behavior described here.) -7. **Start condition:** line begins with a complete [open tag] -(with any [tag name] other than `script`, -`style`, or `pre`) or a complete [closing tag], -followed only by [whitespace] or the end of the line.\ -**End condition:** line is followed by a [blank line]. +A fenced code block may interrupt a paragraph, and does not require +a blank line either before or after. -HTML blocks continue until they are closed by their appropriate -[end condition], or the last line of the document or other [container -block](#container-blocks). This means any HTML **within an HTML -block** that might otherwise be recognised as a start condition will -be ignored by the parser and passed through as-is, without changing -the parser's state. +The content of a code fence is treated as literal text, not parsed +as inlines. The first word of the [info string] is typically used to +specify the language of the code sample, and rendered in the `class` +attribute of the `code` tag. However, this spec does not mandate any +particular treatment of the [info string]. -For instance, `
                              ` within a HTML block started by `
                            ` will not affect -the parser state; as the HTML block was started in by start condition 6, it -will end at any blank line. This can be surprising: +Here is a simple example with backticks: ```````````````````````````````` example -
                            -
                            -**Hello**,
                            -
                            -_world_.
                            -
                            -
                            +``` +< + > +``` . -
                            -
                            -**Hello**,
                            -

                            world. -

                            -
                            +
                            <
                            + >
                            +
                            ```````````````````````````````` -In this case, the HTML block is terminated by the newline — the `**Hello**` -text remains verbatim — and regular parsing resumes, with a paragraph, -emphasised `world` and inline and block HTML following. - -All types of [HTML blocks] except type 7 may interrupt -a paragraph. Blocks of type 7 may not interrupt a paragraph. -(This restriction is intended to prevent unwanted interpretation -of long tags inside a wrapped paragraph as starting HTML blocks.) -Some simple examples follow. Here are some basic HTML blocks -of type 6: +With tildes: ```````````````````````````````` example - - - - -
                            - hi -
                            - -okay. +~~~ +< + > +~~~ . - - - - -
                            - hi -
                            -

                            okay.

                            +
                            <
                            + >
                            +
                            ```````````````````````````````` +Fewer than three backticks is not enough: ```````````````````````````````` example -
                            -*foo* +
                            aaa
                            +~~~
                            +
                            ```````````````````````````````` -Here we have two HTML blocks with a Markdown paragraph between them: - ```````````````````````````````` example -
                            - -*Markdown* - -
                            +~~~ +aaa +``` +~~~ . -
                            -

                            Markdown

                            -
                            +
                            aaa
                            +```
                            +
                            ```````````````````````````````` -The tag on the first line can be partial, as long -as it is split where there would be whitespace: +The closing code fence must be at least as long as the opening fence: ```````````````````````````````` example -
                            -
                            +```` +aaa +``` +`````` . -
                            -
                            +
                            aaa
                            +```
                            +
                            ```````````````````````````````` ```````````````````````````````` example -
                            -
                            +~~~~ +aaa +~~~ +~~~~ . -
                            -
                            +
                            aaa
                            +~~~
                            +
                            ```````````````````````````````` -An open tag need not be closed: -```````````````````````````````` example -
                            -*foo* +Unclosed code blocks are closed by the end of the document +(or the enclosing [block quote][block quotes] or [list item][list items]): -*bar* +```````````````````````````````` example +``` . -
                            -*foo* -

                            bar

                            +
                            ```````````````````````````````` - -A partial tag need not even be completed (garbage -in, garbage out): - ```````````````````````````````` example -
                            +``` +aaa +
                            ```````````````````````````````` ```````````````````````````````` example -
                            ``` +> aaa + +bbb . -
                            +
                            aaa
                            +
                            +
                            +

                            bbb

                            ```````````````````````````````` -The initial tag doesn't even need to be a valid -tag, as long as it starts like one: +A code block can have all empty lines as its content: ```````````````````````````````` example -
                            + +
                            ```````````````````````````````` -In type 6 blocks, the initial tag need not be on a line by -itself: +A code block can be empty: ```````````````````````````````` example - +``` +``` . - +
                            ```````````````````````````````` +Fences can be indented. If the opening fence is indented, +content lines will have equivalent opening indentation removed, +if present: + ```````````````````````````````` example -
                            -foo -
                            + ``` + aaa +aaa +``` . -
                            -foo -
                            +
                            aaa
                            +aaa
                            +
                            ```````````````````````````````` -Everything until the next blank line or end of document -gets included in the HTML block. So, in the following -example, what looks like a Markdown code block -is actually part of the HTML block, which continues until a blank -line or the end of the document is reached: - ```````````````````````````````` example -
                            -``` c -int x = 33; -``` + ``` +aaa + aaa +aaa + ``` . -
                            -``` c -int x = 33; -``` +
                            aaa
                            +aaa
                            +aaa
                            +
                            ```````````````````````````````` -To start an [HTML block] with a tag that is *not* in the -list of block-level tags in (6), you must put the tag by -itself on the first line (and it must be complete): - ```````````````````````````````` example - -*bar* - + ``` + aaa + aaa + aaa + ``` . - -*bar* - +
                            aaa
                            + aaa
                            +aaa
                            +
                            ```````````````````````````````` -In type 7 blocks, the [tag name] can be anything: +Four spaces indentation produces an indented code block: ```````````````````````````````` example - -*bar* - + ``` + aaa + ``` . - -*bar* - +
                            ```
                            +aaa
                            +```
                            +
                            ```````````````````````````````` +Closing fences may be indented by 0-3 spaces, and their indentation +need not match that of the opening fence: + ```````````````````````````````` example - -*bar* - +``` +aaa + ``` . - -*bar* - +
                            aaa
                            +
                            ```````````````````````````````` ```````````````````````````````` example - -*bar* + ``` +aaa + ``` . - -*bar* +
                            aaa
                            +
                            ```````````````````````````````` -These rules are designed to allow us to work with tags that -can function as either block-level or inline-level tags. -The `` tag is a nice example. We can surround content with -`` tags in three different ways. In this case, we get a raw -HTML block, because the `` tag is on a line by itself: +This is not a closing fence, because it is indented 4 spaces: ```````````````````````````````` example - -*foo* - +``` +aaa + ``` . - -*foo* - +
                            aaa
                            +    ```
                            +
                            ```````````````````````````````` -In this case, we get a raw HTML block that just includes -the `` tag (because it ends with the following blank -line). So the contents get interpreted as CommonMark: + +Code fences (opening and closing) cannot contain internal spaces: ```````````````````````````````` example - +``` ``` +aaa +. +

                            +aaa

                            +```````````````````````````````` -*foo* -
                            +```````````````````````````````` example +~~~~~~ +aaa +~~~ ~~ . - -

                            foo

                            -
                            +
                            aaa
                            +~~~ ~~
                            +
                            ```````````````````````````````` -Finally, in this case, the `` tags are interpreted -as [raw HTML] *inside* the CommonMark paragraph. (Because -the tag is not on a line by itself, we get inline HTML -rather than an [HTML block].) +Fenced code blocks can interrupt paragraphs, and can be followed +directly by paragraphs, without a blank line between: ```````````````````````````````` example -*foo* +foo +``` +bar +``` +baz . -

                            foo

                            +

                            foo

                            +
                            bar
                            +
                            +

                            baz

                            ```````````````````````````````` -HTML tags designed to contain literal content -(`script`, `style`, `pre`), comments, processing instructions, -and declarations are treated somewhat differently. -Instead of ending at the first blank line, these blocks -end at the first line containing a corresponding end tag. -As a result, these blocks can contain blank lines: - -A pre tag (type 1): +Other blocks can also occur before and after fenced code blocks +without an intervening blank line: ```````````````````````````````` example -
                            
                            -import Text.HTML.TagSoup
                            -
                            -main :: IO ()
                            -main = print $ parseTags tags
                            -
                            -okay +foo +--- +~~~ +bar +~~~ +# baz . -
                            
                            -import Text.HTML.TagSoup
                            -
                            -main :: IO ()
                            -main = print $ parseTags tags
                            +

                            foo

                            +
                            bar
                             
                            -

                            okay

                            +

                            baz

                            ```````````````````````````````` -A script tag (type 1): +An [info string] can be provided after the opening code fence. +Although this spec doesn't mandate any particular treatment of +the info string, the first word is typically used to specify +the language of the code block. In HTML output, the language is +normally indicated by adding a class to the `code` element consisting +of `language-` followed by the language name. ```````````````````````````````` example - -okay +```ruby +def foo(x) + return 3 +end +``` . - -

                            okay

                            +
                            def foo(x)
                            +  return 3
                            +end
                            +
                            ```````````````````````````````` -A style tag (type 1): - ```````````````````````````````` example - -okay +~~~~ ruby startline=3 $%@#$ +def foo(x) + return 3 +end +~~~~~~~ . - -

                            okay

                            +
                            def foo(x)
                            +  return 3
                            +end
                            +
                            ```````````````````````````````` -If there is no matching end tag, the block will end at the -end of the document (or the enclosing [block quote][block quotes] -or [list item][list items]): - ```````````````````````````````` example - -*foo* +``` +``` aaa +``` . - -

                            foo

                            +
                            ``` aaa
                            +
                            ```````````````````````````````` -```````````````````````````````` example -*bar* -*baz* -. -*bar* -

                            baz

                            -```````````````````````````````` +## HTML blocks -Note that anything on the last line after the -end tag will be included in the [HTML block]: +An [HTML block](@) is a group of lines that is treated +as raw HTML (and will not be escaped in HTML output). -```````````````````````````````` example -1. *bar* -. -1. *bar* -```````````````````````````````` +There are seven kinds of [HTML block], which can be defined 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, or the last line of +the [container block](#container-blocks) containing the current HTML +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. +1. **Start condition:** line begins with the string ``, or the end of the line.\ +**End condition:** line contains an end tag +``, `
                            `, or `` (case-insensitive; it +need not match the start tag). -A comment (type 2): +2. **Start condition:** line begins with the string ``. -```````````````````````````````` example - -okay -. - -

                            okay

                            -```````````````````````````````` +5. **Start condition:** line begins with the string +``. + +6. **Start condition:** line begins the string `<` or ``, or +the string `/>`.\ +**End condition:** line is followed by a [blank line]. +7. **Start condition:** line begins with a complete [open tag] +(with any [tag name] other than `script`, +`style`, or `pre`) or a complete [closing tag], +followed only by [whitespace] or the end of the line.\ +**End condition:** line is followed by a [blank line]. +HTML blocks continue until they are closed by their appropriate +[end condition], or the last line of the document or other [container +block](#container-blocks). This means any HTML **within an HTML +block** that might otherwise be recognised as a start condition will +be ignored by the parser and passed through as-is, without changing +the parser's state. -A processing instruction (type 3): +For instance, `
                            ` within a HTML block started by `` will not affect
                            +the parser state; as the HTML block was started in by start condition 6, it
                            +will end at any blank line. This can be surprising:
                             
                             ```````````````````````````````` example
                            -';
                            +
                            +
                            +**Hello**,
                             
                            -?>
                            -okay
                            +_world_.
                            +
                            +
                            . -'; - -?> -

                            okay

                            +
                            +
                            +**Hello**,
                            +

                            world. +

                            +
                            ```````````````````````````````` +In this case, the HTML block is terminated by the newline — the `**Hello**` +text remains verbatim — and regular parsing resumes, with a paragraph, +emphasised `world` and inline and block HTML following. -A declaration (type 4): +All types of [HTML blocks] except type 7 may interrupt +a paragraph. Blocks of type 7 may not interrupt a paragraph. +(This restriction is intended to prevent unwanted interpretation +of long tags inside a wrapped paragraph as starting HTML blocks.) + +Some simple examples follow. Here are some basic HTML blocks +of type 6: ```````````````````````````````` example - + + + + +
                            + hi +
                            + +okay. . - + + + + +
                            + hi +
                            +

                            okay.

                            ```````````````````````````````` -CDATA (type 5): - ```````````````````````````````` example - -okay + +*foo* ```````````````````````````````` +Here we have two HTML blocks with a Markdown paragraph between them: + ```````````````````````````````` example -
                            +
                            -
                            +*Markdown* + +
                            . -
                            -
                            <div>
                            -
                            +
                            +

                            Markdown

                            +
                            ```````````````````````````````` -An HTML block of types 1--6 can interrupt a paragraph, and need not be -preceded by a blank line. +The tag on the first line can be partial, as long +as it is split where there would be whitespace: ```````````````````````````````` example -Foo -
                            -bar +
                            . -

                            Foo

                            -
                            -bar +
                            ```````````````````````````````` -However, a following blank line is needed, except at the end of -a document, and except for blocks of types 1--5, [above][HTML -block]: - ```````````````````````````````` example -
                            -bar +
                            -*foo* . -
                            -bar +
                            -*foo* ```````````````````````````````` -HTML blocks of type 7 cannot interrupt a paragraph: - +An open tag need not be closed: ```````````````````````````````` example -Foo -
                            -baz +
                            +*foo* + +*bar* . -

                            Foo - -baz

                            +
                            +*foo* +

                            bar

                            ```````````````````````````````` -This rule differs from John Gruber's original Markdown syntax -specification, which says: - -> The only restrictions are that block-level HTML elements — -> e.g. `
                            `, ``, `
                            `, `

                            `, etc. — must be separated from -> surrounding content by blank lines, and the start and end tags of the -> block should not be indented with tabs or spaces. - -In some ways Gruber's rule is more restrictive than the one given -here: - -- It requires that an HTML block be preceded by a blank line. -- It does not allow the start tag to be indented. -- It requires a matching end tag, which it also does not allow to - be indented. - -Most Markdown implementations (including some of Gruber's own) do not -respect all of these restrictions. - -There is one respect, however, in which Gruber's rule is more liberal -than the one given here, since it allows blank lines to occur inside -an HTML block. There are two reasons for disallowing them here. -First, it removes the need to parse balanced tags, which is -expensive and can require backtracking from the end of the document -if no matching end tag is found. Second, it provides a very simple -and flexible way of including Markdown content inside HTML tags: -simply separate the Markdown from the HTML using blank lines: -Compare: +A partial tag need not even be completed (garbage +in, garbage out): ```````````````````````````````` example -

                            - -*Emphasized* text. - -
                            +
                            -

                            Emphasized text.

                            -
                            +
                            -*Emphasized* text. -
                            +
                            -*Emphasized* text. -
                            +
                            - -
                            - - - - - -
                            -Hi -
                            +
                            - - -Hi - - - +
                            - - - - - Hi - + +. + +```````````````````````````````` - - +```````````````````````````````` example +
                            +foo +
                            . - - -
                            <td>
                            -  Hi
                            -</td>
                            -
                            - -
                            +
                            +foo +
                            ```````````````````````````````` -Fortunately, blank lines are usually not necessary and can be -deleted. The exception is inside `
                            ` tags, but as described
                            -[above][HTML blocks], raw HTML blocks starting with `
                            `
                            -*can* contain blank lines.
                            +Everything until the next blank line or end of document
                            +gets included in the HTML block.  So, in the following
                            +example, what looks like a Markdown code block
                            +is actually part of the HTML block, which continues until a blank
                            +line or the end of the document is reached:
                             
                            -## Link reference definitions
                            +```````````````````````````````` example
                            +
                            +``` c +int x = 33; +``` +. +
                            +``` c +int x = 33; +``` +```````````````````````````````` -A [link reference definition](@) -consists of a [link label], indented up to three spaces, followed -by a colon (`:`), optional [whitespace] (including up to one -[line ending]), a [link destination], -optional [whitespace] (including up to one -[line ending]), and an optional [link -title], which if it is present must be separated -from the [link destination] by [whitespace]. -No further [non-whitespace characters] may occur on the line. -A [link reference definition] -does not correspond to a structural element of a document. Instead, it -defines a label which can be used in [reference links] -and reference-style [images] elsewhere in the document. [Link -reference definitions] can come either before or after the links that use -them. +To start an [HTML block] with a tag that is *not* in the +list of block-level tags in (6), you must put the tag by +itself on the first line (and it must be complete): ```````````````````````````````` example -[foo]: /url "title" - -[foo] + +*bar* + . -

                            foo

                            + +*bar* + ```````````````````````````````` -```````````````````````````````` example - [foo]: - /url - 'the title' +In type 7 blocks, the [tag name] can be anything: -[foo] +```````````````````````````````` example + +*bar* + . -

                            foo

                            + +*bar* + ```````````````````````````````` ```````````````````````````````` example -[Foo*bar\]]:my_(url) 'title (with parens)' - -[Foo*bar\]] + +*bar* + . -

                            Foo*bar]

                            + +*bar* + ```````````````````````````````` ```````````````````````````````` example -[Foo bar]: - -'title' - -[Foo bar] + +*bar* . -

                            Foo bar

                            + +*bar* ```````````````````````````````` -The title may extend over multiple lines: +These rules are designed to allow us to work with tags that +can function as either block-level or inline-level tags. +The `` tag is a nice example. We can surround content with +`` tags in three different ways. In this case, we get a raw +HTML block, because the `` tag is on a line by itself: ```````````````````````````````` example -[foo]: /url ' -title -line1 -line2 -' - -[foo] + +*foo* + . -

                            foo

                            + +*foo* + ```````````````````````````````` -However, it may not contain a [blank line]: +In this case, we get a raw HTML block that just includes +the `` tag (because it ends with the following blank +line). So the contents get interpreted as CommonMark: ```````````````````````````````` example -[foo]: /url 'title + -with blank line' +*foo* -[foo] + . -

                            [foo]: /url 'title

                            -

                            with blank line'

                            -

                            [foo]

                            + +

                            foo

                            +
                            ```````````````````````````````` -The title may be omitted: - -```````````````````````````````` example -[foo]: -/url +Finally, in this case, the `` tags are interpreted +as [raw HTML] *inside* the CommonMark paragraph. (Because +the tag is not on a line by itself, we get inline HTML +rather than an [HTML block].) -[foo] +```````````````````````````````` example +*foo* . -

                            foo

                            +

                            foo

                            ```````````````````````````````` -The link destination may not be omitted: +HTML tags designed to contain literal content +(`script`, `style`, `pre`), comments, processing instructions, +and declarations are treated somewhat differently. +Instead of ending at the first blank line, these blocks +end at the first line containing a corresponding end tag. +As a result, these blocks can contain blank lines: + +A pre tag (type 1): ```````````````````````````````` example -[foo]: +
                            
                            +import Text.HTML.TagSoup
                             
                            -[foo]
                            +main :: IO ()
                            +main = print $ parseTags tags
                            +
                            +okay . -

                            [foo]:

                            -

                            [foo]

                            +
                            
                            +import Text.HTML.TagSoup
                            +
                            +main :: IO ()
                            +main = print $ parseTags tags
                            +
                            +

                            okay

                            ```````````````````````````````` - However, an empty link destination may be specified using - angle brackets: + +A script tag (type 1): ```````````````````````````````` example -[foo]: <> + +okay . -

                            foo

                            + +

                            okay

                            ```````````````````````````````` -The title must be separated from the link destination by -whitespace: + +A style tag (type 1): ```````````````````````````````` example -[foo]: (baz) + +okay . -

                            [foo]: (baz)

                            -

                            [foo]

                            + +

                            okay

                            ```````````````````````````````` -Both title and destination can contain backslash escapes -and literal backslashes: +If there is no matching end tag, the block will end at the +end of the document (or the enclosing [block quote][block quotes] +or [list item][list items]): ```````````````````````````````` example -[foo]: /url\bar\*baz "foo\"bar\baz" + +*foo* . -

                            Foo

                            + +

                            foo

                            ```````````````````````````````` ```````````````````````````````` example -[ΑΓΩ]: /φου - -[αγω] +*bar* +*baz* . -

                            αγω

                            +*bar* +

                            baz

                            ```````````````````````````````` -Here is a link reference definition with no corresponding link. -It contributes nothing to the document. +Note that anything on the last line after the +end tag will be included in the [HTML block]: ```````````````````````````````` example -[foo]: /url +1. *bar* . +1. *bar* ```````````````````````````````` -Here is another one: +A comment (type 2): ```````````````````````````````` example -[ -foo -]: /url + +okay . -

                            bar

                            + +

                            okay

                            ```````````````````````````````` -This is not a link reference definition, because there are -[non-whitespace characters] after the title: + +A processing instruction (type 3): ```````````````````````````````` example -[foo]: /url "title" ok +'; + +?> +okay . -

                            [foo]: /url "title" ok

                            +'; + +?> +

                            okay

                            ```````````````````````````````` -This is a link reference definition, but it has no title: +A declaration (type 4): ```````````````````````````````` example -[foo]: /url -"title" ok + . -

                            "title" ok

                            + ```````````````````````````````` -This is not a link reference definition, because it is indented -four spaces: +CDATA (type 5): ```````````````````````````````` example - [foo]: /url "title" + +okay . -
                            [foo]: /url "title"
                            -
                            -

                            [foo]

                            + +

                            okay

                            ```````````````````````````````` -This is not a link reference definition, because it occurs inside -a code block: +The opening tag can be indented 1-3 spaces, but not 4: ```````````````````````````````` example -``` -[foo]: /url -``` + -[foo] + . -
                            [foo]: /url
                            +  
                            +
                            <!-- foo -->
                             
                            -

                            [foo]

                            ```````````````````````````````` -A [link reference definition] cannot interrupt a paragraph. - ```````````````````````````````` example -Foo -[bar]: /baz +
                            -[bar] +
                            . -

                            Foo -[bar]: /baz

                            -

                            [bar]

                            +
                            +
                            <div>
                            +
                            ```````````````````````````````` -However, it can directly follow other block elements, such as headings -and thematic breaks, and it need not be followed by a blank line. +An HTML block of types 1--6 can interrupt a paragraph, and need not be +preceded by a blank line. ```````````````````````````````` example -# [Foo] -[foo]: /url -> bar -. -

                            Foo

                            -
                            -

                            bar

                            -
                            +Foo +
                            +bar +
                            +. +

                            Foo

                            +
                            +bar +
                            ```````````````````````````````` + +However, a following blank line is needed, except at the end of +a document, and except for blocks of types 1--5, [above][HTML +block]: + ```````````````````````````````` example -[foo]: /url +
                            bar -=== -[foo] +
                            +*foo* . -

                            bar

                            -

                            foo

                            +
                            +bar +
                            +*foo* ```````````````````````````````` + +HTML blocks of type 7 cannot interrupt a paragraph: + ```````````````````````````````` example -[foo]: /url -=== -[foo] +Foo + +baz . -

                            === -foo

                            +

                            Foo + +baz

                            ```````````````````````````````` -Several [link reference definitions] -can occur one after another, without intervening blank lines. +This rule differs from John Gruber's original Markdown syntax +specification, which says: -```````````````````````````````` example -[foo]: /foo-url "foo" -[bar]: /bar-url - "bar" -[baz]: /baz-url +> The only restrictions are that block-level HTML elements — +> e.g. `
                            `, ``, `
                            `, `

                            `, etc. — must be separated from +> surrounding content by blank lines, and the start and end tags of the +> block should not be indented with tabs or spaces. -[foo], -[bar], -[baz] -. -

                            foo, -bar, -baz

                            -```````````````````````````````` +In some ways Gruber's rule is more restrictive than the one given +here: +- It requires that an HTML block be preceded by a blank line. +- It does not allow the start tag to be indented. +- It requires a matching end tag, which it also does not allow to + be indented. -[Link reference definitions] can occur -inside block containers, like lists and block quotations. They -affect the entire document, not just the container in which they -are defined: +Most Markdown implementations (including some of Gruber's own) do not +respect all of these restrictions. + +There is one respect, however, in which Gruber's rule is more liberal +than the one given here, since it allows blank lines to occur inside +an HTML block. There are two reasons for disallowing them here. +First, it removes the need to parse balanced tags, which is +expensive and can require backtracking from the end of the document +if no matching end tag is found. Second, it provides a very simple +and flexible way of including Markdown content inside HTML tags: +simply separate the Markdown from the HTML using blank lines: + +Compare: ```````````````````````````````` example -[foo] +
                            -> [foo]: /url +*Emphasized* text. + +
                            . -

                            foo

                            -
                            -
                            +
                            +

                            Emphasized text.

                            +
                            ```````````````````````````````` -Whether something is a [link reference definition] is -independent of whether the link reference it defines is -used in the document. Thus, for example, the following -document contains just a link reference definition, and -no visible content: - ```````````````````````````````` example -[foo]: /url +
                            +*Emphasized* text. +
                            . +
                            +*Emphasized* text. +
                            ```````````````````````````````` -## Paragraphs - -A sequence of non-blank lines that cannot be interpreted as other -kinds of blocks forms a [paragraph](@). -The contents of the paragraph are the result of parsing the -paragraph's raw content as inlines. The paragraph's raw content -is formed by concatenating the lines and removing initial and final -[whitespace]. +Some Markdown implementations have adopted a convention of +interpreting content inside tags as text if the open tag has +the attribute `markdown=1`. The rule given above seems a simpler and +more elegant way of achieving the same expressive power, which is also +much simpler to parse. -A simple example with two paragraphs: +The main potential drawback is that one can no longer paste HTML +blocks into Markdown documents with 100% reliability. However, +*in most cases* this will work fine, because the blank lines in +HTML are usually followed by HTML block tags. For example: ```````````````````````````````` example -aaa - -bbb -. -

                            aaa

                            -

                            bbb

                            -```````````````````````````````` +
                            + -Paragraphs can contain multiple lines, but no blank lines: + -```````````````````````````````` example -aaa -bbb + -ccc -ddd +
                            +Hi +
                            . -

                            aaa -bbb

                            -

                            ccc -ddd

                            + + + + +
                            +Hi +
                            ```````````````````````````````` -Multiple blank lines between paragraph have no effect: +There are problems, however, if the inner tags are indented +*and* separated by spaces, as then they will be interpreted as +an indented code block: ```````````````````````````````` example -aaa + + -bbb + + + + +
                            + Hi +
                            . -

                            aaa

                            -

                            bbb

                            + + +
                            <td>
                            +  Hi
                            +</td>
                            +
                            + +
                            ```````````````````````````````` -Leading spaces are skipped: +Fortunately, blank lines are usually not necessary and can be +deleted. The exception is inside `
                            ` tags, but as described
                            +[above][HTML blocks], raw HTML blocks starting with `
                            `
                            +*can* contain blank lines.
                            +
                            +## Link reference definitions
                            +
                            +A [link reference definition](@)
                            +consists of a [link label], indented up to three spaces, followed
                            +by a colon (`:`), optional [whitespace] (including up to one
                            +[line ending]), a [link destination],
                            +optional [whitespace] (including up to one
                            +[line ending]), and an optional [link
                            +title], which if it is present must be separated
                            +from the [link destination] by [whitespace].
                            +No further [non-whitespace characters] may occur on the line.
                            +
                            +A [link reference definition]
                            +does not correspond to a structural element of a document.  Instead, it
                            +defines a label which can be used in [reference links]
                            +and reference-style [images] elsewhere in the document.  [Link
                            +reference definitions] can come either before or after the links that use
                            +them.
                             
                             ```````````````````````````````` example
                            -  aaa
                            - bbb
                            +[foo]: /url "title"
                            +
                            +[foo]
                             .
                            -

                            aaa -bbb

                            +

                            foo

                            ```````````````````````````````` -Lines after the first may be indented any amount, since indented -code blocks cannot interrupt paragraphs. - ```````````````````````````````` example -aaa - bbb - ccc + [foo]: + /url + 'the title' + +[foo] . -

                            aaa -bbb -ccc

                            +

                            foo

                            ```````````````````````````````` -However, the first line may be indented at most three spaces, -or an indented code block will be triggered: - ```````````````````````````````` example - aaa -bbb +[Foo*bar\]]:my_(url) 'title (with parens)' + +[Foo*bar\]] . -

                            aaa -bbb

                            +

                            Foo*bar]

                            ```````````````````````````````` ```````````````````````````````` example - aaa -bbb +[Foo bar]: + +'title' + +[Foo bar] . -
                            aaa
                            -
                            -

                            bbb

                            +

                            Foo bar

                            ```````````````````````````````` -Final spaces are stripped before inline parsing, so a paragraph -that ends with two or more spaces will not end with a [hard line -break]: +The title may extend over multiple lines: ```````````````````````````````` example -aaa -bbb +[foo]: /url ' +title +line1 +line2 +' + +[foo] . -

                            aaa
                            -bbb

                            +

                            foo

                            ```````````````````````````````` -## Blank lines - -[Blank lines] between block-level elements are ignored, -except for the role they play in determining whether a [list] -is [tight] or [loose]. - -Blank lines at the beginning and end of the document are also ignored. +However, it may not contain a [blank line]: ```````````````````````````````` example - - -aaa - +[foo]: /url 'title -# aaa +with blank line' - +[foo] . -

                            aaa

                            -

                            aaa

                            +

                            [foo]: /url 'title

                            +

                            with blank line'

                            +

                            [foo]

                            ```````````````````````````````` +The title may be omitted: -# Container blocks - -A [container block](#container-blocks) is a block that has other -blocks as its contents. There are two basic kinds of container blocks: -[block quotes] and [list items]. -[Lists] are meta-containers for [list items]. - -We define the syntax for container blocks recursively. The general -form of the definition is: - -> If X is a sequence of blocks, then the result of -> transforming X in such-and-such a way is a container of type Y -> with these blocks as its content. +```````````````````````````````` example +[foo]: +/url -So, we explain what counts as a block quote or list item by explaining -how these can be *generated* from their contents. This should suffice -to define the syntax, although it does not give a recipe for *parsing* -these constructions. (A recipe is provided below in the section entitled -[A parsing strategy](#appendix-a-parsing-strategy).) +[foo] +. +

                            foo

                            +```````````````````````````````` -## Block quotes -A [block quote marker](@) -consists of 0-3 spaces of initial indent, plus (a) the character `>` together -with a following space, or (b) a single character `>` not followed by a space. +The link destination may not be omitted: -The following rules define [block quotes]: +```````````````````````````````` example +[foo]: -1. **Basic case.** If a string of lines *Ls* constitute a sequence - of blocks *Bs*, then the result of prepending a [block quote - marker] to the beginning of each line in *Ls* - is a [block quote](#block-quotes) containing *Bs*. +[foo] +. +

                            [foo]:

                            +

                            [foo]

                            +```````````````````````````````` -2. **Laziness.** If a string of lines *Ls* constitute a [block - quote](#block-quotes) with contents *Bs*, then the result of deleting - the initial [block quote marker] from one or - more lines in which the next [non-whitespace character] after the [block - quote marker] is [paragraph continuation - text] is a block quote with *Bs* as its content. - [Paragraph continuation text](@) is text - that will be parsed as part of the content of a paragraph, but does - not occur at the beginning of the paragraph. + However, an empty link destination may be specified using + angle brackets: -3. **Consecutiveness.** A document cannot contain two [block - quotes] in a row unless there is a [blank line] between them. +```````````````````````````````` example +[foo]: <> -Nothing else counts as a [block quote](#block-quotes). +[foo] +. +

                            foo

                            +```````````````````````````````` -Here is a simple example: +The title must be separated from the link destination by +whitespace: ```````````````````````````````` example -> # Foo -> bar -> baz +[foo]: (baz) + +[foo] . -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            +

                            [foo]: (baz)

                            +

                            [foo]

                            ```````````````````````````````` -The spaces after the `>` characters can be omitted: +Both title and destination can contain backslash escapes +and literal backslashes: ```````````````````````````````` example -># Foo ->bar -> baz +[foo]: /url\bar\*baz "foo\"bar\baz" + +[foo] . -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            +

                            foo

                            ```````````````````````````````` -The `>` characters can be indented 1-3 spaces: +A link can come before its corresponding definition: ```````````````````````````````` example - > # Foo - > bar - > baz +[foo] + +[foo]: url . -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            +

                            foo

                            ```````````````````````````````` -Four spaces gives us a code block: +If there are several matching definitions, the first one takes +precedence: ```````````````````````````````` example - > # Foo - > bar - > baz +[foo] + +[foo]: first +[foo]: second . -
                            > # Foo
                            -> bar
                            -> baz
                            -
                            +

                            foo

                            ```````````````````````````````` -The Laziness clause allows us to omit the `>` before -[paragraph continuation text]: +As noted in the section on [Links], matching of labels is +case-insensitive (see [matches]). ```````````````````````````````` example -> # Foo -> bar -baz +[FOO]: /url + +[Foo] . -
                            -

                            Foo

                            -

                            bar -baz

                            -
                            +

                            Foo

                            ```````````````````````````````` -A block quote can contain some lazy and some non-lazy -continuation lines: - ```````````````````````````````` example -> bar -baz -> foo +[ΑΓΩ]: /φου + +[αγω] . -
                            -

                            bar -baz -foo

                            -
                            +

                            αγω

                            ```````````````````````````````` -Laziness only applies to lines that would have been continuations of -paragraphs had they been prepended with [block quote markers]. -For example, the `> ` cannot be omitted in the second line of - -``` markdown -> foo -> --- -``` - -without changing the meaning: +Here is a link reference definition with no corresponding link. +It contributes nothing to the document. ```````````````````````````````` example -> foo ---- +[foo]: /url . -
                            -

                            foo

                            -
                            -
                            ```````````````````````````````` -Similarly, if we omit the `> ` in the second line of - -``` markdown -> - foo -> - bar -``` - -then the block quote ends after the first line: +Here is another one: ```````````````````````````````` example -> - foo -- bar +[ +foo +]: /url +bar . -
                            -
                              -
                            • foo
                            • -
                            -
                            -
                              -
                            • bar
                            • -
                            +

                            bar

                            ```````````````````````````````` -For the same reason, we can't omit the `> ` in front of -subsequent lines of an indented or fenced code block: +This is not a link reference definition, because there are +[non-whitespace characters] after the title: ```````````````````````````````` example -> foo - bar +[foo]: /url "title" ok . -
                            -
                            foo
                            -
                            -
                            -
                            bar
                            -
                            +

                            [foo]: /url "title" ok

                            ```````````````````````````````` +This is a link reference definition, but it has no title: + ```````````````````````````````` example -> ``` -foo -``` +[foo]: /url +"title" ok . -
                            -
                            -
                            -

                            foo

                            -
                            +

                            "title" ok

                            ```````````````````````````````` -Note that in the following case, we have a [lazy -continuation line]: +This is not a link reference definition, because it is indented +four spaces: ```````````````````````````````` example -> foo - - bar + [foo]: /url "title" + +[foo] . -
                            -

                            foo -- bar

                            -
                            +
                            [foo]: /url "title"
                            +
                            +

                            [foo]

                            ```````````````````````````````` -To see why, note that in +This is not a link reference definition, because it occurs inside +a code block: -```markdown -> foo -> - bar +```````````````````````````````` example +``` +[foo]: /url ``` -the `- bar` is indented too far to start a list, and can't -be an indented code block because indented code blocks cannot -interrupt paragraphs, so it is [paragraph continuation text]. +[foo] +. +
                            [foo]: /url
                            +
                            +

                            [foo]

                            +```````````````````````````````` -A block quote can be empty: + +A [link reference definition] cannot interrupt a paragraph. ```````````````````````````````` example -> +Foo +[bar]: /baz + +[bar] . -
                            -
                            +

                            Foo +[bar]: /baz

                            +

                            [bar]

                            ```````````````````````````````` +However, it can directly follow other block elements, such as headings +and thematic breaks, and it need not be followed by a blank line. + ```````````````````````````````` example -> -> -> +# [Foo] +[foo]: /url +> bar . +

                            Foo

                            +

                            bar

                            ```````````````````````````````` - -A block quote can have initial or final blank lines: +```````````````````````````````` example +[foo]: /url +bar +=== +[foo] +. +

                            bar

                            +

                            foo

                            +```````````````````````````````` ```````````````````````````````` example -> -> foo -> +[foo]: /url +=== +[foo] . -
                            -

                            foo

                            -
                            +

                            === +foo

                            ```````````````````````````````` -A blank line always separates block quotes: +Several [link reference definitions] +can occur one after another, without intervening blank lines. ```````````````````````````````` example -> foo +[foo]: /foo-url "foo" +[bar]: /bar-url + "bar" +[baz]: /baz-url -> bar +[foo], +[bar], +[baz] . -
                            -

                            foo

                            -
                            -
                            -

                            bar

                            -
                            +

                            foo, +bar, +baz

                            ```````````````````````````````` -(Most current Markdown implementations, including John Gruber's -original `Markdown.pl`, will parse this example as a single block quote -with two paragraphs. But it seems better to allow the author to decide -whether two block quotes or one are wanted.) - -Consecutiveness means that if we put these block quotes together, -we get a single block quote: +[Link reference definitions] can occur +inside block containers, like lists and block quotations. They +affect the entire document, not just the container in which they +are defined: ```````````````````````````````` example -> foo -> bar +[foo] + +> [foo]: /url . +

                            foo

                            -

                            foo -bar

                            ```````````````````````````````` -To get a block quote with two paragraphs, use: +Whether something is a [link reference definition] is +independent of whether the link reference it defines is +used in the document. Thus, for example, the following +document contains just a link reference definition, and +no visible content: ```````````````````````````````` example -> foo -> -> bar +[foo]: /url . -
                            -

                            foo

                            -

                            bar

                            -
                            ```````````````````````````````` -Block quotes can interrupt paragraphs: +## Paragraphs + +A sequence of non-blank lines that cannot be interpreted as other +kinds of blocks forms a [paragraph](@). +The contents of the paragraph are the result of parsing the +paragraph's raw content as inlines. The paragraph's raw content +is formed by concatenating the lines and removing initial and final +[whitespace]. + +A simple example with two paragraphs: ```````````````````````````````` example -foo -> bar +aaa + +bbb . -

                            foo

                            -
                            -

                            bar

                            -
                            +

                            aaa

                            +

                            bbb

                            ```````````````````````````````` -In general, blank lines are not needed before or after block -quotes: +Paragraphs can contain multiple lines, but no blank lines: ```````````````````````````````` example -> aaa -*** -> bbb +aaa +bbb + +ccc +ddd . -
                            -

                            aaa

                            -
                            -
                            -
                            -

                            bbb

                            -
                            +

                            aaa +bbb

                            +

                            ccc +ddd

                            ```````````````````````````````` -However, because of laziness, a blank line is needed between -a block quote and a following paragraph: +Multiple blank lines between paragraph have no effect: ```````````````````````````````` example -> bar -baz +aaa + + +bbb . -
                            -

                            bar -baz

                            -
                            +

                            aaa

                            +

                            bbb

                            ```````````````````````````````` -```````````````````````````````` example -> bar +Leading spaces are skipped: -baz +```````````````````````````````` example + aaa + bbb . -
                            -

                            bar

                            -
                            -

                            baz

                            +

                            aaa +bbb

                            ```````````````````````````````` +Lines after the first may be indented any amount, since indented +code blocks cannot interrupt paragraphs. + ```````````````````````````````` example -> bar -> -baz +aaa + bbb + ccc . -
                            -

                            bar

                            -
                            -

                            baz

                            +

                            aaa +bbb +ccc

                            ```````````````````````````````` -It is a consequence of the Laziness rule that any number -of initial `>`s may be omitted on a continuation line of a -nested block quote: +However, the first line may be indented at most three spaces, +or an indented code block will be triggered: ```````````````````````````````` example -> > > foo -bar + aaa +bbb . -
                            -
                            -
                            -

                            foo -bar

                            -
                            -
                            -
                            +

                            aaa +bbb

                            ```````````````````````````````` ```````````````````````````````` example ->>> foo -> bar ->>baz + aaa +bbb . -
                            -
                            -
                            -

                            foo -bar -baz

                            -
                            -
                            -
                            +
                            aaa
                            +
                            +

                            bbb

                            ```````````````````````````````` -When including an indented code block in a block quote, -remember that the [block quote marker] includes -both the `>` and a following space. So *five spaces* are needed after -the `>`: +Final spaces are stripped before inline parsing, so a paragraph +that ends with two or more spaces will not end with a [hard line +break]: ```````````````````````````````` example -> code - -> not code +aaa +bbb . -
                            -
                            code
                            -
                            -
                            -
                            -

                            not code

                            -
                            +

                            aaa
                            +bbb

                            ```````````````````````````````` +## Blank lines -## List items +[Blank lines] between block-level elements are ignored, +except for the role they play in determining whether a [list] +is [tight] or [loose]. -A [list marker](@) is a -[bullet list marker] or an [ordered list marker]. +Blank lines at the beginning and end of the document are also ignored. -A [bullet list marker](@) -is a `-`, `+`, or `*` character. +```````````````````````````````` example + -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.) +aaa + -The following rules define [list items]: +# aaa -1. **Basic case.** If a sequence of lines *Ls* constitute a sequence of - blocks *Bs* starting with a [non-whitespace character], and *M* is a - list 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 - (bullet or ordered) is determined by the type of its list marker. - If the list item is ordered, then it is also assigned a start - number, based on the ordered list marker. + +. +

                            aaa

                            +

                            aaa

                            +```````````````````````````````` - Exceptions: - 1. When the first list item in a [list] interrupts - a paragraph---that is, when it starts on a line that would - otherwise count as [paragraph continuation text]---then (a) - the lines *Ls* must not begin with a blank line, and (b) if - the list item is ordered, the start number must be 1. - 2. If any line is a [thematic break][thematic breaks] then - that line is not a list item. -For example, let *Ls* be the lines +# Container blocks -```````````````````````````````` example -A paragraph -with two lines. +A [container block](#container-blocks) is a block that has other +blocks as its contents. There are two basic kinds of container blocks: +[block quotes] and [list items]. +[Lists] are meta-containers for [list items]. - indented code +We define the syntax for container blocks recursively. The general +form of the definition is: -> A block quote. -. -

                            A paragraph -with two lines.

                            -
                            indented code
                            -
                            -
                            -

                            A block quote.

                            -
                            -```````````````````````````````` +> If X is a sequence of blocks, then the result of +> transforming X in such-and-such a way is a container of type Y +> with these blocks as its content. +So, we explain what counts as a block quote or list item by explaining +how these can be *generated* from their contents. This should suffice +to define the syntax, although it does not give a recipe for *parsing* +these constructions. (A recipe is provided below in the section entitled +[A parsing strategy](#appendix-a-parsing-strategy).) -And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says -that the following is an ordered list item with start number 1, -and the same contents as *Ls*: +## Block quotes -```````````````````````````````` example -1. A paragraph - with two lines. +A [block quote marker](@) +consists of 0-3 spaces of initial indent, plus (a) the character `>` together +with a following space, or (b) a single character `>` not followed by a space. - indented code +The following rules define [block quotes]: - > A block quote. -. -
                              -
                            1. -

                              A paragraph -with two lines.

                              -
                              indented code
                              -
                              -
                              -

                              A block quote.

                              -
                              -
                            2. -
                            -```````````````````````````````` +1. **Basic case.** If a string of lines *Ls* constitute a sequence + of blocks *Bs*, then the result of prepending a [block quote + marker] to the beginning of each line in *Ls* + is a [block quote](#block-quotes) containing *Bs*. +2. **Laziness.** If a string of lines *Ls* constitute a [block + quote](#block-quotes) with contents *Bs*, then the result of deleting + the initial [block quote marker] from one or + more lines in which the next [non-whitespace character] after the [block + quote marker] is [paragraph continuation + text] is a block quote with *Bs* as its content. + [Paragraph continuation text](@) is text + that will be parsed as part of the content of a paragraph, but does + not occur at the beginning of the paragraph. -The most important thing to notice is that the position of -the text after the list marker determines how much indentation -is needed in subsequent blocks in the list item. If the list -marker takes up two spaces, and there are three spaces between -the list marker and the next [non-whitespace character], then blocks -must be indented five spaces in order to fall under the list -item. +3. **Consecutiveness.** A document cannot contain two [block + quotes] in a row unless there is a [blank line] between them. -Here are some examples showing how far content must be indented to be -put under the list item: +Nothing else counts as a [block quote](#block-quotes). -```````````````````````````````` example -- one +Here is a simple example: - two +```````````````````````````````` example +> # Foo +> bar +> baz . -
                              -
                            • one
                            • -
                            -

                            two

                            +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            ```````````````````````````````` -```````````````````````````````` example -- one +The spaces after the `>` characters can be omitted: - two +```````````````````````````````` example +># Foo +>bar +> baz . -
                              -
                            • -

                              one

                              -

                              two

                              -
                            • -
                            +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            ```````````````````````````````` -```````````````````````````````` example - - one +The `>` characters can be indented 1-3 spaces: - two +```````````````````````````````` example + > # Foo + > bar + > baz . -
                              -
                            • one
                            • -
                            -
                             two
                            -
                            +
                            +

                            Foo

                            +

                            bar +baz

                            +
                            ```````````````````````````````` -```````````````````````````````` example - - one +Four spaces gives us a code block: - two +```````````````````````````````` example + > # Foo + > bar + > baz . -
                              -
                            • -

                              one

                              -

                              two

                              -
                            • -
                            +
                            > # Foo
                            +> bar
                            +> baz
                            +
                            ```````````````````````````````` -It is tempting to think of this in terms of columns: the continuation -blocks must be indented at least to the column of the first -[non-whitespace character] after the list marker. However, that is not quite right. -The spaces after the list marker determine how much relative indentation -is needed. Which column this indentation reaches will depend on -how the list item is embedded in other constructions, as shown by -this example: +The Laziness clause allows us to omit the `>` before +[paragraph continuation text]: ```````````````````````````````` example - > > 1. one ->> ->> two +> # Foo +> bar +baz .
                            -
                            -
                              -
                            1. -

                              one

                              -

                              two

                              -
                            2. -
                            -
                            +

                            Foo

                            +

                            bar +baz

                            ```````````````````````````````` -Here `two` occurs in the same column as the list marker `1.`, -but is actually contained in the list item, because there is -sufficient indentation after the last containing blockquote marker. - -The converse is also possible. In the following example, the word `two` -occurs far to the right of the initial text of the list item, `one`, but -it is not considered part of the list item, because it is not indented -far enough past the blockquote marker: +A block quote can contain some lazy and some non-lazy +continuation lines: ```````````````````````````````` example ->>- one ->> - > > two +> bar +baz +> foo .
                            -
                            -
                              -
                            • one
                            • -
                            -

                            two

                            -
                            +

                            bar +baz +foo

                            ```````````````````````````````` -Note that at least one space is needed between the list marker and -any following content, so these are not list items: +Laziness only applies to lines that would have been continuations of +paragraphs had they been prepended with [block quote markers]. +For example, the `> ` cannot be omitted in the second line of -```````````````````````````````` example --one +``` markdown +> foo +> --- +``` -2.two +without changing the meaning: + +```````````````````````````````` example +> foo +--- . -

                            -one

                            -

                            2.two

                            +
                            +

                            foo

                            +
                            +
                            ```````````````````````````````` -A list item may contain blocks that are separated by more than -one blank line. +Similarly, if we omit the `> ` in the second line of -```````````````````````````````` example -- foo +``` markdown +> - foo +> - bar +``` +then the block quote ends after the first line: - bar +```````````````````````````````` example +> - foo +- bar . +
                              -
                            • -

                              foo

                              -

                              bar

                              -
                            • +
                            • foo
                            • +
                            +
                            +
                              +
                            • bar
                            ```````````````````````````````` -A list item may contain any kind of block: +For the same reason, we can't omit the `> ` in front of +subsequent lines of an indented or fenced code block: ```````````````````````````````` example -1. foo - - ``` +> foo bar - ``` - - baz - - > bam . -
                              -
                            1. -

                              foo

                              +
                              +
                              foo
                              +
                              +
                              bar
                               
                              -

                              baz

                              +```````````````````````````````` + + +```````````````````````````````` example +> ``` +foo +``` +.
                              -

                              bam

                              +
                              -
                            2. -
                            +

                            foo

                            +
                            ```````````````````````````````` -A list item that contains an indented code block will preserve -empty lines within the code block verbatim. +Note that in the following case, we have a [lazy +continuation line]: ```````````````````````````````` example -- Foo - - bar +> foo + - bar +. +
                            +

                            foo +- bar

                            +
                            +```````````````````````````````` - baz -. -
                              -
                            • -

                              Foo

                              -
                              bar
                              +To see why, note that in
                               
                              +```markdown
                              +> foo
                              +>     - bar
                              +```
                               
                              -baz
                              -
                              -
                            • -
                            -```````````````````````````````` +the `- bar` is indented too far to start a list, and can't +be an indented code block because indented code blocks cannot +interrupt paragraphs, so it is [paragraph continuation text]. -Note that ordered list start numbers must be nine digits or less: +A block quote can be empty: ```````````````````````````````` example -123456789. ok +> . -
                              -
                            1. ok
                            2. -
                            +
                            +
                            ```````````````````````````````` ```````````````````````````````` example -1234567890. not ok +> +> +> . -

                            1234567890. not ok

                            +
                            +
                            ```````````````````````````````` -A start number may begin with 0s: +A block quote can have initial or final blank lines: ```````````````````````````````` example -0. ok +> +> foo +> . -
                              -
                            1. ok
                            2. -
                            +
                            +

                            foo

                            +
                            ```````````````````````````````` +A blank line always separates block quotes: + ```````````````````````````````` example -003. ok +> foo + +> bar . -
                              -
                            1. ok
                            2. -
                            +
                            +

                            foo

                            +
                            +
                            +

                            bar

                            +
                            ```````````````````````````````` -A start number may not be negative: +(Most current Markdown implementations, including John Gruber's +original `Markdown.pl`, will parse this example as a single block quote +with two paragraphs. But it seems better to allow the author to decide +whether two block quotes or one are wanted.) + +Consecutiveness means that if we put these block quotes together, +we get a single block quote: ```````````````````````````````` example --1. not ok +> foo +> bar . -

                            -1. not ok

                            +
                            +

                            foo +bar

                            +
                            ```````````````````````````````` - -2. **Item starting with indented code.** If a sequence of lines *Ls* - constitute a sequence of blocks *Bs* starting with an indented code - block, and *M* is a list marker of width *W* followed by - one space, then the result of prepending *M* and the following - space to the first line of *Ls*, and indenting subsequent lines of - *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. - If a line is empty, then it need not be indented. The type of the - list item (bullet or ordered) is determined by the type of its list - marker. If the list item is ordered, then it is also assigned a - start number, based on the ordered list marker. - -An indented code block will have to be indented four spaces beyond -the edge of the region where text will be included in the list item. -In the following case that is 6 spaces: +To get a block quote with two paragraphs, use: ```````````````````````````````` example -- foo - - bar +> foo +> +> bar . -
                              -
                            • +

                              foo

                              -
                              bar
                              -
                              -
                            • -
                            +

                            bar

                            +
                            ```````````````````````````````` -And in this case it is 11 spaces: +Block quotes can interrupt paragraphs: ```````````````````````````````` example - 10. foo - - bar +foo +> bar . -
                              -
                            1. foo

                              -
                              bar
                              -
                              -
                            2. -
                            +
                            +

                            bar

                            +
                            ```````````````````````````````` -If the *first* block in the list item is an indented code block, -then by rule #2, the contents must be indented *one* space after the -list marker: +In general, blank lines are not needed before or after block +quotes: ```````````````````````````````` example - indented code - -paragraph - - more code -. -
                            indented code
                            -
                            -

                            paragraph

                            -
                            more code
                            -
                            -```````````````````````````````` - - -```````````````````````````````` example -1. indented code - - paragraph - - more code -. -
                              -
                            1. -
                              indented code
                              -
                              -

                              paragraph

                              -
                              more code
                              -
                              -
                            2. -
                            -```````````````````````````````` - - -Note that an additional space indent is interpreted as space -inside the code block: - -```````````````````````````````` example -1. indented code - - paragraph - - more code +> aaa +*** +> bbb . -
                              -
                            1. -
                               indented code
                              -
                              -

                              paragraph

                              -
                              more code
                              -
                              -
                            2. -
                            +
                            +

                            aaa

                            +
                            +
                            +
                            +

                            bbb

                            +
                            ```````````````````````````````` -Note that rules #1 and #2 only apply to two cases: (a) cases -in which the lines to be included in a list item begin with a -[non-whitespace character], and (b) cases in which -they begin with an indented code -block. In a case like the following, where the first block begins with -a three-space indent, the rules do not allow us to form a list item by -indenting the whole thing and prepending a list marker: +However, because of laziness, a blank line is needed between +a block quote and a following paragraph: ```````````````````````````````` example - foo - -bar +> bar +baz . -

                            foo

                            -

                            bar

                            +
                            +

                            bar +baz

                            +
                            ```````````````````````````````` ```````````````````````````````` example -- foo +> bar - bar +baz . -
                              -
                            • foo
                            • -
                            +

                            bar

                            +
                            +

                            baz

                            ```````````````````````````````` -This is not a significant restriction, because when a block begins -with 1-3 spaces indent, the indentation can always be removed without -a change in interpretation, allowing rule #1 to be applied. So, in -the above case: - ```````````````````````````````` example -- foo - - bar +> bar +> +baz . -
                              -
                            • -

                              foo

                              +

                              bar

                              -
                            • -
                            + +

                            baz

                            ```````````````````````````````` -3. **Item starting with a blank line.** If a sequence of lines *Ls* - starting with a single [blank line] constitute a (possibly empty) - sequence of blocks *Bs*, not separated from each other by more than - one blank line, and *M* is a list marker of width *W*, - then the result of prepending *M* to the first line of *Ls*, and - indenting subsequent lines of *Ls* by *W + 1* spaces, is a list - item with *Bs* as its contents. - If a line is empty, then it need not be indented. The type of the - list item (bullet or ordered) is determined by the type of its list - marker. If the list item is ordered, then it is also assigned a - start number, based on the ordered list marker. - -Here are some list items that start with a blank line but are not empty: +It is a consequence of the Laziness rule that any number +of initial `>`s may be omitted on a continuation line of a +nested block quote: ```````````````````````````````` example -- - foo -- - ``` - bar - ``` -- - baz +> > > foo +bar . -
                              -
                            • foo
                            • -
                            • -
                              bar
                              -
                              -
                            • -
                            • -
                              baz
                              -
                              -
                            • -
                            +
                            +
                            +
                            +

                            foo +bar

                            +
                            +
                            +
                            ```````````````````````````````` -When the list item starts with a blank line, the number of spaces -following the list marker doesn't change the required indentation: ```````````````````````````````` example -- - foo +>>> foo +> bar +>>baz . -
                              -
                            • foo
                            • -
                            +
                            +
                            +
                            +

                            foo +bar +baz

                            +
                            +
                            +
                            ```````````````````````````````` -A list item can begin with at most one blank line. -In the following example, `foo` is not part of the list -item: +When including an indented code block in a block quote, +remember that the [block quote marker] includes +both the `>` and a following space. So *five spaces* are needed after +the `>`: ```````````````````````````````` example -- +> code - foo +> not code . -
                              -
                            • -
                            -

                            foo

                            +
                            +
                            code
                            +
                            +
                            +
                            +

                            not code

                            +
                            ```````````````````````````````` -Here is an empty bullet list item: -```````````````````````````````` example -- foo -- -- bar -. -
                              -
                            • foo
                            • -
                            • -
                            • bar
                            • -
                            -```````````````````````````````` +## List items +A [list marker](@) is a +[bullet list marker] or an [ordered list marker]. -It does not matter whether there are spaces following the [list marker]: +A [bullet list marker](@) +is a `-`, `+`, or `*` character. -```````````````````````````````` example -- foo -- -- bar -. -
                              -
                            • foo
                            • -
                            • -
                            • bar
                            • -
                            -```````````````````````````````` +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.) +The following rules define [list items]: -Here is an empty ordered list item: +1. **Basic case.** If a sequence of lines *Ls* constitute a sequence of + blocks *Bs* starting with a [non-whitespace character], and *M* is a + list 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 + (bullet or ordered) is determined by the type of its list marker. + If the list item is ordered, then it is also assigned a start + number, based on the ordered list marker. -```````````````````````````````` example -1. foo -2. -3. bar -. -
                              -
                            1. foo
                            2. -
                            3. -
                            4. bar
                            5. -
                            -```````````````````````````````` + Exceptions: + 1. When the first list item in a [list] interrupts + a paragraph---that is, when it starts on a line that would + otherwise count as [paragraph continuation text]---then (a) + the lines *Ls* must not begin with a blank line, and (b) if + the list item is ordered, the start number must be 1. + 2. If any line is a [thematic break][thematic breaks] then + that line is not a list item. -A list may start or end with an empty list item: +For example, let *Ls* be the lines ```````````````````````````````` example -* -. -
                              -
                            • -
                            -```````````````````````````````` - -However, an empty list item cannot interrupt a paragraph: - -```````````````````````````````` example -foo -* - -foo -1. -. -

                            foo -*

                            -

                            foo -1.

                            -```````````````````````````````` - - -4. **Indentation.** If a sequence of lines *Ls* constitutes a list item - according to rule #1, #2, or #3, then the result of indenting each line - of *Ls* by 1-3 spaces (the same for each line) also constitutes a - list item with the same contents and attributes. If a line is - empty, then it need not be indented. - -Indented one space: - -```````````````````````````````` example - 1. A paragraph - with two lines. +A paragraph +with two lines. - indented code + indented code - > A block quote. +> A block quote. . -
                              -
                            1. A paragraph with two lines.

                              indented code
                              @@ -4382,20 +4135,20 @@ with two lines.

                              A block quote.

                              -
                            2. -
                            ```````````````````````````````` -Indented two spaces: +And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says +that the following is an ordered list item with start number 1, +and the same contents as *Ls*: ```````````````````````````````` example - 1. A paragraph - with two lines. +1. A paragraph + with two lines. - indented code + indented code - > A block quote. + > A block quote. .
                            1. @@ -4411,658 +4164,750 @@ with two lines.

                              ```````````````````````````````` -Indented three spaces: +The most important thing to notice is that the position of +the text after the list marker determines how much indentation +is needed in subsequent blocks in the list item. If the list +marker takes up two spaces, and there are three spaces between +the list marker and the next [non-whitespace character], then blocks +must be indented five spaces in order to fall under the list +item. -```````````````````````````````` example - 1. A paragraph - with two lines. +Here are some examples showing how far content must be indented to be +put under the list item: - indented code +```````````````````````````````` example +- one - > A block quote. + two . -
                                -
                              1. -

                                A paragraph -with two lines.

                                -
                                indented code
                                -
                                -
                                -

                                A block quote.

                                -
                                -
                              2. -
                              +
                                +
                              • one
                              • +
                              +

                              two

                              ```````````````````````````````` -Four spaces indent gives a code block: - ```````````````````````````````` example - 1. A paragraph - with two lines. - - indented code +- one - > A block quote. + two . -
                              1.  A paragraph
                              -    with two lines.
                              -
                              -        indented code
                              -
                              -    > A block quote.
                              -
                              +
                                +
                              • +

                                one

                                +

                                two

                                +
                              • +
                              ```````````````````````````````` - -5. **Laziness.** If a string of lines *Ls* constitute a [list - item](#list-items) with contents *Bs*, then the result of deleting - some or all of the indentation from one or more lines in which the - next [non-whitespace character] after the indentation is - [paragraph continuation text] is a - list item with the same contents and attributes. The unindented - lines are called - [lazy continuation line](@)s. - -Here is an example with [lazy continuation lines]: - ```````````````````````````````` example - 1. A paragraph -with two lines. - - indented code + - one - > A block quote. + two . -
                                -
                              1. -

                                A paragraph -with two lines.

                                -
                                indented code
                                +
                                  +
                                • one
                                • +
                                +
                                 two
                                 
                                -
                                -

                                A block quote.

                                -
                                -
                              2. -
                              ```````````````````````````````` -Indentation can be partially deleted: - ```````````````````````````````` example - 1. A paragraph - with two lines. + - one + + two . -
                                -
                              1. A paragraph -with two lines.
                              2. -
                              +
                                +
                              • +

                                one

                                +

                                two

                                +
                              • +
                              ```````````````````````````````` -These examples show how laziness can work in nested structures: +It is tempting to think of this in terms of columns: the continuation +blocks must be indented at least to the column of the first +[non-whitespace character] after the list marker. However, that is not quite right. +The spaces after the list marker determine how much relative indentation +is needed. Which column this indentation reaches will depend on +how the list item is embedded in other constructions, as shown by +this example: ```````````````````````````````` example -> 1. > Blockquote -continued here. + > > 1. one +>> +>> two .
                              +
                              1. -
                                -

                                Blockquote -continued here.

                                -
                                +

                                one

                                +

                                two

                              +
                              ```````````````````````````````` +Here `two` occurs in the same column as the list marker `1.`, +but is actually contained in the list item, because there is +sufficient indentation after the last containing blockquote marker. + +The converse is also possible. In the following example, the word `two` +occurs far to the right of the initial text of the list item, `one`, but +it is not considered part of the list item, because it is not indented +far enough past the blockquote marker: + ```````````````````````````````` example -> 1. > Blockquote -> continued here. +>>- one +>> + > > two .
                              -
                                -
                              1. -

                                Blockquote -continued here.

                                +
                                  +
                                • one
                                • +
                                +

                                two

                                -
                              2. -
                              ```````````````````````````````` +Note that at least one space is needed between the list marker and +any following content, so these are not list items: + +```````````````````````````````` example +-one -6. **That's all.** Nothing that is not counted as a list item by rules - #1--5 counts as a [list item](#list-items). +2.two +. +

                              -one

                              +

                              2.two

                              +```````````````````````````````` -The rules for sublists follow from the general rules -[above][List items]. A sublist must be indented the same number -of spaces a paragraph would need to be in order to be included -in the list item. -So, in this case we need two spaces indent: +A list item may contain blocks that are separated by more than +one blank line. ```````````````````````````````` example - foo - - bar - - baz - - boo + + + bar .
                                -
                              • foo -
                                  -
                                • bar -
                                    -
                                  • baz -
                                      -
                                    • boo
                                    • -
                                    -
                                  • -
                                  -
                                • -
                                +
                              • +

                                foo

                                +

                                bar

                              ```````````````````````````````` -One is not enough: +A list item may contain any kind of block: ```````````````````````````````` example -- foo - - bar - - baz - - boo -. -
                                -
                              • foo
                              • -
                              • bar
                              • -
                              • baz
                              • -
                              • boo
                              • -
                              -```````````````````````````````` +1. foo + ``` + bar + ``` -Here we need four, because the list marker is wider: + baz -```````````````````````````````` example -10) foo - - bar + > bam . -
                                -
                              1. foo -
                                  -
                                • bar
                                • -
                                +
                                  +
                                1. +

                                  foo

                                  +
                                  bar
                                  +
                                  +

                                  baz

                                  +
                                  +

                                  bam

                                  +
                                ```````````````````````````````` -Three is not enough: +A list item that contains an indented code block will preserve +empty lines within the code block verbatim. ```````````````````````````````` example -10) foo - - bar -. -
                                  -
                                1. foo
                                2. -
                                -
                                  -
                                • bar
                                • -
                                -```````````````````````````````` +- Foo + bar -A list may be the first block in a list item: -```````````````````````````````` example -- - foo + baz .
                                • -
                                    -
                                  • foo
                                  • -
                                  +

                                  Foo

                                  +
                                  bar
                                  +
                                  +
                                  +baz
                                  +
                                ```````````````````````````````` +Note that ordered list start numbers must be nine digits or less: ```````````````````````````````` example -1. - 2. foo +123456789. ok . -
                                  -
                                1. -
                                    -
                                  • -
                                      -
                                    1. foo
                                    2. -
                                    -
                                  • -
                                  -
                                2. +
                                    +
                                  1. ok
                                  ```````````````````````````````` -A list item can contain a heading: - ```````````````````````````````` example -- # Foo -- Bar - --- - baz +1234567890. not ok . -
                                    -
                                  • -

                                    Foo

                                    -
                                  • -
                                  • -

                                    Bar

                                    -baz
                                  • -
                                  +

                                  1234567890. not ok

                                  ```````````````````````````````` -### Motivation - -John Gruber's Markdown spec says the following about list items: - -1. "List markers typically start at the left margin, but may be indented - by up to three spaces. List markers must be followed by one or more - spaces or a tab." +A start number may begin with 0s: -2. "To make lists look nice, you can wrap items with hanging indents.... - But if you don't want to, you don't have to." +```````````````````````````````` example +0. ok +. +
                                    +
                                  1. ok
                                  2. +
                                  +```````````````````````````````` -3. "List items may consist of multiple paragraphs. Each subsequent - paragraph in a list item must be indented by either 4 spaces or one - tab." -4. "It looks nice if you indent every line of the subsequent paragraphs, - but here again, Markdown will allow you to be lazy." +```````````````````````````````` example +003. ok +. +
                                    +
                                  1. ok
                                  2. +
                                  +```````````````````````````````` -5. "To put a blockquote within a list item, the blockquote's `>` - delimiters need to be indented." -6. "To put a code block within a list item, the code block needs to be - indented twice — 8 spaces or two tabs." +A start number may not be negative: -These rules specify that a paragraph under a list item must be indented -four spaces (presumably, from the left margin, rather than the start of -the list marker, but this is not said), and that code under a list item -must be indented eight spaces instead of the usual four. They also say -that a block quote must be indented, but not by how much; however, the -example given has four spaces indentation. Although nothing is said -about other kinds of block-level content, it is certainly reasonable to -infer that *all* block elements under a list item, including other -lists, must be indented four spaces. This principle has been called the -*four-space rule*. +```````````````````````````````` example +-1. not ok +. +

                                  -1. not ok

                                  +```````````````````````````````` -The four-space rule is clear and principled, and if the reference -implementation `Markdown.pl` had followed it, it probably would have -become the standard. However, `Markdown.pl` allowed paragraphs and -sublists to start with only two spaces indentation, at least on the -outer level. Worse, its behavior was inconsistent: a sublist of an -outer-level list needed two spaces indentation, but a sublist of this -sublist needed three spaces. It is not surprising, then, that different -implementations of Markdown have developed very different rules for -determining what comes under a list item. (Pandoc and python-Markdown, -for example, stuck with Gruber's syntax description and the four-space -rule, while discount, redcarpet, marked, PHP Markdown, and others -followed `Markdown.pl`'s behavior more closely.) -Unfortunately, given the divergences between implementations, there -is no way to give a spec for list items that will be guaranteed not -to break any existing documents. However, the spec given here should -correctly handle lists formatted with either the four-space rule or -the more forgiving `Markdown.pl` behavior, provided they are laid out -in a way that is natural for a human to read. -The strategy here is to let the width and indentation of the list marker -determine the indentation necessary for blocks to fall under the list -item, rather than having a fixed and arbitrary number. The writer can -think of the body of the list item as a unit which gets indented to the -right enough to fit the list marker (and any indentation on the list -marker). (The laziness rule, #5, then allows continuation lines to be -unindented if needed.) +2. **Item starting with indented code.** If a sequence of lines *Ls* + constitute a sequence of blocks *Bs* starting with an indented code + block, and *M* is a list marker of width *W* followed by + one space, then the result of prepending *M* and the following + space to the first line of *Ls*, and indenting subsequent lines of + *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents. + If a line is empty, then it need not be indented. The type of the + list item (bullet or ordered) is determined by the type of its list + marker. If the list item is ordered, then it is also assigned a + start number, based on the ordered list marker. -This rule is superior, we claim, to any rule requiring a fixed level of -indentation from the margin. The four-space rule is clear but -unnatural. It is quite unintuitive that +An indented code block will have to be indented four spaces beyond +the edge of the region where text will be included in the list item. +In the following case that is 6 spaces: -``` markdown +```````````````````````````````` example - foo - bar - - - baz -``` - -should be parsed as two lists with an intervening paragraph, - -``` html -
                                    -
                                  • foo
                                  • -
                                  -

                                  bar

                                  -
                                    -
                                  • baz
                                  • -
                                  -``` - -as the four-space rule demands, rather than a single list, - -``` html + bar +.
                                  • foo

                                    -

                                    bar

                                    -
                                      -
                                    • baz
                                    • -
                                    +
                                    bar
                                    +
                                  -``` - -The choice of four spaces is arbitrary. It can be learned, but it is -not likely to be guessed, and it trips up beginners regularly. - -Would it help to adopt a two-space rule? The problem is that such -a rule, together with the rule allowing 1--3 spaces indentation of the -initial list marker, allows text that is indented *less than* the -original list marker to be included in the list item. For example, -`Markdown.pl` parses +```````````````````````````````` -``` markdown - - one - two -``` +And in this case it is 11 spaces: -as a single list item, with `two` a continuation paragraph: +```````````````````````````````` example + 10. foo -``` html -
                                    + bar +. +
                                    1. -

                                      one

                                      -

                                      two

                                      +

                                      foo

                                      +
                                      bar
                                      +
                                    2. -
                                  -``` +
                                +```````````````````````````````` -and similarly -``` markdown -> - one -> -> two -``` +If the *first* block in the list item is an indented code block, +then by rule #2, the contents must be indented *one* space after the +list marker: -as +```````````````````````````````` example + indented code -``` html -
                                -
                                  -
                                • -

                                  one

                                  -

                                  two

                                  +paragraph + + more code +. +
                                  indented code
                                  +
                                  +

                                  paragraph

                                  +
                                  more code
                                  +
                                  +```````````````````````````````` + + +```````````````````````````````` example +1. indented code + + paragraph + + more code +. +
                                    +
                                  1. +
                                    indented code
                                    +
                                    +

                                    paragraph

                                    +
                                    more code
                                    +
                                  2. +
                                  +```````````````````````````````` + + +Note that an additional space indent is interpreted as space +inside the code block: + +```````````````````````````````` example +1. indented code + + paragraph + + more code +. +
                                    +
                                  1. +
                                     indented code
                                    +
                                    +

                                    paragraph

                                    +
                                    more code
                                    +
                                    +
                                  2. +
                                  +```````````````````````````````` + + +Note that rules #1 and #2 only apply to two cases: (a) cases +in which the lines to be included in a list item begin with a +[non-whitespace character], and (b) cases in which +they begin with an indented code +block. In a case like the following, where the first block begins with +a three-space indent, the rules do not allow us to form a list item by +indenting the whole thing and prepending a list marker: + +```````````````````````````````` example + foo + +bar +. +

                                  foo

                                  +

                                  bar

                                  +```````````````````````````````` + + +```````````````````````````````` example +- foo + + bar +. +
                                    +
                                  • foo
                                  -
                                -``` +

                                bar

                                +```````````````````````````````` -This is extremely unintuitive. -Rather than requiring a fixed indent from the margin, we could require -a fixed indent (say, two spaces, or even one space) from the list marker (which -may itself be indented). This proposal would remove the last anomaly -discussed. Unlike the spec presented above, it would count the following -as a list item with a subparagraph, even though the paragraph `bar` -is not indented as far as the first paragraph `foo`: +This is not a significant restriction, because when a block begins +with 1-3 spaces indent, the indentation can always be removed without +a change in interpretation, allowing rule #1 to be applied. So, in +the above case: -``` markdown - 10. foo +```````````````````````````````` example +- foo - bar -``` + bar +. +
                                  +
                                • +

                                  foo

                                  +

                                  bar

                                  +
                                • +
                                +```````````````````````````````` -Arguably this text does read like a list item with `bar` as a subparagraph, -which may count in favor of the proposal. However, on this proposal indented -code would have to be indented six spaces after the list marker. And this -would break a lot of existing Markdown, which has the pattern: -``` markdown -1. foo +3. **Item starting with a blank line.** If a sequence of lines *Ls* + starting with a single [blank line] constitute a (possibly empty) + sequence of blocks *Bs*, not separated from each other by more than + one blank line, and *M* is a list marker of width *W*, + then the result of prepending *M* to the first line of *Ls*, and + indenting subsequent lines of *Ls* by *W + 1* spaces, is a list + item with *Bs* as its contents. + If a line is empty, then it need not be indented. The type of the + list item (bullet or ordered) is determined by the type of its list + marker. If the list item is ordered, then it is also assigned a + start number, based on the ordered list marker. - indented code -``` +Here are some list items that start with a blank line but are not empty: -where the code is indented eight spaces. The spec above, by contrast, will -parse this text as expected, since the code block's indentation is measured -from the beginning of `foo`. +```````````````````````````````` example +- + foo +- + ``` + bar + ``` +- + baz +. +
                                  +
                                • foo
                                • +
                                • +
                                  bar
                                  +
                                  +
                                • +
                                • +
                                  baz
                                  +
                                  +
                                • +
                                +```````````````````````````````` -The one case that needs special treatment is a list item that *starts* -with indented code. How much indentation is required in that case, since -we don't have a "first paragraph" to measure from? Rule #2 simply stipulates -that in such cases, we require one space indentation from the list marker -(and then the normal four spaces for the indented code). This will match the -four-space rule in cases where the list marker plus its initial indentation -takes four spaces (a common case), but diverge in other cases. +When the list item starts with a blank line, the number of spaces +following the list marker doesn't change the required indentation: -## Lists +```````````````````````````````` example +- + foo +. +
                                  +
                                • foo
                                • +
                                +```````````````````````````````` -A [list](@) is a sequence of one or more -list items [of the same type]. The list items -may be separated by any number of blank lines. -Two list items are [of the same type](@) -if they begin with a [list marker] of the same type. -Two list markers are of the -same type if (a) they are bullet list markers using the same character -(`-`, `+`, or `*`) or (b) they are ordered list numbers with the same -delimiter (either `.` or `)`). +A list item can begin with at most one blank line. +In the following example, `foo` is not part of the list +item: -A list is an [ordered list](@) -if its constituent list items begin with -[ordered list markers], and a -[bullet list](@) if its constituent list -items begin with [bullet list markers]. +```````````````````````````````` example +- -The [start number](@) -of an [ordered list] is determined by the list number of -its initial list item. The numbers of subsequent list items are -disregarded. + foo +. +
                                  +
                                • +
                                +

                                foo

                                +```````````````````````````````` -A list is [loose](@) if any of its constituent -list items are separated by blank lines, or if any of its constituent -list items directly contain two block-level elements with a blank line -between them. Otherwise a list is [tight](@). -(The difference in HTML output is that paragraphs in a loose list are -wrapped in `

                                ` tags, while paragraphs in a tight list are not.) -Changing the bullet or ordered list delimiter starts a new list: +Here is an empty bullet list item: ```````````````````````````````` example - foo +- - bar -+ baz .

                                • foo
                                • +
                                • bar
                                +```````````````````````````````` + + +It does not matter whether there are spaces following the [list marker]: + +```````````````````````````````` example +- foo +- +- bar +.
                                  -
                                • baz
                                • +
                                • foo
                                • +
                                • +
                                • bar
                                ```````````````````````````````` +Here is an empty ordered list item: + ```````````````````````````````` example 1. foo -2. bar -3) baz +2. +3. bar .
                                1. foo
                                2. +
                                3. bar
                                -
                                  -
                                1. baz
                                2. -
                                ```````````````````````````````` -In CommonMark, a list can interrupt a paragraph. That is, -no blank line is needed to separate a paragraph from a following -list: +A list may start or end with an empty list item: ```````````````````````````````` example -Foo -- bar -- baz +* . -

                                Foo

                                  -
                                • bar
                                • -
                                • baz
                                • +
                                ```````````````````````````````` -`Markdown.pl` does not allow this, through fear of triggering a list -via a numeral in a hard-wrapped line: +However, an empty list item cannot interrupt a paragraph: -``` markdown -The number of windows in my house is -14. The number of doors is 6. -``` +```````````````````````````````` example +foo +* -Oddly, though, `Markdown.pl` *does* allow a blockquote to -interrupt a paragraph, even though the same considerations might -apply. +foo +1. +. +

                                foo +*

                                +

                                foo +1.

                                +```````````````````````````````` -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: -``` markdown -I need to buy -- new shoes -- a coat -- a plane ticket -``` +4. **Indentation.** If a sequence of lines *Ls* constitutes a list item + according to rule #1, #2, or #3, then the result of indenting each line + of *Ls* by 1-3 spaces (the same for each line) also constitutes a + list item with the same contents and attributes. If a line is + empty, then it need not be indented. -Second, we are attracted to a +Indented one space: -> [principle of uniformity](@): -> if a chunk of text has a certain -> meaning, it will continue to have the same meaning when put into a -> container block (such as a list item or blockquote). +```````````````````````````````` example + 1. A paragraph + with two lines. -(Indeed, the spec for [list items] and [block quotes] presupposes -this principle.) This principle implies that if + indented code -``` markdown - * I need to buy - - new shoes - - a coat - - a plane ticket -``` + > A block quote. +. +
                                  +
                                1. +

                                  A paragraph +with two lines.

                                  +
                                  indented code
                                  +
                                  +
                                  +

                                  A block quote.

                                  +
                                  +
                                2. +
                                +```````````````````````````````` -is a list item containing a paragraph followed by a nested sublist, -as all Markdown implementations agree it is (though the paragraph -may be rendered without `

                                ` tags, since the list is "tight"), -then -``` markdown -I need to buy -- new shoes -- a coat -- a plane ticket -``` +Indented two spaces: -by itself should be a paragraph followed by a nested sublist. +```````````````````````````````` example + 1. A paragraph + with two lines. -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.) + indented code + + > A block quote. +. +

                                  +
                                1. +

                                  A paragraph +with two lines.

                                  +
                                  indented code
                                  +
                                  +
                                  +

                                  A block quote.

                                  +
                                  +
                                2. +
                                +```````````````````````````````` + + +Indented three spaces: + +```````````````````````````````` example + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                                  +
                                1. +

                                  A paragraph +with two lines.

                                  +
                                  indented code
                                  +
                                  +
                                  +

                                  A block quote.

                                  +
                                  +
                                2. +
                                +```````````````````````````````` + + +Four spaces indent gives a code block: + +```````````````````````````````` example + 1. A paragraph + with two lines. + + indented code + + > A block quote. +. +
                                1.  A paragraph
                                +    with two lines.
                                +
                                +        indented code
                                +
                                +    > A block quote.
                                +
                                +```````````````````````````````` + + + +5. **Laziness.** If a string of lines *Ls* constitute a [list + item](#list-items) with contents *Bs*, then the result of deleting + some or all of the indentation from one or more lines in which the + next [non-whitespace character] after the indentation is + [paragraph continuation text] is a + list item with the same contents and attributes. The unindented + lines are called + [lazy continuation line](@)s. -In order to solve of unwanted lists in paragraphs with -hard-wrapped numerals, we allow only lists starting with `1` to -interrupt paragraphs. Thus, +Here is an example with [lazy continuation lines]: ```````````````````````````````` example -The number of windows in my house is -14. The number of doors is 6. -. -

                                The number of windows in my house is -14. The number of doors is 6.

                                -```````````````````````````````` + 1. A paragraph +with two lines. -We may still get an unintended result in cases like + indented code -```````````````````````````````` example -The number of windows in my house is -1. The number of doors is 6. + > A block quote. . -

                                The number of windows in my house is

                                  -
                                1. The number of doors is 6.
                                2. +
                                3. +

                                  A paragraph +with two lines.

                                  +
                                  indented code
                                  +
                                  +
                                  +

                                  A block quote.

                                  +
                                  +
                                ```````````````````````````````` -but this rule should prevent most spurious list captures. -There can be any number of blank lines between items: +Indentation can be partially deleted: ```````````````````````````````` example -- foo + 1. A paragraph + with two lines. +. +
                                  +
                                1. A paragraph +with two lines.
                                2. +
                                +```````````````````````````````` -- bar +These examples show how laziness can work in nested structures: -- baz +```````````````````````````````` example +> 1. > Blockquote +continued here. . -
                                  -
                                • -

                                  foo

                                  -
                                • +
                                  +
                                  1. -

                                    bar

                                    +
                                    +

                                    Blockquote +continued here.

                                    +
                                  2. +
                                  +
                                  +```````````````````````````````` + + +```````````````````````````````` example +> 1. > Blockquote +> continued here. +. +
                                  +
                                  1. -

                                    baz

                                    +
                                    +

                                    Blockquote +continued here.

                                    +
                                  2. -
                                +
                              + ```````````````````````````````` + + +6. **That's all.** Nothing that is not counted as a list item by rules + #1--5 counts as a [list item](#list-items). + +The rules for sublists follow from the general rules +[above][List items]. A sublist must be indented the same number +of spaces a paragraph would need to be in order to be included +in the list item. + +So, in this case we need two spaces indent: + ```````````````````````````````` example - foo - bar - baz - - - bim + - boo .